*---------------------------* * JOHN'S FIRST PROGRAM * MAY 14, 1991 *---------------------------* CS=@(-1) ; CR=@(-3) ; CL=@(-4) ; RV=@(-13) ; ERV=@(-14) VM=CHAR(253) ; SVM=CHAR(252) ; AM=CHAR(254) ; BEEP=CHAR(7) PROMPT " " LNCNT=59 SCREEN=0 LN='' * OPEN 'DEPT' TO DEPT.FILE ELSE ABORT OPEN 'CLOCKFILE' TO CLOCKFILE ELSE ABORT OPEN 'USER' TO USER.FILE ELSE ABORT 5 * SELECT DEPT.FILE DEPT.ARRAY='' LOOP READNEXT KEY ELSE KEY='EOF' UNTIL KEY='EOF' DO LOCATE(KEY,DEPT.ARRAY,1;NDX;'AL') ELSE DEPT.ARRAY=INSERT(DEPT.ARRAY,1,NDX;KEY) DEPT.ARRAY=INSERT(DEPT.ARRAY,2,NDX;"0") READ DEPT.REC FROM DEPT.FILE,KEY ELSE DEPT.REC='' DEPT.ARRAY=INSERT(DEPT.ARRAY,3,NDX;DEPT.REC<1>) END REPEAT 10 * TODAY=DATE() NAME= '' CRT CS PROGRAM='JOHN' PRINT @(-1): PRINT @(2,1): PROGRAM: @(20,1): RV: 'Employee Clock Errors Report ' : ERV : @(55,1): TIMEDATE() PRINT @(54,2):RV: ' List of Departments ' :ERV: ICT=DCOUNT(DEPT.ARRAY<1>,VM) FOR I=1 TO ICT UNTIL I > 20 DISP=I:'. ' CRT @(48,2+I):DEPT.ARRAY<1,I>'L#7':DEPT.ARRAY<3,I>[1,20] NEXT I 20 * Z=0 LOOP CRT@(2,4): "Enter the DEPARTMENT CODE or 'ALL': ": CRT @(10,10+Z):"DEPARTMENT ": INPUT DEPT IF DEPT = "/" THEN STOP IF DEPT='ALL' THEN DEPT.ARRAY='ALL' IF DEPT='ALL' THEN GO 30 LOCATE(DEPT,DEPT.ARRAY,1;NDX) THEN DEPT.ARRAY<2,NDX>=1 END Z=Z+1 UNTIL DEPT='' DO IF DEPT='' THEN GO 10 REPEAT 30 * CRT @(10,12+Z):"START DATE (MM/DD/YY) ": INPUT SDATE CRT @(10,14+Z):"LAST DATE (MM/DD/YY) ": INPUT LDATE * 40 * PRT='' CRT @(0,20):CR:"Output to the printer (Y/N): ": INPUT PRT IF PRT = 'Y' THEN CRT '' EXECUTE "EX PRINTER" CRT @(0,18):CR MAXCT=55 END ELSE MAXCT=20 IF PRT # 'N' THEN GOSUB 100 END 50 * TCL=\SSELECT CLOCKFILE WITH DEPT \ FOR X=1 TO ICT IF DEPT.ARRAY<2,X>=1 THEN TCL=TCL:\"\:DEPT.ARRAY<1,X>:\"\ END NEXT X TCL=TCL:\ AND WITH DATE GE "\:SDATE:\" AND WITH DATE LE "\:LDATE:\" BY DEPT BY USER (R,5 \ EXECUTE TCL IF PRT='Y' THEN PRINTER ON END CRT @(0,3):CR LOOP READNEXT ID ELSE ID = 'EOF' UNTIL ID = 'EOF' DO READ REC FROM CLOCKFILE,ID THEN ERROR='' VCT=DCOUNT(REC<1>,VM) IF REM(VCT,2) # 0 THEN ERROR='MISSING ENTRY' END ELSE FOR V=VCT TO 2 STEP -1 IF REC<1,V> >= REC<1,V-1> ELSE ERROR='INVALID TIME' END NEXT V END IF ERROR # '' THEN USER=OCONV(ID,"G0|1") READ UREC FROM USER.FILE,USER THEN NAME=UREC<2>:", ":UREC<1>[1,1]:"." DEPT=UREC<5> END DATE=OCONV(ID,"G1|1") DATE=OCONV(DATE,'D2/') LN = USER'L#6':NAME'L#15':DEPT'L#9':DATE'L#10':ERROR'L#20' FOR V=1 TO VCT IF V # 1 THEN LN=SPACE(60) LN=LN:OCONV(REC<1,V>,'MT')'L#10':REC<2,V>'L#9' GOSUB 100 NEXT V END END REPEAT IF PRT='Y' THEN PRINTER OFF END CRT @(0,22):"PROCESS COMPLETE - HIT RETURN": INPUT ANY STOP 100 * IF LNCNT > MAXCT THEN IF PRT='N' THEN CRT @(0,22):"HIT RETURN": INPUT ANY END PRINT CHAR(12) PRINT PROGRAM : SPACE(10): 'Employee clock Errors Report ' : SPACE(8): TIMEDATE() PRINT " I N T E R N A L D A T A M A N A G E M E N T C L O C K E R R O R S ": PRINT PRINT " Clock Error Report for ":OCONV(SDATE,"D2/") : " thur " :OCONV(LDATE,"D2/"): " for DEPARTMENTS " : DEPT PRINT PRINT "EMPLOYEE NAME DEPT DATE ERROR MESSAGE TIME PROJECT " PRINT "CODE " PRINT "============================================================================= ": PRINT LNCNT=9 END PRINT LN LNCNT=LNCNT+1 RETURN 1000 * STOP