ibm:vm370-lib:cp:dmkqcn.assemble_src
Table of Contents
DMKQCN Source
References
- Fixes Applied : 22
- This Source Date : Saturday, December 9, 1978
- Last Fix ID : [HRC065DK]
Source Listing
- DMKQCN.ASSEMBLE.txt
- 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
ibm/vm370-lib/cp/dmkqcn.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator