home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1989-09-25 | 3.2 KB | 102 lines |
- DEFINITION MODULE System;
-
- (*
- * Definitionen, die später im internen SYSTEM-Modul definiert
- * sein werden, um portablere Low-Level-Implementationen vor-
- * nehmen zu können.
- *)
-
- IMPORT SYSTEM;
-
- TYPE
-
- LOC = SYSTEM.BYTE; (* Basis-Größe aller Daten (hier: 8 Bit) *)
- (* TSIZE (LOC) = 1 (definitionsgemäß)! *)
-
- ADDRESS = POINTER TO LOC; (* Adreß-Arithmetik nur mögl. mit Funk- *)
- (* tionen INC-/DEC-/DIFADR (s.u.)! *)
-
- CONST
-
- LOCsperBYTE = 1;
- LOCsperWORD = 2;
- BITNUM = 16;
-
- PROCEDURE INCADR ( addr: ADDRESS; offset: LONGCARD ): ADDRESS;
- (*
- * Addiert einen Offset zu einer Adresse.
- *)
-
- PROCEDURE DECADR ( addr: ADDRESS; offset: LONGCARD ): ADDRESS;
- (*
- * Subtrahiert einen Offset von einer Adresse.
- *)
-
- PROCEDURE DIFADR ( from, sub: ADDRESS ): LONGINT;
- (*
- * Bildet die Differenz zw. zwei Adressen.
- *
- * Ist 'from' größer als 'sub', wird ein positiver Wert geliefert
- *)
-
- PROCEDURE SHIFT ( VAR val: ARRAY OF LOC; n: INTEGER );
- (*
- * Ist 'n' positiv, wird 'val' mit '2^n' multipliziert, ansonsten
- * dadurch dividiert.
- *
- * Beispiel:
- * SHIFT ( 5, 2 ) ergibt 20
- *
- * ACHTUNG: Bei allen Arten von SETs (auch BITSET) muß die Funktion
- * SHIFTSET verwendet werden!
- *)
-
- PROCEDURE SHIFTSET ( VAR set: ARRAY OF LOC; bits: CARDINAL; n: INTEGER );
- (*
- * Wie SHIFT, jedoch für SETs. Hier muß zusätzlich die Breite in Bits
- * des übergebenen Sets in 'bits' angegeben werden (Bei 'BITSET' ist das
- * die Konstante 'BITsperBITSET', bei einem 'SET OF [3..7]' wäre es '5').
- *
- * Die besondere interne Darstellung von SETs beim Megamax Modula wird
- * hierbei berücksichtigt (die Set-Elemente werden auf ihren logischen
- * Positionen verschoben).
- *
- * Beispiel:
- * SHIFTSET ( BITSET {0,9,15}, BITsperBITSET, 2 ) ergibt BITSET {2,11}
- *
- * Diese Hilfsfunktion ist nur notwendig, solange sich SHIFT noch nicht
- * im internen SYSTEM-Modul befindet.
- *)
-
- PROCEDURE ROTATE ( VAR val: ARRAY OF LOC; n: INTEGER );
- (*
- * Ist 'n' positiv, werden die Bits in 'val' 'n' mal in höhere
- * Positionen gerollt (oben überlaufende Bits werden unten wieder
- * eingeschoben), bei negativem 'n' geht's abwärts.
- *
- * Beispiel:
- * ROTATE ( $410F, -1 ) ergibt $A087
- *
- * ACHTUNG: Bei allen Arten von SETs (auch BITSET) muß die Funktion
- * ROTATESET verwendet werden!
- *)
-
- PROCEDURE ROTATESET ( VAR set: ARRAY OF LOC; bits: CARDINAL; n: INTEGER );
- (*
- * Wie ROTATE, jedoch für SETs. Hier muß zusätzlich die Breite in Bits
- * des übergebenen Sets in 'bits' angegeben werden (Bei 'BITSET' ist das
- * die Konstante 'BITsperBITSET', bei einem 'SET OF [3..7]' wäre es '5').
- *
- * Die besondere interne Darstellung von SETs beim Megamax Modula wird
- * hierbei berücksichtigt (die Set-Elemente werden auf ihren logischen
- * Positionen verschoben).
- *
- * Beispiel:
- * ROTATESET ( BITSET {0,9,15}, BITsperBITSET, 2 ) ergibt BITSET {1,2,11}
- *
- * Diese Hilfsfunktion ist nur notwendig, solange sich ROTATE noch nicht
- * im internen SYSTEM-Modul befindet.
- *)
-
- END System.
- ə