|
|
DataMuseum.dkPresents historical artifacts from the history of: IBM System/3 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about IBM System/3 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 35560 (0x8ae8)
Types: s3xseg
Names: »S$E090«
└─⟦827b5bd03⟧ Bits:30009184 5702-sc1.V16.ccp
└─⟦f17e99db6⟧
└─⟦this⟧ »S$E090«
MACRO 00010000
.********************************************************************** 00020000
.* NAME: $E090 V-15, M-00. * 00040000
.********************************************************************** 00650000
$E090 &GEN- 00660000
GBLB &ONE,&NOB,&NOM,&MIN,&N1050,&NSCTL,&MOD4,&BPRT *L00670000
GBLB &NPP,&NMP,&NSWL,&NCS,&NITB,&NTSP,&N32,&N37,&N41,&NRUF 00690000
LCLA &MIX 00710000
TEXT 00720000
* R-15,C-00 CHANGE LEVEL 00730000
AIF (&GEN EQ 'SET').G0100 00740000
TITLE '$E090/CMSTOR---GETMAIN-SIZE-DETERMINATION' 00750000
* PRINTER BUSY FLAG 1/20/78 *L00755000
*********************************************************************** 00760000
* * 00770000
* NAME--CMSTOR * 00780000
* * 00790000
* TITLE--GETMAIN SIZE DETERMINATION * 00800000
* * 00810000
* FUNCTION--THIS ROUTINE CALCULATES THE AMOUNT OF MAIN STORAGE * 00820000
* NEEDED FOR A PARTICULAR TYPE OF TP REQUEST. * 00830000
* * 00840000
* OPERATION-- * 00850000
* . ALWAYS ADD FOUR BYTES FOR THE GETMAIN PARM LIST. * 00860000
* . IF A PUT OPERATION ADD PLOUTL. * 00870000
* . IF A PUT THEN GET OPERATION ADD 16 FOR THE TP * 00880000
* PARAMETER LIST. * 00890000
* . IF A POLL FOR STATUS OPERATION ADD 20. * 00900000
* . IF SYSTEM INVITE ONLY ADD CC#MCL, AND MOVE CC#MCL * 00910000
* INTO PLINL. * 00920000
* . IF USER INVITE ONLY ADD PLINL. * 00930000
* * 00940000
* INPUT-- * 00950000
* XR1--ADDRESS OF THE TP PARAMETER LIST. * 00960000
* XR2--ADDRESS OF THE DTF FOR THE TP PARAMETER LIST. * 00970000
* * 00980000
* OUTPUT-- * 00990000
* XR1--NOT ALTERED * 01000000
* XR2--NOT ALTERED * 01010000
* #BUFND--TOTAL AMOUNT OF STORAGE NEED FOR THE TP REQUEST. * 01020000
* * 01030000
* EXIT-- * 01040000
* TO NSI OF CALLER. * 01050000
* * 01060000
*********************************************************************** 01070000
SPACE 01080000
CMSTOR EQU * DETERMINE STORAGE NEEDED BY OP 01090000
* IN PARM LIST PASSED IN XR1 01100000
SPACE 01110000
AIF (&NOB).NB010 01120000
AIF (&MIN).N0010 01130000
.NB010 ANOP 01140000
.* FOLLOWING CODE WILL BE IN $CC4B2 FOR MIN RES 01150000
ST CMSTOX+3,ARR SAVE RETURN ADDRESS 01160000
MVC #BUFND(2),CC0004 ADD 4 FOR GETMN LIST 01170000
SPACE 01180000
* DETERMINE IF IT IS A PUT OPERATION 01190000
SPACE 01200000
TBN PL$OPM(,XR1),OPPUT IS CURRENT OP A PUT 01210000
JT CMSPUT JUMP IF IT IS A PUT 01220000
SPACE 01230000
* OPERATION IS INVITE INPUT 01240000
* DETERMINE WHETHER IT IS SYSTEM OR USER REQUEST 01250000
SPACE 01260000
AIF (&NOB).C0556 01270000
&MIX SETA &N32+&N37+&N41 01280000
AIF (&MIX EQ '3').T1100 01290000
* ------------------------> START --> @01 01295000
AIF (&ONE).C0554 01300000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 0/5/7B 01310000
.C0554 ANOP 01320000
TBN PL$OPC(,PL),OPLSNS AND POLL FOR STATUS ? 0/5/7B 01330000
JF CMSUSR NO-GO CHECK WHO IS USER. 0/5/7B 01340000
ALC #BUFND(2),RELSNS USE RECL FOR SNS OPER. 0/5/7B 01350000
J CMSTOX GO TO EXIT. 0/5/7B 01360000
SPACE 01370000
CMSUSR EQU * * 0/5/7B 01380000
* --------------------------> END --> @01 01385000
.C0556 ANOP 01390000
.T1100 ANOP 01400000
TBN PLOPM(,XR1),OP$SYS IS IT SYSTEM REQUEST 01410000
JF CMSTOY JUMP IF USER REQUEST 01420000
AIF (&BPRT).BP300 PRINTER BUSY CODE *L01420500
AGO .BP400 *L01421000
.BP300 ANOP *L01421500
L PLTUBA(,PL),XR2 XR2--> TUB *L01422000
TBN TUBAT4(,XR2),TUBBSY IS THIS A BUSY PRINTER ? *L01422500
JF CMSNPR NO - SET INPUT LENGTH *L01423000
L TUBDTF(,XR2),DTF XR2 --> DTF *L01423500
TBF $BDATR(,DTF),$BCMPT CONTROL STATION LINE ? *L01424000
JT CMSNPR NO - DONT CHANGE LOOP COUNT *L01424500
MVI $BDCNT(,DTF),X'02' SET LOOP COUNT TO TWO TIMES *L01425000
TBN $BDDEV(,DTF),LINE2 THIS LINE TWO DTF ? *L01425500
L $BDWKA(,DTF),XR2 XR2 --> WORKAREA *L01426000
TBN $BWKMC(,XR2),X'01' IS DA WORKING NOW ? *L01426500
L PLTUBA(,PL),XR2 XR2 --> TUB. *L01427000
L TUBDTF(,XR2),DTF XR2 --> DTF. *L01427500
JF CMSNPR NO - LEAVE LOOP COUNT AT TWO. *L01428000
MVI $BDCNT(,DTF),$BFOX ELSE MAKE LOOP CONTINUOUS *L01428500
CMSNPR EQU * *L01429000
.BP400 ANOP END PRINTER BUSY CODE *L01429500
SPACE 01430000
AIF (&NRUF).T0101 01430700
* -----START-------------------@06 01431400
* IF RUF ON SCREEN, USE MAX RUF LENGTH AS SYSTEM INPUT LENGTH. 01432100
L PLTUBA(,PL),XR2 XR2->TUB. 01432800
TBN TUBSCS(,XR2),TUBRUF RUF ON THE SCREEN ? 01433500
LA $CCCOM,XR2 XR2->CCP COMM AREA. 01434200
MVC PLINL(2,PL),#RUFCL(,XR2) USE MAX RUF LENGTH. 01434900
L PLTUBA(,PL),XR2 XR2->TUB. 01435600
L TUBDTF(,XR2),DTF DTF->DTF. 01436300
JT CMSTOY GO EXIT FROM SUBROUTINE. 01437000
* -----END---------------------@06 01437700
.T0101 ANOP 01438400
SPACE 01440000
* HAVE SYSTEM INVITE INPUT 01450000
* USE MAXIMUM COMMAND LENGTH AS THE INPUT LENGTH 01460000
SPACE 01470000
EXTRN CC#MCL 01480000
MVC PLINL(2,XR1),CC#MCL MOVE MAX COMMAND LENGTH TO PARM 01490000
SPACE 01500000
CMSTOY EQU * ADD INPUT LENGTH 01510000
ALC #BUFND(2),PLINL(,XR1) ADD INPUT LENGTH 01520000
J CMSTOX JUMP TO RETURN 01530000
SPACE 01540000
* HAVE PUT OPERATION 01550000
* ADD OUTPUT LENGTH SPECIFIED IN PARAMETER LIST 01560000
SPACE 01570000
CMSPUT EQU * HAVE PUT OPERATION 01580000
ALC #BUFND(2),PLOUTL(,XR1) ADD OUTPUT LENGTH 01590000
SPACE 01600000
* DETERMINE WHETHER REQUEST INVOLVES A READ OR IF IT IS PUT-NO-WAIT. 01610000
* FOR PURE PUT NO WAIT ADD THE LENGTH OF A TP PARAMETER LIST 01620000
SPACE 01630000
TBN PLOPC(,XR1),OPGET IS IT PUT THEN GET 01640000
JT CMSTOX JUMP IF NOT PURE PUT NO WAIT 01650000
SPACE 01660000
* HAVE PUT NO WAIT WHICH REQUIRES SAVING OF THE TP PARAMETER LIST 01670000
SPACE 01680000
ALC #BUFND(2),CMLNPL ADD PARM LIST LENGTH 01690000
SPACE 01700000
CMSTOX B *-* RETURN 01710000
AGO .G0100 01720000
.N0010 MVI CMID2,CTSTOR MOVE IN ID OF CODED NEEDED 01730000
CMCAL2 ST CMSTR@+3,ARR SAVE RETURN ADDRESS 01740000
ST CMX1S2,XR1 SAVE XR1 (PARAMETER LIST ADDR) 01750000
B $CC4PI CALL TRANSIENT HANDLER 01760000
DC AL1(CC4B2) TRANSIENT REQUEST FOR $CC4B2 01770000
CMID2 DC XL1'00' KEY FOR TYPE CODE WANTED 01780000
CMX1S2 DC XL2'00' PARAMETER LIST ADDRESS 01790000
#BUFND DC XL2'00' STORAGE SIZE NEEDED FOR LINE. 01800000
SAVT2@ DC AL2(SAVTA2) ADDRESS OF SAVE TAS BYTE 2. 01810000
CMSTR@ B # RETURN TO CALLER. 01820000
.G0100 ANOP 01830000
TITLE '$E090/CMSET---FORMAT-PUT-NO-WAIT-AREA' 01840000
*********************************************************************** 01850000
* * 01860000
* NAME--CMSET * 01870000
* * 01880000
* TITLE--FORMAT PUT NO WAIT AREA * 01890000
* * 01900000
* FUNCTION-- * 01910000
* THIS ROUTINE WILL FORMAT A STORAGE AREA FOR A PUT NO * 01920000
* WAIT OPERATION. * 01930000
* * 01940000
* OPERATION-- * 01950000
* . IF A SYSTEM PUT NO WAIT THEN GET OPERATION MOVE THE * 01960000
* TP PARAMETER LIST INTO THE TUB. * 01970000
* . IF ANY OTHER PUT NO WAIT MOVE THE TP PARAMETER LIST * 01980000
* INTO THE FIRST PART OF THE GETMAINED AREA. * 01990000
* . MOVE THE GETMAIN PARAMETER LIST INTO THE ACQUIRED * 02000000
* AREA. * 02010000
* . FINALLY, MOVE THE DATA INTO THE ACQUIRED AREA. * 02020000
* * 02030000
* ENTRY POINT--CMSET * 02040000
* * 02050000
* INPUT-- * 02060000
* XR1-ADDRESS OF THE TP PARAMETER LIST. * 02070000
* XR2-SAVED AND RESTORED. * 02080000
* GMLIST-GETMAIN PARAMETER LIST. * 02090000
* * 02100000
* OUTPUT-- * 02110000
* XR1-ADDRESS OF THE TP PARAMETER LIST. * 02120000
* XR2-RESTORED TO ENTRY VALUE. * 02130000
* GETMAIN AREA-FORMATTED AS DEFINED ABOVE. * 02140000
* * 02150000
* EXTERNAL REFERENCES-- * 02160000
* $CC4MV-MOVE DATA INTO GETMAIN AREA FROM * 02170000
* USER TP PARAMETER LIST. * 02180000
* * 02190000
* EXIT-- * 02200000
* TO NSI OF CALLER. * 02210000
* * 02220000
*********************************************************************** 02230000
SPACE 02240000
AIF (&NOB).NB020 02250000
AIF (&MIN).N0050 02260000
.NB020 ANOP 02270000
CMSET EQU * ROUTINE TO SET UP GETMAIN AREA 02280000
* FOR A PUT NO WAIT 02290000
SPACE 02300000
* INPUT IS THE PARM LIST ADDR IN XR1 02310000
* AND THE CONTENTS OF THE GETMAIN PARM LIST 02320000
SPACE 02330000
* OUTPUT IS A FORMATTED STORAGE AREA 02340000
SPACE 02350000
ST CMSETX+3,ARR SAVE THE RETURN ADDR 02360000
ST CMSET2+3,XR2 SAVE XR2 02370000
SPACE 02380000
L GMLIST+GMADDR,XR2 POINT XR2 AT GETMAIN AREA 02390000
SPACE 02400000
* DETERMINE IF OPERATION IS PUT THEN GET AND WHETHER THE TP PARM LIST 02410000
* IS TO BE MOVED TO THE GETMAIN AREA 02420000
SPACE 02430000
TBN PLOPC(,XR1),OPGET DOES OP INVOLVE GET 02440000
JT CMSET7 JUMP IF PUT THEN GET 02450000
SPACE 02460000
* MOVE THE TP PARM LIST TO THE STORAGE AREA 02470000
SPACE 02480000
MVC PLLEN-1(PLLEN,XR2),PLLEN-1(,XR1) MOVE PARM LIST 02490000
LA 0(,XR2),XR1 POINT XR1 AT PARM LIST NOW IN 02500000
* THE GETMAINED AREA 02510000
LA 16(,XR2),XR2 BUMP XR2 TO POINT TO NEXT FREE 02520000
* BYTE 02530000
SPACE 02540000
SPACE 02550000
* NOW MOVE THE GETMAIN PARM LIST TO THE STORAGE AREA 02560000
SPACE 02570000
CMSET7 EQU * MOVE GETMAIN PARM LIST 02580000
MVC 3(4,XR2),GMLIST+GMSIZE MOVE GETMAIN PARM LIST 02590000
LA 4(,XR2),XR2 BUMP XR2 TO NEXT FREE BYTE 02600000
SPACE 02610000
*HAVE PUT OPERATION SO MUST MOVE DATA TO GETMAIN AREA 02620000
* SET UP MOVE LIST AND BRANCH TO GENERALIZED MOVE ROUTINE 02630000
SPACE 02640000
MVC MVL+MVLTOL(2),PLOUTL(,XR1) MOVE LENGTH TO MOVE LIST 02650000
MVC MVL+MVLFRA(2),PLRECA(,XR1) MOVE 'FROM' ADDR TO MOVE LIST 02660000
ST MVL+MVLTOA,XR2 STORE 'TO' ADDR IN MOVE LIST 02670000
SPACE 02680000
ST PLRECA(,XR1),XR2 STORE 1ST BYTE OF RECORD ADDR 02690000
* IN PARM LIST RECORD AREA FIELD 02700000
SPACE 02710000
* DETERMINE IF THERE IS ANY DATA TO MOVE 02720000
SPACE 02730000
CLC PLOUTL(2,XR1),CC0000 IS OUTPUT LENGTH EQUAL TO ZERO 02740000
JE CMSET2 IF LENGTH 0 SKIP MOVE AND RETURN 02750000
SPACE 02760000
LA MVL,XR2 POINT XR2 AT MOVE LIST 02770000
SPACE 02780000
B $CC4MV BR TO MOVE ROUTINE 02790000
SPACE 02800000
CMSET2 LA *-*,XR2 RESTORE XR2 02810000
ST CMSPL,XR1 SAVE ADDRESS OF NEW PARM LIST 02820000
CMSETX B *-* RETURN 02830000
.N0050 ANOP 02840000
AIF (&NOM).M1800 02850000
AIF (&NSCTL).S5800 02860000
TITLE '$E090/CMONSK/CMOFSK---MLTA-POLL-SKIP-BIT-ROUTINE' 02870000
*********************************************************************** 02880000
* MLTA INTERFACE ROUTINE FOR SETTING POLL SKIP BITS ON AND OFF * 02890000
*********************************************************************** 02900000
* * 02910000
* * 02920000
* FUNCTION: * 02930000
* * 02940000
* THIS ROUTINE WILL TURN ON OR OFF AS DESIGNATED, THE POLLING * 02950000
* SKIP BIT FOR AN MLTA TERMINAL ON A CONTROL STATION LINE * 02960000
* * 02970000
* . A CHECK IS MADE TO ASSURE THAT THE MLTA DTF IS OPEN AND IS * 02980000
* FOR A LINE WITH THE STATION CONTROL FEATURE * 02990000
* * 03000000
* . THE POLLING SKIP BIT FOR THE TERMINAL SPECIFIED BY THE * 03010000
* PARAMETER LIST IS THEN SET ON OR OFF AS APPROPRIATE BY * 03020000
* BRANCHING TO THE MLTA IOCS * 03030000
* * 03040000
* ENTRY POINTS: * 03050000
* * 03060000
* . CMONSK - TO SET ON THE POLLING SKIP BIT * 03070000
* * 03080000
* . CMOFSK - TO SET OFF THE POLLING SKIP BIT * 03090000
* * 03100000
* INPUT: * 03110000
* * 03120000
* INDEX REGISTER 1 CONTAINS THE ADDRESS OF THE PARAMETER LIST * 03130000
* FOR THE TERMINAL FOR WHICH THE SKIP BIT IS TO BE SET * 03140000
* * 03150000
* OUTPUT: * 03160000
* * 03170000
* POLLING SKIP BIT SET ON OR OFF AS DESIGNATED * 03180000
* * 03190000
* EXTERNAL REFERENCES: * 03200000
* * 03210000
* . PARAMETER LIST * 03220000
* * 03230000
* . TERMINAL UNIT BLOCK * 03240000
* * 03250000
* . MLTA DTF * 03260000
* * 03270000
* . MLTA IOCS (MLTIO1) * 03280000
* * 03290000
* . 1050 SERVICE ROUTINE (CMMCT) * 03300000
* * 03310000
* . TRANSIENT AREA HANDLER ($CC4PI) * 03320000
* * 03330000
* EXITS, NORMAL: * 03340000
* * 03350000
* TO INSTRUCTION FOLLOWING THE INVOKING OF THIS ROUTINE (ARR) * 03360000
* * 03370000
* EXITS, ERROR: * 03380000
* * 03390000
* TO TRANSIENT $CC4SC IF THE MLTA IOCS YIELDS A NON-ZERO * 03400000
* OPERATION START CODE TO THE REQEUST TO SET THE POLLING SKIP BIT* 03410000
* * 03420000
* ATTRIBUTES: * 03430000
* * 03440000
* RESIDENT, REUSABLE * 03450000
* * 03460000
*********************************************************************** 03470000
EJECT 03480000
* INPUT IS ADDR OF PARM LIST IN XR1 CM 03490000
* ENTRY FOR SETTING POLL SKIP BIT ON IS CMONSK CM 03500000
* ENTRY FOR SETTING POLL SKIP BIT OFF IS CMOFSK CM 03510000
* THIS ROUTINE ALSO SETS THE SKIP BIT STATUS BIT IN THE PARM LIST CM 03520000
SPACE 03530000
* IF ENTER HERE - SET THE POLL SKIP BIT ON CM 03540000
SPACE 1 03550000
CMONSK EQU * SET POLL SKIP BIT ON CM 03560000
SBN CMSWNF+1,BIT0 SET SWITCH TO BRANCH CM 03570000
J CMSVRG JUMP CM 03580000
SPACE 03590000
* IF ENTER HERE - SET POLL SKIP BIT OFF CM 03600000
SPACE 03610000
CMOFSK EQU * SET POLL SKIP BIT OFF CM 03620000
SBF CMSWNF+1,BIT0 SET SWITCH TO NO OP CM 03630000
SPACE 03640000
* SAVE THE REGISTERS CM 03650000
SPACE 03660000
CMSVRG EQU * SAVE REGISTERS CM 03670000
ST CMONOF+3,ARR SAVE THE ARR CM 03680000
ST CMON1+3,XR1 SAVE XR1 CM 03690000
ST CMON2+3,XR2 SAVE XR2 CM 03700000
SPACE 03710000
* MOVE APPROPRIATE OP CODE TO DTF CM 03720000
SPACE 03730000
L PLTUBA(,XR1),XR2 POINT XR2 AT THE TUB CM 03740000
L TUBDTF(,XR2),XR2 POINT XR2 AT THE DTF CM 03750000
SPACE 03760000
* ASSURE HAVE STATION CONTROL LINE CM 03770000
* AND THAT THE LINE IS OPEN CM 03780000
SPACE 03790000
TBN $MDAT2(,XR2),$MAOPN IS DTF OPEN CM 03800000
TBN $MDTFT(,XR2),MLSTAT IS IT STATION CONTROL CM 03810000
JF CMON2 LEAVE IF NOT STAION CONTROL CM 03820000
SPACE 03830000
* HAVE STATION CONTROL LINE SO PLAY WITH SKIP BIT CM 03840000
SPACE 03850000
L PLTUBA(,XR1),XR1 POINT XR1 AT TUB CM 03860000
SPACE 03870000
CMSWNF JC CMNNSK,X'87' SWITCH CM 03880000
MVI $MDOPC(,XR2),MLSKPF MOVE SKIP BIT OFF OP TO DTF CM 03890000
J CMPGTA GO PLUG TERMINAL ADDR IN DTF CM 03900000
CMNNSK MVI $MDOPC(,XR2),MLSKPN MOVE SKIP BIT ON OP TO DTF CM 03910000
SPACE 03920000
* * MOVE TERMINAL ADDRESS TO DTF CM 03930000
SPACE 03940000
CMPGTA MVC $MDTMA(2,XR2),TUBTMA(,XR1) MOVE TERMINAL ADDR TO DTF CM 03950000
CMON1 LA *-*,XR1 RESTORE XR1 CM 03960000
SPACE 03970000
AIF (&N1050).C5100 03980000
B CMMCT PLUG BYTE 2 OF TMA FOR 1050 C0M 03990000
.C5100 ANOP 04000000
SPACE 04010000
B MLTIO1 BR TO MLTA IOCS CM 04020000
CLI $MDOSC(,XR2),NOBIT CHECK START CODE CM 04030000
JE CMON2 JUMP IF START CODE GOOD CM 04040000
SPACE 04050000
* BRING IN TRANSIENT TO ANALYZE THE NON-ZERO MLTA START CODE CM 04060000
SPACE 04070000
B $CC4PI BR TO BRING IN TRANSIENT CM 04080000
DC AL1(CC4SC) TRANSIENT ID FOR START CODE. CM 04090000
SPACE 04100000
CMON2 LA *-*,XR2 RESTORE XR2 CM 04110000
CMONOF B *-* RETURN CM 04120000
.S5800 ANOP 04130000
.M1800 ANOP 04140000
TITLE '$E090/CMGMRT---GETMAIN-INTERFACE-ROUTINE' 04150000
*********************************************************************** 04160000
* I N T E R F A C E T O G E T M A I N R O U T I N E * 04170000
*********************************************************************** 04180000
* * 04200000
* FUNCTION: * 04210000
* PROVIDES A GENERALIZED INTERFACE FOR THE COMMUNICATIONS MANAGER* 04230000
* TO PERFORM A GETMAIN FOR HOLD BUFFER SPACE. IF WILL ASSURE * 04240000
* THAT THE PROPER INPUT IS PROVIDED TO THE GETMAIN SERVICE * 04250000
* ROUTINE. * 04260000
* * 04270000
* ENTRY POINT: CMGMRT * 04280000
* * 04310000
* INPUT: * 04320000
* THE SIZE OF THE HOLD BUFFER NEEDED IS IN FIELD GMSIZE OF THE * 04340000
* GETMAIN PARAMETER LIST GMLIST IN THE COMMUNICATIONS MANAGER * 04350000
* MODULE. * 04360000
* * 04370000
* OUTPUT: * 04380000
* ADDRESS OF THE HOLD BUFFER GOTTEN WILL BE IN FIELD GMADDR OF * 04400000
* THE GETMAIN PARAMETER LIST GMLIST IN THE COMMUNICATIONS * 04410000
* MANAGER MODULE. * 04420000
* * 04430000
* EXTERNAL REFERENCES: * 04440000
* . CCP COMMUNICATIONS AREA ($CCCOM) * 04460000
* . @BUFA IN $CCCOM * 04480000
* . GETMAIN SERVICE ROUTINE ENTRY POINT ($CC4GM) * 04500000
* * 04510000
* EXITS, NORMAL: * 04520000
* TO INSTRUCTION FOLLOWING THE INVOKING OF THIS ROUTINE (ARR) * 04540000
* * 04550000
* ATTRIBUTES: * 04560000
* RESIDENT, REUSABLE * 04580000
* * 04590000
*********************************************************************** 04600000
SPACE 3 04610000
CMGMRT EQU * INTERFACE TO THE GETMAIN ROUTINE 04620000
ST CMGMR1+3,XR1 SAVE XR1 04640000
ST CMGMR2+3,XR2 SAVE XR2 04650000
ST CMGMR9+3,ARR SAVE THE ARR 04660000
LA $CCCOM,XR1 POINT XR1 AT COMM AREA 04670000
LA @BUFA(,XR1),XR1 POINT XR1 AT GM CONTROL BLOCK 04680000
LA GMLIST,XR2 POINT XR2 AT GETMAIN LIST 04690000
B $CC4GM BRANCH TO GETMAIN ROUTINE 04700000
CMGMR1 LA *-*,XR1 RESTORE XR1 04710000
CMGMR2 LA *-*,XR2 RESTORE XR2 04720000
CMGMR9 B *-* RETURN TO CALLER 04730000
TITLE '$E090/CMFMRT---FREEMAIN-INTERFACE-ROUTINE' 04740000
*********************************************************************** 04750000
* F R E E M A I N I N T E R F A C E R O U T I N E * 04760000
*********************************************************************** 04770000
* * 04790000
* FUNCTION: * 04800000
* PROVIDES A GENERALIZED INTERFACE TO PERFORM A FREEMAIN OF HOLD * 04820000
* BUFFER SPACE. IT WILL ASSURE THAT THE PROPER INPUT IS PROVIDED* 04830000
* TO THE FREEMAIN SERVICE ROUTINE. * 04840000
* * 04850000
* ENTRY POINT: * 04860000
* CMFMRT (#CMFMR FROM A TRANSIENT) * 04880000
* CMFMR2 - THIS ENTRY POINT WILL NOT SET THE INTERNAL FREEMAIN * 04900000
* INDICATION * 04910000
* * 04920000
* INPUT: * 04930000
* INDEX REGISTER 2 CONTAINS THE ADDRESS OF THE 1ST BYTE BEYOND * 04950000
* THE GETMAIN/FREEMAIN PARAMETER LIST. * 04960000
* * 04970000
* OUTPUT: * 04980000
* THE HOLD BUFFER IS FREEMAINED * 05000000
* * 05010000
* EXTERNAL REFERENCES: * 05020000
* . CCP COMMUNICATIONS AREA ($CCCOM) * 05040000
* @BUFA OF $CCCOM * 05060000
* . FREEMAIN SERVICE ROUTINE ENTRY POINT ($CC4FM) * 05080000
* * 05090000
* EXITS, NORMAL: * 05100000
* TO INSTRUCTION FOLLOWING THE INVOKING OF THIS ROUTINE (ARR) * 05120000
* * 05130000
* ATTRIBUTES: * 05140000
* RESIDENT, REUSABLE * 05160000
* * 05170000
*********************************************************************** 05180000
EJECT 05190000
* INPUT IS THE ADDRESS OF THE RECORD AREA IN THE GETMAINED AREA IN XR2 05200000
* THUS 4 BYTES TO THE LEFT OF THIS ADDRESS WILL BE THE ADDRESS OF THE 05210000
* GETMAIN PARAMETER LIST 05220000
SPACE 05230000
* OUTPUT- THE AREA WILL BE FREEMAINED 05240000
* AN INTERNAL $CC4CM FREEMAIN POST BIT WILL BE SET ON 05250000
* XR2 WILL POINT TO THE NON-EXISTENT GETMAIN PARAMETER LIST WHEN THE 05260000
* ROUTINE RETURNS 05270000
SPACE 05280000
*********************************************************************** 05290000
* * 05300000
* THE FOLLOW CONSTANT MUST ALWAYS IMMEDIATELY PRECEDE THE ENTRY * 05310000
* POINT ADDRESS FOR ADDRESSABILITY FROM 'CM' TRANSIENTS. * 05320000
SPACE 05330000
CMPMSK EQU * * 05340000
DC XL2'0000' CM INTERNAL POST MASK WORKAREA. 05350000
SPACE 05360000
*********************************************************************** 05370000
SPACE 05380000
CMFMRT EQU * FREEMAIN INTERFACE ROUTINE 05390000
AIF (&NOB).NB090 05400000
AIF (&MIN).NX010 05410000
.NB090 SBF CMSWIT,CMFMGO SET SWITCH TO INDICATE FREEMAIN 05420000
* OCCURRED IN CM 05430000
.NX010 ANOP 05440000
SPACE 05450000
CMFMR2 EQU * ENTRY POINT WHICH DOES NOT SET 05460000
* INTERNAL FREEMAIN INDICATION 05470000
SPACE 05480000
ST CMFMRX+3,ARR SAVE THE ARR 05490000
ST CMFMR1+3,XR1 SAVE XR1 05500000
SPACE 05510000
* BACKUP XR2 TO POINT TO THE GETMAIN PARAMETER LIST 05520000
SPACE 05530000
A X$FFFC,XR2 SUBTRACT 4 FROM ADDR IN XR2 05540000
SPACE 05550000
* XR2 POINTS AT GETMAIN/FREEMAIN PARAMETER LIST 05560000
* NOW GET XR1 TO POINT TO THE GM/FM CONTROL BLOCK 05570000
SPACE 05580000
LA $CCCOM,XR1 POINT XR1 AT CCCOM 05590000
LA @BUFA(,XR1),XR1 POINT XR1 AT GM/FM CONTROL BLOCK 05600000
SPACE 05610000
B $CC4FM BRANCH TO FREEMAIN ROUTINE 05620000
SPACE 05630000
SBN CMPMSK+1,WPBFR SET INTERNAL CM FREEMAIN POST BIT05640000
SPACE 05650000
CMFMR1 LA *-*,XR1 RESTORE XR1 05660000
CMFMRX B *-* RETURN 05670000
TITLE '$E090/CMPSRQ---POST-REQUEST-SCHEDULED' 05680000
*********************************************************************** 05690000
* * 05700000
* NAME--CMPSRQ POST TP SCHEDULED. * 05710000
* * 05715000
* FUNCTION--POST REQUESTOR THAT HIS TP OPERATION HAS BEEN * 05760000
* SCHEDULED. * 05770000
* * 05780000
* OPERATION--POST THE REQUESTOR OF THE TP OPERATION THAT IT HAS * 05800000
* BEEN SCHEDULED FOR EXECUTION UNLESS THE OPERATION TO * 05810000
* BE POSTED IS TO A TERMINAL IN COMMAND INTERRUPT MODE. * 05820000
* POST THE COMMAND PROCESSOR ($CC4CP) IF THE TERMINAL IS* 05830000
* IN COMMAND INTERRUPT MODE. * 05840000
* * 05850000
* ENTRY POINT--CMPSRQ * 05860000
* * 05870000
* INPUT--XR1-ADDRESS OF THE TP PARAMETER LIST. * 05890000
* XR2-SAVED AND RESTORED. * 05900000
* * 05910000
* OUTPUT--XR1-ADDRESS OF THE TP PARAMETER LIST. * 05930000
* XR2-RESTORED TO ENTRY VALUE. * 05940000
* * 05950000
* EXTERNAL REFERENCES--$CC4PS-POST THE REQUESTOR THAT THE TP * 05970000
* OPERATION HAS BEEN SCHEDULED. * 05980000
* * 05990000
* EXIT--TO NSI OF CALLER. * 06010000
* * 06020000
*********************************************************************** 06030000
SPACE 06040000
CMPSRQ EQU * POST REQUESTER THAT TP SCHEDULED 06050000
ST CMPSRX+3,ARR STORE RETURN ADDR 06060000
ST CMPSR2+3,XR2 SAVE XR2 06070000
L PLTUBA(,XR1),XR2 POINT XR2 AT TUB 06090000
SPACE 06100000
* NEED TO POST THE REQUESTER THAT HIS OPERATION HAS BEEN SCHEDULED 06110000
* DETERMINE IF REQUESTOR IN COMMAND INTERRUPT MODE 06120000
* IF YES THEN REQUESTER IS COMMAND PROCESSOR SHOULD BE POSTED 06130000
* NOT THE TUB TCB 06140000
SPACE 06150000
TBN TUBAT2(,XR2),CMCMDI IN COMMAND INTERRUPT MODE 06160000
JF CMTBPS JUMP IF NOT CMD INT 06170000
SPACE 06180000
* IN COMMAND INTERRUPT MODE - SO MOVE $CC4CP TCB @ TO POST FIELD 06190000
SPACE 06200000
MVC CMPS1(2),CC@CPT MOVE CP TCB @ TO POST FIELD 06210000
J CMPSQ JUMP 06220000
SPACE 06225000
CMTBPS MVC CMPS1(2),TUBTCB(,XR2) MOVE TCB ADDR TO POST FIELD 06230000
CMPSQ EQU * ISSUE POST -IO SCHEDULED 06250000
B $CC4PS BR TO POST ROUTINE 06260000
DC XL2'8000' POST MASK - TP SCHEDULED 06270000
CMPS1 DC XL2'0' ADDR OF TCB TO BE POSTED 06280000
SPACE 06290000
CMPSR2 LA *-*,XR2 RESTORE XR2 06300000
CMPSRX B *-* RETURN 06310000
TITLE '$E090/CMFORM---FORMULATE-OPERATION-CODE' 06320000
*********************************************************************** 06330000
* FORMULATE THE PROPER TP OPERATION CODE 06340000
*********************************************************************** 06350000
SPACE 06360000
* ROUTINE TO DEVELOP PROPER OP CODE FOR EITHER A READ OR WRITE AND 06370000
* TAKING INTO CONSIDERATION ALL THE DIFFERENT TERMINAL TYPES POSSIBLE 06380000
* ON THE MLTA ADAPTER AND THE BSCA ADAPTER 06390000
SPACE 06400000
* AT THIS POINT MAKE SURE NEW OP NOT YET MOVED INTO DTF 06410000
* ALSO LEAVE TERMINAL ADDR OF DTF ALONE SINCE THE PREVIOUS OP AND TERM 06420000
* ADDR ARE USED IN THIS OP CODE DETERMINATION 06430000
SPACE 06440000
*EXPECT XR1 TO POINT TO PARM LIST 06450000
* EXPECT XR2 TO POINT TO DTF 06460000
SPACE 06470000
CMFORM EQU * FORM MLTA OP CODE 06480000
AIF (&NOM).M1900 06490000
ST CMFORX+3,ARR SAVE RETURN ADDR M 06500000
.M1900 ANOP 06510000
AIF (&ONE).C0560 06520000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 06530000
BF CMFMLT NO-GO HANDLE MLTA. 2 06540000
.C0560 ANOP 06550000
AIF (&NOB).C0570 06560000
SPACE 06570000
*********************************************************************** 06580000
* CHECK BSCA DTF FOR OPENED. IF OPENED GO VERIFY ACCEPTABITY OF THE B 06590000
* OPERATION REQUESTED. IF NOT OPENED, OPEN THE DTF FOR OPERATION. B 06600000
*********************************************************************** 06610000
SPACE 06620000
TBF LCBAT2(,DTF),LCBACT LINE INACTIVE (NOT BETWEEN EOT)B 06630000
BF CMFVFY NO-IS ACTIVE, GO SET NEXT OP. B 06640000
AIF (&MIN).N0070 06650000
.* THIS CODE WILL BE IN TRANSIENT $CC4B2 FOR MIN RES SYSTEM 06660000
CMFORB EQU * * B 06670000
SBF $BDATT(,DTF),$BCCNV+$BCGET SET OFF INPUT/OUTPUT IND'S. B 06680000
SBF LCBOPC(,DTF),LCBERP RESET BSCA TERM ERP IND. B 06690000
AIF (&NITB).I0400 06700000
MVI $BDITB(,DTF),0 ZERO ITB COUNT BYTE IB 06710000
.I0400 ANOP 06720000
MNN LCBOPC(,DTF),PL$OPM(,PL) SAVE OP CODE FOR CONFLIT CHECK.B 06730000
TBN PL$OPM(,PL),OPGET THIS A GET OPERATION ? B 06740000
L PLTUBA(,PL),TUB POINT TO THE TUB. B 06750000
JT CMFGET YES-GO SET UP FOR GET OP. B 06760000
SPACE 06770000
* SET UP DTF FOR ** PUT ** OPERATION. B 06780000
SPACE 06790000
SBF LCBAT2(,DTF),LCBPUT SET OFF PUT PENDING IND. B 06800000
SBN $BDATT(,DTF),$BCOUT SET OUTPUT FILE INDICAOR. B 06810000
MVI $BDOPC(,DTF),$BOPUT SET OP CODE FOR PUT. B 06820000
SPACE 06830000
* SET CURRENT ATTRIBUTTES, BLOCK LENGTH, AND OWNERSHIP STATUS. B 06840000
SPACE 06850000
B CMBTAS GO SET UP DTF/IOB/TUB/LCB. B 06860000
SPACE 06870000
SBN $BDAT1(,DTF),$BCPUT SET PUT SPAN FILE INDICATOR. B 06880000
MVC $BDBKL(2,DTF),LCBKLC(,DTF) FILL IN DTF BLOCK LENGTH. B 06890000
AIF (&NITB).I0600 06900000
TBN $BDATT(,DTF),$BCITB ITB MODE ? IB 06910000
JF CMFLIN NO-GO SET UP LINE DEPENDENCIESIB 06920000
MVC $BDITB(1,DTF),TUBBKF(,TUB) MOVE BLOCK FACTOR TO WORK AREIB 06930000
SLC $BDITB(1,DTF),CC0001 FIND NUMBER OF ITB CHARS. IB 06940000
SLC $BDITB(1,DTF),CC0001 FIND NUMBER OF ITB CHARS. IB 06950000
ALC LCBKLC(2,DTF),$BDITB(,DTF) ADD # ITB CHAR TO BUF REQUIREIB 06960000
AIF (&NTSP).I0500 06970000
TBN $BDATT(,DTF),$BCRAN TRANSPARENCY MODE ? IXB 06980000
JF CMFTB1 NO-GO SET ITB LENGTH TO ONE. IXB 06990000
ALC $BDITB(2,DTF),$BDITB(,DTF) DOUBLE THE ITB COUNT TO ADD IXB 07000000
ALC LCBKLC(2,DTF),$BDITB(,DTF) * 4 TIMES BLOCK FACTOR FOR AIXB 07010000
ALC LCBKLC(2,DTF),$BDITB(,DTF) * TOTAL OF 5 TIMES BLOCK FACIXR 07020000
ALC LCBKLC(2,DTF),TWO THEN ADD 2 FOR PUT-ITB-TRANSPIXB 07030000
MVC $BDITB(2,DTF),FIVE SET ITB LENGTH TO FIVE. IXB 07040000
J CMFLIN GO SET UP LINE DEPENDENCIES. IXB 07050000
SPACE 07060000
CMFTB1 EQU * * IXB 07070000
.I0500 ANOP 07080000
MVI $BDITB(,DTF),1 SET ITB LENGTH COUNT TO ONE. IB 07090000
.I0600 ANOP 07100000
J CMFLIN GO DETERMINE LINE SETUP NEEDS. B 07110000
SPACE 07120000
* SET UP DTF FOR ** GET ** OPERATION. B 07130000
SPACE 07140000
CMFGET EQU * * B 07150000
SBN $BDATT(,DTF),$BCINP+$BCGET SET INPUT FILE INDICATORS. B 07160000
MVI $BDOPC(,DTF),$BOGET SET OP CODE FOR GET. B 07170000
MVC $BDBKL(2,DTF),LCBBFL(,DTF) USE MAXIMUM LINE BLOCK LEN. B 07180000
MVC LCBKLC(2,DTF),$BDBKL(,DTF) FILL IN CURRENT MAX BLOCK LEN.B 07190000
SBN LCBAT2(,DTF),LCBRCI INDICATE RECEIVE INITIAL. B 07200000
SPACE 07210000
AGO .G0900 07220000
.N0070 MVI CMID2,CTFORB MOVE IN ID OF CODE DESIRED NB 07230000
B CMCAL2 CALL $CC4B2 TO CHECK LINE OPENNB 07240000
* AND SPECIAL CONSIDERATIONS. NB 07250000
.G0900 ANOP 07260000
* SET UP DTF FOR ANY LINE DEPENDENCIES. B 07270000
SPACE 07280000
CMFLIN EQU * * B 07290000
AIF (&NCS).S1000 07300000
&MIX SETA &NPP+&NMP+&NSWL 07310000
AIF (&MIX EQ '3').S0900 07320000
TBN $BDATR(,DTF),$BCMCN CONTROL STATION LINE ? CLB 07330000
JF CMFLCS NO-GO TO END OF CS CODE. CLB 07340000
.S0900 ANOP 07350000
MVC $BDLST(2,DTF),LCBPOL(,DTF) MOVE IN POLLING LIST ADDR. CB 07360000
* ----START--------------------@03 07362000
MVC $BDIND(,DTF),LCBLID(1,DTF) PUT ID IN THE DTF B 07364000
MVC $BDLID(1,DTF),LCBLID(,DTF) IN BOTH FIELDS B 07366000
* ------END--------------------@03 07368000
TBN $BDOPC(,DTF),$BOGET GET 'POLL' REQUEST ? CB 07380000
JT CMFIGR YES-GO FIGURE BUFFER CONFIG. CB 07390000
MVC LCBID#(1,DTF),TUBSID(,TUB) FILL ID OF DESIRED TERM. CB 07400000
LA LCBADL(,DTF),XR1 FILL IN SELECTION 'ADDRESSING'CB 07410000
ST $BDLST(,DTF),XR1 * LIST ADDRESS. CB 07420000
B CMASCH GO TO FIND THE SEL'T ENTRY. CB 07430000
SPACE 07440000
MVC LCBADL+8(9,DTF),8(,POL) MOVE IN MAX LEN SEL'T ENTRY. CB 07450000
MVI CMFLA+2,LCBADL+3 REFRESH INSTRUCTION DISPL. CB 07460000
ALC CMFLA+2,POLCNT(1,POL) SET TO END OF SELECT LIST. CB 07470000
CMFLA EQU * * CB 07480000
MVI #(,DTF),ONETIM END OF LIST: OPEN LIST IND. CB 07490000
AIF (&MIX EQ '3').S1000 07500000
J CMFIGR GO TO FIGURE BUFFER CONFIG. CLB 07510000
SPACE 07520000
CMFLCS EQU * * CB 07530000
.S1000 ANOP 07540000
AIF (&NSWL).S1200 07550000
&MIX SETA &NPP+&NMP+&NCS 07560000
AIF (&MIX EQ '3').S1100 07570000
TBN TUBAT1(,TUB),TUBSWC SWITCHED LINE ? SLB 07580000
.S1100 ANOP 07590000
TBF LCBAT3(,DTF),LCBENB AND LINE NOT ENABLED ? SB 07600000
JF CMFLSW NO-SKIP SWITCH LINE CODE. SB 07610000
MVC LCBID#(1,DTF),TUBSID(,TUB) USE TUB BSCA ID FOR SEARCH. SB 07620000
SBF $BDATR(,DTF),$BCMAN+$BCANS SET OFF SWL LINE TYPES. SB 07630000
TBN SAVTA1,TASCNC SWITCHED CALL ? SB 07640000
JT CMFSMN YES-GO CHECK FOR MANUAL OPERATSB 07650000
SBN $BDATR(,DTF),$BCANS SET DTF FOR ANSWER. SB 07660000
CMFSMN EQU * * SB 07670000
TBN SAVTA1,TASAUT AUTO OPERATION ? SB 07680000
JT CMFSRQ YES-GO CHECK REQUESTOR. SB 07690000
SBN $BDATR(,DTF),$BCMAN SET MANUAL OPERATION IN DTF. SB 07700000
CMFSRQ EQU * * SB 07710000
L LCBPL@(,DTF),PL POINT TO THE PARM LIST. SB 07720000
TBN PLOPM(,PL),OPREQR SYSTEM REQUEST ? SB 07730000
JT CMFSNB YES-GO SET ENABLED STATUS. SB 07740000
B $CC4PI CALL TRANSIENT HANDLER. SB 07750000
DC AL1(CC4WC) BRING IN SWITCH MESSAGE RTN. SB 07760000
SPACE 1 07770000
CMFSNB EQU * * 07780000
SBN LCBAT3(,DTF),LCBENB SET LINE ENABLED. SB 07790000
* -----------------------------START--@07 07795000
MVC $BDRID(2,DTF),LCBPOL(,DTF) FILL IN SWITCH LIST ADDRESS. SB 07800000
* -----------------------------START--@07 07805000
SBN $BDADD(,DTF),$BCSWD SET SWITCH LIST USED IND. SB 07810000
MVI $BDRLN(,DTF),POLACT SET ID TO USE ACTIVE ENTRIES.SB 07820000
TBN $BDATR(,DTF),$BCANS ANSWER LINE, AND SB 07830000
TBN LCBOPC(,DTF),OPGET * GET OPERATION ? SB 07831000
JT CMFIGR YES-HANDLE ANSWER-VERIFY ID'S SB 07840000
SPACE 1 07890000
CMFSCL EQU * * SB 07900000
SBF $BDADD(,DTF),$BCSWD SET OFF SWITCH LIST USED. SB 07910000
TBF SAVTA2,TASVFY RECEIVE ID VERIFY ? SB 07920000
JF CMFSNV NO-GO SET FOR NO VERIFY. SB 07930000
B CMPSCH CALL SWITCH LIST SEARCH RTN. SB 07940000
SPACE 1 07950000
* CONTROL IS RETURNED TO NSI IF THE ID IS FOUND IN THE LIST. SB 07960000
SPACE 1 07970000
J CMFSID GO SET UP ID IN THE DTF. SB 07980000
SPACE 1 07990000
* CONTROL RETURNS TO NSI+3 IF IF THE ID WAS NOT FOUND. SB 08000000
SPACE 1 08010000
CMFSNV EQU * * SB 08020000
MVI $BDRLN(,DTF),NOBIT SET ZERO LENGTH ID TO RECEIVE.SB 08030000
J CMFIGR GO TO FIGURE THE IOB'S NEEDED.SB 08040000
SPACE 1 08050000
CMFSID EQU * * 08060000
MVC $BDRLN(1,DTF),POLCNT(,POL) PUT RECEIVE ID LENGTH IN DTF.SB 08070000
LA POLCH1(,POL),POL UPDATE REG TO FIRST ID CHAR. SB 08080000
ST $BDRID(,DTF),POL STORE ADDRESS OF ID IN DTF. SB 08090000
AIF (&NMP).S1110 08100000
J CMFIGR GO TO FIGURE THE IOB'S NEEDEDSTB 08110000
SPACE 1 08120000
.S1110 ANOP 08130000
CMFLSW EQU * * SB 08140000
.S1200 ANOP 08150000
AIF (&NMP).S1130 08160000
&MIX SETA &NPP+&NSWL+&NCS 08170000
SPACE 1 08180000
* MULTI-POINT TRIBUTARY SUPPORT. 08190000
SPACE 1 08200000
AIF (&MIX EQ '3').S1120 08210000
TBN $BDATR(,DTF),$BCMPT MULTI-POINT TRIBUTARY ? TLB 08220000
JF CMFLMP NO-SKIP MP TRIB CODE. TLB 08230000
.S1120 ANOP 08240000
SBF $BDPSC-1(,DTF),POLBIT SET BSCA CHARACTERS FOR POLL. TB 08250000
SBF $BDPSC(,DTF),POLBIT ( I SEND - PUT,ETC ) TB 08260000
TBN $BDOPC(,DTF),$BOGET GETTING ? TB 08270000
JF CMFIGR NO-I'AM PUTTING. TB 08280000
SBN $BDPSC-1(,DTF),POLBIT SET ON FOR BEING ADDRESSED, TB 08290000
SBN $BDPSC(,DTF),POLBIT ( I RECEVIE - GET, ETC) TB 08300000
CMFLMP EQU * * TB 08310000
.S1130 ANOP 08320000
SPACE 08330000
* FIGURE OUT THE SPACE REQUIREMENTS FOR IOBS AND BUFFERS. B 08340000
SPACE 08350000
CMFIGR EQU * * B 08360000
CLI $BDWKA-1(,DTF),NOBIT WORKAREA ADDR SET YET ? B 08360600
JE CMNWKA NO - DON'T MOVE RETRY COUNT B 08361200
L $BDWKA(,DTF),WKA XR1--> BSCA WORK AREA B 08362000
MVC WKERRD(1,WKA),$BDERR(,DTF) RESTORE ERR RETRY COUNT B 08364000
SLC DCOUNT(2,WKA),DCOUNT(,WKA) RESTORE DELAY COUNT @17 08366000
CMNWKA EQU * * LOCAL B 08368000
MVC $BDIOB(2,DTF),LCBSRT(,DTF) RESTORE BUFFER START ADDRESS. B 08370000
AIF (&N32).T1200 08380000
L LCBPL@(,DTF),PL RELOAD THE PL REG. 0B 08390000
SPACE 08400000
* IF SYSTEM OR REFRESH OF 3270 SYSTEM, THEN RESERVE THE FIRST PART 0B 08410000
* OF THE LINE BUFFER FOR THE OUTPUT. 0B 08420000
SPACE 08430000
CLI CMSPHY,TUB5M2 THIS A 3270 TERMINAL ? 0B 08440000
TBN PL$OPM(,PL),OPPUT PUT OPERATION ? 0B 08450000
TBN PL$OPC(,PL),OPUSER SYSTEM FUNCTION ? 0B 08460000
AIF (&MOD4 NE '1').LJ002 08461000
L PLTUBA(,PL),TUB XR1 -->TUB 08462000
TBF TUBAT1(,TUB),TUBKNM AND NOT THE CONSOLE ? 08463000
L LCBPL@(,DTF),PL XR1 --> PARM LIST 08464000
.LJ002 ANOP 08465000
JC CMFIGL,FLSOHI NO-GO HANDLE REGULARILY. 0B 08470000
ALC $BDIOB(2,DTF),MAXMSG RESERVE LINE BUFFER SPACE. 0B 08480000
MVC LCBKLC(2,DTF),LCBADJ(,DTF) USE ADJUSTED LEN FOR BLK LEN. B 08490000
CMFIGL EQU * * 0B 08500000
.T1200 ANOP 08510000
AIF (&MIN).N0080 08520000
.* THIS FOLLOWING CODE WILL BE IN TRANSIENT $CC4B2 08530000
L LCBKLC(,DTF),WORK BLOCK SIZE REQUIRED IN WORK REGB 08540000
LA LINFO(,WORK),WORK ALLOW FOR MAX LINE CONTROL CHARB 08550000
ST LCBWRK(,DTF),WORK SAVE COMPUTED VALUE. B 08560000
L $BDIOB(,DTF),IOB LOAD PTR TO IOB. B 08570000
MVC IOBQ(1,IOB),$BDDEV(,DTF) BUILD IOB Q CODE. B 08580000
MVC IOBDBL(2,IOB),LCBWRK(,DTF) PUT BUFFER LENGTH INTO IOB. B 08590000
ST IOBNXT(,IOB),IOB POINT 1ST IOB TO SELF. B 08600000
ST IOBDTF(,IOB),DTF POINT IOB BACK TO DTF. B 08610000
MVI IOBERR(,IOB),X'00' SET ERROR COUNT TO ZERO. B 08620000
ST IOBDAT(,IOB),IOB SET @ OF IOB B 08630000
ALC IOBDAT(2,IOB),IOBLEN * DATA AREA. B 08640000
MVC IOBFLG(1,IOB),$BDATT(,DTF) SET IOB FLAG BYTE. B 08650000
MVI IOBFLA(,IOB),TXTSNT INITIALIZE TEXT INDICATORS. B 08660000
MVI IOBCMP(,IOB),DONE INITIALIZE BUFFER STATUS. B 08670000
TBN $BDATT(,DTF),$BCINP GET FILE ? B 08680000
JF CMFMOR NO-GO CONTINUE CARVING. B 08690000
MVI IOBCMP(,IOB),READY ELSE SET BUFFER STATUS TO READYB 08700000
MVI IOBFLA(,IOB),X'00' ZERO TEXT DIRECTION INDICATOR. B 08710000
CMFMOR EQU * * B 08720000
AIF (&NOB).NB030 08730000
AIF (&MIN).N0100 08740000
.NB030 ANOP 08750000
MVC IOBNEX(2,IOB),IOBDAT(,IOB) DETERMINE START ADDRESS FOR B 08760000
ALC IOBNEX(2,IOB),IOBDBL(,IOB) * ANOTHER IOB. B 08770000
CMFMUL EQU * * B 08780000
MVC IOBDBN(2,IOB),IOBNEX(,IOB) DETERMINE ADDRESS OF NEXT B 08790000
ALC IOBDBN(2,IOB),IOBLEN * DATA AREA. B 08800000
MVC IOB2NX(2,IOB),IOBDBN(,IOB) DETERMINE END ADDRESS FOR B 08810000
ALC IOB2NX(2,IOB),IOBDBL(,IOB) * POSSIBLE NEXT IOB/BUFFER. B 08820000
SLC IOB2NX(2,IOB),CC0001 MAKE END @ ACTUAL B 08825000
CLC IOB2NX(2,IOB),LCBBND(,DTF) ANOTHER IOB/BUFFER FIT ? B 08830000
JH CMFCLN NO-GO CLEAN-UP THIS OPEN. B 08840000
L IOBNEX(,IOB),IBX LOAD REG WITH IOB NEXT @. B 08850000
MVC IOBDTF(IOBDTF+1,IBX),IOBDTF(,IOB) COPY THE IOB. B 08860000
ST IOBNXT(,IOB),IBX CHAIN NEXT IOB TO LAST. B 08870000
MVC IOBDAT(2,IBX),IOBDBN(,IOB) MOVE IN NEW DATA BUFFER @. B 08880000
MVC IOBNEX(2,IBX),IOB2NX(,IOB) MOVE PTR TO NEXT IOB AREA. B 08890000
LA 0(,IBX),IOB MAKE LAST IOB IN CHAIN CURRENT.B 08900000
L IOBDTF(,IOB),DTF RESTORE DTF REGISTER. B 08910000
B CMFMUL GO TO MULTIPLE IOB LOGIC AGAIN.B 08920000
.N0100 ANOP 08930000
SPACE 08940000
* IOB AND BUFFER ALLOCATION DONE, PERFORM FINAL CLEAN-UP ACTIVITY. B 08950000
SPACE 08960000
CMFCLN EQU * * B 08970000
MVI $BDCMP(,DTF),$BCDNE MARK DTF DONE. B 08980000
MVC $BDINT(2,DTF),LCB$L0(,DTF) RESTORE C/S @ OF $$BSL0. B 08990000
MVI $BDNDX(,DTF),X'00' SET LINE INIT TRANS. ID TO 1ST.B 09000000
L IOBNXT(,IOB),IOB POINT TO 1ST IOB. B 09010000
SBN IOBFLA(,IOB),FIRST SET FIRST BUFFER INDICATOR. B 09020000
L LCBPL@(,DTF),PL RELOAD THE PARM LIST REG B 09030000
SPACE 1 09040000
AGO .G9999 09050000
.N0080 ANOP 09060000
MVI CMID2,CTRLB MOVE IN FLAG OF WHICH CODE TO 09070000
* EXECUTE IN THE TRANSIENT 09080000
B CMCAL2 CALL IN TRANSIENT $CC4B2 09090000
.G9999 ANOP 09100000
.C0570 ANOP 09110000
MEND 09130000