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