home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1994-05-09 | 6.4 KB | 216 lines |
- DEFINITION MODULE types;
- __DEF_SWITCHES__
- #ifdef HM2
- #ifdef __LONG_WHOLE__
- (*$!i+: Modul muss mit $i- uebersetzt werden! *)
- (*$!w+: Modul muss mit $w- uebersetzt werden! *)
- #else
- (*$!i-: Modul muss mit $i+ uebersetzt werden! *)
- (*$!w-: Modul muss mit $w+ uebersetzt werden! *)
- #endif
- #endif
- (*****************************************************************************)
- (* 09-Mai-94, Holger Kleinschmidt *)
- (*****************************************************************************)
-
- IMPORT PORTAB;
-
- (*===========================================================================*)
- (* POSIX.1 - Konstanten und -Typen: *)
- (*===========================================================================*)
-
- CONST
- NULL = PORTAB.NULL;
-
- TYPE
- (* Die Typen sind je nach System zu aendern *)
- uidT = PORTAB.UNSIGNEDWORD;
- gidT = PORTAB.UNSIGNEDWORD;
- pidT = INTEGER;
- inoT = PORTAB.UNSIGNEDLONG;
- nlinkT = PORTAB.UNSIGNEDWORD;
- devT = PORTAB.SIGNEDWORD;
- offT = PORTAB.SIGNEDLONG;
- sizeT = PORTAB.UNSIGNEDLONG;
- ssizeT = PORTAB.SIGNEDLONG;
- clockT = PORTAB.SIGNEDLONG;
- timeT = PORTAB.SIGNEDLONG;
-
- (* Mindestwerte fuer Maximalangaben, d.h. das Betriebs/Dateisystem muss
- mindestens diese Groessen unterstutzen, darf aber auch mehr.
- Die tatsaechlichen Werte lassen sich ueber "sys.path/sysconf()"
- zur Laufzeit erfragen, oder ueber die nachfolgenden Konstanten,
- falls vorhanden.
-
- "GEMDOS": Die meisten Anforderungen werden nicht erfuellt.
- *)
- CONST
- PosixArgMax = 4096;
- PosixChildMax = 6;
- PosixLinkMax = 8;
- PosixMaxCanon = 255;
- PosixMaxInput = 255;
- PosixNameMax = 14;
- PosixNGroupsMax = 0;
- PosixOpenMax = 16;
- PosixPathMax = 255;
- PosixPipeBuf = 512;
- PosixStreamMax = 8;
- PosixSsizeMax = 32767;
-
-
- CONST (* Ist POSIX, es soll aber "sys.sysconf(scClkTck)" benutzt werden! *)
- ClkTck = LC(200); (* Aufloesung von 'clockT': (ClkTck Intervalle)/ Sekunde *)
-
- CONST (* Nicht POSIX *)
- ClocksPerSec = ClkTck;
-
- (* Das sind die einzigen beiden Werte, die zur Uebersetzungszeit bekannt
- * sein muessen, alle anderen Werte koennen durch "sys.path/sysconf()"
- * ermittelt werden.
- *)
- CONST
- NGroupsMax = 0; (* Der von "sysconf()" gelieferte Wert kann groesser sein *)
- #if no_MIN_MAX
- SsizeMax = PORTAB.MAXSIGNEDLONG;
- #else
- SsizeMax = MAX(ssizeT);
- #endif
-
- (*===========================================================================*)
- (* Fuer die Bibliothek benoetigte Konstanten und Typen. Nicht POSIX. *)
- (*===========================================================================*)
-
- TYPE
- TimeCast = RECORD
- CASE TAG_COLON BOOLEAN OF
- FALSE: long : PORTAB.SIGNEDLONG;
- (* Richtige Reihenfolge fuer 'Fdatime' usw. *)
- |TRUE : time : PORTAB.WORDSET;
- date : PORTAB.WORDSET;
- END;
- END;
-
- CONST
- EOS = 0C; (* Terminator fuer M2-Strings, falls kleiner als Feld *)
-
- (* Definitionen fuer ``C''-Strings *)
- CONST
- #if (defined LPRM2) || (defined SPCM2)
- MAXSTR = 32000; (* bel. Obergrenze *)
- MAXARRAY = 8000; (* bel. Obergrenze *)
- #else
- MAXSTR = 65534; (* bel. Obergrenze *)
- MAXARRAY = 65534; (* bel. Obergrenze *)
- #endif
-
- TYPE
- StrRange = [0..MAXSTR];
- ArrayRange = [0..MAXARRAY];
-
- StrPtr = POINTER TO ARRAY StrRange OF CHAR; (* Nicht ohne Index deref.! *)
- StrPPtr = POINTER TO StrPtr; (* dito *)
- StrArray = POINTER TO ARRAY ArrayRange OF StrPtr; (* dito *)
-
- CONST
- #ifdef __GEMDOS__
- NAMEMAX = 32;
- PATHMAX = 128;
- #elif (defined __PCDOS__)
- NAMEMAX = 14;
- PATHMAX = 64; (* ?? *)
- #else
- NAMEMAX = PosixNameMax;
- PATHMAX = PosixPathMax;
- #endif
- EXTMAX = 5;
-
- (* X* steht fuer "UNIX", D* fuer "PCDOS", G* steht fuer "GEMDOS" *)
- CONST
- XDEVPREFIX = "/dev/"; (* nur *IX; z.B.: /dev/tty, /dev/null *)
- GDEVPOSTFIX = ':'; (* nur "GEMDOS"; z.B.: CON:, PRN: *)
- DDRVPOSTFIX = ':'; (* "DOS" und "GEMDOS"; z.B.: A: *)
-
- (* *DIRSEP ist EINZELZEICHEN, das Pfadkomponenten voneinander trennt *)
- XDIRSEP = '/';
- DDIRSEP = 134C;(* Wegen C-Praeprozessor... *)
- GDIRSEP = 134C;(* -''- *)
-
- #ifdef __GEMDOS__
- DIRSEP = GDIRSEP;
- #elif (defined __PCDOS__)
- DIRSEP = DDIRSEP;
- #else
- DIRSEP = XDIRSEP;
- #endif
-
- (* EINZELZEICHEN, das Dateinamen von der Extension trennt. Da *IX vom
- * System her eigtl. nicht zwischen Dateiname und Extension trennt, ist
- * das Trennzeichen nur der Konvention halber das gleiche wie bei
- * (PC/GEM)DOS.
- *)
- SUFFIXSEP = '.';
-
- TYPE
- FileName = ARRAY [0..NAMEMAX] OF CHAR;
- #ifdef __PCDOS__
- PathName = ARRAY [0..PATHMAX+NAMEMAX] OF CHAR; (* ?? *)
- #else
- PathName = ARRAY [0..PATHMAX] OF CHAR;
- #endif
- ExtName = ARRAY [0..EXTMAX] OF CHAR;
-
- TYPE
- PathPtr = POINTER TO PathName;
-
-
- CONST
- #if reverse_set
- SecMask = PORTAB.WORDSET{11..15}; (* 0..29 ( x 2 ) *)
- MinMask = PORTAB.WORDSET{5..10}; (* 0..59 *)
- HourMask = PORTAB.WORDSET{0..4}; (* 0..23 *)
-
- DayMask = PORTAB.WORDSET{11..15}; (* 1..31 *)
- MonMask = PORTAB.WORDSET{7..10}; (* 1..12 *)
- YearMask = PORTAB.WORDSET{0..6}; (* 0..119 ( + 1980 ) *)
- #else
- SecMask = PORTAB.WORDSET{0..4}; (* 0..29 ( x 2 ) *)
- MinMask = PORTAB.WORDSET{5..10}; (* 0..59 *)
- HourMask = PORTAB.WORDSET{11..15}; (* 0..23 *)
-
- DayMask = PORTAB.WORDSET{0..4}; (* 1..31 *)
- MonMask = PORTAB.WORDSET{5..8}; (* 1..12 *)
- YearMask = PORTAB.WORDSET{9..15}; (* 0..119 ( + 1980 ) *)
- #endif
-
-
- (*===========================================================================*)
- (* ``C-''-Standardtypen *)
- (*===========================================================================*)
-
- TYPE (* ``C-''-Standardtypen *)
- char = PORTAB.SIGNEDBYTE;
- signedchar = PORTAB.SIGNEDBYTE;
- unsignedchar = PORTAB.UNSIGNEDBYTE;
-
- short = PORTAB.SIGNEDWORD;
- signedshort = PORTAB.SIGNEDWORD;
- unsignedshort = PORTAB.UNSIGNEDWORD;
-
- int = INTEGER;
- signedint = INTEGER;
- unsigned = CARDINAL;
- unsignedint = CARDINAL;
-
- long = PORTAB.SIGNEDLONG;
- signedlong = PORTAB.SIGNEDLONG;
- unsignedlong = PORTAB.UNSIGNEDLONG;
-
- float = REAL;
- double = LONGREAL;
-
- charP = StrPtr;
- voidP = PORTAB.ANYPOINTER;
- END types.
-
-