intmain.pas

来自「一个Delphi解释器的例子」· PAS 代码 · 共 97 行

PAS
97
字号
unit intmain;

interface

uses
  delphin,classes,sysutils;

procedure MainProc;

implementation

{-----------------------------------------}

procedure CreateIntFile(Const FName:String);
Var
  FOut:TFileStream;
  FMem:TMemoryStream;
  H:THalCompiler;
begin
  FMem:=TMemoryStream.Create;
  try
    FOut:=TFileStream.Create(ChangeFileExt(FName,'.INT'),fmcreate);
    try
      FMem.LoadFromFile(FName);
      FMem.Seek(0,soFromBeginning);
      H:=THalCompiler.Create(FMem,nil);
      With H do
        While True do
        begin
          Token:=ReadToken;
          If Token.ID=idendoffile then break;
          If Token.ID=id_implement then
          begin
           FOut.CopyFrom(FMem,CurRead);
           break;
          end;
        end;
    finally
      FOut.Free;
    end;
  finally
    FMem.Free;
  end;
end;

{------------------------------------------------------------------}

function AddSlash(Const Path:String):String;
begin
  If (Length(Path)>0) and (Path[length(Path)]<>'\')
  then
    Result:=Path+'\'
  else
    Result:=Path;
end;

{-----------------------------------------}

procedure CreateINTsForDir(Const APath:String );
var
  SearchRec: TSearchRec;
  Re:Integer;
  FileName:String;
begin
  Re:=FindFirst(AddSlash(APath)+'*.pas' , faAnyFile, SearchRec);
  try
    While Re=0 do
    begin
      FileName:=AddSlash(APath)+Searchrec.Name;
      CreateIntFile(FileName);
      Writeln(FileName);
      Re:=FindNext(SearchRec);
    end;
  finally
    FindClose(SearchRec);
  end;  
end;

{-----------------------------------------}

procedure MainProc;
begin
  writeln('INT Maker Version 1.01');
  writeln('Copyright (c) 1997,1998 S.Kurinny & S.Kostinsky');
  writeln;
  writeln('This utility creates INT files from PAS files in the current directory');
  writeln('or in the directory passed as parameter');
  
  if ParamCount=0
  then
    CreateINTsForDir(ExtractFilePath(ParamStr(0)))
  else
    CreateINTsForDir(ParamStr(1));

end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?