home *** CD-ROM | disk | FTP | other *** search
- MODULE tsys;
- __IMP_SWITCHES__
- __DEBUG__
- #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
- (* Test- und Anwendungsbeispiel fuer Modul 'sys'.
- *
- * Falls dem Programm ein Argument uebergeben wird, wird dieses als
- * Pfadname interpretiert, der anstatt des aktuellen Verzeichnisses
- * zur Ermittlung der Systemdaten mit "statfs()" und "pathconf()"
- * benutzt werden soll.
- *
- * 29-Mai-94, Holger Kleinschmidt
- *)
-
- #if (defined MM2) && (defined __DEBUG_CODE__)
- IMPORT Debug;
- #endif
-
- VAL_INTRINSIC
-
- FROM SYSTEM IMPORT
- (* PROC *) ADR;
-
- IMPORT e;
-
- FROM PORTAB IMPORT
- (* TYPE *) SIGNEDLONG, UNSIGNEDWORD;
-
- FROM types IMPORT
- (* CONST*) EOS,
- (* TYPE *) PathName;
-
- FROM sys IMPORT
- (* TYPE *) PConfVal, SConfVal, UtsnameRec, StatfsRec,
- (* PROC *) pathconf, sysconf, time, uname, statfs;
-
- FROM cstr IMPORT
- (* PROC *) strerror, AssignCToM2;
-
- FROM lib IMPORT
- (* PROC *) ltoa;
-
- FROM cmdline IMPORT
- (* PROC *) GetArg;
-
- FROM InOut IMPORT
- (* PROC *) WriteString, WriteLn, Write, Read;
-
- FROM pOUT IMPORT
- (* PROC *) PutInt;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- CONST
- ERROR = LIC(-1);
-
- VAR
- limit : SIGNEDLONG;
- valStr : ARRAY [0..40] OF CHAR;
- ch : CHAR;
- res : INTEGER;
- argc : INTEGER;
- uts : UtsnameRec;
- statbuf : StatfsRec;
- path : PathName;
-
- (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
-
- PROCEDURE TestVal ((* EIN/ -- *) proc : ARRAY OF CHAR;
- (* EIN/ -- *) limit : SIGNEDLONG );
- BEGIN
- WriteString(proc);
- IF limit = ERROR THEN
- IF e.errno <> 0 THEN
- WriteString("**failed**:: ");
- AssignCToM2(strerror(e.errno), 0, valStr);
- WriteString(valStr);
- e.errno := 0;
- ELSE
- WriteString("nicht ermittelbar");
- END;
- ELSE
- ltoa(limit, ADR(valStr), 10);
- WriteString(valStr);
- END;
- WriteLn;
- END TestVal;
-
- (*---------------------------------------------------------------------------*)
-
- PROCEDURE TestBool ((* EIN/ -- *) proc : ARRAY OF CHAR;
- (* EIN/ -- *) limit : SIGNEDLONG;
- (* EIN/ -- *) yes : ARRAY OF CHAR;
- (* EIN/ -- *) no : ARRAY OF CHAR );
- BEGIN
- WriteString(proc);
- IF limit = ERROR THEN
- IF e.errno <> 0 THEN
- WriteString("**failed**:: ");
- AssignCToM2(strerror(e.errno), 0, valStr);
- WriteString(valStr);
- e.errno := 0;
- ELSE
- WriteString(no);
- END;
- ELSE
- WriteString(yes);
- END;
- WriteLn;
- END TestBool;
-
- (*===========================================================================*)
-
- BEGIN
- res := uname(uts);
- WITH uts DO
- WriteString("sysname : "); WriteString(sysname); WriteLn;
- WriteString("nodename : "); WriteString(nodename); WriteLn;
- WriteString("release : "); WriteString(release); WriteLn;
- WriteString("version : "); WriteString(version); WriteLn;
- WriteString("machine : "); WriteString(machine); WriteLn;
- END;
- WriteLn;
-
- e.errno := 0;
- TestVal("sysconf(_SC_ARG_MAX) : ", sysconf(scArgMax));
-
- TestVal("sysconf(_SC_OPEN_MAX) : ", sysconf(scOpenMax));
-
- TestVal("sysconf(_SC_CHILD_MAX) : ", sysconf(scChildMax));
-
- TestVal("sysconf(_SC_CLK_TCK) : ", sysconf(scClkTck));
-
- TestVal("sysconf(_SC_VERSION) : ", sysconf(scVersion));
-
- TestBool("sysconf(_SC_JOB_CONTROL) : ", sysconf(scJobControl),
- "wird unterstützt", "wird nicht unterstützt");
-
- TestBool("sysconf(_SC_SAVED_IDS) : ", sysconf(scSavedIds),
- "wird unterstützt", "wird nicht unterstützt");
-
- limit := sysconf(scNGroupsMax);
- ltoa(limit, ADR(valStr), 10);
- TestBool("sysconf(_SC_NGROUPS_MAX) : ", limit, valStr,
- "wird nicht unterstützt");
- WriteLn;
-
- GetArg(1, path);
- IF path[0] = EOS THEN
- (* kein Argument angegeben, aktuelles Verzeichnis verwenden *)
- path := ".";
- END;
- WriteString("Dateisystemabhängige Daten für <path> = "); WriteString(path);
- WriteLn; WriteLn;
-
- IF statfs(path, statbuf) < 0 THEN
- WriteString("'statfs' **failed**:: ");
- AssignCToM2(strerror(e.errno), 0, valStr);
- WriteString(valStr);
- WriteLn;
- ELSE
- WriteString("Dateisystem:"); WriteLn;
- WriteString("------------"); WriteLn;
- WITH statbuf DO
- WriteString(" Typ: ");
- CASE VAL(UNSIGNEDWORD,fFsid.val[0]) OF
- 1: WriteString("V1 Minix-FS");
- |2: WriteString("V2 Minix-FS");
- ELSE WriteString("TOS-FS oder unbekannt");
- END;
- WriteLn;
- WriteString(" Bytes pro Block: "); PutInt(fBsize, 10); WriteLn;
- WriteString(" Blöcke insgesamt: "); PutInt(fBlocks, 10); WriteLn;
- WriteString(" freie Blöcke: "); PutInt(fBfree, 10); WriteLn;
- WriteString(" freie Bytes: "); PutInt(fBfree * fBsize, 10); WriteLn;
- WriteString("I-Nodes insgesamt: "); PutInt(fFiles, 10); WriteLn;
- WriteString(" freie I-Nodes: "); PutInt(fFfree, 10); WriteLn;
- END;
- END;
- WriteLn;
-
-
- TestVal('pathconf(<path>, _PC_LINK_MAX) : ', pathconf(path, pcLinkMax));
-
- TestVal('pathconf(<path>, _PC_PATH_MAX) : ', pathconf(path, pcPathMax));
-
- TestVal('pathconf(<path>, _PC_NAME_MAX) : ', pathconf(path, pcNameMax));
-
- TestVal('pathconf(<path>, _PC_PIPE_BUF) : ', pathconf(path, pcPipeBuf));
-
- TestVal('pathconf("/dev/tty", _PC_VDISABLE) : ',
- pathconf("/dev/tty", pcVdisable));
-
- TestVal('pathconf("/dev/tty", _PC_MAX_CANON) : ',
- pathconf("/dev/tty", pcMaxCanon));
-
- TestVal('pathconf("/dev/tty", _PC_MAX_INPUT) : ',
- pathconf("/dev/tty", pcMaxInput));
-
- limit := pathconf(path, pcNoTrunc);
- TestBool('pathconf(<path>, _PC_NO_TRUNC) : ', limit,
- "Dateinamen werden nicht gekuerzt","Dateinamen werden gekuerzt");
-
- limit := pathconf(path, pcChownRestricted);
- TestBool('pathconf(<path>, _PC_CHOWN_RESTRICTED) : ', limit,"ja", "nein");
-
- Read(ch);
- END tsys.
-