home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / oberon / jacob-v0.1 / jacob-v0 / jacob / lib / FIO.ob2 < prev    next >
Encoding:
Text File  |  1996-04-04  |  5.3 KB  |  145 lines

  1. MODULE FIO;
  2. (** Inspired by TopSpeed Modula-2 library module FIO *)
  3. IMPORT L:=Lib,SL:=SysLib,SYSTEM;
  4.  
  5. CONST StandardInput*  = SL.stdin;
  6.       StandardOutput* = SL.stdout;
  7.       ErrorOutput*    = SL.stderr;
  8. TYPE  File*   = SL.int;
  9. VAR   errno-  : LONGINT; 
  10.  
  11. (************************************************************************************************************************)
  12. PROCEDURE ChDir(dn:ARRAY OF CHAR);
  13. BEGIN (* ChDir *)
  14.  IF SL.chdir(SYSTEM.ADR(dn))=0 THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  15. END ChDir;
  16.  
  17. (************************************************************************************************************************)
  18. PROCEDURE Close*(f:File);
  19. BEGIN (* Close *)
  20.  IF SL.close(f)=0 THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  21. END Close;
  22.  
  23. (************************************************************************************************************************)
  24. PROCEDURE Create*(fn:ARRAY OF CHAR):File;
  25. VAR f:File;
  26. BEGIN (* Create *)
  27.  f:=SL.creat(SYSTEM.ADR(fn)
  28.             ,SL.S_IRUSR+SL.S_IWUSR
  29.             +SL.S_IRGRP+SL.S_IWGRP
  30.             +SL.S_IROTH+SL.S_IWOTH);
  31.  IF f>=0 THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  32.  RETURN f; 
  33. END Create;
  34.  
  35. (************************************************************************************************************************)
  36. PROCEDURE Erase*(fn:ARRAY OF CHAR);
  37. VAR ok:BOOLEAN; 
  38. BEGIN (* Erase *)
  39.  ok:=(SL.unlink(SYSTEM.ADR(fn))=0); 
  40.  IF ok THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  41. END Erase;
  42.  
  43. (************************************************************************************************************************)
  44. PROCEDURE Exists*(fn:ARRAY OF CHAR):BOOLEAN; 
  45. VAR ok:BOOLEAN; 
  46. BEGIN (* Exists *)                
  47.  ok:=(SL.access(SYSTEM.ADR(fn),SL.R_OK)=0); 
  48.  IF ok THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  49.  RETURN ok;
  50. END Exists;
  51.  
  52. (************************************************************************************************************************)
  53. PROCEDURE GetPos*(f:File):LONGINT; 
  54. VAR p:LONGINT; 
  55. BEGIN (* GetPos *)          
  56.  p:=SL.lseek(f,0,SL.SEEK_CUR); 
  57.  IF p>=0 THEN errno:=0; ELSE p:=0; errno:=SL.errno; END; (* IF *)
  58.  RETURN p; 
  59. END GetPos;
  60.  
  61. (************************************************************************************************************************)
  62. PROCEDURE IOresult*():LONGINT; 
  63. VAR e:LONGINT; 
  64. BEGIN (* IOresult *)          
  65.  e:=errno; errno:=0; RETURN e; 
  66. END IOresult;
  67.  
  68. (************************************************************************************************************************)
  69. PROCEDURE MkDir*(dn:ARRAY OF CHAR);
  70. BEGIN (* MkDir *)        
  71.  IF SL.mkdir(SYSTEM.ADR(dn),SL.S_IRUSR+SL.S_IWUSR
  72.                            +SL.S_IRGRP+SL.S_IWGRP
  73.                            +SL.S_IROTH+SL.S_IWOTH)=0 THEN 
  74.     errno:=0; 
  75.  ELSE 
  76.     errno:=SL.errno; 
  77.  END; (* IF *)
  78. END MkDir;
  79.  
  80. (************************************************************************************************************************)
  81. PROCEDURE Open*(fn:ARRAY OF CHAR):File;
  82. VAR f:File;
  83. BEGIN (* Open *)
  84.  f:=SL.open(SYSTEM.ADR(fn),SL.O_RDONLY,0); 
  85.  IF f>=0 THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  86.  RETURN f; 
  87. END Open;
  88.  
  89. (************************************************************************************************************************)
  90. PROCEDURE RdBin*(f:File; VAR buf:ARRAY OF SYSTEM.BYTE; sz:LONGINT):LONGINT; 
  91. VAR n:LONGINT; 
  92. BEGIN (* RdBin *)
  93.  n:=SL.read(f,SYSTEM.ADR(buf),sz); 
  94.  IF n>=0 THEN errno:=0; ELSE n:=0; errno:=SL.errno; END; (* IF *)
  95.  RETURN n; 
  96. END RdBin;
  97.  
  98. (************************************************************************************************************************)
  99. PROCEDURE Rename*(on,nn:ARRAY OF CHAR);
  100. BEGIN (* Rename *)                  
  101.  IF SL.rename(SYSTEM.ADR(on),SYSTEM.ADR(nn))=0 THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  102. END Rename;
  103.  
  104. (************************************************************************************************************************)
  105. PROCEDURE RmDir*(dn:ARRAY OF CHAR);
  106. BEGIN (* RmDir *)
  107.  IF SL.rmdir(SYSTEM.ADR(dn))=0 THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  108. END RmDir;
  109.  
  110. (************************************************************************************************************************)
  111. PROCEDURE Seek*(f:File; pos:LONGINT);
  112. VAR p:LONGINT; 
  113. BEGIN (* Seek *)           
  114.  p:=SL.lseek(f,0,SL.SEEK_SET); 
  115.  IF p>=0 THEN errno:=0; ELSE p:=0; errno:=SL.errno; END; (* IF *)
  116. END Seek;
  117.  
  118. (************************************************************************************************************************)
  119. PROCEDURE Size*(f:File):LONGINT; 
  120. VAR stat:SL.struct_stat;
  121. BEGIN (* Size *)    
  122.  IF SL._fxstat(1,f,SYSTEM.ADR(stat))=0 THEN 
  123.     errno:=0; RETURN stat.st_size; 
  124.  ELSE 
  125.     errno:=SL.errno; RETURN 0; 
  126.  END; (* IF *)
  127. END Size;
  128.  
  129. (************************************************************************************************************************)
  130. PROCEDURE Truncate*(f:File);
  131. VAR p:LONGINT; 
  132. BEGIN (* Truncate *)
  133.  p:=SL.lseek(f,0,SL.SEEK_CUR); 
  134.  IF (p>=0) & (SL.ftruncate(f,p)=0) THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  135. END Truncate;
  136.  
  137. (************************************************************************************************************************)
  138. PROCEDURE WrBin*(f:File; buf:ARRAY OF SYSTEM.BYTE; sz:LONGINT);
  139. BEGIN (* WrBin *)
  140.  IF SL.write(f,SYSTEM.ADR(buf),sz)>=0 THEN errno:=0; ELSE errno:=SL.errno; END; (* IF *)
  141. END WrBin;
  142.  
  143. (************************************************************************************************************************)
  144. END FIO.
  145.