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