home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS - Coast to Coast
/
simteldosarchivecoasttocoast2.iso
/
turbopas
/
tef11.zip
/
TEF11.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1992-07-10
|
6KB
|
170 lines
PROGRAM Timed_Execution_Facility;
{v1.1 Toad Hall Tweak
- Original TEF10 at SIMTEL20 appeared to be broken: it was missing
a big chunk of the source.
Received a shiny new TEF10.PAS source from the author,
and of course couldn't keep my fingers off it.
- Very minor tweaks, no functional changes.
- Standardized source case via CONV_P Pascal conversion utility.
}
{$M 4096,0,0}
Uses Crt,DOS;
CONST
Off = FALSE;
On = TRUE;
HaltKey = (#45); { ScanCode for Alt-X }
HaltStr = 'Alt-X'; { String to display }
VAR
TimeToRun,
ProgramToRun : STRING;
Ch : CHAR;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
{= Function: CurrentTime =}
{= Returns : Time in 24-hour format =}
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
FUNCTION CurrentTime : STRING;
VAR
hour, min, sec, i : INTEGER;
HStr, MStr, SStr, Temp : STRING[2];
Regs : Registers;
BEGIN
WITH Regs DO BEGIN
(* AH := 44; AL := 0; *)
AX := (44 SHL 8) + 0; {v1.1}
MsDos(Regs); { Pull the time }
hour := CH; min := CL; { DL=100ths sec }
sec := DH;
END; { with }
STR(hour,Hstr); { Cvt hour to string }
STR(min,MStr); { Cvt min to string }
STR(sec,SStr); { Cvt sec to string }
IF LENGTH(MStr) = 1 THEN MStr := '0'+MStr;
IF LENGTH(SStr) = 1 THEN SStr := '0'+SStr;
CurrentTime := HStr+':'+MStr+':'+SStr;
END; { CurrentTime }
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
{= Procedure: Cursor =}
{= Returns : Nothing - Turns cursor on/off =}
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
PROCEDURE Cursor(Status : BOOLEAN);
VAR
Regs : Registers;
i : INTEGER;
BEGIN
FillChar(Regs,SIZEOF(Regs),0);
IF (Mem[0000:1040] AND 48) <> 48 THEN i := 0 { mono }
ELSE i := 6; { color }
Regs.AH := $01;
IF (Status = On) THEN BEGIN { Turn ON }
Regs.CH := $6+i;
Regs.CL := $7+i;
END
ELSE BEGIN { Turn OFF }
(*
Regs.CH := $20;
Regs.CL := $20;
*)
Regs.CX := $2020; {v1.1}
END;
Intr($10,Regs);
END; { Cursor }
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
{= Procedure: Help =}
{= Returns : Nothing - Aborts program with USAGE message =}
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
PROCEDURE Help;
BEGIN
WRITELN;
WRITELN('USAGE: TEF [24-hr time] [command]');
WRITELN;
Cursor(On);
HALT;
END; { Help }
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
{= Procedure: Parse =}
{= Returns : TimeToRun, ProgramToRun =}
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
PROCEDURE Parse (VAR Time, Command : STRING);
VAR loop : INTEGER;
P1,P2 : STRING;
FoundTime : BOOLEAN;
BEGIN
IF (ParamCount <> 2) THEN Help
ELSE BEGIN
FoundTime := FALSE;
P1 := ParamStr(1); P2 := ParamStr(2);
FOR loop := 1 TO LENGTH(P1) DO
IF (P1[loop] = ':') THEN BEGIN
FoundTime := TRUE;
Time := P1; Command := P2;
END;
IF NOT FoundTime THEN
FOR loop := 1 TO LENGTH(P2) DO
IF (P2[loop] = ':') THEN BEGIN
FoundTime := TRUE;
Time := P2; Command := P1;
END;
IF NOT FoundTime THEN Help;
END;
END; { Parse }
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
{= Procedure: StatusDisplay =}
{= Returns : Nothing -- Displays current status of TEF =}
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
PROCEDURE StatusDisplay;
BEGIN
ClrScr;
GotoXY (20,10); WRITELN('┌─────────────────────────────────┐');
GotoXY (20,11); WRITELN('│ TEF: Timed Execution Facility │');
GotoXY (20,12); WRITELN('╞═════════════════════════════════╡');
GotoXY (20,13); WRITELN('│ │');
GotoXY (20,14); WRITELN('│ Current Time: │');
GotoXY (20,15); WRITELN('│ Time To Run : │');
GotoXY (20,16); WRITELN('│ Program : │');
GotoXY (20,17); WRITELN('│ │');
GotoXY (20,18); WRITELN('└──────┬─────────────────┬────────┘');
GotoXY (20,19); WRITELN(' │ ',HaltStr,' : Quit │ ');
GotoXY (20,20); WRITELN(' └─────────────────┘ ');
GotoXY (39,15); WRITELN(TimeToRun);
GotoXY (39,16); WRITELN(ProgramToRun);
END;
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
{= Main Program =}
{=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
BEGIN
CheckBreak := FALSE; Cursor(Off);
Parse(TimeToRun,ProgramToRun);
StatusDisplay;
WHILE (TimeToRun > COPY(CurrentTime,1,5)) DO BEGIN
IF KeyPressed THEN BEGIN
Ch := ReadKey;
IF Ch = #0 THEN BEGIN
Ch := ReadKey;
IF Ch = HaltKey THEN BEGIN
Cursor(On); ClrScr; HALT; END;
END;
END;
GotoXY(39,14); WRITELN(CurrentTime);
Delay(1000);
END;
ClrScr; Exec (GetEnv('COMSPEC'),'/c '+ProgramToRun);
Cursor(On);
END.