home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / m / mkcron.zip / CRN_FILE.PRG < prev    next >
Text File  |  1992-09-01  |  4KB  |  133 lines

  1. #pragma STACK-
  2. #pragma RANGE-
  3. #pragma W_MAC_REDEF-
  4. #pragma W_FUNC_PROC-
  5. #pragma W_INDIRECT-
  6.  
  7. #include MKSTRING.HDR
  8. #include MKSYSTEM.HDR
  9. #include MKPICK.HDR
  10. #include MKTIME.HDR
  11. #include MKFILE.HDR
  12. #include STRING.HDR
  13. #include IO.HDR
  14.  
  15. VARDEF EXTERN
  16.    ULONG       task_list
  17.    CHAR( 12 )  crn_file 
  18. ENDDEF
  19.  
  20. PROCEDURE CronError PROTOTYPE
  21.    PARAMETERS CONST CHAR, VALUE LOGICAL
  22.  
  23.  *****************************************************************************
  24.  *                                         *
  25.  *  Programm        : MKCRON V1.0                 (C) 1992 Kalkhoff  *
  26.  *  Modul           : CRN_FILE.PRG                         *
  27.  *  Autor           : M.T. Kalkhoff                         *
  28.  *  letzte Änderung : 07.09.1992                         *
  29.  *                                         *
  30.  *  Aufgabe         : Mittels der Routine CRONFILE wird die Steuerdatei ge-  *
  31.  *              lesen und ausgewertet. Diese Steuerdatei darf außer    *
  32.  *              einer Zeitangabe, eines Kommandos und evtl. Kommenta-  *
  33.  *              ren keine weiteren Eintragungen enthalten.         *
  34.  *              Ein Spezialfall stellt das Schlüsselwort LOGOFF dar.   *
  35.  *              Hiermit kann in der Datei eine Uhrzeit festgelegt wer- *
  36.  *              den, an der das Programm sich selber beendet.         *
  37.  *                    Eine andersartige Definition in der Kommandozeile hat  *
  38.  *              hingegen immer VORRANG !!!                 *
  39.  *                                         *
  40.  *****************************************************************************
  41. PROCEDURE CronFile
  42.  
  43.    VARDEF
  44.       INT        handle
  45.       INT        lineno
  46.       CHAR       line
  47.       CHAR( 08 ) tmp
  48.       LOGICAL    feof
  49.    ENDDEF
  50.  
  51.    * initialisierend wird die Script Datei geöffnet und ausgewertet ...
  52.  
  53.    ? "Reading Script File ..."
  54.  
  55.    lineno = 1
  56.    feof   = .F.
  57.    handle = FOpen( crn_file, &OPEN_READ )
  58.  
  59.    IF FError()
  60.       CronError( "Can't open " + crn_file + ". Program abort !!!", .T. )
  61.    ENDIF
  62.  
  63.    * die Organisation erfolgt mittels der dynamischen Pick2 Listen Funktionen
  64.    * wir müssen jedoch erst einmal die gesamte Script Datei verarbeiten.
  65.    * Hierbei sind einige Besonderheiten zu beachten. Dies ist zum Einen, daß
  66.    * jederzeit Kommentare eingeführt werden können (Präfix ist ';'), zum An-
  67.    * deren, daß Zeitangaben gekürzt werden dürfen und die Kommandolänge nicht
  68.    * 35 Zeichen übersteigen darf...
  69.  
  70.    task_list = Pick2_Init()
  71.    line      = LTrim( FReadln( handle, feof ) )
  72.  
  73.    DO WHILE .NOT. feof
  74.  
  75.       * zuerst mal prüfen, ob wir eine Kommentarzeile erwischt haben, bzw. ob
  76.       * es eine Leerzeile ist ...
  77.  
  78.       IF AscPos( line, 1 ) <> ';' .AND. StrLen( line ) > 0
  79.  
  80.          * anschließend wird die Zeile in die Bestandteile ZEIT und BEFEHL
  81.          * gesplittet. Angefügte Kommentare werden ebenfalls hier gefiltert.
  82.  
  83.          tmp  = Parse( 1, ',', line )
  84.          line = RTrim( Parse( 1, ';', Parse( 2, ',', line ) ) )
  85.  
  86.          * natürlich muß die Zeitangabe geprüft und evtl. expandiert werden
  87.  
  88.          IF .NOT. ValidTime( tmp )
  89.             CronError( "wrong time format in line " + Itoa( lineno ), .T. )
  90.          ENDIF
  91.  
  92.          * Wurde für die Zeit auch ein Kommando eingegeben ???
  93.  
  94.          IF StrLen( line ) = 0
  95.             CronError( "no command specified for time in line " + Itoa( lineno ), .T. )
  96.          ENDIF
  97.  
  98.          * Wie schon gesagt, ist die Maximallänge eines Kommandos auf 35 Zei-
  99.          * chen beschränkt, damit der komplette Befehl in das entsprechende
  100.          * Status Fenster paßt ...
  101.  
  102.          IF Len( line ) > 35
  103.             CronError( "Line " + Itoa( lineno ) + " to long. Use batch file, please ...", .T. )
  104.          ENDIF 
  105.  
  106.          * scheinbar alles Ok, dann können wir die Task Liste mit der Uhrzeit
  107.          * und dem Befehl erweitern ...
  108.  
  109.          Pick2_Add( task_list, tmp + " " + LTrim( line ) )
  110.  
  111.       ENDIF
  112.  
  113.       * eben noch die nächste Zeile lesen, und den Zeilenzähler erhöhen ...
  114.  
  115.       line   = LTrim( FReadln( handle, feof ) )
  116.       lineno = lineno + 1
  117.  
  118.    ENDDO      
  119.  
  120.    * abschließend noch die Datei schließen und prüfen, ob vielleicht das Script
  121.    * nur aus Kommentaren bestand ...
  122.  
  123.    FClose( handle )
  124.  
  125.    IF Pick2_Count( task_list ) = 0
  126.       CronError( "no task's defined. Program abort !!!", .T. )
  127.    ENDIF   
  128.  
  129.    * zur besseren Übersicht wird die Pick Liste noch aufsteigend sortiert ...
  130.  
  131.    Pick2_Sort( task_list, &P_ASCENDING, &P_CONTEXT )
  132.  
  133. ENDPRO