crt.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2000 by the Free Pascal development team.
  5. Borland Pascal 7 Compatible CRT Unit for Go32V1 and Go32V2
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit crt;
  13. interface
  14. const
  15. { CRT modes }
  16. BW40 = 0; { 40x25 B/W on Color Adapter }
  17. CO40 = 1; { 40x25 Color on Color Adapter }
  18. BW80 = 2; { 80x25 B/W on Color Adapter }
  19. CO80 = 3; { 80x25 Color on Color Adapter }
  20. Mono = 7; { 80x25 on Monochrome Adapter }
  21. Font8x8 = 256; { Add-in for ROM font }
  22. { Mode constants for 3.0 compatibility }
  23. C40 = CO40;
  24. C80 = CO80;
  25. { Foreground and background color constants }
  26. Black = 0;
  27. Blue = 1;
  28. Green = 2;
  29. Cyan = 3;
  30. Red = 4;
  31. Magenta = 5;
  32. Brown = 6;
  33. LightGray = 7;
  34. { Foreground color constants }
  35. DarkGray = 8;
  36. LightBlue = 9;
  37. LightGreen = 10;
  38. LightCyan = 11;
  39. LightRed = 12;
  40. LightMagenta = 13;
  41. Yellow = 14;
  42. White = 15;
  43. { Add-in for blinking }
  44. Blink = 128;
  45. var
  46. { Interface variables }
  47. CheckBreak: Boolean; { Enable Ctrl-Break }
  48. CheckEOF: Boolean; { Enable Ctrl-Z }
  49. DirectVideo: Boolean; { Enable direct video addressing }
  50. CheckSnow: Boolean; { Enable snow filtering }
  51. LastMode: Word; { Current text mode }
  52. TextAttr: Byte; { Current text attribute }
  53. WindMin: Word; { Window upper left coordinates }
  54. WindMax: Word; { Window lower right coordinates }
  55. { Interface procedures }
  56. procedure AssignCrt(var F: Text);
  57. function KeyPressed: Boolean;
  58. function ReadKey: Char;
  59. procedure TextMode(Mode: Integer);
  60. procedure Window(X1,Y1,X2,Y2: Byte);
  61. procedure GotoXY(X,Y: Byte);
  62. function WhereX: Byte;
  63. function WhereY: Byte;
  64. procedure ClrScr;
  65. procedure ClrEol;
  66. procedure InsLine;
  67. procedure DelLine;
  68. procedure TextColor(Color: Byte);
  69. procedure TextBackground(Color: Byte);
  70. procedure LowVideo;
  71. procedure HighVideo;
  72. procedure NormVideo;
  73. procedure Delay(MS: Word);
  74. procedure Sound(Hz: Word);
  75. procedure NoSound;
  76. {Extra Functions}
  77. procedure cursoron;
  78. procedure cursoroff;
  79. procedure cursorbig;
  80. implementation
  81. uses
  82. go32;
  83. {$ASMMODE ATT}
  84. var
  85. DelayCnt, { don't modify this var name, as it is hard coded }
  86. ScreenWidth,
  87. ScreenHeight : longint;
  88. {
  89. definition of textrec is in textrec.inc
  90. }
  91. {$i textrec.inc}
  92. {****************************************************************************
  93. Low level Routines
  94. ****************************************************************************}
  95. procedure setscreenmode(mode : byte);
  96. begin
  97. asm
  98. movb 8(%ebp),%al
  99. xorb %ah,%ah
  100. pushl %ebp
  101. int $0x10
  102. popl %ebp
  103. end;
  104. end;
  105. function GetScreenHeight : longint;
  106. begin
  107. dosmemget($40,$84,getscreenheight,1);
  108. inc(getscreenheight);
  109. end;
  110. function GetScreenWidth : longint;
  111. begin
  112. dosmemget($40,$4a,getscreenwidth,1);
  113. end;
  114. procedure SetScreenCursor(x,y : longint);
  115. begin
  116. asm
  117. movb $0x02,%ah
  118. movb $0,%bh
  119. movb y,%dh
  120. movb x,%dl
  121. subw $0x0101,%dx
  122. pushl %ebp
  123. int $0x10
  124. popl %ebp
  125. end;
  126. end;
  127. procedure GetScreenCursor(var x,y : longint);
  128. begin
  129. x:=0;
  130. y:=0;
  131. dosmemget($40,$50,x,1);
  132. dosmemget($40,$51,y,1);
  133. inc(x);
  134. inc(y);
  135. end;
  136. {****************************************************************************
  137. Helper Routines
  138. ****************************************************************************}
  139. Function WinMinX: Byte;
  140. {
  141. Current Minimum X coordinate
  142. }
  143. Begin
  144. WinMinX:=(WindMin and $ff)+1;
  145. End;
  146. Function WinMinY: Byte;
  147. {
  148. Current Minimum Y Coordinate
  149. }
  150. Begin
  151. WinMinY:=(WindMin shr 8)+1;
  152. End;
  153. Function WinMaxX: Byte;
  154. {
  155. Current Maximum X coordinate
  156. }
  157. Begin
  158. WinMaxX:=(WindMax and $ff)+1;
  159. End;
  160. Function WinMaxY: Byte;
  161. {
  162. Current Maximum Y coordinate;
  163. }
  164. Begin
  165. WinMaxY:=(WindMax shr 8) + 1;
  166. End;
  167. Function FullWin:boolean;
  168. {
  169. Full Screen 80x25? Window(1,1,80,25) is used, allows faster routines
  170. }
  171. begin
  172. FullWin:=(WinMinX=1) and (WinMinY=1) and
  173. (WinMaxX=ScreenWidth) and (WinMaxY=ScreenHeight);
  174. end;
  175. {****************************************************************************
  176. Public Crt Functions
  177. ****************************************************************************}
  178. procedure textmode(mode : integer);
  179. begin
  180. lastmode:=mode;
  181. mode:=mode and $ff;
  182. setscreenmode(mode);
  183. screenwidth:=getscreenwidth;
  184. screenheight:=getscreenheight;
  185. windmin:=0;
  186. windmax:=(screenwidth-1) or ((screenheight-1) shl 8);
  187. end;
  188. Procedure TextColor(Color: Byte);
  189. {
  190. Switch foregroundcolor
  191. }
  192. Begin
  193. TextAttr:=(Color and $8f) or (TextAttr and $70);
  194. End;
  195. Procedure TextBackground(Color: Byte);
  196. {
  197. Switch backgroundcolor
  198. }
  199. Begin
  200. TextAttr:=((Color shl 4) and ($f0 and not Blink)) or (TextAttr and ($0f OR Blink) );
  201. End;
  202. Procedure HighVideo;
  203. {
  204. Set highlighted output.
  205. }
  206. Begin
  207. TextColor(TextAttr Or $08);
  208. End;
  209. Procedure LowVideo;
  210. {
  211. Set normal output
  212. }
  213. Begin
  214. TextColor(TextAttr And $77);
  215. End;
  216. Procedure NormVideo;
  217. {
  218. Set normal back and foregroundcolors.
  219. }
  220. Begin
  221. TextColor(7);
  222. TextBackGround(0);
  223. End;
  224. Procedure GotoXy(X: Byte; Y: Byte);
  225. {
  226. Go to coordinates X,Y in the current window.
  227. }
  228. Begin
  229. If (X>0) and (X<=WinMaxX- WinMinX+1) and
  230. (Y>0) and (Y<=WinMaxY-WinMinY+1) Then
  231. Begin
  232. Inc(X,WinMinX-1);
  233. Inc(Y,WinMinY-1);
  234. SetScreenCursor(x,y);
  235. End;
  236. End;
  237. Procedure Window(X1, Y1, X2, Y2: Byte);
  238. {
  239. Set screen window to the specified coordinates.
  240. }
  241. Begin
  242. if (X1>X2) or (X2>ScreenWidth) or
  243. (Y1>Y2) or (Y2>ScreenHeight) then
  244. exit;
  245. WindMin:=((Y1-1) Shl 8)+(X1-1);
  246. WindMax:=((Y2-1) Shl 8)+(X2-1);
  247. GoToXY(1,1);
  248. End;
  249. Procedure ClrScr;
  250. {
  251. Clear the current window, and set the cursor on 1,1
  252. }
  253. var
  254. fil : word;
  255. y : longint;
  256. begin
  257. fil:=32 or (textattr shl 8);
  258. if FullWin then
  259. DosmemFillWord($b800,0,ScreenHeight*ScreenWidth,fil)
  260. else
  261. begin
  262. for y:=WinMinY to WinMaxY do
  263. DosmemFillWord($b800,((y-1)*ScreenWidth+(WinMinX-1))*2,WinMaxX-WinMinX+1,fil);
  264. end;
  265. Gotoxy(1,1);
  266. end;
  267. Procedure ClrEol;
  268. {
  269. Clear from current position to end of line.
  270. }
  271. var
  272. x,y : longint;
  273. fil : word;
  274. Begin
  275. GetScreenCursor(x,y);
  276. fil:=32 or (textattr shl 8);
  277. if x<WinMaxX then
  278. DosmemFillword($b800,((y-1)*ScreenWidth+(x-1))*2,WinMaxX-x+1,fil);
  279. End;
  280. Function WhereX: Byte;
  281. {
  282. Return current X-position of cursor.
  283. }
  284. var
  285. x,y : longint;
  286. Begin
  287. GetScreenCursor(x,y);
  288. WhereX:=x-WinMinX+1;
  289. End;
  290. Function WhereY: Byte;
  291. {
  292. Return current Y-position of cursor.
  293. }
  294. var
  295. x,y : longint;
  296. Begin
  297. GetScreenCursor(x,y);
  298. WhereY:=y-WinMinY+1;
  299. End;
  300. {*************************************************************************
  301. KeyBoard
  302. *************************************************************************}
  303. var
  304. is_last : boolean;
  305. last : char;
  306. function readkey : char;
  307. var
  308. char2 : char;
  309. char1 : char;
  310. begin
  311. if is_last then
  312. begin
  313. is_last:=false;
  314. readkey:=last;
  315. end
  316. else
  317. begin
  318. asm
  319. movb $0,%ah
  320. pushl %ebp
  321. int $0x16
  322. popl %ebp
  323. movb %al,char1
  324. movb %ah,char2
  325. end;
  326. if char1=#0 then
  327. begin
  328. is_last:=true;
  329. last:=char2;
  330. end;
  331. readkey:=char1;
  332. end;
  333. end;
  334. function keypressed : boolean;
  335. begin
  336. if is_last then
  337. begin
  338. keypressed:=true;
  339. exit;
  340. end
  341. else
  342. begin
  343. asm
  344. movb $1,%ah
  345. pushl %ebp
  346. int $0x16
  347. popl %ebp
  348. setnz %al
  349. movb %al,__RESULT
  350. end;
  351. end;
  352. end;
  353. {*************************************************************************
  354. Delay
  355. *************************************************************************}
  356. procedure Delayloop;assembler;
  357. asm
  358. .LDelayLoop1:
  359. subl $1,%eax
  360. jc .LDelayLoop2
  361. cmpl %fs:(%edi),%ebx
  362. je .LDelayLoop1
  363. .LDelayLoop2:
  364. end;
  365. procedure initdelay;assembler;
  366. asm
  367. movl $0x46c,%edi
  368. movl $-28,%edx
  369. movl %fs:(%edi),%ebx
  370. .LInitDel1:
  371. cmpl %fs:(%edi),%ebx
  372. je .LInitDel1
  373. movl %fs:(%edi),%ebx
  374. movl %edx,%eax
  375. call DelayLoop
  376. notl %eax
  377. xorl %edx,%edx
  378. movl $55,%ecx
  379. divl %ecx
  380. movl %eax,DelayCnt
  381. end;
  382. procedure Delay(MS: Word);assembler;
  383. asm
  384. movzwl MS,%ecx
  385. jecxz .LDelay2
  386. movl $0x400,%edi
  387. movl DelayCnt,%edx
  388. movl %fs:(%edi),%ebx
  389. .LDelay1:
  390. movl %edx,%eax
  391. call DelayLoop
  392. loop .LDelay1
  393. .LDelay2:
  394. end;
  395. procedure sound(hz : word);
  396. begin
  397. if hz=0 then
  398. begin
  399. nosound;
  400. exit;
  401. end;
  402. asm
  403. movzwl hz,%ecx
  404. movl $1193046,%eax
  405. cltd
  406. divl %ecx
  407. movl %eax,%ecx
  408. movb $0xb6,%al
  409. outb %al,$0x43
  410. movb %cl,%al
  411. outb %al,$0x42
  412. movb %ch,%al
  413. outb %al,$0x42
  414. inb $0x61,%al
  415. orb $0x3,%al
  416. outb %al,$0x61
  417. end ['EAX','ECX','EDX'];
  418. end;
  419. procedure nosound;
  420. begin
  421. asm
  422. inb $0x61,%al
  423. andb $0xfc,%al
  424. outb %al,$0x61
  425. end ['EAX'];
  426. end;
  427. {****************************************************************************
  428. HighLevel Crt Functions
  429. ****************************************************************************}
  430. procedure removeline(y : longint);
  431. var
  432. fil : word;
  433. begin
  434. fil:=32 or (textattr shl 8);
  435. y:=WinMinY+y-1;
  436. While (y<WinMaxY) do
  437. begin
  438. dosmemmove($b800,(y*ScreenWidth+(WinMinX-1))*2,
  439. $b800,((y-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1)*2);
  440. inc(y);
  441. end;
  442. dosmemfillword($b800,((WinMaxY-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1),fil);
  443. end;
  444. procedure delline;
  445. begin
  446. removeline(wherey);
  447. end;
  448. procedure insline;
  449. var
  450. my,y : longint;
  451. fil : word;
  452. begin
  453. fil:=32 or (textattr shl 8);
  454. y:=WhereY;
  455. my:=WinMaxY-WinMinY;
  456. while (my>=y) do
  457. begin
  458. dosmemmove($b800,(((WinMinY+my-1)-1)*ScreenWidth+(WinMinX-1))*2,
  459. $b800,(((WinMinY+my)-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1)*2);
  460. dec(my);
  461. end;
  462. dosmemfillword($b800,(((WinMinY+y-1)-1)*ScreenWidth+(WinMinX-1))*2,(WinMaxX-WinMinX+1),fil);
  463. end;
  464. {****************************************************************************
  465. Extra Crt Functions
  466. ****************************************************************************}
  467. procedure cursoron;
  468. begin
  469. asm
  470. movb $1,%ah
  471. movb $10,%cl
  472. movb $9,%ch
  473. pushl %ebp
  474. int $0x10
  475. popl %ebp
  476. end;
  477. end;
  478. procedure cursoroff;
  479. begin
  480. asm
  481. movb $1,%ah
  482. movb $-1,%cl
  483. movb $-1,%ch
  484. pushl %ebp
  485. int $0x10
  486. popl %ebp
  487. end;
  488. end;
  489. procedure cursorbig;
  490. begin
  491. asm
  492. movb $1,%ah
  493. movw $110,%cx
  494. pushl %ebp
  495. int $0x10
  496. popl %ebp
  497. end;
  498. end;
  499. {*****************************************************************************
  500. Read and Write routines
  501. *****************************************************************************}
  502. var
  503. CurrX,CurrY : longint;
  504. Procedure WriteChar(c:char);
  505. var
  506. chattr : word;
  507. begin
  508. case c of
  509. #10 : inc(CurrY);
  510. #13 : CurrX:=WinMinX;
  511. #8 : begin
  512. if CurrX>WinMinX then
  513. dec(CurrX);
  514. end;
  515. #7 : begin { beep }
  516. end;
  517. else
  518. begin
  519. chattr:=(textattr shl 8) or byte(c);
  520. dosmemput($b800,((CurrY-1)*ScreenWidth+(CurrX-1))*2,chattr,2);
  521. inc(CurrX);
  522. end;
  523. end;
  524. if CurrX>WinMaxX then
  525. begin
  526. CurrX:=WinMinX;
  527. inc(CurrY);
  528. end;
  529. while CurrY>WinMaxY do
  530. begin
  531. removeline(1);
  532. dec(CurrY);
  533. end;
  534. end;
  535. Function CrtWrite(var f : textrec):integer;
  536. var
  537. i : longint;
  538. begin
  539. GetScreenCursor(CurrX,CurrY);
  540. for i:=0 to f.bufpos-1 do
  541. WriteChar(f.buffer[i]);
  542. SetScreenCursor(CurrX,CurrY);
  543. f.bufpos:=0;
  544. CrtWrite:=0;
  545. end;
  546. Function CrtRead(Var F: TextRec): Integer;
  547. procedure BackSpace;
  548. begin
  549. if (f.bufpos>0) and (f.bufpos=f.bufend) then
  550. begin
  551. WriteChar(#8);
  552. WriteChar(' ');
  553. WriteChar(#8);
  554. dec(f.bufpos);
  555. dec(f.bufend);
  556. end;
  557. end;
  558. var
  559. ch : Char;
  560. Begin
  561. GetScreenCursor(CurrX,CurrY);
  562. f.bufpos:=0;
  563. f.bufend:=0;
  564. repeat
  565. if f.bufpos>f.bufend then
  566. f.bufend:=f.bufpos;
  567. SetScreenCursor(CurrX,CurrY);
  568. ch:=readkey;
  569. case ch of
  570. #0 : case readkey of
  571. #71 : while f.bufpos>0 do
  572. begin
  573. dec(f.bufpos);
  574. WriteChar(#8);
  575. end;
  576. #75 : if f.bufpos>0 then
  577. begin
  578. dec(f.bufpos);
  579. WriteChar(#8);
  580. end;
  581. #77 : if f.bufpos<f.bufend then
  582. begin
  583. WriteChar(f.bufptr^[f.bufpos]);
  584. inc(f.bufpos);
  585. end;
  586. #79 : while f.bufpos<f.bufend do
  587. begin
  588. WriteChar(f.bufptr^[f.bufpos]);
  589. inc(f.bufpos);
  590. end;
  591. end;
  592. ^S,
  593. #8 : BackSpace;
  594. ^Y,
  595. #27 : begin
  596. f.bufpos:=f.bufend;
  597. while f.bufend>0 do
  598. BackSpace;
  599. end;
  600. #13 : begin
  601. WriteChar(#13);
  602. WriteChar(#10);
  603. f.bufptr^[f.bufend]:=#13;
  604. f.bufptr^[f.bufend+1]:=#10;
  605. inc(f.bufend,2);
  606. break;
  607. end;
  608. #26 : if CheckEOF then
  609. begin
  610. f.bufptr^[f.bufend]:=#26;
  611. inc(f.bufend);
  612. break;
  613. end;
  614. else
  615. begin
  616. if f.bufpos<f.bufsize-2 then
  617. begin
  618. f.buffer[f.bufpos]:=ch;
  619. inc(f.bufpos);
  620. WriteChar(ch);
  621. end;
  622. end;
  623. end;
  624. until false;
  625. f.bufpos:=0;
  626. SetScreenCursor(CurrX,CurrY);
  627. CrtRead:=0;
  628. End;
  629. Function CrtReturn:Integer;
  630. Begin
  631. CrtReturn:=0;
  632. end;
  633. Function CrtClose(Var F: TextRec): Integer;
  634. Begin
  635. F.Mode:=fmClosed;
  636. CrtClose:=0;
  637. End;
  638. Function CrtOpen(Var F: TextRec): Integer;
  639. Begin
  640. If F.Mode=fmOutput Then
  641. begin
  642. TextRec(F).InOutFunc:=@CrtWrite;
  643. TextRec(F).FlushFunc:=@CrtWrite;
  644. end
  645. Else
  646. begin
  647. F.Mode:=fmInput;
  648. TextRec(F).InOutFunc:=@CrtRead;
  649. TextRec(F).FlushFunc:=@CrtReturn;
  650. end;
  651. TextRec(F).CloseFunc:=@CrtClose;
  652. CrtOpen:=0;
  653. End;
  654. procedure AssignCrt(var F: Text);
  655. begin
  656. Assign(F,'');
  657. TextRec(F).OpenFunc:=@CrtOpen;
  658. end;
  659. var
  660. x,y : longint;
  661. begin
  662. { Load startup values }
  663. ScreenWidth:=GetScreenWidth;
  664. ScreenHeight:=GetScreenHeight;
  665. WindMax:=(ScreenWidth-1) or ((ScreenHeight-1) shl 8);
  666. { Load TextAttr }
  667. GetScreenCursor(x,y);
  668. dosmemget($b800,((y-1)*ScreenWidth+(x-1))*2+1,TextAttr,1);
  669. dosmemget($40,$49,lastmode,1);
  670. { Redirect the standard output }
  671. assigncrt(Output);
  672. Rewrite(Output);
  673. TextRec(Output).Handle:=StdOutputHandle;
  674. assigncrt(Input);
  675. Reset(Input);
  676. TextRec(Input).Handle:=StdInputHandle;
  677. { Calculates delay calibration }
  678. initdelay;
  679. end.
  680. {
  681. $Log$
  682. Revision 1.4 2000-01-07 16:41:29 daniel
  683. * copyright 2000
  684. Revision 1.3 2000/01/07 16:32:23 daniel
  685. * copyright 2000 added
  686. Revision 1.2 1999/06/09 16:46:08 peter
  687. * fixed fullwin,textbackground
  688. Revision 1.1 1998/12/21 13:07:02 peter
  689. * use -FE
  690. Revision 1.17 1998/12/15 22:42:49 peter
  691. * removed temp symbols
  692. Revision 1.16 1998/12/09 23:04:36 jonas
  693. * fixed bug in InsLine (changed "my" from "WinMaxY -1" to "WinMaxY - WinMinY")
  694. Revision 1.15 1998/11/28 14:09:48 peter
  695. * NOATTCDQ define
  696. Revision 1.14 1998/11/26 23:14:52 jonas
  697. * changed cdq to cltd in AT&T assembler block
  698. Revision 1.13 1998/08/26 10:01:54 peter
  699. * fixed readln cursor position
  700. Revision 1.12 1998/08/19 17:57:55 peter
  701. * fixed crtread with wrong cursor position
  702. Revision 1.11 1998/08/19 14:55:44 peter
  703. * fixed removeline which scrolled too much lines
  704. Revision 1.10 1998/08/18 13:32:46 carl
  705. * bugfix to make it work with FPC 0.99.5 (Delayloop is not correctly
  706. converted by ATT parser)
  707. Revision 1.9 1998/08/15 17:00:10 peter
  708. * moved delaycnt from interface to implementation
  709. Revision 1.8 1998/08/08 21:56:45 peter
  710. * updated crt with new delay, almost like bp7 routine
  711. Revision 1.5 1998/05/31 14:18:12 peter
  712. * force att or direct assembling
  713. * cleanup of some files
  714. Revision 1.4 1998/05/28 10:21:38 pierre
  715. * Handles of input and output restored
  716. Revision 1.3 1998/05/27 00:19:16 peter
  717. * fixed crt input
  718. Revision 1.2 1998/05/21 19:30:46 peter
  719. * objects compiles for linux
  720. + assign(pchar), assign(char), rename(pchar), rename(char)
  721. * fixed read_text_as_array
  722. + read_text_as_pchar which was not yet in the rtl
  723. }