home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / c / trsker.jar < prev    next >
Text File  |  2020-01-01  |  191KB  |  4,961 lines

  1. This file is a text archive of the files for Tandy TRS-80 Model I and III
  2. Kermit.  Each file begins with a line <<< name >>>, where "name" is the name
  3. of the file.  The files begin on the next line.
  4. <<< trscmd.src >>>
  5. ; JUMPING TO THIS LOCATION IS LIKE RETSKP.  IT ASSUMES THE INSTRUCTION
  6. ;   AFTER THE CALL IS A JMP ADDR.
  7. RSKP:    POP    HL        ; GET THE RETURN ADDRESS.
  8.     INC    HL        ; INCREMENT BY THREE.
  9.     INC    HL
  10.     INC    HL
  11.     JP   (HL)  
  12. ; THIS ROUTINE PRINTS THE NUMBER IN HL ON THE SCREEN IN DECIMAL.
  13. ; SAVES ALL ACS.
  14. NOUT:    PUSH   AF    ; SAVE OUR ACS.
  15.     PUSH   BC
  16.     PUSH   DE
  17.     PUSH   HL
  18.     LD     BC,-10    ; GET SOME USEFUL CONSTANTS.
  19.     LD     DE,-1
  20. NOUT2:    ADD    HL,BC        ; SUBTRACT AS MANY 10S AS POSSIBLE.
  21.     INC    DE        ; COUNT THEM.
  22.     JP     C,NOUT2    ; IF SOME LEFT KEEP GOING.
  23.     LD     BC,10    ; RESTORE THE LAST 10 WE TOOK AWAY.
  24.     ADD    HL,BC
  25.     EX   DE,HL               ; SWAP THE REMAINDER AND THE QUOTIENT.
  26.     LD     A,H        ; GET THE NUMBER OF 10S FOUND.
  27.     OR     L        ;* I THINK THIS CHECKS IF H EQUALS ZERO.  IF
  28.     CALL   NZ,NOUT    ; IF NON ZERO, RECURSE.
  29.     LD     A,E        ; GET THE REMAINDER.
  30.     ADD    A,30H        ; MAKE THE NUMBER PRINTABLE.
  31.     CALL    CONOUT
  32.     POP    HL        ; RESTORE THE ACS.
  33.     POP    DE
  34.     POP    BC
  35.     POP    AF
  36.     RET    
  37. ;    THIS SET OF ROUTINES PROVIDES A USER ORIENTED WAY OF PARSING
  38. ;    COMMANDS.  IT IS SIMILAR TO THAT OF THE COMND JSYS IN TOPS-20.
  39. ;    THIS ROUTINE PRINTS THE PROMPT IN DE AND SPECIFIES THE REPARSE
  40. ;    ADDRESS.
  41. PROMPT:    POP    HL        ; GET THE RETURN ADDRESS.
  42.     PUSH   HL        ; PUT IT ON THE STACK AGAIN.
  43.     LD     (CMRPRS),HL    ; SAVE IT AS THE ADDRESS TO GO TO ON REPARSE.
  44.     LD     (CMOSTP),SP    ; SAVE FOR LATER RESTORAL.
  45.     LD     (CMPRMP),DE    ;save the prompt location
  46.     LD     HL,CMDBUF
  47.     LD     (CMCPTR),HL    ; INITIALIZE THE COMMAND POINTER.
  48.     LD     (CMDPTR),HL
  49.     XOR    A
  50.     LD     (CMAFLG),A    ; ZERO THE FLAGS.
  51.     LD     (CMCCNT),A
  52.     LD     A,0FFH    ; TRY IT THIS WAY (DAPHNE.)
  53.     LD     (CMSFLG),A
  54.     LD     DE,CMCRLF
  55.     CALL   PRTSTR
  56.     LD     DE,(CMPRMP)    ; PRINT THE PROMPT.
  57.     CALL   PRTSTR
  58.     RET    
  59. ;    THIS ADDRESS IS JUMPED TO ON REPARSE.
  60. REPARS:    LD     SP,(CMOSTP)    ; GET THE OLD STACK POINTER.
  61.     LD     HL,CMDBUF
  62.     LD     (CMDPTR),HL
  63.     LD     A,0FFH    ; TRY IT THIS WAY (DAPHNE.)
  64.     LD     (CMSFLG),A
  65.     LD     HL,(CMRPRS)    ; GET THE REPARSE ADDRESS.
  66.     JP   (HL)              ; GO THERE.
  67. ;    THIS ADDRESS CAN BE JUMPED TO ON A PARSING ERROR.
  68. PRSERR:    LD     SP,(CMOSTP)    ; GET THE OLD STACK POINTER.
  69.     LD     HL,CMDBUF
  70.     LD     (CMCPTR),HL    ; INITIALIZE THE COMMAND POINTER.
  71.     LD     (CMDPTR),HL
  72.     XOR    A
  73.     LD     (CMAFLG),A    ; ZERO THE FLAGS.
  74.     LD     (CMCCNT),A
  75.     LD     A,0FFH    ; TRY IT THIS WAY (DAPHNE.)
  76.     LD     (CMSFLG),A
  77.     LD     DE,CMCRLF
  78.     CALL   PRTSTR
  79.     LD     DE,(CMPRMP)    ; GET THE PROMPT.
  80.     CALL   PRTSTR
  81. ;* INSTEAD RETURN TO BEFORE THE PROMPT CALL.
  82.     LD     HL,(CMRPRS)
  83.     JP   (HL)  
  84. ;    THIS ROUTINE PARSES THE SPECIFIED FUNCTION IN A.  ANY ADDITIONAL
  85. ;    INFORMATION IS IN DE AND HL.
  86. ;    RETURNS +1 ON SUCCESS
  87. ;        +4 ON FAILURE (ASSUMES A JMP FOLLOWS THE CALL)
  88. COMND:    LD     (CMSTAT),A    ; SAVE WHAT WE ARE PRESENTLY PARSING.
  89.     CALL   CMINBF    ; GET CHARS UNTIL AN ACTION OR A ERASE CHAR.
  90.     CP     CMCFM    ; PARSE A CONFIRM?
  91.     JP     Z,CMCFRM    ; GO GET ONE.
  92.     CP     CMKEY    ; PARSE A KEYWORD?
  93.     JP     Z,CMKEYW    ; TRY AND GET ONE.
  94.     CP     CMIFI    ; PARSE AN INPUT FILE SPEC?
  95.     JP     Z,CMIFIL    ; GO GET ONE.
  96.     CP     CMIFIN    ; INPUT FILE-SPEC SILENT?
  97.     JP     Z,CMIFIL    ; DO AS HE WISHES
  98.     CP     CMOFI    ; OUTPUT FILE SPEC?
  99.     JP     Z,CMOFIL    ; GO GET ONE.
  100.     CP     CMTXT    ; PARSE ARBITRARY TEXT?
  101.     JP     Z,CMTEXT    ; GO DO IT.
  102.     LD     DE,CMER00    ; "?UNRECOGNIZED COMND CALL"
  103.     CALL   PRTSTR
  104.     RET    
  105. ;    THIS ROUTINE PARSES ARBITRARY TEXT UP TO A CR.
  106. ;    ACCEPTS DE:    ADDRESS TO PUT TEXT
  107. ;    RETURNS IN A:    NUMBER OF CHARS IN TEXT (MAY BE 0)
  108. ;          DE:    UPDATED POINTER
  109. CMTEXT:    EX   DE,HL               ; PUT THE POINTER TO THE DEST IN HL.
  110.     LD     (CMPTAB),HL    ; SAVE THE POINTER.
  111.     LD     B,0        ; INIT THE CHAR COUNT
  112. CMTXT1:    CALL   CMGTCH    ; GET A CHAR.
  113.     OR     A        ; TERMINATOR?
  114.     JP     P,CMTXT5    ; NO, PUT IN USER SPACE.
  115.     AND    7FH        ; TURN OFF MINUS BIT.
  116.     CP     ESC        ; AN ESCAPE?
  117.     JR     NZ,CMTXT2    ; NO.
  118.     LD     A,BELL    ; GET A BELL.
  119.     CALL   CONOUT
  120.     XOR    A
  121.     LD     (CMAFLG),A    ; TURN OFF THE ACTION FLAG.
  122.     LD     HL,(CMCPTR)    ; MOVE THE POINTER TO BEFORE THE ESCAPE.
  123.     DEC    HL
  124.     LD     (CMCPTR),HL
  125.     LD     (CMDPTR),HL
  126.     LD     HL,CMCCNT    ; GET THE CHAR COUNT.
  127.     DEC    (HL)        ; DECREMENT IT BY ONE.
  128.     JP     CMTXT1        ; TRY AGAIN.
  129. CMTXT2:    CP     '?'        ; IS IT A QUESTION MARK?
  130.     JR     Z,CMTXT3        ; IF SO PUT IT IN THE TEXT.
  131.     CP    ' '         ;blank?
  132.     JR    Z,CMTXT3    ;if so put in the text
  133.     CP     FF        ; IS IT A FORMFEED?
  134.     CALL   Z,CMBLNK        ; IF SO BLANK THE SCREEN.
  135.     LD     A,B        ; RETURN THE COUNT.
  136.     LD     HL,(CMPTAB)    ; RETURN UPDATED POINTER IN HL.
  137.     EX   DE,HL   
  138.     JP     RSKP        ; RETURN SUCCESS.
  139. CMTXT3:    LD     HL,CMAFLG    ; POINT TO THE ACTION FLAG.
  140.     LD     (HL),0        ; SET IT TO ZERO.
  141. CMTXT5:    INC    B        ; INCREMENT THE COUNT.
  142.     CP    'a'
  143.     JR    C,CMTXT6    ;lower than 'a'
  144.     CP    'z'
  145.     JR    NC,CMTXT6    ;greater than 'z'
  146.     AND    5FH        ;capitalize it
  147. CMTXT6    LD     HL,(CMPTAB)    ; GET THE POINTER.
  148.     LD     (HL),A        ; PUT THE CHAR IN THE ARRAY.
  149.     INC    HL
  150.     LD     (CMPTAB),HL    ; SAVE THE UPDATED POINTER.
  151.     JP     CMTXT1        ; GET ANOTHER CHAR.
  152. ; THIS ROUTINE GETS A CONFIRM.
  153. CMCFRM:    LD     DE,CMIN00    ; PRINT SOMETHING USEFUL.
  154.     CALL   PRTSTR
  155.     LD     DE,CMCRLF    ; PRINT A CRLF.
  156.     CALL   PRTSTR
  157.     LD     DE,(CMPRMP)    ; REPRINT THE PROMPT.
  158.     CALL   PRTSTR
  159.     LD     HL,(CMDPTR)    ; GET THE POINTER INTO THE BUFFER.
  160.     LD     A,'$'        ; PUT A $ THERE FOR PRINTING.
  161.     LD     (HL),A
  162.     LD     HL,(CMCPTR)
  163.     DEC    HL        ; DECREMENT AND SAVE THE BUFFER POINTER.
  164.     LD     (CMCPTR),HL
  165.     LD     DE,CMDBUF
  166.     CALL   PRTSTR
  167.     XOR    A        ; TURN OFF THE ACTION FLAG.
  168.     LD     (CMAFLG),A
  169.     CALL    @KEY        ;get a key from the keyboard
  170.     CP    CR
  171.     JR    Z,CMCFR3
  172.     CP    FF
  173.     JR    Z,CMCFR3
  174.     CP    4
  175.     RET    M
  176.     LD    HL,(CMCPTR)
  177.     INC    HL
  178.     LD    (HL),A
  179.     INC    HL
  180.     LD    (CMCPTR),HL
  181.     CALL    CONOUT
  182.     JP     REPARS    ; REPARSE EVERYTHING.
  183. CMCFR3:    CP     FF        ; IS IT A FORM FEED?
  184.     CALL   Z,CMBLNK    ; IF SO BLANK THE SCREEN.
  185.     JP     RSKP
  186. ;    THIS ROUTINE PARSES A KEYWORD FROM THE TABLE POINTED
  187. ;    TO IN DE.  THE FORMAT OF THE TABLE IS AS FOLLOWS:
  188. ;
  189. ;    ADDR:    DB    N    ; WHERE N IS THE # OF ENTRIES IN THE TABLE.
  190. ;        DB    M    ; M IS THE SIZE OF THE KEYWORD.
  191. ;        DB    'STRING$' ; WHERE STRING IS THE KEYWORD.
  192. ;        DB    A,B    ; WHERE A & B ARE PIECES OF DATA
  193. ;                ;  TO BE RETURNED.  (MUST BE TWO OF THEM.)
  194. ;
  195. ;    THE KEYWORDS MUST BE IN ALPHABETICAL ORDER.
  196. ;**** NOTE:  THE DATA VALUE A IS RETURNED IN REGISTERS A AND E.  THE
  197. ;****    DATA VALUE B IS RETURNED IN REGISTER D.  THIS ALLOWS THE TWO DATA
  198. ;    BYTES TO BE STORED AS:
  199. ;        DW    XXX
  200. ;    AND RESULT IN A CORRECTLY FORMATTED 16-BIT VALUE IN REGISTER PAIR
  201. ;    DE.
  202. CMKEYW:    LD     (CMHLP),HL    ; SAVE THE HELP.
  203.     LD     (CMPTAB),DE    ; SAVE THE BEGINNING OF KEYWORD TAB FOR '?'.
  204.     LD     A,(DE)        ; GET THE NUMBER OF ENTRIES IN THE TABLE.
  205.     LD    B,A        ;save in B
  206.     INC    DE
  207.     LD     (CMKPTR),DE
  208.     LD     HL,(CMDPTR)    ; SAVE THE COMMAND POINTER.
  209.     LD     (CMSPTR),HL
  210. CMKEY2:    LD    A,B
  211.     OR     A        ; ANY LEFT?
  212.     RET   Z            ; IF NOT WE FAILED.
  213.     LD     HL,(CMKPTR)
  214.     LD     E,(HL)        ; GET THE LENGTH OF THE KEYWORD.
  215.     INC    HL
  216. CMKEY3:    DEC    E        ; DECREMENT THE NUMBER OF CHARS LEFT.
  217.     LD     A,E
  218.     CP     0FFH    ; HAVE WE PASSED THE END?
  219.     JP     M,CMKEY5    ; IF SO GO TO THE NEXT.
  220.     CALL   CMGTCH    ; GET A CHAR.
  221.     OR     A        ; IS IT A TERMINATER?
  222.     JP     P,CMKEY4    ; IF POSITIVE, IT IS NOT.
  223.     AND    7FH        ; TURN OFF THE MINUS BIT.
  224.     CP     '?'
  225.     JP     NZ,CMKY31
  226.     XOR    A
  227.     LD     (CMAFLG),A    ; TURN OFF THE ACTION FLAG.
  228.     LD     HL,CMCCNT    ; DECREMENT THE CHAR COUNT.
  229.     DEC    (HL)
  230. ;* MUST GO THROUGH THE KEYWORD TABLE AND PRINT THEM.
  231.     LD     DE,(CMHLP)    ; FOR NOW PRINT THE HELP TEXT.
  232.     CALL   PRTSTR
  233.     LD     DE,CMCRLF    ; PRINT A CRLF.
  234.     CALL   PRTSTR
  235.     LD     DE,(CMPRMP)    ; REPRINT THE PROMPT.
  236.     CALL   PRTSTR
  237.     LD     HL,(CMDPTR)    ; GET THE POINTER INTO THE BUFFER.
  238.     LD     A,'$'    ; PUT A $ THERE FOR PRINTING.
  239.     LD     (HL),A
  240.     LD     HL,(CMCPTR)
  241.     DEC    HL        ; DECREMENT AND SAVE THE BUFFER POINTER.
  242.     LD     (CMCPTR),HL
  243.     LD     DE,CMDBUF
  244.     CALL   PRTSTR
  245.     JP     REPARS    ; REPARSE EVERYTHING.
  246. CMKY31:    CP     ESC        ; IS IT AN ESCAPE?
  247.     JP     NZ,CMKY35
  248.     XOR    A
  249.     LD     (CMAFLG),A    ; TURN OFF THE ACTION FLAG.
  250.     PUSH   DE
  251.     PUSH   BC
  252.     PUSH   HL
  253.     CALL   CMAMBG
  254.     JP    CMKY32
  255.     LD     A,BELL
  256.     CALL    CONOUT
  257.     LD     HL,(CMCPTR)    ; MOVE THE POINTER TO BEFORE THE ESCAPE.
  258.     DEC    HL
  259.     LD     (CMCPTR),HL
  260.     LD     (CMDPTR),HL
  261.     LD     HL,CMCCNT    ; GET THE CHAR COUNT.
  262.     DEC    (HL)        ; DECREMENT IT BY ONE.
  263.     POP    HL
  264.     POP    BC
  265.     POP    DE
  266.     INC    E        ; INCREMENT THE LEFT TO PARSE CHAR COUNT.
  267.     JP     CMKEY3
  268. CMKY32:    LD     HL,(CMCPTR)    ; POINTER INTO BUFFER.
  269.     DEC    HL        ; BACKUP TO THE ESCAPE.
  270.     EX   DE,HL   
  271.     POP    HL
  272.     PUSH   HL
  273. CMKY33:    LD     A,(HL)        ; GET THE NEXT CHAR.
  274.     CP     '$'        ; FINISHED?
  275.     JP     Z,CMKY34
  276.     INC    HL
  277.     EX   DE,HL   
  278.     LD     (HL),A        ; MOVE IT INTO THE BUFFER.
  279.     INC    HL
  280.     EX   DE,HL   
  281.     LD     A,(CMCCNT)    ; INCREMENT THE CHAR COUNT.
  282.     INC    A
  283.     LD     (CMCCNT),A
  284.     JP     CMKY33
  285. CMKY34:    LD     A,(CMCCNT)    ; GET THE CHARACTER COUNT.
  286.     INC    A        ; INCREMENT AND SAVE IT.
  287.     LD     (CMCCNT),A
  288.     EX   DE,HL               ; PUT THE COMMAND BUFFER POINTER IN HL.
  289.     LD     A,' '        ; GET A BLANK.
  290.     LD     (HL),A        ; PUT IT IN THE COMMAND BUFFER.
  291.     INC    HL        ; INCREMENT THE POINTER
  292.     LD     (CMCPTR),HL    ; SAVE THE UPDATED POINTER.
  293.     LD     (CMDPTR),HL
  294.     POP    HL
  295.     PUSH   HL
  296.     EX   DE,HL   
  297.     CALL   PRTSTR    ; PRINT THE REST OF THE KEYWORD.
  298.     LD     A,' '
  299.     CALL    CONOUT
  300.     POP    HL
  301.     POP    BC
  302.     POP    DE
  303.     JP     CMKY37
  304. CMKY35:    PUSH   HL
  305.     PUSH   DE
  306.     CALL   CMAMBG
  307.     JP    CMKY36
  308.     LD    DE,CMER01
  309.     CALL   PRTSTR    ; SAY ITS AMBIGUOUS.
  310.     JP     PRSERR    ; GIVE UP.
  311. CMKY36:    POP    DE
  312.     POP    HL
  313. CMKY37:    INC    E        ; ADD ONE INCASE IT IS NEGATIVE.
  314.     LD     D,0
  315.     ADD    HL,DE        ; INCREMENT PAST THE KEYWORD.
  316.     INC    HL        ; PAST THE $.
  317.     LD     E,(HL)        ; GET THE DATA.
  318.     INC    HL
  319.     LD     D,(HL)
  320.     LD     A,E
  321.     JP     RSKP
  322. CMKEY4:    CP     'a'        ; IS IT LESS THAN A?
  323.     JR     C,CMKY41    ; IF SO DON'T CAPITALIZE IT.
  324.     CP     'z'    ; IS IT MORE THAN Z?
  325.     JR     NC,CMKY41    ; IF SO DON'T CAPITALIZE IT.
  326.     AND    137O    ; CAPITALIZE IT.
  327. CMKY41:    LD     D,(HL)        ; GET THE NEXT CHAR OF THE KEYWORD.
  328.     INC    HL
  329.     CP     D        ; MATCH?
  330.     JP     Z,CMKEY3    ; IF SO GET THE NEXT LETTER.
  331. CMKEY5:    LD     D,0
  332.     LD     A,E        ; GET THE NUMBER OF CHARS LEFT.
  333.     OR     A        ; IS IT NEGATIVE?
  334.     JP     P,CMKY51
  335.     LD     D,0FFH    ; IF SO, SIGN EXTEND.
  336. CMKY51:    ADD    HL,DE        ; INCREMENT PAST THE KEYWORD.
  337.     LD     DE,0003H    ; PLUS THE $ AND DATA.
  338.     ADD    HL,DE
  339.     LD     (CMKPTR),HL
  340.     DEC    B        ; DECREMENT THE NUMBER OF ENTRIES LEFT.
  341.     LD     HL,(CMSPTR)    ; GET THE OLD CMDPTR.
  342.     LD     (CMDPTR),HL    ; RESTORE IT.
  343. ;* CHECK SO WE DON'T PASS IT.
  344.     JP     CMKEY2    ; GO CHECK THE NEXT KEYWORD.
  345. CMAMBG:    DEC    B        ; DECREMENT THE NUMBER OF ENTRIES LEFT.
  346.     RET   M            ; IF NONE LEFT THEN IT IS NOT AMBIGUOUS.
  347.     INC    E        ; THIS IS OFF BY ONE; ADJUST.
  348.     LD     C,E        ; SAVE THE CHAR COUNT.
  349.     LD     A,E
  350.     OR     A        ; ANY CHARS LEFT?
  351.     RET   Z            ; NO, IT CAN'T BE AMBIGUOUS.
  352.     LD     D,0
  353.     ADD    HL,DE        ; INCREMENT PAST THE KEYWORD.
  354.     LD     E,3        ; PLUS THE $ AND DATA.
  355.     ADD    HL,DE
  356.     LD     B,(HL)        ; GET THE LENGTH OF THE KEYWORD.
  357.     INC    HL
  358.     EX   DE,HL   
  359.     LD     HL,(CMKPTR)    ; GET POINTER TO KEYWORD ENTRY.
  360.     LD     A,(HL)        ; GET THE LENGTH OF THE KEYWORD.
  361.     SUB    C        ; SUBTRACT HOW MANY LEFT.
  362.     LD     C,A        ; SAVE THE COUNT.
  363.     CP     B
  364.     JP     Z,CMAMB0
  365.     RET   P            ; IF LARGER THAN THE NEW WORD THEN NOT AMB.
  366. CMAMB0:    LD     HL,(CMSPTR)    ; GET THE POINTER TO WHAT PARSED.
  367. CMAMB1:    DEC    C        ; DECREMENT THE COUNT.
  368.     JP     M,RSKP        ; IF WE ARE DONE THEN IT IS AMBIGUOUS.
  369.     EX   DE,HL               ; EXCHANGE THE POINTERS.
  370.     LD     B,(HL)        ; GET THE NEXT CHAR OF THE KEYWORD
  371.     INC    HL
  372.     EX   DE,HL               ; EXCHANGE THE POINTERS.
  373.     LD     A,(HL)        ; GET THE NEXT PARSED CHAR.
  374.     INC    HL
  375.     CP     'a'        ; IS IT LESS THAN A?
  376.     JR     C,CMAMB2    ; IF SO DON'T CAPITALIZE IT.
  377.     CP     'z'    ; IS IT MORE THAN Z?
  378.     JR     NC,CMAMB2    ; IF SO DON'T CAPITALIZE IT.
  379.     AND    137O
  380. CMAMB2:    CP     B        ; ARE THEY EQUAL?
  381.     RET   NZ             ; IF NOT THEN ITS NOT AMBIGUOUS.
  382.     JP     CMAMB1    ; CHECK THE NEXT CHAR.
  383. CMIFIL    EX    DE,HL
  384.     LD    (CMFCB),HL
  385.     EX    DE,HL
  386.     LD    HL,(CMFCB)
  387.     LD    B,50        ;number to blank
  388. CMIFI0:    LD     (HL),' '            ; BLANK THE FCB.
  389.     INC    HL
  390.     DJNZ    CMIFI0
  391. CMIFI1:    LD    HL,(CMDPTR)    ;GET COMMAND FCB
  392.     CALL    @FSPEC
  393.     JR    Z,CMIFI2
  394.     LD     DE,CMER02
  395.     CALL   PRTSTR
  396.     JP    PRSERR
  397. CMIFI2:    LD    (CMDPTR),HL
  398.     JP    RSKP
  399. CMOFIL:    JP    CMIFIL
  400. CMINBF:    PUSH   AF
  401.     PUSH   DE
  402.     PUSH   HL
  403.     LD     A,(CMAFLG)    ; IS THE ACTION CHAR FLAG SET?
  404.     OR     A
  405.     JP     NZ,CMINB9    ; IF SO GET NO MORE CHARS.
  406.     LD    HL,(CMCPTR)
  407.     LD    DE,CMFCB    ;END OF BUFFER
  408.     XOR    A
  409.     SBC    HL,DE
  410.     LD    B,L        ;size of cmdbuf
  411.     LD    HL,(CMCPTR)
  412.     CALL    @KEYIN        ;rom lineinput routine
  413.     JP    C,PRSERR    ;action if <BREAK> typed
  414.     LD    A,B
  415.     LD    (CMCCNT),A
  416.     OR    A
  417.     JP      Z,PRSERR    ; IF NOT, JUST START OVER.
  418.     LD    HL,(CMCPTR)
  419.     LD    E,B
  420.     LD    D,0
  421.     ADD    HL,DE
  422.     LD    (CMCPTR),HL    ;update pointer
  423. CMINB6:    LD     A,0FFH    ; SET THE ACTION FLAG.
  424.     LD     (CMAFLG),A
  425. CMINB9:    POP    HL
  426.     POP    DE
  427.     POP    AF
  428.     RET    
  429. CMGTCH:    PUSH   HL
  430.     PUSH   BC
  431. CMGTC1:    LD     A,(CMAFLG)
  432.     OR     A        ; IS IT SET.
  433.     CALL   Z,CMINBF    ; IF THE ACTION CHAR FLAG IS NOT SET GET MORE.
  434.     LD     HL,(CMDPTR)    ; GET A POINTER INTO THE BUFFER.
  435.     LD     A,(HL)        ; GET THE NEXT CHAR.
  436.     INC    HL
  437.     LD     (CMDPTR),HL
  438.     CP     ' '            ; IS IT A SPACE?
  439.     JP     Z,CMGTC2
  440.     CP     TAB        ; OR A TAB?
  441.     JP     NZ,CMGTC3
  442. CMGTC2:    LD     A,(CMSFLG)    ; GET THE SPACE FLAG.
  443.     OR     A        ; WAS THE LAST CHAR A SPACE?
  444.     JP     NZ,CMGTC1    ; YES, GET ANOTHER CHAR.
  445.     LD     A,0FFH    ; SET THE SPACE FLAG.
  446.     LD     (CMSFLG),A
  447.     LD     A,' '
  448.     POP    BC
  449.     POP    HL
  450.     JP     CMGTC5
  451. CMGTC3:    PUSH   AF
  452.     XOR    A
  453.     LD     (CMSFLG),A    ; ZERO THE SPACE FLAG.
  454.     POP    AF
  455.     POP    BC
  456.     POP    HL
  457.     CP     ESC
  458.     JP     Z,CMGTC5
  459.     CP     '?'        ; IS THE USER CURIOUS?
  460.     JP     Z,CMGTC4
  461.     CP     CR
  462.     JP     Z,CMGTC4
  463.     CP     LF
  464.     JP     Z,CMGTC4
  465.     CP     FF
  466.     RET   NZ             ; NOT AN ACTION CHAR, JUST RETURN.
  467. CMGTC4:    PUSH   HL
  468.     LD     HL,(CMDPTR)
  469.     DEC    HL
  470.     LD     (CMDPTR),HL
  471.     POP    HL
  472. CMGTC5:    OR     80H        ; MAKE THE CHAR NEGATIVE TO INDICATE IT IS
  473.     RET                ;  A TERMINATOR.
  474. <<< trsdnld.bas >>>
  475. 10 CLEAR1000:ONERRORGOTO500
  476. 20 DEFINTA-Z
  477. 30 CLS
  478. 40 H$="0123456789ABCDEF"
  479. 50 PRINT"This is KERMAKE/BAS for the TRS-80 Model I/III":PRINT
  480. 53 PRINT"It will create a program called KERMIT/CMD"
  481. 55 PRINT"on a drive you specify!"
  482. 60 INPUT"Which drive to use (0-3)";DR:IFDR>3ORDR<0THEN60
  483. 90 LINEINPUT"PRESS <ENTER> WHEN YOU ARE READY TO BEGIN --> ";A$
  484. 120 FS$="KERMIT/CMD:"+RIGHT$(STR$(DR),1)
  485. 130 OPEN"O",1,FS$
  486. 150 READB$
  487. 160 IFB$="*"THEN270
  488. 170 X=X+1
  489. 180 PRINTUSING"PART ### OF 332 PARTS";X;:PRINTCHR$(29);
  490. 190 FORA=1TOLEN(B$)STEP2
  491. 200 A1=INSTR(H$,MID$(B$,A,1))-1
  492. 210 A2=INSTR(H$,MID$(B$,A+1,1))-1
  493. 220 A3=A1*16+A2
  494. 230 CK#=CK#+A3
  495. 240 PRINT#1,CHR$(A3);
  496. 250 NEXTA
  497. 260 GOTO150
  498. 270 CLS
  499. 280 A#=1003039
  500. 290 PRINT"CHECKSUM ="CK#" IT SHOULD ="A#:PRINT
  501. 300 IF CK#=A# GOTO 330
  502. 310 PRINT"CHECKSUM ERROR. IT IS SUGGESTED THAT YOU DOWNLOAD THIS"
  503. 320 PRINT"PROGRAM AGAIN.":END
  504. 330 PRINT"CHECKSUM CORRECT!  YOUR COPY OF KERMIT HAS BEEN VERIFIED."
  505. 340 CLOSE
  506. 350 END
  507. 500 ONERRORGOTO0
  508. 1000 DATA 05064B45524D495401020070ED73D19531D396CD1A70AF32CB98118591CD
  509. 1001 DATA 3B70CD4B70C330713AF496D3E8D3E93E6CD3EAC9D5114092CD3B70D1C9D5
  510. 1002 DATA E5C5F5CD3300F1C1E1D1C91AFE24C8CD2F701318F6D5CD2B00D1C911CB98
  511. 1003 DATA 1ACB7FC42844112889CD7471115A9221308C3E01CDE171C39A702170704F
  512. 1004 DATA 060009E9C30177C32871C34271C3C376C30F7BC3637FC37978C3F079C3F8
  513. 1005 DATA 79C30976C35B76C3B276C3C174C35A75113889CD3B70C34B70116389CD3B
  514. 1006 DATA 70C34B70E5C521E0964E060021B97009E9C3CB70C3D570C3C870C3DA70C3
  515. 1007 DATA E470C3E670E67FEAE670F680C3E670F680C3E670E67FE2E670F680C3E670
  516. 1008 DATA E67FC1E1C9D5DBEAE64028FA7BCDAC70D3EBD1C9DBEAE6802019CD450102
  517. 1009 DATA 007170B728F4FE0D2001C9FE1A2804FE1820E7C620320497C9DBEB473AE0
  518. 1010 DATA 96FE0678CA4B71E67FC34B713E04CDE171C3A37011CB983ACB98CB7FC428
  519. 1011 DATA 44ED7BD195C32D4011308CCD3B70C34B70E1232323E9F5C5D5E501F6FF11
  520. 1012 DATA FFFF0913DA5A71010A0009EB7CB5C450717BC630CD2F70E1D1C1F1C9E1E5
  521. 1013 DATA 223F95ED733D95ED53419521479522C99522CB95AF323A95323B953EFF32
  522. 1014 DATA 3C9511BC94CD3B70ED5B4195CD3B70C9ED7B3D9521479522CB953EFF323C
  523. 1015 DATA 952A3F95E9ED7B3D9521479522C99522CB95AF323A95323B953EFF323C95
  524. 1016 DATA 11BC94CD3B70ED5B4195CD3B702A3F95E9323995CD3074FE04CA6972FE01
  525. 1017 DATA CAB872FE02CA0774FE10CA0774FE03CA2D7401020072FE05CA0C72114694
  526. 1018 DATA CD3B70C9EB2243950600CD6874B7F25372E67FFE1B201A3E07CD2F70AF32
  527. 1019 DATA 3A952AC9952B22C99522CB95213B9535C31272FE3F2811FE20280DFE0CCC
  528. 1020 DATA 2670782A4395EBC34B71213A95360004FE613806FE7A3002E65F2A439577
  529. 1021 DATA 23224395C31272119194CD3B7011BC94CD3B70ED5B4195CD3B702ACB953E
  530. 1022 DATA 24772AC9952B22C995114795CD3B70AF323A95CD4900FE0D2816FE0C2812
  531. 1023 DATA FE04F82AC99523772322C995CD2F70C3A471FE0CCC2670C34B71224595ED
  532. 1024 DATA 5343951A4713ED53CD952ACB9522CF9578B7C82ACD955E231D7BFEFFFAB5
  533. 1025 DATA 73CD6874B7F2A573E67FFE3FC21B73AF323A95213B9535ED5B4595CD3B70
  534. 1026 DATA 11BC94CD3B70ED5B010200734195CD3B702ACB953E24772AC9952B22C995
  535. 1027 DATA 114795CD3B70C3A471FE1BC28673AF323A95D5C5E5CDD073C347733E07CD
  536. 1028 DATA 2F702AC9952B22C99522CB95213B9535E1C1D11CC3D4722AC9952BEBE1E5
  537. 1029 DATA 7EFE24CA637323EB7723EB3A3B953C323B95C34E733A3B953C323B95EB3E
  538. 1030 DATA 20772322C99522CB95E1E5EBCD3B703E20CD2F70E1C1D1C39973E5D5CDD0
  539. 1031 DATA 73C39773116B94CD3B70C3B771D1E11C160019235E23567BC34B71FE6138
  540. 1032 DATA 06FE7A3002E65F5623BACAD47216007BB7F2BE7316FF191103001922CD95
  541. 1033 DATA 052ACF9522CB95C3CC7205F81C4B7BB7C81600191E03194623EB2ACD957E
  542. 1034 DATA 914FB8CAEB73F02ACF950DFA4B71EB4623EB7E23FE613806FE7A30020102
  543. 1035 DATA 0074E65FB8C0C3EE73EB22C795EB2AC795063236202310FB2ACB95CD1C44
  544. 1036 DATA 2809117794CD3B70C3B77122CB95C34B71C30774F5D5E53A3A95B7C26474
  545. 1037 DATA 2AC99511C795AFED52452AC995CD4000DAB77178323B95B7CAB7712AC995
  546. 1038 DATA 5816001922C9953EFF323A95E1D1F1C9E5C53A3A95B7CC30742ACB957E23
  547. 1039 DATA 22CB95FE20CA8374FE09C296743A3C95B7C26A743EFF323C953E20C1E1C3
  548. 1040 DATA BE74F5AF323C95F1C1E1FE1BCABE74FE3FCAB574FE0DCAB574FE0ACAB574
  549. 1041 DATA FE0CC0E52ACB952B22CB95E1F680C92A2D4022619B3A2F4032639B2A3040
  550. 1042 DATA 22649B3A324032669B2A094422679B3A0B4432699BED736A9B2ACB957EFE
  551. 1043 DATA 0D2813FE20280CFE30FA5175FE3AF251751801020075052318E83E3132BE
  552. 1044 DATA 8B3EC3322D40323040320944212675222E40223140220A4421B88BC30544
  553. 1045 DATA 2A619B222D403A639B322F402A649B2230403A669B3232402A679B220944
  554. 1046 DATA 3A699B320B442A6A9BF9C34B7011CE8BCD3B70C34B703E02112F99CDE171
  555. 1047 DATA C34B703E04CDE171C3A370112F99CD2444CA7F75112F8ACD3B70C34B7011
  556. 1048 DATA 2F99CD2C44200911C08BCD3B70C34B70CDED75C34B703AE196FE20F2A975
  557. 1049 DATA 116A8BCD3B703AE196F640CD2F703E20CD2F70C9CDE6753E41320E97C3C3
  558. 1050 DATA 75113689CD3B703A629B4F0600211397093E2477111397CD3B70C9D5CDE6
  559. 1051 DATA 7511B091CD3B70D1CD3B70C911F591CD3B70C9B7C8F680F640CD0944C9D5
  560. 1052 DATA 11E291CD3B70D1CD010200763B7011FD91CD3B70C93E04CDE171C3A370AF
  561. 1053 DATA 320C973E313202973A0C97FE05FA2B7611708ACD3B70C34B703C320C97AF
  562. 1054 DATA 32619B3E0132629B21139736463E47CD1086C31A76CD1687C31A76FE59CA
  563. 1055 DATA 4B70FE45C21A76CDBD75C34B703E04CDE171C3A370CD6C76C34B70C34B70
  564. 1056 DATA AF320C973E313202973A0C97FE05FA847611A38ACD3B70C93C320C97AF32
  565. 1057 DATA 619B3E0132629B211397364C3E47CD1086C37D76CD1687C37576FE59CA4B
  566. 1058 DATA 71FE45C27576CDBD75C93E04CDE171C3A370CD6C76C34B70C330713E0311
  567. 1059 DATA FD98CDE171C3A3703E04CDE171C3A37021D79636FF21619A22E79611FD98
  568. 1060 DATA CD2444200C11FD98CD2C4411FD982AE796CD2044C24B70CDED75C34B0102
  569. 1061 DATA 0077703E04CDE171C3A37011018BCD3B70CD967511238BCD3B70CD2477CD
  570. 1062 DATA 6777C34B70C31877DBEAE680C8DBEBE67FFE0A28F35F3ADA96B728153AD9
  571. 1063 DATA 96B7C215787BFE7FC8FE1B200632D996C32477FE0CCA26703AD796B7C430
  572. 1064 DATA 783ADF96B7C463787BCD2F70C32477CD4570E67FB7CA4B715F3AE196BBCA
  573. 1065 DATA 92777BCDAC705FD5CD7278D13AD896B7CA4B717BE67FCD2F70C34B71CD96
  574. 1066 DATA 75CD4570B728FA47CD2F7078FE032807E65FFE43C2C77711468BCD3B703A
  575. 1067 DATA D796B7C8AF32D79611E98ACD3B7011FD98CD2844C9FE532006CDFE79C34B
  576. 1068 DATA 7178FE3F200911708FCD3B70C3957778E67FFE42200911978BCD3B70C34B
  577. 1069 DATA 7178FE3020083E00CDE970C34B715F3AE19601020078BB280A7BCDAC70CD
  578. 1070 DATA 7278C34B713E07CD2F70C34B71AF32D9967BFE41F8FE4CF0D64107072130
  579. 1071 DATA 925F160019EBCD3B70C97B2AED96772322ED96E5C121629BB7ED42C0D53E
  580. 1072 DATA 13CDE97011FD98CD3C44280611E789CD3B7021619A22ED963E11CDE970D1
  581. 1073 DATA C93AE837E6F0FE30C07BD5CD3B00D1C9B7C85FCDE970C911E19221708D3E
  582. 1074 DATA 01CDE171C39A70218F784F060009E9C31F79C35779C33979C3A370C3DB78
  583. 1075 DATA C34E79C39B79C3B379C3B978C34579C37479C30D79C3AA79C3C279118993
  584. 1076 DATA 21E68E3E01CDE171C39A70322D983E04CDE171C39A703A2D98320197C34B
  585. 1077 DATA 7011719321D48E3E01CDE171C39A7021F1784F060009E9C30279C3F7783E
  586. 1078 DATA 04CDE171C3A370C3010200794B703E04CDE171C3A370C34B7011BE94215B
  587. 1079 DATA 90CDD17932F496CD1A70C34B703E04CDE171C3A370110E8CCD3B70CD4900
  588. 1080 DATA CD2F7032E196C34B70CDCB793A2D9832D896C34B70CDCB7932DA96C34B70
  589. 1081 DATA CDCB7932DB96C34B70CDCB7932DC96B728063E03060118043E06060032E0
  590. 1082 DATA 967832D896C34B70112994215B8F3E01CDE171C39A70322D987A322E983E
  591. 1083 DATA 04CDE171C3A3702A2D987E32E496C34B70110A94213D90CDD17932DD96C3
  592. 1084 DATA 4B70CDCB7932DF96C34B7011D39321278FCDD17932E096C34B70CDCB7932
  593. 1085 DATA DE96C34B7011FC9321488F3E01CDE171C3E879322D983E04CDE171C3EC79
  594. 1086 DATA 3A2D98C9F1C39A70F1C3A3703E04CDFE79C34B70CDFE79C34B7011190102
  595. 1087 DATA 007A90CD3B701114903AD896B72803111090CD3B7011D090CD3B70111490
  596. 1088 DATA 3ADA96B72803111090CD3B7011E090CD3B703ADD96B7280CFE01112E9028
  597. 1089 DATA 081135901803112590CD3B7011EB90CD3B701114903ADC96B72803111090
  598. 1090 DATA CD3B7011F590CD3B701114903ADB96B72803111090CD3B70111B91CD3B70
  599. 1091 DATA 1114903ADE96B72803111090CD3B70112B91110391CD3B701114903ADF96
  600. 1092 DATA B72803111090CD3B70112B91CD3B703AE096115491FE0320051159911819
  601. 1093 DATA FE0C2005115E911810FE0920051164911807FE002003116891CD3B701135
  602. 1094 DATA 91CD3B703A0197CD2F70114991CD3B70110C91CD3B70CD9675113689CD3B
  603. 1095 DATA 70116D91CD3B703AF496D61121BE94017B000102007BEDB12323EBCD3B70
  604. 1096 DATA 117A91CD3B70C91113973E05CDE171C3A370B7282932629BEB3624CDCD7B
  605. 1097 DATA 11E491CD3B70111397CD3B703E31320297AF32619B3E52CD1086C3A370C3
  606. 1098 DATA 497BCDCD7BAF320497210000220897220A97320797320C9711CA91CD3B70
  607. 1099 DATA 210000CD50713E52320E9711B391CD3B702A0897CD50713A0E97FE44C287
  608. 1100 DATA 7BCD1F7EC36D7BFE46C2927BCD147DC36D7BFE52C29D7BCDE57BC36D7BFE
  609. 1101 DATA 43201611C38A3A0497B72807AF32049711AB8BCDF775C34B70FE41200911
  610. 1102 DATA CE8ACDF775C34B7011CE8ACDF775C34B70118191CD3B7011F688CD3B703E
  611. 1103 DATA 0032E29621619922E796C93A0C97FE10FAF67B117389CDD775C3527C3C32
  612. 1104 DATA 0C973E31320297CD0102007C1687C35B7CFE5320403A0C97320D97AF320C
  613. 1105 DATA 973A619B3CE63F3207972A0897232208973A629B211397CDB47C211397CD
  614. 1106 DATA 7F7C32629B3E59CD1086C3527C3A03973202973E46320E97C9FE45200BCD
  615. 1107 DATA B27518003E41320E97C9CD6E7C3A079732619BAF32629B3E4ECD1086C352
  616. 1108 DATA 7CC911CA91CD3B702A0A9723220A97CD5071C93AF696C62077233AF896C6
  617. 1109 DATA 2077233AFA96C62077233AFC96C640E67F77233AFE96C62077233A009777
  618. 1110 DATA 23364E233A039777233E08C93230987EDE2032F5963A3098FE03F823237E
  619. 1111 DATA DE2032F9963A3098FE04F8237EC640E67F32FB963A3098FE05F8237EDE20
  620. 1112 DATA 32FD963A3098FE06F8237E32FF963A3098FE07F8237E3A3098FE08F80102
  621. 1113 DATA 007D237E473A0197B8CA107D3E313A0397C93A0397C93A0C97FE05FA257D
  622. 1114 DATA 119089CDD775C3527C3C320C97CD1687C35B7CFE53C26E7D3A0D97FE10FA
  623. 1115 DATA 457D117389CDD775C3527C3C320D973A07973D473A619BB8C2587CCD6E7C
  624. 1116 DATA AF320C97211397CD7F7C32629B3E59CD1086C3527CC9FE5AC2A77D3A0D97
  625. 1117 DATA FE05FA847D11AE89CDD775C3527C3C320D973A07973D473A619BB8C2587C
  626. 1118 DATA CD6E7CAF320C9732629B3E59CD1086C3527CC9FE46C2F27D3A0797473A61
  627. 1119 DATA 9BB8C2587C3CE63F3207972A089723220897CDED84C3527CCDD97B3A0C97
  628. 1120 DATA 320D97AF320C9732629B3E59CD1086C3527C3E44320E97320497FE5AC8AF
  629. 1121 DATA 320497C9FE42C2147E3A0797473A619BB8C20102007E587CAF32629B3E59
  630. 1122 DATA CD1086C3527C3E43320E97C9FE45C2527CCDB275C3527C3A0C97FE05FA30
  631. 1123 DATA 7E11CE89CDD775C3527C3C320C97CD1687C35B7CFE44C2BC7E3A0797473A
  632. 1124 DATA 619BB8CA7E7E3A0D97FE05FA5B7E11CE89CDD775C3527C3C320D973A0797
  633. 1125 DATA 3D473A619BB8C2587CCD6E7CAF320C9732629B3E59CD1086C3527CC93CE6
  634. 1126 DATA 3F3207972A0897232208973A0C97320D973A629BCDC383C3527CAF320C97
  635. 1127 DATA 32629B4F320497B7CAB37E4F3E0132629B793213973E59CD1086C3527CC9
  636. 1128 DATA FE46C2F57E3A0D97FE05FAD27E119089CDD775C3527C3C320D973A07973D
  637. 1129 DATA 473A619BB8C2587CCD6E7CAF320C9732629B3E59CD1086C3527CC9FE5AC2
  638. 1130 DATA 587F3A0797473A610102007F9BB8C2587C3CE63F3207972A089723220897
  639. 1131 DATA 3A629BFE01C2227F3A1397FE44CA3D7F2AE7963AE2963DB7FA337F361A23
  640. 1132 DATA C3287F11CB98CD2844AF3204973A0C97320D97AF320C9732629B3E59CD10
  641. 1133 DATA 86C3527C3E46320E97C9FE45C2527CCDB275C3527CC5E5067A2151983620
  642. 1134 DATA 2310FBE1C13E05115198CDE171C34B703E04CDE171C34B70215198220597
  643. 1135 DATA CD9A843009112F8ACDD775C34B70CDCD7BAF320797320C97210000220897
  644. 1136 DATA 220A9711CA91CD3B70210000CD50713E313202973E53320E9711B391CD3B
  645. 1137 DATA 702A0897CD50713A0E97FE442006CDCE81C3C17FFE462006CDD280C3C17F
  646. 1138 DATA FE5A2006CDA582C3C17FFE532006CD2E80C3C17FFE422006CD4D83C30102
  647. 1139 DATA 0080C17FFE43201211C38A3A0497B7280311AB8BCDF775C34B70FE412009
  648. 1140 DATA 11CE8ACDF775C34B7011CE8ACDF775C34B703A0C97FE10FA3F8011FA89CD
  649. 1141 DATA D775C3527C3C320C973E313202973A0197320397211397CD7F7C32629B3A
  650. 1142 DATA 089732619B3E53CD1086C3527CCD1687C32E70FE59C2AB803A0797473A61
  651. 1143 DATA 9BB8C03CE63F3207972A0897232208973A629B211397CDB47C3A0C97320D
  652. 1144 DATA 97AF320C973A03973202973E46320E97CDD384C3527CC9FE4EC2C780CD6E
  653. 1145 DATA 7C3A07973C473A619BB8C0AF320C973E46320E97C9FE45C2527CCDB275C3
  654. 1146 DATA 527C3A0C97FE05FAE38011FA89CDD775C3527C3C320C97AF320497211397
  655. 1147 DATA 22EB9621319822E99606000E0078FE08C20E01020081813E2E2AEB967723
  656. 1148 DATA 22EB9606080C0478FE0CF239812AE9967EE67F2322E996FE21FA39812AEB
  657. 1149 DATA 96FE2FCA0181FE3A2809772322EB960CC3FB807932629B2AEB963E247711
  658. 1150 DATA E491CD3B70111397CD3B703A079732619B3E46CD1086C3527CCD1687C32E
  659. 1151 DATA 70FE59C2AE813A0797473A619BB8C03CE63F3207972A0897232208973A0C
  660. 1152 DATA 97320D97AF320C97AF32D5963EFF32D696CD0984C39A81C3A581FEFFC252
  661. 1153 DATA 7C3E5A320E97C932F3963E44320E97C9FE4EC2C381CD6E7C3A07973C473A
  662. 1154 DATA 619BB8C0C37181FE45C2527CCDB275C3527C3A0C97FE05FADF8111FA89CD
  663. 1155 DATA D775C3527C3C320C9721139722EB9621CD9722EF9606012AEF967E2322EF
  664. 1156 DATA 962AEB96772322EB0102008296043AF396B8F2F1813AF39632629B3A0797
  665. 1157 DATA 32619B3E44CD1086C3527CCD1687C32E70FE59C285823A0797473A619BB8
  666. 1158 DATA C03A619B3CE63F3207972A0897232208973A0C97320D97AF320C973A629B
  667. 1159 DATA FE01C264823A1397FE5A2003320497FE5820033204973A0497B728063E5A
  668. 1160 DATA 320E97C9CD0984C37A8232F396C9FEFFC2527C3E5A320E97C9FE4EC29A82
  669. 1161 DATA CD6E7C3A07973C473A619BB8C0C37082FE45C2527CCDB275C3527C3A0C97
  670. 1162 DATA FE05FAB68211FA89CDD775C3527C3C320C973A079732619BAF32629B3A04
  671. 1163 DATA 97B7280A3E443213973E0132629B3E5ACD1086C3527CCD1687C32E70FE59
  672. 1164 DATA 20483A0797473A619BB8C03CE63F3207972A0897232208973A0C97320102
  673. 1165 DATA 00830D97AF320C9711CB98CD28443A0497FE5A2815CD9A843810CDD384C3
  674. 1166 DATA 527CAF3204973E46320E97C93E42320E97C9FE4E2010CD6E7C3A07973C47
  675. 1167 DATA 3A619BB8C0C3EF82FE45C2527CCDB275C3527C3A0C97FE05FA5E8311FA89
  676. 1168 DATA CDD775C3527C3C320C973A079732619BAF32629B3E42CD1086C3527CCD16
  677. 1169 DATA 87C32E70FE5920263A0797473A619BB8C03CE63F3207972A089723220897
  678. 1170 DATA 3A0C97320D97AF320C973E43320E97C9FE4E2010CD6E7C3A07973C473A61
  679. 1171 DATA 9BB8C0C38783FE45C2527CCDB275C3527C322D9821139722E5963A009747
  680. 1172 DATA 212D9835FA4B712AE5967E2322E596B8C2FD837E2322E596212D983557E6
  681. 1173 DATA 805F7AE67FB8CAFC837AC640E67FB311CB9801020084CD1B00C22E70C3D0
  682. 1174 DATA 833AFF964F3AD596B7C03AD696B7280206003A0297D631473AF596D60590
  683. 1175 DATA 322D9821CD9722EF9606003A2D983DF23C8478C34B71322D9811CB98CD13
  684. 1176 DATA 00C2918457E6805F7AE67FFE20FA6D84FE7FCA6D84B9C28484212D98352A
  685. 1177 DATA EF96772322EF9604C38484322E98212D98352AEF96712322EF96043A2E98
  686. 1178 DATA C640E67F2AEF96B3772322EF9604C331843EFF32D59678C34B71D29E843F
  687. 1179 DATA C5D5E5063221CB9836202310FB062021319836202310FB2A0597113198CD
  688. 1180 DATA 1C44220597200D21319811CB98CD1C44E1D1C1C93718F93EFF32D696AF32
  689. 1181 DATA D596E511CB98216199CD2444E1C2ED75C34B7121139722EB9621CB9822E9
  690. 1182 DATA 96AF322D98322E9801020085063236202310FB2AEB967E2322EB96FE2EC2
  691. 1183 DATA 21853A2D98322E98AF322D98C35185B7CA7A852AE996772322E9963A2D98
  692. 1184 DATA 3C322D98FE08FA0785322E98AF322D982AEB967E2322EB96B7CA7A85FE2E
  693. 1185 DATA C239852AE996362F2322E9962AEB967E2322EB96B7CA7A852AE996772322
  694. 1186 DATA E9963A2D983C322D98FE03FA5A852AEB96362411E491CD3B70111397CD3B
  695. 1187 DATA 702AE99636033ADB96B7CAF98511CB98216199CD2444C2F98511D68ACDD7
  696. 1188 DATA 7511CB98CD28442AE9962B7EFE4238FA3522E99611CB98216199CD2444C2
  697. 1189 DATA DD8511CB98CD28442AE996B7ED5220D911468ACD3B70C921CB98113198CD
  698. 1190 DATA 1C443E3A010E00213198EDB1233624113198CD3B7011CB98216199CD0102
  699. 1191 DATA 00862044CA4B71F511E789CDD775F1C3ED7532639B210F973E0177233A02
  700. 1192 DATA 97D631473A629BC6238077230100004F3A619BC6207723814F3E0088473A
  701. 1193 DATA 639B7723814F3E0088473A629BB7CA5A863D32629B7E23814F3E008847C3
  702. 1194 DATA 44863A0297FE32CA8B86D2748679E6C0070781E63FC6207723C3A2863600
  703. 1195 DATA E5211097CD8088E14B427A07070707E60FC620772378E60F070747790707
  704. 1196 DATA E603B0C620772379E63FC62077233AFD967723AF773ADE96B72804233E24
  705. 1197 DATA 77CDBC86C32E70C34B713AF996322D983A2D983DB7FAD786322D983AFB96
  706. 1198 DATA 5FCDE970C3C2863ADC96B7CAF1863A0E97FE53CAF186CDF870C3F186FE11
  707. 1199 DATA C2E6863ADE96B7280C111C92CD3B7011109701020087CD3B70210F977EB7
  708. 1200 DATA CA13875FCDE97023C30687C34B71CD3888C32E70CD7288C31687FE0120F6
  709. 1201 DATA CD7288C32E70FE0128F63210974F3A0297D6314779D6239032629B0600CD
  710. 1202 DATA 7288C32E70FE0128D932619B321197814F3E0088473A619BD62032619BCD
  711. 1203 DATA 7288C32E70FE01CA2687322D98321297814F3E0088473A629B322E982113
  712. 1204 DATA 9722EB963A2E98D601FAAA87322E98CD7288C32E70FE01CA26872AEB9677
  713. 1205 DATA 2322EB96814F3E00884718DACD7288C32E70FE01CA2687D620322F983A02
  714. 1206 DATA 97FE32CA0488D2D98779E6C0070781E63F473A2F98B8CA2D88CD6E7CC92A
  715. 1207 DATA EB963600211097CD80884B427A07070707E60F573A2F98BA20E1CD7288C3
  716. 1208 DATA 2E70FE01CA2687D60102008820322F9878E60F070747790707E603B0473A
  717. 1209 DATA 2F98B8C2D587CD7288C32E70FE01CA2687D6204779E63FB8C2D5872AEB96
  718. 1210 DATA 36003A2D98C34B71216D9722F196CDF870C32E702AF196772322F196473A
  719. 1211 DATA FE96B820EB3ADE96B728103E247723110B92CD3B70116E97CD3B70216D97
  720. 1212 DATA 22F196C34B712AF1967E2322F196FE0DC24B71C9E5C51100007EB7CAB388
  721. 1213 DATA E5AB5FE60F4F060021D6880909E57B0F0F0FE61E4F21B688097EAA2356E1
  722. 1214 DATA AE5F237EAA57E123C38588C1E1C900008110022183310442855206638773
  723. 1215 DATA 088489940AA58BB50CC68DD60EE78FF70000891112239B322446AD573665
  724. 1216 DATA BF74488CC19D5AAFD3BE6CCAE5DB7EE9F7F80D4E756D626572206F660102
  725. 1217 DATA 0089207061636B6574733A0D4E756D626572206F6620726574726965733A
  726. 1218 DATA 0D46696C65206E616D653A244B65726D69742D54525338303E240D240D3F
  727. 1219 DATA 556E7265636F676E697A656420636F6D6D616E64240D3F496C6C6567616C
  728. 1220 DATA 20636861726163746572240D3F4E6F7420636F6E6669726D6564243F556E
  729. 1221 DATA 61626C6520746F207265636569766520696E6974696174650D243F556E61
  730. 1222 DATA 626C6520746F20726563656976652066696C65206E616D650D243F556E61
  731. 1223 DATA 626C6520746F207265636569766520656E64206F662066696C650D243F55
  732. 1224 DATA 6E61626C6520746F207265636569766520646174610D243F53797374656D
  733. 1225 DATA 20444F53206572726F720D243F556E61626C0102008A6520746F20726563
  734. 1226 DATA 6569766520616E2061636B6E6F776C656467656D656E742066726F6D2074
  735. 1227 DATA 686520686F73740D240D3F556E61626C6520746F2066696E642066696C65
  736. 1228 DATA 0D243F556E61626C6520746F2072656E616D652066696C65240D3F537973
  737. 1229 DATA 74656D20444F53206572726F72240D3F556E61626C6520746F2074656C6C
  738. 1230 DATA 20686F73742074686174207468652073657373696F6E2069732066696E69
  739. 1231 DATA 73686564240D3F556E61626C6520746F2074656C6C20686F737420746F20
  740. 1232 DATA 6C6F676F75742407436F6D706C6574656424074661696C6564242552656E
  741. 1233 DATA 616D696E672066696C6520746F20240D3C436C6F73696E6720746865206C
  742. 1234 DATA 6F672066696C653E0102008B240D3C436F6E6E656374656420746F207265
  743. 1235 DATA 6D6F746520686F73742C207479706520244320746F2072657475726E3E0D
  744. 1236 DATA 3C434C4541523E20697320436F6E74726F6C2D5F0D240D3C436F6E6E6563
  745. 1237 DATA 74696F6E20636C6F7365642C206261636B206174206D6963726F3E242043
  746. 1238 DATA 6F6E74726F6C2D24202854797065204C656674204172726F7720746F2073
  747. 1239 DATA 656E64204354524C2D53290D2420284E6F7420696D706C656D656E746564
  748. 1240 DATA 290D2407496E7465727275707465642444495220203A300D0D46696C6520
  749. 1241 DATA 4B494C4C4544240D0D2B2B20426164206472697665206E616D65240D2043
  750. 1242 DATA 6F6E6669726D2077697468203C454E5445523E2C2063616E63656C200102
  751. 1243 DATA 008C77697468203C425245414B3E20240D5479706520746865206E657720
  752. 1244 DATA 657363617065206368617261637465723A2020240D42594520746F20686F
  753. 1245 DATA 737420284C4F474F55542920616E64206578697420746F20444F530D434F
  754. 1246 DATA 4E4E45435420746F20686F7374206F6E2073656C656374656420706F7274
  755. 1247 DATA 0D444952206F66206C6F63616C206469736B0D4558495420746F20444F53
  756. 1248 DATA 0D46494E4953482072756E6E696E67204B65726D6974206F6E2074686520
  757. 1249 DATA 686F73740D48454C5020627920676976696E672074686973206D65737361
  758. 1250 DATA 67650D4B494C4C20612066696C650D4C4F4720746865207465726D696E61
  759. 1251 DATA 6C2073657373696F6E20746F20612066696C0102008D650D4C4F474F5554
  760. 1252 DATA 2074686520686F73740D524543454956452066696C652066726F6D20686F
  761. 1253 DATA 73740D53454E442066696C6520746F20686F73740D534554206120706172
  762. 1254 DATA 616D657465720D53484F572074686520706172616D65746572730D535441
  763. 1255 DATA 545553206F66204B65726D6974240D42417564202872617465290D424C6F
  764. 1256 DATA 636B2D636865636B2D747970652028666F72206572726F72206465746563
  765. 1257 DATA 74696F6E0D444542756767696E67206D6F64652028746F20646973706C61
  766. 1258 DATA 79207061636B657473290D45736361706520286368617261637465722064
  767. 1259 DATA 7572696E6720434F4E4E454354290D46696C652D6D6F64652028666F7220
  768. 1260 DATA 6F7574676F696E670102008E2066696C6573290D49626D20287061726974
  769. 1261 DATA 7920616E64207475726E2061726F756E642068616E646C696E67290D4C6F
  770. 1262 DATA 63616C2D6563686F202868616C662F6475706C6578290D50417269747920
  771. 1263 DATA 28666F7220636F6D6D756E69636174696F6E206C696E65290D504F727420
  772. 1264 DATA 28746F20636F6D6D756E6963617465206F6E290D5052696E746572202874
  773. 1265 DATA 6F207072696E74207465726D696E616C2073657373696F6E290D56743532
  774. 1266 DATA 2D656D756C6174696F6E0D5761726E696E672028666F722066696C656E61
  775. 1267 DATA 6D6520636F6E666C6963747329240D5041442D434841520D50414444494E
  776. 1268 DATA 47240D312D4348415241435445522D434845434B53554D0D322D43480102
  777. 1269 DATA 008F415241435445522D434845434B53554D0D332D434841524143544552
  778. 1270 DATA 2D4352432D4343495454240D4556454E2020204D41524B20204E4F4E4520
  779. 1271 DATA 20204F44442020205350414345240D4F464620204F4E240D4E4F20202059
  780. 1272 DATA 4553240D5354414E4441524420525332333220706F7274240D3F20205468
  781. 1273 DATA 6973206D6573736167650D432020436C6F73652074686520636F6E6E6563
  782. 1274 DATA 74696F6E0D302020287A65726F29205472616E736D69742061204E554C4C
  783. 1275 DATA 0D532020537461747573206F662074686520636F6E6E656374696F6E0D54
  784. 1276 DATA 79706520746865206573636170652063686172616374657220616761696E
  785. 1277 DATA 20746F2073656E6420697420746F207468650102009020686F73740D0D43
  786. 1278 DATA 6F6D6D616E643E24206F6E24206F6666240D4C6F63616C206563686F2420
  787. 1279 DATA 64656661756C7424204153434949242062696E617279240D415343494920
  788. 1280 DATA 2020202042494E415259202020202044454641554C54240D202020202035
  789. 1281 DATA 302020202020373520202020203131302020203133342E35202020203135
  790. 1282 DATA 3020202033303020202036303020202020313230300D2020203138303020
  791. 1283 DATA 202032303030202020203234303020202020333630302020203438303020
  792. 1284 DATA 20373230302020393630302020203139323030240D5654353220656D756C
  793. 1285 DATA 6174696F6E240D46696C65204D6F6465240D49424D20666C6167240D4669
  794. 1286 DATA 6C65207761726E69010200916E67240D5072696E746572240D4573636170
  795. 1287 DATA 6520636861723A20240D446562756767696E67206D6F6465240D50617269
  796. 1288 DATA 74793A20240D426C6F636B20636865636B20747970653A20242D63686172
  797. 1289 DATA 6163746572246E6F6E65246D61726B247370616365246F6464246576656E
  798. 1290 DATA 244C696E652053706565643A202420426175640D241C1F0D244B65726D69
  799. 1291 DATA 742D3830205620332E3520285452532D3830204D6F64656C20312F33290D
  800. 1292 DATA 24082008242008241D1E241C1A1A19191919191919191919191919191919
  801. 1293 DATA 191919241C1A1A1A19191919191919191919191919191919191919241C24
  802. 1294 DATA 1C1A1A1A1A1919191919191919191919241C1A1A1A1A1A1A241C1A1A0102
  803. 1295 DATA 00921A1A1A1A1A1A1A1A1A1A241C1A1A1A1A1A1A1A1F525061636B3A2024
  804. 1296 DATA 1C1A1A1A1A1A1A1A1A1A1A1F535061636B3A20241B2400001A2400001924
  805. 1297 DATA 0000182400001C1F240024000024240000241C2400001B2400001F240000
  806. 1298 DATA 1E24100342594524212107434F4E4E454354240000034449522424240345
  807. 1299 DATA 524124272704455849542403030646494E495348241B1B03474554240C0C
  808. 1300 DATA 0448454C50240606044B494C4C242727034C4F47240909064C4F474F5554
  809. 1301 DATA 241E1E0752454345495645240C0C0453454E44240F0F0353455424121204
  810. 1302 DATA 53484F57241515065354415455532418180C044241554424212110424C4F
  811. 1303 DATA 434B2D434845434B2D545950452418180944010200934542554747494E47
  812. 1304 DATA 242727064553434150452400000946494C452D4D4F44452412120349424D
  813. 1305 DATA 2403030A4C4F43414C2D4543484F2406060650415249545924151504504F
  814. 1306 DATA 5254241E1E075052494E5445522424240E565435322D454D554C4154494F
  815. 1307 DATA 4E241B1B075741524E494E47240F0F02085041442D434841522400000750
  816. 1308 DATA 414444494E472403030314312D4348415241435445522D434845434B5355
  817. 1309 DATA 4D24313114322D4348415241435445522D434845434B53554D2432321533
  818. 1310 DATA 2D4348415241435445522D4352432D434349545424333305044556454E24
  819. 1311 DATA 0000044D41524B240303044E4F4E45240606034F44442409090553504143
  820. 1312 DATA 45240C0C02024F4E01020094240101034F46462400000305415343494924
  821. 1313 DATA 01010642494E4152592402020744454641554C5424000001085354414E44
  822. 1314 DATA 41524424EB00EB0002024E4F240000035945532401010D3F50726F677261
  823. 1315 DATA 6D206572726F723A2020496E76616C696420434F4D4E442063616C6C240D
  824. 1316 DATA 3F416D626967756F7573240D3F496C6C6567616C20696E7075742066696C
  825. 1317 DATA 6520737065632420436F6E6669726D2077697468203C454E5445523E2C20
  826. 1318 DATA 43616E63656C2077697468203C425245414B3E240D241002353024000002
  827. 1319 DATA 373524111103313130242222053133342E35243333033135302444440333
  828. 1320 DATA 30302455550336303024666604313230302477770431383030248888013B
  829. 1321 DATA 00950432303030249999043234303024AAAA043336303024BBBB04343830
  830. 1322 DATA 3024CCCC043732303024DDDD043936303024EEEE05313932303024FFFF01
  831. 1323 DATA 0DD796000000010100000000061F0104ED96619A0112F49655205E080500
  832. 1324 DATA 0000000D0D2323313131010405975198020200706967756F7573240D3F49
  833. 1325 DATA 6C6C6567616C20696E7075742066696C6520737065632420436F6E666972
  834. 1326 DATA 6D2077697468203C454E5445523E2C2043616E63656C2077697468203C42
  835. 1327 DATA 5245414B3E240D2410023530240000023735241111033131302422220531
  836. 1328 DATA 33342E352433330331353024444403333030245555033630302466660431
  837. 1329 DATA 3230302477770431383030248888013B0095043230303024999904323430
  838. 1330 DATA 3024AAAA043336303024BBBB043438303024CCCC043732303024DDDD0439
  839. 1331 DATA 36303024EEEE05313932303024FFFF010DD796000000010100000000061F
  840. 1332 DATA 0104ED96619A0112F49655205E0805000000000D0D232331
  841. 10570 DATA "*"
  842. <<< trsget.src >>>
  843. ;    RECEIVE COMMAND
  844. READ:    LD     DE,DATA    ; WHERE TO PUT THE TEXT (IF ANY.)
  845.     LD     A,CMTXT
  846.     CALL   COMND    ; GET EITHER SOME TEXT OR A CONFIRM.
  847.     JP     KERMT3    ;  DIDN'T GET ANYTHING.
  848.     OR     A        ; GET ANY CHARS?
  849.     JR     Z,READ1    ; NOPE, JUST A REGULAR SEND.
  850.     LD     (ARGBLK+1),A    ; STORE THE NUMBER OF CHARS.
  851.     EX   DE,HL               ; GET POINTER INTO HL.
  852.     LD     (HL),'$'    ; PUT IN A DOLLAR SIGN FOR PRINTING.
  853.     CALL   INIT    ; CLEAR THE LINE AND INITIALIZE THE BUFFERS.
  854.     LD     DE,SCRFLN    ; POSITION CURSOR
  855.     CALL   PRTSTR
  856.     LD     DE,DATA    ; PRINT THE FILE NAME
  857.     CALL   PRTSTR
  858.     LD     A,'1'    ; START WITH SINGLE CHARACTER CHECKSUM
  859.     LD     (CURCHK),A    ; SAVE THE TYPE
  860.     XOR    A        ; START A PACKET ZERO.
  861.     LD     (ARGBLK),A
  862.     LD     A,'R'    ; RECEIVE INIT PACKET.
  863.     CALL   SPACK    ; SEND THE PACKET.
  864.     JP     KERMT3    ;  DIE!
  865.     JP     READ12
  866. READ1:    CALL   INIT    ; CLEAR THE LINE AND INITIALIZE THE BUFFERS.
  867. READ12:    XOR    A
  868.     LD    (CZSEEN),A
  869.     LD     HL,0
  870.     LD     (NUMPKT),HL    ; SET THE NUMBER OF PACKETS TO ZERO.
  871.     LD     (NUMRTR),HL    ; SET THE NUMBER OF RETRIES TO ZERO.
  872.     LD     (PKTNUM),A    ; SET THE PACKET NUMBER TO ZERO.
  873.     LD     (NUMTRY),A    ; SET THE NUMBER OF TRIES TO ZERO.
  874.     LD     DE,SCRNRT    ; POSITION CURSOR
  875.     CALL   PRTSTR
  876.     LD     HL,0
  877.     CALL   NOUT    ; WRITE THE NUMBER OF RETRIES.
  878.     LD     A,'R'
  879.     LD     (STATE),A    ; SET THE STATE TO RECEIVE INITIATE.
  880. ; RECEIVE STATE TABLE SWITCHER.
  881. READ2:    LD     DE,SCRNP    ; POSITION CURSOR
  882.     CALL   PRTSTR
  883.     LD     HL,(NUMPKT)
  884.     CALL   NOUT    ; WRITE THE CURRENT PACKET NUMBER.
  885.     LD     A,(STATE)    ; GET THE STATE.
  886.     CP     'D'        ; ARE WE IN THE DATA RECEIVE STATE?
  887.     JP     NZ,READ3
  888.     CALL   RDATA
  889.     JP     READ2
  890. READ3:    CP     'F'        ; ARE WE IN THE FILE RECEIVE STATE?
  891.     JP     NZ,READ4
  892.     CALL   RFILE    ; CALL RECEIVE FILE.
  893.     JP     READ2
  894. READ4:    CP     'R'        ; ARE WE IN THE RECEIVE-INITIATE STATE?
  895.     JP     NZ,READ5
  896.     CALL   RINIT
  897.     JP     READ2
  898. READ5:    CP     'C'        ; ARE WE IN THE RECEIVE-COMPLETE STATE?
  899.     JR     NZ,READ6
  900.     LD     DE,INFMS3    ; PUT IN "COMPLETE" MESSAGE.
  901.     LD    A,(CZSEEN)
  902.     OR     A        ;  .  .  .
  903.     JR     Z,READ5A    ; NO.
  904.     XOR    A        ; YES, CLEAR FLAG.
  905.     LD    (CZSEEN),A
  906.     LD     DE,INMS13    ; ISSUE "INTERRUPTED" MESSAGE.
  907. READ5A:    CALL   FINMES    ; PRINT COMPLETION MESSAGE IN RIGHT PLACE.
  908.     JP     KERMIT
  909. READ6:    CP     'A'        ; ARE WE IN THE RECEIVE-"ABORT" STATE?
  910.     JR     NZ,READ7
  911.     LD     DE,INFMS4    ; PRINT MESSAGE.
  912.     CALL   FINMES
  913.     JP     KERMIT
  914. READ7:    LD     DE,INFMS4    ; ANYTHING ELSE IS EQUIVALENT TO "ABORT".
  915.     CALL   FINMES
  916.     JP     KERMIT
  917. ;    INITIALIZE BUFFERS AND CLEAR LINE.
  918. INIT:    LD     DE,OUTLIN    ; PUT BANNER ON SCREEN
  919.     CALL   PRTSTR
  920.     LD     DE,OUTLN2    ; PUT STATISTICS HEADERS ON THE SCREEN
  921.     CALL   PRTSTR    ;  ONLY FOR SCREEN-FORMATTING VERSIONS.
  922. INIT1:    LD     A,BUFSIZ    ; BUFFER SIZE.
  923.     LD     (CHRCNT),A    ; NUMBER OF CHARS LEFT.
  924.     LD     HL,BUFF    ; ADDR FOR BEGINNING.
  925.     LD     (BUFPNT),HL    ; STORE ADDR FOR BEGINNING.
  926.     RET    
  927. ;    RECEIVE ROUTINES
  928. ;    RECEIVE INIT
  929. RINIT:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  930.     CP     IMXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  931.     JP     M,RINIT2
  932.     LD     DE,ERMES4
  933.     CALL   ERROR3    ; MOVE CURSOR AND PRINT AN ERROR MESSAGE.
  934.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  935. RINIT2:    INC    A        ; INCREMENT IT.
  936.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  937.     LD     A,'1'    ; RESET BLOCK CHECK TYPE TO SINGLE CHARACTER
  938.     LD     (CURCHK),A    ; STORE AS CURRENT TYPE FOR INITIALIZATION
  939.     CALL   RPACK    ; GET A PACKET.
  940.     JP     NAK    ;  TRASHED PACKET: NAK, RETRY.
  941.     CP     'S'        ; IS IT A SEND INITIATE PACKET?
  942.     JR     NZ,RINIT3    ; IF NOT SEE IF ITS AN ERROR.
  943.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  944.     LD     (OLDTRY),A    ; SAVE IT.
  945.     XOR    A
  946.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  947.     LD     A,(ARGBLK)    ; RETURNED PACKET NUMBER.  (SYNCHRONIZE THEM.)
  948.     INC    A        ; INCREMENT IT.
  949.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  950.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  951.     LD     HL,(NUMPKT)
  952.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  953.     LD     (NUMPKT),HL
  954.     LD     A,(ARGBLK+1)    ; GET THE NUMBER OF ARGUMENTS RECEIVED.
  955.     LD     HL,DATA    ; GET A POINTER TO THE DATA.
  956.     CALL   SPAR    ; GET THE DATA INTO THE PROPER VARIABLES.
  957.     LD     HL,DATA    ; GET A POINTER TO OUR DATA BLOCK.
  958.     CALL   RPAR    ; SET UP THE RECEIVE PARAMETERS.
  959.     LD     (ARGBLK+1),A    ; STORE THE RETURNED NUMBER OF ARGUMENTS.
  960.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  961.     CALL   SPACK    ; SEND THE PACKET.
  962.     JP     ABORT    ;  FAILED, ABORT.
  963.     LD    A,(INICHK)
  964.     LD     (CURCHK),A    ; FOR ALL FUTURE PACKETS
  965.     LD     A,'F'    ; SET THE STATE TO FILE SEND.
  966.     LD     (STATE),A
  967.     RET    
  968. RINIT3:    CP     'E'        ; IS IT AN ERROR PACKET.
  969.     JR     NZ,NAK0    ; IF NOT NAK WHATEVER IT IS.
  970.     CALL   ERROR
  971.     JR     ABORT
  972. ; THESE ARE SOME UTILITY ROUTINES.
  973. ;    ABORT
  974. ABORT:    LD     A,'A'    ; OTHERWISE ABORT.
  975.     LD     (STATE),A
  976.     RET    
  977. ;    NAK
  978. NAK0:    CALL   UPDRTR    ; UPDATE NUMBER OF RETRIES.
  979. NAK:    LD     A,(PKTNUM)    ; GET THE PACKET NUMBER WE'RE WAITING FOR.
  980.     LD     (ARGBLK),A
  981.     XOR    A        ; NO DATA.
  982.     LD     (ARGBLK+1),A
  983.     LD     A,'N'    ; NAK THAT PACKET.
  984.     CALL   SPACK
  985.     JP     ABORT    ;  GIVE UP.
  986.     RET                ; GO AROUND AGAIN.
  987. UPDRTR:    LD     DE,SCRNRT    ; POSITION CURSOR
  988.     CALL   PRTSTR
  989.     LD     HL,(NUMRTR)
  990.     INC    HL        ; INCREMENT THE NUMBER OF RETRIES
  991.     LD     (NUMRTR),HL
  992.     CALL   NOUT    ; WRITE THE NUMBER OF RETRIES.
  993.     RET    
  994. ;    THIS ROUTINE SETS UP THE DATA FOR INIT PACKET (EITHER THE
  995. ;    SEND_INIT OR ACK PACKET).
  996. RPAR:    LD     A,(RPSIZ)    ; GET THE RECEIVE PACKET SIZE.
  997.     ADD    A,' '            ; ADD A SPACE TO MAKE IT PRINTABLE.
  998.     LD     (HL),A        ; PUT IT IN THE PACKET.
  999.     INC    HL        ; POINT TO THE NEXT CHAR.
  1000.     LD     A,(RTIME)    ; GET THE RECEIVE PACKET TIME OUT.
  1001.     ADD    A,' '            ; ADD A SPACE.
  1002.     LD     (HL),A        ; PUT IT IN THE PACKET.
  1003.     INC    HL
  1004.     LD     A,(RPAD)    ; GET THE NUMBER OF PADDING CHARS.
  1005.     ADD    A,' '
  1006.     LD     (HL),A
  1007.     INC    HL
  1008.     LD     A,(RPADCH)    ; GET THE PADDING CHAR.
  1009.     ADD    A,100O    ; UNCONTROL IT.
  1010.     AND    7FH
  1011.     LD     (HL),A
  1012.     INC    HL
  1013.     LD     A,(REOL)    ; GET THE EOL CHAR.
  1014.     ADD    A,' '
  1015.     LD     (HL),A
  1016.     INC    HL
  1017.     LD     A,(RQUOTE)    ; GET THE QUOTE CHAR.
  1018.     LD     (HL),A
  1019.     INC    HL
  1020.     LD     (HL),'N'    ; WE DO NOT DO 8-BIT QUOTING YET
  1021.     INC    HL        ; ADVANCE TO NEXT
  1022.     LD    A,(INICHK)
  1023.     LD     (HL),A        ; STORE IT
  1024.     INC    HL        ; ADVANCE POINTER
  1025.     LD     A,08H    ; SIX PIECES OF DATA.
  1026.     RET    
  1027. ;    THIS ROUTINE READS IN ALL THE SEND_INIT PACKET INFORMATION.
  1028. SPAR:    LD     (TEMP4),A    ; SAVE THE NUMBER OF ARGUMENTS.
  1029.     LD     A,(HL)        ; GET THE MAX PACKET SIZE.
  1030.     SUB    20H            ; SUBTRACT A SPACE.
  1031.     LD     (SPSIZ),A    ; SAVE IT.
  1032.     LD     A,(TEMP4)
  1033.     CP     3        ; FEWER THAN THREE PIECES?
  1034.     RET   M            ; IF SO WE ARE DONE.
  1035.     INC    HL
  1036.     INC    HL        ; INCREMENT PAST THE TIME OUT INFO.
  1037.     LD     A,(HL)        ; GET THE NUMBER OF PADDING CHARS.
  1038.     SUB    20H
  1039.     LD     (SPAD),A
  1040.     LD     A,(TEMP4)
  1041.     CP     4        ; FEWER THAN FOUR PIECES?
  1042.     RET   M            ; IF SO WE ARE DONE.
  1043.     INC    HL
  1044.     LD     A,(HL)        ; GET THE PADDING CHAR.
  1045.     ADD    A,100O    ; RE-CONTROLIFY IT.
  1046.     AND    7FH
  1047.     LD     (SPADCH),A
  1048.     LD     A,(TEMP4)
  1049.     CP     5        ; FEWER THAN FIVE PIECES?
  1050.     RET   M            ; IF SO WE ARE DONE.
  1051.     INC    HL
  1052.     LD     A,(HL)        ; GET THE EOL CHAR.
  1053.     SUB    20H
  1054.     LD     (SEOL),A
  1055.     LD     A,(TEMP4)
  1056.     CP     6        ; FEWER THAN SIX PIECES?
  1057.     RET   M            ; IF SO WE ARE DONE.
  1058.     INC    HL
  1059.     LD     A,(HL)        ; GET THE QUOTE CHAR.
  1060.     LD     (SQUOTE),A
  1061.     LD     A,(TEMP4)    ; GET THE AMOUNT OF DATA SUPPLIED
  1062.     CP     7        ; HAVE AN 8-BIT QUOTE?
  1063.     RET   M            ; IF NOT THERE, ALL DONE
  1064.     INC    HL        ; YES, GET THE CHARACTER
  1065.     LD     A,(HL)        ; GET THE SUPPLIED CHARACTER
  1066. ; PERHAPS WE SHOULD VALIDATE THAT THE 8-BIT QUOTE CHARACTER IS ONLY
  1067. ; 'Y' OR 'N', HOWEVER, IF THE OTHER END REALLY DESIRES 8-BIT QUOTING,
  1068. ; IT SHOULD GIVE AN ERROR DUE TO OUR STATING THAT WE DO NOT DO 8-BIT
  1069. ; QUOTING AT ALL.
  1070.     LD     A,(TEMP4)    ; DETERMINE IF BLOCK CHECK TYPE GIVEN
  1071.     CP     8        ; IS THE FIELD THERE?
  1072.     RET   M            ; IF NOT, ALL DONE
  1073.     INC    HL        ; POINT TO THE CHARACTER
  1074.     LD     A,(HL)        ; GET THE VALUE
  1075.     LD     B,A        ; COPY VALUE
  1076.     LD     A,(CHKTYP)    ; GET OUR TYPE
  1077.     CP     B        ; IS IT OUR DESIRED TYPE?
  1078.     JR     Z,SPAR01    ; IF SO, USE IT
  1079.     LD     A,'1'    ; NO, USE SINGLE CHARACTER
  1080. SPAR01:    LD    (INICHK),A
  1081.     RET                ; AND RETURN
  1082. ;    RECEIVE FILE
  1083. RFILE:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  1084.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  1085.     JP     M,RFILE1
  1086.     LD     DE,ERMES5
  1087.     CALL   ERROR3    ; MOVE CURSOR AND PRINT AN ERROR MESSAGE.
  1088.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  1089. RFILE1:    INC    A        ; INCREMENT IT.
  1090.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  1091.     CALL   RPACK    ; GET A PACKET.
  1092.     JP     NAK    ;  TRASHED PACKET: NAK, RETRY.
  1093.     CP     'S'        ; IS IT A SEND INITIATE PACKET?
  1094.     JP     NZ,RFILE2    ;  NO, TRY NEXT TYPE.
  1095.     LD     A,(OLDTRY)    ; GET THE NUMBER OF TRIES.
  1096.     CP     IMXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  1097.     JP     M,RFIL12    ; IF NOT PROCEED.
  1098.     LD     DE,ERMES4
  1099.     CALL   ERROR3    ; MOVE CURSOR AND PRINT AN ERROR MESSAGE.
  1100.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  1101. RFIL12:    INC    A        ; INCREMENT IT.
  1102.     LD     (OLDTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  1103.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  1104.     DEC    A        ; DECREMENT.
  1105.     LD     B,A
  1106.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER
  1107.     CP     B        ; IS THE PACKET'S NUMBER ONE LESS THAN NOW?
  1108.     JP     NZ,NAK0    ; NO, NAK AND TRY AGAIN.
  1109.     CALL   UPDRTR    ; UPDATE THE RETRY COUNT.
  1110.     XOR    A
  1111.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  1112.     LD     HL,DATA    ; GET A POINTER TO OUR DATA BLOCK.
  1113.     CALL   RPAR    ; SET UP THE PARAMETER INFORMATION.
  1114.     LD     (ARGBLK+1),A    ; SAVE THE NUMBER OF ARGUMENTS.
  1115.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1116.     CALL   SPACK    ; SEND THE PACKET.
  1117.     JP     ABORT    ;  FAILED, ABORT.
  1118.     RET    
  1119. RFILE2:    CP     'Z'        ; IS IT AN EOF PACKET?
  1120.     JP     NZ,RFILE3    ;  NO, TRY NEXT TYPE.
  1121.     LD     A,(OLDTRY)    ; GET THE NUMBER OF TRIES.
  1122.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  1123.     JP     M,RFIL21    ; IF NOT PROCEED.
  1124.     LD     DE,ERMES6
  1125.     CALL   ERROR3    ; MOVE CURSOR AND PRINT AN ERROR MESSAGE.
  1126.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  1127. RFIL21:    INC    A        ; INCREMENT IT.
  1128.     LD     (OLDTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  1129.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  1130.     DEC    A        ; DECREMENT.
  1131.     LD     B,A
  1132.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER
  1133.     CP     B        ; IS THE PACKET'S NUMBER ONE LESS THAN NOW?
  1134.     JP     NZ,NAK0    ; NO, NAK IT AND TRY AGAIN.
  1135.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  1136.     XOR    A
  1137.     LD     (NUMTRY),A    ; RESET NUMBER OF TRIES.
  1138.     LD     (ARGBLK+1),A    ; NO DATA.  (THE PACKET NUMBER IS IN ARGBLK.)
  1139.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1140.     CALL   SPACK    ; SEND THE PACKET.
  1141.     JP     ABORT    ;  FAILED, ABORT.
  1142.     RET    
  1143. RFILE3:    CP     'F'        ; START OF FILE?
  1144.     JP     NZ,RFILE4
  1145.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  1146.     LD     B,A
  1147.     LD     A,(ARGBLK)
  1148.     CP     B        ; IS IT THE RIGHT PACKET NUMBER?
  1149.     JP     NZ,NAK0    ; NO, NAK IT AND TRY AGAIN.
  1150.     INC    A        ; INCREMENT THE PACKET NUMBER.
  1151.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  1152.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  1153.     LD     HL,(NUMPKT)
  1154.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  1155.     LD     (NUMPKT),HL
  1156.     CALL   GOFIL    ; GET A FILE TO WRITE TO.
  1157.     JP     ABORT
  1158.     CALL   INIT1    ; INITIALIZE ALL THE BUFFERS.
  1159.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  1160.     LD     (OLDTRY),A    ; SAVE IT.
  1161.     XOR    A
  1162.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  1163.     LD     (ARGBLK+1),A    ; NO DATA.  (THE PACKET NUMBER IS IN ARGBLK.)
  1164.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1165.     CALL   SPACK    ; SEND THE PACKET.
  1166.     JP     ABORT
  1167.     LD     A,'D'    ; SET THE STATE TO DATA RECEIVE.
  1168.     LD     (STATE),A
  1169.     LD    (CZSEEN),A
  1170.     CP     'Z'        ; AND DIDN'T WANT ANY MORE
  1171.     RET   Z            ; IF THAT WAS THE REQUEST, KEEP TELLING OTHER END
  1172.     XOR    A        ; OTHERWISE, CLEAR FLAG (CONTROL-X IS ONLY FOR ONE FILE)
  1173.     LD    (CZSEEN),A
  1174.     RET    
  1175. RFILE4:    CP     'B'        ; END OF TRANSMISSION.
  1176.     JP     NZ,RFILE5
  1177.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  1178.     LD     B,A
  1179.     LD     A,(ARGBLK)
  1180.     CP     B        ; IS IT THE RIGHT PACKET NUMBER?
  1181.     JP     NZ,NAK0    ; NO, NAK IT AND TRY AGAIN.
  1182.     XOR    A        ; NO DATA.  (PACKET NUMBER ALREADY IN ARGBLK).
  1183.     LD     (ARGBLK+1),A
  1184.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1185.     CALL   SPACK    ; SEND THE PACKET.
  1186.     JP     ABORT
  1187.     LD     A,'C'    ; SET THE STATE TO COMPLETE.
  1188.     LD     (STATE),A
  1189.     RET    
  1190. RFILE5:    CP     'E'        ; IS IT AN ERROR PACKET.
  1191.     JP     NZ,ABORT
  1192.     CALL   ERROR
  1193.     JP     ABORT
  1194. ;    RECEIVE DATA
  1195. RDATA:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  1196.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  1197.     JP     M,RDATA1
  1198.     LD     DE,ERMS10
  1199.     CALL   ERROR3    ; DISPLAY ERROR MESSAGE.
  1200.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  1201. RDATA1:    INC    A        ; INCREMENT IT.
  1202.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  1203.     CALL   RPACK    ; GET A PACKET.
  1204.     JP     NAK    ;  TRASHED PACKET: NAK, RETRY.
  1205.     CP     'D'        ; IS IT A DATA PACKET?
  1206.     JP     NZ,RDATA2    ;  NO, TRY NEXT TYPE.
  1207. RDAT11:    LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  1208.     LD     B,A
  1209.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER.
  1210.     CP     B        ; IS THE PACKET'S NUMBER CORRECT?
  1211.     JP     Z,RDAT14
  1212.     LD     A,(OLDTRY)    ; GET THE NUMBER OF TRIES.
  1213.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  1214.     JP     M,RDAT12    ; IF NOT PROCEED.
  1215.     LD     DE,ERMS10
  1216.     CALL   ERROR3    ; DISPLAY ERR MSG.
  1217.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  1218. RDAT12:    INC    A        ; INCREMENT IT.
  1219.     LD     (OLDTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  1220.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  1221.     DEC    A        ; DECREMENT.
  1222.     LD     B,A
  1223.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER
  1224.     CP     B        ; IS THE PACKET'S NUMBER ONE LESS THAN NOW?
  1225.     JP     NZ,NAK0    ; NO, NAK IT AND TRY AGAIN.
  1226.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  1227.     XOR    A
  1228.     LD     (NUMTRY),A    ; RESET NUMBER OF TRIES.
  1229.     LD     (ARGBLK+1),A    ; NO DATA.  (THE PACKET NUMBER IS IN ARGBLK.)
  1230.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1231.     CALL   SPACK    ; SEND THE PACKET.
  1232.     JP     ABORT    ;  FAILED, ABORT.
  1233.     RET    
  1234. RDAT14:    INC    A        ; INCREMENT THE PACKET NUMBER.
  1235.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  1236.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  1237.     LD     HL,(NUMPKT)
  1238.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  1239.     LD     (NUMPKT),HL
  1240.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  1241.     LD     (OLDTRY),A    ; SAVE IT.
  1242.     LD     A,(ARGBLK+1)    ; GET THE LENGTH OF THE DATA.
  1243.     CALL   PTCHR
  1244.     JP     ABORT    ;  UNABLE TO WRITE OUT CHARS; ABORT.
  1245.     XOR    A
  1246.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  1247.     LD     (ARGBLK+1),A    ; NO DATA.  (PACKET NUMBER STILL IN ARGBLK.)
  1248.     LD     C,A        ; ASSUME NO DATA
  1249.     LD    (CZSEEN),A
  1250.     OR     A        ;  .  .  .
  1251.     JP     Z,RDAT15    ; ZERO IF NOT TYPED
  1252.     LD     C,A        ; GET THE TYPE OF CHARACTER TYPED
  1253.     LD     A,1        ; ONE DATA CHARACTER
  1254.     LD     (ARGBLK+1),A    ; SAVE THE COUNT
  1255.     LD     A,C        ; GET THE POSSIBLE DATA CHARACTER
  1256.     LD     (DATA),A    ; STORE IN DATA AREA
  1257. RDAT15:    LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1258.     CALL   SPACK    ; SEND THE PACKET.
  1259.     JP     ABORT
  1260.     RET    
  1261. RDATA2:    CP     'F'        ; START OF FILE?
  1262.     JP     NZ,RDATA3    ;  NO, TRY NEXT TYPE.
  1263.     LD     A,(OLDTRY)    ; GET THE NUMBER OF TRIES.
  1264.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  1265.     JP     M,RDAT21    ; IF NOT PROCEED.
  1266.     LD     DE,ERMES5
  1267.     CALL   ERROR3    ; DISPLAY ERR MSG.
  1268.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  1269. RDAT21:    INC    A        ; INCREMENT IT.
  1270.     LD     (OLDTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  1271.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  1272.     DEC    A        ; DECREMENT.
  1273.     LD     B,A
  1274.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER
  1275.     CP     B        ; IS THE PACKET'S NUMBER ONE LESS THAN NOW?
  1276.     JP     NZ,NAK0    ; NO, NAK IT AND TRY AGAIN.
  1277.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  1278.     XOR    A
  1279.     LD     (NUMTRY),A    ; RESET NUMBER OF TRIES.
  1280.     LD     (ARGBLK+1),A    ; NO DATA.  (THE PACKET NUMBER IS IN ARGBLK.)
  1281.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1282.     CALL   SPACK    ; SEND THE PACKET.
  1283.     JP     ABORT    ;  FAILED, ABORT.
  1284.     RET    
  1285. RDATA3:    CP     'Z'        ; IS IT A EOF PACKET?
  1286.     JP     NZ,RDATA4    ; TRY AND SEE IF ITS AN ERROR.
  1287.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  1288.     LD     B,A
  1289.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER
  1290.     CP     B        ; IS THE PACKET'S NUMBER CORRECT?
  1291.     JP     NZ,NAK0    ; NO, NAK IT AND TRY AGAIN.
  1292.     INC    A        ; INCREMENT THE PACKET NUMBER.
  1293.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  1294.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  1295.     LD     HL,(NUMPKT)
  1296.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  1297.     LD     (NUMPKT),HL
  1298.     LD     A,(ARGBLK+1)    ; GET THE DATA LENGTH    
  1299.     CP     1        ; HAVE ONE ITEM?
  1300.     JP     NZ,RDAT33    ; IF NOT, IGNORE DATA
  1301.     LD     A,(DATA)    ; YES, GET THE CHARACTER
  1302.     CP     'D'        ; IS IT A 'D' FOR DISCARD?
  1303.     JP     Z,RDAT36    ; IF SO, PUNT FILE
  1304. RDAT33:    LD     HL,(BUFPNT)    ; GET THE DMA POINTER.
  1305.     LD     A,(CHRCNT)    ; GET THE NUMBER OF CHARS LEFT IN THE DMA.
  1306. RDAT34:    DEC    A        ; LOWER THE COUNT.
  1307.     OR     A
  1308.     JP     M,RDAT35    ; IF FULL THEN STOP.
  1309.     LD     (HL),'Z'-100O    ; PUT IN A ^Z FOR EOF.
  1310.     INC    HL        ; POINT TO THE NEXT SPACE.
  1311.     JP     RDAT34
  1312. RDAT35:    LD     DE,FCB
  1313.     CALL    @CLOSE    ;CLOSE THE FILE
  1314.     XOR    A        ; SINCE WE KEPT THE FILE,
  1315.     LD    (CZSEEN),A
  1316. RDAT36:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  1317.     LD     (OLDTRY),A    ; SAVE IT.
  1318.     XOR    A
  1319.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  1320.     LD     (ARGBLK+1),A    ; NO DATA.  (THE PACKET NUMBER IS IN ARGBLK.)
  1321.     LD     A,'Y'    ; ACKNOWLEDGE PACKET.
  1322.     CALL   SPACK    ; SEND THE PACKET.
  1323.     JP     ABORT
  1324.     LD     A,'F'
  1325.     LD     (STATE),A
  1326.     RET    
  1327. RDATA4:    CP     'E'        ; IS IT AN ERROR PACKET.
  1328.     JP     NZ,ABORT
  1329.     CALL   ERROR
  1330.     JP     ABORT
  1331. <<< trskd.src >>>
  1332. ;get a directory for a drive
  1333. DIR    LD    HL,(402DH)    ;intercept the @exit
  1334.     LD    (ARGBLK),HL    ;vector
  1335.     LD    A,(402FH)
  1336.     LD    (ARGBLK+2),A
  1337.     LD    HL,(4030H)    ;intercept the @abort
  1338.     LD    (ARGBLK+3),HL    ;vector
  1339.     LD    A,(4032H)
  1340.     LD    (ARGBLK+5),A
  1341.     LD    HL,(4409H)    ;intercept the @error
  1342.     LD    (ARGBLK+6),HL    ;vector
  1343.     LD    A,(440BH)
  1344.     LD    (ARGBLK+8),A
  1345.     LD    (ARGBLK+9),SP
  1346.     LD    HL,(CMDPTR)
  1347. DIR1A    LD    A,(HL)
  1348.     CP    CR
  1349.     JR    Z,DIR1B
  1350.     CP    ' '
  1351.     JR    Z,DIR1AA
  1352.     CP    '0'
  1353.     JP    M,DIRERR    ;legal drive number?
  1354.     CP    '9'+1
  1355.     JP    P,DIRERR
  1356.     JR    DIR1C
  1357. DIR1AA    INC    HL
  1358.     JR    DIR1A
  1359. DIR1B    LD    A,'1'        ;default to drive 1
  1360. DIR1C    LD    (DIRSPEC),A
  1361.     LD    A,0C3H        ;replace dos vectors
  1362.     LD    (402DH),A
  1363.     LD    (4030H),A
  1364.     LD    (4409H),A
  1365.     LD    HL,DIR1D    ;route back to kermit
  1366.     LD    (402EH),HL
  1367.     LD    (4031H),HL
  1368.     LD    (440AH),HL
  1369.     LD    HL,DNAM14    ;execute the command
  1370.     JP    4405H        ;DIR :X
  1371. DIR1D    LD    HL,(ARGBLK)    ;return here after 
  1372.     LD    (402DH),HL    ;execution and fix
  1373.     LD    A,(ARGBLK+2)    ;dos
  1374.     LD    (402FH),A
  1375.     LD    HL,(ARGBLK+3)
  1376.     LD    (4030H),HL
  1377.     LD    A,(ARGBLK+5)
  1378.     LD    (4032H),A
  1379.     LD    HL,(ARGBLK+6)
  1380.     LD    (4409H),HL
  1381.     LD    A,(ARGBLK+8)
  1382.     LD    (440BH),A
  1383.     LD    HL,(ARGBLK+9)
  1384.     LD    SP,HL        ;all done
  1385.     JP    KERMIT
  1386. DIRERR    LD    DE,BADDRV    ;bad drive name
  1387.     CALL    PRTSTR
  1388.     JP    KERMIT
  1389. ;kill a trs-80 file
  1390. ERA:    LD     A,CMIFI    ; PARSE A FILE-SPEC
  1391.     LD     DE,KFCB    ; INTO FCB
  1392.     CALL   COMND
  1393.     JP    KERMIT
  1394.     LD    A,CMCFM
  1395.     CALL    COMND
  1396.     JP    KERMT3
  1397.     LD     DE,KFCB
  1398.     CALL    @OPEN
  1399.     JP     Z,ERA1    ; FOUND it
  1400.     LD     DE,ERMS15;"UNABLE TO FIND FILE"
  1401.     CALL   PRTSTR
  1402.     JP     KERMIT
  1403. ERA1:    LD    DE,KFCB
  1404.     CALL    @KILL
  1405.     JR    NZ,ERA2
  1406.     LD     DE,INMS18;" FILE KILLED"
  1407.     CALL   PRTSTR
  1408.     JP     KERMIT
  1409. ERA2:    CALL    ERRORD
  1410.     JP    KERMIT
  1411. ESCPR:    LD     A,(ESCCHR)    ; GET THE ESCAPE CHAR.
  1412.     CP     ' '            ; IS IT A CONTROL CHAR?
  1413.     JP     P,ESCPR2
  1414.     LD     DE,INMS10    ; OUTPUT CONTROL-.
  1415.     CALL   PRTSTR
  1416.     LD     A,(ESCCHR)
  1417.     OR     100O    ; DE-CONTROLIFY.
  1418. ESCPR2:    CALL    CONOUT
  1419.     LD    A,20H
  1420.     CALL    CONOUT
  1421.     RET    
  1422. <<< trsmake.bas >>>
  1423. 10 CLEAR10000
  1424. 20 DEFINTA-Z
  1425. 30 CLS
  1426. 40 H$="0123456789ABCDEF"
  1427. 50 PRINT"THIS IS KERMAKE/BAS":PRINT
  1428. 60 PRINT"IT WILL CREATE A MACHINE LANGUAGE"
  1429. 70 PRINT"PROGRAM CALLED KERMIT/CMD":PRINT
  1430. 100 INPUT"WHICH DRIVE WILL YOU BE USING";D
  1431. 110 IFD<0ORD>3THEN100
  1432. 120 LINEINPUT"PRESS <ENTER> WHEN YOU ARE READY TO BEGIN --> ";A$
  1433. 130 A$="KERMIT/CMD:"+MID$(STR$(D),2,1)
  1434. 140 PRINT"NOW CREATING FILE: ";A$:FORP=1TO300:NEXT
  1435. 150 OPEN"O",1,A$
  1436. 160 READB$
  1437. 170 IFB$="*"THEN280
  1438. 180 X=X+1
  1439. 190 PRINTCHR$(29);:PRINTUSING"PART ### OF 325 PARTS";X;
  1440. 200 FORA=1TOLEN(B$)STEP2
  1441. 210 A1=INSTR(H$,MID$(B$,A,1))-1
  1442. 220 A2=INSTR(H$,MID$(B$,A+1,1))-1
  1443. 230 A3=A1*16+A2
  1444. 240 CK!=CK!+A3
  1445. 250 PRINT#1,CHR$(A3);
  1446. 260 NEXTA
  1447. 270 GOTO160
  1448. 280 CLOSE
  1449. 290 CLS
  1450. 300 A!=976454
  1451. 310 PRINT"CHECKSUM ="CK!" IT SHOULD ="A!:PRINT
  1452. 320 IF CK!=A! GOTO 360
  1453. 330 PRINT"CHECKSUM ERROR. IT IS SUGGESTED THAT YOU DOWNLOAD THIS"
  1454. 340 PRINT"PROGRAM AGAIN AND KILL THE COPY OF KERMIT/CMD PRESENTLY"
  1455. 350 PRINT"SAVED ON DISK":END
  1456. 360 PRINT"CHECKSUM CORRECT!  YOUR COPY OF KERMIT/CMD HAS BEEN VERIFIED."
  1457. 370 END
  1458. 1000 DATA 05064B45524D495401020070ED730E96311097CD1A70AF32099911C291CD
  1459. 1001 DATA 3B70CD4B70C330713A3297D3E8D3E93E6CD3EAC9D5117D92CD3B70D1C9D5
  1460. 1002 DATA E5C5F5CD3300F1C1E1D1C91AFE24C8CD2F701318F6D5CD2B00D1C9110999
  1461. 1003 DATA 1ACB7FC42844116589CD7471119792216D8C3E01CDE171C39A702170704F
  1462. 1004 DATA 060009E9C30177C32871C34271C3C376C30F7BC35E7FC37978C3F079C3F8
  1463. 1005 DATA 79C30976C35B76C3B276C3C174C35A75117589CD3B70C34B7011A089CD3B
  1464. 1006 DATA 70C34B70E5C5211E974E060021B97009E9C3CB70C3D570C3C870C3DA70C3
  1465. 1007 DATA E470C3E670E67FEAE670F680C3E670F680C3E670E67FE2E670F680C3E670
  1466. 1008 DATA E67FC1E1C9D5DBEAE64028FA7BCDAC70D3EBD1C9DBEAE6802019CD450102
  1467. 1009 DATA 007170B728F4FE0D2001C9FE1A2804FE1820E7C620324297C9DBEB473A1E
  1468. 1010 DATA 97FE0678CA4B71E67FC34B713E04CDE171C3A3701109993A0999CB7FC428
  1469. 1011 DATA 44ED7B0E96C32D40116D8CCD3B70C34B70E1232323E9F5C5D5E501F6FF11
  1470. 1012 DATA FFFF0913DA5A71010A0009EB7CB5C450717BC630CD2F70E1D1C1F1C9E1E5
  1471. 1013 DATA 227C95ED737A95ED537E95218495220696220896AF3277953278953EFF32
  1472. 1014 DATA 799511F994CD3B70ED5B7E95CD3B70C9ED7B7A952184952208963EFF3279
  1473. 1015 DATA 952A7C95E9ED7B7A95218495220696220896AF3277953278953EFF327995
  1474. 1016 DATA 11F994CD3B70ED5B7E95CD3B702A7C95E9327695CD3074FE04CA6972FE01
  1475. 1017 DATA CAB872FE02CA0774FE10CA0774FE03CA2D7401020072FE05CA0C72118394
  1476. 1018 DATA CD3B70C9EB2280950600CD6874B7F25372E67FFE1B201A3E07CD2F70AF32
  1477. 1019 DATA 77952A06962B22069622089621789535C31272FE3F2811FE20280DFE0CCC
  1478. 1020 DATA 2670782A8095EBC34B71217795360004FE613806FE7A3002E65F2A809577
  1479. 1021 DATA 23228095C3127211CE94CD3B7011F994CD3B70ED5B7E95CD3B702A08963E
  1480. 1022 DATA 24772A06962B220696118495CD3B70AF327795CD4900FE0D2816FE0C2812
  1481. 1023 DATA FE04F82A0696237723220696CD2F70C3A471FE0CCC2670C34B71228295ED
  1482. 1024 DATA 5380951A4713ED530A962A0896220C9678B7C82A0A965E231D7BFEFFFAB5
  1483. 1025 DATA 73CD6874B7F2A573E67FFE3FC21B73AF32779521789535ED5B8295CD3B70
  1484. 1026 DATA 11F994CD3B70ED5B010200737E95CD3B702A08963E24772A06962B220696
  1485. 1027 DATA 118495CD3B70C3A471FE1BC28673AF327795D5C5E5CDD073C347733E07CD
  1486. 1028 DATA 2F702A06962B22069622089621789535E1C1D11CC3D4722A06962BEBE1E5
  1487. 1029 DATA 7EFE24CA637323EB7723EB3A78953C327895C34E733A78953C327895EB3E
  1488. 1030 DATA 207723220696220896E1E5EBCD3B703E20CD2F70E1C1D1C39973E5D5CDD0
  1489. 1031 DATA 73C3977311A894CD3B70C3B771D1E11C160019235E23567BC34B71FE6138
  1490. 1032 DATA 06FE7A3002E65F5623BACAD47216007BB7F2BE7316FF1911030019220A96
  1491. 1033 DATA 052A0C96220896C3CC7205F81C4B7BB7C81600191E03194623EB2A0A967E
  1492. 1034 DATA 914FB8CAEB73F02A0C960DFA4B71EB4623EB7E23FE613806FE7A30020102
  1493. 1035 DATA 0074E65FB8C0C3EE73EB220496EB2A0496063236202310FB2A0896CD1C44
  1494. 1036 DATA 280911B494CD3B70C3B771220896C34B71C30774F5D5E53A7795B7C26474
  1495. 1037 DATA 2A0696110496AFED52452A0696CD4000DAB77178327895B7CAB7712A0696
  1496. 1038 DATA 581600192206963EFF327795E1D1F1C9E5C53A7795B7CC30742A08967E23
  1497. 1039 DATA 220896FE20CA8374FE09C296743A7995B7C26A743EFF3279953E20C1E1C3
  1498. 1040 DATA BE74F5AF327995F1C1E1FE1BCABE74FE3FCAB574FE0DCAB574FE0ACAB574
  1499. 1041 DATA FE0CC0E52A08962B220896E1F680C92A2D40229F9B3A2F4032A19B2A3040
  1500. 1042 DATA 22A29B3A324032A49B2A094422A59B3A0B4432A79BED73A89B2A08967EFE
  1501. 1043 DATA 0D2813FE20280CFE30FA5175FE3AF251751801020075052318E83E3132FB
  1502. 1044 DATA 8B3EC3322D40323040320944212675222E40223140220A4421F58BC30544
  1503. 1045 DATA 2A9F9B222D403AA19B322F402AA29B2230403AA49B3232402AA59B220944
  1504. 1046 DATA 3AA79B320B442AA89BF9C34B70110B8CCD3B70C34B703E02116D99CDE171
  1505. 1047 DATA C34B703E04CDE171C3A370116D99CD2444CA7F75116C8ACD3B70C34B7011
  1506. 1048 DATA 6D99CD2C44200911FD8BCD3B70C34B70CDED75C34B703A1F97FE20F2A975
  1507. 1049 DATA 11A78BCD3B703A1F97F640CD2F703E20CD2F70C9CDE6753E41324C97C3C3
  1508. 1050 DATA 75117389CD3B703AA09B4F0600215197093E2477115197CD3B70C9D5CDE6
  1509. 1051 DATA 7511ED91CD3B70D1CD3B70C9113292CD3B70C9B7C8F680F640CD0944C9D5
  1510. 1052 DATA 111F92CD3B70D1CD010200763B70113A92CD3B70C93E04CDE171C3A370AF
  1511. 1053 DATA 324A973E313240973A4A97FE05FA2B7611AD8ACD3B70C34B703C324A97AF
  1512. 1054 DATA 329F9B3E0132A09B21519736463E47CD4D86C31A76CD5387C31A76FE59CA
  1513. 1055 DATA 4B70FE45C21A76CDBD75C34B703E04CDE171C3A370CD6C76C34B70C34B70
  1514. 1056 DATA AF324A973E313240973A4A97FE05FA847611E08ACD3B70C93C324A97AF32
  1515. 1057 DATA 9F9B3E0132A09B215197364C3E47CD4D86C37D76CD5387C37576FE59CA4B
  1516. 1058 DATA 71FE45C27576CDBD75C93E04CDE171C3A370CD6C76C34B70C330713E0311
  1517. 1059 DATA 3B99CDE171C3A3703E04CDE171C3A37021159736FF219F9A222597113B99
  1518. 1060 DATA CD2444200C113B99CD2C44113B992A2597CD2044C24B70CDED75C34B0102
  1519. 1061 DATA 0077703E04CDE171C3A370113E8BCD3B70CD967511608BCD3B70CD2477CD
  1520. 1062 DATA 6777C34B70C31877DBEAE680C8DBEBE67FFE0A28F35F3A1897B728153A17
  1521. 1063 DATA 97B7C215787BFE7FC8FE1B2006321797C32477FE0CCA26703A1597B7C430
  1522. 1064 DATA 783A1D97B7C463787BCD2F70C32477CD4570E67FB7CA4B715F3A1F97BBCA
  1523. 1065 DATA 92777BCDAC705FD5CD7278D13A1697B7CA4B717BE67FCD2F70C34B71CD96
  1524. 1066 DATA 75CD4570B728FA47CD2F7078FE032807E65FFE43C2C77711838BCD3B703A
  1525. 1067 DATA 1597B7C8AF32159711268BCD3B70113B99CD2844C9FE532006CDFE79C34B
  1526. 1068 DATA 7178FE3F200911AD8FCD3B70C3957778E67FFE42200911D48BCD3B70C34B
  1527. 1069 DATA 7178FE3020083E00CDE970C34B715F3A1F9701020078BB280A7BCDAC70CD
  1528. 1070 DATA 7278C34B713E07CD2F70C34B71AF3217977BFE41F8FE4CF0D6410707216D
  1529. 1071 DATA 925F160019EBCD3B70C97B2A2B977723222B97E5C121A09BB7ED42C0D53E
  1530. 1072 DATA 13CDE970113B99CD3C44280611248ACD3B70219F9A222B973E11CDE970D1
  1531. 1073 DATA C93AE837E6F0FE30C07BD5CD3B00D1C9B7C85FCDE970C9111E9321AD8D3E
  1532. 1074 DATA 01CDE171C39A70218F784F060009E9C31F79C35779C33979C3A370C3DB78
  1533. 1075 DATA C34E79C39B79C3B379C3B978C34579C37479C30D79C3AA79C3C27911C693
  1534. 1076 DATA 21238F3E01CDE171C39A70326B983E04CDE171C39A703A6B98323F97C34B
  1535. 1077 DATA 7011AE9321118F3E01CDE171C39A7021F1784F060009E9C30279C3F7783E
  1536. 1078 DATA 04CDE171C3A370C3010200794B703E04CDE171C3A370C34B7011FB942198
  1537. 1079 DATA 90CDD179323297CD1A70C34B703E04CDE171C3A370114B8CCD3B70CD4900
  1538. 1080 DATA CD2F70321F97C34B70CDCB793A6B98321697C34B70CDCB79321897C34B70
  1539. 1081 DATA CDCB79321997C34B70CDCB79321A97B728063E03060118043E060600321E
  1540. 1082 DATA 9778321697C34B7011669421988F3E01CDE171C39A70326B987A326C983E
  1541. 1083 DATA 04CDE171C3A3702A6B987E322297C34B70114794217A90CDD179321B97C3
  1542. 1084 DATA 4B70CDCB79321D97C34B7011109421648FCDD179321E97C34B70CDCB7932
  1543. 1085 DATA 1C97C34B7011399421858F3E01CDE171C3E879326B983E04CDE171C3EC79
  1544. 1086 DATA 3A6B98C9F1C39A70F1C3A3703E04CDFE79C34B70CDFE79C34B7011560102
  1545. 1087 DATA 007A90CD3B701151903A1697B72803114D90CD3B70110D91CD3B70115190
  1546. 1088 DATA 3A1897B72803114D90CD3B70111D91CD3B703A1B97B7280CFE01116B9028
  1547. 1089 DATA 081172901803116290CD3B70112891CD3B701151903A1A97B72803114D90
  1548. 1090 DATA CD3B70113291CD3B701151903A1997B72803114D90CD3B70115891CD3B70
  1549. 1091 DATA 1151903A1C97B72803114D90CD3B70116891114091CD3B701151903A1D97
  1550. 1092 DATA B72803114D90CD3B70116891CD3B703A1E97119191FE0320051196911819
  1551. 1093 DATA FE0C2005119B911810FE09200511A1911807FE00200311A591CD3B701172
  1552. 1094 DATA 91CD3B703A3F97CD2F70118691CD3B70114991CD3B70CD9675117389CD3B
  1553. 1095 DATA 7011AA91CD3B703A3297D61121FB94017B000102007BEDB12323EBCD3B70
  1554. 1096 DATA 11B791CD3B70C91151973E05CDE171C3A370B7282932A09BEB3624CDCD7B
  1555. 1097 DATA 112192CD3B70115197CD3B703E31324097AF329F9B3E52CD4D86C3A370C3
  1556. 1098 DATA 497BCDCD7BAF324297210000224697224897324597324A97110792CD3B70
  1557. 1099 DATA 210000CD50713E52324C9711F091CD3B702A4697CD50713A4C97FE44C287
  1558. 1100 DATA 7BCD1A7EC36D7BFE46C2927BCD0F7DC36D7BFE52C29D7BCDE57BC36D7BFE
  1559. 1101 DATA 43201611008B3A4297B72807AF32429711E88BCDF775C34B70FE41200911
  1560. 1102 DATA 0B8BCDF775C34B70110B8BCDF775C34B7011BE91CD3B70113389CD3B703E
  1561. 1103 DATA 00322097219F99222597C93A4A97FE10FAF67B11B089CDD775C3527C3C32
  1562. 1104 DATA 4A973E31324097CD0102007C5387C35B7CFE5320403A4A97324B97AF324A
  1563. 1105 DATA 973A9F9B3CE63F3245972A4697232246973AA09B215197CDB47C215197CD
  1564. 1106 DATA 7F7C32A09B3E59CD4D86C3527C3A41973240973E46324C97C9FE45200BCD
  1565. 1107 DATA B27518003E41324C97C9CD6E7C3A4597329F9BAF32A09B3E4ECD4D86C352
  1566. 1108 DATA 7CC9110792CD3B702A489723224897CD5071C93A3497C62077233A3697C6
  1567. 1109 DATA 2077233A3897C62077233A3A97C640E67F77233A3C97C62077233A3E9777
  1568. 1110 DATA 23364E233A419777233E08C9326E987ED6203233973A6E98FE03F823237E
  1569. 1111 DATA D6203237973A6E98FE04F8237EC640E67F3239973A6E98FE05F8237ED620
  1570. 1112 DATA 323B973A6E98FE06F8237E323D973A6E98FE07F8237E3A6E98FE08F80102
  1571. 1113 DATA 007D237E473A3F97B828023E31324197C93A4A97FE05FA207D11CD89CDD7
  1572. 1114 DATA 75C3527C3C324A97CD5387C35B7CFE53C2697D3A4B97FE10FA407D11B089
  1573. 1115 DATA CDD775C3527C3C324B973A45973D473A9F9BB8C2587CCD6E7CAF324A9721
  1574. 1116 DATA 5197CD7F7C32A09B3E59CD4D86C3527CC9FE5AC2A27D3A4B97FE05FA7F7D
  1575. 1117 DATA 11EB89CDD775C3527C3C324B973A45973D473A9F9BB8C2587CCD6E7CAF32
  1576. 1118 DATA 4A9732A09B3E59CD4D86C3527CC9FE46C2ED7D3A4597473A9F9BB8C2587C
  1577. 1119 DATA 3CE63F3245972A469723224697CD2685C3527CCDD97B3A4A97324B97AF32
  1578. 1120 DATA 4A9732A09B3E59CD4D86C3527C3E44324C97324297FE5AC8AF324297C9FE
  1579. 1121 DATA 42C20F7E3A4597473A9F9BB8C2587CAF32A00102007E9B3E59CD4D86C352
  1580. 1122 DATA 7C3E43324C97C9FE45C2527CCDB275C3527C3A4A97FE05FA2B7E110B8ACD
  1581. 1123 DATA D775C3527C3C324A97CD5387C35B7CFE44C2B77E3A4597473A9F9BB8CA79
  1582. 1124 DATA 7E3A4B97FE05FA567E110B8ACDD775C3527C3C324B973A45973D473A9F9B
  1583. 1125 DATA B8C2587CCD6E7CAF324A9732A09B3E59CD4D86C3527CC93CE63F3245972A
  1584. 1126 DATA 4697232246973A4A97324B973AA09BCDBE83C3527CAF324A9732A09B4F32
  1585. 1127 DATA 4297B7CAAE7E4F3E0132A09B793251973E59CD4D86C3527CC9FE46C2F07E
  1586. 1128 DATA 3A4B97FE05FACD7E11CD89CDD775C3527C3C324B973A45973D473A9F9BB8
  1587. 1129 DATA C2587CCD6E7CAF324A9732A09B3E59CD4D86C3527CC9FE5AC2537F3A4597
  1588. 1130 DATA 473A9F9BB8C2587C0102007F3CE63F3245972A4697232246973AA09BFE01
  1589. 1131 DATA C21D7F3A5197FE44CA387F2A25973A20973DB7FA2E7F361A23C3237F1109
  1590. 1132 DATA 99CD2844AF3242973A4A97324B97AF324A9732A09B3E59CD4D86C3527C3E
  1591. 1133 DATA 46324C97C9FE45C2527CCDB275C3527CC5E5067A218F9836202310FBE1C1
  1592. 1134 DATA 3E05118F98CDE171C34B703E04CDE171C34B70218F98224397CDD0843009
  1593. 1135 DATA 116C8ACDD775C34B70CDCD7BAF324597324A972100002246972248971107
  1594. 1136 DATA 92CD3B70210000CD50713E313240973E53324C9711F091CD3B702A4697CD
  1595. 1137 DATA 50713A4C97FE442006CDC981C3BC7FFE462006CDCD80C3BC7FFE5A2006CD
  1596. 1138 DATA A082C3BC7FFE532006CD2980C3BC7FFE422006CD4883C3BC7FFE43200102
  1597. 1139 DATA 00801211008B3A4297B7280311E88BCDF775C34B70FE412009110B8BCDF7
  1598. 1140 DATA 75C34B70110B8BCDF775C34B703A4A97FE10FA3A8011378ACDD775C3527C
  1599. 1141 DATA 3C324A973E313240973A3F97324197215197CD7F7C32A09B3A4697329F9B
  1600. 1142 DATA 3E53CD4D86C3527CCD5387C32E70FE59C2A6803A4597473A9F9BB8C03CE6
  1601. 1143 DATA 3F3245972A4697232246973AA09B215197CDB47C3A4A97324B97AF324A97
  1602. 1144 DATA 3A41973240973E46324C97CD0985C3527CC9FE4EC2C280CD6E7C3A45973C
  1603. 1145 DATA 473A9F9BB8C0AF324A973E46324C97C9FE45C2527CCDB275C3527C3A4A97
  1604. 1146 DATA FE05FADE8011378ACDD775C3527C3C324A97AF324297215197222997216F
  1605. 1147 DATA 9822279706000E0078FE08C209813E2E2A29010200819777232229970608
  1606. 1148 DATA 0C0478FE0CF234812A27977EE67F23222797FE21FA34812A2997FE2FCAFC
  1607. 1149 DATA 80FE3A280977232229970CC3F6807932A09B2A29973E2477112192CD3B70
  1608. 1150 DATA 115197CD3B703A4597329F9B3E46CD4D86C3527CCD5387C32E70FE59C2A9
  1609. 1151 DATA 813A4597473A9F9BB8C03CE63F3245972A4697232246973A4A97324B97AF
  1610. 1152 DATA 324A97AF3212973EFF321397CD1F84C39581C3A081FEFFC2527C3E5A324C
  1611. 1153 DATA 97C93231973E44324C97C9FE4EC2BE81CD6E7C3A45973C473A9F9BB8C0C3
  1612. 1154 DATA 6C81FE45C2527CCDB275C3527C3A4A97FE05FADA8111378ACDD775C3527C
  1613. 1155 DATA 3C324A97215197222997210B98222D9706012A2D977E23222D972A299777
  1614. 1156 DATA 23222997043A319701020082B8F2EC813A319732A09B3A4597329F9B3E44
  1615. 1157 DATA CD4D86C3527CCD5387C32E70FE59C280823A4597473A9F9BB8C03A9F9B3C
  1616. 1158 DATA E63F3245972A4697232246973A4A97324B97AF324A973AA09BFE01C25F82
  1617. 1159 DATA 3A5197FE5A2003324297FE5820033242973A4297B728063E5A324C97C9CD
  1618. 1160 DATA 1F84C37582323197C9FEFFC2527C3E5A324C97C9FE4EC29582CD6E7C3A45
  1619. 1161 DATA 973C473A9F9BB8C0C36B82FE45C2527CCDB275C3527C3A4A97FE05FAB182
  1620. 1162 DATA 11378ACDD775C3527C3C324A973A4597329F9BAF32A09B3A4297B7280A3E
  1621. 1163 DATA 443251973E0132A09B3E5ACD4D86C3527CCD5387C32E70FE5920483A4597
  1622. 1164 DATA 473A9F9BB8C03CE63F3245972A4697232246973A4A97324B97AF324A0102
  1623. 1165 DATA 008397110999CD28443A4297FE5A2815CDD0843810CD0985C3527CAF3242
  1624. 1166 DATA 973E46324C97C93E42324C97C9FE4E2010CD6E7C3A45973C473A9F9BB8C0
  1625. 1167 DATA C3EA82FE45C2527CCDB275C3527C3A4A97FE05FA598311378ACDD775C352
  1626. 1168 DATA 7C3C324A973A4597329F9BAF32A09B3E42CD4D86C3527CCD5387C32E70FE
  1627. 1169 DATA 5920263A4597473A9F9BB8C03CE63F3245972A4697232246973A4A97324B
  1628. 1170 DATA 97AF324A973E43324C97C9FE4E2010CD6E7C3A45973C473A9F9BB8C0C382
  1629. 1171 DATA 83FE45C2527CCDB275C3527C326B982151972223973A3E9747216B9835FA
  1630. 1172 DATA 4B712A23977E23222397B8C213847E23222397216B983557E6805F7AE67F
  1631. 1173 DATA B8CAF7837AC640E67FB35F3A1B97FE01200F010200847BFE0A200A3A1497
  1632. 1174 DATA FE0DCACB831E0D7B321497110999CD1B00C22E70C3CB833A3D974F3A1297
  1633. 1175 DATA B7C03A1397B7280206003A4097D631473A3397D60590326B98210B98222D
  1634. 1176 DATA 9706003A6B983DF2528478C34B71326B983A1B97FE01200B3A1497FE0D20
  1635. 1177 DATA 043E0A1809110999CD1300C2C784573A1B97FE0120047AE67F57E6805F7A
  1636. 1178 DATA E67F321497FE20FAA384FE7FCAA384B9C2BA84216B98352A2D977723222D
  1637. 1179 DATA 9704C3BA84326C98216B98352A2D977123222D97043A6C98C640E67F2A2D
  1638. 1180 DATA 97B37723222D9704C347843EFF32129778C34B71D2D4843FC5D5E5063221
  1639. 1181 DATA 099936202310FB0620216F9836202310FB2A4397116F98CD1C4422439720
  1640. 1182 DATA 0D216F98110999CD010200851C44E1D1C1C93718F93EFF321397AF321297
  1641. 1183 DATA 321497E5110999219F99CD2444E1C2ED75C34B7121519722299721099922
  1642. 1184 DATA 2797AF326B98326C98063236202310FB2A29977E23222997FE2EC25A853A
  1643. 1185 DATA 6B98326C98AF326B98C38A85B7CAB3852A279777232227973A6B983C326B
  1644. 1186 DATA 98FE08FA4085326C98AF326B982A29977E23222997B7CAB385FE2EC27285
  1645. 1187 DATA 2A2797362F232227972A29977E23222997B7CAB3852A279777232227973A
  1646. 1188 DATA 6B983C326B98FE03FA93852A29973624112192CD3B70115197CD3B702A27
  1647. 1189 DATA 9736033A1997B7CA3286110999219F99CD2444C2328611138BCDD7751109
  1648. 1190 DATA 99CD28442A27972B7EFE4238FA35222797110999219F99CD2444C2160102
  1649. 1191 DATA 008686110999CD28442A2797B7ED5220D911838ACD3B70C9210999116F98
  1650. 1192 DATA CD1C443E3A010E00216F98EDB1233624116F98CD3B70AF32149711099921
  1651. 1193 DATA 9F99CD2044CA4B71F511248ACDD775F1C3ED7532A19B214D973E0177233A
  1652. 1194 DATA 4097D631473AA09BC6238077230100004F3A9F9BC6207723814F3E008847
  1653. 1195 DATA 3AA19B7723814F3E0088473AA09BB7CA97863D32A09B7E23814F3E008847
  1654. 1196 DATA C381863A4097FE32CAC886D2B18679E6C0070781E63FC6207723C3DF8636
  1655. 1197 DATA 00E5214E97CDBD88E14B427A07070707E60FC620772378E60F0707477907
  1656. 1198 DATA 07E603B0C620772379E63FC62077233A3B977723AF773A1C97B72804233E
  1657. 1199 DATA 2477CDF986C32E70C34B713A3797326B983A010200876B983DB7FA148732
  1658. 1200 DATA 6B983A39975FCDE970C3FF863A1A97B7CA2E873A4C97FE53CA2E87CDF870
  1659. 1201 DATA C32E87FE11C223873A1C97B7280C115992CD3B70114E97CD3B70214D977E
  1660. 1202 DATA B7CA50875FCDE97023C34387C34B71CD7588C32E70CDAF88C35387FE0120
  1661. 1203 DATA F6CDAF88C32E70FE0128F6324E974F3A4097D6314779D6239032A09B0600
  1662. 1204 DATA CDAF88C32E70FE0128D9329F9B324F97814F3E0088473A9F9BD620329F9B
  1663. 1205 DATA CDAF88C32E70FE01CA6387326B98325097814F3E0088473AA09B326C9821
  1664. 1206 DATA 51972229973A6C98D601FAE787326C98CDAF88C32E70FE01CA63872A2997
  1665. 1207 DATA 7723222997814F3E00884718DACDAF88C32E70FE01CA6387D620326D983A
  1666. 1208 DATA 4097FE32CA4188D201020088168879E6C0070781E63F473A6D98B8CA6A88
  1667. 1209 DATA CD6E7CC92A29973600214E97CDBD884B427A07070707E60F573A6D98BA20
  1668. 1210 DATA E1CDAF88C32E70FE01CA6387D620326D9878E60F070747790707E603B047
  1669. 1211 DATA 3A6D98B8C21288CDAF88C32E70FE01CA6387D6204779E63FB8C212882A29
  1670. 1212 DATA 9736003A6B98C34B7121AB97222F97CDF870C32E702A2F977723222F9747
  1671. 1213 DATA 3A3C97B820EB3A1C97B728103E247723114892CD3B7011AC97CD3B7021AB
  1672. 1214 DATA 97222F97C34B712A2F977E23222F97FE0DC24B71C9E5C51100007EB7CAF0
  1673. 1215 DATA 88E5AB5FE60F4F06002113890909E57B0F0F0FE61E4F21F388097EAA2356
  1674. 1216 DATA E1AE5F237EAA57E123C3C288C1E1C9000081100221833104428552060102
  1675. 1217 DATA 0089638773088489940AA58BB50CC68DD60EE78FF70000891112239B3224
  1676. 1218 DATA 46AD573665BF74488CC19D5AAFD3BE6CCAE5DB7EE9F7F80D4E756D626572
  1677. 1219 DATA 206F66207061636B6574733A0D4E756D626572206F662072657472696573
  1678. 1220 DATA 3A0D46696C65206E616D653A244B65726D69742D54525338303E240D240D
  1679. 1221 DATA 3F556E7265636F676E697A656420636F6D6D616E64240D3F496C6C656761
  1680. 1222 DATA 6C20636861726163746572240D3F4E6F7420636F6E6669726D6564243F55
  1681. 1223 DATA 6E61626C6520746F207265636569766520696E6974696174650D243F556E
  1682. 1224 DATA 61626C6520746F20726563656976652066696C65206E616D650D243F556E
  1683. 1225 DATA 61626C6520746F207265636569766520656E0102008A64206F662066696C
  1684. 1226 DATA 650D243F556E61626C6520746F207265636569766520646174610D243F53
  1685. 1227 DATA 797374656D20444F53206572726F720D243F556E61626C6520746F207265
  1686. 1228 DATA 636569766520616E2061636B6E6F776C656467656D656E742066726F6D20
  1687. 1229 DATA 74686520686F73740D240D3F556E61626C6520746F2066696E642066696C
  1688. 1230 DATA 650D243F556E61626C6520746F2072656E616D652066696C65240D3F5379
  1689. 1231 DATA 7374656D20444F53206572726F72240D3F556E61626C6520746F2074656C
  1690. 1232 DATA 6C20686F73742074686174207468652073657373696F6E2069732066696E
  1691. 1233 DATA 6973686564240D3F556E61626C6520746F2074656C6C20686F737420746F
  1692. 1234 DATA 206C6F676F7574240102008B07436F6D706C6574656424074661696C6564
  1693. 1235 DATA 242552656E616D696E672066696C6520746F20240D3C436C6F73696E6720
  1694. 1236 DATA 746865206C6F672066696C653E240D3C436F6E6E656374656420746F2072
  1695. 1237 DATA 656D6F746520686F73742C207479706520244320746F2072657475726E3E
  1696. 1238 DATA 0D3C434C4541523E20697320436F6E74726F6C2D5F0D240D3C436F6E6E65
  1697. 1239 DATA 6374696F6E20636C6F7365642C206261636B206174206D6963726F3E2420
  1698. 1240 DATA 436F6E74726F6C2D24202854797065204C656674204172726F7720746F20
  1699. 1241 DATA 73656E64204354524C2D53290D2420284E6F7420696D706C656D656E7465
  1700. 1242 DATA 64290D2407496E7465727275707465642444495220203A300D0D46690102
  1701. 1243 DATA 008C6C65204B494C4C4544240D0D2B2B20426164206472697665206E616D
  1702. 1244 DATA 65240D20436F6E6669726D2077697468203C454E5445523E2C2063616E63
  1703. 1245 DATA 656C2077697468203C425245414B3E20240D5479706520746865206E6577
  1704. 1246 DATA 20657363617065206368617261637465723A2020240D42594520746F2068
  1705. 1247 DATA 6F737420284C4F474F55542920616E64206578697420746F20444F530D43
  1706. 1248 DATA 4F4E4E45435420746F20686F7374206F6E2073656C656374656420706F72
  1707. 1249 DATA 740D444952206F66206C6F63616C206469736B0D4558495420746F20444F
  1708. 1250 DATA 530D46494E4953482072756E6E696E67204B65726D6974206F6E20746865
  1709. 1251 DATA 20686F73740D48454C5020627920676976690102008D6E67207468697320
  1710. 1252 DATA 6D6573736167650D4B494C4C20612066696C650D4C4F4720746865207465
  1711. 1253 DATA 726D696E616C2073657373696F6E20746F20612066696C650D4C4F474F55
  1712. 1254 DATA 542074686520686F73740D524543454956452066696C652066726F6D2068
  1713. 1255 DATA 6F73740D53454E442066696C6520746F20686F73740D5345542061207061
  1714. 1256 DATA 72616D657465720D53484F572074686520706172616D65746572730D5354
  1715. 1257 DATA 41545553206F66204B65726D6974240D42417564202872617465290D424C
  1716. 1258 DATA 6F636B2D636865636B2D747970652028666F72206572726F722064657465
  1717. 1259 DATA 6374696F6E0D444542756767696E67206D6F64652028746F20646973706C
  1718. 1260 DATA 6179207061636B650102008E7473290D4573636170652028636861726163
  1719. 1261 DATA 74657220647572696E6720434F4E4E454354290D46696C652D6D6F646520
  1720. 1262 DATA 28666F72206F7574676F696E672066696C6573290D49626D202870617269
  1721. 1263 DATA 747920616E64207475726E2061726F756E642068616E646C696E67290D4C
  1722. 1264 DATA 6F63616C2D6563686F202868616C662F6475706C6578290D504172697479
  1723. 1265 DATA 2028666F7220636F6D6D756E69636174696F6E206C696E65290D504F7274
  1724. 1266 DATA 2028746F20636F6D6D756E6963617465206F6E290D5052696E7465722028
  1725. 1267 DATA 746F207072696E74207465726D696E616C2073657373696F6E290D567435
  1726. 1268 DATA 322D656D756C6174696F6E0D5761726E696E672028666F722066696C0102
  1727. 1269 DATA 008F656E616D6520636F6E666C6963747329240D5041442D434841520D50
  1728. 1270 DATA 414444494E47240D312D4348415241435445522D434845434B53554D0D32
  1729. 1271 DATA 2D4348415241435445522D434845434B53554D0D332D4348415241435445
  1730. 1272 DATA 522D4352432D4343495454240D4556454E2020204D41524B20204E4F4E45
  1731. 1273 DATA 2020204F44442020205350414345240D4F464620204F4E240D4E4F202020
  1732. 1274 DATA 594553240D5354414E4441524420525332333220706F7274240D3F202054
  1733. 1275 DATA 686973206D6573736167650D432020436C6F73652074686520636F6E6E65
  1734. 1276 DATA 6374696F6E0D302020287A65726F29205472616E736D69742061204E554C
  1735. 1277 DATA 4C0D532020537461747573206F66207468650102009020636F6E6E656374
  1736. 1278 DATA 696F6E0D5479706520746865206573636170652063686172616374657220
  1737. 1279 DATA 616761696E20746F2073656E6420697420746F2074686520686F73740D0D
  1738. 1280 DATA 436F6D6D616E643E24206F6E24206F6666240D4C6F63616C206563686F24
  1739. 1281 DATA 2064656661756C7424204153434949242062696E617279240D4153434949
  1740. 1282 DATA 202020202042494E415259202020202044454641554C54240D2020202020
  1741. 1283 DATA 35302020202020373520202020203131302020203133342E352020202031
  1742. 1284 DATA 353020202033303020202036303020202020313230300D20202031383030
  1743. 1285 DATA 202020323030302020202032343030202020203336303020202034383030
  1744. 1286 DATA 202037323030202001020091393630302020203139323030240D56543532
  1745. 1287 DATA 20656D756C6174696F6E240D46696C65204D6F6465240D49424D20666C61
  1746. 1288 DATA 67240D46696C65207761726E696E67240D5072696E746572240D45736361
  1747. 1289 DATA 706520636861723A20240D446562756767696E67206D6F6465240D506172
  1748. 1290 DATA 6974793A20240D426C6F636B20636865636B20747970653A20242D636861
  1749. 1291 DATA 726163746572246E6F6E65246D61726B247370616365246F646424657665
  1750. 1292 DATA 6E244C696E652053706565643A202420426175640D241C1F0D244B65726D
  1751. 1293 DATA 69742D3830205620332E3520285452532D3830204D6F64656C20312F3329
  1752. 1294 DATA 0D24082008242008241D1E241C1A1A191919191919191919191919190102
  1753. 1295 DATA 0092191919191919241C1A1A1A1919191919191919191919191919191919
  1754. 1296 DATA 1919241C241C1A1A1A1A1919191919191919191919241C1A1A1A1A1A1A24
  1755. 1297 DATA 1C1A1A1A1A1A1A1A1A1A1A1A1A241C1A1A1A1A1A1A1A1F525061636B3A20
  1756. 1298 DATA 241C1A1A1A1A1A1A1A1A1A1A1F535061636B3A20241B2400001A24000019
  1757. 1299 DATA 240000182400001C1F240024000024240000241C2400001B2400001F2400
  1758. 1300 DATA 001E24100342594524212107434F4E4E4543542400000344495224242403
  1759. 1301 DATA 45524124272704455849542403030646494E495348241B1B03474554240C
  1760. 1302 DATA 0C0448454C50240606044B494C4C242727034C4F47240909064C4F474F55
  1761. 1303 DATA 54241E1E0752454345495645240C0C045345010200934E44240F0F035345
  1762. 1304 DATA 542412120453484F57241515065354415455532418180C04424155442421
  1763. 1305 DATA 2110424C4F434B2D434845434B2D5459504524181809444542554747494E
  1764. 1306 DATA 47242727064553434150452400000946494C452D4D4F4445241212034942
  1765. 1307 DATA 4D2403030A4C4F43414C2D4543484F240606065041524954592415150450
  1766. 1308 DATA 4F5254241E1E075052494E5445522424240E565435322D454D554C415449
  1767. 1309 DATA 4F4E241B1B075741524E494E47240F0F02085041442D4348415224000007
  1768. 1310 DATA 50414444494E472403030314312D4348415241435445522D434845434B53
  1769. 1311 DATA 554D24313114322D4348415241435445522D434845434B53554D24323215
  1770. 1312 DATA 332D434841524143010200945445522D4352432D43434954542433330504
  1771. 1313 DATA 4556454E240000044D41524B240303044E4F4E45240606034F4444240909
  1772. 1314 DATA 055350414345240C0C02024F4E240101034F464624000003054153434949
  1773. 1315 DATA 2401010642494E4152592402020744454641554C5424000001085354414E
  1774. 1316 DATA 4441524424EB00EB0002024E4F240000035945532401010D3F50726F6772
  1775. 1317 DATA 616D206572726F723A2020496E76616C696420434F4D4E442063616C6C24
  1776. 1318 DATA 0D3F416D626967756F7573240D3F496C6C6567616C20696E707574206669
  1777. 1319 DATA 6C6520737065632420436F6E6669726D2077697468203C454E5445523E2C
  1778. 1320 DATA 2043616E63656C2077697468203C425245414B3E240D2410023530240178
  1779. 1321 DATA 0095000002373524111103313130242222053133342E3524333303313530
  1780. 1322 DATA 244444033330302455550336303024666604313230302477770431383030
  1781. 1323 DATA 2488880432303030249999043234303024AAAA043336303024BBBB043438
  1782. 1324 DATA 303024CCCC043732303024DDDD043936303024EEEE05313932303024FFFF
  1783. 1325 DATA 010E149700000000010100000000061F01042B979F9A0112329755205E08
  1784. 1326 DATA 05000000000D0D2323313131010443978F9802020070
  1785. 1327 DATA *
  1786. <<< trsmit.bwr >>>
  1787. Date:         Wed, 21 Aug 85 15:14 CDT
  1788. From:         Neil Erdwien <VMAA5@KSUVM>
  1789. Subject:      TRS-80 Version of KERMIT
  1790. To:           <DFTCU@CUVMA>
  1791.  
  1792. I have been having a few problems with the Model I/III TRS-80 KERMIT.
  1793.  
  1794.  1.  (omitted)
  1795.  
  1796.  2.  The recommended method of getting a micro version is to download
  1797.      'TRSMAKE/BAS', and run it on the TRS-80; it writes 'KERMIT/CMD'.
  1798.      Along the way, it keeps a checksum to verify the accuracy of the
  1799.      download.  Unfortunately, TRSMAKE consistantly reports an error.
  1800.      Repeated downloads produce the exact same "wrong" checksum.  I
  1801.      suspect that the "correct" checksum is in fact wrong.
  1802.      The resulting KERMIT/CMD works OK as far as I have seen.
  1803.  
  1804.  3.  On KERMSRV there is a file called 'TRSDNLD BAS' which seems to be a
  1805.      version of 'TRSMAKE BAS'.  When downloaded and run, it produces no
  1806.      checksum error.  Both resulting versions of kermit claim to be
  1807.      Version 3.5.  I assume one or the other is out-of-date.
  1808.      Please advise me as to which is current.
  1809.  
  1810.  4.  On KERMSRV there is a file called 'TRSCMD HEX', which seems to serve no
  1811.      purpose.  There is no need for a file of printable hex to download,
  1812.      because the above BASIC program does the job.  (Besides, several other
  1813.      'fn HEX' files would be needed also.
  1814.  
  1815.  5.  The VT52 emulation doesn't really exist in the TRS-80 version.  I tried
  1816.      to use this KERMIT with an IBM 7171 protocall converter, with all the
  1817.      escape sequences showing.  I suppose this is a really hard problem to
  1818.      solve, given that the TRS-80 screen is only 64 characters wide.
  1819.  
  1820. I hope I don't sound like too much of a grouch.  I realize that the TRS-80
  1821. is not a state-of-the-art machine any more.  Still, the documentation
  1822. for existing programs ought to be current.
  1823.  
  1824. Thank you for your time.  VMAA5@KSUVM.BITNET
  1825.  
  1826. ------------------------------
  1827.  
  1828. Date: Mon, 16 Mar 87 21:03:01 EST
  1829. From: Charles L Oei <burdvax!thing2.PRC.Unisys.COM!oei@seismo.CSS.GOV>
  1830. Subject: TRS Model 1
  1831. Keywords: TRS Kermit
  1832.  
  1833. I have several remarks though that you might want to put into a .BWR file
  1834. for future users of Kermit for the TRS80 Model 1 running TRSDOS 2.3:
  1835.  
  1836. Of the files that are distributed, a person really only needs to see:
  1837.  
  1838.    TRSMIT.DOC.1  and  TRSMAKE.BAS.1
  1839.    
  1840. The others are either Z80 assembly language source code (for good latenight
  1841. reading), or miscellaneous/extraneous files that are of no real consequence.
  1842. [TRSDNLD.BAS.1 when downloaded and ran produces correct checksum, but
  1843. the resultant /CMD file doesn't seem to run correctly (at least the couple
  1844. of times I tried it -- it could otherwise, but I didn't want to invest any
  1845. more time since TRSMAKE did work satisfactorily).]
  1846.  
  1847. When TRSMAKE.BAS is downloaded and ran, don't worry about that it says
  1848. that the checksum is wrong, it's probably just fine. Here are the checksums
  1849. that TRSMAKE says it should be and what I get, respectively: 976487 976454
  1850.  
  1851. There are two problems (of any real consequence) with the resulting
  1852. KERMIT/CMD file:
  1853.  
  1854.    1) not so bad is that vt52 emulation doesn't work
  1855.    
  1856.    2) The other is that I couldn't talk w/ other Kermits unless I set
  1857.       set the parity to "space". The Kermit on the other end doesn't
  1858.       have to set its parity to space though. [After this, all
  1859.       went well].      
  1860.  
  1861. Also, some annoying things that I had with it were:
  1862.    in terminal "connect" mode, I have no cursor;
  1863.    the <break> key in command mode doesn't appear to "abort" a command,
  1864.       but the <clear> key seems to do the trick anyway;
  1865.    in "connect" mode, the <control> key designation doesn't work either.
  1866.    
  1867. Oh, and probably some other minor things too, but overall, it's great.
  1868. At least it works and sends/receives files better than raw transfers
  1869. sans error checking.
  1870.  
  1871. Thanks to Stan Barber and the original writers of CP/M 80 Kermit.
  1872.  
  1873. Charles Oei
  1874.  
  1875. ------------------------------
  1876.  
  1877. <<< trsmit.doc >>>
  1878. TRS-80 KERMIT                                                        
  1879.  
  1880.  
  1881. Program: Stan Barber, Rice University developed from the CP/M-80 version by
  1882. Bill Catchings and others.
  1883.  
  1884. Language: Z80 Assembler, compatable with M80 and EDAS from Mysosys
  1885.  
  1886. Version: 3.5 (adapted from that version of CP/M 80 Kermit)
  1887.  
  1888. Date: March 1984
  1889.  
  1890. Documentation: Stan Barber, Rice University
  1891.  
  1892.                 Summary of TRSDOS and TRSDOS-bases Operating Systems
  1893.  
  1894. TRSDOS (The Radio Shack Disk Operating System) has a large library of built
  1895. in commands dealing with files, directory maintenance, device I/O, etc.
  1896. Programs are also used for some functions on some TRSDOS-bases DOS's. Only
  1897. those of major interest will be discussed here.
  1898.  
  1899. TRSDOS file specifications are of the form FILESPEC/EXT.PASSWORD:D, where:
  1900.  
  1901. FILESPEC        is the filename up to eight characters.
  1902. EXT            is the file type, up to three characters.
  1903. PASSWORD        is the password for that file.
  1904. D            is a numerical drive specification (0-9).
  1905.  
  1906. Filenames, file types and passwords may contain letters and numbers, but the 
  1907. first character in each must be a letter. No special characters or spaces are 
  1908. allowed. All fields are optional except the filespec. Any field added must be 
  1909. preceeded by its special delimiter (/ for file type, . for passwords and
  1910. : for drive specifications). Upper and lower case characters are equivalent.
  1911.  
  1912. Wildcard file-group specifications are supported on some of the TRSDOS-based
  1913. DOS's but is not a standard feature. Consult your DOS manual for more specific
  1914. information. It should be noted that TRSDOS has no concept of a default drive
  1915. when no drive specification is given in the file specification. It will search
  1916. for an existing file on all available drives before it will open a new file.
  1917. Further, it will not open a file on a disk that is already full, instead it
  1918. will generate a disk full error (if all disks in the system are full or write
  1919. protected).
  1920.  
  1921. TRSDOS commands of interest include:
  1922.  
  1923. DIR :D [other options] lists the names of all visible files on the specified
  1924. drive. If no drive is specified, some DOS's give the directories of all mounted
  1925. drives. Some give the directory of the system drive (drive 0).
  1926.  
  1927. FREE gives statistics on disk usage.
  1928.  
  1929. KILL file removes the file from the directory and frees the space allocated to 
  1930. the file for reassignment.
  1931.  
  1932. LIST file lists the file on the display.
  1933.  
  1934. RENAME oldfile newfile changes the name of oldfile to newfile if newfile is a 
  1935. unique file name on that disk.
  1936.  
  1937. To duplicate files and disks, there are a variety of commands available. Which 
  1938. one is available will depend on the operating system you are using. A sampling 
  1939. is given below:
  1940.  
  1941. COPY file1 file2 will copy file1 and name the copy file2. If file2 exists, it 
  1942. will be replaced.
  1943.  
  1944. BACKUP :D :E will make a copy of the disk in drive D on the the disk in drive
  1945. E.  In some DOS's, this is part of the COPY command (e.g. COPY :D :E or
  1946. COPY 0 1).
  1947.  
  1948. FORMAT :D will format the disk in drive D. It will ready for any normal read or
  1949. write operation following successful completion of this operation. This
  1950. operation must be performed before use of a blank disk. Reformatting a
  1951. previously formatted disk will cause all previously stored information to be
  1952. lost. FORMAT is usually a program but on some DOS's, it is a part of the DOS
  1953. command library.
  1954.  
  1955.  
  1956.  
  1957.                KERMIT-TRS80 Description
  1958.  
  1959. This implementation of the Kermit protocol is compatable with all DOS's
  1960. available for the TRS80 Model I or Model III (and the Model 4 running in Model
  1961. III mode).  It has been checked out under the following DOS's: TRSDOS 2.3
  1962. (Model I), TRSDOS 1.3 (Model III), NEWDOS/80 V 2.0, LDOS 5.1.3, DOS+ 3.5 and
  1963. VTOS 3.0 (Model I).
  1964.  
  1965. Since Kermit-TRS80 runs on a TRS-80, it is always local. The screen is
  1966. contantly updated with the filename and the packet number, whether sending or
  1967. receiving.  Kermit-TRS80 will also automatically translate file names to
  1968. conform with the Kermit standard when sending and the TRSDOS standard when
  1969. receiving. (This does not apply to the GET command.)
  1970.  
  1971. If despite the timeout capability, the transmission appears to be stuck (and
  1972. you can tell that this has happened if the screen fails to change for a while)
  1973. you can hit <ENTER> to have the micro do what it would have done on a timeout,
  1974. namely NAK the expected packet to cause to foreign host to send it again (or,
  1975. if the micro is sending, to retransmit the last packet).  Micro/Micro or
  1976. Micro/IBM-mainframe transfers could require this kind of manual intervention.
  1977.  
  1978.  
  1979. File transfers may be interrupted in several ways.
  1980. [A reminder: Control characters are generated by holding down the Left-shift
  1981. and the down arrow keys while striking the alpha key corresponding to the
  1982. control character that you wish to generate.]
  1983.  
  1984. Control-C       This will return you to Kermit-TRS80 command level immediately,
  1985.         so that you can connect back to the remote  system,  or  take
  1986.         any other desired action.
  1987.  
  1988. Control-X       When  sending  a  file,  this will terminate the sending of the
  1989.                 current file with a signal to the KERMIT on the other  side  to
  1990.                 discard  what  it  got  so  far.  If there are more files to be
  1991.                 sent, KERMIT-TRS80 will go on to the next one.  When
  1992.         receiving a file, KERMIT-TRS80 will send a signal to the remote
  1993.         KERMIT to stop sending  this file.  If the remote KERMIT
  1994.         understands this signal (not all implementations of KERMIT
  1995.         do), it will comply, otherwise the file will keep coming.  In
  1996.         any case, the remote KERMIT will go on to the next file in the
  1997.         group, if any.
  1998.  
  1999. Control-Z       Like  Control-X,  except  if a file group is being transmitted,
  2000.                 this will stop the transmission of the entire group.  If only a
  2001.                 single file is being transmitted, it is exactly like Control-X.
  2002.  
  2003. <ENTER>s
  2004.                 If you type <ENTER> repeatedly Kermit-TRS80 will retry the
  2005.                 current packet up to its retry limit (something like 16  times)
  2006.                 and  then,  if  no  valid  response  was  received,  return  to
  2007.                 Kermit-TRS80 command level.
  2008.  
  2009.  
  2010.                               KERMIT-TRS80 COMMANDS
  2011.  
  2012. KERMIT-TRS80 uses the DECSYSTEM-20 keyword style command language.  Each
  2013. keyword may be abbreviated to its minimum unique length.  "?" may be typed to
  2014. request a menu of the available options for the current field at any point in a
  2015. command.  This must be followed by an <ENTER>. If sufficient characters have
  2016. not been typed to identify the current field uniquely, KERMIT-TRS80 will
  2017. reprompt and allow you to continue from that point.
  2018.  
  2019. CONNECT Establish a "virtual terminal" connection to any host that may be  con-
  2020.         nected  to the serial port, i.e. pass all typein to the serial port and
  2021.         display all input from the serial port on the screen.  Also, emulate  a
  2022.         DEC   VT52   to   allow  cursor  control,  screen  clearing,  etc.,  if
  2023.         VT52-EMULATION is ON (see below), in which case  you  should  also  set
  2024.         your  terminal type on the remote host to VT52.  The escape character
  2025.         defaults to CTRL-underbar (which is generated by <CLEAR> on the
  2026.         keyboard).  When you issue the CONNECT command, the micro will print a
  2027.     message telling you how to get back.   The escape sequence is
  2028.     generally an uncommonly-used control character, like CTRL-underbar or
  2029.         CTRL-uparrow, followed by a single letter "command".
  2030.  
  2031.         C   Close Connection, return to Kermit-TRS80> command level.
  2032.         S   Display Status of connection, but maintain remote connection.
  2033.         ?   List available single-character commands.
  2034.         0   (zero) Send a null (0) character.
  2035.         ^_  (or whatever - a second copy of the escape character) Send the  es-
  2036.             cape character itself to the remote host.
  2037.  
  2038. SEND filespec 
  2039.         Send  file specified by filespec to the remote Kermit.  The filespec
  2040.         may not contain wildcards.
  2041.  
  2042. RECEIVE Receive file(s) from the remote Kermit.  Store  them  under  the  names
  2043.         provided in the file headers supplied by the remote host.  If the names
  2044.         aren't  legal,  use  as many legal characters from the name as possible
  2045.         (see the description of SET FILE-WARNING below).   If  there's  a  con-
  2046.         flict,  and FILE-WARNING is ON, warn the user and try to build a unique
  2047.         name for the file.
  2048.  
  2049. GET filespec
  2050.         When Kermit-TRS80 is talking to a Kermit Server on the host, you  may
  2051.     include a file wildcard IF the host supports wildcards. The filespec
  2052.     must be in a legal form for the HOST system.
  2053.  
  2054. LOG filespec
  2055.         When CONNECTed to a foreign host as a terminal, log the  terminal  ses-
  2056.         sion  to  the  specified  diskette file.  This functionality depends to
  2057.         some extent on the remote host's ability to do XON/XOFF  flow  control,
  2058.         and  does  not  guarantee a complete transcript (after all, that's what
  2059.         the KERMIT protocol is for).  The log file is closed when  the 
  2060.         connection is closed by typing the escape character followed by the
  2061.         single-character command "C".
  2062.  
  2063. BYE     When talking to a remote Kermit Server, this  command  shuts  down  the
  2064.         server  and  logs it out, and also exits from Kermit-TRS80 to DOS
  2065.     command level.
  2066.  
  2067. LOGOUT  Like BYE, but leaves you at Kermit-TRS80 command level.
  2068.  
  2069. FINISH  Like LOGOUT, but shuts down the remote server without logging  it  out.
  2070.         Leaves you at Kermit-TRS80 command level; subsequent CONNECT commands
  2071.     will put you back at host system command level.
  2072.  
  2073. SET parameter [value]
  2074.         Set the specified parameter to the specified value.  Possible settings:
  2075.  
  2076.         WARNING ON (or OFF)
  2077.                 Warn  user  of  filename  conflicts  when  receiving files from
  2078.                 remote host, and attempt to generate a unique name by modifying
  2079.                 the given one.  ON by default.
  2080.  
  2081.         VT52-EMULATION ON (or OFF)
  2082.                 When connected as  a  terminal  to  a  foreign  host,  controls
  2083.                 whether  the  TRS80  emulates  a VT52 or runs in "native mode".
  2084.                 VT52 emulation is ON by default.
  2085.  
  2086.     DEBUGGING ON (or OFF)
  2087.         When transmitting or receiving packets, controls whether the
  2088.         packets are displayed on the local screen. Debugging is OFF by
  2089.         default.
  2090.  
  2091.         LOCAL-ECHO ON (or OFF)
  2092.                 When you CONNECT to a remote host, you must set  LOCAL-ECHO  ON
  2093.                 if  the  host  is  half  duplex,  OFF  if  full duplex.  OFF by
  2094.                 default.
  2095.  
  2096.         ESCAPE  Change the escape character for virtual  terminal  connections.
  2097.                 Kermit-TRS80  will  prompt you for the new escape character,
  2098.         which you type in locally.
  2099.  
  2100.         BAUD    Change  the baud rate of the communications port.  Type SET
  2101.         BAUD followed by a question mark, and follow the directions. 
  2102.  
  2103.         PARITY  Sets  parity  for  outgoing characters to one of the following:
  2104.                 NONE, SPACE, MARK, EVEN, or ODD.  On input, if parity is  NONE,
  2105.                 then  the  8th  bit is kept (as data), otherwise it is stripped
  2106.                 and ignored.  The parity setting applies to both terminal  con-
  2107.                 nection and file transfer.
  2108.  
  2109.         IBM ON (or OFF)
  2110.                 Allow  the  transfer of files to and from an IBM mainframe com-
  2111.                 puter.  This makes Kermit-TRS80 wait for the IBM turnaround
  2112.         character (XON), ignore parity on input, add appropriate parity
  2113.                 to  output, and use local echoing during CONNECT.  If you don't
  2114.                 give this command, IBM mode is OFF.
  2115.  
  2116.         FILE-TYPE (ASCII/BINARY/DEFAULT)
  2117.                 Tells KERMIT-TRS80 how to deal with the file being
  2118.                 send/received. IT IS IMPORTANT to tell KERMIT if the
  2119.                 is in ASCII when sending to a non-TRS80 KERMIT. DEFAULT
  2120.                 is the same as BINARY in this version.
  2121.  
  2122.        BLOCK-CHECK-TYPE
  2123.                 The options are:
  2124.  
  2125.                 1-CHARACTER-CHECKSUM
  2126.                         Normal, default, standard 6-bit checksum.
  2127.                 2-CHARACTER-CHECKSUM
  2128.                         A 12-bit checksum encoded as two characters.
  2129.                 3-CHARACTER-CRC-CCITT
  2130.                         A 16-bit CCITT-format Cyclic Redundancy Check,  encoded
  2131.                         as 3 characters.
  2132.  
  2133.                 The  2  and  3 character options should only be used under con-
  2134.                 ditions of extreme line noise.  Many implementations of  KERMIT
  2135.                 only support the single character checksum.
  2136.  
  2137.         PORT    Allows  you  to  switch  between different communication ports.
  2138.                 This command is not available at this time.
  2139.  
  2140.         PRINTER ON or OFF.  Turns copying of CONNECT session to printer on  and
  2141.                 off.  No attempt is made to do buffering or flow control; it is
  2142.                 assumed printer can keep up. Printer is OFF by default.
  2143.  
  2144. DIR     Provides a directory for the specified drive. If no drive is specified,
  2145.     the directory display will be as if you had entered the command from
  2146.     DOS command level. See the discussion of DIR above.
  2147.  
  2148. KILL    This executes the DOS KILL command on the specified file. 
  2149.  
  2150.                 Installation
  2151.  
  2152. Kermit-TRS80 is easily installed. Simply download the program KERMAKE/BAS
  2153. (KERMAKE.BAS on the mainframe), enter BASIC, load and run the program.
  2154. KERMAKE/BAS is in ASCII format and will keep a running checksum while creating
  2155. KERMIT/CMD. If there was some error in the downloading process, you will be
  2156. notified by the program when it attempts to make KERMIT/CMD. Once this
  2157. process is complete, you will have a running version of Kermit-TRS80.
  2158.  
  2159.            Building Kermit-TRS80 from the Source.
  2160.  
  2161. The Source for Kermit-TRS80 is in seven modules. KERMIT/SRC is the main source
  2162. module. It will call the other source files into the assembly as needed. If any
  2163. system calls needed to be changed, they are defined here and all labels for
  2164. system calls start with an @. This would be useful for assembling a version for
  2165. the Model 4 or a version for a TRS-80 work alike that has some hardware
  2166. differences (MAX-80, etc.). All serial I/O routines are in this section as
  2167. well.
  2168.  
  2169. GET/SRC and SEND/SRC contain the code for the RECEIVE (GET) and SEND commands. 
  2170. XFER/SRC contains the common code used by RECIEVE and SEND. MORE/SRC contains 
  2171. code for the other commands (with two exceptions) described above. KILLDIR/SRC 
  2172. contains the code for the KILL and DIR commands.  This code would have to be 
  2173. modified for use on the Model 4. KERSTR/SRC contains the strings and storage 
  2174. area.
  2175.  
  2176. It should be noted that KERMIT/CMD loads into RAM at 7000H.  This avoids
  2177. conflicts with the DOS overlays that may be called by invoking the DIR command.
  2178. Assembly at a lower address is possible if other methods are used to call for a
  2179. DIR. I chose this method to be compatable with as many DOS's as possible
  2180. without writing code specific to each.
  2181.  
  2182.         Getting a binary copy of KERMIT-TRS80
  2183.  
  2184. If you wish to have a binary copy of KERMIT-TRS80, you can call the SOBBS
  2185. TEST MODE at (713) 660-9252 to download an binary copy with KERMIT or the
  2186. Chistensen (XMODEM) protocol. At the "First Name or User Number?" prompt,
  2187. enter KERMIT. At the "Last Name?" prompt, enter KERMIT. At the "Password?"
  2188. prompt, enter KERMIT (will not echo). Select G at the "Command>" prompt.
  2189. Just follow the instructions given following that.
  2190.  
  2191. Stan Barber
  2192. May 1984
  2193.  
  2194. (thanks to Frank da Cruz for the documentation for Kermit and Stan Hanks
  2195. for the encouragement.)
  2196. <<< trsmit.hex >>>
  2197. 05064B45524D495401020070ED73D19531D396CD1A70AF32CB98118591CD
  2198. 3B70CD4B70C330713AF496D3E8D3E93E6CD3EAC9D5114092CD3B70D1C9D5
  2199. E5C5F5CD3300F1C1E1D1C91AFE24C8CD2F701318F6D5CD2B00D1C911CB98
  2200. 1ACB7FC42844112889CD7471115A9221308C3E01CDE171C39A702170704F
  2201. 060009E9C30177C32871C34271C3C376C30F7BC3637FC37978C3F079C3F8
  2202. 79C30976C35B76C3B276C3C174C35A75113889CD3B70C34B70116389CD3B
  2203. 70C34B70E5C521E0964E060021B97009E9C3CB70C3D570C3C870C3DA70C3
  2204. E470C3E670E67FEAE670F680C3E670F680C3E670E67FE2E670F680C3E670
  2205. E67FC1E1C9D5DBEAE64028FA7BCDAC70D3EBD1C9DBEAE6802019CD450102
  2206. 007170B728F4FE0D2001C9FE1A2804FE1820E7C620320497C9DBEB473AE0
  2207. 96FE0678CA4B71E67FC34B713E04CDE171C3A37011CB983ACB98CB7FC428
  2208. 44ED7BD195C32D4011308CCD3B70C34B70E1232323E9F5C5D5E501F6FF11
  2209. FFFF0913DA5A71010A0009EB7CB5C450717BC630CD2F70E1D1C1F1C9E1E5
  2210. 223F95ED733D95ED53419521479522C99522CB95AF323A95323B953EFF32
  2211. 3C9511BC94CD3B70ED5B4195CD3B70C9ED7B3D9521479522CB953EFF323C
  2212. 952A3F95E9ED7B3D9521479522C99522CB95AF323A95323B953EFF323C95
  2213. 11BC94CD3B70ED5B4195CD3B702A3F95E9323995CD3074FE04CA6972FE01
  2214. CAB872FE02CA0774FE10CA0774FE03CA2D7401020072FE05CA0C72114694
  2215. CD3B70C9EB2243950600CD6874B7F25372E67FFE1B201A3E07CD2F70AF32
  2216. 3A952AC9952B22C99522CB95213B9535C31272FE3F2811FE20280DFE0CCC
  2217. 2670782A4395EBC34B71213A95360004FE613806FE7A3002E65F2A439577
  2218. 23224395C31272119194CD3B7011BC94CD3B70ED5B4195CD3B702ACB953E
  2219. 24772AC9952B22C995114795CD3B70AF323A95CD4900FE0D2816FE0C2812
  2220. FE04F82AC99523772322C995CD2F70C3A471FE0CCC2670C34B71224595ED
  2221. 5343951A4713ED53CD952ACB9522CF9578B7C82ACD955E231D7BFEFFFAB5
  2222. 73CD6874B7F2A573E67FFE3FC21B73AF323A95213B9535ED5B4595CD3B70
  2223. 11BC94CD3B70ED5B010200734195CD3B702ACB953E24772AC9952B22C995
  2224. 114795CD3B70C3A471FE1BC28673AF323A95D5C5E5CDD073C347733E07CD
  2225. 2F702AC9952B22C99522CB95213B9535E1C1D11CC3D4722AC9952BEBE1E5
  2226. 7EFE24CA637323EB7723EB3A3B953C323B95C34E733A3B953C323B95EB3E
  2227. 20772322C99522CB95E1E5EBCD3B703E20CD2F70E1C1D1C39973E5D5CDD0
  2228. 73C39773116B94CD3B70C3B771D1E11C160019235E23567BC34B71FE6138
  2229. 06FE7A3002E65F5623BACAD47216007BB7F2BE7316FF191103001922CD95
  2230. 052ACF9522CB95C3CC7205F81C4B7BB7C81600191E03194623EB2ACD957E
  2231. 914FB8CAEB73F02ACF950DFA4B71EB4623EB7E23FE613806FE7A30020102
  2232. 0074E65FB8C0C3EE73EB22C795EB2AC795063236202310FB2ACB95CD1C44
  2233. 2809117794CD3B70C3B77122CB95C34B71C30774F5D5E53A3A95B7C26474
  2234. 2AC99511C795AFED52452AC995CD4000DAB77178323B95B7CAB7712AC995
  2235. 5816001922C9953EFF323A95E1D1F1C9E5C53A3A95B7CC30742ACB957E23
  2236. 22CB95FE20CA8374FE09C296743A3C95B7C26A743EFF323C953E20C1E1C3
  2237. BE74F5AF323C95F1C1E1FE1BCABE74FE3FCAB574FE0DCAB574FE0ACAB574
  2238. FE0CC0E52ACB952B22CB95E1F680C92A2D4022619B3A2F4032639B2A3040
  2239. 22649B3A324032669B2A094422679B3A0B4432699BED736A9B2ACB957EFE
  2240. 0D2813FE20280CFE30FA5175FE3AF251751801020075052318E83E3132BE
  2241. 8B3EC3322D40323040320944212675222E40223140220A4421B88BC30544
  2242. 2A619B222D403A639B322F402A649B2230403A669B3232402A679B220944
  2243. 3A699B320B442A6A9BF9C34B7011CE8BCD3B70C34B703E02112F99CDE171
  2244. C34B703E04CDE171C3A370112F99CD2444CA7F75112F8ACD3B70C34B7011
  2245. 2F99CD2C44200911C08BCD3B70C34B70CDED75C34B703AE196FE20F2A975
  2246. 116A8BCD3B703AE196F640CD2F703E20CD2F70C9CDE6753E41320E97C3C3
  2247. 75113689CD3B703A629B4F0600211397093E2477111397CD3B70C9D5CDE6
  2248. 7511B091CD3B70D1CD3B70C911F591CD3B70C9B7C8F680F640CD0944C9D5
  2249. 11E291CD3B70D1CD010200763B7011FD91CD3B70C93E04CDE171C3A370AF
  2250. 320C973E313202973A0C97FE05FA2B7611708ACD3B70C34B703C320C97AF
  2251. 32619B3E0132629B21139736463E47CD1086C31A76CD1687C31A76FE59CA
  2252. 4B70FE45C21A76CDBD75C34B703E04CDE171C3A370CD6C76C34B70C34B70
  2253. AF320C973E313202973A0C97FE05FA847611A38ACD3B70C93C320C97AF32
  2254. 619B3E0132629B211397364C3E47CD1086C37D76CD1687C37576FE59CA4B
  2255. 71FE45C27576CDBD75C93E04CDE171C3A370CD6C76C34B70C330713E0311
  2256. FD98CDE171C3A3703E04CDE171C3A37021D79636FF21619A22E79611FD98
  2257. CD2444200C11FD98CD2C4411FD982AE796CD2044C24B70CDED75C34B0102
  2258. 0077703E04CDE171C3A37011018BCD3B70CD967511238BCD3B70CD2477CD
  2259. 6777C34B70C31877DBEAE680C8DBEBE67FFE0A28F35F3ADA96B728153AD9
  2260. 96B7C215787BFE7FC8FE1B200632D996C32477FE0CCA26703AD796B7C430
  2261. 783ADF96B7C463787BCD2F70C32477CD4570E67FB7CA4B715F3AE196BBCA
  2262. 92777BCDAC705FD5CD7278D13AD896B7CA4B717BE67FCD2F70C34B71CD96
  2263. 75CD4570B728FA47CD2F7078FE032807E65FFE43C2C77711468BCD3B703A
  2264. D796B7C8AF32D79611E98ACD3B7011FD98CD2844C9FE532006CDFE79C34B
  2265. 7178FE3F200911708FCD3B70C3957778E67FFE42200911978BCD3B70C34B
  2266. 7178FE3020083E00CDE970C34B715F3AE19601020078BB280A7BCDAC70CD
  2267. 7278C34B713E07CD2F70C34B71AF32D9967BFE41F8FE4CF0D64107072130
  2268. 925F160019EBCD3B70C97B2AED96772322ED96E5C121629BB7ED42C0D53E
  2269. 13CDE97011FD98CD3C44280611E789CD3B7021619A22ED963E11CDE970D1
  2270. C93AE837E6F0FE30C07BD5CD3B00D1C9B7C85FCDE970C911E19221708D3E
  2271. 01CDE171C39A70218F784F060009E9C31F79C35779C33979C3A370C3DB78
  2272. C34E79C39B79C3B379C3B978C34579C37479C30D79C3AA79C3C279118993
  2273. 21E68E3E01CDE171C39A70322D983E04CDE171C39A703A2D98320197C34B
  2274. 7011719321D48E3E01CDE171C39A7021F1784F060009E9C30279C3F7783E
  2275. 04CDE171C3A370C3010200794B703E04CDE171C3A370C34B7011BE94215B
  2276. 90CDD17932F496CD1A70C34B703E04CDE171C3A370110E8CCD3B70CD4900
  2277. CD2F7032E196C34B70CDCB793A2D9832D896C34B70CDCB7932DA96C34B70
  2278. CDCB7932DB96C34B70CDCB7932DC96B728063E03060118043E06060032E0
  2279. 967832D896C34B70112994215B8F3E01CDE171C39A70322D987A322E983E
  2280. 04CDE171C3A3702A2D987E32E496C34B70110A94213D90CDD17932DD96C3
  2281. 4B70CDCB7932DF96C34B7011D39321278FCDD17932E096C34B70CDCB7932
  2282. DE96C34B7011FC9321488F3E01CDE171C3E879322D983E04CDE171C3EC79
  2283. 3A2D98C9F1C39A70F1C3A3703E04CDFE79C34B70CDFE79C34B7011190102
  2284. 007A90CD3B701114903AD896B72803111090CD3B7011D090CD3B70111490
  2285. 3ADA96B72803111090CD3B7011E090CD3B703ADD96B7280CFE01112E9028
  2286. 081135901803112590CD3B7011EB90CD3B701114903ADC96B72803111090
  2287. CD3B7011F590CD3B701114903ADB96B72803111090CD3B70111B91CD3B70
  2288. 1114903ADE96B72803111090CD3B70112B91110391CD3B701114903ADF96
  2289. B72803111090CD3B70112B91CD3B703AE096115491FE0320051159911819
  2290. FE0C2005115E911810FE0920051164911807FE002003116891CD3B701135
  2291. 91CD3B703A0197CD2F70114991CD3B70110C91CD3B70CD9675113689CD3B
  2292. 70116D91CD3B703AF496D61121BE94017B000102007BEDB12323EBCD3B70
  2293. 117A91CD3B70C91113973E05CDE171C3A370B7282932629BEB3624CDCD7B
  2294. 11E491CD3B70111397CD3B703E31320297AF32619B3E52CD1086C3A370C3
  2295. 497BCDCD7BAF320497210000220897220A97320797320C9711CA91CD3B70
  2296. 210000CD50713E52320E9711B391CD3B702A0897CD50713A0E97FE44C287
  2297. 7BCD1F7EC36D7BFE46C2927BCD147DC36D7BFE52C29D7BCDE57BC36D7BFE
  2298. 43201611C38A3A0497B72807AF32049711AB8BCDF775C34B70FE41200911
  2299. CE8ACDF775C34B7011CE8ACDF775C34B70118191CD3B7011F688CD3B703E
  2300. 0032E29621619922E796C93A0C97FE10FAF67B117389CDD775C3527C3C32
  2301. 0C973E31320297CD0102007C1687C35B7CFE5320403A0C97320D97AF320C
  2302. 973A619B3CE63F3207972A0897232208973A629B211397CDB47C211397CD
  2303. 7F7C32629B3E59CD1086C3527C3A03973202973E46320E97C9FE45200BCD
  2304. B27518003E41320E97C9CD6E7C3A079732619BAF32629B3E4ECD1086C352
  2305. 7CC911CA91CD3B702A0A9723220A97CD5071C93AF696C62077233AF896C6
  2306. 2077233AFA96C62077233AFC96C640E67F77233AFE96C62077233A009777
  2307. 23364E233A039777233E08C93230987EDE2032F5963A3098FE03F823237E
  2308. DE2032F9963A3098FE04F8237EC640E67F32FB963A3098FE05F8237EDE20
  2309. 32FD963A3098FE06F8237E32FF963A3098FE07F8237E3A3098FE08F80102
  2310. 007D237E473A0197B8CA107D3E313A0397C93A0397C93A0C97FE05FA257D
  2311. 119089CDD775C3527C3C320C97CD1687C35B7CFE53C26E7D3A0D97FE10FA
  2312. 457D117389CDD775C3527C3C320D973A07973D473A619BB8C2587CCD6E7C
  2313. AF320C97211397CD7F7C32629B3E59CD1086C3527CC9FE5AC2A77D3A0D97
  2314. FE05FA847D11AE89CDD775C3527C3C320D973A07973D473A619BB8C2587C
  2315. CD6E7CAF320C9732629B3E59CD1086C3527CC9FE46C2F27D3A0797473A61
  2316. 9BB8C2587C3CE63F3207972A089723220897CDED84C3527CCDD97B3A0C97
  2317. 320D97AF320C9732629B3E59CD1086C3527C3E44320E97320497FE5AC8AF
  2318. 320497C9FE42C2147E3A0797473A619BB8C20102007E587CAF32629B3E59
  2319. CD1086C3527C3E43320E97C9FE45C2527CCDB275C3527C3A0C97FE05FA30
  2320. 7E11CE89CDD775C3527C3C320C97CD1687C35B7CFE44C2BC7E3A0797473A
  2321. 619BB8CA7E7E3A0D97FE05FA5B7E11CE89CDD775C3527C3C320D973A0797
  2322. 3D473A619BB8C2587CCD6E7CAF320C9732629B3E59CD1086C3527CC93CE6
  2323. 3F3207972A0897232208973A0C97320D973A629BCDC383C3527CAF320C97
  2324. 32629B4F320497B7CAB37E4F3E0132629B793213973E59CD1086C3527CC9
  2325. FE46C2F57E3A0D97FE05FAD27E119089CDD775C3527C3C320D973A07973D
  2326. 473A619BB8C2587CCD6E7CAF320C9732629B3E59CD1086C3527CC9FE5AC2
  2327. 587F3A0797473A610102007F9BB8C2587C3CE63F3207972A089723220897
  2328. 3A629BFE01C2227F3A1397FE44CA3D7F2AE7963AE2963DB7FA337F361A23
  2329. C3287F11CB98CD2844AF3204973A0C97320D97AF320C9732629B3E59CD10
  2330. 86C3527C3E46320E97C9FE45C2527CCDB275C3527CC5E5067A2151983620
  2331. 2310FBE1C13E05115198CDE171C34B703E04CDE171C34B70215198220597
  2332. CD9A843009112F8ACDD775C34B70CDCD7BAF320797320C97210000220897
  2333. 220A9711CA91CD3B70210000CD50713E313202973E53320E9711B391CD3B
  2334. 702A0897CD50713A0E97FE442006CDCE81C3C17FFE462006CDD280C3C17F
  2335. FE5A2006CDA582C3C17FFE532006CD2E80C3C17FFE422006CD4D83C30102
  2336. 0080C17FFE43201211C38A3A0497B7280311AB8BCDF775C34B70FE412009
  2337. 11CE8ACDF775C34B7011CE8ACDF775C34B703A0C97FE10FA3F8011FA89CD
  2338. D775C3527C3C320C973E313202973A0197320397211397CD7F7C32629B3A
  2339. 089732619B3E53CD1086C3527CCD1687C32E70FE59C2AB803A0797473A61
  2340. 9BB8C03CE63F3207972A0897232208973A629B211397CDB47C3A0C97320D
  2341. 97AF320C973A03973202973E46320E97CDD384C3527CC9FE4EC2C780CD6E
  2342. 7C3A07973C473A619BB8C0AF320C973E46320E97C9FE45C2527CCDB275C3
  2343. 527C3A0C97FE05FAE38011FA89CDD775C3527C3C320C97AF320497211397
  2344. 22EB9621319822E99606000E0078FE08C20E01020081813E2E2AEB967723
  2345. 22EB9606080C0478FE0CF239812AE9967EE67F2322E996FE21FA39812AEB
  2346. 96FE2FCA0181FE3A2809772322EB960CC3FB807932629B2AEB963E247711
  2347. E491CD3B70111397CD3B703A079732619B3E46CD1086C3527CCD1687C32E
  2348. 70FE59C2AE813A0797473A619BB8C03CE63F3207972A0897232208973A0C
  2349. 97320D97AF320C97AF32D5963EFF32D696CD0984C39A81C3A581FEFFC252
  2350. 7C3E5A320E97C932F3963E44320E97C9FE4EC2C381CD6E7C3A07973C473A
  2351. 619BB8C0C37181FE45C2527CCDB275C3527C3A0C97FE05FADF8111FA89CD
  2352. D775C3527C3C320C9721139722EB9621CD9722EF9606012AEF967E2322EF
  2353. 962AEB96772322EB0102008296043AF396B8F2F1813AF39632629B3A0797
  2354. 32619B3E44CD1086C3527CCD1687C32E70FE59C285823A0797473A619BB8
  2355. C03A619B3CE63F3207972A0897232208973A0C97320D97AF320C973A629B
  2356. FE01C264823A1397FE5A2003320497FE5820033204973A0497B728063E5A
  2357. 320E97C9CD0984C37A8232F396C9FEFFC2527C3E5A320E97C9FE4EC29A82
  2358. CD6E7C3A07973C473A619BB8C0C37082FE45C2527CCDB275C3527C3A0C97
  2359. FE05FAB68211FA89CDD775C3527C3C320C973A079732619BAF32629B3A04
  2360. 97B7280A3E443213973E0132629B3E5ACD1086C3527CCD1687C32E70FE59
  2361. 20483A0797473A619BB8C03CE63F3207972A0897232208973A0C97320102
  2362. 00830D97AF320C9711CB98CD28443A0497FE5A2815CD9A843810CDD384C3
  2363. 527CAF3204973E46320E97C93E42320E97C9FE4E2010CD6E7C3A07973C47
  2364. 3A619BB8C0C3EF82FE45C2527CCDB275C3527C3A0C97FE05FA5E8311FA89
  2365. CDD775C3527C3C320C973A079732619BAF32629B3E42CD1086C3527CCD16
  2366. 87C32E70FE5920263A0797473A619BB8C03CE63F3207972A089723220897
  2367. 3A0C97320D97AF320C973E43320E97C9FE4E2010CD6E7C3A07973C473A61
  2368. 9BB8C0C38783FE45C2527CCDB275C3527C322D9821139722E5963A009747
  2369. 212D9835FA4B712AE5967E2322E596B8C2FD837E2322E596212D983557E6
  2370. 805F7AE67FB8CAFC837AC640E67FB311CB9801020084CD1B00C22E70C3D0
  2371. 833AFF964F3AD596B7C03AD696B7280206003A0297D631473AF596D60590
  2372. 322D9821CD9722EF9606003A2D983DF23C8478C34B71322D9811CB98CD13
  2373. 00C2918457E6805F7AE67FFE20FA6D84FE7FCA6D84B9C28484212D98352A
  2374. EF96772322EF9604C38484322E98212D98352AEF96712322EF96043A2E98
  2375. C640E67F2AEF96B3772322EF9604C331843EFF32D59678C34B71D29E843F
  2376. C5D5E5063221CB9836202310FB062021319836202310FB2A0597113198CD
  2377. 1C44220597200D21319811CB98CD1C44E1D1C1C93718F93EFF32D696AF32
  2378. D596E511CB98216199CD2444E1C2ED75C34B7121139722EB9621CB9822E9
  2379. 96AF322D98322E9801020085063236202310FB2AEB967E2322EB96FE2EC2
  2380. 21853A2D98322E98AF322D98C35185B7CA7A852AE996772322E9963A2D98
  2381. 3C322D98FE08FA0785322E98AF322D982AEB967E2322EB96B7CA7A85FE2E
  2382. C239852AE996362F2322E9962AEB967E2322EB96B7CA7A852AE996772322
  2383. E9963A2D983C322D98FE03FA5A852AEB96362411E491CD3B70111397CD3B
  2384. 702AE99636033ADB96B7CAF98511CB98216199CD2444C2F98511D68ACDD7
  2385. 7511CB98CD28442AE9962B7EFE4238FA3522E99611CB98216199CD2444C2
  2386. DD8511CB98CD28442AE996B7ED5220D911468ACD3B70C921CB98113198CD
  2387. 1C443E3A010E00213198EDB1233624113198CD3B7011CB98216199CD0102
  2388. 00862044CA4B71F511E789CDD775F1C3ED7532639B210F973E0177233A02
  2389. 97D631473A629BC6238077230100004F3A619BC6207723814F3E0088473A
  2390. 639B7723814F3E0088473A629BB7CA5A863D32629B7E23814F3E008847C3
  2391. 44863A0297FE32CA8B86D2748679E6C0070781E63FC6207723C3A2863600
  2392. E5211097CD8088E14B427A07070707E60FC620772378E60F070747790707
  2393. E603B0C620772379E63FC62077233AFD967723AF773ADE96B72804233E24
  2394. 77CDBC86C32E70C34B713AF996322D983A2D983DB7FAD786322D983AFB96
  2395. 5FCDE970C3C2863ADC96B7CAF1863A0E97FE53CAF186CDF870C3F186FE11
  2396. C2E6863ADE96B7280C111C92CD3B7011109701020087CD3B70210F977EB7
  2397. CA13875FCDE97023C30687C34B71CD3888C32E70CD7288C31687FE0120F6
  2398. CD7288C32E70FE0128F63210974F3A0297D6314779D6239032629B0600CD
  2399. 7288C32E70FE0128D932619B321197814F3E0088473A619BD62032619BCD
  2400. 7288C32E70FE01CA2687322D98321297814F3E0088473A629B322E982113
  2401. 9722EB963A2E98D601FAAA87322E98CD7288C32E70FE01CA26872AEB9677
  2402. 2322EB96814F3E00884718DACD7288C32E70FE01CA2687D620322F983A02
  2403. 97FE32CA0488D2D98779E6C0070781E63F473A2F98B8CA2D88CD6E7CC92A
  2404. EB963600211097CD80884B427A07070707E60F573A2F98BA20E1CD7288C3
  2405. 2E70FE01CA2687D60102008820322F9878E60F070747790707E603B0473A
  2406. 2F98B8C2D587CD7288C32E70FE01CA2687D6204779E63FB8C2D5872AEB96
  2407. 36003A2D98C34B71216D9722F196CDF870C32E702AF196772322F196473A
  2408. FE96B820EB3ADE96B728103E247723110B92CD3B70116E97CD3B70216D97
  2409. 22F196C34B712AF1967E2322F196FE0DC24B71C9E5C51100007EB7CAB388
  2410. E5AB5FE60F4F060021D6880909E57B0F0F0FE61E4F21B688097EAA2356E1
  2411. AE5F237EAA57E123C38588C1E1C900008110022183310442855206638773
  2412. 088489940AA58BB50CC68DD60EE78FF70000891112239B322446AD573665
  2413. BF74488CC19D5AAFD3BE6CCAE5DB7EE9F7F80D4E756D626572206F660102
  2414. 0089207061636B6574733A0D4E756D626572206F6620726574726965733A
  2415. 0D46696C65206E616D653A244B65726D69742D54525338303E240D240D3F
  2416. 556E7265636F676E697A656420636F6D6D616E64240D3F496C6C6567616C
  2417. 20636861726163746572240D3F4E6F7420636F6E6669726D6564243F556E
  2418. 61626C6520746F207265636569766520696E6974696174650D243F556E61
  2419. 626C6520746F20726563656976652066696C65206E616D650D243F556E61
  2420. 626C6520746F207265636569766520656E64206F662066696C650D243F55
  2421. 6E61626C6520746F207265636569766520646174610D243F53797374656D
  2422. 20444F53206572726F720D243F556E61626C0102008A6520746F20726563
  2423. 6569766520616E2061636B6E6F776C656467656D656E742066726F6D2074
  2424. 686520686F73740D240D3F556E61626C6520746F2066696E642066696C65
  2425. 0D243F556E61626C6520746F2072656E616D652066696C65240D3F537973
  2426. 74656D20444F53206572726F72240D3F556E61626C6520746F2074656C6C
  2427. 20686F73742074686174207468652073657373696F6E2069732066696E69
  2428. 73686564240D3F556E61626C6520746F2074656C6C20686F737420746F20
  2429. 6C6F676F75742407436F6D706C6574656424074661696C6564242552656E
  2430. 616D696E672066696C6520746F20240D3C436C6F73696E6720746865206C
  2431. 6F672066696C653E0102008B240D3C436F6E6E656374656420746F207265
  2432. 6D6F746520686F73742C207479706520244320746F2072657475726E3E0D
  2433. 3C434C4541523E20697320436F6E74726F6C2D5F0D240D3C436F6E6E6563
  2434. 74696F6E20636C6F7365642C206261636B206174206D6963726F3E242043
  2435. 6F6E74726F6C2D24202854797065204C656674204172726F7720746F2073
  2436. 656E64204354524C2D53290D2420284E6F7420696D706C656D656E746564
  2437. 290D2407496E7465727275707465642444495220203A300D0D46696C6520
  2438. 4B494C4C4544240D0D2B2B20426164206472697665206E616D65240D2043
  2439. 6F6E6669726D2077697468203C454E5445523E2C2063616E63656C200102
  2440. 008C77697468203C425245414B3E20240D5479706520746865206E657720
  2441. 657363617065206368617261637465723A2020240D42594520746F20686F
  2442. 737420284C4F474F55542920616E64206578697420746F20444F530D434F
  2443. 4E4E45435420746F20686F7374206F6E2073656C656374656420706F7274
  2444. 0D444952206F66206C6F63616C206469736B0D4558495420746F20444F53
  2445. 0D46494E4953482072756E6E696E67204B65726D6974206F6E2074686520
  2446. 686F73740D48454C5020627920676976696E672074686973206D65737361
  2447. 67650D4B494C4C20612066696C650D4C4F4720746865207465726D696E61
  2448. 6C2073657373696F6E20746F20612066696C0102008D650D4C4F474F5554
  2449. 2074686520686F73740D524543454956452066696C652066726F6D20686F
  2450. 73740D53454E442066696C6520746F20686F73740D534554206120706172
  2451. 616D657465720D53484F572074686520706172616D65746572730D535441
  2452. 545553206F66204B65726D6974240D42417564202872617465290D424C6F
  2453. 636B2D636865636B2D747970652028666F72206572726F72206465746563
  2454. 74696F6E0D444542756767696E67206D6F64652028746F20646973706C61
  2455. 79207061636B657473290D45736361706520286368617261637465722064
  2456. 7572696E6720434F4E4E454354290D46696C652D6D6F64652028666F7220
  2457. 6F7574676F696E670102008E2066696C6573290D49626D20287061726974
  2458. 7920616E64207475726E2061726F756E642068616E646C696E67290D4C6F
  2459. 63616C2D6563686F202868616C662F6475706C6578290D50417269747920
  2460. 28666F7220636F6D6D756E69636174696F6E206C696E65290D504F727420
  2461. 28746F20636F6D6D756E6963617465206F6E290D5052696E746572202874
  2462. 6F207072696E74207465726D696E616C2073657373696F6E290D56743532
  2463. 2D656D756C6174696F6E0D5761726E696E672028666F722066696C656E61
  2464. 6D6520636F6E666C6963747329240D5041442D434841520D50414444494E
  2465. 47240D312D4348415241435445522D434845434B53554D0D322D43480102
  2466. 008F415241435445522D434845434B53554D0D332D434841524143544552
  2467. 2D4352432D4343495454240D4556454E2020204D41524B20204E4F4E4520
  2468. 20204F44442020205350414345240D4F464620204F4E240D4E4F20202059
  2469. 4553240D5354414E4441524420525332333220706F7274240D3F20205468
  2470. 6973206D6573736167650D432020436C6F73652074686520636F6E6E6563
  2471. 74696F6E0D302020287A65726F29205472616E736D69742061204E554C4C
  2472. 0D532020537461747573206F662074686520636F6E6E656374696F6E0D54
  2473. 79706520746865206573636170652063686172616374657220616761696E
  2474. 20746F2073656E6420697420746F207468650102009020686F73740D0D43
  2475. 6F6D6D616E643E24206F6E24206F6666240D4C6F63616C206563686F2420
  2476. 64656661756C7424204153434949242062696E617279240D415343494920
  2477. 2020202042494E415259202020202044454641554C54240D202020202035
  2478. 302020202020373520202020203131302020203133342E35202020203135
  2479. 3020202033303020202036303020202020313230300D2020203138303020
  2480. 202032303030202020203234303020202020333630302020203438303020
  2481. 20373230302020393630302020203139323030240D5654353220656D756C
  2482. 6174696F6E240D46696C65204D6F6465240D49424D20666C6167240D4669
  2483. 6C65207761726E69010200916E67240D5072696E746572240D4573636170
  2484. 6520636861723A20240D446562756767696E67206D6F6465240D50617269
  2485. 74793A20240D426C6F636B20636865636B20747970653A20242D63686172
  2486. 6163746572246E6F6E65246D61726B247370616365246F6464246576656E
  2487. 244C696E652053706565643A202420426175640D241C1F0D244B65726D69
  2488. 742D3830205620332E3520285452532D3830204D6F64656C20312F33290D
  2489. 24082008242008241D1E241C1A1A19191919191919191919191919191919
  2490. 191919241C1A1A1A19191919191919191919191919191919191919241C24
  2491. 1C1A1A1A1A1919191919191919191919241C1A1A1A1A1A1A241C1A1A0102
  2492. 00921A1A1A1A1A1A1A1A1A1A241C1A1A1A1A1A1A1A1F525061636B3A2024
  2493. 1C1A1A1A1A1A1A1A1A1A1A1F535061636B3A20241B2400001A2400001924
  2494. 0000182400001C1F240024000024240000241C2400001B2400001F240000
  2495. 1E24100342594524212107434F4E4E454354240000034449522424240345
  2496. 524124272704455849542403030646494E495348241B1B03474554240C0C
  2497. 0448454C50240606044B494C4C242727034C4F47240909064C4F474F5554
  2498. 241E1E0752454345495645240C0C0453454E44240F0F0353455424121204
  2499. 53484F57241515065354415455532418180C044241554424212110424C4F
  2500. 434B2D434845434B2D545950452418180944010200934542554747494E47
  2501. 242727064553434150452400000946494C452D4D4F44452412120349424D
  2502. 2403030A4C4F43414C2D4543484F2406060650415249545924151504504F
  2503. 5254241E1E075052494E5445522424240E565435322D454D554C4154494F
  2504. 4E241B1B075741524E494E47240F0F02085041442D434841522400000750
  2505. 414444494E472403030314312D4348415241435445522D434845434B5355
  2506. 4D24313114322D4348415241435445522D434845434B53554D2432321533
  2507. 2D4348415241435445522D4352432D434349545424333305044556454E24
  2508. 0000044D41524B240303044E4F4E45240606034F44442409090553504143
  2509. 45240C0C02024F4E01020094240101034F46462400000305415343494924
  2510. 01010642494E4152592402020744454641554C5424000001085354414E44
  2511. 41524424EB00EB0002024E4F240000035945532401010D3F50726F677261
  2512. 6D206572726F723A2020496E76616C696420434F4D4E442063616C6C240D
  2513. 3F416D626967756F7573240D3F496C6C6567616C20696E7075742066696C
  2514. 6520737065632420436F6E6669726D2077697468203C454E5445523E2C20
  2515. 43616E63656C2077697468203C425245414B3E240D241002353024000002
  2516. 373524111103313130242222053133342E35243333033135302444440333
  2517. 30302455550336303024666604313230302477770431383030248888013B
  2518. 00950432303030249999043234303024AAAA043336303024BBBB04343830
  2519. 3024CCCC043732303024DDDD043936303024EEEE05313932303024FFFF01
  2520. 0DD796000000010100000000061F0104ED96619A0112F49655205E080500
  2521. 0000000D0D2323313131010405975198020200706967756F7573240D3F49
  2522. 6C6C6567616C20696E7075742066696C6520737065632420436F6E666972
  2523. 6D2077697468203C454E5445523E2C2043616E63656C2077697468203C42
  2524. 5245414B3E240D2410023530240000023735241111033131302422220531
  2525. 33342E352433330331353024444403333030245555033630302466660431
  2526. 3230302477770431383030248888013B0095043230303024999904323430
  2527. 3024AAAA043336303024BBBB043438303024CCCC043732303024DDDD0439
  2528. 36303024EEEE05313932303024FFFF010DD796000000010100000000061F
  2529. 0104ED96619A0112F49655205E0805000000000D0D232331
  2530. <<< trsmit.hlp >>>
  2531. This implementation of the Kermit protocol was done by Stan Barber at Rice
  2532. University (sob@RICE).  It is compatable with all DOS's available for the TRS80
  2533. Model I or Model III (and the Model 4 running in Model III mode).  It has been
  2534. checked out under the following DOS's: TRSDOS 2.3 (Model I), TRSDOS 1.3 (Model
  2535. III), NEWDOS/80 V 2.0, LDOS 5.1.3, DOS+ 3.5 and VTOS 3.0 (Model I).
  2536.  
  2537. The files are as follows:
  2538.  
  2539. TRS80 Name         Distribution Name     Description
  2540.  
  2541.  COMND/SRC          TRSCMD.SRC            Command parser
  2542.  GET/SRC            TRSGET.SRC            RECEIVE & GET command               
  2543.  KERMIT/SRC         TRSMIT.SRC            Main source module, calls in others
  2544.  KERSTR/SRC         TRSSTR.SRC            Strings & storage area
  2545.  KILLDIR/SRC        TRSKD.SRC             Source for KILL & DIR commands
  2546.  MORE/SRC           TRSMORE.SRC           Source for misc commands
  2547.  SEND/SRC           TRSSEND.SRC           Source for SEND command
  2548.  XFER/SRC           TRSXFER.SRC           Source common to RECEIVE & SEND
  2549.  KERMIT/DOC         TRSMIT.DOC            User Guide manual chapter
  2550.  KERMAKE/BAS        TRSMAKE.BAS           Basic program to create binaries
  2551. <<< trsmit.src >>>
  2552. ;kermit-trs80
  2553. ;started 10/10/83
  2554. ;updated 04/01/84
  2555. ;by Stan Barber
  2556. ;based on CP/M-80 Kermit
  2557.     ORG    7000H    ;GET OUT OF WAY OF DOS OVERLAYS
  2558. ; Symbolic Definitions for some ASCII characters
  2559. ;
  2560. BELL    EQU    07O    ;ASCII BEL (Control-G)
  2561. CTRLC    EQU    03O    ;ASCII ETX (Control-C)
  2562. TAB    EQU    11O    ;ASCII Tab (Control-I)
  2563. LF    EQU    12O    ;ASCII Line Feed (CTRL-J)
  2564. FF    EQU    14O    ;ASCII Form Feed (CTRL-L)
  2565. CR    EQU    15O    ;ASCII Carriage Return (CTRL-M)
  2566. XON    EQU    21O    ;The the ASCII character used for XON
  2567. XOFF    EQU    23O    ;The the ASCII character used for XOFF
  2568. ESC    EQU    33O    ;ASCII ESCape
  2569. SUBT    EQU    32O    ;ASCII SUB (CTRL-Z)
  2570. DEL    EQU    177O    ;ASCII DELete (rubout)
  2571. RESET    EQU    0E8H        ;reset uart
  2572. BAUDST    EQU    0E9H        ;set baud rate
  2573. MNPORT    EQU    0EBH        ;RS232 data port
  2574. MNPRTS    EQU    0EAH        ;RS232 STATUS PORT
  2575. OUTPUT    EQU    40H
  2576. INPUT    EQU    80H
  2577. DEFESC    EQU    31        ;<CLEAR> key on key board
  2578. DBAUD    EQU    55H        ;Default baud rate (300)
  2579. MAXPKT  EQU    '~'-' '+2O    ; Maximum size of a packet.
  2580. MAXTRY    EQU    05O        ; Default number of retries on a packet.
  2581. IMXTRY    EQU    20O        ; Default number of retries send initiate.
  2582. DRPSIZ    EQU    5EH        ; Default receive packet size.
  2583. DSPSIZ    EQU    20H        ; Default send packet size.
  2584. DSTIME    EQU    08H        ; Default send time out interval.
  2585. DRTIME    EQU    05H        ; Default receive time out interval.
  2586. DSPAD    EQU    00H        ; Default send padding.
  2587. DRPAD    EQU    00H        ; Default receive padding.
  2588. DSPADC    EQU    00H        ; Default send padding char.
  2589. DRPADC    EQU    00H        ; Default receive padding char.
  2590. DSEOL    EQU    CR        ; Default send EOL char.
  2591. DREOL    EQU    CR        ; Default receive EOL char.
  2592. DSQUOT    EQU    '#'        ; Default send quote char.
  2593. DRQUOT    EQU    '#'        ; Default receive quote char.
  2594. DSCHKT    EQU    '1'        ; Default checksum type
  2595. PAREVN    EQU    00H        ; Even parity.
  2596. PARMRK    EQU    03H        ; Mark parity.
  2597. PARNON    EQU    06H        ; No parity.
  2598. PARODD    EQU    09H        ; Odd parity.
  2599. PARSPC    EQU    0CH        ; Space parity.
  2600. DEFPAR    EQU    PARNON        ; Default parity.
  2601. IBMPAR    EQU    PARMRK        ; IBM COMTEN's parity.
  2602. SOH    EQU    01H        ; Start of header char.
  2603. BUFSIZ    EQU    0
  2604. DIASW    EQU    01H        ; Default is diagnostics on.
  2605. CMKEY    EQU    01H        ; Parse a keyword.
  2606. CMIFI    EQU    02H        ; Parse an input file spec (can be wild).
  2607. CMOFI    EQU    03H        ; Parse an output file spec.
  2608. CMCFM    EQU    04H        ; Parse a confirm.
  2609. CMTXT    EQU    05H        ; Parse text.
  2610. CMIFIN    EQU    10H        ; Parse an input file spec (but no
  2611. ;dos calls (all preceeded by @)
  2612. @GET    EQU    13H    ;get a byte from a file
  2613. @PUT    EQU    1BH    ;put a byte in a file
  2614. @KBD    EQU    2BH    ;scan keyboard and return
  2615. @DSP    EQU    33H    ;put a character on screen
  2616. @PRT    EQU    3BH    ;put a character on the printer
  2617. @KEYIN    EQU    40H    ;get a line from keyboard
  2618. @KEY    EQU    49H    ;wait for key from keyboard
  2619. @EXIT    EQU    402DH    ;normal exit to dos
  2620. @ABORT    EQU    4030H    ;abnormal exit to dos
  2621. @CMNDI    EQU    4405H    ;execute command =>HL
  2622. @ERROR    EQU    4409H    ;print dos error
  2623. @FSPEC    EQU    441CH    ;process filespec
  2624. @INIT    EQU    4420H    ;initialize a file
  2625. @OPEN    EQU    4424H    ;open existing file
  2626. @CLOSE    EQU    4428H    ;close open file
  2627. @KILL    EQU    442CH    ;kill open file
  2628. @VER    EQU    443CH    ;write a sector with verify
  2629. START    LD    (OLDSP),SP
  2630.     LD    SP,STACK
  2631.     CALL    MDMRST
  2632.     XOR    A        ;ZERO A
  2633.     LD    (FCB),A        ;SET FILE CLOSED FLAG
  2634.     LD    DE,VERSIO
  2635.     CALL    PRTSTR
  2636.     CALL    KERMIT
  2637.     JP    EXIT1
  2638. MDMRST    LD    A,(SPEED)
  2639.     OUT    (RESET),A
  2640.     OUT    (BAUDST),A
  2641.     LD    A,108
  2642.     OUT    (MNPRTS),A
  2643.     RET
  2644. CMBLNK    PUSH    DE
  2645.     LD    DE,CLRTOP
  2646.     CALL    PRTSTR
  2647.     POP    DE
  2648. QUIT:    RET
  2649. CONOUT    PUSH    DE
  2650.     PUSH    HL
  2651.     PUSH    BC
  2652.     PUSH    AF
  2653.     CALL     @DSP
  2654.     POP    AF
  2655.     POP    BC
  2656.     POP    HL
  2657.     POP    DE
  2658.     RET
  2659. PRTSTR    LD    A,(DE)
  2660.     CP    '$'
  2661.     RET    Z
  2662.     CALL    CONOUT
  2663.     INC    DE
  2664.     JR    PRTSTR
  2665. CONIN    PUSH    DE
  2666.     CALL    @KBD
  2667.     POP    DE
  2668.     RET
  2669. KERMIT    LD    DE,FCB
  2670.     LD    A,(DE)
  2671.     BIT    7,A    ;WAS FILE OPEN?
  2672.     CALL    NZ,@CLOSE    ;CLOSE IT IF IT WAS
  2673.     LD    DE,KERM
  2674.     CALL    PROMPT
  2675.     LD    DE,COMTAB
  2676.     LD    HL,TOPHLP
  2677.     LD    A,CMKEY
  2678.     CALL    COMND
  2679.     JP    KERMT2
  2680.     LD    HL,KERMTB
  2681.     LD    C,A
  2682.     LD    B,0
  2683.     ADD    HL,BC
  2684.     JP    (HL)
  2685. KERMTB    JP    TELNET
  2686.     JP    EXIT
  2687.     JP    HELP
  2688.     JP    LOG
  2689.     JP    READ
  2690.     JP    SEND
  2691.     JP    SETCOM
  2692.     JP    SHOW
  2693.     JP    STATUS
  2694.     JP    FINISH
  2695.     JP    LOGOUT
  2696.     JP    BYE
  2697.     JP    DIR
  2698.     JP    ERA
  2699. KERMT2    LD    DE,ERMES1
  2700.     CALL    PRTSTR
  2701.     JP    KERMIT
  2702. KERMT3    LD    DE,ERMES3
  2703.     CALL    PRTSTR
  2704.     JP    KERMIT
  2705. SETPAR    PUSH    HL
  2706.     PUSH    BC
  2707.     LD    HL,PARITY
  2708.     LD    C,(HL)
  2709.     LD    B,0
  2710.     LD    HL,PARJMP
  2711.     ADD    HL,BC
  2712.     JP    (HL)
  2713. PARJMP    JP    EVEN
  2714.     JP    MARK
  2715.     JP    NONE
  2716.     JP    ODD
  2717.     JP    SPACE
  2718. NONE    JP    PARRET
  2719. EVEN    AND    7FH
  2720.     JP    PE,PARRET
  2721.     OR    80H
  2722.     JP    PARRET
  2723. MARK    OR    80H
  2724.     JP    PARRET
  2725. ODD    AND    7FH
  2726.     JP    PO,PARRET
  2727.     OR     80H
  2728.     JP    PARRET
  2729. SPACE    AND    7FH
  2730. PARRET    POP    BC
  2731.     POP    HL
  2732.     RET
  2733. OUTCHR    PUSH    DE
  2734. OUTCHR1    IN    A,(MNPRTS)
  2735.     AND    OUTPUT
  2736.     JR    Z,OUTCHR1
  2737.     LD    A,E
  2738.     CALL    SETPAR
  2739.     OUT    (MNPORT),A
  2740.     POP    DE
  2741.     RET
  2742. INCHR    IN    A,(MNPRTS)
  2743.     AND    INPUT
  2744.     JR    NZ,INCHR2
  2745.     CALL    CONIN
  2746.     OR    A
  2747.     JR    Z,INCHR
  2748.     CP    CR
  2749.     JR    NZ,INCHR4
  2750.     RET
  2751. INCHR4    CP    1AH    ;CONTROL-Z?
  2752.     JR    Z,INCHR5
  2753.     CP    18H    ;CONTROL-X?
  2754.     JR    NZ,INCHR
  2755. INCHR5    ADD    A,20H
  2756.     LD    (CZSEEN),A
  2757.     RET
  2758. INCHR2    IN    A,(MNPORT)
  2759.     LD    B,A
  2760.     LD    A,(PARITY)
  2761.     CP    PARNON
  2762.     LD    A,B
  2763.     JP    Z,RSKP
  2764.     AND    7FH
  2765.     JP    RSKP
  2766. EXIT    LD    A,CMCFM
  2767.     CALL    COMND
  2768.     JP    KERMT3
  2769. EXIT1    LD    DE,FCB
  2770.     LD    A,(FCB)
  2771.     BIT    7,A
  2772.     CALL    NZ,@CLOSE    ;JUST IN CASE
  2773.     LD    SP,(OLDSP)
  2774.     JP    @EXIT
  2775. HELP    LD    DE,TOPHLP
  2776.     CALL    PRTSTR
  2777.     JP    KERMIT
  2778. *GET     COMND/SRC    ;COMMAND PARSER
  2779. *GET    KILLDIR/SRC    ;KILL AND DIR COMMANDS
  2780. *GET    MORE/SRC    ;MOST OF THE NON PROTOCOL RELATED COMMANDS
  2781. *GET    GET/SRC        ;RECEIVE PROTOCOL
  2782. *GET    SEND/SRC    ;SEND PROTOCOL
  2783. *GET    XFER/SRC    ;PROTOCOL COMMON CODE
  2784. *GET     KERSTR/SRC    ;STRINGS
  2785.     END    START
  2786. <<< trsmore.src >>>
  2787. ; THIS IS WHERE WE GO IF WE GET AN ERROR DURING A PROTOCOL COMMUNICATION.
  2788. ;   CALL ERROR PRINTS THE ERROR PACKET ON LINE 6 OR SO.
  2789. ;   CALL ERROR1 PRINT CRLF FOLLOWED BY THE ERROR PACKET.
  2790. ;   CALL ERROR2 JUST PRINTS THE ERROR PACKET.
  2791. ;   CALL ERROR3 POSITIONS CURSOR AND PRINTS ERROR MESSAGE SPECIFIED IN DE.
  2792. ERROR:    CALL   ERROR9        ; POSITION THE CURSOR.
  2793.     LD     A,'A'        ; SET THE STATE TO ABORT.
  2794.     LD     (STATE),A
  2795.     JP     ERROR2
  2796. ERROR1:    LD     DE,CRLF        ; PRINT A CRLF.
  2797.     CALL   PRTSTR
  2798. ERROR2:    LD     A,(ARGBLK+1)    ; GET THE LENGTH OF THE DATA.
  2799.     LD     C,A
  2800.     LD     B,0        ; PUT IT INTO BC
  2801.     LD     HL,DATA        ; GET THE ADDRESS OF THE DATA.
  2802.     ADD    HL,BC        ; GET TO THE END OF THE STRING.
  2803.     LD     A,'$'        ; PUT A DOLLAR SIGN AT THE END.
  2804.     LD     (HL),A
  2805.     LD     DE,DATA        ; PRINT ERROR MESSAGE
  2806.     CALL   PRTSTR
  2807.     RET    
  2808. ERROR3:    PUSH   DE        ; SAVE THE POINTER TO THE MESSAGE.
  2809.     CALL   ERROR9        ; POSITION THE CURSOR.
  2810.     LD     DE,CLRLIN    ; CLEAR THE LINE
  2811.     CALL   PRTSTR
  2812.     POP    DE        ; GET THE POINTER BACK.
  2813.     CALL   PRTSTR        ; PRINT ERROR MESSAGE
  2814.     RET    
  2815. ERROR9:    LD     DE,SCRERR    ; POSITION CURSOR
  2816.     CALL    PRTSTR
  2817.     RET    
  2818. ERRORD:    OR    A    ;display disk error
  2819.     RET    Z
  2820.     OR    80H
  2821.     OR    40H
  2822.     CALL    @ERROR
  2823.     RET
  2824. FINMES:    PUSH   DE        ; SAVE MESSAGE.
  2825.     LD    DE,SCRST
  2826.     CALL    PRTSTR
  2827.     POP    DE        ; PRINT THE TERMINATION MESSAGE
  2828.     CALL   PRTSTR
  2829.     LD     DE,SCREND    ; POSITION CURSOR FOR PROMPT
  2830.     CALL    PRTSTR
  2831.     RET    
  2832. ; THIS IS THE FINISH COMMAND.  IT TELLS THE REMOTE KERSRV TO EXIT.
  2833. FINISH:    LD     A,CMCFM
  2834.     CALL   COMND        ; GET A CONFIRM.
  2835.     JP    KERMT3
  2836.     XOR    A        ;  DIDN'T GET A CONFIRM.
  2837.     LD     (NUMTRY),A    ; INITITIALIZE COUNT.
  2838.     LD     A,'1'        ; RESET BLOCK CHECK TYPE TO SINGLE CHARACTER
  2839.     LD     (CURCHK),A    ;  .  .  .
  2840. FINSH1:    LD     A,(NUMTRY)    ; HOW MANY TIMES HAVE WE TRIED?
  2841.     CP     MAXTRY        ; TOO MANY TIMES?
  2842.     JP     M,FINSH3        ; NO, TRY IT.
  2843. FINSH2:    LD     DE,ERMS18    ; SAY WE COULDN'T DO IT.
  2844.     CALL   PRTSTR
  2845.     JP     KERMIT        ; GO HOME.
  2846. FINSH3:    INC    A        ; INCREMENT THE NUMBER OF TRIES.
  2847.     LD     (NUMTRY),A
  2848.     XOR    A
  2849.     LD     (ARGBLK),A    ; MAKE IT PACKET NUMBER ZERO.
  2850.     LD     A,1
  2851.     LD     (ARGBLK+1),A    ; ONE PIECE OF DATA.
  2852.     LD     HL,DATA
  2853.     LD     (HL),'F'    ; FINISH RUNNING KERMIT.
  2854.     LD     A,'G'        ; GENERIC COMMAND PACKET.
  2855.     CALL   SPACK
  2856.     JP    FINSH1
  2857.     CALL   RPACK         ;GET AN ACKNOWLEDGEMENT.
  2858.     JP    FINSH1
  2859.     CP     'Y'        ; ACK?
  2860.     JP     Z,KERMIT        ; YES, WE ARE DONE.
  2861.     CP     'E'        ; IS IT AN ERROR PACKET?
  2862.     JP     NZ,FINSH1    ; TRY SENDING THE PACKET AGAIN.
  2863.     CALL   ERROR1        ; PRINT THE ERROR MESSAGE.
  2864.     JP     KERMIT
  2865. ; THIS IS THE LOGOUT COMMAND.  IT TELLS THE REMOTE KERSRV TO LOGOUT.
  2866. LOGOUT:    LD     A,CMCFM
  2867.     CALL   COMND        ; GET A CONFIRM.
  2868.     JP    KERMT3
  2869.     CALL   LOGO        ; SEND THE LOGOUT PACKET.
  2870.     JP     KERMIT        ; GO GET ANOTHER COMMAND
  2871.     JP     KERMIT        ;  WHETHER WE SUCCEED OR NOT.
  2872. LOGO:    XOR    A
  2873.     LD     (NUMTRY),A    ; INITITIALIZE COUNT.
  2874.     LD     A,'1'        ; RESET BLOCK CHECK TYPE TO SINGLE CHARACTER
  2875.     LD     (CURCHK),A    ;  .  .  .
  2876. LOGO1:    LD     A,(NUMTRY)    ; HOW MANY TIMES HAVE WE TRIED?
  2877.     CP     MAXTRY        ; TOO MANY TIMES?
  2878.     JP     M,LOGO3        ; NO, TRY IT.
  2879. LOGO2:    LD     DE,ERMS19    ; SAY WE COULDN'T DO IT.
  2880.     CALL   PRTSTR
  2881.     RET                ; FINISHED.
  2882. LOGO3:    INC    A        ; INCREMENT THE NUMBER OF TRIES.
  2883.     LD     (NUMTRY),A
  2884.     XOR    A
  2885.     LD     (ARGBLK),A    ; MAKE IT PACKET NUMBER ZERO.
  2886.     LD     A,1
  2887.     LD     (ARGBLK+1),A    ; ONE PIECE OF DATA.
  2888.     LD     HL,DATA
  2889.     LD     (HL),'L'        ; LOGOUT THE REMOTE HOST.
  2890.     LD     A,'G'        ; GENERIC COMMAND PACKET.
  2891.     CALL   SPACK
  2892.     JP    LOGO2
  2893.     CALL   RPACK        ; GET AN ACKNOWLEDGEMENT
  2894.     JP    LOGO1
  2895.     CP     'Y'        ; ACK?
  2896.     JP     Z,RSKP        ; YES, WE ARE DONE.
  2897.     CP     'E'        ; IS IT AN ERROR PACKET?
  2898.     JP     NZ,LOGO1        ; TRY SENDING THE PACKET AGAIN.
  2899.     CALL   ERROR1        ; PRINT THE ERROR MESSAGE.
  2900.     RET                ; ALL DONE.
  2901. ; THIS IS THE BYE COMMAND.  IT TELLS THE REMOTE KERSRV TO LOGOUT AND EXITS.
  2902. BYE:    LD     A,CMCFM
  2903.     CALL   COMND    ; GET A CONFIRM.
  2904.     JP    KERMT3
  2905.     CALL   LOGO    ; TELL THE MAIN FRAME TO LOGOUT.
  2906.     JP     KERMIT    ; IF IT FAILS, DON'T EXIT.
  2907.     JP     EXIT1    ; EXIT KERMIT.
  2908. ; THIS IS THE LOG COMMAND.  IT LOGS A SESSION TO A FILE.
  2909. LOG:    LD     A,CMOFI    ; PARSE AN INPUT FILE SPEC.
  2910.     LD     DE,LFCB
  2911.     CALL   COMND
  2912.     JP    KERMT3
  2913.     LD     A,CMCFM        ; PARSE A CONFIRM.
  2914.     CALL   COMND
  2915.     JP    KERMT3
  2916.     LD     HL,LOGFLG
  2917.     LD     (HL),0FFH    ; SET THE LOG FLAG.
  2918.     LD     HL,LBUFF
  2919.     LD     (BUFPNT),HL
  2920.     LD    DE,LFCB
  2921.     CALL    @OPEN
  2922.     JR    NZ,LOG1A
  2923.     LD     DE,LFCB
  2924.     CALL    @KILL
  2925.     LD     DE,LFCB
  2926.     LD    HL,(BUFPNT)
  2927. LOG1A:    CALL    @INIT
  2928.     JP     NZ,KERMIT    ;[UTK3]
  2929.     CALL    ERRORD
  2930.     JP     KERMIT
  2931. ;this is the connect command
  2932. TELNET:    LD    A,CMCFM
  2933.     CALL    COMND
  2934.     JP    KERMT3
  2935.     LD    DE,INFMS7
  2936.     CALL    PRTSTR
  2937.     CALL    ESCPR
  2938.     LD    DE,INFMS8
  2939.     CALL    PRTSTR
  2940. CHRLUP    CALL    PRTCHR
  2941.     CALL    CONCHR
  2942.     JP    KERMIT
  2943.     JP    CHRLUP
  2944. PRTCHR    IN    A,(MNPRTS)
  2945.     AND    INPUT
  2946.     RET    Z
  2947. PRTCH2    IN    A,(MNPORT)
  2948.     AND    7FH
  2949.     CP    LF
  2950.     JR    Z,PRTCHR
  2951.     LD    E,A
  2952.     LD    A,(VTFLG)
  2953.     OR    A
  2954.     JR    Z,PRTCH1
  2955.     LD    A,(ESCFLG)
  2956.     OR    A
  2957.     JP    NZ,VT52
  2958.     LD    A,E
  2959.     CP    DEL
  2960.     RET    Z
  2961.     CP    ESC
  2962.     JR    NZ,PRTCH1
  2963.     LD    (ESCFLG),A
  2964.     JP    PRTCHR
  2965. PRTCH1    CP    FF
  2966.     JP    Z,CMBLNK
  2967.     LD    A,(LOGFLG)
  2968.     OR    A
  2969.     CALL    NZ,LOGIT
  2970.     LD    A,(PRTFLG)
  2971.     OR    A
  2972.     CALL    NZ,PRTIT
  2973.     LD    A,E
  2974.     CALL    CONOUT
  2975.     JP    PRTCHR
  2976. CONCHR    CALL    CONIN
  2977.     AND    7FH
  2978.     OR    A
  2979.     JP    Z,RSKP
  2980.     LD    E,A
  2981.     LD    A,(ESCCHR)
  2982.     CP    E
  2983.     JP    Z,INTCHR
  2984.     LD    A,E
  2985.     CALL    SETPAR
  2986.     LD    E,A
  2987.     PUSH    DE
  2988.     CALL     PRTOUT
  2989.     POP    DE
  2990.     LD    A,(ECOFLG)
  2991.     OR    A
  2992.     JP    Z,RSKP
  2993.     LD    A,E
  2994.     AND     7FH
  2995.     CALL    CONOUT
  2996.     JP    RSKP
  2997. INTCHR    CALL    ESCPR
  2998. INTCH0    CALL    CONIN
  2999.     OR    A
  3000.     JR    Z,INTCH0
  3001.     LD    B,A
  3002.     CALL    CONOUT
  3003.     LD    A,B
  3004.     CP    CTRLC        ;control-c?
  3005.     JR    Z,CONTC        ;yes
  3006.     AND    137O
  3007.     CP    'C'        ;is it close?
  3008.     JP    NZ,INTCHR0    ;no
  3009. CONTC    LD    DE,INFMS9
  3010.     CALL    PRTSTR
  3011.     LD    A,(LOGFLG)    ;is log file on?
  3012.     OR    A
  3013.     RET     Z        ;no
  3014.     XOR    A
  3015.     LD    (LOGFLG),A    ;turn it off
  3016.     LD    DE,INFMS6
  3017.     CALL    PRTSTR
  3018.     LD    DE,LFCB
  3019.     CALL    @CLOSE
  3020.     RET
  3021. INTCHR0    CP    'S'        ;status?
  3022.     JR    NZ,INCH01
  3023.     CALL    STAT01        ;print out status
  3024.     JP    RSKP
  3025. INCH01    LD    A,B
  3026.     CP    '?'
  3027.     JR    NZ,INTCH1
  3028.     LD    DE,INTHLP
  3029.     CALL    PRTSTR
  3030.     JP    INTCH0
  3031. INTCH1    LD    A,B
  3032.     AND    7FH
  3033.     CP    'B'
  3034.     JR    NZ,INTCH2
  3035.     LD    DE,INMS12
  3036.     CALL    PRTSTR
  3037.     JP    RSKP
  3038. INTCH2    LD    A,B
  3039.     CP    '0'
  3040.     JR    NZ,INTCH3
  3041.     LD    A,0
  3042.     CALL    OUTCHR
  3043.     JP    RSKP
  3044. INTCH3    LD    E,A
  3045.     LD    A,(ESCCHR)
  3046.     CP    E
  3047.     JR    Z,INTCHZ
  3048.     LD    A,E
  3049.     CALL    SETPAR
  3050.     CALL    PRTOUT
  3051.     JP    RSKP
  3052. INTCHZ    LD    A,BELL
  3053.     CALL    CONOUT
  3054.     JP RSKP
  3055. VT52    XOR    A
  3056.     LD    (ESCFLG),A
  3057.     LD    A,E
  3058.     CP    'A'
  3059.     RET    M
  3060.     CP    'K'+1
  3061.     RET    P
  3062.     SUB    'A'
  3063.     RLCA
  3064.     RLCA
  3065.     LD    HL,TA
  3066.     LD    E,A
  3067.     LD    D,0
  3068.     ADD    HL,DE
  3069.     EX    DE,HL
  3070.     CALL    PRTSTR
  3071.     RET
  3072. LOGIT    LD    A,E
  3073.     LD    HL,(LOGPTR)
  3074.     LD    (HL),A
  3075.     INC    HL
  3076.     LD    (LOGPTR),HL
  3077.     PUSH    HL
  3078.     POP    BC
  3079.     LD    HL,LBUFF+257
  3080.     OR    A
  3081.     SBC    HL,BC
  3082.     RET    NZ        ;not full yet
  3083.     PUSH    DE
  3084.     LD    A,XOFF        ;stop data flow
  3085.     CALL    OUTCHR        ;send it out
  3086.     LD    DE,LFCB
  3087.     CALL    @VER        ;write out the buffer
  3088.     JR    Z,LOGIT2
  3089.     LD    DE,ERMS11
  3090.     CALL    PRTSTR
  3091. LOGIT2    LD    HL,LBUFF
  3092.     LD    (LOGPTR),HL
  3093.     LD    A,XON
  3094.     CALL    OUTCHR        ;start data flow
  3095.     POP    DE
  3096.     RET
  3097. PRTIT    LD    A,(37E8H)    ;get printer status
  3098.     AND     0F0H
  3099.     CP    30H
  3100.     RET    NZ        ;skip this one
  3101.     LD    A,E
  3102.     PUSH    DE
  3103.     CALL    @PRT        ;dos printer routine
  3104.     POP    DE
  3105.     RET
  3106. PRTOUT    OR    A
  3107.     RET    Z
  3108.     LD    E,A
  3109.     CALL    OUTCHR
  3110.     RET
  3111. ; THIS IS THE SET COMMAND.
  3112. SETCOM:    LD     DE,SETTAB    ; PARSE A KEYWORD FROM THE SET TABLE.
  3113.     LD     HL,SETHLP
  3114.     LD     A,CMKEY
  3115.     CALL   COMND
  3116.     JP     KERMT2
  3117.     LD     HL,SETJTB    ; GET THE ADDRESS OF THE JUMP TABLE.
  3118.     LD     C,A
  3119.     LD     B,0
  3120.     ADD    HL,BC
  3121.     JP   (HL)  
  3122. SETJTB:    JP     ESCAPE    ; 00H SET ESC
  3123.     JP     IBMSET    ; 03H SET IBM
  3124.     JP     LOCAL    ; 06H SET LOCAL
  3125.     JP     KERMT3    ; 09H SET RECEIVE (NOT CURRENTLY USED)
  3126.     JP     SETSND    ; 0CH SET SEND (NOT CURRENTLY USED)
  3127.     JP     FILWAR    ; 0FH SET WARNING
  3128.     JP     SETCPM    ; 12H SET FILE-MODE
  3129.     JP     PARSET    ; 15H SET PARITY
  3130.     JP     BLKSET    ; 18H SET BLOCK-CHECK-TYPE
  3131.     JP     VT52EM    ; 1BH SET VT52
  3132.     JP     PRTSET    ; 1EH SET PORT
  3133.     JP     BAUD    ; 21H SET BAUD
  3134.     JP     PRINTR    ; 24H    set printer
  3135.     JP    SETBUG    ; 27H SET DEBUG
  3136. BLKSET:    LD     DE,BLKTAB    ; GET THE ADDRESS OF THE BLOCK-CHECK TABLE
  3137.     LD     HL,BLKHLP    ; AND THE ADDRESS OF THE HELP TEXT
  3138.     LD     A,CMKEY    ; PARSE A KEYWORD
  3139.     CALL   COMND    ; GO GET IT
  3140.     JP     KERMT2    ; COULDN'T, COMPLAIN
  3141.     LD     (TEMP1),A    ; SAVE THE PARSED ITEM
  3142.     LD     A,CMCFM    ; WANT TO END THE COMMAND
  3143.     CALL   COMND    ; GO DO IT
  3144.     JP     KERMT2    ; GIVE UP
  3145.     LD     A,(TEMP1)    ; GET THE VALUE BACK
  3146.     LD     (CHKTYP),A    ; SAVE DESIRED CHECKSUM TYPE
  3147.     JP     KERMIT    ; GO GET ANOTHER COMMAND
  3148. ; SET DEFAULT DISK COMMAND
  3149. ;SETDISK:    JP    KERMT3        ;not used on trs80
  3150. ;SETDI1:    LD     A,(FCB)
  3151. ;    cp    0
  3152. ;    JP     NZ,SETDI2    ; HE TYPED A DRIVE-SPEC
  3153. ;    LD     A,(CURDSK)    ; HE DIDN'T - GIVE HIM DEFAULT
  3154. ;SETDI2:    LD     (CURDSK),A
  3155. ;    JP     KERMIT    ; ALL DONE
  3156. ; SET SEND COMMAND.
  3157. SETSND:    LD     DE,STSNTB    ; PARSE A KEYWORD FROM THE SET SEND TABLE.
  3158.     LD     HL,STSHLP
  3159.     LD     A,CMKEY
  3160.     CALL   COMND
  3161.     JP     KERMT2
  3162.     LD     HL,STSJTB    ; GET THE ADDRESS OF THE JUMP TABLE.
  3163.     LD     C,A
  3164.     LD     B,0
  3165.     ADD    HL,BC
  3166.     JP   (HL)  
  3167. STSJTB:    JP     STPDCH
  3168.     JP     STPAD
  3169. STPAD:    LD     A,CMCFM
  3170.     CALL   COMND    ; GET A CONFIRM.
  3171.     JP     KERMT3    ;  DIDN'T GET A CONFIRM.
  3172.     JP     KERMIT
  3173. STPDCH:    LD     A,CMCFM
  3174.     CALL   COMND    ; GET A CONFIRM.
  3175.     JP     KERMT3    ;  DIDN'T GET A CONFIRM.
  3176.     JP     KERMIT
  3177. ;THIS IS THE SET SPEED COMMAND
  3178. BAUD:    LD     DE,SPDTAB
  3179.     LD     HL,SPDHLP
  3180.     CALL    ONOFFA
  3181.     LD     (SPEED),A    ; SET THE SPEED.
  3182.     CALL    MDMRST        ;set the speed
  3183.     JP     KERMIT
  3184. ;    THIS IS THE ESCAPE CHARACTER SET SUBCOMMAND.
  3185. ESCAPE:    LD     A,CMCFM; NOT (BRAIN OR OSBRN1 OR KPII)
  3186.     CALL   COMND    ; GET A CONFIRM.
  3187.     JP     KERMT3    ;  DIDN'T GET A CONFIRM.
  3188.     LD     DE,ESCMES    ; GET THE ADDRESS OF THE ESCAPE MESSAGE.
  3189.     CALL   PRTSTR
  3190.     CALL    @KEY
  3191.     CALL    CONOUT
  3192.     LD     (ESCCHR),A    ; STORE THE NEW ESCAPE CHARACTER.
  3193.     JP     KERMIT
  3194. ;    THIS IS THE LOCAL ECHO SET SUBCOMMAND.
  3195. LOCAL:    CALL    ONOFF
  3196.     LD     A,(TEMP1)    ; GET THE PARSED VALUE.
  3197.     LD     (ECOFLG),A    ; SET THE LOCAL ECHO FLAG.
  3198.     JP     KERMIT
  3199. ;    THIS IS THE VT52 EMULATION SET SUBCOMMAND.
  3200. VT52EM:    CALL    ONOFF
  3201.     LD     (VTFLG),A    ; SET THE VT52 EMULATION FLAG.
  3202.     JP     KERMIT
  3203. ; THIS IS THE FILE-WARNING SET SUBCOMMAND
  3204. FILWAR:    CALL    ONOFF
  3205.     LD     (FLWFLG),A    ; SET THE FILE-WARNING FLAG.
  3206.     JP     KERMIT
  3207. ;    THIS IS THE SET IBM COMMAND.
  3208. IBMSET:    CALL    ONOFF
  3209.     LD     (IBMFLG),A    ; SET THE IBM FLAG.
  3210.     OR     A        ; IS IT TURNED ON?
  3211.     JR     Z,IBMST1    ; IF NOT, SET PARITY TO THE DEFAULT.
  3212.     LD     A,IBMPAR    ; GET THE IBM PARITY.
  3213.     LD     B,1        ; SET LOCAL ECHO ON.
  3214.     JR     IBMST2
  3215. IBMST1:    LD     A,DEFPAR
  3216.     LD     B,0        ; SET LOCAL ECHO OFF.
  3217. IBMST2:    LD     (PARITY),A    ; SAVE THEM.
  3218.     LD     A,B
  3219.     LD     (ECOFLG),A
  3220.     JP     KERMIT
  3221. ;    THIS IS THE SET PORT COMMAND.
  3222. PRTSET:    LD     DE,PRTTAB    ; GET THE TABLE ADDRESS
  3223.     LD     HL,PRTHLP    ; AND THE ADDRESS OF THE HELP TEXT
  3224.     LD     A,CMKEY    ; WANT A KEYWORD
  3225.     CALL   COMND    ; GET THE FIELD OF THE COMMAND
  3226.     JP     KERMT2    ; NOT VALID, GIVE ERROR
  3227.     LD     (TEMP1),A    ; SAVE THE PARSED VALUE.
  3228.     LD     A,D        ; GET THE FUNCTION TO USE
  3229.     LD     (TEMP2),A    ; SAVE FOR LATER
  3230.     LD     A,CMCFM    ; MAKE SURE COMMAND IS FINISHED
  3231.     CALL   COMND    ; GET A CONFIRM.
  3232.     JP     KERMT3    ;  DIDN'T GET A CONFIRM.
  3233.     LD     HL,(TEMP1)    ; GET THE TABLE POINTER
  3234.     LD     A,(HL)        ; GET THE I/O port
  3235.     LD     (PORT),A        ;save as current
  3236.     JP     KERMIT
  3237. ; TABLE ENTRIES ARE:
  3238. ;    DB    port,port
  3239. ;
  3240. ;    SET FILE-MODE COMMAND.
  3241. SETCPM:    LD     DE,TYPTAB
  3242.     LD     HL,TYPHLP
  3243.     CALL    ONOFFA
  3244.     LD    (CPMFLG),A    ;SET THE CPM FLAG
  3245.     JP     KERMIT
  3246. ;    Set Printer command
  3247. PRINTR:    CALL    ONOFF
  3248.     LD    (PRTFLG),A
  3249.     JP    KERMIT
  3250. PARSET:    LD     DE,PARTAB
  3251.     LD     HL,PARHLP
  3252.     CALL    ONOFFA
  3253.     LD     (PARITY),A    ; SET THE CPM FLAG.
  3254.     JP     KERMIT
  3255. ;SET DEBUG
  3256. SETBUG:    CALL    ONOFF
  3257.     LD    (DBFLG),A
  3258.     JP    KERMIT
  3259. ONOFF:    LD    DE,ONTAB
  3260.     LD    HL,ONHLP
  3261. ONOFFA:    LD    A,CMKEY
  3262.     CALL    COMND
  3263.     JP    ONOFF2
  3264.     LD    (TEMP1),A
  3265.     LD    A,CMCFM
  3266.     CALL    COMND
  3267.     JP    ONOFF3
  3268.     LD    A,(TEMP1)
  3269.     RET
  3270. ONOFF2:    POP    AF
  3271.     JP    KERMT2
  3272. ONOFF3:    POP    AF
  3273.     JP    KERMT3
  3274. ; THIS IS THE SHOW COMMAND.
  3275. SHOW:    LD     A,CMCFM
  3276. ;* RECONCILE THIS AND STATUS.
  3277.     CALL   STAT01    ; FOR NOW JUST COP OUT.
  3278.     JP     KERMIT
  3279. ;    THIS IS THE STATUS COMMAND.
  3280. STATUS:    CALL   STAT01
  3281.     JP     KERMIT
  3282. STAT01:    LD     DE,LOCST    ; GET THE ADDRESS OF THE LOCAL ECHO STRING.
  3283.     CALL   PRTSTR
  3284.     LD    DE,OFFSTR
  3285.     LD     A,(ECOFLG)    ; GET THE LOCAL ECHO FLAG.
  3286.     OR     A        ; IS IT ON?
  3287.     JR     Z,STAT03    ; IF NOT SAY SO.
  3288.     LD     DE,ONSTR    ; SAY ON.
  3289. STAT03:    CALL   PRTSTR
  3290.     LD     DE,VTEMST    ; GET THE ADDRESS OF THE VT52 EMULATION STRING.
  3291.     CALL   PRTSTR
  3292.     LD    DE,OFFSTR
  3293.     LD     A,(VTFLG)    ; GET THE VT52 EMULATION FLAG.
  3294.     OR     A        ; IS IT ON?
  3295.     JR     Z,STAT11    ; IF NOT SAY SO.
  3296.     LD     DE,ONSTR    ; SAY ON.
  3297. STAT11:    CALL   PRTSTR
  3298.     LD     DE,CPMST    ; GET THE ADDRESS OF THE CPM CREATED FILE.
  3299.     CALL   PRTSTR
  3300.     LD    A,(CPMFLG)
  3301.     OR     A        ; IS IT ON?
  3302.     JR     Z,STAT2    ; IF NOT SAY SO.
  3303.     CP     1    ; ASCII?
  3304.     LD     DE,ASCSTR;
  3305.     JR     Z,STAT21    ; SAY ASCII
  3306.     LD     DE,BINSTR; SAY BINARY
  3307.     JR     STAT21
  3308. STAT2:    LD     DE,DEFSTR    ; SAY DEFAULT.
  3309. STAT21:    CALL   PRTSTR
  3310.     LD     DE,IBMST    ; IBM STRING.
  3311.     CALL   PRTSTR
  3312.     LD    DE,OFFSTR
  3313.     LD     A,(IBMFLG)    ; IBM FLAG.
  3314.     OR     A        ; IS IT ON?
  3315.     JR     Z,STAT3    ; IF NOT SAY SO.
  3316.     LD     DE,ONSTR    ; SAY ON.
  3317. STAT3:    CALL   PRTSTR
  3318.     LD     DE,FILST    ; FILE WARNING STRING.
  3319.     CALL   PRTSTR
  3320.     LD    DE,OFFSTR
  3321.     LD     A,(FLWFLG)    ; FILE WARNING FLAG.
  3322.     OR     A        ; IS IT ON?
  3323.     JR     Z,STAT4    ; IF NOT SAY SO.
  3324.     LD     DE,ONSTR    ; SAY ON.
  3325. STAT4:    CALL   PRTSTR
  3326.     LD    DE,BUGST    ;debug string
  3327.     CALL    PRTSTR
  3328.     LD    DE,OFFSTR
  3329.     LD    A,(DBFLG)
  3330.     OR    A
  3331.     JR    Z,STAT4A
  3332.     LD    DE,ONSTR
  3333. STAT4A:    CALL    PRTSTR
  3334.     LD     DE,PARST    ; PARITY STRING.
  3335.     LD    DE,PNTSTR    ;printer string
  3336.     CALL    PRTSTR
  3337.     LD    DE,OFFSTR
  3338.     LD    A,(PRTFLG)    ;get printer flag
  3339.     OR    A
  3340.     JR    Z,STAT4D
  3341.     LD    DE,ONSTR
  3342. STAT4D:    CALL    PRTSTR
  3343.     LD    DE,PARST
  3344.     CALL   PRTSTR
  3345.     LD     A,(PARITY)    ; GET THE PARITY SETTING.
  3346.     LD     DE,PNONST    ; NONE BY DEFAULT.
  3347.     CP     PARMRK    ; IS IT MARK?
  3348.     JR     NZ,STAT5    ; IF NOT SAY SO.
  3349.     LD     DE,PMRKST    ; SAY MARK.
  3350.     JR     STAT55
  3351. STAT5:    CP     PARSPC    ; IS IT SPACE?
  3352.     JR     NZ,STAT51    ; IF NOT SAY SO.
  3353.     LD     DE,PSPCST    ; SAY SPACE.
  3354.     JR     STAT55
  3355. STAT51:    CP     PARODD    ; IS IT ODD?
  3356.     JR     NZ,STAT52    ; IF NOT SAY SO.
  3357.     LD     DE,PODDST    ; SAY ODD.
  3358.     JR     STAT55
  3359. STAT52:    CP     PAREVN    ; IS IT EVEN?
  3360.     JR     NZ,STAT55    ; IF NOT SAY SO.
  3361.     LD     DE,PEVNST    ; SAY EVEN.
  3362. STAT55:    CALL   PRTSTR
  3363. ; PRINT OUT CURRENT BLOCK-CHECK-TYPE
  3364.     LD     DE,BCKST    ; GET THE STRING
  3365.     CALL   PRTSTR    ; PRINT "BLOCK CHECK TYPE: "
  3366.     LD     A,(CHKTYP)    ; GET THE TYPE (CHARACTER 1, 2, OR 3)
  3367.     CALL    CONOUT
  3368.     LD     DE,BCKST1; GET REST OF TEXT ("-CHARACTER")
  3369.     CALL   PRTSTR    ;  .  .  .
  3370. ; PRINT THE CURRENT ESCAPE CHARACTER
  3371.     LD     DE,ESCST    ; ESCAPE STRING.
  3372.     CALL   PRTSTR
  3373.     CALL   ESCPR    ; PRINT THE ESCAPE CHAR.
  3374.     LD     DE,CRLF    ; GET THE ADDRESS OF A CRLF.
  3375.     CALL   PRTSTR
  3376. ; print current baud rate
  3377.     LD    DE,SPEDST    ;line speed
  3378.     CALL    PRTSTR
  3379.     LD    A,(SPEED)
  3380.     SUB     11H        ;decement baud bit
  3381.     LD    HL,SPDTAB    ;baud speed table
  3382.     LD    BC,CMSTAT-SPDTAB
  3383.     CPIR            ;block compare
  3384.     INC    HL
  3385.     INC    HL
  3386.     EX    DE,HL
  3387.     CALL     PRTSTR        ;print baud rate
  3388.     LD    DE,BAUST    ;' baud'
  3389.     CALL    PRTSTR
  3390.     RET   
  3391. <<< trssend.src >>>
  3392. ;    SEND COMMAND
  3393. SEND:    PUSH    BC
  3394.     PUSH    HL
  3395.     LD    B,7AH
  3396.     LD    HL,MFNBUF
  3397. SEND0:    LD    (HL),20H
  3398.     INC    HL
  3399.     DJNZ    SEND0
  3400.     POP    HL
  3401.     POP    BC
  3402.     LD     A,CMTXT    ; PARSE AN INPUT FILE SPEC.
  3403.     LD     DE,MFNBUF    ; GIVE THE ADDRESS FOR THE FCB.
  3404.     CALL   COMND
  3405.     JP     KERMIT    ;  GIVE UP ON BAD PARSE.
  3406. SEND1:    LD     A,CMCFM
  3407.     CALL   COMND    ; GET A CONFIRM.
  3408.     JP     KERMIT    ;  DIDN'T GET A CONFIRM.
  3409. SEND11:    LD    HL,MFNBUF
  3410.     LD    (MFNPTR),HL
  3411.     CALL   MFNAME    ; HANDLE (MULTI) FILES
  3412.     JR     NC,SEND14    ; GOT A VALID FILE-NAME
  3413.     LD     DE,ERMS15
  3414.     CALL   ERROR3    ; DISPLAY ERROR MSG.
  3415.     JP     KERMIT
  3416. SEND14:    CALL   INIT    ; CLEAR THE LINE AND INITIALIZE THE BUFFERS.
  3417.     XOR    A
  3418.     LD     (PKTNUM),A    ; SET THE PACKET NUMBER TO ZERO.
  3419.     LD     (NUMTRY),A    ; SET THE NUMBER OF TRIES TO ZERO.
  3420.     LD     HL,0
  3421.     LD     (NUMPKT),HL    ; SET THE NUMBER OF PACKETS TO ZERO.
  3422.     LD     (NUMRTR),HL    ; SET THE NUMBER OF RETRIES TO ZERO.
  3423.     LD     DE,SCRNRT    ; POSITION CURSOR
  3424.     CALL   PRTSTR
  3425.     LD     HL,0
  3426.     CALL   NOUT    ; WRITE THE NUMBER OF RETRIES.
  3427.     LD     A,'1'    ; RESET TO USE SINGLE CHARACTER CHECKSUM
  3428.     LD     (CURCHK),A    ; FOR STARTUP
  3429.     LD     A,'S'
  3430.     LD     (STATE),A    ; SET THE STATE TO RECEIVE INITIATE.
  3431. ; SEND STATE TABLE SWITCHER
  3432. SEND2:    LD     DE,SCRNP    ; POSITION CURSOR
  3433.     CALL   PRTSTR
  3434.     LD     HL,(NUMPKT)
  3435.     CALL   NOUT    ; WRITE THE PACKET NUMBER.
  3436.     LD     A,(STATE)    ; GET THE STATE.
  3437.     CP     'D'        ; ARE WE IN THE DATA SEND STATE?
  3438.     JR     NZ,SEND3
  3439.     CALL   SDATA
  3440.     JP     SEND2
  3441. SEND3:    CP     'F'        ; ARE WE IN THE FILE SEND STATE?
  3442.     JR     NZ,SEND4
  3443.     CALL   SFILE    ; CALL SEND FILE.
  3444.     JP     SEND2
  3445. SEND4:    CP     'Z'        ; ARE WE IN THE EOF STATE?
  3446.     JR     NZ,SEND5
  3447.     CALL   SEOF
  3448.     JP     SEND2
  3449. SEND5:    CP     'S'        ; ARE WE IN THE SEND INITIATE STATE?
  3450.     JR     NZ,SEND6
  3451.     CALL   SINIT
  3452.     JP     SEND2
  3453. SEND6:    CP     'B'        ; ARE WE IN THE EOT STATE?
  3454.     JR     NZ,SEND7
  3455.     CALL   SEOT
  3456.     JP     SEND2
  3457. SEND7:    CP     'C'        ; ARE WE IN THE SEND COMPLETE STATE?
  3458.     JR     NZ,SEND8    ; NO...
  3459.     LD     DE,INFMS3    ; YES, WRITE "COMPLETE" MESSAGE.
  3460.     LD    A,(CZSEEN)
  3461.     OR     A        ;  .  .  .
  3462.     JR     Z,SEND7A    ; NO.
  3463.     LD     DE,INMS13    ; YES, THEN SAY "INTERRUPTED" INSTEAD.
  3464. SEND7A:    CALL   FINMES
  3465.     JP     KERMIT
  3466. SEND8:    CP     'A'        ; ARE WE IN THE SEND "ABORT" STATE?
  3467.     JR     NZ,SEND9
  3468.     LD     DE,INFMS4    ; PRINT MESSAGE.
  3469.     CALL   FINMES
  3470.     JP     KERMIT
  3471. SEND9:    LD     DE,INFMS4    ; ANYTHING ELSE IS EQUIVALENT TO "ABORT".
  3472.     CALL   FINMES
  3473.     JP     KERMIT
  3474. ;    SEND ROUTINES
  3475. ;    SEND INITIATE
  3476. SINIT:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3477.     CP     IMXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  3478.     JP     M,SINIT2
  3479.     LD     DE,ERMS14
  3480.     CALL   ERROR3    ; DISPLAY ERMSG
  3481.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  3482. SINIT2:    INC    A        ; INCREMENT IT.
  3483.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  3484.     LD     A,'1'    ; RESET TO USE SINGLE CHARACTER CHECKSUM
  3485.     LD     (CURCHK),A    ; FOR STARTUP
  3486.     LD     A,(CHKTYP)    ; GET OUR DESIRED BLOCK CHECK TYPE
  3487.     LD    (INICHK),A
  3488.     LD     HL,DATA    ; GET A POINTER TO OUR DATA BLOCK.
  3489.     CALL   RPAR    ; SET UP THE PARAMETER INFORMATION.
  3490.     LD     (ARGBLK+1),A    ; SAVE THE NUMBER OF ARGUMENTS.
  3491.     LD     A,(NUMPKT)    ; GET THE PACKET NUMBER.
  3492.     LD     (ARGBLK),A
  3493.     LD     A,'S'    ; SEND INITIATE PACKET.
  3494.     CALL   SPACK    ; SEND THE PACKET.
  3495.     JP     ABORT    ;  FAILED, ABORT.
  3496.     CALL   RPACK    ; GET A PACKET.
  3497.     JP     QUIT        ;  TRASHED PACKET DON'T CHANGE STATE, RETRY.
  3498.     CP     'Y'        ; ACK?
  3499.     JP     NZ,SINIT3    ; IF NOT TRY NEXT.
  3500.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3501.     LD     B,A
  3502.     LD     A,(ARGBLK)
  3503.     CP     B        ; IS IT THE RIGHT PACKET NUMBER?
  3504.     RET   NZ             ; IF NOT TRY AGAIN.
  3505.     INC    A        ; INCREMENT THE PACKET NUMBER.
  3506.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  3507.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  3508.     LD     HL,(NUMPKT)
  3509.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  3510.     LD     (NUMPKT),HL
  3511.     LD     A,(ARGBLK+1)    ; GET THE NUMBER OF PIECES OF DATA.
  3512.     LD     HL,DATA    ; POINTER TO THE DATA.
  3513.     CALL   SPAR    ; READ IN THE DATA.
  3514.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3515.     LD     (OLDTRY),A    ; SAVE IT.
  3516.     XOR    A
  3517.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  3518.     LD    A,(INICHK)    ;GET THE AGREED UPON BLOCK-CHECK-TYPE
  3519.     LD     (CURCHK),A    ; STORE AS TYPE TO USE FOR PACKETS NOW
  3520.     LD     A,'F'    ; SET THE STATE TO FILE SEND.
  3521.     LD     (STATE),A
  3522.     CALL   GETFIL    ; OPEN THE FILE.
  3523.     JP     ABORT    ;  SOMETHING IS WRONG, DIE.
  3524.     RET    
  3525. SINIT3:    CP     'N'        ; NAK?
  3526.     JP     NZ,SINIT4    ; IF NOT SEE IF ITS AN ERROR.
  3527.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  3528.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  3529.     INC    A        ; INCREMENT.
  3530.     LD     B,A
  3531.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER.
  3532.     CP     B        ; IS THE PACKET'S NUMBER ONE MORE THAN NOW?
  3533.     RET   NZ             ; IF NOT ASSUME ITS FOR THIS PACKET, GO AGAIN.
  3534.     XOR    A
  3535.     LD     (NUMTRY),A    ; RESET NUMBER OF TRIES.
  3536.     LD     A,'F'    ; SET THE STATE TO FILE SEND.
  3537.     LD     (STATE),A
  3538.     RET    
  3539. SINIT4:    CP     'E'        ; IS IT AN ERROR PACKET.
  3540.     JP     NZ,ABORT
  3541.     CALL   ERROR
  3542.     JP     ABORT
  3543. ;    SEND FILE HEADER
  3544. SFILE:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3545.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  3546.     JP     M,SFILE1
  3547.     LD     DE,ERMS14
  3548.     CALL   ERROR3
  3549.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  3550. SFILE1:    INC    A        ; INCREMENT IT.
  3551.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  3552.     XOR    A        ; CLEAR A
  3553.     LD    (CZSEEN),A
  3554.     LD     HL,DATA    ; GET A POINTER TO OUR DATA BLOCK.
  3555.     LD     (DATPTR),HL    ; SAVE IT.
  3556.     LD    HL,MFREQ    ;get filename
  3557.     LD     (FCBPTR),HL    ; SAVE POSITION IN FCB.
  3558.     LD     B,0        ; NO CHARS YET.
  3559.     LD     C,0
  3560. SFIL11:    LD     A,B
  3561.     CP     8H        ; IS THIS THE NINTH CHAR?
  3562.     JP     NZ,SFIL12    ; IF NOT PROCEED.
  3563. SFL11A:    LD     A,'.'    ; GET A DOT.
  3564.     LD     HL,(DATPTR)
  3565.     LD     (HL),A        ; PUT THE CHAR IN THE DATA PACKET.
  3566.     INC    HL
  3567.     LD     (DATPTR),HL    ; SAVE POSITION IN DATA PACKET.
  3568.     LD    B,8
  3569.     INC    C
  3570. SFIL12:    INC    B        ; INCREMENT THE COUNT.
  3571.     LD     A,B
  3572.     CP    0CH        ;TWELVE?
  3573.     JP     P,SFIL13
  3574.     LD     HL,(FCBPTR)
  3575.     LD     A,(HL)
  3576.     AND    7FH        ; TURN OFF CP/M 2 OR 3'S HIGH BITS.[UTK013]
  3577.     INC    HL
  3578.     LD     (FCBPTR),HL    ; SAVE POSITION IN FCB.
  3579.     CP     '!'        ; IS IT A GOOD CHARACTER?
  3580.     JP     M,SFIL13
  3581.     LD     HL,(DATPTR)
  3582.     CP    '/'
  3583.     JP    Z,SFL11A
  3584.     CP    ':'        ;drive spec?
  3585.     JR    Z,SFIL13
  3586. SFL12A    LD     (HL),A        ; PUT THE CHAR IN THE DATA PACKET.
  3587.     INC    HL
  3588.     LD     (DATPTR),HL    ; SAVE POSITION IN DATA PACKET.
  3589.     INC    C
  3590.     JP     SFIL11    ; GET ANOTHER.
  3591. SFIL13:    LD     A,C        ; NUMBER OF CHAR IN FILE NAME.
  3592.     LD     (ARGBLK+1),A
  3593.     LD     HL,(DATPTR)
  3594.     LD     A,'$'
  3595.     LD     (HL),A        ; PUT IN A DOLLAR SIGN FOR PRINTING.
  3596.     LD     DE,SCRFLN    ; POSITION CURSOR
  3597.     CALL   PRTSTR
  3598.     LD     DE,DATA    ; PRINT THE FILE NAME
  3599.     CALL   PRTSTR
  3600.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3601.     LD     (ARGBLK),A
  3602.     LD     A,'F'    ; FILE HEADER PACKET.
  3603.     CALL   SPACK    ; SEND THE PACKET.
  3604.     JP     ABORT    ;  FAILED, ABORT.
  3605.     CALL   RPACK    ; GET A PACKET.
  3606.     JP     QUIT        ;  TRASHED PACKET DON'T CHANGE STATE, RETRY.
  3607.     CP     'Y'        ; ACK?
  3608.     JP     NZ,SFILE2    ; IF NOT TRY NEXT.
  3609.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3610.     LD     B,A
  3611.     LD     A,(ARGBLK)
  3612.     CP     B        ; IS IT THE RIGHT PACKET NUMBER?
  3613.     RET   NZ             ; IF NOT HOLD OUT FOR THE RIGHT ONE.
  3614. SFIL14:    INC    A        ; INCREMENT THE PACKET NUMBER.
  3615.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  3616.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  3617.     LD     HL,(NUMPKT)
  3618.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  3619.     LD     (NUMPKT),HL
  3620.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3621.     LD     (OLDTRY),A    ; SAVE IT.
  3622.     XOR    A
  3623.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  3624. SFIL15:    XOR    A        ; GET A ZERO.
  3625.     LD     (EOFLAG),A    ; INDICATE NOT EOF.
  3626.     LD     A,0FFH
  3627.     LD     (FILFLG),A    ; INDICATE FILE BUFFER EMPTY.
  3628.     CALL   GTCHR
  3629.     JP     SFIL16    ; ERROR GO SEE IF ITS EOF.
  3630.     JP     SFIL17    ; GOT THE CHARS, PROCEED.
  3631. SFIL16:    CP     0FFH    ; IS IT EOF?
  3632.     JP     NZ,ABORT    ; IF NOT GIVE UP.
  3633.     LD     A,'Z'    ; SET THE STATE TO EOF.
  3634.     LD     (STATE),A
  3635.     RET    
  3636. SFIL17:    LD     (SIZE),A    ; SAVE THE SIZE OF THE DATA GOTTEN.
  3637.     LD     A,'D'    ; SET THE STATE TO DATA SEND.
  3638.     LD     (STATE),A
  3639.     RET    
  3640. SFILE2:    CP     'N'        ; NAK?
  3641.     JP     NZ,SFILE3    ; TRY IF ERROR PACKET.
  3642.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  3643.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  3644.     INC    A        ; INCREMENT.
  3645.     LD     B,A
  3646.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER.
  3647.     CP     B        ; IS THE PACKET'S NUMBER ONE MORE THAN NOW?
  3648.     RET   NZ             ; IF NOT GO TRY AGAIN.
  3649.     JP     SFIL14    ; JUST AS GOOD AS A ACK; GO TO THE ACK CODE.
  3650. SFILE3:    CP     'E'        ; IS IT AN ERROR PACKET.
  3651.     JP     NZ,ABORT
  3652.     CALL   ERROR
  3653.     JP     ABORT
  3654. ;    SEND DATA
  3655. SDATA:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3656.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  3657.     JP     M,SDATA1
  3658.     LD     DE,ERMS14
  3659.     CALL   ERROR3
  3660.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  3661. SDATA1:    INC    A        ; INCREMENT IT.
  3662.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  3663.     LD     HL,DATA    ; GET A POINTER TO OUR DATA BLOCK.
  3664.     LD     (DATPTR),HL    ; SAVE IT.
  3665.     LD     HL,FILBUF    ; POINTER TO CHARS TO BE SENT.
  3666.     LD     (CBFPTR),HL    ; SAVE POSITION IN CHAR BUFFER.
  3667.     LD     B,1        ; FIRST CHAR.
  3668. SDAT11:    LD     HL,(CBFPTR)
  3669.     LD     A,(HL)
  3670.     INC    HL
  3671.     LD     (CBFPTR),HL    ; SAVE POSITION IN CHAR BUFFER.
  3672.     LD     HL,(DATPTR)
  3673.     LD     (HL),A        ; PUT THE CHAR IN THE DATA PACKET.
  3674.     INC    HL
  3675.     LD     (DATPTR),HL    ; SAVE POSITION IN DATA PACKET.
  3676.     INC    B        ; INCREMENT THE COUNT.
  3677.     LD     A,(SIZE)    ; GET THE NUMBER OF CHARS IN CHAR BUFFER.
  3678.     CP     B        ; HAVE WE TRANSFERED THAT MANY?
  3679.     JP     P,SDAT11    ; IF NOT GET ANOTHER.
  3680.     LD     A,(SIZE)    ; NUMBER OF CHAR IN CHAR BUFFER.
  3681.     LD     (ARGBLK+1),A
  3682.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3683.     LD     (ARGBLK),A
  3684.     LD     A,'D'    ; DATA PACKET.
  3685.     CALL   SPACK    ; SEND THE PACKET.
  3686.     JP     ABORT    ;  FAILED, ABORT.
  3687.     CALL   RPACK    ; GET A PACKET.
  3688.     JP     QUIT        ;  TRASHED PACKET DON'T CHANGE STATE, RETRY.
  3689.     CP     'Y'        ; ACK?
  3690.     JP     NZ,SDATA2    ; IF NOT TRY NEXT.
  3691.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3692.     LD     B,A
  3693.     LD     A,(ARGBLK)
  3694.     CP     B        ; IS IT THE RIGHT PACKET NUMBER?
  3695.     RET   NZ             ; IF NOT HOLD OUT FOR THE RIGHT ONE.
  3696.     LD     A,(ARGBLK)    ; GET THE PACKET NUMBER BACK
  3697.     INC    A        ; INCREMENT THE PACKET NUMBER.
  3698.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  3699.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  3700.     LD     HL,(NUMPKT)
  3701.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  3702.     LD     (NUMPKT),HL
  3703.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3704.     LD     (OLDTRY),A    ; SAVE IT.
  3705.     XOR    A
  3706.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  3707.     LD     A,(ARGBLK+1)    ; GET THE DATA LENGTH
  3708.     CP     1        ; CHECK IF ONLY 1 CHARACTER?
  3709.     JP     NZ,SDAT15    ; IF NOT, JUST CONTINUE
  3710.     LD     A,(DATA)    ; GOT ONE CHARACTER, GET IT FROM DATA
  3711.     CP     'Z'        ; WANT TO ABORT ENTIRE STREAM?
  3712.     JR     NZ,SDAT14    ; IF NOT, CHECK FOR JUST THIS FILE
  3713.     LD    (CZSEEN),A
  3714. SDAT14:    CP     'X'        ; DESIRE ABORT OF CURRENT FILE?
  3715.     JR     NZ,SDAT15    ; IF NOT, JUST CONTINUE
  3716.     LD    (CZSEEN),A
  3717. SDAT15:    LD    A,(CZSEEN)
  3718.     OR     A        ; CHECK IF EITHER GIVEN
  3719.     JR     Z,SDAT12    ; IF NEITHER GIVEN, CONTINUE
  3720.     LD     A,'Z'    ; CHANGE STATE TO EOF
  3721.     LD     (STATE),A    ;  .  .  .
  3722.     RET                ; AND RETURN
  3723. SDAT12:    CALL   GTCHR
  3724.     JP     SDAT13    ; ERROR GO SEE IF ITS EOF.
  3725.     LD     (SIZE),A    ; SAVE THE SIZE OF THE DATA GOTTEN.
  3726.     RET    
  3727. SDAT13:    CP     0FFH    ; IS IT EOF?
  3728.     JP     NZ,ABORT    ; IF NOT GIVE UP.
  3729.     LD     A,'Z'    ; SET THE STATE TO EOF.
  3730.     LD     (STATE),A
  3731.     RET    
  3732. SDATA2:    CP     'N'        ; NAK?
  3733.     JP     NZ,SDATA3    ; SEE IF IS AN ERROR PACKET.
  3734.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  3735.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  3736.     INC    A        ; INCREMENT.
  3737.     LD     B,A
  3738.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER.
  3739.     CP     B        ; IS THE PACKET'S NUMBER ONE MORE THAN NOW?
  3740.     RET   NZ             ; IF NOT GO TRY AGAIN.
  3741.     JP     SDAT12    ; JUST AS GOOD AS A ACK; GO TO THE ACK CODE.
  3742. SDATA3:    CP     'E'        ; IS IT AN ERROR PACKET.
  3743.     JP     NZ,ABORT
  3744.     CALL   ERROR
  3745.     JP     ABORT
  3746. ;    SEND EOF
  3747. SEOF:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3748.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  3749.     JP     M,SEOF1
  3750.     LD     DE,ERMS14
  3751.     CALL   ERROR3
  3752.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  3753. SEOF1:    INC    A        ; INCREMENT IT.
  3754.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  3755.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3756.     LD     (ARGBLK),A
  3757.     XOR    A
  3758.     LD     (ARGBLK+1),A    ; NO DATA.
  3759.     LD    A,(CZSEEN)
  3760.     OR     A        ;  .  .  .
  3761.     JR     Z,SEOF14    ; IF NOT ABORTED, JUST KEEP GOING
  3762.     LD     A,'D'    ; TELL OTHER END TO DISCARD PACKET
  3763.     LD     (DATA),A    ; STORE IN DATA PORTION
  3764.     LD     A,1        ; ONE CHARACTER
  3765.     LD     (ARGBLK+1),A    ; STORE THE LENGTH
  3766. SEOF14:    LD     A,'Z'    ; EOF PACKET.
  3767.     CALL   SPACK    ; SEND THE PACKET.
  3768.     JP     ABORT    ;  FAILED, ABORT.
  3769.     CALL   RPACK    ; GET A PACKET.
  3770.     JP     QUIT        ;  TRASHED PACKET DON'T CHANGE STATE, RETRY.
  3771.     CP     'Y'        ; ACK?
  3772.     JR     NZ,SEOF2    ; IF NOT TRY NEXT.
  3773.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3774.     LD     B,A
  3775.     LD     A,(ARGBLK)
  3776.     CP     B        ; IS IT THE RIGHT PACKET NUMBER?
  3777.     RET   NZ             ; IF NOT HOLD OUT FOR THE RIGHT ONE.
  3778. SEOF12:    INC    A        ; INCREMENT THE PACKET NUMBER.
  3779.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  3780.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  3781.     LD     HL,(NUMPKT)
  3782.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  3783.     LD     (NUMPKT),HL
  3784.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3785.     LD     (OLDTRY),A    ; SAVE IT.
  3786.     XOR    A
  3787.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  3788.     LD     DE,FCB
  3789.     CALL    @CLOSE
  3790. ;* CHECK IF SUCCESSFUL
  3791.     LD    A,(CZSEEN)
  3792.     CP     'Z'        ; DESIRE ABORT OF ENTIRE STREAM?
  3793.     JR     Z,SEOF13    ; IF SO, JUST GIVE UP NOW
  3794.     CALL   MFNAME    ; GET THE NEXT FILE.
  3795.     JR     C,SEOF13    ;  NO MORE.
  3796.     CALL   GETFIL    ; AND OPEN IT
  3797.     JP     ABORT    ;  SOMETHING IS WRONG, DIE.
  3798.     XOR    A        ; CLEAR A
  3799.     LD    (CZSEEN),A
  3800.     LD     A,'F'    ; SET THE STATE TO FILE SEND.
  3801.     LD     (STATE),A
  3802.     RET    
  3803. SEOF13:    LD     A,'B'    ; SET THE STATE TO EOT.
  3804.     LD     (STATE),A
  3805.     RET    
  3806. SEOF2:    CP     'N'        ; NAK?
  3807.     JR     NZ,SEOF3    ; TRY AND SEE IF ITS AN ERROR PACKET.
  3808.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  3809.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  3810.     INC    A        ; INCREMENT.
  3811.     LD     B,A
  3812.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER.
  3813.     CP     B        ; IS THE PACKET'S NUMBER ONE MORE THAN NOW?
  3814.     RET   NZ             ; IF NOT GO TRY AGAIN.
  3815.     JP     SEOF12    ; JUST AS GOOD AS A ACK; GO TO THE ACK CODE.
  3816. SEOF3:    CP    'E'    ;ERROR PACKET?
  3817.     JP    NZ,ABORT
  3818.     CALL    ERROR
  3819.     JP    ABORT
  3820. ;    SEND EOT
  3821. SEOT:    LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3822.     CP     MAXTRY    ; HAVE WE REACHED THE MAXIMUM NUMBER OF TRIES?
  3823.     JP     M,SEOT1
  3824.     LD     DE,ERMS14
  3825.     CALL   ERROR3
  3826.     JP     ABORT    ; CHANGE THE STATE TO ABORT.
  3827. SEOT1:    INC    A        ; INCREMENT IT.
  3828.     LD     (NUMTRY),A    ; SAVE THE UPDATED NUMBER OF TRIES.
  3829.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3830.     LD     (ARGBLK),A
  3831.     XOR    A
  3832.     LD     (ARGBLK+1),A    ; NO DATA.
  3833.     LD     A,'B'    ; EOF PACKET.
  3834.     CALL   SPACK    ; SEND THE PACKET.
  3835.     JP     ABORT    ;  FAILED, ABORT.
  3836.     CALL   RPACK    ; GET A PACKET.
  3837.     JP     QUIT        ;  TRASHED PACKET DON'T CHANGE STATE, RETRY.
  3838.     CP     'Y'        ; ACK?
  3839.     JR     NZ,SEOT2    ; IF NOT TRY NEXT.
  3840.     LD     A,(PKTNUM)    ; GET THE PACKET NUMBER.
  3841.     LD     B,A
  3842.     LD     A,(ARGBLK)
  3843.     CP     B        ; IS IT THE RIGHT PACKET NUMBER?
  3844.     RET   NZ             ; IF NOT HOLD OUT FOR THE RIGHT ONE.
  3845. SEOT12:    INC    A        ; INCREMENT THE PACKET NUMBER.
  3846.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.
  3847.     LD     (PKTNUM),A    ; SAVE MODULO 64 OF THE NUMBER.
  3848.     LD     HL,(NUMPKT)
  3849.     INC    HL        ; INCREMENT THE NUMBER OF PACKETS.
  3850.     LD     (NUMPKT),HL
  3851.     LD     A,(NUMTRY)    ; GET THE NUMBER OF TRIES.
  3852.     LD     (OLDTRY),A    ; SAVE IT.
  3853.     XOR    A
  3854.     LD     (NUMTRY),A    ; RESET THE NUMBER OF TRIES.
  3855.     LD     A,'C'    ; SET THE STATE TO FILE SEND.
  3856.     LD     (STATE),A
  3857.     RET    
  3858. SEOT2:    CP     'N'        ; NAK?
  3859.     JR     NZ,SEOT3    ; IS IT ERROR.
  3860.     CALL   UPDRTR    ; UPDATE THE NUMBER OF RETRIES.
  3861.     LD     A,(PKTNUM)    ; GET THE PRESENT PACKET NUMBER.
  3862.     INC    A        ; INCREMENT.
  3863.     LD     B,A
  3864.     LD     A,(ARGBLK)    ; GET THE PACKET'S NUMBER.
  3865.     CP     B        ; IS THE PACKET'S NUMBER ONE MORE THAN NOW?
  3866.     RET   NZ             ; IF NOT GO TRY AGAIN.
  3867.     JP     SEOT12    ; JUST AS GOOD AS A ACK; GO TO THE ACK CODE.
  3868. SEOT3:    CP     'E'        ; IS IT AN ERROR PACKET.
  3869.     JP     NZ,ABORT
  3870.     CALL   ERROR
  3871.     JP     ABORT
  3872. <<< trsstr.src >>>
  3873. ; Pure storage.
  3874. OUTLN2:    DB    CR,'Number of packets:'
  3875.     DB    CR,'Number of retries:'
  3876.     DB    CR,'File name:$'
  3877. KERM:    DB    'Kermit-TRS80'
  3878. KERM1:    DB    '>$'        
  3879. ;DELPR:    DB    'Delete it? $'
  3880. CRLF:    DB    CR,'$'
  3881. ERMES1:    DB    CR,'?Unrecognized command$'
  3882. ERMES2:    DB    CR,'?Illegal character$'
  3883. ERMES3:    DB    CR,'?Not confirmed$'
  3884. ERMES4:    DB    '?Unable to receive initiate',CR,'$'
  3885. ERMES5:    DB    '?Unable to receive file name',CR,'$'
  3886. ERMES6:    DB    '?Unable to receive end of file',CR,'$'
  3887. ERMS10:    DB    '?Unable to receive data',CR,'$'
  3888. ERMS11: DB    '?System DOS error',CR,'$'
  3889. ERMS14:    DB    '?Unable to receive an acknowledgement from the host',CR,'$'
  3890. ERMS15:    DB    CR,'?Unable to find file',CR,'$'
  3891. ERMS16:    DB    '?Unable to rename file$'
  3892. ERMS17: DB    CR,'?System DOS error$'
  3893. ERMS18: DB    CR,'?Unable to tell host that the session is finished$'
  3894. ERMS19: DB    CR,'?Unable to tell host to logout$'
  3895. INFMS3:    DB    BELL,'Completed$'
  3896. INFMS4:    DB    BELL,'Failed$'
  3897. INFMS5:    DB    '%Renaming file to $'
  3898. INFMS6:    DB    CR,'<Closing the log file>$'
  3899. INFMS7:    DB    CR,'<Connected to remote host, type $'
  3900. INFMS8:    DB    'C to return>',CR
  3901.     DB    '<CLEAR> is Control-',95,CR,'$'
  3902. INFMS9:    DB    CR,'<Connection closed, back at micro>$'
  3903. INMS10:    DB    ' Control-$'
  3904. INMS11:    DB    ' (Type Left Arrow to send CTRL-S)',CR,'$'
  3905. INMS12:    DB    ' (Not implemented)',CR,'$'
  3906. INMS13:    DB    BELL,'Interrupted$'
  3907. DNAM14:    DB    'DIR  :'
  3908. DIRSPEC    DB    '0',CR
  3909. ;INMS15:    DB    CR,TAB,TAB,'Drive $'
  3910. ;INMS16:    DB    '  has $';filled in by summary code with drive letter
  3911. ;INMS17:    DB    'K bytes free',CR,'$'
  3912. INMS18:    DB    CR,'File KILLED$',CR
  3913. BADDRV:    DB    CR,'++ Bad drive name$',CR
  3914. CFRMES:    DB    ' Confirm with <ENTER>, cancel with <BREAK> $'
  3915. ;FILHLP:    DB    ' Input file spec $'
  3916. ESCMES:    DB    CR,'Type the new escape character:  $'
  3917. TOPHLP:    DB    CR,'BYE to host (LOGOUT) and exit to DOS'
  3918.     DB    CR,'CONNECT to host on selected port'
  3919.     DB    CR,'DIR of local disk'
  3920.     DB    CR,'EXIT to DOS'
  3921.     DB    CR,'FINISH running Kermit on the host'
  3922.     DB    CR,'HELP by giving this message'
  3923.     DB    CR,'KILL a file'
  3924.     DB    CR,'LOG the terminal session to a file'
  3925.     DB    CR,'LOGOUT the host'
  3926.     DB    CR,'RECEIVE file from host'
  3927.     DB    CR,'SEND file to host'    
  3928.     DB    CR,'SET a parameter'
  3929.     DB    CR,'SHOW the parameters'
  3930.     DB    CR,'STATUS of Kermit$'
  3931. SETHLP:    DB    CR,'BAud (rate)'
  3932.     DB    CR,'BLock-check-type (for error detection'
  3933.     DB    CR,'DEBugging mode (to display packets)'
  3934. ;    DB    CR,'DEFault-disk (to receive data)'
  3935.     DB    CR,'Escape (character during CONNECT)'
  3936.     DB    CR,'File-mode (for outgoing files)'
  3937.     DB    CR,'Ibm (parity and turn around handling)'
  3938.     DB    CR,'Local-echo (half/duplex)'
  3939.     DB    CR,'PArity (for communication line)'
  3940.     DB    CR,'POrt (to communicate on)'
  3941.     DB    CR,'PRinter (to print terminal session)'
  3942. ;*    DB      CR,LF,'RECEIVE (parameter)'    ; Not currently i}plemented
  3943. ;*    DB      CR,LF,'SEND (parameter)'    ; Ditto
  3944.     DB    CR,'Vt52-emulation'
  3945.     DB    CR,'Warning (for filename conflicts)'
  3946.     DB    '$'
  3947. STSHLP:    DB    CR,'PAD-CHAR'
  3948.     DB    CR,'PADDING$'
  3949. BLKHLP:    DB    CR,'1-CHARACTER-CHECKSUM'
  3950.     DB    CR,'2-CHARACTER-CHECKSUM'
  3951.     DB    CR,'3-CHARACTER-CRC-CCITT$'
  3952. PARHLP:    DB    CR,'EVEN   MARK  NONE   ODD   SPACE$'
  3953. ONHLP:    DB    CR,'OFF  ON$'
  3954. YESHLP:    DB    CR,'NO   YES$'
  3955. PRTHLP    DB    CR,'STANDARD RS232 port$'
  3956. INTHLP:    DB    CR,'?  This message'
  3957.     DB    CR,'C  Close the connection'
  3958.     DB    CR,'0  (zero) Transmit a NULL'
  3959.     DB    CR,'S  Status of the connection'
  3960.     DB    CR,'Type the escape character again to send it to the host'
  3961.     DB    CR,CR,'Command>$'
  3962. ONSTR:    DB    ' on$'
  3963. OFFSTR:    DB    ' off$'
  3964. LOCST:    DB    CR,'Local echo$'
  3965. DEFSTR: DB    ' default$'
  3966. ASCSTR: DB    ' ASCII$'
  3967. BINSTR:    DB    ' binary$'
  3968. TYPHLP: DB    CR,'ASCII     BINARY     DEFAULT$'
  3969. SPDHLP    DB    CR,'     50     75     110   134.5    150   300   600    1200'
  3970.     DB    CR,'   1800   2000    2400    3600   4800  7200  9600   19200$'
  3971. VTEMST:    DB    CR,'VT52 emulation$'
  3972. CPMST:    DB    CR,'File Mode$'
  3973. IBMST:    DB    CR,'IBM flag$'
  3974. FILST:    DB    CR,'File warning$'
  3975. PNTSTR:    DB    CR,'Printer$'
  3976. ESCST:    DB    CR,'Escape char: $'
  3977. BUGST:    DB    CR,'Debugging mode$'
  3978. PARST:    DB    CR,'Parity: $'
  3979. BCKST:    DB    CR,'Block check type: $'
  3980. BCKST1:    DB    '-character$'
  3981. PNONST:    DB    'none$'
  3982. PMRKST:    DB    'mark$' 
  3983. PSPCST:    DB    'space$'
  3984. PODDST:    DB    'odd$'
  3985. PEVNST:    DB    'even$'
  3986. SPEDST    DB    'Line Speed: $'
  3987. BAUST    DB    ' Baud',CR,'$'
  3988. OUTLIN    DB    28,31,CR,'$'
  3989. VERSIO    DM    'Kermit-80 V 3.5 (TRS-80 Model 1/3)',CR,'$'
  3990. DELSTR    DB    10O,' ',10O,'$'
  3991. CLRSPC    DB    ' ',8,'$'
  3992. CLRLIN    DB    29,30,'$'
  3993. SCRNP    DB    28,26,26,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,'$'    ;place for packets
  3994. SCRNRT    DB    28,26,26,26,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,'$'    ;place for retries
  3995. SCRST    DB    28,'$'    ;place for complete
  3996. SCRFLN    DB    28,26,26,26,26,25,25,25,25,25,25,25,25,25,25,25,'$'    ;place for filename
  3997. SCRERR    DB    28,26,26,26,26,26,26,'$'        ;location for errors
  3998. SCREND    DB    28,26,26,26,26,26,26,26,26,26,26,26,26,'$'    ;location of last line
  3999. RPPOS:    DB    28,26,26,26,26,26,26,26,31,'RPack: $'
  4000. SPPOS:    DB    28,26,26,26,26,26,26,26,26,26,26,31,'SPack: $'
  4001. TA    DB    1BH,'$',0,0        ;cursor up
  4002. TB    DB    1AH,'$',0,0        ;cursor down
  4003. TC    DB    19H,'$',0,0        ;cursor right
  4004. TD    DB    18H,'$',0,0        ;cursor left
  4005. CLRTOP    DB    1CH,1FH,'$',0        ;clear screen
  4006. TF    DB    '$',0,0,'$'
  4007. TG    DB    '$',0,0,'$'
  4008. TH    DB    1CH,'$',0,0        ;cursor home
  4009. TI    DB    1BH,'$',0,0        ;reverse line feed
  4010. TJ    DB    1FH,'$',0,0        ;clear to end  of screen
  4011. TK    DB    1EH,'$'            ;clear  to end of line
  4012. ;
  4013. ;     COMND tables
  4014. ;
  4015. ;    Structure of command table:    [UTK008]
  4016. ;
  4017. ;    1) Number of entries.
  4018. ;    2) Each entry is arranged as follows:
  4019. ;        a) length of command in bytes.
  4020. ;        b) 'name of command and $-sign'
  4021. ;        c) offset into command table at KERMTB:
  4022. ;        d) offset into command table at KERMTB:
  4023. ;
  4024. ;    ---> Note this command table is in alphabetic order.
  4025. ;
  4026. COMTAB:    DB    10H            ; Number of entries (currently 16.)
  4027.     DB    03H,'BYE$',21H,21H
  4028.     DB    07H,'CONNECT$',00H,00H
  4029.     DB    03H,'DIR$',24H,24H
  4030.     DB    03H,'ERA$',27H,27H
  4031.     DB    04H,'EXIT$',03H,03H
  4032.     DB    06H,'FINISH$',1BH,1BH
  4033.     DB    03H,'GET$',0CH,0CH    ; Same as RECEIVE
  4034.     DB    04H,'HELP$',06H,06H
  4035.     DB    04H,'KILL$',27H,27H    ;SAME AS ERA
  4036.     DB    03H,'LOG$',09H,09H
  4037.     DB    06H,'LOGOUT$',1EH,1EH
  4038.     DB    07H,'RECEIVE$',0CH,0CH
  4039.     DB    04H,'SEND$',0FH,0FH    
  4040.     DB    03H,'SET$',12H,12H
  4041.     DB    04H,'SHOW$',15H,15H
  4042.     DB    06H,'STATUS$',18H,18H
  4043. SETTAB:    DB    0CH        ; Number of entries (currently 12.)
  4044.     DB    04H,'BAUD$',21H,21H    ; Data keys to SETJTB positions.
  4045.     DB    10H,'BLOCK-CHECK-TYPE$',18H,18H
  4046.     DB    09H,'DEBUGGING$',27H,27H
  4047. ;*    DB    0CH,'DEFAULT-DISK$',24H,24H
  4048.     DB    06H,'ESCAPE$',00H,00H
  4049.     DB    09H,'FILE-MODE$',12H,12H
  4050.     DB    03H,'IBM$',03H,03H
  4051.     DB    0AH,'LOCAL-ECHO$',06H,06H
  4052.     DB    06H,'PARITY$',15H,15H
  4053.     DB    04H,'PORT$',1EH,1EH
  4054.     DB    07H,'PRINTER$',24H,24H
  4055. ;*    DB    07H,'RECEIVE$',09H,09H    ; Not implemented yet.
  4056. ;*    DB    04H,'SEND$',0CH,0CH    ; Ditto
  4057.     DB    0EH,'VT52-EMULATION$',1BH,1BH
  4058.     DB    07H,'WARNING$',0FH,0FH
  4059.  
  4060. STSNTB:    DB    02H
  4061.     DB    08H,'PAD-CHAR$',00H,00H
  4062.     DB    07H,'PADDING$',03H,03H
  4063.  
  4064. BLKTAB:    DB    03H
  4065.     DB    14H,'1-CHARACTER-CHECKSUM$','1','1'
  4066.     DB    14H,'2-CHARACTER-CHECKSUM$','2','2'
  4067.     DB    15H,'3-CHARACTER-CRC-CCITT$','3','3'
  4068.  
  4069. PARTAB:    DB    05H        ; Five entries.
  4070.     DB    04H,'EVEN$',PAREVN,PAREVN
  4071.     DB    04H,'MARK$',PARMRK,PARMRK
  4072.     DB    04H,'NONE$',PARNON,PARNON
  4073.     DB    03H,'ODD$',PARODD,PARODD
  4074.     DB    05H,'SPACE$',PARSPC,PARSPC
  4075.  
  4076. ONTAB:    DB    02H        ; Two entries.
  4077.     DB    02H,'ON$',01H,01H
  4078.     DB    03H,'OFF$',00H,00H
  4079.  
  4080. TYPTAB:    DB    03H        ;Three entries
  4081.     DB    05H,'ASCII$',01H,01H
  4082.     DB    06H,'BINARY$',02H,02H
  4083.     DB    07H,'DEFAULT$',00H,00H
  4084.  
  4085. PRTTAB:    DB    01H        ; Only one port known at this point
  4086.     DB    08H,'STANDARD$'
  4087.     DW    MNPORT,MNPORT
  4088.  
  4089. YESTAB:    DB    02H        ; Two entries.
  4090.     DB    02H,'NO$',00H,00H
  4091.     DB    03H,'YES$',01H,01H
  4092.  
  4093. CMER00:    DB    CR,'?Program error:  Invalid COMND call$'
  4094. CMER01:    DB    CR,'?Ambiguous$'
  4095. CMER02:    DB    CR,'?Illegal input file spec$'
  4096. CMIN00:    DB    ' Confirm with <ENTER>, Cancel with <BREAK>$'
  4097. CMCRLF:    DB    CR,'$'
  4098. SPDTAB:    DB    10H            ;16 entries
  4099.     DB    2,'50$',0,0
  4100.     DB    02H,'75$',11H,11H
  4101.     DB    03H,'110$',22H,22H
  4102.     DB    05H,'134.5$',33H,33H
  4103.     DB    03H,'150$',44H,44H
  4104.     DB    03H,'300$',55H,55H
  4105.     DB    03H,'600$',66H,66H
  4106.     DB    04H,'1200$',77H,77H
  4107.     DB    04H,'1800$',88H,88H
  4108.     DB    04H,'2000$',99H,99H
  4109.     DB    04H,'2400$',0AAH,0AAH
  4110.     DB    04H,'3600$',0BBH,0BBH
  4111.     DB    04H,'4800$',0CCH,0CCH
  4112.     DB    04H,'7200$',0DDH,0DDH
  4113.     DB    04H,'9600$',0EEH,0EEH
  4114.     DB    05H,'19200$',0FFH,0FFH
  4115.     ; Impure data
  4116.  
  4117. ; COMND storage
  4118.  
  4119. CMSTAT:    DS    1        ; What is presently being parsed.
  4120. CMAFLG:    DS    1        ; Non-zero when an action char has been found.
  4121. CMCCNT:    DS    1        ; Non-zero if a significant char is found.
  4122. CMSFLG:    DS    1        ; Non-zero when the last char was a space.
  4123. CMOSTP:    DS    2        ; Old stack pointer for reparse.
  4124. CMRPRS:    DS    2        ; Address to go to on reparse.
  4125. CMPRMP:    DS    2        ; Address of prompt.
  4126. CMPTAB:    DS    2        ; Address of present keyword table.
  4127. CMHLP:    DS    2        ; Address of present help.
  4128. CMDBUF:    DS    80H        ; Buffer for command parsing.
  4129. CMFCB:    DS    2        ; Pointer to FCB.
  4130. ;CMFCB2:    DS    2        ; Pointer to position in FCB.
  4131. CMCPTR:    DS    2        ; Pointer for next char input.
  4132. CMDPTR:    DS    2        ; Pointer into the command buffer.
  4133. CMKPTR:    DS    2        ; Pointer to keyword.
  4134. CMSPTR:    DS    2        ; Place to save a pointer.
  4135. OLDSP:    DS    2        ; Room for old system stack.
  4136.     DS    100H        ; Room for lots of calls
  4137. STACK:    DS    2
  4138. EOFLAG:    DS    1        ; EOF flag; non-zero on EOF.
  4139. FILFLG:    DS    1        ; NON-ZERO WHEN FILE NOT OPEN
  4140. LSTCHR:    DB    0        ;Last character in disk i/o
  4141. ;CURDSK:    DB    0        ; holds "logged" disk
  4142. LOGFLG:    DB    0        ; Flag for a log file.
  4143. ECOFLG:    DB    0        ; Local echo flag (default off).
  4144. ESCFLG:    DB    0        ; Escape flag (start off).
  4145. VTFLG:    DB    1        ; VT52 emulation flag (default on).
  4146. FLWFLG:    DB    1        ;file warning flag (default on)
  4147.  
  4148. IBMFLG:    DB    0        ; IBM flag (default off).
  4149. CPMFLG:    DB    0        ; File was created by DOS
  4150. DBFLG:    DB    0        ;debugging flag (default off)
  4151. PRTFLG:    DB    0        ;printer flag (default off)
  4152. PARITY:    DB    DEFPAR        ; Parity.
  4153. ESCCHR:    DB    DEFESC        ; Storage for the escape character.
  4154. CHRCNT:    DS    1        ; Number of chars in the file buffer.
  4155. FILCNT:    DS    1        ; Number of chars left to fill.
  4156. PORT    DS    1        ;port for commuications
  4157. OUTPNT:    DS    2        ; Position in packet.
  4158. BUFPNT:    DS    2        ; Position in file buffer.
  4159. FCBPTR:    DS    2        ; Position in FCB.
  4160. ;FCBEXT    DS    2
  4161. DATPTR:    DS    2        ; Position in packet data buffer.
  4162. LOGPTR:    DW    LBUFF        ;pointer into log file buffer
  4163. CBFPTR:    DS    2        ; Position in character buffer.
  4164. PKTPTR:    DS    2        ; Poistion in receive packet.
  4165. SIZE:    DS    1        ; Size of data from gtchr.
  4166. SPEED:    DB    DBAUD        ;baud rate
  4167. SPSIZ:    DB    DSPSIZ        ; Send packet size.
  4168. RPSIZ:    DB    DRPSIZ        ; Receive packet size.
  4169. STIME:    DB    DSTIME        ; Send time out.
  4170. RTIME:    DB    DRTIME        ; Receive time out.
  4171. SPAD:    DB    DSPAD        ; Send padding.
  4172. RPAD:    DB    DRPAD        ; Receive padding.
  4173. SPADCH:    DB    DSPADC        ; Send padding char.
  4174. RPADCH:    DB    DRPADC        ; Receive padding char.
  4175. SEOL:    DB    DSEOL        ; Send EOL char.
  4176. REOL:    DB    DREOL        ; Receive EOL char.
  4177. SQUOTE:    DB    DSQUOT        ; Send quote char.
  4178. RQUOTE:    DB    DRQUOT        ; Receive quote char.
  4179. CHKTYP:    DB    DSCHKT        ; Checksum type desired
  4180. CURCHK:    DB    DSCHKT        ; Current checksum type
  4181. INICHK:    DB    DSCHKT        ; Agreed upon checksum type
  4182. CZSEEN:    DS    1        ; Flag that control-Z was typed
  4183. MFNPTR:    DW    MFNBUF        ;multiple file processing buffer
  4184. PKTNUM:    DS    1        ; Packet number.
  4185. NUMPKT:    DS    2        ; Total number of packets sent.
  4186. NUMRTR:    DS    2        ; Total number of retries.
  4187. NUMTRY:    DS    1        ; Number of tries on this packet.
  4188. OLDTRY:    DS    1        ; Number of tries on previous packet.
  4189. STATE:    DS    1        ; Present state of the automaton.
  4190. PACKET:    DS    4        ; Packet (data is part of it).
  4191. DATA:    DS    5AH        ; Data and checksum field of packet.
  4192. RECPKT:    DS    60H        ; Receive packet storage (use the following).
  4193. FILBUF:    DS    60H        ; Character buffer.
  4194. ;** Temp 1 & 2 must be in order
  4195. TEMP1:    DS    1        ; Temporary storage.
  4196. TEMP2:    DS    1
  4197. TEMP3:    DS    1
  4198. TEMP4:    DS    1
  4199. ;    Data storage for MFNAME (multi-file access)
  4200. MFREQ:    DS    32        ;Requested name
  4201. MFNBUF    DS    7AH        ;filename buffer
  4202. ;
  4203. FCB    DS    50        ;file control block
  4204. LFCB    DS    50        ;log file fcb
  4205. KFCB    DS    50        ;kill file fcb
  4206. BUFF    DS    256        ;file buffer
  4207. LBUFF    DS    256        ;log file buffer
  4208. ARGBLK:    DS    20H        ; Used for subroutine arguments.
  4209. <<< trsxfer.src >>>
  4210. ;    FILE ROUTINES
  4211. ;    OUTPUT THE CHARS IN A PACKET.
  4212. PTCHR:    LD     (TEMP1),A    ; SAVE THE SIZE.
  4213.     LD     HL,DATA    ; BEGINNING OF RECEIVED PACKET DATA.
  4214.     LD     (OUTPNT),HL    ; REMEMBER WHERE WE ARE.
  4215.     LD     A,(RQUOTE)
  4216.     LD     B,A        ; KEEP THE QUOTE CHAR IN B.
  4217. PTCHR1:    LD     HL,TEMP1
  4218.     DEC    (HL)        ; DECREMENT # OF CHARS IN PACKET.
  4219.     JP     M,RSKP        ; RETURN SUCCESSFULLY IF DONE.
  4220. PTCHR2:    LD     HL,(OUTPNT)    ; GET POSITION IN OUTPUT BUFFER.
  4221.     LD     A,(HL)        ; GRAB A CHAR.
  4222.     INC    HL
  4223.     LD     (OUTPNT),HL    ; AND BUMP POINTER.
  4224.     CP     B        ; IS IT THE QUOTE CHAR?
  4225.     JP     NZ,PTCHR4    ; IF NOT PROCEED.
  4226.     LD     A,(HL)        ; GET THE QUOTED CHARACTER
  4227.     INC    HL
  4228.     LD     (OUTPNT),HL    ; AND BUMP POINTER.
  4229.     LD     HL,TEMP1
  4230.     DEC    (HL)        ; DECREMENT # OF CHARS IN PACKET.
  4231.     LD     D,A        ; SAVE THE CHAR.
  4232.     AND    80H        ; TURN OFF ALL BUT THE PARITY BIT.
  4233.     LD     E,A        ; SAVE THE PARITY BIT.
  4234.     LD     A,D        ; GET THE CHAR.
  4235.     AND    7FH        ; TURN OFF THE PARITY BIT.
  4236.     CP     B        ; IS IT THE QUOTE CHAR?
  4237.     JP     Z,PTCHR3    ; IF SO JUST GO WRITE IT OUT.
  4238.     LD     A,D        ; GET THE CHAR.
  4239.     ADD    A,40H        ; MAKE THE CHARACTER A CONTROL CHAR AGAIN.
  4240.     AND    7FH        ; MODULO 128.
  4241. PTCHR3:    OR     E        ; OR IN THE PARITY BIT.
  4242.     LD    E,A        ;SAVE IT
  4243.     LD    A,(CPMFLG)    ;FILE TYPE?
  4244.     CP    1        ;ASCII?
  4245.     JR    NZ,PTCR3B
  4246.     LD    A,E
  4247.     CP    LF        ;LINE FEED?
  4248.     JR    NZ,PTCR3B
  4249.     LD    A,(LSTCHR)
  4250.     CP    CR
  4251.     JP    Z,PTCHR1    ;SKIP IT
  4252.     LD    E,CR        ;CONVERT IT
  4253. PTCR3B:    LD    A,E
  4254.     LD    (LSTCHR),A
  4255. PTCHR4:    LD    DE,FCB
  4256.     CALL    @PUT        ;output character to file
  4257.     JP    NZ,QUIT        ;bad write
  4258.     JP    PTCHR1
  4259. ;    GET THE CHARS FROM THE FILE.
  4260. GTCHR:    LD     A,(SQUOTE)    ; GET THE QUOTE CHAR.
  4261.     LD     C,A        ; KEEP QUOTE CHAR IN C.
  4262.     LD    A,(EOFLAG)
  4263.     OR    A
  4264.     RET    NZ
  4265.     LD     A,(FILFLG)    ; GET THE FILE FLAG.
  4266.     OR     A        ; IS THERE ANYTHING IN THE DMA?
  4267.     JR     Z,GTCHR0    ; YUP, PROCEED.
  4268.     LD     B,0        ; NO CHARS YET.
  4269. GTCHR0:    LD     A,(CURCHK)    ; GET CURRENT BLOCK CHECK TYPE
  4270.     SUB    '1'        ; GET THE EXTRA OVERHEAD
  4271.     LD     B,A        ; GET A COPY
  4272.     LD     A,(SPSIZ)    ; GET THE MAXIMUM PACKET SIZE.
  4273.     SUB    5        ; SUBTRACT THE OVERHEAD.
  4274.     SUB    B        ; DETERMINE MAX PACKET LENGTH
  4275.     LD     (TEMP1),A    ; THIS IS THE NUMBER OF CHARS WE ARE TO GET.
  4276.     LD     HL,FILBUF    ; WHERE TO PUT THE DATA.
  4277.     LD     (CBFPTR),HL    ; REMEMBER WHERE WE ARE.
  4278.     LD     B,0        ; NO CHARS.
  4279. GTCHR1:    LD     A,(TEMP1)
  4280.     DEC    A        ; DECREMENT THE NUMBER OF CHARS LEFT.
  4281.     JP     P,GTCHR2    ; GO ON IF THERE IS MORE THAN ONE LEFT.
  4282.     LD     A,B        ; RETURN THE COUNT IN A.
  4283.     JP    RSKP
  4284. GTCHR2:    LD     (TEMP1),A
  4285.     LD    A,(CPMFLG)    ;GET THE FILE TYPE FLAG
  4286.     CP    1        ;ASCII
  4287.     JR    NZ,GTCHR4    ;NOPE
  4288.     LD    A,(LSTCHR)    ;GET LAST CHARACTER
  4289.     CP    CR        ;CARRIAGE RETURN?
  4290.     JR    NZ,GTCHR4    ;NOPE
  4291.     LD    A,LF        ;ADD A LINE FEED
  4292.     JR    GTCR4A
  4293. GTCHR4:    LD    DE,FCB
  4294.     CALL    @GET        ;get a character
  4295.     JP    NZ,GTCHR9
  4296. GTCR4A:    LD     D,A        ; SAVE THE CHAR.
  4297.     LD    A,(CPMFLG)
  4298.     CP    1
  4299.     JR    NZ,GTCR4B
  4300.     LD    A,D        ;make sure it is a
  4301.     AND    7FH        ;legal ASCII character
  4302.     LD    D,A
  4303. GTCR4B:    AND    80H        ; TURN OFF ALL BUT PARITY.
  4304.     LD     E,A        ; SAVE THE PARITY BIT.
  4305.     LD     A,D        ; RESTORE THE CHAR.
  4306.     AND    7FH        ; TURN OFF THE PARITY.
  4307.     LD    (LSTCHR),A    ;SAVE THIS CHARACTER 
  4308.     CP     ' '            ; COMPARE TO A SPACE.
  4309.     JP     M,GTCHR7    ; IF LESS THEN ITS A CONTROL CHAR, HANDLE IT.
  4310.     CP     DEL        ; IS THE CHAR A DELETE?
  4311.     JP    Z,GTCHR7
  4312.     CP     C        ; IS IT THE QUOTE CHAR?
  4313.     JP     NZ,GTCHR8    ; IF NOT PROCEED.
  4314.     LD     HL,TEMP1    ; POINT TO THE CHAR TOTAL REMAINING.
  4315.     DEC    (HL)        ; DECREMENT IT.
  4316.     LD     HL,(CBFPTR)    ; POSITION IN CHARACTER BUFFER.
  4317.     LD     (HL),A        ; PUT THE CHAR IN THE BUFFER.
  4318.     INC    HL
  4319.     LD     (CBFPTR),HL
  4320.     INC    B        ; INCREMENT THE CHAR COUNT.
  4321.     JP     GTCHR8
  4322. GTCHR7:    LD     (TEMP2),A    ; SAVE THE CHAR.
  4323.     LD     HL,TEMP1    ; POINT TO THE CHAR TOTAL REMAINING.
  4324.     DEC    (HL)        ; DECREMENT IT.
  4325.     LD     HL,(CBFPTR)    ; POSITION IN CHARACTER BUFFER.
  4326.     LD     (HL),C        ; PUT THE QUOTE IN THE BUFFER.
  4327.     INC    HL
  4328.     LD     (CBFPTR),HL
  4329.     INC    B        ; INCREMENT THE CHAR COUNT.
  4330.     LD     A,(TEMP2)    ; GET THE CONTROL CHAR BACK.
  4331.     ADD    A,40H        ; MAKE THE NON-CONTROL.
  4332.     AND    7FH        ; MODULO 200 OCTAL.
  4333. GTCHR8:    LD     HL,(CBFPTR)    ; POSITION IN CHARACTER BUFFER.
  4334.     OR     E        ; OR IN THE PARITY BIT.
  4335.     LD     (HL),A        ; PUT THE CHAR IN THE BUFFER.
  4336.     INC    HL
  4337.     LD     (CBFPTR),HL
  4338.     INC    B        ; INCREMENT THE CHAR COUNT.
  4339.     JP    GTCHR1
  4340. GTCHR9:    LD    A,0FFH
  4341.     LD    (EOFLAG),A
  4342.     LD    A,B
  4343.     JP    RSKP
  4344. ;MULTI-FILE ACCESS SUBROUTINE.  ALLOWS PROCESSING OF MULTIPLE FILES
  4345. ;(I.E., *.ASM) FROM DISK.  THIS ROUTINE BUILDS THE PROPER NAME IN THE
  4346. ;FCB EACH TIME IT IS CALLED.  THIS COMMAND WOULD BE USED IN SUCH PRO-
  4347. ;GRAMS SUCH AS MODEM TRANSFER, TAPE SAVE, ETC. IN WHICH YOU WANT TO
  4348. ;PROCESS SINGLE OR MULTIPLE FILES.
  4349. ;
  4350. ;THE FCB WILL BE SET UP WITH THE NEXT NAME, READY TO DO NORMAL PROCES-
  4351. ;SING (OPEN, READ, ETC.) WHEN ROUTINE IS CALLED.
  4352. ;
  4353. ;CARRY IS SET IF NO MORE NAMES CAN BE FOUND
  4354. ;
  4355. ; MFFLG1 IS COUNT/SWITCH [0 FOR FIRST TIME THRU, POS FOR ALL OTHERS]
  4356. ; MFFLG2 IS COUNTED DOWN FOR EACH SUCCESSIVE GETNEXT FILE CALL
  4357. MFNAME:    JP     NC,MFN00
  4358.     CCF                ;CLEAR CARRY
  4359. MFN00:    PUSH   BC    ;SAVE REGISTERS
  4360.     PUSH   DE
  4361.     PUSH   HL
  4362.     LD    B,50
  4363.     LD    HL,FCB
  4364. MFN0A:    LD    (HL),20H
  4365.     INC    HL
  4366.     DJNZ    MFN0A
  4367.     LD    B,32
  4368.     LD    HL,MFREQ
  4369. MFN0B:    LD    (HL),20H
  4370.     INC    HL
  4371.     DJNZ    MFN0B
  4372.     LD     HL,(MFNPTR)
  4373.     LD     DE,MFREQ
  4374.     CALL    @FSPEC
  4375.     LD    (MFNPTR),HL
  4376.     JR    NZ,MFFIX2
  4377. MFN01:    LD     HL,MFREQ    ;SFIRST REQ NAME
  4378.     LD     DE,FCB
  4379.     CALL    @FSPEC    ;MOVE TO FCB
  4380. MFFIX1:    POP    HL    ; RESTORE REGISTERS
  4381.     POP    DE
  4382.     POP    BC
  4383.     RET                ;AND RETURN
  4384. MFFIX2:    SCF                ;SET CARRY
  4385.     JR     MFFIX1    ;RETURN WITH CARRY SET
  4386. GETFIL:    LD     A,0FFH
  4387.     LD     (FILFLG),A    ; NOTHING IN THE DMA.
  4388.     XOR    A
  4389.     LD     (EOFLAG),A    ; NOT THE END OF FILE.
  4390.     LD    (LSTCHR),A
  4391.     PUSH    HL
  4392.     LD     DE,FCB
  4393.     LD    HL,BUFF
  4394.     CALL    @OPEN
  4395.     POP    HL
  4396.     JP    NZ,ERRORD
  4397.     JP    RSKP
  4398. GOFIL:    LD     HL,DATA    ; GET THE ADDRESS OF THE FILE NAME.
  4399.     LD     (DATPTR),HL    ; STORE THE ADDRESS.
  4400.     LD     HL,FCB    ; ADDRESS OF THE FCB.
  4401.     LD     (FCBPTR),HL    ; SAVE IT.
  4402.     XOR    A
  4403.     LD     (TEMP1),A    ; INITIALIZE THE CHAR COUNT.
  4404.     LD     (TEMP2),A
  4405.     LD    B,50
  4406. GOFIL1:    LD     (HL),20H        ; BLANK THE FCB.
  4407.     INC    HL
  4408.     DJNZ    GOFIL1
  4409. GOFIL2:    LD     HL,(DATPTR)    ; GET THE NAME FIELD.
  4410.     LD     A,(HL)
  4411.     INC    HL
  4412.     LD     (DATPTR),HL
  4413.     CP     '.'        ; SEPERATOR?
  4414.     JP     NZ,GOFIL3
  4415.     LD     A,(TEMP1)
  4416.     LD     (TEMP2),A
  4417.     XOR    A
  4418.     LD    (TEMP1),A
  4419.     JP     GOFIL5
  4420. GOFIL3:    OR     A        ; TRAILING NULL?
  4421.     JP     Z,GOFIL7    ; THEN WE'RE DONE.
  4422.     LD     HL,(FCBPTR)
  4423.     LD     (HL),A
  4424.     INC    HL
  4425.     LD     (FCBPTR),HL
  4426.     LD     A,(TEMP1)    ; GET THE CHAR COUNT.
  4427.     INC    A
  4428.     LD     (TEMP1),A
  4429.     CP     8H        ; ARE WE FINISHED WITH THIS FIELD?
  4430.     JP     M,GOFIL2
  4431. GOFIL4:    LD     (TEMP2),A
  4432.     XOR    A
  4433.     LD    (TEMP1),A
  4434.     LD     HL,(DATPTR)
  4435.     LD     A,(HL)
  4436.     INC    HL
  4437.     LD     (DATPTR),HL
  4438.     OR     A
  4439.     JP     Z,GOFIL7
  4440.     CP     '.'        ; IS THIS THE TERMINATOR?
  4441.     JP     NZ,GOFIL4    ; GO UNTIL WE FIND IT.
  4442. GOFIL5    LD    HL,(FCBPTR)
  4443.     LD    (HL),'/'    ;PUT IN A SLASH
  4444.     INC    HL
  4445.     LD    (FCBPTR),HL
  4446. GOFIL6:    LD     HL,(DATPTR)    ; GET THE TYPE FIELD.
  4447.     LD     A,(HL)
  4448.     INC    HL
  4449.     LD     (DATPTR),HL
  4450.     OR     A        ; TRAILING NULL?
  4451.     JP     Z,GOFIL7    ; THEN WE'RE DONE.
  4452.     LD     HL,(FCBPTR)
  4453.     LD     (HL),A
  4454.     INC    HL
  4455.     LD     (FCBPTR),HL
  4456.     LD     A,(TEMP1)    ; GET THE CHAR COUNT.
  4457.     INC    A
  4458.     LD     (TEMP1),A
  4459.     CP     03H        ; ARE WE FINISHED WITH THIS FIELD?
  4460.     JP     M,GOFIL6
  4461. GOFIL7:    LD     HL,(DATPTR)
  4462.     LD     (HL),'$'    ; PUT IN A DOLLAR SIGN FOR PRINTING.
  4463.     LD     DE,SCRFLN    ; POSITION CURSOR
  4464.     CALL   PRTSTR
  4465.     LD     DE,DATA    ; PRINT THE FILE NAME
  4466.     CALL   PRTSTR
  4467.     LD    HL,(FCBPTR)
  4468.     LD    (HL),3        ;PUT TERMINATOR IN FCB
  4469.     LD    A,(FLWFLG)    ;IS FILE WARNING ON?
  4470.     OR     A
  4471.     JP     Z,GOFIL9    ; IF NOT, JUST PROCEED.
  4472.     LD     DE,FCB
  4473.     LD    HL,BUFF
  4474.     CALL    @OPEN
  4475.     JP     NZ,GOFIL9    ; IF NOT CREATE IT.
  4476.     LD     DE,INFMS5
  4477.     CALL   ERROR3
  4478.     LD    DE,FCB
  4479.     CALL    @CLOSE        ;close opened file
  4480. GOFIL8:    LD     HL,(FCBPTR)    ;make a new filename
  4481. GOFL8A    DEC    HL
  4482. GOFL8B    LD    A,(HL)
  4483.     CP    'B'        
  4484.     JR    C,GOFL8A    ;TOO SMALL
  4485.     DEC    (HL)        ;DECREMENT CHARACTER
  4486.     LD    (FCBPTR),HL
  4487.     LD     DE,FCB        ;new file name ok?
  4488.     LD    HL,BUFF
  4489.     CALL      @OPEN
  4490.     JP     NZ,GOFL89    ; yes!
  4491.     LD    DE,FCB
  4492.     CALL    @CLOSE
  4493.     LD    HL,(FCBPTR)
  4494.     OR    A
  4495.     SBC    HL,DE
  4496.     JR    NZ,GOFIL8        ;TRY AGAIN
  4497. GOFL88:    LD     DE,ERMS16    ; TELL USER THAT WE CAN'T RENAME IT.
  4498.     CALL   PRTSTR
  4499.     RET    
  4500. GOFL89:    LD     HL,FCB    ;move it for usage by other routines
  4501.     LD    DE,MFREQ
  4502.     CALL    @FSPEC
  4503.     LD    A,':'
  4504.     LD    BC,14
  4505.     LD    HL,MFREQ
  4506.     CPIR
  4507.     INC    HL
  4508.     LD    (HL),'$'
  4509.     LD    DE,MFREQ
  4510.     CALL   PRTSTR
  4511. GOFIL9:    XOR    A
  4512.     LD    (LSTCHR),A
  4513.     LD     DE,FCB
  4514.     LD    HL,BUFF
  4515.     CALL    @INIT
  4516.     JP     Z,RSKP
  4517.     PUSH    AF
  4518.     LD     DE,ERMS11
  4519.     CALL   ERROR3
  4520.     POP    AF
  4521.     JP    ERRORD
  4522. ;    PACKET ROUTINES
  4523. ; SEND_PACKET
  4524. ; THIS ROUTINE ASSEMBLES A PACKET FROM THE ARGUMENTS GIVEN AND SENDS IT
  4525. ; TO THE HOST.
  4526. ;
  4527. ; EXPECTS THE FOLLOWING:
  4528. ;    A        - TYPE OF PACKET (D,Y,N,S,R,E,F,Z,T)
  4529. ;    ARGBLK   - PACKET SEQUENCE NUMBER
  4530. ;    ARGBLK+1 - NUMBER OF DATA CHARACTERS
  4531. ; RETURNS: +1 ON FAILURE
  4532. ;       +2 ON SUCCESS
  4533. SPACK:    LD     (ARGBLK+2),A
  4534.     LD     HL,PACKET    ; GET ADDRESS OF THE SEND PACKET.
  4535.     LD     A,SOH    ; GET THE START OF HEADER CHAR.
  4536.     LD     (HL),A        ; PUT IN THE PACKET.
  4537.     INC    HL        ; POINT TO NEXT CHAR.
  4538.     LD     A,(CURCHK)    ; GET CURRENT CHECKSUM TYPE
  4539.     SUB    '1'        ; DETERMINE EXTRA LENGTH OF CHECKSUM
  4540.     LD     B,A        ; COPY LENGTH
  4541.     LD     A,(ARGBLK+1)    ; GET THE NUMBER OF DATA CHARS.
  4542.     ADD    A,' '+3        ; REAL PACKET CHARACTER COUNT MADE PRINTABLE.
  4543.     ADD    A,B        ; DETERMINE OVERALL LENGTH
  4544.     LD     (HL),A        ; PUT IN THE PACKET.
  4545.     INC    HL        ; POINT TO NEXT CHAR.
  4546.     LD     BC,0        ; ZERO THE CHECKSUM AC.
  4547.     LD     C,A        ; START THE CHECKSUM.
  4548.     LD     A,(ARGBLK)    ; GET THE PACKET NUMBER.
  4549.     ADD    A,' '            ; ADD A SPACE SO THE NUMBER IS PRINTABLE.
  4550.     LD     (HL),A        ; PUT IN THE PACKET.
  4551.     INC    HL        ; POINT TO NEXT CHAR.
  4552.     ADD    A,C
  4553.     LD     C,A        ; ADD THE PACKET NUMBER TO THE CHECKSUM.
  4554.     LD     A,0        ; CLEAR A (CANNOT BE XRA A, SINCE WE CAN'T TOUCH CARRY FLAG)
  4555.     ADC    A,B        ; GET HIGH ORDER PORTION OF CHECKSUM
  4556.     LD     B,A        ; COPY BACK TO B
  4557.     LD     A,(ARGBLK+2)    ; GET THE PACKET TYPE.
  4558.     LD     (HL),A        ; PUT IN THE PACKET.
  4559.     INC    HL        ; POINT TO NEXT CHAR.
  4560.     ADD    A,C
  4561.     LD     C,A        ; ADD THE PACKET NUMBER TO THE CHECKSUM.
  4562.     LD     A,0        ; CLEAR A
  4563.     ADC    A,B        ; GET HIGH ORDER PORTION OF CHECKSUM
  4564.     LD     B,A        ; COPY BACK TO B
  4565. SPACK2:    LD     A,(ARGBLK+1)    ; GET THE PACKET SIZE.
  4566.     OR     A        ; ARE THERE ANY CHARS OF DATA?
  4567.     JP     Z,SPACK3    ;  NO, FINISH UP.
  4568.     DEC    A        ; DECREMENT THE CHAR COUNT.
  4569.     LD     (ARGBLK+1),A    ; PUT IT BACK.
  4570.     LD     A,(HL)        ; GET THE NEXT CHAR.
  4571.     INC    HL        ; POINT TO NEXT CHAR.
  4572.     ADD    A,C
  4573.     LD     C,A        ; ADD THE PACKET NUMBER TO THE CHECKSUM.
  4574.     LD     A,0        ; CLEAR A
  4575.     ADC    A,B        ; GET HIGH ORDER PORTION OF CHECKSUM
  4576.     LD     B,A        ; COPY BACK TO B
  4577.     JP     SPACK2    ; GO TRY AGAIN.
  4578. SPACK3:    LD     A,(CURCHK)    ; GET THE CURRENT CHECKSUM TYPE
  4579.     CP     '2'        ; TWO CHARACTER?
  4580.     JP     Z,SPACK4    ; YES, GO HANDLE IT
  4581.     JP     NC,SPACK5    ; NO, GO HANDLE CRC IF '3'
  4582.     LD     A,C        ; GET THE CHARACTER TOTAL.
  4583.     AND    0C0H    ; TURN OFF ALL BUT THE TWO HIGH ORDER BITS.
  4584. ;    RRC
  4585. ;    RRC
  4586. ;    RRC
  4587. ;    RRC
  4588. ;    RRC
  4589. ;    RRC            ; SHIFT THEM INTO THE LOW ORDER POSITION.
  4590.     RLCA               ; TWO LEFT ROTATES SAME AS 6 RIGHTS
  4591.     RLCA               ;  .  .  .
  4592.     ADD    A,C        ; ADD IT TO THE OLD BITS.
  4593.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.  (MOD 64)
  4594.     ADD    A,' '            ; ADD A SPACE SO THE NUMBER IS PRINTABLE.
  4595.     LD     (HL),A        ; PUT IN THE PACKET.
  4596.     INC    HL        ; POINT TO NEXT CHAR.
  4597.     JP     SPACK7    ; GO STORE EOL CHARACTER
  4598. ; HERE FOR 3 CHARACTER CRC-CCITT
  4599. SPACK5:    LD     (HL),0        ; STORE A NULL FOR CURRENT END
  4600.     PUSH   HL        ; SAVE H
  4601.     LD     HL,PACKET+1    ; POINT TO FIRST CHECKSUMED CHARACTER
  4602.     CALL   CRCCLC    ; CALCULATE THE CRC
  4603.     POP    HL        ; RESTORE THE POINTER
  4604.     LD     C,E        ; GET LOW ORDER HALF FOR LATER
  4605.     LD     B,D        ; COPY THE HIGH ORDER
  4606.     LD     A,D        ; GET THE HIGH ORDER PORTION
  4607.     RLCA               ; SHIFT OFF LOW 4 BITS
  4608.     RLCA               ;  .  .  .
  4609.     RLCA               ;  .  .  .
  4610.     RLCA               ;  .  .  .
  4611.     AND    0FH        ; KEEP ONLY LOW 4 BITS
  4612.     ADD    A,' '            ; PUT INTO PRINTING RANGE
  4613.     LD     (HL),A        ; STORE THE CHARACTER
  4614.     INC    HL        ; POINT TO NEXT POSITION
  4615. ; HERE FOR TWO CHARACTER CHECKSUM
  4616. SPACK4:    LD     A,B        ; GET HIGH ORDER PORTION
  4617.     AND    0FH        ; ONLY KEEP LAST FOUR BITS
  4618.     RLCA               ; SHIFT UP TWO BITS
  4619.     RLCA               ;  . .  .
  4620.     LD     B,A        ; COPY BACK INTO SAFE PLACE
  4621.     LD     A,C        ; GET LOW ORDER HALF
  4622.     RLCA               ; SHIFT HIGH TWO BITS
  4623.     RLCA               ; TO LOW TWO BITS
  4624.     AND    03H        ; KEEP ONLY TWO LOW BITS
  4625.     OR     B        ; GET HIGH ORDER PORTION IN
  4626.     ADD    A,' '            ; CONVERT TO PRINTING CHARACTER RANGE
  4627.     LD     (HL),A        ; STORE THE CHARACTER
  4628.     INC    HL        ; POINT TO NEXT CHARACTER
  4629.     LD     A,C        ; GET LOW ORDER PORTION
  4630.     AND    3FH        ; KEEP ONLY SIX BITS
  4631.     ADD    A,' '            ; CONVERT TO PRINTING RANGE
  4632.     LD     (HL),A        ; STORE IT
  4633.     INC    HL        ; BUMP THE POINTER
  4634. SPACK7:    LD     A,(SEOL)    ; GET THE EOL THE OTHER HOST WANTS.
  4635.     LD     (HL),A        ; PUT IN THE PACKET.
  4636.     INC    HL        ; POINT TO NEXT CHAR.
  4637.     XOR    A        ; GET A NULL.
  4638.     LD     (HL),A        ; PUT IN THE PACKET.
  4639.     LD    A,(DBFLG)
  4640.     OR    A
  4641.     JR    Z,SPACK8    ;debug is off
  4642.     INC    HL        ; POINT TO NEXT CHAR.
  4643.     LD     A,'$'    ; GET A DOLLAR SIGN.
  4644.     LD     (HL),A        ; PUT IN THE PACKET.
  4645. SPACK8:    CALL   OUTPKT    ; CALL THE SYSTEM DEPENDENT ROUTINE.
  4646.     JP    QUIT
  4647.     JP    RSKP
  4648. ;    WRITE OUT A PACKET.
  4649. OUTPKT    LD     A,(SPAD)    ; GET THE NUMBER OF PADDING CHARS.
  4650.     LD     (TEMP1),A
  4651. OUTPK2:    LD     A,(TEMP1)    ; GET THE COUNT.
  4652.     DEC    A
  4653.     OR     A
  4654.     JP     M,OUTPK6    ; IF NONE LEFT PROCEED.
  4655.     LD     (TEMP1),A
  4656.     LD     A,(SPADCH)    ; GET THE PADDING CHAR.
  4657.     LD     E,A        ; PUT THE CHAR IN RIGHT AC.
  4658.     CALL   OUTCHR    ; OUTPUT IT.
  4659.     JP     OUTPK2
  4660. OUTPK6:    LD     A,(IBMFLG)    ; IS THIS THE (DUMB) IBM.
  4661.     OR     A
  4662.     JP     Z,OUTPK8    ; IF NOT THEN PROCEED.
  4663.     LD     A,(STATE)    ; CHECK IF THIS IS THE SEND-INIT PACKET.
  4664.     CP     'S'
  4665. ;* THIS WILL ALSO HAVE TO BE TAKEN CARE FOR 'R' (RECEIVE), 'G' (GENERIC)
  4666. ;* AND 'C' (COMMAND) PACKETS IF THE IBM BECOMES A SERVER.
  4667.     JP     Z,OUTPK8    ; IF SO DON'T WAIT FOR THE XON.
  4668. OUTPK7:    CALL   INCHR    ; WAIT FOR THE TURN AROUND CHAR.
  4669.     JP     OUTPK8
  4670.     CP     XON        ; IS IT THE IBM TURN AROUND CHARACTER?
  4671.     JP     NZ,OUTPK7    ; IF NOT, GO UNTIL IT IS.
  4672. OUTPK8:    LD    A,(DBFLG)
  4673.     OR    A
  4674.     JR    Z,OUTPK9
  4675.     LD     DE,SPPOS    ; PRINT THE PACKET
  4676.     CALL   PRTSTR
  4677.     LD     DE,PACKET+1
  4678.     CALL   PRTSTR
  4679. OUTPK9:    LD     HL,PACKET    ; POINT TO THE PACKET.
  4680. OUTLUP:    LD     A,(HL)        ; GET THE NEXT CHARACTER.
  4681.     OR     A        ; IS IT A NULL?
  4682.     JP     Z,OUTLUD    ; IF SO RETURN SUCCESS.
  4683.     LD     E,A        ; PUT THE CHAR IN RIGHT AC.
  4684.     CALL   OUTCHR    ; OUTPUT THE CHARACTER.
  4685.     INC    HL        ; INCREMENT THE CHAR POINTER.
  4686.     JP     OUTLUP
  4687. OUTLUD:    JP    RSKP    ; JUST RETURN
  4688. ; THIS ROUTINE WAITS FOR A PACKET TO ARRIVE FROM THE HOST.  IT READS
  4689. ; CHARACTERS UNTIL IT FINDS A SOH.  IT THEN READS THE PACKET INTO PACKET.
  4690. ;
  4691. ; RETURNS:  +1 FAILURE (IF THE CHECKSUM IS WRONG OR THE PACKET TRASHED)
  4692. ;        +2 SUCCESS WITH A        - MESSAGE TYPE
  4693. ;                ARGBLK   - MESSAGE NUMBER
  4694. ;                           ARGBLK+1 - LENGTH OF DATA
  4695. RPACK:    CALL   INPKT    ; READ UP TO A CARRIAGE RETURN.
  4696.     JP     QUIT        ;  RETURN BAD.
  4697. RPACK0:    CALL   GETCHR    ; GET A CHARACTER.
  4698.     JP     RPACK    ;  HIT A CR; NULL LINE; JUST START OVER.
  4699.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4700.     JR     NZ,RPACK0    ;  NO, GO UNTIL IT IS.
  4701. RPACK1:    CALL   GETCHR    ; GET A CHARACTER.
  4702.     JP     QUIT        ;  HIT THE CARRIAGE RETURN, RETURN BAD.
  4703.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4704.     JR     Z,RPACK1    ;  YES, THEN GO START OVER.
  4705.     LD     (PACKET+1),A    ; STORE IN PACKET ALSO
  4706.     LD     C,A        ; START THE CHECKSUM.
  4707.     LD     A,(CURCHK)    ; GET BLOCK CHECK TYPE
  4708.     SUB    '1'        ; DETERMINE EXTRA LENGTH OF BLOCK CHECK
  4709.     LD     B,A        ; GET A COPY
  4710.     LD     A,C        ; GET BACK LENGTH CHARACTER
  4711.     SUB    ' '+3        ; GET THE REAL DATA COUNT.
  4712.     SUB    B        ; GET TOTAL LENGTH
  4713.     LD     (ARGBLK+1),A
  4714.     LD     B,0        ; CLEAR HIGH ORDER HALF OF CHECKSUM
  4715.     CALL   GETCHR    ; GET A CHARACTER.
  4716.     JP     QUIT        ;  HIT THE CARRIAGE RETURN, RETURN BAD.
  4717.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4718.     JR     Z,RPACK1    ;  YES, THEN GO START OVER.
  4719.     LD     (ARGBLK),A
  4720.     LD     (PACKET+2),A    ; SAVE ALSO IN PACKET
  4721.     ADD    A,C
  4722.     LD     C,A        ; ADD THE CHARACTER TO THE CHECKSUM.
  4723.     LD     A,0        ; CLEAR A
  4724.     ADC    A,B        ; GET HIGH ORDER PORTION OF CHECKSUM
  4725.     LD     B,A        ; COPY BACK TO B
  4726.     LD     A,(ARGBLK)
  4727.     SUB    ' '            ; GET THE REAL PACKET NUMBER.
  4728.     LD     (ARGBLK),A
  4729.     CALL   GETCHR    ; GET A CHARACTER.
  4730.     JP     QUIT        ;  HIT THE CARRIAGE RETURN, RETURN BAD.
  4731.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4732.     JP     Z,RPACK1    ;  YES, THEN GO START OVER.
  4733.     LD     (TEMP1),A    ; SAVE THE MESSAGE TYPE.
  4734.     LD     (PACKET+3),A    ; SAVE IN PACKET
  4735.     ADD    A,C
  4736.     LD     C,A        ; ADD THE CHARACTER TO THE CHECKSUM.
  4737.     LD     A,0        ; CLEAR A
  4738.     ADC    A,B        ; GET HIGH ORDER PORTION OF CHECKSUM
  4739.     LD     B,A        ; COPY BACK TO B
  4740.     LD     A,(ARGBLK+1)    ; GET THE NUMBER OF DATA CHARACTERS.
  4741.     LD     (TEMP2),A
  4742.     LD     HL,DATA    ; POINT TO THE DATA BUFFER.
  4743.     LD     (DATPTR),HL
  4744. RPACK2:    LD     A,(TEMP2)
  4745.     SUB    1        ; ANY DATA CHARACTERS?
  4746.     JP     M,RPACK3    ;  IF NOT GO GET THE CHECKSUM.
  4747.     LD     (TEMP2),A
  4748.     CALL   GETCHR    ; GET A CHARACTER.
  4749.     JP     QUIT        ;  HIT THE CARRIAGE RETURN, RETURN BAD.
  4750.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4751.     JP     Z,RPACK1    ;  YES, THEN GO START OVER.
  4752.     LD     HL,(DATPTR)
  4753.     LD     (HL),A        ; PUT THE CHAR INTO THE PACKET.
  4754.     INC    HL        ; POINT TO THE NEXT CHARACTER.
  4755.     LD     (DATPTR),HL
  4756.     ADD    A,C
  4757.     LD     C,A        ; ADD THE CHARACTER TO THE CHECKSUM.
  4758.     LD     A,0        ; CLEAR A
  4759.     ADC    A,B        ; GET HIGH ORDER PORTION OF CHECKSUM
  4760.     LD     B,A        ; COPY BACK TO B
  4761.     JR     RPACK2    ; GO GET ANOTHER.
  4762. RPACK3:    CALL   GETCHR    ; GET A CHARACTER.
  4763.     JP     QUIT        ;  HIT THE CARRIAGE RETURN, RETURN BAD.
  4764.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4765.     JP     Z,RPACK1    ;  YES, THEN GO START OVER.
  4766.     SUB    ' '            ; TURN THE CHAR BACK INTO A NUMBER.
  4767.     LD     (TEMP3),A
  4768. ; DETERMINE TYPE OF CHECKSUM
  4769.     LD     A,(CURCHK)    ; GET THE CURRENT CHECKSUM TYPE
  4770.     CP     '2'        ; 1, 2 OR 3 CHARACTER?
  4771.     JP     Z,RPACK4    ; IF ZERO, 2 CHARACTER
  4772.     JP     NC,RPACK5    ; GO HANDLE 3 CHARACTER
  4773.     LD     A,C        ; GET THE CHARACTER TOTAL.
  4774.     AND    0C0H    ; TURN OFF ALL BUT THE TWO HIGH ORDER BITS.
  4775. ;    RRC
  4776. ;    RRC
  4777. ;    RRC
  4778. ;    RRC
  4779. ;    RRC
  4780. ;    RRC            ; SHIFT THEM INTO THE LOW ORDER POSITION.
  4781.     RLCA               ; TWO LEFT ROTATES SAME AS SIX RIGHTS
  4782.     RLCA               ;  .  .  .
  4783.     ADD    A,C        ; ADD IT TO THE OLD BITS.
  4784.     AND    3FH        ; TURN OFF THE TWO HIGH ORDER BITS.  (MOD 64)
  4785.     LD     B,A
  4786.     LD     A,(TEMP3)    ; GET THE REAL RECEIVED CHECKSUM.
  4787.     CP     B        ; ARE THEY EQUAL?
  4788.     JP     Z,RPACK7    ; IF SO, PROCEED.
  4789. RPACK9:    CALL   UPDRTR    ; IF NOT, UPDATE THE NUMBER OF RETRIES.
  4790.     RET                ; RETURN ERROR.
  4791. ; HERE FOR THREE CHARACTER CRC-CCITT
  4792. RPACK5:    LD     HL,(DATPTR)    ; GET THE ADDRESS OF THE DATA
  4793.     LD     (HL),0        ; STORE A ZERO IN THE BUFFER TO TERMINATE PACKET
  4794.     LD     HL,PACKET+1    ; POINT AT START OF CHECKSUMMED REGION
  4795.     CALL   CRCCLC    ; CALCULATE THE CRC
  4796.     LD     C,E        ; SAVE LOW ORDER HALF FOR LATER
  4797.     LD     B,D        ; ALSO COPY HIGH ORDER
  4798.     LD     A,D        ; GET HIGH BYTE
  4799.     RLCA               ; WANT HIGH FOUR BITS
  4800.     RLCA               ;  .  .  .
  4801.     RLCA               ; AND SHIFT TWO MORE
  4802.     RLCA               ;  .  .  .
  4803.     AND    0FH        ; KEEP ONLY 4 BITS
  4804.     LD     D,A        ; BACK INTO D
  4805.     LD     A,(TEMP3)    ; GET FIRST VALUE BACK
  4806.     CP     D        ; CORRECT?
  4807.     JR     NZ,RPACK9    ; NO, PUNT
  4808.     CALL   GETCHR    ; GET A CHARACTER.
  4809.     JP     QUIT        ;  HIT THE CARRIAGE RETURN, RETURN BAD.
  4810.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4811.     JP     Z,RPACK1    ;  YES, THEN GO START OVER.
  4812.     SUB    ' '            ; REMOVE SPACE OFFSET
  4813.     LD     (TEMP3),A    ; STORE FOR LATER CHECK
  4814. ; HERE FOR A TWO CHARACTER CHECKSUM AND LAST TWO CHARACTERS OF CRC
  4815. RPACK4:    LD     A,B        ; GET HIGH ORDER PORTION
  4816.     AND    0FH        ; ONLY FOUR BITS
  4817.     RLCA               ; SHIFT UP TWO BITS
  4818.     RLCA               ;  .  .  .
  4819.     LD     B,A        ; SAVE BACK IN B
  4820.     LD     A,C        ; GET LOW ORDER
  4821.     RLCA               ; MOVE TWO HIGH BITS TO LOW BITS
  4822.     RLCA               ;  .  .  .
  4823.     AND    03H        ; SAVE ONLY LOW TWO BITS
  4824.     OR     B        ; GET OTHER 4 BITS
  4825.     LD     B,A        ; SAVE BACK IN B
  4826.     LD     A,(TEMP3)    ; GET THIS PORTION OF CHECKSUM
  4827.     CP     B        ; CHECK FIRST HALF
  4828.     JP     NZ,RPACK9    ; IF BAD, GO GIVE UP
  4829.     CALL   GETCHR    ; GET A CHARACTER.
  4830.     JP     QUIT        ;  HIT THE CARRIAGE RETURN, RETURN BAD.
  4831.     CP     SOH        ; IS THE CHAR THE START OF HEADER CHAR?
  4832.     JP     Z,RPACK1    ;  YES, THEN GO START OVER.
  4833.     SUB    ' '            ; REMOVE SPACE OFFSET
  4834.     LD     B,A        ; SAVE IN SAFE PLACE
  4835.     LD     A,C        ; GET LOW 8 BITS OF CHECKSUM
  4836.     AND    3FH        ; KEEP ONLY 6 BITS
  4837.     CP     B        ; CORRECT VALUE
  4838.     JP     NZ,RPACK9    ; BAD, GIVE UP
  4839. RPACK7:    LD     HL,(DATPTR)
  4840.     LD     (HL),0        ; PUT A NULL AT THE END OF THE DATA.
  4841.     LD     A,(TEMP1)    ; GET THE TYPE.
  4842.     JP     RSKP
  4843. INPKT:    LD     HL,RECPKT    ; POINT TO THE BEGINNING OF THE PACKET.
  4844.     LD     (PKTPTR),HL
  4845. INPKT2:    CALL   INCHR    ; GET A CHARACTER.
  4846.     JP     QUIT        ;  RETURN FAILURE.
  4847.     LD     HL,(PKTPTR)
  4848.     LD     (HL),A        ; PUT THE CHAR IN THE PACKET.
  4849.     INC    HL
  4850.     LD     (PKTPTR),HL
  4851.     LD     B,A
  4852.     LD     A,(REOL)    ; GET THE EOL CHAR.
  4853.     CP     B
  4854.     JR    NZ,INPKT2
  4855.     LD    A,(DBFLG)
  4856.     OR    A
  4857.     JR    Z,INPKT3    ;DEBUG MODE IS OFF
  4858.     LD     A,'$'    ; GET A DOLLAR SIGN.
  4859.     LD     (HL),A        ; PUT IN THE PACKET.
  4860.     INC    HL        ; POINT TO NEXT CHAR.
  4861.     LD     DE,RPPOS    ; PRINT THE PACKET
  4862.     CALL   PRTSTR
  4863.     LD     DE,RECPKT+1
  4864.     CALL   PRTSTR
  4865. INPKT3:    LD     HL,RECPKT
  4866.     LD     (PKTPTR),HL    ; SAVE THE PACKET POINTER.
  4867.     JP     RSKP    ; IF SO WE ARE DONE.
  4868. GETCHR:    LD     HL,(PKTPTR)    ; GET THE PACKET POINTER.
  4869.     LD     A,(HL)        ; GET THE CHAR.
  4870.     INC    HL
  4871.     LD     (PKTPTR),HL
  4872.     CP     CR        ; IS IT THE CARRIAGE RETURN?
  4873.     JP     NZ,RSKP    ; IF NOT RETURN RETSKP.
  4874.     RET                ; IF SO RETURN FAILURE.
  4875. ;
  4876. ; THIS ROUTINE WILL CALCULATE A CRC USING THE CCITT POLYNOMIAL FOR
  4877. ;A STRING.
  4878. ;
  4879. ; USAGE:
  4880. ;    HL/ ADDRESS OF STRING
  4881. ;    A/  LENGTH OF STRING
  4882. ;    CALL CRCCLC
  4883. ;
  4884. ; 16-BIT CRC VALUE IS RETURNED IN DE.
  4885. ;
  4886. ; REGISTERS BC AND HL ARE PRESERVED.
  4887. ;
  4888. CRCCLC:    PUSH   HL    ; SAVE HL
  4889.     PUSH   BC    ; AND BC
  4890.     LD     DE,0    ; INITIAL CRC VALUE IS 0
  4891. CRCCL0:    LD     A,(HL)    ; GET A CHARACTER
  4892.     OR     A    ; CHECK IF ZERO
  4893.     JP     Z,CRCCL1    ; IF SO, ALL DONE
  4894.     PUSH   HL    ; SAVE THE POINTER
  4895.     XOR    E    ; ADD IN WITH PREVIOUS VALUE
  4896.     LD     E,A    ; GET A COPY
  4897.     AND    0FH    ; GET LAST 4 BITS OF COMBINED VALUE
  4898.     LD     C,A    ; GET INTO C
  4899.     LD     B,0    ; AND MAKE HIGH ORDER ZERO
  4900.     LD     HL,CRCTB2; POINT AT LOW ORDER TABLE
  4901.     ADD    HL,BC    ; POINT TO CORRECT ENTRY
  4902.     ADD    HL,BC    ;  .  .  .
  4903.     PUSH   HL    ; SAVE THE ADDRESS
  4904.     LD     A,E    ; GET COMBINED VALUE BACK AGAIN
  4905.     RRCA               ; SHIFT OVER TO MAKE INDEX
  4906.     RRCA               ;  .  .  .
  4907.     RRCA               ;  .  .  .
  4908.     AND    1EH    ; KEEP ONLY 4 BITS
  4909.     LD     C,A    ; SET UP TO OFFSET TABLE
  4910.     LD     HL,CRCTAB; POINT AT HIGH ORDER TABLE
  4911.     ADD    HL,BC    ; CORRECT ENTRY
  4912.     LD     A,(HL)    ; GET LOW ORDER PORTION OF ENTRY
  4913.     XOR    D    ;XOR             US HIGH ORDER HALF
  4914.     INC    HL    ; POINT TO HIGH ORDER BYTE
  4915.     LD     D,(HL)    ; GET INTO D
  4916.     POP    HL    ; GET BACK POINTER TO OTHER TABLE ENTRY
  4917.     XOR    (HL)    ; INCLUDE WITH NEW HIGH ORDER HALF
  4918.     LD     E,A    ; COPY NEW LOW ORDER PORTION
  4919.     INC    HL    ; POINT TO OTHER PORTION
  4920.     LD     A,(HL)    ; GET THE OTHER PORTION OF THE TABLE ENTRY
  4921.     XOR    D    ; INCLUDE WITH OTHER HIGH ORDER PORTION
  4922.     LD     D,A    ; MOVE BACK INTO D
  4923.     POP    HL    ; AND H
  4924.     INC    HL    ; POINT TO NEXT CHARACTER
  4925.     JP     CRCCL0    ; GO GET NEXT CHARACTER
  4926. CRCCL1:    POP    BC    ; RESTORE B
  4927.     POP    HL    ; AND HL
  4928.     RET                ; AND RETURN, DE=CRC-CCITT
  4929. CRCTAB:    DW    00000H
  4930.     DW    01081H
  4931.     DW    02102H
  4932.     DW    03183H
  4933.     DW    04204H
  4934.     DW    05285H
  4935.     DW    06306H
  4936.     DW    07387H
  4937.     DW    08408H
  4938.     DW    09489H
  4939.     DW    0A50AH
  4940.     DW    0B58BH
  4941.     DW    0C60CH
  4942.     DW    0D68DH
  4943.     DW    0E70EH
  4944.     DW    0F78FH
  4945. CRCTB2:    DW    00000H
  4946.     DW    01189H
  4947.     DW    02312H
  4948.     DW    0329BH
  4949.     DW    04624H
  4950.     DW    057ADH
  4951.     DW    06536H
  4952.     DW    074BFH
  4953.     DW    08C48H
  4954.     DW    09DC1H
  4955.     DW    0AF5AH
  4956.     DW    0BED3H
  4957.     DW    0CA6CH
  4958.     DW    0DBE5H
  4959.     DW    0E97EH
  4960.     DW    0F8F7H
  4961.