home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib32a.dsk / OCTOBER.1987 / DATESUBTRACT.bas next >
BASIC Source File  |  2023-02-26  |  4KB  |  62 lines

  1. 10  REM  ************************
  2. 20  REM  *     DATESUBTRACT     *
  3. 30  REM  * BY  DAVID CARTWRIGHT *
  4. 40  REM  *  COPYRIGHT (C) 1987  *
  5. 50  REM  *  BY MICROSPARC, INC  *
  6. 60  REM  *  CONCORD,  MA 01742  *
  7. 70  REM  ************************
  8. 80  REM 
  9. 90  DIM DE%(12):G$ =  CHR$(7): POKE 33,40
  10. 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
  11. 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'
  12. 120  RETURN : REM  ** LEAP YEAR DETERMINANT - IF YES Y=1; IF NO Y=0
  13. 130 A = 0
  14. 140  FOR I = 1 TO  VAL( LEFT$(A$,2))
  15. 150 A = A +DE%(I -1): REM  ** ASSIGN VALUE FOR NO. OF DAYS EARLIER MONTHS THAT YEAR
  16. 160  NEXT 
  17. 170 A = A + VAL( MID$ (A$,4,2)): REM  ** ADD DAYS THIS MONTH; A = DAYS FROM BEGINNING OF YEAR
  18. 180 Y$ =  RIGHT$(A$,2): IF  LEN(A$) = 10  THEN Y$ =  RIGHT$(A$,4): REM  ** PREPARE FOR SUBROUTINE 110
  19. 190  GOSUB 110: REM  ** DETERMINE IF LEAP YEAR
  20. 200  IF  VAL( LEFT$(A$,2)) >2  THEN A = A +Y: REM  ** IF MONTH > FEB ADD LEAP YEAR DETERMINANT
  21. 210  RETURN 
  22. 220  REM  *** SUBTRACTION SUBROUTINE
  23. 230 A$ = A1$: GOSUB 130:A1 = A: REM  **A1 = DAYS FROM BEGINNING OF YEAR EARLIER DATE
  24. 240 A$ = A2$: GOSUB 130:A2 = A: REM  ** A2 = DAYS FROM BEGINNING OF YEAR LATER DATE
  25. 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
  26. 260  IF  VAL( RIGHT$(A2$,2)) > VAL( RIGHT$(A1$,2))  THEN A2 = A2 +365: GOTO 280: REM  ** AS FOR 250
  27. 270  GOTO 350: REM  ** SAME YEAR
  28. 280 Y$ =  RIGHT$(A1$,2): IF  LEN(A1$) = 10  THEN Y$ =  RIGHT$(A1$,4): REM  ** AS FOR 180
  29. 290  GOSUB 110:A2 = A2 +Y: REM  ** LEAP YEAR DETERMINANT ADDED TO LATER DAYS
  30. 300  IF  LEN(A2$) = 10  THEN 420: REM  ** IF YEAR AS '1985' INSTEAD OF '85'
  31. 310  IF  VAL( RIGHT$(A2$,2)) - VAL( RIGHT$(A1$,2)) < = 1  THEN 350: REM  ** IF < 1 YEAR DIFFERENCE GOTO 350
  32. 320  FOR I =  VAL( RIGHT$(A1$,2)) +1 TO  VAL( RIGHT$(A2$,2)) -1
  33. 330 Y$ =  STR$(I): GOSUB 110:A2 = A2 +365 +Y: REM  ** ADD A YEAR + LEAP YEAR DETERMINANT (Y)
  34. 340  NEXT 
  35. 350 D = A2 -A1: IF B1$ = ""  THEN 400: REM  **** D = TIME DIFFERENCE IN DAYS
  36. 360 H =  VAL( LEFT$(B2$,2)) - VAL( LEFT$(B1$,2)): REM  ** SUBTRACT HOURS ; H = DIFFERENCE
  37. 370  IF H <0  THEN H = 24 +H:D = D -1: REM  ** IF NEG DECREMENT DAYS BY 1 & ADD 24 TO HOURS
  38. 380 M =  VAL( RIGHT$(B2$,2)) - VAL( RIGHT$(B1$,2)): REM  ** SUBTRACT MINUTES ; M = DIFFERENCE
  39. 390  IF M <0  THEN M = 60 +M:H = H -1: REM  ** IF NEG DECREMENT HOURS BY 1 & ADD 60 TO MINUTES
  40. 400  RETURN 
  41. 410  REM  ***
  42. 420  IF  VAL( RIGHT$(A2$,4)) - VAL( RIGHT$(A1$,4)) < = 1  THEN 350
  43. 430  FOR I =  VAL( RIGHT$(A1$,4)) +1 TO  VAL( RIGHT$(A2$,4)) -1: GOTO 330
  44. 440  REM  ***
  45. 450  REM  *** DATA ENTRY
  46. 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"
  47. 470  VTAB 7: INPUT "ENTER DATE 1 (EARLIER) ";A1$: IF  LEN(A1$) < >8  AND  LEN(A1$) < >10  THEN  PRINT G$: GOTO 470
  48. 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
  49. 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
  50. 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
  51. 510  GOSUB 230
  52. 520  REM  ***
  53. 530  PRINT : PRINT "TIME DIFFERENCE IS :-": PRINT : IF D = 0  THEN  HTAB 8: GOTO 560
  54. 540  PRINT  TAB( 8)D;: IF D < >1  THEN  PRINT " DAYS";: GOTO 560
  55. 550  PRINT " DAY";
  56. 560  IF B1$ = ""  THEN 610
  57. 570  PRINT ", ";H;: IF H < >1  THEN  PRINT " HOURS & ";: GOTO 590
  58. 580  PRINT " HOUR & ";
  59. 590  PRINT M;: IF M < >1  THEN  PRINT " MINS": GOTO 610
  60. 600  PRINT " MIN"
  61. 610  PRINT : PRINT "RETURN TO CONTINUE";: GET A$: PRINT : GOTO 460
  62. 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)