* PSDCE6
*D
*D    ESTE PROGRAMA SIRVE PARA LISTAR LAS ESTADISTICAS DE USO
*D    DE UN PROGRAMA EN QUE SE PUSO LA OPCION *EST-USO*
*D    EL PRIMER PASO ES LEER EL NOMBRE Y DISPOSITIVO DEL
*D    PROGRAMA Y LLAMAR A EUFT PARA SACAR LA INFORMACION DE
*D    ESXXYY
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      PROGRAMA 'ESTADISTICAS DE USO DE UN PROGRAMA'
      DOCUMENTACION 2 0
      OPCION TERMINAL AREA 1 /RENGLON /POS. 1 1 /LONG. 1 10 /CAMPOS ' '
IGUAL AREA C-PRO-ARC VEC
IGUAL AREA C-HR      I
VECTOR VEC RANGO 1 120
MOVER 'ESSIWU' A VEC (   1 )
MOVER 'ESSITW' A VEC (   2 )
MOVER 'ESSIL4' A VEC (   3 )
MOVER 'ESSIOF' A VEC (   4 )
MOVER 'ESSIU0' A VEC (   5 )
MOVER 'ESSIT1' A VEC (   6 )
MOVER 'ESSIT0' A VEC (   7 )
MOVER 'ESSIT6' A VEC (   8 )
MOVER 'ESSIMC' A VEC (   9 )
MOVER 'ESSINW' A VEC (  10 )
MOVER 'ESSIUG' A VEC (  11 )
MOVER 'ESSI4A' A VEC (  12 )
MOVER 'ESSINK' A VEC (  13 )
MOVER 'ESSIIE' A VEC (  14 )
MOVER 'ESSIIH' A VEC (  15 )
MOVER 'ESSI0B' A VEC (  16 )
MOVER 'ESSI2A' A VEC (  17 )
MOVER 'ESSILF' A VEC (  18 )
MOVER 'ESSIV1' A VEC (  19 )
MOVER 'ESSITA' A VEC (  20 )
MOVER 'ESSIV7' A VEC (  21 )
MOVER 'ESSILR' A VEC (  22 )
MOVER 'ESSIL8' A VEC (  23 )
MOVER 'ESSICI' A VEC (  24 )
MOVER 'ESSILA' A VEC (  25 )
MOVER 'ESSILN' A VEC (  26 )
MOVER 'ESSIVM' A VEC (  27 )
MOVER 'ESSIV9' A VEC (  28 )
MOVER 'ESSIS0' A VEC (  29 )
MOVER 'ESSIW0' A VEC (  30 )
MOVER 'ESSIMW' A VEC (  31 )
MOVER 'ESSIWR' A VEC (  32 )
MOVER 'ESSIIN' A VEC (  33 )
MOVER 'ESSILL' A VEC (  34 )
MOVER 'ESSILH' A VEC (  35 )
MOVER 'ESSIMS' A VEC (  36 )
MOVER 'ESSILQ' A VEC (  37 )
MOVER 'ESSIIB' A VEC (  38 )
MOVER 'ESSIMV' A VEC (  39 )
MOVER 'ESSIIO' A VEC (  40 )
MOVER 'ESSICP' A VEC (  41 )
MOVER 'ESSIIA' A VEC (  42 )
MOVER 'ESSIMI' A VEC (  43 )
MOVER 'ESSIIY' A VEC (  44 )
MOVER 'ESSIIF' A VEC (  45 )
MOVER 'ESSI1A' A VEC (  46 )
MOVER 'ESSILT' A VEC (  47 )
MOVER 'ESSILU' A VEC (  48 )
MOVER 'ESSISS' A VEC (  49 )
MOVER 'ESSINA' A VEC (  50 )
MOVER 'ESSIVF' A VEC (  51 )
MOVER 'ESSITR' A VEC (  52 )
MOVER 'ESSITV' A VEC (  53 )
MOVER 'ESSIMA' A VEC (  54 )
MOVER 'ESSITU' A VEC (  55 )
MOVER 'ESSIIX' A VEC (  56 )
MOVER 'ESSIUP' A VEC (  57 )
MOVER 'ESSIID' A VEC (  58 )
MOVER 'ESSILB' A VEC (  59 )
MOVER 'ESSIWV' A VEC (  60 )
MOVER 'ESSIWX' A VEC (  61 )
MOVER 'ESSIWZ' A VEC (  62 )
MOVER 'ESSIVS' A VEC (  63 )
MOVER 'ESSIVR' A VEC (  64 )
MOVER 'ESSITB' A VEC (  65 )
MOVER 'ESSITN' A VEC (  66 )
MOVER 'ESSILM' A VEC (  67 )
MOVER 'ESSILI' A VEC (  68 )
MOVER 'ESSIVQ' A VEC (  69 )
MOVER 'ESSITI' A VEC (  70 )
MOVER 'ESSITO' A VEC (  71 )
MOVER 'ESSIIT' A VEC (  72 )
MOVER 'ESSIIQ' A VEC (  73 )
MOVER 'ESSICO' A VEC (  74 )
MOVER 'ESSI5L' A VEC (  75 )
MOVER 'ESSIL7' A VEC (  76 )
MOVER 'ESSILC' A VEC (  77 )
MOVER 'ESSI8A' A VEC (  78 )
MOVER 'ESSITX' A VEC (  79 )
MOVER 'ESSIIR' A VEC (  80 )
MOVER 'ESSIPE' A VEC (  81 )
MOVER 'ESSIIC' A VEC (  82 )
MOVER 'ESSIIV' A VEC (  83 )
MOVER 'ESSIIL' A VEC (  84 )
MOVER 'ESSITL' A VEC (  85 )
MOVER 'ESSITY' A VEC (  86 )
MOVER 'ESSII5' A VEC (  87 )
MOVER 'ESSII3' A VEC (  88 )
MOVER 'ESSILG' A VEC (  89 )
MOVER 'ESSIL1' A VEC (  90 )
MOVER 'ESSIML' A VEC (  91 )
MOVER 'ESSIIS' A VEC (  92 )
MOVER 'ESSILP' A VEC (  93 )
MOVER 'ESSIMR' A VEC (  94 )
MOVER 'ESSII8' A VEC (  95 )
MOVER 'ESSIM0' A VEC (  96 )
MOVER 'ESSITS' A VEC (  97 )
MOVER 'ESSII4' A VEC (  98 )
MOVER 'ESSII9' A VEC (  99 )
MOVER 'ESSIN9' A VEC ( 100 )
MOVER 'ESSIRL' A VEC ( 101 )
MOVER 'ESSIRB' A VEC ( 102 )
MOVER 'ESSIRJ' A VEC ( 103 )
MOVER 'ESSIRA' A VEC ( 104 )
MOVER 'ESSIRM' A VEC ( 105 )
MOVER 'ESSIRF' A VEC ( 106 )
MOVER 'ESSINT' A VEC ( 107 )
MOVER 'ESSIRR' A VEC ( 108 )
MOVER 'ESSIRE' A VEC ( 109 )
MOVER 'ESSII1' A VEC ( 110 )
MOVER 'ESSITQ' A VEC ( 111 )
MOVER 'ESSII7' A VEC ( 112 )
MOVER 'ESSIVP' A VEC ( 113 )
      OPCION DISCO SIUS EXCLUSIVO
      SI 1 <> 1 OPCION TERMINAL AREA 1 /DESPLEGAR
      MOVER 'NO' A PRE-LIS-EX
      MOVER 'C:\FUENTES\SIS\SIC\E51' A DIS-PROG-EU
*
*
      OPCION TERMINAL AREA 102 /ERROR /POS. 22 1 /LONG. 2 80
      I = 0
10    SI I = 113 FIN
      I = I + 1
      SI I = 113 FIN
      SI I = 4 I = 6
      I = 113
      MOVER VEC ( I ) A NOM-PROG-EU
      OPCION TEMPORAL 901 ESCRITURA ASCII
      OPCION TEMPORAL 902
      OPCION TEMPORAL 903
      OPCION TEMPORAL 904
      ESCRIBIR TEMPORAL 901 NOM-PROG-EU DIS-PROG-EU
      LLAMAR 'EUFT  ' 901
      EJECUTA 14
*
*D
*D    LOS TEMPORALES CREADOS POR *EUFT* CONTIENEN:
*D
*D    ****************    EL T902 CONTIENE :   **********************
*D
*D    UN REGISTRO CON:
*D
*D       X6        PSXXYY
*D       X30       DISPOSITIVO
*D       X40       NOMBRE DEL PROGRAMA
*D       N1  0     0=NO HAY ERROR, 1=ERROR EN ESXXYY, 2=NO TIENE LA OPCION
*D       N1  0     CODIGO DEL ERROR AL ABRIR
*D       X8        FECHA ULTIMA COMPILACION
*D       X8        HORA ULTIMA COMPILACION
*D       N1  0     NUMERO DE PERMANENTES QUE USA
*D       N1  0     NUMERO DE TEMPORALES  QUE USA
*D       N1  0     NUMERO DE TABLAS      QUE USA
*D       N1  0     NUMERO DE CLAVE DE ACCESO
*D
*D    N REG CON INFORMACION DE NOMBRES DE ARCHIVOS PERMANENTES
*D       X6        NOMBRE DEL PERMANENTE
*D
*D    N REG CON INFORMACION DE NOMBRES DE TEMPORALES
*D       X6        NOMBRE DEL TEMPORAL
*D
*D    N REG CON INFORMACION DE NOMBRES DE TABLAS USADAS
*D       X6        NOMBRE DE TABLA
*D
* -------------------------------------------------------------------
*D    *********    EL T903 CONTIENE:
*D
*D    UN REGISTRO CON:
*D       N1   0    NUMERO DE OBSERVACIONES HASTA LA FECHA
*D
*D    VARIOS REGISTROS CON:
*D       N2   0    PROMEDIO
*D       N1   0    DESVIACION ESTANDAR
*D
*D    *********    EL T904 CONTIENE:
*D
*D    UN REGISTRO CON:
*D
*D       N1   0    NUMERO DE ETIQUETAS
*D
*D    VARIOS REGISTROS CON:
*D       N1   0    ETIQUETAS
*
      IGUAL AREA X40 NOM-PROG-EST-EU
      IGUAL AREA N10 INDE
      IGUAL AREA N10 CEA
      IGUAL AREA X8 FEC-COM-EU
      IGUAL AREA X8 HOR-COM-EU
      IGUAL AREA N10 NPER
      IGUAL AREA N10 NTEM
      IGUAL AREA N10 NTAB
      IGUAL AREA X6 PER-EU
      IGUAL AREA X6 TEM-EU
      IGUAL AREA X6 TAB-EU
      IGUAL AREA N10 NOBS
      IGUAL AREA N20 PROM-EU-1
      IGUAL AREA N20 PROM-EU-2
      IGUAL AREA N20 PROM-EU-3
      IGUAL AREA N20 PROM-EU-4
      IGUAL AREA N20 PROM-EU-5
      IGUAL AREA N20 PROM-EU-6
      IGUAL AREA N12 DS-EU-1
      IGUAL AREA N12 DS-EU-2
      IGUAL AREA N12 DS-EU-3
      IGUAL AREA N12 DS-EU-4
      IGUAL AREA N12 DS-EU-5
      IGUAL AREA N12 DS-EU-6
      IGUAL AREA N12 COEF-EU
      IGUAL AREA N20 PROM
      VECTOR PROM RANGO 1 1000
      IGUAL AREA N20 PROM-MAX
      IGUAL AREA N12 DS
      VECTOR DS RANGO 1 1000
      IGUAL AREA N10 NET
      IGUAL AREA N10 ETIQ
      IGUAL AREA N10 N
      IGUAL AREA N10 NCOL
      IGUAL AREA N10 RENG
*
*D
*D    LEER PRIMER REGISTRO DE T902 Y REVISA SI SE PUDO LEER
*
14    OPCION  TEMPORAL  902  LECTURA  ASCII
      LEER    TEMPORAL  902  EJECUTA   902                           $
      NOM-PROG-EU        DIS-PROG-EU   INDE             CEA          $
      NOM-PROG-EST-EU    FEC-COM-EU    HOR-COM-EU       NPER         $
      NTEM               NTAB          NUM-CA
*
      MOVER ' ' A NOM-US
      BUSCAR  DISCO  SIUS  EJECUTA  15  PRIN-G1  NUM-CA
      LEER    DISCO  SIUS  NOM-US
15    SI INDE = 0 EJECUTA 25
      SI INDE = 2 EJECUTA 20
      MOVER NOM-PROG-EU A X6
      CONVERTIR 'E' A X6 POS. 1 1 EJECUTA 901
      ERROR 'ERROR AL ABRIR' X6 'CODIGO' CEA
      EJECUTA 10
20    ERROR 'NO TIENE *EST-USO* EL PROGRAMA' NOM-PROG-EU
      EJECUTA 10
*D
*D    LEER EL PRIMER REGISTRO DE T903 CON EL NUMERO DE EJECUCIONES
*D    LEER 4 REGISTROS DEL T903 CON ESTADISTICAS DE NUMERO DE
*D    INSTRUCCIONES INTERNAS, FUNCIONES FISICAS Y LOGICAS,
*D    NUMERO DE LEER TERMINAL.
*
25    OPCION TEMPORAL 903 LECTURA ASCII
      LEER TEMPORAL 903 EJECUTA 903 NOBS
      SI NOBS <> 0 EJECUTA 30
      ERROR 'NO SE HA EJECUTADO EL' NOM-PROG-EU
      EJECUTA 10
30    OPCION TEMPORAL 904 LECTURA ASCII
*
      SACAR PARAMETROS FECHA FEC
      OPCION IMPRIMIR LET. 'ESTADISTICAS DE USO' NOMBRE VEC ( I ) $
      ARCHIVO $
      FECHA FEC ENC. 2 GUION40 42 GUION40 COL. 80  $
      ENC. 2 'PROGRAMA' 20 NOM-PROG-EU VAR. 30 NOM-PROG-EST-EU VAR.   $
      ENC. 2 'COMPILADO POR' 20 NUM-CA VAR. LONG. 4 30 NOM-US VAR. $
          LONG. 34 65 FEC-COM-EU VAR. 74 HOR-COM-EU VAR. $
      ENC. 2 'EJECUCIONES' 20 NOBS VAR. LONG. 5 $
      ENC. 2 GUION40 42 GUION40
      IMPRIMIR ENCABEZADO 30 'INSTRUCCION DE' 66 'PROMEDIO Y DS'
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-1 DS-EU-1
      IMPRIMIR DETALLE  1 '0' 30 '/INTERNAS ' $
                       60 PROM-EU-1 72 DS-EU-1
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-1 DS-EU-1
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-2 DS-EU-2
      COEF-EU = 0
      SI PROM-EU-2 = 0 EJECUTA 31
      COEF-EU = PROM-EU-1 / PROM-EU-2
31    IMPRIMIR DETALLE 1 ' ' / 30 '/PERMANENTES FUNCIONES LOGICAS' $
                               60 PROM-EU-1 72 DS-EU-1   $
                             / 30 '/PERMANENTES FUNCIONES FISICAS' $
                               60 PROM-EU-2 72 DS-EU-2   $
                             / 30 '/RELACION LOGICAS Y FISICAS' $
                               64 COEF-EU
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-1 DS-EU-1
      IMPRIMIR DETALLE 1 '0' 30 'LEER TERMINAL' $
                             60 PROM-EU-1 72 DS-EU-1
*D
*D    SE LEE UN REGISTRO DEL T902 CON EL NOMBRE DE UN PERMANENTE
*D    Y SE LEEN 6 REGISTOS DEL T903 CON INFORMACION DE ESTADISTICA
*D
*
35    SI NPER = 0 EJECUTA 40
      LEER TEMPORAL 902 EJECUTA 902 PER-EU
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-1 DS-EU-1
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-2 DS-EU-2
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-3 DS-EU-3
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-4 DS-EU-4
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-5 DS-EU-5
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-6 DS-EU-6
      IMPRIMIR DETALLE                     1  '0'                    $
       2 'PERMANENTE'                     15 PER-EU                  $
      30 'BUSCAR DISCO'                 60 PROM-EU-1  72 DS-EU-1   / $
      30 'BUSCAR DISCO /BORRADO'        60 PROM-EU-2  72 DS-EU-2   / $
      30 'BUSCAR RECURRENTE'            60 PROM-EU-3  72 DS-EU-3   / $
      30 'BUSCAR RECURRENTE /BORRADO'   60 PROM-EU-4  72 DS-EU-4   / $
      30 'BUSCAR RECURRENTE /VARIABLES' 60 PROM-EU-5  72 DS-EU-5   / $
      30 'INSERTAR DISCO'               60 PROM-EU-6  72 DS-EU-6
      NPER = NPER - 1
      EJECUTA 35
*D
*D    SE LEE UN REGISTRO DEL T902 CON EL NOMBRE DE UNA TABLA
*D    Y 2 REGISTROS DEL T903 CON LA ESTADISTICA
*
40    SI NTAB = 0 EJECUTA 45
      LEER TEMPORAL 902 EJECUTA 902 TAB-EU
      LEER TEMPORAL 903 EJECUTA  903 PROM-EU-1 DS-EU-1
      LEER TEMPORAL 903 EJECUTA  903 PROM-EU-2 DS-EU-2
      IMPRIMIR DETALLE 1 '0TABLA' 15 TAB-EU 30 'BUSCAR TABLA' $
                       60 PROM-EU-1 72 DS-EU-1  $
                     / 30 'BUSCAR TABLA /RENGLON' $
                       60 PROM-EU-2 72 DS-EU-2
      NTAB = NTAB - 1
      EJECUTA 40
*D
*D    SE LEE UN REGISTRO DEL T902 CON EL NOMBRE DE UN TEMPORAL
*D    Y 2 REGISTROS DEL T903 CON ESTADISTICA
*
45    N = 20 - NTEM * 2
46    SI NTEM = 0 EJECUTA 47
      LEER TEMPORAL 902 EJECUTA 902 TEM-EU
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-1 DS-EU-1
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-2 DS-EU-2
      IMPRIMIR DETALLE 1 '0TEMPORAL' 15 TEM-EU $
                             30 'OPCION TEMPORAL' $
                             60 PROM-EU-1 72 DS-EU-1  $
                     / 30 'LECTURAS/ESCRITURAS' $
                       60 PROM-EU-2 72 DS-EU-2
      NTEM = NTEM - 1
      EJECUTA 46
*D
*D    BRINCARSE ESTADISTICAS EN CERO YA QUE SE ASUMIO QUE
*D    HABIAN 20 TEMPORALES
*
47    SI N = 0 EJECUTA 50
      LEER TEMPORAL 903 EJECUTA 903 PROM-EU-1 DS-EU-1
      N = N - 1
      EJECUTA 47
*D
*D    SE LEE EL RESTO DEL T903 CON LA ESTADISTICA DE ETIQUETAS
*D    SE ALMACENAN Y SE SACA EL MAXIMO PROMEDIO
*
50    LEER TEMPORAL 904 EJECUTA 904 NET
      N = 0
      PROM-MAX = 0
51    N = N + 1
      LEER TEMPORAL 903 EJECUTA 52 PROM ( N ) DS ( N )
      SI PROM ( N ) <= PROM-MAX EJECUTA 51
      PROM-MAX = PROM ( N )
      EJECUTA 51
*D
*D    SE REVISA CONSISTENCIA DE NUMERO DE ETIQUETAS, OBSERVACIONES
*D    Y REGISTROS EN T903
*
52    N = N - 1
      SI N <> NET EJECUTA 905
*D
*D    SE IMPRIMEN LA ESTADISTICA DE ETIQUETAS CON SU GRAFICA DE USO
*D    PARA ELLO SE ESCALA A 50 COLUMNAS CON EL MAXIMO PROMEDIO.
*
      SACAR PARAMETROS RENG. RENG
      N = RENG + NET + 5
      SI N < 54 EJECUTA 55
      BRINCAR
      EJECUTA 56
55    IMPRIMIR ENCABEZADO 1 '0' 2 GUION40 42 GUION40 / 1 ' '
56    IMPRIMIR ENCABEZADO 2 'ETIQUETA' 16 'PROMEDIO Y DS' $
                 / 1 ' '
      N = 1
60    LEER TEMPORAL 904 EJECUTA 904 ETIQ
      NCOL = PROM ( N ) * 50 / PROM-MAX + 30
61    SI NCOL = 30 EJECUTA 62
      DETALLE NCOL '*'
      NCOL = NCOL - 1
      EJECUTA 61
62    IMPRIMIR DETALLE 2 ETIQ 10 PROM ( N ) 22 DS ( N ) 30 'I'
      N = N + 1
      SI N <= NET EJECUTA 60
*
*     BORRAR LOS TEMPORALES Y PEDIR OTRO PROGRAMA
*
      OPCION TEMPORAL 901 BORRAR
      OPCION TEMPORAL 902 BORRAR
      OPCION TEMPORAL 903 BORRAR
      OPCION TEMPORAL 904 BORRAR
      EJECUTA 950
*
*     ERRORES
*
901   ERROR 'ERROR 1 AL CONVERTIR'
      FIN
902   ERROR 'ERROR 1 EN PSDCE6' 'EOF EN T902'
      FIN
903   ERROR 'ERROR 1 EN PSDCE6' 'EOF EN T903'
      FIN
904   ERROR 'ERROR 1 EN PSDCE6' 'EOF EN T904'
      FIN
905   ERROR 'ERROR 1 EN PSDCE6' 'INCONSISTENCIA EN INF'
      FIN
*D
*D    SE PREGUNTA SI SE LISTA LA EXPLICACION DEL TEMPORAL 703
*D    Y DE SER AFIRMATIVO SE PROCEDE A LISTARLO
*
950  SI PRE-LIS-EX = 'NO' EJECUTA 10
      OPCION TEMPORAL 703 LECTURA ASCII DISCO 'C:\SISINF\DSIS'
      OPCION IMPRIMIR LET. 'EXPLICACION ESTADISTICAS DE USO' COL. 80
951   LEER TEMPORAL 703 EJECUTA 10 X30 X40 X10
      IMPRIMIR DETALLE 2 X30 32 X40
      EJECUTA 951
*
