BASE24 / NonStop
Compara dependencias de BIND LIST SOURCE FROM entre dos objetos: detecta archivos idénticos, movidos o distintos.
Esta herramienta espera la salida de una macro TACL. La macro ejecuta un FUP INFO del objeto para registrar su timestamp, después corre BIND LIST SOURCE FROM sobre el objeto, recorta la salida a las rutas de dependencias, y le hace FUP INFO a cada una para obtener su timestamp. Si no puede hacerle FUP INFO a una dependencia (equipo inaccesible, archivo no disponible al momento de ejecutarla), la marca con "---> file does not exist!!!". La salida completa de esta macro es lo que se pega tal cual en los cuadros de entrada de abajo.
?SECTION BLSF MACRO
== Verificamos si el archivo principal existe
[#IF NOT [#FILEINFO /EXISTENCE/ %1%] |THEN|
#OUTPUT ---> file does not exist!!!
#RETURN
]
== Timestamp del objeto principal en una linea
#OUTPUT
#OUTPUT OBJETO - TIMESTAMP:
#OUTPUT
fih %1%
#OUTPUT
#OUTPUT OBJETO - DEPENDENCIAS (BIND LIST SOURCE):
#OUTPUT
#PUSH CONTENIDO content lncnt lncnt2 NLINEA NLINEA2 LINEA LINEA2 CHPOS CHPOS2
#PUSH LINEAFIXED TIEMPO
BIND /OUTV CONTENIDO / LIST SOURCE FROM %1%
#SET lncnt2 [#LINECOUNT contenido]
#SET lncnt2 [#COMPUTE lncnt2 + 1]
#SET NLINEA2 1
[#LOOP
|WHILE| [NLINEA2] < [lncnt2]
|DO|
#LINEGETV contenido LINEA2 [NLINEA2] FOR 1
#SET CHPOS [#CHARFIND LINEA2 1 \]
[#IF ([CHPOS] > 0) |THEN|
==#OUTPUT [LINEA2]
#CHARGETV LINEA2 LINEAFIXED 1 to 34
==#OUTPUT LINEAFIXED:[LINEAFIXED]
== NUEVA VALIDACION
== Verificamos si el archivo extraido en LINEAFIXED realmente existe
[#IF NOT [#FILEINFO /EXISTENCE/ [LINEAFIXED]] |THEN|
#OUTPUT [LINEAFIXED] ---> file does not exist!!!
|ELSE|
== Si el archivo existe, ejecutamos el FUP INFO normalmente
FUP /OUTV content /INFO [LINEAFIXED]
#SET lncnt [#LINECOUNT content]
#SET lncnt [#COMPUTE lncnt + 1]
#SET NLINEA 1
[#LOOP
|WHILE| [NLINEA] < [lncnt]
|DO|
#LINEGETV content LINEA [NLINEA] FOR 1
#SET CHPOS2 [#CHARFIND LINEA 1 ,]
[#IF ([CHPOS2] > 0) |THEN|
#CHARGETV LINEA TIEMPO 28 for 24
#OUTPUT [LINEAFIXED] [TIEMPO]
]
#SET NLINEA [#COMPUTE NLINEA + 1]
]
==Fin del IF de existencia
]
]
#SET NLINEA2 [#COMPUTE NLINEA2 + 1]
]
El nombre de la macro (después de ?SECTION) es libre:
podés llamarla blsf, blsf3, o como
quieras. El nombre con el que la invocás en TACL depende de cómo
la hayas nombrado en tu archivo de macros.
Ejemplo de ejecución:
blsf $DATA5.BI1447SW.BNETQ
Ejemplo de salida (fragmento representativo):
OBJETO - TIMESTAMP:
$DATA5.BI1447SW
CODE EOF LAST MODIFIED OWNER RWEP PExt SExt
BNETQ 100 10047488 07AUG2026 7:51 111,183 NNNU 224 224
OBJETO - DEPENDENCIAS (BIND LIST SOURCE):
\PRODEV.$DATA5.BI1447SW.BNETD 75150 31Jul2026 11:22
\PRODEV.$DATA5.BI1447SW.BNETQ 8420 07Aug2026 7:51
\OMA3T06.$SWORD.BA10UTIL.UTILS ---> file does not exist!!!
Cómo agregarla a tu archivo de macros de TACL:
?SECTION hasta el último ], al final del archivo.Este procedimiento es genérico -- puede variar según cómo esté configurado tu perfil de TACL. Ajustalo a tu entorno si hace falta.
Esperando comparación...
Dependencias diferentes (sección 3), emparejadas, agrupadas por subvolumen del objeto 1 (línea en blanco entre grupos, misma posición en las 4 columnas). Rutas sin su nodo inicial. Se excluyen las diferencias sin par en ambos objetos. Cada columna es texto plano -- pegala directo en un editor de texto (Notepad).
Objeto 1 (Código Origen):
Objeto 2 (Código CSM):
Formato tabla (TAB) — para pegar en Word