* PSDCE5
      PROGRAMA 'LISTADO DE TIEMPOS DE USO'
      DOCUMENTACION 2 0
*D
*D    ESTE PROGRAMA LISTA LOS PROGRAMAS QUE MAS TIEMPO DE CPU
*D    USARON EN UN RANGO DE TIEMPO QUE SE LEE
*
*D    LEER LOS RANGOS DE TIEMPO EN QUE SE SELECCIONARAN LOS PROGRAMAS
*D    Y PASARLOS A SEGUNDOS
*
      IGUAL AREA R-HORA R-HORA-F
      IGUAL AREA R-MINUTOS R-MINUTOS-F
      IGUAL AREA R-SEGUNDOS R-SEGUNDOS-F
      IGUAL AREA N10 NUM-PROG-L
      OPCION TERMINAL AREA 100 /RENGLON /POS. 5 5 /LONG. 5 70 $
      /MARCO /BN NO-E VI  /COLOR BLANCO BLANCO NEGRO AZUL BLANCO $
      /TECLAS-DE-FUNCION 1 'TERMINAR  ELS' 2 'MENU CON' 3 '? AYUDA' $
      /CONDICION-EJECUTA '/F' '/M' $
      /INF-GLOBAL /TAB. 5 25 55 60 65 /CAMPOS $
          'TIEMPO INICIAL' '(HORA MINUTOS SEGUNDOS)' $
           R-HORA /VAR. /LEC. /LONG. 2 $
           R-MINUTOS /VAR. /LEC. /LONG. 2 $
           R-SEGUNDOS /VAR. /LEC. /LONG. 2 $
          'TIEMPO FINAL' /INICIO-DE-RENGLON $
                 '(HORA MINUTOS SEGUNDOS)' $
           R-HORA-F /VAR. /LEC. /LONG. 2 $
           R-MINUTOS-F /VAR. /LEC. /LONG. 2 $
           R-SEGUNDOS-F /VAR. /LEC. /LONG. 2  $
          'NUMERO DE PROGRAMAS' /INICIO-DE-RENGLON '(MAXIMO CPU)' $
           NUM-PROG-L /VAR. /LEC. /LONG. 4
*
      OPCION TERMINAL AREA 101 /RENGLON 1 1 /POS. 11 5 /LONG. 8 70 $
      /MARCO /COLOR CELESTE CELESTE NEGRO /CONFIRMAR /CAMPOS $
      2 3 'Esta opcion sirve para imprimir'  $
          'los programas que mas consumen CPU' $
      3 3 'en un cierto intervalo de tiempo' $
      4 3 'Se debe ejecutar despues de PSDCE4' $
          '(ACTUALIZACION Y REPORTE)' $
      5 3 '-Se debe especificar el tiempo' $
          'inicial y final (horas 00-23,' $
      6 4 'minutos 00-59 y segundos 00-59)' $
          'para seleccionar los programas.'  $
      7 3 '-Se imprimen los primeros N programas' $
          'con maximo CPU. (N=0 todos).'
*
1     OPCION TERMINAL AREA 100 /DESPLEGAR
2     LEER TERMINAL EJECUTA 10 R-HORA R-MINUTOS R-SEGUNDOS  $
       R-HORA-F R-MINUTOS-F R-SEGUNDOS-F NUM-PROG-L
      IGUAL AREA N20 T-INICIO
      T-INICIO = R-HORA * 60 + R-MINUTOS * 60 + R-SEGUNDOS
      MOVER '00:00:00' A TX-INICIAL
      CONVERTIR R-HORA A TX-INICIAL POS. 3 1 EJECUTA 5
      CONVERTIR R-HORA A TX-INICIAL POS. 4 2 EJECUTA 5
      CONVERTIR R-MINUTOS A TX-INICIAL POS. 3 4 EJECUTA 5
      CONVERTIR R-MINUTOS A TX-INICIAL POS. 4 5 EJECUTA 5
      CONVERTIR R-SEGUNDOS A TX-INICIAL POS. 3 7 EJECUTA 5
      CONVERTIR R-SEGUNDOS A TX-INICIAL POS. 4 8 EJECUTA 5
*
      IGUAL AREA N20 T-FINAL
      T-FINAL = R-HORA-F * 60 + R-MINUTOS-F * 60 + R-SEGUNDOS-F
      MOVER '00:00:00' A TX-FINAL
      CONVERTIR R-HORA-F A TX-FINAL POS. 3 1 EJECUTA 5
      CONVERTIR R-HORA-F A TX-FINAL POS. 4 2 EJECUTA 5
      CONVERTIR R-MINUTOS-F A TX-FINAL POS. 3 4 EJECUTA 5
      CONVERTIR R-MINUTOS-F A TX-FINAL POS. 4 5 EJECUTA 5
      CONVERTIR R-SEGUNDOS-F A TX-FINAL POS. 3 7 EJECUTA 5
      CONVERTIR R-SEGUNDOS-F A TX-FINAL POS. 4 8 EJECUTA 5
      SI T-INICIO < T-FINAL EJECUTA 20
      ERROR 'TIEMPO FINAL MENOR O IGUAL A INICIAL'
      EJECUTA 2
5     ERROR 'ERROR EN PSDCE5' 'ERROR AL CONVERTIR'
      FIN
*D
*D    INVESTIGAR EJECUTA #
*
10    SACAR PARAMETROS CONDICION-EJECUTA COND
      SI COND = -1 EJECUTA 1000
      SI COND = 1  EJECUTA 1000
      SI COND = -4 EJECUTA 1000
      SI COND = 2  EJECUTA 999
      SI COND = -5 EJECUTA 999
      OPCION TERMINAL AREA 101 /DESPLEGAR /SALVAR-ANTERIORES /EMPALMAR
      OPCION TERMINAL AREA 101 /TERMINAR
      EJECUTA 2
*D
*D    LEER EL TEMPORAL  920 Y PASAR LOS DE ELS O ELSE AL T922
*D    SELECCIONAR LOS QUE ESTEN DENTRO DEL HORARIO YA SEA TOTAL
*D    O PARCIALMENTE.
*
20    OPCION TEMPORAL 920 ASCII LECTURA
      OPCION TEMPORAL 922 ESCRITURA AREA 10
21    LEER   TEMPORAL 920 EJECUTA   50                               $
      NUM-MOD   C-PRO-ARC    C-FEC      C-HOR     C-HR        C-MR   $
      C-SR      C-NUM-PAG    C-NUM-ERR  NUM-CA    C-NUM-TER   C-HC   $
      C-MC      C-CSC 
      SI NUM-MOD =  3 EJECUTA 22
      SI NUM-MOD = 11 EJECUTA 22
      EJECUTA 21
22    CONVERTIR C-HOR A R-HORA POS. 1 3 EJECUTA 23
      CONVERTIR C-HOR A R-HORA POS. 2 4 EJECUTA 23
      CONVERTIR C-HOR A R-MINUTOS POS. 1 3 EJECUTA 23
      CONVERTIR C-HOR A R-MINUTOS POS. 2 4 EJECUTA 23
      CONVERTIR C-HOR A R-SEGUNDOS POS. 1 3 EJECUTA 23
      CONVERTIR C-HOR A R-SEGUNDOS POS. 2 4 EJECUTA 23
      EJECUTA 30
23    ERROR 'ERROR EN PSDCE5' 'CONVERSION DE HORA'
      EJECUTA 21
      IGUAL AREA N20 T-INI-PROG
      IGUAL AREA N20 T-FIN-PROG
30    T-INI-PROG = R-HORA * 60 + R-MINUTOS * 60 + R-SEGUNDOS
      T-FIN-PROG = C-HR * 60 + C-MR * 60 + C-SR + T-INI-PROG - 1
      SI T-FIN-PROG < T-INICIO EJECUTA 21
      SI T-FINAL < T-INI-PROG EJECUTA 21
      IGUAL AREA N22 CPU-USADO
      CPU-USADO = C-HC * 60 + C-MC * 60 + C-CSC
      ESCRIBIR TEMPORAL 922 C-PRO-ARC CPU-USADO
      EJECUTA 21
*D
*D    SE ORDENA EL T922 POR NOMBRE DE PROGRAMA, LUEGO SE PROCEDE
*D    A ACUMULAR EL NUMERO DE EJECUCIONES Y EL TIEMPO USADO, CUANDO
*D    SE CAMBIA DE PROGRAMA SE ESCRIBE EN EL T923  LOS TOTALES.
*
50    OPCION TEMPORAL 922 ORDEN A1 C-PRO-ARC  LECTURA
      OPCION TEMPORAL 923 ESCRITURA AREA 10
      IGUAL AREA C-PRO-ARC C-PRO-ARC-ANT
      IGUAL AREA N22 TOT-CPU-RANGO
      MOVER ' ' A C-PRO-ARC-ANT
      TOT-CPU-RANGO = 0
51    LEER TEMPORAL 922 EJECUTA 54 C-PRO-ARC CPU-USADO
      TOT-CPU-RANGO = TOT-CPU-RANGO + CPU-USADO
      SI C-PRO-ARC <> C-PRO-ARC-ANT EJECUTA 52
      NUM-EJEC = NUM-EJEC + 1
      TOT-CPU-USADO = TOT-CPU-USADO + CPU-USADO
      EJECUTA 51
52    SI C-PRO-ARC-ANT = ' ' EJECUTA 53
      ESCRIBIR TEMPORAL 923 C-PRO-ARC-ANT TOT-CPU-USADO  NUM-EJEC
53    MOVER C-PRO-ARC A C-PRO-ARC-ANT
      NUM-EJEC = 1
      TOT-CPU-USADO = CPU-USADO
      EJECUTA 51
54    SI C-PRO-ARC-ANT <> ' ' EJECUTA 55
      ERROR 'NO HAY PROGRAMAS'
      EJECUTA 2
55    ESCRIBIR TEMPORAL 923 C-PRO-ARC-ANT TOT-CPU-USADO NUM-EJEC
*D
*D    ORDENAR EL T923 POR MAYOR CONSUMO DE CPU Y LISTAR LOS
*D    PRIMEROS DE ACUEDO A LO LEIDO
*
      OPCION TEMPORAL 923 ORDEN C C-PRO-ARC D1 TOT-CPU-USADO $
                          LECTURA
      OPCION IMPRIMIR LET. 'CONSUMO DE CPU' COL. 80 $
      ENC. 2 GUION40 42 GUION40 $
      ENC. 10 TX-INICIAL 24 TX-INICIAL VAR.  $
           40 TX-FINAL 53 TX-FINAL VAR. $
      ENC. 10 'PROGRAMA' 30 NUM-EJEC 50 TOT-CPU-USADO $
           64 CPU-%  74 CPU-%A   1 '0' $
      ENC. 2 GUION40 42 GUION40
      CPU-%A = 0
*
70    LEER TEMPORAL 923 EJECUTA 75 C-PRO-ARC TOT-CPU-USADO NUM-EJEC
      CPU-% = TOT-CPU-USADO  * 100 / TOT-CPU-RANGO
      CPU-%A = CPU-%A + CPU-%
      IMPRIMIR DETALLE 10 C-PRO-ARC 30 NUM-EJEC 50 TOT-CPU-USADO  $
              LONG. 10  62 CPU-% LONG. 8 72 CPU-%A  LONG. 8
      SI NUM-PROG-L = 0 EJECUTA 70
      NUM-PROG-L    = NUM-PROG-L - 1
      SI NUM-PROG-L > 0 EJECUTA 70
75    OPCION TEMPORAL 922 BORRAR
      OPCION TEMPORAL 923 BORRAR
999   FIN 'DCE0'
1000  FIN
