filectrl.inc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. {
  2. System independent filecontrol interface for os2
  3. $Id$
  4. }
  5. {$IFDEF PPC_Virtual}
  6. uses
  7. OS2Base;
  8. {$ENDIF}
  9. {$IFDEF PPC_Speed}
  10. uses
  11. BseDOS;
  12. {$ENDIF}
  13. {$IFDEF PPC_FPC}
  14. uses
  15. DosCalls;
  16. {$ENDIF}
  17. { not converted to the new error handling scheme (ie: calling
  18. ErrorHandler, instead of dumping an error code to ErrorCode) }
  19. {$IFDEF BIT_16}
  20. { There's a unit for DOSCALLS for BPOS2 available as well, should be using
  21. these functions from there... }
  22. function DosClose (Handle: Word): Word; far;
  23. external 'DOSCALLS' Index 59; { Dos close function }
  24. function DosOpen (FileName: PChar; var Handle: Word;
  25. var ActionTaken: Word; FileSize: LongInt;
  26. FileAttr: Word; OpenFlag, OpenMode: Word;
  27. Reserved: Pointer): Word; far;
  28. external 'DOSCALLS' index 70; { Dos open function }
  29. function DosDelete(FileName: PChar; Reserved: Longint): Word; far;
  30. external 'DOSCALLS' index 60;
  31. function DosRead(Handle: Word; var BufferArea;
  32. BufferLength: Word; var BytesRead : Word): Word; far;
  33. external 'DOSCALLS' index 137; { Dos read procedure }
  34. function DosWrite(Handle: Word; var BufferArea;
  35. BufferLength: Word; var BytesRead : Word): Word; far;
  36. external 'DOSCALLS' index 138; { Dos write procedure }
  37. function DosSetFilePtr (Handle: Word; ulOffset: LongInt;
  38. MoveType: Word; var NewPointer: LongInt): LongInt; far;
  39. external 'DOSCALLS' index 58; { Dos write procedure }
  40. {$ENDIF}
  41. function OpenFile(FName: PChar; Flags: Longint): TFileHandle;
  42. var
  43. Handle, ActionTaken: CPUWord;
  44. begin
  45. ErrorCode := DosOpen(FName, Handle, ActionTaken, 0, $20, 1, Flags);
  46. if ErrorCode <> 0 then
  47. OpenFile := -1
  48. else begin
  49. OpenFile := Handle;
  50. ErrorCode := 0;
  51. end;
  52. end;
  53. function CreateFile(FName: PChar): TFileHandle;
  54. begin
  55. ErrorCode := DosOpen(FName, Handle, ActionTaken, 0, $20, $12, 1);
  56. if ErrorCode <> 0 then
  57. OpenFile := -1
  58. else begin
  59. OpenFile := Handle;
  60. ErrorCode := 0;
  61. end;
  62. end;
  63. procedure CloseFile(Handle: TFileHandle);
  64. begin
  65. ErrorCode := DosClose(Handle);
  66. end;
  67. procedure DeleteFile(FName: PChar);
  68. begin
  69. ErrorCode := DosDelete(FName, 0);
  70. end;
  71. function ReadFile(Handle: TFileHandle; var Buff; Count: CPUWord): CPUWord;
  72. var
  73. BuffRead: CPUWord;
  74. begin
  75. ErrorCode := DosRead(Handle, Buff, Count, BuffRead);
  76. if ErrorCode <> 0 then
  77. ReadFile := 0
  78. else begin
  79. ReadFile := BuffRead;
  80. end;
  81. end;
  82. function WriteFile(Handle: TFileHandle; var Buff; Count: Word): Word;
  83. var
  84. BuffWritten: Word;
  85. begin
  86. ErrorCode := DosWrite(Handle, Buff, Count, BuffWritten);
  87. if ErrorCode <> 0 then
  88. WriteFile := 0
  89. else begin
  90. WriteFile := BuffRead;
  91. end;
  92. end;
  93. function SeekFile(Handle: TFileHandle; Pos: TFileInt; SeekType: Word): TFileInt;
  94. var
  95. NewPos: Longint;
  96. begin
  97. ErrorCode := DosSetFilePtr(Handle, Pos, SeekType, NewPos);
  98. if ErrorCode <> 0 then
  99. SeekFile := -1
  100. else begin
  101. SeekFile := NewPos;
  102. end;
  103. end;
  104. procedure FlushFile(Handle: TFileHandle);
  105. begin
  106. { not implemented yet }
  107. end;
  108. procedure TruncateFile(Handle: TFileHandle);
  109. begin
  110. { not implemented yet }
  111. end;
  112. function EndOfFile(Handle: TFileHandle): Boolean;
  113. begin
  114. EndOfFile := FilePos(Handle) >= FileSize(Handle);
  115. end;
  116. function FilePos(Handle: TFileHandle): TFileInt;
  117. begin
  118. FilePos := SeekFile(Handle, 0, skCur);
  119. end;
  120. function FileSize(Handle: TFileHandle): TFileInt;
  121. var
  122. L: Longint;
  123. begin
  124. L := FilePos(Handle);
  125. FileSize := SeekFile(Handle, 0, skEnd);
  126. SeekFile(Handle, L, skBeg);
  127. end;
  128. {$ENDIF}
  129. {
  130. $Log$
  131. Revision 1.2 2000-07-13 11:32:25 michael
  132. + removed logs
  133. }