RGB TITLE 'DMKRGB (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000 COPY OPTIONS @V305731 00003000 COPY LOCAL @V305731 00004000 EJECT 00005000 ************************************************************* 00006000 * 00007000 * MODULE NAME - 00008000 * 00009000 * DMKRGB 00010000 * 00011000 * CONTENTS - 00012000 * 00013000 * DMKRGBIC - CONTASK INITIALIZATION AND SCHEDULING 00014000 * DMKRGBEN - ENABLE OR DISABLE OF BISYNC LINES & REMOTE STATIONS 00015000 * 00016000 * FUNCTION - 00017000 * 00018000 * THIS MODULE PROVIDES SUPPORT FOR THE 3270 REMOTE DISPLAY 00019000 * AND PRINTER STATIONS. THE MODULE HANDLES INTERRUPTS AND CCW 00020000 * PROCESSING FOR THE REMOTE STATIONS INCLUDING MESSAGE HANDLING 00021000 * AND SCREEN MANAGEMENT. 00022000 SPACE 2 00023000 DMKRGB START , @V305731 00024000 SPACE 1 00025000 USING PSA,R0 @V305731 00026000 USING TRQBLOK,R4 @V305731 00027000 USING CONTASK,R6 @V305731 00028000 USING BSCBLOK,R5 @V305731 00029000 USING RDEVBLOK,R8 @V305731 00030000 USING IOBLOK,R10 @V305731 00031000 USING VMBLOK,R11 @V305731 00032000 USING NICBLOK,R9 @V305731 00033000 SPACE 1 00034000 EXTRN DMKIOSQR,DMKSTKCP,DMKSCHRT,DMKTBLGR @V305731 00035000 EXTRN DMKTBLRG @VA06170 00035100 EXTRN DMKQCNET,DMKRGAIN,DMKBOXBX,DMKIOSHA @V346931 00036100 EXTRN DMKTBMZO @VM03172 00037000 EXTRN DMKTBMTO @V387398 00037100 SPACE 1 00038000 ENTRY DMKRGBIC,DMKRGBEN,DMKRGBSN,DMKRGBMT @V305731 00039000 EXTRN DMKPTRAN @VA07391 00039100 EJECT 00040000 ************************************************************* 00041000 * 00042000 * SUBROUTINE NAME - 00043000 * 00044000 * DMKRGBIC 00045000 * 00046000 * FUNCTION - 00047000 * TO INITIALIZE THE CONTASK FIELDS WHICH COMPRISE THE 00048000 * BINARY SYNCHRONOUS TRANSMISSION PROTOCOL HEADER AND 00049000 * ENDING CHARACTER FOR THE 3270 REMOTE SUPPORT. 00050000 * 00051000 * ATTRIBUTES - 00052000 * 00053000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA GOTO 00054000 * 00055000 * ENTRY CONDITIONS - 00056000 * 00057000 * GR 12 = ADDRESS OF DMKRGBIC 00058000 * GR 11 = ADDRESS OF A VALID VMBLOK 00059000 * GR 8 = ADDRESS OF THE LINE RDEVBLOK 00060000 * 00061000 * EXIT CONDITIONS - 00062000 * 00063000 * EXIT IS MADE VIA GOTO DMKDSPCH AFTER STARTING ANY QUEUED 00064000 * CONTASK REQUESTS FOR STATIONS AND PERFORMING OTHER 00065000 * MESSAGE PROCESSING. 00066000 * 00067000 * CALL TO OTHER ROUTINES - 00068000 * 00069000 * DMKFREE - TO ALLOCATE FREE STORAGE FOR CONTASK'S 00070000 * DMKFRET - TO RETURN ALLOCATED STORAGE 00071000 * DMKIOSQR - TO START I/O OPERATION TO BISYNC LINE 00072000 * DMKQCNET - TO RETURN CONTASK AT COMPLETION 00073000 * DMKRGAIN - TO SECONDARY INTERRUPT HANDLER 00074000 * DMKQCNET - RETURN CONTASK 00074200 * DMKRGAIN - TO SECOND LEVEL INTERRUPT HANDLER 00074400 * DMKIOSHA - HALT THE SWITCHED LINE 00074600 * 00075000 * EXTERNAL REFERENCES - 00076000 * 00077000 * DMKBOXBX - GET BUFFER ADDRESSES FOR VM LOGO 00078000 * DMKTBMZO - APL 3270 COMPOUND CHARACTER TABLE 00078100 * DMKTBMTO - TEXT 3270 COMPOUND CHARACTER TABLE 00078200 * 00079000 * TABLES / WORK AREAS - 00080000 * 00081000 * NONE 00082000 * 00083000 * NOTES - 00084000 * 00085000 * DMKRGBIC IS ENTERED VIA CPEXBLOK OR GOTO WHENEVER 00086000 * DMKQCN HAS STACKED A CONTASK ON THE LINE RDEVBLOK, 00087000 * AND THE CONTASK CHAIN WAS PREVIOUSLY EMPTY, OR IF 00088000 * THE CONTASK HAD THE 'PRIORITY' FLAG SET. 00089000 * 00090000 * REGISTER USAGE - 00091000 * 00092000 * GR14,15 LINKAGE REGISTERS 00093000 * GR12,13 MODULE BASE REGISTERS 00094000 * GR11 = VMBLOK ADDRESSABILITY 00095000 * GR10 = IOBLOK ADDRESSABILITY 00096000 * GR 9 = NICBLOK ADDRESSABILITY 00097000 * GR 8 = RDEVBLOK ADDRESSABILITY 00098000 * GR 7 = INTERNAL LINKAGE REGISTER 00099000 * GR 6 = CONTASK ADDRESSABILITY 00100000 * GR 5 = BSCBLOK ADDRESSABILITY 00101000 * GR0-4= WORK REGISTERS 00102000 * 00103000 * OPERATION - 00104000 * 00105000 * I. HANDLE CONTASKS QUEUED OFF RDEVBLOK (RDEVCON) 00106000 * 00107000 * 1. IF THE LINE IS NOT AVAILABLE, EXIT. 00108000 * 00109000 * 2. IF THERE ARE NO MORE CONTASKS TO BE PROCESSED, 00110000 * ATTEMPT TO START OUTPUT TO THE LINE VIA RGSTART. 00111000 * 00112000 * 3. IF THE RESOURCE SPECIFIED BY THE VMTRMID FIELD IN 00113000 * THE VMBLOK (FROM 'CONUSER') IS NOT AVAILABLE, SET 00114000 * RETURN CODE 12 IN THE RESPONSE SAVEAREA (IF ANY), 00115000 * AND RETURN THE CONTASK VIA CALL DMKQCNET. 00116000 * 00117000 * 4. CONTASKS ARE QUEUED OFF THE RESOURCES (NICBLOKS) THAT HAVE 00118000 * THE SAME VMBLOK ADDRESS CONTAINED IN EACH CONTASK. 00119000 * 00120000 * II. HANDLE THE CONTASKS FOR OUTPUT AND INPUT REQUEST (RGSTART) 00121000 * 00122000 * 1. ATTEMPT TO START OUTPUT TO THE BISYNC LINE. IF THE BISYNC 00123000 * LINE IS EITHER NOT READY OR ALREADY BUSY, EXIT. 00124000 * 00125000 * 2. DETERMINE IF THERE IS AN AVAILABLE STATION ON THE 00126000 * CONTROL UNIT BY SCANNING THE ENTIRE NICBLOK LIST LOOKING 00127000 * FOR THE FOLLOWING CONDITIONS: 00128000 * 00129000 * A. THE RESOURCE HAS AT LEAST ONE CONTASK QUEUED OFF THE 00130000 * NICBLOK AND THE STATION IS NOT IN CONTROL MODE. 00131000 * 00132000 * B. IF NO STATIONS ARE AVAILABLE ON THE CONTROL UNIT, 00133000 * THE CCWS ARE SET UP TO DO A GENERAL POLL OPERATION 00134000 * TO THE REMOTE CONTROL UNIT TO READ DATA FROM A 00135000 * STATION VIA A CALL TO DMKIOSQR. 00136000 * 00137000 * 3. THE SYNCHRONIZATION CONTASK IS RETURNED TO THE SYSTEM AND 00138000 * THE NEXT CONTASK (IF ANY) IS PROCESSED FOR THIS STATION. 00139000 * 00140000 * 4. THE DIAGNOSE CONSOLE OUTPUT CONTASK IS PROCESSED IN THE 00141000 * FOLLOWING WAY: 00142000 * 00143000 * A. GET LINE COORDINATE FROM THE CONTASK, SET DIAGNOSE 00144000 * WRITE FLAG IN NICBLOK (NICDIAG), AND STORE THE LINE 00145000 * COORDINATE IN THE NICBLOK (NICCORD). 00146000 * 00147000 * B. BUILD THE CONTROL CONTASK TO WRITE DATA TO THE REMOTE 00148000 * DISPLAY STATION AND GO TO STEP 8. 00149000 * 00150000 * 5. WHEN THE CONTASK IS JUST AN OUTPUT CONTASK AND THE DISPLAY 00151000 * SCREEN IS FULL, RESET TIMER REQUEST (IF PRESENT), BUILD 00152000 * A CONTROL CONTASK TO WRITE THE STATUS MESSAGE (MORE), 00153000 * AND GO TO STEP 8. 00154000 * 00155000 * 6. AN OUTPUT CONTASK AND THE DISPLAY SCREEN IS NOT FULL, 00156000 * SETUP CCWS TO WRITE DATA TO THE DISPLAY STATION AND 00157000 * GO TO STEP 8. 00158000 * 00159000 * 7. ON AN INPUT CONTASK, BUILD THE CCWS TO WRITE THE STATUS 00160000 * (READ) TO THE DISPLAY SCREEN, SET THE STATION IN 00161000 * CONTROL MODE, AND GO TO STEP 8. 00162000 * 00163000 * 8. GET STORAGE NECCESARY TO BUILD AN IOBLOK. THE IOBLOK IS 00164000 * USED TO PERFORM THE PROCESSING OF ALL I/O REQUESTS TO 00165000 * THE STATION AND BISYNC LINE. THE FOLLOWING FUNCTIONS ARE 00166000 * HANDLED: 00167000 * 00168000 * A. SELECTION OF STATIONS 00169000 * B. GENERAL POLLING OF 3270 CONTROL UNIT 00170000 * C. SPECIFIC POLLING OF STATIONS 00171000 * D. WRITING OF DATA TO THE STATIONS 00172000 * 00173000 * 9. DATA CHAINING OF WRITE OPERATIONS ONLY TAKES PLACE IF 00174000 * THE FOLLOWING CONDITIONS DO NOT EXIST: 00175000 * 00176000 * A. A CONTROL TASK 00177000 * B. A DIAGNOSE CONSOLE WRITE REQUEST 00178000 * C. ONLY ONE CONTASK IS QUEUED OFF THE RESOURCE (NICBLOK) 00179000 * D. THE CONTASK REPRESENTS A HIGH PRIORITY MESSAGE 00180000 * E. NON-OUTPUT CONTASKS 00181000 * 00182000 * 10. SET UP CCWS TO WRITE THE STATUS WORD RUNNING (IF NEEDED) 00183000 * AND THE READ CCW TO READ REPLY FROM REMOTE STATION. 00184000 * 00185000 * 11. SET UP IOBLOK BEFORE CALLING DMKIOSQR TO WRITE THE DATA 00186000 * ACROSS BISYNC LINE. 00187000 * 00188000 * NOTES: 00188100 * 00188200 * 3275 SWITCHED OPERATION 00188300 * . INSTEAD OF DOING A POLLING OPERATION AS ON A LEASED LINE 00188400 * THE SUPPORT MUST ALWAYS HAVE A READ UP ON THE SWITCHED LINE. 00188500 * 00188600 * . INSTEAD OF DOING A SELECTION OPERATION AS ON A LEASED LINE 00188700 * THE SUPPORT MUST BID FOR THE LINE BY SENDING AN ENQ 00188800 * CHARACTER TO THE STATION. 00188900 *************************************************************** 00189000 EJECT 00190000 USING DMKRGBIC,R12 @V305731 00191000 DMKRGBIC DS 0D @V305731 00192000 LM R12,R13,RGBBASE SETUP MODULE ADDRESSABILITY @V305731 00193000 USING DMKRGB,R12,R13 @V305731 00194000 SPACE 00195000 SWITCH ENSURE WE ARE ON THE MAIN PROC @VA07391 00195100 TM RDEVSTAT,RDEVDISA+RDEVDED+RDEVNRDY IS LINE AVAIL@V305731 00196000 BNZ GODSPCH NO, GO BACK TO DISPATCHER @V305731 00197000 L R5,RDEVBSC GET ADDRESS OF BSCBLOK @V305731 00198000 SLR R10,R10 CLEAR IOBLOK REGISTER @V305731 00199000 NEXTASK EQU * @V305731 00200000 LA R7,GODSPCH RETURN ADDRESS WHEN DEVICE START @V305731 00201000 L R6,RDEVCON PICK UP POINTER TO CONTASK @V305731 00202000 LTR R6,R6 IS THERE A CONTASK PTR. ? @V305731 00203000 BZ RGSTART TRY TO DO A START I/O TO THE LINE@V305731 00204000 L R1,CONUSER LOAD ADDR OF NEW VMBLOK @V407511 00204100 CR R1,R11 SAME USER @VA07454 00204200 BE NONEED YES, NO NEED TO SWITCH @VA07454 00204300 SWTCHVM OPT=STAY SWITCH VMBLOK LOCKING & CHARGING @V407511 00204600 B NEXTASK MAKE SURE ENVIRON HASN'T CHANGED @VA07454 00204700 NONEED DS 0H @VA07454 00204800 L R1,CONPNT REMOVE FIRST CONTASK FROM CHAIN @V305731 00205000 ST R1,RDEVCON SAVE NEXT CONTASK POINTER @V305731 00206000 LA R7,NEXTASK RETURN ADDR. IF RESOURCE INVALID @V305731 00210000 LH R9,VMTRMID GET RESOURCE ID OF USER @V305731 00211000 N R9,F4095 CLEAR THE LINE CODE PORTION @V305731 00212000 CH R9,RDEVMAX VALIDATE THE RESOURCE ID @V305731 00213000 BH LINEFAL INVALID RESOURCE FOR THIS USER @V305731 00214000 MH R9,=AL2(NICSIZE*8) COMPUTE NICBLOK LIST INDEX @V305731 00215000 AL R9,RDEVNICL INDEX TO THE ACTUAL NICBLOK @V305731 00216000 TM NICSTAT,NICDISA IS RESOURCE AVAILABLE ? @V305731 00217000 BNZ LINEFAL NO, RETURN CONTASK @V305731 00218000 BAL R7,QUEUE QUEUE CONTASK OFF NICBLOK @V305731 00219000 BAL R7,NEXTASK GET NEXT CONTASK FROM RDEVBLOK @V305731 00220000 SPACE 00221000 LINEFAL EQU * @V305731 00222000 LA R2,12(0) SET RETURN CODE FOR USER @V305731 00223000 BAL R3,SETRETN SET RETURN CODE (IF POSSIBLE) @V305731 00224000 L R0,CONPNT GET THE NEXT CONTASK IF ANY @V305731 00225000 ST R0,RDEVCON SET NEXT CONTASK FOR PROCESSING @V305731 00226000 SR R0,R0 CLEAR @V305731 00227000 ST R0,CONPNT CLEAR CONTASK POINTER @V305731 00228000 CALL DMKQCNET RETURN CONTASK @V305731 00229000 BR R7 RETURN @V305731 00230000 SPACE 1 00231000 RGIGNORE EQU * RELEASE IOBLOK & IOERBLOK @V305731 00232000 BAL R7,FRETIOB GO RELEASE STORAGE FOR IOBLOK @V305731 00233000 GODSPCH EQU * EXIT TO THE DISPATCHER @V305731 00234000 GOTO DMKDSPCH @V305731 00235000 SPACE 3 00236000 QUEUE EQU * @V305731 00237000 LA R1,NICQPNT-(CONPNT-CONTASK) INITIAL BACK PTR @V305731 00238000 QUEUECHN EQU * @V305731 00239000 LR R2,R1 SAVE THE BACK POINTER @V305731 00240000 L R1,CONPNT-CONTASK(,R2) GET NEXT CONTASK, IF ANY @V305731 00241000 LTR R1,R1 IS THIS THE END OF THE CHAIN @V305731 00242000 BP QUEUECHN NO, CAN NOT INSERT HERE @V305731 00243000 ST R6,CONPNT-CONTASK(,R2) PUT CONTASK IN CHAIN @V305731 00244000 ST R1,CONPNT SAVE POINTER TO NEXT CONTASK @V305731 00245000 BR R7 RETURN @V305731 00246000 SPACE 2 00247000 SETRETN EQU * @V305731 00248000 TM CONSTAT,CONRESP RESPONSE EXPECTED ? @V305731 00249000 BZR R3 NO, RETURN @V305731 00250000 L R1,CONRETN GET RETURN SAVEAREA ADDRESS @V305731 00251000 ST R2,SAVER2-SAVEAREA(R1) SET RETURN CODE @V305731 00252000 BR R3 RETURN @V305731 00253000 EJECT 00254000 ************************************************************* 00255000 * 00256000 * SUBROUTINE NAME - 00257000 * 00258000 * DMKRGBEN 00259000 * 00260000 * FUNCTION - 00261000 * 00262000 * TO EXECUTE ENABLE OR DISABLE OF BISYNC LINES AND 3270 00263000 * REMOTE STATIONS. 00264000 * 00265000 * ATTRIBUTES - 00266000 * 00267000 * SERIALLY REUSEABLE, RESIDENT, ENTERED VIA SVC 00268000 * 00269000 * ENTRY CONDITIONS - 00270000 * 00271000 * GR13 = ADDRESS OF A STANDARD SAVEAREA 00272000 * GR12 = ADDRESS OF DMKRGBEN 00273000 * GR11 = ADDRESS OF USER VMBLOK 00274000 * GR 9 = ADDRESS OF THE NICBLOK ON SVC ENTRY 00275000 * GR 8 = ADDRESS OF THE LINE RDEVBLOK 00276000 * GR 2 = PARAMETER FIELD 00277000 * GR 0 = INDICATE BISYNC LINE OR REMOTE STATION 00278000 * 00279000 * EXIT CONDITIONS - 00280000 * 00281000 * EXIT IS MADE VIA A GOTO DMKDSPCH 00282000 * CC = 0 -> REQUEST WAS SUCCESSFUL 00283000 * CC = 2 -> EITHER THE SPECIFIED RESOURCE WAS INVALID, 00284000 * THE LINE WAS NOT AVAILABLE, THE RESOURCE WAS 00285000 * NOT AVAILABLE, OR A LINE FAILURE OCCURRED. 00286000 * 00287000 * CALLS TO OTHER ROUTINES - 00288000 * 00289000 * DMKSTKCP - TO STACK A CPEXBLOK FOR A LATER EXIT. 00290000 * DMKFREE - TO ALLOCATE STORAGE FOR THE CONTASK. 00291000 * DMKRGBIC - TO INITIATE I/O TO THE LINE. 00292000 * 00293000 * EXTERNAL REFERENCES - 00294000 * 00295000 * DMKBOXBX - GET BUFFER ADDRESSES FOR VM LOGO 00296000 * 00297000 * TABLES / WORK AREAS - 00298000 * 00299000 * NONE 00300000 * 00301000 * NOTES - 00302000 * 00303000 * NONE 00304000 * 00305000 * REGISTER USAGE - 00306000 * 00307000 * GR14,15 LINKAGE REGISTERS 00308000 * GR13 = SAVEAREA ADDRESSABILITY 00309000 * GR12 = DMKRGB BASE REGISTER 00310000 * GR11 = VMBLOK ADDRESSABILITY 00311000 * GR10 = IOBLOK ADDRESSABILITY (NOT USED) 00312000 * GR 9 = NICBLOK ADDRESSABILITY (SVC ONLY) 00313000 * GR 8 = RDEVBLOK ADDRESSABILITY 00314000 * GR 7 = INTERNAL LINKAGE REGISTER 00315000 * GR 6 = CONTASK ADDRESSABILITY 00316000 * GR 5 = BSCBLOK ADDRESSABILITY 00317000 * GR0-4= WORK REGISTERS 00318000 * 00319000 * OPERATION - 00320000 * 00321000 * 1. IF THE BISYNC LINE IS NOT AVAILABLE, SET RETURN REGISTER 00322000 * TO 12, CONDITION CODE TO 2 AND RETURN TO CALLER. 00323000 * 00324000 * 2. IF THE REQUEST IS FOR ENABLING OR DISABLING THE BISYNC 00325000 * LINE (REGISTER 0 = X'FF' IN LOW ORDER BYTE), THE FOLLOWING 00326000 * FUNCTIONS ARE PERFORMED: 00327000 * 00328000 * A. GET A CONTROL CONTASK, BUILD THE CCWS FOR ENABLE OR 00329000 * DISABLE FUNCTION AND QUEUE IT OFF THE CONTROL UNIT 00330000 * NICBLOK. 00331000 * 00332000 * B. FOR ENABLE FUNCTION, GET STORAGE FOR THE BINARY 00333000 * SYNCHRONOUS COMMUNICATION CONTROL BLOCK, SAVE 00334000 * POINTER TO CONTROL BLOCK IN RDEVBLOK (RDEVBSC) AND 00335000 * GO TO STEP 4. 00336000 * 00337000 * C. FOR DISABLING THE BISYNC LINE, SET UP THE DISABLE CCW 00338100 * AND GO TO STEP 4. IF THIS IS A SWITCHED LINE AND 00338600 * THERE IS AN ACTIVE I/O OPERATION ON THE LINE, CALL 00339100 * DMKIOSHA TO TERMINATE THE I/O OPERATION AND RETURN TO 00339600 * CALLER. 00340100 * 3. FOR ENABLING OR DISABLING THE REMOTE STATIONS 00341000 * (REGISTER 0 = X'00' IN LOW ORDER BYTE), THE FOLLOWING 00342000 * FUNTIONS WILL BE PERFORMED. 00343000 * 00344000 * A. FOR ENABLING THE REMOTE STATION, SET UP THE VM LOGO 00345000 * FOR THE DISPLAY STATION, FORMAT THE REMOTE STATION 00346000 * DISPLAY SCREEN, SET THE RETURN INDEX (X'30') AFTER 00347000 * FORMATTING THE SCREEN TO BUILD A VMBLOK FOR THE VIRTUAL 00348000 * MACHINE USER AND GO TO STEP 4. 00349000 * IF THE STATION IS CONNECTED TO A SWITCHED LINE, ALONG 00349100 * WITH THE ABOVE FUNCTIONS, SET THE INITIAL BIDDING 00349200 * SEQUENCE FLAG. 00349300 * 00350000 * B. FOR DISABLING THE REMOTE STATION, SET UP CCWS TO 00351000 * CLEAR THE REMOTE DISPLAY SCREEN, SET RETURN INDEX 00352000 * (X'1C') AFTER CLEARING THE SCREEN, LOGOFF USER AND 00353000 * GO TO STEP 4. 00354000 * IF THE STATION IS CONNECTED TO A SWITCHED LINE, SET 00354100 * THE RETURN CODE TO ZERO, HALT THE SWITCHED LINE 00354200 * (IF NECESSARY), AND RETURN TO CALLER. 00354300 * 00355000 * 4. IF THE BISYNC LINE IS ALREADY ACTIVE, THEN RETURN 00356000 * TO CALLER. IF THE BISYNC LINE IS NOT ACTIVE, 00357000 * BUILD AND STACK A CPEXBLOK TO RETURN TO CALLER AS SOON 00358000 * AS POSSIBLE, AND THEN GOTO DMKRGBIC TO START UP THE 00359000 * BISYNC LINE. 00360000 * 00361000 ************************************************************** 00362000 EJECT 00363000 USING SAVEAREA,R13 @V305731 00364000 USING DMKRGBEN,R12 @V305731 00365000 DMKRGBEN DS 0D SCHEDULE ENABLE-DISABLE TASK @V305731 00366000 ENTER , @V305731 00367000 L R12,RGBBASE GET THE BASE ADDRESS @V305731 00368000 USING DMKRGB,R12 @V305731 00369000 USING RDEVBLOK,R8 @V305731 00370000 SWITCH ENSURE WE ARE ON THE MAIN PROC @VA07391 00370100 LA R2,12(0) SET THE INVALID RETURN CODE @V305731 00371000 TM RDEVSTAT,RDEVDISA+RDEVDED+RDEVNRDY IS LINE AVAIL@V305731 00372000 BNZ RGFEXIT NO, GO SET CC= 2 @V305731 00373000 OI RDEVSTAT,RDEVRSVD LINE IN USE BY THE SYSTEM @V305731 00374000 L R5,RDEVBSC GET PTR TO BSCBLOK (IF POSSIBLE) @V305731 00375000 SLR R10,R10 CLEAR IOBLOK POINTER @V305731 00376000 LTR R0,R0 IS THIS A LINE REQUEST @V305731 00377000 BNZ LINESUP YES, GO TO LINE SECTION @V305731 00378000 TM NICFLAG,NICDISB DID OPERATOR 'DISABLE' RESOURCE @V305731 00379000 BZ ENTFMT NO, TEST FOR SCREEN FORMATTED @V305731 00380000 BAL R3,GRFCLRT CLEAR SCREEN FOR DISABLE @V305731 00381000 MVI CONLABEL,RTNLOGOF INDICATOR FOR LOGOFF @V305731 00382000 BAL R7,RGFTASK GO SETUP FOR START I/O TO LINE @V305731 00383000 SPACE 00384000 ENTFMT EQU * @V305731 00385000 TM NICFLAG,NICFMT IS SCREEN FORMATTED ? @V305731 00386000 BZ FMTENA NO, GO FORMAT SCREEN @V305731 00387000 BAL R3,GRFCLRT CLEAR VM LOGO FROM SCREEN @V305731 00388000 MVI CONLABEL,RTNBLDVM INDICATOR FOR VMBLOK BUILD @V305731 00389000 BAL R7,RGFTASK GO SETUP FOR START I/O TO LINE @V305731 00390000 FMTENA EQU * @V305731 00391000 BAL R3,INITIAL INITIALIZE THE VM LOGO @V305731 00392000 BAL R3,RGFFMT FORMAT THE DISPLAY SCREEN @V305731 00393000 TM RDEVFTR,FTRDIAL DIAL-UP FEATURE INDICATED? @V346931 00394100 BNO RGFTASK NO, START I/O OPERATION @V346931 00394200 OI BSCFLAG1,BSCINBID INITIAL BID NEEDED @V346931 00394300 XC BSCRESP(RESPLEN),BSCRESP CLEAR RESPONSE BUFFER @V346931 00394400 BAL R7,RGFTASK GO START I/O ON LINE @V346931 00394500 SPACE 1 @V346931 00394600 SPACE 1 00395000 LINESUP EQU * @V305731 00396000 L R9,RDEVNICL GET THE FIRST NICBLOK POINTER @V305731 00397000 BAL R7,CTLTASKB GET A CONTROL CONTASK @V305731 00398000 TM RDEVFLAG,RDEVDISB DID OPERATOR 'DISABLE' LINE @V305731 00399000 BO LINEDIS YES, GO ATTEMPT TO DISABLE LINE @V305731 00400000 BAL R3,BULDBSC GET STORAGE FOR THE BSCBLOK @V305731 00401000 MVC CONCCW1(3*8),DISABLE GET CCWS TO ENABLE LINE @V305731 00402000 MVI CONCCW1+4,SILI+CC INDICATE COMMAND CHAINING @V305731 00403000 BAL R7,RGFTASK GO START I/O OPERATION TO LINE @V305731 00404000 SPACE 00405000 LINEDIS EQU * @V305731 00406000 OI BSCFLAG1,BSCSHUT SYNCRONIZE SHUTDOWN @VA11623 00406050 TM RDEVSTAT,RDEVWAII IS DEVICE BUSY? @V346931 00406100 BZ LINEDIS2 NO, DON'T DO HALT DEVICE @V346931 00406200 ICM R10,B'1111',RDEVAIOB GET ACTIVE IOB IF ANY @V346931 00406300 BZ LINEDIS2 NO ACTIVE IOB, DON'T HALT LINE @V346931 00406400 OI BSCFLAG1,BSCHALT INDICATE HALT I/O DONE @V346931 00406500 CALL DMKIOSHA GO DO HALT DEVICE OPERATION @V346931 00406600 SR R2,R2 SET CC = 0 @V346931 00406700 BAL R7,RGFEXIT GO SET CC = 0 AND EXIT @V346931 00406800 LINEDIS2 EQU * BYPASS HALT I/O @V346931 00406900 MVC CONCCW1(8),DISABLE SETUP CCW TO DISABLE LINE @V305731 00407000 MVI CONPARM,RDEVDISB INDICATE DISABLE FOR HANDLER @V305731 00408000 RGFTASK EQU * @V305731 00409000 SR R2,R2 SET RETURN CODE TO ZERO @V305731 00410000 OI NICFLAG,NICPROCN PROCESS THIS NICBLOK NOW @V305731 00411000 TM RDEVSTAT,RDEVWAII IS THE LINE BUSY @V305731 00412000 BNZ RGFEXIT YES, EXIT @V305731 00413000 LA R4,RGFEXIT1 GET THE EXECUTION ADDRESS @VA11623 00414100 BAL R7,STKCPEX STACK A CPEXBLOK TO DO THE EXIT @V305731 00415000 GOTO DMKRGBIC GO START I/O OPERATION TO LINE @V305731 00416000 SPACE 1 00417000 RGFEXIT1 DS 0H @VA11623 00418100 TM BSCFLAG1,BSCSHUT SHUTDOWN FINISHED? @VA11623 00418200 BNO RGFEXIT YES, TELL DMKNES @VA11623 00418300 LA R4,RGFEXIT1 GET RETURN ADDRESS @VA11623 00418400 BAL R7,STKCPEX WAIT FOR SHUTDOWN TO FINISH @VA11623 00418500 B GODSPCH ... @VA11623 00418600 RGFEXIT DS 0H @VA11623 00418700 ST R2,SAVER2 SAVE RETURN CODE @V305731 00419000 LTR R2,R2 SET CONDITION CODE 2 @V305731 00420000 EXIT , @V305731 00421000 DROP R13 DROP R13 AS SAVEAREA BASE @V305731 00422000 EJECT 00423000 ****************************************************************** 00424000 * THE FOLLOWING SUBROUTINES MUST NOT ADDRESS ANY FIELDS IN 00425000 * THE SECOND 4096 BYTES OF DMKRGB. THESE ARE USED BY 'DMKRGBEN' 00426000 * WHICH HAS LIMITED ADDRESSABILITY RANGE DUE TO THE SAVEAREA 00427000 * REGISTER (GR13). 00428000 * SUBROUTINES 00429000 * CTLTASKB : INITIAL 00430000 * STKCPEX : GRFCLRT 00431000 * DATAMOVE : BULDBSC 00432000 * SETUPCCW : RGFFMT 00433000 * 00434000 * THE SUBROUTINES ABOVE ARE IN BOTH DMKRGB AND DMKRGA. 00435000 * ANY CHANGES MADE TO THESE SUBROUTINES SHOULD ALSO BE MADE 00436000 * TO THE DUPLICATE IN DMKRGA. 00437000 **************************************************************** 00438000 SPACE 2 00439000 CTLTASKB EQU * SET UP BASIC SIZE FOR CONTASK @V305731 00440000 LA R0,CONTSIZE SIZE OF BASIC CONTASK @V305731 00441000 B CTLTASK1 GET STORAGE FOR CONTASK @V305731 00442000 CTLTASK EQU * ALLOCATE AND QUEUE CONTROL TASK @V305731 00443000 LA R0,CONTSIZE+6 ...SIZE OF CONTASK @VA08129 00444100 CTLTASK1 EQU * @V305731 00445000 CALL DMKFREE GET STORAGE FOR CONTASK @V305731 00446000 XC 0(CONTSIZE*8,R1),0(R1) CLEAR THE HEADER @V305731 00447000 LR R6,R1 PUT CONTASK ADDRESS IN REGISTER 6@V305731 00448000 STH R0,CONTSKSZ SAVE THE CONTASK SIZE @V305731 00449000 L R1,NICUSER VMBLOK OF RESOURCE OWNER @V305731 00450000 ST R1,CONUSER SAVE VMBLOK PTR IN CONTASK @V305731 00451000 MVI CONSTAT,CONCNTL INDICATE CONTROL TASK @V305731 00452000 L R1,NICQPNT GET CURRENT CONTASK FROM CHAIN @V305731 00453000 ST R6,NICQPNT PUT THIS TASK FIRST ON CHAIN @V305731 00454000 ST R1,CONPNT PUT CURRENT TASK ON CHAIN @V305731 00455000 BR R7 RETURN @V305731 00456000 SPACE 2 00457000 STKCPEX EQU * @V305731 00458000 LA R0,CPEXSIZE GET SIZE OF CPEXBLOK @V305731 00459000 CALL DMKFREE GET STORAGE FOR CPEXBLOK @V305731 00460000 USING CPEXBLOK,R1 ADDRESSABILITY FOR CPEXBLOK @V305731 00461000 XC CPEXBLOK(16),CPEXBLOK CLEAR THE HEADER @V305731 00462000 LR R15,R4 GET THE EXECUTION ADDRESS @V305731 00463000 STM R15,R14,CPEXADD SAVE ALL REGISTERS @V305731 00464000 CALL DMKSTKCP STACK BLOCK FOR LATER PROCESSING @V305731 00465000 DROP R1 DROP BASE REGISTER FOR CPEXBLOK @V305731 00466000 BR R7 RETURN @V305731 00467000 SPACE 2 00468000 DATAMOVE EQU * MOVE DATA INTO CONTASK @V305731 00469000 LA R14,CONCCW4+4 GET BEGINNING ADDRESS @V305731 00470000 AR R14,R1 UPDATE TO END OF DATA @V305731 00471000 MVI 0(R14),ETX PUT ENDING BISYNC CHAR IN BUFFER @V305731 00472000 DATMOVE EQU * MOVE DATA INTO CONTASK @V305731 00473000 MVC CONCCW4+1(3),SYNCP MOVE BISYNC HEADER INTO DATA @V305731 00474000 BCTR R1,R0 SUBTRACT - EX INSTRUCTION @V305731 00475000 EX R1,DATA MOVE DATA INTO BUFFER AREA @V305731 00476000 BR R7 RETURN @V305731 00477000 SPACE 2 00478000 BULDBSC EQU * @V305731 00479000 L R5,RDEVBSC GET POINTER TO BSCBLOK @V305731 00480000 LTR R5,R5 IS BSCBLOK POINTER ZERO ? @V305731 00481000 BNZR R3 NO, RETURN @V305731 00482000 LA R0,BSCSIZE GET THE SIZE OF THE BSCBLOK @V305731 00483000 CALL DMKFREE GET STORAGE FOR BSCBLOK @V305731 00484000 ST R1,RDEVBSC SAVE BSCBLOK PTR IN RDEVBLOK @V305731 00485000 LR R5,R1 GET BSCBLOK POINTER @V305731 00486000 XC BSCBLOK(BSCSIZE2),BSCBLOK CLEAR HEADER FIELD @V305731 00487000 BR R3 RETURN @V305731 00488000 SPACE 2 00489000 INITIAL EQU * @V305731 00490000 MVI NICCORD,X'01' SET THE Y COORDINATE TO LINE 1 @V305731 00491000 L R1,LOGO GET VM LOGO POINTER @V305731 00492000 LTR R1,R1 IS THERE A POINTER FOR VM LOGO @V305731 00493000 BNZR R3 YES, GO SET UP CCW FOR FORMAT @V305731 00494000 LA R0,99 GET THE SIZE OF THE LOGO @V305731 00495000 CALL DMKFREE GET STORAGE FOR THE LOGO @V305731 00496000 ST R1,LOGO SAVE VM LOGO POINTER @V305731 00497000 STCM R1,7,FMTLOGO+1 SET UP CCW WITH LOGO ADDRESS @V305731 00498000 LR R7,R1 GET VM LOGO POINTER @V305731 00499000 L R1,=A(DMKBOXBX) GET VM LOGO ADDRESS @V305731 00500000 TRANS 2,1,OPT=(BRING,DEFER,SYSTEM),AFFINITY @VA07391 00501100 LA R1,FMTBUF BUFFER ADDRESS TABLE @V305731 00502000 LA R0,16 LOOP COUNT @V305731 00503000 NXTFMT EQU * @V305731 00504000 MVI 0(R7),SBA SET SBA ORDER @V305731 00505000 MVC 1(2,R7),0(R1) MOVE BUFFER ADDRESS @V305731 00506000 MVC 3(46,R7),0(R2) MOVE LOGO LINE TO BUFFER @V305731 00507000 LA R1,2(R1) NEXT BUFFER ADDRESS @V305731 00508000 LA R2,46(R2) NEXT LOGO LINE ADDRESS @V305731 00509000 LA R7,49(R7) NEXT DATA ADDRESS @V305731 00510000 BCT R0,NXTFMT LOOP FOR 16 LINES @V305731 00511000 MVI 0(R7),ETX PUT BSC ENDING CHAR IN BUFFER @V305731 00512000 BR R3 RETURN @V305731 00513000 SPACE 2 00514000 RGFFMT EQU * @V305731 00515000 LA R0,CONTSIZE+7 GET SIZE OF CONTASK @V305731 00516000 BAL R7,CTLTASK1 GET STORAGE FOR CONTROL CONTASK @V305731 00517000 MVI NICSTAT,NICRUNN+NICNTRL SET STATUS IN NICBLOK @V305731 00518000 MVI CONLABEL,RTNFMTDN INDICATOR FOR FORMAT DONE @V305731 00519000 MVC CONCCW1(8*2),FMT77CCW MOVE FORMAT CCWS @V305731 00520000 LA R1,CONCCW4+1 GET BEGINNING ADDRESS OF DATA @V305731 00521000 STCM R1,7,CONCCW1+1 SAVE BEGINNING ADDRESS @V305731 00522000 MVC CONCCW3(8),READCCW1 MOVE IN READ RESPONSE CCW @V305731 00523000 LA R1,BSCRESP GET THE RESPONSE BUFFER ADDRESS @V305731 00524000 STCM R1,7,CONCCW3+1 SAVE ADDRESS OF RESPONSE BUFFER @V305731 00525000 LA R1,FMT77L GET THE LENGTH OF FORMAT DATA @V305731 00526000 LA R2,FMT3277 GET ADDRESS OF FORMAT DATA @V305731 00527000 BAL R7,DATMOVE MOVE DATA INTO BUFFER AREA @V305731 00528000 MVI CONCCW4+3,EWRTCMD SET ERASE/WRITE GRAPHIC CMD @V305731 00529000 BR R3 RETURN @V305731 00530000 SPACE 2 00531000 GRFCLRT EQU * @V305731 00532000 BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 00533000 NI NICFLAG,X'FF'-(NICDIAG+NICALRM) CLEAR FLAGS @V305731 00534000 MVI NICCORD,X'00' SET COORDINATE Y TO ZERO @V305731 00535000 MVI NICSTAT,NICRUNN+NICNTRL SET STATUS IN NICBLOK @V305731 00536000 LA R1,WRT77CCW SET UP CCWS FOR CLEAR FUNCTION @V305731 00537000 BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 00538000 MVI CONCCW1+7,CLR77L+4 SET CCW COUNT FOR CLEAR FUNC.@V305731 00539000 LA R1,CLR77L GET THE LENGTH OF CLEAR DATA @V305731 00540000 LA R2,CLR3277 GET ADDRESS OF CLEAR DATA @V305731 00541000 BAL R7,DATAMOVE MOVE DATA INTO BUFFER AREA @V305731 00542000 BR R3 RETURN @V305731 00543000 SPACE 2 00544000 SETUPCCW EQU * SET UP CCWS FOR BISYNC RESPONSE @V305731 00545000 MVC CONCCW1(8),0(R1) MOVE CCW INTO CONTASK @V305731 00546000 MVI CONCCW1+4,SILI+CC MAKE SURE CMD CHAIN FLAG IS ON@V305731 00547000 LA R1,CONCCW4+1 GET BEGINNING ADDRESS OF DATA @V305731 00548000 STCM R1,7,CONCCW1+1 SAVE BEGINNING ADDRESS @V305731 00549000 MVC CONCCW2(8),READCCW1 GET READ RESPONSE CCW @V305731 00550000 LA R1,BSCRESP GET RESPONSE BUFFER @V305731 00551000 STCM R1,7,CONCCW2+1 SAVE RESPONSE BUFFER ADDRESS @V305731 00552000 BR R7 RETURN @V305731 00553000 SPACE 2 00554000 DS 0D @V305731 00555000 DISABLE DC X'2F',AL3(0),AL1(SILI,X'01'),AL2(1) DISABLE CCW @V305731 00556000 ENABLE1 DC X'23',AL3(SETMODE),AL1(SILI+CC,X'01'),AL2(1) @V305731 00557000 DC X'27',AL3(0),AL1(SILI,X'01'),AL2(1) @V305731 00558000 SPACE 2 00558100 * THESE CCWS ARE USER FOR INITIAL DIAL CONNECTION OPERATION @V346931 00558200 INITBID DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V346931 00558300 DC X'01',AL3(RGFENQ),AL1(SILI+CC,X'03'),AL2(1) @V346931 00558400 DC X'02',AL3(0),AL1(SILI,X'05'),AL2(RESPLEN) @V346931 00558500 RESPLEN EQU 6 LENGTH OF READ FOR SELECTION @V346931 00558600 THREECCW EQU (8*3) LENGTH OF THREE CHAINED CCWS @V346931 00558700 SPACE 1 00558800 READCCW1 DC X'02',AL3(0),AL1(SILI,X'0B'),AL2(2) @V305731 00559000 WRT77CCW DC X'01',AL3(0),AL1(SILI+CC,X'10'),AL2(0) @VA13944 00560000 FMT77CCW DC X'01',AL3(0),AL1(SILI+CD,X'10'),AL2(FMT77L+3) @VA13944 00560500 FMTLOGO DC X'01',AL3(0),AL1(SILI+CC,X'10'),AL2(785) @VA13944 00561000 FMT3277 DC AL1(WCC56,SBA,X'40',X'40') @V305731 00564000 FMTON DC CL20'VM/370 ONLINE' @V305731 00565000 DC AL1(SBA,X'5B',X'5F',SF,ATTR7,IC) @V305731 00566000 DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 00567000 DC CL20'RUNNING' @V305731 00568000 FMT77L EQU *-FMT3277 @V305731 00569000 SPACE 00570000 FMTBUF DC X'C5D1C661C7F1C9C1' @V305731 00571000 DC X'4AD14B614CF14EC1' @V305731 00572000 DC X'4FD15061D1F1D3C1' @V305731 00573000 DC X'D4D1D561D6F1D8C1' @V305731 00574000 SPACE 00575000 CLR3277 DC AL1(WCC6,SBA,X'40',X'40') @V305731 00576000 DC AL1(RA,X'C7',X'5F',X'00') @VA08129 00577100 DC AL1(RA,X'4E',X'7F',X'00') @VA08129 00577200 DC AL1(RA,X'D6',X'5F',X'00') @VA08129 00577300 DC AL1(RA,X'5B',X'5F',X'00') @VA08129 00577400 DC AL1(SF,ATTR7,IC) @V305731 00578000 DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 00579000 DC CL20'RUNNING' @V305731 00580000 CLR77L EQU *-CLR3277 @V305731 00581000 SPACE 00582000 LOGO DC A(0) ADDRESS OF VM LOGO @V305731 00583000 SETMODE DC X'00' MODE SET FOR 270X TCU @V346931 00584100 RGFINDEQ DC AL1(ENQ,X'05',EOT) ENQ, INDEX & EOT - POLL ENTRY@VA03474 00585100 SYNCP DC AL1(STX,ESC,WRTCMD) BISYNC HEADER @V305731 00586000 DATA MVC CONCCW4+4(*-*),0(R2) MOVE DATA INTO CONTASK @V305731 00587000 EJECT 00588000 LTORG @V305731 00589000 EJECT 00590000 ***************************************************************** 00591000 * NEW ENTRY LABEL USE BY DMKRGA TO RESTART THE I/O 00592000 * OPERATION TO A BISYNC LINE. THIS ENTRY POINT WAS CREATED 00593000 * WHEN DMKRGB WAS SPLIT INTO TWO MODULES. 00594000 ****************************************************************** 00595000 SPACE 2 00596000 USING DMKRGB,R12 ADDRESSABILITY FOR SCAN SECTION @V305731 00597000 DMKRGBSN DS 0D @V305731 00598000 LR R12,R7 GET BASE ADDRESS FOR DMKRGB @V305731 00599000 LM R12,R13,RGBBASE GET BASE ADDRESSES @V305731 00600000 USING DMKRGB,R12,R13 SET UP ADDRESSABILITY @V305731 00601000 SPACE 1 00602000 SWITCH ENSURE WE ARE ON THE MAIN PROC @VA07391 00602100 RGSTART EQU * @V305731 00603000 TM RDEVSTAT,RDEVNRDY+RDEVWAII IS BISYNC LINE AVAIL @V305731 00604000 BNZ GODSPCH NO, GO TO DISPATCHER @V305731 00605000 BAL R7,FRETIOB RELEASE THE IOBLOK & IOERBLOK @V305731 00606000 BAL R3,BULDBSC GET POINTER TO BSCBLOK @VA07175 00607500 L R9,RDEVNICL GET BEGINNING OF NICBLOK LIST @V305731 00608000 LA R2,NICSIZE*8 GET SIZE OF NICBLOK @V305731 00609000 LH R3,RDEVMAX GET HIGHEST RESOURCE ID. @V305731 00610000 MH R3,=AL2(NICSIZE*8) GET THE HIGHEST INDEX VALUE @V305731 00611000 ALR R3,R9 GET THE ENDING ADDRESS @V305731 00612000 TM NICFLAG,NICPROCN IS PROCESS NOW ACTIVE @V305731 00613000 BNZ RNICLST YES, SCAN FOR ACTIVE TASK @V305731 00614000 CL R3,BSCRROBN LAST = CURRENT ? @V305731 00615000 BE RNICLST YES....START WITH FIRST... @V305731 00616000 ICM R9,15,BSCRROBN GET LAST ACTIVE USER @V305731 00617000 BNZ RNEXLST AND SKIP OVER... @V305731 00618000 L R9,RDEVNICL RESTORE NICBLOK START @V305731 00619000 RNICLST EQU * GET ACTIVE CONTASK @V305731 00620000 L R6,NICQPNT POINTER TO CONTASK @V305731 00621000 LTR R6,R6 IS THE POINTER ZERO @V305731 00622000 BNP RNEXLST YES, GET NEXT RESOURCE @V305731 00623000 TM NICFLAG,NICPROCN IS PROCESS FLAG ON ? @V305731 00624000 BO RGFCHAN YES, GO PROCESS CONTASK @V305731 00625000 TM NICSTAT,NICNTRL IS THE RESOURCE IN CONTROL MODE @V305731 00626000 BZ RNCHAIN NO, GO CHECK SCREEN STATUS @V305731 00627000 RNEXLST EQU * @V305731 00628000 BXLE R9,R2,RNICLST GET NEXT NICBLOK @V305731 00629000 SR R9,R9 CLEAR NICBLOK POINTER REGISTER @V305731 00630000 CL R3,BSCRROBN END OF NICBLOK SCAN @V305731 00631000 BE POLLSECT YES, CHECK FOR READS @V305731 00632000 ICM R3,15,BSCRROBN END OF SCAN @V305731 00633000 BZ POLLSECT YES, ALREADY THERE @V305731 00634000 L R9,RDEVNICL GET FIRST NICBLOK POINTER @V305731 00635000 BAL R7,RNICLST SCAN NICBLOKS FOR ACTIVE TASK @V305731 00636000 RGFIOS EQU * @V305731 00637000 LTR R10,R10 IS THERE AN IOBLOK POINTER @V305731 00638000 BZ POLLSECT NO, GO POLL THE LINE @V305731 00639000 BAL R3,SELECTCW GET SELECTION CCWS @V305731 00640000 RESTART EQU * @V305731 00641000 NI BSCFLAG,X'FF'-BSCSCAN CLEAR SECOND SCAN FLAG @V305731 00642000 XC IOBRCNT(2),IOBRCNT CLEAR RETRY COUNT FOR I/O @V305731 00643000 BAL R3,FRETIOER RELEASE THE IOERBLOK @V305731 00644000 L R2,=A(DMKRGAIN) INTERRUPT RETURN ADDRESS @V305731 00645000 ST R2,IOBIRA SAVE INTERRUPT RETURN ADDRESS @V305731 00646000 MVC IOBUSER,NICUSER ASSIGN VMBLOK FOR I/O @VA07391 00647200 ST R9,BSCAUSER SAVE ADDR OF ACTIVE RESOURCE @V305731 00651000 CL R9,RDEVNICL IS THIS THE FIRST NICBLOK @V305731 00652000 BE BYPNICB YES, SKIP SAVING NICBLOK @VM03134 00653000 ST R9,BSCRROBN SAVE ACTIVE NICBLOK @V305731 00654000 BYPNICB EQU * SETUP TO DO START I/O @VM03134 00655000 MVI IOBSTAT,X'00' CLEAR THE STATUS BYTE @V305731 00656000 MVI IOBSPEC,X'00' CLEAR SPECIAL REQUEST @V305731 00657000 NI IOBFLAG,IOBCP+IOBRSTRT LEAVE ON THESE FLAGS @V305731 00658000 OI RDEVSTAT,RDEVWAII LINE IS NOW ACTIVE @V305731 00659000 L R1,NICUSER LOAD ADDR OF NEW VMBLOK @VA07391 00659100 SWTCHVM OPT=STAY SWITCH VMBLOK LOCKING & CHARGINE @VA07391 00659200 CALL DMKIOSQR QUEUE REAL I/O FOR SYSTEM @V305731 00660000 BAL R7,GODSPCH GO TO DISPATCHER @V305731 00661000 SPACE 1 00662000 POLLSECT EQU * @V305731 00663000 TM BSCFLAG,BSCSCAN IS THIS SECOND SCAN OF NICBLOK @V305731 00664000 BZ POLLIOB NO, GO DO POLL OPERATION @V305731 00665000 NI BSCFLAG,X'FF'-BSCSCAN CLEAR SECOND SCAN FLAG @V305731 00666000 BAL R7,GODSPCH GO TO DISPATCHER @V305731 00667000 POLLIOB EQU * @V305731 00668000 BAL R3,BLDIOB GO GET STORAGE FOR IOBLOK @V305731 00669000 BAL R3,GPOLLCW SET UP GENERAL POLLING CCWS @V305731 00670000 BAL R7,SETCAW GO RESTART I/O OPERATION TO LINE @V305731 00671000 SPACE 2 00672000 RNCHAIN EQU * GET THE ACTIVE CONTASK @V305731 00673000 TM NICFLAG,NICFMT IS THE SCREEN FORMATTED @V305731 00674000 BZ RGFMT NO, GO FORMAT SCREEN @V305731 00675000 CLI NICSTAT,NICRUNN IS RUNNING STATE INDICATED ? @V305731 00676000 BE BLDCONT YES, START UP THIS TASK @V305731 00677000 TM NICSTAT,NICREAD IS THERE A READ ACTIVE ? @V305731 00678000 BO READPRI YES, CHECK FOR PRIORITY WRITE @V305731 00679000 TM NICSTAT,NICHOLD IS HOLD ACTIVE ? @V305731 00680000 BZ RNEXLST NO, GO GET NEXT NICBLOK @V305731 00681000 L R1,NICUSER GET USER VMBLOK POINTER @V305731 00682000 TM VMRSTAT-VMBLOK(R1),VMLOGOFF IS LOGOFF ACTIVE @V305731 00683000 BZ RNEXLST NO, GET NEXT NICBLOK @V305731 00684000 BAL R7,PRIOWRIT GO CLEAR DISPLAY SCREEN @V305731 00685000 SPACE 2 00686000 READPRI EQU * HANDLE PRIORITY WRITE REQUEST @V305731 00687000 L R1,CONPNT GET NEXT CONTASK POINTER @V305731 00688000 LTR R1,R1 IS THE POINTER ZERO ? @V305731 00689000 BNP RNEXLST YES, GET NEXT NICBLOK @V305731 00690000 TM CONPARM-CONTASK(R1),PRIORITY BREAK-IN SITUATION @V305731 00691000 BZ RNEXLST NO, GO GET NEXT NICBLOK @V305731 00692000 ST R1,NICQPNT REMOVE THE READ TASK FROM CHAIN @V305731 00693000 NI CONSTAT,X'FF'-CONESCP CONTASK IS NOT ACTIVE @V305731 00694000 READBK EQU * RE-INSERT THE READ CONTASK @V305731 00695000 L R2,CONPNT-CONTASK(,R1) ADDRESS OF NEXT TASK @V305731 00696000 LTR R2,R2 IS THE POINTER ZERO ? @V305731 00697000 BNP READINS YES, INSERT THE READ HERE @V305731 00698000 TM CONPARM-CONTASK(R2),PRIORITY BREAK-IN SITUATION @V305731 00699000 BZ READINS NO, INSERT THE READ HERE @V305731 00700000 LR R1,R2 SAVE THE BACK POINTER @V305731 00701000 BAL R7,READBK TRY AGAIN @V305731 00702000 SPACE 00703000 READINS EQU * RE-CHAIN THE READ CONTASK @V305731 00704000 ST R2,CONPNT POINTER TO NEXT CONTASK @V305731 00705000 ST R6,CONPNT-CONTASK(,R1) PATCH THE FORWARD CHAIN @V305731 00706000 L R6,NICQPNT GET ADDRESS OF FIRST CONTASK @V305731 00707000 SPACE 1 00708000 BLDCONT EQU * START UP CONSOLE REQUEST @V305731 00709000 TM CONSTAT,CONSYNC SYNCHRONIZATION CONTASK @V305731 00710000 BZ OUTCONT NO, GO CHECK OUTPUT CONTASK @V305731 00711000 L R0,CONPNT GET NEXT CONTASK POINTER @V305731 00712000 ST R0,NICQPNT PUT NEXT TASK FIRST @V305731 00713000 SR R0,R0 CLEAR REGISTER 0 @V305731 00714000 ST R0,CONPNT ZERO OUT NEXT POINTER FIELD @V305731 00715000 CALL DMKQCNET RETURN CONTASK @V305731 00716000 LA R2,NICSIZE*8 GET THE SIZE OF THE NICBLOK @V305731 00717000 BAL R7,RNICLST GET NEXT CONTASK FROM RESOURCE @V305731 00718000 SPACE 1 00719000 OUTCONT EQU * @V305731 00720000 TM CONSTAT,CONOUTPT IS THIS AN OUTPUT CONTASK @V305731 00721000 BZ STRTREAD NO, GO CHECK FOR READ CONTASK @V305731 00722000 TM CONDWC,X'40' DIAGNOSE CONSOLE WRITE ?? @VA07542 00723100 BZ CORD NO, CONTINUE NORMALLY @V305731 00724000 TM NICFLAG,NICALRM SCREEN HAVE ALARM MESSAGE ? @V305731 00725000 BO CRTHOLD1 YES, FORCE SCREEN TO HOLD STATUS @V305731 00726000 TM CONDWC,X'80' ERASE BEFORE WRITE ?? @VA07542 00727100 BZ DIAGRUN NO, CLEAR THE INDICATORS @V305731 00728000 DIAGCLR EQU * DIAGNOSE CLEAR SECTION @V305731 00729000 CLI CONDWC,X'FF' ERASE CLEAR DIAGNOSE REQUEST ? @VA07542 00730100 BE CNCLDIAG YES, NO OUTPUT TO DO @V305731 00731000 NI CONDWC,X'7F' TURN OFF ERASE INDICATOR @VA07542 00732100 BAL R7,CRTMORE1 WRITE MORE STATUS BEFORE WRITE @V305731 00733000 SPACE 1 00734000 DIAGRUN EQU * DIAGNOSE RUNNING SECTION @V305731 00735000 NI CONDWC,X'3F' CLEAR DIAGNOSE FLAGS @VA07542 00736100 IC R0,CONDWC GET LINE COORDINATOR @VA07542 00737100 CLI CONDWC,22 DIAGNOSE ISSUED TO THE @VA07542 00738100 BE DIAGSIO INPUT AREA? @VM03094 00739000 CLI CONDWC,23 ...... @VA07542 00740100 BE DIAGSIO IF YES, TAKE SPECIAL PATH @VM03094 00741000 STC R0,NICCORD SET LINE COORDINATE @V305731 00742000 OI NICFLAG,NICDIAG SET DIAGNOSE WRITE FLAG @V305731 00743000 B SETCORD GO GET THE NEXT LINE @V305731 00744000 DIAGSIO EQU * HANDLE WRITING TO INPUT AREA @VM03094 00745000 STC R0,BSCLINE SET LINE COORDINATE @VM03094 00746000 OI NICTMCD,NICSIO SET WRITING TO INPUT FLAG @VM03094 00747000 LA R0,BUFINLTH GET BUFFER SIZE @VM03116 00748000 CH R0,CONCNT IS THIS GREATER THAN COUNT @VM03116 00749000 BNL SETCORD YES, GET NEXT LINE @VM03134 00750000 STH R0,CONCNT SAVE MAX. SIZE OF BUFFER @VM03116 00751000 B SETCORD GO GET THE NEXT LINE @VM03094 00752000 CNCLDIAG EQU * RETURN CONTASK TO SYSTEM @V305731 00753000 SR R2,R2 SET RETURN CODE TO ZERO @V305731 00754000 BAL R3,SETRETN GO SET RETURN CODE (IF POSSIBLE) @V305731 00755000 BAL R3,CONRET RETURN CONTASK @V305731 00756000 PRIOWRIT EQU * CLEAR DISPLAY SCREEN @V305731 00757000 BAL R3,GRFCLRT SET UP THE CLEAR SCREEN CCWS @V305731 00758000 MVI CONLABEL,RTNNOCTL SET RETURN TO NEXT CONTASK @V305731 00759000 BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00760000 SPACE 1 00761000 CORD EQU * DETERMINE STATUS OF THE SCREEN @V305731 00762000 TM NICFLAG,NICDIAG WAS DIAGNOSE USED BEFORE ? @V305731 00763000 BO CRTFULL YES, FORCE TO MORE STATUS @V305731 00764000 LH R1,CONCNT GET BYTE COUNT @V305731 00765000 SR R4,R4 CLEAR REGISTER @V305731 00766000 IC R4,NICCORD GET CURRENT OUTPUT LINE @V305731 00767000 MH R4,=H'80' CONVERT TO BYTE COORDINATES @V305731 00768000 ALR R4,R1 TOTAL BYTES ON SCREEN @V305731 00769000 LA R2,1760 SIZE OF 3270 SCREEN @V305731 00770000 CLR R4,R2 WILL THIS LINE FIT ON SCREEN @V305731 00771000 BH CRTFULL NO, SCREEN FULL @V305731 00772000 SETCORD EQU * SET UP NEXT LINE VALUE @V305731 00773000 SR R0,R0 CLEAR REGISTER FOR DIVIDE @V305731 00774000 AL R1,=F'79' ROUND UP TO NEXT LINE @V305731 00775000 D R0,=F'80' DIVIDE TO GET NUMBER OF LINES @V305731 00776000 LR R4,R1 SAVE NUMBER OF LINES @V305731 00777000 RUNCTL EQU * SET UP CCWS FOR WRITE @V305731 00778000 MVI NICSTAT,NICRUNN+NICNTRL SET RUNNING & CONTROL @V305731 00779000 LH R1,CONCNT LOAD DATA COUNT @VM03040 00780000 LTR R1,R1 IS COUNT VALUE ZERO @VM03040 00781000 BZ NOAPLW YES, BYPASS APL TRANSLATION @VM03040 00782000 L R7,=A(DMKTBLGR) GRAF DEVICE TRANSLATION TABLE @VM03040 00783000 TM NICTMCD,NICTEXT+NICAPL TEXT OR APL TRANSLATION @VA08981 00783050 BNZ USEGRTAB YES, USE DMKTBLGR @VA08981 00783150 L R7,=A(DMKTBLRG) NO - USE TABLE DMKTBLRG @VA06170 00783300 USEGRTAB DS 0H @VA06170 00783400 L R2,NICUSER GET USER VMBLOK POINTER @VM03040 00784000 IC R0,VMTLEND-VMBLOK(R2) GET LOGICAL LINE END @VM03040 00785000 TM NICTMCD,NICSIO IS WRITING TO INPUT FLAG ON ? @VM03094 00786000 BZ BYPINSET NO, BYPASS INSERTING CHARACTER @VM03134 00787000 MVI X'13'(R7),IC INSERT CURSOR CHAR IN TABLE @VM03094 00788000 BYPINSET EQU * SAVE LOGICAL LINE END CHAR. @VM03134 00789000 STC R0,21(,R7) SAVE LCR CHAR IN TRANSLATE TABLE @VM03040 00790000 BCTR R1,R0 SUBSTRACT ONE - EX INSTR. @VM03094 00791000 L R2,CONADDR GET DATA ADDRESS @VM03040 00792000 APLTRT EQU * TRANSLATE DATA TO GRAPHIC CHARS. @VM03040 00793000 CL R1,F256 LESS THAN 256 ? @VM03040 00794000 BL APLTRAN YES, DO LAST PART @V305798 00795000 TR 0(256,R2),0(R7) TRANSLATE DATA @V305798 00796000 LA R2,256(,R2) NEXT DATA POSITION @V305798 00797000 S R1,F256 DECREMENT COUNT @VM03040 00798000 B APLTRT TEST FOR MORE TO DO @V305798 00799000 APLTRAN EQU * TRANSLATE DATA @V305798 00800000 EX R1,TROPUT TRANSLATE LAST PART OF OUTPUT @VM03040 00801000 MVI 21(R7),X'15' STORE LCR CHAR IN TRANS TABLE @V305798 00802000 MVI X'13'(R7),X'40' INSERT BLANK BACK IN TABLE @VM03094 00803000 TM NICTMCD,NICAPL+NICTEXT TRANS ON? @V387398 00804000 BZ NOAPLW NO, BYPASS TRANSLATION @V387398 00804100 L R1,=A(DMKTBMZO) COMPOUND CHARACTERS TABLE @VM03235 00807000 TM NICTMCD,NICTEXT 3270 TEXT CHARACTER SET? @V387398 00807100 BZ WRTRANS NO -> TRANSLATE TABLE ALL SET @V387398 00807200 L R1,=A(DMKTBMTO) TEXT COMPOUND CHARACTER TABLE @V387398 00807300 WRTRANS EQU * @V387398 00807400 TRANS 7,1,OPT=(BRING,DEFER,SYSTEM),AFFINITY @VA07391 00808100 STM R1,R10,BALRSAVE SAVE CURRENT REGISTERS @VA07391 00810100 LH R0,CONTSKSZ GET SIZE OF CURRENT CONTASK @V305798 00811000 AR R0,R0 DOUBLE CONTASK SIZE @V305798 00812000 CALL DMKFREE GET STORAGE FOR NEW CONTASK @V305798 00813000 MVC 0(CONDATA-CONTASK,R1),0(R6) GET HEADER DATA @V305798 00814000 LA R5,CONDATA-CONTASK(,R1) GET POINTER TO DATA AREA@VM03040 00815000 ST R5,CONADDR-CONTASK(,R1) SAVE DATA AREA POINTER @VM03040 00816000 STH R0,CONTSKSZ-CONTASK(,R1) SAVE SIZE OF CONTASK @VM03040 00817000 L R4,CONADDR POINTER TO CURRENT DATA AREA @VM03040 00818000 LA R4,0(,R4) CLEAR HIGH ORDER BYTE @VA08680 00818500 ST R1,BALRSAVE SAVE NEW CONTASK POINTER @VA07391 00819100 LH R3,CONCNT LOAD DATA COUNT @VM03040 00820000 SR R8,R8 CLEAR COUNT REGISTER @V305798 00821000 BAL R10,TRANSTST TRANSLATE & TEST FOR COMP. CHAR. @V305798 00822000 B FRETNEW RELEASE NEW CONTASK STORAGE @V305798 00823000 APLCOMP EQU * PUT FAKE CHAR. BEFORE COMP. CHAR @V305798 00824000 MVI 0(R5),X'1D' PUT FAKE ATTRIBUTE IN AREA @V305798 00825000 STC R2,1(,R5) PUT COMPOUND CHAR. INTO BUFFER @V305798 00826000 LA R5,2(,R5) UPDATE PASS COMPOUND CHARACTER @V305798 00827000 LA R4,1(,R4) UPDATE PASS COMPOUND CHARACTER @V305798 00828000 LA R8,1(,R8) KEEP COUNT OF FAKE ATTR. CHARS @V305798 00829000 SR R3,R1 DECREMENT BYTE COUNT @V305798 00830000 S R3,F1 SUBTRACT ONE - COMPUND CHAR. @V305798 00831000 BNP FRETOLD GET OUT - FINISH @V305798 00832000 BAL R10,TRANSTST TRANSLATE & TEST FOR COMP. CHAR. @V305798 00833000 B FRETOLD RELEASE OLD CONTASK STORAGE @V305798 00834000 B APLCOMP PUT FAKE ATTR. CHAR IN BUFFER @V305798 00835000 FRETNEW EQU * RELEASE NEW CONTASK STORAGE @V305798 00836000 L R1,BALRSAVE GET NEW CONTASK POINTER @VA07391 00837100 LH R0,CONTSKSZ-CONTASK(,R1) GET SIZE OF CONTASK @VM03040 00838000 ST R6,BALRSAVE SAVE OLD/CURRENT CONTASK PTR @VA07391 00839100 B FRETCONT RELEASE NEW CONTASK @V305798 00840000 FRETOLD EQU * RELEASE CURRENT CONTASK STORAGE @V305798 00841000 LR R1,R6 GET CURRENT CONTASK POINTER @V305798 00842000 LH R0,CONTSKSZ GET SIZE OF OLD CONTASK @V305798 00843000 AH R8,CONCNT ADD NUMBER OF FAKE CHAR TO COUNT @V305798 00844000 L R6,BALRSAVE GET POINTER TO NEW CONTASK @VA07391 00845100 STH R8,CONCNT UPDATE DATA COUNT @V305798 00846000 FRETCONT EQU * RELEASE CONTASK @V305798 00847000 CALL DMKFRET RELEASE CONTASK @V305798 00848000 LM R1,R10,BALRSAVE RESTORE REGISTERS @VA07391 00849100 LTR R10,R10 IS THERE AN IOBLOK POINTER @VM03040 00850000 BNZ APLFIRST YES, SAVE PTR. IN PREVIOUS TASK @VM03040 00851000 ST R1,NICQPNT SAVE CONTASK POINTER @VM03040 00852000 LR R6,R1 SET UP CONTASK REGISTER @VM03040 00853000 B APLCONT CONTINUE PROCESSING @V387398 00854000 APLFIRST EQU * SAVE PTR. IN PREVIOUS CONTASK @VM03040 00855000 ST R1,CONPNT-CONTASK(,R3) SAVE CURRENT PTR. @VM03040 00856000 LR R6,R1 SET UP CONTASK REGISTER @VM03040 00857000 APLCONT TM NICTMCD,NICTEXT 3270 TEXT? @V387398 00857010 BZ NOAPLW BR IF NOT @V387398 00857020 LH R0,CONCNT DATA LENGTH @V387398 00857030 L R1,CONADDR POINT TO DATA @V387398 00857040 TXTLP LR R3,R0 REMAINING BYTE COUNT @V387398 00857050 BCTR R3,0 - 1 FOR EXECUTE @V387398 00857060 N R3,F255 MASK @V387398 00857070 EX R3,TXTTRAN TRANSLATE TEXT OUTPUT @V387398 00857080 LA R3,1(,R3) BYTE COUNT JUST TRANSLATED @V387398 00857090 AR R1,R3 POINT TO NEXT BYTE TO TRANSLATE @V387398 00857100 SR R0,R3 BYTES REMAINING @V387398 00857110 BP TXTLP LOOP IF MORE TO TRANSLATE @V387398 00857120 NOAPLW EQU * BYPASS APL TRANSLATION @VM03040 00858000 MVI CONLABEL,RTNRETBF AFTER FINISHING WRITES @VM03040 00859000 BAL R3,WRITSECT GO SET UP WRITE CCWS FOR BISYNC @V305731 00860000 BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00861000 SPACE 1 00862000 STRTREAD EQU * READ CONTASK SECTION @V305731 00863000 BAL R3,READSUB SET UP CCW FOR READ STATUS @V305731 00864000 BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00865000 SPACE 1 00866000 RGFMT EQU * @V305731 00867000 BAL R3,INITIAL INITIALIZE THE VM LOGO @V305731 00868000 BAL R3,RGFFMT FORMAT THE DISPLAY SCREEN @V305731 00869000 BAL R7,RGFCHAN GO GET IOBLOK POINTER @V305731 00870000 SPACE 1 00871000 CRTHOLD1 EQU * SET UP HOLD STATUS CCWS @V305731 00872000 BAL R3,CRTHOLD SET UP CCWS FOR HOLD STATUS @V305731 00873000 BAL R7,RGFCHAN GO GET POINTER TO IOBLOK @V305731 00874000 SPACE 1 00875000 CRTFULL EQU * COME HERE WHEN SCREEN IS FULL @V305731 00876000 LTR R10,R10 IS THERE AN IOBLOK POINTER @V305731 00877000 BZ ALARMSG NO, CHECK FOR ALARM MESSAGE @VM03134 00878000 LR R6,R3 GET ORIGINAL CONTASK POINTER @V305731 00879000 BAL R7,SETWRIT GO SETUP CCWS FOR RUNNING STATUS @V305731 00880000 SPACE 1 00881000 ALARMSG EQU * CHECK FOR ALARM MESSAGE @VM03134 00882000 TM CONPARM,LOGDROP+LOGHOLD LOGOFF REQUEST ACTIVE @V305731 00883000 BNZ CRTMORE1 YES, PUT SCREEN IN MORE STATUS @V305731 00884000 TM NICFLAG,NICALRM ALARM MESSAGE DISPLAYED ? @V305731 00885000 BO CRTHOLD1 YES, GO FORCE HOLD STATUS @V305731 00886000 CRTMORE1 EQU * SET UP MORE STATUS CCWS @V305731 00887000 BAL R7,RSTTMR RESET ANY ACTIVE TIMER REQUEST @V305731 00888000 BAL R3,CRTMORE SET UP CCWS FOR MORE STATUS @V305731 00889000 * B RGFCHAN GO GET IOBLOK POINTER 00890000 RGFCHAN EQU * GET STORAGE FOR IOBLOK @V305731 00891000 NI NICFLAG,X'FF'-NICPROCN CLEAR PROCESS NOW FLAG @V305731 00892000 BAL R3,BLDIOB GO GET STORAGE FOR IOBLOK @V305731 00893000 RGFCHAN1 EQU * @V305731 00894000 LA R1,CONCCW1 START OF CCW STRING @V305731 00895000 OI CONSTAT,CONESCP CONTASK PROCESSED @V305731 00896000 L R4,IOBMISC GET POINTER TO LAST CONTASK @V305731 00897000 LTR R4,R4 IS THE POINTER ZERO ? @V305731 00898000 BP RGFCHN4 YES, ADD TO THE STRING @V305731 00899000 XC BSCRESP(L'BSCRESP),BSCRESP CLEAR RESPONSE AREA @V305731 00900000 ST R1,IOBCAW SET UP THE CAW @V305731 00901000 BAL R7,RGFCHN5 CONTINUE WITH THIS NICBLOK @V305731 00902000 SPACE 1 00903000 RGFCHN4 EQU * ADD TO EXITING CCW STRING @V305731 00904000 MVC CONCCW2-CONTASK(8,R4),TICCCW MOVE TIC CCW @V305731 00905000 MVI CONCCW1+4-CONTASK(R4),SILI+CD SET DATA CHAINING @V305731 00906000 ST R1,CONCCW2-CONTASK(,R4) SAVE PTR TO CCW STRING @V305731 00907000 MVI CONCCW2-CONTASK(R4),X'08' MAKE IT A TIC COMMAND @V305731 00908000 LA R1,CONCCW4+5 BYPASS WCC CHARACTER FOR CHAINING@V305731 00909000 STCM R1,7,CONCCW1+1 SAVE POINTER TO DATA IN CCW @V305731 00910000 LH R1,CONCCW1+6 GET CCW COUNT @V305731 00911000 S R1,F4 SUBTRACT BISYNC HEADER & WCC @V305731 00912000 STH R1,CONCCW1+6 SAVE COUNT VALUE @V305731 00913000 RGFCHN5 EQU * CHECK STATUS OF CONTASK @V305731 00914000 ST R6,IOBMISC SAVE THE LAST CONTASK PTR @V305731 00915000 TM CONSTAT,CONCNTL IS THIS A CONTROL TASK ? @V305731 00916000 BZ NOCONTAK NO, BYPASS CONTROL TEST @V305731 00917000 CLI CONCCW1,X'2F' IS THE DISABLE COMMAND CCW FIRST @V305731 00918000 BE RESTART YES, GO START I/O TO BISYNC LINE @V305731 00919000 BAL R7,RGFIOS GO QUEUE I/O OPERATION OFF IOBLOK@V305731 00920000 SPACE 1 00921000 NOCONTAK EQU * PROCESS NON-CONTROL CONTASK @V305731 00922000 L R4,CONPNT GET NEXT CONTASK POINTER @V305731 00923000 LTR R4,R4 IS THE POINTER ZERO ? @V305731 00924000 BZ SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00925000 TM NICFLAG,NICDIAG IS THIS A DIAGNOSE WRITE @V305731 00926000 BO SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00927000 TM NICTMCD,NICSIO WAS DIAGNOSE ISSUE TO INPUT AREA @VM03094 00928000 BO SETWRIT YES, GO SET UP CCWS FOR STATUS @VM03094 00929000 TM CONSTAT-CONTASK(R4),CONOUTPT A OUTPUT CONTASK @V305731 00930000 BZ SETWRIT NO, GO SET UP CCWS FOR STATUS @V305731 00931000 TM CONPARM-CONTASK(R4),ALARM IS THIS AN ALARM MSG @V305731 00932000 BO SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00933000 TM CONDWC-CONTASK(R4),X'40' IS THIS A DIAGNOSE? @VA07542 00934100 BO SETWRIT YES, GO SET UP CCWS FOR STATUS @V305731 00935000 LR R3,R6 SAVE CURRENT CONTASK POINTER @V305731 00936000 LR R6,R4 PROCESS NEXT OUTPUT CONTASK @V305731 00937000 BAL R7,CORD GO PROCESS THIS OUTPUT CONTASK @V305731 00938000 SPACE 1 00939000 SETWRIT EQU * SET UP CCWS FOR RUNNING STATUS @V305731 00940000 MVC CONCCW2(8),WRT77RUN GET RUNNING STATUS CCW @V305731 00941000 MVI CONCCW1+4,SILI+CD SET DATA CHAINING @V305731 00942000 MVC CONCCW3(8),READCCW1 GET CCW FOR BISYNC RESPONSE @V305731 00943000 LA R1,BSCRESP GET ADDRESS OF RESPONSE BUFFER @V305731 00944000 STCM R1,7,CONCCW3+1 SAVE ADDRESS OF RESPONSE BUFFER @V305731 00945000 BAL R7,RGFIOS GO QUEUE I/O OPERATION OFF IOBLOK@V305731 00946000 SPACE 2 00947000 ****************************************************************** 00948000 * NEW ENTRY LABEL USE BY DMKRGA TO FORMAT THE 3270 DISPLAY 00949000 * SCREEN. THIS NEW ENTRY POINT WAS CREATED WHEN DMKRGB WAS 00950000 * SPLIT INTO TWO MODULES. 00951000 ****************************************************************** 00952000 SPACE 2 00953000 USING DMKRGB,R12 SETUP ADDRESSABILITY FOR FORMAT @V305731 00954000 DMKRGBMT DS 0D @V305731 00955000 LR R12,R7 GET BASE ADDRESS FOR DMKRGB @V305731 00956000 LM R12,R13,RGBBASE GET BASE ADDRESSES @V305731 00957000 USING DMKRGB,R12,R13 SET UP ADDRESSABILITY @V305731 00958000 BAL R3,INITIAL INITIALIZE THE VM LOGO @V305731 00959000 BAL R3,RGFFMT FORMAT THE DISPLAY SCREEN @V305731 00960000 MVI IOBMISC2,IBBWRITE SET UP FOR WRITE OPERATION @V305731 00961000 LA R1,CONCCW1 PICK UP CHANNEL PROGRAM ADDRESS @V305731 00962000 ST R1,BSCSPTR .... AND SAVE ADDRESS @V305731 00963000 BAL R7,SETCAWA GO RESTART I/O OPERATION TO LINE @V305731 00964000 EJECT 00965000 RGBBASE DS 0F REMOTE 3270 BASE REGISTER VALUE @V305731 00966000 DC A(DMKRGB,DMKRGB+4096) @V305731 00967000 SPACE 2 00968000 ******************************************************************* 00969000 * SUBROUTINES FOR 3270 REMOTE SUPPORT 00970000 * 00971000 * THE SUBROUTINES ARE DUPLICATES OF SOME IN DMKRGA. 00972000 * ANY CHANGES MADE TO THESE SUBROUTINES SHOULD ALSO BE MADE 00973000 * IN DMKRGA. 00974000 ******************************************************************* 00975000 SPACE 2 00976000 SETCAWA EQU * GET START OF CCW STRING @V305731 00977000 LA R1,CONCCW1 GET BEGINNING ADDR OF CCW STRING @V305731 00978000 SETCAW EQU * I/O RESTART SECTION @V305731 00979000 ST R1,IOBCAW SET UP CAW @V305731 00980000 XC BSCRESP(L'BSCRESP),BSCRESP CLEAR RESPONSE BUFFER@V305731 00981000 TM IOBMISC2,IBBSPOLL DOING A SPECIFIC POLL? @VA08730 00981100 BO RESTART YES, GO RESTART THE LINE @VA08730 00981200 NI IOBMISC2,X'FF'-IBBWRITE TURN OFF WRITE FLAG @VA08730 00981300 CLI 5(R1),X'10' IS THIS A WRITE TEXT CCW @VA13944 00981400 BNE RESTART NO, GO RESTART THE LINE @VA08730 00981500 ST R1,BSCSPTR SAVE WRITE CCW ADDRESS @VA08730 00981600 MVI IOBMISC2,IBBWRITE INDICATE THIS IS A WRITE @VA08730 00981700 BAL R7,RESTART GO RESTART I/O OPERATION TO LINE @V305731 00982000 SPACE 1 00983000 CONRET EQU * RETURN CONTASK TO SYSTEM @V305731 00984000 L R0,CONPNT GET NEXT CONTASK (IF ANY) @V305731 00985000 ST R0,NICQPNT SET NEXT CONTASK FOR PROCESSING @V305731 00986000 SR R0,R0 CLEAR REGISTER 0 @V305731 00987000 ST R0,CONPNT CLEAR NEXT POINTER @V305731 00988000 CALL DMKQCNET RETURN CONTASK @V305731 00989000 BR R3 RETURN TO IN LINE CODE @V305731 00990000 SPACE 1 00991000 RSTTMR EQU * RESET TIMER VALUE @V305731 00992000 TM NICSTAT,NICTRQ IS A TIMER REQUEST QUEUED @V305731 00993000 BZR R7 NO, RETURN TO IN LINE CODE @V305731 00994000 NI NICSTAT,X'FF'-NICTRQ RESET TIMER REQUEST FLAG @V305731 00995000 L R1,NICATRB GET ADDRESS OF TRQBLOK @V305731 00996000 CALL DMKSCHRT RESET ACTIVE TIMER REQUEST @V305731 00997000 BR R7 RETURN TO IN LINE CODE @V305731 00998000 SPACE 1 00999000 BLDIOB EQU * GET STORAGE FOR IOBLOK @V305731 01000000 LTR R10,R10 IS THERE AN IOBLOK POINTER ? @V305731 01001000 BNZR R3 YES, RETURN @V305731 01002000 LA R0,IOBSIZE GET IOBLOK SIZES @V305731 01003000 CALL DMKFREE GET STORAGE FOR IOBLOK @V305731 01004000 LR R10,R1 SET UP ADDRESSABILITY FOR IOBLOK @V305731 01005000 XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK @V305731 01006000 BR R3 RETURN TO IN LINE CODE @V305731 01007000 SPACE 1 01008000 FRETIOB EQU * RELEASE IOBLOK & IOERBLOK @V305731 01009000 LTR R10,R10 IS THERE AN IOBLOK POINTER @V305731 01010000 BZR R7 NO, RETURN @V305731 01011000 BAL R3,FRETIOER RELEASE IOERBLOK @V305731 01012000 LR R1,R10 GET IOBLOK POINTER @V305731 01013000 LA R0,IOBSIZE GET SIZE OF IOBLOK @V305731 01014000 CALL DMKFRET RELEASE STORAGE FOR IOBLOK @V305731 01015000 SR R10,R10 CLEAR IOBLOK POINTER @V305731 01016000 BR R7 RETURN TO IN LINE CODE @V305731 01017000 SPACE 1 01018000 FRETIOER EQU * RELEASE IOERBLOK STORAGE @V305731 01019000 L R1,IOBIOER GET POINTER TO IOERBLOK @V305731 01020000 LTR R1,R1 IS POINTER ZERO ? @V305731 01021000 BZR R3 YES, RETURN @V305731 01022000 LA R0,IOERSIZE GET SIZE OF IOERBLOK @V305731 01023000 AH R0,IOEREXT-IOERBLOK(,R1) EXTENSION TO IOERBLOK @V305731 01024000 CALL DMKFRET RELEASE STORAGE FOR IOERBLOK @V305731 01025000 SR R0,R0 CLEAR REGISTER 0 @V305731 01026000 ST R0,IOBIOER CLEAR POINTER TO IOERBLOK @V305731 01027000 BR R3 RETURN @V305731 01028000 SPACE 1 01029000 CRTMORE EQU * SET UP CCWS FOR MORE STATE @V305731 01030000 BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 01031000 MVI NICSTAT,NICMORE+NICNTRL INDICATE MORE & CONTROL @V305731 01032000 MVI CONLABEL,RTNSTMOR SET RETURN TO MORE SECTION @V305731 01033000 LA R1,WRT77CCW GET ADDRESS OF MORE CCWS @V305731 01034000 BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 01035000 MVI CONCCW1+7,MOR77L+4 SET MORE CCW COUNT @V305731 01036000 LA R1,MOR77L GET LENGTH OF MORE DATA @V305731 01037000 LA R2,MOR3277 GET ADDRESS OF MORE DATA @V305731 01038000 BAL R7,DATAMOVE MOVE DATA INTO CONTASK BUFFER @V305731 01039000 BR R3 RETURN @V305731 01040000 SPACE 1 01041000 CRTHOLD EQU * SET UP CCWS FOR HOLD STATE @V305731 01042000 BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 01043000 MVI NICSTAT,NICHOLD+NICNTRL INDICATE HOLD & CONTROL @V305731 01044000 MVI CONLABEL,RTNNOCTL SET RETURN TO NEXT CONTASK @V305731 01045000 LA R1,WRT77CCW GET ADDRESS OF HOLD CCWS @V305731 01046000 BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 01047000 MVI CONCCW1+7,HLD77L+4 SET HOLD CCW COUNT @V305731 01048000 LA R1,HLD77L GET LENGTH OF HOLD DATA @V305731 01049000 LA R2,HLD3277 GET ADDRESS OF HOLD DATA @V305731 01050000 BAL R7,DATAMOVE MOVE DATA INTO CONTASK BUFFER @V305731 01051000 BR R3 RETURN @V305731 01052000 SPACE 1 01053000 WRITSECT EQU * HANDLE WRITE REQUEST @V305731 01054000 ST R3,TEMPR3 SAVE RETURN ADDRESS @V305731 01055000 LH R3,CONCNT GET DATA COUNT @V305731 01056000 LA R1,WRT77CCW GET ADDRESS OF WRITE CCW @V305731 01057000 BAL R7,SETUPCCW SET UP CCWS FOR BISYNC LINE @V305731 01058000 MVC CONCCW4+1(3),SYNCP MOVE BISYNC HEADER INTO DATA @V305731 01059000 MVC CONCCW4+4(4),WRT77D SET DATA @V305731 01060000 LA R3,WRT77DL+3(R3) TOTAL DATA COUNT @V305731 01061000 STH R3,CONCCW1+6 SAVE COUNT OF WRITE DATA @V305731 01062000 SR R3,R3 CLEAR @V305731 01063000 TM NICTMCD,NICSIO IS WRITING TO INPUT AREA FLAG ON @VM03094 01064000 BZ WRITAPL NO, BYPASS LINE COORDINATE @VM03094 01065000 IC R3,BSCLINE GET LINE COORDINATE @VM03094 01066000 B WRITDIAG GET BUFFER ADDRESS FOR LINE @VM03094 01067000 WRITAPL EQU * ... @VM03094 01068000 IC R3,NICCORD GET LINE POSITION @V305731 01069000 ALR R4,R3 UPDATE LINE COORDINATE @V305731 01070000 STC R4,NICCORD SAVE NEXT LINE POSITION @V305731 01071000 WRITDIAG EQU * GET BUFFER ADDRESS FOR LINE @VM03094 01072000 SLL R3,1 TIMES 2 @V305731 01073000 LH R3,TBL3277(R3) GET BUFFER ADDRESS @V305731 01074000 STH R3,CONCCW4+6 SET BUFFER ADDRESS @V305731 01075000 TM CONPARM,ALARM ALARM WITH MESSAGE ?? @V305731 01076000 BZ LOADR3 NO, RETURN TO IN LINE CODE @V305731 01077000 OI NICFLAG,NICALRM SET ALARM MESSAGE INDICATOR @V305731 01078000 OI CONCCW4+4,WCC5 SET ALARM BIT @V305731 01079000 LOADR3 EQU * SET UP FOR RETURN @V305731 01080000 MVI CONLABEL,RTNRETBF SET RETURN TO WRITE FINISH @V305731 01081000 L R3,TEMPR3 RESTORE RETURN ADDRESS @V305731 01082000 BR R3 RETURN @V305731 01083000 SPACE 01084000 READSUB EQU * SET UP CCWS FOR READ STATE @V305731 01085000 LR R2,R6 SAVE CONTASK POINTER @V305731 01086000 BAL R7,CTLTASK GET STORAGE FOR CONTROL CONTASK @V305731 01087000 LA R1,WRT77CCW GET CCWS FOR READ STATE @V305731 01088000 BAL R7,SETUPCCW SET UP CCWS FOR BISYNC RESPONSE @V305731 01089000 LR R15,R2 GET ORIGINAL CONTASK POINTER @V305731 01090000 MVI CONCCW1+7,CPR77L+4 SET READ CCW COUNT @V305731 01091000 LA R1,CPR77L GET LENGTH OF READ DATA @V305731 01092000 LA R2,CPR3277 GET ADDRESS OF READ DATA @V305731 01093000 BAL R7,DATAMOVE MOVE DATA INTO BUFFER AREA @V305731 01094000 TM CONPARM-CONTASK(R15),INHIBIT NON-DISPLAY DATA @V305731 01095000 BZ BYPATTR NO, BYPASS SETTING ATTRIBUTE BYTE@VM03134 01096000 MVI CONDATA+1,ATTR457 SET NON-DISPLAY ATTRIBUTE BYTE@V305731 01097000 BYPATTR EQU * CHECK FOR VIRTUAL MACHINE @VM03134 01098000 TM CONPARM-CONTASK(R15),VMGENIO A VIRTUAL MACH READ@V305731 01099000 BZ BYPVMRD NO, BYPASS VM READ DATA @VM03134 01100000 MVC CONDATA+7(7),VMREADS MOVE VM READ INTO BUFFER @V305731 01101000 BYPVMRD EQU * SETUP SCREEN STATUS @VM03134 01102000 MVI NICSTAT,NICREAD+NICNTRL INDICATE READ & CONTROL @V305731 01103000 OI CONSTAT-CONTASK(R15),CONESCP CONTASK PROCESSED @V305731 01104000 MVI CONLABEL,RTNNOCTL SET RETURN TO NEXT CONTASK @V305731 01105000 BR R3 RETURN @V305731 01106000 SPACE 2 01107000 TRANSTST EQU * TRANSLATE & TEST FOR COMP. CHAR. @V305798 01108000 CL R3,F256 LESS THAN 256 ? @V305798 01109000 BNH APLTST YES, ONLY TRANSLATE & TEST ONCE @V305798 01110000 TRT 0(256,R4),0(R7) TRANSLATE & TEST DATA @V305798 01111000 BNZ APLMOVE FOUND COMP. CHAR. - MOVE DATA @V305798 01112000 MVC 0(256,R5),0(R4) MOVE DATA TO NEW BUFFER @V305798 01113000 LA R4,256(,R4) UPDATE CURRENT CONTASK BUFFER PTR@V305798 01114000 LA R5,256(,R5) UPDATE NEW CONTASK BUFFER PTR @V305798 01115000 S R3,F256 DECREMENT DATA COUNT @V305798 01116000 BNPR R10 IF ZERO, RETURN TO IN LINE CODE @VM03040 01117000 B TRANSTST CONTINUE TRANSLATING DATA @V305798 01118000 APLMOVE EQU * MOVE DATA INTO NEW CONTASK BUFFER@V305798 01119000 SR R1,R4 GET LENGTH OF DATA @V305798 01120000 EX R1,MOVEAPL MOVE DATA INTO NEW BUFFER @VM03040 01121000 AR R5,R1 UPDATE NEW BUFFER POINTER @V305798 01122000 AR R4,R1 UPDATE CURRENT BUFFER POINTER @V305798 01123000 B 4(R10) MOVE FAKE ATTR CHAR. INTO BUFFER @V305798 01124000 SPACE 01125000 APLTST EQU * TRANSLATE & TEST FOR COMP. CHAR. @V305798 01126000 BCTR R3,R0 SUBSTRACT ONE - EX INSTR. @VM03040 01127000 EX R3,TRTTST TRANSLATE & TEST DATA @VM03040 01128000 LA R3,1(,R3) UPDATE COUNTER - EX INSTR. @VM03040 01129000 BNZ APLMOVE FOUND COMPOUND CHARACTER @V305798 01130000 BCTR R3,0 SUBTRACT ONE FOR EXECUTE @VA09182 01131100 EX R3,MOVEAPL MOVE DATA TO BUFFER @VA09182 01131200 LA R3,1(,R3) RESET BYTE COUNT @VA09182 01131300 BR R10 RETURN TO IN LINE CODE @V305798 01132000 SPACE 1 01133000 SELECTCW EQU * SET UP CCWS TO SELECT A STATION @V305731 01134000 TM RDEVFTR,FTRDIAL DIAL-UP FEATURE INDICATED? @V346931 01135100 BNO NONSW NO, DO SELECTION OPERATION @V346931 01135200 MVC BSCSCCW1(THREECCW),INITBID INITIAL LINE BID CCWS@V346931 01135300 B JOINSEL GO SET UP RESPONSE BUFFER @V346931 01135400 NONSW EQU * NEXT DO SELECTION OPERATION @V346931 01135500 MVC BSCSCCW1(THREECCW),WRITSEL ADDRESSING CCW STRING@V346931 01135600 ICM R1,10,NICSELT GET ADDRESSING CHARACTERS @V305731 01138000 ICM R1,5,NICSELT SET UP DOUBLE ADDRESSING CHARS. @V305731 01139000 STCM R1,15,BSCSEL SAVE ADDRESS OF REMOTE STATION @V305731 01140000 MVI BSCSEL+4,ENQ SET UP ADDRESSING ENTRY @V305731 01141000 LA R1,BSCSEL GET ADDR OF SELECTION ENTRY @V346931 01141100 STCM R1,B'0111',BSCSCCW2+1 INTO CCW @V346931 01141200 JOINSEL EQU * SET UP READ RESPONSE BUFFER @V346931 01141300 LA R1,BSCRESP GET RESPONSE BUFFER POINTER @V305731 01142000 STCM R1,7,BSCSCCW3+1 SAVE ADDRESS IN CCW @V305731 01143000 XC BSCRESP(2),BSCRESP CLEAR RESPONSE BUFFER @V305731 01144000 MVC BSCRCVD(4),RGFACK0 EXPECTED RECVD & SEND RESP. @V305731 01145000 MVC BSCSPTR(4),IOBCAW SAVE PTR. TO WRITE CCW STRING @V305731 01146000 MVI IOBMISC2,IBBSELA SET SELECTION INDICATOR @V305731 01147000 LA R1,BSCSCCW1 GET START OF SELECTION CCW STRING@V305731 01148000 ST R1,IOBCAW SET UP CAW FIELD @V305731 01149000 BR R3 RETURN @V305731 01150000 SPACE 1 01151000 GPOLLCW EQU * SET UP CCWS FOR GENERAL POLLING @V305731 01152000 L R9,RDEVNICL GET ADDR OF CONTROL UNIT NICBLOK @V305731 01153000 TM RDEVFTR,FTRDIAL DIAL-UP FEATURE INDICATED? @V346931 01153100 BNO POLLCONT NO, DO GENERAL POLLING OPERATION @V346931 01153200 MVC BSCPCCW1(TWOCCW),S3275EOT WRITE EOT / READ @V346931 01153300 LA R1,BSCRESP ADDRESS OF RESPONSE BUFFER @V346931 01153400 STCM R1,B'0111',BSCPCCW2+1 INTO CCW @V346931 01153500 B JOINPOLL @V346931 01153600 POLLCONT EQU * SET UP READ BUFFER @V346931 01153700 MVI IOBMISC2,IBBREAD SET FLAG FOR GENERAL POLLING @V305731 01154000 MVC BSCPCCW1(8*4),POLCCW GENERAL POLLING CCW STRING @V305731 01155000 LA R1,BSCREAD GET READ BUFFER ADDRESS @V305731 01156000 STCM R1,7,BSCPCCW4+1 SAVE ADDRESS OF READ BUFFER @V305731 01157000 LA R1,BSCSEL GET ADDRESS OF POLLING ENTRY @V305731 01158000 STCM R1,7,BSCPCCW2+1 SAVE ADDRESS OF POLL ENTRY @V305731 01159000 ICM R1,10,NICPOLL GET POLLING CHARACTERS @V305731 01160000 ICM R1,5,NICPOLL SET UP DOUBLE POLLING CHARACTERS @V305731 01161000 STCM R1,15,BSCSEL SAVE ADDRESS OF REMOTE STATION @V305731 01162000 MVC BSCSEL+4(3),RGFINDEQ SET UP ENQ, INDEX VAL & EOT@VA03474 01163100 JOINPOLL EQU * CLEAR READ BUFFER @V346931 01163150 XC BSCRESP(256),BSCRESP CLEAR READ BUFFER @V346931 01164000 XC BSCRESP+256(L'BSCRESP+L'BSCREAD-256),BSCRESP+256 X01165000 THIS SUPPORT CODE APPLIES TO LINE ABOVE @V346931 01165500 MVC BSCRCVD(4),RGFACK0 SET RECEIVING & SENDING RESP @V305731 01166000 LA R1,BSCPCCW1 GET START OF POLLING CCW STRING @V305731 01167000 BR R3 RETURN @V305731 01168000 EJECT 01169000 * THE EXECUTE INSTRUCTION USED THE FOLLOWING INSTRUCTIONS 01170000 TROPUT TR 0(*-*,R2),0(R7) EXECUTED TRANSLATE OUTPUT @V305731 01171000 TRTTST TRT 0(*-*,R4),0(R7) TRANSLATE THE COMPOUND CHARACTER@V305798 01172000 MOVEAPL MVC 0(*-*,R5),0(R4) GET REMAINING CHARACTERS @V305798 01173000 SNGLCHAR EQU 256 OFFSET TO SINGLE CHARACTER XLATE TABLE @V387398 01173100 TXTTRAN TR 0(*-*,R1),SNGLCHAR(R7) TRANSLATE TEXT OUTPUT @V387398 01173200 SPACE 1 01174000 * STORAGE FOR DATA LINK CONTROL CHARACTERS 01175000 RGFEOT DC AL1(EOT) END OF TRANSMISSION CHARACTER @V305731 01176000 RGFNAK DC AL1(NAK) NEGATIVE RESPONSE CHARACTER @V305731 01177000 RGFENQ DC AL1(ENQ) INQUIRY CHARACTER @V305731 01178000 RGFSONL DC AL1(SOH,X'6C') HEADER FOR NON-TEXT MSG. (SOH %) @V305731 01179000 RGFWACK DC AL2(WACK) WAIT ACKNOWLEDGE CHARACTER @V305731 01180000 RGFRVI DC AL2(RVI) REVERSE INTERRUPT CHARACTER @V305731 01181000 RGFACK0 DC AL2(ACK0) POSITIVE ACKNOWLEDGE 0 CHARACTER @V305731 01182000 RGFACK1 DC AL2(ACK1) POSITIVE ACKNOWLEDGE 1 CHARACTER @V305731 01183000 SPACE 1 01184000 * CCWS FOR POLLING AND SELECTING REMOTE STATIONS 01185000 DS 0D @V305731 01186000 WRITSEL DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V305731 01187000 DC X'01',AL3(0),AL1(SILI+CC,X'03'),AL2(5) @V305731 01188000 DC X'02',AL3(0),AL1(SILI,X'05'),AL2(2) @V305731 01189000 SPACE 01190000 POLCCW DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V305731 01191000 DC X'09',AL3(0),AL1(SILI+CC,X'03'),AL2(7) @VA03474 01192100 DC X'03',AL3(0),AL1(SILI,X'07'),AL2(1) @V305731 01193000 DC X'02',AL3(0),AL1(SILI,X'0A'),AL2(BSCSIZE1) @V305731 01194000 SPACE 01195000 SPACE 2 01195100 * PSUEDO POLLING CCWS FOR 3275 DIAL OPERATION @V346931 01195200 S3275EOT DC X'01',AL3(RGFEOT),AL1(SILI+CC,X'02'),AL2(1) @V346931 01195300 DC X'02',AL3(0),AL1(SILI,X'0D'),AL2(2) @V346931 01195400 TWOCCW EQU (8*2) LENGTH OF TWO CCWS @V346931 01195500 SPACE 1 01195600 TICCCW DC X'08',AL3(0),AL1(SILI,X'00'),AL2(1) @V305731 01196000 WRT77RUN DC X'00',AL3(RUN3277+1),AL1(SILI+CC,X'10') @VA13944 01197100 DC AL2(RUN77L-1) @VA08995 01197200 SPACE 1 01198000 * 3270 REMOTE DATA AND STATUS MESSAGES 01199000 WRT77D DC AL1(WCC6,SBA,0,0) @V305731 01200000 WRT77DL EQU *-WRT77D @V305731 01201000 SPACE 01202000 HLD3277 DC AL1(WCC3,SBA,X'5D',X'6B',SF,ATTR2) @VA07171 01203100 HLDSTAT DC CL20'HOLDING' @V305731 01204000 HLD77L EQU *-HLD3277 @V305731 01205000 SPACE 01206000 MOR3277 DC AL1(WCC3,SBA,X'5D',X'6B',SF,ATTR2) @VA07171 01207100 MORSTAT DC CL20'MORE...' @V305731 01208000 MOR77L EQU *-MOR3277 @V305731 01209000 SPACE 01210000 RUN3277 DC AL1(WCC6,SBA,X'5B',X'5F',SF,ATTR7) @V305731 01211000 DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 01212000 RUNSTAT DC CL20'RUNNING',AL1(ETX) @V305731 01213000 RUN77L EQU *-RUN3277 @V305731 01214000 SPACE 01215000 CPR3277 DC AL1(WCC6,SBA,X'5B',X'5F',SF,ATTR7) @V305731 01216000 DC AL1(SBA,X'5D',X'6B',SF,ATTR2) @V305731 01217000 DC CL20'CP READ' @V305731 01218000 CPR77L EQU *-CPR3277 @V305731 01219000 SPACE 01220000 VMREADS DC CL7'VM READ' @V305731 01221000 EJECT 01222000 SPACE 01223000 * RETURN INDEX VALUE FOR 3270 REMOTE SUPPORT 01224000 RTNNOCTL EQU X'00' RETURN TO GET NEXT CONTASK @V305731 01225000 RTNSRTRD EQU X'04' RETURN TO READ SECTION @V305731 01226000 RTNLGTST EQU X'08' RETURN TO LOGOFF USER @V305731 01227000 RTNRFCFM EQU X'0C' RETURN TO CONS. FUNCTION PROCESS @V305731 01228000 RTNSTMOR EQU X'10' RETURN TO MORE SECTION @V305731 01229000 RTNSETRJ EQU X'14' RETURN TO REJECT SECTION @V305731 01230000 RTNCPNAT EQU X'18' RETURN TO WRITE STATUS SECTION @V305731 01231000 RTNLOGOF EQU X'1C' RETURN TO LOGOFF USER SECTION @V305731 01232000 RTNBLDVM EQU X'20' RETURN TO BUILD VMBLOK SECTION @V305731 01233000 RTNFMTDN EQU X'24' RETURN TO FORMATS FINISH SECTION @V305731 01234000 RTNRETBF EQU X'28' RETURN TO WRITE COMPLETED SECTION@V305731 01235000 RTNRDEXT EQU X'2C' RETURN TO RELEASE READ BUFFER @V305731 01236000 RTNRVIRP EQU X'30' RETURN TO RVI RESPONSE SECTION @V305731 01237000 SPACE 1 01238000 * READ/WRITE OPERATION TYPES 01239000 IBBSELA EQU X'80' ADDRESSING/SELECTING A STATION @V305731 01240000 IBBWRITE EQU X'40' WRITE DATA TO A REMOTE STATION @V305731 01241000 IBBREAD EQU X'20' GENERAL POLLING OF STATIONS @V305731 01242000 IBBSPOLL EQU X'10' SPECIFIC POLLING TO A STATION @V305731 01243000 SPACE 1 01244000 * DATA-LINK CONTROL CHARACTERS FOR 3270 REMOTE SYSTEM 01245000 SOH EQU X'01' START OF HEADING @V305731 01246000 STX EQU X'02' START OF TEXT @V305731 01247000 ETX EQU X'03' END OF TEXT @V305731 01248000 ETB EQU X'26' END OF BLOCK @V305731 01249000 ESC EQU X'27' ESCAPE @V305731 01250000 EOT EQU X'37' END OF TRANSMISSION @V305731 01251000 ENQ EQU X'2D' ENQUIRY @V305731 01252000 NAK EQU X'3D' NEGATIVE ACKNOWLEDGMENT @V305731 01253000 WACK EQU X'106B' WAIT BEFORE TRANSMIT @V305731 01254000 RVI EQU X'107C' REVERSE INTERRUPT @V305731 01255000 ACK0 EQU X'1070' EVEN ACKNOWLEDGE @V305731 01256000 ACK1 EQU X'1061' ODD ACKNOWLEDGE @V305731 01257000 SPACE 01258000 * 3270 REMOTE SYSTEM COMMAND CODES 01259000 WRTCMD EQU X'F1' WRITE COMMAND CODE @V305731 01260000 EWRTCMD EQU X'F5' ERASE/WRITE COMMAND CODE @V305731 01261000 COPYCMD EQU X'F7' COPY COMMAND CODE @V305731 01262000 SPACE 1 01263000 * 3270 DISPLAY STATION ORDERS 01264000 SF EQU X'1D' START OF FIELD CONTROL @V305731 01265000 SBA EQU X'11' SET BUFFER ADDRESS @V305731 01266000 IC EQU X'13' INSERT CURSOR @V305731 01267000 RA EQU X'3C' REPEAT TO ADDRESS (CHAR) @V305731 01268000 EUA EQU X'12' ERASE UNPROTECTED TO ADDRESS @V305731 01269000 SPACE 1 01270000 * 3270 WRITE CONTROL CHARACTERS 01271000 WCC3 EQU X'C2' RESTORE KEYBOARD @VA07171 01271400 WCC4 EQU X'C6' RESTORE KEYBOARD, ALARM @VA07171 01271800 WCC5 EQU X'C5' WRITE CONTROL CHAR TO SOUND ALARM@VM03116 01272000 WCC6 EQU X'C3' W.C.C. TO RESTORE KEYBOARD @VM03116 01273000 WCC56 EQU X'C7' W.C.C. TO SOUND ALARM & RES. KEY.@VM03116 01274000 WCC8 EQU X'F8' W.C.C. TO PTR FOR 80-CHAR LINE @VM03116 01275000 ATTR2 EQU X'60' PROTECTED ATTRIBUTE CHARACTER @VM03116 01276000 ATTR7 EQU X'C1' MODIFIED DATA TAG ATTRIBUTE CHAR @VM03116 01277000 ATTR457 EQU X'4D' PROTECTED, NONDISPLAY & MOD. DATA@VM03116 01278000 SPACE 01279000 * TABLE OF LINE ADDRESS FOR 3277 DISPLAY STATION 01280000 TBL3277 DS 0D @V305731 01281000 DC X'4040C150C260C3F0C540C650C760' @V305731 01282000 DC X'C8F04A404B504C604DF04F405050' @V305731 01283000 DC X'D160D2F0D440D550D660D7F0D940' @V305731 01284000 DC X'5A505B605CF0' @V305731 01285000 SPACE 01286000 * MAINTENANCE AREA 01287000 RGFMAINT DC 8CL6'DMKRGB' THIS AREA IS USED FOR UPDATES @VA06170 01288000 EJECT 01289000 LTORG @V305731 01290000 EJECT 01291000 COPY NETWORK @V305731 01292000 EJECT 01293000 COPY BSCBLOKS @V305731 01294000 EJECT 01295000 COPY TIMER @V305731 01296000 SPACE 2 01297000 EJECT 01303000 COPY DEVTYPES @V305731 01304000 EJECT 01305000 COPY EQU @V305731 01306000 EJECT 01307000 COPY VBLOKS @V305731 01308000 EJECT 01309000 COPY RBLOKS @V305731 01310000 EJECT 01311000 COPY CONBUF @V305731 01312000 EJECT 01313000 COPY IOBLOKS @V305731 01314000 EJECT 01315000 COPY IOER @V305731 01316000 EJECT 01317000 COPY VMBLOK @V305731 01318000 EJECT 01319000 COPY SAVE @V305731 01320000 EJECT 01321000 PSA @V305731 01322000 EJECT 01323000 END 01324000