MOPOUT85

(George Source)

Macros used: ACROSS, ALTLEN, ALTLENG, BBREAKIN, BXGE, BXL, CHANG, DCA, DLCA, FINDLCA, FREECORE, GEOERR, GLPERI, HUNT2, HUNTW, ISITJOB, LOCKC, LONGOFF, LONGSET, LONGSTOP, MENDAREA, MFREEW, MHUNTW, MHUNTX, MONOUTX, MOPWAIT, OUTBLOCN, OUTMON, OUTNULL, OUTPARC, PHOTO, READYOFF, READYON, RESTART, SEGENTRY, SETNCORE, SMOPWAIT, TESTMOVE, UP

MOPOUT85.txt
22FL    #SEG  MOPOUT8                      [G CONSTANTINIDES
22^=    #LIS  K0MOPOUT>K0MULTIPLX>K0ALLGEO>K0GREATGEO   
23DW                   8HMOPOUT8
23YG    # ENTRY POINTS  
24D6          SEGENTRY K1MOPOUT,Z1MOPOUT
24XQ          SEGENTRY K2MOPOUT,Z2MOPOUT
25CB          SEGENTRY K3MOPOUT,Z3MOPOUT
25X2          MENDAREA 50,K100MOPOUT
26BL    [   
26W=    [THIS SEGMENT OUTPUTS DATA FROM A GMON/AOUT BLOCK TO A MULTIPLEXOR  
27*W    [TERMINAL. IT USES MODE #11 FOR NORMAL OUTPUT, AND MODE #13 FOR 
27TG    ["READY" OUTPUT.
28*6    [   
28SQ    TABLE BRN      XE3                 [NORMAL TRANSFER.
29#B          BRN      XE4                 [BREAK-IN OCCURRED   
29S2          BRN      ZB4                 [MESSAGE ENDED 'CANCEL'  
2=?L          BRN      ZB5                 [MESSAGE TIMED OUT   
2=R=    #SKI  K6MULTIPLX>99-99  
2?=W    (   
2?QG    #DEF  ZMAX=0?-TABLE+1   
2#=6    TNUM           +ZMAX               [NUMBER OF TABLE ENTRIES 
2#PQ    #FRE  ZMAX  
2*9B    )   
2*P2    MONAOUT 
2B8L    #HAL  GMON+AOUT,0   
2BN=    [   
2C7W    MXORBBC 
2CMG    #HAL  AMXOR+BBC,0   
2D76    [   
2DBY ...ZMIN           60+3/FONINTP 
2DLQ    XMASK          +1.1 
2F6B    XSHIFT         #74  
2FL2    NLMSK          #20000   
2G5L    XCANCEL        6HCANCEL 
2G9H ...ZJMOPWT        +JMOPWTLI
2G*D ...               +JMOPWTJO
2GF* ...               +JMOPWTIN
2GK=    ZJTIMEOUT      +JTIMEOUT           [TIMED OUT 'TIME'
2H4W    ZJTOREST       +JTOREST            [RESTARTED AT 'TIME' 
2HJG    ZJTOCLOSE      +JTOCLOSE           [CLOSED DOWN AT 'TIME'   
2J46    TIME           +ATIME              [READY MESSAGE   
2JHQ    #DEF  ZZS=AMOPOUT-A1+6             [LENGTH OF THE 3 NEWLINES BLOCK  
2K3B    [   
2KH2    [THIS SUBROUTINE CONVERTS THE CARD IMAGE FORMAT MESSAGE HELD IN A   
2L2L    [SPECIFIED BLOCK INTO DATA SUITABLE FOR TRANSMISSION TO A MOP CONSOLE.  
2LG=    [   
2L^W    [THE OUTPUT IS PUT INTO AN AMXOR/AOUT BLOCK (OR BLOCKS). LINES OF OUTPUT
2MFG    [ARE TRUNCATED TO THE LAST NON-SPACE CHARACTER. IF THE LAST CHARACTER   
2M^6    [IN THE LINE IS NOT A SPACE, AND THE NEXT INPUT CHAR. IS A SPACE, THE   
2NDQ    [LINE IS OUTPUT WITHOUT EDITING, OTHERWISE A SEARCH IS MADE BACKWARDS,  
2NYB    [THROUGH UP TO 8 CHARACTERS, FOR A SPACE: IF ONE IS FOUND THE LINE IS   
2PD2    [TRUNCATED TO THE LAST NON-SPACE CHARACTER BEFORE THIS, AND THE REST
2PXL    [OF THE LINE (UP TO 7 CHARS.) IS PREFIXED TO THE NEXT LINE. IF THE  
2QC=    [MESSAGE IS TOO LONG FOR 1 MULTIPLEXOR TRANSFER IT IS TRUNCATED TO THE  
2QWW    [LAST NEWLINE, IF POSSIBLE, AND THE REST OF THE MESSAGE IS PUT INTO 
2RBG    [ANOTHER BLOCK (OR BLOCKS). THIS IS SO THAT START-UP CHARACTERS (KER
2RW6    [-CHUNGS ETC.) COME AT THE START OF A LINE,RATHER THAN HALF WAY THROUGH.
2S*Q    [   
2STB    [ON ENTRY   
2T*2    [X3 POINTS TO THE LINE CONTROL BLOCK (AMXOR/ALCB)   
2TSL    [X4 CONTAINS THE SUBROUTINE LINK ADDRESS
2W#=    [AWORK1 CONTAINS THE TYPE OF THE BLOCK CONTAINING THE INPUT MESSAGE.
2WRW    [AWORK2 CONTAINS A COUNT OF THE NO. OF CHARS. IN THE INPUT MESSAGE. 
2X?G    [ACOMMUNE1 CONTAINS A COUNT OF THE NO. OF CHARS. IN THE TERMINATOR. 
2XR6    [ACOMMUNE2 CONTAINS THE START ADDRESS OF THE TERMINATOR, RELATIVE TO THE
2Y=Q    [     START OF THE LINE CONTROL BLOCK (CAN BE A CHARACTER ADDRESS). 
2YQB    [ACOMMUNE3 CONTAINS AN INDICATION OF THE TYPE OF MESSAGE WHICH IS BEING 
2^=2    [     CONVERTED: B12=1 - NEWLINE SUPPRESSION REQUIRED AT END OF MESSAGE.
2^PL    [                B18=1-"CUT OFF DC1 MARKER" 
329=    [               B19=1 - OBJECT PROGRAM OUTPUT   
32NW    [                B20=1 - "FORCED TYPING" CATEGORY MESSAGE.  
338G    [                B21=1 - "BROADCAST" MESSAGE.   
33N6    [                B22=1 - "BROKEN IN" MESSAGE.   
347Q    [                B23=1 - "READY" CATEGORY MESSAGE.  
34MB    [              ALL OTHER BITS MUST BE ZERO. 
3572    [ACOMMUNE5 CONTAINS THE ADDRESS OF THE INPUT BLOCK  
35LL    [   
366=    [ACOMMUNE7 IS NOT USED BY THE SUBROUTINE, BUT ALL OTHER ACOMMUNE WORDS, 
36KW    [ALL ACCUMULATORS AND ALL THE AWORK WORDS ARE USED WITH MONOTONOUS  
375G    [REGULARITY.
37K6    [ON EXIT X1=FX1 AND X2=FX2, AND THEY ARE ASSUMED TO HAVE THESE VALUES   
384Q    [ON ENTRY AS WELL.  
38JB    [   
38PJ ...ZLNOF LONGOFF   
38WQ ...      EXIT  3  0
3942    XCONV SBX   4  1
39HL          STOZ     AWORK3(2)           [ZERO IF NO NL YET IN THIS TRANSFER. 
3=3=          STO   4  AWORK4(2)           [SUBROUTINE LINK.
3=GW          LDEX  6  CHARS(3)            [NO. OF PRINT POSNS. ON CONSOLE. 
3?2G          LDX   4  ACOMMUNE1(2)        [NO. OF CHARS. IN TERMINATOR.
3?G6          BXL   6  AWORK2(2),XLR1      [J. IF < NO. OF CHS. TO BE CONVERTED.
3?^Q          LDX   6  AWORK2(2)           [OTHERWISE GET CONVERSION COUNT. 
3#FB          NGS   4  AWORK2(2)           [SET -VE TO SHOW LAST LINE OF OUTPUT.
3#^2    XLR1  STOZ     ACOMMUNE8(2)        [RELATIVE POINTER TO NEXT INPUT CHAR.
3*DL          SMO      IDENTM(3)           [AMOP ADDRESS.   
3*Y=          LDX   7  AWORK1              [MAX. TRANSFER LENGTH FOR THIS DEVICE
3BCW          BXGE  4  GNOCHS(3),TERM1     [J. IF TERM. LONGER THAN NL/DC3/EOM. 
3BXG          LDX   4  GNOCHS(3)           [OTHERWISE GET LENGTH OF DEFAULT TERM
3CC6    TERM1 LDX   5  7
3CWQ          DCH   4  ACOMMUNE3(2)        [SAVE LENGTH OF LONGER TERMINATOR.   
3DBB          ADN   5  AMOPOUT-A1*4+3      [ADD ON ENOUGH FOR RED TAPE & ROUND. 
3DW2          SBX   7  4                   [TRANSFER LENGTH LESS MAX. TERMINATOR
3F*L          LDX   4  GDELE(3) 
3FT=          SBX   7  4                   [AT START OF MESSAGE 
3G#W    XNAU1   
3GSG          SRL   5  2                   [ROUND TO WORDS. 
3H#6          PHOTO    4
3HRQ          SETUPCOR 5,1,AMXOR,AOUT      [GET OUTPUT BLOCK.   
3J?B          TESTMOVE 4,NMV1   
3JR2          MHUNTX   3,AWORK1(2)         [FIND THE INPUT BLOCK.   
3K=L          STO   3  ACOMMUNE5(2)        [SAVE ITS ADDRESS.   
3KQ=          MHUNTW   3,AMXOR,ALCB 
3L9W    NMV1  STO   1  ACOMMUNE6(2)        [SAVE ADDRESS OF OUTPUT BLOCK.   
3LPG          LDX   4  ACOMMUNE3(2)        [GET CONVERSION TYPE.
3M96          STO   7  AMOPCHS(1)          [SAVE TRANSFER LENGTH LESS TERMINATOR
3MNQ          STO   3  ACOMMUNE4(2)        [SAVE ADDRESS OF LCB.
3N8B          ADN   1  AMOPOUT             [SET UP PLACER.  
3NN2          ANDN  4  #14                 [MASK OUT "BROADCAST" & "FORCED TYPE"
3P7L          STO   1  ACOMMUNE9(2)        [SAVE PLACER.
3PM=          BZE   4  NBBC                [J. IF NOT BROADCAST OR FORCED TYPE, 
3Q6W          LDCH  5  CHARS(3)            [OTHERWISE OUTPUT PRELIMINARY NEWLINE
3QLG          LDN   0  GNLBUFF(3)   
3R66          SMO      5
3RKQ          MVCH  0  0
3S5B          SBX   7  5
3SK2          STO   1  ACOMMUNE9(2)        [SAVE POINTER & CT. AFTER NL.
3T4L          STO   7  AWORK3(2)
3TJ=    NBBC  BZE   6  NDINP               [J. IF NO INPUT TO CONVERT.  
3W3W          LDX   3  ACOMMUNE5(2)        [GET ADDRESS OF INPUT BLOCK. 
3WHG    NEXT1 ADX   3  ACOMMUNE8(2)        [SET UP GETTER.  
3X36    NEXT2 LDCH  0  A1+2(3)             [GET NEXT CHAR.  
3XGQ          SMO      FX1  
3Y2B          TXL   0  XSHIFT              [J. IF NOT SHIFT CHAR.   
3YG2          BCS      NSHIF
3Y^L          SBN   7  2                   [UPDATE TRANSFER REMAINDER COUNT.
3^F=          BNG   7  NDTR1               [J. IF TOO MUCH FOR THIS TRANSFER.   
3^YW          LDN   5  #76                 [INSERT DELTA SHIFT. 
42DG          SBN   0  #10                 [RESET DATA CHAR.
42Y6          DCH   5  0(1) 
43CQ          BCHX  1  XNORM               [STEP PLACER & J.
43XB    NSHIF SBN   7  1                   [UPDATE TRANSFER REMAINDER COUNT.
44C2          BNG   7  NDTR2               [J. IF TOO MUCH FOR THIS TRANSFER.   
44WL    XNORM DCH   0  0(1)                [INSERT CHAR.
45B=          BCHX  3  £                   [STEP GETTER.
45TW          BCHX  1  £                   [STEP PLACER.
46*G          BCT   6  NEXT2               [J. IF MORE WILL FIT ONTO THIS LINE. 
46T6          STO   3  ACOMMUNE8(2)        [SAVE GETTER.
47#Q    #   
47SB          LDEX  0  ACOMMUNE3(2)        [GET TYPE OF THE MESSAGE WORD
48#2          ANDN  0  #20                 [J IF OBJ.PROG OUTPUT BIT SET
48RL          LDN  4   8                   [COUNT OF NON-SPACE CHS TO BACKCHECK 
49?=          LDX   2  FX1  
49QW          BNZ   0  TSPAC
4==G          SMO      FX2  
4=Q6          LDXC  5  AWORK2   
4?9Q          BCS      TSPAC               [J IF CONVERSION FINISHED
4?PB    #   
4#92          LDCH  0  A1+2(3)             [GET NEXT CHAR.  
4#NL          SBN   0  #20  
4*8=          BZE   0  TSPAC               [J. IF SPACE FOUND.  
4*MW    PLOOP SBX   3  XMASK(2)            [STEP BACK GETTER 1 CHARACTER POSN.  
4B7G          TXL   3  CACT 
4BM6          ADN   3  0
4C6Q          LDCH  0  A1+2(3)             [GET THIS CHAR.  
4CLB          SBN   0  #20  
4D62          BZE   0  QLOOP               [J. IF SPACE.
4DKL          SBN   0  #74-#20             [WAS IT A SHIFT CHAR.
4F5=          TXL   0  GSIGN
4FJW          ADN   6  1                   [COUNT OF OUTPUT CHARS. TO BE REMOVED
4G4G          BCT   4  PLOOP               [J. IF STILL NO SPACE FOUND & CT. OK.
4GJ6          LDX   2  FX2  
4H3Q          LDX   3  ACOMMUNE8(2)        [LOAD GETTER 
4HHB          BRN      SETNL               [GIVE UP TRYING & INSERT NL IN MID-WD
4J32    QLOOP ADN   6  1                   [STEP OUTPUT REDUCTION COUNT.
4JGL    TSPAC SBX   3  XMASK(2)            [STEP GETTER 1 CHAR. POSN. BACK. 
4K2=          TXL   3  CACT 
4KFW          ADN   3  0
4K^G          LDCH  0  A1+2(3)             [GET THIS CHAR.  
4LF6          SBN   0  #20  
4LYQ          BZE   0  QLOOP               [TRY AGAIN IF SPACE. 
4MDB          LDX   2  FX2  
4MY2          LDX   3  ACOMMUNE8(2)        [LOAD GETTER 
4NCL    #   
4NX=          SBN   4  8                   [MINUS NO OF NON-SPACE CHARS.FOUND   
4PBW          SLC   3  2                   [CONVERT TO CHARACTER COUNT  
4PWG          ADX   3  4
4QB6          LDX   0  ACOMMUNE9(2)        [RELATIVISE PLACER   
4QTQ          SLC   0  2                   [CHARS   
4R*B          SLC   1  2                   [CHS PTR 
4RT2          SBX   1  0
4S#L          SBX   1  6                   [MINUS CONTENT OF REDUCTION COUNT
4SS=          BNZ   1  XAR                 [J IF SOMETHING HERE 
4T?W          LDN   1  4                   [ALL SPACES OUTPUT,  
4TRG          SBN   6  4                   [4 AT THE MOST   
4W?6          BPZ   6  XAQ  
4WQQ          ADN   6  4
4X=B          LDX   1  6
4XQ2          STOZ     6
4Y9L    XAQ   LDXC  5  AWORK2(2)
4YP=          BCC      XAR  
4^8W          LDX   0  ACOMMUNE9(2) 
4^NG          SLC   0  2
5286          ADX   1  0
52MQ          SRC   1  2
537B          BRN      NDINP               [END OF MESSAGE  
53M2    XAR   ADX   7  6                   [COUNT OF CHARS LEFT TO FILL TRANSFER
546L    #   
54L=          BPZ   1  SPALL
555W          LDX   7  AWORK3(2)           [RESET REMAINDER CT. 
55KG          LDN   1  0                   [RESET PLACER.   
5656          BNZ   7  SPALL
56JQ          SMO      ACOMMUNE6(2)        [REMEMBRANCE NOT VALID IF NO NL YET. 
574B          LDX   7  AMOPCHS  
57J2    SPALL LDX   0  ACOMMUNE9(2) 
583L          SLC   0  2
58H=          ADX   1  0
592W          SRC   1  2                   [RECONSTITUTE PLACER.
59GG          SRC   3  2
5=26          LDXC  0  AWORK2(2)
5=FQ          BCS      NDINP
5=^B    SETNL SBX   3  ACOMMUNE5(2)        [RESET GETTER REMEMBRANCE
5?F2          STO   3  ACOMMUNE8(2) 
5?YL          LDX   3  ACOMMUNE4(2)        [LCB ADDRESS.
5#D=          LDEX  6  CHARS(3)            [NO. OF PRINT POSNS. 
5#XW          LDN   0  GNLBUFF(3)          [POINTER TO START OF NL SEQUENCE.
5*CG          ADX   4  6                   [PRINT POSNS. LESS NON-SP. CHS. OVER.
5*X6          LDCH  5  CHARS(3)            [LENGTH OF NL SEQUENCE.  
5BBQ          SBS   4  AWORK2(2)           [REDUCE CT. OF CHARS. LEFT TO CONVERT
5BWB          SMO      5
5CB2          MVCH  0  0                   [INSERT NL.  
5CTL          SBX   7  5                   [UPDATE TRANSFER REMAINDER COUNT.
5D*=          BXL   6  AWORK2(2),XLR2      [RESET PRINT POSN. CT. FOR NEXT LINE.
5DSW          LDX   6  AWORK2(2)
5F#G          NGS   5  AWORK2(2)           [SET -VE. TO SHOW FINISHED.  
5FS6    XLR2  BNG   7  NDTWO               [J. IF NL FILLS UP TRANSFER. 
5G?Q          STO   1  ACOMMUNE9(2)        [SAVE POINTER & CT. AFTER NL.
5GRB          STO   7  AWORK3(2)
5H?2          LDX   3  ACOMMUNE5(2)        [INPUT BLOCK ADDRESS.
5HQL          BRN      NEXT1               [J. BACK FOR NEXT LINE.  
5J==    NDTR1 ADN   7  1                   [RECONSTITUTE REMAINDER CT.  
5JPW    NDTR2 LDX   4  AWORK3(2)
5K9G          SBX   3  ACOMMUNE5(2)        [RELATIVISE GETTER.  
5KP6          ADN   7  1                   [RECONSTITUTE REMAINDER CT. (AGAIN). 
5L8Q          BZE   4  NONL                [J. IF NO NL YET, THIS TRANSFER. 
5LNB          SBX   4  7                   [COUNT OF CHS. OUTPUT SINCE LAST NL. 
5M82          BZE   4  NDONE               [J. IF NONE. 
5MML          LDX   1  ACOMMUNE6(2)        [OUTPUT BLOCK ADDRESS.   
5N7=          LDX   5  ALOGLEN(1)          [SAVE LENGTH, TO SAVE WORKING OUT.   
5NLW          ADN   1  AMOPOUT             [POINTER TO START OF OUTPUT BUFFER.  
5P6G          STO   3  ACOMMUNE8(2)        [SAVE GETTER.
5PL6          SBS   1  ACOMMUNE9(2)        [RELATIVISE PLACER REMEMBRANCE.  
5RJL          PHOTO    7
5T3G          SETUPCOR 5,1,AMXOR,AOUT      [GET ANOTHER OUTPUT BLOCK.   
5TH6          LDX   3  ACOMMUNE6(2)        [ERSTWHILE ADDRESS OF OLD OUTPUT BLK.
5W2Q          TESTMOVE 7,NMV2              [J. IF STILL VALID.  
5WGB          MHUNTW   3,AMXOR,ALCB        [OTHERWISE RESET ALL THE POINTERS.   
5X22          STO   3  ACOMMUNE4(2) 
5XFL          MHUNTX   3,AWORK1(2)  
5X^=          STO   3  ACOMMUNE5(2) 
5YDW          HUNT2    3,AMXOR,AOUT,1   
5YYG    NMV2  LDX   7  AMOPCHS(3)          [MAX. TRANSFER LENGTH LESS TERMINATOR
5^D6          LDX   5  ACOMMUNE9(2)        [RELATIVE PLACER IN OLD OUTPUT BLOCK.
5^XQ          STO   7  AMOPCHS(1)          [SAVE FOR NEXT TIME. 
62CB          LDX   0  5                   [OLD REL. PLACER AT LAST NL. 
62X2          STO   1  ACOMMUNE6(2)        [NEW OUTPUT BLOCK ADDRESS.   
63BL          ADN   0  AMOPOUT  
63W=          SLC   5  2                   [TURN INTO CHARACTER COUNT.  
64*W          STOZ     AWORK3(2)           [CLEAR TO INDICATE NO NL YET, THIS TR
64TG          ADN   5  3                   [ADD ON 3 FOR EOM SEQUENCE.  
65*6          SBX   7  4                   [REDUCE CT. BY CHS. ALREADY CONVERTED
65SQ          STO   5  AMOPCHS(3)          [SET CT. OF CHS. TO OUTPUT IN OLD BLK
66#B          ADN   1  AMOPOUT             [SET UP NEW BLOCK'S PLACER.  
66S2          ADX   0  3                   [MAKE PLACER ABSOLUTE.   
67?L          STO   1  ACOMMUNE9(2)        [RESET NL ADDRESS REMEMBRANCE.   
67R=          LDX   5  0                   [KEEP PTR. TO CH. AFTER LAST NL. 
68=W          SMO      4                   [OLD PLACER BECOMES GETTER, TO MOVE  
68QG          MVCH  0  0                   [PARTLY CONVERTED LINE INTO NEW BLOCK
68RK ...[                                   NOW SHORTEN OLD BLOCK TO SIZEREQD   
68SN ...      STO   1  ACOMMUNE4(2)         [SAVE X1
68TR ...      LDX   4  AMOPCHS(3)   
68WW ...      ADN   4  AMOPOUT-A1*4+3   
68X^ ...      SRL   4  2                   [CALCULATE SIZE  
68^4 ...      ALTLENG  3,4  
6927 ...      MHUNTW   2,AMXOR,ALCB         [NOW RESET AC4 WITH ALCB ADDR.  
693= ...      SMO      FX2  
694* ...      LDX   1  ACOMMUNE4
695D ...[                        AND RESET X1   
696H ...      SMO   FX2 
697L ...      STO   2  ACOMMUNE4
698P ...      LDX   2  FX2  
69=6          SMO      ACOMMUNE4(2)        [PUT EOM CHARS. DIRECTLY AFTER LAST  
69PQ          LDN   4  GEOM                [NL IN OLD BLOCK (OVERWRITING OLD CHS
6=9B          LDEX  0  ACOMMUNE3(2)        [GET CONVERSION TYPE BITS.   
6=P2          MVCH  4  3
6?8L          SRC   0  1                   [REFORMAT TYPE WD.   
6?N=          STO   0  AMOPTY(3)           [SET TYPE WD. IN OLD BLOCK.  
6#7W          LDX   3  ACOMMUNE5(2)        [ADDRESS OF INPUT BLOCK. 
6#MG          BRN      NEXT1               [BACK INTO THE FRAY! 
6*76    NDONE STO   3  ACOMMUNE8(2)        [SAVE RELATIVISED GETTER.
6*LQ    NDTWO STOZ     AWORK3(2)           [CLEAR NL INDICATOR FOR NEXT TRANSFER
6B6B          LDEX  5  ACOMMUNE3(2)        [GET CONVERSION TYPE BITS.   
6BL2          BRN      PTEOM
6C5L    NONL  LDEX  5  ACOMMUNE3(2)        [GET CONVERSION TYPE BITS.   
6CK=          STO   3  ACOMMUNE8(2)        [SAVE RELATIVISED GETTER.
6D4W          ORX   5  GSIGN               [SET THE "NEW LINE SUPPRESSED" BIT.  
6DJG    PTEOM SMO      ACOMMUNE4(2)        [SET UP GETTER FOR EOM SEQUENCE. 
6F46          LDN   0  GEOM 
6FHQ          SRC   5  1                   [REFORMAT CONVERSION TYPE WORD.  
6G3B          LDX   2  ACOMMUNE6(2)        [GET ADDRESS OF START OF OUTPUT BLOCK
6GH2          MVCH  0  3                   [MOVE IN THE EOM CHARS.  
6H2L          SBN   1  AMOPOUT(2)          [POSN. OF LAST CH. WRT. BUFFER START.
6HG=          LDX   7  AMOPCHS(2)   
6H^W          SLC   1  2                   [TURN INTO CT. OF CHS. TO OUTPUT.
6JFG          STO   5  AMOPTY(2)           [STORE CONVERSION TYPE.  
6J^6          STO   1  AMOPCHS(2)          [STORE OUTPUT COUNT. 
6KDQ          LDX   4  ALOGLEN(2)          [GET LENGTH, TO SAVE WORKING OUT.
6KYB          PHOTO    5
6LD2          SETUPCOR 4,1,AMXOR,AOUT      [GET ANOTHER OUTPUT BLOCK.   
6LXL          STO   1  ACOMMUNE6(2)        [SAVE ADDRESS OF NEW OUTPUT BLOCK.   
6MC=          STO   7  AMOPCHS(1)          [SAVE FOR NEXT TIME. 
6MWW          LDX   3  ACOMMUNE5(2)        [WAS ADDRESS OF INPUT BLOCK. 
6NBG          ADN   1  AMOPOUT  
6NW6          STO   1  ACOMMUNE9(2)        [SAVE LAST NL ADDRESS REMEMBRANCE.   
6P*Q          TESTMOVE 5,NEXT1             [J. BACK TO CONVERSION IF NO MOVEMENT
6PTB          MHUNTW   3,AMXOR,ALCB        [OTHERWISE RESET THE POINTERS.   
6Q*2          STO   3  ACOMMUNE4(2) 
6QSL          MHUNTX   3,AWORK1(2)  
6R#=          STO   3  ACOMMUNE5(2) 
6RRW          BRN      NEXT1
6S?G    NDINP LDX   0  ACOMMUNE2(2)        [REL. ADDRESS OF START OF TERMINATOR.
6SR6          LDX   3  ACOMMUNE6(2)        [OUTPUT BLOCK ADDRESS
6T=Q          ADX   0  ACOMMUNE4(2)        [MAKE TERMINATOR ADDRESS ABSOLUTE.   
6TQB          LDX   4  ACOMMUNE3(2)        [GET CONVERSION TYPE.
6W=2          SMO      ACOMMUNE1(2)        [LENGTH OF TERMINATOR.   
6WPL          MVCH  0  0                   [MOVE IN TERMINATOR. 
6X9=          LDEX  5  4                   [MASK OUT STABLE CONVERSION TYPE BITS
6XNW          SBN   1  AMOPOUT(3)          [PLACER REL. TO START OF BUFFER. 
6Y8G          ANDN  4  #4000               [CHECK NL SUPPRESSION BIT.   
6YN6          SLC   1  2                   [COUNT OF CHARS. IN BUFFER.  
6^7Q          LDN   0  #40                 [COMMAND ERROR?  
6^MB          ANDX  0  5
7272          BZE   0  XNAUTO              [NO  
72LL          LDX   0  BIT11               [CANCEL DC1 MARKER   
736=          SMO      ACOMMUNE4(2)        [PTR TO LCB  
73KW          ORS   0  GWAIT
745G    XNAUTO  
74K6          BZE   4  NLNS                [J. IF NO NL SUPPRESSION.
754Q          ORX   5  GSIGN               [OTHERWISE INSERT MARKER.
75JB    NLNS  STO   1  AMOPCHS(3)          [STORE NO. OF CHARS. IN THIS TRANSFER
7642          SRC   5  1                   [REFORMAT CONVERSION TYPE WORD.  
76HL          SBX   1  ACOMMUNE1(2)        [COUNT, LESS LENGTH OF ACTUAL TERM.  
773=          LDCH  4  ACOMMUNE3(2)        [LENGTH OF MAX. TERMINATOR.  
77GW          STO   5  AMOPTY(3)           [SAVE OUPUT TYPE.
782G          ADN   4  AMOPOUT-A1*4+3(1)   [ADD RED TAPE + 3 FOR ROUNDING.  
78G6          SRL   4  2                   [ROUND TO WORDS. 
78^Q          ALTLEN   3,4                 [LEAVES ROOM FOR NEW TERM. IF NECC.  
79FB          SMO      AWORK4(2)           [WELL, WOULD YOU BELEIVE IT?!!   
79^2          EXIT  1  0
7=DL    [   
7=Y=    [THIS SUBROUTINE COPIES RECORD FROM THE OUTPUT BLOCK (AMXOR/AOUT)   
7?CW    [TO THE BUFFER IN THE LINE CONTROL BLOCK (AMXOR/ALCB)   
7?XG    [THE LINE CONTROL BLOCK (AMXOR/ALCB) IS THEN LOCKED DOWN
7#C6    [ON ENTRY   
7#WQ    [X3 POINTS TO THE LINE CONTROL BLOCK (AMXOR/ALCB)   
7*BB    [X7 CONTAINS THE SUBROUTINE LINK ADDRESS
7*W2    [ON EXIT
7B*L    [X2 POINTS TO THE MPX ACTIVITY BLOCK (AMOP) 
7BT=    [X3 POINTS TO THE LOCKED DOWN LINE CONTROL BLOCK (AMXOR/ALCB)   
7C#W    [X4 CONTAINS THE ADDRESS OF THE BUFFER  
7CSG    [   
7D#6    XCOP  LDX   0  GWAIT(3) 
7DRQ          ANDN  0  #4000
7F?B          BZE   0  XCOPC               [J. IF NOT DOUBLE BREAK IN   
7FR2    XCOP3 LDX   2  3
7G=L    XCOPA LDX   2  BPTR(2)  
7GQ=          LDX   0  ATYPE(2) 
7H9W          BXGE  0  CACT,XCOP2A         [J IF NEXT ACTIVITY REACHED  
7HPG          SRL   0  12   
7J96          SBN   0  AMXOR+AOUT   
7JNQ          BNZ   0  XCOPA               [J. IF NOT AOUT BLOCK
7K8B          LDX   0  AMOPTY(2)
7KN2          ANDN  0  7
7L7L          BNZ   0  XCOPE               [J TO OUTPUT THIS BLOCK  
7LM=    XCOPB FREECORE 2
7M6W          BRN      XCOP3               [BACK FOR MORE TO FREE   
7MLG    XCOPC LDX   2  3
7N66    X1H   LDX   2  BPTR(2)  
7NKQ          LDX   0  ATYPE(2) 
7P5B          BXGE  0  CACT,XCOP2A         [J IF NO OUTPUT  
7PK2          SRL   0  12   
7Q4L          SBN   0  AMXOR+AOUT   
7QJ=          BNZ   0  X1H  
7R3W    XCOPE LDN   4  AMOPOUT(2)   
7RHG    #   
7S36          LDX   5  AMOPCHS(2)          [NO OF CHS IN TRANSFER   
7SGQ          STO   2  1
7T2B          BRN      XNRE1               [DC3 FOR EVERY OUTPUT
7TG2    XNRED LDN   5  BUFFER(3)
7T^L          BRN      XNRE2
7WF=    XNRE1 LDX   0  GDELE(3)            [NOT READY   
7WYW          LDX   2  5                   [CHAR COUNT  
7XDG          BZE   0  XNRED               [NO AUTMOP   
7XY6          LDX   0  GDELE+1(3)          [MOVE INTO BUFFER DC3 AND DEL
7YCQ          STO   0  BUFFER(3)
7YXB          LDX   0  GDELE+2(3)   
7^C2          STO   0  BUFFER+1(3)  
7^WL          LDN   5  BUFFER+2(3)  
82B=    XNRE2 MVCH  4  0(2) 
82TW          ADX   2  GDELE(3)            [DC3 CHAR COUNT  
83*G          LDX   4  2
83T6          LDN   5  BUFFER(3)
84#Q          LDXC  0  AMOPTY(1)
84SB          BCC      XNRE4               [J IF NOT READY  
85#2          LDX   0  GWAIT(3) 
85RL          ANDX  0  BIT11               [CANCEL DC1 MARKER SET?  
86?=          BZE   0  XNRE4               [NO  
86QW          SBN   4  2
87=G          LDX   2  4
87Q6          SBN   2  1                   [PTR TO LAST CH -2   
889Q          SRC   2  2
88PB          ADX   2  5
8992          LDN   0  #77                 [CANCEL DC1  
89NL          DCH   0  0(2) 
8=8=    XNRE4 LDX   0  AMOPTY(1)
8=MW          ANDN  0  2
8?7G          BZE   0  XCOP1               [J IF NO BROADCAST   
8?M6          LDX   2  4
8#6Q          SBN   2  2
8#LB          SRC   2  2                   [PUT CANCEL  
8*62          ADX   2  5
8*KL          LDN   0  #10  
8B5=          DCH   0  0(2) 
8BJW    #   
8C4G    XCOP1 SBX   7  FX1                 [RELATIVISE LINK 
8CJ6          LOCKC    3,REFIND            [LOCK LCB
8D3Q          ADX   7  FX1  
8DHB          CALL  1  REFIND   
8F32          LDX   3  2
8FGL          LDX   2  IDENTM(3)           [OBTAIN THE AMOP ADDRESS.
8G2=          LDX   5  GUNITNO(3)   
8GFW          FINDLCA  ,5   
8G^G          SLL   5  15   
8HF6          DCA      ,STO,5,MODE  
8HYQ          DLCA     1,DLA,4,COUNT
8JDB          LDN   4  GREP1(3) 
8JY2          DLCA     1,STO,4,CREP 
8KCL          LDN   4  BUFFER(3)
8KX=          DLCA     1,STO,4,CTSA 
8LBW    XCOP2 EXIT  7  1                   [SOME OUTPUT 
8LWG    XCOP2A  
8MB6          EXIT  7  0                   [NO OUTPUT DUE TO DOUBLE BREAKIN 
8MTQ    REFIND                             [LOCKC   
8N*B          MHUNTW   2,AMXOR,ALCB 
8NT2          EXIT  1  0
8P#L    [   
8PS=    XP0   LDN   0  #11  
8Q?W          STO   0  GLASTM(3)
8QRG    XPX   DLCA     1,DLA,0,MODE 
8R?6          GLPERI
8RQQ          LDX   0  JTIME
8S=B          STO   0  GTIM(3)  
8SQ2          EXIT  5  0
8T9L    REJ   GEOERR   1,REJECTED          [TRANSFER REJECTED   
8TP=    [   
8W8W    [THIS SUBROUTINE PERFORMS THE 'MOPWAIT' MACRO   
8WNG    [ON ENTRY   
8X86    [X7 CONTAINS THE SUBROUTINE LINK ADDRESS
8XMQ    [ON EXIT
8Y7B    [X1 = FX1   
8YM2    [X2 = FX2   
8^6L    [X3 POINTS TO THE LINE CONTROL BLOCK (AMXOR/ALCB)   
8^L=    [   
925W    XM0   SBX   7  FX1                 [RELATIVISE THE LINK ADDRESS 
92KG          MOPWAIT  ,XE66               [GO UP IF INOPERABLE 
9356    XMMX  MHUNTW   3,AMXOR,ALCB        [FIND THE AMXOR/ALCB BLOCK.  
93JQ          ADX   7  1                   [DATUMISE THE LINK ADDRESS.  
944B          EXIT  7  1                   [EXIT TO THE CALLING ROUTINE 
94J2    XE66  SBN   7  1                   [EXIT 0 IF INOP  
953L          BRN      XMMX 
95H=    [   
962W    [   
96GG    [THIS SUBROUTINE IS COMPLICATED BECAUSE XCONV DOESN'T LEAVE US ANYWHERE 
9726    [TO KEEP OUR LINK. IT IS THEREFORE DIVIDED INTO TWO PARTS, WITH A CALL  
97FQ    [ON XCONV IN THE MIDDLE.
97^B    [THE FIRST PART (SBBC1) LOOKS FOR A BROADCAST MESSAGE BLOCK. IF THERE   
98F2    [IS NONE IT EXITS BEYOND THE CALL ON THE SECOND PART.   
98YL    [IF A BLOCK IS FOUND IT SETS IT UP FOR CONVERSION, THEN EXITS TO THE
99D=    [CALL ON THE CONVERSION ROUTINE.
99XW    [THE SECOND PART (SBBC2) SENDS THE BROADCAST MESSAGE TO THE MONITORING  
9=CG    [FILE, THEN FREES THE BLOCK AND RE-ENTERS THE FIRST PART.   
9=X6    [   
9?BQ    SBBC2 SBN   4  2(1)                [STEP BACK AND RELATIVISE LINK.  
9?WB          MHUNTW   3,AMXOR,BBC         [SEND MESSAGE TO THE MONITORING FILE 
9#B2          LDX   5  ACOMMUNE7(2)        [SAVE CHAR. COUNT FROM MOPOUT MACRO. 
9#TL          LDN   6  #2000               [BBC CATEGORY BIT
9**=          OUTMON   A1(3),A1+2,6,AMXOR,BBC   
9*SW          STO   5  ACOMMUNE7(2)        [RESET MOPOUT MACRO'S COUNT. 
9B#G          MFREEW   AMXOR,BBC           [FREE THE BROADCAST MESSAGE BLOCK.   
9BS6          ADX   4  1                   [RESET LINK AND RE-ENTER FIRST PART. 
9C?Q    SBBC1 HUNTW    1,AMXOR,BBC         [LOOK FOR A BROADCAST BLOCK. 
9CRB          BNG   1  SBBC3               [J. OUT IF NONE. 
9D?2          MHUNTW   3,AMXOR,ALCB        [FIND THE LINE CONTROL BLOCK.
9DQL          LDX   6  GNOCHS(3)           [USE NORMAL NL SEQUENCE AS TERMINATOR
9F==          LDX   0  A1(1)               [CT. OF CHARACTERS IN MESSAGE.   
9FPW          LDN   5  GNLBUFF  
9G9G          STO   1  ACOMMUNE5(2)        [SAVE ADDRESS OF INPUT BLOCK.
9GP6          STO   6  ACOMMUNE1(2)        [SET TERMINATOR LENGTH.  
9H8Q          LDX   1  FX1  
9HNB          LDN   6  6                   ["BROADCAST"   "DON'T DISCARD" BITS. 
9J82          LDX   7  MXORBBC(1)          [SET BLOCK TYPE. 
9JML          STO   5  ACOMMUNE2(2)        [SET TERMINATOR START ADDRESS.   
9K7=          STO   6  ACOMMUNE3(2) 
9KLW          STO   7  AWORK1(2)
9L6G          STO   0  AWORK2(2)
9LL6          EXIT  4  0                   [EXIT TO DO THE CONVERSION.  
9M5Q    SBBC3 LDCT  0  #10                 [UNSET BBC MARKER
9MKB          ANDX  0  CLONG1(2)
9N52          ERS   0  CLONG1(2)
9NJL          EXIT  4  2                   [EXIT BEYOND 3RD. CALL WHEN FINISHED.
9P4=    [   
9PHW    [   
9Q3G    [   
9QH6    [   
9R2Q    [   
9RGB    [   
9S22    [THIS ENTRY POINT EXPECTS ACOMMUNE7 OF THE ACTIVITY BLOCK TO HOLD THE   
9SFL    [NUMBER OF CHS. IN THE OUTPUT MESSAGE, WHICH IS IN A GMON/AOUT BLOCK.   
9S^=    [INITIALLY A SEARCH IS MADE FOR BROADCAST MESSAGES, AND THESE ARE   
9TDW    [CONVERTED TO LINE FORMAT BEFORE NORMAL OUTPUT IS DEALT WITH.   
9TYG    [   
9WD6    Z1MOPOUT                           [MOPOUT MACRO ENTRY  
9WXQ          LDN   6  0                   [SET MARKER - NO BROADCAST.  
9XCB          CALL  4  SBBC1               [FIND AND CONVERT ANY BROADCAST BLOCK
9XX2          CALL  4  XCONV
9YBL          CALL  4  SBBC2
9YW=          HUNTW    1,GMON,AOUT         [FIND THE NORMAL MESSAGE BLOCK.  
9^*W          BNG   1  XE3B                [J. IF ENTERED FOR BROADCAST ONLY.   
9^TG          MHUNTW   3,AMXOR,ALCB        [FIND THE LINE CONTROL BLOCK.
=2*6          STO   1  ACOMMUNE5(2)        [SAVE ITS ADDRESS.   
=2SQ          LDX   4  A1+1(1)             [GET THE CATEGORY WORD.  
=3#B          LDX   5  ACOMMUNE7(2)        [GET THE NO. OF CHARS. TO CONVERT.   
=3S2          BNG   5  XE3B                [J IF BROADCAST ONLY 
=4?L          LDX   1  FX1  
=4R=          SLL   4  1
=5=W          LDX   0  MONAOUT(1)          [SET BLOCK TYPE. 
=5QG          STO   5  AWORK2(2)
=6=6          STO   0  AWORK1(2)
=6PQ    #   
=79B          LDX   6  4
=7P2          ANDN  6  #40                 [MARKER IN GWAIT B11 IF COMERROR 
=88L          BZE   6  RRA                 [CATEGORY MESSAGE,OTHERWISE J
=8N=          LDCT  0  1
=97W          SRL   0  3
=9MG          ORS   0  GWAIT(3) 
==76    RRA   LDX   6  4
==LQ          ANDN  6  4                   [MARK OBJ PROG CATEGORY  
=?6B          SLL   6  2
=?L2    RCU   BPZ   4  XE7                 [BRANCH IF NOT READY CATEGORY
=#5L          LDX   0  AREADY(3)
=#K=          LDN   5  AREADY+1 
=*4W          ORN   6  1                   ["READY CATEGORY BIT"
=*JG          STO   0  ACOMMUNE1(2)        [AND "READY" SEQUENCE TERMINATOR 
=B46          STO   5  ACOMMUNE2(2) 
=BHQ          STO   6  ACOMMUNE3(2) 
=C3B          CALL  4  XCONV               [DO THE CONVERSION.  
=CH2          MHUNTW   3,AMXOR,ALCB        [FIND THE LINE CONTROL BLOCK.
=D2L          READYOFF                     [CLEAR BREAK-IN MARKER   
=DG=    XE1   MOPWAIT  1,XE6               [J IF INOPERABLE 
=D^W    Z2MOPOUT                           [ENTRY TO REPEAT READY   
=FFG          SMOPWAIT                     [ENSURE THAT THE BUFFER IN FREE  
=F^6          MHUNTW   3,AMXOR,ALCB        [FIND THE LINE CONTROL BLOCK.
=GDQ    #   
=GYB    #   
=HD2          BBREAKIN 3,XE4               [IF BREAKIN FREE READY BLOCK 
=HXL          CALL  7  XCOP                [COPY OUTPUT INTO THE LCB BUFFER 
=JC=          BRN      XE5A                [NO OUTPUT   
=JWW    XE2   DLCA     1,STO,4,CTSA2
=KBG          LDN   0  GREP2(3) 
=KW6          DLCA     1,STO,0,CREP2
=L*Q          LDX   6  AWORK1(2)
=LTB          DLCA     1,DLA,6,COUNT2   
=M*2          LDN   0  2                   [SPLIT MODE #13 INTO 2 AND #11   
=MSL          DLCA     1,DLA,0,MODE2
=N#=          LDN   0  #11  
=NRW          LDN   5  #13  
=P?G          STO   5  GLASTM(3)
=PR6          CALL  5  XPX  
=Q=Q          PHOTO    7                   [PHOTOGRAPH THE CORE IMASE   
=QQB          MOPWAIT  1,XE6               [WAIT FOR INPUT  
=R=2          TESTMOVE 7,XE2A              [BRANCH IF NO MOVEMENT IN CORE   
=RPL          MHUNTW   3,AMXOR,ALCB        [FIND THE LINE CONTROL BLOCK.
=S9=    XE2A  LDEX  7  GWAIT(3)            [GET INPUT TRANSFER TYPE BITS.   
=SNW    #SKI  K6MULTIPLX>99-99  
=T8G    (   
=TN6          BXL   7  TNUM(1),XE2B        [J. IF INPUT TYPE WITHIN RANGE.  
=W7Q          GEOERR   1,MOPBITS
=WMB    XE2B
=X72    )   
=XLL          ERS   7  GWAIT(3)            [OTHERWISE CLEAR INPUT TYPE  
=Y6=          BBREAKIN 3,XE4               [J. IF BROKEN IN DURING WAIT.
=YKW          SMO      7
=^5G          BRN      TABLE               [J. ACCORDING TO INPUT TYPE. 
=^K6    [   
?24Q    [THIS SECTION DEALS WITH THE 'READY' INPUT  
?2JB    [   
?342    XE3   LDEX  5  GREP2(3)            [OBTAIN THE REMAINDER COUNT. 
?3HL          SBX   6  5                   [NUMBER OF CHARS. INPUT. 
?43=          LDX   5  6
?4GW          ADN   5  11                  [ADD ON 2WDS. RED TAPE & ROUND UP
?52G          PHOTO    4
?5G6          SRL   5  2                   [CONVERT TO WORDS.   
?5^Q          LDX   0  BIT11
?6FB          ANDX  0  GWAIT(3)            [UNSET IF CUT DC1 MARKER SET 
?6^2          ERS   0  GWAIT(3) 
?7DL          MFREEW   AMXOR,AOUT          [FREE THE OLD OUTPUT BLOCK.  
?7Y=          SETUPCOR 5,1,FILE,FRB 
?8CW          TESTMOVE 4,XE3A   
?8XG          MHUNTW   3,AMXOR,ALCB 
?9C6    XE3A  BBREAKIN 3,XE5               [J. IF BROKEN IN WHILE GETTING CORE. 
?9WQ          STO   6  A1(1)               [SET COUNT OF CHARACTERS INPUT.  
?=BB          LDN   0  BUFFER(3)           [MOVE IN THE INPUT.  
?=W2          ADN   1  A1+2 
??*L          SMO      5
??T=          MOVE  0  -2   
?##W          CHANG                        [GET INPUT INTO A READLINE BLOCK.
?#SG          LDN   6  0                   [SET MARKER - NO BROADCAST.  
?*#6          CALL  4  SBBC1
?*RQ          CALL  4  XCONV
?B?B          CALL  4  SBBC2
?BR2    XE3B  BNZ   6  XE10                [J. TO OUTPUT IF BROADCAST SWITCH SET
?C=L          UP                           [FINISH  
?CQ=    [   
?D9W    [THIS SECTION DEALS WITH 'BREAK-IN' 
?DPG    [   
?F96    XE4   HUNTW    1,AMXOR,AOUT        [FREE THE OLD OUTXUT BLOCK   
?FNQ          BNG   1  XE5A                [NONE
?G8B    XE5   FREECORE 1                   [OR IT COULD BE A SPARE FILE/FRB.
?GN2    XE5A  READYON                      [SET THE 'READY' MACRO BREAK-IN BIT  
?H7L    XE6   UP                           [FINISH  
?HM=    [   
?J6W    [THIS SECTION DEALS WITH MESSAGES TO BE OUTPUT  
?JLG    [   
?K66    XE7   SLC   4  6
?KKQ          BPZ   4  XE7A                [J. IF NOT "FORCED TYPE" CATEGORY.   
?L5B    #   
?LK2          ORN   6  #10                 [OTHERWISE SET BIT   
?M4L    #   
?MJ=    XE7A  ANDN  4  2                   [J. IF NOT "BROKEN IN" MESSAGE.  
?N3W          BZE   4  XE8  
?NHG          ORN   6  2                   [SET "BROKEN IN" REMEMBRANCE.
?P36    XE8   LDX   0  NLMSK(1) 
?PGQ          LDN   5  GNLBUFF  
?Q2B          ANDX  0  GWAIT(3) 
?QG2          LDX   4  GNOCHS(3)
?Q^L          BZE   0  XE9                 [J. IF NO NEW LINE SUPPRESSION NEEDED
?RF=          ORN   6  #4000               [SET "NEW LINE SUPPRESSION" BIT. 
?RYW          ERS   0  GWAIT(3)            [UNSET NEW LINE SUPPRESSION BIT. 
?SDG          LDCH  0  CHARS(3)            [NO 0F CHARS IN TERMINATOR WITH NEW  
?SY6          SBX   4  0                   [LINE CHARACTERS SUPPRESSED  
?TCQ          SRC   0  2
?TXB          ADX   5  0                   [STEP POINTER TO AFTER NL CHARS. 
?WC2    XE9   STO   4  ACOMMUNE1(2)        [SET THE REMAINING PARAMETERS FOR
?WWL          STO   5  ACOMMUNE2(2)        [THE CONVERSION ROUTINE. 
?XB=          STO   6  ACOMMUNE3(2) 
?XTW          CALL  4  XCONV               [DO THE CONVERSION.  
?Y*G    XE10  MOPWAIT  1,XE6               [WAIT FOR THE BUFFER TO BE FREED 
?YT6    Z3MOPOUT                           [ENTRY TO REPEAT NORMAL OUTPUT   
?^#Q          SMOPWAIT                     [ENSURE THE BUFFER IS FREE   
?^SB          MHUNTW   3,AMXOR,ALCB        [FIND THE LNE CONTROL BLOCK. 
#2#2          CALL  7  XCOP                [COPY OUTPUT INTO THE LCB BUFFER 
#2RL          BRN      XE6                 [NO OUTPUT   
#3?=          CALL  5  XP0                 [INITIATE THE TRANSFER.  
#3QW          UP                           [FINISH  
#4=G    [   
#4Q6    [THIS SECTION DEALS WITH 'CANCEL'   
#59Q    [   
#5PB    ZB4   BBREAKIN 3,XE4               [J. IF BROKEN IN AFTER CANCELLED.
#692          CALL  7  XM0                 [WAIT FOR BUFFER TO BE FREE. 
#6NL          BRN      XE6                 [J IF INOP   
#78=          BBREAKIN 3,XE4               [J. IF BREAK IN DURING COORDINATION. 
#7MW          LDN   5  XCANCEL(1)          [INSERT 'CANCEL' IN BUFFER.  
#87G          LDN   6  BUFFER(3)
#8M6          MVCH  5  6
#96Q          LDN   5  AREADY+1(3)  
#9LB    #   
#=62          LDX   7  AREADY(3)           [CANCEL HAS READY SEQUENCE WITHOUT   
#=KL          SBN   7  2                   [DC1 
#?5=          SMO      7
#?JW    #   
##4G          MVCH  5  0                   [INSERT 'READY' TERMINATOR   
##J6          LDN   0  #77                 [OVERWRITE 76 WITH 77(DC1)   
#*3Q          LDX   2  6
#*HB          SLC   2  2
#B32          SBN   2  1
#BGL          SRC   2  2
#C2=          DCH   0  0(2) 
#CFW          LDN   4  4                   [LEAVE OUT LAST 2 CHARS OF READY 
#C^G          ADX   4  AREADY(3)           [X4 CONTAINS NO. OF CHS. 
#DF6          CALL  7  XCOP1               [SET THE LCB FOR THE OUTPUT  
#DYQ          NULL                         [XCOP1 ONLY ONE EXIT 
#FDB          BRN      XE2                 [BRANCH TO OUTPUT MESSAGE + 'READY'  
#FY2    [   
#GCL    [THIS SECTION DEALS WITH 'TIME UP'  
#GX=    [   
#HBW    ZB5   MFREEW   AMXOR,AOUT          [FREE THE OLD OUTPUT BLOCK.  
#HWG          LDCT  0  #24                 [J. IF MARKED "TO BE ABANDONED". 
#J3N ...#UNS  CRAMP 
#J8W ...      ORN   0  #40                 [ALSO TEST FOR MOP OFF LIMBO 
#J?G ...      ORN   0  2                   [TEST ABANDON FOR FINISH B22 
#JB6          ANDX  0  JOBEVENTS(2) 
#JTQ          BNZ   0  XE5A 
#K*B          LDX   0  CONTEXT(2)   
#KT2          ANDN  0  #2   
#L#L          BNZ   0  ZB7                 [BRANCH IF IN 'NO USER' CONTEXT  
#LS=    [   
#M?W    [THIS SECTION DEALS WITH 'TIME UP' IN 'USER' CONTEXT
#MRG    [   
#N?6    ZB6   LDCT  6  #40  
#NQQ          ANDX  6  GWAIT(3) 
#P=B          BZE   6  RESTART             [J. IF ALREADY RESTARTED.
#PQ2          LDX   5  ZJTIMEOUT(1) 
#Q9L          CALL  7  OUTM                [OUTPUT TIMED OUT MESSAGE
#QP=    TREST LDCH  0  JSOURCE1(2)  
#R8W          SBN   0  7
#RNG          BZE   0  XE5A 
#S86          MHUNTW   3,AMXOR,ALCB 
#SMQ          ANDX  6  GWAIT(3) 
#T7B          BNZ   6  XCOOR               [J IF NOT ALREADY RESTARTED  
#TM2          LDN   0  1
#W6L          ANDX  0  GWAIT(3) 
#WL=          ERS   0  GWAIT(3) 
#X5W          BNZ   0  XE5A                [J IF B.I. BIT SET (FOR ABANDON) 
#XKG    RESTART 
#Y56          LDX   5  ZJTOREST(1)  
#YJQ          CALL  7  OUTM                [OUTPUT RESTARTED MESSAGE
#^4B          OUTNULL   
#^J2          MONOUTX  TIME(1)             [OUTPUT '_ BELL' TO CONSOLE. 
*23L          UP                           [FINISH  
*2=P ...XCOOR LONGSET AWAITMOP,XCOOR
*2B= ...      LDX   0  ZMIN(1)  
*2FR ...      MPY   0  IPMOPWAIT
*2K* ...YLNST LONGSTOP  TOBRK,TOTIM,,,1 
*2NX ...      BRN      TREST
*2QX ...TOTIM LDX   1  CLONG3(2)
*2SX ...      SBN   1  2
*2WX ...      BNG   1  YSUP 
*2YX ...      BDX   1  YLNST
*32X ...YSUP  LDX   1  FX1  
*34X ...      CALL  3  ZLNOF
*375 ...      MHUNTW   3,AMXOR,ALCB 
*3B8 ...      LDX   5  CONTEXT(2)   
*3K? ...      ANDN  5  2
*3SB ...      BZE   5  TOOUT
*43F ...      ISITJOB  TOOUT
*488 ...      BCT   5  TOOUT
*4#Y ...TOBRK CALL  3  ZLNOF
*4C# ...      BRN      TREST
*4FQ    [   
*4^B    [THIS SECTION DEALS WITH 'TIME UP' IN 'NO USER' CONTEXT 
*5F2    [   
*5YL    ZB7   LDCT  0  #20  
*6D=          ANDX  0  GWAIT(3) 
*6XW          BNZ   0  ZB6                 [BRANCH IF IN 'JOB' OR 'INPUT'   
*7=? ...      LDCT  5  #400 
*7JN ...TOOUT LDCT  0  #40                 [UNSET "TIMED OUT" BIT, IF IT IS SET.
*7X6          ANDX  0  GWAIT(3) 
*8BQ          ERS   0  GWAIT(3) 
*8DF ...      STO   5  AWORK1(2)
*8G8 ...      PHOTO    6
*8HX ...      BNG   5  ZCLSE
*8KL ...      SMO      5
*8M* ...      LDX   5  ZJMOPWT(1)   
*8P4 ...      LDN   7  ZCLSE
*8QR ...      BRN      OUTSB
*8SG ...ZCLSE   
*8WB          LDX   5  ZJTOCLOSE(1) 
*9TL          CALL  7  OUTM                [OUTPUT CLOSED DOWN MESSAGE  
*9^H ...      LDCH  0  JSOURCE1(2)  
*=5D ...      SBN   0  7
*=9* ...      BZE   0  XE5A 
*=*=          SETNCORE ZZS,2,AMXOR,AOUT    [CORE BLOCK FOR 3 NEWLINES OUTPUT
*=SW          TESTMOVE 6,ZB8               [J. IF NO CORE MOVEMENT. 
*?#G          MHUNTW   3,AMXOR,ALCB        [RELOCATE THE LINE CONTROL BLOCK.
*?S6    ZB8   LDN   4  GNLBUFF(3)          [INSERT THREE NEW LINE SEQUENCES,
*#?Q          LDN   5  AMOPOUT(2)          [DC3, END OF MESSAGE.
*#RB          LDCH  1  CHARS(3) 
**?2          MVCH  4  0(1) 
**QL          LDN   4  GNLBUFF(3)   
*B==          MVCH  4  0(1) 
*BPW          LDX   0  1
*C9G          LDX   1  GNOCHS(3)
*CP6          LDN   4  GNLBUFF(3)   
*D8Q          ADX   0  0
*DNB          MVCH  4  0(1) 
*F82          ADX   0  1
*FML          STO   0  AMOPCHS(2)          [INSERT THE NUMBER OF OUTPUT CHARS   
*G7=          STOZ     AMOPTY(2)           [CLEAR THE OUTPUT TYPE MASK. 
*GLW          CALL  7  XM0                 [WAIT FOR BUFFER TO BE FREE  
*H6G          BRN      XRI  
*HL6          CALL  7  XCOP                [COPY OUTPUT INTO THE LCB BUFFER 
*J5Q          BRN      XRIN                [NO OUTPUT   
*JKB          CALL  5  XP0                 [INITIATE THE TRANSFER.  
*K52          CALL  7  XM0                 [WAIT FOR BUFFER TO BE FREE  
*KJL          BRN      XRI  
*L4=    XRIN
*LHW          SMO      A1+FPTR(3)          [NULLIFY ALINES RING POINTERS.   
*M3G          STOZ     BPTR 
*MH6          STOZ     A1+BPTR(3)   
*MPB ...XRI   LDX   2  FX2  
*MXL ...      LDX   5  AWORK1(2)
*N5W ...      BPZ   5  TOLIM
*N#6 ...      FREECORE 3                   [FREE THE LINE CONTROL BLOCK.
*NGB          ACROSS   LOGOUT,7            [CPA SUICIDE 
*NL? ...TOLIM LDN   0  7
*NQ8 ...      DCH   0  JSOURCE1(2)  
*NW5 ...      ACROSS   MULTIPLX,4   
*P22    [   
*PFL    [THIS SUBROUTINE OUTPUTS THE MESSAGE WHOSE ADDRESS IS IN X5 TO THE  
*P^=    [MONITORING FILE AND CONSOLE WITH THE TIME AS A PARAMETER   
*QDW    [ON ENTRY   
*QYG    [X5 CONTAINS ADDRESS OF MESSAGE TO BE OUTPUT
*RD6    [X7 CONTAINS THE SUBROUTINE LINK ADDRESS
*RXQ    [   
*SCB    OUTM  SBX   7  FX1                 [RELATIVISE THE LINK 
*SX2          OUTBLOCN 2                   [CREATE 2 WORD PARAMETER BLOCK TO
*TBL                                       [PREVENT CONFUSION WITH EARLIER PMTRS
*TW=                                       [PREVIOUSLY CREATED GMON/ASET BLOCK. 
*W*W          OUTPARC  TIMENOW  
*WTG ...OUTSB MONOUTX  5                   [OUTPUT MESSAGE  
*X*6          ADX   7  1                   [DATUMISE THE LINK.  
*XSQ          EXIT  7  0                   [EXIT TO THE CALLING ROUTINE 
*Y#B    #END
^^^^ ...13702602000200000000
  • Last modified: 17/01/2024 11:55
  • by 127.0.0.1