home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_GEN / TCYBER.ZIP / VGACGFIL.PAS < prev   
Pascal/Delphi Source File  |  1994-01-15  |  3KB  |  35 lines

  1. {
  2. Turbo Vision CyberTools 1.0
  3. (C) 1994 Steve Goldsmith
  4. All Rights Reserved
  5.  
  6. VGA character generator file object. All CGF header fields must be set
  7. and a buffer containing character patterns allocated before writing
  8. character generator files (CGF) to disk. The read method will allocate
  9. the buffer for you. You are responsible for deallocating the buffer.
  10. }
  11.  
  12. UNIT VGACGFIL;{$I APP.INC}INTERFACE USES DOS,OBJECTS,VGA;CONST CGFVERSION=$0100;CGFMEMALLOC=- 100;
  13. CGFNOTCGFFORMAT=- 101;TYPE CGFHEADER=RECORD VERSION,HEIGHT,STARTCHR,TOTALCHRS:WORD;FILLER:ARRAY [ 0 .. 119 ]
  14.  OF BYTE;END;PCHRGENFILE=^TCHRGENFILE;TCHRGENFILE=OBJECT (TOBJECT)IOERROR:INTEGER;CHRTABLESIZE:WORD;
  15. CGFFILE:FILE;HEADER:CGFHEADER;CHRTABLEPTR:VGACHRTABLEPTR;CONSTRUCTOR INIT;DESTRUCTOR DONE;VIRTUAL;
  16. PROCEDURE FREECHRTABLE;PROCEDURE OPENREAD (FILENAME:PATHSTR);PROCEDURE READCHRTABLE;PROCEDURE OPENWRITE
  17. (FILENAME:PATHSTR);PROCEDURE WRITECHRTABLE;PROCEDURE GETFONTTABLE (CHRTABLE,STARTCHR,TOTALCHRS,HEIGHT:WORD);END;
  18. IMPLEMENTATION USES MEMORY;CONSTRUCTOR TCHRGENFILE.INIT;BEGIN INHERITED INIT;HEADER.VERSION:=CGFVERSION END;
  19. DESTRUCTOR TCHRGENFILE.DONE;BEGIN{$I-}CLOSE (CGFFILE);{$I+}IOERROR:=IORESULT;INHERITED DONE;END;
  20. PROCEDURE TCHRGENFILE.FREECHRTABLE;BEGIN IF CHRTABLEPTR <> NIL THEN FREEMEM (CHRTABLEPTR,CHRTABLESIZE)END;
  21. PROCEDURE TCHRGENFILE.OPENREAD (FILENAME:PATHSTR);BEGIN ASSIGN (CGFFILE,FILENAME);{$I-}RESET (CGFFILE,1);{$I+}
  22. IOERROR:=IORESULT;IF IOERROR=0 THEN BEGIN{$I-}BLOCKREAD (CGFFILE,HEADER,SIZEOF (HEADER));{$I+}IOERROR:=
  23. IORESULT;IF IOERROR=0 THEN BEGIN IF HEADER.VERSION=CGFVERSION THEN BEGIN CHRTABLESIZE:=HEADER.HEIGHT *
  24. HEADER.TOTALCHRS;CHRTABLEPTR:=MEMALLOC (CHRTABLESIZE);IF CHRTABLEPTR=NIL THEN IOERROR:=CGFMEMALLOC END ELSE
  25. IOERROR:=CGFNOTCGFFORMAT END END END;PROCEDURE TCHRGENFILE.READCHRTABLE;VAR O1lIII0lO0I1:WORD;BEGIN{$I-}SEEK
  26. (CGFFILE,SIZEOF (HEADER));{$I+}IOERROR:=IORESULT;IF IOERROR=0 THEN BEGIN{$I-}BLOCKREAD (CGFFILE,CHRTABLEPTR
  27. ^,CHRTABLESIZE,O1lIII0lO0I1);{$I+}IOERROR:=IORESULT END END;PROCEDURE TCHRGENFILE.OPENWRITE (FILENAME:PATHSTR);
  28. BEGIN ASSIGN (CGFFILE,FILENAME);{$I-}REWRITE (CGFFILE,1);{$I+}IOERROR:=IORESULT;IF IOERROR=0 THEN BEGIN{$I-}
  29. BLOCKWRITE (CGFFILE,HEADER,SIZEOF (HEADER));{$I+}IOERROR:=IORESULT END END;PROCEDURE TCHRGENFILE.WRITECHRTABLE;
  30. VAR OI1OOO0OO0:WORD;BEGIN{$I-}SEEK (CGFFILE,SIZEOF (HEADER));{$I+}IOERROR:=IORESULT;IF IOERROR=0 THEN
  31. BEGIN{$I-}BLOCKWRITE (CGFFILE,CHRTABLEPTR ^,CHRTABLESIZE,OI1OOO0OO0);{$I+}IOERROR:=IORESULT END END;
  32. PROCEDURE TCHRGENFILE.GETFONTTABLE (CHRTABLE,STARTCHR,TOTALCHRS,HEIGHT:WORD);BEGIN HEADER.HEIGHT:=HEIGHT;
  33. HEADER.STARTCHR:=STARTCHR;HEADER.TOTALCHRS:=TOTALCHRS;CHRTABLESIZE:=HEIGHT * TOTALCHRS;CHRTABLEPTR:=
  34. GETRAMTABLE (STARTCHR,TOTALCHRS,HEIGHT,VGACHRTABLELOC [ CHRTABLE ])END;END .
  35.