home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Phoenix CD 2.0
/
Phoenix_CD.cdr
/
15a
/
murutil.zip
/
SNAP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-12-28
|
5KB
|
177 lines
PROGRAM SNAP;
{ This Turbo Pascal program takes a "snapshot" of the current screen
display and writes the image to FILENAME.
Note: This program assumes that the screen image is a 2000-word
block starting at Segment $B8000.
Program by Harry M. Murphy, 28 December 1986. }
CONST
FILENAME = 'SNAP.IMG'; {The screen image file name. }
TYPE
DATESTRING = STRING[28];
TIMESTRING = STRING[6];
VIDEOBLOCK = ARRAY [1..25,1..80] OF INTEGER;
VAR
DTG : STRING[40]; { Date/Time string. }
FIL : TEXT[2048]; { The screen image file. }
I : 0..25; { Screen row index. }
IMAX : 0..25; { Maximum row for image. }
J : 0..80; { Screen column index. }
LINE : STRING[80]; { Working line string. }
SCREEN : VIDEOBLOCK ABSOLUTE $B800: $0000; {Video Memory}
{ ------------------------------- }
FUNCTION DATE: DATESTRING;
{ This function returns today's date as a DateString of up
to 28 bytes, such as: "Tuesday, 18 February 1986".
Note: TYPE DATESTRING = STRING[28];
Procedure adapted from the Turbo Pascal date example by
Harry M. Murphy, 18 February 1986. }
TYPE
REGPAK = RECORD
AX,BX,CX,DX,BP,SI,DI,DS,ES,FL: INTEGER
END;
VAR
ID,IM,IW,IY,JC,JD,JM,JY: INTEGER;
REG: REGPAK;
DAY: STRING[2];
DTE: DATESTRING;
YEAR: STRING[4];
BEGIN
WITH REG DO
BEGIN
AX := $2A00;
MSDOS(REG);
IY := CX;
IM := HI(DX);
ID := LO(DX)
END;
JY := IY;
JM := IM-2;
IF JM < 1
THEN
BEGIN
JM := JM+12;
JY := JY-1
END;
JC := JY DIV 100;
JD := JY-100*JC;
IW := ((ID+42+(13*JM-1) DIV 5 +JD+JD DIV 4+JC DIV 4-2*JC) MOD 7);
CASE IW OF
0: DTE := 'Sunday, ';
1: DTE := 'Monday, ';
2: DTE := 'Tuesday, ';
3: DTE := 'Wednesday, ';
4: DTE := 'Thursday, ';
5: DTE := 'Friday, ';
6: DTE := 'Saturday, '
END { CASE };
STR(ID:2,DAY);
STR(IY:4,YEAR);
CASE IM OF
1: DTE := DTE+DAY+' January '+YEAR;
2: DTE := DTE+DAY+' February '+YEAR;
3: DTE := DTE+DAY+' March '+YEAR;
4: DTE := DTE+DAY+' April '+YEAR;
5: DTE := DTE+DAY+' May '+YEAR;
6: DTE := DTE+DAY+' June '+YEAR;
7: DTE := DTE+DAY+' July '+YEAR;
8: DTE := DTE+DAY+' August '+YEAR;
9: DTE := DTE+DAY+' September '+YEAR;
10: DTE := DTE+DAY+' October '+YEAR;
11: DTE := DTE+DAY+' November '+YEAR;
12: DTE := DTE+DAY+' December '+YEAR
END { CASE };
DATE := DTE
END {Function DATE};
{ ------------------------------- }
FUNCTION TIME: TIMESTRING;
{ This function returns the current clock time as a TimeString
of 6 bytes, such as: "19:05h".
Note: TYPE TIMESTRING = STRING[6];
Procedure adapted from the Turbo Pascal date example by
Harry M. Murphy, 19 February 1986. }
TYPE
REGPAK = RECORD
AX,BX,CX,DX,BP,SI,DI,DS,ES,FL: INTEGER
END;
VAR
H,M,S,T: INTEGER;
HR: STRING[2];
MN: STRING[2];
REG: REGPAK;
BEGIN
WITH REG DO
BEGIN
AX := $2C00;
MSDOS(REG);
H := HI(CX);
M := LO(CX);
S := HI(DX);
T := LO(DX)
END;
IF T > 50 THEN S := S+1;
IF S > 30 THEN M := M+1;
IF M = 60
THEN
BEGIN
H := H+1;
M := 0;
IF H = 24 THEN H := 0
END;
STR(H:2,HR);
STR(M:2,MN);
IF MN[1]=' ' THEN MN[1] := '0';
TIME := HR+':'+MN+'h'
END {Function TIME};
{ ------------------------------- }
BEGIN {Program SNAP}
DTG := TIME+', '+DATE+'.';
ASSIGN(FIL,FILENAME);
REWRITE(FIL);
IMAX := WHEREY-2;
GOTOXY(1,IMAX+1);
IF IMAX < 14 THEN IMAX := 25;
FOR I := 1 TO IMAX DO
BEGIN
FOR J := 1 TO 80 DO LINE[J] := CHR(LO(SCREEN[I,J]));
LINE[0] := CHR(0);
J := 80;
WHILE LINE[J] = ' ' DO J := J-1;
LINE[0] := CHR(J);
IF J = 0
THEN
WRITELN(FIL)
ELSE
WRITELN(FIL,LINE)
END;
WRITELN(FIL,'>>>>>>>>>> Screen snapshot taken: ',DTG);
CLOSE(FIL);
LOWVIDEO;
CLREOL;
WRITELN('>>>>>>>>>> Screen snapshot written to ',FILENAME)
END.