*---------------------------- * * PROGRAM: CLOCK * REQUIRES: CM,PROJECTS,TIMES * BY: D.BELL * ON: 12/24/90 * ON: 06/25/91 KJC DISPLAYS HOURLY TOTAL FOR PAY PERIOD * ON: 02/28/95 STR DISPLAYS HOURLY TOTAL FOR WEEK ONE & TWO *-----------------------------* $INCLUDE GEN.COMMON ***** CLERK MASTER (CM) FILE LAYOUT ***** * * USER ATTRIBUTES * EQU CM$FNAME TO 1 EQU CM$LNAME TO 2 EQU CM$PHONE TO 3 EQU CM$PASSWD TO 4 EQU CM$DEPT TO 5 EQU CM$FILLER1 TO 6 EQU CM$PASSWD.SET.DATE TO 7 EQU CM$PASSWD.EXP.DATE TO 8 EQU CM$POSITION TO 9 EQU CM$UNIX.USER TO 10 ; * IN-HOUSE ACCOUNTS ONLY EQU CM$STATUS TO 11 EQU CM$FILLER2 TO 12 EQU CM$FILLER3 TO 13 EQU CM$ACCOUNTS TO 14 * * SECURITY ATTRIBUTES * EQU CM$TECHNICAL.MENU TO 15 EQU CM$FILLER4 TO 16 EQU CM$FILLER5 TO 17 EQU CM$FILLER6 TO 18 EQU CM$FILLER7 TO 19 EQU CM$FILLER8 TO 20 EQU CM$DAILY.PROCESSING TO 21 EQU CM$DEPOSIT.ENTRIES TO 22 EQU CM$BATCH.MAINT TO 23 EQU CM$DOC.PROCESSING TO 24 EQU CM$DAILY.REPORTS TO 25 EQU CM$ACK.LETTERS TO 26 EQU CM$BALANCE.CLOSE.DAY TO 27 EQU CM$ACCOUNT.MAINT TO 28 EQU CM$FINANCIAL.INQ TO 29 EQU CM$UPDATE.ACCOUNT TO 30 EQU CM$XFER.TRANS TO 31 EQU CM$BACKOUT.TRANS TO 32 EQU CM$WORD.PROCESSING TO 33 EQU CM$LETTER.MAINT TO 34 EQU CM$ACKNOWLEDGE.UPDT TO 35 EQU CM$REPORTS.MAIN.MENU TO 36 EQU CM$ORDER.AND.INV TO 37 EQU CM$PROCESS.ORDERS TO 38 EQU CM$INV.CONTROL TO 39 EQU CM$SYSTEM.UTILS TO 40 EQU CM$TABLE.FILE.MAINT TO 41 EQU CM$PRINTER.FUNCTIONS TO 42 EQU CM$SECURITY TO 43 EQU CM$MONTHLY.ON.REQ TO 44 EQU CM$SETUP.NEW.ACCOUNT TO 45 EQU CM$SPECIAL.FEATURES TO 46 EQU CM$PLEDGE.AND.CLUB TO 47 EQU CM$SUBS.PROCESSING TO 48 EQU CM$LEADER.ACCESS TO 49 EQU CM$ATTENDANCE.SYSTEM TO 50 EQU CM$CASSETTE.LABEL TO 51 EQU CM$SPECIAL.CUSTOM TO 52 EQU CM$EDIT.MENUS TO 53 EQU CM$ONLINE.TABLE.UPDT TO 54 EQU CM$VIP.ACCESS TO 55 EQU CM$ACCOUNT.DELETE TO 56 EQU CM$SPECIAL.UTILITIES TO 57 EQU CM$800.PHONE.CENTER TO 58 ; * IN-HOUSE ACCOUNTS ONLY * OPEN 'CM' TO CM ELSE ABORT 201,'CM' OPEN 'PT' TO PT ELSE ABORT 201,'PT' OPEN 'CM.XREF' TO XREF ELSE ABORT 201,'CM.XREF' OPEN 'USER' TO USER.FILE ELSE ABORT OPEN 'PROJECT' TO PROJECT ELSE ABORT OPEN 'CLOCKFILE' TO CLOCKFILE ELSE ABORT OPEN 'PORTS' TO PT.FILE ELSE ABORT * EMSG=@(0,22):BEEP:"Access to CMS has been denied - check with your supervisor!!" *EMSG2=@(0,22):BEEP:"You are already logged on!!" READ XREF.REC FROM XREF,@LOGNAME ELSE CRT EMSG: RQM;RQM CHAIN "OFF" STOP END UID=XREF.REC<1> USER=UID[2,4] READ CM.DATA FROM CM,UID ELSE CRT EMSG: RQM;RQM CHAIN "OFF" STOP END IF CM.DATA # "A" THEN CRT EMSG: RQM;RQM CHAIN "OFF" STOP END PROMPT "" PORT=@USERNO * 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 * CRT CS HELP.TBL=''; GOSUB 4000 ;* LOAD PROJECT CODES INTO ARRAY COL=0 POS=10 PSW=0 CSW=0 OLD.TIME="0" NEW=0 DONE=0 TOTAL.HRS = '' * *FLOATING MODE* * ANY='' LOOP TIME=TIME() TODAY=DATE() IF ADDS THEN IF TIME = OLD.TIME AND NEW#0 ELSE OLD.TIME=TIME IF REM(TIME,10)=0 OR NEW='0' THEN GOSUB 500 GOSUB 50 GOSUB 75 END GOSUB 200 END NEW=1 ANY='' INPUTIF ANY,1 THEN *TA CLEAR GOSUB 1000 POS=10; COL=0 *TA CLEAR NEW=0 END END ELSE GOSUB 1000 DONE=1 END UNTIL DONE DO REPEAT STOP 40 * 2020 LOGIC TLEN=LEN(TSTRING1) TSTRING1.TEMP='' FOR TL=1 TO TLEN TSTRING1.TEMP=TSTRING1.TEMP:TSTRING1[TL,1]:" " NEXT TL TSTRING1=TSTRING1.TEMP RETURN 50 * DRAW BOX CRT CS IF ADDS THEN CRT CHAR(23) TSTRING1="#<<<<<<<<<<<<<<<<< 15 THEN PSW=PSW+1 IF COL < 1 OR COL > 17 THEN CSW=CSW+1 IF REM(PSW,2) THEN POS=POS-1 END ELSE POS=POS+1 END IF REM(CSW,2) THEN COL=COL+2 END ELSE COL=COL-2 END RETURN 1000 * CRT CS POS=0; COL=0; GOSUB 50; GOSUB 200 IF ADDS THEN TSTRING1="Today Is" TLEN=LEN(TSTRING1) IF ADDS=1 THEN TCOL=COL+60-(INT(TLEN/2)); TPOS=POS END ELSE TCOL=COL+30-(INT(TLEN/2)); TPOS=POS END GOSUB 150 TSTRING1=OCONV(TODAY,'DWA'):" " TLEN=LEN(TSTRING1) IF ADDS=1 THEN TCOL=COL+60-(INT(TLEN/2)); TPOS=POS+2 IF REM(TCOL,2) THEN TCOL=TCOL+1 END ELSE TCOL=COL+30-(INT(TLEN/2)); TPOS=POS+2 END GOSUB 150 END ELSE TSTRING1="Today Is" TLEN=LEN(TSTRING1) TCOL=COL+50-(INT(TLEN/2)); TPOS=POS+1 GOSUB 175 TSTRING1=OCONV(TODAY,'DWA'):" ":OCONV(TODAY,'D2/') TLEN=LEN(TSTRING1) TCOL=COL+50-(INT(TLEN/2)); TPOS=POS+2 GOSUB 175 END IF ADDS THEN CRT CHAR(24) END CRT @(COL+10,POS+6):"WELCOME TO TIMECLOCK" * *CRT @(0,22):RV:"Enter Your 4 digit Employee Identification Number":ERV:CL TSTRING="EMPLOYEE ID #:":USER TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+10):TSTRING *CRT @(COL+20-(INT(TLEN/2))+14,POS+10): *INPUT USER *IF USER='OFF' THEN STOP *IF USER='' OR USER='/' THEN * CRT @(0,22):RV:"Thank You - Goodbye!":ERV:CL: * RQM * GO 1999 *END READ UREC FROM USER.FILE,USER THEN TSTRING=UREC<1>:" ":UREC<2> TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+8):RV:TSTRING:ERV END ELSE CRT @(0,22):RV:BEEP:"INVALID USER CODE - See Supervisor!":ERV:CL RQM GO 1000 END * GO 1599 TRY=0 1500 * PASSWORD INPUT POS=0; COL=0 CRT @(0,22):RV:"Please enter your Password Now - It'll be our secret!":ERV:CL TSTRING="PASSWORD :" TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+11):TSTRING CRT @(COL+20-(INT(TLEN/2))+10,POS+11): ECHO OFF INPUT PSWD ECHO ON IF PSWD='' OR PSWD='/' THEN CRT @(0,22):RV:"Thank You - Goodbye!":ERV:CL: RQM GO 1999 END IF UREC<4> = PSWD ELSE IF TRY THEN CRT @(0,22):RV:BEEP:"You have TWICE entered an incorrect password - Goodbye":ERV:CL RQM GO 1999 END ELSE TRY=1 CRT @(0,22):RV:BEEP:"INVALID PASSWORD - Try Again!":ERV:CL RQM GO 1500 END END 1599 * PRJCT='' CLKKEY=USER:"|":TODAY READ CLKREC FROM CLOCKFILE,CLKKEY THEN GOSUB 2500 END ELSE CLKREC='' END GOSUB 6000 * 1750 * PROJECT CODES POS=0; COL=0 CRT @(0,22):RV:"Enter Project # to CLOCK IN, 'OFF' to CLOCK OUT, '?'(help), 'T'(timecard)":ERV:CL: TSTRING="PROJECT :___" TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+12):TSTRING CRT @(COL+20-(INT(TLEN/2))+TLEN-3,POS+12): INPUT PRJCT PRJCT=OCONV(PRJCT,"MCU") IF PRJCT='T' THEN GOSUB 2000; GOSUB 2500; GO 1750 IF PRJCT='?' THEN PRJCT=''; GOSUB 3000; GOSUB 2500 IF PRJCT='OUT' THEN PRJCT='OFF' IF PRJCT='OFF' THEN GOSUB 5000 IF CLKREC # '' THEN * GOSUB 2500 END ELSE GO 1750 END CRT @(0,22):RV:"Hit Return to Continue":ERV:CL: INPUT ANY GO 1999 END IF PRJCT='/' THEN CRT @(0,22):"Thank You - Goodbye!":CL: RQM GO 1999 END IF PRJCT='' THEN GO 1750 LOCATE(PRJCT,HELP.TBL,1;INDX) THEN TSTRING=HELP.TBL<2,INDX> TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+14):TSTRING GOSUB 5000 ;* UPDATE RECORD GOSUB 2500 ;* DISPLAY TODAYS CARD END ELSE CRT @(0,22):RV:BEEP:"INVALID PROJECT CODE - Try Again!":ERV:CL RQM GO 1750 END 1999 * PSW=0;CSW=0 RETURN * 2000 * TIMECARD HEADER POS=0; COL=0 TIME=TIME() GOSUB 200 POS=6; COL=0 CRT @(COL,POS):CR GOSUB 2225 TSTRING=" DATE"'L#9':"TIME IN"'L#9':"TIME OUT"'L#9':"PROJECT"'L#9' CRT @(COL+2,POS):TSTRING CRT @(COL+42,POS):TSTRING * EDATE=0; SDATE=0 PRDAYS=14; PRDATE=ICONV('12/23/90','D') SDATE=TODAY-PRDATE IF SDATE <= PRDAYS THEN EDATE=PRDATE END ELSE EDATE=PRDATE+(INT(SDATE/PRDAYS)*PRDAYS) END * Z=0; ZCT=0; ZPOS=0; MAX=14; SW=0; POS=6; COL=2 D=TODAY+1 TOTAL.HRS = 0 LOOP D=D-1 UNTIL D < EDATE DO DKEY=USER:"|":D READ DREC FROM CLOCKFILE,DKEY THEN ZCT=DCOUNT(DREC<1>,VM) DAILY.HRS = 0 FOR Z=1 TO ZCT STEP 2 DATE=D INTIME = DREC<1,Z> OUTTIME = DREC<1,Z + 1> IF OUTTIME = '' THEN INTIME = 0 DAILY.HRS = DAILY.HRS + (OUTTIME - INTIME) ZPOS=ZPOS+1 IF INT(ZPOS/MAX) THEN SW=SW+1 IF REM(SW,2) THEN COL=42 END ELSE COL=2 GOSUB 2100 IF ANS='B' THEN GO 2000 END ZPOS=1 END ZTIME=OCONV(DREC<1,Z>,"MTH") ZTIME=OCONV(ZTIME,"MCL") TSTRING=OCONV(DATE,"D2/")'L#9':ZTIME'L#9':SPACE(10):DREC<2,Z>'L#7' CRT @(COL,POS+ZPOS):TSTRING IF DREC<2,Z+1>='OFF' THEN TSTRING=OCONV(DREC<1,Z+1>,"MTH") TSTRING=OCONV(TSTRING,'MCL') CRT @(COL+18,POS+ZPOS):TSTRING END ELSE Z=Z-1 END NEXT Z TOTAL.HRS = TOTAL.HRS + DAILY.HRS ;*CALCS TOTAL HRS FOR DISPLAY ZPOS=ZPOS+1 ;* THIS WILL CAUSE THE BLANK LINE BETWEEN DAYS END REPEAT * GOSUB 2100 IF ANS='B' THEN GO 2000 COL=0; POS=6 CRT @(COL,POS):CR PRJCT=''; INDX=''; GOSUB 2550 RETURN * 2100 * CRT @(54,22):"TOTAL HOURS: ":RV:OCONV(TOTAL.HRS,"MT"):ERV: CRT @(0,22):RV:"Enter N(next page), B(back page), else RETURN ":ERV: INPUT ANS IF ANS='' OR ANS='/' THEN GO 2199 END IF ANS='B' THEN Z=Z-(ZPOS+(MAX*6)) IF Z < 0 THEN Z=0 SW=0 END ELSE IF ANS='N' THEN IF Z > ZCT THEN CRT @(0,22):"End of list!":CL RQM GO 2100 END END ELSE CRT @(0,22):BEEP:"INVALID ENTRY - Try Again!":CL: END END 2199 * COL=2; POS=6 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 * 2500 * TIMECARD HEADER POS=0; COL=0 GOSUB 200 ;* UPDATE TIME IN BOX POS=6 GOSUB 2550 GOSUB 2525 POS=6; COL=0 TSTRING="TIME IN"'L#9':"TIME OUT"'L#9':"PROJECT DESCRIPTION" CRT @(COL+41,POS):TSTRING * ZPOS=0 ZCT=DCOUNT(CLKREC<1>,VM) FOR Z=1 TO ZCT DATE=FIELD(CLKKEY,"|",2) IF CLKREC<2,Z>='OFF' THEN TSTRING=OCONV(CLKREC<1,Z>,"MTH") TSTRING=OCONV(TSTRING,'MCL') CRT @(COL+50,POS+ZPOS):TSTRING END ELSE ZPOS=ZPOS+1 ZTIME=OCONV(CLKREC<1,Z>,"MTH") ZTIME=OCONV(ZTIME,"MCL") LOCATE(OCONV(CLKREC<2,Z>,'G0-1'),HELP.TBL,1;ZINDX) THEN ZDESC=HELP.TBL<2,ZINDX> END ELSE ZDESC='UNKNOWN' END TSTRING=ZTIME'L#9':SPACE(9):CLKREC<2,Z>'L#7':ZDESC'L#12' CRT @(COL+41,POS+ZPOS):TSTRING END NEXT Z * IF PRJCT='' ELSE CRT @(0,22):RV:"Press RETURN to continue":ERV:CL: INPUT ANY END RETURN * 2525 * 1/2 DRAW BOX COL=0; POS=6 CRT @(COL,POS):CR GOSUB 2550 IF ADDS THEN FOR X=POS TO 21 IF X=POS THEN TSTRING1="#" TCOL=COL+39; TPOS=X; GOSUB 2275 TSTRING1="D" TCOL=COL+79; GOSUB 2275 END ELSE IF X=21 THEN TSTRING1="B":STR("<",39):"F" TCOL=COL+39; TPOS=X; GOSUB 2275 END ELSE TSTRING1=">" TCOL=COL+39; TPOS=X; 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+39; TPOS=X; GOSUB 2285 TCOL=COL+79; GOSUB 2285 END ELSE IF X=21 THEN TSTRING1=STR("~",41) TCOL=COL+39; TPOS=X; GOSUB 2285 END ELSE TSTRING1="|" TCOL=COL+39; TPOS=X; GOSUB 2285 TCOL=COL+79; GOSUB 2285 END END NEXT X END RETURN 2550 * REDISPLAY USER INFORMATION POS=6; COL=0 CRT @(COL+10,POS):"WELCOME TO TIMECLOCK" TSTRING="EMPLOYEE ID #:":USER TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+4):TSTRING TSTRING=UREC<1>:" ":UREC<2> TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+2):RV:TSTRING:ERV TSTRING="PROJECT :":PRJCT TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+6):TSTRING IF INDX = '' OR PRJCT='OFF' OR PRJCT='' ELSE TSTRING=HELP.TBL<2,INDX> TLEN=LEN(TSTRING) CRT @(COL+20-(INT(TLEN/2)),POS+8):TSTRING END GOSUB 6000 RETURN * 3000 * HELP HEADER POS=0; COL=0 TIME=TIME() GOSUB 200 POS=6; COL=0 CRT @(COL,POS):CR GOSUB 2225 TSTRING="PROJECT"'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 3100 END XX=0 END UNTIL PRJCT # '' DO REPEAT IF PRJCT='/' THEN PRJCT='' RETURN * 3100 * CRT @(0,22):RV:"Enter Project #, N(next page), B(back page)":ERV:CL: INPUT ANS IF ANS='' OR ANS='/' THEN PRJCT='/' GO 3199 END IF ANS='B' THEN X=X-(XX+(MAX*3)) IF X < 0 THEN X=0 SW=0 END ELSE IF ANS='N' THEN IF X > XCT THEN CRT @(0,22):"End of list!":CL RQM *X=X-(MAX*2) GO 3100 END END ELSE LOCATE(ANS,HELP.TBL,1;INDX) THEN PRJCT=ANS END ELSE CRT @(0,22):RV:BEEP:"INVALID PROJECT CODE - Try Again!":ERV:CL: END END END 3199 * RETURN * 4000 * LOAD PROJECT TABLE IF HELP.TBL # '' ELSE SELECT PROJECT LOOP READNEXT ID ELSE ID='EOF' UNTIL ID='EOF' DO READ PREC FROM PROJECT,ID THEN LOCATE(PREC<1>,HELP.TBL,2;INDX;'AL') ELSE HELP.TBL=INSERT(HELP.TBL,1,INDX;ID) HELP.TBL=INSERT(HELP.TBL,2,INDX;OCONV(PREC<1>,'MCU')) END END REPEAT END RETURN * 5000 * HANDLE TIME DATA *---------------------------------------* * THIS PORTION OF LOGIC BUILDS THE TIMECLOCK ENTRIES * * CLOCKFILE RECORD LAYOUT AS FOLLOWS: * <0> USER|DATE * <1> TIME MV * <2> PROJECT MV * *---------------------------------------* CLKKEY=USER:"|":TODAY TIME=TIME() IF TODAY # DATE() THEN TODAY=DATE() CLKKEY=USER:"|":TODAY READ CLKREC FROM CLOCKFILE,CLKKEY ELSE CLKREC='' END END IF CLKREC # '' THEN LAST=DCOUNT(CLKREC<1>,VM) IF PRJCT='OFF' THEN IF CLKREC<2,LAST> = 'OFF' THEN CRT @(0,22):BEEP:"HEY! YOU ARE ALREADY CLOCKED OUT!":CL: RQM END ELSE CLKREC=INSERT(CLKREC,1,-1;TIME) CLKREC=INSERT(CLKREC,2,-1;PRJCT) CRT @(0,22):"You are now OFF THE CLOCK!":CL: RQM END END ELSE IF CLKREC<2,LAST> # 'OFF' THEN CLKREC=INSERT(CLKREC,1,-1;TIME) CLKREC=INSERT(CLKREC,2,-1;"OFF") CLKREC=INSERT(CLKREC,1,-1;TIME) CLKREC=INSERT(CLKREC,2,-1;PRJCT:"-00") CRT @(0,22):"Your work Project has been Logged - Thanks!":CL: RQM END ELSE CLKREC=INSERT(CLKREC,1,-1;TIME) CLKREC=INSERT(CLKREC,2,-1;PRJCT:"-00") CRT @(0,22):"Welcome Back! You are now ON THE CLOCK!":CL: RQM END END END ELSE CLKREC='' IF PRJCT='OFF' THEN YKEY=OCONV(CLKKEY,"G0|1"):"|":OCONV(CLKKEY,"G1|1")-1 READ YREC FROM CLOCKFILE,YKEY THEN YCT=DCOUNT(YREC<1>,VM) IF YREC<2,YCT>#'OFF' THEN CLKREC<1>=0 CLKREC<2>=YREC<2,YCT> WRITE CLKREC ON CLOCKFILE,CLKKEY YREC=INSERT(YREC,1,-1;'86400');* 11:59 PM YREC=INSERT(YREC,2,-1;'OFF') ;* CLOCK OUT WRITE YREC ON CLOCKFILE,YKEY GO 5000 END END CRT @(0,22):BEEP:"HEY! YOU ARE ALREADY CLOCKED OUT!":CL: RQM GO 5999 END ELSE CLKREC=TIME CLKREC<2>=PRJCT:'-00' CRT @(0,22):"You are now ON THE CLOCK! - Have a great day":CL: RQM END END WRITE CLKREC ON CLOCKFILE,CLKKEY GOSUB 6000 ;*CALCULATES TOTAL HOURS FOR DISPLAY 5999 * RETURN ********************************************* 6000 ;*CALCULATES TOTAL HOURS FOR DISPLAY * EDATE=0; SDATE=0 ; WEEK.ONE=0 ; WEEK.TWO=0 PRDAYS=14; PRDATE=ICONV('12/23/90','D') SDATE=TODAY-PRDATE IF SDATE <= PRDAYS THEN EDATE=PRDATE END ELSE EDATE=PRDATE+(INT(SDATE/PRDAYS)*PRDAYS) END * Z=0; ZCT=0 D=TODAY+1 TOTAL.HRS = 0 LOOP D=D-1 UNTIL D < EDATE DO DKEY=USER:"|":D READ DREC FROM CLOCKFILE,DKEY THEN DAILY.HRS=0 ZCT=DCOUNT(DREC<1>,VM) FOR Z=1 TO ZCT STEP 2 DATE=D INTIME = DREC<1,Z> OUTTIME = DREC<1,Z + 1> IF OUTTIME = '' THEN INTIME = 0 DAILY.HRS = DAILY.HRS + (OUTTIME - INTIME) *CRT "HERE ":DAILY.HRS:" ":OUTTIME:" ":INTIME:;INPUT DUMMY NEXT Z IF D >= EDATE+7 THEN WEEK.TWO=WEEK.TWO+DAILY.HRS END ELSE WEEK.ONE=WEEK.ONE+DAILY.HRS END TOTAL.HRS = TOTAL.HRS + DAILY.HRS END REPEAT IF TOTAL.HRS > 0 THEN CRT @(12,17):" WEEK ONE HOURS: ":OCONV(WEEK.ONE,"MT") CRT @(12,18):" WEEK TWO HOURS: ":OCONV(WEEK.TWO,"MT") END CRT @(0,19):SPACE(3):" TOTAL PAY PERIOD HOURS: ":RV:OCONV(TOTAL.HRS,"MT"):ERV: RETURN *********************************************************** 9999 * END OF PROCESS STOP