Modula-2 Reloaded

A Modern Typesafe & Literate Programming Notation

Site Menu

Project

Specification

Implementation

Recommendations

Reference

Needs Updating

Work in Progress

Wastebasket

Wiki Manual

edit SideBar

Type Sample INT

WiP.TypeSampleINT History

Hide minor edits - Show changes to markup

2010-04-11 10:58 by benjk -
Changed lines 23-25 from:

CONST [INTEGER] usesTwosComplement = TRUE; (* experimental *)

to:
Added lines 36-42:

(* experimental *)

PROCEDURE [::] fromCARD ( n : CARDINAL ) : Sample INT?;

PROCEDURE [::] fromINT ( n : INTEGER ) : Sample INT?;

2010-04-11 09:48 by benjk -
Changed lines 23-25 from:
to:

CONST [INTEGER] usesTwosComplement = TRUE; (* experimental *)

Changed line 73 from:

CONST stdINT = TRUE; (* two's complement representation *)

to:

CONST stdINT = TRUE; (* experimental *)

2010-04-11 09:24 by benjk -
Changed line 71 from:

CONST usesSBR = TRUE; (* standard binary representation *)

to:

CONST stdINT = TRUE; (* two's complement representation *)

2010-04-11 09:07 by benjk -
Changed line 71 from:

CONST usesTCR = TRUE; (* two's complement representation *)

to:

CONST usesSBR = TRUE; (* standard binary representation *)

2010-04-11 08:59 by benjk -
Changed line 69 from:

(* scalar conversion *)

to:

(* scalar conversion primitives *)

2010-04-11 08:58 by benjk -
Added lines 71-72:

CONST usesTCR = TRUE; (* two's complement representation *)

Deleted lines 73-74:

CONST usesTCR = TRUE; (* two's complement representation *)

2010-04-11 08:55 by benjk -
Added lines 72-73:

CONST usesTCR = TRUE; (* two's complement representation *)

2010-04-11 07:19 by benjk -
Changed lines 69-70 from:

(* conversion primitives *)

to:

(* scalar conversion *)

Changed lines 73-77 from:

PROCEDURE [TO] toNXF ( n : Sample INT?; VAR s : ARRAY OF CHAR ); (* convert a Sample INT? value to a string in numeric exchange format *)

PROCEDURE [FROM] fromNXF ( VAR n : Sample INT?; s : ARRAY OF CHAR ); (* convert a string in numeric exchange format to a Sample INT? value *)

to:

PROCEDURE [TO] toSXF ( n : Sample INT?; VAR s : ARRAY OF CHAR ); (* convert a Sample INT? value to a string in scalar exchange format *)

PROCEDURE [FROM] fromSXF ( VAR n : Sample INT?; s : ARRAY OF CHAR ); (* convert a string in scalar exchange format to a Sample INT? value *)

2010-04-11 07:09 by benjk -
Changed lines 74-75 from:

(* convert Sample INT? value to string in numeric exchange format *)

to:

(* convert a Sample INT? value to a string in numeric exchange format *)

Changed line 77 from:

(* convert string in numeric exchange format to Sample INT? value *)

to:

(* convert a string in numeric exchange format to a Sample INT? value *)

2010-04-11 07:00 by benjk -
Changed lines 31-44 from:

PROCEDURE [::] toCARD ( a : Sample INT? ) : CARDINAL;

PROCEDURE [::] toINT ( a : Sample INT? ) : INTEGER;

PROCEDURE [::] toREAL ( a : Sample INT? ) : REAL;

(* conversion primitives *)

PROCEDURE [TO] toSerialized ( value : Sample INT?; VAR serialized : ARRAY OF CHAR );

PROCEDURE [FROM] fromSerialized ( VAR value : Sample INT?; serialized : ARRAY OF CHAR );

to:

PROCEDURE [::] toCARD ( n : Sample INT? ) : CARDINAL;

PROCEDURE [::] toINT ( n : Sample INT? ) : INTEGER;

PROCEDURE [::] toREAL ( n : Sample INT? ) : REAL;

Changed lines 40-46 from:

PROCEDURE [ABS] abs ( a : Sample INT? ) : Sample INT?;

PROCEDURE [NEG] neg ( a : Sample INT? ) : BOOLEAN;

PROCEDURE [ODD] odd ( a : Sample INT? ) : BOOLEAN;

to:

PROCEDURE [ABS] abs ( n : Sample INT? ) : Sample INT?;

PROCEDURE [NEG] neg ( n : Sample INT? ) : BOOLEAN;

PROCEDURE [ODD] odd ( n : Sample INT? ) : BOOLEAN;

Changed lines 49-59 from:

PROCEDURE [+] add ( a, b : Sample INT? ) : Sample INT?;

PROCEDURE [-] sub ( a, b : Sample INT? ) : Sample INT?;

PROCEDURE [*] multiply ( a, b : Sample INT? ) : Sample INT?;

PROCEDURE [DIV] divide ( a, b : Sample INT? ) : Sample INT?;

PROCEDURE [MOD] modulo ( a, b : Sample INT? ) : Sample INT?;

to:

PROCEDURE [+] add ( n, m : Sample INT? ) : Sample INT?;

PROCEDURE [-] sub ( n, m : Sample INT? ) : Sample INT?;

PROCEDURE [*] multiply ( n, m : Sample INT? ) : Sample INT?;

PROCEDURE [DIV] divide ( n, m : Sample INT? ) : Sample INT?;

PROCEDURE [MOD] modulo ( n, m : Sample INT? ) : Sample INT?;

Changed lines 62-66 from:

PROCEDURE [=] isEqual ( a, b : Sample INT? ) : BOOLEAN;

PROCEDURE [<] isLess ( a, b : Sample INT? ) : BOOLEAN;

PROCEDURE [>] isGreater ( a, b : Sample INT? ) : BOOLEAN;

to:

PROCEDURE [=] isEqual ( n, m : Sample INT? ) : BOOLEAN;

PROCEDURE [<] isLess ( n, m : Sample INT? ) : BOOLEAN;

PROCEDURE [>] isGreater ( n, m : Sample INT? ) : BOOLEAN;

(* conversion primitives *)

CONST digitCapacity = 4; (* total digits in native radix *)

PROCEDURE [TO] toNXF ( n : Sample INT?; VAR s : ARRAY OF CHAR ); (* convert Sample INT? value to string in numeric exchange format *)

PROCEDURE [FROM] fromNXF ( VAR n : Sample INT?; s : ARRAY OF CHAR ); (* convert string in numeric exchange format to Sample INT? value *)

2010-04-10 15:59 by benjk -
Changed lines 40-47 from:

PROCEDURE [TO] toASCII ( value : Sample INT?;

                         VAR isDecimal : BOOLEAN;
                         VAR mantissa  : ARRAY OF CHAR;
                         VAR exponent  : ARRAY OF CHAR );

PROCEDURE [FROM] fromASCII ( isDecimal : BOOLEAN;

                             mantissa  : ARRAY OF CHAR;
                             exponent  : ARRAY OF CHAR ) : Sample INT?;
to:

PROCEDURE [TO] toSerialized ( value : Sample INT?; VAR serialized : ARRAY OF CHAR );

PROCEDURE [FROM] fromSerialized ( VAR value : Sample INT?; serialized : ARRAY OF CHAR );

2010-04-06 17:14 by benjk -
Changed line 69 from:

PROCEDURE [MOD] divide ( a, b : Sample INT? ) : Sample INT?;

to:

PROCEDURE [MOD] modulo ( a, b : Sample INT? ) : Sample INT?;

2010-04-06 17:14 by benjk -
Deleted lines 16-20:

(* number type *)

CONST [TYPE] semanticModel = 'Z'; (* obsolete *)

Added lines 36-47:

(* conversion primitives *)

PROCEDURE [TO] toASCII ( value : Sample INT?;

                         VAR isDecimal : BOOLEAN;
                         VAR mantissa  : ARRAY OF CHAR;
                         VAR exponent  : ARRAY OF CHAR );

PROCEDURE [FROM] fromASCII ( isDecimal : BOOLEAN;

                             mantissa  : ARRAY OF CHAR;
                             exponent  : ARRAY OF CHAR ) : Sample INT?;
2010-04-05 12:21 by benjk -
Changed line 12 from:
    Sample INT? = OPAQUE RECORD
to:
    Sample INT? = OPAQUE RECORD ("Z-Type")
Changed line 19 from:

CONST [TYPE] semanticModel = 'Z';

to:

CONST [TYPE] semanticModel = 'Z'; (* obsolete *)

2010-04-04 09:45 by benjk -
Added lines 1-91:
DEFINITION MODULE SampleINT;

(* Sample definition of a signed integer type *) 


FROM FileIO IMPORT File; (* required for IO *)


(* SampleINT type *)

TYPE
    SampleINT = OPAQUE RECORD
        value : ARRAY 2 OF OCTET; (* 16 bits *)
    END; 


(* number type *)

CONST [TYPE] semanticModel = 'Z';


(* range *) 

CONST [TMIN] minValue = -32768; 

CONST [TMAX] maxValue = 32767;


(* assignment *)

PROCEDURE [:=] assign ( VAR assignTo : SampleINT; literal : ARRAY OF CHAR ); 


(* type conversions *)

PROCEDURE [::] toCARD  ( a : SampleINT ) : CARDINAL; 

PROCEDURE [::] toINT ( a : SampleINT ) : INTEGER; 

PROCEDURE [::] toREAL ( a : SampleINT ) : REAL;


(* monadic arithmetic operations *) 

PROCEDURE [ABS] abs ( a : SampleINT ) : SampleINT; 

PROCEDURE [NEG] neg ( a : SampleINT ) : BOOLEAN; 

PROCEDURE [ODD] odd ( a : SampleINT ) : BOOLEAN; 


(* dyadic arithmetic operations *) 

PROCEDURE [+] add ( a, b : SampleINT ) : SampleINT; 

PROCEDURE [-] sub ( a, b : SampleINT ) : SampleINT; 

PROCEDURE [*] multiply ( a, b : SampleINT ) : SampleINT; 

PROCEDURE [DIV] divide ( a, b : SampleINT ) : SampleINT; 

PROCEDURE [MOD] divide ( a, b : SampleINT ) : SampleINT; 


(* relational operations *) 

PROCEDURE [=] isEqual ( a, b : SampleINT ) : BOOLEAN; 

PROCEDURE [<] isLess ( a, b : SampleINT ) : BOOLEAN; 

PROCEDURE [>] isGreater ( a, b : SampleINT ) : BOOLEAN; 


(* IO operations, bound to READ, WRITE and WRITEF *)

PROCEDURE Read( infile : File; VAR b : SampleINT );
(* Reads the textual representation of a SampleINT value in simple format from input stream infile
   - any leading whitespace is skipped
   - any remaining characters that are part of the numeral being read are removed from infile
   - the numeric value of the numeral string read is assigned to the variable passed in for b
   - the file status is set to any of success, outOfRange, wrongFormat, endOfLine, or endOfInput *)

PROCEDURE Write( outfile : File; b : SampleINT );
(* Writes the textual representation of value b in simple format to output stream outfile *)

PROCEDURE WriteF( outfile : File; fmtStr : ARRAY OF CHAR;
                  items : CARDINAL; VARIADIC v[items] OF b : SampleINT );
(* Writes a formatted textual representation of one or more SampleINT values to output stream outfile. The
   value of parameter items is calculated and inserted automatically. The output format is determined by fmtStr. *)

END SampleINT.