HEX TITLE 'DMMHEX (IPCS) VM/370 - RELEASE 6' 00001000
* 00002000
* 00003000
* MODULE NAME: 00004000
* DMMHEX SUBROUTINE OF DUMPSCAN 00005000
* 00006000
* FUNCTION: 00007000
* TRASLATE EBCDIC TO HEX AND CHECK HEX VALIDITY 00008000
* 00009000
* ATTRIBUTES: 00010000
* REUSABLE 00011000
* NON-REENTRANT 00012000
* 00013000
* ENTRY POINTS: 00014000
* DMMHEX 00015000
* 00016000
* ENTRY CONDITIONS: 00017000
* R4 POINTS TO LEFT MOST BYTE OF EBCDIC 00018000
* R3 CONTAINS COUNT IN BYTES 00019000
* 00020000
* EXIT CONDITIONS: 00021000
* R5 POINTS TO LEFTMOST BYTE OF HEX 00022000
* 00023000
* CALLS TO OTHER ROUTINES: 00024000
* 00025000
* 00026000
* EXTERNAL REFERENCES: 00027000
* 00028000
* 00029000
* TABLES/WORKAREAS: 00030000
* 00031000
* 00032000
* REGISTER USAGE: 00033000
* 00034000
* 00035000
* NOTES: 00036000
* 00037000
* 00038000
* OPERATION: 00039000
* 00040000
* 00041000
* ERROR MESSAGES: 00042000
* DMMHEX714I NON-HEX CHARACTER IN INPUT - RETRY 00043000
* 00044000
* 00045000
* * * * * * * *------- -------- -------- -------- ------* 00046000
DMMHEX CSECT @VA04250 00047000
STM R14,R12,SAVEDISP(R13) SAVE CALLERS REGS @VA04250 00048000
LR R12,R15 ADDRESSABILITY @VA04250 00049000
USING DMMHEX,R12 @VA04250 00050000
ST R13,SAVEBACK CALLERS SAVE AREA @VA04250 00051000
B EYECATCH BYPASS EYECATCHER @VA04250 00052000
DS 0D ALIGN @VA04250 00053000
DC CL8'DMMHEX' EYECATCHER @VA04250 00054000
RELLEV DC C'REL4LEV0' RELEASE AND LEVEL @V4075A1 00055000
EYECATCH LA R13,SAVEAREA HEX SAVEAREA @VA04250 00056000
XC RETCODE,RETCODE CLEAR RETURN CODE @VA04250 00057000
* * * * * * * *------- -------- -------- -------- ------* 00058000
* * * * * * * * THIS ROUTINE ACCEPTS IN R4 THE ADDRESS OF 00059000
* * * * * * * * AN ADDRESS LEFT JUSTIFIED IN A PLIST. 00060000
* * * * * * * * IT CHECKS THAT ALL THE CHARACTERS ARE 00061000
* * * * * * * * HEX, AND TRANSLATES THE ADDRESS INTO HEX 00062000
* * * * * * * * AND PASSES IT BACK IN R5. 00063000
* * * * * * * *------- -------- -------- -------- ------* 00064000
ADFETCH LA R2,INL(R4) +7 - LAST BYTE OF ADDRESS @VA04250 00065000
MVC ADDRESS,CZEROS SET ADRESS TO ZEROS @VA04250 00066000
LA R4,PLISTENT COUNT 8 BYTES OF INPUT @VA04250 00067000
LA R3,ADDRESS+LOUT LAST BYTE OF OUTPUT @VA04250 00068000
COMPR CLI 0(R2),BLANK IS IT BLANK @VA04250 00069000
BE BUMP YES - GET NEXT LETTER @VA04250 00070000
MOVEIT CLI 0(R2),A BELOW 'A' @VA04250 00071000
BL BADIN NOT HEX @VA04250 00072000
CLI 0(R2),F ABOVE 'F' @VA04250 00073000
BH HICHEK SO FAR SO GOOD @VA04250 00074000
B VALID GOOD @VA04250 00075000
HICHEK CLI 0(R2),ZERO BELOW '0' @VA04250 00076000
BL BADIN NOT HEX @VA04250 00077000
CLI 0(R2),X9 ABOVE '9' @VA04250 00078000
BH BADIN NOT HEX @VA04250 00079000
VALID MVC 0(CHARL,R3),0(R2) MOVE THE CHAR @VA04250 00080000
BCTR R3,R0 BACK UP OUTPUT PTR @VA04250 00081000
BUMP BCTR R2,R0 BACK UP INPUT PTR @VA04250 00082000
BCT R4,COMPR GET ANOTHER @VA04250 00083000
B TRANADD GOOD - GO TRANSLATE IT @VA04250 00084000
BADIN MVC RETCODE,CODE4 BAD RETURN @VA04250 00085000
LA R8,ERMSG714 ADDRESS @VA04250 00086000
LA R9,L'ERMSG714 AND LENGTH @VA04250 00087000
BAL R10,WRTERM 'NON-HEX CHARACTER IN ADDRESS' @VA04250 00088000
B RETURN TRY AGAIN @VA04250 00089000
* * * * * * * *------- -------- -------- -------- ------* 00090000
* * * * * * * * NOW THE ADDRESS IS RIGHT JUSTIFIED IN THE 00091000
* * * * * * * * 'ADDRESS' FIELD, AND WILL BE TRANSLATED 00092000
* * * * * * * * TO HEX FOR THE GETREC ROUTINE. 00093000
* * * * * * * *------- -------- -------- -------- ------* 00094000
TRANADD LA R4,ADDRESS SET UP FOR CONVERT @VA04250 00095000
LA R6,L'ADDRESS COUNT ADDRESS BYTES @VA04250 00096000
TEST TM 0(R4),NUMZONE NUMERIC? @VA04250 00097000
BNO ADDNINE NO - FIX IT UP @VA04250 00098000
LA R4,ONE(R4) NEXT BYTE @VA04250 00099000
BCT R6,TEST IF NOT ALL DONE @VA04250 00100000
B ALLDONE BUT ON THE OTHER HAND @VA04250 00101000
ADDNINE MVC REGLOAD+LORD(CHARL),0(R4) ADD A BINARY @VA04250 00102000
L R7,REGLOAD NINE TO ANY @VA04250 00103000
AH R7,NINE ALPHA DIGIT @VA04250 00104000
ST R7,REGLOAD PLUG IT BACK INTO ADDRESS @VA04250 00105000
MVC 0(CHARL,R4),REGLOAD+LORD INTO ADDRESS @VA04250 00106000
LA R4,ONE(R4) GET NEXT BYTE @VA04250 00107000
BCT R6,TEST NEXT BYTE @VA04250 00108000
ALLDONE PACK HEXADEC(HEXL),ADDRESS(ADL) STRIP OFF ZONES @VA04250 00109000
B RETURN GET OUT @VA04250 00110000
* * * * * * * * ------- -------- -------- ------- * 00111000
* * * * * * * * WRTERM 00112000
* * * * * * * * ------- -------- -------- ------- * 00113000
WRTERM ST R8,PARMLIS1 SAVE MSG TEXT PTR IN PARM LIST @V4075A2 00114100
ST R9,PARMLIS2 AND TEXT LENGTH @V4075A2 00114200
LA R1,PARMLIS1 POINTER TO PASS @V4075A2 00114300
L R15,FEDLNADD ADDRESS OF DMMFEDLN - LINE WRITER@V4075A2 00114400
BALR R14,R15 GO WRITE THE LINE @V4075A2 00114500
BR R10 AND RETURN @V4075A2 00114600
PARMLIS1 DS F PARM1 @V4075A2 00114700
PARMLIS2 DS F PARM2 @V4075A2 00114800
FEDLNADD DC V(DMMFEDLN) LINE WRITER ROUTINE @V4075A2 00114900
* * * * * * * * ------- -------- -------- ------- * 00116000
* * * * * * * * CLOSE 00117000
* * * * * * * * ------- -------- -------- ------- * 00118000
RETURN L R13,SAVEBACK RESTORE CALLER SAVE PTR @VA04250 00119000
MVC SAVEREG5(L'HEXADEC,R13),HEXADEC PLUG HEX INTO R5@VA04250 00120000
MVC SAVREG15(L'RETCODE,R13),RETCODE PLUG RETCODE @VA04250 00121000
LM R14,R12,SAVEDISP(R13) RESTORE CALLERS REGS @VA04250 00122000
BR R14 RETURN @VA04250 00123000
* * * * * * * * ------- -------- -------- ------- * 00124000
* * * * * * * * CONSTANTS 00125000
* * * * * * * * ------- -------- -------- ------- * 00126000
* * * * * * * * ------- -------- -------- ------- * 00127000
* * * * * * * * SAVEAREA 00128000
* * * * * * * * ------- -------- -------- ------- * 00129000
SAVEAREA DS 0F THIS PROGRAM'S SAVE AREA @VA04250 00130000
SAVEUSR DS F USER WORD @VA04250 00131000
SAVEFWD DS F FORWARD POINTER @VA04250 00132000
SAVEBACK DS F BACKWARD POINTER @VA04250 00133000
SAVER14 DS F SAVE AREA FOR CALLER'S R14 @VA04250 00134000
SAVER15 DS F SAVE AREA FOR CALLER'S R15 @VA04250 00135000
SAVER0 DS F SAVE AREA FOR CALLER'S R0 @VA04250 00136000
SAVER1 DS F SAVE AREA FOR CALLER'S R1 @VA04250 00137000
SAVER2 DS F SAVE AREA FOR CALLER'S R2 @VA04250 00138000
SAVER3 DS F SAVE AREA FOR CALLER'S R3 @VA04250 00139000
SAVER4 DS F SAVE AREA FOR CALLER'S R4 @VA04250 00140000
SAVER5 DS F SAVE AREA FOR CALLER'S R5 @VA04250 00141000
SAVER6 DS F SAVE AREA FOR CALLER'S R6 @VA04250 00142000
SAVER7 DS F SAVE AREA FOR CALLER'S R7 @VA04250 00143000
SAVER8 DS F SAVE AREA FOR CALLER'S R8 @VA04250 00144000
SAVER9 DS F SAVE AREA FOR CALLER'S R9 @VA04250 00145000
SAVER10 DS F SAVE AREA FOR CALLER'S R10 @VA04250 00146000
SAVER11 DS F SAVE AREA FOR CALLER'S R11 @VA04250 00147000
SAVER12 DS F SAVE AREA FOR CALLER'S R12 @VA04250 00148000
* * * * * * * * ------- -------- -------- ------- * 00149000
CODE4 DC F'4' BAD RETURN CODE @VA04250 00150000
SAVHEX DS 18F OUR SAVE AREA @VA04250 00151000
RETCODE DS F RETURN CODE @VA04250 00152000
PADADD DS H OVERFLOW FOR ADDRESS HI ORD @VA04250 00153000
ADDRESS DS CL6 RIGHT ALIGNED ADDRESS @VA04250 00154000
CZEROS DC 6C'0' INITIALIZE ADDRESS @VA04250 00155000
REGLOAD DS F WORK AREA @VA04250 00156000
HEXADEC DS 2F HEX TRANSLATED OUTPUT @VA04250 00157000
NINE DC H'9' ADJUST HEX ALPHA CHAR @VA04250 00158000
ERMSG714 DC C'DMMHEX714I NON-HEX CHARACTER IN INPUT - RETRY' 00159000
BLANK EQU X'40' BLANK TEST @VA04250 00160000
A EQU X'C1' THESE ARE FOR @VA04250 00161000
F EQU X'C6' THE HEX VALIDITY @VA04250 00162000
ZERO EQU X'F0' TESTS MADE ON @VA04250 00163000
X9 EQU X'F9' THE INPUT DATA @VA04250 00164000
NUMZONE EQU X'F0' ZONE FOR A NUMERIC CHAR @VA04250 00165000
CHARL EQU 1 LENGTH OF A SINGLE CHARACTER @VA04250 00166000
ONE EQU 1 BUMP CTR @VA04250 00167000
LORD EQU 3 LO - ORD BYTE @VA04250 00168000
LOUT EQU 5 LENGTH OF OUTPUT @VA04250 00169000
HEXL EQU 5 PACKED ADDRESS @VA04250 00170000
ADL EQU 7 UNPACKED ADDRESS @VA04250 00171000
INL EQU 7 INPUT LENGTH @VA04250 00172000
PLISTENT EQU 8 LENGTH OF A PLIST ENTRY @VA04250 00173000
SAVEDISP EQU 12 REGS IN SAVE AREA @VA04250 00174000
SAVREG15 EQU 16 REG 15 IN SAVE AREA @VA04250 00175000
SAVEREG5 EQU 40 REG 5 IN SAVE AREA @VA04250 00176000
PATCH DC 50F'0' PATCH @VA04250 00177000
LTORG @VA04250 00178000
REGEQU @VA04250 00179000
END 00180000