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