-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathQSCRNSVR.PAS
139 lines (114 loc) · 2.48 KB
/
QSCRNSVR.PAS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
{ Copyright 2015 Jerome Shidel }
(*
This project and related files are subject to either the terms
specified in the included LICENSE.TXT file or the GNU GPLv2.0.
*)
unit QScrnSvr; { QuickCrt Screen Saver }
{$I QCRT.DEF}
interface
{$IFDEF TEMPLATES}
uses QClass, QObjects, QCrt, QInfo;
{$ELSE}
uses QClass, QCrt, QInfo;
const
ftESaver = 'ESAVER';
{$ENDIF}
const
class_TScreenSaver : TObjectClass = 'TScreenSaver';
type
PScreenSaver = ^TScreenSaver;
TScreenSaver = object(TObject)
public { protected }
Info : TInformation;
function ObjectClass ( AName : String ) : String; virtual;
public
constructor Create;
destructor Destroy; virtual;
procedure Refresh; virtual;
procedure Show; virtual;
procedure Hide; virtual;
procedure Execute; virtual;
procedure Configure; virtual;
end;
implementation
const
TickCount : integer = 0;
LastTick : longint = 0;
var
TimerTick : LongInt absolute $0040:$006c;
function TScreenSaver.ObjectClass(AName : String) : String;
begin
if (AName = '') or (AName = class_TScreenSaver) then
ObjectClass := class_TScreenSaver
else
ObjectClass := inherited ObjectClass(AName);
end;
constructor TScreenSaver.Create;
begin
Info.Create(ftESaver);
end;
destructor TScreenSaver.Destroy;
begin
Info.Destroy;
end;
procedure TScreenSaver.Execute;
var
Size : integer;
Screen, Temp : Pointer;
Event : TEvent;
QCrtSettings : TQCrtSettings;
begin
Configure;
{$IFNDEF TEMPLATES}
Screen := nil;
GetQCrtState(QCrtSettings);
Size := GetVideoSize;
Temp := GetVideoPtr;
if Size > MaxAvail then Halt(8);
GetMem(Screen, Size);
SetVideoPtr(Screen);
CopyFromVideo;
SetVideoPtr(Temp);
TurnMouseOff;
CheckScroll := False;
HideCursor;
Show;
repeat
ClearEvent(Event);
GetEvent(Event);
Refresh;
if (TickCount < 18) and (LastTick <> TimerTick) then begin
PurgeEvents;
Inc(TickCount);
LastTick := TimerTick;
end;
until (Event.What <> evNothing) and (TickCount >= 18);
Hide;
SetQCrtState(QCrtSettings);
if Assigned(Screen) then
begin
Temp := GetVideoPtr;
SetVideoPtr(Screen);
CopyToVideo;
SetVideoPtr(Temp);
FreeMem(Screen, Size);
end;
{$ENDIF}
PurgeEvents;
end;
procedure TScreenSaver.Refresh;
begin
end;
procedure TScreenSaver.Configure;
begin
end;
procedure TScreenSaver.Show;
begin
TextAttr := $07;
ClrScr;
end;
procedure TScreenSaver.Hide;
begin
end;
end.