home *** CD-ROM | disk | FTP | other *** search
Modula Implementation | 1993-10-23 | 4.0 KB | 157 lines |
- IMPLEMENTATION MODULE sys;
- (*__NO_CHECKS__*)
- (*****************************************************************************)
- (* Basiert auf der MiNTLIB von Eric R. Smith *)
- (* --------------------------------------------------------------------------*)
- (* STATUS: OK *)
- (* --------------------------------------------------------------------------*)
- (* 14-Feb-93, Holger Kleinschmidt *)
- (*****************************************************************************)
-
- VAL_INTRINSIC
- CAST_IMPORT
- OSCALL_IMPORT
-
- FROM SYSTEM IMPORT
- (* PROC *) ADR;
-
- FROM types IMPORT
- (* TYPE *) WORDSET, SIGNEDLONG, UNSIGNEDLONG, UNSIGNEDWORD, SIGNEDWORD,
- PathName, timeT;
-
- FROM err IMPORT
- (* CONST*) EINVAL,
- (* VAR *) errno;
-
- #if MINT
- FROM DosSystem IMPORT MiNTVersion;
- #endif
-
- FROM DosFile IMPORT
- (* PROC *) UnixToDos;
-
- #include "oscalls.m2h"
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- CONST
- EOKL = LIC(0);
-
- #if MINT
- VAR
- MiNT : CARDINAL;
- #endif
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- PROCEDURE pathconf ((* EIN/ -- *) REF file : ARRAY OF CHAR;
- (* EIN/ -- *) which : PConfVal ): SIGNEDLONG;
- (*T*)
- VAR dot : BOOLEAN;
- done : BOOLEAN;
- path0 : PathName;
- #if MINT
- limit : SIGNEDLONG;
- #endif
-
- BEGIN
- UnixToDos(file, path0, dot, done);
- IF NOT done THEN
- RETURN(-1);
- END;
- #if MINT
- IF MiNT > 0 THEN
- CASE which OF
- pcMaxCanon : RETURN(-1); (* ?? *)
- |pcMaxInput : RETURN(-1); (* ?? *)
- |pcChownRestricted: RETURN(0); (* ja *)
- |pcVdisable : RETURN(0);
- ELSE
- Dpathconf(ADR(path0), VAL(UNSIGNEDWORD, which)+1, limit);
- IF which = pcNoTrunc THEN
- IF limit > LIC(0) THEN
- RETURN(-1); (* <=> Dateinamen werden gekuerzt *)
- ELSE
- RETURN(0);
- END;
- ELSIF limit < EOKL THEN
- errno := INT(limit);
- RETURN(-1);
- ELSE
- RETURN(limit);
- END;
- END;
- END;
- #endif
- CASE which OF
- pcLinkMax : RETURN(1);
- |pcPathMax : RETURN(128);
- |pcNameMax : RETURN(12);
- |pcNoTrunc : RETURN(-1); (* -1 <=> es wird gekuerzt *)
- |pcVdisable : RETURN(0);
- |pcMaxInput : RETURN(-1); (* ? *)
- |pcMaxCanon : RETURN(-1); (* ? *)
- ELSE (* pcPipeBuf, pcChownRestricted... *)
- errno := EINVAL;
- RETURN(-1);
- END;
- END pathconf;
-
- (*---------------------------------------------------------------------------*)
-
- PROCEDURE sysconf ((* EIN/ -- *) which : SConfVal ): SIGNEDLONG;
- (*T*)
- #if MINT
- VAR limit : SIGNEDLONG;
- #endif
- BEGIN
- #if MINT
- IF MiNT > 0 THEN
- CASE which OF
- scArgMax : RETURN(UNLIMITED); (* wegen "ARGV" *)
- |scClkTck : RETURN(CLKTCK);
- |scJobControl : RETURN(1); (* ja *)
- |scSavedIds : RETURN(-1); (* nein ?? *)
- ELSE
- Sysconf(VAL(SIGNEDWORD,which)+1, limit);
- IF limit < LIC(0) THEN
- errno := INT(limit);
- RETURN(-1);
- ELSE
- RETURN(limit);
- END;
- END;
- END;
- #endif
- CASE which OF
- scArgMax : RETURN(UNLIMITED); (* wegen "ARGV" *)
- |scOpenMax : RETURN(81); (* max. Kennung = 80 *)
- |scNGroupsMax : RETURN(0);
- |scChildMax : RETURN(UNLIMITED);
- |scClkTck : RETURN(CLKTCK);
- |scJobControl : RETURN(-1); (* kein ``Job Control'' *)
- |scSavedIds : RETURN(-1); (* aber kein Fehler ! *)
- ELSE (* scVersion, ... *)
- errno := EINVAL;
- RETURN(-1);
- END;
- END sysconf;
-
- (*---------------------------------------------------------------------------*)
-
- PROCEDURE time ((* -- /AUS *) VAR time : timeT );
- (*T*)
- VAR date : UNSIGNEDWORD;
- BEGIN
- Tgettime(date);
- time.time := CAST(WORDSET,date);
- Tgetdate(date);
- time.date := CAST(WORDSET,date);
- END time;
-
- #if MINT
- (*===========================================================================*)
- BEGIN
- MiNT := MiNTVersion();
- #endif
- END sys.
-