home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / m2posx14 / src / types.dpp < prev    next >
Encoding:
Modula Definition  |  1994-05-09  |  6.4 KB  |  216 lines

  1. DEFINITION MODULE types;
  2. __DEF_SWITCHES__
  3. #ifdef HM2
  4. #ifdef __LONG_WHOLE__
  5. (*$!i+: Modul muss mit $i- uebersetzt werden! *)
  6. (*$!w+: Modul muss mit $w- uebersetzt werden! *)
  7. #else
  8. (*$!i-: Modul muss mit $i+ uebersetzt werden! *)
  9. (*$!w-: Modul muss mit $w+ uebersetzt werden! *)
  10. #endif
  11. #endif
  12. (*****************************************************************************)
  13. (* 09-Mai-94, Holger Kleinschmidt                                            *)
  14. (*****************************************************************************)
  15.  
  16. IMPORT PORTAB;
  17.  
  18. (*===========================================================================*)
  19. (* POSIX.1 - Konstanten und -Typen:                                          *)
  20. (*===========================================================================*)
  21.  
  22. CONST
  23.   NULL = PORTAB.NULL;
  24.  
  25. TYPE
  26.   (* Die Typen sind je nach System zu aendern *)
  27.   uidT   = PORTAB.UNSIGNEDWORD;
  28.   gidT   = PORTAB.UNSIGNEDWORD;
  29.   pidT   = INTEGER;
  30.   inoT   = PORTAB.UNSIGNEDLONG;
  31.   nlinkT = PORTAB.UNSIGNEDWORD;
  32.   devT   = PORTAB.SIGNEDWORD;
  33.   offT   = PORTAB.SIGNEDLONG;
  34.   sizeT  = PORTAB.UNSIGNEDLONG;
  35.   ssizeT = PORTAB.SIGNEDLONG;
  36.   clockT = PORTAB.SIGNEDLONG;
  37.   timeT  = PORTAB.SIGNEDLONG;
  38.  
  39. (* Mindestwerte fuer Maximalangaben, d.h. das Betriebs/Dateisystem muss
  40.    mindestens diese Groessen unterstutzen, darf aber auch mehr.
  41.    Die tatsaechlichen Werte lassen sich ueber "sys.path/sysconf()"
  42.    zur Laufzeit erfragen, oder ueber die nachfolgenden Konstanten,
  43.    falls vorhanden.
  44.  
  45.    "GEMDOS": Die meisten Anforderungen werden nicht erfuellt.
  46.  *)
  47. CONST
  48.   PosixArgMax      = 4096;
  49.   PosixChildMax    = 6;
  50.   PosixLinkMax     = 8;
  51.   PosixMaxCanon    = 255;
  52.   PosixMaxInput    = 255;
  53.   PosixNameMax     = 14;
  54.   PosixNGroupsMax  = 0;
  55.   PosixOpenMax     = 16;
  56.   PosixPathMax     = 255;
  57.   PosixPipeBuf     = 512;
  58.   PosixStreamMax   = 8;
  59.   PosixSsizeMax    = 32767;
  60.  
  61.  
  62. CONST (* Ist POSIX, es soll aber "sys.sysconf(scClkTck)" benutzt werden! *)
  63.   ClkTck = LC(200); (* Aufloesung von 'clockT': (ClkTck Intervalle)/ Sekunde *)
  64.  
  65. CONST (* Nicht POSIX *)
  66.   ClocksPerSec = ClkTck;
  67.  
  68. (* Das sind die einzigen beiden Werte, die zur Uebersetzungszeit bekannt
  69.  * sein muessen, alle anderen Werte koennen durch "sys.path/sysconf()"
  70.  * ermittelt werden.
  71.  *)
  72. CONST
  73.   NGroupsMax = 0; (* Der von "sysconf()" gelieferte Wert kann groesser sein *)
  74. #if no_MIN_MAX
  75.   SsizeMax   = PORTAB.MAXSIGNEDLONG;
  76. #else
  77.   SsizeMax   = MAX(ssizeT);
  78. #endif
  79.  
  80. (*===========================================================================*)
  81. (* Fuer die Bibliothek benoetigte Konstanten und Typen. Nicht POSIX.         *)
  82. (*===========================================================================*)
  83.  
  84. TYPE
  85.   TimeCast  = RECORD
  86.     CASE TAG_COLON BOOLEAN OF
  87.       FALSE: long : PORTAB.SIGNEDLONG;
  88.       (* Richtige Reihenfolge fuer 'Fdatime' usw. *)
  89.      |TRUE : time : PORTAB.WORDSET;
  90.              date : PORTAB.WORDSET;
  91.     END;
  92.   END;
  93.  
  94. CONST
  95.   EOS = 0C; (* Terminator fuer M2-Strings, falls kleiner als Feld *)
  96.  
  97. (* Definitionen fuer ``C''-Strings *)
  98. CONST
  99. #if (defined LPRM2) || (defined SPCM2)
  100.   MAXSTR   = 32000; (* bel. Obergrenze *)
  101.   MAXARRAY = 8000;  (* bel. Obergrenze *)
  102. #else
  103.   MAXSTR   = 65534; (* bel. Obergrenze *)
  104.   MAXARRAY = 65534; (* bel. Obergrenze *)
  105. #endif
  106.  
  107. TYPE
  108.   StrRange   = [0..MAXSTR];
  109.   ArrayRange = [0..MAXARRAY];
  110.  
  111.   StrPtr   = POINTER TO ARRAY StrRange OF CHAR; (* Nicht ohne Index deref.! *)
  112.   StrPPtr  = POINTER TO StrPtr; (* dito *)
  113.   StrArray = POINTER TO ARRAY ArrayRange OF StrPtr; (* dito *)
  114.  
  115. CONST
  116. #ifdef __GEMDOS__
  117.   NAMEMAX = 32;
  118.   PATHMAX = 128;
  119. #elif (defined __PCDOS__)
  120.   NAMEMAX = 14;
  121.   PATHMAX = 64; (* ?? *)
  122. #else
  123.   NAMEMAX = PosixNameMax;
  124.   PATHMAX = PosixPathMax;
  125. #endif
  126.   EXTMAX  = 5;
  127.  
  128. (* X* steht fuer "UNIX", D* fuer "PCDOS", G* steht fuer "GEMDOS" *)
  129. CONST
  130.   XDEVPREFIX  = "/dev/";   (* nur *IX; z.B.: /dev/tty, /dev/null *)
  131.   GDEVPOSTFIX = ':';       (* nur "GEMDOS"; z.B.: CON:, PRN: *)
  132.   DDRVPOSTFIX = ':';       (* "DOS" und "GEMDOS"; z.B.: A: *)
  133.  
  134.   (* *DIRSEP ist EINZELZEICHEN, das Pfadkomponenten voneinander trennt *)
  135.   XDIRSEP     = '/';
  136.   DDIRSEP     = 134C;(* Wegen C-Praeprozessor... *)
  137.   GDIRSEP     = 134C;(* -''- *)
  138.  
  139. #ifdef __GEMDOS__
  140.   DIRSEP = GDIRSEP;
  141. #elif (defined __PCDOS__)
  142.   DIRSEP = DDIRSEP;
  143. #else
  144.   DIRSEP = XDIRSEP;
  145. #endif
  146.  
  147.   (* EINZELZEICHEN, das Dateinamen von der Extension trennt. Da *IX vom
  148.    * System her eigtl. nicht zwischen Dateiname und Extension trennt, ist
  149.    * das Trennzeichen nur der Konvention halber das gleiche wie bei
  150.    * (PC/GEM)DOS.
  151.    *)
  152.   SUFFIXSEP   = '.';
  153.  
  154. TYPE
  155.   FileName = ARRAY [0..NAMEMAX] OF CHAR;
  156. #ifdef __PCDOS__
  157.   PathName = ARRAY [0..PATHMAX+NAMEMAX] OF CHAR; (* ?? *)
  158. #else
  159.   PathName = ARRAY [0..PATHMAX] OF CHAR;
  160. #endif
  161.   ExtName  = ARRAY [0..EXTMAX] OF CHAR;
  162.  
  163. TYPE
  164.   PathPtr = POINTER TO PathName;
  165.  
  166.  
  167. CONST
  168. #if reverse_set
  169.   SecMask   = PORTAB.WORDSET{11..15}; (* 0..29 ( x 2 ) *)
  170.   MinMask   = PORTAB.WORDSET{5..10};  (* 0..59 *)
  171.   HourMask  = PORTAB.WORDSET{0..4};   (* 0..23 *)
  172.  
  173.   DayMask   = PORTAB.WORDSET{11..15}; (* 1..31 *)
  174.   MonMask   = PORTAB.WORDSET{7..10};  (* 1..12 *)
  175.   YearMask  = PORTAB.WORDSET{0..6};   (* 0..119 ( + 1980 ) *)
  176. #else
  177.   SecMask   = PORTAB.WORDSET{0..4};   (* 0..29 ( x 2 ) *)
  178.   MinMask   = PORTAB.WORDSET{5..10};  (* 0..59 *)
  179.   HourMask  = PORTAB.WORDSET{11..15}; (* 0..23 *)
  180.  
  181.   DayMask   = PORTAB.WORDSET{0..4};   (* 1..31 *)
  182.   MonMask   = PORTAB.WORDSET{5..8};   (* 1..12 *)
  183.   YearMask  = PORTAB.WORDSET{9..15};  (* 0..119 ( + 1980 ) *)
  184. #endif
  185.  
  186.  
  187. (*===========================================================================*)
  188. (* ``C-''-Standardtypen                                                      *)
  189. (*===========================================================================*)
  190.  
  191. TYPE (* ``C-''-Standardtypen *)
  192.   char          = PORTAB.SIGNEDBYTE;
  193.   signedchar    = PORTAB.SIGNEDBYTE;
  194.   unsignedchar  = PORTAB.UNSIGNEDBYTE;
  195.  
  196.   short         = PORTAB.SIGNEDWORD;
  197.   signedshort   = PORTAB.SIGNEDWORD;
  198.   unsignedshort = PORTAB.UNSIGNEDWORD;
  199.  
  200.   int           = INTEGER;
  201.   signedint     = INTEGER;
  202.   unsigned      = CARDINAL;
  203.   unsignedint   = CARDINAL;
  204.  
  205.   long          = PORTAB.SIGNEDLONG;
  206.   signedlong    = PORTAB.SIGNEDLONG;
  207.   unsignedlong  = PORTAB.UNSIGNEDLONG;
  208.  
  209.   float         = REAL;
  210.   double        = LONGREAL;
  211.  
  212.   charP         = StrPtr;
  213.   voidP         = PORTAB.ANYPOINTER;
  214. END types.
  215.  
  216.