OPERIN867

(George Source)

Macros used: ALTLEN, AND, ANDR, BS, CHAIN, CHANGALL, CONSOUT, COOR1, COOR3, DCA, DO, DOWN, ELSE, ELSF, FI, FORWARD, FPUT, FREECORE, GETACT, GPERI, HUNTACT, IF, IFR, LF, LINK, LINKSET, LOCKC, MBSXD, MHUNTW, MONOUT, NAME, OR, OUTBLOCK, OUTNULL, OUTPACK, OUTPACKX, OVER, REPEAT, SEGENTRY, THEN, UNLOCK, UP, VFREEW, WHILE

OPERIN867.txt
22FL    #OPT           K0OPERIN=0   
22^=    #LIS           K0OPERIN > K0ALLGEO > K0GREATGEO 
23DW    #SEG           OPERIN              [COMM - STIG TOWNSEND
23NN ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982.   
23YG    [   
24D6    [   
24XQ                8HOPERIN
25CB       SEGENTRY K1OPERIN,OPERINK1   [READ A LINE OF UNSOLICITED INPUT   
25X2       SEGENTRY K2OPERIN,OPERINK2   [READ A LINE OF EMS REPLY   
26BL    [   
26W=    [   
27*W    [ AWORK1    USED BY SUBROUTINE SCANCEL  
27TG    [ AWORK2    USED BY K2ENTRY 
28*6    [ AWORK3    USED TO STORE REPLY WORD TO THE READ WHILE  
28SQ    [           WE ARE WRITING A RESPONSE OF THE PREVIOUS   
29#B    [           LINES OF A MULTI-LINE INPUT(DURING SREAD)   
29S2    [           OR A BLANK I-P AREA (DURING SRESPOND)   
2=?L    [ AWORK4    USED TO SAY WHAT KIND OF READ IT IS:
2=R=    [           0 => K1 - UNSOLICITED   
2?=W    [           1 => K2 - SOLICITED 
2?QG    #PAGE   
2#=6    [   
2#PQ    [   
2*9B    [ DEFINITIONS   
2*P2    [   
2B8L    #DEF  STARTINAREA = 20             [1ST LINE OF INPUT AREA  
2BN=                                       [
2C7W    #DEF  WIDTH = 40                   [WIDTH OF OPER SCREEN (CHARS)
2CMG                                       [
2D76    #DEF  READMODE = 2                 [EXTENDED MODE READ  
2DLQ                                       [
2F6B    #DEF  READLENGTH = 80              [LENGTH OF READ PERI 
2FL2                                       [
2G5L    #DEF  WRITEMODE = 3                [EXTENDED WRITE MODE 
2GK=                                       [
2H4W    #DEF  UNLOCK = #200                [ADDITIONAL WRITE MODE - UNLOCK KEYS 
2HJG                                       [
2J46    #DEF  MSGCANCLEN = 44              [LENGTH (CHARS) OF MSGCANCEL 
2JHQ                                       [
2K3B    #DEF  MSGCONTLEN = 44              [LENGTH (CHARS) OF MSGCONTN  
2KH2                                       [
2L2L    #DEF  MSGOUTLEN = 16               [LENGTH (CHARS) OF MSGOUTWAITS   
2LG=                                       [
2L^W    #DEF  WAITPOSN = 23 @L 18 + (WIDTH-MSGOUTLEN)   
2MFG                                       [START POSITION OF MSGOUTWAITS   
2M^6                                       [ON THE OPER SCREEN (SEE SYSWRITE)   
2NDQ                                       [
2NYB    #DEF  TRANSCHARS = READLENGTH/4 + FCINBUF   
2PD2                                       [SPARE WORD IN INPUT BUFFER USED 
2PXL                                       [TO STORE LENGTH OF AN INPUT LINE
2QC=                                       [
2QWW    #DEF  TOTSIZE = TRANSCHARS + 1     [FOLLOWING WORD HOLDS SIZE OF
2RBG                                       [CORRESPONDING RECORD IN CURRENT 
2RW6                                       [MESSAGE BLOCK   
2S*Q                                       [
2STB    [   
2T*2    [   
2TSL    [ PRESET DATA   
2W#=    [   
2X?G                                       [
2XR6    NEWLINES
2Y=Q    MSGCANCEL      44H^*^*CANCEL
2YQB                                       [
2^=2    MSGCONTINUE    44H^*^*PLEASE CONTINUE   
2^PL                                       [
329=    MSGOUTWAIT     +MSGOUTLEN          [MESSAGE LENGTH (CHARS)  
32NW                   +WAITPOSN           [START POSITION ON SCREEN
338G                   16HOUTPUT WAITING   [TEXT
33N6                                       [
347Q                                       [
34MB                                       [
35*R ...PLINK          LINK COMPROA,1      [LINK TO COMMAND PROCESSOR FOR   
35LL                                       [CPATS SET UP TO PROCESS OUR I/P 
366=                                       [
36KW                                       [
375G                                       [
37K6    VARCHAR        +JPDVARCHAR         [MESSAGE PDC 
384Q                                       [
38JB                                       [
3942                                       [
39HL    MINUS          4H-                 [FOR CONTINUED INPUT 
3=3=    #PAGE   
3=GW    [   
3?2G    [   
3?G6    [*********************************************************************  
3?^Q    [   
3#FB    SGETOPER
3#^2    [   
3*DL    [*********************************************************************  
3*Y=    [   
3BCW    [ ENSURES THAT BSTS HAS NOT LEFT A MESSAGE IN FCOUTBUF  
3BXG    [ THAT HAS YET TO BE EXTRACTED. IT ENSURES THAT WE CAN OVERWRITE
3CC6    [ THE CONTROL AREA OF THE OPER DEVICE LIST  
3CWQ    [   
3DBB    [ LINK X4   
3DW2    [   
3F*L    [ ON EXIT,  OK TO USE DEVICE LIST   
3FT=    [           ALL DETECTED BSTS MESSAGES HAVE BEEN EXTRACTED  
3G#W    [           X1,2 = FX'S 
3GSG    [   
3H#6       SBX   4  FX1 
3HRQ       LDX   1  FX1 
3J?B       LDX   2  FX2 
3JR2       WHILE    TRUE                [START LOOP 
3K=L          WHILE    BUSY,CPPTR(2)       [WAIT TILL UNBUSY
3KQ=          DO
3L9W             COOR3    #50   
3LPG          REPEAT
3M96          SMO      CONSCNTRL
3MNQ          LDX   0  COBS 
3N8B          IF       0,NZ                [EXTRACT MSG IF IS ONE   
3NN2          THEN  
3P7L             DOWN     OPERA,3   
3PM=          FI
3Q6W       ANDR     BUSY,CPPTR(2)     [REPEAT IF BSTS WRITING NOW   
3QLG          SMO      CONSCNTRL
3R66          LDX   0  COBS 
3RKQ       OR       0,NZ                [OR ANOTHER MSG TO BE EXTRACTED 
3S5B       DO   
3SK2       REPEAT   
3T4L       ADX   4  FX1 
3TJ=       EXIT  4  0   
3W3W    #PAGE   
3WHG    [   
3X36    [   
3XGQ    [   
3Y2B    [*********************************************************************  
3YG2    [   
3Y^L    SPERIA  
3^F=    [   
3^YW    [*********************************************************************  
42DG    [   
42Y6    [ DO A PERI TO THE INPUT AREA AND RESPONSE LINE 
43CQ    [   
43XB    [ LINK X4   
44C2    [ ON ENTRY, X0 CONTAINS START ADDR OF BUFFER
44WL    [           X1 CONTAINS COUNT IN CHARACTERS 
45B=    [ ON EXIT,  X0 DESTROYED
45TW    [           X1=FX1  
46*G    [           X2=FX2  
46T6    [           X3->CPRW1(2)
47#Q    [   
47SB       SBX   4  FX1 
48#2       LDX   2  FX2 
48RL       LDX   3  CPPTR(2)
49?=       DCA      3,STO,0,CTSA        [GIVEN START ADDRESS
49QW       DCA      3,DLA,1,COUNT       [GIVEN NUMBER OF CHARACTERS 
4==G       LDN   0  WRITEMODE+UNLOCK
4=Q6       DCA      3,DLA,0,MODE        [EXTENDED WRITE MODE
4?9Q       LDCT  0  STARTINAREA@L3  
4?PB       DCA      3,STO,0,EXTRA       [STARTING AT BEGINNING OF INPUT AREA
4#92       GPERI    3,2 
4#NL       COOR1
4*8=       LDN   3  CPRW1(2)
4*MW       ADX   4  FX1 
4B7G       EXIT  4  0   
4BM6    #PAGE   
4C6Q    [   
4CLB    [   
4D62    [   
4DKL    [*********************************************************************  
4F5=    [   
4FJW    SRESPOND
4G4G    [   
4GJ6    [*********************************************************************  
4H3Q    [   
4HHB    [ BLANK THE INPUT AREA, PRESERVING INPUT REPLY  
4J32    [   
4JGL    [ LINK X6   
4K2=    [   
4KFW    [ ON EXIT,  X1,2 = FX'S 
4K^G    [   
4LF6       SBX   6  FX1 
4LYQ       LDX   2  FX2 
4MDB       LDX   0  CPRW1(2)            [PRESERVE INPUT REPLY WORD  
4MY2       STO   0  AWORK3(2)   
4NCL       DO   
4NX=          CALL  4  SGETOPER 
4PBW          LDX   0  NEWLINES(1)         [PREPARE TO BLANK INPUT AREA 
4PWG          STO   0  FCOUTBUF            [3 NEWLINES FROM FCOUTBUF-1  
4QB6          LDX   0  ACES 
4QTQ          LDN   3  WIDTH/4  
4R*B          DO                           [BLANK THE RESPONSE LINE 
4RT2             STO   0  FCOUTBUF(3)   
4S#L          REPEAT   CT 3 
4SS=          LDX   3  CONSCNTRL
4T?W          IF       BS,3,COUTWAITS      [IF "OUTPUT WAITING" TO KEEP 
4TRG          THEN                         [THEN
4W?6          LDN   5  (WIDTH-MSGOUTLEN)/4 + FCOUTBUF + 1   
4WQQ          LDN   4  MSGOUTWAIT+2(1)  
4X=B          MOVE  4  MSGOUTLEN/4         [ADD IT ON RIGHT 
4XQ2          FI                           [FI "OUTPUT WAITING" 
4Y9L          LDN   1  WIDTH+8  
4YP=          LDN   0  FCOUTBUF-1   
4^8W          CALL  4  SPERIA              [DO THE PERI 
4^NG       REPEAT   UNTIL,MBAC,3,CONSINOP,CONSFAIL  
5286       LDX   0  AWORK3(2)   
52MQ       STO   0  CPRW1(2)            [RESTORE INPUT REPLY
537B       ADX   6  FX1 
53M2       EXIT  6  0   
546L    #PAGE   
54L=    [   
555W    [   
55KG    [   
5656    [*********************************************************************  
56JQ    [   
574B    SCANCEL 
57J2    [   
583L    [*********************************************************************  
58H=    [   
592W    [ BLANK THE INPUT AREA, OUTPUT "CANCEL", SET UP A CANCEL REPLY WORD 
59GG    [ AND STOZ THE 'PREVIOUS LINES IN MESSAGE' COUNT
5=26    [   
5=FQ    [ LINK X5 - USES AWORK4 
5=^B    [ X3,4 CORRUPTED, X1 AND X2 SET TO FX'S 
5?F2    [   
5?YL       SBX   5  FX1 
5#D=       LDX   1  FX1 
5#XW       LDX   2  FX2 
5*CG       LDX   4  CPRW1(2)
5*X6       MBSXD    0,CONSFWD,CONSREV   
5BBQ       ANDX  4  0                   [X4 HOLDS PAGE KEY BITS FROM LAST READ  
5BWB       STO   4  AWORK1(2)   
5CB2       DO   
5CTL          CALL  4  SGETOPER 
5D*=          LDN   2  MSGCANCEL(1) 
5DSW          LDN   3  FCOUTBUF 
5F#G          MOVE  2  MSGCANCLEN/4        [HAVE 3 NEWLINES AND CANCEL  
5FS6          LDX   3  CONSCNTRL           [1ST NEWLINE IN FCOUTBUF-1   
5G?Q          IF       BS,3,COUTWAITS      [POSSIBLY FOLLOWED BY
5GRB          THEN                         ["OUTPUT WAITING"
5H?2             LDN   2  MSGOUTWAIT+2(1)   
5HQL             LDN   3  FCOUTBUF + (WIDTH-MSGOUTLEN / 4) + 1  
5J==             MOVE  2  MSGOUTLEN/4   
5JPW          FI                           [FI  
5K9G          LDN   0  FCOUTBUF-1          [FROM FCOUTBUF-1 
5KP6          LDN   1  WIDTH+8  
5L8Q          CALL  4  SPERIA   
5LNB       REPEAT   UNTIL,MBAC,3,CONSINOP,CONSFAIL  
5M82       STOZ     0(3)
5MML       BS       3,CONSCANCEL        [SET UP CANCEL REPLY
5N7=       LDX   4  AWORK1(2)   
5NLW       ORS   4  0(3)                [INCLUDING CORRECT PAGE KEYS
5P6G       SMO      CONSCNTRL   
5PL6       STOZ     COIN                [STOZ 'PREVIOUS LINES' COUNT
5Q5Q       VFREEW   FILE,FRB
5QKB       ADX   5  FX1 
5R52       EXIT  5  0   
5RJL    #PAGE   
5S4=    [   
5SHW    [   
5T3G    [   
5TH6    [*********************************************************************  
5W2Q    [   
5WGB    SHUNTCREADL 
5X22    [   
5XFL    [*********************************************************************  
5X^=    [   
5YDW    [ SUBSIDIARY HUNT ROUTINE FOR 'LOCKC'   
5YYG    [   
5^D6       MHUNTW   2,ADATA,CREADL  
5^XQ       EXIT  1  0   
62CB    [   
62X2    [   
63BL    [   
63W=    [*********************************************************************  
64*W    [   
64TG    SHUNTFRB
65*6    [   
65SQ    [*********************************************************************  
66#B    [   
66S2    [ POINT X3 AT FILE FRB  
67?L    [   
67R=    [ LINK X6   
68=W    [   
68QG       MHUNTW   3,FILE,FRB  
69=6       EXIT  6  0   
69PQ    #PAGE   
6=9B    [   
6=P2    [   
6?8L    [   
6?N=    [*********************************************************************  
6#7W    [   
6#MG    SREAD   
6*76    [   
6*LQ    [*********************************************************************  
6B6B    [   
6BL2    [ ISSUES A READ. DEALS WITH FAILED TRANSFERS AND PAGE KEYS. 
6C5L    [ CONTINUATION IS ALSO DEALT WITH.  
6CK=    [ WE ASSUME THAT WORD COIN OF THE CONBUFF/CNTRL BLOCK HOLDS 
6D4W    [ A NUMBER IN THE RANGE 0-2 INCLUSIVE (PRIOR INPUT LINES OF 
6DJG    [ THIS MESSAGE).
6F46    [   
6FHQ    [ LINK X7   
6G3B    [ ON ENTRY X2=FX2   
6GH2    [   
6H2L    [ ON EXIT KEYBOARD IS UNLOCKED  
6HG=    [         REPLY WORD IS FOR THE READ, NOT ITS RESPONSE  
6H^W    [   
6JFG       SBX   7  FX1 
6J^6       IF       +AWORK4(2),ZE       [IF UNSOLICITED INPUT THEN  
6KDQ       THEN 
6KYB          OVER     CONSW               [ALLOW FURTHER INTERRUPTS
6LD2       FI                           [FI 
6LXL       CALL  4  SGETOPER
6MC=       LDX   3  CPPTR(2)
6MWW       LDN   0  READMODE
6NBG       DCA      3,DLA,0,MODE        [SET READ MODE  
6NW6       LDN   0  READLENGTH  
6P*Q       DCA      3,DLA,0,COUNT       [SET MAX PERMISSIBLE LENGTH 
6PTB       LDN   4  FCINBUF 
6Q*2       DCA      3,STO,4,CTSA        [SET START ADDRESS  
6QSL       GPERI    3,2                 [ISSUE READ PERI
6R#=       COOR1
6RRW       LDN   3  CPRW1(2)            [X3 -> REPLY WORD   
6S?G       IF       MBS,3,CONSFAIL,CONSINOP [IF TRANSFER FAIL OR INOPERABLE 
6SR6       THEN                         [THEN   
6T=Q          LDX   4  CPRW1(2) 
6TQB          DOWN     OPER,2              [ASK FOR REPEAT INPUT
6W=2          STO   4  CPRW1(2) 
6WPL       ELSF     +AWORK4(2),ZE       [ELSF UNSOLICITED READ OK   
6X9=       AND      BS,,EMSBIT          [DURING EMS THEN
6XNW       THEN 
6Y8G          IF       MBAC,3,CONSFWD,CONSREV,CONSCONTN [IF NO KEYS 
6YN6             LF       3,CONSREMCT,0 
6^7Q             SBN   0  READLENGTH
6^MB          AND      0,ZE                [AND NO CHARS THEN   
7272          THEN  
72LL             CALL  6  SRESPOND  
736=             DOWN     SHOWCOMM,3          [FREE LOG 
73KW          ELSE                         [ELSE
745G             CALL  5  SCANCEL             [CANCEL - WE MUST UNLOCK KEYBOARD 
74K6          FI
754Q       ELSE                         [ELSE (COMMAND OR REPLY OK) 
75JB          LDN   1  READLENGTH   
7642          LF       3,CONSREMCT,0
76HL          SBX   1  0
773=          STO   1  TRANSCHARS          [REMEMBER TRANSFER COUNT 
77GW          IF       1,NZ                [IF DATA CHARS THEN  
782G          THEN  
78G6             LDN   4  2*4 + 3(1)
78^Q             SRL   4  2                   [LENGTH OF 2 HEADER WORDS + DATA  
79FB             STO   4  TOTSIZE   
79^2             SMO      CONSCNTRL 
7=DL             LDX   0  COIN  
7=Y=             IF       0,ZE                [IF 1ST LINE OF INPUT MSG THEN
7?CW             THEN   
7?XG                ADN   4  1                   [ALLOW FOR EXTRA WORD AT END   
7#C6                SETUPCOR 4,3,FILE,FRB        [SET UP MSG BLOCK  
7#WQ                [   
7*BB                [ THE FORMAT OF THE BLOCK IS:   
7*W2                [    A1   - INCLUSIVE WORDCOUNT OF CELL 
7B*L                [    A1+1 - CHARACTER COUNT OF LINE 
7BT=                [    A1+2.. DATA
7C#W                [   
7CSG                [ FROM 0 TO THREE INCLUSIVE OF THESE CELLS MAY  
7D#6                [ BE CONTAINED IN THE BLOCK. THE LAST CELL IS   
7DRQ                [ FOLLOWED BY A ZERO WORD   
7F?B                [   
7FR2                STOZ     A1(3)               [MARK IT EMPTY 
7G=L             ELSE                         [ELSE (CONTINUATION LINE) 
7GQ=                CALL  6  SHUNTFRB   
7H9W                ADX   4  ALOGLEN(3)          [EXTEND BLOCK FOR NEW LINE 
7HPG                ALTLEN   3,4,FILE,FRB   
7J96                CALL  6  SHUNTFRB   
7JNQ             FI                           [FI 1ST/CONTN LINE
7K8B             ADN   3  A1                  [X3 -> 1ST RECORD 
7KN2             WHILE    +0(3),NZ            [FIND CURRENT END OF BLOCK
7L7L             DO 
7LM=                ADX   3  0(3)   
7M6W             REPEAT                       [X3 -> 1ST EMPTY RECORD   
7MLG             LDX   0  TOTSIZE   
7N66             STO   0  0(3)                [SET UP RECORD HEADER 
7NKQ             LDX   1  TRANSCHARS
7P5B             STO   1  1(3)                [LENGTH OF DATA   
7PK2             IF       1,NZ  
7Q4L             THEN   
7QJ=                LDN   4  FCINBUF
7R3W                LDN   5  2(3)   
7RHG                MVCH  4  0(1)                [DATA ITSELF   
7S36             FI 
7SGQ             ADX   3  TOTSIZE             [POINT AT NEXT FREE RECORD
7T2B             STOZ     0(3)                [STOZ IT  
7TG2             LDN   3  CPRW1(2)  
7T^L          FI                           [FI DATA CHARS   
7WF=          IF       BS,3,CONSCONTN      [IF MSG IS CONTINUED THEN
7WYW          THEN  
7XDG             SMO      CONSCNTRL 
7XY6             LDX   0  COIN  
7YCQ             SBN   0  2 
7YXB             IF       EITHER,0,ZE         [IF THIS IS THIRD LINE
7^C2             OR       +TRANSCHARS,ZE      [OR CONTAINS NO DATA THEN 
7^WL             THEN   
82B=                CALL  5  SCANCEL
82TW             ELSE                         [ELSE (WANT MORE INPUT)   
83*G                LDX   0  CPRW1(2)            [PRESERVE REPLY TO INPUT   
83T6                STO   0  AWORK3(2)  
84#Q                CALL  6  SHUNTFRB   
84SB                LDX   4  ALOGLEN(3) 
85#2                ADN   4  WIDTH/4             [FOR RESPONSE LINE 
85RL                SETUPCOR 4,2,ADATA,CREADL    [X2 -> START OF BUFFER BLOCK   
86?=                CALL  6  SHUNTFRB            [X3 -> RAW DATA
86QW                LDN   5  A1(2)               [X5 -> START OF BUFFER 
87=G                SMO      CONSCNTRL  
87Q6                LDX   0  COIN                [0 OR 1 - 2 TRAPPED ABOVE  
889Q                IF       0,NZ                [IF THIS IS 2ND LINE THEN  
88PB                THEN
8992                   LDN   4  A1+2(3)             [X4 -> 1ST RECORD IN INPUT  
89NL                   SMO      A1+1(3)             [1ST LINE GOES TO ...   
8=8=                   MVCH  4  0                   [1ST OF INPUT AREA ...  
8=MW                   LDN   4  MINUS(1)
8?7G                   MVCH  4  1   
8?M6                   ADX   3  A1(3)               [(ELSE IT IS BLANK) 
8#6Q                FI                           [FI 2ND LINE   
8#LB                LDN   4  NEWLINES(1)         [PUT NEWLINE AT ...
8*62                MVCH  4  2                   [END OF 1ST INPUT AREA LINE
8*KL                LDN   4  A1+2(3)             [X4 -> NEXT INPUT LINE 
8B5=                SMO      A1+1(3)
8BJW                MVCH  4  0                   [PUT IT ON 2ND INPUT AREA LINE 
8C4G                LDN   4  MINUS(1)   
8CJ6                MVCH  4  1  
8D3Q                LDN   4  MSGCONTINUE(1) 
8DHB                MVCH  4  MSGCONTLEN          [AND "PLEASE CONTINUE" 
8F32                LDX   3  CONSCNTRL  
8FGL                IF       BS,3,COUTWAITS      [IF "OUTPUT WAITING" TO PRESERV
8G2=                THEN
8GFW                   SBN   5  MSGOUTLEN/4         [OVERWRITE END OF LINE WITH 
8G^G                   LDN   4  MSGOUTWAIT+2(1) 
8HF6                   MVCH  4  MSGOUTLEN           ["OUTPUT WAITING"   
8HYQ                FI                           [FI
8JDB                SBN   5  A1(2)  
8JY2                SLC   5  2                   [X5 = BUFFER LENGTH IN CHARS   
8KCL                LOCKC    2,SHUNTCREADL       [LOCK BUFFER BLOCK 
8KX=                DO  
8LBW                   CALL  4  SGETOPER
8LWG                   CALL  1  SHUNTCREADL         [FIND IT
8MB6                   LDN   0  A1(2)   
8MTQ                   LDX   1  5   
8N*B                   CALL  4  SPERIA              [WRITE NEW INPUT AREA   
8NT2                REPEAT   UNTIL,MBAC,3,CONSINOP,CONSFAIL 
8P#L                CALL  1  SHUNTCREADL
8PS=                FREECORE 2  
8Q?W                LDX   0  AWORK3(2)  
8QRG                STO   0  CPRW1(2)            [RESTORE INPUT REPLY WORD  
8R?6                LDN   0  1  
8RQQ                SMO      CONSCNTRL  
8S=B                ADS   0  COIN                [RAISE COUNT OF LINES IN MSG   
8SQ2             FI                           [FI   
8T9L          ELSE                         [ELSE (LAST LINE OF MSG) 
8TP=             IF       +TRANSCHARS,ZE      [IF NO DATA CHARS 
8W8W             THEN   
8WNG                [   
8X86             [ TO GET HERE, WE MUST HAVE RECEIVED A ZERO LENGTH INPUT   
8XMQ             [ AS A COMMAND DURING NORMAL RUNNING OR IN RESPONSE TO A   
8Y7B             [ QUESTION DURING EMS. IT WAS THE LAST (OR ONLY) LINE OF   
8YM2             [ THE INPUT MESSAGE (I.E. 'CONTINUED' NOT SET IN REPLY 
8^6L             [ WORD). PAGE KEY BITS MAY BE SET THOUGH.  
8^L=             [  
925W             [ N.B. WE ASSUME THAT IF PAGE KEY BITS ARE SET THEN
92KG             [      PAGE KEY(S) ONLY WERE USED, I.E. 'ENTER' WASN'T,
9356             [      AND THEREFORE THAT THE KEYBOARD IS NOT LOCKED.  
93JQ             [  
944B             [ WE MUST COPE WITH ONE OF THREE CASES THEN:   
94J2             [  
953L             [ 1. PAGE KEY BIT(S) SET - IN NORMAL RUNNING THERE IS  
95H=             [    NOTHING TO DO WITH RESPECT TO THE MESSAGE AS A
962W             [    WHOLE - PAGE KEYS ARE DEALT WITH AT THE END OF
96GG             [    THIS SEGMENT. FOR AN EMS REPLY WE SET 'CONTINUED' 
9726             [    IN THE INPUT REPLY WORD TO ENSURE THAT THE READ   
97FQ             [    JUST SATISFIED BY A PAGE KEY IS REISSUED  
97^B             [  
98F2             [ 2. THE 2ND OR 3RD LINE OF A MESSAGE - NO PAGE KEYS   
98YL             [    HAVE BEEN USED, SO THIS MEANS CANCEL  
99D=             [  
99XW             [ 3. THE ONLY LINE OF A MESSAGE, I.E. 'ENTER' ON ITS   
9=CG             [    OWN - THIS IS CONTINUE LOGGING (SH @0,0). WE  
9=X6             [    MUST UNLOCK THE KEYBOARD AND CHAIN THE CORRECT
9?BQ             [    SHOW BLOCK. IF THIS CAME AS THE ANSWER TO AN EMS  
9?WB             [    QUESTION THEN WE SET 'CONTINUED' IN THE INPUT 
9#B2             [    REPLY WORD TO ENSURE THAT THE READ JUST SATISFIED 
9#TL             [    BY THE NULL INPUT IS REISSUED 
9**=             [  
9*SW                LDN   3  CPRW1(2)   
9B#G                IF       MBS,3,CONSREV,CONSFWD [IF PAGE KEY THEN
9BS6                THEN
9C?Q                   IF       BS,,EMSBIT          [IF EMS THEN
9CRB                   THEN 
9D?2                      BS       3,CONSCONTN         [SET 'CONTINUED' 
9DQL                   FI                           [FI EMS 
9F==                ELSF     TRUE   
9FPW                   LDX   3  CONSCNTRL   
9G9G                AND      +COIN(3),NZ         [ELSF 2ND OR 3RD LINE  
9GP6                THEN                         [THEN  
9H8Q                   CALL  5  SCANCEL             [CANCEL THE INPUT   
9HNB                ELSE                         [ELSE (SH @0,0)
9J82                   CALL  6  SRESPOND
9JML                   DOWN     SHOWCOMM,3          [RESPOND AND CHAIN  
9K7=                   IF       BS,,EMSBIT          [IF EMS REPLY THEN  
9KLW                   THEN 
9L6G                      LDN   3  CPRW1(2) 
9LL6                      BS       3,CONSCONTN         [SET 'CONTINUED' 
9M5Q                   FI                           [FI EMS 
9MKB                FI                           [FI TYPE OF NULL INPUT 
9N52             ELSE                         [ELSE (DATA CHARS)
9NJL                CALL  6  SRESPOND   
9P4=    [   
9PHW    [ CONDENSE MESSAGE IN FILE/FRB  
9Q3G    [   
9QH6                CALL  6  SHUNTFRB            [X3 -> MESSAGE BLOCK FPTR  
9R2Q                LDX   1  3                   [X1 -> A1 BEFORE NEXT CELL 
9RGB                [   
9S22                [WE ASSUME CPDATA <= A1+2 - IF NOT, WILL TRY TO MVCH
9SFL                [MESSAGE TEXT OVER THE TOP OF ITSELF - HENCE THE TEST BELOW 
9S^=                [   
9TDW    #SKI  A1+2 < CPDATA - CPDATA
9TYG    !! TRYING TO DO A FORWARD MVCH !!   
9WD6                [   
9WXQ                LDN   5  CPDATA(3)           [X5 -> OUTPUT AREA 
9XCB                LDN   6  0                   [X6 = CHARACTER COUNT  
9XX2                WHILE    +A1(1),NZ           [CONDENSE THE MESSAGE LINES
9YBL                DO  
9YW=                   LDX   0  A1(1)   
9^*W                   ADX   6  A1+1(1) 
9^TG                   LDN   4  A1+2(1) 
=2*6                   SMO      A1+1(1) 
=2SQ                   MVCH  4  0   
=3#B                   ADX   1  0   
=3S2                REPEAT  
=4?L                LDN   4  ACES   
=4R=                MVCH  4  4                   [ENSURE MESSAGE ENDS WITH SPACE
=5=W                STO   6  A1(3)               [INSERT CHARACTER COUNT
=5QG                CHANGALL                     [MAKE IT A GRAPHIC MESSAGE 
=6=6                                             [A1 NOW WORD COUNT 
=6PQ    [   
=79B                SMO      CONSCNTRL  
=7P2                STOZ     COIN                [ZEROISE LINECOUNT OF CURRENT M
=88L    [   
=8N=                CALL  6  SHUNTFRB            [X3 -> MESSAGE BLOCK   
=97W                LDX   4  ALOGLEN(3) 
=9MG                ADN   4  5  
==76                OUTBLOCK 4                   [SET UP JOURNAL PARAM BLOCK ...
==LQ                SBN   4  5                   [WITH SPACE FOR TIME AND HEADER
=?6B                SETUPCOR 4,1,CONBUFF,CINP    [SET UP ECHO BLOCK 
=?L2                CALL  6  SHUNTFRB            [X3 -> MESSAGE BLOCK   
=#5L                LDN   4  A1(3)  
=#K=                LDN   5  A1(1)  
=*4W                SMO      ALOGLEN(3) 
=*JG                MOVE  4  0                   [COPY MESSAGE TO ECHO BLOCK
=B46                CONSOUT  1                   [AND CHAIN FOR ECHO
=BHQ                LDN   0  1  
=C3B                SMO      CONSCNTRL  
=CH2                ADS   0  COECH               [UPDATING THE ECHO COUNT   
=D2L    [   
=DG=    [ CAN'T USE OUTPAR TIMENOW SINCE
=D^W    [ IT MAY NOT BE ACCURATE IN EMS 
=FFG    [   
=F^6                OUTPACK  CLEANCT,1,TIMETHEN  [PUT TIME AND ...  
=GDQ                CALL  6  SHUNTFRB   
=GYB                LDX   4  A1(3)  
=HD2                SBN   4  CPDATA-A1  
=HXL                STO   3  6  
=JC=                IFR      4,ZE                [IF NO TEXT INPUT  
=JWW                   LDN   2  CPDATA(3)   
=KBG                   LDX   3  4                   [SEE IF ALL SPACES  
=KW6                   WHILE    +0(2),E,ACES
=L*Q                   DO   
=LTB                      ADN   2  1
=M*2                   REPEAT   CT 3
=MSL                OR       3,ZE                [OR INPUT ALL SPACES THEN  
=N#=                THEN
=NRW                   OUTNULL                      [%B IS NULL 
=P?G                ELSE                         [ELSE  
=PR6                   LDX   3  6   
=Q=Q                   LDN   3  CPDATA(3)   
=QQB                   OUTPACKX 3,4,VARCHAR(1)      [DATA IN JOURNAL MESSAGE
=R=2                FI                           [FI NULL INPUT TEXT
=RPL ...            MONOUT   JLCONSIN,,,IGOPTRACE  [WRITE TO JOURNAL
=S9=    [   
=SNW                IF       BS,,EMSBIT          [IF EMS THEN   
=T8G                THEN
=TN6                   CALL  6  SHUNTFRB
=W7Q                   NAME     3,CONBUFF,EMSIN     [TURN INTO CONBUFF/EMSIN
=WMB                   LDN   4  CPDATA(3)   
=X72                   LDN   5  A1+1(3) 
=XLL                   LDX   1  A1(3)   
=Y6=                   SBN   1  CPDATA-A1           [MAKE WORDCOUNT EXCLUSIVE   
=YKW                   SLL   1  2   
=^5G                   MVCH  4  0(1)                [AND REFORMAT   
=^K6                   LDX   2  5                   [LASTLY LOSE TRAILING SPACES
?24Q                   WHILE    TRUE
?2JB                      SLC   2  2
?342                      SBN   2  1
?3HL                      SRC   2  2
?43=                      LDCH  0  0(2) 
?4GW                      SBN   0  #20  
?52G                   AND      0,ZE
?5G6                   DO   
?5^Q                      SBN   1  1
?6FB                   REPEAT   
?6^2                   STO   1  A1(3)               [AND RESET CHARACTER COUNT  
?7DL                ELSE                         [ELSE (NOT EMS)
?7Y=                   GETACT   CPAT                [GET A CPAT FOR THE COMMAND 
?8CW                   LDX   2  BPTR(2)             [X2 -> CPAT 
?8XG                   LDCT  0  #770                [OP'S CONSOLE SOURCE BITS   
?9C6                   STO   0  JSOURCE1(2) 
?9WQ                   STOZ     AWORK1(2)   
?=BB                   STOZ     AWORK2(2)   
?=W2                   LINKSET  2,PLINK(1)          [SET LINK TO COMM. PROCESSOR
??*L                   CALL  6  SHUNTFRB
??T=                   CHAIN    3,2                 [CHAIN BLOCK AFTER CPAT 
?##W                   LDX   2  BPTR(3)             [X2 -> CPAT 
?#SG                   FPUT                         [FPUT THE CPAT  
?*#6                FI                           [FI ACTION ON END OF MESSAGE   
?*RQ             FI                           [FI NO DATA / DATA
?B?B          FI                           [FI CONTINUED / LAST LINE
?BR2          LDX   2  FX2  
?C=L          IF       BC,,EMSBIT          [IF NORMAL RUNNING THEN  
?CQ=          THEN  
?D9W             LDN   3  CPRW1(2)  
?DPG             IF       BS,3,CONSREV        [IF PAGE REV USED THEN
?F96             THEN   
?FNQ                DOWN     SHOWCOMM,2          [SIMULATE A SHOW -1,1  
?G8B             FI                           [FI   
?GN2             LDN   3  CPRW1(2)  
?H7L             IF       BS,3,CONSFWD        [IF PAGE FWD USED THEN
?HM=             THEN   
?J6W                DOWN     SHOWCOMM,4          [SIMULATE A SHOW +1,1  
?JLG             FI                           [FI   
?K66          FI                           [FI NORMAL RUNNING   
?KKQ       FI                           [FI TRANSFER OK/FAILED  
?L5B       ADX   7  FX1 
?LK2       EXIT  7  0   
?M4L    #PAGE   
?MJ=    [   
?N3W    [   
?NHG    [   
?P36    [                    WW   WW   W
?PGQ    [                    WW  WW   WW
?Q2B    [                    WW WW   WWW
?QG2    [                    WWWW     WW
?Q^L    [                    WWWW     WW
?RF=    [                    WW WW    WW
?RYW    [                    WW  WW   WW
?SDG    [                    WW   WW  WW
?SY6    [   
?TCQ    [   
?TXB    OPERINK1
?WC2          STOZ     AWORK4(2)           [UNSOLICITED INPUT   
?WWL          CALL  7  SREAD
?XB=          UP
?XTW    #PAGE   
?Y*G    [   
?YT6    [   
?^#Q    [   
?^SB    [                    WW   WW   WWWWW
#2#2    [                    WW  WW   WW   WW   
#2RL    [                    WW WW         WW   
#3?=    [                    WWWW          WW   
#3QW    [                    WWWW        WW 
#4=G    [                    WW WW     WW   
#4Q6    [                    WW  WW   WW
#59Q    [                    WW   WW  WWWWWWW   
#5PB    [   
#692    [   
#6NL    OPERINK2
#78=          LDN   0  1
#7MW          STO   0  AWORK4(2)           [SOLICITED INPUT 
#87G          LDX   0  CPPTR(2) 
#8M6          STO   0  AWORK2(2)           [PRESERVE CPPTR OF ACTIVITY  
#96Q          LDX   0  ACC3(2)             [NEED ACC3 -> OPER DEV. LIST 
#9LB          STO   0  CPPTR(2)            [SET UP PTR FOR 'SREAD'  
#=62       [
#=KL       [ WAIT TILL ALL OUTPUT DONE  
#?5=       [
#?JW          WHILE    EITHER,INUSE,CPPTR(2) [WHILE OPER BUSY   
##4G             LDN   3  BCONSOUT  
##J6          OR       EITHER,3,U,0(3)     [OR CONSOLE CHAIN NOT EMPTY  
#*3Q             WHILE    TRUE  
#*HB             DO 
#B32                HUNTACT  CONBUFF,2  
#BGL                LDX   0  ATYPE(2)   
#C2=                SRL   0  12 
#CFW                SBN   0  CONBUFF+ACTIVE 
#C^G             REPEAT   UNTIL,0,ZE
#DF6             LDX   0  ACLEN(2)  
#DYQ          OR       0,NZ                [OR UNWRITTEN ACTIVE PAGE DATA   
#FDB          DO
#FY2             COOR3    #53                 [WAIT FOR ALL OUTPUT  
#GCL          REPEAT                       [REPEAT  
#GX=          LDX   2  FX2  
#HBW          CALL  7  SREAD
#HWG          LDX   2  FX2  
#JB6          LDX   0  AWORK2(2)           [RESTORE CPPTR OF ACTIVITY   
#JTQ          STO   0  CPPTR(2) 
#K*B          UP
#KT2    #END
^^^^ ...735240060002
  • Last modified: 17/01/2024 11:55
  • by 127.0.0.1