(George Source)
Macros used: ACROSS, ALTLENG, FREECORE, HUNTW, MHUNTW, SEGENTRY
22FL #SEG IPBTAPE [IPB - COMM 22^= [ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 23DW #LIS K0IPBTAPE>K0IPB>K0ALLGEO 23YG 8HIPBTAPE 24D6 # 24XQ SEGENTRY K1IPBTAPE,SK1IPBTAPE 25CB SALPH #74 25X2 SHIFT #76 26BL XA #41 26W= TYPTAB 27*W BRN TCT 27TG #10 28*6 BRN STLEG 28SQ #20 29#B BRN STRAL 29S2 #21 2=?L BRN TCT 2=R= #27 2?=W BRN STLEG 2?QG #30 2#=6 BRN SPACK 2#PQ #31 2*9B BRN TABEX 2*P2 #32 2B8L BRN TCT 2BN= #33 2C7W BRN STLEG 2CMG #35 2D76 BRN ZCAR 2DLQ #36 2F6B BRN STLEG 2FL2 #40 2G5L BRN TCT 2GK= #64 2H4W BRN TNATC 2HJG #70 2J46 BRN STLEG 2JHQ #73 2K3B BRN STRAL 2KH2 #74 2L2L BRN STLEG 2LG= #100 2L^W # 2MFG # SUBROUTINE TO RE-FIND BLOCK BEING LENGTHENED BY ALTLENG 2M^6 # 2NDQ REH MHUNTW 2,ADATA,CREADL 2NYB EXIT 1 0 2PD2 # 2PXL [ 2QC= [ K1 IPBTAPE 2QWW [ 2RBG SK1IPBTAPE 2RW6 # 2S*Q # INPUT FROM REMOTE TAPE READER ; NPU IS MAXIMUM OR UP TO ETX ; 2STB # CONVERSION COMPLETE AFTER 2000 CHARS OR NEWLINE OR ETX : STORE 2T*2 # RECORD IN FILE ; IN GRAPHIC MODE CONVERT PAIRS FROM LINE CODE 2TSL # 2W#= # CHANGE FROM BETA TO ALPHA SHIFT BETWEEN IDATSGS CAUSES ALPHA SHIFT 2WRW # TO BE LOST : MUST INSERT #74 IF MEET SHIFT SENSITIVE CHARACTER 2X?G # (I.E. A LETTER) BEFORE #75 IN NORMAL OR ALLCHARS MODE WHEN LAST 2XR6 # BLOCK ENDED IN BETA SHIFT ; OTHERWISE DISCARD REDUNDANT #75 2Y=Q # 2YQB MHUNTW 3,ADATA,CREADL 2^=2 MHUNTW 2,ADATA,INPUSG 2^PL LDX 1 FX2 2^^D ... STO 3 ACOMMUNE5(1) 329= LDEX 5 A1(3) 32NW LDX 6 A1(2) [ROOM LEFT IN PARTIALLY FULL OR 128 338G ANDN 6 #7777 [NO. CHARS IN INPUT SEG 33N6 ADX 3 ACOMMUNE6(1) [CPDATA OR DCH POINTER IF PART FULL 347Q ADX 2 ACOMMUNE4(1) [LDCH POINTER IF PART USED OR A1+2 34CJ ... SBS 2 ACOMMUNE4(1) 34MB TAPE LDN 7 #6000 3572 ANDX 7 AWORK4(1) [B12 SET IF DISCARDING DATA DUE 35LL SLL 7 12 [TO TAB OUT OF RANGE 366= TAR 36KW LDCT 4 #300 375G STO 2 ACOMMUNE7(1) [IN CASE JUMP TO RINRE 37K6 LDCT 0 1 384Q ANDX 4 AWORK4(1) [B1 SET IF ALLCHAR ; B2 IF GRAPHIC 38JB ANDX 0 AWORK4(1) 3942 SLC 4 2 [>0 IF ALL ; 0 IF NORMAL ; <0 IF GRAP 39HL ERS 0 AWORK4(1) [B8 SET IF LAST BLOCK INCOMPLETE AND 3=3= LDX 1 FX1 [ENDED WITH #76 3=GW BNZ 0 TPAIR [TEST FOR DELTA PAIR 3?2G SMO FX2 3?G6 LDEX 1 AWORK4 3?^Q BZE 1 TLOOP [NO OUTSTANDING TAB SPACES TO STORE 3#FB SMO FX2 3#^2 DEX 0 AWORK4 3*DL ADN 6 1 [COUNTERACT BCT AFTER TUD 3*Y= BRN RINRE [STORE SPACES OUTSTANDING 3BCW # 3BXG TLOOP LDCH 0 0(2) 3CC6 LDX 1 FX1 3CWQ BCHX 2 £ 3DBB TXL 0 SALPH(1) 3DW2 BCS TSEN [< #74 3F*L TXU 0 SHIFT(1) [#76 3FT= BCC TDEL [LOOK FOR DELTA PAIR NEXT CHAR 3G#W BNG 4 TCT [DISCARD SHIFT IF GRAPHIC 3GSG SMO FX2 3H#6 LDEX 1 AWORK3 [OLD SHIFT 3HRQ SMO FX2 3J?B STO 0 AWORK3 [NEW SHIFT 3JR2 BNG 7 TCT [TAB OUT OF RANGE : DISCARD SHIFT 3K=L TXU 0 1 3KQ= BCC TCT [NO CHANGE 3L9W PUT DCH 0 0(3) 3LPG BCHX 3 £ 3M96 TUD BCT 5 TCT 3MNQ SBN 6 1 3N8B BRN TALT [CREADL FULL : INCREASE LENGTH BY 32 3NN2 # 3P7L TSEN BNG 7 TCT 3PM= ADN 7 1 3Q6W SMO FX2 3QLG LDXC 1 AWORK3 3R66 BCC PUT 3RKQ SMO FX1 3S5B TXL 0 XA [#41 3SK2 BCS PUT [NOT SHIFT SENSITIVE I.E. ALPHABETIC 3T4L LDN 1 #74 3TJ= DCH 1 0(3) 3W3W SMO FX2 3WHG STO 1 AWORK3 [SHIFT CHANGED 3X36 BCHX 3 £ 3XGQ SBN 5 1 3Y2B BNZ 5 PUT 3YG2 SBN 7 1 [CANCEL ADN AT TSEN 3Y^L BCHX 2 TMOB [NOT ENOUGH ROOM : MOVE BACK 1 CHAR 3^F= # 3^YW TDEL DCH 0 0(3) 42DG BCT 6 TPAIR [TEST FOR DELTA PAIR IF NOT BLOCK END 42Y6 LDX 1 FX2 43CQ LDCT 0 1 43XB ORS 0 AWORK4(1) [INDICATE IDATSG ENDED WITH #76 44C2 BRN TLAT [TEST FOR DELTA PAIR LATER 44WL TPAIR LDCH 0 0(2) 45B= BCHX 2 £ 45TW TXU 0 SHIFT(1) 46*G BCC TDEL [#7676 : IGNORE SECOND #76 46T6 BNG 7 TENEL [TEST FOR END OF RECORD ONLY 47#Q ADN 1 TYPTAB [POINT TO TABLE 47SB TYPLP 48#2 TXL 0 1(1) 48RL BCS (1) [J WHEN FOUND CHARAVCTER RANGE 49?= BDX 1 TYPLP [TRY NEXT CHARACTER RANGE 49QW STRAL [STORE IF ALLCHAR 4==G BZE 4 TCT [IGNORE IF NORMAL 4=Q6 STLEG [STORE UNLESS GRAPHIC 4?9Q BPZ 4 STIT [STORE IF ALLCHAR 4?PB BRN TCT [ELSE IGNORE 4#92 ZCAR LDN 7 0 [ZEROISE TAB COUNT 4#NL BNG 4 TCT 4*8= BRN STORO 4*MW STIT BUX 7 STORO 4B7G TNATC ADN 7 1 4BM6 BNG 4 TGR [IF GRAPHIC CONVERT #7664 - #7667 4C6Q STORO BCHX 3 £ 4CLB BCT 5 PUT 4D62 LDCT 0 1 [CREADL FULL : INDICATE CHAR IS PART 4DKL SMO FX2 [OF DELTA PAIR (FOR LATER) 4F5= ORS 0 AWORK4 4FJW BCHX 2 TMOB [FORWARD 1 , BACK 2 : INVERSE BCHX 4G4G SPACK SBN 7 1 [BACKSPACE : DECREMENT TAB COUNT 4GJ6 BNG 4 TCT [DO NOT STORE IF GRAPHIC 4H3Q BRN STORO 4HHB TGR ADN 0 #10 [CONVERT FROM LINE CODE 4J32 BRN PUT 4JGL # 4K2= # EXPAND #7631 = HORIZ TAB INTO SPACES ACCORDING TO TAB FIELDS SPEC. 4KFW # 4K^G TABEX LDX 1 FX2 4LF6 STO 2 ACOMMUNE7(1) 4LYQ HUNTW 2,AINPAR,ATB 4MDB LDN 0 #31 4MY2 BNG 2 NOTAB [NO TABS PARAMETER : PASS ON 4NCL ADN 7 1 4NX= LDX 1 A1(2) [COUNT OF TAB FIELDS 4PBW TABAG TXL 7 A1+1(2) 4PWG BCS THIST [THIS IS THE RELEVANT FIELD 4QB6 ADN 2 1 4QTQ BCT 1 TABAG 4R*B ADN 5 1 [COUNTERACT BCT AT TUD 4RT2 LDN 0 #6000 4S#L LDCT 7 #600 [COUNT TOO BIG : IGNORE REST OF BLOCK 4SS= SMO FX2 4T?W ORS 0 AWORK4 [SET 'DISCARD REST OF BLOCK' MARKER 4TRG BRN ONLY1 4W?6 THIST LDX 1 A1+1(2) 4WQQ SBX 1 7 4X=B LDX 7 A1+1(2) [UPDATE TAB COUNT 4XQ2 SBN 7 1 4Y9L RINRE TXL 5 1 [REENTRY PT AFTER CREADL LENGTHENED 4YP= BCC ROMOK [ENOUGH ROOM IN CREADL FOR SPACES 4^8W SBX 1 5 4^NG SMO FX2 5286 DEX 1 AWORK4 [SPACES TO BE INSERTED AFTER ALTLEN 52MQ LDX 1 5 [STORE SPACES TO END OF CREADL 537B ROMOK LDN 0 #20 53M2 SBN 1 1 546L DCH 0 0(3) 54L= LDX 2 3 555W BCHX 3 £ 55KG BZE 1 ONLY1 [STORE ONLY ONE SPACE 5656 MVCH 2 0(1) [STORE REQUISITE SPACES 56JQ SBX 5 1 574B ONLY1 SMO FX2 57J2 LDX 2 ACOMMUNE7 [RETRIEVE INPUSG POINTER 583L BRN TUD 58H= NOTAB LDX 2 ACOMMUNE7(1) 592W BPZ 4 STORO [STORE IF NOT GRAPHIC 59GG LDN 0 #20 5=26 BRN PUT [ELSE STORE 1 SPACE 5=FQ # 5=^B TENEL SBN 0 #32 [TEST FOR END OF RECORD AFTER TAB 5?F2 BNZ 0 TCT [OUT OF RANGE 5?YL TGNL LDN 0 #20 [SPACE-FILL REMAINDER OF 5#D= SACE TXL 3 BITS22LS [LAST WORD 5#XW BCS TNLF [B0-1 ZERO : POINTING TO CHAR 0 5*CG DCH 0 0(3) 5*X6 BCHX 3 SACE 5BBQ TNLF SBN 6 1 5BWB LDX 1 FX2 5CB2 ADS 2 ACOMMUNE4(1) [LDCH POINTER IN INPUSG FOR NEXT MESS 5CTL SBX 2 ACOMMUNE4(1) 5D*= DSA 6 A1(2) 5DSW TUNS LDX 0 BITS22LS 5F#G ANDS 0 AWORK3(1) [UNSET SHIFT-SENS-SEARCH BIT FOR NOW 5FS6 BRN TEND 5G?Q # 5GRB TCT BCT 6 TLOOP [PICK UP NEXT CHARACTER 5H?2 TCT2 LDX 1 FX2 [<127 CHARS ; END OF NPU 5HQL TLAT LDX 7 3 5J== NGX 2 ACOMMUNE4(1) [START ADDRESS OF ADATA/INPUSG 5JPW LDX 0 A1(2) 5K9G BPZ 0 TGSA [J IF NOT END OF NPU 5KP6 BUX 6 TGNL [INCREASE X6 AS SBN 1 LATER 5L8Q TGSA 5LNB LDX 3 ACOMMUNE5(1) 5M82 DEX 5 A1(3) [ROOM LEFT FOR CONVERTING INTO 5MML SBX 7 3 5N7= STO 7 ACOMMUNE6(1) [DCH POINTER WRT START OF BLOCK 5NLW FREECORE 2 5P6G BRN SEA [GET NEXT IDATSG TO COMPLETE MESSAGE 5PL6 # 5Q5Q # ADATA/CREADL FULL : INCREASE BY 32 WORDS UP TO MAX. OF 500 5QKB # 5R52 TWOB ADN 6 1 5RJL TMOB SLC 2 2 5S4= SBN 2 2 [MOVE BACK 2 CHARACTERS 5SHW SRC 2 2 5T3G TALT LDX 1 FX2 5TH6 ADS 2 ACOMMUNE4(1) 5W2Q SBX 2 ACOMMUNE4(1) 5WGB DSA 6 A1(2) [REMAINDER COUNT OF CHARS TO CONVERT 5X22 LDX 2 ACOMMUNE5(1) [START ADDRESS OF ADATA/CREADL 5XFL LDX 4 ALOGLEN(2) 5X^= LDX 3 4 5YDW LDN 0 CPDATA+500-A1 5YYG TXL 4 0 5^D6 BCC TMAR [2000 CHARS STORED : APPEND RECORD 5^XQ ADN 4 32 62CB LDN 5 128 62X2 TXL 4 0 63BL BCS TALEN 63W= LDN 4 CPDATA+500-A1 [ALREADY 480+CPDATA-A1 64*W LDN 5 80 64TG TALEN ALTLENG 2,4,REH 65*6 MHUNTW 2,ADATA,CREADL 65SQ LDX 1 FX2 66#B STO 2 ACOMMUNE5(1) 66S2 ADN 3 A1(2) [ADDRESS FOR NEXT DCH 67?L MHUNTW 2,ADATA,INPUSG 67R= ADX 2 ACOMMUNE4(1) [ADDRESS FOR NEXT LDCH 68=W SBS 2 ACOMMUNE4(1) [START ADDRESS OF ADATA/INPUSG 68QG BZE 6 TLAT [ALSO END OF IDATSG 69=6 LDCT 0 1 69PQ ANDX 0 AWORK4(1) 6=9B BZE 0 TAR [OK : LAST CHAR STORED NOT DELTA CHAR 6=P2 SBN 3 1 [STEP DCH ADDR BACK 1 CHAR TO DELTA 6?8L ORX 3 CACT [FOR STORO TO STORE DELTA PAIR 6?N= ADN 5 1 [STEP BACK BCT AS WELL 6#7W BRN TAR 6#MG TMAR 6*76 ACROSS READBULK,3 [STORING 2000 CHARS RECORD 6*LQ TEND 6B6B ACROSS READBULK,4 [END OF MESSAGE 6BL2 SEA 6C5L ACROSS READBULK,5 [GET NEXT IDATSG TO COMPLETE MESSAGE 6CK= #END ^^^^ ...541245620002