home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / archives / vmskermit32.zip / vmsmsg.mar < prev    next >
Text File  |  1990-06-01  |  494KB  |  10,785 lines

  1. ;   0001  0    %TITLE 'KERMSG - Kermit message processing'
  2. ;   0002  0    MODULE KERMSG (IDENT = '3.3.111'
  3. ; L 0003  0    %IF %BLISS(BLISS32)
  4. ;   0004  0    %THEN
  5. ;   0005  0        ,ADDRESSING_MODE(EXTERNAL = GENERAL, NONEXTERNAL = GENERAL)
  6. ;   0006  0    %FI
  7. ;   0007  0            ) =
  8. ;   0008  1    BEGIN
  9. ;   0009  1    
  10. ;   0010  1    SWITCHES LANGUAGE (COMMON);
  11. ;   0011  1    
  12. ;   0012  1    !<BLF/WIDTH:100>
  13. ;   0013  1    
  14. ;   0014  1    !++
  15. ;   0015  1    ! FACILITY:
  16. ;   0016  1    !   Kermit-10, VMS Kermit, Pro/Kermit
  17. ;   0017  1    !
  18. ;   0018  1    ! ABSTRACT:
  19. ;   0019  1    !    KERMSG is the message processing routines for Kermit-10, VMS Kermit,
  20. ;   0020  1    !    and PRO/Kermit.
  21. ;   0021  1    !    This module is written in common BLISS, so that it can be
  22. ;   0022  1    !    transported for the DECsystem-10 and VAX/VMS systems.
  23. ;   0023  1    !
  24. ;   0024  1    ! ENVIRONMENT:
  25. ;   0025  1    !   User mode
  26. ;   0026  1    !
  27. ;   0027  1    ! AUTHOR: Robert C. McQueen, CREATION DATE: 24-January-1983
  28. ;   0028  1    !
  29. ;   0029  1    ! MODIFIED BY:
  30. ;   0030  1    !
  31. ;   0031  1    !--
  32. ;   0032  1    
  33. ;   0033  1     %SBTTL 'Table of Contents'
  34. ;   0034  1    !+
  35. ;   0035  1    !.pag.lit
  36. ;   0036  1    !        Table of Contents for KERMSG
  37. ;   0037  1    !
  38. ;   0038  1    !
  39. ;   0039  1    !               Section                  Page
  40. ;   0040  1    !   1. Revision History . . . . . . . . . . . . . . . . . . .    3
  41. ;   0041  1    !   2. Interface requirements . . . . . . . . . . . . . . . .    4
  42. ;   0042  1    !   3. Declarations
  43. ;   0043  1    !        3.1.   Forward definitions . . . . . . . . . . . . .    5
  44. ;   0044  1    !   4. Require files. . . . . . . . . . . . . . . . . . . . .   28
  45. ;   0045  1    !   5. Macro definitions. . . . . . . . . . . . . . . . . . .   29
  46. ;   0046  1    !   6. KERMIT Protocol Definitions. . . . . . . . . . . . . .   30
  47. ;   0047  1    !        6.1.   Packet offsets. . . . . . . . . . . . . . . .   31
  48. ;   0048  1    !        6.2.   Message dependent field . . . . . . . . . . .   32
  49. ;   0049  1    !        6.3.   SEND initiate packet. . . . . . . . . . . . .   33
  50. ;   0050  1    !   7. KERMIT Protocol States . . . . . . . . . . . . . . . .   34
  51. ;   0051  1    !   8. Internal constants . . . . . . . . . . . . . . . . . .   35
  52. ;   0052  1    !   9. Storage - External . . . . . . . . . . . . . . . . . .   36
  53. ;   0053  1    !  10. Storage - Local. . . . . . . . . . . . . . . . . . . .   37
  54. ;   0054  1    !  11. External references. . . . . . . . . . . . . . . . . .   38
  55. ;   0055  1    !  12. MSG_INIT . . . . . . . . . . . . . . . . . . . . . . .   39
  56. ;   0056  1    !  13. SND_ERROR. . . . . . . . . . . . . . . . . . . . . . .   40
  57. ;   0057  1    !  14. SERVER - Server mode . . . . . . . . . . . . . . . . .   41
  58. ;   0058  1    !  15. SEND_SWITCH. . . . . . . . . . . . . . . . . . . . . .   42
  59. ;   0059  1    !  16. REC_SWITCH . . . . . . . . . . . . . . . . . . . . . .   43
  60. ;   0060  1    !  17. Server
  61. ;   0061  1    !       17.1.   DO_GENERIC - Execute a generic command. . . .   44
  62. ;   0062  1    !  18. DO_TRANSACTION - Main loop for FSM . . . . . . . . . .   45
  63. ;   0063  1    !  19. REC_SERVER_IDLE - Idle server state. . . . . . . . . .   46
  64. ;   0064  1    !  20. SEND_SERVER_INIT . . . . . . . . . . . . . . . . . . .   47
  65. ;   0065  1    !  21. SEND_DATA. . . . . . . . . . . . . . . . . . . . . . .   48
  66. ;   0066  1    !  22. SEND_FILE. . . . . . . . . . . . . . . . . . . . . . .   49
  67. ;   0067  1    !  23. SEND_EOF . . . . . . . . . . . . . . . . . . . . . . .   50
  68. ;   0068  1    !  24. SEND_INIT. . . . . . . . . . . . . . . . . . . . . . .   51
  69. ;   0069  1    !  25. SEND_OPEN_FILE - Open file for sending . . . . . . . .   52
  70. ;   0070  1    !  26. SEND_GENCMD. . . . . . . . . . . . . . . . . . . . . .   53
  71. ;   0071  1    !  27. SEND_BREAK . . . . . . . . . . . . . . . . . . . . . .   54
  72. ;   0072  1    !  28. REC_INIT . . . . . . . . . . . . . . . . . . . . . . .   55
  73. ;   0073  1    !  29. REC_FILE . . . . . . . . . . . . . . . . . . . . . . .   56
  74. ;   0074  1    !  30. REC_DATA . . . . . . . . . . . . . . . . . . . . . . .   57
  75. ;   0075  1    !  31. SERVER - Generic commands. . . . . . . . . . . . . . .   58
  76. ;   0076  1    !  32. HOST_COMMAND - perform a host command. . . . . . . . .   59
  77. ;   0077  1    !  33. CALL_SY_RTN - handle operating system dependent functions  60
  78. ;   0078  1    !  34. Message processing
  79. ;   0079  1    !       34.1.   PRS_SEND_INIT - Parse send init params. . . .   61
  80. ;   0080  1    !  35. SET_SEND_INIT. . . . . . . . . . . . . . . . . . . . .   62
  81. ;   0081  1    !  36. SEND_PACKET. . . . . . . . . . . . . . . . . . . . . .   63
  82. ;   0082  1    !  37. REC_MESSAGE - Receive a message. . . . . . . . . . . .   64
  83. ;   0083  1    !  38. REC_PACKET . . . . . . . . . . . . . . . . . . . . . .   65
  84. ;   0084  1    !  39. CALC_BLOCK_CHECK . . . . . . . . . . . . . . . . . . .   66
  85. ;   0085  1    !  40. NORMALIZE_FILE - Put file name into normal form. . . .   67
  86. ;   0086  1    !  41. Buffer filling
  87. ;   0087  1    !       41.1.   Main routine. . . . . . . . . . . . . . . . .   68
  88. ;   0088  1    !  42. BFR_EMPTY. . . . . . . . . . . . . . . . . . . . . . .   69
  89. ;   0089  1    !  43. Buffer filling and emptying subroutines. . . . . . . .   70
  90. ;   0090  1    !  44. Add parity routine . . . . . . . . . . . . . . . . . .   71
  91. ;   0091  1    !  45. Parity routine . . . . . . . . . . . . . . . . . . . .   72
  92. ;   0092  1    !  46. Per transfer
  93. ;   0093  1    !       46.1.   Initialization. . . . . . . . . . . . . . . .   73
  94. ;   0094  1    !  47. Statistics
  95. ;   0095  1    !       47.1.   Finish message transfer . . . . . . . . . . .   74
  96. ;   0096  1    !  48. Status type out
  97. ;   0097  1    !       48.1.   STS_OUTPUT. . . . . . . . . . . . . . . . . .   75
  98. ;   0098  1    !  49. TYPE_CHAR - Type out a character . . . . . . . . . . .   76
  99. ;   0099  1    !  50. Debugging
  100. ;   0100  1    !       50.1.   DBG_SEND. . . . . . . . . . . . . . . . . . .   77
  101. ;   0101  1    !       50.2.   DBG_RECEIVE . . . . . . . . . . . . . . . . .   78
  102. ;   0102  1    !       50.3.   DBG_MESSAGE . . . . . . . . . . . . . . . . .   79
  103. ;   0103  1    !  51. End of KERMSG. . . . . . . . . . . . . . . . . . . . .   80
  104. ;   0104  1    !.end lit.pag
  105. ;   0105  1    !-
  106. ;   0106  1     %SBTTL 'Revision History'
  107. ;   0107  1    
  108. ;   0108  1    !++
  109. ;   0109  1    ! Start of version 1.
  110. ;   0110  1    !
  111. ;   0111  1    ! 1.0.000    By: Robert C. McQueen        On: 4-Jan-1983
  112. ;   0112  1    !        Create this program.
  113. ;   0113  1    !
  114. ;   0114  1    ! 1.0.001    By: Robert C. McQueen        On: 30-Apr-1983
  115. ;   0115  1    !        Change PAR_xxx to be PR_xxx, so that they can be used for
  116. ;   0116  1    !        KERMIT-10.
  117. ;   0117  1    !
  118. ;   0118  1    ! 1.0.002    By: Robert C. McQueen        On: 1-May-1983
  119. ;   0119  1    !        Add DO_GENERIC routine to cause a generic Kermit command to
  120. ;   0120  1    !        be executed on the remote Kermit.
  121. ;   0121  1    !
  122. ;   0122  1    ! 1.0.003    By: Robert C. McQueen        On: 3-May-1983
  123. ;   0123  1    !        Fix message number incrementing.
  124. ;   0124  1    !
  125. ;   0125  1    ! 1.0.004    By: Robert C. McQueen        On: 4-May-1983
  126. ;   0126  1    !        Allow RECEIVE file-specification to work correctly.
  127. ;   0127  1    !
  128. ;   0128  1    ! 1.0.005    By: Robert C. McQueen        On: 6-May-1983
  129. ;   0129  1    !        Add more stats support.
  130. ;   0130  1    !
  131. ;   0131  1    ! 1.0.006    By: Nick Bush            On: 13-June-1983
  132. ;   0132  1    !        Fix SEND_PACKET to copy correct characters when fixing
  133. ;   0133  1    !        parity bits.
  134. ;   0134  1    !
  135. ;   0135  1    ! 1.1.007    By: Nick Bush            On: 15-July-1983
  136. ;   0136  1    !        Correct SEND-INIT message handling to do the right things
  137. ;   0137  1    !        with the protocol version 3 items.
  138. ;   0138  1    !
  139. ;   0139  1    ! 1.1.010    By: Robert C. McQueen        On: 20-July-1983
  140. ;   0140  1    !        Make PARITY a global routine, so that it can be called by
  141. ;   0141  1    !        CONNECT processing.  Change the name from PARITY to GEN_PARITY
  142. ;   0142  1    !        add a new routine to generate the parity, since it is not
  143. ;   0143  1    !        part of the checksum.
  144. ;   0144  1    !
  145. ;   0145  1    ! 1.1.011    By: Robert C. McQueen        On: 28-July-1983
  146. ;   0146  1    !        KER_TIMEOUT errors in the SERVER loop would cause
  147. ;   0147  1    !        KER_UNISRV error messages to be returned to the remote.
  148. ;   0148  1    !        Check for receive failures and send NAKs instead.
  149. ;   0149  1    !
  150. ;   0150  1    ! 1.2.012    By: Robert C. McQueen        On: 23-August-1983
  151. ;   0151  1    !        Don't abort if we get a message that is just an end of line
  152. ;   0152  1    !        character.  It could be noise on the line.
  153. ;   0153  1    !
  154. ;   0154  1    ! 1.2.013    By: Nick Bush            On: 7-September-1983
  155. ;   0155  1    !        Fix several problems with the SEND_xxx parameters
  156. ;   0156  1    !
  157. ;   0157  1    ! 1.2.014    By: Robert C. McQueen        On: 15-September-1983
  158. ;   0158  1    !        Add routine calls to XFR_STATUS to tell the user on the
  159. ;   0159  1    !        number of packets have changed.
  160. ;   0160  1    !
  161. ;   0161  1    ! 1.2.015    By: Nick Bush            On: 5-October-1983
  162. ;   0162  1    !        Add 2 and 3 character checksum (block check) support.
  163. ;   0163  1    !        Add support for data within acknowledgement packets
  164. ;   0164  1    !        and withing end-of-file packets to allow for file
  165. ;   0165  1    !        transmission to be aborted.  Also add support for
  166. ;   0166  1    !        "I" packet to allow server parameters to be initialized.
  167. ;   0167  1    !
  168. ;   0168  1    ! 1.2.016    By: Nick Bush            On: 19-October-1983
  169. ;   0169  1    !        Add repeat character support.
  170. ;   0170  1    !
  171. ;   0171  1    ! 2.0.017    Release TOPS-10 Kermit-10 version 2.0
  172. ;   0172  1    !        Release VAX/VMS Kermit-32 version 2.0
  173. ;   0173  1    !
  174. ;   0174  1    ! 2.0.018    By: Robert C. McQueen        On: 16-November-1983
  175. ;   0175  1    !        Fix four checks on the message number that were not
  176. ;   0176  1    !        mod 64.
  177. ;   0177  1    !
  178. ;   0178  1    ! 2.0.019    By: Robert C. McQueen        On: 16-November-1983
  179. ;   0179  1    !        Remove the CLEAR routine.  It is not really needed.
  180. ;   0180  1    !
  181. ;   0181  1    ! 2.0.020    By: Nick Bush            On: 12-Dec-1983
  182. ;   0182  1    !        Fix SEND_DATA and BFR_FILL to handle empty files and
  183. ;   0183  1    !        files which happen to end just on a message boundary.
  184. ;   0184  1    !        This would sometimes produce extra nulls.
  185. ;   0185  1    !
  186. ;   0186  1    ! 2.0.021    By: Nick Bush            On: 15-Dec-1983
  187. ;   0187  1    !        Fix some problems with REC_MESSAGE which would cause
  188. ;   0188  1    !        aborts when a message timed out.
  189. ;   0189  1    !
  190. ;   0190  1    ! 2.0.022    By: Robert C. McQueen        19-Dec-1983
  191. ;   0191  1    !        Make STATUS a local for most routines and remove FILE_DUMP
  192. ;   0192  1    !        as it is nolonger needed.
  193. ;   0193  1    !
  194. ;   0194  1    ! 2.0.023    By: Nick Bush            On: 3-Jan-1984
  195. ;   0195  1    !        Change FIL_NORMAL_FORM to contain not just a flag, but
  196. ;   0196  1    !        a file name type instead.
  197. ;   0197  1    !
  198. ;   0198  1    ! 2.0.024    By: Nick Bush            On: 11-Jan-1984
  199. ;   0199  1    !        Fix REC_MESSAGE to send NAK for packet we expect, not
  200. ;   0200  1    !        previous packet.
  201. ;   0201  1    !
  202. ;   0202  1    ! 2.0.025    By: Nick Bush            On: 23-Jan-1984
  203. ;   0203  1    !        Re-enable server-init packet and complete code so that
  204. ;   0204  1    !        parameters set by it will remain set.
  205. ;   0205  1    !        Fix file name copying to use BFR_FILL or BFR_EMPTY
  206. ;   0206  1    !        so that all quoting/compression is done properly.
  207. ;   0207  1    !
  208. ;   0208  1    ! 2.0.026    By: Nick Bush            On: 15-Feb-1984
  209. ;   0209  1    !        Add code for generic command support (both directions).
  210. ;   0210  1    !        There is now only one state dispatch loop, entered
  211. ;   0211  1    !        in various states for different functions.
  212. ;   0212  1    !
  213. ;   0213  1    ! 2.0.027    By: Robert C. McQueen        On: 16-Feb-1984
  214. ;   0214  1    !        At some point SEND_TIMEOUT became global, but it was not moved
  215. ;   0215  1    !        to KERGLB.  This edit moves it to KERGLB.BLI.
  216. ;   0216  1    !
  217. ;   0217  1    ! 2.0.030    By: Nick Bush            On: 2-March-1984
  218. ;   0218  1    !        Fix BFR_FILL to handle case of last repeated character
  219. ;   0219  1    !        not fitting within a packet.  It was forgetting to
  220. ;   0220  1    !        send the characters at all.
  221. ;   0221  1    !
  222. ;   0222  1    ! 2.0.031    By: Nick Bush            On: 6-March-1984
  223. ;   0223  1    !        Make sure FILE_OPEN_FLAG is set properly when advancing
  224. ;   0224  1    !        to next file of a wild-card send.  The file was not
  225. ;   0225  1    !        being set true, leading to problems after a couple files.
  226. ;   0226  1    !
  227. ;   0227  1    ! 2.0.032    By: Nick Bush            On: 9-March-1984
  228. ;   0228  1    !        Fix UNPACK_DATA in SERVER_GENERIC to properly store
  229. ;   0229  1    !        new string pointer.
  230. ;   0230  1    !
  231. ;   0231  1    ! 2.0.033    By: Robert C. McQueen        On: 12-March-1984
  232. ;   0232  1    !        If NEXT_FILE fails with anything other than a NOMORFILES
  233. ;   0233  1    !        it should change state to STATE_A not STATE_SB.  This
  234. ;   0234  1    !        fixes a problem caused by Pro/Kermit and KERFIL (VMS).
  235. ;   0235  1    !
  236. ;   0236  1    ! 2.0.034    By: Nick Bush            On: 15-March-1984
  237. ;   0237  1    !        Put file spec into X packet as well as F packet. This
  238. ;   0238  1    !        makes wild card TYPE's work nicer.
  239. ;   0239  1    !
  240. ;   0240  1    ! 2.0.035    By: Nick Bush            On: 20-March-1984
  241. ;   0241  1    !        Fix send/receive quoting to conform to the way the
  242. ;   0242  1    !        protocol manual says it should be done, rather
  243. ;   0243  1    !        than the way we (and Kermit-20) have always done it.
  244. ;   0244  1    !
  245. ;   0245  1    ! 2.0.036    By: Nick Bush            On: 28-March-1984
  246. ;   0246  1    !        Make SERVER_GENERIC more defensive against badly
  247. ;   0247  1    !        constructed packets.  If an argument has negative
  248. ;   0248  1    !        length, punt the request.  Also put angle brackets
  249. ;   0249  1    !        around data from "X" packet header, so file names will
  250. ;   0250  1    !        stick out.
  251. ;   0251  1    !
  252. ;   0252  1    ! 3.0.037    Start of version 3.
  253. ;   0253  1    !
  254. ;   0254  1    ! 3.0.040    By: Nick Bush            On: 2-April-1984
  255. ;   0255  1    !        Add separate server timeout.  This allows stopping the
  256. ;   0256  1    !        server NAK's without affecting the normal packet timeout.
  257. ;   0257  1    !
  258. ;   0258  1    ! 3.0.041    By: Nick Bush            On: 12-April-1984
  259. ;   0259  1    !        Fix block check calculation to account for the fact
  260. ;   0260  1    !        that the parity bits are put onto the message when
  261. ;   0261  1    !        it is sent (in place), so that if a retransmission is
  262. ;   0262  1    !        done without refilling the buffer (as is normal with
  263. ;   0263  1    !        data messages), the parity bits will be there.  Make
  264. ;   0264  1    !        sure we strip them out for block check calculation.
  265. ;   0265  1    !
  266. ;   0266  1    ! 3.1.042    By: Nick Bush            On: 27-August-1984
  267. ;   0267  1    !        If we get too many retries when sending a server init (I)
  268. ;   0268  1    !        packet, don't abort.  Instead, just try sending the server
  269. ;   0269  1    !        command, since the Kermit on the other end might be coded
  270. ;   0270  1    !        wrong and is responding to packets it doesn't understand
  271. ;   0271  1    !        with a NAK.
  272. ;   0272  1    !
  273. ;   0273  1    ! 3.1.043    By: Nick Bush            On: 27-August-1984
  274. ;   0274  1    !        Don't abort receives on zero length messages.  Just treat
  275. ;   0275  1    !        it like a timeout.
  276. ;   0276  1    !
  277. ;   0277  1    ! 3.1.044    By: Nick Bush            On: 10-April-1985
  278. ;   0278  1    !        Remove IBM mode.  It will be instituted by IBM_CHAR being
  279. ;   0279  1    !        set >= 0 if handshaking is needed.
  280. ;   0280  1    !
  281. ;   0281  1    ! 3.1.045    BY: David Stevens        On: 15-July-1985
  282. ;   0282  1    !        Fix terminal message for multiple file sendings. Type out
  283. ;   0283  1    !        "Sending: " in the system dependent NEXT_FILE routine.
  284. ;   0284  1    !
  285. ;   0285  1    ! Start of version 3.2
  286. ;   0286  1    !
  287. ;   0287  1    ! 3.2.070    By: Robert McQueen        On: 17-Dec-1985
  288. ;   0288  1    !        Fix CRC calculations when sending 8 bit data and not
  289. ;   0289  1    !        using 8 bit quoting.
  290. ;   0290  1    !
  291. ;   0291  1    ! 3.2.071    By: Robert McQueen        On: 11-March-186
  292. ;   0292  1    !        Include space in the message buffer for the line termination
  293. ;   0293  1    !        character.
  294. ;   0294  1    !
  295. ;   0295  1    ! 3.3.100    By: Gregory P. Welsh        On: 1-June-1986
  296. ;   0296  1    !        Made FILE_OPEN_FLAG GLOBAL so it could be updated properly for
  297. ;   0297  1    !        Transmit function from module KERTRM. Also renamed it to
  298. ;   0298  1    !        FFILE_OPEN_FLAG so it could be distinguished externally from
  299. ;   0299  1    !        routine FILE_OPEN.
  300. ;   0300  1    !
  301. ;   0301  1    ! 3.3.104    By: Robert McQueen            On: 5-July-1986
  302. ;   0302  1    !        Add changes/fixes suggested by Art Guion and David Deley for
  303. ;   0303  1    !        KERMSG.BLI.
  304. ;   0304  1    !        - Always attempt a handshake in IBM mode.  Failing to handshake
  305. ;   0305  1    !          may cause 3704/5 style controller to hang a VM system.
  306. ;   0306  1    !        - Don't lose the last character in a buffer.   BFR_FILL logic
  307. ;   0307  1    !          forgets to send the last cahracters of a file when it doesn't
  308. ;   0308  1    !          fit into the current packet.
  309. ;   0309  1    !
  310. ;   0310  1    ! 3.3.107    By: Antonino N. Mione            On: 8-Sep-1986
  311. ;   0311  1    !        Do not abort on ERROR packet while in SERVER mode. Instead,
  312. ;   0312  1    !        return to SERVER IDLE mode.
  313. ;   0313  1    !
  314. ;   0314  1    ! 3.3.108    By: Burt Johnson            On: 1-Feb-1990
  315. ;   0315  1    !        Added Dan Norstedt's TOP10 support for Extended Length packets;
  316. ;   0316  1    !        Header parity is computed, but not used.
  317. ;   0317  1    !        Undone 3.3.107, to allow for Ctrl-Cs to work properly
  318. ;   0318  1    !        Added PSECT PLIT = $CODE$ to accommodate TT_TEXT address
  319. ;   0319  1    !        references within 32k word_relative address boundry.
  320. ;   0320  1    !
  321. ;   0321  1    ! 3.3.109    JHW007        Jonathan H. Welch,    4-Apr-1990 17:05
  322. ;   0322  1    !        Backed out 3.3.108 PSECT PLIT = $CODE$ and replaced it 
  323. ;   0323  1    !        with a compile-time test for BLISS32 systems so that
  324. ;   0324  1    !        references to data use longword offsets.
  325. ;   0325  1    !
  326. ;   0326  1    ! 3.3.110    JHW008        Jonathan H. Welch,    5-Apr-1990 10:57
  327. ;   0327  1    !        Modified the call to NORMALIZE_FILE in routine REC_FILE
  328. ;   0328  1    !        to adjust file name and type lengths downwards to 39
  329. ;   0329  1    !        characters each as opposed to the pre-VMS 4 format of
  330. ;   0330  1    !        9 for the name and 3 for the type.
  331. ;   0331  1    !
  332. ;   0332  1    ! 3.3.111    JHW011        Jonathan H. Welch,     17-May-1990 9:06
  333. ;   0333  1    !        Modified a miscoded call to send_packet in routine
  334. ;   0334  1    !        send_gencmd to correctly specify the length of the
  335. ;   0335  1    !        response packet to transmit.  This miscoding only
  336. ;   0336  1    !        affected long packet support, in particular, when
  337. ;   0337  1    !        GETting files standard length packets were being used
  338. ;   0338  1    !        when long packet support was available in both kermit
  339. ;   0339  1    !        programs.
  340. ;   0340  1    !--
  341. ;   0341  1    
  342. ;   0342  1     %SBTTL 'Interface requirements'
  343. ;   0343  1    
  344. ;   0344  1    !++
  345. ;   0345  1    !        Interface requirements
  346. ;   0346  1    !
  347. ;   0347  1    ! The following routines and data locations are rquired for a correct
  348. ;   0348  1    ! implementation of KERMIT.
  349. ;   0349  1    !
  350. ;   0350  1    ! File routines:
  351. ;   0351  1    !
  352. ;   0352  1    !    FILE_OPEN (Function)
  353. ;   0353  1    !        This routine will open a file for reading or writting.  It
  354. ;   0354  1    !        will assume that FILE_SIZE contains the number of bytes
  355. ;   0355  1    !        and FILE_NAME contains the file name of length FILE_SIZE.
  356. ;   0356  1    !        The function that is passed is either FNC_READ or FNC_WRITE.
  357. ;   0357  1    !
  358. ;   0358  1    !    FILE_CLOSE ()
  359. ;   0359  1    !        This routine will close the currently open file.  This
  360. ;   0360  1    !        routine will return the status of the operation.
  361. ;   0361  1    !
  362. ;   0362  1    !    GET_FILE (Character)
  363. ;   0363  1    !        This routine will get a character from the currently open file
  364. ;   0364  1    !        and store it in the location specified by "Character".  There
  365. ;   0365  1    !        will be a true/false value returned by the routine to determine
  366. ;   0366  1    !        if there was an error.
  367. ;   0367  1    !
  368. ;   0368  1    !    PUT_FILE (Character)
  369. ;   0369  1    !        This routine will output a character to the currently open
  370. ;   0370  1    !        file.  It will return a true/false value to determine if the
  371. ;   0371  1    !        routine was successful.
  372. ;   0372  1    !
  373. ;   0373  1    !    NEXT_FILE ()
  374. ;   0374  1    !        This routine will advance to the next file.  This routine
  375. ;   0375  1    !        will return false if there are no more files to process.
  376. ;   0376  1    !
  377. ;   0377  1    ! Communications line routines:
  378. ;   0378  1    !
  379. ;   0379  1    !    RECEIVE (Buffer address, Address of var to store length into)
  380. ;   0380  1    !        This routine will receive a message from the remote Kermit.
  381. ;   0381  1    !
  382. ;   0382  1    !    SEND (Buffer address, Length in characters)
  383. ;   0383  1    !        This routine will send a message to the remote Kermit.
  384. ;   0384  1    !
  385. ;   0385  1    !    GEN_CRC (Buffer address, length in characters)
  386. ;   0386  1    !        This routine will calculate the CRC-CCITT for the characters
  387. ;   0387  1    !        in the buffer.
  388. ;   0388  1    !
  389. ;   0389  1    ! Operating system routines:
  390. ;   0390  1    !
  391. ;   0391  1    !    SY_DISMISS (Seconds)
  392. ;   0392  1    !        This routine will cause Kermit to sleep for the specified
  393. ;   0393  1    !        number of seconds.  It is used to handle the DELAY parameter.
  394. ;   0394  1    !
  395. ;   0395  1    !    SY_LOGOUT ()
  396. ;   0396  1    !        Log the job off of the system. (Kill the process).
  397. ;   0397  1    !
  398. ;   0398  1    !    SY_TIME ()
  399. ;   0399  1    !        This routine will return the starting time milliseconds.
  400. ;   0400  1    !        It can be the start of Kermit, the system, etc, so long
  401. ;   0401  1    !        as it always is incrementing.
  402. ;   0402  1    !
  403. ;   0403  1    ! Status routines:
  404. ;   0404  1    !
  405. ;   0405  1    !    XFR_STATUS (Type, Subtype);
  406. ;   0406  1    !        This routine is called to indicate the occurance of
  407. ;   0407  1    !        a significant event that the user interface may wish
  408. ;   0408  1    !        to inform the user about.  The arguments indicate the
  409. ;   0409  1    !        type of event.
  410. ;   0410  1    !        Type: "S" - Send, "R" - Receive
  411. ;   0411  1    !            Subtype: "P" - Packet
  412. ;   0412  1    !                 "N" - NAK
  413. ;   0413  1    !                 "T" - timeout
  414. ;   0414  1    !        For type = "I" (initiate), "T" (terminate):
  415. ;   0415  1    !            Subtype: "S" - a file send
  416. ;   0416  1    !                 "R" - a file receive
  417. ;   0417  1    !                 "G" - a generic command
  418. ;   0418  1    !                 "I" - for "T" only, returning to server idle
  419. ;   0419  1    !        For type = "F" (file operation):
  420. ;   0420  1    !            Subtype: "S" - open for sending
  421. ;   0421  1    !                 "R" - open for receiving
  422. ;   0422  1    !                 "C" - closing file OK
  423. ;   0423  1    !                 "X" - aborting file by user request
  424. ;   0424  1    !                 "Z" - aborting group by user request
  425. ;   0425  1    !                 "D" - aborting file, but saving due to disposition
  426. ;   0426  1    !                 "A" - aborting file due to protocol error
  427. ;   0427  1    !
  428. ;   0428  1    ! Error processing:
  429. ;   0429  1    !
  430. ;   0430  1    !    KRM_ERROR (Error parameter)
  431. ;   0431  1    !        This routine will cause an error message to be issued.
  432. ;   0432  1    !        The error parameter is defined by KERERR.  This may cause
  433. ;   0433  1    !        SND_ERROR to be called to send an "E" message to the remote.
  434. ;   0434  1    !
  435. ;   0435  1    ! Terminal I/O routines:
  436. ;   0436  1    !
  437. ;   0437  1    !    TERM_DUMP (Buffer, Count)
  438. ;   0438  1    !    DBG_DUMP (Buffer, Count)
  439. ;   0439  1    !        This routine will dump the buffer onto the user's terminal.
  440. ;   0440  1    !        The routine is supplied with the count of the characters
  441. ;   0441  1    !        and the address of the buffer.
  442. ;   0442  1    !        These may be the same routine or different.  DBG_DUMP
  443. ;   0443  1    !        is only called for debugging output.
  444. ;   0444  1    !
  445. ;   0445  1    !
  446. ;   0446  1    !            ENTRY POINTS
  447. ;   0447  1    !
  448. ;   0448  1    ! KERMSG contains the following entry points for the KERMIT.
  449. ;   0449  1    !
  450. ;   0450  1    !    SERVER ()
  451. ;   0451  1    !        This routine will cause KERMIT go enter server mode.
  452. ;   0452  1    !
  453. ;   0453  1    !    SEND_SWITCH ()
  454. ;   0454  1    !        This routine will send a file.  It expects that the user
  455. ;   0455  1    !        has stored the text of the file name into FILE_NAME and
  456. ;   0456  1    !        the length of the text into FILE_SIZE.
  457. ;   0457  1    !
  458. ;   0458  1    !    REC_SWITCH ()
  459. ;   0459  1    !        This routine will receive a file.  It expects that the default
  460. ;   0460  1    !        file name is set up in FILE_NAME and the length is in
  461. ;   0461  1    !        FILE_SIZE.
  462. ;   0462  1    !
  463. ;   0463  1    !    GEN_PARITY (Character)
  464. ;   0464  1    !        This routine will return the character with the proper parity
  465. ;   0465  1    !        on the character.
  466. ;   0466  1    !
  467. ;   0467  1    !    SND_ERROR (COUNT, ADDRESS)
  468. ;   0468  1    !        This routine will send the text of an error to the remote
  469. ;   0469  1    !        Kermit.
  470. ;   0470  1    !
  471. ;   0471  1    !    DO_GENERIC (TYPE)
  472. ;   0472  1    !        This routine will cause a generic function to be sent to
  473. ;   0473  1    !        the remote Kermit.  This routine will then do all of the
  474. ;   0474  1    !        necessary hand shaking to handle the local end of the generic
  475. ;   0475  1    !        Kermit command.
  476. ;   0476  1    !
  477. ;   0477  1    !
  478. ;   0478  1    !        GLOBAL Storage
  479. ;   0479  1    !
  480. ;   0480  1    ! The following are the global storage locations that are used to interface
  481. ;   0481  1    ! to KERMSG.  These locations contains the various send and receive parameters.
  482. ;   0482  1    !
  483. ;   0483  1    ! Receive parameters:
  484. ;   0484  1    !
  485. ;   0485  1    !    RCV_PKT_SIZE
  486. ;   0486  1    !        Receive packet size.
  487. ;   0487  1    !    RCV_NPAD
  488. ;   0488  1    !        Padding length
  489. ;   0489  1    !    RCV_PADCHAR
  490. ;   0490  1    !        Padding character
  491. ;   0491  1    !    RCV_TIMEOUT
  492. ;   0492  1    !        Time out
  493. ;   0493  1    !    RCV_EOL
  494. ;   0494  1    !        End of line character
  495. ;   0495  1    !    RCV_QUOTE_CHR
  496. ;   0496  1    !        Quote character
  497. ;   0497  1    !    RCV_8QUOTE_CHR
  498. ;   0498  1    !        8-bit quoting character
  499. ;   0499  1    !    RCV_SOH
  500. ;   0500  1    !        Start of header character
  501. ;   0501  1    !
  502. ;   0502  1    ! Send parameters (Negative values denote the default, positive user supplied):
  503. ;   0503  1    !
  504. ;   0504  1    !    SND_PKT_SIZE
  505. ;   0505  1    !        Send packet size
  506. ;   0506  1    !    SND_NPAD
  507. ;   0507  1    !        Padding length
  508. ;   0508  1    !    SND_PADCHAR
  509. ;   0509  1    !        Padding character
  510. ;   0510  1    !    SND_TIMEOUT
  511. ;   0511  1    !        Time out
  512. ;   0512  1    !    SND_EOL
  513. ;   0513  1    !        End of line character
  514. ;   0514  1    !    SND_QUOTE_CHR
  515. ;   0515  1    !        Quote character
  516. ;   0516  1    !    SND_SOH
  517. ;   0517  1    !        Start of header character (normally 001)
  518. ;   0518  1    !
  519. ;   0519  1    ! Statistics:
  520. ;   0520  1    !
  521. ;   0521  1    !    SND_TOTAL_CHARS
  522. ;   0522  1    !        Total characters sent for this Kermit session
  523. ;   0523  1    !    RCV_TOTAL_CHARS
  524. ;   0524  1    !        Total characters received for this Kermit session
  525. ;   0525  1    !    SND_DATA_CHARS
  526. ;   0526  1    !        Total number of data characters sent for this Kermit session
  527. ;   0527  1    !    RCV_DATA_CHARS
  528. ;   0528  1    !        Total number of data characters received for this Kermit session
  529. ;   0529  1    !    SND_COUNT
  530. ;   0530  1    !        Total number of packets that have been sent
  531. ;   0531  1    !    RCV_COUNT
  532. ;   0532  1    !        Total number of packets that have been received.
  533. ;   0533  1    !    SMSG_TOTAL_CHARS
  534. ;   0534  1    !        Total characters sent for this file transfer
  535. ;   0535  1    !    RMSG_TOTAL_CHARS
  536. ;   0536  1    !        Total characters received for this file transfer
  537. ;   0537  1    !    SMSG_DATA_CHARS
  538. ;   0538  1    !        Total data characters sent for this file transfer
  539. ;   0539  1    !    RMSG_DATA_CHARS
  540. ;   0540  1    !        Total data characters received for this file transfer
  541. ;   0541  1    !    SMSG_NAKS
  542. ;   0542  1    !        Total number of NAKs sent for this file transfer
  543. ;   0543  1    !    RMSG_NAKS
  544. ;   0544  1    !        Total number of NAKs received for this file transfer
  545. ;   0545  1    !    XFR_TIME
  546. ;   0546  1    !        Amount of time the last transfer took in milliseconds.
  547. ;   0547  1    !    TOTAL_TIME
  548. ;   0548  1    !        Total amount of time spend transfering data.
  549. ;   0549  1    !
  550. ;   0550  1    ! Misc constants:
  551. ;   0551  1    !
  552. ;   0552  1    !    LAST_ERROR
  553. ;   0553  1    !        ASCIZ of the last error message issued.
  554. ;   0554  1    !    FILE_NAME
  555. ;   0555  1    !        Vector containing the ASCII characters of the file name.
  556. ;   0556  1    !    FILE_SIZE
  557. ;   0557  1    !        Number of characters in the FILE_NAME vector.
  558. ;   0558  1    !    DELAY
  559. ;   0559  1    !        Amount of time to delay
  560. ;   0560  1    !    DUPLEX
  561. ;   0561  1    !        DP_HALF or DP_FULL to denote either half duplex or full duplex.
  562. ;   0562  1    !        [Currently only DP_FULL is supported]
  563. ;   0563  1    !    PKT_RETRIES
  564. ;   0564  1    !        Number of retries to attempt to read a message.
  565. ;   0565  1    !    SI_RETRIES
  566. ;   0566  1    !        Number of retries to attempt on send inits
  567. ;   0567  1    !    DEBUG_FLAG
  568. ;   0568  1    !        Debugging mode on/off
  569. ;   0569  1    !    WARN_FLAG
  570. ;   0570  1    !        File warning flag
  571. ;   0571  1    !    IBM_FLAG
  572. ;   0572  1    !        True if talking to an IBM system, else false.
  573. ;   0573  1    !    ECHO_FLAG
  574. ;   0574  1    !        Local echo flag
  575. ;   0575  1    !    CONNECT_FLAG
  576. ;   0576  1    !        Connected flag; True if terminal and SET LINE are the same
  577. ;   0577  1    !    PARITY_TYPE
  578. ;   0578  1    !        Type of parity to use on sends.
  579. ;   0579  1    !    DEV_PARITY_FLAG
  580. ;   0580  1    !        Device will add parity to message.  True if device adds
  581. ;   0581  1    !        parity and false if we must do it.
  582. ;   0582  1    !    FLAG_FILE_OPEN
  583. ;   0583  1    !        File is opened.
  584. ;   0584  1    !
  585. ;   0585  1    !--
  586. ;   0586  1    
  587. ;   0587  1     %SBTTL 'Declarations -- Forward definitions'
  588. ;   0588  1    !<BLF/NOFORMAT>
  589. ;   0589  1    !
  590. ;   0590  1    ! Forward definitions
  591. ;   0591  1    !
  592. ;   0592  1    
  593. ;   0593  1    FORWARD ROUTINE
  594. ;   0594  1    
  595. ;   0595  1    ! Main loop for a complete transaction
  596. ;   0596  1        DO_TRANSACTION,        ! Perform a complete transaction
  597. ;   0597  1    
  598. ;   0598  1    ! Send processing routines
  599. ;   0599  1    
  600. ;   0600  1        SEND_SERVER_INIT,        ![026] Send a server init packet
  601. ;   0601  1        SEND_DATA,            ! Send data to the micro
  602. ;   0602  1        SEND_FILE,            ! Send file name
  603. ;   0603  1        SEND_OPEN_FILE,            ! Open file for sending
  604. ;   0604  1        SEND_GENCMD,        ! Send generic command
  605. ;   0605  1        SEND_EOF,            ! Send EOF
  606. ;   0606  1        SEND_INIT,            ! Send initialization msg
  607. ;   0607  1        SEND_BREAK,            ! Send break end of transmission
  608. ;   0608  1    
  609. ;   0609  1    ! Receive processing routines
  610. ;   0610  1    
  611. ;   0611  1        REC_SERVER_IDLE,        ! Wait for message while server is idle
  612. ;   0612  1        REC_INIT,            ! Receive initialization
  613. ;   0613  1        REC_FILE,            ! Receive file information
  614. ;   0614  1        REC_DATA,            ! Receive data
  615. ;   0615  1    !
  616. ;   0616  1    ! Server processing routines
  617. ;   0617  1    !
  618. ;   0618  1        SERVER_GENERIC,        ! Process generic KERMIT commands
  619. ;   0619  1        HOST_COMMAND,        ! Process host command
  620. ;   0620  1        KERMIT_COMMAND,        ! Process Kermit command
  621. ;   0621  1        CALL_SY_RTN,        ! Handle calling system routine and returning result
  622. ;   0622  1    !
  623. ;   0623  1    ! Statistic gathering routines
  624. ;   0624  1    !
  625. ;   0625  1        END_STATS    : NOVALUE,    ! End of a message processing stats routine
  626. ;   0626  1    
  627. ;   0627  1    ! Low level send/receive routines
  628. ;   0628  1    
  629. ;   0629  1        CALC_BLOCK_CHECK,        ! Routine to calculate the block check value
  630. ;   0630  1        SET_SEND_INIT : NOVALUE,    ! Set up the MSG_SND_INIT parameters.
  631. ;   0631  1        PRS_SEND_INIT,        ! Parse MSG_SND_INIT parameters.
  632. ;   0632  1        DO_PARITY : NOVALUE,    ! Routine to generate parity for a message
  633. ;   0633  1        GEN_PARITY,            ! Routine to add parity to a character
  634. ;   0634  1        SEND_PACKET,        ! Send a packet to the remote
  635. ;   0635  1        REC_MESSAGE,        ! Receive a message with retry processing
  636. ;   0636  1        REC_PACKET,            ! Receive a packet from the remote
  637. ;   0637  1    
  638. ;   0638  1    ! Utility routines
  639. ;   0639  1    
  640. ;   0640  1        NORMALIZE_FILE : NOVALUE,    ! Force file name into normal form
  641. ;   0641  1        BFR_EMPTY,            ! Empty the data buffer
  642. ;   0642  1        BFR_FILL,            ! Fill the data buffer from a file
  643. ;   0643  1        SET_STRING,            ![025] Routine to set alternate get/put routines
  644. ;   0644  1                        ! for use with in memory strings
  645. ;   0645  1        TYPE_CHAR,            ! Type a character from a packet
  646. ;   0646  1        INIT_XFR    : NOVALUE,    ! Initialize the per transfer processing
  647. ;   0647  1        STS_OUTPUT    : NOVALUE,    ! Output current transfer status
  648. ;   0648  1    !
  649. ;   0649  1    ! Debugging routines
  650. ;   0650  1    !
  651. ;   0651  1        DBG_MESSAGE    : NOVALUE,    ! Type out a formatted message
  652. ;   0652  1        DBG_SEND    : NOVALUE,    ! Send message debugging routine
  653. ;   0653  1        DBG_RECEIVE    : NOVALUE;    ! Receive message debugging routine
  654. ;   0654  1         %SBTTL    'Require files'
  655. ;   0655  1    
  656. ;   0656  1    !
  657. ;   0657  1    !<BLF/FORMAT>
  658. ;   0658  1    !
  659. ;   0659  1    ! REQUIRE FILES:
  660. ;   0660  1    !
  661. ;   0661  1    
  662. ; L 0662  1    %IF %BLISS (BLISS32)
  663. ;   0663  1    %THEN
  664. ;   0664  1    
  665. ;   0665  1    LIBRARY 'SYS$LIBRARY:STARLET';
  666. ;   0666  1    
  667. ;   0667  1    %FI
  668. ;   0668  1    
  669. ;   0669  1    REQUIRE 'KERCOM';
  670. ;   0878  1    
  671. ;   0879  1    REQUIRE 'KERERR';
  672. ;   0945  1    
  673. ;   0946  1     %SBTTL 'Macro definitions'
  674. ;   0947  1    !
  675. ;   0948  1    ! MACROS:
  676. ;   0949  1    !
  677. ;   0950  1    
  678. ;   0951  1    MACRO
  679. ; M 0952  1        CTL (C) =
  680. ;   0953  1     ((C) XOR %O'100')%,
  681. ; M 0954  1        CHAR (C) =
  682. ;   0955  1     ((C) + %O'40')%,
  683. ; M 0956  1        UNCHAR (C) =
  684. ;   0957  1     ((C) - %O'40')%;
  685. ;   0958  1    
  686. ;   0959  1     %SBTTL 'KERMIT Protocol Definitions'
  687. ;   0960  1    
  688. ;   0961  1    !++
  689. ;   0962  1    ! The following describes the various items that are found in the
  690. ;   0963  1    ! KERMIT messages.  A complete and through desription of the protocol can be
  691. ;   0964  1    ! found in the KERMIT PROTOCOL MANUAL.
  692. ;   0965  1    !
  693. ;   0966  1    !
  694. ;   0967  1    ! All KERMIT messages have the following format:
  695. ;   0968  1    !
  696. ;   0969  1    ! <Mark><CHAR(Count)><CHAR(Seq)><Message-dependent information><Check><EOL>
  697. ;   0970  1    !
  698. ;   0971  1    ! <MARK>
  699. ;   0972  1    !    Normally SOH (Control-A, octal 001).
  700. ;   0973  1    !
  701. ;   0974  1    ! <CHAR(Count)>
  702. ;   0975  1    !    Count of the number of characters following this position.
  703. ;   0976  1    !    Character counts of ONLY 0 to 94 are valid.
  704. ;   0977  1    ! [108] Character count = 0 means extended length type packet.
  705. ;   0978  1    !
  706. ;   0979  1    ! <CHAR(Seq)>
  707. ;   0980  1    !    Packet sequence number, modulo 100 (octal).
  708. ;   0981  1    !
  709. ;   0982  1    ! [108]    <CHAR(Type)>
  710. ;   0983  1    ! [108]        Packet type, usually a mnemonic ASCII character.
  711. ;   0984  1    ! [108]
  712. ;   0985  1    ! [108]    For Extended Length packets only:
  713. ;   0986  1    ! [108]   <CHAR(Count/95)>
  714. ;   0987  1    ! [108]        Count of the number of characters / 95, from (HeaderCheck)
  715. ;   0988  1    ! [108]
  716. ;   0989  1    ! [108]   <CHAR(Count MOD 95)>
  717. ;   0990  1    ! [108]        Count of the number of characters MOD 95, from (HeaderCheck)
  718. ;   0991  1    ! [108]
  719. ;   0992  1    ! [108]   <CHAR(HeaderCheck)>
  720. ;   0993  1    ! [108]        Kermit type-1 checksum of the 5 preceding ASCII characters.
  721. ;   0994  1    !
  722. ;   0995  1    ! <MESSAGE-DEPENDENT INFORMATION>
  723. ;   0996  1    !    This field contains the message dependent information.  There can
  724. ;   0997  1    !    be multiple fields in this section.  See the KERMIT Protocol document
  725. ;   0998  1    !    for a complete description of this.
  726. ;   0999  1    !
  727. ;   1000  1    ! <Check>
  728. ;   1001  1    !    A block check on the characters in the packet between, but not
  729. ;   1002  1    !    including, the mark and the checksum itself.  It may be one to three
  730. ;   1003  1    !    characters, depending upon the type agreed upon.
  731. ;   1004  1    !
  732. ;   1005  1    !    1. Single character arithmetic sum equal to:
  733. ;   1006  1    !        chksum = (s + ((s AND 300)/100)) AND 77
  734. ;   1007  1    !        Character sent is CHAR(chksum).
  735. ;   1008  1    !
  736. ;   1009  1    !    2. Two character arithmetic sum.  CHAR of bits 6-11 are the first
  737. ;   1010  1    !       character, CHAR of bits 0-5 are the second character.
  738. ;   1011  1    !
  739. ;   1012  1    !    3. Three character CRC-CCITT.  First character is CHAR of bits 12-15,
  740. ;   1013  1    !       second is CHAR of bits 6-11, third is CHAR of bits 0-5.
  741. ;   1014  1    !
  742. ;   1015  1    !
  743. ;   1016  1    ! <EOL>
  744. ;   1017  1    !    End of line.  Any line terminator that may be required by the host.
  745. ;   1018  1    !--
  746. ;   1019  1    
  747. ;   1020  1     %SBTTL 'KERMIT Protocol Definitions -- Packet offsets'
  748. ;   1021  1    
  749. ;   1022  1    !++
  750. ;   1023  1    ! The following define the various offsets of the standard KERMIT
  751. ;   1024  1    ! packets.
  752. ;   1025  1    !--
  753. ;   1026  1    
  754. ;   1027  1    LITERAL
  755. ;   1028  1        PKT_MARK = 0,                ! <MARK>
  756. ;   1029  1        PKT_COUNT = 1,                ! <CHAR(Count)>
  757. ;   1030  1        PKT_SEQ = 2,                ! <CHAR(Seq)>
  758. ;   1031  1        PKT_TYPE = 3,                ! <Message type>
  759. ;   1032  1        PKT_MSG = 4,                ! <MESSAGE-DEPENDENT INFORMATION>
  760. ;   1033  1        PKT_COUNTX1 = 4,            ! [108]    ! Ext. pkt: <CHAR(MSB(Count))>
  761. ;   1034  1        PKT_COUNTX2 = 5,            ! [108]    ! Ext. pkt: <CHAR(LSB(Count))>
  762. ;   1035  1        PKT_HCHECK = 6,            ! [108]    ! Ext. pkt: Header parity
  763. ;   1036  1        PKT_MSGX = 7,            ! [108]    ! <MESSAGE-DEPENDENT INFORMATION>
  764. ;   1037  1        PKT_MAX_MSG = 94 - 5,            ! Maximum size of the message dependent
  765. ;   1038  1                                !  information
  766. ;   1039  1        PKT_CHKSUM = 0,                ! <CHAR(Chksum)> offset from end of
  767. ;   1040  1                                !    Message dependent information
  768. ;   1041  1        PKT_EOL = 1,                ! <Eol> offset from end of data
  769. ;   1042  1    ! [108]   PKT_OVR_HEAD_B = 2,            ! Header overhead
  770. ;   1043  1    ! [108]   PKT_OVR_HEAD_E = 1,            ! Overhead at the end
  771. ;   1044  1        PKT_OVR_HEAD = 3,                ! Overhead added to data length
  772. ;   1045  1        PKT_TOT_OVR_HEAD = 6;            ! Total overhead of the message
  773. ;   1046  1    
  774. ;   1047  1     %SBTTL 'KERMIT Protocol Definitions -- Message dependent field'
  775. ;   1048  1    
  776. ;   1049  1    !++
  777. ;   1050  1    ! The MESSAGE-DEPENDENT information field of the message contains at
  778. ;   1051  1    ! least one part.  That is the type of message.  The remainder of the message
  779. ;   1052  1    ! MESSAGE-DEPENDENT field is different depending on the message.
  780. ;   1053  1    !
  781. ;   1054  1    ! <TYPE><TYPE-DEPENDENT-INFORMATION>
  782. ;   1055  1    !
  783. ;   1056  1    ! <TYPE>
  784. ;   1057  1    !    The type defines the type of message that is being processed.
  785. ;   1058  1    !
  786. ;   1059  1    !--
  787. ;   1060  1    
  788. ;   1061  1    ! Protocol version 1.0 message types
  789. ;   1062  1    
  790. ;   1063  1    LITERAL
  791. ;   1064  1        MSG_DATA = %C'D',                ! Data packet
  792. ;   1065  1        MSG_ACK = %C'Y',                ! Acknowledgement
  793. ;   1066  1        MSG_NAK = %C'N',                ! Negative acknowledgement
  794. ;   1067  1        MSG_SND_INIT = %C'S',            ! Send initiate
  795. ;   1068  1        MSG_BREAK = %C'B',                ! Break transmission
  796. ;   1069  1        MSG_FILE = %C'F',                ! File header
  797. ;   1070  1        MSG_EOF = %C'Z',                ! End of file (EOF)
  798. ;   1071  1        MSG_ERROR = %C'E';                ! Error
  799. ;   1072  1    
  800. ;   1073  1    ! Protocol version 2.0 message types
  801. ;   1074  1    
  802. ;   1075  1    LITERAL
  803. ;   1076  1        MSG_RCV_INIT = %C'R',            ! Receive initiate
  804. ;   1077  1        MSG_COMMAND = %C'C',            ! Host command
  805. ;   1078  1        MSG_GENERIC = %C'G',            ! Generic KERMIT command.
  806. ;   1079  1        MSG_KERMIT = %C'K';                ! Perform KERMIT command (text)
  807. ;   1080  1    
  808. ;   1081  1    ! Protocol version 4.0 message types
  809. ;   1082  1    
  810. ;   1083  1    LITERAL
  811. ;   1084  1        MSG_SER_INIT = %C'I',            ! Server initialization
  812. ;   1085  1        MSG_TEXT = %C'X';                ! Text header message
  813. ;   1086  1    
  814. ;   1087  1    !++
  815. ;   1088  1    ! Generic KERMIT commands
  816. ;   1089  1    !--
  817. ;   1090  1    
  818. ;   1091  1    LITERAL
  819. ;   1092  1        MSG_GEN_LOGIN = %C'I',            ! Login
  820. ;   1093  1        MSG_GEN_EXIT = %C'F',            ! Finish (exit to OS)
  821. ;   1094  1        MSG_GEN_CONNECT = %C'C',            ! Connect to a directory
  822. ;   1095  1        MSG_GEN_LOGOUT = %C'L',            ! Logout
  823. ;   1096  1        MSG_GEN_DIRECTORY = %C'D',            ! Directory
  824. ;   1097  1        MSG_GEN_DISK_USAGE = %C'U',            ! Disk usage
  825. ;   1098  1        MSG_GEN_DELETE = %C'E',            ! Delete a file
  826. ;   1099  1        MSG_GEN_TYPE = %C'T',            ! Type a file specification
  827. ;   1100  1    !    MSG_GEN_SUBMIT = %C'S',            ! Submit
  828. ;   1101  1    !    MSG_GEN_PRINT = %C'P',            ! Print
  829. ;   1102  1        MSG_GEN_WHO = %C'W',            ! Who's logged in
  830. ;   1103  1        MSG_GEN_SEND = %C'M',            ! Send a message to a user
  831. ;   1104  1        MSG_GEN_HELP = %C'H',            ! Help
  832. ;   1105  1        MSG_GEN_QUERY = %C'Q',            ! Query status
  833. ;   1106  1        MSG_GEN_RENAME = %C'R',            ! Rename file
  834. ;   1107  1        MSG_GEN_COPY = %C'K',            ! Copy file
  835. ;   1108  1        MSG_GEN_PROGRAM = %C'P',            ! Run program and pass data
  836. ;   1109  1        MSG_GEN_JOURNAL = %C'J',            ! Perform journal functions
  837. ;   1110  1        MSG_GEN_VARIABLE = %C'V';            ! Return/set variable state
  838. ;   1111  1    
  839. ;   1112  1    !
  840. ;   1113  1    ! Acknowledgement modifiers (protocol 4.0)
  841. ;   1114  1    !
  842. ;   1115  1    
  843. ;   1116  1    LITERAL
  844. ;   1117  1        MSG_ACK_ABT_CUR = %C'X',            ! Abort current file
  845. ;   1118  1        MSG_ACK_ABT_ALL = %C'Z';            ! Abort entire stream of files
  846. ;   1119  1    
  847. ;   1120  1    !
  848. ;   1121  1    ! End of file packet modifier
  849. ;   1122  1    !
  850. ;   1123  1    
  851. ;   1124  1    LITERAL
  852. ;   1125  1        MSG_EOF_DISCARD = %C'D';            ! Discard data from previous file
  853. ;   1126  1    
  854. ;   1127  1     %SBTTL 'KERMIT Protocol Definitions -- SEND initiate packet'
  855. ;   1128  1    
  856. ;   1129  1    !++
  857. ;   1130  1    !
  858. ;   1131  1    ! The following describes the send initiate packet.  All fields in the message
  859. ;   1132  1    ! data area are optional.
  860. ;   1133  1    !
  861. ;   1134  1    ! <"S"><CHAR(Bufsiz)><CHAR(Timeout)><CHAR(npad)><CTL(pad)><CHAR(Eol)><Quote>
  862. ;   1135  1    !    <8-bit-quote><Check-type><Repeat-count-processing><Reserved><Reserved>
  863. ;   1136  1    !
  864. ;   1137  1    ! BUFSIZ
  865. ;   1138  1    !    Sending Kermit's maximum buffer size.
  866. ;   1139  1    !
  867. ;   1140  1    ! Timeout
  868. ;   1141  1    !    Number of seconds after which the sending Kermit wishes to be timed out
  869. ;   1142  1    !
  870. ;   1143  1    ! Npad
  871. ;   1144  1    !    Number of padding caracters the sending Kermit needs preceding each
  872. ;   1145  1    !    packet.
  873. ;   1146  1    !
  874. ;   1147  1    ! PAD
  875. ;   1148  1    !    Padding character.
  876. ;   1149  1    !
  877. ;   1150  1    ! EOL
  878. ;   1151  1    !    A line terminator required on all packets set by the receiving
  879. ;   1152  1    !    Kermit.
  880. ;   1153  1    !
  881. ;   1154  1    ! Quote
  882. ;   1155  1    !    The printable ASCII characer the sending Kermit will use when quoting
  883. ;   1156  1    !    the control cahracters.  Default is "#".
  884. ;   1157  1    !
  885. ;   1158  1    ! 8-bit-quote
  886. ;   1159  1    !    Specify quoting mecanism for 8-bit quantities.  A quoting mecanism is
  887. ;   1160  1    !    mecessary when sending to hosts which prevent the use of the 8th bit
  888. ;   1161  1    !    for data.  When elected, the quoting mechanism will be used by both
  889. ;   1162  1    !    hosts, and the quote character must be in the range of 41-76 or 140-176
  890. ;   1163  1    !    octal, but different from the control-quoting character.  This field is
  891. ;   1164  1    !    interpreted as follows:
  892. ;   1165  1    !
  893. ;   1166  1    !    "Y" - I agree to 8-bit quoting if you request it.
  894. ;   1167  1    !    "N" - I will not do 8-bit quoting.
  895. ;   1168  1    !    "&" - (or any other character in the range of 41-76 or 140-176) I want
  896. ;   1169  1    !          to do 8-bit quoting using this character (it will be done if the
  897. ;   1170  1    !          other Kermit puts a "Y" in this field.
  898. ;   1171  1    !    Anything else: Quoting will not be done.
  899. ;   1172  1    !
  900. ;   1173  1    ! Check-type
  901. ;   1174  1    !    Type of block check.  The only values presently allowed in this
  902. ;   1175  1    !    field are "1", "2" or "3".  Future implementations may allow other
  903. ;   1176  1    !    values.  Interpretation of the values is:
  904. ;   1177  1    !
  905. ;   1178  1    !    "1" - Single character checksum.  Default value if none specified.
  906. ;   1179  1    !    "2" - Double character checksum.
  907. ;   1180  1    !    "3" - Three character CRC.
  908. ;   1181  1    !
  909. ;   1182  1    ! Repeat-count-processing
  910. ;   1183  1    !    The prefix character to be used to indicate a repeated character.
  911. ;   1184  1    !    This can be any printable cahracter other than blank (which denotes
  912. ;   1185  1    !    no repeat count).
  913. ;   1186  1    !
  914. ;   1187  1    ! [108]    Capability byte(s)
  915. ;   1188  1    ! [108]        Bit mask containing extra capabilities, currently we only use
  916. ;   1189  1    ! [108]        bit 1 (extended-length packets) and bit 0 (more capability
  917. ;   1190  1    ! [108]        bytes follows).
  918. ;   1191  1    ! [108]
  919. ;   1192  1    ! [108]    Window length (not used)
  920. ;   1193  1    ! [108]
  921. ;   1194  1    ! [108]    Extended packet length
  922. ;   1195  1    ! [108]        Maximum length for extended-length packets
  923. ;   1196  1    !
  924. ;   1197  1    !--
  925. ;   1198  1    
  926. ;   1199  1    LITERAL
  927. ;   1200  1        P_SI_BUFSIZ = 0,                ! Buffersize
  928. ;   1201  1        MY_PKT_SIZE = 80,                ! My packet size
  929. ;   1202  1        P_SI_TIMOUT = 1,                ! Time out
  930. ;   1203  1        MY_TIME_OUT = 15,                ! My time out
  931. ;   1204  1        P_SI_NPAD = 2,                ! Number of padding characters
  932. ;   1205  1        MY_NPAD = 0,                ! Amount of padding I require
  933. ;   1206  1        P_SI_PAD = 3,                ! Padding character
  934. ;   1207  1        MY_PAD_CHAR = 0,                ! My pad character
  935. ;   1208  1        P_SI_EOL = 4,                ! End of line character
  936. ;   1209  1        MY_EOL_CHAR = %O'015',            ! My EOL cahracter
  937. ;   1210  1        P_SI_QUOTE = 5,                ! Quote character
  938. ;   1211  1        MY_QUOTE_CHAR = %C'#',            ! My quoting character
  939. ;   1212  1        P_SI_8QUOTE = 6,                ! 8-bit quote
  940. ;   1213  1        MY_8BIT_QUOTE = %C'&',            ! Don't do it
  941. ;   1214  1        P_SI_CHKTYPE = 7,                ! Checktype used
  942. ;   1215  1        MY_CHKTYPE = CHK_1CHAR,            ! Use single character checksum
  943. ;   1216  1        P_SI_REPEAT = 8,                ! Repeat character
  944. ;   1217  1        MY_REPEAT = %C'~',                ! My repeat character
  945. ;   1218  1        P_SI_LENGTH = 9,                ! Length of the std message
  946. ;   1219  1                        ! [108]
  947. ;   1220  1        P_SI_CAPAS = 9,            ! [108]    ! Capability field (if used)
  948. ;   1221  1        EXTLEN_CAPAS = 2,            ! [108]    ! Extended length packets
  949. ;   1222  1        P_SI_WINDO = 10,            ! [108]    ! (Send only) Not used, filler
  950. ;   1223  1        P_SI_MAXLX1 = 11,            ! [108]    ! (Send only) Ext. len / 95
  951. ;   1224  1        MY_MAXLX1 = 0,            ! [108]
  952. ;   1225  1        P_SI_MAXLX2 = 12,            ! [108]    ! (Send only) Ext. len MOD 95
  953. ;   1226  1        MY_MAXLX2 = 80,            ! [108]
  954. ;   1227  1                        ! [108]
  955. ;   1228  1        P_SI_XLENGTH = 13;            ! [108]    ! (Send only) Len of ext. msg
  956. ;   1229  1    
  957. ;   1230  1     %SBTTL 'KERMIT Protocol States'
  958. ;   1231  1    
  959. ;   1232  1    !++
  960. ;   1233  1    ! The following are the various states that KERMIT can be in.
  961. ;   1234  1    ! The state transitions are defined in the KERMIT Protocol manual.
  962. ;   1235  1    !--
  963. ;   1236  1    
  964. ;   1237  1    LITERAL
  965. ;   1238  1        STATE_MIN = 1,                ! Min state number
  966. ;   1239  1        STATE_S = 1,                ! Send init state
  967. ;   1240  1        STATE_SF = 2,                ! Send file header
  968. ;   1241  1        STATE_SD = 3,                ! Send file data packet
  969. ;   1242  1        STATE_SZ = 4,                ! Send EOF packet
  970. ;   1243  1        STATE_SB = 5,                ! Send break
  971. ;   1244  1        STATE_R = 6,                ! Receive state (wait for send-init)
  972. ;   1245  1        STATE_RF = 7,                ! Receive file header packet
  973. ;   1246  1        STATE_RD = 8,                ! Receive file data packet
  974. ;   1247  1        STATE_C = 9,                ! Send complete
  975. ;   1248  1        STATE_A = 10,                ! Abort
  976. ;   1249  1        STATE_SX = 11,                ! Send text header
  977. ;   1250  1        STATE_SG = 12,                ! Send generic command
  978. ;   1251  1        STATE_SI = 13,                ! Send server init
  979. ;   1252  1        STATE_ID = 14,                ! Server idle loop
  980. ;   1253  1        STATE_II = 15,                ! Server idle after server init
  981. ;   1254  1        STATE_FI = 16,                ! Server should exit
  982. ;   1255  1        STATE_LG = 17,                ! Server should logout
  983. ;   1256  1        STATE_OF = 18,                ! Send - open first input file
  984. ;   1257  1        STATE_EX = 19,                ! Exit back to command parser
  985. ;   1258  1        STATE_ER = 20,                ! Retries exceeded error
  986. ;   1259  1        STATE_MAX = 20;                ! Max state number
  987. ;   1260  1    
  988. ;   1261  1     %SBTTL 'Internal constants'
  989. ;   1262  1    
  990. ;   1263  1    !++
  991. ;   1264  1    ! The following represent various internal KERMSG constants.
  992. ;   1265  1    !--
  993. ;   1266  1    
  994. ;   1267  1    LITERAL
  995. ;   1268  1        MAX_PKT_RETRIES = 16,            ! Maximum packet retries
  996. ;   1269  1        MAX_SI_RETRIES = 5;                ! Maximum send init retries
  997. ;   1270  1    
  998. ;   1271  1     %SBTTL 'Storage - External'
  999. ;   1272  1    !
  1000. ;   1273  1    ! OWN STORAGE:
  1001. ;   1274  1    !
  1002. ;   1275  1    
  1003. ;   1276  1    EXTERNAL
  1004. ;   1277  1    !
  1005. ;   1278  1    ! Receive parameters
  1006. ;   1279  1    !
  1007. ;   1280  1        RCV_PKT_SIZE,                ! Receive packet size
  1008. ;   1281  1        RCV_NPAD,                    ! Padding length
  1009. ;   1282  1        RCV_PADCHAR,                ! Padding character
  1010. ;   1283  1        RCV_TIMEOUT,                ! Time out
  1011. ;   1284  1        RCV_EOL,                    ! EOL character
  1012. ;   1285  1        RCV_QUOTE_CHR,                ! Quote character
  1013. ;   1286  1        RCV_SOH,                    ! Start of header character
  1014. ;   1287  1        RCV_8QUOTE_CHR,                ! 8-bit quoting character
  1015. ;   1288  1    !
  1016. ;   1289  1    ! Miscellaneous parameters
  1017. ;   1290  1    !
  1018. ;   1291  1        SET_REPT_CHR,                ! Repeat character
  1019. ;   1292  1    !
  1020. ;   1293  1    ! Send parameters
  1021. ;   1294  1    !
  1022. ;   1295  1        SND_PKT_SIZE,                ! Send packet size
  1023. ;   1296  1        SND_NPAD,                    ! Padding length
  1024. ;   1297  1        SND_PADCHAR,                ! Padding character
  1025. ;   1298  1        SND_TIMEOUT,                ! Time out
  1026. ;   1299  1        SND_EOL,                    ! EOL character
  1027. ;   1300  1        SND_QUOTE_CHR,                ! Quote character
  1028. ;   1301  1        SND_SOH,                    ! Start of header character
  1029. ;   1302  1        SEND_TIMEOUT,                ! Time to wait for receiving message
  1030. ;   1303  1    !
  1031. ;   1304  1    ! Server parameters
  1032. ;   1305  1    !
  1033. ;   1306  1        SRV_TIMEOUT,                ! Time between NAK's when server is idle
  1034. ;   1307  1    !
  1035. ;   1308  1    ! Statistics
  1036. ;   1309  1    !
  1037. ;   1310  1        SND_TOTAL_CHARS,                ! Total characters sent
  1038. ;   1311  1        RCV_TOTAL_CHARS,                ! Total characters received
  1039. ;   1312  1        SND_DATA_CHARS,                ! Total number of data characters sent
  1040. ;   1313  1        RCV_DATA_CHARS,                ! Total number of data characters received
  1041. ;   1314  1        SND_NAKS,                    ! Total NAKs sent
  1042. ;   1315  1        RCV_NAKS,                    ! Total NAKs received
  1043. ;   1316  1        SND_COUNT,                    ! Count of total number of packets
  1044. ;   1317  1        RCV_COUNT,                    ! Count of total number packets received
  1045. ;   1318  1        SMSG_COUNT,                    ! Total number of packets sent
  1046. ;   1319  1        RMSG_COUNT,                    ! Total number of packets received
  1047. ;   1320  1        SMSG_TOTAL_CHARS,                ! Total chars sent this file xfer
  1048. ;   1321  1        RMSG_TOTAL_CHARS,                ! Total chars rcvd this file xfer
  1049. ;   1322  1        SMSG_DATA_CHARS,                ! Total data chars this file xfer
  1050. ;   1323  1        RMSG_DATA_CHARS,                ! Total data chars this file xfer
  1051. ;   1324  1        SMSG_NAKS,                    ! Total number of NAKs this file xfer
  1052. ;   1325  1        RMSG_NAKS,                    ! Total number of NAKs received
  1053. ;   1326  1        XFR_TIME,                    ! Amount of time last xfr took
  1054. ;   1327  1        TOTAL_TIME,                    ! Total time of all xfrs
  1055. ;   1328  1                                !  this file xfer
  1056. ;   1329  1        LAST_ERROR : VECTOR [CH$ALLOCATION (MAX_MSG + 1)],    ! Last error message
  1057. ;   1330  1    !
  1058. ;   1331  1    ! Misc constants.
  1059. ;   1332  1    !
  1060. ;   1333  1        FILE_NAME : VECTOR [CH$ALLOCATION (MAX_FILE_NAME)],
  1061. ;   1334  1        FILE_SIZE,
  1062. ;   1335  1        SI_RETRIES,                    ! Send init retries to attempt
  1063. ;   1336  1        PKT_RETRIES,                ! Number of retries to try for a message
  1064. ;   1337  1        DELAY,                    ! Amount of time to delay
  1065. ;   1338  1        DUPLEX,                    ! Type of connection (half or full)
  1066. ;   1339  1        PARITY_TYPE,                ! Type of parity to use
  1067. ;   1340  1        DEV_PARITY_FLAG,                ! True if output device does
  1068. ;   1341  1                                !  parity, false if we do it
  1069. ;   1342  1        CHKTYPE,                    ! Type of block check desired
  1070. ;   1343  1        ABT_FLAG,                    ! True if aborted file should be discarded
  1071. ;   1344  1        DEBUG_FLAG,                    ! Debugging mode on/off
  1072. ;   1345  1        WARN_FLAG,                    ! File warning flag
  1073. ;   1346  1        IBM_CHAR,                    ! Turnaround character for IBM mode
  1074. ;   1347  1        ECHO_FLAG,                    ! Local echo flag
  1075. ;   1348  1        CONNECT_FLAG,                ! Connected flag; True if
  1076. ;   1349  1                                !  terminal and SET LINE are
  1077. ;   1350  1                                !  the same
  1078. ;   1351  1        ABT_CUR_FILE,                ! Abort current file
  1079. ;   1352  1        ABT_ALL_FILE,                ! Abort all files in stream
  1080. ;   1353  1        TYP_STS_FLAG,                ! Type status next message
  1081. ;   1354  1        TY_FIL,                    ! Type file specs
  1082. ;   1355  1        TY_PKT,                    ! Type packet info
  1083. ;   1356  1        FIL_NORMAL_FORM,                ! If true, file names should be normalized
  1084. ;   1357  1        GEN_1DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Data for generic command
  1085. ;   1358  1        GEN_1SIZE,                    ! Size of data in GEN_1DATA
  1086. ;   1359  1        GEN_2DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Second argument for generic command
  1087. ;   1360  1        GEN_2SIZE,                    ! Size of data in GEN_2DATA
  1088. ;   1361  1        GEN_3DATA : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Third arg for generic command
  1089. ;   1362  1        GEN_3SIZE;                    ! Size of data in GEN_3DATA
  1090. ;   1363  1    
  1091. ;   1364  1     %SBTTL 'Storage - Local'
  1092. ;   1365  1    !
  1093. ;   1366  1    ! LOCAL OWN STORAGE:
  1094. ;   1367  1    !
  1095. ;   1368  1    
  1096. ;   1369  1    OWN
  1097. ;   1370  1    !
  1098. ;   1371  1    ! Receive parameters
  1099. ;   1372  1    !
  1100. ;   1373  1        RECV_8QUOTE_CHR,                ! 8th-bit quoting character
  1101. ;   1374  1        REPT_CHR,                    ! Repeat prefix character
  1102. ;   1375  1        RECV_PKT_MSG,            ! [108]    ! Msg offset (4 std, 7 ext.)
  1103. ;   1376  1    !
  1104. ;   1377  1    ! Send parameters
  1105. ;   1378  1    !
  1106. ;   1379  1        SEND_PKT_SIZE,                ! Send packet size
  1107. ;   1380  1        SEND_NPAD,                    ! Padding length
  1108. ;   1381  1        SEND_PADCHAR,                ! Padding character
  1109. ;   1382  1        SEND_EOL,                    ! EOL character
  1110. ;   1383  1        SEND_QUOTE_CHR,                ! Quote character
  1111. ;   1384  1        SEND_8QUOTE_CHR,                ! 8-bit quoting character
  1112. ;   1385  1        SEND_INIT_SIZE,            ! [108]    ! Size of INIT message
  1113. ;   1386  1    !
  1114. ;   1387  1    ! Misc parameters
  1115. ;   1388  1    !
  1116. ;   1389  1        INI_CHK_TYPE,                ! Type of block checking from init message
  1117. ;   1390  1        BLK_CHK_TYPE,                ! Type of block check to use
  1118. ;   1391  1        FLAG_8QUOTE,                ! Flag to determine if doing 8bit quoting
  1119. ;   1392  1        FLAG_REPEAT,                ! True if doing repeated character compression
  1120. ;   1393  1        STATE,                    ! Current state
  1121. ;   1394  1        SIZE,                    ! Size of the current message
  1122. ;   1395  1    ! [108]                          Negative len for ext msgs
  1123. ;   1396  1        OLD_RETRIES,                ! Saved number of retries done.
  1124. ;   1397  1        NUM_RETRIES,                ! Number of retries
  1125. ;   1398  1        MSG_NUMBER,                    ! Current message number
  1126. ;   1399  1        REC_SEQ,                    ! Sequence number of msg in REC_MSG
  1127. ;   1400  1        REC_LENGTH,                    ! Length of the message recv'd
  1128. ;   1401  1        REC_TYPE,                    ! Type of the message received.
  1129. ;   1402  1        REC_MSG : VECTOR [CH$ALLOCATION (MAX_MSG + 1, CHR_SIZE)],    ! Message received
  1130. ;   1403  1        SND_MSG : VECTOR [CH$ALLOCATION (MAX_MSG + 1, CHR_SIZE)],    ! Message sent
  1131. ;   1404  1        FILE_CHARS,                    ! Number of characters sent or received
  1132. ;   1405  1        TEXT_HEAD_FLAG,                ! Text header received, not file header
  1133. ;   1406  1        NO_FILE_NEEDED,                ! Don't open a file
  1134. ;   1407  1        INIT_PKT_SENT,                ! Server-init sent and ACKed
  1135. ;   1408  1        GEN_TYPE,                    ! Command message type
  1136. ;   1409  1        GEN_SUBTYPE,                ! Generic command subtype
  1137. ;   1410  1        GET_CHR_ROUTINE,            ! Address of routine to get a character for BFR_FILL
  1138. ;   1411  1        PUT_CHR_ROUTINE;            ! Address of routine to put a character for BFR_EMPTY
  1139. ;   1412  1    !
  1140. ;   1413  1    ! KERMSG Global storage
  1141. ;   1414  1    !
  1142. ;   1415  1    GLOBAL
  1143. ;   1416  1        FLAG_FILE_OPEN;            ! File is opened.
  1144. ;   1417  1    
  1145. ;   1418  1     %SBTTL 'External references'
  1146. ;   1419  1    !
  1147. ;   1420  1    ! EXTERNAL REFERENCES:
  1148. ;   1421  1    !
  1149. ;   1422  1    ! Packet I/O routines
  1150. ;   1423  1    
  1151. ;   1424  1    EXTERNAL ROUTINE
  1152. ;   1425  1        SEND,                    ! Send a packet to the remote
  1153. ;   1426  1        IBM_WAIT,                    ! Wait for IBM turnaround
  1154. ;   1427  1        RECEIVE;                    ! Receive a packet from the remote
  1155. ;   1428  1    
  1156. ;   1429  1    !
  1157. ;   1430  1    ! Terminal I/O routines
  1158. ;   1431  1    !
  1159. ;   1432  1    
  1160. ;   1433  1    EXTERNAL ROUTINE
  1161. ;   1434  1        TERM_DUMP : NOVALUE,            ! Normal terminal output
  1162. ;   1435  1        DBG_DUMP : NOVALUE,                ! Debugging output
  1163. ;   1436  1        TT_SET_OUTPUT,                ! Set output routine
  1164. ;   1437  1        TT_CHAR : NOVALUE,                ! Output a single character
  1165. ;   1438  1        TT_CRLF : NOVALUE,                ! Output a CRLF
  1166. ;   1439  1        TT_NUMBER : NOVALUE,            ! Output a three digit number to the
  1167. ;   1440  1                                !  terminal
  1168. ;   1441  1        TT_TEXT : NOVALUE,                ! Output a string to the user's
  1169. ;   1442  1        TT_OUTPUT : NOVALUE;            ! Force buffered output to terminal
  1170. ;   1443  1    
  1171. ;   1444  1    ! Operating system routines and misc routines
  1172. ;   1445  1    
  1173. ;   1446  1    EXTERNAL ROUTINE
  1174. ;   1447  1        CRCCLC,                    ! Calculate a CRC-CCITT
  1175. ;   1448  1        XFR_STATUS : NOVALUE,            ! Routine to tell the user the
  1176. ;   1449  1                                !  status of a transfer
  1177. ;   1450  1        KRM_ERROR : NOVALUE,            ! Issue an error message
  1178. ;   1451  1        SY_LOGOUT : NOVALUE,            ! Log the job off
  1179. ;   1452  1        SY_GENERIC,                    ! Perform a generic command
  1180. ;   1453  1        SY_TIME,                    ! Return elapsed time in milliseconds
  1181. ;   1454  1        SY_DISMISS : NOVALUE;            ! Routine to dismiss for n seconds.
  1182. ;   1455  1    
  1183. ;   1456  1    !
  1184. ;   1457  1    ! External file processing routines
  1185. ;   1458  1    !
  1186. ;   1459  1    
  1187. ;   1460  1    EXTERNAL ROUTINE
  1188. ;   1461  1        FILE_OPEN,                    ! Open a file for reading/writing
  1189. ;   1462  1        FILE_CLOSE,                    ! Close an open file
  1190. ;   1463  1        NEXT_FILE,                    ! Determine if there is a next file
  1191. ;   1464  1                                !  and open it for reading.
  1192. ;   1465  1        GET_FILE,                    ! Get a byte from the file
  1193. ;   1466  1        PUT_FILE;                    ! Put a byte in the file.
  1194. ;   1467  1    
  1195. ;   1468  1     %SBTTL 'MSG_INIT'
  1196. ;   1469  1    
  1197. ;   1470  1    GLOBAL ROUTINE MSG_INIT : NOVALUE =
  1198. ;   1471  1    
  1199. ;   1472  1    !++
  1200. ;   1473  1    ! FUNCTIONAL DESCRIPTION:
  1201. ;   1474  1    !
  1202. ;   1475  1    !    This routine will initialize the message processing for
  1203. ;   1476  1    !    KERMIT-32/36.
  1204. ;   1477  1    !
  1205. ;   1478  1    ! CALLING SEQUENCE:
  1206. ;   1479  1    !
  1207. ;   1480  1    !    MSG_INIT();
  1208. ;   1481  1    !
  1209. ;   1482  1    ! INPUT PARAMETERS:
  1210. ;   1483  1    !
  1211. ;   1484  1    !    None.
  1212. ;   1485  1    !
  1213. ;   1486  1    ! IMPLICIT INPUTS:
  1214. ;   1487  1    !
  1215. ;   1488  1    !    None.
  1216. ;   1489  1    !
  1217. ;   1490  1    ! OUTPUT PARAMETERS:
  1218. ;   1491  1    !
  1219. ;   1492  1    !    None.
  1220. ;   1493  1    !
  1221. ;   1494  1    ! IMPLICIT OUTPUTS:
  1222. ;   1495  1    !
  1223. ;   1496  1    !    None.
  1224. ;   1497  1    !
  1225. ;   1498  1    ! COMPLETION CODES:
  1226. ;   1499  1    !
  1227. ;   1500  1    !    None.
  1228. ;   1501  1    !
  1229. ;   1502  1    ! SIDE EFFECTS:
  1230. ;   1503  1    !
  1231. ;   1504  1    !    None.
  1232. ;   1505  1    !
  1233. ;   1506  1    !--
  1234. ;   1507  1    
  1235. ;   1508  2        BEGIN
  1236. ;   1509  2    !
  1237. ;   1510  2    ! Initialize some variables
  1238. ;   1511  2    !
  1239. ;   1512  2    ! Receive parameters first
  1240. ;   1513  2    !
  1241. ;   1514  2        RCV_PKT_SIZE = MY_PKT_SIZE;
  1242. ;   1515  2        RCV_NPAD = MY_NPAD;
  1243. ;   1516  2        RCV_PADCHAR = MY_PAD_CHAR;
  1244. ;   1517  2        RCV_TIMEOUT = MY_TIME_OUT;
  1245. ;   1518  2        RCV_EOL = MY_EOL_CHAR;
  1246. ;   1519  2        RCV_QUOTE_CHR = MY_QUOTE_CHAR;
  1247. ;   1520  2        RCV_SOH = CHR_SOH;
  1248. ;   1521  2        RCV_8QUOTE_CHR = MY_8BIT_QUOTE;
  1249. ;   1522  2        SET_REPT_CHR = MY_REPEAT;
  1250. ;   1523  2    !
  1251. ;   1524  2    ! Send parameters.
  1252. ;   1525  2    !
  1253. ;   1526  2        SND_PKT_SIZE = -MY_PKT_SIZE;
  1254. ;   1527  2        SND_NPAD = -MY_NPAD;
  1255. ;   1528  2        SND_PADCHAR = -MY_PAD_CHAR;
  1256. ;   1529  2        SND_TIMEOUT = -MY_TIME_OUT;
  1257. ;   1530  2        SND_EOL = -MY_EOL_CHAR;
  1258. ;   1531  2        SND_QUOTE_CHR = -MY_QUOTE_CHAR;
  1259. ;   1532  2        SND_SOH = CHR_SOH;
  1260. ;   1533  2    !
  1261. ;   1534  2    ! Server parameters
  1262. ;   1535  2    !
  1263. ;   1536  2        SRV_TIMEOUT = 5*MY_TIME_OUT;
  1264. ;   1537  2    !
  1265. ;   1538  2    ! Other random parameters
  1266. ;   1539  2    !
  1267. ;   1540  2        PKT_RETRIES = MAX_PKT_RETRIES;        ! Number of retries per message
  1268. ;   1541  2        SI_RETRIES = MAX_SI_RETRIES;        ! Number of retries on send inits
  1269. ;   1542  2        DELAY = INIT_DELAY;
  1270. ;   1543  2        DUPLEX = DP_FULL;                ! Use full duplex
  1271. ;   1544  2        DEBUG_FLAG = FALSE;
  1272. ;   1545  2        WARN_FLAG = FALSE;
  1273. ;   1546  2        ECHO_FLAG = FALSE;
  1274. ;   1547  2        BLK_CHK_TYPE = CHK_1CHAR;            ! Start using single char checksum
  1275. ;   1548  2        CHKTYPE = MY_CHKTYPE;            ! Desired block check type
  1276. ;   1549  2        INI_CHK_TYPE = .CHKTYPE;            ! Same as default for now
  1277. ;   1550  2        DEV_PARITY_FLAG = FALSE;            ! We generate parity
  1278. ;   1551  2        PARITY_TYPE = PR_NONE;            ! No parity
  1279. ;   1552  2        ABT_FLAG = TRUE;                ! Discard incomplete files
  1280. ;   1553  2        FLAG_FILE_OPEN = FALSE;
  1281. ;   1554  2        IBM_CHAR = -1;                ![044] No handsake by default
  1282. ;   1555  2        TY_FIL = TRUE;                ! Default to typing files
  1283. ;   1556  2        TY_PKT = FALSE;                ! But not packet numbers
  1284. ;   1557  2        FIL_NORMAL_FORM = FNM_NORMAL;        ! Default to normal form names
  1285. ;   1558  2        GET_CHR_ROUTINE = GET_FILE;            ![025] Initialize the get-a-char routine
  1286. ;   1559  2        PUT_CHR_ROUTINE = PUT_FILE;            ![025] And the put-a-char
  1287. ;   1560  1        END;                    ! End of MSG_INIT
  1288.  
  1289.  
  1290.     .TITLE  KERMSG KERMSG - Kermit message processing
  1291.     .IDENT  \3.3.111\
  1292.  
  1293.     .PSECT  $OWN$,NOEXE,2
  1294.  
  1295. ;RECV_8QUOTE_CHR
  1296. U.37:    .BLKB   4                                       ;                      00000
  1297. ;REPT_CHR
  1298. U.38:    .BLKB   4                                       ;                      00004
  1299. ;RECV_PKT_MSG
  1300. U.39:    .BLKB   4                                       ;                      00008
  1301. ;SEND_PKT_SIZE
  1302. U.40:    .BLKB   4                                       ;                      0000C
  1303. ;SEND_NPAD
  1304. U.41:    .BLKB   4                                       ;                      00010
  1305. ;SEND_PADCHAR
  1306. U.42:    .BLKB   4                                       ;                      00014
  1307. ;SEND_EOL
  1308. U.43:    .BLKB   4                                       ;                      00018
  1309. ;SEND_QUOTE_CHR
  1310. U.44:    .BLKB   4                                       ;                      0001C
  1311. ;SEND_8QUOTE_CHR
  1312. U.45:    .BLKB   4                                       ;                      00020
  1313. ;SEND_INIT_SIZE
  1314. U.46:    .BLKB   4                                       ;                      00024
  1315. ;INI_CHK_TYPE
  1316. U.47:    .BLKB   4                                       ;                      00028
  1317. ;BLK_CHK_TYPE
  1318. U.48:    .BLKB   4                                       ;                      0002C
  1319. ;FLAG_8QUOTE
  1320. U.49:    .BLKB   4                                       ;                      00030
  1321. ;FLAG_REPEAT
  1322. U.50:    .BLKB   4                                       ;                      00034
  1323. ;STATE
  1324. U.51:    .BLKB   4                                       ;                      00038
  1325. ;SIZE
  1326. U.52:    .BLKB   4                                       ;                      0003C
  1327. ;OLD_RETRIES
  1328. U.53:    .BLKB   4                                       ;                      00040
  1329. ;NUM_RETRIES
  1330. U.54:    .BLKB   4                                       ;                      00044
  1331. ;MSG_NUMBER
  1332. U.55:    .BLKB   4                                       ;                      00048
  1333. ;REC_SEQ
  1334. U.56:    .BLKB   4                                       ;                      0004C
  1335. ;REC_LENGTH
  1336. U.57:    .BLKB   4                                       ;                      00050
  1337. ;REC_TYPE
  1338. U.58:    .BLKB   4                                       ;                      00054
  1339. ;REC_MSG
  1340. U.59:    .BLKB   1004                                       ;                      00058
  1341. ;SND_MSG
  1342. U.60:    .BLKB   1004                                       ;                      00444
  1343. ;FILE_CHARS
  1344. U.61:    .BLKB   4                                       ;                      00830
  1345. ;TEXT_HEAD_FLAG
  1346. U.62:    .BLKB   4                                       ;                      00834
  1347. ;NO_FILE_NEEDED
  1348. U.63:    .BLKB   4                                       ;                      00838
  1349. ;INIT_PKT_SENT
  1350. U.64:    .BLKB   4                                       ;                      0083C
  1351. ;GEN_TYPE
  1352. U.65:    .BLKB   4                                       ;                      00840
  1353. ;GEN_SUBTYPE
  1354. U.66:    .BLKB   4                                       ;                      00844
  1355. ;GET_CHR_ROUTINE
  1356. U.67:    .BLKB   4                                       ;                      00848
  1357. ;PUT_CHR_ROUTINE
  1358. U.68:    .BLKB   4                                       ;                      0084C
  1359.  
  1360.     .PSECT  $GLOBAL$,NOEXE,2
  1361.  
  1362. FLAG_FILE_OPEN::
  1363.     .BLKB   4                                       ;                      00000
  1364.  
  1365. FNM_NORMAL==        1
  1366. FNM_FULL==        2
  1367. FNM_UNTRAN==        4
  1368. PR_MIN==        0
  1369. PR_NONE==        0
  1370. PR_MARK==        1
  1371. PR_EVEN==        2
  1372. PR_ODD==        3
  1373. PR_SPACE==        4
  1374. PR_MAX==        4
  1375. GC_MIN==        1
  1376. GC_EXIT==        1
  1377. GC_DIRECTORY==        2
  1378. GC_DISK_USAGE==     3
  1379. GC_DELETE==        4
  1380. GC_TYPE==        5
  1381. GC_HELP==        6
  1382. GC_LOGOUT==        7
  1383. GC_LGN==        8
  1384. GC_CONNECT==        9
  1385. GC_RENAME==        10
  1386. GC_COPY==        11
  1387. GC_WHO==        12
  1388. GC_SEND_MSG==        13
  1389. GC_STATUS==        14
  1390. GC_COMMAND==        15
  1391. GC_KERMIT==        16
  1392. GC_JOURNAL==        17
  1393. GC_VARIABLE==        18
  1394. GC_PROGRAM==        19
  1395. GC_MAX==        19
  1396. DP_FULL==        0
  1397. DP_HALF==        1
  1398. CHK_1CHAR==        49
  1399. CHK_2CHAR==        50
  1400. CHK_CRC==        51
  1401. MAX_MSG==        1002
  1402.     .EXTRN  RCV_PKT_SIZE, RCV_NPAD, RCV_PADCHAR, RCV_TIMEOUT, RCV_EOL, RCV_QUOTE_CHR, RCV_SOH
  1403.     .EXTRN  RCV_8QUOTE_CHR, SET_REPT_CHR, SND_PKT_SIZE, SND_NPAD, SND_PADCHAR, SND_TIMEOUT, SND_EOL
  1404.     .EXTRN  SND_QUOTE_CHR, SND_SOH, SEND_TIMEOUT, SRV_TIMEOUT, SND_TOTAL_CHARS, RCV_TOTAL_CHARS
  1405.     .EXTRN  SND_DATA_CHARS, RCV_DATA_CHARS, SND_NAKS, RCV_NAKS, SND_COUNT, RCV_COUNT, SMSG_COUNT
  1406.     .EXTRN  RMSG_COUNT, SMSG_TOTAL_CHARS, RMSG_TOTAL_CHARS, SMSG_DATA_CHARS, RMSG_DATA_CHARS, SMSG_NAKS
  1407.     .EXTRN  RMSG_NAKS, XFR_TIME, TOTAL_TIME, LAST_ERROR, FILE_NAME, FILE_SIZE, SI_RETRIES, PKT_RETRIES
  1408.     .EXTRN  DELAY, DUPLEX, PARITY_TYPE, DEV_PARITY_FLAG, CHKTYPE, ABT_FLAG, DEBUG_FLAG, WARN_FLAG
  1409.     .EXTRN  IBM_CHAR, ECHO_FLAG, CONNECT_FLAG, ABT_CUR_FILE, ABT_ALL_FILE, TYP_STS_FLAG, TY_FIL
  1410.     .EXTRN  TY_PKT, FIL_NORMAL_FORM, GEN_1DATA, GEN_1SIZE, GEN_2DATA, GEN_2SIZE, GEN_3DATA, GEN_3SIZE
  1411.     .EXTRN  SEND, IBM_WAIT, RECEIVE, TERM_DUMP, DBG_DUMP, TT_SET_OUTPUT, TT_CHAR, TT_CRLF, TT_NUMBER
  1412.     .EXTRN  TT_TEXT, TT_OUTPUT, CRCCLC, XFR_STATUS, KRM_ERROR, SY_LOGOUT, SY_GENERIC, SY_TIME
  1413.     .EXTRN  SY_DISMISS, FILE_OPEN, FILE_CLOSE, NEXT_FILE, GET_FILE, PUT_FILE
  1414.  
  1415.     .PSECT  $CODE$,NOWRT,2
  1416.  
  1417.     .ENTRY  MSG_INIT, ^M<R2,R3>         ;MSG_INIT, Save R2,R3               1470                    000C   00000
  1418.     MOVAB   G^CHKTYPE, R3             ;CHKTYPE, R3                                     53 00000000G  00  9E   00002
  1419.     MOVAB   G^U.48, R2             ;U.48, R2                                     52 00000000'  00  9E   00009
  1420.     MOVZBL  #80, G^RCV_PKT_SIZE         ;#80, RCV_PKT_SIZE               1514 00000000G  00    50   8F  9A   00010
  1421.     CLRL    G^RCV_NPAD             ;RCV_NPAD                   1515           00000000G  00  D4   00018
  1422.     CLRL    G^RCV_PADCHAR             ;RCV_PADCHAR                   1516           00000000G  00  D4   0001E
  1423.     MOVL    #15, G^RCV_TIMEOUT         ;#15, RCV_TIMEOUT               1517 00000000G  00         0F  D0   00024
  1424.     MOVL    #13, G^RCV_EOL             ;#13, RCV_EOL                   1518 00000000G  00         0D  D0   0002B
  1425.     MOVL    #35, G^RCV_QUOTE_CHR         ;#35, RCV_QUOTE_CHR               1519 00000000G  00         23  D0   00032
  1426.     MOVL    #1, G^RCV_SOH             ;#1, RCV_SOH                   1520 00000000G  00         01  D0   00039
  1427.     MOVL    #38, G^RCV_8QUOTE_CHR         ;#38, RCV_8QUOTE_CHR               1521 00000000G  00         26  D0   00040
  1428.     MOVZBL  #126, G^SET_REPT_CHR         ;#126, SET_REPT_CHR               1522 00000000G  00    7E   8F  9A   00047
  1429.     CVTBL   #-80, G^SND_PKT_SIZE         ;#-80, SND_PKT_SIZE               1526 00000000G  00    B0   8F  98   0004F
  1430.     CLRL    G^SND_NPAD             ;SND_NPAD                   1527           00000000G  00  D4   00057
  1431.     CLRL    G^SND_PADCHAR             ;SND_PADCHAR                   1528           00000000G  00  D4   0005D
  1432.     MNEGL   #15, G^SND_TIMEOUT         ;#15, SND_TIMEOUT               1529 00000000G  00         0F  CE   00063
  1433.     MNEGL   #13, G^SND_EOL             ;#13, SND_EOL                   1530 00000000G  00         0D  CE   0006A
  1434.     MNEGL   #35, G^SND_QUOTE_CHR         ;#35, SND_QUOTE_CHR               1531 00000000G  00         23  CE   00071
  1435.     MOVL    #1, G^SND_SOH             ;#1, SND_SOH                   1532 00000000G  00         01  D0   00078
  1436.     MOVZBL  #75, G^SRV_TIMEOUT         ;#75, SRV_TIMEOUT               1536 00000000G  00    4B   8F  9A   0007F
  1437.     MOVL    #16, G^PKT_RETRIES         ;#16, PKT_RETRIES               1540 00000000G  00         10  D0   00087
  1438.     MOVL    #5, G^SI_RETRIES         ;#5, SI_RETRIES               1541 00000000G  00         05  D0   0008E
  1439.     MOVL    #5, G^DELAY             ;#5, DELAY                   1542 00000000G  00         05  D0   00095
  1440.     CLRL    G^DUPLEX             ;DUPLEX                   1543           00000000G  00  D4   0009C
  1441.     CLRL    G^DEBUG_FLAG             ;DEBUG_FLAG                   1544           00000000G  00  D4   000A2
  1442.     CLRL    G^WARN_FLAG             ;WARN_FLAG                   1545           00000000G  00  D4   000A8
  1443.     CLRL    G^ECHO_FLAG             ;ECHO_FLAG                   1546           00000000G  00  D4   000AE
  1444.     MOVL    #49, (R2)             ;#49, BLK_CHK_TYPE               1547            62         31  D0   000B4
  1445.     MOVL    #49, (R3)             ;#49, CHKTYPE                   1548            63         31  D0   000B7
  1446.     MOVL    (R3), -4(R2)             ;CHKTYPE, INI_CHK_TYPE               1549       FC   A2         63  D0   000BA
  1447.     CLRL    G^DEV_PARITY_FLAG         ;DEV_PARITY_FLAG               1550           00000000G  00  D4   000BE
  1448.     CLRL    G^PARITY_TYPE             ;PARITY_TYPE                   1551           00000000G  00  D4   000C4
  1449.     MOVL    #1, G^ABT_FLAG             ;#1, ABT_FLAG                   1552 00000000G  00         01  D0   000CA
  1450.     CLRL    G^FLAG_FILE_OPEN         ;FLAG_FILE_OPEN               1553           00000000'  00  D4   000D1
  1451.     MNEGL   #1, G^IBM_CHAR             ;#1, IBM_CHAR                   1554 00000000G  00         01  CE   000D7
  1452.     MOVL    #1, G^TY_FIL             ;#1, TY_FIL                   1555 00000000G  00         01  D0   000DE
  1453.     CLRL    G^TY_PKT             ;TY_PKT                   1556           00000000G  00  D4   000E5
  1454.     MOVL    #1, G^FIL_NORMAL_FORM         ;#1, FIL_NORMAL_FORM               1557 00000000G  00         01  D0   000EB
  1455.     MOVAB   G^GET_FILE, 2076(R2)         ;GET_FILE, GET_CHR_ROUTINE           1558     081C   C2 00000000G  00  9E   000F2
  1456.     MOVAB   G^PUT_FILE, 2080(R2)         ;PUT_FILE, PUT_CHR_ROUTINE           1559     0820   C2 00000000G  00  9E   000FB
  1457.     RET                      ;                       1560                  04   00104
  1458.  
  1459. ; Routine Size:  261 bytes,    Routine Base:  $CODE$ + 0000
  1460.  
  1461.  
  1462. ;   1561  1    
  1463. ;   1562  1     %SBTTL 'SND_ERROR'
  1464. ;   1563  1    
  1465. ;   1564  1    GLOBAL ROUTINE SND_ERROR (COUNT, ADDRESS) : NOVALUE =
  1466. ;   1565  1    
  1467. ;   1566  1    !++
  1468. ;   1567  1    ! FUNCTIONAL DESCRIPTION:
  1469. ;   1568  1    !
  1470. ;   1569  1    !    This routine will send an error packet to the remote KERMIT.  It
  1471. ;   1570  1    !    is called with the count of characters and the address of the text.
  1472. ;   1571  1    !
  1473. ;   1572  1    ! CALLING SEQUENCE:
  1474. ;   1573  1    !
  1475. ;   1574  1    !    SND_ERROR(COUNT, %ASCII 'Error text');
  1476. ;   1575  1    !
  1477. ;   1576  1    ! INPUT PARAMETERS:
  1478. ;   1577  1    !
  1479. ;   1578  1    !    None.
  1480. ;   1579  1    !
  1481. ;   1580  1    ! IMPLICIT INPUTS:
  1482. ;   1581  1    !
  1483. ;   1582  1    !    None.
  1484. ;   1583  1    !
  1485. ;   1584  1    ! OUTPUT PARAMETERS:
  1486. ;   1585  1    !
  1487. ;   1586  1    !    None.
  1488. ;   1587  1    !
  1489. ;   1588  1    ! IMPLICIT OUTPUTS:
  1490. ;   1589  1    !
  1491. ;   1590  1    !    None.
  1492. ;   1591  1    !
  1493. ;   1592  1    ! COMPLETION CODES:
  1494. ;   1593  1    !
  1495. ;   1594  1    !    None.
  1496. ;   1595  1    !
  1497. ;   1596  1    ! SIDE EFFECTS:
  1498. ;   1597  1    !
  1499. ;   1598  1    !
  1500. ;   1599  1    !--
  1501. ;   1600  1    
  1502. ;   1601  2        BEGIN
  1503. ;   1602  2    !
  1504. ;   1603  2    ! Pack the message into the buffer
  1505. ;   1604  2    !
  1506. ;   1605  2        SET_STRING (CH$PTR (.ADDRESS), .COUNT, TRUE);
  1507. ;   1606  2        BFR_FILL (TRUE);
  1508. ;   1607  2        SET_STRING (0, 0, FALSE);
  1509. ;   1608  2    !
  1510. ;   1609  2    ! Save the last error message also
  1511. ;   1610  2    !
  1512. ;   1611  2    
  1513. ;   1612  2        IF .COUNT GTR MAX_MSG THEN COUNT = MAX_MSG;
  1514. ;   1613  2    
  1515. ;   1614  2        CH$COPY (.COUNT, CH$PTR (.ADDRESS), 0, MAX_MSG + 1, CH$PTR (LAST_ERROR));
  1516. ;   1615  2    
  1517. ;   1616  2        IF NOT SEND_PACKET (MSG_ERROR, .SIZE, .MSG_NUMBER) THEN RETURN KER_ABORTED;
  1518. ;   1617  2    
  1519. ;   1618  1        END;                    ! End of SND_ERROR
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.     .ENTRY  SND_ERROR, ^M<R2,R3,R4,R5,R6>     ;SND_ERROR, Save R2,R3,R4,R5,R6       1564                    007C   00000
  1526.     MOVAB   G^U.30, R6             ;U.30, R6                                     56 00000000V  00  9E   00002
  1527.     PUSHL   #1                 ;#1                       1605                  01  DD   00009
  1528.     PUSHL   4(AP)                 ;COUNT                                          04   AC  DD   0000B
  1529.     PUSHL   8(AP)                 ;ADDRESS                                      08   AC  DD   0000E
  1530.     CALLS   #3, (R6)             ;#3, SET_STRING                                 66         03  FB   00011
  1531.     PUSHL   #1                 ;#1                       1606                  01  DD   00014
  1532.     CALLS   #1, G^U.29             ;#1, U.29                          00000000V  00         01  FB   00016
  1533.     CLRQ    -(SP)                 ;-(SP)                       1607                  7E  7C   0001D
  1534.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   0001F
  1535.     CALLS   #3, (R6)             ;#3, SET_STRING                                 66         03  FB   00021
  1536.     CMPL    4(AP), #1002             ;COUNT, #1002                   1612 000003EA   8F    04   AC  D1   00024
  1537.     BLEQ    1$                 ;1$                                               06  15   0002C
  1538.     MOVZWL  #1002, 4(AP)             ;#1002, COUNT                                04   AC     03EA   8F  3C   0002E
  1539. 1$:    MOVC5   4(AP), @8(AP), #0, #1003, -     ;COUNT, @ADDRESS, #0, #1003, -        1614       08   BC    04   AC  2C   00034
  1540.         G^LAST_ERROR             ;LAST_ERROR                        03EB   8F         00       00039
  1541.                          ;                                  00000000G  00       0003D
  1542.     PUSHL   G^U.55                 ;U.55                       1616           00000000'  00  DD   00042
  1543.     PUSHL   G^U.52                 ;U.52                                        00000000'  00  DD   00048
  1544.     MOVZBL  #69, -(SP)             ;#69, -(SP)                                     7E    45   8F  9A   0004E
  1545.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   00052
  1546.     RET                      ;                       1618                  04   00059
  1547.  
  1548. ; Routine Size:  90 bytes,    Routine Base:  $CODE$ + 0105
  1549.  
  1550.  
  1551. ;   1619  1    
  1552. ;   1620  1     %SBTTL 'SERVER - Server mode'
  1553. ;   1621  1    
  1554. ;   1622  1    GLOBAL ROUTINE SERVER =
  1555. ;   1623  1    
  1556. ;   1624  1    !++
  1557. ;   1625  1    ! FUNCTIONAL DESCRIPTION:
  1558. ;   1626  1    !
  1559. ;   1627  1    !    This routine will handle the server function in the v2.0 protocol
  1560. ;   1628  1    !    for KERMIT.  This routine by it's nature will call various operating
  1561. ;   1629  1    !    system routines to do things like logging off the system.
  1562. ;   1630  1    !
  1563. ;   1631  1    ! CALLING SEQUENCE:
  1564. ;   1632  1    !
  1565. ;   1633  1    !    EXIT_FLAG = SERVER();
  1566. ;   1634  1    !
  1567. ;   1635  1    ! INPUT PARAMETERS:
  1568. ;   1636  1    !
  1569. ;   1637  1    !    None.
  1570. ;   1638  1    !
  1571. ;   1639  1    ! IMPLICIT INPUTS:
  1572. ;   1640  1    !
  1573. ;   1641  1    !    None.
  1574. ;   1642  1    !
  1575. ;   1643  1    ! OUTPUT PARAMETERS:
  1576. ;   1644  1    !
  1577. ;   1645  1    !    None.
  1578. ;   1646  1    !
  1579. ;   1647  1    ! IMPLICIT OUTPUTS:
  1580. ;   1648  1    !
  1581. ;   1649  1    !    None.
  1582. ;   1650  1    !
  1583. ;   1651  1    ! COMPLETION CODES:
  1584. ;   1652  1    !
  1585. ;   1653  1    !    None.
  1586. ;   1654  1    !
  1587. ;   1655  1    ! SIDE EFFECTS:
  1588. ;   1656  1    !
  1589. ;   1657  1    !    None.
  1590. ;   1658  1    !
  1591. ;   1659  1    !--
  1592. ;   1660  1    
  1593. ;   1661  2        BEGIN
  1594. ;   1662  2    
  1595. ;   1663  2        LOCAL
  1596. ;   1664  2        STATUS;                    ! Status returned by various routines
  1597. ;   1665  2    
  1598. ;   1666  2        DO
  1599. ;   1667  3        BEGIN
  1600. ;   1668  3        INIT_XFR ();
  1601. ;   1669  3        XFR_STATUS (%C'T', %C'I');        ! Now idle
  1602. ;   1670  3        STATUS = DO_TRANSACTION (STATE_ID);
  1603. ;   1671  3        END
  1604. ;   1672  2        UNTIL .STATUS EQL KER_EXIT OR .STATUS EQL KER_ABORTED;
  1605. ;   1673  2    
  1606. ;   1674  2        RETURN .STATUS;
  1607. ;   1675  1        END;                    ! End of GLOBAL ROUTINE SERVER
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.     .ENTRY  SERVER, ^M<R2>             ;SERVER, Save R2               1622                    0004   00000
  1614. 1$:    CALLS   #0, G^U.32             ;#0, U.32                   1668 00000000V  00         00  FB   00002
  1615.     MOVZBL  #73, -(SP)             ;#73, -(SP)                   1669            7E    49   8F  9A   00009
  1616.     MOVZBL  #84, -(SP)             ;#84, -(SP)                                     7E    54   8F  9A   0000D
  1617.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   00011
  1618.     PUSHL   #14                 ;#14                       1670                  0E  DD   00018
  1619.     CALLS   #1, G^U.1             ;#1, U.1                          00000000V  00         01  FB   0001A
  1620.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00021
  1621.     CMPL    R2, #134316203             ;STATUS, #134316203               1672 080180AB   8F         52  D1   00024
  1622.     BEQL    2$                 ;2$                                               09  13   0002B
  1623.     CMPL    R2, #134316258             ;STATUS, #134316258                      080180E2   8F         52  D1   0002D
  1624.     BNEQ    1$                 ;1$                                               CC  12   00034
  1625. 2$:    MOVL    R2, R0                 ;STATUS, R0                   1674            50         52  D0   00036
  1626.     RET                      ;                                               04   00039
  1627.  
  1628. ; Routine Size:  58 bytes,    Routine Base:  $CODE$ + 015F
  1629.  
  1630.  
  1631. ;   1676  1    
  1632. ;   1677  1     %SBTTL 'SEND_SWITCH'
  1633. ;   1678  1    
  1634. ;   1679  1    GLOBAL ROUTINE SEND_SWITCH =
  1635. ;   1680  1    
  1636. ;   1681  1    !++
  1637. ;   1682  1    ! FUNCTIONAL DESCRIPTION:
  1638. ;   1683  1    !
  1639. ;   1684  1    !    This routine is the state table switcher for sending files.  It
  1640. ;   1685  1    !    loops until either it is finished or an error is encountered.  The
  1641. ;   1686  1    !    routines called by SEND_SWITCH are responsible for changing the state.
  1642. ;   1687  1    !
  1643. ;   1688  1    ! CALLING SEQUENCE:
  1644. ;   1689  1    !
  1645. ;   1690  1    !    SEND_SWITCH();
  1646. ;   1691  1    !
  1647. ;   1692  1    ! INPUT PARAMETERS:
  1648. ;   1693  1    !
  1649. ;   1694  1    !    None.
  1650. ;   1695  1    !
  1651. ;   1696  1    ! IMPLICIT INPUTS:
  1652. ;   1697  1    !
  1653. ;   1698  1    !    None.
  1654. ;   1699  1    !
  1655. ;   1700  1    ! OUTPUT PARAMETERS:
  1656. ;   1701  1    !
  1657. ;   1702  1    !    Returns:
  1658. ;   1703  1    !        TRUE - File sent correctly.
  1659. ;   1704  1    !        FALSE - Aborted sending the file.
  1660. ;   1705  1    !
  1661. ;   1706  1    ! IMPLICIT OUTPUTS:
  1662. ;   1707  1    !
  1663. ;   1708  1    !    None.
  1664. ;   1709  1    !
  1665. ;   1710  1    ! COMPLETION CODES:
  1666. ;   1711  1    !
  1667. ;   1712  1    !    None.
  1668. ;   1713  1    !
  1669. ;   1714  1    ! SIDE EFFECTS:
  1670. ;   1715  1    !
  1671. ;   1716  1    !    None.
  1672. ;   1717  1    !
  1673. ;   1718  1    !--
  1674. ;   1719  1    
  1675. ;   1720  2        BEGIN
  1676. ;   1721  2    
  1677. ;   1722  2        LOCAL
  1678. ;   1723  2        STATUS;                    ! Status result
  1679. ;   1724  2    
  1680. ;   1725  2        IF .CONNECT_FLAG THEN SY_DISMISS (.DELAY);    ! Sleep if the user wanted us to
  1681. ;   1726  2    
  1682. ;   1727  2        INIT_XFR ();                ! Initialize for this transfer
  1683. ;   1728  2        TEXT_HEAD_FLAG = FALSE;            ! Set text flag correctly
  1684. ;   1729  2        XFR_STATUS (%C'I', %C'S');            ! Start of file send
  1685. ;   1730  2        STATUS = DO_TRANSACTION (STATE_S);        ! Call routine to do real work
  1686. ;   1731  2        XFR_STATUS (%C'T', %C'S');            ! Done with send
  1687. ;   1732  2        RETURN .STATUS;                ! Return the result
  1688. ;   1733  1        END;
  1689.  
  1690.  
  1691.  
  1692.  
  1693.  
  1694.     .ENTRY  SEND_SWITCH, ^M<R2,R3>         ;SEND_SWITCH, Save R2,R3           1679                    000C   00000
  1695.     MOVAB   G^XFR_STATUS, R3         ;XFR_STATUS, R3                                 53 00000000G  00  9E   00002
  1696.     BLBC    G^CONNECT_FLAG, 1$         ;CONNECT_FLAG, 1$               1725            0D 00000000G  00  E9   00009
  1697.     PUSHL   G^DELAY                 ;DELAY                                        00000000G  00  DD   00010
  1698.     CALLS   #1, G^SY_DISMISS         ;#1, SY_DISMISS                      00000000G  00         01  FB   00016
  1699. 1$:    CALLS   #0, G^U.32             ;#0, U.32                   1727 00000000V  00         00  FB   0001D
  1700.     CLRL    G^U.62                 ;U.62                       1728           00000000'  00  D4   00024
  1701.     MOVZBL  #83, -(SP)             ;#83, -(SP)                   1729            7E    53   8F  9A   0002A
  1702.     MOVZBL  #73, -(SP)             ;#73, -(SP)                                     7E    49   8F  9A   0002E
  1703.     CALLS   #2, (R3)             ;#2, XFR_STATUS                                 63         02  FB   00032
  1704.     PUSHL   #1                 ;#1                       1730                  01  DD   00035
  1705.     CALLS   #1, G^U.1             ;#1, U.1                          00000000V  00         01  FB   00037
  1706.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   0003E
  1707.     MOVZBL  #83, -(SP)             ;#83, -(SP)                   1731            7E    53   8F  9A   00041
  1708.     MOVZBL  #84, -(SP)             ;#84, -(SP)                                     7E    54   8F  9A   00045
  1709.     CALLS   #2, (R3)             ;#2, XFR_STATUS                                 63         02  FB   00049
  1710.     MOVL    R2, R0                 ;STATUS, R0                   1732            50         52  D0   0004C
  1711.     RET                      ;                                               04   0004F
  1712.  
  1713. ; Routine Size:  80 bytes,    Routine Base:  $CODE$ + 0199
  1714.  
  1715.  
  1716. ;   1734  1    
  1717. ;   1735  1     %SBTTL 'REC_SWITCH'
  1718. ;   1736  1    
  1719. ;   1737  1    GLOBAL ROUTINE REC_SWITCH =
  1720. ;   1738  1    
  1721. ;   1739  1    !++
  1722. ;   1740  1    ! FUNCTIONAL DESCRIPTION:
  1723. ;   1741  1    !
  1724. ;   1742  1    !    This routine will cause file(s) to be received by the remote
  1725. ;   1743  1    !    KERMIT.  This routine contains the main loop for the sending of the
  1726. ;   1744  1    !    data.
  1727. ;   1745  1    !
  1728. ;   1746  1    ! CALLING SEQUENCE:
  1729. ;   1747  1    !
  1730. ;   1748  1    !    REC_SWITCH();
  1731. ;   1749  1    !
  1732. ;   1750  1    ! INPUT PARAMETERS:
  1733. ;   1751  1    !
  1734. ;   1752  1    !    None.
  1735. ;   1753  1    !
  1736. ;   1754  1    ! IMPLICIT INPUTS:
  1737. ;   1755  1    !
  1738. ;   1756  1    !    FILE_DESC - Descriptor describing the file to be received by
  1739. ;   1757  1    !        the remote KERMIT.
  1740. ;   1758  1    !
  1741. ;   1759  1    ! OUTPUT PARAMETERS:
  1742. ;   1760  1    !
  1743. ;   1761  1    !    None.
  1744. ;   1762  1    !
  1745. ;   1763  1    ! IMPLICIT OUTPUTS:
  1746. ;   1764  1    !
  1747. ;   1765  1    !    None.
  1748. ;   1766  1    !
  1749. ;   1767  1    ! COMPLETION CODES:
  1750. ;   1768  1    !
  1751. ;   1769  1    !    True - File received correctly.
  1752. ;   1770  1    !    FALSE - File transfer aborted.
  1753. ;   1771  1    !
  1754. ;   1772  1    ! SIDE EFFECTS:
  1755. ;   1773  1    !
  1756. ;   1774  1    !    None.
  1757. ;   1775  1    !
  1758. ;   1776  1    !--
  1759. ;   1777  1    
  1760. ;   1778  2        BEGIN
  1761. ;   1779  2    
  1762. ;   1780  2        LOCAL
  1763. ;   1781  2        INIT_STATE,                ! State to start up DO_TRANSACTION in
  1764. ;   1782  2        STATUS;                    ! Status returned by various routines
  1765. ;   1783  2    
  1766. ;   1784  2        INIT_STATE = STATE_R;            ! Initialize the state
  1767. ;   1785  2        MSG_NUMBER = 0;
  1768. ;   1786  2        INIT_XFR ();                ! Initialize the per transfer info
  1769. ;   1787  2    !
  1770. ;   1788  2    ! Determine if they said REC <file-spec>
  1771. ;   1789  2    !    Send MSG_RCV_INIT and then receive the file
  1772. ;   1790  2    !
  1773. ;   1791  2    
  1774. ;   1792  2        IF .FILE_SIZE GTR 0
  1775. ;   1793  2        THEN
  1776. ;   1794  3        BEGIN
  1777. ;   1795  3        GEN_TYPE = MSG_RCV_INIT;        ! Use receive-init message
  1778. ;   1796  3        CH$MOVE (.FILE_SIZE, CH$PTR (FILE_NAME), CH$PTR (GEN_1DATA));
  1779. ;   1797  3        GEN_1SIZE = .FILE_SIZE;            ! Save the length
  1780. ;   1798  3        INIT_STATE = STATE_SI;            ! Start out with server init
  1781. ;   1799  2        END;
  1782. ;   1800  2    
  1783. ;   1801  2    !
  1784. ;   1802  2    ! Now receive the file normally
  1785. ;   1803  2    !
  1786. ;   1804  2        XFR_STATUS (%C'I', %C'R');            ! Start of a file receive
  1787. ;   1805  2        STATUS = DO_TRANSACTION (.INIT_STATE);
  1788. ;   1806  2        XFR_STATUS (%C'T', %C'R');            ! End of file receive
  1789. ;   1807  2        RETURN .STATUS;                ! Return the result
  1790. ;   1808  1        END;                    ! End of REC_SWITCH
  1791.  
  1792.  
  1793.  
  1794.  
  1795.  
  1796.     .ENTRY  REC_SWITCH, ^M<R2,R3,R4,R5,R6,-  ;REC_SWITCH, Save R2,R3,R4,R5,R6,R7,- 1737                    01FC   00000
  1797.         R7,R8>                 ;R8
  1798.     MOVAB   G^XFR_STATUS, R8         ;XFR_STATUS, R8                                 58 00000000G  00  9E   00002
  1799.     MOVL    #6, R7                 ;#6, INIT_STATE               1784            57         06  D0   00009
  1800.     CLRL    G^U.55                 ;U.55                       1785           00000000'  00  D4   0000C
  1801.     CALLS   #0, G^U.32             ;#0, U.32                   1786 00000000V  00         00  FB   00012
  1802.     MOVL    G^FILE_SIZE, R6             ;FILE_SIZE, R6                   1792            56 00000000G  00  D0   00019
  1803.     BLEQ    1$                 ;1$                                               1E  15   00020
  1804.     MOVZBL  #82, G^U.65             ;#82, U.65                   1795 00000000'  00    52   8F  9A   00022
  1805.     MOVC3   R6, G^FILE_NAME, G^GEN_1DATA     ;R6, FILE_NAME, GEN_1DATA           1796 00000000G  00         56  28   0002A
  1806.                          ;                                  00000000G  00       00031
  1807.     MOVL    R6, G^GEN_1SIZE             ;R6, GEN_1SIZE                   1797 00000000G  00         56  D0   00036
  1808.     MOVL    #13, R7                 ;#13, INIT_STATE               1798            57         0D  D0   0003D
  1809. 1$:    MOVZBL  #82, -(SP)             ;#82, -(SP)                   1804            7E    52   8F  9A   00040
  1810.     MOVZBL  #73, -(SP)             ;#73, -(SP)                                     7E    49   8F  9A   00044
  1811.     CALLS   #2, (R8)             ;#2, XFR_STATUS                                 68         02  FB   00048
  1812.     PUSHL   R7                 ;INIT_STATE                   1805                  57  DD   0004B
  1813.     CALLS   #1, G^U.1             ;#1, U.1                          00000000V  00         01  FB   0004D
  1814.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00054
  1815.     MOVZBL  #82, -(SP)             ;#82, -(SP)                   1806            7E    52   8F  9A   00057
  1816.     MOVZBL  #84, -(SP)             ;#84, -(SP)                                     7E    54   8F  9A   0005B
  1817.     CALLS   #2, (R8)             ;#2, XFR_STATUS                                 68         02  FB   0005F
  1818.     MOVL    R2, R0                 ;STATUS, R0                   1807            50         52  D0   00062
  1819.     RET                      ;                                               04   00065
  1820.  
  1821. ; Routine Size:  102 bytes,    Routine Base:  $CODE$ + 01E9
  1822.  
  1823.  
  1824. ;   1809  1    
  1825. ;   1810  1     %SBTTL 'Server -- DO_GENERIC - Execute a generic command'
  1826. ;   1811  1    
  1827. ;   1812  1    GLOBAL ROUTINE DO_GENERIC (TYPE) =
  1828. ;   1813  1    
  1829. ;   1814  1    !++
  1830. ;   1815  1    ! FUNCTIONAL DESCRIPTION:
  1831. ;   1816  1    !
  1832. ;   1817  1    !    This routine will send a generic command to the remote Kermit.
  1833. ;   1818  1    !    it will do all the processing required for the generic command
  1834. ;   1819  1    !    that was executed.  It will return to the caller after the
  1835. ;   1820  1    !    command has be executed.
  1836. ;   1821  1    !
  1837. ;   1822  1    ! CALLING SEQUENCE:
  1838. ;   1823  1    !
  1839. ;   1824  1    !    STATUS = DO_GENERIC (Command-type);
  1840. ;   1825  1    !
  1841. ;   1826  1    ! INPUT PARAMETERS:
  1842. ;   1827  1    !
  1843. ;   1828  1    !    Command-type -- Command type to be executed.
  1844. ;   1829  1    !
  1845. ;   1830  1    ! IMPLICIT INPUTS:
  1846. ;   1831  1    !
  1847. ;   1832  1    !    None.
  1848. ;   1833  1    !
  1849. ;   1834  1    ! OUTPUT PARAMETERS:
  1850. ;   1835  1    !
  1851. ;   1836  1    !    None.
  1852. ;   1837  1    !
  1853. ;   1838  1    ! IMPLICIT OUTPUTS:
  1854. ;   1839  1    !
  1855. ;   1840  1    !    None.
  1856. ;   1841  1    !
  1857. ;   1842  1    ! COMPLETION CODES:
  1858. ;   1843  1    !
  1859. ;   1844  1    !    None.
  1860. ;   1845  1    !
  1861. ;   1846  1    ! SIDE EFFECTS:
  1862. ;   1847  1    !
  1863. ;   1848  1    !    None.
  1864. ;   1849  1    !
  1865. ;   1850  1    !--
  1866. ;   1851  1    
  1867. ;   1852  2        BEGIN
  1868. ;   1853  2    
  1869. ;   1854  2        LOCAL
  1870. ;   1855  2        INIT_STATE;                ! Initial state for FSM
  1871. ;   1856  2    
  1872. ;   1857  2    !
  1873. ;   1858  2    ! Set up the per transfer items
  1874. ;   1859  2    !
  1875. ;   1860  2        INIT_XFR ();
  1876. ;   1861  2        NUM_RETRIES = 0;
  1877. ;   1862  2        MSG_NUMBER = 0;
  1878. ;   1863  2    !
  1879. ;   1864  2    ! These are all generic commands
  1880. ;   1865  2    !
  1881. ;   1866  2        GEN_TYPE = MSG_GENERIC;
  1882. ;   1867  2    !
  1883. ;   1868  2    ! Assume we will not need server init
  1884. ;   1869  2    !
  1885. ;   1870  2        INIT_STATE = STATE_SG;
  1886. ;   1871  2    
  1887. ;   1872  2        CASE .TYPE FROM GC_MIN TO GC_MAX OF
  1888. ;   1873  2        SET
  1889. ;   1874  2    
  1890. ;   1875  2        [GC_EXIT] :
  1891. ;   1876  2            GEN_SUBTYPE = MSG_GEN_EXIT;
  1892. ;   1877  2    
  1893. ;   1878  2        [GC_LOGOUT] :
  1894. ;   1879  2            GEN_SUBTYPE = MSG_GEN_LOGOUT;
  1895. ;   1880  2    
  1896. ;   1881  2        [GC_DIRECTORY] :
  1897. ;   1882  3            BEGIN
  1898. ;   1883  3            INIT_STATE = STATE_SI;        ! We will need server-init
  1899. ;   1884  3            GEN_SUBTYPE = MSG_GEN_DIRECTORY;
  1900. ;   1885  2            END;
  1901. ;   1886  2    
  1902. ;   1887  2        [GC_DISK_USAGE] :
  1903. ;   1888  3            BEGIN
  1904. ;   1889  3            INIT_STATE = STATE_SI;        ! We will need server-init
  1905. ;   1890  3            GEN_SUBTYPE = MSG_GEN_DISK_USAGE;
  1906. ;   1891  2            END;
  1907. ;   1892  2    
  1908. ;   1893  2        [GC_DELETE] :
  1909. ;   1894  2            GEN_SUBTYPE = MSG_GEN_DELETE;
  1910. ;   1895  2    
  1911. ;   1896  2        [GC_TYPE] :
  1912. ;   1897  3            BEGIN
  1913. ;   1898  3            INIT_STATE = STATE_SI;        ! We will need server-init
  1914. ;   1899  3            GEN_SUBTYPE = MSG_GEN_TYPE;
  1915. ;   1900  2            END;
  1916. ;   1901  2    
  1917. ;   1902  2        [GC_HELP] :
  1918. ;   1903  3            BEGIN
  1919. ;   1904  3            INIT_STATE = STATE_SI;        ! We will need server-init
  1920. ;   1905  3            GEN_SUBTYPE = MSG_GEN_HELP;
  1921. ;   1906  2            END;
  1922. ;   1907  2    
  1923. ;   1908  2        [GC_LGN] :
  1924. ;   1909  2            GEN_SUBTYPE = MSG_GEN_LOGIN;    ! Login just gets ACK
  1925. ;   1910  2    
  1926. ;   1911  2        [GC_CONNECT] :
  1927. ;   1912  2            GEN_SUBTYPE = MSG_GEN_CONNECT;    ! CWD just gets ACK
  1928. ;   1913  2    
  1929. ;   1914  2        [GC_RENAME] :
  1930. ;   1915  2            GEN_SUBTYPE = MSG_GEN_RENAME;    ! Rename file just needs ACK
  1931. ;   1916  2    
  1932. ;   1917  2        [GC_COPY] :
  1933. ;   1918  2            GEN_SUBTYPE = MSG_GEN_COPY;        ! Copy file just needs ACK
  1934. ;   1919  2    
  1935. ;   1920  2        [GC_WHO] :
  1936. ;   1921  3            BEGIN
  1937. ;   1922  3            INIT_STATE = STATE_SI;        ! May get large response
  1938. ;   1923  3            GEN_SUBTYPE = MSG_GEN_WHO;
  1939. ;   1924  2            END;
  1940. ;   1925  2    
  1941. ;   1926  2        [GC_SEND_MSG] :
  1942. ;   1927  2            GEN_SUBTYPE = MSG_GEN_SEND;        ! Just need an ACK
  1943. ;   1928  2    
  1944. ;   1929  2        [GC_STATUS] :
  1945. ;   1930  3            BEGIN
  1946. ;   1931  3            INIT_STATE = STATE_SI;        ! May get large response
  1947. ;   1932  3            GEN_SUBTYPE = MSG_GEN_QUERY;
  1948. ;   1933  2            END;
  1949. ;   1934  2    
  1950. ;   1935  2        [GC_COMMAND] :
  1951. ;   1936  3            BEGIN
  1952. ;   1937  3            INIT_STATE = STATE_SI;        ! Large response likely
  1953. ;   1938  3            GEN_TYPE = MSG_COMMAND;        ! This is host command
  1954. ;   1939  2            END;
  1955. ;   1940  2    
  1956. ;   1941  2        [GC_KERMIT] :
  1957. ;   1942  2            GEN_TYPE = MSG_KERMIT;        ! Perform Kermit command (short response)
  1958. ;   1943  2    
  1959. ;   1944  2        [GC_PROGRAM] :
  1960. ;   1945  3            BEGIN
  1961. ;   1946  3            INIT_STATE = STATE_SI;        ! Assume large response
  1962. ;   1947  3            GEN_SUBTYPE = MSG_GEN_PROGRAM;    ! Generic program command
  1963. ;   1948  2            END;
  1964. ;   1949  2    
  1965. ;   1950  2        [GC_JOURNAL] :
  1966. ;   1951  2            GEN_SUBTYPE = MSG_GEN_JOURNAL;    ! Do journal function (short reply)
  1967. ;   1952  2    
  1968. ;   1953  2        [GC_VARIABLE] :
  1969. ;   1954  2            GEN_SUBTYPE = MSG_GEN_VARIABLE;    ! Set or get a variable value
  1970. ;   1955  2    
  1971. ;   1956  2        [INRANGE, OUTRANGE] :
  1972. ;   1957  3            BEGIN
  1973. ;   1958  3            KRM_ERROR (KER_UNIMPLGEN);
  1974. ;   1959  3            RETURN STATE_A;
  1975. ;   1960  2            END;
  1976. ;   1961  2        TES;
  1977. ;   1962  2    
  1978. ;   1963  2        RETURN DO_TRANSACTION (.INIT_STATE);    ! Go do the command
  1979. ;   1964  1        END;                    ! End of DO_GENERIC
  1980.  
  1981.  
  1982.  
  1983.  
  1984.  
  1985.     .ENTRY  DO_GENERIC, ^M<R2,R3>         ;DO_GENERIC, Save R2,R3           1812                    000C   00000
  1986.     MOVAB   G^U.66, R3             ;U.66, R3                                     53 00000000'  00  9E   00002
  1987.     CALLS   #0, G^U.32             ;#0, U.32                   1860 00000000V  00         00  FB   00009
  1988.     CLRQ    -2048(R3)             ;NUM_RETRIES                   1861               F800   C3  7C   00010
  1989.     MOVZBL  #71, -4(R3)             ;#71, GEN_TYPE                   1866       FC   A3    47   8F  9A   00014
  1990.     MOVL    #12, R2                 ;#12, INIT_STATE               1870            52         0C  D0   00019
  1991.     CASEL   4(AP), #1, #18             ;TYPE, #1, #18                   1872            01    04   AC  CF   0001C
  1992.                          ;                                         12       00020
  1993. 1$:    .WORD   2$-1$,-                 ;2$-1$,-                                   0043       0037       00021
  1994.         4$-1$,-                 ;4$-1$,-                             0055       004C       00025
  1995.         5$-1$,-                 ;5$-1$,-                             0064       005B       00029
  1996.         6$-1$,-                 ;6$-1$,-                             006D       003D       0002D
  1997.         7$-1$,-                 ;7$-1$,-                             0079       0073       00031
  1998.         8$-1$,-                 ;8$-1$,-                             0085       007F       00035
  1999.         3$-1$,-                 ;3$-1$,-                             0094       008E       00039
  2000.         9$-1$,-                 ;9$-1$,-                             00A7       009D       0003D
  2001.         10$-1$,-             ;10$-1$,-                             00BD       00B7       00041
  2002.         11$-1$,-             ;11$-1$,-                                   00AE       00045
  2003.         12$-1$,-             ;12$-1$,-
  2004.         13$-1$,-             ;13$-1$,-
  2005.         14$-1$,-             ;14$-1$,-
  2006.         15$-1$,-             ;15$-1$,-
  2007.         16$-1$,-             ;16$-1$,-
  2008.         17$-1$,-             ;17$-1$,-
  2009.         19$-1$,-             ;19$-1$,-
  2010.         21$-1$,-             ;21$-1$,-
  2011.         18$-1$                 ;18$-1$
  2012.     PUSHL   #134316210             ;#134316210                   1958           080180B2   8F  DD   00047
  2013.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   0004D
  2014.     MOVL    #10, R0                 ;#10, R0                   1959            50         0A  D0   00054
  2015.     RET                      ;                                               04   00057
  2016. 2$:    MOVZBL  #70, (R3)             ;#70, GEN_SUBTYPE               1876            63    46   8F  9A   00058
  2017.     BRB     20$                 ;20$                                               7E  11   0005C
  2018. 3$:    MOVZBL  #76, (R3)             ;#76, GEN_SUBTYPE               1879            63    4C   8F  9A   0005E
  2019.     BRB     22$                 ;22$                                               7E  11   00062
  2020. 4$:    MOVL    #13, R2                 ;#13, INIT_STATE               1883            52         0D  D0   00064
  2021.     MOVZBL  #68, (R3)             ;#68, GEN_SUBTYPE               1884            63    44   8F  9A   00067
  2022.     BRB     22$                 ;22$                                               75  11   0006B
  2023. 5$:    MOVL    #13, R2                 ;#13, INIT_STATE               1889            52         0D  D0   0006D
  2024.     MOVZBL  #85, (R3)             ;#85, GEN_SUBTYPE               1890            63    55   8F  9A   00070
  2025.     BRB     22$                 ;22$                                               6C  11   00074
  2026. 6$:    MOVZBL  #69, (R3)             ;#69, GEN_SUBTYPE               1894            63    45   8F  9A   00076
  2027.     BRB     22$                 ;22$                                               66  11   0007A
  2028. 7$:    MOVL    #13, R2                 ;#13, INIT_STATE               1898            52         0D  D0   0007C
  2029.     MOVZBL  #84, (R3)             ;#84, GEN_SUBTYPE               1899            63    54   8F  9A   0007F
  2030.     BRB     22$                 ;22$                                               5D  11   00083
  2031. 8$:    MOVL    #13, R2                 ;#13, INIT_STATE               1904            52         0D  D0   00085
  2032.     MOVZBL  #72, (R3)             ;#72, GEN_SUBTYPE               1905            63    48   8F  9A   00088
  2033.     BRB     22$                 ;22$                                               54  11   0008C
  2034. 9$:    MOVZBL  #73, (R3)             ;#73, GEN_SUBTYPE               1909            63    49   8F  9A   0008E
  2035.     BRB     22$                 ;22$                                               4E  11   00092
  2036. 10$:    MOVZBL  #67, (R3)             ;#67, GEN_SUBTYPE               1912            63    43   8F  9A   00094
  2037.     BRB     22$                 ;22$                                               48  11   00098
  2038. 11$:    MOVZBL  #82, (R3)             ;#82, GEN_SUBTYPE               1915            63    52   8F  9A   0009A
  2039.     BRB     22$                 ;22$                                               42  11   0009E
  2040. 12$:    MOVZBL  #75, (R3)             ;#75, GEN_SUBTYPE               1918            63    4B   8F  9A   000A0
  2041.     BRB     22$                 ;22$                                               3C  11   000A4
  2042. 13$:    MOVL    #13, R2                 ;#13, INIT_STATE               1922            52         0D  D0   000A6
  2043.     MOVZBL  #87, (R3)             ;#87, GEN_SUBTYPE               1923            63    57   8F  9A   000A9
  2044.     BRB     22$                 ;22$                                               33  11   000AD
  2045. 14$:    MOVZBL  #77, (R3)             ;#77, GEN_SUBTYPE               1927            63    4D   8F  9A   000AF
  2046.     BRB     22$                 ;22$                                               2D  11   000B3
  2047. 15$:    MOVL    #13, R2                 ;#13, INIT_STATE               1931            52         0D  D0   000B5
  2048.     MOVZBL  #81, (R3)             ;#81, GEN_SUBTYPE               1932            63    51   8F  9A   000B8
  2049.     BRB     22$                 ;22$                                               24  11   000BC
  2050. 16$:    MOVL    #13, R2                 ;#13, INIT_STATE               1937            52         0D  D0   000BE
  2051.     MOVZBL  #67, -4(R3)             ;#67, GEN_TYPE                   1938       FC   A3    43   8F  9A   000C1
  2052.     BRB     22$                 ;22$                                               1A  11   000C6
  2053. 17$:    MOVZBL  #75, -4(R3)             ;#75, GEN_TYPE                   1942       FC   A3    4B   8F  9A   000C8
  2054.     BRB     22$                 ;22$                                               13  11   000CD
  2055. 18$:    MOVL    #13, R2                 ;#13, INIT_STATE               1946            52         0D  D0   000CF
  2056.     MOVZBL  #80, (R3)             ;#80, GEN_SUBTYPE               1947            63    50   8F  9A   000D2
  2057.     BRB     22$                 ;22$                                               0A  11   000D6
  2058. 19$:    MOVZBL  #74, (R3)             ;#74, GEN_SUBTYPE               1951            63    4A   8F  9A   000D8
  2059. 20$:    BRB     22$                 ;22$                                               04  11   000DC
  2060. 21$:    MOVZBL  #86, (R3)             ;#86, GEN_SUBTYPE               1954            63    56   8F  9A   000DE
  2061. 22$:    PUSHL   R2                 ;INIT_STATE                   1963                  52  DD   000E2
  2062.     CALLS   #1, G^U.1             ;#1, U.1                          00000000V  00         01  FB   000E4
  2063.     RET                      ;                                               04   000EB
  2064.  
  2065. ; Routine Size:  236 bytes,    Routine Base:  $CODE$ + 024F
  2066.  
  2067.  
  2068. ;   1965  1    
  2069. ;   1966  1     %SBTTL 'DO_TRANSACTION - Main loop for FSM'
  2070. ;   1967  1    ROUTINE DO_TRANSACTION (INIT_STATE) =
  2071. ;   1968  1    
  2072. ;   1969  1    !++
  2073. ;   1970  1    ! FUNCTIONAL DESCRIPTION:
  2074. ;   1971  1    !
  2075. ;   1972  1    !    This is the main routine for performing a Kermit transaction.
  2076. ;   1973  1    !    It is structured as a finite state machine with each state
  2077. ;   1974  1    !    determining the next based upon the packet which is received.
  2078. ;   1975  1    !    It is supplied with the initial state by the caller.
  2079. ;   1976  1    !
  2080. ;   1977  1    ! CALLING SEQUENCE:
  2081. ;   1978  1    !
  2082. ;   1979  1    !    Status = DO_TRANSACTION(.INIT_STATE);
  2083. ;   1980  1    !
  2084. ;   1981  1    ! INPUT PARAMETERS:
  2085. ;   1982  1    !
  2086. ;   1983  1    !    INIT_STATE - Initial state.
  2087. ;   1984  1    !
  2088. ;   1985  1    ! IMPLICIT INPUTS:
  2089. ;   1986  1    !
  2090. ;   1987  1    !    None.
  2091. ;   1988  1    !
  2092. ;   1989  1    ! OUTPUT PARAMETERS:
  2093. ;   1990  1    !
  2094. ;   1991  1    !    None.
  2095. ;   1992  1    !
  2096. ;   1993  1    ! IMPLICIT OUTPUTS:
  2097. ;   1994  1    !
  2098. ;   1995  1    !    None.
  2099. ;   1996  1    !
  2100. ;   1997  1    ! COMPLETION CODES:
  2101. ;   1998  1    !
  2102. ;   1999  1    !    None.
  2103. ;   2000  1    !
  2104. ;   2001  1    ! SIDE EFFECTS:
  2105. ;   2002  1    !
  2106. ;   2003  1    !    None.
  2107. ;   2004  1    !
  2108. ;   2005  1    !--
  2109. ;   2006  1    
  2110. ;   2007  2        BEGIN
  2111. ;   2008  2    
  2112. ;   2009  2        LOCAL
  2113. ;   2010  2        RETURN_VALUE;
  2114. ;   2011  2    
  2115. ;   2012  2        NUM_RETRIES = 0;                ! Initialize the number of retries
  2116. ;   2013  2        STATE = .INIT_STATE;            ! Initialize the state
  2117. ;   2014  2    
  2118. ;   2015  2        WHILE TRUE DO
  2119. ;   2016  2    
  2120. ;   2017  2        CASE .STATE FROM STATE_MIN TO STATE_MAX OF
  2121. ;   2018  2            SET
  2122. ;   2019  2    !
  2123. ;   2020  2    ! Send states
  2124. ;   2021  2    !
  2125. ;   2022  2    
  2126. ;   2023  2            [STATE_ID] :
  2127. ;   2024  2    !
  2128. ;   2025  2    ! Server while idle.  Set the timeout to twice the normal wait
  2129. ;   2026  2    ! and wait for something to show up
  2130. ;   2027  2    !
  2131. ;   2028  3            BEGIN
  2132. ;   2029  3    
  2133. ;   2030  3            LOCAL
  2134. ;   2031  3                SAVED_TIMEOUT;
  2135. ;   2032  3    
  2136. ;   2033  3            SAVED_TIMEOUT = .SEND_TIMEOUT;
  2137. ;   2034  3    
  2138. ;   2035  3            IF .SEND_TIMEOUT NEQ 0 THEN SEND_TIMEOUT = .SRV_TIMEOUT;
  2139. ;   2036  3    
  2140. ;   2037  3            STATE = REC_SERVER_IDLE ();
  2141. ;   2038  3            SEND_TIMEOUT = .SAVED_TIMEOUT;
  2142. ;   2039  2            END;
  2143. ;   2040  2    
  2144. ;   2041  2            [STATE_II] :
  2145. ;   2042  2    !
  2146. ;   2043  2    ! Here while server idle after having received a server-init packet
  2147. ;   2044  2    !
  2148. ;   2045  2            STATE = REC_SERVER_IDLE ();
  2149. ;   2046  2    
  2150. ;   2047  2            [STATE_FI, STATE_LG] :
  2151. ;   2048  2    !
  2152. ;   2049  2    ! Here when we are supposed to exit
  2153. ;   2050  2    !
  2154. ;   2051  2            RETURN KER_EXIT;
  2155. ;   2052  2    
  2156. ;   2053  2            [STATE_SD] :
  2157. ;   2054  2            STATE = SEND_DATA ();
  2158. ;   2055  2    
  2159. ;   2056  2            [STATE_SF] :
  2160. ;   2057  2            STATE = SEND_FILE ();
  2161. ;   2058  2    
  2162. ;   2059  2            [STATE_SZ] :
  2163. ;   2060  2            STATE = SEND_EOF ();
  2164. ;   2061  2    
  2165. ;   2062  2            [STATE_S] :
  2166. ;   2063  2            STATE = SEND_INIT ();
  2167. ;   2064  2    
  2168. ;   2065  2            [STATE_OF] :
  2169. ;   2066  2            STATE = SEND_OPEN_FILE ();
  2170. ;   2067  2    
  2171. ;   2068  2            [STATE_SI] :
  2172. ;   2069  2            STATE = SEND_SERVER_INIT ();
  2173. ;   2070  2    
  2174. ;   2071  2            [STATE_SG] :
  2175. ;   2072  2            STATE = SEND_GENCMD ();
  2176. ;   2073  2    
  2177. ;   2074  2            [STATE_SB] :
  2178. ;   2075  2            STATE = SEND_BREAK ();
  2179. ;   2076  2    !
  2180. ;   2077  2    ! Receiving of the data and the end of file message.
  2181. ;   2078  2    !
  2182. ;   2079  2    
  2183. ;   2080  2            [STATE_RD] :
  2184. ;   2081  2            STATE = REC_DATA ();
  2185. ;   2082  2    !
  2186. ;   2083  2    ! Receiving the FILE information of the break to end the transfer of
  2187. ;   2084  2    ! one or more files
  2188. ;   2085  2    !
  2189. ;   2086  2    
  2190. ;   2087  2            [STATE_RF] :
  2191. ;   2088  2            STATE = REC_FILE ();
  2192. ;   2089  2    !
  2193. ;   2090  2    ! Initialization for the receiving of a file
  2194. ;   2091  2    !
  2195. ;   2092  2    
  2196. ;   2093  2            [STATE_R] :
  2197. ;   2094  2            STATE = REC_INIT ();
  2198. ;   2095  2    !
  2199. ;   2096  2    ! Here if we have completed the receiving of the file
  2200. ;   2097  2    !
  2201. ;   2098  2    
  2202. ;   2099  2            [STATE_C] :
  2203. ;   2100  3            BEGIN
  2204. ;   2101  3            RETURN_VALUE = TRUE;
  2205. ;   2102  3            EXITLOOP;
  2206. ;   2103  2            END;
  2207. ;   2104  2    !
  2208. ;   2105  2    ! Here if we aborted the transfer or we have gotten into some random
  2209. ;   2106  2    ! state (internal KERMSG problem).
  2210. ;   2107  2    !
  2211. ;   2108  2    
  2212. ;   2109  2            [STATE_A, STATE_EX, STATE_ER, INRANGE, OUTRANGE] :
  2213. ;   2110  3            BEGIN
  2214. ;   2111  3            RETURN_VALUE = FALSE;
  2215. ;   2112  3    
  2216. ;   2113  3            IF .STATE EQL STATE_EX THEN RETURN_VALUE = KER_ABORTED;
  2217. ;   2114  3    
  2218. ;   2115  3            !
  2219. ;   2116  3            ! Determine if the file is still open and if so close it
  2220. ;   2117  3            !
  2221. ;   2118  3    
  2222. ;   2119  3            IF .FLAG_FILE_OPEN
  2223. ;   2120  3            THEN
  2224. ;   2121  4                BEGIN
  2225. ;   2122  4                FLAG_FILE_OPEN = FALSE;
  2226. ;   2123  4    
  2227. ;   2124  4                IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  2228. ;   2125  4                THEN
  2229. ;   2126  5                BEGIN
  2230. ;   2127  5                TT_TEXT (UPLIT (%ASCIZ' [Aborted]'));
  2231. ;   2128  5                TT_CRLF ();
  2232. ;   2129  4                END;
  2233. ;   2130  4    
  2234. ;   2131  5                FILE_CLOSE (.ABT_FLAG AND (.STATE EQL STATE_A OR .STATE EQL STATE_EX OR .STATE
  2235. ;   2132  4                EQL STATE_ER));
  2236. ;   2133  4                XFR_STATUS (%C'F', %C'A');
  2237. ;   2134  3                END;
  2238. ;   2135  3    
  2239. ;   2136  3    !
  2240. ;   2137  3    ! Give error if aborted due to too many retries
  2241. ;   2138  3    !
  2242. ;   2139  3    
  2243. ;   2140  3            IF .STATE EQL STATE_ER THEN KRM_ERROR (KER_RETRIES);
  2244. ;   2141  3    
  2245. ;   2142  3            EXITLOOP;
  2246. ;   2143  2            END;
  2247. ;   2144  2            TES;
  2248. ;   2145  2    
  2249. ;   2146  2    !
  2250. ;   2147  2    ! End the stats and return to the caller
  2251. ;   2148  2    !
  2252. ;   2149  2        END_STATS ();
  2253. ;   2150  2    !
  2254. ;   2151  2        RETURN .RETURN_VALUE;
  2255. ;   2152  1        END;                    ! End of DO_TRANSACTION
  2256.  
  2257.  
  2258.  
  2259.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  2260.  
  2261. P.AAA:    .ASCII  \ [Aborted]\<0><0>         ;                                65  74  72  6F  62  41  5B  20  00000
  2262.                          ;                                      00  00  5D  64  00008
  2263.  
  2264.  
  2265.  
  2266.     .PSECT  $CODE$,NOWRT,2
  2267.  
  2268. ;DO_TRANSACTION
  2269. U.1:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8>     ;Save R2,R3,R4,R5,R6,R7,R8           1967                    01FC   00000
  2270.     MOVAB   G^U.10, R8             ;U.10, R8                                     58 00000000V  00  9E   00002
  2271.     MOVAB   G^FLAG_FILE_OPEN, R7         ;FLAG_FILE_OPEN, R7                                 57 00000000'  00  9E   00009
  2272.     MOVAB   G^SEND_TIMEOUT, R6         ;SEND_TIMEOUT, R6                                 56 00000000G  00  9E   00010
  2273.     MOVAB   G^U.51, R5             ;U.51, R5                                     55 00000000'  00  9E   00017
  2274.     CLRL    12(R5)                 ;NUM_RETRIES                   2012             0C   A5  D4   0001E
  2275.     MOVL    4(AP), (R5)             ;INIT_STATE, STATE               2013            65    04   AC  D0   00021
  2276. 1$:    MOVL    (R5), R0             ;STATE, R0                   2017            50         65  D0   00025
  2277.     CASEL   R0, #1, #19             ;R0, #1, #19                                     01         50  CF   00028
  2278.                          ;                                         13       0002B
  2279. 2$:    .WORD   18$-2$,-             ;18$-2$,-                                   00E7       00F9       0002C
  2280.         16$-2$,-             ;16$-2$,-                             00F0       00DE       00030
  2281.         15$-2$,-             ;15$-2$,-                             0138       011D       00034
  2282.         17$-2$,-             ;17$-2$,-                             0126       012F       00038
  2283.         22$-2$,-             ;22$-2$,-                             0028       0145       0003C
  2284.         25$-2$,-             ;25$-2$,-                             0114       0028       00040
  2285.         24$-2$,-             ;24$-2$,-                             00B7       010B       00044
  2286.         23$-2$,-             ;23$-2$,-                             00D6       00D1       00048
  2287.         28$-2$,-             ;28$-2$,-                             0102       00D6       0004C
  2288.         3$-2$,-                 ;3$-2$,-                             0028       0028       00050
  2289.         3$-2$,-                 ;3$-2$,-
  2290.         21$-2$,-             ;21$-2$,-
  2291.         20$-2$,-             ;20$-2$,-
  2292.         11$-2$,-             ;11$-2$,-
  2293.         13$-2$,-             ;13$-2$,-
  2294.         14$-2$,-             ;14$-2$,-
  2295.         14$-2$,-             ;14$-2$,-
  2296.         19$-2$,-             ;19$-2$,-
  2297.         3$-2$,-                 ;3$-2$,-
  2298.         3$-2$                 ;3$-2$
  2299. 3$:    CLRL    R3                 ;RETURN_VALUE                   2111                  53  D4   00054
  2300.     CMPL    R0, #19                 ;R0, #19                   2113            13         50  D1   00056
  2301.     BNEQ    4$                 ;4$                                               07  12   00059
  2302.     MOVL    #134316258, R3             ;#134316258, RETURN_VALUE                             53 080180E2   8F  D0   0005B
  2303. 4$:    BLBC    (R7), 9$             ;FLAG_FILE_OPEN, 9$               2119            69         67  E9   00062
  2304.     CLRL    (R7)                 ;FLAG_FILE_OPEN               2122                  67  D4   00065
  2305.     BLBS    G^CONNECT_FLAG, 5$         ;CONNECT_FLAG, 5$               2124            1B 00000000G  00  E8   00067
  2306.     BLBC    G^TY_FIL, 5$             ;TY_FIL, 5$                                     14 00000000G  00  E9   0006E
  2307.     PUSHAB  G^P.AAA                 ;P.AAA                       2127           00000000'  00  9F   00075
  2308.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   0007B
  2309.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   2128 00000000G  00         00  FB   00082
  2310. 5$:    MOVL    (R5), R2             ;STATE, R2                   2131            52         65  D0   00089
  2311.     CLRL    R0                 ;R0                                               50  D4   0008C
  2312.     CMPL    R2, #10                 ;R2, #10                                     0A         52  D1   0008E
  2313.     BNEQ    6$                 ;6$                                               02  12   00091
  2314.     INCL    R0                 ;R0                                               50  D6   00093
  2315. 6$:    CLRL    R1                 ;R1                                               51  D4   00095
  2316.     CMPL    R2, #19                 ;R2, #19                                     13         52  D1   00097
  2317.     BNEQ    7$                 ;7$                                               02  12   0009A
  2318.     INCL    R1                 ;R1                                               51  D6   0009C
  2319. 7$:    BISL2   R0, R1                 ;R0, R1                                     51         50  C8   0009E
  2320.     CLRL    R0                 ;R0                       2132                  50  D4   000A1
  2321.     CMPL    R2, #20                 ;R2, #20                                     14         52  D1   000A3
  2322.     BNEQ    8$                 ;8$                                               02  12   000A6
  2323.     INCL    R0                 ;R0                                               50  D6   000A8
  2324. 8$:    BISL2   R1, R0                 ;R1, R0                                     50         51  C8   000AA
  2325.     MCOML   G^ABT_FLAG, R4             ;ABT_FLAG, R4                                     54 00000000G  00  D2   000AD
  2326.     BICL3   R4, R0, -(SP)             ;R4, R0, -(SP)                                     50         54  CB   000B4
  2327.                          ;                                         7E       000B7
  2328.     CALLS   #1, G^FILE_CLOSE         ;#1, FILE_CLOSE                      00000000G  00         01  FB   000B8
  2329.     MOVZBL  #65, -(SP)             ;#65, -(SP)                   2133            7E    41   8F  9A   000BF
  2330.     MOVZBL  #70, -(SP)             ;#70, -(SP)                                     7E    46   8F  9A   000C3
  2331.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   000C7
  2332. 9$:    CMPL    (R5), #20             ;STATE, #20                   2140            14         65  D1   000CE
  2333.     BNEQ    10$                 ;10$                                               0D  12   000D1
  2334.     PUSHL   #134316194             ;#134316194                                    080180A2   8F  DD   000D3
  2335.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   000D9
  2336. 10$:    BRW     29$                 ;29$                       2142                0091  31   000E0
  2337. 11$:    MOVL    (R6), R0             ;SEND_TIMEOUT, R0               2033            50         66  D0   000E3
  2338.     MOVL    R0, R2                 ;R0, SAVED_TIMEOUT                                 52         50  D0   000E6
  2339.     BEQL    12$                 ;12$                       2035                  07  13   000E9
  2340.     MOVL    G^SRV_TIMEOUT, (R6)         ;SRV_TIMEOUT, SEND_TIMEOUT                             66 00000000G  00  D0   000EB
  2341. 12$:    CALLS   #0, (R8)             ;#0, REC_SERVER_IDLE               2037            68         00  FB   000F2
  2342.     MOVL    R0, (R5)             ;R0, STATE                                     65         50  D0   000F5
  2343.     MOVL    R2, (R6)             ;SAVED_TIMEOUT, SEND_TIMEOUT           2038            66         52  D0   000F8
  2344.     BRB     27$                 ;27$                                               71  11   000FB
  2345. 13$:    CALLS   #0, (R8)             ;#0, REC_SERVER_IDLE               2045            68         00  FB   000FD
  2346.     BRB     26$                 ;26$                                               69  11   00100
  2347. 14$:    MOVL    #134316203, R0             ;#134316203, R0               2051            50 080180AB   8F  D0   00102
  2348.     RET                      ;                                               04   00109
  2349. 15$:    CALLS   #0, G^U.3             ;#0, U.3                   2054 00000000V  00         00  FB   0010A
  2350.     BRB     26$                 ;26$                                               58  11   00111
  2351. 16$:    CALLS   #0, G^U.4             ;#0, U.4                   2057 00000000V  00         00  FB   00113
  2352.     BRB     26$                 ;26$                                               4F  11   0011A
  2353. 17$:    CALLS   #0, G^U.7             ;#0, U.7                   2060 00000000V  00         00  FB   0011C
  2354.     BRB     26$                 ;26$                                               46  11   00123
  2355. 18$:    CALLS   #0, G^U.8             ;#0, U.8                   2063 00000000V  00         00  FB   00125
  2356.     BRB     26$                 ;26$                                               3D  11   0012C
  2357. 19$:    CALLS   #0, G^U.5             ;#0, U.5                   2066 00000000V  00         00  FB   0012E
  2358.     BRB     26$                 ;26$                                               34  11   00135
  2359. 20$:    CALLS   #0, G^U.2             ;#0, U.2                   2069 00000000V  00         00  FB   00137
  2360.     BRB     26$                 ;26$                                               2B  11   0013E
  2361. 21$:    CALLS   #0, G^U.6             ;#0, U.6                   2072 00000000V  00         00  FB   00140
  2362.     BRB     26$                 ;26$                                               22  11   00147
  2363. 22$:    CALLS   #0, G^U.9             ;#0, U.9                   2075 00000000V  00         00  FB   00149
  2364.     BRB     26$                 ;26$                                               19  11   00150
  2365. 23$:    CALLS   #0, G^U.13             ;#0, U.13                   2081 00000000V  00         00  FB   00152
  2366.     BRB     26$                 ;26$                                               10  11   00159
  2367. 24$:    CALLS   #0, G^U.12             ;#0, U.12                   2088 00000000V  00         00  FB   0015B
  2368.     BRB     26$                 ;26$                                               07  11   00162
  2369. 25$:    CALLS   #0, G^U.11             ;#0, U.11                   2094 00000000V  00         00  FB   00164
  2370. 26$:    MOVL    R0, (R5)             ;R0, STATE                                     65         50  D0   0016B
  2371. 27$:    BRW     1$                 ;1$                                             FEB4  31   0016E
  2372. 28$:    MOVL    #1, R3                 ;#1, RETURN_VALUE               2101            53         01  D0   00171
  2373. 29$:    CALLS   #0, G^U.18             ;#0, U.18                   2149 00000000V  00         00  FB   00174
  2374.     MOVL    R3, R0                 ;RETURN_VALUE, R0               2151            50         53  D0   0017B
  2375.     RET                      ;                                               04   0017E
  2376.  
  2377. ; Routine Size:  383 bytes,    Routine Base:  $CODE$ + 033B
  2378.  
  2379.  
  2380. ;   2153  1     %SBTTL 'REC_SERVER_IDLE - Idle server state'
  2381. ;   2154  1    ROUTINE REC_SERVER_IDLE =
  2382. ;   2155  1    
  2383. ;   2156  1    !++
  2384. ;   2157  1    ! FUNCTIONAL DESCRIPTION:
  2385. ;   2158  1    !
  2386. ;   2159  1    ! This routine is called from DO_TRANSACTION when is the server idle
  2387. ;   2160  1    ! state.  It will receive a message and properly dispatch to the new
  2388. ;   2161  1    ! state.
  2389. ;   2162  1    !
  2390. ;   2163  1    ! CALLING SEQUENCE:
  2391. ;   2164  1    !
  2392. ;   2165  1    !    STATE = REC_SERVER_IDLE ();
  2393. ;   2166  1    !
  2394. ;   2167  1    ! INPUT PARAMETERS:
  2395. ;   2168  1    !
  2396. ;   2169  1    !    None.
  2397. ;   2170  1    !
  2398. ;   2171  1    ! IMPLICIT INPUTS:
  2399. ;   2172  1    !
  2400. ;   2173  1    !    Almost everything.
  2401. ;   2174  1    !
  2402. ;   2175  1    ! OUPTUT PARAMETERS:
  2403. ;   2176  1    !
  2404. ;   2177  1    !    Routine value is new state for FSM
  2405. ;   2178  1    !
  2406. ;   2179  1    ! IMPLICIT OUTPUTS:
  2407. ;   2180  1    !
  2408. ;   2181  1    !    None.
  2409. ;   2182  1    !
  2410. ;   2183  1    ! COMPLETION CODES:
  2411. ;   2184  1    !
  2412. ;   2185  1    !    None.
  2413. ;   2186  1    !
  2414. ;   2187  1    ! SIDE EFFECTS:
  2415. ;   2188  1    !
  2416. ;   2189  1    !    None.
  2417. ;   2190  1    !
  2418. ;   2191  1    !--
  2419. ;   2192  1    
  2420. ;   2193  2        BEGIN
  2421. ;   2194  2    
  2422. ;   2195  2        LOCAL
  2423. ;   2196  2        STATUS;
  2424. ;   2197  2    
  2425. ;   2198  2        STATUS = REC_PACKET ();
  2426. ;   2199  2    !
  2427. ;   2200  2    ! Now determine what to do by the type of message we have receive.
  2428. ;   2201  2    !
  2429. ;   2202  2    
  2430. ;   2203  2        IF .STATUS EQL KER_ABORTED THEN RETURN STATE_EX;
  2431. ;   2204  2    
  2432. ;   2205  2        IF .STATUS
  2433. ;   2206  2        THEN
  2434. ;   2207  3        BEGIN
  2435. ;   2208  3    
  2436. ;   2209  3        SELECTONE .REC_TYPE OF
  2437. ;   2210  3            SET
  2438. ;   2211  3            !
  2439. ;   2212  3            ! Server initialization message received. ACK the
  2440. ;   2213  3            ! message and continue.
  2441. ;   2214  3            !
  2442. ;   2215  3    
  2443. ;   2216  3            [MSG_SER_INIT] :
  2444. ;   2217  4            BEGIN
  2445. ;   2218  4    
  2446. ;   2219  5            IF (STATUS = PRS_SEND_INIT ())
  2447. ;   2220  4            THEN
  2448. ;   2221  5                BEGIN
  2449. ;   2222  5                SET_SEND_INIT ();
  2450. ;   2223  5    
  2451. ;   2224  6                IF (STATUS = SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .REC_SEQ)) ! [108]
  2452. ;   2225  5                THEN
  2453. ;   2226  6                BEGIN
  2454. ;   2227  6                SND_PKT_SIZE = -.SEND_PKT_SIZE;
  2455. ;   2228  6                SND_TIMEOUT = -.SEND_TIMEOUT;
  2456. ;   2229  6                SND_NPAD = -.SEND_NPAD;
  2457. ;   2230  6                SND_PADCHAR = -.SEND_PADCHAR;
  2458. ;   2231  6                SND_EOL = -.SEND_EOL;
  2459. ;   2232  6                SND_QUOTE_CHR = -.SEND_QUOTE_CHR;
  2460. ;   2233  6                RCV_8QUOTE_CHR = .SEND_8QUOTE_CHR;
  2461. ;   2234  6                CHKTYPE = .INI_CHK_TYPE;
  2462. ;   2235  6                SET_REPT_CHR = .REPT_CHR;
  2463. ;   2236  6                RETURN STATE_II;    ! Now idle after INIT
  2464. ;   2237  5                END;
  2465. ;   2238  5    
  2466. ;   2239  4                END;
  2467. ;   2240  4    
  2468. ;   2241  4            KRM_ERROR (KER_PROTOERR);
  2469. ;   2242  4            RETURN STATE_A;
  2470. ;   2243  3            END;
  2471. ;   2244  3            !
  2472. ;   2245  3            ! Send init message received.  We must ACK the message and
  2473. ;   2246  3            ! then attempt to receive a file from the remote.
  2474. ;   2247  3            !
  2475. ;   2248  3    
  2476. ;   2249  3            [MSG_SND_INIT] :
  2477. ;   2250  4            BEGIN
  2478. ;   2251  4            MSG_NUMBER = (.REC_SEQ + 1) AND %O'77';
  2479. ;   2252  4    
  2480. ;   2253  5            IF (STATUS = PRS_SEND_INIT ())
  2481. ;   2254  4            THEN
  2482. ;   2255  5                BEGIN
  2483. ;   2256  5                SET_SEND_INIT ();
  2484. ;   2257  5                !
  2485. ;   2258  5                ! ACK the message then receive everything.
  2486. ;   2259  5                !
  2487. ;   2260  5    
  2488. ;   2261  5                IF SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .REC_SEQ) ! [108]
  2489. ;   2262  5                THEN
  2490. ;   2263  6                BEGIN
  2491. ;   2264  6                BLK_CHK_TYPE = .INI_CHK_TYPE;    ! Switch to desired form of block check
  2492. ;   2265  6                XFR_STATUS (%C'I', %C'R');    ! Start of file receive
  2493. ;   2266  6                RETURN STATE_RF;
  2494. ;   2267  5                END;
  2495. ;   2268  5    
  2496. ;   2269  4                END;
  2497. ;   2270  4    
  2498. ;   2271  4            KRM_ERROR (KER_PROTOERR);
  2499. ;   2272  4            RETURN STATE_A;
  2500. ;   2273  3            END;
  2501. ;   2274  3            !
  2502. ;   2275  3            ! Here if we receive a receive init message.
  2503. ;   2276  3            ! We will be sending a file to the other end.
  2504. ;   2277  3            !
  2505. ;   2278  3    
  2506. ;   2279  3            [MSG_RCV_INIT] :
  2507. ;   2280  4            BEGIN
  2508. ;   2281  4            !
  2509. ;   2282  4            ! Move the file specification if we received one
  2510. ;   2283  4            !
  2511. ;   2284  4            SET_STRING (CH$PTR (FILE_NAME), MAX_FILE_NAME, TRUE);
  2512. ;   2285  4            BFR_EMPTY ();
  2513. ;   2286  4            FILE_SIZE = SET_STRING (0, 0, FALSE);
  2514. ;   2287  4            CH$WCHAR (CHR_NUL, CH$PTR (FILE_NAME, .FILE_SIZE));
  2515. ;   2288  4    
  2516. ;   2289  4            IF .FILE_SIZE GTR 0
  2517. ;   2290  4            THEN
  2518. ;   2291  5                BEGIN
  2519. ;   2292  5                XFR_STATUS (%C'I', %C'S');    ! Start of a file send
  2520. ;   2293  5                RETURN STATE_S;
  2521. ;   2294  4                END;
  2522. ;   2295  4    
  2523. ;   2296  4            KRM_ERROR (KER_PROTOERR);
  2524. ;   2297  4            RETURN STATE_A;
  2525. ;   2298  3            END;
  2526. ;   2299  3    !
  2527. ;   2300  3    ! Generic KERMIT commands
  2528. ;   2301  3    !
  2529. ;   2302  3    
  2530. ;   2303  3            [MSG_GENERIC] :
  2531. ;   2304  3            RETURN SERVER_GENERIC ();
  2532. ;   2305  3    !
  2533. ;   2306  3    ! Host command
  2534. ;   2307  3    !
  2535. ;   2308  3    
  2536. ;   2309  3            [MSG_COMMAND] :
  2537. ;   2310  3            RETURN HOST_COMMAND ();
  2538. ;   2311  3    !
  2539. ;   2312  3    ! Kermit command
  2540. ;   2313  3    !
  2541. ;   2314  3    
  2542. ;   2315  3            [MSG_KERMIT] :
  2543. ;   2316  3            RETURN KERMIT_COMMAND ();
  2544. ;   2317  3    !
  2545. ;   2318  3    ! Unimplimented server routines
  2546. ;   2319  3    !
  2547. ;   2320  3    
  2548. ;   2321  3            [OTHERWISE] :
  2549. ;   2322  4            BEGIN
  2550. ;   2323  4            KRM_ERROR (KER_UNISRV);
  2551. ;   2324  4            RETURN STATE_A;
  2552. ;   2325  3            END;
  2553. ;   2326  3            TES;
  2554. ;   2327  3    
  2555. ;   2328  2        END;
  2556. ;   2329  2    
  2557. ;   2330  2    !
  2558. ;   2331  2    ! If we get here, we must have gotten something random.  Therefore,
  2559. ;   2332  2    ! just send a NAK and remain in the current state (unless we have done this
  2560. ;   2333  2    ! too many times).
  2561. ;   2334  2    !
  2562. ;   2335  2        NUM_RETRIES = .NUM_RETRIES + 1;
  2563. ;   2336  2    
  2564. ;   2337  2        IF .NUM_RETRIES GTR .SI_RETRIES THEN RETURN STATE_A;
  2565. ;   2338  2    
  2566. ;   2339  2        IF SEND_PACKET (MSG_NAK, 0, 0) THEN RETURN .STATE ELSE RETURN STATE_EX;
  2567. ;   2340  2    
  2568. ;   2341  1        END;                    ! End of REC_SERVER_IDLE
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574. ;REC_SERVER_IDLE
  2575. U.10:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10>  ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10     2154                    07FC   00000
  2576.     MOVAB   G^U.30, R10             ;U.30, R10                                     5A 00000000V  00  9E   00002
  2577.     MOVAB   G^FILE_NAME, R9             ;FILE_NAME, R9                                     59 00000000G  00  9E   00009
  2578.     MOVAB   G^XFR_STATUS, R8         ;XFR_STATUS, R8                                 58 00000000G  00  9E   00010
  2579.     MOVAB   G^U.20, R7             ;U.20, R7                                     57 00000000V  00  9E   00017
  2580.     MOVAB   G^U.21, R6             ;U.21, R6                                     56 00000000V  00  9E   0001E
  2581.     MOVAB   G^U.24, R5             ;U.24, R5                                     55 00000000V  00  9E   00025
  2582.     MOVAB   G^U.56, R4             ;U.56, R4                                     54 00000000'  00  9E   0002C
  2583.     CALLS   #0, G^U.26             ;#0, U.26                   2198 00000000V  00         00  FB   00033
  2584.     MOVL    R0, R3                 ;R0, STATUS                                     53         50  D0   0003A
  2585.     CMPL    R3, #134316258             ;STATUS, #134316258               2203 080180E2   8F         53  D1   0003D
  2586.     BNEQ    1$                 ;1$                                               03  12   00044
  2587.     BRW     15$                 ;15$                                             016D  31   00046
  2588. 1$:    BLBS    R3, 2$                 ;STATUS, 2$                   2205            03         53  E8   00049
  2589.     BRW     12$                 ;12$                                             0145  31   0004C
  2590. 2$:    MOVL    8(R4), R2             ;REC_TYPE, R2                   2209            52    08   A4  D0   0004F
  2591.     CMPL    R2, #73                 ;R2, #73                   2216 00000049   8F         52  D1   00053
  2592.     BNEQ    3$                 ;3$                                               6D  12   0005A
  2593.     CALLS   #0, (R6)             ;#0, PRS_SEND_INIT               2219            66         00  FB   0005C
  2594.     MOVL    R0, R3                 ;R0, STATUS                                     53         50  D0   0005F
  2595.     BLBC    R3, 4$                 ;STATUS, 4$                                     7D         53  E9   00062
  2596.     CALLS   #0, (R7)             ;#0, SET_SEND_INIT               2222            67         00  FB   00065
  2597.     PUSHL   (R4)                 ;REC_SEQ                   2224                  64  DD   00068
  2598.     PUSHL   -40(R4)                 ;SEND_INIT_SIZE                                  D8   A4  DD   0006A
  2599.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   0006D
  2600.     CALLS   #3, (R5)             ;#3, SEND_PACKET                                 65         03  FB   00071
  2601.     MOVL    R0, R3                 ;R0, STATUS                                     53         50  D0   00074
  2602.     BLBC    R3, 4$                 ;STATUS, 4$                                     68         53  E9   00077
  2603.     MNEGL   -64(R4), G^SND_PKT_SIZE         ;SEND_PKT_SIZE, SND_PKT_SIZE           2227 00000000G  00    C0   A4  CE   0007A
  2604.     MNEGL   G^SEND_TIMEOUT, G^SND_TIMEOUT     ;SEND_TIMEOUT, SND_TIMEOUT           2228 00000000G  00 00000000G  00  CE   00082
  2605.     MNEGL   -60(R4), G^SND_NPAD         ;SEND_NPAD, SND_NPAD               2229 00000000G  00    C4   A4  CE   0008D
  2606.     MNEGL   -56(R4), G^SND_PADCHAR         ;SEND_PADCHAR, SND_PADCHAR           2230 00000000G  00    C8   A4  CE   00095
  2607.     MNEGL   -52(R4), G^SND_EOL         ;SEND_EOL, SND_EOL               2231 00000000G  00    CC   A4  CE   0009D
  2608.     MNEGL   -48(R4), G^SND_QUOTE_CHR     ;SEND_QUOTE_CHR, SND_QUOTE_CHR        2232 00000000G  00    D0   A4  CE   000A5
  2609.     MOVL    -44(R4), G^RCV_8QUOTE_CHR     ;SEND_8QUOTE_CHR, RCV_8QUOTE_CHR      2233 00000000G  00    D4   A4  D0   000AD
  2610.     MOVL    -36(R4), G^CHKTYPE         ;INI_CHK_TYPE, CHKTYPE               2234 00000000G  00    DC   A4  D0   000B5
  2611.     MOVL    -72(R4), G^SET_REPT_CHR         ;REPT_CHR, SET_REPT_CHR           2235 00000000G  00    B8   A4  D0   000BD
  2612.     MOVL    #15, R0                 ;#15, R0                   2236            50         0F  D0   000C5
  2613.     RET                      ;                                               04   000C8
  2614. 3$:    CMPL    R2, #83                 ;R2, #83                   2249 00000053   8F         52  D1   000C9
  2615.     BNEQ    5$                 ;5$                                               39  12   000D0
  2616.     ADDL3   #1, (R4), R0             ;#1, REC_SEQ, R0               2251            64         01  C1   000D2
  2617.                          ;                                         50       000D5
  2618.     EXTZV   #0, #6, R0, -4(R4)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   000D6
  2619.                          ;                              FC   A4         50       000D9
  2620.     CALLS   #0, (R6)             ;#0, PRS_SEND_INIT               2253            66         00  FB   000DC
  2621.     MOVL    R0, R3                 ;R0, STATUS                                     53         50  D0   000DF
  2622. 4$:    BLBC    R3, 6$                 ;STATUS, 6$                                     65         53  E9   000E2
  2623.     CALLS   #0, (R7)             ;#0, SET_SEND_INIT               2256            67         00  FB   000E5
  2624.     PUSHL   (R4)                 ;REC_SEQ                   2261                  64  DD   000E8
  2625.     PUSHL   -40(R4)                 ;SEND_INIT_SIZE                                  D8   A4  DD   000EA
  2626.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   000ED
  2627.     CALLS   #3, (R5)             ;#3, SEND_PACKET                                 65         03  FB   000F1
  2628.     BLBC    R0, 6$                 ;R0, 6$                                     53         50  E9   000F4
  2629.     MOVL    -36(R4), -32(R4)         ;INI_CHK_TYPE, BLK_CHK_TYPE           2264       E0   A4    DC   A4  D0   000F7
  2630.     MOVZBL  #82, -(SP)             ;#82, -(SP)                   2265            7E    52   8F  9A   000FC
  2631.     MOVZBL  #73, -(SP)             ;#73, -(SP)                                     7E    49   8F  9A   00100
  2632.     CALLS   #2, (R8)             ;#2, XFR_STATUS                                 68         02  FB   00104
  2633.     MOVL    #7, R0                 ;#7, R0                   2266            50         07  D0   00107
  2634.     RET                      ;                                               04   0010A
  2635. 5$:    CMPL    R2, #82                 ;R2, #82                   2279 00000052   8F         52  D1   0010B
  2636.     BNEQ    8$                 ;8$                                               45  12   00112
  2637.     PUSHL   #1                 ;#1                       2284                  01  DD   00114
  2638.     MOVZBL  #132, -(SP)             ;#132, -(SP)                                     7E    84   8F  9A   00116
  2639.     PUSHL   R9                 ;R9                                               59  DD   0011A
  2640.     CALLS   #3, (R10)             ;#3, SET_STRING                                 6A         03  FB   0011C
  2641.     CALLS   #0, G^U.28             ;#0, U.28                   2285 00000000V  00         00  FB   0011F
  2642.     CLRQ    -(SP)                 ;-(SP)                       2286                  7E  7C   00126
  2643.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00128
  2644.     CALLS   #3, (R10)             ;#3, SET_STRING                                 6A         03  FB   0012A
  2645.     MOVL    R0, G^FILE_SIZE             ;R0, FILE_SIZE                          00000000G  00         50  D0   0012D
  2646.     CLRB    (R9)[R0]             ;FILE_NAME[R0]                   2287                6940  94   00134
  2647.     TSTL    R0                 ;R0                       2289                  50  D5   00137
  2648.     BLEQ    6$                 ;6$                                               0F  15   00139
  2649.     MOVZBL  #83, -(SP)             ;#83, -(SP)                   2292            7E    53   8F  9A   0013B
  2650.     MOVZBL  #73, -(SP)             ;#73, -(SP)                                     7E    49   8F  9A   0013F
  2651.     CALLS   #2, (R8)             ;#2, XFR_STATUS                                 68         02  FB   00143
  2652.     MOVL    #1, R0                 ;#1, R0                   2293            50         01  D0   00146
  2653.     RET                      ;                                               04   00149
  2654. 6$:    PUSHL   #134316226             ;#134316226                   2296           080180C2   8F  DD   0014A
  2655. 7$:    CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   00150
  2656.     BRB     13$                 ;13$                       2297                  48  11   00157
  2657. 8$:    CMPL    R2, #71                 ;R2, #71                   2303 00000047   8F         52  D1   00159
  2658.     BNEQ    9$                 ;9$                                               08  12   00160
  2659.     CALLS   #0, G^U.14             ;#0, U.14                   2304 00000000V  00         00  FB   00162
  2660.     RET                      ;                                               04   00169
  2661. 9$:    CMPL    R2, #67                 ;R2, #67                   2309 00000043   8F         52  D1   0016A
  2662.     BNEQ    10$                 ;10$                                               08  12   00171
  2663.     CALLS   #0, G^U.15             ;#0, U.15                   2310 00000000V  00         00  FB   00173
  2664.     RET                      ;                                               04   0017A
  2665. 10$:    CMPL    R2, #75                 ;R2, #75                   2315 0000004B   8F         52  D1   0017B
  2666.     BNEQ    11$                 ;11$                                               08  12   00182
  2667.     CALLS   #0, G^U.16             ;#0, U.16                   2316 00000000V  00         00  FB   00184
  2668.     RET                      ;                                               04   0018B
  2669. 11$:    PUSHL   #134316218             ;#134316218                   2323           080180BA   8F  DD   0018C
  2670.     BRB     7$                 ;7$                                               BC  11   00192
  2671. 12$:    INCL    -8(R4)                 ;NUM_RETRIES                   2335             F8   A4  D6   00194
  2672.     CMPL    -8(R4), G^SI_RETRIES         ;NUM_RETRIES, SI_RETRIES           2337 00000000G  00    F8   A4  D1   00197
  2673.     BLEQ    14$                 ;14$                                               04  15   0019F
  2674. 13$:    MOVL    #10, R0                 ;#10, R0                                     50         0A  D0   001A1
  2675.     RET                      ;                                               04   001A4
  2676. 14$:    CLRQ    -(SP)                 ;-(SP)                       2339                  7E  7C   001A5
  2677.     MOVZBL  #78, -(SP)             ;#78, -(SP)                                     7E    4E   8F  9A   001A7
  2678.     CALLS   #3, (R5)             ;#3, SEND_PACKET                                 65         03  FB   001AB
  2679.     BLBC    R0, 15$                 ;R0, 15$                                     05         50  E9   001AE
  2680.     MOVL    -20(R4), R0             ;STATE, R0                                     50    EC   A4  D0   001B1
  2681.     RET                      ;                                               04   001B5
  2682. 15$:    MOVL    #19, R0                 ;#19, R0                                     50         13  D0   001B6
  2683.     RET                      ;                                               04   001B9
  2684.  
  2685. ; Routine Size:  442 bytes,    Routine Base:  $CODE$ + 04BA
  2686.  
  2687.  
  2688. ;   2342  1     %SBTTL 'SEND_SERVER_INIT'
  2689. ;   2343  1    ROUTINE SEND_SERVER_INIT =
  2690. ;   2344  1    
  2691. ;   2345  1    !++
  2692. ;   2346  1    ! FUNCTIONAL DESCRIPTION:
  2693. ;   2347  1    !
  2694. ;   2348  1    !    This routine will send a server initialization message to the
  2695. ;   2349  1    !    remote KERMIT.
  2696. ;   2350  1    !
  2697. ;   2351  1    ! CALLING SEQUENCE:
  2698. ;   2352  1    !
  2699. ;   2353  1    !    STATE = SEND_SERVER_INIT();
  2700. ;   2354  1    !
  2701. ;   2355  1    ! INPUT PARAMETERS:
  2702. ;   2356  1    !
  2703. ;   2357  1    !    None.
  2704. ;   2358  1    !
  2705. ;   2359  1    ! IMPLICIT INPUTS:
  2706. ;   2360  1    !
  2707. ;   2361  1    !    RECV_xxx - desired receive parameters
  2708. ;   2362  1    !
  2709. ;   2363  1    ! OUTPUT PARAMETERS:
  2710. ;   2364  1    !
  2711. ;   2365  1    !    New state to change the finite state machine to.
  2712. ;   2366  1    !
  2713. ;   2367  1    ! IMPLICIT OUTPUTS:
  2714. ;   2368  1    !
  2715. ;   2369  1    !    SEND_xxx - Other Kermit's desired parameters
  2716. ;   2370  1    !
  2717. ;   2371  1    ! COMPLETION CODES:
  2718. ;   2372  1    !
  2719. ;   2373  1    !    None.
  2720. ;   2374  1    !
  2721. ;   2375  1    ! SIDE EFFECTS:
  2722. ;   2376  1    !
  2723. ;   2377  1    !    None.
  2724. ;   2378  1    !
  2725. ;   2379  1    !--
  2726. ;   2380  1    
  2727. ;   2381  2        BEGIN
  2728. ;   2382  2    
  2729. ;   2383  2        LOCAL
  2730. ;   2384  2        OLD_OUTPUT,                ! Saved terminal output routine
  2731. ;   2385  2        STATUS;                    ! Status returned by various routines
  2732. ;   2386  2    
  2733. ;   2387  2    ![026] Local routine to ignore error message output
  2734. ;   2388  2        ROUTINE IGNORE_ERROR (ADDRESS, LENGTH) =
  2735. ;   2389  3        BEGIN
  2736. ;   2390  3        RETURN TRUE;
  2737. ;   2391  2        END;
  2738.  
  2739.  
  2740.  
  2741.  
  2742.  
  2743. ;IGNORE_ERROR
  2744. U.76:    .WORD   ^M<>                 ;Save nothing                   2388                    0000   00000
  2745.     MOVL    #1, R0                 ;#1, R0                   2390            50         01  D0   00002
  2746.     RET                      ;                                               04   00005
  2747.  
  2748. ; Routine Size:  6 bytes,    Routine Base:  $CODE$ + 0674
  2749.  
  2750.  
  2751. ;   2392  2        SET_SEND_INIT ();
  2752. ;   2393  2    ![026] If too many tries, just give up.  Maybe the other Kermit doesn't
  2753. ;   2394  2    ![026] know what to do with this packet.
  2754. ;   2395  2    
  2755. ;   2396  2        IF .NUM_RETRIES GTR .SI_RETRIES THEN RETURN STATE_SG;
  2756. ;   2397  2    
  2757. ;   2398  2    ![026]
  2758. ;   2399  2    ![026] Count the number of times we try this
  2759. ;   2400  2    ![026]
  2760. ;   2401  2        NUM_RETRIES = .NUM_RETRIES + 1;
  2761. ;   2402  2    
  2762. ;   2403  2        IF NOT SEND_PACKET (MSG_SER_INIT, .SEND_INIT_SIZE, .MSG_NUMBER) THEN RETURN STATE_A; ! [108]
  2763. ;   2404  2    
  2764. ;   2405  2    ![026]
  2765. ;   2406  2    ![026] Determine if we received a packet it good condition.  If we timed out
  2766. ;   2407  2    ![026] just try again.  If we get an error packet back, ignore it and
  2767. ;   2408  2    ![026] just continue.  The other Kermit must not support this packet.
  2768. ;   2409  2    ![026]
  2769. ;   2410  2        OLD_OUTPUT = TT_SET_OUTPUT (IGNORE_ERROR);
  2770. ;   2411  2        STATUS = REC_PACKET ();
  2771. ;   2412  2        TT_OUTPUT ();
  2772. ;   2413  2        TT_SET_OUTPUT (.OLD_OUTPUT);
  2773. ;   2414  2    
  2774. ;   2415  2        IF .STATUS EQL KER_ERRMSG THEN RETURN STATE_SG;
  2775. ;   2416  2    
  2776. ;   2417  2        IF NOT .STATUS
  2777. ;   2418  2        THEN
  2778. ;   2419  2    
  2779. ;   2420  4        IF NOT ((.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL
  2780. ;   2421  3            KER_CHKSUMERR))
  2781. ;   2422  2        THEN
  2782. ;   2423  2            RETURN STATE_EX
  2783. ;   2424  2        ELSE
  2784. ;   2425  2            RETURN .STATE;
  2785. ;   2426  2    
  2786. ;   2427  2    !
  2787. ;   2428  2    ! Determine if the packet is good.
  2788. ;   2429  2    !
  2789. ;   2430  2    
  2790. ;   2431  2        IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ EQL .MSG_NUMBER
  2791. ;   2432  2        THEN
  2792. ;   2433  3        BEGIN
  2793. ;   2434  3    !
  2794. ;   2435  3    ! Here if we have an ACK for the initialization message that was just sent
  2795. ;   2436  3    ! to the remote KERMIT.
  2796. ;   2437  3    !
  2797. ;   2438  3    
  2798. ;   2439  3        IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN STATE_A;
  2799. ;   2440  3    
  2800. ;   2441  3        NUM_RETRIES = 0;
  2801. ;   2442  3        INIT_PKT_SENT = TRUE;            ! We have exchanged init's
  2802. ;   2443  3        RETURN STATE_SG;
  2803. ;   2444  2        END;
  2804. ;   2445  2    
  2805. ;   2446  2    !
  2806. ;   2447  2    ! If we haven't returned yet, we must have gotten an invalid response.
  2807. ;   2448  2    ! Just stay in the same state so we try again
  2808. ;   2449  2    !
  2809. ;   2450  2        RETURN .STATE;
  2810. ;   2451  1        END;
  2811.  
  2812.  
  2813.  
  2814.  
  2815.  
  2816. ;SEND_SERVER_INIT
  2817. U.2:    .WORD   ^M<R2,R3,R4,R5>             ;Save R2,R3,R4,R5               2343                    003C   00000
  2818.     MOVAB   G^TT_SET_OUTPUT, R5         ;TT_SET_OUTPUT, R5                                 55 00000000G  00  9E   00002
  2819.     MOVAB   G^U.54, R4             ;U.54, R4                                     54 00000000'  00  9E   00009
  2820.     CALLS   #0, G^U.20             ;#0, U.20                   2392 00000000V  00         00  FB   00010
  2821.     CMPL    (R4), G^SI_RETRIES         ;NUM_RETRIES, SI_RETRIES           2396 00000000G  00         64  D1   00017
  2822.     BLEQ    1$                 ;1$                                               03  15   0001E
  2823.     BRW     5$                 ;5$                                             0089  31   00020
  2824. 1$:    INCL    (R4)                 ;NUM_RETRIES                   2401                  64  D6   00023
  2825.     PUSHL   4(R4)                 ;MSG_NUMBER                   2403             04   A4  DD   00025
  2826.     PUSHL   -32(R4)                 ;SEND_INIT_SIZE                                  E0   A4  DD   00028
  2827.     MOVZBL  #73, -(SP)             ;#73, -(SP)                                     7E    49   8F  9A   0002B
  2828.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   0002F
  2829.     BLBC    R0, 3$                 ;R0, 3$                                     68         50  E9   00036
  2830.     PUSHAB  B^U.76                 ;U.76                       2410             BE   AF  9F   00039
  2831.     CALLS   #1, (R5)             ;#1, TT_SET_OUTPUT                                 65         01  FB   0003C
  2832.     MOVL    R0, R3                 ;R0, OLD_OUTPUT                                 53         50  D0   0003F
  2833.     CALLS   #0, G^U.26             ;#0, U.26                   2411 00000000V  00         00  FB   00042
  2834.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00049
  2835.     CALLS   #0, G^TT_OUTPUT             ;#0, TT_OUTPUT                   2412 00000000G  00         00  FB   0004C
  2836.     PUSHL   R3                 ;OLD_OUTPUT                   2413                  53  DD   00053
  2837.     CALLS   #1, (R5)             ;#1, TT_SET_OUTPUT                                 65         01  FB   00055
  2838.     CMPL    R2, #134316170             ;STATUS, #134316170               2415 0801808A   8F         52  D1   00058
  2839.     BEQL    5$                 ;5$                                               4B  13   0005F
  2840.     BLBS    R2, 2$                 ;STATUS, 2$                   2417            1F         52  E8   00061
  2841.     CMPL    R2, #134316234             ;STATUS, #134316234               2420 080180CA   8F         52  D1   00064
  2842.     BEQL    6$                 ;6$                                               43  13   0006B
  2843.     CMPL    R2, #134316248             ;STATUS, #134316248                      080180D8   8F         52  D1   0006D
  2844.     BEQL    6$                 ;6$                                               3A  13   00074
  2845.     CMPL    R2, #134316178             ;STATUS, #134316178               2421 08018092   8F         52  D1   00076
  2846.     BEQL    6$                 ;6$                                               31  13   0007D
  2847.     MOVL    #19, R0                 ;#19, R0                   2423            50         13  D0   0007F
  2848.     RET                      ;                                               04   00082
  2849. 2$:    CMPL    16(R4), #89             ;REC_TYPE, #89                   2431 00000059   8F    10   A4  D1   00083
  2850.     BNEQ    6$                 ;6$                                               23  12   0008B
  2851.     CMPL    8(R4), 4(R4)             ;REC_SEQ, MSG_NUMBER                            04   A4    08   A4  D1   0008D
  2852.     BNEQ    6$                 ;6$                                               1C  12   00092
  2853.     CALLS   #0, G^U.21             ;#0, U.21                   2439 00000000V  00         00  FB   00094
  2854.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   0009B
  2855.     BLBS    R2, 4$                 ;STATUS, 4$                                     04         52  E8   0009E
  2856. 3$:    MOVL    #10, R0                 ;#10, R0                                     50         0A  D0   000A1
  2857.     RET                      ;                                               04   000A4
  2858. 4$:    CLRL    (R4)                 ;NUM_RETRIES                   2441                  64  D4   000A5
  2859.     MOVL    #1, 2040(R4)             ;#1, INIT_PKT_SENT               2442     07F8   C4         01  D0   000A7
  2860. 5$:    MOVL    #12, R0                 ;#12, R0                   2443            50         0C  D0   000AC
  2861.     RET                      ;                                               04   000AF
  2862. 6$:    MOVL    -12(R4), R0             ;STATE, R0                   2450            50    F4   A4  D0   000B0
  2863.     RET                      ;                                               04   000B4
  2864.  
  2865. ; Routine Size:  181 bytes,    Routine Base:  $CODE$ + 067A
  2866.  
  2867.  
  2868. ;   2452  1     %SBTTL 'SEND_DATA'
  2869. ;   2453  1    ROUTINE SEND_DATA =
  2870. ;   2454  1    
  2871. ;   2455  1    !++
  2872. ;   2456  1    ! FUNCTIONAL DESCRIPTION:
  2873. ;   2457  1    !
  2874. ;   2458  1    !    This routine will send a data message to the remote KERMIT.
  2875. ;   2459  1    !
  2876. ;   2460  1    ! CALLING SEQUENCE:
  2877. ;   2461  1    !
  2878. ;   2462  1    !    STATE = SEND_DATA();
  2879. ;   2463  1    !
  2880. ;   2464  1    ! INPUT PARAMETERS:
  2881. ;   2465  1    !
  2882. ;   2466  1    !    None.
  2883. ;   2467  1    !
  2884. ;   2468  1    ! IMPLICIT INPUTS:
  2885. ;   2469  1    !
  2886. ;   2470  1    !    None.
  2887. ;   2471  1    !
  2888. ;   2472  1    ! OUTPUT PARAMETERS:
  2889. ;   2473  1    !
  2890. ;   2474  1    !    New state to change the finite state machine to.
  2891. ;   2475  1    !
  2892. ;   2476  1    ! IMPLICIT OUTPUTS:
  2893. ;   2477  1    !
  2894. ;   2478  1    !    None.
  2895. ;   2479  1    !
  2896. ;   2480  1    ! COMPLETION CODES:
  2897. ;   2481  1    !
  2898. ;   2482  1    !    None.
  2899. ;   2483  1    !
  2900. ;   2484  1    ! SIDE EFFECTS:
  2901. ;   2485  1    !
  2902. ;   2486  1    !    None.
  2903. ;   2487  1    !
  2904. ;   2488  1    !--
  2905. ;   2489  1    
  2906. ;   2490  2        BEGIN
  2907. ;   2491  2    
  2908. ;   2492  2        LOCAL
  2909. ;   2493  2        SUB_TYPE,                ! Subtype for XFR_STATUS call
  2910. ;   2494  2        STATUS;                    ! Status returned by various routines
  2911. ;   2495  2    
  2912. ;   2496  2    !
  2913. ;   2497  2    ! If there is nothing in the data packet, we should not bother to send it.
  2914. ;   2498  2    ! Instead, we will just call BFR_FILL again to get some more data
  2915. ;   2499  2    !
  2916. ;   2500  2    
  2917. ;   2501  2        IF .SIZE NEQ 0            ! [108]
  2918. ;   2502  2        THEN
  2919. ;   2503  3        BEGIN
  2920. ;   2504  3    !
  2921. ;   2505  3    ! Check to see if the number of retries have been exceeded.
  2922. ;   2506  3    !
  2923. ;   2507  3    
  2924. ;   2508  3        IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  2925. ;   2509  3    
  2926. ;   2510  3    !
  2927. ;   2511  3    ! Not exceeded yet.  Increment the number of retries we have attempted
  2928. ;   2512  3    ! on this message.
  2929. ;   2513  3    !
  2930. ;   2514  3        NUM_RETRIES = .NUM_RETRIES + 1;
  2931. ;   2515  3    !
  2932. ;   2516  3    ! Attempt to send the packet and abort if the send fails.
  2933. ;   2517  3    !
  2934. ;   2518  3    
  2935. ;   2519  3        IF NOT SEND_PACKET (MSG_DATA, .SIZE, .MSG_NUMBER) THEN RETURN STATE_EX;
  2936. ;   2520  3    
  2937. ;   2521  3    !
  2938. ;   2522  3    ! Attempt to receive a message from the remote KERMIT.
  2939. ;   2523  3    !
  2940. ;   2524  3        STATUS = REC_PACKET ();
  2941. ;   2525  3    
  2942. ;   2526  3        IF NOT .STATUS
  2943. ;   2527  3        THEN
  2944. ;   2528  4            BEGIN
  2945. ;   2529  4    
  2946. ;   2530  5            IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL
  2947. ;   2531  5            KER_CHKSUMERR)
  2948. ;   2532  4            THEN
  2949. ;   2533  4            RETURN .STATE
  2950. ;   2534  4            ELSE
  2951. ;   2535  4            RETURN STATE_EX;
  2952. ;   2536  4    
  2953. ;   2537  3            END;
  2954. ;   2538  3    
  2955. ;   2539  3    !
  2956. ;   2540  3    ! Determine if the message is a NAK and the NAK is for the message number
  2957. ;   2541  3    ! that we are current working on.  If the NAK is for the next packet then
  2958. ;   2542  3    ! treat it like an ACK for this packet
  2959. ;   2543  3    !
  2960. ;   2544  3    
  2961. ;   2545  4        IF .REC_TYPE EQL MSG_NAK AND (.REC_SEQ NEQ ((.MSG_NUMBER + 1) AND %O'77'))
  2962. ;   2546  3        THEN
  2963. ;   2547  3            RETURN .STATE;
  2964. ;   2548  3    
  2965. ;   2549  3    !
  2966. ;   2550  3    ! Make sure we have a NAK or ACK
  2967. ;   2551  3    !
  2968. ;   2552  3    
  2969. ;   2553  4        IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
  2970. ;   2554  3        THEN
  2971. ;   2555  3    !
  2972. ;   2556  3    ! Not an ACK or NAK, abort.
  2973. ;   2557  3    !
  2974. ;   2558  4            BEGIN
  2975. ;   2559  4            KRM_ERROR (KER_PROTOERR);
  2976. ;   2560  4            RETURN STATE_A;
  2977. ;   2561  3            END;
  2978. ;   2562  3    
  2979. ;   2563  3    !
  2980. ;   2564  3    ! Is this for this message?
  2981. ;   2565  3    !
  2982. ;   2566  3    
  2983. ;   2567  3        IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
  2984. ;   2568  3    
  2985. ;   2569  3    !
  2986. ;   2570  3    ! It was.  Set up for sending the next data message to the remote KERMIT
  2987. ;   2571  3    ! and return.
  2988. ;   2572  3    !
  2989. ;   2573  3    !
  2990. ;   2574  3    ! Check for data field in ACK indicating abort file or stream
  2991. ;   2575  3    !
  2992. ;   2576  3    !
  2993. ;   2577  3    
  2994. ;   2578  3        IF .REC_TYPE EQL MSG_ACK AND .REC_LENGTH EQL 1
  2995. ;   2579  3        THEN
  2996. ;   2580  3    
  2997. ;   2581  3            SELECTONE CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG, CHR_SIZE)) OF ! [108]
  2998. ;   2582  3            SET
  2999. ;   2583  3    
  3000. ;   2584  3            [MSG_ACK_ABT_CUR] :
  3001. ;   2585  3                ABT_CUR_FILE = TRUE;
  3002. ;   2586  3    
  3003. ;   2587  3            [MSG_ACK_ABT_ALL] :
  3004. ;   2588  3                ABT_ALL_FILE = TRUE;
  3005. ;   2589  3            TES;
  3006. ;   2590  3    
  3007. ;   2591  3        NUM_RETRIES = 0;
  3008. ;   2592  3        MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  3009. ;   2593  2        END;                    ! End of IF .SIZE NEQ 0
  3010. ;   2594  2    
  3011. ;   2595  3        IF (BFR_FILL (FALSE) EQL KER_NORMAL) AND NOT (.ABT_CUR_FILE OR .ABT_ALL_FILE)
  3012. ;   2596  2        THEN
  3013. ;   2597  2        RETURN STATE_SD
  3014. ;   2598  2        ELSE
  3015. ;   2599  3        BEGIN
  3016. ;   2600  3    
  3017. ;   2601  3        IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  3018. ;   2602  3        THEN
  3019. ;   2603  4            BEGIN
  3020. ;   2604  4    
  3021. ;   2605  4            IF .ABT_ALL_FILE
  3022. ;   2606  4            THEN
  3023. ;   2607  4            TT_TEXT (UPLIT (%ASCIZ' [Group interrupted]'))
  3024. ;   2608  4            ELSE
  3025. ;   2609  4    
  3026. ;   2610  4            IF .ABT_CUR_FILE
  3027. ;   2611  4            THEN
  3028. ;   2612  4                TT_TEXT (UPLIT (%ASCIZ' [Interrupted]'))
  3029. ;   2613  4            ELSE
  3030. ;   2614  4                TT_TEXT (UPLIT (%ASCIZ' [OK]'));
  3031. ;   2615  4    
  3032. ;   2616  4            TT_CRLF ();
  3033. ;   2617  3            END;
  3034. ;   2618  3    
  3035. ;   2619  3        IF .FLAG_FILE_OPEN THEN FILE_CLOSE (FALSE);
  3036. ;   2620  3    
  3037. ;   2621  3        SUB_TYPE = %C'C';            ! Assume ok
  3038. ;   2622  3    
  3039. ;   2623  3        IF .ABT_ALL_FILE
  3040. ;   2624  3        THEN
  3041. ;   2625  3            SUB_TYPE = %C'Z'
  3042. ;   2626  3        ELSE
  3043. ;   2627  3    
  3044. ;   2628  3            IF .ABT_CUR_FILE THEN SUB_TYPE = %C'X';
  3045. ;   2629  3    
  3046. ;   2630  3        XFR_STATUS (%C'F', .SUB_TYPE);
  3047. ;   2631  3        FLAG_FILE_OPEN = FALSE;
  3048. ;   2632  3        RETURN STATE_SZ;
  3049. ;   2633  2        END;
  3050. ;   2634  2    
  3051. ;   2635  1        END;
  3052.  
  3053.  
  3054.  
  3055.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  3056.  
  3057. P.AAB:    .ASCII  \ [Group interrupted]\<0><0><0><0>
  3058.                          ;                                20  70  75  6F  72  47  5B  20  0000C
  3059.                          ;                          70  75  72  72  65  74  6E  69  00014
  3060.                          ;                          00  00  00  00  5D  64  65  74  0001C
  3061. P.AAC:    .ASCII  \ [Interrupted]\<0><0>         ;                                72  72  65  74  6E  49  5B  20  00024
  3062.                          ;                          00  00  5D  64  65  74  70  75  0002C
  3063. P.AAD:    .ASCII  \ [OK]\<0><0><0>         ;                                00  00  00  5D  4B  4F  5B  20  00034
  3064.  
  3065.  
  3066.  
  3067.     .PSECT  $CODE$,NOWRT,2
  3068.  
  3069. ;SEND_DATA
  3070. U.3:    .WORD   ^M<R2,R3,R4,R5,R6,R7>         ;Save R2,R3,R4,R5,R6,R7           2453                    00FC   00000
  3071.     MOVAB   G^FLAG_FILE_OPEN, R7         ;FLAG_FILE_OPEN, R7                                 57 00000000'  00  9E   00002
  3072.     MOVAB   G^P.AAB, R6             ;P.AAB, R6                                     56 00000000'  00  9E   00009
  3073.     MOVAB   G^ABT_ALL_FILE, R5         ;ABT_ALL_FILE, R5                                 55 00000000G  00  9E   00010
  3074.     MOVAB   G^ABT_CUR_FILE, R4         ;ABT_CUR_FILE, R4                                 54 00000000G  00  9E   00017
  3075.     MOVAB   G^U.55, R3             ;U.55, R3                                     53 00000000'  00  9E   0001E
  3076.     MOVL    -12(R3), R0             ;SIZE, R0                   2501            50    F4   A3  D0   00025
  3077.     BNEQ    1$                 ;1$                                               03  12   00029
  3078.     BRW     11$                 ;11$                                             00D1  31   0002B
  3079. 1$:    CMPL    -4(R3), G^PKT_RETRIES         ;NUM_RETRIES, PKT_RETRIES           2508 00000000G  00    FC   A3  D1   0002E
  3080.     BLEQ    2$                 ;2$                                               04  15   00036
  3081.     MOVL    #20, R0                 ;#20, R0                                     50         14  D0   00038
  3082.     RET                      ;                                               04   0003B
  3083. 2$:    INCL    -4(R3)                 ;NUM_RETRIES                   2514             FC   A3  D6   0003C
  3084.     PUSHL   (R3)                 ;MSG_NUMBER                   2519                  63  DD   0003F
  3085.     PUSHL   R0                 ;R0                                               50  DD   00041
  3086.     MOVZBL  #68, -(SP)             ;#68, -(SP)                                     7E    44   8F  9A   00043
  3087.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   00047
  3088.     BLBC    R0, 3$                 ;R0, 3$                                     25         50  E9   0004E
  3089.     CALLS   #0, G^U.26             ;#0, U.26                   2524 00000000V  00         00  FB   00051
  3090.     BLBS    R0, 4$                 ;STATUS, 4$                   2526            1F         50  E8   00058
  3091.     CMPL    R0, #134316234             ;STATUS, #134316234               2530 080180CA   8F         50  D1   0005B
  3092.     BEQL    7$                 ;7$                                               64  13   00062
  3093.     CMPL    R0, #134316248             ;STATUS, #134316248                      080180D8   8F         50  D1   00064
  3094.     BEQL    7$                 ;7$                                               5B  13   0006B
  3095.     CMPL    R0, #134316178             ;STATUS, #134316178               2531 08018092   8F         50  D1   0006D
  3096.     BEQL    7$                 ;7$                                               52  13   00074
  3097. 3$:    MOVL    #19, R0                 ;#19, R0                   2535            50         13  D0   00076
  3098.     RET                      ;                                               04   00079
  3099. 4$:    MOVL    12(R3), R1             ;REC_TYPE, R1                   2545            51    0C   A3  D0   0007A
  3100.     CLRL    R2                 ;R2                                               52  D4   0007E
  3101.     CMPL    R1, #78                 ;R1, #78                          0000004E   8F         51  D1   00080
  3102.     BNEQ    5$                 ;5$                                               0E  12   00087
  3103.     INCL    R2                 ;R2                                               52  D6   00089
  3104.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0                                 63         01  C1   0008B
  3105.                          ;                                         50       0008E
  3106.     CMPZV   #0, #6, R0, 4(R3)         ;#0, #6, R0, REC_SEQ                                 06         00  ED   0008F
  3107.                          ;                              04   A3         50       00092
  3108.     BNEQ    7$                 ;7$                                               31  12   00095
  3109. 5$:    CMPL    R1, #89                 ;R1, #89                   2553 00000059   8F         51  D1   00097
  3110.     BEQL    6$                 ;6$                                               14  13   0009E
  3111.     BLBS    R2, 6$                 ;R2, 6$                                     11         52  E8   000A0
  3112.     PUSHL   #134316226             ;#134316226                   2559           080180C2   8F  DD   000A3
  3113.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   000A9
  3114.     MOVL    #10, R0                 ;#10, R0                   2560            50         0A  D0   000B0
  3115.     RET                      ;                                               04   000B3
  3116. 6$:    CLRL    R0                 ;R0                       2567                  50  D4   000B4
  3117.     CMPL    12(R3), #89             ;REC_TYPE, #89                          00000059   8F    0C   A3  D1   000B6
  3118.     BNEQ    8$                 ;8$                                               0D  12   000BE
  3119.     INCL    R0                 ;R0                                               50  D6   000C0
  3120.     CMPL    4(R3), (R3)             ;REC_SEQ, MSG_NUMBER                                 63    04   A3  D1   000C2
  3121.     BEQL    8$                 ;8$                                               05  13   000C6
  3122. 7$:    MOVL    -16(R3), R0             ;STATE, R0                                     50    F0   A3  D0   000C8
  3123.     RET                      ;                                               04   000CC
  3124. 8$:    BLBC    R0, 10$                 ;R0, 10$                   2578            23         50  E9   000CD
  3125.     CMPL    8(R3), #1             ;REC_LENGTH, #1                                 01    08   A3  D1   000D0
  3126.     BNEQ    10$                 ;10$                                               1D  12   000D4
  3127.     MOVL    -64(R3), R0             ;RECV_PKT_MSG, R0               2581            50    C0   A3  D0   000D6
  3128.     MOVZBL  16(R3)[R0], R0             ;REC_MSG[R0], R0                                 50    10 A340  9A   000DA
  3129.     CMPB    R0, #88                 ;R0, #88                   2584       58   8F         50  91   000DF
  3130.     BNEQ    9$                 ;9$                                               05  12   000E3
  3131.     MOVL    #1, (R4)             ;#1, ABT_CUR_FILE               2585            64         01  D0   000E5
  3132.     BRB     10$                 ;10$                                               09  11   000E8
  3133. 9$:    CMPB    R0, #90                 ;R0, #90                   2587       5A   8F         50  91   000EA
  3134.     BNEQ    10$                 ;10$                                               03  12   000EE
  3135.     MOVL    #1, (R5)             ;#1, ABT_ALL_FILE               2588            65         01  D0   000F0
  3136. 10$:    CLRL    -4(R3)                 ;NUM_RETRIES                   2591             FC   A3  D4   000F3
  3137.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0               2592            63         01  C1   000F6
  3138.                          ;                                         50       000F9
  3139.     EXTZV   #0, #6, R0, (R3)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   000FA
  3140.                          ;                                   63         50       000FD
  3141. 11$:    CLRL    -(SP)                 ;-(SP)                       2595                  7E  D4   000FF
  3142.     CALLS   #1, G^U.29             ;#1, U.29                          00000000V  00         01  FB   00101
  3143.     CMPL    R0, #134316043             ;R0, #134316043                      0801800B   8F         50  D1   00108
  3144.     BNEQ    12$                 ;12$                                               0A  12   0010F
  3145.     BLBS    (R4), 12$             ;ABT_CUR_FILE, 12$                                 07         64  E8   00111
  3146.     BLBS    (R5), 12$             ;ABT_ALL_FILE, 12$                                 04         65  E8   00114
  3147.     MOVL    #3, R0                 ;#3, R0                   2597            50         03  D0   00117
  3148.     RET                      ;                                               04   0011A
  3149. 12$:    BLBS    G^CONNECT_FLAG, 16$         ;CONNECT_FLAG, 16$               2601            27 00000000G  00  E8   0011B
  3150.     BLBC    G^TY_FIL, 16$             ;TY_FIL, 16$                                     20 00000000G  00  E9   00122
  3151.     BLBC    (R5), 13$             ;ABT_ALL_FILE, 13$               2605            04         65  E9   00129
  3152.     PUSHL   R6                 ;R6                       2607                  56  DD   0012C
  3153.     BRB     15$                 ;15$                                               0B  11   0012E
  3154. 13$:    BLBC    (R4), 14$             ;ABT_CUR_FILE, 14$               2610            05         64  E9   00130
  3155.     PUSHAB  24(R6)                 ;P.AAC                       2612             18   A6  9F   00133
  3156.     BRB     15$                 ;15$                                               03  11   00136
  3157. 14$:    PUSHAB  40(R6)                 ;P.AAD                       2614             28   A6  9F   00138
  3158. 15$:    CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   0013B
  3159.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   2616 00000000G  00         00  FB   00142
  3160. 16$:    BLBC    (R7), 17$             ;FLAG_FILE_OPEN, 17$               2619            09         67  E9   00149
  3161.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   0014C
  3162.     CALLS   #1, G^FILE_CLOSE         ;#1, FILE_CLOSE                      00000000G  00         01  FB   0014E
  3163. 17$:    MOVZBL  #67, R0                 ;#67, SUB_TYPE                   2621            50    43   8F  9A   00155
  3164.     BLBC    (R5), 18$             ;ABT_ALL_FILE, 18$               2623            06         65  E9   00159
  3165.     MOVZBL  #90, R0                 ;#90, SUB_TYPE                   2625            50    5A   8F  9A   0015C
  3166.     BRB     19$                 ;19$                                               07  11   00160
  3167. 18$:    BLBC    (R4), 19$             ;ABT_CUR_FILE, 19$               2628            04         64  E9   00162
  3168.     MOVZBL  #88, R0                 ;#88, SUB_TYPE                                     50    58   8F  9A   00165
  3169. 19$:    PUSHL   R0                 ;SUB_TYPE                   2630                  50  DD   00169
  3170.     MOVZBL  #70, -(SP)             ;#70, -(SP)                                     7E    46   8F  9A   0016B
  3171.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   0016F
  3172.     CLRL    (R7)                 ;FLAG_FILE_OPEN               2631                  67  D4   00176
  3173.     MOVL    #4, R0                 ;#4, R0                   2632            50         04  D0   00178
  3174.     RET                      ;                                               04   0017B
  3175.  
  3176. ; Routine Size:  380 bytes,    Routine Base:  $CODE$ + 072F
  3177.  
  3178.  
  3179. ;   2636  1     %SBTTL 'SEND_FILE'
  3180. ;   2637  1    ROUTINE SEND_FILE =
  3181. ;   2638  1    
  3182. ;   2639  1    !++
  3183. ;   2640  1    ! FUNCTIONAL DESCRIPTION:
  3184. ;   2641  1    !
  3185. ;   2642  1    !    This routine will send the file specification that is being
  3186. ;   2643  1    !    transfered, or it will send a text header message.
  3187. ;   2644  1    !
  3188. ;   2645  1    ! CALLING SEQUENCE:
  3189. ;   2646  1    !
  3190. ;   2647  1    !    STATE = SEND_FILE();
  3191. ;   2648  1    !
  3192. ;   2649  1    ! INPUT PARAMETERS:
  3193. ;   2650  1    !
  3194. ;   2651  1    !    None.
  3195. ;   2652  1    !
  3196. ;   2653  1    ! IMPLICIT INPUTS:
  3197. ;   2654  1    !
  3198. ;   2655  1    !    TEXT_HEAD_FLAG - If true, send text header instead of file header
  3199. ;   2656  1    !
  3200. ;   2657  1    ! OUTPUT PARAMETERS:
  3201. ;   2658  1    !
  3202. ;   2659  1    !    New state to change the finite state machine to.
  3203. ;   2660  1    !
  3204. ;   2661  1    ! IMPLICIT OUTPUTS:
  3205. ;   2662  1    !
  3206. ;   2663  1    !    None.
  3207. ;   2664  1    !
  3208. ;   2665  1    ! COMPLETION CODES:
  3209. ;   2666  1    !
  3210. ;   2667  1    !    None.
  3211. ;   2668  1    !
  3212. ;   2669  1    ! SIDE EFFECTS:
  3213. ;   2670  1    !
  3214. ;   2671  1    !    None.
  3215. ;   2672  1    !
  3216. ;   2673  1    !--
  3217. ;   2674  1    
  3218. ;   2675  2        BEGIN
  3219. ;   2676  2    
  3220. ;   2677  2        LOCAL
  3221. ;   2678  2        M_TYPE,                    ! Message type to send
  3222. ;   2679  2        STATUS;                    ! Status returned by various routines
  3223. ;   2680  2    
  3224. ;   2681  2    !
  3225. ;   2682  2    ! Flag we don't want to abort yet
  3226. ;   2683  2    !
  3227. ;   2684  2        ABT_CUR_FILE = FALSE;
  3228. ;   2685  2        ABT_ALL_FILE = FALSE;
  3229. ;   2686  2    !
  3230. ;   2687  2    ! First determine if we have exceed the number of retries that are
  3231. ;   2688  2    ! allowed to attempt to send this message.
  3232. ;   2689  2    !
  3233. ;   2690  2    
  3234. ;   2691  2        IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  3235. ;   2692  2    
  3236. ;   2693  2    !
  3237. ;   2694  2    ! The number of retries are not exceeded.  Increment the number and then
  3238. ;   2695  2    ! attempt to send the packet again.
  3239. ;   2696  2    !
  3240. ;   2697  2        NUM_RETRIES = .NUM_RETRIES + 1;
  3241. ;   2698  2        SIZE = 0;                    ! Assume no name
  3242. ;   2699  2    
  3243. ;   2700  2        IF .TEXT_HEAD_FLAG THEN M_TYPE = MSG_TEXT ELSE M_TYPE = MSG_FILE;
  3244. ;   2701  2    
  3245. ;   2702  2        IF .FILE_SIZE NEQ 0 AND NOT .NO_FILE_NEEDED
  3246. ;   2703  2        THEN
  3247. ;   2704  3        BEGIN
  3248. ;   2705  3    ![025]    CH$MOVE (.FILE_SIZE, CH$PTR (FILE_NAME),
  3249. ;   2706  3    ![025]        CH$PTR (SND_MSG, PKT_MSG,
  3250. ;   2707  3    ![025]        CHR_SIZE));
  3251. ;   2708  3    ![025]
  3252. ;   2709  3    ![025] Fill packet with file name
  3253. ;   2710  3    ![025]
  3254. ;   2711  3        SET_STRING (CH$PTR (FILE_NAME), .FILE_SIZE, TRUE);
  3255. ;   2712  3        BFR_FILL (TRUE);
  3256. ;   2713  3        SET_STRING (0, 0, FALSE);
  3257. ;   2714  2        END;
  3258. ;   2715  2    
  3259. ;   2716  2        IF NOT SEND_PACKET (.M_TYPE, .SIZE, .MSG_NUMBER) THEN RETURN STATE_EX;
  3260. ;   2717  2    
  3261. ;   2718  2    !
  3262. ;   2719  2    ! Now get the responce from the remote KERMIT.
  3263. ;   2720  2    !
  3264. ;   2721  2        STATUS = REC_PACKET ();
  3265. ;   2722  2    
  3266. ;   2723  2        IF NOT .STATUS
  3267. ;   2724  2        THEN
  3268. ;   2725  3        BEGIN
  3269. ;   2726  3    
  3270. ;   2727  4        IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
  3271. ;   2728  3        THEN
  3272. ;   2729  3            RETURN .STATE
  3273. ;   2730  3        ELSE
  3274. ;   2731  3            RETURN STATE_EX;
  3275. ;   2732  3    
  3276. ;   2733  2        END;
  3277. ;   2734  2    
  3278. ;   2735  2    !
  3279. ;   2736  2    ! Determine if the packet is good.
  3280. ;   2737  2    !
  3281. ;   2738  2    
  3282. ;   2739  3        IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
  3283. ;   2740  2        THEN
  3284. ;   2741  3        BEGIN
  3285. ;   2742  3        KRM_ERROR (KER_PROTOERR);
  3286. ;   2743  3        RETURN STATE_A;
  3287. ;   2744  2        END;
  3288. ;   2745  2    
  3289. ;   2746  2    !
  3290. ;   2747  2    ! If this is a NAK and the message number is not the one we just send
  3291. ;   2748  2    ! treat this like an ACK, otherwise resend the last packet.
  3292. ;   2749  2    !
  3293. ;   2750  2    
  3294. ;   2751  2        IF .REC_TYPE EQL MSG_NAK AND (.REC_SEQ NEQ ((.MSG_NUMBER + 1) AND %O'77')) THEN RETURN .STATE;
  3295. ;   2752  2    
  3296. ;   2753  2        IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
  3297. ;   2754  2    
  3298. ;   2755  2    !
  3299. ;   2756  2    ! If all is ok, bump the message number and fill first buffer
  3300. ;   2757  2    !
  3301. ;   2758  2        NUM_RETRIES = 0;
  3302. ;   2759  2        MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  3303. ;   2760  2    
  3304. ;   2761  2        IF BFR_FILL (TRUE) THEN RETURN STATE_SD ELSE RETURN STATE_A;
  3305. ;   2762  2    
  3306. ;   2763  1        END;                    ! End of SEND_FILE
  3307.  
  3308.  
  3309.  
  3310.  
  3311.  
  3312. ;SEND_FILE
  3313. U.4:    .WORD   ^M<R2,R3,R4,R5>             ;Save R2,R3,R4,R5               2637                    003C   00000
  3314.     MOVAB   G^U.29, R5             ;U.29, R5                                     55 00000000V  00  9E   00002
  3315.     MOVAB   G^U.30, R4             ;U.30, R4                                     54 00000000V  00  9E   00009
  3316.     MOVAB   G^U.55, R3             ;U.55, R3                                     53 00000000'  00  9E   00010
  3317.     CLRL    G^ABT_CUR_FILE             ;ABT_CUR_FILE                   2684           00000000G  00  D4   00017
  3318.     CLRL    G^ABT_ALL_FILE             ;ABT_ALL_FILE                   2685           00000000G  00  D4   0001D
  3319.     CMPL    -4(R3), G^PKT_RETRIES         ;NUM_RETRIES, PKT_RETRIES           2691 00000000G  00    FC   A3  D1   00023
  3320.     BLEQ    1$                 ;1$                                               04  15   0002B
  3321.     MOVL    #20, R0                 ;#20, R0                                     50         14  D0   0002D
  3322.     RET                      ;                                               04   00030
  3323. 1$:    INCL    -4(R3)                 ;NUM_RETRIES                   2697             FC   A3  D6   00031
  3324.     CLRL    -12(R3)                 ;SIZE                       2698             F4   A3  D4   00034
  3325.     BLBC    2028(R3), 2$             ;TEXT_HEAD_FLAG, 2$               2700            06     07EC   C3  E9   00037
  3326.     MOVZBL  #88, R2                 ;#88, M_TYPE                                     52    58   8F  9A   0003C
  3327.     BRB     3$                 ;3$                                               04  11   00040
  3328. 2$:    MOVZBL  #70, R2                 ;#70, M_TYPE                                     52    46   8F  9A   00042
  3329. 3$:    MOVL    G^FILE_SIZE, R0             ;FILE_SIZE, R0                   2702            50 00000000G  00  D0   00046
  3330.     BEQL    4$                 ;4$                                               1E  13   0004D
  3331.     BLBS    2032(R3), 4$             ;NO_FILE_NEEDED, 4$                                 19     07F0   C3  E8   0004F
  3332.     PUSHL   #1                 ;#1                       2711                  01  DD   00054
  3333.     PUSHL   R0                 ;R0                                               50  DD   00056
  3334.     PUSHAB  G^FILE_NAME             ;FILE_NAME                                    00000000G  00  9F   00058
  3335.     CALLS   #3, (R4)             ;#3, SET_STRING                                 64         03  FB   0005E
  3336.     PUSHL   #1                 ;#1                       2712                  01  DD   00061
  3337.     CALLS   #1, (R5)             ;#1, BFR_FILL                                     65         01  FB   00063
  3338.     CLRQ    -(SP)                 ;-(SP)                       2713                  7E  7C   00066
  3339.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00068
  3340.     CALLS   #3, (R4)             ;#3, SET_STRING                                 64         03  FB   0006A
  3341. 4$:    PUSHL   (R3)                 ;MSG_NUMBER                   2716                  63  DD   0006D
  3342.     PUSHL   -12(R3)                 ;SIZE                                          F4   A3  DD   0006F
  3343.     PUSHL   R2                 ;M_TYPE                                           52  DD   00072
  3344.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   00074
  3345.     BLBC    R0, 5$                 ;R0, 5$                                     25         50  E9   0007B
  3346.     CALLS   #0, G^U.26             ;#0, U.26                   2721 00000000V  00         00  FB   0007E
  3347.     BLBS    R0, 6$                 ;STATUS, 6$                   2723            1F         50  E8   00085
  3348.     CMPL    R0, #134316234             ;STATUS, #134316234               2727 080180CA   8F         50  D1   00088
  3349.     BEQL    9$                 ;9$                                               63  13   0008F
  3350.     CMPL    R0, #134316248             ;STATUS, #134316248                      080180D8   8F         50  D1   00091
  3351.     BEQL    9$                 ;9$                                               5A  13   00098
  3352.     CMPL    R0, #134316178             ;STATUS, #134316178                      08018092   8F         50  D1   0009A
  3353.     BEQL    9$                 ;9$                                               51  13   000A1
  3354. 5$:    MOVL    #19, R0                 ;#19, R0                   2731            50         13  D0   000A3
  3355.     RET                      ;                                               04   000A6
  3356. 6$:    MOVL    12(R3), R0             ;REC_TYPE, R0                   2739            50    0C   A3  D0   000A7
  3357.     CMPL    R0, #89                 ;R0, #89                          00000059   8F         50  D1   000AB
  3358.     BEQL    7$                 ;7$                                               18  13   000B2
  3359.     CMPL    R0, #78                 ;R0, #78                          0000004E   8F         50  D1   000B4
  3360.     BEQL    7$                 ;7$                                               0F  13   000BB
  3361.     PUSHL   #134316226             ;#134316226                   2742           080180C2   8F  DD   000BD
  3362.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   000C3
  3363.     BRB     11$                 ;11$                       2743                  45  11   000CA
  3364. 7$:    MOVL    12(R3), R1             ;REC_TYPE, R1                   2751            51    0C   A3  D0   000CC
  3365.     CMPL    R1, #78                 ;R1, #78                          0000004E   8F         51  D1   000D0
  3366.     BNEQ    8$                 ;8$                                               0C  12   000D7
  3367.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0                                 63         01  C1   000D9
  3368.                          ;                                         50       000DC
  3369.     CMPZV   #0, #6, R0, 4(R3)         ;#0, #6, R0, REC_SEQ                                 06         00  ED   000DD
  3370.                          ;                              04   A3         50       000E0
  3371.     BNEQ    9$                 ;9$                                               0F  12   000E3
  3372. 8$:    CMPL    R1, #89                 ;R1, #89                   2753 00000059   8F         51  D1   000E5
  3373.     BNEQ    10$                 ;10$                                               0B  12   000EC
  3374.     CMPL    4(R3), (R3)             ;REC_SEQ, MSG_NUMBER                                 63    04   A3  D1   000EE
  3375.     BEQL    10$                 ;10$                                               05  13   000F2
  3376. 9$:    MOVL    -16(R3), R0             ;STATE, R0                                     50    F0   A3  D0   000F4
  3377.     RET                      ;                                               04   000F8
  3378. 10$:    CLRL    -4(R3)                 ;NUM_RETRIES                   2758             FC   A3  D4   000F9
  3379.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0               2759            63         01  C1   000FC
  3380.                          ;                                         50       000FF
  3381.     EXTZV   #0, #6, R0, (R3)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   00100
  3382.                          ;                                   63         50       00103
  3383.     PUSHL   #1                 ;#1                       2761                  01  DD   00105
  3384.     CALLS   #1, (R5)             ;#1, BFR_FILL                                     65         01  FB   00107
  3385.     BLBC    R0, 11$                 ;R0, 11$                                     04         50  E9   0010A
  3386.     MOVL    #3, R0                 ;#3, R0                                     50         03  D0   0010D
  3387.     RET                      ;                                               04   00110
  3388. 11$:    MOVL    #10, R0                 ;#10, R0                                     50         0A  D0   00111
  3389.     RET                      ;                                               04   00114
  3390.  
  3391. ; Routine Size:  277 bytes,    Routine Base:  $CODE$ + 08AB
  3392.  
  3393.  
  3394. ;   2764  1     %SBTTL 'SEND_EOF'
  3395. ;   2765  1    ROUTINE SEND_EOF =
  3396. ;   2766  1    
  3397. ;   2767  1    !++
  3398. ;   2768  1    ! FUNCTIONAL DESCRIPTION:
  3399. ;   2769  1    !
  3400. ;   2770  1    !    This routine will send the end of file message to the remote
  3401. ;   2771  1    !    KERMIT.  It will then determine if there are more files to
  3402. ;   2772  1    !    send to the remote.
  3403. ;   2773  1    !
  3404. ;   2774  1    ! CALLING SEQUENCE:
  3405. ;   2775  1    !
  3406. ;   2776  1    !    STATE = SEND_EOF();
  3407. ;   2777  1    !
  3408. ;   2778  1    ! INPUT PARAMETERS:
  3409. ;   2779  1    !
  3410. ;   2780  1    !    None.
  3411. ;   2781  1    !
  3412. ;   2782  1    ! IMPLICIT INPUTS:
  3413. ;   2783  1    !
  3414. ;   2784  1    !    None.
  3415. ;   2785  1    !
  3416. ;   2786  1    ! OUTPUT PARAMETERS:
  3417. ;   2787  1    !
  3418. ;   2788  1    !    New state to change the finite state machine to.
  3419. ;   2789  1    !
  3420. ;   2790  1    ! IMPLICIT OUTPUTS:
  3421. ;   2791  1    !
  3422. ;   2792  1    !    None.
  3423. ;   2793  1    !
  3424. ;   2794  1    ! COMPLETION CODES:
  3425. ;   2795  1    !
  3426. ;   2796  1    !    None.
  3427. ;   2797  1    !
  3428. ;   2798  1    ! SIDE EFFECTS:
  3429. ;   2799  1    !
  3430. ;   2800  1    !    Sets up for the next file to be processed if there is one.
  3431. ;   2801  1    !
  3432. ;   2802  1    !--
  3433. ;   2803  1    
  3434. ;   2804  2        BEGIN
  3435. ;   2805  2    
  3436. ;   2806  2        LOCAL
  3437. ;   2807  2        STATUS,                    ! Status returned by various routines
  3438. ;   2808  2        EOF_MSG_LEN;                ! Length of EOF message to send
  3439. ;   2809  2    
  3440. ;   2810  2    !
  3441. ;   2811  2    ! First determine if we have exceed the number of retries that are
  3442. ;   2812  2    ! allowed to attempt to send this message.
  3443. ;   2813  2    !
  3444. ;   2814  2    
  3445. ;   2815  2        IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  3446. ;   2816  2    
  3447. ;   2817  2    !
  3448. ;   2818  2    ! The number of retries are not exceeded.  Increment the number and then
  3449. ;   2819  2    ! attempt to send the packet again.
  3450. ;   2820  2    !
  3451. ;   2821  2        NUM_RETRIES = .NUM_RETRIES + 1;
  3452. ;   2822  2    !
  3453. ;   2823  2    ! Store character in packet to indicate discard of file
  3454. ;   2824  2    ! Character will only be sent if file should be discarded
  3455. ;   2825  2    !
  3456. ;   2826  2        CH$WCHAR (MSG_EOF_DISCARD, CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE));
  3457. ;   2827  2    
  3458. ;   2828  2        IF .ABT_CUR_FILE OR .ABT_ALL_FILE THEN EOF_MSG_LEN = 1 ELSE EOF_MSG_LEN = 0;
  3459. ;   2829  2    
  3460. ;   2830  2        IF NOT SEND_PACKET (MSG_EOF, .EOF_MSG_LEN, .MSG_NUMBER) THEN RETURN STATE_EX;
  3461. ;   2831  2    
  3462. ;   2832  2    !
  3463. ;   2833  2    ! Now get the responce from the remote KERMIT.
  3464. ;   2834  2    !
  3465. ;   2835  2        STATUS = REC_PACKET ();
  3466. ;   2836  2    
  3467. ;   2837  2        IF NOT .STATUS
  3468. ;   2838  2        THEN
  3469. ;   2839  3        BEGIN
  3470. ;   2840  3    
  3471. ;   2841  4        IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
  3472. ;   2842  3        THEN
  3473. ;   2843  3            RETURN .STATE
  3474. ;   2844  3        ELSE
  3475. ;   2845  3            RETURN STATE_EX;
  3476. ;   2846  3    
  3477. ;   2847  2        END;
  3478. ;   2848  2    
  3479. ;   2849  2    !
  3480. ;   2850  2    ! Determine if the packet is good.
  3481. ;   2851  2    !
  3482. ;   2852  2    
  3483. ;   2853  3        IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
  3484. ;   2854  2        THEN
  3485. ;   2855  3        BEGIN
  3486. ;   2856  3        KRM_ERROR (KER_PROTOERR);
  3487. ;   2857  3        RETURN STATE_A;
  3488. ;   2858  2        END;
  3489. ;   2859  2    
  3490. ;   2860  2    !
  3491. ;   2861  2    ! If this is a NAK and the message number is not the one we just send
  3492. ;   2862  2    ! treat this like an ACK, otherwise resend the last packet.
  3493. ;   2863  2    !
  3494. ;   2864  2    
  3495. ;   2865  2        IF .REC_TYPE EQL MSG_NAK AND (.REC_SEQ NEQ ((.MSG_NUMBER + 1) AND %O'77')) THEN RETURN .STATE;
  3496. ;   2866  2    
  3497. ;   2867  2        IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
  3498. ;   2868  2    
  3499. ;   2869  2    !
  3500. ;   2870  2    ! Here to determine if there is another file to send.
  3501. ;   2871  2    !
  3502. ;   2872  2        NUM_RETRIES = 0;
  3503. ;   2873  2        MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  3504. ;   2874  2    
  3505. ;   2875  2        IF NOT .ABT_ALL_FILE THEN STATUS = NEXT_FILE () ELSE STATUS = KER_NOMORFILES;
  3506. ;   2876  2    
  3507. ;   2877  3        IF ( NOT .STATUS) OR (.STATUS EQL KER_NOMORFILES)
  3508. ;   2878  2        THEN
  3509. ;   2879  3        BEGIN
  3510. ;   2880  3    
  3511. ;   2881  3        IF (.STATUS NEQ KER_NOMORFILES) THEN RETURN STATE_A ELSE RETURN STATE_SB;
  3512. ;   2882  3    
  3513. ;   2883  3        END
  3514. ;   2884  2        ELSE
  3515. ;   2885  3        BEGIN
  3516. ;   2886  3        FLAG_FILE_OPEN = TRUE;            ! Have a file open again
  3517. ;   2887  3    
  3518. ;   2888  3        IF .FIL_NORMAL_FORM THEN NORMALIZE_FILE (FILE_NAME, FILE_SIZE, -1, -1);
  3519. ;   2889  3    
  3520. ;   2890  3        XFR_STATUS (%C'F', %C'S');        ! Inform display routine
  3521. ;   2891  3    
  3522. ;   2892  3        IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  3523. ;   2893  3        THEN
  3524. ;   2894  4            BEGIN
  3525. ;   2895  4    !![045]        TT_TEXT (UPLIT (%ASCIZ'Sending: '));
  3526. ;   2896  4            TT_TEXT (FILE_NAME);
  3527. ;   2897  4            TT_OUTPUT ();
  3528. ;   2898  3            END;
  3529. ;   2899  3    
  3530. ;   2900  3        FILE_CHARS = 0;                ! No characters sent yet
  3531. ;   2901  3        RETURN STATE_SF;
  3532. ;   2902  2        END;
  3533. ;   2903  2    
  3534. ;   2904  1        END;                    ! End of SEND_EOF
  3535.  
  3536.  
  3537.  
  3538.  
  3539.  
  3540. ;SEND_EOF
  3541. U.7:    .WORD   ^M<R2,R3,R4,R5>             ;Save R2,R3,R4,R5               2765                    003C   00000
  3542.     MOVAB   G^FILE_NAME, R5             ;FILE_NAME, R5                                     55 00000000G  00  9E   00002
  3543.     MOVAB   G^ABT_ALL_FILE, R4         ;ABT_ALL_FILE, R4                                 54 00000000G  00  9E   00009
  3544.     MOVAB   G^U.55, R3             ;U.55, R3                                     53 00000000'  00  9E   00010
  3545.     CMPL    -4(R3), G^PKT_RETRIES         ;NUM_RETRIES, PKT_RETRIES           2815 00000000G  00    FC   A3  D1   00017
  3546.     BLEQ    1$                 ;1$                                               04  15   0001F
  3547.     MOVL    #20, R0                 ;#20, R0                                     50         14  D0   00021
  3548.     RET                      ;                                               04   00024
  3549. 1$:    INCL    -4(R3)                 ;NUM_RETRIES                   2821             FC   A3  D6   00025
  3550.     MOVB    #68, 1024(R3)             ;#68, SND_MSG+4               2826     0400   C3    44   8F  90   00028
  3551.     BLBS    G^ABT_CUR_FILE, 2$         ;ABT_CUR_FILE, 2$               2828            03 00000000G  00  E8   0002E
  3552.     BLBC    (R4), 3$             ;ABT_ALL_FILE, 3$                                 05         64  E9   00035
  3553. 2$:    MOVL    #1, R0                 ;#1, EOF_MSG_LEN                                 50         01  D0   00038
  3554.     BRB     4$                 ;4$                                               02  11   0003B
  3555. 3$:    CLRL    R0                 ;EOF_MSG_LEN                                           50  D4   0003D
  3556. 4$:    PUSHL   (R3)                 ;MSG_NUMBER                   2830                  63  DD   0003F
  3557.     PUSHL   R0                 ;EOF_MSG_LEN                                           50  DD   00041
  3558.     MOVZBL  #90, -(SP)             ;#90, -(SP)                                     7E    5A   8F  9A   00043
  3559.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   00047
  3560.     BLBC    R0, 5$                 ;R0, 5$                                     28         50  E9   0004E
  3561.     CALLS   #0, G^U.26             ;#0, U.26                   2835 00000000V  00         00  FB   00051
  3562.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00058
  3563.     BLBS    R2, 6$                 ;STATUS, 6$                   2837            1F         52  E8   0005B
  3564.     CMPL    R2, #134316234             ;STATUS, #134316234               2841 080180CA   8F         52  D1   0005E
  3565.     BEQL    9$                 ;9$                                               63  13   00065
  3566.     CMPL    R2, #134316248             ;STATUS, #134316248                      080180D8   8F         52  D1   00067
  3567.     BEQL    9$                 ;9$                                               5A  13   0006E
  3568.     CMPL    R2, #134316178             ;STATUS, #134316178                      08018092   8F         52  D1   00070
  3569.     BEQL    9$                 ;9$                                               51  13   00077
  3570. 5$:    MOVL    #19, R0                 ;#19, R0                   2845            50         13  D0   00079
  3571.     RET                      ;                                               04   0007C
  3572. 6$:    MOVL    12(R3), R0             ;REC_TYPE, R0                   2853            50    0C   A3  D0   0007D
  3573.     CMPL    R0, #89                 ;R0, #89                          00000059   8F         50  D1   00081
  3574.     BEQL    7$                 ;7$                                               18  13   00088
  3575.     CMPL    R0, #78                 ;R0, #78                          0000004E   8F         50  D1   0008A
  3576.     BEQL    7$                 ;7$                                               0F  13   00091
  3577.     PUSHL   #134316226             ;#134316226                   2856           080180C2   8F  DD   00093
  3578.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   00099
  3579.     BRB     14$                 ;14$                       2857                  64  11   000A0
  3580. 7$:    MOVL    12(R3), R1             ;REC_TYPE, R1                   2865            51    0C   A3  D0   000A2
  3581.     CMPL    R1, #78                 ;R1, #78                          0000004E   8F         51  D1   000A6
  3582.     BNEQ    8$                 ;8$                                               0C  12   000AD
  3583.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0                                 63         01  C1   000AF
  3584.                          ;                                         50       000B2
  3585.     CMPZV   #0, #6, R0, 4(R3)         ;#0, #6, R0, REC_SEQ                                 06         00  ED   000B3
  3586.                          ;                              04   A3         50       000B6
  3587.     BNEQ    9$                 ;9$                                               0F  12   000B9
  3588. 8$:    CMPL    R1, #89                 ;R1, #89                   2867 00000059   8F         51  D1   000BB
  3589.     BNEQ    10$                 ;10$                                               0B  12   000C2
  3590.     CMPL    4(R3), (R3)             ;REC_SEQ, MSG_NUMBER                                 63    04   A3  D1   000C4
  3591.     BEQL    10$                 ;10$                                               05  13   000C8
  3592. 9$:    MOVL    -16(R3), R0             ;STATE, R0                                     50    F0   A3  D0   000CA
  3593.     RET                      ;                                               04   000CE
  3594. 10$:    CLRL    -4(R3)                 ;NUM_RETRIES                   2872             FC   A3  D4   000CF
  3595.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0               2873            63         01  C1   000D2
  3596.                          ;                                         50       000D5
  3597.     EXTZV   #0, #6, R0, (R3)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   000D6
  3598.                          ;                                   63         50       000D9
  3599.     BLBS    (R4), 11$             ;ABT_ALL_FILE, 11$               2875            0C         64  E8   000DB
  3600.     CALLS   #0, G^NEXT_FILE             ;#0, NEXT_FILE                          00000000G  00         00  FB   000DE
  3601.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   000E5
  3602.     BRB     12$                 ;12$                                               07  11   000E8
  3603. 11$:    MOVL    #134316147, R2             ;#134316147, STATUS                                 52 08018073   8F  D0   000EA
  3604. 12$:    BLBC    R2, 13$                 ;STATUS, 13$                   2877            09         52  E9   000F1
  3605.     CMPL    R2, #134316147             ;STATUS, #134316147                      08018073   8F         52  D1   000F4
  3606.     BNEQ    16$                 ;16$                                               11  12   000FB
  3607. 13$:    CMPL    R2, #134316147             ;STATUS, #134316147               2881 08018073   8F         52  D1   000FD
  3608.     BEQL    15$                 ;15$                                               04  13   00104
  3609. 14$:    MOVL    #10, R0                 ;#10, R0                                     50         0A  D0   00106
  3610.     RET                      ;                                               04   00109
  3611. 15$:    MOVL    #5, R0                 ;#5, R0                                     50         05  D0   0010A
  3612.     RET                      ;                                               04   0010D
  3613. 16$:    MOVL    #1, G^FLAG_FILE_OPEN         ;#1, FLAG_FILE_OPEN               2886 00000000'  00         01  D0   0010E
  3614.     BLBC    G^FIL_NORMAL_FORM, 17$         ;FIL_NORMAL_FORM, 17$               2888            15 00000000G  00  E9   00115
  3615.     MNEGL   #1, -(SP)             ;#1, -(SP)                                     7E         01  CE   0011C
  3616.     MNEGL   #1, -(SP)             ;#1, -(SP)                                     7E         01  CE   0011F
  3617.     PUSHAB  G^FILE_SIZE             ;FILE_SIZE                                    00000000G  00  9F   00122
  3618.     PUSHL   R5                 ;R5                                               55  DD   00128
  3619.     CALLS   #4, G^U.27             ;#4, U.27                          00000000V  00         04  FB   0012A
  3620. 17$:    MOVZBL  #83, -(SP)             ;#83, -(SP)                   2890            7E    53   8F  9A   00131
  3621.     MOVZBL  #70, -(SP)             ;#70, -(SP)                                     7E    46   8F  9A   00135
  3622.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   00139
  3623.     BLBS    G^CONNECT_FLAG, 18$         ;CONNECT_FLAG, 18$               2892            17 00000000G  00  E8   00140
  3624.     BLBC    G^TY_FIL, 18$             ;TY_FIL, 18$                                     10 00000000G  00  E9   00147
  3625.     PUSHL   R5                 ;R5                       2896                  55  DD   0014E
  3626.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   00150
  3627.     CALLS   #0, G^TT_OUTPUT             ;#0, TT_OUTPUT                   2897 00000000G  00         00  FB   00157
  3628. 18$:    CLRL    2024(R3)             ;FILE_CHARS                   2900               07E8   C3  D4   0015E
  3629.     MOVL    #2, R0                 ;#2, R0                   2901            50         02  D0   00162
  3630.     RET                      ;                                               04   00165
  3631.  
  3632. ; Routine Size:  358 bytes,    Routine Base:  $CODE$ + 09C0
  3633.  
  3634.  
  3635. ;   2905  1     %SBTTL 'SEND_INIT'
  3636. ;   2906  1    ROUTINE SEND_INIT =
  3637. ;   2907  1    
  3638. ;   2908  1    !++
  3639. ;   2909  1    ! FUNCTIONAL DESCRIPTION:
  3640. ;   2910  1    !
  3641. ;   2911  1    !    This routine will send the initialization packet to the remote
  3642. ;   2912  1    !    KERMIT.  The message type sent is S.
  3643. ;   2913  1    !
  3644. ;   2914  1    ! CALLING SEQUENCE:
  3645. ;   2915  1    !
  3646. ;   2916  1    !    STATE = SEND_INIT();
  3647. ;   2917  1    !
  3648. ;   2918  1    ! INPUT PARAMETERS:
  3649. ;   2919  1    !
  3650. ;   2920  1    !    None.
  3651. ;   2921  1    !
  3652. ;   2922  1    ! IMPLICIT INPUTS:
  3653. ;   2923  1    !
  3654. ;   2924  1    !    None.
  3655. ;   2925  1    !
  3656. ;   2926  1    ! OUTPUT PARAMETERS:
  3657. ;   2927  1    !
  3658. ;   2928  1    !    New state to change the finite state machine to.
  3659. ;   2929  1    !
  3660. ;   2930  1    ! IMPLICIT OUTPUTS:
  3661. ;   2931  1    !
  3662. ;   2932  1    !    None.
  3663. ;   2933  1    !
  3664. ;   2934  1    ! COMPLETION CODES:
  3665. ;   2935  1    !
  3666. ;   2936  1    !    None.
  3667. ;   2937  1    !
  3668. ;   2938  1    ! SIDE EFFECTS:
  3669. ;   2939  1    !
  3670. ;   2940  1    !    None.
  3671. ;   2941  1    !
  3672. ;   2942  1    !--
  3673. ;   2943  1    
  3674. ;   2944  2        BEGIN
  3675. ;   2945  2    
  3676. ;   2946  2        LOCAL
  3677. ;   2947  2        STATUS;                    ! Status returned by various routines
  3678. ;   2948  2    
  3679. ;   2949  2        SET_SEND_INIT ();
  3680. ;   2950  2    
  3681. ;   2951  2        IF .NUM_RETRIES GTR .SI_RETRIES THEN RETURN STATE_ER;
  3682. ;   2952  2    
  3683. ;   2953  2    !
  3684. ;   2954  2    ! Count the number of times we try this
  3685. ;   2955  2    !
  3686. ;   2956  2        NUM_RETRIES = .NUM_RETRIES + 1;
  3687. ;   2957  2    
  3688. ;   2958  2        IF NOT SEND_PACKET (MSG_SND_INIT, .SEND_INIT_SIZE, .MSG_NUMBER) THEN RETURN STATE_EX; ! [108]
  3689. ;   2959  2    
  3690. ;   2960  2    !
  3691. ;   2961  2    ! Determine if we received a packet it good condition.  If we timed out or
  3692. ;   2962  2    ! got an illegal message, just try again.
  3693. ;   2963  2    !
  3694. ;   2964  2        STATUS = REC_PACKET ();
  3695. ;   2965  2    
  3696. ;   2966  2        IF NOT .STATUS
  3697. ;   2967  2        THEN
  3698. ;   2968  3        BEGIN
  3699. ;   2969  3    
  3700. ;   2970  4        IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
  3701. ;   2971  3        THEN
  3702. ;   2972  3            RETURN .STATE
  3703. ;   2973  3        ELSE
  3704. ;   2974  3            RETURN STATE_EX;
  3705. ;   2975  3    
  3706. ;   2976  2        END;
  3707. ;   2977  2    
  3708. ;   2978  2    !
  3709. ;   2979  2    ! Determine if the packet is good.
  3710. ;   2980  2    !
  3711. ;   2981  2    
  3712. ;   2982  2        IF .REC_TYPE NEQ MSG_ACK THEN RETURN .STATE;
  3713. ;   2983  2    
  3714. ;   2984  2        IF .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
  3715. ;   2985  2    
  3716. ;   2986  2    !
  3717. ;   2987  2    ! Here if we have an ACK for the initialization message that was just sent
  3718. ;   2988  2    ! to the remote KERMIT.
  3719. ;   2989  2    !
  3720. ;   2990  2    
  3721. ;   2991  2        IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN STATE_A;
  3722. ;   2992  2    
  3723. ;   2993  2        BLK_CHK_TYPE = .INI_CHK_TYPE;        ! We now use agreed upon block check type
  3724. ;   2994  2        NUM_RETRIES = 0;
  3725. ;   2995  2        MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  3726. ;   2996  2        RETURN STATE_OF;                ! Now need to open the file
  3727. ;   2997  1        END;
  3728.  
  3729.  
  3730.  
  3731.  
  3732.  
  3733. ;SEND_INIT
  3734. U.8:    .WORD   ^M<R2>                 ;Save R2                   2906                    0004   00000
  3735.     MOVAB   G^U.55, R2             ;U.55, R2                                     52 00000000'  00  9E   00002
  3736.     CALLS   #0, G^U.20             ;#0, U.20                   2949 00000000V  00         00  FB   00009
  3737.     CMPL    -4(R2), G^SI_RETRIES         ;NUM_RETRIES, SI_RETRIES           2951 00000000G  00    FC   A2  D1   00010
  3738.     BLEQ    1$                 ;1$                                               04  15   00018
  3739.     MOVL    #20, R0                 ;#20, R0                                     50         14  D0   0001A
  3740.     RET                      ;                                               04   0001D
  3741. 1$:    INCL    -4(R2)                 ;NUM_RETRIES                   2956             FC   A2  D6   0001E
  3742.     PUSHL   (R2)                 ;MSG_NUMBER                   2958                  62  DD   00021
  3743.     PUSHL   -36(R2)                 ;SEND_INIT_SIZE                                  DC   A2  DD   00023
  3744.     MOVZBL  #83, -(SP)             ;#83, -(SP)                                     7E    53   8F  9A   00026
  3745.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   0002A
  3746.     BLBS    R0, 2$                 ;R0, 2$                                     04         50  E8   00031
  3747.     MOVL    #19, R0                 ;#19, R0                                     50         13  D0   00034
  3748.     RET                      ;                                               04   00037
  3749. 2$:    CALLS   #0, G^U.26             ;#0, U.26                   2964 00000000V  00         00  FB   00038
  3750.     BLBS    R0, 6$                 ;STATUS, 6$                   2966            28         50  E8   0003F
  3751.     CMPL    R0, #134316234             ;STATUS, #134316234               2970 080180CA   8F         50  D1   00042
  3752.     BEQL    3$                 ;3$                                               12  13   00049
  3753.     CMPL    R0, #134316248             ;STATUS, #134316248                      080180D8   8F         50  D1   0004B
  3754.     BEQL    3$                 ;3$                                               09  13   00052
  3755.     CMPL    R0, #134316178             ;STATUS, #134316178                      08018092   8F         50  D1   00054
  3756.     BNEQ    4$                 ;4$                                               06  12   0005B
  3757. 3$:    MOVL    -16(R2), R1             ;STATE, R1                   2972            51    F0   A2  D0   0005D
  3758.     BRB     5$                 ;5$                                               03  11   00061
  3759. 4$:    MOVL    #19, R1                 ;#19, R1                   2974            51         13  D0   00063
  3760. 5$:    MOVL    R1, R0                 ;R1, R0                                     50         51  D0   00066
  3761.     RET                      ;                                               04   00069
  3762. 6$:    CMPL    12(R2), #89             ;REC_TYPE, #89                   2982 00000059   8F    0C   A2  D1   0006A
  3763.     BNEQ    7$                 ;7$                                               06  12   00072
  3764.     CMPL    4(R2), (R2)             ;REC_SEQ, MSG_NUMBER               2984            62    04   A2  D1   00074
  3765.     BEQL    8$                 ;8$                                               05  13   00078
  3766. 7$:    MOVL    -16(R2), R0             ;STATE, R0                                     50    F0   A2  D0   0007A
  3767.     RET                      ;                                               04   0007E
  3768. 8$:    CALLS   #0, G^U.21             ;#0, U.21                   2991 00000000V  00         00  FB   0007F
  3769.     BLBS    R0, 9$                 ;STATUS, 9$                                     04         50  E8   00086
  3770.     MOVL    #10, R0                 ;#10, R0                                     50         0A  D0   00089
  3771.     RET                      ;                                               04   0008C
  3772. 9$:    MOVL    -32(R2), -28(R2)         ;INI_CHK_TYPE, BLK_CHK_TYPE           2993       E4   A2    E0   A2  D0   0008D
  3773.     CLRL    -4(R2)                 ;NUM_RETRIES                   2994             FC   A2  D4   00092
  3774.     ADDL3   #1, (R2), R0             ;#1, MSG_NUMBER, R0               2995            62         01  C1   00095
  3775.                          ;                                         50       00098
  3776.     EXTZV   #0, #6, R0, (R2)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   00099
  3777.                          ;                                   62         50       0009C
  3778.     MOVL    #18, R0                 ;#18, R0                   2996            50         12  D0   0009E
  3779.     RET                      ;                                               04   000A1
  3780.  
  3781. ; Routine Size:  162 bytes,    Routine Base:  $CODE$ + 0B26
  3782.  
  3783.  
  3784. ;   2998  1     %SBTTL 'SEND_OPEN_FILE - Open file for sending'
  3785. ;   2999  1    ROUTINE SEND_OPEN_FILE =
  3786. ;   3000  1    
  3787. ;   3001  1    !++
  3788. ;   3002  1    ! FUNCTIONAL DESCRIPTION:
  3789. ;   3003  1    !
  3790. ;   3004  1    ! This routine is called from DO_TRANSACTION when the first input file
  3791. ;   3005  1    ! needs to be opened.
  3792. ;   3006  1    !
  3793. ;   3007  1    ! CALLING SEQUENCE:
  3794. ;   3008  1    !
  3795. ;   3009  1    !    STATE = SEND_OPEN_FILE ();
  3796. ;   3010  1    !
  3797. ;   3011  1    ! INPUT PARAMETERS:
  3798. ;   3012  1    !
  3799. ;   3013  1    !    None.
  3800. ;   3014  1    !
  3801. ;   3015  1    ! IMPLICIT INPUTS:
  3802. ;   3016  1    !
  3803. ;   3017  1    !    FILE_NAME, FILE_SIZE, etc.
  3804. ;   3018  1    !
  3805. ;   3019  1    ! OUPTUT PARAMETERS:
  3806. ;   3020  1    !
  3807. ;   3021  1    !    New state for FSM.
  3808. ;   3022  1    !
  3809. ;   3023  1    ! IMPLICIT OUTPUTS:
  3810. ;   3024  1    !
  3811. ;   3025  1    !    None.
  3812. ;   3026  1    !
  3813. ;   3027  1    ! COMPLETION CODES:
  3814. ;   3028  1    !
  3815. ;   3029  1    !    None.
  3816. ;   3030  1    !
  3817. ;   3031  1    ! SIDE EFFECTS:
  3818. ;   3032  1    !
  3819. ;   3033  1    !    None.
  3820. ;   3034  1    !
  3821. ;   3035  1    !--
  3822. ;   3036  1    
  3823. ;   3037  2        BEGIN
  3824. ;   3038  2    
  3825. ;   3039  2        IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  3826. ;   3040  2        THEN
  3827. ;   3041  3        BEGIN
  3828. ;   3042  3        TT_TEXT (UPLIT (%ASCIZ'Sending: '));
  3829. ;   3043  3        TT_OUTPUT ();
  3830. ;   3044  2        END;
  3831. ;   3045  2    
  3832. ;   3046  2        FILE_CHARS = 0;                ! No characters sent yet
  3833. ;   3047  2    
  3834. ;   3048  2        IF NOT .NO_FILE_NEEDED
  3835. ;   3049  2        THEN
  3836. ;   3050  2    
  3837. ;   3051  2        IF NOT FILE_OPEN (FNC_READ) THEN RETURN STATE_A ELSE FLAG_FILE_OPEN = TRUE;
  3838. ;   3052  2    
  3839. ;   3053  2    ![023]
  3840. ;   3054  2    ![023] If we want normalized file names, beat up the name now
  3841. ;   3055  2    ![023]
  3842. ;   3056  2    
  3843. ;   3057  2        IF .FIL_NORMAL_FORM THEN NORMALIZE_FILE (FILE_NAME, FILE_SIZE, -1, -1);
  3844. ;   3058  2    
  3845. ;   3059  2        XFR_STATUS (%C'F', %C'S');            ! Inform display routine
  3846. ;   3060  2    
  3847. ;   3061  2        IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  3848. ;   3062  2        THEN
  3849. ;   3063  3        BEGIN
  3850. ;   3064  3        TT_TEXT (FILE_NAME);
  3851. ;   3065  3        TT_OUTPUT ();
  3852. ;   3066  2        END;
  3853. ;   3067  2    
  3854. ;   3068  2        RETURN STATE_SF;
  3855. ;   3069  1        END;                    ! End of FSM_OPEN_FILE
  3856.  
  3857.  
  3858.  
  3859.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  3860.  
  3861. P.AAE:    .ASCII  \Sending: \<0><0><0>         ;                                3A  67  6E  69  64  6E  65  53  0003C
  3862.                          ;                                      00  00  00  20  00044
  3863.  
  3864.  
  3865.  
  3866.     .PSECT  $CODE$,NOWRT,2
  3867.  
  3868. ;SEND_OPEN_FILE
  3869. U.5:    .WORD   ^M<R2,R3,R4,R5,R6>         ;Save R2,R3,R4,R5,R6               2999                    007C   00000
  3870.     MOVAB   G^CONNECT_FLAG, R6         ;CONNECT_FLAG, R6                                 56 00000000G  00  9E   00002
  3871.     MOVAB   G^FILE_NAME, R5             ;FILE_NAME, R5                                     55 00000000G  00  9E   00009
  3872.     MOVAB   G^TT_OUTPUT, R4             ;TT_OUTPUT, R4                                     54 00000000G  00  9E   00010
  3873.     MOVAB   G^TT_TEXT, R3             ;TT_TEXT, R3                                     53 00000000G  00  9E   00017
  3874.     MOVAB   G^TY_FIL, R2             ;TY_FIL, R2                                     52 00000000G  00  9E   0001E
  3875.     BLBS    (R6), 1$             ;CONNECT_FLAG, 1$               3039            0F         66  E8   00025
  3876.     BLBC    (R2), 1$             ;TY_FIL, 1$                                     0C         62  E9   00028
  3877.     PUSHAB  G^P.AAE                 ;P.AAE                       3042           00000000'  00  9F   0002B
  3878.     CALLS   #1, (R3)             ;#1, TT_TEXT                                     63         01  FB   00031
  3879.     CALLS   #0, (R4)             ;#0, TT_OUTPUT                   3043            64         00  FB   00034
  3880. 1$:    CLRL    G^U.61                 ;U.61                       3046           00000000'  00  D4   00037
  3881.     BLBS    G^U.63, 3$             ;U.63, 3$                   3048            17 00000000'  00  E8   0003D
  3882.     CLRL    -(SP)                 ;-(SP)                       3051                  7E  D4   00044
  3883.     CALLS   #1, G^FILE_OPEN             ;#1, FILE_OPEN                          00000000G  00         01  FB   00046
  3884.     BLBS    R0, 2$                 ;R0, 2$                                     04         50  E8   0004D
  3885.     MOVL    #10, R0                 ;#10, R0                                     50         0A  D0   00050
  3886.     RET                      ;                                               04   00053
  3887. 2$:    MOVL    #1, G^FLAG_FILE_OPEN         ;#1, FLAG_FILE_OPEN                      00000000'  00         01  D0   00054
  3888. 3$:    BLBC    G^FIL_NORMAL_FORM, 4$         ;FIL_NORMAL_FORM, 4$               3057            15 00000000G  00  E9   0005B
  3889.     MNEGL   #1, -(SP)             ;#1, -(SP)                                     7E         01  CE   00062
  3890.     MNEGL   #1, -(SP)             ;#1, -(SP)                                     7E         01  CE   00065
  3891.     PUSHAB  G^FILE_SIZE             ;FILE_SIZE                                    00000000G  00  9F   00068
  3892.     PUSHL   R5                 ;R5                                               55  DD   0006E
  3893.     CALLS   #4, G^U.27             ;#4, U.27                          00000000V  00         04  FB   00070
  3894. 4$:    MOVZBL  #83, -(SP)             ;#83, -(SP)                   3059            7E    53   8F  9A   00077
  3895.     MOVZBL  #70, -(SP)             ;#70, -(SP)                                     7E    46   8F  9A   0007B
  3896.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   0007F
  3897.     BLBS    (R6), 5$             ;CONNECT_FLAG, 5$               3061            0B         66  E8   00086
  3898.     BLBC    (R2), 5$             ;TY_FIL, 5$                                     08         62  E9   00089
  3899.     PUSHL   R5                 ;R5                       3064                  55  DD   0008C
  3900.     CALLS   #1, (R3)             ;#1, TT_TEXT                                     63         01  FB   0008E
  3901.     CALLS   #0, (R4)             ;#0, TT_OUTPUT                   3065            64         00  FB   00091
  3902. 5$:    MOVL    #2, R0                 ;#2, R0                   3068            50         02  D0   00094
  3903.     RET                      ;                                               04   00097
  3904.  
  3905. ; Routine Size:  152 bytes,    Routine Base:  $CODE$ + 0BC8
  3906.  
  3907.  
  3908. ;   3070  1     %SBTTL 'SEND_GENCMD'
  3909. ;   3071  1    ROUTINE SEND_GENCMD =
  3910. ;   3072  1    
  3911. ;   3073  1    !++
  3912. ;   3074  1    ! FUNCTIONAL DESCRIPTION:
  3913. ;   3075  1    !
  3914. ;   3076  1    !    This routine will send a command packet to the server Kermit.
  3915. ;   3077  1    !    The new state will depend upon the response.  If a send-init
  3916. ;   3078  1    !    is received, it will process it and switch to STATE_RF.
  3917. ;   3079  1    !    If a text-header is received it will switch to STATE_RD.
  3918. ;   3080  1    !    If an ACK is received, it will type the data portion and
  3919. ;   3081  1    !    switch to STATE_C.
  3920. ;   3082  1    !
  3921. ;   3083  1    ! CALLING SEQUENCE:
  3922. ;   3084  1    !
  3923. ;   3085  1    !    STATE = SEND_GENCMD();
  3924. ;   3086  1    !
  3925. ;   3087  1    ! INPUT PARAMETERS:
  3926. ;   3088  1    !
  3927. ;   3089  1    !    None.
  3928. ;   3090  1    !
  3929. ;   3091  1    ! IMPLICIT INPUTS:
  3930. ;   3092  1    !
  3931. ;   3093  1    !    GEN_TYPE - Message type to send (normally MSG_GENERIC)
  3932. ;   3094  1    !    GEN_SUBTYPE - Message subtype (only if MSG_GENERIC)
  3933. ;   3095  1    !    GEN_1DATA - First argument string
  3934. ;   3096  1    !    GEN_1SIZE - Size of first argument
  3935. ;   3097  1    !    GEN_2DATA - Second argument string
  3936. ;   3098  1    !    GEN_2SIZE - Size of second argument
  3937. ;   3099  1    !    GEN_3DATA - Third argument string
  3938. ;   3100  1    !    GEN_3SIZE - Size of third argument
  3939. ;   3101  1    !
  3940. ;   3102  1    ! OUTPUT PARAMETERS:
  3941. ;   3103  1    !
  3942. ;   3104  1    !    New state for the finite state machine.
  3943. ;   3105  1    !
  3944. ;   3106  1    ! IMPLICIT OUTPUTS:
  3945. ;   3107  1    !
  3946. ;   3108  1    !    None.
  3947. ;   3109  1    !
  3948. ;   3110  1    ! COMPLETION CODES:
  3949. ;   3111  1    !
  3950. ;   3112  1    !    None.
  3951. ;   3113  1    !
  3952. ;   3114  1    ! SIDE EFFECTS:
  3953. ;   3115  1    !
  3954. ;   3116  1    !    None.
  3955. ;   3117  1    !
  3956. ;   3118  1    !--
  3957. ;   3119  1    
  3958. ;   3120  2        BEGIN
  3959. ;   3121  2    
  3960. ;   3122  2        LOCAL
  3961. ;   3123  2        POINTER,                ! Pointer at DATA_TEXT
  3962. ;   3124  2        DATA_TEXT : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Data buffer
  3963. ;   3125  2        DATA_SIZE,                ! Length of data buffer used
  3964. ;   3126  2        STATUS;                    ! Status returned by various routines
  3965. ;   3127  2    
  3966. ;   3128  2        ROUTINE PACK_DATA (POINTER, LENGTH, SRC_ADDR, SRC_LEN) =
  3967. ;   3129  2    !
  3968. ;   3130  2    ! Routine to pack an argument into the buffer.
  3969. ;   3131  2    !
  3970. ;   3132  3        BEGIN
  3971. ;   3133  3    
  3972. ;   3134  3        IF .SRC_LEN GTR MAX_MSG - .LENGTH - 1 THEN SRC_LEN = MAX_MSG - .LENGTH - 1;
  3973. ;   3135  3    
  3974. ;   3136  3        LENGTH = .LENGTH + .SRC_LEN + 1;
  3975. ;   3137  3        CH$WCHAR_A (CHAR (.SRC_LEN), .POINTER);
  3976. ;   3138  3        .POINTER = CH$MOVE (.SRC_LEN, CH$PTR (.SRC_ADDR), ..POINTER);
  3977. ;   3139  3        RETURN .LENGTH;
  3978. ;   3140  2        END;
  3979.  
  3980.  
  3981.  
  3982.  
  3983.  
  3984. ;PACK_DATA
  3985. U.77:    .WORD   ^M<R2,R3,R4,R5>             ;Save R2,R3,R4,R5               3128                    003C   00000
  3986.     SUBL3   #1001, 8(AP), R1         ;#1001, LENGTH, R1               3134       08   AC 000003E9   8F  C3   00002
  3987.                          ;                                         51       0000A
  3988.     MNEGL   R1, R0                 ;R1, R0                                     50         51  CE   0000B
  3989.     CMPL    16(AP), R0             ;SRC_LEN, R0                                     50    10   AC  D1   0000E
  3990.     BLEQ    1$                 ;1$                                               04  15   00012
  3991.     MNEGL   R1, 16(AP)             ;R1, SRC_LEN                                10   AC         51  CE   00014
  3992. 1$:    ADDL3   16(AP), 8(AP), R0         ;SRC_LEN, LENGTH, R0               3136       08   AC    10   AC  C1   00018
  3993.                          ;                                         50       0001D
  3994.     MOVAB   1(R0), 8(AP)             ;1(R0), LENGTH                                08   AC    01   A0  9E   0001E
  3995.     MOVL    4(AP), R0             ;POINTER, R0                   3137            50    04   AC  D0   00023
  3996.     ADDB3   #32, 16(AP), @0(R0)         ;#32, SRC_LEN, @0(R0)                            10   AC         20  81   00027
  3997.                          ;                                    00   B0       0002B
  3998.     INCL    (R0)                 ;(R0)                                               60  D6   0002D
  3999.     MOVL    @4(AP), R0             ;@POINTER, R0                   3138            50    04   BC  D0   0002F
  4000.     MOVC3   16(AP), @12(AP), (R0)         ;SRC_LEN, @SRC_ADDR, (R0)                        0C   BC    10   AC  28   00033
  4001.                          ;                                         60       00038
  4002.     MOVL    R3, @4(AP)             ;R3, @POINTER                                04   BC         53  D0   00039
  4003.     MOVL    8(AP), R0             ;LENGTH, R0                   3139            50    08   AC  D0   0003D
  4004.     RET                      ;                                               04   00041
  4005.  
  4006. ; Routine Size:  66 bytes,    Routine Base:  $CODE$ + 0C60
  4007.  
  4008.  
  4009. ;   3141  2    !
  4010. ;   3142  2    ! First determine if we have exceed the number of retries that are
  4011. ;   3143  2    ! allowed to attempt to send this message.
  4012. ;   3144  2    !
  4013. ;   3145  2    
  4014. ;   3146  2        IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  4015. ;   3147  2    
  4016. ;   3148  2    !
  4017. ;   3149  2    ! The number of retries are not exceeded.  Increment the number and then
  4018. ;   3150  2    ! attempt to send the packet again.
  4019. ;   3151  2    !
  4020. ;   3152  2        NUM_RETRIES = .NUM_RETRIES + 1;
  4021. ;   3153  2    !
  4022. ;   3154  2    ! Build the packet data field
  4023. ;   3155  2    !
  4024. ;   3156  2        POINTER = CH$PTR (DATA_TEXT);
  4025. ;   3157  2        DATA_SIZE = 0;
  4026. ;   3158  2    
  4027. ;   3159  2        IF .GEN_TYPE EQL MSG_GENERIC
  4028. ;   3160  2        THEN
  4029. ;   3161  3        BEGIN
  4030. ;   3162  3        CH$WCHAR_A (.GEN_SUBTYPE, POINTER);
  4031. ;   3163  3        DATA_SIZE = 1;
  4032. ;   3164  3    
  4033. ;   3165  3        IF .GEN_1SIZE GTR 0 OR .GEN_2SIZE GTR 0 OR .GEN_3SIZE GTR 0
  4034. ;   3166  3        THEN
  4035. ;   3167  4            BEGIN
  4036. ;   3168  4            DATA_SIZE = PACK_DATA (POINTER, .DATA_SIZE, GEN_1DATA, .GEN_1SIZE);
  4037. ;   3169  4    
  4038. ;   3170  4            IF .GEN_2SIZE GTR 0 OR .GEN_3SIZE GTR 0
  4039. ;   3171  4            THEN
  4040. ;   3172  5            BEGIN
  4041. ;   3173  5            DATA_SIZE = PACK_DATA (POINTER, .DATA_SIZE, GEN_2DATA, .GEN_2SIZE);
  4042. ;   3174  5    
  4043. ;   3175  5            IF .GEN_3SIZE GTR 0
  4044. ;   3176  5            THEN
  4045. ;   3177  6                BEGIN
  4046. ;   3178  6                DATA_SIZE = PACK_DATA (POINTER, .DATA_SIZE, GEN_3DATA, .GEN_3SIZE);
  4047. ;   3179  5                END;
  4048. ;   3180  5    
  4049. ;   3181  4            END;
  4050. ;   3182  4    
  4051. ;   3183  3            END;
  4052. ;   3184  3    
  4053. ;   3185  3        END
  4054. ;   3186  2        ELSE
  4055. ;   3187  3        BEGIN
  4056. ;   3188  3    
  4057. ;   3189  3        IF .GEN_1SIZE GTR MAX_MSG THEN GEN_1SIZE = MAX_MSG;
  4058. ;   3190  3    
  4059. ;   3191  3        DATA_SIZE = .GEN_1SIZE;
  4060. ;   3192  3        CH$MOVE (.GEN_1SIZE, CH$PTR (GEN_1DATA), .POINTER);
  4061. ;   3193  2        END;
  4062. ;   3194  2    
  4063. ;   3195  2        SET_STRING (CH$PTR (DATA_TEXT), .DATA_SIZE, TRUE);
  4064. ;   3196  2        BFR_FILL (TRUE);
  4065. ;   3197  2        SET_STRING (0, 0, FALSE);
  4066. ;   3198  2    !
  4067. ;   3199  2    ! Send the packet
  4068. ;   3200  2    !
  4069. ;   3201  2    
  4070. ;   3202  2        IF NOT SEND_PACKET (.GEN_TYPE, .SIZE, .MSG_NUMBER) THEN RETURN STATE_EX;
  4071. ;   3203  2    
  4072. ;   3204  2    !
  4073. ;   3205  2    ! Now get the responce from the remote KERMIT.
  4074. ;   3206  2    !
  4075. ;   3207  2        STATUS = REC_PACKET ();
  4076. ;   3208  2    
  4077. ;   3209  2        IF NOT .STATUS
  4078. ;   3210  2        THEN
  4079. ;   3211  3        BEGIN
  4080. ;   3212  3    
  4081. ;   3213  4        IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
  4082. ;   3214  3        THEN
  4083. ;   3215  3            RETURN .STATE
  4084. ;   3216  3        ELSE
  4085. ;   3217  3            RETURN STATE_EX;
  4086. ;   3218  3    
  4087. ;   3219  2        END;
  4088. ;   3220  2    
  4089. ;   3221  2    ! Did we get a send-init?
  4090. ;   3222  2    
  4091. ;   3223  2        SELECTONE .REC_TYPE OF
  4092. ;   3224  2        SET
  4093. ;   3225  2    
  4094. ;   3226  2        [MSG_SND_INIT] :
  4095. ;   3227  3            BEGIN
  4096. ;   3228  3            MSG_NUMBER = .REC_SEQ;        ! Initialize sequence numbers
  4097. ;   3229  3    ! Determine if the parameters are ok.  If not, give up
  4098. ;   3230  3    
  4099. ;   3231  3            IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN .STATUS;
  4100. ;   3232  3    
  4101. ;   3233  3            SET_SEND_INIT ();            ! Set up our acknowledgement to the send-init
  4102. ;   3234  3            SEND_PACKET (MSG_ACK, .send_init_size, .MSG_NUMBER); ! Send it
  4103. ;   3235  3            BLK_CHK_TYPE = .INI_CHK_TYPE;    ! Can now use agreed upon type
  4104. ;   3236  3            OLD_RETRIES = .NUM_RETRIES;
  4105. ;   3237  3            NUM_RETRIES = 0;
  4106. ;   3238  3            MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  4107. ;   3239  3            RETURN STATE_RF;            ! Now expect file header
  4108. ;   3240  2            END;
  4109. ;   3241  2    
  4110. ;   3242  2        [MSG_TEXT] :
  4111. ;   3243  2    !
  4112. ;   3244  2    ! If we just got a text header, set up for typing on the terminal and
  4113. ;   3245  2    ! shift to receiving data
  4114. ;   3246  2    !
  4115. ;   3247  3            BEGIN
  4116. ;   3248  3            TEXT_HEAD_FLAG = TRUE;        ! We want terminal output
  4117. ;   3249  3            PUT_CHR_ROUTINE = TYPE_CHAR;    ! Set up the put a character routine
  4118. ;   3250  3    
  4119. ;   3251  3            IF .REC_LENGTH GTR 0
  4120. ;   3252  3            THEN
  4121. ;   3253  4            BEGIN
  4122. ;   3254  4            TT_TEXT (UPLIT (%ASCIZ'<<'));    ! Make sure file name sticks out
  4123. ;   3255  4            BFR_EMPTY ();            ! Dump the packet data to the terminal
  4124. ;   3256  4            TT_TEXT (UPLIT (%ASCIZ'>>'));    ! So user can tell where name ends
  4125. ;   3257  4            TT_CRLF ();            ! And a CRLF
  4126. ;   3258  3            END;
  4127. ;   3259  3    
  4128. ;   3260  3            SEND_PACKET (MSG_ACK, 0, .MSG_NUMBER);    ! Send an ACK
  4129. ;   3261  3            OLD_RETRIES = .NUM_RETRIES;
  4130. ;   3262  3            NUM_RETRIES = 0;
  4131. ;   3263  3            MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  4132. ;   3264  3            RETURN STATE_RD;            ! We now want data
  4133. ;   3265  2            END;
  4134. ;   3266  2    
  4135. ;   3267  2        [MSG_ACK] :
  4136. ;   3268  2    !
  4137. ;   3269  2    ! If we get an ACK, just type the data on the terminal and complete the
  4138. ;   3270  2    ! transaction.
  4139. ;   3271  2    !
  4140. ;   3272  3            BEGIN
  4141. ;   3273  3            PUT_CHR_ROUTINE = TYPE_CHAR;    ! Dump to terminal
  4142. ;   3274  3            BFR_EMPTY ();            ! Do it
  4143. ;   3275  3    
  4144. ;   3276  3            IF .REC_LENGTH GTR 0 THEN TT_CRLF ();
  4145. ;   3277  3    
  4146. ;   3278  3            RETURN STATE_C;            ! And go idle
  4147. ;   3279  2            END;
  4148. ;   3280  2    
  4149. ;   3281  2        [MSG_NAK] :
  4150. ;   3282  2    !
  4151. ;   3283  2    ! If we get a NAK, stay in the same state.  We will re-transmit the
  4152. ;   3284  2    ! packet again.
  4153. ;   3285  2    !
  4154. ;   3286  2            RETURN .STATE;
  4155. ;   3287  2        TES;
  4156. ;   3288  2    
  4157. ;   3289  2    !
  4158. ;   3290  2    ! If we get here, we didn't get anything resembling an acceptable
  4159. ;   3291  2    ! packet, so we will abort.
  4160. ;   3292  2    !
  4161. ;   3293  2        KRM_ERROR (KER_PROTOERR);
  4162. ;   3294  2        RETURN STATE_A;
  4163. ;   3295  1        END;
  4164.  
  4165.  
  4166.  
  4167.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  4168.  
  4169. P.AAF:    .ASCII  \<<\<0><0>             ;                                            00  00  3C  3C  00048
  4170. P.AAG:    .ASCII  \>>\<0><0>             ;                                            00  00  3E  3E  0004C
  4171.  
  4172.  
  4173.  
  4174.     .PSECT  $CODE$,NOWRT,2
  4175.  
  4176. ;SEND_GENCMD
  4177. U.6:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,-   3071                    0FFC   00000
  4178.         R11>                 ;R11
  4179.     MOVAB   G^U.24, R11             ;U.24, R11                                     5B 00000000V  00  9E   00002
  4180.     MOVAB   B^U.77, R10             ;U.77, R10                                     5A    B2   AF  9E   00009
  4181.     MOVAB   G^GEN_3SIZE, R9             ;GEN_3SIZE, R9                                     59 00000000G  00  9E   0000D
  4182.     MOVAB   G^GEN_1SIZE, R8             ;GEN_1SIZE, R8                                     58 00000000G  00  9E   00014
  4183.     MOVAB   G^U.55, R7             ;U.55, R7                                     57 00000000'  00  9E   0001B
  4184.     MOVAB   -1008(SP), SP             ;-1008(SP), SP                                     5E     FC10   CE  9E   00022
  4185.     CMPL    -4(R7), G^PKT_RETRIES         ;NUM_RETRIES, PKT_RETRIES           3146 00000000G  00    FC   A7  D1   00027
  4186.     BLEQ    1$                 ;1$                                               04  15   0002F
  4187.     MOVL    #20, R0                 ;#20, R0                                     50         14  D0   00031
  4188.     RET                      ;                                               04   00034
  4189. 1$:    INCL    -4(R7)                 ;NUM_RETRIES                   3152             FC   A7  D6   00035
  4190.     MOVAB   4(SP), (SP)             ;DATA_TEXT, POINTER               3156            6E    04   AE  9E   00038
  4191.     CLRL    R6                 ;DATA_SIZE                   3157                  56  D4   0003C
  4192.     MOVL    (R8), R0             ;GEN_1SIZE, R0                   3165            50         68  D0   0003E
  4193.     CMPL    2040(R7), #71             ;GEN_TYPE, #71                   3159 00000047   8F     07F8   C7  D1   00041
  4194.     BNEQ    4$                 ;4$                                               68  12   0004A
  4195.     MOVB    2044(R7), @0(SP)         ;GEN_SUBTYPE, @POINTER               3162       00   BE     07FC   C7  90   0004C
  4196.     INCL    (SP)                 ;POINTER                                           6E  D6   00052
  4197.     MOVL    #1, R6                 ;#1, DATA_SIZE                   3163            56         01  D0   00054
  4198.     TSTL    R0                 ;R0                       3165                  50  D5   00057
  4199.     BGTR    2$                 ;2$                                               0C  14   00059
  4200.     TSTL    G^GEN_2SIZE             ;GEN_2SIZE                                    00000000G  00  D5   0005B
  4201.     BGTR    2$                 ;2$                                               04  14   00061
  4202.     TSTL    (R9)                 ;GEN_3SIZE                                           69  D5   00063
  4203.     BLEQ    6$                 ;6$                                               6A  15   00065
  4204. 2$:    PUSHL   R0                 ;R0                       3168                  50  DD   00067
  4205.     PUSHAB  G^GEN_1DATA             ;GEN_1DATA                                    00000000G  00  9F   00069
  4206.     PUSHL   R6                 ;DATA_SIZE                                           56  DD   0006F
  4207.     PUSHAB  12(SP)                 ;POINTER                                      0C   AE  9F   00071
  4208.     CALLS   #4, (R10)             ;#4, PACK_DATA                                     6A         04  FB   00074
  4209.     MOVL    R0, R6                 ;R0, DATA_SIZE                                     56         50  D0   00077
  4210.     MOVL    G^GEN_2SIZE, R0             ;GEN_2SIZE, R0                   3170            50 00000000G  00  D0   0007A
  4211.     BGTR    3$                 ;3$                                               04  14   00081
  4212.     TSTL    (R9)                 ;GEN_3SIZE                                           69  D5   00083
  4213.     BLEQ    6$                 ;6$                                               4A  15   00085
  4214. 3$:    PUSHL   R0                 ;R0                       3173                  50  DD   00087
  4215.     PUSHAB  G^GEN_2DATA             ;GEN_2DATA                                    00000000G  00  9F   00089
  4216.     PUSHL   R6                 ;DATA_SIZE                                           56  DD   0008F
  4217.     PUSHAB  12(SP)                 ;POINTER                                      0C   AE  9F   00091
  4218.     CALLS   #4, (R10)             ;#4, PACK_DATA                                     6A         04  FB   00094
  4219.     MOVL    R0, R6                 ;R0, DATA_SIZE                                     56         50  D0   00097
  4220.     MOVL    (R9), R0             ;GEN_3SIZE, R0                   3175            50         69  D0   0009A
  4221.     BLEQ    6$                 ;6$                                               32  15   0009D
  4222.     PUSHL   R0                 ;R0                       3178                  50  DD   0009F
  4223.     PUSHAB  G^GEN_3DATA             ;GEN_3DATA                                    00000000G  00  9F   000A1
  4224.     PUSHL   R6                 ;DATA_SIZE                                           56  DD   000A7
  4225.     PUSHAB  12(SP)                 ;POINTER                                      0C   AE  9F   000A9
  4226.     CALLS   #4, (R10)             ;#4, PACK_DATA                                     6A         04  FB   000AC
  4227.     MOVL    R0, R6                 ;R0, DATA_SIZE                                     56         50  D0   000AF
  4228.     BRB     6$                 ;6$                                               1D  11   000B2
  4229. 4$:    CMPL    R0, #1002             ;R0, #1002                   3189 000003EA   8F         50  D1   000B4
  4230.     BLEQ    5$                 ;5$                                               05  15   000BB
  4231.     MOVZWL  #1002, (R8)             ;#1002, GEN_1SIZE                                 68     03EA   8F  3C   000BD
  4232. 5$:    MOVL    (R8), R0             ;GEN_1SIZE, R0                   3191            50         68  D0   000C2
  4233.     MOVL    R0, R6                 ;R0, DATA_SIZE                                     56         50  D0   000C5
  4234.     MOVC3   R0, G^GEN_1DATA, @0(SP)         ;R0, GEN_1DATA, @POINTER           3192 00000000G  00         50  28   000C8
  4235.                          ;                                    00   BE       000CF
  4236. 6$:    PUSHL   #1                 ;#1                       3195                  01  DD   000D1
  4237.     PUSHL   R6                 ;DATA_SIZE                                           56  DD   000D3
  4238.     PUSHAB  12(SP)                 ;DATA_TEXT                                      0C   AE  9F   000D5
  4239.     CALLS   #3, G^U.30             ;#3, U.30                          00000000V  00         03  FB   000D8
  4240.     PUSHL   #1                 ;#1                       3196                  01  DD   000DF
  4241.     CALLS   #1, G^U.29             ;#1, U.29                          00000000V  00         01  FB   000E1
  4242.     CLRQ    -(SP)                 ;-(SP)                       3197                  7E  7C   000E8
  4243.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   000EA
  4244.     CALLS   #3, G^U.30             ;#3, U.30                          00000000V  00         03  FB   000EC
  4245.     PUSHL   (R7)                 ;MSG_NUMBER                   3202                  67  DD   000F3
  4246.     PUSHL   -12(R7)                 ;SIZE                                          F4   A7  DD   000F5
  4247.     PUSHL   2040(R7)             ;GEN_TYPE                                        07F8   C7  DD   000F8
  4248.     CALLS   #3, (R11)             ;#3, SEND_PACKET                                 6B         03  FB   000FC
  4249.     BLBS    R0, 7$                 ;R0, 7$                                     04         50  E8   000FF
  4250.     MOVL    #19, R0                 ;#19, R0                                     50         13  D0   00102
  4251.     RET                      ;                                               04   00105
  4252. 7$:    CALLS   #0, G^U.26             ;#0, U.26                   3207 00000000V  00         00  FB   00106
  4253.     BLBS    R0, 11$                 ;STATUS, 11$                   3209            28         50  E8   0010D
  4254.     CMPL    R0, #134316234             ;STATUS, #134316234               3213 080180CA   8F         50  D1   00110
  4255.     BEQL    8$                 ;8$                                               12  13   00117
  4256.     CMPL    R0, #134316248             ;STATUS, #134316248                      080180D8   8F         50  D1   00119
  4257.     BEQL    8$                 ;8$                                               09  13   00120
  4258.     CMPL    R0, #134316178             ;STATUS, #134316178                      08018092   8F         50  D1   00122
  4259.     BNEQ    9$                 ;9$                                               06  12   00129
  4260. 8$:    MOVL    -16(R7), R1             ;STATE, R1                   3215            51    F0   A7  D0   0012B
  4261.     BRB     10$                 ;10$                                               03  11   0012F
  4262. 9$:    MOVL    #19, R1                 ;#19, R1                   3217            51         13  D0   00131
  4263. 10$:    MOVL    R1, R0                 ;R1, R0                                     50         51  D0   00134
  4264.     RET                      ;                                               04   00137
  4265. 11$:    MOVL    12(R7), R1             ;REC_TYPE, R1                   3223            51    0C   A7  D0   00138
  4266.     CMPL    R1, #83                 ;R1, #83                   3226 00000053   8F         51  D1   0013C
  4267.     BNEQ    13$                 ;13$                                               3C  12   00143
  4268.     MOVL    4(R7), (R7)             ;REC_SEQ, MSG_NUMBER               3228            67    04   A7  D0   00145
  4269.     CALLS   #0, G^U.21             ;#0, U.21                   3231 00000000V  00         00  FB   00149
  4270.     BLBS    R0, 12$                 ;STATUS, 12$                                     01         50  E8   00150
  4271.     RET                      ;                                               04   00153
  4272. 12$:    CALLS   #0, G^U.20             ;#0, U.20                   3233 00000000V  00         00  FB   00154
  4273.     PUSHL   (R7)                 ;MSG_NUMBER                   3234                  67  DD   0015B
  4274.     PUSHL   -36(R7)                 ;SEND_INIT_SIZE                                  DC   A7  DD   0015D
  4275.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   00160
  4276.     CALLS   #3, (R11)             ;#3, SEND_PACKET                                 6B         03  FB   00164
  4277.     MOVL    -32(R7), -28(R7)         ;INI_CHK_TYPE, BLK_CHK_TYPE           3235       E4   A7    E0   A7  D0   00167
  4278.     MOVL    -4(R7), -8(R7)             ;NUM_RETRIES, OLD_RETRIES           3236       F8   A7    FC   A7  D0   0016C
  4279.     CLRL    -4(R7)                 ;NUM_RETRIES                   3237             FC   A7  D4   00171
  4280.     ADDL3   #1, (R7), R0             ;#1, MSG_NUMBER, R0               3238            67         01  C1   00174
  4281.                          ;                                         50       00177
  4282.     EXTZV   #0, #6, R0, (R7)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   00178
  4283.                          ;                                   67         50       0017B
  4284.     MOVL    #7, R0                 ;#7, R0                   3239            50         07  D0   0017D
  4285.     RET                      ;                                               04   00180
  4286. 13$:    CMPL    R1, #88                 ;R1, #88                   3242 00000058   8F         51  D1   00181
  4287.     BNEQ    15$                 ;15$                                               5B  12   00188
  4288.     MOVL    #1, 2028(R7)             ;#1, TEXT_HEAD_FLAG               3248     07EC   C7         01  D0   0018A
  4289.     MOVAB   G^U.31, 2052(R7)         ;U.31, PUT_CHR_ROUTINE               3249     0804   C7 00000000V  00  9E   0018F
  4290.     TSTL    8(R7)                 ;REC_LENGTH                   3251             08   A7  D5   00198
  4291.     BLEQ    14$                 ;14$                                               28  15   0019B
  4292.     PUSHAB  G^P.AAF                 ;P.AAF                       3254           00000000'  00  9F   0019D
  4293.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   001A3
  4294.     CALLS   #0, G^U.28             ;#0, U.28                   3255 00000000V  00         00  FB   001AA
  4295.     PUSHAB  G^P.AAG                 ;P.AAG                       3256           00000000'  00  9F   001B1
  4296.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   001B7
  4297.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   3257 00000000G  00         00  FB   001BE
  4298. 14$:    PUSHL   (R7)                 ;MSG_NUMBER                   3260                  67  DD   001C5
  4299.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   001C7
  4300.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   001C9
  4301.     CALLS   #3, (R11)             ;#3, SEND_PACKET                                 6B         03  FB   001CD
  4302.     MOVL    -4(R7), -8(R7)             ;NUM_RETRIES, OLD_RETRIES           3261       F8   A7    FC   A7  D0   001D0
  4303.     CLRL    -4(R7)                 ;NUM_RETRIES                   3262             FC   A7  D4   001D5
  4304.     ADDL3   #1, (R7), R0             ;#1, MSG_NUMBER, R0               3263            67         01  C1   001D8
  4305.                          ;                                         50       001DB
  4306.     EXTZV   #0, #6, R0, (R7)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   001DC
  4307.                          ;                                   67         50       001DF
  4308.     MOVL    #8, R0                 ;#8, R0                   3264            50         08  D0   001E1
  4309.     RET                      ;                                               04   001E4
  4310. 15$:    CMPL    R1, #89                 ;R1, #89                   3267 00000059   8F         51  D1   001E5
  4311.     BNEQ    17$                 ;17$                                               20  12   001EC
  4312.     MOVAB   G^U.31, 2052(R7)         ;U.31, PUT_CHR_ROUTINE               3273     0804   C7 00000000V  00  9E   001EE
  4313.     CALLS   #0, G^U.28             ;#0, U.28                   3274 00000000V  00         00  FB   001F7
  4314.     TSTL    8(R7)                 ;REC_LENGTH                   3276             08   A7  D5   001FE
  4315.     BLEQ    16$                 ;16$                                               07  15   00201
  4316.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                          00000000G  00         00  FB   00203
  4317. 16$:    MOVL    #9, R0                 ;#9, R0                   3278            50         09  D0   0020A
  4318.     RET                      ;                                               04   0020D
  4319. 17$:    CMPL    R1, #78                 ;R1, #78                   3281 0000004E   8F         51  D1   0020E
  4320.     BNEQ    18$                 ;18$                                               05  12   00215
  4321.     MOVL    -16(R7), R0             ;STATE, R0                   3286            50    F0   A7  D0   00217
  4322.     RET                      ;                                               04   0021B
  4323. 18$:    PUSHL   #134316226             ;#134316226                   3293           080180C2   8F  DD   0021C
  4324.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   00222
  4325.     MOVL    #10, R0                 ;#10, R0                   3294            50         0A  D0   00229
  4326.     RET                      ;                                               04   0022C
  4327.  
  4328. ; Routine Size:  557 bytes,    Routine Base:  $CODE$ + 0CA2
  4329.  
  4330.  
  4331. ;   3296  1     %SBTTL 'SEND_BREAK'
  4332. ;   3297  1    ROUTINE SEND_BREAK =
  4333. ;   3298  1    
  4334. ;   3299  1    !++
  4335. ;   3300  1    ! FUNCTIONAL DESCRIPTION:
  4336. ;   3301  1    !
  4337. ;   3302  1    !    This routine will send the break (end of transmission) message
  4338. ;   3303  1    !    to the remote KERMIT.  On an ACK the state becomes STATE_C.
  4339. ;   3304  1    !
  4340. ;   3305  1    ! CALLING SEQUENCE:
  4341. ;   3306  1    !
  4342. ;   3307  1    !    STATE = SEND_BREAK();
  4343. ;   3308  1    !
  4344. ;   3309  1    ! INPUT PARAMETERS:
  4345. ;   3310  1    !
  4346. ;   3311  1    !    None.
  4347. ;   3312  1    !
  4348. ;   3313  1    ! IMPLICIT INPUTS:
  4349. ;   3314  1    !
  4350. ;   3315  1    !    None.
  4351. ;   3316  1    !
  4352. ;   3317  1    ! OUTPUT PARAMETERS:
  4353. ;   3318  1    !
  4354. ;   3319  1    !    New state for the finite state machine.
  4355. ;   3320  1    !
  4356. ;   3321  1    ! IMPLICIT OUTPUTS:
  4357. ;   3322  1    !
  4358. ;   3323  1    !    None.
  4359. ;   3324  1    !
  4360. ;   3325  1    ! COMPLETION CODES:
  4361. ;   3326  1    !
  4362. ;   3327  1    !    None.
  4363. ;   3328  1    !
  4364. ;   3329  1    ! SIDE EFFECTS:
  4365. ;   3330  1    !
  4366. ;   3331  1    !    None.
  4367. ;   3332  1    !
  4368. ;   3333  1    !--
  4369. ;   3334  1    
  4370. ;   3335  2        BEGIN
  4371. ;   3336  2    
  4372. ;   3337  2        LOCAL
  4373. ;   3338  2        STATUS;                    ! Status returned by various routines
  4374. ;   3339  2    
  4375. ;   3340  2    !
  4376. ;   3341  2    ! First determine if we have exceed the number of retries that are
  4377. ;   3342  2    ! allowed to attempt to send this message.
  4378. ;   3343  2    !
  4379. ;   3344  2    
  4380. ;   3345  2        IF .NUM_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  4381. ;   3346  2    
  4382. ;   3347  2    !
  4383. ;   3348  2    ! The number of retries are not exceeded.  Increment the number and then
  4384. ;   3349  2    ! attempt to send the packet again.
  4385. ;   3350  2    !
  4386. ;   3351  2        NUM_RETRIES = .NUM_RETRIES + 1;
  4387. ;   3352  2    
  4388. ;   3353  2        IF NOT SEND_PACKET (MSG_BREAK, 0, .MSG_NUMBER) THEN RETURN STATE_EX;
  4389. ;   3354  2    
  4390. ;   3355  2    !
  4391. ;   3356  2    ! Now get the responce from the remote KERMIT.
  4392. ;   3357  2    !
  4393. ;   3358  2        STATUS = REC_PACKET ();
  4394. ;   3359  2    
  4395. ;   3360  2        IF NOT .STATUS
  4396. ;   3361  2        THEN
  4397. ;   3362  3        BEGIN
  4398. ;   3363  3    
  4399. ;   3364  4        IF (.STATUS EQL KER_ZEROLENMSG) OR (.STATUS EQL KER_TIMEOUT) OR (.STATUS EQL KER_CHKSUMERR)
  4400. ;   3365  3        THEN
  4401. ;   3366  3            RETURN .STATE
  4402. ;   3367  3        ELSE
  4403. ;   3368  3            RETURN STATE_EX;
  4404. ;   3369  3    
  4405. ;   3370  2        END;
  4406. ;   3371  2    
  4407. ;   3372  2    !
  4408. ;   3373  2    ! Determine if the packet is good.
  4409. ;   3374  2    !
  4410. ;   3375  2    
  4411. ;   3376  3        IF NOT (.REC_TYPE EQL MSG_ACK OR .REC_TYPE EQL MSG_NAK)
  4412. ;   3377  2        THEN
  4413. ;   3378  3        BEGIN
  4414. ;   3379  3        KRM_ERROR (KER_PROTOERR);
  4415. ;   3380  3        RETURN STATE_A;
  4416. ;   3381  2        END;
  4417. ;   3382  2    
  4418. ;   3383  2    !
  4419. ;   3384  2    ! If this is a NAK and the message number is not the one we just send
  4420. ;   3385  2    ! treat this like an ACK, otherwise resend the last packet.
  4421. ;   3386  2    !
  4422. ;   3387  2    
  4423. ;   3388  2        IF .REC_TYPE EQL MSG_NAK AND .REC_SEQ NEQ 0 THEN RETURN .STATE;
  4424. ;   3389  2    
  4425. ;   3390  2        IF .REC_TYPE EQL MSG_ACK AND .REC_SEQ NEQ .MSG_NUMBER THEN RETURN .STATE;
  4426. ;   3391  2    
  4427. ;   3392  2    !
  4428. ;   3393  2    ! Here to determine if there is another file to send.
  4429. ;   3394  2    !
  4430. ;   3395  2        NUM_RETRIES = 0;
  4431. ;   3396  2        MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  4432. ;   3397  2        RETURN STATE_C;
  4433. ;   3398  1        END;
  4434.  
  4435.  
  4436.  
  4437.  
  4438.  
  4439. ;SEND_BREAK
  4440. U.9:    .WORD   ^M<R2>                 ;Save R2                   3297                    0004   00000
  4441.     MOVAB   G^U.55, R2             ;U.55, R2                                     52 00000000'  00  9E   00002
  4442.     CMPL    -4(R2), G^PKT_RETRIES         ;NUM_RETRIES, PKT_RETRIES           3345 00000000G  00    FC   A2  D1   00009
  4443.     BLEQ    1$                 ;1$                                               04  15   00011
  4444.     MOVL    #20, R0                 ;#20, R0                                     50         14  D0   00013
  4445.     RET                      ;                                               04   00016
  4446. 1$:    INCL    -4(R2)                 ;NUM_RETRIES                   3351             FC   A2  D6   00017
  4447.     PUSHL   (R2)                 ;MSG_NUMBER                   3353                  62  DD   0001A
  4448.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   0001C
  4449.     MOVZBL  #66, -(SP)             ;#66, -(SP)                                     7E    42   8F  9A   0001E
  4450.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   00022
  4451.     BLBC    R0, 2$                 ;R0, 2$                                     25         50  E9   00029
  4452.     CALLS   #0, G^U.26             ;#0, U.26                   3358 00000000V  00         00  FB   0002C
  4453.     BLBS    R0, 3$                 ;STATUS, 3$                   3360            1F         50  E8   00033
  4454.     CMPL    R0, #134316234             ;STATUS, #134316234               3364 080180CA   8F         50  D1   00036
  4455.     BEQL    6$                 ;6$                                               5E  13   0003D
  4456.     CMPL    R0, #134316248             ;STATUS, #134316248                      080180D8   8F         50  D1   0003F
  4457.     BEQL    6$                 ;6$                                               55  13   00046
  4458.     CMPL    R0, #134316178             ;STATUS, #134316178                      08018092   8F         50  D1   00048
  4459.     BEQL    6$                 ;6$                                               4C  13   0004F
  4460. 2$:    MOVL    #19, R0                 ;#19, R0                   3368            50         13  D0   00051
  4461.     RET                      ;                                               04   00054
  4462. 3$:    MOVL    12(R2), R0             ;REC_TYPE, R0                   3376            50    0C   A2  D0   00055
  4463.     CMPL    R0, #89                 ;R0, #89                          00000059   8F         50  D1   00059
  4464.     BEQL    4$                 ;4$                                               1A  13   00060
  4465.     CMPL    R0, #78                 ;R0, #78                          0000004E   8F         50  D1   00062
  4466.     BEQL    4$                 ;4$                                               11  13   00069
  4467.     PUSHL   #134316226             ;#134316226                   3379           080180C2   8F  DD   0006B
  4468.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   00071
  4469.     MOVL    #10, R0                 ;#10, R0                   3380            50         0A  D0   00078
  4470.     RET                      ;                                               04   0007B
  4471. 4$:    MOVL    12(R2), R0             ;REC_TYPE, R0                   3388            50    0C   A2  D0   0007C
  4472.     CMPL    R0, #78                 ;R0, #78                          0000004E   8F         50  D1   00080
  4473.     BNEQ    5$                 ;5$                                               05  12   00087
  4474.     TSTL    4(R2)                 ;REC_SEQ                                      04   A2  D5   00089
  4475.     BNEQ    6$                 ;6$                                               0F  12   0008C
  4476. 5$:    CMPL    R0, #89                 ;R0, #89                   3390 00000059   8F         50  D1   0008E
  4477.     BNEQ    7$                 ;7$                                               0B  12   00095
  4478.     CMPL    4(R2), (R2)             ;REC_SEQ, MSG_NUMBER                                 62    04   A2  D1   00097
  4479.     BEQL    7$                 ;7$                                               05  13   0009B
  4480. 6$:    MOVL    -16(R2), R0             ;STATE, R0                                     50    F0   A2  D0   0009D
  4481.     RET                      ;                                               04   000A1
  4482. 7$:    CLRL    -4(R2)                 ;NUM_RETRIES                   3395             FC   A2  D4   000A2
  4483.     ADDL3   #1, (R2), R0             ;#1, MSG_NUMBER, R0               3396            62         01  C1   000A5
  4484.                          ;                                         50       000A8
  4485.     EXTZV   #0, #6, R0, (R2)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   000A9
  4486.                          ;                                   62         50       000AC
  4487.     MOVL    #9, R0                 ;#9, R0                   3397            50         09  D0   000AE
  4488.     RET                      ;                                               04   000B1
  4489.  
  4490. ; Routine Size:  178 bytes,    Routine Base:  $CODE$ + 0ECF
  4491.  
  4492.  
  4493. ;   3399  1     %SBTTL 'REC_INIT'
  4494. ;   3400  1    ROUTINE REC_INIT =
  4495. ;   3401  1    
  4496. ;   3402  1    !++
  4497. ;   3403  1    ! FUNCTIONAL DESCRIPTION:
  4498. ;   3404  1    !
  4499. ;   3405  1    !    This routine will process an initialization message received from
  4500. ;   3406  1    !    the remote KERMIT.
  4501. ;   3407  1    !
  4502. ;   3408  1    ! CALLING SEQUENCE:
  4503. ;   3409  1    !
  4504. ;   3410  1    !    STATE = REC_INIT();
  4505. ;   3411  1    !
  4506. ;   3412  1    ! INPUT PARAMETERS:
  4507. ;   3413  1    !
  4508. ;   3414  1    !    None.
  4509. ;   3415  1    !
  4510. ;   3416  1    ! IMPLICIT INPUTS:
  4511. ;   3417  1    !
  4512. ;   3418  1    !    None.
  4513. ;   3419  1    !
  4514. ;   3420  1    ! OUTPUT PARAMETERS:
  4515. ;   3421  1    !
  4516. ;   3422  1    !    New machine state.
  4517. ;   3423  1    !
  4518. ;   3424  1    ! IMPLICIT OUTPUTS:
  4519. ;   3425  1    !
  4520. ;   3426  1    !    None.
  4521. ;   3427  1    !
  4522. ;   3428  1    ! COMPLETION CODES:
  4523. ;   3429  1    !
  4524. ;   3430  1    !    None.
  4525. ;   3431  1    !
  4526. ;   3432  1    ! SIDE EFFECTS:
  4527. ;   3433  1    !
  4528. ;   3434  1    !    None.
  4529. ;   3435  1    !
  4530. ;   3436  1    !--
  4531. ;   3437  1    
  4532. ;   3438  2        BEGIN
  4533. ;   3439  2    
  4534. ;   3440  2        LOCAL
  4535. ;   3441  2        STATUS;                    ! Status returned by various routines
  4536. ;   3442  2    
  4537. ;   3443  2        ROUTINE CHECK_INIT =
  4538. ;   3444  3        BEGIN
  4539. ;   3445  3    
  4540. ;   3446  3        IF .REC_TYPE EQL MSG_SND_INIT THEN RETURN TRUE ELSE RETURN FALSE;
  4541. ;   3447  3    
  4542. ;   3448  2        END;
  4543.  
  4544.  
  4545.  
  4546.  
  4547.  
  4548. ;CHECK_INIT
  4549. U.78:    .WORD   ^M<>                 ;Save nothing                   3443                    0000   00000
  4550.     CMPL    G^U.58, #83             ;U.58, #83                   3446 00000053   8F 00000000'  00  D1   00002
  4551.     BNEQ    1$                 ;1$                                               04  12   0000D
  4552.     MOVL    #1, R0                 ;#1, R0                                     50         01  D0   0000F
  4553.     RET                      ;                                               04   00012
  4554. 1$:    CLRL    R0                 ;R0                                               50  D4   00013
  4555.     RET                      ;                                               04   00015
  4556.  
  4557. ; Routine Size:  22 bytes,    Routine Base:  $CODE$ + 0F81
  4558.  
  4559.  
  4560. ;   3449  2    
  4561. ;   3450  3        IF NOT (STATUS = REC_MESSAGE (CHECK_INIT))
  4562. ;   3451  2        THEN
  4563. ;   3452  2    
  4564. ;   3453  2        IF .STATUS NEQ KER_ABORTED THEN RETURN STATE_A ELSE RETURN STATE_EX;
  4565. ;   3454  2    
  4566. ;   3455  2        MSG_NUMBER = .REC_SEQ;
  4567. ;   3456  2    
  4568. ;   3457  2        IF NOT (STATUS = PRS_SEND_INIT ()) THEN RETURN STATE_A;
  4569. ;   3458  2    
  4570. ;   3459  2        SET_SEND_INIT ();
  4571. ;   3460  2        SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .MSG_NUMBER);    ! [108]
  4572. ;   3461  2        BLK_CHK_TYPE = .INI_CHK_TYPE;        ! Can now use agreed upon type
  4573. ;   3462  2        OLD_RETRIES = .NUM_RETRIES;
  4574. ;   3463  2        NUM_RETRIES = 0;
  4575. ;   3464  2        MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  4576. ;   3465  2        RETURN STATE_RF;
  4577. ;   3466  1        END;                    ! End of REC_INIT
  4578.  
  4579.  
  4580.  
  4581.  
  4582.  
  4583. ;REC_INIT
  4584. U.11:    .WORD   ^M<R2>                 ;Save R2                   3400                    0004   00000
  4585.     MOVAB   G^U.55, R2             ;U.55, R2                                     52 00000000'  00  9E   00002
  4586.     PUSHAB  B^U.78                 ;U.78                       3450             DE   AF  9F   00009
  4587.     CALLS   #1, G^U.25             ;#1, U.25                          00000000V  00         01  FB   0000C
  4588.     BLBS    R0, 3$                 ;STATUS, 3$                                     15         50  E8   00013
  4589.     CMPL    R0, #134316258             ;STATUS, #134316258               3453 080180E2   8F         50  D1   00016
  4590.     BEQL    1$                 ;1$                                               05  13   0001D
  4591.     MOVL    #10, R1                 ;#10, R1                                     51         0A  D0   0001F
  4592.     BRB     2$                 ;2$                                               03  11   00022
  4593. 1$:    MOVL    #19, R1                 ;#19, R1                                     51         13  D0   00024
  4594. 2$:    MOVL    R1, R0                 ;R1, R0                                     50         51  D0   00027
  4595.     RET                      ;                                               04   0002A
  4596. 3$:    MOVL    4(R2), (R2)             ;REC_SEQ, MSG_NUMBER               3455            62    04   A2  D0   0002B
  4597.     CALLS   #0, G^U.21             ;#0, U.21                   3457 00000000V  00         00  FB   0002F
  4598.     BLBS    R0, 4$                 ;STATUS, 4$                                     04         50  E8   00036
  4599.     MOVL    #10, R0                 ;#10, R0                                     50         0A  D0   00039
  4600.     RET                      ;                                               04   0003C
  4601. 4$:    CALLS   #0, G^U.20             ;#0, U.20                   3459 00000000V  00         00  FB   0003D
  4602.     PUSHL   (R2)                 ;MSG_NUMBER                   3460                  62  DD   00044
  4603.     PUSHL   -36(R2)                 ;SEND_INIT_SIZE                                  DC   A2  DD   00046
  4604.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   00049
  4605.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   0004D
  4606.     MOVL    -32(R2), -28(R2)         ;INI_CHK_TYPE, BLK_CHK_TYPE           3461       E4   A2    E0   A2  D0   00054
  4607.     MOVL    -4(R2), -8(R2)             ;NUM_RETRIES, OLD_RETRIES           3462       F8   A2    FC   A2  D0   00059
  4608.     CLRL    -4(R2)                 ;NUM_RETRIES                   3463             FC   A2  D4   0005E
  4609.     ADDL3   #1, (R2), R0             ;#1, MSG_NUMBER, R0               3464            62         01  C1   00061
  4610.                          ;                                         50       00064
  4611.     EXTZV   #0, #6, R0, (R2)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   00065
  4612.                          ;                                   62         50       00068
  4613.     MOVL    #7, R0                 ;#7, R0                   3465            50         07  D0   0006A
  4614.     RET                      ;                                               04   0006D
  4615.  
  4616. ; Routine Size:  110 bytes,    Routine Base:  $CODE$ + 0F97
  4617.  
  4618.  
  4619. ;   3467  1     %SBTTL 'REC_FILE'
  4620. ;   3468  1    ROUTINE REC_FILE =
  4621. ;   3469  1    
  4622. ;   3470  1    !++
  4623. ;   3471  1    ! FUNCTIONAL DESCRIPTION:
  4624. ;   3472  1    !
  4625. ;   3473  1    !    This routine expects to receive an MSG_FILE packet from the remote
  4626. ;   3474  1    !    KERMIT.  If the message is correct this routine will change the state
  4627. ;   3475  1    !    to STATE_RD.
  4628. ;   3476  1    !
  4629. ;   3477  1    !    This routine also expects MSG_SND_INIT, MSG_EOF, or MSG_BREAK.
  4630. ;   3478  1    !
  4631. ;   3479  1    ! CALLING SEQUENCE:
  4632. ;   3480  1    !
  4633. ;   3481  1    !    STATE = REC_FILE();
  4634. ;   3482  1    !
  4635. ;   3483  1    ! INPUT PARAMETERS:
  4636. ;   3484  1    !
  4637. ;   3485  1    !    None.
  4638. ;   3486  1    !
  4639. ;   3487  1    ! IMPLICIT INPUTS:
  4640. ;   3488  1    !
  4641. ;   3489  1    !    None.
  4642. ;   3490  1    !
  4643. ;   3491  1    ! OUTPUT PARAMETERS:
  4644. ;   3492  1    !
  4645. ;   3493  1    !    New state.
  4646. ;   3494  1    !
  4647. ;   3495  1    ! IMPLICIT OUTPUTS:
  4648. ;   3496  1    !
  4649. ;   3497  1    !    None.
  4650. ;   3498  1    !
  4651. ;   3499  1    ! COMPLETION CODES:
  4652. ;   3500  1    !
  4653. ;   3501  1    !    None.
  4654. ;   3502  1    !
  4655. ;   3503  1    ! SIDE EFFECTS:
  4656. ;   3504  1    !
  4657. ;   3505  1    !    None.
  4658. ;   3506  1    !
  4659. ;   3507  1    !--
  4660. ;   3508  1    
  4661. ;   3509  2        BEGIN
  4662. ;   3510  2    
  4663. ;   3511  2        LOCAL
  4664. ;   3512  2        STATUS;
  4665. ;   3513  2    
  4666. ;   3514  2        ROUTINE CHECK_FILE =
  4667. ;   3515  3        BEGIN
  4668. ;   3516  3    
  4669. ;   3517  4        IF (.REC_TYPE EQL MSG_SND_INIT) OR (.REC_TYPE EQL MSG_EOF) OR (.REC_TYPE EQL MSG_FILE) OR (
  4670. ;   3518  4            .REC_TYPE EQL MSG_BREAK) OR (.REC_TYPE EQL MSG_TEXT)
  4671. ;   3519  3        THEN
  4672. ;   3520  3            RETURN TRUE
  4673. ;   3521  3        ELSE
  4674. ;   3522  3            RETURN FALSE;
  4675. ;   3523  3    
  4676. ;   3524  2        END;
  4677.  
  4678.  
  4679.  
  4680.  
  4681.  
  4682. ;CHECK_FILE
  4683. U.79:    .WORD   ^M<>                 ;Save nothing                   3514                    0000   00000
  4684.     MOVL    G^U.58, R0             ;U.58, R0                   3517            50 00000000'  00  D0   00002
  4685.     CMPL    R0, #83                 ;R0, #83                          00000053   8F         50  D1   00009
  4686.     BEQL    1$                 ;1$                                               24  13   00010
  4687.     CMPL    R0, #90                 ;R0, #90                          0000005A   8F         50  D1   00012
  4688.     BEQL    1$                 ;1$                                               1B  13   00019
  4689.     CMPL    R0, #70                 ;R0, #70                          00000046   8F         50  D1   0001B
  4690.     BEQL    1$                 ;1$                                               12  13   00022
  4691.     CMPL    R0, #66                 ;R0, #66                   3518 00000042   8F         50  D1   00024
  4692.     BEQL    1$                 ;1$                                               09  13   0002B
  4693.     CMPL    R0, #88                 ;R0, #88                          00000058   8F         50  D1   0002D
  4694.     BNEQ    2$                 ;2$                                               04  12   00034
  4695. 1$:    MOVL    #1, R0                 ;#1, R0                   3520            50         01  D0   00036
  4696.     RET                      ;                                               04   00039
  4697. 2$:    CLRL    R0                 ;R0                       3522                  50  D4   0003A
  4698.     RET                      ;                                               04   0003C
  4699.  
  4700. ; Routine Size:  61 bytes,    Routine Base:  $CODE$ + 1005
  4701.  
  4702.  
  4703. ;   3525  2    !
  4704. ;   3526  2    ! Initialize the abort flags
  4705. ;   3527  2    !
  4706. ;   3528  2        ABT_CUR_FILE = FALSE;
  4707. ;   3529  2        ABT_ALL_FILE = FALSE;
  4708. ;   3530  2    !
  4709. ;   3531  2    ! Get a message
  4710. ;   3532  2    !
  4711. ;   3533  2    
  4712. ;   3534  3        IF NOT (STATUS = REC_MESSAGE (CHECK_FILE))
  4713. ;   3535  2        THEN
  4714. ;   3536  2    
  4715. ;   3537  2        IF .STATUS NEQ KER_ABORTED THEN RETURN STATE_A ELSE RETURN STATE_EX;
  4716. ;   3538  2    
  4717. ;   3539  2        SELECTONE .REC_TYPE OF
  4718. ;   3540  2        SET
  4719. ;   3541  2    
  4720. ;   3542  2        [MSG_SND_INIT] :
  4721. ;   3543  3            BEGIN
  4722. ;   3544  3    
  4723. ;   3545  3            IF .OLD_RETRIES GTR .SI_RETRIES THEN RETURN STATE_ER;
  4724. ;   3546  3    
  4725. ;   3547  3            OLD_RETRIES = .OLD_RETRIES + 1;
  4726. ;   3548  3    
  4727. ;   3549  3            IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
  4728. ;   3550  3            THEN
  4729. ;   3551  4            BEGIN
  4730. ;   3552  4            SET_SEND_INIT ();
  4731. ;   3553  4            BLK_CHK_TYPE = CHK_1CHAR;    ! Must use 1 character CHKSUM
  4732. ;   3554  4            SEND_PACKET (MSG_ACK, .SEND_INIT_SIZE, .REC_SEQ); ! [108]
  4733. ;   3555  4            BLK_CHK_TYPE = .INI_CHK_TYPE;    ! Back to agreed upon type
  4734. ;   3556  4            NUM_RETRIES = 0;
  4735. ;   3557  4            RETURN .STATE;
  4736. ;   3558  4            END
  4737. ;   3559  3            ELSE
  4738. ;   3560  4            BEGIN
  4739. ;   3561  4            KRM_ERROR (KER_PROTOERR);
  4740. ;   3562  4            RETURN STATE_A;
  4741. ;   3563  3            END;
  4742. ;   3564  3    
  4743. ;   3565  2            END;
  4744. ;   3566  2    
  4745. ;   3567  2        [MSG_EOF] :
  4746. ;   3568  3            BEGIN
  4747. ;   3569  3    
  4748. ;   3570  3            IF .OLD_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  4749. ;   3571  3    
  4750. ;   3572  3            OLD_RETRIES = .OLD_RETRIES + 1;
  4751. ;   3573  3    
  4752. ;   3574  3            IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
  4753. ;   3575  3            THEN
  4754. ;   3576  4            BEGIN
  4755. ;   3577  4            SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
  4756. ;   3578  4            NUM_RETRIES = 0;
  4757. ;   3579  4            RETURN .STATE;
  4758. ;   3580  4            END
  4759. ;   3581  3            ELSE
  4760. ;   3582  4            BEGIN
  4761. ;   3583  4            KRM_ERROR (KER_PROTOERR);
  4762. ;   3584  4            RETURN STATE_A;
  4763. ;   3585  3            END;
  4764. ;   3586  3    
  4765. ;   3587  2            END;
  4766. ;   3588  2    
  4767. ;   3589  2        [MSG_FILE] :
  4768. ;   3590  3            BEGIN
  4769. ;   3591  3    
  4770. ;   3592  3            IF .MSG_NUMBER NEQ .REC_SEQ THEN RETURN STATE_ER;
  4771. ;   3593  3    
  4772. ;   3594  3            IF .REC_LENGTH EQL 0
  4773. ;   3595  3            THEN
  4774. ;   3596  4            BEGIN
  4775. ;   3597  4            KRM_ERROR (KER_PROTOERR);
  4776. ;   3598  4            RETURN STATE_A;
  4777. ;   3599  3            END;
  4778. ;   3600  3    
  4779. ;   3601  3    ![025]
  4780. ;   3602  3    ![025] Get file name from packet with all quoting undone
  4781. ;   3603  3    ![025]
  4782. ;   3604  3            SET_STRING (CH$PTR (FILE_NAME), MAX_FILE_NAME, TRUE);
  4783. ;   3605  3            BFR_EMPTY ();
  4784. ;   3606  3            FILE_SIZE = SET_STRING (0, 0, FALSE);
  4785. ;   3607  3            CH$WCHAR (CHR_NUL, CH$PTR (FILE_NAME, .FILE_SIZE));
  4786. ;   3608  3    ![025]        FILE_SIZE = .REC_LENGTH;
  4787. ;   3609  3    ![025]        CH$COPY (.REC_LENGTH, CH$PTR (REC_MSG, PKT_MSG, CHR_SIZE), CHR_NUL, MAX_FILE_NAME,
  4788. ;   3610  3    ![025]        CH$PTR (FILE_NAME));
  4789. ;   3611  3    
  4790. ;   3612  3            IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  4791. ;   3613  3            THEN
  4792. ;   3614  4            BEGIN
  4793. ;   3615  4            TT_TEXT (UPLIT (%ASCIZ'Receiving: '));
  4794. ;   3616  4            TT_TEXT (FILE_NAME);
  4795. ;   3617  4            TT_OUTPUT ();
  4796. ;   3618  3            END;
  4797. ;   3619  3    
  4798. ;   3620  3    ![023]
  4799. ;   3621  3    ![023] Force file name into normal form if desired
  4800. ;   3622  3    ![023]
  4801. ;   3623  3    
  4802. ;   3624  3            IF .FIL_NORMAL_FORM THEN NORMALIZE_FILE (FILE_NAME, FILE_SIZE, 39, 39);
  4803. ;   3625  3    
  4804. ;   3626  3            FILE_CHARS = 0;            ! No characters received yet
  4805. ;   3627  3    
  4806. ;   3628  3            IF NOT FILE_OPEN (FNC_WRITE) THEN RETURN STATE_A;
  4807. ;   3629  3    
  4808. ;   3630  3            XFR_STATUS (%C'F', %C'R');        ! Tell display routine
  4809. ;   3631  3            TEXT_HEAD_FLAG = FALSE;        ! Got an F, not an X
  4810. ;   3632  3            FLAG_FILE_OPEN = TRUE;
  4811. ;   3633  3            SEND_PACKET (MSG_ACK, 0, .MSG_NUMBER);
  4812. ;   3634  3            OLD_RETRIES = .NUM_RETRIES;
  4813. ;   3635  3            NUM_RETRIES = 0;
  4814. ;   3636  3            MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  4815. ;   3637  3            RETURN STATE_RD;
  4816. ;   3638  2            END;
  4817. ;   3639  2    
  4818. ;   3640  2        [MSG_TEXT] :
  4819. ;   3641  2    !
  4820. ;   3642  2    ! If we get a text header, we will want to type the data on
  4821. ;   3643  2    ! the terminal.  Set up the put a character routine correctly.
  4822. ;   3644  2    !
  4823. ;   3645  3            BEGIN
  4824. ;   3646  3    
  4825. ;   3647  3            IF .MSG_NUMBER NEQ .REC_SEQ
  4826. ;   3648  3            THEN
  4827. ;   3649  4            BEGIN
  4828. ;   3650  4            KRM_ERROR (KER_PROTOERR);
  4829. ;   3651  4            RETURN STATE_A;
  4830. ;   3652  3            END;
  4831. ;   3653  3    
  4832. ;   3654  3            TEXT_HEAD_FLAG = TRUE;        ! Got an X, not an F
  4833. ;   3655  3            PUT_CHR_ROUTINE = TYPE_CHAR;    ! Empty buffer on terminal
  4834. ;   3656  3    
  4835. ;   3657  3            IF .REC_LENGTH GTR 0
  4836. ;   3658  3            THEN
  4837. ;   3659  4            BEGIN
  4838. ;   3660  4            TT_TEXT (UPLIT (%ASCIZ'<<'));    ! Make file name stick out
  4839. ;   3661  4            BFR_EMPTY ();            ! Do the header data
  4840. ;   3662  4            TT_TEXT (UPLIT (%ASCIZ'>>'));
  4841. ;   3663  4            TT_CRLF ();            ! And a crlf
  4842. ;   3664  3            END;
  4843. ;   3665  3    
  4844. ;   3666  3            SEND_PACKET (MSG_ACK, 0, .MSG_NUMBER);
  4845. ;   3667  3            OLD_RETRIES = .NUM_RETRIES;
  4846. ;   3668  3            NUM_RETRIES = 0;
  4847. ;   3669  3            MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  4848. ;   3670  3            RETURN STATE_RD;
  4849. ;   3671  2            END;
  4850. ;   3672  2    
  4851. ;   3673  2        [MSG_BREAK] :
  4852. ;   3674  3            BEGIN
  4853. ;   3675  3    
  4854. ;   3676  3            IF .MSG_NUMBER NEQ .REC_SEQ
  4855. ;   3677  3            THEN
  4856. ;   3678  4            BEGIN
  4857. ;   3679  4            KRM_ERROR (KER_PROTOERR);
  4858. ;   3680  4            RETURN STATE_A;
  4859. ;   3681  3            END;
  4860. ;   3682  3    
  4861. ;   3683  3            SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
  4862. ;   3684  3            RETURN STATE_C;
  4863. ;   3685  2            END;
  4864. ;   3686  2    
  4865. ;   3687  2        [OTHERWISE] :
  4866. ;   3688  3            BEGIN
  4867. ;   3689  3            KRM_ERROR (KER_PROTOERR);
  4868. ;   3690  3            RETURN STATE_A;
  4869. ;   3691  2            END;
  4870. ;   3692  2        TES;
  4871. ;   3693  2    
  4872. ;   3694  1        END;                    ! End of REC_FILE
  4873.  
  4874.  
  4875.  
  4876.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  4877.  
  4878. P.AAH:    .ASCII  \Receiving: \<0>         ;                                6E  69  76  69  65  63  65  52  00050
  4879.                          ;                                      00  20  3A  67  00058
  4880. P.AAI:    .ASCII  \<<\<0><0>             ;                                            00  00  3C  3C  0005C
  4881. P.AAJ:    .ASCII  \>>\<0><0>             ;                                            00  00  3E  3E  00060
  4882.  
  4883.  
  4884.  
  4885.     .PSECT  $CODE$,NOWRT,2
  4886.  
  4887. ;REC_FILE
  4888. U.12:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9>     ;Save R2,R3,R4,R5,R6,R7,R8,R9           3468                    03FC   00000
  4889.     MOVAB   G^FILE_SIZE, R9             ;FILE_SIZE, R9                                     59 00000000G  00  9E   00002
  4890.     MOVAB   G^U.28, R8             ;U.28, R8                                     58 00000000V  00  9E   00009
  4891.     MOVAB   G^U.30, R7             ;U.30, R7                                     57 00000000V  00  9E   00010
  4892.     MOVAB   G^P.AAH, R6             ;P.AAH, R6                                     56 00000000'  00  9E   00017
  4893.     MOVAB   G^TT_TEXT, R5             ;TT_TEXT, R5                                     55 00000000G  00  9E   0001E
  4894.     MOVAB   G^FILE_NAME, R4             ;FILE_NAME, R4                                     54 00000000G  00  9E   00025
  4895.     MOVAB   G^U.24, R3             ;U.24, R3                                     53 00000000V  00  9E   0002C
  4896.     MOVAB   G^U.55, R2             ;U.55, R2                                     52 00000000'  00  9E   00033
  4897.     CLRL    G^ABT_CUR_FILE             ;ABT_CUR_FILE                   3528           00000000G  00  D4   0003A
  4898.     CLRL    G^ABT_ALL_FILE             ;ABT_ALL_FILE                   3529           00000000G  00  D4   00040
  4899.     PUSHAB  W^U.79                 ;U.79                       3534               FF79   CF  9F   00046
  4900.     CALLS   #1, G^U.25             ;#1, U.25                          00000000V  00         01  FB   0004A
  4901.     BLBS    R0, 2$                 ;STATUS, 2$                                     10         50  E8   00051
  4902.     CMPL    R0, #134316258             ;STATUS, #134316258               3537 080180E2   8F         50  D1   00054
  4903.     BEQL    1$                 ;1$                                               03  13   0005B
  4904.     BRW     18$                 ;18$                                             01A2  31   0005D
  4905. 1$:    MOVL    #19, R0                 ;#19, R0                                     50         13  D0   00060
  4906.     RET                      ;                                               04   00063
  4907. 2$:    MOVL    12(R2), R0             ;REC_TYPE, R0                   3539            50    0C   A2  D0   00064
  4908.     CMPL    R0, #83                 ;R0, #83                   3542 00000053   8F         50  D1   00068
  4909.     BNEQ    3$                 ;3$                                               38  12   0006F
  4910.     CMPL    -8(R2), G^SI_RETRIES         ;OLD_RETRIES, SI_RETRIES           3545 00000000G  00    F8   A2  D1   00071
  4911.     BGTR    7$                 ;7$                                               78  14   00079
  4912.     INCL    -8(R2)                 ;OLD_RETRIES                   3547             F8   A2  D6   0007B
  4913.     SUBL3   #1, (R2), R0             ;#1, MSG_NUMBER, R0               3549            62         01  C3   0007E
  4914.                          ;                                         50       00081
  4915.     CMPZV   #0, #6, R0, 4(R2)         ;#0, #6, R0, REC_SEQ                                 06         00  ED   00082
  4916.                          ;                              04   A2         50       00085
  4917.     BNEQ    9$                 ;9$                                               72  12   00088
  4918.     CALLS   #0, G^U.20             ;#0, U.20                   3552 00000000V  00         00  FB   0008A
  4919.     MOVL    #49, -28(R2)             ;#49, BLK_CHK_TYPE               3553       E4   A2         31  D0   00091
  4920.     PUSHL   4(R2)                 ;REC_SEQ                   3554             04   A2  DD   00095
  4921.     PUSHL   -36(R2)                 ;SEND_INIT_SIZE                                  DC   A2  DD   00098
  4922.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   0009B
  4923.     CALLS   #3, (R3)             ;#3, SEND_PACKET                                 63         03  FB   0009F
  4924.     MOVL    -32(R2), -28(R2)         ;INI_CHK_TYPE, BLK_CHK_TYPE           3555       E4   A2    E0   A2  D0   000A2
  4925.     BRB     4$                 ;4$                       3556                  30  11   000A7
  4926. 3$:    CMPL    R0, #90                 ;R0, #90                   3567 0000005A   8F         50  D1   000A9
  4927.     BNEQ    5$                 ;5$                                               2F  12   000B0
  4928.     CMPL    -8(R2), G^PKT_RETRIES         ;OLD_RETRIES, PKT_RETRIES           3570 00000000G  00    F8   A2  D1   000B2
  4929.     BGTR    7$                 ;7$                                               37  14   000BA
  4930.     INCL    -8(R2)                 ;OLD_RETRIES                   3572             F8   A2  D6   000BC
  4931.     SUBL3   #1, (R2), R1             ;#1, MSG_NUMBER, R1               3574            62         01  C3   000BF
  4932.                          ;                                         51       000C2
  4933.     MOVL    4(R2), R0             ;REC_SEQ, R0                                     50    04   A2  D0   000C3
  4934.     CMPZV   #0, #6, R1, R0             ;#0, #6, R1, R0                                 06         00  ED   000C7
  4935.                          ;                                   50         51       000CA
  4936.     BNEQ    9$                 ;9$                                               2E  12   000CC
  4937.     PUSHL   R0                 ;R0                       3577                  50  DD   000CE
  4938.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   000D0
  4939.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   000D2
  4940.     CALLS   #3, (R3)             ;#3, SEND_PACKET                                 63         03  FB   000D6
  4941. 4$:    CLRL    -4(R2)                 ;NUM_RETRIES                   3578             FC   A2  D4   000D9
  4942.     MOVL    -16(R2), R0             ;STATE, R0                   3579            50    F0   A2  D0   000DC
  4943.     RET                      ;                                               04   000E0
  4944. 5$:    CMPL    R0, #70                 ;R0, #70                   3589 00000046   8F         50  D1   000E1
  4945.     BEQL    6$                 ;6$                                               03  13   000E8
  4946.     BRW     14$                 ;14$                                             0091  31   000EA
  4947. 6$:    CMPL    (R2), 4(R2)             ;MSG_NUMBER, REC_SEQ               3592       04   A2         62  D1   000ED
  4948.     BEQL    8$                 ;8$                                               04  13   000F1
  4949. 7$:    MOVL    #20, R0                 ;#20, R0                                     50         14  D0   000F3
  4950.     RET                      ;                                               04   000F6
  4951. 8$:    TSTL    8(R2)                 ;REC_LENGTH                   3594             08   A2  D5   000F7
  4952.     BNEQ    10$                 ;10$                                               03  12   000FA
  4953. 9$:    BRW     17$                 ;17$                                             00F6  31   000FC
  4954. 10$:    PUSHL   #1                 ;#1                       3604                  01  DD   000FF
  4955.     MOVZBL  #132, -(SP)             ;#132, -(SP)                                     7E    84   8F  9A   00101
  4956.     PUSHL   R4                 ;R4                                               54  DD   00105
  4957.     CALLS   #3, (R7)             ;#3, SET_STRING                                 67         03  FB   00107
  4958.     CALLS   #0, (R8)             ;#0, BFR_EMPTY                   3605            68         00  FB   0010A
  4959.     CLRQ    -(SP)                 ;-(SP)                       3606                  7E  7C   0010D
  4960.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   0010F
  4961.     CALLS   #3, (R7)             ;#3, SET_STRING                                 67         03  FB   00111
  4962.     MOVL    R0, (R9)             ;R0, FILE_SIZE                                     69         50  D0   00114
  4963.     CLRB    (R4)[R0]             ;FILE_NAME[R0]                   3607                6440  94   00117
  4964.     BLBS    G^CONNECT_FLAG, 11$         ;CONNECT_FLAG, 11$               3612            18 00000000G  00  E8   0011A
  4965.     BLBC    G^TY_FIL, 11$             ;TY_FIL, 11$                                     11 00000000G  00  E9   00121
  4966.     PUSHL   R6                 ;R6                       3615                  56  DD   00128
  4967.     CALLS   #1, (R5)             ;#1, TT_TEXT                                     65         01  FB   0012A
  4968.     PUSHL   R4                 ;R4                       3616                  54  DD   0012D
  4969.     CALLS   #1, (R5)             ;#1, TT_TEXT                                     65         01  FB   0012F
  4970.     CALLS   #0, G^TT_OUTPUT             ;#0, TT_OUTPUT                   3617 00000000G  00         00  FB   00132
  4971. 11$:    BLBC    G^FIL_NORMAL_FORM, 12$         ;FIL_NORMAL_FORM, 12$               3624            0F 00000000G  00  E9   00139
  4972.     PUSHL   #39                 ;#39                                               27  DD   00140
  4973.     PUSHL   #39                 ;#39                                               27  DD   00142
  4974.     PUSHR   #^M<R4,R9>             ;#^M<R4,R9>                                        0210   8F  BB   00144
  4975.     CALLS   #4, G^U.27             ;#4, U.27                          00000000V  00         04  FB   00148
  4976. 12$:    CLRL    2024(R2)             ;FILE_CHARS                   3626               07E8   C2  D4   0014F
  4977.     PUSHL   #1                 ;#1                       3628                  01  DD   00153
  4978.     CALLS   #1, G^FILE_OPEN             ;#1, FILE_OPEN                          00000000G  00         01  FB   00155
  4979.     BLBS    R0, 13$                 ;R0, 13$                                     03         50  E8   0015C
  4980.     BRW     18$                 ;18$                                             00A0  31   0015F
  4981. 13$:    MOVZBL  #82, -(SP)             ;#82, -(SP)                   3630            7E    52   8F  9A   00162
  4982.     MOVZBL  #70, -(SP)             ;#70, -(SP)                                     7E    46   8F  9A   00166
  4983.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   0016A
  4984.     CLRL    2028(R2)             ;TEXT_HEAD_FLAG               3631               07EC   C2  D4   00171
  4985.     MOVL    #1, G^FLAG_FILE_OPEN         ;#1, FLAG_FILE_OPEN               3632 00000000'  00         01  D0   00175
  4986.     BRB     15$                 ;15$                       3633                  38  11   0017C
  4987. 14$:    CMPL    R0, #88                 ;R0, #88                   3640 00000058   8F         50  D1   0017E
  4988.     BNEQ    16$                 ;16$                                               4F  12   00185
  4989.     CMPL    (R2), 4(R2)             ;MSG_NUMBER, REC_SEQ               3647       04   A2         62  D1   00187
  4990.     BNEQ    17$                 ;17$                                               68  12   0018B
  4991.     MOVL    #1, 2028(R2)             ;#1, TEXT_HEAD_FLAG               3654     07EC   C2         01  D0   0018D
  4992.     MOVAB   G^U.31, 2052(R2)         ;U.31, PUT_CHR_ROUTINE               3655     0804   C2 00000000V  00  9E   00192
  4993.     TSTL    8(R2)                 ;REC_LENGTH                   3657             08   A2  D5   0019B
  4994.     BLEQ    15$                 ;15$                                               16  15   0019E
  4995.     PUSHAB  12(R6)                 ;P.AAI                       3660             0C   A6  9F   001A0
  4996.     CALLS   #1, (R5)             ;#1, TT_TEXT                                     65         01  FB   001A3
  4997.     CALLS   #0, (R8)             ;#0, BFR_EMPTY                   3661            68         00  FB   001A6
  4998.     PUSHAB  16(R6)                 ;P.AAJ                       3662             10   A6  9F   001A9
  4999.     CALLS   #1, (R5)             ;#1, TT_TEXT                                     65         01  FB   001AC
  5000.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   3663 00000000G  00         00  FB   001AF
  5001. 15$:    PUSHL   (R2)                 ;MSG_NUMBER                   3666                  62  DD   001B6
  5002.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   001B8
  5003.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   001BA
  5004.     CALLS   #3, (R3)             ;#3, SEND_PACKET                                 63         03  FB   001BE
  5005.     MOVL    -4(R2), -8(R2)             ;NUM_RETRIES, OLD_RETRIES           3667       F8   A2    FC   A2  D0   001C1
  5006.     CLRL    -4(R2)                 ;NUM_RETRIES                   3668             FC   A2  D4   001C6
  5007.     ADDL3   #1, (R2), R0             ;#1, MSG_NUMBER, R0               3669            62         01  C1   001C9
  5008.                          ;                                         50       001CC
  5009.     EXTZV   #0, #6, R0, (R2)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   001CD
  5010.                          ;                                   62         50       001D0
  5011.     MOVL    #8, R0                 ;#8, R0                   3670            50         08  D0   001D2
  5012.     RET                      ;                                               04   001D5
  5013. 16$:    CMPL    R0, #66                 ;R0, #66                   3673 00000042   8F         50  D1   001D6
  5014.     BNEQ    17$                 ;17$                                               16  12   001DD
  5015.     CMPL    (R2), 4(R2)             ;MSG_NUMBER, REC_SEQ               3676       04   A2         62  D1   001DF
  5016.     BNEQ    17$                 ;17$                                               10  12   001E3
  5017.     PUSHL   4(R2)                 ;REC_SEQ                   3683             04   A2  DD   001E5
  5018.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   001E8
  5019.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   001EA
  5020.     CALLS   #3, (R3)             ;#3, SEND_PACKET                                 63         03  FB   001EE
  5021.     MOVL    #9, R0                 ;#9, R0                   3684            50         09  D0   001F1
  5022.     RET                      ;                                               04   001F4
  5023. 17$:    PUSHL   #134316226             ;#134316226                   3689           080180C2   8F  DD   001F5
  5024.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   001FB
  5025. 18$:    MOVL    #10, R0                 ;#10, R0                   3690            50         0A  D0   00202
  5026.     RET                      ;                                               04   00205
  5027.  
  5028. ; Routine Size:  518 bytes,    Routine Base:  $CODE$ + 1042
  5029.  
  5030.  
  5031. ;   3695  1     %SBTTL 'REC_DATA'
  5032. ;   3696  1    ROUTINE REC_DATA =
  5033. ;   3697  1    
  5034. ;   3698  1    !++
  5035. ;   3699  1    ! FUNCTIONAL DESCRIPTION:
  5036. ;   3700  1    !
  5037. ;   3701  1    ! This routine will accept data messages and write them to disk.
  5038. ;   3702  1    ! It will also accept MSG_FILE, MSG_TEXT and MSG_EOF messages.
  5039. ;   3703  1    !
  5040. ;   3704  1    ! CALLING SEQUENCE:
  5041. ;   3705  1    !
  5042. ;   3706  1    !    STATE = REC_DATA();
  5043. ;   3707  1    !
  5044. ;   3708  1    ! INPUT PARAMETERS:
  5045. ;   3709  1    !
  5046. ;   3710  1    !    None.
  5047. ;   3711  1    !
  5048. ;   3712  1    ! IMPLICIT INPUTS:
  5049. ;   3713  1    !
  5050. ;   3714  1    !    None.
  5051. ;   3715  1    !
  5052. ;   3716  1    ! OUTPUT PARAMETERS:
  5053. ;   3717  1    !
  5054. ;   3718  1    !    New state for the finite state machine.
  5055. ;   3719  1    !
  5056. ;   3720  1    ! IMPLICIT OUTPUTS:
  5057. ;   3721  1    !
  5058. ;   3722  1    !    None.
  5059. ;   3723  1    !
  5060. ;   3724  1    ! COMPLETION CODES:
  5061. ;   3725  1    !
  5062. ;   3726  1    !    None.
  5063. ;   3727  1    !
  5064. ;   3728  1    ! SIDE EFFECTS:
  5065. ;   3729  1    !
  5066. ;   3730  1    !    None.
  5067. ;   3731  1    !
  5068. ;   3732  1    !--
  5069. ;   3733  1    
  5070. ;   3734  2        BEGIN
  5071. ;   3735  2    
  5072. ;   3736  2        LOCAL
  5073. ;   3737  2        STATUS;
  5074. ;   3738  2    
  5075. ;   3739  2        ROUTINE CHECK_DATA =
  5076. ;   3740  3        BEGIN
  5077. ;   3741  3    
  5078. ;   3742  3        IF .REC_TYPE EQL MSG_DATA OR (.REC_TYPE EQL MSG_FILE AND NOT .TEXT_HEAD_FLAG) OR .REC_TYPE
  5079. ;   3743  4            EQL MSG_EOF OR (.REC_TYPE EQL MSG_TEXT AND .TEXT_HEAD_FLAG)
  5080. ;   3744  3        THEN
  5081. ;   3745  3            RETURN TRUE
  5082. ;   3746  3        ELSE
  5083. ;   3747  3            RETURN FALSE;
  5084. ;   3748  3    
  5085. ;   3749  2        END;
  5086.  
  5087.  
  5088.  
  5089.  
  5090.  
  5091. ;CHECK_DATA
  5092. U.80:    .WORD   ^M<R2>                 ;Save R2                   3739                    0004   00000
  5093.     MOVAB   G^U.62, R2             ;U.62, R2                                     52 00000000'  00  9E   00002
  5094.     MOVL    -2016(R2), R0             ;REC_TYPE, R0                   3742            50     F820   C2  D0   00009
  5095.     CMPL    R0, #68                 ;R0, #68                          00000044   8F         50  D1   0000E
  5096.     BEQL    2$                 ;2$                                               21  13   00015
  5097.     CMPL    R0, #70                 ;R0, #70                          00000046   8F         50  D1   00017
  5098.     BNEQ    1$                 ;1$                                               03  12   0001E
  5099.     BLBC    (R2), 2$             ;TEXT_HEAD_FLAG, 2$                                 15         62  E9   00020
  5100. 1$:    CMPL    R0, #90                 ;R0, #90                   3743 0000005A   8F         50  D1   00023
  5101.     BEQL    2$                 ;2$                                               0C  13   0002A
  5102.     CMPL    R0, #88                 ;R0, #88                          00000058   8F         50  D1   0002C
  5103.     BNEQ    3$                 ;3$                                               07  12   00033
  5104.     BLBC    (R2), 3$             ;TEXT_HEAD_FLAG, 3$                                 04         62  E9   00035
  5105. 2$:    MOVL    #1, R0                 ;#1, R0                   3745            50         01  D0   00038
  5106.     RET                      ;                                               04   0003B
  5107. 3$:    CLRL    R0                 ;R0                       3747                  50  D4   0003C
  5108.     RET                      ;                                               04   0003E
  5109.  
  5110. ; Routine Size:  63 bytes,    Routine Base:  $CODE$ + 1248
  5111.  
  5112.  
  5113. ;   3750  2    
  5114. ;   3751  2        LOCAL
  5115. ;   3752  2        SUB_TYPE,                ! Subtype for XFR_STATUS
  5116. ;   3753  2        DISCARD_FILE_FLAG,            ! Sender requested discard
  5117. ;   3754  2        ACK_MSG_LEN;                ! Length of ACK to send
  5118. ;   3755  2    
  5119. ;   3756  2    !
  5120. ;   3757  2    ! First get a message
  5121. ;   3758  2    !
  5122. ;   3759  2    
  5123. ;   3760  3        IF NOT (STATUS = REC_MESSAGE (CHECK_DATA))
  5124. ;   3761  2        THEN
  5125. ;   3762  2    
  5126. ;   3763  2        IF .STATUS NEQ KER_ABORTED THEN RETURN STATE_A ELSE RETURN STATE_EX;
  5127. ;   3764  2    
  5128. ;   3765  2        SELECTONE .REC_TYPE OF
  5129. ;   3766  2        SET
  5130. ;   3767  2    
  5131. ;   3768  2        [MSG_DATA] :
  5132. ;   3769  3            BEGIN
  5133. ;   3770  3    
  5134. ;   3771  3            IF .MSG_NUMBER NEQ .REC_SEQ
  5135. ;   3772  3            THEN
  5136. ;   3773  4            BEGIN
  5137. ;   3774  4    
  5138. ;   3775  4            IF .OLD_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  5139. ;   3776  4    
  5140. ;   3777  4            OLD_RETRIES = .OLD_RETRIES + 1;
  5141. ;   3778  4    
  5142. ;   3779  4            IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
  5143. ;   3780  4            THEN
  5144. ;   3781  5                BEGIN
  5145. ;   3782  5                SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
  5146. ;   3783  5                NUM_RETRIES = 0;
  5147. ;   3784  5                RETURN .STATE;
  5148. ;   3785  5                END
  5149. ;   3786  4            ELSE
  5150. ;   3787  5                BEGIN
  5151. ;   3788  5                KRM_ERROR (KER_PROTOERR);
  5152. ;   3789  5                RETURN STATE_A;
  5153. ;   3790  4                END;
  5154. ;   3791  4    
  5155. ;   3792  3            END;
  5156. ;   3793  3    
  5157. ;   3794  3    !
  5158. ;   3795  3    ! Here if we have a message with a valid message number
  5159. ;   3796  3    !
  5160. ;   3797  3    
  5161. ;   3798  3            IF NOT BFR_EMPTY () THEN RETURN STATE_A;
  5162. ;   3799  3    
  5163. ;   3800  3    !
  5164. ;   3801  3    ! Check if we wish to abort for some reason
  5165. ;   3802  3    !
  5166. ;   3803  3    
  5167. ;   3804  3            IF .ABT_CUR_FILE
  5168. ;   3805  3            THEN
  5169. ;   3806  4            BEGIN
  5170. ;   3807  4            CH$WCHAR (MSG_ACK_ABT_CUR, CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE));
  5171. ;   3808  4            ACK_MSG_LEN = 1;
  5172. ;   3809  4            END
  5173. ;   3810  3            ELSE
  5174. ;   3811  3    
  5175. ;   3812  3            IF .ABT_ALL_FILE
  5176. ;   3813  3            THEN
  5177. ;   3814  4                BEGIN
  5178. ;   3815  4                CH$WCHAR (MSG_ACK_ABT_ALL, CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE));
  5179. ;   3816  4                ACK_MSG_LEN = 1;
  5180. ;   3817  4                END
  5181. ;   3818  3            ELSE
  5182. ;   3819  3                ACK_MSG_LEN = 0;
  5183. ;   3820  3    
  5184. ;   3821  3    !
  5185. ;   3822  3    ! Now send the ACK
  5186. ;   3823  3    !
  5187. ;   3824  3            SEND_PACKET (MSG_ACK, .ACK_MSG_LEN, .REC_SEQ);
  5188. ;   3825  3            OLD_RETRIES = .NUM_RETRIES;
  5189. ;   3826  3            NUM_RETRIES = 0;
  5190. ;   3827  3            MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  5191. ;   3828  3            RETURN STATE_RD;
  5192. ;   3829  2            END;
  5193. ;   3830  2    
  5194. ;   3831  2        [MSG_FILE, MSG_TEXT] :
  5195. ;   3832  3            BEGIN
  5196. ;   3833  3    
  5197. ;   3834  3            IF .OLD_RETRIES GTR .PKT_RETRIES THEN RETURN STATE_ER;
  5198. ;   3835  3    
  5199. ;   3836  3            OLD_RETRIES = .OLD_RETRIES + 1;
  5200. ;   3837  3    
  5201. ;   3838  3            IF ((.MSG_NUMBER - 1) AND %O'77') EQL .REC_SEQ
  5202. ;   3839  3            THEN
  5203. ;   3840  4            BEGIN
  5204. ;   3841  4            SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
  5205. ;   3842  4            NUM_RETRIES = 0;
  5206. ;   3843  4            RETURN .STATE;
  5207. ;   3844  4            END
  5208. ;   3845  3            ELSE
  5209. ;   3846  4            BEGIN
  5210. ;   3847  4            KRM_ERROR (KER_PROTOERR);
  5211. ;   3848  4            RETURN STATE_A;
  5212. ;   3849  3            END;
  5213. ;   3850  3    
  5214. ;   3851  2            END;
  5215. ;   3852  2    
  5216. ;   3853  2        [MSG_EOF] :
  5217. ;   3854  3            BEGIN
  5218. ;   3855  3    
  5219. ;   3856  3            IF .MSG_NUMBER NEQ .REC_SEQ
  5220. ;   3857  3            THEN
  5221. ;   3858  4            BEGIN
  5222. ;   3859  4            KRM_ERROR (KER_PROTOERR);
  5223. ;   3860  4            RETURN STATE_A;
  5224. ;   3861  3            END;
  5225. ;   3862  3    
  5226. ;   3863  3            SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
  5227. ;   3864  3    
  5228. ;   3865  3            IF NOT .TEXT_HEAD_FLAG
  5229. ;   3866  3            THEN
  5230. ;   3867  4            BEGIN
  5231. ;   3868  4            FLAG_FILE_OPEN = FALSE;
  5232. ;   3869  4            DISCARD_FILE_FLAG = FALSE;    ! Assume we want file
  5233. ;   3870  4    
  5234. ;   3871  4            IF .REC_LENGTH EQL 1
  5235. ;   3872  4            THEN
  5236. ;   3873  4    
  5237. ;   3874  4                IF CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG, CHR_SIZE)) EQL MSG_EOF_DISCARD ! [108]
  5238. ;   3875  4                THEN
  5239. ;   3876  4                DISCARD_FILE_FLAG = TRUE;
  5240. ;   3877  4    
  5241. ;   3878  4            IF ( NOT .CONNECT_FLAG) AND .TY_FIL
  5242. ;   3879  4            THEN
  5243. ;   3880  5                BEGIN
  5244. ;   3881  5    
  5245. ;   3882  5                IF .DISCARD_FILE_FLAG
  5246. ;   3883  5                THEN
  5247. ;   3884  5    
  5248. ;   3885  5                IF .ABT_FLAG
  5249. ;   3886  5                THEN
  5250. ;   3887  5                    TT_TEXT (UPLIT (%ASCIZ' [Interrupted]'))
  5251. ;   3888  5                ELSE
  5252. ;   3889  5                    TT_TEXT (UPLIT (%ASCIZ' [Interrupted, partial file saved]'))
  5253. ;   3890  5    
  5254. ;   3891  5                ELSE
  5255. ;   3892  5                TT_TEXT (UPLIT (%ASCIZ' [OK]'));
  5256. ;   3893  5    
  5257. ;   3894  5                TT_CRLF ();
  5258. ;   3895  4                END;
  5259. ;   3896  4    
  5260. ;   3897  4            IF NOT FILE_CLOSE (.DISCARD_FILE_FLAG AND .ABT_FLAG) THEN RETURN STATE_A;
  5261. ;   3898  4    
  5262. ;   3899  4            IF .DISCARD_FILE_FLAG
  5263. ;   3900  4            THEN
  5264. ;   3901  4    
  5265. ;   3902  4                IF .ABT_FLAG THEN SUB_TYPE = %C'X' ELSE SUB_TYPE = %C'D'
  5266. ;   3903  4    
  5267. ;   3904  4            ELSE
  5268. ;   3905  4                SUB_TYPE = %C'C';
  5269. ;   3906  4    
  5270. ;   3907  4            END
  5271. ;   3908  3            ELSE
  5272. ;   3909  4            BEGIN
  5273. ;   3910  4            TT_CRLF ();            ! Make sure we have a CRLF
  5274. ;   3911  4            TT_OUTPUT ();            ! And make sure all output is sent
  5275. ;   3912  3            END;
  5276. ;   3913  3    
  5277. ;   3914  3            XFR_STATUS (%C'F', .SUB_TYPE);
  5278. ;   3915  3            MSG_NUMBER = (.MSG_NUMBER + 1) AND %O'77';
  5279. ;   3916  3            RETURN STATE_RF;
  5280. ;   3917  2            END;
  5281. ;   3918  2    
  5282. ;   3919  2        [OTHERWISE] :
  5283. ;   3920  3            BEGIN
  5284. ;   3921  3            KRM_ERROR (KER_PROTOERR);
  5285. ;   3922  3            RETURN STATE_A;
  5286. ;   3923  2            END;
  5287. ;   3924  2        TES;
  5288. ;   3925  2    
  5289. ;   3926  1        END;                    ! End of REC_DATA
  5290.  
  5291.  
  5292.  
  5293.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  5294.  
  5295. P.AAK:    .ASCII  \ [Interrupted]\<0><0>         ;                                72  72  65  74  6E  49  5B  20  00064
  5296.                          ;                          00  00  5D  64  65  74  70  75  0006C
  5297. P.AAL:    .ASCII  \ [Interrupted, partial file saved]\<0><0>
  5298.                          ;                                72  72  65  74  6E  49  5B  20  00074
  5299.                          ;                          70  20  2C  64  65  74  70  75  0007C
  5300.                          ;                          66  20  6C  61  69  74  72  61  00084
  5301.                          ;                          65  76  61  73  20  65  6C  69  0008C
  5302.                          ;                                      00  00  5D  64  00094
  5303. P.AAM:    .ASCII  \ [OK]\<0><0><0>         ;                                00  00  00  5D  4B  4F  5B  20  00098
  5304.  
  5305.  
  5306.  
  5307.     .PSECT  $CODE$,NOWRT,2
  5308.  
  5309. ;REC_DATA
  5310. U.13:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8>     ;Save R2,R3,R4,R5,R6,R7,R8           3696                    01FC   00000
  5311.     MOVAB   G^TT_CRLF, R8             ;TT_CRLF, R8                                     58 00000000G  00  9E   00002
  5312.     MOVAB   G^PKT_RETRIES, R7         ;PKT_RETRIES, R7                                 57 00000000G  00  9E   00009
  5313.     MOVAB   G^P.AAK, R6             ;P.AAK, R6                                     56 00000000'  00  9E   00010
  5314.     MOVAB   G^ABT_FLAG, R5             ;ABT_FLAG, R5                                     55 00000000G  00  9E   00017
  5315.     MOVAB   G^U.24, R4             ;U.24, R4                                     54 00000000V  00  9E   0001E
  5316.     MOVAB   G^U.55, R3             ;U.55, R3                                     53 00000000'  00  9E   00025
  5317.     PUSHAB  B^U.80                 ;U.80                       3760             92   AF  9F   0002C
  5318.     CALLS   #1, G^U.25             ;#1, U.25                          00000000V  00         01  FB   0002F
  5319.     BLBS    R0, 3$                 ;STATUS, 3$                                     10         50  E8   00036
  5320.     CMPL    R0, #134316258             ;STATUS, #134316258               3763 080180E2   8F         50  D1   00039
  5321.     BEQL    2$                 ;2$                                               03  13   00040
  5322. 1$:    BRW     28$                 ;28$                                             0182  31   00042
  5323. 2$:    MOVL    #19, R0                 ;#19, R0                                     50         13  D0   00045
  5324.     RET                      ;                                               04   00048
  5325. 3$:    MOVL    12(R3), R2             ;REC_TYPE, R2                   3765            52    0C   A3  D0   00049
  5326.     CMPL    R2, #68                 ;R2, #68                   3768 00000044   8F         52  D1   0004D
  5327.     BNEQ    9$                 ;9$                                               6C  12   00054
  5328.     MOVQ    (R3), R0             ;MSG_NUMBER, R0               3771            50         63  7D   00056
  5329.     CMPL    R0, R1                 ;R0, R1                                     51         50  D1   00059
  5330.     BEQL    4$                 ;4$                                               16  13   0005C
  5331.     CMPL    -8(R3), (R7)             ;OLD_RETRIES, PKT_RETRIES           3775            67    F8   A3  D1   0005E
  5332.     BGTR    11$                 ;11$                                               76  14   00062
  5333.     INCL    -8(R3)                 ;OLD_RETRIES                   3777             F8   A3  D6   00064
  5334.     DECL    R0                 ;R0                       3779                  50  D7   00067
  5335.     CMPZV   #0, #6, R0, R1             ;#0, #6, R0, R1                                 06         00  ED   00069
  5336.                          ;                                   51         50       0006C
  5337.     BNEQ    13$                 ;13$                                               7E  12   0006E
  5338.     PUSHL   R1                 ;R1                       3782                  51  DD   00070
  5339.     BRB     14$                 ;14$                                               7E  11   00072
  5340. 4$:    CALLS   #0, G^U.28             ;#0, U.28                   3798 00000000V  00         00  FB   00074
  5341.     BLBC    R0, 1$                 ;R0, 1$                                     C4         50  E9   0007B
  5342.     BLBC    G^ABT_CUR_FILE, 5$         ;ABT_CUR_FILE, 5$               3804            08 00000000G  00  E9   0007E
  5343.     MOVB    #88, 1024(R3)             ;#88, SND_MSG+4               3807     0400   C3    58   8F  90   00085
  5344.     BRB     6$                 ;6$                       3808                  0D  11   0008B
  5345. 5$:    BLBC    G^ABT_ALL_FILE, 7$         ;ABT_ALL_FILE, 7$               3812            0B 00000000G  00  E9   0008D
  5346.     MOVB    #90, 1024(R3)             ;#90, SND_MSG+4               3815     0400   C3    5A   8F  90   00094
  5347. 6$:    MOVL    #1, R0                 ;#1, ACK_MSG_LEN               3816            50         01  D0   0009A
  5348.     BRB     8$                 ;8$                                               02  11   0009D
  5349. 7$:    CLRL    R0                 ;ACK_MSG_LEN                   3819                  50  D4   0009F
  5350. 8$:    PUSHL   4(R3)                 ;REC_SEQ                   3824             04   A3  DD   000A1
  5351.     PUSHL   R0                 ;ACK_MSG_LEN                                           50  DD   000A4
  5352.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   000A6
  5353.     CALLS   #3, (R4)             ;#3, SEND_PACKET                                 64         03  FB   000AA
  5354.     MOVL    -4(R3), -8(R3)             ;NUM_RETRIES, OLD_RETRIES           3825       F8   A3    FC   A3  D0   000AD
  5355.     CLRL    -4(R3)                 ;NUM_RETRIES                   3826             FC   A3  D4   000B2
  5356.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0               3827            63         01  C1   000B5
  5357.                          ;                                         50       000B8
  5358.     EXTZV   #0, #6, R0, (R3)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   000B9
  5359.                          ;                                   63         50       000BC
  5360.     MOVL    #8, R0                 ;#8, R0                   3828            50         08  D0   000BE
  5361.     RET                      ;                                               04   000C1
  5362. 9$:    CMPL    R2, #70                 ;R2, #70                   3831 00000046   8F         52  D1   000C2
  5363.     BEQL    10$                 ;10$                                               09  13   000C9
  5364.     CMPL    R2, #88                 ;R2, #88                          00000058   8F         52  D1   000CB
  5365.     BNEQ    15$                 ;15$                                               2F  12   000D2
  5366. 10$:    CMPL    -8(R3), (R7)             ;OLD_RETRIES, PKT_RETRIES           3834            67    F8   A3  D1   000D4
  5367.     BLEQ    12$                 ;12$                                               04  15   000D8
  5368. 11$:    MOVL    #20, R0                 ;#20, R0                                     50         14  D0   000DA
  5369.     RET                      ;                                               04   000DD
  5370. 12$:    INCL    -8(R3)                 ;OLD_RETRIES                   3836             F8   A3  D6   000DE
  5371.     SUBL3   #1, (R3), R1             ;#1, MSG_NUMBER, R1               3838            63         01  C3   000E1
  5372.                          ;                                         51       000E4
  5373.     MOVL    4(R3), R0             ;REC_SEQ, R0                                     50    04   A3  D0   000E5
  5374.     CMPZV   #0, #6, R1, R0             ;#0, #6, R1, R0                                 06         00  ED   000E9
  5375.                          ;                                   50         51       000EC
  5376. 13$:    BNEQ    16$                 ;16$                                               20  12   000EE
  5377.     PUSHL   R0                 ;R0                       3841                  50  DD   000F0
  5378. 14$:    CLRL    -(SP)                 ;-(SP)                                               7E  D4   000F2
  5379.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   000F4
  5380.     CALLS   #3, (R4)             ;#3, SEND_PACKET                                 64         03  FB   000F8
  5381.     CLRL    -4(R3)                 ;NUM_RETRIES                   3842             FC   A3  D4   000FB
  5382.     MOVL    -16(R3), R0             ;STATE, R0                   3843            50    F0   A3  D0   000FE
  5383.     RET                      ;                                               04   00102
  5384. 15$:    CMPL    R2, #90                 ;R2, #90                   3853 0000005A   8F         52  D1   00103
  5385.     BNEQ    16$                 ;16$                                               04  12   0010A
  5386.     CMPL    (R3), 4(R3)             ;MSG_NUMBER, REC_SEQ               3856       04   A3         63  D1   0010C
  5387. 16$:    BEQL    17$                 ;17$                                               03  13   00110
  5388.     BRW     27$                 ;27$                                             00A5  31   00112
  5389. 17$:    PUSHL   4(R3)                 ;REC_SEQ                   3863             04   A3  DD   00115
  5390.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00118
  5391.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   0011A
  5392.     CALLS   #3, (R4)             ;#3, SEND_PACKET                                 64         03  FB   0011E
  5393.     BLBS    2028(R3), 25$             ;TEXT_HEAD_FLAG, 25$               3865            70     07EC   C3  E8   00121
  5394.     CLRL    G^FLAG_FILE_OPEN         ;FLAG_FILE_OPEN               3868           00000000'  00  D4   00126
  5395.     CLRL    R2                 ;DISCARD_FILE_FLAG               3869                  52  D4   0012C
  5396.     CMPL    8(R3), #1             ;REC_LENGTH, #1               3871            01    08   A3  D1   0012E
  5397.     BNEQ    18$                 ;18$                                               0F  12   00132
  5398.     MOVL    -64(R3), R0             ;RECV_PKT_MSG, R0               3874            50    C0   A3  D0   00134
  5399.     CMPB    16(R3)[R0], #68             ;REC_MSG[R0], #68                            44   8F    10 A340  91   00138
  5400.     BNEQ    18$                 ;18$                                               03  12   0013E
  5401.     MOVL    #1, R2                 ;#1, DISCARD_FILE_FLAG               3876            52         01  D0   00140
  5402. 18$:    BLBS    G^CONNECT_FLAG, 22$         ;CONNECT_FLAG, 22$               3878            23 00000000G  00  E8   00143
  5403.     BLBC    G^TY_FIL, 22$             ;TY_FIL, 22$                                     1C 00000000G  00  E9   0014A
  5404.     BLBC    R2, 20$                 ;DISCARD_FILE_FLAG, 20$           3882            0C         52  E9   00151
  5405.     BLBC    (R5), 19$             ;ABT_FLAG, 19$                   3885            04         65  E9   00154
  5406.     PUSHL   R6                 ;R6                       3887                  56  DD   00157
  5407.     BRB     21$                 ;21$                                               08  11   00159
  5408. 19$:    PUSHAB  16(R6)                 ;P.AAL                       3889             10   A6  9F   0015B
  5409.     BRB     21$                 ;21$                                               03  11   0015E
  5410. 20$:    PUSHAB  52(R6)                 ;P.AAM                       3892             34   A6  9F   00160
  5411. 21$:    CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   00163
  5412.     CALLS   #0, (R8)             ;#0, TT_CRLF                   3894            68         00  FB   0016A
  5413. 22$:    MCOML   (R5), R0             ;ABT_FLAG, R0                   3897            50         65  D2   0016D
  5414.     BICL3   R0, R2, -(SP)             ;R0, DISCARD_FILE_FLAG, -(SP)                             52         50  CB   00170
  5415.                          ;                                         7E       00173
  5416.     CALLS   #1, G^FILE_CLOSE         ;#1, FILE_CLOSE                      00000000G  00         01  FB   00174
  5417.     BLBC    R0, 28$                 ;R0, 28$                                     49         50  E9   0017B
  5418.     BLBC    R2, 24$                 ;DISCARD_FILE_FLAG, 24$           3899            0F         52  E9   0017E
  5419.     BLBC    (R5), 23$             ;ABT_FLAG, 23$                   3902            06         65  E9   00181
  5420.     MOVZBL  #88, R0                 ;#88, SUB_TYPE                                     50    58   8F  9A   00184
  5421.     BRB     26$                 ;26$                                               16  11   00188
  5422. 23$:    MOVZBL  #68, R0                 ;#68, SUB_TYPE                                     50    44   8F  9A   0018A
  5423.     BRB     26$                 ;26$                                               10  11   0018E
  5424. 24$:    MOVZBL  #67, R0                 ;#67, SUB_TYPE                   3905            50    43   8F  9A   00190
  5425.     BRB     26$                 ;26$                                               0A  11   00194
  5426. 25$:    CALLS   #0, (R8)             ;#0, TT_CRLF                   3910            68         00  FB   00196
  5427.     CALLS   #0, G^TT_OUTPUT             ;#0, TT_OUTPUT                   3911 00000000G  00         00  FB   00199
  5428. 26$:    PUSHL   R0                 ;SUB_TYPE                   3914                  50  DD   001A0
  5429.     MOVZBL  #70, -(SP)             ;#70, -(SP)                                     7E    46   8F  9A   001A2
  5430.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   001A6
  5431.     ADDL3   #1, (R3), R0             ;#1, MSG_NUMBER, R0               3915            63         01  C1   001AD
  5432.                          ;                                         50       001B0
  5433.     EXTZV   #0, #6, R0, (R3)         ;#0, #6, R0, MSG_NUMBER                             06         00  EF   001B1
  5434.                          ;                                   63         50       001B4
  5435.     MOVL    #7, R0                 ;#7, R0                   3916            50         07  D0   001B6
  5436.     RET                      ;                                               04   001B9
  5437. 27$:    PUSHL   #134316226             ;#134316226                   3921           080180C2   8F  DD   001BA
  5438.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   001C0
  5439. 28$:    MOVL    #10, R0                 ;#10, R0                   3922            50         0A  D0   001C7
  5440.     RET                      ;                                               04   001CA
  5441.  
  5442. ; Routine Size:  459 bytes,    Routine Base:  $CODE$ + 1287
  5443.  
  5444.  
  5445. ;   3927  1     %SBTTL 'SERVER - Generic commands'
  5446. ;   3928  1    ROUTINE SERVER_GENERIC =
  5447. ;   3929  1    
  5448. ;   3930  1    !++
  5449. ;   3931  1    ! FUNCTIONAL DESCRIPTION:
  5450. ;   3932  1    !
  5451. ;   3933  1    !    This routine will handle the generic server messages.
  5452. ;   3934  1    !    The generic server messages include FINISH, LOGOUT.
  5453. ;   3935  1    !
  5454. ;   3936  1    ! CALLING SEQUENCE:
  5455. ;   3937  1    !
  5456. ;   3938  1    !    STATE = SERVER_GENERIC();
  5457. ;   3939  1    !
  5458. ;   3940  1    ! INPUT PARAMETERS:
  5459. ;   3941  1    !
  5460. ;   3942  1    !    None.
  5461. ;   3943  1    !
  5462. ;   3944  1    ! IMPLICIT INPUTS:
  5463. ;   3945  1    !
  5464. ;   3946  1    !    Generic message receive in REC_MSG.
  5465. ;   3947  1    !
  5466. ;   3948  1    ! OUTPUT PARAMETERS:
  5467. ;   3949  1    !
  5468. ;   3950  1    !    Returns new state for FSM
  5469. ;   3951  1    !
  5470. ;   3952  1    ! IMPLICIT OUTPUTS:
  5471. ;   3953  1    !
  5472. ;   3954  1    !    None.
  5473. ;   3955  1    !
  5474. ;   3956  1    ! COMPLETION CODES:
  5475. ;   3957  1    !
  5476. ;   3958  1    !    None.
  5477. ;   3959  1    !
  5478. ;   3960  1    ! SIDE EFFECTS:
  5479. ;   3961  1    !
  5480. ;   3962  1    !    None.
  5481. ;   3963  1    !
  5482. ;   3964  1    !--
  5483. ;   3965  1    
  5484. ;   3966  2        BEGIN
  5485. ;   3967  2    
  5486. ;   3968  2        LOCAL
  5487. ;   3969  2        STATUS,                    ! Returned status
  5488. ;   3970  2        G_FUNC,                    ! Generic command function
  5489. ;   3971  2        POINTER,                ! Character pointer
  5490. ;   3972  2        DATA_TEXT : VECTOR [CH$ALLOCATION (MAX_MSG)],    ! Unpacked message
  5491. ;   3973  2        DATA_SIZE;                ! Actual size of data
  5492. ;   3974  2    
  5493. ;   3975  2        ROUTINE UNPACK_DATA (POINTER, SIZE, DST_ADDR, DST_LEN) =
  5494. ;   3976  2    !
  5495. ;   3977  2    ! Routine to unpack an argument.
  5496. ;   3978  2    ! This will copy the argument data to the desired buffer.
  5497. ;   3979  2    !
  5498. ;   3980  3        BEGIN
  5499. ;   3981  3    
  5500. ;   3982  3        IF .SIZE GTR 0                ! If we have something to unpack
  5501. ;   3983  3        THEN
  5502. ;   3984  4            BEGIN
  5503. ;   3985  4            .DST_LEN = UNCHAR (CH$RCHAR_A (.POINTER));
  5504. ;   3986  4    
  5505. ;   3987  4            IF ..DST_LEN LSS 0
  5506. ;   3988  4            THEN
  5507. ;   3989  5            BEGIN
  5508. ;   3990  5            KRM_ERROR (KER_PROTOERR);    ! Someone screwed up
  5509. ;   3991  5            ..DST_LEN = 0;
  5510. ;   3992  5            RETURN -1;
  5511. ;   3993  4            END;
  5512. ;   3994  4    
  5513. ;   3995  4            IF ..DST_LEN GTR .SIZE - 1 THEN .DST_LEN = .SIZE - 1;
  5514. ;   3996  4    
  5515. ;   3997  4            CH$COPY (..DST_LEN, ..POINTER, CHR_NUL, MAX_MSG, CH$PTR (.DST_ADDR));
  5516. ;   3998  4            .POINTER = CH$PLUS (..POINTER, ..DST_LEN);
  5517. ;   3999  4            RETURN .SIZE - ..DST_LEN - 1;
  5518. ;   4000  4            END
  5519. ;   4001  3        ELSE
  5520. ;   4002  3    !
  5521. ;   4003  3    ! If nothing left in buffer, return the current size (0)
  5522. ;   4004  3    !
  5523. ;   4005  3            RETURN .SIZE;
  5524. ;   4006  3    
  5525. ;   4007  2        END;
  5526.  
  5527.  
  5528.  
  5529.  
  5530.  
  5531. ;UNPACK_DATA
  5532. U.81:    .WORD   ^M<R2,R3,R4,R5,R6>         ;Save R2,R3,R4,R5,R6               3975                    007C   00000
  5533.     MOVL    8(AP), R6             ;SIZE, R6                   3982            56    08   AC  D0   00002
  5534.     BLEQ    3$                 ;3$                                               50  15   00006
  5535.     MOVL    @4(AP), R1             ;@POINTER, R1                   3985            51    04   BC  D0   00008
  5536.     MOVZBL  (R1), R0             ;(R1), R0                                     50         61  9A   0000C
  5537.     INCL    @4(AP)                 ;@POINTER                                      04   BC  D6   0000F
  5538.     MOVAB   -32(R0), @16(AP)         ;-32(R0), @DST_LEN                            10   BC    E0   A0  9E   00012
  5539.     MOVL    @16(AP), R2             ;@DST_LEN, R2                   3987            52    10   BC  D0   00017
  5540.     BGEQ    1$                 ;1$                                               13  18   0001B
  5541.     PUSHL   #134316226             ;#134316226                   3990           080180C2   8F  DD   0001D
  5542.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   00023
  5543.     CLRL    (R2)                 ;(R2)                       3991                  62  D4   0002A
  5544.     MNEGL   #1, R0                 ;#1, R0                   3992            50         01  CE   0002C
  5545.     RET                      ;                                               04   0002F
  5546. 1$:    MOVAB   -1(R6), R0             ;-1(R6), R0                   3995            50    FF   A6  9E   00030
  5547.     CMPL    R2, R0                 ;R2, R0                                     50         52  D1   00034
  5548.     BLEQ    2$                 ;2$                                               04  15   00037
  5549.     MOVL    R0, @16(AP)             ;R0, @DST_LEN                                10   BC         50  D0   00039
  5550. 2$:    MOVL    @4(AP), R0             ;@POINTER, R0                   3997            50    04   BC  D0   0003D
  5551.     MOVC5   @16(AP), (R0), #0, #1002, -     ;@DST_LEN, (R0), #0, #1002, -                             60    10   BC  2C   00041
  5552.         @12(AP)                 ;@DST_ADDR                        03EA   8F         00       00045
  5553.                          ;                                    0C   BC       00049
  5554.     ADDL2   @16(AP), @4(AP)             ;@DST_LEN, @POINTER               3998       04   BC    10   BC  C0   0004B
  5555.     SUBL3   @16(AP), R6, R0             ;@DST_LEN, R6, R0               3999            56    10   BC  C3   00050
  5556.                          ;                                         50       00054
  5557.     DECL    R0                 ;R0                                               50  D7   00055
  5558.     RET                      ;                                               04   00057
  5559. 3$:    MOVL    R6, R0                 ;R6, R0                                     50         56  D0   00058
  5560.     RET                      ;                       4005                  04   0005B
  5561.  
  5562. ; Routine Size:  92 bytes,    Routine Base:  $CODE$ + 1452
  5563.  
  5564.  
  5565. ;   4008  2    !
  5566. ;   4009  2    ! First unpack the message data into its various pieces
  5567. ;   4010  2    !
  5568. ;   4011  2        SET_STRING (CH$PTR (DATA_TEXT), MAX_MSG, TRUE);    ! Initialize for unpacking
  5569. ;   4012  2        BFR_EMPTY ();                ! Unpack the data
  5570. ;   4013  2        DATA_SIZE = SET_STRING (0, 0, FALSE);    ! All done, get size
  5571. ;   4014  2    
  5572. ;   4015  2        IF .DATA_SIZE LEQ 0
  5573. ;   4016  2        THEN
  5574. ;   4017  3        BEGIN
  5575. ;   4018  3        KRM_ERROR (KER_PROTOERR);        ! Someone screwed up
  5576. ;   4019  3        RETURN STATE_A;                ! Since no subtype
  5577. ;   4020  2        END;
  5578. ;   4021  2    
  5579. ;   4022  2    !
  5580. ;   4023  2    ! Get the arguments from the unpacked data (if any)
  5581. ;   4024  2    !
  5582. ;   4025  2        GEN_1SIZE = 0;                ! Assume no args
  5583. ;   4026  2        GEN_2SIZE = 0;                ! none at all
  5584. ;   4027  2        GEN_3SIZE = 0;
  5585. ;   4028  2        CH$WCHAR (CHR_NUL, CH$PTR (GEN_1DATA));    ! Ensure all are null terminated
  5586. ;   4029  2        CH$WCHAR (CHR_NUL, CH$PTR (GEN_2DATA));
  5587. ;   4030  2        CH$WCHAR (CHR_NUL, CH$PTR (GEN_3DATA));
  5588. ;   4031  2        POINTER = CH$PTR (DATA_TEXT, 1);        ! Point at second character
  5589. ;   4032  2        DATA_SIZE = .DATA_SIZE - 1;            ! Account for subtype
  5590. ;   4033  2    
  5591. ;   4034  2        IF .DATA_SIZE GTR 0                ! Room for first arg?
  5592. ;   4035  2        THEN
  5593. ;   4036  3        BEGIN
  5594. ;   4037  3        DATA_SIZE = UNPACK_DATA (POINTER, .DATA_SIZE, GEN_1DATA, GEN_1SIZE);
  5595. ;   4038  3    
  5596. ;   4039  3        IF .DATA_SIZE LSS 0 THEN RETURN STATE_A;    ! Punt if bad arguments
  5597. ;   4040  3    
  5598. ;   4041  3        IF .DATA_SIZE GTR 0            ! Second argument present?
  5599. ;   4042  3        THEN
  5600. ;   4043  4            BEGIN
  5601. ;   4044  4            DATA_SIZE = UNPACK_DATA (POINTER, .DATA_SIZE, GEN_2DATA, GEN_2SIZE);
  5602. ;   4045  4    
  5603. ;   4046  4            IF .DATA_SIZE LSS 0 THEN RETURN STATE_A;    ! Punt if bad arguments
  5604. ;   4047  4    
  5605. ;   4048  4            IF .DATA_SIZE GTR 0            ! Third argument here?
  5606. ;   4049  4            THEN
  5607. ;   4050  5            BEGIN
  5608. ;   4051  5            DATA_SIZE = UNPACK_DATA (POINTER, .DATA_SIZE, GEN_3DATA, GEN_3SIZE);
  5609. ;   4052  5    
  5610. ;   4053  5            IF .DATA_SIZE LSS 0 THEN RETURN STATE_A;    ! Punt if bad arguments
  5611. ;   4054  5    
  5612. ;   4055  4            END;
  5613. ;   4056  4    
  5614. ;   4057  3            END;
  5615. ;   4058  3    
  5616. ;   4059  2        END;
  5617. ;   4060  2    
  5618. ;   4061  2        SELECTONE CH$RCHAR (CH$PTR (DATA_TEXT)) OF
  5619. ;   4062  2        SET
  5620. ;   4063  2        !
  5621. ;   4064  2        ! EXIT command, just return the status to the upper level
  5622. ;   4065  2        !
  5623. ;   4066  2    
  5624. ;   4067  2        [MSG_GEN_EXIT] :
  5625. ;   4068  3            BEGIN
  5626. ;   4069  3            SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
  5627. ;   4070  3            RETURN STATE_FI;
  5628. ;   4071  2            END;
  5629. ;   4072  2        !
  5630. ;   4073  2        ! LOGOUT command, ACK the message then call the system routine to
  5631. ;   4074  2        ! kill the process (log the job out, etc.)
  5632. ;   4075  2        !
  5633. ;   4076  2    
  5634. ;   4077  2        [MSG_GEN_LOGOUT] :
  5635. ;   4078  3            BEGIN
  5636. ;   4079  3            SEND_PACKET (MSG_ACK, 0, .REC_SEQ);
  5637. ;   4080  3            SY_LOGOUT ();
  5638. ;   4081  3            RETURN STATE_LG;
  5639. ;   4082  2            END;
  5640. ;   4083  2    !
  5641. ;   4084  2    ! For a type command, just set up a transfer flagging we want a text header
  5642. ;   4085  2    ! instead of a file header.
  5643. ;   4086  2    !
  5644. ;   4087  2    
  5645. ;   4088  2        [MSG_GEN_TYPE] :
  5646. ;   4089  3            BEGIN
  5647. ;   4090  3            CH$COPY (.GEN_1SIZE, CH$PTR (GEN_1DATA), CHR_NUL, MAX_FILE_NAME, CH$PTR (FILE_NAME));
  5648. ;   4091  3            FILE_SIZE = .GEN_1SIZE;
  5649. ;   4092  3            TEXT_HEAD_FLAG = TRUE;        ! Now want text header
  5650. ;   4093  3            XFR_STATUS (%C'I', %C'G');        ! Tell display routine we are doing a command
  5651. ;   4094  3    
  5652. ;   4095  3            IF .STATE EQL STATE_II AND .BLK_CHK_TYPE EQL .INI_CHK_TYPE
  5653. ;   4096  3            THEN
  5654. ;   4097  3            RETURN STATE_OF            ! Must open the file
  5655. ;   4098  3            ELSE
  5656. ;   4099  3            RETURN STATE_S;            ! Start the transaction with a send
  5657. ;   4100  3    
  5658. ;   4101  2            END;
  5659. ;   4102  2    
  5660. ;   4103  2        [MSG_GEN_DIRECTORY] :
  5661. ;   4104  2            G_FUNC = GC_DIRECTORY;
  5662. ;   4105  2    
  5663. ;   4106  2        [MSG_GEN_DISK_USAGE] :
  5664. ;   4107  2            G_FUNC = GC_DISK_USAGE;
  5665. ;   4108  2    
  5666. ;   4109  2        [MSG_GEN_DELETE] :
  5667. ;   4110  2            G_FUNC = GC_DELETE;
  5668. ;   4111  2    
  5669. ;   4112  2        [MSG_GEN_HELP] :
  5670. ;   4113  2            G_FUNC = GC_HELP;
  5671. ;   4114  2    
  5672. ;   4115  2        [MSG_GEN_LOGIN] :
  5673. ;   4116  2            G_FUNC = GC_LGN;
  5674. ;   4117  2    
  5675. ;   4118  2        [MSG_GEN_CONNECT] :
  5676. ;   4119  2            G_FUNC = GC_CONNECT;
  5677. ;   4120  2    
  5678. ;   4121  2        [MSG_GEN_RENAME] :
  5679. ;   4122  2            G_FUNC = GC_RENAME;
  5680. ;   4123  2    
  5681. ;   4124  2        [MSG_GEN_COPY] :
  5682. ;   4125  2            G_FUNC = GC_COPY;
  5683. ;   4126  2    
  5684. ;   4127  2        [MSG_GEN_WHO] :
  5685. ;   4128  2            G_FUNC = GC_WHO;
  5686. ;   4129  2    
  5687. ;   4130  2        [MSG_GEN_SEND] :
  5688. ;   4131  2            G_FUNC = GC_SEND_MSG;
  5689. ;   4132  2    
  5690. ;   4133  2        [MSG_GEN_QUERY] :
  5691. ;   4134  2            G_FUNC = GC_STATUS;
  5692. ;   4135  2    
  5693. ;   4136  2        [MSG_GEN_PROGRAM] :
  5694. ;   4137  2            G_FUNC = GC_PROGRAM;
  5695. ;   4138  2    
  5696. ;   4139  2        [MSG_GEN_JOURNAL] :
  5697. ;   4140  2            G_FUNC = GC_JOURNAL;
  5698. ;   4141  2    
  5699. ;   4142  2        [MSG_GEN_VARIABLE] :
  5700. ;   4143  2            G_FUNC = GC_VARIABLE;
  5701. ;   4144  2    !
  5702. ;   4145  2    ! Here if we have a function that is not implemented in KERMSG.
  5703. ;   4146  2    !
  5704. ;   4147  2    
  5705. ;   4148  2        [OTHERWISE] :
  5706. ;   4149  3            BEGIN
  5707. ;   4150  3            KRM_ERROR (KER_UNIMPLGEN);
  5708. ;   4151  3            RETURN STATE_A;
  5709. ;   4152  2            END;
  5710. ;   4153  2        TES;
  5711. ;   4154  2    
  5712. ;   4155  2    !
  5713. ;   4156  2    ! If we get here, we have gotten a known type of generic message that
  5714. ;   4157  2    ! we need to have our operating system dependent routine handle.
  5715. ;   4158  2    !
  5716. ;   4159  2        RETURN CALL_SY_RTN (.G_FUNC);
  5717. ;   4160  1        END;                    ! End of SERVER_GENERIC
  5718.  
  5719.  
  5720.  
  5721.  
  5722.  
  5723. ;SERVER_GENERIC
  5724. U.14:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,-   3928                    0FFC   00000
  5725.         R11>                 ;R11
  5726.     MOVAB   B^U.81, R11             ;U.81, R11                                     5B    9F   AF  9E   00002
  5727.     MOVAB   G^GEN_1DATA, R10         ;GEN_1DATA, R10                                 5A 00000000G  00  9E   00006
  5728.     MOVAB   G^GEN_1SIZE, R9             ;GEN_1SIZE, R9                                     59 00000000G  00  9E   0000D
  5729.     MOVAB   G^U.56, R8             ;U.56, R8                                     58 00000000'  00  9E   00014
  5730.     MOVAB   -1008(SP), SP             ;-1008(SP), SP                                     5E     FC10   CE  9E   0001B
  5731.     PUSHL   #1                 ;#1                       4011                  01  DD   00020
  5732.     MOVZWL  #1002, -(SP)             ;#1002, -(SP)                                     7E     03EA   8F  3C   00022
  5733.     PUSHAB  12(SP)                 ;DATA_TEXT                                      0C   AE  9F   00027
  5734.     CALLS   #3, G^U.30             ;#3, U.30                          00000000V  00         03  FB   0002A
  5735.     CALLS   #0, G^U.28             ;#0, U.28                   4012 00000000V  00         00  FB   00031
  5736.     CLRQ    -(SP)                 ;-(SP)                       4013                  7E  7C   00038
  5737.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   0003A
  5738.     CALLS   #3, G^U.30             ;#3, U.30                          00000000V  00         03  FB   0003C
  5739.     MOVL    R0, R2                 ;R0, DATA_SIZE                                     52         50  D0   00043
  5740.     BGTR    1$                 ;1$                       4015                  09  14   00046
  5741.     PUSHL   #134316226             ;#134316226                   4018           080180C2   8F  DD   00048
  5742.     BRW     25$                 ;25$                                             0191  31   0004E
  5743. 1$:    CLRL    (R9)                 ;GEN_1SIZE                   4025                  69  D4   00051
  5744.     CLRL    G^GEN_2SIZE             ;GEN_2SIZE                   4026           00000000G  00  D4   00053
  5745.     CLRL    G^GEN_3SIZE             ;GEN_3SIZE                   4027           00000000G  00  D4   00059
  5746.     CLRB    (R10)                 ;GEN_1DATA                   4028                  6A  94   0005F
  5747.     CLRB    G^GEN_2DATA             ;GEN_2DATA                   4029           00000000G  00  94   00061
  5748.     CLRB    G^GEN_3DATA             ;GEN_3DATA                   4030           00000000G  00  94   00067
  5749.     MOVAB   5(SP), (SP)             ;DATA_TEXT+1, POINTER               4031            6E    05   AE  9E   0006D
  5750.     DECL    R2                 ;DATA_SIZE                   4032                  52  D7   00071
  5751.     BLEQ    3$                 ;3$                       4034                  4A  15   00073
  5752.     PUSHL   R9                 ;R9                       4037                  59  DD   00075
  5753.     PUSHR   #^M<R2,R10>             ;#^M<R2,R10>                                        0404   8F  BB   00077
  5754.     PUSHAB  12(SP)                 ;POINTER                                      0C   AE  9F   0007B
  5755.     CALLS   #4, (R11)             ;#4, UNPACK_DATA                                 6B         04  FB   0007E
  5756.     MOVL    R0, R2                 ;R0, DATA_SIZE                                     52         50  D0   00081
  5757.     BLSS    2$                 ;2$                       4039                  34  19   00084
  5758.     BLEQ    3$                 ;3$                       4041                  37  15   00086
  5759.     PUSHAB  G^GEN_2SIZE             ;GEN_2SIZE                   4044           00000000G  00  9F   00088
  5760.     PUSHAB  G^GEN_2DATA             ;GEN_2DATA                                    00000000G  00  9F   0008E
  5761.     PUSHL   R2                 ;DATA_SIZE                                           52  DD   00094
  5762.     PUSHAB  12(SP)                 ;POINTER                                      0C   AE  9F   00096
  5763.     CALLS   #4, (R11)             ;#4, UNPACK_DATA                                 6B         04  FB   00099
  5764.     MOVL    R0, R2                 ;R0, DATA_SIZE                                     52         50  D0   0009C
  5765.     BLSS    2$                 ;2$                       4046                  19  19   0009F
  5766.     BLEQ    3$                 ;3$                       4048                  1C  15   000A1
  5767.     PUSHAB  G^GEN_3SIZE             ;GEN_3SIZE                   4051           00000000G  00  9F   000A3
  5768.     PUSHAB  G^GEN_3DATA             ;GEN_3DATA                                    00000000G  00  9F   000A9
  5769.     PUSHL   R2                 ;DATA_SIZE                                           52  DD   000AF
  5770.     PUSHAB  12(SP)                 ;POINTER                                      0C   AE  9F   000B1
  5771.     CALLS   #4, (R11)             ;#4, UNPACK_DATA                                 6B         04  FB   000B4
  5772.     MOVL    R0, R2                 ;R0, DATA_SIZE                                     52         50  D0   000B7
  5773. 2$:    BGEQ    3$                 ;3$                       4053                  03  18   000BA
  5774.     BRW     26$                 ;26$                                             012A  31   000BC
  5775. 3$:    MOVZBL  4(SP), R6             ;DATA_TEXT, R6                   4061            56    04   AE  9A   000BF
  5776.     CMPB    R6, #70                 ;R6, #70                   4067       46   8F         56  91   000C3
  5777.     BNEQ    4$                 ;4$                                               13  12   000C7
  5778.     PUSHL   (R8)                 ;REC_SEQ                   4069                  68  DD   000C9
  5779.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   000CB
  5780.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   000CD
  5781.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   000D1
  5782.     MOVL    #16, R0                 ;#16, R0                   4070            50         10  D0   000D8
  5783.     RET                      ;                                               04   000DB
  5784. 4$:    CMPB    R6, #76                 ;R6, #76                   4077       4C   8F         56  91   000DC
  5785.     BNEQ    5$                 ;5$                                               1A  12   000E0
  5786.     PUSHL   (R8)                 ;REC_SEQ                   4079                  68  DD   000E2
  5787.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   000E4
  5788.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   000E6
  5789.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   000EA
  5790.     CALLS   #0, G^SY_LOGOUT             ;#0, SY_LOGOUT                   4080 00000000G  00         00  FB   000F1
  5791.     MOVL    #17, R0                 ;#17, R0                   4081            50         11  D0   000F8
  5792.     RET                      ;                                               04   000FB
  5793. 5$:    CMPB    R6, #84                 ;R6, #84                   4088       54   8F         56  91   000FC
  5794.     BNEQ    7$                 ;7$                                               3F  12   00100
  5795.     MOVL    (R9), R7             ;GEN_1SIZE, R7                   4090            57         69  D0   00102
  5796.     MOVC5   R7, (R10), #0, #132, G^FILE_NAME ;R7, GEN_1DATA, #0, #132, FILE_NAME                     6A         57  2C   00105
  5797.                          ;                            0084   8F         00       00108
  5798.                          ;                                  00000000G  00       0010C
  5799.     MOVL    R7, G^FILE_SIZE             ;R7, FILE_SIZE                   4091 00000000G  00         57  D0   00111
  5800.     MOVL    #1, 2024(R8)             ;#1, TEXT_HEAD_FLAG               4092     07E8   C8         01  D0   00118
  5801.     MOVZBL  #71, -(SP)             ;#71, -(SP)                   4093            7E    47   8F  9A   0011D
  5802.     MOVZBL  #73, -(SP)             ;#73, -(SP)                                     7E    49   8F  9A   00121
  5803.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   00125
  5804.     CMPL    -20(R8), #15             ;STATE, #15                   4095            0F    EC   A8  D1   0012C
  5805.     BNEQ    6$                 ;6$                                               0B  12   00130
  5806.     CMPL    -32(R8), -36(R8)         ;BLK_CHK_TYPE, INI_CHK_TYPE                        DC   A8    E0   A8  D1   00132
  5807.     BNEQ    6$                 ;6$                                               04  12   00137
  5808.     MOVL    #18, R0                 ;#18, R0                   4097            50         12  D0   00139
  5809.     RET                      ;                                               04   0013C
  5810. 6$:    MOVL    #1, R0                 ;#1, R0                   4099            50         01  D0   0013D
  5811.     RET                      ;                                               04   00140
  5812. 7$:    CMPB    R6, #68                 ;R6, #68                   4103       44   8F         56  91   00141
  5813.     BNEQ    8$                 ;8$                                               06  12   00145
  5814.     MOVL    #2, R2                 ;#2, G_FUNC                   4104            52         02  D0   00147
  5815.     BRW     21$                 ;21$                                             0082  31   0014A
  5816. 8$:    CMPB    R6, #85                 ;R6, #85                   4106       55   8F         56  91   0014D
  5817.     BNEQ    9$                 ;9$                                               05  12   00151
  5818.     MOVL    #3, R2                 ;#3, G_FUNC                   4107            52         03  D0   00153
  5819.     BRB     10$                 ;10$                                               09  11   00156
  5820. 9$:    CMPB    R6, #69                 ;R6, #69                   4109       45   8F         56  91   00158
  5821.     BNEQ    11$                 ;11$                                               05  12   0015C
  5822.     MOVL    #4, R2                 ;#4, G_FUNC                   4110            52         04  D0   0015E
  5823. 10$:    BRB     23$                 ;23$                                               77  11   00161
  5824. 11$:    CMPB    R6, #72                 ;R6, #72                   4112       48   8F         56  91   00163
  5825.     BNEQ    12$                 ;12$                                               05  12   00167
  5826.     MOVL    #6, R2                 ;#6, G_FUNC                   4113            52         06  D0   00169
  5827.     BRB     27$                 ;27$                                               7F  11   0016C
  5828. 12$:    CMPB    R6, #73                 ;R6, #73                   4115       49   8F         56  91   0016E
  5829.     BNEQ    13$                 ;13$                                               05  12   00172
  5830.     MOVL    #8, R2                 ;#8, G_FUNC                   4116            52         08  D0   00174
  5831.     BRB     27$                 ;27$                                               74  11   00177
  5832. 13$:    CMPB    R6, #67                 ;R6, #67                   4118       43   8F         56  91   00179
  5833.     BNEQ    14$                 ;14$                                               05  12   0017D
  5834.     MOVL    #9, R2                 ;#9, G_FUNC                   4119            52         09  D0   0017F
  5835.     BRB     27$                 ;27$                                               69  11   00182
  5836. 14$:    CMPB    R6, #82                 ;R6, #82                   4121       52   8F         56  91   00184
  5837.     BNEQ    15$                 ;15$                                               05  12   00188
  5838.     MOVL    #10, R2                 ;#10, G_FUNC                   4122            52         0A  D0   0018A
  5839.     BRB     27$                 ;27$                                               5E  11   0018D
  5840. 15$:    CMPB    R6, #75                 ;R6, #75                   4124       4B   8F         56  91   0018F
  5841.     BNEQ    16$                 ;16$                                               05  12   00193
  5842.     MOVL    #11, R2                 ;#11, G_FUNC                   4125            52         0B  D0   00195
  5843.     BRB     27$                 ;27$                                               53  11   00198
  5844. 16$:    CMPB    R6, #87                 ;R6, #87                   4127       57   8F         56  91   0019A
  5845.     BNEQ    17$                 ;17$                                               05  12   0019E
  5846.     MOVL    #12, R2                 ;#12, G_FUNC                   4128            52         0C  D0   001A0
  5847.     BRB     27$                 ;27$                                               48  11   001A3
  5848. 17$:    CMPB    R6, #77                 ;R6, #77                   4130       4D   8F         56  91   001A5
  5849.     BNEQ    18$                 ;18$                                               05  12   001A9
  5850.     MOVL    #13, R2                 ;#13, G_FUNC                   4131            52         0D  D0   001AB
  5851.     BRB     27$                 ;27$                                               3D  11   001AE
  5852. 18$:    CMPB    R6, #81                 ;R6, #81                   4133       51   8F         56  91   001B0
  5853.     BNEQ    19$                 ;19$                                               05  12   001B4
  5854.     MOVL    #14, R2                 ;#14, G_FUNC                   4134            52         0E  D0   001B6
  5855.     BRB     27$                 ;27$                                               32  11   001B9
  5856. 19$:    CMPB    R6, #80                 ;R6, #80                   4136       50   8F         56  91   001BB
  5857.     BNEQ    20$                 ;20$                                               05  12   001BF
  5858.     MOVL    #19, R2                 ;#19, G_FUNC                   4137            52         13  D0   001C1
  5859.     BRB     27$                 ;27$                                               27  11   001C4
  5860. 20$:    CMPB    R6, #74                 ;R6, #74                   4139       4A   8F         56  91   001C6
  5861.     BNEQ    22$                 ;22$                                               05  12   001CA
  5862.     MOVL    #17, R2                 ;#17, G_FUNC                   4140            52         11  D0   001CC
  5863. 21$:    BRB     27$                 ;27$                                               1C  11   001CF
  5864. 22$:    CMPB    R6, #86                 ;R6, #86                   4142       56   8F         56  91   001D1
  5865.     BNEQ    24$                 ;24$                                               05  12   001D5
  5866.     MOVL    #18, R2                 ;#18, G_FUNC                   4143            52         12  D0   001D7
  5867. 23$:    BRB     27$                 ;27$                                               11  11   001DA
  5868. 24$:    PUSHL   #134316210             ;#134316210                   4150           080180B2   8F  DD   001DC
  5869. 25$:    CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   001E2
  5870. 26$:    MOVL    #10, R0                 ;#10, R0                   4151            50         0A  D0   001E9
  5871.     RET                      ;                                               04   001EC
  5872. 27$:    PUSHL   R2                 ;G_FUNC                   4159                  52  DD   001ED
  5873.     CALLS   #1, G^U.17             ;#1, U.17                          00000000V  00         01  FB   001EF
  5874.     RET                      ;                                               04   001F6
  5875.  
  5876. ; Routine Size:  503 bytes,    Routine Base:  $CODE$ + 14AE
  5877.  
  5878.  
  5879. ;   4161  1     %SBTTL 'HOST_COMMAND - perform a host command'
  5880. ;   4162  1    ROUTINE HOST_COMMAND =
  5881. ;   4163  1    
  5882. ;   4164  1    !++
  5883. ;   4165  1    ! FUNCTIONAL DESCRIPTION:
  5884. ;   4166  1    !
  5885. ;   4167  1    ! This routine will handle the host command packet.
  5886. ;   4168  1    ! It will set up the data for the call to the system routine.
  5887. ;   4169  1    !
  5888. ;   4170  1    ! CALLING SEQUENCE:
  5889. ;   4171  1    !
  5890. ;   4172  1    !    STATE = HOST_COMMAND();
  5891. ;   4173  1    !
  5892. ;   4174  1    ! INPUT PARAMETERS:
  5893. ;   4175  1    !
  5894. ;   4176  1    !    None.
  5895. ;   4177  1    !
  5896. ;   4178  1    ! IMPLICIT INPUTS:
  5897. ;   4179  1    !
  5898. ;   4180  1    !    Generic message receive in REC_MSG.
  5899. ;   4181  1    !
  5900. ;   4182  1    ! OUTPUT PARAMETERS:
  5901. ;   4183  1    !
  5902. ;   4184  1    !    Returns new state for FSM
  5903. ;   4185  1    !
  5904. ;   4186  1    ! IMPLICIT OUTPUTS:
  5905. ;   4187  1    !
  5906. ;   4188  1    !    None.
  5907. ;   4189  1    !
  5908. ;   4190  1    ! COMPLETION CODES:
  5909. ;   4191  1    !
  5910. ;   4192  1    !    None.
  5911. ;   4193  1    !
  5912. ;   4194  1    ! SIDE EFFECTS:
  5913. ;   4195  1    !
  5914. ;   4196  1    !    None.
  5915. ;   4197  1    !
  5916. ;   4198  1    !--
  5917. ;   4199  1    
  5918. ;   4200  2        BEGIN
  5919. ;   4201  2        GEN_1SIZE = 0;
  5920. ;   4202  2        GEN_2SIZE = 0;
  5921. ;   4203  2        GEN_3SIZE = 0;
  5922. ;   4204  2    
  5923. ;   4205  2        IF .REC_LENGTH LEQ 0
  5924. ;   4206  2        THEN
  5925. ;   4207  3        BEGIN
  5926. ;   4208  3        KRM_ERROR (KER_PROTOERR);        ! Return an error
  5927. ;   4209  3        RETURN STATE_A;                ! Just abort
  5928. ;   4210  2        END;
  5929. ;   4211  2    
  5930. ;   4212  2        SET_STRING (CH$PTR (GEN_1DATA), MAX_MSG, TRUE);    ! Start writing to buffer
  5931. ;   4213  2        BFR_EMPTY ();                ! Dump the text
  5932. ;   4214  2        GEN_1SIZE = SET_STRING (0, 0, FALSE);    ! Get the result
  5933. ;   4215  2        RETURN CALL_SY_RTN (GC_COMMAND);
  5934. ;   4216  1        END;                    ! End of HOST_COMMAND
  5935.  
  5936.  
  5937.  
  5938.  
  5939.  
  5940. ;HOST_COMMAND
  5941. U.15:    .WORD   ^M<R2,R3>             ;Save R2,R3                   4162                    000C   00000
  5942.     MOVAB   G^GEN_1SIZE, R3             ;GEN_1SIZE, R3                                     53 00000000G  00  9E   00002
  5943.     MOVAB   G^U.30, R2             ;U.30, R2                                     52 00000000V  00  9E   00009
  5944.     CLRL    (R3)                 ;GEN_1SIZE                   4201                  63  D4   00010
  5945.     CLRL    G^GEN_2SIZE             ;GEN_2SIZE                   4202           00000000G  00  D4   00012
  5946.     CLRL    G^GEN_3SIZE             ;GEN_3SIZE                   4203           00000000G  00  D4   00018
  5947.     TSTL    G^U.57                 ;U.57                       4205           00000000'  00  D5   0001E
  5948.     BGTR    1$                 ;1$                                               11  14   00024
  5949.     PUSHL   #134316226             ;#134316226                   4208           080180C2   8F  DD   00026
  5950.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   0002C
  5951.     MOVL    #10, R0                 ;#10, R0                   4209            50         0A  D0   00033
  5952.     RET                      ;                                               04   00036
  5953. 1$:    PUSHL   #1                 ;#1                       4212                  01  DD   00037
  5954.     MOVZWL  #1002, -(SP)             ;#1002, -(SP)                                     7E     03EA   8F  3C   00039
  5955.     PUSHAB  G^GEN_1DATA             ;GEN_1DATA                                    00000000G  00  9F   0003E
  5956.     CALLS   #3, (R2)             ;#3, SET_STRING                                 62         03  FB   00044
  5957.     CALLS   #0, G^U.28             ;#0, U.28                   4213 00000000V  00         00  FB   00047
  5958.     CLRQ    -(SP)                 ;-(SP)                       4214                  7E  7C   0004E
  5959.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00050
  5960.     CALLS   #3, (R2)             ;#3, SET_STRING                                 62         03  FB   00052
  5961.     MOVL    R0, (R3)             ;R0, GEN_1SIZE                                     63         50  D0   00055
  5962.     PUSHL   #15                 ;#15                       4215                  0F  DD   00058
  5963.     CALLS   #1, G^U.17             ;#1, U.17                          00000000V  00         01  FB   0005A
  5964.     RET                      ;                                               04   00061
  5965.  
  5966. ; Routine Size:  98 bytes,    Routine Base:  $CODE$ + 16A5
  5967.  
  5968.  
  5969. ;   4217  1     %SBTTL 'KERMIT_COMMAND - perform a KERMIT command'
  5970. ;   4218  1    ROUTINE KERMIT_COMMAND =
  5971. ;   4219  1    
  5972. ;   4220  1    !++
  5973. ;   4221  1    ! FUNCTIONAL DESCRIPTION:
  5974. ;   4222  1    !
  5975. ;   4223  1    ! This routine will handle the KERMIT command packet.
  5976. ;   4224  1    ! It will set up the data for the call to the system routine.
  5977. ;   4225  1    !
  5978. ;   4226  1    ! CALLING SEQUENCE:
  5979. ;   4227  1    !
  5980. ;   4228  1    !    STATE = KERMIT_COMMAND();
  5981. ;   4229  1    !
  5982. ;   4230  1    ! INPUT PARAMETERS:
  5983. ;   4231  1    !
  5984. ;   4232  1    !    None.
  5985. ;   4233  1    !
  5986. ;   4234  1    ! IMPLICIT INPUTS:
  5987. ;   4235  1    !
  5988. ;   4236  1    !    Generic message receive in REC_MSG.
  5989. ;   4237  1    !
  5990. ;   4238  1    ! OUTPUT PARAMETERS:
  5991. ;   4239  1    !
  5992. ;   4240  1    !    Returns new state for FSM
  5993. ;   4241  1    !
  5994. ;   4242  1    ! IMPLICIT OUTPUTS:
  5995. ;   4243  1    !
  5996. ;   4244  1    !    None.
  5997. ;   4245  1    !
  5998. ;   4246  1    ! COMPLETION CODES:
  5999. ;   4247  1    !
  6000. ;   4248  1    !    None.
  6001. ;   4249  1    !
  6002. ;   4250  1    ! SIDE EFFECTS:
  6003. ;   4251  1    !
  6004. ;   4252  1    !    None.
  6005. ;   4253  1    !
  6006. ;   4254  1    !--
  6007. ;   4255  1    
  6008. ;   4256  2        BEGIN
  6009. ;   4257  2        GEN_1SIZE = 0;
  6010. ;   4258  2        GEN_2SIZE = 0;
  6011. ;   4259  2        GEN_3SIZE = 0;
  6012. ;   4260  2    
  6013. ;   4261  2        IF .REC_LENGTH LEQ 0
  6014. ;   4262  2        THEN
  6015. ;   4263  3        BEGIN
  6016. ;   4264  3        KRM_ERROR (KER_PROTOERR);        ! Return an error
  6017. ;   4265  3        RETURN STATE_A;                ! Just abort
  6018. ;   4266  2        END;
  6019. ;   4267  2    
  6020. ;   4268  2        SET_STRING (CH$PTR (GEN_1DATA), MAX_MSG, TRUE);    ! Start writing to buffer
  6021. ;   4269  2        BFR_EMPTY ();                ! Dump the text
  6022. ;   4270  2        GEN_1SIZE = SET_STRING (0, 0, FALSE);    ! Get the result
  6023. ;   4271  2        RETURN CALL_SY_RTN (GC_KERMIT);
  6024. ;   4272  1        END;                    ! End of KERMIT_COMMAND
  6025.  
  6026.  
  6027.  
  6028.  
  6029.  
  6030. ;KERMIT_COMMAND
  6031. U.16:    .WORD   ^M<R2,R3>             ;Save R2,R3                   4218                    000C   00000
  6032.     MOVAB   G^GEN_1SIZE, R3             ;GEN_1SIZE, R3                                     53 00000000G  00  9E   00002
  6033.     MOVAB   G^U.30, R2             ;U.30, R2                                     52 00000000V  00  9E   00009
  6034.     CLRL    (R3)                 ;GEN_1SIZE                   4257                  63  D4   00010
  6035.     CLRL    G^GEN_2SIZE             ;GEN_2SIZE                   4258           00000000G  00  D4   00012
  6036.     CLRL    G^GEN_3SIZE             ;GEN_3SIZE                   4259           00000000G  00  D4   00018
  6037.     TSTL    G^U.57                 ;U.57                       4261           00000000'  00  D5   0001E
  6038.     BGTR    1$                 ;1$                                               11  14   00024
  6039.     PUSHL   #134316226             ;#134316226                   4264           080180C2   8F  DD   00026
  6040.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   0002C
  6041.     MOVL    #10, R0                 ;#10, R0                   4265            50         0A  D0   00033
  6042.     RET                      ;                                               04   00036
  6043. 1$:    PUSHL   #1                 ;#1                       4268                  01  DD   00037
  6044.     MOVZWL  #1002, -(SP)             ;#1002, -(SP)                                     7E     03EA   8F  3C   00039
  6045.     PUSHAB  G^GEN_1DATA             ;GEN_1DATA                                    00000000G  00  9F   0003E
  6046.     CALLS   #3, (R2)             ;#3, SET_STRING                                 62         03  FB   00044
  6047.     CALLS   #0, G^U.28             ;#0, U.28                   4269 00000000V  00         00  FB   00047
  6048.     CLRQ    -(SP)                 ;-(SP)                       4270                  7E  7C   0004E
  6049.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00050
  6050.     CALLS   #3, (R2)             ;#3, SET_STRING                                 62         03  FB   00052
  6051.     MOVL    R0, (R3)             ;R0, GEN_1SIZE                                     63         50  D0   00055
  6052.     PUSHL   #16                 ;#16                       4271                  10  DD   00058
  6053.     CALLS   #1, G^U.17             ;#1, U.17                          00000000V  00         01  FB   0005A
  6054.     RET                      ;                                               04   00061
  6055.  
  6056. ; Routine Size:  98 bytes,    Routine Base:  $CODE$ + 1707
  6057.  
  6058.  
  6059. ;   4273  1     %SBTTL 'CALL_SY_RTN - handle operating system dependent functions'
  6060. ;   4274  1    ROUTINE CALL_SY_RTN (G_FUNC) =
  6061. ;   4275  1    
  6062. ;   4276  1    !++
  6063. ;   4277  1    ! FUNCTIONAL DESCRIPTION:
  6064. ;   4278  1    !
  6065. ;   4279  1    ! This routine will handle calling the operating system dependent routine
  6066. ;   4280  1    ! for a server function and returning the response.
  6067. ;   4281  1    !
  6068. ;   4282  1    ! CALLING SEQUENCE:
  6069. ;   4283  1    !
  6070. ;   4284  1    !    STATE = CALL_SY_RTN(.G_FUNC);
  6071. ;   4285  1    !
  6072. ;   4286  1    ! INPUT PARAMETERS:
  6073. ;   4287  1    !
  6074. ;   4288  1    !    G_FUNC - Generic function code
  6075. ;   4289  1    !
  6076. ;   4290  1    ! IMPLICIT INPUTS:
  6077. ;   4291  1    !
  6078. ;   4292  1    !    Generic message data in GEN_1DATA
  6079. ;   4293  1    !
  6080. ;   4294  1    ! OUTPUT PARAMETERS:
  6081. ;   4295  1    !
  6082. ;   4296  1    !    Returns new state for FSM
  6083. ;   4297  1    !
  6084. ;   4298  1    ! IMPLICIT OUTPUTS:
  6085. ;   4299  1    !
  6086. ;   4300  1    !    None.
  6087. ;   4301  1    !
  6088. ;   4302  1    ! COMPLETION CODES:
  6089. ;   4303  1    !
  6090. ;   4304  1    !    None.
  6091. ;   4305  1    !
  6092. ;   4306  1    ! SIDE EFFECTS:
  6093. ;   4307  1    !
  6094. ;   4308  1    !    None.
  6095. ;   4309  1    !
  6096. ;   4310  1    !--
  6097. ;   4311  1    
  6098. ;   4312  2        BEGIN
  6099. ;   4313  2    
  6100. ;   4314  2        LOCAL
  6101. ;   4315  2        STRING_ADDRESS,                ! Address of string result
  6102. ;   4316  2        STRING_LENGTH,                ! Length of string result
  6103. ;   4317  2        GET_CHR_SUBROUTINE,            ! Routine to get a response character
  6104. ;   4318  2        STATUS;                    ! Status value
  6105. ;   4319  2    
  6106. ;   4320  2    !
  6107. ;   4321  2    ! Call the routine with the desired type of command.
  6108. ;   4322  2    !
  6109. ;   4323  2        STRING_LENGTH = 0;                ! Initialize for no string
  6110. ;   4324  2        GET_CHR_SUBROUTINE = 0;            ! And no subroutine
  6111. ;   4325  2    
  6112. ;   4326  2        IF NOT SY_GENERIC (.G_FUNC, STRING_ADDRESS, STRING_LENGTH, GET_CHR_SUBROUTINE)
  6113. ;   4327  2        THEN
  6114. ;   4328  2        RETURN STATE_A;                ! And abort
  6115. ;   4329  2    
  6116. ;   4330  2        IF .STRING_LENGTH GTR 0
  6117. ;   4331  2        THEN
  6118. ;   4332  3        BEGIN
  6119. ;   4333  3        SET_STRING (CH$PTR (.STRING_ADDRESS), .STRING_LENGTH, TRUE);
  6120. ;   4334  3    
  6121. ;   4335  3        IF .STRING_LENGTH LSS .SEND_PKT_SIZE - PKT_OVR_HEAD
  6122. ;   4336  3        THEN
  6123. ;   4337  4            BEGIN
  6124. ;   4338  4            BFR_FILL (TRUE);            ! If it should fit, pack it in
  6125. ;   4339  4    
  6126. ;   4340  4            IF SET_STRING (0, 0, FALSE) GEQ .STRING_LENGTH
  6127. ;   4341  4            THEN                 ! It fit, so just send the ACK
  6128. ;   4342  4    
  6129. ;   4343  4            IF SEND_PACKET (MSG_ACK, .SIZE, .REC_SEQ) THEN RETURN STATE_C ELSE RETURN STATE_EX;
  6130. ;   4344  4    
  6131. ;   4345  4    !
  6132. ;   4346  4    ! It didn't fit, reset the pointers to the beginning
  6133. ;   4347  4    !
  6134. ;   4348  4            SET_STRING (CH$PTR (.STRING_ADDRESS), .STRING_LENGTH, TRUE);
  6135. ;   4349  3            END;
  6136. ;   4350  3    
  6137. ;   4351  3        NO_FILE_NEEDED = TRUE;            ! Don't need a file
  6138. ;   4352  3        END
  6139. ;   4353  2        ELSE
  6140. ;   4354  2    
  6141. ;   4355  2        IF .GET_CHR_SUBROUTINE NEQ 0        ! If we got a subroutine back
  6142. ;   4356  2        THEN
  6143. ;   4357  3            BEGIN
  6144. ;   4358  3            GET_CHR_ROUTINE = .GET_CHR_SUBROUTINE;
  6145. ;   4359  3            NO_FILE_NEEDED = TRUE;
  6146. ;   4360  2            END;
  6147. ;   4361  2    
  6148. ;   4362  2        TEXT_HEAD_FLAG = TRUE;            ! Send to be typed
  6149. ;   4363  2        XFR_STATUS (%C'I', %C'G');            ! Doing a generic command
  6150. ;   4364  2    
  6151. ;   4365  2        IF .STATE EQL STATE_II AND .BLK_CHK_TYPE EQL .INI_CHK_TYPE
  6152. ;   4366  2        THEN
  6153. ;   4367  2        RETURN STATE_OF
  6154. ;   4368  2        ELSE
  6155. ;   4369  2        RETURN STATE_S;                ! Send the response
  6156. ;   4370  2    
  6157. ;   4371  1        END;                    ! End of CALL_SY_RTN
  6158.  
  6159.  
  6160.  
  6161.  
  6162.  
  6163. ;CALL_SY_RTN
  6164. U.17:    .WORD   ^M<R2,R3,R4>             ;Save R2,R3,R4                   4274                    001C   00000
  6165.     MOVAB   G^U.30, R4             ;U.30, R4                                     54 00000000V  00  9E   00002
  6166.     MOVAB   G^U.40, R3             ;U.40, R3                                     53 00000000'  00  9E   00009
  6167.     SUBL2   #4, SP                 ;#4, SP                                     5E         04  C2   00010
  6168.     CLRQ    -(SP)                 ;GET_CHR_SUBROUTINE               4324                  7E  7C   00013
  6169.     PUSHL   SP                 ;SP                       4326                  5E  DD   00015
  6170.     PUSHAB  8(SP)                 ;STRING_LENGTH                                      08   AE  9F   00017
  6171.     PUSHAB  16(SP)                 ;STRING_ADDRESS                                  10   AE  9F   0001A
  6172.     PUSHL   4(AP)                 ;G_FUNC                                      04   AC  DD   0001D
  6173.     CALLS   #4, G^SY_GENERIC         ;#4, SY_GENERIC                      00000000G  00         04  FB   00020
  6174.     BLBS    R0, 1$                 ;R0, 1$                                     04         50  E8   00027
  6175.     MOVL    #10, R0                 ;#10, R0                   4328            50         0A  D0   0002A
  6176.     RET                      ;                                               04   0002D
  6177. 1$:    MOVL    4(SP), R2             ;STRING_LENGTH, R2               4330            52    04   AE  D0   0002E
  6178.     BLEQ    4$                 ;4$                                               50  15   00032
  6179.     PUSHL   #1                 ;#1                       4333                  01  DD   00034
  6180.     PUSHL   R2                 ;R2                                               52  DD   00036
  6181.     PUSHL   16(SP)                 ;STRING_ADDRESS                                  10   AE  DD   00038
  6182.     CALLS   #3, (R4)             ;#3, SET_STRING                                 64         03  FB   0003B
  6183.     SUBL3   #3, (R3), R0             ;#3, SEND_PKT_SIZE, R0               4335            63         03  C3   0003E
  6184.                          ;                                         50       00041
  6185.     CMPL    R2, R0                 ;R2, R0                                     50         52  D1   00042
  6186.     BGEQ    5$                 ;5$                                               46  18   00045
  6187.     PUSHL   #1                 ;#1                       4338                  01  DD   00047
  6188.     CALLS   #1, G^U.29             ;#1, U.29                          00000000V  00         01  FB   00049
  6189.     CLRQ    -(SP)                 ;-(SP)                       4340                  7E  7C   00050
  6190.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00052
  6191.     CALLS   #3, (R4)             ;#3, SET_STRING                                 64         03  FB   00054
  6192.     CMPL    R0, R2                 ;R0, R2                                     52         50  D1   00057
  6193.     BLSS    3$                 ;3$                                               1C  19   0005A
  6194.     PUSHL   64(R3)                 ;REC_SEQ                   4343             40   A3  DD   0005C
  6195.     PUSHL   48(R3)                 ;SIZE                                          30   A3  DD   0005F
  6196.     MOVZBL  #89, -(SP)             ;#89, -(SP)                                     7E    59   8F  9A   00062
  6197.     CALLS   #3, G^U.24             ;#3, U.24                          00000000V  00         03  FB   00066
  6198.     BLBC    R0, 2$                 ;R0, 2$                                     04         50  E9   0006D
  6199.     MOVL    #9, R0                 ;#9, R0                                     50         09  D0   00070
  6200.     RET                      ;                                               04   00073
  6201. 2$:    MOVL    #19, R0                 ;#19, R0                                     50         13  D0   00074
  6202.     RET                      ;                                               04   00077
  6203. 3$:    PUSHL   #1                 ;#1                       4348                  01  DD   00078
  6204.     PUSHL   R2                 ;R2                                               52  DD   0007A
  6205.     PUSHL   16(SP)                 ;STRING_ADDRESS                                  10   AE  DD   0007C
  6206.     CALLS   #3, (R4)             ;#3, SET_STRING                                 64         03  FB   0007F
  6207.     BRB     5$                 ;5$                       4351                  09  11   00082
  6208. 4$:    TSTL    (SP)                 ;GET_CHR_SUBROUTINE               4355                  6E  D5   00084
  6209.     BEQL    6$                 ;6$                                               0A  13   00086
  6210.     MOVL    (SP), 2108(R3)             ;GET_CHR_SUBROUTINE, GET_CHR_ROUTINE  4358     083C   C3         6E  D0   00088
  6211. 5$:    MOVL    #1, 2092(R3)             ;#1, NO_FILE_NEEDED               4359     082C   C3         01  D0   0008D
  6212. 6$:    MOVL    #1, 2088(R3)             ;#1, TEXT_HEAD_FLAG               4362     0828   C3         01  D0   00092
  6213.     MOVZBL  #71, -(SP)             ;#71, -(SP)                   4363            7E    47   8F  9A   00097
  6214.     MOVZBL  #73, -(SP)             ;#73, -(SP)                                     7E    49   8F  9A   0009B
  6215.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   0009F
  6216.     CMPL    44(R3), #15             ;STATE, #15                   4365            0F    2C   A3  D1   000A6
  6217.     BNEQ    7$                 ;7$                                               0B  12   000AA
  6218.     CMPL    32(R3), 28(R3)             ;BLK_CHK_TYPE, INI_CHK_TYPE                        1C   A3    20   A3  D1   000AC
  6219.     BNEQ    7$                 ;7$                                               04  12   000B1
  6220.     MOVL    #18, R0                 ;#18, R0                   4367            50         12  D0   000B3
  6221.     RET                      ;                                               04   000B6
  6222. 7$:    MOVL    #1, R0                 ;#1, R0                   4369            50         01  D0   000B7
  6223.     RET                      ;                                               04   000BA
  6224.  
  6225. ; Routine Size:  187 bytes,    Routine Base:  $CODE$ + 1769
  6226.  
  6227.  
  6228. ;   4372  1     %SBTTL 'Message processing -- PRS_SEND_INIT - Parse send init params'
  6229. ;   4373  1    ROUTINE PRS_SEND_INIT =
  6230. ;   4374  1    
  6231. ;   4375  1    !++
  6232. ;   4376  1    ! FUNCTIONAL DESCRIPTION:
  6233. ;   4377  1    !
  6234. ;   4378  1    !    This routine will parse the SEND_INIT parameters that were sent by
  6235. ;   4379  1    !    the remote Kermit.  The items will be stored into the low segment.
  6236. ;   4380  1    !
  6237. ;   4381  1    ! CALLING SEQUENCE:
  6238. ;   4382  1    !
  6239. ;   4383  1    !    PRS_SEND_INIT ();
  6240. ;   4384  1    !
  6241. ;   4385  1    ! INPUT PARAMETERS:
  6242. ;   4386  1    !
  6243. ;   4387  1    !    None.
  6244. ;   4388  1    !
  6245. ;   4389  1    ! IMPLICIT INPUTS:
  6246. ;   4390  1    !
  6247. ;   4391  1    !    Message stored in REC_MSG.
  6248. ;   4392  1    !
  6249. ;   4393  1    ! OUTPUT PARAMETERS:
  6250. ;   4394  1    !
  6251. ;   4395  1    !    None.
  6252. ;   4396  1    !
  6253. ;   4397  1    ! IMPLICIT OUTPUTS:
  6254. ;   4398  1    !
  6255. ;   4399  1    !    None.
  6256. ;   4400  1    !
  6257. ;   4401  1    ! COMPLETION CODES:
  6258. ;   4402  1    !
  6259. ;   4403  1    !    None.
  6260. ;   4404  1    !
  6261. ;   4405  1    ! SIDE EFFECTS:
  6262. ;   4406  1    !
  6263. ;   4407  1    !    None.
  6264. ;   4408  1    !
  6265. ;   4409  1    !--
  6266. ;   4410  1    
  6267. ;   4411  2        BEGIN
  6268. ;   4412  2    ! The following section of code will parse the various send parameters
  6269. ;   4413  2    ! that are found in the send-init message.  The following code will store
  6270. ;   4414  2    ! the following as the value.
  6271. ;   4415  2    !
  6272. ;   4416  2    ! If the user specified a value then the user supplied value will be used else
  6273. ;   4417  2    ! the value in the message and if none in the message then the default value.
  6274. ;   4418  2    !
  6275. ;   4419  2    ! User supplied values are denoted as positive values in SND_xxxxxxx.
  6276. ;   4420  2    !
  6277. ;   4421  2    ! Parse the packet size
  6278. ;   4422  2    !
  6279. ;   4423  3        SEND_PKT_SIZE = (IF .SND_PKT_SIZE GEQ 0 THEN        ! [108]
  6280. ;   4424  3          (IF .SND_PKT_SIZE GTR 94 THEN 94 ELSE .SND_PKT_SIZE) ELSE    ! [108]
  6281. ;   4425  4        BEGIN
  6282. ;   4426  4    
  6283. ;   4427  4        IF .REC_LENGTH GTR P_SI_BUFSIZ
  6284. ;   4428  4        THEN
  6285. ; P 4429  4            UNCHAR (CH$RCHAR (CH$PTR (REC_MSG,
  6286. ;   4430  5                .RECV_PKT_MSG + P_SI_BUFSIZ, CHR_SIZE))) ! [108]
  6287. ;   4431  4        ELSE
  6288. ;   4432  4            ABS (.SND_PKT_SIZE)
  6289. ;   4433  4    
  6290. ;   4434  4        END
  6291. ;   4435  2        );
  6292. ;   4436  2    !
  6293. ;   4437  2    ! Parse the time out value
  6294. ;   4438  2    !
  6295. ;   4439  3        SEND_TIMEOUT = (IF .SND_TIMEOUT GEQ 0 THEN .SND_TIMEOUT ELSE
  6296. ;   4440  4        BEGIN
  6297. ;   4441  4    
  6298. ;   4442  4        IF .REC_LENGTH GTR P_SI_TIMOUT
  6299. ;   4443  4        THEN
  6300. ; P 4444  4            UNCHAR (CH$RCHAR (CH$PTR (REC_MSG,
  6301. ;   4445  5                .RECV_PKT_MSG + P_SI_TIMOUT, CHR_SIZE))) ! [108]
  6302. ;   4446  4        ELSE
  6303. ;   4447  4            ABS (.SND_TIMEOUT)
  6304. ;   4448  4    
  6305. ;   4449  4        END
  6306. ;   4450  2        );
  6307. ;   4451  2    !
  6308. ;   4452  2    ! Parse the number of padding characters supplied
  6309. ;   4453  2    !
  6310. ;   4454  3        SEND_NPAD = (IF .SND_NPAD GEQ 0 THEN .SND_NPAD ELSE
  6311. ;   4455  4        BEGIN
  6312. ;   4456  4    
  6313. ;   4457  4        IF .REC_LENGTH GTR P_SI_NPAD
  6314. ;   4458  4        THEN
  6315. ; P 4459  4            UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_NPAD,
  6316. ;   4460  5                CHR_SIZE)))                       ! [108]
  6317. ;   4461  4        ELSE
  6318. ;   4462  4            ABS (.SND_NPAD)
  6319. ;   4463  4    
  6320. ;   4464  4        END
  6321. ;   4465  2        );
  6322. ;   4466  2    !
  6323. ;   4467  2    ! Parse the padding character
  6324. ;   4468  2    !
  6325. ;   4469  3        SEND_PADCHAR = (IF .SND_PADCHAR GEQ 0 THEN .SND_PADCHAR ELSE
  6326. ;   4470  4        BEGIN
  6327. ;   4471  4    
  6328. ;   4472  4        IF .REC_LENGTH GTR P_SI_PAD
  6329. ;   4473  4        THEN
  6330. ; P 4474  4            CTL (CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_PAD,
  6331. ;   4475  5                CHR_SIZE)))                       ! [108]
  6332. ;   4476  4        ELSE
  6333. ;   4477  4            ABS (.SND_PADCHAR)
  6334. ;   4478  4    
  6335. ;   4479  4        END
  6336. ;   4480  2        );
  6337. ;   4481  2    !
  6338. ;   4482  2    ! Parse the end of line character
  6339. ;   4483  2    !
  6340. ;   4484  3        SEND_EOL = (IF .SND_EOL GEQ 0 THEN .SND_EOL ELSE
  6341. ;   4485  4        BEGIN
  6342. ;   4486  4    
  6343. ;   4487  4        IF .REC_LENGTH GTR P_SI_EOL
  6344. ;   4488  4        THEN
  6345. ; P 4489  4            UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_EOL,
  6346. ;   4490  5                CHR_SIZE)))                       ! [108]
  6347. ;   4491  4        ELSE
  6348. ;   4492  4            ABS (.SND_EOL)
  6349. ;   4493  4    
  6350. ;   4494  4        END
  6351. ;   4495  2        );
  6352. ;   4496  2    !
  6353. ;   4497  2    ! Parse the quoting character
  6354. ;   4498  2    !
  6355. ;   4499  3        SEND_QUOTE_CHR = (IF .SND_QUOTE_CHR GEQ 0 THEN .SND_QUOTE_CHR ELSE
  6356. ;   4500  4        BEGIN
  6357. ;   4501  4    
  6358. ;   4502  4        IF .REC_LENGTH GTR P_SI_QUOTE
  6359. ;   4503  4        THEN
  6360. ;   4504  4            CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG + P_SI_QUOTE,     ! [108]
  6361. ;   4505  4                CHR_SIZE))
  6362. ;   4506  4        ELSE
  6363. ;   4507  4            ABS (.SND_QUOTE_CHR)
  6364. ;   4508  4    
  6365. ;   4509  4        END
  6366. ;   4510  2        );
  6367. ;   4511  2    !
  6368. ;   4512  2    ! Parse the 8-bit quoting character
  6369. ;   4513  2    !
  6370. ;   4514  2    ! If the character was not included in the packet, assume no eight-bit
  6371. ;   4515  2    ! quoting allowed (we are probably talking to an old version of Kermit).
  6372. ;   4516  2    !
  6373. ;   4517  3        SEND_8QUOTE_CHR = (IF .REC_LENGTH GTR P_SI_8QUOTE THEN CH$RCHAR (CH$PTR (REC_MSG,
  6374. ;   4518  3            .RECV_PKT_MSG + P_SI_8QUOTE, CHR_SIZE)) ELSE %C'N' ! [108] ! Assume no 8-bit quoting allowed
  6375. ;   4519  2        );
  6376. ;   4520  2    !
  6377. ;   4521  2    ! Parse the checksum type
  6378. ;   4522  2    !
  6379. ;   4523  2    
  6380. ;   4524  2        IF .REC_LENGTH GTR P_SI_CHKTYPE
  6381. ;   4525  2        THEN
  6382. ;   4526  3        BEGIN
  6383. ;   4527  3    
  6384. ;   4528  3        LOCAL
  6385. ;   4529  3            REQ_CHK_TYPE;
  6386. ;   4530  3    
  6387. ;   4531  3        REQ_CHK_TYPE = CH$RCHAR (CH$PTR (REC_MSG, .RECV_PKT_MSG +      ! [108]
  6388. ;   4532  3                        P_SI_CHKTYPE, CHR_SIZE));
  6389. ;   4533  3    
  6390. ;   4534  3        IF .REC_TYPE NEQ MSG_ACK
  6391. ;   4535  3        THEN
  6392. ;   4536  3    
  6393. ;   4537  3            IF .REQ_CHK_TYPE GEQ CHK_1CHAR AND .REQ_CHK_TYPE LEQ CHK_CRC
  6394. ;   4538  3            THEN
  6395. ;   4539  3            INI_CHK_TYPE = .REQ_CHK_TYPE
  6396. ;   4540  3            ELSE
  6397. ;   4541  3            INI_CHK_TYPE = CHK_1CHAR
  6398. ;   4542  3    
  6399. ;   4543  3        ELSE
  6400. ;   4544  3    
  6401. ;   4545  3            IF .REQ_CHK_TYPE NEQ .CHKTYPE
  6402. ;   4546  3            THEN
  6403. ;   4547  3            INI_CHK_TYPE = CHK_1CHAR
  6404. ;   4548  3            ELSE
  6405. ;   4549  3            INI_CHK_TYPE = .REQ_CHK_TYPE
  6406. ;   4550  3    
  6407. ;   4551  3        END
  6408. ;   4552  2        ELSE
  6409. ;   4553  2        INI_CHK_TYPE = CHK_1CHAR;        ! Only single character checksum if not specified
  6410. ;   4554  2    
  6411. ;   4555  2    !
  6412. ;   4556  2    ! Parse the repeat character
  6413. ;   4557  2    !
  6414. ;   4558  3        REPT_CHR = (IF .REC_LENGTH GTR P_SI_REPEAT THEN CH$RCHAR (CH$PTR (REC_MSG,
  6415. ;   4559  2            .RECV_PKT_MSG + P_SI_REPEAT, CHR_SIZE)) ELSE %C' ');   ! [108]
  6416. ;   4560  2    !                                       ! [108]
  6417. ;   4561  2    ! Parse the capas field, if present and if we enabled extended length  ! [108]
  6418. ;   4562  2    !                                       ! [108]
  6419. ;   4563  2                                           ! [108]
  6420. ;   4564  3        IF (.REC_LENGTH GTR P_SI_CAPAS) AND (ABS(.SND_PKT_SIZE) GTR 94)    ! [108]
  6421. ;   4565  2        THEN                                   ! [108]
  6422. ;   4566  3        BEGIN                                   ! [108]
  6423. ;   4567  3                                           ! [108]
  6424. ;   4568  3        LOCAL                                   ! [108]
  6425. ;   4569  3            CAPAS_OFFSET;                           ! [108]
  6426. ;   4570  3                                           ! [108]
  6427. ;   4571  3        CAPAS_OFFSET = .RECV_PKT_MSG + P_SI_CAPAS;               ! [108]
  6428. ;   4572  3    
  6429. ;   4573  3        IF (UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .CAPAS_OFFSET, CHR_SIZE))) AND 2) NEQ 0
  6430. ;   4574  3        THEN                                   ! [108]
  6431. ;   4575  4            BEGIN                               ! [108]
  6432. ;   4576  4                                           ! [108]
  6433. ;   4577  4            SEND_PKT_SIZE = 500;                       ! [108]
  6434. ;   4578  4                                           ! [108]
  6435. ;   4579  4            WHILE (.REC_LENGTH GTR .CAPAS_OFFSET-.RECV_PKT_MSG) AND    ! [108]
  6436. ; P 4580  6              ((UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, .CAPAS_OFFSET,  ! [108]
  6437. ;   4581  4                            CHR_SIZE))) AND 1) EQL 1) DO   ! [108]
  6438. ;   4582  5            BEGIN                               ! [108]
  6439. ;   4583  5            CAPAS_OFFSET = .CAPAS_OFFSET + 1;               ! [108]
  6440. ;   4584  4            END;                               ! [108]
  6441. ;   4585  4            IF .REC_LENGTH GTR .CAPAS_OFFSET-.RECV_PKT_MSG+3           ! [108]
  6442. ;   4586  4            THEN                               ! [108]
  6443. ; P 4587  4            SEND_PKT_SIZE = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG,     ! [108]
  6444. ;   4588  4                        .CAPAS_OFFSET+2, CHR_SIZE))) * 95 +
  6445. ; P 4589  4                    UNCHAR (CH$RCHAR (CH$PTR (REC_MSG,     ! [108]
  6446. ;   4590  4                        .CAPAS_OFFSET+3, CHR_SIZE)));  ! [108]
  6447. ;   4591  4            IF .SEND_PKT_SIZE GTR MAX_MSG - 2                   ! [108]
  6448. ;   4592  4            THEN                               ! [108]
  6449. ;   4593  4            SEND_PKT_SIZE = MAX_MSG - 2;                   ! [108]
  6450. ;   4594  4            IF .SEND_PKT_SIZE GTR ABS(.SND_PKT_SIZE)               ! [108]
  6451. ;   4595  4            THEN                               ! [108]
  6452. ;   4596  4            SEND_PKT_SIZE = ABS(.SND_PKT_SIZE);               ! [108]
  6453. ;   4597  3            END;                               ! [108]
  6454. ;   4598  2        END;                                   ! [108]
  6455. ;   4599  2    !
  6456. ;   4600  2    ! Check for a valid quoting character.  If it is not valid, then we have
  6457. ;   4601  2    ! a protocol error
  6458. ;   4602  2    !
  6459. ;   4603  2    
  6460. ;   4604  4        IF NOT ((.SEND_QUOTE_CHR GEQ %O'41' AND .SEND_QUOTE_CHR LEQ %O'76') OR (.SEND_QUOTE_CHR GEQ %O
  6461. ;   4605  3        '140' AND .SEND_QUOTE_CHR LEQ %O'176'))
  6462. ;   4606  2        THEN
  6463. ;   4607  3        BEGIN
  6464. ;   4608  3        KRM_ERROR (KER_PROTOERR);
  6465. ;   4609  3        RETURN KER_PROTOERR;
  6466. ;   4610  2        END;
  6467. ;   4611  2    
  6468. ;   4612  2    !
  6469. ;   4613  2    ! Check for a valid 8 bit quoting and set the 8 bit quoting flag as needed
  6470. ;   4614  2    !
  6471. ;   4615  2    
  6472. ;   4616  5        IF ( NOT ((.SEND_8QUOTE_CHR GEQ %O'041' AND .SEND_8QUOTE_CHR LEQ %O'076') OR (.SEND_8QUOTE_CHR
  6473. ;   4617  5        GEQ %O'140' AND .SEND_8QUOTE_CHR LEQ %O'176') OR (.SEND_8QUOTE_CHR EQL %C'N') OR (
  6474. ;   4618  2        .SEND_8QUOTE_CHR EQL %C'Y'))) OR .SEND_8QUOTE_CHR EQL .SEND_QUOTE_CHR OR .SEND_8QUOTE_CHR
  6475. ;   4619  2        EQL .RCV_QUOTE_CHR
  6476. ;   4620  2        THEN
  6477. ;   4621  3        BEGIN
  6478. ;   4622  3        KRM_ERROR (KER_PROTOERR);
  6479. ;   4623  3        RETURN KER_PROTOERR;
  6480. ;   4624  2        END;
  6481. ;   4625  2    
  6482. ;   4626  2        IF .SEND_8QUOTE_CHR EQL %C'Y' THEN SEND_8QUOTE_CHR = .RECV_8QUOTE_CHR;
  6483. ;   4627  2    
  6484. ;   4628  2        IF .SEND_8QUOTE_CHR NEQ %C'N' AND .SEND_8QUOTE_CHR NEQ %C'Y'
  6485. ;   4629  2        THEN
  6486. ;   4630  2        FLAG_8QUOTE = TRUE
  6487. ;   4631  2        ELSE
  6488. ;   4632  2        FLAG_8QUOTE = FALSE;
  6489. ;   4633  2    
  6490. ;   4634  2    !
  6491. ;   4635  2    ! Check the repeat character and set flags
  6492. ;   4636  2    !
  6493. ;   4637  2    
  6494. ;   4638  5        IF ( NOT ((.REPT_CHR GEQ %O'41' AND .REPT_CHR LEQ %O'76') OR (.REPT_CHR GEQ %O'140' AND
  6495. ;   4639  3        .REPT_CHR LEQ %O'176')) OR .REPT_CHR EQL .SEND_QUOTE_CHR OR .REPT_CHR EQL .SEND_8QUOTE_CHR
  6496. ;   4640  2        OR .REPT_CHR EQL .RCV_QUOTE_CHR) AND .REPT_CHR NEQ %C' '
  6497. ;   4641  2        THEN
  6498. ;   4642  3        BEGIN
  6499. ;   4643  3        KRM_ERROR (KER_PROTOERR);
  6500. ;   4644  3        RETURN KER_PROTOERR;
  6501. ;   4645  2        END;
  6502. ;   4646  2    
  6503. ;   4647  2        IF .REPT_CHR NEQ %C' ' THEN FLAG_REPEAT = TRUE ELSE FLAG_REPEAT = FALSE;
  6504. ;   4648  2    
  6505. ;   4649  2        RETURN KER_NORMAL;
  6506. ;   4650  1        END;                    ! End of PRS_SEND_INIT
  6507.  
  6508.  
  6509.  
  6510.  
  6511.  
  6512. ;PRS_SEND_INIT
  6513. U.21:    .WORD   ^M<R2,R3,R4,R5,R6>         ;Save R2,R3,R4,R5,R6               4373                    007C   00000
  6514.     MOVAB   G^RCV_QUOTE_CHR, R6         ;RCV_QUOTE_CHR, R6                                 56 00000000G  00  9E   00002
  6515.     MOVAB   G^U.39, R5             ;U.39, R5                                     55 00000000'  00  9E   00009
  6516.     MOVL    G^SND_PKT_SIZE, R4         ;SND_PKT_SIZE, R4               4423            54 00000000G  00  D0   00010
  6517.     BLSS    2$                 ;2$                                               14  19   00017
  6518.     CMPL    R4, #94                 ;R4, #94                   4424 0000005E   8F         54  D1   00019
  6519.     BLEQ    1$                 ;1$                                               06  15   00020
  6520.     MOVZBL  #94, R0                 ;#94, R0                                     50    5E   8F  9A   00022
  6521.     BRB     4$                 ;4$                                               1F  11   00026
  6522. 1$:    MOVL    R4, R0                 ;R4, R0                                     50         54  D0   00028
  6523.     BRB     4$                 ;4$                                               1A  11   0002B
  6524. 2$:    TSTL    72(R5)                 ;REC_LENGTH                   4427             48   A5  D5   0002D
  6525.     BLEQ    3$                 ;3$                                               0D  15   00030
  6526.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4430            50         65  D0   00032
  6527.     MOVZBL  80(R5)[R0], R0             ;REC_MSG[R0], R0                                 50    50 A540  9A   00035
  6528.     SUBL2   #32, R0                 ;#32, R0                                     50         20  C2   0003A
  6529.     BRB     4$                 ;4$                                               08  11   0003D
  6530. 3$:    MOVL    R4, R0                 ;R4, R0                   4432            50         54  D0   0003F
  6531.     BGEQ    4$                 ;4$                                               03  18   00042
  6532.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   00044
  6533. 4$:    MOVL    R0, 4(R5)             ;R0, SEND_PKT_SIZE               4423       04   A5         50  D0   00047
  6534.     MOVL    G^SND_TIMEOUT, R0         ;SND_TIMEOUT, R0               4439            50 00000000G  00  D0   0004B
  6535.     BGEQ    6$                 ;6$                                               1A  18   00052
  6536.     CMPL    72(R5), #1             ;REC_LENGTH, #1               4442            01    48   A5  D1   00054
  6537.     BLEQ    5$                 ;5$                                               0D  15   00058
  6538.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4445            50         65  D0   0005A
  6539.     MOVZBL  81(R5)[R0], R0             ;REC_MSG+1[R0], R0                                 50    51 A540  9A   0005D
  6540.     SUBL2   #32, R0                 ;#32, R0                                     50         20  C2   00062
  6541.     BRB     6$                 ;6$                                               07  11   00065
  6542. 5$:    TSTL    R0                 ;R0                       4447                  50  D5   00067
  6543.     BGEQ    6$                 ;6$                                               03  18   00069
  6544.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   0006B
  6545. 6$:    MOVL    R0, G^SEND_TIMEOUT         ;R0, SEND_TIMEOUT               4439 00000000G  00         50  D0   0006E
  6546.     MOVL    G^SND_NPAD, R0             ;SND_NPAD, R0                   4454            50 00000000G  00  D0   00075
  6547.     BGEQ    8$                 ;8$                                               1A  18   0007C
  6548.     CMPL    72(R5), #2             ;REC_LENGTH, #2               4457            02    48   A5  D1   0007E
  6549.     BLEQ    7$                 ;7$                                               0D  15   00082
  6550.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4460            50         65  D0   00084
  6551.     MOVZBL  82(R5)[R0], R0             ;REC_MSG+2[R0], R0                                 50    52 A540  9A   00087
  6552.     SUBL2   #32, R0                 ;#32, R0                                     50         20  C2   0008C
  6553.     BRB     8$                 ;8$                                               07  11   0008F
  6554. 7$:    TSTL    R0                 ;R0                       4462                  50  D5   00091
  6555.     BGEQ    8$                 ;8$                                               03  18   00093
  6556.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   00095
  6557. 8$:    MOVL    R0, 8(R5)             ;R0, SEND_NPAD                   4454       08   A5         50  D0   00098
  6558.     MOVL    G^SND_PADCHAR, R0         ;SND_PADCHAR, R0               4469            50 00000000G  00  D0   0009C
  6559.     BGEQ    10$                 ;10$                                               1E  18   000A3
  6560.     CMPL    72(R5), #3             ;REC_LENGTH, #3               4472            03    48   A5  D1   000A5
  6561.     BLEQ    9$                 ;9$                                               11  15   000A9
  6562.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4475            50         65  D0   000AB
  6563.     MOVZBL  83(R5)[R0], R0             ;REC_MSG+3[R0], R0                                 50    53 A540  9A   000AE
  6564.     XORL2   #64, R0                 ;#64, R0                                     50 00000040   8F  CC   000B3
  6565.     BRB     10$                 ;10$                                               07  11   000BA
  6566. 9$:    TSTL    R0                 ;R0                       4477                  50  D5   000BC
  6567.     BGEQ    10$                 ;10$                                               03  18   000BE
  6568.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   000C0
  6569. 10$:    MOVL    R0, 12(R5)             ;R0, SEND_PADCHAR               4469       0C   A5         50  D0   000C3
  6570.     MOVL    G^SND_EOL, R0             ;SND_EOL, R0                   4484            50 00000000G  00  D0   000C7
  6571.     BGEQ    12$                 ;12$                                               1A  18   000CE
  6572.     CMPL    72(R5), #4             ;REC_LENGTH, #4               4487            04    48   A5  D1   000D0
  6573.     BLEQ    11$                 ;11$                                               0D  15   000D4
  6574.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4490            50         65  D0   000D6
  6575.     MOVZBL  84(R5)[R0], R0             ;REC_MSG+4[R0], R0                                 50    54 A540  9A   000D9
  6576.     SUBL2   #32, R0                 ;#32, R0                                     50         20  C2   000DE
  6577.     BRB     12$                 ;12$                                               07  11   000E1
  6578. 11$:    TSTL    R0                 ;R0                       4492                  50  D5   000E3
  6579.     BGEQ    12$                 ;12$                                               03  18   000E5
  6580.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   000E7
  6581. 12$:    MOVL    R0, 16(R5)             ;R0, SEND_EOL                   4484       10   A5         50  D0   000EA
  6582.     MOVL    G^SND_QUOTE_CHR, R0         ;SND_QUOTE_CHR, R0               4499            50 00000000G  00  D0   000EE
  6583.     BGEQ    14$                 ;14$                                               17  18   000F5
  6584.     CMPL    72(R5), #5             ;REC_LENGTH, #5               4502            05    48   A5  D1   000F7
  6585.     BLEQ    13$                 ;13$                                               0A  15   000FB
  6586.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4504            50         65  D0   000FD
  6587.     MOVZBL  85(R5)[R0], R0             ;REC_MSG+5[R0], R0               4505            50    55 A540  9A   00100
  6588.     BRB     14$                 ;14$                                               07  11   00105
  6589. 13$:    TSTL    R0                 ;R0                       4507                  50  D5   00107
  6590.     BGEQ    14$                 ;14$                                               03  18   00109
  6591.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   0010B
  6592. 14$:    MOVL    R0, 20(R5)             ;R0, SEND_QUOTE_CHR               4499       14   A5         50  D0   0010E
  6593.     MOVL    72(R5), R3             ;REC_LENGTH, R3               4517            53    48   A5  D0   00112
  6594.     CMPL    R3, #6                 ;R3, #6                                     06         53  D1   00116
  6595.     BLEQ    15$                 ;15$                                               0A  15   00119
  6596.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4518            50         65  D0   0011B
  6597.     MOVZBL  86(R5)[R0], R0             ;REC_MSG+6[R0], R0                                 50    56 A540  9A   0011E
  6598.     BRB     16$                 ;16$                                               04  11   00123
  6599. 15$:    MOVZBL  #78, R0                 ;#78, R0                                     50    4E   8F  9A   00125
  6600. 16$:    MOVL    R0, 24(R5)             ;R0, SEND_8QUOTE_CHR               4517       18   A5         50  D0   00129
  6601.     CMPL    R3, #7                 ;R3, #7                   4524            07         53  D1   0012D
  6602.     BLEQ    19$                 ;19$                                               2D  15   00130
  6603.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4532            50         65  D0   00132
  6604.     MOVZBL  87(R5)[R0], R0             ;REC_MSG+7[R0], REQ_CHK_TYPE                             50    57 A540  9A   00135
  6605.     CMPL    76(R5), #89             ;REC_TYPE, #89                   4534 00000059   8F    4C   A5  D1   0013A
  6606.     BEQL    17$                 ;17$                                               0C  13   00142
  6607.     CMPL    R0, #49                 ;REQ_CHK_TYPE, #49               4537            31         50  D1   00144
  6608.     BLSS    19$                 ;19$                                               16  19   00147
  6609.     CMPL    R0, #51                 ;REQ_CHK_TYPE, #51                                 33         50  D1   00149
  6610.     BGTR    19$                 ;19$                                               11  14   0014C
  6611.     BRB     18$                 ;18$                       4539                  09  11   0014E
  6612. 17$:    CMPL    R0, G^CHKTYPE             ;REQ_CHK_TYPE, CHKTYPE               4545 00000000G  00         50  D1   00150
  6613.     BNEQ    19$                 ;19$                                               06  12   00157
  6614. 18$:    MOVL    R0, 32(R5)             ;REQ_CHK_TYPE, INI_CHK_TYPE           4549       20   A5         50  D0   00159
  6615.     BRB     20$                 ;20$                                               04  11   0015D
  6616. 19$:    MOVL    #49, 32(R5)             ;#49, INI_CHK_TYPE               4553       20   A5         31  D0   0015F
  6617. 20$:    CMPL    R3, #8                 ;R3, #8                   4558            08         53  D1   00163
  6618.     BLEQ    21$                 ;21$                                               0A  15   00166
  6619.     MOVL    (R5), R0             ;RECV_PKT_MSG, R0               4559            50         65  D0   00168
  6620.     MOVZBL  88(R5)[R0], R0             ;REC_MSG+8[R0], R0                                 50    58 A540  9A   0016B
  6621.     BRB     22$                 ;22$                                               03  11   00170
  6622. 21$:    MOVL    #32, R0                 ;#32, R0                                     50         20  D0   00172
  6623. 22$:    MOVL    R0, -4(R5)             ;R0, REPT_CHR                   4558       FC   A5         50  D0   00175
  6624.     CMPL    R3, #9                 ;R3, #9                   4564            09         53  D1   00179
  6625.     BLEQ    24$                 ;24$                                               0F  15   0017C
  6626.     MOVL    R4, R0                 ;R4, R0                                     50         54  D0   0017E
  6627.     BGEQ    23$                 ;23$                                               03  18   00181
  6628.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   00183
  6629. 23$:    CMPL    R0, #94                 ;R0, #94                          0000005E   8F         50  D1   00186
  6630. 24$:    BLEQ    30$                 ;30$                                               79  15   0018D
  6631.     MOVL    (R5), R2             ;RECV_PKT_MSG, R2               4571            52         65  D0   0018F
  6632.     MOVAB   9(R2), R0             ;9(R2), CAPAS_OFFSET                                 50    09   A2  9E   00192
  6633.     MOVZBL  80(R5)[R0], R1             ;REC_MSG[CAPAS_OFFSET], R1           4573            51    50 A540  9A   00196
  6634.     SUBL2   #32, R1                 ;#32, R1                                     51         20  C2   0019B
  6635.     BBC     #1, R1, 30$             ;#1, R1, 30$                                     51         01  E1   0019E
  6636.                          ;                                         66       001A1
  6637.     MOVZWL  #500, 4(R5)             ;#500, SEND_PKT_SIZE               4577       04   A5     01F4   8F  3C   001A2
  6638. 25$:    SUBL3   R2, R0, R1             ;R2, CAPAS_OFFSET, R1               4579            50         52  C3   001A8
  6639.                          ;                                         51       001AB
  6640.     CMPL    R3, R1                 ;R3, R1                                     51         53  D1   001AC
  6641.     BLEQ    26$                 ;26$                                               0F  15   001AF
  6642.     MOVZBL  80(R5)[R0], R1             ;REC_MSG[CAPAS_OFFSET], R1           4581            51    50 A540  9A   001B1
  6643.     SUBL2   #32, R1                 ;#32, R1                                     51         20  C2   001B6
  6644.     BLBC    R1, 26$                 ;R1, 26$                                     04         51  E9   001B9
  6645.     INCL    R0                 ;CAPAS_OFFSET                   4583                  50  D6   001BC
  6646.     BRB     25$                 ;25$                                               E8  11   001BE
  6647. 26$:    SUBL3   R2, R0, R1             ;R2, CAPAS_OFFSET, R1               4585            50         52  C3   001C0
  6648.                          ;                                         51       001C3
  6649.     ADDL2   #3, R1                 ;#3, R1                                     51         03  C0   001C4
  6650.     CMPL    R3, R1                 ;R3, R1                                     51         53  D1   001C7
  6651.     BLEQ    27$                 ;27$                                               1A  15   001CA
  6652.     MOVZBL  82(R5)[R0], R1             ;REC_MSG+2[CAPAS_OFFSET], R1           4588            51    52 A540  9A   001CC
  6653.     MULL2   #95, R1                 ;#95, R1                                     51 0000005F   8F  C4   001D1
  6654.     MOVZBL  83(R5)[R0], R2             ;REC_MSG+3[CAPAS_OFFSET], R2           4590            52    53 A540  9A   001D8
  6655.     ADDL2   R2, R1                 ;R2, R1                                     51         52  C0   001DD
  6656.     MOVAB   -3072(R1), 4(R5)         ;-3072(R1), SEND_PKT_SIZE                        04   A5     F400   C1  9E   001E0
  6657. 27$:    CMPL    4(R5), #1000             ;SEND_PKT_SIZE, #1000               4591 000003E8   8F    04   A5  D1   001E6
  6658.     BLEQ    28$                 ;28$                                               06  15   001EE
  6659.     MOVZWL  #1000, 4(R5)             ;#1000, SEND_PKT_SIZE               4593       04   A5     03E8   8F  3C   001F0
  6660. 28$:    MOVL    R4, R0                 ;R4, R0                   4594            50         54  D0   001F6
  6661.     BGEQ    29$                 ;29$                                               03  18   001F9
  6662.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   001FB
  6663. 29$:    CMPL    4(R5), R0             ;SEND_PKT_SIZE, R0                                 50    04   A5  D1   001FE
  6664.     BLEQ    30$                 ;30$                                               04  15   00202
  6665.     MOVL    R0, 4(R5)             ;R0, SEND_PKT_SIZE               4596       04   A5         50  D0   00204
  6666. 30$:    MOVL    20(R5), R0             ;SEND_QUOTE_CHR, R0               4604            50    14   A5  D0   00208
  6667.     CMPL    R0, #33                 ;R0, #33                                     21         50  D1   0020C
  6668.     BLSS    31$                 ;31$                                               05  19   0020F
  6669.     CMPL    R0, #62                 ;R0, #62                                     3E         50  D1   00211
  6670.     BLEQ    34$                 ;34$                                               15  15   00214
  6671. 31$:    CMPL    R0, #96                 ;R0, #96                   4605 00000060   8F         50  D1   00216
  6672.     BGEQ    33$                 ;33$                                               03  18   0021D
  6673. 32$:    BRW     44$                 ;44$                                             00A9  31   0021F
  6674. 33$:    CMPL    R0, #126             ;R0, #126                          0000007E   8F         50  D1   00222
  6675.     BGTR    32$                 ;32$                                               F4  14   00229
  6676. 34$:    MOVL    24(R5), R0             ;SEND_8QUOTE_CHR, R0               4616            50    18   A5  D0   0022B
  6677.     CMPL    R0, #33                 ;R0, #33                                     21         50  D1   0022F
  6678.     BLSS    35$                 ;35$                                               05  19   00232
  6679.     CMPL    R0, #62                 ;R0, #62                                     3E         50  D1   00234
  6680.     BLEQ    37$                 ;37$                                               24  15   00237
  6681. 35$:    CMPL    R0, #96                 ;R0, #96                   4617 00000060   8F         50  D1   00239
  6682.     BLSS    36$                 ;36$                                               09  19   00240
  6683.     CMPL    R0, #126             ;R0, #126                          0000007E   8F         50  D1   00242
  6684.     BLEQ    37$                 ;37$                                               12  15   00249
  6685. 36$:    CMPL    R0, #78                 ;R0, #78                          0000004E   8F         50  D1   0024B
  6686.     BEQL    37$                 ;37$                                               09  13   00252
  6687.     CMPL    R0, #89                 ;R0, #89                   4618 00000059   8F         50  D1   00254
  6688.     BNEQ    44$                 ;44$                                               6E  12   0025B
  6689. 37$:    CMPL    R0, 20(R5)             ;R0, SEND_QUOTE_CHR                            14   A5         50  D1   0025D
  6690.     BEQL    44$                 ;44$                                               68  13   00261
  6691.     CMPL    R0, (R6)             ;R0, RCV_QUOTE_CHR               4619            66         50  D1   00263
  6692.     BEQL    44$                 ;44$                                               63  13   00266
  6693.     CMPL    24(R5), #89             ;SEND_8QUOTE_CHR, #89               4626 00000059   8F    18   A5  D1   00268
  6694.     BNEQ    38$                 ;38$                                               05  12   00270
  6695.     MOVL    -8(R5), 24(R5)             ;RECV_8QUOTE_CHR, SEND_8QUOTE_CHR                  18   A5    F8   A5  D0   00272
  6696. 38$:    MOVL    24(R5), R1             ;SEND_8QUOTE_CHR, R1               4628            51    18   A5  D0   00277
  6697.     CMPL    R1, #78                 ;R1, #78                          0000004E   8F         51  D1   0027B
  6698.     BEQL    39$                 ;39$                                               0F  13   00282
  6699.     CMPL    R1, #89                 ;R1, #89                          00000059   8F         51  D1   00284
  6700.     BEQL    39$                 ;39$                                               06  13   0028B
  6701.     MOVL    #1, 40(R5)             ;#1, FLAG_8QUOTE               4630       28   A5         01  D0   0028D
  6702.     BRB     40$                 ;40$                                               03  11   00291
  6703. 39$:    CLRL    40(R5)                 ;FLAG_8QUOTE                   4632             28   A5  D4   00293
  6704. 40$:    MOVL    -4(R5), R0             ;REPT_CHR, R0                   4638            50    FC   A5  D0   00296
  6705.     CMPL    R0, #33                 ;R0, #33                                     21         50  D1   0029A
  6706.     BLSS    41$                 ;41$                                               05  19   0029D
  6707.     CMPL    R0, #62                 ;R0, #62                                     3E         50  D1   0029F
  6708.     BLEQ    42$                 ;42$                                               12  15   002A2
  6709. 41$:    CMPL    R0, #96                 ;R0, #96                          00000060   8F         50  D1   002A4
  6710.     BLSS    43$                 ;43$                                               19  19   002AB
  6711.     CMPL    R0, #126             ;R0, #126                   4639 0000007E   8F         50  D1   002AD
  6712.     BGTR    43$                 ;43$                                               10  14   002B4
  6713. 42$:    CMPL    R0, 20(R5)             ;R0, SEND_QUOTE_CHR                            14   A5         50  D1   002B6
  6714.     BEQL    43$                 ;43$                                               0A  13   002BA
  6715.     CMPL    R0, R1                 ;R0, R1                                     51         50  D1   002BC
  6716.     BEQL    43$                 ;43$                                               05  13   002BF
  6717.     CMPL    R0, (R6)             ;R0, RCV_QUOTE_CHR               4640            66         50  D1   002C1
  6718.     BNEQ    45$                 ;45$                                               1A  12   002C4
  6719. 43$:    CMPL    R0, #32                 ;R0, #32                                     20         50  D1   002C6
  6720.     BEQL    45$                 ;45$                                               15  13   002C9
  6721. 44$:    PUSHL   #134316226             ;#134316226                   4643           080180C2   8F  DD   002CB
  6722.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   002D1
  6723.     MOVL    #134316226, R0             ;#134316226, R0               4644            50 080180C2   8F  D0   002D8
  6724.     RET                      ;                                               04   002DF
  6725. 45$:    CMPL    -4(R5), #32             ;REPT_CHR, #32                   4647            20    FC   A5  D1   002E0
  6726.     BEQL    46$                 ;46$                                               06  13   002E4
  6727.     MOVL    #1, 44(R5)             ;#1, FLAG_REPEAT                            2C   A5         01  D0   002E6
  6728.     BRB     47$                 ;47$                                               03  11   002EA
  6729. 46$:    CLRL    44(R5)                 ;FLAG_REPEAT                                      2C   A5  D4   002EC
  6730. 47$:    MOVL    #134316043, R0             ;#134316043, R0               4649            50 0801800B   8F  D0   002EF
  6731.     RET                      ;                                               04   002F6
  6732.  
  6733. ; Routine Size:  759 bytes,    Routine Base:  $CODE$ + 1824
  6734.  
  6735.  
  6736. ;   4651  1     %SBTTL 'SET_SEND_INIT'
  6737. ;   4652  1    ROUTINE SET_SEND_INIT : NOVALUE =
  6738. ;   4653  1    
  6739. ;   4654  1    !++
  6740. ;   4655  1    ! FUNCTIONAL DESCRIPTION:
  6741. ;   4656  1    !
  6742. ;   4657  1    !    This routine will initialize the various parameters for the
  6743. ;   4658  1    !    MSG_SND_INIT message.
  6744. ;   4659  1    !
  6745. ;   4660  1    ! CALLING SEQUENCE:
  6746. ;   4661  1    !
  6747. ;   4662  1    !    SET_SEND_INIT();
  6748. ;   4663  1    !
  6749. ;   4664  1    ! INPUT PARAMETERS:
  6750. ;   4665  1    !
  6751. ;   4666  1    !    None.
  6752. ;   4667  1    !
  6753. ;   4668  1    ! IMPLICIT INPUTS:
  6754. ;   4669  1    !
  6755. ;   4670  1    !    None.
  6756. ;   4671  1    !
  6757. ;   4672  1    ! OUTPUT PARAMETERS:
  6758. ;   4673  1    !
  6759. ;   4674  1    !    None.
  6760. ;   4675  1    !
  6761. ;   4676  1    ! IMPLICIT OUTPUTS:
  6762. ;   4677  1    !
  6763. ;   4678  1    !    SND_MSG parameters set up.
  6764. ;   4679  1    !
  6765. ;   4680  1    ! COMPLETION CODES:
  6766. ;   4681  1    !
  6767. ;   4682  1    !    None.
  6768. ;   4683  1    !
  6769. ;   4684  1    ! SIDE EFFECTS:
  6770. ;   4685  1    !
  6771. ;   4686  1    !    None.
  6772. ;   4687  1    !
  6773. ;   4688  1    !--
  6774. ;   4689  1    
  6775. ;   4690  2        BEGIN
  6776. ;   4691  2        CH$WCHAR (CHAR ((IF .RCV_PKT_SIZE LSS 94 THEN .RCV_PKT_SIZE ELSE 94)),
  6777. ;   4692  2            CH$PTR (SND_MSG, PKT_MSG + P_SI_BUFSIZ, CHR_SIZE)); ! [108]
  6778. ;   4693  2        CH$WCHAR (CHAR (.RCV_TIMEOUT), CH$PTR (SND_MSG, PKT_MSG + P_SI_TIMOUT,
  6779. ;   4694  2     CHR_SIZE));
  6780. ;   4695  2        CH$WCHAR (CHAR (.RCV_NPAD), CH$PTR (SND_MSG, PKT_MSG + P_SI_NPAD,
  6781. ;   4696  2     CHR_SIZE));
  6782. ;   4697  2        CH$WCHAR (CTL (.RCV_PADCHAR), CH$PTR (SND_MSG, PKT_MSG + P_SI_PAD,
  6783. ;   4698  2     CHR_SIZE));
  6784. ;   4699  2        CH$WCHAR (CHAR (.RCV_EOL), CH$PTR (SND_MSG, PKT_MSG + P_SI_EOL, CHR_SIZE));
  6785. ;   4700  2        CH$WCHAR (.RCV_QUOTE_CHR, CH$PTR (SND_MSG, PKT_MSG + P_SI_QUOTE, CHR_SIZE));
  6786. ;   4701  2        CH$WCHAR (.SEND_8QUOTE_CHR, CH$PTR (SND_MSG, PKT_MSG + P_SI_8QUOTE,
  6787. ;   4702  2     CHR_SIZE));
  6788. ;   4703  2        CH$WCHAR (.INI_CHK_TYPE, CH$PTR (SND_MSG, PKT_MSG + P_SI_CHKTYPE,
  6789. ;   4704  2     CHR_SIZE));
  6790. ;   4705  2        CH$WCHAR (.REPT_CHR, CH$PTR (SND_MSG, PKT_MSG + P_SI_REPEAT, CHR_SIZE));
  6791. ;   4706  2        SEND_INIT_SIZE = P_SI_LENGTH;                       ! [108]
  6792. ;   4707  2        IF .RCV_PKT_SIZE GTR 94                           ! [108]
  6793. ;   4708  2        THEN                                   ! [108]
  6794. ;   4709  3        BEGIN                                   ! [108]
  6795. ;   4710  3        CH$WCHAR (CHAR (EXTLEN_CAPAS), CH$PTR (SND_MSG, PKT_MSG + P_SI_CAPAS,
  6796. ;   4711  3     CHR_SIZE));
  6797. ;   4712  3        CH$WCHAR (CHAR (0), CH$PTR (SND_MSG, PKT_MSG + P_SI_WINDO, CHR_SIZE));
  6798. ;   4713  3        CH$WCHAR (CHAR (.RCV_PKT_SIZE/95), CH$PTR (SND_MSG, PKT_MSG + P_SI_MAXLX1,
  6799. ;   4714  3     CHR_SIZE));
  6800. ;   4715  3        CH$WCHAR (CHAR (.RCV_PKT_SIZE MOD 95), CH$PTR (SND_MSG, PKT_MSG + P_SI_MAXLX2,
  6801. ;   4716  3     CHR_SIZE));
  6802. ;   4717  3                                           ! [108]
  6803. ;   4718  3        SEND_INIT_SIZE = P_SI_XLENGTH;                       ! [108]
  6804. ;   4719  2        END;                                   ! [108]
  6805. ;   4720  2    
  6806. ;   4721  1        END;                    ! End of SET_SEND_INIT
  6807.  
  6808.  
  6809.  
  6810.  
  6811.  
  6812. ;SET_SEND_INIT
  6813. U.20:    .WORD   ^M<R2>                 ;Save R2                   4652                    0004   00000
  6814.     MOVAB   G^U.46, R2             ;U.46, R2                                     52 00000000'  00  9E   00002
  6815.     MOVL    G^RCV_PKT_SIZE, R1         ;RCV_PKT_SIZE, R1               4691            51 00000000G  00  D0   00009
  6816.     CMPL    R1, #94                 ;R1, #94                          0000005E   8F         51  D1   00010
  6817.     BGEQ    1$                 ;1$                                               05  18   00017
  6818.     MOVL    R1, R0                 ;R1, R0                                     50         51  D0   00019
  6819.     BRB     2$                 ;2$                                               04  11   0001C
  6820. 1$:    MOVZBL  #94, R0                 ;#94, R0                                     50    5E   8F  9A   0001E
  6821. 2$:    ADDB3   #32, R0, 1060(R2)         ;#32, R0, SND_MSG+4                                 50         20  81   00022
  6822.                          ;                                      0424   C2       00025
  6823.     ADDB3   #32, G^RCV_TIMEOUT, 1061(R2)     ;#32, RCV_TIMEOUT, SND_MSG+5           4693 00000000G  00         20  81   00028
  6824.                          ;                                      0425   C2       0002F
  6825.     ADDB3   #32, G^RCV_NPAD, 1062(R2)     ;#32, RCV_NPAD, SND_MSG+6           4695 00000000G  00         20  81   00032
  6826.                          ;                                      0426   C2       00039
  6827.     XORB3   #64, G^RCV_PADCHAR, 1063(R2)     ;#64, RCV_PADCHAR, SND_MSG+7           4697 00000000G  00    40   8F  8D   0003C
  6828.                          ;                                      0427   C2       00044
  6829.     ADDB3   #32, G^RCV_EOL, 1064(R2)     ;#32, RCV_EOL, SND_MSG+8           4699 00000000G  00         20  81   00047
  6830.                          ;                                      0428   C2       0004E
  6831.     MOVB    G^RCV_QUOTE_CHR, 1065(R2)     ;RCV_QUOTE_CHR, SND_MSG+9           4700     0429   C2 00000000G  00  90   00051
  6832.     MOVB    -4(R2), 1066(R2)         ;SEND_8QUOTE_CHR, SND_MSG+10           4702     042A   C2    FC   A2  90   0005A
  6833.     MOVB    4(R2), 1067(R2)             ;INI_CHK_TYPE, SND_MSG+11           4704     042B   C2    04   A2  90   00060
  6834.     MOVB    -32(R2), 1068(R2)         ;REPT_CHR, SND_MSG+12               4705     042C   C2    E0   A2  90   00066
  6835.     MOVL    #9, (R2)             ;#9, SEND_INIT_SIZE               4706            62         09  D0   0006C
  6836.     CMPL    R1, #94                 ;R1, #94                   4707 0000005E   8F         51  D1   0006F
  6837.     BLEQ    3$                 ;3$                                               2C  15   00076
  6838.     MOVW    #8226, 1069(R2)             ;#8226, SND_MSG+13               4711     042D   C2     2022   8F  B0   00078
  6839.     DIVL3   #95, R1, R0             ;#95, R1, R0                   4713            51 0000005F   8F  C7   0007F
  6840.                          ;                                         50       00086
  6841.     ADDB3   #32, R0, 1071(R2)         ;#32, R0, SND_MSG+15                                 50         20  81   00087
  6842.                          ;                                      042F   C2       0008A
  6843.     EMUL    #1, R1, #0, -(SP)         ;#1, R1, #0, -(SP)               4715            51         01  7A   0008D
  6844.                          ;                                   7E         00       00090
  6845.     EDIV    #95, (SP)+, R0, R0         ;#95, (SP)+, R0, R0                                 8E 0000005F   8F  7B   00092
  6846.                          ;                                   50         50       00099
  6847.     ADDB3   #32, R0, 1072(R2)         ;#32, R0, SND_MSG+16                                 50         20  81   0009B
  6848.                          ;                                      0430   C2       0009E
  6849.     MOVL    #13, (R2)             ;#13, SEND_INIT_SIZE               4718            62         0D  D0   000A1
  6850. 3$:    RET                      ;                       4721                  04   000A4
  6851.  
  6852. ; Routine Size:  165 bytes,    Routine Base:  $CODE$ + 1B1B
  6853.  
  6854.  
  6855. ;   4722  1     %SBTTL 'SEND_PACKET'
  6856. ;   4723  1    ROUTINE SEND_PACKET (TYPE, LENGTH, MN) =
  6857. ;   4724  1    
  6858. ;   4725  1    !++
  6859. ;   4726  1    ! FUNCTIONAL DESCRIPTION:
  6860. ;   4727  1    !
  6861. ;   4728  1    !    This routine will cause a packet to be sent over the line
  6862. ;   4729  1    !    that has been opened by OPEN_TERMINAL.
  6863. ;   4730  1    !
  6864. ;   4731  1    ! CALLING SEQUENCE:
  6865. ;   4732  1    !
  6866. ;   4733  1    !    SEND_PACKET(Type, Length);
  6867. ;   4734  1    !
  6868. ;   4735  1    ! INPUT PARAMETERS:
  6869. ;   4736  1    !
  6870. ;   4737  1    !    TYPE - Type of packet to send.
  6871. ;   4738  1    !
  6872. ;   4739  1    !    LENGTH - Length of the packet being sent.
  6873. ;   4740  1    ! [108]         Negative length means it's an extended length packet
  6874. ;   4741  1    !
  6875. ;   4742  1    ! IMPLICIT INPUTS:
  6876. ;   4743  1    !
  6877. ;   4744  1    !    None.
  6878. ;   4745  1    !
  6879. ;   4746  1    ! OUTPUT PARAMETERS:
  6880. ;   4747  1    !
  6881. ;   4748  1    !    None.
  6882. ;   4749  1    !
  6883. ;   4750  1    ! IMPLICIT OUTPUTS:
  6884. ;   4751  1    !
  6885. ;   4752  1    !    None.
  6886. ;   4753  1    !
  6887. ;   4754  1    ! COMPLETION CODES:
  6888. ;   4755  1    !
  6889. ;   4756  1    !    None.
  6890. ;   4757  1    !
  6891. ;   4758  1    ! SIDE EFFECTS:
  6892. ;   4759  1    !
  6893. ;   4760  1    !    None.
  6894. ;   4761  1    !
  6895. ;   4762  1    !--
  6896. ;   4763  1    
  6897. ;   4764  2        BEGIN
  6898. ;   4765  2    
  6899. ;   4766  2        LOCAL
  6900. ;   4767  2        FILLER : VECTOR [CH$ALLOCATION (MAX_MSG, CHR_SIZE)],
  6901. ;   4768  2        TOT_MSG_LEN,                ! Length of message including all characters
  6902. ;   4769  2        CHKSUM,                    ! Checksum for the message we calculate
  6903. ;   4770  2        POINTER;                ! Pointer to the information in the message
  6904. ;   4771  2    
  6905. ;   4772  2    !
  6906. ;   4773  2    ! Do any filler processing that the remote KERMIT requires.
  6907. ;   4774  2    !
  6908. ;   4775  2    
  6909. ;   4776  2        IF .SEND_NPAD NEQ 0
  6910. ;   4777  2        THEN
  6911. ;   4778  3        BEGIN
  6912. ;   4779  3        CH$FILL (.SEND_PADCHAR, MAX_MSG, CH$PTR (FILLER, 0, CHR_SIZE));
  6913. ;   4780  3    !
  6914. ;   4781  3    ! Update the send stats
  6915. ;   4782  3    !
  6916. ;   4783  3        SMSG_TOTAL_CHARS = .SMSG_TOTAL_CHARS + .SEND_NPAD;
  6917. ;   4784  3    !
  6918. ;   4785  3    ! Send the fill
  6919. ;   4786  3    !
  6920. ;   4787  3        DO_PARITY (FILLER, .SEND_NPAD + PKT_TOT_OVR_HEAD);
  6921. ;   4788  3        SEND (FILLER, .SEND_NPAD + PKT_TOT_OVR_HEAD);
  6922. ;   4789  2        END;
  6923. ;   4790  2    
  6924. ;   4791  2    !
  6925. ;   4792  2    ! Store the header information into the message.
  6926. ;   4793  2    !
  6927. ;   4794  2        CH$WCHAR (.TYPE, CH$PTR (SND_MSG, PKT_TYPE, CHR_SIZE));
  6928. ;   4795  2        CH$WCHAR (.SND_SOH, CH$PTR (SND_MSG, PKT_MARK, CHR_SIZE));
  6929. ;   4796  2        CH$WCHAR (CHAR (IF .MN LSS 0 THEN 0 ELSE .MN), CH$PTR (SND_MSG, PKT_SEQ,
  6930. ;   4797  2     CHR_SIZE));
  6931. ;   4798  2    
  6932. ;   4799  2        IF .LENGTH LSS 0                               ! [108]
  6933. ;   4800  2        THEN                                   ! [108]
  6934. ;   4801  3        BEGIN                                   ! [108]
  6935. ;   4802  3        TOT_MSG_LEN = PKT_OVR_HEAD + 3 - .LENGTH;               ! [108]
  6936. ;   4803  3        CH$WCHAR (CHAR (0), CH$PTR (SND_MSG, PKT_COUNT, CHR_SIZE));    ! [108]
  6937. ; P 4804  3        CH$WCHAR (CHAR ((.TOT_MSG_LEN - PKT_HCHECK + 1 +           ! [108]
  6938. ;   4805  3                 (.BLK_CHK_TYPE - CHK_1CHAR)) / 95),           ! [108]
  6939. ;   4806  3                CH$PTR (SND_MSG, PKT_COUNTX1, CHR_SIZE));      ! [108]
  6940. ; P 4807  3        CH$WCHAR (CHAR ((.TOT_MSG_LEN - PKT_HCHECK + 1 +           ! [108]
  6941. ;   4808  3                 (.BLK_CHK_TYPE - CHK_1CHAR)) MOD 95),           ! [108]
  6942. ;   4809  3                CH$PTR (SND_MSG, PKT_COUNTX2, CHR_SIZE));      ! [108]
  6943. ;   4810  3    
  6944. ;   4811  3        POINTER = CH$PTR(SND_MSG, PKT_SEQ, CHR_SIZE);               ! [108]
  6945. ;   4812  3        CHKSUM = CHAR (0) + CH$RCHAR_A (POINTER);               ! [108]
  6946. ;   4813  3        CHKSUM = .CHKSUM + CH$RCHAR_A (POINTER);               ! [108]
  6947. ;   4814  3        CHKSUM = .CHKSUM + CH$RCHAR_A (POINTER);               ! [108]
  6948. ;   4815  3        CHKSUM = .CHKSUM + CH$RCHAR_A (POINTER);               ! [108]
  6949. ;   4816  3    
  6950. ;   4817  3        CH$WCHAR (CHAR ((.CHKSUM + ((.CHKSUM AND %O'300')/%O'100')) AND %O'77'),
  6951. ;   4818  3                CH$PTR (SND_MSG, PKT_HCHECK, CHR_SIZE));       ! [108]
  6952. ;   4819  3        END                                   ! [108]
  6953. ;   4820  2        ELSE                                   ! [108]
  6954. ;   4821  3        BEGIN                                   ! [108]
  6955. ;   4822  3        TOT_MSG_LEN = PKT_OVR_HEAD + .LENGTH;                   ! [108]
  6956. ;   4823  3        CH$WCHAR (CHAR (.TOT_MSG_LEN + (.BLK_CHK_TYPE - CHK_1CHAR)),   ! [108]
  6957. ;   4824  3                    CH$PTR (SND_MSG, PKT_COUNT, CHR_SIZE));
  6958. ;   4825  2        END;                                   ! [108]
  6959. ;   4826  2    
  6960. ;   4827  2    !
  6961. ;   4828  2    ! Calculate the block check value
  6962. ;   4829  2    !
  6963. ;   4830  2        POINTER = CH$PTR (SND_MSG, PKT_MARK + 1, CHR_SIZE);
  6964. ;   4831  2        CHKSUM = CALC_BLOCK_CHECK (.POINTER, .TOT_MSG_LEN);               ! [108]
  6965. ;   4832  2    !
  6966. ;   4833  2    ! Store the checksum into the message
  6967. ;   4834  2    !
  6968. ;   4835  2        POINTER = CH$PTR (SND_MSG, .TOT_MSG_LEN + 1, CHR_SIZE);           ! [108]
  6969. ;   4836  2    
  6970. ;   4837  2        CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
  6971. ;   4838  2        SET
  6972. ;   4839  2    
  6973. ;   4840  2        [CHK_1CHAR] :
  6974. ;   4841  2            CH$WCHAR_A (CHAR (.CHKSUM), POINTER);
  6975. ;   4842  2    
  6976. ;   4843  2        [CHK_2CHAR] :
  6977. ;   4844  3            BEGIN
  6978. ;   4845  3            CH$WCHAR_A (CHAR (.CHKSUM<6, 6>), POINTER);
  6979. ;   4846  3            CH$WCHAR_A (CHAR (.CHKSUM<0, 6>), POINTER);
  6980. ;   4847  3            TOT_MSG_LEN = .TOT_MSG_LEN + 1;
  6981. ;   4848  2            END;
  6982. ;   4849  2    
  6983. ;   4850  2        [CHK_CRC] :
  6984. ;   4851  3            BEGIN
  6985. ;   4852  3            CH$WCHAR_A (CHAR (.CHKSUM<12, 4>), POINTER);
  6986. ;   4853  3            CH$WCHAR_A (CHAR (.CHKSUM<6, 6>), POINTER);
  6987. ;   4854  3            CH$WCHAR_A (CHAR (.CHKSUM<0, 6>), POINTER);
  6988. ;   4855  3            TOT_MSG_LEN = .TOT_MSG_LEN + 2;
  6989. ;   4856  2            END;
  6990. ;   4857  2        TES;
  6991. ;   4858  2    
  6992. ;   4859  2    !
  6993. ;   4860  2    ! Store in the end of line character
  6994. ;   4861  2    !
  6995. ;   4862  2        CH$WCHAR_A (.SEND_EOL, POINTER);
  6996. ;   4863  2    !
  6997. ;   4864  2    ! If we are debugging then type out the message we are sending.
  6998. ;   4865  2    !
  6999. ;   4866  2        DBG_SEND (SND_MSG, (.TOT_MSG_LEN + PKT_TOT_OVR_HEAD - PKT_OVR_HEAD));! [108]
  7000. ;   4867  2    !
  7001. ;   4868  2    ! Update the stats for total characters and the data characters
  7002. ;   4869  2    !
  7003. ;   4870  2        SMSG_TOTAL_CHARS = .SMSG_TOTAL_CHARS + .TOT_MSG_LEN + PKT_TOT_OVR_HEAD -
  7004. ;   4871  2     PKT_OVR_HEAD;    ! [108]
  7005. ;   4872  2    ! Make data characters really be that, not just characters in data field
  7006. ;   4873  2    !    SMSG_DATA_CHARS = .SMSG_DATA_CHARS + .LENGTH;
  7007. ;   4874  2    
  7008. ;   4875  2        IF .TYPE EQL MSG_NAK
  7009. ;   4876  2        THEN
  7010. ;   4877  3        BEGIN
  7011. ;   4878  3        SMSG_NAKS = .SMSG_NAKS + 1;
  7012. ;   4879  3        XFR_STATUS (%C'S', %C'N');
  7013. ;   4880  3        END
  7014. ;   4881  2        ELSE
  7015. ;   4882  3        BEGIN
  7016. ;   4883  3        SMSG_COUNT = .SMSG_COUNT + 1;
  7017. ;   4884  3        XFR_STATUS (%C'S', %C'P');
  7018. ;   4885  2        END;
  7019. ;   4886  2    
  7020. ;   4887  2    !
  7021. ;   4888  2    ! Check if we are in IBM mode and need to wait for an XON first
  7022. ;   4889  2    ! We will not wait if this is a packet which might be going out
  7023. ;   4890  2    ! without previous traffic (generic commands, init packets).
  7024. ;   4891  2    
  7025. ;   4892  3        IF (.IBM_CHAR GEQ 0)             ! If handshaking on
  7026. ;   4893  2        THEN
  7027. ;   4894  2        IF NOT IBM_WAIT () THEN RETURN KER_ABORTED;
  7028. ;   4895  2    
  7029. ;   4896  2    !
  7030. ;   4897  2    ! Now call the O/S routine to send the message out to the remote KERMIT
  7031. ;   4898  2    !
  7032. ;   4899  2        DO_PARITY (SND_MSG, .TOT_MSG_LEN + PKT_TOT_OVR_HEAD - PKT_OVR_HEAD); ! [108]
  7033. ;   4900  2        RETURN SEND (SND_MSG, .TOT_MSG_LEN + PKT_TOT_OVR_HEAD - PKT_OVR_HEAD); ! [108]
  7034. ;   4901  1        END;                    ! End of SEND_PACKET
  7035.  
  7036.  
  7037.  
  7038.  
  7039.  
  7040. ;SEND_PACKET
  7041. U.24:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10>  ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10     4723                    07FC   00000
  7042.     MOVAB   G^SEND, R10             ;SEND, R10                                     5A 00000000G  00  9E   00002
  7043.     MOVAB   G^U.22, R9             ;U.22, R9                                     59 00000000V  00  9E   00009
  7044.     MOVAB   G^SMSG_TOTAL_CHARS, R8         ;SMSG_TOTAL_CHARS, R8                                 58 00000000G  00  9E   00010
  7045.     MOVAB   G^U.60, R7             ;U.60, R7                                     57 00000000'  00  9E   00017
  7046.     MOVAB   -1004(SP), SP             ;-1004(SP), SP                                     5E     FC14   CE  9E   0001E
  7047.     MOVL    -1076(R7), R6             ;SEND_NPAD, R6                   4776            56     FBCC   C7  D0   00023
  7048.     BEQL    1$                 ;1$                                               22  13   00028
  7049.     MOVC5   #0, (SP), -1072(R7), #1002, (SP) ;#0, (SP), SEND_PADCHAR, #1002, -     4779            6E         00  2C   0002A
  7050.                          ;FILLER                        03EA   8F     FBD0   C7       0002D
  7051.                          ;                                         6E       00033
  7052.     ADDL2   R6, (R8)             ;R6, SMSG_TOTAL_CHARS               4783            68         56  C0   00034
  7053.     PUSHAB  6(R6)                 ;6(R6)                       4787             06   A6  9F   00037
  7054.     PUSHAB  4(SP)                 ;FILLER                                      04   AE  9F   0003A
  7055.     CALLS   #2, (R9)             ;#2, DO_PARITY                                     69         02  FB   0003D
  7056.     ADDL3   #6, -1076(R7), -(SP)         ;#6, SEND_NPAD, -(SP)               4788     FBCC   C7         06  C1   00040
  7057.                          ;                                         7E       00045
  7058.     PUSHAB  4(SP)                 ;FILLER                                      04   AE  9F   00046
  7059.     CALLS   #2, (R10)             ;#2, SEND                                     6A         02  FB   00049
  7060. 1$:    MOVB    4(AP), 3(R7)             ;TYPE, SND_MSG+3               4794       03   A7    04   AC  90   0004C
  7061.     MOVB    G^SND_SOH, (R7)             ;SND_SOH, SND_MSG               4795            67 00000000G  00  90   00051
  7062.     TSTL    12(AP)                 ;MN                       4796             0C   AC  D5   00058
  7063.     BGEQ    2$                 ;2$                                               04  18   0005B
  7064.     CLRL    R0                 ;R0                                               50  D4   0005D
  7065.     BRB     3$                 ;3$                                               04  11   0005F
  7066. 2$:    MOVL    12(AP), R0             ;MN, R0                                     50    0C   AC  D0   00061
  7067. 3$:    ADDB3   #32, R0, 2(R7)             ;#32, R0, SND_MSG+2                                 50         20  81   00065
  7068.                          ;                                    02   A7       00068
  7069.     SUBL3   #49, -1048(R7), R0         ;#49, BLK_CHK_TYPE, R0               4805     FBE8   C7         31  C3   0006A
  7070.                          ;                                         50       0006F
  7071.     MOVL    8(AP), R2             ;LENGTH, R2                   4799            52    08   AC  D0   00070
  7072.     BGEQ    4$                 ;4$                                               68  18   00074
  7073.     SUBL3   R2, #6, R2             ;R2, #6, TOT_MSG_LEN               4802            06         52  C3   00076
  7074.                          ;                                         52       00079
  7075.     MOVB    #32, 1(R7)             ;#32, SND_MSG+1               4803       01   A7         20  90   0007A
  7076.     MOVAB   -5(R0)[R2], R0             ;-5(R0)[TOT_MSG_LEN], R0           4805            50    FB A042  9E   0007E
  7077.     DIVL3   #95, R0, R1             ;#95, R0, R1                                     50 0000005F   8F  C7   00083
  7078.                          ;                                         51       0008A
  7079.     ADDB3   #32, R1, 4(R7)             ;#32, R1, SND_MSG+4                                 51         20  81   0008B
  7080.                          ;                                    04   A7       0008E
  7081.     EMUL    #1, R0, #0, -(SP)         ;#1, R0, #0, -(SP)               4808            50         01  7A   00090
  7082.                          ;                                   7E         00       00093
  7083.     EDIV    #95, (SP)+, R0, R0         ;#95, (SP)+, R0, R0                                 8E 0000005F   8F  7B   00095
  7084.                          ;                                   50         50       0009C
  7085.     ADDB3   #32, R0, 5(R7)             ;#32, R0, SND_MSG+5                                 50         20  81   0009E
  7086.                          ;                                    05   A7       000A1
  7087.     MOVAB   2(R7), R3             ;SND_MSG+2, POINTER               4811            53    02   A7  9E   000A3
  7088.     MOVZBL  (R3)+, R0             ;(POINTER)+, R0               4812            50         83  9A   000A7
  7089.     MOVAB   32(R0), R1             ;32(R0), CHKSUM                                 51    20   A0  9E   000AA
  7090.     MOVZBL  (R3)+, R0             ;(POINTER)+, R0               4813            50         83  9A   000AE
  7091.     ADDL2   R0, R1                 ;R0, CHKSUM                                     51         50  C0   000B1
  7092.     MOVZBL  (R3)+, R0             ;(POINTER)+, R0               4814            50         83  9A   000B4
  7093.     ADDL2   R0, R1                 ;R0, CHKSUM                                     51         50  C0   000B7
  7094.     MOVZBL  (R3)+, R0             ;(POINTER)+, R0               4815            50         83  9A   000BA
  7095.     ADDL2   R0, R1                 ;R0, CHKSUM                                     51         50  C0   000BD
  7096.     BICL3   #-193, R1, R0             ;#-193, CHKSUM, R0               4817            51 FFFFFF3F   8F  CB   000C0
  7097.                          ;                                         50       000C7
  7098.     DIVL2   #64, R0                 ;#64, R0                                     50 00000040   8F  C6   000C8
  7099.     ADDL2   R1, R0                 ;CHKSUM, R0                                     50         51  C0   000CF
  7100.     EXTZV   #0, #6, R0, R4             ;#0, #6, R0, R4                                 06         00  EF   000D2
  7101.                          ;                                   54         50       000D5
  7102.     ADDB3   #32, R4, 6(R7)             ;#32, R4, SND_MSG+6                                 54         20  81   000D7
  7103.                          ;                                    06   A7       000DA
  7104.     BRB     5$                 ;5$                                               0C  11   000DC
  7105. 4$:    ADDL2   #3, R2                 ;#3, TOT_MSG_LEN               4822            52         03  C0   000DE
  7106.     MOVAB   32(R0)[R2], R1             ;32(R0)[TOT_MSG_LEN], R1           4823            51    20 A042  9E   000E1
  7107.     MOVB    R1, 1(R7)             ;R1, SND_MSG+1                                01   A7         51  90   000E6
  7108. 5$:    MOVAB   1(R7), R3             ;SND_MSG+1, POINTER               4830            53    01   A7  9E   000EA
  7109.     PUSHL   R2                 ;TOT_MSG_LEN                   4831                  52  DD   000EE
  7110.     PUSHL   R3                 ;POINTER                                           53  DD   000F0
  7111.     CALLS   #2, G^U.19             ;#2, U.19                          00000000V  00         02  FB   000F2
  7112.     MOVL    R0, R1                 ;R0, CHKSUM                                     51         50  D0   000F9
  7113.     MOVAB   1(R7)[R2], R3             ;SND_MSG+1[TOT_MSG_LEN], POINTER      4835            53    01 A742  9E   000FC
  7114.     CASEL   -1048(R7), #49, #2         ;BLK_CHK_TYPE, #49, #2               4837            31     FBE8   C7  CF   00101
  7115.                          ;                                         02       00106
  7116. 6$:    .WORD   7$-6$,-                 ;7$-6$,-                                   000C       0006       00107
  7117.         8$-6$,-                 ;8$-6$,-                                   0022       0010B
  7118.         9$-6$                 ;9$-6$
  7119. 7$:    ADDB3   #32, R1, (R3)             ;#32, CHKSUM, (POINTER)           4841            51         20  81   0010D
  7120.                          ;                                         63       00110
  7121.     BRB     10$                 ;10$                                               34  11   00111
  7122. 8$:    EXTZV   #6, #6, R1, R0             ;#6, #6, CHKSUM, R0               4845            06         06  EF   00113
  7123.                          ;                                   50         51       00116
  7124.     ADDB3   #32, R0, (R3)+             ;#32, R0, (POINTER)+                                 50         20  81   00118
  7125.                          ;                                         83       0011B
  7126.     EXTZV   #0, #6, R1, R0             ;#0, #6, CHKSUM, R0               4846            06         00  EF   0011C
  7127.                          ;                                   50         51       0011F
  7128.     ADDB3   #32, R0, (R3)             ;#32, R0, (POINTER)                                 50         20  81   00121
  7129.                          ;                                         63       00124
  7130.     INCL    R2                 ;TOT_MSG_LEN                   4847                  52  D6   00125
  7131.     BRB     10$                 ;10$                                               1E  11   00127
  7132. 9$:    EXTZV   #12, #4, R1, R0             ;#12, #4, CHKSUM, R0               4852            04         0C  EF   00129
  7133.                          ;                                   50         51       0012C
  7134.     ADDB3   #32, R0, (R3)+             ;#32, R0, (POINTER)+                                 50         20  81   0012E
  7135.                          ;                                         83       00131
  7136.     EXTZV   #6, #6, R1, R0             ;#6, #6, CHKSUM, R0               4853            06         06  EF   00132
  7137.                          ;                                   50         51       00135
  7138.     ADDB3   #32, R0, (R3)+             ;#32, R0, (POINTER)+                                 50         20  81   00137
  7139.                          ;                                         83       0013A
  7140.     EXTZV   #0, #6, R1, R0             ;#0, #6, CHKSUM, R0               4854            06         00  EF   0013B
  7141.                          ;                                   50         51       0013E
  7142.     ADDB3   #32, R0, (R3)             ;#32, R0, (POINTER)                                 50         20  81   00140
  7143.                          ;                                         63       00143
  7144.     ADDL2   #2, R2                 ;#2, TOT_MSG_LEN               4855            52         02  C0   00144
  7145. 10$:    INCL    R3                 ;POINTER                   4841                  53  D6   00147
  7146.     MOVB    -1068(R7), (R3)+         ;SEND_EOL, (POINTER)+               4862            83     FBD4   C7  90   00149
  7147.     PUSHAB  3(R2)                 ;3(TOT_MSG_LEN)               4866             03   A2  9F   0014E
  7148.     PUSHL   R7                 ;R7                                               57  DD   00151
  7149.     CALLS   #2, G^U.35             ;#2, U.35                          00000000V  00         02  FB   00153
  7150.     MOVL    (R8), R0             ;SMSG_TOTAL_CHARS, R0               4870            50         68  D0   0015A
  7151.     MOVAB   3(R2)[R0], (R8)             ;3(TOT_MSG_LEN)[R0], -               4871            68    03 A240  9E   0015D
  7152.                          ;SMSG_TOTAL_CHARS
  7153.     CMPL    4(AP), #78             ;TYPE, #78                   4875 0000004E   8F    04   AC  D1   00162
  7154.     BNEQ    11$                 ;11$                                               0C  12   0016A
  7155.     INCL    G^SMSG_NAKS             ;SMSG_NAKS                   4878           00000000G  00  D6   0016C
  7156.     MOVZBL  #78, -(SP)             ;#78, -(SP)                   4879            7E    4E   8F  9A   00172
  7157.     BRB     12$                 ;12$                                               0A  11   00176
  7158. 11$:    INCL    G^SMSG_COUNT             ;SMSG_COUNT                   4883           00000000G  00  D6   00178
  7159.     MOVZBL  #80, -(SP)             ;#80, -(SP)                   4884            7E    50   8F  9A   0017E
  7160. 12$:    MOVZBL  #83, -(SP)             ;#83, -(SP)                                     7E    53   8F  9A   00182
  7161.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   00186
  7162.     TSTL    G^IBM_CHAR             ;IBM_CHAR                   4892           00000000G  00  D5   0018D
  7163.     BLSS    13$                 ;13$                                               12  19   00193
  7164.     CALLS   #0, G^IBM_WAIT             ;#0, IBM_WAIT                   4894 00000000G  00         00  FB   00195
  7165.     BLBS    R0, 13$                 ;R0, 13$                                     08         50  E8   0019C
  7166.     MOVL    #134316258, R0             ;#134316258, R0                                 50 080180E2   8F  D0   0019F
  7167.     RET                      ;                                               04   001A6
  7168. 13$:    PUSHAB  3(R2)                 ;3(TOT_MSG_LEN)               4899             03   A2  9F   001A7
  7169.     PUSHL   R7                 ;R7                                               57  DD   001AA
  7170.     CALLS   #2, (R9)             ;#2, DO_PARITY                                     69         02  FB   001AC
  7171.     PUSHAB  3(R2)                 ;3(TOT_MSG_LEN)               4900             03   A2  9F   001AF
  7172.     PUSHL   R7                 ;R7                                               57  DD   001B2
  7173.     CALLS   #2, (R10)             ;#2, SEND                                     6A         02  FB   001B4
  7174.     RET                      ;                                               04   001B7
  7175.  
  7176. ; Routine Size:  440 bytes,    Routine Base:  $CODE$ + 1BC0
  7177.  
  7178.  
  7179. ;   4902  1     %SBTTL 'REC_MESSAGE - Receive a message'
  7180. ;   4903  1    ROUTINE REC_MESSAGE (CHK_ROUTINE) =
  7181. ;   4904  1    
  7182. ;   4905  1    !++
  7183. ;   4906  1    ! FUNCTIONAL DESCRIPTION:
  7184. ;   4907  1    !
  7185. ;   4908  1    !    This routine will handle the retry processing for the various
  7186. ;   4909  1    !    messages that can be received.
  7187. ;   4910  1    !
  7188. ;   4911  1    ! CALLING SEQUENCE:
  7189. ;   4912  1    !
  7190. ;   4913  1    ! INPUT PARAMETERS:
  7191. ;   4914  1    !
  7192. ;   4915  1    !    None.
  7193. ;   4916  1    !
  7194. ;   4917  1    ! IMPLICIT INPUTS:
  7195. ;   4918  1    !
  7196. ;   4919  1    !    None.
  7197. ;   4920  1    !
  7198. ;   4921  1    ! OUTPUT PARAMETERS:
  7199. ;   4922  1    !
  7200. ;   4923  1    !    None.
  7201. ;   4924  1    !
  7202. ;   4925  1    ! IMPLICIT OUTPUTS:
  7203. ;   4926  1    !
  7204. ;   4927  1    !    None.
  7205. ;   4928  1    !
  7206. ;   4929  1    ! COMPLETION CODES:
  7207. ;   4930  1    !
  7208. ;   4931  1    !    KER_NORMAL - Normal return
  7209. ;   4932  1    !    KER_RETRIES - Too many retries
  7210. ;   4933  1    !    (What ever REC_PACKET returns).
  7211. ;   4934  1    !
  7212. ;   4935  1    ! SIDE EFFECTS:
  7213. ;   4936  1    !
  7214. ;   4937  1    !    None.
  7215. ;   4938  1    !
  7216. ;   4939  1    !--
  7217. ;   4940  1    
  7218. ;   4941  2        BEGIN
  7219. ;   4942  2    
  7220. ;   4943  2        LOCAL
  7221. ;   4944  2        STATUS;                    ! Status returned by various routines
  7222. ;   4945  2    
  7223. ;   4946  2        RETURN
  7224. ;   4947  2    
  7225. ;   4948  2        WHILE TRUE DO
  7226. ;   4949  3            BEGIN
  7227. ;   4950  3    
  7228. ;   4951  3            IF .NUM_RETRIES GTR .PKT_RETRIES
  7229. ;   4952  3            THEN
  7230. ;   4953  4            BEGIN
  7231. ;   4954  4            KRM_ERROR (KER_RETRIES);    ! Report the error
  7232. ;   4955  4            RETURN KER_RETRIES;
  7233. ;   4956  3            END;
  7234. ;   4957  3    
  7235. ;   4958  3            NUM_RETRIES = .NUM_RETRIES + 1;
  7236. ;   4959  3            STATUS = REC_PACKET ();
  7237. ;   4960  3    ![043] Don't abort on errors which might just be due to noise.
  7238. ;   4961  3    
  7239. ;   4962  3            IF NOT .STATUS AND .STATUS NEQ KER_CHKSUMERR AND .STATUS NEQ KER_TIMEOUT AND .STATUS NEQ
  7240. ;   4963  3            KER_ZEROLENMSG
  7241. ;   4964  3            THEN
  7242. ;   4965  3            RETURN .STATUS;
  7243. ;   4966  3    
  7244. ;   4967  3            IF NOT .STATUS
  7245. ;   4968  3            THEN
  7246. ;   4969  3            SEND_PACKET (MSG_NAK, 0, .MSG_NUMBER)    ![024]
  7247. ;   4970  3            ELSE
  7248. ;   4971  4            BEGIN
  7249. ;   4972  4    ![021]
  7250. ;   4973  4    ![021] If the packet type is not acceptable by our caller, nak it so the
  7251. ;   4974  4    ![021] other end tries again, and abort the current operation.  This is so
  7252. ;   4975  4    ![021] we will return to server mode (if we are running that way) quickly
  7253. ;   4976  4    ![021] when the other Kermit has been aborted and then restarted, and should
  7254. ;   4977  4    ![021] also make restarting quick, since we will not need to wait for the
  7255. ;   4978  4    ![021] other Kermit to time this message out before retransmitting.
  7256. ;   4979  4    ![021]
  7257. ;   4980  4    
  7258. ;   4981  4            IF NOT (.CHK_ROUTINE) ()
  7259. ;   4982  4            THEN
  7260. ;   4983  5                BEGIN
  7261. ;   4984  5                SEND_PACKET (MSG_NAK, 0, .REC_SEQ);
  7262. ;   4985  5                RETURN FALSE;        ! Just indicate an error
  7263. ;   4986  5                END
  7264. ;   4987  4            ELSE
  7265. ;   4988  4                EXITLOOP KER_NORMAL;
  7266. ;   4989  4    
  7267. ;   4990  3            END;
  7268. ;   4991  3    
  7269. ;   4992  2            END;
  7270. ;   4993  2    
  7271. ;   4994  1        END;                    ! End of REC_PARSE
  7272.  
  7273.  
  7274.  
  7275.  
  7276.  
  7277. ;REC_MESSAGE
  7278. U.25:    .WORD   ^M<R2,R3,R4>             ;Save R2,R3,R4                   4903                    001C   00000
  7279.     MOVAB   W^U.24, R4             ;U.24, R4                                     54     FE42   CF  9E   00002
  7280.     MOVAB   G^U.54, R3             ;U.54, R3                                     53 00000000'  00  9E   00007
  7281. 1$:    CMPL    (R3), G^PKT_RETRIES         ;NUM_RETRIES, PKT_RETRIES           4951 00000000G  00         63  D1   0000E
  7282.     BLEQ    2$                 ;2$                                               15  15   00015
  7283.     PUSHL   #134316194             ;#134316194                   4954           080180A2   8F  DD   00017
  7284.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   0001D
  7285.     MOVL    #134316194, R0             ;#134316194, R0               4955            50 080180A2   8F  D0   00024
  7286.     RET                      ;                                               04   0002B
  7287. 2$:    INCL    (R3)                 ;NUM_RETRIES                   4958                  63  D6   0002C
  7288.     CALLS   #0, G^U.26             ;#0, U.26                   4959 00000000V  00         00  FB   0002E
  7289.     MOVL    R0, R2                 ;R0, STATUS                                     52         50  D0   00035
  7290.     BLBS    R2, 4$                 ;STATUS, 4$                   4962            30         52  E8   00038
  7291.     CMPL    R2, #134316178             ;STATUS, #134316178                      08018092   8F         52  D1   0003B
  7292.     BEQL    3$                 ;3$                                               16  13   00042
  7293.     CMPL    R2, #134316248             ;STATUS, #134316248                      080180D8   8F         52  D1   00044
  7294.     BEQL    3$                 ;3$                                               0D  13   0004B
  7295.     CMPL    R2, #134316234             ;STATUS, #134316234               4963 080180CA   8F         52  D1   0004D
  7296.     BEQL    3$                 ;3$                                               04  13   00054
  7297.     MOVL    R2, R0                 ;STATUS, R0                   4965            50         52  D0   00056
  7298.     RET                      ;                                               04   00059
  7299. 3$:    BLBS    R2, 4$                 ;STATUS, 4$                   4967            0E         52  E8   0005A
  7300.     PUSHL   4(R3)                 ;MSG_NUMBER                   4969             04   A3  DD   0005D
  7301.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00060
  7302.     MOVZBL  #78, -(SP)             ;#78, -(SP)                                     7E    4E   8F  9A   00062
  7303.     CALLS   #3, (R4)             ;#3, SEND_PACKET                                 64         03  FB   00066
  7304.     BRB     1$                 ;1$                                               A3  11   00069
  7305. 4$:    CALLS   #0, @4(AP)             ;#0, @CHK_ROUTINE               4981       04   BC         00  FB   0006B
  7306.     BLBS    R0, 5$                 ;R0, 5$                                     0E         50  E8   0006F
  7307.     PUSHL   8(R3)                 ;REC_SEQ                   4984             08   A3  DD   00072
  7308.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00075
  7309.     MOVZBL  #78, -(SP)             ;#78, -(SP)                                     7E    4E   8F  9A   00077
  7310.     CALLS   #3, (R4)             ;#3, SEND_PACKET                                 64         03  FB   0007B
  7311.     BRB     6$                 ;6$                       4985                  08  11   0007E
  7312. 5$:    MOVL    #134316043, R0             ;#134316043, R0               4988            50 0801800B   8F  D0   00080
  7313.     RET                      ;                                               04   00087
  7314. 6$:    CLRL    R0                 ;R0                       4946                  50  D4   00088
  7315.     RET                      ;                                               04   0008A
  7316.  
  7317. ; Routine Size:  139 bytes,    Routine Base:  $CODE$ + 1D78
  7318.  
  7319.  
  7320. ;   4995  1     %SBTTL 'REC_PACKET'
  7321. ;   4996  1    ROUTINE REC_PACKET =
  7322. ;   4997  1    
  7323. ;   4998  1    !++
  7324. ;   4999  1    ! FUNCTIONAL DESCRIPTION:
  7325. ;   5000  1    !
  7326. ;   5001  1    !    This routine will do the oppoiste of SEND_PACKET.  It will wait
  7327. ;   5002  1    !    for the message to be read from the remote and then it will
  7328. ;   5003  1    !    check the message for validity.
  7329. ;   5004  1    !
  7330. ;   5005  1    ! CALLING SEQUENCE:
  7331. ;   5006  1    !
  7332. ;   5007  1    !    Flag = REC_PACKET();
  7333. ;   5008  1    !
  7334. ;   5009  1    ! INPUT PARAMETERS:
  7335. ;   5010  1    !
  7336. ;   5011  1    !    None.
  7337. ;   5012  1    !
  7338. ;   5013  1    ! IMPLICIT INPUTS:
  7339. ;   5014  1    !
  7340. ;   5015  1    !    None.
  7341. ;   5016  1    !
  7342. ;   5017  1    ! OUTPUT PARAMETERS:
  7343. ;   5018  1    !
  7344. ;   5019  1    !    None.
  7345. ;   5020  1    !
  7346. ;   5021  1    ! IMPLICIT OUTPUTS:
  7347. ;   5022  1    !
  7348. ;   5023  1    !    REC_MSG - Contains the message received.
  7349. ;   5024  1    !
  7350. ;   5025  1    ! COMPLETION CODES:
  7351. ;   5026  1    !
  7352. ;   5027  1    !    True - Packet receive ok.
  7353. ;   5028  1    !    False - Problem occured during the receiving of the packet.
  7354. ;   5029  1    !
  7355. ;   5030  1    ! SIDE EFFECTS:
  7356. ;   5031  1    !
  7357. ;   5032  1    !    None.
  7358. ;   5033  1    !
  7359. ;   5034  1    !--
  7360. ;   5035  1    
  7361. ;   5036  2        BEGIN
  7362. ;   5037  2    
  7363. ;   5038  2        BIND
  7364. ;   5039  2        ATTEMPT_TEXT = UPLIT (%ASCIZ'Attempting to receive');
  7365. ;   5040  2    
  7366. ;   5041  2        LOCAL
  7367. ;   5042  2        STATUS,                    ! Status returned by various routines
  7368. ;   5043  2        MSG_LENGTH,
  7369. ;   5044  2        ERR_POINTER,                ! Pointer to the error buffer
  7370. ;   5045  2        POINTER,
  7371. ;   5046  2        CHKSUM;                    ! Checksum of the message
  7372. ;   5047  2    
  7373. ;   5048  2    !
  7374. ;   5049  2    ! Attempt to read the message from the remote.
  7375. ;   5050  2    !
  7376. ;   5051  2    !    DO
  7377. ;   5052  2    !    BEGIN
  7378. ;   5053  2    
  7379. ;   5054  2        IF .DEBUG_FLAG
  7380. ;   5055  2        THEN
  7381. ;   5056  3        BEGIN
  7382. ;   5057  3    
  7383. ;   5058  3        LOCAL
  7384. ;   5059  3            OLD_RTN;
  7385. ;   5060  3    
  7386. ;   5061  3        OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
  7387. ;   5062  3        TT_TEXT (ATTEMPT_TEXT);
  7388. ;   5063  3        TT_CRLF ();
  7389. ;   5064  3        TT_SET_OUTPUT (.OLD_RTN);
  7390. ;   5065  2        END;
  7391. ;   5066  2    
  7392. ;   5067  2    !
  7393. ;   5068  2    ! If status type out requested, do it once
  7394. ;   5069  2    !
  7395. ;   5070  2    
  7396. ;   5071  2        IF .TYP_STS_FLAG
  7397. ;   5072  2        THEN
  7398. ;   5073  3        BEGIN
  7399. ;   5074  3        STS_OUTPUT ();
  7400. ;   5075  3        TYP_STS_FLAG = FALSE;
  7401. ;   5076  2        END;
  7402. ;   5077  2    
  7403. ;   5078  2    !
  7404. ;   5079  2    ! Receive the message from the remote Kermit
  7405. ;   5080  2    !
  7406. ;   5081  2        STATUS = RECEIVE (REC_MSG, MSG_LENGTH);
  7407. ;   5082  2    !
  7408. ;   5083  2    ! Check for timeouts
  7409. ;   5084  2    !
  7410. ;   5085  2    
  7411. ;   5086  2        IF .STATUS EQL KER_TIMEOUT THEN XFR_STATUS (%C'R', %C'T');
  7412. ;   5087  2    
  7413. ;   5088  2    !
  7414. ;   5089  2    ! If it failed return the status to the upper level
  7415. ;   5090  2    !
  7416. ;   5091  2    
  7417. ;   5092  2        IF NOT .STATUS
  7418. ;   5093  2        THEN
  7419. ;   5094  3        BEGIN
  7420. ;   5095  3    
  7421. ;   5096  3        IF .STATUS NEQ KER_ABORTED AND .STATUS NEQ KER_TIMEOUT THEN KRM_ERROR (.STATUS);
  7422. ;   5097  3    
  7423. ;   5098  3                            ! Report error
  7424. ;   5099  3        RETURN .STATUS;
  7425. ;   5100  2        END;
  7426. ;   5101  2    
  7427. ;   5102  2    !
  7428. ;   5103  2    ! Determine if we got a good message
  7429. ;   5104  2    !
  7430. ;   5105  2    
  7431. ;   5106  2        IF .MSG_LENGTH LSS PKT_TOT_OVR_HEAD - 1
  7432. ;   5107  2        THEN
  7433. ;   5108  3        BEGIN
  7434. ;   5109  3        RETURN KER_ZEROLENMSG;
  7435. ;   5110  2        END;
  7436. ;   5111  2    
  7437. ;   5112  2        IF UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNT, CHR_SIZE))) EQL 0 ! [108]
  7438. ;   5113  2        THEN                                   ! [108]
  7439. ;   5114  3        BEGIN                                   ! [108]
  7440. ;   5115  3        IF .MSG_LENGTH LSS PKT_TOT_OVR_HEAD - 1 + 3               ! [108]
  7441. ;   5116  3        THEN                                   ! [108]
  7442. ;   5117  4            BEGIN                               ! [108]
  7443. ;   5118  4            RETURN KER_ZEROLENMSG;                       ! [108]
  7444. ;   5119  3            END;                               ! [108]
  7445. ;   5120  2        END;                                   ! [108]
  7446. ;   5121  2    !
  7447. ;   5122  2    ! Update the stats on the total number of characters received.
  7448. ;   5123  2    !
  7449. ;   5124  2        RMSG_TOTAL_CHARS = .RMSG_TOTAL_CHARS + .MSG_LENGTH;
  7450. ;   5125  2    !
  7451. ;   5126  2    ! Initialize the checksum and others
  7452. ;   5127  2    !
  7453. ;   5128  2        REC_TYPE = CH$RCHAR (CH$PTR (REC_MSG, PKT_TYPE, CHR_SIZE));
  7454. ;   5129  2    !
  7455. ;   5130  2    ! Now break the message apart byte by byte.
  7456. ;   5131  2    !
  7457. ;   5132  2        RECV_PKT_MSG = PKT_MSG;                           ! [108]
  7458. ;   5133  2        REC_LENGTH = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNT, CHR_SIZE)));
  7459. ;   5134  2        IF .REC_LENGTH EQL 0                           ! [108]
  7460. ;   5135  2        THEN                                   ! [108]
  7461. ;   5136  3        BEGIN                                   ! [108]
  7462. ;   5137  3        REC_LENGTH = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNTX1, CHR_SIZE))) * 95 +
  7463. ;   5138  3            UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_COUNTX2, CHR_SIZE))) +
  7464. ;   5139  3                            PKT_HCHECK - 1;           ! [108]
  7465. ;   5140  3        RECV_PKT_MSG = PKT_MSGX;                       ! [108]
  7466. ;   5141  2        END;                                   ! [108]
  7467. ;   5142  2    
  7468. ;   5143  2        REC_SEQ = UNCHAR (CH$RCHAR (CH$PTR (REC_MSG, PKT_SEQ, CHR_SIZE)));
  7469. ;   5144  2    !
  7470. ;   5145  2    ! Typed the packet if we are debugging
  7471. ;   5146  2    !
  7472. ;   5147  2        DBG_RECEIVE (REC_MSG);
  7473. ;   5148  2    !
  7474. ;   5149  2    ! Now compute the final checksum and make sure that it is identical
  7475. ;   5150  2    ! to what we received from the remote KERMIT
  7476. ;   5151  2    !
  7477. ;   5152  2        POINTER = CH$PTR (REC_MSG, PKT_MARK + 1, CHR_SIZE);
  7478. ;   5153  2        REC_LENGTH = .REC_LENGTH - (.BLK_CHK_TYPE - CHK_1CHAR);           ! [108]
  7479. ;   5154  2        CHKSUM = CALC_BLOCK_CHECK (.POINTER, .REC_LENGTH);               ! [108]
  7480. ;   5155  2        POINTER = CH$PTR (REC_MSG, .REC_LENGTH + 1, CHR_SIZE);           ! [108]
  7481. ;   5156  2        REC_LENGTH = .REC_LENGTH - .RECV_PKT_MSG + 1;               ! [108]
  7482. ;   5157  2        STATUS = KER_NORMAL;            ! Assume good checksum
  7483. ;   5158  2    
  7484. ;   5159  2        CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
  7485. ;   5160  2        SET
  7486. ;   5161  2    
  7487. ;   5162  2        [CHK_1CHAR] :
  7488. ;   5163  2    
  7489. ;   5164  2            IF .CHKSUM NEQ UNCHAR (CH$RCHAR_A (POINTER)) THEN STATUS = KER_CHKSUMERR;
  7490. ;   5165  2    
  7491. ;   5166  2        [CHK_2CHAR] :
  7492. ;   5167  2    
  7493. ; P 5168  3            IF (.CHKSUM<6, 6> NEQ UNCHAR (CH$RCHAR_A (POINTER))) OR (.CHKSUM<0, 6> NEQ UNCHAR (
  7494. ;   5169  3                CH$RCHAR_A (POINTER)))
  7495. ;   5170  2            THEN
  7496. ;   5171  2            STATUS = KER_CHKSUMERR;
  7497. ;   5172  2    
  7498. ;   5173  2        [CHK_CRC] :
  7499. ;   5174  2    
  7500. ; P 5175  3            IF (.CHKSUM<12, 4> NEQ UNCHAR (CH$RCHAR_A (POINTER))) OR (.CHKSUM<6, 6> NEQ UNCHAR (
  7501. ;   5176  3                CH$RCHAR_A (POINTER))) OR (.CHKSUM<0, 6> NEQ UNCHAR (CH$RCHAR_A (POINTER)))
  7502. ;   5177  2            THEN
  7503. ;   5178  2            STATUS = KER_CHKSUMERR;
  7504. ;   5179  2    
  7505. ;   5180  2        TES;
  7506. ;   5181  2    
  7507. ;   5182  2    !
  7508. ;   5183  2    ! If we have a bad checksum, check for the special cases when we might be out
  7509. ;   5184  2    ! of sync with the sender.  This can occur if the sender is retransmitting
  7510. ;   5185  2    ! a send-init (because our ACK got lost), and we have agreed on multi-char
  7511. ;   5186  2    ! checksums, or because the sender is a server who has aborted back to being
  7512. ;   5187  2    ! idle without telling us.
  7513. ;   5188  2    ! Note that in either case, we return back to using single character checksums
  7514. ;   5189  2    !
  7515. ;   5190  2    
  7516. ;   5191  2        IF .STATUS EQL KER_CHKSUMERR
  7517. ;   5192  2        THEN
  7518. ;   5193  3        BEGIN
  7519. ;   5194  3    
  7520. ;   5195  5        IF (.BLK_CHK_TYPE NEQ CHK_1CHAR AND .REC_SEQ EQL 0) AND (.REC_LENGTH LSS 1 - (.BLK_CHK_TYPE
  7521. ;   5196  4            - CHK_1CHAR) AND .REC_TYPE EQL MSG_NAK) OR (.REC_TYPE EQL MSG_SND_INIT)
  7522. ;   5197  3        THEN
  7523. ;   5198  4            BEGIN
  7524. ;   5199  4    
  7525. ;   5200  4            LOCAL
  7526. ;   5201  4            SAVE_BLK_CHK_TYPE;
  7527. ;   5202  4    
  7528. ;   5203  4            SAVE_BLK_CHK_TYPE = .BLK_CHK_TYPE;    ! Remember what we are using
  7529. ;   5204  4            BLK_CHK_TYPE = CHK_1CHAR;
  7530. ;   5205  4            POINTER = CH$PTR (REC_MSG, PKT_MARK + 1, CHR_SIZE);
  7531. ;   5206  4            CHKSUM = CALC_BLOCK_CHECK (.POINTER, .REC_LENGTH + .RECV_PKT_MSG - 1); ! [108]
  7532. ;   5207  4            POINTER = CH$PTR (REC_MSG, .REC_LENGTH + PKT_OVR_HEAD + 1, CHR_SIZE);
  7533. ;   5208  4    
  7534. ;   5209  5            IF .CHKSUM NEQ UNCHAR (CH$RCHAR_A (POINTER))
  7535. ;   5210  4            THEN
  7536. ;   5211  5            BEGIN
  7537. ;   5212  5            BLK_CHK_TYPE = .SAVE_BLK_CHK_TYPE;
  7538. ;   5213  5            RETURN KER_CHKSUMERR;
  7539. ;   5214  4            END;
  7540. ;   5215  4    
  7541. ;   5216  4            END
  7542. ;   5217  3        ELSE
  7543. ;   5218  3            RETURN KER_CHKSUMERR;
  7544. ;   5219  3    
  7545. ;   5220  2        END;
  7546. ;   5221  2    
  7547. ;   5222  2    !
  7548. ;   5223  2    ! Update the stats
  7549. ;   5224  2    !
  7550. ;   5225  2    !    RMSG_DATA_CHARS = .RMSG_DATA_CHARS + .REC_LENGTH;
  7551. ;   5226  2    
  7552. ;   5227  2        IF .REC_TYPE EQL MSG_NAK
  7553. ;   5228  2        THEN
  7554. ;   5229  3        BEGIN
  7555. ;   5230  3        RMSG_NAKS = .RMSG_NAKS + 1;
  7556. ;   5231  3        XFR_STATUS (%C'R', %C'N');
  7557. ;   5232  3        END
  7558. ;   5233  2        ELSE
  7559. ;   5234  3        BEGIN
  7560. ;   5235  3        RMSG_COUNT = .RMSG_COUNT + 1;
  7561. ;   5236  3        XFR_STATUS (%C'R', %C'P');
  7562. ;   5237  2        END;
  7563. ;   5238  2    
  7564. ;   5239  2    !
  7565. ;   5240  2    ! Now check to see if we have an E type (Error) packet.
  7566. ;   5241  2    !
  7567. ;   5242  2    
  7568. ;   5243  2        IF .REC_TYPE NEQ MSG_ERROR THEN RETURN KER_NORMAL;
  7569. ;   5244  2    
  7570. ;   5245  2    !
  7571. ;   5246  2    ! Here to process an error packet.  Call the user routine to output the
  7572. ;   5247  2    ! error message to the terminal.
  7573. ;   5248  2    !
  7574. ;   5249  2    !
  7575. ;   5250  2    ![026] Use decoding routine to fetch the error text
  7576. ;   5251  2    !
  7577. ;   5252  2        CH$FILL (CHR_NUL, MAX_MSG + 1, CH$PTR (LAST_ERROR));
  7578. ;   5253  2        SET_STRING (CH$PTR (LAST_ERROR), MAX_MSG, TRUE);
  7579. ;   5254  2        BFR_EMPTY ();
  7580. ;   5255  2        SET_STRING (0, 0, FALSE);
  7581. ;   5256  2    ![026]    ERR_POINTER = CH$PTR (LAST_ERROR);
  7582. ;   5257  2    ![026]    POINTER = CH$PTR (REC_MSG, PKT_MSG, CHR_SIZE);
  7583. ;   5258  2    ![026]
  7584. ;   5259  2    ![026]    INCR I FROM 1 TO .REC_LENGTH DO
  7585. ;   5260  2    ![026]    CH$WCHAR_A (CH$RCHAR_A (POINTER), ERR_POINTER);
  7586. ;   5261  2    ![026]
  7587. ;   5262  2    ![026]    CH$WCHAR (CHR_NUL, ERR_POINTER);
  7588. ;   5263  2        TT_TEXT (LAST_ERROR);
  7589. ;   5264  2        TT_CRLF ();
  7590. ;   5265  2        RETURN KER_ERRMSG;
  7591. ;   5266  1        END;                    ! End of REC_PACKET
  7592.  
  7593.  
  7594.  
  7595.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  7596.  
  7597. P.AAN:    .ASCII  \Attempting to receive\<0><0><0> ;                                69  74  70  6D  65  74  74  41  000A0
  7598.                          ;                          65  72  20  6F  74  20  67  6E  000A8
  7599.                          ;                          00  00  00  65  76  69  65  63  000B0
  7600.  
  7601. U.82=            P.AAN
  7602.  
  7603.  
  7604.     .PSECT  $CODE$,NOWRT,2
  7605.  
  7606. ;REC_PACKET
  7607. U.26:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,-   4996                    0FFC   00000
  7608.         R11>                 ;R11
  7609.     MOVAB   G^TYP_STS_FLAG, R11         ;TYP_STS_FLAG, R11                                 5B 00000000G  00  9E   00002
  7610.     MOVAB   G^TT_CRLF, R10             ;TT_CRLF, R10                                     5A 00000000G  00  9E   00009
  7611.     MOVAB   G^TT_TEXT, R9             ;TT_TEXT, R9                                     59 00000000G  00  9E   00010
  7612.     MOVAB   G^TT_SET_OUTPUT, R8         ;TT_SET_OUTPUT, R8                                 58 00000000G  00  9E   00017
  7613.     MOVAB   G^LAST_ERROR, R7         ;LAST_ERROR, R7                                 57 00000000G  00  9E   0001E
  7614.     MOVAB   G^U.57, R6             ;U.57, R6                                     56 00000000'  00  9E   00025
  7615.     SUBL2   #4, SP                 ;#4, SP                                     5E         04  C2   0002C
  7616.     BLBC    G^DEBUG_FLAG, 1$         ;DEBUG_FLAG, 1$               5054            1D 00000000G  00  E9   0002F
  7617.     PUSHAB  G^DBG_DUMP             ;DBG_DUMP                   5061           00000000G  00  9F   00036
  7618.     CALLS   #1, (R8)             ;#1, TT_SET_OUTPUT                                 68         01  FB   0003C
  7619.     MOVL    R0, R2                 ;R0, OLD_RTN                                     52         50  D0   0003F
  7620.     PUSHAB  G^U.82                 ;U.82                       5062           00000000'  00  9F   00042
  7621.     CALLS   #1, (R9)             ;#1, TT_TEXT                                     69         01  FB   00048
  7622.     CALLS   #0, (R10)             ;#0, TT_CRLF                   5063            6A         00  FB   0004B
  7623.     PUSHL   R2                 ;OLD_RTN                   5064                  52  DD   0004E
  7624.     CALLS   #1, (R8)             ;#1, TT_SET_OUTPUT                                 68         01  FB   00050
  7625. 1$:    BLBC    (R11), 2$             ;TYP_STS_FLAG, 2$               5071            09         6B  E9   00053
  7626.     CALLS   #0, G^U.33             ;#0, U.33                   5074 00000000V  00         00  FB   00056
  7627.     CLRL    (R11)                 ;TYP_STS_FLAG                   5075                  6B  D4   0005D
  7628. 2$:    PUSHL   SP                 ;SP                       5081                  5E  DD   0005F
  7629.     PUSHAB  8(R6)                 ;REC_MSG                                      08   A6  9F   00061
  7630.     CALLS   #2, G^RECEIVE             ;#2, RECEIVE                          00000000G  00         02  FB   00064
  7631.     MOVL    R0, R5                 ;R0, STATUS                                     55         50  D0   0006B
  7632.     CMPL    R5, #134316248             ;STATUS, #134316248               5086 080180D8   8F         55  D1   0006E
  7633.     BNEQ    3$                 ;3$                                               0F  12   00075
  7634.     MOVZBL  #84, -(SP)             ;#84, -(SP)                                     7E    54   8F  9A   00077
  7635.     MOVZBL  #82, -(SP)             ;#82, -(SP)                                     7E    52   8F  9A   0007B
  7636.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   0007F
  7637. 3$:    BLBS    R5, 5$                 ;STATUS, 5$                   5092            1F         55  E8   00086
  7638.     CMPL    R5, #134316258             ;STATUS, #134316258               5096 080180E2   8F         55  D1   00089
  7639.     BEQL    4$                 ;4$                                               12  13   00090
  7640.     CMPL    R5, #134316248             ;STATUS, #134316248                      080180D8   8F         55  D1   00092
  7641.     BEQL    4$                 ;4$                                               09  13   00099
  7642.     PUSHL   R5                 ;STATUS                                           55  DD   0009B
  7643.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   0009D
  7644. 4$:    MOVL    R5, R0                 ;STATUS, R0                   5099            50         55  D0   000A4
  7645.     RET                      ;                                               04   000A7
  7646. 5$:    CMPL    (SP), #5             ;MSG_LENGTH, #5               5106            05         6E  D1   000A8
  7647.     BLSS    6$                 ;6$                                               0E  19   000AB
  7648.     MOVZBL  9(R6), R0             ;REC_MSG+1, R0                   5112            50    09   A6  9A   000AD
  7649.     CMPB    R0, #32                 ;R0, #32                                     20         50  91   000B1
  7650.     BNEQ    7$                 ;7$                                               0D  12   000B4
  7651.     CMPL    (SP), #8             ;MSG_LENGTH, #8               5115            08         6E  D1   000B6
  7652.     BGEQ    7$                 ;7$                                               08  18   000B9
  7653. 6$:    MOVL    #134316234, R0             ;#134316234, R0               5118            50 080180CA   8F  D0   000BB
  7654.     RET                      ;                                               04   000C2
  7655. 7$:    ADDL2   (SP), G^RMSG_TOTAL_CHARS     ;MSG_LENGTH, RMSG_TOTAL_CHARS           5124 00000000G  00         6E  C0   000C3
  7656.     MOVZBL  11(R6), 4(R6)             ;REC_MSG+3, REC_TYPE               5128       04   A6    0B   A6  9A   000CA
  7657.     MOVL    #4, -72(R6)             ;#4, RECV_PKT_MSG               5132       B8   A6         04  D0   000CF
  7658.     MOVAB   -32(R0), (R6)             ;-32(R0), REC_LENGTH               5133            66    E0   A0  9E   000D3
  7659.     BNEQ    8$                 ;8$                       5134                  19  12   000D7
  7660.     MOVZBL  12(R6), R0             ;REC_MSG+4, R0                   5137            50    0C   A6  9A   000D9
  7661.     MULL2   #95, R0                 ;#95, R0                                     50 0000005F   8F  C4   000DD
  7662.     MOVZBL  13(R6), R1             ;REC_MSG+5, R1                   5138            51    0D   A6  9A   000E4
  7663.     MOVAB   -3067(R1)[R0], (R6)         ;-3067(R1)[R0], REC_LENGTH           5139            66     F405 C140  9E   000E8
  7664.     MOVL    #7, -72(R6)             ;#7, RECV_PKT_MSG               5140       B8   A6         07  D0   000EE
  7665. 8$:    MOVZBL  10(R6), -4(R6)             ;REC_MSG+2, REC_SEQ               5143       FC   A6    0A   A6  9A   000F2
  7666.     SUBL2   #32, -4(R6)             ;#32, REC_SEQ                                FC   A6         20  C2   000F7
  7667.     PUSHAB  8(R6)                 ;REC_MSG                   5147             08   A6  9F   000FB
  7668.     CALLS   #1, G^U.36             ;#1, U.36                          00000000V  00         01  FB   000FE
  7669.     MOVAB   9(R6), R2             ;REC_MSG+1, POINTER               5152            52    09   A6  9E   00105
  7670.     SUBL3   -36(R6), (R6), R0         ;BLK_CHK_TYPE, REC_LENGTH, R0           5153            66    DC   A6  C3   00109
  7671.                          ;                                         50       0010D
  7672.     MOVAB   49(R0), (R6)             ;49(R0), REC_LENGTH                                 66    31   A0  9E   0010E
  7673.     PUSHL   (R6)                 ;REC_LENGTH                   5154                  66  DD   00112
  7674.     PUSHL   R2                 ;POINTER                                           52  DD   00114
  7675.     CALLS   #2, G^U.19             ;#2, U.19                          00000000V  00         02  FB   00116
  7676.     MOVL    (R6), R1             ;REC_LENGTH, R1               5155            51         66  D0   0011D
  7677.     MOVAB   9(R6)[R1], R2             ;REC_MSG+1[R1], POINTER                             52    09 A641  9E   00120
  7678.     MOVL    -72(R6), R3             ;RECV_PKT_MSG, R3               5156            53    B8   A6  D0   00125
  7679.     SUBL2   R3, R1                 ;R3, R1                                     51         53  C2   00129
  7680.     MOVAB   1(R1), (R6)             ;1(R1), REC_LENGTH                                 66    01   A1  9E   0012C
  7681.     MOVL    #134316043, R5             ;#134316043, STATUS               5157            55 0801800B   8F  D0   00130
  7682.     MOVL    -36(R6), R4             ;BLK_CHK_TYPE, R4               5159            54    DC   A6  D0   00137
  7683.     CASEL   R4, #49, #2             ;R4, #49, #2                                     31         54  CF   0013B
  7684.                          ;                                         02       0013E
  7685. 9$:    .WORD   10$-9$,-             ;10$-9$,-                                   001E       0006       0013F
  7686.         12$-9$,-             ;12$-9$,-                                   0011       00143
  7687.         11$-9$                 ;11$-9$
  7688. 10$:    MOVZBL  (R2)+, R1             ;(POINTER)+, R1               5164            51         82  9A   00145
  7689.     SUBL2   #32, R1                 ;#32, R1                                     51         20  C2   00148
  7690.     CMPL    R0, R1                 ;CHKSUM, R1                                     51         50  D1   0014B
  7691.     BRB     13$                 ;13$                                               25  11   0014E
  7692. 11$:    MOVZBL  (R2)+, R1             ;(POINTER)+, R1               5175            51         82  9A   00150
  7693.     SUBL2   #32, R1                 ;#32, R1                                     51         20  C2   00153
  7694.     CMPZV   #12, #4, R0, R1             ;#12, #4, CHKSUM, R1                                 04         0C  ED   00156
  7695.                          ;                                   51         50       00159
  7696.     BNEQ    14$                 ;14$                                               1A  12   0015B
  7697. 12$:    MOVZBL  (R2)+, R1             ;(POINTER)+, R1               5176            51         82  9A   0015D
  7698.     SUBL2   #32, R1                 ;#32, R1                                     51         20  C2   00160
  7699.     CMPZV   #6, #6, R0, R1             ;#6, #6, CHKSUM, R1                                 06         06  ED   00163
  7700.                          ;                                   51         50       00166
  7701.     BNEQ    14$                 ;14$                                               0D  12   00168
  7702.     MOVZBL  (R2)+, R1             ;(POINTER)+, R1                                 51         82  9A   0016A
  7703.     SUBL2   #32, R1                 ;#32, R1                                     51         20  C2   0016D
  7704.     CMPZV   #0, #6, R0, R1             ;#0, #6, CHKSUM, R1                                 06         00  ED   00170
  7705.                          ;                                   51         50       00173
  7706. 13$:    BEQL    15$                 ;15$                                               07  13   00175
  7707. 14$:    MOVL    #134316178, R5             ;#134316178, STATUS               5178            55 08018092   8F  D0   00177
  7708. 15$:    CMPL    R5, #134316178             ;STATUS, #134316178               5191 08018092   8F         55  D1   0017E
  7709.     BNEQ    19$                 ;19$                                               64  12   00185
  7710.     CMPL    R4, #49                 ;R4, #49                   5195            31         54  D1   00187
  7711.     BEQL    16$                 ;16$                                               1B  13   0018A
  7712.     TSTL    -4(R6)                 ;REC_SEQ                                      FC   A6  D5   0018C
  7713.     BNEQ    16$                 ;16$                                               16  12   0018F
  7714.     MOVAB   -50(R4), R1             ;-50(R4), R1                   5196            51    CE   A4  9E   00191
  7715.     MNEGL   R1, R1                 ;R1, R1                                     51         51  CE   00195
  7716.     CMPL    (R6), R1             ;REC_LENGTH, R1                                 51         66  D1   00198
  7717.     BGEQ    16$                 ;16$                                               0A  18   0019B
  7718.     CMPL    4(R6), #78             ;REC_TYPE, #78                          0000004E   8F    04   A6  D1   0019D
  7719.     BEQL    17$                 ;17$                                               0A  13   001A5
  7720. 16$:    CMPL    4(R6), #83             ;REC_TYPE, #83                          00000053   8F    04   A6  D1   001A7
  7721.     BNEQ    18$                 ;18$                                               32  12   001AF
  7722. 17$:    MOVL    #49, -36(R6)             ;#49, BLK_CHK_TYPE               5204       DC   A6         31  D0   001B1
  7723.     MOVAB   9(R6), R2             ;REC_MSG+1, POINTER               5205            52    09   A6  9E   001B5
  7724.     MOVL    (R6), R1             ;REC_LENGTH, R1               5206            51         66  D0   001B9
  7725.     PUSHAB  -1(R3)[R1]             ;-1(R3)[R1]                                      FF A341  9F   001BC
  7726.     PUSHL   R2                 ;POINTER                                           52  DD   001C0
  7727.     CALLS   #2, G^U.19             ;#2, U.19                          00000000V  00         02  FB   001C2
  7728.     MOVAB   8(R6), R1             ;REC_MSG, R1                   5207            51    08   A6  9E   001C9
  7729.     ADDL2   (R6), R1             ;REC_LENGTH, R1                                 51         66  C0   001CD
  7730.     MOVAB   4(R1), R2             ;4(R1), POINTER                                 52    04   A1  9E   001D0
  7731.     MOVZBL  (R2)+, R1             ;(POINTER)+, R1               5209            51         82  9A   001D4
  7732.     SUBL2   #32, R1                 ;#32, R1                                     51         20  C2   001D7
  7733.     CMPL    R0, R1                 ;CHKSUM, R1                                     51         50  D1   001DA
  7734.     BEQL    19$                 ;19$                                               0C  13   001DD
  7735.     MOVL    R4, -36(R6)             ;SAVE_BLK_CHK_TYPE, BLK_CHK_TYPE      5212       DC   A6         54  D0   001DF
  7736. 18$:    MOVL    #134316178, R0             ;#134316178, R0               5218            50 08018092   8F  D0   001E3
  7737.     RET                      ;                                               04   001EA
  7738. 19$:    CMPL    4(R6), #78             ;REC_TYPE, #78                   5227 0000004E   8F    04   A6  D1   001EB
  7739.     BNEQ    20$                 ;20$                                               0C  12   001F3
  7740.     INCL    G^RMSG_NAKS             ;RMSG_NAKS                   5230           00000000G  00  D6   001F5
  7741.     MOVZBL  #78, -(SP)             ;#78, -(SP)                   5231            7E    4E   8F  9A   001FB
  7742.     BRB     21$                 ;21$                                               0A  11   001FF
  7743. 20$:    INCL    G^RMSG_COUNT             ;RMSG_COUNT                   5235           00000000G  00  D6   00201
  7744.     MOVZBL  #80, -(SP)             ;#80, -(SP)                   5236            7E    50   8F  9A   00207
  7745. 21$:    MOVZBL  #82, -(SP)             ;#82, -(SP)                                     7E    52   8F  9A   0020B
  7746.     CALLS   #2, G^XFR_STATUS         ;#2, XFR_STATUS                      00000000G  00         02  FB   0020F
  7747.     CMPL    4(R6), #69             ;REC_TYPE, #69                   5243 00000045   8F    04   A6  D1   00216
  7748.     BEQL    22$                 ;22$                                               08  13   0021E
  7749.     MOVL    #134316043, R0             ;#134316043, R0                                 50 0801800B   8F  D0   00220
  7750.     RET                      ;                                               04   00227
  7751. 22$:    MOVC5   #0, (SP), #0, #1003, (R7)     ;#0, (SP), #0, #1003, LAST_ERROR      5252            6E         00  2C   00228
  7752.                          ;                            03EB   8F         00       0022B
  7753.                          ;                                         67       0022F
  7754.     PUSHL   #1                 ;#1                       5253                  01  DD   00230
  7755.     MOVZWL  #1002, -(SP)             ;#1002, -(SP)                                     7E     03EA   8F  3C   00232
  7756.     PUSHL   R7                 ;R7                                               57  DD   00237
  7757.     CALLS   #3, G^U.30             ;#3, U.30                          00000000V  00         03  FB   00239
  7758.     CALLS   #0, G^U.28             ;#0, U.28                   5254 00000000V  00         00  FB   00240
  7759.     CLRQ    -(SP)                 ;-(SP)                       5255                  7E  7C   00247
  7760.     CLRL    -(SP)                 ;-(SP)                                               7E  D4   00249
  7761.     CALLS   #3, G^U.30             ;#3, U.30                          00000000V  00         03  FB   0024B
  7762.     PUSHL   R7                 ;R7                       5263                  57  DD   00252
  7763.     CALLS   #1, (R9)             ;#1, TT_TEXT                                     69         01  FB   00254
  7764.     CALLS   #0, (R10)             ;#0, TT_CRLF                   5264            6A         00  FB   00257
  7765.     MOVL    #134316170, R0             ;#134316170, R0               5265            50 0801808A   8F  D0   0025A
  7766.     RET                      ;                                               04   00261
  7767.  
  7768. ; Routine Size:  610 bytes,    Routine Base:  $CODE$ + 1E03
  7769.  
  7770.  
  7771. ;   5267  1     %SBTTL 'CALC_BLOCK_CHECK'
  7772. ;   5268  1    ROUTINE CALC_BLOCK_CHECK (POINTER, LENGTH) =
  7773. ;   5269  1    
  7774. ;   5270  1    !++
  7775. ;   5271  1    ! FUNCTIONAL DESCRIPTION:
  7776. ;   5272  1    !
  7777. ;   5273  1    !    This routine will calculate the proper value for the block check
  7778. ;   5274  1    !    for a given message.  The value it returns is dependant upon the
  7779. ;   5275  1    !    type of block check requested in BLK_CHK_TYPE.
  7780. ;   5276  1    !
  7781. ;   5277  1    ! CALLING SEQUENCE:
  7782. ;   5278  1    !
  7783. ;   5279  1    !    CHKSUM = CALC_BLOCK_CHECK (.POINTER, .LENGTH);
  7784. ;   5280  1    !
  7785. ;   5281  1    ! INPUT PARAMETERS:
  7786. ;   5282  1    !
  7787. ;   5283  1    !    POINTER - A character pointer to the first character to be
  7788. ;   5284  1    !        included in the block check.
  7789. ;   5285  1    !
  7790. ;   5286  1    !    LENGTH - The number of characters to be included.
  7791. ;   5287  1    !
  7792. ;   5288  1    ! IMPLICIT INPUTS:
  7793. ;   5289  1    !
  7794. ;   5290  1    !    BLK_CHK_TYPE - The type of block check to generate.
  7795. ;   5291  1    !
  7796. ;   5292  1    ! OUPTUT PARAMETERS:
  7797. ;   5293  1    !
  7798. ;   5294  1    !    The value is the block check.
  7799. ;   5295  1    !
  7800. ;   5296  1    ! IMPLICIT OUTPUTS:
  7801. ;   5297  1    !
  7802. ;   5298  1    !    None.
  7803. ;   5299  1    !
  7804. ;   5300  1    ! COMPLETION CODES:
  7805. ;   5301  1    !
  7806. ;   5302  1    !    None.
  7807. ;   5303  1    !
  7808. ;   5304  1    ! SIDE EFFECTS:
  7809. ;   5305  1    !
  7810. ;   5306  1    !    None.
  7811. ;   5307  1    !
  7812. ;   5308  1    !--
  7813. ;   5309  1    
  7814. ;   5310  2        BEGIN
  7815. ;   5311  2    
  7816. ;   5312  2        LOCAL
  7817. ;   5313  2        CHAR_MASK,                ! Mask for stripping bits
  7818. ;   5314  2        BLOCK_CHECK;                ! To build initial block check value
  7819. ;   5315  2    
  7820. ;   5316  2        BLOCK_CHECK = 0;                ! Start out at 0
  7821. ;   5317  2    !
  7822. ;   5318  2    ! Set mask for characters so that we calculate the block check correctly
  7823. ;   5319  2    !
  7824. ;   5320  2        CHAR_MASK = (IF .PARITY_TYPE EQL PR_NONE THEN %O'377' ELSE %O'177');
  7825. ;   5321  2    
  7826. ;   5322  2        CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
  7827. ;   5323  2        SET
  7828. ;   5324  2    
  7829. ;   5325  2        [CHK_1CHAR, CHK_2CHAR] :
  7830. ;   5326  2    
  7831. ;   5327  2            INCR I FROM 1 TO .LENGTH DO
  7832. ;   5328  2            BLOCK_CHECK = .BLOCK_CHECK + (CH$RCHAR_A (POINTER) AND .CHAR_MASK);
  7833. ;   5329  2    
  7834. ;   5330  2        [CHK_CRC] :
  7835. ;   5331  3            BEGIN
  7836. ;   5332  3    !
  7837. ;   5333  3    ! Ensure that the calculation is done with correct type of characters
  7838. ;   5334  3    !
  7839. ;   5335  3    
  7840. ;   5336  3            LOCAL
  7841. ;   5337  3            TMP_PTR;            ! Temp pointer for copying chars
  7842. ;   5338  3    
  7843. ;   5339  3            TMP_PTR = .POINTER;
  7844. ;   5340  3    
  7845. ;   5341  3            IF .PARITY_TYPE NEQ PR_NONE
  7846. ;   5342  3            THEN
  7847. ;   5343  3    
  7848. ;   5344  3            INCR I FROM 1 TO .LENGTH DO
  7849. ;   5345  3                CH$WCHAR_A ((CH$RCHAR (.TMP_PTR) AND %O'177'), TMP_PTR);
  7850. ;   5346  3    
  7851. ;   5347  3            BLOCK_CHECK = CRCCLC (.POINTER, .LENGTH);
  7852. ;   5348  2            END;
  7853. ;   5349  2        TES;
  7854. ;   5350  2    
  7855. ;   5351  2        IF .BLK_CHK_TYPE EQL CHK_1CHAR
  7856. ;   5352  2        THEN
  7857. ;   5353  2        BLOCK_CHECK = (.BLOCK_CHECK + ((.BLOCK_CHECK AND %O'300')/%O'100')) AND %O'77';
  7858. ;   5354  2    
  7859. ;   5355  2        RETURN .BLOCK_CHECK;            ! Return the correct value
  7860. ;   5356  1        END;                    ! End of CALC_BLOCK_CHK
  7861.  
  7862.  
  7863.  
  7864.  
  7865.  
  7866. ;CALC_BLOCK_CHECK
  7867. U.19:    .WORD   ^M<R2,R3,R4,R5>             ;Save R2,R3,R4,R5               5268                    003C   00000
  7868.     MOVAB   G^U.48, R5             ;U.48, R5                                     55 00000000'  00  9E   00002
  7869.     CLRL    R3                 ;BLOCK_CHECK                   5316                  53  D4   00009
  7870.     MOVL    G^PARITY_TYPE, R1         ;PARITY_TYPE, R1               5320            51 00000000G  00  D0   0000B
  7871.     BNEQ    1$                 ;1$                                               06  12   00012
  7872.     MOVZBL  #255, R2             ;#255, CHAR_MASK                                 52    FF   8F  9A   00014
  7873.     BRB     2$                 ;2$                                               04  11   00018
  7874. 1$:    MOVZBL  #127, R2             ;#127, CHAR_MASK                                 52    7F   8F  9A   0001A
  7875. 2$:    CASEL   (R5), #49, #2             ;BLK_CHK_TYPE, #49, #2               5322            31         65  CF   0001E
  7876.                          ;                                         02       00021
  7877. 3$:    .WORD   4$-3$,-                 ;4$-3$,-                                   0006       0006       00022
  7878.         4$-3$,-                 ;4$-3$,-                                   0021       00026
  7879.         7$-3$                 ;7$-3$
  7880. 4$:    CLRL    R0                 ;I                       5327                  50  D4   00028
  7881.     BRB     6$                 ;6$                                               10  11   0002A
  7882. 5$:    MOVZBL  @4(AP), R1             ;@POINTER, R1                   5328            51    04   BC  9A   0002C
  7883.     INCL    4(AP)                 ;POINTER                                      04   AC  D6   00030
  7884.     MCOML   R2, R4                 ;CHAR_MASK, R4                                     54         52  D2   00033
  7885.     BICL2   R4, R1                 ;R4, R1                                     51         54  CA   00036
  7886.     ADDL2   R1, R3                 ;R1, BLOCK_CHECK                                 53         51  C0   00039
  7887. 6$:    AOBLEQ  8(AP), R0, 5$             ;LENGTH, I, 5$                                     50    08   AC  F3   0003C
  7888.                          ;                                         EB       00040
  7889.     BRB     11$                 ;11$                                               27  11   00041
  7890. 7$:    MOVL    4(AP), R2             ;POINTER, TMP_PTR               5339            52    04   AC  D0   00043
  7891.     TSTL    R1                 ;R1                       5341                  51  D5   00047
  7892.     BEQL    10$                 ;10$                                               11  13   00049
  7893.     CLRL    R0                 ;I                       5344                  50  D4   0004B
  7894.     BRB     9$                 ;9$                                               08  11   0004D
  7895. 8$:    EXTZV   #0, #7, (R2), R1         ;#0, #7, (TMP_PTR), R1               5345            07         00  EF   0004F
  7896.                          ;                                   51         62       00052
  7897.     MOVB    R1, (R2)+             ;R1, (TMP_PTR)+                                 82         51  90   00054
  7898. 9$:    AOBLEQ  8(AP), R0, 8$             ;LENGTH, I, 8$                                     50    08   AC  F3   00057
  7899.                          ;                                         F3       0005B
  7900. 10$:    MOVQ    4(AP), -(SP)             ;POINTER, -(SP)               5347            7E    04   AC  7D   0005C
  7901.     CALLS   #2, G^CRCCLC             ;#2, CRCCLC                          00000000G  00         02  FB   00060
  7902.     MOVL    R0, R3                 ;R0, BLOCK_CHECK                                 53         50  D0   00067
  7903. 11$:    CMPL    (R5), #49             ;BLK_CHK_TYPE, #49               5351            31         65  D1   0006A
  7904.     BNEQ    12$                 ;12$                                               17  12   0006D
  7905.     BICL3   #-193, R3, R0             ;#-193, BLOCK_CHECK, R0           5353            53 FFFFFF3F   8F  CB   0006F
  7906.                          ;                                         50       00076
  7907.     DIVL2   #64, R0                 ;#64, R0                                     50 00000040   8F  C6   00077
  7908.     ADDL2   R3, R0                 ;BLOCK_CHECK, R0                                 50         53  C0   0007E
  7909.     EXTZV   #0, #6, R0, R3             ;#0, #6, R0, BLOCK_CHECK                             06         00  EF   00081
  7910.                          ;                                   53         50       00084
  7911. 12$:    MOVL    R3, R0                 ;BLOCK_CHECK, R0               5355            50         53  D0   00086
  7912.     RET                      ;                                               04   00089
  7913.  
  7914. ; Routine Size:  138 bytes,    Routine Base:  $CODE$ + 2065
  7915.  
  7916.  
  7917. ;   5357  1     %SBTTL 'NORMALIZE_FILE - Put file name into normal form'
  7918. ;   5358  1    ROUTINE NORMALIZE_FILE (FILE_ADDRESS, FILE_LENGTH, NAME_LENGTH, TYPE_LENGTH) : NOVALUE =
  7919. ;   5359  1    
  7920. ;   5360  1    !++
  7921. ;   5361  1    ! FUNCTIONAL DESCRIPTION:
  7922. ;   5362  1    !
  7923. ;   5363  1    !    This routine will ensure that a file specification is in normal
  7924. ;   5364  1    !    form.  It does this by replacing all non-alphanumeric characters
  7925. ;   5365  1    !    (except the first period) with "X".  It will also ensure that
  7926. ;   5366  1    !    the resulting specification (of form name.type) has only
  7927. ;   5367  1    !    a specified number of characters in the name portion and type portion.
  7928. ;   5368  1    !
  7929. ;   5369  1    ! CALLING SEQUENCE:
  7930. ;   5370  1    !
  7931. ;   5371  1    !    NORMALIZE_FILE (FILE_ADDRESS, FILE_LENGTH, NAME_LENGTH, TYPE_LENGTH);
  7932. ;   5372  1    !
  7933. ;   5373  1    ! INPUT PARAMETERS:
  7934. ;   5374  1    !
  7935. ;   5375  1    !    FILE_ADDRESS - Address of file specification string to be normalized
  7936. ;   5376  1    !
  7937. ;   5377  1    !    FILE_LENGTH - Length of file specification
  7938. ;   5378  1    !
  7939. ;   5379  1    !    NAME_LENGTH - Maximum length desired for "name" portion.
  7940. ;   5380  1    !
  7941. ;   5381  1    !    TYPE_LENGTH - Maximum length desired for "type" portion.
  7942. ;   5382  1    !
  7943. ;   5383  1    !    With both NAME_LENGTH and TYPE_LENGTH, a negative value indicates
  7944. ;   5384  1    !    unlimited lenght.
  7945. ;   5385  1    !
  7946. ;   5386  1    ! IMPLICIT INPUTS:
  7947. ;   5387  1    !
  7948. ;   5388  1    !    None.
  7949. ;   5389  1    !
  7950. ;   5390  1    ! OUPTUT PARAMETERS:
  7951. ;   5391  1    !
  7952. ;   5392  1    !    FILE_LENGTH - The length of the resulting file spec
  7953. ;   5393  1    !
  7954. ;   5394  1    !    NAME_LENGTH - The actual length of the resulting file name
  7955. ;   5395  1    !
  7956. ;   5396  1    !    TYPE_LENGTH - The actual length of the resulting file type
  7957. ;   5397  1    !
  7958. ;   5398  1    ! IMPLICIT OUTPUTS:
  7959. ;   5399  1    !
  7960. ;   5400  1    !    None.
  7961. ;   5401  1    !
  7962. ;   5402  1    ! COMPLETION CODES:
  7963. ;   5403  1    !
  7964. ;   5404  1    !    None.
  7965. ;   5405  1    !
  7966. ;   5406  1    ! SIDE EFFECTS:
  7967. ;   5407  1    !
  7968. ;   5408  1    !    None.
  7969. ;   5409  1    !
  7970. ;   5410  1    !--
  7971. ;   5411  1    
  7972. ;   5412  2        BEGIN
  7973. ;   5413  2    
  7974. ;   5414  2        LOCAL
  7975. ;   5415  2        CH,                    ! Character being processed
  7976. ;   5416  2        POINTER,                ! Pointer to file spec
  7977. ;   5417  2        WRT_POINTER,                ! Pointer to write file spec
  7978. ;   5418  2        WRT_SIZE,
  7979. ;   5419  2        FIRST_PERIOD,                ! Flag we have seen a period
  7980. ;   5420  2        IGNORE_BAD,                ! Flag we should ignore bad characters
  7981. ;   5421  2        BAD_CHAR,                ! Flag this character was bad
  7982. ;   5422  2        FILE_CTR,                ! Counter for overall length
  7983. ;   5423  2        NAME_CTR,                ! Counter for name characters
  7984. ;   5424  2        TYPE_CTR;                ! Counter for type characters
  7985. ;   5425  2    
  7986. ;   5426  2        FILE_CTR = 0;
  7987. ;   5427  2        NAME_CTR = 0;
  7988. ;   5428  2        TYPE_CTR = 0;
  7989. ;   5429  2        WRT_SIZE = 0;
  7990. ;   5430  2        FIRST_PERIOD = FALSE;            ! No periods yet
  7991. ;   5431  2        POINTER = CH$PTR (.FILE_ADDRESS);        ! Set up pointer to file name
  7992. ;   5432  2        WRT_POINTER = .POINTER;
  7993. ;   5433  2    
  7994. ;   5434  2        IF .NAME_LENGTH EQL 0 THEN FIRST_PERIOD = TRUE;    ! Pretend we did name already
  7995. ;   5435  2    
  7996. ;   5436  2        IGNORE_BAD = FALSE;
  7997. ;   5437  2    
  7998. ;   5438  2        IF .NAME_LENGTH GTR 0
  7999. ;   5439  2        THEN
  8000. ;   5440  3        BEGIN
  8001. ;   5441  3    
  8002. ;   5442  3        DECR I FROM ..FILE_LENGTH TO 0 DO
  8003. ;   5443  3    
  8004. ;   5444  3            IF CH$RCHAR_A (POINTER) EQL %C'.'
  8005. ;   5445  3            THEN
  8006. ;   5446  4            BEGIN
  8007. ;   5447  4            IGNORE_BAD = TRUE;
  8008. ;   5448  4            EXITLOOP;
  8009. ;   5449  3            END;
  8010. ;   5450  3    
  8011. ;   5451  2        END;
  8012. ;   5452  2    
  8013. ;   5453  2        POINTER = .WRT_POINTER;
  8014. ;   5454  2    
  8015. ;   5455  2        WHILE .FILE_CTR LSS ..FILE_LENGTH DO
  8016. ;   5456  3        BEGIN
  8017. ;   5457  3        CH = CH$RCHAR_A (POINTER);        ! Get a character
  8018. ;   5458  3        FILE_CTR = .FILE_CTR + 1;
  8019. ;   5459  3    
  8020. ;   5460  4        IF (.CH LSS %C'0' AND (.CH NEQ %C'.' OR .FIRST_PERIOD)) OR .CH GTR %C'z' OR (.CH GTR %C'9'
  8021. ;   5461  4            AND .CH LSS %C'A') OR (.CH GTR %C'Z' AND .CH LSS %C'a')
  8022. ;   5462  3        THEN
  8023. ;   5463  4            BEGIN
  8024. ;   5464  4            BAD_CHAR = TRUE;
  8025. ;   5465  4            CH = %C'X';
  8026. ;   5466  4            END
  8027. ;   5467  3        ELSE
  8028. ;   5468  4            BEGIN
  8029. ;   5469  4            BAD_CHAR = FALSE;
  8030. ;   5470  4    
  8031. ;   5471  4            IF .CH GEQ %C'a' THEN CH = .CH - (%C'a' - %C'A');
  8032. ;   5472  4    
  8033. ;   5473  3            END;
  8034. ;   5474  3    
  8035. ;   5475  3        IF .CH EQL %C'.'
  8036. ;   5476  3        THEN
  8037. ;   5477  4            BEGIN
  8038. ;   5478  4            FIRST_PERIOD = TRUE;
  8039. ;   5479  4            CH$WCHAR_A (.CH, WRT_POINTER);
  8040. ;   5480  4            WRT_SIZE = .WRT_SIZE + 1;
  8041. ;   5481  4            END
  8042. ;   5482  3        ELSE
  8043. ;   5483  3    
  8044. ;   5484  3            IF NOT .BAD_CHAR OR NOT .IGNORE_BAD
  8045. ;   5485  3            THEN
  8046. ;   5486  3    
  8047. ;   5487  3            IF NOT .FIRST_PERIOD
  8048. ;   5488  3            THEN
  8049. ;   5489  4                BEGIN
  8050. ;   5490  4    
  8051. ;   5491  4                IF .NAME_LENGTH LSS 0 OR .NAME_CTR LSS .NAME_LENGTH
  8052. ;   5492  4                THEN
  8053. ;   5493  5                BEGIN
  8054. ;   5494  5                NAME_CTR = .NAME_CTR + 1;
  8055. ;   5495  5                WRT_SIZE = .WRT_SIZE + 1;
  8056. ;   5496  5                CH$WCHAR_A (.CH, WRT_POINTER);
  8057. ;   5497  4                END;
  8058. ;   5498  4    
  8059. ;   5499  4                END
  8060. ;   5500  3            ELSE
  8061. ;   5501  3    
  8062. ;   5502  3                IF .TYPE_LENGTH LSS 0 OR .TYPE_CTR LSS .TYPE_LENGTH
  8063. ;   5503  3                THEN
  8064. ;   5504  4                BEGIN
  8065. ;   5505  4                TYPE_CTR = .TYPE_CTR + 1;
  8066. ;   5506  4                WRT_SIZE = .WRT_SIZE + 1;
  8067. ;   5507  4                CH$WCHAR_A (.CH, WRT_POINTER);
  8068. ;   5508  3                END;
  8069. ;   5509  3    
  8070. ;   5510  2        END;
  8071. ;   5511  2    
  8072. ;   5512  2        .FILE_LENGTH = .WRT_SIZE;
  8073. ;   5513  2        CH$WCHAR_A (CHR_NUL, WRT_POINTER);
  8074. ;   5514  1        END;                    ! End of NORMALIZE_FILE
  8075.  
  8076.  
  8077.  
  8078.  
  8079.  
  8080. ;NORMALIZE_FILE
  8081. U.27:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10>  ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10     5358                    07FC   00000
  8082.     CLRQ    R8                 ;NAME_CTR                   5427                  58  7C   00002
  8083.     CLRL    R7                 ;TYPE_CTR                   5428                  57  D4   00004
  8084.     CLRQ    R4                 ;FIRST_PERIOD                   5430                  54  7C   00006
  8085.     MOVL    4(AP), R6             ;FILE_ADDRESS, POINTER               5431            56    04   AC  D0   00008
  8086.     MOVL    R6, R1                 ;POINTER, WRT_POINTER               5432            51         56  D0   0000C
  8087.     MOVL    12(AP), R3             ;NAME_LENGTH, R3               5434            53    0C   AC  D0   0000F
  8088.     BNEQ    1$                 ;1$                                               03  12   00013
  8089.     MOVL    #1, R4                 ;#1, FIRST_PERIOD                                 54         01  D0   00015
  8090. 1$:    CLRL    R10                 ;IGNORE_BAD                   5436                  5A  D4   00018
  8091.     TSTL    R3                 ;R3                       5438                  53  D5   0001A
  8092.     BLEQ    4$                 ;4$                                               17  15   0001C
  8093.     ADDL3   #1, @8(AP), R0             ;#1, @FILE_LENGTH, I               5442       08   BC         01  C1   0001E
  8094.                          ;                                         50       00022
  8095.     BRB     3$                 ;3$                                               0D  11   00023
  8096. 2$:    MOVZBL  (R6)+, R2             ;(POINTER)+, R2               5444            52         86  9A   00025
  8097.     CMPB    R2, #46                 ;R2, #46                                     2E         52  91   00028
  8098.     BNEQ    3$                 ;3$                                               05  12   0002B
  8099.     MOVL    #1, R10                 ;#1, IGNORE_BAD               5447            5A         01  D0   0002D
  8100.     BRB     4$                 ;4$                       5448                  03  11   00030
  8101. 3$:    SOBGEQ  R0, 2$                 ;I, 2$                       5442            F0         50  F4   00032
  8102. 4$:    MOVL    R1, R6                 ;WRT_POINTER, POINTER               5453            56         51  D0   00035
  8103. 5$:    CMPL    R9, @8(AP)             ;FILE_CTR, @FILE_LENGTH           5455       08   BC         59  D1   00038
  8104.     BLSS    6$                 ;6$                                               03  19   0003C
  8105.     BRW     19$                 ;19$                                             008B  31   0003E
  8106. 6$:    MOVZBL  (R6)+, R0             ;(POINTER)+, CH               5457            50         86  9A   00041
  8107.     INCL    R9                 ;FILE_CTR                   5458                  59  D6   00044
  8108.     CMPL    R0, #48                 ;CH, #48                   5460            30         50  D1   00046
  8109.     BGEQ    7$                 ;7$                                               08  18   00049
  8110.     CMPL    R0, #46                 ;CH, #46                                     2E         50  D1   0004B
  8111.     BNEQ    9$                 ;9$                                               2C  12   0004E
  8112.     BLBS    R4, 9$                 ;FIRST_PERIOD, 9$                                 29         54  E8   00050
  8113. 7$:    CMPL    R0, #122             ;CH, #122                          0000007A   8F         50  D1   00053
  8114.     BGTR    9$                 ;9$                                               20  14   0005A
  8115.     CMPL    R0, #57                 ;CH, #57                                     39         50  D1   0005C
  8116.     BLEQ    8$                 ;8$                                               09  15   0005F
  8117.     CMPL    R0, #65                 ;CH, #65                   5461 00000041   8F         50  D1   00061
  8118.     BLSS    9$                 ;9$                                               12  19   00068
  8119. 8$:    CMPL    R0, #90                 ;CH, #90                          0000005A   8F         50  D1   0006A
  8120.     BLEQ    10$                 ;10$                                               12  15   00071
  8121.     CMPL    R0, #97                 ;CH, #97                          00000061   8F         50  D1   00073
  8122.     BGEQ    10$                 ;10$                                               09  18   0007A
  8123. 9$:    MOVL    #1, R2                 ;#1, BAD_CHAR                   5464            52         01  D0   0007C
  8124.     MOVZBL  #88, R0                 ;#88, CH                   5465            50    58   8F  9A   0007F
  8125.     BRB     11$                 ;11$                                               0E  11   00083
  8126. 10$:    CLRL    R2                 ;BAD_CHAR                   5469                  52  D4   00085
  8127.     CMPL    R0, #97                 ;CH, #97                   5471 00000061   8F         50  D1   00087
  8128.     BLSS    11$                 ;11$                                               03  19   0008E
  8129.     SUBL2   #32, R0                 ;#32, CH                                     50         20  C2   00090
  8130. 11$:    CMPL    R0, #46                 ;CH, #46                   5475            2E         50  D1   00093
  8131.     BNEQ    13$                 ;13$                                               0A  12   00096
  8132.     MOVL    #1, R4                 ;#1, FIRST_PERIOD               5478            54         01  D0   00098
  8133.     MOVB    R0, (R1)+             ;CH, (WRT_POINTER)+               5479            81         50  90   0009B
  8134.     INCL    R5                 ;WRT_SIZE                   5480                  55  D6   0009E
  8135. 12$:    BRB     5$                 ;5$                                               96  11   000A0
  8136. 13$:    BLBC    R2, 14$                 ;BAD_CHAR, 14$                   5484            03         52  E9   000A2
  8137.     BLBS    R10, 5$                 ;IGNORE_BAD, 5$                                 90         5A  E8   000A5
  8138. 14$:    BLBS    R4, 16$                 ;FIRST_PERIOD, 16$               5487            0D         54  E8   000A8
  8139.     TSTL    R3                 ;R3                       5491                  53  D5   000AB
  8140.     BLSS    15$                 ;15$                                               05  19   000AD
  8141.     CMPL    R8, R3                 ;NAME_CTR, R3                                     53         58  D1   000AF
  8142.     BGEQ    5$                 ;5$                                               84  18   000B2
  8143. 15$:    INCL    R8                 ;NAME_CTR                   5494                  58  D6   000B4
  8144.     BRB     18$                 ;18$                       5495                  0D  11   000B6
  8145. 16$:    TSTL    16(AP)                 ;TYPE_LENGTH                   5502             10   AC  D5   000B8
  8146.     BLSS    17$                 ;17$                                               06  19   000BB
  8147.     CMPL    R7, 16(AP)             ;TYPE_CTR, TYPE_LENGTH                            10   AC         57  D1   000BD
  8148.     BGEQ    12$                 ;12$                                               DD  18   000C1
  8149. 17$:    INCL    R7                 ;TYPE_CTR                   5505                  57  D6   000C3
  8150. 18$:    INCL    R5                 ;WRT_SIZE                   5506                  55  D6   000C5
  8151.     MOVB    R0, (R1)+             ;CH, (WRT_POINTER)+               5507            81         50  90   000C7
  8152.     BRB     12$                 ;12$                                               D4  11   000CA
  8153. 19$:    MOVL    R5, @8(AP)             ;WRT_SIZE, @FILE_LENGTH           5512       08   BC         55  D0   000CC
  8154.     CLRB    (R1)+                 ;(WRT_POINTER)+               5513                  81  94   000D0
  8155.     RET                      ;                       5514                  04   000D2
  8156.  
  8157. ; Routine Size:  211 bytes,    Routine Base:  $CODE$ + 20EF
  8158.  
  8159.  
  8160. ;   5515  1     %SBTTL 'Buffer filling -- Main routine'
  8161. ;   5516  1    ROUTINE BFR_FILL (FIRST_FLAG) =
  8162. ;   5517  1    
  8163. ;   5518  1    !++
  8164. ;   5519  1    ! FUNCTIONAL DESCRIPTION:
  8165. ;   5520  1    !
  8166. ;   5521  1    !    This routine will fill the buffer with data from the file.  It
  8167. ;   5522  1    !    will do all the quoting that is required.
  8168. ;   5523  1    !
  8169. ;   5524  1    ! CALLING SEQUENCE:
  8170. ;   5525  1    !
  8171. ;   5526  1    !    EOF_FLAG = BFR_FILL(.FIRST_FLAG);
  8172. ;   5527  1    !
  8173. ;   5528  1    ! INPUT PARAMETERS:
  8174. ;   5529  1    !
  8175. ;   5530  1    !    FIRST_FLAG - Flag whether first call for this file
  8176. ;   5531  1    !
  8177. ;   5532  1    ! IMPLICIT INPUTS:
  8178. ;   5533  1    !
  8179. ;   5534  1    !    None.
  8180. ;   5535  1    !
  8181. ;   5536  1    ! OUTPUT PARAMETERS:
  8182. ;   5537  1    !
  8183. ;   5538  1    !    True - Buffer filled may be at end of file.
  8184. ;   5539  1    !    False - At end of file.
  8185. ;   5540  1    !
  8186. ;   5541  1    ! IMPLICIT OUTPUTS:
  8187. ;   5542  1    !
  8188. ;   5543  1    !    Number of characters stored in the buffer.
  8189. ;   5544  1    !
  8190. ;   5545  1    ! COMPLETION CODES:
  8191. ;   5546  1    !
  8192. ;   5547  1    !    None.
  8193. ;   5548  1    !
  8194. ;   5549  1    ! SIDE EFFECTS:
  8195. ;   5550  1    !
  8196. ;   5551  1    !    None.
  8197. ;   5552  1    !
  8198. ;   5553  1    !--
  8199. ;   5554  1    
  8200. ;   5555  2        BEGIN
  8201. ;   5556  2    
  8202. ;   5557  2        LITERAL
  8203. ;   5558  2        NO_CHAR = -1,                ! No character next
  8204. ;   5559  2        EOF_CHAR = -2;                ! EOF seen
  8205. ;   5560  2    
  8206. ;   5561  2        LOCAL
  8207. ;   5562  2        I,                    ! Temp loop index
  8208. ;   5563  2        MAX_SIZE,                ! Maximum size of data
  8209. ;   5564  2        POINTER;                ! Pointer into the message buffer
  8210. ;   5565  2    
  8211. ;   5566  2        OWN
  8212. ;   5567  2        NEXT_CHR,                ! Saved character
  8213. ;   5568  2        STATUS,                    ! Status value
  8214. ;   5569  2        REPEAT_COUNT,                ! Number of times character repeated
  8215. ;   5570  2        CHAR_8_BIT,                ! 8 bit character from file
  8216. ;   5571  2        CHRS : VECTOR [5],            ! String needed to represent character
  8217. ;   5572  2        CHR_IDX,                ! Index into CHRS
  8218. ;   5573  2        OLD_CHAR_8_BIT,                ! Previous 8-bit character
  8219. ;   5574  2        OLD_CHRS : VECTOR [5],            ! String for previous character
  8220. ;   5575  2        OLD_CHR_IDX;                ! Index for previous character
  8221. ;   5576  2    
  8222. ;   5577  2        ROUTINE GET_QUOTED_CHAR =
  8223. ;   5578  2    !
  8224. ;   5579  2    ! This routine gets a character from the file and returns both
  8225. ;   5580  2    ! the character and the string needed to represent the character
  8226. ;   5581  2    ! if it needs quoting.
  8227. ;   5582  2    !
  8228. ;   5583  3        BEGIN
  8229. ;   5584  3    
  8230. ;   5585  3        IF .NEXT_CHR GEQ 0
  8231. ;   5586  3        THEN
  8232. ;   5587  4            BEGIN
  8233. ;   5588  4            CHAR_8_BIT = .NEXT_CHR;
  8234. ;   5589  4            NEXT_CHR = NO_CHAR;
  8235. ;   5590  4            STATUS = KER_NORMAL;
  8236. ;   5591  4            END
  8237. ;   5592  3        ELSE
  8238. ;   5593  3    
  8239. ;   5594  3            IF .NEXT_CHR EQL NO_CHAR
  8240. ;   5595  3            THEN
  8241. ;   5596  3            STATUS = (.GET_CHR_ROUTINE) (CHAR_8_BIT)
  8242. ;   5597  3            ELSE
  8243. ;   5598  3            STATUS = KER_EOF;
  8244. ;   5599  3    
  8245. ;   5600  3        IF .STATUS EQL KER_NORMAL
  8246. ;   5601  3        THEN
  8247. ;   5602  4            BEGIN
  8248. ;   5603  4    !
  8249. ;   5604  4    ! Determine if we should just quote the character
  8250. ;   5605  4    !    Either:
  8251. ;   5606  4    !        Character is a delete (177 octal)
  8252. ;   5607  4    !    or    Character is a control character (less than 40 octal)
  8253. ;   5608  4    !    or    Character is a quote character
  8254. ;   5609  4    !    or    Character is the repeat character and doing repeat compression
  8255. ;   5610  4    !    or    Character is an eight bit quote character and doing eight bit
  8256. ;   5611  4    !          quoting.
  8257. ;   5612  4    !
  8258. ;   5613  4    
  8259. ;   5614  5            IF ((.CHAR_8_BIT AND %O'177') LSS %C' ') OR ((.CHAR_8_BIT AND %O'177') EQL CHR_DEL) OR (
  8260. ;   5615  7            (.CHAR_8_BIT AND %O'177') EQL .RCV_QUOTE_CHR) OR (.FLAG_REPEAT AND ((.CHAR_8_BIT AND
  8261. ;   5616  6            %O'177') EQL .REPT_CHR)) OR (.FLAG_8QUOTE AND ((.CHAR_8_BIT AND %O'177') EQL
  8262. ;   5617  5            .SEND_8QUOTE_CHR))
  8263. ;   5618  4            THEN
  8264. ;   5619  5            BEGIN
  8265. ;   5620  5    !
  8266. ;   5621  5    ! If the character is a control character or delete we must do a CTL(Character)
  8267. ;   5622  5    ! so it is something that we can be sure we can send.
  8268. ;   5623  5    !
  8269. ;   5624  5    
  8270. ;   5625  6            IF ((.CHAR_8_BIT AND %O'177') LSS %C' ') OR ((.CHAR_8_BIT AND %O'177') EQL CHR_DEL)
  8271. ;   5626  5            THEN
  8272. ;   5627  6                CHRS [0] = CTL (.CHAR_8_BIT)
  8273. ;   5628  5            ELSE
  8274. ;   5629  5                CHRS [0] = .CHAR_8_BIT;
  8275. ;   5630  5    
  8276. ;   5631  5            CHR_IDX = 1;
  8277. ;   5632  5            CHRS [1] = .RCV_QUOTE_CHR;    ![035] Use character we said we would send
  8278. ;   5633  5            END
  8279. ;   5634  4            ELSE
  8280. ;   5635  5            BEGIN
  8281. ;   5636  5            CHR_IDX = 0;
  8282. ;   5637  5            CHRS [0] = .CHAR_8_BIT;
  8283. ;   5638  4            END;
  8284. ;   5639  4    
  8285. ;   5640  4            END
  8286. ;   5641  3        ELSE
  8287. ;   5642  3    
  8288. ;   5643  3            IF .STATUS NEQ KER_EOF THEN KRM_ERROR (.STATUS);    ! Report error
  8289. ;   5644  3    
  8290. ;   5645  3        RETURN .STATUS;
  8291. ;   5646  2        END;
  8292.  
  8293.  
  8294.  
  8295.     .PSECT  $OWN$,NOEXE,2
  8296.  
  8297. ;NEXT_CHR
  8298. U.83:    .BLKB   4                                       ;                      00850
  8299. ;STATUS
  8300. U.84:    .BLKB   4                                       ;                      00854
  8301. ;REPEAT_COUNT
  8302. U.85:    .BLKB   4                                       ;                      00858
  8303. ;CHAR_8_BIT
  8304. U.86:    .BLKB   4                                       ;                      0085C
  8305. ;CHRS
  8306. U.87:    .BLKB   20                                       ;                      00860
  8307. ;CHR_IDX
  8308. U.88:    .BLKB   4                                       ;                      00874
  8309. ;OLD_CHAR_8_BIT
  8310. U.89:    .BLKB   4                                       ;                      00878
  8311. ;OLD_CHRS
  8312. U.90:    .BLKB   20                                       ;                      0087C
  8313. ;OLD_CHR_IDX
  8314. U.91:    .BLKB   4                                       ;                      00890
  8315.  
  8316.  
  8317.  
  8318.     .PSECT  $CODE$,NOWRT,2
  8319.  
  8320. ;GET_QUOTED_CHAR
  8321. U.92:    .WORD   ^M<R2,R3>             ;Save R2,R3                   5577                    000C   00000
  8322.     MOVAB   G^RCV_QUOTE_CHR, R3         ;RCV_QUOTE_CHR, R3                                 53 00000000G  00  9E   00002
  8323.     MOVAB   G^U.84, R2             ;U.84, R2                                     52 00000000'  00  9E   00009
  8324.     MOVL    -4(R2), R0             ;NEXT_CHR, R0                   5585            50    FC   A2  D0   00010
  8325.     BLSS    1$                 ;1$                                               11  19   00014
  8326.     MOVL    R0, 8(R2)             ;R0, CHAR_8_BIT               5588       08   A2         50  D0   00016
  8327.     MNEGL   #1, -4(R2)             ;#1, NEXT_CHR                   5589       FC   A2         01  CE   0001A
  8328.     MOVL    #134316043, (R2)         ;#134316043, STATUS               5590            62 0801800B   8F  D0   0001E
  8329.     BRB     3$                 ;3$                                               1F  11   00025
  8330. 1$:    CMPL    R0, #-1                 ;R0, #-1                   5594 FFFFFFFF   8F         50  D1   00027
  8331.     BNEQ    2$                 ;2$                                               0F  12   0002E
  8332.     MOVL    -12(R2), R0             ;GET_CHR_ROUTINE, R0               5596            50    F4   A2  D0   00030
  8333.     PUSHAB  8(R2)                 ;CHAR_8_BIT                                      08   A2  9F   00034
  8334.     CALLS   #1, (R0)             ;#1, (R0)                                     60         01  FB   00037
  8335.     MOVL    R0, (R2)             ;R0, STATUS                                     62         50  D0   0003A
  8336.     BRB     3$                 ;3$                                               07  11   0003D
  8337. 2$:    MOVL    #134316131, (R2)         ;#134316131, STATUS               5598            62 08018063   8F  D0   0003F
  8338. 3$:    MOVL    (R2), R0             ;STATUS, R0                   5600            50         62  D0   00046
  8339.     CMPL    R0, #134316043             ;R0, #134316043                      0801800B   8F         50  D1   00049
  8340.     BNEQ    11$                 ;11$                                               6F  12   00050
  8341.     MOVL    8(R2), R1             ;CHAR_8_BIT, R1               5614            51    08   A2  D0   00052
  8342.     CLRL    R0                 ;R0                                               50  D4   00056
  8343.     CMPZV   #0, #7, R1, #32             ;#0, #7, R1, #32                                 07         00  ED   00058
  8344.                          ;                                   20         51       0005B
  8345.     BGEQ    4$                 ;4$                                               04  18   0005D
  8346.     INCL    R0                 ;R0                                               50  D6   0005F
  8347.     BRB     6$                 ;6$                                               2E  11   00061
  8348. 4$:    CMPZV   #0, #7, R1, #127         ;#0, #7, R1, #127                                 07         00  ED   00063
  8349.                          ;                        0000007F   8F         51       00066
  8350.     BEQL    6$                 ;6$                                               23  13   0006C
  8351.     CMPZV   #0, #7, R1, (R3)         ;#0, #7, R1, RCV_QUOTE_CHR           5615            07         00  ED   0006E
  8352.                          ;                                   63         51       00071
  8353.     BEQL    6$                 ;6$                                               1C  13   00073
  8354.     BLBC    -2080(R2), 5$             ;FLAG_REPEAT, 5$                                 09     F7E0   C2  E9   00075
  8355.     CMPZV   #0, #7, R1, -2128(R2)         ;#0, #7, R1, REPT_CHR               5616            07         00  ED   0007A
  8356.                          ;                            F7B0   C2         51       0007D
  8357.     BEQL    6$                 ;6$                                               0E  13   00081
  8358. 5$:    BLBC    -2084(R2), 10$             ;FLAG_8QUOTE, 10$                                 30     F7DC   C2  E9   00083
  8359.     CMPZV   #0, #7, R1, -2100(R2)         ;#0, #7, R1, SEND_8QUOTE_CHR           5617            07         00  ED   00088
  8360.                          ;                            F7CC   C2         51       0008B
  8361.     BNEQ    10$                 ;10$                                               27  12   0008F
  8362. 6$:    BLBS    R0, 7$                 ;R0, 7$                   5625            0B         50  E8   00091
  8363.     CMPZV   #0, #7, R1, #127         ;#0, #7, R1, #127                                 07         00  ED   00094
  8364.                          ;                        0000007F   8F         51       00097
  8365.     BNEQ    8$                 ;8$                                               0B  12   0009D
  8366. 7$:    XORL3   #64, R1, 12(R2)             ;#64, R1, CHRS                   5627            51 00000040   8F  CD   0009F
  8367.                          ;                                    0C   A2       000A6
  8368.     BRB     9$                 ;9$                                               04  11   000A8
  8369. 8$:    MOVL    R1, 12(R2)             ;R1, CHRS                   5629       0C   A2         51  D0   000AA
  8370. 9$:    MOVL    #1, 32(R2)             ;#1, CHR_IDX                   5631       20   A2         01  D0   000AE
  8371.     MOVL    (R3), 16(R2)             ;RCV_QUOTE_CHR, CHRS+4               5632       10   A2         63  D0   000B2
  8372.     BRB     12$                 ;12$                                               1B  11   000B6
  8373. 10$:    CLRL    32(R2)                 ;CHR_IDX                   5636             20   A2  D4   000B8
  8374.     MOVL    R1, 12(R2)             ;R1, CHRS                   5637       0C   A2         51  D0   000BB
  8375.     BRB     12$                 ;12$                                               12  11   000BF
  8376. 11$:    CMPL    R0, #134316131             ;R0, #134316131               5643 08018063   8F         50  D1   000C1
  8377.     BEQL    12$                 ;12$                                               09  13   000C8
  8378.     PUSHL   R0                 ;R0                                               50  DD   000CA
  8379.     CALLS   #1, G^KRM_ERROR             ;#1, KRM_ERROR                          00000000G  00         01  FB   000CC
  8380. 12$:    MOVL    (R2), R0             ;STATUS, R0                   5645            50         62  D0   000D3
  8381.     RET                      ;                                               04   000D6
  8382.  
  8383. ; Routine Size:  215 bytes,    Routine Base:  $CODE$ + 21C2
  8384.  
  8385.  
  8386. ;   5647  2        ROUTINE GET_8_QUOTED_CHAR =
  8387. ;   5648  2    !
  8388. ;   5649  2    ! This routine will get the quoted representation of a character
  8389. ;   5650  2    ! (by calling GET_QUOTED_CHAR), and return the 8th-bit quoted
  8390. ;   5651  2    ! representation.
  8391. ;   5652  2    !
  8392. ;   5653  3        BEGIN
  8393. ;   5654  3    
  8394. ;   5655  3        IF (STATUS = GET_QUOTED_CHAR ()) EQL KER_NORMAL
  8395. ;   5656  3        THEN
  8396. ;   5657  4            BEGIN
  8397. ;   5658  4    !
  8398. ;   5659  4    ! Determine if we must quote the eighth bit (parity bit on)
  8399. ;   5660  4    !
  8400. ;   5661  4    
  8401. ;   5662  5            IF (((.CHRS [0] AND %O'177') NEQ .CHRS [0]) AND .FLAG_8QUOTE)
  8402. ;   5663  4            THEN
  8403. ;   5664  5            BEGIN
  8404. ;   5665  5            CHRS [0] = .CHRS [0] AND %O'177';
  8405. ;   5666  5            CHR_IDX = .CHR_IDX + 1;
  8406. ;   5667  5            CHRS [.CHR_IDX] = .SEND_8QUOTE_CHR;
  8407. ;   5668  4            END;
  8408. ;   5669  4    
  8409. ;   5670  3            END;
  8410. ;   5671  3    
  8411. ;   5672  3        RETURN .STATUS;
  8412. ;   5673  2        END;
  8413.  
  8414.  
  8415.  
  8416.  
  8417.  
  8418. ;GET_8_QUOTED_CHAR
  8419. U.93:    .WORD   ^M<R2>                 ;Save R2                   5647                    0004   00000
  8420.     MOVAB   G^U.87, R2             ;U.87, R2                                     52 00000000'  00  9E   00002
  8421.     CALLS   #0, W^U.92             ;#0, U.92                   5655     FF1B   CF         00  FB   00009
  8422.     MOVL    R0, -12(R2)             ;R0, STATUS                                F4   A2         50  D0   0000E
  8423.     CMPL    R0, #134316043             ;R0, #134316043                      0801800B   8F         50  D1   00012
  8424.     BNEQ    1$                 ;1$                                               21  12   00019
  8425.     MOVL    (R2), R0             ;CHRS, R0                   5662            50         62  D0   0001B
  8426.     CMPZV   #0, #7, R0, R0             ;#0, #7, R0, R0                                 07         00  ED   0001E
  8427.                          ;                                   50         50       00021
  8428.     BEQL    1$                 ;1$                                               17  13   00023
  8429.     BLBC    -2096(R2), 1$             ;FLAG_8QUOTE, 1$                                 12     F7D0   C2  E9   00025
  8430.     EXTZV   #0, #7, (R2), (R2)         ;#0, #7, CHRS, CHRS               5665            07         00  EF   0002A
  8431.                          ;                                   62         62       0002D
  8432.     INCL    20(R2)                 ;CHR_IDX                   5666             14   A2  D6   0002F
  8433.     MOVL    20(R2), R0             ;CHR_IDX, R0                   5667            50    14   A2  D0   00032
  8434.     MOVL    -2112(R2), (R2)[R0]         ;SEND_8QUOTE_CHR, CHRS[R0]                           6240     F7C0   C2  D0   00036
  8435. 1$:    MOVL    -12(R2), R0             ;STATUS, R0                   5672            50    F4   A2  D0   0003C
  8436.     RET                      ;                                               04   00040
  8437.  
  8438. ; Routine Size:  65 bytes,    Routine Base:  $CODE$ + 2299
  8439.  
  8440.  
  8441. ;   5674  2    !
  8442. ;   5675  2    ! Start of code for BFR_FILL
  8443. ;   5676  2    !
  8444. ;   5677  2    ! Initialize pointer and count
  8445. ;   5678  2    !
  8446. ;   5679  2        SIZE = 0;
  8447. ;   5680  2        IF .SEND_PKT_SIZE GTR 94                           ! [108]
  8448. ;   5681  2        THEN                                   ! [108]
  8449. ;   5682  3        BEGIN                                   ! [108]
  8450. ;   5683  3        POINTER = CH$PTR (SND_MSG, PKT_MSGX, CHR_SIZE);               ! [108]
  8451. ;   5684  3        MAX_SIZE = .SEND_PKT_SIZE - PKT_MSGX + 1 - (.BLK_CHK_TYPE - CHK_1CHAR);
  8452. ;   5685  3        END                                   ! [108]
  8453. ;   5686  2        ELSE                                   ! [108]
  8454. ;   5687  3        BEGIN                                   ! [108]
  8455. ;   5688  3        POINTER = CH$PTR (SND_MSG, PKT_MSG, CHR_SIZE);               ! [108]
  8456. ;   5689  3        MAX_SIZE = .SEND_PKT_SIZE - PKT_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR);
  8457. ;   5690  2            END;                                   ! [108]
  8458. ;   5691  2    !
  8459. ;   5692  2    ! If last call got an error or eof, return it now
  8460. ;   5693  2    !
  8461. ;   5694  2    
  8462. ;   5695  2        IF NOT .FIRST_FLAG AND (.STATUS NEQ KER_NORMAL) THEN RETURN .STATUS;
  8463. ;   5696  2    
  8464. ;   5697  2    !
  8465. ;   5698  2    ! If first time for a file prime the pump with the first character.
  8466. ;   5699  2    !
  8467. ;   5700  2    
  8468. ;   5701  2        IF .FIRST_FLAG
  8469. ;   5702  2        THEN
  8470. ;   5703  3        BEGIN
  8471. ;   5704  3        FIRST_FLAG = FALSE;
  8472. ;   5705  3        NEXT_CHR = -1;                ! No backed up character
  8473. ;   5706  3    
  8474. ;   5707  3        IF .FLAG_8QUOTE THEN STATUS = GET_8_QUOTED_CHAR () ELSE STATUS = GET_QUOTED_CHAR ();
  8475. ;   5708  3    
  8476. ;   5709  3        IF .STATUS NEQ KER_NORMAL THEN RETURN .STATUS;
  8477. ;   5710  3    
  8478. ;   5711  3        OLD_CHAR_8_BIT = .CHAR_8_BIT;
  8479. ;   5712  3    
  8480. ;   5713  3        INCR OLD_CHR_IDX FROM 0 TO .CHR_IDX DO
  8481. ;   5714  3            OLD_CHRS [.OLD_CHR_IDX] = .CHRS [.OLD_CHR_IDX];
  8482. ;   5715  3    
  8483. ;   5716  3        OLD_CHR_IDX = .CHR_IDX;
  8484. ;   5717  3        REPEAT_COUNT = 0;            ! Character was not repeated yet
  8485. ;   5718  3                            ! Will always be incremented
  8486. ;   5719  2        END;
  8487. ;   5720  2    
  8488. ;   5721  2    !
  8489. ;   5722  2    ! Otherwise, loop until we fill buffer
  8490. ;   5723  2    !
  8491. ;   5724  2    
  8492. ;   5725  2        WHILE .SIZE LSS .MAX_SIZE DO         ! Normal exit is via an EXITLOOP
  8493. ;   5726  3        BEGIN
  8494. ;   5727  3    !
  8495. ;   5728  3    ! Check if we are doing run compression
  8496. ;   5729  3    !
  8497. ;   5730  3    
  8498. ;   5731  3        IF .FLAG_REPEAT
  8499. ;   5732  3        THEN
  8500. ;   5733  4            BEGIN
  8501. ;   5734  4    !
  8502. ;   5735  4    ! Here with previous character in OLD_xxx.  As long as we
  8503. ;   5736  4    ! are getting the same character, just count the run.
  8504. ;   5737  4    !
  8505. ;   5738  4    
  8506. ;   5739  4            WHILE (.CHAR_8_BIT EQL .OLD_CHAR_8_BIT) AND (.REPEAT_COUNT LSS 94) DO
  8507. ;   5740  5            BEGIN
  8508. ;   5741  5            REPEAT_COUNT = .REPEAT_COUNT + 1;
  8509. ;   5742  5    
  8510. ;   5743  5            IF .FLAG_8QUOTE THEN STATUS = GET_8_QUOTED_CHAR () ELSE STATUS = GET_QUOTED_CHAR ();
  8511. ;   5744  5    
  8512. ;   5745  5            IF .STATUS NEQ KER_NORMAL
  8513. ;   5746  5            THEN
  8514. ;   5747  5    
  8515. ;   5748  5                IF .STATUS NEQ KER_EOF
  8516. ;   5749  5                THEN
  8517. ;   5750  5                CHAR_8_BIT = NO_CHAR
  8518. ;   5751  5                ELSE
  8519. ;   5752  6                BEGIN
  8520. ;   5753  6                CHAR_8_BIT = EOF_CHAR;
  8521. ;   5754  6                CHR_IDX = -1;
  8522. ;   5755  5                END;
  8523. ;   5756  5    
  8524. ;   5757  4            END;
  8525. ;   5758  4    
  8526. ;   5759  5            IF .OLD_CHR_IDX + 1 + 2 LSS ((.OLD_CHR_IDX + 1)*.REPEAT_COUNT)
  8527. ;   5760  4            THEN
  8528. ;   5761  5            BEGIN
  8529. ;   5762  5    
  8530. ;   5763  5            IF .SIZE + .OLD_CHR_IDX + 1 + 2 GTR .MAX_SIZE
  8531. ;   5764  5            THEN
  8532. ;   5765  6                BEGIN
  8533. ;   5766  6    
  8534. ;   5767  6                IF .CHAR_8_BIT EQL .OLD_CHAR_8_BIT
  8535. ;   5768  6                THEN
  8536. ;   5769  7                BEGIN
  8537. ;   5770  7                NEXT_CHR = .CHAR_8_BIT;
  8538. ;   5771  7                REPEAT_COUNT = .REPEAT_COUNT - 1;
  8539. ;   5772  6                END;
  8540. ;   5773  6    
  8541. ;   5774  6                IF .CHAR_8_BIT EQL EOF_CHAR
  8542. ;   5775  6                THEN
  8543. ;   5776  7                BEGIN
  8544. ;   5777  7                NEXT_CHR = EOF_CHAR;    ! Remember EOF for next time
  8545. ;   5778  7                STATUS = KER_NORMAL;    ! And give good return now
  8546. ;   5779  6                END;
  8547. ;   5780  6    
  8548. ;   5781  6                EXITLOOP;
  8549. ;   5782  5                END;
  8550. ;   5783  5    
  8551. ;   5784  5            OLD_CHRS [.OLD_CHR_IDX + 1] = CHAR (.REPEAT_COUNT);
  8552. ;   5785  5            OLD_CHRS [.OLD_CHR_IDX + 2] = .REPT_CHR;
  8553. ;   5786  5            OLD_CHR_IDX = .OLD_CHR_IDX + 2;
  8554. ;   5787  5    !
  8555. ;   5788  5    ! Count the number of file characters this represents
  8556. ;   5789  5    !
  8557. ;   5790  5            SMSG_DATA_CHARS = .SMSG_DATA_CHARS + .REPEAT_COUNT - 1;
  8558. ;   5791  5            FILE_CHARS = .FILE_CHARS + .REPEAT_COUNT - 1;
  8559. ;   5792  5            REPEAT_COUNT = 1;        ! Only one time for this string
  8560. ;   5793  4            END;
  8561. ;   5794  4    
  8562. ;   5795  4    !
  8563. ;   5796  4    ! If we don't have enough room for this character, wait till next
  8564. ;   5797  4    ! time.
  8565. ;   5798  4    !
  8566. ;   5799  4    
  8567. ;   5800  4            IF .SIZE + (.OLD_CHR_IDX + 1)*.REPEAT_COUNT GTR .MAX_SIZE
  8568. ;   5801  4            THEN
  8569. ;   5802  5            BEGIN
  8570. ;   5803  5    ! If the next character is the same, the count will get incremented
  8571. ;   5804  5    ! next time we enter, so back it off now.
  8572. ;   5805  5    
  8573. ;   5806  5            IF .CHAR_8_BIT EQL .OLD_CHAR_8_BIT
  8574. ;   5807  5            THEN
  8575. ;   5808  6                BEGIN
  8576. ;   5809  6                NEXT_CHR = .CHAR_8_BIT;
  8577. ;   5810  6                REPEAT_COUNT = .REPEAT_COUNT - 1;
  8578. ;   5811  5                END;
  8579. ;   5812  5    !
  8580. ;   5813  5    ! If this is the last character of the file,
  8581. ;   5814  5    ! remember that for next time, but give good return now.
  8582. ;   5815  5    !
  8583. ;   5816  5            IF .CHAR_8_BIT EQL EOF_CHAR
  8584. ;   5817  5            THEN
  8585. ;   5818  6                BEGIN
  8586. ;   5819  6                NEXT_CHR = EOF_CHAR;
  8587. ;   5820  6                STATUS = KER_NORMAL
  8588. ;   5821  5                END;
  8589. ;   5822  5    
  8590. ;   5823  5            EXITLOOP;
  8591. ;   5824  4            END;
  8592. ;   5825  4    
  8593. ;   5826  4            SMSG_DATA_CHARS = .SMSG_DATA_CHARS + .REPEAT_COUNT;
  8594. ;   5827  4            FILE_CHARS = .FILE_CHARS + .REPEAT_COUNT;
  8595. ;   5828  4    
  8596. ;   5829  4            DECR REPEAT_COUNT FROM .REPEAT_COUNT TO 1 DO
  8597. ;   5830  4    
  8598. ;   5831  4            DECR I FROM .OLD_CHR_IDX TO 0 DO
  8599. ;   5832  5                BEGIN
  8600. ;   5833  5                CH$WCHAR_A (.OLD_CHRS [.I], POINTER);
  8601. ;   5834  5                SIZE = .SIZE + 1;
  8602. ;   5835  4                END;
  8603. ;   5836  4    
  8604. ;   5837  4    !
  8605. ;   5838  4    ! If we had to defer EOF condition, reactivate it now.
  8606. ;   5839  4    !
  8607. ;   5840  4            IF (.CHAR_8_BIT EQL EOF_CHAR) THEN STATUS = KER_EOF;
  8608. ;   5841  4    !
  8609. ;   5842  4    ! If we got an error (or EOF) then exit
  8610. ;   5843  4    !
  8611. ;   5844  4    
  8612. ;   5845  4            IF (.STATUS NEQ KER_NORMAL) THEN EXITLOOP;
  8613. ;   5846  4    
  8614. ;   5847  4    !
  8615. ;   5848  4    ! Otherwise, copy the character which broke the run
  8616. ;   5849  4    !
  8617. ;   5850  4            OLD_CHAR_8_BIT = .CHAR_8_BIT;
  8618. ;   5851  4    
  8619. ;   5852  4            INCR OLD_CHR_IDX FROM 0 TO .CHR_IDX DO
  8620. ;   5853  4            OLD_CHRS [.OLD_CHR_IDX] = .CHRS [.OLD_CHR_IDX];
  8621. ;   5854  4    
  8622. ;   5855  4            OLD_CHR_IDX = .CHR_IDX;
  8623. ;   5856  4            REPEAT_COUNT = 0;
  8624. ;   5857  4            END
  8625. ;   5858  3        ELSE
  8626. ;   5859  3    !
  8627. ;   5860  3    ! Here if we are not doing run compression.  We can do things much
  8628. ;   5861  3    ! easier.
  8629. ;   5862  3    !
  8630. ;   5863  4            BEGIN
  8631. ;   5864  4    
  8632. ;   5865  4            IF (.SIZE + .CHR_IDX + 1) GTR .MAX_SIZE THEN EXITLOOP;
  8633. ;   5866  4    
  8634. ;   5867  4            SMSG_DATA_CHARS = .SMSG_DATA_CHARS + 1;
  8635. ;   5868  4            FILE_CHARS = .FILE_CHARS + 1;
  8636. ;   5869  4    
  8637. ;   5870  4            DECR CHR_IDX FROM .CHR_IDX TO 0 DO
  8638. ;   5871  5            BEGIN
  8639. ;   5872  5            CH$WCHAR_A (.CHRS [.CHR_IDX], POINTER);
  8640. ;   5873  5            SIZE = .SIZE + 1;
  8641. ;   5874  4            END;
  8642. ;   5875  4    
  8643. ;   5876  4            IF .FLAG_8QUOTE THEN STATUS = GET_8_QUOTED_CHAR () ELSE STATUS = GET_QUOTED_CHAR ();
  8644. ;   5877  4    
  8645. ;   5878  4            IF (.STATUS NEQ KER_NORMAL) THEN EXITLOOP;
  8646. ;   5879  4    
  8647. ;   5880  3            END;
  8648. ;   5881  3    
  8649. ;   5882  2        END;
  8650. ;   5883  2    
  8651. ;   5884  2    ! [108] Return negative size if we use extend packet format
  8652. ;   5885  2    
  8653. ;   5886  2        IF .SEND_PKT_SIZE GTR 94                           ! [108]
  8654. ;   5887  2        THEN                                   ! [108]
  8655. ;   5888  2        SIZE = -.SIZE;                               ! [108]
  8656. ;   5889  2    
  8657. ;   5890  2    !
  8658. ;   5891  2    ! Determine if we really stored anything into the buffer.
  8659. ;   5892  2    !
  8660. ;   5893  2    
  8661. ;   5894  2        IF .SIZE NEQ 0 THEN RETURN KER_NORMAL ELSE RETURN .STATUS;
  8662. ;   5895  2    
  8663. ;   5896  1        END;                    ! End of BFR_FILL
  8664.  
  8665.  
  8666.  
  8667.  
  8668.  
  8669. ;BFR_FILL
  8670. U.29:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8>     ;Save R2,R3,R4,R5,R6,R7,R8           5516                    01FC   00000
  8671.     MOVAB   G^SMSG_DATA_CHARS, R8         ;SMSG_DATA_CHARS, R8                                 58 00000000G  00  9E   00002
  8672.     MOVAB   B^U.93, R7             ;U.93, R7                                     57    B3   AF  9E   00009
  8673.     MOVAB   G^U.52, R6             ;U.52, R6                                     56 00000000'  00  9E   0000D
  8674.     CLRL    (R6)                 ;SIZE                       5679                  66  D4   00014
  8675.     SUBL3   #49, -16(R6), R0         ;#49, BLK_CHK_TYPE, R0               5684       F0   A6         31  C3   00016
  8676.                          ;                                         50       0001A
  8677.     MOVL    -48(R6), R2             ;SEND_PKT_SIZE, R2               5680            52    D0   A6  D0   0001B
  8678.     CMPL    R2, #94                 ;R2, #94                          0000005E   8F         52  D1   0001F
  8679.     BLEQ    1$                 ;1$                                               0F  15   00026
  8680.     MOVAB   1039(R6), R5             ;SND_MSG+7, POINTER               5683            55     040F   C6  9E   00028
  8681.     SUBL3   R0, R2, R0             ;R0, R2, R0                   5684            52         50  C3   0002D
  8682.                          ;                                         50       00030
  8683.     MOVAB   -6(R0), R2             ;-6(R0), MAX_SIZE                                 52    FA   A0  9E   00031
  8684.     BRB     2$                 ;2$                                               0B  11   00035
  8685. 1$:    MOVAB   1036(R6), R5             ;SND_MSG+4, POINTER               5688            55     040C   C6  9E   00037
  8686.     SUBL2   R0, R2                 ;R0, R2                   5689            52         50  C2   0003C
  8687.     SUBL2   #3, R2                 ;#3, MAX_SIZE                                     52         03  C2   0003F
  8688. 2$:    BLBS    4(AP), 4$             ;FIRST_FLAG, 4$               5695            12    04   AC  E8   00042
  8689.     CMPL    2072(R6), #134316043         ;STATUS, #134316043                      0801800B   8F     0818   C6  D1   00046
  8690.     BEQL    3$                 ;3$                                               03  13   0004F
  8691.     BRW     38$                 ;38$                                             021F  31   00051
  8692. 3$:    BLBC    4(AP), 11$             ;FIRST_FLAG, 11$               5701            4C    04   AC  E9   00054
  8693. 4$:    CLRL    4(AP)                 ;FIRST_FLAG                   5704             04   AC  D4   00058
  8694.     MNEGL   #1, 2068(R6)             ;#1, NEXT_CHR                   5705     0814   C6         01  CE   0005B
  8695.     BLBC    -12(R6), 5$             ;FLAG_8QUOTE, 5$               5707            05    F4   A6  E9   00060
  8696.     CALLS   #0, (R7)             ;#0, GET_8_QUOTED_CHAR                                 67         00  FB   00064
  8697.     BRB     6$                 ;6$                                               05  11   00067
  8698. 5$:    CALLS   #0, -215(R7)             ;#0, GET_QUOTED_CHAR                          FF29   C7         00  FB   00069
  8699. 6$:    MOVL    R0, 2072(R6)             ;R0, STATUS                              0818   C6         50  D0   0006E
  8700.     CMPL    R0, #134316043             ;R0, #134316043               5709 0801800B   8F         50  D1   00073
  8701.     BEQL    7$                 ;7$                                               01  13   0007A
  8702.     RET                      ;                                               04   0007C
  8703. 7$:    MOVL    2080(R6), 2108(R6)         ;CHAR_8_BIT, OLD_CHAR_8_BIT           5711     083C   C6     0820   C6  D0   0007D
  8704.     MOVL    2104(R6), R1             ;CHR_IDX, R1                   5713            51     0838   C6  D0   00084
  8705.     MNEGL   #1, R0                 ;#1, OLD_CHR_IDX                                 50         01  CE   00089
  8706.     BRB     9$                 ;9$                                               09  11   0008C
  8707. 8$:    MOVL    2084(R6)[R0], 2112(R6)[R0]     ;CHRS[OLD_CHR_IDX], OLD_CHRS-           5714     0840 C640     0824 C640  D0   0008E
  8708.                          ;[OLD_CHR_IDX]
  8709. 9$:    AOBLEQ  R1, R0, 8$             ;R1, OLD_CHR_IDX, 8$                                 50         51  F3   00097
  8710.                          ;                                         F3       0009A
  8711. 10$:    MOVL    R1, 2132(R6)             ;R1, OLD_CHR_IDX               5716     0854   C6         51  D0   0009B
  8712.     CLRL    2076(R6)             ;REPEAT_COUNT                   5717               081C   C6  D4   000A0
  8713. 11$:    MOVL    (R6), R1             ;SIZE, R1                   5725            51         66  D0   000A4
  8714.     CMPL    R1, R2                 ;R1, MAX_SIZE                                     52         51  D1   000A7
  8715.     BLSS    12$                 ;12$                                               03  19   000AA
  8716.     BRW     36$                 ;36$                                             01AB  31   000AC
  8717. 12$:    BLBS    -8(R6), 13$             ;FLAG_REPEAT, 13$               5731            03    F8   A6  E8   000AF
  8718.     BRW     31$                 ;31$                                             015F  31   000B3
  8719. 13$:    CMPL    2080(R6), 2108(R6)         ;CHAR_8_BIT, OLD_CHAR_8_BIT           5739     083C   C6     0820   C6  D1   000B6
  8720.     BNEQ    17$                 ;17$                                               47  12   000BD
  8721.     CMPL    2076(R6), #94             ;REPEAT_COUNT, #94                      0000005E   8F     081C   C6  D1   000BF
  8722.     BGEQ    17$                 ;17$                                               3C  18   000C8
  8723.     INCL    2076(R6)             ;REPEAT_COUNT                   5741               081C   C6  D6   000CA
  8724.     BLBC    -12(R6), 14$             ;FLAG_8QUOTE, 14$               5743            05    F4   A6  E9   000CE
  8725.     CALLS   #0, (R7)             ;#0, GET_8_QUOTED_CHAR                                 67         00  FB   000D2
  8726.     BRB     15$                 ;15$                                               05  11   000D5
  8727. 14$:    CALLS   #0, -215(R7)             ;#0, GET_QUOTED_CHAR                          FF29   C7         00  FB   000D7
  8728. 15$:    MOVL    R0, 2072(R6)             ;R0, STATUS                              0818   C6         50  D0   000DC
  8729.     CMPL    R0, #134316043             ;R0, #134316043               5745 0801800B   8F         50  D1   000E1
  8730.     BEQL    13$                 ;13$                                               CC  13   000E8
  8731.     CMPL    R0, #134316131             ;R0, #134316131               5748 08018063   8F         50  D1   000EA
  8732.     BEQL    16$                 ;16$                                               07  13   000F1
  8733.     MNEGL   #1, 2080(R6)             ;#1, CHAR_8_BIT               5750     0820   C6         01  CE   000F3
  8734.     BRB     13$                 ;13$                                               BC  11   000F8
  8735. 16$:    MNEGL   #2, 2080(R6)             ;#2, CHAR_8_BIT               5753     0820   C6         02  CE   000FA
  8736.     MNEGL   #1, 2104(R6)             ;#1, CHR_IDX                   5754     0838   C6         01  CE   000FF
  8737.     BRB     13$                 ;13$                                               B0  11   00104
  8738. 17$:    MOVL    2132(R6), R3             ;OLD_CHR_IDX, R3               5759            53     0854   C6  D0   00106
  8739.     MOVAB   3(R3), R4             ;3(R3), R4                                     54    03   A3  9E   0010B
  8740.     MOVAB   1(R3), R1             ;1(R3), R1                                     51    01   A3  9E   0010F
  8741.     MULL3   2076(R6), R1, R0         ;REPEAT_COUNT, R1, R0                                 51     081C   C6  C5   00113
  8742.                          ;                                         50       00118
  8743.     CMPL    R4, R0                 ;R4, R0                                     50         54  D1   00119
  8744.     BGEQ    19$                 ;19$                                               4C  18   0011C
  8745.     MOVL    (R6), R0             ;SIZE, R0                   5763            50         66  D0   0011E
  8746.     MOVAB   3(R3)[R0], R0             ;3(R3)[R0], R0                                     50    03 A340  9E   00121
  8747.     CMPL    R0, R2                 ;R0, MAX_SIZE                                     52         50  D1   00126
  8748.     BLEQ    18$                 ;18$                                               0E  15   00129
  8749.     MOVL    2080(R6), R0             ;CHAR_8_BIT, R0               5767            50     0820   C6  D0   0012B
  8750.     CMPL    R0, 2108(R6)             ;R0, OLD_CHAR_8_BIT                          083C   C6         50  D1   00130
  8751.     BEQL    20$                 ;20$                                               55  13   00135
  8752.     BRB     21$                 ;21$                       5774                  5C  11   00137
  8753. 18$:    MOVL    2076(R6), R0             ;REPEAT_COUNT, R0               5784            50     081C   C6  D0   00139
  8754.     MOVAB   32(R0), 2112(R6)[R1]         ;32(R0), OLD_CHRS[R1]                          0840 C641    20   A0  9E   0013E
  8755.     MOVL    -56(R6), 2120(R6)[R3]         ;REPT_CHR, OLD_CHRS+8[R3]           5785     0848 C643    C8   A6  D0   00145
  8756.     ADDL2   #2, 2132(R6)             ;#2, OLD_CHR_IDX               5786     0854   C6         02  C0   0014C
  8757.     MOVL    (R8), R1             ;SMSG_DATA_CHARS, R1               5790            51         68  D0   00151
  8758.     MOVAB   -1(R0)[R1], (R8)         ;-1(R0)[R1], SMSG_DATA_CHARS                             68    FF A041  9E   00154
  8759.     MOVL    2036(R6), R1             ;FILE_CHARS, R1               5791            51     07F4   C6  D0   00159
  8760.     MOVAB   -1(R0)[R1], 2036(R6)         ;-1(R0)[R1], FILE_CHARS                      07F4   C6    FF A041  9E   0015E
  8761.     MOVL    #1, 2076(R6)             ;#1, REPEAT_COUNT               5792     081C   C6         01  D0   00165
  8762. 19$:    MOVL    2132(R6), R4             ;OLD_CHR_IDX, R4               5800            54     0854   C6  D0   0016A
  8763.     MOVAB   1(R4), R0             ;1(R4), R0                                     50    01   A4  9E   0016F
  8764.     MULL2   2076(R6), R0             ;REPEAT_COUNT, R0                                 50     081C   C6  C4   00173
  8765.     ADDL2   (R6), R0             ;SIZE, R0                                     50         66  C0   00178
  8766.     CMPL    R0, R2                 ;R0, MAX_SIZE                                     52         50  D1   0017B
  8767.     BLEQ    23$                 ;23$                                               2F  15   0017E
  8768.     MOVL    2080(R6), R0             ;CHAR_8_BIT, R0               5806            50     0820   C6  D0   00180
  8769.     CMPL    R0, 2108(R6)             ;R0, OLD_CHAR_8_BIT                          083C   C6         50  D1   00185
  8770.     BNEQ    21$                 ;21$                                               09  12   0018A
  8771. 20$:    MOVL    R0, 2068(R6)             ;R0, NEXT_CHR                   5809     0814   C6         50  D0   0018C
  8772.     DECL    2076(R6)             ;REPEAT_COUNT                   5810               081C   C6  D7   00191
  8773. 21$:    CMPL    R0, #-2                 ;R0, #-2                   5816 FFFFFFFE   8F         50  D1   00195
  8774.     BNEQ    22$                 ;22$                                               0E  12   0019C
  8775.     MNEGL   #2, 2068(R6)             ;#2, NEXT_CHR                   5819     0814   C6         02  CE   0019E
  8776.     MOVL    #134316043, 2072(R6)         ;#134316043, STATUS               5820     0818   C6 0801800B   8F  D0   001A3
  8777. 22$:    BRW     36$                 ;36$                       5823                00AB  31   001AC
  8778. 23$:    MOVL    2076(R6), R1             ;REPEAT_COUNT, R1               5826            51     081C   C6  D0   001AF
  8779.     ADDL2   R1, (R8)             ;R1, SMSG_DATA_CHARS                                 68         51  C0   001B4
  8780.     ADDL2   R1, 2036(R6)             ;R1, FILE_CHARS               5827     07F4   C6         51  C0   001B7
  8781.     INCL    R1                 ;REPEAT_COUNT                   5829                  51  D6   001BC
  8782.     BRB     27$                 ;27$                                               11  11   001BE
  8783. 24$:    MOVAB   1(R4), R0             ;1(R4), I                   5831            50    01   A4  9E   001C0
  8784.     BRB     26$                 ;26$                                               08  11   001C4
  8785. 25$:    CVTLB   2112(R6)[R0], (R5)+         ;OLD_CHRS[I], (POINTER)+           5833            85     0840 C640  F6   001C6
  8786.     INCL    (R6)                 ;SIZE                       5834                  66  D6   001CC
  8787. 26$:    SOBGEQ  R0, 25$                 ;I, 25$                                     F5         50  F4   001CE
  8788. 27$:    SOBGTR  R1, 24$                 ;REPEAT_COUNT, 24$                                 EC         51  F5   001D1
  8789.     MOVL    2080(R6), R0             ;CHAR_8_BIT, R0               5840            50     0820   C6  D0   001D4
  8790.     CMPL    R0, #-2                 ;R0, #-2                          FFFFFFFE   8F         50  D1   001D9
  8791.     BNEQ    28$                 ;28$                                               09  12   001E0
  8792.     MOVL    #134316131, 2072(R6)         ;#134316131, STATUS                          0818   C6 08018063   8F  D0   001E2
  8793. 28$:    CMPL    2072(R6), #134316043         ;STATUS, #134316043               5845 0801800B   8F     0818   C6  D1   001EB
  8794.     BNEQ    36$                 ;36$                                               64  12   001F4
  8795.     MOVL    R0, 2108(R6)             ;R0, OLD_CHAR_8_BIT               5850     083C   C6         50  D0   001F6
  8796.     MOVL    2104(R6), R1             ;CHR_IDX, R1                   5852            51     0838   C6  D0   001FB
  8797.     MNEGL   #1, R0                 ;#1, OLD_CHR_IDX                                 50         01  CE   00200
  8798.     BRB     30$                 ;30$                                               09  11   00203
  8799. 29$:    MOVL    2084(R6)[R0], 2112(R6)[R0]     ;CHRS[OLD_CHR_IDX], OLD_CHRS-           5853     0840 C640     0824 C640  D0   00205
  8800.                          ;[OLD_CHR_IDX]
  8801. 30$:    AOBLEQ  R1, R0, 29$             ;R1, OLD_CHR_IDX, 29$                                 50         51  F3   0020E
  8802.                          ;                                         F3       00211
  8803.     BRW     10$                 ;10$                       5855                FE86  31   00212
  8804. 31$:    MOVL    2104(R6), R0             ;CHR_IDX, R0                   5865            50     0838   C6  D0   00215
  8805.     MOVAB   1(R0)[R1], R1             ;1(R0)[R1], R1                                     51    01 A041  9E   0021A
  8806.     CMPL    R1, R2                 ;R1, MAX_SIZE                                     52         51  D1   0021F
  8807.     BGTR    36$                 ;36$                                               36  14   00222
  8808.     INCL    (R8)                 ;SMSG_DATA_CHARS               5867                  68  D6   00224
  8809.     INCL    2036(R6)             ;FILE_CHARS                   5868               07F4   C6  D6   00226
  8810.     INCL    R0                 ;CHR_IDX                   5870                  50  D6   0022A
  8811.     BRB     33$                 ;33$                                               08  11   0022C
  8812. 32$:    CVTLB   2084(R6)[R0], (R5)+         ;CHRS[CHR_IDX], (POINTER)+           5872            85     0824 C640  F6   0022E
  8813.     INCL    (R6)                 ;SIZE                       5873                  66  D6   00234
  8814. 33$:    SOBGEQ  R0, 32$                 ;CHR_IDX, 32$                                     F5         50  F4   00236
  8815.     BLBC    -12(R6), 34$             ;FLAG_8QUOTE, 34$               5876            05    F4   A6  E9   00239
  8816.     CALLS   #0, (R7)             ;#0, GET_8_QUOTED_CHAR                                 67         00  FB   0023D
  8817.     BRB     35$                 ;35$                                               05  11   00240
  8818. 34$:    CALLS   #0, -215(R7)             ;#0, GET_QUOTED_CHAR                          FF29   C7         00  FB   00242
  8819. 35$:    MOVL    R0, 2072(R6)             ;R0, STATUS                              0818   C6         50  D0   00247
  8820.     CMPL    2072(R6), #134316043         ;STATUS, #134316043               5878 0801800B   8F     0818   C6  D1   0024C
  8821.     BNEQ    36$                 ;36$                                               03  12   00255
  8822.     BRW     11$                 ;11$                                             FE4A  31   00257
  8823. 36$:    CMPL    -48(R6), #94             ;SEND_PKT_SIZE, #94               5886 0000005E   8F    D0   A6  D1   0025A
  8824.     BLEQ    37$                 ;37$                                               03  15   00262
  8825.     MNEGL   (R6), (R6)             ;SIZE, SIZE                   5888            66         66  CE   00264
  8826. 37$:    TSTL    (R6)                 ;SIZE                       5894                  66  D5   00267
  8827.     BEQL    38$                 ;38$                                               08  13   00269
  8828.     MOVL    #134316043, R0             ;#134316043, R0                                 50 0801800B   8F  D0   0026B
  8829.     RET                      ;                                               04   00272
  8830. 38$:    MOVL    2072(R6), R0             ;STATUS, R0                                     50     0818   C6  D0   00273
  8831.     RET                      ;                                               04   00278
  8832.  
  8833. ; Routine Size:  633 bytes,    Routine Base:  $CODE$ + 22DA
  8834.  
  8835.  
  8836. ;   5897  1     %SBTTL 'BFR_EMPTY'
  8837. ;   5898  1    ROUTINE BFR_EMPTY =
  8838. ;   5899  1    
  8839. ;   5900  1    !++
  8840. ;   5901  1    ! FUNCTIONAL DESCRIPTION:
  8841. ;   5902  1    !
  8842. ;   5903  1    !    This routine will empty the data from the REC_MSG message buffer
  8843. ;   5904  1    !    to the file.  It will process quoting characters.
  8844. ;   5905  1    !
  8845. ;   5906  1    ! CALLING SEQUENCE:
  8846. ;   5907  1    !
  8847. ;   5908  1    !    Flag = BFR_EMPTY();
  8848. ;   5909  1    !
  8849. ;   5910  1    ! INPUT PARAMETERS:
  8850. ;   5911  1    !
  8851. ;   5912  1    !    None.
  8852. ;   5913  1    !
  8853. ;   5914  1    ! IMPLICIT INPUTS:
  8854. ;   5915  1    !
  8855. ;   5916  1    !    None.
  8856. ;   5917  1    !
  8857. ;   5918  1    ! OUTPUT PARAMETERS:
  8858. ;   5919  1    !
  8859. ;   5920  1    !    True - No problems writing the file.
  8860. ;   5921  1    !    False - I/O error writing the file.
  8861. ;   5922  1    !
  8862. ;   5923  1    ! IMPLICIT OUTPUTS:
  8863. ;   5924  1    !
  8864. ;   5925  1    !    None.
  8865. ;   5926  1    !
  8866. ;   5927  1    ! COMPLETION CODES:
  8867. ;   5928  1    !
  8868. ;   5929  1    !    None.
  8869. ;   5930  1    !
  8870. ;   5931  1    ! SIDE EFFECTS:
  8871. ;   5932  1    !
  8872. ;   5933  1    !    None.
  8873. ;   5934  1    !
  8874. ;   5935  1    !--
  8875. ;   5936  1    
  8876. ;   5937  2        BEGIN
  8877. ;   5938  2    
  8878. ;   5939  2        LOCAL
  8879. ;   5940  2        STATUS,                    ! Status returned by various routines
  8880. ;   5941  2        REPEAT_COUNT,                ! Count of times to repeat character
  8881. ;   5942  2        TURN_BIT_8_ON,                ! If eight bit quoting
  8882. ;   5943  2        COUNTER,                ! Count of the characters left
  8883. ;   5944  2        CHARACTER,                ! Character we are processing
  8884. ;   5945  2        POINTER;                ! Pointer to the data
  8885. ;   5946  2    
  8886. ;   5947  2        POINTER = CH$PTR (REC_MSG, .RECV_PKT_MSG, CHR_SIZE);           ! [108]
  8887. ;   5948  2        COUNTER = 0;
  8888. ;   5949  2    
  8889. ;   5950  2        WHILE (.COUNTER LSS .REC_LENGTH) DO
  8890. ;   5951  3        BEGIN
  8891. ;   5952  3        CHARACTER = CH$RCHAR_A (POINTER);
  8892. ;   5953  3        COUNTER = .COUNTER + 1;
  8893. ;   5954  3    !
  8894. ;   5955  3    ! If the character is the repeat character (and we are doing repeat
  8895. ;   5956  3    ! compression), then get the count.
  8896. ;   5957  3    !
  8897. ;   5958  3    
  8898. ;   5959  4        IF ((.CHARACTER EQL .REPT_CHR) AND .FLAG_REPEAT)
  8899. ;   5960  3        THEN
  8900. ;   5961  4            BEGIN
  8901. ;   5962  4            REPEAT_COUNT = UNCHAR (CH$RCHAR_A (POINTER) AND %O'177');
  8902. ;   5963  4            CHARACTER = CH$RCHAR_A (POINTER);
  8903. ;   5964  4            COUNTER = .COUNTER + 2;
  8904. ;   5965  4            END
  8905. ;   5966  3        ELSE
  8906. ;   5967  3            REPEAT_COUNT = 1;
  8907. ;   5968  3    
  8908. ;   5969  3    !
  8909. ;   5970  3    ! If the character is an eight bit quoting character and we are doing eight
  8910. ;   5971  3    ! bit quoting then turn on the flag so we turn the eighth bit on when we
  8911. ;   5972  3    ! get the real character.
  8912. ;   5973  3    !
  8913. ;   5974  3    
  8914. ;   5975  4        IF ((.CHARACTER EQL .SEND_8QUOTE_CHR) AND .FLAG_8QUOTE)
  8915. ;   5976  3        THEN
  8916. ;   5977  4            BEGIN
  8917. ;   5978  4            TURN_BIT_8_ON = TRUE;
  8918. ;   5979  4            COUNTER = .COUNTER + 1;
  8919. ;   5980  4            CHARACTER = CH$RCHAR_A (POINTER);
  8920. ;   5981  4            END
  8921. ;   5982  3        ELSE
  8922. ;   5983  3            TURN_BIT_8_ON = FALSE;
  8923. ;   5984  3    
  8924. ;   5985  3    !
  8925. ;   5986  3    ! Now determine if we are quoting the character.  If so then we must eat
  8926. ;   5987  3    ! the quoting character and get the real character.
  8927. ;   5988  3    !
  8928. ;   5989  3    
  8929. ;   5990  3        IF .CHARACTER EQL .SEND_QUOTE_CHR
  8930. ;   5991  3                        ![035] Is this character other Kermit sends as quote?
  8931. ;   5992  3        THEN
  8932. ;   5993  4            BEGIN
  8933. ;   5994  4            CHARACTER = CH$RCHAR_A (POINTER);
  8934. ;   5995  4            COUNTER = .COUNTER + 1;
  8935. ;   5996  4    !
  8936. ;   5997  4    ! Determine if we must undo what someone else has done to the character
  8937. ;   5998  4    !
  8938. ;   5999  4    
  8939. ; P 6000  5            IF ((.CHARACTER AND %O'177') GEQ CTL (CHR_DEL)) AND ((.CHARACTER AND %O'177') LEQ CTL (
  8940. ;   6001  5                CHR_DEL) + %O'40')
  8941. ;   6002  4            THEN
  8942. ;   6003  4            CHARACTER = CTL (.CHARACTER);
  8943. ;   6004  4    
  8944. ;   6005  3            END;
  8945. ;   6006  3    
  8946. ;   6007  3    !
  8947. ;   6008  3    ! Turn on the eight bit if needed and then write the character out
  8948. ;   6009  3    !
  8949. ;   6010  3    
  8950. ;   6011  3        IF .TURN_BIT_8_ON THEN CHARACTER = .CHARACTER OR %O'200';
  8951. ;   6012  3    
  8952. ;   6013  3        RMSG_DATA_CHARS = .RMSG_DATA_CHARS + .REPEAT_COUNT;
  8953. ;   6014  3        FILE_CHARS = .FILE_CHARS + .REPEAT_COUNT;
  8954. ;   6015  3    
  8955. ;   6016  3        DECR REPEAT_COUNT FROM .REPEAT_COUNT TO 1 DO
  8956. ;   6017  4            BEGIN
  8957. ;   6018  4            STATUS = (.PUT_CHR_ROUTINE) (.CHARACTER);
  8958. ;   6019  4    
  8959. ;   6020  4            IF NOT .STATUS THEN RETURN .STATUS;
  8960. ;   6021  4    
  8961. ;   6022  3            END;
  8962. ;   6023  3    
  8963. ;   6024  2        END;
  8964. ;   6025  2    
  8965. ;   6026  2        RETURN KER_NORMAL;
  8966. ;   6027  1        END;                    ! End of BFR_EMPTY
  8967.  
  8968.  
  8969.  
  8970.  
  8971.  
  8972. ;BFR_EMPTY
  8973. U.28:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8>     ;Save R2,R3,R4,R5,R6,R7,R8           5898                    01FC   00000
  8974.     MOVAB   G^U.59, R8             ;U.59, R8                                     58 00000000'  00  9E   00002
  8975.     MOVAB   (R8), R0             ;REC_MSG, R0                   5947            50         68  9E   00009
  8976.     ADDL3   -80(R8), R0, R5             ;RECV_PKT_MSG, R0, POINTER                             50    B0   A8  C1   0000C
  8977.                          ;                                         55       00010
  8978.     CLRL    R6                 ;COUNTER                   5948                  56  D4   00011
  8979. 1$:    CMPL    R6, -8(R8)             ;COUNTER, REC_LENGTH               5950       F8   A8         56  D1   00013
  8980.     BLSS    2$                 ;2$                                               03  19   00017
  8981.     BRW     11$                 ;11$                                             0088  31   00019
  8982. 2$:    MOVZBL  (R5)+, R4             ;(POINTER)+, CHARACTER               5952            54         85  9A   0001C
  8983.     INCL    R6                 ;COUNTER                   5953                  56  D6   0001F
  8984.     CMPL    R4, -84(R8)             ;CHARACTER, REPT_CHR               5959       AC   A8         54  D1   00021
  8985.     BNEQ    3$                 ;3$                                               17  12   00025
  8986.     BLBC    -36(R8), 3$             ;FLAG_REPEAT, 3$                                 13    DC   A8  E9   00027
  8987.     MOVZBL  (R5)+, R1             ;(POINTER)+, R1               5962            51         85  9A   0002B
  8988.     EXTZV   #0, #7, R1, R3             ;#0, #7, R1, REPEAT_COUNT                             07         00  EF   0002E
  8989.                          ;                                   53         51       00031
  8990.     SUBL2   #32, R3                 ;#32, REPEAT_COUNT                                 53         20  C2   00033
  8991.     MOVZBL  (R5)+, R4             ;(POINTER)+, CHARACTER               5963            54         85  9A   00036
  8992.     ADDL2   #2, R6                 ;#2, COUNTER                   5964            56         02  C0   00039
  8993.     BRB     4$                 ;4$                                               03  11   0003C
  8994. 3$:    MOVL    #1, R3                 ;#1, REPEAT_COUNT               5967            53         01  D0   0003E
  8995. 4$:    CMPL    R4, -56(R8)             ;CHARACTER, SEND_8QUOTE_CHR           5975       C8   A8         54  D1   00041
  8996.     BNEQ    5$                 ;5$                                               0E  12   00045
  8997.     BLBC    -40(R8), 5$             ;FLAG_8QUOTE, 5$                                 0A    D8   A8  E9   00047
  8998.     MOVL    #1, R7                 ;#1, TURN_BIT_8_ON               5978            57         01  D0   0004B
  8999.     INCL    R6                 ;COUNTER                   5979                  56  D6   0004E
  9000.     MOVZBL  (R5)+, R4             ;(POINTER)+, CHARACTER               5980            54         85  9A   00050
  9001.     BRB     6$                 ;6$                                               02  11   00053
  9002. 5$:    CLRL    R7                 ;TURN_BIT_8_ON                   5983                  57  D4   00055
  9003. 6$:    CMPL    R4, -60(R8)             ;CHARACTER, SEND_QUOTE_CHR           5990       C4   A8         54  D1   00057
  9004.     BNEQ    7$                 ;7$                                               1B  12   0005B
  9005.     MOVZBL  (R5)+, R4             ;(POINTER)+, CHARACTER               5994            54         85  9A   0005D
  9006.     INCL    R6                 ;COUNTER                   5995                  56  D6   00060
  9007.     CMPZV   #0, #7, R4, #63             ;#0, #7, CHARACTER, #63           6000            07         00  ED   00062
  9008.                          ;                                   3F         54       00065
  9009.     BLSS    7$                 ;7$                                               0F  19   00067
  9010.     CMPZV   #0, #7, R4, #95             ;#0, #7, CHARACTER, #95           6001            07         00  ED   00069
  9011.                          ;                        0000005F   8F         54       0006C
  9012.     BGTR    7$                 ;7$                                               04  14   00072
  9013.     XORB2   #64, R4                 ;#64, CHARACTER               6003            54    40   8F  8C   00074
  9014. 7$:    BLBC    R7, 8$                 ;TURN_BIT_8_ON, 8$               6011            04         57  E9   00078
  9015.     BISB2   #128, R4             ;#128, CHARACTER                                 54    80   8F  88   0007B
  9016. 8$:    ADDL2   R3, G^RMSG_DATA_CHARS         ;REPEAT_COUNT, RMSG_DATA_CHARS        6013 00000000G  00         53  C0   0007F
  9017.     ADDL2   R3, 2008(R8)             ;REPEAT_COUNT, FILE_CHARS           6014     07D8   C8         53  C0   00086
  9018.     MOVAB   1(R3), R2             ;1(R3), REPEAT_COUNT               6016            52    01   A3  9E   0008B
  9019.     BRB     10$                 ;10$                                               0D  11   0008F
  9020. 9$:    MOVL    2036(R8), R1             ;PUT_CHR_ROUTINE, R1               6018            51     07F4   C8  D0   00091
  9021.     PUSHL   R4                 ;CHARACTER                                           54  DD   00096
  9022.     CALLS   #1, (R1)             ;#1, (R1)                                     61         01  FB   00098
  9023.     BLBC    R0, 12$                 ;STATUS, 12$                   6020            0D         50  E9   0009B
  9024. 10$:    SOBGTR  R2, 9$                 ;REPEAT_COUNT, 9$               6016            F0         52  F5   0009E
  9025.     BRW     1$                 ;1$                       5950                FF6F  31   000A1
  9026. 11$:    MOVL    #134316043, R0             ;#134316043, R0               6026            50 0801800B   8F  D0   000A4
  9027. 12$:    RET                      ;                                               04   000AB
  9028.  
  9029. ; Routine Size:  172 bytes,    Routine Base:  $CODE$ + 2553
  9030.  
  9031.  
  9032. ;   6028  1     %SBTTL 'Buffer filling and emptying subroutines'
  9033. ;   6029  1    ROUTINE SET_STRING (POINTER, LENGTH, START) =
  9034. ;   6030  1    
  9035. ;   6031  1    !++
  9036. ;   6032  1    ! FUNCTIONAL DESCRIPTION:
  9037. ;   6033  1    !
  9038. ;   6034  1    !    This routine is used to set up the buffer filling and emptying
  9039. ;   6035  1    !    routines to use a string for input (or output) rather than
  9040. ;   6036  1    !    the file I/O routines.
  9041. ;   6037  1    !
  9042. ;   6038  1    ! CALLING SEQUENCE:
  9043. ;   6039  1    !
  9044. ;   6040  1    !    SET_STRING (.POINTER, .LENGTH, .START)
  9045. ;   6041  1    !
  9046. ;   6042  1    ! INPUT PARAMETERS:
  9047. ;   6043  1    !
  9048. ;   6044  1    !    POINTER - Character pointer to string
  9049. ;   6045  1    !
  9050. ;   6046  1    !    LENGTH - Number of characters in string
  9051. ;   6047  1    !
  9052. ;   6048  1    !    START - True to start string, false to end it
  9053. ;   6049  1    !
  9054. ;   6050  1    ! IMPLICIT INPUTS:
  9055. ;   6051  1    !
  9056. ;   6052  1    !    None.
  9057. ;   6053  1    !
  9058. ;   6054  1    ! OUPTUT PARAMETERS:
  9059. ;   6055  1    !
  9060. ;   6056  1    !    Returns 0 if START = TRUE, actual number of characters used
  9061. ;   6057  1    !    by last string if START = FALSE.
  9062. ;   6058  1    !
  9063. ;   6059  1    ! IMPLICIT OUTPUTS:
  9064. ;   6060  1    !
  9065. ;   6061  1    !    GET_CHR_ROUTINE and PUT_CHR_ROUTINE modifed so that string
  9066. ;   6062  1    !    routines are called instead of file I/O.
  9067. ;   6063  1    !
  9068. ;   6064  1    ! COMPLETION CODES:
  9069. ;   6065  1    !
  9070. ;   6066  1    !    None.
  9071. ;   6067  1    !
  9072. ;   6068  1    ! SIDE EFFECTS:
  9073. ;   6069  1    !
  9074. ;   6070  1    !    None.
  9075. ;   6071  1    !
  9076. ;   6072  1    !--
  9077. ;   6073  1    
  9078. ;   6074  2        BEGIN
  9079. ;   6075  2    
  9080. ;   6076  2        OWN
  9081. ;   6077  2        STR_POINTER,                ! Pointer to string
  9082. ;   6078  2        STR_LENGTH,                ! Length of string
  9083. ;   6079  2        STR_ORG_LENGTH,                ! Original length of string
  9084. ;   6080  2        OLD_GET_CHR,                ! Old get-char routine
  9085. ;   6081  2        OLD_PUT_CHR;                ! Old put-char routine
  9086. ;   6082  2    
  9087. ;   6083  2    !
  9088. ;   6084  2    ! Routine to get a character from the string
  9089. ;   6085  2    !
  9090. ;   6086  2        ROUTINE GET_STRING (CHAR_ADDRESS) =
  9091. ;   6087  3        BEGIN
  9092. ;   6088  3    !
  9093. ;   6089  3    ! If some characters are left, count down the length and get next character
  9094. ;   6090  3    ! Otherwise return and end of file indication.
  9095. ;   6091  3    !
  9096. ;   6092  3    
  9097. ;   6093  3        IF .STR_LENGTH GTR 0
  9098. ;   6094  3        THEN
  9099. ;   6095  4            BEGIN
  9100. ;   6096  4            STR_LENGTH = .STR_LENGTH - 1;
  9101. ;   6097  4            .CHAR_ADDRESS = CH$RCHAR_A (STR_POINTER);
  9102. ;   6098  4            RETURN KER_NORMAL;
  9103. ;   6099  4            END
  9104. ;   6100  3        ELSE
  9105. ;   6101  3            RETURN KER_EOF;
  9106. ;   6102  3    
  9107. ;   6103  2        END;                    ! End of GET_STRING
  9108.  
  9109.  
  9110.  
  9111.     .PSECT  $OWN$,NOEXE,2
  9112.  
  9113. ;STR_POINTER
  9114. U.94:    .BLKB   4                                       ;                      00894
  9115. ;STR_LENGTH
  9116. U.95:    .BLKB   4                                       ;                      00898
  9117. ;STR_ORG_LENGTH
  9118. U.96:    .BLKB   4                                       ;                      0089C
  9119. ;OLD_GET_CHR
  9120. U.97:    .BLKB   4                                       ;                      008A0
  9121. ;OLD_PUT_CHR
  9122. U.98:    .BLKB   4                                       ;                      008A4
  9123.  
  9124.  
  9125.  
  9126.     .PSECT  $CODE$,NOWRT,2
  9127.  
  9128. ;GET_STRING
  9129. U.99:    .WORD   ^M<R2>                 ;Save R2                   6086                    0004   00000
  9130.     MOVAB   G^U.95, R2             ;U.95, R2                                     52 00000000'  00  9E   00002
  9131.     TSTL    (R2)                 ;STR_LENGTH                   6093                  62  D5   00009
  9132.     BLEQ    1$                 ;1$                                               15  15   0000B
  9133.     DECL    (R2)                 ;STR_LENGTH                   6096                  62  D7   0000D
  9134.     MOVL    -4(R2), R0             ;STR_POINTER, R0               6097            50    FC   A2  D0   0000F
  9135.     MOVZBL  (R0), @4(AP)             ;(R0), @CHAR_ADDRESS                            04   BC         60  9A   00013
  9136.     INCL    -4(R2)                 ;STR_POINTER                                      FC   A2  D6   00017
  9137.     MOVL    #134316043, R0             ;#134316043, R0               6098            50 0801800B   8F  D0   0001A
  9138.     RET                      ;                                               04   00021
  9139. 1$:    MOVL    #134316131, R0             ;#134316131, R0               6101            50 08018063   8F  D0   00022
  9140.     RET                      ;                                               04   00029
  9141.  
  9142. ; Routine Size:  42 bytes,    Routine Base:  $CODE$ + 25FF
  9143.  
  9144.  
  9145. ;   6104  2        ROUTINE PUT_STRING (CHAR_VALUE) =
  9146. ;   6105  3        BEGIN
  9147. ;   6106  3    !
  9148. ;   6107  3    ! If there is enough room to store another character, store the character
  9149. ;   6108  3    ! and count it.  Otherwise return a line too long indication.
  9150. ;   6109  3    !
  9151. ;   6110  3    
  9152. ;   6111  3        IF .STR_LENGTH GTR 0
  9153. ;   6112  3        THEN
  9154. ;   6113  4            BEGIN
  9155. ;   6114  4            STR_LENGTH = .STR_LENGTH - 1;
  9156. ;   6115  4            CH$WCHAR_A (.CHAR_VALUE, STR_POINTER);
  9157. ;   6116  4            RETURN KER_NORMAL;
  9158. ;   6117  4            END
  9159. ;   6118  3        ELSE
  9160. ;   6119  3            RETURN KER_LINTOOLNG;
  9161. ;   6120  3    
  9162. ;   6121  2        END;                    ! End of PUT_STRING
  9163.  
  9164.  
  9165.  
  9166.  
  9167.  
  9168. ;PUT_STRING
  9169. U.100:    .WORD   ^M<R2>                 ;Save R2                   6104                    0004   00000
  9170.     MOVAB   G^U.95, R2             ;U.95, R2                                     52 00000000'  00  9E   00002
  9171.     TSTL    (R2)                 ;STR_LENGTH                   6111                  62  D5   00009
  9172.     BLEQ    1$                 ;1$                                               15  15   0000B
  9173.     DECL    (R2)                 ;STR_LENGTH                   6114                  62  D7   0000D
  9174.     MOVL    -4(R2), R0             ;STR_POINTER, R0               6115            50    FC   A2  D0   0000F
  9175.     MOVB    4(AP), (R0)             ;CHAR_VALUE, (R0)                                 60    04   AC  90   00013
  9176.     INCL    -4(R2)                 ;STR_POINTER                                      FC   A2  D6   00017
  9177.     MOVL    #134316043, R0             ;#134316043, R0               6116            50 0801800B   8F  D0   0001A
  9178.     RET                      ;                                               04   00021
  9179. 1$:    MOVL    #134316098, R0             ;#134316098, R0               6119            50 08018042   8F  D0   00022
  9180.     RET                      ;                                               04   00029
  9181.  
  9182. ; Routine Size:  42 bytes,    Routine Base:  $CODE$ + 2629
  9183.  
  9184.  
  9185. ;   6122  2    !
  9186. ;   6123  2    ! If we have a request to start a string (input or output), save the old
  9187. ;   6124  2    ! routines and set up ours.  Also save the string pointer and length for
  9188. ;   6125  2    ! use by our get/put routines.
  9189. ;   6126  2    ! Otherwise this is a request to stop using the string routines, so reset
  9190. ;   6127  2    ! the old routines and return the actual number of characters read or
  9191. ;   6128  2    ! written
  9192. ;   6129  2    !
  9193. ;   6130  2    
  9194. ;   6131  2        IF .START
  9195. ;   6132  2        THEN
  9196. ;   6133  3        BEGIN
  9197. ;   6134  3        STR_POINTER = .POINTER;
  9198. ;   6135  3        STR_ORG_LENGTH = .LENGTH;
  9199. ;   6136  3        STR_LENGTH = .LENGTH;
  9200. ;   6137  3        OLD_GET_CHR = .GET_CHR_ROUTINE;
  9201. ;   6138  3        OLD_PUT_CHR = .PUT_CHR_ROUTINE;
  9202. ;   6139  3        GET_CHR_ROUTINE = GET_STRING;
  9203. ;   6140  3        PUT_CHR_ROUTINE = PUT_STRING;
  9204. ;   6141  3        RETURN 0;
  9205. ;   6142  3        END
  9206. ;   6143  2        ELSE
  9207. ;   6144  3        BEGIN
  9208. ;   6145  3        GET_CHR_ROUTINE = .OLD_GET_CHR;
  9209. ;   6146  3        PUT_CHR_ROUTINE = .OLD_PUT_CHR;
  9210. ;   6147  3        RETURN .STR_ORG_LENGTH - .STR_LENGTH;
  9211. ;   6148  2        END;
  9212. ;   6149  2    
  9213. ;   6150  1        END;                    ! End of SET_STRING
  9214.  
  9215.  
  9216.  
  9217.  
  9218.  
  9219. ;SET_STRING
  9220. U.30:    .WORD   ^M<R2>                 ;Save R2                   6029                    0004   00000
  9221.     MOVAB   G^U.67, R2             ;U.67, R2                                     52 00000000'  00  9E   00002
  9222.     BLBC    12(AP), 1$             ;START, 1$                   6131            1A    0C   AC  E9   00009
  9223.     MOVL    8(AP), 84(R2)             ;LENGTH, STR_ORG_LENGTH           6135       54   A2    08   AC  D0   0000D
  9224.     MOVQ    4(AP), 76(R2)             ;POINTER, STR_POINTER               6134       4C   A2    04   AC  7D   00012
  9225.     MOVQ    (R2), 88(R2)             ;GET_CHR_ROUTINE, OLD_GET_CHR           6137       58   A2         62  7D   00017
  9226.     MOVAB   B^U.99, (R2)             ;U.99, GET_CHR_ROUTINE               6139            62    8E   AF  9E   0001B
  9227.     MOVAB   B^U.100, 4(R2)             ;U.100, PUT_CHR_ROUTINE           6140       04   A2    B4   AF  9E   0001F
  9228.     CLRL    R0                 ;R0                       6141                  50  D4   00024
  9229.     RET                      ;                                               04   00026
  9230. 1$:    MOVQ    88(R2), (R2)             ;OLD_GET_CHR, GET_CHR_ROUTINE           6145            62    58   A2  7D   00027
  9231.     SUBL3   80(R2), 84(R2), R0         ;STR_LENGTH, STR_ORG_LENGTH, R0       6147       54   A2    50   A2  C3   0002B
  9232.                          ;                                         50       00030
  9233.     RET                      ;                                               04   00031
  9234.  
  9235. ; Routine Size:  50 bytes,    Routine Base:  $CODE$ + 2653
  9236.  
  9237.  
  9238. ;   6151  1     %SBTTL 'Add parity routine'
  9239. ;   6152  1    ROUTINE DO_PARITY (MESSAGE, LENGTH) : NOVALUE =
  9240. ;   6153  1    
  9241. ;   6154  1    !++
  9242. ;   6155  1    ! FUNCTIONAL DESCRIPTION:
  9243. ;   6156  1    !
  9244. ;   6157  1    !    This routine will add parity for a complete message that is to be
  9245. ;   6158  1    !    sent to the remote Kermit.
  9246. ;   6159  1    !
  9247. ;   6160  1    ! CALLING SEQUENCE:
  9248. ;   6161  1    !
  9249. ;   6162  1    !    DO_PARITY (Message_address, Message_length);
  9250. ;   6163  1    !
  9251. ;   6164  1    ! INPUT PARAMETERS:
  9252. ;   6165  1    !
  9253. ;   6166  1    !    Message_address - Address of the message to put parity on.
  9254. ;   6167  1    !    Message_length  - Lengtho of the message.
  9255. ;   6168  1    !
  9256. ;   6169  1    ! IMPLICIT INPUTS:
  9257. ;   6170  1    !
  9258. ;   6171  1    !    None.
  9259. ;   6172  1    !
  9260. ;   6173  1    ! OUTPUT PARAMETERS:
  9261. ;   6174  1    !
  9262. ;   6175  1    !    None.
  9263. ;   6176  1    !
  9264. ;   6177  1    ! IMPLICIT OUTPUTS:
  9265. ;   6178  1    !
  9266. ;   6179  1    !    None.
  9267. ;   6180  1    !
  9268. ;   6181  1    ! COMPLETION CODES:
  9269. ;   6182  1    !
  9270. ;   6183  1    !    None.
  9271. ;   6184  1    !
  9272. ;   6185  1    ! SIDE EFFECTS:
  9273. ;   6186  1    !
  9274. ;   6187  1    !    None.
  9275. ;   6188  1    !
  9276. ;   6189  1    !--
  9277. ;   6190  1    
  9278. ;   6191  2        BEGIN
  9279. ;   6192  2    
  9280. ;   6193  2        MAP
  9281. ;   6194  2        MESSAGE : REF VECTOR [CH$ALLOCATION (MAX_MSG, CHR_SIZE)];
  9282. ;   6195  2    
  9283. ;   6196  2        LOCAL
  9284. ;   6197  2        POINTER;                ! Point into the message
  9285. ;   6198  2    
  9286. ;   6199  2        IF NOT .DEV_PARITY_FLAG
  9287. ;   6200  2        THEN
  9288. ;   6201  3        BEGIN
  9289. ;   6202  3        POINTER = CH$PTR (.MESSAGE,, CHR_SIZE);
  9290. ;   6203  3    
  9291. ;   6204  3        INCR I FROM 1 TO .LENGTH DO
  9292. ;   6205  3            CH$WCHAR_A (GEN_PARITY (CH$RCHAR (.POINTER)), POINTER);
  9293. ;   6206  3    
  9294. ;   6207  2        END;
  9295. ;   6208  2    
  9296. ;   6209  1        END;                    ! End of DO_PARITY
  9297.  
  9298.  
  9299.  
  9300.  
  9301.  
  9302. ;DO_PARITY
  9303. U.22:    .WORD   ^M<R2,R3>             ;Save R2,R3                   6152                    000C   00000
  9304.     BLBS    G^DEV_PARITY_FLAG, 3$         ;DEV_PARITY_FLAG, 3$               6199            1A 00000000G  00  E8   00002
  9305.     MOVL    4(AP), R2             ;MESSAGE, POINTER               6202            52    04   AC  D0   00009
  9306.     CLRL    R3                 ;I                       6204                  53  D4   0000D
  9307.     BRB     2$                 ;2$                                               0D  11   0000F
  9308. 1$:    MOVZBL  (R2), -(SP)             ;(POINTER), -(SP)               6205            7E         62  9A   00011
  9309.     CALLS   #1, G^U.23             ;#1, U.23                          00000000V  00         01  FB   00014
  9310.     MOVB    R0, (R2)+             ;R0, (POINTER)+                                 82         50  90   0001B
  9311. 2$:    AOBLEQ  8(AP), R3, 1$             ;LENGTH, I, 1$                                     53    08   AC  F3   0001E
  9312.                          ;                                         EE       00022
  9313. 3$:    RET                      ;                       6209                  04   00023
  9314.  
  9315. ; Routine Size:  36 bytes,    Routine Base:  $CODE$ + 2685
  9316.  
  9317.  
  9318. ;   6210  1     %SBTTL 'Parity routine'
  9319. ;   6211  1    
  9320. ;   6212  1    GLOBAL ROUTINE GEN_PARITY (CHARACTER) =
  9321. ;   6213  1    
  9322. ;   6214  1    !++
  9323. ;   6215  1    ! FUNCTIONAL DESCRIPTION:
  9324. ;   6216  1    !
  9325. ;   6217  1    !    This routine will add parity to the character that is supplied.
  9326. ;   6218  1    !
  9327. ;   6219  1    ! CALLING SEQUENCE:
  9328. ;   6220  1    !
  9329. ;   6221  1    !    CHARACTER = GEN_PARITY(CHARACTER)
  9330. ;   6222  1    !
  9331. ;   6223  1    ! INPUT PARAMETERS:
  9332. ;   6224  1    !
  9333. ;   6225  1    !    CHARACTER - Produce the parity for this character depending on the
  9334. ;   6226  1    !        setting of the SET PARITY switch.
  9335. ;   6227  1    !
  9336. ;   6228  1    ! IMPLICIT INPUTS:
  9337. ;   6229  1    !
  9338. ;   6230  1    !    None.
  9339. ;   6231  1    !
  9340. ;   6232  1    ! OUTPUT PARAMETERS:
  9341. ;   6233  1    !
  9342. ;   6234  1    !    None.
  9343. ;   6235  1    !
  9344. ;   6236  1    ! IMPLICIT OUTPUTS:
  9345. ;   6237  1    !
  9346. ;   6238  1    !    None.
  9347. ;   6239  1    !
  9348. ;   6240  1    ! COMPLETION CODES:
  9349. ;   6241  1    !
  9350. ;   6242  1    !    None.
  9351. ;   6243  1    !
  9352. ;   6244  1    ! SIDE EFFECTS:
  9353. ;   6245  1    !
  9354. ;   6246  1    !    None.
  9355. ;   6247  1    !
  9356. ;   6248  1    !--
  9357. ;   6249  1    
  9358. ;   6250  2        BEGIN
  9359. ;   6251  2    
  9360. ;   6252  2        LOCAL
  9361. ;   6253  2        TEMP_CHAR;
  9362. ;   6254  2    
  9363. ;   6255  2    
  9364. ;   6256  2        CASE .PARITY_TYPE FROM PR_MIN TO PR_MAX OF
  9365. ;   6257  2        SET
  9366. ;   6258  2    
  9367. ;   6259  2        [PR_NONE] :
  9368. ;   6260  2            RETURN .CHARACTER;
  9369. ;   6261  2    
  9370. ;   6262  2        [PR_SPACE] :
  9371. ;   6263  2            RETURN .CHARACTER AND %O'177';
  9372. ;   6264  2    
  9373. ;   6265  2        [PR_MARK] :
  9374. ;   6266  2            RETURN .CHARACTER OR %O'200';
  9375. ;   6267  2    
  9376. ;   6268  2        [PR_ODD] :
  9377. ;   6269  2            TEMP_CHAR = .CHARACTER AND %O'177' OR %O'200';
  9378. ;   6270  2    
  9379. ;   6271  2        [PR_EVEN] :
  9380. ;   6272  2            TEMP_CHAR = .CHARACTER AND %O'177';
  9381. ;   6273  2        TES;
  9382. ;   6274  2    
  9383. ;   6275  2        TEMP_CHAR = .TEMP_CHAR XOR (.TEMP_CHAR^-4);
  9384. ;   6276  2        TEMP_CHAR = .TEMP_CHAR XOR (.TEMP_CHAR^-2);
  9385. ;   6277  2    
  9386. ;   6278  2        IF .TEMP_CHAR<0, 2> EQL %B'01' OR .TEMP_CHAR<0, 2> EQL %B'10'
  9387. ;   6279  2        THEN
  9388. ;   6280  2        RETURN .CHARACTER AND %O'177' OR %O'200'
  9389. ;   6281  2        ELSE
  9390. ;   6282  2        RETURN .CHARACTER AND %O'177';
  9391. ;   6283  2    
  9392. ;   6284  1        END;                    ! End of GEN_PARITY
  9393.  
  9394.  
  9395.  
  9396.  
  9397.  
  9398. U.23:
  9399.     .ENTRY  GEN_PARITY, ^M<R2>         ;GEN_PARITY, Save R2               6212                    0004   00000
  9400.     MOVL    4(AP), R2             ;CHARACTER, R2                   6260            52    04   AC  D0   00002
  9401.     CASEL   G^PARITY_TYPE, #0, #4         ;PARITY_TYPE, #0, #4               6256            00 00000000G  00  CF   00006
  9402.                          ;                                         04       0000D
  9403. 1$:    .WORD   2$-1$,-                 ;2$-1$,-                                   000E       000A       0000E
  9404.         3$-1$,-                 ;3$-1$,-                             0017       0023       00012
  9405.         5$-1$,-                 ;5$-1$,-                                   0051       00016
  9406.         4$-1$,-                 ;4$-1$,-
  9407.         8$-1$                 ;8$-1$
  9408. 2$:    MOVL    R2, R0                 ;R2, R0                   6260            50         52  D0   00018
  9409.     RET                      ;                                               04   0001B
  9410. 3$:    BISL3   #128, R2, R0             ;#128, R2, R0                   6266            52 00000080   8F  C9   0001C
  9411.                          ;                                         50       00023
  9412.     RET                      ;                                               04   00024
  9413. 4$:    EXTZV   #0, #7, R2, R0             ;#0, #7, R2, TEMP_CHAR               6269            07         00  EF   00025
  9414.                          ;                                   50         52       00028
  9415.     INSV    #1, #7, #1, R0             ;#1, #7, #1, TEMP_CHAR                                 07         01  F0   0002A
  9416.                          ;                                   50         01       0002D
  9417.     BRB     6$                 ;6$                                               05  11   0002F
  9418. 5$:    EXTZV   #0, #7, R2, R0             ;#0, #7, R2, TEMP_CHAR               6272            07         00  EF   00031
  9419.                          ;                                   50         52       00034
  9420. 6$:    ASHL    #-4, R0, R1             ;#-4, TEMP_CHAR, R1               6275            50    FC   8F  78   00036
  9421.                          ;                                         51       0003A
  9422.     XORL2   R1, R0                 ;R1, TEMP_CHAR                                     50         51  CC   0003B
  9423.     ASHL    #-2, R0, R1             ;#-2, TEMP_CHAR, R1               6276            50    FE   8F  78   0003E
  9424.                          ;                                         51       00042
  9425.     XORL2   R1, R0                 ;R1, TEMP_CHAR                                     50         51  CC   00043
  9426.     CMPZV   #0, #2, R0, #1             ;#0, #2, TEMP_CHAR, #1               6278            02         00  ED   00046
  9427.                          ;                                   01         50       00049
  9428.     BEQL    7$                 ;7$                                               07  13   0004B
  9429.     CMPZV   #0, #2, R0, #2             ;#0, #2, TEMP_CHAR, #2                                 02         00  ED   0004D
  9430.                          ;                                   02         50       00050
  9431.     BNEQ    8$                 ;8$                                               0B  12   00052
  9432. 7$:    EXTZV   #0, #7, R2, R0             ;#0, #7, R2, R0               6280            07         00  EF   00054
  9433.                          ;                                   50         52       00057
  9434.     INSV    #1, #7, #1, R0             ;#1, #7, #1, R0                                 07         01  F0   00059
  9435.                          ;                                   50         01       0005C
  9436.     RET                      ;                                               04   0005E
  9437. 8$:    EXTZV   #0, #7, R2, R0             ;#0, #7, R2, R0                                 07         00  EF   0005F
  9438.                          ;                                   50         52       00062
  9439.     RET                      ;                       6282                  04   00064
  9440.  
  9441. ; Routine Size:  101 bytes,    Routine Base:  $CODE$ + 26A9
  9442.  
  9443.  
  9444. ;   6285  1    
  9445. ;   6286  1     %SBTTL 'Per transfer -- Initialization'
  9446. ;   6287  1    ROUTINE INIT_XFR : NOVALUE =
  9447. ;   6288  1    
  9448. ;   6289  1    !++
  9449. ;   6290  1    ! FUNCTIONAL DESCRIPTION:
  9450. ;   6291  1    !
  9451. ;   6292  1    !    This routine will initialize the various locations that the
  9452. ;   6293  1    !    send and receive statistics are kept.
  9453. ;   6294  1    !
  9454. ;   6295  1    ! CALLING SEQUENCE:
  9455. ;   6296  1    !
  9456. ;   6297  1    !    INIT_XFR();
  9457. ;   6298  1    !
  9458. ;   6299  1    ! INPUT PARAMETERS:
  9459. ;   6300  1    !
  9460. ;   6301  1    !    None.
  9461. ;   6302  1    !
  9462. ;   6303  1    ! IMPLICIT INPUTS:
  9463. ;   6304  1    !
  9464. ;   6305  1    !    None.
  9465. ;   6306  1    !
  9466. ;   6307  1    ! OUTPUT PARAMETERS:
  9467. ;   6308  1    !
  9468. ;   6309  1    !    None.
  9469. ;   6310  1    !
  9470. ;   6311  1    ! IMPLICIT OUTPUTS:
  9471. ;   6312  1    !
  9472. ;   6313  1    !    None.
  9473. ;   6314  1    !
  9474. ;   6315  1    ! COMPLETION CODES:
  9475. ;   6316  1    !
  9476. ;   6317  1    !    None.
  9477. ;   6318  1    !
  9478. ;   6319  1    ! SIDE EFFECTS:
  9479. ;   6320  1    !
  9480. ;   6321  1    !    None.
  9481. ;   6322  1    !
  9482. ;   6323  1    !--
  9483. ;   6324  1    
  9484. ;   6325  2        BEGIN
  9485. ;   6326  2    !
  9486. ;   6327  2    ! Determine if we should do 8 bit quoting
  9487. ;   6328  2    !
  9488. ;   6329  2    
  9489. ;   6330  2        IF .PARITY_TYPE NEQ PR_NONE
  9490. ;   6331  2        THEN
  9491. ;   6332  3        BEGIN
  9492. ;   6333  3        RECV_8QUOTE_CHR = .RCV_8QUOTE_CHR;
  9493. ;   6334  3        END
  9494. ;   6335  2        ELSE
  9495. ;   6336  3        BEGIN
  9496. ;   6337  3        RECV_8QUOTE_CHR = %C'Y';
  9497. ;   6338  2        END;
  9498. ;   6339  2    
  9499. ;   6340  2        NUM_RETRIES = 0;
  9500. ;   6341  2        SEND_8QUOTE_CHR = .RECV_8QUOTE_CHR;
  9501. ;   6342  2    !
  9502. ;   6343  2    ! Send parameters that may not get set before we need them for the first
  9503. ;   6344  2    ! time.
  9504. ;   6345  2    !
  9505. ;   6346  2        SEND_PKT_SIZE = ABS (.SND_PKT_SIZE);
  9506. ;   6347  2        SEND_NPAD = ABS (.SND_NPAD);
  9507. ;   6348  2        SEND_PADCHAR = ABS (.SND_PADCHAR);
  9508. ;   6349  2        SEND_TIMEOUT = ABS (.SND_TIMEOUT);
  9509. ;   6350  2        SEND_EOL = ABS (.SND_EOL);
  9510. ;   6351  2        SEND_QUOTE_CHR = ABS (.SND_QUOTE_CHR);
  9511. ;   6352  2    !
  9512. ;   6353  2    ! For initialization messages, we must use single character checksum
  9513. ;   6354  2    ! When the send-init/ack sequence has been done, we will switch to the
  9514. ;   6355  2    ! desired form
  9515. ;   6356  2    !
  9516. ;   6357  2        BLK_CHK_TYPE = CHK_1CHAR;
  9517. ;   6358  2        INI_CHK_TYPE = .CHKTYPE;            ! Send desired type
  9518. ;   6359  2    !
  9519. ;   6360  2    ! Set desired repeat character for use in we are doing send-init
  9520. ;   6361  2    ! Will be overwritten by other ends desired character if it sends
  9521. ;   6362  2    ! the send-init.
  9522. ;   6363  2    !
  9523. ;   6364  2        REPT_CHR = .SET_REPT_CHR;
  9524. ;   6365  2    !
  9525. ;   6366  2    ! Assume packet assembly/disassembly uses characters from a file
  9526. ;   6367  2    !
  9527. ;   6368  2        GET_CHR_ROUTINE = GET_FILE;            ! Initialize the get-a-char routine
  9528. ;   6369  2        PUT_CHR_ROUTINE = PUT_FILE;            ! And the put-a-char
  9529. ;   6370  2        TEXT_HEAD_FLAG = FALSE;            ! And assume we will get an File header
  9530. ;   6371  2        NO_FILE_NEEDED = FALSE;            ! Assume will do file ops
  9531. ;   6372  2        INIT_PKT_SENT = FALSE;            ! And no server-init sent
  9532. ;   6373  2    !
  9533. ;   6374  2    ! Always start with packet number 0
  9534. ;   6375  2    !
  9535. ;   6376  2        MSG_NUMBER = 0;                ! Initial message number
  9536. ;   6377  2    !
  9537. ;   6378  2    ! Stats information
  9538. ;   6379  2    !
  9539. ;   6380  2        SMSG_TOTAL_CHARS = 0;
  9540. ;   6381  2        RMSG_TOTAL_CHARS = 0;
  9541. ;   6382  2        SMSG_DATA_CHARS = 0;
  9542. ;   6383  2        RMSG_DATA_CHARS = 0;
  9543. ;   6384  2        SMSG_COUNT = 0;
  9544. ;   6385  2        RMSG_COUNT = 0;
  9545. ;   6386  2        RMSG_NAKS = 0;
  9546. ;   6387  2        SMSG_NAKS = 0;
  9547. ;   6388  2        XFR_TIME = SY_TIME ();
  9548. ;   6389  1        END;                    ! End of INIT_XFR
  9549.  
  9550.  
  9551.  
  9552.  
  9553.  
  9554. ;INIT_XFR
  9555. U.32:    .WORD   ^M<R2>                 ;Save R2                   6287                    0004   00000
  9556.     MOVAB   G^U.37, R2             ;U.37, R2                                     52 00000000'  00  9E   00002
  9557.     TSTL    G^PARITY_TYPE             ;PARITY_TYPE                   6330           00000000G  00  D5   00009
  9558.     BEQL    1$                 ;1$                                               09  13   0000F
  9559.     MOVL    G^RCV_8QUOTE_CHR, (R2)         ;RCV_8QUOTE_CHR, RECV_8QUOTE_CHR      6333            62 00000000G  00  D0   00011
  9560.     BRB     2$                 ;2$                                               04  11   00018
  9561. 1$:    MOVZBL  #89, (R2)             ;#89, RECV_8QUOTE_CHR               6337            62    59   8F  9A   0001A
  9562. 2$:    CLRL    68(R2)                 ;NUM_RETRIES                   6340             44   A2  D4   0001E
  9563.     MOVL    (R2), 32(R2)             ;RECV_8QUOTE_CHR, SEND_8QUOTE_CHR     6341       20   A2         62  D0   00021
  9564.     MOVL    G^SND_PKT_SIZE, R0         ;SND_PKT_SIZE, R0               6346            50 00000000G  00  D0   00025
  9565.     BGEQ    3$                 ;3$                                               03  18   0002C
  9566.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   0002E
  9567. 3$:    MOVL    R0, 12(R2)             ;R0, SEND_PKT_SIZE                            0C   A2         50  D0   00031
  9568.     MOVL    G^SND_NPAD, R0             ;SND_NPAD, R0                   6347            50 00000000G  00  D0   00035
  9569.     BGEQ    4$                 ;4$                                               03  18   0003C
  9570.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   0003E
  9571. 4$:    MOVL    R0, 16(R2)             ;R0, SEND_NPAD                                10   A2         50  D0   00041
  9572.     MOVL    G^SND_PADCHAR, R0         ;SND_PADCHAR, R0               6348            50 00000000G  00  D0   00045
  9573.     BGEQ    5$                 ;5$                                               03  18   0004C
  9574.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   0004E
  9575. 5$:    MOVL    R0, 20(R2)             ;R0, SEND_PADCHAR                            14   A2         50  D0   00051
  9576.     MOVL    G^SND_TIMEOUT, R0         ;SND_TIMEOUT, R0               6349            50 00000000G  00  D0   00055
  9577.     BGEQ    6$                 ;6$                                               03  18   0005C
  9578.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   0005E
  9579. 6$:    MOVL    R0, G^SEND_TIMEOUT         ;R0, SEND_TIMEOUT                      00000000G  00         50  D0   00061
  9580.     MOVL    G^SND_EOL, R0             ;SND_EOL, R0                   6350            50 00000000G  00  D0   00068
  9581.     BGEQ    7$                 ;7$                                               03  18   0006F
  9582.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   00071
  9583. 7$:    MOVL    R0, 24(R2)             ;R0, SEND_EOL                                18   A2         50  D0   00074
  9584.     MOVL    G^SND_QUOTE_CHR, R0         ;SND_QUOTE_CHR, R0               6351            50 00000000G  00  D0   00078
  9585.     BGEQ    8$                 ;8$                                               03  18   0007F
  9586.     MNEGL   R0, R0                 ;R0, R0                                     50         50  CE   00081
  9587. 8$:    MOVL    R0, 28(R2)             ;R0, SEND_QUOTE_CHR                            1C   A2         50  D0   00084
  9588.     MOVL    #49, 44(R2)             ;#49, BLK_CHK_TYPE               6357       2C   A2         31  D0   00088
  9589.     MOVL    G^CHKTYPE, 40(R2)         ;CHKTYPE, INI_CHK_TYPE               6358       28   A2 00000000G  00  D0   0008C
  9590.     MOVL    G^SET_REPT_CHR, 4(R2)         ;SET_REPT_CHR, REPT_CHR           6364       04   A2 00000000G  00  D0   00094
  9591.     MOVAB   G^GET_FILE, 2120(R2)         ;GET_FILE, GET_CHR_ROUTINE           6368     0848   C2 00000000G  00  9E   0009C
  9592.     MOVAB   G^PUT_FILE, 2124(R2)         ;PUT_FILE, PUT_CHR_ROUTINE           6369     084C   C2 00000000G  00  9E   000A5
  9593.     CLRQ    2100(R2)             ;TEXT_HEAD_FLAG               6370               0834   C2  7C   000AE
  9594.     CLRL    2108(R2)             ;INIT_PKT_SENT                   6372               083C   C2  D4   000B2
  9595.     CLRL    72(R2)                 ;MSG_NUMBER                   6376             48   A2  D4   000B6
  9596.     CLRL    G^SMSG_TOTAL_CHARS         ;SMSG_TOTAL_CHARS               6380           00000000G  00  D4   000B9
  9597.     CLRL    G^RMSG_TOTAL_CHARS         ;RMSG_TOTAL_CHARS               6381           00000000G  00  D4   000BF
  9598.     CLRL    G^SMSG_DATA_CHARS         ;SMSG_DATA_CHARS               6382           00000000G  00  D4   000C5
  9599.     CLRL    G^RMSG_DATA_CHARS         ;RMSG_DATA_CHARS               6383           00000000G  00  D4   000CB
  9600.     CLRL    G^SMSG_COUNT             ;SMSG_COUNT                   6384           00000000G  00  D4   000D1
  9601.     CLRL    G^RMSG_COUNT             ;RMSG_COUNT                   6385           00000000G  00  D4   000D7
  9602.     CLRL    G^RMSG_NAKS             ;RMSG_NAKS                   6386           00000000G  00  D4   000DD
  9603.     CLRL    G^SMSG_NAKS             ;SMSG_NAKS                   6387           00000000G  00  D4   000E3
  9604.     CALLS   #0, G^SY_TIME             ;#0, SY_TIME                   6388 00000000G  00         00  FB   000E9
  9605.     MOVL    R0, G^XFR_TIME             ;R0, XFR_TIME                          00000000G  00         50  D0   000F0
  9606.     RET                      ;                       6389                  04   000F7
  9607.  
  9608. ; Routine Size:  248 bytes,    Routine Base:  $CODE$ + 270E
  9609.  
  9610.  
  9611. ;   6390  1     %SBTTL 'Statistics -- Finish message transfer'
  9612. ;   6391  1    ROUTINE END_STATS : NOVALUE =
  9613. ;   6392  1    
  9614. ;   6393  1    !++
  9615. ;   6394  1    ! FUNCTIONAL DESCRIPTION:
  9616. ;   6395  1    !
  9617. ;   6396  1    !    This routine will end the collection of the statistices.  It will
  9618. ;   6397  1    !    update the various overall statistic parameters.
  9619. ;   6398  1    !
  9620. ;   6399  1    ! CALLING SEQUENCE:
  9621. ;   6400  1    !
  9622. ;   6401  1    !    END_STATS ();
  9623. ;   6402  1    !
  9624. ;   6403  1    ! INPUT PARAMETERS:
  9625. ;   6404  1    !
  9626. ;   6405  1    !    None.
  9627. ;   6406  1    !
  9628. ;   6407  1    ! IMPLICIT INPUTS:
  9629. ;   6408  1    !
  9630. ;   6409  1    !    None.
  9631. ;   6410  1    !
  9632. ;   6411  1    ! OUTPUT PARAMETERS:
  9633. ;   6412  1    !
  9634. ;   6413  1    !    None.
  9635. ;   6414  1    !
  9636. ;   6415  1    ! IMPLICIT OUTPUTS:
  9637. ;   6416  1    !
  9638. ;   6417  1    !    None.
  9639. ;   6418  1    !
  9640. ;   6419  1    ! COMPLETION CODES:
  9641. ;   6420  1    !
  9642. ;   6421  1    !    None.
  9643. ;   6422  1    !
  9644. ;   6423  1    ! SIDE EFFECTS:
  9645. ;   6424  1    !
  9646. ;   6425  1    !    None.
  9647. ;   6426  1    !
  9648. ;   6427  1    !--
  9649. ;   6428  1    
  9650. ;   6429  2        BEGIN
  9651. ;   6430  2        SND_COUNT = .SND_COUNT + .SMSG_COUNT;
  9652. ;   6431  2        RCV_COUNT = .RCV_COUNT + .RMSG_COUNT;
  9653. ;   6432  2        SND_TOTAL_CHARS = .SND_TOTAL_CHARS + .SMSG_TOTAL_CHARS;
  9654. ;   6433  2        SND_DATA_CHARS = .SND_DATA_CHARS + .SMSG_DATA_CHARS;
  9655. ;   6434  2        RCV_TOTAL_CHARS = .RCV_TOTAL_CHARS + .RMSG_TOTAL_CHARS;
  9656. ;   6435  2        RCV_DATA_CHARS = .RCV_DATA_CHARS + .RMSG_DATA_CHARS;
  9657. ;   6436  2        SND_NAKS = .SND_NAKS + .SMSG_NAKS;
  9658. ;   6437  2        RCV_NAKS = .RCV_NAKS + .RMSG_NAKS;
  9659. ;   6438  2        XFR_TIME = SY_TIME () - .XFR_TIME;
  9660. ;   6439  2        TOTAL_TIME = .TOTAL_TIME + .XFR_TIME;
  9661. ;   6440  1        END;                    ! End of END_STATS
  9662.  
  9663.  
  9664.  
  9665.  
  9666.  
  9667. ;END_STATS
  9668. U.18:    .WORD   ^M<R2>                 ;Save R2                   6391                    0004   00000
  9669.     MOVAB   G^XFR_TIME, R2             ;XFR_TIME, R2                                     52 00000000G  00  9E   00002
  9670.     ADDL2   G^SMSG_COUNT, G^SND_COUNT     ;SMSG_COUNT, SND_COUNT               6430 00000000G  00 00000000G  00  C0   00009
  9671.     ADDL2   G^RMSG_COUNT, G^RCV_COUNT     ;RMSG_COUNT, RCV_COUNT               6431 00000000G  00 00000000G  00  C0   00014
  9672.     ADDL2   G^SMSG_TOTAL_CHARS, -         ;SMSG_TOTAL_CHARS, SND_TOTAL_CHARS    6432 00000000G  00 00000000G  00  C0   0001F
  9673.         G^SND_TOTAL_CHARS         ;
  9674.     ADDL2   G^SMSG_DATA_CHARS, -         ;SMSG_DATA_CHARS, SND_DATA_CHARS      6433 00000000G  00 00000000G  00  C0   0002A
  9675.         G^SND_DATA_CHARS         ;
  9676.     ADDL2   G^RMSG_TOTAL_CHARS, -         ;RMSG_TOTAL_CHARS, RCV_TOTAL_CHARS    6434 00000000G  00 00000000G  00  C0   00035
  9677.         G^RCV_TOTAL_CHARS         ;
  9678.     ADDL2   G^RMSG_DATA_CHARS, -         ;RMSG_DATA_CHARS, RCV_DATA_CHARS      6435 00000000G  00 00000000G  00  C0   00040
  9679.         G^RCV_DATA_CHARS         ;
  9680.     ADDL2   G^SMSG_NAKS, G^SND_NAKS         ;SMSG_NAKS, SND_NAKS               6436 00000000G  00 00000000G  00  C0   0004B
  9681.     ADDL2   G^RMSG_NAKS, G^RCV_NAKS         ;RMSG_NAKS, RCV_NAKS               6437 00000000G  00 00000000G  00  C0   00056
  9682.     CALLS   #0, G^SY_TIME             ;#0, SY_TIME                   6438 00000000G  00         00  FB   00061
  9683.     SUBL3   (R2), R0, (R2)             ;XFR_TIME, R0, XFR_TIME                             50         62  C3   00068
  9684.                          ;                                         62       0006B
  9685.     ADDL2   (R2), G^TOTAL_TIME         ;XFR_TIME, TOTAL_TIME               6439 00000000G  00         62  C0   0006C
  9686.     RET                      ;                       6440                  04   00073
  9687.  
  9688. ; Routine Size:  116 bytes,    Routine Base:  $CODE$ + 2806
  9689.  
  9690.  
  9691. ;   6441  1     %SBTTL 'Status type out -- STS_OUTPUT'
  9692. ;   6442  1    ROUTINE STS_OUTPUT : NOVALUE =
  9693. ;   6443  1    
  9694. ;   6444  1    !++
  9695. ;   6445  1    ! FUNCTIONAL DESCRIPTION:
  9696. ;   6446  1    !
  9697. ;   6447  1    !    This routine will output the current status of a transfer.
  9698. ;   6448  1    !    This is used when the user types a ^A during a transfer.
  9699. ;   6449  1    !
  9700. ;   6450  1    ! CALLING SEQUENCE:
  9701. ;   6451  1    !
  9702. ;   6452  1    !    STS_OUTPUT ()
  9703. ;   6453  1    !
  9704. ;   6454  1    ! INPUT PARAMETERS:
  9705. ;   6455  1    !
  9706. ;   6456  1    !    None.
  9707. ;   6457  1    !
  9708. ;   6458  1    ! IMPLICIT INPUTS:
  9709. ;   6459  1    !
  9710. ;   6460  1    !    Statistics blocks, file names, etc.
  9711. ;   6461  1    !
  9712. ;   6462  1    ! OUPTUT PARAMETERS:
  9713. ;   6463  1    !
  9714. ;   6464  1    !    None.
  9715. ;   6465  1    !
  9716. ;   6466  1    ! IMPLICIT OUTPUTS:
  9717. ;   6467  1    !
  9718. ;   6468  1    !    None.
  9719. ;   6469  1    !
  9720. ;   6470  1    ! COMPLETION CODES:
  9721. ;   6471  1    !
  9722. ;   6472  1    !    None.
  9723. ;   6473  1    !
  9724. ;   6474  1    ! SIDE EFFECTS:
  9725. ;   6475  1    !
  9726. ;   6476  1    !    None.
  9727. ;   6477  1    !
  9728. ;   6478  1    !--
  9729. ;   6479  1    
  9730. ;   6480  2        BEGIN
  9731. ;   6481  2        TT_CHAR (%C'[');                ! Start the message
  9732. ;   6482  2    
  9733. ;   6483  2        CASE .STATE FROM STATE_MIN TO STATE_MAX OF
  9734. ;   6484  2        SET
  9735. ;   6485  2    
  9736. ;   6486  2        [STATE_ID, STATE_II] :
  9737. ;   6487  2            TT_TEXT (UPLIT (%ASCIZ'Idle in server mode'));
  9738. ;   6488  2    
  9739. ;   6489  2        [STATE_S, STATE_SF] :
  9740. ;   6490  3            BEGIN
  9741. ;   6491  3            TT_TEXT (UPLIT (%ASCIZ'Initializing for sending file '));
  9742. ;   6492  3            TT_TEXT (FILE_NAME);
  9743. ;   6493  2            END;
  9744. ;   6494  2    
  9745. ;   6495  2        [STATE_SI] :
  9746. ;   6496  2            TT_TEXT (UPLIT (%ASCIZ'Initializing for remote command'));
  9747. ;   6497  2    
  9748. ;   6498  2        [STATE_SG] :
  9749. ;   6499  2            TT_TEXT (UPLIT (%ASCIZ'Waiting for response to remote command'));
  9750. ;   6500  2    
  9751. ;   6501  2        [STATE_SD] :
  9752. ;   6502  3            BEGIN
  9753. ;   6503  3            TT_NUMBER (.FILE_CHARS);
  9754. ;   6504  3            TT_TEXT (UPLIT (%ASCIZ' characters sent for file '));
  9755. ;   6505  3            TT_TEXT (FILE_NAME);
  9756. ;   6506  2            END;
  9757. ;   6507  2    
  9758. ;   6508  2        [STATE_SZ] :
  9759. ;   6509  3            BEGIN
  9760. ;   6510  3            TT_TEXT (UPLIT (%ASCIZ'At end of file '));
  9761. ;   6511  3            TT_TEXT (FILE_NAME);
  9762. ;   6512  2            END;
  9763. ;   6513  2    
  9764. ;   6514  2        [STATE_SB] :
  9765. ;   6515  2            TT_TEXT (UPLIT (%ASCIZ'Finishing transfer session'));
  9766. ;   6516  2    
  9767. ;   6517  2        [STATE_R] :
  9768. ;   6518  2            TT_TEXT (UPLIT (%ASCIZ'Waiting for initialization'));
  9769. ;   6519  2    
  9770. ;   6520  2        [STATE_RF] :
  9771. ;   6521  2            TT_TEXT (UPLIT (%ASCIZ'Waiting for next file or end of session'));
  9772. ;   6522  2    
  9773. ;   6523  2        [STATE_RD] :
  9774. ;   6524  3            BEGIN
  9775. ;   6525  3            TT_NUMBER (.FILE_CHARS);
  9776. ;   6526  3            TT_TEXT (UPLIT (%ASCIZ' characters received for file '));
  9777. ;   6527  3            TT_TEXT (FILE_NAME);
  9778. ;   6528  2            END;
  9779. ;   6529  2    
  9780. ;   6530  2        [STATE_C] :
  9781. ;   6531  2            TT_TEXT (UPLIT (%ASCIZ' Session complete'));
  9782. ;   6532  2    
  9783. ;   6533  2        [STATE_A] :
  9784. ;   6534  2            TT_TEXT (UPLIT (%ASCIZ' Session aborted'));
  9785. ;   6535  2    
  9786. ;   6536  2        [INRANGE, OUTRANGE] :
  9787. ;   6537  2            TT_TEXT (UPLIT (%ASCIZ' Unknown state'));
  9788. ;   6538  2        TES;
  9789. ;   6539  2    
  9790. ;   6540  2        SELECTONE .STATE OF
  9791. ;   6541  2        SET
  9792. ;   6542  2    
  9793. ;   6543  2        [STATE_S, STATE_SF, STATE_SD, STATE_SZ, STATE_SB] :
  9794. ;   6544  3            BEGIN
  9795. ;   6545  3    
  9796. ;   6546  3            IF .RMSG_NAKS GTR 0
  9797. ;   6547  3            THEN
  9798. ;   6548  4            BEGIN
  9799. ;   6549  4            TT_TEXT (UPLIT (%ASCIZ', '));
  9800. ;   6550  4            TT_NUMBER (.RMSG_NAKS);
  9801. ;   6551  4            TT_TEXT (UPLIT (%ASCIZ' NAKs received'));
  9802. ;   6552  3            END;
  9803. ;   6553  3    
  9804. ;   6554  2            END;
  9805. ;   6555  2    
  9806. ;   6556  2        [STATE_R, STATE_RF, STATE_RD] :
  9807. ;   6557  3            BEGIN
  9808. ;   6558  3    
  9809. ;   6559  3            IF .SMSG_NAKS GTR 0
  9810. ;   6560  3            THEN
  9811. ;   6561  4            BEGIN
  9812. ;   6562  4            TT_TEXT (UPLIT (%ASCIZ', '));
  9813. ;   6563  4            TT_NUMBER (.SMSG_NAKS);
  9814. ;   6564  4            TT_TEXT (UPLIT (%ASCIZ' NAKs sent'));
  9815. ;   6565  3            END;
  9816. ;   6566  3    
  9817. ;   6567  2            END;
  9818. ;   6568  2        TES;
  9819. ;   6569  2    
  9820. ;   6570  2        TT_CHAR (%C']');                ! End the line
  9821. ;   6571  2        TT_CRLF ();                    ! with a CRLF
  9822. ;   6572  1        END;                    ! End of STS_OUTPUT
  9823.  
  9824.  
  9825.  
  9826.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  9827.  
  9828. P.AAO:    .ASCII  \Idle in server mode\<0>     ;                                20  6E  69  20  65  6C  64  49  000B8
  9829.                          ;                          6D  20  72  65  76  72  65  73  000C0
  9830.                          ;                                      00  65  64  6F  000C8
  9831. P.AAP:    .ASCII  \Initializing for sending file \<0><0>
  9832.                          ;                                69  6C  61  69  74  69  6E  49  000CC
  9833.                          ;                          72  6F  66  20  67  6E  69  7A  000D4
  9834.                          ;                          67  6E  69  64  6E  65  73  20  000DC
  9835.                          ;                          00  00  20  65  6C  69  66  20  000E4
  9836. P.AAQ:    .ASCII  \Initializing for remote command\<0>
  9837.                          ;                                69  6C  61  69  74  69  6E  49  000EC
  9838.                          ;                          72  6F  66  20  67  6E  69  7A  000F4
  9839.                          ;                          20  65  74  6F  6D  65  72  20  000FC
  9840.                          ;                          00  64  6E  61  6D  6D  6F  63  00104
  9841. P.AAR:    .ASCII  \Waiting for response to remote command\<0><0>
  9842.                          ;                                20  67  6E  69  74  69  61  57  0010C
  9843.                          ;                          70  73  65  72  20  72  6F  66  00114
  9844.                          ;                          20  6F  74  20  65  73  6E  6F  0011C
  9845.                          ;                          63  20  65  74  6F  6D  65  72  00124
  9846.                          ;                          00  00  64  6E  61  6D  6D  6F  0012C
  9847. P.AAS:    .ASCII  \ characters sent for file \<0><0>
  9848.                          ;                                74  63  61  72  61  68  63  20  00134
  9849.                          ;                          74  6E  65  73  20  73  72  65  0013C
  9850.                          ;                          6C  69  66  20  72  6F  66  20  00144
  9851.                          ;                                      00  00  20  65  0014C
  9852. P.AAT:    .ASCII  \At end of file \<0>         ;                                6F  20  64  6E  65  20  74  41  00150
  9853.                          ;                          00  20  65  6C  69  66  20  66  00158
  9854. P.AAU:    .ASCII  \Finishing transfer session\<0><0>
  9855.                          ;                                6E  69  68  73  69  6E  69  46  00160
  9856.                          ;                          66  73  6E  61  72  74  20  67  00168
  9857.                          ;                          69  73  73  65  73  20  72  65  00170
  9858.                          ;                                      00  00  6E  6F  00178
  9859. P.AAV:    .ASCII  \Waiting for initialization\<0><0>
  9860.                          ;                                20  67  6E  69  74  69  61  57  0017C
  9861.                          ;                          74  69  6E  69  20  72  6F  66  00184
  9862.                          ;                          69  74  61  7A  69  6C  61  69  0018C
  9863.                          ;                                      00  00  6E  6F  00194
  9864. P.AAW:    .ASCII  \Waiting for next file or end of session\<0>
  9865.                          ;                                20  67  6E  69  74  69  61  57  00198
  9866.                          ;                          74  78  65  6E  20  72  6F  66  001A0
  9867.                          ;                          72  6F  20  65  6C  69  66  20  001A8
  9868.                          ;                          20  66  6F  20  64  6E  65  20  001B0
  9869.                          ;                          00  6E  6F  69  73  73  65  73  001B8
  9870. P.AAX:    .ASCII  \ characters received for file \<0><0>
  9871.                          ;                                74  63  61  72  61  68  63  20  001C0
  9872.                          ;                          65  63  65  72  20  73  72  65  001C8
  9873.                          ;                          72  6F  66  20  64  65  76  69  001D0
  9874.                          ;                          00  00  20  65  6C  69  66  20  001D8
  9875. P.AAY:    .ASCII  \ Session complete\<0><0><0>     ;                                6E  6F  69  73  73  65  53  20  001E0
  9876.                          ;                          74  65  6C  70  6D  6F  63  20  001E8
  9877.                          ;                                      00  00  00  65  001F0
  9878. P.AAZ:    .ASCII  \ Session aborted\<0><0><0><0>     ;                                6E  6F  69  73  73  65  53  20  001F4
  9879.                          ;                          64  65  74  72  6F  62  61  20  001FC
  9880.                          ;                                      00  00  00  00  00204
  9881. P.ABA:    .ASCII  \ Unknown state\<0><0>         ;                                6E  77  6F  6E  6B  6E  55  20  00208
  9882.                          ;                          00  00  65  74  61  74  73  20  00210
  9883. P.ABB:    .ASCII  \, \<0><0>             ;                                            00  00  20  2C  00218
  9884. P.ABC:    .ASCII  \ NAKs received\<0><0>         ;                                65  72  20  73  4B  41  4E  20  0021C
  9885.                          ;                          00  00  64  65  76  69  65  63  00224
  9886. P.ABD:    .ASCII  \, \<0><0>             ;                                            00  00  20  2C  0022C
  9887. P.ABE:    .ASCII  \ NAKs sent\<0><0>         ;                                65  73  20  73  4B  41  4E  20  00230
  9888.                          ;                                      00  00  74  6E  00238
  9889.  
  9890.  
  9891.  
  9892.     .PSECT  $CODE$,NOWRT,2
  9893.  
  9894. ;STS_OUTPUT
  9895. U.33:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8>     ;Save R2,R3,R4,R5,R6,R7,R8           6442                    01FC   00000
  9896.     MOVAB   G^TT_CHAR, R8             ;TT_CHAR, R8                                     58 00000000G  00  9E   00002
  9897.     MOVAB   G^SMSG_NAKS, R7             ;SMSG_NAKS, R7                                     57 00000000G  00  9E   00009
  9898.     MOVAB   G^RMSG_NAKS, R6             ;RMSG_NAKS, R6                                     56 00000000G  00  9E   00010
  9899.     MOVAB   G^TT_NUMBER, R5             ;TT_NUMBER, R5                                     55 00000000G  00  9E   00017
  9900.     MOVAB   G^U.51, R4             ;U.51, R4                                     54 00000000'  00  9E   0001E
  9901.     MOVAB   G^TT_TEXT, R3             ;TT_TEXT, R3                                     53 00000000G  00  9E   00025
  9902.     MOVAB   G^P.ABA, R2             ;P.ABA, R2                                     52 00000000'  00  9E   0002C
  9903.     MOVZBL  #91, -(SP)             ;#91, -(SP)                   6481            7E    5B   8F  9A   00033
  9904.     CALLS   #1, (R8)             ;#1, TT_CHAR                                     68         01  FB   00037
  9905.     CASEL   (R4), #1, #19             ;STATE, #1, #19               6483            01         64  CF   0003A
  9906.                          ;                                         13       0003D
  9907. 1$:    .WORD   4$-1$,-                 ;4$-1$,-                                   0032       0032       0003E
  9908.         4$-1$,-                 ;4$-1$,-                             0051       0044       00042
  9909.         7$-1$,-                 ;7$-1$,-                             0066       0060       00046
  9910.         8$-1$,-                 ;8$-1$,-                             0071       006C       0004A
  9911.         10$-1$,-             ;10$-1$,-                             0082       007D       0004E
  9912.         11$-1$,-             ;11$-1$,-                             003E       0028       00052
  9913.         12$-1$,-             ;12$-1$,-                             002C       0038       00056
  9914.         13$-1$,-             ;13$-1$,-                             0028       002C       0005A
  9915.         14$-1$,-             ;14$-1$,-                             0028       0028       0005E
  9916.         15$-1$,-             ;15$-1$,-                             0028       0028       00062
  9917.         2$-1$,-                 ;2$-1$,-
  9918.         6$-1$,-                 ;6$-1$,-
  9919.         5$-1$,-                 ;5$-1$,-
  9920.         3$-1$,-                 ;3$-1$,-
  9921.         3$-1$,-                 ;3$-1$,-
  9922.         2$-1$,-                 ;2$-1$,-
  9923.         2$-1$,-                 ;2$-1$,-
  9924.         2$-1$,-                 ;2$-1$,-
  9925.         2$-1$,-                 ;2$-1$,-
  9926.         2$-1$                 ;2$-1$
  9927. 2$:    PUSHL   R2                 ;R2                       6537                  52  DD   00066
  9928.     BRB     16$                 ;16$                                               59  11   00068
  9929. 3$:    PUSHAB  -336(R2)             ;P.AAO                       6487               FEB0   C2  9F   0006A
  9930.     BRB     16$                 ;16$                                               53  11   0006E
  9931. 4$:    PUSHAB  -316(R2)             ;P.AAP                       6491               FEC4   C2  9F   00070
  9932.     BRB     9$                 ;9$                                               1D  11   00074
  9933. 5$:    PUSHAB  -284(R2)             ;P.AAQ                       6496               FEE4   C2  9F   00076
  9934.     BRB     16$                 ;16$                                               47  11   0007A
  9935. 6$:    PUSHAB  -252(R2)             ;P.AAR                       6499               FF04   C2  9F   0007C
  9936.     BRB     16$                 ;16$                                               41  11   00080
  9937. 7$:    PUSHL   2040(R4)             ;FILE_CHARS                   6503               07F8   C4  DD   00082
  9938.     CALLS   #1, (R5)             ;#1, TT_NUMBER                                     65         01  FB   00086
  9939.     PUSHAB  -212(R2)             ;P.AAS                       6504               FF2C   C2  9F   00089
  9940.     BRB     9$                 ;9$                                               04  11   0008D
  9941. 8$:    PUSHAB  -184(R2)             ;P.AAT                       6510               FF48   C2  9F   0008F
  9942. 9$:    CALLS   #1, (R3)             ;#1, TT_TEXT                                     63         01  FB   00093
  9943.     PUSHAB  G^FILE_NAME             ;FILE_NAME                   6511           00000000G  00  9F   00096
  9944.     BRB     16$                 ;16$                                               25  11   0009C
  9945. 10$:    PUSHAB  -168(R2)             ;P.AAU                       6515               FF58   C2  9F   0009E
  9946.     BRB     16$                 ;16$                                               1F  11   000A2
  9947. 11$:    PUSHAB  -140(R2)             ;P.AAV                       6518               FF74   C2  9F   000A4
  9948.     BRB     16$                 ;16$                                               19  11   000A8
  9949. 12$:    PUSHAB  -112(R2)             ;P.AAW                       6521             90   A2  9F   000AA
  9950.     BRB     16$                 ;16$                                               14  11   000AD
  9951. 13$:    PUSHL   2040(R4)             ;FILE_CHARS                   6525               07F8   C4  DD   000AF
  9952.     CALLS   #1, (R5)             ;#1, TT_NUMBER                                     65         01  FB   000B3
  9953.     PUSHAB  -72(R2)                 ;P.AAX                       6526             B8   A2  9F   000B6
  9954.     BRB     9$                 ;9$                                               D8  11   000B9
  9955. 14$:    PUSHAB  -40(R2)                 ;P.AAY                       6531             D8   A2  9F   000BB
  9956.     BRB     16$                 ;16$                                               03  11   000BE
  9957. 15$:    PUSHAB  -20(R2)                 ;P.AAZ                       6534             EC   A2  9F   000C0
  9958. 16$:    CALLS   #1, (R3)             ;#1, TT_TEXT                                     63         01  FB   000C3
  9959.     MOVL    (R4), R0             ;STATE, R0                   6540            50         64  D0   000C6
  9960.     BLEQ    17$                 ;17$                       6543                  19  15   000C9
  9961.     CMPL    R0, #5                 ;R0, #5                                     05         50  D1   000CB
  9962.     BGTR    17$                 ;17$                                               14  14   000CE
  9963.     TSTL    (R6)                 ;RMSG_NAKS                   6546                  66  D5   000D0
  9964.     BLEQ    19$                 ;19$                                               2F  15   000D2
  9965.     PUSHAB  16(R2)                 ;P.ABB                       6549             10   A2  9F   000D4
  9966.     CALLS   #1, (R3)             ;#1, TT_TEXT                                     63         01  FB   000D7
  9967.     PUSHL   (R6)                 ;RMSG_NAKS                   6550                  66  DD   000DA
  9968.     CALLS   #1, (R5)             ;#1, TT_NUMBER                                     65         01  FB   000DC
  9969.     PUSHAB  20(R2)                 ;P.ABC                       6551             14   A2  9F   000DF
  9970.     BRB     18$                 ;18$                                               1C  11   000E2
  9971. 17$:    CMPL    R0, #6                 ;R0, #6                   6556            06         50  D1   000E4
  9972.     BLSS    19$                 ;19$                                               1A  19   000E7
  9973.     CMPL    R0, #8                 ;R0, #8                                     08         50  D1   000E9
  9974.     BGTR    19$                 ;19$                                               15  14   000EC
  9975.     TSTL    (R7)                 ;SMSG_NAKS                   6559                  67  D5   000EE
  9976.     BLEQ    19$                 ;19$                                               11  15   000F0
  9977.     PUSHAB  36(R2)                 ;P.ABD                       6562             24   A2  9F   000F2
  9978.     CALLS   #1, (R3)             ;#1, TT_TEXT                                     63         01  FB   000F5
  9979.     PUSHL   (R7)                 ;SMSG_NAKS                   6563                  67  DD   000F8
  9980.     CALLS   #1, (R5)             ;#1, TT_NUMBER                                     65         01  FB   000FA
  9981.     PUSHAB  40(R2)                 ;P.ABE                       6564             28   A2  9F   000FD
  9982. 18$:    CALLS   #1, (R3)             ;#1, TT_TEXT                                     63         01  FB   00100
  9983. 19$:    MOVZBL  #93, -(SP)             ;#93, -(SP)                   6570            7E    5D   8F  9A   00103
  9984.     CALLS   #1, (R8)             ;#1, TT_CHAR                                     68         01  FB   00107
  9985.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6571 00000000G  00         00  FB   0010A
  9986.     RET                      ;                       6572                  04   00111
  9987.  
  9988. ; Routine Size:  274 bytes,    Routine Base:  $CODE$ + 287A
  9989.  
  9990.  
  9991. ;   6573  1     %SBTTL 'TYPE_CHAR - Type out a character'
  9992. ;   6574  1    ROUTINE TYPE_CHAR (CHARACTER) =
  9993. ;   6575  1    
  9994. ;   6576  1    !++
  9995. ;   6577  1    ! FUNCTIONAL DESCRIPTION:
  9996. ;   6578  1    !
  9997. ;   6579  1    ! This routine is used as an alternate output routine for BFR_EMPTY.
  9998. ;   6580  1    ! It will type the character on the terminal, and always return a
  9999. ;   6581  1    ! true status.
  10000. ;   6582  1    !
  10001. ;   6583  1    ! CALLING SEQUENCE:
  10002. ;   6584  1    !
  10003. ;   6585  1    !    STATUS = TYPE_CHAR (.CHARACTER);
  10004. ;   6586  1    !
  10005. ;   6587  1    ! INPUT PARAMETERS:
  10006. ;   6588  1    !
  10007. ;   6589  1    !    CHARACTER - The character to type
  10008. ;   6590  1    !
  10009. ;   6591  1    ! IMPLICIT INPUTS:
  10010. ;   6592  1    !
  10011. ;   6593  1    !    None.
  10012. ;   6594  1    !
  10013. ;   6595  1    ! OUPTUT PARAMETERS:
  10014. ;   6596  1    !
  10015. ;   6597  1    !    None.
  10016. ;   6598  1    !
  10017. ;   6599  1    ! IMPLICIT OUTPUTS:
  10018. ;   6600  1    !
  10019. ;   6601  1    !    None.
  10020. ;   6602  1    !
  10021. ;   6603  1    ! COMPLETION CODES:
  10022. ;   6604  1    !
  10023. ;   6605  1    !    None.
  10024. ;   6606  1    !
  10025. ;   6607  1    ! SIDE EFFECTS:
  10026. ;   6608  1    !
  10027. ;   6609  1    !    None.
  10028. ;   6610  1    !
  10029. ;   6611  1    !--
  10030. ;   6612  1    
  10031. ;   6613  2        BEGIN
  10032. ;   6614  2        TT_CHAR (.CHARACTER);            ! Type the character
  10033. ;   6615  2        RETURN KER_NORMAL;                ! And return OK
  10034. ;   6616  1        END;                    ! End of TYPE_CHAR
  10035.  
  10036.  
  10037.  
  10038.  
  10039.  
  10040. ;TYPE_CHAR
  10041. U.31:    .WORD   ^M<>                 ;Save nothing                   6574                    0000   00000
  10042.     PUSHL   4(AP)                 ;CHARACTER                   6614             04   AC  DD   00002
  10043.     CALLS   #1, G^TT_CHAR             ;#1, TT_CHAR                          00000000G  00         01  FB   00005
  10044.     MOVL    #134316043, R0             ;#134316043, R0               6615            50 0801800B   8F  D0   0000C
  10045.     RET                      ;                                               04   00013
  10046.  
  10047. ; Routine Size:  20 bytes,    Routine Base:  $CODE$ + 298C
  10048.  
  10049.  
  10050. ;   6617  1     %SBTTL 'Debugging -- DBG_SEND'
  10051. ;   6618  1    ROUTINE DBG_SEND (ADDRESS, LENGTH) : NOVALUE =
  10052. ;   6619  1    
  10053. ;   6620  1    !++
  10054. ;   6621  1    ! FUNCTIONAL DESCRIPTION:
  10055. ;   6622  1    !
  10056. ;   6623  1    !    This routine will output the message that is going to be sent
  10057. ;   6624  1    !    as part of the debugging information that is turned on in the
  10058. ;   6625  1    !    SET DEBUG command.
  10059. ;   6626  1    !
  10060. ;   6627  1    ! CALLING SEQUENCE:
  10061. ;   6628  1    !
  10062. ;   6629  1    !    DBG_SEND(MSG_ADDRESS, MSG_LENGTH);
  10063. ;   6630  1    !
  10064. ;   6631  1    ! INPUT PARAMETERS:
  10065. ;   6632  1    !
  10066. ;   6633  1    !    MSG_ADDRESS - Address of the message that is going to be sent
  10067. ;   6634  1    !        to the remote KERMIT.  The bytes are CHR_SIZE.
  10068. ;   6635  1    !    MSG_LENGTH - Length of the message.
  10069. ;   6636  1    !
  10070. ;   6637  1    ! IMPLICIT INPUTS:
  10071. ;   6638  1    !
  10072. ;   6639  1    !    None.
  10073. ;   6640  1    !
  10074. ;   6641  1    ! OUTPUT PARAMETERS:
  10075. ;   6642  1    !
  10076. ;   6643  1    !    None.
  10077. ;   6644  1    !
  10078. ;   6645  1    ! IMPLICIT OUTPUTS:
  10079. ;   6646  1    !
  10080. ;   6647  1    !    None.
  10081. ;   6648  1    !
  10082. ;   6649  1    ! COMPLETION CODES:
  10083. ;   6650  1    !
  10084. ;   6651  1    !    None.
  10085. ;   6652  1    !
  10086. ;   6653  1    ! SIDE EFFECTS:
  10087. ;   6654  1    !
  10088. ;   6655  1    !    None.
  10089. ;   6656  1    !
  10090. ;   6657  1    !--
  10091. ;   6658  1    
  10092. ;   6659  2        BEGIN
  10093. ;   6660  2    
  10094. ;   6661  2        BIND
  10095. ;   6662  2        SEND_TEXT = UPLIT (%ASCIZ'Sending...');
  10096. ;   6663  2    
  10097. ;   6664  2        IF .DEBUG_FLAG
  10098. ;   6665  2        THEN
  10099. ;   6666  3        BEGIN
  10100. ;   6667  3    
  10101. ;   6668  3        LOCAL
  10102. ;   6669  3            OLD_RTN;
  10103. ;   6670  3    
  10104. ;   6671  3        OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
  10105. ;   6672  3        TT_TEXT (SEND_TEXT);
  10106. ;   6673  3        DBG_MESSAGE (.ADDRESS, .LENGTH);
  10107. ;   6674  3        TT_SET_OUTPUT (.OLD_RTN);
  10108. ;   6675  2        END;
  10109. ;   6676  2    
  10110. ;   6677  1        END;                    ! End of DBG_SEND
  10111.  
  10112.  
  10113.  
  10114.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  10115.  
  10116. P.ABF:    .ASCII  \Sending...\<0><0>         ;                                2E  67  6E  69  64  6E  65  53  0023C
  10117.                          ;                                      00  00  2E  2E  00244
  10118.  
  10119. U.102=            P.ABF
  10120.  
  10121.  
  10122.     .PSECT  $CODE$,NOWRT,2
  10123.  
  10124. ;DBG_SEND
  10125. U.35:    .WORD   ^M<R2,R3>             ;Save R2,R3                   6618                    000C   00000
  10126.     MOVAB   G^TT_SET_OUTPUT, R3         ;TT_SET_OUTPUT, R3                                 53 00000000G  00  9E   00002
  10127.     BLBC    G^DEBUG_FLAG, 1$         ;DEBUG_FLAG, 1$               6664            29 00000000G  00  E9   00009
  10128.     PUSHAB  G^DBG_DUMP             ;DBG_DUMP                   6671           00000000G  00  9F   00010
  10129.     CALLS   #1, (R3)             ;#1, TT_SET_OUTPUT                                 63         01  FB   00016
  10130.     MOVL    R0, R2                 ;R0, OLD_RTN                                     52         50  D0   00019
  10131.     PUSHAB  G^U.102                 ;U.102                       6672           00000000'  00  9F   0001C
  10132.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   00022
  10133.     MOVQ    4(AP), -(SP)             ;ADDRESS, -(SP)               6673            7E    04   AC  7D   00029
  10134.     CALLS   #2, G^U.34             ;#2, U.34                          00000000V  00         02  FB   0002D
  10135.     PUSHL   R2                 ;OLD_RTN                   6674                  52  DD   00034
  10136.     CALLS   #1, (R3)             ;#1, TT_SET_OUTPUT                                 63         01  FB   00036
  10137. 1$:    RET                      ;                       6677                  04   00039
  10138.  
  10139. ; Routine Size:  58 bytes,    Routine Base:  $CODE$ + 29A0
  10140.  
  10141.  
  10142. ;   6678  1     %SBTTL 'Debugging -- DBG_RECEIVE'
  10143. ;   6679  1    ROUTINE DBG_RECEIVE (ADDRESS) : NOVALUE =
  10144. ;   6680  1    
  10145. ;   6681  1    !++
  10146. ;   6682  1    ! FUNCTIONAL DESCRIPTION:
  10147. ;   6683  1    !
  10148. ;   6684  1    !    This routine will output the message that was received from
  10149. ;   6685  1    !    the remote KERMIT.  This routine is called only if the DEBUG_FLAG
  10150. ;   6686  1    !    is true.
  10151. ;   6687  1    !
  10152. ;   6688  1    ! CALLING SEQUENCE:
  10153. ;   6689  1    !
  10154. ;   6690  1    !    DBG_RECEIVE(MSG_ADDRESS);
  10155. ;   6691  1    !
  10156. ;   6692  1    ! INPUT PARAMETERS:
  10157. ;   6693  1    !
  10158. ;   6694  1    !    MSG_ADDRESS - Address of the message received by the remote KERMIT.
  10159. ;   6695  1    !
  10160. ;   6696  1    ! IMPLICIT INPUTS:
  10161. ;   6697  1    !
  10162. ;   6698  1    !    None.
  10163. ;   6699  1    !
  10164. ;   6700  1    ! OUTPUT PARAMETERS:
  10165. ;   6701  1    !
  10166. ;   6702  1    !    None.
  10167. ;   6703  1    !
  10168. ;   6704  1    ! IMPLICIT OUTPUTS:
  10169. ;   6705  1    !
  10170. ;   6706  1    !    None.
  10171. ;   6707  1    !
  10172. ;   6708  1    ! COMPLETION CODES:
  10173. ;   6709  1    !
  10174. ;   6710  1    !    None.
  10175. ;   6711  1    !
  10176. ;   6712  1    ! SIDE EFFECTS:
  10177. ;   6713  1    !
  10178. ;   6714  1    !    None.
  10179. ;   6715  1    !
  10180. ;   6716  1    !--
  10181. ;   6717  1    
  10182. ;   6718  2        BEGIN
  10183. ;   6719  2    
  10184. ;   6720  2        BIND
  10185. ;   6721  2        RECEIVE_TEXT = UPLIT (%ASCIZ'Received...');
  10186. ;   6722  2    
  10187. ;   6723  2        IF .DEBUG_FLAG
  10188. ;   6724  2        THEN
  10189. ;   6725  3        BEGIN
  10190. ;   6726  3    
  10191. ;   6727  3        LOCAL
  10192. ;   6728  3            OLD_RTN;
  10193. ;   6729  3    
  10194. ;   6730  3        OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
  10195. ;   6731  3        TT_TEXT (RECEIVE_TEXT);
  10196. ;   6732  3        DBG_MESSAGE (.ADDRESS, .REC_LENGTH);
  10197. ;   6733  3        TT_SET_OUTPUT (.OLD_RTN);
  10198. ;   6734  2        END;
  10199. ;   6735  2    
  10200. ;   6736  1        END;                    ! End of DBG_RECEIVE
  10201.  
  10202.  
  10203.  
  10204.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  10205.  
  10206. P.ABG:    .ASCII  \Received...\<0>         ;                                64  65  76  69  65  63  65  52  00248
  10207.                          ;                                      00  2E  2E  2E  00250
  10208.  
  10209. U.103=            P.ABG
  10210.  
  10211.  
  10212.     .PSECT  $CODE$,NOWRT,2
  10213.  
  10214. ;DBG_RECEIVE
  10215. U.36:    .WORD   ^M<R2,R3>             ;Save R2,R3                   6679                    000C   00000
  10216.     MOVAB   G^TT_SET_OUTPUT, R3         ;TT_SET_OUTPUT, R3                                 53 00000000G  00  9E   00002
  10217.     BLBC    G^DEBUG_FLAG, 1$         ;DEBUG_FLAG, 1$               6723            2E 00000000G  00  E9   00009
  10218.     PUSHAB  G^DBG_DUMP             ;DBG_DUMP                   6730           00000000G  00  9F   00010
  10219.     CALLS   #1, (R3)             ;#1, TT_SET_OUTPUT                                 63         01  FB   00016
  10220.     MOVL    R0, R2                 ;R0, OLD_RTN                                     52         50  D0   00019
  10221.     PUSHAB  G^U.103                 ;U.103                       6731           00000000'  00  9F   0001C
  10222.     CALLS   #1, G^TT_TEXT             ;#1, TT_TEXT                          00000000G  00         01  FB   00022
  10223.     PUSHL   G^U.57                 ;U.57                       6732           00000000'  00  DD   00029
  10224.     PUSHL   4(AP)                 ;ADDRESS                                      04   AC  DD   0002F
  10225.     CALLS   #2, G^U.34             ;#2, U.34                          00000000V  00         02  FB   00032
  10226.     PUSHL   R2                 ;OLD_RTN                   6733                  52  DD   00039
  10227.     CALLS   #1, (R3)             ;#1, TT_SET_OUTPUT                                 63         01  FB   0003B
  10228. 1$:    RET                      ;                       6736                  04   0003E
  10229.  
  10230. ; Routine Size:  63 bytes,    Routine Base:  $CODE$ + 29DA
  10231.  
  10232.  
  10233. ;   6737  1     %SBTTL 'Debugging -- DBG_MESSAGE'
  10234. ;   6738  1    ROUTINE DBG_MESSAGE (MSG_ADDRESS, MSG_LENGTH) : NOVALUE =
  10235. ;   6739  1    
  10236. ;   6740  1    !++
  10237. ;   6741  1    ! FUNCTIONAL DESCRIPTION:
  10238. ;   6742  1    !
  10239. ;   6743  1    !    This routine will display a message that is either being sent
  10240. ;   6744  1    !    or received on the user's terminal.
  10241. ;   6745  1    !
  10242. ;   6746  1    ! CALLING SEQUENCE:
  10243. ;   6747  1    !
  10244. ;   6748  1    !    DBG_MESSAGE(MSG_ADDRESS, MSG_LENGTH);
  10245. ;   6749  1    !
  10246. ;   6750  1    ! INPUT PARAMETERS:
  10247. ;   6751  1    !
  10248. ;   6752  1    !    MSG_ADDRESS - Address of the message to be output
  10249. ;   6753  1    !    MSG_LENGTH - Length of the message to be output.
  10250. ;   6754  1    !
  10251. ;   6755  1    ! IMPLICIT INPUTS:
  10252. ;   6756  1    !
  10253. ;   6757  1    !    None.
  10254. ;   6758  1    !
  10255. ;   6759  1    ! OUTPUT PARAMETERS:
  10256. ;   6760  1    !
  10257. ;   6761  1    !    None.
  10258. ;   6762  1    !
  10259. ;   6763  1    ! IMPLICIT OUTPUTS:
  10260. ;   6764  1    !
  10261. ;   6765  1    !    None.
  10262. ;   6766  1    !
  10263. ;   6767  1    ! COMPLETION CODES:
  10264. ;   6768  1    !
  10265. ;   6769  1    !    None.
  10266. ;   6770  1    !
  10267. ;   6771  1    ! SIDE EFFECTS:
  10268. ;   6772  1    !
  10269. ;   6773  1    !    None.
  10270. ;   6774  1    !
  10271. ;   6775  1    !--
  10272. ;   6776  1    
  10273. ;   6777  2        BEGIN
  10274. ;   6778  2    
  10275. ;   6779  2        MAP
  10276. ;   6780  2        MSG_ADDRESS : REF VECTOR [CH$ALLOCATION (MAX_MSG, CHR_SIZE)];    ! Point to the vector
  10277. ;   6781  2    
  10278. ;   6782  2        LOCAL
  10279. ;   6783  2        OLD_RTN,                ! Old type out routine
  10280. ;   6784  2        CHKSUM,                    ! Numeric value of block check
  10281. ;   6785  2        TEMP_POINTER,                ! Temporary character pointer
  10282. ;   6786  2        MSG_MSG,            ! [108]    ! Starting point for data
  10283. ;   6787  2        MSG_LEN;
  10284. ;   6788  2    
  10285. ;   6789  2    !
  10286. ;   6790  2    ! Message type text
  10287. ;   6791  2    !
  10288. ;   6792  2    
  10289. ;   6793  2        BIND
  10290. ;   6794  2        DATA_TEXT = UPLIT (%ASCIZ' (Data)'),
  10291. ;   6795  2        ACK_TEXT = UPLIT (%ASCIZ' (ACK)'),
  10292. ;   6796  2        NAK_TEXT = UPLIT (%ASCIZ' (NAK)'),
  10293. ;   6797  2        SND_INIT_TEXT = UPLIT (%ASCIZ' (Send init)'),
  10294. ;   6798  2        BREAK_TEXT = UPLIT (%ASCIZ' (Break)'),
  10295. ;   6799  2        TEXT_TEXT = UPLIT (%ASCIZ' (Text header)'),
  10296. ;   6800  2        FILE_TEXT = UPLIT (%ASCIZ' (File header)'),
  10297. ;   6801  2        EOF_TEXT = UPLIT (%ASCIZ' (EOF)'),
  10298. ;   6802  2        ERROR_TEXT = UPLIT (%ASCIZ' (Error)'),
  10299. ;   6803  2        RCV_INIT_TEXT = UPLIT (%ASCIZ' (Receive initiate)'),
  10300. ;   6804  2        COMMAND_TEXT = UPLIT (%ASCIZ' (Command)'),
  10301. ;   6805  2        KERMIT_TEXT = UPLIT (%ASCIZ' (Generic KERMIT command)');
  10302. ;   6806  2    
  10303. ;   6807  2    !
  10304. ;   6808  2    ! Header information
  10305. ;   6809  2    !
  10306. ;   6810  2    
  10307. ;   6811  2        BIND
  10308. ;   6812  2        MN_TEXT = UPLIT (%ASCIZ'Message number: '),
  10309. ;   6813  2        LENGTH_TEXT = UPLIT (%ASCIZ'    Length: '),
  10310. ;   6814  2        DEC_TEXT = UPLIT (%ASCIZ' (dec)'),
  10311. ;   6815  2        MSG_TYP_TEXT = UPLIT (%ASCIZ'Message type: '),
  10312. ;   6816  2        CHKSUM_TEXT = UPLIT (%ASCIZ'Checksum: '),
  10313. ;   6817  2        CHKSUM_NUM_TEXT = UPLIT (%ASCIZ' = '),
  10314. ;   6818  2        OPT_DATA_TEXT = UPLIT (%ASCIZ'Optional data: '),
  10315. ;   6819  2        PRE_CHAR_TEXT = UPLIT (%ASCIZ' "');
  10316. ;   6820  2    
  10317. ;   6821  2    !
  10318. ;   6822  2    ! Ensure that the type out will go to the debugging location
  10319. ;   6823  2    !
  10320. ;   6824  2        OLD_RTN = TT_SET_OUTPUT (DBG_DUMP);
  10321. ;   6825  2    !
  10322. ;   6826  2    ! Preliminary calculations
  10323. ;   6827  2    !
  10324. ;   6828  2        MSG_LEN = UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_COUNT, CHR_SIZE)));
  10325. ;   6829  2        MSG_MSG = PKT_MSG;                               ! [108]
  10326. ;   6830  2        IF .MSG_LEN EQL 0                               ! [108]
  10327. ;   6831  2        THEN                                   ! [108]
  10328. ;   6832  3        BEGIN                                   ! [108]
  10329. ;   6833  3        MSG_LEN = UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_COUNTX1, CHR_SIZE))) * 95
  10330. ;   6834  3     +
  10331. ;   6835  3            UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_COUNTX2, CHR_SIZE))) +
  10332. ;   6836  3                            PKT_HCHECK - 1;           ! [108]
  10333. ;   6837  3        MSG_MSG = PKT_MSGX;                           ! [108]
  10334. ;   6838  2        END;                                   ! [108]
  10335. ;   6839  2    
  10336. ;   6840  2    !
  10337. ;   6841  2    ! First output some header information for the packet.
  10338. ;   6842  2    !
  10339. ;   6843  2        TT_CRLF ();
  10340. ;   6844  2        TT_TEXT (MN_TEXT);
  10341. ;   6845  2        TT_NUMBER (UNCHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_SEQ, CHR_SIZE))));
  10342. ;   6846  2        TT_TEXT (DEC_TEXT);
  10343. ;   6847  2        TT_TEXT (LENGTH_TEXT);
  10344. ;   6848  2        TT_NUMBER (.MSG_LEN);
  10345. ;   6849  2        TT_TEXT (DEC_TEXT);
  10346. ;   6850  2        TT_CRLF ();
  10347. ;   6851  2    !
  10348. ;   6852  2    ! Now output the message type and dependent information
  10349. ;   6853  2    !
  10350. ;   6854  2        TT_TEXT (MSG_TYP_TEXT);
  10351. ;   6855  2        TT_CHAR (CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_TYPE, CHR_SIZE)));
  10352. ;   6856  2    
  10353. ;   6857  2        SELECTONE CH$RCHAR (CH$PTR (.MSG_ADDRESS, PKT_TYPE, CHR_SIZE)) OF
  10354. ;   6858  2        SET
  10355. ;   6859  2    
  10356. ;   6860  2        [MSG_DATA] :
  10357. ;   6861  2            TT_TEXT (DATA_TEXT);
  10358. ;   6862  2    
  10359. ;   6863  2        [MSG_ACK] :
  10360. ;   6864  2            TT_TEXT (ACK_TEXT);
  10361. ;   6865  2    
  10362. ;   6866  2        [MSG_NAK] :
  10363. ;   6867  2            TT_TEXT (NAK_TEXT);
  10364. ;   6868  2    
  10365. ;   6869  2        [MSG_SND_INIT] :
  10366. ;   6870  2            TT_TEXT (SND_INIT_TEXT);
  10367. ;   6871  2    
  10368. ;   6872  2        [MSG_BREAK] :
  10369. ;   6873  2            TT_TEXT (BREAK_TEXT);
  10370. ;   6874  2    
  10371. ;   6875  2        [MSG_FILE] :
  10372. ;   6876  2            TT_TEXT (FILE_TEXT);
  10373. ;   6877  2    
  10374. ;   6878  2        [MSG_TEXT] :
  10375. ;   6879  2            TT_TEXT (TEXT_TEXT);
  10376. ;   6880  2    
  10377. ;   6881  2        [MSG_EOF] :
  10378. ;   6882  2            TT_TEXT (EOF_TEXT);
  10379. ;   6883  2    
  10380. ;   6884  2        [MSG_ERROR] :
  10381. ;   6885  2            TT_TEXT (ERROR_TEXT);
  10382. ;   6886  2    
  10383. ;   6887  2        [MSG_GENERIC] :
  10384. ;   6888  2            TT_TEXT (KERMIT_TEXT);
  10385. ;   6889  2    
  10386. ;   6890  2        [MSG_COMMAND] :
  10387. ;   6891  2            TT_TEXT (COMMAND_TEXT);
  10388. ;   6892  2        TES;
  10389. ;   6893  2    
  10390. ;   6894  2        TT_CRLF ();
  10391. ;   6895  2    !
  10392. ;   6896  2    ! Now output any of the optional data.
  10393. ;   6897  2    !
  10394. ;   6898  2    
  10395. ;   6899  2        IF .MSG_LEN - .MSG_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR) NEQ 0     ! [108]
  10396. ;   6900  2        THEN
  10397. ;   6901  3        BEGIN
  10398. ;   6902  3        TT_TEXT (OPT_DATA_TEXT);
  10399. ;   6903  3        TT_CRLF ();
  10400. ;   6904  3        TEMP_POINTER = CH$PTR (.MSG_ADDRESS, .MSG_MSG, CHR_SIZE);      ! [108]
  10401. ;   6905  3    
  10402. ;   6906  3        INCR I FROM 1 TO .MSG_LEN - .MSG_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR) DO ! [108]
  10403. ;   6907  4            BEGIN
  10404. ;   6908  4    
  10405. ;   6909  4            IF (.I MOD 10) EQL 1
  10406. ;   6910  4            THEN
  10407. ;   6911  5            BEGIN
  10408. ;   6912  5            TT_CRLF ();
  10409. ;   6913  5            TT_CHAR (CHR_TAB);
  10410. ;   6914  4            END;
  10411. ;   6915  4    
  10412. ;   6916  4            TT_TEXT (PRE_CHAR_TEXT);
  10413. ;   6917  4            TT_CHAR (CH$RCHAR_A (TEMP_POINTER));
  10414. ;   6918  4            TT_CHAR (%C'"');
  10415. ;   6919  3            END;
  10416. ;   6920  3    
  10417. ;   6921  3        IF ((.MSG_LEN - .MSG_MSG + 1 - (.BLK_CHK_TYPE - CHK_1CHAR)) MOD 10) EQL 1 THEN
  10418. ;   6922  3     TT_CRLF (); ! [108]
  10419. ;   6923  3    
  10420. ;   6924  3        TT_CRLF ();
  10421. ;   6925  2        END;
  10422. ;   6926  2    
  10423. ;   6927  2    !
  10424. ;   6928  2    ! Now output the checksum for the message that we received
  10425. ;   6929  2    !
  10426. ;   6930  2    ! This could be either 1 two or three characters.
  10427. ;   6931  2        TT_TEXT (CHKSUM_TEXT);
  10428. ;   6932  2        TEMP_POINTER = CH$PTR (.MSG_ADDRESS,
  10429. ;   6933  2        .MSG_LEN + PKT_CHKSUM + 1 - (.BLK_CHK_TYPE - CHK_1CHAR), CHR_SIZE); ! [108]
  10430. ;   6934  2    
  10431. ;   6935  2        CASE .BLK_CHK_TYPE FROM CHK_1CHAR TO CHK_CRC OF
  10432. ;   6936  2        SET
  10433. ;   6937  2    
  10434. ;   6938  2        [CHK_1CHAR] :
  10435. ;   6939  3            BEGIN
  10436. ;   6940  3            TT_TEXT (PRE_CHAR_TEXT);
  10437. ;   6941  3            TT_CHAR (CH$RCHAR (.TEMP_POINTER));
  10438. ;   6942  3            TT_CHAR (%C'"');
  10439. ;   6943  3            CHKSUM = UNCHAR (CH$RCHAR (.TEMP_POINTER));
  10440. ;   6944  2            END;
  10441. ;   6945  2    
  10442. ;   6946  2        [CHK_2CHAR] :
  10443. ;   6947  3            BEGIN
  10444. ;   6948  3            CHKSUM = 0;
  10445. ;   6949  3            TT_TEXT (PRE_CHAR_TEXT);
  10446. ;   6950  3            TT_CHAR (CH$RCHAR (.TEMP_POINTER));
  10447. ;   6951  3            TT_CHAR (%C'"');
  10448. ;   6952  3            CHKSUM<6, 6> = UNCHAR (CH$RCHAR_A (TEMP_POINTER));
  10449. ;   6953  3            TT_TEXT (PRE_CHAR_TEXT);
  10450. ;   6954  3            TT_CHAR (CH$RCHAR (.TEMP_POINTER));
  10451. ;   6955  3            TT_CHAR (%C'"');
  10452. ;   6956  3            CHKSUM<0, 6> = UNCHAR (CH$RCHAR (.TEMP_POINTER));
  10453. ;   6957  2            END;
  10454. ;   6958  2    
  10455. ;   6959  2        [CHK_CRC] :
  10456. ;   6960  3            BEGIN
  10457. ;   6961  3            CHKSUM = 0;
  10458. ;   6962  3            TT_TEXT (PRE_CHAR_TEXT);
  10459. ;   6963  3            TT_CHAR (CH$RCHAR (.TEMP_POINTER));
  10460. ;   6964  3            TT_CHAR (%C'"');
  10461. ;   6965  3            CHKSUM<12, 4> = UNCHAR (CH$RCHAR_A (TEMP_POINTER));
  10462. ;   6966  3            TT_TEXT (PRE_CHAR_TEXT);
  10463. ;   6967  3            TT_CHAR (CH$RCHAR (.TEMP_POINTER));
  10464. ;   6968  3            TT_CHAR (%C'"');
  10465. ;   6969  3            CHKSUM<6, 6> = UNCHAR (CH$RCHAR_A (TEMP_POINTER));
  10466. ;   6970  3            TT_TEXT (PRE_CHAR_TEXT);
  10467. ;   6971  3            TT_CHAR (CH$RCHAR (.TEMP_POINTER));
  10468. ;   6972  3            TT_CHAR (%C'"');
  10469. ;   6973  3            CHKSUM<0, 6> = UNCHAR (CH$RCHAR (.TEMP_POINTER));
  10470. ;   6974  2            END;
  10471. ;   6975  2        TES;
  10472. ;   6976  2    
  10473. ;   6977  2        TT_TEXT (CHKSUM_NUM_TEXT);
  10474. ;   6978  2        TT_NUMBER (.CHKSUM);
  10475. ;   6979  2        TT_TEXT (DEC_TEXT);
  10476. ;   6980  2        TT_CRLF ();
  10477. ;   6981  2        TT_SET_OUTPUT (.OLD_RTN);            ! Reset output destination
  10478. ;   6982  1        END;                    ! End of DBG_MESSAGE
  10479.  
  10480.  
  10481.  
  10482.     .PSECT  $PLIT$,NOWRT,NOEXE,2
  10483.  
  10484. P.ABH:    .ASCII  \ (Data)\<0>             ;                                00  29  61  74  61  44  28  20  00254
  10485. P.ABI:    .ASCII  \ (ACK)\<0><0>             ;                                00  00  29  4B  43  41  28  20  0025C
  10486. P.ABJ:    .ASCII  \ (NAK)\<0><0>             ;                                00  00  29  4B  41  4E  28  20  00264
  10487. P.ABK:    .ASCII  \ (Send init)\<0><0><0><0>     ;                                69  20  64  6E  65  53  28  20  0026C
  10488.                          ;                          00  00  00  00  29  74  69  6E  00274
  10489. P.ABL:    .ASCII  \ (Break)\<0><0><0><0>         ;                                29  6B  61  65  72  42  28  20  0027C
  10490.                          ;                                      00  00  00  00  00284
  10491. P.ABM:    .ASCII  \ (Text header)\<0><0>         ;                                68  20  74  78  65  54  28  20  00288
  10492.                          ;                          00  00  29  72  65  64  61  65  00290
  10493. P.ABN:    .ASCII  \ (File header)\<0><0>         ;                                68  20  65  6C  69  46  28  20  00298
  10494.                          ;                          00  00  29  72  65  64  61  65  002A0
  10495. P.ABO:    .ASCII  \ (EOF)\<0><0>             ;                                00  00  29  46  4F  45  28  20  002A8
  10496. P.ABP:    .ASCII  \ (Error)\<0><0><0><0>         ;                                29  72  6F  72  72  45  28  20  002B0
  10497.                          ;                                      00  00  00  00  002B8
  10498. P.ABQ:    .ASCII  \ (Receive initiate)\<0>     ;                                76  69  65  63  65  52  28  20  002BC
  10499.                          ;                          61  69  74  69  6E  69  20  65  002C4
  10500.                          ;                                      00  29  65  74  002CC
  10501. P.ABR:    .ASCII  \ (Command)\<0><0>         ;                                6E  61  6D  6D  6F  43  28  20  002D0
  10502.                          ;                                      00  00  29  64  002D8
  10503. P.ABS:    .ASCII  \ (Generic KERMIT command)\<0><0><0>
  10504.                          ;                                69  72  65  6E  65  47  28  20  002DC
  10505.                          ;                          54  49  4D  52  45  4B  20  63  002E4
  10506.                          ;                          64  6E  61  6D  6D  6F  63  20  002EC
  10507.                          ;                                      00  00  00  29  002F4
  10508. P.ABT:    .ASCII  \Message number: \<0><0><0><0>     ;                                20  65  67  61  73  73  65  4D  002F8
  10509.                          ;                          20  3A  72  65  62  6D  75  6E  00300
  10510.                          ;                                      00  00  00  00  00308
  10511. P.ABU:    .ASCII  <9>\Length: \<0><0><0>         ;                                3A  68  74  67  6E  65  4C  09  0030C
  10512.                          ;                                      00  00  00  20  00314
  10513. P.ABV:    .ASCII  \ (dec)\<0><0>             ;                                00  00  29  63  65  64  28  20  00318
  10514. P.ABW:    .ASCII  \Message type: \<0><0>         ;                                20  65  67  61  73  73  65  4D  00320
  10515.                          ;                          00  00  20  3A  65  70  79  74  00328
  10516. P.ABX:    .ASCII  \Checksum: \<0><0>         ;                                6D  75  73  6B  63  65  68  43  00330
  10517.                          ;                                      00  00  20  3A  00338
  10518. P.ABY:    .ASCII  \ = \<0>             ;                                            00  20  3D  20  0033C
  10519. P.ABZ:    .ASCII  \Optional data: \<0>         ;                                6C  61  6E  6F  69  74  70  4F  00340
  10520.                          ;                          00  20  3A  61  74  61  64  20  00348
  10521. P.ACA:    .ASCII  \ "\<0><0>             ;                                            00  00  22  20  00350
  10522.  
  10523. U.105=            P.ABH
  10524. U.106=            P.ABI
  10525. U.107=            P.ABJ
  10526. U.108=            P.ABK
  10527. U.109=            P.ABL
  10528. U.110=            P.ABM
  10529. U.111=            P.ABN
  10530. U.112=            P.ABO
  10531. U.113=            P.ABP
  10532. U.114=            P.ABQ
  10533. U.115=            P.ABR
  10534. U.116=            P.ABS
  10535. U.117=            P.ABT
  10536. U.118=            P.ABU
  10537. U.119=            P.ABV
  10538. U.120=            P.ABW
  10539. U.121=            P.ABX
  10540. U.122=            P.ABY
  10541. U.123=            P.ABZ
  10542. U.124=            P.ACA
  10543.  
  10544.  
  10545.     .PSECT  $CODE$,NOWRT,2
  10546.  
  10547. ;DBG_MESSAGE
  10548. U.34:    .WORD   ^M<R2,R3,R4,R5,R6,R7,R8,R9,R10,- ;Save R2,R3,R4,R5,R6,R7,R8,R9,R10,-   6738                    0FFC   00000
  10549.         R11>                 ;R11
  10550.     MOVAB   G^TT_CHAR, R11             ;TT_CHAR, R11                                     5B 00000000G  00  9E   00002
  10551.     MOVAB   G^TT_TEXT, R10             ;TT_TEXT, R10                                     5A 00000000G  00  9E   00009
  10552.     MOVAB   G^U.124, R9             ;U.124, R9                                     59 00000000'  00  9E   00010
  10553.     PUSHAB  G^DBG_DUMP             ;DBG_DUMP                   6824           00000000G  00  9F   00017
  10554.     CALLS   #1, G^TT_SET_OUTPUT         ;#1, TT_SET_OUTPUT                      00000000G  00         01  FB   0001D
  10555.     MOVL    R0, R8                 ;R0, OLD_RTN                                     58         50  D0   00024
  10556.     MOVL    4(AP), R4             ;MSG_ADDRESS, R4               6828            54    04   AC  D0   00027
  10557.     MOVZBL  1(R4), R2             ;1(R4), MSG_LEN                                 52    01   A4  9A   0002B
  10558.     SUBL2   #32, R2                 ;#32, MSG_LEN                                     52         20  C2   0002F
  10559.     MOVL    #4, R5                 ;#4, MSG_MSG                   6829            55         04  D0   00032
  10560.     TSTL    R2                 ;MSG_LEN                   6830                  52  D5   00035
  10561.     BNEQ    1$                 ;1$                                               18  12   00037
  10562.     MOVZBL  4(R4), R0             ;4(R4), R0                   6833            50    04   A4  9A   00039
  10563.     MULL2   #95, R0                 ;#95, R0                                     50 0000005F   8F  C4   0003D
  10564.     MOVZBL  5(R4), R1             ;5(R4), R1                   6835            51    05   A4  9A   00044
  10565.     MOVAB   -3067(R1)[R0], R2         ;-3067(R1)[R0], MSG_LEN           6836            52     F405 C140  9E   00048
  10566.     MOVL    #7, R5                 ;#7, MSG_MSG                   6837            55         07  D0   0004E
  10567. 1$:    CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6843 00000000G  00         00  FB   00051
  10568.     PUSHAB  -88(R9)                 ;MN_TEXT                   6844             A8   A9  9F   00058
  10569.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   0005B
  10570.     MOVZBL  2(R4), -(SP)             ;2(R4), -(SP)                   6845            7E    02   A4  9A   0005E
  10571.     SUBL2   #32, (SP)             ;#32, (SP)                                     6E         20  C2   00062
  10572.     CALLS   #1, G^TT_NUMBER             ;#1, TT_NUMBER                          00000000G  00         01  FB   00065
  10573.     PUSHAB  -56(R9)                 ;DEC_TEXT                   6846             C8   A9  9F   0006C
  10574.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   0006F
  10575.     PUSHAB  -68(R9)                 ;LENGTH_TEXT                   6847             BC   A9  9F   00072
  10576.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   00075
  10577.     PUSHL   R2                 ;MSG_LEN                   6848                  52  DD   00078
  10578.     CALLS   #1, G^TT_NUMBER             ;#1, TT_NUMBER                          00000000G  00         01  FB   0007A
  10579.     PUSHAB  -56(R9)                 ;DEC_TEXT                   6849             C8   A9  9F   00081
  10580.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   00084
  10581.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6850 00000000G  00         00  FB   00087
  10582.     PUSHAB  -48(R9)                 ;MSG_TYP_TEXT                   6854             D0   A9  9F   0008E
  10583.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   00091
  10584.     MOVZBL  3(R4), R3             ;3(R4), R3                   6855            53    03   A4  9A   00094
  10585.     PUSHL   R3                 ;R3                                               53  DD   00098
  10586.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   0009A
  10587.     CMPB    R3, #68                 ;R3, #68                   6860       44   8F         53  91   0009D
  10588.     BNEQ    2$                 ;2$                                               06  12   000A1
  10589.     PUSHAB  -252(R9)             ;DATA_TEXT                   6861               FF04   C9  9F   000A3
  10590.     BRB     12$                 ;12$                                               74  11   000A7
  10591. 2$:    CMPB    R3, #89                 ;R3, #89                   6863       59   8F         53  91   000A9
  10592.     BNEQ    3$                 ;3$                                               06  12   000AD
  10593.     PUSHAB  -244(R9)             ;ACK_TEXT                   6864               FF0C   C9  9F   000AF
  10594.     BRB     12$                 ;12$                                               68  11   000B3
  10595. 3$:    CMPB    R3, #78                 ;R3, #78                   6866       4E   8F         53  91   000B5
  10596.     BNEQ    4$                 ;4$                                               06  12   000B9
  10597.     PUSHAB  -236(R9)             ;NAK_TEXT                   6867               FF14   C9  9F   000BB
  10598.     BRB     12$                 ;12$                                               5C  11   000BF
  10599. 4$:    CMPB    R3, #83                 ;R3, #83                   6869       53   8F         53  91   000C1
  10600.     BNEQ    5$                 ;5$                                               06  12   000C5
  10601.     PUSHAB  -228(R9)             ;SND_INIT_TEXT                   6870               FF1C   C9  9F   000C7
  10602.     BRB     12$                 ;12$                                               50  11   000CB
  10603. 5$:    CMPB    R3, #66                 ;R3, #66                   6872       42   8F         53  91   000CD
  10604.     BNEQ    6$                 ;6$                                               06  12   000D1
  10605.     PUSHAB  -212(R9)             ;BREAK_TEXT                   6873               FF2C   C9  9F   000D3
  10606.     BRB     12$                 ;12$                                               44  11   000D7
  10607. 6$:    CMPB    R3, #70                 ;R3, #70                   6875       46   8F         53  91   000D9
  10608.     BNEQ    7$                 ;7$                                               06  12   000DD
  10609.     PUSHAB  -184(R9)             ;FILE_TEXT                   6876               FF48   C9  9F   000DF
  10610.     BRB     12$                 ;12$                                               38  11   000E3
  10611. 7$:    CMPB    R3, #88                 ;R3, #88                   6878       58   8F         53  91   000E5
  10612.     BNEQ    8$                 ;8$                                               06  12   000E9
  10613.     PUSHAB  -200(R9)             ;TEXT_TEXT                   6879               FF38   C9  9F   000EB
  10614.     BRB     12$                 ;12$                                               2C  11   000EF
  10615. 8$:    CMPB    R3, #90                 ;R3, #90                   6881       5A   8F         53  91   000F1
  10616.     BNEQ    9$                 ;9$                                               06  12   000F5
  10617.     PUSHAB  -168(R9)             ;EOF_TEXT                   6882               FF58   C9  9F   000F7
  10618.     BRB     12$                 ;12$                                               20  11   000FB
  10619. 9$:    CMPB    R3, #69                 ;R3, #69                   6884       45   8F         53  91   000FD
  10620.     BNEQ    10$                 ;10$                                               06  12   00101
  10621.     PUSHAB  -160(R9)             ;ERROR_TEXT                   6885               FF60   C9  9F   00103
  10622.     BRB     12$                 ;12$                                               14  11   00107
  10623. 10$:    CMPB    R3, #71                 ;R3, #71                   6887       47   8F         53  91   00109
  10624.     BNEQ    11$                 ;11$                                               05  12   0010D
  10625.     PUSHAB  -116(R9)             ;KERMIT_TEXT                   6888             8C   A9  9F   0010F
  10626.     BRB     12$                 ;12$                                               09  11   00112
  10627. 11$:    CMPB    R3, #67                 ;R3, #67                   6890       43   8F         53  91   00114
  10628.     BNEQ    13$                 ;13$                                               06  12   00118
  10629.     PUSHAB  -128(R9)             ;COMMAND_TEXT                   6891             80   A9  9F   0011A
  10630. 12$:    CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   0011D
  10631. 13$:    CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6894 00000000G  00         00  FB   00120
  10632.     SUBL3   R5, R2, R0             ;MSG_MSG, MSG_LEN, R0               6899            52         55  C3   00127
  10633.                          ;                                         50       0012A
  10634.     MOVAB   1(R0), R6             ;1(R0), R6                                     56    01   A0  9E   0012B
  10635.     SUBL3   #49, G^U.48, R0             ;#49, U.48, R0                          00000000'  00         31  C3   0012F
  10636.                          ;                                         50       00136
  10637.     CMPL    R6, R0                 ;R6, R0                                     50         56  D1   00137
  10638.     BEQL    18$                 ;18$                                               75  13   0013A
  10639.     PUSHAB  -16(R9)                 ;OPT_DATA_TEXT                   6902             F0   A9  9F   0013C
  10640.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   0013F
  10641.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6903 00000000G  00         00  FB   00142
  10642.     ADDL3   R5, R4, R3             ;MSG_MSG, R4, TEMP_POINTER           6904            54         55  C1   00149
  10643.                          ;                                         53       0014C
  10644.     SUBL3   G^U.48, R6, R0             ;U.48, R6, R0                   6906            56 00000000'  00  C3   0014D
  10645.                          ;                                         50       00154
  10646.     MOVAB   49(R0), R7             ;49(R0), R7                                     57    31   A0  9E   00155
  10647.     CLRL    R5                 ;I                                               55  D4   00159
  10648.     BRB     16$                 ;16$                                               2B  11   0015B
  10649. 14$:    EMUL    #1, R5, #0, -(SP)         ;#1, I, #0, -(SP)               6909            55         01  7A   0015D
  10650.                          ;                                   7E         00       00160
  10651.     EDIV    #10, (SP)+, R0, R0         ;#10, (SP)+, R0, R0                                 8E         0A  7B   00162
  10652.                          ;                                   50         50       00165
  10653.     CMPL    R0, #1                 ;R0, #1                                     01         50  D1   00167
  10654.     BNEQ    15$                 ;15$                                               0C  12   0016A
  10655.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6912 00000000G  00         00  FB   0016C
  10656.     PUSHL   #9                 ;#9                       6913                  09  DD   00173
  10657.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   00175
  10658. 15$:    PUSHL   R9                 ;R9                       6916                  59  DD   00178
  10659.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   0017A
  10660.     MOVZBL  (R3)+, -(SP)             ;(TEMP_POINTER)+, -(SP)           6917            7E         83  9A   0017D
  10661.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   00180
  10662.     PUSHL   #34                 ;#34                       6918                  22  DD   00183
  10663.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   00185
  10664. 16$:    AOBLEQ  R7, R5, 14$             ;R7, I, 14$                                     55         57  F3   00188
  10665.                          ;                                         D1       0018B
  10666.     SUBL3   G^U.48, R6, R0             ;U.48, R6, R0                   6921            56 00000000'  00  C3   0018C
  10667.                          ;                                         50       00193
  10668.     EMUL    #1, R0, #49, -(SP)         ;#1, R0, #49, -(SP)                                 50         01  7A   00194
  10669.                          ;                                   7E         31       00197
  10670.     EDIV    #10, (SP)+, R0, R0         ;#10, (SP)+, R0, R0                                 8E         0A  7B   00199
  10671.                          ;                                   50         50       0019C
  10672.     CMPL    R0, #1                 ;R0, #1                                     01         50  D1   0019E
  10673.     BNEQ    17$                 ;17$                                               07  12   001A1
  10674.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6922 00000000G  00         00  FB   001A3
  10675. 17$:    CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6924 00000000G  00         00  FB   001AA
  10676. 18$:    PUSHAB  -32(R9)                 ;CHKSUM_TEXT                   6931             E0   A9  9F   001B1
  10677.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   001B4
  10678.     MOVL    G^U.48, R0             ;U.48, R0                   6933            50 00000000'  00  D0   001B7
  10679.     SUBL2   R0, R2                 ;R0, R2                                     52         50  C2   001BE
  10680.     MOVAB   50(R2)[R4], R3             ;50(R2)[R4], TEMP_POINTER                             53    32 A244  9E   001C1
  10681.     CASEL   R0, #49, #2             ;R0, #49, #2                   6935            31         50  CF   001C6
  10682.                          ;                                         02       001C9
  10683. 19$:    .WORD   20$-19$,-             ;20$-19$,-                                   001E       0006       001CA
  10684.         21$-19$,-             ;21$-19$,-                                   0022       001CE
  10685.         22$-19$                 ;22$-19$
  10686. 20$:    PUSHL   R9                 ;R9                       6940                  59  DD   001D0
  10687.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   001D2
  10688.     MOVZBL  (R3), -(SP)             ;(TEMP_POINTER), -(SP)               6941            7E         63  9A   001D5
  10689.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   001D8
  10690.     PUSHL   #34                 ;#34                       6942                  22  DD   001DB
  10691.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   001DD
  10692.     MOVZBL  (R3), R2             ;(TEMP_POINTER), CHKSUM           6943            52         63  9A   001E0
  10693.     SUBL2   #32, R2                 ;#32, CHKSUM                                     52         20  C2   001E3
  10694.     BRB     24$                 ;24$                                               59  11   001E6
  10695. 21$:    CLRL    R2                 ;CHKSUM                   6948                  52  D4   001E8
  10696.     BRB     23$                 ;23$                       6949                  1E  11   001EA
  10697. 22$:    CLRL    R2                 ;CHKSUM                   6961                  52  D4   001EC
  10698.     PUSHL   R9                 ;R9                       6962                  59  DD   001EE
  10699.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   001F0
  10700.     MOVZBL  (R3), -(SP)             ;(TEMP_POINTER), -(SP)               6963            7E         63  9A   001F3
  10701.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   001F6
  10702.     PUSHL   #34                 ;#34                       6964                  22  DD   001F9
  10703.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   001FB
  10704.     MOVZBL  (R3)+, R0             ;(TEMP_POINTER)+, R0               6965            50         83  9A   001FE
  10705.     MOVAB   -32(R0), R1             ;-32(R0), R1                                     51    E0   A0  9E   00201
  10706.     INSV    R1, #12, #4, R2             ;R1, #12, #4, CHKSUM                                 0C         51  F0   00205
  10707.                          ;                                   52         04       00208
  10708. 23$:    PUSHL   R9                 ;R9                       6966                  59  DD   0020A
  10709.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   0020C
  10710.     MOVZBL  (R3), -(SP)             ;(TEMP_POINTER), -(SP)               6967            7E         63  9A   0020F
  10711.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   00212
  10712.     PUSHL   #34                 ;#34                       6968                  22  DD   00215
  10713.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   00217
  10714.     MOVZBL  (R3)+, R0             ;(TEMP_POINTER)+, R0               6969            50         83  9A   0021A
  10715.     MOVAB   -32(R0), R1             ;-32(R0), R1                                     51    E0   A0  9E   0021D
  10716.     INSV    R1, #6, #6, R2             ;R1, #6, #6, CHKSUM                                 06         51  F0   00221
  10717.                          ;                                   52         06       00224
  10718.     PUSHL   R9                 ;R9                       6970                  59  DD   00226
  10719.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   00228
  10720.     MOVZBL  (R3), -(SP)             ;(TEMP_POINTER), -(SP)               6971            7E         63  9A   0022B
  10721.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   0022E
  10722.     PUSHL   #34                 ;#34                       6972                  22  DD   00231
  10723.     CALLS   #1, (R11)             ;#1, TT_CHAR                                     6B         01  FB   00233
  10724.     MOVZBL  (R3), R0             ;(TEMP_POINTER), R0               6973            50         63  9A   00236
  10725.     SUBL2   #32, R0                 ;#32, R0                                     50         20  C2   00239
  10726.     INSV    R0, #0, #6, R2             ;R0, #0, #6, CHKSUM                                 00         50  F0   0023C
  10727.                          ;                                   52         06       0023F
  10728. 24$:    PUSHAB  -20(R9)                 ;CHKSUM_NUM_TEXT               6977             EC   A9  9F   00241
  10729.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   00244
  10730.     PUSHL   R2                 ;CHKSUM                   6978                  52  DD   00247
  10731.     CALLS   #1, G^TT_NUMBER             ;#1, TT_NUMBER                          00000000G  00         01  FB   00249
  10732.     PUSHAB  -56(R9)                 ;DEC_TEXT                   6979             C8   A9  9F   00250
  10733.     CALLS   #1, (R10)             ;#1, TT_TEXT                                     6A         01  FB   00253
  10734.     CALLS   #0, G^TT_CRLF             ;#0, TT_CRLF                   6980 00000000G  00         00  FB   00256
  10735.     PUSHL   R8                 ;OLD_RTN                   6981                  58  DD   0025D
  10736.     CALLS   #1, G^TT_SET_OUTPUT         ;#1, TT_SET_OUTPUT                      00000000G  00         01  FB   0025F
  10737.     RET                      ;                       6982                  04   00266
  10738.  
  10739. ; Routine Size:  615 bytes,    Routine Base:  $CODE$ + 2A19
  10740.  
  10741.  
  10742. ;   6983  1     %SBTTL 'End of KERMSG'
  10743. ;   6984  1    END
  10744. ;   6985  1    
  10745. ;   6986  0    ELUDOM
  10746.  
  10747.  
  10748.  
  10749.  
  10750.  
  10751.  
  10752. ;                       PSECT SUMMARY
  10753. ;
  10754. ;    Name             Bytes                   Attributes
  10755. ;
  10756. ;  $OWN$                 2216  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  10757. ;  $GLOBAL$                    4  NOVEC,  WRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  10758. ;  $CODE$                11392  NOVEC,NOWRT,  RD ,  EXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  10759. ;  .  ABS  .                    0  NOVEC,NOWRT,NORD ,NOEXE,NOSHR,  LCL,  ABS,  CON,NOPIC,ALIGN(0)
  10760. ;  $PLIT$                  852  NOVEC,NOWRT,  RD ,NOEXE,NOSHR,  LCL,  REL,  CON,NOPIC,ALIGN(2)
  10761.  
  10762.  
  10763.  
  10764.  
  10765. ;                Library Statistics
  10766. ;
  10767. ;                         -------- Symbols --------        Pages    Processing
  10768. ;    File                     Total    Loaded   Percent      Mapped    Time
  10769. ;
  10770. ;  SYS$COMMON:[SYSLIB]STARLET.L32;2         12540         4         0       721          00:00.3
  10771.  
  10772.  
  10773.  
  10774.  
  10775.  
  10776.  
  10777.  
  10778. ;                    COMMAND QUALIFIERS
  10779.  
  10780. ;    BLI VMSMSG/LIS/SOURCE:NOHEAD/MACH=(ASSEM,UNIQUE)
  10781.  
  10782. ; Compilation Complete
  10783.  
  10784.     .END
  10785.