|
|
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: 30480 (0x7710)
Types: s3xseg
Names: »S$E080«
└─⟦827b5bd03⟧ Bits:30009184 5702-sc1.V16.ccp
└─⟦f17e99db6⟧
└─⟦this⟧ »S$E080«
MACRO 00010000
.********************************************************************** 00015000
.* NAME: $E080 V-15, M-00. * 00030000
.********************************************************************** 00035000
$E080 00650000
GBLB &ONE,&NOB,&NOM,&N37,&MIN,&NDME,&NDF,&N32,&N41,&NRUF 00660000
GBLB &MOD4,&BPRT *L00670000
LCLA &MIX 00690000
TEXT 00700000
* R-15,C-00 CHANGE LEVEL 00710000
$CC4CM TITLE '$E080/CMWEND---WRITE-OP-END' 00720000
* PRINTER BUSY FLAG 2/01/78 *L 00725000
*********************************************************************** 00730000
* WRITE OP END ANALYSIS * 00740000
*********************************************************************** 00750000
SPACE 00760000
* COME HERE ON SUCCESSFUL OP END OF A WRITE OPERATION 00770000
* CHECK FOR WRITE CONVERSATIONAL (PUT THEN GET) 00780000
* IF NOT WRITE CONVERSATIONAL READY TO DEQUEUE THE PARM LIST 00790000
* IF WRITE CONVERSATIONAL, REFORMAT PARAMETER LIST AND GO BACK TO 00800000
* RESCHEDULE THE LINE 00810000
SPACE 00820000
CMWEND EQU * WRITE OP END HANDLER 00830000
AIF (&ONE).C0350 00840000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 00850000
JF CMWPGX NO-GO CHECK FOR PUT-GET. 2 00860000
.C0350 ANOP 00870000
AIF (&NOB).C0360 00880000
TBF PLOPM(,PL),OPREQR USER REQUEST, AND B 00890000
TBN LCBAT2(,DTF),LCBTRC * BLOCK TRUNCATED IND ON ? B 00900000
SBF LCBAT2(,DTF),LCBTRC SET OFF THE TRUNCATED IND. B 00910000
JF CMWRVI NO-GO CHECK FOR RVI RECEIVED. B 00920000
CLC PLOUTL(2,PL),SAVRCL OUTL LESS THAN TAS RECL ? B 00930000
JNL CMWTRC NO-THEN OUTPUT WAS TRUNCATED. B 00940000
B $CC4PI OTHERWISE CALL XIENT TO PAD B 00950000
DC AL1(CC4BB) * RECORD AREA WITH BLANKS. B 00960000
DC AL2($$BSMS) ADCON FOR MLMP IOCS. B 00970000
DC AL2($$BMCH) ADCON FOR CHECK. B 00980000
SPACE 1 00990000
* BB RETURNS TO NSI+4 IF AN ERROR OCCURRES. B 01000000
* BB RETURNS TO NSI+7 IF A NORMAL OPERATION OCCURRED. B 01010000
SPACE 1 01020000
B CMCMP GO HANDLE ERROR CASE. B 01030000
SPACE 1 01040000
CMWTRC EQU * SKIPPED BY BB RETURN. B 01050000
SBN PL$RTC(,PL),RCXDTR SET TRUNCATED RETURN CODE. B 01060000
SPACE 1 01070000
CMWRVI EQU * * B 01080000
TBN LCBOPC(,DTF),LCBRVI RVI RECEIVED ? B 01090000
JF CMWEOT NO-GO CHECK FOR SEND EOT NEEDEDB 01100000
MVI PL$RTC(,PL),RCXRVI SET RVI RETURN CODE. B 01110000
SBF LCBOPC(,DTF),LCBRVI SET OFF RVI RECEIVED FLAG *L 01115000
CMWEOT EQU * * B 01120000
TBN LCBAT2(,DTF),LCBSET SEND EOT OPERATION ? B 01130000
JF CMWETX NO-CHECK FOR SEND EOT. B 01140000
CMWABT EQU * * B 01150000
TBN LCBAT2(,DTF),LCBABT LINE ABORT IN PROCESS ? B 01160000
SLC LCBAT2(2,DTF),LCBAT2(,DTF) CLEAR LCBAT1 AND LCBAT2. B 01170000
BT CMRSCH YES-GO RESCHEDULE THE LINE. B 01180000
L PLTUBA(,PL),XR2 LOAD REG TO THE TUB. B 01190000
SBF TUBAT2(,XR2),TUBOWN SET OFF TUB OWN INDICATOR. B 01200000
AIF (&NRUF).T0298 01200600
AIF (&MOD4 NE '1').LJ005 01200630
TBN TUBAT1(,XR2),TUBKNM CONSOLE ? 01200660
JF CMNENB NO - JUMP 01200690
SBF PL$OPM(,PL),OPPUT RESET PUT INDICATOR 01200720
LA $CCCOM,XR2 XR2 --> CCP COMMON AREA 01200750
L @KMWK(,XR2),XR2 XR2 --> CONSOLE WORK AREA 01200780
TBN #KMSW2(,XR2),#KMENK ENABLE REQUIRED ? 01200810
JF CMNTX5 NO - JUMP 01200840
SPACE 1 01200870
* LOAD $CC4X5 TO CLEAR INPUT BUFFER AND ENABLE CONSOLE KEYBOARD 01200900
SPACE 1 01200930
B $CC4PI XIENT AREA HANDLER 01200960
DC AL1(CC4X5) TRANSIENT ID 01200990
CMNTX5 EQU * * 01201020
B CMRSCH GO RESCHEDULE THE LINE 01201050
CMNENB EQU * * 01201080
.LJ005 ANOP 01201110
* -----START-------------------@06 01201200
* SET OFF RUF INDICATION FOR A SUCCESSFUL USER PUT OPEND. 01201800
TBF PLOPM(,PL),OP$SYS USER OPERATION ? 01202400
JF CMWRFH NO-SKIP RUF SETS. 01203000
SBF TUBSCS(,XR2),TUBRUF SET OFF RUF INDICATOR. 01203600
* SET ON RUF INDICATOR FOR A USER PUT/RUF-MSG OPERATION. 01204200
TBN PLOPC(,PL),OPRUF RUF OPERATION 01204800
TBF PLOPC(,PL),OPORDR-OPRUF * CODE ? 01205400
JF CMWRFH NO-DON'T SET ON RUF INDICATOR. 01206000
SBN TUBSCS(,XR2),TUBRUF SET ON RUF INDICATOR. 01206600
CMWRFH EQU * * 01207200
* -----END---------------------@06 01207800
.T0298 ANOP 01208400
L TUBDTF(,XR2),DTF RELOAD THE DTF REG. B 01210000
AIF (&N32).T0300 01220000
SPACE 01230000
* IF THIS IS EOT FOR SCREEN REFRESH OPTION, THEN GO TO RESCHEDULE. 0B 01240000
SPACE 01250000
TBN PL$OPC(,PL),OPRFSH REFRESH OPERATION ? 0B 01260000
SBF PL$OPC(,PL),OPRFSH SET OFF REFRESH INDICATOR. 0B 01270000
JF CMWDFF NO-GO TEST FOR DFF, IF IN SYST0B 01280000
MNN PL$OPM(,PL),PL$OPC(,PL) RESTORE ORIGINAL OP CODE. 0B 01290000
J CMRDOJ GO TO REDO WORK CHECK ON LINE.0B 01300000
SPACE 01310000
CMWDFF EQU * * 0B 01320000
SPACE 01330000
AIF (&NDF).T0300 01340000
* IF THIS IS EOT FOR DFF, THEN FREE UP HIS HOLD BUFFER, AND B 01350000
* DO A GENERAL POST. B 01360000
SPACE 01370000
TBN SAVTA1,TASDFF * DFF SUPPORTED ? FB 01380000
JF CMWPGX NO-GO CHECK FOR PUT-GET OP. FB 01390000
L PLTUBA(,PL),XR1 XR1---> TUB 01400000
L TUBTCB(,XR1),XR1 XR1---> TCB 01410000
MVC USRTID,TCBID(1,XR1) SAVE TCB ID 01420000
LA $CCCOM,XR1 LOAD THE CCOM POINTER. FB 01430000
TBN $BDDEV(,DTF),LINE2 THIS LINE TWO DTF ? FB 01440000
JT CMWDF2 YES-GO FREE LINE TWO HOLD BUFRFB 01450000
CLC USRTID,#DF1ID(1,XR1) THIS TCB OWN OHA ? 01460000
JNE CMWDPL NO-DON'T CLEAR OWNER(JUMP) 01470000
MVI #DF1ID(,XR1),NOBIT CLEAR LINE 1 DFF HOLD BUF OWNEFB 01480000
J CMWDFP GO TO POST DFF HOLD BUF FREE. FB 01490000
SPACE 01500000
CMWDF2 EQU * FREE LINE TWO DFF HOLD BUFFER.FB 01510000
CLC USRTID,#DF2ID(1,XR1) THIS TCB OWN OHA ? 01520000
JNE CMWDPL NO-DON'T CLEAR OWNER(JUMP) 01530000
MVI #DF2ID(,XR1),NOBIT CLEAR LINE 2 DFF HOLD BUF OWNEFB 01540000
CMWDFP EQU * POST DFF HOLD BUFFER FREE. FB 01550000
B $CC4PS CALL POST. FB 01560000
DC AL2(WPBOHA) MASK-DFF HOLD BUFFER FREE. FB 01570000
TWO DC AL2(2) GENERAL POST, AND CONSTANT. FB 01580000
CMWDPL EQU * 01590000
L LCBPL@(,DTF),PL RELOAD THE PARM LIST REG. FB 01600000
.T0300 ANOP 01610000
J CMWPGX CHECK FOR PUT-GET. B 01620000
SPACE 01630000
CMWETX EQU * * B 01640000
TBN PL$OPC(,PL),OPUSER SYSTEM FUNCTION ? B 01650000
JT CMWSET YES-GO SET SEND EOT. B 01660000
* -----START-------------------@06 01665000
TBN PLOPC(,PL),OPMSG IS THIS A PUT-MSG B 01670000
TBF PLOPC(,PL),OPORDR-OPRUF * OPERATION ? B 01680000
* -----END---------------------@06 01685000
JT CMWSET YES-GO SET SEND EOT. B 01690000
TBN PLOPC(,PL),OPGET GET FOLLOW PUT OPERATION ? B 01700000
JF CMWPGX NO-GO CONVERT OP IF PUT-GET. B 01710000
CMWSET EQU * * B 01720000
SBN LCBAT2(,DTF),LCBSET SET SEND EOT. B 01730000
CMFOR2 EQU * * B 01740000
B CMFORM GO TO FORM NEXT OP ON LINE. B 01750000
SPACE 01760000
CMWPGX EQU * * B 01770000
.C0360 ANOP 01780000
SPACE 01790000
* DETERMINE IF OP WAS PUT THEN GET 01800000
SPACE 01810000
TBN PLOPC(,XR1),OPGET WAS IT PUT THEN GET 01820000
JF CMRETC JUMP IF NOT 01830000
SPACE 01840000
* IT WAS PUT THEN GET 01850000
* SCHEDULE A READ OPERATION USING THE SAME PARAMETER LIST THAT WAS USED 01860000
* FOR THE WRITE PORTION OF THE TP REQUEST 01870000
* OTHER PARAMETERS REMAIN THE SAME 01880000
SPACE 01890000
SPACE 01900000
* REFORMAT THE PARAMETER LIST FOR THE READ PORTION 01910000
SPACE 01920000
SLC PL$RTC(2,XR1),PL$RTC(,XR1) CLEAR INTERNAL RETURN CODE 01930000
SBF PL$OPM(,XR1),OPPUT SET OFF PUT BIT 01940000
SBN PL$OPM(,XR1),OPGET SET ON GET BIT 01950000
SPACE 01960000
* MUST DETERMINE IF ORIGINAL OPERATION WAS A NO WAIT OP 01970000
* IF YES - EVEN THOUGH THE PUT WAS CHANGED INTO A PUT WAIT, THE GET 01980000
* MUST BE RESET TO AN INVITE INPUT. 01990000
SPACE 02000000
TBN PLOPC(,XR1),OPNOW WAS OP A NO WAIT 02010000
BF CMREDO JUMP IF NOT TO RESTART THE LINE 02020000
SPACE 02030000
* ORIGINAL OP WAS NO WAIT - NOW MUST DETERMINE IF OP JUST COMPLETED 02040000
* WAS NO WAIT OR WHETHER CM CHANGED IT INTO A WAIT OP 02050000
SPACE 02060000
* IF NO WAIT BIT ON - THEN MUST FREEMAIN THE RECORD AREA 02070000
SPACE 02080000
TBN PL$OPM(,XR1),OPNOW IS IT NO WAIT TYPE OPERATION 02090000
JT CMNWFM JUMP IF YES TO FREEMAIN 02100000
SPACE 02110000
* HAVE OP END OF PUT WAIT WHICH WAS ORIGINALLY A PUT NO WAIT 02120000
* DO NOT NEED TO FREEMAIN - BUT SHOULD POST USER THAT THE TP HAS BEEN 02130000
* SCHEDULED 02140000
SPACE 02150000
SBN PL$OPM(,XR1),OPNOW SET NO WAIT BIT ON IN INTERNAL 02160000
* OP CODE MODIFIER 02170000
B CMPSRQ BR TO POST REQ'STR TP-SCHEDULED. 02180000
CMRDOJ EQU * * B 02190000
J CMRDO1 JUMP TO RESTART THE LINE 02200000
SPACE 02210000
* HAVE OP END OF PUT NO WAIT PART OF SYSTEM PUT THEN INVITE SO 02220000
* ISSUE FREEMAIN 02230000
SPACE 02240000
CMNWFM EQU * FREEMAIN PUT NO WAIT AREA 02250000
L PLRECA(,XR1),XR2 POINT XR2 AT RECORD AREA OF AREA 02260000
* TO BE FREEMAINED 02270000
B CMFMRT BR TO FREEMIAN INTERFACE ROUTINE 02280000
CMRDO1 EQU * * 02285000
B CMREDO JUMP TO RESTART THE LINE 02290000
$CC4CM TITLE '$E080/CMRETC---FINAL-OP-END-HANDLING' 02300000
*********************************************************************** 02310000
* FINAL HANDLING OF OP ENDED REQUEST * 02320000
*********************************************************************** 02330000
CMRETC EQU * PUT THE RETURN CODE IN PARM LIST 02340000
AIF (&ONE).C0370 02350000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 02360000
JF CMDEQ NO-GO DIRECTLY TO DEQUEUE. 2 02370000
.C0370 ANOP 02380000
AIF (&NOB).C0380 02390000
TBN LCBAT1(,DTF),LCBEOT SEARCH EOT ? B 02400000
BT CMFORM YES-GO FORM NEXT OP FOR LINE. B 02410000
SPACE 1 02420000
* SET OFF IIS FOR ALL GET OPERATIONS. B 02430000
SPACE 1 02440000
TBN PLOPC(,PL),OPGET GET OPERATION ? B 02450000
JF CMRACT NO-GO TEST LINE ACTIVE. B 02460000
L PLTUBA(,PL),XR2 POINT TO THE TUB. B 02470000
SBF TUBAT2(,XR2),TUBIIS SET OFF INVITE SCHEDULED. B 02480000
L TUBDTF(,XR2),DTF POINT TO THE DTF. B 02490000
CMRACT EQU * * B 02500000
TBN LCBAT2(,DTF),LCBACT LINE ACTIVE ? B 02510000
JF CMDEQ NO-GO AND JUST DEQUE. B 02520000
SBN LCBAT1(,DTF),LCBNTQ SET ID ACTIVE PARM LIST REMOVEDB 02530000
.C0380 ANOP 02540000
SPACE 02550000
*********************************************************************** 02560000
* DEQUEUE THE PARAMETER LIST * 02570000
*********************************************************************** 02580000
SPACE 02590000
* NEXT DEQUEUE THE OPERATION THAT JUST COMPLETED 02600000
SPACE 02610000
* TAKE THE POINTER FROM THIS PARM LIST AND PLACE IN PTR ADDR OF 02620000
* LOCATION THAT POINTED TO THE COMPLETED OPERATION 02630000
SPACE 02640000
CMDEQ EQU * DEQUEUE THE PARM LIST 02650000
AIF (&ONE).D0380 02660000
L CMSDTF,DTF RELOAD DTF REGISTER. 2 02670000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 02680000
JF CMDPRV NO-GO HANDLE MLTA CASE. 2 02690000
.D0380 ANOP 02700000
AIF (&NOB).E0380 02710000
LA LCBPLQ-1(,DTF),XR2 LOAD PTR TO FIRST PARM LIST. B 02720000
CMDQCK EQU * * B 02730000
CLC PLCHN(2,XR2),CMSPL NEXT PARM LIST TO DEQ ? B 02740000
JE CMDCHN YES-GO TO DE-CHAIN IT. B 02750000
L PLCHN(,XR2),XR2 UPDATE TO NEXT PARM LIST. B 02760000
B CMDQCK GO BACK AND CHECK THIS ONE. B 02770000
SPACE 02780000
AIF (&ONE).E0380 02790000
CMDPRV EQU * * 2 02800000
.E0380 ANOP 02810000
AIF (&NOM).M0600 02820000
L CMVPTR,XR2 LOAD PREVIOUS POINTER IN XR2 M 02830000
SPACE 02840000
.M0600 ANOP 02850000
* MOVE PTR TO NEXT PARM LIST TO PREVIOUS PARM LIST POINTER 02860000
SPACE 02870000
AIF (&NOB).H0380 02880000
CMDCHN EQU * * B 02890000
.H0380 ANOP 02900000
MVC 1(2,XR2),PLCHN(,XR1) MOVE POINTER 02910000
SPACE 02920000
* PLUG THE EXTERNAL RETURN CODE FIELD WITH THE RETURN CODE THAT HAS 02930000
* BEEN FORMED IN THE INTERNAL RETURN CODE WORK AREA 02940000
SPACE 02950000
MVC PLRTC(2,XR1),PL$RTC(,XR1) PLUG EXTERNAL RETURN CODE 02960000
SPACE 02970000
* DETERMINE IF OP WAS A PUT NO WAIT 02980000
SPACE 02990000
TBN PL$OPM(,XR1),OPPNOW WAS OP PUT NO WAIT 03000000
JF CMMARK IF NOT, JUMP TO POST TCB 03010000
SPACE 03020000
* IT WAS PUT NO WAIT SO ISSUE FREEMAIN 03030000
SPACE 03040000
AIF (&NOB).C0385 03050000
L PLTUBA(,PL),XR2 POINT TO THE TUB, TO GET B 03060000
AIF (&BPRT).BP080 PRINTER BUSY FLAG *L 03061000
AGO .BP090 *L 03062000
.BP080 ANOP *L 03063000
TBN TUBAT4(,XR2),TUBWAT *L 03064000
JT CMMARK *L 03065000
.BP090 ANOP END PRINTER BUSY FLAG *L 03066000
L TUBDTF(,XR2),DTF THE DTF ADDRESS. B 03070000
AIF (&NOM).C0384 03080000
TBN $BDDEV(,DTF),BSCA BSCA DTF, AND B 03090000
.C0384 ANOP 03100000
TBN LCBOPC(,DTF),LCBERP IN TERM ERP PROCESS ? B 03110000
JT CMREDO DON'T FREE IF BSCA TERM ERP. B 03120000
.C0385 ANOP 03130000
L PLRECA(,XR1),XR2 POINT XR2 AT RECORD AREA 03140000
B CMFMRT BR TO FREEMAIN INTERFACE 03150000
J CMREDO JUMP TO SEE IF MORE PARM LISTS 03160000
* ON LINE 03170000
$CC4CM TITLE '$E080/CMMARK---POST-ANALYSIS' 03180000
*********************************************************************** 03190000
* $CC4CM POST ANALYSIS * 03200000
*********************************************************************** 03210000
SPACE 03220000
CMMARK EQU * POST THE PROPER TCB 03230000
SPACE 03240000
L PLTUBA(,XR1),XR2 POINT XR2 AT TUB 03250000
SPACE 03260000
* CHECK NO POST BIT TO SEE IF NO TCB IS TO BE POSTED DUE TO THE 03270000
* COMPLETION OF THIS OPERATION 03280000
SPACE 03290000
AIF (&BPRT).BP091 PRINTER BUSY CODE *L03291000
AGO .BP092 *L03292000
.BP091 ANOP *L03293000
TBN TUBAT4(,XR2),TUBWAT *L03294000
JT CMBPR *L03295000
.BP092 ANOP END PRINTER BUSY CODE *L03296000
TBF PL$OPM(,XR1),OPNPST+OPBNOP IS NO POST BIT ON ? 03300000
JF CMREDO JUMP IF NO POST BIT IS ON. 03310000
AIF (&BPRT).BP093 PRINTER BUSY CODE *L03311000
AGO .BP094 *L03312000
.BP093 ANOP *L03313000
CMBPR EQU * *L03314000
.BP094 ANOP END PRINTER BUSY CODE *L03315000
SPACE 03320000
* DETERMINE WHETHER TO POST BASED ON THE FOLLOWING 03330000
* IF ITS USER PARM LIST AND THE TUB POINTS TO A SYSTEM TCB 03340000
* THEN DO NOT POST UPON OP END OF THE OPERATION 03350000
SPACE 03360000
L TUBTCB(,XR2),XR2 POINT XR2 AT TUB TCB 03370000
TBN TCBTSK(,XR2),TCBSYT IS IT SYSTEM TASK 03380000
TBF PLOPM(,XR1),OP$SYS IS IT USER REQUEST 03390000
JT CMREDO JUMP IF USER OP AND SYSTEM TCB 03400000
SPACE 03410000
* OKAY TO POST 03420000
SPACE 03430000
L PLTUBA(,XR1),XR2 POINT XR2 AT TUB 03440000
SPACE 03450000
* DETERMINE WHICH TCB TO POST 03460000
* IF IN COMMAND INTERRUPT MODE - POST COMMAND PROCESSOR 03470000
* ELSE POST THE TCB POINTED TO BY THE TUB 03480000
SPACE 03490000
MVC PSTCB(2),TUBTCB(,XR2) MOVE TCB ADDR FROM TUB TO POST 03500000
SPACE 1 03500900
* POST THE COMMAND PROCCESSER ON SYSTEM INVITES 03501800
SPACE 1 03502700
TBN PLOPM(,XR1),OP$SYS SYSTEM 03503600
TBN PLOPC(,XR1),OPINV INVITE 03504500
AIF (&BPRT).BP100 PRINTER BUSY CODE *L03504600
AGO .BP200 *L03504700
.BP100 ANOP *L03504800
TBF TUBAT4(,XR2),TUBBSY+TUBWAT 1/23/78 *L03504900
.BP200 ANOP END PRINTER BUSY CODE *L03505000
JF CMCPPS NO-POST USING TCB @ IN TUB 03505400
MVC PSTCB(2),CC@CPT YES-POST THE COMMAND PROC. 03506300
SPACE 1 03507200
CMCPPS EQU * 03508100
SPACE 1 03509000
AIF (&NDME).D5200 03510000
TBN TUBAT2(,XR2),CMCMDI TEST FOR COMMAND INTERRUPT. D 03520000
JF CMPTCB JUMP IF NOT IN CMD INTRP MODE D 03530000
SPACE 03540000
* TERMINAL IN COMMAND INTERRUPT MODE - THUS POST $CC4CP'S TCB D 03550000
SPACE 03560000
MVC PSTCB(2),CC@CPT MOVE CP TCB ADDRESS FOR POST D 03570000
TBN PL$OPM(,XR1),OPGET DID OP INVOLVE A READ D 03580000
JT CMPTCP IF YES, POST WPACP BIT FOR CP. D 03590000
SPACE 03600000
.D5200 ANOP 03610000
SPACE 03620000
* DETERMINE WHICH POST BIT TO SET ON 03630000
* IF OP END OF INVITE INPUT - POST WPACP BIT 03640000
* OTHERWISE POST WPAAII BIT 03650000
SPACE 03660000
CMPTCB EQU * DETERMINE WHICH POST MASK TO USE 03670000
MVC CMPSTM(2),CMPSII POST WPAAII BIT 03680000
TBN PL$OPM(,XR1),OP$II WAS OP AN INVITE INPUT 03690000
TBF CMSWIT,CMSPSI STOP II AND STATUS POLL? 03700000
JF CMPSOE IF NOT INVITE-JUMP TO POST 03710000
AIF (&BPRT).BP225 PRINTER BUSY CODE *L03710900
AGO .BP250 *L03711800
.BP225 ANOP *L03712700
****************************************************************** *L03713600
* NOTE-STOP II AND STATUS POLL WILL NOT BE ON IF PUT-NO-WAIT * *L03714500
* TO PRINTER WITH BUSY PRINTER SUPPORT AND ERROR ON PUT. * *L03715400
****************************************************************** *L03716300
TBN TUBAT4(,XR2),TUBWAT THIS TASK WAITING, BUSY POST? *L03717200
JT CMPTCP YES - THEN HANDLE *L03718100
.BP250 ANOP END PRINTER BUSY CODE *L03719000
AIF (&NDF).T0400 03720000
SPACE 03730000
* CHECK TO SEE IF ORIGINAL OP WAS ALSO AN INVITE. IF ORIGINAL WAS FB 03740000
* AN INVITE. IF NOT AN INVITE, THEN THIS IS A DFF REQUEST. FB 03750000
SPACE 03760000
TBN PLOPC(,PL),OPINV WAS ORIGINAL AN INVITE ? FB 03770000
JT CMPTCP YES-THEN NORMAL INVITE OP. FB 03780000
SPACE 03790000
* SET IIQ AND IIS SO THAT SYSTEM WILL FREE DFF ACQUIRRED GET BUFFERFB 03800000
SPACE 03810000
MVC PLRECA(8,XR2),PLRECA(,PL) MOVE REC @ AND LEN TO THE TUB.FB 03820000
J CMPION POST NORMAL, SET ON IIS+IIQ. FB 03830000
SPACE 03840000
.T0400 ANOP 03850000
CMPTCP EQU * POST WPACP BIT 03860000
MVC CMPSTM(2),CMPSCP POST TCB WITH WPACP BIT 03870000
AIF (&BPRT).BP300 *L03871000
AGO .BP400 *L03872000
.BP300 ANOP *L03873000
TBF TUBAT4(,XR2),TUBBSY+TUBWAT THIS A PRINTER TUB ? *L03874000
JT CMPION NO-HANDLE INVITE. *L03875000
MVC CMPSTM(2),CMPSBY MOVE WPABSY MASK TO POST *L03876000
J CMPSOE THEN JUST POST-NO QUEUE *L03877000
.BP400 ANOP END PRINTER BUSY CODE *L03878000
SPACE 03880000
* FIRST SET ON TUBIIQ BIT TO INDICATE READ HAS COMPLETED AND DATA IS 03890000
* AVAILABLE IN A HOLD OR RECORD AREA 03900000
SPACE 03910000
CMPION EQU * * 03920000
SBN TUBAT2(,XR2),TUBIIQ+TUBIIS SET BITS TO INDICATE THAT 03930000
* OUTSTANDING READ HAS OP ENDED 03940000
SPACE 03950000
$CC4CM TITLE '$E080/CMQCP - INVITE-INPUT-TUB-QUEUEING' 03960000
*********************************************************************** 03970000
* INVITE INPUT TUB QUEUE ANALYSIS * 03980000
*********************************************************************** 03990000
SPACE 04000000
* PUT COMPLETED OPS TUB ON THE TASK'S INVITE INPUT QUEUE 04010000
SPACE 04020000
* HAD INVITE INPUT SO PUT TUB ON TCB INPUT QUEUE 04030000
SPACE 04040000
CMQCP EQU * PUT TUB ON TCB QUEUE 04050000
MVI TUBINQ-1(,XR2),CMZERO ZERO THIS TUB'S CHAIN POINTER 04060000
L PSTCB,XR2 POINT XR2 AT TCB 04070000
SPACE 1 04071000
* IF THE TASK IS IN TERMINATION- DON'T QUE THE INPUT 04072000
SPACE 1 04073000
TBN TCBJOB(,XR2),TCBTRM TERMINATION? 04074000
JT CMTBQD YES- DON'T QUE INPUT ON TCB 04075000
CLI TCBINQ-1(,XR2),NOBIT ARE THERE ANY TUBS IN THE QUEUE 04080000
JNE CMTUBC IF TUBS IN QUEUE - JUMP 04090000
SPACE 04100000
* NO TUBS AT ALL IN THE QUEUE 04110000
* ADD THIS TUB TO QUEUE BY PLACING IN THE TCB POINTER 04120000
SPACE 04130000
MVC TCBINQ(2,XR2),PLTUBA(,XR1) PLACE TUB ADDR IN TCB TUB QUEUE 04140000
J CMTBQD JUMP SINCE TUB IS QUEUED 04150000
SPACE 04160000
* HAVE TUBS IN THE QUEUE 04170000
SPACE 04180000
CMTUBC EQU * CHECK FURTHER DOWN TUB CHAIN 04190000
L TCBINQ(,XR2),XR2 POINT XR2 AT 1ST TUB IN THE 04200000
CMQLOP CLI TUBINQ-1(,XR2),NOBIT ANYMORE TUBS IN THE QUEUE 04210000
JE CMATUB JUMP IF NOT TO ADD NOW 04220000
SPACE 04230000
* HAVE MORE TUBS IN THE QUEUE 04240000
* GET ADDR OF NEXT TUB AND CONTINUE TO CHECK FOR END 04250000
SPACE 04260000
L TUBINQ(,XR2),XR2 POINT XR2 AT NEXT TUB 04270000
B CMQLOP BR TO TEST FOR END 04280000
SPACE 04290000
* FOUND END OF QUEUE SO ADD TUB TO QUEUE NOW 04300000
SPACE 04310000
CMATUB MVC TUBINQ(2,XR2),PLTUBA(,XR1) ADD THIS TUB TO THE QUEUE 04320000
CMTBQD EQU * TUB HAS BEEN QUEUED 04330000
$CC4CM TITLE '$E080/CMPSOE---POST-USER' 04340000
*********************************************************************** 04350000
* P O S T H E R E * 04360000
*********************************************************************** 04370000
SPACE 04380000
* AT THIS POINT POST SPECIFIC TCB THAT TP HAS COMPLETED 04390000
SPACE 1 04400000
CMPSOE EQU * POST OP END COMPLETE 04410000
B $CC4PS BR TO POST ROUTINE 04420000
CMPSTM DS XL2 POST MASK - TP COMPLETE BIT 04430000
PSTCB DC XL2'0' TCB ADDR PLUGGED HERE 04440000
*********************************************************************** 04450000
*********************************************************************** 04460000
SPACE 04470000
* IF PARM LIST IN LCB PARM LIST CHAIN-THEN GO TO RESTART THE LINE 04480000
*ELSE BRANCH BACK TO CHECK THE OP END COUNT 04490000
SPACE 04500000
CMREDO EQU * DO WE RESTART THE LINE 04510000
AIF (&NOB).C0410 04520000
L PLTUBA(,PL),XR2 POINT TO THE TUB B 04530000
L TUBDTF(,XR2),DTF POINT TO THIS LINES DTF. B 04540000
AIF (&ONE).C0390 04550000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 04560000
JF CMREQX NO-GO CHECK FOR WORK IN QUEUE. 2 04570000
.C0390 ANOP 04580000
AIF (&NOB).C0400 04590000
&MIX SETA &N32+&N37+&N41 04600000
AIF (&MIX EQ '3').T0500 04610000
* --------------------------> START --> @01 04615000
TBN PL$OPC(,PL),OPLSNS POLLING FOR STATUS ? 0/5/7B 04620000
JT CMEACT YES-DON'T DESTROY USER OP.0/5/7B 04630000
* --------------------------> END --> @01 04635000
.T0500 ANOP 04640000
MNN PL$OPC(,PL),PL$OPM(,PL) SAVE CURRENT OP FOR ERP. B 04650000
CMEACT EQU * * B 04660000
TBN LCBAT2(,DTF),LCBACT LINE ACTIVE ? B 04670000
BT CMOPND YES-GO CHECK OP END COUNT. B 04680000
.C0400 ANOP 04690000
AIF (&ONE).C0410 04700000
CMREQX EQU * * 2 04710000
.C0410 ANOP 04720000
B CMRSCH BR TO RESTART THE LINE 04730000
$CC4CM TITLE '$E080/CMFRMN---FREEMAIN-ANALYSIS' 04740000
*********************************************************************** 04750000
* * 04760000
* NAME--CMFRMN * 04770000
* * 04780000
* TITLE--ACCEPT TP REQUESTS * 04790000
* * 04800000
* FUNCTION--ACCEPT TP PARAMETERS FROM THE SYSTEM AND/OR USER. * 04810000
* PERFORM THE FUNCTION REQUESTED IF IT CAN BE HANDLED * 04820000
* IMMEDIATELY, OTHERWISE, PLACE THE PARAMETER INTO THE * 04830000
* LCB LINE QUEUE OF WORK TO BE DONE. * 04840000
* * 04850000
* OPERATION-- * 04860000
* . BEFORE HANDLINE ANY NEW TP PARAMETER LIST, UNLESS * 04870000
* THE PARAMETER LIST IS A PUT-NO-WAIT, HANDLE ANY * 04880000
* LINE RESCHEDULING RESULTING FROM A FREEMAIN POST, * 04890000
* WHICH INDICATE THE AVAILABILITY OF MORE CORE. IF A * 04900000
* PUT-NO-WAIT IS RECEIVED, SCHEDULE IT BEFORE CHECKING * 04910000
* FOR FREEMAIN POSTED. * 04920000
* * 04930000
* . SET UP THE INTERNAL OPERATION INDICATORS FOR THE TP * 04940000
* REQUEST JUST RECEIVED. * 04950000
* * 04960000
* . IF THIS IS A DISCONNECT REQUEST, THEN INSURE THAT THE * 04970000
* LINE IS NOT CONNECTED TO THE SPECIFIEC TERMINAL. IF * 04980000
* NO INVITE REQUEST IS INVOLVED, THEN POST TP COMPLETED * 04990000
* TO THE SYSTEM. IF AN INVITE IS INDICATED THEN TREAT * 05000000
* LIKE AN INVITE ONLY REQUEST. * 05010000
* * 05020000
* . IF A PUT OPERATION TO A TERMINAL IN CCP ERP, IGNORE * 05030000
* THE PUT OPERATION. POST THE USER TP COMPLETE IF NO * 05040000
* INPUT OPERATION INDICATED. IF A PUT-THEN-GET TREAT * 05050000
* LIKE A GET/INVITE ONLY OPERATION. * 05060000
* * 05070000
* . IF DFF GET REQUEST, MAKE INTERNAL OP CODE AN INVITE * 05080000
* INPUT, AND TREAT IT LIKE AN INVITE INPUT THRU THE * 05090000
* REST OF CM. * 05100000
* * 05110000
* . IF MLTA ONLINE TEST (OLT) SET UP THE EXECUTION OF THE * 05120000
* MLTA OLT REQUEST. * 05130000
* * 05140000
* . IF A STOP INVITE OR PURGE I/O CALL IN THE MLTA ($CC4PG)* 05150000
* OR BSCA ($CC4BP) SERIES OF TRANSIENTS TO HANDLE THESE * 05160000
* OPERATIONS. ON RETURN FROM THESE TRANSIENTS DO * 05170000
* WINDUP OPERATIONS OF SCHEDULING TP REQUEST. IF THE * 05180000
* BSCA TRANSIENT INDICATES AN ABORT OF THE LINE IS * 05190000
* REQUIRED, SET UP THE ABORT OPERATION. * 05200000
* * 05210000
* . IF A REGULAR TP DATA OPERATION TO A BSCA LINE, * 05220000
* CHECK TO INSURE THAT IT DOES NOT CONFLICT WITH WHAT * 05230000
* IS CURRENTLY BEING PERFORMED ON THE LINE. * 05240000
* * 05250000
* . IF INVITE INPUT REQUEST THEN MOVE THE TP PARAMETER * 05260000
* LIST INTO THE TUB PARAMETER LIST FIELD, AND USE THE * 05270000
* TUB PARAMETER LIST FOR ANY FURTHER REFERENCE TO * 05280000
* THIS OPERATION. * 05290000
* * 05300000
* . IF PUT-NO-WAIT TO MLTA OR PUT-NO-WAIT MESSAGE TO * 05310000
* BSCA AND SPACE IS AVAILABLE FOR THE PARAMETER LIST * 05320000
* AND DATA, MOVE THE PARAMETER LIST AND DATA TO A HOLD * 05330000
* BUFFER AND USE THE HOLD BUFFER FOR ANY FURTHER * 05340000
* REFERENCE TO THIS OPERATION. OTHERWISE, TREAT THE * 05350000
* REQUEST LIKE A PUT-WAIT OPERATION. NOTE: A PUT-NO-WAIT* 05360000
* MESSAGE TO A BSCA SWITCHED LINE IS ALSO TREATED LIKE A * 05370000
* PUT-WAIT. * 05380000
* * 05390000
* . IF A TP REQUEST THAT REQUIRES DATA TRANSFER, THEN QUEUE* 05400000
* THE REQUEST ONTO THE LINE QUEUE FOR THE APPROPRIATE * 05410000
* LCB. * 05420000
* * 05430000
* . AFTER QUEUEING UP A NEW TP REQUEST, CHECK THE STATUS * 05440000
* OF LINE TO: * 05450000
* - INCLUDE A NEW GET/INVITE IF POLLING IS ALREADY * 05460000
* GOING ON. * 05470000
* - STOP A POLLING SEQUENCE IF A PUT REQUEST WAS * 05480000
* JUST RECEIVED. * 05490000
* - CONTINUE OPERATION IF THE REQUEST JUST RECEIVED IS * 05500000
* THE CONTINUATION OF A PREVIOUSLY STARTED BSCA LINE * 05510000
* OPERATION. * 05520000
* * 05530000
* . EXIT TO THE RESCHEDULE LOGIC TO: * 05540000
* - POST COMPLETION OF THE TP SCHEDULED OPERATION. * 05550000
* - TO PERFORM THE NEXT PRIORITY ACTION ON THE LINE. * 05560000
* - TO CHECK FOR OTHER WORK WITHIN 'CM' THAT CAN BE DONE * 05570000
* AT THIS TIME. * 05580000
* * 05590000
* ENTRY POINT-- * 05600000
* CMFRMN - CHECK FOR FREEMAIN POSTED. * 05610000
* CMREQ - HANDLE NEW TP REQUEST PARAMETER LIST. * 05620000
* * 05630000
* INPUT-- * 05640000
* CC@PRL - ADDRESS OF TP REQUEST PARAMETER LIST. * 05650000
* CMLLCB - ADDRESS OF LAST LCB HANDLED FOR FREEMAIN POSTED * 05660000
* CHECK. * 05670000
* * 05680000
* OUTPUT-- * 05690000
* CMSPL - ADDRESS OF THE TP REQUEST LAST PLACED INTO THE * 05700000
* LINE QUEUE. * 05710000
* CMSDTF/CMSLCB - ADDRESS OF THE LINE DTF FOR THE LAST TP * 05720000
* REQUEST SCHEDULED. * 05730000
* * 05740000
* EXTERNAL REFERENCES-- * 05750000
* $$CLOZ - CLOSE BSCA SWITCHED LINE FOR DISCONNECT OPERATION. * 05760000
* $$OPEN - RE-OPEN THE BSCA SWITCHED LINE AFTER A DISCONNECT * 05770000
* OPERATION. * 05780000
* $CC4MP - TRANSIENT TO IGNORE A PUT TO A TERMINAL IN CCP ERP.* 05790000
* $CC4T1 - TRANSIENT O HANDLE MLTA OLT REQUEST. * 05800000
* $CC4BP - TRANSIENT TO HANDLE BSCA STOP II/PURGE I/O. * 05810000
* $CC4PG - TRANSIENT TO HANDLE MLTA STOP II/PURGE I/O. * 05820000
* $CC4BR - TRANSIENT TO REJECT A TP REQUEST THAT CONFLICTS * 05830000
* WITH A CURRENT LINE OPERATION. * 05840000
* CMIVGM - HANDLE A NEW INVITE INPUT REQUEST. * 05850000
* CMSTOR - DETERMINE STORAGE REQUIREMENTS FOR NO-WAIT * 05860000
* OPERATIONS. * 05870000
* CMGMRT - GET HOLD BUFFER SPACE FOR NO-WAIT OPERATIONS. * 05880000
* CMSET - FORMAT HOLD BUFFER SPACE FOR PUT-NO-WAIT * 05890000
* OPERATIONS. * 05900000
* * 05910000
* EXIT, NORMAL-- * 05920000
* TO THE LINE RESCHEDULING FUNCTION FOR THE REASONS * 05930000
* SPECIFIED IN THE LAST POINT UNDER OPERATIONS. * 05940000
* * 05950000
*********************************************************************** 05960000
SPACE 05970000
CMFRMN EQU * FREEMAIN ANALYSIS ROUTINE 05980000
TBN CMPMSK,WPAAII WAS TP REQUEST POSTED 05990000
JF CMFRPS JUMP TO CHECK FREEMIAN POST 06000000
SPACE 06010000
* HAVE TP REQEUST -IF PUT NO WAIT BRANCH TO HANDLE IT NOW 06020000
SPACE 06030000
L CC@PRL,XR1 POINT XR1 AT PARM LIST 06040000
TBN PLOPC(,XR1),OPPNOW DOES IT INVOLVE PUT NO WAIT 06050000
JT CMLTUB JUMP IF PUT NO WAIT 06060000
SPACE 06070000
* READY TO HANDLE FREEMAIN ANALYSIS 06080000
SPACE 06090000
CMFRPS EQU * CHECK FOR FREEMAIN POST 06100000
TBN CMPMSK+1,WPBFR HAS FREEMAIN BEEN POSTED 06110000
JF CMREQ IF NOT, JUMP TO HANDLE TP REQST 06120000
AIF (&NOB).NX005 06121000
AIF (&MIN NE '1').NX005 06122000
SBF CMPMSK+1,WPBFR SET OFF FREEMAIN POSTED 06124000
.NX005 ANOP 06126000
SPACE 06130000
* HAVE HAD FREEMAIN - SO CHECK LCB'S FOR ANY PARM LISTS IN NEED OF 06140000
* MAIN STORAGE 06150000
SPACE 06160000
AIF (&NOB).NB010 06170000
AIF (&MIN).NX010 06180000
.NB010 ANOP 06190000
* DETERMINE IF NEED TO START WITH 1ST LCB IN CHAIN OR DO WE RESUME 06200000
* FROM LAST LCB LOOKED AT 06210000
SPACE 06220000
TBF CMSWIT,CMFMGO TEST FREEMAIN OCCURRED BIT 06230000
JT CM1LCB JUMP IF FREEMAIN OCCURRED 06240000
SPACE 06250000
* NO NEW FREEMAIN SO PICK UP FROM LAST LCB 06260000
SPACE 06270000
L CMLLCB,XR2 POINT XR2 AT LAST LCB CHECKED 06280000
J CMNXLC JUMP TO LOOK AT NEXT LCB 06290000
SPACE 06300000
CM1LCB EQU * START WITH 1ST LCB IN CHAIN 06310000
SBN CMSWIT,CMFMGO INDICATE NO FREEMAIN OCCURRED 06320000
.NX010 SBF CMWTMK+1,WPBFR SET OFF FREEMAIN IN WAIT MASK 06330000
SPACE 06340000
* GET FIRST LCB AND ANALYZE THE LINE QUEUE 06350000
SPACE 06360000
L CCLCB1,XR2 POINT XR2 AT LCB 06370000
SPACE 06380000
* IF GETMAIN IS NOT NEEDED BY THIS LCB - GO TO NEXT LCB 06390000
SPACE 06400000
CMTGM EQU * TEST GETMAIN NEED 06410000
AIF (&NOB).NB020 06420000
AIF (&MIN).NX020 06430000
.NB020 ANOP 06440000
ST CMLLCB,XR2 SAVE THE LAST LCB LOOKED AT 06450000
.NX020 ST CMSLCB,XR2 SAVE THIS DTF @ 06460000
SPACE 06470000
TBN LCBATR(,XR2),LCBGMN TEST FOR GETMAIN NEEDED 06480000
JF CMNXLC JUMP IF NOT NEEDED 06490000
SPACE 06500000
* GETMAIN IS NEEDED 06510000
SPACE 06520000
* SEE IF LINE IS NOT BUSY OR BUSY WITH A READ 06530000
* IF YES - GO TO TRY AND RESCHEDULE THE LINE 06540000
SPACE 06550000
AIF (&ONE).E0410 06560000
TBN $BDDEV(,DTF),BSCA BSCA DTF ? 2 06570000
JF CMFMBY NO-GO HANDLE MLTA CASE. 2 06580000
.E0410 ANOP 06590000
AIF (&NOB).H0410 06600000
TBN LCBAT2(,DTF),LCBACT THIS DTF ACTIVE ? B 06610000
BT CMBUSY YES-GO SEE IF CANCEL IS POSSIBLB 06620000
B CMRSCH GO TO RESCHEDULE THE LINE. B 06630000
SPACE 06640000
AIF (&ONE).H0410 06650000
CMFMBY EQU * * 2 06660000
.H0410 ANOP 06670000
AIF (&NOM).M0800 06680000
TBN $MDAT2(,XR2),$MABSY IS LINE BUSY M 06690000
TBF $MDOPC(,XR2),MLREAD IS NON-READ ON LINE M 06700000
BF CMTSBY JUMP IF NOT BUSY OR NON-READ M 06710000
SPACE 06720000
* IF GETMAIN NEEDED - SET BIT TO WAIT FOR FREEMAIN M 06730000
SPACE 06740000
SBN CMWTMK+1,WPBFR SET FREEMAIN BIT IN WAIT MASK M 06750000
SPACE 06760000
.M0800 ANOP 06770000
CMNXLC EQU * GET NEXT LCB IN LCB CHAIN 06780000
AIF (&NOB).NB030 06790000
AIF (&MIN).NX030 06800000
.NB030 ANOP 06810000
CLI LCBCHN-1(,XR2),NOBIT IS LCB CHAIN POINTER NULL 06820000
JE CMFMOF JUMP IF NO MORE LCBS 06830000
SPACE 06840000
* MORE LCB'S IN CHAIN 06850000
SPACE 06860000
L LCBCHN(,XR2),XR2 POINT XR2 AT NEXT LCB 06870000
B CMTGM BR TO TEST GETMAIN NEED 06880000
SPACE 06890000
.NX030 ANOP 06900000
CMFMOF EQU * SET FM POST BIT OFF 06910000
SBF CMPMSK+1,WPBFR SET FREEMAIN POST BIT OFF 06920000
MEND 06930000