fixgdk.pp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. function lower(const s : string) : string;
  2. {
  3. return lowercased string of s
  4. }
  5. var
  6. i : longint;
  7. begin
  8. for i:=1 to length(s) do
  9. if s[i] in ['A'..'Z'] then
  10. lower[i]:=char(byte(s[i])+32)
  11. else
  12. lower[i]:=s[i];
  13. lower[0]:=s[0];
  14. end;
  15. function upper(const s : string) : string;
  16. {
  17. return lowercased string of s
  18. }
  19. var
  20. i : longint;
  21. begin
  22. for i:=1 to length(s) do
  23. if s[i] in ['a'..'z'] then
  24. upper[i]:=char(byte(s[i])-32)
  25. else
  26. upper[i]:=s[i];
  27. upper[0]:=s[0];
  28. end;
  29. function trimspace(const s:string):string;
  30. var
  31. i,j : longint;
  32. begin
  33. i:=length(s);
  34. while (i>0) and (s[i] in [#9,' ']) do
  35. dec(i);
  36. j:=1;
  37. while (j<i) and (s[j] in [#9,' ']) do
  38. inc(j);
  39. trimspace:=Copy(s,j,i-j+1);
  40. end;
  41. function trimbegin(const s:string):string;
  42. var
  43. i,j : longint;
  44. begin
  45. i:=length(s);
  46. j:=1;
  47. while (j<i) and (s[j] in [#9,' ']) do
  48. inc(j);
  49. trimbegin:=Copy(s,j,i-j+1);
  50. end;
  51. procedure Replace(var s:string;const s1,s2:string;single:boolean);
  52. var
  53. last,
  54. i : longint;
  55. begin
  56. last:=0;
  57. repeat
  58. i:=pos(s1,upper(s));
  59. if i=last then
  60. i:=0;
  61. if (i>0) then
  62. begin
  63. Delete(s,i,length(s1));
  64. Insert(s2,s,i);
  65. last:=i;
  66. end;
  67. until single or (i=0);
  68. end;
  69. procedure fixreplace(var s:string);
  70. begin
  71. replace(s,'P_GDK','PGdk',false);
  72. replace(s,'= ^T_GDK','= ^TGdk',false);
  73. replace(s,'^T_GDK','PGdk',false);
  74. replace(s,'T_GDK','TGdk',false);
  75. replace(s,'^GDK','PGdk',false);
  76. replace(s,'EXTERNAL_LIBRARY','gdkdll',false);
  77. end;
  78. var
  79. t,f : text;
  80. ssmall : string[20];
  81. hs,
  82. s : string;
  83. name : string;
  84. i : word;
  85. func,
  86. impl : boolean;
  87. begin
  88. impl:=false;
  89. assign(t,paramstr(1));
  90. assign(f,'fixgdk.tmp');
  91. reset(t);
  92. rewrite(f);
  93. writeln(f,'{');
  94. writeln(f,' $Id$');
  95. writeln(f,'}');
  96. writeln(f,'');
  97. writeln(f,'{$ifndef gdk_include_files}');
  98. writeln(f,' {$define read_interface}');
  99. writeln(f,' {$define read_implementation}');
  100. writeln(f,'{$endif not gdk_include_files}');
  101. writeln(f,'');
  102. writeln(f,'{$ifndef gdk_include_files}');
  103. writeln(f,'');
  104. writeln(f,' unit ',Copy(paramstr(1),1,pos('.',paramstr(1))-1),';');
  105. writeln(f,' interface');
  106. writeln(f,'');
  107. writeln(f,' uses');
  108. writeln(f,' glib,gdkmain,');
  109. writeln(f,' gtkobjects;');
  110. writeln(f,'');
  111. writeln(f,' {$ifdef win32}');
  112. writeln(f,' const');
  113. writeln(f,' gtkdll=''gdk-1.1.dll''; { leave the .dll else .1.1 -> .1 !! }');
  114. writeln(f,' {$else}');
  115. writeln(f,' const');
  116. writeln(f,' gtkdll=''gdk.so'';');
  117. writeln(f,' {$linklib c}');
  118. writeln(f,' {$endif}');
  119. writeln(f,'');
  120. writeln(f,' Type');
  121. writeln(f,' PLongint = ^Longint;');
  122. writeln(f,' PByte = ^Byte;');
  123. writeln(f,' PWord = ^Word;');
  124. writeln(f,' PINteger = ^Integer;');
  125. writeln(f,' PCardinal = ^Cardinal;');
  126. writeln(f,' PReal = ^Real;');
  127. writeln(f,' PDouble = ^Double;');
  128. writeln(f,'');
  129. writeln(f,'{$endif not gdk_include_files}');
  130. writeln(f,'');
  131. writeln(f,'{$ifdef read_interface}');
  132. writeln(f,'');
  133. while not eof(t) do
  134. begin
  135. read(t,ssmall);
  136. fixreplace(ssmall);
  137. if (not impl) and (copy(trimspace(ssmall),1,14)='implementation') then
  138. begin
  139. impl:=true;
  140. readln(t,s);
  141. writeln(f,'{$endif read_interface}');
  142. writeln(f,'');
  143. writeln(f,'');
  144. writeln(f,'{$ifndef gdk_include_files}');
  145. writeln(f,' implementation');
  146. writeln(f,'{$endif not gdk_include_files}');
  147. writeln(f,'');
  148. writeln(f,'{$ifdef read_implementation}');
  149. writeln(f,'');
  150. continue;
  151. end;
  152. if (impl) and (copy(trimspace(ssmall),1,4)='end.') then
  153. begin
  154. writeln(f,'{$endif read_implementation}');
  155. writeln(f,'');
  156. writeln(f,'');
  157. writeln(f,'{$ifndef gdk_include_files}');
  158. writeln(f,'end.');
  159. writeln(f,'{$endif not gdk_include_files}');
  160. writeln(f,'');
  161. writeln(f,'{');
  162. writeln(f,' $Log: fixgdk.pp,v $
  163. writeln(f,' Revision 1.1 1999/11/24 23:36:33 peter
  164. writeln(f,' * moved to packages dir
  165. writeln(f,'
  166. writeln(f,' Revision 1.1 1999/05/07 15:09:36 peter
  167. writeln(f,' * more fixes
  168. writeln(f,'');
  169. writeln(f,'}');
  170. continue;
  171. end;
  172. readln(t,s);
  173. fixreplace(s);
  174. func:=false;
  175. if lower(copy(trimspace(ssmall),1,8))='function' then
  176. begin
  177. func:=true;
  178. name:=trimspace(ssmall+s);
  179. delete(name,1,9);
  180. name:=trimspace(name);
  181. i:=1;
  182. while (name[i] in ['_','A'..'Z','a'..'z','0'..'9']) do
  183. inc(i);
  184. delete(name,i,255);
  185. hs:=trimbegin(ssmall);
  186. replace(hs,'FUNCTION','function ',true);
  187. write(f,hs);
  188. end
  189. else
  190. if lower(copy(trimspace(ssmall),1,9))='procedure' then
  191. begin
  192. func:=true;
  193. name:=trimspace(ssmall+s);
  194. delete(name,1,10);
  195. name:=trimspace(name);
  196. i:=1;
  197. while (name[i] in ['_','A'..'Z','a'..'z','0'..'9']) do
  198. inc(i);
  199. delete(name,i,255);
  200. write(f,trimbegin(ssmall));
  201. end
  202. else
  203. write(f,ssmall);
  204. if func and (copy(name,1,3)='gdk') then
  205. begin
  206. if pos('cdecl;',s)=0 then
  207. begin
  208. write(f,s);
  209. readln(t,s);
  210. end;
  211. replace(s,'CDECL;','{$ifndef win32}cdecl;{$endif}',true);
  212. writeln(f,s);
  213. end
  214. else
  215. writeln(f,s);
  216. end;
  217. close(f);
  218. close(t);
  219. erase(t);
  220. rename(f,paramstr(1));
  221. end.