home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / FOXPRO / MKCRON / CRN_MAIN.PRG < prev    next >
Text File  |  1992-09-01  |  9KB  |  286 lines

  1. #pragma STACK-
  2. #pragma RANGE-
  3. #pragma W_FUNC_PROC-
  4. #pragma W_INDIRECT-
  5.  
  6. #include MKSTRING.HDR
  7. #include MKPICK.HDR
  8. #include MKTIME.HDR
  9. #include STRING.HDR
  10. #include SYSTEM.HDR
  11. #include MKKBD.HDR
  12. #include KEYS.HDR
  13. #include IO.HDR
  14.  
  15. VARDEF EXTERN
  16.    CHAR( 08 ) end_time
  17.    UINT       sec_scrn_save
  18.    ULONG      task_list
  19.    LOGICAL    scrn_saved
  20.    LOGICAL    use_scrn_save
  21.    CHAR( 05 ) last_exec
  22. ENDDEF
  23.  
  24. PROCEDURE CronScrnSave PROTOTYPE
  25.  
  26. PROCEDURE CronProtokoll PROTOTYPE
  27.    PARAMETERS CONST CHAR
  28.  
  29. FUNCTION INT CronExec PROTOTYPE
  30.    PARAMETERS CONST CHAR
  31.  
  32.  ******************************************************************************
  33.  *                                          *
  34.  *  Programm        : MKCRON V1.0               (C) 1992 Kalkhoff   *
  35.  *  Modul           : CRONFINDINTASKLIST                      *
  36.  *  Autor           : M.T. Kalkhoff                          *
  37.  *  letzte Änderung : 07.09.1992                          *
  38.  *                                          *
  39.  *  Aufgabe         : Die folgende Routine untersucht jeden Eintrag innerhalb *
  40.  *              der Task Liste, ob eine Anwendung bei der übergebenen   *
  41.  *                    Zeit gestartet werden soll. Hierbei wird allerdings nur *
  42.  *              auf Stunden und Minuten verglichen, da eine exakte Be-  *
  43.  *              stimmung auf Sekunden unsinnig erscheint.              *
  44.  *                                          *
  45.  ******************************************************************************
  46. FUNCTION INT CronFindInTaskList
  47.    PARAMETERS CONST CHAR( 08 ) any_time
  48.  
  49.    VARDEF
  50.       INT i
  51.       INT e
  52.    ENDDEF
  53.  
  54.    * wir müssen die gesamte (zumindestens manchmal) Pick Liste durchlaufen,
  55.    * um zu testen, ob die Zeitangabe (Stunden und Minuten) in der Pick Liste
  56.    * existiert. Sekunden werden hierbei nicht berücksichtigt !!!
  57.    * Da die Liste aufsteigend sortiert ist können wir die Suche abbrechen, 
  58.    * sobald die Zeit eines Listeneintrags größer der Gesuchten ist. Selbst-
  59.    * verständlich könnte man hier hauch eine BSEARCH Routine einsetzen.
  60.  
  61.    FOR i = 1 TO Pick2_Count( task_list )
  62.  
  63.       e = StrnCmp( Pick2_Str( task_list, i ), any_time, 5 )
  64.  
  65.       DO CASE 
  66.          CASE e = 0
  67.             RETURN( i )
  68.  
  69.          CASE e > 0
  70.             EXIT
  71.  
  72.       ENDCASE
  73.  
  74.    NEXT
  75.  
  76.    RETURN( -1 )
  77.  
  78. ENDPRO
  79.  
  80.  ******************************************************************************
  81.  *                                          *
  82.  *  Programm        : MKCRON V1.0               (C) 1992 Kalkhoff   *
  83.  *  Modul           : CRONCOMMAND                          *
  84.  *  Autor           : M.T. Kalkhoff                          *
  85.  *  letzte Änderung : 07.09.1992                          *
  86.  *                                          *
  87.  *  Aufgabe         : Durch die Routine CRONCOMMAND wird der übergebene Be-   *
  88.  *                    fehl ausgeführt, sofern dieser Befehl nicht dem Sonder- *
  89.  *              status LOGOFF entspricht.                   *
  90.  *              Zu einer Routine wurden diese Befehle zusammengebunden, * 
  91.  *              weil sowohl innerhalb der Pick Listen Udf, als auch mit *
  92.  *              der Direktanwahl diese Sequenz benötigt wird.          *
  93.  *                                          *
  94.  ******************************************************************************
  95. FUNCTION LOGICAL CronCommand
  96.    PARAMETERS CONST CHAR cmd
  97.  
  98.    * wenn der Bildschirm geblankt ist muß er auch wieder restauriert werden !!!
  99.  
  100.    IF scrn_saved
  101.       scrn_saved = .F.
  102.       CronScrnSave()
  103.    ENDIF
  104.  
  105.    * jetzt können beliebige Sonder - Befehle gefiltert werden. Hierzu kann 
  106.    * ohne weiteres eine CASE Struktur eingesetzt werden, sofern mehrere Be-
  107.    * fehle eingesetzt werden sollen, welche eine besondere Bedeutung haben ...
  108.    * Somit können Sie dieses CASE Konstrukt beliebig erweitern !!!
  109.  
  110.    DO CASE
  111.       CASE StrnCmp( StrUpr( cmd ), "LOGOFF", 6 ) = 0
  112.          RETURN( .F.)
  113.    ENDCASE
  114.  
  115.    * anschließend noch das Kommando ausführen und den Counter für den Screen
  116.    * Saver und LASTKEY reseten ...
  117.  
  118.    @ 19, 5 ?? Str( CronExec( cmd ), 3, 0 ) + " " + cmd : 20
  119.    SetCounter( 1, sec_scrn_save + 1 )
  120.    SetLastKey( 0 )
  121.  
  122.    * Rückgabe ist TRUE, da das Kommando ausgeführt wurde ...
  123.  
  124.    RETURN( .T. )
  125.  
  126. ENDPRO
  127.  
  128.  ******************************************************************************
  129.  *                                          *
  130.  *  Programm        : MKCRON V1.0                  (C) 1992 Kalkhoff   *
  131.  *  Modul           : PICKDISPATCH                           *
  132.  *  Autor           : M.T. Kalkhoff                          *
  133.  *  letzte Änderung : 07.09.1992                          *
  134.  *                                          *
  135.  *  Aufgabe         : Diese Routine wird zyklisch nach jeder Abfrage des Tas- *
  136.  *              taturpuffers aufgerufen, unabhängig davon, ob eine Tas- *
  137.  *              te gedrückt wurde, oder nicht. Ferner wird das Starten  *
  138.  *              der Programme (gesteuert durch die Zeit) hieraus vorge- *
  139.  *              nommen. Auch das Handling des Screen Savers erfolgt in  *
  140.  *              dieser Routine.                            *
  141.  *                                              * 
  142.  ******************************************************************************
  143. FUNCTION INT PickDispatch
  144.    PARAMETERS VALUE INT element , ;
  145.               VALUE INT verarb  , ;
  146.               VALUE INT zeile
  147.  
  148.    VARDEF
  149.       INT     i
  150.       LOGICAL l
  151.    ENDDEF
  152.  
  153.    * Die beiden folgenden Vergleiche sollen das Beenden des Programms über 
  154.    * die Tastatur steuern. Alternativ kann dies mit ESC, ALT-X oder ALT-F4
  155.    * erfolgen. Letztere werden über die zweite IF Abfrage interpretiert.
  156.  
  157.    IF Lastkey() = &K_ESC
  158.       RETURN( &P_ABORT )
  159.    ENDIF
  160.  
  161.    IF LastKey() = &K_ALT_X .OR. LastKey() = &K_ALT_F4 
  162.       SetLastKey( &K_ESC )
  163.       RETURN( &P_ABORT )
  164.    ENDIF
  165.  
  166.    * Sobald der Logoff überschritten ist, wird das Programm beendet ...
  167.    * Dies trifft natürlich nur zu, wenn auch eine solche Zeit definiert 
  168.    * wurde !!!
  169.  
  170.    IF .NOT. XEmpty( &TYPE_CHAR, end_time )
  171.  
  172.       IF StrnCmp( end_time, Time(), 5 ) <= 0
  173.  
  174.          SetLastKey( &K_ESC )
  175.          RETURN( &P_ABORT )
  176.  
  177.       ENDIF
  178.  
  179.    ENDIF
  180.  
  181.    * Hier folgt nun die Steuerung des Screen Savers. Er wird entweder ak-
  182.    * tiviert, deaktiviert oder nur resetet (Counter).
  183.  
  184.    IF use_scrn_save
  185.  
  186.       DO CASE
  187.          CASE .NOT. IsCounter( 1 ) .AND. .NOT. scrn_saved
  188.             scrn_saved = .T.
  189.             CronScrnSave()
  190.  
  191.          CASE LastKey() <> 0 
  192.             SetCounter( 1, sec_scrn_save + 1 )
  193.             SetLastKey( 0 )
  194.  
  195.             IF scrn_saved
  196.                scrn_saved = .F. 
  197.                CronScrnSave()
  198.                RETURN( &P_IGNORE_KEY )
  199.             ENDIF
  200.  
  201.       ENDCASE
  202.  
  203.    ENDIF
  204.  
  205.    * mal sehen, ob in der Task Liste ein Eintrag für die aktuelle Zeit ein-
  206.    * getragen ist ...
  207.  
  208.    i = CronFindInTaskList( Time() )
  209.  
  210.    * Anscheinend haben wir einen Eintrag gefunden. Jetzt muß geprüft werden,
  211.    * ob dieser identisch mit dem letzten EXEC ist, da ansonsten ein und der-
  212.    * selbe Eintrag mehrfach ausgeführt werden kann ...
  213.  
  214.    IF i > 0
  215.       IF StrnCmp( Pick2_Str( task_list, i ), last_exec, 5 ) <> 0
  216.  
  217.           IF CronCommand( SubStr( Pick2_Str( task_list, i ), 10, 35 ) )
  218.              last_exec = Left( Pick2_Str( task_list, i ), 5 )
  219.           ENDIF
  220.  
  221.       ENDIF
  222.  
  223.    ENDIF
  224.  
  225.    RETURN( &P_ACCEPT_KEY )
  226.  
  227. ENDPRO
  228.  
  229.  ******************************************************************************
  230.  *                                          *
  231.  *  Programm        : MKCRON V1.0               (C) 1992 Kalkhoff   *
  232.  *  Modul           : CRONMAIN                               *
  233.  *  Autor           : M.T. Kalkhoff                          *
  234.  *  letzte Änderung : 07.09..1992                          *
  235.  *                                          *
  236.  *  Aufgabe         : Die Routine CRONMAIN steuert den gesamten Ablauf der    *
  237.  *                    Task Liste, sowie der Tastatur. Somit kann hiermit ein  *
  238.  *              paralelles Verarbeiten von Tastatureingaben (Anwahl und *
  239.  *              Bestätigung eines Tasks) bzw. der zeitgesteuerten Pro-  *
  240.  *              grammausführungen erfolgen.                  *
  241.  *                                          *
  242.  ******************************************************************************
  243. PROCEDURE CronMain
  244.  
  245.    VARDEF
  246.       UINT pick_index
  247.    ENDDEF
  248.  
  249.    * erst mal den Programmstart protokollieren ...
  250.  
  251.    CronProtokoll( Time() + " Start des Task Managers" ) 
  252.  
  253.    * und LASTKEY auf Null setzen !!!
  254.  
  255.    SetLastKey( 0 )
  256.    
  257.    * Endlosschleife bis ESC gedrückt wurde ...
  258.  
  259.    DO WHILE LastKey() <> &K_ESC
  260.  
  261.       * Die Verarbeitung der Pick Listen Einträge ersehen Sie bitte der Rou-
  262.       * tine PICKDISPATCH. Rückgaben erfolgen nur bei Abbruch der Pick2 Lis-
  263.       * ten Funktion, bzw. bei Anwahl einer Position !!!
  264.  
  265.       pick_index = Pick2_List( task_list, 04, 03, 17, 43, .F., .F., PickDispatch, &P_CALL_CYCLE, &P_DEFAULT, &P_DEFAULT )
  266.  
  267.       * wenn nötig führen wir jetzt den Task aus und interpretieren even-
  268.       * tuelle Sonderstati, welche von CRONCOMMAND mit der Rückgabe .F. ge-
  269.       * kennzeichnet werden ...
  270.  
  271.       IF pick_index > 0
  272.  
  273.          IF .NOT. CronCommand( SubStr( Pick2_Str( task_list, pick_index ), 10, 35 ) )
  274.             SetLastKey( &K_ESC )
  275.          ENDIF
  276.  
  277.       ENDIF 
  278.  
  279.    ENDDO
  280.  
  281.    * Programmende wird auch protokolliert ...
  282.  
  283.    CronProtokoll( Time() + " Shutdown des Task Managers" )
  284.    CronProtokoll( "" )
  285.  
  286. ENDPRO