home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / grafik / fs / fs.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1990-11-15  |  5.3 KB  |  230 lines

  1. {$A+,B-,D-,E-,F-,I-,L-,N-,O-,R-,S-,V-}
  2. {$M 1024,0,655360}
  3.  
  4. (*     This program may be distributed and modified freely,      *)
  5. (*     only if done without commercial fee. tke 15-NOV-1990.     *)
  6.  
  7. Const  DataStart = $DB;
  8.        HeaderEnd = $7F;
  9.  
  10.        FontNameOffset = $72;
  11.        SizeOffset     = FontNameOffset+4;
  12.  
  13.        TmpName = '@@@FS@@@.FNT';
  14.  
  15.  
  16. Var    F1, F2 : File Of Byte;
  17.  
  18.        B,B0,B1,B2,B3:Byte; I,Size:Word;
  19.  
  20.        Name : String;
  21.  
  22. Const  Header : Array [0..HeaderEnd] Of Byte = (
  23.  
  24.        Ord('P'),Ord('K'),                 {Somebody's initials at Borland :-)}
  25.  
  26.        $08,$08,                           {?}
  27.  
  28.        Ord('B'),                          {Text. Any length?}
  29.        Ord('G'),
  30.        Ord('I'),
  31.        Ord(' '),
  32.        Ord('S'),
  33.        Ord('t'),
  34.        Ord('r'),
  35.        Ord('o'),
  36.        Ord('k'),
  37.        Ord('e'),
  38.        Ord('d'),
  39.        Ord(' '),
  40.        Ord('F'),
  41.        Ord('o'),
  42.        Ord('n'),
  43.        Ord('t'),
  44.        Ord(' '),
  45.        Ord('V'),
  46.        Ord('1'),
  47.        Ord('.'),
  48.        Ord('1'),
  49.        Ord(','),
  50.        Ord(' '),
  51.        Ord('1'),
  52.        Ord('4'),
  53.        Ord('-'),
  54.        Ord('J'),
  55.        Ord('u'),
  56.        Ord('n'),
  57.        Ord('-'),
  58.        Ord('1'),
  59.        Ord('9'),
  60.        Ord('9'),
  61.        Ord('0'),
  62.        Ord('.'),
  63.        $0D,$0A,                    {Cr + Lf}
  64.  
  65.        Ord('C'),
  66.        Ord('o'),
  67.        Ord('p'),
  68.        Ord('y'),
  69.        Ord('r'),
  70.        Ord('i'),
  71.        Ord('g'),
  72.        Ord('h'),
  73.        Ord('t'),
  74.        Ord(' '),
  75.        Ord('('),
  76.        Ord('c'),
  77.        Ord(')'),
  78.        Ord(' '),
  79.        Ord('1'),
  80.        Ord('9'),
  81.        Ord('9'),
  82.        Ord('0'),
  83.        Ord(','),
  84.        Ord(' '),
  85.        Ord('U'),
  86.        Ord('n'),
  87.        Ord('i'),
  88.        Ord('v'),
  89.        Ord('e'),
  90.        Ord('r'),
  91.        Ord('s'),
  92.        Ord('i'),
  93.        Ord('t'),
  94.        Ord('y'),
  95.        Ord(' '),
  96.        Ord('o'),
  97.        Ord('f'),
  98.        Ord(' '),
  99.        Ord('T'),
  100.        Ord('u'),
  101.        Ord('r'),
  102.        Ord('k'),
  103.        Ord('u'),
  104.        Ord(','),
  105.        Ord(' '),
  106.        Ord('S'),
  107.        Ord('p'),
  108.        Ord('a'),
  109.        Ord('c'),
  110.        Ord('e'),
  111.        Ord(' '),
  112.        Ord('R'),
  113.        Ord('e'),
  114.        Ord('s'),
  115.        Ord('e'),
  116.        Ord('a'),
  117.        Ord('r'),
  118.        Ord('c'),
  119.        Ord('h'),
  120.        Ord(' '),
  121.        Ord('L'),
  122.        Ord('a'),
  123.        Ord('b'),
  124.        Ord('o'),
  125.        Ord('r'),
  126.        Ord('a'),
  127.        Ord('t'),
  128.        Ord('o'),
  129.        Ord('r'),
  130.        Ord('y'),
  131.        Ord('.'),
  132.  
  133.        $0D,$0A,                    {Cr + Lf}
  134.  
  135.        $00,$1A,                    {End-of-Text}
  136.  
  137.        Succ(HeaderEnd), $00,       {Header size = 80h (WORD!)}
  138.  
  139.        $00,                        {Font name, 4 bytes. Offset for this}
  140.        $00,                        {header text is $5C}
  141.        $00,
  142.        $00,
  143.  
  144.        $00, $00,                   {Data size = FileSize - Header size (WORD)}
  145.  
  146.        $01,                        {Major version number}
  147.        $01,                        {Minor version number}
  148.        $01,                        {Minimal major version number}
  149.        $00,                        {Minimal major version number}
  150.  
  151.        {Fill unused with zero.}
  152.        $00,$00,$00,$00);
  153.  
  154.  
  155. Procedure Halt(S:String);
  156. Begin
  157.   Writeln(^M^J,'FS: ',S);
  158.   System.Halt(1);
  159. End;
  160.  
  161.  
  162. Begin
  163.  
  164.   Write(^M^J,'FS: Borland FE, "Font Editor" font file signature fix-up utility V1.0, by tke.',^M^J,
  165.              '    Copyright (c) 1990, Space Research Laboratory, University of Turku, Finland.',^M^J);
  166.  
  167.   Write(^M^J,'Enter font name (4 chars) [.CHR]: ');
  168.   Readln(Name);
  169.  
  170.   If (Length(Name)<>4) Then Halt('Invalid file name, length must be 4 chars!');
  171.   Name:=Name+'.CHR';
  172.  
  173.   Assign(F1,Name);
  174.   ReSet(F1);
  175.   If (IOresult<>0) Then Halt('Can''t open input file?');
  176.  
  177.   If (FileSize(F1)<=Succ(DataStart)) Then Halt('Truncated file?');
  178.  
  179.   {Check if the file is already converted}
  180.   Read(F1,B0); Read(F1,B1); Read(F1,B2); Read(F1,B3);
  181.   If (B0=Ord('P')) AND (B1=Ord('K')) AND (B2=$08) AND (B3=$08)
  182.     Then Halt('Signature already fixed?');
  183.  
  184.   ReSet(F1);
  185.  
  186.   Assign(F2,TmpName);
  187.   Reset(F2);
  188.   If (IOresult=0) Then Halt('Temporary output file "'+TmpName+'" already exist?');
  189.  
  190.   ReWrite(F2);
  191.   If (IOresult<>0) Then Halt('Can''t create temporary output file "'+TmpName+'" ?');
  192.  
  193.   Size := FileSize(F1) - Succ(DataStart);
  194.  
  195.   Header[FontNameOffset]   := Ord(UpCase(Name[1]));
  196.   Header[FontNameOffset+1] := Ord(UpCase(Name[2]));
  197.   Header[FontNameOffset+2] := Ord(UpCase(Name[3]));
  198.   Header[FontNameOffset+3] := Ord(UpCase(Name[4]));
  199.  
  200.   Header[SizeOffset]   := Lo(Size);
  201.   Header[SizeOffset+1] := Hi(Size);
  202.  
  203.   For B:=0 To HeaderEnd Do Begin
  204.     Write(F2,Header[B]);
  205.     If (IOresult<>0) Then Halt('Can''t write into output file "'+TmpName+'" ?');
  206.   End;
  207.  
  208.   Write(^M^J,'Converting ... ');
  209.  
  210.   I:=0;
  211.   While NOT EOF(F1) Do Begin
  212.     Read(F1,B);
  213.     If (IOresult<>0) Then Halt(^M+^J+'Can''t read from input file?');
  214.     If (I>DataStart) Then Begin
  215.       Write(F2,B);
  216.       If (IOresult<>0) Then Halt(^M+^J+'Can''t write into output file "'+TmpName+'" ?');
  217.     End;
  218.     Inc(I);
  219.   End;
  220.  
  221.   Close(F1);
  222.   Close(F2);
  223.  
  224.   Writeln(Succ(HeaderEnd),' bytes header + ',Size,' bytes of data written.');
  225.  
  226.   Erase(F1);
  227.   Rename(F2,Name);
  228.  
  229. End.
  230.