*PSDCEB
      PROGRAMA 'ACTUALIZA DOCSIS'
      OPCION DISCO DOCSIS EXCLUSIVO
      DOCUMENTACION 1 5
*D
*D    ESTE PROGRAMA ACTUALIZA DOCSIS.
*D    PARA ELLO SE EJECUTAN 8 PASOS.
*D
*D    ANTES DE EJECUTAR ESTE PROGRAMA SE DEBE RESPALDAR LOS
*D    ARCHIVOS DE DOCSXX Y DOCSIS.
*D
*D    SI POR ALGUNA RAZON NO SE TERMINA ESTE PROCESO SE DEBERA
*D    BAJAR LOS RESPALDOS Y EJECUTAR NUEVAMENTE. SI ESTOS NO SE
*D    TIENEN SE DEBERA BORRAR DOCSIS Y CREARLO CON LAS DBD
*D    QUE TENIA.
*D
*D    LA DOCUMENTACION DE LOS TEMPORALES USADOS EN ESTE
*D    PROGRAMA SE DOCUMENTAN EN PSDCEA.
*D
*D    DAR EXPLICACION
*
      OPCION  TERMINAL  COL1. 20
      ESCRIBIR TERMINAL 'Esta opcion actualiza DOCSIS' $
                        'es para todas las DBD que se ' $
                        'tengan en el archivo.' ' ' ' '
*D
*D    REVISA QUE NO EXISTA EL ARCHIVO AUXACT.
*
      OPCION DISCO AUXACT EXCLUSIVO
      BUSCAR DISCO AUXACT EJECUTA 1 SEC-G1
      BORRAR ARCHIVO AUXACT
      FIN 'DCEB'
*D
*D    *****  PASO I
*D
*D    LEE LAS INICIALES DE LA DBD A ACTUALIZAR DEL R0
*
      IGUAL AREA N10 NERR
1     NERR = 0
      OPCION TERMINAL LET. 'ACTUALIZACION'     COL1.  20  COL2. 41
2     BUSCAR DISCO DOCSIS EJECUTA 700 SEC-G1
      LEER DISCO DOCSIS INI-DBD DIS-DBD
      ESCRIBIR  TERMINAL  INI-DBD   DIS-DBD  ' '
*D
*D    LLAMAR AL PROGRAMA 'DOCFT' PARA FORMAR LOS TEMPORALES
*D    QUE SE NECESITAN, PARA ELLO SE CREA EL TEMPORAL 901.
*
      OPCION TEMPORAL 901 ESCRITURA ASCII
      ESCRIBIR TEMPORAL 901 2 INI-DBD DIS-DBD 50 50
      LLAMAR 'DOCFT ' 901
*D
*D    *****  PASO II
*D
*D    AGREGAR AL R14 Y R15 LAS FECHAS QUE NO ESTEN, MODIFICAR
*D    O AGREGAR EN R6 Y R7 LOS SISTEMAS Y GRUPOS QUE NO ESTEN
*D    PARA ELLO SE SACA LA INFORMACION DEL T902.
*D
*D    BRINCARSE EL REGISTRO DE DISPOSITIVO
*
      OPCION TEMPORAL 902 LECTURA ASCII
      IGUAL DOCSIS DIS-DBD DIS-DBD-AUX
      LEER TEMPORAL 902 EJECUTA 60 DIS-DBD-AUX
      IGUAL AREA N10 N
      IGUAL AREA N10 IND
      IGUAL AREA N10 IND-EJE
*D
*D    AGREGAR AL R14 LAS FECHAS DE EJECUCION DE DBD, PARA ELLO
*D    SE LEEN 11 REGISTROS DEL TEMPORAL 902. EL MODULO DBD
*D    DEJA ESTA INFORMACION DE MAS ANTIGUA A NUEVA.
*D    SE PONE UN INDICADOR SI NO SE EJECUTO LA DBD,
*D    EN CUYO CASO SE BRINCA AL PASO VI (PROGRAMAS).
*
      IND-EJE = 0
      N = 11
10    LEER TEMPORAL 902 EJECUTA 60  IND FEC-EJE HOR-EJE $
                                    CTA-EJE
      SI IND <> 1 EJECUTA 11
      INSERTAR DISCO DOCSIS FEC-EJE HOR-EJE CTA-EJE
      IND-EJE = 1
11    N = N - 1
      SI N > 0 EJECUTA 10
*D
*D    SE REVISA EL R14 PARA DEJAR SOLAMENTE LAS ULTIMAS 10
*D    EJECUCIONES MAS LA FECHA DE INICIO.
*
      N = 0
      OPCION DISCO DOCSIS INICIO-R14
12    BUSCAR RECURRENTE DOCSIS 14 EJECUTA 13 ANT.
      N = N + 1
      EJECUTA 12
      IGUAL AREA N10 NLIM
13    NLIM = N - 10
14    BUSCAR RECURRENTE DOCSIS 14 EJECUTA 63 SIG.
      SI N > NLIM EJECUTA 15
      BORRAR RECURRENTE DOCSIS 14
15    N = N - 1
      SI N >= 2 EJECUTA 14
*D
*D    AGREGAR AL R15 LA FECHA DE ACTUALIZACION DE DOCSIS, PARA
*D    ELLO SE LEEN 10 REGISTROS DEL TEMPORAL 902. EL PROGRAMA
*D    DOCFT DEJA ESTA INFORMACION DE MAS ANTIGUA A NUEVA
*
      N = 10
20    LEER TEMPORAL 902 EJECUTA 60 IND FEC-ACT HOR-ACT $
                                   CTA-ACT
      SI IND <> 1 EJECUTA 21
      INSERTAR DISCO DOCSIS FEC-ACT HOR-ACT CTA-ACT
21    N = N - 1
      SI N > 0 EJECUTA 20
*D
*D    REVISA EL R15 PARA DEJAR SOLAMENTE LAS ULTIMAS 10 ACTUALIZACIONES
*
      N = 0
22    BUSCAR RECURRENTE DOCSIS 15 EJECUTA 23 ANT.
      N = N + 1
      EJECUTA 22
23    NLIM = N - 10
24    BUSCAR RECURRENTE DOCSIS 15 EJECUTA 64 SIG.
      SI N > NLIM EJECUTA 25
      BORRAR RECURRENTE DOCSIS 15
25    N = N - 1
      SI N >= 1 EJECUTA 24
*D
*D    DEJAR LA FECHA DE ULTIMA ACTUALIZACION PARA LOS PROGRAMAS
*
      BUSCAR RECURRENTE DOCSIS 15 EJECUTA 62 SUP.
      LEER DISCO DOCSIS FEC-ACT HOR-ACT
      MOVER FEC-ACT A FEC-ACT-PRO
      MOVER HOR-ACT A HOR-ACT-PRO
      SI IND-EJE = 0 EJECUTA 500
*D
*D    LEER LOS SISTEMAS Y GRUPOS DEL TEMPORAL, SI YA EXISTEN EN R6 Y R7
*D    MODIFICAR EL NOMBRE, SI NO INSERTARLOS. SE USA EL RESTO DE LA INF.
*D    DEL TEMPORAL 902. EL PROGRAMA DOCFT LOS DEJA EN EL MISMO
*D    ORDEN EN QUE APARECEN EN DBDSXX EN LAS DECLARACIONES
*D    DE D1 Y D2.
*
30    LEER TEMPORAL 902 EJECUTA 50 NUM-SIS NUM-GRU NOM-GRU
      SI NUM-GRU <> 0 EJECUTA 40
*     SI YA EXISTE EL SISTEMA, CAMBIAR NOMBRE
      MOVER NOM-GRU A NOM-SIS
      BUSCAR RECURRENTE DOCSIS 6 EJECUTA 31 INF. NUM-SIS
      ESCRIBIR DISCO DOCSIS NOM-SIS
      EJECUTA 30
31    TOT-NUM-GRU = 0
      INSERTAR DISCO DOCSIS NUM-SIS NOM-SIS TOT-NUM-GRU
      EJECUTA 30
*     REVISA QUE EXISTA EL SISTEMA, SI NO ERROR.
40    BUSCAR RECURRENTE DOCSIS 6 EJECUTA 61 INF. NUM-SIS
      LEER DISCO DOCSIS TOT-NUM-GRU
      TOT-NUM-GRU = TOT-NUM-GRU + 1
      ESCRIBIR DISCO DOCSIS TOT-NUM-GRU
*     SI YA EXISTE EL GRUPO, MODIFICA EL NOMBRE
      BUSCAR RECURRENTE DOCSIS 7 EJECUTA 41 INF. NUM-GRU
      ESCRIBIR DISCO DOCSIS NOM-GRU
      EJECUTA 30
41    TOT-NUM-PRO = 0
      INSERTAR DISCO DOCSIS NUM-GRU NOM-GRU TOT-NUM-PRO
      EJECUTA 30
*D
*D    SE REVISA SI UN SISTEMA NO TIENE GRUPOS EN CUYO CASO
*D    SE INSERTA EL GRUPO CERO.
*
50    OPCION DISCO DOCSIS INICIO-R6
      NUM-GRU = 0
      MOVER ' ' A NOM-GRU
      TOT-NUM-PRO = 0
51    BUSCAR RECURRENTE DOCSIS 6 EJECUTA 100 SIG.
      LEER DISCO DOCSIS TOT-NUM-GRU
      SI TOT-NUM-GRU <> 0 EJECUTA 51
      TOT-NUM-GRU = 1
      ESCRIBIR DISCO DOCSIS TOT-NUM-GRU
      INSERTAR DISCO DOCSIS NUM-GRU NOM-GRU TOT-NUM-PRO
      EJECUTA 51
*
*     ERRORES POR PROBLEMAS EN DOCFT O DBD.
*
60    ERROR 'ERROR 3 EN PSDCEB' 'EOF EN 902'
      FIN
61    ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR GRUPO' $
            'NO EXISTE SISTEMA'
      FIN
62    ERROR 'ERROR 1 EN PSDCEB' 'NO EXISTE FECHA DE ACT'
      FIN
63    ERROR 'ERROR 1 EN PSDCEB' 'EOF EN R14'
      FIN
64    ERROR 'ERROR 1 EN PSDCEB' 'EOF EN R15'
      FIN
*D
*D    *****  PASO III
*D
*D    SE BORRA LA INF DE *D DE DBD, O SEA EL R16 Y SE
*D    INSERTAN LOS NUEVOS. ESTO SE TIENE QUE HACER PORQUE
*D    NO SE SABE SI CAMBIO. SE LEE EL T903 Y SE INSERTA EN R16.
*
100   BUSCAR RECURRENTE DOCSIS 16 EJECUTA 101 SIG.
      BORRAR RECURRENTE DOCSIS 16
      EJECUTA 100
101   OPCION TEMPORAL 903 LECTURA ASCII
102   LEER TEMPORAL 903 EJECUTA 200 DES-DBD1 DES-DBD2
      INSERTAR DISCO DOCSIS DES-DBD1 DES-DBD2
      EJECUTA 102
*D
*D    *****  PASO IV
*D
*D    SE PASAN LOS ARCHIVOS QUE HAY EN LA DBD O SEA EL R1
*D    A UN ARCHIVO DE PASO, LOS ARCHIVOS QUE VIENEN EN EL T904
*D    SE BORRAN DE ESTE ARCHIVO. LO ANTERIOR SE HACE PARA REVISAR
*D    QUE NO SE BORRE UN ARCHIVO Y ESTE SE SIGA USANDO EN
*D    ALGUN PROGRAMA.
*
200   ARC-TAB = 1
201   BUSCAR RECURRENTE DOCSIS 1 EJECUTA 300 SIG.
      LEER DISCO DOCSIS NOM-PER
      MOVER NOM-PER A NOM-AUX
      INSERTAR DISCO AUXACT NOM-AUX ARC-TAB INI-DBD
      EJECUTA 201
*D
*D    SE LEE UN REGISTRO DEL TEMPORAL 904 CON LA INFORMACION
*D    GENERAL DE UN ARCHIVO Y SE BORRA DE AUXACT SI EXISTE.
*D
*D    SE BORRA EL R1 SI EXISTE Y SE INSERTA COMO SI FUERA NUEVO,
*D    SI YA NO HAY REGISTROS EN T904 SIGNIFICA NO HAY MAS ARCHIVOS
*
300   OPCION TEMPORAL 904 LECTURA ASCII
      IGUAL AREA N10 GRUPOS
      IGUAL AREA N10 VARIABLES
301   LEER TEMPORAL 904 EJECUTA 400 NOM-PER NOM-PER-EXT $
           DIS-PER TOT-NUM-REC GRUPOS VARIABLES SEC-PER
      MOVER NOM-PER A NOM-AUX
      BUSCAR DISCO AUXACT EJECUTA 302 PRIN-G1 NOM-AUX ARC-TAB INI-DBD
      BORRAR DISCO AUXACT
      BUSCAR RECURRENTE DOCSIS 1 EJECUTA 396 SUP. NOM-PER
      BORRAR RECURRENTE DOCSIS 1
302   INSERTAR DISCO DOCSIS NOM-PER NOM-PER-EXT DIS-PER $
                TOT-NUM-REC   SEC-PER
*D
*D    SE LEEN N REGISTROS DEL 904 (N = NUMERO DE RECURRENTES + 1)
*D    CON LA INFORMACION DE LOS RECURRENTES Y SE FORMA R2
*D    SE CALCULA EL NIVEL MAXIMO DEL ARCHIVO EN SUS RECURRENTES
*
      NIV-MAX = 1
      N = TOT-NUM-REC + 1
310   SI N = 0 EJECUTA 313
      LEER TEMPORAL 904 EJECUTA 390 NUM-REC NUM-REC-DEP $
                 NIV-REC ORD-IMP  NOM-REC
*     REVISA QUE NO ESTE DUPLICADO EN RECURRENTE
      BUSCAR RECURRENTE DOCSIS 2 EJECUTA 311 INF. NUM-REC
      EJECUTA 391
311   INSERTAR DISCO DOCSIS NUM-REC NUM-REC-DEP $
                 NIV-REC ORD-IMP NOM-REC
      SI NIV-REC <= NIV-MAX EJECUTA 312
      NIV-MAX = NIV-REC
312   N = N - 1
      EJECUTA 310
313   ESCRIBIR DISCO DOCSIS NIV-MAX
*D
*D    SE LEEN N REGISTROS DEL 904 (N = GRUPOS) CON LA
*D    INFORMACION DE NOMBRE DE GRUPOS DE VARIABLES PARA
*D    CAS Y SE FORMA EL R3
*
      N = GRUPOS
321   SI N = 0 EJECUTA 330
      LEER TEMPORAL 904 EJECUTA 390 NUM-GRU-CAS $
                   NUM-REC NOM-GRU-CAS
*     REVISA EXISTA EL RECURRENTE Y QUE NO ESTE DUPLICADO EL GRUPO
      BUSCAR RECURRENTE DOCSIS 2 EJECUTA 392 INF. NUM-REC
      BUSCAR RECURRENTE DOCSIS 3 EJECUTA 322 INF. NUM-GRU-CAS
      EJECUTA 393
322   INSERTAR DISCO DOCSIS NUM-GRU-CAS NOM-GRU-CAS
      N = N - 1
      EJECUTA 321
*D
*D    SE LEEN N REGISTROS DEL 904 (N = VARIABLES) CON LA
*D    INFORMACION DE LAS VARIABLES DE CADA GRUPO Y SE FORMA
*D    EL R4. EN CASO DE QUE EL GRUPO DE LA VARIABLE SEA EL
*D    CERO (NO PERTENECE A NINGUNO) SE CREA SI NO EXISTE.
*
330   N = VARIABLES
      MOVER ' ' A NOM-GRU-CAS
331   SI N = 0 EJECUTA 301
      LEER TEMPORAL 904 EJECUTA 390 NUM-REC NUM-GRU-CAS SIM-LLA $
                        NOM-VAR-DBD NOM-VAR-CRT
*     BUSCAR EL RECURRENTE Y GRUPO DE LA VARIABLE
      BUSCAR RECURRENTE DOCSIS 2 EJECUTA 394 INF. NUM-REC
      BUSCAR RECURRENTE DOCSIS 3 EJECUTA 332 INF. NUM-GRU-CAS
      EJECUTA 333
332   SI NUM-GRU-CAS <> 0 EJECUTA 395
*     INSERTAR GRUPO CERO
      INSERTAR DISCO DOCSIS NUM-GRU-CAS NOM-GRU-CAS
333   INSERTAR DISCO DOCSIS  NOM-VAR-DBD NOM-VAR-CRT SIM-LLA
      N = N - 1
      EJECUTA 331
*
*     ERRORES POR PROBLEMAS DE DOCFT O DBD
*
390   ERROR 'ERROR 3 EN PSDCEB' 'EOF EN 904'
      FIN
391   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR RECURRENTE' $
                'ESTA DUPLICADO'
      FIN
392   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR GRUPO' $
                'NO EXISTE RECURRENTE'
      FIN
393   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR GRUPO' $
                'ESTA DUPLICADO'
      FIN
394   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR VARIABLE' $
            'NO EXISTE RECURRENTE'
      FIN
395   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR VARIABLE' $
            'NO EXISTE GRUPO'
      FIN
396   ERROR 'ERROR 1 EN PSDCEB' 'R1 INCONSISTENTE CON AUXACT'
      FIN
*D
*D    *****  PASO V
*D
*D    AL IGUAL QUE EN LOS ARCHIVOS, PASAR LOS NOMBRES DE TABLAS
*D    A AUXACT, LUEGO SE REVISA QUE LAS QUE SE QUITARON NO SE
*D    USEN EN NINGUN PROGRAMA.
*
400   ARC-TAB = 2
401   BUSCAR RECURRENTE DOCSIS 5 EJECUTA 402 SIG.
      LEER DISCO DOCSIS NOM-TAB
      MOVER NOM-TAB A NOM-AUX
      INSERTAR DISCO AUXACT NOM-AUX ARC-TAB INI-DBD
      EJECUTA 401
*D
*D    LEER EL T905 Y FORMAR EL R5
*
402   OPCION TEMPORAL 905 LECTURA ASCII
403   LEER TEMPORAL 905 EJECUTA 500 NOM-TAB NOM-TAB-EXT SEC-TAB
      MOVER NOM-TAB A NOM-AUX
      BUSCAR DISCO AUXACT EJECUTA 404 PRIN-G1 NOM-AUX ARC-TAB INI-DBD
      BORRAR DISCO AUXACT
      BUSCAR RECURRENTE DOCSIS 5 EJECUTA 410 SUP. NOM-TAB
      BORRAR RECURRENTE DOCSIS 5
404   INSERTAR DISCO DOCSIS NOM-TAB NOM-TAB-EXT SEC-TAB
      EJECUTA 403
410   ERROR 'ERROR 1 EN PSDCEB' 'AUXACT Y R5 INCONSITENTES'
      FIN
*D
*D    *****  PASO VI
*D
*D    FORMAR INFORMACION DE PROGRAMAS CON EL TEMPORAL 906
*
      IGUAL AREA N10 NPER
      IGUAL AREA N10 NTAB
      IGUAL AREA N10 NTEM
      IGUAL AREA N10 INDE
      IGUAL AREA N10 CEA
500   OPCION IMPRIMIR LET. 'ERRORES DE ACTUALIZACION' FECHA FEC $
          ENC. 5 NOM-PRO 15 DIS-PRO ENC. 15 'CAUSA DEL ERROR' $
          55 'ACCION TOMADA'
      SACAR PARAMETROS FECHA FEC
      OPCION TEMPORAL 906 LECTURA ASCII
*D
*D    SE LEE UN REG DEL T906 CON INFORMACION GENERAL DE UN
*D    PROGRAMA, SI NO HAY MAS REG NO HAY MAS PROGRAMAS
*
501   LEER TEMPORAL 906 EJECUTA 600 NOM-PRO DIS-PRO $
          INDE CEA NOM-PRO-EXT FEC-COM HOR-COM $
          NPER NTEM NTAB NUM-SIS NUM-GRU TOT-MEM CTA-COM
*D
*D    REVISA SI NO SE PUDO ABRIR EL ESXXYY O EL PSXXYY PARA
*D    INCLUIRLO EN EL REPORTE DE ACTUALIZACION
*
      SI INDE =  0 EJECUTA 503
      SI INDE = 2  EJECUTA 502
      SI INDE = 3  EJECUTA 5020
      IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
           15 'NO SE PUEDE ABRIR ESXXYY' 45 CEA  $
           55 'NO SE INCLUYE EN DOCSIS'
      NERR = NERR + 1
      EJECUTA 501
502   IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
         15 'NO SE PUEDE ABRIR PSXXYY' 45 CEA $
         55 'NO SE INCLUYE EN DOCSIS'
      NERR = NERR + 1
      EJECUTA 501
5020  IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
           15 'ESXXYY INVALIDO' 45 'NO SE INCLUYE EN DOCSIS'
      NERR = NERR + 1
      EJECUTA 501
*D
*D    SE REVISA SI YA EXISTE EL PROGRAMA EN CUYO CASO
*D    SE BORRA Y SE DISMINUYE EN 1 LOS PROGRAMAS DEL GRUPO
*D    SE REVISA QUE SEA DEL MISMO DISPOSITIVO PARA BORRARLO
*D    SI NO ES ERROR POR EXISTIR DOS PROGRAMAS CON EL MISMO
*D    NOMBRE EN DIFERENTES DISPOSITIVOS.
*
503   BUSCAR DISCO DOCSIS EJECUTA 505 PRIN-G2 NOM-PRO
      IGUAL DOCSIS DIS-PRO DIS-PRO-AUX
      LEER DISCO DOCSIS DIS-PRO-AUX
      SI DIS-PRO = DIS-PRO-AUX EJECUTA 504
      IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
          15 'YA EXISTE EN OTRO DISPOSITIVO' $
          45 'NO SE INCLUYE EN DOCSIS'
      NERR = NERR + 1
      EJECUTA 550
504   BORRAR RECURRENTE DOCSIS 8
      LEER DISCO DOCSIS TOT-NUM-PRO
      TOT-NUM-PRO = TOT-NUM-PRO - 1
      ESCRIBIR DISCO DOCSIS TOT-NUM-PRO
*D
*D    SE BUSCA EL SISTEMA Y GRUPO DEL PROGRAMA, SI NO EXISTE
*D    ALGUNO DE LOS DOS SE REPORTA Y SE PONE EN EL SISTEMA
*D    CERO ES DECIR NO DOCUMENTADO.
*
505   BUSCAR DISCO DOCSIS EJECUTA 595 PRIN-G1 INI-DBD
      BUSCAR RECURRENTE DOCSIS 6 EJECUTA 506 INF. NUM-SIS
      BUSCAR RECURRENTE DOCSIS 7 EJECUTA 507 INF. NUM-GRU
      EJECUTA 510
506   IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
            15 'NO EXISTE SISTEMA' 45 NUM-SIS  $
            55 'SE PONE EN NO DOCUMENTADO'
      EJECUTA 508
507   IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
            15 'NO EXISTE EL GRUPO' 45 NUM-GRU  $
            55 'SE PONE EN NO DOCUMENTADO'
508   NERR = NERR + 1
      NUM-SIS = 0
      NUM-GRU = 0
      BUSCAR RECURRENTE DOCSIS 6 EJECUTA 509 INF. NUM-SIS
      BUSCAR RECURRENTE DOCSIS 7 EJECUTA 594 INF. NUM-GRU
      EJECUTA 510
*D
*D    EN CASO DE QUE EL SISTEMA 0 (NO DOCUMENTADOS) NO
*D    EXISTA PARA ESTA DBD SE CREA.
*
509   MOVER 'NO DOCUMENTADOS' A NOM-SIS
      TOT-NUM-GRU = 1
      MOVER ' '  A NOM-GRU
      TOT-NUM-PRO = 0
      INSERTAR DISCO DOCSIS NUM-SIS NOM-SIS TOT-NUM-GRU
      INSERTAR DISCO DOCSIS NUM-GRU NOM-GRU TOT-NUM-PRO
*
*     PONER UN PROGRAMA MAS E INSERTAR R8
*
510   LEER DISCO DOCSIS TOT-NUM-PRO
      TOT-NUM-PRO = TOT-NUM-PRO + 1
      ESCRIBIR DISCO DOCSIS TOT-NUM-PRO
      INSERTAR DISCO DOCSIS NOM-PRO DIS-PRO NOM-PRO-EXT $
             FEC-COM HOR-COM TOT-MEM CTA-COM FEC-ACT-PRO HOR-ACT-PRO
*
*     MOVER NOMBRE DEL PROGRAMA A VARIABLES USADAS PARA
*     QUITAR DUPLICACION DE LLAVES
*
      MOVER NOM-PRO A PER-PRO
      MOVER NOM-PRO A TAB-PRO
      MOVER NOM-PRO A TEM-PRO
*D
*D    LEER N REG DEL T906 (N = NPER) CON LA INFORMACION DE
*D    ARCHIVOS PERMANENTES QUE USA EL PROGRAMA Y FORMAR
*D    EL R9
*
      N = NPER
520   SI N = 0 EJECUTA 530
      IGUAL AREA N10 NREC
      LEER TEMPORAL 906 EJECUTA 590 NOM-PER-PRO NREC
*
*     REVISA QUE EXISTA EL ARCHIVO EN EL R2 Y LEER TOTAL DE RECURRENTES
*     PARA PODER VALIDAR RANGO
*
      MOVER NOM-PER-PRO A NOM-PER
      BUSCAR RECURRENTE DOCSIS 1 EJECUTA 591 INF. NOM-PER
      LEER DISCO DOCSIS TOT-NUM-REC
      INSERTAR DISCO DOCSIS NOM-PER-PRO PER-PRO
*D
*D    LEER N REG EN EL T906 (N = NREC) CON LA INFORMACION
*D    DE COMO SE USA CADA RECURRENTE DEL ARCHIVO Y FORMAR
*D    EL R10
*
521   SI NREC = 0 EJECUTA 522
      LEER TEMPORAL 906 EJECUTA 590 NUM-REC-PRO USO-REC-PRO
      SI NUM-REC-PRO < 0 EJECUTA 592
      SI NUM-REC-PRO > TOT-NUM-REC EJECUTA 592
      INSERTAR DISCO DOCSIS NUM-REC-PRO USO-REC-PRO
      NREC = NREC - 1
      EJECUTA 521
*
*     TOMAR OTRO PERMANENTE
*
522   N = N - 1
      EJECUTA 520
*D
*D    LEER N REG DEL  T906 (N = NTEM) CON LA INFORMACION
*D    DE LOS TEMPORALES USADOS POR EL PROGRAMA Y FORMAR R11
*
530   N = NTEM
531   SI N = 0 EJECUTA 535
      LEER TEMPORAL 906 EJECUTA 590 NOM-TEM-PRO LON-MEN LON-MAY $
              USO-TEM
      INSERTAR DISCO DOCSIS NOM-TEM-PRO TEM-PRO LON-MEN LON-MAY USO-TEM
      N = N - 1
      EJECUTA 531
*D
*D    SE LEE UN REG CON INFORMACION DE SEGURIDAD Y LUEGO
*D    N REG (N = TOT-NUM-SEG) CON LAS OPCIONES SEG.
*
535   LEER TEMPORAL 906 EJECUTA 590 SEG-ESC SEG-LEC TOT-NUM-SEG
      ESCRIBIR DISCO DOCSIS SEG-ESC SEG-LEC TOT-NUM-SEG
      N = TOT-NUM-SEG
536   SI N = 0 EJECUTA 540
      LEER TEMPORAL 906 EJECUTA 590 NUM-SEG
      INSERTAR DISCO DOCSIS NUM-SEG
      N = N - 1
      EJECUTA 536
*D
*D    LEER N REG DEL T906 (N = NTAB) CON LA INFORMACION
*D    DE TABLAS USADAS POR EL PROGRAMA Y FORMAR EL R12
*
540   N = NTAB
541   SI N = 0 EJECUTA 501
      LEER TEMPORAL 906 EJECUTA 590 NOM-TAB-PRO
*
*     REVISA QUE EXISTA EN EN R5
*
      MOVER NOM-TAB-PRO A NOM-TAB
      BUSCAR RECURRENTE DOCSIS 5 EJECUTA 593 INF. NOM-TAB
      INSERTAR DISCO DOCSIS NOM-TAB-PRO TAB-PRO
      N = N - 1
      EJECUTA 541
*D
*D    EN CASO DE ERROR, BRINCARSE HASTA EL SIGUIENTE PROGRAMA
*
550   N = NPER
551   SI N = 0 EJECUTA 555
      LEER TEMPORAL 906 EJECUTA 590 NOM-PER-PRO NREC
552   SI NREC = 0 EJECUTA 553
      LEER TEMPORAL 906 EJECUTA 590 NUM-REC-PRO USO-REC-PRO
      NREC = NREC - 1
      EJECUTA 552
553   N = N - 1
      EJECUTA 551
555   N = NTEM
556   SI N = 0 EJECUTA 560
      LEER TEMPORAL 906 EJECUTA 590 NOM-TEM-PRO  LON-MEN LON-MAY $
                USO-TEM
      N = N - 1
      EJECUTA 556
560   LEER TEMPORAL 906 EJECUTA 590 SEG-ESC SEG-LEC TOT-NUM-SEG
      N = TOT-NUM-SEG
561   SI N = 0 EJECUTA 565
      LEER TEMPORAL 906 EJECUTA 590 NUM-SEG
      N = N - 1
      EJECUTA 561
565   N = NTAB
566   SI N = 0 EJECUTA 501
      LEER TEMPORAL 906 EJECUTA 590 NOM-TAB-PRO
      N = N - 1
      EJECUTA 566
*
*     ERRORES POR PROBLEMAS EN DOCFT
*
590   ERROR 'ERROR 3 EN PSDCEB' 'EOF EN 906'
      FIN
591   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR PROGRAMA' $
            'NO EXISTE ARCHIVO'
      FIN
592   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR PROGRAMA'   $
            'RECURRENTE FUERA DE RANGO'
      FIN
593   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR PROGRAMA'   $
            'NO EXISTE TABLA'
      FIN
594   ERROR 'ERROR 1 EN PSDCEB' 'NO HAY GRUPO DEL SISTEMA 0'
      FIN
595   ERROR 'ERROR 1 EN PSDCEB' 'EN 500 NO EXISTE LA DBD'
      FIN
*D
*D    *****  PASO VII
*D
*D    FORMAR LOS REGISTROS DE *D DE LOS PROGRAMAS. CON INF. DE T907
*D
*
600   OPCION TEMPORAL 907 LECTURA ASCII
      IGUAL DOCSIS NOM-PRO NOM-PRO-ANT
      MOVER ' ' A NOM-PRO-ANT
*D
*D    SE LEE UN REGISTRO EN T907 CON EL NOMBRE DEL PROGRAMA
*D    Y SE FORMA EL R13 CON LA INFORMACION DE *D
*
601   LEER TEMPORAL 907 EJECUTA 603 NOM-PRO DES-PR1 DES-PR2
      SI NOM-PRO = NOM-PRO-ANT EJECUTA 602
*
*     REVISA SI ESTA EL PROGRAMA  Y DEFINIR NOMBRE ANTERIOR
*
      BUSCAR DISCO DOCSIS EJECUTA 690 PRIN-G2 NOM-PRO
      MOVER NOM-PRO A NOM-PRO-ANT
*
*     INSERTARLO EN R13
*
602   INSERTAR DISCO DOCSIS DES-PR1 DES-PR2
      EJECUTA 601
*D
*D    POSICIONAR EL LA MISMA DBD Y BORRAR LOS TEMPORALES
*
603   BUSCAR DISCO DOCSIS EJECUTA 691 PRIN-G1 INI-DBD
      OPCION TEMPORAL 901 BORRAR
      OPCION TEMPORAL 902 BORRAR
      OPCION TEMPORAL 903 BORRAR
      OPCION TEMPORAL 904 BORRAR
      OPCION TEMPORAL 905 BORRAR
      OPCION TEMPORAL 906 BORRAR
      OPCION TEMPORAL 907 BORRAR
      EJECUTA 2
*
*     ERRORES POR PROBLEMAS EN DOCFT O EN ESTE PROGRAMA
*
690   ERROR 'ERROR 3 EN PSDCEB' 'AL INSERTAR *D' $
            'NO EXISTE PROGRAMA'
      FIN
691   ERROR 'ERROR 1 EN PSDCEB' 'EN 600 NO EXISTE DBD'
      FIN
*D
*D    *****  PASO VIII
*D
*D    REVISA SI LOS ARCHIVOS Y TABLAS QUE NO SE BORRARON
*D    DE AUXACT SE USAN EN PROGRAMAS.
*D    PARA ELLO SE LEE EN FORMA SECUENCIAL AUXACT, Y SE
*D    BUSCA POR NO PRINCIPAL CON ESE NOMBRE DE ARCHIVO
*D    EN EL GRUPO DE LLAVES 3, SI NINGUNO LO TIENE
*D    SE BORRA EL ARCHIVO DEL R1.
*D    EL MISMO PROCESO SE SIGUE PARA LAS TABLAS
*D    EN AMBOS CASOS ES NECESARIO REVISAR QUE LA DBD DEL
*D    PROGRAMA SEA LA MISMA DEL ARCHIVO O TABLA YA QUE
*D    SE PUEDE TENER EL MISMO NOMBRE EN DIFERENTES DBD.
*
      IGUAL DOCSIS INI-DBD INI-DBD-PRO
700   BUSCAR DISCO AUXACT EJECUTA 750 SEC-G1
      LEER DISCO AUXACT NOM-AUX ARC-TAB INI-DBD
      IGUAL AREA N10 IND-USO
      IND-USO = 0
      SI ARC-TAB = 1 EJECUTA 701
      SI ARC-TAB = 2 EJECUTA 710
      EJECUTA 740
701   MOVER NOM-AUX A NOM-PER-PRO
702   BUSCAR DISCO DOCSIS EJECUTA 703 NO-PRIN-G3 NOM-PER-PRO
      LEER DISCO DOCSIS INI-DBD-PRO
      SI INI-DBD-PRO <> INI-DBD EJECUTA 702
      IND-USO = 1
      LEER DISCO DOCSIS NOM-PRO DIS-PRO
      IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
        15 'SE USA UN ARCHIVO QUE NO EXISTE'  $
        90 'NO SE BORRA EL ARCHIVO'
      EJECUTA 702
703   SI IND-USO <> 0 EJECUTA 700
      BUSCAR DISCO DOCSIS EJECUTA 741 PRIN-G1 INI-DBD
      MOVER NOM-AUX A NOM-PER
      BUSCAR RECURRENTE DOCSIS 1 EJECUTA 742 SUP. NOM-PER
      BORRAR RECURRENTE DOCSIS 1
      EJECUTA 700
710   MOVER NOM-AUX A NOM-TAB-PRO
      IND-USO = 0
711   BUSCAR DISCO DOCSIS EJECUTA 712 NO-PRIN-G5 NOM-TAB-PRO
      LEER DISCO DOCSIS INI-DBD-PRO
      SI INI-DBD-PRO <> INI-DBD EJECUTA 711
      IND-USO = 1
      LEER DISCO DOCSIS NOM-PRO DIS-PRO
      IMPRIMIR DETALLE 5 NOM-PRO 15 DIS-PRO / $
       15 'SE USA UNA TABLA QUE NO EXISTE'  $
       55 'NO SE BORRA LA TABLA'
      EJECUTA 711
712   SI IND-USO <> 0 EJECUTA 700
      BUSCAR DISCO DOCSIS EJECUTA 741 PRIN-G1 INI-DBD
      MOVER NOM-AUX A NOM-TAB
      BUSCAR RECURRENTE DOCSIS 5 EJECUTA 743 SUP. NOM-TAB
      BORRAR RECURRENTE DOCSIS 5
      EJECUTA 700
740   ERROR 'ERROR 1 EN PSDCEB' 'ARC-TAB NO ES 1 O 2'
      FIN
741   ERROR 'ERROR 1 EN PSDCEB' 'EN 700 NO EXISTE LA DBD'
      FIN
742   ERROR 'ERROR 1 EN PSDCEB' 'NO SE ENCUENTA EL ARCHIVO'
      FIN
743   ERROR 'ERROR 1 EN PSDCEB' 'NO SE ENCUENTRA LA TABLA'
      FIN
*
*D    TERMINAR EL PROCESO, BORRAR TEMPORALES Y REPORTAR
*D    SI HAY ERRORES QUE SE REVISEN.
*
750   BORRAR ARCHIVO AUXACT
      SI NERR <> 0 EJECUTA 751
      ESCRIBIR TERMINAL 'ACTUALIZACION COMPLETA'
      EJECUTA 752
751   ESCRIBIR TERMINAL 'SE TIENEN PROGRAMAS NO DOCUMENTADOS' $
                        'O CON NOMBRES DUPLICADOS. ES NECESARIO' $
                        'REVISAR EL REPORTE DE ERRORES'
      IGUAL AREA N10 IND-BATCH
752   SACAR PARAMETROS BATCH IND-BATCH
      SI IND-BATCH <> 0 EJECUTA 753
      FIN 'DCME'
753   FIN
