home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug056.arc / CHECKS.Z80 < prev    next >
Text File  |  1979-12-31  |  54KB  |  3,253 lines

  1.     .Z80
  2.     PAGE 60
  3. ;
  4. ; Checking program for the Big Board
  5. ; Written by Ralph Sherman , 15 Hydaway Drive , Forest , Va. 24551
  6. ; Rev 1.0   --  3/27/1982       ;FIRST REVISION RELEASED
  7. ; REV 1.1   --  3/28/1982       ;ADDED SPACE BETWEEN DAY AND CHECKS
  8. ;                ; DURING UNPACK...CMAX NOW $83000
  9. ; REV 1.2   --  3/29/1982    COMPUTED CONSOLE INPUT FOR CPM 1.4 
  10. ;                NOP'S ADDED FOR WARM START AT 100H
  11. ;                CTRL-X RESETS CURSOR TO BEGINNING
  12. ;                FIXED BUG IN FWD SPACE CURSOR
  13. ;                SEND FORM FEEDS WHEN PRINTING TALLY
  14. ; REV 1.3   --  4/1/82        ADDED AUTO NUMBER COMMAND
  15. ;                RING BELL WHEN INPUTLINE OVERFLOW
  16. ;                CTRL X CANCELS COMMAND
  17. ;                CTRL B PUTS CURSOR AT BEGINNING
  18. ;                ADDED C,D,W INDICATION ON LIST
  19. ;                ADDED OUTSTANDING INDICATION
  20. ; REV 1.4   --  4/3/82        ADDED W TO HELP COMMAND
  21. ;                FIXED BUG IN NAME ENTRY
  22. ; REV 1.5   --  1/2/83        BUG1-FIXES ERROR DURING TALLEY WHICH
  23. ;                CAUSED OVERWRITING PROGRAM
  24. ;                BUG2-FIXED BUG DURING TALLY WHEN STARTING
  25. ;                WITH A NEGATIVE STARTING BALANCE
  26. ;                BUG3-FIXED BUG DURING SAVE WITH 32 CHECKS
  27. ;
  28. ;
  29. ;
  30. ;
  31. ;
  32. ;
  33. ;
  34.     ASEG
  35. ;
  36. ;
  37. ; SYSTEM DEFINITIONS
  38. ;
  39. BELL    EQU    7        ;BELL CONTROL CODE
  40. CANCEL    EQU    18H        ;CONTROL CODE TO CANCEL COMMAND
  41. MOVE    EQU    2        ;CTRL CODE TO PUT CURSOR AT BEGINNING
  42. CLRSCR    EQU    1AH        ;CONSOLE CLEAR SCREEN
  43. BS    EQU    8        ;CONSOLE BACKSPACE
  44. FWDSP    EQU    0CH        ;FORWARD SPACE CONSOLE CURSOR
  45. DELCHAR    EQU    4        ;CONSOLE DELETE CHAR AT CURSOR
  46. ADDCHAR    EQU    1        ;CONSOLE ADD CHAR AT CURSOR
  47. FORMFD    EQU    0CH        ;PRINTER FORM FEED CONTROL CHAR
  48. ;
  49. DFTUNT    EQU    4        ;DEFAULT DRIVE NUMBER
  50. BDOS    EQU    5
  51. COLD    EQU    0
  52. DMA    EQU    80H
  53. FCB    EQU    5CH
  54. FCB2    EQU    6CH
  55. OPENFC    EQU    15        ;BDOS FUNCTION #
  56. CLSFC    EQU    16        ;BDOS FUNCTION #
  57. DELFC    EQU    19        ;BDOS FUNCTION #
  58. READFC    EQU    20        ;BDOS READ SEQUENTIAL
  59. WRTFC    EQU    21        ;BDOS WRITE SEQUENTIAL
  60. MAKEFC    EQU    22        ;BDOS CREATE FUNCTION #
  61. RENAFC    EQU    23        ;BDOS RENAME FILE FUNCTION #
  62. ;
  63. CFILE    EQU    3000H        ;START OF CHECK FILE
  64. NFILE    EQU    5000H        ;START OF THE NAME FILE
  65. CKLOC    EQU    CFILE
  66. NAMLOC    EQU    NFILE
  67. CCPBAS    EQU    8000H        ;CAN BE UP TO CCP BASE
  68. ;
  69.     ORG 0100H
  70. ;
  71. START:    JP    START1
  72. ;
  73. GETCMD:    LD    SP,STACK+128    ;RESET STACK JUST IN CASE
  74.     CALL    CRLF
  75.     XOR    A        ;ACC. = 0
  76.     LD    (PTRFLG),A    ;TURN PRINTER OFF
  77. CMD2:    CALL    PRINT
  78.     DEFB    'COMMAND',0H
  79.     CALL    INPUT        ;GET CHARACTER FROM CONSOLE
  80.     LD    (CMD),A        ;SAVE THE COMMAND AWAY
  81.     PUSH    AF
  82.     CALL    CCRLF
  83.     POP    AF
  84.     LD    B,0
  85.     LD    C,NCMDS
  86.     LD    HL,CMDS+NCMDS-1
  87.     CPDR            ;HUNT FOR A MATCH IN CMDS
  88.     JR    Z,CMD1        ;IF MATCH FOUND, INDEX IN TABLE IS C
  89.     CALL    PRINT
  90.     DEFB    '   NO SUCH COMMAND',0H
  91.     JP    GETCMD
  92. CMD1:    LD    IX,CMDADR
  93.     SLA    C        ;DOUBLE THE INDEX
  94.     ADD    IX,BC        ;ADD INDEX TO POINTER TO CMD ADDR'S.
  95.     LD    L,(IX+0)    ;LSB FIRST
  96.     LD    H,(IX+1)
  97.     JP    (HL)        ;JUMP TO THE COMMAND
  98. ;
  99. ;
  100. ; COMMANDS
  101. ;
  102. CMDS:    DEFB     'BCDFILMNOPQRSTWVG?A'
  103. CMDEND    EQU    $
  104. NCMDS     EQU    CMDEND-CMDS    ;NUMBER OF COMMANDS
  105. ;
  106. CMDADR:    DEFW BALANC,CHECK,DEPOS,FIX,CATSRC,PRNT
  107.     DEFW MATCH,LIST,OUTSTD,TOGGLE,QUIT,RETURN,SAVE
  108.     DEFW TALLY,WITHDR,VALUE,GET,HELP,AUTO
  109. ;
  110. ; INSERT AUTO NUMBER ON CHECKS
  111. ;
  112. AUTO:    LD    A,'C'        ;FAKE CHECK LOOKUP
  113.     LD    (CMD),A
  114.     CALL    PROMPT
  115.     CALL    GETINP
  116.     CALL    PACKNO
  117.     CALL    FIXFLG        ;SET W FLAG IF SPECIFIED
  118.     LD    A,(CNUM)
  119.     LD    (AUTOCN),A
  120.     LD    A,(CNUM+1)
  121.     LD    (AUTOCN+1),A
  122.     LD    A,1
  123.     LD    (AUTFLG),A    ;SET THE AUTO LINENUMBER FLAG
  124.     JP    GETCMD
  125. ;
  126. ; HELP- LIST COMMAND SUMMARY
  127. ;
  128. HELP:    CALL    TPRINT
  129.     DEFB 13,10,'A-AUTONUMBER CHECK ENTRIES'
  130.     DEFB 13,10,'B-LIST CHECK BOOK BALANCE'
  131.     DEFB 13,10,'C-ENTER A NEW CHECK'
  132.     DEFB 13,10,'D-ENTER A DEPOSIT'
  133.     DEFB 13,10,'F-FIX CHECK,WITHDRAWAL,DEPOSIT,OR NAME ENTRY'
  134.     DEFB 13,10,'G-GET A NEW CHECK FILE FROM DISK'
  135.     DEFB 13,10,'I-INTERROGATE BY FLAG'
  136.     DEFB 13,10,'L-LIST CHECKS,DEPOSITS,WITHDRAWALS, OR NAMES'
  137.     DEFB 13,10,'M-LIST MATCH BY NAME'
  138.     DEFB 13,10,'O-LIST OUTSTANDING CHECKS'
  139.     DEFB 13,10,'P-PRINT NEXT COMMAND ON PRINTER'
  140.     DEFB 13,10,'Q-QUIT TO CPM'
  141.     DEFB 13,10,'R-RETURN A CHECK'
  142.     DEFB 13,10,'S-SAVE CURRENT FILE'
  143.     DEFB 13,10,'T-LIST MONTHLY TALLY SHEET'
  144.     DEFB 13,10,'V-LIST BANK BALANCE'
  145.     DEFB 13,10,'W-ENTER A WITHDRAWAL',0DH,0AH,0H    ;REV 1.4
  146. ;
  147.     CALL    PRTNUM
  148.     JP    GETCMD
  149. ;
  150. BALANC:    CALL    YRSTRT
  151.     CALL    GOTOP
  152.     CALL    END
  153. BAL2:    CALL    GETNXT
  154.     JR    C,BALDON
  155.     LD    HL,DAY
  156.     BIT     7,(HL)        ;MINUS IF DEPOSIT
  157.     JP    NZ,BAL1        ;IF BIT 7=1 THEN NZ
  158.     CALL    SUBTR
  159.     JP    BAL2
  160. BAL1:    CALL    ADD
  161.     JP    BAL2
  162. BALDON:    LD    BC,02H
  163.     LD    HL,SUM            
  164.     LD    DE,BAL            
  165.     LDIR
  166.     CALL    PRBAL
  167.     JP    GETCMD
  168. ;
  169. CHECK:    LD    A,0
  170.     LD    (PTRFLG),A     ; PRINTER OFF
  171.     CALL    HEAD
  172.     CALL    TABON
  173.     LD    A,(AUTFLG)    ;CHECK IF AUTO NUMBER IS ON
  174.     OR    A
  175.     JR    Z,CHK1
  176. ;
  177. ; GET THE CHECK NUMBER AND UNPACK IT INTO BUFIN
  178. ;
  179.     LD    A,(AUTOCN)
  180.     LD    (BINARY),A
  181.     LD    DE,BUFIN    ;TELL PUTBIN WHERE TO PUT ANSWER
  182.     LD    A,(AUTOCN+1)
  183.     OR    A        ;BIT 8 SET IF WIFE'S CHECKS
  184.     JP    P,CHK11
  185.     LD    A,'W'        ;PUT W IF CHECK NUMBER
  186.     LD    (DE),A
  187.     CALL    OUTPUT        ;PUT IT ON SCREEN AND BUFIN
  188.     INC    DE
  189.     LD    A,(INPTR)
  190.     INC    A
  191.     LD    (INPTR),A
  192.     LD    (INNUM),A
  193.     LD    A,(AUTOCN+1)
  194. CHK11:    AND    3FH        ;STRIP WIFE FLAG IF THERE
  195.     LD    (BINARY+1),A    
  196.     LD    A,0
  197.     LD    (BINARY+2),A
  198.     CALL    BTOD
  199.     LD    B,4
  200.     CALL    PUTBIN
  201. ;
  202. ; NOW UPDATE INPTR AND INNUM
  203. ;
  204.     PUSH    DE
  205.     POP    HL        ; PUT DE INTO HL
  206.     LD    BC,BUFIN
  207.     OR    A
  208.     SBC    HL,BC
  209.     LD    A,L        ;L HAS VALUE FOR POINTER
  210.     LD    (INPTR),A
  211.     LD    (INNUM),A
  212.     JP    CHK2
  213. CHK1:    CALL    GETNUM
  214. CHK2:    CALL    GETIN
  215.     CALL    TABOFF
  216.     CALL    PACK
  217.     CALL    CRLF
  218.     CALL    SAVNXT
  219. ;
  220. ; NOW UPDATE AUTOCN JUST IN CASE IT IS AUTO NUMBERING
  221. ;
  222.     LD    A,(AUTOCN)
  223.     INC    A
  224.     LD    (AUTOCN),A
  225.     JP    NC,CHK3
  226.     LD    A,(AUTOCN+1)
  227.     INC    A
  228.     LD    (AUTOCN+1),A
  229. CHK3:    JP    GETCMD
  230. ;
  231. DEPOS:    LD    A,0
  232.     LD    (PTRFLG),A    ; PRINTER OFF
  233.     CALL    HEAD
  234.     CALL    TABON
  235.     CALL    GETNUM
  236.     CALL    GETIN
  237.     CALL    TABOFF
  238.     CALL    PACK
  239.     CALL    CRLF
  240.     CALL    SAVNXT
  241.     LD    HL,DEPNO
  242.     INC    (HL)
  243.     JP    GETCMD
  244. CATSRC:    CALL    PRINT
  245.     DEFB    CLRSCR,'WHAT CATEGORY FLAG',0
  246.     CALL    .SYINP
  247.     CALL    CONOUT
  248.     CALL    CCRLF
  249.     CP    'I'
  250.     JR    NZ,SRCH1
  251.     JP    ITAX
  252. SRCH1:    CP    'W'
  253.     JR    NZ,SRCH2
  254.     JP    WSRC
  255. SRCH2:    CP    'R'
  256.     JR    NZ,SRCH3
  257.     JP    RSRC
  258. SRCH3:    CALL    PAKCAT
  259.     LD    (MASK),A
  260.     CALL    CRLF
  261.     LD    A,'C'
  262.     LD    (CMD),A
  263.     CALL    HEAD
  264.     CALL    ZSUM
  265.     CALL    GOTOP
  266.     CALL    END
  267. SRC1:    CALL    GETNXT
  268.     JR    C,SRCDON
  269.     LD    A,(MONTH)
  270.     AND    0F0H 
  271.     LD    HL,MASK
  272.     CP    (HL)
  273.     JR    NZ,SRC1
  274.     CALL    UNPACK
  275.     CALL    CRLF
  276.     CALL    ADD
  277.     JP    SRC1
  278. SRCDON:    CALL    PRTOT
  279.     JP    GETCMD
  280. CDWARG:    CALL    PRINT
  281.     DEFB    0DH,0AH,' C,D,N OR W ?',0
  282.     CALL    INPUT 
  283. CCRLF:    PUSH    AF        ;SAVE THE COMMAND
  284.     LD    A,NEWLIN    ;AND SEND CRLF TO CONSOLE
  285.     CALL    CONOUT
  286.     LD    A,LINEFD
  287.     CALL    CONOUT
  288.     POP    AF
  289.     RET
  290. ;
  291. FIX:    LD    A,0
  292.     LD    (PTRFLG),A     ; INSURE PRINTER IS OFF
  293.     CALL    CDWARG
  294.     CP    'C'
  295.     JR    Z,FIX1
  296.     CP    'D'
  297.     JR    Z,FIX1
  298.     CP    'W'
  299.     JR    Z,FIX1
  300.     CP    'N'
  301.     JR    NZ,CMDERR
  302.     JP    NAMFIX
  303. CMDERR:    CALL    PRINT
  304.     DEFB    0DH,0AH,'ONLY C,D,N,OR W ALLOWED',0DH,0AH,0
  305.     JP    GETCMD
  306. FIX1:    LD    (CMD),A
  307.     CALL    PROMPT
  308.     CALL    GETINP
  309.     CALL    PACKNO
  310.     CALL    FIXFLG        ;SET W FLAG
  311.     CALL    FINDNO
  312.     CALL    HEAD
  313.     CALL    UNPACK
  314.     CALL    GETIN        ;EDIT BUFIN
  315.     CALL    PACK
  316.     CALL    REPLAC
  317.     JP    GETCMD
  318. LIST:    LD    A,CLRSCR
  319.     CALL    OUTPUT        ;CLR SCREEN
  320.     CALL    PRINT
  321.     DEFB    13,10,'TYPE MATCH CHAR. OR CR ',0
  322.     LD    A,'%'
  323.     LD    (CMNEM),A    
  324.     LD    (CMNEM+1),A
  325.     LD    (CMNEM+2),A
  326. ;
  327.     LD    HL,CMNEM
  328.     LD    B,3H
  329. ;
  330. LL3:    CALL    INPUT
  331.     CP    BLANK
  332.     JR    Z,LL10
  333.     CP    NEWLIN
  334.     JR    Z,LL10
  335.     LD    (HL),A        ;STA
  336.     INC    HL
  337.     DJNZ    LL3        ;B IS NOW 0
  338. LL10:    LD    BC,0000H
  339.     CALL    CCRLF
  340. LLOOP:    LD    A,(NIND)
  341.     CP    C
  342.     JR    NZ,LL11
  343.     JP    GETCMD
  344. LL11:    LD    A,0
  345.     LD    (INPTR),A
  346. LL5:    LD    A,(CMNEM)
  347.     CP    '%'
  348.     JR    Z,LL6
  349.     LD    HL,(NB1)
  350.     ADD    HL,BC        ;INDEX DOWN BC ENTRIES
  351.     CP    (HL)
  352.     JR    NZ,LL9
  353. LL6:    LD    A,(CMNEM+1)
  354.     CP    '%'
  355.     JR    Z,LL7
  356.     LD    HL,(NB2)
  357.     ADD    HL,BC
  358.     CP    (HL)
  359.     JR    NZ,LL9
  360. LL7:    LD    A,(CMNEM+2)
  361.     CP    '%'
  362.     JR    Z,LL8
  363.     LD    HL,(NB3)
  364.     ADD    HL,BC
  365.     CP    (HL)
  366.     JR    NZ,LL9
  367. LL8:    LD    DE,BUFIN
  368.     PUSH    BC
  369.     CALL    GETNAM
  370.     PUSH    AF
  371.     CALL    SLOW
  372.     POP    AF
  373.     POP    BC
  374.     CALL    PRNAM
  375.     CALL    CRLF
  376.     CALL    KBDTST        ;REV 1.4 CHECK ABORT
  377. LL9:    INC    BC
  378.     LD    A,C
  379.     OR    A
  380.     JR    NZ,LLOOP
  381.     CALL    PRINT
  382.     DEFB    'NAME FILE IS FULL',0DH,0AH,00H
  383.     JP    GETCMD
  384. ;
  385. ; PRINT NAME POINTED TO BY BC
  386. ;
  387. PRNAM:    LD    HL,OFFL        ;REV 1.4 CHANGED PRNAM: TO LL1:
  388.     ADD    HL,BC        ;GET THE LOW BYTE OFFSET
  389.     LD    E,(HL)        ;PUT IT IN E
  390.     LD    HL,OFFH        ;NOT THE HIGH BYTE OFFSET
  391.     ADD    HL,BC        ;INDEXED BY BC ALSO
  392.     LD    D,(HL)        ;DE NOW HAS OFFSET
  393.     LD    HL,(NTABLE)    ;HL HAS BASE ADDR. OF NAME TABLE
  394.     ADD    HL,DE        ;NOW HL HAS OFFSET ADDED
  395.     LD    (NPTR),HL    ;STORE ADDRESS OF FULL NAME IN NPTR
  396. LL1:    LD    A,(HL)
  397.     CP    EOL
  398.     JR    Z,LL2
  399.     CALL    OUTPUT
  400.     INC    HL
  401.     JR    NZ,LL1
  402. LL2:    RET
  403. ;
  404. ; GET POINTER TO NAME
  405. ;
  406. NAMPTR:    CALL    PRINT
  407.     DEFB    CLRSCR,'TYPE MNEMONIC NAME',0DH,0AH,0
  408.     CALL    GETINP
  409.     CALL    CRLF
  410.     LD    A,0H
  411.     LD    (INPTR),A
  412.     CALL    NAMBYT
  413.     JR    NC,NP1
  414.     CALL    PRINT
  415.     DEFB    0DH,0AH,'NAME NOT FOUND',0DH,0AH,0
  416.     JP    GETCMD
  417. NP1:    LD    (MASK),A
  418.     RET
  419. ;
  420. ; PRINT CHECKS BY NAME MATCH
  421. ;
  422. MATCH:    CALL    NAMPTR
  423.     LD    A,'C'
  424.     LD    (CMD),A
  425.     CALL    HEAD
  426.     CALL    ZSUM
  427.     CALL    GOTOP
  428.     CALL    END
  429. MAT2:    CALL    GETNXT
  430.     JR    C,MATRET
  431.     LD    A,(NAME)
  432.     LD    HL,MASK
  433.     CP     (HL)
  434.     JR    NZ,MAT2         ;WRONG NAME
  435.     CALL    UNPACK
  436.     CALL    CRLF
  437.     CALL    ADD
  438.     JP    MAT2             ;LOOP AGN
  439. MATRET:    CALL    PRTOT
  440.     JP    GETCMD
  441. ;
  442. ; PRINT OUTSTANDING CHECKS
  443. ;
  444. OUTSTD:    LD    A,'C'
  445.     LD    (CMD),A
  446.     CALL    HEAD
  447.     CALL    ZSUM
  448.     CALL    GOTOP
  449.     CALL    END
  450. OUTS1:    CALL    GETNXT
  451.     JR    C,OUTS2     ;DONE
  452.     LD    A,(DAY)
  453.     AND    0C0H
  454.     JR    NZ,OUTS1 ; SKIP D & W
  455.     LD    HL,CNUM+1
  456.     BIT    6,(HL)
  457.     JR    NZ,OUTS1    ;R FLAG SET
  458.     CALL    UNPACK
  459.     CALL    CRLF
  460.     CALL    ADD
  461.     JP    OUTS1
  462. OUTS2:    CALL    TPRINT
  463.     DEFB    0DH,0AH,'OUTSTANDING',0H
  464.     CALL    PRTOT
  465.     JP    GETCMD
  466.     JP    GETCMD
  467. ;
  468. ; LIST CHECKS, DEPOSITS OR WITHDRAWALS
  469. ;
  470. PRNT:    CALL    CDWARG
  471.     CP    'N'
  472.     JR    NZ,PRNT1
  473.     JP    LIST
  474. PRNT1:    LD    (CMD),A
  475.     CALL    GETMO
  476.     CALL    HEAD
  477.     LD    A,(CMD)
  478.     CP    'W'
  479.     JR    NZ,PR1
  480.     LD    A,40H             ;W FLAG
  481.     JR    Z,PR3
  482. PR1:    CP    'D'
  483.     JR    NZ,PR2
  484.     LD    A,80H            ;D FLAG
  485.     JR    Z,PR3
  486. PR2:    LD    A,0              ; NOT W OR D
  487. PR3:    LD    (MASK),A
  488.     CALL    GOTOP
  489.     CALL    END
  490.     CALL    ZSUM
  491. PR4:    CALL    KBDTST            ;REV 1.4 CHECK ABORT
  492.     CALL    GETNXT
  493.     JR    C,PDDONE 
  494.     CALL    MTEST
  495.     JR    NZ,PR4
  496.     LD    A,(DAY)
  497.     AND    0C0H
  498.     LD    HL,MASK
  499.     CP     (HL)
  500.     JR    NZ,PR4
  501.     CALL    UNPACK
  502.     CALL    CRLF
  503.     CALL    ADD
  504.     JP    PR4
  505. PDDONE:    CALL    PRTYP
  506.     CALL    PRTOT
  507.     LD    A,0    ; RESET DEFAULT MONTH
  508.     LD    (OUTMO),A
  509.     JP    GETCMD
  510. ;
  511. ; PRINT TYPE OF LISTING DONE
  512. ;
  513. PRTYP:    LD    A,(CMD)
  514.     CP    'C'
  515.     JR    NZ,PRTYP1
  516.     CALL    TPRINT
  517.     DEFB    0DH,0AH,'CHECKS',0H
  518.     RET
  519. PRTYP1:    CP    'D'
  520.     JR    NZ,PRTYP2
  521.     CALL    TPRINT
  522.     DEFB    0DH,0AH,'DEPOSITS',0H
  523.     RET
  524. PRTYP2:    CALL    TPRINT
  525.     DEFB    0DH,0AH,'WITHDRAWALS',0H
  526.     RET
  527. ;
  528. ; QUIT AND RETURN TO CP/M
  529. ;
  530. QUIT:    CALL    PRINT
  531.     DEFB    CLRSCR,'SAVE CHECKS FIRST? (Y/N)',0
  532.     CALL    .SYINP
  533.     CP    'Y'
  534.     JR    NZ,QU1
  535.     CALL    PRTNAM
  536.     CALL    SAVCHK
  537.     CALL    SAVNAM
  538.     JP    QU2
  539. QU1:    CP    'N'
  540.     JR    NZ,QUIT
  541. QU2:    LD    HL,(OLDSP)
  542.     LD    SP,HL
  543.     JP    COLD
  544. ;
  545. ; RETURN AN OUTSTANDING CHECK
  546. ;
  547. RETURN:    CALL    PRINT
  548.     DEFB    CLRSCR,'RETURN WHAT CHECK #',0
  549.     LD    A,'C'
  550.     LD    (CMD),A
  551.     CALL    GETINP
  552.     CALL    PACKNO
  553.     CALL    FIXFLG
  554.     CALL    FINDNO
  555.     CALL    HEAD
  556.     CALL    UNPACK
  557.     LD    DE,0000H
  558.     LD    A,(INPTR)
  559.     LD    E,A
  560.     LD    HL,BUFIN
  561.     ADD    HL,DE
  562.     LD    A,'R'
  563.     LD    (HL),A
  564.     CALL    OUTPUT
  565.     LD    HL,INPTR
  566.     INC     (HL)
  567.     LD    HL,INNUM
  568.     INC     (HL)
  569.     CALL    CRLF
  570.     CALL    PACK
  571.     CALL    REPLAC
  572.     JP    GETCMD
  573. ;
  574. ; SAVE THE CURRENT DATA ON THE DISK
  575. ;
  576. SAVE:    CALL    PRTNAM
  577.     CALL    SAVCHK
  578.     CALL    SAVNAM
  579.     JP    GETCMD
  580. ;
  581. ; PRINT OUT A MONTHLY TALLY SHEET
  582. ;
  583. TALLY:    CALL    TALPR
  584.     JP    GETCMD
  585. ;
  586. ; ENTER A WITHDRAWAL
  587. ;
  588. WITHDR:    LD    A,0
  589.     LD    (PTRFLG),A
  590.     CALL    HEAD
  591.     CALL    TABON
  592.     CALL    GETNUM
  593.     CALL    GETIN
  594.     CALL    PACK
  595.     CALL    CRLF
  596.     CALL    SAVNXT
  597.     LD    HL,WITHNO
  598.     INC     (HL)
  599.     CALL    TABOFF
  600.     JP    GETCMD
  601. ;
  602. ; PRINT OUT THE BANK BALANCE
  603. ;
  604. VALUE:    CALL    YRSTRT
  605.     CALL    GOTOP
  606.     CALL    END
  607. VAL2:    CALL    GETNXT
  608.     JR    C,VALDON
  609.     LD    HL,DAY
  610.     BIT    7,(HL)
  611.     JR    NZ,VAL1        ;DEPOSIT ADD
  612.     BIT    6,(HL)
  613.     JR    NZ,VAL3
  614.     LD    HL,CNUM+1    ;IGNORE OUTSTD
  615.     BIT    6,(HL)
  616.     JR    Z,VAL2
  617. VAL3:    CALL    SUBTR
  618.     JP    VAL2
  619. VAL1:    CALL    ADD
  620.     JP    VAL2
  621. VALDON:    CALL    TPRINT
  622.     DEFB    CLRSCR,'BANK BALANCE',0DH,0AH,0
  623.     JP    BALDON
  624. ;
  625. ; GET A NEW DATA FILE FROM DISK
  626. ;
  627. GET:    CALL    PUTNAM
  628. GETX:    CALL    LDCHK
  629.     CALL    LDNAM
  630.     JP    GETCMD
  631. ;
  632. ; SEND CRLF TO CONSOLE AND RESET OUTPOS
  633. ;
  634. CRLF:    LD    A,00H        
  635.     LD    (OUTPOS),A
  636.     LD    A,NEWLIN
  637.     CALL    OUTPUT
  638.     LD    A,LINEFD
  639.     JP    OUTPUT
  640. ;
  641. ; GET A CONSOLE INPUT WITHOUT ECHO, SET UPPER CASE
  642. ; RETURN TO COMMAND MODE IF CTRL C
  643. ;
  644. .SYINP:    CALL    SYSINP
  645.     CALL    CASE
  646.     CP    CANCEL
  647.     RET    NZ
  648.     LD    A,0
  649.     LD    (AUTFLG),A    ;TURN AUTO NUMBER MODE OFF
  650.     JP    GETCMD
  651. ;
  652. ; PRINT HEADERS
  653. ;
  654. HEAD:    LD    A,(CMD)
  655.     CP    'C'
  656.     JR    Z,CHEAD
  657.     CP    'D'
  658.     JR    Z,DHEAD
  659.     CP    'W'
  660.     JR    Z,WHEAD
  661.     POP    AF        ;CLEAN UP THE STACK
  662.     JP    CMDERR
  663. ;
  664. ; PRINT CHECK HEADER
  665. ;
  666. CHEAD:    CALL    TPRINT
  667.     DEFB    CLRSCR,'CHK#  ',0
  668.     JP    HDR
  669. ;
  670. ; PRINT WITHDRAW HEADER
  671. ;
  672. WHEAD:    CALL    TPRINT
  673.     DEFB    CLRSCR,'WITH# ',0
  674.     JP    HDR
  675. ;
  676. ; PRINT DEPOSIT HEADER
  677. ;
  678. DHEAD:    CALL    TPRINT
  679.     DEFB    CLRSCR,'DEP#  ',0
  680. HDR:    CALL    TPRINT
  681.     DEFB    'MO DA  AMOUNT NAME FLAGS',0DH,0AH,0
  682.     RET 
  683. ;
  684. ;
  685. ;  CONVERTS BINARY NUMBER TO ASCII DECIMAL STRING
  686. ;  BINARY NUMBER IN BINARY
  687. ;  DECIMAL IN STRING
  688. ;
  689. BTOD:    PUSH    HL
  690.     LD    C,7H
  691. BT.10:    CALL    .DIVI0
  692.     LD    B,0        ;SET UP POINTER TO STRING
  693.     LD    A,(REMAIN)
  694.     ADD    A,30H
  695.     LD    HL,STRING
  696.     ADD    HL,BC
  697.     LD    (HL),A
  698.     LD    B,C        ;SET LOOP COUNTER TO C
  699.     DEC    C
  700.     DJNZ    BT.10
  701.     POP    HL
  702.     RET
  703. .DIVI0:    LD    A,0
  704.     LD    (REMAIN),A
  705.     LD    HL,REMAIN
  706.     LD    B,25    
  707.     JR    DI.10    
  708. DI.05:    RL    (HL)    
  709. DI.10:    OR    A    
  710.     LD    A,(REMAIN)
  711.     SUB    0AH    
  712.     JR    C,DI.21    
  713.     LD    (REMAIN),A
  714. DI.21:    CCF
  715. DI.20:    LD    IX,BINARY
  716.     RL    (IX+0)        
  717.     RL    (IX+1)        
  718.     RL    (IX+2)        
  719.     DJNZ    DI.05    
  720.     RET
  721. ;
  722. ; CONVERTS A DECIMAL ASCII STRING TO A BINARY NUMBER
  723. ; DEC ASCII IN STRING
  724. ; BINARY  NUMBER IN BINARY
  725. ;
  726. ;
  727. DTOB:    LD    A,0
  728.     LD    (XIND),A
  729.     LD    (REMAIN),A
  730.     LD    (REMAIN+1),A
  731.     LD    (REMAIN+2),A
  732.     LD    (BINARY),A
  733.     LD    (BINARY+1),A
  734.     LD    (BINARY+2),A
  735.     LD    HL,STRING
  736. DTOB1:    LD    A,(HL)
  737.     CALL    DIGIT
  738.     JR    Z,DTOB10
  739.     CALL    PRINT
  740.     DEFB    0DH,0AH,'ALPHA IN NUMERIC INPUT',0DH,0AH,0
  741.     JP    GETCMD
  742. DTOB10:    CALL    MPY10
  743.     LD    A,B
  744.     LD    IY,BINARY
  745.     ADD    A,(IY+0)
  746.     LD    (BINARY),A
  747.     JR    NC,DTOB2
  748.     INC     (IY+1)
  749.     JR    NZ,DTOB2
  750.     INC     (IY+2)
  751.     LD    A,(BINARY+2)
  752.     CP    7FH
  753.     JR    C,DTOB2         ; CHK VAL OK
  754.     CALL    PRINT
  755.     DEFB    0DH,0AH,'CHECK VALUE TOO BIG',0DH,0AH
  756.     JP    GETCMD
  757. DTOB2:    LD    IX,XIND
  758.     INC     (IX+0)
  759.     INC    HL
  760.     LD    A,(IX+0)
  761.     CP    08H
  762.     JR    NZ,DTOB1
  763.     RET                 ; CONVERSION COMPLETE
  764. ;
  765. ;  MULTIPLY BINARY BY 10
  766. ;
  767. MPY10:    PUSH    BC
  768.     LD    B,10
  769.     LD    A,0
  770.     LD    (REMAIN),A
  771.     LD    (REMAIN+1),A
  772.     LD    (REMAIN+2),A
  773.     LD    IX,BINARY
  774. MP.10:    LD    A,(REMAIN)
  775.     ADC     A,(IX+0)
  776.     LD    (REMAIN),A
  777.     LD    A,(REMAIN+1)
  778.     ADC     A,(IX+1)
  779.     LD    (REMAIN+1),A
  780.     LD    A,(REMAIN+2)
  781.     ADC     A,(IX+2)
  782.     LD    (REMAIN+2),A
  783.     DJNZ    MP.10
  784.     POP    BC
  785.     LD    (BINARY+2),A
  786.     LD    A,(REMAIN+1)
  787.     LD    (BINARY+1),A
  788.     LD    A,(REMAIN)
  789.     LD    (BINARY),A
  790.     RET
  791. ;
  792. ; CHECK FOR DECIMAL DIGIT
  793. ; B RETURNS VALUE OF DIGIT IN HEX
  794. ;
  795. DIGIT:    PUSH    HL
  796.     LD    HL,DIG+9
  797.     LD    B,9
  798. DIG.10:    CP     (HL)        
  799.     JR    Z,DIG.20
  800.     DEC    HL
  801.     DEC    B
  802.     JP    P,DIG.10
  803. DIG.20:    POP    HL
  804.     RET             ; Z=1 IF DIGIT
  805. ;
  806. DIG:        DEFB    '0123456789ABCDEF'
  807. ;
  808. ;
  809. ;
  810. ; RESET INNUM AND INPTR
  811. ; IF WITHDRAWAL OR DEPOSIT GET NUMBER
  812. ; IF AUTO-NUMBER, THEN GET THE CHECK NUMBER
  813. ; ELSE RETURN
  814. ;
  815. GETNUM:    LD    A,0
  816.     LD    (INNUM),A
  817.     LD    (INPTR),A
  818.     LD    A,(CMD)
  819.     CP    'C'
  820.     RET    Z
  821.     CP    'D'
  822.     JR    Z,GETDEP
  823. ; ELSE GET WITHDRAWAL #
  824.     LD    A,(WITHNO)
  825.     JP    GN2
  826. GETDEP:    LD    A,(DEPNO)
  827. GN2:    LD    (BINARY),A
  828.     LD    A,0
  829.     LD    (BINARY+1),A
  830.     LD    (BINARY+2),A
  831.     CALL    BTOD
  832.     LD    B,3            ;LOOP COUNTER
  833.     LD    IX,STRING+5
  834.     LD    IY,BUFIN
  835. GN3:    LD    A,(IX+0)
  836.     LD    (IY+0),A
  837.     INC    IX
  838.     INC    IY
  839.     CALL    OUTPUT
  840.     LD    HL,INNUM
  841.     INC     (HL)
  842.     LD    HL,INPTR
  843.     INC     (HL)
  844.     DJNZ    GN3
  845.     RET
  846. ;
  847. ; FILL BUFIN FROM KBD
  848. ; RETURN ON CR OR #LINEFD
  849. ; GETINP RESETS INPTR & INNUM TO 0
  850. ; GETIN ASSUMES INPTR & INNUM VALID
  851. ;
  852. GETINP:    LD    A,0H
  853.     LD    (INNUM),A
  854.     LD    (INPTR),A
  855. ;
  856. GETIN:    CALL    .SYINP
  857. ;
  858. ; IF INPUT WILL GO TO PRINTER THEN PRINT CHAR ON CONSOLE
  859. ;
  860.     PUSH    AF        ;SAVE THE CHAR
  861.     LD    A,(PTRFLG)
  862.     OR    A
  863.     JR    Z,NOTPTR
  864.     POP    AF
  865.     PUSH    AF
  866.     CALL    CONOUT
  867. NOTPTR:    POP    AF
  868. ;
  869.     CALL    TABNXT
  870.     CP    BS
  871.     JR    NZ,GI1
  872. ;
  873. ; BACKSPACE
  874. ;
  875.     PUSH    AF        ;SAVE THE BACKSPACE CHAR
  876.     LD    A,(INPTR)    ;CHECK IF AT THE BEGINNING
  877.     OR    A        ;IS INPTR ZERO
  878.     JR    NZ,NOTBEG    ;NOT AT BEGINNING, NOW BACKSPACE
  879.     POP    AF
  880.     JP    GETIN        ;ELSE IGNORE THE BACKSPACE
  881. NOTBEG:    DEC    A        ;UPDATE INPTR
  882.     LD    (INPTR),A
  883.     POP    AF        ;NOW SEND BACKSPACE TO VIDEO
  884.     CALL    OUTPUT
  885.     JP    GETIN        ;AND GET NEXT CHARACTER
  886. ;
  887. ; INSERT
  888. ;
  889. GI1:    CP    ADDCHAR        ; CTRL A ADD SPACE AT CURSOR?
  890.     JR    NZ,GI2
  891.     LD    BC,0000H    ;SET IT TO ZERO
  892.     LD    DE,INPTR    ;DE POINTS TO INPTR
  893.     LD    HL,INNUM    ;HL POINTS TO INNUM
  894.     LD    A,(HL)
  895.     CP    BUFSIZ-1    ;MAKE SURE INSERT DOES NOT
  896.     JR    Z,GETIN        ;OVERFLOW THE BUFFER
  897.     LD    A,(DE)        ;GET VALUE OF INPTR
  898.     CP    (HL)        ;IS IT AT THE END OF THE BUFFER
  899.     JR    Z,GETIN        ;IF SO IGNORE INSERT
  900.     INC    (HL)        ;BUFIN WILL HAVE ONE MORE CHAR
  901.     LD    A,(HL)        ;GET INNUM
  902.     LD    C,A        ;PUT IT INTO INDEX
  903.     LD    IY,BUFIN
  904.     ADD    IY,BC        ;START AT THE OLD END OF BUFIN
  905. GI10:    LD    A,(IY-1)    ;GET A CHAR
  906.     LD    (IY+0),A    ;AND MOVE IT TO RIGHT ONE CHAR
  907.     DEC    IY        ;NEXT CHAR DOWN
  908.     DEC     C        ;DEC POINTER
  909.     LD    A,(DE)        ;GET INPTR
  910.     CP    C        ;IS POINTER AT INPTR
  911.     JR    NZ,GI10        ;CONTINUE MOVING UNTIL EQUAL
  912.     LD    A,BLANK
  913.     LD    (IY+0),A    ;PUT BLANK AT INPTR POSITION
  914.     CALL    FIXVID
  915. GI11:    JP    GETIN
  916. ;
  917. ; DELETE CHARACTER AT CURSOR
  918. ;
  919. GI2:    CP    DELCHAR
  920.     JR    NZ,GI3
  921.     LD    DE,INPTR    ;DE POINTS TO INPTR
  922.     LD    A,(DE)
  923.     LD    HL,INNUM    ;HL POINTS TO INNUM
  924.     CP    (HL)
  925.     JR    Z,GETIN        ;ABORT IF INPTR=INNUM
  926.     LD    BC,0000H    ;INITIALIZE BC
  927.     LD    C,A        ;BC NOW INDEX INTO BUFIN
  928.     LD    IX,BUFIN
  929.     ADD    IX,BC        ;IX NOW POINTS INTO BUFIN
  930. GI20:    LD    A,(IX+1)    ;MOVE NEXT CHARACTER
  931.     LD    (IX+0),A    ;DOWN TO REPLACE ONE POINTED TO
  932.     INC    C        ;C IS INPTR + 1
  933.     INC    IX        ;MOVE UP ONE CHARACTER
  934.     LD    A,C        ;AND IF INPTR + 1 IS NOT
  935.     CP    (HL)        ;EQUAL TO INNUM MOVE ANOTHER
  936.     JR    NZ,GI20
  937.     DEC     (HL)        ;DEC INNUM BECUZ ONE CHAR IS GONE
  938.     CALL    FIXVID        ;AND UPDATE THE DISPLAY
  939.     JP    GETIN
  940. ;
  941. ; FWD SPACE
  942. ;
  943. GI3:    CP    FWDSP         ; FWD SPACE
  944.     JR    NZ,GI4
  945.     LD    A,(INPTR)
  946.     LD    HL,INNUM
  947.     CP    (HL)
  948.     JR    NZ,GI40
  949.     JP    GETIN
  950. GI40:    INC     A
  951.     LD    (INPTR),A
  952.     LD    A,FWDSP        ;NOW FORWARD SPACE CURSOR
  953.     CALL    OUTPUT
  954.     JP    GETIN
  955. ;
  956. ; TEST FOR MOVE TO SET CURSOR AT BEGINNING OF BUFFER
  957. ;
  958. GI4:    CP    MOVE        ;MOVE THE CURSOR?
  959.     JR    NZ,GI41
  960.     LD    A,0DH
  961.     CALL    OUTPUT        ;SET CURSOR AT BEGINNING
  962.     LD    A,0
  963.     LD    (INPTR),A    ;RESET INPTR
  964.     JP    GETIN
  965. ;
  966. ; RETURN FROM GETIN ON LINE FEED OR CARRIAGE RETURN
  967. ;
  968. GI41:    CP    LINEFD
  969.     RET    Z
  970.     CP    NEWLIN
  971.     RET    Z
  972. ;
  973. ; IGNORE OTHER CONTROL CODES AND PUT VALID CHAR. IN BUFFER
  974. ;
  975. GI5:    CP    20H        ;IGNORE REST OF CONTROL CODES
  976.     JP    C,GETIN
  977.     LD    HL,BUFIN
  978.     LD    BC,0000H
  979.     PUSH    AF
  980.     LD    A,(INPTR)
  981.     LD    C,A
  982.     ADD    HL,BC
  983.     POP    AF
  984.     LD    (HL),A
  985.     CALL    OUTPUT
  986.     LD    A,(INPTR)
  987.     INC    A
  988.     LD    (INPTR),A
  989.     LD    HL,INNUM
  990.     CP    (HL)
  991.     JP    C,GETIN     ; INPTR<INNUM
  992.     JP    Z,GETIN        
  993.     LD    (HL),A
  994.     CP    32
  995.     JP    NZ,GETIN
  996. INERR:    LD    A,BELL
  997.     CALL    OUTPUT
  998.     CALL    PRINT
  999.     DEFB    0DH,0AH,'INPUT BUFFER OVERFLOW',0DH,0AH,0
  1000.     JP    GETCMD
  1001. ;
  1002. ; UPDATE VIDEO DISPLAY
  1003. ; RESET CURSOR TO INPTR
  1004. ;
  1005. FIXVID:    LD    A,(INNUM)    ;WRITE OUT BUFIN
  1006.     LD    C,A
  1007.     CALL    OVRWRT
  1008. ;
  1009. ; NOW WRITE SPACES UNTIL BUFSIZ TO ERASE EVERYTHING
  1010. ;
  1011. FV1:    CP    BUFSIZ
  1012.     JR    Z,FV2
  1013.     LD    A,BLANK
  1014.     CALL    OUTPUT
  1015.     INC    B
  1016.     LD    A,B
  1017.     JP    FV1
  1018. ;
  1019. ; NOW OVERWRITE UNTIL INPTR
  1020. ;
  1021. FV2:    LD    A,(INPTR)
  1022.     LD    C,A
  1023.     CALL    OVRWRT
  1024.     RET
  1025. ;
  1026. OVRWRT:    LD    A,NEWLIN    ;START AT THE BEGINNING
  1027.     CALL    OUTPUT
  1028.     LD    B,0        ;B IS CHAR. COUNTER
  1029.     LD    IX,BUFIN    ;IX IS POINTER INTO BUFIN
  1030. WRTNXT:    LD    A,(IX+0)    ;GET A CHARACTER
  1031.     CALL    OUTPUT        ;AND OUTPUT IT TO CONSOLE
  1032.     INC    B        ;BUMP THE CHAR. COUNTER
  1033.     INC    IX        ;AND THE POINTER
  1034.     LD    A,B
  1035.     CP    C        ;COMPARE CHAR. CNTR TO LIMIT
  1036.     JR    NZ,WRTNXT    ;AND LOOP UNTIL END
  1037.     RET
  1038. ;
  1039. ; PACK BUFIN INTO BUFFER
  1040. ;
  1041. PACKNO:    LD    A,0
  1042.     LD    (WIFE),A    ; RESET FLAG
  1043.     LD    (INPTR),A     ; GETCMDNING OF BUFIN
  1044.     LD    A,(BUFIN)
  1045.     CP    'W'
  1046.     JR    NZ,P1
  1047.     LD    A,1
  1048.     LD    (WIFE),A
  1049.     LD    IY,INPTR
  1050.     INC     (IY+0)
  1051. ;
  1052. ; GET CK,WITHDR,OR DEPOSIT #
  1053. ;
  1054. P1:    CALL    GETDEC ; PUT # INTO STRING
  1055.     CALL    DTOB
  1056.     LD    A,(BINARY)
  1057.     LD    (CNUM),A
  1058.     LD    A,(BINARY+1)
  1059.     AND    3FH 
  1060.     LD    (CNUM+1),A
  1061.     RET
  1062. ;
  1063. ; PACK TAKES THE CONTENTS OF BUFIN AND PACKS THE DATA
  1064. ; INTO 8 BYTES AND STORES IT IN THE BUFFER
  1065. ;
  1066. PACK:    CALL    PACKNO
  1067. ;
  1068. ; GET MONTH
  1069. ;
  1070.     CALL    GETDEC
  1071.     CALL    DTOB
  1072.     LD    A,(BINARY)
  1073.     AND    0FH
  1074.     LD    (MONTH),A
  1075. ;
  1076. ; GET DAY
  1077. ;
  1078.     CALL    GETDEC
  1079.     CALL    DTOB
  1080.     LD    A,(BINARY)
  1081.     AND    3FH 
  1082.     LD    (DAY),A
  1083. ;
  1084. ; GET CHECK VALUE
  1085. ;
  1086.     CALL    GETVAL
  1087.     CALL    DTOB
  1088.     LD    A,(BINARY+2)
  1089.     LD    (CVAL+2),A
  1090.     LD    A,(BINARY+1)
  1091.     LD    (CVAL+1),A
  1092.     LD    A,(BINARY)
  1093.     LD    (CVAL),A
  1094. ;
  1095. ; GET NAME
  1096. ;
  1097.     CALL    NAMBYT
  1098.     JR    C,P3         ; NAME NOT FOUND
  1099.     LD    (NAME),A
  1100. ;
  1101. ; FIX FLAGS
  1102. ;
  1103.     JP    FIXFLG ; RETURN
  1104. ;
  1105. P3:    LD    (NAME),A     ; PUT 0 IN TEMPORARILY
  1106.     CALL    FIXFLG
  1107.     CALL    PRINT
  1108.     DEFB    0DH,0AH,'NEW NAME (Y/N)',0DH,0AH,0
  1109.     CALL    INPUT
  1110.     CP    'Y'
  1111.     JR    Z,P4
  1112.     JP    GETCMD
  1113. P4:    CALL    FIXNAM
  1114.     LD    (NAME),A
  1115.     RET
  1116. ;
  1117. ; PUT NEXT BUFIN ENTRY INTO STRING
  1118. ;
  1119. GETDEC:    LD    B,8 ; CLEAR STRING
  1120.     LD    A,'0'
  1121.     LD    HL,STRING+7
  1122. PD1:    LD    (HL),A
  1123.     DEC    HL
  1124.     DJNZ    PD1
  1125. PD2:    CALL    SETHL        ;HL=BUFIN+INPTR
  1126.     LD    A,(HL)
  1127.     CP    BLANK ; IGNORE LEADING SPACES
  1128.     JR    NZ,PD3
  1129.     LD    A,(INPTR)
  1130.     INC    A
  1131.     LD    (INPTR),A
  1132.     JR    NZ,PD2
  1133. PD3:    LD    A,(HL)
  1134.     CP    BLANK         ; RETURN ON NEXT SPACE
  1135.     JR    NZ,PD4
  1136. PDRET:    RET
  1137. PD4:    CP    '.'
  1138.     JR    Z,PDRET
  1139.     CALL    PUTSTR
  1140. NXTNUM:    LD    A,(INPTR)
  1141.     INC    A
  1142.     LD    (INPTR),A
  1143.     CALL    SETHL
  1144.     LD    IX,INNUM
  1145.     CP    (IX+0)
  1146.     JR    NZ,PD3
  1147.     RET
  1148. ;
  1149. ; SET HL TO BUFIN+INPTR
  1150. ;
  1151. SETHL:    PUSH    AF        ;DON'T DESTROY IT
  1152.     LD    A,(INPTR)
  1153.     LD    E,A
  1154.     LD    D,0
  1155.     LD    HL,BUFIN
  1156.     ADD    HL,DE
  1157.     POP    AF
  1158.     RET
  1159. ;
  1160. ;
  1161. ; GET CHECK VALUE
  1162. ; ALL DOLLARS UNLESS . FOUND
  1163. ;
  1164. GETVAL:    CALL    GETDEC
  1165.     CP    '.'
  1166.     JR    Z,CENTS
  1167.     LD    A,'0'            ; AMOUNT IN DOLLARS
  1168.     CALL    PUTSTR
  1169.     LD    A,'0'
  1170.     JP    PUTSTR             ; RETURN
  1171. CENTS:    INC    HL
  1172.     LD    A,(HL)
  1173.     CP    BLANK
  1174.     JR    Z,VALERR
  1175.     INC    HL
  1176.     LD    A,(HL)
  1177.     CP    BLANK
  1178.     JR    Z,VALERR
  1179.     INC    HL
  1180.     LD    A,(HL)
  1181.     CP    BLANK
  1182.     JR    NZ,VALERR
  1183.     JP    NXTNUM             ; CENTS OK
  1184. VALERR:    CALL    PRINT
  1185.     DEFB    0DH,0AH,'CHECK VALUE ERROR',0DH,0AH,0
  1186.     JP    GETCMD
  1187. ;
  1188. ; PUT ACC INTO STRING
  1189. ;
  1190. PUTSTR:    LD    B,8
  1191.     PUSH    AF
  1192.     LD    IY,STRING
  1193. PS1:    LD    A,(IY+1)
  1194.     LD    (IY+0),A
  1195.     INC    IY
  1196.     DJNZ    PS1
  1197.     POP    AF
  1198.     LD    (IY-1),A
  1199.     RET
  1200. ;
  1201. ; SET FLAG BITS
  1202. ;
  1203. FIXFLG:    LD    A,(WIFE)
  1204.     OR    A        ;SET THE FLAG
  1205.     JR    Z,FF0
  1206.     LD    A,(CNUM+1)    ;SET WIFE FLAG
  1207.     OR    080H
  1208.     LD    (CNUM+1),A
  1209. FF0:    LD    A,(CMD)
  1210.     CP    'C'
  1211.     JR    Z,FF1
  1212.     CP    'W'
  1213.     JR    Z,FW1
  1214.     CP    'D'
  1215.     JR    NZ,FXERR
  1216. ;
  1217. ; SET DEPOSIT FLAG
  1218. ;
  1219.     LD    A,(DAY)
  1220.     OR    080H
  1221.     LD    (DAY),A
  1222.     JR    NZ,FF1 ; JUMP
  1223. FXERR:    CALL    PRINT
  1224.     DEFB    0DH,0AH,'CMD ERROR IN FIXFLG',0DH,0AH,0
  1225.     JP    GETCMD
  1226. ;  
  1227. ; SET WITHDRAW FLAG
  1228. ;
  1229. FW1:    LD    A,(DAY)
  1230.     OR    040H
  1231.     LD    (DAY),A
  1232. FF1:    LD    A,(INPTR)
  1233.     LD    B,A
  1234.     LD    A,(INNUM)
  1235.     CP    B
  1236.     JR    NZ,FF4
  1237.     RET             ; NO MORE FLAGS
  1238. FF4:    LD    HL,BUFIN
  1239.     LD    DE,0000H
  1240.     LD    A,(INPTR)
  1241.     LD    E,A
  1242.     ADD    HL,DE
  1243.     LD    A,(HL)
  1244.     CP    BLANK
  1245.     JR    Z,NXTFLG
  1246.     CP    'R'
  1247.     JR    NZ,FF2
  1248.     LD    A,(CNUM+1)    ;SET RETURNED FLAG
  1249.     OR    040H
  1250.     LD    (CNUM+1),A
  1251.     JP    NXTFLG
  1252. FF2:    CP    'I'
  1253.     JR    NZ,FF3
  1254.     LD    A,(CVAL+2)    ;SET I TAX FLAG
  1255.     OR    80H
  1256.     LD    (CVAL+2),A
  1257.     JP    NXTFLG
  1258. FF3:    CP    'W'
  1259.     JR    NZ,FF6
  1260.     LD    A,(CNUM+1)
  1261.     OR    80H        ; SET WIFE FLG
  1262.     LD    (CNUM+1),A
  1263.     JP    NXTFLG
  1264. FF6:    CALL    PAKCAT
  1265.     LD    B,A
  1266.     LD    A,(MONTH)
  1267.     OR    B
  1268.     LD    (MONTH),A
  1269. NXTFLG:    LD    A,(INPTR)
  1270.     INC    A
  1271.     LD     (INPTR),A
  1272.     INC    HL
  1273.     JP    FF1
  1274. ;
  1275. ; INVALID CAT FLAGS ARE W,I,R
  1276. CAT:        DEFB    'NCDEFGHMPSU%%%%%'
  1277. ; % ARE SPARES
  1278. ;
  1279. ;
  1280. ; UNPACK BUFFER INTO BUFIN
  1281. ; INPTR AND INNUM SET TO END OF BUFIN
  1282. ;
  1283. UNPACK:    LD    A,0
  1284.     LD    HL,BUFFER
  1285.     LD    DE,BUFIN
  1286.     LD    A,(BUFFER)
  1287.     LD    (BINARY),A
  1288.     LD    A,(BUFFER+1)
  1289.     AND    3FH 
  1290.     LD    (BINARY+1),A     ; UNPACK CHECK #    
  1291.     LD    A,0
  1292.     LD    (BINARY+2),A        
  1293.     CALL    BTOD
  1294.     LD    B,4
  1295.     CALL    PUTBIN
  1296. ;
  1297. ; UNPACK MONTH
  1298. ;
  1299.     LD    A,(MONTH)
  1300.     AND    0FH 
  1301.     LD    (BINARY),A
  1302.     CALL    BTOD
  1303.     LD    B,4
  1304.     CALL    PUTBIN
  1305. ;
  1306. ; UNAPCK DAY
  1307. ;
  1308.     LD    A,(DAY)
  1309.     AND    3FH 
  1310.     LD    (BINARY),A
  1311.     CALL    BTOD
  1312.     LD    B,5
  1313.     CALL    PUTBIN
  1314. ;
  1315. ; INSERT SPACE BETWEEN DAY AND CHECK VALUE FOR LARGE CHECKS
  1316. ;
  1317.     LD    A,20H
  1318.     LD    (DE),A
  1319.     INC    DE
  1320.     CALL    OUTPUT
  1321. ;
  1322. ; UNPACK VALUE
  1323. ;
  1324.     LD    A,(CVAL)
  1325.     LD    (BINARY),A
  1326.     LD    A,(CVAL+1)
  1327.     LD    (BINARY+1),A
  1328.     LD    A,(CVAL+2)
  1329.     AND    7FH
  1330.     LD    (BINARY+2),A
  1331.     CALL    BTOD
  1332.     LD    A,1
  1333.     LD    (V),A        ;SET UP FOR CENTS MODE
  1334.     LD    B,1        ;SET UP FOR ALL OUTPUT
  1335.     CALL    PUTBIN
  1336.     LD    A,0
  1337.     LD    (V),A
  1338. ;
  1339. ; UNPACK NAME
  1340. ;
  1341.     LD    A,(NAME)
  1342.     LD    C,A
  1343.     CALL    GETNAM
  1344. ;
  1345. ; UNPACK FLAGS
  1346. ;
  1347. UPFLG:    LD    HL,CNUM+1
  1348.     BIT    7,(HL)
  1349.     JR    Z,UP2
  1350.     LD    A,'W'
  1351.     CALL    OUTPUT
  1352.     LD    (DE),A
  1353.     INC    DE        ;DE IS POINTER INTO BUFIN
  1354. UP2:    LD    IY,CNUM+1
  1355.     BIT    6,(IY+0)
  1356.     JR    Z,UP3
  1357.     LD    A,'R'
  1358.     CALL    OUTPUT
  1359.     LD    (DE),A        ;PUT R INTO BUFIN
  1360.     INC    DE
  1361. UP3:    LD    IY,CVAL+2
  1362.     BIT    7,(IY+0)
  1363.     JR    Z,UP4
  1364.     LD    A,'I'
  1365.     CALL    OUTPUT
  1366.     LD    (DE),A        ;PUT I INTO BUFIN 
  1367.     INC    DE
  1368. ;
  1369. ; UNPACK CATEGORY
  1370. ;
  1371. UP4:    LD    A,(MONTH)
  1372.     AND     0F0H
  1373.     RRCA
  1374.     RRCA
  1375.     RRCA
  1376.     RRCA
  1377.     LD    C,A        ;C IS OFFSET INTO CAT STRING
  1378.     LD    B,0
  1379.     LD    IY,CAT
  1380.     ADD    IY,BC        ;IY NOW POINTS TO C'TH ENTRY IN CAT
  1381.     LD    A,(IY+0)
  1382.     CP    '%'
  1383.     JR    Z,UPRET
  1384.     CP    'N'
  1385.     JR    Z,UPRET
  1386.     CALL    OUTPUT
  1387.     LD    (DE),A
  1388.     INC    DE        ;DE POINTS TO BUFIN
  1389. UPRET:    PUSH    DE
  1390.     POP    HL        ;EXCHANGE DE AND HL
  1391.     LD    BC,BUFIN
  1392.     OR    A        ;CLEAR CARRY JUST TO BE SURE
  1393.     SBC     HL,BC        ;COMPUTE INDEX INTO BUFFER
  1394.     LD    A,L
  1395.     LD    (INPTR),A
  1396.     LD    (INNUM),A
  1397. ;
  1398. ; NOW PRINT THE FULL NAME ON THE SCREEN
  1399. ;    RETURN IF THIS IS A TALLY COMMAND ELSE
  1400. ;    TAB TO COLUMN 40 THEN PRINT THE NAME
  1401. ;
  1402.     LD    B,A
  1403.     LD    A,(CMD)
  1404.     CP    'T'
  1405.     LD    A,B        ;RESTORE A=INPTR,INNUM
  1406.     RET    Z
  1407.     LD    B,A
  1408.     LD    A,40
  1409.     SUB    B
  1410.     LD    B,A
  1411. UPLP:    LD    A,BLANK
  1412.     CALL    OUTPUT
  1413.     DJNZ     UPLP
  1414.     LD    A,(NAME)
  1415.     LD    C,A
  1416.     CALL    PRNAM
  1417. ;
  1418. ; NOW RETURN THE CURSOR TO COLUMN SET BY INPTR
  1419. ;
  1420.     LD    A,0DH        ;RETURN CURSOR TO BEGINNING
  1421.     CALL    OUTPUT
  1422.     LD    A,(INPTR)
  1423.     LD    B,A
  1424. UPLP1:    LD    A,FWDSP
  1425.     CALL    OUTPUT
  1426.     DJNZ    UPLP1
  1427.     LD    A,(INPTR)
  1428.     RET
  1429. ;
  1430. ; B CONTAINS POINTER TO STRING
  1431. ; HL POINTS TO BUFFER
  1432. ; LEADING 'S REPLACED BY SPACES
  1433. ; IF V=1 THEN (.) INSERTED
  1434. ;
  1435. PUTBIN:    PUSH    BC
  1436.     LD    C,B
  1437.     LD    B,0
  1438. PTB2:    LD    IY,STRING
  1439.     ADD    IY,BC        ;IY POINTS TO B'TH ENTRY IN STRING
  1440.     LD    A,(IY+0)
  1441.     CP    '0'
  1442.     JR    NZ,PTB1
  1443.     LD    A,BLANK
  1444.     CALL    OUTPUT
  1445.     LD    (DE),A
  1446.     INC    DE        ;INCREMENT BUFFER POINTER
  1447.     INC    C        ;INCREMENT INDEX INTO STRING
  1448.     LD    A,C
  1449.     CP    6
  1450.     JR    NZ,PB3
  1451.     LD    A,(V)
  1452.     OR    A        ;SET THE FLAGS
  1453.     JR    NZ,PTB1
  1454. PB3:    CP    8
  1455.     JR    NZ,PTB2
  1456.     POP    BC
  1457.     LD    A,E
  1458.     LD    (INPTR),A
  1459.     RET
  1460. PTB1:    LD    A,C
  1461.     CP    6
  1462.     JR    NZ,PB2
  1463.     LD    A,(V)
  1464.     OR    A
  1465.     JR    Z,PB2
  1466.     LD    A,'.'
  1467.     CALL    OUTPUT
  1468.     LD    (DE),A
  1469.     INC    DE
  1470. PB2:    LD    IY,STRING
  1471.     OR    A        ;CLEAR CARRY
  1472.     ADD    IY,BC
  1473.     LD    A,(IY+0)
  1474.     CALL    OUTPUT
  1475.     LD    (DE),A
  1476.     INC    DE
  1477.     INC    C
  1478.     LD    A,C
  1479.     CP    8
  1480.     JR    NZ,PTB1
  1481.     POP    BC
  1482.     LD    A,E
  1483.     LD    (INPTR),A
  1484.     RET
  1485. ;
  1486. ; GET INPUT FROM CONSOLE WITH ECHO, COMMAND MODE ON CTRL C
  1487. ;
  1488. INPUT:     CALL    SYSIN
  1489.     CP    CANCEL        ;CANCEL THE COMMAND IN PROCESS?
  1490.     JP    NZ,CASE
  1491.     LD    A,0
  1492.     LD    (AUTFLG),A    ;CANCEL THE AUTO NUMBER MODE
  1493.     JP    GETCMD
  1494. ;
  1495. ;
  1496. ; ENTER CHECK BUFFER INTO CFILE AT END
  1497. ;
  1498. SAVNXT:    LD    HL,(CKSTRT)
  1499.     LD    DE,(FILSIZ)
  1500.     ADD    HL,DE
  1501.     LD    (TPTR),HL
  1502.     LD    A,E
  1503.     ADD    A,08H        ;INCREMENT BY 8 BYTES
  1504.     LD    E,A
  1505.     JR    NC,SAV1
  1506.     INC    D
  1507. SAV1:    LD    (FILSIZ),DE    ;UPDATE FILE SIZE
  1508. ;
  1509. ;NOW CHECK IF CHECK FILE WILL OVER WRITE NAME FILE
  1510. ;
  1511.     LD    HL,(NAMES)
  1512.     LD    DE,(TPTR)
  1513.     OR    A        ;CLEAR THE CARRY
  1514.     SBC    HL,DE
  1515.     JR    NC,REPLAC    ;TPTR<NAMES
  1516. ;
  1517. ;IF NAMES WOULD BE OVERWRITTEN THEN DEC FILSIZ BY 8
  1518. ;AND RETURN TO GET CMD AFTER ERROR MESSAGE
  1519. ;
  1520.     LD    HL,(FILSIZ)
  1521.     LD    B,0
  1522.     LD    C,8
  1523.     OR    A        ;CLEAR THE CARRY
  1524.     SBC    HL,BC
  1525.     LD    (FILSIZ),HL
  1526.     CALL    PRINT
  1527.     DEFB CLRSCR,'CHECK FILE FULL',0DH,0AH,0
  1528.     JP    GETCMD
  1529. ;
  1530. ; ENTER HERE WITH TPTR SET FOR REPLACE
  1531. ;
  1532. REPLAC:    LD    B,8        ;SET UP TO MOVE 8 BYTES
  1533.     LD    HL,BUFFER
  1534.     LD    IY,(TPTR)
  1535. REP1:    LD    A,(HL)
  1536.     LD    (IY+0),A
  1537.     INC    HL
  1538.     INC     IY
  1539.     DJNZ    REP1
  1540.     RET
  1541.  
  1542. PROMPT:    CALL    PRINT
  1543.     DEFB 0DH,0AH,'ENTER # (W # FOR WIFES CHECK)',0
  1544.     RET
  1545. ;
  1546. ; FIND # MATCH IN CFILE
  1547. ; RETURN LOAD ENTRY INTO BUFFER
  1548. ; TPTR SET TO LOCATION TO REPLACE
  1549. ;
  1550. FINDNO:    CALL    END
  1551.     LD    HL,(CKSTRT)
  1552.     LD    (TPTR),HL
  1553. F2:    LD    HL,(TPTR)
  1554.     LD    IY,BUFFER
  1555.     LD    A,(HL)
  1556.     CP    (IY+0)
  1557.     JR    NZ,F1
  1558.     INC    HL
  1559.     LD    A,(HL)
  1560.     AND     0BFH     ;CLEAR RETURN FLAG
  1561.     CP    (IY+1)
  1562.     JR    Z,FOUND
  1563. F1:    CALL    INCNXT
  1564. ;
  1565. ; NOW CHECK IF TPTR IS AT THE END OF THE CHECK FILE
  1566. ;
  1567.     LD    HL,(BUFEND)
  1568.     LD    DE,(TPTR)
  1569.     OR    A
  1570.     SBC    HL,DE
  1571.     JR    NC,F2        ;TPTR<BUFEND
  1572.     CALL    PRINT
  1573.     DEFB 0DH,0AH,'ENTRY NOT FOUND',0DH,0AH,0
  1574.     JP    GETCMD
  1575. FOUND:    LD    A,(CMD)
  1576.     CP    'W'
  1577.     JR    NZ,F5
  1578.     LD    HL,(TPTR)
  1579.     LD    BC,0006        ;LOOK AT 6TH ENTRY
  1580.     ADD    HL,BC
  1581.     LD    A,(HL)
  1582.     AND     40H         ;IS W FLAG SET
  1583.     JR    Z,F1         ; NO GOTO NEXT ENTRY
  1584.     JR    NZ,F4
  1585. F5:    CP     'D'
  1586.     JR    NZ,F6
  1587.     LD    HL,(TPTR)
  1588.     LD    BC,0006H    ;LOOK AT 6TH ENTRY
  1589.     ADD    HL,BC
  1590.     LD    A,(HL)        
  1591.     AND     080H        ;IS D FLAG SET
  1592.     JR    Z,F1         ; NO GOTO NEXT ENTRY
  1593.     JR    NZ,F4
  1594. F6:    CP    'C'
  1595.     JR    Z,F7 ; OK
  1596. F8:    POP    AF        ;CLEAN UP THE STACK
  1597.     JP    CMDERR
  1598. F7:    LD    HL,(TPTR)
  1599.     LD    BC,0006H    ;LOOK AT 6TH ENTRY
  1600.     ADD    HL,BC
  1601.     LD    A,(HL)
  1602.     AND     0C0H
  1603.     CP     0
  1604.     JR    NZ,F1
  1605. F4:    LD    B,8        ;TRANSFER ENTRY TO BUFFER
  1606.     LD    HL,(TPTR)
  1607.     LD    IY,BUFFER
  1608. F9:    LD    A,(HL)
  1609.     LD    (IY+0),A
  1610.     INC    HL
  1611.     INC    IY
  1612.     DJNZ    F9
  1613.     RET             ;TPTR AT ENTRY LOC.
  1614. ;
  1615. ; INC TPTR TO NEXT ENTER
  1616. ;
  1617. INCNXT:    LD    HL,(TPTR)
  1618.     LD    BC,0008
  1619.     ADD    HL,BC
  1620.     LD    (TPTR),HL
  1621.     RET
  1622. ;
  1623. ; COMPUTE CFILE END
  1624. ;
  1625. END:    LD    HL,(CKSTRT)
  1626.     LD    DE,(FILSIZ)
  1627.     ADD    HL,DE
  1628.     LD    (BUFEND),HL
  1629.     RET
  1630. ;
  1631. ; SET TPTR TO GETCMD OF CFILE
  1632. ;
  1633. GOTOP:    LD    HL,(CKSTRT)
  1634.     LD    (TPTR),HL
  1635.     RET
  1636. ;
  1637. ; FIRST TEST DONE ELSE
  1638. ; TRANSFER TPTR ENTRY TO BUFFER
  1639. ; THEN INCREMENT TPTR TO NEXT
  1640. ;
  1641. GETNXT:    LD    HL,(TPTR)
  1642.     LD    BC,(BUFEND)
  1643.     OR    A
  1644.     SBC    HL,BC
  1645.     JR    NZ,GTNXT1
  1646.     SCF
  1647.     RET             ;CARRY SET WHEN EOF
  1648. ;
  1649. ; NOW MOVE 8 BYTES FROM TPTR TO BUFFER
  1650. ;
  1651. GTNXT1:    LD    B,8
  1652.     LD    IY,BUFFER
  1653.     LD    HL,(TPTR)
  1654. GTNXT2:    LD    A,(HL)
  1655.     LD    (IY+0),A
  1656.     INC    HL
  1657.     INC    IY
  1658.     DJNZ    GTNXT2
  1659.     CALL    INCNXT
  1660.     SCF
  1661.     CCF
  1662.     RET
  1663. ;
  1664. ; ZERO SUM
  1665. ;
  1666. ZSUM:    LD    A,0
  1667.     LD    (SUM),A
  1668.     LD    (SUM+1),A
  1669.     LD    (SUM+2),A
  1670.     RET
  1671. ;
  1672. ; ADD CVAL TO SUM
  1673. ;
  1674. ADD:    LD    A,(CVAL+2)
  1675.     AND    7FH
  1676.     LD    (CVAL+2),A
  1677. ADD0:    OR    A        ;CLEAR THE CARRY FLAG
  1678. ADD1:    LD    A,(CVAL)
  1679.     LD    B,A
  1680.     LD    A,(SUM)
  1681.     ADC    A,B
  1682.     LD    (SUM),A
  1683.     LD    A,(CVAL+1)
  1684.     LD    B,A
  1685.     LD    A,(SUM+1)
  1686.     ADC    A,B
  1687.     LD    (SUM+1),A
  1688.     LD    A,(CVAL+2)
  1689.     LD    B,A
  1690.     LD    A,(SUM+2)
  1691.     ADC    A,B
  1692.     LD    (SUM+2),A
  1693.     RET
  1694. ;
  1695. ; SUBTRACT CVAL FROM SUM
  1696. ; FORM 2'S COMPLEMENT THEN ADD
  1697. ;
  1698. SUBTR:    LD    A,(CVAL)
  1699.     XOR    0FFH
  1700.     LD    (CVAL),A
  1701.     LD    A,(CVAL+1)
  1702.     XOR    0FFH
  1703.     LD    (CVAL+1),A
  1704.     LD    A,(CVAL+2)
  1705.     AND    7FH        ;CLR I FLAG
  1706.     XOR    0FFH
  1707.     LD    (CVAL+2),A
  1708.     SCF
  1709.     JP    ADD1
  1710. ;
  1711. ; PRINT BALANCE/TOTAL
  1712. ; SEND 2'S COMPLEMENT IF NEGATIVE
  1713. ;
  1714. PRTOT:    CALL    TPRINT
  1715.     DEFB     ' TOTAL IS     ',0
  1716.     JP    TOTAL
  1717. PRBAL:    CALL    TPRINT
  1718.     DEFB 0DH,0AH,'BALANCE ',0
  1719. TOTAL:    LD    HL,SUM+2
  1720.     BIT    7,(HL)
  1721.     JR    Z,PBA2        ;NOT NEGATIVE
  1722.     LD    A,'-'
  1723.     CALL    OUTPUT
  1724. ;
  1725. ; FORM THE TWO'S COMPLEMENT OF SUM
  1726. ;
  1727.     LD    A,(SUM+2)
  1728.     XOR    0FFH
  1729.     LD    (SUM+2),A
  1730.     LD    A,(SUM+1)
  1731.     XOR    0FFH
  1732.     LD    (SUM+1),A
  1733.     LD    A,(SUM)
  1734.     XOR    0FFH
  1735.     ADD    A,1
  1736.     LD    (SUM),A
  1737.     LD    A,(SUM+1)
  1738.     ADC    A,0
  1739.     LD    (SUM+1),A
  1740.     LD    A,(SUM+2)
  1741.     ADC    A,0
  1742.     LD    (SUM+2),A
  1743. PBA2:    LD    A,'$'
  1744.     CALL    OUTPUT
  1745. ;
  1746. ; NOW MOVE SUM TO BINARY
  1747. ;
  1748.     LD    B,3        ;MOVE 3 BYTES
  1749.     LD    HL,SUM  
  1750.     LD    IX,BINARY  
  1751. PBA4:    LD    A,(HL)
  1752.     LD    (IX+0),A
  1753.     INC    HL
  1754.     INC    IX
  1755.     DJNZ    PBA4
  1756.     CALL    BTOD
  1757.     LD     A,1         ; WRITE INTO BUFIN BUT NOT USED
  1758.     LD    DE,BUFIN    ;SO PUTBIN KNOWS WHERE TO WRITE
  1759.     LD    (V),A
  1760.     LD    B,1
  1761.     LD    HL,BUFIN
  1762.     INC    HL
  1763.     CALL    PUTBIN
  1764.     LD    A,0
  1765.     LD    (V),A
  1766.     RET
  1767. ;
  1768. ; TRANSFER BAL AT GETCMDNING OF YEAR TO SUM
  1769. ;
  1770. YRSTRT:    LD    A,(BEGYR)
  1771.     LD    (SUM),A
  1772.     LD    A,(BEGYR+1)
  1773.     LD    (SUM+1),A
  1774.     LD    A,(BEGYR+2)
  1775.     LD    (SUM+2),A
  1776.     RET
  1777. ;
  1778. ; PACK CATEGORY FLAG
  1779. ;
  1780. PAKCAT:    LD    HL,CAT+15
  1781.     LD    BC,16         
  1782.     CPDR
  1783.     JP    PE,PKC5
  1784.     CALL    PRINT
  1785.     DEFB 0DH,0AH,'INVALID CATEGORY',0DH,0AH,0
  1786.     JP    GETCMD
  1787. PKC5:    LD    A,C
  1788.     SLA    A
  1789.     SLA    A
  1790.     SLA    A
  1791.     SLA    A
  1792.     RET
  1793. ;
  1794. ; UNPACK ON SCREEN IN PAGE LENGTHS
  1795. ;
  1796. ;
  1797. ; FIND NAME
  1798. ; RETURN A=NAME INDEX,CARRY=0 IF FOUND
  1799. ; RETURN A=0,CARRY=1 IF NOT FOUND
  1800. ;
  1801. FINDNA:    LD    A,(NIND)
  1802. FN2:    CP    0 
  1803.     JR    NZ,FN1
  1804. NONAME:    LD     A,0
  1805.     SCF
  1806.     RET
  1807. FN1:    LD    BC,0000H
  1808.     LD    C,A        ;BC NOW HAS NIND OFFSET
  1809.     DEC    C
  1810. FN7:    LD    IX,(NB1)
  1811.     ADD    IX,BC
  1812.     LD    A,(IX+0)
  1813.     LD    HL,CMNEM
  1814.     CP    (HL)
  1815.     JR    Z,FN3
  1816.     JR    NZ,FN5 ; NO MATCH
  1817. FN3:    LD    IX,(NB2)
  1818.     ADD    IX,BC
  1819.     LD    A,(IX+0)
  1820.     LD    HL,CMNEM+1
  1821.     CP    (HL)
  1822.     JR    Z,FN4
  1823.     JR    NZ,FN5 ; NO MATCH
  1824. FN4:    LD    IX,(NB3)
  1825.     ADD    IX,BC
  1826.     LD    A,(IX+0)
  1827.     LD    HL,CMNEM+2
  1828.     CP    (HL)
  1829.     JR    Z,FN6 ; FOUND IT
  1830.     JR    NZ,FN5 ; NO MATCH
  1831. FN5:    DEC    C
  1832.     JP    P,FN7
  1833.     INC    C
  1834.     JP    NONAME
  1835. FN6:    LD    A,C         ; NAME FOUND
  1836.     SCF
  1837.     CCF
  1838.     RET
  1839. ;
  1840. ; GET NAME INDEX EQUIV TO NAME
  1841. ; RETURN A=0,C=1 IF NOT FOUND
  1842. ;
  1843. NAMBYT:    LD    DE,0000H
  1844.     LD    A,(INPTR)
  1845.     LD    E,A
  1846.     LD    A,(INNUM)
  1847.     CP    E
  1848.     JR    NC,NBYT4
  1849.     JR    Z,NBYT4
  1850. NBYT2:    CALL    PRINT
  1851.     DEFB 0DH,0AH,'3 CHARACTER NAME NOT SPECIFIED',0DH,0AH,0
  1852.     JP    GETCMD
  1853. NBYT4:    LD    B,3
  1854.     LD    IY,CMNEM
  1855.     LD    HL,BUFIN
  1856.     ADD    HL,DE
  1857.     LD    A,(HL)        ;LOAD C'TH ENTRY IN BUFIN
  1858.     CP    BLANK
  1859.     JR    NZ,NBYT3
  1860.     LD    HL,INPTR
  1861.     INC    (HL)
  1862.     JR    NZ,NAMBYT ; IGNORE LEADING SPC'S
  1863. ; TRANSFER NAME TO CMNEM
  1864. NBYT1:    LD    A,(INPTR)
  1865.     INC    A
  1866.     LD    (INPTR),A
  1867.     LD    E,A        ;INCREMENT INPTR LOCAL VAR.
  1868.     LD    A,(INNUM)
  1869.     CP    E
  1870.     JR    Z,NBYT2 ; ERROR RETURN
  1871. NBYT3:    LD    HL,BUFIN
  1872.     ADD    HL,DE
  1873.     LD    A,(HL)
  1874.     LD    (IY+0),A
  1875.     INC    IY
  1876.     DJNZ    NBYT1
  1877.     LD    A,(INPTR)
  1878.     INC    A
  1879.     LD    (INPTR),A
  1880.     JP    FINDNA ; RETURN
  1881. ;
  1882. ; PUT NAME IN NAME FILE
  1883. ;
  1884. FIXNAM:    LD    A,(NIND)
  1885.     CP    0FFH
  1886.     JR    NZ,NAMADD
  1887. NBFULL:    CALL    PRINT
  1888.     DEFB 0DH,0AH,'NAME BUFFER FULL',0DH,0AH,0
  1889.     JP    GETCMD
  1890. NAMADD:    LD    BC,0000H
  1891.     LD    C,A        ;C IS NOW INDEX
  1892.     LD    A,(CMNEM)
  1893.     LD    IY,(NB1)
  1894.     ADD    IY,BC
  1895.     LD    (IY+0),A
  1896.     LD    A,(CMNEM+1)
  1897.     LD    IY,(NB2)
  1898.     ADD    IY,BC
  1899.     LD    (IY+0),A
  1900.     LD    A,(CMNEM+2)
  1901.     LD    IY,(NB3)
  1902.     ADD    IY,BC
  1903.     LD    (IY+0),A
  1904.     LD    A,(OFFST)
  1905.     LD    IY,(OL)
  1906.     ADD    IY,BC
  1907.     LD    (IY+0),A
  1908.     LD    A,(OFFST+1)
  1909.     LD    IY,(OH)
  1910.     ADD    IY,BC
  1911.     LD    (IY+0),A
  1912. NADD:    CALL    PRINT
  1913.     DEFB 0DH,0AH,'TYPE FULL CHECK NAME',0DH,0AH,0
  1914.     CALL    TABOFF
  1915.     LD    A,0
  1916.     LD    (INPTR),A
  1917.     LD    (INNUM),A     ; USE BUFIN TO GET NAME
  1918.     CALL    GETIN
  1919. ; COMPUTE ADR FOR NAME IN NTABLE
  1920.     OR    A        ;CLR CARRY
  1921.     LD    HL,(NTABLE)
  1922.     LD    DE,(OFFST)
  1923.     ADD    HL,DE
  1924.     LD    (NPTR),HL
  1925. ;
  1926. ;CHECK FOR NAME FILE FULL
  1927. ;
  1928.     LD    BC,0000H
  1929.     LD    A,(INNUM)
  1930.     LD    C,A
  1931.     LD    HL,(NPTR)
  1932.     ADD    HL,BC
  1933.     LD    (NTEMP),HL
  1934.     LD    HL,(TOP)
  1935.     LD    BC,(NTEMP)
  1936.     SBC    HL,BC
  1937.     JP    C,NBFULL
  1938. ; TRANSFER NAME FROM BUFIN TO NTABLE
  1939. NCONT:    LD    HL,BUFIN
  1940.     LD    DE,(NPTR)
  1941.     LD    BC,000H
  1942.     LD    A,(INNUM)
  1943.     LD    C,A
  1944.     LDIR
  1945. MOVDON:    LD    A,EOL ; MARK END OF LINE
  1946.     LD    (DE),A
  1947. ; UPDATE OFFST
  1948.     LD    A,(INNUM)
  1949.     INC    A
  1950.     LD    (INNUM),A    ;TO ACCOUNT FOR EOL
  1951.     LD    B,A
  1952.     LD    A,(OFFST)
  1953.     ADD    A,B
  1954.     LD    (OFFST),A
  1955.     JR    NC,MVD1
  1956.     LD    HL,OFFST+1
  1957.     INC    (HL)
  1958. MVD1:    LD    A,(NIND)
  1959.     INC    A
  1960.     LD    (NIND),A
  1961.     DEC    A
  1962.     RET
  1963. ;
  1964. ; PRINT THE NUMBER OF NAMES IN THE NAME FILE
  1965. ;
  1966. PRTNUM:    CALL    PRINT
  1967.     DEFB    '     ',0DH,0AH,0H
  1968.     LD    A,(NIND)
  1969.     LD    (BINARY),A
  1970.     CALL    BTOD
  1971.     LD    B,3
  1972.     LD    DE,BUFIN    ;PUTBIN WILL WRITE DATA
  1973.     CALL    PUTBIN        ;SOMEWHERE SO PUT IT IN BUFIN
  1974.     CALL    PRINT
  1975.     DEFB    ' NAMES IN THE NAME FILE (255 MAX.)',0DH,0AH,0H
  1976.     LD    A,0
  1977.     LD    (INPTR),A
  1978.     LD    (INNUM),A
  1979.     RET
  1980. ;
  1981. ; PRINT NAME MNEUMONIC
  1982. ; BC CONTAINS INDEX TO NAME FILE
  1983. ; DE POINTS TO INPUT LOCATION IN BUFIN
  1984. ;
  1985. GETNAM:    LD    B,0
  1986.     LD    A,BLANK
  1987.     CALL    OUTPUT
  1988.     LD    (DE),A
  1989.     INC    DE
  1990.     LD    HL,(NB1)
  1991.     ADD    HL,BC
  1992.     LD    A,(HL)
  1993.     CALL    OUTPUT
  1994.     LD    (DE),A
  1995.     INC    DE 
  1996.     LD    HL,(NB2)
  1997.     ADD    HL,BC
  1998.     LD    A,(HL)
  1999.     CALL    OUTPUT
  2000.     LD    (DE),A
  2001.     INC    DE
  2002.     LD    HL,(NB3)
  2003.     ADD    HL,BC
  2004.     LD    A,(HL)
  2005.     CALL    OUTPUT
  2006.     LD    (DE),A
  2007.     INC    DE
  2008.     LD    A,BLANK
  2009.     CALL    OUTPUT
  2010.     LD    (DE),A
  2011.     INC    DE
  2012.     CALL    OUTPUT
  2013.     LD    (DE),A
  2014.     INC    DE
  2015.     PUSH    DE        
  2016.     POP    HL        ;PUT DE IN HL
  2017.     LD    BC,BUFIN
  2018.     OR    A
  2019.     SBC    HL,BC
  2020.     LD    A,L
  2021.     LD    (INPTR),A
  2022.     RET
  2023. ;
  2024. ; TAB INPUT ON SPACE
  2025. ; RETURN TO GETIN IF SPACE
  2026. ; AFTER TABING TO NEXT FIELD
  2027. ;
  2028. TABNXT:    PUSH    AF
  2029.     CP    BLANK
  2030.     JR    NZ,TABRET
  2031.     LD    A,(TABFLG)
  2032.     OR    A
  2033.     JR    Z,TABRET
  2034.     LD    BC,0000H
  2035.     LD    A,(INPTR)
  2036.     LD    C,A
  2037.     LD    HL,TABS
  2038.     ADD    HL,BC
  2039.     LD    A,(HL)
  2040.     OR    A
  2041.     JR    NZ,TABRET
  2042. ; MOVE INPTR FORWARD TO NEXT TAB
  2043. ; INSERTING SPACES WHILE MOVING
  2044. TABMOV:    LD    IY,BUFIN
  2045.     LD    A,(INPTR)
  2046.     LD    C,A
  2047.     LD    A,BLANK
  2048.     ADD    IY,BC
  2049.     LD    (IY+0),A
  2050.     CALL    OUTPUT
  2051.     INC    C
  2052.     LD    A,C
  2053.     LD    (INPTR),A
  2054.     LD    HL,TABS
  2055.     ADD    HL,BC
  2056.     LD    A,(HL)
  2057.     OR    A
  2058.     JR    Z,TABMOV
  2059.     LD    A,(INNUM)
  2060.     CP    C
  2061.     JR    NC,TBM1
  2062.     POP    AF
  2063. TBM1:    POP    AF
  2064.     JP    GETIN
  2065. TABRET:    POP    AF        ; VALID INPUT
  2066.     RET
  2067. ;
  2068. TABS:    DEFB 0,0,0,0,0,0,1,0,0,1
  2069.     DEFB 0,0,0,1,0,0,0,0,0,0
  2070.     DEFB 0,1,1,1,0,0,1,0,0,0,0,0,0
  2071. ;
  2072. ; TURN TABBING ON AND OFF
  2073. ;
  2074. TABON:    LD    A,0FFH
  2075.     LD    (TABFLG),A
  2076.     RET
  2077. TABOFF:    LD    A,0
  2078.     LD    (TABFLG),A
  2079.     RET
  2080. ;
  2081. ; OUTPUT SELECTOR
  2082. ;
  2083. OUTPUT:    PUSH    AF
  2084.     LD    A,(OUTPOS)
  2085.     INC    A
  2086.     LD    (OUTPOS),A
  2087.     PUSH    HL
  2088.     LD    HL,PTRFLG
  2089.     BIT    7,(HL)
  2090.     POP    HL
  2091.     JR    Z,CONOU1
  2092.     POP    AF
  2093. ; DO NOT PASS FWDSP ON TO PRINTER
  2094. ;
  2095.     CP    FWDSP
  2096.     RET    Z
  2097. ;
  2098. PRTOUT:    PUSH    AF
  2099.     PUSH    BC
  2100.     PUSH    DE
  2101.     PUSH    HL
  2102.     LD    E,A
  2103.     LD    C,5
  2104.     CALL    BDOS
  2105.     POP    HL
  2106.     POP    DE
  2107.     POP    BC
  2108.     POP    AF
  2109.     RET
  2110. CONOU1:    POP    AF
  2111. CONOUT:    PUSH    AF
  2112.     PUSH    BC
  2113.     PUSH    DE
  2114.     PUSH    HL
  2115.     LD    E,A
  2116.     LD    C,2
  2117.     CALL    BDOS
  2118.     POP    HL
  2119.     POP    DE
  2120.     POP    BC
  2121.     POP    AF
  2122.     RET
  2123. ;
  2124. ; TOGGLE PRINTER ON
  2125. ;
  2126. TOGGLE:    LD    A,0FFH
  2127.     LD    (PTRFLG),A
  2128.     JP    CMD2
  2129. ;
  2130. ; ASSUME VALID FCB HAS BEEN SET UPON ENTRY OR MODIFIED
  2131. ; BY MOVNAM OR PUTNAM, SAVE CURRENT CHECK FILE ON DISK
  2132. ;
  2133. SAVCHK:    LD    A,(FCB)        ;SEE IF DEFAULT DRIVE
  2134.     CP    0H
  2135.     JR    NZ,S1        ;IF DRIVE SPECIFIED, IGNORE FOLLOWING
  2136.     LD    A,(DFTUNT)    ;ELSE GET THE DEFAULT UNIT
  2137.     INC    A
  2138.     LD    (FCB),A        ;AND PUT IT IN FCB
  2139. S1:    LD    DE,FCB        ;AMBIGUOUS NOT PERMITTED IN DELETE
  2140.     LD    C,DELFC
  2141.     CALL    BDOS
  2142.     LD    DE,FCB
  2143.     LD    C,MAKEFC
  2144.     CALL    BDOS
  2145.     INC    A
  2146.     JR    NZ,SAVCK1
  2147.     CALL    PRINT
  2148.     DEFB    0DH,0AH,'UNABLE TO SAVE CHECKS',0DH,0AH,0H
  2149.     POP    AF
  2150.     JP    GETCMD
  2151. SAVCK1:    LD    A,0H
  2152.     LD    (FCB+32),A
  2153.     CALL    BUG3        ;CORRECTS BUG ON 31 ENTRIES
  2154.     LD    BC,(FILSIZ)
  2155.     ADD    HL,BC        ;COMPUTES ADR. OF LAST CHECK DATA
  2156.     LD    (CHKEND),HL
  2157.     LD    HL,CKLOC
  2158. SLOOP:    LD    DE,DMA
  2159.     LD    BC,128
  2160.     LDIR            ;FILL BUFFER WITH 128 BYTES
  2161.     LD    DE,FCB
  2162.     LD    C,WRTFC
  2163.     PUSH    HL        ;IT GETS DESTROYED OTHERWISE
  2164.     CALL    BDOS        ;WRITE IT ON DISK
  2165.     POP    HL
  2166.     OR    A
  2167.     JR    Z,SAVOK
  2168.     CALL    PRINT
  2169.     DEFB    0DH,0AH,'WRITE ERROR SAVING CHECKS',0DH,0AH,0H
  2170.     POP    AF        ;CLEAN UP STACK
  2171.     JP    GETCMD
  2172. SAVOK:    PUSH    HL
  2173.     LD    BC,(CHKEND)
  2174.     OR    A
  2175.     SBC    HL,BC
  2176.     POP    HL
  2177.     JR    C,SLOOP        ;LOOP UNTIL HL>CHKEND
  2178.     LD    DE,FCB        ;ELSE CLOSE THE FILE & RETURN
  2179.     LD    C,CLSFC
  2180.     CALL    BDOS
  2181.     RET
  2182. ;
  2183. ; SAVE EXISTING NAME FILE ON THE DISK
  2184. ; ASSUME THAT NFCB HAS BEEN PREVIOUSLY UPDATED
  2185. ;
  2186. SAVNAM:    LD    A,(NFCB)    ;CHECK FOR AMBIGUOUS UNIT NUMBER
  2187.     CP    0H        ;IF NOT AMBIGUOUS THEN IGNORE
  2188.     JR    NZ,S2
  2189.     LD    A,(DFTUNT)    ;ELSE GET THE DEFAULT DRIVE NUMBER
  2190.     INC    A
  2191.     LD    (NFCB),A    ;AND PUT IT IN NFCB
  2192. S2:    LD    DE,NFCB
  2193.     LD    C,DELFC
  2194.     CALL    BDOS
  2195.     LD    DE,NFCB
  2196.     LD    C,MAKEFC
  2197.     CALL    BDOS
  2198.     INC    A
  2199.     JR    NZ,SAVNA1
  2200.     CALL    PRINT
  2201.     DEFB    0DH,0AH,'UNABLE TO SAVE NAMES',0DH,0AH,0H
  2202.     POP    AF        ;CLEAN UP STACK
  2203.     JP    GETCMD
  2204. SAVNA1:    LD    A,0H
  2205.     LD    (NFCB+32),A
  2206.     LD    HL,NTABL
  2207.     LD    BC,(OFFST)
  2208.     ADD    HL,BC        ;COMPUTES END OF NAME FILE
  2209.     LD    (NAMEND),HL
  2210.     LD    HL,NIND        ;HL POINTS TO START OF NAMES FILE
  2211. NLOOP:    LD    DE,DMA
  2212.     LD    BC,128
  2213.     LDIR            ;FILLS DMA BUFFER WITH 128 BYTES
  2214.     LD    DE,NFCB
  2215.     LD    C,WRTFC
  2216.     PUSH    HL        ;IT GETS DESTROYED
  2217.     CALL    BDOS        ;SAVES DMA BUFFER ON DISK
  2218.     POP    HL
  2219.     OR    A
  2220.     JR    Z,NSAVOK
  2221.     CALL    PRINT
  2222.     DEFB    0DH,0AH,'WRITE ERROR SAVING NAMES',0DH,0AH,0H
  2223.     POP    AF        ;CLEAN UP THE STACK
  2224.     JP    GETCMD
  2225. NSAVOK:    PUSH    HL
  2226.     LD    BC,(NAMEND)
  2227.     OR    A
  2228.     SBC    HL,BC
  2229.     POP    HL
  2230.     JR    C,NLOOP        ;LOOP UNTIL HL>NAMEND
  2231.     LD    DE,NFCB
  2232.     LD    C,CLSFC        ;NOW CLOSE NAME FILE
  2233.     CALL    BDOS
  2234.     RET
  2235. ;
  2236. ;
  2237. ; LOAD CHECK FILE WHOSE NAME IS IN FCB
  2238. ; ASSUME NAME IS VALID--SET BY MOVNAM OR PUTNAM
  2239. ; IF READ IS SUCCESSFUL, THEN CLOSE THE FILE AND
  2240. ; MAKE THE OLD COPY A BACK UP COPY
  2241. ;
  2242. LDCHK:    LD    DE,FCB
  2243.     LD    C,OPENFC
  2244.     CALL    BDOS
  2245.     INC    A        ;CHECK IF OPEN ERROR
  2246.     JR    NZ,LDC1
  2247.     CALL    PRINT
  2248.     DEFB    0DH,0AH,'CHECK NAME DOES NOT EXIST',0DH,0AH,0H
  2249.     POP    AF
  2250.     JP    GETCMD
  2251. LDC1:    LD    DE,CKLOC
  2252.     LD    A,0H
  2253.     LD    (FCB+32),A
  2254. LDC2:    PUSH    DE
  2255.     LD    DE,FCB
  2256.     LD    C,READFC
  2257.     CALL    BDOS
  2258.     POP    DE
  2259.     OR    A        ;RETURNS NZ IF END OF FILE
  2260.     JR    NZ,CLSCHK
  2261.     LD    HL,DMA
  2262.     LD    BC,128
  2263.     LDIR
  2264.     JP    LDC2
  2265. ;
  2266. CLSCHK:    LD    C,CLSFC
  2267.     LD    DE,FCB
  2268.     CALL    BDOS        ;CLOSE THE CHECK FILE
  2269.     RET
  2270. ;
  2271. ; LOAD NAME FILE WHOSE NAME IS IN NFCB
  2272. ; ASSUME NAME IS VALID AND SET BY MOVNAM OR PUTNAM
  2273. LDNAM:    LD    DE,NFCB
  2274.     LD    C,OPENFC
  2275.     CALL    BDOS
  2276.     INC    A        ;RETURNS FFH IF SUCCESSFUL
  2277.     JR    NZ,LDN1
  2278.     CALL    PRINT
  2279.     DEFB     0DH,0AH,'CAN NOT FIND NAME FILE',0DH,0AH,0H
  2280.     JP    GETCMD
  2281. LDN1:    LD    DE,NAMLOC
  2282.     LD    A,0H
  2283.     LD    (NFCB+32),A
  2284. LDN2:    PUSH    DE
  2285.     LD    DE,NFCB
  2286.     LD    C,READFC
  2287.     CALL    BDOS
  2288.     POP    DE
  2289.     OR    A        ;RETURNS NZ IF EOF
  2290.     JR    NZ,CLSNAM
  2291.     LD    HL,DMA
  2292.     LD    BC,128
  2293.     LDIR
  2294.     JP    LDN2
  2295. ;
  2296. CLSNAM:    LD    C,CLSFC
  2297.     LD    DE,NFCB
  2298.     CALL    BDOS        ;CLOSE THE NAME FILE
  2299.     RET
  2300. ;
  2301. ; PRINT/FIX NAME OF CHECK FILE
  2302. ; TO BE SAVED
  2303. ;
  2304. PRTNAM:    CALL    PRINT
  2305.     DEFB 0DH,0AH,'CHECKS AND NAMES TO BE SAVED AS',0DH,0AH,0
  2306.     LD    B,8
  2307.     LD    HL,FCB+1
  2308. PRTN1:    LD    A,(HL)
  2309.     CALL    OUTPUT
  2310.     INC    HL
  2311.     DJNZ    PRTN1
  2312.     LD    A,20H        ;SEND A SPACE
  2313.     CALL    OUTPUT
  2314.     LD    B,8
  2315.     LD    HL,NFCB+1
  2316. PRTN2:    LD    A,(HL)
  2317.     CALL    OUTPUT
  2318.     INC    HL
  2319.     DJNZ    PRTN2
  2320.     CALL    PRINT
  2321.     DEFB 0DH,0AH,'OK? (Y/N)',0
  2322.     CALL    INPUT
  2323.     PUSH    AF
  2324.     CALL    CRLF
  2325.     POP    AF
  2326.     CP    'Y'
  2327.     JR    NZ,PRN2
  2328.     RET
  2329. PRN2:    CP    'N'
  2330.     JR    NZ,PRTNAM
  2331.     CALL    PUTNAM
  2332.     RET
  2333. ;
  2334. ; GET NEW FILENAME
  2335. ;
  2336. PUTNAM:    CALL    PRINT
  2337.     DEFB 0DH,0AH,'NAME OF CHECK FILE :    ',0DH,0AH,0
  2338.     CALL    GETINP
  2339.     CALL    FXFCB
  2340.     CALL    FXNFCB        ;CLEAR THE FILE CONTROL BLOCKS
  2341.     LD    HL,BUFIN
  2342. PTN1:    LD    A,(HL)
  2343.     INC    HL
  2344.     CP    20H
  2345.     JR    Z,PTN1        ;READ FORWARD TO FIRST CHAR
  2346.     LD    A,(HL)        ;IS THE NEXT CHAR A ':'
  2347.     CP    ':'
  2348.     DEC    HL        ;RESET HL TO FIRST CHAR
  2349.     JR    NZ,PTN2
  2350.     CALL    MAKFNO        ;IF SO MAKE THE DISK NUMBER
  2351.     LD    (FCB),A        ;AND PUT IT INTO THE FCB
  2352. PTN2:    LD    DE,BUFIN    ;NOW LETS COMPUTE INPTR
  2353.     PUSH    HL
  2354.     OR    A
  2355.     SBC    HL,DE        ; HAS VALUE OF INPTR
  2356.     LD    C,L
  2357.     POP    HL
  2358.     LD    DE,FCB+1    ;DE POINTS TO FCB NAME
  2359. ;
  2360. ; NOW MOVE THE NAME POINTED TO BY HL TO FCB UNTIL A SPACE
  2361. ; IS ENCOUNTERED OR UNTIL INPTR EQUALS INNUN
  2362. ;
  2363. PTN3:    LD    A,(INNUM)
  2364.     CP    C
  2365.     JP    Z,COPYN2    ;IF EQUAL WERE DONE 
  2366.     LD    A,(HL)
  2367.     CP    20H        ;IS IT DONE?
  2368.     JR    Z,PTN4
  2369.     CP    '.'
  2370.     JR    Z,PTN5
  2371.     LD    (DE),A        ;ELSE MOVE THE CHARACTER
  2372.     INC    DE
  2373.     INC    HL
  2374.     INC    C
  2375.     JP    PTN3
  2376. ;
  2377. PTN5:    CALL    PRINT
  2378.     DEFB    0DH,0AH,'DO NOT INCLUDE FILE TYPE',0DH,0AH,0H
  2379.     JP    PUTNAM
  2380. ;
  2381. ; CHECK NAME SUCCESSFULLY TRANSFERRED , NOW CHECK FOR NAME FILE
  2382. ;
  2383. PTN4:    LD    A,(HL)
  2384.     INC    HL
  2385.     INC    C
  2386.     CP    20H
  2387.     JR    Z,PTN4        ;READ FORWARD TO FIRST NON BLANK CHAR.
  2388.     LD    A,(INNUM)
  2389.     CP    C
  2390.     JP    Z,DONPTN
  2391.     LD    A,(HL)        ;IS THE NEXT CHAR A ':'
  2392.     DEC    HL
  2393.     CP    ':'
  2394.     JR    NZ,PTN6        ;IF NOT TRANSFER NAME TO NFCB
  2395.     CALL    MAKFNO
  2396.     LD    (NFCB),A    ;PUT DISK NUMBER IN NFCB
  2397. PTN6:    LD    DE,BUFIN
  2398.     PUSH    HL
  2399.     OR    A
  2400.     SBC    HL,DE
  2401.     LD    C,L
  2402.     POP    HL
  2403.     LD    DE,NFCB+1
  2404. ;
  2405. ; NOW MOVE THE NAME POINTED TO BY HL TO NFCB UNTIL A SPACE
  2406. ; IS ENCOUNTERED OR UNTIL INPTR EQUALS INNUN
  2407. ;
  2408. PTN7:    LD    A,(INNUM)
  2409.     CP    C
  2410.     JP    Z,DONPTN
  2411.     LD    A,(HL)
  2412.     CP    20H        ;NAME DONE IF TRAILING SPACE
  2413.     JP    Z,DONPTN
  2414.     CP    '.'
  2415.     JP    Z,DONPTN    ;IGNORE ANY NAME TYPE GIVEN
  2416.     LD    (DE),A        ;ELSE MOVE THE CHARACTER
  2417.     INC    DE
  2418.     INC    HL
  2419.     INC    C
  2420.     JP    PTN7
  2421. ;
  2422. ; IF ONLY ONE NAME IS GIVEN, THEN ASSUME THAT NAME FILE
  2423. ; IS THE SAME AS THE CHECK FILE
  2424. ;
  2425. COPYN2:    LD    HL,FCB
  2426.     LD    DE,NFCB
  2427.     LD    BC,9
  2428.     LDIR
  2429. ;
  2430. ; NOW ALL NAMES HAVE BEEN MOVED, FIX UP THE TYPES AND
  2431. ; RETURN FROM THIS SUBROUTINE CALL
  2432. ;
  2433. DONPTN:    CALL    FIXTYP
  2434.     RET
  2435. ;
  2436. ; GET THE DISK UNIT NUMBER AND CONVERT IT TO A BINARY
  2437. ; NUMBER AND RETURN IT IN THE ACC.  
  2438. ; SET HL TO THE FIRST VALID CHARACTER IN THE NAME
  2439. ; BEFORE RETURNING
  2440. ;
  2441. MAKFNO:    LD    A,(HL)        ;HL POINTS TO UNIT NUMBER ASCII CHAR
  2442.     INC    HL
  2443.     INC    HL        ;LEAVE WITH HL AT NXT CHAR AFTER ':'
  2444.     SUB    40H
  2445.     CP    1
  2446.     RET    Z
  2447.     CP    2
  2448.     RET    Z        ;FOR NOW ONLY 2 DRIVES
  2449.     CALL    PRINT
  2450.     DEFB    0DH,0AH,'INVALID DRIVE SPECIFIED',0DH,0AH,0
  2451.     POP    AF        ;CLEAN UP THE STACK
  2452.     JP    PUTNAM        ;ASK IT AGAIN
  2453. ;
  2454. ; TEXT PRINTER ON SELECTED OUTPUT DEVICE
  2455. ;
  2456. TPRINT:    POP    HL    ;HL POINTS TO TEXT TO BE PRINTED
  2457. PRI10:    LD    A,(HL)
  2458.     OR    A
  2459.     JR    Z,PRI20
  2460.     CALL    OUTPUT
  2461.     INC    HL
  2462.     JP    PRI10
  2463. PRI20:    INC    HL
  2464.     PUSH    HL
  2465.     RET
  2466. ;
  2467. ;
  2468. ; TEXT PRINTER ON CONSOLE ONLY
  2469. ;
  2470. PRINT:    POP    HL    ;HL POINTS TO TEXT TO BE PRINTED
  2471. PR10:    LD    A,(HL)
  2472.     OR    A
  2473.     JR    Z,PR20
  2474.     PUSH    BC
  2475.     PUSH    DE
  2476.     PUSH    HL
  2477.     LD    C,2
  2478.     LD    E,A
  2479.     CALL    BDOS
  2480.     POP    HL
  2481.     POP    DE
  2482.     POP    BC
  2483.     INC    HL
  2484.     JP    PR10
  2485. PR20:    INC    HL
  2486.     PUSH    HL
  2487.     RET
  2488. ;
  2489. ; CHECK KEYBOARD INPUT--IF CANCEL THEN JUMP TO COMMAND MODE
  2490. ; ELSE IGNORE THE INPUT AND RETURN----DESTROYS AF
  2491. ;
  2492. KBDTST:    PUSH    BC        ;ADDED ROUTINE IN REV 1.4
  2493.     PUSH    DE
  2494.     PUSH    HL
  2495.     LD     C,11        ;GET CONSOLE STATUS
  2496.     CALL    BDOS
  2497.     OR    A
  2498.     POP    HL
  2499.     POP    DE
  2500.     POP    BC
  2501.     RET    Z        
  2502.     CALL    SYSIN        ; READ KEYBOARD
  2503.     CP    CANCEL
  2504.     JP    Z,GETCMD
  2505.     RET
  2506. ;
  2507. ;
  2508. ; PRINT INCOME TAX DEDUCTIBLE CHECKS
  2509. ;
  2510. ITAX:    CALL    CRLF
  2511.     LD    A,'C'
  2512.     LD    (CMD),A
  2513.     CALL    HEAD
  2514.     CALL    ZSUM
  2515.     CALL    GOTOP
  2516.     CALL    END
  2517. ITAX1:    CALL    GETNXT
  2518.     JR    C,TAXDON
  2519.     LD    HL,CVAL+2
  2520.     BIT    7,(HL)        ;TEST I FLAG
  2521.     JP    Z,ITAX1
  2522.     LD    HL,DAY
  2523.     BIT    7,(HL)
  2524.     JR    NZ,ITAX1    ;IGNORE DEPOSITS
  2525.     CALL    UNPACK
  2526.     CALL    CRLF
  2527.     CALL    ADD
  2528.     JP    ITAX1
  2529. TAXDON:    CALL    PRTOT
  2530.     JP    GETCMD
  2531. ;
  2532. ; PRINT WIFES / RETURNED CHECKS
  2533. ;
  2534. WSRC:    LD    A,080H
  2535.     JP    RC1
  2536. RSRC:    LD    A,040H
  2537. RC1:    LD    (MASK),A
  2538.     LD    A,'C'
  2539.     LD    (CMD),A
  2540.     CALL    HEAD
  2541.     CALL    CRLF
  2542.     CALL    ZSUM
  2543.     CALL    GOTOP
  2544.     CALL    END
  2545. WRLOOP:    CALL    GETNXT
  2546.     JP    C,WRDONE
  2547.     LD    HL,DAY
  2548.     BIT    7,(HL)        ;IGNORE DEPOSITS
  2549.     JR    NZ,WRLOOP
  2550.     LD    A,(CNUM+1)
  2551.     LD    B,A
  2552.     LD    A,(MASK)
  2553.     AND    B
  2554.     JR    Z,WRLOOP
  2555.     CALL    UNPACK
  2556.     CALL    CRLF
  2557.     CALL    ADD
  2558.     JP    WRLOOP
  2559. WRDONE:    CALL    PRTOT
  2560.     JP    GETCMD
  2561. ;
  2562. ;************************************************************
  2563. ;
  2564. ;    PROGRAM STARTS HERE
  2565. ;
  2566. ;************************************************************
  2567. ;
  2568. START1:    LD    HL,000H
  2569.     ADD    HL,SP
  2570.     LD    (OLDSP),HL
  2571.     LD    SP,STACK+128    ;CREATE LOCAL STACK
  2572.     XOR    A
  2573.     LD    (PTRFLG),A    ;START WITH PRINTER OFF
  2574. ;
  2575. ; IN ORDER FOR REV 1.4 TO WORK, BIOS LOCATION FOR SYSTEM INPUT
  2576. ; WILL BE COMPUTED AND STORED IN INPADR FOR INPUT WITHOUT ECHO
  2577. ;
  2578.     LD    HL,(1)        ;GET ADDRESS OF BIOS+3
  2579.     LD    BC,6        ;INPUT ADDRESS IS 6 BYTES HIGHER
  2580.     ADD    HL,BC
  2581.     LD    (INPADR+1),HL    ;STORE ADDRESS THERE
  2582. ;
  2583. ; NOW PUT NOP'S IN 100-103H SO WARM START CAN BE DONE AT 100H
  2584. ;
  2585.     LD    A,0        ;NOP INSTRUCTION
  2586.     LD    (100H),A
  2587.     LD    (101H),A
  2588.     LD    (102H),A
  2589. ;
  2590. ; SIGN ON MESSAGE
  2591. ;
  2592.     LD    A,CLRSCR
  2593.     CALL    OUTPUT
  2594.     CALL    PRINT
  2595.     DEFB    'CHECKING PROGRAM',0DH,0AH
  2596.     DEFB    'RALPH SHERMAN',0DH,0AH
  2597.     DEFB    '15 HYDAWAY DR',0DH,0AH
  2598.     DEFB    'FOREST,VA 24551',0DH,0AH
  2599.     DEFB    'REVISION 1/2/83',0DH,0AH,0H
  2600. ;
  2601. ;
  2602. ; MOVE INITIAL CHECK DATA TO START OF CHECK FILE
  2603. ;
  2604.     LD    HL,CKTBL
  2605.     LD    DE,CKLOC
  2606.     LD    BC,CKSIZ
  2607.     LDIR
  2608. ;
  2609. ; INITIALIZE NAME FILE
  2610. ;
  2611.     LD    A,0
  2612.     LD    (NAMLOC),A
  2613.     LD    (NAMLOC+1),A
  2614.     LD    (NAMLOC+2),A
  2615. ;
  2616. ; CHECK IF FILE NAME FOR CHECKS IS IN THE FCB
  2617. ;
  2618.     LD    A,(FCB+1)    ;CHECK IF THERE IS A NAME
  2619.     CP    20H        ;IF SPACE THEN NO NAME
  2620.     JR    Z,ST10
  2621. ;
  2622. ; NOW THAT A NAME IS PRESENT, LOAD THE CHECK AND NAME FILES
  2623. ;
  2624.     CALL    MOVNAM        ;MOVE NAMES IN FCS
  2625.     CALL    LDCHK
  2626.     CALL    LDNAM
  2627.     JP    GETCMD
  2628. ;
  2629. ST10:    CALL    PRINT
  2630.     DEFB     'CHECK FILE IS CLEAR',0DH,0AH,0
  2631.     JP    GETCMD
  2632. ;
  2633. ; FXNFCB INITIALIZES THE NAME FILE CONTROL BLOCK
  2634. ; IT FILLS NFCB WITH 32 ZEROES AND THE FILE NAME WITH SPACES
  2635. ;
  2636. FXNFCB:    LD    HL,NFCB
  2637.     LD    A,0
  2638.     LD    B,36
  2639. FXNF1:    LD    (HL),A
  2640.     INC    HL
  2641.     DJNZ    FXNF1        ;PUT 0'S IN NFCB
  2642.     LD    HL,NFCB+1
  2643.     LD    A,20H
  2644.     LD    B,11
  2645. FXNF2:    LD    (HL),A
  2646.     INC    HL
  2647.     DJNZ    FXNF2        ;PUT SPACES IN NAME AREA
  2648.     RET
  2649. ;
  2650. ; FXFCB INITIALIZES THE CHECK FILE CONTROL BLOCK
  2651. ; IT FILLS FCB WITH 32 ZEROES AND THE FILE NAME WITH SPACES
  2652. ;
  2653. FXFCB:    LD    HL,FCB
  2654.     LD    A,0
  2655.     LD    B,36
  2656. FXFC1:    LD    (HL),A
  2657.     INC    HL
  2658.     DJNZ    FXFC1        ;PUTS 0'S IN FCB
  2659.     LD    HL,FCB+1
  2660.     LD    A,20H
  2661.     LD    B,11
  2662. FXFC2:    LD    (HL),A
  2663.     INC    HL
  2664.     DJNZ    FXFC2        ;PUT SPACES IN NAME AREA
  2665.     RET
  2666. ;
  2667. ; MOVNAM READS THE FCB AND FIXES UP THE FILE TYPES  
  2668. ; IF A FILE IS SPECIFIED FOR THE NAME FILE, IT MOVES FCB2 TO NFCB
  2669. ;
  2670. MOVNAM:    LD    A,(FCB2+1)
  2671.     CP    20H        ;WAS A NAME FILE SPECIFIED?
  2672.     JR    Z,MOVN4        ;NO NAME, COPY CHECK FILE NAME
  2673.     CALL    FXNFCB
  2674.     LD    HL,FCB2
  2675.     LD    DE,NFCB
  2676.     LD    BC,15
  2677.     LDIR            ;ELSE COPY NAME SPECIFIED
  2678.     JR    FIXTYP
  2679. MOVN4:    CALL    FXNFCB
  2680.     LD    HL,FCB        ;NAME FILE IS SAME AS CHK FILE
  2681.     LD    DE,NFCB
  2682.     LD    BC,15
  2683.     LDIR
  2684. ;
  2685. ; FIXTYP SETS THE FILE TYPES FOR THE CHECK AND NAME FILES
  2686. ;
  2687. FIXTYP:    LD    HL,NAM
  2688.     LD    DE,NFCB+9
  2689.     LD    BC,3
  2690.     LDIR            ;SET .NAM AS NAME FILE TYPE
  2691.     LD    HL,CHK
  2692.     LD    DE,FCB+9
  2693.     LD    BC,3
  2694.     LDIR            ;SET .CHK AS CHECK FILE TYPE
  2695.     RET
  2696. ;
  2697. ;FIX NAME ENTRY
  2698. ;
  2699. NAMFIX:    CALL    NAMPTR ; PTR IN MASK
  2700. NF2:    CALL    PRINT
  2701.     DEFB 0DH,0AH,'FIX MNEMONIC (Y/N)',0
  2702.     CALL    INPUT
  2703.     CP     'N'
  2704.     JR    Z,NF1
  2705.     CP     'Y'
  2706.     JR    NZ,NF2
  2707. NF5:    CALL    PRINT
  2708.     DEFB 0DH,0AH,'TYPE NEW MNEMONIC',0DH,0AH,0
  2709.     CALL    GETINP
  2710.     LD    A,(INNUM)
  2711.     CP     3
  2712.     JR    NC,NF6
  2713.     CALL    PRINT
  2714.     DEFB CLRSCR,'TYPE 3 CHAR MNEMONIC',0DH,0AH,0
  2715.     JP    NF5
  2716. NF6:    LD    HL,BUFIN
  2717.     LD    BC,0000H
  2718.     LD    A,(MASK)
  2719.     LD    C,A
  2720. NF3:    LD    A,(HL)
  2721.     CP    BLANK
  2722.     JR    NZ,NF4
  2723.     INC    HL
  2724.     JP    NF3
  2725. NF4:    LD    IX,(NB1)
  2726.     ADD    IX,BC
  2727.     LD    (IX+0),A
  2728.     INC    HL
  2729.     LD    A,(HL)
  2730.     LD    IX,(NB2)
  2731.     ADD    IX,BC
  2732.     LD    (IX+0),A
  2733.     INC    HL
  2734.     LD    A,(HL)
  2735.     LD    IX,(NB3)
  2736.     ADD    IX,BC
  2737.     LD    (IX+0),A
  2738. NF1:    CALL    PRINT
  2739.     DEFB 0DH,0AH,'FIX FULL NAME (Y/N)',0
  2740.     CALL    INPUT
  2741.     CP    'N'
  2742.     JR    Z,NFRTS
  2743.     CP    'Y'
  2744.     JR    NZ,NF1
  2745.     LD    BC,0000H
  2746.     LD    A,(MASK)
  2747.     LD    C,A
  2748.     LD    IX,(OL)
  2749.     ADD    IX,BC
  2750.     LD    A,(OFFST)
  2751.     LD    (IX+0),A
  2752.     LD    IX,(OH)
  2753.     ADD    IX,BC
  2754.     LD    A,(OFFST+1)
  2755.     LD    (IX+0),A
  2756.     CALL    NADD
  2757.     LD    A,(NIND)
  2758.     DEC    A
  2759.     LD    (NIND),A
  2760. NFRTS:    JP    GETCMD
  2761. ;
  2762. ; PRINT MONTHLY BALANCE SHEET
  2763. ;
  2764. TALPR:    CALL    GETMO
  2765.     LD    A,(PTRFLG)
  2766.     OR    A
  2767.     JR    Z,TP1
  2768.     LD    A,FORMFD
  2769.     CALL    PRTOUT
  2770. TP1:    CALL    CRLF 
  2771.     CALL    CRLF
  2772.     LD    B,25
  2773.     CALL    TABIT
  2774.     CALL    TPRINT
  2775.     DEFB 'BALANCE SHEET ',0
  2776.     CALL    CRLF
  2777.     CALL    CRLF
  2778. ;
  2779. ; COMPUTE BAL AT MONTH START
  2780. ;
  2781.     CALL    YRSTRT
  2782.     CALL    GOTOP
  2783.     CALL    END
  2784. TL1:    CALL    GETNXT
  2785.     JR    C,TDON1
  2786.     CALL    MTEST
  2787.     JR    Z,TL1
  2788.     JR    C,TL1        ;ONLY ADD UP IF < MONTH TALLIED
  2789.     LD    HL,DAY
  2790.     BIT    7,(HL)
  2791.     JR    NZ,TL2
  2792.     CALL    SUBTR
  2793.     JP    TL1
  2794. TL2:    CALL    ADD
  2795.     JP    TL1
  2796. TDON1:    CALL    TPRINT
  2797.     DEFB 'STARTING BALANCE',0
  2798.     LD    B,68
  2799.     CALL    TABIT
  2800.     CALL    BUG2
  2801.     CALL    CRLF
  2802.     CALL    CRLF
  2803.     CALL    TPRINT
  2804.     DEFB 'DEPOSITS',0
  2805.     CALL    CRLF
  2806.     CALL    CRLF
  2807.     CALL    THEAD
  2808.     CALL    CRLF
  2809.     CALL    GOTOP
  2810.     CALL    END
  2811.     LD    A,80H
  2812.     LD    (MASK),A
  2813. TL3:    CALL    GETNXT
  2814.     JR    C,TL4
  2815.     CALL    MTEST
  2816.     JR    NZ,TL3
  2817.     LD    A,(DAY)
  2818.     AND    0C0H
  2819.     LD    B,A
  2820.     LD    A,(MASK)
  2821.     CP    B
  2822.     JR    NZ,TL3
  2823.     LD    A,0
  2824.     LD    (OUTPOS),A
  2825.     CALL    PRCHK
  2826.     LD    B,67
  2827.     CALL    TABIT
  2828.     CALL    PRVAL
  2829.     CALL    CRLF
  2830.     CALL    ADD
  2831.     JP    TL3
  2832. TL4:    CALL    CRLF
  2833.     LD    B,70
  2834.     CALL    TABIT
  2835.     CALL    TPRINT
  2836.     DEFB '----------',0
  2837.     CALL    CRLF
  2838.     CALL    TPRINT
  2839.     DEFB 'TOTAL ',0
  2840.     LD    B,68
  2841.     CALL    TABIT
  2842.     CALL    TOTAL
  2843.     CALL    SAVVAL
  2844.     CALL    ZSUM
  2845.     CALL    CRLF
  2846.     CALL    TPRINT
  2847.     DEFB 'WITHDRAWALS',0
  2848.     CALL    CRLF
  2849.     CALL    CRLF
  2850.     CALL    THEAD
  2851.     CALL    CRLF
  2852.     LD    A,040H
  2853.     LD    (MASK),A
  2854. TL7:    CALL    GOTOP
  2855. TL5:    CALL    GETNXT
  2856.     JR    C,TL6
  2857.     CALL    MTEST
  2858.     JR    NZ,TL5
  2859.     LD    A,(DAY)
  2860.     AND    0C0H
  2861.     LD    B,A
  2862.     LD    A,(MASK)
  2863.     CP    B
  2864.     JR    NZ,TL5
  2865.     CALL    PRCHK
  2866.     LD    B,60
  2867.     CALL    TABIT
  2868.     CALL    PRVAL
  2869.     CALL    CRLF
  2870.     CALL    SUBTR
  2871.     JP    TL5
  2872. TL6:    LD    A,(MASK)
  2873.     OR    A
  2874.     JR    Z,TL8
  2875.     CALL    CRLF
  2876.     CALL    TPRINT
  2877.     DEFB 'CHECKS',0
  2878.     CALL    CRLF
  2879.     CALL    CRLF
  2880.     CALL    THEAD
  2881.     CALL    CRLF
  2882.     CALL    CRLF
  2883.     LD    A,0
  2884.     LD    (MASK),A
  2885.     JP    TL7
  2886. TL8:    CALL    CRLF
  2887.     LD    B,60
  2888.     CALL    TABIT
  2889.     CALL    TPRINT
  2890.     DEFB '----------',0
  2891.     CALL    CRLF
  2892.     CALL    TPRINT
  2893.     DEFB 'TOTAL',0
  2894.     LD    B,59
  2895.     CALL    TABIT
  2896.     CALL    TOTAL
  2897.     CALL    CRLF
  2898.     CALL    CRLF
  2899.     CALL    TPRINT
  2900.     DEFB 'PERIOD ENDING BALANCE',0
  2901.     LD    B,68
  2902.     CALL    TABIT
  2903.     LD    B,3
  2904.     LD    HL,SUM
  2905.     LD    IX,CVAL
  2906.     LD    IY,STEMP
  2907. TL9:    LD    A,(HL)
  2908.     LD    (IX+0),A
  2909.     LD    A,(IY+0)
  2910.     LD    (HL),A
  2911.     INC    HL
  2912.     INC    IX
  2913.     INC    IY
  2914.     DJNZ    TL9
  2915.     CALL    SUBTR
  2916.     CALL    TOTAL
  2917.     CALL    CRLF
  2918.     LD    A,(PTRFLG)
  2919.     OR    A
  2920.     JR    Z,TP2
  2921.     LD    A,FORMFD
  2922.     CALL    PRTOUT
  2923. TP2:    LD    A,0
  2924.     LD    (PTRFLG),A
  2925.     RET
  2926. ;
  2927. ; TEST CHECK MONTH
  2928. ;
  2929. MTEST:    LD    A,(OUTMO)
  2930.     OR    A
  2931.     JR    NZ,MT1
  2932.     RET
  2933. MT1:    LD    A,(MONTH)
  2934.     AND    0FH
  2935.     LD    B,A
  2936.     LD    A,(OUTMO)
  2937.     CP    B
  2938.     RET
  2939. ;
  2940. ; TAB TO PRINTER POS AT B
  2941. ;
  2942. TABIT:    LD    A,(OUTPOS)
  2943.     CP    B
  2944.     JR    Z,TABRTS
  2945.     LD    A,BLANK
  2946.     CALL    OUTPUT
  2947.     JR    NZ,TABIT
  2948. TABRTS:    RET
  2949. OUTPOS:    DEFB 0
  2950. ;
  2951. ; GET MONTH ARG FOR PRNT
  2952. ; IF MONTH ARE PRESENT, PUT IN OUTMO
  2953. ; DEFAULT IS MONTH 0
  2954. ;
  2955. GETMO:    CALL    PRINT
  2956.     DEFB  13,10,'WHAT MONTH ?',0
  2957.     CALL    GETINP
  2958.     CALL    CRLF
  2959.     LD    B,0H
  2960.     LD    HL,BUFIN
  2961. ;
  2962. ; FIXED BUG HERE ON GETMO...BLANK ENTRY (CARRIAGE RETURN) IS 0
  2963. ;
  2964.     LD    A,(INNUM)
  2965.     OR    A
  2966.     JR    NZ,TAL3
  2967.     LD    A,30H
  2968.     LD    (HL),A
  2969.     LD    A,1H
  2970.     LD    (INNUM),A
  2971.     NOP
  2972.     NOP
  2973.     NOP
  2974.     NOP
  2975.     NOP
  2976.     NOP
  2977.     NOP
  2978. TAL3:    LD    A,0H
  2979.     LD    (INPTR),A
  2980.     CALL    GETDEC
  2981.     CALL    DTOB
  2982.     LD    A,(BINARY)
  2983.     AND    0FH
  2984.     LD    (OUTMO),A
  2985.     RET
  2986. ;
  2987. ; PRINT CHECK ENTRY FOR TALLY
  2988. ; IF TALLY IS ON SCREEN, SLOW THE PROCESS DOWN
  2989. ; ELSE LET IT RIP.
  2990. ;
  2991. PRCHK:    CALL    KBDTST        ;ADDED REV 1.4
  2992.     CALL    SLOW
  2993.     LD    B,0
  2994.     LD    HL,BUFFER
  2995.     LD    IX,BINARY
  2996.     LD    A,0
  2997.     LD    (INPTR),A
  2998.     LD    A,(HL)
  2999.     LD    (IX+0),A
  3000.     INC    B
  3001.     INC    HL
  3002.     INC    IX
  3003.     LD    A,(HL)
  3004.     AND    03FH
  3005.     LD    (IX+0),A
  3006.     LD    A,0
  3007.     INC    B
  3008.     INC    HL
  3009.     INC    IX
  3010.     LD    (IX+0),A
  3011.     CALL    BTOD
  3012.     LD    B,4
  3013.     CALL    BUG1
  3014. ;
  3015. ;PRINT MONTH
  3016. ;
  3017.     LD    A,(MONTH)
  3018.     AND    0FH
  3019.     LD    (BINARY),A
  3020.     CALL    BTOD
  3021.     LD    B,4
  3022.     CALL    PUTBIN
  3023. ;
  3024. ;PRINT DAY
  3025. ;
  3026.     LD    A,(DAY)
  3027.     AND    03FH
  3028.     LD    (BINARY),A
  3029.     CALL    BTOD
  3030.     LD    B,5
  3031.     CALL    PUTBIN
  3032.     LD    A,BLANK
  3033.     CALL    OUTPUT
  3034.     CALL    OUTPUT
  3035.     CALL    UPFLG
  3036.     LD    B,22
  3037.     CALL    TABIT
  3038.     LD    BC,0000H
  3039.     LD    A,(NAME)    ;IS OFFSET TO NAME ADDRESS
  3040.     LD    C,A
  3041.     CALL    PRNAM
  3042.     RET
  3043. ; PRINT CHECK VALUE
  3044. ;
  3045. PRVAL:    LD    HL,CVAL        ;MOVE 3 BYTES FROM CVAL TO BINARY
  3046.     LD    DE,BINARY
  3047.     LD    BC,03H
  3048.     LDIR
  3049.     LD    A,(BINARY+2)
  3050.     AND    07FH
  3051.     LD    (BINARY+2),A
  3052.     CALL    BTOD
  3053.     LD    B,1
  3054.     LD    A,B
  3055.     LD    (V),A
  3056.     CALL    PUTBIN
  3057.     LD    A,0
  3058.     LD    (V),A
  3059.     RET
  3060. ;
  3061. ; SLOW DOWN OUTPUT PRINTING WHEN ON CONSOLE
  3062. ;
  3063. SLOW:    LD    A,(PTRFLG)
  3064.     OR    A
  3065.     RET    NZ
  3066.     LD    A,50         ;SET UP FOR 50 MS. DELAY
  3067. DELAY:    LD    C,249
  3068. DLY1:    DEC    C
  3069.     JR     NZ,DLY1
  3070.     DEC    A
  3071.     JR    NZ,DELAY
  3072.     RET
  3073. ;
  3074. THEAD:    CALL    TPRINT
  3075.     DEFB '    #  MO DA  FLG   NAME',0
  3076.     JP    CRLF
  3077. ;
  3078. ; MOVE 3 BYTES FROM SUM TO STEMP
  3079. ;
  3080. SAVVAL:    LD    A,(SUM)
  3081.     LD    (STEMP),A
  3082.     LD    A,(SUM+1)
  3083.     LD    (STEMP+1),A
  3084.     LD    A,(SUM+2)
  3085.     LD    (STEMP+2),A
  3086.     RET
  3087. ;
  3088. ; GET FILE NAME
  3089. ;
  3090. FILNAM:    RET        ;FOR NOW
  3091. ;
  3092. STEMP:    DEFS    3
  3093.  
  3094.  
  3095.  
  3096.  
  3097.  
  3098. ;
  3099. ; GENERAL PURPOSE SUBROUTINES
  3100. ;
  3101. SYSIN:    PUSH    BC
  3102.     PUSH    DE
  3103.     PUSH    HL
  3104.     LD    C,1
  3105.     CALL    BDOS
  3106.     POP    HL
  3107.     POP    DE
  3108.     POP    BC
  3109.     RET
  3110. ;
  3111. ; MAP LOWER CASE TO UPPER CASE
  3112. ;    
  3113. CASE:    CP    60H
  3114.     JR    C,CAS10
  3115.     AND    07FH
  3116.     SUB    020H
  3117. CAS10:    RET
  3118. ;
  3119. ; GET AN INPUT WITHOUT ECHO
  3120. ;
  3121. SYSINP:    PUSH    BC
  3122.     PUSH    DE
  3123.     PUSH    HL
  3124. INPADR:    CALL    CONIN        ;BIOS CONSOLE INPUT ADDRESS
  3125. ;                ;COMPUTED DURING START
  3126.     POP    HL
  3127.     POP    DE
  3128.     POP    BC
  3129.     RET
  3130. CONIN    EQU    INPADR+1    ;DUMMY ADDRESS
  3131. ;
  3132. ; VARIABLES
  3133. ;
  3134. CTRLC    EQU    3
  3135. NEWLIN    EQU    13
  3136. LINEFD    EQU    10
  3137. BLANK    EQU    32
  3138. EOL     EQU    0FFH
  3139. CPTR:    DEFS    2 ; CHECK FILE POINTER
  3140. SUM:    DEFS    3 
  3141. ADDER:    DEFS    3
  3142. X0:    DEFS    2 ; X TEMP
  3143. BUFFER:    DEFS    8 ; CHECK BUFFER
  3144. CNUM    EQU    BUFFER
  3145. MONTH    EQU    CNUM+5
  3146. DAY    EQU    CNUM+6
  3147. CVAL    EQU    CNUM+2
  3148. NAME    EQU    CNUM+7
  3149. CREV:    DEFB    0
  3150. CATMOD:    DEFB    00H
  3151. NAM3:    DEFB    'NAM'
  3152. NREV:    DEFB    0
  3153. CMODE:    DEFB    0
  3154. CMNEM:    DEFS    3 ; CHECK MNEMONIC
  3155. TPTR:    DEFS    2 ; TEMPORARY POINTER
  3156. REMAIN:    DEFS    3
  3157. BINARY:    DEFS    3
  3158. BUFIN:    DEFS    32
  3159. BUFSIZ    EQU    $-BUFIN
  3160. INNUM:    DEFS    1
  3161. INPTR:    DEFS    1
  3162. XIND:    DEFS    1
  3163. CMD:    DEFS    1
  3164. WIFE:    DEFS    1
  3165. V:    DEFB    0
  3166. CKSTRT:    DEFW    CK
  3167. BUFEND:    DEFS    2
  3168. MASK:    DEFS    1
  3169. NOFFST:    DEFW    OFFST
  3170. NB1:    DEFW    MNEU1
  3171. NB2:    DEFW    MNEU2
  3172. NB3:    DEFW    MNEU3
  3173. OL:    DEFW    OFFL
  3174. OH:    DEFW    OFFH
  3175. NTABLE:    DEFW    NTABL
  3176. TABFLG:    DEFB    0     ;0    EQU    OFF FF    EQU    ON
  3177. PTRFLG:    DEFB    0
  3178. OUTMO:    DEFB    0
  3179. INPOS:    DEFS    1
  3180. NPTR:    DEFS    2
  3181. MODE:    DEFB    2
  3182. LENGTH:    DEFS    2
  3183. CHKS:    DEFW    CFILE
  3184. NAMES:    DEFW    NFILE
  3185. NTEMP:    DEFS    2
  3186. TOP:    DEFW    CCPBAS
  3187. STRING:    DEFS    16
  3188. ;
  3189. ; NEW VARIABLES AS A RESULT OF Z80 CONVERSION
  3190. ;
  3191. ;NEWVAR
  3192. ;
  3193. AUTFLG:    DEFB    0        ;AUTO CHECK NUMBER OFF
  3194. AUTOCN:    DEFS    2        ;STOREAGE FOR CHECK NUMBER
  3195. JMPADR:    DEFS    2        ;LOCATION FOR JUMP INDIRECT
  3196. OLDSP:    DEFS    2        ;OLD STACK POINTER
  3197. STACK:    DEFS    128        ;LOCAL STACK
  3198. CHKEND:    DEFS    2        ;END ADR. OF CHECK FILE
  3199. NAMEND:    DEFS    2        ;END ADR. OF NAME FILE
  3200. BAK:    DEFB    'BAK'        ;BAK FILE TYPE
  3201. NAM:    DEFB    'NAM'        ;NAME FILE TYPE
  3202. CHK:    DEFB    'CHK'        ;CHECK FILE TYPE
  3203. NFCB:    DEFS    36        ;NAME FILE CONTROL BLOCK
  3204. CKTBL    EQU    $
  3205.     .PHASE CKLOC
  3206. BEGYR:    DEFB    0,0,0 ; BAL AT YR START
  3207. WITHNO:    DEFB    1; WITHDRAWAL #
  3208. DEPNO:    DEFB    1 ; DEPOSIT #
  3209. BAL:    DEFB    0,0,0 ; PRESENT BAL
  3210. FILSIZ:    DEFB    0,0 ; SIZE OF CFILE IN BYTES
  3211. CK    EQU    $ ; START OF CHECKS
  3212. CKSIZ    EQU    $-BEGYR     ;SIZE OF INITIAL CHECK DATA
  3213.     .DEPHASE
  3214.     .PHASE NAMLOC
  3215. NIND:    DEFB    0
  3216. OFFST:    DEFB    0,0
  3217. MNEU1:    DEFS    256
  3218. MNEU2:    DEFS    256
  3219. MNEU3:    DEFS    256
  3220. OFFL:    DEFS    256
  3221. OFFH:    DEFS    256
  3222. NTABL    EQU    $
  3223.     .DEPHASE
  3224. ;
  3225. ; THIS AREA IS PATCHES FOR BUGS SINCE MICROCORNUCOPIA DISTRIBUTION
  3226. ;
  3227. BUG1:    LD    DE,BUFIN    ;SO PUTBIN KNOWS WHERE TO WRITE
  3228.     CALL    PUTBIN
  3229.     RET
  3230. ;
  3231. ; THIS FIX CORRECTS TALLY WHEN STARTING WITH NEGATIVE BALANCE
  3232. ;
  3233. BUG2:    CALL    SAVVAL        ;SAVE STRTING BALANCE IN CASE NEGATIVE
  3234.     CALL    TOTAL        ;THIS CONVERTS NEG TO 2'S COMPLEMENT
  3235.     LD    A,(STEMP)    ;NOW GET BACK NEGATIVE BALANCE
  3236.     LD    (SUM),A        ;SO WE CAN ADD DEPOSITS TO IT
  3237.     LD    A,(STEMP+1)
  3238.     LD    (SUM+1),A
  3239.     LD    A,(STEMP+2)
  3240.     LD    (SUM+2),A
  3241.     RET
  3242. ;
  3243. ; THIS FIX CORRECTS BUG WHEN SAVING AWAY 31 ENTRIES ON DISK
  3244. ;
  3245. BUG3:    LD    HL,(CKSTRT)
  3246.     RET
  3247. ;
  3248. ;
  3249.     END START
  3250.