PL/M-80 COMPILER 7/3/79 PAGE 1 ISIS-II PL/M-80 V3.1 COMPILATION OF MODULE BLKCLI OBJECT MODULE PLACED IN :F1:BLKCLI.OBJ COMPILER INVOKED BY: PLM80 :F1:BLKCLI.SRC DEBUG DATE(7/3/79) 1 BLKCLI: DO; $INCLUDE (:F1:COMMON.LIT) 2 1 = DECLARE LIT LITERALLY 'LITERALLY'; 3 1 = DECLARE DECL LIT 'DECLARE'; 4 1 = DECL TRUE LIT '0FFH', = FALSE LIT '00H', = BOOLEAN LIT 'BYTE', = FOREVER LIT 'WHILE 1'; = = = /* SPECIAL ASCII CHARACTERS */ = 5 1 = DECL = NULL LIT '00H', = CNTRL$C LIT '03H', = CNTRL$E LIT '05H', = BELL LIT '07H', = BS LIT '08H', = TAB LIT '09H', = LF LIT '0AH', = VT LIT '0BH', = FF LIT '0CH', = CR LIT '0DH', = CNTRL$P LIT '010H', = CNTRL$Q LIT '011H', = CNTRL$R LIT '012H', = CNTRL$S LIT '013H', = CNTRL$W LIT '017H', = CNTRL$X LIT '018H', = CNTRL$Z LIT '01AH', = ESC LIT '01BH', = SPACE LIT '020H', = EXCLM$PT LIT '021H', = QUOTE LIT '022H', = HASH LIT '023H', = PRCNT LIT '025H', = AMPRSAND LIT '026H', = DASH LIT '02DH', = LS$THAN LIT '03CH', = GR$THAN LIT '03EH', = QMARK LIT '03FH', = LFT$BRK LIT '05BH', = RT$BRK LIT '05DH', = UP$ARW LIT '05EH', = LCA LIT '061H', = LCZ LIT '07AH', = ALT$MOD LIT '07DH', = RUBOUT LIT '07FH'; = PL/M-80 COMPILER 7/3/79 PAGE 2 $INCLUDE (:F1:ISS.COM) 6 1 = OPEN: PROCEDURE (AFTPTR,FILE,ACCESS,MODE,STATUS) EXTERNAL; 7 2 = DECL (AFTPTR,FILE,ACCESS,MODE,STATUS) ADDRESS; 8 2 = END OPEN; = 9 1 = CLOSE: PROCEDURE (AFT,STATUS) EXTERNAL; 10 2 = DECL (AFT,STATUS) ADDRESS; 11 2 = END CLOSE; = 12 1 = DELETE: PROCEDURE (FILE,STATUS) EXTERNAL; 13 2 = DECL (FILE,STATUS) ADDRESS; 14 2 = END DELETE; = 15 1 = READ: PROCEDURE (AFT,BUFFER,COUNT,ACTUAL,STATUS) EXTERNAL; 16 2 = DECL (AFT,BUFFER,COUNT,ACTUAL,STATUS) ADDRESS; 17 2 = END READ; = 18 1 = WRITE: PROCEDURE (AFT,BUFFER,COUNT,STATUS) EXTERNAL; 19 2 = DECL (AFT,BUFFER,COUNT,STATUS) ADDRESS; 20 2 = END WRITE; = 21 1 = SEEK: PROCEDURE (AFT,BASE,BLOCKNUM,BYTENUM,STATUS) EXTERNAL; 22 2 = DECL (AFT,BASE,BLOCKNUM,BYTENUM,STATUS) ADDRESS; 23 2 = END SEEK; = 24 1 = LOAD: PROCEDURE (FILE,BIAS,RETSW,ENTRY,STATUS) EXTERNAL; 25 2 = DECL (FILE,BIAS,RETSW,ENTRY,STATUS) ADDRESS; 26 2 = END LOAD; = 27 1 = RENAME: PROCEDURE (OLDFILE,NEWFILE,STATUS) EXTERNAL; 28 2 = DECL (OLDFILE,NEWFILE,STATUS) ADDRESS; 29 2 = END RENAME; = 30 1 = CONSOL: PROCEDURE (INFILE,OUTFILE,STATUS) EXTERNAL; 31 2 = DECL (INFILE,OUTFILE,STATUS) ADDRESS; 32 2 = END CONSOL; = 33 1 = EXIT: PROCEDURE EXTERNAL; 34 2 = END EXIT; = 35 1 = ATTRIB: PROCEDURE (FILE,SWID,VALUE,STATUS) EXTERNAL; 36 2 = DECL (FILE,SWID,VALUE,STATUS) ADDRESS; 37 2 = END ATTRIB; = 38 1 = RESCAN: PROCEDURE (AFT,STATUS) EXTERNAL; 39 2 = DECL (AFT,STATUS) ADDRESS; 40 2 = END RESCAN; = 41 1 = ERROR: PROCEDURE (ERRNUM) EXTERNAL; 42 2 = DECL (ERRNUM) ADDRESS; 43 2 = END ERROR; = 44 1 = WHOCON: PROCEDURE (AFT,BUFFER) EXTERNAL; 45 2 = DECL (AFT,BUFFER) ADDRESS; 46 2 = END WHOCON; = = PL/M-80 COMPILER 7/3/79 PAGE 3 47 1 = DECL READ$AC LIT '01H', = WRITE$AC LIT '02H', = UPDATE$AC LIT '03H'; = 48 1 = DECL CI$AFT LIT '01H', = CO$AFT LIT '0H', = LN$EDT$CO LIT '0F0H'; = /* DEFINITIONS OF BLOCK TYPE CHARACTERS */ 49 1 DECL TYP$NAME LIT '021H'; 50 1 DECL TYP$DRECD LIT '023H'; 51 1 DECL TYP$END LIT '024H'; 52 1 DECL TYP$ABORT LIT '025H'; 53 1 DECL TYP$EXIT LIT '026H'; 54 1 DECL TYP$REV LIT '027H'; 55 1 DECL RECD$TYP LIT 'BUFFER(0)'; 56 1 DECL BLK$LNGTH LIT '0255'; 57 1 DECL SIO$STAT LIT '0F7H'; 58 1 DECL SIO$DATA LIT '0F6H'; 59 1 DECL SIO$RXRDY LIT '02H'; /* RESPONSE CODES */ 60 1 DECL ACK LIT '01H'; 61 1 DECL NACK LIT '02H'; 62 1 DECL ABO LIT '03H'; 63 1 DECL TM$OUT LIT '0FEH'; 64 1 DECL CS$ERR LIT '0FFH'; /* TABLE OF RECOGNIZED COMMANDS AND CORRESPONDING MODES */ 65 1 DECL COM$TABLE(*) BYTE DATA('SEND ',01H,'RECEIVE',02H, 'CLEAR ',03H,'EXIT ',00H, 'DIRECT ',04H,'BAUD ',05H, 'TERMIN ',06H,'QUIT ',07H, 'S ',01H,'R ',02H, 'C ',03H,'E ',00H, 'D ',04H,'B ',05H, 'T ',06H,'Q ',07H); 66 1 DECL MAX$COM LIT '16'; 67 1 DECL MAX$MODE LIT '8'; 68 1 DECL LEN$COMMAND$ENTRY LIT '8'; 69 1 CO: PROCEDURE (CHAR) EXTERNAL; 70 2 DECL CHAR BYTE; 71 2 END CO; PL/M-80 COMPILER 7/3/79 PAGE 4 72 1 BAUD: PROCEDURE (BPOINTER) BYTE EXTERNAL; 73 2 DECL BPOINTER ADDRESS; 74 2 END BAUD; 75 1 BLK$XMT: PROCEDURE (BUFFER$ADDR,LNGTH,TYPE) BYTE EXTERNAL; 76 2 DECL BUFFER$ADDR ADDRESS; 77 2 DECL LNGTH BYTE; 78 2 DECL TYPE BYTE; 79 2 END BLK$XMT; 80 1 BLOCK$INP: PROCEDURE(BUFFER$ADDRESS) BYTE EXTERNAL; 81 2 DECL BUFFER$ADDRESS ADDRESS; 82 2 END BLOCK$INP; 83 1 ENQ: PROCEDURE BYTE EXTERNAL; 84 2 END ENQ; 85 1 REC$DATA: PROCEDURE BYTE EXTERNAL; 86 2 END REC$DATA; 87 1 REC$RDY: PROCEDURE BYTE EXTERNAL; 88 2 END REC$RDY; 89 1 SCHAR: PROCEDURE (CHAR) EXTERNAL; 90 2 DECL CHAR BYTE; 91 2 END SCHAR; 92 1 DIRECT: PROCEDURE EXTERNAL; 93 2 END DIRECT; 94 1 DECL MSG1(*) BYTE DATA ('CAN NOT OPEN CONSOLE FOR INPUT'); 95 1 DECL MSG2(*) BYTE DATA ('CAN NOT READ FROM CONSOLE'); 96 1 DECL MSG3(*) BYTE DATA ('SYNTAX ERROR'); 97 1 DECL MSG4(*) BYTE DATA ('ERROR RESPONSE RECD ON ATTEMPT TO TERMINATE LINK'); 98 1 DECL MSG5(*) BYTE DATA ('NO RESPONSE ON ATTEMPT TO TERMINATE LINK'); 99 1 DECL MSG6(*) BYTE DATA ('NEGATIVE RESPONSE ON NAME RECRD'); 100 1 DECL MSG7(*) BYTE DATA ('NO RESPONSE ON NAME RECRD'); 101 1 DECL MSG8(*) BYTE DATA ('NEGATIVE RESPONSE ON DATA RECRD'); 102 1 DECL MSG9(*) BYTE DATA ('NO RESPONSE ON DATA RECRD'); PL/M-80 COMPILER 7/3/79 PAGE 5 103 1 DECL MSG10(*) BYTE DATA ('NEGATIVE RESPONSE ON EOF RECRD',CR,LF); 104 1 DECL MSG11(*) BYTE DATA ('NO RESPONSE ON EOF RECRD',CR,LF); 105 1 DECL MSG12(*) BYTE DATA ('NEG RESP ON ATTEMPT TO REVERSE LINE',CR,LF); 106 1 DECL MSG13(*) BYTE DATA ('NO RESP ON ATTEMPT TO REVERSE LINE',CR,LF); 107 1 DECL MSG14(*) BYTE DATA ('LINK ABORTED FROM PDP11',CR,LF); 108 1 DECL MSG15(*) BYTE DATA ('TIME$OUT IN RECV MODE',CR,LF); 109 1 DECL MSG16(*) BYTE DATA ('NON RECOVERABLE CHECK SUM ERROR',CR,LF); 110 1 DECL MSG17(*) BYTE DATA ('UNEXPECTED RECORD TYPE IN RECEIVE MODE',CR,LF); 111 1 DECL MSG18(*) BYTE DATA ('MDS FILENAME TOO LONG',CR,LF); 112 1 DECL MSG19(*) BYTE DATA ('NEG RESP ON ATTEMPT TO ABORT',CR,LF); 113 1 DECL MSG20(*) BYTE DATA ('TIME OUT ON ATTEMPT TO ABORT',CR,LF); 114 1 DECL MSG21(*) BYTE DATA ('PDP FILENAME TOO LONG',CR,LF); 115 1 DECL MSG22(*) BYTE DATA ('UNRECOGNIZABLE RESP',CR,LF); 116 1 DECL MSG23(*) BYTE DATA ('LINK TERMINATED',CR,LF); 117 1 DECL MSG24(*) BYTE DATA ('ABORT ACCEPTED BY PDP11',CR,LF); 118 1 DECL MSG25(*) BYTE DATA ('NOT A STANDARD BAUD RATE',CR,LF); 119 1 DECL MSG26(*) BYTE DATA ('LINK NOT ON LINE',CR,LF); 120 1 DECL ACTL ADDRESS; 121 1 DECL ACTUAL ADDRESS; 122 1 DECL AFT ADDRESS; 123 1 DECL AFT$IN ADDRESS; 124 1 DECL BUFFER(256) BYTE; 125 1 DECL COM$STAT BYTE; 126 1 DECL CONSL$INP(*) BYTE DATA (':CI:'); 127 1 DECL DUMMY BYTE; 128 1 DECL INDX BYTE; 129 1 DECL KEY$BUFFER (122) BYTE; 130 1 DECL LNG$MDS BYTE; 131 1 DECL LNG$PDP BYTE; 132 1 DECL MDS$FILENAME(18) BYTE; 133 1 DECL MODE BYTE; 134 1 DECL PDP$FILENAME(35) BYTE; 135 1 DECL PRMTMSG(*) BYTE DATA (CR,LF,'@'); 136 1 DECL RECD$LNGTH BYTE; 137 1 DECL SGN$ON(*) BYTE DATA('BLXMT V 1.0',0DH,0AH); 138 1 DECL STATUS ADDRESS; /* INDEX VARIABLES FOR COMMAND SEARCH ROUTINES */ 139 1 DECL I BYTE; /* ENTRY IN SYMBOL TABLE BEING SCANNED FOR MATCH */ 140 1 DECL J BYTE; /* CURRENT LETTER OF ENTRY BEING CHECKED */ 141 1 DECL K BYTE; /* INDEX FOR COPY ROUTINES */ 142 1 COPY$MDSNAME: PROCEDURE; 143 2 K = 0; 144 2 DO WHILE ((KEYBUFFER(J) <> SPACE) PL/M-80 COMPILER 7/3/79 PAGE 6 AND (KEYBUFFER(J) <> CR) AND (K < LENGTH(MDS$FILENAME))); 145 3 MDS$FILENAME(K) = KEY$BUFFER(J); 146 3 J = J + 1; 147 3 K = K + 1; 148 3 END; 149 2 LNG$MDS = K; 150 2 MDS$FILENAME(K) = SPACE; 151 2 IF K > 14 THEN 152 2 DO; 153 3 MODE = MAX$MODE+1; 154 3 CALL WRITE(CO$AFT,.MSG18,LENGTH(MSG18),.STATUS); 155 3 END; 156 2 END COPY$MDSNAME; 157 1 COPY$PDPNAME: PROCEDURE; 158 2 K = 0; 159 2 DO WHILE ((KEYBUFFER(J) <> SPACE) AND (KEYBUFFER(J) <> CR) AND(K < LENGTH(PDP$FILENAME))); 160 3 PDP$FILENAME(K) = KEY$BUFFER(J); 161 3 J = J + 1; 162 3 K = K + 1; 163 3 END; 164 2 LNG$PDP = K; 165 2 PDP$FILENAME(K) = SPACE; 166 2 IF K > LENGTH(PDP$FILENAME) THEN 167 2 DO; 168 3 MODE = MAX$MODE+1; 169 3 CALL WRITE(CO$AFT,.MSG21,LENGTH(MSG21),.STATUS); 170 3 END; 171 2 END COPY$PDPNAME; 172 1 DEBLANK: PROCEDURE; 173 2 DO WHILE KEYBUFFER(J) <> SPACE; 174 3 J = J + 1; 175 3 END; 176 2 DO WHILE KEYBUFFER(J) = SPACE; 177 3 J = J + 1; 178 3 END; 179 2 END DEBLANK; 180 1 COMDEC: PROCEDURE; 181 2 I,J,K = 0; 182 2 MODE = MAX$MODE+2; PL/M-80 COMPILER 7/3/79 PAGE 7 183 2 DO WHILE MODE = MAX$MODE+2; 184 3 DO WHILE ((J < 3) AND (MODE = MAX$MODE+2)); 185 4 IF KEYBUFFER(J) = COM$TABLE(I + J) THEN 186 4 DO; 187 5 J = J + 1; 188 5 IF ((J = 3) OR (KEYBUFFER(J) = SPACE) OR (KEYBUFFER(J) = CR)) THEN MODE = COM$TABLE(I + 7); 190 5 END; ELSE 191 4 DO; 192 5 J = 0; 193 5 I = I + LEN$COMMAND$ENTRY; 194 5 IF (I = (MAX$COM * LEN$COMMAND$ENTRY)) THEN MODE = MAX$MODE; 196 5 END; 197 4 END; 198 3 END; 199 2 LNG$MDS,LNG$PDP = 0; 200 2 IF ((MODE <> 2) AND (MODE <> 1)) THEN RETURN; 202 2 IF MODE = 1 THEN 203 2 DO; 204 3 CALL DEBLANK; 205 3 CALL COPY$MDSNAME; 206 3 IF MODE = MAX$MODE+1 THEN RETURN; 208 3 CALL DEBLANK; 209 3 CALL COPY$PDPNAME; 210 3 END; ELSE 211 2 DO; 212 3 CALL DEBLANK; 213 3 CALL COPY$PDPNAME; 214 3 IF MODE = MAX$MODE+1 THEN RETURN; 216 3 CALL DEBLANK; 217 3 CALL COPY$MDSNAME; 218 3 END; 219 2 END COMDEC; 220 1 SEND$ROUTINE: PROCEDURE; 221 2 CALL OPEN(.AFT,.MDS$FILENAME,READ$AC,0,.STATUS); 222 2 IF STATUS > 0 THEN 223 2 DO; 224 3 CALL ERROR(STATUS); 225 3 RETURN; 226 3 END; 227 2 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 229 2 IF ENQ = TRUE THEN 230 2 DO; 231 3 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 233 3 COM$STAT = BLK$XMT(.PDP$FILENAME,LNG$PDP,TYP$NAME); 234 3 IF ((COM$STAT = NACK) OR (COM$STAT = ABO)) THEN 235 3 DO; 236 4 CALL WRITE(CO$AFT,.MSG6,LENGTH(MSG6),.STATUS); 237 4 GOTO ERRTN; 238 4 END; PL/M-80 COMPILER 7/3/79 PAGE 8 239 3 IF (COM$STAT = TM$OUT) THEN 240 3 DO; 241 4 CALL WRITE(CO$AFT,.MSG7,LENGTH(MSG7),.STATUS); 242 4 GOTO ERRTN; 243 4 END; 244 3 IF COM$STAT <> ACK THEN 245 3 DO; 246 4 CALL WRITE(CO$AFT,.MSG22,LENGTH(MSG22),.STATUS); 247 4 GOTO ERRTN; 248 4 END; 249 3 END; ELSE 250 2 DO; 251 3 CALL WRITE(CO$AFT,.MSG26,LENGTH(MSG26),.STATUS); 252 3 GOTO ERRTN; 253 3 END; 254 2 ACTUAL = 1; 255 2 DO WHILE ACTUAL > 0; 256 3 CALL READ (AFT,.BUFFER,BLK$LNGTH-3,.ACTUAL,.STATUS); 257 3 IF STATUS > 0 THEN 258 3 DO; 259 4 CALL ERROR(STATUS); 260 4 ACTUAL = 0; 261 4 END; 262 3 IF ACTUAL > 0 THEN 263 3 DO; 264 4 COM$STAT = BLK$XMT(.BUFFER,ACTUAL,TYP$DRECD); 265 4 IF ((COM$STAT = NACK) OR (COM$STAT = ABO)) THEN 266 4 DO; 267 5 CALL WRITE(CO$AFT,.MSG8,LENGTH(MSG8),.STATUS); 268 5 GOTO ERRTN; 269 5 END; 270 4 IF COM$STAT = TM$OUT THEN 271 4 DO; 272 5 CALL WRITE(CO$AFT,.MSG9,LENGTH(MSG9),.STATUS); 273 5 GOTO ERRTN; 274 5 END; 275 4 IF COM$STAT <> ACK THEN 276 4 DO; 277 5 CALL WRITE(CO$AFT,.MSG22,LENGTH(MSG22),.STATUS); 278 5 GOTO ERRTN; 279 5 END; 280 4 END; 281 3 END; 282 2 COM$STAT = BLK$XMT(.BUFFER,1,TYP$END); 283 2 IF ((COM$STAT = NACK) OR (COM$STAT = ABO)) THEN CALL WRITE(CO$AFT,.MSG10,LENGTH(MSG10),.STATUS); 285 2 IF (COM$STAT = TM$OUT) THEN 286 2 CALL WRITE(CO$AFT,.MSG11,LENGTH(MSG11),.STATUS); 287 2 IF (COM$STAT <> ACK) THEN 288 2 CALL WRITE(CO$AFT,.MSG22,LENGTH(MSG22),.STATUS); 289 2 ERRTN: CALL CLOSE(AFT,.STATUS); 290 2 IF STATUS > 0 THEN CALL ERROR(STATUS); 292 2 END SEND$ROUTINE; PL/M-80 COMPILER 7/3/79 PAGE 9 293 1 GET$ROUTINE: PROCEDURE; 294 2 CALL OPEN(.AFT,.MDS$FILENAME,WRITE$AC,0,.STATUS); 295 2 IF STATUS > 0 THEN 296 2 DO; 297 3 CALL ERROR(STATUS); 298 3 RETURN; 299 3 END; 300 2 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 302 2 IF ENQ = TRUE THEN 303 2 DO; 304 3 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 306 3 COM$STAT = BLK$XMT(.PDP$FILENAME,LNG$PDP,TYP$REV); 307 3 IF ((COM$STAT = NACK) OR (COM$STAT = ABO)) THEN 308 3 DO; 309 4 CALL WRITE(CO$AFT,.MSG6,LENGTH(MSG6),.STATUS); 310 4 GOTO ERRTN; 311 4 END; 312 3 IF (COM$STAT = TM$OUT) THEN 313 3 DO; 314 4 CALL WRITE(CO$AFT,.MSG7,LENGTH(MSG7),.STATUS); 315 4 GOTO ERRTN; 316 4 END; 317 3 IF COM$STAT <> ACK THEN 318 3 DO; 319 4 CALL WRITE(CO$AFT,.MSG22,LENGTH(MSG22),.STATUS); 320 4 GOTO ERRTN; 321 4 END; 322 3 END; ELSE 323 2 DO; 324 3 CALL WRITE(CO$AFT,.MSG26,LENGTH(MSG26),.STATUS); 325 3 GOTO ERRTN; 326 3 END; 327 2 CALL TIME(200); 328 2 RECD$TYP = TYP$DRECD; 329 2 DO WHILE RECD$TYP = TYP$DRECD; 330 3 RECD$LNGTH = BLOCK$INP(.BUFFER); 331 3 IF ((RECD$LNGTH > 0) AND (RECD$TYP = TYP$DRECD)) THEN 332 3 DO; 333 4 CALL WRITE (AFT,.BUFFER(1),RECD$LNGTH,.STATUS); 334 4 IF STATUS > 0 THEN 335 4 DO; 336 5 CALL ERROR(STATUS); 337 5 CALL CLOSE(AFT,.STATUS); 338 5 IF STATUS > 0 THEN CALL ERROR(STATUS); 340 5 RETURN; 341 5 END; 342 4 END; ELSE 343 3 DO; 344 4 RECD$LNGTH = RECD$LNGTH; 345 4 END; 346 3 END; 347 2 IF (RECD$TYP = TYP$END) THEN 348 2 DO; PL/M-80 COMPILER 7/3/79 PAGE 10 349 3 CALL CLOSE(AFT,.STATUS); 350 3 IF STATUS > 0 THEN CALL ERROR(STATUS); 352 3 RETURN; 353 3 END; 354 2 IF RECD$TYP = TYP$ABORT THEN 355 2 DO; 356 3 CALL WRITE(CO$AFT,.MSG14,LENGTH(MSG14),.STATUS); 357 3 CALL CLOSE(AFT,.STATUS); 358 3 IF STATUS > 0 THEN CALL ERROR(STATUS); 360 3 RETURN; 361 3 END; 362 2 IF RECD$TYP = TM$OUT THEN 363 2 DO; 364 3 CALL WRITE(CO$AFT,.MSG15,LENGTH(MSG15),.STATUS); 365 3 CALL CLOSE(AFT,.STATUS); 366 3 IF STATUS > 0 THEN CALL ERROR(STATUS); 368 3 RETURN; 369 3 END; 370 2 IF RECD$TYP = CS$ERR THEN 371 2 DO; 372 3 CALL WRITE(CO$AFT,.MSG16,LENGTH(MSG16),.STATUS); 373 3 CALL CLOSE(AFT,.STATUS); 374 3 IF STATUS > 0 THEN CALL ERROR(STATUS); 376 3 END; 377 2 CALL WRITE(CO$AFT,.MSG17,LENGTH(MSG17),.STATUS); 378 2 ERRTN: CALL CLOSE(AFT,.STATUS); 379 2 IF STATUS > 0 THEN CALL ERROR(STATUS); 381 2 RETURN; 382 2 END GET$ROUTINE; 383 1 TERMINATE: PROCEDURE; 384 2 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 386 2 IF ENQ = TRUE THEN 387 2 DO; 388 3 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 390 3 COM$STAT = BLK$XMT (.BUFFER,1,TYP$EXIT); 391 3 IF COM$STAT = ACK THEN RETURN; 393 3 IF COM$STAT = ABO THEN 394 3 CALL WRITE(CO$AFT,.MSG23,LENGTH(MSG23),.STATUS); 395 3 IF COM$STAT = NACK THEN 396 3 CALL WRITE(CO$AFT,.MSG4,LENGTH(MSG4),.STATUS); 397 3 IF (COM$STAT = TM$OUT) THEN 398 3 CALL WRITE(CO$AFT,.MSG5,LENGTH(MSG5),.STATUS); 399 3 IF (COM$STAT <> TM$OUT AND COM$STAT <> NACK AND COM$STAT <> ABO) THEN 400 3 CALL WRITE(CO$AFT,.MSG22,LENGTH(MSG22),.STATUS); 401 3 RETURN; 402 3 END; ELSE 403 2 DO; 404 3 CALL WRITE(CO$AFT,.MSG26,LENGTH(MSG26),.STATUS); 405 3 RETURN; 406 3 END; 407 2 END TERMINATE; PL/M-80 COMPILER 7/3/79 PAGE 11 408 1 SETUP$CLI: CALL WRITE(CO$AFT,.SGN$ON,LENGTH(SGN$ON),.STATUS); 409 1 CALL OPEN (.AFT$IN,.CONSL$INP,READAC,LN$EDT$CO,.STATUS); 410 1 IF STATUS > 0 THEN 411 1 DO; 412 2 CALL WRITE(CO$AFT,.MSG1,LENGTH(MSG1),.STATUS); 413 2 CALL EXIT; 414 2 END; 415 1 CALL READ(AFT$IN,.KEY$BUFFER,122,.ACTL,.STATUS); 416 1 IF STATUS > 0 THEN 417 1 DO; 418 2 CALL WRITE(CO$AFT,.MSG2,LENGTH(MSG2),.STATUS); 419 2 CALL EXIT; 420 2 END; 421 1 COMMAND$LEVEL: DO FOREVER; 422 2 CALL WRITE(CO$AFT,.PRMTMSG,LENGTH(PRMTMSG),.STATUS); 423 2 CALL READ(AFT$IN,.KEY$BUFFER,122,.ACTL,.STATUS); 424 2 CALL COMDEC; 425 2 DO CASE MODE; 426 3 DO; 427 4 CALL TERMINATE; 428 4 CALL EXIT; 429 4 END; 430 3 CALL SEND$ROUTINE; 431 3 CALL GET$ROUTINE; 432 3 DO; 433 4 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 435 4 IF ENQ = TRUE THEN 436 4 DO; 437 5 IF REC$RDY > 0 THEN DUMMY = REC$DATA; 439 5 COM$STAT = BLK$XMT (.BUFFER,1,TYP$ABORT); 440 5 IF COM$STAT = ABO THEN 441 5 CALL WRITE(CO$AFT,.MSG24,LENGTH(MSG24),.STATUS); 442 5 IF COM$STAT = NACK THEN 443 5 CALL WRITE(CO$AFT,.MSG19,LENGTH(MSG19),.STATUS); 444 5 IF (COM$STAT = TM$OUT) THEN 445 5 CALL WRITE(CO$AFT,.MSG20,LENGTH(MSG20),.STATUS); 446 5 IF (COM$STAT <> ACK OR COM$STAT <> ABO OR COM$STAT <> NACK OR COM$STAT <> TM$OUT) THEN 447 5 CALL WRITE(CO$AFT,.MSG22,LENGTH(MSG22),.STATUS); 448 5 END; ELSE 449 4 DO; 450 5 CALL WRITE(CO$AFT,.MSG26,LENGTH(MSG26),.STATUS); 451 5 END; 452 4 END; 453 3 CALL DIRECT; PL/M-80 COMPILER 7/3/79 PAGE 12 454 3 DO; 455 4 CALL DEBLANK; 456 4 MODE = BAUD(.KEYBUFFER(J)); 457 4 IF MODE > 0 THEN 458 4 CALL WRITE(CO$AFT,.MSG25,LENGTH(MSG25),.STATUS); 459 4 END; 460 3 CALL TERMINATE; 461 3 CALL EXIT; 462 3 CALL WRITE(CO$AFT,.MSG3,LENGTH(MSG3),.STATUS); 463 3 MODE = MODE; 464 3 END; 465 2 END; 466 1 END; EOF MODULE INFORMATION: CODE AREA SIZE = 0D01H 3329D VARIABLE AREA SIZE = 01C3H 451D MAXIMUM STACK SIZE = 000AH 10D 638 LINES READ 0 PROGRAM ERROR(S) END OF PL/M-80 COMPILATION