Path: utzoo!yunexus!james From: james@yunexus.UUCP (James Pierre Lewis) Newsgroups: alt.sources Subject: Vcalendar (part 2 of 3) is available upon request. Keywords: Vcal Message-ID: <958@yunexus.UUCP> Date: 1 Feb 89 02:57:11 GMT Article-I.D.: yunexus.958 Organization: York U. Computing Services Lines: 2563 Vcalendar is a calendar/schedule keeping program that allows one to keep track of appointments, classes, meetings, and dates, etc. It is posted upon request from panetta@duphy4.drexel.edu. Vcalendar is written in C running on VAX/VMS 4.xx or higher. It is free. If you are interested, please cut the three parts - VCAL1.SHAR, VCAL2.SHAR and VCAL3.SHAR; follow the instructions in 0REAME.1ST and have fun. -----CUT-----CUT-----CUT-----CUT-----CUT-----CUT-----CUT-----CUT-----CUT----- #! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # olddo-appts.c # olddo-calls.c # oldvcal-purge.c # oldvcal-sum.c # smgtrmptr.h # vcal-msg.msg # This archive created: Tue Jan 31 21:49:02 1989 export PATH; PATH=/bin:$PATH echo shar: extracting "'olddo-appts.c'" '(25422 characters)' if test -f 'olddo-appts.c' then echo shar: will not over-write existing file "'olddo-appts.c'" else sed 's/^ X//' << \SHAR_EOF > 'olddo-appts.c' X/* X * ------------------------------------------------------- X * Neither York University, Department of Computer X * Science nor the author assume any responsibility X * for the use or reliability of this software. X * X * Copyright (C) 1987, York University X * Department of Computer Science X * X * General permission to copy or modify, but not for X * profit, is hereby granted, provided that the above X * copyright notice is included and reference made to X * the fact that reproduction privileges were granted X * by the York University, Department of Computer Science. X * ------------------------------------------------------- X * X * Written by: James Pierre Lewis X * Department of Computer Science X * York University X * 1987 - Version V1.0 X */ X X#include X#include X#include X#include X#include X#include "vcal.h" X Xchar *msgdata[MAX_ENT]; /* message pointers */ X Xchar dayw[] = X { X " S M T W T F S " X }; X Xchar *smon[] = X { X "JANUARY ", "FEBRUARY ", "MARCH ", "APRIL ", X "MAY ", "JUNE ", "JULY ", "AUGUST ", X "SEPTEMBER ", "OCTOBER ", "NOVEMBER ", "DECEMBER " X }; X Xint active[33], /* active day */ X daydata[MAX_ENT], /* day data */ X dayindex[MAX_MSG], /* day index to day, month, year */ X monthdata[MAX_ENT], /* month data */ X msgcnt = NULL, /* entries count */ X notclear = FALSE, /* clear flag */ X tmonth, /* current month */ X tday, /* current day */ X tyear, /* current year */ X xposition[32], /* x coordinate */ X yposition[32], /* y coordinate */ X yeardata[MAX_ENT]; /* year data */ X Xint mon[] = X { X 0, X 31, 29, 31, 30, X 31, 30, 31, 31, X 30, 31, 30, 31 X }; X Xdo_appts() X{ X extern int reset_tty(), X updatedata(); X int day, X i, X j, X key, X month, X stat, X year; X X timeset(); X month = tmonth; X day = tday; X year = tyear; X X loaddata(); X exit_handler(updatedata, __); X exit_handler(reset_tty, __); X cal(day, month, year); X help_one(); X movcur(day); X X while ((key = get_key(vcal_id)) != SMG$K_TRM_CTRLZ) X { X switch(key) { X X case 'P' & CHAR_MASK: /* previous month */ X case 'p' & CHAR_MASK: X if (--month < 1) X { X month = 12; X year--; X } X X if (notclear) X clearmsgs(); X clearcar(); X X if ((month == tmonth) && (year == tyear)) X day = tday; X else day = 1; X X cal(day, month, year); X break; X X case 'N' & CHAR_MASK: /* next month */ X case 'n' & CHAR_MASK: X if (++month == 13) X { X month = 1; X year++; X } X X if (notclear) X clearmsgs(); X clearcar(); X X if ((month == tmonth) && (year == tyear)) X day = tday; X else day = 1; X X cal(day, month, year); X break; X X case 'D' & CHAR_MASK: /* display notes */ X case 'd' & CHAR_MASK: X notes(day, month, year); X break; X X case 'E' & CHAR_MASK: /* erase a day's notes */ X case 'e' & CHAR_MASK: X clearday(day, month, year); X X if (notclear) X clearmsgs(); X break; X X case 'M' & CHAR_MASK: /* make appointments */ X case 'm' & CHAR_MASK: X help_two(); X notes(day, month, year); X modnotes(day, month, year); X help_one(); X break; X X case SMG$K_TRM_UP: /* up a day */ X if ((day -= 7) <= NULL) X { X day += 35; X day = (day > mon[month]) ? day - 7 : day; X } X X if (notclear) X clearmsgs(); X break; X X case SMG$K_TRM_DOWN: /* down a day */ X if ((day += 7) > mon[month]) X { X day %= 7; X day = (day == NULL) ? 7 : day; X } X X if (notclear) X clearmsgs(); X break; X X case SMG$K_TRM_LEFT: /* left a day */ X day = (--day <= NULL) ? mon[month] : day; X X if (notclear) X clearmsgs(); X break; X X case SMG$K_TRM_RIGHT: /* right a day */ X day = (++day > mon[month]) ? 1 : day; X X if (notclear) X clearmsgs(); X break; X X case SMG$K_TRM_CTRLW: /* refresh screen */ X stat = smg$repaint_screen(&pstbrd_id); X break; X } X X movcur(day); /* day right now */ X } X} X X/*----------------------------------------------------------------------------*/ X Xloaddata() X{ X char basedata[MAX_BUF], X key[MAX_BUF], X tmp[MAX_BUF]; X int field, X i, X j, X k, X l; X FILE *fptr; X X for (i = NULL; i < MAX_ENT; i++) X { X daydata[i] = monthdata[i] = yeardata[i] = msgdata[i] = NULL; X } X X if (access(APPTS_FILE, __) == -1) X { X warng(VCAL_FILE, 1, 1); X } X X fptr = fopen(APPTS_FILE, "r"); X i = NULL; X cuserid(key); X strcat(key, "-VCAL"); X X while(fgets(basedata, MAX_BUF, fptr) != NULL) X { X basedata[strlen(basedata) - 1] = NULL; X crypt_it(basedata, key); X j = k = field = NULL; X X while(basedata[j] != NULL ) X { X if (basedata[j] != ',') X tmp[k++] = basedata[j]; X else X { X switch(field) { X X case 0 : X tmp[k] = NULL; X monthdata[i] = atoi(tmp); X k = NULL; X break; X X case 1 : X tmp[k] = NULL; X daydata[i] = atoi(tmp); X k = NULL; X break; X X case 2 : X tmp[k] = NULL; X yeardata[i] = atoi(tmp); X k = NULL; X break; X X case 3 : X tmp[k++] = ' '; X tmp[k++] = ' '; X break; X } X field++; X } X j++; X } X X tmp[k] = NULL; X msgdata[i] = malloc(MAX_BUF); X strcpy(msgdata[i], tmp); X msgdata[MAX_BUF - 1] = NULL; X X if (++i >= MAX_ENT) X { X CHK_STAT("", __, OWN_MSG, VCAL_PURGE); X break; X } X } X X fclose(fptr); X} X X/*----------------------------------------------------------------------------*/ X Xwarng(msg_id, xpos, ypos) X Xint msg_id, X xpos, X ypos; X{ X char tmp[MSG_BUF]; X short msg_len; X int stat; X $DESCRIPTOR(msg_buf, tmp); X $DESCRIPTOR(wait_buf, WAIT_MSG); X X stat = sys$getmsg(msg_id, &msg_len, &msg_buf, __, __); X tmp[msg_len] = NULL; X stat = smg$put_line(&vcal_id, &msg_buf, __, __, __, &WRAP, __, __); X stat = smg$put_chars(&vcal_id, &wait_buf, __, __, __,__, __, __); X X if (get_key(vcal_id) == SMG$K_TRM_CTRLZ) X sys$exit(SS$_NORMAL); X else stat = smg$erase_display(&vcal_id, __, __, __, __); X} X X/*----------------------------------------------------------------------------*/ X Xcal(day, month, year) X Xint day, X month, X year; X{ X char tmp[MAX_BUF]; X int d, X i, X j, X k, X stat; X $DESCRIPTOR(blank, " "); X X stat = smg$put_chars(&vcal_id, mkdesc(VCAL_TITLE), &1, &1, __, X &(SMG$M_REVERSE|SMG$M_BOLD), __, __); X stat = smg$put_chars(&vcal_id, mkdesc(EXIT_MSG), &1, &46, __, X &SMG$M_BOLD, __, __); X stat = smg$draw_line(&vcal_id, &2, &1, &2, &VCAL_WID); X sprintf(tmp, "\t\t\t\t%s%u", smon[month-1], year); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), &3, &1, __, X &SMG$M_REVERSE, __, __); X stat = smg$draw_line(&vcal_id, &4, &1, &4, &VCAL_WID); X stat = smg$put_chars(&vcal_id, mkdesc(dayw), &6, &1, __, __, __, __); X stat = smg$set_cursor_abs(&vcal_id, &TXT_ROW, &1); X X d = jan1(year); X mon[2] = 29; X mon[9] = 30; X X for (i = 1; i <= 32; active[i] = FALSE, i++); X X for (i = NULL; i < MAX_ENT; i++) X { X if ((yeardata[i] == year) && (monthdata[i] == month)) X active[daydata[i]] = TRUE; X } X X switch((jan1(year + 1) + 7 - d) % 7) { X X case 1: /* non-leap year */ X mon[2] = 28; X break; X X default: /* 1752 */ X mon[9] = 19; X break; X X case 2: /* leap year */ X ; X } X X for (i = 1; i < month; d += mon[i], i++); /* day begin of year */ X X for (i = NULL, d %= 7; i < (5 * d); i++) /* first day of week */ X { X stat = smg$set_cursor_rel(&vcal_id, __, &1); X } X X for (j = 1, k = NULL, i = d; j <= 31; j++) X { X xposition[j] = (i*5) + 2; X yposition[j] = (k*2) + 7; X X if (++i == 7) X { X i = NULL; X k++; X } X } X X for (i = 1; i <= mon[month]; i++) X { X if (i == 3 && mon[month] == 19) X { X i += 11; X mon[month] += 11; X } X X if (active[i] == TRUE) X { X if (i > 9) X { X stat = smg$set_cursor_rel(&vcal_id, __, &1); X sprintf(tmp, "%d", i / 10); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), __, X __, __, &SMG$M_REVERSE, __, __); X } X else X { X stat = smg$set_cursor_rel(&vcal_id, __, &1); X stat = smg$put_chars(&vcal_id, &blank, __, X __, __, &SMG$M_REVERSE, __, __); X } X X sprintf(tmp, "%d", i % 10); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), __, X __, __, &SMG$M_REVERSE, __, __); X stat = smg$set_cursor_rel(&vcal_id, __, &2); X } X else X { X if (i > 9) X { X sprintf(tmp, " %d", i / 10); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), __, X __, __, __, __, __); X } X else stat = smg$set_cursor_rel(&vcal_id, __, &2); X X sprintf(tmp, "%d ", i % 10); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), __, X __, __, __, __, __); X X } X X if (++d == 7) X { X d = NULL; X stat = smg$put_line(&vcal_id, &blank, &2, __, X __, __, __, __); X X } X } X} X X/*----------------------------------------------------------------------------*/ X Xjan1(year) X Xint year; X{ X register int y, X d; X X y = year; X d = 4 + y + (y + 3) / 4; X X if (y > 1800) X { X d -= (y - 1701) / 100; X d += (y - 1601) / 400; X } X X d = (y > 1752) ? d + 3 : d; X X return (d % 7); X} X X/*----------------------------------------------------------------------------*/ X Xhelp_one() X{ X char *txt[4] = { X { "Cursors : Up, Down, Left, Right" }, X { "P/p, N/n : Previous, Next month" }, X { "D/d, E/e : Display, Erase appointments" }, X { "M/m : Make appointments" } X }; X int i, X stat; X X stat = smg$unpaste_virtual_display(&hlp_id, &pstbrd_id); X stat = smg$erase_display(&hlp_id, __, __, __, __); X stat = smg$change_virtual_display(&hlp_id, &4, &38, __, __, __); X X for (i = NULL; i < 4; i++) X { X stat = smg$put_line(&hlp_id, mkdesc(txt[i]), &1, __, X __, __, __, __); X } X X stat = smg$paste_virtual_display(&hlp_id, &pstbrd_id, &20, &2); X} X X/*----------------------------------------------------------------------------*/ X Xhelp_two() X{ X char *txt[4] = { X { "Cursors : Up, Down" }, X { "I/i : Input an appointment" }, X { "E/e : Erase an appointment" }, X { "P/p : Pick another day" } X }; X int i, X stat; X X stat = smg$unpaste_virtual_display(&hlp_id, &pstbrd_id); X stat = smg$erase_display(&hlp_id, __, __, __, __); X stat = smg$change_virtual_display(&hlp_id, &4, &30, __, __, __); X X for (i = NULL; i < 4; i++) X { X stat = smg$put_line(&hlp_id, mkdesc(txt[i]), &1, __, X __, __, __, __); X } X X stat = smg$paste_virtual_display(&hlp_id, &pstbrd_id, &20, &2); X} X X/*----------------------------------------------------------------------------*/ X Xhelp_three() X{ X char *txt[4] = { X { "Cursors : Left, Right" }, X { " : End inputing an appointment" }, X { " : Toggle overtrike/insert" }, X { " : Start inputing again" } X }; X int i, X stat; X X stat = smg$unpaste_virtual_display(&hlp_id, &pstbrd_id); X stat = smg$erase_display(&hlp_id, __, __, __, __); X stat = smg$change_virtual_display(&hlp_id, &4, &38, __, __, __); X X for (i = NULL; i < 4; i++) X { X stat = smg$put_line(&hlp_id, mkdesc(txt[i]), &1, __, X __, __, __, __); X } X X stat = smg$paste_virtual_display(&hlp_id, &pstbrd_id, &20, &2); X} X X/*----------------------------------------------------------------------------*/ X Xhelp_four() X{ X char *txt[4] = { X { " A T T E N T I O N " }, X { "* Appointments file is now full *" }, X { "* Please purge old appointments *" } X }; X int i, X stat; X $DESCRIPTOR(wait_buf, WAIT_MSG); X X stat = smg$unpaste_virtual_display(&hlp_id, &pstbrd_id); X stat = smg$erase_display(&hlp_id, __, __, __, __); X stat = smg$change_virtual_display(&hlp_id, &4, &33, __, __, __); X X for (i = NULL; i < 3; i++) X { X stat = smg$put_line(&hlp_id, mkdesc(txt[i]), &1, __, X __, __, __, __); X } X X stat = smg$paste_virtual_display(&hlp_id, &pstbrd_id, &20, &2); X stat = smg$put_chars(&hlp_id, &wait_buf, &4, &1, __, X &SMG$M_BOLD, __, __); X X if (get_key(hlp_id) == SMG$K_TRM_CTRLZ) X sys$exit(SS$_NORMAL); X} X X/*----------------------------------------------------------------------------*/ X Xtimeset() X{ X int tloc; X struct tm *localtime(), X *tp; X X time(&tloc); X tp = localtime(&tloc); X X tyear = tp->tm_year; X tmonth = tp->tm_mon + 1; X tday = tp->tm_mday; X tyear += LYEAR; X} X X/*----------------------------------------------------------------------------*/ X Xmovcur(day) X Xint day; X{ X int col = xposition[day] + 1, X row = yposition[day] + 1, X stat; X X stat = smg$set_cursor_abs(&vcal_id, &row, &col); X} X X/*----------------------------------------------------------------------------*/ X Xclearmsgs() X{ X int i, X stat; X X notclear = FALSE; X X for (i = 5; i < 25; i++) X { X stat = smg$erase_chars(&vcal_id, &TXT_LEN, &i, &TXT_COL); X } X} X X/*----------------------------------------------------------------------------*/ X Xclearcar() X{ X int i, X j = TXT_COL - 1, X stat; X X stat = smg$erase_line(&vcal_id, &3, &1); X X for (i = TXT_ROW; i < 19; i++) X { X stat = smg$erase_chars(&vcal_id, &j, &i, &1); X } X} X X/*----------------------------------------------------------------------------*/ X Xnotes(day, month, year) X Xint day, X month, X year; X{ X char tmp[MAX_BUF]; X int i, X j, X k, X stat; X $DESCRIPTOR(blank, " "); X X notclear = TRUE; X X for (i = NULL; i <= MAX_MSG; dayindex[i] = -1, i++); X X sprintf(tmp, "%s", "Time Message"); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), &5, &TXT_COL, X __, __, __, __); X sprintf(tmp, "%-3.3s %2.2d, %2.2d", smon[month - 1], day, year); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), &5, &69, __, __, __, __); X sprintf(tmp, "%s", "hhhh <------------------------------->"); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), &6, &TXT_COL, X __, __, __, __); X X for (i = j = NULL; i < MAX_ENT; i++) X { X if ((yeardata[i] == year) && X (monthdata[i] == month) && (daydata[i] == day)) X { X dayindex[j++] = i; X } X X if (j > MAX_MSG) X break; X } X X sort(j - 1); X X for (i = NULL, k = TXT_ROW; i < j; i++, k++) X { X sprintf(tmp, "%-*.*s", MAX_TXT, MAX_TXT, msgdata[dayindex[i]]); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), &k, X &TXT_COL, __, __, __, __); X } X X for (msgcnt = i = NULL; i < MAX_ENT; i++) X { X if (daydata[i] == NULL) X { X dayindex[j++] = i; X X if (j > MAX_MSG) X break; X } X else msgcnt++; X } X} X X/*----------------------------------------------------------------------------*/ X Xclearday(day, month, year) X Xint day, X month, X year; X{ X int i, X stat; X X for (i = NULL; i < MAX_ENT; i++) X { X if ((yeardata[i] == year) && X (monthdata[i] == month) && (daydata[i] == day)) X { X msgcnt--; X active[day] = FALSE; X daydata[i] = monthdata[i] = yeardata[i] = NULL; X X if (msgdata[i]) X { X free(msgdata[i]); X msgdata[i] = NULL; X } X } X } X X i = yposition[day] + 1; X stat = smg$change_rendition(&vcal_id, &i, &xposition[day], &1, &2, X &SMG$M_REVERSE, &SMG$M_REVERSE); X X} X X/*----------------------------------------------------------------------------*/ X Xupdatedata(final_stat) X Xint *final_stat; X{ X char *c, X key[MAX_BUF], X tmp1[MAX_BUF], X tmp2[MAX_BUF], X tmpnam[MAX_BUF]; X int i, X stat; X FILE *tptr; X X c = mktemp("SYS$LOGIN:TMPXXXXXX"); X sprintf(tmpnam, "%s.DAT", c); X X tptr = fopen(tmpnam, "w", "fop = cif", "mrs = 80", "rat = cr", X "rfm = var, stm"); X cuserid(key); X strcat(key, "-VCAL"); X X stat = lib$disable_ctrl(&LIB$M_CLI_CTRLY, __); X X for (i = NULL; i < MAX_ENT; i++) X { X if (daydata[i] != NULL) X { X strcpy(tmp1, msgdata[i]); X tmp1[4] = NULL; X sprintf(tmp2, "%d,%d,%d,%4.4s,%s", X monthdata[i], daydata[i], yeardata[i], X tmp1, &tmp1[6]); X crypt_it(tmp2, key); X fprintf(tptr, "%s\n", tmp2); X } X } X X fclose(tptr); X delete(APPTS_FILE); X stat = lib$rename_file(mkdesc(tmpnam), mkdesc(APPTS_FILE), __, X __, __, __, __, __, __, __, __, __); X X stat = lib$enable_ctrl(&LIB$M_CLI_CTRLY, __); X stat = sys$exit(*final_stat); /* exit normally */ X} X X/*----------------------------------------------------------------------------*/ X Xmodnotes(day, month, year) X Xint day, X month, X year; X{ X int i, X key = NULL, X stat, X upbound, X xcoord = TXT_COL, X ycoord = TXT_ROW; X X stat = smg$set_cursor_abs(&vcal_id, &ycoord, &xcoord); X X for (i = NULL; i < MAX_MSG && dayindex[i] != -1; i++); X X if (i == MAX_MSG) X upbound = VCAL_LEN - TXT_ROW; X else upbound = i - 1; X X i = NULL; X X while ((key != 'P' & CHAR_MASK) && (key != 'p' & CHAR_MASK)) X { X switch(key = get_key(vcal_id)) { X X case SMG$K_TRM_DOWN: /* down a line */ X i++; X X if (++ycoord > (upbound + TXT_ROW)) X { X ycoord = TXT_ROW; X i = NULL; X } X break; X X case SMG$K_TRM_UP: /* up a line */ X i--; X X if (--ycoord < TXT_ROW) X { X ycoord = upbound + TXT_ROW; X i = upbound; X } X break; X X case SMG$K_TRM_CTRLW: /* refresh screen */ X stat = smg$repaint_screen(&pstbrd_id); X break; X X case SMG$K_TRM_CTRLZ: /* ctrl-z to exit */ X stat = sys$exit(SS$_NORMAL); X break; X X case 'I' & CHAR_MASK: /* input a line */ X case 'i' & CHAR_MASK: X if (msgcnt < MAX_ENT) X { X help_three(); X get_txt(xcoord, ycoord, i, day, month, year); X X help_two(); X } X else X { X help_four(); X help_two(); X } X break; X X case 'E' & CHAR_MASK: /* erase a line */ X case 'e' & CHAR_MASK: X daydata[dayindex[i]] = NULL; X monthdata[dayindex[i]] = NULL; X yeardata[dayindex[i]] = NULL; X X if (msgdata[dayindex[i]]) X { X msgcnt--; X free(msgdata[dayindex[i]]); X msgdata[dayindex[i]] = NULL; X } X X stat = smg$erase_chars(&vcal_id, &TXT_LEN, X &ycoord, &TXT_COL); X break; X X case 'P' & CHAR_MASK: /* pick another day */ X case 'p' & CHAR_MASK: X if (notclear) X clearmsgs(); X break; X } X X stat = smg$set_cursor_abs(&vcal_id, &ycoord, &xcoord); X } X X active[day] = FALSE; X X for (i = NULL; i < MAX_ENT; i++) X { X if ((yeardata[i] == year) && (monthdata[i] == month)) X active[daydata[i]] = TRUE; X } X X i = yposition[day] + 1; X X if (active[day] == NULL) X { X stat = smg$change_rendition(&vcal_id, &i, &xposition[day], X &1, &2, &SMG$M_REVERSE, &SMG$M_REVERSE); X } X else X { X stat = smg$change_rendition(&vcal_id, &i, &xposition[day], X &1, &2, &SMG$M_REVERSE, __); X } X} X X/*----------------------------------------------------------------------------*/ X Xget_txt(xcoord, ycoord, i, day, month, year) X Xint day, X i, X month, X xcoord, X ycoord, X year; X{ X static char *c, X *d, X hnum[3], X mnum[3], X num[5], X tmp[MAX_BUF]; X char s[2]; X static int cnt, X k, X ovr_stk = TRUE; X int j, X l, X m, X key, X stat; X $DESCRIPTOR(blank, " "); X X if (msgdata[dayindex[i]]) X fill_fld(msgdata[dayindex[i]], tmp, MAX_TXT + 1); X else fill_fld("", tmp, MAX_TXT + 1); X X cnt = k = NULL; X stat = smg$change_rendition(&vcal_id, &ycoord, &xcoord, X &1, &TXT_LEN, &SMG$M_REVERSE, __); X X while ((key = get_key(vcal_id)) != SMG$K_TRM_CR) X { X switch(key) { X X case SMG$K_TRM_LEFT: /* move left */ X if (cnt <= R_MAR) X { X if (cnt > NULL) X { X if (--cnt == 5) X { X cnt = 3; X stat = smg$set_cursor_rel( X &vcal_id, __, &-3); X } X else X { X stat = smg$set_cursor_rel( X &vcal_id, __, &-1); X } X } X } X else X { X stat = smg$return_cursor_pos(&vcal_id, &l, &m); X X if (--cnt == R_MAR) X { X k = NULL; X stat = smg$put_chars(&vcal_id, X mkdesc(tmp), __, &TXT_COL, X __, &SMG$M_REVERSE, __, __); X m = TXT_COL + cnt; X } X else X { X k--; X m--; X } X X stat = smg$set_cursor_abs(&vcal_id, &l, &m); X } X break; X X case SMG$K_TRM_RIGHT: /* move right */ X if (cnt < R_MAR) X { X if (++cnt == 4) X { X cnt = 6; X stat = smg$set_cursor_rel(&vcal_id, __, X &3); X } X else stat = smg$set_cursor_rel(&vcal_id, __, X &1); X } X else if (cnt < MAX_TXT) X { X stat = smg$return_cursor_pos(&vcal_id, &l, &m); X cnt++; X k++; X X if (m == TXT_COL + R_MAR) X { X d = tmp + k; X stat = smg$put_chars(&vcal_id, X mkdesc(d), __, &TXT_COL, X __, &SMG$M_REVERSE, __, __); X } X else X { X m++; X stat = smg$set_cursor_abs(&vcal_id, X &l, &m); X } X } X break; X X case SMG$K_TRM_CTRLA: /* insert, overstrike */ X ovr_stk = ovr_stk ? FALSE : TRUE; X break; X X case SMG$K_TRM_CTRLU: /* input again */ X cnt = NULL; X fill_fld("", tmp, MAX_TXT + 1); X stat = smg$erase_chars(&vcal_id, &TXT_LEN, X &ycoord, &TXT_COL); X stat = smg$change_rendition(&vcal_id, &ycoord, &xcoord, X &1, &TXT_LEN, &SMG$M_REVERSE, __); X stat = smg$set_cursor_abs(&vcal_id, &ycoord, X &TXT_COL); X break; X X case SMG$K_TRM_CTRLW: /* refresh screen */ X stat = smg$repaint_screen(&pstbrd_id); X break; X X case SMG$K_TRM_DELETE: /* delete a char */ X del_char(tmp, &cnt, &k); X break; X X case NULL: /* nothing return */ X break; X X default: /* input text in */ X if ((*s = (char *) key) > QST_MARK) X { X s[1] = NULL; X ins_char(s, tmp, &cnt, &k, ovr_stk); X } X break; X } X } X X for (c = tmp + MAX_TXT - 1; *c == ' '; c--); X X *++c = NULL; X X for (c = tmp; *c == ' '; c++); X X if (*c) X { X if (msgdata[dayindex[i]] == NULL) X { X msgcnt++; X msgdata[dayindex[i]] = malloc(MAX_BUF); X } X X for (j = NULL; j < 4 && isdigit(c[j]); num[j] = c[j], j++); X X if (j != 4) X { X for (j = NULL; j < 4; c[j++] = '0'); X } X else X { X num[4] = NULL; X hnum[0] = num[0]; hnum[1] = num[1]; hnum[2] = NULL; X mnum[0] = num[2]; mnum[1] = num[3]; mnum[2] = NULL; X X if ((j = atoi(hnum)) < NULL || j > 24) X { X for (j = NULL; j < 2; c[j++] = '0'); X } X X if ((j = atoi(mnum)) < NULL || j > 60) X { X for (j = 2; j < 4; c[j++] = '0'); X } X } X X strcpy(msgdata[dayindex[i]], c); X daydata[dayindex[i]] = day; X monthdata[dayindex[i]] = month; X yeardata[dayindex[i]] = year; X } X else X { X daydata[dayindex[i]] = NULL; X monthdata[dayindex[i]] = NULL; X yeardata[dayindex[i]] = NULL; X X if (msgdata[dayindex[i]]) X { X msgcnt--; X free(msgdata[dayindex[i]]); X msgdata[dayindex[i]] = NULL; X } X } X X stat = smg$erase_chars(&vcal_id, &TXT_LEN, &ycoord, &TXT_COL); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), &ycoord, &xcoord, X __, __, __, __); X} X X/*----------------------------------------------------------------------------*/ X Xdel_char(tmp, cnt, l_mar) X Xchar *tmp; Xint *cnt, X *l_mar; X{ X char *c, X s[2]; X int i, X j, X k, X stat; X $DESCRIPTOR(blank, " "); X X if ((*cnt <= R_MAR) && (*cnt > NULL)) X { X switch(--(*cnt)) { X X case 0: X case 1: X case 2: X case 3: X stat = smg$set_cursor_rel(&vcal_id, __, &-1); X X for (i = *cnt; i <= 3; i++) X { X tmp[i] = tmp[i + 1]; X s[0] = tmp[i]; s[1] = NULL; X stat = smg$put_chars(&vcal_id, mkdesc(s), X __, __, __, &SMG$M_REVERSE, __, __); X } X X i = TXT_COL + *cnt; X stat = smg$set_cursor_abs(&vcal_id, __, &i); X break; X X case 5: X *cnt = 3; X stat = smg$set_cursor_rel(&vcal_id, __, &-3); X stat = smg$put_chars(&vcal_id, &blank, X __, __, __, &SMG$M_REVERSE, __, __); X stat = smg$set_cursor_rel(&vcal_id, __, &-1); X tmp[*cnt] = ' '; X break; X X default: X for (i = *cnt; i < MAX_TXT; tmp[i] = tmp[i + 1], i++); X X stat = smg$return_cursor_pos(&vcal_id, &j, &k); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), X __, &TXT_COL, __, &SMG$M_REVERSE, __, __); X k--; X stat = smg$set_cursor_abs(&vcal_id, &j, &k); X break; X } X } X else if (*cnt > R_MAR) X { X for (--(*cnt), i = *cnt; i < MAX_TXT; tmp[i] = tmp[i + 1], i++); X X if (*cnt == R_MAR) X *l_mar = NULL; X else --(*l_mar); X X c = tmp + (*cnt - R_MAR); X stat = smg$put_chars(&vcal_id, mkdesc(c), __, X &TXT_COL, __, &SMG$M_REVERSE, __, __); X } X} X X/*----------------------------------------------------------------------------*/ X Xins_char(s, tmp, cnt, l_mar, ovr_stk) X Xchar *s, X *tmp; Xint *cnt, X *l_mar, X ovr_stk; X{ X char *c; X int i, X j, X k, X stat; X X if (ovr_stk) X { X if (*cnt < R_MAR) X { X tmp[*cnt] = s[0]; X stat = smg$put_chars(&vcal_id, mkdesc(s), __, X __, __, &SMG$M_REVERSE, __, __); X X if (++(*cnt) == 4) X { X *cnt = 6; X stat = smg$set_cursor_rel(&vcal_id, __, &2); X tmp[4] = tmp[5] = ' '; X } X } X else if (*cnt < MAX_TXT) X { X tmp[*cnt] = s[0]; X stat = smg$return_cursor_pos(&vcal_id, &j, &k); X X (*cnt)++; X (*l_mar)++; X X if (k == TXT_COL + R_MAR) X { X c = tmp + *l_mar; X stat = smg$put_chars(&vcal_id, mkdesc(c), __, X &TXT_COL, __, &SMG$M_REVERSE, __, __); X } X else X { X stat = smg$put_chars(&vcal_id, mkdesc(s), __, X &k, __, &SMG$M_REVERSE, __, __); X } X } X } X else X { X if (*cnt < R_MAR) X { X if (*cnt <= 3) X { X for (i = 3; i > *cnt; tmp[i] = tmp[i - 1], --i); X } X else X { X for (i = MAX_TXT - 1; i > *cnt; --i) X tmp[i] = tmp[i - 1]; X } X X tmp[*cnt] = s[0]; X stat = smg$return_cursor_pos(&vcal_id, &j, &k); X stat = smg$put_chars(&vcal_id, mkdesc(tmp), X __, &TXT_COL, __, &SMG$M_REVERSE, __, __); X k++; X stat = smg$set_cursor_abs(&vcal_id, &j, &k); X X if (++(*cnt) == 4) X { X *cnt = 6; X stat = smg$set_cursor_rel(&vcal_id, __, &2); X tmp[4] = tmp[5] = ' '; X } X } X else if (*cnt < MAX_TXT) X { X for (i = MAX_TXT - 1; i > *cnt; --i) X tmp[i] = tmp[i - 1]; X X tmp[*cnt] = s[0]; X stat = smg$return_cursor_pos(&vcal_id, &j, &k); X X (*cnt)++; X (*l_mar)++; X X if (k == TXT_COL + R_MAR) X { X c = tmp + *l_mar; X stat = smg$put_chars(&vcal_id, mkdesc(c), __, X &TXT_COL, __, &SMG$M_REVERSE, __, __); X } X else X { X stat = smg$put_chars(&vcal_id, mkdesc(s), __, X &k, __, &SMG$M_REVERSE, __, __); X } X } X } X} X X/*----------------------------------------------------------------------------*/ X Xsort(upbound) X Xint upbound; X{ X int i, X j, X k; X X for (i = upbound; i > NULL; i--) X { X for (j = NULL; j < i; j++) X { X if (strncmp(msgdata[dayindex[j]], X msgdata[dayindex[j + 1]], 4) > NULL) X { X k = dayindex[j]; X dayindex[j] = dayindex[j + 1]; X dayindex[j + 1] = k; X } X } X } X} SHAR_EOF if test 25422 -ne "`wc -c < 'olddo-appts.c'`" then echo shar: error transmitting "'olddo-appts.c'" '(should have been 25422 characters)' fi fi # end of overwriting check echo shar: extracting "'olddo-calls.c'" '(6063 characters)' if test -f 'olddo-calls.c' then echo shar: will not over-write existing file "'olddo-calls.c'" else sed 's/^ X//' << \SHAR_EOF > 'olddo-calls.c' X/* X * ------------------------------------------------------- X * Neither York University, Department of Computer X * Science nor the author assume any responsibility X * for the use or reliability of this software. X * X * Copyright (C) 1987, York University X * Department of Computer Science X * X * General permission to copy or modify, but not for X * profit, is hereby granted, provided that the above X * copyright notice is included and reference made to X * the fact that reproduction privileges were granted X * by the York University, Department of Computer Science. X * ------------------------------------------------------- X * X * Written by: James Pierre Lewis X * Department of Computer Science X * York University X * 1987 - Version V1.0 X */ X X#include X#include X#include X#include X#include X#include "vcal.h" X Xchar *msgdata[MAX_ENT]; /* message pointers */ Xint ampm, /* am or pm */ X day, /* day */ X daydata[MAX_ENT], /* day data */ X dayindex[MAX_MSG], /* day index to day, month, year */ X dow, /* dow */ X hour, /* hour */ X mhour, /* mhour */ X min, /* minute */ X month, /* month */ X monthdata[MAX_ENT], /* month data */ X year, /* year */ X yeardata[MAX_ENT], /* year data */ X sec, /* second */ X timedata[MAX_ENT]; /* time data */ X Xmain() X{ X int cnt, X i, X j, X nowtime, X timeout, X tmin, X stat; X $DESCRIPTOR(tty, "TT"); X X stat = sys$assign(&tty, &tty_chan, __, __); X X if (!((stat & STS$M_SUCCESS) >> STS$V_SUCCESS)) X warng(stat); X X get_data(&tmin); X tmin = tmin * 60; X loaddata(); X timeset(); X X for (i = j = NULL; i < MAX_ENT; i++) X { X if ((yeardata[i] == year) && X (monthdata[i] == month) && (daydata[i] == day)) X { X dayindex[j++] = i; X } X X if (j > MAX_MSG) X break; X } X X sort(j - 1); X timeset(); X X for (i = NULL; i < j; i++) X { X nowtime = (mhour * 60) + min; X X if (timedata[dayindex[i]] > nowtime) X { X timeout = (timedata[dayindex[i]] - nowtime) * 60; X timeout = timeout > tmin ? timeout - tmin : NULL; X ringer(timeout, msgdata[dayindex[i]], X timedata[dayindex[i]]); X } X } X} X X/*----------------------------------------------------------------------------*/ X Xget_data(tmin) X Xint *tmin; X{ X char eqv_str[MAX_BUF]; X int stat; X $DESCRIPTOR(log_nam, VCAL_MIN); X $DESCRIPTOR(tab_nam, "LNM$JOB"); X ITEM_LST item_lst[] = X { X { 2, LNM$_STRING, eqv_str, 0 }, X { 0, 0, 0, 0 } X }; X X stat = sys$trnlnm(__, &tab_nam, &log_nam, __, &item_lst); X X *tmin = atoi(eqv_str); X *tmin = (*tmin < 5 || *tmin > 20) ? 5 : *tmin; X} X X/*----------------------------------------------------------------------------*/ X Xloaddata() X{ X char basedata[MAX_BUF], X key[MAX_BUF], X tmp[MAX_BUF]; X int field, X i, X j, X k, X l, X msgtime; X FILE *fptr; X X for (i = NULL; i < MAX_ENT; i++) X { X daydata[i] = monthdata[i] = yeardata[i] = msgdata[i] = NULL; X } X X if (access(APPTS_FILE, __) == -1) X warng(VCAL_ACCESS); X X fptr = fopen(APPTS_FILE, "r"); X i = NULL; X cuserid(key); X strcat(key, "-VCAL"); X X while(fgets(basedata, MAX_BUF, fptr) != NULL) X { X basedata[strlen(basedata) - 1] = NULL; X crypt_it(basedata, key); X j = k = field = NULL; X X while(basedata[j] != NULL ) X { X if (basedata[j] != ',') X tmp[k++] = basedata[j]; X else X { X switch(field) { X X case 0 : X tmp[k] = NULL; X monthdata[i] = atoi(tmp); X k = NULL; X break; X X case 1 : X tmp[k] = NULL; X daydata[i] = atoi(tmp); X k = NULL; X break; X X case 2 : X tmp[k] = NULL; X yeardata[i] = atoi(tmp); X k = NULL; X break; X X case 3 : X tmp[k] = NULL; X msgtime = atoi(tmp); X timedata[i] = ((msgtime / 100) * 60) + X (msgtime % 100); X k = NULL; X break; X } X field++; X } X j++; X } X X tmp[k] = NULL; X msgdata[i] = malloc(MAX_BUF); X strncpy(msgdata[i], tmp, MAX_BUF); X msgdata[MAX_BUF - 1] = NULL; X X if (++i >= MAX_ENT) X break; X } X X fclose(fptr); X} X X/*----------------------------------------------------------------------------*/ X Xwarng(msg_id) X Xint msg_id; X{ X char tmp[MSG_BUF]; X short msg_len; X int car_ret = 0x00000020, /* ret, , ret */ X func = IO$_WRITEVBLK | IO$M_BREAKTHRU | X IO$M_REFRESH | IO$M_CANCTRLO, X stat; X $DESCRIPTOR(msg_buf, tmp); X X stat = sys$getmsg(msg_id, &msg_len, &msg_buf, __, __); X tmp[msg_len] = NULL; X stat = sys$qiow(__, tty_chan, func, __, __, __, tmp, strlen(tmp), X __, car_ret, __, __); X stat = sys$exit(SS$_NORMAL); X} X X/*----------------------------------------------------------------------------*/ X Xtimeset() X{ X struct tm *localtime(); X X struct tm *tp; X int tloc; X X time(&tloc); X tp = localtime(&tloc); X dow = tp->tm_wday; X year = tp->tm_year; X month = tp->tm_mon + 1; X day = tp->tm_mday; X hour = tp->tm_hour; X mhour = tp->tm_hour; X min = tp->tm_min; X sec = tp->tm_sec; X year += LYEAR; X X if (sec >= 30) X { X if (++min == 60) X { X ++mhour; X ++hour; X min = 0; X } X } X X hour = hour > 12 ? hour - 12 : hour; X ampm = mhour >= 12 ? TRUE : FALSE; X} X X/*----------------------------------------------------------------------------*/ X Xringer(delay, message, at) X Xchar *message; Xint at, X delay; X{ X char tmp[MAX_BUF]; X int car_ret = 0x00000020, /* ret, , ret */ X func = IO$_WRITEVBLK | IO$M_BREAKTHRU | X IO$M_REFRESH | IO$M_CANCTRLO, X stat; X X sleep(delay); X timeset(); X sprintf(tmp, "%c%s - Time %d:%02d %2s - %s", X BEL, "*VCAL*", at / 60, at % 60, (ampm) ? "PM" : "AM", message); X stat = sys$qiow(__, tty_chan, func, __, __, __, tmp, strlen(tmp), X __, car_ret, __, __); X} X X/*----------------------------------------------------------------------------*/ X Xsort(upbound) X Xint upbound; X{ X int i, X j, X k; X X for (i = upbound; i > NULL; i--) X { X for (j = NULL; j < i; j++) X { X if (timedata[dayindex[j]] > timedata[dayindex[j + 1]]) X { X k = dayindex[j]; X dayindex[j] = dayindex[j + 1]; X dayindex[j + 1] = k; X } X } X } X} SHAR_EOF if test 6063 -ne "`wc -c < 'olddo-calls.c'`" then echo shar: error transmitting "'olddo-calls.c'" '(should have been 6063 characters)' fi fi # end of overwriting check echo shar: extracting "'oldvcal-purge.c'" '(3877 characters)' if test -f 'oldvcal-purge.c' then echo shar: will not over-write existing file "'oldvcal-purge.c'" else sed 's/^ X//' << \SHAR_EOF > 'oldvcal-purge.c' X/* X * ------------------------------------------------------- X * Neither York University, Department of Computer X * Science nor the author assume any responsibility X * for the use or reliability of this software. X * X * Copyright (C) 1987, York University X * Department of Computer Science X * X * General permission to copy or modify, but not for X * profit, is hereby granted, provided that the above X * copyright notice is included and reference made to X * the fact that reproduction privileges were granted X * by the York University, Department of Computer Science. X * ------------------------------------------------------- X * X * Written by: James Pierre Lewis X * Department of Computer Science X * York University X * 1987 - Version V1.0 X */ X X#include X#include X#include X#include "vcal.h" X Xchar *msgdata[MAX_ENT]; /* message pointers */ X Xint daydata[MAX_ENT], /* day data */ X monthdata[MAX_ENT], /* month data */ X tmonth, /* current month */ X tday, /* current day */ X tyear, /* current year */ X yeardata[MAX_ENT]; /* year data */ X Xmain() X{ X timeset(); X loaddata(); X updatedata(); X} X X/*----------------------------------------------------------------------------*/ X Xtimeset() X{ X int tloc; X struct tm *localtime(), X *tp; X X time(&tloc); X tp = localtime(&tloc); X X tyear = tp->tm_year; X tmonth = tp->tm_mon + 1; X tday = tp->tm_mday; X tyear += LYEAR; X} X X/*----------------------------------------------------------------------------*/ X Xloaddata() X{ X char basedata[MAX_BUF], X key[MAX_BUF], X tmp[MAX_BUF]; X int field, X i, X j, X k, X l; X FILE *fptr; X X for (i = NULL; i < MAX_ENT; i++) X { X daydata[i] = monthdata[i] = yeardata[i] = msgdata[i] = NULL; X } X X if (access(APPTS_FILE, __) == -1) X { X CHK_STAT("", __, OWN_MSG, VCAL_ACCESS); X } X X fptr = fopen(APPTS_FILE, "r"); X i = NULL; X cuserid(key); X strcat(key, "-VCAL"); X X while(fgets(basedata, MAX_BUF, fptr) != NULL) X { X basedata[strlen(basedata) - 1] = NULL; X crypt_it(basedata, key); X j = k = field = NULL; X X while(basedata[j] != NULL ) X { X if (basedata[j] != ',') X tmp[k++] = basedata[j]; X else X { X switch(field) { X X case 0 : X tmp[k] = NULL; X monthdata[i] = atoi(tmp); X k = NULL; X break; X X case 1 : X tmp[k] = NULL; X daydata[i] = atoi(tmp); X k = NULL; X break; X X case 2 : X tmp[k] = NULL; X yeardata[i] = atoi(tmp); X k = NULL; X break; X X case 3 : X tmp[k++] = ' '; X tmp[k++] = ' '; X break; X } X field++; X } X j++; X } X X tmp[k] = NULL; X msgdata[i] = malloc(MAX_BUF); X strncpy(msgdata[i], tmp, MAX_BUF); X msgdata[MAX_BUF - 1] = NULL; X X if (++i >= MAX_ENT) X break; X } X X fclose(fptr); X} X X/*----------------------------------------------------------------------------*/ X Xupdatedata(final_stat) X Xint *final_stat; X{ X char *c, X key[MAX_BUF], X tmp1[MAX_BUF], X tmp2[MAX_BUF], X tmpnam[MAX_BUF]; X int i, X stat; X FILE *fptr; X X c = mktemp("SYS$LOGIN:TMPXXXXXX"); X sprintf(tmpnam, "%s.DAT", c); X fptr = fopen(tmpnam, "w", "fop = cif", "mrs = 80", "rat = cr", X "rfm = var, stm"); X cuserid(key); X strcat(key, "-VCAL"); X X stat = lib$disable_ctrl(&LIB$M_CLI_CTRLY, __); X X for (i = NULL; i < MAX_ENT; i++) X { X X if ((daydata[i] != NULL) && X ((monthdata[i] >= tmonth) && (yeardata[i] >= tyear))) X { X strcpy(tmp1, msgdata[i]); X tmp1[4] = NULL; X sprintf(tmp2, "%d,%d,%d,%4.4s,%s", X monthdata[i], daydata[i], yeardata[i], X tmp1, &tmp1[6]); X crypt_it(tmp2, key); X fprintf(fptr, "%s\n", tmp2); X } X } X X fclose(fptr); X delete(APPTS_FILE); X stat = lib$rename_file(mkdesc(tmpnam), mkdesc(APPTS_FILE), __, X __, __, __, __, __, __, __, __, __); X X stat = lib$enable_ctrl(&LIB$M_CLI_CTRLY, __); X} SHAR_EOF if test 3877 -ne "`wc -c < 'oldvcal-purge.c'`" then echo shar: error transmitting "'oldvcal-purge.c'" '(should have been 3877 characters)' fi fi # end of overwriting check echo shar: extracting "'oldvcal-sum.c'" '(7830 characters)' if test -f 'oldvcal-sum.c' then echo shar: will not over-write existing file "'oldvcal-sum.c'" else sed 's/^ X//' << \SHAR_EOF > 'oldvcal-sum.c' X/* X * ------------------------------------------------------- X * Neither York University, Department of Computer X * Science nor the author assume any responsibility X * for the use or reliability of this software. X * X * Copyright (C) 1987, York University X * Department of Computer Science X * X * General permission to copy or modify, but not for X * profit, is hereby granted, provided that the above X * copyright notice is included and reference made to X * the fact that reproduction privileges were granted X * by the York University, Department of Computer Science. X * ------------------------------------------------------- X * X * Written by: James Pierre Lewis X * Department of Computer Science X * York University X * 1987 - Version V1.0 X */ X X#include X#include X#include X#include X#include "vcal.h" X Xchar *msgdata[MAX_ENT]; /* message pointers */ X Xint cday, /* current day */ X cmonth, /* current month */ X cyear, /* current year */ X daydata[MAX_ENT], /* day data */ X dayindex[MAX_MSG], /* day index to day, month, year */ X monthdata[MAX_ENT], /* month data */ X yeardata[MAX_ENT]; /* year data */ X Xmain() X{ X char file_nam[FILE_LEN]; X int month, X year; X X timeset(); X year = cyear; X month = cmonth; X get_data(&month, &year, file_nam); X X if (*file_nam) X stdout = freopen(file_nam, "w", stdout, "shr = nil"); X X if (stdout == NULL) X { X CHK_STAT("", __, OWN_MSG, VCAL_INVFILE); X } X X loaddata(); X fprintf(stdout, X " A P P O I N T M E N T S L I S T\n"); X repeat('-', 78); X table(month, year); X repeat('-', 78); X} X X/*----------------------------------------------------------------------------*/ X Xget_data(month, year, file_nam) X Xchar *file_nam; Xint *month, X *year; X{ X char month_tmp[MAX_BUF], X year_tmp[MAX_BUF]; X short len = NULL; X int stat; X struct { X int : 32; X struct { X char *month_nam; X int : 32; X } month_tbl[12]; X } key_tbl = X { X 24, X { X { "7JANUARY", 1 }, X { "8FEBRUARY", 2 }, X { "5MARCH", 3 }, X { "5APRIL", 4 }, X { "3MAY", 5 }, X { "3JUN", 6 }, X { "4JULY", 7 }, X { "6AUGUST", 8 }, X { "9SEPTEMBER", 9 }, X { "8OCTOBER", 10 }, X { "8NOVEMBER", 11 }, X { "8DECEMBER", 12 } X } X }; X $PTR_DESCRIPTOR(FILE_LEN, file_inp, file_nam); X $DESCRIPTOR(file_lbl, OUT_FILE); X $DESCRIPTOR(month_inp, month_tmp); X $DESCRIPTOR(month_lbl, MONTH); X $DESCRIPTOR(year_inp, year_tmp); X $DESCRIPTOR(year_lbl, YEAR); X X if ((stat = cli$present(&month_lbl)) == CLI$_PRESENT) X { X stat = cli$get_value(&month_lbl, &month_inp, &len); X month_tmp[len] = NULL; X stat = lib$lookup_key(mkdesc(month_tmp), &key_tbl, month, X __, __); X CHK_STAT("", stat, SS$_NORMAL, VCAL_INVMONTH); X } X X if ((stat = cli$present(&year_lbl)) == CLI$_PRESENT) X { X stat = cli$get_value(&year_lbl, &year_inp, &len); X year_tmp[len] = NULL; X *year = atoi(year_tmp); X X if (*year == NULL || *year > UYEAR || *year < LYEAR) X { X CHK_STAT("", __, OWN_MSG, VCAL_INVYEAR); X } X } X X if ((stat = cli$present(&file_lbl)) == CLI$_PRESENT) X { X stat = cli$get_value(&file_lbl, &file_inp, &len); X file_nam[len] = NULL; X } X} X X/*----------------------------------------------------------------------------*/ X Xrepeat(c, num) X Xchar c; Xint num; X{ X char tmp[MAX_BUF]; X int i; X X for (i = NULL; i < num; tmp[i] = c, i++); X X tmp[0] = tmp[num - 1] = '+'; X tmp[i] = NULL; X fprintf(stdout, "%s\n", tmp); X} X X/*----------------------------------------------------------------------------*/ X Xtable(month, year) X Xint month, X year; X{ X char *dayw[] = X { X "Sat ", "Sun ", "Mon ", "Tue ", X "Wed ", "Thu ", "Fri " X }; X char *smon[] = X { X "JANUARY ", "FEBRUARY ", "MARCH ", "APRIL ", X "MAY ", "JUNE ", "JULY ", "AUGUST ", X "SEPTEMBER ", "OCTOBER ", "NOVEMBER ", "DECEMBER " X }; X int dow, X first, X i, X j, X monthday = NULL; X X fprintf(stdout, X "| %-10.10s %4.4u \ X |\n", smon[month-1], year); X X while (++monthday <= 31) X { X first = TRUE; X X for (i = j = NULL; i <= MAX_ENT; i++) X { X if ((yeardata[i] == year) && (monthdata[i] == month) && X (daydata[i] == monthday)) X { X dayindex[j++] = i; X } X X if (j > MAX_MSG) X break; X } X X sort(j - 1); X X for (i = NULL; i < j; i++) X { X if (first == TRUE) X { X dow = getdow(monthday, month, year); X first = FALSE; X fprintf(stdout, X "| \ X |\n"); X fprintf(stdout, X "| %-7.7s%2d %-64.64s|\n", dayw[dow], X monthday, msgdata[dayindex[i]]); X } X else fprintf(stdout, X "| %-64.64s|\n", X msgdata[dayindex[i]]); X } X } X} X X/*----------------------------------------------------------------------------*/ X Xgetdow(tday, tmonth, tyear) X Xint tday, X tmonth, X tyear; X{ X X static int mdays[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; X int day = 1, X days, X mcnt, X month = 1, X year = 79; X X X if ((tmonth == month) && (tyear == year)) X days = abs(day - tday); X else X { X days = mdays[month] - day; X X if (tyear == year) X { X while (++month < tmonth) X { X days += mdays[month]; X days = ((month == 2) && ((year % 4) == 0)) ? X days + 1 : days; X } X } X else X { X while (++month < 13) X { X days += mdays[month]; X days = ((month == 2) && ((year % 4) == 0)) ? X days + 1 : days; X } X X while (++year < tyear) X { X days += 365; X days = ((year % 4) == 0) ? days + 1 : days; X } X X for (mcnt = 1; mcnt < tmonth; mcnt++) X { X days += mdays[mcnt]; X days = ((mcnt == 2) && ((tyear % 4) == 0)) ? X days + 1 : days; X } X } X X days += tday; X } X X return (days % 7); X} X X/*----------------------------------------------------------------------------*/ X Xloaddata() X{ X char basedata[MAX_BUF], X key[MAX_BUF], X tmp[MAX_BUF]; X int field, X i, X j, X k, X l; X FILE *fptr; X X for (i = NULL; i < MAX_ENT; i++) X { X daydata[i] = monthdata[i] = yeardata[i] = msgdata[i] = NULL; X } X X if (access(APPTS_FILE, __) == -1) X { X CHK_STAT("", __, OWN_MSG, VCAL_ACCESS); X } X X fptr = fopen(APPTS_FILE, "r"); X i = NULL; X cuserid(key); X strcat(key, "-VCAL"); X X while(fgets(basedata, MAX_BUF, fptr) != NULL) X { X basedata[strlen(basedata) - 1] = NULL; X crypt_it(basedata, key); X j = k = field = NULL; X X while(basedata[j] != NULL ) X { X if (basedata[j] != ',') X tmp[k++] = basedata[j]; X else X { X switch(field) { X X case 0 : X tmp[k] = NULL; X monthdata[i] = atoi(tmp); X k = NULL; X break; X X case 1 : X tmp[k] = NULL; X daydata[i] = atoi(tmp); X k = NULL; X break; X X case 2 : X tmp[k] = NULL; X yeardata[i] = atoi(tmp); X k = NULL; X break; X X case 3 : X tmp[k++] = ' '; X tmp[k++] = ' '; X break; X } X field++; X } X j++; X } X X tmp[k] = NULL; X msgdata[i] = malloc(MAX_BUF); X strncpy(msgdata[i], tmp, MAX_BUF); X msgdata[MAX_BUF - 1] = NULL; X X if (++i >= MAX_ENT) X break; X } X X fclose(fptr); X} X X/*----------------------------------------------------------------------------*/ X Xtimeset() X{ X int tloc; X struct tm *localtime(), X *tp; X X time(&tloc); X tp = localtime(&tloc); X X cyear = tp->tm_year; X cmonth = tp->tm_mon + 1; X cday = tp->tm_mday; X cyear += LYEAR; X} X X/*----------------------------------------------------------------------------*/ X Xsort(upbound) X Xint upbound; X{ X int i, X j, X k; X X for (i = upbound; i > NULL; i--) X { X for (j = NULL; j < i; j++) X { X if (strncmp(msgdata[dayindex[j]], X msgdata[dayindex[j + 1]], 4) > NULL) X { X k = dayindex[j]; X dayindex[j] = dayindex[j + 1]; X dayindex[j + 1] = k; X } X } X } X} SHAR_EOF if test 7830 -ne "`wc -c < 'oldvcal-sum.c'`" then echo shar: error transmitting "'oldvcal-sum.c'" '(should have been 7830 characters)' fi fi # end of overwriting check echo shar: extracting "'smgtrmptr.h'" '(7309 characters)' if test -f 'smgtrmptr.h' then echo shar: will not over-write existing file "'smgtrmptr.h'" else sed 's/^ X//' << \SHAR_EOF > 'smgtrmptr.h' X/* SMGTRMPTR.H Definitions */ X X#define SMG$K_ADVANCED_VIDEO 1 X#define SMG$K_ANSI_CRT 2 X#define SMG$K_AUTO_MARGIN 3 X#define SMG$K_BACKSPACE 4 X#define SMG$K_BLOCK_MODE 5 X#define SMG$K_DEC_CRT 6 X#define SMG$K_EDIT 7 X#define SMG$K_EIGHT_BIT 8 X#define SMG$K_FULLDUP 9 X#define SMG$K_IGNORE_NEWLINE 10 X#define SMG$K_INSERT_MODE_NULLS 11 X#define SMG$K_LOWERCASE 12 X#define SMG$K_NO_ERASE 13 X#define SMG$K_NO_SCROLL 14 X#define SMG$K_OVERSTRIKE 15 X#define SMG$K_PRINTER_PORT 16 X#define SMG$K_REGIS 17 X#define SMG$K_SCOPE 18 X#define SMG$K_SIXEL_GRAPHICS 19 X#define SMG$K_SOFT_CHARACTERS 20 X#define SMG$K_PHYSICAL_TABS 21 X#define SMG$K_PHYSICAL_FF 22 X#define SMG$K_UNDERLINE 23 X#define SMG$K_CURSOR_REPORT_ANSI 24 X#define SMG$K_DEC_CRT_2 25 X#define SMG$K_DEC_CRT_3 26 X#define SMG$K_SET_CURSOR_COL_ROW 27 X#define SMG$K_PRIVATE_BOO_1 211 X#define SMG$K_PRIVATE_BOO_2 212 X#define SMG$K_PRIVATE_BOO_3 213 X#define SMG$K_PRIVATE_BOO_4 214 X#define SMG$K_PRIVATE_BOO_5 215 X#define SMG$K_PRIVATE_BOO_6 216 X#define SMG$K_PRIVATE_BOO_7 217 X#define SMG$K_PRIVATE_BOO_8 218 X#define SMG$K_PRIVATE_BOO_9 219 X#define SMG$K_PRIVATE_BOO_10 220 X#define SMG$K_MAX_BOOLEAN_CODE 220 X#define SMG$K_COLUMNS 221 X#define SMG$K_CR_FILL 222 X#define SMG$K_FRAME 223 X#define SMG$K_LF_FILL 224 X#define SMG$K_NUMBER_FN_KEYS 225 X#define SMG$K_ROWS 226 X#define SMG$K_VMS_TERMINAL_NUMBER 227 X#define SMG$K_WIDE_SCREEN_COLUMNS 228 X#define SMG$K_PRIVATE_NUM_1 431 X#define SMG$K_PRIVATE_NUM_2 432 X#define SMG$K_PRIVATE_NUM_3 433 X#define SMG$K_PRIVATE_NUM_4 434 X#define SMG$K_PRIVATE_NUM_5 435 X#define SMG$K_PRIVATE_NUM_6 436 X#define SMG$K_PRIVATE_NUM_7 437 X#define SMG$K_PRIVATE_NUM_8 438 X#define SMG$K_PRIVATE_NUM_9 439 X#define SMG$K_PRIVATE_NUM_10 440 X#define SMG$K_MAX_NUMERIC_CODE 440 X#define SMG$K_BEGIN_ALTERNATE_CHAR 441 X#define SMG$K_BEGIN_BLINK 442 X#define SMG$K_BEGIN_BOLD 443 X#define SMG$K_BEGIN_DELETE_MODE 444 X#define SMG$K_BEGIN_INSERT_MODE 445 X#define SMG$K_BEGIN_LINE_DRAWING_CHAR 446 X#define SMG$K_BEGIN_REVERSE 447 X#define SMG$K_BEGIN_UNDERSCORE 448 X#define SMG$K_BOTTOM_T_CHAR 449 X#define SMG$K_CLEAR_TAB 450 X#define SMG$K_CROSS_CHAR 451 X#define SMG$K_CURSOR_DOWN 452 X#define SMG$K_CURSOR_LEFT 453 X#define SMG$K_CURSOR_RIGHT 454 X#define SMG$K_CURSOR_UP 455 X#define SMG$K_DARK_SCREEN 456 X#define SMG$K_DELETE_CHAR 457 X#define SMG$K_DELETE_LINE 458 X#define SMG$K_DEVICE_ATTRIBUTES 459 X#define SMG$K_DOUBLE_HIGH_BOTTOM 460 X#define SMG$K_DOUBLE_HIGH_TOP 461 X#define SMG$K_DOUBLE_WIDE 462 X#define SMG$K_DUPLICATE 463 X#define SMG$K_END_ALTERNATE_CHAR 464 X#define SMG$K_END_BLINK 465 X#define SMG$K_END_BOLD 466 X#define SMG$K_END_DELETE_MODE 467 X#define SMG$K_END_INSERT_MODE 468 X#define SMG$K_END_LINE_DRAWING_CHAR 469 X#define SMG$K_END_REVERSE 470 X#define SMG$K_END_UNDERSCORE 471 X#define SMG$K_ERASE_TO_END_DISPLAY 472 X#define SMG$K_ERASE_TO_END_LINE 473 X#define SMG$K_ERASE_WHOLE_DISPLAY 474 X#define SMG$K_ERASE_WHOLE_LINE 475 X#define SMG$K_HOME 476 X#define SMG$K_HORIZONTAL_BAR 477 X#define SMG$K_INIT_STRING 478 X#define SMG$K_INSERT_CHAR 479 X#define SMG$K_INSERT_LINE 480 X#define SMG$K_INSERT_PAD 481 X#define SMG$K_KEY_0 482 X#define SMG$K_KEY_1 483 X#define SMG$K_KEY_2 484 X#define SMG$K_KEY_3 485 X#define SMG$K_KEY_4 486 X#define SMG$K_KEY_5 487 X#define SMG$K_KEY_6 488 X#define SMG$K_KEY_7 489 X#define SMG$K_KEY_8 490 X#define SMG$K_KEY_9 491 X#define SMG$K_KEY_BACKSPACE 492 X#define SMG$K_KEY_COMMA 493 X#define SMG$K_KEY_DOWN_ARROW 494 X#define SMG$K_KEY_E1 495 X#define SMG$K_KEY_E2 496 X#define SMG$K_KEY_E3 497 X#define SMG$K_KEY_E4 498 X#define SMG$K_KEY_E5 499 X#define SMG$K_KEY_E6 500 X#define SMG$K_KEY_ENTER 501 X#define SMG$K_KEY_F1 502 X#define SMG$K_KEY_F2 503 X#define SMG$K_KEY_F3 504 X#define SMG$K_KEY_F4 505 X#define SMG$K_KEY_F5 506 X#define SMG$K_KEY_F6 507 X#define SMG$K_KEY_F7 508 X#define SMG$K_KEY_F8 509 X#define SMG$K_KEY_F9 510 X#define SMG$K_KEY_F10 511 X#define SMG$K_KEY_F11 512 X#define SMG$K_KEY_F12 513 X#define SMG$K_KEY_F13 514 X#define SMG$K_KEY_F14 515 X#define SMG$K_KEY_F15 516 X#define SMG$K_KEY_F16 517 X#define SMG$K_KEY_F17 518 X#define SMG$K_KEY_F18 519 X#define SMG$K_KEY_F19 520 X#define SMG$K_KEY_F20 521 X#define SMG$K_KEY_LEFT_ARROW 522 X#define SMG$K_KEY_MINUS 523 X#define SMG$K_KEY_PERIOD 524 X#define SMG$K_KEY_PF1 525 X#define SMG$K_KEY_PF2 526 X#define SMG$K_KEY_PF3 527 X#define SMG$K_KEY_PF4 528 X#define SMG$K_KEY_RIGHT_ARROW 529 X#define SMG$K_KEY_UP_ARROW 530 X#define SMG$K_LABEL_F1 531 X#define SMG$K_LABEL_F2 532 X#define SMG$K_LABEL_F3 533 X#define SMG$K_LABEL_F4 534 X#define SMG$K_LABEL_F5 535 X#define SMG$K_LABEL_F6 536 X#define SMG$K_LABEL_F7 537 X#define SMG$K_LABEL_F8 538 X#define SMG$K_LABEL_F9 539 X#define SMG$K_LABEL_F10 540 X#define SMG$K_LABEL_F11 541 X#define SMG$K_LABEL_F12 542 X#define SMG$K_LABEL_F13 543 X#define SMG$K_LABEL_F14 544 X#define SMG$K_LABEL_F15 545 X#define SMG$K_LABEL_F16 546 X#define SMG$K_LABEL_F17 547 X#define SMG$K_LABEL_F18 548 X#define SMG$K_LABEL_F19 549 X#define SMG$K_LABEL_F20 550 X#define SMG$K_LEFT_T_CHAR 551 X#define SMG$K_LIGHT_SCREEN 552 X#define SMG$K_LOWER_LEFT_CORNER 553 X#define SMG$K_LOWER_RIGHT_CORNER 554 X#define SMG$K_NAME 555 X#define SMG$K_NEWLINE_CHAR 556 X#define SMG$K_PAD_CHAR 557 X#define SMG$K_RESTORE_CURSOR 558 X#define SMG$K_RIGHT_T_CHAR 559 X#define SMG$K_SAVE_CURSOR 560 X#define SMG$K_SCROLL_FORWARD 561 X#define SMG$K_SCROLL_REVERSE 562 X#define SMG$K_SEL_ERASE_TO_END_DISPLAY 563 X#define SMG$K_SEL_ERASE_TO_END_LINE 564 X#define SMG$K_SEL_ERASE_WHOLE_DISPLAY 565 X#define SMG$K_SEL_ERASE_WHOLE_LINE 566 X#define SMG$K_SET_APPLICATION_KEYPAD 567 X#define SMG$K_SET_CHAR_NOT_SEL_ERASE 568 X#define SMG$K_SET_CHAR_SEL_ERASE 569 X#define SMG$K_SET_CURSOR_ABS 570 X#define SMG$K_SET_NUMERIC_KEYPAD 571 X#define SMG$K_SET_SCROLL_REGION 572 X#define SMG$K_SET_TAB 573 X#define SMG$K_SINGLE_HIGH 574 X#define SMG$K_TAB_CHAR 575 X#define SMG$K_TOP_T_CHAR 576 X#define SMG$K_UNDERLINE_CHAR 577 X#define SMG$K_UPPER_LEFT_CORNER 578 X#define SMG$K_UPPER_RIGHT_CORNER 579 X#define SMG$K_VERTICAL_BAR 580 X#define SMG$K_WIDTH_NARROW 581 X#define SMG$K_WIDTH_WIDE 582 X#define SMG$K_CURSOR_POSITION_REPORT 583 X#define SMG$K_REQUEST_CURSOR_POSITION 584 X#define SMG$K_CR_GRAPHIC 585 X#define SMG$K_FF_GRAPHIC 586 X#define SMG$K_LF_GRAPHIC 587 X#define SMG$K_HT_GRAPHIC 588 X#define SMG$K_VT_GRAPHIC 589 X#define SMG$K_TRUNCATION_ICON 590 X#define SMG$K_CURSOR_NEXT_LINE 591 X#define SMG$K_CURSOR_PRECEDING_LINE 592 X#define SMG$K_INDEX 593 X#define SMG$K_REVERSE_INDEX 594 X#define SMG$K_BEGIN_NORMAL_RENDITION 595 X#define SMG$K_BEGIN_AUTOWRAP_MODE 596 X#define SMG$K_END_AUTOWRAP_MODE 597 X#define SMG$K_BEGIN_AUTOREPEAT_MODE 598 X#define SMG$K_END_AUTOREPEAT_MODE 599 X#define SMG$K_SET_ORIGIN_RELATIVE 600 X#define SMG$K_SET_ORIGIN_ABSOLUTE 601 X#define SMG$K_ERASE_LINE_TO_CURSOR 602 X#define SMG$K_NEXT_LINE 603 X#define SMG$K_BEGIN_AUTOPRINT_MODE 604 X#define SMG$K_END_AUTOPRINT_MODE 605 X#define SMG$K_PRINT_SCREEN 606 X#define SMG$K_SET_CURSOR_ON 607 X#define SMG$K_SET_CURSOR_OFF 608 X#define SMG$K_SET_PRINTER_OUTPUT 609 X#define SMG$K_SET_SCREEN_OUTPUT 610 X#define SMG$K_ERASE_DISPLAY_TO_CURSOR 611 X#define SMG$K_PRIVATE_STR_1 651 X#define SMG$K_PRIVATE_STR_2 652 X#define SMG$K_PRIVATE_STR_3 653 X#define SMG$K_PRIVATE_STR_4 654 X#define SMG$K_PRIVATE_STR_5 655 X#define SMG$K_PRIVATE_STR_6 656 X#define SMG$K_PRIVATE_STR_7 657 X#define SMG$K_PRIVATE_STR_8 658 X#define SMG$K_PRIVATE_STR_9 659 X#define SMG$K_PRIVATE_STR_10 660 SHAR_EOF if test 7309 -ne "`wc -c < 'smgtrmptr.h'`" then echo shar: error transmitting "'smgtrmptr.h'" '(should have been 7309 characters)' fi fi # end of overwriting check echo shar: extracting "'vcal-msg.msg'" '(619 characters)' if test -f 'vcal-msg.msg' then echo shar: will not over-write existing file "'vcal-msg.msg'" else sed 's/^ X//' << \SHAR_EOF > 'vcal-msg.msg' X.TITLE vcal_mssg X.FACILITY vcal,1/PREFIX=VCAL_ X X.SEVERITY INFORMATIONAL X XFILE X X.SEVERITY WARNING X X X.SEVERITY ERROR X XACCESS XINVFILE XINVMIN XINVMONTH XINVYEAR XNOT_COMP XNOT_TRM XPURGE X X.END SHAR_EOF if test 619 -ne "`wc -c < 'vcal-msg.msg'`" then echo shar: error transmitting "'vcal-msg.msg'" '(should have been 619 characters)' fi fi # end of overwriting check # End of shell archive exit 0