File: BasicIO.mi

package info (click to toggle)
mocka 9905-2
  • links: PTS
  • area: non-free
  • in suites: potato, sarge, woody
  • size: 5,436 kB
  • ctags: 160
  • sloc: asm: 23,203; makefile: 124; sh: 102; ansic: 23
file content (88 lines) | stat: -rw-r--r-- 2,563 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
(******************************************************************************)
(* Copyright (c) 1988 by GMD Karlruhe, Germany				      *)
(* Gesellschaft fuer Mathematik und Datenverarbeitung			      *)
(* (German National Research Center for Computer Science)		      *)
(* Forschungsstelle fuer Programmstrukturen an Universitaet Karlsruhe	      *)
(* All rights reserved.							      *)
(******************************************************************************)

IMPLEMENTATION MODULE BasicIO;

  FROM SYSTEM IMPORT
    ADDRESS, ADR;

  FROM SysLib IMPORT
    pROWNER, pWOWNER, pRGROUP, pWGROUP, pROTHERS, pWOTHERS, pEMPTY,
    oRDONLY, cREAD, cWRITE,
    unlink, creat, open, close, read, write, access;

  IMPORT Strings1; (* ms 11/90 *)

  TYPE tFileName = ARRAY [0..1023] OF CHAR;


  PROCEDURE OpenInput (VAR file : File; VAR name : ARRAY OF CHAR);
    VAR s: tFileName;
  BEGIN
    IF (name[0] = '-') AND ((HIGH (name) = 0) OR (name[1] = CHR(0))) THEN
       file := 0
    ELSE
       Strings1.Assign(s,name); (* ms 11/90 *)
       file := open (ADR (s), oRDONLY); (* ms 11/90 *)
    END;
  END OpenInput;

  PROCEDURE OpenOutput (VAR file : File; VAR name : ARRAY OF CHAR);
    VAR s: tFileName;
  BEGIN
    IF (name[0] = '-') AND ((HIGH (name) = 0) OR (name[1] = CHR(0))) THEN
	file := 1;
     ELSE
        Strings1.Assign(s,name); (* ms 11/90 *)
        file := creat (ADR (s), pROWNER + pWOWNER + pRGROUP + pWGROUP + pROTHERS + pWOTHERS);
        (* access mode is rw-rw-rw- & ~umask *)
     END;
  END OpenOutput;

  PROCEDURE Close (file : File);
     VAR result : INTEGER;
  BEGIN
     IF (file <> 0) AND (file <> 1) THEN
        result := close (file);
     END;
  END Close;

  PROCEDURE Read (file: File; x: ADDRESS; n: INTEGER; VAR bytesread: INTEGER);
  BEGIN
    bytesread := read (file, x, n);
  END Read;

  PROCEDURE Write (file : File; x : ADDRESS; n : INTEGER);
     VAR result : INTEGER;
  BEGIN
    result := write (file, x, n);
  END Write;

  PROCEDURE Accessible (VAR name : ARRAY OF CHAR; ForWriting : BOOLEAN)
		       : BOOLEAN;
    VAR
      s: tFileName;
      amode : SHORTINT;
  BEGIN
    Strings1.Assign(s,name); (* ms 11/90 *)
    IF ForWriting THEN
      amode := cWRITE
    ELSE (* for reading *)
      amode := cREAD
    END;
    RETURN access (ADR(s), amode) = 0  (* ms 11/90 *)
  END Accessible;

  PROCEDURE Erase (VAR name : ARRAY OF CHAR; VAR ok : BOOLEAN);
    VAR s: tFileName;
  BEGIN
     Strings1.Assign(s,name); (* ms 11/90 *)
     ok := unlink (ADR(s)) = 0  (* ms 11/90 *)
  END Erase;

END BasicIO.