unix/src/osf-1.DS3100/Utypes.m3


Copyright (C) 1994, Digital Equipment Corp.

MODULE Utypes;

IMPORT Word;

PROCEDURE major (x: dev_t): major_t =
  BEGIN
    RETURN Word.And (Word.Shift (x, -20), 8_07777);
  END major;

PROCEDURE minor (x: dev_t): minor_t =
  BEGIN
    RETURN Word.And (x, 8_03777777);
  END minor;

PROCEDURE makedev (x: major_t;   y: minor_t): dev_t =
  BEGIN
    RETURN Word.Or (Word.Shift (x, 20), y);
  END makedev;

PROCEDURE howmany (x, y: INTEGER): INTEGER =
  BEGIN
    RETURN (x + (y - 1)) DIV y;
  END howmany;

PROCEDURE FD_SET (n: INTEGER; p: UNTRACED REF fd_set): INTEGER =
  BEGIN
    WITH l = p.fds_bits [n DIV NFDBITS] DO
      l := Word.Or (l, Word.Shift (1, n MOD NFDBITS));
      RETURN l;
    END;
  END FD_SET;

PROCEDURE FD_CLEAR (n: INTEGER; p: UNTRACED REF fd_set): INTEGER =
  BEGIN
    WITH l = p.fds_bits [n DIV NFDBITS] DO
      l := Word.And (l, Word.Not (Word.Shift (1, n MOD NFDBITS)));
      RETURN l;
    END;
  END FD_CLEAR;

PROCEDURE FD_ISSET (n: INTEGER; p: UNTRACED REF fd_set): INTEGER =
  BEGIN
    WITH l = p.fds_bits [n DIV NFDBITS] DO
      RETURN Word.And (l, Word.Shift (1, n MOD NFDBITS));
    END;
  END FD_ISSET;

PROCEDURE FD_ZERO (p: UNTRACED REF fd_set) =
  BEGIN
    WITH a = p.fds_bits DO
      FOR i := FIRST (a) TO LAST (a) DO  a[i] := 0;  END;
    END;
  END FD_ZERO;

BEGIN
END Utypes.

interface Utypes is in: