msg2inc.pp 19 KB

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