{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: RMTLFEND864)}}
====== RMTLFEND864 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BXE|BXE]], [[george:macro:BXU|BXU]], [[george:macro:DOWN|DOWN]], [[george:macro:EMPTY|EMPTY]], [[george:macro:FLIP|FLIP]], [[george:macro:LF|LF]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SLEEP|SLEEP]], [[george:macro:SLEEP2|SLEEP2]], [[george:macro:STEPAGAIN|STEPAGAIN]], [[george:macro:WAKEUP|WAKEUP]]
22FL #SEG RMTLFEND
22^= #LIS K0RMTLFEND>K0PCT>K0ALLGEO>K0GREATGEO
23DW 8HRMTLFEND
23YG # ENTRY POINTS
24D6 SEGENTRY K1RMTLFEND,Z1RMTLFEND
24XQ SEGENTRY K2RMTLFEND,Z2RMTLFEND
25CB #
25X2 [
26BL [THIS SEGMENT DEALS WITH THE END OF FILE PROCESSING AFTER RMTLF HAS
26W= [OUTPUT A FILE TO A REMOTE LP OR TP WHERE THE 7020 IS ATTACHED VIA A
27*W [MULTIPLEXOR/UNIPLEXOR/SCANNER -I.E. NOT A 7900.
27TG [THE CURRENT ACTIVITY IS AN ACTLF.
28*6 [ON ENTRY
28SQ [AWORK1 = +VE FOR LP OUTPUT. -VE FOR TP OUTPUT
29#B #DEF NUM=IWORK1
29S2 #DEF REST=IWORK2
2=?L #DEF NLI=IWORK3
2=R= #DEF TBITS=IWORK4
2?=W #DEF QUAL=IWORK5
2?QG #DEF ZFE5=#7635
2#=6 ZDLEFE1 #76007631
2#PQ #
2*9B SPLNUPAGE
2*P2 SMO FX1
2B8L LDN 1 ZDLEFE1
2BN= MVCH 1 4
2C7W LDCT 1 #200
2CMG SMO FX2
2D76 LDX 0 IWORK11
2DLQ SLL 0 12
2F6B ADN 0 ZFE5
2FL2 MVCH 1 3
2G5L LDX 1 FX2
2GK= SBN 6 7
2H4W SBN 7 3
2HJG EXIT 4 0
2J46 #
2JHQ STX #76227632
2K3B SNULL #76207620
2KH2 PF1 2,#76327620
2L2L PF2 4,#76327632
2LG= PF12 #763301
2L^W #
2MFG #
2M^6 # SUBROUTINE TO RELOCATE FILE RECORD EITHER IN FILE ITSELF OR IN
2NDQ # THE ADATA,ACONV BLOCK
2NYB #
2PD2 RECLOC
2PXL LDXC 0 QUAL(2)
2QC= BCC STEPAGAIN [J IF NO TRANSFORMING
2QWW RCONV MHUNTW 3,ADATA,ACONV [LOCATE TRANSFORM BLOCK
2RBG ADN 3 A1
2RW6 BRN (4)
2S*Q STEPAGAIN
2STB SBX 4 FX1
2T*2 STEPAGAIN [RELOCATE RECORD
2TSL ADX 4 FX1
2W#= BRN (4)
2WRW #
2X?G #
2XR6 # SUBROUTINE TO WAKE UP THE PCT POLLING ACTIVITY
2Y=Q #
2YQB WAKUP WAKEUP LF
2^=2 EXIT 6 0
2^PL #
329= # SUBROUTINE TO GET THE LAST CHARACTER DEPOSITED
32NW #
338G SBACK STO 0 GEN0 [SAVE LINK
33N6 SLC 2 2 [STEP BACK THE OUTPUT POINTER
347Q SBN 2 1
34MB SRC 2 2
3572 LDCH 0 0(2) [GET THE CHAR.
35LL BRN (GEN0) [EXIT
366= #
36KW # SUBROUTINE TO SET UP THE "CLEAN FINISH" COUNT
375G #
37K6 SETCL LDN 0 CLEANUM [CLEANUM = 8 WHEN I LAST LOOKED
384Q ADXC 0 AWORK1(2) [J IF TP
38JB BCS SETTP
3942 SLL 0 2 [*4 FOR *LP (APPROX 1/2 PAGE FULL)
39HL SETTP SBN 0 1 [FAIRLY ARBITRARY
3=3= STO 0 IWORK15(2) [TEST WHEN IT GOES -VE
3=GW EXIT 4 0
3?2G #
3?G6 # SUBROUTINE TO FLIP, IF X6 IS NON-ZERO, THEN GET THE NEXT BUFFER
3?^Q #
3#FB SFLIP MHUNTW 3,A7020,ALIST [FIND THE OUTPUT BUFFER BLOCK
3#^2 STO 3 AWORK2(2) [REMEMBER ITS ADDRESS
3*DL BZE 6 SLEEP [J IF FLIP SWITCH UNSET
3*Y= FLIP [TELL PCT ACTIVITY WE'RE READY TO GO
3BCW BRN SLEEP [J TO SET UP THE NEXT OUTPUT BUFFER
3BXG #
3CC6 # SUBROUTINE TO STEP ON TO THE NEXT BUFFER WHEN IT IS AVAILABLE
3CWQ #
3DBB SLP1 SBX 4 FX1 [RELATIVISE LINK
3DW2 CALL 7 WAIT [WAIT FOR A BUFFER TO BECOME FREE
3F*L ADX 4 1
3FT= ORX 4 GSIGN [SET LINK -VE TO SHOW COORDINATION
3G#W #
3GSG SLEEP LDCT 0 #103 [J IF ERROR, MOP OFF OR INOP. TERMIN
3H#6 ANDX 0 EWAIT(3)
3HRQ BNZ 0 SLP1
3J?B LDX 1 INTLK3(3) [POINTER TO CURRENT BUFFER
3JR2 LDX 2 FX2
3K=L CALL 6 SPL19
3KQ= BRN U [J IF NOT 1901A
3L9W BRN XCLN
3LPG U LDXC 6 5 [J UNLESS END OF TRANSFER COINCIDES
3M96 BNZ 6 XCLN [WITH END OF RECORD (OR LINE)
3MNQ STO 4 GEN4 [SAVE LINK, THEN RESET THE COUNT
3N8B LDX 6 GSIGN [OF LINES TO THE NEXT FORCED CLEAN
3NN2 CALL 4 SETCL [FINISH, AND MARK THIS BUFFER AS
3P7L SMO 1 [MESSAGE-CAN-END-WITH-THIS-TRANSFER
3PM= ORS 6 INTLK2(3)
3Q6W LDX 4 GEN4
3QLG XCLN SBN 1 ALFBUFFNUM-1 [STEP ON TO THE NEXT BUFFER
3R66 BZE 1 NEXZO
3RKQ ADN 1 ALFBUFFNUM
3S5B SMO 1
3SK2 NEXZO LDXC 6 INTLK(3) [HAS IT BEEN EMPTIED YET?
3T4L BCS SLP1 [J IF NOT
3TJ= ANDN 6 -1 [GET POINTER TO START OF BUFFER
3W3W ORX 6 GSIGN [ALLOW 2 CHARS. FOR STX
3WHG ADN 6 ACTBUFF
3X36 STO 6 AWORK3(2) [REMEMBER CURRENT POINTER
3XGQ SMO FX1 [PUT STX INTO
3Y2B LDX 0 STX
3YG2 SMO 6
3Y^L STO 0 0(3)
3^F= LDX 0 IWORK14(2) [SET THE RESTART LINE NO.
3^YW SMO 1 [FOR THE LAST BUFFER
42DG STO 0 INTLK2(3)
42Y6 STO 1 INTLK3(3) [SET POINTER TO NEW BUFFER
43CQ #SKI ALTEBCC<1$1
43XB (
44C2 LDN 7 78 [RESET 7-BIT BLOCK CHAR. COUNT
44WL LDN 6 118 [AND 6-BIT TRANSFER CHAR. COUNT
45B= )
45TW #SKI ALTEBCC
46*G (
46T6 STO 6 IWORK10(2) [REMEMBER POINTER FOR START OF OUTPUT
47#Q LDN 7 72 [RESET CHAR COUNTS ALLOWING FOR
47SB LDN 6 112 [SIX EXTRA BCC CHARS.
48#2 )
48RL EXIT 4 0 [WILL SET V IF COORDINATED, AS B0 SET
49?= #
49QW # SUBROUTINE TO DO SLEEP MACRO, EXITING ONLY IF NO ERROR CONDITION
4==G # OCCUR
4=Q6 #
4?9Q WAIT SBX 7 FX1 [RELATIVISE LINK
4?PB SLEEP2 RLINE,REST1 [WAIT FOR BUFFER TO BECOME FREE
4#92 MHUNTW 3,A7020,ALIST [RELOCATE THE BUFFER BLOCK
4#NL ADX 7 1 [RESET LINK
4*8= STO 3 AWORK2(2) [REMEMBER BLOCK ADDRESS
4*MW EXIT 7 0
4B7G REST1 ACROSS RMTLF,3
4BM6 #
4C6Q # SUBROUTINE TO CLEAR UP LAST BUFFER, STEP ONTO THE NEXT, & RESET PT
4CLB #
4D62 TREND SBX 3 ACOMMUNE3(1) [RELATIVISE POINTER DOWN INPUT RECORD
4DKL SBX 4 FX1 [RELATIVISE AND PRESERVE LINK
4F5= STO 3 IWORK11(1)
4FJW STO 4 IWORK13(1)
4G4G LDX 3 AWORK2(1) [POINTER TO ALIST BLOCK
4GJ6 LDX 6 INTLK3(3)
4H3Q LDN 0 1
4HHB ADS 0 ALFTRANS(1) [UPDATE TRANSFER COUNT
4J32 CALL 0 SBACK
4JGL SBN 0 #74 [(OVERWRITE LAST CHAR. DEPOSITED
4K2= BPZ 0 TRED1 [IF IT WAS A SHIFT).
4KFW BCHX 2 £
4K^G TRED1
4LF6 #SKI ALTEBCC
4LYQ CALL 4 SBC [CALC. BCC FOR THIS BUFFER & STORE
4MDB LDX 1 GSIGN
4MY2 LDN 0 #7607
4NCL SMO 6
4NX= ORS 1 INTLK(3)
4PBW MVCH 1 2
4PWG XRJE CALL 6 WAKUP [KICK THE OUTPUT ACTIVITY IF ASLEEP
4QB6 CALL 4 SLEEP [STEP ON TO NEXT BUFFER
4QTQ BVCR NCOOR [J UNLESS WE NEED TO RESET POINTERS
4R*B LDX 3 ACOMMUNE3(2) [J IF END OF FILE HAS BEEN REACHED
4RT2 BZE 3 NCOOR
4S#L CALL 4 RECLOC [FIND INPUT RECORD AGAIN
4SS= STO 3 ACOMMUNE3(2) [SAVE POINTER TO RECORD
4T?W NOREC MHUNTW 3,A7020,ALIST [AND THE BUFFER BLOCK IF STEP COOR-ED
4TRG STO 3 AWORK2(2)
4W?6 NCOOR LDX 1 FX2
4WQQ LDX 2 AWORK2(1) [SET NEW OUTPUT POINTER
4X=B LDX 4 REST(1)
4XQ2 ADX 2 AWORK3(1)
4Y9L BNZ 4 XLINE [IF LINE RESTARTS GET THE
4YP= LDX 0 IWORK19(1) [RECORD NO. AT START OF LAST BUFFER
4^8W STO 0 IWORK14(1) [REMEMBER FOR INSERTION IN NEXT INTLK
4^NG LDX 0 NUM(1) [RECORD NUMBER AT START OF THIS BUFF.
5286 STO 0 IWORK19(1) [SAVE FOR INSERTION IN NEXT IWORK14
52MQ XLINE LDX 3 ACOMMUNE3(1)
537B LDXC 4 IWORK13(1)
53M2 BCC NSPLD
546L CALL 4 SPLNUPAGE
54L= LDXC 4 IWORK13(1)
555W BRN SPLE
55KG NSPLD
5656 ADX 3 IWORK11(1) [RESET THE INPUT POINTER
56JQ SPLE ADX 4 FX1 [RECONSTITUTE THE LINK
574B LDXC 0 AWORK1(1) [EXIT IF LP
57J2 BCC (4)
583L LDN 0 #75 [OR IF CURRENT SHIFT IS ALPHA
58H= BXU 0 IWORK16(1),(4)
592W SBN 6 1 [INSERT BETA AT START OF BUFFER
59GG DCH 0 0(2) [STEP DOWN TRANSFER COUNT
5=26 BCHX 2 (4)
5=FQ #
5=^B SPL19 LDX 0 EWAIT(3)
5?F2 SRC 0 3
5?YL BNG 0 SPLYY [J IF SPOOLING
5#D= SLC 0 2
5#XW BPZ 0 (6) [J IF NOT 1901A RJE
5*CG YSSTP SMO FX2
5*X6 LDXC 0 AWORK1
5BBQ BCS (6) [J IF TP
5BWB SPLYY EXIT 6 1
5CB2 #
5CTL #SKI ALTEBCC
5D*= (
5DSW # SUBROUTINE TO CALCULATE BCC FOR LAST BUFFER & PUT IN BUFFER AS
5F#G # SIX CHARACTERS BEFORE ETX/ETB
5FS6 #
5G?Q SBC SMO FX2
5GRB LDXC 0 AWORK1
5H?2 BCS (4) [J IF TP
5HQL LDX 0 2 [SAVE OUTPUT POINTER
5J== LDX 2 FX2
5JPW STO 4 ACOMMUNE4(2) [SAVE LINK
5K9G STO 0 ACOMMUNE2(2)
5KP6 LDX 4 IWORK10(2) [GET RELATIVE POINTER FOR START
5L8Q LDX 1 0 [POINTER TO END OF DATA
5LNB SBX 1 AWORK2(2) [RELATIVISE END POINTER
5M82 SLC 1 2 [CONVERT TO CHARS.
5MML SLC 4 2 [CONVERT TO CHARS.
5N7= SBX 1 4 [NO. OF CHARS. IN OUTPUT BUFFER
5NLW LDX 0 1
5P6G LDX 1 AWORK2(2)
5PL6 ADX 1 IWORK10(2) [START ADDRESS OF DATA
5Q5Q LDX 2 0
5QKB LDN 0 0 [INITIALISE SBC
5R52 SBC1 LDCH 4 0(1) [GET NEXT CHAR
5RJL ERX 0 4
5S4= SLC 0 1 [ADD TO SBC
5SHW BCHX 1 £ [J IF COUNT NOT ZERO
5T3G BCT 2 SBC1
5TH6 SMO FX2
5W2Q LDX 2 ACOMMUNE2
5WGB LDN 4 6
5X22 LDX 1 0 [SBC IN X1
5XFL SBC2 LDN 0 0
5X^= SLL 01 4 [EXPAND 4 BITS TO A CHAR
5YDW DCH 0 0(2) [PUT IN BUFFER
5YYG BCHX 2 £
5^D6 BCT 4 SBC2 [TO 6 CHARS.
5^XQ SMO FX2
62CB LDX 4 ACOMMUNE4 [RESTORE LINK
62X2 EXIT 4 0
63BL )
63W= #
64*W # SECTION TO DEAL WITH LINE RESTARTS
64TG # IN THE CASE OF RESTARTS RENGAGE RESETS THE ACTLF BEFORE COMING
65*6 # BACK UP
65SQ #
66#B RLINE CALL 4 RECLOC [GET POINTER TO RESTART RECORD
66S2 LDN 6 1 [SET MARKER TO FORCE FLIP
67?L ACROSS RMTLF,4
67R= #
68=W #
68QG #
69=6 #
69PQ Z1RMTLFEND
6=9B BZE 6 RLOC [J OUT IF NOT JUST ENTERED
6=P2 CALL 4 SFLIP [FLIP, AND GET NEXT BUFFER
6?8L CALL 3 OUTPT [1ST. REC: SET UP "FILE EMPTY" MESS.
6?N= 14,12,10HFILE EMPTY
6#7W #
6#MG #
6*76 #
6*LQ RLOC MHUNTW 3,A7020,ALIST [RELOCATE THE BUFFER BLOCK
6B6B LDN 4 0 [SET "END" MARKER
6BL2 BRN NOWT
6C5L #
6CK= #
6D4W OUTPT LDX 1 FX2 [RESET X1 TO CURRENT ACTIVITY AND
6DJG LDX 2 AWORK2(1) [X2 TO CURRENT POSITION IN OUTPUT
6F46 LDX 5 AWORK1(1) [LP/TP SWITCH WORD [BUFFER
6FHQ ADX 2 AWORK3(1)
6G3B BZE 5 XTP [J IF LINE PRINTER
6GH2 LDN 0 #74
6H2L SBN 6 4 [ALLOW FOR EXTRA RUNOUT CHARS.
6HG= SBN 7 2
6H^W BXE 0 IWORK16(1),XTP [J IF ALREADY IN ALPHA SHIFT
6JFG DCH 0 0(2) [OTHERWISE SET ALPHA
6J^6 SBN 6 1 [ALLOW FOR EXTRA SHIFT CHAR.
6KDQ STO 0 IWORK16(1)
6KYB BCHX 2 £ [STEP OUTPUT POINTER
6LD2 #
6LXL XTP SBX 6 0(3) [NO OF TRANSMISSION CHARS IN MESSAGE
6MC= BNG 6 TR6 [J IF TOO LONG FOR THIS BUFFER
6MWW SBXC 7 1(3) [DITTO 7-BIT DATA CHARS.
6NBG BCC XTR6
6NW6 TR6 SBX 3 FX1 [RELATIVISE CALL ADDRESS
6P*Q CALL 4 TREND [STEP ON TO NEXT BUFFER
6PTB LDN 7 0 [SET X7 SO WE DONT STEP BACK AT YCF4
6Q*2 ADX 3 FX1 [NB X3 IS PRESERVED IF ACOMM3 = 0
6QSL #
6R#= XTR6 BNG 5 TP7 [J IF NOT LINE PRINTER
6RRW SMO FX1 [INSERT 2 NEW LINES
6S?G LDN 1 PF2+1
6SR6 MVCH 1 4
6T=Q TP7 LDN 1 2(3) [MOVE IN THE MESSAGE
6TQB SMO 1(3)
6W=2 MVCH 1 -2
6WPL BZE 5 YCF2 [J IF NOT TAPE PUNCH
6X9= LDX 3 FX1 [INSERT NEWLINE + 3 RUNOUTS
6XNW LDN 1 PF1+1(3)
6Y8G MVCH 1 4
6YN6 LDN 1 SNULL(3)
6^7Q MVCH 1 4
6^MB #
7272 YCF2 SMO FX2 [POINTER TO ALIST BLOCK
72LL LDX 3 AWORK2
736= BRN YCF4A
73KW Z2RMTLFEND
745G YCF4
74K6 MHUNTW 3,A7020,ALIST
754Q SMO FX2
75JB STO 3 AWORK2
7642 YCF4A
76HL LDX 2 3
773= SMO FX2
77GW ADX 2 AWORK3
782G LDX 6 INTLK3(3) [GET POINTER TO BUFFER'S RED TAPE WD
78G6 LDX 1 GSIGN
78^Q SMO 6 [MARK BUFFER AS FILLED
79FB ORS 1 INTLK(3)
79^2 SMO 6 [AND "CLEAN"
7=DL ORS 1 INTLK2(3)
7=Y= CALL 0 SBACK [MOVE IN ETB TO END BLOCK.
7?CW SBN 0 #74 [(OVERWRITE LAST CHAR DEPOSITED
7?XG BPZ 0 TRED2 [IF IT WAS A SHIFT)
7#C6 BCHX 2 £
7#WQ TRED2 ADN 1 ETXBUFF(3) [MOVE IN #7635(#7620 IF TP)
7*BB CALL 6 SPL19
7*W2 BRN XCTP [J IF NOT 1901A RJE LP
7B*L LDN 0 3 [WILL BECOME DC3
7BT= #SKI ALTEBCC<1$1
7C#W (
7CSG MVCH 1 6
7D#6 SLC 2 2
7DRQ SBN 2 3
7F?B SRC 2 2
7FR2 DCH 0 0(2)
7G=L )
7GQ= #SKI ALTEBCC
7H9W (
7HPG MVCH 1 4 [CR DC3 INTO BUFFER
7J96 SLC 2 2
7JNQ SBN 2 1
7K8B SRC 2 2
7KN2 DCH 0 0(2)
7L7L SMO FX2
7LM= STO 1 ACOMMUNE1 [SAVE ETXBUFF POINTER
7M6W CALL 4 SBC [WORK OUT BCC & PUT IN BUFFER
7MLG SMO FX2
7N66 LDX 1 ACOMMUNE1 [RESTORE POINTER
7NKQ MVCH 1 2 [ETX IN BUFFER
7P5B )
7PK2 BRN NOWT
7Q4L XCTP MVCH 1 2
7QJ= ORX 1 GSIGN [MOVE IN #7623 ETX (PLAIN ETB SEEMS
7R3W #SKI ALTEBCC
7RHG (
7S36 SMO FX2
7SGQ STO 1 ACOMMUNE1
7T2B CALL 4 SBC
7TG2 SMO FX2
7T^L LDX 1 ACOMMUNE1
7WF= )
7WYW MVCH 1 2 [TO UPSET THE LINE PRINTER SOMETIMES
7XDG NOWT CALL 6 WAKUP [KICK THE PCT ACTIVITY IF DORMANT
7XY6 LDN 6 0 [SET MARKER SO WE DONT REFLIP
7YCQ SMO FX2
7YXB LDXC 0 IWORK20
7^C2 BCC MAINFILE [J IF MAINFILE
7^WL LDCT 5 #200 [SET "DC4" MARKER IN LAST BUFFER
82B= SMO INTLK3(3) [OF SETUP LISTING TO DISENGAGE *LP
82TW ORS 5 INTLK2(3)
83*G #
83T6 MAINFILE
84#Q SMO INTLK3(3)
84SB LDXC 0 INTLK2(3)
85#2 BCS ZCLOK
85RL CALL 4 SFLIP
86?= LDX 2 AWORK3(2) [RESET THE BUFFER WORD
86QW ADX 2 3
87=G BRN YCF4
87Q6 ZCLOK
889Q LDCT 6 #20 [SET THE "LISTING FINISHED" MARKER
88PB XWAKE LDCT 4 #100 [UNLESS WE'VE HAD A DEVICE ERROR, IN
8992 ORS 6 EWAIT(3) [WHICH CASE ENSURE THAT IT IS NOT SET
89NL ANDX 4 EWAIT(3)
8=8= BZE 4 YWAIT
8=MW ERS 6 EWAIT(3)
8?7G YWAIT CALL 7 WAIT [WAIT FOR THE OUTPUT TO FINISH
8?M6 LDCT 0 #10 [WAIT AGAIN UNLESS THE "OUTPUT FINISH
8#6Q ANDX 0 EWAIT(3) [MARKER" HAS NOW BEEN SET
8#LB BZE 0 XWAKE
8*62 ERS 0 EWAIT(3) [CLEAR IT IF SO
8*KL #
8B5= LDX 4 IWORK20(2)
8BJW LDCT 0 #100 [RESET THE AWORK WORDS FOR LISTEND
8C4G ANDX 0 4 [(OR LISTING OF MAINFILE)
8CJ6 STO 4 AWORK4(2)
8D3Q STO 0 AWORK2(2)
8DHB BZE 0 NOTSETUP [J NOT SETUP FILE
8F32 BPZ 4 SENOTLISTED [J IF JUST FINISHED MAINFILE
8FGL DOWN RENGAGE,3 [OUTPUT PLEASE LINE UP MSG
8G2= ACROSS RMTLF,1 [TO LIST SETUP FILE AGAIN
8GFW SENOTLISTED
8G^G NOTSETUP
8HF6 LDXC 0 REST(2) [J UNLESS PAGE RESTARTS,
8HYQ BCC YCLOS
8JDB MFREEW ADATA,IPTEMP [IN WHICH CASE THE RESTART BLOCK
8JY2 YCLOS
8KCL ACROSS PCTLISTB,2 [FOR LINE OF *'S
8KX= #
8LBW #
8LWG #END
^^^^ ...542340740002