QCN TITLE 'DMKQCN (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN @V200820 00002000
*. 00003000
* MODULE NAME - 00004000
* 00005000
* DMKQCN 00006000
* 00007000
* CONTENTS - 00008000
* 00009000
* DMKQCNRD - QUEUE CONSOLE READ REQUEST 00010000
* DMKQCNWT - QUEUE CONSOLE WRITE REQUEST 00011000
* DMKQCNSY - SYNCHRONIZE CONSOLE ACTIVITY 00012000
* DMKQCNTO - DISCONNECT VIRTUAL MACHINE DUE TO LINE FAILURE 00013000
* DMKQCNCL - CLEAR CONSOLE REUEST STACK 00014000
* DMKQCNET - PROCESS COMPLETED CONTASK REQUESTS 00015000
*. 00016000
EJECT 00017000
COPY OPTIONS @V200820 00018000
COPY LOCAL OPTIONS @V200820 00019000
SPACE 2 00020000
DMKQCN START , 00021000
SPACE 3 00022000
USING PSA,R0 @V200820 00023000
USING CONTASK,R6 @V200820 00024000
USING VMBLOK,R11 @V200820 00025000
USING SAVEAREA,R13 @V200820 00026000
SPACE 00027000
ENTRY DMKQCNRD,DMKQCNWT,DMKQCNSY @V200820 00028000
ENTRY DMKQCNTO,DMKQCNCL,DMKQCNET @V200820 00029000
SPACE 00030000
EXTRN DMKCVTDT,DMKVSPVP,DMKSTKCP @V200820 00031000
EXTRN DMKSCNRD,DMKSCNRN,DMKCVTBH,DMKRGBIC @V305798 00032000
EXTRN DMKSCHRT,DMKSCHST,DMKCVTBD,DMKSCHDL @V200820 00033000
EXTRN DMKCNSIC,DMKGRFIC,DMKRNHIC,DMKSYSNM @V200820 00034000
EXTRN DMKCVTAB @VA04301 00034100
EXTRN DMKGRTDS @V60A6B6 00034550
EXTRN DMKTBLSF @VA13491 00034800
EJECT 00035000
*. 00036000
* SUBROUTINE NAME - 00037000
* 00038000
* DMKQCNRD 00039000
* 00040000
* FUNCTION - 00041000
* 00042000
* TO INITIATE A CONSOLE READ REQUEST 00043000
* 00044000
* ATTRIBUTES - 00045000
* 00046000
* SERIALLY REUSABLE, RESIDENT, CALLED VIA SVC 00047000
* 00048000
* ENTRY CONDITIONS - 00049000
* 00050000
* GPR0 = MAXIMUM NUMBER OF BYTES OF INPUT EXPECTED 00051000
* GPR1 = ADDRESS OF INPUT BUFFER 00052000
* GPR2 = PARAMETER AS FOLLOWS: 00053000
* EDIT - REQUESTS THAT THE INPUT LINE BE EDITED FOR 00054000
* LOGICAL LINE END, LINE DELETE, AND CHARACTER DELETE 00055000
* CHARACTERS. 00056000
* UCASE - REQUESTS THAT ALL CHARACTERS IN THE INPUT 00057000
* LINE BE TRANSLATED TO UPPER-CASE. 00058000
* VMGENIO - SPECIFIES THAT THIS REQUEST IS FOR VIRTUAL 00059000
* MACHINE GENERATED I/O. 00060000
* INHIBIT - SPECIFIES THAT THIS READ DATA SHOULD NOT BE 00061000
* DISPLAYED AT THE TERMINAL OR SPOOLED. 00062000
* GPR11 = ADDRESS OF USER'S VMBLOK 00063000
* GPR12 = ADDRESS OF DMKQCNRD 00064000
* 00065000
* EXIT CONDITIONS - 00066000
* 00067000
* SUCCESSFUL READ COMPLETION: 00068000
* CC = 0; GPR0 = NUMBER OF BYTES READ 00069000
* UNSUCCESSFUL: 00070000
* CC = 2; GPR2 = 4 => SINGLE ATTENTION HIT 00071000
* GPR2 = 8 => MULTIPLE ATTENTIONS HIT 00072000
* GPR2 = 12 => LINE BREAK OCCURRED DURING READ 00073000
* 00074000
* CALLS TO OTHER ROUTINES - 00075000
* 00076000
* DMKFREE 00077000
* DMKSTKCP 00078000
* DMKCNSIC 00079000
* DMKGRFIC 00080000
* DMKRNHIC 00081000
* DMKRGBIC 00082000
* DMKVSPVP 00083000
* DMKLOKSW 00083100
* 00084000
* EXTERNAL REFERENCES - NONE 00085000
* 00086000
* TABLES / WORK AREAS - NONE 00087000
* 00088000
* REGISTER USAGE - 00089000
* 00090000
* GPR0 = MAXIMUM INPUT COUNT 00091000
* GPR1 = ADDRESS OF INPUT BUFFER 00092000
* GPR2 = PARAMETER REGISTER 00093000
* GPR6 = ADDRESS OF CONTASK 00094000
* GPR11 = ADDRESS OF USER'S VMBLOK 00095000
* GPR12 = MODULE BASE REGISTER 00096000
* GPR13 = ADDRESS OF SAVEAREA 00097000
* 00098000
* GPRS 3-5, 7-10 ARE WORK REGISTERS 00099000
* 00100000
* NOTES - 00101000
* 00102000
* THE INPUT BUFFER POINTED TO BY GPR1 MUST BE LARGE ENOUGH TO 00103000
* CONTAIN THE NUMBER OF BYTES SPECIFIED IN GPR0 PLUS 2. 00104000
* 00105000
* OPERATION - 00106000
* 00107000
* 1. IF THE USER IS DISCONNECTED, CALL DMKQCNTO, SET 00108000
* CC = 2, GPR2 = 12, AND EXIT. 00109000
* 2. CLEAR INPUT BUFFER USING COUNT IN GPR0 00110000
* 3. CALL DMKFREE TO GET A CONTASK 00111000
* 4. INITIALIZE CONTASK FIELDS, SAVE INPUT PARMS 00112000
* 5. QUEUE THE CONTASK ON THE TERMINAL RDEVBLOK 00113000
* 6. IF THERE WERE NO OTHER CONTASKS QUEUED, OR IF THIS 00114000
* CONTASK IS A 'PRIORITY' TASK, GOTO THE INTERRUPT 00115000
* HANDLER ACCORDING TO DEVICE CLASS. 00116000
* 7. OTHERWISE, GOTO DMKDSPCH AND WAIT FOR COMPLETION 00117000
*. 00118000
EJECT 00119000
DMKQCNRD DS 0D ENTRY FOR CONSOLE INPUT @V200820 00120000
ENTER @V200820 00121000
USING DMKQCN,R12 @V200820 00122000
SPACE 2 00123000
TM VMOSTAT,VMDISC IS THERE A PHYSICAL TERMINAL@V200820 00124000
BO DISLEEP NO -- START TIME-BOMB LOGOFF@V200820 00125000
L R8,VMTERM REFERENCE TERMINAL RDEVBLOK @V200820 00126000
LTR R8,R8 MAKE SURE IT EXISTS @V200820 00127000
BZ DISLEEP IF NOT -- ASSUME DISCONNECTED @V200820 00128000
SPACE 00129000
SLR R4,R4 CLEAR RETURN CODE IN SAVE-AREA @V200820 00130000
ST R4,SAVER2 ... @V200820 00131000
SPACE 00132000
LR R0,R1 EXCHANGE R0,R1 FOR CLEAR @V200820 00133000
L R1,SAVER0 ... @V200820 00134000
SR R5,R5 SET ZERO PAD AND COUNT @V200820 00135000
MVCL R0,R4 CLEAR INPUT BUFFER @V200820 00136000
SPACE 00137000
LA R0,CONTSIZE GET A BASIC CONTASK @V200820 00138000
BAL R9,INITCON ...FOR READ OPERATION @V200820 00139000
NI CONPARM,VMGENIO+INHIBIT+EDIT+UCASE PARMS @V200820 00140000
ST R13,CONRETN PUT SAVE-AREA ADDRESS IN CONTASK @V200820 00141000
OI CONSTAT,CONRESP RESPONSE IS EXPECTED @V200820 00142000
LM R3,R4,SAVER0 CALLER'S BUFFER AND LENGTH @V200820 00143000
ST R4,CONADDR PASS DATA BUFFER START ADDRESS @V200820 00144000
STH R3,CONCNT ...AND THE MAXIMUM DATA LENGTH @V200820 00145000
SPACE 00146000
QCNMC0 MC MNCOBRD,MNCLRESP RESPONSE CLASS, BEGIN READ @VM01017 00147000
EJECT 00148000
USING RDEVBLOK,R8 @V200820 00149000
ENQUEUE EQU * STACK THE CONTASK FOR INTERRUPT HANDLER @V200820 00150000
L R8,VMTERM MAKE SURE WE HAVE THE RDEVBLOK @V200820 00151000
L R2,RDEVCON GET CONTASK STACK @V200820 00152000
LTR R2,R2 EMPTY? @V200820 00153000
BNZ FINDEND NO, QUEUE REQUEST @V200820 00154000
ST R6,RDEVCON PUT THIS CONTASK AT TOP OF STACK @V200820 00155000
TM CONSTAT,CONSPLT IS THIS A SPLIT CONTASK ? @V200820 00156000
BZ WAKEUPR NO -- ALL SET FOR THE ALERT @V200820 00157000
LR R6,R5 POINT TO THE LAST SPLIT TASK @V200820 00158000
B WAKEUPR GO WAKE UP THE DEVICE HANDLER @V200820 00159000
SPACE 00160000
FINDEND EQU * @V200820 00161000
TM CONPARM,PRIORITY PRIORITY OPTION ? @V200820 00162000
BZ NORMEND NO -- STACK AT END OF CHAIN @V200820 00163000
PRIORFR EQU * FIND FIRST TASK FOR THIS USER @V200820 00164000
CL R11,CONUSER-CONTASK(,R2) SAME USER = OWNER ? @V200820 00165000
BE PRIORIN YES - SEARCH @V200820 00166000
L R3,CONPNT-CONTASK(,R2) INSERT AFTER FIRST TASK@V200820 00167000
LTR R3,R3 ...WE FIND FOR THIS USER @V200820 00168000
BNP PRIORPT END OF CHAIN - PUT IT HERE @V200820 00169000
LR R2,R3 @V200820 00170000
B PRIORFR CONTINUE UNTIL WE FIND ONE @V200820 00171000
SPACE 00172000
PRIORIN EQU * @V200820 00173000
L R3,CONPNT-CONTASK(,R2) GET NEXT CONTASK @V200820 00174000
LTR R3,R3 ZERO ? @V200820 00175000
BZ PRIORPT YES @V200820 00176000
CL R11,CONUSER-CONTASK(,R3) CORRECT USER ? @V200820 00177000
BNE PRIORNX NO -- SKIP POSSIBLE INSERT HERE @V200820 00178000
TM CONPARM-CONTASK(R3),PRIORITY PRIORITY ? @V200820 00179000
BZ PRIORPT NO -- PUT IT HERE @V200820 00180000
PRIORNX EQU * SKIP CONTASK'S FOR OTHER USERS @V200820 00181000
LR R2,R3 KEEP SEARCHING CHAIN @V200820 00182000
B PRIORIN @V200820 00183000
PRIORPT EQU * @V200820 00184000
ST R6,CONPNT-CONTASK(,R2) PATCH THE FORWARD CHAIN@V200820 00185000
TM CONSTAT,CONSPLT IS THIS A STRING OF TASKS ? @V200820 00186000
BZ *+6 NO -- JUST CHAIN IN ONE @V200820 00187000
LR R6,R5 SET GR6 = LAST SPLIT TASK @V200820 00188000
ST R3,CONPNT CHAIN CONTASK HERE @V200820 00189000
* B WAKEUPR GO ALERT THE INTERRUPT HANDLER @V200820 00190000
EJECT 00191000
WAKEUPR EQU * ALERT THE DEVICE HANDLER ROUTINE @V200820 00192000
L R4,=A(DMKRNHIC) SPECIAL-CLASS PROCESSOR @V200820 00193000
CLI RDEVTYPC,CLASSPEC IS THIS 3704 OR 3705 ? @V200820 00194000
BE WAKEMUP YES - ALL SET @V200820 00195000
L R4,=A(DMKCNSIC) TERMINAL-CLASS PROCESSOR @V200820 00196000
CLI RDEVTYPC,CLASTERM IS THIS 2741, 1050, TTY ? @V200820 00197000
BNE GRAPHIC NO, GET GRAPHIC ROUTINE ADDRESS @V2D3931 00198000
TM RDEVTYPE,TYPBSC IS THIS A BISYNC LINE @V2D3931 00199000
BZ WAKEMUP NO, ... @V2D3931 00200000
L R4,=A(DMKRGBIC) POINTER TO 3270 REMOTE MODULE @V305798 00201000
B WAKEMUP GO TO THE ROUTINE @V2D3931 00202000
GRAPHIC EQU * @V2D3931 00203000
L R4,=A(DMKGRFIC) MUST BE A GRAPHICS DEVICE @V200820 00204000
WAKEMUP EQU * @V200820 00205000
TM CONSTAT,CONRESP NEED TO EXIT RIGHT NOW ? @V200820 00206000
BO WAKERGO NO -- JUST GOTO THE SLIH @V200820 00207000
BAL R10,STKCPEX STACK CPEXBLOK FOR SLIH ALERT @V200820 00208000
B EXIT WE MUST EXIT TO CALLER FIRST @V200820 00209000
SPACE 00210000
WAKERGO EQU * GO WAKE UP THE INTERRUPT HANDLER @V200820 00211000
LR R12,R4 ENTRY POINT ADDRESS @V200820 00212000
BR R12 GO THERE @V200820 00213000
EJECT 00214000
NORMEND EQU * @V200820 00215000
L R3,CONPNT-CONTASK(,R2) GET NEXT CONTASK @V200820 00216000
LTR R3,R3 IS IT ZERO? @V200820 00217000
BZ STFDEND YES, FOUND END @V200820 00218000
LR R2,R3 SAVE THIS ONE @V200820 00219000
B NORMEND AND LOOP @V200820 00220000
STFDEND EQU * @V200820 00221000
ST R6,CONPNT-CONTASK(,R2) QUEUE CONTASK @V200820 00222000
TM CONSTAT,CONSPLT IS THIS A SPLIT CONTASK ? @V200820 00223000
BZ *+6 NO -- O.K. AS IS @V200820 00224000
LR R6,R5 SET GR6 = LAST OF SPLIT TASKS @V200820 00225000
TM CONSTAT,CONRESP EXIT NOW OR LATER ? @V200820 00226000
BO GODSPCH LATER - GOTO DMKDSPCH NOW @V200820 00227000
SPACE 2 00228000
EXIT EQU * @V200820 00229000
L R1,SAVER11 GET CALLER'S VMBLOK ADDRESS @V407508 00230100
SWTCHVM SWITCH TO CALLER'S VMBLOK @V407508 00231100
SR R15,R15 RETURN CONDITION-CODE = 0 @V200820 00233000
QCNEXIT EQU * EXIT TO CALLER @V200820 00234000
EXIT @V200820 00235000
SPACE 00236000
GODSPCH EQU * GO AWAY FOR A WHILE @V200820 00237000
GOTO DMKDSPCH @V200820 00238000
SPACE 2 00239000
DISLEEP EQU * START TIME-BOMB LOGOFF PROCESS @V200820 00240000
CALL DMKQCNTO FORCE DISCONNECT TIME-OUT @V200820 00241000
LA R2,12 LINE BREAK RETURN CODE @V200820 00242000
ST R2,SAVER2 RETURN IN GR2 @V200820 00243000
LTR R2,R2 SET CONDITION CODE TWO @V200820 00244000
B QCNEXIT ...AND RETURN TO CALLER @V200820 00245000
EJECT 00246000
*. 00247000
* SUBROUTINE NAME - 00248000
* 00249000
* DMKQCNWT 00250000
* 00251000
* FUNCTION - 00252000
* 00253000
* TO INITIATE A CONSOLE WRITE REQUEST 00254000
* 00255000
* ATTRIBUTES - 00256000
* 00257000
* SERIALLY REUSABLE, RESIDENT, CALLED VIA SVC 00258000
* 00259000
* ENTRY CONDITIONS - 00260000
* 00261000
* GPR0 = NUMBER OF BYTES IN MESSAGE 00262000
* GPR1 = ADDRESS OF MESSAGE 00263000
* GPR2 = PARAMETER AS FOLLOWS: 00264000
* LOGHOLD - SPECIFIES THAT AFTER THIS MESSAGE THE USER 00265000
* WILL BE LOGGED OUT, BUT THE TELEPHONE CONNECTION 00266000
* SHOULD NOT BE DROPPED. 00267000
* LOGDROP - SPECIFIES THAT AFTER THIS MESSAGE THE USER 00268000
* WILL BE LOGGED OUT AND THAT THE TELEPHONE CONNECTION 00269000
* SHOULD BE DROPPED. 00270000
* DFRET - SPECIFIES THAT THE MESSAGE BUFFER SHOULD BE 00271000
* RETURNED TO FREE STORAGE AFTER TRANSLATION. WHEN THIS 00272000
* PARAMETER IS SPECIFIED GPR3 CONTAINS THE NUMBER OF 00273000
* DOUBLE WORDS TO BE RETURNED. IF DFRET IS SPECIFIED 00274000
* THE NORET PARAMETER MUST ALSO BE SPECIFIED. 00275000
* NORET - SPECIFIES THAT THE RETURN WILL NOT BE DELAYED 00276000
* UNTIL THE MESSAGE COMPLETES TYPING ON THE TERMINAL. 00277000
* NO ABILITY EXISTS TO DETECT AN ATTENTION WHEN THIS 00278000
* PARAMETER IS SPECIFIED. 00279000
* OPERATOR - SPECIFIES THAT THIS MESSAGE IS TO BE TYPED 00280000
* AT THE SYSTEM OPERATOR'S TERMINAL. 00281000
* ALARM - SPECIFIES THAT THE CONSOLE ALARM IS TO BE SOUNDED 00282000
* AS THE MESSAGE IS TYPED. IF THE MESSAGE IS NOT 00283000
* TYPED AT A CONSOLE WITH AN ALARM, THE ALARM OPTION 00284000
* WILL BE IGNORED. 00285000
* PRIORITY - SPECIFIES THAT THIS MESSAGE SHOULD BE TYPED 00286000
* IMMEDIATELY. IF A READ IS ACTIVE WHEN A PRIORITY 00287000
* MESSAGE IS QUEUED, THE READ WILL BE TERMINATED AND 00288000
* RESTARTED AFTER THE PRIORITY MESSAGE HAS BEEN TYPED. 00289000
* NOAUTO - SPECIFIES THAT THE AUTOMATIC CARRIAGE RETURN 00290000
* IS TO BE SUPPRESSED 00291000
* NOTIME - SPECIFIES THAT ANY TIME STAMP BE SUPPRESSED. 00292000
* VMGENIO - SPECIFIES THAT THIS REQUEST IS THE RESULT OF 00293000
* A VIRTUAL MACHINE I/O OPERATION. 00294000
* NOTRESP - SPECIFIES THAT FOLLOWING RESPONSES ARE NOT 00294250
* COMMAND RESPONSES TO BE PLACED IN USER'S BUFFER. 00294500
* WRITE THESE RESPONSES ON USER'S CONSOLE. 00294750
* ERRMSG - SPECIFIES THAT THIS IS AN ERROR MESSAGE AND 00295000
* SHOULD BE TYPED UNDER CONTROL OF THE 'VMMLEVEL' FLAGS 00296000
* IN THE USER'S VMBLOK. 00297000
* GPR11 = ADDRESS OF USER'S VMBLOK 00298000
* GPR12 = ADDRESS OF DMKQCNWT 00299000
* 00300000
* EXIT CONDITIONS - 00301000
* 00302000
* GPR0-GPR1, GPR3-GPR13 ARE RESTORED. 00303000
* 00304000
* IF NEITHER 'NORET' NOR 'DFRET' WERE SPECIFIED, THEN: 00305000
* SUCCESSFUL WRITE: CC = 0; GPR2 = 0 00306000
* SINGLE ATTENTION: CC = 2; GPR2 = 4 00307000
* MULTIPLE ATTEN'S: CC = 2; GPR2 = 8 00308000
* LINE BREAK: CC = 2; GPR2 = 12 00309000
* 00310000
* CALLS TO OTHER ROUTINES - 00311000
* 00312000
* DMKFREE 00313000
* DMKCVTDT 00314000
* DMKSTKCP 00315000
* DMKVSPVP 00316000
* DMKCNSIC 00317000
* DMKGRFIC 00318000
* DMKRNHIC 00319000
* DMKLOKSW 00319100
* 00320000
* EXTERNAL REFERENCES - NONE 00321000
* 00322000
* TABLES / WORK AREAS - NONE 00323000
* 00324000
* REGISTER USAGE - 00325000
* 00326000
* GPR0 = MESSAGE COUNT 00327000
* GPR1 = ADDRESS OF MESSAGE 00328000
* GPR2 = PARAMETER REGISTER 00329000
* GPR6 = ADDRESS OF CONTASK 00330000
* GPR11 = ADDRESS OF USER'S VMBLOK 00331000
* GPR12 = MODULE BASE REGISTER 00332000
* GPR13 = ADDRESS OF SAVEAREA 00333000
* 00334000
* GPRS 3-5, 7-10 ARE WORK REGISTERS 00335000
* 00336000
* NOTES - 00337000
* 00338000
* NONE 00339000
* 00340000
* OPERATION - 00341000
* 00342000
* (TO BE CONTINUED) 00343000
*. 00344000
EJECT 00345000
DMKQCNWT DS 0D ENTRY POINT FOR CONSOLE OUTPUT @V200820 00346000
USING *,R12 @V200820 00347000
ENTER @V200820 00348000
L R12,=A(DMKQCN) ESTABLISH MODULE BASE @V200820 00349000
USING DMKQCN,R12 @V200820 00350000
SPACE 2 00351000
STM R0,R1,SAVEWRK2 SAVE R0,R1 FOR ADJUSTMENT @VM08816 00352000
XC SAVEWRK9,SAVEWRK9 CLEAR FOR FLAGS LATER HRC101DK 00352500
L R15,SAVER2 Get write parameters HRC064DK 00352503
N R15,NOQMASK Any 'no queue' bits set?HRC064DK 00352506
BNZ QCN000 Yes, dont queue msg HRC064DK 00352509
TM SAVER2+2,NOTRESP/256 Dont put in resp buffer?HRC064DK 00352512
BO CHKQUE Ok, but queue it HRC064DK 00352515
ICM R15,15,VMCONBUF Is respond buffer avail?HRC064DK 00352518
BNZ QCN000 Y, use respond buffer HRC064DK 00352521
* HRC064DK 00352524
CHKQUE EQU * Continue queuing checks HRC064DK 00352527
CLC VMVTERM,=X'FFFF' Does virt console exist?HRC062DK 00352530
BE QCN000 No vcons available HRC062DK 00352540
ICM R8,15,VMTERM -> RDEVBLOK of virt consHRC062DK 00352550
BZ QCN000 No RDEVBLOK, exit HRC062DK 00352560
USING RDEVBLOK,R8 HRC062DK 00352570
TM RDEVSTA3,RDEVFULL Dev in full screen mode?HRC062DK 00352580
BZ QCN000 No HRC062DK 00352590
DROP R8 RDEVBLOK HRC062DK 00352600
C R0,=F'256' Message len > 256? HRC062DK 00352610
BH QCN000 Don't queue it, send nowHRC062DK 00352620
TM SAVER2+2,ERRMSG/256 Is this an error msg? HRC063DK 00352622
BZ EMSGOFF N, skip EMSG checking HRC063DK 00352624
TM VMMLEVEL,VMMCODE+VMMTEXT Use any part of msg? HRC063DK 00352626
BZ QCN000 N, dont queue message HRC063DK 00352628
* HRC062DK 00352630
EMSGOFF EQU * HRC063DK 00352635
SRL R0,3 Compute msg size in dwdsHRC062DK 00352640
LA R1,QMBSIZE+1 Size of QMBLOK + 1 dwordHRC062DK 00352650
AR R0,R1 Size of area needed HRC062DK 00352660
CALL DMKFREE Get QMBLOK stg HRC062DK 00352670
XC 0(QMBSIZE*8,R1),0(R1) Init fixed part QMBLOK HRC062DK 00352680
USING QMBLOK,R1 QMBLOK is def in VBLOKS HRC062DK 00352690
* HRC062DK 00352700
ST R0,QMSIZE Save size of this QMBLOKHRC062DK 00352710
N R2,=A(-1-DFRET-NORET) Set FRET stg flags off HRC063DK 00352715
ST R2,QMQCNR2 Save QCN R2 options HRC062DK 00352720
LH R8,VMVTERM Displ of vcons VDEVBLOK HRC062DK 00352730
AL R8,VMDVSTRT -> vconsole VDEVBLOK HRC062DK 00352740
USING VDEVBLOK,R8 HRC062DK 00352750
LA R2,VDEVQMB -> QMBLOK anchor HRC062DK 00352760
* 00352770
QMCH000 EQU * 00352780
ICM R0,15,QMNEXT-QMBLOK(R2) -> next QMBLOK HRC062DK 00352790
BZ QMCH010 Find end of QMBLOK chainHRC062DK 00352800
LR R2,R0 Copy QMBLOK ptr HRC062DK 00352810
B QMCH000 Find end of chain HRC062DK 00352820
* 00352830
QMCH010 EQU * 00352840
ST R1,QMNEXT-QMBLOK(,R2) Queue QMBLOK to chain HRC062DK 00352850
LM R14,R15,SAVER0 Get message len, addr HRC062DK 00352860
ST R14,QMQCNR0 Save original msg lengthHRC062DK 00352870
BCTR R14,0 Make IBM length HRC062DK 00352880
EX R14,QCNMVC Move msg to QMBLOK HRC062DK 00352890
B WREX FRET msg stg and exit HRC063DK 00352900
* HRC062DK 00352920
QCNMVC MVC QMMSGTXT(0),0(R15) Executed instr HRC062DK 00352930
DROP R1,R8 QMBLOK, VDEVBLOK HRC062DK 00352940
* HRC062DK 00352950
QCN000 EQU * HRC062DK 00352960
LTR R4,R0 CHECK BYTE COUNT @V200820 00353000
BNP QCN003 LEAVE COUNT ALONE @V200820 00354000
TM SAVER2+3,NOAUTO WAS "NOAUTO" SPECIFIED ? @V200820 00355000
BO QCN003 YES - LEAVE BYTE COUNT ALONE @V200820 00356000
TM SAVER2,X'40' DIAGNOSE WRITE TO GRAPHIC DEVICE @V200820 00357000
BO QCN003 YES - DO NOT ADJUST COUNT @V200820 00358000
SPACE 00359000
LA R15,0(R4,R1) POINT TO LAST BYTE PLUS ONE @V200820 00360000
* DELETE TRAILING BLANKS (IF ANY) FROM THE BYTE-COUNT: 00361000
QCN001 EQU * @V200820 00362000
BCTR R15,0 POINT TO NEW "LAST BYTE" @V200820 00363000
CLI 0(R15),C' ' A BLANK ? @V200820 00364000
BNE QCN002 NOPE - WE'RE THRU CHECKING. @V200820 00365000
BCT R4,QCN001 YES, DECREMENT BYTE-COUNT @V200820 00366000
LA R4,1 SET COUNT = 1 FOR BLANK LINE @V200820 00367000
QCN002 ST R4,SAVEWRK2 STORE ADJUSTED BYTE COUNT @VM08816 00368000
SPACE 2 00369000
QCN003 EQU * START DECODING PARAMETERS @V200820 00370000
STC R2,SAVEWRK1 SAVE LOW-ORDER PARMS IN SAVEWRK1 @V200820 00371000
TM VMMLEVEL,VMMSTMP ALL TIME STAMPS ON HRC101DK 00371100
BNO QCN003A NO, CONTINUE HRC101DK 00371200
NI SAVEWRK1,255-NOTIME RESET NO TIME STAMP HRC101DK 00371300
B QCN003B CONTINUE HRC101DK 00371400
QCN003A EQU * HRC101DK 00371500
OI SAVEWRK1,NOTIME ASSUME NO TIME STAMP @V200820 00372000
QCN003B EQU * HRC101DK 00372500
TM VMOSTAT,VMSYSOP IS THIS THE SYSTEM OPERATOR @V200820 00373000
BO WRSYSOP YES - HE IS A SPECIAL PERSON@V200820 00374000
TM SAVER2+2,OPERATOR/256 MESSAGE FOR OPERATOR ? @V200820 00375000
BZ WRTIMES NO -- CHECK FOR TIME STAMP @V200820 00376000
L R1,ASYSOP GET ADDRESS OF OPERATOR'S VMBLOK @V407508 00377100
SWTCHVM SWITCH TO OPERATOR'S VMBLOK @V407508 00378100
L R1,SAVEWRK3 RESTORE ADDRESS OF MESSAGE @V407508 00379100
SPACE 00380000
WRSYSOP EQU * WRITE TO THE SYSTEM OPERATOR @V200820 00381000
TM SAVER2+3,VMGENIO VIRTUAL MACHINE MESSAGE ? @V200820 00382000
BO WRTERMG YES - NORMAL HANDLING @V200820 00383000
TM SAVER2+3,NOTIME SUPPRESS THE TIME STAMP ? @V200820 00384000
BO *+8 YES - LEAVE IT AS IS @V200820 00385000
NI SAVEWRK1,255-NOTIME TIME STAMP THE MESSAGE @V200820 00386000
TM SAVER2+2,ERRMSG/256 IS THIS AN ERROR MSG ? @V200820 00387000
BZ WRDSCK NO -- LET IT GO @V200820 00388000
OI SAVEWRK1,ALARM RING THE ALARM IF 3215 @V200820 00389000
B WRTEMSG GO TEST 'VMMLEVEL' SETTINGS @V200820 00390000
EJECT 00391000
WRTIMES EQU * CHECK TERMINAL TIME-STAMP @V200820 00392000
TM VMMLEVEL,VMMSTMP TIME STAMP DESIRED ? @V200820 00393000
BZ WRTERMG NO -- CHECK FOR ERROR MSGS @V200820 00394000
TM SAVER2+3,NOTIME+VMGENIO SUPPRESS TIME STAMP ? @V200820 00395000
BNZ WRTERMG YES - GO CONTINUE CHECKING @V200820 00396000
NI SAVEWRK1,255-NOTIME TIME STAMP THE MESSAGE @V200820 00397000
WRTERMG EQU * @V200820 00398000
TM SAVER2+2,ERRMSG/256 IS THIS AN ERROR MSG ? @V200820 00399000
BZ WRDSCK NO -- CHECK TERMINAL @V200820 00400000
WRTEMSG EQU * TEST 'VMMLEVEL' SETTINGS FOR ERRMSG @V200820 00401000
TM VMMLEVEL,VMMCODE+VMMTEXT ANY PART OF MESSAGE ? @V200820 00402000
BZ WRTDFT NO @V200820 00403000
BO WRDSCK ENTIRE MESSAGE @V200820 00404000
TM VMMLEVEL,VMMTEXT MESSAGE TEXT DESIRED ? @V200820 00405000
BZ WRTERCD NO -- JUST WRITE THE CODE @V200820 00406000
S R4,=F'11' ORIGINAL LENGTH MINUS CODE LENGTH@V200820 00407000
BNP WRDSCK NOTHING BUT A CODE - TYPE IT @V200820 00408000
ST R4,SAVEWRK2 RESET MESSAGE BYTE COUNT @VM08816 00409000
LA R1,11(,R1) REPOINT TO TEXT PART OF MESSAGE @V200820 00410000
ST R1,SAVEWRK3 . . . @VM08816 00411000
B WRDSCK GO WRITE THE MESSAGE @V200820 00412000
SPACE 00413000
WRTERCD EQU * WRITE ERROR MESSAGE CODE ONLY @V200820 00414000
LA R4,10(0) LENGTH OF CODE PORTION @V200820 00415000
ST R4,SAVEWRK2 RESET MESSAGE LENGTH @VM08816 00416000
B WRDSCK @V200820 00417000
SPACE 00418000
WRTDFT EQU * SUPPRESS MESSAGE EXCEPT IF SPOOLING @V200820 00419000
OI SAVEWRK1,INHIBIT INHIBIT TYPING OF MESSAGE @V200820 00420000
SPACE 00421000
WRDSCK EQU * COMPUTE LENGTH NEEDED FOR CONTASK@V200820 00422000
L R4,SAVEWRK2 ADJUSTED BYTE COUNT TO GR4 @VM08816 00423000
L R5,SAVER2 GET WRITE PARAMETERS @V60C2B8 00423010
N R5,RESPMASK ANY BITS ON THAT SAY NOT RESPONE @V60C2B8 00423020
BNZ WR001 YES, THEN SKIP BUFFER MOVE @V60C2B8 00423030
ICM R5,15,VMCONBUF IS DATA TO BE MOVED TO STORAGE @V60C2B8 00423040
BNP WR001 NO, THEN CONTINUE @V60C2B8 00423050
EJECT 1 00423060
SR R3,R3 CLEAR RETURN CODE @V60C2B8 00423070
LA R4,1(,R4) ADD 1 BYTE FOR THE LINEND CHAR @V60C2B8 00423080
LH R9,VMCONLN GET BYTES LEFT IN BUFFER @V60C2B8 00423090
SR R9,R4 - LENGTH OF THIS MESSAGE @V60C2B8 00423100
BNM WRLNOK BRANCH IF MSG WILL FIT IN BUFFER @V60C2B8 00423110
LPR R10,R9 SET TO TEST AMOUNT OF OVERFLOW @V60C2B8 00423120
SR R10,R4 R10 = ABSOLUTE VALUE OF VMCONLN @V60C2B8 00423130
C R10,=F'8192' NO SENSE RETURNING AN OVERFLOW @V60C2B8 00423140
BL WRSETLN >8192 - BUFFER MAX @V60C2B8 00423150
LA R3,8 STOP WRITES WITH RC=ATTENTION @V60C2B8 00423160
B WREX AND LEAVE @V60C2B8 00423170
SPACE 1 00423180
WRLNOK LR R7,R1 SAVE ADDRESS OF TEXT TO MOVE @V60C2B8 00423190
SR R6,R6 INDICATE NO PAGE CROSS @V60C2B8 00423200
LA R10,0(R4,R5) ADDRESS OF 1 BYTE PAST LINEND @V60C2B8 00423210
ST R10,VMCONBUF SAVE START OF NEXT MESSAGE (IF ON@V60C2B8 00423220
BCTR R10,0 R10 IS NOW THE ADDRESS OF THE LIN@V60C2B8 00423230
L R15,XPAGNUM SET TO GET PAGE NUMBER ONLY @V60C2B8 00423240
NR R10,R15 GET PAGE ADDRESS OF LAST BYTE @V60C2B8 00423250
NR R15,R5 GET PAGE ADDRESS OF FIRST BYTE @V60C2B8 00423260
CR R15,R10 FIRST AND LAST BYTE IN SAME PAGE?@V60C2B8 00423270
BE NOCROSS YES, THEN ALL SET TO MOVE @V60C2B8 00423280
SPACE 1 00423290
SLR R10,R5 LAST-FIRST = BYTES ON 1ST PAGE @V60C2B8 00423300
SLR R4,R10 TOTAL-BYTES ON 1ST PAGE = 2ND LEN@V60C2B8 00423310
LR R6,R4 SET LENGTH FOR SECOND PAGE @V60C2B8 00423320
LR R4,R10 SET LENGTH FOR FIRST PAGE @V60C2B8 00423330
SPACE 1 00423340
NOCROSS TRANS R2,R5,OPT=(BRING+DEFER) GET THE RESPONSE BUFFER 00423350
BNZ WREX EXIT IF ERROR, USER ALREADY NOTIF@V60C2B8 00423360
BCTR R4,0 -1 FOR THE EXECUTE @V60C2B8 00423370
EX R4,WRMVC MOVE SOME DATA @V60C2B8 00423380
LTR R6,R6 IS THERE A SECOND PAGE? @V60C2B8 00423390
BZ MVLINEND NO, THEN WE CAN MOVE IN A LINEND @V60C2B8 00423400
LA R5,1(R4,R5) SET NEXT VIRTUAL (TO) ADDRESS @V60C2B8 00423410
LA R7,1(R4,R7) AND NEXT REAL (FROM) ADDRESS @V60C2B8 00423420
LR R4,R6 SET LENGTH @V60C2B8 00423430
SR R6,R6 INDICATE LAST PAGE @V60C2B8 00423440
B NOCROSS GO GET NEXT PAGE @V60C2B8 00423450
SPACE 1 00423460
MVLINEND LA R2,0(R4,R2) POINT TO LAST BYTE MOVED @V60C2B8 00423470
MVI 0(R2),X'15' CHANGE EXTRA CHARACTER TO A LINEN@V60C2B8 00423480
WRSETLN STH R9,VMCONLN SET NEW NUMBER OF BYTES LEFT @V60C2B8 00423490
WREX TM SAVER2+2,DFRET/256 SHOULD BUFFER BE RELEASED? @V60C2B8 00423500
BZ WRCKRC NO, THEN SEE IF RC NEEDED @V60C2B8 00423510
L R1,SAVER1 GET BUFFER ADDRESS @V60C2B8 00423520
L R0,SAVER3 AND SIZE IN DBL-WDS @V60C2B8 00423530
CALL DMKFRET AND RELEASE IT @V60C2B8 00423540
WRCKRC TM SAVER2+2,(DFRET+NORET)/256 SKIP SET OF RC ? @V60C2B8 00423550
BNZ QCNEXIT YES, THEN JUST EXIT @V60C2B8 00423560
ST R3,SAVER2 SET THE RETURN CODE FOR CALLER @V60C2B8 00423570
LTR R3,R3 AND SET THE CC @V60C2B8 00423580
B QCNEXIT RETURN @V60C2B8 00423590
WRMVC MVC 0(0,R2),0(R7) EXECUTED MVC TO USER'S BUFFER @V60C2B8 00423600
EJECT 1 00423610
WR001 DS 0H HERE IF I/O TO BE DONE @V60C2B8 00423620
TM SAVEWRK1,NOTIME TIME STAMP TO BE INCLUDED ? @V200820 00424000
BO WRGLENT NO -- NO EXTRA LENGTH NEEDED@V200820 00425000
LA R4,9(0,R4) ADD TO LENGTH FOR TIME STAMP @V200820 00426000
SPACE 00427000
WRGLENT EQU * ALLOW AT LEAST 9 EXTRA BYTES FOR @VA06176 00428100
* CONTROL INFO, BUT ALLOW 1/8 OF 00428600
* MSG. LENGTH FOR IDLES, ETC. 00429100
TM SAVER2+2,HILIGHT/256 HILIGHT REQUESTED ? HRC101DK 00429120
BZ WRNHLITE NO, SKIP THIS HRC101DK 00429140
ICM R8,B'1111',VMTERM GET TERM RDEVBLOK ADDRESS HRC101DK 00429160
USING RDEVBLOK,R8 HRC101DK 00429180
BZ WRNHLITE NO, SKIP HILIGHT HRC101DK 00429200
TM RDEVTYPC,CLASGRAF HRC101DK 00429220
BZ CHKCLRGF NO, CHECK FOR REMOTE GRAF HRC101DK 00429240
TM RDEVTYPE,TYP3277+TYP3278 3270 FAMILY ? HRC101DK 00429260
BZ WRNHLITE NO, SKIP HILIGHT HRC101DK 00429280
SPACE , HRC101DK 00429300
MSGHILT EQU * HRC101DK 00429320
LA R4,4(,R4) ADJUST LENGTH FOR HILIGHT HRC101DK 00429340
MVI SAVEWRK9+3,X'01' INDICATE HILIGHTED MSG? HRC101DK 00429360
B WRNHLITE HRC101DK 00429380
SPACE , HRC101DK 00429400
CHKCLRGF EQU * HRC101DK 00429420
TM RDEVTYPC,CLASTERM TERMINAL CLASS FOR REMOTE HRC101DK 00429440
BZ WRNHLITE HRC101DK 00429460
TM RDEVTYPE,TYPBSC HRC101DK 00429480
BO MSGHILT HRC101DK 00429500
SPACE , HRC101DK 00429520
WRNHLITE EQU * HRC101DK 00429540
LA R5,7(0,R4) ROUND UP TO GET 1/8 @VA06176 00429600
SRL R5,3(0) .. TO ALLOW FOR IDLES, ETC @VA06176 00430100
LA R5,1(,R5) AND ADD ONE FOR GOOD MEASURE @VA06176 00430600
C R5,F13 MUST HAVE AT LEAST 13 EXTRA HRC101DK 00432090
BNL *+8 ALREADY > 13 HRC101DK 00433080
LA R5,13 < 13, MAKE IT 13 (MINIMUM) HRC101DK 00434070
LA R0,CONTSIZE*8+7(R5,R4) COMPOSITE SIZE IN BYTES@V200820 00436000
SRL R0,3(0) ROUNDED UP AND IN DOUBLE-WORDS @V200820 00437000
IC R2,SAVEWRK1 PICK UP ADJUSTED PARMS @V200820 00438000
BAL R9,INITCON INITIALIZE THE CONTASK @V200820 00439000
LA R2,CONDATA DATA START ADDRESS @V200820 00440000
ST R2,CONADDR ...PASS ALONG TO THE SLIH @V200820 00441000
STH R4,CONCNT ...ALONG WITH THE DATA COUNT @V200820 00442000
IC R0,SAVER2 DIAGNOSE LINE NUMBER, MAYBE @V200820 00443000
STC R0,CONDWC PASS IT ALONG TO DMKGRF @VA07542 00444100
EJECT 00445000
CLI SAVEWRK9+3,X'01' HILIGHTED MSG? HRC101DK 00445100
BNE WRTIME NO, CONTINUE HRC101DK 00445200
MVC 0(2,R2),=AL1(SF,ATTRPRHI) HRC101DK 00445300
LA R2,2(,R2) INCREMENT THE POINTER HRC101DK 00445400
SPACE , HRC101DK 00445500
WRTIME EQU * HRC101DK 00445600
TM SAVEWRK1,NOTIME TIME STAMP DESIRED ? @V200820 00446000
BO WRMDATA NO -- JUST MOVE IN DATA @V200820 00447000
SR R1,R1 NO DATE @V200820 00448000
CALL DMKCVTDT PUT TIME DIRECTLY IN BUFFER @V200820 00449000
MVI 8(R2),C' ' CLEAN UP HRC101DK 00450590
LA R2,9(R2) NEW START ADDRESS FOR DATA HRC101DK 00451180
SPACE 00452000
WRMDATA EQU * SET DATA COUNT, MOVE IN USER DATA@V200820 00453000
LM R3,R4,SAVEWRK2 PICK UP USER DATA POINTERS @VM08816 00454000
LTR R5,R3 COUNT TO GR5 ALSO @V200820 00455000
BNP WRMSKIP SKIP MOVE IF ZERO-LENGTH DATA 00456005
LH R3,CONCNT DATA COUNT FROM CONTASK @VA13038 00456010
ICM R5,8,BLANKS SET PAD CHARACTER TO X'40' FOR HRC101DK 00456310
LR R1,R2 HRC101DK 00456600
MVCL R2,R4 MOVE THE DATA INTO THE CONTASK @V60A6B6 00457000
WRMSKIP DS 0H 00457500
CLI SAVEWRK9+3,X'01' HRC101DK 00457570
BNE WRMSKIP2 HRC101DK 00457640
L R3,SAVEWRK2 HRC101DK 00457710
AR R1,R3 HRC101DK 00457780
MVC 0(2,R1),=AL1(SF,ATTRPRLO) HRC101DK 00457850
WRMSKIP2 DS 0H HRC101DK 00457920
OI CONSTAT,CONOUTPT THIS IS AN OUTPUT MESSAGE @V200820 00458000
TM SAVER2+2,DFRET/256 RELEASE THE CALLER'S BUFFER @V200820 00459000
BZ WRMCHEK NO -- CHECK RETURN OPTION @V200820 00460000
L R1,SAVER1 ORIGINAL GR1 VALUE FOR FRET @VM08816 00461000
L R0,SAVER3 NUMBER OF DBL-WDS FOR FRET @V200820 00462000
CALL DMKFRET @V200820 00463000
SPACE 00464000
WRMCHEK EQU * @V200820 00465000
TM SAVER2+1,NOMC MONITOR CALL ALLOWED? @VA04810 00465350
BNZ *+8 NO...BYPASS CALL @VA04810 00465700
QCNMC1 MC MNCOWRIT,MNCLRESP RESPONSE CLASS, WRITE @VM01017 00466000
NI SAVER2+1,255-NOMC RESET NO MONITOR CALL FLAG @VA04810 00466500
TM SAVER2+2,(NORET+DFRET)/256 WAIT FOR IT ? @V200820 00467000
BNZ WRSPCHK NO -- EXIT DIRECTLY @V200820 00468000
ST R13,CONRETN ATTACH THE SAVE-AREA TO CONTASK @V200820 00469000
OI CONSTAT,CONRESP RESPONSE IS DESIRED @V200820 00470000
SLR R2,R2 CLEAR RETURN CODE IN SAVEAREA @V200820 00471000
ST R2,SAVER2 ... @V200820 00472000
TM CONPARM,LOGDROP+LOGHOLD THIS LOGOFF COMMAND? HRC021DK 00472100
BNZ NOSUPP YES...DON'T SUPPRESS LOGOFF MSG HRC021DK 00472200
SPACE 00473000
WRSPCHK EQU * CHECK FOR CONSOLE SPOOLING @V200820 00474000
TM VMHRCFLG,VMTRMOFF SUPPRESSING CONS OUTPUT? HRC021DK 00474100
BO WRSKIP YES... HRC021DK 00474200
NOSUPP EQU * HRC021DK 00474300
TM VMOSTAT,VMDISC+VMKILL DISCONNECTED OR DYING ? @V200820 00475000
BNZ WRTINHB YES - INHIBIT MSG @V200820 00476000
TM VMMLVL2,VMMDIAL USER ISSUED DIAL COMMAND? @VA11241 00476100
BO WRTINHB YEP, INHIBIT MSG NOW Y'HEAR @VA11241 00476200
L R8,VMTERM CHECK EXISTENCE OF HIS TERMINAL @V200820 00477000
LTR R8,R8 @V200820 00478000
BP WRSPOOL LOOKS O.K. FROM HERE @V200820 00479000
SPACE 00480000
WRTINHB EQU * INHIBIT MESSAGE TYPING @V200820 00481000
OI SAVEWRK1,INHIBIT SET A FLAG BIT @V200820 00482000
EJECT 00483000
WRSPOOL EQU * CHECK FOR CONSOLE SPOOLING @V200820 00484000
TM VMRSTAT,VMLOGON IS THE USER LOGGED ON YET ? @V200820 00485000
BO WRNOSPL NO -- FORGET SPOOLING @V200820 00486000
LH R8,VMVTERM DISPLACEMENT TO VIRTUAL CONSOLE @V200820 00487000
LTR R8,R8 IS THERE ONE ? @V200820 00488000
BM WRNOSPL NO -- @V200820 00489000
AL R8,VMDVSTRT INDEX TO THE VDEVBLOK @V200820 00490000
USING VDEVBLOK,R8 @V200820 00491000
TM VDEVFLAG,VDEVCSPL CONSOLE SPOOLING ACTIVE ? @V200820 00492000
BZ WRNOSPL NO -- @V200820 00493000
TM CONDWC,X'40' DIAGNOSE WRITE TO GRAPHICS @VA07542 00494100
BO WRNOSPL YES - SUPPRESS SPOOLING @V200820 00495000
TM VDEVSFLG,VDEVTERM TERMINAL COPY WANTED ? @V200820 00496000
BO WRSBOTH YES - LET IT TYPE @V200820 00497000
TM CONPARM,PRIORITY+ALARM FORCE CONSOLE WRITE ? @V200820 00498000
BNZ WRSBOTH YES - LET IT TYPE @V200820 00499000
TM VMOSTAT,VMCF+VMVIRCF NON-DIAGNOSE C.F. MSG ?@V200820 00500000
BM WRSBOTH YES - LET IT TYPE @V200820 00501000
OI SAVEWRK1,INHIBIT SUPPRESS TERMINAL OUTPUT @V200820 00502000
WRSBOTH EQU * @V200820 00503000
LA R1,CONDATA @V200820 00504000
LH R0,CONCNT @V200820 00505000
LTR R0,R0 DO NOT SPOOL IF ZERO BYTES @V200820 00506000
BNP WRNOSPL . . . @V200820 00507000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00508000
CALL DMKVSPVP SPOOL IT IMMEDIATELY @V200820 00509000
DROP R8 @V200820 00510000
WRNOSPL EQU * @V200820 00511000
L R8,VMTERM GET THE TERMINAL RDEVBLOK @VM08909 00512000
USING RDEVBLOK,R8 @VM08909 00513000
LTR R8,R8 IS TERMINAL STILL THERE ? @VM08909 00514000
BP *+8 YES - NO EXT BUTTON PRESSED @VM08909 00515000
OI SAVEWRK1,INHIBIT SET FOR RELEASING CONTASK @VM08909 00516000
TM SAVEWRK1,INHIBIT SHOULD THIS MSG BE TYPED ? @V200820 00517000
BZ CHKSPLT YES - CHECK FOR LINE LENGTH@V200820 00518000
WRSKIP EQU * HRC021DK 00518100
BAL R9,FRETASK RELEASE THE CONTASK @V200820 00519000
B EXIT ...AND RETURN TO CALLER @V200820 00520000
SPACE 2 00521000
CHKSPLT EQU * SPLIT LINES WHICH ARE TOO LONG @V200820 00522000
CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00523000
BNE *+12 NO, BYPASS TEST FOR BISYNC LINE @V2D3931 00524000
CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE FOR 3270 @V2D3931 00525000
BE *+12 YES, TEST FOR DIAG WRITE @V2D2931 00526000
CLI RDEVTYPC,CLASGRAF IS THIS A GRAPHICS DEVICE ? @VA01645 00527000
BNE CHKIMCR NO -- SPLIT IS REQUIRED @VA01645 00528000
TM CONDWC,X'40' DIAGNOSE WRITE TO GRAPHICS ?? @VA07542 00529100
BZ CHKIMCR NO -- SPLIT THE TASKS @VA01645 00530000
CHKAPLEN SLR R10,R10 CLEAR DISPLAY INDEX REGISTER @V60A6B6 00530250
CHKGRAF EQU * DEVICE IS NOT A REMOTE GRAPHIC @V60A6B6 00530500
CLI RDEVTYPC,CLASGRAF IS DEVICE A LOCAL GRAPHIC ? @V60A6B6 00530750
BNE CHKSIZE NO, INDEX IS ALREADY SET THEN. @V60A6B6 00531000
IC R10,RDEVGRTY GET LOCAL DISPLAY'S SCREEN INDEX @V60A6B6 00531250
CHKSIZE L R1,=A(DMKGRTDS) ADDRESS TABLE OF DISPLAY SIZES @V60A6B6 00531500
L R10,0(R1,R10) AND GET THE RIGHT ONE FOR DEVICE @V60A6B6 00531750
SPACE 1 @VA13491 00531757
* SCAN THE LINE FOR ANY START FIELD ORDERS, @VA13491 00531764
* IF A X'1D' IS FOUND, CHANGE IT TO A BLANK @VA13491 00531771
SPACE 1 @VA13491 00531778
LH R15,CONCNT LOAD DATA LENGTH @VA13491 00531785
N R15,XRIGHT16 ZERO LEFTMOST HALFWORD @VA13491 00531792
LA R1,CONDATA LOAD DATA START ADDRESS @VA13491 00531799
AR R15,R1 SET DATA END ADDRESS @VA13491 00531806
L R14,=A(DMKTBLSF) LOAD TRANSLATE TABLE ADDRES @VA13491 00531813
CONTSCAN DS 0H @VA13491 00531820
LR R3,R15 LOAD DATA END ADDR @VA13491 00531827
SR R3,R1 COMPUTE DATA BALANCE @VA13491 00531834
BZ APLSPLT IF NO DATA GO CONTINUE @VA13491 00531841
C R3,F256 LAST SEGMENT? @VA13491 00531848
BL DOTRT YES, USE CURRENT LENGTH @VA13491 00531855
LA R3,256 LOAD MAX SEGMENT LENGTH @VA13491 00531862
DOTRT DS 0H @VA13491 00531869
BCTR R3,0 DECREMENT FOR EXECUTE @VA13491 00531876
EX R3,EXTRTSCN ANY SF ORDERS? @VA13491 00531883
BZ NEXTSCAN NO, GO CONTINUE WITH NEXT SEG @VA13491 00531890
TM 1(R1),X'01' MDT ON ? HRC101DK 00531898
BO BLANKIT YES, BLANK IT HRC101DK 00531899
TM 1(R1),X'20' PROTECTED FIELD? HRC101DK 00531900
BO NEXTSCAN YES, THEN OK. HRC101DK 00531901
BLANKIT DS 0H HRC101DK 00531902
MVI 0(R1),C' ' BLANK THE SF ORDER HRC101DK 00531903
LA R1,1(R1) SET NEW SCAN START @VA13491 00531904
B CONTSCAN GO CHECK THE REST OF THE DATA @VA13491 00531911
NEXTSCAN DS 0H @VA13491 00531918
LA R1,1(R1,R3) SET NEW SCAN START @VA13491 00531925
B CONTSCAN GO SCAN THIS SEGMENT @VA13491 00531932
SPACE 1 @VA13491 00531939
EXTRTSCN TRT 0(*-*,R1),0(R14) LOCATE SF ORDER @VA13491 00531946
SPACE 2 @VA13491 00531953
* SPLIT INTO MULTIPLE CONTASKS IF NEEDED @VA13491 00531960
APLSPLT DS 0H @VA13491 00531967
CH R10,CONCNT GREATER THAN ONE SCREEN FULL ? @VA01645 00532000
BNL ENQUEUE NO -- JUST SEND IT AS IS @VA01645 00533000
LR R8,R6 SAVE CURRENT CONTASK POINTER @VA01645 00534000
LA R4,CONDATA START OF OUTPUT DATA @VA01645 00535000
LH R3,CONCNT FULL COUNT @VA01645 00536000
CHKTASK EQU * SPLIT INTO MULTIPLE SCREENS @VA01645 00537000
BAL R5,SPLTASK SPLIT CONTASK (SIZE IS IN R10) @V60A6B6 00538000
BNP CHKLAST THAT WAS THE LAST ONE @VA01645 00539000
CR R3,R10 ANOTHER FULL SCREEN WRITE ? @VA01645 00540000
BNL CHKTASK YES - SPLIT IT AGAIN @VA01645 00541000
LR R10,R3 LAST ONE IS SMALLER @VA01645 00542000
B CHKTASK BUILD THE FINAL CONTASK @VA01645 00543000
SPACE 2 00544000
CHKIMCR EQU * CHECK FOR LINE LENGTH AND CR'S @VA01645 00545000
SLR R10,R10 @VA01645 00546000
IC R10,RDEVLLEN THIS IS THE LINE LENGTH NORMALLY@VA01645 00547000
CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00548000
BNE QCN004B NO, MAYBE 3704/5 @VA05189 00549010
CLI RDEVTYPE,TYPBSC BISYNC LINE FOR 3270 ?? @VA05189 00549510
BNE QCN004B NO, MAYBE 3704/5 @VA05189 00550010
QCN004A LH R1,VMTRMID TERMINAL RESOURCE ID @VA05189 00550510
N R1,F4095 ..MINUS THE DEV CODE @VA05189 00551010
MH R1,=AL2(NICSIZE*8) CONVERT TO INDEX @VA05189 00551510
AL R1,RDEVNICL AND TO NICBLOK ITSELF @VA05189 00552010
IC R10,NICLLEN-NICBLOK(,R1) PICK UP LINE LENGTH @VA05189 00552510
TM SAVEWRK1,VMGENIO FROM A VIRT. MACHINE ?? @VA05189 00553010
BZ QCN004 NO, EASY WAY OUT @VA05189 00553510
TM NICTMCD-NICBLOK(R1),NICAPL APL ?? @VA05189 00554010
BO CHKAPLEN YES, TRUST APL FOR NL CHARS. @VA05189 00554510
B CHKLLEN NO, DOUBLECHECK WITH RDEVBLOK @VA05189 00555010
QCN004B CLI RDEVTYPC,CLASSPEC 3704/5 TERMINAL ?? @VA05189 00555510
BE QCN004A YES, GET TERMINAL LINE LENGTH @VA05189 00556010
CHKLLEN TM SAVEWRK1,VMGENIO IS THIS FROM A VIRT MACH? @V2B4538 00559000
BZ QCN004 NOPE, CONTINUE @VM01065 00560000
TM RDEVTMCD,RDEVAPLP YES, IS 'TERM APL' ON? @V2B4538 00561000
BNZ CHKAPLEN YUP, THEN TRUST APL FOR NL CHARS @V2B4538 00562000
QCN004 LA R4,CONDATA START OF OUTPUT DATA @VM01065 00563000
LH R3,CONCNT DATA LENGTH @VA01645 00564000
CL R3,F1 AT LEAST ONE BYTE ? @VA08683 00565000
BL ENQUEUE NO -- DON'T EVEN CHECK IT @VA01645 00566000
ST R10,SAVEWRK4 SAVE THE LINE LENGTH VALUE @VA01645 00567000
LR R8,R6 SAVE ADDRESS OF ORIGINAL CONTASK @VA01645 00568000
CRSCAN1 EQU * SCAN FOR CARRIAGE RETURNS @VA01645 00569000
L R10,SAVEWRK4 RESTORE LINE LENGTH VALUE @VA01645 00570000
LR R5,R4 SCAN START TO GR5 @VA01645 00571000
SR R7,R7 ZERO SCAN COUNT REGISTER @VA01645 00572000
SLR R1,R1 TYPING ELEMENT IS BEFORE POS 1 @VA07248 00572050
LA R0,2 NO. OF CHAR. TO DEDUCT FOR BS @VA07248 00572100
DROP R8 @VA08351 00572110
L R2,VMTERM MAKE SURE WE HAVE RDEVBLOK @VA08351 00572120
USING RDEVBLOK,R2 ESTABLISH ADDRESSABILITY @VA08351 00572130
CLI RDEVTYPC,CLASTERM IS IT TERMINAL ? @VA07248 00572150
BNE GRAPH NO, TEST FOR GRAPH @VA07248 00572200
CLI RDEVTYPE,TYPBSC IS REMOTE 3270 ? @VA07248 00572250
BE ADDBS YES, THEN WE DONT HAVE BS @VA07248 00572300
GRAPH CLI RDEVTYPC,CLASGRAF IS IT GRAPHICS ? @VA07248 00572350
BNE *+6 NO, TERM CAN DO BACKSPACE @VA07248 00572400
ADDBS SLR R0,R0 ADD FOR BS AS WELL @VA07248 00572450
DROP R2 @VA08351 00572700
CRSCAN2 EQU * @VA01645 00573000
CLI 0(R5),X'15' IS THIS AN EMBEDDED 'CR' ? @VA01645 00574000
BE CRSCAN3 YES - FIGURE OUT WHAT TO DO @VA01645 00575000
A R1,F1 ADD ONE @VA08567 00575200
CLI 0(R5),X'16' IS IT A BACKSPACE ? @VA07248 00575400
BNE *+6 NO, LEAVE AS IS @VA07248 00575600
SR R1,R0 MOVE BALL LEFT UNLESS GRAF @VA07248 00575800
CLI 0(R5),X'1D' IS THIS A START FIELD? @VA13491 00575820
BNE NOIMSF NO - GO COUNT IT @VA13491 00575840
LTR R0,R0 YES - NON-GRAPHICS DEVICE? @VA13491 00575860
BNZ NOIMSF YES - PASS IT AS A CHARACTER @VA13491 00575880
TM 1(R5),X'01' IS MDT ON ? HRC101DK 00575882
BO SFBLANK BLANK IT HRC101DK 00575884
TM 1(R5),X'20' IS PROTECT ON ? HRC101DK 00575886
BO NOIMSF YES, CONTINUE HRC101DK 00575888
SPACE , HRC101DK 00575890
SFBLANK DS 0H HRC101DK 00575892
MVI 0(R5),C' ' BLANK THE SF ORDER @VA13491 00575900
SPACE , HRC101DK 00575910
NOIMSF DS 0H @VA13491 00575920
LA R5,1(0,R5) NEXT BYTE OF DATA @VA01645 00576000
LA R7,1(0,R7) COUNT THE BYTES @VA01645 00577000
CR R7,R3 ANY MORE DATA TO BE SCANNED ? @VA01645 00578000
BNL CRSCAN4 NO -- FINISH UP @VA01645 00579000
CR R1,R10 HAVE WE HIT LINESIZE LIMIT @VA07248 00580500
BL CRSCAN2 NO, KEEP SCANNING @VA09338 00581100
CLI 0(R5),X'16' IS THIS A BACKSPACE? @VA09338 00581200
BE CRSCAN2 YES, KEEP SCANNING @VA09338 00581300
LR R10,R7 DATA LENGTH TO R10 @VA09338 00581400
BAL R5,SPLTASK SPLIT OFF A CONTASK @VA01645 00582000
B CRSCAN1 SCAN THE NEXT PIECE @VA01645 00583000
EJECT 00584000
CRSCAN3 EQU * EMBEDDED CARRIAGE RETURN FOUND @VA01645 00585000
LA R10,1(0,R7) EXTRA BYTE (IN CASE OF ZERO) @VA01645 00586000
C R3,F1 LENGTH = 1 ? @VA03434 00587000
BE CRSCAN3C @VA14333 00588100
CR R10,R3 THIS 'CR' AT END OF MSG? @VA03434 00589000
BNE CRSCAN3B NO -- GO MAKE IT A BLANK @VA03434 00590000
TM CONPARM-CONTASK(R8),NOAUTO 'NOAUTO' ON ? @VA07505 00591000
BNO CRSCAN3A NO -- SPLIT @VA03434 00592000
CRSCAN3C DS 0H @VA14333 00592100
NI CONPARM-CONTASK(R8),X'FB' YES, TURN OFF 'NOAUTO'@VA03434 00593000
B CRSCAN3B GO MAKE 'CR' A BLANK @VA03434 00594000
CRSCAN3A BCTR R10,0 BACK UP LENGTH @VA03434 00595000
BAL R5,SPLTASK YES -- GO SPLIT OUT MSG @VA03434 00596000
B CRSCAN1 SCAN THE NEXT PIECE @VA03434 00597000
CRSCAN3B MVI 0(R5),X'40' MAKE CARRIAGE RETURN A BLANK @VA03434 00598000
BAL R5,SPLTASK SPLIT OFF A CONTASK @VA01645 00599000
BNP CHKLAST THAT WAS THE LAST ONE @VA01645 00600000
B CRSCAN1 SCAN THE NEXT PIECE @VA01645 00601000
SPACE 00602000
CRSCAN4 EQU * RAN OUT OF CONTASK DATA @VA01645 00603000
CR R8,R6 DID WE BUILD ANOTHER CONTASK ? @VA01645 00604000
BE ENQUEUE NO -- JUST QUEUE UP THE ORIGINAL @VA01645 00605000
LR R10,R7 GR7 = LENGTH OF TAIL PIECE @VA01645 00606000
BAL R5,SPLTASK ONE MORE TASK FOR THE REST OF IT @VA01645 00607000
B CHKLAST STRAIGHTEN OUT PARAMTERS, ETC. @VA01645 00608000
SPACE 2 00609000
SPLTASK EQU * BUILD ANOTHER, SMALLER CONTASK @VA01645 00610000
NI SAVEWRK1,PRIORITY+VMGENIO SAVE ONLY THESE @VA01645 00611000
LA R7,7(0,R10) ROUND UP FOR PADDING CALCULATION@V200820 00612000
SRL R7,3(0) CALCULATE PADDING NEEDED @V200820 00613000
LA R7,1(,R7) ADD ONE FOR GOOD MEASURE @VA06176 00614100
C R7,F13 MUST HAVE AT LEAST 14 EXTRA HRC101DK 00615190
BNL *+8 ALREADY > 13 HRC101DK 00615780
LA R7,13 < 13 MAKE IT 13 MINIMUM HRC101DK 00616370
LA R0,CONTSIZE*8+7(R7,R10) CONTASK SIZE IN BYTES @V200820 00617000
SRL R0,3(0) ...IN DOUBLE-WORDS FOR DMKFREE @V200820 00618000
LR R7,R6 SAVE CURRENT CONTASK POINTER @VA01645 00619000
IC R2,SAVEWRK1 PARMS FOR THE CONTASK @V200820 00620000
BAL R9,INITCON BUILD A NEW TASK @V200820 00621000
ST R6,CONPNT-CONTASK(,R7) CHAIN TO PREVIOUS ONE @VA01645 00622000
LA R2,CONDATA DATA START ADDRESS @V200820 00623000
ST R2,CONADDR ...FOR INTERRUPT HANDLER @V200820 00624000
STH R10,CONCNT DATA LENGTH @V200820 00625000
IC R1,CONDWC-CONTASK(,R8) DIAGNOSE PARMS, MAYBE ? @VA07542 00626100
STC R1,CONDWC PASS THEM TO DMKGRF @VA07542 00627100
MVI CONSTAT,CONOUTPT+CONSPLT STATUS FLAGS @V200820 00628000
STM R3,R5,TEMPSAVE FREE UP SOME REGISTERS @V200820 00629000
LR R3,R10 LENGTH TO BE MOVED @V200820 00630000
LR R5,R3 ...GR5 ALSO FOR 'MVCL' @V200820 00631000
MVCL R2,R4 MOVE DATA TO NEW CONTASK @V200820 00632000
LM R3,R5,TEMPSAVE RESTORE THOSE REGISTERS NOW @V200820 00633000
LA R4,0(R10,R4) NEXT DATA TO BE MOVED @V200820 00634000
SR R3,R10 SEE IF MORE TO GO @V200820 00635000
BR R5 RETURN WITH COND CODE SET @VA01645 00636000
EJECT 00637000
CHKLAST EQU * FILL IN PARMS FOR LAST CONTASK @V200820 00638000
LH R2,CONSTAT-CONTASK(,R8) ORIGINAL STAT, PARM @V200820 00639000
STH R2,CONSTAT ...COPIED INTO LAST TASK @V200820 00640000
L R2,CONRETN-CONTASK(,R8) RETURN SAVE-AREA @V200820 00641000
ST R2,CONRETN ...COPIED INTO LAST TASK @V200820 00642000
LR R5,R6 GR5 = POINTER TO LAST SPLIT TASK @V200820 00643000
L R6,CONPNT-CONTASK(,R8) GR6 = FIRST SPLIT TASK @V200820 00644000
TM CONPARM-CONTASK(R5),ALARM RING ALARM ? @VA03725 00645000
BNO NOALARM NO, DON'T CHANGE ALARM BIT @VA03725 00646000
NI CONPARM-CONTASK(R5),255-ALARM TURN OFF IN LAST @VA03725 00647000
OI CONPARM,ALARM TURN ALARM BIT ON IN FIRST @VA03725 00648000
NOALARM EQU * @VA03725 00649000
LR R1,R8 ORIGINAL CONTASK @V200820 00650000
LH R0,CONTSKSZ-CONTASK(,R8) SIZE @V200820 00651000
CALL DMKFRET RELEASE THE BIG CONTASK @V200820 00652000
B ENQUEUE GO PROCESS MULTIPLE TASKS @V200820 00653000
SPACE 3 00654000
FRETASK EQU * RELEASE A CONTASK @V200820 00655000
LH R0,CONTSKSZ GET CONTASK SIZE IN DBL-WDS @V200820 00656000
LR R1,R6 @V200820 00657000
CALL DMKFRET RELEASE THE CONTASK @V200820 00658000
ENTRY DMKQCNFT ENTRY POINT TO TELL DMKFRE ... @VA05235 00658100
DMKQCNFT EQU * ADDRESS OF ABOVE DMKFRET CALL. @VA05235 00658200
BR R9 ...AND EXIT TO CALLER @V200820 00659000
SPACE 2 00660000
INITCON EQU * GET CONTASK AND CLEAR HEADER @V200820 00661000
CALL DMKFREE (SIZE IS ALREADY IN GR0) @V200820 00662000
LR R6,R1 SAVE PTR @V200820 00663000
XC 0(CONTSIZE*8,R6),0(R6) CLEAR CONTASK HEADER @V200820 00664000
STH R0,CONTSKSZ SAVE CONTASK SIZE IN THE CONTASK @V200820 00665000
STC R2,CONPARM SAVE CALLING PARMS IN CONTASK @V200820 00666000
ST R11,CONUSER REMEMBER WHO OWNS THIS TASK @V200820 00667000
BR R9 RETURN @V200820 00668000
EJECT 00669000
*. 00670000
* SUBROUTINE NAME - 00671000
* 00672000
* DMKQCNSY 00673000
* 00674000
* FUNCTION - 00675000
* 00676000
* TO PROVIDE A MEANS OF SYNCHRONIZING VIRTUAL MACHINE CONSOLE 00677000
* ACTIVITY WITH INTERNAL SUPERVISOR ACTIVITY. (USED DURING A 00678000
* VIRTUAL SYSTEM RESET, AND DURING THE LOGOFF PROCESS.) 00679000
* 00680000
* ATTRIBUTES - 00681000
* 00682000
* RE-ENTRANT, RESIDENT, CALLED VIA SVC 00683000
* 00684000
* ENTRY CONDITIONS - 00685000
* 00686000
* GPR 11 = VMBLOK ADDRESS OF ACTIVE USER 00687000
* GPR 12 = ADDRESS OF DMKQCNSY 00688000
* GPR 13 = ADDRESS OF A STANDARD SAVE-AREA 00689000
* 00690000
* EXIT CONDITIONS - 00691000
* 00692000
* GPR 0-15 UNCHANGED 00693000
* 00694000
* CALLS TO OTHER ROUTINES - 00695000
* 00696000
* DMKFREE 00697000
* 00698000
* EXTERNAL REFERENCES - NONE 00699000
* 00700000
* TABLES / WORK AREAS - NONE 00701000
* 00702000
* NOTES - NONE 00703000
* 00704000
* OPERATION - 00705000
* 00706000
* 1. IF THE SPECIFIED VIRTUAL MACHINE IS DISCONNECTED OR IN 00707000
* THE LOGOFF PROCESS, EXIT IS TAKEN IMMEDIATELY. 00708000
* 2. IF THE VIRTUAL MACHINE CONSOLE IS IDLE AT THE TIME OF 00709000
* THE CALL TO DMKQCNSY, AN IMMEDIATE EXIT IS TAKEN. 00710000
* 3. IF THE VIRTUAL CONSOLE IS NOT IDLE, A SPECIAL CONTASK 00711000
* IS BUILT, WITH THE 'CONSYNC' FLAG SET IN CONSTAT, TO 00712000
* INDICATE TO THE DEVICE INTERRUPT HANDLERS THAT THE 00713000
* CONTASK DOES NOT REQUIRE ANY I/O OPERATION. 00714000
* 4. EXIT TO DMKDSPCH. CONTROL WILL RETURN TO THE CALLER 00715000
* WHEN THE SYNCHRONIZATION TASK IS ENCOUNTERED BY THE 00716000
* DEVICE INTERRUPT HANDLER. 00717000
*. 00718000
EJECT 00719000
USING DMKQCNSY,R12 @V200820 00720000
DMKQCNSY DS 0D ENTRY TO SYNCHRONIZE TERMINAL OUTPUT@V200820 00721000
ENTER @V200820 00722000
L R12,=A(DMKQCN) MODULE BASE ADDRESSABILITY @V200820 00723000
USING DMKQCN,R12 @V200820 00724000
SPACE 00725000
TM VMOSTAT,VMDISC+VMKILL DISCONNECTED OR DYING ?@V200820 00726000
BNZ SYNEXIT YES - JUST EXIT @V200820 00727000
TM VMRSTAT,VMLOGOFF LOGGING OFF ? @VA04846 00727350
BO SYNEXIT YES - EXIT @VA04846 00727700
L R8,VMTERM POINTER TO TERMINAL RDEVBLOK @V200820 00728000
LTR R8,R8 IS THERE A TERMINAL NOW ? @V200820 00729000
BNP SYNEXIT NO -- JUST EXIT @V200820 00730000
USING RDEVBLOK,R8 ESTABLISH ADDRESSABILITY @VA08351 00730500
CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS 00731000
BNE *+12 NO, BYPASS TEST FOR BISYNC LINE 00732000
CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE 00733000
BE SYNTASK YES, GET STORAGE FOR CONTASK 00734000
CLI RDEVTYPC,CLASSPEC TERMINAL ON 370X NCP ? @V200820 00735000
BE SYNTASK YES - MUST BUILD A CONTASK @V200820 00736000
L R6,RDEVCON CHECK FOR ACTIVE CONTASK STACK @V200820 00737000
LTR R6,R6 IS THE TERMINAL ACTIVE ? @V200820 00738000
BP SYNTASK YES--BUILD A SYNCH TASK @VA05135 00739100
CLI RDEVTYPC,CLASGRAF IS THIS GRAPHICS DEVICE? @VA05135 00739200
BNE SYNEXIT NO--NO SYNCH TASK REQUIRED @VA05135 00739300
TM RDEVFLAG,RDEVACTV IS I/O ACTIVE ON DEVICE? @VA05135 00739400
BZ SYNEXIT NO--NO SYNCH TASK NEEDED @VA05135 00739500
SYNTASK EQU * SYNCHRONIZE VIA SPECIAL CONTASK @V200820 00740000
SLR R2,R2 NO PARAMETERS FOR THIS ENTRY @V200820 00741000
LA R0,CONTSIZE BASIC CONTASK @V200820 00742000
BAL R9,INITCON BUILD AND INITIALIZE A CONTASK @V200820 00743000
MVI CONSTAT,CONCNTL+CONSYNC+CONRESP SET FLAGS @V200820 00744000
ST R13,CONRETN CALLER'S SAVEAREA INTO CONTASK @V200820 00745000
B ENQUEUE CHAIN THE TASK, EXIT TO DMKDSPCH @V200820 00746000
SPACE 00747000
SYNEXIT EQU * SYNCHRONIZE WITH THE DISPATCHER @VM08908 00748000
LA R4,QCNEXIT ALL WE NEED IS AN 'EXIT' SVC @VM08908 00749000
BAL R10,STKCPEX SERIALIZE VIA A CPEXBLOK @VM08908 00750000
GOTO DMKDSPCH . . . @VM08908 00751000
EJECT 00752000
*. 00753000
* SUBROUTINE NAME - 00754000
* 00755000
* DMKQCNTO 00756000
* 00757000
* FUNCTION - 00758000
* 00759000
* TO FORCIBLY DISCONNECT A VIRTUAL MACHINE AND SET A TOD CLOCK 00760000
* COMPARATOR REQUEST TO LOGOFF THE VIRTUAL MACHINE AFTER A 00761000
* FIFTEEN MINUTE DELAY. 00762000
* 00763000
* ATTRIBUTES - 00764000
* 00765000
* RE-ENTRANT, RESIDENT, CALLED VIA SVC 00766000
* 00767000
* ENTRY CONDITIONS - 00768000
* 00769000
* GPR 11 = VMBLOK ADDRESS OF USER TO BE DISCONNECTED 00770000
* GPR 12 = ADDRESS OF DMKQCNTO 00771000
* GPR 13 = STANDARD SAVE-AREA ADDRESS 00772000
* 00773000
* EXIT CONDITIONS - 00774000
* 00775000
* GPRS 0-15 UNCHANGED 00776000
* 00777000
* CALL TO OTHER ROUTINES - 00778000
* 00779000
* DMKFREE 00780000
* DMKSTKCP 00781000
* DMKSCHRT 00782000
* DMKSCHST 00783000
* DMKSCHDL 00784000
* DMKSCNRN 00785000
* DMKSCNRD 00786000
* DMKCVTBH 00787000
* DMKCVTBD 00788000
* DMKQCNWT 00789000
* 00790000
* EXTERNAL REFERENCES - 00791000
* 00792000
* DMKSYSNM - NUMBER OF ACTIVE USERS 00793000
* 00794000
* TABLES / WORK AREAS - NONE 00795000
* 00796000
* NOTES - 00797000
* 00798000
* IF THE VIRTUAL MACHINE HAS NOT YET COMPLETED THE LOGON 00799000
* PROCESS, IT WILL BE IMMEDIATELY LOGGED OFF. 00800000
* 00801000
* OPERATION - 00802000
* 00803000
* 1. MARK THE VIRTUAL MACHINE NON-RUNNABLE (VMCFWAIT). 00804000
* 2. IF LOGON IS NOT COMPLETE, SET VMKILL IN VMOSTAT 00805000
* AND STACK A CPEXBLOK TO GOTO DMKDSPCH LATER. 00806000
* 3. DISCONNECT THE VIRTUAL MACHINE, BUILD A MESSAGE TO 00807000
* SEND TO THE SYSTEM OPERATOR, AS FOLLOWS: 00808000
* 00809000
* TYPE RADDR DSCONNECT USERID USERS = NNN FORCED 00810000
* 00811000
* (THE MESSAGE IS NOT SENT IF THIS IS THE OPERATOR) 00812000
* 4. CALL DMKFREE TO ALLOCATE A TRQBLOK, SET THE TRQBLOK 00813000
* FOR A FIFTEEN MINUTE DELAY, AND ISSUE THE 00814000
* TIMER REQUEST VIA A CALL TO DMKSCHST. 00815000
* 5. IF A TRQBLOK ALREADY EXISTS (E.G. FOR A SLEEP WITH 00816000
* TIMEOUT), THE SAME BLOCK IS RE-USED. 00817000
* 6. EXIT TO CALLER. 00818000
* 7. AFTER THE TRQBLOK EVENT OCCURS, SET VMKILL IN VMOSTAT 00819000
* AND GOTO DMKDSPCH. THE DISPATCHER WILL CALL DMKUSOFF. 00820000
*. 00821000
SPACE 2 00822000
USING DMKQCNTO,R12 @V200820 00823000
DMKQCNTO DS 0D ENTRY FOR DISCONNECT WITH TIMEOUT@V200820 00824000
ENTER @V200820 00825000
L R12,=A(DMKQCN) MODULE BASE ADDRESSABILITY @V200820 00826000
USING DMKQCN,R12 @V200820 00827000
SPACE 00828000
OI VMRSTAT,VMCFWAIT DO NOT RUN THIS MACHINE @V200820 00830000
OI VMOSTAT,VMDISC DISCONNECT THE VIRTUAL MACHINE @VA04273 00830200
L R8,VMTERM TERMINAL RDEVBLOK POINTER @VA04273 00830400
SR R0,R0 @VA04273 00830600
ST R0,VMTERM CLEAR VMBLOK POINTER TO RDEVBLOK @VA04273 00830800
TM VMRSTAT,VMLOGOFF ALREADY IN LOGOFF PROCESS ? @V200820 00831000
BO DSCEXIT YES...JUST EXIT @VA04635 00834500
TM VMOSTAT,VMKILL ALREADY BEING FORCED? @VA08501 00835000
BO DSCEXIT YES...JUST EXIT @VA08501 00835100
TM VMRSTAT,VMLOGON STILL IN LOGON PROCESS ? @V200820 00837000
BZ TSTMORE NO--BYPASS FOLLOWING TEST @VA02743 00838000
NI VMOSTAT,255-VMCF YES - STOP MACHINE @VA02849 00839000
TM VMQSTAT,VMCFREAD USER HAS READ UP ? @VA02743 00840000
BO DSCLLOG YES--LOG HIM OFF @VA02743 00841000
CLI VMCOMND,X'00' FIRST COMMAND ENTERED YET? @VA04635 00842100
BNH DSCLLOG NO...LOG HIM OFF @VA04635 00842200
TM VMOSTAT,VMSLEEP USER SLEEPING? @VA11535 00842210
BO DSCLLOG YES, LOG HIM OFF @VA11535 00842220
OI VMSVSTAT,VMLGFORC INDICATE USER WAS FORCED @VA13026 00842300
OI VMOSTAT,VMCF+VMKILL COMPLETE CF THEN LOGOFF @VA13026 00842350
B DSCEXIT EXIT FOR NOW @VA04635 00842400
SPACE 1 00844000
TSTMORE EQU * @VA02743 00845000
CALL DMKSCHDL ALTER STATUS FOR NON-RUNNABLE @V200820 00847000
LTR R8,R8 IS THERE AN ACTIVE TERMINAL ? @V200820 00851000
BNP DSCNMSG NO -- USER ALREADY DISCONNECTED @V200820 00852000
TM VMOSTAT,VMSYSOP IS THIS THE SYSTEM OPERATOR ? @V200820 00853000
BO DSCNMSG YES - DO NOT SEND THE MESSAGE @V200820 00854000
LA R0,6 GET A FREE STORAGE BUFFER FOR MSG@V200820 00855000
CALL DMKFREE ... @V200820 00856000
LR R5,R1 ADDRESS VIA GR5 @V200820 00857000
USING RDEVBLOK,R8 @V200820 00858000
CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @V2D3931 00859000
BNE *+12 NO, TEST FOR SPECIAL CLASS (370X)@V2D3931 00860000
CLI RDEVTYPE,TYPBSC IS THIS A BISYNC LINE FOR 3270 @V2D3931 00861000
BE *+12 YES, GET RESOURCE ID FROM VMBLOK @V2D3931 00862000
CLI RDEVTYPC,CLASSPEC IS THIS A 3705 TERMINAL ? @V200820 00863000
BNE DSCLDEV NO -- Msg for line/graf/ldevHRC065DK 00864000
LH R1,VMTRMID 370X NCP RESOURCE REFERENCE @V200820 00865000
CALL DMKCVTBH CONVERT FOR OUTPUT @V200820 00866000
MVC 0(4,R5),=C'DEV ' 370X TERMINAL IS A 'DEV' @V200820 00867000
ST R1,4(0,R5) FILL IN TERMINAL REFERENCE @V200820 00868000
B DSCFMSG GO FINISH OFF OPERATOR MESSAGE @V200820 00869000
DSCLDEV EQU * HRC065DK 00869100
TM RDEVADD,RDEVLDEV Is this an LDEV? HRC065DK 00869200
BZ DSCTERM No HRC065DK 00869300
MVC 0(5,R5),=CL5'GRF L' Use short GRAF name HRC065DK 00869400
LH R1,RDEVADD Get the LDEV address HRC065DK 00869500
N R1,F4095 Keep only the dev num HRC065DK 00869600
CALL DMKCVTBH Make it displayable HRC065DK 00869700
STCM R1,7,5(R5) Put dev addr in message HRC065DK 00869800
B DSCFMSG Go display msg HRC065DK 00869900
EJECT 00870000
DSCTERM EQU * @V200820 00871000
CALL DMKSCNRN GET THE DEVICE NAME FOR THE DEVIC@V200820 00872000
ST R1,0(0,R5) ... @V200820 00873000
CALL DMKSCNRD GET THE 'CCU' ADDRESS @V200820 00874000
CALL DMKCVTBH CONVERT FOR OUTPUT @V200820 00875000
ICM R1,8,BLANKS PUT A BLANK IN THE FIRST POSITION@V200820 00876000
ST R1,4(0,R5) ... @V200820 00877000
SPACE 00878000
DSCFMSG EQU * COMPLETE OPERATOR INFORMATION MSG@V200820 00879000
MVC 8(12,R5),=C' DSCONNECT ' ACTION CUE @V200820 00880000
MVC 19(8,R5),VMUSER FILL IN THE USERID @V200820 00881000
MVC 27(21,R5),=C' USERS = NNN FORCED ' TRAILER @V200820 00882000
L R1,=A(DMKSYSNM) NUMBER OF ACTIVE USERS @V200820 00883000
L R1,0(0,R1) ... @V200820 00884000
CALL DMKCVTBD CONVERT FOR OUTPUT @V200820 00885000
STCM R1,B'0111',36(R5) PLACE INTO THE MESSAGE @V200820 00886000
LR R1,R5 START OF THE MESSAGE DATA @V200820 00887000
LA R0,6*8 MESSAGE LENGTH @V200820 00888000
LA R3,6 NO. DBL-WDS FOR 'DFRET' @V200820 00889000
CALL DMKQCNWT,PARM=OPERATOR+NORET+DFRET @V200820 00890000
SPACE 00891000
DSCNMSG EQU * DISCONNECT WITH NO OPERATOR MSG @V200820 00892000
L R1,VMDELAY SEE IF THERE IS ALREADY A TRQBLOK@V200820 00893000
LTR R1,R1 ?? @V200820 00894000
BZ DSCGTRQ NO -- GET SOME FREE STORAGE @V200820 00895000
CALL DMKSCHRT RESET THE TIMER REQUEST @V200820 00896000
B DSCSTRQ GO FIX FOR OUR OWN USE @V200820 00897000
EJECT 00898000
DSCGTRQ EQU * @V200820 00899000
LA R0,TRQBSIZE SIZE OF THE TRQBLOK IN DBL-WDS @V200820 00900000
CALL DMKFREE GET FREE STORAGE FOR A TRQBLOK @V200820 00901000
USING TRQBLOK,R1 @V200820 00902000
ST R1,VMDELAY SAVE THE ADDRESS IN THE VMBLOK @V200820 00903000
XC 0(TRQBSIZE*8,R1),0(R1) CLEAR THE TRQBLOK @V200820 00904000
DSCSTRQ EQU * @V200820 00905000
LA R2,DSCTLOG INTERRUPT RETURN ADDRESS @V200820 00906000
ST R2,TRQBIRA ... @V200820 00907000
ST R11,TRQBUSER VMBLOK ADDRESS OF THIS USER @V200820 00908000
STCK TRQBVAL GET THE CURRENT TIME OF DAY @V200820 00909000
BC 12,CLOCKOK IS CLOCK FUNCTIONING? @VA04301 00909250
GOTO DMKCVTAB CLOCK DAMAGED...ABEND CVT001 @VA04301 00909500
CLOCKOK EQU * @VA04301 00909750
LA R2,DSCTIME DELAY VALUE = 15 MINUTES @V200820 00910000
AL R2,TRQBVAL ADD TO THE CURRENT VALUE @V200820 00911000
ST R2,TRQBVAL ... @V200820 00912000
CALL DMKSCHST SET A CLOCK COMPARATOR REQUEST @V200820 00913000
DSCEXIT EQU * @V200820 00914000
EXIT , RETURN TO CALLER @V200820 00915000
DROP R1 @V200820 00916000
SPACE 2 00917000
DSCLLOG EQU * LOGOFF 'LOGON0XX' USERID @V200820 00918000
LA R4,QCNLOG COME BACK FIRST @VA04688 00919500
BAL R10,STKCPEX GOTO DMKDSPCH A LITTLE LATER @V200820 00921000
B DSCEXIT EXIT FOR NOW @V200820 00922000
SPACE 2 00923000
USING DSCTLOG,R12 LOCAL ADDRESSABILITY @V200820 00924000
DSCTLOG EQU * RETURN ADDRESS TO LOGOFF THE USER@V200820 00925000
LA R0,TRQBSIZE SIZE OF THE TRQBLOK @V200820 00926000
LR R1,R10 ADDRESS IN GR10 FROM DMKDSPCH @V200820 00927000
CALL DMKFRET RELEASE THE TRQBLOK STORAGE @V200820 00928000
SLR R1,R1 @V200820 00929000
ST R1,VMDELAY CLEAR THE VMBLOK HOLD FIELD @V200820 00930000
B QCNKIL DONOT ADJUST R12 @VA10061 00930200
QCNLOG EQU * WHEN CPEXBLOK IS UNSTACKED @VA04688 00930500
USING QCNLOG,R12 @VA10061 00930600
SL R12,=A(QCNLOG-DSCTLOG) SET R12 TO DSCTLOG @VA10061 00930700
QCNKIL DS 0H @VA10061 00930800
OI VMOSTAT,VMKILL LOG THIS GUY OFF @V200820 00931000
OI VMSVSTAT,VMLGFORC FORCE @VA13026 00931500
OI VMRSTAT,VMCFWAIT DO NOT RUN VIRTUAL MACHINE @V200820 00932000
USING DSCTLOG,R12 @VA10061 00933100
GOTO DMKDSPCH GO TO DSPCH TO INITIATE FORCE @VA13026 00933200
SPACE 00934000
DSCTIME EQU X'0359' 15 MINUTES IN T.O.D. CLOCK UNITS @V200820 00935000
EJECT 00936000
*. 00937000
* SUBROUTINE NAME - 00938000
* 00939000
* DMKQCNCL 00940000
* 00941000
* FUNCTION - 00942000
* 00943000
* TO CLEAR THE CONTASK STACK RETURNING ALL BLOCKS TO FREE 00944000
* STORAGE 00945000
* 00946000
* ATTRIBUTES - 00947000
* 00948000
* SERIALLY REUSABLE, RESIDENT, CALLED VIA BALR 00949500
* 00950000
* ENTRY CONDITIONS - 00951000
* 00952000
* GPR8 = ADDRESS OF RDEVBLOK 00953000
* GPR11 = ADDRESS OF USER'S VMBLOK 00954000
* GPR12 = ADDRESS OF DMKQCNCL 00955000
* 00956000
* EXIT CONDITIONS - 00957000
* 00958000
* CONTASK STACK IS CLEARED - GENERAL REGISTERS ARE RESTORED 00959000
* 00960000
* CALLS TO OTHER ROUTINES - 00961000
* 00962000
* DMKFREE 00963000
* DMKQCNET 00964000
* 00965000
* EXTERNAL REFERENCES - NONE 00966000
* 00967000
* TABLES / WORK AREAS - NONE 00968000
* 00969000
* REGISTER USAGE - 00970000
* 00971000
* GPR8 = ADDRESS OF RDEVBLOK 00972000
* GPR11 = ADDRESS OF USER'S VMBLOK 00973000
* GPR12 = MODULE BASE REGISTER 00974000
* 00975000
* GPRS 0-3, 4-7, 9, 13-15 ARE WORK REGISTERS 00976000
* 00977000
* NOTES - NONE 00978000
* 00979000
* OPERATION - 00980000
* 00981000
* (TO BE CONTINUED) 00982000
*. 00983000
EJECT 00984000
DROP R12 @V200820 00985000
USING RDEVBLOK,R8 @V200820 00986000
USING DMKQCNCL,R15 @V200820 00987000
DMKQCNCL DS 0D ENTRY TO CLEAR A CONTASK STACK @V200820 00988000
SWITCH CONTINUE PROCESSING ON I/O PROC @V407508 00988100
STM R0,R15,BALRSAVE @V200820 00989000
L R12,=A(DMKQCN) STANDARD MODULE ADDRESSABILI@V200820 00990000
DROP R15 @V200820 00991000
USING DMKQCN,R12 @V200820 00992000
NI RDEVSTA2,255-RDEVDROP CLEAR FLAG @VA04688 00992500
SPACE 2 00993000
L R6,RDEVCON PICK UP POINTER TO FIRST CONTASK @V200820 00994000
LTR R6,R6 IS THERE ANYTHING TO CLEAR ? @V200820 00995000
BNP BALREXT NO -- JUST RETURN TO CALLER @V200820 00996000
SPACE 00997000
GETCONT EQU * CHECK NEXT CONTASK @V200820 00998000
OI CONSTAT,CONCNTL SUPPRESS SPOOLING @V200820 00999000
TM CONSTAT,CONRESP RESPONSE EXPECTED ? @V200820 01000000
BZ NEXTCON NO -- @V200820 01001000
TM CONSTAT,CONSYNC SYNCHRONIZATION CONTASK? @VA04453 01001300
BO NEXTCON YES--PRESERVE R2 @VA04453 01001600
L R13,CONRETN PICK UP SAVEAREA ADDRESS @V200820 01002000
LA R0,12 SET 'LINE BREAK' RETURN CODE @V200820 01003000
ST R0,SAVER2 ... @V200820 01004000
TM CONPARM,LOGHOLD+LOGDROP ANY OF THESE PARM? @VA04688 01004100
BZ NEXTCON NO-- NEXT @VA04688 01004200
C R11,SAVER11 THE SAME USER? @VA04688 01004300
BNE NEXTCON NO--NEXT @VA04688 01004400
OI RDEVSTA2,RDEVDROP LOGDROP/LOGHOLD INDICATED @VA04688 01004500
NEXTCON EQU * CHECK NEXT CONTASK @V200820 01005000
L R6,CONPNT GET NEXT ONE IN LINE @V200820 01006000
LTR R6,R6 ANY MORE TO CHECK ? @V200820 01007000
BNZ GETCONT YES - KEEP LOOKING @V200820 01008000
L R6,RDEVCON POINTER TO THE CONTASK STACK @V200820 01009000
SLR R0,R0 @V200820 01010000
ST R0,RDEVCON CONTASK STACK HAS BEEN CLEARED @V200820 01011000
B RETANON RETURN TASKS TO ORIGINATOR @V200820 01012000
EJECT 01013000
*. 01014000
* SUBROUTINE NAME - 01015000
* 01016000
* DMKQCNET 01017000
* 01018000
* FUNCTION - 01019000
* 01020000
* TO PROCESS COMPLETED CONTASKS FOR VIRTUAL CONSOLE SPOOLING, 01021000
* RETURN OR NO-RETURN OPTIONS, AND TO RETURN THE CONTASK BLOCKS 01022000
* TO FREE STORAGE. 01023000
* 01024000
* ATTRIBUTES - 01025000
* 01026000
* RE-ENTRANT, RESIDENT, ENTERED VIA 'GOTO' 01027000
* 01028000
* ENTRY CONDITIONS - 01029000
* 01030000
* GPR 12 = ADDRESS OF DMKQCNET 01031000
* GPR 11 = ADDRESS OF A VALID VMBLOK 01032000
* GPR 6 = ADDRESS OF A CHAIN OF CONTASK BLOCKS 01033000
* 01034000
* EXIT CONDITIONS - 01035000
* 01036000
* CONTASKS HAVE BEEN RETURNED TO FREE STORAGE, 'EXIT'S HAVE 01037000
* BEEN MADE FOR ANY WHICH REQUESTED A RETURN AFTER COMPLETION. 01038000
* 01039000
* CALLS TO OTHER ROUTINES - 01040000
* 01041000
* DMKSTKCP 01042000
* DMKFRET 01043000
* DMKVSPVP 01044000
* DMKFREE 01045000
* DMKLOKSW 01045100
* 01046000
* EXTERNAL REFERENCES - NONE 01047000
* 01048000
* TABLES / WORK AREAS - NONE 01049000
* 01050000
* REGISTER USAGE - 01051000
* 01052000
* GPR 12 = MODULE BASE REGISTER 01053000
* GPR 11 = VMBLOK ADDRESSABILITY 01054000
* GPR 6 = CONTASK ADDRESSABILITY 01055000
* 01056000
* GPRS 0-5, 7-10, 13-15 ARE WORK/LINKAGE REGISTERS 01057000
EJECT 01058000
* OPERATION - 01059000
* 01060000
* 1. LOAD GR11 WITH THE VMBLOK ADDRESS OF THE CONTASK OWNER. 01061000
* 2. IF THE USER IS NOT YET LOGGED ON, SKIP TO STEP 4. 01062000
* 3. IF THE USER HAS A VIRTUAL CONSOLE, AND IS SPOOLING 01063000
* CONSOLE I/O, CALL DMKVSPVP TO SPOOL THE CONTASK DATA. 01064000
* 4. PICK UP SAVEAREA POINTER (IF ANY), AND POINTER TO NEXT 01065000
* CONTASK (IF ANY) FROM THE CURRENT CONTASK. 01066000
* 5. CALL DMKFRET TO RETURN THE CONTASK TO FREE STORAGE. 01067000
* 6. IF THERE ARE NO OTHER CONTASKS AND A RETURN WAS REQUESTED, 01068000
* EXIT ON THE CONTASK SAVEAREA WITH CONDITION CODE SET. 01069000
* 7. IF THERE ARE NO OTHER CONTASKS AND NO RETURN IS NEEDED, 01070000
* 'GOTO DMKDSPCH'. 01071000
* 8. IF THERE ARE OTHER CONTASKS AND A RETURN IS REQUESTED, 01072000
* CALL DMKFREE TO BUILD A CPEXBLOK TO RESTART AT STEP 1. 01073000
* AND THEN GO TO STEP 6. 01074000
* 9. IF THERE ARE OTHER CONTASKS AND NO RETURN IS NEEDED, 01075000
* RESTART AT STEP 1. WITH NEXT CONTASK. 01076000
*. 01077000
SPACE 2 01078000
DROP R12 @V200820 01079000
USING DMKQCNET,R15 @V200820 01080000
DMKQCNET DS 0D ENTRY FOR COMPLETED CONTASK'S @V200820 01081000
STM R0,R15,BALRSAVE @V200820 01082000
L R12,=A(DMKQCN) ESTABLISH BASE ADDRESSABILITY @V200820 01083000
DROP R15 @V200820 01084000
USING DMKQCN,R12 @V200820 01085000
SPACE 01086000
RETANON EQU * RESTART HERE FOR MULTIPLE CONTASK@V200820 01087000
CHARGE SWITCH,CONUSER SWITCH TO CONTASK OWNER @V407508 01088100
SLR R13,R13 CLEAR COUNT REG @VM01023 01091000
TM CONSTAT,CONRESP WAITING FOR MSG ? @VM01023 01092000
BNZ CONWT YES..GOOD ENOUGH... @VM01023 01093000
TM CONSTAT,CONOUTPT OUTPUT CONTASK ? @VM01023 01094000
BZ RETNRET NO..CONTINUE... @VM01023 01095000
ICM R13,B'0001',VMRBSC PICK UP CONTASK COUNT @VM01023 01096000
BZ RETNRET NOT 3270R PROBABLY... @VM01023 01097000
BCTR R13,R0 DECREMENT COUNT BY ONE... @VM01023 01098000
STC R13,VMRBSC REPLACE COUNT @VM01023 01099000
B RETNRET CONTINUE... @VM01023 01100000
CONWT EQU * @VM01023 01101000
STC R13,VMRBSC CLEAR CONTASK COUNT... @VM01023 01102000
L R13,CONRETN PICK UP OLD SAVEAREA POINTER @V200820 01103000
MVC SAVEWRK1(2),CONSTAT SAVE CONSTAT, CONPARM HERE @V200820 01104000
LA R4,RETEXIT EXADD TO PERFORM 'EXIT' @V200820 01105000
BAL R10,STKCPEX STACK CPEXBLOK FOR LATER EXIT @V200820 01106000
TM CONSTAT,CONOUTPT+CONCNTL IS THIS A READ TASK ?@V200820 01107000
BNZ RETNRET NO -- ALL SET @V200820 01108000
TM CONPARM,INHIBIT CRITICAL DATA? @VM01007 01109000
BO *+8 YUP, SKIP THE MC DATA COLLECT @VM01007 01110000
QCNMC2 MC MNCOERD,MNCLRESP RESPONSE CLASS, END READ @VM01017 01111000
LH R5,CONCNT REFLECT THE COUNT @V200820 01112000
ST R5,SAVER0 ...IN CALLER'S GR0 @V200820 01113000
RETNRET EQU * @V200820 01114000
L R5,CONPNT POINTER TO NEXT CONTASK, IF ANY @V200820 01115000
BAL R9,FRETASK RETURN CONTASK TO FREE STORAGE @V200820 01116000
LTR R6,R5 SINGLE CONTASK TO PROCESS ? @V200820 01117000
BP RETANON NO -- GO PROCESS THE NEXT ONE @V200820 01118000
BALREXT EQU * RESTORE REGISTERS, RETURN TO CALLER @V200820 01119000
CHARGE SWITCH,BALR11 SWITCH BACK TO CALLER'S VMBLOK @V407508 01120100
LM R0,R15,BALRSAVE RESTORE CALLER'S REGS @V407508 01121100
BR R14 ... @V200820 01123000
EJECT 01124000
USING RETEXIT,R12 TEMPORARILY . . . @V200820 01125000
RETEXIT EQU * SET CONDITION CODE, RETURN TO CALLER @V200820 01126000
L R12,=A(DMKQCN) GET REGULAR ADDRESSABILITY BACK @V200820 01127000
USING DMKQCN,R12 . . . @V200820 01128000
SPACE 01129000
TM SAVEWRK1,CONOUTPT+CONCNTL INPUT CONTASK ? @V200820 01130000
BNZ RETNOSP NO -- SKIP SPOOLING CHECK @V200820 01131000
TM SAVEWRK1+1,INHIBIT CRITICAL DATA ? @V200820 01132000
BO RETNOSP YES - DO NOT SPOOL IT @V200820 01133000
TM VMRSTAT,VMLOGON IS HE LOGGED ON ALL THE WAY @V200820 01134000
BO RETNOSP NO -- SKIP SPOOLING CHECK @V200820 01135000
LH R8,VMVTERM DISPLACEMENT TO TERMINAL VDEVBLOK@V200820 01136000
LTR R8,R8 IS THERE A VIRTUAL TERMINAL ? @V200820 01137000
BM RETNOSP NO -- SKIP IT @V200820 01138000
AL R8,VMDVSTRT DISPLACE TO THE VDEVBLOK ITSELF @V200820 01139000
USING VDEVBLOK,R8 @V200820 01140000
TM VDEVFLAG,VDEVCSPL SPOOLING CONSOLE ACTIVITY ? @V200820 01141000
BZ RETNOSP NO -- @V200820 01142000
LM R0,R1,SAVER0 DATA START ADDRESS, LENGTH @V200820 01143000
LTR R0,R0 IS THIS A ZERO-LENGTH MESSAGE ? @V200820 01144000
BNP RETNOSP YES - SKIP CALL TO DMKVSP @V200820 01145000
SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 01146000
CALL DMKVSPVP SPOOL IT @V200820 01147000
DROP R8 @V200820 01148000
RETNOSP EQU * NO SPOOLING REQUIRED, OR IT'S DONE @V200820 01149000
L R1,SAVER11 GET VMBLOK ADDR OF ORIG CALLER @V407508 01150100
SWTCHVM SWITCH TO THIS VMBLOK V407508 01151100
L R2,SAVER2 RETURN CODE FROM SLIH @V200820 01153000
LTR R2,R2 SET CONDITION CODE APPROPRIATELY @V200820 01154000
EXIT , RETURN TO ORIGINAL CALLER @V200820 01155000
EJECT 01156000
STKCPEX EQU * BUILD AND STACK A CPEXBLOK @V200820 01157000
LA R0,CPEXSIZE GET A CPEXBLOK @V200820 01158000
CALL DMKFREE @V200820 01159000
USING CPEXBLOK,R1 @V200820 01160000
XC 0(16,R1),0(R1) CLEAR THE HEADER SECTION @V200820 01161000
STM R0,R15,CPEXREGS SET REGISTERS @V200820 01162000
ST R4,CPEXADD ...AND EXECUTION ADDRESS @V200820 01163000
ST R4,CPEXR12 USE EXADD AS BASE FOR 'GOTO' USE @V200820 01164000
CALL DMKSTKCP ...STACK IT @V200820 01165000
BR R10 RETURN INTERNALLY @V200820 01166000
DROP R1 @V200820 01167000
SPACE , HRC101DK 01167100
F13 DC F'13' HRC101DK 01167150
SF EQU X'1D' START FIELD DEFINITION HRC101DK 01167200
ATTRPRHI EQU X'E8' PROTECTED, HI INTENSITY HRC101DK 01167250
ATTRPRLO EQU X'60' PROTECTED, LOW INTENSITY HRC101DK 01167300
SPACE , HRC101DK 01167350
NOMC EQU X'10' DON'T ALLOW MONITOR CALL @VA09459 01167500
FORCE EQU X'02' FORCED LOGOFF BY SYSTEM @VA08667 01167580
RESPMASK DS 0F BITS THAT INDICATE MESSAGE IS @V60C2B8 01167660
DC XL2'00' NOT TO BE MOVED TO A RESPONSE BUF@V60C2B8 01167740
DC AL1((OPERATOR+NOTRESP)/256) @V60C2B8 01167820
DC AL1(LOGDROP+LOGHOLD+VMGENIO) @V60C2B8 01167900
NOQMASK DS 0F Bits that indicate msg HRC064DK 01167910
DC XL2'00' is not to be queued HRC064DK 01167920
DC AL1((OPERATOR+NOQUEUE)/256) HRC064DK 01167930
DC AL1(LOGDROP+LOGHOLD+VMGENIO) HRC064DK 01167940
SPACE 2 01168000
DS 0F FORCE ALIGNMENT FOR MASK WORK @VA13491 01168100
ATTRMSK1 DC X'0000001C' MASK FOR VALID SF ORDER BITS @VA13491 01168200
SPACE 1 @VA13491 01168300
* TABLE OF ACCEPTABLE SF ATTRIBUTES @VA13491 01168400
ATTRTBL DC XL1'60',XL1'E4',XL1'E8',XL1'6C' @VA13491 01168500
DC XL1'F0',XL1'F4',XL1'F8',XL1'7C' @VA13491 01168600
EJECT , HRC101DK 01169190
LTORG , HRC101DK 01169680
EJECT , HRC101DK 01170170
COPY IOBLOKS @V200820 01171000
COPY RBLOKS @V200820 01172000
COPY NETWORK @V200820 01173000
COPY VBLOKS @V200820 01174000
COPY VMBLOK @V200820 01175000
COPY SAVE @V200820 01176000
COPY TIMER @V200820 01177000
COPY DEVTYPES @V200820 01178000
COPY EQU @V200820 01179000
PSA @V200820 01180000
END DMKQCN @V200820 01181000