msg2inc.pp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836
  1. {
  2. $Id$
  3. This program is part of the Free Pascal run time library.
  4. Copyright (c) 1998-2002 by Peter Vreman
  5. Convert a .msg file to an .inc file with a const array of char
  6. And for the lazy docwriters it can also generate some TeX output
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. program msg2inc;
  14. uses
  15. strings;
  16. {$ifdef unix}
  17. {$define EOL_ONE_CHAR}
  18. {$endif unix}
  19. {$ifdef amiga}
  20. {$define EOL_ONE_CHAR}
  21. {$endif amiga}
  22. {$ifdef morphos}
  23. {$define EOL_ONE_CHAR}
  24. {$endif}
  25. const
  26. version='1.00';
  27. {$ifdef EOL_ONE_CHAR}
  28. eollen=1;
  29. {$else}
  30. eollen=2;
  31. {$endif}
  32. msgparts = 20;
  33. type
  34. TMode=(M_Char,M_Tex,M_Intel,M_String,M_Renumber);
  35. var
  36. InFile,
  37. OutFile,
  38. OutName : string;
  39. Mode : TMode;
  40. TexHeader : boolean;
  41. MsgTxt : pchar;
  42. EnumTxt : pchar;
  43. enumsize,
  44. msgsize : longint;
  45. msgidxmax : array[1..msgparts] of longint;
  46. msgs : array[0..msgparts,0..999] of boolean;
  47. procedure LoadMsgFile(const fn:string);
  48. var
  49. f : text;
  50. error,
  51. multiline : boolean;
  52. code : word;
  53. numpart,numidx,
  54. line,i,j,num : longint;
  55. ptxt,
  56. penum : pchar;
  57. number,
  58. s,s1 : string;
  59. procedure err(const msgstr:string);
  60. begin
  61. writeln('error in line ',line,': ',msgstr);
  62. error:=true;
  63. end;
  64. begin
  65. Writeln('Loading messagefile ',fn);
  66. {Read the message file}
  67. assign(f,fn);
  68. {$I-}
  69. reset(f);
  70. {$I+}
  71. if ioresult<>0 then
  72. begin
  73. WriteLn('fatal error: '+fn+' not found');
  74. halt(1);
  75. end;
  76. { First parse the file and count bytes needed }
  77. fillchar(msgidxmax,sizeof(msgidxmax),0);
  78. fillchar(msgs,sizeof(msgs),0);
  79. error:=false;
  80. line:=0;
  81. multiline:=false;
  82. msgsize:=0;
  83. while not eof(f) do
  84. begin
  85. readln(f,s);
  86. inc(line);
  87. if multiline then
  88. begin
  89. if s=']' then
  90. multiline:=false
  91. else
  92. inc(msgsize,length(s)+1); { +1 for linebreak }
  93. end
  94. else
  95. begin
  96. if (s<>'') and not(s[1] in ['#',';','%']) then
  97. begin
  98. i:=pos('=',s);
  99. if i>0 then
  100. begin
  101. j:=i+1;
  102. if not(s[j] in ['0'..'9']) then
  103. err('no number found')
  104. else
  105. begin
  106. while (s[j] in ['0'..'9']) do
  107. inc(j);
  108. end;
  109. if j-i-1<>5 then
  110. err('number length is not 5');
  111. number:=Copy(s,i+1,j-i-1);
  112. { update the max index }
  113. val(number,num,code);
  114. numpart:=num div 1000;
  115. if numpart=0 then
  116. err('number should be > 1000');
  117. numidx:=num mod 1000;
  118. { duplicate ? }
  119. if msgs[numpart,numidx] then
  120. err('duplicate number found');
  121. msgs[numpart,numidx]:=true;
  122. { check range }
  123. if numpart > msgparts then
  124. err('number is to large')
  125. else
  126. if numidx > msgidxmax[numpart] then
  127. msgidxmax[numpart]:=numidx;
  128. if s[j+1]='[' then
  129. begin
  130. inc(msgsize,j-i);
  131. multiline:=true
  132. end
  133. else
  134. inc(msgsize,length(s)-i+1);
  135. inc(enumsize,j);
  136. end
  137. else
  138. err('no = found');
  139. end;
  140. end;
  141. end;
  142. if multiline then
  143. err('still in multiline mode');
  144. if error then
  145. begin
  146. close(f);
  147. writeln('aborting');
  148. halt(1);
  149. end;
  150. { alloc memory }
  151. getmem(msgtxt,msgsize);
  152. ptxt:=msgtxt;
  153. getmem(enumtxt,enumsize);
  154. penum:=enumtxt;
  155. { now read the buffer in mem }
  156. reset(f);
  157. while not eof(f) do
  158. begin
  159. readln(f,s);
  160. if multiline then
  161. begin
  162. if s=']' then
  163. begin
  164. multiline:=false;
  165. { overwrite last eol }
  166. dec(ptxt);
  167. ptxt^:=#0;
  168. inc(ptxt);
  169. end
  170. else
  171. begin
  172. move(s[1],ptxt^,length(s));
  173. inc(ptxt,length(s));
  174. ptxt^:=#10;
  175. inc(ptxt);
  176. end;
  177. end
  178. else
  179. begin
  180. if (s<>'') and not(s[1] in ['#',';','%']) then
  181. begin
  182. i:=pos('=',s);
  183. if i>0 then
  184. begin
  185. j:=i+1;
  186. while (s[j] in ['0'..'9']) do
  187. inc(j);
  188. {enum}
  189. move(s[1],penum^,i-1);
  190. inc(penum,i-1);
  191. penum^:='=';
  192. inc(penum);
  193. number:=Copy(s,i+1,j-i-1);
  194. move(number[1],penum^,length(number));
  195. inc(penum,length(number));
  196. penum^:=#0;
  197. inc(penum);
  198. { multiline start then no txt }
  199. if s[j+1]='[' then
  200. begin
  201. s1:=Copy(s,i+1,j-i);
  202. move(s1[1],ptxt^,length(s1));
  203. inc(ptxt,length(s1));
  204. multiline:=true;
  205. end
  206. else
  207. begin
  208. { txt including number }
  209. s1:=Copy(s,i+1,255);
  210. move(s1[1],ptxt^,length(s1));
  211. inc(ptxt,length(s1));
  212. ptxt^:=#0;
  213. inc(ptxt);
  214. end;
  215. end;
  216. end;
  217. end;
  218. end;
  219. close(f);
  220. end;
  221. {*****************************************************************************
  222. WriteEnumFile
  223. *****************************************************************************}
  224. procedure WriteEnumFile(const fn,typename:string);
  225. var
  226. t : text;
  227. i : longint;
  228. p : pchar;
  229. start : boolean;
  230. begin
  231. writeln('Writing enumfile '+fn);
  232. {Open textfile}
  233. assign(t,fn);
  234. rewrite(t);
  235. writeln(t,'const');
  236. {Parse buffer in msgbuf and create indexs}
  237. p:=enumtxt;
  238. start:=true;
  239. for i:=1 to enumsize do
  240. begin
  241. if start then
  242. begin
  243. write(t,' ');
  244. start:=false;
  245. end;
  246. if p^=#0 then
  247. begin
  248. writeln(t,';');
  249. start:=true;
  250. end
  251. else
  252. begin
  253. write(t,p^);
  254. end;
  255. inc(p);
  256. end;
  257. writeln(t,'');
  258. { msgtxt size }
  259. writeln(t,' MsgTxtSize = ',msgsize,';');
  260. writeln(t,'');
  261. { max msg idx table }
  262. writeln(t,' MsgIdxMax : array[1..20] of longint=(');
  263. write(t,' ');
  264. for i:=1 to 20 do
  265. begin
  266. write(t,msgidxmax[i]+1);
  267. if i<20 then
  268. write(t,',');
  269. if i=10 then
  270. begin
  271. writeln(t,'');
  272. write(t,' ');
  273. end;
  274. end;
  275. writeln(t,'');
  276. writeln(t,' );');
  277. close(t);
  278. end;
  279. {*****************************************************************************
  280. WriteStringFile
  281. *****************************************************************************}
  282. procedure WriteStringFile(const fn,constname:string);
  283. const
  284. maxslen=240; { to overcome aligning problems }
  285. function l0(l:longint):string;
  286. var
  287. s : string[16];
  288. begin
  289. str(l,s);
  290. while (length(s)<5) do
  291. s:='0'+s;
  292. l0:=s;
  293. end;
  294. var
  295. t : text;
  296. f : file;
  297. slen,
  298. len,i : longint;
  299. p : pchar;
  300. s : string;
  301. start,
  302. quote : boolean;
  303. begin
  304. writeln('Writing stringfile ',fn);
  305. {Open textfile}
  306. assign(t,fn);
  307. rewrite(t);
  308. writeln(t,'{$ifdef Delphi}');
  309. writeln(t,'const '+constname+' : array[0..000000] of string[',maxslen,']=(');
  310. writeln(t,'{$else Delphi}');
  311. writeln(t,'const '+constname+' : array[0..000000,1..',maxslen,'] of char=(');
  312. write(t,'{$endif Delphi}');
  313. {Parse buffer in msgbuf and create indexs}
  314. p:=msgtxt;
  315. slen:=0;
  316. len:=0;
  317. quote:=false;
  318. start:=true;
  319. for i:=1 to msgsize do
  320. begin
  321. if slen>=maxslen then
  322. begin
  323. if quote then
  324. begin
  325. write(t,'''');
  326. quote:=false;
  327. end;
  328. write(t,',');
  329. slen:=0;
  330. inc(len);
  331. end;
  332. if (len>70) or (start) then
  333. begin
  334. if quote then
  335. begin
  336. write(t,'''');
  337. quote:=false;
  338. end;
  339. if slen>0 then
  340. writeln(t,'+')
  341. else
  342. writeln(t);
  343. len:=0;
  344. start:=false;
  345. end;
  346. if (len=0) then
  347. write(t,' ');
  348. if (ord(p^)>=32) and (p^<>#39) then
  349. begin
  350. if not quote then
  351. begin
  352. write(t,'''');
  353. quote:=true;
  354. inc(len);
  355. end;
  356. write(t,p^);
  357. inc(len);
  358. end
  359. else
  360. begin
  361. if quote then
  362. begin
  363. write(t,'''');
  364. inc(len);
  365. quote:=false;
  366. end;
  367. write(t,'#'+chr(ord(p^) div 100+48)+chr((ord(p^) mod 100) div 10+48)+chr(ord(p^) mod 10+48));
  368. inc(len,3);
  369. end;
  370. if p^ in [#0,#10] then
  371. start:=true;
  372. inc(slen);
  373. inc(p);
  374. end;
  375. if quote then
  376. write(t,'''');
  377. writeln(t,'');
  378. writeln(t,');');
  379. close(t);
  380. {update arraysize}
  381. s:=l0(msgsize div maxslen); { we start with 0 }
  382. assign(f,fn);
  383. reset(f,1);
  384. seek(f,34+eollen+length(constname));
  385. blockwrite(f,s[1],5);
  386. seek(f,90+3*eollen+2*length(constname));
  387. blockwrite(f,s[1],5);
  388. close(f);
  389. end;
  390. {*****************************************************************************
  391. WriteCharFile
  392. *****************************************************************************}
  393. procedure WriteCharFile(const fn,constname:string);
  394. function l0(l:longint):string;
  395. var
  396. s : string[16];
  397. begin
  398. str(l,s);
  399. while (length(s)<5) do
  400. s:='0'+s;
  401. l0:=s;
  402. end;
  403. function createconst(b:byte):string;
  404. begin
  405. if (b in [32..127]) and (b<>39) then
  406. createconst:=''''+chr(b)+''''
  407. else
  408. createconst:='#'+chr(b div 100+48)+chr((b mod 100) div 10+48)+chr(b mod 10+48)
  409. end;
  410. var
  411. t : text;
  412. f : file;
  413. cidx,i : longint;
  414. p : pchar;
  415. s : string;
  416. begin
  417. writeln('Writing charfile '+fn);
  418. {Open textfile}
  419. assign(t,fn);
  420. rewrite(t);
  421. writeln(t,'const ',constname,' : array[1..00000] of char=(');
  422. {Parse buffer in msgbuf and create indexs}
  423. p:=msgtxt;
  424. cidx:=0;
  425. for i:=1to msgsize do
  426. begin
  427. if cidx=15 then
  428. begin
  429. if cidx>0 then
  430. writeln(t,',')
  431. else
  432. writeln(t,'');
  433. write(t,' ');
  434. cidx:=0;
  435. end
  436. else
  437. if cidx>0 then
  438. write(t,',')
  439. else
  440. write(t,' ');
  441. write(t,createconst(ord(p^)));
  442. inc(cidx);
  443. inc(p);
  444. end;
  445. writeln(t,');');
  446. close(t);
  447. {update arraysize}
  448. s:=l0(msgsize);
  449. assign(f,fn);
  450. reset(f,1);
  451. seek(f,18+length(constname));
  452. blockwrite(f,s[1],5);
  453. close(f);
  454. end;
  455. {*****************************************************************************
  456. WriteIntelFile
  457. *****************************************************************************}
  458. procedure WriteIntelFile(const fn,constname:string);
  459. var
  460. t : text;
  461. len,i : longint;
  462. p : pchar;
  463. start,
  464. quote : boolean;
  465. begin
  466. writeln('Writing Intelfile ',fn);
  467. {Open textfile}
  468. assign(t,fn);
  469. rewrite(t);
  470. writeln(t,'procedure '+constname+';assembler;');
  471. writeln(t,'asm');
  472. {Parse buffer in msgbuf and create indexs}
  473. p:=msgtxt;
  474. len:=0;
  475. start:=true;
  476. quote:=false;
  477. for i:=1to msgsize do
  478. begin
  479. if len>70 then
  480. begin
  481. if quote then
  482. begin
  483. write(t,'''');
  484. quote:=false;
  485. end;
  486. writeln(t,'');
  487. start:=true;
  488. end;
  489. if start then
  490. begin
  491. write(t,' db ''');
  492. len:=0;
  493. quote:=true;
  494. end;
  495. if (ord(p^)>=32) and (p^<>#39) then
  496. begin
  497. if not quote then
  498. begin
  499. write(t,',''');
  500. quote:=true;
  501. inc(len);
  502. end;
  503. write(t,p^);
  504. inc(len);
  505. end
  506. else
  507. begin
  508. if quote then
  509. begin
  510. write(t,'''');
  511. inc(len);
  512. quote:=false;
  513. end;
  514. write(t,','+chr(ord(p^) div 100+48)+chr((ord(p^) mod 100) div 10+48)+chr(ord(p^) mod 10+48));
  515. inc(len,4);
  516. end;
  517. inc(p);
  518. end;
  519. if quote then
  520. write(t,'''');
  521. writeln(t,'');
  522. writeln(t,'end;');
  523. close(t);
  524. end;
  525. {*****************************************************************************
  526. RenumberFile
  527. *****************************************************************************}
  528. procedure RenumberFile(const fn,name:string);
  529. var
  530. f,t : text;
  531. i : longint;
  532. s,s1 : string;
  533. begin
  534. Writeln('Renumbering ',fn);
  535. {Read the message file}
  536. assign(f,fn);
  537. {$I-}
  538. reset(f);
  539. {$I+}
  540. if ioresult<>0 then
  541. begin
  542. WriteLn('*** message file '+fn+' not found ***');
  543. exit;
  544. end;
  545. assign(t,'msg2inc.$$$');
  546. rewrite(t);
  547. i:=0;
  548. while not eof(f) do
  549. begin
  550. readln(f,s);
  551. if (copy(s,1,length(Name))=Name) and (s[3] in ['0'..'9']) then
  552. begin
  553. inc(i);
  554. str(i,s1);
  555. while length(s1)<3 do
  556. s1:='0'+s1;
  557. writeln(t,Name+s1+Copy(s,6,255));
  558. end
  559. else
  560. writeln(t,s);
  561. end;
  562. close(t);
  563. close(f);
  564. { rename new file }
  565. erase(f);
  566. rename(t,fn);
  567. end;
  568. {*****************************************************************************
  569. WriteTexFile
  570. *****************************************************************************}
  571. Function EscapeString (Const S : String) : String;
  572. Var
  573. I : longint;
  574. hs : string;
  575. begin
  576. hs:='';
  577. for i:=1 to length(s) do
  578. if (S[i]='$') then
  579. begin
  580. if (s[i+1] in ['0'..'9']) then
  581. hs:=hs+'arg'
  582. else
  583. hs:=hs+'\$';
  584. end
  585. else
  586. hs:=hs+s[i];
  587. EscapeString:=hs;
  588. end;
  589. procedure WriteTexFile(const infn,outfn:string);
  590. var
  591. t,f : text;
  592. line,
  593. i,k : longint;
  594. s,s1 : string;
  595. texoutput : boolean;
  596. begin
  597. Writeln('Loading messagefile ',infn);
  598. writeln('Writing TeXfile ',outfn);
  599. { Open infile }
  600. assign(f,infn);
  601. {$I-}
  602. reset(f);
  603. {$I+}
  604. if ioresult<>0 then
  605. begin
  606. WriteLn('*** message file '+infn+' not found ***');
  607. exit;
  608. end;
  609. { Open outfile }
  610. assign(t,outfn);
  611. rewrite(t);
  612. If texheader then
  613. begin
  614. writeln (t,'\documentclass{article}');
  615. writeln (t,'\usepackage{html}');
  616. writeln (t,'\usepackage{fpc}');
  617. writeln (t,'\begin{document}');
  618. end;
  619. { Parse }
  620. line:=0;
  621. TexOutput:=False;
  622. while not eof(f) do
  623. begin
  624. readln(f,s);
  625. inc(line);
  626. If Pos ('# BeginOfTeX',S)=1 then
  627. TexOutPut:=True
  628. else if pos ('# EndOfTeX',S)=1 then
  629. TexOutPut:=False;
  630. if (s<>'') and not(s[1] in ['#',';']) and TeXOutPut then
  631. begin
  632. if s[1]='%' then
  633. begin
  634. Delete(s,1,1);
  635. writeln(t,s);
  636. end
  637. else
  638. begin
  639. i:=pos('=',s);
  640. if i>0 then
  641. begin
  642. inc(i);
  643. while s[i] in ['0'..'9'] do
  644. inc(i);
  645. inc(i);
  646. s1:='';
  647. k:=0;
  648. while (k<5) and (s[i+k]<>'_') do
  649. begin
  650. case s[i+k] of
  651. 'W' : s1:='Warning: ';
  652. 'E' : s1:='Error: ';
  653. 'F' : s1:='Fatal: ';
  654. 'N' : s1:='Note: ';
  655. 'I' : s1:='Info: ';
  656. 'H' : s1:='Hint: ';
  657. end;
  658. inc(k);
  659. end;
  660. if s[i+k]='_' then
  661. inc(i,k+1);
  662. writeln(t,'\item ['+s1+escapestring(Copy(s,i,255))+']');
  663. end
  664. else
  665. writeln('error in line: ',line,' skipping');
  666. end;
  667. end;
  668. end;
  669. If TexHeader then
  670. writeln (t,'\end{document}');
  671. close(t);
  672. close(f);
  673. end;
  674. {*****************************************************************************
  675. Main Program
  676. *****************************************************************************}
  677. procedure getpara;
  678. var
  679. ch : char;
  680. para : string;
  681. files,i : word;
  682. procedure helpscreen;
  683. begin
  684. writeln('usage : msg2inc [Options] <msgfile> <incfile> <constname>');
  685. writeln('<Options> can be : -T Create .doc TeX file');
  686. writeln(' -TS Create .doc TeX file (stand-alone)');
  687. writeln(' -I Intel style asm output');
  688. writeln(' -S array of string');
  689. writeln(' -C array of char');
  690. writeln(' -R renumber section <incfile>');
  691. writeln(' -V Show version');
  692. writeln(' -? or -H This HelpScreen');
  693. halt(1);
  694. end;
  695. begin
  696. Mode:=M_String;
  697. FIles:=0;
  698. for i:=1to paramcount do
  699. begin
  700. para:=paramstr(i);
  701. if (para[1]='-') then
  702. begin
  703. ch:=upcase(para[2]);
  704. delete(para,1,2);
  705. case ch of
  706. 'T' : begin
  707. case upcase(para[1]) of
  708. 'S' : TexHeader:=True;
  709. end;
  710. Mode:=M_Tex;
  711. end;
  712. 'I' : Mode:=M_Intel;
  713. 'S' : Mode:=M_String;
  714. 'C' : Mode:=M_Char;
  715. 'R' : Mode:=M_Renumber;
  716. 'V' : begin
  717. Writeln('Msg2Inc ',version,' for Free Pascal (C) 1998-2002 Peter Vreman');
  718. Writeln;
  719. Halt;
  720. end;
  721. '?','H' : helpscreen;
  722. end;
  723. end
  724. else
  725. begin
  726. inc(Files);
  727. if Files>3 then
  728. HelpScreen;
  729. case Files of
  730. 1 : InFile:=Para;
  731. 2 : OutFile:=Para;
  732. 3 : OutName:=Para;
  733. end;
  734. end;
  735. end;
  736. case Mode of
  737. M_Renumber,
  738. M_Tex : if Files<2 then
  739. Helpscreen;
  740. else
  741. if FIles<3 then
  742. HelpScreen;
  743. end;
  744. end;
  745. begin
  746. GetPara;
  747. case Mode of
  748. M_Renumber : begin
  749. Renumberfile(Infile,OutFile);
  750. end;
  751. M_Tex : begin
  752. if pos('.tex',outfile)=0 then
  753. Outfile:=OutFile+'.tex';
  754. WriteTexFile(InFile,Outfile);
  755. end;
  756. M_Intel : begin
  757. Loadmsgfile(InFile);
  758. WriteEnumFile(OutFile+'idx.inc',OutName+'const');
  759. WriteIntelFile(OutFile+'txt.inc',OutName+'txt');
  760. end;
  761. M_String : begin
  762. Loadmsgfile(InFile);
  763. WriteEnumFile(OutFile+'idx.inc',OutName+'const');
  764. WriteStringFile(OutFile+'txt.inc',OutName+'txt');
  765. end;
  766. M_Char : begin
  767. Loadmsgfile(InFile);
  768. WriteEnumFile(OutFile+'idx.inc',OutName+'const');
  769. WriteCharFile(OutFile+'txt.inc',OutName+'txt');
  770. end;
  771. end;
  772. end.
  773. {
  774. $Log$
  775. Revision 1.12 2004-06-06 15:39:49 karoly
  776. * added support for morphos
  777. Revision 1.11 2003/03/16 23:10:04 pierre
  778. * merge from fixes branch
  779. Revision 1.1.2.6 2003/02/03 16:34:57 pierre
  780. * use EOL_ONE_CHAR to set eollen variable, also define it for amiga
  781. Revision 1.10 2002/05/18 13:34:27 peter
  782. * readded missing revisions
  783. Revision 1.9 2002/05/16 19:46:53 carl
  784. + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
  785. + try to fix temp allocation (still in ifdef)
  786. + generic constructor calls
  787. + start of tassembler / tmodulebase class cleanup
  788. }