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:52 EDT Date-Received: 27 Aug 90 12:52 EDT Subject: schedular part 3 of 6 Message-ID: <912@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: 479 News-Software: VAX/VMS VNEWS 1.3-4 -+-+-+-+-+-+-+-+ START OF PART 3 -+-+-+-+-+-+-+-+ X case 2: xpos = 33; break; case 3: xpos = 48; break; X case 4: xpos = 66; break; default: break; X `7D X mvwaddch(OneWeek,2,xpos,weekdays`5Batoi(dates`5Bi`5D+9)`5D`5B0`5D); X mvwaddch(OneWeek,2,xpos+1,weekdays`5Batoi(dates`5Bi`5D+9)`5D`5B1`5D) V; X mvwaddch(OneWeek,2,xpos+2,weekdays`5Batoi(dates`5Bi`5D+9)`5D`5B2`5D) V; X X for (j=0; j= 8); `7D XlegalEhr(i) int i; `7B return (i <= 23 && i >= 8); `7D X Xlegalyr(i) int i; `7B return (i<= 99 && i >= 0); `7D X Xlegalmon(i) int i; `7B return (i<= 12 && i > 0); `7D X Xlegalday(i) int i; `7B return (i<= DaysInMonth && i > 0); `7D X X X X Xchangedata() X`7B int choice; X int retval; X WINDOW *BorderWin; X WINDOW *ChangeWin; X X BorderWin = newwin( 17, 62, 5, 9); X ChangeWin = subwin( BorderWin, 15, 60, 6, 10); box(ChangeWin,'+','+'); X X mvwaddstr(ChangeWin,5,2,"Enter D to Delete an entry, A to Add an entry") V; X message1(" ? Delete_entry Add_entry Quit "); X X do X `7B mvwaddstr(ChangeWin,7,2,"Enter Q to quit this function"); X noecho(); choice = toupper(wgetch(ChangeWin)); echo(); X if (choice == '?') online_help(2); X `7D while (choice != 'D' && choice != 'A' && choice != 'Q'); X X wmove(ChangeWin,5,2); wclrtoeol(ChangeWin); X wmove(ChangeWin,7,2); wclrtoeol(ChangeWin); X wrefresh(ChangeWin); X X switch (choice) X `7B case 'A': X retval = addrec(ChangeWin,0); X break; X X case 'D': X retval = addrec(ChangeWin,1); X break; X X case 'Q': X retval = 0; X break; X `7D X X delwin(ChangeWin); X delwin(BorderWin); X return(retval); X`7D X X Xchar *((digits`5B10`5D)`5B5`5D) = `7B " ### ", "# #", "# #", "# #", " V ###", X " # ", " ## ", " # ", " # ", " ### ", X " ## ", "# # ", " # ", " # ", "#### ", X "#####", " # ", " ## ", " #", "#### ", X "# ", "# # ", "#####", " # ", " # ", X "#####", "# ", "#### ", " #", "#### ", X " # ", " # ", " ### ", "# #", " ### ", X "#####", "# #", " # ", " # ", " # ", X " ### ", "# #", " ### ", "# #", " ### ", X " ### ", "# #", " ### ", " # ", " # " X `7D; Xchar *(colon`5B5`5D) = `7B " ", " ## ", " ", " ## ", " " `7D; X Xshotime() X`7B int i,hr,min; X WINDOW *TimeWin; X long now; struct tm *tms; X char label`5B20`5D; X char today`5BDATESIZE`5D; X int currentyear; X int daynumber, slotnumber; X int DaysThisYear; X int waitlength; X int jdBook, jdZero, jdNow; X char messageline`5B100`5D; X char nowline`5BSLOTSIZE`5D; X X TimeWin = newwin( 17, 62, 5, 9); X X message1(" "); X X time (&now); X tms = localtime(&now); X waitlength = 2; X X currentyear = tms->tm_year; X if (currentyear && !(currentyear%4) ) DaysThisYear = 366; X else DaysThisYear = 365; X`20 X jdZero = day2julian(dates`5B0`5D); X jdNow = day2julian(dates`5BCurrentDay`5D); X`20 X sprintf(today,"%02d:%02d:%02d:%1d",tms->tm_year,tms->tm_mon+1, X tms->tm_mday,tms->tm_wday); X jdBook = day2julian(today); X`20 X if (jdZero <= jdBook) daynumber=jdBook-jdZero; X else daynumber = DaysThisYear-jdZero + jdBook; X X slotnumber = (tms->tm_hour - 8)*NUMPERIODS + (tms->tm_min /(60/NUMPERIOD VS)); X`20 X if (!isblanks(daytimer`5Bdaynumber`5D`5Bslotnumber`5D)) X `7B wstandout(TimeWin); X mvwaddstr(TimeWin,09,1,"Now:"); X wstandend(TimeWin); X mvwaddstr(TimeWin,10,1,daytimer`5Bdaynumber`5D`5Bslotnumber`5D); X strcpy(nowline,daytimer`5Bdaynumber`5D`5Bslotnumber`5D); X waitlength++; X `7D X X for (i=slotnumber+1; itm_hour-1)%12)+1; X min = tms->tm_min; X X if (hr/10) mvwaddstr(TimeWin,3+i,15,digits`5B hr/10 `5D`5Bi`5D); X mvwaddstr(TimeWin,3+i,21,digits`5B hr%10 `5D`5Bi`5D); X X mvwaddstr(TimeWin,3+i,27,colon`5Bi`5D); X X mvwaddstr(TimeWin,3+i,32,digits`5B min/10 `5D`5Bi`5D); X mvwaddstr(TimeWin,3+i,38,digits`5B min%10 `5D`5Bi`5D); X `7D X X wrefresh(TimeWin); X sleep(waitlength); X delwin(TimeWin); X return; X`7D X X X X Xprint_sched() X`7B int jdZero, jdNow, jdPrint, jdMax; X char starthrS`5B5`5D, endhrS`5B5`5D, startminS`5B5`5D, endminS`5B5`5D; X char day`5B3`5D, year`5B5`5D, month`5B3`5D; X char currentyear`5B5`5D; X char Details`5B60`5D; X WINDOW *printwin; X X int daynumber, startslot, endslot; X char weekday; X X int leapyear, i, j; X int DaysThisYear; X char date2print`5BDATESIZE`5D; X char daystring`5B100`5D; X X printwin = newwin(15,20,5,30); X box(printwin,'`7C','-'); X X message1(" "); X X if (!NDAYS) X `7B wstandout(printwin); X mvwaddstr(printwin,10,2,"No Entries for"); X mvwaddstr(printwin,11,2,"this database"); X wstandend(printwin); X X mvwaddstr(printwin,13,2,"Press any Key"); X noecho(); i = toupper(wgetch(printwin)); echo(); X delwin(printwin); X return; X `7D X X/* calculate defaults */ X strncpy(year,dates`5BCurrentDay`5D,2); year`5B2`5D = 0; X strncpy(month,dates`5BCurrentDay`5D+3,2); month`5B2`5D = 0; X strncpy(day,dates`5BCurrentDay`5D+6,2); day`5B2`5D = 0; X X/* show prompts and defaults */ X mvwaddstr(printwin,2,2,"Year: "); mvwaddstr(printwin,2,14,year); X mvwaddstr(printwin,3,2,"Month: "); mvwaddstr(printwin,3,14,month); X X mvwaddch(printwin,4,7,'('); X mvwaddstr(printwin,4,8,monthnames`5Batoi(month)-1`5D); X waddch(printwin,')'); X X mvwaddstr(printwin,6,2,"Day: "); mvwaddstr(printwin,6,14,day); X X wrefresh(printwin); X X strcpy(currentyear,year); X if (atoi(currentyear) && !(atoi(currentyear)%4) ) DaysThisYear = 366; X else DaysThisYear = 365; X X/* get month */ X if (!get_input(printwin, 3,14, month,legalmon, month, 3)) X `7B delwin(printwin); X return; X `7D X X mvwaddstr(printwin,4,8," "); X mvwaddch(printwin,4,7,'('); X mvwaddstr(printwin,4,8,monthnames`5Batoi(month)-1`5D); X waddch(printwin,')'); X X/* work out year */ X if (atoi(month) < atoi(dates`5BCurrentDay`5D+3)) X `7B i = atoi(year) + 1; X if (i >= 100) i-= 100; X sprintf(year,"%02d",i); X mvwaddstr(printwin,2,14,year); X `7D X leapyear = (atoi(year) && !(atoi(year)%4) ); X X switch (atoi(month)) X `7B case 1: case 3: case 5: case 7: case 8: case 10: X case 12: DaysInMonth = 31; break; X X case 4: case 6: case 9: case 11: DaysInMonth = 30; break; X X case 2: if (leapyear) DaysInMonth = 29; else DaysInMonth = 28; brea Vk; X `7D X X/* day */ X if (!get_input(printwin, 6,14, day,legalday, day, 3)) X `7B delwin(printwin); X return; X `7D X X/* re-work out year */ X if (atoi(month) == atoi(dates`5BCurrentDay`5D+3) &&`20 X atoi(day) < atoi(dates`5BCurrentDay`5D+6) V ) X `7B i = atoi(year) + 1; X if (i >= 100) i-= 100; X sprintf(year,"%02d",i); X mvwaddstr(printwin,2,14,year); X `7D X X jdZero = day2julian(dates`5B0`5D); X jdNow = day2julian(dates`5BCurrentDay`5D); X X sprintf(date2print,"%s:%s:%s:0",year,month,day); X jdPrint = day2julian(date2print); X X if (jdZero <= jdPrint) daynumber=jdPrint-jdZero; X else daynumber = DaysThisYear-jdZero + jdPrint; X X if (daynumber >= NDAYS) X `7B wstandout(printwin); X mvwaddstr(printwin,10,2,"No Entries for"); X mvwaddstr(printwin,11,2,"for specified day"); X wstandend(printwin); X X mvwaddstr(printwin,13,2,"Press any Key"); X noecho(); i = toupper(wgetch(printwin)); echo(); X `7D X else X print_data(daytimer,daynumber,dates,NDAYS); X X delwin(printwin); X return; X`7D X X X X Xaddrec(addwin,delete) X WINDOW *addwin; X int delete; X`7B int jdZero, jdNow, jdBook, jdMax; X char starthrS`5B5`5D, endhrS`5B5`5D, startminS`5B5`5D, endminS`5B5`5D; X char def_endhrS`5B5`5D, def_endminS`5B5`5D; X int def_endmin; X char day`5B3`5D, year`5B5`5D, month`5B3`5D; X char currentyear`5B5`5D; X char Details`5B60`5D; X X int daynumber, startslot, endslot; X int StpChk; X char weekday; X X int leapyear, i, j; X int DaysThisYear; X char date2book`5BDATESIZE`5D; X X box(addwin,'`7C','-'); X X message1(" "); X X/* calculate defaults */ X strncpy(year,dates`5BCurrentDay`5D,2); year`5B2`5D = 0; X strncpy(month,dates`5BCurrentDay`5D+3,2); month`5B2`5D = 0; X strncpy(day,dates`5BCurrentDay`5D+6,2); day`5B2`5D = 0; X X/* show prompts and defaults */ X mvwaddstr(addwin,2,2,"Year: "); mvwaddstr(addwin,2,14,year); X mvwaddstr(addwin,3,2,"Month: "); mvwaddstr(addwin,3,14,month); X X mvwaddch(addwin,3,18,'('); X mvwaddstr(addwin,3,19,monthnames`5Batoi(month)-1`5D); X waddch(addwin,')'); X X mvwaddstr(addwin,4,2,"Day: "); mvwaddstr(addwin,4,14,day); X mvwaddstr(addwin,6,2,"Start Hour: "); mvwaddstr(addwin,7,2,"Start Min: " V); X mvwaddstr(addwin,9,2,"End Hour: "); mvwaddstr(addwin,10,2,"End Min: "); X X if (!delete) mvwaddstr(addwin,12,2,"Booking Details: "); X X wrefresh(addwin); X X strcpy(currentyear,year); X if (atoi(currentyear) && !(atoi(currentyear)%4) ) DaysThisYear = 366; X else DaysThisYear = 365; X X/* get month */ X if (!get_input(addwin, 3,14, month,legalmon, month, 4))`20 X return 0; X X mvwaddstr(addwin,3,19," "); X mvwaddch(addwin,3,18,'('); X mvwaddstr(addwin,3,19,monthnames`5Batoi(month)-1`5D); X waddch(addwin,')'); X X/* work out year */ X if (atoi(month) < atoi(dates`5B0`5D+3)) X `7B i = atoi(year) + 1; X if (i >= 100) i-= 100; X sprintf(year,"%02d",i); X mvwaddstr(addwin,2,14,year); X `7D X leapyear = (atoi(year) && !(atoi(year)%4) ); X X switch (atoi(month)) X `7B case 1: case 3: case 5: case 7: case 8: case 10: X case 12: DaysInMonth = 31; break; X X case 4: case 6: case 9: case 11: DaysInMonth = 30; break; X X case 2: if (leapyear) DaysInMonth = 29; else DaysInMonth = 28; brea Vk; X `7D X X/* day */ X if (!get_input(addwin, 4,14, day,legalday, day, 4)) X return 0; X X/* re-work out year */ X if (atoi(month) == atoi(dates`5B0`5D+3) && atoi(day) < atoi(dates`5B0`5D V+6) ) X `7B i = atoi(year) + 1; X if (i >= 100) i-= 100; X sprintf(year,"%02d",i); X mvwaddstr(addwin,2,14,year); X leapyear = (atoi(year) && !(atoi(year)%4) ); X `7D X X X/* starting hr */ X if (!get_input(addwin, 6,14, " ",legalShr, starthrS, 4)) X return 0; X X/* use as default for end hr */ X strcpy(def_endhrS,starthrS); X mvwaddstr(addwin,9,14,def_endhrS); wrefresh(addwin); X X/* starting min */ X if (!get_input(addwin, 7,14, " ",legalmin, startminS, 4)) X return 0; X X/* use as basis for default for end min */ X def_endmin=(atoi(startminS)+(60/NUMPERIODS))%60; X sprintf(def_endminS,"%02d",def_endmin); X X if (!def_endmin) X `7B sprintf(def_endhrS,"%02d",atoi(def_endhrS)+1); X mvwaddstr(addwin,9,14,def_endhrS); X `7D X X mvwaddstr(addwin,10,14,def_endminS); wrefresh(addwin); X X/* ending hr */ X if (!get_input(addwin, 9,14, def_endhrS,legalEhr, endhrS, 4)) X return 0; X X/* ending min */ X if (atoi(endhrS) == 23) X `7B if (!get_input(addwin, 10,14, def_endminS,legal23min, endminS, 4)) X return 0; X `7D X else X `7B if (!get_input(addwin, 10,14, def_endminS,legalmin, endminS, 4)) X return 0; X `7D X X/* wh'appens */ X if (delete) *Details=0; X else get_string(addwin,13,2,Details,55); X X X/* confirmation */ X if (!Confirm(delete,starthrS,endhrS,startminS,endminS,day,year,month, X Detail Vs) ) X return 0; X X X X jdZero = day2julian(dates`5B0`5D); X jdNow = day2julian(dates`5BCurrentDay`5D); X X sprintf(date2book,"%s:%s:%s:0",year,month,day); X jdBook = day2julian(date2book); X X if (jdZero <= jdBook) daynumber=jdBook-jdZero; X else daynumber = DaysThisYear-jdZero + jdBook; X X startslot = NUMPERIODS * (atoi(starthrS) -8) + atoi(startminS) / X (60/NUMPERIODS V); X endslot = NUMPERIODS * (atoi(endhrS) -8) + atoi(endminS) /`20 X (60/NUMPERIODS) - V 1; X X X/* spin through the day to find double bookings */ +-+-+-+-+-+-+-+- END OF PART 3 +-+-+-+-+-+-+-+-