IO
IDENT IO IO 1
TITLE INTERFACE TO SCOPE IO 2
* FOR A LISTING OF THE SNODEF COMDECK, CALLED BELOW, SEE MAINLUP. IO 3
LIST -L IO 4
*CALL,SNODEF IO 5
LIST L IO 6
TITLE I/O ROUTINES COMMON TO RUN-TIME AND COMPILER IO 7
* LOWCORE IO 8
EXT LSCOUNT IO 9
* ERROR IO 10
EXT ERR18,ERR55 IO 11
* MAINLUP IO 12
EXT FAIL IO 13
* STORMAN IO 14
EXT MORFREE IO 15
* UTILITY IO 16
EXT ZROX7 IO 17
EXT ICX1X6 IO 18
* IO IO 19
ENTRY CALLCIO,CALLRCL,PEEKWD,GETWD,SKIPWDS,PUTWD,CHKOUTB IO 20
ENTRY INPUT,OUTPUT,CLOSE1,CLOSALL IO 21
ENTRY OPEN IO 22
ENTRY GETB,PB IO 23
ENTRY ABT,BLANKS,CBI,CBO,CZB IO 24
ENTRY ABT. IO 25
ENTRY LSCMOUT IO 26
* IO 27
TITLE I/O SUBROUTINES IO 28
* IO 29
* IO 30
* CALLCIO DOES JUST THAT. IO 31
* IO 32
* PARAMETERS: B2 = ADDRESS OF WORD 0 OF FILE BLOCK IO 33
* X0 = -0 OR -1 AS NO RECALL OR RECALL IS DESIRED. IO 34
* X7 = 18 BIT CODE TO PUT IN THE FET BEFORE CALLING CIO.IO 35
* IO 36
* USES: A2-X2, X3, A7-X7 IO 37
* IO 38
CALLCIO BSSZ 1 . ENTRY/EXIT IO 39
SA2 B2+FI.FET+FET.LFN IO 40
MX3 60-18 . REPLACE OLD IO 41
BX2 X3*X2 . FUNCTION CODE IO 42
BX7 X2+X7 . WITH NEW IO 43
SA7 A2 IO 44
SX7 3RCIO IO 45
LX7 2 IO 46
BX7 -X0+X7 . ADD RECALL BIT IO 47
SX3 A7 . SET X3 = ADDRESS OF FET IO 48
LX7 40 IO 49
NO IO 50
BX7 X7+X3 IO 51
SA7 1 . ISSUE RA+1 REQUEST IO 52
CALLCIOW SA2 1 IO 53
NZ X2,CALLCIOW . WAIT FOR IT TO TAKE IO 54
JP CALLCIO . RETURN IO 55
* IO 56
* IO 57
* SIMILARLY CALLRCL. IO 58
* IO 59
* PARAMETERS: X0 = -0 => PERIODIC RECALL; B2 = ANYTHING IO 60
* X0 = -1 => AUTO RECALL; B2 = FILE BLOCK WD 0 PTR IO 61
* IO 62
* USES: X2, A7-X7 IO 63
* IO 64
CALLRCLW SA2 1 IO 65
NZ X2,CALLRCLW IO 66
CALLRCL BSSZ 1 . ENTRY/EXIT IO 67
SX7 3RRCL IO 68
LX7 2 IO 69
BX7 -X0+X7 . ADD RECALL BIT TO REQUEST WORD IO 70
LX7 40 IO 71
ZR X0,CALLRCLP . PERIODIC RECALL, (B2)ARE IRRELEVANTIO 72
SX2 B2+FI.FET IO 73
BX7 X7+X2 IO 74
CALLRCLP SA7 1 . ISSUE RA+1 REQUEST IO 75
JP CALLRCLW IO 76
* IO 77
* IO 78
* PEEKWD RETURNS IN X1 THE NEXT WORD OF A GIVEN FILE, OR IO 79
* ELSE FRETURNS IF THE FILE IS POSITIONED AT AN END-OF-RECORD. IO 80
* IO 81
* CALLING SEQUENCE: B2 <- STREAM (FILE BLOCK PTR) IO 82
* + RJ PEEKWD IO 83
* - VFD 30/FRET IO 84
* IO 85
* RETURNS (X1) = NEXT WORD, (X2) = BUFFER ADDRESS OF WORD. IO 86
* ALSO, (X1) = 0 ON FRETURN (END OF RECORD) IO 87
* IO 88
* USES X0,A1-X1,A2-X2,A3-X3,A7-X7, AND B2 (ONLY ON FRETURN). IO 89
* IO 90
PEEKWD1 SA1 X2+0 . FETCH BUFFER WORD IO 91
* IO 92
PEEKWD BSSZ 1 . ENTRY/EXIT IO 93
PEEKWD2 SA1 B2+FI.FET+FET.IN IO 94
SA2 B2+FI.FET+FET.OUT IO 95
IX1 X1-X2 IO 96
NZ X1,PEEKWD1 . BUFFER IS NOT EMPTY IO 97
SA3 B2+FI.FET+FET.LFN IO 98
LX3 FS.BUSY . LEFT JUSTIFY THE -BUSY- STATUS BIT IO 99
PL X3,PEEKWD3 . WAIT FOR COMPLETION IO 100
SA1 A1 IO 101
IX1 X1-X2 IO 102
NZ X1,PEEKWD1 . A PRU WAS JUST INPUT IO 103
LX3 60-FS.BUSY+FS.EOR . LEFT JUSTIFY THE -EOR- STATUS BIT IO 104
NG X3,PEEKWD4 . FRETURN IO 105
CIO CIO.READ,RECALL IO 106
JP PEEKWD2 IO 107
* IO 108
PEEKWD3 RCL AUTO IO 109
JP PEEKWD2 IO 110
* IO 111
PEEKWD4 SA2 PEEKWD IO 112
LX2 30 IO 113
BX1 X1-X1 . RETURN X1 = 0 IO 114
SA2 X2-1 . FETCH CALLING INSTRUCTION WORD IO 115
SB2 X2+0 . FRETURN ADDRESS IO 116
JP B2 IO 117
* IO 118
* IO 119
* GETWD IS JUST LIKE PEEKWD , EXCEPT IT 'REMOVES' THE WORD WHICH IO 120
* IT RETURNS BY ADVANCING THE BUFFER 'OUT' POINTER. IO 121
* IO 122
* RETURNS: (X1) = THE WORD IO 123
* IO 124
* USES: X0,A1-X1,A2-X2,A3-X3,A7-X7, AND B2 (ONLY ON FRETURN) IO 125
* IO 126
GETWD BSSZ 1 . ENTRY/EXIT IO 127
+ RJ PEEKWD . RETURNS WORD IN X1, OUT PTR IN X2 IO 128
- VFD 30/GETWD2 . PROPAGATE THE FRETURN IO 129
SA3 B2+FI.FET+FET.LIM IO 130
SX7 X2+1 IO 131
SX3 X3 IO 132
BX3 X3-X7 IO 133
NZ X3,GETWD1 IO 134
SA3 B2+FI.FET+FET.FRST . POINTER HAS WRAPPED AROUND IO 135
SX7 X3+0 . THE CIRCULAR BUFFER IO 136
GETWD1 SA7 B2+FI.FET+FET.OUT . UPDATE THE OUT POINTER IO 137
JP GETWD . RETURN IO 138
* IO 139
GETWD2 SA2 GETWD IO 140
LX2 30 IO 141
SA2 X2-1 IO 142
SB2 X2+0 IO 143
JP B2 . FRETURN IO 144
* IO 145
* IO 146
* SKIPWDS MOVES A CODED FILE TO THE END OF THE CURRENT UNIT IO 147
* RECORD OR LOGICAL RECORD, WHICHEVER OCCURS FIRST. IO 148
* IO 149
* PARAMETERS: B2 = FILE BLOCK POINTER IO 150
* X1 = LAST WORD REMOVED FROM BUFFER IF LOWER 12 BITS IO 151
* ARE ZERO, SKIPWDS DOES NOT MOVE THE FILE. IO 152
* IO 153
SKIPWDSL RJ GETWD . (SAVES X5) IO 154
- VFD 30/SKIPWDS . END OF LOGICAL RECORD IO 155
SKIPWDST BX2 -X5*X1 IO 156
NZ X2,SKIPWDSL . NOT TO END OF UNIT RECORD IO 157
SKIPWDS BSSZ 1 . ENTRY/EXIT IO 158
MX5 60-12 IO 159
JP SKIPWDST IO 160
* IO 161
* IO 162
* PUTWD PLACES THE WORD IN X6 INTO THE FILE POINTED TO BY B2, IO 163
* ISSUING A WRITE IF NECESSARY TO MAKE ROOM IN THE BUFFER. IO 164
* IO 165
* PARAMETERS: B2 = FILE PTR, X6 = WORD TO OUTPUT IO 166
* IO 167
* USES: X0,A1-X1,A2-X2,A3-X3,A6,A7-X7 IO 168
* IO 169
PUTWDST NO IO 170
SX7 X3 . UPDATED IN POINTER IO 171
SA6 X1 . STORE WORD INTO BUFFER IO 172
SA7 A1 IO 173
PUTWD BSSZ 1 . ENTRY/EXIT IO 174
PUTWD1 SA1 B2+FI.FET+FET.IN IO 175
SA2 B2+FI.FET+FET.LIM IO 176
SX3 X1+1 IO 177
SX2 X2 IO 178
BX2 X3-X2 IO 179
NZ X2,PUTWDNW IO 180
SA3 B2+FI.FET+FET.FRST . IN POINTER WRAPPED AROUND IO 181
PUTWDNW SA2 B2+FI.FET+FET.OUT IO 182
BX2 X2-X3 IO 183
SX2 X2 IO 184
NZ X2,PUTWDST . IN .NE. OUT, STORE WORD IN BUFFER IO 185
SA2 B2+FI.FET+FET.LFN . FETCH WORD WITH CODE AND STATUS IO 186
LX2 FS.BUSY . LEFT JUSTIFY THE -BUSY- STATUS BIT IO 187
PL X2,PUTWDBSY . WAIT FOR COMPLETION IO 188
CIO CIO.WRIT,RECALL IO 189
JP PUTWD1 . TRY AGAIN IO 190
* IO 191
PUTWDBSY RCL AUTO IO 192
JP PUTWD1 . TRY AGAIN IO 193
* IO 194
* IO 195
* CHKOUTB ISSUES A LOOK-AHEAD WRITE ON A FILE IF THE BUFFER IS OVER IO 196
* HALF FULL AND THE FILE IS NOT BUSY. IO 197
* IO 198
* PARAMETER: B2 = WORD 0 OF FILE BLOCK IO 199
* IO 200
* USES: X0, A1-X1, A2-X2, A3-X3, A7-X7 IO 201
* IO 202
CHKOUTB BSSZ 1 . ENTRY/EXIT IO 203
SA1 B2+FI.FET+FET.IN IO 204
SA2 B2+FI.FET+FET.OUT IO 205
IX1 X1-X2 . IN-OUT (=INUSE IF \ 0) IO 206
SA2 B2+FI.FET+FET.FRST IO 207
SA3 B2+FI.FET+FET.LIM IO 208
IX2 X3-X2 . LIMIT - FIRST = BUFFER LENGTH IO 209
SX2 X2 IO 210
AX2 1 . (BUFFER LENGTH) / 2 IO 211
NG X1,CHKOUTB1 IO 212
BX2 -X2 . - (BUFFER LENGTH) / 2 IO 213
CHKOUTB1 IX1 X1+X2 . COMPUTE (REMAINING SPACE) IO 214
* - (LENGTH / 2) = (LENGTH / 2) IO 215
* - (IN-USE SPACE) IO 216
NG X1,CHKOUTB . AT LEAST LENGTH/2 REMAINS, SO EXIT IO 217
SA1 B2+FI.FET+FET.LFN IO 218
LX1 FS.BUSY IO 219
PL X1,CHKOUTB . FILE BUSY, EXIT IO 220
CIO CIO.WRIT . WRITE WITHOUT RECALL IO 221
JP CHKOUTB . EXIT IO 222
* IO 223
* MACROS FOR OLD-STYLE I/O ROUTINES. IO 224
RECALL MACRO AUTO IO 225
IFC EQ,/AUTO// IO 226
SX0 B0 IO 227
ELSE IO 228
SX0 1 IO 229
ENDIF IO 230
RJ RCL IO 231
ENDM IO 232
* IO 233
READ MACRO AUTO IO 234
IFC EQ,/AUTO// IO 235
SX0 B0 IO 236
ELSE IO 237
SX0 1 IO 238
ENDIF IO 239
SX7 CIO.READ IO 240
RJ CIO IO 241
ENDM IO 242
* IO 243
WRITE MACRO AUTO IO 244
IFC EQ,/AUTO// IO 245
SX0 B0 IO 246
ELSE IO 247
SX0 1 IO 248
ENDIF IO 249
SX7 CIO.WRIT IO 250
RJ CIO IO 251
ENDM IO 252
* IO 253
* CIO USES X2,X3,X7, X0 CONTAINS ON INPUT THE RECAL FLAG (0 OR 1) AND ISIO 254
* NOT CHANGED. IO 255
* IO 256
CIOWAIT SA2 1 IO 257
NZ X2,* IO 258
CIO DATA 0 IO 259
SA2 B2 FET FWA IO 260
MX3 42 IO 261
BX2 X2*X3 CLEAR OUT CODE AND STATUS IO 262
BX7 X2+X7 ADD FUNCTION CODE IO 263
SA7 B2 IO 264
SX7 3RCIO IO 265
LX7 2 IO 266
BX7 X0+X7 ADD RECALL BIT IO 267
SX3 B2 FET ADDRESS IO 268
LX7 40 IO 269
BX7 X3+X7 IO 270
SA7 1 IO 271
EQ CIOWAIT IO 272
RCLWAIT SA2 1 IO 273
NZ X2,* IO 274
RCL IO 275
SX7 3RRCL IO 276
LX7 2 IO 277
BX7 X0+X7 IO 278
LX7 40 IO 279
ZR X0,RCL1 . B2 CONTAINS GARBAGE IO 280
SX2 B2+0 IO 281
BX7 X2+X7 IO 282
RCL1 SA7 1 IO 283
EQ RCLWAIT IO 284
IO 285
* GETB RETURNS THE NEXT WORD IN THE FILE POINTED TO BY B2. GETB IO 286
* DECREMENTS B3 BY THE NUMBER OF CHARACTERS IT RETURNS EACH TIME IT IS IO 287
* CALLED. WHEN B3 REACHES ZERO, GETB RETURNS ZERO CHARACTERS AND IO 288
* INCREMENTS B5 BY 2. IO 289
* IO 290
* WHEN GETB REACHES A ZERO BYTE OR EOR, IT RETURNS BLANK CHARACTERS, IO 291
* INCREMENTS B5 BY 1, AND CONTINUES TO CHECK B3. THUS TO READ A LINE, IO 292
* SET B3 = UNIT RECORD LENGTH, B5 = 0, AND CALL GETB UNTIL B5 = 2 OR 3. IO 293
* IO 294
* IN X2 IS RETURNED THE FILE WORD WITH BLANK AND/OR ZERO FILL. IN X3 ISIO 295
* RETURNED THE WORD EXACTLY AS IT APPEARED IN THE FILE (BUT IT IS NOT IO 296
* RETURNED IF GETB IS CALLED WITH B5 .NE. 0). IO 297
* IO 298
* REGISTERS SAVED: B1, B2, B6, B7, A0, A4-X4, A5-X5, AND A6-X6. IO 299
IO 300
GETB DATA 0 IO 301
ZR B5,GETB02 EQL/EQUR FLAG NOT SET IO 302
SB4 B5-2 IO 303
SX2 0 IO 304
PL B4,GETB . URL EXCEEDED, ZERO FILL IO 305
GETB01 SA2 BLANKS IO 306
EQ GETB05 IO 307
IO 308
GETB08 RECALL B2 . WAIT FOR COMPLETION OF LAST OP IO 309
GETB02 SA1 B2+2 IN IO 310
SA3 B2+3 OUT IO 311
IX1 X1-X3 IO 312
ZR X1,GETB07 IO 313
SA2 X3 PICK UP BUFFER WORDS IO 314
MX0 48 IO 315
BX1 -X0*X2 . EXTRACT LAST BYTE IO 316
MX0 60-6 . =HOLE 6 IO 317
BX7 -X0*X2 . EXTRACT LAST CHARACTER IO 318
ZR X1,GETB10 . PROCESS A ZERO BYTE IO 319
ZR X7,GETB13 . BLANK A ZERO CHARACTER IO 320
GETB03 SX7 X3+1 . INCREMENT THE OUT POINTER IO 321
SA1 B2+4 LIMIT IO 322
SX1 X1 IO 323
IX1 X1-X7 IO 324
ZR X1,GETB09 OUT=LIMIT IO 325
GETB04 SA7 A3+0 STORE NEW OUT IO 326
BX3 X2 FOR COMPILER LISTING ROUTINE IO 327
GETB05 SB3 B3-10 DECREMENT UNIT RECORD LENGTH IO 328
LT B0,B3,GETB RETURN IO 329
SB5 B5+2 IO 330
SB3 -B3 IO 331
MX0 54 IO 332
GETB06 ZR B3,GETB IO 333
BX2 X0*X2 IO 334
LX0 6 IO 335
SB3 B3-1 IO 336
EQ GETB06 IO 337
GETB07 SA1 B2 FET FWA IO 338
LX1 59 IO 339
PL X1,GETB08 . FILE IS BUSY IO 340
LX1 60-4 . =RCY 4 (LEFT-JUSTIFY THE EOR BIT) IO 341
NG X1,GETB12 IO 342
READ RECALL IO 343
EQ GETB02 IO 344
GETB09 SA1 B2+1 FIRST IO 345
SX7 X1+0 IO 346
EQ GETB04 IO 347
GETB10 SB5 B5+1 SET EOL FLAG IO 348
SX7 1R IO 349
GETB11 BX1 -X0*X2 IO 350
NZ X1,GETB03 FOUND A NON ZERO CHARACTER IO 351
BX2 X2+X7 IO 352
LX0 6 IO 353
LX7 6 IO 354
EQ GETB11 IO 355
GETB12 SB5 B5+1 IO 356
EQ GETB01 IO 357
GETB13 SX7 1R . SET UP AND IO 358
JP GETB11 . JUMP INTO BLANK FILL LOOP IO 359
IO 360
* CZB MOVES THE (INPUT) FILE WHOSE FET ADDRESS IS CONTAINED IN B2 TO THEIO 361
* NEXT ZERO BYTE OR EOR, WHICHEVER COMES FIRST. HOWEVER, IF THE LINE IO 362
* STATUS IN B5 IS 1 OR 3, INDICATING A ZERO BYTE HAS ALREADY BEEN FOUND,IO 363
* CZB DOES NOTHING AND IMMEDIATELY EXITS. IO 364
IO 365
* REGISTERS SAVED: B1, B2, B6, B7, A0, A5-X5, AND A6-X6. IO 366
IO 367
CZB DATA 0 . ENTRY/EXIT IO 368
CZB1 SB5 B5-2 . B5 = "1 IF ZERO BYTE ENCOUNTERED! IO 369
* +"2 IF RECORD LENGTH REACHED! IO 370
NZ B5,CZB . WAS 1 OR 3, SO ZERO BYTE SEEN IO 371
SB3 377777B . =2@17-1, A LONG RECORD IO 372
RJ GETB . GET BUFFER WORD AND POSSIBLY SET B5IO 373
CZB2 NZ B5,CZB1 . MOST LIKELY B5 = 1 NOW IO 374
RJ GETB IO 375
JP CZB2 IO 376
IO 377
* PB USES X0,X2,X3,X4,X7. IT PUTS THE WORD IN X6 INTO THE BUFFER WHOSE IO 378
* FET FWA IS IN B2. X6 AND B2 ARE NOT CHANGED. IO 379
* IO 380
PB3 SA6 X2 . PUT WORD INTO BUFFER IO 381
SX7 X4 IO 382
SA7 A2+0 . UPDATE IN POINTER IO 383
PB DATA 0 IO 384
SA2 B2+2 FET IN POINTER IO 385
SA3 B2+4 LIMIT POINTER IO 386
SX4 X2+1 IO 387
SX3 X3 IO 388
IX3 X4-X3 IO 389
NZ X3,PB1 IO 390
SA4 B2+1 FIRST IO 391
PB1 SX4 X4 IO 392
SA3 B2+3 . OUT IO 393
IX3 X3-X4 IO 394
NZ X3,PB3 IO 395
SA3 B2 FET FWA IO 396
LX3 59 CHECK COMPLETION BIT IO 397
PL X3,PB2 IO 398
WRITE RECALL IO 399
EQ PB+1 IO 400
PB2 RECALL B2 IO 401
EQ PB+1 IO 402
* IO 403
* CBO USES X2,X3,X4, AND X7(IF CIO IS CALLED) IO 404
* IT RETURNS X2 .NE. 0 IF ZERO BYTE IS NOT IN X6 IO 405
* IO 406
CBO DATA 0 IO 407
MX0 48 IO 408
BX6 -X0*X6 IO 409
NZ X6,CBO IO 410
SA2 B2+2 IN IO 411
SA3 B2+3 OUT IO 412
IX2 X3-X2 IO 413
SA3 B2+1 FIRST IO 414
SA4 B2+4 LIMIT IO 415
IX3 X4-X3 IO 416
SX3 X3 IO 417
AX3 1 BUFFER LENGTH / 2 IO 418
NG X2,CBO1 IO 419
BX3 -X3 IO 420
CBO1 IX2 X2+X3 IO 421
PL X2,CBO IO 422
SA2 B2 IO 423
LX2 59 IO 424
PL X2,CBO IO 425
WRITE IO 426
EQ CBO IO 427
* IO 428
CBI2 LX4 5 IO 429
SA2 B2-FI.FET+FI.RFC . WORD WITH EOI,EOR FLAGS IO 430
MX7 1 IO 431
LX7 37 IO 432
BX7 X2+X7 . SET EOI FLAG IO 433
SA7 A2 IO 434
CBI . CHECK FOR EOR ON INPUT FILE IO 435
SA1 B2-FI.FET+FI.RFC . EOI,OER FLAGS, REF COUNT WORD IO 436
LX1 59-36 IO 437
NG X1,ERR55 . EOI FLAG WAS SET IO 438
CBI0 SA1 B2+2 . IN POINTER IO 439
SA2 B2+3 . OUT POINTER IO 440
IX1 X1-X2 IO 441
NZ X1,CBI . BUFFER IS NOT EMPTY IO 442
SA4 B2 . FET FIRST WORD IO 443
LX4 59 IO 444
PL X4,CBI1 . BUSY IO 445
LX4 51 IO 446
NG X4,CBI2 . EOI ENCOUNTERED IO 447
SA1 A1 . IN AGAIN IO 448
IX1 X1-X2 IO 449
NZ X1,CBI . A PRU WAS JUST MOVED IO 450
LX4 5 . EXAMINE EOR BIT IO 451
NG X4,CBI . EOR WAS ENCOUNTERED IO 452
READ RECALL IO 453
EQ CBI0 . TRY AGAIN IO 454
CBI1 RECALL B2 IO 455
EQ CBI0 . LIKEWISE IO 456
* IO 457
* IO 458
* (CLOSE ALL OPEN FILES AND) ABORT THE JOB-STEP. IO 459
* IO 460
ABT RJ CLOSALL IO 461
RJ LSCMOUT IO 462
ABT. SX7 3LABT IO 463
LX7 42 IO 464
SA7 1 IO 465
EQ * IO 466
* IO 467
* SB2 STREAM IO 468
* RJ OPEN IO 469
* OPENS THE FILE POINTED TO BY B2. IO 470
* IO 471
* USES: A1/X1, X2, A7/X7 IO 472
OPEN BSSZ 1 . ENTRY/EXIT IO 473
* CLEAR THE SNOBOL EOI/EOR BITS IN F3 OF THE REF. COUNT WORD. IO 474
SA1 B2+FI.RFC IO 475
LX1 60-2*18 . RIGHT JUSTIFY F3 IO 476
MX2 60-18 IO 477
BX7 X2*X1 IO 478
LX7 2*18 . REPOSITION THE FI.RFC WORD IO 479
SA7 A1+0 IO 480
SA1 B2+FI.FET+FET.LFN ******* 1
BX7 X1*X2 ******* 2
SA7 A1 ******* 3
SA1 1 ******* 4
+ SA1 A1+1 LOOP TO FIND SLOT FOR FILE NAME ******* 5
NZ X1,* ******* 6
SX1 A7 ******* 7
BX7 X1+X7 ******* 8
SA7 A1 PUT FILE NAME AND POINTER IN SLOT ******* 9
MX7 0 ******* 10
SA7 A7+1 INSURE NEXT SLOT ******* 11
SX7 B2+FI.FET+FET.LFN ******* 12
* RELUCTANT TO FLUSH THE BUFFER IF SNOBOL LOSES CONTROL. IO 499
SA1 B2+FI.RFC IO 500
SX7 1 . SET COMPLETE BIT IO 501
PL X1,OPENFA IO 502
SX7 CIO.WRIT+1 . WRITE COMPLETE FOR FILE OUTPUT IO 503
OPENFA SA1 B2+FI.FET+FET.LFN IO 504
BX1 X2*X1 IO 505
BX7 X1+X7 IO 506
SA7 A1 IO 507
* IO 508
JP OPEN . RETURN IO 509
* IO 512
* IO 513
* ROUTINE TO CLOSE ALL OUTPUT FILES (A"TUALLY, IT JUST DOES A WRITE EORIO 514
* OF LEVEL ZERO ON EACH.) IO 515
* IO 516
CLOSALL BSSZ 1 . ENTRY/EXIT IO 517
STREAM FILLIST . SET B2 = PTR TO FIRST FILE BLOCK IO 518
CALOOP RJ CLOSE1 IO 519
STREAM B2 . SET B2 = PTR TO NEXT FILE BLOCK IO 520
NZ B2,CALOOP IO 521
JP CLOSALL . ZERO LINK MARKS END OF FILLIST IO 522
* IO 523
* IO 524
* CLOSE1: ENSURE OUTPUT FILE ENDS WITH EOR. IO 525
* IO 526
* PARAMETER: B2 = FILE BLOCK POINTER IO 527
* IO 528
CLOSE1 BSSZ 1 . ENTRY/EXIT IO 529
* IO 530
SA1 B2+FI.RFC IO 531
PL X1,CLOSE1 . FILE NEVER WRITTEN IO 532
* IO 533
* CHECK IF LAST OP WAS A WRITE IO 534
* IO 535
SA2 B2+FI.FET+FET.LFN IO 536
SX0 4B IO 537
BX0 X0*X2 IO 538
ZR X0,CLOSE1 . LAST OP WAS NOT A WRITE IO 539
* IO 540
* CHECK IF ALREADY HAVE EOR OR EOF IO 541
* IO 542
SX0 20B IO 543
BX0 X0*X2 IO 544
NZ X0,CLOSE2 . CHECK FOR BUFFER FLUSHING IO 545
* IO 546
* NEED TO ISSUE WRITER IO 547
* IO 548
CLOSE1X WARTAUF . WAIT FOR ALL QUIET IO 549
CIO CIO.WEOR,RECALL . WRITE END OF RECORD IO 550
* IO 551
* CHECK IF BUFFER HAS ANYTHING IN IT IO 552
* IO 553
CLOSE2 SA1 B2+FI.FET+FET.IN IO 554
SA2 B2+FI.FET+FET.OUT IO 555
IX1 X2-X1 IO 556
ZR X1,CLOSE1 . BUFFER IS EMPTY IO 557
CIO CIO.WRIT,RECALL IO 558
JP CLOSE1 IO 559
* IO 560
* IO 561
* IO 562
* IO 563
* IO 564
* THIS ROUTINE SENDS A MESSAGE TO THE DAYFILE SAYING HOW MANY IO 565
* TIMES LIST SPACE WAS COMPACTED IO 566
* IO 567
LSCMOUT BSSZ 1 IO 568
SA1 LSCOUNT . COUNT OF CALLS TO GARBCOLL IO 569
ZR X1,LSCMOUT . LSC NOT CALLED IO 570
RJ ICX1X6 . GET BCD STRING IO 571
MX2 12 IO 572
LX2 60-6 IO 573
MX7 6 IO 574
LX7 60-6 IO 575
BX7 X7*X6 . IS IT ONE OR TWO CHARACTERS IO 576
NZ X7,LSCM1 . WAS TWO CHARACTERS IO 577
MX2 6 IO 578
LX2 60-12 IO 579
LSCM1 SA1 LSCMSG IO 580
BX1 -X2*X1 . MASK OUT FOR NUMBER IO 581
AX6 12 . RIGHT JUSTIFY NUMBER IN FIELD IO 582
BX6 X6*X2 . MASK OUT POSSIBLE SIGN EXTENSION IO 583
BX6 X1+X6 IO 584
SA6 A1 . STORE MESSAGE WITH NUMBER IO 585
SA1 LSMCALL IO 586
BX6 X1 IO 587
SA6 1 . ISSUE REQUEST IO 588
+ SA1 1 IO 589
NZ X1,* . WAIT TIL CALL IS PICKED UP IO 590
EQ LSCMOUT IO 591
* IO 592
LSMCALL VFD 18/3LMSG,42/LSCMSG IO 593
LSCMSG DIS ,$ LIST STORAGE COMPACTION(S) DONE $ IO 594
* IO 595
TITLE INPUT ROUTINE IO 596
GETL MACRO IO 597
LOCAL NEXT IO 598
SA1 B7 . NEXT FREE WORD IO 599
NZ X1,NEXT . NOT THE LAST ONE IO 600
RJ MORFREE . GET MORE IO 601
NEXT SB7 X1 . UPDATE FREE POINTER IO 602
SX1 X1 . CLEAR UPPER 42 BITS IO 603
ENDM IO 604
* IO 605
INPUT DATA 0 IO 606
SB1 B3 IO 607
SA2 B1 INPUT ASSOCIATED VARIABLE DESCRIPTOR IO 608
AX2 18 IO 609
SB2 X2+FI.FET . FWA OF FET IO 610
RJ CBI IO 611
SA3 B2-FI.FET+FI.RFC . WORD WITH EOR,EOI FLAGS IO 612
MX6 1 IO 613
LX6 1+18+18+1 . EOR FLAG POSITION IO 614
NZ X1,READ . BUFFER CONTAINS DATA IO 615
BX6 X6+X3 . SET EOR FLAG IO 616
SA6 A3 IO 617
MX7 1 IO 618
BX7 -X7*X4 . CBI LEFT FET FIRST WORD IN X4 IO 619
LX7 5 IO 620
SA7 A4 IO 621
RJ ZROX7 IO 622
SA2 B1 IO 623
SA7 X2 . NULL VALUE IO 624
EQ FAIL IO 625
READ BX6 -X6*X3 . CLEAR EOR FLAG IO 626
SA6 A3 IO 627
SB5 B0 . CLEAR END FLAG IO 628
SA4 B1 . INPUT ASSOCIATED SVD IO 629
LX4 60-36 . RIGHT JUSTIFY UNIT RECORD LENGTH IO 630
SB3 X4 IO 631
SA1 MXLNGTH . MAXIMUM STRING LENGTH KEYWORD IO 632
SX2 X4 IO 633
IX2 X1-X2 IO 634
NG X2,ERR18 . ERROR - TOO LONG IO 635
RJ GETB . GET DATA WORD IN X2 IO 636
GETL GET LIST WORD IO 637
SX6 A1 IO 638
SX3 SSTY IO 639
LX3 55 IO 640
BX6 X3+X6 NEW ISD IO 641
MX0 18 IO 642
LX0 54 IO 643
LX4 36 IO 644
BX0 X0*X4 IO 645
BX6 X0+X6 IO 646
SA6 X4 IO 647
MX0 42 IO 648
BX6 X0*X2 IO 649
EQ LOOPA IO 650
LPLP RJ GETB . GET BUFFER WORD ONE IO 651
MX0 42 IO 652
BX6 X0*X2 IO 653
ZR X6,ENDL IO 654
GETL REACHED END-OF-UNIT-RECORD IO 655
LOOPA BX6 X1+X6 IO 656
SA6 A1+0 STORE LIST WORD 1 IO 657
BX6 -X0*X2 IO 658
ZR X6,ENDL IO 659
RJ GETB GET BW2 IO 660
MX0 24 IO 661
LX6 42 IO 662
BX3 X0*X2 IO 663
LX3 42 IO 664
BX6 X3+X6 IO 665
GETL IO 666
BX6 X1+X6 IO 667
SA6 A1 STORE LW2 IO 668
BX6 -X0*X2 IO 669
ZR X6,ENDL IO 670
RJ GETB GET BW3 IO 671
MX0 6 IO 672
LX6 24 IO 673
BX3 X0*X2 IO 674
LX3 24 IO 675
BX6 X3+X6 IO 676
GETL IO 677
BX6 X1+X6 IO 678
SA6 A1 STORE LW3 IO 679
BX2 -X0*X2 IO 680
ZR X2,ENDL IO 681
MX0 42 IO 682
LX2 6 IO 683
BX6 X0*X2 IO 684
GETL IO 685
BX6 X1+X6 IO 686
SA6 A1 STORE LW4 IO 687
BX6 -X0*X2 IO 688
ZR X6,ENDL IO 689
RJ GETB GET BW4 IO 690
MX0 30 IO 691
LX6 42 IO 692
BX3 X0*X2 IO 693
LX3 48 IO 694
BX6 X3+X6 IO 695
GETL IO 696
BX6 X1+X6 IO 697
SA6 A1 STORE LW5 IO 698
BX6 -X0*X2 IO 699
ZR X6,ENDL IO 700
RJ GETB GET BW5 IO 701
MX0 12 IO 702
LX6 30 IO 703
BX3 X0*X2 IO 704
LX3 30 IO 705
BX6 X3+X6 IO 706
GETL IO 707
BX6 X1+X6 IO 708
SA6 A1 STORE LW6 IO 709
BX2 -X0*X2 IO 710
ZR X2,ENDL IO 711
LX2 12 IO 712
MX0 42 IO 713
BX6 X0*X2 IO 714
GETL IO 715
BX6 X1+X6 IO 716
SA6 A1 STORE LW7 IO 717
BX6 -X0*X2 IO 718
ZR X6,ENDL IO 719
RJ GETB GET BW6 IO 720
MX0 36 IO 721
LX6 42 IO 722
BX3 X0*X2 IO 723
LX3 54 IO 724
BX6 X3+X6 IO 725
GETL IO 726
BX6 X1+X6 IO 727
SA6 A1 STORE LW8 IO 728
BX6 -X0*X2 IO 729
ZR X6,ENDL IO 730
RJ GETB GET BW7 IO 731
MX0 18 IO 732
LX6 36 IO 733
BX3 X0*X2 IO 734
LX3 36 IO 735
BX6 X3+X6 IO 736
GETL IO 737
BX6 X1+X6 IO 738
SA6 A1 STORE LW9 IO 739
BX6 -X0*X2 IO 740
ZR X6,ENDL IO 741
LX6 18 IO 742
GETL IO 743
BX6 X1+X6 IO 744
SA6 A1 STORE LW10 IO 745
EQ LPLP IO 746
ENDL SA1 A6 IO 747
MX0 42 IO 748
BX6 X0*X1 IO 749
SA6 A6 IO 750
SA2 B1 IAVD IO 751
SA2 X2 ISD IO 752
SX3 A6 LWA OF NEW STRING IO 753
LX3 18 IS INSERTED IO 754
BX6 X2+X3 INTO ISD IO 755
SA6 A2 IO 756
RJ CZB SKIP UP TO ZERO BYTE IO 757
CHECK1 SA1 B2+2 IN IO 758
SA2 B2+3 OUT IO 759
IX1 X1-X2 IO 760
SA2 B2+1 FIRST IO 761
SA3 B2+4 LIMIT IO 762
IX2 X3-X2 IO 763
SX2 X2 IO 764
AX2 1 BUFFER LENGTH / 2 IO 765
NG X1,CHECK2 IO 766
BX2 -X2 IO 767
CHECK2 IX1 X1+X2 IO 768
PL X1,INPUT IO 769
SA1 B2 IO 770
LX1 55 IO 771
NG X1,INPUT IO 772
EQ INPUT IO 774
BLANKS DATA 10H IO 775
TITLE OUTPUT ROUTINE IO 776
OUTPUT DATA 0 IO 777
SA2 B3 OUTPUT ASSOCIATED VARIABLE DESCRIPTORIO 778
SA1 X2 SIMPLE VARIABLE DESCRIPTOR IO 779
SB4 X1 B4 = NEXT LIST WORD IO 780
AX2 18 IO 781
SB2 X2+FI.FET . FWA OF FET IO 782
AX2 18 IO 783
MX0 54 IO 784
BX6 -X0*X2 CARRIAGE CONTROL CHARACTER IO 785
LX6 54 LEFT JUSTIFY CCC IO 786
NZ X6,HAV1 IF CCC IS NONNULL, ENTER SEQ AT HAV1 IO 787
HAV0 ZR B4,H01 IO 788
SA1 B4 GET LIST WORD 1 IO 789
SB4 X1 IO 790
MX0 42 IO 791
BX6 X0*X1 IO 792
SX1 0 IO 793
ZR B4,H01 IO 794
SA1 B4 IO 795
SB4 X1 IO 796
MX0 18 IO 797
BX3 X0*X1 IO 798
LX3 18 IO 799
BX6 X3+X6 IO 800
H01 RJ PUTB STORE BUFFER WORD 1 IO 801
LX1 18 IO 802
MX0 24 IO 803
BX6 X0*X1 REMAINDER TO X6 IO 804
SX1 B0 IO 805
HAV4 ZR B4,H41 IO 806
SA1 B4 IO 807
SB4 X1 IO 808
MX0 36 IO 809
BX3 X0*X1 IO 810
LX3 36 IO 811
BX6 X3+X6 IO 812
H41 RJ PUTB STORE BW2 IO 813
LX1 36 IO 814
MX0 6 IO 815
BX6 X0*X1 IO 816
SX1 B0 IO 817
HAV1 ZR B4,H11 IO 818
SA1 B4+0 IO 819
SB4 X1+0 IO 820
MX0 42 IO 821
BX3 X0*X1 IO 822
LX3 54 IO 823
BX6 X3+X6 IO 824
SX1 0 IO 825
HAV8 ZR B4,H11 IO 826
SA1 B4 IO 827
SB4 X1 IO 828
MX0 12 IO 829
BX3 X0*X1 IO 830
LX3 12 IO 831
BX6 X3+X6 IO 832
H11 RJ PUTB STORE BW3 IO 833
LX1 12 IO 834
MX0 30 IO 835
BX6 X0*X1 IO 836
SX1 B0 IO 837
HAV5 ZR B4,H51 IO 838
SA1 B4 IO 839
SB4 X1 IO 840
MX0 30 IO 841
BX3 X0*X1 IO 842
LX3 30 IO 843
BX6 X3+X6 IO 844
H51 RJ PUTB STORE BW4 IO 845
LX1 30 IO 846
MX0 12 IO 847
BX6 X0*X1 IO 848
SX1 B0 IO 849
HAV2 ZR B4,H21 IO 850
SA1 B4+0 IO 851
SB4 X1+0 IO 852
MX0 42 IO 853
BX3 X0*X1 IO 854
LX3 48 IO 855
BX6 X3+X6 IO 856
SX1 0 IO 857
HAV9 ZR B4,H21 IO 858
SA1 B4 IO 859
SB4 X1 IO 860
MX0 6 IO 861
BX3 X0*X1 IO 862
LX3 6 IO 863
BX6 X3+X6 IO 864
H21 RJ PUTB STORE BW5 IO 865
LX1 6 IO 866
MX0 36 IO 867
BX6 X0*X1 IO 868
SX1 B0 IO 869
HAV6 ZR B4,H61 IO 870
SA1 B4 IO 871
SB4 X1 IO 872
MX0 24 IO 873
BX3 X0*X1 IO 874
LX3 24 IO 875
BX6 X3+X6 IO 876
H61 RJ PUTB STORE BW6 IO 877
LX1 24 IO 878
MX0 18 IO 879
BX6 X0*X1 IO 880
SX1 B0 IO 881
HAV3 ZR B4,H31 IO 882
SA1 B4 IO 883
SB4 X1 IO 884
MX0 42 IO 885
BX3 X0*X1 IO 886
LX3 42 IO 887
BX6 X6+X3 IO 888
H31 RJ PUTB IO 889
SX6 0 IO 890
EQ HAV0 IO 891
PUTB DATA 0 IO 892
RJ PB IO 893
RJ CBO IO 894
NZ X6,PUTB IO 895
SA1 B2-1 . CHECK IF FILE HAS BEEN WRITTEN IO 896
NG X1,OUTPUT . FILE HAS BEEN WRITTEN ON BEFORE IO 897
MX6 1 . MARK FILE AS IO 898
BX6 X6+X1 . HAVING BEEN WRITTEN INTO IO 899
SA6 A1 IO 900
SA1 B2 . PUT WRITE-COMPLETE IN FET IO 901
MX6 42 IO 902
BX1 X6*X1 . FILENAME IO 903
SX6 CIO.WRIT+1 . WRITE COMPLETE IO 904
BX6 X6+X1 IO 905
SA6 B2 . STORE STATUS IO 906
EQ OUTPUT IO 907
* IO 908
* IO 909
END IO 910