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