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 >
Wrap
Text File
|
1992-09-01
|
9KB
|
286 lines
#pragma STACK-
#pragma RANGE-
#pragma W_FUNC_PROC-
#pragma W_INDIRECT-
#include MKSTRING.HDR
#include MKPICK.HDR
#include MKTIME.HDR
#include STRING.HDR
#include SYSTEM.HDR
#include MKKBD.HDR
#include KEYS.HDR
#include IO.HDR
VARDEF EXTERN
CHAR( 08 ) end_time
UINT sec_scrn_save
ULONG task_list
LOGICAL scrn_saved
LOGICAL use_scrn_save
CHAR( 05 ) last_exec
ENDDEF
PROCEDURE CronScrnSave PROTOTYPE
PROCEDURE CronProtokoll PROTOTYPE
PARAMETERS CONST CHAR
FUNCTION INT CronExec PROTOTYPE
PARAMETERS CONST CHAR
******************************************************************************
* *
* Programm : MKCRON V1.0 (C) 1992 Kalkhoff *
* Modul : CRONFINDINTASKLIST *
* Autor : M.T. Kalkhoff *
* letzte Änderung : 07.09.1992 *
* *
* Aufgabe : Die folgende Routine untersucht jeden Eintrag innerhalb *
* der Task Liste, ob eine Anwendung bei der übergebenen *
* Zeit gestartet werden soll. Hierbei wird allerdings nur *
* auf Stunden und Minuten verglichen, da eine exakte Be- *
* stimmung auf Sekunden unsinnig erscheint. *
* *
******************************************************************************
FUNCTION INT CronFindInTaskList
PARAMETERS CONST CHAR( 08 ) any_time
VARDEF
INT i
INT e
ENDDEF
* wir müssen die gesamte (zumindestens manchmal) Pick Liste durchlaufen,
* um zu testen, ob die Zeitangabe (Stunden und Minuten) in der Pick Liste
* existiert. Sekunden werden hierbei nicht berücksichtigt !!!
* Da die Liste aufsteigend sortiert ist können wir die Suche abbrechen,
* sobald die Zeit eines Listeneintrags größer der Gesuchten ist. Selbst-
* verständlich könnte man hier hauch eine BSEARCH Routine einsetzen.
FOR i = 1 TO Pick2_Count( task_list )
e = StrnCmp( Pick2_Str( task_list, i ), any_time, 5 )
DO CASE
CASE e = 0
RETURN( i )
CASE e > 0
EXIT
ENDCASE
NEXT
RETURN( -1 )
ENDPRO
******************************************************************************
* *
* Programm : MKCRON V1.0 (C) 1992 Kalkhoff *
* Modul : CRONCOMMAND *
* Autor : M.T. Kalkhoff *
* letzte Änderung : 07.09.1992 *
* *
* Aufgabe : Durch die Routine CRONCOMMAND wird der übergebene Be- *
* fehl ausgeführt, sofern dieser Befehl nicht dem Sonder- *
* status LOGOFF entspricht. *
* Zu einer Routine wurden diese Befehle zusammengebunden, *
* weil sowohl innerhalb der Pick Listen Udf, als auch mit *
* der Direktanwahl diese Sequenz benötigt wird. *
* *
******************************************************************************
FUNCTION LOGICAL CronCommand
PARAMETERS CONST CHAR cmd
* wenn der Bildschirm geblankt ist muß er auch wieder restauriert werden !!!
IF scrn_saved
scrn_saved = .F.
CronScrnSave()
ENDIF
* jetzt können beliebige Sonder - Befehle gefiltert werden. Hierzu kann
* ohne weiteres eine CASE Struktur eingesetzt werden, sofern mehrere Be-
* fehle eingesetzt werden sollen, welche eine besondere Bedeutung haben ...
* Somit können Sie dieses CASE Konstrukt beliebig erweitern !!!
DO CASE
CASE StrnCmp( StrUpr( cmd ), "LOGOFF", 6 ) = 0
RETURN( .F.)
ENDCASE
* anschließend noch das Kommando ausführen und den Counter für den Screen
* Saver und LASTKEY reseten ...
@ 19, 5 ?? Str( CronExec( cmd ), 3, 0 ) + " " + cmd : 20
SetCounter( 1, sec_scrn_save + 1 )
SetLastKey( 0 )
* Rückgabe ist TRUE, da das Kommando ausgeführt wurde ...
RETURN( .T. )
ENDPRO
******************************************************************************
* *
* Programm : MKCRON V1.0 (C) 1992 Kalkhoff *
* Modul : PICKDISPATCH *
* Autor : M.T. Kalkhoff *
* letzte Änderung : 07.09.1992 *
* *
* Aufgabe : Diese Routine wird zyklisch nach jeder Abfrage des Tas- *
* taturpuffers aufgerufen, unabhängig davon, ob eine Tas- *
* te gedrückt wurde, oder nicht. Ferner wird das Starten *
* der Programme (gesteuert durch die Zeit) hieraus vorge- *
* nommen. Auch das Handling des Screen Savers erfolgt in *
* dieser Routine. *
* *
******************************************************************************
FUNCTION INT PickDispatch
PARAMETERS VALUE INT element , ;
VALUE INT verarb , ;
VALUE INT zeile
VARDEF
INT i
LOGICAL l
ENDDEF
* Die beiden folgenden Vergleiche sollen das Beenden des Programms über
* die Tastatur steuern. Alternativ kann dies mit ESC, ALT-X oder ALT-F4
* erfolgen. Letztere werden über die zweite IF Abfrage interpretiert.
IF Lastkey() = &K_ESC
RETURN( &P_ABORT )
ENDIF
IF LastKey() = &K_ALT_X .OR. LastKey() = &K_ALT_F4
SetLastKey( &K_ESC )
RETURN( &P_ABORT )
ENDIF
* Sobald der Logoff überschritten ist, wird das Programm beendet ...
* Dies trifft natürlich nur zu, wenn auch eine solche Zeit definiert
* wurde !!!
IF .NOT. XEmpty( &TYPE_CHAR, end_time )
IF StrnCmp( end_time, Time(), 5 ) <= 0
SetLastKey( &K_ESC )
RETURN( &P_ABORT )
ENDIF
ENDIF
* Hier folgt nun die Steuerung des Screen Savers. Er wird entweder ak-
* tiviert, deaktiviert oder nur resetet (Counter).
IF use_scrn_save
DO CASE
CASE .NOT. IsCounter( 1 ) .AND. .NOT. scrn_saved
scrn_saved = .T.
CronScrnSave()
CASE LastKey() <> 0
SetCounter( 1, sec_scrn_save + 1 )
SetLastKey( 0 )
IF scrn_saved
scrn_saved = .F.
CronScrnSave()
RETURN( &P_IGNORE_KEY )
ENDIF
ENDCASE
ENDIF
* mal sehen, ob in der Task Liste ein Eintrag für die aktuelle Zeit ein-
* getragen ist ...
i = CronFindInTaskList( Time() )
* Anscheinend haben wir einen Eintrag gefunden. Jetzt muß geprüft werden,
* ob dieser identisch mit dem letzten EXEC ist, da ansonsten ein und der-
* selbe Eintrag mehrfach ausgeführt werden kann ...
IF i > 0
IF StrnCmp( Pick2_Str( task_list, i ), last_exec, 5 ) <> 0
IF CronCommand( SubStr( Pick2_Str( task_list, i ), 10, 35 ) )
last_exec = Left( Pick2_Str( task_list, i ), 5 )
ENDIF
ENDIF
ENDIF
RETURN( &P_ACCEPT_KEY )
ENDPRO
******************************************************************************
* *
* Programm : MKCRON V1.0 (C) 1992 Kalkhoff *
* Modul : CRONMAIN *
* Autor : M.T. Kalkhoff *
* letzte Änderung : 07.09..1992 *
* *
* Aufgabe : Die Routine CRONMAIN steuert den gesamten Ablauf der *
* Task Liste, sowie der Tastatur. Somit kann hiermit ein *
* paralelles Verarbeiten von Tastatureingaben (Anwahl und *
* Bestätigung eines Tasks) bzw. der zeitgesteuerten Pro- *
* grammausführungen erfolgen. *
* *
******************************************************************************
PROCEDURE CronMain
VARDEF
UINT pick_index
ENDDEF
* erst mal den Programmstart protokollieren ...
CronProtokoll( Time() + " Start des Task Managers" )
* und LASTKEY auf Null setzen !!!
SetLastKey( 0 )
* Endlosschleife bis ESC gedrückt wurde ...
DO WHILE LastKey() <> &K_ESC
* Die Verarbeitung der Pick Listen Einträge ersehen Sie bitte der Rou-
* tine PICKDISPATCH. Rückgaben erfolgen nur bei Abbruch der Pick2 Lis-
* ten Funktion, bzw. bei Anwahl einer Position !!!
pick_index = Pick2_List( task_list, 04, 03, 17, 43, .F., .F., PickDispatch, &P_CALL_CYCLE, &P_DEFAULT, &P_DEFAULT )
* wenn nötig führen wir jetzt den Task aus und interpretieren even-
* tuelle Sonderstati, welche von CRONCOMMAND mit der Rückgabe .F. ge-
* kennzeichnet werden ...
IF pick_index > 0
IF .NOT. CronCommand( SubStr( Pick2_Str( task_list, pick_index ), 10, 35 ) )
SetLastKey( &K_ESC )
ENDIF
ENDIF
ENDDO
* Programmende wird auch protokolliert ...
CronProtokoll( Time() + " Shutdown des Task Managers" )
CronProtokoll( "" )
ENDPRO