home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / HSPASCAL.LZH / HSPASCAL / UNITS / LIBMAKER.PAS < prev    next >
Pascal/Delphi Source File  |  1992-05-01  |  2KB  |  87 lines

  1. { LibMaker merges named UNI files together into one big LIB file.
  2.   The file PASCAL.LIB is the only one known by the commandline compiler.
  3.   The integrated compiler can use a LIB with any name put into the dialog.
  4.  
  5.   Compile this program to LIBMAKER.PRG.
  6. }
  7.  
  8. { 1990 Christen Fihl }
  9.  
  10. {$I-,M 10,1,1,20}
  11. Program LibMaker;
  12.  
  13. Uses DOS;
  14.  
  15. var
  16.   F_Lib,F_Tpu: File;
  17.   fhead: record
  18.           name: packed array[1..4] of char;
  19.           count: integer
  20.         end;
  21.  
  22. procedure AddUNItoLIB(S: String);
  23. var
  24.   s2: string;
  25.   m,n: integer;
  26.   B: packed array[1..4096] of byte;
  27.   head: record
  28.           name: string[8];
  29.           len: longint;
  30.           DateTime: longint
  31.         end;
  32. begin
  33.   s2:=s;
  34.   while pos(':',s)+pos('\',s)>0 do delete(s,1,1);
  35.   if pos('.',s2)=0 then s2:=s2+'.Uni';
  36.   writeln('From file: ',s2,'. unit= ',s);
  37.   reset(F_Tpu,s2); if IOResult<>0 then begin
  38.     writeln('cannot open file');
  39.     halt
  40.   end;
  41.   inc(fhead.count);
  42.   while pos('.',s)>0 do delete(s,length(s),1);
  43.   with head do begin
  44.     name:=s; len:=fileSize(F_Tpu); DateTime:=-1;
  45.     blockwrite(F_Lib,name,10+4+4);
  46.     repeat
  47.       blockread(F_Tpu,B,SizeOf(B),n);
  48.       blockwrite(F_Lib,B,n,m);
  49.     until m=0;
  50.   end;
  51.   close(F_Tpu);
  52. end;
  53.  
  54. procedure CloseLIB;
  55. begin
  56.   seek(F_Lib,4); blockwrite(F_Lib,fhead.count,2);
  57.   close(F_Lib);
  58.   if IOResult=0 then writeln('Ok') else writeln('Bad');
  59. end;
  60.  
  61. { Main program }
  62. var
  63.   Index: Integer;
  64.   s: string;
  65. begin
  66.   if ParamCount<2 then begin
  67.     writeln('LibMaker: Merges .UNI files together into one .LIB file');
  68.     writeln('LibMaker syntax:');
  69.     writeln('LibMaker file1 file2 ... fileN NewLib');
  70.     halt(99);
  71.   end;
  72.   s:=ParamStr(ParamCount); if pos('.',s)=0 then s:=s+'.Lib';
  73.  
  74.   Erase(S); rewrite(F_Lib,s); if IOResult<>0 then begin
  75.     writeln('cannot create file: ',s);
  76.     halt
  77.   end;
  78.   writeln('To file: ',s);
  79.   with fhead do begin
  80.     name:='Uni1'; count:=0;
  81.     blockwrite(F_Lib,name,4+2);    {2 = space for Count}
  82.   end;
  83.   for Index:=1 to ParamCount-1 do  {Add all UNITs listed on command line}
  84.     AddUNItoLIB(ParamStr(Index));
  85.   CloseLIB
  86. end.
  87.