home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 2
/
ctrom_ii_b.zip
/
ctrom_ii_b
/
PROGRAM
/
FOXPRO
/
MKCRON
/
CRN_FILE.PRG
< prev
next >
Wrap
Text File
|
1992-09-01
|
4KB
|
133 lines
#pragma STACK-
#pragma RANGE-
#pragma W_MAC_REDEF-
#pragma W_FUNC_PROC-
#pragma W_INDIRECT-
#include MKSTRING.HDR
#include MKSYSTEM.HDR
#include MKPICK.HDR
#include MKTIME.HDR
#include MKFILE.HDR
#include STRING.HDR
#include IO.HDR
VARDEF EXTERN
ULONG task_list
CHAR( 12 ) crn_file
ENDDEF
PROCEDURE CronError PROTOTYPE
PARAMETERS CONST CHAR, VALUE LOGICAL
*****************************************************************************
* *
* Programm : MKCRON V1.0 (C) 1992 Kalkhoff *
* Modul : CRN_FILE.PRG *
* Autor : M.T. Kalkhoff *
* letzte Änderung : 07.09.1992 *
* *
* Aufgabe : Mittels der Routine CRONFILE wird die Steuerdatei ge- *
* lesen und ausgewertet. Diese Steuerdatei darf außer *
* einer Zeitangabe, eines Kommandos und evtl. Kommenta- *
* ren keine weiteren Eintragungen enthalten. *
* Ein Spezialfall stellt das Schlüsselwort LOGOFF dar. *
* Hiermit kann in der Datei eine Uhrzeit festgelegt wer- *
* den, an der das Programm sich selber beendet. *
* Eine andersartige Definition in der Kommandozeile hat *
* hingegen immer VORRANG !!! *
* *
*****************************************************************************
PROCEDURE CronFile
VARDEF
INT handle
INT lineno
CHAR line
CHAR( 08 ) tmp
LOGICAL feof
ENDDEF
* initialisierend wird die Script Datei geöffnet und ausgewertet ...
? "Reading Script File ..."
lineno = 1
feof = .F.
handle = FOpen( crn_file, &OPEN_READ )
IF FError()
CronError( "Can't open " + crn_file + ". Program abort !!!", .T. )
ENDIF
* die Organisation erfolgt mittels der dynamischen Pick2 Listen Funktionen
* wir müssen jedoch erst einmal die gesamte Script Datei verarbeiten.
* Hierbei sind einige Besonderheiten zu beachten. Dies ist zum Einen, daß
* jederzeit Kommentare eingeführt werden können (Präfix ist ';'), zum An-
* deren, daß Zeitangaben gekürzt werden dürfen und die Kommandolänge nicht
* 35 Zeichen übersteigen darf...
task_list = Pick2_Init()
line = LTrim( FReadln( handle, feof ) )
DO WHILE .NOT. feof
* zuerst mal prüfen, ob wir eine Kommentarzeile erwischt haben, bzw. ob
* es eine Leerzeile ist ...
IF AscPos( line, 1 ) <> ';' .AND. StrLen( line ) > 0
* anschließend wird die Zeile in die Bestandteile ZEIT und BEFEHL
* gesplittet. Angefügte Kommentare werden ebenfalls hier gefiltert.
tmp = Parse( 1, ',', line )
line = RTrim( Parse( 1, ';', Parse( 2, ',', line ) ) )
* natürlich muß die Zeitangabe geprüft und evtl. expandiert werden
IF .NOT. ValidTime( tmp )
CronError( "wrong time format in line " + Itoa( lineno ), .T. )
ENDIF
* Wurde für die Zeit auch ein Kommando eingegeben ???
IF StrLen( line ) = 0
CronError( "no command specified for time in line " + Itoa( lineno ), .T. )
ENDIF
* Wie schon gesagt, ist die Maximallänge eines Kommandos auf 35 Zei-
* chen beschränkt, damit der komplette Befehl in das entsprechende
* Status Fenster paßt ...
IF Len( line ) > 35
CronError( "Line " + Itoa( lineno ) + " to long. Use batch file, please ...", .T. )
ENDIF
* scheinbar alles Ok, dann können wir die Task Liste mit der Uhrzeit
* und dem Befehl erweitern ...
Pick2_Add( task_list, tmp + " " + LTrim( line ) )
ENDIF
* eben noch die nächste Zeile lesen, und den Zeilenzähler erhöhen ...
line = LTrim( FReadln( handle, feof ) )
lineno = lineno + 1
ENDDO
* abschließend noch die Datei schließen und prüfen, ob vielleicht das Script
* nur aus Kommentaren bestand ...
FClose( handle )
IF Pick2_Count( task_list ) = 0
CronError( "no task's defined. Program abort !!!", .T. )
ENDIF
* zur besseren Übersicht wird die Pick Liste noch aufsteigend sortiert ...
Pick2_Sort( task_list, &P_ASCENDING, &P_CONTEXT )
ENDPRO