Relay-Version: version nyu B notes v1.6 9/18/89; site acf4.NYU.EDU From: lrb@rrivax.rri.uwo.ca (Lance R. Bailey) Date: 27 Aug 90 06:51 EDT Date-Received: 27 Aug 90 12:52 EDT Subject: schedular part 2 of 6 Message-ID: <911@ria.ccs.uwo.ca> Path: acf4!cmcl2!phri!rutgers!cs.utexas.edu!news-server.csri.toronto.edu!utgpu!watserv1!ria!rrivax.rri.uwo.ca!lrb Newsgroups: vmsnet.sources Organization: Robarts Research Institute -- London Canada Earth Sender: news@ria.ccs.uwo.ca Reply-To: lrb@rrivax.rri.uwo.ca Lines: 431 News-Software: VAX/VMS VNEWS 1.3-4 -+-+-+-+-+-+-+-+ START OF PART 2 -+-+-+-+-+-+-+-+ X * qv `5B-m`5D datafile `5B `5B-m`5D datafile .... `5D X */ X X/* X * may 29 1990, changed the check day to be day 0 and not the current day. X * in function addrec() when working out the year. X * this is because a persion could be looking at tommorow, or next week but X * book today and accidentally book NEXT YEAR! X * X * also, added a recaluation of leap year if we recalculate the year in the X * same function X */ X Xmain (argc, argv) X int argc; X char *argv`5B`5D; X`7B char *DataFile`5BMAXDATAFILE`5D; int DataFilePtr=0, DataFileCnt=0; X char *NAME; X int MasterFlags`5BMAXDATAFILE`5D; X unsigned DataDate = 0; X X long now; struct tm *tms; X X char messagebuff`5B78`5D; X int NOTDONE=1; X char WEEKCOMMANDS`5B82`5D; X char DAYCOMMANDS`5B82`5D; X char COMMANDLINE`5B82`5D, *clp; X int level = 0; X int i; X int weekshow = 1; X long PPID; X X X ++argv; --argc; /* vaxen require this */ X NAME = argv`5B0`5D; X ++argv; --argc; /* skip over argv`5B0`5D */ X X if (argc >= 1) X `7B if (!strcmp(*argv,"-s")) /* hidden flag to note spawned invocatio Vn */ X `7B PPID=getppid(); X ++argv; --argc; /* skip over flag */ X `7D X else PPID = 0; X `7D X X if (argc <= 0) X `7B fprintf(stderr,"usage %s `5B-m`5D datafile `5B `5B-m`5D datafile . V..`5D\n",NAME); X exit(127); X `7D X X X/* build list of datafiles */ X for (i=0;(argc && DataFileCnt< MAXDATAFILE);) X `7B if (!strcmp(*argv,"-m")) X `7B ++argv; --argc; MasterFlags`5BDataFileCnt`5D=1; `7D X else X `7B MasterFlags`5BDataFileCnt`5D=0; `7D X DataFile`5BDataFileCnt++`5D = *argv; X ++argv; --argc; X `7D X X if (MasterFlags`5BDataFilePtr`5D) X `7Bmstrcpy(WEEKCOMMANDS,MWEEKCOMMANDS);mstrcpy(DAYCOMMANDS,MDAYCOMMA VNDS);`7D X else X `7Bmstrcpy(WEEKCOMMANDS,SWEEKCOMMANDS);mstrcpy(DAYCOMMANDS,SDAYCOMMA VNDS);`7D X X if (DataFileCnt > 1) X `7Bstrcat(WEEKCOMMANDS," Change_data");strcat(DAYCOMMANDS," Change_da Vta");`7D X X signal(SIGINT,SIG_IGN); X initscr(); crmode(); raw(); X initmessage(); X initBlankOW(); X X newdata(&DataDate,DataFile`5BDataFilePtr`5D); /* set the date flag */ X NDAYS = readdata(daytimer,dates,DataFile`5BDataFilePtr`5D,NDAYS); X X OneDay=newwin(21,80,0,0); `20 X OneWeek=newwin(21,80,0,0); overwrite(BlankOW,OneWeek); X fillOW(DataFile`5BDataFilePtr`5D); X strcpy(COMMANDLINE,WEEKCOMMANDS); X X /* sprintf(messagebuff,"NDAYS is %d",NDAYS); message2(messagebuff); /* V */ X X X while (NOTDONE) X `7B char X; X X message1(COMMANDLINE); X noecho(); X = mvwgetch(Message,0,0); X = toupper(X); echo(); X X time (&now); tms = localtime(&now); X X if (newdata(&DataDate,DataFile`5BDataFilePtr`5D) `7C`7C X (day2julian(dates`5B0`5D) <= tms->tm_yday) V ) X `7B wstandout(Message); X message2(" Reading in data ....."); X wstandend(Message); X NDAYS = readdata(daytimer,dates,DataFile`5BDataFilePtr`5D,NDAYS) V; X if (weekshow) fillOW(DataFile`5BDataFilePtr`5D); X else fillOD(level,DataFile`5BDataFilePtr`5D); X `7D X X message2(" "); X X if (X=='\r' `7C`7CX=='\n' `7C`7CX==' ') X X = ' '; X else X `7B clp = strrchr(COMMANDLINE,X); X if (!clp) X = '0'; X else if (*(clp-1) != ' ') X = '0'; X `7D X X switch (X) X `7B case '?': X if (weekshow) online_help(0); X else online_help(1); X break; X X case 'q': case 'Q': X `7B WINDOW *COVERWIN; X X /* if there is a parent then this is spawned */ X if (PPID) X `7B COVERWIN = newwin(24,80,0,0); /* hide screen */ X /* attach to parent */ X lib$attach(&PPID); X delwin(COVERWIN); /* uncover -- majik redraw!! */ X `7D X else X `7B /* close up curses */ X wclear(OneDay); wclear(OneWeek); endwin(); X NOTDONE = 0; X `7D X `7D X break; X X case 'U': case 'u': X if (fillOD(level-1,DataFile`5BDataFilePtr`5D)) level--; X break; X X case 'd': case 'D': X if (fillOD(level+1,DataFile`5BDataFilePtr`5D)) level++; X break; X X case 't': case 'T': X CurrentDay++; X if (CurrentDay >= NDAYS) X `7Bif (NDAYS) CurrentDay = NDAYS-1; message2("End Of Fi Vle");`7D X else X `7Blevel=0;fillOD(level,DataFile`5BDataFilePtr`5D);`7D X break; X X case 'Y': case 'y': X CurrentDay--; X if (CurrentDay<0) X `7B CurrentDay = 0; message2("Start Of File"); `7D X else X `7Blevel=0;fillOD(level,DataFile`5BDataFilePtr`5D);`7D X break; X X case 'n': case 'N': X CurrentDay+=DAYS_ON_SCREEN; X if (CurrentDay >= NDAYS) X `7B CurrentDay -= DAYS_ON_SCREEN; X if (CurrentDay<0) CurrentDay = 0; X X message2("End Of File"); X `7D X fillOW(DataFile`5BDataFilePtr`5D); X break; X X case 'l': case 'L': X CurrentDay-=DAYS_ON_SCREEN; X if (CurrentDay<0) `7B CurrentDay = 0; message2("Start Of Fil Ve"); `7D X X fillOW(DataFile`5BDataFilePtr`5D); X break; X X case '1': X strcpy(COMMANDLINE,DAYCOMMANDS); X level = 0; fillOD(level,DataFile`5BDataFilePtr`5D); weekshow V=0; X break; X X case '5': X strcpy(COMMANDLINE,WEEKCOMMANDS); X fillOW(DataFile`5BDataFilePtr`5D); weekshow=1; X break; X X case 'e': case 'E': X if (changedata()) X `7B if (weekshow) fillOW(DataFile`5BDataFilePtr`5D); X else fillOD(level,DataFile`5BDataFilePtr`5D); X X wstandout(Message); X message2(" Writing new data ....."); X wstandend(Message); X writedata(daytimer,dates,NDAYS,&DataDate, X DataFile`5BDataFilePt Vr`5D); X message2(" "); X `7D X break; X X case 'p': case 'P': X print_sched(); X break; X X case 'c': case 'C': X `7B char savedate`5BDATESIZE+1`5D; X int savejulian; X X if (changedatafile(DataFile,&DataFilePtr,DataFileCnt, X MasterFlags)) X `7B DataDate = 0; X newdata(&DataDate,DataFile`5BDataFilePtr`5D); X X strcpy(savedate,dates`5BCurrentDay`5D); X savejulian = day2julian(savedate); X X NDAYS=readdata(daytimer,dates,DataFile`5BDataFilePtr`5D, VNDAYS); X if (NDAYS) X `7B if (savejulian < day2julian(dates`5B0`5D) ) X CurrentDay = 0; X else if (savejulian > day2julian(dates`5BNDAYS-1`5D) V) X CurrentDay = NDAYS-1; X `7D X else CurrentDay = 0; X X if (MasterFlags`5BDataFilePtr`5D) X `7B mstrcpy(WEEKCOMMANDS,MWEEKCOMMANDS); X mstrcpy(DAYCOMMANDS,MDAYCOMMANDS); X `7D X else X `7B mstrcpy(WEEKCOMMANDS,SWEEKCOMMANDS); X mstrcpy(DAYCOMMANDS,SDAYCOMMANDS); X `7D X X strcat(WEEKCOMMANDS," Change_data"); X strcat(DAYCOMMANDS," Change_data"); X X if (weekshow) X `7B fillOW(DataFile`5BDataFilePtr`5D); X strcpy(COMMANDLINE,WEEKCOMMANDS); X `7D X else X `7B fillOD(level,DataFile`5BDataFilePtr`5D); X strcpy(COMMANDLINE,DAYCOMMANDS); X `7D X X `7D X `7D break; X `20 X/* X * best way to redraw seem to be a complete shutdown of windows and restart X */ X case 'r': case 'R': X wclear(OneDay); wclear(OneWeek); X delwin(OneDay); delwin(OneWeek); delwin(Message); X endwin(); X X initscr(); crmode(); raw(); X initmessage(); initBlankOW(); X OneDay=newwin(21,80,0,0);`20 X OneWeek=newwin(21,80,0,0); overwrite(BlankOW,OneWeek); X X if (weekshow) `7Bwclear(OneWeek);fillOW(DataFile`5BDataFileP Vtr`5D);`7D X else `7Bwclear(OneDay);fillOD(level,DataFile`5BDataFilePtr`5 VD);`7D X break; X X case 's':case 'S': X shotime(); X break; X X case ' ': break; X X default: X message2("BAD CHOICE"); X break; X `7D X X `7D /* while (NOTDONE) */ X X exit(1); X X`7D X X X Xinitmessage() X`7B Message=newwin(3,80,21,0); X mvwaddstr(Message,0,0,"::::::::::::::::::::::::::::::::::::::::::::::::: V:::::::::::::::::::::::::::::::"); X`7D X X/* message 1 is the command line X * and to aid the user we highlight the first letter of each word X */ Xmessage1(S) X char *S; X`7B wmove(Message,1,0); wclrtoeol(Message); wmove(Message,1,0); X X while (*S) X `7B waddch(Message,*S); X if (*(S++) == ' ') wstandout(Message); X else wstandend(Message); X `7D X X wstandend(Message); X wrefresh(Message); X`7D X Xmessage2(S) X char *S; X`7B wmove(Message,2,0); wclrtoeol(Message); X mvwaddstr(Message,2,0,S); X wrefresh(Message); X`7D X X X X XinitBlankOW() X`7B BlankOW=newwin(21,80,0,0); X X mvwaddstr(BlankOW,0,0," - TO - V "); X mvwaddstr(BlankOW,1,0," V "); X X mvwaddstr(BlankOW, 2,0," -------- -------- ------- V -------- --------"); X mvwaddstr(BlankOW, 3,0,"001122334455 `7C `7C 001122334455 `7C 001122334 V455 `7C 001122334455 `7C `7C 001122334455"); X mvwaddstr(BlankOW, 4,0,"050505050505 `7C `7C 050505050505 `7C 050505050 V505 `7C 050505050505 `7C `7C 050505050505"); X mvwaddstr(BlankOW, 5,0,"------------------------------------------------ V------------------------------"); X mvwaddstr(BlankOW, 6,0," `7C 8`7C `7C V `7C `7C 8`7C "); X mvwaddstr(BlankOW, 7,0," `7C 9`7C `7C V `7C `7C 9`7C "); X mvwaddstr(BlankOW, 8,0," `7C10`7C `7C V `7C `7C10`7C "); X mvwaddstr(BlankOW, 9,0," `7C11`7C `7C V `7C `7C11`7C "); X mvwaddstr(BlankOW,10,0," `7C12`7C `7C V `7C `7C12`7C "); X mvwaddstr(BlankOW,11,0," `7C 1`7C `7C V `7C `7C 1`7C "); X mvwaddstr(BlankOW,12,0," `7C 2`7C `7C V `7C `7C 2`7C "); X mvwaddstr(BlankOW,13,0," `7C 3`7C `7C V `7C `7C 3`7C "); X mvwaddstr(BlankOW,14,0," `7C 4`7C `7C V `7C `7C 4`7C "); X mvwaddstr(BlankOW,15,0," `7C 5`7C `7C V `7C `7C 5`7C "); X mvwaddstr(BlankOW,16,0," `7C 6`7C `7C V `7C `7C 6`7C "); X mvwaddstr(BlankOW,17,0," `7C 7`7C `7C V `7C `7C 7`7C "); X mvwaddstr(BlankOW,18,0," `7C 8`7C `7C V `7C `7C 8`7C "); X mvwaddstr(BlankOW,19,0," `7C 9`7C `7C V `7C `7C 9`7C "); X mvwaddstr(BlankOW,20,0," `7C10`7C `7C V `7C `7C10`7C "); X X return; X`7D X X X X XfillOW(datafile) X char *datafile; X`7B int i, j, k; X int xpos, ypos, slotnum; X X overwrite(BlankOW,OneWeek); X X if (NDAYS) X `7B mvwaddstr(OneWeek,0,5,weekdays`5Batoi(dates`5BCurrentDay`5D+9)`5D) V; X mvwaddstr(OneWeek,0,15, monthnames`5Batoi(dates`5BCurrentDay`5D+3)- V1`5D ); X mvwaddch(OneWeek,0,25, dates`5BCurrentDay`5D`5B6`5D ); X mvwaddch(OneWeek,0,26, dates`5BCurrentDay`5D`5B7`5D ); X mvwaddstr(OneWeek,0,28, "19" ); X mvwaddch(OneWeek,0,30, dates`5BCurrentDay`5D`5B0`5D ); X mvwaddch(OneWeek,0,31, dates`5BCurrentDay`5D`5B1`5D ); X X i = CurrentDay + DAYS_ON_SCREEN-1; X if (i >= NDAYS) i = NDAYS-1; X X mvwaddstr(OneWeek,0,48,weekdays`5Batoi(dates`5Bi`5D+9)`5D); X mvwaddstr(OneWeek,0,58, monthnames`5Batoi(dates`5Bi`5D+3)-1`5D ); X mvwaddch(OneWeek,0,68, dates`5Bi`5D`5B6`5D ); X mvwaddch(OneWeek,0,69, dates`5Bi`5D`5B7`5D ); X mvwaddstr(OneWeek,0,73, "19" ); X mvwaddch(OneWeek,0,75, dates`5Bi`5D`5B0`5D ); X mvwaddch(OneWeek,0,76, dates`5Bi`5D`5B1`5D ); X `7D X X wstandout(OneWeek); X mvwaddstr(OneWeek,1, 40-strlen(datafile)/2 ,datafile); X wstandend(OneWeek); X X for (i=CurrentDay; (i