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