dos.pp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774
  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 (novell netware)
  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. { 2000/09/03 armin: first version
  13. 2001/04/08 armin: implemented more functions
  14. OK: Implemented and tested
  15. NI: not implemented
  16. 2001/04/15 armin: FindFirst bug corrected, FExpand and FSearch tested, GetCBreak, SetCBreak
  17. implemented
  18. }
  19. unit dos;
  20. interface
  21. Const
  22. FileNameLen = 255;
  23. Type
  24. searchrec = packed record
  25. DirP : POINTER; { used for opendir }
  26. EntryP: POINTER; { and readdir }
  27. Magic : WORD;
  28. fill : array[1..11] of byte;
  29. attr : byte;
  30. time : longint;
  31. { reserved : word; not in DJGPP V2 }
  32. size : longint;
  33. name : string[255]; { NW uses only [12] but more can't hurt }
  34. end;
  35. registers = packed record
  36. case i : integer of
  37. 0 : (ax,f1,bx,f2,cx,f3,dx,f4,bp,f5,si,f51,di,f6,ds,f7,es,f8,flags,fs,gs : word);
  38. 1 : (al,ah,f9,f10,bl,bh,f11,f12,cl,ch,f13,f14,dl,dh : byte);
  39. 2 : (eax, ebx, ecx, edx, ebp, esi, edi : longint);
  40. end;
  41. {$i dosh.inc}
  42. implementation
  43. uses
  44. strings;
  45. {$ASMMODE ATT}
  46. {$I nwsys.inc }
  47. {*****************************************************************************
  48. --- Info / Date / Time ---
  49. ******************************************************************************}
  50. {$PACKRECORDS 4}
  51. function dosversion : word;
  52. VAR F : FILE_SERV_INFO;
  53. begin
  54. IF GetServerInformation(SIZEOF(F),@F) = 0 THEN
  55. dosversion := WORD (F.netwareVersion) SHL 8 + F.netwareSubVersion;
  56. end;
  57. procedure getdate(var year,month,mday,wday : word);
  58. VAR N : NWdateAndTime;
  59. begin
  60. GetFileServerDateAndTime (N);
  61. wday:=N.DayOfWeek;
  62. year:=1900 + N.Year;
  63. month:=N.Month;
  64. mday:=N.Day;
  65. end;
  66. procedure setdate(year,month,day : word);
  67. VAR N : NWdateAndTime;
  68. begin
  69. GetFileServerDateAndTime (N);
  70. SetFileServerDateAndTime(year,month,day,N.Hour,N.Minute,N.Second);
  71. end;
  72. procedure gettime(var hour,minute,second,sec100 : word);
  73. VAR N : NWdateAndTime;
  74. begin
  75. GetFileServerDateAndTime (N);
  76. hour := N.Hour;
  77. Minute:= N.Minute;
  78. Second := N.Second;
  79. sec100 := 0;
  80. end;
  81. procedure settime(hour,minute,second,sec100 : word);
  82. VAR N : NWdateAndTime;
  83. begin
  84. GetFileServerDateAndTime (N);
  85. SetFileServerDateAndTime(N.year,N.month,N.day,hour,minute,second);
  86. end;
  87. Procedure packtime(var t : datetime;var p : longint);
  88. Begin
  89. 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);
  90. End;
  91. Procedure unpacktime(p : longint;var t : datetime);
  92. Begin
  93. with t do
  94. begin
  95. sec:=(p and 31) shl 1;
  96. min:=(p shr 5) and 63;
  97. hour:=(p shr 11) and 31;
  98. day:=(p shr 16) and 31;
  99. month:=(p shr 21) and 15;
  100. year:=(p shr 25)+1980;
  101. end;
  102. End;
  103. {******************************************************************************
  104. --- Exec ---
  105. ******************************************************************************}
  106. {$ifdef HASTHREADVAR}
  107. threadvar
  108. {$else HASTHREADVAR}
  109. var
  110. {$endif HASTHREADVAR}
  111. lastdosexitcode : word;
  112. procedure exec(const path : pathstr;const comline : comstr);
  113. begin
  114. ConsolePrintf ('warning: fpc dos.exec not implemented'#13#10,0);
  115. end;
  116. function dosexitcode : word;
  117. begin
  118. dosexitcode:=lastdosexitcode;
  119. end;
  120. procedure getcbreak(var breakvalue : boolean);
  121. begin
  122. breakvalue := _SetCtrlCharCheckMode (false); { get current setting }
  123. if breakvalue then
  124. _SetCtrlCharCheckMode (breakvalue); { and restore old setting }
  125. end;
  126. procedure setcbreak(breakvalue : boolean);
  127. begin
  128. _SetCtrlCharCheckMode (breakvalue);
  129. end;
  130. procedure getverify(var verify : boolean);
  131. begin
  132. verify := true;
  133. end;
  134. procedure setverify(verify : boolean);
  135. begin
  136. end;
  137. {******************************************************************************
  138. --- Disk ---
  139. ******************************************************************************}
  140. function getvolnum (drive : byte) : longint;
  141. var dir : STRING[255];
  142. P,PS,
  143. V : LONGINT;
  144. begin
  145. if drive = 0 then
  146. begin // get volume name from current directory (i.e. SERVER-NAME/VOL2:TEST)
  147. getdir (0,dir);
  148. p := pos (':', dir);
  149. if p = 0 then
  150. begin
  151. getvolnum := -1;
  152. exit;
  153. end;
  154. byte (dir[0]) := p-1;
  155. dir[p] := #0;
  156. PS := pos ('/', dir);
  157. INC (PS);
  158. if _GetVolumeNumber (@dir[PS], V) <> 0 then
  159. getvolnum := -1
  160. else
  161. getvolnum := V;
  162. end else
  163. getvolnum := drive-1;
  164. end;
  165. {$ifdef Int64}
  166. function diskfree(drive : byte) : int64;
  167. VAR Buf : ARRAY [0..255] OF CHAR;
  168. TotalBlocks : WORD;
  169. SectorsPerBlock : WORD;
  170. availableBlocks : WORD;
  171. totalDirectorySlots : WORD;
  172. availableDirSlots : WORD;
  173. volumeisRemovable : WORD;
  174. volumeNumber : LONGINT;
  175. begin
  176. volumeNumber := getvolnum (drive);
  177. if volumeNumber >= 0 then
  178. begin
  179. {i think thats not the right function but for others i need a connection handle}
  180. if _GetVolumeInfoWithNumber (volumeNumber,@Buf,
  181. TotalBlocks,
  182. SectorsPerBlock,
  183. availableBlocks,
  184. totalDirectorySlots,
  185. availableDirSlots,
  186. volumeisRemovable) = 0 THEN
  187. begin
  188. diskfree := int64 (availableBlocks) * int64 (SectorsPerBlock) * 512;
  189. end else
  190. diskfree := 0;
  191. end else
  192. diskfree := 0;
  193. end;
  194. function disksize(drive : byte) : int64;
  195. VAR Buf : ARRAY [0..255] OF CHAR;
  196. TotalBlocks : WORD;
  197. SectorsPerBlock : WORD;
  198. availableBlocks : WORD;
  199. totalDirectorySlots : WORD;
  200. availableDirSlots : WORD;
  201. volumeisRemovable : WORD;
  202. volumeNumber : LONGINT;
  203. begin
  204. volumeNumber := getvolnum (drive);
  205. if volumeNumber >= 0 then
  206. begin
  207. {i think thats not the right function but for others i need a connection handle}
  208. if _GetVolumeInfoWithNumber (volumeNumber,@Buf,
  209. TotalBlocks,
  210. SectorsPerBlock,
  211. availableBlocks,
  212. totalDirectorySlots,
  213. availableDirSlots,
  214. volumeisRemovable) = 0 THEN
  215. begin
  216. disksize := int64 (TotalBlocks) * int64 (SectorsPerBlock) * 512;
  217. end else
  218. disksize := 0;
  219. end else
  220. disksize := 0;
  221. end;
  222. {$else}
  223. function diskfree(drive : byte) : longint;
  224. VAR Buf : ARRAY [0..255] OF CHAR;
  225. TotalBlocks : WORD;
  226. SectorsPerBlock : WORD;
  227. availableBlocks : WORD;
  228. totalDirectorySlots : WORD;
  229. availableDirSlots : WORD;
  230. volumeisRemovable : WORD;
  231. volumeNumber : LONGINT;
  232. begin
  233. volumeNumber := getvolnum (drive);
  234. if (volumeNumber >= 0) and (volumeNumber <= 255) then
  235. begin
  236. {i think thats not the right function but for others i need a connection handle}
  237. if _GetVolumeInfoWithNumber (byte(volumeNumber),@Buf,
  238. TotalBlocks,
  239. SectorsPerBlock,
  240. availableBlocks,
  241. totalDirectorySlots,
  242. availableDirSlots,
  243. volumeisRemovable) = 0 THEN
  244. begin
  245. diskfree := availableBlocks * SectorsPerBlock * 512;
  246. end else
  247. diskfree := 0;
  248. end else
  249. diskfree := 0;
  250. end;
  251. function disksize(drive : byte) : longint;
  252. VAR Buf : ARRAY [0..255] OF CHAR;
  253. TotalBlocks : WORD;
  254. SectorsPerBlock : WORD;
  255. availableBlocks : WORD;
  256. totalDirectorySlots : WORD;
  257. availableDirSlots : WORD;
  258. volumeisRemovable : WORD;
  259. volumeNumber : LONGINT;
  260. begin
  261. volumeNumber := getvolnum (drive);
  262. if (volumeNumber >= 0) and (volumeNumber <= 255) then
  263. begin
  264. {i think thats not the right function but for others i need a connection handle}
  265. if _GetVolumeInfoWithNumber (byte(volumeNumber),@Buf,
  266. TotalBlocks,
  267. SectorsPerBlock,
  268. availableBlocks,
  269. totalDirectorySlots,
  270. availableDirSlots,
  271. volumeisRemovable) = 0 THEN
  272. begin
  273. disksize := TotalBlocks * SectorsPerBlock * 512;
  274. end else
  275. disksize := 0;
  276. end else
  277. disksize := 0;
  278. end;
  279. {$endif}
  280. {******************************************************************************
  281. --- Findfirst FindNext ---
  282. ******************************************************************************}
  283. PROCEDURE find_setfields (VAR f : searchRec);
  284. BEGIN
  285. WITH F DO
  286. BEGIN
  287. IF Magic = $AD01 THEN
  288. BEGIN
  289. attr := WORD (PNWDirEnt(EntryP)^.d_attr); // lowest 16 bit -> same as dos
  290. time := PNWDirEnt(EntryP)^.d_time + (LONGINT (PNWDirEnt(EntryP)^.d_date) SHL 16);
  291. size := PNWDirEnt(EntryP)^.d_size;
  292. name := strpas (PNWDirEnt(EntryP)^.d_nameDOS);
  293. doserror := 0;
  294. END ELSE
  295. BEGIN
  296. FillChar (f,SIZEOF(f),0);
  297. doserror := 18;
  298. END;
  299. END;
  300. END;
  301. procedure findfirst(const path : pathstr;attr : word;var f : searchRec);
  302. var
  303. path0 : array[0..256] of char;
  304. begin
  305. IF path = '' then
  306. begin
  307. doserror := 18;
  308. exit;
  309. end;
  310. strpcopy(path0,path);
  311. PNWDirEnt(f.DirP) := _opendir (path0);
  312. IF f.DirP = NIL THEN
  313. doserror := 18
  314. ELSE
  315. BEGIN
  316. IF attr <> anyfile THEN
  317. _SetReaddirAttribute (PNWDirEnt(f.DirP), attr);
  318. F.Magic := $AD01;
  319. PNWDirEnt(f.EntryP) := _readdir (PNWDirEnt(f.DirP));
  320. IF F.EntryP = NIL THEN
  321. BEGIN
  322. _closedir (PNWDirEnt(f.DirP));
  323. f.Magic := 0;
  324. doserror := 18;
  325. END ELSE
  326. find_setfields (f);
  327. END;
  328. end;
  329. procedure findnext(var f : searchRec);
  330. begin
  331. IF F.Magic <> $AD01 THEN
  332. BEGIN
  333. doserror := 18;
  334. EXIT;
  335. END;
  336. doserror:=0;
  337. PNWDirEnt(f.EntryP) := _readdir (PNWDirEnt(f.DirP));
  338. IF F.EntryP = NIL THEN
  339. doserror := 18
  340. ELSE
  341. find_setfields (f);
  342. end;
  343. Procedure FindClose(Var f: SearchRec);
  344. begin
  345. IF F.Magic <> $AD01 THEN
  346. BEGIN
  347. doserror := 18;
  348. EXIT;
  349. END;
  350. doserror:=0;
  351. _closedir (PNWDirEnt(f.DirP));
  352. f.Magic := 0;
  353. f.DirP := NIL;
  354. f.EntryP := NIL;
  355. end;
  356. procedure swapvectors;
  357. begin
  358. end;
  359. {******************************************************************************
  360. --- File ---
  361. ******************************************************************************}
  362. procedure fsplit(path : pathstr;var dir : dirstr;var name : namestr;var ext : extstr);
  363. var
  364. dotpos,p1,i : longint;
  365. begin
  366. { allow slash as backslash }
  367. for i:=1 to length(path) do
  368. if path[i]='/' then path[i]:='\';
  369. { get drive name }
  370. p1:=pos(':',path);
  371. if p1>0 then
  372. begin
  373. dir:=path[1]+':';
  374. delete(path,1,p1);
  375. end
  376. else
  377. dir:='';
  378. { split the path and the name, there are no more path informtions }
  379. { if path contains no backslashes }
  380. while true do
  381. begin
  382. p1:=pos('\',path);
  383. if p1=0 then
  384. break;
  385. dir:=dir+copy(path,1,p1);
  386. delete(path,1,p1);
  387. end;
  388. { try to find out a extension }
  389. if LFNSupport then
  390. begin
  391. Ext:='';
  392. i:=Length(Path);
  393. DotPos:=256;
  394. While (i>0) Do
  395. Begin
  396. If (Path[i]='.') Then
  397. begin
  398. DotPos:=i;
  399. break;
  400. end;
  401. Dec(i);
  402. end;
  403. Ext:=Copy(Path,DotPos,255);
  404. Name:=Copy(Path,1,DotPos - 1);
  405. end
  406. else
  407. begin
  408. p1:=pos('.',path);
  409. if p1>0 then
  410. begin
  411. ext:=copy(path,p1,4);
  412. delete(path,p1,length(path)-p1+1);
  413. end
  414. else
  415. ext:='';
  416. name:=path;
  417. end;
  418. end;
  419. function fexpand(const path : pathstr) : pathstr;
  420. var
  421. s,pa : pathstr;
  422. i,j : longint;
  423. begin
  424. getdir(0,s);
  425. i:=ioresult;
  426. if LFNSupport then
  427. begin
  428. pa:=path;
  429. end
  430. else
  431. if FileNameCaseSensitive then
  432. pa:=path
  433. else
  434. pa:=upcase(path);
  435. { allow slash as backslash }
  436. for i:=1 to length(pa) do
  437. if pa[i]='/' then
  438. pa[i]:='\';
  439. if (length(pa)>1) and (pa[2]=':') and (pa[1] in ['A'..'Z','a'..'z']) then
  440. begin
  441. { Always uppercase driveletter }
  442. if (pa[1] in ['a'..'z']) then
  443. pa[1]:=Chr(Ord(Pa[1])-32);
  444. { we must get the right directory }
  445. getdir(ord(pa[1])-ord('A')+1,s);
  446. i:=ioresult;
  447. if (ord(pa[0])>2) and (pa[3]<>'\') then
  448. if pa[1]=s[1] then
  449. begin
  450. { remove ending slash if it already exists }
  451. if s[length(s)]='\' then
  452. dec(s[0]);
  453. pa:=s+'\'+copy (pa,3,length(pa));
  454. end
  455. else
  456. pa:=pa[1]+':\'+copy (pa,3,length(pa))
  457. end
  458. else
  459. if pa[1]='\' then
  460. begin
  461. { Do not touch Network drive names if LFNSupport is true }
  462. if not ((Length(pa)>1) and (pa[2]='\') and LFNSupport) then
  463. pa:=s[1]+':'+pa;
  464. end
  465. else if s[0]=#3 then
  466. pa:=s+pa
  467. else
  468. pa:=s+'\'+pa;
  469. { Turbo Pascal gives current dir on drive if only drive given as parameter! }
  470. if length(pa) = 2 then
  471. begin
  472. getdir(byte(pa[1])-64,s);
  473. pa := s;
  474. end;
  475. {First remove all references to '\.\'}
  476. while pos ('\.\',pa)<>0 do
  477. delete (pa,pos('\.\',pa),2);
  478. {Now remove also all references to '\..\' + of course previous dirs..}
  479. repeat
  480. i:=pos('\..\',pa);
  481. if i<>0 then
  482. begin
  483. j:=i-1;
  484. while (j>1) and (pa[j]<>'\') do
  485. dec (j);
  486. if pa[j+1] = ':' then j := 3;
  487. delete (pa,j,i-j+3);
  488. end;
  489. until i=0;
  490. { Turbo Pascal gets rid of a \.. at the end of the path }
  491. { Now remove also any reference to '\..' at end of line
  492. + of course previous dir.. }
  493. i:=pos('\..',pa);
  494. if i<>0 then
  495. begin
  496. if i = length(pa) - 2 then
  497. begin
  498. j:=i-1;
  499. while (j>1) and (pa[j]<>'\') do
  500. dec (j);
  501. delete (pa,j,i-j+3);
  502. end;
  503. pa := pa + '\';
  504. end;
  505. { Remove End . and \}
  506. if (length(pa)>0) and (pa[length(pa)]='.') then
  507. dec(byte(pa[0]));
  508. { if only the drive + a '\' is left then the '\' should be left to prevtn the program
  509. accessing the current directory on the drive rather than the root!}
  510. { if the last char of path = '\' then leave it in as this is what TP does! }
  511. if ((length(pa)>3) and (pa[length(pa)]='\')) and (path[length(path)] <> '\') then
  512. dec(byte(pa[0]));
  513. { if only a drive is given in path then there should be a '\' at the
  514. end of the string given back }
  515. if length(pa) = 2 then pa := pa + '\';
  516. fexpand:=pa;
  517. end;
  518. Function FSearch(path: pathstr; dirlist: string): pathstr;
  519. var
  520. i,p1 : longint;
  521. s : searchrec;
  522. newdir : pathstr;
  523. begin
  524. { check if the file specified exists }
  525. findfirst(path,anyfile,s);
  526. if doserror=0 then
  527. begin
  528. findclose(s);
  529. fsearch:=path;
  530. exit;
  531. end;
  532. { No wildcards allowed in these things }
  533. if (pos('?',path)<>0) or (pos('*',path)<>0) then
  534. fsearch:=''
  535. else
  536. begin
  537. { allow slash as backslash }
  538. for i:=1 to length(dirlist) do
  539. if dirlist[i]='/' then dirlist[i]:='\';
  540. repeat
  541. p1:=pos(';',dirlist);
  542. if p1<>0 then
  543. begin
  544. newdir:=copy(dirlist,1,p1-1);
  545. delete(dirlist,1,p1);
  546. end
  547. else
  548. begin
  549. newdir:=dirlist;
  550. dirlist:='';
  551. end;
  552. if (newdir<>'') and (not (newdir[length(newdir)] in ['\',':'])) then
  553. newdir:=newdir+'\';
  554. findfirst(newdir+path,anyfile,s);
  555. if doserror=0 then
  556. newdir:=newdir+path
  557. else
  558. newdir:='';
  559. until (dirlist='') or (newdir<>'');
  560. fsearch:=newdir;
  561. end;
  562. findclose(s);
  563. end;
  564. {******************************************************************************
  565. --- Get/Set File Time,Attr ---
  566. ******************************************************************************}
  567. procedure getftime(var f;var time : longint);
  568. VAR StatBuf : NWStatBufT;
  569. T : DateTime;
  570. DosDate,
  571. DosTime : WORD;
  572. begin
  573. IF _fstat (FileRec (f).Handle, StatBuf) = 0 THEN
  574. BEGIN
  575. _ConvertTimeToDos (StatBuf.st_mtime, DosDate, DosTime);
  576. time := DosTime + (LONGINT (DosDate) SHL 16);
  577. END ELSE
  578. time := 0;
  579. end;
  580. procedure setftime(var f;time : longint);
  581. begin
  582. {is there a netware function to do that ?????}
  583. ConsolePrintf ('warning: fpc dos.setftime not implemented'#13#10,0);
  584. end;
  585. procedure getfattr(var f;var attr : word);
  586. VAR StatBuf : NWStatBufT;
  587. begin
  588. IF _fstat (FileRec (f).Handle, StatBuf) = 0 THEN
  589. BEGIN
  590. attr := word (StatBuf.st_attr);
  591. END ELSE
  592. attr := 0;
  593. end;
  594. procedure setfattr(var f;attr : word);
  595. begin
  596. {is there a netware function to do that ?????}
  597. ConsolePrintf ('warning: fpc dos.setfattr not implemented'#13#10,0);
  598. end;
  599. {******************************************************************************
  600. --- Environment ---
  601. ******************************************************************************}
  602. function envcount : longint;
  603. begin
  604. envcount := 0; {is there a netware function to do that ?????}
  605. ConsolePrintf ('warning: fpc dos.envcount not implemented'#13#10,0);
  606. end;
  607. function envstr (index: longint) : string;
  608. begin
  609. envstr := ''; {is there a netware function to do that ?????}
  610. ConsolePrintf ('warning: fpc dos.envstr not implemented'#13#10,0);
  611. end;
  612. { the function exists in clib but i dont know how to set environment vars.
  613. may be it's only a dummy in clib }
  614. Function GetEnv(envvar: string): string;
  615. var
  616. envvar0 : array[0..256] of char;
  617. p : pchar;
  618. begin
  619. strpcopy(envvar0,envvar);
  620. p := _getenv (envvar0);
  621. if p = NIL then
  622. GetEnv := ''
  623. else
  624. GetEnv := strpas (p);
  625. end;
  626. {******************************************************************************
  627. --- Not Supported ---
  628. ******************************************************************************}
  629. Procedure keep(exitcode : word);
  630. Begin
  631. { no netware equivalent }
  632. End;
  633. Procedure getintvec(intno : byte;var vector : pointer);
  634. Begin
  635. { no netware equivalent }
  636. End;
  637. Procedure setintvec(intno : byte;vector : pointer);
  638. Begin
  639. { no netware equivalent }
  640. End;
  641. procedure intr(intno : byte;var regs : registers);
  642. begin
  643. { no netware equivalent }
  644. end;
  645. procedure msdos(var regs : registers);
  646. begin
  647. { no netware equivalent }
  648. end;
  649. end.
  650. {
  651. $Log$
  652. Revision 1.10 2004-02-17 17:37:26 daniel
  653. * Enable threadvars again
  654. Revision 1.9 2004/02/16 22:16:59 hajny
  655. * LastDosExitCode changed back from threadvar temporarily
  656. Revision 1.8 2004/02/15 21:34:06 hajny
  657. * overloaded ExecuteProcess added, EnvStr param changed to longint
  658. Revision 1.7 2004/02/09 12:03:16 michael
  659. + Switched to single interface in dosh.inc
  660. Revision 1.6 2003/03/25 18:17:54 armin
  661. * support for fcl, support for linking without debug info
  662. * renamed winsock2 to winsock for win32 compatinility
  663. * new sockets unit for netware
  664. * changes for compiler warnings
  665. Revision 1.5 2002/09/07 16:01:20 peter
  666. * old logs removed and tabs fixed
  667. }