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