*--------------------------* * TABLE * GENERIC TABLE MAINTENANCE PROGRAM TO UPDATE CLOCK TABLES. *--------------------------* CS=@(-1) ; CR=@(-3) ; CL=@(-4) ; RV=@(-13) ; ERV=@(-14) VM=CHAR(253) ; SVM=CHAR(252) ; AM=CHAR(254) ; BEEP=CHAR(7) PF1='<' ; PF2='P' ; PF3='/' PROMPT "" PORT=OCONV('','U50BB') PORT=FIELD(PORT," ",1) * OPEN 'PT' TO PT.FILE ELSE ABORT READV PT FROM PT.FILE,PORT,1 ELSE PT='' BEGIN CASE CASE PT='2020'; ADDS=1 CASE PT='4000'; ADDS=2 CASE PT='2025'; ADDS=2 CASE 1 ; ADDS=0 END CASE IF ADDS THEN * TA ON; TA CLEAR END * FILENAME='USER' LAYOUT=1:VM:2:VM:3:VM:4:VM:5:VM:6:VM:7 LAYOUT<2>="FIRST NAME":VM:"LAST NAME":VM:"PHONE":VM:"PASSWORD":VM:"DEPT":VM:"SS #":VM:"IN TIME" LAYOUT<3,1>="Enter the FIRST NAME of this user" LAYOUT<3,2>="Enter the LAST NAME of this user" LAYOUT<3,3>="Enter the PHONE # of this user" LAYOUT<3,4>="Enter the user PASSWORD" LAYOUT<3,5>="Enter the DEPARTMENT of this user, ?(help)" LAYOUT<3,6>="Enter the EMPLOYEE # of this user" LAYOUT<3,7>="Enter the TIME the employee should clock in" LAYOUT<4>=VM:VM:VM:VM:'DEPT' OPEN FILENAME TO OFILE ELSE ABORT 10 * CRT CS CRT @(0,0):"CLOCKTABLE.USER" STRING=FILENAME:" MAINTENANCE" CENTER=40-INT(LEN(STRING)/2) XCT=DCOUNT(LAYOUT<1>,VM) OLD.LEN=0 FOR X=1 TO XCT XLEN=LEN(LAYOUT<2,X>) IF XLEN > OLD.LEN THEN OLD.LEN=XLEN NEXT X XLEN=OLD.LEN CRT @(CENTER,3):RV:STRING:ERV STRING=FILENAME CRT @(0,22):CL:"Enter ":FILENAME:" code '/' to escape" CRT @(CENTER,6):CL:STRING:" ": CENTER=CENTER-5 INPUT KEY IF KEY='/' OR KEY='' THEN STOP READ IREC FROM OFILE,KEY THEN GOSUB 2000 OREC=IREC END ELSE CRT @(0,22):CL:FILENAME:" record not found - 'A'(add)": INPUT ANS IF ANS = 'A' THEN IREC='' OREC='' GOSUB 2000 GOSUB 1000 END ELSE GO 10 END END GOSUB 3000 GO 10 1000 * ACT=DCOUNT(LAYOUT<1>,VM) FOR A=1 TO ACT ALEN=LEN(LAYOUT<2,A>) CRT @(0,22):CL:LAYOUT<3,A>: CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ": INPUT ANS IF A=7 THEN ANS=ICONV(ANS,'MT') CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":OCONV(ANS,'MTS') END IF ANS = '?' THEN ANS='' GOSUB 9000 CRT @(0,5):CR IREC=OREC GOSUB 2000 A=5 ALEN=LEN(LAYOUT<2,A>) CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":ANS IREC='' END IF ANS # '' THEN OREC=ANS END NEXT A RETURN 2000 * ACT=DCOUNT(LAYOUT<1>,VM) FOR A=1 TO ACT ALEN=LEN(LAYOUT<2,A>) IF A=7 THEN CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":OCONV(IREC,'MTS') END ELSE CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":IREC END NEXT A RETURN 3000 * CRT @(0,22):CL:"Enter # change, 'E'(end), 'D'(delete) else RETURN ": INPUT A IF A='E' THEN GOSUB 4000; GO 10 IF A='D' THEN GOSUB 4200; GO 10 IF A >=1 AND A <=ACT THEN ALEN=LEN(LAYOUT<2,A>) CRT @(0,22):CL:LAYOUT<3,A>: IF A=7 THEN CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":OCONV(OREC,'MTS'):CL END ELSE CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":OREC:CL END CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ": INPUT ANS IF ANS='?' THEN GOSUB 9000 CRT @(0,5):CR GOSUB 2000 A=5 ALEN=LEN(LAYOUT<2,A>) END IF ANS # '' THEN IF A=7 THEN OREC=ICONV(ANS,'MT') END ELSE OREC=ANS END END IF A=7 THEN CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":OCONV(OREC,'MTS'):CL END ELSE CRT @(CENTER,7+A):A:" ":LAYOUT<2,A>:STR(" ",XLEN-ALEN):": ":OREC:CL END GO 3000 END CRT @(0,22):CL:"NO SELECTION MADE": RQM GO 10 RETURN 4000 * IF OREC<6> ="" THEN CRT CS:BEEP:@(10,10):"NO UPDATE IS ALLOWED TO THIS RECORD WITHOUT A VALID EMPLOYEE #!" CRT @(10,11):"PLEASE SEE THE ACCOUNTING DEPARTMENT FOR AN EMPLOYEE # NOW!" RQM;RQM END ELSE IF OREC<43>='' THEN OREC<43>='C' WRITE OREC ON OFILE,KEY CRT @(0,22):CL:"RECORD UPDATED": RQM END RETURN 4200 *---- delete a user --------------------------------------* CRT @(0,22):CL:BEEP:RV:" ARE YOU SURE YOU WANT TO DELETE USER ":KEY:" (Y/N) :":ERV: INPUT DELANS,9 IF DELANS[1,1]='Y' THEN DELETE OFILE,KEY CRT @(0,22):CL:BEEP:RV:" USER HAS BEEN DELETED! :":ERV: INPUT ANY,4 RETURN END CRT @(0,22):CL:BEEP:RV:" USER HAS NOT BEEN DELETE! :":ERV: INPUT ANY,4 RETURN * 9000 * HELP IF LAYOUT<4,A> # '' THEN OPEN LAYOUT<4,A> TO HFILE ELSE CRT @(0,22):"HELP FILE ":LAYOUT<4,A>:" NOT FOUND!":CL RQM GO 9099 END HELP.TBL='' SELECT HFILE LOOP READNEXT HKEY ELSE HKEY='EOF' UNTIL HKEY='EOF' DO LOCATE(HKEY,HELP.TBL,1;INDX;'AR') ELSE READV HDESC FROM HFILE,HKEY,1 ELSE HDESC='UNKNOWN' HELP.TBL=INSERT(HELP.TBL,1,INDX;HKEY) HELP.TBL=INSERT(HELP.TBL,2,INDX;HDESC) END REPEAT ANS='' GOSUB 9500 END ELSE CRT @(0,22):"NO HELP AVAILABLE FOR THIS PROMPT!":CL RQM END 9099 * RETURN 9500 * HELP HEADER POS=6; COL=0 CRT @(COL,POS):CR GOSUB 2225 TSTRING=LAYOUT<2,A>'L#9':"DESCRIPTION"'L#27' CRT @(COL+2,POS):TSTRING CRT @(COL+42,POS):TSTRING * X=0;XX=0; MAX=14; SW=0; COL=2 XCT=DCOUNT(HELP.TBL<1>,VM) LOOP X=X+1 XX=XX+1 TSTRING=HELP.TBL<1,X>'L#9':HELP.TBL<2,X>[1,27]'L#27' CRT @(COL,POS+XX):TSTRING IF INT(XX/MAX) THEN SW=SW+1 IF REM(SW,2) THEN COL=42 END ELSE COL=2 GOSUB 9600 END XX=0 END UNTIL ANS # '' DO REPEAT IF ANS='/' THEN ANS='' RETURN * 9600 * CRT @(0,22):RV:"Enter ":LAYOUT<2,A>:", N(next page), B(back page)":ERV:CL: INPUT ANS2: IF ANS2='' OR ANS2='/' THEN ANS='/' GO 9699 END IF ANS2='B' THEN X=X-(XX+(MAX*3)) IF X < 0 THEN X=0 SW=0 END ELSE IF ANS2='N' THEN IF X > XCT THEN CRT @(0,22):"End of list!":CL RQM GO 9600 END END ELSE LOCATE(ANS2,HELP.TBL,1;INDX) THEN ANS=ANS2 END ELSE CRT @(0,22):RV:BEEP:"INVALID CODE - Try Again!":ERV:CL: END END END 9699 * RETURN 2225 * DRAW BOX IF ADDS THEN FOR X=POS TO 21 IF X=POS THEN TSTRING1="#" TCOL=COL; TPOS=X; GOSUB 2275 TSTRING1="L" TCOL=COL+39; GOSUB 2275 TSTRING1="D" TCOL=COL+79; GOSUB 2275 END ELSE IF X=21 THEN TSTRING1="B":STR("<",38):"M":STR("<",39):"F" TCOL=COL; TPOS=X; GOSUB 2275 END ELSE TSTRING1=">" TCOL=COL; TPOS=X; GOSUB 2275 TCOL=COL+39; GOSUB 2275 TCOL=COL+79; GOSUB 2275 END END NEXT X END ELSE FOR X=POS TO 21 IF X=POS THEN TSTRING1="|" TCOL=COL; TPOS=X; GOSUB 2285 TSTRING1="|" TCOL=COL+39; GOSUB 2285 TSTRING1="|" TCOL=COL+79; GOSUB 2285 END ELSE IF X=21 THEN TSTRING1=STR("~",80) TCOL=COL; TPOS=X; GOSUB 2285 END ELSE TSTRING1="|" TCOL=COL; TPOS=X; GOSUB 2285 TCOL=COL+39; GOSUB 2285 TCOL=COL+79; GOSUB 2285 END END NEXT X END RETURN 2275 * PRINT GRAPHICS CRT CHAR(27):CHAR(72):CHAR(2) CRT @(TCOL,TPOS):TSTRING1: CRT CHAR(27):CHAR(72):CHAR(3) RETURN 2285 * PRINT LINE CRT @(TCOL,TPOS):TSTRING1: RETURN