RGF TITLE 'DMKRGF (CP) VM/370 - RELEASE 6' @VA13123 00010000
ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00020000
COPY OPTIONS @V305731 00030000
COPY LOCAL @V305731 00040000
*********************************************************************** 00050000
* 00060000
* MODULE NAME - DMKRGF 00070000
* 00080000
* DESCRIPTIVE NAME - 00090000
* 00100000
* STATUS - RELEASE 6 00110000
* 00120000
* FUNCTION - PROCESS THE INPUT BUFFER IN THE TRQBLOK AND RETURN TO THE 00130000
* APPROPRIATE SUBROUTINE IN DMKRGA 00140000
* 00150000
* NOTES - SEE BELOW 00160000
* 00170000
* THIS MODULE IS CREATED AS AN EXTENSION OF MODULE DMKRGA. THE 00180000
* REGISTER USAGE MUST BE THE SAME AS REGISTER USAGE IN DMKRGA. 00190000
* 00200000
* REGISTER CONVENTIONS - SYMBOLIC REFERENCES TO REGISTERS ARE OF 00210000
* OF THE FORM "RX" WHERE X IS A NUMBER 00220000
* RANGING FROM 0 TO 15 (SEE EQU COPY) 00230000
* 00240000
* PATCH LABEL - NONE 00250000
* 00260000
* MODULE TYPE - PROCEDURE 00270000
* 00280000
* PROCESSOR - ASSEMBLER F 00290000
* 00300000
* ATTRIBUTES - RE-ENTERABLE, RESIDENT, CALLED VIA BAL 00310000
* 00320000
* ENTRY POINT - 00330000
* DMKRGFEN - MAIN ENTRY POINT FROM DMKRGA 00340000
* 00350000
* PURPOSE - SEE SAME ENTRY POINT PROLOG IN DESCRIPTIVE COMMENTS 00360000
* PRECEEDING THE RESPECTIVE ENTRY POINT 00370000
* 00380000
* LINKAGE - SEE SAME ENTRY POINT PROLOG IN DESCRIPTIVE COMMENTS 00390000
* PRECEEDING THE RESPECTIVE ENTRY POINT 00400000
* 00410000
* INPUT - SEE SAME ENTRY POINT PROLOG IN DESCRIPTIVE COMMENTS 00420000
* PRECEEDING THE RESPECTIVE ENTRY POINT 00430000
* 00440000
* OUTPUT - SEE SAME ENTRY POINT PROLOG IN DESCRIPTIVE COMMENTS 00450000
* PRECEEDING THE RESPECTIVE ENTRY POINT 00460000
* 00470000
* EXIT NORMAL - SEE SAME ENTRY POINT PROLOG IN DESCRIPTIVE COMMENTS 00480000
* PRECEEDING THE RESPECTIVE ENTRY POINT 00490000
* 00500000
* EXIT ERROR - SEE SAME ENTRY POINT PROLOG IN DESCRIPTIVE COMMENTS 00510000
* PRECEEDING THE RESPECTIVE ENTRY POINT 00520000
* 00530000
* EXTERNAL REFERENCES - SEE BELOW 00540000
* 00550000
* ROUTINES - 00560000
* DMKCNSED - TO EDIT THE INPUT DATA 00570000
* DMKRGAFR - RETURN POINT IN DMKRGA 00580000
* DMKRGA - BASE ADDRESS FOR RESTORING REGISTERS 00590000
* 00600000
* 00610000
* 00620000
* DATA AREAS - 00630000
* NONE 00640000
* 00650000
* ENTRY DEFINITIONS - 00660000
* NONE 00670000
* 00680000
* CONTROL BLOCKS - 00690000
* 00700000
* TRQBLOK - TIMER REQUEST BLOCK 00710000
* BSCBLOK - BSC LINE WORK AREA 00720000
* RDEVBLOK - REAL DEVICE BLOCK 00730000
* NICBLOK - NETWORK CONTROL BLOCK 00740000
* VMBLOK - VIRTUAL MACHINE BLOCK 00750000
* CONTASK - CONSOLE I/O PACKAGE 00760000
* IOBLOK - I/O TASK CONTROL BLOCK 00770000
* 00780000
* TABLES - 00790000
* 00800000
* DMKTBLTI - 3270 TEXT COMPOUND CHARACTER TRANSLATE TABLE 00810000
* DMKTBLZI - 3270 APL COMPOUND CHARACTER TRANSLATE TABLE 00820000
* 00830000
* MACROS - 00840000
* ABEND - GENERATE ABEND INTERFACE 00850000
* CALL - GENERATE CALL LINKAGE 00860000
* CHARGE - GENERATE CHARGE SWITCH CODE 00870000
* SWTCHVM - GENERATE VMBLOK SWITCH CODE 00880000
* PSA - GENERATE PREFIX STORAGE AREA DSECT 00890000
* 00900000
* CHANGE ACTIVITY - REFER TO THE UPDATE-LOG AS PRODUCED BY THE CMS 00910000
* UPDATE COMMAND PRECEEDING THIS LISTING 00920000
* 00930000
* ABEND CONDITIONS - 00940000
* RGF003 - INVALID ENTRY OFFSET PASSED BY DMKRGA 00950000
* 00960000
* ERROR MESSAGES -NONE 00970000
* 00980000
* RESPONSES - NONE 00990000
* 01000000
* GENERAL COMMENTS - THE PROCESSING ROUTINES ARE ENTERED VIA A BRANCH 01010000
* TABLE INDEX THAT IS SET UP BY THE CALLING MODULE 01020000
* DMKRGA. THE FUNCTIONS RETURN TO THE CALLER AT THE 01030000
* LABEL DMKRGAFR AFTER SETTING A BRANCH TABLE INDEX 01040000
* INTO GPR 14 01050000
* 01060000
*********************************************************************** 01070000
SPACE 2 01080000
DMKRGF START , @VA13123 01090000
SPACE 1 01100000
USING PSA,R0 @V305731 01110000
USING TRQBLOK,R4 @V305731 01120000
USING CONTASK,R6 @V305731 01130000
USING BSCBLOK,R5 @V305731 01140000
USING RDEVBLOK,R8 @V305731 01150000
USING IOBLOK,R10 @V305731 01160000
USING VMBLOK,R11 @V305731 01170000
USING NICBLOK,R9 @V305731 01180000
SPACE 1 01190000
EXTRN DMKCNSED @VA13123 01200000
EXTRN DMKTBMTI,DMKTBMZI @V387398 01210000
EXTRN DMKRGA,DMKRGACR @VA13123 01220000
SPACE 1 01230000
ENTRY DMKRGFEN @VA13123 01240000
EJECT 01250000
*********************************************************************** 01260000
* 01270000
* ENTRY POINT NAME - DMKRGFEN 01280000
* 01290000
* DESCRIPTIVE NAME - 01300000
* 01310000
* FUNCTION - MAIN ENTRY POINT FROM DMKRGA 01320000
* 01330000
* NOTES - SEE BELOW 01340000
* 01350000
* REGISTER USAGE - 01360000
* GPR0 - LENGTH OF FIELD 01370000
* GPR1 - ADDRESS OF FIELDS 01380000
* GPR0 - GPR3 WORK REGISTERS FOR BUFFERS AND DSECTS 01390000
* GPR4 - ADDRESS OF TRQBLOK 01400000
* GPR5 - ADDRESS OF BSCBLOK FOR THE LINE 01410000
* GPR6 - ADDRESS OF CONTASK 01420000
* GPR7 - BAL AND WORK REGISTER 01430000
* GPR8 - ADDRESS OF RDEVBLOK 01440000
* GPR9 - ADDRESS OF NICBLOK FOR THE TERMINAL 01450000
* GPR10 - IOBLOK 01460000
* GPR11 - VMBLOK OF CALLER 01470000
* GPR12 - BASE OF MODULE 01480000
* GPR13 - NOT USED 01490000
* GPR14 R15 - LINKAGE REGISTERS 01500000
* 01510000
* PURPOSE - SEE FUNCTION 01520000
* 01530000
* LINKAGE - SVC 01540000
* 01550000
* INPUT - 01560000
* GPR1 - ENDING ADDRESS OF INPUT DATA 01570000
* GPR4 - BEGINNING CHARACTER IN TEXT 01580000
* GPR5 - ADDRESS OF BSCBLOK FOR THE LINE 01590000
* GPR8 - ADDRESS OF RDEVBLOK 01600000
* GPR9 - ADDRESS OF NICBLOK FOR THE TERMINAL 01610000
* GPR10 - IOBLOK 01620000
* GPR11 - VMBLOK OF CALLER 01630000
* GPR12 - BASE OF MODULE 01640000
* GPR13 - NOT USED 01650000
* GPR14 - VECTOR TABLE OFFSET 01660000
* 01670000
* OUTPUT - SEE EXIT NORMAL, EXIT ERROR 01680000
* 01690000
* EXIT NORMAL - 01700000
* GPR14 CONTAINS VECTOR TABLE OFFSET FOR DMKRGA 01710000
* SEE EQUATES STARTING AT LABEL RTRGAEDN FOR VALUES 01720000
* 01730000
* EXIT ERROR - NONE 01740000
* 01750000
USING DMKRGF,R12 @VA13123 01760000
DMKRGFEN DS 0D @VA13123 01770000
USING *,R12 SET ENTRY ADDRESSABILITY @VA13123 01780000
L R12,RGFBASE SET UP ADDRESSABILITY @VA13123 01790000
USING DMKRGF,R12 @VA13123 01800000
CLM R14,B'1111',NDXRGFMX VALID INDEX? @VA13123 01810000
BH RGF1 NO - GO ABEND @VA13123 01820000
LTR R14,R14 VALID INDEX? @VA13123 01830000
BNM SUBROUT(R14) YES - GO TO APPROPRIATE ROUTIN @VA13123 01840000
ABEND 1 NO - GO ABEND @VA13123 01850000
SUBROUT DS 0H @VA13123 01860000
B FOUND @VA13123 01870000
B SECOND @VA13123 01880000
B CHECKEY @VA13123 01890000
B DATACNT @VA13123 01900000
NDXRGFMX DC A(*-SUBROUT) BRANCH TABLE LENGTH @VA13123 01910000
EJECT 01920000
*. 01930000
* SUBROUTINE NAME - 01940000
* FOUND 01950000
* 01960000
* FUNCTION = 01970000
* IF 'NOT ACCEPTED' OR 'CONTROL' MODE, RETURN TO DMKRGA TO SEND 01980000
* AN RVI RESPONSE 01990000
* 02000000
* IF A LOGON, RETURN TO DMKRGA TO START THE LOGON PROCESS 02010000
* 02020000
* OBTAIN A READ BUFFER, AND INITIALIZE THE REGISTERS FOR THE 02030000
* TRANSLATE AND COPY PROCESS. 02040000
* 02050000
* CONTINUE TO SUBROUTINE 'SECOND' 02060000
* 02070000
SPACE 2 02080000
FOUND DS 0H PUT INPUT DATA INTO READ BUFFER @VA13123 02090000
NI IOBMISC2,X'FF'-IBBSPOLL TURN SPOLL FLAG OFF @VA08730 02100000
LR R2,R1 GET ENDING ADDRESS OF DATA @V305731 02110000
L R6,NICQPNT GET CONTASK POINTER @V305731 02120000
TM BSCFLAG,BSCCOPY IS THIS A COPY FUNCTION ? @V305731 02130000
BO BYPDPLY YES, BYPASS DISPLAY CHECKS @V305731 02140000
TM NICSTAT,NICCPNA+NICNTRL NOT ACCEPTED OR CONTROL @V305731 02150000
BNZ RVIRESP YES, SEND RVI RESPONSE - IGNORE @V305731 02160000
L R1,ASYSVM GET SYSTEM VMBLOK POINTER @V305731 02170000
CL R1,NICUSER IS THIS USER LOGON ? @V305731 02180000
BE LOGUSER NO, GO LOGON USER @V305731 02190000
OI NICSTAT,NICNTRL CRT IS IN CONTROL MODE @V305731 02200000
BYPDPLY DS 0H ANALYZE DATA IN READ BUFFER @VA13123 02210000
CLI 0(R2),ETB IS ENDING CHARACTER ETB @VM03043 02220000
BNE BYPETB NO, BYPASS SETTING ETB INDICATOR @VM03133 02230000
OI BSCFLAG1,BSCETB SET ETB INDICATOR @VM03043 02240000
BYPETB DS 0H GET STORAGE FOR READ BUFFER @VA13123 02250000
LA R0,BUFSIZE GET READ BUFFER SIZE @V305731 02260000
CALL DMKFREE GET STORAGE FOR BUFFER @V305731 02270000
ST R1,BSCRPTR SAVE READ BUFFER POINTER @VA08730 02280000
XC 0(BUFINLTH+6,R1),0(R1) CLEAR READ BUFFER AREA @V305731 02290000
LA R3,BSCREAD+1 GET POINTER TO STX CONTROL CHAR. @V305731 02300000
CLI BSCREAD,X'05' IS THIS THE INDEX BYTE @V305731 02310000
BE BYPADDR YES, BYPASS GETTING NEW ADDRESS @VM03133 02320000
S R3,F1 GET POINTER TO STX CONTROL CHAR @V305731 02330000
BYPADDR DS 0H GET SIZE OF INPUT DATA @VA13123 02340000
SLR R2,R3 GET NUMBER OF INPUT BYTES @V305731 02350000
USING BUFFER,R3 ADDRESSABILITY FOR READ BUFFER @V305731 02360000
LA R3,HDRNSW LENGTH OF NON SW. HEADER @V346931 02370000
TM RDEVFTR,FTRDIAL IS DIAL UP FEATURE INDICATED?@V346931 02380000
BNO BYSWHD NO, BYPASS SWITCHED HEADER @V346931 02390000
LA R3,HDRSW LENGTH OF SW. HEADER @V346931 02400000
BYSWHD DS 0H POINT PAST HEADER TO DATA @VA13123 02410000
SR R2,R3 SUBTRACT LENGTH OF HEADER @V346931 02420000
AR R3,R4 POINT PAST HEADER @V346931 02430000
LTR R2,R2 IS BYTE COUNT ZERO ? @V305731 02440000
BNP CHECKEY YES, BYPASS MOVING DATA INTO BUF @V305731 02450000
SR R7,R7 CLEAR REGISTER @VM03043 02460000
STH R7,BSCINDEX CLEAR BUFFER INDEX VALUE @VM03094 02470000
EJECT , 02480000
*. 02490000
* SUBROUTINE NAME - 02500000
* SECOND 02510000
* 02520000
* FUNCTION = 02530000
* 02540000
* TO MOVE THE DATA INTO THE READ BUFFER AFTER SELECTING 02550000
* THE CORRECT TRANSLATE TABLE 02560000
* 02570000
* CONTINUE TO THE SUBROUTINE 'CHECKEY' 02580000
* 02590000
SPACE 2 02600000
SECOND DS 0H FIND COMPOUND CHARACTERS @VA13123 02610000
LR R4,R3 SAVE ADDRESS OF DATA AREA @VM03094 02620000
LR R0,R2 SAVE BYTE COUNT FOR FAKESUB @V387398 02630000
L R7,=A(DMKTBMZI) TRANSLATE COMPOUND CHARACTERS @VA09031 02640000
TM NICTMCD,NICTEXT 3270 TEXT CHARACTER SET? @V387398 02650000
BZ RDTRANS NO -> TRANSLATE TABLE ALL SET @V387398 02660000
L R7,=A(DMKTBMTI) TRANSLATE TEXT COMPOUND CHAR. @VA09031 02670000
RDTRANS DS 0H @VA13123 02680000
LR R2,R3 START OF DATA AREA @V387398 02690000
BAL R14,FAKESUB REMOVE THE FAKE ATTRIBUTE CHAR. @VM03094 02700000
SR R2,R4 GET LENGTH OF DATA AREA @V387398 02710000
LR R1,R2 SAVE LENGTH OF DATA AREA @V387398 02720000
AH R2,BSCINDEX GET TOTAL DATA COUNT @V387398 02730000
LA R0,BUFINLTH+6 GET MAX. LENGTH OF BUFFER @VM03043 02740000
CR R2,R0 LENGTH GREATER THAN BUFFER SIZE @VM03043 02750000
BL APLBYP YES, BYPASS CHANGING LENGTH @VM03043 02760000
OI BSCFLAG1,BSCIGN SET BUFFER INGORE FLAG @VM03043 02770000
SH R0,BSCINDEX GET THE DIFFERENCE IN LENGTH @V387398 02780000
BNP CHECKEY IF LENGTH IS EQUAL OR GREATER @VM03043 02790000
LR R1,R0 SAVE LENGTH DIFFERENCE @VM03043 02800000
APLBYP DS 0H @VA13123 02810000
LTR R1,R1 IS IT ZERO ? @VA07327 02820000
BZ CHECKEY YES, GO TO CHECKEY @VA07327 02830000
L R3,BSCRPTR GET POINTER TO BUFFER @VA08730 02840000
AH R3,BSCINDEX GET ADDRESS TO AVAILABLE SPACE @VM03094 02850000
STH R2,BSCINDEX SAVE TOTAL LENGTH OF DATA @VM03094 02860000
BCTR R1,R0 SUBSTRACT ONE - EX INSTR. @VM03043 02870000
EX R1,MVCRT MOVE DATA TO BUFFER AREA @VM03043 02880000
EJECT , 02890000
*. 02900000
* SUBROUTINE NAME - 02910000
* CHECKEY 02920000
* 02930000
* FUNCTION = 02940000
* 02950000
* TO DETERMINE WHICH KEY WAS USED TO CAUSE THE INTERRUPT, AND 02960000
* TO GO TO THE APPROPRIATE PROCESSOR FOR THAT KEY 02970000
* 02980000
SPACE 2 02990000
CHECKEY DS 0H DETERMINE WHAT KEY WAS DEPRESSED @VA13123 03000000
TM BSCFLAG1,BSCETB IS ENDING CHARACTER AN ETB @VM03043 03010000
BO HANDETB YES, GET REMAINING DATA @VM03043 03020000
NI BSCFLAG1,X'FF'-BSCIGN CLEAR IGNORE DATA FLAG @VM03043 03030000
LA R1,KEYTBL GET KEY TABLE ADDRESS @VM03043 03040000
L R3,BSCRPTR GET BUFFER ADDRESS @VA08730 03050000
NI NICFLAG,X'FF'-NICCARD RESET CARD INPUT INDICATOR@V305731 03060000
LA R0,KEYLENG COUNT FOR TABLE SEARCH @V305731 03070000
KEYCLC DS 0H FIND CONTROL KEY @VA13123 03080000
CLC BUFFER,0(R1) THIS KEY MATCH ? @V305731 03090000
BE KEYPROC GO TO APPROPRIATE KEY SECTION @V305731 03100000
LA R1,2(R1) INDEX TO NEXT KEY ENTRY @V305731 03110000
BCT R0,KEYCLC LOOP THROUGH TABLE @V305731 03120000
BAL R3,NOTKEY RELEASE READ BUFFER @VA13123 03130000
SPACE 1 @VA13123 03140000
KEYPROC DS 0H GO TO APPROPRIATE KEY SECTION @VA13123 03150000
SR R2,R2 CLEAR REGISTER 2 @V305731 03160000
IC R2,1(R1) GET INDEX VALUE TO ADDRESS @V305731 03170000
L R2,KEYTBLP(R2) GET AFFECTED KEY ADDRESS @V305731 03180000
BR R2 GO TO AFFECTED KEY SECTION @V305731 03190000
SPACE 1 03200000
CRDREAD DS 0H CARD READER INDICATED @VA13123 03210000
OI NICFLAG,NICCARD DATA FROM CARD READER @V305731 03220000
DATA77 DS 0H DATA FROM PRESSING ENTER KEY @VA13123 03230000
CLI BUFFER+6,X'00' ANY DATA ENTERED @V305731 03240000
BNE SETBUF YES, GET DATA ADDRESS @V305731 03250000
CLC BUFFER+1(2),TABTBL CURSOR BACK ONE ? @VAI0054 03260000
BNE SETBUF NO, GET DATA ADDRESS @V305731 03270000
TM NICSTAT,NICREAD WAS DATA ENTER IN READ STATE @V305731 03280000
BZ SETBUF NO, GET DATA ADDRESS @V305731 03290000
LA R2,4 SINGLE ATTN RETURN WITH NULL DATA@V305731 03300000
SR R3,R3 NO DATA @V305731 03310000
B RDRTN RETURN DATA @V305731 03320000
SETBUF DS 0H REMOVE CURSOR ADDRESS @VA13123 03330000
LA R3,BUFFER+6 GET DATA ADDRESS @V305731 03340000
LR R4,R3 SAVE STARTING ADDRESS @V305731 03350000
LA R1,BUFINLTH MAXIMUN BUFFER INPUT ALLOW @V305731 03360000
ZEROCHAR DS 0H FIND END OF DATA IN BUFFER @VA13123 03370000
CLI 0(R3),X'00' IS THIS THE ENDING CHARACTER @V305731 03380000
BE ZEROFND YES, MOVE DATA TO START OF BUF @V305731 03390000
CLI 0(R3),X'6A' IS THIS A TAB CHARACTER @V305731 03400000
BNE BYPREPL NO, BYPASS PUTTING IN REPLACEMENT@VM03133 03410000
MVI 0(R3),X'05' PUT REPLACEMENT IN FOR REAL TAB @V305731 03420000
BYPREPL DS 0H CHECK FOR START BUFFER CHARACTE @VA13123 03430000
CLI 0(R3),X'11' SBA FROM CARD READER @V305731 03440000
BNE NXTBUF NO, GET NEXT LOCATION IN BUFFER @V305731 03450000
EX R1,SHFTBUF SHIFT OUT THE BUFFER ADDRESS @V305731 03460000
S R1,F3 UPDATE COUNT BECAUSE OF SBA CHAR @VM03040 03470000
BNP ZEROFND IF ZERO, GET OUT @VM03040 03480000
B ZEROCHAR CHECK THIS POSITION AGAIN @V305731 03490000
NXTBUF DS 0H GET NEXT BUFFER POSITION @VA13123 03500000
LA R3,1(R3) UPDATE BUFFER POINTER BY ONE @V305731 03510000
BCT R1,ZEROCHAR GO CHECK FOR ENDING CHARACTER @V305731 03520000
ZEROFND DS 0H @VA13123 03530000
SLR R3,R4 GET BYTE COUNT @V305731 03540000
L R1,BSCRPTR GET ADDRESS OF READ BUFFER @VA08730 03550000
EX R3,MOVEDATA SHIFT DATA IN BUFFER @V305731 03560000
LR R4,R1 GET ADDRESS OF READ BUFFER @V305731 03570000
SPACE 1 03580000
EJECT , 03590000
*. 03600000
* SUBROUTINE NAME - 03610000
* DATACNT 03620000
* 03630000
* FUNCTION = 03640000
* 03650000
*TO DETERMINE THE ACTION TO BE TAKEN FOR THE DATA IN THE 03660000
*BUFFER, AND CAUSE GO TH THE ROUTINE TO DO THE PROCESSING 03670000
* 03680000
SPACE 2 03690000
DATACNT DS 0H SET UP COUNT IN BUFFER @VA13123 03700000
ST R3,BUFCNT-BUFFER(R4) SET COUNT IN BUFFER AREA @V305731 03710000
TM NICSTAT,NICREAD IS READ STATE INDICATED ? @V305731 03720000
BO RDATA YES, GO EDIT & TRANSLATE DATA @V305731 03730000
TM NICFLAG,NICCARD IS DATA FROM CARD READER @V305731 03740000
BO EDNULL YES, DON'T ACCEPT IT @V305731 03750000
LTR R3,R3 ANY DATA ENTERED ? @V305731 03760000
BNP NULLDATA NO, RETURN READ BUFFER STORAGE @V305731 03770000
BAL R7,CTLTASKB GET STORAGE FOR CONTASK @V305731 03780000
L R1,CONPNT GET NEXT CONTASK POINTER @V305731 03790000
L R6,NICQPNT GET POINTER TO CURRENT CONTASK @V305731 03800000
ST R1,NICQPNT SAVE POINTER TO NEXT CONTASK @V305731 03810000
MVI CONPARM,EDIT+UCASE SET PARM FOR EDIT @V305731 03820000
ST R4,CONADDR DATA ADDRESS FOR EDIT @V305731 03830000
STH R3,CONCNT DATA COUNT FOR EDIT @V305731 03840000
MC MNCOERD,MNCLRESP RESPONSE CLASS, END READ @VA08417 03850000
L R1,NICUSER GET USER VMBLOK POINTER @V305731 03860000
TM VMRSTAT-VMBLOK(R1),VMLOGON+VMCFWAIT LOGON-SLEEP @V305731 03870000
BNZ EDATA YES, GO EDIT INPUT DATA @V305731 03880000
TM VMMLEVEL-VMBLOK(R1),VMMCPENV CP ENVIRONMENT @V305731 03890000
BZ VIRTBUFF NO, VIRTUAL BUFFER IS AVAILABLE @V305731 03900000
SPACE 1 03910000
EDATA DS 0H EDIT INPUT DATA FROM DISPLAY @VA13123 03920000
TM NICTMCD,NICAPL+NICTEXT TRANS INDICATED? @V387398 03930000
BNZ BYPEDIT YES, BYPASS EDIT FUNCTION @V387398 03940000
BAL R7,ROUTCNS GO EDIT DATA & RELEASE CONTASK @V305731 03950000
BYPEDIT DS 0H RELEASE STORAGE FOR CONTASK @VA13123 03960000
BAL R7,FRETCON RELEASE CONTASK ... @V305731 03970000
LTR R3,R3 DID EDIT RESULT IN ZERO LENGTH @V305731 03980000
BP TESTCF NO, TEST FOR CONSOLE FUNCTION @V305731 03990000
BAL R3,EDNULL GO TO CLEAR SCREEN IMPUT AREA @VA13123 04000000
SPACE 1 04010000
NULLDATA DS 0H RE-DISPLAY SCREEN STATE @VA13123 04020000
BAL R3,FRETRD RELEASE READ BUFFER @V305731 04030000
L R3,NICUSER GET USER VMBLOK POINTER @V305731 04040000
TM VMRSTAT-VMBLOK(R3),VMLOGON LOGGING ON NOW ? @V305731 04050000
BO CFMBK YES, PUT IN CONSOLE FUNCTION MODE@V305731 04060000
TM NICSTAT,NICRUNN IS SCREEN IN RUNNING STATE @V305731 04070000
BO POSTINT YES, POST AN ATTN INTERRUPT @V305731 04080000
TM NICSTAT,NICMORE IS SCREEN IN MORE STATE @V305731 04090000
BZ CRTMOR NO, HOLDING GOING TO MORE STATE @V305731 04100000
BAL R3,SETHOLD1 SET UP CCW STRING FOR HOLD STATE @VA13123 04110000
EJECT , @VA13123 04120000
*.*************************************************************@VA13123 04130000
* @VA13123 04140000
* THE FOLLOWING SUBROUTINES ARE THE RETURN INTERFACE @VA13123 04150000
* TO THE ROUTINE IN DMKRGA BY THE SAME NAME @VA13123 04160000
* @VA13123 04170000
*.*************************************************************@VA13123 04180000
SPACE 1 @VA13123 04190000
CRTMOR DS 0H SET CCW STRING FOR MORE STATE @VA13123 04200000
LA R14,RTRGACMO SET BRANCH INDEX @VA13123 04210000
B RGFEXIT GO TO EXIT INTERFACE @VA13123 04220000
SPACE 1 04230000
POSTINT DS 0H POST ATTENTION INTERRUPT @VA13123 04240000
LA R14,RTRGAPAT SET BRANCH INDEX @VA13123 04250000
B RGFEXIT GO TO EXIT INTERFACE @VA13123 04260000
SPACE 1 @VA13123 04270000
EDNULL DS 0H CLEAR INPUT AREA ON SCREEN @VA13123 04280000
LA R14,RTRGAEDN SET BRANCH TABLE OFFSET @VA13123 04290000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04300000
SPACE 1 @VA13123 04310000
RVIRESP DS 0H SEND RVI TO REMOTE STATION @VA13123 04320000
LA R14,RTRGARVI SET BRANCH TABLE OFFSET @VA13123 04330000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04340000
SPACE 1 @VA13123 04350000
LOGUSER DS 0H LOGON USER @VA13123 04360000
LA R14,RTRGALOG SET BRANCH TABLE OFFSET @VA13123 04370000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04380000
SPACE 1 @VA13123 04390000
CLRKEY DS 0H GO HANDLE CLEAR KEY @VA13123 04400000
LA R14,RTRGACLR SET BRANCH TABLE OFFSET @VA13123 04410000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04420000
SPACE 1 @VA13123 04430000
PA1KEY DS 0H GO HANDLE PA1 KEY @VA13123 04440000
LA R14,RTRGAPA1 SET BRANCH TABLE OFFSET @VA13123 04450000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04460000
SPACE 1 @VA13123 04470000
PA3KEY DS 0H GO HANDLE PA3 KEY @VA13123 04480000
LA R14,RTRGAPA3 SET BRANCH TABLE OFFSET @VA13123 04490000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04500000
SPACE 1 @VA13123 04510000
PFKEY DS 0H GO HANDLE PF KEY @VA13123 04520000
LA R14,RTRGAPF SET BRANCH TABLE OFFSET @VA13123 04530000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04540000
SPACE 1 @VA13123 04550000
CNCLKEY DS 0H GO HANDLE CANCEL KEY @VA13123 04560000
LA R14,RTRGACNL SET BRANCH TABLE OFFSET @VA13123 04570000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04580000
SPACE 1 @VA13123 04590000
TESTREQ DS 0H GO HANDLE TESTREQ KEY @VA13123 04600000
LA R14,RTRGATST SET BRANCH TABLE OFFSET @VA13123 04610000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04620000
SPACE 1 @VA13123 04630000
SETHOLD1 DS 0H GO SET HOLD STATE @VA13123 04640000
LA R14,RTRGAHL1 SET BRANCH TABLE OFFSET @VA13123 04650000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04660000
SPACE 1 @VA13123 04670000
SETCAW DS 0H GO SAVEHOLD STATE @VA13123 04680000
LA R14,RTRGAHL1 SET BRANCH TABLE OFFSET @VA13123 04690000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04700000
SPACE 1 @VA13123 04710000
NOTKEY DS 0H GO FRET READ BUFFER @VA13123 04720000
LA R14,RTRGANKY SET BRANCH TABLE OFFSET @VA13123 04730000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04740000
SPACE 1 @VA13123 04750000
RDRTN DS 0H GO RETURN READ DATA @VA13123 04760000
LA R14,RTRGARRT SET BRANCH TABLE OFFSET @VA13123 04770000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04780000
SPACE 1 @VA13123 04790000
RDATA DS 0H GO EDIT AND TRANSLATE THE DATA @VA13123 04800000
LA R14,RTRGARDA SET BRANCH TABLE OFFSET @VA13123 04810000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04820000
SPACE 1 @VA13123 04830000
CFMBK DS 0H GO PLACE USER IN CONSOLE FUNCTIO @VA13123 04840000
LA R14,RTRGACBK SET BRANCH TABLE OFFSET @VA13123 04850000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04860000
SPACE 1 @VA13123 04870000
VIRTBUFF DS 0H GO PLACE USER IN CONSOLE FUNCTIO @VA13123 04880000
LA R14,RTRGAVBF SET BRANCH TABLE OFFSET @VA13123 04890000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04900000
SPACE 1 @VA13123 04910000
TESTCF DS 0H GO TEST FOR CONSOLE FUNCTION @VA13123 04920000
LA R14,RTRGATCF SET BRANCH TABLE OFFSET @VA13123 04930000
B RGFEXIT GO TO RGA RETURN INTERFACE @VA13123 04940000
SPACE 1 @VA13123 04950000
RGFEXIT DS 0H @VA13123 04960000
L R15,ARGACR LOAD RETURN ENTRY ADDRESS @VA13123 04970000
LM R12,R13,RGABASE SET DMKRGA BASE REGISTERS @VA13123 04980000
BR R15 RETURN TO DMKRGA @VA13123 04990000
EJECT @VA13123 05000000
HANDETB EQU * HANDLE BLOCK RECORD FROM STATION @VM03043 05010000
NI BSCFLAG1,X'FF'-BSCETB CLEAR ETB INDICATOR @VM03043 05020000
MVC BSCPCCW3(8),RSACKCCW SET UP ACK CCW @VM03043 05030000
LA R1,BSCSEND GET POINTER TO ACK CHARACTERS @VM03043 05040000
STCM R1,7,BSCPCCW3+1 SAVE ADDRESS IN CCW @VM03043 05050000
MVC BSCPCCW4(8),ETBREAD GET READ CCW @VM03043 05060000
LA R1,BSCREAD GET POINTER TO READ BUFFER @VM03043 05070000
STCM R1,7,BSCPCCW4+1 SAVE ADDRESS OF READ BUFFER @VM03043 05080000
MVI BSCPCCW4+5,X'0C' TP-CODE 'READ REMAINING DATA' @VM03043 05090000
LA R1,BSCPCCW3 ADDRESS OF CCW STRING @VM03043 05100000
BAL R7,SETCAW GO DO I/O OPERATION TO LINE @VM03043 05110000
SPACE 2 05120000
CTLTASKB EQU * SET UP BASIC SIZE FOR CONTASK @V305731 05130000
LA R0,CONTSIZE SIZE OF BASIC CONTASK @V305731 05140000
B CTLTASK1 GET STORAGE FOR CONTASK @V305731 05150000
CTLTASK EQU * ALLOCATE AND QUEUE CONTROL TASK @V305731 05160000
LA R0,CONTSIZE+6 ...SIZE OF CONTASKS @VA08129 05170000
CTLTASK1 EQU * @V305731 05180000
CALL DMKFREE GET STORAGE FOR CONTASK @V305731 05190000
XC 0(CONTSIZE*8,R1),0(R1) CLEAR THE HEADER @V305731 05200000
LR R6,R1 PUT CONTASK ADDRESS IN REGISTER 6@V305731 05210000
STH R0,CONTSKSZ SAVE THE CONTASK SIZE @V305731 05220000
L R1,NICUSER VMBLOK OF RESOURCE OWNER @V305731 05230000
ST R1,CONUSER SAVE VMBLOK PTR IN CONTASK @V305731 05240000
MVI CONSTAT,CONCNTL INDICATE CONTROL TASK @V305731 05250000
L R1,NICQPNT GET CURRENT CONTASK FROM CHAIN @V305731 05260000
ST R6,NICQPNT PUT THIS TASK FIRST ON CHAIN @V305731 05270000
ST R1,CONPNT PUT CURRENT TASK ON CHAIN @V305731 05280000
BR R7 RETURN @V305731 05290000
SPACE 1 05300000
FAKESUB EQU * REMOVE FAKE ATTRIBUTE CHARACTER @VM03094 05310000
CLI 0(R3),ETX IS END OF TEXT INDICATED @VM03094 05320000
BER R14 YES, RETURN TO IN LINE CODE @VM03094 05330000
CLI 0(R3),ETB IS END OF BLOCK INDICATED @VM03094 05340000
BER R14 YES, RETURN TO IN LINE CODE @VM03094 05350000
CLI 0(R3),X'1D' IS FAKE ATTRIBUTE CHAR. INDICATED@VM03094 05360000
BNE NOFAKE NO, BYPASS TRANSLATION @VM03094 05370000
BCT R0,XLATE2 TRANSLATE THE CMPD CHAR IF ANY @VA13277 05372000
BR R14 RETURN IF NO MORE CHARS @VA13277 05374000
XLATE2 DS 0H @VA13277 05376000
TR 1(1,R3),0(R7) TRANSLATE THE COMPOUND CHAR. @V387398 05380000
LA R3,1(,R3) SKIP X'1D' CHARACTER @V387398 05390000
B NOTEXT CONTINUE WITH NEXT CHARACTER @VA13277 05401000
SPACE 1 @V387398 05420000
SNGLCHAR EQU 256 OFFSET TO SINGLE CHARACTER XLATE TABLE @V387398 05430000
SPACE 1 @V387398 05440000
NOFAKE TM NICTMCD,NICTEXT 3270 TEXT? @V387398 05450000
BZ NOTEXT NO, DON'T DO EXTRA TRANSLATE @V387398 05460000
TR 0(1,R3),SNGLCHAR(R7) TRANSLATE NON-CMPD. TEXT @V387398 05470000
NOTEXT MVC 0(1,R2),0(R3) SQUEEZE OUT X'1D' CHARS. @V387398 05480000
LA R2,1(,R2) POINT TO NEXT CHAR. POS. @V387398 05490000
LA R3,1(,R3) UPDATE BUFFER POINTER BY ONE @VM03094 05500000
BCT R0,FAKESUB LOOP IF MORE CHARS. TO TRANSLATE @V387398 05510000
BR R14 RETURN TO IN LINE CODE @VM03094 05520000
SPACE 2 05530000
ROUTCNS EQU * EDIT AND TRANSLATE INPUT DATA @V305731 05540000
ST R7,TEMPR7 SAVE REGISTER 7 @V4M0193 05550000
ST R0,TEMPR0 SAVE REG 0-DESTROYED BY RSWVMU1 @VA07580 05560000
C R11,NICUSER IS SWITCH NEEDED? @VA13123 05563000
BE NOSWITCH NO - GO CONTINUE @VA13123 05566000
L R1,NICUSER LOAD ADDR NEW VMBLOK @V407511 05570000
SWTCHVM OPT=UNLOCK SWITCH VMBLOK CHARGING @VA13123 05580000
NOSWITCH DS 0H @VA13123 05585000
L R7,TEMPR7 RESTORE REGISTER 7 @V4M0193 05590000
L R0,TEMPR0 RESTORE REGISTER 0 @VA07580 05600000
CALL DMKCNSED EDIT INPUT DATA @V305731 05610000
CHARGE SWITCH,ASYSVM SWITCH VMBLOK CHARGING @V407511 05620000
BR R7 RETURN @V407511 05630000
SPACE 1 05640000
FRETCON EQU * RELEASE CONTASK AFTER EDITING @V305731 05650000
LR R1,R6 GET CONTASK POINTER @V305731 05660000
LA R0,CONTSIZE GET SIZE OF CONTASK @V305731 05670000
CALL DMKFRET RELEASE CONTASK @V305731 05680000
ST R3,BUFCNT-BUFFER(,R4) SAVE INPUT DATA COUNT @V305731 05690000
BR R7 RETURN TO IN LINE CODE @V305731 05700000
SPACE 1 05710000
FRETSTG EQU * RETURN STORAGE TO SYSTEM @V305731 05720000
LA R1,0(,R1) CLEAR HIGH ORDER BYTE @V305731 05730000
LTR R1,R1 IS ADDRESS ZERO ? @V305731 05740000
BZ CLREG0 YES, CLEAR REGISTER ZERO @V305731 05750000
CALL DMKFRET RELEASE STORAGE @V305731 05760000
CLREG0 EQU * @V305731 05770000
SR R0,R0 CLEAR REGISTER 0 @V305731 05780000
BR R7 RETURN TO IN LINE CODE @V305731 05790000
SPACE 1 05800000
FRETRD EQU * RELEASE READ BUFFER @V305731 05810000
LA R0,BUFSIZE GET SIZE OF READ BUFFER @V305731 05820000
L R1,BSCRPTR GET ADDRESS OF READ BUFFER @VA08730 05830000
BAL R7,FRETSTG RELEASE STORAGE FOR READ BUFFER @V305731 05840000
ST R0,BSCRPTR CLEAR POINTER FIELD @VA08730 05850000
BR R3 RETURN @V305731 05860000
EJECT 05870000
* THE EXECUTE INSTRUCTION USED THE FOLLOWING INSTRUCTIONS 05880000
MOVEDATA MVC 0(*-*,R1),0(R4) MOVE DATA INTO BUFFER @V305731 05890000
SHFTBUF MVC 0(*-*,R3),3(R3) SHIFT OUT BUFFER ADDRESS @V305731 05900000
MVCRT MVC BUFFER(*-*),0(R4) EXECUTED MOVE PF DATA @V305731 05910000
SPACE 1 05920000
* STORAGE FOR DATA LINK CONTROL CHARACTERS 05930000
RGFACK1 DC AL2(ACK1) POSITIVE ACKNOWLEDGE 1 CHARACTER @V305731 05940000
SPACE 1 05950000
ETBREAD DC X'02',AL3(0),AL1(SILI,X'0A'),AL2(BSCSIZE1) @VM03043 05960000
SPACE 05970000
RSACKCCW DC X'01',AL3(RGFACK1),AL1(SILI+CC,X'06'),AL2(2) @V305731 05980000
SPACE 1 05990000
SPACE 1 06000000
SPACE 1 06010000
* READ/WRITE OPERATION TYPES 06020000
IBBSPOLL EQU X'10' SPECIFIC POLLING TO A STATION @V305731 06030000
SPACE 1 06040000
* DATA-LINK CONTROL CHARACTERS FOR 3270 REMOTE SYSTEM 06050000
ETX EQU X'03' END OF TEXT @V305731 06060000
ETB EQU X'26' END OF BLOCK @V305731 06070000
ACK1 EQU X'1061' ODD ACKNOWLEDGE @V305731 06080000
SPACE 1 06090000
* 06100000
EJECT , @VA13123 06110000
* TABLE OF 3270 FUNCTION KEYS WITH INDEX TO KEYTBLP 06120000
KEYTBL DC X'7D00' ENTER @V305731 06130000
DC X'6D04' CLEAR @V305731 06140000
DC X'6E18' PA2 (CNCL) @V305798 06150000
DC X'6C08' PA1 @V305731 06160000
DC X'6B0C' PA3 @V305731 06170000
DC X'E610' CARD READER @V305731 06180000
PFNDX DC X'F114' PF01 @V305731 06190000
DC X'F214' PF02 @V305731 06200000
DC X'F314' PF03 @V305731 06210000
DC X'F414' PF04 @V305731 06220000
DC X'F514' PF05 @V305731 06230000
PF6NDX DC X'F614' PF06 @V305731 06240000
DC X'F714' PF07 @V305731 06250000
DC X'F814' PF08 @V305731 06260000
DC X'F914' PF09 @V305731 06270000
DC X'7A14' PF10 @V305731 06280000
DC X'7B14' PF11 @V305731 06290000
DC X'7C14' PF12 @V305731 06300000
KEYLENG EQU (*-KEYTBL)/2 @V305731 06310000
SPACE 06320000
KEYTBLP DC A(DATA77) 00 @V305731 06330000
DC A(CLRKEY) 04 @V305798 06340000
DC A(PA1KEY) 08 @V305731 06350000
DC A(PA3KEY) 0C @V305731 06360000
DC A(CRDREAD) 10 @V305731 06370000
DC A(PFKEY) 14 @V305731 06380000
DC A(CNCLKEY) 18 @V305798 06390000
DC A(TESTREQ) 1C @VA09168 06400000
SPACE 06410000
* TABLE OF TAB POSITIONS FOR 3270 PF TAB CAPABILITY 06420000
SPACE 06430000
TABTBL DC X'5B5F' @V305731 06440000
SPACE 2 @VA13123 06450000
RGFBASE DC A(DMKRGF) DMKRGF BASE VALUE @VA13123 06460000
RGABASE DC A(DMKRGA,DMKRGA+4096) DMKRGA BASE REGISTERS @VA13123 06470000
ARGACR DC A(DMKRGACR) DMKRGA RETURN ADDRESS @VA13123 06480000
SPACE 2 @VA13123 06490000
*.*************************************************************@VA13123 06500000
* @VA13123 06510000
* INDEX VALUES FOR RETURN TO BRANCH TABLE IN DMKRGA @VA13123 06520000
* TABLE VECTBLGC MUST BE IN SAME SEQUENCE AS THESE @VA13123 06530000
* OFFSETS @VA13123 06540000
* @VA13123 06550000
*.*************************************************************@VA13123 06560000
SPACE 1 @VA13123 06570000
RTRGAEDN EQU X'0' EDNULL @VA13123 06580000
RTRGARVI EQU X'4' RVIRESP @VA13123 06590000
RTRGALOG EQU X'8' LOGUSER @VA13123 06600000
RTRGACLR EQU X'C' CLRKEY @VA13123 06610000
RTRGAPA1 EQU X'10' PA1KEY @VA13123 06620000
RTRGAPA3 EQU X'14' PA3KEY @VA13123 06630000
RTRGAPF EQU X'18' PFKEY @VA13123 06640000
RTRGACNL EQU X'1C' CNCLKEY @VA13123 06650000
RTRGATST EQU X'20' TESTREQ @VA13123 06660000
RTRGACMO EQU X'24' CRTMOR @VA13123 06670000
RTRGAPAT EQU X'28' POSTINT @VA13123 06680000
RTRGAHL1 EQU X'2C' SETHOLD1 @VA13123 06690000
RTRGANKY EQU X'30' NOTKEY @VA13123 06700000
RTRGARRT EQU X'34' RDRTN @VA13123 06710000
RTRGARDA EQU X'38' RDATA @VA13123 06720000
RTRGACBK EQU X'3C' CFMBK @VA13123 06730000
RTRGAVBF EQU X'40' VIRTBUFF @VA13123 06740000
RTRGATCF EQU X'44' TESTCF @VA13123 06750000
SPACE 2 @VA13123 06760000
SPACE 1 06770000
HDRSW EQU 1 LENGTH OF SWITCHED HEADER @V346931 06780000
HDRNSW EQU 3 LENGTH OF NON-SWITCHED HEADER @V346931 06790000
EJECT 06800000
LTORG @V305731 06810000
EJECT 06820000
COPY NETWORK @V305731 06830000
COPY BSCBLOKS @V305731 06840000
COPY TIMER @V305731 06850000
COPY DEVTYPES @V305731 06860000
COPY EQU @V305731 06870000
COPY VBLOKS @V305731 06880000
COPY RBLOKS @V305731 06890000
COPY CONBUF @V305731 06900000
COPY IOBLOKS @V305731 06910000
COPY IOER @V305731 06920000
COPY VMBLOK @V305731 06930000
COPY SAVE @V305731 06940000
PSA @V305731 06950000
COPY XINTBLOK @V305798 06960000
END 06970000