home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1994 #1
/
monster.zip
/
monster
/
PROG_GEN
/
TCYBER.ZIP
/
VGACGFIL.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1994-01-15
|
3KB
|
35 lines
{
Turbo Vision CyberTools 1.0
(C) 1994 Steve Goldsmith
All Rights Reserved
VGA character generator file object. All CGF header fields must be set
and a buffer containing character patterns allocated before writing
character generator files (CGF) to disk. The read method will allocate
the buffer for you. You are responsible for deallocating the buffer.
}
UNIT VGACGFIL;{$I APP.INC}INTERFACE USES DOS,OBJECTS,VGA;CONST CGFVERSION=$0100;CGFMEMALLOC=- 100;
CGFNOTCGFFORMAT=- 101;TYPE CGFHEADER=RECORD VERSION,HEIGHT,STARTCHR,TOTALCHRS:WORD;FILLER:ARRAY [ 0 .. 119 ]
OF BYTE;END;PCHRGENFILE=^TCHRGENFILE;TCHRGENFILE=OBJECT (TOBJECT)IOERROR:INTEGER;CHRTABLESIZE:WORD;
CGFFILE:FILE;HEADER:CGFHEADER;CHRTABLEPTR:VGACHRTABLEPTR;CONSTRUCTOR INIT;DESTRUCTOR DONE;VIRTUAL;
PROCEDURE FREECHRTABLE;PROCEDURE OPENREAD (FILENAME:PATHSTR);PROCEDURE READCHRTABLE;PROCEDURE OPENWRITE
(FILENAME:PATHSTR);PROCEDURE WRITECHRTABLE;PROCEDURE GETFONTTABLE (CHRTABLE,STARTCHR,TOTALCHRS,HEIGHT:WORD);END;
IMPLEMENTATION USES MEMORY;CONSTRUCTOR TCHRGENFILE.INIT;BEGIN INHERITED INIT;HEADER.VERSION:=CGFVERSION END;
DESTRUCTOR TCHRGENFILE.DONE;BEGIN{$I-}CLOSE (CGFFILE);{$I+}IOERROR:=IORESULT;INHERITED DONE;END;
PROCEDURE TCHRGENFILE.FREECHRTABLE;BEGIN IF CHRTABLEPTR <> NIL THEN FREEMEM (CHRTABLEPTR,CHRTABLESIZE)END;
PROCEDURE TCHRGENFILE.OPENREAD (FILENAME:PATHSTR);BEGIN ASSIGN (CGFFILE,FILENAME);{$I-}RESET (CGFFILE,1);{$I+}
IOERROR:=IORESULT;IF IOERROR=0 THEN BEGIN{$I-}BLOCKREAD (CGFFILE,HEADER,SIZEOF (HEADER));{$I+}IOERROR:=
IORESULT;IF IOERROR=0 THEN BEGIN IF HEADER.VERSION=CGFVERSION THEN BEGIN CHRTABLESIZE:=HEADER.HEIGHT *
HEADER.TOTALCHRS;CHRTABLEPTR:=MEMALLOC (CHRTABLESIZE);IF CHRTABLEPTR=NIL THEN IOERROR:=CGFMEMALLOC END ELSE
IOERROR:=CGFNOTCGFFORMAT END END END;PROCEDURE TCHRGENFILE.READCHRTABLE;VAR O1lIII0lO0I1:WORD;BEGIN{$I-}SEEK
(CGFFILE,SIZEOF (HEADER));{$I+}IOERROR:=IORESULT;IF IOERROR=0 THEN BEGIN{$I-}BLOCKREAD (CGFFILE,CHRTABLEPTR
^,CHRTABLESIZE,O1lIII0lO0I1);{$I+}IOERROR:=IORESULT END END;PROCEDURE TCHRGENFILE.OPENWRITE (FILENAME:PATHSTR);
BEGIN ASSIGN (CGFFILE,FILENAME);{$I-}REWRITE (CGFFILE,1);{$I+}IOERROR:=IORESULT;IF IOERROR=0 THEN BEGIN{$I-}
BLOCKWRITE (CGFFILE,HEADER,SIZEOF (HEADER));{$I+}IOERROR:=IORESULT END END;PROCEDURE TCHRGENFILE.WRITECHRTABLE;
VAR OI1OOO0OO0:WORD;BEGIN{$I-}SEEK (CGFFILE,SIZEOF (HEADER));{$I+}IOERROR:=IORESULT;IF IOERROR=0 THEN
BEGIN{$I-}BLOCKWRITE (CGFFILE,CHRTABLEPTR ^,CHRTABLESIZE,OI1OOO0OO0);{$I+}IOERROR:=IORESULT END END;
PROCEDURE TCHRGENFILE.GETFONTTABLE (CHRTABLE,STARTCHR,TOTALCHRS,HEIGHT:WORD);BEGIN HEADER.HEIGHT:=HEIGHT;
HEADER.STARTCHR:=STARTCHR;HEADER.TOTALCHRS:=TOTALCHRS;CHRTABLESIZE:=HEIGHT * TOTALCHRS;CHRTABLEPTR:=
GETRAMTABLE (STARTCHR,TOTALCHRS,HEIGHT,VGACHRTABLELOC [ CHRTABLE ])END;END .