home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / trs80model4.zip / m4set.asm < prev    next >
Assembly Source File  |  1986-10-22  |  9KB  |  416 lines

  1. ;    m4set/asm
  2. ;
  3. ;THIS IS THE SET COMMAND.
  4. ;
  5. SETCOM    LD    DE,SETTAB    ;Parse a keyword for set table
  6.     LD    A,SHLEN/3    ;Patch the number in the table
  7.     LD    (SETTAB),A    ;Store the value
  8.     LD    A,MXSLEN    ;Patch the other value
  9.     LD    (SETTAB+1),A
  10.     LD    A,CMKEY        ;Select keyword parse
  11.     CALL    COMND        ;Parse it
  12.     JP    KERMT2        ;Quit on an error
  13.     LD    HL,SETJTB    ;Get the jump table address.
  14.     LD    C,A
  15.     LD    B,0
  16.     ADD    HL,BC
  17.     JP    (HL)
  18. ;SET COMMAND JUMP TABLE
  19. SETJTB    JP    ESCAPE        ;SET ESC
  20.     JP    LOCAL        ;SET LOCAL
  21.     JP    SETEIGHT    ;SET EIGHT-BIT-QUOTING
  22.     JP    SETFILE        ;SET FILE
  23.     JP    SETBLK        ;SET BLOCK-CHECK-TYPE
  24.     JP    SETEMUL        ;SET emulation
  25.     JP    PRINTR        ;set printer
  26.     JP    SETBUG        ;SET DEBUG
  27.     JP    SETDSK        ;SET DEFAULT DISK
  28.     JP    SETBEL        ;SET BELL ON OR OFF
  29.     JP    SETSND        ;SET SEND PARAMETERS
  30.     JP    SETREC        ;SET RECEIVE PARAMTERS
  31.     JP    SETKEY        ;SET A KEY FOR TRANSLATION
  32.     JP    SETFLO        ;SET FLOW CONTROL
  33.     JP    SETINP        ;SET INPUT PARAMETERS
  34.     JP    SETOTP        ;SET OUTPUT PARAMETERS
  35.     JP    SETTAK        ;Set take display
  36. SHLEN    EQU    $-SETJTB    ;OFFSET FOR SHOW ALL
  37. ;
  38. ;    Set file dispostion
  39. ;
  40. SETDISP    LD    DE,DISPTAB    ;Get the parse table
  41.     LD    A,CMKEY
  42.     CALL    COMND        ;Parse a keyword
  43.     JP    KERMT2
  44.     LD    (TEMP1),A    ;Save it
  45.     LD    A,CMCFM        ;Get a confirm
  46.     CALL    COMND
  47.     JP    KERMT3
  48.     LD    A,(TEMP1)
  49.     LD    (DISCARD),A    ;Set the value
  50.     JP    KERMIT
  51. ;
  52. ;    Set take file display
  53. ;
  54. SETTAK    SETFLG    TAKLOG
  55. ;
  56. ;    Set input options
  57. ;
  58. SETINP    LD    A,CMKEY        ;GET A KEYWORD
  59.     LD    DE,INPTAB    ;WHERE ARE THE KEYWORDS AT?
  60.     CALL    COMND
  61.     JP    KERMT2        ;QUIT ON AN ERROR
  62.     LD    C,A
  63.     IFANOT    0,STINP1    ;Check for first time
  64.     SETFLG    CSEFLG
  65. STINP1    CP    3
  66.     JP    NZ,KERMT3
  67.     SETFLG    INDSP
  68. ;
  69. ;    Set output option
  70. ;
  71. SETOTP    LD    A,CMKEY
  72.     LD    DE,OUTTAB
  73.     CALL    COMND
  74.     JP    KERMT2
  75.     LD    C,A
  76.     IFANOT    0,STOTP1
  77.     SETFLG    ECHFLG
  78. STOTP1    CP    3
  79.     JP    NZ,KERMT3
  80.     SETFLG    OTDSP
  81. ;
  82. ;    Set flow control option
  83. ;
  84. SETFLO    LD    DE,FLOTAB
  85.     LD    A,CMKEY
  86.     CALL    COMND
  87.     JP    KERMT2
  88.     LD    (TEMP1),A
  89.     LD    A,CMCFM
  90.     CALL    COMND
  91.     JP    KERMT3
  92.     LD    A,(TEMP1)
  93.     LD    (FLOFLG),A    ;STORE THE NEW STATUS
  94.     JP    KERMIT
  95. ;
  96. ;    Set bell on/off
  97. ;
  98. SETBEL    SETFLG    BELFLG        ;Set the bell ON or OFF
  99. ;
  100. ;    Set block check type
  101. ;
  102. SETBLK    LD    DE,BLKTAB    ;GET THE BLOCK-CHECK TABLE
  103.     LD    A,CMKEY        ;PARSE A KEYWORD
  104.     CALL    COMND        ;GO GET IT
  105.     JP    KERMT2        ;COULDN'T, COMPLAIN
  106.     LD    (TEMP1),A    ;SAVE THE PARSED ITEM
  107.     LD    C,A
  108.     LD    A,CMCFM        ;WANT TO END THE COMMAND
  109.     CALL    COMND        ;GO DO IT
  110.     JP    KERMT3        ;GIVE UP
  111.     LD    A,(TEMP1)    ;GET THE VALUE BACK
  112.     LD    (CHKTYP),A    ;SAVE DESIRED CHECKSUM TYPE
  113.     JP    KERMIT        ;GO GET ANOTHER COMMAND
  114. ;
  115. ;    Set send options
  116. ;
  117. SETSND    XOR    A        ;SET SEND/RECEIVE TO SEND
  118.     JR    SETSOR
  119. ;
  120. ;    Set receive options
  121. ;
  122. SETREC    LD    A,1        ;SET SEND/RECEIVE TO RECEIVE
  123. ;
  124. ;    Common code that uses the contents of A at this point to
  125. ;    control where the set value is stored.  All of the SEND/RECV
  126. ;    options are set up in memory together, so that to give a
  127. ;    particular send option a value, it is stored directly.  The
  128. ;    corresponding recv option is one byte in memory beyond the
  129. ;    send option, so the flag (What is in A) is checked, and the
  130. ;    destination address is incremented if A is non zero
  131. ;
  132. ;    Memory looks like this
  133. ;
  134. ;    SEOL    DB    13
  135. ;    REOL    DB    13
  136. ;    SSOH    DB    1
  137. ;    RSOH    DB    1
  138. ;
  139. SETSOR    LD    (SORFLG),A    ;STORE THE FLAG
  140.     LD    DE,STSNTB    ;GET THE PARSE TABLE
  141.     LD    A,CMKEY
  142.     CALL    COMND        ;PARSE SOMETHING
  143.     JP    KERMT2        ;ABORT
  144.     LD    HL,STSJTB    ;GET THE JUMP TABLE
  145.     LD    C,A
  146.     LD    B,0
  147.     ADD    HL,BC
  148.     JP    (HL)
  149. STSJTB    JP    STPDCH        ;SET PAD CHARACTER
  150.     JP    STPAD        ;SET PADDING ON/OFF
  151.     JP    SSOFP        ;SET START OF PACKET
  152.     JP    STIMEO        ;SET TIME OUT
  153.     JP    SSEOL        ;SET END OF LINE
  154.     JP    SSQUOT        ;SET QUOTE CHARACTER
  155.     JP    SSTURN
  156. ;
  157. ;    Set the padding.  Note that it is only done on output, so
  158. ;    SET RECEIVE PADDING doesn't make sense.
  159. ;
  160. STPAD    LD    A,CMNUM        ;GET A LENGTH COUNT
  161.     CALL    COMND        ;PARSE A VALUE
  162.     JP    KERMT3        ;NOT CONFIRMED ON AN ERROR
  163.     OR    A        ;CHECK FOR NO NUMBER
  164.     JP    Z,KERMT2    ;SAY AMBIGUOUS
  165.     LD    A,D        ;CHECK FOR OVERFLOW
  166.     IFZ    STPD10        ;Go if none
  167.     LD    DE,OUTRNG
  168.     CALL    PRTSTR
  169.     JP    KERMIT
  170. STPD10    LD    A,E
  171.     LD    (SPAD),A    ;SET THE STATUS
  172.     JP    KERMIT        ;GET A NEW COMMAND
  173. ;
  174. ;    Set the padding character.  Also applys to SEND only!
  175. ;
  176. STPDCH    LD    HL,SPADCH    ;GET THE ADDRESS TO STORE AT
  177. SOR010    LD    (SORLOC),HL    ;SAVE IT FOR LATER
  178.     LD    A,CMNUM        ;GET A DECIMAL NUMBER
  179.     CALL    COMND
  180.     JP    KERMT3
  181.     OR    A        ;CHECK FOR NO NUMBER
  182.     JP    Z,KERMT2    ;SAY AMBIGUOUS
  183.     LD    A,D        ;CHECK FOR TOO BIG
  184.     IFZ    PDCH2        ;Go if ok
  185.     LD    DE,OUTRNG    ;VALUE OUT OF RANGE ERROR
  186.     CALL    PRTSTR        ;PRINT IT
  187.     JP    KERMIT
  188. PDCH2    LD    HL,(SORLOC)    ;GET WHERE TO PUT IT
  189.     LD    A,(SORFLG)    ;GET THE MODE, SEND/RECEIVE
  190.     OR    A        ;CHECK FOR SET OR RESET FLAG
  191.     CALL    Z,SSVAL        ;IF ZERO THEN SET RECEIVE VALUE
  192.     CALL    NZ,SRVAL    ;ELSE SET THE SEND VALUE
  193.     JP    KERMIT        ;GET A NEW COMMAND
  194. ;
  195. ;    Set START-OF-PACKET (Start Of Header, SOH)
  196. ;
  197. SSOFP    LD    HL,SSOHCH
  198.     JP    SOR010
  199. ;
  200. ;    Set turn around character
  201. ;
  202. SSTURN    LD    HL,STURN
  203.     JP    SOR010
  204. ;
  205. ;    Set time-out value
  206. ;
  207. STIMEO    LD    HL,STIME
  208.     JP    SOR010
  209. ;
  210. ;    Set End Of Line (or End Of Packet) character
  211. ;
  212. SSEOL    LD    HL,SEOL
  213.     JP    SOR010
  214. ;
  215. ;    Set eighth bit quote character
  216. ;
  217. SSQUOT    LD    HL,SQUOTE
  218.     JP    SOR010
  219. ;
  220. ;    Convert ASCII Decimal string to binary in BC, HL is the
  221. ;    source buffer.
  222. ;
  223. DECHEX    JP    XDECHEX
  224. ;
  225. ;    Store E at HL+1
  226. ;
  227. SSVAL    INC    HL
  228. ;
  229. ;    Store E at HL
  230. ;
  231. SRVAL    LD    (HL),E
  232.     RET
  233. ;
  234. ;    Convert contents of A to ASCII string, and display
  235. ;
  236. ANOUT    PUSH    HL
  237.     LD    L,A
  238.     LD    H,0
  239.     CALL    NOUT
  240.     POP    HL
  241.     RET
  242. ;
  243. ;    Set the escape character
  244. ;
  245. ESCAPE    LD    A,CMCFM
  246.     CALL    COMND        ;GET A CONFIRM.
  247.     JP    KERMT3        ;DIDN'T GET A CONFIRM.
  248.     LD    DE,ESCMES    ;GET THE ADDRESS OF THE ESCAPE MESSAGE.
  249.     CALL    PRTSTR
  250.     CALL    XKEY
  251.     LD    (ESCCHR),A    ;STORE THE NEW ESCAPE CHARACTER.
  252.     CALL    ESCPR        ;Print the Verbpse description of it
  253.     JP    KERMIT
  254. ;
  255. ;    Set local echo status
  256. ;
  257. LOCAL    SETFLG    ECOFLG
  258. ;
  259. ;    Set the emulation type
  260. ;
  261. SETEMUL    LD    DE,EMLTAB
  262.     LD    A,CMKEY
  263.     CALL    COMND
  264.     JP    KERMT2
  265.     LD    (TEMP1),A
  266.     LD    A,CMCFM
  267.     CALL    COMND
  268.     JP    KERMT3
  269.     LD    A,(TEMP1)
  270.     LD    (EMULFLAG),A
  271.     JP    KERMIT
  272. ;
  273. ;    Set file-warning status
  274. ;
  275. SETWARN    SETFLG    FLWFLG        ;Set the file-warning flag
  276. ;
  277. ;    SET FILE parse and jump
  278. ;
  279. SETFILE    LD    DE,FILETAB    ;Get the table of choices
  280.     LD    A,CMKEY        ;Select keyword parse
  281.     CALL    COMND        ;Parse the input
  282.     JP    KERMT2        ;Abort on an error
  283.     LD    C,A
  284.     LD    B,0
  285.     LD    HL,FILJTAB    ;Get the jump table
  286.     ADD    HL,BC
  287.     JP    (HL)        ;Go to the routine
  288. ;
  289. ;    SET FILE jump table
  290. ;
  291. FILJTAB    JP    SETDISP        ;SET FILE DISPOSITION
  292.     JP    SETTYPE        ;SET FILE TYPE
  293.     JP    SETWARN        ;SET FILE WARNING
  294. ;
  295. ;    SET FILE TYPE
  296. ;
  297. SETTYPE    LD    DE,TYPETAB    ;Get the table
  298.     LD    A,CMKEY
  299.     CALL    COMND
  300.     JP    KERMT2        ;Abort on an error
  301.     LD    (TEMP1),A    ;Save the value
  302.     LD    A,CMCFM        ;Get a confirm
  303.     CALL    COMND
  304.     JP    KERMT3        ;Say not confirmed
  305.     LD    A,(TEMP1)    ;Get the value back
  306.     LD    (FILTYPE),A    ;Set the type chosen
  307.     JP    KERMIT        ;Get another command
  308. ;
  309. ;    Set Printer command
  310. ;
  311. PRINTR    SETFLG    PRTFLG
  312. ;
  313. ;    Set status of DEBUG
  314. ;
  315. SETBUG    SETFLG    DBFLG
  316. ;
  317. ;    SET EIGHTH-BIT quoting status
  318. ;
  319. SETEIGHT    CALL    ONOFF
  320.     LD    (EBQFLG),A
  321.     JP    KERMIT
  322. ;
  323. ;    Get an ON/OFF value in A, with a confirm
  324. ;
  325. ONOFF    LD    DE,ONTAB
  326. ONOFFA    LD    A,CMKEY
  327.     CALL    COMND
  328.     JP    KERMT2
  329.     LD    (TEMP1),A
  330.     LD    A,CMCFM
  331.     CALL    COMND
  332.     JP    KERMT3
  333.     LD    A,(TEMP1)
  334.     RET
  335. ;
  336. ;    Set a KEY mapping
  337. ;
  338. SETKEY    LD    A,CMNUM        ;Get the key number
  339.     CALL    COMND
  340.     JP    KERMT2        ;Abort on error
  341.     IFZ    SETKEY_5    ;Abort if no number
  342.     LD    A,D        ;Get the MSB must be zero
  343.     IFNZ    SETKEY_4
  344.     LD    A,E        ;Get the LSB
  345.     LD    (KEYNUM),A    ;This is the key number
  346.     LD    A,CMTXT        ;Get the text definition
  347.     LD    DE,RMTDATA    ;Where to put it
  348.     LD    (SOUPTR),DE    ;Set the starting address
  349.     CALL    COMND        ;Call the parser
  350.     JP    KERMT3        ;Say not confirmed
  351.     LD    HL,DATA
  352.     LD    (KEYPTR),HL
  353.     PUSH    AF
  354.     XOR    A
  355.     LD    (KEYLEN),A
  356.     POP    AF
  357.     IFZ    SETKEY_3
  358. SETKEY_1    CALL    GETFCH    ;GET A CHARACTER
  359.     JR    NZ,SETKEY_3
  360.     CALL    GTREAL        ;GET THE ACTUAL IF IT IS SPECIAL
  361.     JP    NZ,KERMIT    ;Abort on bad string
  362.     LD    E,A        ;PUT IT IN E FOR OUTCHR
  363.     LD    A,(DLYFLG)    ;WAS IT A DELAY
  364.     IFZ    SETKEY_2
  365.     XOR    A
  366.     LD    (DLYFLG),A    ;RESET THE FLAG
  367.     JR    SETKEY_1    ;GET A NEW CHARACTER
  368. SETKEY_2    LD    A,E    ;Get the character
  369.     CALL    PUTDKEY        ;Put it into the buffer
  370.     JR    SETKEY_1
  371. SETKEY_3    LD    HL,DATA
  372.     LD    A,(KEYLEN)
  373.     LD    B,A
  374.     LD    A,(KEYNUM)
  375.     CALL    DEFKEY
  376.     JP    KERMIT
  377. SETKEY_4    LD    DE,OUTRNG
  378.     CALL    PRTSTR
  379.     JP    KERMIT
  380. SETKEY_5    LD    DE,KEYHELP
  381.     CALL    PRTSTR
  382. SETKEY_6    CALL    CONIN
  383.     IFZ    SETKEY_6
  384.     LD    (KEYNUM),A
  385.     CALL    VERPRT
  386.     LD    DE,STRHELP
  387.     CALL    PRTSTR
  388.     LD    HL,DATA
  389.     LD    B,0
  390. SETKEY_7    CALL    CONIN
  391.     IFZ    SETKEY_7
  392.     IFA    128,SETKEY_10
  393.     LD    (HL),A
  394.     CALL    VERPRT
  395.     INC    B
  396.     LD    A,255
  397.     IFA    B,SETKEY_10
  398.     INC    HL
  399.     JR    SETKEY_7
  400. SETKEY_10    LD    A,B
  401.     LD    (KEYLEN),A
  402.     JR    SETKEY_3
  403. ;
  404. ;    Put the decoded value into the buffer pointer to by KEYPTR
  405. ;
  406. PUTDKEY    PUSH    HL
  407.     LD    HL,(KEYPTR)
  408.     LD    (HL),A
  409.     INC    HL
  410.     LD    (KEYPTR),HL
  411.     LD    HL,KEYLEN
  412.     INC    (HL)
  413.     POP    HL
  414.     RET
  415. ;end of file
  416.