fpimpdef.pp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. {$APPTYPE CONSOLE}
  2. program FPimpdef;
  3. {$DEFINE STANDALONE}
  4. {$IFNDEF FPC}
  5. uses
  6. dmisc,
  7. ImpDef;
  8. {$ELSE}
  9. uses
  10. DOS,
  11. ImpDef;
  12. {$ENDIF}
  13. var
  14. binname:string;
  15. function Ofound(const short,full:string):longint;
  16. var
  17. i:longint;
  18. begin
  19. Ofound:=-1;
  20. for i:=1 to ParamCount do
  21. if(paramstr(i)=short)or(paramstr(i)=full)then
  22. begin
  23. Ofound:=i;
  24. exit;
  25. end;
  26. end;
  27. function GetOption(const short,full:string):string;
  28. var
  29. i:longint;
  30. begin
  31. i:=Ofound(short,full);
  32. if i>0 then
  33. GetOption:=paramstr(succ(i))
  34. else
  35. GetOption:='';
  36. end;
  37. procedure help_info;
  38. var
  39. fn:string[255];
  40. jj:cardinal;
  41. begin
  42. fn:=paramstr(0);
  43. for jj:=length(fn)downto 1 do
  44. if fn[jj] in [':','\','/']then
  45. begin
  46. fn:=copy(fn,succ(jj),255);
  47. break;
  48. end;
  49. writeln('Usage: ',fn,' [options]');
  50. writeln('Options:');
  51. writeln('-i | --input <file> - set input file;');
  52. writeln('-o | --output <file> - set output .def file');
  53. writeln('-l | --library <file> - set output static library');
  54. writeln('-s | --assembler <name> - use <name> for assembler (default asw)');
  55. writeln('-r | --archiver <name> - use <name> for archiver (default arw)');
  56. writeln('-h | --help - show this screen');
  57. halt;
  58. end;
  59. {$ifndef UNIX}
  60. procedure AddExt(var s:string);
  61. var
  62. s1:string;
  63. i:longint;
  64. begin
  65. s1:=copy(s,length(s)-3,4);
  66. for i:=1 to length(s1)do
  67. s1[i]:=upcase(s1[i]);
  68. if s1<>'.EXE'then
  69. s:=s+'.EXE';
  70. end;
  71. {$endif}
  72. var
  73. EnvPath:string;
  74. begin
  75. binname:=GetOption('-i','--input');
  76. if(binname='')or(Ofound('-h','--help')>0)then
  77. help_info;
  78. as_name:=GetOption('-s','--assembler');
  79. if as_name='' then
  80. as_name:='as';
  81. ar_name:=GetOption('-r','--archiver');
  82. if ar_name='' then
  83. ar_name:='ar';
  84. {$ifndef UNIX}
  85. AddExt(as_name);
  86. AddExt(ar_name);
  87. {$endif}
  88. EnvPath:=GetEnv('Path');
  89. if EnvPath='' then
  90. EnvPath:=GetEnv('PATH');
  91. as_name:=FSearch(as_name,EnvPath);
  92. ar_name:=FSearch(ar_name,EnvPath);
  93. if not makedef(binname,GetOption('-o','--output'),GetOption('-l','--library'))then
  94. begin
  95. writeln('Export names not found');
  96. halt(1);
  97. end;
  98. end.