home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / turbopas / tef11.zip / TEF11.PAS < prev   
Pascal/Delphi Source File  |  1992-07-10  |  6KB  |  170 lines

  1. PROGRAM Timed_Execution_Facility;
  2. {v1.1 Toad Hall Tweak
  3.  - Original TEF10 at SIMTEL20 appeared to be broken: it was missing
  4.    a big chunk of the source.
  5.    Received a shiny new TEF10.PAS source from the author,
  6.    and of course couldn't keep my fingers off it.
  7.  - Very minor tweaks, no functional changes.
  8.  - Standardized source case via CONV_P Pascal conversion utility.
  9.  
  10. }
  11.  
  12. {$M 4096,0,0}
  13.  
  14. Uses Crt,DOS;
  15.  
  16. CONST
  17.   Off = FALSE;
  18.   On  = TRUE;
  19.   HaltKey = (#45);    { ScanCode for Alt-X }
  20.   HaltStr = 'Alt-X';  { String to display  }
  21.  
  22. VAR
  23.   TimeToRun,
  24.   ProgramToRun : STRING;
  25.   Ch : CHAR;
  26.  
  27. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  28. {=  Function: CurrentTime                                                  =}
  29. {=  Returns : Time in 24-hour format                                       =}
  30. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  31.  
  32. FUNCTION CurrentTime : STRING;
  33. VAR
  34.   hour, min, sec, i : INTEGER;
  35.   HStr, MStr, SStr, Temp : STRING[2];
  36.   Regs : Registers;
  37. BEGIN
  38.   WITH Regs DO BEGIN
  39. (*  AH := 44;  AL := 0; *)
  40.     AX := (44 SHL 8) + 0;      {v1.1}
  41.     MsDos(Regs);               { Pull the time }
  42.     hour := CH;  min := CL;        { DL=100ths sec }
  43.     sec := DH;
  44.   END;  { with }
  45.   STR(hour,Hstr);              { Cvt hour to string }
  46.   STR(min,MStr);               { Cvt min to string  }
  47.   STR(sec,SStr);               { Cvt sec to string  }
  48.   IF LENGTH(MStr) = 1 THEN MStr  :=  '0'+MStr;
  49.   IF LENGTH(SStr) = 1 THEN SStr  :=  '0'+SStr;
  50.   CurrentTime := HStr+':'+MStr+':'+SStr;
  51. END;  { CurrentTime }
  52.  
  53. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  54. {=  Procedure: Cursor                                                      =}
  55. {=  Returns  : Nothing - Turns cursor on/off                               =}
  56. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  57.  
  58. PROCEDURE Cursor(Status : BOOLEAN);
  59. VAR
  60.   Regs : Registers;
  61.   i    : INTEGER;
  62. BEGIN
  63.   FillChar(Regs,SIZEOF(Regs),0);
  64.   IF (Mem[0000:1040] AND 48) <> 48 THEN i  :=  0  { mono }
  65.   ELSE i  :=  6;               { color }
  66.   Regs.AH  :=  $01;
  67.   IF (Status = On) THEN BEGIN  { Turn ON  }
  68.     Regs.CH := $6+i;
  69.     Regs.CL := $7+i;
  70.   END
  71.   ELSE BEGIN                   { Turn OFF }
  72. (*
  73.     Regs.CH  :=  $20;
  74.     Regs.CL  :=  $20;
  75. *)
  76.     Regs.CX := $2020;          {v1.1}
  77.   END;
  78.   Intr($10,Regs);
  79. END; { Cursor }
  80.  
  81. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  82. {=  Procedure: Help                                                        =}
  83. {=  Returns  : Nothing - Aborts program with USAGE message                 =}
  84. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  85.  
  86. PROCEDURE Help;
  87. BEGIN
  88.   WRITELN;
  89.   WRITELN('USAGE: TEF [24-hr time] [command]');
  90.   WRITELN;
  91.   Cursor(On);
  92.   HALT;
  93. END; { Help }
  94.  
  95. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  96. {=  Procedure: Parse                                                       =}
  97. {=  Returns  : TimeToRun, ProgramToRun                                     =}
  98. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  99.  
  100. PROCEDURE Parse (VAR Time, Command : STRING);
  101. VAR loop  : INTEGER;
  102.     P1,P2 : STRING;
  103.     FoundTime : BOOLEAN;
  104. BEGIN
  105.   IF (ParamCount <> 2) THEN Help
  106.   ELSE BEGIN
  107.     FoundTime := FALSE;
  108.     P1 := ParamStr(1);  P2 := ParamStr(2);
  109.     FOR loop := 1 TO LENGTH(P1) DO
  110.     IF (P1[loop] = ':') THEN BEGIN
  111.       FoundTime := TRUE;
  112.       Time := P1;  Command := P2;
  113.     END;
  114.     IF NOT FoundTime THEN
  115.       FOR loop := 1 TO LENGTH(P2) DO
  116.         IF (P2[loop] = ':') THEN BEGIN
  117.           FoundTime := TRUE;
  118.           Time := P2;  Command := P1;
  119.         END;
  120.     IF NOT FoundTime THEN Help;
  121.     END;
  122. END; { Parse }
  123.  
  124. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  125. {=  Procedure: StatusDisplay                                               =}
  126. {=  Returns  : Nothing -- Displays current status of TEF                   =}
  127. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  128.  
  129. PROCEDURE StatusDisplay;
  130. BEGIN
  131.   ClrScr;
  132.   GotoXY (20,10);  WRITELN('┌─────────────────────────────────┐');
  133.   GotoXY (20,11);  WRITELN('│  TEF: Timed Execution Facility  │');
  134.   GotoXY (20,12);  WRITELN('╞═════════════════════════════════╡');
  135.   GotoXY (20,13);  WRITELN('│                                 │');
  136.   GotoXY (20,14);  WRITELN('│    Current Time:                │');
  137.   GotoXY (20,15);  WRITELN('│    Time To Run :                │');
  138.   GotoXY (20,16);  WRITELN('│    Program     :                │');
  139.   GotoXY (20,17);  WRITELN('│                                 │');
  140.   GotoXY (20,18);  WRITELN('└──────┬─────────────────┬────────┘');
  141.   GotoXY (20,19);  WRITELN('       │  ',HaltStr,' : Quit   │   ');
  142.   GotoXY (20,20);  WRITELN('       └─────────────────┘         ');
  143.   GotoXY (39,15);  WRITELN(TimeToRun);
  144.   GotoXY (39,16);  WRITELN(ProgramToRun);
  145. END;
  146.  
  147. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  148. {=  Main Program                                                           =}
  149. {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
  150.  
  151. BEGIN
  152.   CheckBreak := FALSE;  Cursor(Off);
  153.   Parse(TimeToRun,ProgramToRun);
  154.   StatusDisplay;
  155.   WHILE (TimeToRun > COPY(CurrentTime,1,5)) DO BEGIN
  156.     IF KeyPressed THEN BEGIN
  157.       Ch := ReadKey;
  158.       IF Ch = #0 THEN BEGIN
  159.         Ch := ReadKey;
  160.         IF Ch = HaltKey THEN BEGIN
  161.           Cursor(On);  ClrScr;  HALT;  END;
  162.       END;
  163.     END;
  164.     GotoXY(39,14);  WRITELN(CurrentTime);
  165.     Delay(1000);
  166.   END;
  167.   ClrScr;  Exec  (GetEnv('COMSPEC'),'/c '+ProgramToRun);
  168.   Cursor(On);
  169. END.
  170.