dos.pp 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  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. Dos unit for BP7 compatible RTL
  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 dos;
  13. interface
  14. Uses
  15. Go32;
  16. Const
  17. {Bitmasks for CPU Flags}
  18. fcarry = $0001;
  19. fparity = $0004;
  20. fauxiliary = $0010;
  21. fzero = $0040;
  22. fsign = $0080;
  23. foverflow = $0800;
  24. {Bitmasks for file attribute}
  25. readonly = $01;
  26. hidden = $02;
  27. sysfile = $04;
  28. volumeid = $08;
  29. directory = $10;
  30. archive = $20;
  31. anyfile = $3F;
  32. {File Status}
  33. fmclosed = $D7B0;
  34. fminput = $D7B1;
  35. fmoutput = $D7B2;
  36. fminout = $D7B3;
  37. Type
  38. comstr = string[127]; { command line string }
  39. pathstr = string[79]; { string for a file path }
  40. dirstr = string[67]; { string for a directory }
  41. namestr = string[8]; { string for a file name }
  42. extstr = string[4]; { string for an extension }
  43. {
  44. filerec.inc contains the definition of the filerec.
  45. textrec.inc contains the definition of the textrec.
  46. It is in a separate file to make it available in other units without
  47. having to use the DOS unit for it.
  48. }
  49. {$i filerec.inc}
  50. {$i textrec.inc}
  51. DateTime = packed record
  52. Year,
  53. Month,
  54. Day,
  55. Hour,
  56. Min,
  57. Sec : word;
  58. End;
  59. searchrec = packed record
  60. fill : array[1..21] of byte;
  61. attr : byte;
  62. time : longint;
  63. reserved : word; { requires the DOS extender (DJ GNU-C) }
  64. size : longint;
  65. name : string[15]; { the same size as declared by (DJ GNU C) }
  66. end;
  67. registers = packed record
  68. case i : integer of
  69. 0 : (ax,f1,bx,f2,cx,f3,dx,f4,bp,f5,si,f51,di,f6,ds,f7,es,f8,flags,fs,gs : word);
  70. 1 : (al,ah,f9,f10,bl,bh,f11,f12,cl,ch,f13,f14,dl,dh : byte);
  71. 2 : (eax, ebx, ecx, edx, ebp, esi, edi : longint);
  72. end;
  73. Var
  74. DosError : integer;
  75. {Interrupt}
  76. Procedure Intr(intno: byte; var regs: registers);
  77. Procedure MSDos(var regs: registers);
  78. {Info/Date/Time}
  79. Function DosVersion: Word;
  80. Procedure GetDate(var year, month, mday, wday: word);
  81. Procedure GetTime(var hour, minute, second, sec100: word);
  82. procedure SetDate(year,month,day: word);
  83. Procedure SetTime(hour,minute,second,sec100: word);
  84. Procedure UnpackTime(p: longint; var t: datetime);
  85. Procedure PackTime(var t: datetime; var p: longint);
  86. {Exec}
  87. Procedure Exec(const path: pathstr; const comline: comstr);
  88. Function DosExitCode: word;
  89. {Disk}
  90. Function DiskFree(drive: byte) : longint;
  91. Function DiskSize(drive: byte) : longint;
  92. Procedure FindFirst(const path: pathstr; attr: word; var f: searchRec);
  93. Procedure FindNext(var f: searchRec);
  94. Procedure FindClose(Var f: SearchRec);
  95. {File}
  96. Procedure GetFAttr(var f; var attr: word);
  97. Procedure GetFTime(var f; var time: longint);
  98. Function FSearch(path: pathstr; dirlist: string): pathstr;
  99. Function FExpand(const path: pathstr): pathstr;
  100. Procedure FSplit(path: pathstr; var dir: dirstr; var name: namestr; var ext: extstr);
  101. {Environment}
  102. Function EnvCount: longint;
  103. Function EnvStr(index: integer): string;
  104. Function GetEnv(envvar: string): string;
  105. {Misc}
  106. Procedure SetFAttr(var f; attr: word);
  107. Procedure SetFTime(var f; time: longint);
  108. Procedure GetCBreak(var breakvalue: boolean);
  109. Procedure SetCBreak(breakvalue: boolean);
  110. Procedure GetVerify(var verify: boolean);
  111. Procedure SetVerify(verify: boolean);
  112. {Do Nothing Functions}
  113. Procedure SwapVectors;
  114. Procedure GetIntVec(intno: byte; var vector: pointer);
  115. Procedure SetIntVec(intno: byte; vector: pointer);
  116. Procedure Keep(exitcode: word);
  117. implementation
  118. uses
  119. strings;
  120. {$ASMMODE ATT}
  121. {******************************************************************************
  122. --- Dos Interrupt ---
  123. ******************************************************************************}
  124. var
  125. dosregs : registers;
  126. procedure LoadDosError;
  127. begin
  128. if (dosregs.flags and carryflag) <> 0 then
  129. { conversion from word to integer !!
  130. gave a Bound check error if ax is $FFFF !! PM }
  131. doserror:=integer(dosregs.ax)
  132. else
  133. doserror:=0;
  134. end;
  135. {$ASMMODE DIRECT}
  136. procedure intr(intno : byte;var regs : registers);
  137. begin
  138. asm
  139. .data
  140. int86:
  141. .byte 0xcd
  142. int86_vec:
  143. .byte 0x03
  144. jmp int86_retjmp
  145. .text
  146. movl 8(%ebp),%eax
  147. movb %al,int86_vec
  148. movl 10(%ebp),%eax
  149. // do not use first int
  150. addl $2,%eax
  151. movl 4(%eax),%ebx
  152. movl 8(%eax),%ecx
  153. movl 12(%eax),%edx
  154. movl 16(%eax),%ebp
  155. movl 20(%eax),%esi
  156. movl 24(%eax),%edi
  157. movl (%eax),%eax
  158. jmp int86
  159. int86_retjmp:
  160. pushf
  161. pushl %ebp
  162. pushl %eax
  163. movl %esp,%ebp
  164. // calc EBP new
  165. addl $12,%ebp
  166. movl 10(%ebp),%eax
  167. // do not use first int
  168. addl $2,%eax
  169. popl (%eax)
  170. movl %ebx,4(%eax)
  171. movl %ecx,8(%eax)
  172. movl %edx,12(%eax)
  173. // restore EBP
  174. popl %edx
  175. movl %edx,16(%eax)
  176. movl %esi,20(%eax)
  177. movl %edi,24(%eax)
  178. // ignore ES and DS
  179. popl %ebx /* flags */
  180. movl %ebx,32(%eax)
  181. // FS and GS too
  182. end;
  183. end;
  184. {$ASMMODE ATT}
  185. procedure msdos(var regs : registers);
  186. begin
  187. intr($21,regs);
  188. end;
  189. {******************************************************************************
  190. --- Info / Date / Time ---
  191. ******************************************************************************}
  192. function dosversion : word;
  193. begin
  194. dosregs.ax:=$3000;
  195. msdos(dosregs);
  196. dosversion:=dosregs.ax;
  197. end;
  198. procedure getdate(var year,month,mday,wday : word);
  199. begin
  200. dosregs.ax:=$2a00;
  201. msdos(dosregs);
  202. wday:=dosregs.al;
  203. year:=dosregs.cx;
  204. month:=dosregs.dh;
  205. mday:=dosregs.dl;
  206. end;
  207. procedure setdate(year,month,day : word);
  208. begin
  209. dosregs.cx:=year;
  210. dosregs.dh:=month;
  211. dosregs.dl:=day;
  212. dosregs.ah:=$2b;
  213. msdos(dosregs);
  214. DosError:=0;
  215. end;
  216. procedure gettime(var hour,minute,second,sec100 : word);
  217. begin
  218. dosregs.ah:=$2c;
  219. msdos(dosregs);
  220. hour:=dosregs.ch;
  221. minute:=dosregs.cl;
  222. second:=dosregs.dh;
  223. sec100:=dosregs.dl;
  224. DosError:=0;
  225. end;
  226. procedure settime(hour,minute,second,sec100 : word);
  227. begin
  228. dosregs.ch:=hour;
  229. dosregs.cl:=minute;
  230. dosregs.dh:=second;
  231. dosregs.dl:=sec100;
  232. dosregs.ah:=$2d;
  233. msdos(dosregs);
  234. DosError:=0;
  235. end;
  236. Procedure packtime(var t : datetime;var p : longint);
  237. Begin
  238. p:=(t.sec shr 1)+(t.min shl 5)+(t.hour shl 11)+(t.day shl 16)+(t.month shl 21)+((t.year-1980) shl 25);
  239. End;
  240. Procedure unpacktime(p : longint;var t : datetime);
  241. Begin
  242. with t do
  243. begin
  244. sec:=(p and 31) shl 1;
  245. min:=(p shr 5) and 63;
  246. hour:=(p shr 11) and 31;
  247. day:=(p shr 16) and 31;
  248. month:=(p shr 21) and 15;
  249. year:=(p shr 25)+1980;
  250. end;
  251. End;
  252. {******************************************************************************
  253. --- Exec ---
  254. ******************************************************************************}
  255. var
  256. lastdosexitcode : word;
  257. procedure exec(const path : pathstr;const comline : comstr);
  258. var
  259. i : longint;
  260. b : array[0..255] of char;
  261. begin
  262. doserror:=0;
  263. for i:=1to length(path) do
  264. if path[i]='/' then
  265. b[i-1]:='\'
  266. else
  267. b[i-1]:=path[i];
  268. b[i]:=' ';
  269. inc(i);
  270. move(comline[1],b[i],length(comline));
  271. inc(i,length(comline));
  272. b[i]:=#0;
  273. asm
  274. leal b,%ebx
  275. movw $0xff07,%ax
  276. int $0x21
  277. movw %ax,LastDosExitCode
  278. end;
  279. end;
  280. function dosexitcode : word;
  281. begin
  282. dosexitcode:=lastdosexitcode;
  283. end;
  284. procedure getcbreak(var breakvalue : boolean);
  285. begin
  286. DosError:=0;
  287. dosregs.ax:=$3300;
  288. msdos(dosregs);
  289. breakvalue:=dosregs.dl<>0;
  290. end;
  291. procedure setcbreak(breakvalue : boolean);
  292. begin
  293. DosError:=0;
  294. dosregs.ax:=$3301;
  295. dosregs.dl:=ord(breakvalue);
  296. msdos(dosregs);
  297. end;
  298. procedure getverify(var verify : boolean);
  299. begin
  300. DosError:=0;
  301. dosregs.ah:=$54;
  302. msdos(dosregs);
  303. verify:=dosregs.al<>0;
  304. end;
  305. procedure setverify(verify : boolean);
  306. begin
  307. DosError:=0;
  308. dosregs.ah:=$2e;
  309. dosregs.al:=ord(verify);
  310. msdos(dosregs);
  311. end;
  312. {******************************************************************************
  313. --- Disk ---
  314. ******************************************************************************}
  315. function diskfree(drive : byte) : longint;
  316. begin
  317. DosError:=0;
  318. dosregs.dl:=drive;
  319. dosregs.ah:=$36;
  320. msdos(dosregs);
  321. if dosregs.ax<>$FFFF then
  322. diskfree:=dosregs.ax*dosregs.bx*dosregs.cx
  323. else
  324. diskfree:=-1;
  325. end;
  326. function disksize(drive : byte) : longint;
  327. begin
  328. DosError:=0;
  329. dosregs.dl:=drive;
  330. dosregs.ah:=$36;
  331. msdos(dosregs);
  332. if dosregs.ax<>$FFFF then
  333. disksize:=dosregs.ax*dosregs.cx*dosregs.dx
  334. else
  335. disksize:=-1;
  336. end;
  337. {******************************************************************************
  338. --- DosFindfirst DosFindNext ---
  339. ******************************************************************************}
  340. procedure dossearchrec2searchrec(var f : searchrec);
  341. var
  342. len : longint;
  343. begin
  344. len:=StrLen(@f.Name);
  345. Move(f.Name[0],f.Name[1],Len);
  346. f.Name[0]:=chr(len);
  347. end;
  348. procedure Dosfindfirst(path : pchar;attr : word;var f : searchrec);
  349. var
  350. i : longint;
  351. begin
  352. { allow slash as backslash }
  353. for i:=0 to strlen(path) do
  354. if path[i]='/' then path[i]:='\';
  355. asm
  356. movl f,%edx
  357. movb $0x1a,%ah
  358. int $0x21
  359. movl path,%edx
  360. movzwl attr,%ecx
  361. movb $0x4e,%ah
  362. int $0x21
  363. jnc .LFF
  364. movw %ax,DosError
  365. .LFF:
  366. end;
  367. dossearchrec2searchrec(f);
  368. end;
  369. procedure Dosfindnext(var f : searchrec);
  370. begin
  371. asm
  372. movl 12(%ebp),%edx
  373. movb $0x1a,%ah
  374. int $0x21
  375. movb $0x4f,%ah
  376. int $0x21
  377. jnc .LFN
  378. movw %ax,DosError
  379. .LFN:
  380. end;
  381. dossearchrec2searchrec(f);
  382. end;
  383. {******************************************************************************
  384. --- Findfirst FindNext ---
  385. ******************************************************************************}
  386. procedure findfirst(const path : pathstr;attr : word;var f : searchRec);
  387. var
  388. path0 : array[0..256] of char;
  389. begin
  390. doserror:=0;
  391. strpcopy(path0,path);
  392. Dosfindfirst(path0,attr,f);
  393. end;
  394. procedure findnext(var f : searchRec);
  395. begin
  396. doserror:=0;
  397. Dosfindnext(f);
  398. end;
  399. Procedure FindClose(Var f: SearchRec);
  400. begin
  401. DosError:=0;
  402. end;
  403. procedure swapvectors;
  404. begin
  405. DosError:=0;
  406. end;
  407. {******************************************************************************
  408. --- File ---
  409. ******************************************************************************}
  410. procedure fsplit(path : pathstr;var dir : dirstr;var name : namestr;var ext : extstr);
  411. var
  412. p1,i : longint;
  413. begin
  414. { allow slash as backslash }
  415. for i:=1 to length(path) do
  416. if path[i]='/' then path[i]:='\';
  417. { get drive name }
  418. p1:=pos(':',path);
  419. if p1>0 then
  420. begin
  421. dir:=path[1]+':';
  422. delete(path,1,p1);
  423. end
  424. else
  425. dir:='';
  426. { split the path and the name, there are no more path informtions }
  427. { if path contains no backslashes }
  428. while true do
  429. begin
  430. p1:=pos('\',path);
  431. if p1=0 then
  432. break;
  433. dir:=dir+copy(path,1,p1);
  434. delete(path,1,p1);
  435. end;
  436. { try to find out a extension }
  437. begin
  438. p1:=pos('.',path);
  439. if p1>0 then
  440. begin
  441. ext:=copy(path,p1,4);
  442. delete(path,p1,length(path)-p1+1);
  443. end
  444. else
  445. ext:='';
  446. name:=path;
  447. end;
  448. end;
  449. function fexpand(const path : pathstr) : pathstr;
  450. var
  451. s,pa : pathstr;
  452. i,j : longint;
  453. begin
  454. getdir(0,s);
  455. if LFNSupport then
  456. begin
  457. pa:=path;
  458. { Always uppercase driveletter }
  459. if (length(pa)>1) and (pa[2]=':') and (pa[1] in ['a'..'z']) then
  460. pa[1]:=CHR(ORD(Pa[1])-32);
  461. end
  462. else
  463. pa:=upcase(path);
  464. { allow slash as backslash }
  465. for i:=1 to length(pa) do
  466. if pa[i]='/' then
  467. pa[i]:='\';
  468. if (length(pa)>1) and (pa[2]=':') and (pa[1] in ['A'..'Z']) then
  469. begin
  470. { we must get the right directory }
  471. getdir(ord(pa[1])-ord('A')+1,s);
  472. if (ord(pa[0])>2) and (pa[3]<>'\') then
  473. if pa[1]=s[1] then
  474. begin
  475. { remove ending slash if it already exists }
  476. if s[length(s)]='\' then
  477. dec(s[0]);
  478. pa:=s+'\'+copy (pa,3,length(pa));
  479. end
  480. else
  481. pa:=pa[1]+':\'+copy (pa,3,length(pa))
  482. end
  483. else
  484. if pa[1]='\' then
  485. pa:=s[1]+':'+pa
  486. else if s[0]=#3 then
  487. pa:=s+pa
  488. else
  489. pa:=s+'\'+pa;
  490. { Turbo Pascal gives current dir on drive if only drive given as parameter! }
  491. if length(pa) = 2 then
  492. begin
  493. getdir(byte(pa[1])-64,s);
  494. pa := s;
  495. end;
  496. {First remove all references to '\.\'}
  497. while pos ('\.\',pa)<>0 do
  498. delete (pa,pos('\.\',pa),2);
  499. {Now remove also all references to '\..\' + of course previous dirs..}
  500. repeat
  501. i:=pos('\..\',pa);
  502. if i<>0 then
  503. begin
  504. j:=i-1;
  505. while (j>1) and (pa[j]<>'\') do
  506. dec (j);
  507. if pa[j+1] = ':' then j := 3;
  508. delete (pa,j,i-j+3);
  509. end;
  510. until i=0;
  511. { Turbo Pascal gets rid of a \.. at the end of the path }
  512. { Now remove also any reference to '\..' at end of line
  513. + of course previous dir.. }
  514. i:=pos('\..',pa);
  515. if i<>0 then
  516. begin
  517. if i = length(pa) - 2 then
  518. begin
  519. j:=i-1;
  520. while (j>1) and (pa[j]<>'\') do
  521. dec (j);
  522. delete (pa,j,i-j+3);
  523. end;
  524. pa := pa + '\';
  525. end;
  526. { Remove End . and \}
  527. if (length(pa)>0) and (pa[length(pa)]='.') then
  528. dec(byte(pa[0]));
  529. { if only the drive + a '\' is left then the '\' should be left to prevtn the program
  530. accessing the current directory on the drive rather than the root!}
  531. { if the last char of path = '\' then leave it in as this is what TP does! }
  532. if ((length(pa)>3) and (pa[length(pa)]='\')) and (path[length(path)] <> '\') then
  533. dec(byte(pa[0]));
  534. { if only a drive is given in path then there should be a '\' at the
  535. end of the string given back }
  536. if length(pa) = 2 then pa := pa + '\';
  537. fexpand:=pa;
  538. end;
  539. Function FSearch(path: pathstr; dirlist: string): pathstr;
  540. var
  541. i,p1 : longint;
  542. s : searchrec;
  543. newdir : pathstr;
  544. begin
  545. { No wildcards allowed in these things }
  546. if (pos('?',path)<>0) or (pos('*',path)<>0) then
  547. fsearch:=''
  548. else
  549. begin
  550. { allow slash as backslash }
  551. for i:=1 to length(dirlist) do
  552. if dirlist[i]='/' then dirlist[i]:='\';
  553. repeat
  554. p1:=pos(';',dirlist);
  555. if p1<>0 then
  556. begin
  557. newdir:=copy(dirlist,1,p1-1);
  558. delete(dirlist,1,p1);
  559. end
  560. else
  561. begin
  562. newdir:=dirlist;
  563. dirlist:='';
  564. end;
  565. if (newdir<>'') and (not (newdir[length(newdir)] in ['\',':'])) then
  566. newdir:=newdir+'\';
  567. findfirst(newdir+path,anyfile,s);
  568. if doserror=0 then
  569. newdir:=newdir+path
  570. else
  571. newdir:='';
  572. until (dirlist='') or (newdir<>'');
  573. fsearch:=newdir;
  574. end;
  575. end;
  576. {******************************************************************************
  577. --- Get/Set File Time,Attr ---
  578. ******************************************************************************}
  579. procedure getftime(var f;var time : longint);
  580. begin
  581. dosregs.bx:=textrec(f).handle;
  582. dosregs.ax:=$5700;
  583. msdos(dosregs);
  584. loaddoserror;
  585. time:=(dosregs.dx shl 16)+dosregs.cx;
  586. end;
  587. procedure setftime(var f;time : longint);
  588. begin
  589. dosregs.bx:=textrec(f).handle;
  590. dosregs.cx:=time and $ffff;
  591. dosregs.dx:=time shr 16;
  592. dosregs.ax:=$5701;
  593. msdos(dosregs);
  594. loaddoserror;
  595. end;
  596. procedure getfattr(var f;var attr : word);
  597. begin
  598. dosregs.edx:=longint(@filerec(f).name);
  599. dosregs.ax:=$4300;
  600. msdos(dosregs);
  601. LoadDosError;
  602. Attr:=dosregs.cx;
  603. end;
  604. procedure setfattr(var f;attr : word);
  605. begin
  606. dosregs.edx:=longint(@filerec(f).name);
  607. dosregs.ax:=$4301;
  608. dosregs.cx:=attr;
  609. msdos(dosregs);
  610. LoadDosError;
  611. end;
  612. {******************************************************************************
  613. --- Environment ---
  614. ******************************************************************************}
  615. function envcount : longint;
  616. var
  617. hp : ppchar;
  618. begin
  619. hp:=envp;
  620. envcount:=0;
  621. while assigned(hp^) do
  622. begin
  623. inc(envcount);
  624. hp:=hp+4;
  625. end;
  626. end;
  627. function envstr(index : integer) : string;
  628. begin
  629. if (index<=0) or (index>envcount) then
  630. begin
  631. envstr:='';
  632. exit;
  633. end;
  634. envstr:=strpas(ppchar(envp+4*(index-1))^);
  635. end;
  636. Function GetEnv(envvar: string): string;
  637. var
  638. hp : ppchar;
  639. hs : string;
  640. eqpos : longint;
  641. begin
  642. envvar:=upcase(envvar);
  643. hp:=envp;
  644. getenv:='';
  645. while assigned(hp^) do
  646. begin
  647. hs:=strpas(hp^);
  648. eqpos:=pos('=',hs);
  649. if copy(hs,1,eqpos-1)=envvar then
  650. begin
  651. getenv:=copy(hs,eqpos+1,255);
  652. exit;
  653. end;
  654. hp:=hp+4;
  655. end;
  656. end;
  657. {******************************************************************************
  658. --- Not Supported ---
  659. ******************************************************************************}
  660. Procedure keep(exitcode : word);
  661. Begin
  662. End;
  663. Procedure getintvec(intno : byte;var vector : pointer);
  664. Begin
  665. End;
  666. Procedure setintvec(intno : byte;vector : pointer);
  667. Begin
  668. End;
  669. end.
  670. {
  671. $Log$
  672. Revision 1.5 2000-01-07 16:41:29 daniel
  673. * copyright 2000
  674. Revision 1.4 2000/01/07 16:32:23 daniel
  675. * copyright 2000 added
  676. Revision 1.3 1999/01/22 16:22:09 pierre
  677. * Daniel removal of findclose reverted
  678. Revision 1.2 1999/01/22 10:07:02 daniel
  679. - Findclose removed: This is TP incompatible!!
  680. Revision 1.1 1998/12/21 13:07:02 peter
  681. * use -FE
  682. Revision 1.19 1998/11/23 13:53:59 peter
  683. * more fexpand fixes from marco van de voort
  684. Revision 1.18 1998/11/23 12:48:02 peter
  685. * fexpand('o:') fixed to return o:\ (from the mailinglist)
  686. Revision 1.17 1998/11/22 09:33:21 florian
  687. * fexpand bug (temp. strings were too shoort) fixed, was reported
  688. by Marco van de Voort
  689. Revision 1.16 1998/11/17 09:37:41 pierre
  690. * explicit conversion from word dosreg.ax to integer doserror
  691. Revision 1.15 1998/11/01 20:27:18 peter
  692. * fixed some doserror settings
  693. Revision 1.14 1998/10/22 15:05:28 pierre
  694. * fsplit adapted to long filenames
  695. Revision 1.13 1998/09/16 16:47:24 peter
  696. * merged fixes
  697. Revision 1.11.2.2 1998/09/16 16:16:04 peter
  698. * go32v1 compiles again
  699. Revision 1.12 1998/09/11 12:46:44 pierre
  700. * range check problem with LFN attr removed
  701. Revision 1.11.2.1 1998/09/11 12:38:41 pierre
  702. * conversion from LFN attr to Dos attr did not respect range checking
  703. Revision 1.11 1998/08/28 10:45:58 peter
  704. * fixed path buffer in findfirst
  705. Revision 1.10 1998/08/27 10:30:48 pierre
  706. * go32v1 RTL did not compile (LFNsupport outside go32v2 defines !)
  707. I renamed tb_selector to tb_segment because
  708. it is a real mode segment as opposed to
  709. a protected mode selector
  710. Fixed it for go32v1 (remove the $E0000000 offset !)
  711. Revision 1.9 1998/08/26 10:04:01 peter
  712. * new lfn check from mailinglist
  713. * renamed win95 -> LFNSupport
  714. + tb_selector, tb_offset for easier access to transferbuffer
  715. Revision 1.8 1998/08/16 20:39:49 peter
  716. + LFN Support
  717. Revision 1.7 1998/08/16 09:12:13 michael
  718. Corrected fexpand behaviour.
  719. Revision 1.6 1998/08/05 21:01:50 michael
  720. applied bugfix from maillist to fsearch
  721. Revision 1.5 1998/05/31 14:18:13 peter
  722. * force att or direct assembling
  723. * cleanup of some files
  724. Revision 1.4 1998/05/22 00:39:22 peter
  725. * go32v1, go32v2 recompiles with the new objects
  726. * remake3 works again with go32v2
  727. - removed some "optimizes" from daniel which were wrong
  728. Revision 1.3 1998/05/21 19:30:47 peter
  729. * objects compiles for linux
  730. + assign(pchar), assign(char), rename(pchar), rename(char)
  731. * fixed read_text_as_array
  732. + read_text_as_pchar which was not yet in the rtl
  733. }