home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / d / k12mit.pal < prev    next >
Text File  |  2020-01-01  |  225KB  |  6,715 lines

  1. /    KERMIT FOR DEC 12-BIT MACHINES
  2.  
  3. /    LAST EDIT:    06-SEP-1990    11:00:00    CJL
  4.  
  5.     XLIST    OFF
  6.     IFNDEF    OFF    <OFF=    1>    /TURN LISTING OFF
  7.     IFNDEF    ON    <ON=    0>    /TURN LISTING ON
  8.     XLIST    ON;    IFZERO    1    <
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17. ***     **** *********** *********    ***      *** *** *********** *****   ****
  18. ***    ****  *********** **********   ****    **** *** *********** *****  ******
  19. ***   ****    ***      ***     ****  ****    **** ***        ***          *** ***  ***
  20. ***  ****     ***      ***     ***  *****  ***** ***     ***       *** **   ****
  21. *** ****      ***      ***     ***  *****  ***** ***     ***       *** **    ***
  22. *******       ***      ***    ****  ************ ***     ***       ***       **
  23. ******          **********  **********   *** **** *** ***        *** ***** ***      **
  24. *******          **********  *********    *** **** *** ***        *** ***** ***     **
  25. *** ****      ***      *** ****     ***  **  *** ***     ***       ***    **
  26. ***  ****     ***      ***  ****    ***  **  *** ***     ***       ***   **
  27. ***   ****    ***      ***   ****   ***      *** ***     ***       ***  **
  28. ***    ****   *********** ***     ****  ***    *** ***        ***       *** *********
  29. ***     **** *********** ***      **** ***    *** ***        ***          *** *********
  30.                     >    XLIST    ON
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. /    COPYRIGHT (C) 1989, 1990 BY THE TRUSTEES OF COLUMBIA UNIVERSITY IN THE CITY OF
  51. /    NEW YORK.
  52.  
  53.  
  54.  
  55. /    PERMISSION IS  GRANTED  TO  ANY  INDIVIDUAL OR INSTITUTION TO COPY OR USE THIS
  56. /    DOCUMENT AND THE  PROGRAM(S) DESCRIBED IN IT, EXCEPT FOR EXPLICITLY COMMERCIAL
  57. /    PURPOSES.
  58. /    EDIT HISTORY.                            /014 CJL
  59.  
  60. /    052    06-SEP-1990    BUG FIX.            CHARLES LASNER (CJL)
  61.  
  62. /        SENDING A FILE WHICH  EXACTLY  FILLS  THE LAST DATA PACKET AT THE
  63. /        END OF THE FILE WILL  CAUSE  THE  PACKET  TO  BE SENT TWICE.  THE
  64. /        ROUTINE DIDN'T CHECK FOR AN EMPTY OUTPUT BUFFER AT EOF.
  65.  
  66. /    051    29-AUG-1990    BUG FIX.            CJL
  67.  
  68. /        PDP-8/A NOT IDENTIFIED CORRECTLY  IN  CPUID ROUTINE.  THE UPDATED
  69. /        PC IS WHAT IS LOADED  INTO  THE  AC  WHEN 7016 IS EXECUTED ON THE
  70. /        KK-8/A CPU.  THE ROUTINE WAS  CHECKING FOR THE NON-UPDATED VALUE.
  71. /        ALSO  NEW  DOCUMENTATION FOR PRE-CLEARING MEMORY FOR  BENEFIT  OF
  72. /        ENCODED BINARY FILES.
  73. /    050    06-SEP-1989    DECMATE I SUPPORT, ETC.        CJL
  74.  
  75. /        THIS EDIT IMPLEMENTS DECMATE  I  SUPPORT USING THE DP278-A OR -B.
  76. /        A NEW CONDITIONAL 'PORT' SELECTS  WHICH  PORT  IS TO BE USED.  IF
  77. /        KERMIT-12 IS RUN ON DECMATE I  (WHILE  NOT  CONFIGURED FOR SERIAL
  78. /        PRINTER  PORT  COMMUNICATIONS;    SEE  EDIT  048.)   THEN  REMOTE
  79. /        COMMUNICATIONS TAKES PLACE ON THE PORT SELECTED AT  ASSEMBLY TIME
  80. /        ('PORT=0' OR 'PORT=1').    ADDED  BAUD  RATE PARAMETER 'BRATE' TO
  81. /        SELECT REMOTE COMMUNICATIONS BAUD  RATE  FROM THE STANDARD TABLE;
  82. /        DEFAULTS TO 1200 BAUD ('BRATE=7').
  83.  
  84. /    049    30-AUG-1989    REMOTE FLOW CONTROL, ETC.    CJL
  85.  
  86. /        THIS  EDIT  IMPLEMENTS FLOW CONTROL SUPPORT (IF FLOW  CONTROL  IS
  87. /        ENABLED) FOR THE REMOTE LINE WHILE SENDING PACKETS TO  THE REMOTE
  88. /        KERMIT REGARDLESS  OF  STATE.    PREVIOUSLY,  FLOW  CONTROL  ONLY
  89. /        APPLIED TO CONNECT  MODE.  LOCAL FLOW CONTROL (TOWARDS THE REMOTE
  90. /        KERMIT) IS UNNECESSARY AS  LOCAL  BUFFERS  FOR  REMOTE  INPUT ARE
  91. /        ALWAYS AVAILABLE.  CERTAIN ROUTINE  CHANGES  MADE  FOR BENEFIT OF
  92. /        DECMATE I SUPPORT IN A SUBSEQUENT EDIT.
  93.  
  94. /    048    24-AUG-1989    DECMATE II, ETC. SUPPORT.    CJL
  95.  
  96. /        ONCE-ONLY CODE ADDED  TO  IMPLEMENT DECMATE II, ETC.  REMOTE LINE
  97. /        SUPPORT  ON  SERIAL  COMMUNICATIONS   PORT.    SELECTED  PORT  IS
  98. /        INDICATED ON OPENING BANNER IF OPERATING ON DECMATE.
  99.  
  100. /    THIS EDIT PROVIDES BASIC SUPPORT  OF  THE DECMATE II COMMUNICATIONS PORT AS AN
  101. /    AUTOMATIC FEATURE OF THE STANDARD RELEASE  OF  K12MIT.  AUTOMATIC DETECTION OF
  102. /    DECMATE II, ETC.  HARDWARE IS PERFORMED  UNLESS  THE  PDP-8-TYPE  REMOTE  LINE
  103. /    SUPPORT IS ASSEMBLED FOR THE SERIAL PRINTER AS  THE  REMOTE  LINE ('SPRINT' IS
  104. /    SET OR EQUIVALENT).
  105.  
  106. /    THIS  EDIT INCORPORATES ALL OF THE  INFORMATION  TAKEN  FROM  VARIOUS  SOURCES
  107. /    REGARDING DECMATE PORT INITIALIZATION, ETC.  EVERY  ATTEMPT  HAS  BEEN MADE TO
  108. /    COMPLETELY  SET ALL APPROPRIATE REGISTERS, ETC.  FOR  DECMATE  II,  III,  III+
  109. /    OPERATION.  NO SUPPORT EXISTS FOR THE DECMATE III  BUILT-IN  MODEM  OPTION, AS
  110. /    EXPLICIT  DOCUMENTATION  IS NOT AVAILABLE (SOME OF THE INITIALIZATION CODE  IS
  111. /    APPARENTLY USED TO DISABLE THE MODEM).  THESE ROUTINES ARE ONLY  KNOWN TO WORK
  112. /    ON  THE DECMATE II, AS THE III (ESPECIALLY WITH OPTIONAL MODEM) AND  THE  III+
  113. /    HAVEN'T BEEN  AVAILABLE  TO  THE  AUTHOR FOR TESTING.  THE INITIALIZATION CODE
  114. /    WILL BE UPDATED  LATER  TO  INCLUDE  PANEL  REQUESTS,  ETC.    TO  CORRECT ANY
  115. /    PROBLEMS, ETC.  DECMATE-SPECIFIC  FEATURES  (SUCH  AS  SETUP COMMANDS) WILL BE
  116. /    ADDED LATER AND ENABLED FROM THESE ROUTINES.
  117.  
  118. /    THIS EDIT INCORPORATES  NON-INTERRUPT  ROUTINES  WHICH HAVE BEEN TESTED AT THE
  119. /    MAXIMUM COMMUNICATIONS SPEED OF  THE  DECMATE  II  (19200  BAUD).    THEY WILL
  120. /    SUFFICE FOR ALL KERMIT IMPROVEMENTS  SHORT  OF  SLIDING  WINDOWS AT WHICH TIME
  121. /    INTERRUPT-DRIVEN I/O WILL BE REQUIRED.   (INTERRUPT-DRIVEN  I/O  IS ILLEGAL ON
  122. /    CERTAIN OS/8 SYSTEMS WHERE INTERRUPTS ARE HARMFUL  TO THE SYSTEM OR NON-SYSTEM
  123. /    HANDLERS.) 
  124. /    047    21-AUG-1989    CODE CLEANUP.            CJL
  125.  
  126. /        STREAM-LINED CONNECT MODE ROUTINES FOR MINIMUM USE OF IOTS.  THIS
  127. /        IS  IN  PREPARATION  FOR  EVENTUAL DECMATE II OPERATION,  AND  TO
  128. /        MINIMIZE  K12PCH  PATCH  FILE SIZE.  CERTAIN NON-CONNECT ROUTINES
  129. /        MOVED TO FACILIATE CONNECT ROUTINE REORGANIZATION. 
  130.  
  131. /    046    15-AUG-1989    CODE CLEANUP.            CJL
  132.  
  133. /        ADDED NEW (NON-CONNECT) MODE COMMUNICATIONS ROUTINES FOR EVENTUAL
  134. /        DECMATE USE.  ELIMINATION OF 'IREM' AND 'IREMW' ROUTINES IN FAVOR
  135. /        OF 'COMIN'.   ELIMINATION  OF 'OREM' IN FAVOR OF 'COMOUT'.  ADDED
  136. /        STATUS UPDATE ROUTINE ('UPSTATUS')  FOR EVENTUAL DECMATE II, ETC.
  137. /        USAGE.  ELIMINATED PDP-8, DECMATE  I,  DECMATE  II  CONDITIONALS.
  138. /        REORGANIZED  SERIAL  LINE  CONDITIONALS  AND ADDED  NEW  'SPRINT'
  139. /        PARAMETER FOR SERIAL PRINTER  PORT  USAGE AS COMMUNICATIONS PORT.
  140. /        ADDED ONCE-ONLY CODE ADDED TO  AUTOMATICALLY  RECOGNIZE DECMATE I
  141. /        AND II OPERATION UNLESS ASSEMBLED FOR  REMOTE  COMMUNICATIONS  ON
  142. /        SERIAL  PRINTER  PORT  ('SPRINT'  SET).   UPDATED  K12PCH.PAL  TO
  143. /        CORRESPOND   TO  NEW  DEFINITIONS.    DEFINED  EVENTUALLY  NEEDED
  144. /        COMMUNICATIONS PORT  INSTRUCTIONS FOR DECMATE II;  ACTUAL DECMATE
  145. /        II OPERATION WILL  BE  DEFINED  IN A SUBSEQUENT EDIT.  DOCUMENTED
  146. /        NEW LOADING AND SAVING  INSTRUCTIONS  FOR  K12MIT  TO  ALLOW  FOR
  147. /        ONCE-ONLY CODE IN 10000-11777 WITHOUT  SWAPPING  THE CODE OUT FOR
  148. /        THE USR.  THIS ELIMINATES OVERHEAD  WHEN  LOADING  K12MIT, BUT IS
  149. /        DIFFERENT  FROM  THE FORMER INSTRUCTIONS WHICH ASSUMED  NO  OTHER
  150. /        USAGE OF 10000-11777 OTHER THAN THE (LOCKED-IN) USR.
  151.  
  152. /    THIS EDIT  PROVIDES THE FRAMEWORK FOR AUTOMATIC DETECTION OF PROGRAM EXECUTION
  153. /    OF K12MIT ON  ANY  MEMBER  OF  THE  DECMATE  FAMILY  (I, II, III, III+).  WHEN
  154. /    6120-TYPE CPU DETECTION OCCURS,  THE  DECMATE I OR II-TYPE COMMUNICATIONS PORT
  155. /    INITIALIZE CODE IS AUTOMATICALLY SELECTED  AS  NECESSARY UNLESS THE PDP-8-TYPE
  156. /    ROUTINES ARE ASSEMBLED (WITH 'SPRINT' SET  OR  EQUIVALENT USER SETTINGS, ETC.)
  157. /    FOR THE VT-78-TYPE PRINTER PORT (32/33), IN  WHICH  CASE THE COMMUNICATIONS IS
  158. /    DONE VIA THE PRINTER PORT ON THE DECMATE (WHICH IS ALMOST PDP-8 COMPATIBLE AND
  159. /    IS ACCOMODATED AS SUCH).
  160.  
  161. /    SUBSEQUENT EDITS SHOULD PROVIDE FOR A DECMATE I PARAMETER TO CONTROL  THE PORT
  162. /    SELECTION,  AS  THERE  ARE  AT  LEAST  TWO VARIANT OPTIONS BOARDS (DP-278A AND
  163. /    DP-278B) EACH CONSISTING OF TWO PORTS.
  164. /    045    12-AUG-1989    BUG FIX.              CJL
  165.  
  166. /        FINISH,  GET,  AND  RECEIVE  COMMANDS   FAIL  TO  ABORT  PROPERLY
  167. /        (ESPECIALLY AFTER THE SEND COMMAND HAS BEEN USED), AS THE CURRENT
  168. /        OPERATING MODE ('KMODE') IS NEVER PROPERLY SET,  OR  IS SET AFTER
  169. /        SEVERAL PACKETS HAVE BEEN SENT.  EACH COMMAND  NOW  SETS  ITS OWN
  170. /        OPERATING MODE BEFORE INITIATING ANY PACKETS.
  171.  
  172. /    044    11-AUG-1989    CODE CLEANUP.            CJL
  173.  
  174. /        CHANGED  'CCMSG'  TO  'ABMSG'  WITH  CLEARER  MESSAGE.    CHANGED
  175. /        'CCFLAG'  TO  'ABFLAG' FOR CONSISTENCY.  CHANGED ABORT  CHARACTER
  176. /        FROM <^C> TO CHOICE OF <^X> OR <^Z> FOR  CONSISTENCY.  ELIMINATED
  177. /        'ITTY'  AND  'ITTYW'  ROUTINES  BY  USING  'CTLCTST'  AND 'INPUT'
  178. /        ROUTINES ALREADY  AVAILABLE  A/O EDIT 043.  ELIMINATED 'TCHAR' IN
  179. /        FAVOR OF 'INCHAR' AVAILABLE A/O EDIT 043.
  180.  
  181. /    043    07-AUG-1989    CODE CLEANUP, ETC.        CJL
  182.  
  183. /        REWRITE OF  CONSOLE SUPPORT ROUTINES INCLUDING FORCED-ECHO OUTPUT
  184. /        AND COLUMN COUNT FOR <HT> SIMULATION IN PREPARATION FOR IMPENDING
  185. /        USER-INTERFACE  REWRITE.     'SCRIBE',  'LININP',  AND  'ESCPRNT'
  186. /        ROUTINES NOW CALL  "P7ECHO" ROUTINE TO ENSURE PRINTING OF CRUCIAL
  187. /        MESSAGES.
  188.  
  189. /    042    13-JUN-1989    CODE CLEANUP.            CJL
  190.  
  191. /        FIXED VARIOUS NAK-RELATED BUGS AND SEND-INIT PROBLEMS AS IN  K278
  192. /        (SOME  OF  THE K278 STUFF IS DEFICIENT!).  CALCULATION OF  PROPER
  193. /        SEQUENCE  NUMBER  FOR NAK CORRECTED OVER FORMER (K08MIT AND K278)
  194. /        VERSIONS.  ADDED ERROR MESSAGE FOR FULL-DISK PROBLEM.
  195.  
  196. /    041    12-MAY-1989    BUG FIX.            CJL
  197.  
  198. /        VARIOUS  VERSIONS  (DECMATE)  WON'T  FUNCTION REMOTELY WHILE KL-8
  199. /        VERSIONS WORK  FINE.    ADDED  REMOTE LINE READ IOT TO INITIALIZE
  200. /        REMOTE  LINE  AT   STARTUP  TIME  FOR  VERSIONS  REQUIRING  THIS.
  201. /        CORRESPONDING CHANGES IN PATCH FILE MADE FOR REMOTE LINE READ IOT
  202. /        IN TWO PLACES.
  203. /    040    07-MAR-1989    COSMETIC CLEANUP.        CJL
  204.  
  205. /        CLEANUP OF EDIT HISTORY AND OTHER COMMENTS.
  206.  
  207. /    039    21-MAY-1988    CODE CLEANUP.            CJL
  208.  
  209. /        ADDED VARIABLE 'INIECHO' TO  ALLOW  DEFAULT CONNECT-MODE STATE TO
  210. /        BE HALF-DUPLEX ("SET LOCAL-ECHO ON").    MODIFIED  INPUT  SERVICE
  211. /        ERROR ADDRESSES TO SIMPLIFY ERROR TABLES.
  212.  
  213. /    038    19-MAY-1988    CODE CLEANUP.            CJL
  214.  
  215. /        ELIMINATED  TRAILER FILES DURING ASSEMBLY BY  CREATING  VARIABLES
  216. /        'GENMSG' AND 'UMSG.' THIS ALLOWS THE HEADER  FILE  (PARAM.PA)  TO
  217. /        CONTAIN THE LOCAL MESSAGE TEXT WITHOUT SUBSEQUENT OVERLAY  (WHICH
  218. /        WAS WHY THERE FORMERLY WAS A TRAILER FILE CAPABILITY).    OVERLAY
  219. /        BY  K12PCH.BN  WILL  DEFAULT TO CREATION OF A DUMMY USER  MESSAGE
  220. /        (WITHIN K12PCH) ENCOURAGING LOCAL  CUSTOMIZATION.  K12MIT.BN WILL
  221. /        CONTAIN A NULL MESSAGE BY DEFAULT UNLESS CUSTOMIZED IN PARAM.PA.
  222.  
  223. /    037    21-JAN-1988    BUG FIX.            CJL
  224.  
  225. /        RESET OS/8 DEVICE CONTROL WORD  TABLE TO DELETE TENTATIVE FILE IN
  226. /        CASE OF PRIOR INPUT SERVICE ERROR.
  227.  
  228. /    036    20-JAN-1988    BUG FIX.            CJL
  229.  
  230. /        RESET 'OFFLG' WHEN DOING INPUT SERVICE IN CASE PRIOR ERRORS LEAVE
  231. /        THE FLAG SET.
  232.  
  233. /    035    14-JAN-1988    USR RESIDENT CODING.        CJL
  234.  
  235. /        CALLS TO USR NOW USE 10200 INSTEAD  OF  17700.   NO SWAP OVERHEAD
  236. /        WHEN OPENING OR CLOSING FILES.
  237.  
  238. /    034    13-JAN-1988    CODE CLEANUP.            CJL
  239.  
  240. /        ALL  EIGHT-BIT  ORIENTED  CONSOLE  CODE ELIMINATED;  NOW  IGNORES
  241. /        PARITY (JUST SEVEN BITS).
  242.  
  243. /    033    12-JAN-1988    CODE CLEANUP.            CJL
  244.  
  245. /        'TTYOUT' AND 'OTTY' ROUTINES ELIMINATED;  NOW USES 'P7CH' FOR ALL
  246. /        CONSOLE OUTPUT (EXCEPT FOR CONNECT MODE).
  247.  
  248. /    032    12-JAN-1988    CODE CLEANUP.            CJL
  249.  
  250. /        VARIOUS  ROUTINES REWRITTEN TO ELIMINATE DEPENDENCIES ON CPU TYPE
  251. /        BEYOND THE CLASSIC PDP-8.
  252. /    031    11-JAN-1988    CODE CLEANUP.            CJL
  253.  
  254. /        ELIMINATED 'RTDISP'  AND  CHANGED CALLING CONVENTION FOR DISPATCH
  255. /        ROUTINE.  ALL  CALLERS  NOW  LOCAL  OR VIA LOCAL POINTERS.  ADDED
  256. /        SEVERAL  CONDITIONAL  PARAMETERS  AND    LABELS  FOR  BENEFIT  OF
  257. /        K12PCH.PAL.
  258.  
  259. /    030    05-JAN-1988    CODE CLEANUP.            CJL
  260.  
  261. /        CHANGED LOWER/UPPER CASE CONDITIONAL ASSEMBLY PARAMETERS AND MORE
  262. /        EFFICIENT CODE.
  263.  
  264. /    029    21-DEC-1987    CODE CLEANUP.            CJL
  265.  
  266. /        CHANGED CALLING CONVENTIONS FOR 'SCRIBE' AND SIMILAR ROUTINES AND
  267. /        REWROTE 'COMMAND' ROUTINE.
  268.  
  269. /    028    15-DEC-1987    CODE CLEANUP.            CJL
  270.  
  271. /        COMPLETE REWRITE OF FILE LOOKUP ROUTINE.   'LUKUP' NOW USES FIELD
  272. /        ONE  BUFFER  AND  ITS OWN AUTO-INDEX REGISTER CONSERVING  PROGRAM
  273. /        SPACE.
  274.  
  275. /    027    05-DEC-1987    CODE CLEANUP.            CJL
  276.  
  277. /        CHANGED  DISPATCH  ('DISPA0') ROUTINE TO USE 'SRCHTABLE' ROUTINE.
  278. /        ALL CALLS  MADE COMPATIBLE.  ELIMINATED 'SCANC' CODE.  ELIMINATED
  279. /        CODE WITHIN 'DPARS'  ROUTINE.    'LUKUP' ROUTINE NOW DOES ITS OWN
  280. /        DISK I/O.  ELIMINATED 'BLKIN' ROUTINE.
  281.  
  282. /    026    27-NOV-1987    NEW CONNECT MODE CODE.        CJL
  283.  
  284. /        TOTAL  REWRITE  OF ALL CONNECT MODE CONSOLE AND REMOTE INPUT  AND
  285. /        OUTPUT  TERMINAL  ROUTINES.  CONNECT IS NOW FULLY BUFFERED IN ALL
  286. /        DIRECTIONS.   IF  FLOW  CONTROL  IS  OBEYED, ANY BAUD RATE CAN BE
  287. /        ACCOMODATED BOTH LOCALLY  AND  REMOTE  (UP  TO  9600 BAUD TESTED,
  288. /        SHOULD WORK TO AT  LEAST  19200 BAUD BY INSPECTION).  TESTED WITH
  289. /        FAST VT-100 EMULATOR CONSOLE TO  PROVE  ESCAPE  SEQUENCES ARE NOT
  290. /        DROPPED WHEN LOCAL TERMINAL IS FASTER  THAN REMOTE LINE.  LIMITED
  291. /        USE OF SUBROUTINES TO IMPROVE HIGH BAUD  RATE  OPERATION.   ADDED
  292. /        TABLE-DRIVEN ERROR EXIT ROUTINE FOR SEND ROUTINES.
  293.  
  294. /    THIS EDIT PROVIDES  FULLY  BUFFERED  INPUT/OUTPUT  ROUTINES FOR BOTH LOCAL AND
  295. /    REMOTE PORTS.  NO  INTERRUPTS  ARE  USED  FOR  MAXIMUM COMPATIBILITY WITH OS/8
  296. /    DEVICES (SOME OF WHICH ARE  INTOLERANT OF INTERRUPTS, SUCH AS TD-8/E).  REMOTE
  297. /    FLOW CONTROL (IF ENABLED) WILL SIGNAL BUFFER FILLING VIA <DC3> WHEN THE BUFFER
  298. /    IS 3/4 FULL.  WHEN THE BUFFER  REACHES 1/4 FULL, THE REMOTE WILL BE SENT <DC1>
  299. /    TO ALLOW FURTHER OUTPUT.  REMOTE FLOW CONTROL IS SUPPORTED IN BOTH DIRECTIONS;
  300. /    LOCAL FLOW CONTROL IS FROM THE KEYBOARD ONLY.
  301.  
  302. /    WHILE THE CONSOLE OUTPUT IS PAUSED BY <DC3>, THE  BUFFER WILL FILL WITH OUTPUT
  303. /    CHARACTERS.  WHEN THE USER RELEASES THE CONSOLE WITH <DC1>,  THE  BUFFER  WILL
  304. /    RAPIDLY  EMPTY  (ASSUMING THE CONSOLE IS FASTER THAN THE REMOTE LINE).    THIS
  305. /    ALLOWS THE USER TO PAUSE THE CONSOLE WITHOUT BACKING UP THE REMOTE  LINE UP TO
  306. /    THE LIMITS OF BOTH LOCAL OUTPUT AND REMOTE INPUT BUFFERS.
  307. /    025    24-NOV-1987    NEW FEATURES AND CODE CLEANUP.    CJL
  308.  
  309. /        PROPER  INTERRUPT  SETUP  FOR  <^C> AND <^P>, ECHO  STATE.    ALL
  310. /        MESSAGES  IN  NEW  FORMAT,  (SOME NEW ONES HAVE BETTER  CONTENT).
  311. /        ELIMINATED  'PRI6B' AND 'REM6B' ROUTINES.  NEW AND IMPROVED INPUT
  312. /        SERVICE ERROR  CODE  MOVED  TO  PROPER  PAGE.    REWROTE  CONNECT
  313. /        ROUTINES TO ALLOW  NON-INTERRUPT BUFFERED I/O LATER.  CREATED NEW
  314. /        VARIABLE 'ESCHAR' AND PARAMETER  'ESCAPE'  TO  SET DEFAULT ESCAPE
  315. /        CHARACTER.  ESCAPE CHARACTER CAN BE CHANGED IN MEMORY AND WILL BE
  316. /        USED  CORRECTLY  BY ALL ROUTINES.   ADDED  'ESCPRNT'  ROUTINE  TO
  317. /        HANDLE  ALL  CASES  (INCLUDING NON-CONTROL CHARACTERS).   DEFAULT
  318. /        ESCAPE  PARAMETER  VALUE  COMPATIBLE  WITH K08V2, BUT IS  A  USER
  319. /        PARAMETER,  CONFIGURED  AS  OTHER PARAMETERS DEFINED IN EDIT 017.
  320. /        CREATED  ESCAPE FUNCTION TABLE FOR EXPANSION LATER.  NOW SUPPORTS
  321. /        ESCAPE C(LOSE)  IN  UPPER  OR LOWER CASE, ESCAPE ESCAPE (SEND ONE
  322. /        ESCAPE CHARACTER).   ALL  BAD  ESCAPE  COMMANDS  WILL ISSUE <BEL>
  323. /        CHARACTER TO WARN USER  THAT COMMAND IS ILLEGAL AND OTHERWISE WAS
  324. /        IGNORED.  CREATED NEW VARIABLE  'ECHOFLAG' TO ALLOW LOCAL ECHO IN
  325. /        CONNECT MODE.
  326.  
  327. /    024    19-NOV-1987    NEW FEATURES.            CJL
  328.  
  329. /        NEW  STARTUP MESSAGES AND HELP METHOD  VIA  COMMAND.    CPU  TYPE
  330. /        IDENTIFICATION TO ALLOW FUTURE VERSIONS TO CHECK  FOR  QUIRKS AND
  331. /        MODEL DEPENDENCIES.  THE DEFAULT PROMPT REFLECTS THE  ACTUAL  CPU
  332. /        TYPE (THUS "KERMIT-12>" ON PDP-12).  VERSION, REVISION, AND  DATE
  333. /        NOW EQUATED SYMBOLS.
  334.  
  335. /    023    18-NOV-1987    NEW CONSOLE I/O PACKAGE.    CJL
  336.  
  337. /        NEW  CONSOLE  I/O  ROUTINES  WITH  DC1/DC3  SUPPORT  FOR  CONSOLE
  338. /        TERMINAL MESSAGES NOT ASSOCIATED WITH ANY REMOTE ACTIVITY (NOT TO
  339. /        BE USED DURING CONNECT MODE).  USES FIELD ONE FOR MESSAGE TEXT TO
  340. /        ALLOW FOR MORE PROGRAM  SPACE.    THE  MESSAGES  ARE NOW GIVEN IN
  341. /        UPPER/LOWER SIXBIT FORMAT.  SUPPORT  FOR <^P> RESTART AND <^O> TO
  342. /        FLIP  ECHO.  UPPER-CASE CAN BE  FORCED  BY  CHANGING  A  VARIABLE
  343. /        ('UPONLY').
  344.  
  345. /    022    17-NOV-1987    BUG FIX.            CJL
  346.  
  347. /        EXTRA-LONG INIT PACKETS CORRUPTING PROGRAM;  NOW  CHECKS  FOR AND
  348. /        IGNORES EXTRA CAPABILITIES BEYOND 'CAPAS' BYTE.
  349. /    021    17-NOV-1987    CODE CLEANUP.            CJL
  350.  
  351. /        REWROTE  TENTATIVE OUTPUT FILE LENGTH CODE FOR MORE  CONSISTENCY.
  352. /        RENAMED "FINISH" COMMAND CORRECTLY (FORMERLY "BYE").
  353.  
  354. /    FORMER  CODE  REGARDING  THE  TENTATIVE  FILE  MAXIMUM  LENGTH WAS  ACCEPTABLY
  355. /    ORGANIZED  FOR  ORIGINAL  PS/8, OS/8 CONVENTIONS.  WITH THE EVOLUTION  OF  THE
  356. /    OPERATING  SYSTEM  INTO  OS/78  (VERSIONS  1-4) AND OS/278 (VERSIONS 1-2), THE
  357. /    ENTER OPERATION HAS BEEN CHANGED WITH DANGEROUS CONSEQUENCES.
  358.  
  359. /    THE  ORIGINAL DEFINITION OF THE LENGTH RETURNED BY ENTER IS THE ACTUAL  LENGTH
  360. /    OF  THE LARGEST EMPTY (IN TWO'S COMPLEMENT FORM).  IF RECORD 7777 IS  PART  OF
  361. /    THE  ACTUAL  LARGEST  EMPTY (FULL SIZE DEVICE AND THE LARGEST EMPTY IS LAST ON
  362. /    THE  DEVICE),  THEN  THE  LENGTH RETURNED IS ONE LESS (THIS IS A LONG STANDING
  363. /    BUG).  SINCE THERE IS NO STRAIGHT-FORWARD WAY TO DETERMINE THIS, THE LENGTH IS
  364. /    ASSUMED TO BE CORRECT.
  365.  
  366. /    TESTS WITH THE  DECUS  VERSION  OF  OS/278 (DM-101) REVEAL A DANGEROUS CHANGE:
  367. /    THE LENGTH RETURNED IS TWO LARGER THAN ACTUALLY EXISTS!
  368.  
  369. /    TO COUNTERACT THIS, EDIT  010  INSERTED  A  DECREMENT  OF  TWO INTO THE LENGTH
  370. /    BEFORE PASSING IT BACK TO  THE  KERMIT FILE WRITING ROUTINE.  THE FILE WRITING
  371. /    ROUTINE THEN ADDS ONE TO THE LENGTH TO CREATE A "DANGER COUNT", I.E., IN TWO'S
  372. /    COMPLEMENT  NOTATION,  THIS IS THE AMOUNT THAT  WILL  INDICATE  FILE  OVERFLOW
  373. /    SHOULD IT REACH ZERO.
  374.  
  375. /    THIS HAS NOW BEEN REORGANIZED TO ALLOW THE  ENTER  ROUTINE  TO  SET THE DANGER
  376. /    COUNT  DIRECTLY.  OS/8 USERS MUST ALLOW FOR THE  EXTRA  ROOM  (WHICH  MUST  BE
  377. /    PRESENT  BUT  WILL NOT BE USED), SINCE NO CHECK FOR  SYSTEM  VERSION  WILL  BE
  378. /    PERFORMED.
  379.  
  380. /    020    16-NOV-1987    NEW ROUTINES AND CODE CLEANUP.    CJL
  381.  
  382. /        REWROTE  ENTIRE  OUTPUT  FILE    PACK   ROUTINE.    NOW  SUPPORTS
  383. /        ASCII/BINARY  INTERNAL FILE MODE FOR  LATER  USE.    USES  OUTPUT
  384. /        BUFFER IN FIELD ONE (SAME DEFINITIONS  AS  INPUT BUFFER) TO ALLOW
  385. /        MORE PROGRAM SPACE.  END OF FILE  CONVENTION  IN  ASCII  MODE NOW
  386. /        INCLUDES  ENSURING  <^Z>  CHARACTER  PACKED  INTO FILE (OR  NOT).
  387. /        REWROTE  ENTIRE  OUTPUT  FILE  CLOSE  ROUTINE  TO  IMPLEMENT <^Z>
  388. /        SCHEME.  ELIMINATED SEPARATE OUTPUT FILE INITIALIZE ROUTINE;  USE
  389. /        SPECIAL ROUTINE CALL INSTEAD.  FIXED PACKET WRITE BUG.
  390.  
  391. /    019    15-NOV-1987    NEW ROUTINES AND CODE CLEANUP.    CJL
  392.  
  393. /        FIXED UNPACK <^Z> BUG.  REWROTE ENTIRE INPUT FILE UNPACK ROUTINE.
  394. /        NOW SUPPORTS ASCII/BINARY INTERNAL FILE MODE FOR LATER USE.  USES
  395. /        INPUT BUFFER IN FIELD ONE TO ALLOW  MORE  PROGRAM  SPACE.  BUFFER
  396. /        FIELD DEFINED VIA SYMBOLS TO ALLOW CHANGES IN THE FUTURE.  END OF
  397. /        FILE CONVENTION IN ASCII MODE NOW INCLUDES SENDING <^Z> CHARACTER
  398. /        OR  NOT.  ELIMINATED SEPARATE INPUT FILE INITIALIZE ROUTINE;  USE
  399. /        SPECIAL ROUTINE CALL INSTEAD.
  400.  
  401. /    018    09-NOV-1987    BUG FIX AND CODE CLEANUP.    CJL
  402.  
  403. /        FIXED RECEIVE BUG; NOW ALLOW DEV: ON RECEIVE.
  404. /    017    05-NOV-1987    NEW FEATURES.            CJL
  405.  
  406. /        CONDITIONAL ASSEMBLY  PARAMETERS  ADDED  FOR MACHINE TYPE (PDP-8,
  407. /        DECMATE I, DECMATE  II/III/III+),  REMOTE LINE AND LOCAL TERMINAL
  408. /        INTERFACE DEFINITIONS.
  409.  
  410. /    016    05-NOV-1987    CODE CLEANUP.            CJL
  411.  
  412. /        OPTIMIZATION OF CODE, LITERALS, CONSTANTS.
  413.  
  414. /    015    04-NOV-1987    BUG FIX.            CJL
  415.  
  416. /        INPUT SERVICE ROUTINE ERROR  DOES JMP INSTEAD OF JMS WHEN CALLING
  417. /        COMMON ERROR HANDLER.
  418.  
  419. /    014    02-NOV-1987    SOURCE FILE CLEANUP.        CJL
  420.  
  421. /        SOURCE FILE COSMETICALLY CLEANED UP  AND  RENAMED  TO  K12MIT.PAL
  422. /        WHICH CONFORMS WITH CUCCA NAMING CONVENTION.    NO  ACTUAL BINARY
  423. /        CODE CHANGES BEYOND K08V2.  THIS EDIT  HISTORY  ADDED.    ENTRIES
  424. /        PRIOR TO 014 TRANSCRIBED BY CJL.
  425.  
  426. /    SINCE THE PDP-12 (AND OTHER 12-BIT DEC MACHINES)  IS  THE INTENDED ENVIRONMENT
  427. /    FOR THIS PROGRAM, IT IS NOW KNOWN AS KERMIT-12.
  428.  
  429. /    ASSEMBLING  THE  SOURCE FILE PRODUCES BINARY IDENTICAL TO K08V2.PA  CONFIRMING
  430. /    THAT SOURCE CLEANUP DOESN'T DAMAGE THE CODING (K08V2 IS NOW OBSOLETE).
  431.  
  432. /    013    01-OCT-1987    CHANGE TO VERSION 2.0.        R. SCHLERF (RICH)
  433.  
  434. /        CHANGED  'RKIOT'/'RTIOT'    TO   43/44  REMOTE  LINE  IOT  (LOCAL
  435. /        PREFERENCE).  CHANGED  'ESCAPE'  CHARACTER  TO  ^]  ('CONX1') FOR
  436. /        GENERIC CONFORMITY.  ADDED  VERSION/COMMAND BANNER AT STARTUP FOR
  437. /        MINI-HELP.    INCORPORATED  K278  CHANGES  003-006,  009-010  (NO
  438. /        INTERRUPTS).  DELETED 'ERRMSG.' NOW USES  'STXERR'  AT 'CLOOP9'+2
  439. /        FOR PROGRAM SPACE.  TO CONFORM TO  GENERIC KERMIT, "BACK ON PDP8"
  440. /        MESSAGE  DELETED AND REPLACED WITH BEEP <^G>.   MESSAGE  "SENDING
  441. /        FILE  XXXXXX.XX  CREATED  ON  DD-MM-YY"  REDUCED TO "SENDING FILE
  442. /        XXXXXX.XX"  TO CONFORM TO GENERIC KERMIT.  PARITY BIT IS  IGNORED
  443. /        ON BOTH REMOTE AND TTY LINES.  OUTPUT PARITY IS SET TO SPACE.
  444.  
  445. /    PROGRAM RENAMED TO K08V2.PA AND MADE AVAILABLE TO CUCCA BY:
  446.  
  447. /    RICHARD SCHLERF (RICH)
  448. /    AMERICAN CYANAMID COMPANY
  449. /    MEDICAL RESEARCH DIVISION
  450. /    LEDERLE LABORATORIES
  451. /    BUILDING 190 ROOM 115H
  452. /    PEARL RIVER, NEW YORK  10965
  453. /    (914) 732-2186 (09:00 TO 16:00)
  454.  
  455. /    SINCE  PRIMARY APPLICATION OF K08V2 IS FOR PDP-8 USAGE, THE MODIFICATIONS  NOT
  456. /    SPECIFIC TO DECMATE II/III FROM K278 WERE MOVED TO THE K08MIT VERSION.  FUTURE
  457. /    VERSIONS WILL  INCORPORATE  THE  DECMATE  FEATURES AND THUS OBSOLETE ALL OTHER
  458. /    VERSIONS AT THAT TIME.
  459. /    012    04-JUN-1986    PROGRAM FIX.            SEPP STADELMANN (SSTA)
  460.  
  461. /        RE-INITIALIZE VIA 'V30ST' AS ROM SETUP CLEARS COMPOSETABLE, ETC.
  462.  
  463. /    04-JUN-1986 VERSION RELEASED  TO  CUCCA  BY  MARTYN HEMMINGS (DEC GERMANY) AND
  464. /    SEPP STADELMANN (DEC SWITZERLAND) OF:
  465.  
  466. /    DIGITAL EQUIPMENT CORPORATION (DEC)
  467. /    146 MAIN STREET
  468. /    MAYNARD, MASS  01754
  469. /    (617) 897-5111
  470.  
  471. /    CUCCA RENAMED FILES (KERMIT.PA AND KERCOM.PA) TO K278.PA AND K278COM.PA (WHICH
  472. /    DOESN'T REALLY CONFORM TO THE NAMING CONVENTION).
  473.  
  474. /    CUCCA VERSION OF K278.PA FOUND TO BE DEFECTIVE.  FILE REPAIRED BY:
  475.  
  476. /    CHARLES LASNER (CJL)
  477. /    CLA SYSTEMS
  478. /    72-55 METROPOLITAN AVENUE
  479. /    MIDDLE VILLAGE, NEW YORK  11379-2107
  480. /    (718) 894-6499
  481.  
  482. /    REPAIRED FILE (K278.PA) NOW AVAILABLE AT CUCCA.
  483.  
  484. /    PROGRAM IS NOW  THE DECMATE II/III (III-PLUS) KERMIT ONLY.  HOOKS WERE LEFT IN
  485. /    FOR PDP-8 VERSION, BUT  NOT  IMPLEMENTED.    K278  DOES  WORK  WITH ADDITIONAL
  486. /    IMPLEMENTATIONS OF KERMIT, BUT RECEIVE  COMMAND DOES NOT WORK.  PROGRAM YIELDS
  487. /    RECOVERABLE SYSTEM ERROR/HALT WHEN EXITING TO  FLOPPY-BASED DECMATE II SYSTEM.
  488. /    CONNECT MODE IS VT200 8-BIT WHICH CONFUSES EVEN/ODD PARITY SYSTEMS.  K278 DOES
  489. /    NOT SUPPORT SETUP KEY OF DECMATE, BUT IMPLEMENTS SETUP COMMAND.
  490.  
  491. /    011    04-JUN-1986    NEW FEATURES.            SSTA
  492.  
  493. /        'PRQ3' CODE CONDITIONALS.  ROM SETUP COMMAND IMPLEMENTED FOR DMII/III.
  494. /        AUTOMATIC UPPERCASE SELECT ON RETURN FROM CONNECT.
  495.  
  496. /    010    13-MAR-1986    BUG FIX.            MARTYN HEMMINGS (MART)
  497.  
  498. /        FULL DISK HANDLED WELL.
  499.  
  500. /    009    13-MAR-1986    BUG FIX.            MART
  501.  
  502. /        CLEAN UP BREAK AND GET.
  503. /    008    12-MAR-1986    BUG FIX.            MART
  504.  
  505. /        CLEAR  INPUT  CHARACTERS  FROM  COMMUNICATIONS PORT WHEN IN  IDLE
  506. /        LOOP.
  507.  
  508. /    007    11-MAR-1986    NEW FEATURES AND BUG FIX.    MARTYN HEMMINGS AND
  509. /                                SSEP STADELMANN
  510. /                                (MART+SSTA)
  511.  
  512. /        INTERRUPT DRIVEN AND BUG FIX.
  513.  
  514. /    006    10-MAR-1986    NEW FEATURE.            MART+SSTA
  515.  
  516. /        DEVICE PARSE ON GET.
  517.  
  518. /    005    10-MAR-1986    BUG FIX.            MART+SSTA
  519.  
  520. /        NO DATE IN FILE WITH <^Z> INTACT.
  521.  
  522. /    004    10-MAR-1986    NEW FEATURES AND BUG FIX.    MART+SSTA
  523.  
  524. /        MAXIMUM  RECEIVE  BUFFER  FIXUP  ('RTERMI'),  15  SECOND TIME-OUT
  525. /        DURING CONNECT.
  526.  
  527. /    003    10-MAR-1986    BUG FIX.            SSTA
  528.  
  529. /        TWO PAGE HANDLER FIX.
  530.  
  531. /    K08MIT.PAL  COPIED  TO  DEC  ENGINEERING NETWORK (NODE LSMVAX::) ULTIMATELY TO
  532. /    EUROPE (NODE VIRGIN::) WHERE PROGRAM BECAME KERMIT.PAL AND KERCOM.PAL.
  533.  
  534. /    KERMIT.PAL  AND KERCOM.PAL ARE TWO SOURCE FILES ASSEMBLED TOGETHER TO  PRODUCE
  535. /    THE RUNNING KERMIT-8.  *THEY ARE FOR THE DECMATE II/III/III-PLUS ONLY.*
  536.  
  537. /    002    18-JUL-1985    ORIGINAL RELEASE.        RANDY HIPPE
  538.  
  539. /    18-JUL-1985 VERSION RELEASED TO CUCCA BY JERRY SANDS AND RANDY HIPPE OF:
  540.  
  541. /    BUREAU OF ENGRAVING, INC.
  542. /    3311 BROADWAY N.E.
  543. /    MINNEAPOLIS, MN  55413
  544. /    (612) 623-0900 X218
  545.  
  546. /    CUCCA  RENAMED  FILE  (KER8.PAL)  TO  K08MIT.PAL  WHICH  CONFORMS  TO   NAMING
  547. /    CONVENTION OF KERMIT FILES.
  548.  
  549. /    K08MIT SUPPORTS CONNECT, BYE (REALLY FIN), EXIT, SEND, GET, RECEIVE ONLY.
  550.  
  551. /    PROGRAM PRONE  TO  GETTING  "CONFUSED" AND OUTPUTS FILE DATE ATTRIBUTE BOTH AS
  552. /    'CAPAS' BYTE FEATURE  AND  ASCII  TEXT INSERTED INTO CONTENTS OF FILE AHEAD OF
  553. /    FILE DATA.  COMMAND PROCESSOR ACCEPTS UPPER-CASE COMPLETE COMMANDS ONLY.  <^C>
  554. /    ABORT FEATURE TAKES VERY LONG TIME TO ACT (IF AT ALL!).  MANY KERMITS WILL NOT
  555. /    WORK WITH K08MIT;  HOWEVER, K08MIT WAS TESTED SUCCESSFULLY WITH KERMIT-20.
  556.  
  557. /    001    30-JUL-1984    FIRST VERSION (KER8.PAL).    JERRY SANDS
  558. /    HARDWARE HINTS AND KINKS.
  559.  
  560.  
  561. /    KERMIT-12 REQUIRES THE FOLLOWING STANDARD OS/8 FAMILY CONFIGURATION:
  562.  
  563. /    PDP-8 FAMILY MEMBER WITH AT LEAST 8K MEMORY.
  564.  
  565. /    OS/8 SYSTEM DEVICE (WITH OS/8 FAMILY OPERATING SYSTEM RESIDENT).
  566.  
  567. /    KL8-COMPATIBLE CONSOLE INTERFACE.
  568.  
  569. /    7/8-BIT ASCII EXTERNAL CONSOLE TERMINAL DEVICE (TTY:).
  570.  
  571. /    KL8-COMPATIBLE REMOTE INTERFACE TO OTHER KERMIT.
  572.  
  573. /    NOTE:  ASSEMBLY  PARAMETERS  OF  KERMIT-12  ALLOW FOR LOCAL KERMIT CONTROLLING
  574. /    TERMINALS TO BE OTHER  THAN  THE  PRIMARY  OS/8  CONSOLE  DEVICE.   THE ACTUAL
  575. /    HARDWARE MUST STILL CONFORM TO  THE  SAME REQUIREMENTS (THE DEVICE CODES WOULD
  576. /    THEN BE USER-SPECIFIED AND DIFFER FROM  THE  STANDARD  03/04)  AS THE STANDARD
  577. /    CONSOLE INTERFACE AND TERMINAL.
  578.  
  579. /    SPECIAL DECMATE CONSIDERATIONS:
  580.  
  581. /    DECMATE  USAGE IS USUALLY OBTAINED BY  ASSEMBLING  FOR  THE  STANDARD  CONSOLE
  582. /    DEVICE  (03/04),  AS  THE  BUILT-IN  FIRMWARE/SLUSHWARE  OF  THE  DECMATES  IS
  583. /    SUFFICIENTLY COMPATIBLE WITH THE PDP-8 HARDWARE FOR KERMIT-12'S  REQUIREMENTS.
  584. /    (THE ONLY OTHER ACCEPTABLE CONSOLE DEVICE ON THE DECMATE IS THE PRINTER PORT.)
  585.  
  586. /    DECMATE  REMOTE  COMMUNICATIONS  PORTS  ARE    *RADICALLY*    DIFFERENT   FROM
  587. /    KL8-COMPATIBLE PORTS.  THESE ARE HANDLED AUTOMATICALLY BY ONCE-ONLY CODE WHICH
  588. /    DETECTS  THE  USAGE  OF  KERMIT-12  ON  THE    SPECIFIC  DECMATE  SYSTEM,  AND
  589. /    SELF-CONFIGURATION AS APPROPRIATE.  THERE IS ONE EXCEPTION  TO THIS, NAMELY IF
  590. /    THE COMMUNICATIONS PORT CODE IS ASSEMBLED FOR THE PRINTER  PORT  (32/33), THEN
  591. /    THE PRINTER PORT, *NOT* THE COMMUNICATIONS PORT WILL BE USED.    THE  STANDARD
  592. /    ASSEMBLY  OF  KERMIT-12 IS FOR A PDP-8 WITH DEVICE 40/41 COMMUNICATIONS  PORT.
  593. /    THIS DESIGNATED VERSION WILL SELF-CONFIGURE WHEN EXECUTED ON A DECMATE.
  594. /    CONFIGURATION RESTRICTIONS:
  595.  
  596. /    WHEN  INTERRUPTS  ARE SUPPORTED AGAIN, DEVICES SUCH AS THE TD-8/E WON'T  WORK.
  597. /    THE  NON-INTERRUPT  VERSION  SHOULD WORK TO 19200 BAUD ON THE PDP-8/E CPU,  SO
  598. /    THIS  SHOULD NOT BE A PROBLEM.  INTERRUPT-DRIVEN VERSIONS OF KERMIT-12 MUST BE
  599. /    RUN ONLY  ON  SYSTEMS  WHERE  *ALL*  INTENDED  DEVICES CAN HAVE THEIR HANDLERS
  600. /    INTERRUPTED BY THE CONSOLE AND REMOTE LINE INTERRUPT HANDLERS.  WHEN IN DOUBT,
  601. /    THE NON-INTERRUPT VERSION MUST BE USED (CURRENTLY THE ONLY VERSION).
  602.  
  603. /    IF FLOW CONTROL IS  DISABLED  (DUE  TO  XON/XOFF  BEING  UNAVAILABLE) THEN THE
  604. /    CONSOLE BAUD RATE MUST MEET  OR  EXCEED  THE  REMOTE LINE RATE.  THE USER MUST
  605. /    TAKE MINIMAL CARE NOT TO OVERLOAD  THE  INTERNAL BUFFERS OF KERMIT-12, AS THIS
  606. /    WILL YIELD THE ERROR MESSAGE:  KEYBOARD INPUT ERROR!
  607.  
  608. /    THIS IS NOT LIKELY TO OCCUR UNLESS  ONE  "PLAYS"  WITH  A  KEYBOARD  WHICH CAN
  609. /    GENERATE NUMEROUS ESCAPE SEQUENCES AS THE BUFFERS ARE  QUITE  ADEQUATE FOR ALL
  610. /    REASONABLE TERMINAL APPLICATIONS.  SIMILARLY, IF THE REMOTE LINE DOES NOT OBEY
  611. /    XON/XOFF  PROTOCOL  (WHILE  KERMIT-12  HAS  IT  ENABLED), THEN INTERNAL BUFFER
  612. /    OVERFLOW WILL YIELD THE ERROR MESSAGE:  REMOTE LINE INPUT ERROR!
  613.  
  614. /    THESE ERRORS ARE EXTREMELY UNLIKELY AND CAN ONLY BE CREATED BY  MISUSE OF FLOW
  615. /    CONTROL (THE ONLY EXCEPTION TO THIS IS THE ATTEMPT TO USE KERMIT-12  WITH  THE
  616. /    CONSOLE  BAUD  RATE  SLOWER  THAN  THE REMOTE LINE BAUD RATE WITH FLOW CONTROL
  617. /    DISABLED).  IF FLOW CONTROL IS ENABLED AND OBEYED THEN THE BUFFERING OF REMOTE
  618. /    LINE INPUT  WILL  OCCUR  WHILE SHORT PAUSES OCCUR ON THE CONSOLE (ASSUMING THE
  619. /    USER FREEZES/UNFREEZES THE  DISPLAY OFTEN AND THE CONSOLE DISPLAY BAUD RATE IS
  620. /    FASTER THAN THE REMOTE LINE BAUD RATE) WITH PRACTICALLY NO REMOTE LINE DELAY.
  621.  
  622. /    FLOW CONTROL IS NOT  YET  SUPPORTED  DURING KERMIT TRANSFERS.  SINCE KERMIT-12
  623. /    DOES  NOT SUPPORT SLIDING WINDOWS,  KERMIT-12  WILL  NEVER  GENERATE  OUTGOING
  624. /    XON/XOFF SEQUENCES.  FUTURE REVISIONS WILL  SUPPORT INCOMING XON/XOFF FROM THE
  625. /    REMOTE KERMIT.  XON/XOFF PROTOCOL DURING CONNECT  MODE IS COMPLETELY AVAILABLE
  626. /    AT THE USER'S OPTION.
  627.  
  628. /    CONSOLE TERMINALS ARE REQUIRED TO SUPPORT "GLASS TTY:"  FEATURES,  I.E.    THE
  629. /    PRINTING ASCII CHARACTER SET (LOWER-CASE DESIRABLE) AND THE CONTROL CHARACTERS
  630. /    <CR>, <LF>, AND <BEL> (THE LAST FOR VARIOUS AUDIBLE REPORTS  ONLY).  TERMINALS
  631. /    LACKING LOWER-CASE  SUPPORT  SHOULD "FOLD" LOWER-CASE CHARACTERS TO UPPER-CASE
  632. /    AUTOMATICALLY.  TERMINALS  SUCH  AS  THE VT05 CAN HAVE THE KEYBOARD LOWER-CASE
  633. /    ENABLED, AS KERMIT-12 SUPPORTS  OPTIONAL  OUTPUT FOLDING.  THE UPPER-CASE ONLY
  634. /    OPTION SHOULD BE ENABLED FOR  TERMINALS WHICH IGNORE LOWER-CASE INPUT FROM THE
  635. /    HOST,  AS KERMIT-12 GENERATES NUMEROUS LOWER-CASE  MESSAGE  CHARACTERS  (WHICH
  636. /    BECOME UPPER-CASE IF THIS OPTION IS SET).   THE <BS> CHARACTER IS REQUIRED FOR
  637. /    VISUAL  RUBOUT  (<BS>  <SPACE>  <BS>)  ONLY.   FUTURE  VERSIONS  WILL  SUPPORT
  638. /    HARD-COPY BACKSPACE TO REMOVE THIS REQUIREMENT.  ALL TERMINAL  FEATURES  (SUCH
  639. /    AS ACTUAL VT-100 FUNCTIONALITY) ARE FREELY PASSED TO THE HOST  DURING  CONNECT
  640. /    MODE;  THE ONLY CHARACTER ACTUALLY RESERVED IS THE ESCAPE CHARACTER WHICH WILL
  641. /    BE  TREATED  AS  A SEVEN-BIT CHARACTER ONLY.  IF THE USER PRESSES  THE  ESCAPE
  642. /    CHARACTER TWICE,  THEN  THE  SEVEN-BIT REPRESENTATION OF THE CHARACTER IS SENT
  643. /    ONCE;  THERE  IS  NO  WAY  TO SEND THE ESCAPE CHARACTER WITH THE HIGH-BIT SET.
  644. /    SINCE THE ESCAPE CHARACTER  ITSELF  CAN  BE SET TO ALMOST ANY SEVEN-BIT VALUE,
  645. /    THIS SHOULD NOT BE A SERIOUS LIMITATION.  TERMINALS THAT DON'T "BEEP" WHEN THE
  646. /    <BEL> CHARACTER IS SENT SHOULD NOT  OUTPUT  A  PRINTABLE RENDITION OF THE <^G>
  647. /    CHARACTER, AS THIS WOULD DISRUPT THE TERMINAL OUTPUT AND INTERNAL COLUMN COUNT
  648. /    DURING VARIOUS MESSAGE SEQUENCES, ETC.
  649. /    KL-8/E INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:
  650.  
  651. /    1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA.
  652.  
  653. /    FUNCTIONAL  BAUD RATES INCLUDE 110, 150, 300, 600,  1200,  2400,  4800,  9600,
  654. /    19200, 38400 AND 76800.  2400 BAUD REQUIRES A  REVISION  "B"  OR  BETTER M8650
  655. /    MODULE  (IF  ONE  USES  DEC'S  DOCUMENTATION  OF AVAILABLE SPLIT-LUG OPTIONS).
  656. /    ACTUAL  BAUD  RATES  UP TO APPROXIMATELY 100 KBAUD SHOULD WORK WHEN  KERMIT-12
  657. /    BECOMES  INTERRUPT-DRIVEN.    RATES  OTHER THAN 110 BAUD REQUIRE A 19.6608 MHZ
  658. /    BAUD-RATE OSCILLATOR.
  659.  
  660. /    THE BAUD  RATES STATED ABOVE ARE ACTUALLY AVAILABLE ON THE KL-8/E, BUT REQUIRE
  661. /    A SINGLE SOLDER  JUMPER  TO  IMPLEMENT  THE  PROPER BAUD RATE ABOVE 2400 BAUD.
  662. /    CHANGING BAUD-RATE GENERATOR CRYSTALS  WILL  PRODUCE OTHER RATES AS NECESSARY.
  663. /    (SEND INQUIRIES  TO CLA SYSTEMS FOR INFORMATION REGARDING KL-8/E MODIFICATIONS
  664. /    INCLUDING UPGRADED BAUD-RATE  OSCILLATORS,  ETC.) KERMIT-12 HAS BEEN TESTED TO
  665. /    9600 BAUD AND SHOULD WORK TO 19200 BAUD (AS OF THE CURRENT VERSION).
  666.  
  667.  
  668. /    KL8-J/A INTERFACES SHOULD BE SETUP WITH THE FOLLOWING STANDARD SETTINGS:
  669.  
  670. /    1 STOP BIT ABOVE 110 BAUD WITH 8 BITS DATA NO PARITY.
  671.  
  672. /    FUTURE  VERSIONS  OF KERMIT-12 WILL SUPPORT VARIOUS SOFTWARE-GENERATED  PARITY
  673. /    OPTIONS.  THE FRAMING AND OVERRUN ERRORS CAN BE ENABLED AND WILL EVENTUALLY BE
  674. /    SUPPORTED (BUT THE PARITY GENERATOR SHOULD BE DISABLED TO PREVENT  INTERACTION
  675. /    WITH THE SOFTWARE USE OF PARITY GENERATION/DETECTION).
  676.  
  677. /    ALL BAUD RATES ARE SUPPORTABLE:
  678.  
  679. /    110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200.
  680.  
  681. /    19200 BAUD IS ACHIEVED BY CUTTING JUMPER "W2" AND ADDING JUMPER  "W5" AND THEN
  682. /    SETTING THE BOARD FOR WHAT IS NORMALLY 9600 BAUD.  A WESTERN DIGITAL TR-1602-B
  683. /    OR  EQUIVALENT  UART  IS  REQUIRED TO SUPPORT 19200 BAUD;  MOST OF THE  RECENT
  684. /    PRODUCTION  DEC M8655 BOARDS USE THE SMC COMM 2017 UART WHICH MEETS OR EXCEEDS
  685. /    THIS REQUIREMENT.   EARLY  M8655 BOARDS USE GI UARTS IN CERAMIC PACKAGES WHICH
  686. /    *CANNOT* BE USED AT 19200 BAUD (MANY ARE FLAKY AT 9600 BAUD!).
  687.  
  688. /    RECEIVE BAUD RATE SHOULD  BE IDENTICAL TO TRANSMIT BAUD RATE.  (DO NOT SET THE
  689. /    RECEIVE=150 BAUD SWITCH!)
  690. /    OTHER INTERFACES:
  691.  
  692. /    DKC-8/A (8/A OPTION BOARD #1)  INTERFACES  SHOULD  BE SETUP AS PER THE KL8-J/A
  693. /    SPECIFICATIONS INCLUDING THE REQUIREMENTS OF THE UART.  SOME DEC DOCUMENTATION
  694. /    INDICATED A PROHIBITION ON THE USE OF  19200 BAUD, BUT THIS IS OBVIATED BY THE
  695. /    USE OF THE SAME UARTS AS IN THE KL8-J/A.
  696.  
  697. /    EARLIER DEVICES SUCH AS PT08, DP-12, KL-8/F OR DC02 (CHANNEL ZERO ONLY) SHOULD
  698. /    WORK CORRECTLY AS FACTORY WIRED (MOST OF THESE DEVICES  DO NOT SUPPORT OPTIONS
  699. /    KERMIT-12  WOULD  REQUIRE  TO  BE  DISABLED  ANYWAY.    THESE  INCLUDE  PARITY
  700. /    GENERATION,  FRAMING  ERROR  DETECTION,  ETC.).  TO UTILIZE THESE DEVICES, THE
  701. /    ASSEMBLY PARAMETERS  FOR  USER DEVICES AND THEIR RESPECTIVE DEVICE CODE VALUES
  702. /    SHOULD BE GIVEN  DURING  ASSEMBLY  (SEE ASSEMBLY INSTRUCTIONS).  PROPER DEVICE
  703. /    CODE VALUES MUST BE  OBTAINED  FOR  THE  SELECTED INTERFACE, AS THERE ARE MANY
  704. /    ACTUAL POSSIBILITIES.  (DP-12 DEVICES  ARE  GENERALLY DEVICE 40/41;  PT08/DC02
  705. /    INTERFACES ARE GENERALLY DEVICE 11/12, ETC.)
  706. /    ASSEMBLY INSTRUCTIONS.
  707.  
  708. /    KERMIT-12 CAN BE ASSEMBLED BY EITHER OF TWO METHODS:
  709.  
  710.  
  711. /    P?S/8 METHOD:
  712.  
  713. /    ASSUMING THE EXTENDED-LENGTH FILE KERM12 IS  THE  SOURCE  FILE,  THE FOLLOWING
  714. /    COMMAND WILL PRODUCE A FULLY ORNAMENTED LISTING:
  715.  
  716. /    .PAL KB1,KB2,KB3,KB4<KERM12(ACEJLMNPQSX8)
  717.  
  718. /    OPTION SWITCH BREAKDOWN:
  719.  
  720. /    /A    ALL SYMBOLS IN SYMBOL PRINTOUT.
  721.  
  722. /    /C    OPTIMIZE  CORE  DURING ASSEMBLY FOR MORE SYMBOLS,  LESS  BUFFERS.
  723. /        THIS OPTION SHOULD BE DELETED IF MORE THAN  8K  IS  AVAILABLE FOR
  724. /        ASSEMBLY.
  725.  
  726. /    /E    FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.
  727.  
  728. /    /J    *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.
  729.  
  730. /    /L    PERFORM SECOND-PASS LISTING.
  731.  
  732. /    /M    CHAIN TO MAP FOR BITMAP OUTPUT AT END OF ASSEMBLY.
  733.  
  734. /    /N    ENABLE NEATNESS ADORNMENTS TO LISTING OUTPUT.
  735.  
  736. /    /P    ENABLE PRINTER-ORIENTED (WIDE MODE) LISTING OUTPUT.
  737.  
  738. /    /Q    ENABLE LITERALS ONLY, GENERATED LINKS ARE ERRORS.
  739.  
  740. /    /S    ENABLE SYMBOL TABLE PRINTOUT.
  741.  
  742. /    /X    ENABLE CROSS-REFERENCE OUTPUT AT END OF ASSEMBLY.
  743.  
  744. /    /8    ENABLE FULL SYMBOL TABLE INCLUDING LINC MODE CROSS ASSEMBLY.
  745.  
  746. /    THE NUMBER OF BINARY FILES REQUIRED (KB1, KB2, KB3, ETC.) IS  TO BE DETERMINED
  747. /    AT ASSEMBLY TIME, AS KERMIT-12 WILL TEND TO GROW LARGER AS FEATURES ARE ADDED.
  748.  
  749. /    P?S/8 PAL IS THE PREFERRED METHOD  OF ASSEMBLING K12MIT DURING DEVELOPMENT DUE
  750. /    TO SUPERIOR ERROR DIAGNOSTICS AND OVERALL SPEED.   K12MIT COULD GROW TO A SIZE
  751. /    BEYOND THE CAPABILITIES OF OS/8 CREF.  THIS  LIMITATION  CANNOT  APPLY  TO THE
  752. /    P?S/8 DEVELOPMENT ENVIRONMENT.
  753.  
  754. /    P?S/8 PAL CAN PRODUCE A LISTING OF K12MIT, BUT THE BINARY FILES CREATED BY THE
  755. /    ASSEMBLY  MUST BE TRANSFERRED TO AN OS/8 ENVIRONMENT FOR USE, SINCE K12MIT (AS
  756. /    SPECIFICALLY WRITTEN) IS FOR THE OS/8 FAMILY OF SYSTEMS ONLY.
  757.  
  758. /    NOTE:  P?S/8 IS *NOT* A DEC PRODUCT;  IT IS SOLD COMMERCIALLY AND IS AVAILABLE
  759. /    FREE  OF  CHARGE (EXCEPT FOR MEDIA HANDLING CHARGES, ETC.) *ONLY* TO QUALIFIED
  760. /    INSTITUTIONS.  CONTACT CJL FOR ADDITIONAL INFORMATION ON ACQUIRING P?S/8.
  761. /    OS/8 FAMILY OF SYSTEMS METHOD:
  762.  
  763. /    K12MIT.PA CAN BE ASSEMBLED WITH PAL8 VERSION B0 WHICH IS AVAILABLE FROM  DECUS
  764. /    AS PART OF THE OS/278 RELEASE.  PAL8 VERSION B0 WILL RUN ON  ANY  OS/8  FAMILY
  765. /    SYSTEM,  AS  IT  HAS  NO  HARDWARE  DEPENDENCIES  BEYOND  THE  ORIGINAL  PDP-8
  766. /    REQUIREMENT (NO BSW OR IAC ROTATE OR CAF OR R3L INSTRUCTIONS AS WAS INTENDED).
  767. /    THIS ALSO APPLIES TO CREF  VERSION B0 WHICH IS REQUIRED WHEN A CROSS-REFERENCE
  768. /    IS REQUESTED.  PAL8 VERSION B0  AND  CREF  VERSION B0 ARE AVAILABLE AS PART OF
  769. /    THE KERMIT-12 DISTRIBUTION AS K12PL8.ENC AND K12CRF.ENC RESPECTIVELY.  SEE THE
  770. /    DOCUMENTATION OF K12DEC FOR INFORMATION ON PRODUCING PAL8.SV  AND CREF.SV FROM
  771. /    THESE ENCODED FILES.
  772.  
  773. /    ASSUMING CCL IS ENABLED, THE FOLLOWING COMMAND WILL PRODUCE A BINARY AND FULLY
  774. /    ORNAMENTED LISTING:
  775.  
  776. /    .PAL DEV:K12MIT.BN,DEV:K12MIT.LS,DEV:KSCR.TM<DEV:PARAM.PA,DEV:K12MIT.PA(CEFMW)
  777.  
  778. /    DEV:  IS THE APPLICABLE DEVICE WHERE THE FILES RESIDE.    STANDARD  EXTENSIONS
  779. /    ARE  ASSUMED  (.BN  FOR  BINARY, .LS FOR LISTING, .PA FOR PAL  SOURCE).    THE
  780. /    KSCR.TM  TEMPORARY  OUTPUT FILE SPECIFICATION IS OPTIONAL, BUT IS DEFAULTED TO
  781. /    SYS:CREFLS.TM IF  NOT  EXPLICITLY GIVEN.  MANY SYSTEM DEVICES ARE TOO SMALL TO
  782. /    SUPPORT THIS TEMPORARY  FILE,  THUS  THE  FILE  MAY  BE  DIRECTED  TO  ANOTHER
  783. /    AVAILABLE DEVICE WITH SUFFICIENT SPACE.
  784.  
  785. /    THE PARAM.PA FILE IS OPTIONAL AND USED TO PASS SHORT USER PARAMETERS, ETC.  TO
  786. /    THE ASSEMBLY.
  787.  
  788. /    OPTION SWITCH BREAKDOWN:
  789.  
  790. /    /C    CHAIN TO CREF.SV TO PRODUCE A CROSS-REFERENCED LISTING FILE.
  791.  
  792. /    /E    GENERATED LINKS ARE ERRORS.
  793.  
  794. /    /F    *DO NOT* TERMINATE TEXT STRINGS WITH EXTRA ZERO WORD.
  795.  
  796. /    /M    USE MAMMOTH SYMBOL TABLE OPTION FOR CREF.
  797.  
  798. /    /W    FORGET LITERAL BOUNDARIES WHEN LEAVING THE CURRENT PAGE.
  799.  
  800. /    LOADING INSTRUCTIONS:
  801.  
  802. /    .LOAD DEV:K12CLR,K12MIT.BN    THIS LOADS THE BINARY CLEAR AND KERMIT
  803. /    .SAVE DEV K12MIT.SV=1        THIS SAVES THE CORE IMAGE
  804.  
  805. /    THE  JOB STATUS WORD (=1) INDICATED THAT K12MIT.SV LOADS INTO 10000-11777, BUT
  806. /    SHOULD NOT BE SAVED/RESTORED  WHEN  THE  USR  IS  LOADED  OVER  THIS  AREA  OR
  807. /    DISMISSED (THE USR IS ACTUALLY  NEVER  DISMISSED  IN NORMAL K12MIT OPERATION).
  808. /    OTHER BITS MAY BE SET AT  THE  USER'S  OPTION,  BUT  ARE UNNECESSARY;  THE BIT
  809. /    INDICATED SERVES ONLY TO REDUCE SYSTEM OVERHEAD  REGARDING  THE DISPOSITION OF
  810. /    10000-11777.  THE  BINARY  FILE  K12CLR.BN  (CREATED  BY ASSEMBLING K12CLR.PA)
  811. /    LOADS ZEROES INTO ALL  OF  MEMORY  TO  CREATE A "CLEAN" CORE IMAGE FILE, WHICH
  812. /    MAKES THE ENCODED BINARY FILE SMALLER DUE TO REPEAT COMPRESSION.
  813. /    PASSING SHORT PARAMETER FILES.
  814.  
  815. /    WHEN INSERTING A SHORT USER MODIFICATION FILE IN THE INPUT STREAM  (PARAM.PAL)
  816. /    THE FOLLOWING SHOULD BE NOTED:
  817.  
  818. /    ALWAYS  PUT  THE  SHORT  PARAMETER  FILE  (CONTAINING EQUATED SYMBOLS SUCH  AS
  819. /    USER=1, ETC.) IN FRONT OF K12MIT.PAL.
  820.  
  821. /    IF TTY:  IS USED FOR DIRECT TYPE-IN OF THESE  PARAMETERS, THE INFORMATION NEED
  822. /    ONLY BE TYPED ENDING WITH <^Z> DURING PASS 1.  SUBSEQUENT  PASSES  REQUIRE THE
  823. /    ENDING <^Z> ONLY.  IF THIS METHOD IS USED, A LISTING WITHOUT  THE  USER  INPUT
  824. /    WHICH  DID THE CUSTOMIZING OF KERMIT-12 CAN BE CREATED.  NOTE:  IF  BINARY  IS
  825. /    GENERATED BY THE CONTENTS OF THE PARAMETER FILE (SUCH AS USE OF THE LOCAL TEXT
  826. /    MESSAGE,  ETC.),  THE  INFORMATION MUST BE TYPED IN DURING PASS 2.  THE PASS 3
  827. /    LISTING MAY  CONTAIN  THE INFORMATION IF SO DESIRED, REQUIRING A REPETITION OF
  828. /    THE INPUT.   PASS  1  INPUT  OF  THE INFORMATION IS EFFECTIVELY IGNORED, AS NO
  829. /    DEFINITIONS ARE CREATED ('LCLMSG' IS DEFINED ELSEWHERE, ETC.).
  830.  
  831. /    EXPERIENCED PDP-8 USERS NEW TO PAL8 VERSION B0 TAKE SPECIAL NOTICE:
  832.  
  833. /    DUE TO HARDWARE LIMITATIONS OF THE DECMATES, THE KEYBOARD FLAG WILL BE CLEARED
  834. /    DURING PDP-8 PAL8 B0 OPERATION.  THE KL8E TTY:  HANDLER WILL NO LONGER BE ABLE
  835. /    TO BUFFER <^Z> DURING THE ASSEMBLY;  YOU MUST  WAIT UNTIL THE HANDLER ACCESSES
  836. /    THE KEYBOARD ON EACH PASS *THEN* PRESS <^Z> TO CONTINUE THE ASSEMBLY.
  837.  
  838.  
  839. /    CREATING A CUSTOM MESSAGE FROM THE PARAMETER FILE.
  840.  
  841. /    IF  SO  DESIRED,  A CUSTOM LOCAL HEADER MESSAGE MAY BE ADDED BY INSERTING  THE
  842. /    FOLLOWING INTO THE PARAMETER FILE:
  843.  
  844. /    BUFFLD=    10        /THESE PROBABLY
  845. /    FILBUFF=2000        /WON'T CHANGE!
  846.  
  847. /    GENMSG=    0        /DON'T GENERATE STANDARD (NULL) MESSAGE
  848. /    UMSG=    0        /DON'T GENERATE STANDARD (DUMMY) USER MESSAGE
  849.  
  850. /    FIELD    BUFFLD%10    /FIELD FOR TEXT MESSAGE
  851.  
  852. /    *FILBUFFER        /LOCAL MESSAGE LOADS THERE
  853.  
  854. /LCLMSG,TEXT    "%^I^NSERT ^L^OCAL ^M^ESSAGE ^H^ERE!%"
  855.  
  856. /    ZBLOCK    LCLMSG+40-.    /ZERO REST OF MESSAGE AREA
  857.  
  858. /    TEXT IS IN  UPPER/LOWER-CASE  SIXBIT  WITH  '^'  MEANING SHIFT CASE (INITIALLY
  859. /    LOWER-CASE) AND '%' MEANING <CR>, <LF>.
  860. /    OTHER METHODS:
  861.  
  862. /    KERMIT-12  *CANNOT*  BE ASSEMBLED  BY  PAL10  (LAST  KNOWN  VERSION  OF  PDP-8
  863. /    CROSS-ASSEMBLER FOR TOPS10 (142)) BECAUSE IT LACKS CERTAIN FEATURES:
  864.  
  865. /    DOES NOT SUPPORT 'RELOC' PSEUDO-OP.
  866.  
  867. /    DOES NOT SUPPORT PAGE ZERO  REDEFINE  (CAUSES  "Z" ERROR ON SOURCE FILES WHICH
  868. /    DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).
  869.  
  870. /    INCORRECTLY HANDLES 'ZBLOCK' PSEUDO-OP (LEADS TO  "Q"  ERROR  ON  SOURCE FILES
  871. /    WHICH DON'T HAVE ERRORS WHEN ASSEMBLED BY EITHER P?S/8 PAL OR OS/8 PAL8).
  872.  
  873. /    DOES NOT SUPPORT LITERAL "FORGETTING" (P?S/8 PAL OPTION /E OR OS/8 PAL8 OPTION
  874. /    /W) WHICH IS REQUIRED FOR DEFINING OVERLAY AREAS, ETC.
  875.  
  876. /    DOES NOT SUPPORT TEXT WITHOUT ZERO WORD FILL (P?S/8 PAL OPTION /J OR OS/8 PAL8
  877. /    OPTION /F FULFILLS THIS REQUIREMENT) WHICH IS REQUIRED FOR TEXT MESSAGES.
  878.  
  879.  
  880. /    P?S/8 PAL IS AN IMPROPER SUPERSET OF PAL10.  PAL10 SUPPORTS MACRO-8 MODE AS AN
  881. /    OPTION AND AUTOMATIC FIELD DUMP BITMAPS;  ALL OTHER KNOWN PAL10 FEATURES EXIST
  882. /    IN  P?S/8  PAL  INCLUDING  THE  SUPPORT  OF  THE  AUTOMATIC FIELD DUMP  BITMAP
  883. /    PSEUDO-OPS ('ENBITS' AND 'NOBITS').
  884.  
  885. /    OS/8  PAL8 (VERSION B0) IS A SUBSET OF P?S/8 PAL WHICH HAS  SEVERAL  SYNTACTIC
  886. /    QUIRKS (WHICH  ARE AVOIDABLE, BUT NONETHELESS ARE INCOMPATIBLE WITH BOTH P?S/8
  887. /    PAL  AND  PAL10    IN  CERTAIN  MINOR  WAYS);    REGARDLESS,  PAL8  LACKS  THE
  888. /    COMPATIBILITY PROBLEMS OF PAL10.
  889.  
  890. /    MAINTAINING SOURCE COMPATIBILITY.
  891.  
  892. /    KERMIT-12 SOURCE FILE CONVENTIONS DEMAND THE USE OF THE COMMON SUBSET OF P?S/8
  893. /    PAL AND OS/8 PAL8 (VERSION  B0).    CERTAIN  FORMS  OF  STATEMENTS  SHOULD  BE
  894. /    AVOIDED:
  895.  
  896. /    TAD            /NOT LEGAL IN PAL8
  897. /    0+TAD            /NOT LEGAL IN PAL10, AND POSSIBLY WRONG IN PAL8
  898. /    TAD    (3)+1        /GENERATES SAME AS "TAD (3+1)" IN PAL8
  899. /    -A!-B            /UNARY OPERATOR HANDLED WRONG IN PAL8
  900. /    I+N            /NOT LEGAL IN PAL8
  901. /    N+I            /NOT LEGAL IN PAL8
  902. /    I I            /NOT LEGAL IN PAL8
  903.  
  904. /    THIS  REQUIREMENT IS EASILY MET BY  KERMIT-12  AS  MOST  OF  THESE  CASES  ARE
  905. /    ESOTERIC QUIRKS AND NOT NEEDED FOR THIS ASSEMBLY.
  906.  
  907. /    THE RESTRICTIONS OF PAL10 (EVEN THOUGH IT  HAS  OTHER DESIRABLE FEATURES, MOST
  908. /    OF WHICH IT SHARES WITH P?S/8 PAL) ARE  TOO SEVERE TO ALLOW USABLE ASSEMBLY OF
  909. /    THIS  PROGRAM.    BETTER  CROSS-ASSEMBLERS  MAY  EXIST  ELSEWHERE  WHICH   ARE
  910. /    SOURCE-COMPATIBLE WITH KERMIT-12.
  911. /    USE OF P?S/8 LANGUAGE EXTENSIONS.
  912.  
  913. /    P?S/8 OFFERS SEVERAL USEFUL FEATURES OVER PAL8 (AND PAL10) WHICH MAY BE USEFUL
  914. /    FOR  ASSEMBLY  DEVELOPMENT OF KERMIT-12.  THESE INCLUDE LANGUAGE ELEMENTS SUCH
  915. /    AS "TAD (3)+1" HANDLED CORRECTLY, OR PSEUDO-OPS SUCH AS "PAUSE EXPR" WHERE THE
  916. /    VALUE OF 'EXPR'  WILL  BE  DISPLAYED ON THE SYSTEM CONSOLE DURING THE ASSEMBLY
  917. /    WHEN THAT POINT IN  THE  ASSEMBLY  IS  REACHED.   TO ACCESS THESE FEATURES AND
  918. /    STILL  PROVIDE COMPATIBILITY WITH PAL8  (VERSION  B0),  THE  FOLLOWING  CODING
  919. /    TECHNIQUE IS SUGGESTED:
  920.  
  921.  
  922. /    IFNDEF    PQS    <PQS=0>    /WILL BE 0 ON PAL8, PAL10
  923.  
  924.  
  925. /    IFZERO    PQS    <    /DO PAL8, ETC. STUFF HERE
  926.  
  927. /    FOO=    (TABLE)        /DEFINE POINTER TO ADDRESS OF TABLE
  928.  
  929. /    TAD    FOO-1        /GET (POINTER TO ADDRESS OF TABLE)-1
  930. /    DCA    XR1        /SETUP AUTO-INDEX REGISTER
  931.  
  932. /    WISH WE HAD PAUSE AND ERROR PSEUDO-OPS IN PAL8.
  933.  
  934. /            >    /END OF PAL8, ETC. VARIANT
  935.  
  936.  
  937. /    IFNZRO    PQS    <    /DO P?S/8 PAL STUFF HERE
  938.  
  939. /    TAD    (TABLE)-1    /GET (POINTER TO ADDRESS OF TABLE)-1
  940. /    DCA    XR1        /SETUP AUTO-INDEX REGISTER
  941.  
  942. /    IFNDEF    PASS    <PASS=0>/DEFINE PASS VARIABLE
  943.  
  944. /    PASS=    PASS+1        /BUMP EVERY ASSEMBLER PASS
  945.  
  946. /    PAUSE    PASS        /DISPLAY PASS NUMBER
  947.  
  948. /    IFNZRO    .&4000    <
  949.  
  950. /    ERROR    1234        /DISPLAY ERROR MESSAGE IF THERE ARE PROBLEMS
  951.  
  952. /            >
  953.  
  954. /            >    /END OF P?S/8 PAL VARIANT
  955.  
  956.  
  957. /    THIS ALLOWS TEMPORARY DEVELOPMENT FEATURES OR  PERMANENT ELEMENTS WHICH MAY BE
  958. /    MORE ELEGANTLY EXPRESSED IN P?S/8 PAL VARIANT  CODING, WHILE THE PAL8 (VERSION
  959. /    B0) VERSION CAN STILL BE USED (VIA DIRECT  OCTAL,  MULTIPLE EQUATE STATEMENTS,
  960. /    CONDITIONAL FLUSH AS IN THE ABOVE EXAMPLE, ETC.   AS  NECESSARY)  FOR STANDARD
  961. /    ASSEMBLY OF KERMIT-12.
  962. /    ASSEMBLY PARAMETERS.
  963.  
  964. /    SEVERAL  PARAMETERS  MUST  BE  CHANGED  WITHIN  K12MIT.PA  (OR  PASSED TO  THE
  965. /    ASSEMBLER VIA A SHORT FILE INSERTED INTO THE ASSEMBLY STREAM BEFORE  THE  MAIN
  966. /    FILE):
  967.  
  968. /    SETTING  KEY= [RECEIVE IOT CODE FOR  CONSOLE  KEYBOARD]  DEFINES  THE  CONSOLE
  969. /    KEYBOARD IOT CODE (DEFAULT IS 03).
  970.  
  971. /    SETTING  TTY=  [TRANSMIT  IOT CODE FOR CONSOLE  OUTPUT]  CHANGES  THE  CONSOLE
  972. /    PRINTER IOT CODE (DEFAULT IS 04).
  973.  
  974. /    THE FOLLOWING DEFINITIONS ARE  ESSENTIALLY  FOR  KL8-TYPE DEVICES ONLY, AS THE
  975. /    CODE DEMANDS KL8 HARDWARE COMPATIBILITY.    MODELS  OTHER  THAN PDP-8 (SUCH AS
  976. /    DECMATE) GENERALLY EITHER PLACE RESTRICTIONS ON  AVAILABLE  INTERFACES  (OTHER
  977. /    SOFTWARE DESIGNATES A SERIAL INTERFACE AS A  LOGICAL  PRINTER  PORT;  DECMATES
  978. /    SUPPORT A FIRMWARE "PRINT SCREEN" KEY WHICH ENFORCES  THIS.),  OR  DON'T ALLOW
  979. /    USABLE PLUG-IN OPTIONS.
  980.  
  981. /    IGNORING BUILT-IN DECMATE SUPPORT, THE FOLLOWING PARAMETERS ARE ACTIVE:
  982.  
  983. /    SETTING DEV30=    1     CREATES DEVICE 30/31 REMOTE LINE IOTS.
  984.  
  985. /    SETTING DEV40=    1     CREATES DEVICE 40/41 REMOTE LINE IOTS.
  986.  
  987. /    SETTING LEDERLE=1     CREATES DEVICE 43/44  REMOTE  LINE  IOTS (AND A CUSTOM
  988. /                HEADER).
  989.  
  990. /    SETTING ORIGNAL=1    CREATES  DEVICE  33/34  REMOTE   LINE  IOTS  (ORIGINAL
  991. /                SETTINGS).
  992.  
  993. /    SETTING SPRINT= 1    CREATES DEVICE 32/33 REMOTE LINE  IOTS (SERIAL PRINTER
  994. /                PORT).
  995.  
  996. /    SETTING USER=    1    CREATES DEVICE XX/XY REMOTE LINE IOTS.
  997.  
  998. /    IF NONE OF THESE ARE SET, THEN DEV40=1 APPLIES BY DEFAULT.
  999.  
  1000.  
  1001.  
  1002. /    SETTING USER=    1    REQUIRES THE USER TO DEFINE TWO ADDITIONAL VALUES:
  1003.  
  1004. /        XX=    [RECEIVE IOT DEVICE CODE] (DEFAULT IS 40).
  1005.  
  1006. /        XY=    [TRANSMIT IOT DEVICE CODE] (DEFAULT IS 41).
  1007. /    SETTING SPRINT= 1    INHIBITS THE BUILT-IN CHECK FOR DECMATE  OPERATION AND
  1008. /                USES    THE    SERIAL  PRINTER  PORT  FOUND  ON    ALL
  1009. /                WPS-8-CONFIGURED    PDP-8/E,  PDP-8/A  CONFIGURATIONS,
  1010. /                VT-78,  AND  ALL DECMATES (VT-278,  DECMATE  II,  III,
  1011. /                III+) FOR REMOTE COMMUNICATIONS.
  1012.  
  1013. /    THE  USE OF THE SERIAL PRINTER PORT FOR REMOTE COMMUNICATIONS PURPOSES MAY  BE
  1014. /    PROBLEMATIC DUE TO CONSIDERATIONS SUCH AS THE RS-232 CONNECTION TO THE PRINTER
  1015. /    IS A  MODEM  (DCE), RATHER THAN A TERMINAL (DTE) (DECMATE II, ETC.  REQUIRES A
  1016. /    GENDER CHANGER.), OR  THE SOFTWARE DESIGNATION OF THE PORT AS BEING ALLEDGEDLY
  1017. /    *ONLY* FOR A PRINTER,  SUCH AS WHEN CERTAIN SYSTEMS SUPPORT THE "PRINT SCREEN"
  1018. /    KEY AS A SCREEN DUMP  TO  THE  SERIAL PRINTER PORT, ETC.  THESE ISSUES ARE NOT
  1019. /    RELEVANT TO KERMIT-12 OPERATION, AS THE "PRINT SCREEN" KEY IS NOT SUPPORTED BY
  1020. /    KERMIT-12 IN THIS CONFIGURATION AS SUCH (FUTURE  VERSIONS  COULD  REDEFINE THE
  1021. /    "PRINT SCREEN" KEY TO SUCH FUNCTIONS AS DUMP SCREEN TO A FILE, ETC.).
  1022.  
  1023. /    SETTING BRATE= NN    SETS THE DEFAULT BAUD RATE (FOR  SYSTEMS  THAT SUPPORT
  1024. /                THIS  FEATURE)  FROM  A  TABLE  OF  VALUES  (0-15)  AS
  1025. /                FOLLOWS:
  1026.  
  1027. /                NN        BAUD RATE
  1028.  
  1029. /                00        50
  1030. /                01        75
  1031. /                02        110
  1032. /                03        134.5
  1033. /                04        150
  1034. /                05        300
  1035. /                06        600
  1036. /                07        1200
  1037. /                08        1800
  1038. /                09        2000
  1039. /                10        2400
  1040. /                11        3600
  1041. /                12        4800
  1042. /                13        7200
  1043. /                14        9600
  1044. /                15        19200
  1045.  
  1046. /    SETTING ESCAPE=    NNNN    SETS THE DEFAULT ESCAPE CHARACTER TO NNNN.
  1047.  
  1048. /    SETTING FLOW=    1    ENABLES FLOW-CONTROL BY DEFAULT.
  1049. /    SETTING FLOW=    0    DISABLES FLOW-CONTROL BY DEFAULT.
  1050.  
  1051. /    SETTING FMODE=    0177    SETS THE DEFAULT FILE MODE TO ASCII.
  1052. /    SETTING FMODE=    4377    SETS THE DEFAULT FILE MODE TO BINARY.
  1053. /    SETTING GENMSG=    0    CAUSES  NO  BINARY TO BE GENERATED WHERE  'LCLMSG'  IS
  1054. /                DEFINED.  THIS ALLOWS THE PARAMETER FILE (PARAM.PA) OR
  1055. /                SUBSEQUENT  OVERLAY  BY  K12PCH.BN TO DEFINE THE LOCAL
  1056. /                HEADER MESSAGE.    THIS  PARAMETER  SHOULD  NOT BE SET
  1057. /                UNLESS ONE OF  THESE  METHODS IS USED, ELSE THE HEADER
  1058. /                MESSAGE  WILL BE UNDEFINED.    (NOTE:    IF  K12PCH.BN
  1059. /                GENERATES  A HEADER MESSAGE, THEN  THIS  PARAMETER  IS
  1060. /                UNIMPORTANT,  AS  K12PCH.BN  OVERLAYS  THE  BINARY  OF
  1061. /                K12MIT.)
  1062. /    SETTING GENMSG=    1    CAUSES A HEADER MESSAGE TO BE GENERATED.  THE CONTENTS
  1063. /                OF  THE  MESSAGE  ARE CREATED BY SETTING LEDERLE=1  OR
  1064. /                UMSG=1.   IF EITHER IS ZERO, A DEFAULT (NULL)  MESSAGE
  1065. /                WILL BE GENERATED.
  1066.  
  1067. /    SETTING ICLOSE=    1    ENSURES  A  <^Z>  AT  <EOF>  OF  ASCII  INPUT FILES BY
  1068. /                DEFAULT.
  1069. /    SETTING ICLOSE=    0    CLOSES ASCII INPUT FILES AS RECEIVED BY DEFAULT.
  1070.  
  1071. /    SETTING INIECHO=0    CAUSES A  FULL-DUPLEX CONNECT MODE STATE WITH NO LOCAL
  1072. /                CHARACTER ECHOING BY DEFAULT.
  1073. /    SETTING INIECHO=1    CAUSES A HALF-DUPLEX  CONNECT  MODE  STATE  WITH LOCAL
  1074. /                ECHO OF ALL CONSOLE CHARACTERS BY DEFAULT.
  1075.  
  1076. /    SETTING LOWER=    0    ALLOWS LOWER-CASE CONSOLE OUTPUT BY DEFAULT.
  1077. /    SETTING LOWER=    -40    FOLDS  LOWER-CASE  CONSOLE  OUTPUT  TO  UPPER-CASE  BY
  1078. /                DEFAULT.
  1079.  
  1080. /    SETTING OCLOSE=    0    PREVENTS DEFAULT SENDING OF <^Z>  AT  <EOF>  OF  ASCII
  1081. /                FILES.
  1082. /    SETTING OCLOSE= 1    CAUSES  <^Z> TO BE SENT AT <EOF>  OF  ASCII  FILES  BY
  1083. /                DEFAULT.
  1084.  
  1085. /    SETTING PORT=    0    CAUSES THE DP-278 PORT 0 TO BE USED  IF  KERMIT-12  IS
  1086. /                RUN ON A DECMATE 1 (ASSUMING SPRINT=0).
  1087. /    SETTING PORT=    1    CAUSES  THE DP-278 PORT 1 TO BE USED IF  KERMIT-12  IS
  1088. /                RUN ON A DECMATE 1 (ASSUMING SPRINT=0).
  1089.  
  1090. /    SETTING RETCNT=    NNNN    SETS THE PACKET RETRY COUNT TO NNNN BY DEFAULT.
  1091. /    SETTING UMSG=    0    PREVENTS THE  LOCAL  USER  HEADER  MESSAGE  FROM BEING
  1092. /                GENERATED.
  1093. /    SETTING UMSG=    1    CAUSES THE LOCAL  USER HEADER MESSAGE TO BE GENERATED.
  1094. /                THE PARAMETER GENMSG=1 IS  REQUIRED  TO  BE  SET.  THE
  1095. /                SOURCE MUST BE MODIFIED LOCALLY  TO CHANGE THE MESSAGE
  1096. /                TEXT FROM "INSERT LOCAL USER MESSAGE  HERE!,"  AS THIS
  1097. /                IS THE DEFAULT CONTENTS.
  1098. /    KERMIT-12 FOR THE FAMILY OF 12-BIT DEC MACHINES.
  1099.  
  1100. /    BRIEF USAGE DESCRIPTION.
  1101.  
  1102. /    KERMIT-12 IS AN IMPLEMENTATION OF THE KERMIT PROTOCOL FOR THE FAMILY OF 12-BIT
  1103. /    DEC (AND COMPATIBLE) MACHINES GENERALLY KNOWN AS PDP-8 OR DECMATE.
  1104.  
  1105. /    AS OF THE CURRENT IMPLEMENTATION, THE FOLLOWING COMMANDS ARE EFFECTIVE:
  1106.  
  1107. /    1.    CONNECT (TO REMOTE SYSTEM AS TERMINAL).
  1108.  
  1109. /    2.    SEND FILESPEC (TO REMOTE RECEIVER OR SERVER).
  1110.  
  1111. /    3.    RECEIVE FILESPEC (FROM REMOTE SENDER).
  1112.  
  1113. /    4.    GET FILESPEC (FROM REMOTE SERVER).
  1114.  
  1115. /    5.    FINISH (SERVING).
  1116.  
  1117. /    6.    SETUP (ON DECMATE II/III/III-PLUS ONLY). **** NOT IMPLEMENTED ****
  1118.  
  1119. /    7.    EXIT (TO OPERATING SYSTEM).
  1120.  
  1121. /    8.    HELP (DISPLAYS HELP MESSAGE).
  1122.  
  1123. /    FILESPEC  MAY  BE  ANY LOCAL (OS/8) FILE-STRUCTURED DEVICE:FILENAME.EXTENSION,
  1124. /    WHERE THE  FILENAME  AND  EXTENSION WILL BE TRUNCATED TO 6 ALPHANUMERICS AND 2
  1125. /    ALPHANUMERICS RESPECTIVELY, AS  NECESSARY (THIS IS REFERRED TO AS 6.2 FILENAME
  1126. /    FORMAT).  THE DEVICE:    FIELD  IS  OPTIONAL;   ALL COMMANDS USING THE DEVICE:
  1127. /    FIELD FOR LOCAL DEVICE SPECIFICATION  WILL  USE  THIS  DEVICE AS THE SOURCE OR
  1128. /    DESTINATION AS NECESSARY FOR THE LOCAL  FILES.    IF  THE  DEVICE:    FIELD IS
  1129. /    OMITTED, THE DEFAULT DEVICE DSK:  WILL BE USED.  THE ACTUAL DEVICE USED MAY BE
  1130. /    SELECTED BEFORE INVOKING KERMIT-12 BY USING THE OS/8 ASSIGN COMMAND:
  1131.  
  1132. /    .ASSIGN DEV DSK
  1133.  
  1134. /    WHERE DEV IS ANY AVAILABLE FILE-STRUCTURED DEVICE.
  1135.  
  1136. /    KERMIT-12 USES AN UNUSUAL SCHEME FOR ITS PROMPT:    THE  ACTUAL DEFAULT PROMPT
  1137. /    TEXT  IS  PARTIALLY  TAKEN  FROM  THE  ACTUAL MACHINE KERMIT-12  IS  CURRENTLY
  1138. /    EXECUTING  ON.    FOR  EXAMPLE, IF KERMIT-12 HAS DETERMINED THE  CPU  TYPE  AS
  1139. /    PDP-8/E, THE PROMPT WILL BE:
  1140.  
  1141. /    KERMIT-8/E>
  1142.  
  1143. /    THIS  ALLOWS KERMIT-12 USERS (WITH DIFFERENT CPU-TYPE MACHINES) TO DISTINGUISH
  1144. /    MESSAGES ORIGINATING  FROM  THE  RESPECTIVE  SYSTEMS.    FUTURE  VERSIONS WILL
  1145. /    SUPPORT USER PROMPT STRINGS TO ALLOW MORE DISTINCTIVE SYSTEM MESSAGES.
  1146.  
  1147. /    THE HELP OR CONNECT COMMANDS MAY BE USED TO DETERMINE THE CURRENT CONNECT MODE
  1148. /    ESCAPE CHARACTER.
  1149. /    COMMAND RESTRICTIONS.
  1150.  
  1151. /    THE  SEND  COMMAND  ALLOWS   DEVICE:FILENAME.EXTENSION  (6.2)  WITH  WILD-CARD
  1152. /    SUBSTITUTION.  A * MAY  BE  GIVEN  FOR  AN  ENTIRE  FIELD  (EITHER FILENAME OR
  1153. /    EXTENSION OR BOTH) ONLY.  A  ?    WILL  MATCH  ANY SINGLE CHARACTER WHICH MUST
  1154. /    EXIST IN THE ACTUAL FILENAME OR EXTENSION,  UNLESS  RIGHT-MOST  IN  THE FIELD.
  1155. /    ALL  MATCHING FILES WILL BE SENT.  NO  OUTBOUND  FILENAME  (AS-NAME)  FACILITY
  1156. /    EXISTS AT THIS TIME.
  1157.  
  1158. /    THE  RECEIVE  COMMAND  ALLOWS  OPTIONAL  DEVICE:   ONLY.   *THE  FILENAME  AND
  1159. /    EXTENSION  ARE  NOT  ALLOWED*.  NAMES OF RECEIVED FILES WILL  BE  MODIFIED  IF
  1160. /    NECESSARY  TO  CONFORM  TO  THE  6.2  FORMAT.   *IMPLEMENTATION RESTRICTION* :
  1161. /    CERTAIN REMOTE  FILENAMES  CONTAINING  NON-ALPHANUMERIC  CHARACTERS  MAY CAUSE
  1162. /    KERMIT-12 TO HASTILY ABORT THE TRANSMISSION AND RETURN TO COMMAND LEVEL.
  1163.  
  1164. /    THE GET COMMAND  ALLOWS  OPTIONAL  DEVICE:    TO  DETERMINE DESTINATION OF THE
  1165. /    INCOMING FILES.  THE  OUTBOUND  FILESPEC  MUST  CONFORM  TO  LOCAL CONVENTIONS
  1166. /    (FILENAME AND EXTENSION ARE NOT  LIMITED  TO  6.2  FORMAT;  THE DEVICE:  FIELD
  1167. /    WILL NOT BE SENT TO THE  REMOTE  KERMIT  UNLESS  IT  IS  ILLEGAL  WITHIN  OS/8
  1168. /    SPECIFICATIONS, SUCH AS TOO MANY DEVICE LETTERS.    IN  THIS CASE, THE DEFAULT
  1169. /    DEVICE DSK:  APPLIES, AND THE ENTIRE "DEVICE"  FIELD  IS  SENT  ALONG WITH ANY
  1170. /    FILENAME  AND EXTENSION).  CERTAIN REMOTE SYSTEMS ARE INCOMPATIBLE  WITH  THIS
  1171. /    IMPLEMENTATION,  AS  IMBEDDED  SPACES  OR  NON-ALPHANUMERIC CHARACTERS ARE NOT
  1172. /    ALLOWED, EVEN  THOUGH  THEY  MAY  BE REQUIRED ON THE REMOTE SYSTEM.  WILD-CARD
  1173. /    CHARACTERS ARE ALLOWED, BUT ONLY AS SPECIFIED IN THE SEND COMMAND ABOVE.
  1174.  
  1175. /    <^X>  OR  <^Z>  CAN BE USED TO ABORT KERMIT TRANSMISSIONS (EVENTUALLY) BUT  IS
  1176. /    NORMALLY  A  SLOW  PROCESS,  SINCE  THE CHECKING IS DONE BY A SOFTWARE TIMEOUT
  1177. /    SCHEME.   AT  THE  PRESENT  TIME,  THERE  IS  NO DISTINCTION BETWEEN THESE THO
  1178. /    CHARACTERS, SO IT  IS NOT POSSIBLE TO ABORT A SINGLE FILE; THE ENTIRE BATCH OF
  1179. /    FILES INVOLVED IN THE TRANSFER IS ABORTED.
  1180.  
  1181. /    DECMATE II/III/III-PLUS CONSIDERATIONS:
  1182.  
  1183. /    FUNCTION KEYS SEND <ESC>  SEQUENCES SPECIFIED BY SLUSHWARE/FIRMWARE.  ALL SOFT
  1184. /    FUNCTION KEYS ARE THEREFORE INEFFECTIVE  (EXCEPT  FOR HOLD SCREEN WHICH ALWAYS
  1185. /    WORKS).
  1186.  
  1187. /    CONNECT MODE RUNS IN 8-BIT MODE.
  1188.  
  1189. /    THE COMPOSE KEY IS ENABLED FOR USE WITH A LOADED COMPOSE TABLE.
  1190.  
  1191. /    ANY VALID DECMATE II/III/III-PLUS CHARACTER SET  IS  ALLOWED  WHILE IN CONNECT
  1192. /    MODE  (MCS  TCS  LINE,  ETC.).    ALL   <ESC>  SEQUENCES  ARE  PASSED  TO  THE
  1193. /    SLUSHWARE/FIRMWARE UNMODIFIED.
  1194.  
  1195. /    KEYBOARD UPPER-CASE LOCK WILL ALWAYS BE AUTOMATICALLY APPLIED UPON RETURN FROM
  1196. /    CONNECT MODE.
  1197. /    DEFINITIONS.                            /017 CJL
  1198.  
  1199.     *200                    /FOR DEFINITIONS    /047 CJL
  1200.  
  1201. /    REMOTE LINE PARAMETERS; SET ONLY ONE AS NECESSARY.        /046 CJL
  1202.  
  1203.     IFNDEF    DEV30    <DEV30=    0>        /USE DEVICE 30/31 VALUES
  1204.     IFNDEF    DEV40    <DEV40=    0>        /USE DEVICE 40/41 VALUES
  1205.     IFNDEF    LEDERLE    <LEDERLE=0>        /USE LEDERLE LABS VALUES
  1206.     IFNDEF    ORIGNAL    <ORIGNAL=0>        /USE ORIGINAL VALUES
  1207.     IFNDEF    SPRINT    <SPRINT=0>        /USE DEVICE 32/33 VALUES
  1208.     IFNDEF    USER    <USER=    0>        /USE USER-DEFINED VALUES
  1209.  
  1210.     REMOTE=    DEV30+DEV40+LEDERLE+ORIGNAL    /SET REMOTE LINE IOT CODE
  1211.     REMOTE=    REMOTE+SPRINT+USER        /SET REMOTE LINE IOT CODE
  1212.  
  1213.     IFZERO    REMOTE    <DEV40=    1>        /DEFAULT TO DEVICE 40/41 VERSION
  1214.  
  1215. /    DEV30 PARAMETERS.
  1216.  
  1217.     IFNZRO    DEV30            <
  1218.  
  1219.     IFNDEF    REC    <REC=    30>        /DEVICE 30 INPUT
  1220.     IFNDEF    SEN    <SEN=    31>        /DEVICE 31 OUTPUT
  1221.  
  1222.                     >
  1223.  
  1224. /    DEV40 PARAMETERS (DEFAULT).
  1225.  
  1226.     IFNZRO    DEV40            <
  1227.  
  1228.     IFNDEF    REC    <REC=    40>        /DEVICE 40 INPUT
  1229.     IFNDEF    SEN    <SEN=    41>        /DEVICE 41 OUTPUT
  1230.  
  1231.                     >
  1232.  
  1233. /    LEDERLE PARAMETERS.                        /038 CJL
  1234.  
  1235.     IFNZRO    LEDERLE            <
  1236.  
  1237.     IFNDEF    REC    <REC=    43>        /DEVICE 43 INPUT
  1238.     IFNDEF    SEN    <SEN=    44>        /DEVICE 44 OUTPUT
  1239.     IFNDEF    GENMSG    <GENMSG=1>        /GENERATE LOCAL HEADER MESSAGE
  1240.     IFNDEF    UMSG    <UMSG=    0>        /DON'T GENERATE USER MESSAGE
  1241.  
  1242.                     >
  1243.  
  1244. /    ORIGNAL PARAMETERS.
  1245.  
  1246.     IFNZRO    ORIGNAL            <
  1247.  
  1248.     IFNDEF    REC    <REC=    33>        /DEVICE 33 INPUT
  1249.     IFNDEF    SEN    <SEN=    34>        /DEVICE 34 OUTPUT
  1250.  
  1251.                     >
  1252. /    SPRINT PARAMETERS.                        /046 CJL
  1253.  
  1254.     IFNZRO    SPRINT            <
  1255.  
  1256.     IFNDEF    REC    <REC=    32>        /DEVICE 32 INPUT
  1257.     IFNDEF    SEN    <SEN=    33>        /DEVICE 33 OUTPUT
  1258.  
  1259.                     >
  1260.  
  1261. /    USER PARAMETERS.
  1262.  
  1263.     IFNZRO    USER            <
  1264.  
  1265.     IFNDEF    XX    <XX=    40>        /DEFAULT TO DEVICE 40
  1266.     IFNDEF    XY    <XY=    41>        /DEFAULT TO DEVICE 41
  1267.     IFNDEF    REC    <REC=    XX>        /DEVICE XX INPUT
  1268.     IFNDEF    SEN    <SEN=    XY>        /DEVICE XY OUTPUT
  1269.     IFNDEF    GENMSG    <GENMSG=1>        /GENERATE LOCAL HEADER MESSAGE
  1270.     IFNDEF    UMSG    <UMSG=    1>        /GENERATE USER MESSAGE
  1271.  
  1272.                     >
  1273.  
  1274. /    REMOTE LINE IOT DEFINITIONS.
  1275.  
  1276. /    RECEIVE DEFINITIONS.
  1277.  
  1278.     RKRBIOT=REC^10+6006            /READ REMOTE, CLEAR FLAG
  1279.     RKSFIOT=REC^10+6001            /SKIP ON REMOTE INPUT FLAG
  1280.  
  1281. /    TRANSMIT DEFINITIONS.
  1282.  
  1283.     RSBIOT=    SEN^10+6003            /SET BAUD RATE FROM AC[8-11]
  1284.     RTLSIOT=SEN^10+6006            /TRANSMIT CHARACTER, CLEAR FLAG
  1285.     RTSFIOT=SEN^10+6001            /SKIP ON TRANSMIT FLAG
  1286.  
  1287. /    CONSOLE TTY: DEFINITIONS.                    /017 CJL
  1288.  
  1289. /    KEYBOARD DEFINITIONS.                        /017 CJL
  1290.  
  1291.     IFNDEF    KEY    <KEY=    03>    /KEYBOARD DEVICE CODE
  1292.  
  1293.     KCCIOT=    KEY^10+6002        /CLEAR CONSOLE KEYBOARD FLAG, AC
  1294.     KRBIOT=    KEY^10+6006        /READ CONSOLE KEYBOARD BUFFER, CLEAR FLAG
  1295.     KRSIOT=    KEY^10+6004        /READ CONSOLE KEYBOARD BUFFER STATIC
  1296.     KSFIOT=    KEY^10+6001        /SKIP ON CONSOLE KEYBOARD FLAG
  1297.  
  1298. /    TELEPRINTER DEFINITIONS.                    /017 CJL
  1299.  
  1300.     IFNDEF    TTY    <TTY=    04>    /TELEPRINTER DEVICE CODE
  1301.  
  1302.     TLSIOT=    TTY^10+6006        /PRINT CHARACTER, CLEAR FLAG
  1303.     TSFIOT=    TTY^10+6001        /SKIP ON TELEPRINTER FLAG
  1304. /    DEFAULT ESCAPE CHARACTER DEFINITION.                /025 CJL
  1305.  
  1306.     IFNDEF    ESCAPE    <ESCAPE="]&37>    /DEFAULT IS CONTROL-]
  1307.  
  1308. /    DEFAULT LOWER-CASE ENABLE DEFINITION.                /030 CJL
  1309.  
  1310.     IFNDEF    LOWER    <LOWER=    0/-40>    /LOWER-CASE IS ALLOWED AS IS
  1311.                     /CHANGE TO -40 IF LOWER-CASE
  1312.                     /SHOULD BE FOLDED TO UPPER-CASE
  1313.  
  1314. /    DEFAULT RETRY COUNT DEFINITION.                    /031 CJL
  1315.  
  1316.     IFNDEF    RETCNT    <RETCNT=5>    /DEFAULT IS FIVE RETRIES
  1317.  
  1318. /    DEFAULT FILE MODE DEFINITION.                    /031 CJL
  1319.  
  1320.     IFNDEF    FMODE    <FMODE=    0177>    /DEFAULT IS ASCII FILE MODE
  1321.                     /4377 IS BINARY FILE MODE
  1322.  
  1323. /    DEFAULT FLOW-CONTROL MODE DEFINITION.                /031 CJL
  1324.  
  1325.     IFNDEF    FLOW    <FLOW=    1>    /DEFAULT IS FLOW-CONTROL ENABLED
  1326.  
  1327. /    DEFAULT ASCII INPUT FILE <^Z> DISPOSITION.            /031 CJL
  1328.  
  1329.     IFNDEF    ICLOSE    <ICLOSE=1>    /ENSURE <^Z> AT ASCII <EOF>
  1330.  
  1331. /    DEFAULT ASCII OUTPUT FILE <^Z> DISPOSITION.            /031 CJL
  1332.  
  1333.     IFNDEF    OCLOSE    <OCLOSE=0>    /<^Z> NOT SENT AT ASCII <EOF>
  1334.  
  1335. /    DEFAULT LOCAL MESSAGE GENERATION DEFINITIONS.            /038 CJL
  1336.  
  1337.     IFNDEF    GENMSG    <GENMSG=1>    /DEFAULT IS TO GENERATE A MESSAGE
  1338.     IFNDEF    UMSG    <UMSG=    0>    /DEFAULT IS NO DUMMY USER MESSAGE
  1339.     IFNDEF    LEDERLE    <LEDERLE=0>    /DEFAULT IS NO LEDERLE MESSAGE
  1340.  
  1341. /    THE NULL MESSAGE WILL BE GENERATED BY DEFAULT.
  1342.  
  1343. /    ECHO DEFINITION.                        /039 CJL
  1344.  
  1345.     IFNDEF    INIECHO    <INIECHO=0>    /DEFAULT IS NO LOCAL ECHO
  1346.  
  1347. /    DEFAULT DECMATE I PORT DEFINITION.                /050 CJL
  1348.  
  1349.     IFNDEF    PORT    <PORT=    0>    /DEFAULT IS PORT ZERO 
  1350.  
  1351. /    DEFAULT BAUD RATE DEFINITION.                    /050 CJL
  1352.  
  1353.     IFNDEF    BRATE    <BRATE=    7>    /DEFAULT IS 1200 BAUD
  1354. /    STATE DEFINITIONS.
  1355.  
  1356.     STDAT=    "D&137            /DATA
  1357.     STACK=    "Y&137            /ACK
  1358.     STNAK=    "N&137            /NAK
  1359.     STSIN=    "S&137            /SEND-INIT
  1360.     STBRK=    "B&137            /BREAK LINK
  1361.     STFIL=    "F&137            /FILENAME HEADER
  1362.     STEOF=    "Z&137            /END OF FILE OR REPLY
  1363.     STERR=    "E&137            /ERROR PACKET
  1364.     STATT=    "A&137            /FILE ATTRIBUTES
  1365.     STRIN=    "R&137            /RECEIVE-INIT
  1366.     STEOT=    "B&137            /BREAK TRANSMISSION
  1367.     STGEN=    "G&137            /KERMIT GENERIC COMMAND
  1368.  
  1369. /    DEFAULT INIT PARAMETERS.
  1370.  
  1371.     DEFCK=    "1&177            /DEFAULT 1 CHARACTER CHECKSUM    /014 CJL
  1372.     DEFEOL=    15+40            /CR IS DEFAULT <EOL>
  1373.     DEFQCTL= "#&177            /"#" IS DEFAULT QCTL
  1374.  
  1375. /    BUFFER DEFINITIONS.                        /014 CJL
  1376.  
  1377.     DECIMAL                /MAKE IT EASIER            /014 CJL
  1378.  
  1379.     DEFMAXL=94            /DEFAULT MAXIMUM PACKET SIZE
  1380.  
  1381.     LINSIZ=    32            /KEYBOARD LINE BUFFER SIZE
  1382.  
  1383.     OCTAL                /BACK TO NORMAL            /014 CJL
  1384.  
  1385.     BUFSIZE=200            /128 CHARACTER RING BUFFERS    /026 CJL
  1386.                     /FOR NO-INTERRUPT CONNECT MODE
  1387. /    CONTROL CHARACTER DEFINITIONS.                    /023 CJL
  1388.  
  1389.     CNTRLA=    "A&37            /<^A> DEFAULT MARK CHARACTER    /023 CJL
  1390.     CNTRLB=    "B&37            /<^B>                /046 CJL
  1391.     CNTRLC=    "C&37            /<^C> PROGRAM EXIT CHARACTER    /023 CJL
  1392.     CNTRLD=    "D&37            /<^D>                /046 CJL
  1393.     CNTRLE=    "E&37            /<^E>                /046 CJL
  1394.     CNTRLF=    "F&37            /<^F>                /046 CJL
  1395.     CNTRLG=    "G&37            /<^G> BELL CHARACTER        /023 CJL
  1396.     CNTRLH=    "H&37            /<^H> BACKSPACE CHARACTER    /023 CJL
  1397.     CNTRLI=    "I&37            /<^I> HORIZONTAL TAB CHARACTER    /043 CJL
  1398.     CNTRLJ=    "J&37            /<^J> LINEFEED CHARACTER    /023 CJL
  1399.     CNTRLK=    "K&37            /<^K> VERTICAL TAB CHARACTER    /046 CJL
  1400.     CNTRLL=    "L&37            /<^L> FORM FEED CHARACTER    /046 CJL
  1401.     CNTRLM=    "M&37            /<^M> CARRIAGE RETURN CHARACTER    /023 CJL
  1402.     CNTRLN=    "N&37            /<^N>                /046 CJL
  1403.     CNTRLO=    "O&37            /<^O> ECHO FLIP CHARACTER    /023 CJL
  1404.     CNTRLP=    "P&37            /<^P> PROGRAM RESTART CHARACTER    /023 CJL
  1405.     CNTRLQ=    "Q&37            /<^Q> OUTPUT RESUME CHARACTER    /023 CJL
  1406.     CNTRLR=    "R&37            /<^R>                /046 CJL
  1407.     CNTRLS=    "S&37            /<^S> OUTPUT WAIT CHARACTER    /023 CJL
  1408.     CNTRLT=    "T&37            /<^T>                /046 CJL
  1409.     CNTRLU=    "U&37            /<^U>                /046 CJL
  1410.     CNTRLV=    "V&37            /<^V>                /046 CJL
  1411.     CNTRLW=    "W&37            /<^W>                /046 CJL
  1412.     CNTRLX=    "X&37            /<^X> FILE ABORT CHARACTER    /044 CJL
  1413.     CNTRLY=    "Y&37            /<^Y>                /046 CJL
  1414.     CNTRLZ= "Z&37            /<^Z> ABORT AND <EOF> CHARACTER /044 CJL
  1415.     DELETE=    177            /<DEL> DELETE OR <RO> CHARACTER    /034 CJL
  1416.     LOWERC=    "C&177+40        /LOWER-CASE C (CLOSE CHARACTER)    /025 CJL
  1417.     UPPERC=    "C&177            /UPPER-CASE C (CLOSE CHARACTER)    /025 CJL
  1418.  
  1419. /    I/O AND FIELD DEFINITIONS.                    /019 CJL
  1420.  
  1421.     BUFFLD=    10            /I/O BUFFER FIELD        /019 CJL
  1422.     DIRFLD=    10            /DIRECTORY LOOKUP BUFFER FIELD    /028 CJL
  1423.     DMIFLD=    10            /DECMATE ONCE-ONLY CODE FIELD    /046 CJL
  1424.     MSGFLD=    10            /TEXT MESSAGE FIELD        /023 CJL
  1425.     PAGCNT=    2            /I/O BUFFER SIZE IN PAGES    /019 CJL
  1426.     PRGFLD=    00            /PROGRAM FIELD            /019 CJL
  1427.     USRFLD=    10            /USR FIELD            /020 CJL
  1428.  
  1429. /    OS/8 MONITOR DEFINITIONS.                    /014 CJL
  1430.  
  1431.     SBOOT=    7600            /MONITOR EXIT LOCATION IS 07600    /014 CJL
  1432.     USR=    7700            /NON-LOCKED USR ENTRY POINT    /035 CJL
  1433. /    USER SERVICE ROUTINE AND HANDLER DEFINITIONS.            /020 CJL
  1434.  
  1435.     CLOSE=    4            /CLOSE TENTATIVE OUTPUT FILE    /020 CJL
  1436.     ENTER=    3            /ENTER TENTATIVE OUTPUT FILE    /020 CJL
  1437.     FETCH=    1            /FETCH HANDLER            /020 CJL
  1438.     INQUIRE=12            /INQUIRE ABOUT HANDLER        /020 CJL
  1439.     LOOKUP=    2            /LOOKUP FILE            /020 CJL
  1440.     RESET=    13            /RESET DEVICE CONTROL WORD TABLE/037 CJL
  1441.     USRIN=    10            /LOCK USR IN CORE        /020 CJL
  1442.     WRITE=    4000            /I/O CALL WRITE BIT        /020 CJL
  1443.  
  1444. /    INSTRUCTION DEFINITIONS.
  1445.  
  1446.     CLCL=    6136            /CLEAR CLOCK FLAG (8/A, ETC.)    /046 CJL
  1447.     CLSK=    6131            /SKIP ON, CLEAR CLOCK FLAG    /046 CJL
  1448.     CLSK8A=    6137            /SKIP ON CLOCK FLAG (8/A, ETC.)    /046 CJL
  1449.     COM=    0017            /COMPLEMENT AC
  1450.     DCAC=    DCA    .        /CURRENT PAGE DCA INSTRUCTION    /047 CJL
  1451.     IAAC=    6171            /"A" REGISTER TO AC
  1452.     IACA=    6167            /AC TO "A" REGISTER
  1453.     ISZC=    ISZ    .        /CURRENT PAGE ISZ INSTRUCTION    /050 CJL
  1454.     JMPC=    JMP    .        /CURRENT PAGE JMP INSTRUCTION    /047 CJL
  1455.     JMPIC=    JMP I    .        /CURRENT PAGE JMP I INSTRUCTION    /047 CJL
  1456.     JMSC=    JMS    .        /CURRENT PAGE JMS INSTRUCTION    /047 CJL
  1457.     JMSIC=    JMS I    .        /CURRENT PAGE JMS I INSTRUCTION    /047 CJL
  1458.     LINC=    6141            /GOTO LINC MODE
  1459.     PDP=    0002            /GOTO PDP-8 MODE
  1460.     PRQ3=    6236            /TYPE THREE PANEL REQUEST    /046 CJL
  1461.     TADC=    TAD    .        /CURRENT PAGE TAD INSTRUCTION    /047 CJL
  1462.     R3L=    7014            /ROTATE AC (NOT LINK) LEFT 3    /046 CJL
  1463.  
  1464. /    NUMERIC LOAD DEFINITIONS.                    /014 CJL
  1465.  
  1466.     NL0000=    CLA            /LOAD AC WITH 0000        /046 CJL
  1467.     NL0001=    CLA IAC            /LOAD AC WITH 0001        /014 CJL
  1468.     NL0002=    CLA CLL CML RTL        /LOAD AC WITH 0002        /014 CJL
  1469.     NL0003=    CLA STL IAC RAL        /LOAD AC WITH 0003 (8/I ON UP)    /046 CJL
  1470.     NL0004=    CLA CLL IAC RTL        /LOAD AC WITH 0004 (8/I ON UP)    /046 CJL
  1471.     NL0006=    CLA STL IAC RTL        /LOAD AC WITH 0006 (8/I ON UP)    /046 CJL
  1472.     NL0010=    CLA IAC RAL RAR        /LOAD AC WITH 0010 (6120)    /024 CJL
  1473.     NL0100=    CLA IAC BSW        /LOAD AC WITH 0100 (8/E ON UP)    /024 CJL
  1474.     NL3776=    CLA CLL CMA RAR RAL    /LOAD AC WITH 3776 (8/I OR 8/L)    /024 CJL
  1475.     NL3777=    CLA CLL CMA RAR        /LOAD AC WITH 3777        /046 CJL
  1476.     NL4000=    CLA CLL CML RAR        /LOAD AC WITH 4000        /014 CJL
  1477.     NL5777=    CLA CLL CMA RTR        /LOAD AC WITH 5777        /046 CJL
  1478.     NL6000=    CLA STL IAC RTR        /LOAD AC WITH 6000 (8/I ON UP)    /046 CJL
  1479.     NL7775=    CLA CLL CMA RTL        /LOAD AC WITH 7775        /014 CJL
  1480.     NL7776=    CLA CLL CMA RAL        /LOAD AC WITH 7776        /014 CJL
  1481.     NL7777=    CLA CMA            /LOAD AC WITH 7777        /014 CJL
  1482. /    DECMATE I COMMUNICATIONS PORT DEFINITIONS.            /050 CJL
  1483.  
  1484.     IPORT0=    30        /COMMUNICATIONS PORT 0 INPUT DEVICE CODE
  1485.  
  1486.     RKFL0=    IPORT0^10+6000    /SET COMMUNICATIONS PORT 0 INPUT FLAG
  1487.     RKSF0=    IPORT0^10+6001    /SKIP ON, CLEAR COMMUNICATIONS PORT 0 INPUT FLAG
  1488.     RKCC0=    IPORT0^10+6002    /CLEAR AC
  1489.     RKIE0=    IPORT0^10+6005    /PORT 0 INPUT INTERRUPT ENABLE PER AC[11]
  1490.     RKRB0=    IPORT0^10+6006    /READ COMMUNICATIONS PORT 0 INTO AC
  1491.  
  1492.     OPORT0=    31        /COMMUNICATIONS PORT 0 OUTPUT DEVICE CODE
  1493.  
  1494.     RTFL0=    OPORT0^10+6000    /SET COMMUNICATIONS PORT 0 OUTPUT FLAG
  1495.     RTSF0=    OPORT0^10+6001    /SKIP ON, CLEAR COMMUNICATIONS PORT 0 OUTPUT FLAG
  1496.     RTCF0=    OPORT0^10+6002    /NOP
  1497.     RTIE0=    OPORT0^10+6005    /PORT 0 OUTPUT INTERRUPT ENABLE PER AC[11]
  1498.     RTLS0=    OPORT0^10+6006    /WRITE COMMUNICATIONS PORT 0 FROM AC
  1499.  
  1500.     IPORT1=    34        /COMMUNICATIONS PORT 1 INPUT DEVICE CODE
  1501.  
  1502.     RKFL1=    IPORT1^10+6000    /SET COMMUNICATIONS PORT 1 INPUT FLAG
  1503.     RKSF1=    IPORT1^10+6001    /SKIP ON, CLEAR COMMUNICATIONS PORT 1 INPUT FLAG
  1504.     RKCC1=    IPORT1^10+6002    /CLEAR AC
  1505.     RKIE1=    IPORT1^10+6005    /PORT 1 INPUT INTERRUPT ENABLE PER AC[11]
  1506.     RKRB1=    IPORT1^10+6006    /READ COMMUNICATIONS PORT 1 INTO AC
  1507.  
  1508.     OPORT1=    35        /COMMUNICATIONS PORT 1 OUTPUT DEVICE CODE
  1509.  
  1510.     RTFL1=    OPORT1^10+6000    /SET COMMUNICATIONS PORT 1 OUTPUT FLAG
  1511.     RTSF1=    OPORT1^10+6001    /SKIP ON, CLEAR COMMUNICATIONS PORT 1 OUTPUT FLAG
  1512.     RTCF1=    OPORT1^10+6002    /NOP
  1513.     RTIE1=    OPORT1^10+6005    /PORT 1 OUTPUT INTERRUPT ENABLE PER AC[11]
  1514.     RTLS1=    OPORT1^10+6006    /WRITE COMMUNICATIONS PORT 1 FROM AC
  1515.  
  1516.     PCON=    36        /PORT STATUS AND CONTROL DEVICE CODE
  1517.  
  1518.     SMFL=    PCON^10+6000    /SET MODEM CHANGE FLAG
  1519.     MFSK=    PCON^10+6001    /SKIP ON, CLEAR MODEM CHANGE FLAG
  1520.     WCON0=    PCON^10+6002    /WRITE COMMUNICATIONS PORT 0 CONTROL REGISTER
  1521.     PSR=    PCON^10+6003    /READ PORT STATUS REGISTER
  1522.     PMR=    PCON^10+6004    /READ PORT MODEM REGISTER
  1523.     MFIE=    PCON^10+6005    /LOAD MODEM CHANGE INTERRUPT ENABLE PER AC[11]
  1524.     WCON1=    PCON^10+6006    /WRITE COMMUNICATIONS PORT 1 CONTROL REGISTER
  1525.     RACD=    PCON^10+6007    /RESET ACTIVE COMMUNICATIONS PORT PER AC[0]
  1526. /    DECMATE II, ETC. COMMUNICATIONS PORT DEFINITIONS.        /046 CJL
  1527.  
  1528.     PORTIN=    30        /COMMUNICATIONS PORT INPUT DEVICE CODE
  1529.  
  1530.     IFL=    PORTIN^10+6000    /SET COMMUNICATIONS PORT INPUT/OUTPUT FLAG
  1531.     ISF=    PORTIN^10+6001    /SKIP ON, CLEAR COMMUNICATIONS PORT INPUT/OUTPUT FLAG
  1532.     ICF=    PORTIN^10+6002    /NOP (CLEAR THE AC?)
  1533.     INOP1=    PORTIN^10+6003    /(NOP?)
  1534.     IRS=    PORTIN^10+6004    /READ COMMUNICATIONS PORT RECEIVE BUFFER
  1535.     IIE=    PORTIN^10+6005    /COMMUNICATIONS PORT I/O INTERRUPT ENABLE PER AC[11]
  1536.     IRB=    PORTIN^10+6006    /READ COMMUNICATIONS PORT RECEIVE BUFFER
  1537.     INOP2=    PORTIN^10+6007    /(NOP?)
  1538.  
  1539.     PORTOUT=31        /COMMUNICATIONS PORT OUTPUT DEVICE CODE
  1540.  
  1541.     DUMBFL=    PORTOUT^10+6000    /SET COMMUNICATIONS PORT DUMMY FLAG
  1542.     DUMBSF=    PORTOUT^10+6001    /SKIP ON, CLEAR COMMUNICATIONS PORT DUMMY FLAG
  1543.     DUMBCF=    PORTOUT^10+6002    /NOP (CLEAR THE AC?)
  1544.      ONOP1=    PORTOUT^10+6003    /(NOP?)
  1545.     OPC=    PORTOUT^10+6004    /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
  1546.     DUMBIE=    PORTOUT^10+6005    /COMMUNICATIONS PORT DUMMY INTERRUPT ENABLE PER AC[11]
  1547.     OLS=    PORTOUT^10+6006    /LOAD COMMUNICATIONS PORT TRANSMIT BUFFER
  1548.     ONOP2=    PORTOUT^10+6007    /(NOP?)
  1549.  
  1550.     PORTCON=36        /COMMUNICATIONS PORT CONTROL DEVICE CODE
  1551.  
  1552.     MFL=    PORTCON^10+6000    /SET MODEM CHANGE FLAG
  1553.     MSF=    PORTCON^10+6001    /SKIP ON, CLEAR MODEM CHANGE FLAG
  1554.     MLC=    PORTCON^10+6002    /LOAD MODEM CONTROL REGISTER
  1555.     MSB=    PORTCON^10+6003    /LOAD BAUD RATE REGISTER
  1556.     MRS=    PORTCON^10+6004    /READ MODEM STATUS REGISTER
  1557.     MIE=    PORTCON^10+6005    /MODEM CHANGE INTERRUPT ENABLE PER AC[11]
  1558.     MPSCC=    PORTCON^10+6006    /ACCESS MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
  1559.     MPRESET=PORTCON^10+6007 /RESET MULTIPROTOCOL SERIAL COMMUNICATIONS CONTROLLER
  1560. /    MISCELLANEOUS DEFINITIONS.                    /014 CJL
  1561.  
  1562. /    STATIC DATE CALCULATIONS.                    /024 CJL
  1563.  
  1564. /    THESE EQUATIONS CAUSE PRINTABLE  TEXT OF THE DATE PARTICULARS, WHICH ARE GIVEN
  1565. /    IN OS/8 INTERNAL FORMAT.  PROGRAM MAINTAINENCE REQUIRES THE UPDATE OF VERSION,
  1566. /    REVISION, REVDATE, AND REVDGRP.  REVDATE  AND  REVDGRP SHOULD BE OBTAINED FROM
  1567. /    THE SYSTEM WHEN RELEASING A NEW VERSION  AFTER  FIRST  CORRECTLY  INVOKING THE
  1568. /    SYSTEM DATE COMMAND.
  1569.  
  1570. /    VERSION=[ANY NUMBER IN THE RANGE 00-143 (DECIMAL 00-99)]
  1571.  
  1572. /    REVISIO=[ANY SIX-BIT ALPHA (A-Z); DO NOT FORGET &77]
  1573.  
  1574. /    REVDATE=[THE CONTENTS OF 17666 (DATE WORD)]
  1575.  
  1576. /    REVDGRP=[THE CONTENTS OF 07777 (ONLY BITS[3-4] ARE USED)]
  1577.  
  1578.  
  1579.  
  1580.     IFNDEF    REVDATE    <REVDATE=4464>    /REVISION DATE (LOCATION 17666)
  1581.  
  1582.     IFNDEF    REVDGRP    <REVDGRP=0400>    /REVISION 8 YEAR DATE GROUP (LOCATION 07777)
  1583.  
  1584.     IFNDEF    REVISIO    <REVISIO="G&77>    /REVISION OF KERMIT-12
  1585.  
  1586.     IFNDEF    VERSION    <VERSION=12>    /VERSION OF KERMIT-12
  1587.  
  1588.  
  1589.     DAY=    REVDATE&370%10        /REVISION DAY
  1590.  
  1591.     DGROUP=    REVDGRP&600%20        /REVISION DATE GROUP (WHICH 8 YEARS)
  1592.  
  1593.     MONTH=    REVDATE&7400%400    /REVISION MONTH
  1594.  
  1595.     YEAR=    REVDATE&7+DGROUP+106    /REVISION YEAR (SINCE 1900)
  1596.     FIELD    PRGFLD%10    /STARTING FIELD                /038 CJL
  1597.  
  1598.     *0            /START AT THE BEGINNING            /014 CJL
  1599.  
  1600. INTPC,    .-.            /PC FROM INTERRUPT (IF ANY)        /014 CJL
  1601.     JMP I    INTPC        /RETURN WITH INTERRUPTS OFF        /014 CJL
  1602.  
  1603. ABFLAG,    .-.            /FILE ABORT FLAG            /044 CJL
  1604. TABLEJU,.-.            /MATCHING VALUE FOR SRCHTABLE ROUTINE    /025 CJL
  1605.  
  1606.     IFNZRO    .-4    <ERROR    .>                    /014 CJL
  1607. ODT,    ZBLOCK    7-.        /RESERVED FOR OS/8 ODT            /014 CJL
  1608. RATE,    BRATE            /BAUD RATE                /050 CJL
  1609.  
  1610.     *10            /GET TO AUTO-INDEX AREA            /014 CJL
  1611.  
  1612. XR0,    .-.            /AUTO-INDEX ZERO            /014 CJL
  1613. XR1,    .-.            /AUTO-INDEX ONE                /014 CJL
  1614. DIRXR,    PORT            /DIRECTORY LOOKUP DEDICATED AUTO-INDEX    /028 CJL
  1615.                 /INITIALIZED FOR DECMATE I ONCE-ONLY    /050 CJL
  1616.  
  1617. /    THE REMAINING LOCATIONS THROUGH  000017  MUST  BE USED DIRECTLY ONLY, SO AS TO
  1618. /    NOT CAUSE INADVERTANT AUTO-INDEXING.
  1619.  
  1620. /    COLUMN COUNTER FOR CONSOLE ROUTINES (NEVER USED INDIRECTLY).    /043 CJL
  1621.  
  1622. COLUMN,    .-.            /CONSOLE OUTPUT COLUMN COUNTER        /043 CJL
  1623.  
  1624. /    CONSOLE TERMINAL ECHO SWITCH (NEVER USED INDIRECTLY).        /020 CJL
  1625.  
  1626. ECHOSW,    0            /0=ECHO, 4000=DON'T ECHO        /020 CJL
  1627.  
  1628. /    LATEST (NON-CONNECT MODE) CHARACTER (NEVER USED INDIRECTLY).    /043 CJL
  1629.  
  1630. INCHAR,    .-.            /LATEST INPUT CHARACTER FROM CONSOLE    /043 CJL
  1631.  
  1632. /    CURRENT KERMIT MODE (NEVER USED INDIRECTLY).            /025 CJL
  1633.  
  1634. KMODE,    .-.            /CURRENT MODE OF KERMIT            /025 CJL
  1635.  
  1636. /    KERMIT MODE FLAG VALUES.                    /014 CJL
  1637.  
  1638. /    MLINE=    1        /KERMIT IS ON-LINE
  1639.     MSEND=    2        /KERMIT IS IN SEND MODE
  1640.     MREC=    3        /KERMIT IS IN RECEIVE MODE
  1641.  
  1642. /    LATEST CHARACTER SENT TO OUTPUT FILE (NEVER USED INDIRECTLY).    /020 CJL
  1643.  
  1644. LATEST,    .-.            /LATEST CHARACTER SENT TO OUTPUT FILE    /020 CJL
  1645.     *20            /GET PAST AUTO-INDEX AREA
  1646.  
  1647. INFLAG,    .-.            /DECMATE INPUT AVAILABLE FLAG        /046 CJL
  1648. OUTFLAG,.-.            /DECMATE OUTPUT AVAILABLE FLAG        /046 CJL
  1649. TEMP,    0
  1650. RCHAR,    0            /REMOTE LINE CURRENT INPUT CHAR
  1651. SCAN1,    0            /
  1652. SCAN2,    0            /
  1653. KEYDSP,    0            /DISPATCH ADDRESS FOR KEYWORD MATCH
  1654. BININP,    0            /BINARY REGISTER FOR DECIMAL INPUT
  1655. PTABLE,    0            /
  1656. LPTR,    0            /HOLDS LINE POINTER
  1657. STATE,    0            /CURRENT STATE
  1658. RETRY,    -RETCNT            /PACKET ERROR RETRY COUNTER        /031 CJL
  1659. RTRYC,    0            /USE THIS FOR ACTUAL COUNTER
  1660.  
  1661. /    CURRENT PACKET I/O DATA.                    /014 CJL
  1662.  
  1663. PAKPTR,    0            /POINTER TO OUTPUT PACKET POINTER
  1664. PAKCKS,    0            /HOLDS CURRENT OUTPUT PACKET CHECKSUM TOTAL
  1665. CURSEQ,    0            /CURRENT SEQ NUMBER
  1666. QFLAG,    0            /NON-ZERO WHEN NO CONTROL QUOTING
  1667.  
  1668. /    RECEIVE "INIT" REGISTERS.                    /014 CJL
  1669.  
  1670. RMAXL,    DEFMAXL+40        /MAX LENGTH FOR DATA PACKET (DEFAULT)
  1671. RTIME,    0            /TIME-OUT VALUE
  1672. RNPAD,    0            /NUMBER OF PADDING CHARS
  1673. RPADC,    0            /CHAR USED FOR PADDING
  1674. REOL,    DEFEOL            /TERMINATOR CHAR USED FOR END OF PACKET
  1675. RQCTL,    DEFQCTL            /CONTROL CHAR PREFIX CHAR
  1676. RQBIN,    0            /PARITY CHAR PREFIX CHAR (CHARS GT 177)
  1677. RCHKT,    DEFCK            /CHECKSUM TYPE  (DEFAULT TYPE 1)
  1678. RREPT,    0            /PREFIX CHAR FOR REPEATED CHARS
  1679. RCAPAS,    0            /EXTRA CAPABILITY BIT MASK
  1680.  
  1681. /    ZBLOCK    4        /RESERVED FOR EXTRA CAPABILITIES    /022 CJL
  1682.  
  1683.     INITEND=.        /END OF INIT REGISTERS            /022 CJL
  1684.  
  1685. HNDADR,    0            /FILE DEVICE HANDLER ADDRESS
  1686. FORCEP,    0            /FLAG FOR FORCED OUTPUT OF PACKET WHEN THERE IS
  1687.                 /  NO DATA (JUST SOH, LEN, SEQ, AND CHECKSUM)
  1688. PRSERR,    0            /HOLDS PARSE POSITION FOR REPORTING ERRORS
  1689. PACK6P,    0            /POINTER TO STORAGE OF 6 BIT CHARS
  1690. PACK6F,    0            /FLAG FOR WHICH BYTE TO STORE
  1691. GET6P,    0            /POINTER USED IN THE GET6 ROUTINE
  1692. GET6F,    0            /FLAG USED IN THE GET6 ROUTINE
  1693. MOVE4,    0            /COUNTER FOR "MOVE"
  1694. INIFLG,    0            /INIT DONE FLAG
  1695. MQ,    .-.            /"MQ" TEMPORARY REGISTER        /032 CJL
  1696. /    FILE NAME PARSE REGISTERS.                    /014 CJL
  1697.  
  1698. FNPTR,    0            /POINTER TO WHERE TO PUT A PARSED FILE NAME
  1699. WILDF,    0            /WILD CARD IN FILE NAME FLAG
  1700.  
  1701. /    FILE INFORMATION.                        /014 CJL
  1702.  
  1703. FSBLK,    0            /FILE START BLOCK
  1704. FLEN,    0            /FILE LENGTH
  1705. DEVNUM,    0            /PARSED DEVICE NUMBER HERE
  1706. OFFLG,    0            /OUTPUT FILE OPEN FLAG
  1707. ODNAME,    0            /POINTER TO USER SPECIFIED DEVICE FOR OUTPUT
  1708. ODNUMB,    0            /OUTPUT DEVICE NUMBER
  1709.  
  1710. /    PARITY VARIABLES.                        /014 CJL
  1711.  
  1712. /MARK,    0200            /SET BIT [8] FOR COMMAND INPUTS     /A013
  1713. /PARITY,0            /PARITY MASK (0=SPACE, 200=MARK)    /AM013
  1714.  
  1715. /    INTERNAL FILE MODE FLAG.                    /019 CJL
  1716.  
  1717. FILMODE,FMODE            /ASCII=0177, BINARY=4377        /019 CJL
  1718.  
  1719. /    UPPER-CASE ONLY FLAG.                        /023 CJL
  1720.  
  1721. UPONLY,    LOWER            /0=UPPER/LOWER CASE, -40=UPPER-CASE ONLY/030 CJL
  1722.  
  1723. /    <^C> DISPATCH ADDRESS.                        /023 CJL
  1724.  
  1725. UCADDRE,SBOOT            /<^C> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL
  1726.  
  1727. /    <^P> DISPATCH ADDRESS.                        /023 CJL
  1728.  
  1729. UPADDRE,CHKCLR            /<^P> ADDRESS SHOULD BE SET AS NECESSARY/023 CJL
  1730.  
  1731. /    ESCAPE CHARACTER FOR CONNECT MODE.                /025 CJL
  1732.  
  1733. ESCHAR,    ESCAPE            /ESCAPE CHARACTER FOR CONNECT MODE    /025 CJL
  1734.  
  1735. /    FLOW CONTROL FLAG.                        /026 CJL
  1736.  
  1737. FLOWFLA,-FLOW            /0=NO FLOW CONTROL, 7777=FLOW CONTROL    /049 CJL
  1738.                 /VIA <^S>/<^Q>
  1739.  
  1740. /    KEYBOARD INPUT ERROR FLAG.                    /026 CJL
  1741.  
  1742. KEYERRO,.-.            /0=NO ERROR, NON-ZERO=BAD CHARACTER    /026 CJL
  1743.                 /OR BUFFER OVERRUN
  1744. /    REMOTE LINE INPUT ERROR FLAG.                    /026 CJL
  1745.  
  1746. RINERRO,.-.            /0=NO ERROR, NON-ZERO=BAD CHARACTER    /026 CJL
  1747.                 /OR BUFFER OVERRUN
  1748.  
  1749. /    REMOTE LINE OUTPUT FLOW CONTROL WAIT FLAG.            /026 CJL
  1750.  
  1751. REMWAIT,.-.            /0=DON'T WAIT, 4000=WAIT FOR <^Q>    /026 CJL
  1752.  
  1753. /    REMOTE INPUT WAIT FLAG.                        /026 CJL
  1754.  
  1755. /    FLAG STATES:
  1756.  
  1757. /    VALUE            ACTION
  1758.  
  1759. /    0000            BUFFER IS LESS THAN  3/4  FULL.   INPUT FREELY ALLOWED
  1760. /                WITHOUT FLOW CONTROL RESTRICTIONS.   IF BUFFER BECOMES
  1761. /                3/4 FULL AND FLOW CONTROL IS  IN  EFFECT  THEN  CHANGE
  1762. /                STATE TO 0001.
  1763.  
  1764. /    0001            BUFFER IS NOW 3/4 FULL.  OUTPUT  <^S>  TO  REMOTE  AND
  1765. /                THEN CHANGE STATE TO 4000.
  1766.  
  1767. /    4000            WAITING FOR BUFFER TO EMPTY TO LESS THAN 1/4 FULL.  IF
  1768. /                FLOW  CONTROL  IS BEING OBEYED, THEN BUFFER SHOULD NOW
  1769. /                BE EMPTYING.
  1770.  
  1771. /    7777            BUFFER  IS  NOW  LESS  THAN 1/4 FULL.  OUTPUT <^Q>  TO
  1772. /                REMOTE AND THEN CHANGE STATE TO 0000.
  1773.  
  1774. RINWAIT,.-.            /REMOTE INPUT WAIT FLAG            /026 CJL
  1775.  
  1776. /    REMOTE LINE OUTPUT BUFFER POINTERS.                /026 CJL
  1777.  
  1778. REMINSE,.-.            /REMOTE OUTPUT INSERTION POINTER    /026 CJL
  1779. REMREMO,.-.            /REMOTE OUTPUT REMOVAL POINTER        /026 CJL
  1780. /    POINTER FOR THE PACKET INPUT AND OUTPUT ROUTINES
  1781.  
  1782.     SPACK=    JMS I    .    /SEND A PACKET TO REMOTE
  1783.         SPACK0        /PUT IN A POINTER
  1784.  
  1785.     FPACK=    JMS I    .    /FORMAT PACKET
  1786.         FPACK0        /PUT IN THE POINTER
  1787.  
  1788.     RPACK=    JMS I    .    /RECEIVE A PACKET FROM REMOTE
  1789.         ILINK        /PUT IN A POINTER
  1790.  
  1791. /    POINTERS FOR OUTPUT ROUTINES
  1792.  
  1793.     PRI8B=    JMS I    .    /PRINT 8 BIT STRING ON TTY
  1794.         PRI8B0        /PUT IN THE POINTER
  1795.  
  1796.     REM8B=    JMS I    .    /SEND 8 BIT STRING DOWN REMOTE LINE
  1797.         REM8B0        /PUT IN THE POINTER
  1798.  
  1799. /    MISC.
  1800.  
  1801.     PACK6=    JMS I    .    /DEFINE CALL TO ROUTINE
  1802.         PACK60        /POINTER TO ROUTINE
  1803.  
  1804.     GET6=    JMS I    .    /DEFINE THE INSTRUCTION
  1805.         GET60        /PUT IN THE POINTER
  1806.  
  1807.     MOVE=    JMS I    .    /DEFINE CALL TO MOVE ROUTINE
  1808.         MOVE0        /POINTER
  1809.  
  1810.     CLEAR=    JMS I    .    /DEFINE CALL FOR "CLEAR" ROUTINE
  1811.         CLEAR0        /POINTER
  1812.     PAGE            /START ON NEW PAGE            /A014 CJL
  1813.  
  1814. /    KERMIT-12 PROGRAM STARTS HERE.                    /A014 CJL
  1815.  
  1816. CLOOP,    JMP I    (INITIALIZE)    /**** INITIALIZED **** CLA CLL        /024 CJL
  1817.     JMS I    [CRESET]    /RESET CONSOLE ROUTINE STUFF
  1818.     DCA    ABFLAG        /CLEAR ABORT FLAG            /044 CJL
  1819.     DCA    REMWAIT        /CLEAR REMOTE FLOW CONTROL WAIT        /049 CJL
  1820. CLDMZAP,JMS    DMINIT        /INITIALIZE DECMATE PORT        /048 CJL
  1821.  
  1822. /    THE  PREVIOUS  INSTRUCTION  IS  FOR  DECMATE  OPERATION  ONLY.    THE  DEFAULT
  1823. /    INSTRUCTION IS FOR KL8 INTERFACES ONLY.
  1824.  
  1825.     *CLDMZAP        /OVERLAY DECMATE CODE            /048 CJL
  1826.  
  1827. CLDMZAP,NOP            /DON'T INITIALIZE DECMATE PORT        /048 CJL
  1828.     TAD    RATE        /GET BAUD RATE
  1829. SETBAUD,MSB            /SET REMOTE BAUD RATE            /050 CJL
  1830.  
  1831. /    THE PREVIOUS INSTRUCTION IS FOR DECMATE II OPERATION ONLY.    /050 CJL
  1832.  
  1833.     *SETBAUD        /OVERLAY DECMATE II CODE        /050 CJL
  1834.  
  1835. SETBAUD,NOP            /NOT APPLICABLE ON DECMATE I        /050 CJL
  1836.  
  1837. /    THE  PREVIOUS  INSTRUCTION  IS  FOR DECMATE I OPERATION  ONLY.    THE  DEFAULT
  1838. /    INSTRUCTION IS FOR KL8 INTERFACES ONLY.
  1839.  
  1840.     *SETBAUD        /OVERLAY DECMATE I CODE            /050 CJL
  1841.  
  1842. SETBAUD,RSBIOT            /SET REMOTE BAUD RATE            /050 CJL
  1843.     JMS I    [SCRIBE]    /DO A                    /025 CJL
  1844.     CRLF            /<CR>, <LF>                /025 CJL
  1845.     JMS I    [SCRIBE]    /GIVE THEM THE                /025 CJL
  1846.     PRMTMSG            /PROMPT MESSAGE                /025 CJL
  1847.     JMS I    (LININP)    /GET INPUT LINE FROM USER
  1848.     TAD    (CMDTBL)    /GET ADDRESS OF PARSE TABLE        /M014 CJL
  1849.     DCA    PTABLE        /STORE FOR PARSER
  1850.     TAD    (LINBUF)    /GET INPUT LINE BUFFER ADDRESS        /M014 CJL
  1851.  
  1852. CLOOP1,    JMS I    (KEYPRS)    /PARSE OFF A KEYWORD
  1853.     JMP    CLOOP9        /NO MATCH ON KEYWORD
  1854.     JMP    CLOOP        /END OF LINE DETECTED
  1855.     DCA    LPTR        /STORE POINTER TO NEXT POS ON LINE
  1856.     JMS I    KEYDSP        /DISPATCH TO SERVICE
  1857.     JMP    CLOOP7        /ERROR RETURN FROM SERVICE DISPATCH
  1858.     TAD    LPTR        /RE-GET COMMAND LINE POINTER
  1859.     JMP    CLOOP1        /CONTINUE LINE PARSE
  1860.  
  1861. CLOOP7,    SNA            /SKIP IF A RETURNING MESSAGE PASSED    /029 CJL
  1862.     JMP    CLOOP        /JUST GO BACK TO COMMAND LOOP        /029 CJL
  1863.     DCA    RETARG        /STORE IN-LINE                /029 CJL
  1864.     JMS I    [SCRIBE]    /CALL MESSAGE PRINT ROUTINE
  1865. RETARG,    .-.            /WILL BE PASSED MESSAGE ADDRESS
  1866.     JMP    CLOOP        /KEEP GOING
  1867. CLOOP9,    JMS I    [SCRIBE]    /COMPLAIN OF                /025 CJL
  1868.     CMERMSG            /BAD COMMAND                /025 CJL
  1869.     JMP    CLOOP        /GO AGAIN
  1870.  
  1871. /    ROUTINE TO FORMAT A PACKET OF DATA
  1872. /    CALL:    FPACK
  1873. /        DATA ADDRESS (DATA MUST ALREADY BE CONTROL/QUOTED AND MUST
  1874. /                  NOT BE LONGER THAN THE LARGEST PACKET)
  1875. /        PACKET TYPE
  1876.  
  1877. FPACK0,    0
  1878.     CLA CLL            /INSURE CLEAR AC
  1879.     TAD I    FPACK0        /GET THE DATA ADDRESS
  1880.     DCA    FP1        /STORE IN SOURCE POINTER
  1881.     ISZ    FPACK0        /BUMP ARGUMENT POINTER
  1882.     TAD I    FPACK0        /NOW GET TYPE
  1883.     DCA I    (RSTYP)        /STORE
  1884.     ISZ    FPACK0        /BUMP ARGUMENT POINTER
  1885.     TAD    (RSDTA        /GET ADDRESS OF DATA BUFFER
  1886.     DCA    FP2        /STORE IN DESTINATION POINTER
  1887.  
  1888.      TAD    (40+3        /SET FOR LENGTH COUNTER
  1889.     DCA I    (RSLEN)        /STORE IN PACKET
  1890.     DCA    FP3        /INIT CHECKSUM
  1891.     TAD    CURSEQ        /GET CURRENT SEQ NUMBER
  1892.     AND    [77]        /MODULO 64                /014/016 CJL
  1893.     TAD    [40]        /TAKE CHAR(SEQUENCE NUMBER)        /014/016 CJL
  1894.     DCA I    (RSSEQ)        /PUT INTO PACKET
  1895. FPACK2,    TAD I    FP1        /GET A CHAR FROM SOURCE
  1896.     SPA            /SKIP IF NOT END
  1897.     JMP    FPACK3        /END
  1898.     TAD    FP3        /COMBINE WITH CHECKSUM
  1899.     DCA    FP3        /AND RETURN
  1900.     TAD I    FP1        /GET CHAR BACK AGAIN
  1901.     DCA I    FP2        /NOW PUT INTO DESTINATION
  1902.     ISZ I    (RSLEN)        /BUMP THE LENGTH
  1903.     ISZ    FP1        /BUMP THE SOURCE POINTER
  1904.     ISZ    FP2        /BUMP THE DESTINATION POINTER
  1905.     JMP    FPACK2        /LOOP
  1906. FPACK3,    CLA CLL            /CLEAR THE AC
  1907.     TAD    FP3        /GET CALCULATED CHECKSUM
  1908.     TAD I    (RSLEN)        /INCLUDE THE LENGTH
  1909.     TAD I    (RSSEQ)        /AND THE SEQUENCE
  1910.     TAD I    (RSTYP)        /AND THE TYPE
  1911.     JMS I    [CKSUM]        /GET IT CORRECT
  1912.     DCA I    FP2        /STORE WITH PACKET
  1913.     ISZ    FP2        /BUMP PACKET POINTER
  1914.     TAD    REOL        /GET ANY END OF LINE TO INCLUDE
  1915.     TAD    [-40]        /MAKE IT A REAL CHARACTER        /014/016 CJL
  1916.     SNA            /SKIP IF EOL CHAR REQUIRED
  1917.     JMP    FPACK4        /NO EOL CHAR
  1918.     DCA I    FP2        /STORE EOL CHAR WITH PACKET
  1919.     ISZ    FP2        /BUMP POINTER
  1920. FPACK4,    NL7777            /SET -1                    /032 CJL
  1921.     DCA I    FP2        /PACKET NOW COMPLETE
  1922.     TAD    RETRY        /SET UP RE-TRY COUNTER
  1923.     DCA    RTRYC
  1924.     ISZ    CURSEQ        /BUMP SEQUENCE NUMBER FOR NEXT TIME
  1925.     NOP            /PROTECT ISZ
  1926.     JMP I    FPACK0        /RETURN
  1927.  
  1928. FP1,    0            /POINTER TO SOURCE DATA
  1929. FP2,    0            /POINTER TO PACKET BUFFER
  1930. FP3,    0            /RUNNING CHECKSUM
  1931.  
  1932. /    DECMATE INITIALIZE ROUTINE.                /048 CJL
  1933.  
  1934. DMINIT,    .-.            /DECMATE PORT INITIALIZE ROUTINE/048 CJL
  1935. DMI01,    TAD    DM234/(234)    /GET SCD ENABLE VALUE        /050 CJL
  1936. DMI02,    WCON0            /WRITE CONTROL REGISTER 0 (1)    /050 CJL
  1937. DMI03,    NL0000            /INDICATE PORT 0 (1)        /050 CJL
  1938. DMI04,    RACD            /RESET THE ACTIVE PORT        /050 CJL
  1939. DMI05,    ISZ    DMWASTE        /WASTE                /050 CJL
  1940. DMI06,    JMP    DMI05        /SOME TIME            /050 CJL
  1941. DMI07,    ISZ    DMWASTE        /WASTE                /050 CJL
  1942. DMI08,    JMP    DMI07        /SOME TIME            /050 CJL
  1943. DMI09,    RTFL0            /SET PORT 0 (1) OUTPUT FLAG    /050 CJL
  1944. DMI10,    TAD    DM2516/(2516)    /SETUP FOR 8 BITS, NO PARITY    /050 CJL
  1945. DMI11,    JMS    DMSEND        /SEND TO MODE REGISTER 1    /050 CJL
  1946. DMI12,    TAD    RATE        /GET BAUD RATE            /050 CJL
  1947. DMI13,    TAD    DM2460/(2460)    /ADD ON CLOCK ENABLE VALUES    /050 CJL
  1948. DMI14,    JMS    DMSEND        /SEND TO MODE REGISTER 2    /050 CJL
  1949. DMI15,    TAD    DM3425/(3425)    /GET ENABLE AND RESET VALUE    /050 CJL
  1950. DMI16,    JMS    DMSEND        /SEND TO COMMAND REGISTER    /050 CJL
  1951. DMI17,    RKRB0            /DO A DUMMY READ ON PORT 0 (1)    /050 CJL
  1952. /    THE  PREVIOUS  INSTRUCTIONS  ARE  FOR  DECMATE    I OPERATION ONLY.  THE DEFAULT
  1953. /    INSTRUCTIONS ARE FOR DECMATE II, ETC.  INTERFACES ONLY.
  1954.  
  1955.     *DMI01            /OVERLAY DECMATE I CODE        /050 CJL
  1956.  
  1957. DMI01,    ISZ    DMWASTE        /WASTE                /048 CJL
  1958. DMI02,    JMP    DMI01        /SOME TIME            /048 CJL
  1959. DMI03,    ISZ    DMWASTE        /WASTE                /048 CJL
  1960. DMI04,    JMP    DMI03        /SOME TIME            /048 CJL
  1961. DMI05,    ISF            /SKIP ON AND CLEAR PORT FLAG    /048 CJL
  1962. DM50,    50/NOP            /JUST IN CASE            /048 CJL
  1963. DMI07,    IRB            /READ THE PORT BUFFER        /048 CJL
  1964. DMI08,    CLA            /CLEAN UP            /048 CJL
  1965. DMI09,    TAD    DM50/(50)    /GET OUTPUT INTERRUPT VALUE    /048 CJL
  1966. DMI10,    MPSCC            /CLEAR OUTPUT INTERRUPT        /048 CJL
  1967. DMI11,    TAD    (60-50)        /GET ERROR RESET VALUE        /048 CJL
  1968. DMI12,    MPSCC            /CLEAR OVERRUN ERRORS        /048 CJL
  1969. DMI13,    TAD    (70-60)        /SET END OF INTERRUPT VALUE    /048 CJL
  1970. DMI14,    MPSCC            /CLEAR THE INTERRUPT        /048 CJL
  1971. DMI15,    DCA    OUTFLAG        /INDICATE OUTPUT IS AVAILABLE    /048 CJL
  1972. DMI16,    DCA    INFLAG        /CLEAR INPUT AVAILABLE FLAG    /048 CJL
  1973. DMI17,    JMP I    DMINIT        /RETURN                /048 CJL
  1974.  
  1975. /    DECMATE I INITIALIZE CODE CONTINUES HERE.        /050 CJL
  1976.  
  1977. DMISET,    RTFL0            /SET PORT 0 (1) OUTPUT FLAG    /050 CJL
  1978.     CLA            /CLEAN UP            /050 CJL
  1979.     JMP I    DMINIT        /RETURN                /050 CJL
  1980.  
  1981. DMSEND,    .-.            /DECMATE I SEND ROUTINE        /050 CJL
  1982. DMISKP,    RTSF0            /SKIP ON PORT 0 (1) OUTPUT FLAG    /050 CJL
  1983.     JMP    DMISKP        /WAIT FOR IT            /050 CJL
  1984. DMIOUT,    RTLS0            /SEND TO PORT 0 (1) REGISTER    /050 CJL
  1985.     CLA            /CLEAN UP            /050 CJL
  1986.     JMP I    DMSEND        /RETURN                /050 CJL
  1987.  
  1988. DMWASTE,.-.            /TIMER TEMPORARY        /050 CJL
  1989. DM234,    234            /CONSTANT 0234            /050 CJL
  1990. DM2460,    2460            /CONSTANT 2460            /050 CJL
  1991. DM2516,    2516            /CONSTANT 2516            /050 CJL
  1992. DM3425,    3425            /CONSTANT 3425            /050 CJL
  1993.  
  1994.     PAGE
  1995. /    ROUTINE TO SEND THE FORMATTED PACKET            /027 CJL
  1996. /    ARGUMENTS:  CALL+1 NON-ZERO = AWAIT RESPONSE
  1997. /                   ZERO = DO NOT AWAIT RESPONSE
  1998. /            CALL + 2 DISPATCH TABLE-2            /027 CJL
  1999.  
  2000. SPACK0,    0
  2001.     REM8B;    RSBUF        /SEND PACKET JUST COMPLETED
  2002.     TAD I    SPACK0        /DO WE GET A RESPONSE?
  2003.     ISZ    SPACK0        /BUMP POINTER PAST ARGUMENT
  2004.     SNA CLA            /SKIP IF YES
  2005.     JMP I    SPACK0        /ALL DONE HERE
  2006.     RPACK            /GET PACKET BACK FROM REMOTE
  2007.     TAD I    SPACK0        /DID WE WANT A DISPATCH?
  2008.     ISZ    SPACK0        /BUMP PAST ARGUMENT
  2009.     SNA            /SKIP IF YES
  2010.     JMP I    SPACK0        /EXIT IF NO
  2011.     DCA    SPACARG        /STORE IN-LINE                /031 CJL
  2012.     JMS    DISPATCH    /CALL DISPATCH ROUTINE            /031 CJL
  2013. SPACARG,.-.            /WILL BE DISPATCH TABLE-2        /031 CJL
  2014.     JMP I    SPACK0        /NOT FOUND, GOTTA RETURN
  2015.  
  2016. /    CONSOLE RESET ROUTINE.                        /024 CJL
  2017.  
  2018. CRESET,    .-.            /CONSOLE RESET ROUTINE
  2019.     CLA CLL            /CLEAN UP
  2020.     DCA    ECHOSW        /ENABLE OUTPUT ECHO
  2021.     TAD    (UPCPRT)    /ALLOW THEM TO
  2022.     DCA    UCADDRESS    /RESTART VIA <^C>
  2023.     TAD    [CLOOP]        /ALLOW THEM TO
  2024.     DCA    UPADDRESS    /RESTART VIA <^P>
  2025.     JMP I    CRESET        /RETURN
  2026.  
  2027. /    ALTERNATE CONSOLE RESET ROUTINE.                /025 CJL
  2028.  
  2029. CREST2,    .-.            /ALTERNATE CONSOLE RESET ROUTINE
  2030.     JMS    CRESET        /CLEAR AC AND ENABLE OUTPUT ECHO
  2031.     TAD    (KCCZAP)    /RENDER <^C>
  2032.     DCA    UCADDRESS    /TOTALLY HARMLESS
  2033.     TAD    (CHKCLR)    /MAKE <^P> PRINT "^P"
  2034.     DCA    UPADDRESS    /AND THEN GO AWAY
  2035.     JMP I    CREST2        /RETURN
  2036. /    ROUTINE TO CLEAR WORDS OF MEMORY
  2037. /    ENTER WITH:    AC = MINUS NUMBER OF WORDS TO CLEAR
  2038. /                MQ = ADDRESS OF WHERE TO START THE CLEAR
  2039.  
  2040. CLEAR0,    0
  2041.     DCA    CLEAR5        /STORE COUNT OF WORDS
  2042.     TAD    MQ        /GET ADDRESS TO CLEAR            /032 CJL
  2043.     DCA    CLEAR6        /STORE IN POINTER
  2044.     DCA I    CLEAR6        /ZERO A WORD
  2045.     ISZ    CLEAR6        /BUMP POINTER
  2046.     ISZ    CLEAR5        /BUMP COUNTER
  2047.     JMP    .-3        /LOOP
  2048.     JMP I    CLEAR0        /DONE
  2049.  
  2050. CLEAR5,    0            /TEMP FOR "CLEAR" ROUTINE
  2051. CLEAR6,    0            /TEMP FOR "CLEAR" ROUTINE
  2052.  
  2053. /    ROUTINE TO DISPATCH TO ROUTINE BASED ON VALUE OF "RRTYP".    /027 CJL
  2054.  
  2055. /    CALLING SEQUENCE:
  2056.  
  2057. /    CLA            /AC MUST BE CLEAR
  2058. /    JMS    DISPATCH    /CALL ROUTINE
  2059. /    ADDRESS-2        /DISPATCH TABLE ADDRESS-2
  2060. /    NO MATCH RETURN        /RETURNS HERE WITH CLEAR AC IF NO MATCH
  2061.  
  2062. /    CALL  WILL DISPATCH TO THE CORRESPONDING ROUTINE ON A MATCH IN  THE  SPECIFIED
  2063. /    TABLE (WHICH ENDS WITH ZERO) WITH A CLEAR AC.
  2064.  
  2065. DISPATC,.-.            /MATCH "RRTYP" AND DISPATCH ROUTINE
  2066.     CLA            /JUST IN CASE                /031 CJL
  2067.     TAD I    DISPATCH    /GET PASSED ARGUMENT
  2068.     ISZ    DISPATCH    /BUMP PAST THE ARGUMENT
  2069.     DCA    DISPA2        /SAVE PASSED ARGUMENT IN-LINE
  2070.     TAD I    (RRTYP)        /GET VALUE OF "RRTYP"
  2071.     CIA            /INVERT FOR TESTING
  2072.     JMS I    [SRCHTABLE]    /CALL TABLE SEARCH ROUTINE
  2073. DISPA2,    .-.            /WILL BE TABLE ADDRESS-2
  2074.     SNA CLA            /SKIP IF MATCH FOUND
  2075.     JMP I    DISPATCH    /RETURN ON NO MATCH
  2076.     JMP I    TABLEJUMP    /DISPATCH TO MATCHING ADDRESS
  2077. /    ROUTINE TO PUT CHARS INTO A BUFFER TO GET READY TO FORMAT A PACKET.
  2078. /    ENTER WITH CHAR IN THE AC; IF THE CHAR NEEDS CONTROL QUOTING, IT WILL BE ADDED
  2079. /    EXIT + 2 IF EVERYTHING IS OK
  2080. /    EXIT + 1 IF BUFFER IS FULL
  2081.  
  2082. OPBUF,    0            /PUT CHARACTERS INTO BUFFER FOR PACKET ROUTINE
  2083.     JMS I    (OPRE)        /CHECK FOR PREFIX
  2084.     JMP    OPBUF1        /NO PREFIX
  2085.     DCA    OP1        /SAVE CONVERTED CHAR
  2086.     TAD    RQCTL        /GET QUOTE CHAR TO USE
  2087.     DCA I    OP2        /PUT RETURNED PREFIX INTO BUFFER
  2088.     ISZ    OP2        /BUMP POINTER
  2089.     TAD    OP1        /GET BACK CONVERTED CHAR
  2090. OPBUF1,    DCA I    OP2        /PUT INTO BUFFER
  2091.     ISZ    OP2        /BUMP POINTER
  2092.     NL7777            /SET -1                    /032 CJL
  2093.     DCA I    OP2        /ALWAYS TERMINATE BUFFER
  2094.     TAD    RMAXL        /GET MAX BUFFER LENGTH
  2095.     TAD    (-40+HOLDBF-4    /
  2096.     CIA
  2097.     TAD    OP2        /COMPARE WITH WHAT WE HAVE
  2098.     SPA CLA            /SKIP IF NO ROOM
  2099.     JMP    OPBUF2        /HAVE ROOM
  2100.     JMS    INIOPB        /RESET BUFFER
  2101.     JMP I    OPBUF        /TAKE RETURN + 1
  2102.  
  2103. OPBUF2,    ISZ    OPBUF        /BUMP RETURN FOR BUFFER NOT FULL
  2104.     JMP I    OPBUF        /DONE
  2105.  
  2106. OP1,    0            /TEMP LOCATION
  2107. OP2,    HOLDBF            /POINTER FOR HOLD BUFFER
  2108.  
  2109. /    ROUTINE TO RE-SET THE HOLD BUFFER.
  2110.  
  2111. INIOPB,    0
  2112.     TAD    (HOLDBF        /RE-SET BUFFER POINTER
  2113.     DCA    OP2
  2114.     JMP I    INIOPB
  2115.  
  2116. /    ROUTINE TO CALCULATE A 1 BYTE CHECKSUM.
  2117.  
  2118. CKSUM,    0
  2119.     DCA    CKSUM1        /STORE TEMP
  2120.     TAD    CKSUM1        /GET BACK
  2121.     RTR;RTR;RTR        /GET TWO HIGHEST INTO TWO LOWEST    /032 CJL
  2122.     AND    (3        /KEEP ONLY BITS 0-1
  2123.     TAD    CKSUM1        /GET ORIGINAL
  2124.     AND    [77]        /KEEP ONLY BITS 0-5            /016 CJL
  2125.     TAD    [40]        /MAKE A CHAR(CHECKSUM)
  2126.     JMP I    CKSUM        /DONE, RETURN IN AC
  2127.  
  2128. CKSUM1,    0            /TEMP FOR "CKSUM"
  2129.     PAGE
  2130. /    ROUTINE TO INPUT CHARS FROM REMOTE UNTIL A "SOH" CHAR IS FOUND.
  2131.  
  2132. GETSOH,    0
  2133.     JMS    COMIN        /GET A CHARACTER FROM THE REMOTE LINE    /046 CJL
  2134.     JMP I    GETSOH        /TIME-OUT
  2135.     AND    [177]        /IGNORE PARITY BIT            /034 CJL
  2136.     TAD    (-CNTRLA)    /COMPARE WITH "SOH"            /034 CJL
  2137.     SZA CLA            /SKIP IF SAME
  2138.     JMP    GETSOH+1    /LOOP TILL WE GET ONE
  2139.     ISZ    GETSOH        /BUMP FOR GOOD RETURN
  2140.     JMP I    GETSOH        /GOT ONE, DONE
  2141.  
  2142.  
  2143. /    ROUTINE TO GET A CHAR FROM THE REMOTE LINE AND UPDATE CHECKSUM.
  2144.  
  2145. GETIR,    0
  2146.     JMS    COMIN        /GET A CHARACTER FROM THE REMOTE LINE    /046 CJL
  2147.     JMP I    GETIR        /TIME-OUT RETURN
  2148.     DCA    GETIR1        /STORE TEMP
  2149.     TAD    GETIR1        /GET CHAR BACK
  2150.     TAD I    (ILINK9)    /ADD CHECKSUM
  2151.     DCA I    (ILINK9)    /RETURN UPDATED CHECKSUM
  2152.     TAD    GETIR1        /RE-GET CURRENT INPUT CHAR
  2153.     TAD    [-15]        /CHECK FOR A RETURN
  2154.     SNA CLA            /SKIP IF NOT A RETURN
  2155.     JMP I    GETIR        /WAS A RETURN, TAKE EXIT + 1
  2156.     TAD    GETIR1        /RE-GET CHAR FOR RETURN
  2157.     ISZ    GETIR        /BUMP FOR GOOD RETURN
  2158.     JMP I    GETIR        /AND RETURN IN THE AC
  2159.  
  2160. GETIR1,    0            /TEMP LOCAL TO "GETIR"
  2161. /    REMOTE COMMUNICATIONS ROUTINES FOR NON-CONNECT USAGE.        /046 CJL
  2162.  
  2163. /    REMOTE INPUT ROUTINE.                        /046 CJL
  2164.  
  2165. COMIN,    .-.            /REMOTE INPUT ROUTINE            /046 CJL
  2166.     CLA            /CLEAN UP                /046 CJL
  2167.     TAD    [-15]        /SETUP THE                /049 CJL
  2168.     DCA    TIMEOUT        /TIME-OUT FACTOR            /046 CJL
  2169. INLUP,    TAD    INFLAG        /IS INPUT AVAILABLE?            /046 CJL
  2170.  
  2171. /    THE ABOVE INSTRUCTION IS FOR DECMATE  II USE ONLY.  THE DEFAULT INSTRUCTION IS
  2172. /    FOR KL8 INTERFACES.
  2173.  
  2174.     *INLUP            /OVERLAY DECMATE II CODE        /049 CJL
  2175.  
  2176. INLUP,    SKP            /WE'RE NOT A DECMATE II            /049 CJL
  2177.     SNA CLA            /SKIP IF INPUT AVAILABLE (ON DECMATE II)/049 CJL
  2178. INSKIP,    JMP    NOTYET        /JUMP IF NOT                /049 CJL
  2179. INLUP1,    DCA    INFLAG        /CLEAR INPUT AVAILABILITY FLAG        /049 CJL
  2180. INREAD,    IRB            /GET THE CHARACTER            /049 CJL
  2181.  
  2182. /    THE ABOVE INSTRUCTIONS ARE FOR DECMATE II  USE ONLY.  THE DEFAULT INSTRUCTIONS
  2183. /    ARE FOR KL8 INTERFACES.
  2184.  
  2185.     *INSKIP            /OVERLAY DECMATE II CODE        /049 CJL
  2186.  
  2187. INSKIP,    RKSFIOT            /INPUT FLAG UP?                /049 CJL
  2188. INLUP1,    JMP    NOTYET        /NO, CHECK FOR ABORT, ETC.        /049 CJL
  2189. INREAD,    RKRBIOT            /YES, READ IN THE CHARACTER        /049 CJL
  2190.     AND    [177]        /JUST SEVEN-BIT                /046 CJL
  2191.     DCA    RCHAR        /SAVE THE CHARACTER            /046 CJL
  2192.     TAD    RCHAR        /GET IT BACK                /046 CJL
  2193.     ISZ    COMIN        /BUMP TO GOOD RETURN            /046 CJL
  2194.     JMP I    COMIN        /RETURN                    /046 CJL
  2195.  
  2196. /    COMES HERE IF INPUT NOT AVAILABLE.
  2197.  
  2198. NOTYET,    JMS I    (CTLCTST)    /CHECK FOR <^C>, ETC.            /044 CJL
  2199.     TAD    [-CNTRLZ]    /COMPARE POSSIBLE CHARACTER TO <^Z>    /044 CJL
  2200.     SZA            /SKIP IF IT ALREADY MATCHES        /044 CJL
  2201.     TAD    [-CNTRLX+CNTRLZ]/ELSE COMPARE TO <^X>            /044 CJL
  2202.     SNA CLA            /SKIP IF NEITHER ABORT CHARACTER    /049 CJL
  2203.     ISZ    ABFLAG        /SET ABORT FLAG                /049 CJL
  2204.     SKP            /SKIP IF NOT TOO MANY TIMES        /049 CJL
  2205.     JMP    .-2        /ENSURE FLAG SETTING            /049 CJL
  2206. INSTATU,JMS    UPSTATUS    /UPDATE THE PORT STATUS            /049 CJL
  2207.  
  2208. /    THE ABOVE INSTRUCTION IS FOR DECMATE  II USE ONLY.  THE DEFAULT INSTRUCTION IS
  2209. /    FOR KL8 INTERFACES.
  2210.  
  2211.     *INSTATUS        /OVERLAY DECMATE II CODE        /049 CJL
  2212.  
  2213. INSTATU,NOP            /WE'RE NOT A DECMATE II            /049 CJL
  2214.     ISZ    WASTIME        /WASTE SOME TIME            /046 CJL
  2215.     JMP    INLUP        /KEEP TRYING                /046 CJL
  2216.     ISZ    TIMEOUT        /WAITING TOO LONG?            /046 CJL
  2217.     JMP    INLUP        /NO, KEEP TRYING            /046 CJL
  2218.     JMP I    COMIN        /YES, TAKE ERROR RETURN            /046 CJL
  2219.  
  2220. /    FLOW-CONTROL STATUS ROUTINE.                    /049 CJL
  2221.  
  2222. GETFLOW,.-.            /GET FLOW-CONTROL STATUS
  2223. GETFL1,    JMS    UPSTATUS    /UPDATE THE CURRENT STATUS
  2224.  
  2225. /    THE ABOVE INSTRUCTION IS FOR DECMATE II USE ONLY.   THE DEFAULT INSTRUCTION IS
  2226. /    FOR KL8 INTERFACES.
  2227.  
  2228.     *GETFL1            /OVERLAY DECMATE II CODE
  2229.  
  2230. GETFL1,    NOP            /WE'RE NOT A DECMATE II
  2231.     JMS I    (RINGET)    /GET REMOTE CHARACTER (IF ANY)
  2232.     CLA            /THROW IT AWAY
  2233.     TAD    REMWAIT        /GET REMOTE FLOW STATUS
  2234.     JMP I    GETFLOW        /RETURN
  2235.  
  2236. /    REMOTE OUTPUT ROUTINE.                        /046 CJL
  2237.  
  2238. COMOUT,    .-.            /REMOTE OUTPUT ROUTINE            /046 CJL
  2239.     DCA    OUTEMP        /SAVE PASSED VALUE            /046 CJL
  2240. CMRESET,TAD    [-15]        /SETUP THE                /049 CJL
  2241.     DCA    OTIME        /TIME-OUT COUNTER            /049 CJL
  2242. COMWAIT,JMS    GETFLOW        /GET REMOTE WAIT STATUS            /049 CJL
  2243.  
  2244. /    THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY.  THE DEFAULT INSTRUCTION IS FOR
  2245. /    KL8 INTERFACES.
  2246.  
  2247.     *COMWAIT        /OVERLAY DECMATE CODE            /049 CJL
  2248.  
  2249. COMWAIT,NL7777            /SETUP FOR FLOW CONTROL FLAG LOAD    /049 CJL
  2250.     AND    FLOWFLAG    /SHOULD WE WAIT FOR REMOTE FLOW CONTROL?/049 CJL
  2251.     SNA CLA            /SKIP IF SO                /049 CJL
  2252.     JMP    NOWAIT        /JUMP IF NOT                /049 CJL
  2253. FLOWAIT,JMS    GETFLOW        /GET REMOTE WAIT STATUS            /049 CJL
  2254.     SZA CLA            /SKIP IF NOT WAITING            /049 CJL
  2255.     JMP    FLOWAIT        /JUMP IF STILL WAITING            /049 CJL
  2256. NOWAIT,    TAD    OUTFLAG        /CHECK IF OUTPUT IS AVAILABLE        /049 CJL
  2257. CMOUT1,    SNA CLA            /SKIP IF SO                /049 CJL
  2258. CMOUT2,    JMP    OWAIT        /JUMP IF NOT                /049 CJL
  2259. DM1AND,    DCA    OUTFLAG        /CLEAR OUTPUT AVAILABILITY FLAG        /049 CJL
  2260. CMOUT3,    TAD    OUTEMP        /GET THE PASSED VALUE            /049 CJL
  2261. CMOUT4,    OLS            /OUTPUT IT                /049 CJL
  2262.  
  2263. /    THE ABOVE INSTRUCTIONS ARE FOR DECMATE II  USE ONLY.  THE DEFAULT INSTRUCTIONS
  2264. /    ARE FOR KL8 INTERFACES.
  2265.  
  2266.     *NOWAIT            /OVERLAY DECMATE II CODE        /049 CJL
  2267.  
  2268. NOWAIT,    RTSFIOT            /OUTPUT FLAG UP?            /049 CJL
  2269. CMOUT1,    JMP    OWAIT        /NO, WAIT FOR IT THERE            /049 CJL
  2270.  
  2271. /    THE ABOVE INSTRUCTION IS FOR DECMATE I USE  ONLY.   THE DEFAULT INSTRUCTION IS
  2272. /    FOR KL8 INTERFACES.
  2273.  
  2274.     *CMOUT1            /OVERLAY DECMATE I CODE            /049 CJL
  2275.  
  2276. CMOUT1,    JMP    COMWAIT        /NO, WAIT FOR IT            /049 CJL
  2277. CMOUT2,    TAD    OUTEMP        /YES, GET PASSED VALUE            /049 CJL
  2278. DM1AND,    AND    [377]        /ENSURE EIGHT BITS (FOR DECMATE I)    /049 CJL
  2279.  
  2280. /    THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY.    THE DEFAULT INSTRUCTION IS
  2281. /    FOR KL8 INTERFACES.
  2282.  
  2283.     *DM1AND            /OVERLAY DECMATE I CODE            /049 CJL
  2284.  
  2285. DM1AND,    SKP            /WE'RE NOT A DECMATE I            /049 CJL
  2286. CMOUT3,    TAD    [400]        /FORCE OUTPUT WRITE FOR DECMATE I    /049 CJL
  2287. CMOUT4,    RTLSIOT            /OUTPUT THE CHARACTER            /049 CJL
  2288.     CLA            /CLEAN UP                /049 CJL
  2289.     JMP I    COMOUT        /RETURN                    /049 CJL
  2290.  
  2291. /    COMES HERE IF OUTPUT NOT READY.                    /049 CJL
  2292.  
  2293. OWAIT,    ISZ    OWASTE        /WASTE SOME TIME            /049 CJL
  2294.     JMP    COMWAIT        /KEEP TRYING                /049 CJL
  2295.     ISZ    OTIME        /WAITING TOO LONG?            /049 CJL
  2296.     JMP    COMWAIT        /NO, KEEP TRYING            /049 CJL
  2297.     JMS I    (DMINIT)    /YES, RESET EVERYTHING            /049 CJL
  2298.     JMP    CMRESET        /TRY, TRY AGAIN                /049 CJL
  2299. /    DECMATE II, ETC. STATUS UPDATE ROUTINE.                /046 CJL
  2300.  
  2301. UPSTATU,.-.            /UPDATE THE STATUS ROUTINE        /046 CJL
  2302.     ISF            /COMMUNICATIONS PORT FLAG UP?        /046 CJL
  2303.     JMP I    UPSTATUS    /NO, RETURN                /046 CJL
  2304.     NL4000            /SETUP READ OF REGISTER ZERO        /046 CJL
  2305.     MPSCC            /TELL THE MPSCC CHIP            /046 CJL
  2306.     CLA            /CLEAN UP                /046 CJL
  2307.     MPSCC            /READ REGISTER ZERO NOW            /046 CJL
  2308.     AND    (5)        /JUST INPUT AND OUTPUT BITS        /046 CJL
  2309.     CLL RAR            /MOVE INPUT TO LINK            /046 CJL
  2310.     SNA CLA            /SKIP IF OUTPUT INTERRUPT        /046 CJL
  2311.     JMP    INCHK        /JUMP IF NOT                /046 CJL
  2312.     TAD    (050)        /GET OUTPUT CLEAR VALUE            /046 CJL
  2313.     MPSCC            /CLEAR THE OUTPUT INTERRUPT        /046 CJL
  2314.     DCA    OUTFLAG        /INDICATE OUTPUT AVAILABLE NOW        /046 CJL
  2315. INCHK,    CLA RAL            /GET RECEIVE STATUS            /046 CJL
  2316.     SZA            /SKIP IF INPUT NOT AVAILABLE RIGHT NOW    /046 CJL
  2317.     DCA    INFLAG        /INDICATE NEW INPUT STATUS        /046 CJL
  2318.     CLA            /CLEAN UP EITHER WAY            /046 CJL
  2319.     TAD    (070)        /GET END OF INTERRUPT VALUE        /046 CJL
  2320.     MPSCC            /CLEAR THE INTERRUPT            /046 CJL
  2321.     CLA            /CLEAN UP                /046 CJL
  2322.     JMP I    UPSTATUS    /RETURN                    /046 CJL
  2323.  
  2324.     AND377=    AND    [377]    /INSTRUCTION CONSTANT            /049 CJL
  2325.     OUTEMP=    COMIN        /OUTPUT ROUTINE TEMPORARY        /049 CJL
  2326.     TIMEOUT=GETFLOW        /TIME-OUT TEMPORARY            /049 CJL
  2327.     WASTIME=COMOUT        /TIME-OUT TEMPORARY            /049 CJL
  2328.  
  2329. OTIME,    .-.            /TIME-OUT TEMPORARY            /049 CJL
  2330. OWASTE,    .-.            /TIME-OUT TEMPORARY            /049 CJL
  2331.  
  2332.     PAGE
  2333.  
  2334. /    HOLD BUFFER FOR CHAR OUTPUT
  2335.  
  2336.     DECIMAL
  2337.  
  2338. HOLDBF,    ZBLOCK    92
  2339.  
  2340.     OCTAL
  2341. /    ROUTINE TO CHECK FOR CONTROL PREFIX.
  2342. /    ENTER WITH CHAR TO CHECK IN THE AC.
  2343. /    EXIT + 1 WITH CHAR IN THE AC IF NO PREFIX QUOTING.
  2344. /    EXIT + 2 WITH PROPER CHAR IN THE AC AND QUOTING IS REQUIRED.
  2345.  
  2346. OPRE,    0            /CHECK FOR CONTROL PREFIX ROUTINE
  2347.     DCA    PRETEMP        /SAVE THE CHARACTER            /032 CJL
  2348.     TAD    QFLAG        /CHECK FOR IN CTRL QUOTE MODE
  2349.     SZA CLA            /SKIP IF YES
  2350.     JMP    OPRE1        /NO QUOTE PREFIX
  2351.     TAD    PRETEMP        /GET THE CHARACTER            /032 CJL
  2352.     AND    [7740]        /QUICK CHECK FOR <40            /014/016 CJL
  2353.     SNA CLA            /SKIP IF NOT CONTROL
  2354.     JMP    OPRE2        /PREFIX QUOTE
  2355.     TAD    PRETEMP        /GET THE CHARACTER            /032 CJL
  2356.     TAD    (-177        /CHECK FOR "DELETE"
  2357.     SNA CLA            /SKIP IF NOT
  2358.     JMP    OPRE2        /PREFIX QUOTE
  2359.     TAD    PRETEMP        /GET THE CHARACTER            /032 CJL
  2360.     CIA            /NEGATE FOR COMPARE
  2361.     TAD    RQCTL        /SEE IF SAME AS QUOTE CHAR
  2362.     SZA CLA            /SKIP IF PREFIX QUOTE
  2363.     JMP    OPRE1        /NO PREFIX QUOTE
  2364.     TAD    RQCTL        /PREFIX WITH PREFIX
  2365.     JMP    OPRE3        /PREFIX WITH THE PREFIX
  2366.  
  2367. OPRE1,    TAD    PRETEMP        /GET THE CHARACTER            /032 CJL
  2368.     JMP I    OPRE        /DONE
  2369.  
  2370. OPRE2,    TAD    PRETEMP        /GET THE CHARACTER            /032 CJL
  2371.     TAD    [100]        /MAKE IT PRINTABLE            /016 CJL
  2372.     AND    [177]        /IN CASE IT WAS 177            /014/016 CJL
  2373.  
  2374. OPRE3,    ISZ    OPRE        /BUMP FOR PREFIX RETURN
  2375.     JMP I    OPRE        /DONE
  2376.  
  2377. PRETEMP,.-.            /PREFIX TEMPORARY            /032 CJL
  2378.  
  2379.     PAGE                                /014 CJL
  2380. /    ROUTINE TO SCAN A TEXT LINE FOR KEYWORD DELIMITERS.
  2381.  
  2382. /    THIS  ROUTINE EXPECTS THE AC TO POINT TO A TEXT LINE TO  SCAN  AND  FINDS  THE
  2383. /    FIRST NON-SPACE, NON-END OF LINE CHAR IN THE LINE AND SETS "SCAN1" TO POINT TO
  2384. /    IT.  NEXT WE FIND THE LAST CHAR IN THE LINE THAT IS A  NON-SPACE,  NON-END  OF
  2385. /    LINE  AND  STORE  A  POINTER  TO  IT  IN "SCAN2".  KEYWORDS ARE DELIMITED BY A
  2386. /    BEGINNING OF  LINE  OR SPACE AT THE BEGINNING AND AN END OF LINE OR A SPACE AT
  2387. /    THE END.
  2388.  
  2389. /    ENTER:    AC = POINTER TO COMMAND LINE
  2390.  
  2391. /    EXIT: (SUCCESS)    SCAN1 = POINTER TO FIRST CHAR OF KEYWORD.
  2392. /            SCAN2 = POINTER TO LAST CHAR OF KEYWORD.
  2393. /            RETURN = RETURN + 2 (NO WORDS LEFT IN LINE).
  2394.  
  2395. /    EXIT: (FAIL)    RETURN = RETURN + 1.
  2396.  
  2397. SCNEL,    0            /SCAN ROUTINE
  2398.     JMS I    [NOSP]        /FIND FIRST NON-SPACE
  2399.     JMP I    SCNEL        /END OF LINE RETURN
  2400.     DCA    SCAN1        /RETURN SCAN LINE POINTER
  2401.     TAD    SCAN1        /RE-GET SCAN LINE POINTER
  2402.     JMS I    [SP]        /FIND FIRST SPACE OR EOL
  2403.     NOP            /RETURN HERE ON EOL
  2404.     TAD    (-1        /BACK UP TO PREVIOUS CHAR
  2405.     DCA    SCAN2        /SET END ELEMENT POINTER
  2406.     ISZ    SCNEL        /TAKE SUCCESS RETURN
  2407.     JMP I    SCNEL        /DONE
  2408.  
  2409.  
  2410. /    ROUTINE TO SCAN THRU A TEXT LINE LOOKING FOR THE NEXT SPACE.
  2411. /    ENTER ROUTINE WITH THE LINE POINTER IN THE AC.
  2412.  
  2413. /    EXIT:    RETURN + 2 WITH AC = POINTER TO SPACE.
  2414. /        RETURN + 1 WITH AC = POINTER TO END OF LINE.
  2415.  
  2416. SP,    0            /CHECK FOR A <SPACE> ROUTINE
  2417.     DCA    SCANTP        /USE A TEMP POINTER
  2418.     SKP            /SKIP INTO LOOP BELOW
  2419. SP1,    ISZ    SCANTP        /BUMP LINE POINTER
  2420.     TAD I    SCANTP        /GET A CHAR
  2421.     SPA            /SKIP IF NOT END OF LINE
  2422.     JMP    SP3        /GOT AN END OF LINE
  2423.     TAD    [-" !200]    /COMPARE WITH <SP>            /034 CJL
  2424.     SZA CLA            /SKIP IF IS A SPACE
  2425.     JMP    SP1        /LOOP TILL SPACE OR EOL
  2426.     ISZ    SP        /BUMP RETURN FOR SPACE FOUND
  2427.  
  2428. SP3,    CLA CLL            /INSURE A CLEAR AC
  2429.     TAD    SCANTP        /GET POINTER VALUE
  2430.     JMP I    SP        /RETURN IN AC
  2431. /    ROUTINE TO SCAN THRU A TEXT LINE FOR THE FIRST NON-SPACE.
  2432. /    ENTER ROUTINE WITH POINTER TO THE LINE IN THE AC.
  2433.  
  2434. /    EXIT:    RETURN + 2 WITH AC = POINTER TO NON-SPACE.
  2435. /        RETURN + 1 WITH AC = POINTER TO END OF LINE.
  2436.  
  2437. NOSP,    0            /FIND A NON-<SPACE> ROUTINE
  2438.     DCA    SCANTP        /USE A TEMP POINTER
  2439.     SKP            /SKIP INTO LOOP BELOW
  2440. NOSP1,    ISZ    SCANTP        /BUMP THE LINE POINTER
  2441.     TAD I    SCANTP        /GET A CHAR FROM THE LINE
  2442.     SPA            /SKIP IF NOT EOL
  2443.     JMP    NOSP3        /EXIT IF EOL
  2444.     TAD    [-" !200]    /COMPARE WITH <SP>            /034 CJL
  2445.     SNA CLA            /SKIP IF NOT SPACE
  2446.     JMP    NOSP1        /LOOP TILL SPACE OR EOL
  2447.     ISZ    NOSP        /BUMP RETURN FOR SPACE FOUND
  2448. NOSP3,    CLA CLL            /INSURE CLEAR AC
  2449.     TAD    SCANTP        /GET POINTER
  2450.     JMP I    NOSP        /RETURN IN AC
  2451.  
  2452.  
  2453.  
  2454. /    ROUTINE TO FIND AN END CHAR IN A STRING.
  2455. /    ENTER ROUTINE WITH POINTER TO THE STRING IN THE AC.
  2456. /    EXIT WITH THE POINTER TO THE FIRST MINUS CHAR IN THE AC.
  2457.  
  2458. FNDEND,    0            /FIND END CHAR ROUTINE
  2459.     DCA    SCANTP        /PUT POINTER IN SCANTP
  2460. FEND1,    TAD I    SCANTP        /GET A CHAR FROM THE STRING
  2461.     SPA CLA            /SKIP IF NOT END
  2462.     JMP    FEND2        /EXIT IF END OF STRING
  2463.     ISZ    SCANTP        /BUMP THE POINTER
  2464.     JMP    FEND1        /LOOP TILL NON-END OF STRING
  2465.  
  2466. FEND2,    TAD    SCANTP        /GET POINTER TO NON-END OF STRING
  2467.     JMP I    FNDEND        /EXIT WITH POINTER IN AC
  2468.  
  2469. SCANTP,    0            /USED IN THE SCAN ROUTINES "SP", "NOSP", "FNDNUL"
  2470. /    ROUTINE TO LOOKUP THE KEY WORD POINTED TO BY THE AC IN THE    /014 CJL
  2471. /    TABLE POINTED TO BY PTABLE.
  2472.  
  2473. /    RETURN + 1 IF NO MATCH IS FOUND WITH AC = ENTRY VALUE.
  2474. /    RETURN + 2 IF NO KEYWORD IS FOUND (EOL DETECTED).
  2475. /    RETURN + 3 IF MATCH IS FOUND WITH THE NEXT PARSE POSITION IN THE LINE IN
  2476. /    THE AC AND THE DISPATCH ADDRESS FROM THE TABLE IN "KEYDSP".
  2477.  
  2478. KEYPRS,    .-.            /KEYWORD PARSE ROUTINE
  2479.     DCA    LOOK3        /SAVE IN CASE OF FAIL
  2480.     TAD    LOOK3        /RE-GET
  2481. /    AND    (137)        /MAKE CHARACTER UPPER-CASE, NO PARITY    /MD013
  2482.     JMS    SCNEL        /TRY TO SCAN OFF A KEYWORD
  2483.     JMP    KP45        /END OF LINE ENCOUNTERED
  2484.     TAD    PTABLE        /GET ADDRESS OF TABLE
  2485.     DCA    LOOK2        /STORE IN LOCAL POINTER
  2486.  
  2487. KP10,    TAD    SCAN1        /GET ADDRESS OF SCAN ELEMENT
  2488.     DCA    LOOK1        /INTO LOCAL POINTER
  2489.  
  2490. KP20,    TAD I    LOOK1        /GET A CHARACTER FROM THE SCAN ELEMENT
  2491.     CIA            /NEGATE FOR COMPARE
  2492.     TAD I    LOOK2        /GET A CHAR FROM THE TABLE ELEMENT
  2493.     SZA CLA            /SKIP IF MATCH
  2494.     JMP    KP90        /NO MATCH, SET TO LOOK AT NEXT TABLE ENTRY
  2495.     TAD    LOOK1        /CHECK IF ALL ENTERED CHARS MATCH
  2496.     CIA            /NEGATE TO COMPARE
  2497.     TAD    SCAN2        /HAVE WE MATCHED TO THE TERMINATOR?
  2498.     SNA CLA            /SKIP IF NO
  2499.     JMP    KP40        /YES, GOT ENOUGH TO MATCH
  2500.     ISZ    LOOK1        /MORE TO MATCH, BUMP SCAN ELEMENT POINTER
  2501.     ISZ    LOOK2        /BUMP TABLE ELEMENT POINTER
  2502.     JMP    KP20        /CONTINUE MATCH LOOP
  2503.  
  2504. KP40,    TAD    LOOK2        /GET CURRENT TABLE POINTER
  2505.     JMS    FNDEND        /FIND A NULL MARK
  2506.     IAC            /BUMP BY 1
  2507.     DCA    LOOK1        /STORE IN A POINTER
  2508.     TAD I    LOOK1        /GET DISPATCH ADDRESS
  2509.     DCA    KEYDSP        /PUT INTO DISPATCH ADDRESS
  2510.     ISZ    KEYPRS        /BUMP RETURN
  2511.     ISZ    KEYPRS        /BUMP AGAIN
  2512.     CLA CLL IAC        /AC = 1
  2513.     TAD    SCAN2        /GET POINTER TO END OF CURRENT KEY
  2514.     JMP I    KEYPRS        /RETURN
  2515.  
  2516. /    END OF LINE ENCOUNTERED ON PARSE.
  2517.  
  2518. KP45,    ISZ    KEYPRS        /BUMP RETURN ONCE FOR EOL
  2519.  
  2520. /    NO MATCHES IN THE TABLE HERE.
  2521.  
  2522. KP50,    TAD    LOOK3        /GET ORIGINAL AC
  2523.     JMP I    KEYPRS        /RETURN
  2524. /    FAILURE ON CURRENT TABLE ENTRY, SET FOR NEXT ENTRY (IF    THERE IS ONE)  AND TRY
  2525. /    AGAIN.
  2526.  
  2527. KP90,    TAD    LOOK2        /GET TABLE POINTER
  2528.     JMS    FNDEND        /FIND NEXT TABLE ENTRY
  2529.     IAC;IAC            /NEXT ENTRY IS 2 PAST THE NULL
  2530.     DCA    LOOK2        /RE-SET LOCAL TABLE POINTER
  2531.     TAD I    LOOK2        /CHECK END OF TABLE
  2532.     SNA CLA            /SKIP IF NOT END OF THE TABLE
  2533.     JMP    KP50        /TAKE NOT FOUND EXIT
  2534.     JMP    KP10        /TRY MATCH ON THIS ENTRY
  2535.  
  2536. LOOK1,    .-.            /TEMPORARY FOR KEYPRS            /014 CJL
  2537. LOOK2,    .-.            /TEMPORARY FOR KEYPRS            /014 CJL
  2538. LOOK3,    .-.            /TEMPORARY FOR KEYPRS            /014 CJL
  2539.  
  2540. /    ROUTINE TO MOVE WORDS OF MEMORY.                /014 CJL
  2541.  
  2542. /    CALLING SEQUENCE:
  2543.  
  2544. /    TAD    (DESTINATION)    /GET DESTINATION ADDRESS
  2545. /    DCA    MQ        /INTO MQ                /032 CJL
  2546. /    TAD    (-COUNT)    /GET -NUMBER OF WORDS TO MOVE
  2547. /    DCA    MOVE4        /SETUP MOVE COUNTER
  2548. /    TAD    (SOURCE)    /GET SOURCE ADDRESS
  2549. /    JMS I    (MOVE0)        /CALL MOVE ROUTINE
  2550. /    RETURN            /RETURNS HERE
  2551.  
  2552. MOVE0,    .-.            /MOVE ROUTINE                /014 CJL
  2553.     DCA    MOVE5        /STORE SOURCE ADDRESS IN LOCAL POINTER
  2554.     TAD    MQ        /GET DESTINATION ADDRESS        /032 CJL
  2555.     DCA    MOVE6        /STORE IN LOCAL POINTER
  2556. MOVE1,    TAD I    MOVE5        /GET A WORD FROM THE SOURCE
  2557.     DCA I    MOVE6        /MOVE TO DESTINATION
  2558.     ISZ    MOVE5        /BUMP SOURCE POINTER
  2559.     ISZ    MOVE6        /BUMP DESTINATION COUNTER
  2560.     ISZ    MOVE4        /BUMP COUNTER
  2561.     JMP    MOVE1        /LOOP
  2562.     JMP I    MOVE0        /DONE
  2563.  
  2564. MOVE5,    .-.            /SOURCE POINTER FOR "MOVE"
  2565. MOVE6,    .-.            /DESTINATION POINTER FOR "MOVE"
  2566.  
  2567.     PAGE                                /014 CJL
  2568. /    ROUTINE TO PARSE OFF A DEVICE NAME FROM THE COMMAND LINE.    /O14 CJL
  2569.  
  2570. /    CALLING SEQUENCE:
  2571.  
  2572. /    TAD    (POINTER)    /AC CONTAINS POINTER TO COMMAND LINE
  2573. /    JMS I    [DPARS]        /CALL ROUTINE
  2574. /    ERROR RETURN        /AC UNCHANGED
  2575. /    GOOD RETURN        /AC NOW POINTS TO REST OF LINE
  2576.  
  2577. /    DEVNUM=    DEVICE NUMBER TO USE.
  2578. /    ":" IS THE FIFTH CHARACTER IF NOT USING DEFAULT DEVICE.
  2579.  
  2580. DPARS,    .-.            /DEVICE PARSE ROUTINE            /014 CJL
  2581.     DCA    DPAR10        /SAVE INITIAL POINTER TO LINE
  2582.     TAD    DPAR10        /GET POINTER
  2583.     JMS I    [NOSP]        /GET PAST ANY LEADING SPACES
  2584.     JMP    DFDEV        /GOT END OF LINE, USE DEFAULT DEVICE
  2585.     DCA    DPAR11        /SAVE POINTER TO LINE
  2586.     DCA    DEVNAME        /INITIALIZE THE DEVICE NAME        /014 CJL
  2587.     DCA    DEVNAME+1    /FOR "INQUIRE" FUNCTION            /014 CJL
  2588.     TAD    (DEVNAM)    /GET ADDRESS OF WHERE TO PUT DEVICE NAME/014 CJL
  2589.     DCA    PACK6P        /STORE IN PACK6 POINTER
  2590.     DCA    PACK6F        /INITIALIZE PACK6 FLAG FOR LOW BYTE    /014 CJL
  2591.     TAD    (-4)        /SET UP A COUNTER            /014 CJL
  2592.     DCA    DPAR13        /FOR NO MORE THAN 4 CHARS
  2593. DPAR1,    TAD I    DPAR11        /GET A CHAR FROM THE LINE
  2594.     SNA            /SKIP IF NOT <EOL>            /014 CJL
  2595.     JMP    DFDEV        /GOT AN <EOL>, USE DEFAULT DEVICE    /014 CJL
  2596.     TAD    (-":!200)    /CHECK FOR ":"                /034 CJL
  2597.     SNA CLA            /SKIP IF NOT END OF DEVICE NAME
  2598.     JMP    DPAR2        /DEVICE NAME SET UP
  2599.     TAD I    DPAR11        /RE-GET CHAR
  2600.     ISZ    DPAR11        /BUMP LINE POINTER
  2601.     PACK6            /PACK SIX-BIT                /014 CJL
  2602.     ISZ    DPAR13        /BUMP CHARACTER COUNTER            /014 CJL
  2603.     JMP    DPAR1        /CAN CONTINUE
  2604.     TAD I    DPAR11        /GET CHARACTER AFTER THE FOURTH        /014 CJL
  2605.     TAD    (-":!200)    /CHECK FOR ":"                /034 CJL
  2606.     SZA CLA            /SKIP IF YES, ALL IS OK
  2607.     JMP    DFDEV        /USE THE DEFAULT DEVICE
  2608. DPAR2,    ISZ    DPAR11        /BUMP POINTER PAST ":"
  2609.     TAD    (DEVNAM)    /GET PARSED DEVICE NAME ADDRESS        /014 CJL
  2610.     JMP    DPAR4        /DO AN OS/8 "INQUIRE"
  2611.  
  2612. DFDEV,    CLA CLL            /CLEAN UP                /019 CJL
  2613.     TAD    DPAR10        /GET ORIGINAL AC FOR
  2614.     DCA    DPAR11        /RETURN POINTER
  2615. DPAR4,    JMS    DVNUM        /GET DEVICE NUMBER
  2616.     JMP    DPAR8        /DEVICE NAME ERROR
  2617.     DCA    DEVNUM        /RETURN FOR CALLING PROGRAM
  2618.     TAD    DPAR11        /GET CURRENT POINTER
  2619.     ISZ    DPARS        /BUMP RETURN
  2620.     JMP I    DPARS        /RETURN                    /014 CJL
  2621. DPAR8,    CLA CLL            /INSURE CLEAR AC
  2622.     TAD    DPAR10        /GET ORIGINAL AC
  2623.     JMP I    DPARS        /TAKE ERROR EXIT
  2624.  
  2625. DPAR10,    .-.            /TEMPORARY FOR DPARS            /014 CJL
  2626. DPAR11,    .-.            /TEMPORARY FOR DPARS            /014 CJL
  2627. DPAR13,    .-.            /TEMPORARY FOR DPARS            /014 CJL
  2628. DEFDEV,    DEVICE    DSK        /DEFAULT DEVICE
  2629. DEVNAM,    FILENAM    ZZZZZZ.ZZ    /DEFAULT FILENAME            /014 CJL
  2630.  
  2631. /    ROUTINE TO RETURN A DEVICE NUMBER FOR A DEVICE NAME.        /014 CJL
  2632.  
  2633. /    CALLING SEQUENCE:
  2634.  
  2635. /    TAD    (ADDRESS)    /AC=ADDRESS OF DEVICE NAME
  2636. /                /*OR* 0000 IF "DSK:" IS TO BE USED
  2637. /    ERROR RETURN        /INVALID DEVICE
  2638. /    GOOD RETURN        /AC=DEVICE NUMBER
  2639.  
  2640. DVNUM,    .-.            /DEVICE NUMBER ROUTINE            /014 CJL
  2641.     SNA            /SKIP IF DEVICE NAME SPECIFIED
  2642.     TAD    (DEFDEV)    /ELSE USE DEFAULT            /014 CJL
  2643.     DCA    DVNUM9        /SAVE IN LOCAL POINTER
  2644.     TAD I    DVNUM9        /GET FIRST TWO CHARACTERS OF NAME    /014 CJL
  2645.     DCA    DVNUM5        /PUT INTO CALL
  2646.     ISZ    DVNUM9        /BUMP POINTER
  2647.     TAD I    DVNUM9        /GET LAST TWO CHARACTERS OF NAME    /014 CJL
  2648.     DCA    DVNUM5+1    /PUT INTO CALL
  2649.     CIF    USRFLD        /GOTO USR FIELD                /020 CJL
  2650.     JMS I    [USRENTRY]    /CALL USER SERVICE ROUTINE        /035 CJL
  2651.     INQUIRE            /INQUIRE ABOUT HANDLER            /020 CJL
  2652. DVNUM5,    .-.            /FIRST TWO BYTES OF DEVICE NAME        /014 CJL
  2653.     .-.            /LAST TWO BYTES OF DEVICE NAME        /014 CJL
  2654.     0            /ENTRY POINT OF HANDLER RETURNED HERE
  2655.     JMP I    DVNUM        /ERROR, TAKE ERROR EXIT
  2656.     TAD    DVNUM5+1    /DEVICE NUMBER
  2657.     ISZ    DVNUM        /BUMP RETURN FOR NO ERROR
  2658.     JMP I    DVNUM        /RETURN
  2659.  
  2660. DVNUM9,    .-.            /LOCAL FOR "DVNUM"            /014 CJL
  2661. /    DEVICE HANDLER FETCH ROUTINE.                    /020 CJL
  2662.  
  2663. /    CALLING SEQUENCE:
  2664.  
  2665. /    TAD    (HANDLERNUMBER)    /AC CONTAINS DEVICE HANDLER NUMBER
  2666. /    JMS I    [HFETCH]    /CALL ROUTINE
  2667. /    ERROR RETURN        /COULDN'T LOAD HANDLER
  2668. /    GOOD RETURN        /HANDLER LOADED
  2669.  
  2670. /    IF THE HANDLER WAS LOADED, THEN HNDADR CONTAINS THE HANDLER ENTRY POINT.
  2671.  
  2672. HFETCH,    .-.            /HANDLER FETCH ROUTINE
  2673.     DCA    HANDNUMBER    /STORE HANDLER NUMBER
  2674.     TAD    (HNDLR+1)    /GET OUR BUFFER+(TWO PAGE ALLOWED)
  2675.     DCA    HADR        /STORE IN-LINE
  2676.     TAD    HANDNUMBER    /GET HANDLER NUMBER AGAIN
  2677.     CIF    USRFLD        /GOTO USR FIELD
  2678.     JMS I    [USRENTRY]    /CALL USER SERVICE ROUTINE        /035 CJL
  2679.     FETCH            /FETCH HANDLER
  2680. HADR,    .-.            /WILL BE OUR SUGGESTED ADDRESS+TWO PAGES ALLOWED
  2681.     SKP            /COULDN'T DO IT
  2682.     ISZ    HFETCH        /BUMP TO GOOD RETURN
  2683.     CLA CLL            /CLEAN UP
  2684.     TAD    HADR        /GET ACTUAL HANDLER ADDRESS
  2685.     DCA    HNDADR        /STASH THE POINTER
  2686.     JMP I    HFETCH        /RETURN EITHER WAY
  2687.  
  2688. HANDNUM,.-.            /HANDLER NUMBER TEMPORARY
  2689.  
  2690. /    ROUTINE TO HANDLE THE "FINISH" COMMAND.                /021 CJL
  2691.  
  2692. FINSRV,    0
  2693.     JMS I    [CREST2]    /SETUP CONSOLE OUTPUT ROUTINES        /025 CJL
  2694.     TAD    (MSEND)        /GET SEND MODE VALUE            /045 CJL
  2695.     DCA    KMODE        /SETUP PROPER MODE            /045 CJL
  2696.     FPACK            /FORMAT A PACKET
  2697.     SRVFIN            /PACKET DATA ADDRESS
  2698.     STGEN            /PACKET TYPE
  2699.  
  2700. FIN2,    SPACK            /SEND PACKET
  2701.     1            /AWAIT RESPONSE
  2702.     FIN20-2            /DISPATCH LIST FOR RESPONSE        /027 CJL
  2703.  
  2704. /    NAK OR UNDEFINED RESPONSE HERE
  2705.  
  2706. FIN5,    ISZ    RTRYC        /BUMP RE-TRY COUNTER
  2707.     JMP    FIN2        /GET RESPONSE AND TRY AGAIN
  2708.     TAD    (NOFINISH)    /FAILED, RETURN MESSAGE            /025 CJL
  2709.     JMP I    FINSRV
  2710.  
  2711. /    ACK HERE
  2712.  
  2713. FIN10,    ISZ    FINSRV        /BUMP FOR NON-ERROR EXIT
  2714.     JMP I    FINSRV        /DONE
  2715.  
  2716. FIN20,    STACK;    FIN10        /ACK
  2717.     STNAK;    FIN5        /NAK
  2718.     0
  2719.  
  2720. SRVFIN,    "F&137            /SERVER KERMIT COMMAND TO SHUT DOWN
  2721.     -1            /END OF DATA
  2722.  
  2723.     PAGE
  2724. /    ROUTINE TO PARSE OFF A FILE NAME.
  2725. /    FILE NAME TO BE PARSED MUST BE LETTERS OR DIGITS AND BE NO MORE THAN
  2726. /    SIX CHARS FOR THE NAME AND TWO CHARS FOR THE EXTENSION.
  2727.  
  2728. /    ENTER WITH:    AC =    POINTER TO FILE NAME TO PARSE.
  2729. /            FNPTR =    POINTER TO WHERE TO PUT THE PARSED FILE NAME.
  2730.  
  2731. /    NON-ERROR EXIT: AC =    POINTER TO REMAINDER OF COMMAND LINE.
  2732. /                RETURN THE CALL + 2.
  2733.  
  2734. /    ERROR EXIT:    AC =    ORIGINAL POINTER.
  2735. /                RETURN THE CALL + 1.
  2736.  
  2737. PFNAM,    0
  2738.     DCA    PFN10        /SAVE POINTER TO FILE NAME STRING
  2739.     TAD    FNPTR        /GET POINTER TO FILE NAME BLOCK
  2740.     DCA    MQ        /SET FOR "CLEAR" ROUTINE        /032 CJL
  2741.     TAD    (-4        /FOUR WORDS TO CLEAR OUT
  2742.     CLEAR            /INIT THE FILE NAME BLOCK
  2743.     TAD    PFN10        /GET THE STRING POINTER
  2744.     JMS I    [NOSP]        /GET PAST ANY LEADING SPACES
  2745.     JMP    PFNAM9        /GOT EOL, NO FILE NAME
  2746.     DCA    PFN11        /SAVE POINTER
  2747.     TAD    FNPTR        /GET FILE NAME BLOCK POINTER
  2748.     DCA    PACK6P        /SET UP THE "PACK6" POINTER
  2749.     DCA    PACK6F        /INIT THE "PACK6" FLAG
  2750.     TAD    (-6        /MAX OF 6 CHARS FOR FILE NAME
  2751.     DCA    PFN15        /PUT INTO COUNTER
  2752.     DCA    WILDF        /INIT THE WILD CARD FLAG
  2753.     JMS    NAM        /MOVE AND PACK FILE NAME
  2754.     TAD I    PFN11        /GET THE TERM CHAR
  2755.     SPA            /SKIP IF NOT EOL
  2756.     JMP    PFNAM7        /EOL MEANS END OF FILE NAME
  2757.     TAD    (-".!200)    /COMPARE TO "."                /034 CJL
  2758.     SNA            /SKIP IF NO
  2759.     JMP    PFNAM3        /GO HANDLE EXTENSION
  2760.     TAD    (-" +".)    /COMPARE TO <SP>            /034 CJL
  2761.     SZA CLA            /SKIP IF WAS A SPACE
  2762.     JMP    PFNAM9        /NOT A SPACE, GOT AN ERROR
  2763.     JMP    PFNAM7        /IS A SPACE, END OF FILE NAME
  2764. PFNAM3,    ISZ    PFN11        /BUMP PAST THE "."
  2765.     TAD    FNPTR        /GET FILE NAME BLOCK POINTER
  2766.     TAD    (3)        /POINT TO EXTENSION            /032 CJL
  2767.     DCA    PACK6P        /SET "PACK6" POINTER
  2768.     DCA    PACK6F        /INIT "PACK6" FLAG
  2769.     NL7776            /SET -2                    /032 CJL
  2770.     DCA    PFN15        /COUNTER FOR 2 EXT CHARS
  2771.     JMS    NAM        /NOW DO THE EXTENSION
  2772.     TAD I    PFN11        /GET THE TERM CHAR
  2773.     SPA            /SKIP IF NOT EOL
  2774.     JMP    PFNAM7        /GOT COMPLETE FILE NAME HERE
  2775.     TAD    [-" !200]    /COMPARE TO <SP>            /034 CJL
  2776.     SZA CLA            /SKIP IF IT WAS
  2777.     JMP    PFNAM9        /GOT A FILE NAME ERROR
  2778. PFNAM7,    ISZ    PFNAM        /BUMP RETURN FOR GOOD FILE NAME
  2779.     CLA CLL            /INSURE CLEAR AC
  2780.     TAD    PFN11        /GET CURRENT STRING POINTER
  2781.     JMP I    PFNAM        /AND RETURN
  2782.  
  2783. PFNAM9,    CLA CLL            /INSURE CLEAR AC
  2784.     TAD    PFN10        /GET ORIGINAL STRING POINTER
  2785.     JMP I    PFNAM        /TAKE ERROR RETURN
  2786.  
  2787. PFN10,    0            /TEMP FOR PFNAM ROUTINE
  2788. PFN11,    0            /TEMP FOR PFNAM ROUTINE
  2789. PFN15,    0            /TEMP FOR PFNAM ROUTINE
  2790. /    LOCAL ROUTINE TO "PFNAM" TO MOVE IN THE FILE NAME OR FILE EXTENSION.
  2791. /    ENTER WITH "PFN11" POINTING TO WHERE TO GET THE NAME OR EXTENSION.
  2792. /    AND "PFN15" EQUAL TO THE MAX NUMBER OF CHARS (6 FOR NAME, 2 FOR EXT).
  2793. /    THIS ROUTINE CHECKS FOR WILD CARD CHARS "*" AND "?" AND PUTS THE
  2794. /    "?" CHAR IN FOR ANY CHARS IN THE NAME THAT ARE WILD.  ALSO IF ANY
  2795. /    WILD CARD CHARS ARE FOUND THE FLAG "WILDC" IS SET SO BEFORE PARSING
  2796. /    ANY FILE NAME THE "WILDC" FLAG SHOULD BE INITIALIZED.
  2797.  
  2798. NAM,    0
  2799. NAM0,    TAD I    PFN11        /GET A CHAR FROM THE STRING
  2800.     JMS I    (ALPNUM)    /MUST BE ALPHA OR NUMBER
  2801.     SKP            /NOT A ALPHA NUMERIC
  2802.     JMP    NAM3        /IS ALPHA NUMERIC
  2803.     TAD    (-"?!200)    /COMPARE TO "?"                /034 CJL
  2804.     SNA            /SKIP IF NO
  2805.     JMP    NAM2        /YES, JUST PUT IT IN
  2806.     TAD    (-"*+"?)    /COMPARE TO "*"                /034 CJL
  2807.     SZA CLA            /SKIP IF YES
  2808.     JMP I    NAM        /TAKE THE FILE NAME ERROR EXIT
  2809.     ISZ    WILDF        /SET FLAG FOR WILD CARD FOUND
  2810. NAM1,    TAD    ["?&77]        /GET WILD CARD CHARACTER        /034 CJL
  2811.     PACK6            /PUT IN NAME BLOCK
  2812.     ISZ    PFN15        /BUMP CHAR COUNTER
  2813.     JMP    NAM1        /LOOP TILL ALL FILLED
  2814.     ISZ    PFN11        /BUMP THE STRING POINTER
  2815.     JMP    NAM9        /EXIT WITH "PFN11" POINTING TO NEXT CHAR
  2816. NAM2,    ISZ    WILDF        /SET FLAG FOR WILD CARD FOUND
  2817.     TAD    ["?&77]        /GET WILD CARD CHARACTER        /034 CJL
  2818. NAM3,    PACK6            /PUT THE CHAR INTO THE FILE NAME BLOCK
  2819.     ISZ    PFN11        /BUMP THE STRING POINTER
  2820.     ISZ    PFN15        /BUMP THE CHAR COUNTER
  2821.     JMP    NAM0        /LOOP
  2822.  
  2823. NAM4,    TAD I    PFN11        /NOW GET TO A TERMINATOR CHAR
  2824.     JMS I    (ALPNUM)    /BY FINDING FIRST NON-ALPHNUMERIC
  2825.     JMP    NAM9        /NOW WE CAN QUIT
  2826.     CLA CLL            /IGNORE EXCESS CHARS
  2827.     ISZ    PFN11        /BUMP THE STRING POINTER
  2828.     JMP    NAM4        /LOOP
  2829.  
  2830. NAM9,    CLA CLL            /LEAVE WITH A CLEAR AC
  2831.     JMP I    NAM        /RETURN
  2832. /    ROUTINE TO SEND A PACKET.
  2833. /    ENTER WITH ADDRESS OF PACKET DATA IN CALL + 1.
  2834. /    AND TYPE OF PACKET IN CALL + 2.
  2835. /    EXIT CALL + 4 IF ACK RETURNED.
  2836. /    EXIT CALL + 3 IF NAK OR OTHER PACKET TYPE RETURNED.
  2837.  
  2838. SNDP,    0
  2839.     TAD I    SNDP        /GET DATA ADDRESS
  2840.     DCA    SNDP1        /STORE IN CALL
  2841.     ISZ    SNDP        /BUMP POINTER
  2842.     TAD I    SNDP        /GET PACKET TYPE
  2843.     DCA    SNDP2        /STORE IN CALL
  2844.     ISZ    SNDP        /BUMP
  2845.  
  2846.     FPACK            /FORMAT A PACKET
  2847. SNDP1,    0            /DATA ADDRESS GOES HERE
  2848. SNDP2,    0            /PACKET TYPE GOES HERE
  2849.  
  2850. SNDP3,    SPACK            /SEND A DATA PACKET
  2851.     1            /GET RESPONSE
  2852.     SNDP9-2            /RESPONSE DISPATCH TABLE ADDRESS    /027 CJL
  2853.  
  2854. /    HERE ON NOT "NAK" OR "ACK" RESPONSE.
  2855.  
  2856.     SKP
  2857.  
  2858. /    HERE ON "ACK".
  2859.  
  2860. SNDP5,    ISZ    SNDP        /BUMP RETURN
  2861.  
  2862.     ISZ    SNDP        /BUMP RETURN
  2863.     JMP I    SNDP        /EXIT
  2864.  
  2865. /    HERE ON NAK.
  2866.  
  2867. SNDP4,    ISZ    RTRYC        /BUMP THE RE-TRY COUNTER
  2868.     JMP    SNDP3        /RE-TRY
  2869.     JMP I    SNDP        /TAKE RETURN + 3
  2870.  
  2871. SNDP9,    STACK;    SNDP5        /ACK
  2872.     STACK;    SNDP4        /NAK
  2873.     0
  2874.  
  2875.     PAGE                                /014 CJL
  2876.     IFZERO    1    <
  2877.  
  2878. /    ROUTINE TO PARSE OFF A DECIMAL NUMBER.
  2879. /    ENTER ROUTINE WITH A POINTER TO THE PARSE LINE IN THE AC.
  2880. /    EXIT:    RETURN + 1 FOR NO NUMBER.
  2881. /        RETURN + 2 FOR INVALID NUMBER.
  2882. /        RETURN + 3 FOR VALID NUMBER.
  2883.  
  2884. /    IN ALL CASES ON RETURN THE AC WILL CONTAIN A POINTER TO THE NEXT CHAR TO PARSE
  2885. /    IN THE LINE.  ANY NUMBER  PARSED  WILL BE CONVERTED TO BINARY AND PUT INTO THE
  2886. /    REGISTER "BININP".
  2887.  
  2888. DECPRS,    0
  2889.     JMS I    [NOSP]        /GET PAST ANY LEADING SPACES
  2890.     JMP I    DECPRS        /GOT AN END OF LINE, AC POINTS TO IT
  2891.     DCA    DP10        /SAVE POINTER TO LINE
  2892.     TAD    DP10        /RE-GET POINTER TO LINE
  2893.     DCA    DP11        /STORE IN OUR LINE POINTER
  2894.     DCA    BININP        /INIT BINARY REGISTER
  2895.     DCA    DP13        /INIT PARSED NUMBER FLAG
  2896.     SKP            /SKIP INTO LOOP BELOW
  2897. DP1,    ISZ    DP11        /BUMP THE LINE POINTER
  2898.     TAD I    DP11        /GET A CHAR FROM THE LINE
  2899.     JMS    DECCK        /CHECK FOR PROPER ASCII DECIMAL
  2900.     JMP    DP5        /NOT PROPER ASCII DECIMAL
  2901.     ISZ    DP13        /FLAG NUMBER INPUT
  2902.     TAD    (-"0        /MAKE BINARY
  2903.     DCA    DP12        /AND STORE
  2904.     TAD    BININP        /GET PREVIOUS INPUT
  2905.     JMS    MUL10        /AND MULTIPLY TIMES 10
  2906.     SZL            /SKIP IF NO OVERFLOW ENCOUNTERED
  2907.     JMP    DP6        /GOT AN OVERFLOW ERROR
  2908.     TAD    DP12        /COMBINE WITH CURRENT INPUT
  2909.     SZL            /SKIP IF NO OVERFLOW ERROR
  2910.     JMP    DP6        /GOT AN OVERFLOW ERROR
  2911.     DCA    BININP        /RETURN ACCUMULATED SUM
  2912.     JMP    DP1        /LOOP
  2913.  
  2914. DP5,    CLA CLL            /AC MAY NOT BE CLEAR
  2915.     TAD    DP13        /ANY NUMBERS INPUT YET?
  2916.     SNA CLA            /SKIP IF YES
  2917.     JMP    DP6        /TAKE THE NO NUMBER INPUT RETURN
  2918.     ISZ    DECPRS        /BUMP THE RETURN
  2919.     ISZ    DECPRS        /TWICE FOR GOOD NUMBER INPUT RETURN
  2920.     TAD    DP11        /GET POINTER TO LINE
  2921.     JMP I    DECPRS        /AND RETURN
  2922.  
  2923. DP6,    CLA CLL            /AC MAY NOT BE CLEAR
  2924.     TAD    DP10        /GET ORIGINAL LINE POINTER
  2925.     ISZ    DECPRS        /BUMP THE RETURN
  2926.     JMP I    DECPRS        /TAKE THE INVALID NUMBER RETURN
  2927.  
  2928.             >
  2929.     IFZERO    1    <
  2930.  
  2931. DP10,    0            /TEMP FOR DECPRS
  2932. DP11,    0            /TEMP FOR DECPRS
  2933. DP12,    0            /TEMP FOR DECPRS
  2934. DP13,    0            /TEMP FOR DECPRS
  2935.  
  2936. /    ROUTINE TO MULTIPLY THE VALUE OF THE AC TIMES 10.
  2937. /    VALUE IN THE AC IS ASSUMED BINARY.
  2938.  
  2939. /    THE NUMBER IS RETURNED IN THE AC.  IF THE LINK IS SET THE MULTIPLY
  2940. /    OVERFLOWED 12 BITS.
  2941.  
  2942. MUL10,    0
  2943.     DCA    MULTMP        /SAVE THE NUMBER
  2944.     TAD    MULTMP        /GET THE NUMBER BACK
  2945.     CLL RTL            /MULTIPLY TIMES 4
  2946.     TAD    MULTMP        /TIMES 5
  2947.     SNL            /SKIP IF ALREADY OVERFLOWED        /025 CJL
  2948.     RAL            /TIMES 10
  2949.     JMP I    MUL10        /RETURN NUMBER IN AC
  2950.                 /THE LINK HAS ANY OVERFLOW
  2951.  
  2952. MULTMP,    0            /TEMP STORAGE FOR MUL10 ROUTINE
  2953.  
  2954.  
  2955.  
  2956. /    ROUTINE TO CHECK FOR A VALID ASCII DECIMAL VALUE.
  2957.  
  2958. /    ENTER WITH ASCII CHAR IN THE AC.
  2959. /    EXIT RETURN + 1 IF NON-VALID ASCII DECIMAL WITH CHAR IN AC.
  2960. /    EXIT RETURN + 2 IF VALID ASCII DECIMAL WITH CHAR IN AC.
  2961.  
  2962. DECCK,    0
  2963.     DCA    DECCK5        /STORE THE CHAR TO CHECK
  2964.     TAD    DECCK5        /GET THE CHAR
  2965.     TAD    (-"0        /CHECK FOR LESS THAN 0
  2966.     SPA            /SKIP IF NOT LESS THAN 0
  2967.     JMP    DECCK1        /NON-ASCII DECIMAL
  2968.     TAD    ("0-"9-1    /CHECK GREATER THAN 9
  2969.     SMA CLA            /SKIP IF LE 9
  2970.     JMP    DECCK1        /INVALID ASCII DECIMAL
  2971.     ISZ    DECCK        /BUMP RETURN FOR VALID ASCII DECIMAL
  2972. DECCK1,    TAD    DECCK5        /RE-GET ORIGINAL CHAR IN AC
  2973.     JMP I    DECCK        /RETURN
  2974.  
  2975.  
  2976. DECCK5,    0            /TEMP FOR "DECCK" ROUTINE
  2977.  
  2978.             >
  2979. /    ROUTINE TO INPUT A COMMAND LINE FROM THE KEYBOARD.        /013/014 CJL
  2980.  
  2981. LININP,    0
  2982.     TAD    (LINBUF        /GET ADDRESS OF LINE BUFFER
  2983.     DCA    LIN50        /STORE IN A POINTER
  2984. LIN1,    JMS I    (INPUT)        /GET A CHARACTER FROM THE KEYBOARD    /044 CJL
  2985.     TAD    (-CNTRLM)    /COMPARE TO <CR>            /034 CJL
  2986.     SNA            /SKIP IF NOT A RETURN
  2987.     JMP    LIN2        /LINE IS INPUT
  2988.     TAD    (-DELETE+CNTRLM)/COMPARE TO <DEL>            /034 CJL
  2989.     SNA CLA            /SKIP IF NOT A DELETE
  2990.     JMP    LIN5        /OFF TO HANDLE A DELETE
  2991.     TAD    LIN50        /GET VALUE OF LINE POINTER
  2992.     TAD    (-LINBUF-LINSIZ    /COMPARE WITH END OF LINE BUFFER
  2993.     SMA CLA            /SKIP IF ROOM IN LINE BUFFER
  2994.     JMP    LIN10        /BEEP FOR FULL BUFFER
  2995.     TAD    INCHAR        /GET THE KEYBOARD CHARACTER AGAIN    /044 CJL
  2996.     TAD    (-140)        /COMPARE TO LOWER-CASE LIMIT        /034 CJL
  2997.     SMA            /SKIP IF BELOW LIMIT            /034 CJL
  2998.     TAD    [-40]        /ELSE MAKE IT UPPER-CASE        /034 CJL
  2999.     TAD    (140)        /RESTORE THE CHARACTER            /034 CJL
  3000.     DCA I    LIN50        /STORE IN THE LINE BUFFER
  3001.     ISZ    LIN50        /BUMP THE LINE BUFFER POINTER
  3002.     NL7777            /SET -1                    /032 CJL
  3003.     DCA I    LIN50        /TERMINATE THE LINE
  3004.     TAD    INCHAR        /GET THE LATEST KEYBOARD CHARACTER BACK    /044 CJL
  3005.     JMS I    [P7ECHO]    /PRINT IT                /043 CJL
  3006.     JMP    LIN1        /LOOP TILL A RETURN TYPED
  3007.  
  3008. LIN2,    NL7777            /SET -1                    /032 CJL
  3009.     DCA I    LIN50        /INSURE STRING TERMINATED
  3010.     JMS I    [SCRIBE]    /DO A                     /025 CJL
  3011.     CRLF            /<CR>, <LF>                /025 CJL
  3012.     JMP I    LININP        /DONE
  3013.  
  3014. /    HANDLE A DELETE TYPED IN
  3015.  
  3016. LIN5,    TAD    LIN50        /FIND OUT FIRST IF...
  3017.     TAD    (-LINBUF    /WE ARE AT THE BEGINNING OF THE LINE
  3018.     SNA CLA            /SKIP IF NO
  3019.     JMP    LIN1        /JUST IGNORE THE DELETE
  3020.     NL7777            /SET -1                    /032 CJL
  3021.     TAD    LIN50        /GET THE LINE POINTER
  3022.     DCA    LIN50        /RETURN BACKED UP
  3023.     DCA I    LIN50        /ZERO THE CHAR
  3024.     TAD    (CNTRLH)    /GET A <BS>                /025 CJL
  3025.     JMS I    [P7ECHO]    /PRINT IT                /043 CJL
  3026.     TAD    [" &177]    /GET A <SPACE>                /025 CJL
  3027.     JMS I    [P7ECHO]    /PRINT IT                /043 CJL
  3028.     TAD    (CNTRLH)    /GET A <BS>                /025 CJL
  3029.     JMS I    [P7ECHO]    /PRINT IT                /043 CJL
  3030.     JMP    LIN1        /BACK TO INPUT
  3031. /    HANDLE FULL LINE BUFFER HERE
  3032.  
  3033. LIN10,    CLA CLL            /ENSURE CLEAR AC
  3034.     TAD    [CNTRLG]    /GET A <BEL> CHARACTER            /025 CJL
  3035.     JMS I    [P7ECHO]    /PRINT IT                /043 CJL
  3036.     JMP    LIN1        /WAIT FOR EITHER RETURN OF DELETE KEY
  3037.  
  3038. LIN50,    0            /TEMP POINTER FOR "LININP" ROUTINE
  3039. /    ROUTINE TO PACK TWO SIX-BIT CHARACTERS INTO A WORD.        /032 CJL
  3040.  
  3041. /    CALLING SEQUENCE:
  3042.  
  3043. /    [PACK6PTR => CHARACTER PACKING AREA].
  3044. /    [PACK6FLAG=0 IF PACKING INTO HIGH-ORDER BYTE.
  3045. /    PACK6FLAG=4000 IF PACKING INTO LOW-ORDER BYTE].
  3046.  
  3047. /    TAD    CHAR        /AC CONTAINS CHARACTER TO BE PACKED
  3048. /    PACK6            /CALL VIA PAGE ZERO POINTER
  3049.  
  3050. /    RETURNS WITH AC CLEAR AND PACK6PTR AND PACK6FLAG UPDATED FOR NEXT PACKING.
  3051.  
  3052. PACK60,    .-.            /PACK SIX-BIT ROUTINE
  3053.     AND    [77]        /JUST SIX-BIT
  3054.     DCA    PACK6TEMP    /SAVE FOR NOW
  3055.     NL4000            /SET INVERSION BIT
  3056.     TAD    PACK6FLAG    /REVERSE THE FLAG
  3057.     DCA    PACK6FLAG    /STORE BACK
  3058.     SZL            /WAS IT CLEAR?
  3059.     JMP    PACKIT        /NO, GO DO LOW-ORDER
  3060.     TAD    PACK6TEMP    /GET THE CHARACTER
  3061.     RTL;RTL;RTL        /MOVE UP
  3062.     DCA I    PACK6PTR    /STORE IT
  3063.     JMP I    PACK60        /RETURN
  3064.  
  3065. PACKIT,    TAD I    PACK6PTR    /GET PREVIOUS HIGH-ORDER HALFWORD
  3066.     TAD    PACK6TEMP    /ADD ON LATEST
  3067.     DCA I    PACK6PTR    /STORE BOTH
  3068.     ISZ    PACK6PTR    /BUMP FOR NEXT TIME
  3069.     JMP I    PACK60        /RETURN
  3070.  
  3071. PACK6TE,.-.            /PACK6 TEMPORARY
  3072. /    ROUTINE TO COMPARE TWO FILE NAMES FOR EQUALITY.
  3073. /    THE ROUTINE WILL CHECK EACH OF THE 8 FILE NAME CHARS AND IF A
  3074. /    CHAR IN THE FIRST FILE NAME (THE ONE WE ARE LOOKING FOR) CONTAINS
  3075. /    A "?" IT WILL MATCH ON THE SECOND FILE NAME CHAR.
  3076. /    ENTER WITH "FCMP1" POINTING TO THE FILE NAME TO FIND, AND "FCMP2"
  3077. /    POINTING TO THE FILE NAME TO TRY AND MATCH.  EXIT + 1 IF NO MATCH
  3078. /    AND EXIT + 2 IF MATCH.  (IF NON-ZERO AC ON ENTRY, THE AC IS ASSUMED
  3079. /    TO HAVE THE VALUE FOR "FCMP2".)
  3080.  
  3081. FMATCH,    0
  3082.     SZA            /SKIP IF NO ARGUMENT IN AC
  3083.     DCA    FCMP2        /THIS ARGUMENT CAME IN THE AC
  3084.     TAD    FCMP1        /GET ADDRESS OF FIRST FILE NAME BLOCK
  3085.     DCA    GET6P        /STORE IN A POINTER
  3086.     DCA    GET6F        /INIT FLAG FOR "GET6" ROUTINE
  3087.     TAD    FCMP2        /GET ADDRESS OF SECOND FILE NAME BLOCK
  3088.     DCA    FMATP        /STORE IN A LOCAL POINTER
  3089.     DCA    FMATF        /INIT LOCAL FLAG
  3090.     TAD    (-10        /8 CHARS TO DO
  3091.     DCA    FMATC        /STORE IN LOCAL COUNTER
  3092.  
  3093. FMAT1,    NL4000            /SET 4000                /032 CJL
  3094.     TAD    FMATF        /GET FLAG
  3095.     DCA    FMATF        /RETURN FLAG, LINK CONTAINS STATUS
  3096.     TAD I    FMATP        /GET A WORD FROM THE SECOND NAME
  3097.     SZL            /SKIP IF HIGH-ORDER WANTED NOW        /032 CJL
  3098.     JMP    FSWIT        /JUMP IF LOW-ORDER WANTED NOW        /032 CJL
  3099.     RTR;RTR;RTR        /MOVE DOWN HIGH-ORDER            /032 CJL
  3100.     SKP            /DON'T BUMP YET                /032 CJL
  3101. FSWIT,    ISZ    FMATP        /BUMP THE POINTER            /032 CJL
  3102.     AND    [77]        /KEEP ONLY BOTTOM 6 BITS        /016 CJL
  3103.     DCA    FMATT        /STORE IN A TEMP
  3104.     GET6            /NOW GET A CHAR FROM FIRST NAME
  3105.     TAD    (-77        /CHECK IF WILD
  3106.     SNA            /SKIP IF NO
  3107.     JMP    FMAT2        /NO MATCH CHECK ON A WILD CARD
  3108.     TAD    [77]        /RESTORE THE CHARACTER            /014/016 CJL
  3109.     CIA            /NEGATE FOR COMPARE
  3110.     TAD    FMATT        /COMPARE WITH SECOND FILE NAME
  3111.     SZA CLA            /SKIP IF IS A MATCH
  3112.     JMP I    FMATCH        /THIS IS NOT A MATCH
  3113.  
  3114. FMAT2,    ISZ    FMATC        /BUMP COUNTER
  3115.     JMP    FMAT1        /LOOP, MORE TO CHECK
  3116.     ISZ    FMATCH        /BUMP RETURN FOR MATCH
  3117.     JMP I    FMATCH        /GOT A MATCH
  3118.  
  3119. FMATP,    0            /POINTER FOR "FMATCH"
  3120. FMATC,    0            /COUNTER FOR "FMATCH"
  3121. FMATF,    0            /FLAG FOR "FMATCH"
  3122. FMATT,    0            /TEMP FOR "FMATCH"
  3123. FCMP1,    0            /POINTER FOR FIRST FILE NAME BLOCK
  3124. FCMP2,    0            /POINTER FOR SECOND FILE NAME BLOCK
  3125.     PAGE                                /014 CJL
  3126. /    REMOTE LINK INPUT ROUTINE.
  3127. /    CALL = RPACK.
  3128.  
  3129. ILINK,    0
  3130.     TAD    RETRY        /SET UP A RE-TRY COUNT
  3131.     DCA    ILINK6        /RE-TRY COUNT FOR INPUT ERRORS
  3132.  
  3133. ILINK0,    JMS I    (GETSOH)    /FIRST GET THE "SOH" BYTE
  3134.     JMP    ILINK2        /RETURN HERE ON TIME-OUT
  3135.     DCA    ILINK9        /INIT CHECKSUM REGISTER
  3136.     TAD    [RRLEN]        /GET REMOTE RECEIVE BUFFER ADDRESS
  3137.     DCA    ILINK8        /STORE IN LOCAL POINTER
  3138.     JMS I    (GETIR)        /GET A CHAR
  3139.     JMP    ILINK2        /GOT A RETURN OR TIME-OUT
  3140.     DCA I    ILINK8        /STORE LENGTH IN BUFFER
  3141.     TAD I    ILINK8        /GET LENGTH CHAR BACK
  3142.     TAD    (-40-1        /CHAR FUNCTION - LENGTH BYTE
  3143.     CIA            /NEGATE FOR COUNTER
  3144.     DCA    ILINK7        /STORE IN LOCAL COUNTER
  3145.  
  3146. ILINK1,    ISZ    ILINK8        /BUMP POINTER
  3147.     JMS I    (GETIR)        /GET NEXT CHAR
  3148.     JMP    ILINK2        /GOT A RETURN
  3149.     DCA I    ILINK8        /STORE IN BUFFER
  3150.     ISZ    ILINK7        /BUMP COUNTER
  3151.     JMP    ILINK1        /LOOP
  3152.  
  3153.     ISZ    ILINK8
  3154.     NL7777            /SET -1                    /032 CJL
  3155.     DCA I    ILINK8
  3156.     TAD    ILINK9        /GET CALCULATED CHECKSUM
  3157.     JMS I    [CKSUM]        /CALCULATE 1 BYTE CHECKSUM
  3158.     CIA            /NEGATE FOR COMPARE
  3159.     DCA    ILINK7        /STORE TEMP
  3160.     JMS I    (GETIR)        /NOW GET CHECKSUM
  3161.     JMP    ILINK2        /GOT A RETURN
  3162.     TAD    ILINK7        /COMPARE WITH CALCULATED CHECKSUM
  3163.     SNA CLA            /SKIP IF NOT SAME
  3164.     JMP    ILINK4        /ARE SAME
  3165.  
  3166. ILINK2,    CLA CLL            /INSURE CLEAR AC
  3167.     ISZ    ILINK6        /BUMP RE-TRY COUNTER
  3168.     JMP    ILINK3        /CAN RE-TRY
  3169.     TAD    (RPERMSG)    /GET MESSAGE FOR FATAL PACKET ERROR    /025 CJL
  3170.     JMP I    [CLOOP7]    /AND ABORT THE MESS
  3171.  
  3172. ILINK3,    TAD    ABFLAG        /GET ABORT FLAG                /044 CJL
  3173.     SZA CLA            /SKIP IF NO
  3174.     JMP I    (ABORT)        /ABORT THIS
  3175.     JMS I    (SNDNAK)    /SEND BACK A "NAK"
  3176.     JMP    ILINK0        /AND TRY AGAIN
  3177. ILINK4,    TAD    ABFLAG        /GET ABORT FLAG                /044 CJL
  3178.     SNA CLA            /SKIP IF YES
  3179.     JMP I    ILINK        /NOPE, RETURN
  3180.     JMP I    (ABORT)
  3181.  
  3182. ILINK6,    0            /LOCAL TO "ILINK"
  3183. ILINK7,    0            /LOCAL TO "ILINK"
  3184. ILINK8,    0            /LOCAL TO "ILINK"
  3185. ILINK9,    0            /LOCAL TO "ILINK"
  3186.  
  3187. /    HELP COMMAND ROUTINE.                        /024 CJL
  3188.  
  3189. HELPSRV,.-.            /HELP ROUTINE
  3190.     JMS I    [CRESET]    /RESET CONSOLE ROUTINE STUFF
  3191.     JMS I    [SCRIBE]    /GIVE THEM THE
  3192.     HELPMSG            /HELP MESSAGE
  3193.     TAD    ESCHAR        /GET THE ESCAPE CHARACTER
  3194.     JMS I    [ESCPRNT]    /PRINT IT
  3195.     JMS I    [SCRIBE]    /DO A
  3196.     CRLF            /<CR>, <LF>
  3197.     ISZ    HELPSRV        /BUMP PAST ERROR RETURN
  3198.     JMP I    HELPSRV        /RETURN
  3199.  
  3200. /    ROUTINE TO PRINT THE DATA IN THE RECEIVED PACKET.
  3201.  
  3202. PRIPAK,    0
  3203.     PRI8B;    RRDTA        /PRINT THE DATA
  3204.     JMS I    [SCRIBE]    /DO A                    /025 CJL
  3205.     CRLF            /<CR>, <LF>                /025 CJL
  3206.     JMP I    PRIPAK        /DONE
  3207.  
  3208.     PAGE                                /014 CJL
  3209. /    ROUTINE TO SERVICE A SEND REQUEST.
  3210.  
  3211. SNDSRV,    0
  3212.     JMS I    [CREST2]    /SETUP CONSOLE OUTPUT ROUTINES        /025 CJL
  3213.     TAD    (MSEND)        /FIRST SET MODE TO SEND
  3214.     DCA    KMODE        /PUT INTO MODE FLAG
  3215.     TAD    LPTR        /GET CURRENT LINE POINTER
  3216.     DCA    PRSERR        /SAVE LINE POSITION
  3217.     TAD    PRSERR        /GET LINE POSITION
  3218.     JMS I    [DPARS]        /TRY TO PARSE OFF A DEVICE NAME
  3219.     JMS    SNDERROR    /RETURN A DEVICE NAME ERROR        /026 CJL
  3220. SER1,    DCA    PRSERR        /SAVE LINE POINTER            /026 CJL
  3221.     TAD    (FNBLK        /GET FILE NAME BLOCK ADDRESS
  3222.     DCA    FNPTR        /STORE IN POINTER
  3223.     TAD    PRSERR        /GET STRING POINTER
  3224.     JMS I    [PFNAM]        /PARSE OFF THE FILE NAME
  3225.     JMS    SNDERROR    /FILE NAME PARSE ERROR            /026 CJL
  3226. SER2,    DCA    PRSERR        /SAVE THE STRING POINTER        /026 CJL
  3227.     TAD    PRSERR        /GET THE STRING POINTER
  3228.     JMS I    [NOSP]        /FIND THE END OF STRING
  3229.     SKP            /GOT END OF STRING HERE
  3230.     JMS    SNDERROR    /SYNTAX ERROR                /026 CJL
  3231. SER3,    DCA    PRSERR        /RETURN POINTER                /026 CJL
  3232.     TAD    DEVNUM        /GET THE DEVICE NUMBER PARSED
  3233.     JMS I    [HFETCH]    /FETCH A HANDLER FOR THIS
  3234.     JMS    SNDERROR    /HANDLER FETCH ERROR            /026 CJL
  3235. SER4,    DCA    FILFND        /INIT FILE FOUND FLAG
  3236.     DCA    INIFLG        /CLEAR THE INIT DONE FLAG
  3237.     NL0001            /INITIALIZE DIRECTORY            /028 CJL
  3238.     DCA    SLFLAG        /LOOKUP FLAG                /028 CJL
  3239. SNDSV1,    TAD    (FNBLK        /GET FILE NAME BLOCK ADDRESS
  3240.     DCA I    (FCMP1)        /SET FOR FILE TO FINE
  3241.     TAD    SLFLAG        /GET DIRECTORY FLAG            /028 CJL
  3242.     JMS I    (LUKUP)        /FIND A MATCH FOR THIS FILE
  3243.     JMS    SNDERROR    /DIRECTORY I/O ERROR            /026 CJL
  3244. SER5,    JMP    S00        /FILE NOT FOUND                /026 CJL
  3245.     ISZ    FILFND        /BUMP FILE FOUND COUNT
  3246.     DCA    SLFLAG        /DON'T INITIALIZE LOOKUP AGAIN
  3247.     JMS I    (SNDPRO)    /PROCESS THIS FILE FOR SEND
  3248.     JMS    SNDERROR    /ERROR IN FILE SEND PROCESS        /026 CJL
  3249. SER6,    TAD    WILDF        /WAS WILD CARD FILE SPEC?        /026 CJL
  3250.     SZA CLA            /SKIP IF NO
  3251.     JMP    SNDSV1        /GOT WILD CARD, TRY FOR NEXT
  3252. S00,    TAD    FILFND        /CHECK FOR ANY FILES FOUND
  3253.     SNA CLA            /SKIP IF YES
  3254.     JMS    SNDERROR    /RETURN FILE NOT FOUND ERROR        /026 CJL
  3255. SER7,    JMS    BRKXMT        /BREAK THE SEND                /026 CJL
  3256.     TAD    PRSERR        /GET CURRENT CURSOR POSITION
  3257.     DCA    LPTR        /UPDATE
  3258.     ISZ    SNDSRV        /BUMP RETURN
  3259.     JMP I    SNDSRV        /AND DONE
  3260. /    SEND ERRORS COME HERE.                        /026 CJL
  3261.  
  3262. SNDERRO,.-.            /SEND ERROR ROUTINE
  3263.     CLA            /CLEAN UP
  3264.     TAD    SNDERROR    /GET CALLER
  3265.     JMS I    [SRCHTABLE]    /GO MATCH IT
  3266.     SNERTABLE-1-1        /IN ERROR TABLE
  3267.     JMP I    SNDSRV        /TAKE ERROR EXIT WITH MESSAGE ADDRESS IN AC
  3268.  
  3269. /    SEND ERROR MESSAGE DISPATCH TABLE.                /026 CJL
  3270.  
  3271. SNERTAB,-SER1;    DNERMSG        /DEVICE NAME ERROR
  3272.     -SER2;    FNERMSG        /FILE NAME ERROR
  3273.     -SER3;    FSERMSG        /FILE NAME SYNTAX ERROR
  3274.     -SER4;    SHFEMSG        /HANDLER FETCH ERROR
  3275.     -SER5;    SDERMSG        /DIRECTORY I/O ERROR
  3276.     -SER6;    SNDEMSG        /SEND ERROR
  3277.     -SER7;    NOTFND        /LOOKUP
  3278.     0            /THIS ENDS THE LIST
  3279.  
  3280. FILFND,    0            /HOLDS COUNT OF # OF FILES FOUND
  3281. SLFLAG,    .-.            /LOOKUP INITIALIZE FLAG            /028 CJL
  3282. FNBLK,    0
  3283.     0
  3284.     0
  3285.     0
  3286. /    ROUTINE TO RE-SET THE SEND.
  3287.  
  3288. BRKXMT,    .-.
  3289.     CLA CLL            /INSURE CLEAR AC
  3290.     DCA    INIFLG        /CLEAR THE INIT SEND FLAG
  3291.     FPACK            /FORMAT A PACKET
  3292.     NODATA            /NO DATA FOR THIS PACKET
  3293.     STEOT            /"EOT" PACKET TYPE
  3294.     SPACK            /SEND THE PACKET
  3295.     1            /READ RESPONSE                /042 CJL
  3296.     0            /DO NOT DISPATCH            /042 CJL
  3297.     JMP I    BRKXMT        /DONE
  3298.  
  3299. /    ROUTINE TO SEND OUT A NAK WITHOUT DISTURBING THE NORMAL PACKET BUFFER.
  3300.  
  3301. SNDNAK,    0
  3302.     NL7777            /-1                    /042 CJL
  3303.     TAD    CURSEQ        /ADD ON CURRENT SEQUENCE NUMBER        /042 CJL
  3304.     AND    [77]        /MODULO 64                /042 CJL
  3305.     TAD    [40]        /TAKE CHAR(SEQUENCE NUMBER)        /042 CJL
  3306.     DCA    NAKPAK+2    /PUT IN NAK PACKET BUFFER
  3307.     TAD    NAKPAK+1    /GET LENGTH
  3308.     TAD    NAKPAK+2    /GET SEQ
  3309.     TAD    NAKPAK+3    /GET TYPE
  3310.     JMS I    [CKSUM]        /CALCULATE CHECKSUM
  3311.     DCA    NAKPAK+4    /PUT IN CHECKSUM
  3312.     TAD    REOL        /GET ANY EOL REQUIRED
  3313.     TAD    [-40]        /UN-CHAR IT                /014/016 CJL
  3314.     SNA            /SKIP IF USING
  3315.     NL7777            /NO EOL, PUT IN -1 INSTEAD        /032 CJL
  3316.     DCA    NAKPAK+5    /PUT EOL IN
  3317.     REM8B;    NAKPAK        /SEND NAK TO REMOTE
  3318.     JMP I    SNDNAK        /DONE
  3319.  
  3320.  
  3321. NAKPAK,    CNTRLA            /MARK                    /042 CJL
  3322.     " &77+3            /LENGTH OF NAK PACKET            /042 CJL
  3323.     .-.            /SEQUENCE NUMBER GOES HERE        /042 CJL
  3324.     STNAK            /DATA TYPE
  3325.     .-.            /CHECKSUM                /042 CJL
  3326.     .-.            /<EOL> IF USED                /042 CJL
  3327.     -1            /TERMINATE
  3328.  
  3329. /    FILENAME BUFFER.                        /014 CJL
  3330.  
  3331. NAMBUFF,ZBLOCK    12        /FILENAME.EXTENSION (WITH TERMINATOR) GOES HERE
  3332.     PAGE                                /014 CJL
  3333. /    ROUTINE TO SERVICE A "GET" COMMAND.
  3334.  
  3335. GETSRV,    0
  3336.     JMS I    [CREST2]    /SETUP CONSOLE OUTPUT ROUTINES        /025 CJL
  3337.     TAD    (MREC)        /GET OUR MODE VALUE            /045 CJL
  3338.     DCA    KMODE        /SETUP NOW                /045 CJL
  3339.     TAD    LPTR        /GET CURRENT LINE POINTER
  3340.     DCA    PRSERR        /SAVE
  3341.     TAD    PRSERR        /RE-GET IT
  3342.     JMS I    [DPARS]        /PARSE OFF THE DEVICE NAME        /006/014 CJL
  3343.     JMP    GSRV50        /ERROR IN DEVICE NAME            /006
  3344.     JMS I    [NOSP]        /FIND BEGINNING OF A FILE NAME
  3345.     JMP    GSRV22        /GOT <EOL>, NO FILE NAME        /006/014 CJL
  3346.     DCA    GSRV90        /STORE BEGINNING ADDRESS
  3347.     TAD    GSRV90        /NOW WE LOOK FOR
  3348.     JMS I    [SP]        /THE END OF THE LINE
  3349.     SKP            /GOT THE END OF THE LINE HERE
  3350.     JMP    .-2        /NOT END YET, CONTINUE
  3351.     DCA    PRSERR        /STORE POINTER TO EOL
  3352.     NL7777            /SET -1                    /032 CJL
  3353.     DCA I    PRSERR        /TERMINATE FILE NAME WITH -1
  3354.     DCA    CURSEQ        /RE-SET THE SEQUENCE
  3355.     TAD    GSRV90        /GET ADDRESS OF FILE NAME
  3356.  
  3357. GSRV10,    FPACK            /FORMAT THE PACKET
  3358. GSRV90,    0            /DATA ADDRESS HERE
  3359.     STRIN            /RECIEVE INIT PACKET
  3360.  
  3361. GSRV12,    SPACK            /SEND THE PACKET
  3362.     1            /GET RESPONSE
  3363.     GSRV80-2        /DISPATCH TABLE                /027 CJL
  3364.  
  3365. /    SERVICE A NAK OR UNDEFINED.
  3366.  
  3367. GSRV15,    ISZ    RTRYC        /BUMP THE RE-TRY COUNTER
  3368.     JMP    GSRV12        /TRY AGAIN
  3369.     JMP I    GETSRV        /GIVE UP
  3370.  
  3371. /    SERVICE A SEND/INIT FROM THE REMOTE.
  3372.  
  3373. GSRV20,    JMS I    (INPSRV)    /HANDLE JUST LIKE A RECEIVE
  3374.     JMP    GSRV21        /ERROR RETURN FROM "INPSRV"
  3375.     ISZ    GETSRV        /BUMP RETURN FOR NO ERROR
  3376.     TAD    PRSERR        /UPDATE THE CURRENT LINE POINTER
  3377.     DCA    LPTR
  3378. GSRV21,    JMP I    GETSRV
  3379.  
  3380. GSRV22,    CLA CLL            /MAKE SURE WE ARE CLEAR            /009/014 CJL
  3381.     TAD    [NOTFND]    /GET ERROR MESSAGE ADDRESS        /025 CJL
  3382.     JMP I    GETSRV        /TAKE ERROR RETURN            /009/014 CJL
  3383.  
  3384. /    GOT AN ERROR PACKET, DISPLAY ERROR AND ABORT.
  3385.  
  3386. GSRV40,    JMS I    [PRIPAK]    /PRINT OUT THE ERROR PACKET
  3387.     JMP I    GETSRV        /TAKE THE ERROR EXIT
  3388. /    GOT DEVICE ERROR.                        /006/014 CJL
  3389.  
  3390. GSRV50,    CLA CLL            /ENSURE CLEAR AC            /006/014 CJL
  3391.     TAD    (DNERMSG)    /GET ERROR MESSAGE ADDRESS        /025 CJL
  3392.     JMP I    GETSRV        /TAKE ERROR RETURN            /006/014 CJL
  3393.  
  3394. /    DISPATCH TABLE.
  3395.  
  3396. GSRV80,    STERR;    GSRV40        /ERROR PACKET RETURNED
  3397.     STSIN;    GSRV20        /SEND INIT PACKET RETURNED
  3398.     STNAK;    GSRV15        /NAK PACKET RETURNED
  3399.     0            /TERMINATE TABLE
  3400. /    ROUTINE TO SERVICE A "RECEIVE" COMMAND.
  3401.  
  3402. RECSRV,    0
  3403.     JMS I    [CREST2]    /SETUP CONSOLE OUTPUT ROUTINES        /025 CJL
  3404.     TAD    (MREC)        /GET OUR MODE VALUE            /045 CJL
  3405.     DCA    KMODE        /SETUP NOW                /045 CJL
  3406.     TAD    LPTR        /GET CURRENT LINE POINTER
  3407.     DCA    PRSERR        /SAVE IT
  3408.     TAD    PRSERR        /GET IT BACK
  3409.     JMS I    [DPARS]        /PARSE OFF DEVICE NAME            /018 CJL
  3410.     JMP    RECS30        /ERROR IN DEVICE NAME            /018 CJL
  3411.     JMS I    [NOSP]        /CHECK IF BEGINNING OF FILE NAME    /014 CJL
  3412.     SKP            /GOT <EOL> HERE                /018 CJL
  3413.     JMP    RECS60        /SOMETHING ELSE ON LINE, ERROR        /014 CJL
  3414.     DCA    PRSERR        /SAVE CURRENT LINE POINTER        /018 CJL
  3415.     RPACK            /GET SEND/INIT PACKET FROM REMOTE
  3416.     JMS I    (DISPATCH)    /DISPATCH BASED ON RRTYP        /031 CJL
  3417.     RECS80-2        /TABLE ADDRESS                /027/031 CJL
  3418.     JMP    RECS60        /DON'T KNOW WHAT IT IS
  3419.  
  3420. /    GOT A SEND INIT PACKET.
  3421.  
  3422. RECS10,    JMS I    (INPSRV)    /OFF TO HANDLE INPUT
  3423.     JMP    RECS60        /ERROR RETURN
  3424.  
  3425. /    TAKE THE NON-ERROR RETURN.
  3426.  
  3427. RECS20,    ISZ    RECSRV        /BUMP FOR NON-ERROR RETURN
  3428.     TAD    PRSERR        /GET CURRENT CURSOR POSITION        /018 CJL
  3429.     DCA    LPTR        /UPDATE IT                /018 CJL
  3430.     JMP I    RECSRV
  3431.  
  3432. /    GOT ERROR IN DEVICE NAME.                    /018 CJL
  3433.  
  3434. RECS30,    CLA CLL            /CLEAN UP                /018 CJL
  3435.     TAD    (DNERMSG)    /GET ERROR MESSAGE ADDRESS        /025 CJL
  3436.     JMP I    RECSRV        /TAKE ERROR RETURN            /018 CJL
  3437.  
  3438. /    TAKE THE ERROR RETURN.
  3439.  
  3440. RECS60,    CLA
  3441.     JMP I    RECSRV        /TAKE ERROR EXIT
  3442.  
  3443. /    DISPATCH TABLE.
  3444.  
  3445. RECS80,    STSIN;    RECS10        /SEND INIT PACKET DISPATCH
  3446.     STEOT;    RECS60        /END OF CONNECTION
  3447.     STBRK;    RECS20        /BREAK TRANSMISSION
  3448.     0
  3449.  
  3450. RECS90,    0            /TEMP FOR "RECSRV"
  3451. /    KEYBOARD LINE BUFFER.                        /014 CJL
  3452.  
  3453. LINBUF,    ZBLOCK    LINSIZE        /LINE BUFFER
  3454.  
  3455.     PAGE                                /014 CJL
  3456. /    ROUTINE TO SERVICE INPUT OF A FILE.
  3457.  
  3458. INPSRV,    0
  3459.     JMS I    (SETINI)    /SET UP INIT REGISTERS
  3460.     DCA    OFFLG        /INITIALIZE OUTPUT FILE FLAG        /036 CJL
  3461.     CIF    USRFLD        /GOTO USR FIELD                /037 CJL
  3462.     JMS I    [USRENTRY]    /CALL USER SERVICE ROUTINE        /037 CJL
  3463.     RESET            /RESET TABLES                /037 CJL
  3464.     DCA    CURSEQ        /RE-SET THE SEQUENCE NUMBER
  3465.  
  3466.     FPACK            /FORMAT A PACKET
  3467.     INIDAT            /PACKET DATA ADDRESS
  3468.     STACK            /"ACK" PACKET TYPE
  3469.  
  3470.  
  3471. INPS01,    SPACK            /SEND A PACKET
  3472.     1            /AWAIT RESPONSE
  3473.     INPS91-2        /DISPATCH TABLE ADDRESS            /027 CJL
  3474.  
  3475. /    NAK OR UNDEFINED RESPONSE HERE.
  3476.  
  3477. INPS02,    ISZ    RTRYC        /GOT A NAK, CHECK RE-TRY COUNT
  3478.     JMP    INPS01        /RE-TRY THE INIT
  3479.     JMS    INPERROR    /GIVE UP                /025 CJL
  3480.  
  3481.     IER02=    .        /ERROR TABLE ADDRESS            /039 CJL
  3482.  
  3483. INPS03,    FPACK            /FORMAT A PACKET
  3484.     NODATA            /NO DATA
  3485.     STACK            /"ACK" PACKET TYPE
  3486.  
  3487. INPS05,    SPACK            /SEND A PACKET
  3488.     1            /AWAIT RESPONSE
  3489.     INPS90-2        /DISPATCH TABLE ADDRESS            /027 CJL
  3490.     JMS    INPERROR    /UNDEFINED RESPONSE            /025 CJL
  3491.  
  3492.     IER05=    .        /ERROR TABLE ADDRESS            /039 CJL
  3493.  
  3494. /    GOT A DATA PACKET, WRITE TO OUTPUT FILE.
  3495.  
  3496. INPS10,    TAD    OFFLG        /CHECK THE OUTPUT FILE FLAG
  3497.     SNA CLA            /SKIP IF OUTPUT FILE OPEN
  3498.     JMS    INPERROR    /ABORT AND EXIT                /025 CJL
  3499. IER10,    JMS I    (WRIPAK)    /WRITE THE PACKET TO THE FILE        /039 CJL
  3500.     JMS    INPERROR    /ERROR WRITING PACKET            /025 CJL
  3501. IER11,    JMP    INPS03        /LOOP                    /039 CJL
  3502. /    GOT A FILE HEADER PACKET, OPEN FILE.
  3503.  
  3504. INPS20,    TAD    OFFLG        /CHECK IF OUTPUT FILE OPEN
  3505.     SZA CLA            /SKIP IF NO
  3506.     JMS    INPERROR    /ABORT IF FILE ALREADY OPEN        /025 CJL
  3507. IER20,    TAD I    [RRLEN]        /GET CURRENT PACKET LENGTH        /039 CJL
  3508.     TAD    (-40-3        /CALCULATE LENGTH OF DATA
  3509.     SPA            /SKIP IF DATA IN THE PACKET
  3510.     JMS    INPERROR    /ELSE AN ERROR                /025 CJL
  3511. IER21,    TAD    (RRDTA)        /CALCULATE LAST BYTE IN DATA        /039 CJL
  3512.     DCA    INPS81        /STORE IN POINTER
  3513.     NL7777            /SET -1                    /032 CJL
  3514.     DCA I    INPS81        /TERMINATE NAME WITH A MINUS WORD
  3515.     TAD    (FNBLK        /GET ADDRESS OF FILE NAME BLOCK
  3516.     DCA    FNPTR        /SAVE FOR NAME PARSE
  3517.     TAD    (RRDTA        /GET ADDRESS OF DATA IN PACKET
  3518.     JMS I    [PFNAM]        /PARSE OFF THE FILE NAME
  3519.     JMS    INPERROR    /ERROR IN FILE NAME            /025 CJL
  3520.  
  3521. /    GET TARGET DEVICE.
  3522.  
  3523. IER23,    CLA CLL            /CLEAR AC FROM FILE NAME PARSE        /039 CJL
  3524.     TAD    DEVNUM        /GET DEVICE NUMBER PARSED        /006
  3525.     DCA    ODNUMB        /SAVE OUTPUT DEVICE NUMBER
  3526.     TAD    ODNUMB        /GET NUMBER BACK
  3527.     JMS I    [HFETCH]    /FETCH HANDLER FOR THIS DEVICE
  3528.     JMS    INPERROR    /HANDLER FETCH ERROR            /025 CJL
  3529. IER24,    TAD    (FNBLK)        /GET ADDRESS OF FILE NAME BLOCK        /039 CJL
  3530.     DCA    INPS22        /PUT IN CALL
  3531.     TAD    ODNUMB        /GET DEVICE NUMBER
  3532.     CIF    USRFLD        /GOTO USR FIELD                /020 CJL
  3533.     JMS I    [USRENTRY]    /CALL USER SERVICE ROUTINE        /035 CJL
  3534.     ENTER            /ENTER TENTATIVE FILE            /020 CJL
  3535. INPS22,    0            /
  3536.     0            /
  3537.     JMS    INPERROR    /NO DIRECTORY ROOM            /025 CJL
  3538. IER22,    TAD    INPS22        /GET NEW FILE START BLOCK        /039 CJL
  3539.     DCA    FSBLK        /SAVE
  3540.     TAD    INPS22+1    /GET INDICATED MAXIMUM FILE SIZE    /021 CJL
  3541.     IAC            /GIVE ONE MORE THAN 2 LESS        /021 CJL
  3542.     DCA    FLEN        /SAVE AS DANGER COUNT            /021 CJL
  3543.     ISZ    OFFLG        /SET FLAG FOR OUTPUT FILE OPEN
  3544.     NL7777            /INDICATE INITIALIZATION        /020 CJL
  3545.     JMS I    [PUTBYTE]    /INITIALIZE OUTPUT FILE ROUTINE        /020 CJL
  3546.     HLT            /THIS CAN'T HAPPEN!            /020 CJL
  3547.     TAD    FNPTR        /GET POINTER TO 6 BIT FILE NAME
  3548.     JMS I    [FILN8]        /MAKE 8 BIT FORMATTED STRING
  3549.     JMS I    [SCRIBE]    /TELL THEM
  3550.     FRECMSG            /WE ARE RECEIVING
  3551.     PRI8B;    NAMBUF        /WHICH FILE WE ARE RECEIVING
  3552.     JMS I    [SCRIBE]    /DO A
  3553.     CRLF            /<CR>, <LF>
  3554.     JMP    INPS03        /LOOP
  3555. /    GOT AN END OF FILE PACKET.
  3556.  
  3557. INPS30,    TAD    OFFLG        /ANY OUTPUT FILE OPEN?
  3558.     SNA CLA            /SKIP IF YES
  3559.     JMS    INPERROR    /ERROR                    /025 CJL
  3560. IER30,    JMS I    [FILCLOSE]    /CLOSE THE FILE                /020/039 CJL
  3561.     JMS    INPERROR    /ERROR CLOSING THE FILE            /025 CJL
  3562. IER31,/    DCA    OFFLG        /RE-SET FILE OPEN FLAG            /D009/039 CJL
  3563.     JMP    INPS03        /CONTINUE
  3564.  
  3565. /    GOT AN END OF TRANSMISSION PACKET.
  3566.  
  3567. INPS40,    TAD    OFFLG        /WAS A FILE OPEN?
  3568.     SZA CLA            /SKIP IF NO
  3569.     JMS I    [FILCLOSE]    /CLOSE ANY OPEN FILE            /020 CJL
  3570.     NOP            /ERROR CLOSING THE FILE **** FIX THIS ****
  3571.     FPACK            /FORMAT A PACKET
  3572.     NODATA            /NO DATA IN PACKET
  3573.     STACK            /"ACK" PACKET TYPE
  3574.  
  3575.     SPACK            /SEND THE PACKET
  3576.     0            /NO RESPONSE
  3577.     ISZ    INPSRV        /BUMP RETURN FOR NO ERROR
  3578.     JMP I    INPSRV        /TAKE NON-ERROR EXIT
  3579.  
  3580. /    GOT AN ERROR PACKET.
  3581.  
  3582. INPS50,    JMS I    [PRIPAK]    /PRINT THE PACKET DATA
  3583.     JMP I    INPSRV        /AND TAKE THE ERROR EXIT        /009/014 CJL
  3584.  
  3585. /    INPUT ERRORS COME HERE.                        /025 CJL
  3586.  
  3587. INPERRO,.-.            /INPUT ERROR ROUTINE            /025 CJL
  3588.     FPACK            /FORMAT A PACKET            /025 CJL
  3589.     NODATA            /NO DATA                /025 CJL
  3590.     STBRK            /"BREAK LINK" PACKET TYPE        /025 CJL
  3591.     SPACK            /SEND THE PACKET            /025 CJL
  3592.     0            /NO RESPONSE                /025 CJL
  3593.     TAD    INPERROR    /GET CALLER                /025 CJL
  3594.     JMS I    [SRCHTABLE]    /TRY TO FIND A MATCH            /025 CJL
  3595.     INERTABLE-1-1        /IN ERROR TABLE                /025 CJL
  3596.     SNA            /SKIP IF FOUND PARTICULAR MESSAGE    /025 CJL
  3597.     TAD    (RERRMSG)    /ELSE USE GENERAL MESSAGE        /025 CJL
  3598.     JMP I    INPSRV        /TAKE ERROR RETURN            /025 CJL
  3599.  
  3600. /    TEMPS FOR "INPSRV".
  3601.  
  3602. INPS80,    0
  3603. INPS81,    0
  3604.     PAGE                                /014 CJL
  3605. /    DISPATCH TABLES FOR "INPSRV".
  3606.  
  3607. INPS90,    STDAT;    INPS10        /HANDLE DATA PACKETS
  3608.     STEOF;    INPS30        /HANDLE EOF PACKET
  3609.     STEOT;    INPS40        /HANDLE END OF TRANSMISSION PACKET
  3610.     STFIL;    INPS20        /HANDLE FILE NAME PACKET
  3611.     STERR;    INPS50        /HANDLE ERROR PACKET
  3612.     0            /TERMINATE TABLE
  3613.  
  3614. INPS91,    STNAK;    INPS02        /HANDLE A NAK PACKET
  3615.     STFIL;    INPS20        /HANDLE FILE NAME PACKET
  3616.     STERR;    INPS50        /HANDLE ERROR PACKET
  3617.     0            /TERMINATE TABLE
  3618.  
  3619. /    INPUT ERROR MESSAGE DISPATCH TABLE.                /025/039 CJL
  3620.  
  3621. INERTAB,-IER05;    UPERMSG        /UNDEFINED PACKET ERROR            /025 CJL
  3622.     -IER11;    DSFLMSG        /DISK OVERFLOW ERROR            /042 CJL
  3623.     -IER22;    RIDEMSG        /DIRECTORY FULL ERROR            /025 CJL
  3624.     -IER23;    RFLNMSG        /RECEIVED FILE NAME ERROR        /025 CJL
  3625.     -IER24;    RHFEMSG        /HANDLER FETCH ERROR            /025 CJL
  3626.     -IER31;    FCLEMSG        /FILE CLOSE ERROR            /025 CJL
  3627.     0            /THIS ENDS THE LIST            /025 CJL
  3628. /    ROUTINE TO CHECK FOR AN ALPHABETIC OR NUMERIC CHAR.
  3629. /    ENTER WITH THE CHAR IN THE AC.
  3630. /    EXIT + 2 IF ALPHABETIC OR NUMERIC WITH CHAR IN THE AC.
  3631. /    EXIT + 1 IF NON-ALPHABETIC OR NUMERIC WITH CHAR IN THE AC.
  3632.  
  3633. ALPNUM,    0
  3634.     JMS    ALPHA        /CHECK FOR ALPHA FIRST
  3635.     SKP            /NON-ALPHA RETURN, MUST CHECK NUMERIC
  3636.     JMP    ALPNM1        /IS ALPHA, TAKE RETURN + 2
  3637.     JMS    NUMRC        /CHECK IF NUMERIC
  3638.     SKP            /NOT NUMERIC
  3639. ALPNM1,    ISZ    ALPNUM        /BUMP RETURN FOR ALPHA-NUMERIC
  3640.     JMP I    ALPNUM        /DONE
  3641.  
  3642.  
  3643. /    ROUTINE TO CHECK FOR AN ALPHABETIC CHARACTER.
  3644. /    ROUTINE ASSUMES UPPER CASE.
  3645. /    ENTER ROUTINE WITH CHAR IN THE AC.
  3646. /    EXIT + 2 IF THE CHAR IS ALPHABETIC WITH THE CHAR IN THE AC.
  3647. /    EXIT + 1 IF THE CHAR IS NOT ALPHABETIC WITH THE CHAR IN THE AC.
  3648.  
  3649. ALPHA,    0
  3650.     DCA    ALPHA1        /STORE THE CHAR FOR RETURN
  3651.     TAD    ALPHA1        /GET THE CHAR
  3652.     TAD    (-"Z!200-1)    /ADD ON UPPER LIMIT            /034 CJL
  3653.     CLL            /INIT LINK FOR A FLAG
  3654.     TAD    ("Z-"A+1
  3655.     SZL            /SKIP IF NOT A LETTER
  3656.     ISZ    ALPHA        /IS A LETTER, BUMP RETURN
  3657.     CLA CLL            /CLEAR AC
  3658.     TAD    ALPHA1        /RESTORE CHAR IN THE AC
  3659.     JMP I    ALPHA        /TAKE PROPER RETURN
  3660.  
  3661. ALPHA1,    0            /TEMP FOR ALPHA ROUTINE
  3662.  
  3663. /    ROUTINE TO CHECK FOR A NUMERIC CHARACTER.
  3664. /    ENTER WITH THE CHAR TO CHECK IN THE AC.
  3665. /    EXIT + 2 IF NUMERIC WITH THE CHAR IN THE AC.
  3666. /    EXIT + 1 IF NON-NUMERIC WITH THE CHAR IN THE AC.
  3667.  
  3668. NUMRC,    0
  3669.     DCA    NUMRC1        /SAVE THE CHAR FOR RETURN
  3670.     TAD    NUMRC1        /GET THE CHAR BACK
  3671.     TAD    (-"9!200-1)    /ADD ON UPPER LIMIT            /034 CJL
  3672.     CLL            /INIT LINK FOR A FLAG
  3673.     TAD    ["9-"0+1]                        /016 CJL
  3674.     SZL            /SKIP IF NOT A DIGIT
  3675.     ISZ    NUMRC        /BUMP RETURN FOR NUMERIC
  3676.     CLA CLL            /CLEAR AC
  3677.     TAD    NUMRC1        /RESTORE CHAR IN THE AC
  3678.     JMP I    NUMRC        /DONE
  3679.  
  3680. NUMRC1,    0            /TEMP FOR NUMRC CHECK ROUTINE
  3681. /    ROUTINE TO WRITE THE CURRENT INPUT PACKET TO THE OUTPUT FILE.
  3682. /    ENTER:    NOTHING.
  3683. /    EXIT:    + 2 = WRITE SUCCESSFUL.
  3684. /        + 1 = WRITE NOT SUCCESSFUL.
  3685.  
  3686. WRIPAK,    0
  3687.     TAD I    [RRLEN]        /GET LENGTH OF PACKET
  3688.     TAD    (RRDTA-40-3    /CALCULATE END OF BUFFER
  3689.     DCA    W90        /PUT INTO POINTER
  3690.     DCA I    W90        /ZERO AFTER END OF BUFFER
  3691.     TAD    (RRDTA        /GET ADDRESS OF DATA
  3692.     DCA    W90        /PUT INTO POINTER
  3693.  
  3694. W10,    TAD I    W90        /GET A CHAR FROM PACKET
  3695.     SNA            /SKIP IF NOT END
  3696.     JMP    W60        /END, EXIT
  3697.     CIA            /NEGATE FOR COMPARE
  3698.     TAD    RQCTL        /COMPARE WITH CURRENT QUOTE CHAR
  3699.     SNA CLA            /SKIP IF NOT QUOTE CHAR
  3700.     JMP    W20        /IS QUOTE, HANDLE SPECIAL
  3701.     TAD    W92        /WAS LAST CHAR A QUOTE?
  3702.     SZA CLA            /SKIP IF NO
  3703.     TAD    (-100        /IT WAS, FIX UP THIS CHAR
  3704.     JMP    W25        /HANDLE REST BELOW
  3705.  
  3706. W20,    TAD    W92        /CURRENT CHAR A QUOTE, CHECK PREVIOUS
  3707.     SNA CLA            /SKIP IF YES
  3708.     JMP    W30        /JUST THIS CHAR IS QUOTE, SET FLAG
  3709.  
  3710. W25,    TAD I    W90        /GET CHAR FROM BUFFER
  3711.     JMS I    [PUTBYTE]    /OUTPUT TO FILE                /020 CJL
  3712.     JMP I    WRIPAK        /ERROR IN OUTPUT            /M020 CJL
  3713.     JMP    W35        /FINISH BELOW
  3714.  
  3715. W30,    NL0001 CLL        /GOTA SET FLAG FOR QUOTE CHARACTER    /032 CJL
  3716.  
  3717. W35,    DCA    W92        /SET UP QUOTE FLAG
  3718.     ISZ    W90        /BUMP POINTER
  3719.     JMP    W10        /LOOP
  3720.  
  3721. W60,    ISZ    WRIPAK        /BUMP RETURN FOR OK
  3722.     JMP I    WRIPAK        /DONE
  3723.  
  3724. W90,    0            /POINTER FOR "WRIPAK"
  3725. W92,    0            /TEMP FOR "WRIPAK"
  3726. /    TABLE SEARCH ROUTINE.                        /025 CJL
  3727.  
  3728. /    CALLING SEQUENCE:
  3729.  
  3730. /    TAD    VALUE            /AC CONTAINS VALUE TO MATCH
  3731. /    JMS I    [SRCHTABLE]        /CALL ROUTINE
  3732. /    TABLE-2                /ADDRESS(TABLE)-2
  3733. /    RETURN                /ALWAYS RETURNS HERE
  3734.  
  3735. /    IF AC=0 THEN NO MATCH OCCURRED.
  3736.  
  3737. /    IF AC IS NON-ZERO, THEN AC CONTAINS CORRESPONDING VALUE TO MATCH WHICH IS ALSO
  3738. /    STORED IN TABLEJUMP.
  3739.  
  3740. /    TABLE FORMAT.
  3741.  
  3742. /    -VALUE;    CORRESPONDING VALUE    /TABLE PAIR
  3743. /    "";    ""            /ADDITIONAL PAIRS AS NECESSARY
  3744. /    0                /ZERO TERMINATES THE TABLE
  3745.  
  3746. SRCHTAB,.-.                /TABLE SEARCH ROUTINE
  3747.     DCA    TABLEJUMP        /SAVE PASSED VALUE TO MATCH
  3748.     TAD I    SRCHTABLE        /GET PASSED POINTER ARGUMENT
  3749.     DCA    XR0            /STASH THE POINTER
  3750.     ISZ    SRCHTABLE        /BUMP PAST ARGUMENT
  3751. SRCHLUP,ISZ    XR0            /BUMP TO NEXT PAIR
  3752.     TAD I    XR0            /GET A TABLE VALUE
  3753.     SNA                /END OF TABLE?
  3754.     JMP I    SRCHTABLE        /YES, RETURN WITH CLEAR AC
  3755.     TAD    TABLEJUMP        /COMPARE TO DESIRED
  3756.     SZA CLA                /SKIP IF IT MATCHES
  3757.     JMP    SRCHLUP            /JUMP IF NOT
  3758.     TAD I    XR0            /GET CORRESPONDING VALUE
  3759.     DCA    TABLEJUMP        /STASH IT
  3760.     TAD    TABLEJUMP        /GET IT BACK
  3761.     JMP I    SRCHTABLE        /RETURN WITH CORRESPONDING VAUE IN AC
  3762.  
  3763.     PAGE                                /014 CJL
  3764.     IFZERO    1    <
  3765.  
  3766. /    OS8 DIRECTORY FILE DATA SETUP.
  3767. /    ENTER WITH THE DIRECTORY DATE WORD IN THE AC.
  3768. /    EXIT WITH THE DATE IN THE BUFFER "DATBUF".
  3769.  
  3770. FILD8,    0
  3771.     DCA    FILD89        /SAVE THE DATE WORD
  3772.     TAD    FILD89        /GET DATA WORD
  3773.     AND    (7        /KEEP ONLY YEAR BITS
  3774.     TAD    (116        /ADD 78 YEARS
  3775.     MQL            /PUT INTO MQ REGISTER
  3776.     TAD    (DATEYR        /GET POINTER TO YEAR
  3777.     JMS    DECCON        /CONVERT TO ASCII DATE
  3778.     TAD    FILD89        /GET DATE WORD BACK
  3779.     CLL RTR            /SHIFT DAY DOWN
  3780.     RAR
  3781.     AND    (37        /KEEP ONLY DAY BITS
  3782.     MQL            /PUT IN MQ REGISTER
  3783.     TAD    (DATEDA        /GET POINTER TO DAY
  3784.     JMS    DECCON        /CONVERT TO ASCII DAY
  3785.     TAD    FILD89        /GET DATE WORD BACK
  3786.     BSW            /GET MONTH
  3787.     CLL RTR            /DOWN
  3788.     AND    (17        /KEEP ONLY MONTH BITS
  3789.     MQL            /INTO MQ REGISTER
  3790.     TAD    (DATEMO        /GET ADDRESS OF WHERE TO PUT MONTH
  3791.     JMS    DECCON        /CONVERT
  3792.     JMP I    FILD8        /ALL DONE
  3793.  
  3794. FILD89,    0            /TEMP FOR "FILD8"
  3795.  
  3796.  
  3797. /    ROUTINE  TO CONVERT A BINARY VALUE INTO A  TWO  DIGIT  ASCII  DECIMAL  NUMBER.
  3798. /    ENTER WITH WHERE TO STORE THE CONVERTED NUMBER IN THE AC AND THE NUMBER IN THE
  3799. /    MQ REGISTER.
  3800.  
  3801. DECCON,    0
  3802.     DCA    DECC20        /STORE THE POINTER
  3803.     TAD    ("0&177-1    /GET AN ASCII ZERO
  3804.     DCA I    DECC20        /START OUT WITH A ZERO
  3805.     MQA            /GET THE BINARY VALUE
  3806. DECC01,    ISZ I    DECC20        /BUMP
  3807.     TAD    (-12        /SUB 10
  3808.     SMA            /SKIP IF NO MORE DIVISION
  3809.     JMP    DECC01        /ELSE KEEP GOING
  3810.     TAD    (12+"0&177    /CONVERT REMAINDER TO ASCII
  3811.     ISZ    DECC20        /BUMP POINTER
  3812.     DCA I    DECC20        /STORE
  3813. /    JMS    FMTDAT        /FORMAT FOR PRINTING            /D013
  3814.     JMP I    DECCON        /DONE
  3815.  
  3816.             >
  3817.     IFZERO    1    <
  3818.  
  3819. DECC20,    0            /LOCAL POINTER TO DECCON
  3820.  
  3821. /    ROUTINE TO SET UP THE DATE IN A MM-DD-YY FORMAT  TO  PUT IN FRONT OF A FILE TO
  3822. /    PASS THE FILES DATE (TEMPORY AND NOT PART OF THE KERMIT PROTOCOL).
  3823.  
  3824. FMTDAT,    0
  3825.     TAD    DATEMO        /GET FIRST CHAR OF DATE
  3826.     DCA    FDATE        /MOVE IT
  3827.     TAD    DATEMO+1
  3828.     DCA    FDATE+1
  3829.     TAD    DATEDA
  3830.     DCA    FDATE+3
  3831.     TAD    DATEDA+1
  3832.     DCA    FDATE+4
  3833.     TAD    DATEYR
  3834.     DCA    FDATE+6
  3835.     TAD    DATEYR+1
  3836.     DCA    FDATE+7
  3837.     JMP I    FMTDAT        /QUICK AND DIRTY
  3838.  
  3839. DATBUF,    "#&177            /FILE CREATION DATE ATTRIBUTE
  3840.     6+40            /LENGTH OF DATE (CHAR(X))
  3841. DATEYR,    0            /ASCII YEAR GOES HERE
  3842.     0
  3843. DATEMO,    0            /ASCII MONTH GOES HERE
  3844.     0
  3845. DATEDA,    0            /ASCII DAY GOES HERE
  3846.     0
  3847.     -1            /TERMINATE
  3848.  
  3849. /    FORMATTED DATE GOES HERE.
  3850.  
  3851. SETDAT,"ANGLEBRACKET&177    /COMMENT SIGN
  3852.  
  3853. FDATE,    0
  3854.     0
  3855.     "-&177
  3856.     0
  3857.     0
  3858.     "-&177
  3859.     0
  3860.     0
  3861.     12
  3862.     15
  3863.     -1
  3864.  
  3865.             >
  3866. /    DIRECTORY LOOKUP ROUTINE.                    /028 CJL
  3867.  
  3868. /    CALLING SEQUENCE:
  3869.  
  3870. /    NL0001                /IF INITIALIZING THE DIRECTORY
  3871.  
  3872. /    OR
  3873.  
  3874. /    CLA                /CLEAR AC IF SUBSEQUENT CALL
  3875.  
  3876. /    JMS I    (LUKUP)            /CALL ROUTINE
  3877. /    I/O ERROR            /DIRECTORY I/O ERROR RETURN WITH AC DIRTY
  3878. /    NOT FOUND            /FILE NOT FOUND RETURN
  3879. /    FOUND                /LATEST FILE MATCHES REQUEST
  3880.  
  3881. /    SETS FLEN TO -(FILE LENGTH) IN RECORDS.
  3882.  
  3883. /    SETS FSBLK TO STARTING RECORD OF FILE.
  3884.  
  3885. /    MODIFIES DIRECTORY SEGMENT SLIGHTLY (NOT TO BE WRITTEN BACK).
  3886.  
  3887. /    DEPENDS ON DIRXR BEING UNTOUCHED BY OTHER ROUTINES.
  3888.  
  3889. LUKUP,    .-.                /DIRECTORY LOOKUP ROUTINE
  3890.     SNA                /INITIALIZING DIRECTORY?
  3891.     JMP    NXTFILE            /NO, JUST GET ANOTHER FILE IF POSSIBLE
  3892. NEXTSEG,DCA    DIRRECORD        /STORE LATEST DIRECTORY SEGMENT RECORD
  3893.     JMS I    HNDADR            /CALL I/O HANDLER
  3894.     PAGCNT^100+DIRFLD        /READ IN A DIRECTORY SEGMENT
  3895.     DIRBUFFER            /DIRECTORY I/O BUFFER
  3896. DIRRECO,.-.                /WILL BE LATEST SEGMENT NUMBER
  3897.     JMP I    LUKUP            /I/O ERROR, TAKE DIRTY IMMEDIATE RETURN
  3898.     CDF    DIRFLD            /GOTO DIRECTORY FIELD
  3899.     TAD I    (FRSTRECORD)        /GET FIRST RECORD OF FIRST ENTRY
  3900.     DCA    FSBLK            /STASH IT
  3901.     TAD    (ENTSTRT-1)        /POINT TO
  3902.     DCA    DIRXR            /ENTRIES
  3903. LOOKLUP,TAD I    DIRXR            /GET FIRST WORD OF ENTRY
  3904.     SNA                /SKIP IF NOT EMPTY
  3905.     JMP    EMPENTRY        /JUMP IF EMPTY ENTRY
  3906.     DCA    FNAME            /STORE FIRST FILENAME WORD
  3907.     TAD I    DIRXR            /GET NEXT
  3908.     DCA    FNAME+1            /STORE SECOND FILENAME WORD
  3909.     TAD I    DIRXR            /GET NEXT
  3910.     DCA    FNAME+2            /STORE THIRD FILENAME WORD
  3911.     TAD I    DIRXR            /GET NEXT
  3912.     DCA    FNAME+3            /STORE EXTENSION WORD
  3913.     NL7777                /BACKUP
  3914.     TAD I    (AIWNUMBER)        /GET ADDITIONAL INFORMATION WORD COUNT
  3915.     DCA    AIWCNT            /STASH THE COUNTER
  3916. DCADATW,DCA    DATWORD            /CLEAR THE DATE WORD
  3917.     TAD    DCADATW/(DCA    DATWORD)/GET STORING INSTRUCTION
  3918.     DCA    AIWSTORE        /STORE IN-LINE
  3919.     JMP    AIWTEST            /START LOOP THERE
  3920. AIWLUP,    TAD I    DIRXR        /GET A WORD FROM ENTRY
  3921. AIWSTOR,DCA    DATWORD+.-.    /STORE IN PROPER WORD
  3922.     ISZ    AIWSTORE    /BUMP TO NEXT INSTRUCTION
  3923. AIWTEST,ISZ    AIWCNT        /DONE ALL ADDITIONAL INFORMATION WORDS?
  3924.     JMP    AIWLUP        /NO, KEEP GOING
  3925.     TAD I    DIRXR        /GET THE FILE LENGTH
  3926.     SNA            /SKIP IF VALID
  3927.     JMP    TENTRY        /JUMP IF ONLY TENTATIVE FILE (NO LENGTH)
  3928.     DCA    FILENGTH    /STORE FILE LENGTH
  3929.     CDF    PRGFLD        /BACK TO OUR FIELD
  3930. /    JMS I    (FILTER)    /CHECK IF WE LIKE THIS ONE
  3931.     TAD    (FNAME)        /POINT TO LATEST FILENAME
  3932.     JMS I    (FMATCH)    /CHECK FOR A MATCH
  3933.     JMP    NXTFILE        /FORGET THIS ONE, IT DIDN'T MATCH
  3934.     TAD    FILENGTH    /GET FILE LENGTH
  3935.     DCA    FLEN        /GIVE TO CALLER TO DESTROY
  3936.     TAD    (FNAME)        /POINT TO FILENAME
  3937.     JMS I    [FILN8]        /PUT IN CHARACTER FORM IN BUFFER
  3938.     ISZ    LUKUP        /BUMP TO FILE MATCH RETURN
  3939.     JMP    FLEXIT        /EXIT THERE
  3940.  
  3941. /    COMES HERE FROM SUBSEQUENT CALL OR MATCH FAILURE.
  3942.  
  3943. NXTFILE,CDF    DIRFLD        /GOTO BUFFER FIELD
  3944.     TAD    FILENGTH    /GET LATEST FILE LENGTH
  3945.     SKP            /DON'T DO EMPTY LENGTH
  3946.  
  3947. /    COMES HERE TO BYPASS AN EMPTY ENTRY.
  3948.  
  3949. EMPENTR,TAD I    DIRXR        /GET LENGTH OF EMPTY
  3950.     CIA            /WANT POSITIVE FORM
  3951.     TAD    FSBLK        /UPDATE TO NEXT FILE RECORD
  3952.     DCA    FSBLK        /STORE UPDATED VALUE
  3953. TENTRY,    ISZ I    (FILECNT)    /DONE WITH THIS SEGMENT?
  3954.     JMP    LOOKLUP        /NO, KEEP GOING
  3955.     TAD I    (DIRLINK)    /GET LINK TO NEXT SEGMENT
  3956.     CDF    PRGFLD        /BACK TO OUR FIELD
  3957.     SZA            /END OF DIRECTORY?
  3958.     JMP    NEXTSEGMENT    /NO, GO DO NEXT SEGMENT
  3959. FLEXIT,    ISZ    LUKUP        /BUMP PAST I/O ERROR EXIT
  3960.     JMP I    LUKUP        /RETURN FOR FILE NOT FOUND
  3961.  
  3962. AIWCNT,    .-.            /ADDITIONAL INFORMATION WORD COUNTER
  3963. DATWORD,.-.            /DATE WORD STORED HERE (0000 IF NONE)
  3964.     ZBLOCK    7        /ROOM FOR MORE ADDITIONAL INFORMATION WORDS
  3965. FILENGT,.-.            /LATEST FILE LENGTH
  3966. FNAME,    ZBLOCK    4        /FILENAME AND EXTENSION STORED HERE
  3967.  
  3968.     PAGE
  3969. /    OS/8 FILE UNPACK ROUTINE.                    /019 CJL
  3970.  
  3971. /    THIS ROUTINE UNPACKS BYTES FROM THE INPUT FILE ACCORDING TO THE  CURRENT VALUE
  3972. /    OF FILMODE:
  3973.  
  3974. /    FILMODE CONTAINS 0177 (ASCII MODE).  ALL BYTES ARE TREATED AS SEVEN-BIT  ASCII
  3975. /    CHARACTERS BY STRIPPING THE HIGH-ORDER BIT.  END OF FILE IS THE <^Z> CHARACTER
  3976. /    WHICH  WILL  BE  SENT  OR  NOT  ACCORDING  TO  THE  CONTENTS OF OCTLZFLAG.  IF
  3977. /    OCTLZFLAG CONTAINS  NON-ZERO,  THEN <^Z> WILL BE SENT AT <EOF>;  THE NEXT CALL
  3978. /    WILL YIELD THE  <EOF>  RETURN.   IF OCTLZFLAG CONTAINS ZERO, THEN DETECTION OF
  3979. /    <^Z> YIELDS THE <EOF> RETURN IMMEDIATELY.
  3980.  
  3981. /    FILMODE CONTAINS 4377 (BINARY  MODE).    ALL  BYTES  ARE  TREATED AS EIGHT-BIT
  3982. /    CHARACTERS AND WILL BE SENT  WITHOUT <^Z> CHECK.  THE NEXT CALL AFTER THE LAST
  3983. /    BYTE OF THE LAST RECORD HAS BEEN SENT YIELDS THE <EOF> RETURN.
  3984.  
  3985. /    CALLING CONSIDERATIONS:
  3986.  
  3987. /    OCTLZFLAG MUST BE SETUP ACCORDINGLY IF IN ASCII MODE.
  3988.  
  3989. /    FILMODE MUST BE SETUP ACCORDINGLY.
  3990.  
  3991. /    FLEN MUST CONTAIN -(FILE LENGTH IN  RECORDS) WHEN INITIALIZING THE INPUT FILE.
  3992. /    IT WILL BE MODIFIED BY CALLING THIS ROUTINE.
  3993.  
  3994. /    FSBLK MUST CONTAIN THE THE STARTING RECORD WHEN INITIALIZING THE INPUT FILE.
  3995.  
  3996. /    HNDADR MUST ALREADY BE SETUP TO CALL THE INPUT HANDLER.
  3997.  
  3998. /    CALLING SEQUENCE:
  3999.  
  4000. /    CLA                /OR NL7777 IF INITIALIZING THE INPUT FILE
  4001. /    JMS I    (GETBYTE)        /CALL ROUTINE
  4002. /    I/O ERROR RETURN        /FATAL INPUT ERROR OCCURRED; AC CONTAINS JUNK
  4003. /    END OF FILE            /<EOF> OCCURRED
  4004. /    GOOD RETURN            /AC CONTAINS LATEST SEVEN/EIGHT-BIT CHARACTER
  4005.  
  4006. GETBYTE,.-.                /GET A BYTE ROUTINE
  4007.     SNA CLA                /INITIALIZING?
  4008.     JMP I    PUTC            /NO, GO GET NEXT BYTE
  4009.     TAD    FSBLK            /GET STARTING RECORD OF INPUT FILE
  4010.     DCA    GETRECORD        /STORE IN-LINE
  4011. GETNEWR,JMS I    HNDADR            /CALL I/O HANDLER
  4012.     PAGCNT^100+BUFFLD        /READ SOME PAGES INTO BUFFER FIELD
  4013. GETCORE,FILBUFFER            /BUFFER ADDRESS
  4014. GETRECO,.-.                /WILL BE LATEST RECORD NUMBER
  4015.     JMP I    GETBYTE            /INPUT ERROR!
  4016.     TAD    GETCORE/(FILBUFFER)    /SETUP THE
  4017.     DCA    BUFPTR            /BUFFER POINTER
  4018. GETLOOP,DCA    THIRD            /CLEAR THIRD BYTE NOW
  4019.     JMS    PUTONE            /OBTAIN AND SEND BACK FIRST BYTE
  4020.     JMS    PUTONE            /OBTAIN AND SEND BACK SECOND BYTE
  4021.     TAD    THIRD            /GET THIRD BYTE
  4022.     JMS    PUTC            /SEND IT BACK
  4023.     TAD    BUFPTR            /GET THE POINTER
  4024.     TAD    (-PAGCNT^200-FILBUFFER)    /COMPARE TO LIMIT
  4025.     SZA CLA                /SKIP IF AT END
  4026.     JMP    GETLOOP            /KEEP GOING
  4027.     ISZ    GETRECORD        /BUMP TO NEXT RECORD
  4028.     ISZ    FLEN            /DONE ALL RECORDS? (BINARY MODE ONLY)
  4029.     JMP    GETNEWRECORD        /NO, GO DO ANOTHER ONE
  4030.  
  4031. /    BINARY <EOF> REACHED HERE.
  4032.  
  4033.     JMP    GETEOF            /TAKE SKIP RETURN TO MAIN CALLER
  4034.  
  4035. PUTONE,    .-.                /SEND BACK A BYTE ROUTINE
  4036.     CDF    BUFFLD            /GOTO BUFFER FIELD
  4037.     TAD I    BUFPTR            /GET LATEST WORD
  4038.     AND    [7400]            /JUST THIRD-BYTE NYBBLE
  4039.     CLL RAL                /MOVE UP
  4040.     TAD    THIRD            /GET OLD NYBBLE (IF ANY)
  4041.     RTL;RTL                /MOVE UP NYBBLE BITS
  4042.     DCA    THIRD            /SAVE FOR NEXT TIME
  4043.     TAD I    BUFPTR            /GET LATEST WORD AGAIN
  4044.     JMS    PUTC            /SEND BACK CURRENT BYTE
  4045.     ISZ    BUFPTR            /BUMP TO NEXT WORD
  4046.     JMP I    PUTONE            /RETURN
  4047.  
  4048. PUTC,    .-.                /SEND BACK LATEST BYTE ROUTINE
  4049.     CDF    PRGFLD            /BACK TO OUR FIELD
  4050.     RAL                /MOVE UP
  4051.     STL RAR                /MOVE DOWN WITH BIT[0] SET
  4052.     AND    FILMODE            /KEEP ONLY GOOD BITS
  4053.     TAD    [-CNTRLZ]        /COMPARE TO <^Z>
  4054.     SNA                /SKIP IF NOT ASCII MODE <EOF>
  4055.     JMP    GETEND            /JUMP IF ASCII MODE <EOF>
  4056. GETUPZ,    TAD    [CNTRLZ]        /RESTORE THE CHARACTER
  4057.     AND    [377]            /ENSURE EIGHT-BIT (MIGHT ALREADY BE SEVEN-BIT)
  4058.     ISZ    GETBYTE            /BUMP PAST <EOF> RETURN
  4059. GETEOF,    ISZ    GETBYTE            /BUMP PAST I/O ERROR RETURN
  4060.     JMP I    GETBYTE            /RETURN TO MAIN CALLER
  4061.  
  4062. /    GOT <Z> IN ASCII MODE.
  4063.  
  4064. GETEND,    TAD    OCTLZFLAG        /GET <^Z> DISPOSITION FLAG
  4065.     SNA CLA                /SKIP IF SET
  4066.     JMP    GETEOF            /JUST RETURN <EOF> CONDITION
  4067.     TAD    (GETEOF)        /POINT TO <EOF>
  4068.     DCA    PUTC            /FOR NEXT TIME
  4069.     JMP    GETUPZ            /GIVE THEM BACK <^Z> THIS TIME
  4070. /    OS/8 FILE PACK ROUTINE.                        /020 CJL
  4071.  
  4072. /    THIS ROUTINE PACKS BYTES INTO THE OUTPUT  FILE  ACCORDING TO THE CURRENT VALUE
  4073. /    OF FILMODE:
  4074.  
  4075. /    FILMODE CONTAINS 0177 (ASCII MODE).  ALL BYTES  ARE TREATED AS SEVEN-BIT ASCII
  4076. /    CHARACTERS BY STRIPPING THE HIGH-ORDER BIT.
  4077.  
  4078. /    FILMODE  CONTAINS  4377  (BINARY MODE).  ALL BYTES ARE  TREATED  AS  EIGHT-BIT
  4079. /    CHARACTERS AND WILL BE WRITTEN AS IS.
  4080.  
  4081. /    CALLING CONSIDERATIONS:
  4082.  
  4083. /    FILMODE MUST BE SETUP ACCORDINGLY.
  4084.  
  4085. /    FLEN  MUST  CONTAIN  -(MAXIMUM  FILE LENGTH IN RECORDS) WHEN INITIALIZING  THE
  4086. /    TENTATIVE OUTPUT FILE.  IT WILL BE MODIFIED BY CALLING THIS ROUTINE.
  4087.  
  4088. /    FSBLK  MUST CONTAIN THE STARTING RECORD WHEN INITIALIZING THE TENTATIVE OUTPUT
  4089. /    FILE.
  4090.  
  4091. /    HNDADR MUST ALREADY BE SETUP TO CALL THE OUTPUT HANDLER.
  4092.  
  4093. /    CALLING SEQUENCE:
  4094.  
  4095. /    NL7777                /ANY NEGATIVE VALUE
  4096. /    JMS I    [PUTBYTE]        /CALL ROUTINE TO INITIALIZE
  4097. /    IMPOSSIBLE            /CAN'T RETURN HERE
  4098. /    GOOD RETURN            /ALWAYS RETURNS HERE
  4099.  
  4100. /    OR
  4101.  
  4102. /    TAD    (CHAR&377)        /ANY EIGHT-BIT (OR LESS) VALUE
  4103. /    JMS I    [PUTBYTE]        /CALL ROUTINE TO PACK A CHARACTER
  4104. /    ERROR RETURN            /I/O ERROR WHILE WRITING A BUFFER
  4105. /    GOOD RETURN            /CHARACTER PACKED WITH NO ERRORS
  4106.  
  4107. /    ALL RETURNS CLEAR THE AC.
  4108.  
  4109. PUTBYTE,.-.                /OUTPUT A BYTE ROUTINE
  4110.     SPA                /ARE WE INITIALIZING?
  4111.     JMP    PUTINITIALIZE        /YES
  4112.     AND    FILMODE            /REDUCE TO SEVEN-BIT/EIGHT-BIT
  4113.     DCA    LATEST            /SAVE LATEST CHARACTER
  4114.     CDF    BUFFLD            /GOTO BUFFER FIELD
  4115.     TAD    LATEST            /GET LATEST CHARACTER
  4116.     JMP I    PUTNEXT            /GO WHERE YOU SHOULD GO
  4117.  
  4118. PUTNEXT,.-.                /EXIT ROUTINE
  4119.     ISZ    PUTBYTE            /BUMP TO GOOD RETURN
  4120. PUTERRO,CLA CLL                /CLEAN UP
  4121.     CDF    PRGFLD            /BACK TO OUR FIELD
  4122.     JMP I    PUTBYTE            /RETURN TO MAIN CALLER
  4123. PUTINIT,CLA                /CLEAN UP
  4124.     TAD    FSBLK            /GET STARTING RECORD OF TENTATIVE FILE
  4125.     DCA    PUTRECORD        /STORE IN-LINE
  4126.     DCA I    (FLENGTH)        /CLEAR ACTUAL FILE LENGTH
  4127. PUTNEWR,TAD    PUTCORE/(FILEBUFFER)    /SETUP THE
  4128.     DCA    BUFPTR            /BUFFER POINTER
  4129. PUTLOOP,JMS    PUTNEXT            /GET A CHARACTER
  4130.     DCA I    BUFPTR            /STORE IT
  4131.     TAD    BUFPTR            /GET POINTER VALUE
  4132.     DCA    TEMPTR            /SAVE FOR LATER
  4133.     ISZ    BUFPTR            /BUMP TO NEXT
  4134.     JMS    PUTNEXT            /GET A CHARACTER
  4135.     DCA I    BUFPTR            /STORE IT
  4136.     JMS    PUTNEXT            /GET A CHARACTER
  4137.     RTL;RTL                /MOVE UP
  4138.     AND    [7400]            /ISOLATE HIGH NYBBLE
  4139.     TAD I    TEMPTR            /ADD ON FIRST BYTE
  4140.     DCA I    TEMPTR            /STORE COMPOSITE
  4141.     TAD    LATEST            /GET LATEST CHARACTER
  4142.     RTR;RTR;RAR            /MOVE UP AND
  4143.     AND    [7400]            /ISOLATE LOW NYBBLE
  4144.     TAD I    BUFPTR            /ADD ON SECOND BYTE
  4145.     DCA I    BUFPTR            /STORE COMPOSITE
  4146.     ISZ    BUFPTR            /BUMP TO NEXT
  4147.     TAD    BUFPTR            /GET LATEST POINTER VALUE
  4148.     TAD    (-PAGCNT^200-FILBUFFER)    /COMPARE TO LIMIT
  4149.     SZA CLA                /SKIP IF AT END
  4150.     JMP    PUTLOOP            /KEEP GOING
  4151.     CDF    PRGFLD            /BACK TO OUR FIELD
  4152.     ISZ    FLEN            /TOO MANY RECORDS?
  4153.     SKP                /SKIP IF NOT
  4154.     JMP I    PUTBYTE            /TAKE ERROR RETURN
  4155.     JMS I    HNDADR            /CALL I/O HANDLER
  4156.     PAGCNT^100+BUFFLD+WRITE        /WRITE SOME PAGES FROM BUFFER FIELD
  4157. PUTCORE,FILBUFFER            /BUFFER ADDRESS
  4158. PUTRECO,.-.                /WILL BE LATEST RECORD NUMBER
  4159.     JMP    PUTERROR        /OUTPUT ERROR!
  4160.     ISZ I    (FLENGTH)        /BUMP ACTUAL LENGTH
  4161.     ISZ    PUTRECORD        /BUMP TO NEXT RECORD
  4162.     JMP    PUTNEWRECORD        /KEEP GOING
  4163.  
  4164. BUFPTR,    .-.                /INPUT/OUTPUT BUFFER POINTER
  4165.  
  4166. /    ASCII FILE MODE <^Z> OUTPUT DISPOSITION FLAG.
  4167.  
  4168. OCTLZFL,OCLOSE                /ZERO=DON'T SEND <^Z> AT <EOF>,
  4169.                     /NON-ZERO=SEND <^Z> AT <EOF>
  4170.  
  4171.     THIRD=    PUTNEXT            /THIRD BYTE TEMPORARY
  4172.  
  4173.     TEMPTR=    PUTONE            /TEMPORARY BUFFER POINTER
  4174.     PAGE
  4175. /    OUTPUT FILE CLOSE ROUTINE                    /020 CJL
  4176.  
  4177. /    THIS  ROUTINE  CLOSES  THE OPEN OUTPUT FILE ACCORDING TO THE CURRENT VALUE  OF
  4178. /    FILMODE:
  4179.  
  4180. /    FILMODE  CONTAINS  0177  (ASCII  MODE).  ALL BYTES PRIOR TO CLOSE ARE STRIPPED
  4181. /    SEVEN-BIT CHARACTERS.    IF  THE  LAST  CHARACTER SENT TO PUTBYTE (CONTENTS OF
  4182. /    LATEST) IS A  <^Z>,  THEN  JUST  CLOSE THE FILE.  IF NOT, THEN IF ICTLZFLAG IS
  4183. /    NON-ZERO, INSERT A <^Z>  CHARACTER INTO THE FILE AS <EOF> INDICATOR, ELSE JUST
  4184. /    CLOSE THE FILE.
  4185.  
  4186. /    FILMODE CONTAINS 4377 (BINARY MODE).    ALL BYTES PRIOR TO CLOSE ARE EIGHT-BIT
  4187. /    CHARACTERS.  IF NECESSARY, <NUL> CHARACTERS WILL BE APPENDED TO THE END OF THE
  4188. /    LAST BLOCK OF THE FILE TO FILL IT.  THE FILE IS CLOSED OTHERWISE UNMODIFIED.
  4189.  
  4190. /    CALLING CONSIDERATIONS.
  4191.  
  4192. /    OFFLG MUST BE SET (OUTPUT FILE IS OPEN).
  4193.  
  4194. /    FLENGTH MUST CONTAIN THE ACTUAL FILE LENGTH.
  4195.  
  4196. /    LATEST MUST CONTAIN THE LAST BYTE SENT  TO  THE OUTPUT FILE VIA PUTBYTE (ASCII
  4197. /    MODE ONLY).
  4198.  
  4199. /    ICTLZFLAG MUST BE SETUP ACCORDINGLY.
  4200.  
  4201. /    FILMODE MUST BE SETUP ACCORDINGLY.
  4202.  
  4203. /    CALLING SEQUENCE:
  4204.  
  4205. /    CLA CLL            /CLEAR AC
  4206. /    JMS I    (FILCLOSE)    /CALL ROUTINE
  4207. /    ERROR RETURN        /ERROR WHILE CLOSING FILE
  4208. /    GOOD RETURN        /FILE CLOSED PROPERLY
  4209.  
  4210. /    ON RETURN, OFFLG WILL BE CLEAR; THE AC WILL BE CLEAR ALSO.
  4211.  
  4212. FILCLOS,.-.            /OUTPUT FILE CLOSE ROUTINE
  4213.     TAD    FILMODE        /GET CURRENT FILE MODE
  4214.     SPA CLA            /SKIP IF ASCII
  4215.     JMP    CLOSIT        /JUMP IF BINARY
  4216.     TAD    LATEST        /GET LATEST CHARACTER
  4217.     TAD    [-CNTRLZ]    /COMPARE TO <^Z>
  4218.     SZA CLA            /SKIP IF <^Z> ALREADY IN FILE
  4219.     TAD    ICTLZFLAG    /GET <^Z> DISPOSITION FLAG
  4220.     SNA CLA            /SKIP IF SET
  4221.     JMP    CLOSIT        /JUMP IF NOT
  4222.     TAD    [CNTRLZ]    /GET A <^Z>
  4223. CLOSLUP,JMS I    [PUTBYTE]    /OUTPUT A BYTE
  4224.     JMP    CLOSERROR    /ERROR WHILE WRITING
  4225. CLOSIT,    TAD I    (BUFPTR)    /GET THE BUFFER POINTER
  4226.     TAD    (-FILBUFFER)    /COMPARE TO RESET VALUE
  4227.     SZA CLA            /SKIP IF IT MATCHES
  4228.     JMP    CLOSLUP        /ELSE KEEP GOING
  4229.     TAD    ODNUMBER    /GET OUTPUT DEVICE NUMBER
  4230.     CIF    USRFLD        /GOTO USR FIELD
  4231.     JMS I    [USRENTRY]    /CALL USER SERVICE ROUTINE        /035 CJL
  4232.     CLOSE            /CLOSE FILE
  4233.     FNBLK            /=> FILENAME
  4234. FLENGTH,.-.            /ACTUAL FILE LENGTH
  4235. CLOSERR,SKP CLA            /ERROR WHILE CLOSING THE FILE
  4236.     ISZ    FILCLOSE    /BUMP RETURN IF NO ERRORS
  4237.     DCA    OFFLG        /CLEAR OUTPUT FILE OPEN FLAG
  4238.     JMP I    FILCLOSE    /RETURN TO CALLER
  4239.  
  4240. /    ASCII FILE MODE <^Z> INPUT DISPOSITION FLAG.
  4241.  
  4242. ICTLZFL,ICLOSE            /ZERO=DON'T ENSURE <^Z> IN FILE, NON-ZERO=PACK <^Z>
  4243.                 /IF LAST CHARACTER WASN'T <^Z>
  4244. /    SEND PROCESSING
  4245.  
  4246. SNDPRO,    0
  4247.     TAD    INIFLG        /CHECK IF SEND/INIT HAS BEEN DONE
  4248.     SZA CLA            /SKIP IF NO
  4249.     JMP    SNDP10        /RIGHT INTO FILE TRANSFER
  4250.     TAD    (DEFCK        /SET UP DEFAULT CHECKSUM
  4251.     DCA    RCHKT
  4252.     TAD    (DEFEOL        /GET DEFAULT EOL
  4253.     DCA    REOL        /AND SET IT
  4254.     TAD    (DEFQCTL    /GET DEFAULT QUOTE CONTROL CHAR
  4255.     DCA    RQCTL        /AND SET IT UP
  4256.     TAD    (DEFMAXL+40    /GET DEFAULT MAX BUFFER SIZE
  4257.     DCA    RMAXL        /SET IT UP
  4258.     DCA    CURSEQ        /RE-SET SEQUENCE NUMBER
  4259.     JMS I    (SNDI00)    /HANDLE "SEND-INIT"
  4260.     JMP I    SNDPRO        /TAKE ERROR RETURN            /014 CJL
  4261.  
  4262. /    SEND FILE HEADER DISPATCH ROUTINE
  4263.  
  4264. SNDP10,    FPACK            /FORMAT A PACKET
  4265.     NAMBUF            /ADDRESS OF FILE HEADER FOR DATA
  4266.     STFIL            /"FIL" PACKET TYPE
  4267.  
  4268. SNDP11,    SPACK            /SEND A PACKET
  4269.     1            /AWAIT RESPONSE
  4270.     SNDP96-2        /DISPATCH TABLE ADDRESS            /026 CJL
  4271.  
  4272. /    GOT A NAK OR UNDEFINED HERE
  4273.  
  4274. SNDP12,    ISZ    RTRYC        /BUMP THE COUNTER
  4275.     JMP    SNDP11        /TRY AGAIN
  4276.     JMP I    SNDPRO        /TAKE ERROR RETURN            /014 CJL
  4277.  
  4278. /    FILE CREATION DATE HANDLING
  4279.  
  4280. SNDP15,    IFZERO    1    <
  4281.  
  4282.     TAD    RCAPAS        /CHECK IF REMOTE SUPPORTS FILE
  4283.     AND    (10        /  ATTRIBUTES
  4284.     SNA CLA            /SKIP IF YES
  4285.     JMP    SNDP20        /SKIP IF NO
  4286.     FPACK            /FORMAT PACKET
  4287.     DATBUF            /DATE DATA
  4288.     STATT            /"ATT" PACKET TYPE
  4289.  
  4290. SNDP16,    SPACK            /SEND THE PACKET
  4291.     1            /AWAIT RESPONSE
  4292.     SNDP98-2        /DISPATCH TABLE ADDRESS            /027 CJL
  4293.     JMP I    SNDPRO        /TAKE ERROR RETURN            /014 CJL
  4294.  
  4295.             >
  4296. /    GOT ACK HERE
  4297.  
  4298. SNDP20,    JMS I    [SCRIBE]    /TELL THEM                /025 CJL
  4299.     FSENMSG            /WE ARE SENDING                /025 CJL
  4300.     PRI8B;    NAMBUF        /TELL THEM THE NAME OF THE FILE
  4301.     JMS I    [SCRIBE]    /DO A                    /025 CJL
  4302.     CRLF            /<CR>, <LF>                /025 CJL
  4303.     JMS    SLOOP
  4304.     SKP            /ERROR RETURN
  4305.     ISZ    SNDPRO        /BUMP FOR NON-ERROR EXIT
  4306.     JMP I    SNDPRO
  4307. /    DATA SEND LOOP.
  4308. /    ROUTINE TO GET CHARS FROM THE INPUT BUFFER AND SEND THEM TO REMOTE
  4309. /    VIA PACKET TRANSFERS.  RETURN + 1 IF ERROR, + 2 IF DONE.
  4310.  
  4311. SLOOP,    0
  4312.     JMS I    (INIOPB)    /INIT OUTPUT PACKET HOLD BUFFER
  4313.     NL7777            /INITIALIZE INPUT FILE ROUTINE        /019 CJL
  4314. SLOP01,    JMS I    (GETBYTE)    /GET A FILE CHARACTER            /019 CJL
  4315.     JMP I    SLOOP        /FATAL I/O ERROR            /026 CJL
  4316.     JMP    SLOP15        /HERE ON EOF
  4317.     JMS I    (OPBUF)        /PUT INTO PACKET BUFFER
  4318.     SKP            /RETURN HERE ON BUFFER FULL
  4319.     JMP    SLOP01        /RETURN HERE IF STILL ROOM
  4320.  
  4321. /    PACKET IS FULL HERE, WE MUST SEND IT.
  4322.  
  4323.     FPACK            /FORMAT A PACKET
  4324.     HOLDBF            /DATA ADDRESS
  4325.     STDAT            /"DAT" PACKET TYPE
  4326.  
  4327. SLOP05,    SPACK            /SEND PACKET
  4328.     1            /AWAIT RESPONSE
  4329.     SLOP90-2        /RESPONSE TABLE ADDRESS            /027 CJL
  4330.  
  4331. /    HERE ON NAK OR FALL THRU ON UNDEFINED RESPONSE ABOVE.
  4332.  
  4333. SLOP10,    ISZ    RTRYC        /BUMP THE RE-TRY COUNTER
  4334.     JMP    SLOP05        /TRY AGAIN
  4335.     JMP I    SLOOP        /TAKE ERROR RETURN            /026 CJL
  4336.  
  4337. /    HERE ON END OF FILE  --  SEND THEM WHAT WE HAVE.
  4338.  
  4339. SLOP15,    TAD I    (OP2)        /GET THE POINTER            /052 CJL
  4340.     TAD    (-HOLDBF)    /COMPARE TO EMPTY VALUE            /052 CJL
  4341.     SNA CLA            /SKIP IF NOT EMPTY            /052 CJL
  4342.     JMP    SLOP35        /JUMP IF EMPTY                /052 CJL
  4343.     FPACK            /FORMAT A PACKET
  4344.     HOLDBF            /ADDRESS OF DATA
  4345.     STDAT            /"DAT" PACKET TYPE
  4346.  
  4347. SLOP20,    SPACK            /SEND A PACKET
  4348.     1            /AWAIT RESPONSE
  4349.     SLOP92-2        /DISPATCH TABLE ADDRESS            /027 CJL
  4350.  
  4351. /    NAK FOR LAST PACKET.        
  4352.  
  4353. SLOP25,    ISZ    RTRYC        /BUMP RE-TRY COUNTER
  4354.     JMP    SLOP20        /TRY AGAIN
  4355.     JMP I    SLOOP        /TAKE ERROR RETURN            /026 CJL
  4356. /    ACK FOR FINAL PACKET, SEND AN EOF PACKET.
  4357.  
  4358. SLOP35,    JMS I    [SNDP]        /SEND A PACKET
  4359.     NODATA            /NO DATA
  4360.     STEOF            /MAKE IT AN EOF PACKET
  4361.     JMP I    SLOOP        /NAK, TAKE ERROR RETURN
  4362.     JMP I    SLOOP        /OTHER THAN ACK, NAK; TAKE ERROR RETURN    /026 CJL
  4363.     ISZ    SLOOP        /EOF ACCEPTED, BUMP FOR GOOD RETURN
  4364.     JMP I    SLOOP        /TAKE GOOD RETURN
  4365.  
  4366.     PAGE
  4367. SLOP90,    STACK;    SLOP01        /ACK, CONTINUE
  4368.     STNAK;    SLOP10        /NAK, HANDLE
  4369.     0
  4370.  
  4371. SLOP92,    STACK;    SLOP35        /ACK, CONTINUE
  4372.     STNAK;    SLOP25        /NAK, HANDLE
  4373.     0
  4374.  
  4375. /    COMMAND DISPATCH TABLE FOR SEND SERVICE.
  4376.  
  4377. SNDP96,    STACK;    SNDP15        /FILE HEADER ACKNOWLEDGED
  4378.     STNAK;    SNDP12        /NAK RETURNED, RE-TRY
  4379.     0            /END OF TABLE
  4380.  
  4381. SNDP98,    STACK;    SNDP20        /DATE ATTRIBUTE ACKNOWLEDGED
  4382.     0            /END OF TABLE
  4383. /    ROUTINE TO HANDLE A "SEND-INIT" COMMAND.
  4384. /    RETURN + 1 IF ERROR.
  4385. /    RETURN + 2 IF SUCCESSFUL.
  4386.  
  4387. SNDI00,    0
  4388.     FPACK            /FORMAT A PACKET
  4389.     INIDAT            /ADDRESS OF DATA FOR PACKET
  4390.     STSIN            /"SIN" PACKET TYPE
  4391.  
  4392. SNDI02,    SPACK            /SEND A PACKET
  4393.     1            /AWAIT RESPONSE
  4394.     SNDI80-2        /RESPONSE TABLE TYPE            /027 CJL
  4395.  
  4396. /    HERE ON NAK OR UNDEFINED.
  4397.  
  4398. SNDI05,    ISZ    RTRYC        /BUMP RE-TRY COUNTER
  4399.     JMP    SNDI02        /TRY AGAIN
  4400.     JMP I    SNDI00        /TAKE ERROR EXIT
  4401.  
  4402. /    HERE ON ACK.
  4403.  
  4404. SNDI10,    JMS    SETINI        /SET UP THE INIT REGISTERS
  4405.     NL0001 CLL        /NOW FLAG THE SEND/INIT DONE        /032 CJL
  4406.     DCA    INIFLG        /BY MAKING THIS NON-ZERO
  4407.     ISZ    SNDI00        /BUMP FOR NON-ERROR RETURN
  4408.     JMP I    SNDI00        /BACK TO MAIN SEND PROCESSING
  4409.  
  4410. SNDI80,    STACK;    SNDI10        /GOT AN ACK
  4411.     STNAK;    SNDI05        /NAK
  4412.     0            /END OF TABLE
  4413.  
  4414.  
  4415. /    ROUTINE TO MOVE THE SEND/INIT OR RECEIVE/INIT PACKET INTO THE INIT REGISTERS.
  4416.  
  4417. SETINI,    0
  4418.     TAD    (RMAXL        /GET ADDRESS OF RECEIVE INIT REGISTERS
  4419.     DCA    MQ        /SETUP FOR CLEAR ROUTINE        /032 CJL
  4420.     TAD    (RMAXL-INITEND)    /GET -(NUMBER OF REGISTERS)        /022 CJL
  4421.     CLEAR            /CLEAR OUT A CHUNK OF MEMORY        /M013
  4422. /    TAD    (RMAXL        /GET ADDRESS OF RECEIVE INIT REGISTERS
  4423. /    DCA    MQ        /SETUP FOR MOVE ROUTINE            /032 CJL
  4424.     TAD I    [RRLEN]        /GET LENGTH OF PACKET JUST INPUT
  4425.     TAD    (-40-4        /COUNT OF DATA RECEIVED
  4426.     TAD    (RMAXL-INITEND)    /COMPARE TO MAXIMUM ALLOWED        /022 CJL
  4427.     SMA SZA            /SKIP IF NOT TOO MANY            /022 CJL
  4428.     CLA            /ELSE USE ALLOWED MAXIMUM        /022 CJL
  4429.     TAD    (INITEND-RMAXL)    /RESTORE VALUE                /022 CJL
  4430.     CIA            /MAKE IT NEGATIVE
  4431.     DCA    MOVE4        /SAVE FOR "MOVE" ROUTINE
  4432.     TAD    (RRDTA        /ADDRESS OF DATA IN PACKET
  4433.     MOVE            /MOVE THE INIT REGISTERS
  4434.     JMP I    SETINI        /DONE
  4435.     IFZERO    1    <                        /D013
  4436.  
  4437. /    ROUTINE TO SEND THE DATE IN A DATA PACKET.
  4438. /    RETURN + 1 IF ERROR, + 2 IF SUCCESSFUL.
  4439.  
  4440. DATOUT,    0
  4441.     JMS    INIOPB        /INSURE PACKET HOLD BUFFER INITIALIZED
  4442.     TAD    (SETDAT        /GET ADDRESS OF DATE
  4443.     DCA    DATOU9        /PUT INTO POINTER
  4444.  
  4445. DATOU1,    TAD I    DATOU9        /GET A CHAR
  4446.     ISZ    DATOU9        /BUMP POINTER
  4447.     SPA            /SKIP IF NOT ENT
  4448.     JMP    DATOU2        /DONE
  4449.     JMS    OPBUF        /PUT INTO HOLD BUFFER
  4450.     SKP            /HOLD FULL, SEND IT
  4451.     JMP    DATOU1        /LOOP
  4452.  
  4453. DATOU2,    CLA CLL            /INSURE CLEAR AC
  4454.     FPACK            /FORMAT A PACKET
  4455.     HOLDBF            /DATA ADDRESS
  4456.     STDAT            /DATA PACKET
  4457.  
  4458. DATOU3,    SPACK            /SEND THE PACKET
  4459.     1            /GET RESPONSE
  4460.     DATOU7-2        /DISPATCH TABLE ADDRESS            /027 CJL
  4461.  
  4462. /    HERE ON NAK OR UNDEFINED RESPONSE.
  4463.  
  4464. DATOU4,    ISZ    RTRYC        /BUMP RE-TRY COUNTER
  4465.     JMP    DATOU3        /TRY AGAIN
  4466.     JMP I    DATOUT        /ABORT
  4467.  
  4468. /    HERE ON ACK.
  4469.  
  4470. DATOU5,    ISZ    DATOUT        /BUMP FOR GOOD RETURN
  4471.     JMP I    DATOUT        /EXIT
  4472.  
  4473. DATOU7,    STACK;    DATOU5        /ACK
  4474.     STNAK;    DATOU4        /NAK
  4475.     0
  4476.  
  4477. DATOU9,    0            /TEMP POINTER FOR DATOUT
  4478.  
  4479.             >                        /D013
  4480. /    HANDLE AN ABORT REQUEST.
  4481.  
  4482. ABORT,    CLA CLL            /INSURE CLEAR AC
  4483.     DCA    ABFLAG        /CLEAR ABORT FLAG NOW            /044 CJL
  4484.     TAD    KMODE        /GET CURRENT MODE
  4485.     TAD    (-MSEND        /IS IT A SEND?
  4486.     SZA            /SKIP IF YES
  4487.     JMP    ABORT2        /NOT SEND
  4488.  
  4489.     JMS I    [SNDP]        /SEND OUT A PACKET
  4490.     ABORT9            /WHICH HAS A "D" IN THE DATA
  4491.     STEOF            /AND IS AN EOF PACKET
  4492.     NOP            /WE GOT NAK BACK HERE
  4493.     NOP            /WE GOT NEITHER NAK OR ACK HERE
  4494.     JMS I    (BRKXMT)    /BREAK THE SEND
  4495.     JMP    ABORT3        /FINISH THE ABORT
  4496.  
  4497. ABORT2,    TAD    (MSEND-MREC    /CHECK IF IN RECEIVE MODE
  4498.     SZA CLA            /SKIP IF YES
  4499.     JMP    ABORT3        /JUST BACK TO COMMAND LOOP
  4500.     JMS I    [SNDP]        /SEND A PACKET BACK FOR AN ABORT
  4501.  
  4502.     IFZERO    1    <                        /D009
  4503.  
  4504.     ABORT8            /WHICH HAS AN "X" IN THE DATA
  4505.     STACK            /MAKE IT AN ACK PACKET
  4506.     NOP            /NAK HERE
  4507.     NOP            /NOT NAK OR ACK HERE
  4508.  
  4509.             >                        /D009
  4510.  
  4511.     NODATA            /NO DATA                /A009
  4512.     STBRK            /BREAK TRANSMISSION            /A009
  4513.     NOP            /NAK HERE                /A009
  4514.     CLA            /NOT ACK OR NAK HERE            /A009
  4515.     TAD    OFFLG        /GET FILE OPEN FLAG            /A009
  4516.     SZA CLA            /IS IT OPEN YET?            /A009
  4517.     JMS I    [FILCLOSE]    /CLOSE THE OUTPUT FILE            /020 CJL
  4518.     CLA            /ERROR DURING CLOSE **** FIX THIS ****
  4519. ABORT3,    TAD    (ABMSG)        /GET MESSAGE ADDRESS            /044 CJL
  4520.     JMP I    [CLOOP7]    /DISPLAY THE ABORT
  4521.  
  4522. ABORT9,    "D&137            /DATA PACKET FOR SEND ABORT
  4523.     -1
  4524.  
  4525.     PAGE                                /014 CJL
  4526. /    ROUTINE TO PRINT 8 BIT CHARS ON THE  TTY.  ENTER ROUTINE WITH THE ADDRESS OF
  4527. /    THE TEXT IN THE AC OR IF AC IS  ZERO  THE  ADDRESS  IS  IN THE CALL + 1.  TEXT
  4528. /    TERMINATES ON A MINUS WORD.
  4529.  
  4530. PRI8B0,    0
  4531.     SZA            /SKIP IF ADDRESS NOT IN AC
  4532.     JMP    PRI8B1        /ADDRESS IS IN THE AC
  4533.     TAD I    PRI8B0        /GET ADDRESS FROM CALL + 1
  4534.     ISZ    PRI8B0        /BUMP RETURN POINTER
  4535. PRI8B1,    DCA    MQ        /SAVE ADDRESS OF STRING            /032 CJL
  4536.     TAD    [P7ECHO]    /GET CONSOLE OUTPUT ROUTINE ADDRESS    /043 CJL
  4537.     JMS    EIGHTB        /AND SEND IT
  4538.     JMP I    PRI8B0        /ALL DONE
  4539.  
  4540. /    ROUTINE TO SEND 8 BIT CHARS DOWN THE REMOTE LINE.    ENTER  ROUTINE  WITH  THE
  4541. /    ADDRESS OF THE TEXT IN THE AC OR IF AC IS ZERO THE ADDRESS IS IN THE CALL + 1.
  4542. /    TEXT TERMINATES ON A MINUS WORD.
  4543.  
  4544. REM8B0,    0
  4545.     SZA            /SKIP IF ADDRESS NOT IN AC
  4546.     JMP    REM8B1        /ADDRESS IN AC
  4547.     TAD I    REM8B0        /GET ADDRESS FROM CALL + 1
  4548.     ISZ    REM8B0        /BUMP RETURN
  4549.  
  4550. REM8B1,    DCA    MQ        /SAVE ADDRESS OF STRING            /032 CJL
  4551.     TAD    (COMOUT)    /GET ADDRESS OF REMOTE OUTPUT ROUTINE    /046 CJL
  4552.     JMS    EIGHTB        /AND SEND THE STRING
  4553.     JMP I    REM8B0        /DONE
  4554.  
  4555.  
  4556. /    ROUTINE TO SEND 8 BIT DATA.  ENTER WITH ADDRESS OF DATA  IN  THE  MQ  AND  THE
  4557. /    ADDRESS  OF  THE ROUTINE TO TAKE EACH BYTE IN THE AC.  TEXT  TERMINATES  ON  A
  4558. /    MINUS WORD.
  4559.  
  4560. EIGHTB,    0
  4561.     DCA    EIGHT5        /STORE POINTER TO ROUTINE
  4562.     TAD    MQ        /GET STRING POINTER            /032 CJL
  4563.     DCA    EIGHT6        /STORE IN LOCAL POINTER
  4564.  
  4565. EIGHT1,    TAD I    EIGHT6        /GET A CHAR
  4566.     ISZ    EIGHT6        /BUMP THE POINTER
  4567.     SPA            /SKIP IF NOT EOL
  4568.     JMP    EIGHT2        /GOT EOL
  4569.     JMS I    EIGHT5        /CALL OUTPUT ROUTINE
  4570.     CLA CLL            /INSURE CLEAR AC
  4571.     JMP    EIGHT1        /LOOP
  4572.  
  4573. EIGHT2,    CLA CLL            /CLEAR THE AC
  4574.     JMP I    EIGHTB        /DONE
  4575.  
  4576. EIGHT5,    0            /POINTER TO ROUTINE TO DO OUTPUT
  4577. EIGHT6,    0            /POINTER TO TEXT TO OUTPUT
  4578. /    ROUTINE TO UNPACK 6-BT    CHARS FROM MEMORY.  BEFORE  CALLING INIT "GET6P" AS  A
  4579. /    POINTER  TO THE STRING LOCATION AND "GET6F" SHOULD BE ZEROED TO START WITH THE
  4580. /    TOP BYTE OF THE FIRST MEMORY LOCATION.
  4581.  
  4582. GET60,    0
  4583.     NL4000            /SET 4000                /032 CJL
  4584.     TAD    GET6F        /GET THE FLAG
  4585.     DCA    GET6F        /RETURN THE FLAG
  4586.     TAD I    GET6P        /GET TWO BYTES
  4587.     SZL            /HIGH-ORDER WANTED?            /032 CJL
  4588.     JMP    GETSWT        /JUMP IF NOT                /032 CJL
  4589.     RTR;RTR;RTR        /MOVE DOWN HIGH-ORDER HALF        /032 CJL
  4590.     SKP            /DON'T BUMP POINTER YET            /032 CJL
  4591. GETSWT,    ISZ    GET6P        /BUMP TO NEXT WORD            /032 CJL
  4592.     AND    [77]        /STRIP UNUSED BITS            /016 CJL
  4593.     JMP I    GET60        /DONE
  4594.  
  4595.  
  4596. /    LOCAL ROUTINE  TO  "FILN8"  TO  MAKE  THE 6 BIT CHAR IN THE AC INTO 8 BITS AND
  4597. /    STORE IN A STRING.
  4598.  
  4599. MOV8,    .-.            /6-BIT CHARACTER => 7-BIT CHARACTER    /028 CJL
  4600.     SNA            /SKIP IF SOMETHING PASSED        /028 CJL
  4601.     TAD    [" &77]        /ELSE SUPPLY A <SPACE>            /025 CJL
  4602.     TAD    [" &77]        /INVERT THE CHARACTER            /028 CJL
  4603.     AND    [77]        /JUST SIX-BITS                /014/016 CJL
  4604.     TAD    [" &77]        /MAKE IT SEVEN-BIT ASCII        /028 CJL
  4605.     DCA I    MOV8P        /STORE IN THE STRING            /028 CJL
  4606.     ISZ    MOV8P        /BUMP POINTER FOR NEXT TIME        /028 CJL
  4607.     JMP I    MOV8        /RETURN                    /028 CJL
  4608.  
  4609. MOV8P,    0            /POINTER FOR "MOV8" ROUTINE
  4610. /    ROUTINE TO PULL A FILE    NAME  IN 6 BIT POINTED TO  BY THE AC  AND PLACE IN THE
  4611. /    FILE NAME BUFFER IN  8  BIT  ADDING  IN  THE  "."  TO  SEPARATE  FILE NAME AND
  4612. /    EXTENSION.  A MINUS WORD WILL FOLLOW THE NAME.
  4613.  
  4614. FILN8,    0
  4615.     DCA    GET6P        /SET POINTER FOR "GET6"
  4616.     DCA    GET6F        /SET FLAG FOR "GET6"
  4617.     TAD    (NAMBUF        /GET ADDRESS OF THE NAME BUFFER
  4618.     DCA    MOV8P        /SET IN A POINTER
  4619.     TAD    (-6        /6 NAME CHARS TO DO
  4620.     DCA    FILN8C        /SAVE IN COUNTER
  4621.     GET6            /PULL A CHAR
  4622.     SZA            /SKIP IF A SPACE
  4623.     JMS    MOV8        /PUT INTO THE BUFFER
  4624.     ISZ    FILN8C        /BUMP COUNTER
  4625.     JMP    .-4        /LOOP TILL ALL 6 DONE
  4626.     TAD    (".&177)    /GET A "."                /034 CJL
  4627.     JMS    MOV8        /PUT WITH FILE NAME
  4628.     NL7776            /SET -2                    /032 CJL
  4629.     DCA    FILN8C        /2 EXTENSION CHARS
  4630.     GET6            /GET NEXT CHAR
  4631.     SZA            /SKIP IF A SPACE
  4632.     JMS    MOV8        /PUT WITH NAME
  4633.     ISZ    FILN8C        /BUMP COUNTER
  4634.     JMP    .-4        /LOOP
  4635.     NL7777            /SET -1                    /032 CJL
  4636.     DCA I    MOV8P        /TERMINATE THE STRING
  4637.     JMP I    FILN8        /AND RETURN
  4638.  
  4639. FILN8C,    0            /COUNTER FOR "FILN8"
  4640.  
  4641.     PAGE
  4642. /    CONSOLE I/O ROUTINES, ETC.                    /023 CJL
  4643.  
  4644. /    CONSOLE MESSAGE PRINT ROUTINE.
  4645.  
  4646. /    CALLING SEQUENCE:
  4647.  
  4648. /    JMS I    [SCRIBE]    /CALL MESSAGE PRINT ROUTINE
  4649. /    MESSAGEADDRESS        /MESSAGE ADDRESS PASSED IN-LINE
  4650.  
  4651. /    AC CAN BE DIRTY ON CALL.
  4652.  
  4653. /    RETURNS WITH CLEAR AC.
  4654.  
  4655. /    MESSAGE FORMAT:
  4656.  
  4657. /    ALL UPPER-CASE CHARACTERS ARE ALLOWED  TO  EXIST IN THE MESSAGE EXCEPT '%' AND
  4658. /    '^' WHICH ARE RESERVED.  A  ZERO  HALF-WORD TERMINATES THE MESSAGE STRING.  IF
  4659. /    '%' IS DETECTED, A <CR> AND <LF>  WILL  BE  OUTPUT.    IF '^' IS DETECTED, THE
  4660. /    PREVAILING CASE WILL BE REVERSED.  INITIAL CASE IS LOWER-CASE.  IF 'UPONLY' IS
  4661. /    SET  TO  7740,  ALL  CASE CHANGES ARE IGNORED AND  THE  OUTPUT  IS  FORCED  TO
  4662. /    UPPER-CASE  ONLY.    THE MESSAGE ADDRESS MUST BE IN FIELD  ONE  AND  MUST  NOT
  4663. /    OVERLAP  AREAS  RESERVED FOR OTHER PURPOSES (OS/8 RESIDENT AT 17600-17777, USR
  4664. /    LOCATIONS 10000-11777, ETC.).
  4665.  
  4666.  
  4667. SCRIBE,    .-.            /CONSOLE MESSAGE PRINT ROUTINE
  4668.     CLA            /CLEAN UP                /029 CJL
  4669.     TAD    [P7ECHO]    /POINT TO                /043 CJL
  4670. RSCRENT,DCA    MSGOUT        /CONSOLE PRINT ROUTINE
  4671.     TAD I    SCRIBE        /GET IN-LINE POINTER ARGUMENT
  4672.     DCA    SCRPTR        /STASH THE POINTER
  4673.     ISZ    SCRIBE        /BUMP PAST ARGUMENT
  4674.     TAD    UPONLY        /GET UPPER-ONLY VALUE            /030 CJL
  4675.     TAD    [140]        /ADD ON LOWER-CASE VALUE        /030 CJL
  4676.     DCA    SCRCASE        /STORE INITIAL CASE VALUE
  4677. SCRLUP,    CDF    MSGFLD        /GOTO MESSAGE FIELD
  4678.     TAD I    SCRPTR        /GET LEFT HALF-WORD
  4679.     RTR;RTR;RTR        /MOVE OVER
  4680.     JMS    SCRPRNT        /PRINT IT
  4681.     CDF    MSGFLD        /GOTO MESSAGE FIELD
  4682.     TAD I    SCRPTR        /GET RIGHT HALF-WORD
  4683.     JMS    SCRPRNT        /PRINT IT
  4684.     ISZ    SCRPTR        /BUMP TO NEXT PAIR
  4685.     JMP    SCRLUP        /KEEP GOING
  4686. SCRPRNT,.-.            /CHARACTER PRINT ROUTINE
  4687.     CDF    PRGFLD        /BACK TO OUR FIELD
  4688.     AND    [77]        /JUST SIX BITS
  4689.     SNA            /END OF MESSAGE?
  4690.     JMP I    SCRIBE        /YES, RETURN TO ORIGINAL CALLER
  4691.     DCA    SCRCHAR        /NO, SAVE FOR NOW
  4692.     TAD    SCRCHAR        /GET IT BACK
  4693.     TAD    (-"%!200)    /IS IT "%"?
  4694.     SNA            /SKIP IF NOT
  4695.     JMP    SCRCRLF        /JUMP IF IT MATCHES
  4696.     TAD    [-"^+100+"%]    /IS IT "^"
  4697.     SNA CLA            /SKIP IF NOT
  4698.     JMP    SCRFLIP        /JUMP IF IT MATCHES
  4699.     TAD    SCRCHAR        /GET THE CHARACTER
  4700.     AND    [40]        /DOES CASE MATTER?
  4701.     SNA CLA            /SKIP IF NOT
  4702.     TAD    SCRCASE        /ELSE GET PREVAILING CASE
  4703.     TAD    SCRCHAR        /GET THE CHARACTER
  4704. SCRPRLF,JMS I    MSGOUT        /PRINT THE CHARACTER
  4705.     JMP I    SCRPRNT        /RETURN
  4706.  
  4707. SCRCRLF,TAD    [CNTRLM]    /GET A <CR>
  4708.     JMS I    MSGOUT        /PRINT IT
  4709.     TAD    [CNTRLJ]    /GET A <LF>
  4710.     JMP    SCRPRLF        /CONTINUE THERE
  4711.  
  4712. SCRFLIP,TAD    UPONLY        /GET UPPER-ONLY FLAG
  4713.     SZA CLA            /SKIP IF OFF
  4714.     JMP I    SCRPRNT        /RETURN IF ON
  4715.     TAD    SCRCASE        /GET CURRENT CASE
  4716.     CIA            /INVERT IT
  4717.     TAD    (140+100)    /ADD SUM OF POSSIBLE VALUES
  4718.     DCA    SCRCASE        /STORE NEW INVERTED CASE
  4719.     JMP I    SCRPRNT        /RETURN
  4720.  
  4721. /    REMOTE LINE MESSAGE PRINT ROUTINE.
  4722.  
  4723. /    CALLING SEQUENCE:
  4724.  
  4725. /    JMS I    [RSCRIBE]    /CALL MESSAGE PRINT ROUTINE
  4726. /    MESSAGEADDRESS        /MESSAGE ADDRESS PASSED IN-LINE
  4727.  
  4728. /    AC CAN BE DIRTY ON CALL.
  4729.  
  4730. /    RETURNS WITH CLEAR AC.
  4731.  
  4732. /    MESSAGE FORMAT AND RESTRICTIONS ARE IDENTICAL TO SCRIBE ROUTINE.
  4733.  
  4734. RSCRIBE,.-.            /REMOTE LINE MESSAGE PRINT ROUTINE
  4735.     CLA            /CLEAN UP                /029 CJL
  4736.     TAD    RSCRIBE        /GET OUR CALLER
  4737.     DCA    SCRIBE        /MAKE IT THEIRS
  4738.     TAD    (COMOUT)    /POINT TO REMOTE OUTPUT ROUTINE
  4739.     JMP    RSCRENTRY    /CONTINUE THERE
  4740. /    ESCAPE CHARACTER PRINT ROUTINE.
  4741.  
  4742. /    CALLING SEQUENCE:
  4743.  
  4744. /    TAD    ESCHAR        /OR OTHER CHARACTER TO PRINT
  4745. /    JMS I    [ESCPRNT]    /CALL ROUTINE
  4746. /    RETURNS WITH CLEAR AC HERE
  4747.  
  4748. /    CAUSES CHARACTER TO PRINT LITERALLY IF CHARACTER>37.
  4749. /    CAUSES MESSAGE "CONTROL-" FOLLOWED BY CHARACTER+100 IF CHARACTER<40.
  4750.  
  4751. ESCPRNT,.-.            /ESCAPE CHARACTER PRINT ROUTINE
  4752.     DCA    ESCTEMP        /SAVE PASSED VALUE
  4753.     TAD    ESCTEMP        /GET IT BACK
  4754.     TAD    [-40]        /COMPARE TO CONTROL LIMIT
  4755.     SMA CLA            /SKIP IF LESS THAN LIMIT
  4756.     JMP    ESPRINT        /JUMP IF NOT
  4757.     JMS I    [SCRIBE]    /GIVE THEM THE
  4758.     CONTMSG            /CONTROL MESSAGE
  4759.     TAD    [100]        /MAKE IT UPPER-CASE, NOT CONTROL
  4760. ESPRINT,TAD    ESCTEMP        /GET ORIGINAL VALUE
  4761.     JMS I    [P7ECHO]    /PRINT IT                /043 CJL
  4762.     JMP I    ESCPRNT        /RETURN
  4763.  
  4764.     MSGOUT=    RSCRIBE        /OUTPUT ROUTINE POINTER
  4765.  
  4766. ESCTEMP,.-.            /TEMPORARY FOR ESCPRNT ROUTINE
  4767. SCRCASE,.-.            /CURRENT MESSAGE CASE
  4768. SCRCHAR,.-.            /LATEST MESSAGE CHARACTER
  4769. SCRPTR,    .-.            /MESSAGE POINTER
  4770.  
  4771.     PAGE
  4772. /    ROUTINE TO HANDLE THE "CONNECT" COMMAND.            /025 CJL
  4773.  
  4774. CONSRV,    .-.            /CONNECT SERVICE ROUTINE
  4775.     JMS I    [CREST2]    /SETUP CONSOLE OUTPUT ROUTINES        /025 CJL
  4776.     JMS I    [SCRIBE]    /GIVE THE
  4777.     CONNMSG            /OPENING MESSAGE
  4778.     TAD    ESCHAR        /GET THE CURRENT <ESCAPE> CHARACTER
  4779.     JMS I    [ESCPRNT]    /PRINT IT
  4780.     JMS I    [SCRIBE]    /GIVE THEM THE
  4781.     CON2MSG            /BRIDGING MESSAGE
  4782.     JMS I    [SCRIBE]    /PRINT OUT THE
  4783.     CPUMSG            /ACTUAL CPU TYPE
  4784.     JMS I    [SCRIBE]    /GIVE THEM THE
  4785.     CON3MSG            /CLOSING MESSAGE
  4786. CORESET,DCA    ESCFLAG        /CLEAR <ESCAPE> SEEN FLAG
  4787.     TAD    ESCHAR        /GET THE <ESCAPE> CHARACTER
  4788.     DCA    ESCH        /STORE IN SEARCH LIST
  4789.     JMS I    (CONRESET)    /RESET CONSOLE ROUTINES
  4790.     JMS I    (REMRESET)    /RESET REMOTE LINE ROUTINES
  4791. CONNLUP,TAD    KEYERROR    /GET KEYBOARD ERROR FLAG
  4792.     SNA            /SKIP IF KEYBOARD ERROR
  4793.     TAD    RINERROR    /ELSE GET REMOTE ERROR FLAG
  4794.     SZA CLA            /SKIP IF NEITHER KEYBOARD NOR REMOTE LINE ERRORS
  4795.     JMP    KERROR        /JUMP IF KEYBOARD ERROR
  4796.     JMS I    (CONTEST)    /TEST IF CONSOLE CAN TAKE OUTPUT
  4797.     JMP    TESTKEYBOARD    /JUMP IF NOT
  4798.     JMS I    (REMINPUT)    /TEST IF ANY REMOTE INPUT
  4799.     SKP            /SKIP IF NONE
  4800.     JMS I    (CONOUT)    /OUTPUT TO CONSOLE
  4801. TESTKEY,TAD    ECHOFLAG    /GET LOCAL ECHO FLAG
  4802.     TAD    ESCFLAG        /ADD ON <ESCAPE> SEEN FLAG
  4803.     SNA CLA            /SKIP IF LOCAL ECHO POSSIBLY NEEDED
  4804.     JMP    NOLOCALECHO    /JUMP IF NOT
  4805.     JMS I    (CONTEST)    /TEST IF CONSOLE CAN TAKE OUTPUT
  4806.     JMP    BUFCHECK    /JUMP IF NOT
  4807. NOLOCAL,JMS I    (REMTEST)    /TEST IF REMOTE CAN TAKE OUTPUT
  4808.     JMP    BUFCHECK    /JUMP IF NOT
  4809.     JMS I    (KEYINPUT)    /TEST IF ANY KEYBOARD INPUT
  4810.     JMP    BUFCHECK    /JUMP IF NOT
  4811.     DCA    KEYLATEST    /SAVE FOR LATER
  4812.     TAD    KEYLATEST    /GET IT BACK
  4813.     AND    [177]        /WANT SEVEN-BIT VERSION FOR TESTS
  4814.     CIA            /INVERT IT
  4815.     DCA    TESTCHAR    /SAVE FOR LATER
  4816.     TAD    ESCFLAG        /<ESCAPE> SEEN LAST TIME?
  4817.     SNA CLA            /SKIP IF SO
  4818.     JMP    NOESCAPE    /JUMP IF NOT
  4819.     TAD    TESTCHAR    /GET TEST VAUE
  4820.     JMS I    [SRCHTABLE]    /SEARCH FOR IT
  4821.     ESCLIST-1-1        /SEARCH TABLE POINTER
  4822.     SNA CLA            /SKIP IF FOUND
  4823.     JMP    ESCOMPLAIN    /JUMP IF NOT
  4824.     JMP I    TABLEJUMP    /GO WHERE YOU'RE SUPPOSED TO
  4825. /    COMES HERE IF PREVIOUS WAS NOT THE <ESCAPE> CHARACTER.
  4826.  
  4827. NOESCAP,TAD    TESTCHAR    /GET THE LATEST CHARACTER
  4828.     TAD    ESCHAR        /COMPARE TO <ESCAPE> CHARACTER
  4829.     SZA CLA            /SKIP IF IT MATCHES
  4830.     JMP    OUTCHAR        /JUMP IF NOT
  4831.     NL7777            /SET THE
  4832. /    DCA    ESCFLAG        /<ESCAPE> SEEN FLAG
  4833. /    JMP    BUFCHECK    /CONTINUE THERE
  4834.     JMP    NOESENTRY    /CONTINUE THERE
  4835.  
  4836. /    COMES HERE IF BOTH PREVIOUS AND LATEST ARE THE <ESCAPE> CHARACTER.
  4837.  
  4838. ESCTYPE,DCA    ESCFLAG        /CLEAR THE <ESCAPE> SEEN FLAG AND OUTPUT
  4839.  
  4840. /    COMES HERE IF PREVIOUS AND LATEST CHARACTER ARE NOT THE <ESCAPE> CHARACTER.
  4841.  
  4842. OUTCHAR,TAD    ECHOFLAG    /GET LOCAL ECHO FLAG
  4843.     SNA CLA            /SKIP IF SET
  4844.     JMP    NOECHO        /JUMP IF NOT
  4845.     TAD    KEYLATEST    /GET LATEST CHARACTER
  4846.     JMS I    (CONOUT)    /OUTPUT TO CONSOLE
  4847. NOECHO,    TAD    KEYLATEST    /GET LATEST CHARACTER
  4848.     JMS I    (REMOUT)    /OUTPUT TO REMOTE
  4849.     JMP    BUFCHECK    /CONTINUE THERE
  4850.  
  4851. /    COMES HERE IF PREVIOUS WAS THE <ESCAPE> CHARACTER AND THE LATEST IS NOT
  4852. /    A VALID <ESCAPE> COMMAND CHARACTER.
  4853.  
  4854. ESCOMPL,TAD    [CNTRLG]    /GET A <BEL>
  4855.     JMS I    (CONOUT)    /OUTPUT TO CONSOLE
  4856. NOESENT,DCA    ESCFLAG        /CLEAR <ESCAPE> SEEN FLAG
  4857. BUFCHEC,JMS I    PUPSTATUS    /UPDATE THE PORT STATUS            /047 CJL
  4858.  
  4859. /    THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY.  THE DEFAULT INSTRUCTION IS FOR
  4860. /    KL8 INTERFACES.
  4861.  
  4862.     *BUFCHECK        /OVERLAY DECMATE CODE            /047 CJL
  4863.  
  4864. BUFCHEC,NOP            /DON'T CHECK PORT STATUS        /047 CJL
  4865.  
  4866.     JMS I    (RINUPDATE)    /CHECK FOR MORE REMOTE INPUT
  4867.     JMS I    (KEYUPDATE)    /CHECK FOR MORE KEYBOARD INPUT
  4868.     JMS I    (REMUPDATE)    /CHECK FOR MORE REMOTE OUTPUT
  4869.     JMS I    (CONUPDATE)    /CHECK FOR MORE CONSOLE OUTPUT
  4870.     JMP    CONNLUP        /GO BACK FOR MORE
  4871.  
  4872. /    COMES HERE ON <ESCAPE> C(LOSE).
  4873.  
  4874. ESCLOSE,ISZ    CONSRV        /BUMP TO GOOD RETURN
  4875.     JMP I    CONSRV        /RETURN
  4876. KERRLUP,JMS I    PUPSTATUS    /UPDATE THE PORT STATUS            /047 CJL
  4877.  
  4878. /    THE ABOVE INSTRUCTION IS FOR DECMATE USE ONLY.  THE DEFAULT INSTRUCTION IS FOR
  4879. /    KL8 INTERFACES.
  4880.  
  4881.     *KERRLUP        /OVERLAY DECMATE CODE            /047 CJL
  4882.  
  4883. KERRLUP,NOP            /DON'T CHECK PORT STATUS        /047 CJL
  4884.  
  4885.     JMS I    (RINUPDATE)    /CHECK FOR MORE REMOTE INPUT
  4886.     JMS I    (KEYUPDATE)    /CHECK FOR MORE KEYBOARD INPUT
  4887.     JMS I    (REMUPDATE)    /CHECK FOR MORE REMOTE OUTPUT
  4888.     JMS I    (CONUPDATE)    /CHECK FOR MORE CONSOLE OUTPUT
  4889.  
  4890. /    COMES HERE ON KEYBOARD INPUT ERROR.
  4891.  
  4892. KERROR,    JMS I    (CONTEST)    /CONSOLE READY FOR OUTPUT?
  4893.     JMP    KERRLUP        /NO, GO WAIT AWHILE
  4894.     TAD I    (CONINSERT)    /GET CONSOLE INSERTION POINTER
  4895.     CIA            /INVERT FOR TEST
  4896.     TAD I    (CONREMOVE)    /COMPARE TO CONSOLE REMOVAL POINTER
  4897.     SZA CLA            /SKIP IF CONSOLE OUTPUT BUFFER EMPTY
  4898.     JMP    KERRLUP        /GO WAIT FOR AWHILE
  4899.     TAD    KEYERROR    /KEYBOARD INPUT ERROR?
  4900.     SNA CLA            /SKIP IF SO
  4901.     JMP    RIERTST        /JUMP IF NOT
  4902.     JMS I    [SCRIBE]    /TELL THEM
  4903.     KERRMSG            /WE HAD A KEYBOARD ERROR
  4904. RIERTST,TAD    RINERROR    /REMOTE INPUT ERROR?
  4905.     SNA CLA            /SKIP IF SO
  4906.     JMP    CORESET        /JUMP IF NOT
  4907.     JMS I    [SCRIBE]    /TELL THEM
  4908.     RIERMSG            /WE HAD A REMOTE LINE ERROR
  4909.     JMP    CORESET        /RESTART
  4910.  
  4911. /    <ESCAPE> CHARACTER SEARCH LIST.
  4912.  
  4913. ESCLIST,UPPERC;    ESCLOSE        /<ESCAPE> C(LOSE)
  4914.     LOWERC;    ESCLOSE        /<ESCAPE> C(LOSE) (LOWER-CASE)
  4915. ESCH,    .-.;    ESCTYPE        /<ESCAPE> <ESCAPE>
  4916.     0            /THIS ENDS THE LIST
  4917.  
  4918. /    LOCAL ECHO FLAG FOR CONNECT MODE.
  4919.  
  4920. ECHOFLA,INIECHO            /0=DON'T ECHO, NON-ZERO=ECHO        /039 CJL
  4921. ESCFLAG,.-.            /<ESCAPE> CHARACTER SEEN FLAG
  4922. KEYLATE,.-.            /LATEST KEYBOARD CHARACTER
  4923. PUPSTAT,UPSTATUS        /POINTER TO DECMATE STATUS UPDATE    /047 CJL
  4924. TESTCHA,.-.            /LATEST KEYBOARD TEST CHARACTER
  4925.     PAGE
  4926. /    CONNECT-MODE SUPPORT ROUTINES.                    /047 CJL
  4927.  
  4928. /    CONSOLE KEYBOARD ROUTINES.                    /047 CJL
  4929.  
  4930. /    KEYBOARD INPUT ROUTINE.                        /026 CJL
  4931.  
  4932. /    CALLING SEQUENCE:
  4933.  
  4934. /    JMS I    (KEYINPUT)    /CALL ROUTINE
  4935. /    NO INPUT        /RETURN IF NO INPUT
  4936. /    INPUT            /RETURN IF INPUT AVAILABLE
  4937.  
  4938. /    THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT.
  4939.  
  4940. /    THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN.
  4941.  
  4942. KEYINPU,.-.            /KEYBOARD INPUT ROUTINE
  4943.     TAD    KEYINSERT    /GET INSERTION POINTER
  4944.     CIA            /INVERT FOR TEST
  4945.     TAD    KEYREMOVE    /COMPARE TO REMOVAL POINTER
  4946.     SNA CLA            /SKIP IF BUFFER NOT EMPTY
  4947.     JMP    KEYCHECK    /JUMP IF BUFFER EMPTY
  4948.     TAD    KEYREMOVE    /GET REMOVAL POINTER
  4949.     DCA    KEYTEMP        /SAVE FOR LATER
  4950.     NL0001            /SET INCREMENT
  4951.     TAD    KEYREMOVE    /UPDATE REMOVAL POINTER
  4952.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  4953.     TAD    [KEYBUFFER]    /MAKE IT ABSOLUTE
  4954.     DCA    KEYREMOVE    /STORE UPDATED POINTER
  4955.     CDF    BUFFLD        /GOTO BUFFER FIELD
  4956.     TAD I    KEYTEMP        /GET THE LATEST CHARACTER
  4957.     CDF    PRGFLD        /BACK TO OUR FIELD
  4958.     SKP            /DON'T GET ANOTHER CHARACTER        /047 CJL
  4959.  
  4960. /    COMES HERE IF BUFFER IS EMPTY.
  4961.  
  4962. KEYCHEC,JMS    KEYGET        /TRY TO GET A CHARACTER NOW        /047 CJL
  4963.     ISZ    KEYINPUT    /GOT ONE, SO TAKE SKIP RETURN        /047 CJL
  4964.     JMP I    KEYINPUT    /RETURN EITHER WAY
  4965. /    KEYBOARD BUFFER UPDATE ROUTINE.                    /026 CJL
  4966.  
  4967. /    CALLING SEQUENCE:
  4968.  
  4969. /    JMS I    (KEYUPDATE)    /CALL ROUTINE
  4970.  
  4971. /    RETURNS  WITH  CLEAR  AC.    ANY  KEYBOARD  INPUT  WHICH JUST OCCURRED WILL BE
  4972. /    BUFFERED;  CALLS TO KEYINPUT WILL RETRIEVE THE CHARACTERS.
  4973.  
  4974. KEYUPDA,.-.            /KEYBOARD BUFFER UPDATE ROUTINE
  4975.     JMS    KEYGET        /TRY TO GET A CHARACTER NOW        /047 CJL
  4976.     SKP            /GOT ONE, DON'T LEAVE YET        /047 CJL
  4977.     JMP I    KEYUPDATE    /CHARACTER NOT AVAILABLE NOW, RETURN    /047 CJL
  4978.     CDF    BUFFLD        /GOTO BUFFER FIELD
  4979.     DCA I    KEYINSERT    /STORE IN THE BUFFER
  4980.     CDF    PRGFLD        /BACK TO OUR FIELD
  4981.     NL0001            /SET INCREMENT
  4982.     TAD    KEYINSERT    /UPDATE POINTER
  4983.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  4984.     TAD    [KEYBUFFER]    /MAKE IT ABSOLUTE
  4985.     DCA    KEYINSERT    /STORE BACK UPDATED POINTER
  4986.     TAD    KEYINSERT    /GET INSERTION POINTER
  4987.     CIA            /INVERT FOR TEST
  4988.     TAD    KEYREMOVE    /COMPARE TO REMOVAL POINTER
  4989.     SNA CLA            /SKIP IF NOT EQUAL
  4990. KSERROR,ISZ    KEYERROR    /INDICATE KEYBOARD ERROR
  4991.     JMP I    KEYUPDATE    /RETURN
  4992.     JMP    KSERROR        /MAKE SURE ERROR IS INDICATED
  4993. /    KEYBOARD GET A CHARACTER ROUTINE.                /047 CJL
  4994.  
  4995. /    CALLING SEQUENCE:
  4996.  
  4997. /    JMS    KEYGET        /CALL ROUTINE
  4998. /    CHARACTER AVAILABLE    /RETURNS HERE WITH LATEST CHARACTER
  4999. /    NO CHARACTER AVAILABLE    /RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL
  5000.  
  5001. /    NORMAL RETURN HAS LATEST CHARACTER IN AC.
  5002.  
  5003. /    SKIP RETURN HAS CLEAR AC.
  5004.  
  5005. /    IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN.
  5006.  
  5007. KEYGET,    .-.            /KEYBOARD GET A CHARACTER ROUTINE
  5008. KGTEST,    KSFIOT            /FLAG UP?
  5009.     JMP    KEYGNONE    /NO, TAKE SKIP RETURN
  5010. KGREAD,    KRBIOT            /YES, READ THE CHARACTER
  5011.     SPA            /SKIP IF NO UART ERRORS
  5012.     ISZ    KEYERROR    /INDICATE KEYBOARD ERROR
  5013.     SKP            /SKIP IF NOT TOO MANY ERRORS
  5014.     JMP    .-2        /ENSURE KEYBOARD ERROR IS INDICATED
  5015.     AND    [377]        /JUST EIGHT-BIT
  5016.     DCA    KEYTEMP        /SAVE FOR NOW
  5017.     TAD    FLOWFLAG    /GET FLOW CONTROL FLAG
  5018.     SNA CLA            /SKIP IF SET
  5019.     JMP    KEYGEXIT    /JUMP IF NOT
  5020.     TAD    KEYTEMP        /GET THE CHARACTER
  5021.     AND    [177]        /JUST SEVEN-BIT
  5022.     TAD    [-CNTRLS]    /COMPARE TO <^S>
  5023.     SNA            /SKIP IF OTHER
  5024.     JMP    KWATSET        /JUMP IF IT MATCHES
  5025.     TAD    [-CNTRLQ+CNTRLS]/COMPARE TO <^S>
  5026.     SNA CLA            /SKIP IF OTHER
  5027.     JMP    KWATCLEAR    /JUMP IF IT MATCHES
  5028. KEYGEXI,TAD    KEYTEMP        /GET THE CHARACTER
  5029.     JMP I    KEYGET        /TAKE IMMEDIATE RETURN
  5030.  
  5031. /    COMES HERE ON <^S> TO SET OUTPUT WAIT.
  5032.  
  5033. KWATSET,NL4000            /SET WAIT VALUE
  5034.  
  5035. /    COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT.
  5036.  
  5037. KWATCLE,DCA    CONWAIT        /STORE NEW STATE
  5038. KEYGNON,ISZ    KEYGET        /BUMP RETURN ADDRESS
  5039.     JMP I    KEYGET        /TAKE SKIP RETURN
  5040. /    CONSOLE TERMINAL ROUTINES.
  5041.  
  5042. /    CONSOLE OUTPUT ROUTINE.
  5043.  
  5044. /    CALLING SEQUENCE:
  5045.  
  5046. /    TAD    CHAR        /CHARACTER TO OUTPUT IN AC
  5047. /    JMS I    (CONOUT)    /CALL ROUTINE
  5048. /    RETURN            /RETURNS HERE WITH CLEAR AC
  5049.  
  5050. CONOUT,    .-.            /CONSOLE OUTPUT ROUTINE
  5051.     DCA    CONTEMP        /SAVE PASSED VALUE
  5052.     TAD    CONINSERT    /GET INSERTION POINTER
  5053.     CIA            /INVERT FOR TEST
  5054.     TAD    CONREMOVE    /COMPARE TO REMOVAL POINTER
  5055.     TAD    CONWAIT        /ADD ON WAIT STATUS
  5056.     SZA CLA            /SKIP IF BUFFER EMPTY AND NOT WAITING    /047 CJL
  5057.     JMP    CSTUFF        /JUMP IF CHARACTER MUST BE BUFFERED
  5058.     TAD    CONTEMP        /GET PASSED VALUE            /047 CJL
  5059.     JMS I    (CONPUT)    /TRY TO OUTPUT THE CHARACTER NOW            /047 CJL
  5060.     JMP    CSTUFF        /COULDN'T OUTPUT IT, SO BUFFER IT    /047 CJL
  5061.     JMP I    CONOUT        /RETURN
  5062.  
  5063. CSTUFF,    TAD    CONTEMP        /GET THE CHARACTER
  5064.     CDF    BUFFLD        /GOTO BUFFER FIELD
  5065.     DCA I    CONINSERT    /STORE THE CHARACTER
  5066.     CDF    PRGFLD        /BACK TO OUR FIELD
  5067.     NL0001            /SET INCREMENT
  5068.     TAD    CONINSERT    /UPDATE POINTER
  5069.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5070.     TAD    [CONBUFFER]    /MAKE IT ABSOLUTE
  5071.     DCA    CONINSERT    /STORE BACK UPDATED POINTER
  5072.     JMP I    CONOUT        /RETURN
  5073.  
  5074. /    CONSOLE OUTPUT TEST ROUTINE.
  5075.  
  5076. /    CALLING SEQUENCE:
  5077.  
  5078. /    JMS I    (CONTEST)    /CALL ROUTINE
  5079. /    NOT READY        /RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER
  5080. /    READY            /OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW
  5081.  
  5082. CONTEST,.-.            /CONSOLE OUTPUT TEST ROUTINE
  5083.     NL0001            /SET BUFFER INCREMENT
  5084.     TAD    CONINSERT    /GET UPDATED INSERTION POINTER
  5085.     CIA            /INVERT FOR TEST
  5086.     TAD    CONREMOVE    /COMPARE TO REMOVAL POINTER
  5087.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5088.     SZA CLA            /SKIP IF BUFFER IS FULL
  5089.     ISZ    CONTEST        /BUMP RETURN IF NOT
  5090.     JMP I    CONTEST        /RETURN EITHER WAY
  5091. /    CONSOLE OUTPUT BUFFER UPDATE ROUTINE.
  5092.  
  5093. /    CALLING SEQUENCE:
  5094.  
  5095. /    JMS I    (CONUPDATE)    /CALL ROUTINE
  5096. /    RETURN            /RETURN WITH CLEAR AC
  5097.  
  5098. /    THE CONSOLE OUTPUT BUFFERING ROUTINES WILL  UPDATE  POINTERS,  ETC.    IF  ANY
  5099. /    STATUS HAS CHANGED SINCE THE LAST CALL.
  5100.  
  5101. CONUPDA,.-.            /CONSOLE OUTPUT UPDATE ROUTINE
  5102.     TAD    CONWAIT        /FLOW CONTROL WAIT SET?
  5103.     SZA CLA            /SKIP IF NOT
  5104.     JMP I    CONUPDATE    /JUST RETURN IF SO
  5105.     TAD    CONINSERT    /GET INSERTION POINTER
  5106.     CIA            /INVERT FOR TEST
  5107.     TAD    CONREMOVE    /COMPARE TO REMOVAL POINTER
  5108.     SNA CLA            /SKIP IF BUFFER CONTAINS SOMETHING    /047 CJL
  5109.     JMP I    CONUPDATE    /RETURN IF BUFFER EMPTY            /047 CJL
  5110.     CDF    BUFFLD        /GOTO BUFFER FIELD
  5111.     TAD I    CONREMOVE    /GET A CHARACTER FROM THE BUFFER
  5112.     CDF    PRGFLD        /BACK TO OUR FIELD
  5113.     JMS I    (CONPUT)    /TRY TO OUTPUT THE CHARACTER NOW    /047 CJL
  5114.     JMP I    CONUPDATE    /COULDN'T DO IT, SO JUST RETURN        /047 CJL
  5115.     NL0001            /SET BUFFER INCREMENT
  5116.     TAD    CONREMOVE    /UPDATE REMOVAL POINTER
  5117.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5118.     TAD    [CONBUFFER]    /MAKE IT ABSOLUTE
  5119.     DCA    CONREMOVE    /STORE UPDATED POINTER
  5120.     JMP I    CONUPDATE    /RETURN
  5121.  
  5122. CONINSE,.-.            /CONSOLE OUTPUT INSERTION POINTER
  5123. CONREMO,.-.            /CONSOLE OUTPUT REMOVAL POINTER
  5124.  
  5125. /    CONSOLE FLOW CONTROL WAIT FLAG.
  5126.  
  5127. CONWAIT,.-.            /0=DON'T WAIT, 4000=WAIT FOR <^Q>
  5128. KEYINSE,.-.            /KEYBOARD BUFFER INSERTION POINTER
  5129. KEYREMO,.-.            /KEYBOARD BUFFER REMOVAL POINTER
  5130.  
  5131.     CONTEMP=CONUPDATE    /CONSOLE OUTPUT TEMPORARY
  5132.  
  5133.     KEYTEMP=CONUPDATE    /KEYBOARD INPUT TEMPORARY
  5134.  
  5135.     PAGE
  5136. /    REMOTE LINE ROUTINES.
  5137.  
  5138. /    REMOTE LINE INPUT ROUTINE.                    /026 CJL
  5139.  
  5140. /    CALLING SEQUENCE:
  5141.  
  5142. /    JMS I    (REMINPUT)    /CALL ROUTINE
  5143. /    NO INPUT        /RETURN IF NO INPUT
  5144. /    INPUT            /RETURN IF INPUT AVAILABLE
  5145.  
  5146. /    THE AC WILL BE CLEAR IF THE IMMEDIATE RETURN IS TAKEN FOR NO INPUT.
  5147.  
  5148. /    THE AC WILL CONTAIN THE LATEST CHARACTER IF THE SKIP RETURN IS TAKEN.
  5149.  
  5150. REMINPU,.-.            /REMOTE LINE INPUT ROUTINE
  5151.     TAD    RININSERT    /GET INSERTION POINTER
  5152.     CIA            /INVERT FOR TEST
  5153.     TAD    RINREMOVE    /COMPARE TO REMOVAL POINTER
  5154.     SNA CLA            /SKIP IF BUFFER NOT EMPTY
  5155.     JMP    RINCHECK    /JUMP IF BUFFER EMPTY
  5156.     TAD    RINREMOVE    /GET REMOVAL POINTER
  5157.     DCA    RINTEMP        /SAVE FOR LATER
  5158.     NL0001            /SET INCREMENT
  5159.     TAD    RINREMOVE    /UPDATE REMOVAL POINTER
  5160.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5161.     TAD    (RINBUFFER)    /MAKE IT ABSOLUTE
  5162.     DCA    RINREMOVE    /STORE UPDATED POINTER
  5163.     CDF    BUFFLD        /GOTO BUFFER FIELD
  5164.     TAD I    RINTEMP        /GET THE LATEST CHARACTER
  5165.     CDF    PRGFLD        /BACK TO OUR FIELD
  5166.     DCA    RINTEMP        /SAVE FOR LATER
  5167.     TAD    FLOWFLAG    /GET FLOW CONTROL FLAG
  5168.     SNA CLA            /SKIP IF SET
  5169.     JMP    REMINEXIT    /JUMP IF NOT
  5170.     NL4000            /SET WAITING VALUE
  5171.     TAD    RINWAIT        /ARE WE WAITING TO EMPTY?
  5172.     SZA CLA            /SKIP IF SO
  5173.     JMP    REMINEXIT    /JUMP IF NOT
  5174.     TAD    RININSERT    /GET INSERTION POINTER
  5175.     CIA            /INVERT FOR TEST
  5176.     TAD    RINREMOVE    /COMPARE TO REMOVAL POINTER
  5177.     AND    [BUFSIZE^3%4]    /JUST 3/4 BITS
  5178.     SZA CLA            /SKIP IF BUFFER NOW 1/4 FULL (OR LESS)
  5179.     JMP    REMINEXIT    /JUMP IF NOT
  5180.     NL7777            /SET BUFFER EMPTYING VALUE
  5181.     DCA    RINWAIT        /STORE FOR OUTPUT ROUTINE
  5182. REMINEX,TAD    RINTEMP        /GET THE CHARACTER
  5183.     SKP            /DON'T GET ANOTHER ONE            /047 CJL
  5184.  
  5185. /    COMES HERE IF REMOTE LINE INPUT BUFFER IS EMPTY.
  5186.  
  5187. RINCHEC,JMS    RINGET        /TRY TO GET A CHARACTER NOW        /047 CJL
  5188.     ISZ    REMINPUT    /GOT ONE, SO TAKE SKIP RETURN        /047 CJL
  5189.     JMP I    REMINPUT    /RETURN EITHER WAY
  5190. /    REMOTE LINE INPUT BUFFER UPDATE ROUTINE.            /026 CJL
  5191.  
  5192. /    CALLING SEQUENCE:
  5193.  
  5194. /    JMS I    (RINUPDATE)    /CALL ROUTINE
  5195.  
  5196. /    RETURNS WITH CLEAR AC.  ANY REMOTE LINE  INPUT  WHICH  JUST  OCCURRED  WILL BE
  5197. /    BUFFERED;  CALLS TO REMINPUT WILL RETRIEVE THE CHARACTERS.
  5198.  
  5199. RINUPDA,.-.            /REMOTE LINE INPUT BUFFER UPDATE ROUTINE
  5200.     JMS    RINGET        /TRY TO GET A CHARACTER NOW        /047 CJL
  5201.     SKP            /GOT ONE, DON'T LEAVE YET        /047 CJL
  5202.     JMP I    RINUPDATE    /CHARACTER NOT AVAILABLE NOW, RETURN    /047 CJL
  5203.     CDF    BUFFLD        /GOTO BUFFER FIELD
  5204.     DCA I    RININSERT    /STORE IN THE BUFFER
  5205.     CDF    PRGFLD        /BACK TO OUR FIELD
  5206.     NL0001            /SET INCREMENT
  5207.     TAD    RININSERT    /UPDATE POINTER
  5208.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5209.     TAD    (RINBUFFER)    /MAKE IT ABSOLUTE
  5210.     DCA    RININSERT    /STORE BACK UPDATED POINTER
  5211.     TAD    RININSERT    /GET INSERTION POINTER
  5212.     CIA            /INVERT FOR TEST
  5213.     TAD    RINREMOVE    /COMPARE TO REMOVAL POINTER
  5214.     SNA            /SKIP IF BUFFER NOT FULL
  5215.     ISZ    RINERROR    /INDICATE REMOTE LINE INPUT ERROR
  5216.     SKP            /SKIP IF NO OVERFLOW
  5217.     JMP    .-2        /ENSURE ERROR IS SET
  5218.     TAD    [BUFSIZE^3%4]    /SUBTRACT 1/4 BUFFER'S WORTH
  5219.     AND    [BUFSIZE^3%4]    /JUST 3/4 BUFFER BITS
  5220.     SNA CLA            /SKIP IF NOT 3/4 FULL
  5221.     TAD    FLOWFLAG    /ELSE CHECK IF FLOW CONTROL IS ENABLED
  5222.     SNA CLA            /SKIP IF 3/4 FULL AND FLOW CONTROL IS ENABLED
  5223.     JMP I    RINUPDATE    /JUST RETURN
  5224.     TAD    RINWAIT        /GET INPUT WAIT FLAG
  5225.     SNA CLA            /SKIP IF ALREADY SET
  5226.     ISZ    RINWAIT        /SET TO <^S> STATE
  5227.     JMP I    RINUPDATE    /RETURN
  5228. /    REMOTE LINE GET A CHARACTER ROUTINE.                /047 CJL
  5229.  
  5230. /    CALLING SEQUENCE:
  5231.  
  5232. /    JMS I    (RINGET)    /CALL ROUTINE
  5233. /    CHARACTER AVAILABLE    /RETURNS HERE WITH LATEST CHARACTER
  5234. /    NO CHARACTER AVAILABLE    /RETURNS HERE IF NO CHARACTER OR HANDLED FLOW-CONTROL
  5235.  
  5236. /    NORMAL RETURN HAS LATEST CHARACTER IN AC.
  5237.  
  5238. /    SKIP RETURN HAS CLEAR AC.
  5239.  
  5240. /    IF FLOWFLAG=0, FLOW CHARACTERS ARE UNPROCESSED AND CAUSE NORMAL RETURN.
  5241.  
  5242. RINGET,    .-.            /REMOTE LINE GET A CHARACTER ROUTINE
  5243. RINTEST,TAD    INFLAG        /IS INPUT AVAILABLE?
  5244. RINGT0,    SNA CLA            /SKIP IF SO
  5245. RINREAD,JMP    RINGNONE    /JUMP IF NOT
  5246. RINGT1,    DCA    INFLAG        /CLEAR AVAILABILITY FLAG
  5247. RINGT2,    IRB            /READ IN THE CHARACTER
  5248.  
  5249. /    THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY.  THE  DEFAULT INSTRUCTIONS
  5250. /    ARE FOR KL8 INTERFACES.
  5251.  
  5252.     *RINTEST        /OVERLAY DECMATE II CODE
  5253.  
  5254. RINTEST,RKSFIOT            /FLAG UP?
  5255. RINGT0,    JMP    RINGNONE    /NO, TAKE SKIP RETURN
  5256. RINREAD,RKRBIOT            /YES, READ THE CHARACTER
  5257. RINGT1,    SKP            /NO ERRORS ON DECMATE I
  5258.  
  5259. /    THE ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY.    THE DEFAULT INSTRUCTION IS
  5260. /    FOR KL8 INTERFACES.
  5261.  
  5262.     *RINGT1            /OVERLAY DECMATE I CODE
  5263.  
  5264. RINGT1,    SPA            /SKIP IF NO UART ERRORS
  5265. RING2,    ISZ    RINERROR    /INDICATE REMOTE LINE INPUT ERROR
  5266.     SKP            /SKIP IF NOT TOO MANY ERRORS
  5267.     JMP    .-2        /ENSURE REMOTE LINE INPUT ERROR IS INDICATED
  5268.     AND    [377]        /JUST EIGHT-BIT
  5269.     DCA    RINTEMP        /SAVE FOR NOW
  5270.     TAD    FLOWFLAG    /GET FLOW CONTROL FLAG
  5271.     SNA CLA            /SKIP IF SET
  5272.     JMP    RINGEXIT    /JUMP IF NOT
  5273.     TAD    RINTEMP        /GET THE CHARACTER
  5274.     AND    [177]        /JUST SEVEN-BIT
  5275.     TAD    [-CNTRLS]    /COMPARE TO <^S>
  5276.     SNA            /SKIP IF OTHER
  5277.     JMP    RWATSET        /JUMP IF IT MATCHES
  5278.     TAD    [-CNTRLQ+CNTRLS]/COMPARE TO <^S>
  5279.     SNA CLA            /SKIP IF OTHER
  5280.     JMP    RWATCLEAR    /JUMP IF IT MATCHES
  5281. RINGEXI,TAD    RINTEMP        /GET THE CHARACTER
  5282.     JMP I    RINGET        /TAKE IMMEDIATE RETURN
  5283. /    COMES HERE ON <^S> TO SET OUTPUT WAIT.
  5284.  
  5285. RWATSET,NL4000            /SET WAIT VALUE
  5286.  
  5287. /    COMES HERE ON <^Q> TO CLEAR OUTPUT WAIT.
  5288.  
  5289. RWATCLE,DCA    REMWAIT        /STORE NEW STATE
  5290. RINGNON,ISZ    RINGET        /BUMP RETURN ADDRESS
  5291.     JMP I    RINGET        /TAKE SKIP RETURN
  5292.  
  5293. /    REMOTE LINE RESET ROUTINE.                    /026 CJL
  5294.  
  5295. /    CALLING SEQUENCE:
  5296.  
  5297. /    JMS I    (REMRESET)    /CALL ROUTINE
  5298. /    RETURN            /RETURN WITH CLEAR AC
  5299.  
  5300. /    RETURNS WITH CLEAR AC AND ALL REMOTE LINE VARIABLES RESET.
  5301.  
  5302. REMRESE,.-.            /REMOTE LINE RESET ROUTINE
  5303.     TAD    [REMBUFFER]    /SETUP THE REMOTE LINE
  5304.     DCA    REMINSERT    /OUTPUT INSERTION POINTER
  5305.     TAD    [REMBUFFER]    /SETUP THE REMOTE LINE
  5306.     DCA    REMREMOVE    /OUTPUT REMOVAL POINTER
  5307.     TAD    (RINBUFFER)    /SETUP THE REMOTE LINE
  5308.     DCA    RININSERT    /INPUT INSERTION POINTER
  5309.     TAD    (RINBUFFER)    /SETUP THE REMOTE LINE
  5310.     DCA    RINREMOVE    /INPUT REMOVAL POINTER
  5311.     DCA    REMWAIT        /CLEAR REMOTE OUTPUT WAIT
  5312.     DCA    RINWAIT        /CLEAR REMOTE INPUT WAIT
  5313.     DCA    RINERROR    /CLEAR REMOTE INPUT ERROR
  5314.     JMP I    REMRESET    /RETURN
  5315.  
  5316. RININSE,.-.            /REMOTE INPUT INSERTION POINTER
  5317. RINREMO,.-.            /REMOTE INPUT REMOVAL POINTER
  5318. RINTEMP,.-.            /REMOTE INPUT TEMPORARY            /047 CJL
  5319.  
  5320.     PAGE
  5321. /    REMOTE LINE OUTPUT ROUTINE.
  5322.  
  5323. /    CALLING SEQUENCE:
  5324.  
  5325. /    TAD    CHAR        /CHARACTER TO OUTPUT IN AC
  5326. /    JMS I    (REMOUT)    /CALL ROUTINE
  5327. /    RETURN            /RETURNS HERE WITH CLEAR AC
  5328.  
  5329. REMOUT,    .-.            /REMOTE LINE OUTPUT ROUTINE
  5330.     DCA    REMTEMP        /SAVE PASSED VALUE
  5331.     TAD    REMINSERT    /GET INSERTION POINTER
  5332.     CIA            /INVERT FOR TEST
  5333.     TAD    REMREMOVE    /COMPARE TO REMOVAL POINTER
  5334.     TAD    REMWAIT        /ADD ON WAIT STATUS
  5335.     SZA CLA            /SKIP IF BUFFER EMPTY AND NOT WAITING    /047 CJL
  5336.     JMP    RSTUFF        /JUMP IF CHARACTER MUST BE BUFFERED
  5337.     TAD    REMTEMP        /GET PASSED VALUE            /047 CJL
  5338.     JMS I    (REMPUT)    /TRY TO OUTPUT THE CHARACTER NOW    /047 CJL
  5339.     JMP    RSTUFF        /COULDN'T OUTPUT IT, SO BUFFER IT    /047 CJL
  5340.     JMP I    REMOUT        /RETURN
  5341.  
  5342. RSTUFF,    TAD    REMTEMP        /GET THE CHARACTER
  5343.     CDF    BUFFLD        /GOTO BUFFER FIELD
  5344.     DCA I    REMINSERT    /STORE IN BUFFER
  5345.     CDF    PRGFLD        /BACK TO OUR FIELD
  5346.     NL0001            /SET BUFFER INCREMENT
  5347.     TAD    REMINSERT    /BUMP INSERTION POINTER
  5348.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5349.     TAD    [REMBUFFER]    /MAKE IT ABSOLUTE
  5350.     DCA    REMINSERT    /STORE UPDATED POINTER
  5351.     JMP I    REMOUT        /RETURN
  5352.  
  5353. /    REMOTE LINE OUTPUT TEST ROUTINE.
  5354.  
  5355. /    CALLING SEQUENCE:
  5356.  
  5357. /    JMS I    (REMTEST)    /CALL ROUTINE
  5358. /    NOT READY        /RETURN IF OUTPUT NOT READY FOR NEXT CHARACTER
  5359. /    READY            /OUTPUT CAN ACCEPT ANOTHER CHARACTER NOW
  5360.  
  5361. /    AC WILL BE CLEARED AFTER THE CALL.
  5362.  
  5363. REMTEST,.-.            /REMOTE LINE OUTPUT TEST ROUTINE
  5364.     NL0001            /SET BUFFER INCREMENT
  5365.     TAD    REMINSERT    /GET INSERTION POINTER
  5366.     CIA            /INVERT FOR TEST
  5367.     TAD    REMREMOVE    /COMPARE TO REMOVAL POINTER
  5368.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5369.     SZA CLA            /SKIP IF BUFFER IS FULL
  5370.     ISZ    REMTEST        /BUMP RETURN IF BUFFER IS NOT FULL
  5371.     JMP I    REMTEST        /RETURN EITHER WAY
  5372. /    REMOTE LINE OUTPUT BUFFER UPDATE ROUTINE.
  5373.  
  5374. /    CALLING SEQUENCE:
  5375.  
  5376. /    JMS I    (REMUPDATE)    /CALL ROUTINE
  5377. /    RETURN            /RETURN WITH CLEAR AC
  5378.  
  5379. /    THE REMOTE LINE OUTPUT  BUFFERING  ROUTINES WILL UPDATE POINTERS, ETC.  IF ANY
  5380. /    STATUS HAS CHANGED SINCE THE LAST CALL.
  5381.  
  5382. REMUPDA,.-.            /REMOTE LINE OUTPUT UPDATE ROUTINE
  5383.     TAD    RINWAIT        /GET INPUT WAIT FLAG
  5384.     CLL RAL            /MAIN STATE BIT TO LINK
  5385.     SNA CLA            /SKIP IF OUTPUT FLOW CHARACTER NEEDED    /047 CJL
  5386.     JMP    REMCHECK    /JUMP IF CHARACTER NOT NEEDED NOW    /047 CJL
  5387.     TAD    (CNTRLQ)    /ASSUME RELEASE CHARACTER NEEDED    /047 CJL
  5388.     SNL            /SKIP IF SO                /047 CJL
  5389.     TAD    [CNTRLS-CNTRLQ]    /ELSE CHANGE IT TO HOLD CHARACTER    /047 CJL
  5390.     JMS I    (REMPUT)    /TRY TO OUTPUT IT NOW            /047 CJL
  5391.     JMP    REMCHECK    /COULDN'T DO IT, FORGET IT FOR NOW    /047 CJL
  5392.     CML RAR            /SET NEW STATE VALUE            /047 CJL
  5393.     DCA    RINWAIT        /STORE IT
  5394. REMCHEC,TAD    REMWAIT        /GET OUTPUT WAIT FLAG
  5395.     SZA CLA            /SKIP IF NOT WAITING
  5396.     JMP I    REMUPDATE    /JUST RETURN IF WAITING
  5397.     TAD    REMINSERT    /GET OUTPUT INSERTION POINTER
  5398.     CIA            /INVERT FOR TEST
  5399.     TAD    REMREMOVE    /COMPARE TO OUTPUT REMOVAL POINTER
  5400.     SNA CLA            /SKIP IF BUFFER CONTAINS SOMETHING    /047 CJL
  5401.     JMP I    REMUPDATE    /RETURN IF BUFFER EMPTY            /047 CJL
  5402.     CDF    BUFFLD        /GOTO BUFFER FIELD
  5403.     TAD I    REMREMOVE    /GET A CHARACTER FROM THE BUFFER
  5404.     CDF    PRGFLD        /BACK TO OUR FIELD
  5405.     JMS I    (REMPUT)    /TRY TO OUTPUT THE CHARACTER NOW    /047 CJL
  5406.     JMP I    REMUPDATE    /COULDN'T DO IT, SO JUST RETURN        /047 CJL
  5407.     NL0001            /SET BUFFER INCREMENT
  5408.     TAD    REMREMOVE    /BUMP REMOVAL POINTER
  5409.     AND    [BUFSIZE-1]    /JUST BUFFER BITS
  5410.     TAD    [REMBUFFER]    /MAKE IT ABSOLUTE
  5411.     DCA    REMREMOVE    /STORE UPDATED POINTER
  5412.     JMP I    REMUPDATE    /RETURN
  5413.  
  5414.     REMTEMP=REMUPDATE    /REMOTE OUTPUT TEMPORARY
  5415. /    LOW-LEVEL CONSOLE OUTPUT ROUTINE.                /047 CJL
  5416.  
  5417. /    CALLING SEQUENCE:
  5418.  
  5419. /    [CHARACTER TO OUTPUT IN THE AC]
  5420.  
  5421. /    JMS I    (CONPUT)    /CALL ROUTINE
  5422. /    NO OUTPUT        /RETURNS HERE IF OUTPUT UNAVAILABLE
  5423. /    OUTPUT            /RETURNS HERE IF CHARACTER WAS OUTPUT
  5424.  
  5425. CONPUT,    .-.            /CONSOLE OUTPUT ROUTINE
  5426. CONTSF,    TSFIOT            /FLAG UP?
  5427.     JMP    CONCLEAR    /NO, FORGET IT
  5428. CONTLS,    TLSIOT            /YES, OUTPUT THE CHARACTER NOW
  5429.     ISZ    CONPUT        /TAKE SKIP RETURN
  5430. CONCLEA,CLA            /CLEAN UP
  5431.     JMP I    CONPUT        /RETURN EITHER WAY
  5432.  
  5433. /    CONSOLE RESET ROUTINE.                        /026 CJL
  5434.  
  5435. /    CALLING SEQUENCE:
  5436.  
  5437. /    JMS I    (CONRESET)    /CALL ROUTINE
  5438. /    RETURN            /RETURN WITH CLEAR AC
  5439.  
  5440. /    RETURNS WITH CLEAR AC AND ALL CONSOLE VARIABLES RESET.
  5441.  
  5442. CONRESE,.-.            /CONSOLE RESET ROUTINE
  5443.     TAD    [CONBUFFER]    /SETUP THE
  5444.     DCA I    (CONINSERT)    /CONSOLE OUTPUT INSERTION POINTER
  5445.     TAD    [CONBUFFER]    /SETUP THE
  5446.     DCA I    (CONREMOVE)    /CONSOLE OUTPUT REMOVAL POINTER
  5447.     TAD    [KEYBUFFER]    /SETUP THE
  5448.     DCA I    (KEYINSERT)    /KEYBOARD INSERTION POINTER
  5449.     TAD    [KEYBUFFER]    /SETUP THE
  5450.     DCA I    (KEYREMOVE)    /KEYBOARD REMOVAL POINTER
  5451.     DCA I    (CONWAIT)    /CLEAR OUTPUT WAIT
  5452.     DCA    KEYERROR    /CLEAR KEYBOARD ERROR
  5453.     JMP I    CONRESET    /RETURN
  5454. /    LOW-LEVEL REMOTE LINE OUTPUT ROUTINE.                /047 CJL
  5455.  
  5456. /    CALLING SEQUENCE:
  5457.  
  5458. /    [CHARACTER TO OUTPUT IN THE AC]
  5459.  
  5460. /    JMS I    (REMPUT)    /CALL ROUTINE
  5461. /    NO OUTPUT        /RETURNS HERE IF OUTPUT UNAVAILABLE
  5462. /    OUTPUT            /RETURNS HERE IF CHARACTER WAS OUTPUT
  5463.  
  5464. REMPUT,    .-.            /REMOTE LINE OUTPUT ROUTINE
  5465. DM1AN2,    AND    [377]        /ENSURE EIGHT BIT            /049 CJL
  5466.  
  5467. /    THE  ABOVE INSTRUCTION IS FOR DECMATE I USE ONLY.  THE DEFAULT INSTRUCTION  IS
  5468. /    FOR KL8 INTERFACES.
  5469.  
  5470.     *DM1AN2            /OVERLAY DECMATE II CODE        /049 CJL
  5471.  
  5472. DM1AN2,    SKP            /WE'RE NOT A DECMATE I            /049 CJL
  5473.     TAD    [400]        /SET WRITE BIT                /049 CJL
  5474. REMTSF,    DCA    RMPTEMP        /SAVE PASSED VALUE
  5475. RMPUT0,    TAD    OUTFLAG        /CHECK IF OUTPUT IS AVAILABLE
  5476. REMTLS,    SNA CLA            /SKIP IF SO
  5477. RMPUT1,    JMP I    REMPUT        /RETURN IF NOT
  5478. REMCLEA,TAD    RMPTEMP        /GET THE PASSED VALUE
  5479. RMPUT2,    OLS            /OUTPUT THE CHARACTER NOW
  5480.  
  5481. /    THE ABOVE INSTRUCTIONS ARE FOR DECMATE II USE ONLY.  THE DEFAULT  INSTRUCTIONS
  5482. /    ARE FOR KL8 INTERFACES.
  5483.  
  5484.     *REMTSF            /OVERLAY DECMATE II CODE
  5485.  
  5486. REMTSF,    RTSFIOT            /FLAG UP?
  5487. RMPUT0,    JMP    REMCLEAR    /NO, FORGET IT
  5488. REMTLS,    RTLSIOT            /YES, OUTPUT THE CHARACTER NOW
  5489. RMPUT1,    ISZ    REMPUT        /TAKE SKIP RETURN
  5490. REMCLEA,CLA            /CLEAN UP
  5491. RMPUT2,    JMP I    REMPUT        /RETURN EITHER WAY
  5492.  
  5493.     CLA            /CLEAN UP
  5494.     DCA    OUTFLAG        /INDICATE OUTPUT IS UNAVAILABLE
  5495.     ISZ    REMPUT        /TAKE SKIP RETURN
  5496.     JMP I    REMPUT        /RETURN TO CALLER
  5497.  
  5498.     RMPTEMP=CONRESET    /REMOTE OUTPUT TEMPORARY
  5499.  
  5500.     PAGE
  5501. /    SEVEN-BIT COMMAND TABLES.                    /034 CJL
  5502.  
  5503.     CMDTBL=    .        /COMMAND TABLE HERE
  5504.  
  5505.     "C&177;    "O&177;    "N&177    /\
  5506.     "N&177;    "E&177;    "C&177    / >CONNECT COMMAND
  5507.     "T&177;    -1        //
  5508.     CONSRV            /CONNECT ROUTINE ADDRESS
  5509.  
  5510.     "F&177;    "I&177;    "N&177    /\
  5511.     "I&177;    "S&177;    "H&177    / >FINISH COMMAND
  5512.     -1            //
  5513.     FINSRV            /FINISH ROUTINE ADDRESS
  5514.  
  5515.     "E&177;    "X&177;    "I&177    /EXIT
  5516.     "T&177;    -1        /COMMAND
  5517.     EXITKERMIT        /EXIT ROUTINE ADDRESS
  5518.  
  5519.     "S&177;    "E&177;    "N&177    /SEND
  5520.     "D&177;    -1        /COMMAND
  5521.     SNDSRV            /SEND ROUTINE ADDRESS
  5522.  
  5523.     "G&177;    "E&177;    "T&177    /GET
  5524.     -1            /COMMAND
  5525.     GETSRV            /GET ROUTINE ADDRESS
  5526.  
  5527.     "R&177;    "E&177;    "C&177    /\
  5528.     "E&177;    "I&177;    "V&177    / >RECEIVE COMMAND
  5529.     "E&177;    -1        //
  5530.     RECSRV            /RECEIVE ROUTINE ADDRESS
  5531.     "H&177;    "E&177;    "L&177    /HELP
  5532.     "P&177;    -1        /COMMAND
  5533.     HELPSRV            /HELP ROUTINE ADDRESS
  5534.  
  5535.     -1            /THIS ENDS THE TABLE            /034 CJL
  5536.  
  5537. /    REMOTE PACKET INPUT BUFFER.                    /014 CJL
  5538.  
  5539. RRBUF,    0            /MARK
  5540. RRLEN,    0            /PACKET LENGTH
  5541. RRSEQ,    0            /PACKET SEQ
  5542. RRTYP,    0            /PACKET TYPE
  5543.  
  5544.     DECIMAL
  5545.  
  5546. RRDTA,    ZBLOCK    91        /DATA GOES HERE
  5547.  
  5548.     OCTAL
  5549.  
  5550. RTERMI,    0            /ADD LOCATION WHERE TERMINATOR IS STORED/A004
  5551.                 /ON RECEIVE IF BUFFER IS MAXIMUM LENGTH    /A004
  5552.  
  5553. /    REMOTE PACKET OUTPUT BUFFER
  5554.  
  5555. RSBUF,    CNTRLA            /PACKET BUFFER (BEGINS WITH "SOH")    /034 CJL
  5556. RSLEN,    0            /PACKET LENGTH GOES HERE
  5557. RSSEQ,    0            /PACKET SEQUENCE GOES HERE
  5558. RSTYP,    0            /PACKET TYPE GOES HERE
  5559.  
  5560.     DECIMAL
  5561.  
  5562. RSDTA,    ZBLOCK    91        /DATA GOES HERE
  5563.  
  5564.     0            /CHECKSUM HERE ON MAX PACKET
  5565.     0            /EOL (IF USED HERE ON MAX PACKET)
  5566.     0            /INTERNAL TERMINATOR HERE ON MAX PACKET
  5567.  
  5568.     OCTAL
  5569. /    SEND-INIT PACKET DEFINITION
  5570.  
  5571. INIDAT,    DECIMAL
  5572.  
  5573.     94+32            /94 CHARS MAX
  5574.  
  5575.     OCTAL
  5576.  
  5577.     "/&177            /15 SECOND TIME-OUT            /M013/014 CJL
  5578.     " &177            /NO PADDING
  5579.     0+100&177        /NO PADDING CHAR
  5580.     " &177+15        /CR FOR EOL
  5581.     "#&177            /QUOTE CHAR
  5582.     "N&137            /NO 8TH BIT QUOTING
  5583.     "1&177            /CHECK TYPE 1
  5584.     " &177            /NO REPEAT CHAR
  5585.     " &177+0        /NO EXTRA CAPABILITY
  5586. NODATA,    -1            /END OF DATA (USE THIS FOR SENDING NO-DATA)
  5587.     PAGE            /GET TO NEXT PAGE            /028 CJL
  5588.  
  5589. /    NO-INTERRUPT CONSOLE INPUT/OUTPUT SUPPORT ROUTINES.        /023 CJL
  5590.  
  5591. /    MODIFIED FOR FORCED-ECHO AND COLUMN-COUNTING.            /043 CJL
  5592.  
  5593. /    CONSOLE INPUT ROUTINE.  RETURNS  LATEST  CHARACTER  WITHOUT  ECHOING.   MAY BE
  5594. /    CALLED WITH DIRTY AC.  RETURNS LATEST SEVEN-BIT CHARACTER TYPED WHILE FIELDING
  5595. /    POTENTIAL <^S>/<^Q> PROTOCOL.
  5596.  
  5597. INPUT,    .-.            /CONSOLE INPUT ROUTINE
  5598. INPWAIT,JMS    CHKUP        /TRY TO GET A CHARACTER
  5599.     TAD    INCHAR        /GET THE CHARACTER
  5600.     SNA            /SKIP IF ANYTHING CAME IN
  5601.     JMP    INPWAIT        /WAIT FOR ANYTHING
  5602.     JMP I    INPUT        /RETURN WITH LATEST CHARACTER
  5603.  
  5604. /    CONSOLE  OUTPUT  ROUTINE.    OUTPUTS  CHARACTER  IN  AC  (INCLUDING  <HT>  VIA
  5605. /    SIMULATION).  RETURNS WITH CLEAR AC.  SUBJECT TO CONSOLE ECHO STATUS (ECHOSW).
  5606.  
  5607. P7CH,    .-.            /CONSOLE OUTPUT ROUTINE
  5608.     TAD    (-CNTRLI)    /COMPARE TO <HT>
  5609.     SNA            /SKIP IF OTHER
  5610.     JMP    DOTAB        /JUMP IF <HT>
  5611.     TAD    L11/(CNTRLI)    /RESTORE THE CHARACTER
  5612.     JMS    P7CHAR        /PRINT IT (UPDATING COLUMN COUNT)
  5613.     JMP I    P7CH        /RETURN
  5614.  
  5615. DOTAB,    TAD    [" &177]    /GET A <SPACE>
  5616.     JMS    P7CHAR        /OUTPUT IT
  5617.     TAD    COLUMN        /GET CURRENT COLUMN COUNT
  5618.     AND    [7]        /JUST TAB BITS
  5619.     SZA CLA            /SKIP IF NOW AT NEW TAB STOP
  5620.     JMP    DOTAB        /ELSE KEEP GOING
  5621.     JMP I    P7CH        /RETURN
  5622.  
  5623. /    FORCED-ECHO  CONSOLE  OUTPUT ROUTINE.  SAME AS P7CH BUT CLEARS  ECHOSW  BEFORE
  5624. /    OUTPUT OF THE CHARACTER.
  5625.  
  5626. P7ECHO,    .-.            /CONSOLE OUTPUT WITH FORCED-ECHO ROUTINE
  5627.     DCA    P7TEMP        /SAVE PASSED VALUE
  5628.     DCA    ECHOSW        /CLEAR ECHO STATUS
  5629.     TAD    P7TEMP        /RESTORE THE CHARACTER
  5630.     JMS    P7CH        /CALL MAIN ROUTINE
  5631.     JMP I    P7ECHO        /RETURN
  5632. CHKUP,    .-.                /CHECK FOR <^C>, ETC. ROUTINE
  5633.     JMS    CTLCTST            /CALL LOW-LEVEL INPUT CHECK ROUTINE
  5634.     SNA                /SKIP IF ANYTHING CAME BACK
  5635.     JMP    CHKCLR            /ELSE FORGET IT
  5636.     TAD    (-CNTRLP)        /COMPARE TO <^P>
  5637.     SNA                /SKIP IF OTHER
  5638.     JMP    DOUP            /GO HANDLE <^P> THERE
  5639.     IAC    /TAD    (-CNTRLO+CNTRLP)/COMPARE TO <^O>
  5640.     SNA                /SKIP IF OTHER
  5641.     JMP    DOUO            /GO HANDLER <^O> THERE
  5642.     TAD    (-CNTRLS+CNTRLO)    /COMPARE TO <^S>
  5643.     SZA CLA                /SKIP IF IT MATCHES
  5644.     JMP I    CHKUP            /RETURN ON UNIMPORTANT CHARACTERS
  5645. UQWAIT,    JMS    CTLCTST            /CALL LOW-LEVEL INPUT CHECK ROUTINE
  5646.     TAD    (-CNTRLQ)        /COMPARE TO <^Q>
  5647.     SZA CLA                /SKIP IF IT MATCHES
  5648.     JMP    UQWAIT            /ELSE WAIT FOR <^Q> FOREVER
  5649. CHKCLR,    DCA    INCHAR            /OBLITERATE INPUT CHARACTER
  5650.     JMP I    CHKUP            /RETURN
  5651.  
  5652. /    COMES HERE TO HANDLE <^P>.
  5653.  
  5654. DOUP,    TAD    ("P&177)        /GET A "P"
  5655.     JMS    UPRINT            /PRINT "^P"
  5656.     JMP I    UPADDRESS        /GO WHERE YOU SHOULD
  5657.  
  5658. /    COMES HERE TO HANDLE <^O>.
  5659.  
  5660. DOUO,    TAD    ("O&177)        /GET AN "O"
  5661.     JMS    UPRINT            /PRINT "^O"
  5662.     NL4000                /SET REVERSING BIT
  5663.     TAD    ECHOSW            /REVERSE THE ECHO STATE
  5664.     DCA    ECHOSW            /STORE BACK
  5665.     JMP    CHKCLR            /OBLITERATE <^O> AND RETURN
  5666.  
  5667. CTLCTST,.-.                /LOW-LEVEL <^C> TEST ROUTINE
  5668.     CLA                /CLEAN UP
  5669. KSFLOC,    KSFIOT                /FLAG UP?
  5670.     JMP I    CTLCTST            /NO, JUST RETURN
  5671. KRSZAP,    KRSIOT                /**** 6120 **** KRBIOT
  5672.     AND    [177]            /JUST SEVEN-BIT
  5673.     DCA    INCHAR            /SAVE THE CHARACTER
  5674.     NL7775                /SET -<^C> VALUE
  5675.     TAD    INCHAR            /COMPARE TO CHARACTER
  5676.     SNA CLA                /SKIP IF OTHER THAN <^C>
  5677.     JMP I    UCADDRESS        /JUMP IF <^C>
  5678. KCCZAP,    KCCIOT                /**** 6120 **** 0000
  5679.     TAD    INCHAR            /GET THE CHARACTER
  5680.     JMP I    CTLCTST            /RETURN
  5681. P7CHAR,    .-.            /LOWER-LEVEL CONSOLE PRINT ROUTINE
  5682.     DCA    P7TEMP        /SAVE PASSED VALUE
  5683. P7AGN,    JMS    CHKUP        /CHECK FOR <^C>, ETC.
  5684.     TAD    ECHOSW        /GET CURRENT ECHO STATUS
  5685.     SPA CLA            /SKIP IF ECHO ON
  5686.     JMP    P7OFF        /JUMP IF ECHO OFF
  5687.     TAD    P7TEMP        /GET THE PASSED VALUE BACK
  5688.     JMS    P7OUT        /TRY TO OUTPUT IT
  5689.     JMP    P7AGN        /COULDN'T OUTPUT, GO WAIT THERE
  5690. P7OFF,    JMS    CHKUP        /CHECK FOR <^C>, ETC.
  5691.     TAD    P7TEMP        /GET THE CHARACTER BACK
  5692.     AND    [140]        /JUST QUADRANT BITS
  5693.     SZA CLA            /SKIP IF CONTROL CHARACTER
  5694.     ISZ    COLUMN        /BUMP COLUMN IF PRINTING CHARACTER
  5695. L11,    CNTRLI/NOP        /JUST IN CASE
  5696.     TAD    P7TEMP        /GET THE CHARACTER AGAIN
  5697.     TAD    (-CNTRLM)    /COMPARE TO <CR>
  5698.     SNA            /SKIP IF NOT <CR>
  5699.     DCA    COLUMN        /CLEAR COLUMN COUNT ON <CR>
  5700.     TAD    (-CNTRLH+CNTRLM)/COMPARE TO <BS>
  5701.     SNA CLA            /SKIP IF OTHER
  5702.     NL7777            /SET BACKUP VALUE
  5703.     TAD    COLUMN        /UPDATE COLUMN COUNT
  5704.     DCA    COLUMN        /STORE BACK
  5705.     JMP I    P7CHAR        /RETURN
  5706.  
  5707. P7OUT,    .-.            /LOW-LEVEL CONSOLE OUTPUT ROUTINE
  5708. P7TSF,    TSFIOT            /FLAG UP?
  5709.     JMP I    P7OUT        /NO, TAKE IMMEDIATE RETURN WITH AC INTACT
  5710. P7TLS,    TLSIOT            /YES, OUTPUT IT
  5711.     CLA            /CLEAN UP
  5712.     ISZ    P7OUT        /BUMP RETURN ADDRESS
  5713.     JMP I    P7OUT        /TAKE SKIP RETURN TO CALLER
  5714.  
  5715. /    COMES HERE TO HANDLE <^C> IF SO ENABLED.
  5716.  
  5717. UPCPRT,    TAD    ("C&177)    /GET A "C"
  5718.     JMS    UPRINT        /PRINT "^C"
  5719. KCCZP2,    KCCIOT            /**** 6120 **** 0000
  5720.     JMP I    [CLOOP]        /RESTART
  5721.  
  5722. UPRINT,    .-.            /"^"<CHARACTER> PRINTING ROUTINE
  5723.     DCA    P7TEMP        /SAVE PASSED VALUE
  5724.     TAD    ("^&177)    /GET AN "^"
  5725.     JMS    P7OUT        /OUTPUT IT
  5726.     JMP    .-1        /WAIT FOR IT
  5727.     TAD    P7TEMP        /GET PASSED VALUE
  5728.     JMS    P7OUT        /OUTPUT IT
  5729.     JMP    .-1        /WAIT FOR IT
  5730.     JMP I    UPRINT        /RETURN
  5731.  
  5732. P7TEMP,    .-.            /OUTPUT ROUTINE TEMPORARY
  5733.     PAGE
  5734.  
  5735. /    HANDLER I/O BUFFER DEFINITIONS.                    /014 CJL
  5736.  
  5737.     HNDLR=    .        /BUFFER FOR DISK I/O HANDLER        /014 CJL
  5738.  
  5739.     *PAGCNT^200+HNDLR    /RESET ORIGIN PAST HANDLER BUFFER    /014 CJL
  5740.  
  5741.     IFNZRO    SBOOT-.&4000    <ERROR    .>                /028 CJL
  5742.  
  5743.     *SBOOT-1        /JUST BEFORE EXIT ADDRESS        /025 CJL
  5744.  
  5745.     EXITKER=.        /WHERE TO EXIT TO            /025 CJL
  5746. /    ONCE-ONLY INITIALIZATION CODE.                    /024 CJL
  5747.  
  5748.     *HNDLR            /OVER AVAILABLE SPACE
  5749.  
  5750. INITIAL,CLA CLL            /CLEAN UP
  5751. COUTINI,TLSIOT            /RAISE CONSOLE OUTPUT FLAG        /046 CJL
  5752.     TAD    INITIA/(CLA CLL)/GET REPLACEMENT INSTRUCTION
  5753.     DCA I    [CLOOP]        /DON'T COME BACK TO US
  5754.     JMS I    (MACHINE)    /IDENTIFY CPU TYPE
  5755.     DCA    CPUTEMP        /SAVE IT
  5756.     TAD    CPUTEMP        /GET CPU TYPE
  5757.     TAD    (-13)        /COMPARE TO DEADLY 6120 VALUE
  5758.     SNA CLA            /SKIP IF OTHER
  5759.     JMP    INI6120        /JUMP IF IT MATCHES
  5760. ROUTINI,RTLSIOT            /INITIALIZE REMOTE OUTPUT        /046 CJL
  5761. RININIT,RKRBIOT            /INITIALIZE REMOTE INPUT        /046 CJL
  5762.     CLA            /CLEAN UP
  5763. INITPRT,JMS I    [SCRIBE]    /GIVE THEM THE
  5764.     INITMSG            /OPENING MESSAGE
  5765.     JMS I    [SCRIBE]    /GIVE THEM THE
  5766.     DAYMSG            /DAY MESSAGE
  5767.     JMS I    [SCRIBE]    /GIVE THEM THE
  5768.     MONMSG            /MONTH MESSAGE
  5769.     JMS I    [SCRIBE]    /GIVE THEM THE
  5770.     YEARMSG            /YEAR MESSAGE
  5771.     JMS I    [SCRIBE]    /GIVE THEM THE
  5772.     CPUTMSG            /CPU ID MESSAGE
  5773.     TAD    CPUTEMP        /*1
  5774.     CLL RTL            /*4
  5775.     TAD    CPUTEMP        /*5
  5776.     TAD    (CPULIST)    /POINT TO PROPER MESSAGE
  5777.     DCA    TST6120        /STORE IN-LINE
  5778.     JMS I    [SCRIBE]    /TELL THEM THEIR
  5779. TST6120,0            /ACTUAL CPU ID
  5780.     JMS I    [SCRIBE]    /GIVE THEM THE
  5781.     CLOSMSG            /CLOSING MESSAGE
  5782. DMPRZAP,JMP    .+3        /**** DECMATE USAGE DETECTED **** 0000
  5783.     JMS I    [SCRIBE]    /GIVE THEM THE
  5784. SPZAP,    DMPOMSG            /DECMATE PORT MESSAGE
  5785.     JMS I    [SCRIBE]    /GIVE THEM THE
  5786.     CRLF            /END OF LINE
  5787.     JMS I    [SCRIBE]    /GIVE THEM THE
  5788.     LCLMSG            /LOCAL PREFERENCE MESSAGE
  5789.     JMS I    [SCRIBE]    /TELL THEM THEY CAN
  5790.     THLPMSG            /ASK FOR HELP
  5791.     TAD    CPUTEMP        /GET CPU TYPE
  5792.     CLL RTL            /*4
  5793.     TAD    (CPUPRMPT-1)    /POINT TO PROPER ENTRY
  5794.     DCA    XR0        /STASH THE POINTER
  5795.     TAD    (-4)        /GET MOVE COUNT
  5796.     JMS    MESMOVE        /MOVE THE PROPER PROMPT TEXT
  5797.     PROMID-1        /TO THERE
  5798.     TAD    CPUTEMP        /*1
  5799.     CLL RTL            /*4
  5800.     TAD    CPUTEMP        /*5
  5801.     TAD    (CPUIDLST-1)    /POINT TO PROPER ENTRY
  5802.     DCA    XR0        /STASH THE POINTER
  5803.     TAD    (-5)        /GET MOVE COUNT
  5804.     JMS    MESMOVE        /MOVE THE PROPER CPU ID TEXT
  5805.     CPUMSG-1        /TO THERE
  5806.     CIF    USRFLD        /GOTO USR FIELD                /035 CJL
  5807.     JMS I    (USR)        /CALL USER SERVICE ROUTINE        /035 CJL
  5808.     USRIN            /LOCK USR IN                /035 CJL
  5809.  
  5810. /    DO FURTHER INITIALIZATION HERE.
  5811.  
  5812.     JMP I    [CLOOP]        /GO BACK TO KERMIT PROPER
  5813.  
  5814. /    COMES HERE TO INITIALIZE 6120-BASED MACHINES.            /046 CJL
  5815.  
  5816. INI6120,DCA I    (KCCZAP)    /ELIMINATE KCCIOT
  5817.     DCA I    (KCCZP2)    /ELIMINATE KCCIOT
  5818.     ISZ I    (KRSZAP)    /TURN KRSIOT
  5819.     ISZ I    (KRSZAP)    /INTO KRBIOT
  5820.     TAD    ROUTINITIALIZE    /GET OUTPUT INITIALIZE INSTRUCTION    /046 CJL
  5821.     TAD    (-6336)        /COMPARE TO POSSIBLE VALUE        /046 CJL
  5822.     SZA CLA            /SKIP IF IT MATCHES SERIAL PRINTER VALUE/046 CJL
  5823.     JMP    TRYDM1        /JUMP IF NOT CONFIGURED FOR SERIAL PORT    /046 CJL
  5824.     TAD    RININITIALIZE    /GET INPUT INITIALIZE INSTRUCTION    /046 CJL
  5825.     TAD    (-6326)        /COMPARE TO POSSIBLE VALUE        /046 CJL
  5826.     SNA CLA            /SKIP IF NOT CONFIGURED FOR SERIAL PORT    /046 CJL
  5827.     JMP    DMSER        /JUMP IF SERIAL PORT CONFIGURATION    /046 CJL
  5828. TRYDM1,    CLSK            /SKIP ON, CLEAR CLOCK FLAG IF DECMATE II/046 CJL
  5829.     NOP            /JUST IN CASE                /046 CJL
  5830.     CLCL            /CLEAR VT278 CLOCK FLAG            /046 CJL
  5831.     NOP            /JUST IN CASE                /046 CJL
  5832.     ISZ    TST6120        /WASTE                    /046 CJL
  5833.     JMP    .-1        /SOME TIME                /046 CJL
  5834.     CLSK8A            /VT278 CLOCK FLAG UP?            /046 CJL
  5835.     JMP    TRYDM2        /NO, TRY DECMATE II, ETC.        /046 CJL
  5836.     DCA    DMPRZAP        /MAKE IT PRINT OUR MESSAGE        /050 CJL
  5837.     CIF CDF    DMIFLD        /GOTO DECMATE ONCE-ONLY CODE FIELD    /046 CJL
  5838.     JMP I    (DM1INIT)    /CONTINUE THERE                /046 CJL
  5839.  
  5840. TRYDM2,    CLSK            /CLOCK FLAG UP?                /046 CJL
  5841.     JMP    ROUTINITIALIZE    /NO, MUST BE SOMEBODY ELSE!        /046 CJL
  5842.     DCA    DMPRZAP        /MAKE IT PRINT OUR MESSAGE        /048 CJL
  5843.     CIF CDF    DMIFLD        /GOTO DECMATE ONCE-ONLY FIELD        /046 CJL
  5844.     JMP I    (DM2INIT)    /CONTINUE THERE                /046 CJL
  5845.  
  5846. /    COMES HERE IF SERIAL PORT CONFIGURATION ON DECMATE.
  5847.  
  5848. DMSER,    DCA    DMPRZAP        /MAKE IT PRINT OUR MESSAGE        /048 CJL
  5849.     TAD    (DMPPMSG)    /GET OUR MESSAGE ADDRESS        /048 CJL
  5850.     DCA    SPZAP        /STORE IN-LINE                /048 CJL
  5851.     JMP    ROUTINITIALIZE    /CONTINUE THERE
  5852. MESMOVE,.-.            /MESSAGE MOVE ROUTINE
  5853.     DCA    MMOVCNT        /SAVE PASSED COUNT
  5854.     TAD I    MESMOVE        /GET THE PASSED ARGUMENT
  5855.     DCA    XR1        /SET IT UP
  5856.     ISZ    MESMOVE        /BUMP PAST ARGUMENT
  5857.     CDF    MSGFLD        /GOTO BUFFER FIELD
  5858. MESMVLP,TAD I    XR0        /GET A WORD
  5859.     DCA I    XR1        /PUT A WORD
  5860.     ISZ    MMOVCNT        /DONE YET?
  5861.     JMP    MESMVLP        /NO, GO BACK
  5862.     CDF    PRGFLD        /BACK TO OUR FIELD
  5863.     JMP I    MESMOVE        /YES, RETURN
  5864.  
  5865. CPUTEMP,.-.            /TEMPORARY FOR MACHINE TYPE
  5866. MMOVCNT,.-.            /TEMPORARY FOR MOVE COUNT
  5867.  
  5868.     PAGE
  5869. /    CPU IDENTIFYING ROUTINE.                    /024 CJL
  5870.  
  5871. /    RETURNS VALUE IN AC ACCORDING TO THE FOLLOWING RULE:
  5872.  
  5873. /    AC    CPU TYPE
  5874.  
  5875. /    0    UNKNOWN (DCC112, MP-12?)
  5876. /    1    PDP-5 (THE INCOMPATIBLE ONE!)
  5877. /    2    PDP-8 (THE REAL ONE!)
  5878. /    3    PDP-8/S    (THE SLOW ONE!)
  5879. /    4    LINC-8 (THE STRANGE ONE!)
  5880. /    5    PDP-8/I (THE ORANGE ONE!)
  5881. /    6    PDP-8/L (THE STRIPPED-DOWN ONE!)
  5882. /    7    PDP-12 (THE GREEN ONE! (BLUE?))
  5883. /    10    PDP-8/E (THE FAST ONE!)
  5884. /    11    PDP-8/A (THE WIDE ONE!)
  5885. /    12    6100 (THE MICRO ONE!)
  5886. /    13    6120 (THE HARRIS ONE!)
  5887.  
  5888. MACHINE,.-.            /MACHINE IDENTIFYING ROUTINE
  5889.     CLA CLL            /THIS WORKS ON EVERYBODY!
  5890.     TAD    0        /GET PDP-5 PC
  5891.     DCA    MACHTEMP    /SAVE IT
  5892.     TAD    (IMA5-1)    /GET PDP-5 NEW PC
  5893.     DCA    0        /STORE IT
  5894.  
  5895. /    IF WE GET HERE, WE'RE NOT A PDP-5.
  5896.  
  5897.     TAD    MACHTEMP    /GET OLD LOCATION ZERO
  5898.     DCA    0        /RESTORE IT
  5899.     NL3776            /PDP-8/I, L WEIRDNESS
  5900.     TAD    (-3776)        /COMPARE TO POSSIBLE VALUE
  5901.     SNA CLA            /SKIP IF NOT THOSE TWO
  5902.     JMP    IMA8IL        /JUMP IF ONE OF THEM
  5903.  
  5904. /    IF WE GET HERE, WE'RE NOT A PDP-8/I OR PDP-8/L.
  5905.  
  5906.     NL7776            /SETUP -2
  5907.     TAD    (-7776)        /COMPARE TO EXPECTED VALUE
  5908.     SZA CLA            /SKIP IF OK
  5909.     JMP    IMA8S        /JUMP IF RETARDED BROTHER
  5910.  
  5911. /    IF WE GET HERE, WE'RE NOT A PDP-8/S.
  5912.  
  5913.     NL0100            /SETUP 0100
  5914.     TAD    (-100)        /COMPARE TO EXPECTED VALUE
  5915.     SNA CLA            /SKIP IF STRAIGHT PDP-8
  5916.     JMP    IMAOMNIBUS    /JUMP IF NEWER CPU
  5917. /    IF WE GET HERE, WE ARE A PDP-8, BUT ARE WE A LINC-8?
  5918.  
  5919.     NL7777                /SETUP LINC TEST VALUE
  5920.     IACA                /LOAD LINC "A" REGISTER
  5921.     CLA                /CLEAN UP
  5922.     IAAC                /GET IT BACK
  5923.     IAC                /ADD ONE
  5924.     SNA CLA                /SKIP IF NO LINC HARDWARE
  5925.     JMP    IMAL8            /JUMP IF LINC-8
  5926.  
  5927. /    SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE A PDP-8.
  5928.  
  5929.     JMP    IMA8            /GO TELL THEM WE ARE A PDP-8
  5930.  
  5931. /    COMES HERE IF PDP-8/I OR PDP-8/L.
  5932.  
  5933. IMA8IL,    NL7777                /SETUP TEST VALUE
  5934.     CLA!401                /DO PDP-8/I GROUP THREE EAE CLA
  5935.     SZA CLA                /SKIP IF PDP-8/I
  5936.     JMP    IMA8L            /JUMP IF NOT
  5937.  
  5938. /    IF WE GET HERE, WE ARE A PDP-8/I, BUT ARE WE A PDP-12?
  5939.  
  5940.     LINC                /GOTO LINC MODE
  5941.     COM                /COMPLEMENT AC IF PDP-12, ELSE A HARMLESS AND
  5942.     PDP                /GOTO PDP8 MODE IF PDP-12, ELSE HARMLESS AND
  5943.     IAC                /ADD ONE FOR TEST
  5944.     SNA CLA                /SKIP IF JUST PDP-8/I
  5945.     JMP    IMA12            /JUMP IF ACTUALLY A LINC-8/I
  5946.  
  5947. /    SINCE WE DON'T CARE ABOUT PERIPHERALS, WE ARE JUST A PDP-8/I.
  5948.  
  5949.     JMP    IMA8I            /TELL THEM WE ARE A PDP-8/I
  5950.  
  5951. IMAOMNI,RTL RTR                /DO STRANGE OMNIBUS INSTRUCTION
  5952. PC8A,    SNA                /SKIP IF NOT A MICRO CHIP
  5953.     JMP    IMA61            /JUMP IF ONE OF THOSE THINGS
  5954.     TAD    (.&7600+16^7777)    /CHECK FOR PDP-8/E VALUE
  5955.     SNA                /SKIP IF NOT HIM
  5956.     JMP    IMA8E            /JUMP IF IT IS A PDP-8/E (/F OR /M OR 8A-6XX)
  5957.     TAD    (.&7600+16-PC8A)    /COMPARE TO PDP-8/A VALUE    /051 CJL
  5958.     SNA CLA                /SKIP IF SOMEBODY ELSE
  5959.     JMP    IMA8A            /JUMP IF IT MATCHES
  5960.  
  5961. /    IF WE GET HERE, SOME STRANGE PROCESSOR IS RUNNING US.
  5962.  
  5963.     JMP    IMAUNKNOWN        /YOU FIGURE IT OUT!
  5964. /    IF WE GET HERE, WE ARE A 6100 OR 6120.
  5965.  
  5966. IMA61,    NL0010            /DO 6120 SPECIAL INSTRUCTION
  5967.     TAD    (-10)        /COMPARE TO EXPECTED VALUE
  5968.     SNA CLA            /SKIP IF OTHER
  5969.     JMP    IMA6120        /JUMP IF IT MATCHES
  5970.  
  5971. /    WE APPARENTLY ARE ON A 6100, SO TELL THEM SO.
  5972.  
  5973.     JMP    IMA6100        /TELL THEM WE ARE A 6100 MACHINE (VT-78, ETC.)
  5974.  
  5975. /    RETURN GAUNTLET.
  5976.  
  5977. IMA6120,IAC            /SET 6120 VALUE
  5978. IMA6100,IAC            /SET 6100 VALUE
  5979. IMA8A,    IAC            /SET PDP-8/A VALUE
  5980. IMA8E,    IAC            /SET PDP-8/E VALUE
  5981. IMA12,    IAC            /SET PDP-12 VALUE
  5982. IMA8L,    IAC            /SET PDP-8/L VALUE
  5983. IMA8I,    IAC            /SET PDP-8/I VALUE
  5984. IMAL8,    IAC            /SET LINC-8 VALUE
  5985. IMA8S,    IAC            /SET PDP-8/S VALUE
  5986. IMA8,    IAC            /SET PDP-8 VALUE
  5987. IMA5,    IAC            /SET PDP-5 VALUE
  5988. IMAUNKN,JMP I    MACHINE        /RETURN
  5989.  
  5990. MACHTEM,.-.            /TEMPORARY FOR LOCATION ZERO
  5991.  
  5992.     PAGE
  5993.     FIELD    PRGFLD%10    /DUMP THE LITERALS NOW
  5994. /    LAYOUT OF FIELD ONE (PERMANENT CONTENTS).            /046 CJL
  5995.  
  5996.     NOPUNCH                /FOOL THE ASSEMBLER        /046 CJL
  5997.  
  5998.     FIELD    USRFLD%10        /USR FIELD            /046 CJL
  5999.  
  6000.     *0                /WHERE IT LOADS            /046 CJL
  6001.  
  6002. USRLOAD,ZBLOCK    200-.            /GET TO ENTRY POINT        /046 CJL
  6003.  
  6004.     USRENTR=.            /LOCKED-IN USR ENTRY POINT    /046 CJL
  6005.  
  6006. USRENTR,ZBLOCK    2000-.            /USR OWNS REST OF THIS AREA    /046 CJL
  6007.  
  6008.     FILBUFF=.            /FILE I/O DONE HERE        /046 CJL
  6009.  
  6010.     FIELD    BUFFLD%10        /FILE I/O BUFFER FIELD        /046 CJL
  6011.  
  6012.     *FILBUFFER            /RESET ORIGIN            /046 CJL
  6013.  
  6014. FILBUFF,ZBLOCK    PAGCNT^200        /THIS IS THE FILE I/O BUFFER    /046 CJL
  6015.  
  6016.     DIRBUFF=.            /DIRECTORY LOOKUP I/O DONE HERE    /028 CJL
  6017.  
  6018.     FIELD    DIRFLD%10        /DIRECTORY LOOKUP BUFFER FIELD    /028 CJL
  6019.  
  6020.     *DIRBUFFER            /RESET ORIGIN            /028 CJL
  6021.  
  6022. FILECNT,.-.                /-(NUMBER OF ENTRIES IN THIS SEGMENT)
  6023. FRSTREC,.-.                /FIRST RECORD OF FIRST ENTRY IN THIS SEGMENT
  6024. DIRLINK,.-.                /LINK TO NEXT SEGMENT; 0 IF LAST ACTIVE ONE
  6025.     .-.                /TENTATIVE ENTRY POINTER STORED HERE
  6026. AIWNUMB,.-.                /-(NUMBER OF ADDITIONAL INFORMATION WORDS)
  6027.  
  6028.     ENTSTRT=.            /FILE ENTRIES START HERE    /046 CJL
  6029.  
  6030.     ZBLOCK    PAGCNT^200+DIRBUFFER-.    /DIRECTORY ENTRIES HERE        /046 CJL
  6031.  
  6032. /    CONNECT MODE I/O BUFFERS.                    /026 CJL
  6033.  
  6034. KEYBUFF,ZBLOCK    BUFSIZE            /KEYBOARD BUFFER        /026 CJL
  6035. CONBUFF,ZBLOCK    BUFSIZE            /CONSOLE OUTPUT BUFFER        /026 CJL
  6036. RINBUFF,ZBLOCK    BUFSIZE            /REMOTE INPUT BUFFER        /026 CJL
  6037. REMBUFF,ZBLOCK    BUFSIZE            /REMOTE OUTPUT BUFFER        /026 CJL
  6038.  
  6039.     FLD1ADR=.            /SPACE AVAILABLE FOR TEXT, ETC.    /046 CJL
  6040.  
  6041.     ENPUNCH                /UN-FOOL THE ASSEMBLER        /046 CJL
  6042. /    DECMATE ONCE-ONLY CODE.                        /046 CJL
  6043.  
  6044.     FIELD    DMIFLD%10        /DECMATE ONCE-ONLY CODE FIELD    /046 CJL
  6045.  
  6046.     *USRLOAD            /OVER USR ROUTINE        /046 CJL
  6047.  
  6048. /    PAGE ZERO FOR ONCE-ONLY CODE.                    /046 CJL
  6049.  
  6050.     *10                /GET TO AUTO-INDEX AREA        /048 CJL
  6051.  
  6052. XR0,    .-.                /AUTO-INDEX ZERO        /048 CJL
  6053.  
  6054.     *USRENTRY            /OVER USR ENTRY POINT        /046 CJL
  6055.  
  6056. /    DECMATE I ONCE-ONLY CODE.                    /046 CJL
  6057.  
  6058. DM1INIT,JMS I    (DM1PORT)        /INITIALIZE THE REMOTE PORTS    /050 CJL
  6059.     TAD    (DM1LIST-1)        /POINT TO REPLACEMENT LIST    /050 CJL
  6060.     JMS    REPLACE            /ZAP IN ALL OF OUR PATCHES    /050 CJL
  6061.     CDF    PRGFLD            /GOTO MAIN FIELD        /050 CJL
  6062.     TAD I    (DIRXR)            /GET PORT SELECTION        /050 CJL
  6063.     SNA CLA                /SKIP IF PORT 1 REQUIRED    /050 CJL
  6064.     JMP    USEP0            /JUMP IF PORT 0 REQUIRED    /050 CJL
  6065.     TAD    (DM1SEC-1)        /POINT TO REPLACEMENT LIST    /050 CJL
  6066.     JMS    REPLACE            /ZAP IN SECONDARY PATCHES    /050 CJL
  6067. USEP0,    CIF CDF    PRGFLD            /BACK TO REST OF INITIALIZATION    /046 CJL
  6068.     JMP I    (INITPRT)        /CONTINUE THERE            /046 CJL
  6069.  
  6070. /    DECMATE II, ETC. ONCE-ONLY CODE.                /046 CJL
  6071.  
  6072. DM2INIT,JMS I    (DMIPORT)        /INITIALIZE THE REMOTE PORT    /048 CJL
  6073.     TAD    (DM2LIST-1)        /POINT TO REPLACEMENT LIST    /048 CJL
  6074.     JMS    REPLACE            /ZAP IN ALL OF OUR PATCHES    /048 CJL
  6075.     CIF CDF    PRGFLD            /BACK TO REST OF INITIALIZATION    /046 CJL
  6076.     JMP I    (INITPRT)        /CONTINUE THERE            /046 CJL
  6077.  
  6078. REPLACE,.-.                /REPLACEMENT ROUTINE        /048 CJL
  6079.     DCA    XR0            /SAVE PASSED LIST POINTER    /048 CJL
  6080. REPLUP,    CDF    DMIFLD            /BACK TO OUR FIELD        /048 CJL
  6081.     TAD I    XR0            /GET AN ADDRESS            /048 CJL
  6082.     SNA                /SKIP IF NOT AT END OF LIST    /048 CJL
  6083.     JMP I    REPLACE            /RETURN IF END OF LIST        /048 CJL
  6084.     DCA    REPADR            /STASH THE ADDRESS        /048 CJL
  6085.     TAD I    XR0            /GET THE REPLACEMENT VALUE    /048 CJL
  6086.     CDF    PRGFLD            /GOTO ZAPPING FIELD        /048 CJL
  6087.     DCA I    REPADR            /ZAP IT IN            /048 CJL
  6088.     JMP    REPLUP            /KEEP GOING            /048 CJL
  6089.  
  6090. REPADR,    .-.                /REPLACEMENT ADDRESS TEMPORARY    /048 CJL
  6091. /    DECMATE I PORT INITIALIZE ROUTINE                /050 CJL
  6092.  
  6093. DM1PORT,.-.                /DECMATE I PORT INITIALIZE ROUTINE
  6094.     TAD    (234)            /GET PORT 0 SCD ENABLE VALUE
  6095.     WCON0                /WRITE PORT 0 CONTROL REGISTER
  6096.     NL0000                /INDICATE PORT 0
  6097.     JMS    PRTINIT            /INITIALIZE PORT 0
  6098.  
  6099. /    CHANGE ALL IOTS TO PORT 1 VALUES.
  6100.  
  6101. IOCLUP,    ISZ    PSETF1            /BUMP SET FLAG INSTRUCTION
  6102.     ISZ    PDUMRD            /BUMP DUMMY READ INSTRUCTION
  6103.     ISZ    PSETF2            /BUMP SET FLAG INSTRUCTION
  6104.     ISZ    PSKIP            /BUMP SKIP ON FLAG INSTRUCTION
  6105.     ISZ    PLOAD            /BUMP LOAD INSTRUCTION
  6106.     ISZ    IOTCNT            /DONE YET?
  6107.     JMP    IOCLUP            /NO, KEEP GOING
  6108.  
  6109.     TAD    (234)            /GET PORT 1 SCD ENABLE VALUE
  6110.     WCON1                /WRITE PORT 1 CONTROL REGISTER
  6111.     NL4000                /INDICATE PORT 1
  6112.     JMS    PRTINIT            /INITIALIZE PORT 1
  6113.     JMP I    DM1PORT            /RETURN
  6114.  
  6115. PRTINIT,.-.                /LOW-LEVEL PORT INTIALIZE ROUTINE
  6116.     RACD                /RESET DESIRED PORT
  6117.     ISZ    PWASTE            /WASTE
  6118.     JMP    .-1            /SOME TIME
  6119.     CLA                /CLEAN UP
  6120. PSETF1,    RTFL0                /SET THE FLAG NOW
  6121.     TAD    (2516)            /SETUP FOR 8 BITS, NO PARITY, ETC.
  6122.     JMS    PSEND            /SEND TO MODE REGISTER 1
  6123.     CDF    PRGFLD            /GOTO MAIN FIELD
  6124.     TAD I    (RATE)            /GET BAUD RATE NOW
  6125.     CDF    DMIFLD            /BACK TO OUR FIELD
  6126.     TAD    (2460)            /ADD ON CLOCK ENABLES, ETC.
  6127.     JMS    PSEND            /SEND TO MODE REGISTER 2
  6128.     TAD    (3425)            /GET ENABLE AND RESET VALUE
  6129.     JMS    PSEND            /SEND TO COMMAND REGISTER
  6130. PDUMRD,    RKRB0                /DO A DUMMY READ NOW
  6131. PSETF2,    RTFL0                /SET THE FLAG NOW
  6132.     CLA                /CLEAN UP
  6133.     JMP I    PRTINIT            /RETURN
  6134.  
  6135. PSEND,    .-.                /PORT WRITE ROUTINE
  6136. PSKIP,    RTSF0                /FLAG UP?
  6137.     JMP    PSKIP            /NO, WAIT FOR IT
  6138. PLOAD,    RTLS0                /YES, LOAD THE VALUE
  6139.     CLA                /CLEAN UP
  6140.     JMP I    PSEND            /RETURN
  6141.  
  6142. IOTCNT,    RKFL0-RKFL1            /INTER-DEVICE IOT COUNT
  6143. PWASTE,    0                /TIMER TEMPORARY
  6144.     PAGE
  6145. /    DECMATE II, ETC. PORT INITIALIZE ROUTINE.            /048 CJL
  6146.  
  6147. /    THIS ROUTINE IS MOSTLY  "DARK  GREY MAGIC" WHICH IS PRIMARILY DERIVED FROM THE
  6148. /    "OFFICIAL" INFORMATION TAKEN FROM THE ONLY KNOWN DOCUMENTATION, THE DECMATE II
  6149. /    PROGRAMMER'S REFERENCE MANUAL:  EK-DECM2-RM-001.  VARIOUS EMPLOYEES OF DIGITAL
  6150. /    EQUIPMENT CORPORATION (A MULTI-NATIONAL COMPANY) HAVE ADDITIONALLY CONTRIBUTED
  6151. /    TO THIS EFFORT BY PROVIDING PORTIONS OF THE  "SACRED SLUSHWARE NOTES" ON A NOT
  6152. /    NECESSARILY  WILLING  BASIS  THROUGH  THEIR RELEASED WORKS, SUCH AS,  BUT  NOT
  6153. /    LIMITED TO, THE SOURCES OF THE PARTICULAR VERSION OF KERMIT-8  KNOWN  AS K278.
  6154. /    IT  IS  ASSUMED THAT THESE PEOPLE HAVE ACCESS TO BETTER DOCUMENTATION  OF  THE
  6155. /    HARDWARE, AND  ESPECIALLY  DOCUMENTATION  OF  THE  THREE  DIFFERENT  MODELS OF
  6156. /    DECMATE (II, III, III+) THAT THESE ISSUES APPLY TO.
  6157.  
  6158. /    SINCE IT IS NOT KNOWN WHETHER THE K278, ETC.  CODE IS SPECIFIC AND PRECISE, OR
  6159. /    MERELY SLOPPY, VARIOUS "QUIRKY" CODING TECHNIQUES HAVE BEEN LEFT "AS IS", WITH
  6160. /    COMMENTS   REGARDING  POTENTIAL  VARIANCE  WITH  DOCUMENTATION  NOTED    WHERE
  6161. /    NECESSARY.  THE ORDER OF ACCESS TO THE  REGISTERS HAS BEEN LEFT INTACT IN CASE
  6162. /    OF POTENTIAL INTERACTION.  SEVERAL CHANGES HAVE BEEN MADE  BEYOND THIS WORK AS
  6163. /    A  RESULT  OF  TRIAL-AND-ERROR, AND ALSO HAND DIS-ASSEMBLY OF SEVERAL  DECMATE
  6164. /    DISKETTES' CONTENTS.
  6165.  
  6166. /    IT IS HOPED THAT FUTURE "NEGOTIATIONS" WITH DEC ALLOW FOR PROPER DISCLOSURE OF
  6167. /    THESE ISSUES TO AVOID POTENTIAL SOFTWARE FAILURES  EVIDENT  IN  THESE ROUTINES
  6168. /    DUE TO LACK OF PROPER DOCUMENTATION.
  6169.  
  6170. DMIPORT,.-.            /COMMUNICATIONS PORT INITIALIZE ROUTINE
  6171.  
  6172. /    ACCORDING TO THE DECMATE II MANUAL, THE FOLLOWING INSTRUCTION IS UNDEFINED.
  6173.  
  6174.     MPRESET            /RESET MULTIPROTOCOL COMMUNICATIONS CONTROLLER CHIP
  6175.  
  6176. /    THE DECMATE III HAS  AN  INTERNAL  MODEM  OPTION WHICH IS NOT AVAILABLE IN THE
  6177. /    DECMATE II.  THE INTERFACE  TO THIS DEVICE IS APPARENTLY SHARED WITH THE MPSCC
  6178. /    MODEM INTERFACE WE NORMALLY USE, SO THE REGISTER ACCESS MUST BE MORE CAREFULLY
  6179. /    DEFINED.  THE APPARENT DIFFERENTIATION IS THE CURRENT VALUE OF THE DATA FIELD,
  6180. /    NAMELY EITHER FIELD 0 OR 1.  IT  IS  NOT  KNOWN WHETHER THE THREE-BIT VALUE OF
  6181. /    THE DATA FIELD IS SIGNIFICENT (PRESUMABLY FOR FUTURE EXPANSION), OR MERELY THE
  6182. /    DATA  FIELD'S  LOW-ORDER  BIT  IS  USED, AS ALL KNOWN EXAMPLES  OF  ALLEDGEDLY
  6183. /    FUNCTIONAL CODE USE APPROPRIATE CDF 00 AND CDF 10 ONLY.   APPARENTLY THE MODEM
  6184. /    INTERFACE IS REFERRED TO AS "A" AND THE MPSCC INTERFACE IS REFERRED TO AS "B".
  6185.  
  6186.     TAD    (030)        /GET RESET VALUE
  6187.     CDF    00        /TALKING TO REGISTER 0A
  6188.     MPSCC            /RESET COMMUNICATIONS CHIP
  6189.     CDF    10        /TALKING TO REGISTER 0B
  6190.     MPSCC            /RESET COMMUNICATIONS CHIP
  6191. /    ACCORDING  TO  THE  DECMATE II MANUAL, CONTROL    REGISTER  2 "HAS  NO  RELEVANT
  6192. /    BITS...  IF IT IS EVER WRITTEN, IT MUST BE WRITTEN WITH ALL ZEROS." APPARENTLY
  6193. /    THE  MODEM  INTERFACE  DEMANDS  A  NON-ZERO  VALUE  BE  WRITTEN  TO REGISTER 2
  6194. /    (PRESUMABLY TO  DISABLE  IT).  TO SATISFY THE ABOVE REQUIREMENT (WHATEVER THIS
  6195. /    IMPLIES!), REGISTER 2(B)  IS  WRITTEN  WITH ALL ZEROS *LAST* IN CASE THIS IS A
  6196. /    DECMATE II WHERE THE DATA FIELD CONSIDERATIONS ARE MEANINGLESS.
  6197.  
  6198.     CDF    00        /TALKING TO REGISTER 0A
  6199.     NL0002            /WANT REGISTER 2A
  6200.     MPSCC            /SELECT IT
  6201.     TAD    (020-2)        /GET RESET VALUE
  6202.     MPSCC            /LOAD IT
  6203.     CDF    10        /TALKING TO REGISTER 0B
  6204.     NL0002            /WANT REGISTER 2B
  6205.     MPSCC            /SELECT IT
  6206.     NL0000            /GET RESET VALUE (000)
  6207.     MPSCC            /LOAD IT
  6208.  
  6209. /    THE K278 CODE DOES NOT HAVE SETUP CODE FOR REGISTER 4B, PRESUMABLY BECAUSE THE
  6210. /    CODE PERFORMS A PANEL  REQUEST  (PRQ3) WHICH SETS UP THE EQUIVALENT VALUES FOR
  6211. /    ASYNCHRONOUS OPERATION WITH ONE STOP  BIT  AND  NO PARITY.  IT IS NOT KNOWN IF
  6212. /    THE DECMATE III EVEN *HAS* A  REGISTER  4B, BUT PRESUMABLY IT IS AVAILABLE FOR
  6213. /    LOADING THE RIGHT VALUES COMPATIBLE WITH THE DECMATE II, OR ATTEMPTING TO LOAD
  6214. /    IT IS INNOCUOUS. 
  6215.  
  6216.     CDF    00        /TALKING TO REGISTER 0A
  6217.     NL0004            /WANT REGISTER 4A
  6218.     MPSCC            /SELECT IT
  6219.     TAD    (104-4)        /SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY
  6220.     MPSCC            /LOAD IT
  6221.     CDF    10        /TALKING TO REGISTER 0B
  6222.     NL0004            /WANT REGISTER 4B
  6223.     MPSCC            /SELECT IT
  6224.     TAD    (104-4)        /SETUP FOR ASYNCHRONOUS, ONE STOP BIT, NO PARITY
  6225.     MPSCC            /LOAD IT
  6226. /    THE  DOCUMENTED VALUES    (FOR DECMATE II) REGARDING CONTROL REGISTER 1 INDICATE
  6227. /    THE PROPER VALUE OF 022, WHERE BIT[9] IS DEFINED AS A ZERO.   THE VALUE OF 026
  6228. /    IS  TAKEN  FROM  K278  WHERE  PRESUMABLY  THE  EXTRA BIT IS NECESSARY FOR SOME
  6229. /    DECMATE III OBSCURITY.
  6230.  
  6231. /    THE FOLLOWING CODE IS  REDUNDANT  FOR  LOADING  REGISTER  0A  BEFORE AND AFTER
  6232. /    LOADING REGISTER 0B.  THIS  IS  EITHER A MISTAKE OR OBSCURELY NECESSARY (TAKEN
  6233. /    FROM K278).
  6234.  
  6235.     CDF    00        /TALKING TO REGISTER 0A
  6236.     NL0001            /WANT REGISTER 1A
  6237.     MPSCC            /SELECT IT
  6238.     TAD    (026-1)        /GET SETUP VALUE
  6239.     MPSCC            /LOAD IT
  6240.     CDF    10        /TALKING TO REGISTER 0B
  6241.     NL0001            /WANT REGISTER 1B
  6242.     MPSCC            /SELECT IT
  6243.     TAD    (026-1)        /GET SETUP VALUE
  6244.     MPSCC            /LOAD IT
  6245.     CDF    00        /TALKING TO REGISTER 0A
  6246.     NL0001            /WANT REGISTER 1A
  6247.     MPSCC            /SELECT IT
  6248.     TAD    (026-1)        /GET SETUP VALUE
  6249.     MPSCC            /LOAD IT
  6250.  
  6251. /    THE DECMATE III INTERNAL MODEM IS PROBABLY ASYNCHRONOUS 8 BIT  ONLY.  ASSUMING
  6252. /    THE RECEIVE SIDE OF THE INTERNAL MODEM IS ALWAYS "ENABLED", REGISTER  3A WOULD
  6253. /    BE  UNNECESSARY.  THE K278 CODE DOES NOT ADDRESS REGISTER 3 AS  AN  A/B  PAIR,
  6254. /    PRESUMABLY  BECAUSE  REGISTER  3 IS NOT DECODED AND IS EFFECTIVELY REGISTER 3B
  6255. /    REGARDLESS OF  THE  DATA FIELD.  THIS IS EITHER TRUE, OR THE K278 CODING FAILS
  6256. /    TO PROPERLY INITIALIZE THE DECMATE III MPSCC PORT.
  6257.  
  6258.     NL0003            /WANT REGISTER 3
  6259.     MPSCC            /SELECT IT
  6260.     TAD    (301-3)        /SETUP FOR 8 BITS AND ENABLE RECIVER
  6261.     MPSCC            /LOAD IT
  6262.  
  6263. /    A SIMILAR  SITUATION  EXISTS  FOR  THE  TRANSMITTER  SIDE  OF  THE DECMATE III
  6264. /    INTERNAL MODEM.  REGISTER 5 IS UTILIZED ACCORDINGLY.
  6265.  
  6266.     TAD    (5-301)        /WANT REGISTER 5
  6267.     MPSCC            /SELECT IT
  6268.     TAD    (150-5)        /GET TRANSMITTER ENABLE, 8 BITS VALUE
  6269.     MPSCC            /LOAD IT
  6270.  
  6271. /    THE DECMATE II REFERENCE  MANUAL  INDICATES  THE  PROPER SETTING FOR THE MODEM
  6272. /    CONTROL REGISTER AS EITHER 030  OR  130  DEPENDING ON WHETHER BIT[5] INDICATES
  6273. /    INTERNAL OR EXTERNAL TIMING (WHERE ONE  OF  THESE  IS ILLEGAL FOR ASYNCHRONOUS
  6274. /    OPERATION!).  THE SETTING OF BITS [10]  AND  [11]  WOULD  INDICATE ENABLING OF
  6275. /    BOTH  LOCAL  AND  REMOTE LOOPBACKS, YET WE SET  ONLY  THESE  BITS  (ALA  K278)
  6276. /    ALLEDGEDLY FOR THE PURPOSE OF SETTING RTS AND DTR  (WHICH  ARE  DOCUMENTED  AS
  6277. /    BEING BITS[7] AND [8] RESPECTIVELY).
  6278.  
  6279.     NL0003            /SET VALUE
  6280.     MLC            /LOAD IT
  6281.     CLA            /CLEAN UP
  6282.  
  6283. /    THE BAUD RATE SHOULD BE SET HERE IF DESIRED.
  6284.  
  6285. /    TAD    BAUD        /GET BAUD RATE
  6286. /    MSB            /LOAD IT
  6287.     CLA            /CLEAN UP
  6288.     JMP I    DMIPORT        /RETURN
  6289. /    DECMATE II, ETC. REPLACEMENT LIST.                /048 CJL
  6290.  
  6291. DM2LIST,CLDMZAP                /     *CLDMZAP
  6292.  
  6293.         DMINIT&177+JMSC        /CLDMZAP,JMS     DMINIT
  6294.  
  6295.     SETBAUD                /     *SETBAUD        /050 CJL
  6296.  
  6297.         MSB            /SETBAUD,MSB            /050 CJL
  6298.  
  6299.     INLUP                /     *INLUP
  6300.  
  6301.         TAD    INFLAG        /INLUP,     TAD     INFLAG
  6302.  
  6303.     INSKIP                /     *INSKIP
  6304.  
  6305.         NOTYET&177+JMPC        /INSKIP, JMP     NOTYET
  6306.     INLUP1;    DCA    INFLAG        /INLUP1, DCA     INFLAG
  6307.     INREAD;    IRB            /INREAD, IRB
  6308.  
  6309.     INSTATUS            /     *INSTATUS
  6310.  
  6311.         UPSTATUS&177+JMSC    /INSTATU,JMS     UPSTATUS
  6312.  
  6313.     GETFL1                /     *GETFL1
  6314.  
  6315.         UPSTATUS&177+JMSC    /GETFL1, JMS     UPSTATUS
  6316.  
  6317.     COMWAIT                /     *COMWAIT
  6318.  
  6319.         GETFLOW&177+JMSC    /COMWAIT,JMS     GETFLOW
  6320.  
  6321.     NOWAIT                /     *NOWAIT
  6322.  
  6323.         TAD    OUTFLAG        /NOWAIT, TAD     OUTFLAG
  6324.     CMOUT1;    SNA CLA            /CMOUT1, SNA CLA
  6325.     CMOUT2;    OWAIT&177+JMPC        /CMOUT2, JMP     OWAIT
  6326.     DM1AND;    DCA    OUTFLAG        /DM1AND, DCA     OUTFLAG
  6327.     CMOUT3;    OUTEMP&177+TADC        /CMOUT3, TAD     OUTEMP
  6328.     CMOUT4;    OLS            /CMOUT4, OLS
  6329.  
  6330.     BUFCHECK            /     *BUFCHECK
  6331.  
  6332.         PUPSTATUS&177+JMSIC    /BUFCHEC,JMS I     PUPSTATUS
  6333.  
  6334.     KERRLUP                /     *KERRLUP
  6335.  
  6336.         PUPSTATUS&177+JMSIC    /KERRLUP,JMS I     PUPSTATUS
  6337.     RINTEST                /     *RINTEST
  6338.  
  6339.         TAD    INFLAG        /RINTEST,TAD     INFLAG
  6340.     RINGT0;    SNA CLA            /RINGT0, SNA CLA
  6341.     RINREAD;RINGNONE&177+JMPC    /RINREAD,JMP     RINGNONE
  6342.     RINGT1;    DCA    INFLAG        /RINGT1, DCA     INFLAG
  6343.     RINGT2;    IRB            /RINGT2, IRB
  6344.  
  6345.     REMTSF                /     *REMTSF
  6346.  
  6347.         RMPTEMP&177+DCAC    /REMTSF, DCA     RMPTEMP
  6348.     RMPUT0;    TAD    OUTFLAG        /RMPUT0, TAD     OUTFLAG
  6349.     REMTLS;    SNA CLA            /REMTLS, SNA CLA
  6350.     RMPUT1;    REMPUT&177+JMPIC    /RMPUT1, JMP I     REMPUT
  6351.     REMCLEA;RMPTEMP&177+TADC    /REMCLEA,TAD     RMPTEMP
  6352.     RMPUT2;    OLS            /RMPUT2, OLS
  6353.  
  6354.     0                /THIS ENDS THE LIST
  6355.  
  6356.     PAGE
  6357. /    DECMATE I REPLACEMENT LIST.                    /050 CJL
  6358.  
  6359. DM1LIST,CLDMZAP                /     *CLDMZAP
  6360.  
  6361.         DMINIT&177+JMSC        /CLDMZAP,JMS     DMINIT
  6362.  
  6363.     SETBAUD                /     *SETBAUD
  6364.  
  6365.         NOP            /SETBAUD,NOP
  6366.  
  6367.     DMI01                /     *DMI01
  6368.  
  6369.         DM234&177+TADC        /DMI01,     TAD     DM234/(234)
  6370.     DMI02;    WCON0            /DMI02,     WCON0
  6371.     DMI03;    NL0000            /DMI03,     NL0000
  6372.     DMI04;    RACD            /DMI04,     RACD
  6373.     DMI05;    DMWASTE&177+ISZC    /DMI05,     ISZ     DMWASTE
  6374.     DMI06;    DMI05&177+JMPC        /DMI06,     JMP     DMI05
  6375.     DMI07;    DMWASTE&177+ISZC    /DMI07,     ISZ     DMWASTE
  6376.     DMI08;    DMI07&177+JMPC        /DMI08,     JMP     DMI07
  6377.     DMI09;    RTFL0            /DMI09,     RTFL0
  6378.     DMI10;    DM2516&177+TADC        /DMI10,     TAD     DM2516/(2516)
  6379.     DMI11;    DMSEND&177+JMSC        /DMI11,     JMS     DMSEND
  6380.     DMI12;    TAD    RATE        /DMI12,     TAD     RATE
  6381.     DMI13;    DM2460&177+TADC        /DMI13,     TAD     DM2460/(2460)
  6382.     DMI14;    DMSEND&177+JMSC        /DMI14,     JMS     DMSEND
  6383.     DMI15;    DM3425&177+TADC        /DMI15,     TAD     DM3425/(3425)
  6384.     DMI16;    DMSEND&177+JMSC        /DMI16,     JMS     DMSEND
  6385.     DMI17;    RKRB0            /DMI17,     RKRB0
  6386.  
  6387.     DMISET                /     *DMISET
  6388.  
  6389.         RTFL0            /DMISET, RTFL0
  6390.  
  6391.     DMISKP                /     *DMISKP
  6392.  
  6393.         RTSF0            /DMISKP, RTSF0
  6394.     DMIOUT                /     *DMIOUT
  6395.  
  6396.         RTLS0            /DMIOUT, RTLS0
  6397.  
  6398.     INSKIP                /     *INSKIP
  6399.  
  6400.         RKSF0            /INSKIP, RKSF0
  6401.  
  6402.     INREAD                /     *INREAD
  6403.  
  6404.         RKRB0            /INREAD, RKRB0
  6405.  
  6406.     COMWAIT                /     *COMWAIT
  6407.  
  6408.         GETFLOW&177+JMSC    /COMWAIT,JMS     GETFLOW
  6409.  
  6410.     NOWAIT                /     *NOWAIT
  6411.  
  6412.         RTSF0            /NOWAIT, RTSF0
  6413.     CMOUT1;    OWAIT&177+JMPC        /CMOUT1, JMP     OWAIT
  6414.  
  6415.     DM1AND                /     *DM1AND
  6416.  
  6417.         AND377            /DM1AND, AND     [377]
  6418.  
  6419.     CMOUT4                /     *CMOUT4
  6420.  
  6421.         RTLS0            /CMOUT4, RTLS0
  6422.  
  6423.     RINTEST                /     *RINTEST
  6424.  
  6425.         RKSF0            /RINTEST,RKSF0
  6426.  
  6427.     RINREAD                /     *RINREAD
  6428.  
  6429.         RKRB0            /RINREAD,RKRB0
  6430.     RINGT1;    SKP            /RINGT1, SKP
  6431.  
  6432.     DM1AN2                /     *DM1AN2
  6433.  
  6434.         AND377            /DM1AN2, AND     [377]
  6435.  
  6436.     REMTSF                /     *REMTSF
  6437.  
  6438.         RTSF0            /REMTSF, RTSF0
  6439.  
  6440.     REMTLS                /     *REMTLS
  6441.  
  6442.         RTLS0            /REMTLS, RTLS0
  6443.  
  6444.     0                /THIS ENDS THE LIST
  6445. /    DECMATE I SECONDARY REPLACEMENT LIST                /050 CJL
  6446.  
  6447. DM1SEC,    DMI02                /     *DMI02
  6448.  
  6449.         WCON1            /DMI02,     WCON1
  6450.     DMI03;    NL4000            /DMI03,     NL4000
  6451.  
  6452.     DMI09                /     *DMI09
  6453.  
  6454.         RTFL1            /DMI09,     RTFL1
  6455.  
  6456.     DMI17                /     *DMI17
  6457.  
  6458.         RKRB1            /DMI17,     RKRB1
  6459.  
  6460.     DMISET                /     *DMISET
  6461.  
  6462.         RTFL1            /DMISET, RTFL1
  6463.  
  6464.     DMISKP                /     *DMISKP
  6465.  
  6466.         RTSF1            /DMISKP, RTSF1
  6467.  
  6468.     DMIOUT                /     *DMIOUT
  6469.  
  6470.         RTLS1            /DMIOUT, RTLS1
  6471.  
  6472.     INSKIP                /     *INSKIP
  6473.  
  6474.         RKSF1            /INSKIP, RKSF1
  6475.  
  6476.     INREAD                /     *INREAD
  6477.  
  6478.         RKRB1            /INREAD, RKRB1
  6479.  
  6480.     NOWAIT                /     *NOWAIT
  6481.  
  6482.         RTSF1            /NOWAIT, RTSF1
  6483.  
  6484.     CMOUT4                /     *CMOUT4
  6485.  
  6486.         RTLS1            /CMOUT4, RTLS1
  6487.  
  6488.     RINTEST                /     *RINTEST
  6489.  
  6490.         RKSF1            /RINTEST,RKSF1
  6491.  
  6492.     RINREAD                /    *RINREAD
  6493.  
  6494.         RKRB1            /RINREAD,RKRB1
  6495.  
  6496.     REMTSF                /     *REMTSF
  6497.  
  6498.         RTSF1            /REMTSF, RTSF1
  6499.     REMTLS                /     *REMTLS
  6500.  
  6501.         RTLS1            /REMTLS, RTLS1
  6502.  
  6503.     0                /THIS ENDS THE LIST
  6504. /    ONCE-ONLY TEXT MESSAGES.                    /024 CJL
  6505.  
  6506.     FIELD    BUFFLD%10        /FILE I/O BUFFER FIELD
  6507.  
  6508.     *FILBUFFER            /OVER FILE I/O BUFFER
  6509.  
  6510. /    LOCAL PREFERENCE MESSAGE.                    /024 CJL
  6511.  
  6512. /    USE SOMETHING APPROPRIATE HERE TO CUSTOMIZE KERMIT-12 TO YOUR MACHINE.
  6513.  
  6514. /    THIS LOCATION SHOULD BE MAINTAINED SINCE IT IS DOCUMENTED TO BE HERE.
  6515.  
  6516.     XLIST    OFF
  6517.     IFZERO    GENMSG            <
  6518.     XLIST    ON
  6519. LCLMSG,    *LCLMSG+40            /EMPTY HOLE FOR USER MESSAGE    /039 CJL
  6520.  
  6521.     XLIST    OFF            >
  6522.     IFNZRO    GENMSG            <
  6523.     IFNZRO    LEDERLE        <
  6524.     XLIST    ON
  6525. LCLMSG,    TEXT    "%^T^HANKS TO: ^B^ILL ^S^MITH AND ^D^INGER ^M^ILLER%"
  6526.  
  6527.     XLIST    OFF        >
  6528.     IFNZRO    UMSG        <
  6529.     XLIST    ON
  6530. LCLMSG,    TEXT    "%^I^NSERT LOCAL USER MESSAGE HERE!%^"
  6531.  
  6532.     XLIST    OFF        >
  6533.     IFZERO    LEDERLE!UMSG    <
  6534.     XLIST    ON
  6535. LCLMSG,    TEXT    "^^^^^^^^^^^^^^^^^^^^^^"/DEFAULT IS NO MESSAGE
  6536.  
  6537.     XLIST    OFF        >
  6538.     IFNZRO    LCLMSG+40-.    <
  6539.     XLIST    ON
  6540.     ZBLOCK    LCLMSG+40-.        /LEAVE PATCHING SPACE
  6541.  
  6542.     XLIST    OFF        >
  6543.                     >
  6544.     XLIST    ON
  6545. CLOSMSG,TEXT    "^]^"            /CPU TYPE CLOSING MESSAGE
  6546. /    CPU IDENTIFICATION LIST; ALL MUST BE 5 WORDS LONG (EXCEPT LAST)./024 CJL
  6547.  
  6548. CPULIST,TEXT    "^U^NKNOWN"        /00=UNKNOWN
  6549.     TEXT    "^PDP^-5^^"        /01=PDP-5
  6550.     TEXT    "^PDP^-8^^"        /02=PDP-8
  6551.     TEXT    "^PDP^-8/S"        /03=PDP-8/S
  6552.     TEXT    "^LINC^-8^"        /04=LINC-8
  6553.     TEXT    "^PDP^-8/I"        /05=PDP-8/I
  6554.     TEXT    "^PDP^-8/L"        /06=PDP-8/L
  6555.     TEXT    "^PDP^-12^"        /07=PDP-12
  6556.     TEXT    "^PDP^-8/E"        /10=PDP-8/E
  6557.     TEXT    "^PDP^-8/A"        /11=PDP-8/A
  6558.     TEXT    "6100^^^^^"            /12=6100
  6559.     TEXT    "6120^"                /13=6120; LAST CAN BE SHORT!
  6560. CPUTMSG,TEXT    "%^[C^PU TYPE IS: "        /CPU TYPE MESSAGE
  6561. DAYMSG,    DAY%12^66+DAY+6060            /DAY MESSAGE
  6562.     TEXT    " "
  6563. DMPOMSG,TEXT    " ^[U^SING ^C^OMMUNICATIONS"    /DECMATE PORT MESSAGE
  6564.     TEXT    " ^P^ORT^]"
  6565. DMPPMSG,TEXT    " ^[U^SING ^P^RINTER ^P^ORT^]^"    /DECMATE SERIAL PORT MESSAGE
  6566. INITMSG,TEXT    "%^PS/8 PS/12 OS/8 OS/12 "    /INITIAL MESSAGE
  6567.     TEXT    "OS/78 OS/278  K^ERMIT-12  ^V"
  6568. INMSG2,    VERSION%12^66+VERSION+6060        /VERSION DIGITS
  6569. INMSG3,    "^^100+REVISION                /REVISION
  6570.     TEXT    "   "                /END OF MESSAGE
  6571.     XLIST    OFF
  6572.     IFZERO    MONTH-1        <
  6573.     XLIST    ON
  6574. MONMSG,    TEXT    "^J^ANUARY ^"            /MONTH MESSAGE
  6575.     XLIST    OFF        >
  6576.     IFZERO    MONTH-2        <
  6577.     XLIST    ON
  6578. MONMSG,    TEXT    "^F^EBRUARY "            /MONTH MESSAGE
  6579.     XLIST    OFF        >
  6580.     IFZERO    MONTH-3        <
  6581.     XLIST    ON
  6582. MONMSG,    TEXT    "^M^ARCH ^"            /MONTH MESSAGE
  6583.     XLIST    OFF        >
  6584.     IFZERO    MONTH-4        <
  6585.     XLIST    ON
  6586. MONMSG,    TEXT    "^A^PRIL ^"            /MONTH MESSAGE
  6587.     XLIST    OFF        >
  6588.     IFZERO    MONTH-5        <
  6589.     XLIST    ON
  6590. MONMSG,    TEXT    "^M^AY ^"            /MONTH MESSAGE
  6591.     XLIST    OFF        >
  6592.     IFZERO    MONTH-6        <
  6593.     XLIST    ON
  6594. MONMSG,    TEXT    "^J^UNE "            /MONTH MESSAGE
  6595.     XLIST    OFF        >
  6596.     IFZERO    MONTH-7        <
  6597.     XLIST    ON
  6598. MONMSG,    TEXT    "^J^ULY "            /MONTH MESSAGE
  6599.     XLIST    OFF        >
  6600.     IFZERO    MONTH-10    <
  6601.     XLIST    ON
  6602. MONMSG,    TEXT    "^A^UGUST "            /MONTH MESSAGE
  6603.     XLIST    OFF        >
  6604.     IFZERO    MONTH-11    <
  6605.     XLIST    ON
  6606. MONMSG,    TEXT    "^S^EPTEMBER ^"            /MONTH MESSAGE
  6607.     XLIST    OFF        >
  6608.     IFZERO    MONTH-12    <
  6609.     XLIST    ON
  6610. MONMSG,    TEXT    "^O^CTOBER ^"            /MONTH MESSAGE
  6611.     XLIST    OFF        >
  6612.     IFZERO    MONTH-13    <
  6613.     XLIST    ON
  6614. MONMSG,    TEXT    "^N^OVEMBER "            /MONTH MESSAGE
  6615.     XLIST    OFF        >
  6616.     IFZERO    MONTH-14    <
  6617.     XLIST    ON
  6618. MONMSG,    TEXT    "^D^ECEMBER "            /MONTH MESSAGE
  6619.     XLIST    OFF        >
  6620.     IFNZRO    MONMSG+7-.    <
  6621.     XLIST    ON
  6622.  
  6623.     ZBLOCK    MONMSG+7-.            /EMPTY SPACE FOR ALIGNMENT
  6624.  
  6625.     XLIST    OFF        >
  6626.     XLIST    ON
  6627. THLPMSG,TEXT    "%^T^YPE ^HELP<CR>^ FOR HELP%^"    /TYPE HELP MESSAGE
  6628. YEARMSG,TEXT    "19"                /YEAR MESSAGE
  6629.     YEAR%12^66+YEAR+6060            /YEAR DIGITS
  6630.     TEXT    "^"                /END OF MESSAGE
  6631. /    CPU-SPECIFIC PROMPT LIST.                    /024 CJL
  6632.  
  6633. CPUPRMP,TEXT    "??^>^^^"    /UNKNOWN
  6634.     TEXT    "5^>^^^^"    /PDP-5
  6635.     TEXT    "8^>^^^^"    /PDP-8
  6636.     TEXT    "8^/S>^^"    /PDP-8/S
  6637.     TEXT    "LINC-8>"    /LINC-8
  6638.     TEXT    "8^/I>^^"    /PDP-8/I
  6639.     TEXT    "8^/L>^^"    /PDP-8/L
  6640.     TEXT    "12^>^^^"    /PDP-12
  6641.     TEXT    "8^/E>^^"    /PDP-8/E
  6642.     TEXT    "8^/A>^^"    /PDP-8/A
  6643.     TEXT    "78^>^^^"    /6100
  6644.     TEXT    "278^>^^"    /6120
  6645. /    CPU-SPECIFIC IDENTIFICATION LIST.                /025 CJL
  6646.  
  6647. CPUIDLS,TEXT    "^U^NKNOWN"    /UNKNOWN
  6648.     TEXT    "^PDP^-5^^"    /PDP-5
  6649.     TEXT    "^PDP^-8^^"    /PDP-8
  6650.     TEXT    "^PDP^-8/S"    /PDP-8/S
  6651.     TEXT    "^LINC^-8^"    /LINC-8
  6652.     TEXT    "^PDP^-8/I"    /PDP-8/I
  6653.     TEXT    "^PDP^-8/L"    /PDP-8/L
  6654.     TEXT    "^PDP^-12^"    /PDP-12
  6655.     TEXT    "^PDP^-8/E"    /PDP-8/E
  6656.     TEXT    "^PDP^-8/A"    /PDP-8/A
  6657.     TEXT    "^VT^-78^^"    /VT-78
  6658.     TEXT    "^DEC^MATE"    /6120
  6659.     FIELD    MSGFLD%10            /MESSAGE FIELD
  6660.  
  6661.     *FLD1ADR                /PERMANENT LOAD ADDRESS    /046 CJL
  6662.                         /TEXT MESSAGES LOAD HERE/046 CJL
  6663.  
  6664. ABMSG,    TEXT    "%^F^ILE ^A^BORT%^"        /FILE ABORT MESSAGE
  6665. CMERMSG,TEXT    "?^I^NVALID COMMAND^"        /COMMAND ERROR MESSAGE
  6666. CONNMSG,TEXT    "%(^C^ONNECTING TO HOST, TYPE "    /FIRST CONNECT MESSAGE
  6667. CONTMSG,TEXT    "^C^ONTROL-^"            /CONTROL CHARACTER MESSAGE
  6668. CON2MSG,TEXT    " ^C^ TO RETURN TO ^"        /BRIDGING CONNECT MESSAGE
  6669. CON3MSG,TEXT    ")%^"                /FINAL CONNECT MESSAGE
  6670. CPUMSG,    ZBLOCK    5                /CPU ID MESSAGE GOES HERE
  6671. /CRLF,    TEXT    "%"                /<CR>, <LF> MESSAGE
  6672. DNERMSG,TEXT    "?^E^RROR IN DEVICE NAME"    /DEVICE NAME ERROR MESSAGE
  6673. DSFLMSG,TEXT    "?^D^ISK FULL!"            /DISK OUT OF ROOM ERROR MESSAGE
  6674. FCLEMSG,TEXT    "?^E^RROR CLOSING FILE"        /FILE CLOSE ERROR MESSAGE
  6675. FNERMSG,    TEXT    "?^E^RROR IN FILE NAME"    /FILE NAME ERROR MESSAGE
  6676. FRECMSG,TEXT    "^R^ECEIVING FILE: ^"        /RECEIVING FILE MESSAGE
  6677. FSENMSG,TEXT    "^S^ENDING FILE: ^"        /SENDING FILE MESSAGE
  6678. FSERMSG,TEXT    "?^F^ILE NAME SYNTAX ERROR"    /FILE NAME ERROR MESSAGE
  6679. HELPMSG,TEXT    "%^S^UPPORTED COMMANDS ARE:%%"    /HELP MESSAGE
  6680.     TEXT    "^CONNECT^ (TO REMOTE SYSTEM) %"
  6681.     TEXT    "^SEND DEV:FILNAM.EX^ %"
  6682.     TEXT    "^RECEIVE DEV:^ (FILENAME AND EXTENSION ^NOT^ ALLOWED)%"
  6683.     TEXT    "^GET DEV:FILNAM.EX^%"
  6684.     TEXT    "^FINISH^ (SERVER)%"
  6685.     TEXT    "^EXIT^ (TO OPERATING SYSTEM) %"
  6686.     TEXT    "^HELP^ (THIS MESSAGE)%"
  6687.     TEXT    "%^E^SCAPE CHARACTER: "
  6688. KERRMSG,TEXT    "%^K^EYBOARD INPUT ERROR!%"    /KEYBOARD ERROR MESSAGE
  6689.  
  6690.     CRLF=    .-1                /<CR>, <LF> MESSAGE
  6691. NOFINIS,TEXT    "?^U^NABLE TO TELL HOST THAT "    /FINISH ERROR MESSAGE
  6692.     TEXT    "SESSION IS FINISHED"
  6693. NOTFND,    TEXT    "?^U^NABLE TO LOCATE FILE^"    /FILE NOT FOUND MESSAGE
  6694. PRMTMSG,TEXT    "^K^ERMIT-^"            /STATIC PORTION OF PROMPT MESSAGE
  6695. PROMID,    ZBLOCK    23                /MODIFIED PORTION OF PROMPT MESSAGE
  6696. RERRMSG,TEXT    "?^R^ECEIVE FAILURE^"        /GENERAL RECEIVE FAILURE MESSAGE
  6697. RFLNMSG,TEXT    "?^E^RROR IN RECEIVED FILE NAME"/RECEIVED NAME ERROR MESSAGE
  6698.     TEXT    "^"
  6699. RHFEMSG,TEXT    "^U^NABLE TO RECEIVE - HANDLER"    /HANDLER FETCH ERROR MESSAGE
  6700.     TEXT    " ERROR^"
  6701. RIDEMSG,TEXT    "?^U^NABLE TO RECEIVE -"    /DIRECTORY FULL ERROR MESSAGE
  6702.     TEXT    " INSUFFICIENT DIRECTORY SPACE"
  6703. RIERMSG,TEXT    "%^R^EMOTE LINE INPUT ERROR!%^"    /REMOTE LINE ERROR MESSAGE
  6704. RPERMSG,TEXT    "?^U^NABLE TO RECEIVE LATEST "    /LATEST PACKET ERROR MESSAGE
  6705.     TEXT    "PACKET^"
  6706. SDERMSG,TEXT    "?^U^NABLE TO SEND - DIRECTORY "/DIRECTORY INPUT ERROR MESSAGE
  6707.     TEXT    "ERROR"
  6708. SHFEMSG,TEXT    "?^U^NABLE TO SEND - HANDLER "    /HANDLER FETCH ERROR MESSAGE
  6709.     TEXT    "ERROR"
  6710. SNDEMSG,TEXT    "?^U^NABLE TO SEND"        /GENERAL SEND ERROR MESSAGE
  6711. UPERMSG,TEXT    "?^U^NABLE TO RECEIVE - DATA "    /RECEIVED DATA ERROR MESSAGE
  6712.     TEXT    "ERROR"
  6713.  
  6714.     $                    /THAT'S ALL FOLK!
  6715.