Return to Mainframe Utilities Page

## Module

PROC 2 HEXNUM1 HEXNUM2 /**** SET MESSAGE DISPLAY ON/OFF BASED ON THE DEBUG SWITCH ***/ ISPEXEC VGET (DBGSWTCH) PROFILE IF &DBGSWTCH = &STR(ON) THEN CONTROL MSG LIST CONLIST SYMLIST NOFLUSH ELSE CONTROL NOMSG NOLIST NOFLUSH NOPROMPT IF &HEXNUM1 = &STR(HELP) THEN GOTO HELPSEC SET HLEN1 = &LENGTH(&HEXNUM1) IF &HLEN1 > 8 THEN GOTO END1 SET COUNT = 1 SET SLEN = &HLEN1 - 1 SET SNUM1 = 0 DO WHILE &COUNT LE &HLEN1 SET HCHAR = &SUBSTR(&COUNT,&HEXNUM1) IF &HCHAR = A THEN SET HCHAR = 10 IF &HCHAR = B THEN SET HCHAR = 11 IF &HCHAR = C THEN SET HCHAR = 12 IF &HCHAR = D THEN SET HCHAR = 13 IF &HCHAR = E THEN SET HCHAR = 14 IF &HCHAR = F THEN SET HCHAR = 15 SET SNUM1 = &SNUM1 + (&HCHAR * (16 ** &SLEN)) SET COUNT = &COUNT + 1 SET SLEN = &SLEN - 1 END /* SET HLEN2 = &LENGTH(&HEXNUM2) IF &HLEN2 > 8 THEN GOTO END2 SET COUNT = 1 SET SLEN = &HLEN2 - 1 SET SNUM2 = 0 DO WHILE &COUNT LE &HLEN2 SET HCHAR = &SUBSTR(&COUNT,&HEXNUM2) IF &HCHAR = A THEN SET HCHAR = 10 IF &HCHAR = B THEN SET HCHAR = 11 IF &HCHAR = C THEN SET HCHAR = 12 IF &HCHAR = D THEN SET HCHAR = 13 IF &HCHAR = E THEN SET HCHAR = 14 IF &HCHAR = F THEN SET HCHAR = 15 SET SNUM2 = &SNUM2 + (&HCHAR * (16 ** &SLEN)) SET COUNT = &COUNT + 1 SET SLEN = &SLEN - 1 END /* SET SNUM2 = &SNUM1 - &SNUM2 SET ANUM = &SNUM2 SET HLEN3 = &LENGTH(&SNUM2) SET COUNT = &HLEN3 /* DO WHILE &ANUM NE 0 SET BNUM = &ANUM / 16 SET CNUM = &BNUM * 16 SET RNUM = &ANUM - &CNUM SET ANUM = &BNUM IF &RNUM = 10 THEN SET RNUM = A IF &RNUM = 11 THEN SET RNUM = B IF &RNUM = 12 THEN SET RNUM = C IF &RNUM = 13 THEN SET RNUM = D IF &RNUM = 14 THEN SET RNUM = E IF &RNUM = 15 THEN SET RNUM = F IF &COUNT = 1 THEN SET &HC1 = &RNUM IF &COUNT = 2 THEN SET &HC2 = &RNUM IF &COUNT = 3 THEN SET &HC3 = &RNUM IF &COUNT = 4 THEN SET &HC4 = &RNUM IF &COUNT = 5 THEN SET &HC5 = &RNUM IF &COUNT = 6 THEN SET &HC6 = &RNUM IF &COUNT = 7 THEN SET &HC7 = &RNUM IF &COUNT = 8 THEN SET &HC8 = &RNUM SET COUNT = &COUNT - 1 END /* SET HNUM = &STR(&HC1&HC2&HC3&HC4&HC5&HC6&HC7&HC8) /* SET ZEDLMSG = + &STR(HEX (&HEXNUM1) - HEX (&HEXNUM2) = DECIMAL (&SNUM2) HEX (&HNUM)) ISPEXEC SETMSG MSG(UTLZ001) EXIT END1: + SET ZEDLMSG = + &STR("HEXSUB" CANNOT HANDLE EITHER HEX NUMBER BEING GREATER THAN 8 + DIGITS) ISPEXEC SETMSG MSG(UTLZ001) EXIT END2: + SET ZEDLMSG = + &STR("HEXSUB" CANNOT HANDLE EITHER HEX NUMBER BEING GREATER THAN 8 + DIGITS) ISPEXEC SETMSG MSG(UTLZ001) EXIT HELPSEC: + 04470000 CLEAR 04470000 WRITE *** HELP FOR CLIST HEXSUB *** 04470000 WRITE 04470000 WRITE NO HELP WRITTEN AT THIS TIME 04470000 WRITE 04470000 WRITE *** END OF HELP *** NO PROCESSING PERFORMED *** 04470000 EXIT 04470000

## Documentation

This CLIST takes 2 hexadecimal numbers as input, subtracts the 2nd from the 1st and displays the result in hexadecimal and decimal format. An example is as follows : COMMAND ===> HEXSUB 789EF AAA The resulting message would be : HEX (789EF) - HEX (AAA) = DECIMAL (491333) HEX (77F45) Neither input number can be greated than 8 digits in length.