PATMAT
IDENT PATMAT PATMAT 1
TITLE PATTERN MATCHING PATMAT 2
* FOR A LISTING OF THE SNODEF COMDECK, CALLED BELOW, SEE MAINLUP. PATMAT 3
LIST -L PATMAT 4
*CALL,SNODEF PATMAT 5
LIST L PATMAT 6
* ERROR PATMAT 7
EXT ERR20,ERR21,ERR22,ERR23,ERR24,ERR26,ERR27,ERR28 PATMAT 8
* STORMAN PATMAT 9
EXT PUSHSTK,RESERVE,MORFREE,GETSTAK,GRBCOLL,RESHB PATMAT 10
* UTILITY PATMAT 11
EXT ITOS,SSTOS,STOSFX6,PTOPX4,ICX1X6,ZROX7,SSTOSF,ITOSF PATMAT 12
EXT ITOSFTP,SOPERND,X1VALUE,FREESVD,SASSIGN,INDRCT,INDRX PATMAT 13
EXT SEARCH,FREESTR PATMAT 14
* PATMAT PATMAT 15
ENTRY PRDPM,DOLPM,ENDEXPM,ALTPM,EXPPM,ARBPM,LENPM,POSPM PATMAT 16
ENTRY RPOSPM,TABPM,RTABPM,REMPM,BALPM,FAILPM,FENCEPM,ABORTPM PATMAT 17
ENTRY ARBNOPM,STARPM,LITPM,ANYPM,NTANYPM,SPANPM,BREAKPM PATMAT 18
ENTRY ENTER,SETSIPI,NALTPMP PATMAT 19
* IO PATMAT 20
EXT INPUT,OUTPUT,CLOSOUT PATMAT 21
* MAINLUP PATMAT 22
EXT PMFOUND,PMABT PATMAT 23
* PATMAT 24
SIXREL EQU 0 PATMAT 25
PIXREL EQU 1 PATMAT 26
MARK EQU 377777B PATMAT 27
EJECT PATMAT 28
ENTERA DATA 0 PATMAT 29
+ SX0 X5+0 . THE NEXT ELEMENT IS THE ELEMENT PATMAT 30
SA2 ENTERA . AFTER THE ALTERNATIVE PATMAT 31
NG X0,ENTER1 PATMAT 32
SB4 X0+0 PATMAT 33
EQ ENTER1 PATMAT 34
* PATMAT 35
ENTER NO . RECURSIVE CALL PATMAT 36
+ NO PATMAT 37
SA2 ENTER PATMAT 38
ENTER1 SB6 B6+4 PATMAT 39
SA1 MAXSTAK PATMAT 40
SX1 X1+B6 PATMAT 41
PL X1,PMBUMP . BRANCH IF NO SPACE PATMAT 42
PMBUMPR BX6 X2 . STORE X5,X4,THE RETURN JUMP PATMAT 43
SA7 B6-1 . AND X7 IN THE STACK PATMAT 44
SA6 B6 PATMAT 45
BX6 X4 PATMAT 46
BX7 X5 PATMAT 47
SA6 B6-3 PATMAT 48
SA7 B6-2 PATMAT 49
SA5 PIB PATMAT 50
SX2 B1+0 PATMAT 51
LX5 18 PATMAT 52
BX5 X2+X5 PATMAT 53
MX0 1 PATMAT 54
LX5 18 PATMAT 55
BX5 X5+X0 PATMAT 56
* PATMAT 57
NEXT SX0 1 . SET NO ALTERNATIVE PATMAT 58
LX0 17 PATMAT 59
BX5 X0+X5 PATMAT 60
NEXT1 SA1 B4 . NEXT PM OPERATION TO X1 PATMAT 61
ID X1,YDOL . IGNORE DOLPM OR PRDPM PATMAT 62
UX1 X1,B2 PATMAT 63
JP B2+YSTAR PATMAT 64
* PATMAT 65
PMBUMP SA1 MINHS . STORE S AND P STACK POINTERS PATMAT 66
BX6 X3 . IN SPECIAL HS LOCATIONS PATMAT 67
BX3 X5 PATMAT 68
SA6 X1+SIXREL PATMAT 69
SA5 PMA5 . RESTORE A5 FOR ERRORMESSAGE PATMAT 70
SA5 X5+0 PATMAT 71
BX5 X3 PATMAT 72
SA3 PIX PATMAT 73
BX6 X3 PATMAT 74
SX3 A0 PATMAT 75
SA6 X1+PIXREL PATMAT 76
SB2 B3+1 . DESCRIBE IN A0 WHERE THE LAST PATMAT 77
SA0 B6-B2 . NORMAL STACK ENTRY CAN BE FOUND PATMAT 78
RJ GETSTAK PATMAT 79
SA0 X3 PATMAT 80
SA1 MINHS PATMAT 81
SA3 X1+PIXREL . CLEAR USED LOCATIONS PATMAT 82
SX6 X3 PATMAT 83
SA1 X1+SIXREL PATMAT 84
SA6 PIX . RESTORE STACK POINTERS PATMAT 85
SX3 X1 PATMAT 86
BX6 X6-X6 PATMAT 87
SA6 A3 PATMAT 88
SA6 A1 PATMAT 89
EQ PMBUMPR PATMAT 90
* PATMAT 91
ALTLFM SA1 LENFAIL PATMAT 92
BX5 -X1*X5 PATMAT 93
EQ ALTLF PATMAT 94
ALT MX0 1 . ALTERNATE WITHOUT LENGTH FAILURE PATMAT 95
BX5 -X0*X5 PATMAT 96
ALTLF SX7 NEXT . SIGN BIT IN X5 IS ONE IFF ALL PATMAT 97
SX1 X5+0 . ALTERNATIVES LENGTH FAILED PATMAT 98
PL X1,SETSIPI PATMAT 99
MX0 1 PATMAT 100
BX6 -X5*X0 PATMAT 101
SA6 LENFAIL PATMAT 102
EQ EXIT PATMAT 103
* RETURN ADDRESS IS IN X7 PATMAT 104
SETSIPI SA1 PIB . OPEN SUBROUTINE TO RESET S AND P PATMAT 105
ZR X1,ALTLF5 . STACK POINTERS TO THEIR ORIGINAL PATMAT 106
SA2 PIX . VALUE AS INDICATED IN X5 PATMAT 107
SB2 X1+0 . THESE STACKS CONSTITUTE TWO LIST PATMAT 108
LX5 24 . STRUCTURES PATMAT 109
SX1 X5+0 PATMAT 110
LX5 36 PATMAT 111
ALTLF1 SX0 B0-B2 . RESET STACK P PATMAT 112
IX0 X0+X1 PATMAT 113
ZR X0,ALTLF2 PATMAT 114
SA2 X2 PATMAT 115
SX6 B7 . LINK FREED WORD TO THE FREE CHAIN PATMAT 116
SB7 A2 PATMAT 117
SA6 A2 PATMAT 118
SB2 B2-1 . B2 IS THE NUMBER OF WORDS IN PATMAT 119
EQ ALTLF1 . STACK P PATMAT 120
ALTLF2 SX6 X1+0 PATMAT 121
SA6 A1+0 . STORE B2 IN PIB PATMAT 122
SX6 X2+0 PATMAT 123
SA6 PIX PATMAT 124
ALTLF5 LX5 42 . RESET STACK S PATMAT 125
SX1 X5+0 PATMAT 126
LX5 18 PATMAT 127
ALTLF3 SB2 B0-B1 . B1=SIB, X3=SIX PATMAT 128
SB2 X1+B2 PATMAT 129
EQ B0,B2,ALTLF4 . BRANCH IF X1=B1 PATMAT 130
SA3 X3 PATMAT 131
SX6 B7 . AS ABOVE PATMAT 132
SB7 A3 PATMAT 133
SA6 A3 PATMAT 134
SB1 B1-1 . B1 IS RESERVED FOR THE NUMBER OF PATMAT 135
EQ ALTLF3 . WORDS IN STACK S PATMAT 136
ALTLF4 SX3 X3 PATMAT 137
SB2 X7 PATMAT 138
JP B2 PATMAT 139
* PATMAT 140
YENDEX NZ X1,PMFOUND . FOUND IF OUTERMOST END PATMAT 141
SB4 B4+1 PATMAT 142
SA2 X3 PATMAT 143
BX6 X2 PATMAT 144
AX2 36 PATMAT 145
SB2 X2 PATMAT 146
ZR X2,YENDEX1 . UNLESS ARBNO CALLED PATMAT 147
SA1 B4 PATMAT 148
SX2 A0 PATMAT 149
DF X1,YENDEX1 . PERFORM ASSIGNMENTS PATMAT 150
RJ ASSIGNS PATMAT 151
YENDEX1 SX7 B7 . REMOVE TOP ELEMENT FROM PATMAT 152
SB7 X3 . STACK S PATMAT 153
SX3 X6 PATMAT 154
SA7 B7 PATMAT 155
AX6 18 PATMAT 156
SB1 B1-1 . DECREASE SIB PATMAT 157
SA1 X6-1 PATMAT 158
UX1 X1,B2 PATMAT 159
SB4 X6 PATMAT 160
NE B2,B0,YENDEX2 . IF STAR CALLED PATMAT 161
BX2 X6 . PERFORM ASSIGNMENTS PATMAT 162
AX2 18 PATMAT 163
SB2 X2 . UNPACK POS FROM STACK ENTRY PATMAT 164
SX2 A0 PATMAT 165
RJ ASSIGNS PATMAT 166
YENDEX2 SX7 B4 . SAVE WORD FROM STACK S IN X4 PATMAT 167
BX4 X6 . PATMAT 168
SX0 A0 PATMAT 169
LX7 18 PATMAT 170
BX7 X0+X7 PATMAT 171
SB4 X6 PATMAT 172
RJ ENTER . RECURSIVE CALL PATMAT 173
BX6 X4 PATMAT 174
LX6 18 PATMAT 175
SA1 B7 PATMAT 176
BX6 X6+X3 . RESTORE X4 INTO STACK S PATMAT 177
NZ X1,YENDEX3 PATMAT 178
RJ MORFREE PATMAT 179
YENDEX3 SA6 B7 PATMAT 180
SB7 X1 PATMAT 181
SB1 B1+1 PATMAT 182
SX3 A6 PATMAT 183
EQ EXIT PATMAT 184
* PATMAT 185
YALTER SX1 X1+B4 . PACK ADDRESS OF ALTERNATIVE PATMAT 186
MX0 42 . INTO X5 PATMAT 187
BX5 X5*X0 PATMAT 188
BX5 X5+X1 PATMAT 189
YDOL SB4 B4+1 . NEXT OPERATION PATMAT 190
EQ NEXT1 PATMAT 191
* PATMAT 192
YEXP SX6 B4+1 . BEGIN EXPRESSION PATMAT 193
SB4 X1+B4 . INDEX VALUE TO BE STACKED PATMAT 194
SB1 B1+1 . BUMP SIB PATMAT 195
SB2 YEXPR PATMAT 196
POPS SA1 B7 . STACK INDEX AND POS IN STACK S PATMAT 197
SX7 A0 . (OPEN SUBROUTINE IS USED BY PATMAT 198
SX2 X5 . YSTAR AS WELL) PATMAT 199
LX7 18 PATMAT 200
NZ X1,POPS1 PATMAT 201
RJ MORFREE PATMAT 202
POPS1 PL X2,POPS2 PATMAT 203
SX2 B4+0 PATMAT 204
POPS2 BX7 X7+X2 PATMAT 205
SB7 X1 PATMAT 206
LX7 18 PATMAT 207
BX7 X7+X3 PATMAT 208
SA7 A1 PATMAT 209
JP B2 PATMAT 210
YEXPR SX3 A1 PATMAT 211
SX7 B4 PATMAT 212
SX0 A0 . SET UP CALL TO MATCH THE PATMAT 213
LX7 18 . EXPRESSION PATMAT 214
SB4 X6 PATMAT 215
BX7 X7+X0 PATMAT 216
RJ ENTER PATMAT 217
EQ ALTLFM PATMAT 218
* PATMAT 219
YARB SB4 B4+1 . ARB PATTERN ELEMENT PATMAT 220
SX4 A0 PATMAT 221
YARB1 SA1 B4 PATMAT 222
DF X1,YARB2 PATMAT 223
SX2 X4 PATMAT 224
SB2 A0 PATMAT 225
RJ ASSIGNS PATMAT 226
YARB2 SX7 B4 PATMAT 227
SX0 A0 PATMAT 228
LX7 18 PATMAT 229
SA0 X4 PATMAT 230
BX7 X7+X0 PATMAT 231
RJ ENTERA . TRY TO MATCH THE REST OF THE PATMAT 232
SA1 LENFAIL . PATTERN PATMAT 233
SB2 X4+0 . EXTEND THE STRING MACHED PATMAT 234
SX4 X4+1 PATMAT 235
LT B3,B2,ALT . TOO LONG PATMAT 236
ZR X1,ALT PATMAT 237
SX7 YARB1 . RESET STACKS AND TRY AGAIN PATMAT 238
EQ SETSIPI PATMAT 239
* PATMAT 240
YLEN SB2 A0-1 . LEN PATTERN ELEMENT PATMAT 241
SB4 B4+1 PATMAT 242
SB2 X1+B2 PATMAT 243
LT B3,B2,ALTLF . TOO LONG PATMAT 244
SA1 B4+0 PATMAT 245
SX6 B2+1 PATMAT 246
DF X1,ENTERX6 PATMAT 247
SX2 X6 PATMAT 248
SB2 A0 PATMAT 249
EQ YTAB1 . GO TRY TO MATCH THE REST PATMAT 250
* PATMAT 251
YPOS SA2 SBASE . POS PATTERN ELEMENT PATMAT 252
SB4 B4+1 PATMAT 253
YPOS1 SX7 A0-1 PATMAT 254
IX1 X1+X2 . CORE ADDRESS OF POSITION TO X1 PATMAT 255
IX1 X1-X7 PATMAT 256
NG X1,ALTLF . POS ALREADY LEFT BEHIND PATMAT 257
NZ X1,ALT . POS NOT REACHED YET PATMAT 258
SA1 B4 PATMAT 259
SX6 A0 PATMAT 260
DF X1,ENTERX6 PATMAT 261
SB2 A0 PATMAT 262
SX2 A0 PATMAT 263
EQ YTAB1 . GO TRY TO MATCH THE REST PATMAT 264
* PATMAT 265
YRPOS BX1 -X1 . RPOS PATTERN ELEMENT PATMAT 266
SB4 B4+1 PATMAT 267
SX2 B3 . TRANSFORM INTO POS PATMAT 268
EQ YPOS1 PATMAT 269
* PATMAT 270
YTAB SA2 SBASE . TAB PATTERN ELEMENT PATMAT 271
SB4 B4+1 PATMAT 272
YTAB2 IX1 X1+X2 PATMAT 273
SB2 A0 PATMAT 274
SX6 X1+1 PATMAT 275
SB2 B0-B2 PATMAT 276
SB2 X6+B2 PATMAT 277
LT B2,B0,ALTLF . TAB-STOP IS LEFT ALREADY PATMAT 278
SB2 X1 PATMAT 279
SA1 B4+0 PATMAT 280
LT B3,B2,ALTLF PATMAT 281
DF X1,ENTERX6 PATMAT 282
YTAB0 SB2 A0 PATMAT 283
BX2 X6 PATMAT 284
YTAB1 RJ ASSIGNS . PATMAT 285
ENTERX6 SX7 B4 . TRY TO MATCH THE REST PATMAT 286
SX1 A0 PATMAT 287
LX7 18 PATMAT 288
SA0 X6 PATMAT 289
BX7 X7+X1 PATMAT 290
RJ ENTERA PATMAT 291
EQ ALTLFM . SEEK ALTERNATE IF MATCH FAILS PATMAT 292
* PATMAT 293
YRTAB BX1 -X1 . RTAB PATTERN ELEMENT PATMAT 294
SX2 B3 . TRANSFORM INTO TAB PATMAT 295
SB4 B4+1 PATMAT 296
EQ YTAB2 PATMAT 297
* PATMAT 298
YREM SA1 B4+1 . REM PATTERN ELEMENT PATMAT 299
SB4 B4+1 PATMAT 300
SX6 B3+1 PATMAT 301
DF X1,ENTERX6 . REST OF THE PATTERN WILL HAVE PATMAT 302
SB2 A0 . TO MACH THE NULL STRING PATMAT 303
BX2 X6 PATMAT 304
EQ YTAB1 PATMAT 305
* PATMAT 306
YBAL SB4 B4+1 . BAL PATTERN ELEMENT PATMAT 307
SX4 0 PATMAT 308
YBAL1 SX6 1R) PATMAT 309
SX7 1R( PATMAT 310
SB2 A0 . NOTE THAT BAL NEVER SIGNALS LENGTH PATMAT 311
SB2 X4+B2 . FAILURE PATMAT 312
LT B3,B2,ALT . SEEK ALTERNATIVE IF END OF STRING PATMAT 313
SA1 B2 PATMAT 314
BX0 X1-X6 PATMAT 315
ZR X0,ALT . MISMATCH IF NEXT CHARACTER IS ) PATMAT 316
SX0 0 . X0 IS THE LEVEL COUNTER PATMAT 317
YBAL2 SA1 B2 PATMAT 318
BX2 X1-X7 PATMAT 319
NZ X2,YBAL3 PATMAT 320
SX0 X0+1 . IF ( ADD ONE PATMAT 321
EQ YBAL4 PATMAT 322
YBAL3 BX2 X1-X6 PATMAT 323
NZ X2,YBAL4 PATMAT 324
SX0 X0-1 . IF ) SUBTRACT ONE PATMAT 325
YBAL4 SB2 B2+1 PATMAT 326
ZR X0,YBAL5 . LOOP UNTIL IT IS ZERO PATMAT 327
LT B3,B2,ALT PATMAT 328
EQ YBAL2 PATMAT 329
YBAL5 SX4 A0 PATMAT 330
SA1 B4 PATMAT 331
BX4 -X4 . NUMBER OF CHARACTERS SCANNED PATMAT 332
SX4 X4+B2 . TO X4 PATMAT 333
SX6 B2 PATMAT 334
DF X1,YBAL6 PATMAT 335
BX2 X6 PATMAT 336
SB2 A0 PATMAT 337
RJ ASSIGNS PATMAT 338
YBAL6 SX1 B4 . SET UP RECURSIVE CALL PATMAT 339
SX7 A0 PATMAT 340
SA0 X6 PATMAT 341
LX1 18 PATMAT 342
BX7 X1+X7 PATMAT 343
RJ ENTERA . TRY TO MATCH THE REST OF THE PATMAT 344
SX7 YBAL1 . PATTERN PATMAT 345
EQ SETSIPI . IF FAILS GO TO EXTEND BAL PATMAT 346
* PATMAT 347
YFAIL SB4 B4+1 . FAIL PATTERN ELEMENT PATMAT 348
EQ ALT . SEEK ALTERNATIVE PATMAT 349
* PATMAT 350
YFENCE SB4 B4+1 . FENCE PATTERN ELEMENT PATMAT 351
SB2 A0 PATMAT 352
SX2 A0 PATMAT 353
RJ ASSIGNS . IF THE REST OF THE PATTERN DOES PATMAT 354
RJ ENTERA . NOT MACH THEN PATMAT 355
* PATMAT 356
YABORT EQ PMABT . ABORT THE WHOLE PATTERN MATCH PATMAT 357
* PATMAT 358
YARBNO SX4 B4 . ARBNO PATTERN ELEMENT PATMAT 359
SB4 X1+B4 PATMAT 360
SA2 X4+1 PATMAT 361
SX7 A0 PATMAT 362
SX6 X2 PATMAT 363
ZR X6,ALT . ALTERNATIVE IF NO HOPE TO MATCH PATMAT 364
SX1 X6-MARK PATMAT 365
NZ X1,YARBNO1 PATMAT 366
LX7 18 . HAS NOT BEEN CALLED YET RECURSI- PATMAT 367
BX7 X2+X7 . VELY - INITIALIZE PATMAT 368
BX2 X7 PATMAT 369
SA7 A2 PATMAT 370
YARBNO1 SA1 B4 . MATCH A NULL STRING FIRST PATMAT 371
DF X1,YARBNO2 PATMAT 372
AX2 18 PATMAT 373
SB2 X2 PATMAT 374
SX2 A0 PATMAT 375
RJ ASSIGNS PATMAT 376
YARBNO2 SB2 A0-1 PATMAT 377
SX1 X6-1 PATMAT 378
SX0 B3-B2 PATMAT 379
IX7 X1-X0 . SET HOPE TO THE NUMBER OF CHARAC- PATMAT 380
SA2 X4+1 . TERS IN THE REST OF THE STRING PATMAT 381
LX4 42 . OR HOPE - 1 WHICHEVER IS SMALLER PATMAT 382
NG X7,YARBNO3 PATMAT 383
BX1 X0 PATMAT 384
YARBNO3 MX0 42 PATMAT 385
BX4 X4+X6 PATMAT 386
BX7 X0*X2 PATMAT 387
LX4 18 PATMAT 388
BX6 X7+X1 . SET UP RECURSIVE CALL PATMAT 389
SA6 A2 PATMAT 390
SX7 B4 PATMAT 391
SX0 A0 PATMAT 392
LX7 18 PATMAT 393
BX7 X7+X0 PATMAT 394
RJ ENTERA . TRY TO MATCH THE REST OF THE PATMAT 395
. STRING PATMAT 396
SX7 YARBNO4 PATMAT 397
EQ SETSIPI PATMAT 398
YARBNO4 SA1 B7 PATMAT 399
SX6 X4 . IF IT FAILS WE STACK A RETURN PATMAT 400
LX6 18 . TO THIS ARBNO ELEMENT AND TRY PATMAT 401
BX6 X6+X3 . TO MATCH THE ARGUMENT OF ARBNO PATMAT 402
NZ X1,YARBNO5 . IF IT MATCHES WE RETURN TO A PATMAT 403
RJ MORFREE . NEW INCARNATION OF ARBNO WHICH PATMAT 404
YARBNO5 SB7 X1 . WILL MATCH A NULL STRING FIRST PATMAT 405
SX3 A1 . ETC. PATMAT 406
SA6 A1 PATMAT 407
SX7 B4 PATMAT 408
SB1 B1+1 PATMAT 409
SX0 A0+0 PATMAT 410
LX7 18 PATMAT 411
SB4 X4+2 PATMAT 412
BX7 X0+X7 PATMAT 413
RJ ENTER PATMAT 414
YARBNO6 SA1 X4+1 . IF ALL THIS FAILS WE RESTORE PATMAT 415
MX0 42 . THE HOPE AND GO TO SEEK AN PATMAT 416
AX4 18 . ALTERNATIVE PATMAT 417
BX1 X7*X0 PATMAT 418
BX7 X1+X4 PATMAT 419
SA7 A1+0 PATMAT 420
EQ ALT PATMAT 421
* PATMAT 422
YSTAR SA2 X1+0 . DEFERRED EVALUATION (*) OPERATOR PATMAT 423
SB4 B4+1 PATMAT 424
YSTAR1 BX7 X2 . SVD OF ARGUMENT TO X7,X2 PATMAT 425
AX2 55 PATMAT 426
SX0 X2-SSTY . STRING PATMAT 427
ZR X0,YSTARS PATMAT 428
SX0 X2-PETY-1 . PATTERN PS,PA OR PE PATMAT 429
NG X0,YSTARP PATMAT 430
SX0 X2-INTY . INPUT ASSOCIATED PATMAT 431
ZR X0,YSTARIN PATMAT 432
SX0 X2-OUTTY . TYPE ERROR IF NOT OUTPUT PATMAT 433
NZ X0,YERR24 . RESET B6 AND PROCESS ERROR PATMAT 434
SA2 X7+0 PATMAT 435
EQ YSTAR1 PATMAT 436
* PATMAT 437
YERR24 SB6 B3+1 PATMAT 438
JP ERR24 PATMAT 439
* PATMAT 440
YSTARS SB2 A0 . TREATMENT OF A STRING IS PATMAT 441
SX6 X7 . SIMILAR TO THE TREATMENT OF LIT PATMAT 442
MX0 54 PATMAT 443
YSTARS1 ZR X6,YSTARS3 . MATCHES IF END OF STRING PATMAT 444
SA1 X6+0 PATMAT 445
SX6 X1+0 . NEXT WORD TO X1 PATMAT 446
BX1 X1-X6 PATMAT 447
YSTAR2 LX1 6 PATMAT 448
BX4 -X0*X1 PATMAT 449
ZR X4,YSTARS1 . NEXT CHARACTER TO X4 PATMAT 450
LT B3,B2,ALTLF . SEEK ALTERNATIVE IF NOT EQUAL PATMAT 451
SA2 B2 . TO CORRESPONDING CHARACTER IN PATMAT 452
SB2 B2+1 PATMAT 453
BX2 X4-X2 . THE STRING PATMAT 454
ZR X2,YSTAR2 PATMAT 455
EQ ALT PATMAT 456
YSTARS3 SA1 B4 PATMAT 457
SX6 B2 PATMAT 458
DF X1,ENTERX6 PATMAT 459
BX2 X6 . TRY TO MACH THE REST OF THE STRING PATMAT 460
SB2 A0 PATMAT 461
EQ YTAB1 PATMAT 462
YSTARIN BX6 X3 . IF INPUT ASSOCIATED PATMAT 463
SX7 B1 PATMAT 464
SA6 PMSTX3 PATMAT 465
SA7 PMSTB1 PATMAT 466
SX6 B4 . SAVE REGISTERS PATMAT 467
SX7 A2 PATMAT 468
SA6 PMSTB4 PATMAT 469
SA7 PMSTB3 PATMAT 470
SB3 A2 PATMAT 471
RJ INPUT . CALL INPUT PATMAT 472
SA1 PMSTB1 PATMAT 473
SA2 PMSTB3 PATMAT 474
SA3 PMSTX3 PATMAT 475
SA4 PMSTB4 . RESTORE REGISTERS PATMAT 476
SB1 X1 PATMAT 477
SB4 X4 PATMAT 478
SA1 MAXSTAK PATMAT 479
SA4 SLENGTH PATMAT 480
SB5 X1 PATMAT 481
SB3 X4 PATMAT 482
SA1 X2 PATMAT 483
SB5 B0-B5 PATMAT 484
EQ YSTARS . TREAT THE STRING JUST INPUT PATMAT 485
* PATMAT 486
YSTARP SA4 PCHAIN . THE ARGUMENT IS A PATTERN PATMAT 487
SB2 A0-1 PATMAT 488
YSTARP1 SA2 X4 PATMAT 489
SX4 X2 PATMAT 490
AX2 18 PATMAT 491
BX2 X2-X1 . FIND IT PATMAT 492
NZ X2,YSTARP1 PATMAT 493
SX4 A2+1 PATMAT 494
SX6 A2+2 PATMAT 495
SA1 X4 PATMAT 496
LX4 18 PATMAT 497
ZR X1,ALT . SEEK ALTERNATIVE IF NO HOPE TO PATMAT 498
BX4 X4+X1 . MATCH PATMAT 499
SB2 B2-B3 PATMAT 500
SX7 X1-1 . BUMP SIB IN B1 PATMAT 501
SB1 B1+1 . SET HOPE TO THE NUMBER OF CHARAC- PATMAT 502
SX0 X7+B2 . TERS IN THE REST OF THE STRING PATMAT 503
NG X0,YSTARP2 . OR TO HOPE - 1 WHICHEVER IS PATMAT 504
SX7 B0-B2 . SMALLER PATMAT 505
YSTARP2 SB2 YSTARPR PATMAT 506
SA7 A1+0 PATMAT 507
JP POPS . STACK RETURN INFORMATION PATMAT 508
YSTARPR SX3 A1 . (LIKE IN CASE OF EXP) PATMAT 509
SX7 B4 PATMAT 510
SX0 A0 PATMAT 511
LX7 18 PATMAT 512
SB4 X6 PATMAT 513
BX7 X7+X0 PATMAT 514
RJ ENTER . TRY TO MATCH THE PATTERN IN TH PATMAT 515
SX7 X4 . VARIABLE AND THE REST OF THIS PATMAT 516
AX4 18 . PATTERN PATMAT 517
SA7 X4+0 PATMAT 518
EQ ALTLFM . SEEK ALTERNATIVE IF IT FAILS PATMAT 519
* PATMAT 520
YLIT SB2 A0-2 . MATCH A LITERAL PATMAT 521
SX7 B4+1 PATMAT 522
SB2 X1+B2 PATMAT 523
SB4 X1+B4 PATMAT 524
LT B3,B2,ALTLF . LITERAL TOO LONG PATMAT 525
SB2 X1-2 PATMAT 526
SX6 A0+B2 PATMAT 527
SA4 B4 . LIT MAY USE X4 PATMAT 528
SX6 X6+1 PATMAT 529
LT B2,B0,YLIT2 PATMAT 530
YLIT1 SA1 A0+B2 PATMAT 531
SA2 X7+B2 PATMAT 532
SB2 B2-1 PATMAT 533
BX1 X1-X2 PATMAT 534
NZ X1,ALT . TRY ALTERNATIVE IF MISMATCH PATMAT 535
GE B2,B0,YLIT1 PATMAT 536
YLIT2 DF X4,ENTERX6 PATMAT 537
SX2 X6 PATMAT 538
SB2 A0 PATMAT 539
RJ ASSIGNS PATMAT 540
EQ ENTERX6 PATMAT 541
* PATMAT 542
YANY SB2 A0+0 . ANY-PATTERN ELEMENT PATMAT 543
SX7 0 . DO NOT NEGATE BIT TABLE PATMAT 544
YANY1 SA2 A0 . FETCH CHARACTER TO BE MATCHED PATMAT 545
SB4 B4+X1 PATMAT 546
LT B3,B2,ALTLF . STRING TOO SHORT PATMAT 547
SA4 B4 PATMAT 548
LX2 59 PATMAT 549
SA1 B4-1 . FETCH EVEN OR ODD PATMAT 550
NG X2,YANY2 . BIT TABLE WORD DEPENDING PATMAT 551
SA1 B4-2 . ON THE CHARACTER PATMAT 552
YANY2 SB2 X2 PATMAT 553
LX1 43 PATMAT 554
LX1 X1,B2 . SELECT BIT PATMAT 555
BX1 X1-X7 . NEGATE BIT IF NOTANY PATMAT 556
PL X1,ALT PATMAT 557
SX6 A0+1 PATMAT 558
DF X4,ENTERX6 PATMAT 559
JP YTAB0 PATMAT 560
* PATMAT 561
YNOTANY SB2 A0 . NOTANY-PATTERN ELEMENT PATMAT 562
MX7 60 . NEGATE BIT TABLE PATMAT 563
JP YANY1 PATMAT 564
YSPAN SB4 B4+X1 . SPAN PATTERN ELEMENT PATMAT 565
BX0 X0-X0 . 0 IN X0 FLAGS SPAN PATMAT 566
JP YBREAK1 PATMAT 567
* PATMAT 568
YBREAK SB4 B4+X1 . BREAK PATTERN ELEMENT PATMAT 569
MX0 42 . AVOID -0 PATMAT 570
LX0 18 PATMAT 571
YBREAK1 SA1 B4-1 . FETCH BIT TABLES PATMAT 572
SA4 B4-2 . X4-EVEN, X7-ODD PATMAT 573
SB2 B0 . COUNT NUMBER OF CHARS PATMAT 574
LX1 43 PATMAT 575
LX4 43 PATMAT 576
BX7 X1 PATMAT 577
YBREAK2 SX1 A0+B2 PATMAT 578
SX2 B3 PATMAT 579
IX2 X2-X1 PATMAT 580
SA1 X1 . FETCH NEXT CHARACTER PATMAT 581
SX6 B2 . SAVE B2 IN X6 PATMAT 582
NG X2,YBREAK4 . END OF STRING REACHED PATMAT 583
LX1 59 PATMAT 584
BX2 X7 . SELECT BIT TABLE WORD PATMAT 585
NG X1,YBREAK3 . BRANCH IF ODD PATMAT 586
BX2 X4 PATMAT 587
YBREAK3 SB2 X1+0 PATMAT 588
LX2 B2,X2 . SELECT BIT PATMAT 589
BX2 X2-X0 . NEGATE IF BREAK PATMAT 590
PL X2,YBREAK5 PATMAT 591
SB2 X6+1 . EXPAND MATCHED STRING PATMAT 592
EQ YBREAK2 PATMAT 593
YBREAK4 NG X0,ALTLF . BRANCH IF BREAK AND END REACHED PATMAT 594
YBREAK5 BX2 X6-X0 PATMAT 595
SA1 B4 PATMAT 596
ZR X2,ALT . BRANCH IF SPAN AND NONE MATCHED PATMAT 597
SX2 A0 . MATCH X6 CHARACTERS PATMAT 598
IX6 X6+X2 PATMAT 599
DF X1,ENTERX6 PATMAT 600
SB2 A0 PATMAT 601
BX2 X6 PATMAT 602
JP YTAB1 PATMAT 603
* PATMAT 604
EXIT SX7 EXIT1 . EXIT FROM THE RECURSIVE PATMAT 605
EQ SETSIPI . PROCEDURE PATMAT 606
EXIT1 SB6 B6-4 . DECREASE STACK PATMAT 607
SA1 B6+3 PATMAT 608
SA4 B6+1 . RESTORE X4,X5,A0,B4 PATMAT 609
SA0 X1 PATMAT 610
AX1 18 PATMAT 611
SA5 B6+2 PATMAT 612
SB4 X1+0 PATMAT 613
JP B6+4 . AND RETURN (THE ADDRESSES CELL PATMAT 614
. CONTAINS AN EQ JUMP) PATMAT 615
* X0,X1,X2,X7,B2 PATMAT 616
* PATMAT 617
ASSIGNS NO PATMAT 618
+ SX0 -1 PATMAT 619
SX2 X2-1 . LAST IN STRING TO X2 PATMAT 620
ASGNS1 SX0 X0+1 PATMAT 621
SA1 X0+B4 . NEXT ASSIGNMENT PATMAT 622
DF X1,ASSIGNS . RETURN IF NO MORE ASSIGNMENTS PATMAT 623
SX7 B2 PATMAT 624
NG X1,ASGNS2 . BRANCH IN INSTANT ($) ASSIGNMENT PATMAT 625
SX7 X1 . VARIABLE ADDRESS TO P STACK PATMAT 626
SA1 PIX PATMAT 627
LX7 18 PATMAT 628
BX7 X7+X1 PATMAT 629
SA1 B7 PATMAT 630
NZ X1,ASGNS3 PATMAT 631
RJ MORFREE PATMAT 632
ASGNS3 SA7 A1 PATMAT 633
SB7 X1 PATMAT 634
BX7 X2 . PACK LAST AND FIRST IN STRING PATMAT 635
SX1 B2 . INTO X7 PATMAT 636
LX7 18 PATMAT 637
BX7 X1+X7 PATMAT 638
SX1 A1 PATMAT 639
LX7 18 PATMAT 640
BX7 X7+X1 . X7 TO P STACK PATMAT 641
SA1 B7 PATMAT 642
NZ X1,ASGNS4 PATMAT 643
RJ MORFREE PATMAT 644
ASGNS4 SA7 A1 PATMAT 645
SB7 X1+0 PATMAT 646
SX7 A1 . CODE TO BUMP P STACK POINTER (PIX) PATMAT 647
SA1 PIB . AND WORD COUNT (PIB) PATMAT 648
SA7 PIX PATMAT 649
SX7 X1+2 PATMAT 650
SA7 A1 PATMAT 651
EQ ASGNS1 PATMAT 652
ASGNS2 SA6 PMASX6 . $ TYPE ASSIGNMENT PATMAT 653
SA7 PMASB2 PATMAT 654
BX7 X0 PATMAT 655
BX6 X3 PATMAT 656
SA7 PMASX0 . SAVE REGISTERS PATMAT 657
SX3 X1 PATMAT 658
BX7 X2 PATMAT 659
SA6 PMASX3 PATMAT 660
SA7 PMASX2 PATMAT 661
BX7 X4 PATMAT 662
SX6 B1 PATMAT 663
SA7 PMASX4 PATMAT 664
SA6 PMASB1 PATMAT 665
SB3 X2 PATMAT 666
SX7 B4 PATMAT 667
SA7 PMASB4 . CONVERT PART OF THE STRING FROM PATMAT 668
RJ STOSFX6 . FIRST TO LAST INTO SF FORMAT PATMAT 669
SA6 TEMPDOL PATMAT 670
SB2 TEMPDOL+1 PATMAT 671
SA6 B2 . MAKE SURE SF TYPE PATMAT 672
RJ SASSIGN PATMAT 673
SA1 SLENGTH PATMAT 674
SA2 MAXSTAK PATMAT 675
SA3 PMASX0 PATMAT 676
SA4 PMASX6 . RESTORE REGISTERS PATMAT 677
SB3 X1 PATMAT 678
SB5 X2 PATMAT 679
BX0 X3 PATMAT 680
BX6 X4 PATMAT 681
SA1 PMASB1 PATMAT 682
SA2 PMASB4 PATMAT 683
SA3 PMASX3 PATMAT 684
SA4 PMASX4 PATMAT 685
SB1 X1 PATMAT 686
SB4 X2 PATMAT 687
SA1 PMASB2 PATMAT 688
SA2 PMASX2 PATMAT 689
SB2 X1+0 PATMAT 690
SB5 B0-B5 PATMAT 691
EQ ASGNS1 PATMAT 692
* PATMAT 693
TITLE DEFINITIONS OF PM OPERATIONS PATMAT 694
* PATMAT 695
PRDPM EQU 1777B . NOTE. POSITIVE INDEFINITE PATMAT 696
DOLPM EQU 6000B . NEGATIVE INDEFINITE PATMAT 697
* PATMAT 698
* PATMAT 699
ENDEXPM EQU YENDEX-YSTAR+1777B . NOTE NEGATIVE VALUES PATMAT 700
ALTPM EQU YALTER-YSTAR+1777B PATMAT 701
EXPPM EQU YEXP-YSTAR+1777B PATMAT 702
ARBPM EQU YARB-YSTAR+1777B PATMAT 703
LENPM EQU YLEN-YSTAR+1777B PATMAT 704
POSPM EQU YPOS-YSTAR+1777B PATMAT 705
RPOSPM EQU YRPOS-YSTAR+1777B PATMAT 706
TABPM EQU YTAB-YSTAR+1777B PATMAT 707
RTABPM EQU YRTAB-YSTAR+1777B PATMAT 708
REMPM EQU YREM-YSTAR+1777B PATMAT 709
BALPM EQU YBAL-YSTAR+1777B PATMAT 710
FAILPM EQU YFAIL-YSTAR+1777B PATMAT 711
FENCEPM EQU YFENCE-YSTAR+1777B PATMAT 712
ABORTPM EQU YABORT-YSTAR+1777B PATMAT 713
ARBNOPM EQU YARBNO-YSTAR+1777B PATMAT 714
* PATMAT 715
STARPM EQU YSTAR-YSTAR+2000B . NOTE ZERO VALUE PATMAT 716
* PATMAT 717
LITPM EQU YLIT-YSTAR+2000B . NOTE POSITIVE VALUES PATMAT 718
ANYPM EQU YANY-YSTAR+2000B . THE ELEMENTS ARE FOLLOWED PATMAT 719
NTANYPM EQU YNOTANY-YSTAR+2000B . BY A CHARACTER STRING PATMAT 720
SPANPM EQU YSPAN-YSTAR+2000B PATMAT 721
BREAKPM EQU YBREAK-YSTAR+2000B PATMAT 722
* PATMAT 723
NALTPMP EQU -ALTPM+1777B PATMAT 724
* PATMAT 725
END PATMAT 726