100 DATA 0,31,28,31,30,31,30,31,31,30,31,30,31: FOR I = 0 TO 12: READ DE%(I): NEXT : RESTORE : GOTO 460
110 Y = 0:YR = VAL(Y$): IF YR/4 = INT(YR/4) THEN Y = 1: IF RIGHT$(Y$,2) = "00" AND LEN(Y$) >2 AND INT(YR/400) < >YR/400 THEN Y = 0: REM ** '00' IS 'ZERO ZERO'
120 RETURN : REM ** LEAP YEAR DETERMINANT - IF YES Y=1; IF NO Y=0
130 A = 0
140 FOR I = 1 TO VAL( LEFT$(A$,2))
150 A = A +DE%(I -1): REM ** ASSIGN VALUE FOR NO. OF DAYS EARLIER MONTHS THAT YEAR
160 NEXT
170 A = A + VAL( MID$ (A$,4,2)): REM ** ADD DAYS THIS MONTH; A = DAYS FROM BEGINNING OF YEAR
180 Y$ = RIGHT$(A$,2): IF LEN(A$) = 10 THEN Y$ = RIGHT$(A$,4): REM ** PREPARE FOR SUBROUTINE 110
190 GOSUB 110: REM ** DETERMINE IF LEAP YEAR
200 IF VAL( LEFT$(A$,2)) >2 THEN A = A +Y: REM ** IF MONTH > FEB ADD LEAP YEAR DETERMINANT
210 RETURN
220 REM *** SUBTRACTION SUBROUTINE
230 A$ = A1$: GOSUB 130:A1 = A: REM **A1 = DAYS FROM BEGINNING OF YEAR EARLIER DATE
240 A$ = A2$: GOSUB 130:A2 = A: REM ** A2 = DAYS FROM BEGINNING OF YEAR LATER DATE
250 IF LEN(A1$) = 10 AND VAL( RIGHT$(A2$,4)) > VAL( RIGHT$(A1$,4)) THEN A2 = A2 +365: GOTO 280: REM ** IF DIFFERENT YEARS ADD 365 TO A2 (LATER DAYS) AND GOTO 280
260 IF VAL( RIGHT$(A2$,2)) > VAL( RIGHT$(A1$,2)) THEN A2 = A2 +365: GOTO 280: REM ** AS FOR 250
270 GOTO 350: REM ** SAME YEAR
280 Y$ = RIGHT$(A1$,2): IF LEN(A1$) = 10 THEN Y$ = RIGHT$(A1$,4): REM ** AS FOR 180
290 GOSUB 110:A2 = A2 +Y: REM ** LEAP YEAR DETERMINANT ADDED TO LATER DAYS
300 IF LEN(A2$) = 10 THEN 420: REM ** IF YEAR AS '1985' INSTEAD OF '85'
310 IF VAL( RIGHT$(A2$,2)) - VAL( RIGHT$(A1$,2)) < = 1 THEN 350: REM ** IF < 1 YEAR DIFFERENCE GOTO 350
320 FOR I = VAL( RIGHT$(A1$,2)) +1 TO VAL( RIGHT$(A2$,2)) -1
330 Y$ = STR$(I): GOSUB 110:A2 = A2 +365 +Y: REM ** ADD A YEAR + LEAP YEAR DETERMINANT (Y)
340 NEXT
350 D = A2 -A1: IF B1$ = "" THEN 400: REM **** D = TIME DIFFERENCE IN DAYS
360 H = VAL( LEFT$(B2$,2)) - VAL( LEFT$(B1$,2)): REM ** SUBTRACT HOURS ; H = DIFFERENCE
370 IF H <0 THEN H = 24 +H:D = D -1: REM ** IF NEG DECREMENT DAYS BY 1 & ADD 24 TO HOURS
380 M = VAL( RIGHT$(B2$,2)) - VAL( RIGHT$(B1$,2)): REM ** SUBTRACT MINUTES ; M = DIFFERENCE
390 IF M <0 THEN M = 60 +M:H = H -1: REM ** IF NEG DECREMENT HOURS BY 1 & ADD 60 TO MINUTES
400 RETURN
410 REM ***
420 IF VAL( RIGHT$(A2$,4)) - VAL( RIGHT$(A1$,4)) < = 1 THEN 350
430 FOR I = VAL( RIGHT$(A1$,4)) +1 TO VAL( RIGHT$(A2$,4)) -1: GOTO 330
440 REM ***
450 REM *** DATA ENTRY
460 HOME : PRINT "DATESUBTRACT BY DAVID CARTWRIGHT": PRINT "COPYRIGHT 1987": PRINT "MICROSPARC,INC.": VTAB 5: CALL -958: PRINT "ENTER DATES AS MM-DD-YY OR MM-DD-YYYY"
470 VTAB 7: INPUT "ENTER DATE 1 (EARLIER) ";A1$: IF LEN(A1$) < >8 AND LEN(A1$) < >10 THEN PRINT G$: GOTO 470
480 VTAB 9: CALL -958: INPUT "ENTER TIME ON DATE 1 (E.G. 0030) ";B1$: IF B1$ < >"" AND LEN(B1$) < >4 THEN PRINT G$: GOTO 480
490 VTAB 11: CALL -958: INPUT "ENTER DATE 2 ( LATER ) ";A2$: IF LEN(A1$) < > LEN(A2$) THEN PRINT G$: PRINT "MUST BE SAME FORMAT AS EARLIER DATE, ": PRINT "(";A1$;")": PRINT : PRINT "RETURN TO CONTINUE";: GET A$: PRINT : GOTO 490
500 VTAB 13: CALL -958: INPUT "ENTER TIME ON DATE 2 (E.G. 1345) ";B2$: IF B2$ < >"" AND LEN(B2$) < >4 THEN PRINT G$: GOTO 500
510 GOSUB 230
520 REM ***
530 PRINT : PRINT "TIME DIFFERENCE IS :-": PRINT : IF D = 0 THEN HTAB 8: GOTO 560
540 PRINT TAB( 8)D;: IF D < >1 THEN PRINT " DAYS";: GOTO 560
550 PRINT " DAY";
560 IF B1$ = "" THEN 610
570 PRINT ", ";H;: IF H < >1 THEN PRINT " HOURS & ";: GOTO 590
580 PRINT " HOUR & ";
590 PRINT M;: IF M < >1 THEN PRINT " MINS": GOTO 610
600 PRINT " MIN"
610 PRINT : PRINT "RETURN TO CONTINUE";: GET A$: PRINT : GOTO 460
620 REM *** FOR DD-MM-YY OR DD-MM-YYYY; CHANGE MID$(A$,4,2) LINE 170 TO LEFT$(A$,2) & CHANGE LEFT$(A$,2) LINES 140 AND 200 TO MID$(A$,4,2)