/*================================REXX================================*/ /* O F F S E T */ /*--------------------------------------------------------------------*/ /* Obtiene la línea de Compilación a partir del OFFSET */ /*====================================================================*/ TRACE 'OFF' RESULT = MSG('OFF') PARSE ARG VAR_ARG. = '' VAR_ARG.0 = ARG() DO $ARG = 1 TO VAR_ARG.0 VAR_ARG.$ARG = ARG($ARG) END IF VAR_ARG.0 = 1 & VAR_ARG.1 = '?' THEN VA_AYUDA = 'S' CALL CON_MACRO CALL BUSCA_OFFSET /*==================== CONVIERTE A MACRO ================================*/ CON_MACRO: RC = 0 RESULT = '' PARSE SOURCE . VA_ACCESO VA_CODPRG VA_DDPRG VA_DSPRG . . VA_ENTORNO IF VA_ACCESO = 'COMMAND' & SYSVAR('SYSISPF') = 'ACTIVE' THEN DO "ISPEXEC CONTROL ERRORS RETURN" "ISREDIT MACRO (WARGS)" IF RC = 0 THEN DO VA_MACRO = 'S' VAR_ARG.1 = WARGS "NEWSTACK" "ISREDIT (WDATASET) = DATASET" "ISREDIT (WMEMBER) = MEMBER" VA_CODFIC = WDATASET IF WMEMBER <> '' THEN VA_CODFIC = WDATASET || '(' || WMEMBER || ')' "ISREDIT STATS ON" "ISREDIT RECOVERY ON" "ISREDIT (WPROFILE) = USER_STATE" "ISREDIT CAPS OFF" "ISREDIT NULLS OFF" "ISREDIT HEX OFF" "ISREDIT NUMBER OFF" "ISREDIT UNNUM" "ISREDIT (CLIN) = LINENUM .ZLAST" "ISREDIT (NUMLIN,WNCOL) = CURSOR" END RC = 0 END A_OFFSET = TRANSLATE(WORD(WARGS, 1)) A_OFFSET = RIGHT(A_OFFSET, 6, '0') A_OFFSET_H = X2C(A_OFFSET) RETURN /*========================= BUSCA_OFFSET =============================*/ BUSCA_OFFSET: NUMLIN = 0 "ISREDIT X ALL" "ISREDIT FIND 'LINE Ñ HEXLOC' 2 FIRST" "ISREDIT (NUMLIN) = CURSOR" IF NUMLIN = 0 THEN SAY 'Línea No Encontrada' VAR_LINHEX_ANT = '' I_BUSCAR = 'S' DO WHILE I_BUSCAR = 'S' NUMLIN = NUMLIN + 1 IF NUMLIN > CLIN THEN LEAVE "ISREDIT (WLINEA) = LINE" NUMLIN DO WHILE WLINEA <> '' PARSE VAR WLINEA 1 VAR_LINHEX +44 45 WLINEA +0 PARSE VAR VAR_LINHEX 2 VAR_NUMLIN +6, 9 VAR_OFFSET +6 16 VAR_CODINST +0 IF DATATYPE(VAR_NUMLIN) <> 'NUM' THEN ITERATE IF VAR_OFFSET = '' THEN ITERATE IF TRANSLATE(VAR_OFFSET, '', '0123456789ABCDEF') = '' THEN VAR_OFFSET_H = X2C(VAR_OFFSET) ELSE ITERATE IF VAR_OFFSET_H >> A_OFFSET_H THEN DO PARSE VAR VAR_LINHEX_ANT 2 VAR_NUMLIN +6 9 VAR_OFFSET +6, 16 VAR_CODINST +0 "ISREDIT FIND '" || VAR_NUMLIN || "' 4 FIRST" I_BUSCAR = 'N' LEAVE END VAR_LINHEX_ANT = VAR_LINHEX END END RETURN