Lay-out changes and made IMPORTS more specific
This commit is contained in:
parent
ac83fe3815
commit
3a715f5479
|
@ -10,7 +10,7 @@ IMPLEMENTATION MODULE ArraySort;
|
||||||
Author: Ceriel J.H. Jacobs
|
Author: Ceriel J.H. Jacobs
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
FROM SYSTEM IMPORT ADDRESS, BYTE; (* no generics in Modula-2, sorry *)
|
FROM SYSTEM IMPORT ADDRESS, BYTE; (* no generics in Modula-2, sorry *)
|
||||||
|
|
||||||
TYPE BytePtr = POINTER TO BYTE;
|
TYPE BytePtr = POINTER TO BYTE;
|
||||||
|
|
||||||
|
@ -153,4 +153,3 @@ IMPLEMENTATION MODULE ArraySort;
|
||||||
END threewayexchange;
|
END threewayexchange;
|
||||||
|
|
||||||
END ArraySort.
|
END ArraySort.
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ IMPLEMENTATION MODULE CSP;
|
||||||
FROM random IMPORT Uniform;
|
FROM random IMPORT Uniform;
|
||||||
FROM SYSTEM IMPORT BYTE, ADDRESS, NEWPROCESS, TRANSFER;
|
FROM SYSTEM IMPORT BYTE, ADDRESS, NEWPROCESS, TRANSFER;
|
||||||
FROM Storage IMPORT Allocate, Deallocate;
|
FROM Storage IMPORT Allocate, Deallocate;
|
||||||
IMPORT Traps;
|
FROM Traps IMPORT Message;
|
||||||
|
|
||||||
CONST WorkSpaceSize = 1000;
|
CONST WorkSpaceSize = 1000;
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ IMPLEMENTATION MODULE CSP;
|
||||||
BEGIN
|
BEGIN
|
||||||
WITH ch^ DO
|
WITH ch^ DO
|
||||||
IF owner # NIL THEN
|
IF owner # NIL THEN
|
||||||
Traps.Message("Channel already has an owner");
|
Message("Channel already has an owner");
|
||||||
HALT
|
HALT
|
||||||
END;
|
END;
|
||||||
owner := cp
|
owner := cp
|
||||||
|
@ -251,7 +251,7 @@ IMPLEMENTATION MODULE CSP;
|
||||||
BEGIN
|
BEGIN
|
||||||
WITH ch^ DO
|
WITH ch^ DO
|
||||||
IF cp # owner THEN
|
IF cp # owner THEN
|
||||||
Traps.Message("Only owner of channel can receive from it");
|
Message("Only owner of channel can receive from it");
|
||||||
HALT
|
HALT
|
||||||
END;
|
END;
|
||||||
IF Sending(ch) THEN
|
IF Sending(ch) THEN
|
||||||
|
|
|
@ -11,9 +11,11 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
IMPORT Streams;
|
IMPORT Streams;
|
||||||
IMPORT Conversions;
|
FROM Conversions IMPORT
|
||||||
IMPORT Traps;
|
ConvertCardinal, ConvertInteger,
|
||||||
|
ConvertOctal, ConvertHex;
|
||||||
|
FROM Traps IMPORT Message;
|
||||||
|
|
||||||
CONST TAB = 11C;
|
CONST TAB = 11C;
|
||||||
|
|
||||||
|
@ -190,7 +192,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
IF (int > SAFELIMITDIV10) OR
|
IF (int > SAFELIMITDIV10) OR
|
||||||
( (int = SAFELIMITDIV10) AND
|
( (int = SAFELIMITDIV10) AND
|
||||||
(chvalue > safedigit)) THEN
|
(chvalue > safedigit)) THEN
|
||||||
Traps.Message("integer too large");
|
Message("integer too large");
|
||||||
HALT;
|
HALT;
|
||||||
ELSE
|
ELSE
|
||||||
int := 10*int + VAL(INTEGER, chvalue);
|
int := 10*int + VAL(INTEGER, chvalue);
|
||||||
|
@ -203,7 +205,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
integ := int
|
integ := int
|
||||||
END;
|
END;
|
||||||
IF buf[index] > " " THEN
|
IF buf[index] > " " THEN
|
||||||
Traps.Message("illegal integer");
|
Message("illegal integer");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
Done := TRUE;
|
Done := TRUE;
|
||||||
|
@ -235,7 +237,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
IF (int > SAFELIMITDIV10) OR
|
IF (int > SAFELIMITDIV10) OR
|
||||||
( (int = SAFELIMITDIV10) AND
|
( (int = SAFELIMITDIV10) AND
|
||||||
(chvalue > safedigit)) THEN
|
(chvalue > safedigit)) THEN
|
||||||
Traps.Message("cardinal too large");
|
Message("cardinal too large");
|
||||||
HALT;
|
HALT;
|
||||||
ELSE
|
ELSE
|
||||||
int := 10*int + chvalue;
|
int := 10*int + chvalue;
|
||||||
|
@ -243,7 +245,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
IF buf[index] > " " THEN
|
IF buf[index] > " " THEN
|
||||||
Traps.Message("illegal cardinal");
|
Message("illegal cardinal");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
card := int;
|
card := int;
|
||||||
|
@ -318,7 +320,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
VAR
|
VAR
|
||||||
buf : numbuf;
|
buf : numbuf;
|
||||||
BEGIN
|
BEGIN
|
||||||
Conversions.ConvertCardinal(card, width, buf);
|
ConvertCardinal(card, width, buf);
|
||||||
WriteString(buf);
|
WriteString(buf);
|
||||||
END WriteCard;
|
END WriteCard;
|
||||||
|
|
||||||
|
@ -326,7 +328,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
VAR
|
VAR
|
||||||
buf : numbuf;
|
buf : numbuf;
|
||||||
BEGIN
|
BEGIN
|
||||||
Conversions.ConvertInteger(int, width, buf);
|
ConvertInteger(int, width, buf);
|
||||||
WriteString(buf);
|
WriteString(buf);
|
||||||
END WriteInt;
|
END WriteInt;
|
||||||
|
|
||||||
|
@ -334,7 +336,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
VAR
|
VAR
|
||||||
buf : numbuf;
|
buf : numbuf;
|
||||||
BEGIN
|
BEGIN
|
||||||
Conversions.ConvertHex(card, width, buf);
|
ConvertHex(card, width, buf);
|
||||||
WriteString(buf);
|
WriteString(buf);
|
||||||
END WriteHex;
|
END WriteHex;
|
||||||
|
|
||||||
|
@ -347,7 +349,7 @@ IMPLEMENTATION MODULE InOut ;
|
||||||
VAR
|
VAR
|
||||||
buf : numbuf;
|
buf : numbuf;
|
||||||
BEGIN
|
BEGIN
|
||||||
Conversions.ConvertOctal(card, width, buf);
|
ConvertOctal(card, width, buf);
|
||||||
WriteString(buf);
|
WriteString(buf);
|
||||||
END WriteOct;
|
END WriteOct;
|
||||||
|
|
||||||
|
|
|
@ -11,41 +11,41 @@ IMPLEMENTATION MODULE MathLib0;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
IMPORT Mathlib;
|
IMPORT Mathlib;
|
||||||
|
|
||||||
PROCEDURE cos(arg: REAL): REAL;
|
PROCEDURE cos(arg: REAL): REAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN Mathlib.cos(arg);
|
RETURN Mathlib.cos(arg);
|
||||||
END cos;
|
END cos;
|
||||||
|
|
||||||
PROCEDURE sin(arg: REAL): REAL;
|
PROCEDURE sin(arg: REAL): REAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN Mathlib.sin(arg);
|
RETURN Mathlib.sin(arg);
|
||||||
END sin;
|
END sin;
|
||||||
|
|
||||||
PROCEDURE arctan(arg: REAL): REAL;
|
PROCEDURE arctan(arg: REAL): REAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN Mathlib.arctan(arg);
|
RETURN Mathlib.arctan(arg);
|
||||||
END arctan;
|
END arctan;
|
||||||
|
|
||||||
PROCEDURE sqrt(arg: REAL): REAL;
|
PROCEDURE sqrt(arg: REAL): REAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN Mathlib.sqrt(arg);
|
RETURN Mathlib.sqrt(arg);
|
||||||
END sqrt;
|
END sqrt;
|
||||||
|
|
||||||
PROCEDURE ln(arg: REAL): REAL;
|
PROCEDURE ln(arg: REAL): REAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN Mathlib.ln(arg);
|
RETURN Mathlib.ln(arg);
|
||||||
END ln;
|
END ln;
|
||||||
|
|
||||||
PROCEDURE exp(arg: REAL): REAL;
|
PROCEDURE exp(arg: REAL): REAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN Mathlib.exp(arg);
|
RETURN Mathlib.exp(arg);
|
||||||
END exp;
|
END exp;
|
||||||
|
|
||||||
PROCEDURE entier(x: REAL): INTEGER;
|
PROCEDURE entier(x: REAL): INTEGER;
|
||||||
VAR i: INTEGER;
|
VAR i: INTEGER;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF x < 0.0 THEN
|
IF x < 0.0 THEN
|
||||||
i := TRUNC(-x);
|
i := TRUNC(-x);
|
||||||
IF FLOAT(i) = -x THEN
|
IF FLOAT(i) = -x THEN
|
||||||
|
@ -55,15 +55,15 @@ BEGIN
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
RETURN TRUNC(x);
|
RETURN TRUNC(x);
|
||||||
END entier;
|
END entier;
|
||||||
|
|
||||||
PROCEDURE real(x: INTEGER): REAL;
|
PROCEDURE real(x: INTEGER): REAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF x < 0 THEN
|
IF x < 0 THEN
|
||||||
RETURN - FLOAT(-x);
|
RETURN - FLOAT(-x);
|
||||||
END;
|
END;
|
||||||
RETURN FLOAT(x);
|
RETURN FLOAT(x);
|
||||||
END real;
|
END real;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
END MathLib0.
|
END MathLib0.
|
||||||
|
|
|
@ -11,8 +11,8 @@ IMPLEMENTATION MODULE Mathlib;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
FROM EM IMPORT FIF, FEF;
|
FROM EM IMPORT FIF, FEF;
|
||||||
FROM Traps IMPORT Message;
|
FROM Traps IMPORT Message;
|
||||||
|
|
||||||
CONST
|
CONST
|
||||||
OneRadianInDegrees = 57.295779513082320876798155D;
|
OneRadianInDegrees = 57.295779513082320876798155D;
|
||||||
|
|
|
@ -11,14 +11,16 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
IMPORT Conversions;
|
FROM Conversions IMPORT
|
||||||
IMPORT Traps;
|
ConvertInteger, ConvertCardinal;
|
||||||
IMPORT RealConversions;
|
FROM RealConversions IMPORT
|
||||||
FROM Streams IMPORT Stream, StreamKind, StreamMode, StreamResult,
|
LongRealToString, StringToLongReal;
|
||||||
InputStream, OutputStream, OpenStream, CloseStream,
|
FROM Traps IMPORT Message;
|
||||||
EndOfStream, Read, Write, StreamBuffering;
|
FROM Streams IMPORT Stream, StreamKind, StreamMode, StreamResult,
|
||||||
FROM Storage IMPORT Allocate;
|
InputStream, OutputStream, OpenStream, CloseStream,
|
||||||
FROM SYSTEM IMPORT ADR;
|
EndOfStream, Read, Write, StreamBuffering;
|
||||||
|
FROM Storage IMPORT Allocate;
|
||||||
|
FROM SYSTEM IMPORT ADR;
|
||||||
|
|
||||||
TYPE charset = SET OF CHAR;
|
TYPE charset = SET OF CHAR;
|
||||||
btype = (Preading, Pwriting, free);
|
btype = (Preading, Pwriting, free);
|
||||||
|
@ -46,7 +48,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
WITH InputText^ DO
|
WITH InputText^ DO
|
||||||
OpenStream(stream, Filename, text, reading, result);
|
OpenStream(stream, Filename, text, reading, result);
|
||||||
IF result # succeeded THEN
|
IF result # succeeded THEN
|
||||||
Traps.Message("could not open input file");
|
Message("could not open input file");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
type := Preading;
|
type := Preading;
|
||||||
|
@ -62,7 +64,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
WITH OutputText^ DO
|
WITH OutputText^ DO
|
||||||
OpenStream(stream, Filename, text, writing, result);
|
OpenStream(stream, Filename, text, writing, result);
|
||||||
IF result # succeeded THEN
|
IF result # succeeded THEN
|
||||||
Traps.Message("could not open output file");
|
Message("could not open output file");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
type := Pwriting;
|
type := Pwriting;
|
||||||
|
@ -107,9 +109,9 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
PROCEDURE Error(tp: btype);
|
PROCEDURE Error(tp: btype);
|
||||||
BEGIN
|
BEGIN
|
||||||
IF tp = Preading THEN
|
IF tp = Preading THEN
|
||||||
Traps.Message("input text expected");
|
Message("input text expected");
|
||||||
ELSE
|
ELSE
|
||||||
Traps.Message("output text expected");
|
Message("output text expected");
|
||||||
END;
|
END;
|
||||||
HALT;
|
HALT;
|
||||||
END Error;
|
END Error;
|
||||||
|
@ -118,7 +120,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
BEGIN
|
BEGIN
|
||||||
ch := NextChar(InputText);
|
ch := NextChar(InputText);
|
||||||
IF InputText^.eof THEN
|
IF InputText^.eof THEN
|
||||||
Traps.Message("unexpected EOF");
|
Message("unexpected EOF");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
InputText^.done := FALSE;
|
InputText^.done := FALSE;
|
||||||
|
@ -218,7 +220,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
IF (int < -SAFELIMITDIV10) OR
|
IF (int < -SAFELIMITDIV10) OR
|
||||||
( (int = -SAFELIMITDIV10) AND
|
( (int = -SAFELIMITDIV10) AND
|
||||||
(chvalue > safedigit)) THEN
|
(chvalue > safedigit)) THEN
|
||||||
Traps.Message("integer too large");
|
Message("integer too large");
|
||||||
HALT;
|
HALT;
|
||||||
ELSE
|
ELSE
|
||||||
int := 10*int - VAL(INTEGER, chvalue);
|
int := 10*int - VAL(INTEGER, chvalue);
|
||||||
|
@ -230,7 +232,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
int := -int
|
int := -int
|
||||||
END;
|
END;
|
||||||
ELSE
|
ELSE
|
||||||
Traps.Message("integer expected");
|
Message("integer expected");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
END ReadInteger;
|
END ReadInteger;
|
||||||
|
@ -257,7 +259,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
IF (card > SAFELIMITDIV10) OR
|
IF (card > SAFELIMITDIV10) OR
|
||||||
( (card = SAFELIMITDIV10) AND
|
( (card = SAFELIMITDIV10) AND
|
||||||
(chvalue > safedigit)) THEN
|
(chvalue > safedigit)) THEN
|
||||||
Traps.Message("cardinal too large");
|
Message("cardinal too large");
|
||||||
HALT;
|
HALT;
|
||||||
ELSE
|
ELSE
|
||||||
card := 10*card + chvalue;
|
card := 10*card + chvalue;
|
||||||
|
@ -266,7 +268,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
ELSE
|
ELSE
|
||||||
Traps.Message("cardinal expected");
|
Message("cardinal expected");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
END ReadCardinal;
|
END ReadCardinal;
|
||||||
|
@ -335,10 +337,10 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
END;
|
END;
|
||||||
IF ok THEN
|
IF ok THEN
|
||||||
buf[index] := 0C;
|
buf[index] := 0C;
|
||||||
RealConversions.StringToLongReal(buf, real, ok);
|
StringToLongReal(buf, real, ok);
|
||||||
END;
|
END;
|
||||||
IF NOT ok THEN
|
IF NOT ok THEN
|
||||||
Traps.Message("Illegal real");
|
Message("Illegal real");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
END ReadLongReal;
|
END ReadLongReal;
|
||||||
|
@ -347,7 +349,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
VAR
|
VAR
|
||||||
buf : numbuf;
|
buf : numbuf;
|
||||||
BEGIN
|
BEGIN
|
||||||
Conversions.ConvertCardinal(card, 1, buf);
|
ConvertCardinal(card, 1, buf);
|
||||||
WriteString(OutputText, buf, width);
|
WriteString(OutputText, buf, width);
|
||||||
END WriteCardinal;
|
END WriteCardinal;
|
||||||
|
|
||||||
|
@ -355,7 +357,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
VAR
|
VAR
|
||||||
buf : numbuf;
|
buf : numbuf;
|
||||||
BEGIN
|
BEGIN
|
||||||
Conversions.ConvertInteger(int, 1, buf);
|
ConvertInteger(int, 1, buf);
|
||||||
WriteString(OutputText, buf, width);
|
WriteString(OutputText, buf, width);
|
||||||
END WriteInteger;
|
END WriteInteger;
|
||||||
|
|
||||||
|
@ -383,7 +385,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
width := SIZE(buf);
|
width := SIZE(buf);
|
||||||
END;
|
END;
|
||||||
IF nfrac > 0 THEN
|
IF nfrac > 0 THEN
|
||||||
RealConversions.LongRealToString(real, width, nfrac, buf, ok);
|
LongRealToString(real, width, nfrac, buf, ok);
|
||||||
ELSE
|
ELSE
|
||||||
IF width < 9 THEN width := 9; END;
|
IF width < 9 THEN width := 9; END;
|
||||||
IF real < 0.0D THEN
|
IF real < 0.0D THEN
|
||||||
|
@ -391,7 +393,7 @@ IMPLEMENTATION MODULE PascalIO;
|
||||||
ELSE
|
ELSE
|
||||||
digits := 6 - INTEGER(width);
|
digits := 6 - INTEGER(width);
|
||||||
END;
|
END;
|
||||||
RealConversions.LongRealToString(real, width, digits, buf, ok);
|
LongRealToString(real, width, digits, buf, ok);
|
||||||
END;
|
END;
|
||||||
WriteString(OutputText, buf, 0);
|
WriteString(OutputText, buf, 0);
|
||||||
END WriteLongReal;
|
END WriteLongReal;
|
||||||
|
|
|
@ -6,11 +6,9 @@ IMPLEMENTATION MODULE Processes [1];
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
FROM SYSTEM IMPORT ADDRESS, TSIZE, NEWPROCESS, TRANSFER;
|
FROM SYSTEM IMPORT ADDRESS, TSIZE, NEWPROCESS, TRANSFER;
|
||||||
|
FROM Storage IMPORT Allocate;
|
||||||
FROM Storage IMPORT Allocate;
|
FROM Traps IMPORT Message;
|
||||||
|
|
||||||
FROM Traps IMPORT Message;
|
|
||||||
|
|
||||||
TYPE SIGNAL = POINTER TO ProcessDescriptor;
|
TYPE SIGNAL = POINTER TO ProcessDescriptor;
|
||||||
|
|
||||||
|
|
|
@ -11,10 +11,11 @@ IMPLEMENTATION MODULE RealInOut;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
IMPORT InOut;
|
FROM InOut IMPORT ReadString, WriteString, WriteOct;
|
||||||
IMPORT RealConversions;
|
FROM Traps IMPORT Message;
|
||||||
IMPORT Traps;
|
FROM SYSTEM IMPORT WORD;
|
||||||
FROM SYSTEM IMPORT WORD;
|
FROM RealConversions IMPORT
|
||||||
|
LongRealToString, StringToLongReal;
|
||||||
|
|
||||||
CONST MAXNDIG = 32;
|
CONST MAXNDIG = 32;
|
||||||
MAXWIDTH = MAXNDIG+7;
|
MAXWIDTH = MAXNDIG+7;
|
||||||
|
@ -32,8 +33,8 @@ IMPLEMENTATION MODULE RealInOut;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF ndigits > MAXWIDTH THEN ndigits := MAXWIDTH; END;
|
IF ndigits > MAXWIDTH THEN ndigits := MAXWIDTH; END;
|
||||||
IF ndigits < 10 THEN ndigits := 10; END;
|
IF ndigits < 10 THEN ndigits := 10; END;
|
||||||
RealConversions.LongRealToString(arg, ndigits, -INTEGER(ndigits - 7), buf, ok);
|
LongRealToString(arg, ndigits, -INTEGER(ndigits - 7), buf, ok);
|
||||||
InOut.WriteString(buf);
|
WriteString(buf);
|
||||||
END WriteLongReal;
|
END WriteLongReal;
|
||||||
|
|
||||||
PROCEDURE WriteFixPt(arg: REAL; n, k: CARDINAL);
|
PROCEDURE WriteFixPt(arg: REAL; n, k: CARDINAL);
|
||||||
|
@ -47,8 +48,8 @@ IMPLEMENTATION MODULE RealInOut;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
IF n > MAXWIDTH THEN n := MAXWIDTH END;
|
IF n > MAXWIDTH THEN n := MAXWIDTH END;
|
||||||
RealConversions.LongRealToString(arg, n, k, buf, ok);
|
LongRealToString(arg, n, k, buf, ok);
|
||||||
InOut.WriteString(buf);
|
WriteString(buf);
|
||||||
END WriteLongFixPt;
|
END WriteLongFixPt;
|
||||||
|
|
||||||
PROCEDURE ReadReal(VAR x: REAL);
|
PROCEDURE ReadReal(VAR x: REAL);
|
||||||
|
@ -63,10 +64,10 @@ IMPLEMENTATION MODULE RealInOut;
|
||||||
ok: BOOLEAN;
|
ok: BOOLEAN;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
InOut.ReadString(Buf);
|
ReadString(Buf);
|
||||||
RealConversions.StringToLongReal(Buf, x, ok);
|
StringToLongReal(Buf, x, ok);
|
||||||
IF NOT ok THEN
|
IF NOT ok THEN
|
||||||
Traps.Message("real expected");
|
Message("real expected");
|
||||||
HALT;
|
HALT;
|
||||||
END;
|
END;
|
||||||
Done := TRUE;
|
Done := TRUE;
|
||||||
|
@ -76,8 +77,8 @@ IMPLEMENTATION MODULE RealInOut;
|
||||||
VAR i: CARDINAL;
|
VAR i: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR i := 0 TO HIGH(x) DO
|
FOR i := 0 TO HIGH(x) DO
|
||||||
InOut.WriteOct(CARDINAL(x[i]), 0);
|
WriteOct(CARDINAL(x[i]), 0);
|
||||||
InOut.WriteString(" ");
|
WriteString(" ");
|
||||||
END;
|
END;
|
||||||
END wroct;
|
END wroct;
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,10 @@ IMPLEMENTATION MODULE Semaphores [1];
|
||||||
Quasi-concurrency implementation
|
Quasi-concurrency implementation
|
||||||
*)
|
*)
|
||||||
|
|
||||||
FROM SYSTEM IMPORT ADDRESS, NEWPROCESS, TRANSFER;
|
FROM SYSTEM IMPORT ADDRESS, NEWPROCESS, TRANSFER;
|
||||||
FROM Storage IMPORT Allocate;
|
FROM Storage IMPORT Allocate;
|
||||||
FROM random IMPORT Uniform;
|
FROM random IMPORT Uniform;
|
||||||
FROM Traps IMPORT Message;
|
FROM Traps IMPORT Message;
|
||||||
|
|
||||||
TYPE Sema = POINTER TO Semaphore;
|
TYPE Sema = POINTER TO Semaphore;
|
||||||
Processes = POINTER TO Process;
|
Processes = POINTER TO Process;
|
||||||
|
|
|
@ -15,9 +15,9 @@ IMPLEMENTATION MODULE Storage;
|
||||||
same size. Commonly used sizes have their own bucket. The larger ones
|
same size. Commonly used sizes have their own bucket. The larger ones
|
||||||
are put in a single list.
|
are put in a single list.
|
||||||
*)
|
*)
|
||||||
FROM Unix IMPORT sbrk, ILLBREAK;
|
FROM Unix IMPORT sbrk, ILLBREAK;
|
||||||
FROM SYSTEM IMPORT ADDRESS, ADR;
|
FROM SYSTEM IMPORT ADDRESS, ADR;
|
||||||
FROM Traps IMPORT Message;
|
FROM Traps IMPORT Message;
|
||||||
|
|
||||||
CONST
|
CONST
|
||||||
NLISTS = 20;
|
NLISTS = 20;
|
||||||
|
|
|
@ -14,8 +14,11 @@ IMPLEMENTATION MODULE Streams;
|
||||||
Implementation for Unix
|
Implementation for Unix
|
||||||
*)
|
*)
|
||||||
|
|
||||||
FROM SYSTEM IMPORT BYTE, ADR;
|
FROM SYSTEM IMPORT BYTE, ADR;
|
||||||
IMPORT StripUnix, Storage, Epilogue;
|
FROM Epilogue IMPORT CallAtEnd;
|
||||||
|
FROM Storage IMPORT Allocate, Available;
|
||||||
|
FROM StripUnix IMPORT
|
||||||
|
open, close, lseek, read, write, creat, ioctl;
|
||||||
|
|
||||||
CONST BUFSIZ = 1024; (* tunable *)
|
CONST BUFSIZ = 1024; (* tunable *)
|
||||||
TYPE IOB = RECORD
|
TYPE IOB = RECORD
|
||||||
|
@ -41,10 +44,10 @@ IMPLEMENTATION MODULE Streams;
|
||||||
stream := stream^.next;
|
stream := stream^.next;
|
||||||
END;
|
END;
|
||||||
IF stream = NIL THEN
|
IF stream = NIL THEN
|
||||||
IF NOT Storage.Available(SIZE(IOB)) THEN
|
IF NOT Available(SIZE(IOB)) THEN
|
||||||
RETURN;
|
RETURN;
|
||||||
END;
|
END;
|
||||||
Storage.Allocate(stream,SIZE(IOB));
|
Allocate(stream,SIZE(IOB));
|
||||||
stream^.next := head;
|
stream^.next := head;
|
||||||
head := stream;
|
head := stream;
|
||||||
END;
|
END;
|
||||||
|
@ -79,17 +82,17 @@ IMPLEMENTATION MODULE Streams;
|
||||||
buf[HIGH(filename)+2] := BYTE(0C);
|
buf[HIGH(filename)+2] := BYTE(0C);
|
||||||
END;
|
END;
|
||||||
IF (mode = reading) THEN
|
IF (mode = reading) THEN
|
||||||
fd := StripUnix.open(ADR(stream^.buf), 0);
|
fd := open(ADR(stream^.buf), 0);
|
||||||
ELSE
|
ELSE
|
||||||
fd := -1;
|
fd := -1;
|
||||||
IF (mode = appending) THEN
|
IF (mode = appending) THEN
|
||||||
fd := StripUnix.open(ADR(stream^.buf), 1);
|
fd := open(ADR(stream^.buf), 1);
|
||||||
IF fd >= 0 THEN
|
IF fd >= 0 THEN
|
||||||
IF (StripUnix.lseek(fd, 0D , 2) < 0D) THEN ; END;
|
IF (lseek(fd, 0D , 2) < 0D) THEN ; END;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
IF fd < 0 THEN
|
IF fd < 0 THEN
|
||||||
fd := StripUnix.creat(ADR(stream^.buf), 666B);
|
fd := creat(ADR(stream^.buf), 666B);
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
IF fd < 0 THEN
|
IF fd < 0 THEN
|
||||||
|
@ -150,7 +153,7 @@ IMPLEMENTATION MODULE Streams;
|
||||||
IF (cnt > 0) THEN
|
IF (cnt > 0) THEN
|
||||||
cnt1 := cnt;
|
cnt1 := cnt;
|
||||||
cnt := 0;
|
cnt := 0;
|
||||||
IF StripUnix.write(fildes, ADR(buf), cnt1) < 0 THEN END;
|
IF write(fildes, ADR(buf), cnt1) < 0 THEN END;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
END FlushStream;
|
END FlushStream;
|
||||||
|
@ -162,7 +165,7 @@ IMPLEMENTATION MODULE Streams;
|
||||||
IF stream^.mode # reading THEN
|
IF stream^.mode # reading THEN
|
||||||
FlushStream(stream, result);
|
FlushStream(stream, result);
|
||||||
END;
|
END;
|
||||||
IF StripUnix.close(stream^.fildes) < 0 THEN ; END;
|
IF close(stream^.fildes) < 0 THEN ; END;
|
||||||
freestruct(stream);
|
freestruct(stream);
|
||||||
ELSE
|
ELSE
|
||||||
result := nostream;
|
result := nostream;
|
||||||
|
@ -209,7 +212,7 @@ IMPLEMENTATION MODULE Streams;
|
||||||
IF stream = InputStream THEN
|
IF stream = InputStream THEN
|
||||||
FlushLineBuffers();
|
FlushLineBuffers();
|
||||||
END;
|
END;
|
||||||
maxcnt := StripUnix.read(fildes, ADR(buf), bufferedcnt);
|
maxcnt := read(fildes, ADR(buf), bufferedcnt);
|
||||||
cnt := 1;
|
cnt := 1;
|
||||||
IF maxcnt <= 0 THEN
|
IF maxcnt <= 0 THEN
|
||||||
eof := TRUE;
|
eof := TRUE;
|
||||||
|
@ -332,7 +335,7 @@ IMPLEMENTATION MODULE Streams;
|
||||||
RETURN;
|
RETURN;
|
||||||
END;
|
END;
|
||||||
IF (s^.mode # reading) THEN FlushStream(s, result); END;
|
IF (s^.mode # reading) THEN FlushStream(s, result); END;
|
||||||
position := StripUnix.lseek(s^.fildes, 0D, 1);
|
position := lseek(s^.fildes, 0D, 1);
|
||||||
IF position < 0D THEN
|
IF position < 0D THEN
|
||||||
result := illegaloperation;
|
result := illegaloperation;
|
||||||
RETURN;
|
RETURN;
|
||||||
|
@ -357,7 +360,7 @@ IMPLEMENTATION MODULE Streams;
|
||||||
s^.eof := FALSE;
|
s^.eof := FALSE;
|
||||||
END;
|
END;
|
||||||
IF s^.mode = appending THEN
|
IF s^.mode = appending THEN
|
||||||
currpos := StripUnix.lseek(s^.fildes, 0D, 1);
|
currpos := lseek(s^.fildes, 0D, 1);
|
||||||
IF currpos < 0D THEN
|
IF currpos < 0D THEN
|
||||||
result := illegaloperation;
|
result := illegaloperation;
|
||||||
RETURN;
|
RETURN;
|
||||||
|
@ -367,7 +370,7 @@ IMPLEMENTATION MODULE Streams;
|
||||||
result := illegaloperation;
|
result := illegaloperation;
|
||||||
RETURN;
|
RETURN;
|
||||||
END;
|
END;
|
||||||
currpos := StripUnix.lseek(s^.fildes, position, 0);
|
currpos := lseek(s^.fildes, position, 0);
|
||||||
IF currpos < 0D THEN
|
IF currpos < 0D THEN
|
||||||
result := illegaloperation;
|
result := illegaloperation;
|
||||||
RETURN;
|
RETURN;
|
||||||
|
@ -383,12 +386,12 @@ IMPLEMENTATION MODULE Streams;
|
||||||
RETURN FALSE;
|
RETURN FALSE;
|
||||||
END;
|
END;
|
||||||
#ifdef __USG
|
#ifdef __USG
|
||||||
RETURN StripUnix.ioctl(stream^.fildes, INTEGER(ORD('T') * 256 + 1), ADR(buf)) >= 0;
|
RETURN ioctl(stream^.fildes, INTEGER(ORD('T') * 256 + 1), ADR(buf)) >= 0;
|
||||||
#else
|
#else
|
||||||
#ifdef __BSD4_2
|
#ifdef __BSD4_2
|
||||||
RETURN StripUnix.ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8 + 6*65536 + 40000000H), ADR(buf)) >= 0;
|
RETURN ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8 + 6*65536 + 40000000H), ADR(buf)) >= 0;
|
||||||
#else
|
#else
|
||||||
RETURN StripUnix.ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8), ADR(buf)) >= 0;
|
RETURN ioctl(stream^.fildes, INTEGER(ORD('t') * 256 + 8), ADR(buf)) >= 0;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
END isatty;
|
END isatty;
|
||||||
|
@ -440,7 +443,7 @@ IMPLEMENTATION MODULE Streams;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
head := InputStream;
|
head := InputStream;
|
||||||
IF Epilogue.CallAtEnd(EndIt) THEN ; END;
|
IF CallAtEnd(EndIt) THEN ; END;
|
||||||
END InitStreams;
|
END InitStreams;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -11,12 +11,12 @@ IMPLEMENTATION MODULE Strings;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
PROCEDURE Assign(source: ARRAY OF CHAR; VAR dest: ARRAY OF CHAR);
|
PROCEDURE Assign(source: ARRAY OF CHAR; VAR dest: ARRAY OF CHAR);
|
||||||
(* Assign string source to dest
|
(* Assign string source to dest
|
||||||
*)
|
*)
|
||||||
VAR i: CARDINAL;
|
VAR i: CARDINAL;
|
||||||
max: CARDINAL;
|
max: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
max := HIGH(source);
|
max := HIGH(source);
|
||||||
IF HIGH(dest) < max THEN max := HIGH(dest); END;
|
IF HIGH(dest) < max THEN max := HIGH(dest); END;
|
||||||
i := 0;
|
i := 0;
|
||||||
|
@ -25,15 +25,15 @@ BEGIN
|
||||||
INC(i);
|
INC(i);
|
||||||
END;
|
END;
|
||||||
IF i < HIGH(dest) THEN dest[i] := 0C; END;
|
IF i < HIGH(dest) THEN dest[i] := 0C; END;
|
||||||
END Assign;
|
END Assign;
|
||||||
|
|
||||||
PROCEDURE Insert(substr: ARRAY OF CHAR; VAR str: ARRAY OF CHAR; inx: CARDINAL);
|
PROCEDURE Insert(substr: ARRAY OF CHAR; VAR str: ARRAY OF CHAR; inx: CARDINAL);
|
||||||
(* Insert the string substr into str, starting at str[inx].
|
(* Insert the string substr into str, starting at str[inx].
|
||||||
If inx is equal to or greater than Length(str) then substr is appended
|
If inx is equal to or greater than Length(str) then substr is appended
|
||||||
to the end of str.
|
to the end of str.
|
||||||
*)
|
*)
|
||||||
VAR sublen, length, i: CARDINAL;
|
VAR sublen, length, i: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
sublen := Length(substr);
|
sublen := Length(substr);
|
||||||
IF sublen = 0 THEN RETURN; END;
|
IF sublen = 0 THEN RETURN; END;
|
||||||
length := Length(str);
|
length := Length(str);
|
||||||
|
@ -54,16 +54,16 @@ BEGIN
|
||||||
IF length + sublen <= HIGH(str) THEN
|
IF length + sublen <= HIGH(str) THEN
|
||||||
str[length + sublen] := 0C;
|
str[length + sublen] := 0C;
|
||||||
END;
|
END;
|
||||||
END Insert;
|
END Insert;
|
||||||
|
|
||||||
PROCEDURE Delete(VAR str: ARRAY OF CHAR; inx, len: CARDINAL);
|
PROCEDURE Delete(VAR str: ARRAY OF CHAR; inx, len: CARDINAL);
|
||||||
(* Delete len characters from str, starting at str[inx].
|
(* Delete len characters from str, starting at str[inx].
|
||||||
If inx >= Length(str) then nothing happens.
|
If inx >= Length(str) then nothing happens.
|
||||||
If there are not len characters to delete, characters to the end of the
|
If there are not len characters to delete, characters to the end of the
|
||||||
string are deleted.
|
string are deleted.
|
||||||
*)
|
*)
|
||||||
VAR length: CARDINAL;
|
VAR length: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF len = 0 THEN RETURN; END;
|
IF len = 0 THEN RETURN; END;
|
||||||
length := Length(str);
|
length := Length(str);
|
||||||
IF inx >= length THEN RETURN; END;
|
IF inx >= length THEN RETURN; END;
|
||||||
|
@ -72,14 +72,14 @@ BEGIN
|
||||||
INC(inx);
|
INC(inx);
|
||||||
END;
|
END;
|
||||||
str[inx] := 0C;
|
str[inx] := 0C;
|
||||||
END Delete;
|
END Delete;
|
||||||
|
|
||||||
PROCEDURE Pos(substr, str: ARRAY OF CHAR): CARDINAL;
|
PROCEDURE Pos(substr, str: ARRAY OF CHAR): CARDINAL;
|
||||||
(* Return the index into str of the first occurrence of substr.
|
(* Return the index into str of the first occurrence of substr.
|
||||||
Pos returns a value greater than HIGH(str) of no occurrence is found.
|
Pos returns a value greater than HIGH(str) of no occurrence is found.
|
||||||
*)
|
*)
|
||||||
VAR i, j, max, subl: CARDINAL;
|
VAR i, j, max, subl: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
max := Length(str);
|
max := Length(str);
|
||||||
subl := Length(substr);
|
subl := Length(substr);
|
||||||
IF subl > max THEN RETURN HIGH(str) + 1; END;
|
IF subl > max THEN RETURN HIGH(str) + 1; END;
|
||||||
|
@ -93,15 +93,15 @@ BEGIN
|
||||||
IF j = subl THEN RETURN i; END;
|
IF j = subl THEN RETURN i; END;
|
||||||
END;
|
END;
|
||||||
RETURN HIGH(str) + 1;
|
RETURN HIGH(str) + 1;
|
||||||
END Pos;
|
END Pos;
|
||||||
|
|
||||||
PROCEDURE Copy(str: ARRAY OF CHAR;
|
PROCEDURE Copy(str: ARRAY OF CHAR;
|
||||||
inx, len: CARDINAL;
|
inx, len: CARDINAL;
|
||||||
VAR result: ARRAY OF CHAR);
|
VAR result: ARRAY OF CHAR);
|
||||||
(* Copy at most len characters from str into result, starting at str[inx].
|
(* Copy at most len characters from str into result, starting at str[inx].
|
||||||
*)
|
*)
|
||||||
VAR i: CARDINAL;
|
VAR i: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF Length(str) <= inx THEN RETURN END;
|
IF Length(str) <= inx THEN RETURN END;
|
||||||
i := 0;
|
i := 0;
|
||||||
LOOP
|
LOOP
|
||||||
|
@ -112,13 +112,13 @@ BEGIN
|
||||||
INC(i); INC(inx); DEC(len);
|
INC(i); INC(inx); DEC(len);
|
||||||
END;
|
END;
|
||||||
IF i <= HIGH(result) THEN result[i] := 0C; END;
|
IF i <= HIGH(result) THEN result[i] := 0C; END;
|
||||||
END Copy;
|
END Copy;
|
||||||
|
|
||||||
PROCEDURE Concat(s1, s2: ARRAY OF CHAR; VAR result: ARRAY OF CHAR);
|
PROCEDURE Concat(s1, s2: ARRAY OF CHAR; VAR result: ARRAY OF CHAR);
|
||||||
(* Concatenate two strings.
|
(* Concatenate two strings.
|
||||||
*)
|
*)
|
||||||
VAR i, j: CARDINAL;
|
VAR i, j: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
i := 0;
|
i := 0;
|
||||||
WHILE (i <= HIGH(s1)) AND (s1[i] # 0C) DO
|
WHILE (i <= HIGH(s1)) AND (s1[i] # 0C) DO
|
||||||
IF i > HIGH(result) THEN RETURN END;
|
IF i > HIGH(result) THEN RETURN END;
|
||||||
|
@ -133,27 +133,27 @@ BEGIN
|
||||||
INC(j);
|
INC(j);
|
||||||
END;
|
END;
|
||||||
IF i <= HIGH(result) THEN result[i] := 0C; END;
|
IF i <= HIGH(result) THEN result[i] := 0C; END;
|
||||||
END Concat;
|
END Concat;
|
||||||
|
|
||||||
PROCEDURE Length(str: ARRAY OF CHAR): CARDINAL;
|
PROCEDURE Length(str: ARRAY OF CHAR): CARDINAL;
|
||||||
(* Return number of characters in str.
|
(* Return number of characters in str.
|
||||||
*)
|
*)
|
||||||
VAR i: CARDINAL;
|
VAR i: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
i := 0;
|
i := 0;
|
||||||
WHILE (i <= HIGH(str)) DO
|
WHILE (i <= HIGH(str)) DO
|
||||||
IF str[i] = 0C THEN RETURN i; END;
|
IF str[i] = 0C THEN RETURN i; END;
|
||||||
INC(i);
|
INC(i);
|
||||||
END;
|
END;
|
||||||
RETURN i;
|
RETURN i;
|
||||||
END Length;
|
END Length;
|
||||||
|
|
||||||
PROCEDURE CompareStr(s1, s2: ARRAY OF CHAR): INTEGER;
|
PROCEDURE CompareStr(s1, s2: ARRAY OF CHAR): INTEGER;
|
||||||
(* Compare two strings, return -1 if s1 < s2, 0 if s1 = s2, and 1 if s1 > s2.
|
(* Compare two strings, return -1 if s1 < s2, 0 if s1 = s2, and 1 if s1 > s2.
|
||||||
*)
|
*)
|
||||||
VAR i: CARDINAL;
|
VAR i: CARDINAL;
|
||||||
max: CARDINAL;
|
max: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
max := HIGH(s1);
|
max := HIGH(s1);
|
||||||
IF HIGH(s2) < max THEN max := HIGH(s2); END;
|
IF HIGH(s2) < max THEN max := HIGH(s2); END;
|
||||||
i := 0;
|
i := 0;
|
||||||
|
@ -166,6 +166,6 @@ BEGIN
|
||||||
IF (i <= HIGH(s1)) AND (s1[i] # 0C) THEN RETURN 1; END;
|
IF (i <= HIGH(s1)) AND (s1[i] # 0C) THEN RETURN 1; END;
|
||||||
IF (i <= HIGH(s2)) AND (s2[i] # 0C) THEN RETURN -1; END;
|
IF (i <= HIGH(s2)) AND (s2[i] # 0C) THEN RETURN -1; END;
|
||||||
RETURN 0;
|
RETURN 0;
|
||||||
END CompareStr;
|
END CompareStr;
|
||||||
|
|
||||||
END Strings.
|
END Strings.
|
||||||
|
|
|
@ -13,9 +13,10 @@
|
||||||
IMPLEMENTATION MODULE Termcap;
|
IMPLEMENTATION MODULE Termcap;
|
||||||
|
|
||||||
IMPORT XXTermcap;
|
IMPORT XXTermcap;
|
||||||
FROM SYSTEM IMPORT ADR, ADDRESS;
|
FROM SYSTEM IMPORT ADR, ADDRESS;
|
||||||
FROM Unix IMPORT gtty;
|
FROM Unix IMPORT gtty;
|
||||||
FROM Arguments IMPORT GetEnv;
|
FROM Arguments IMPORT
|
||||||
|
GetEnv;
|
||||||
|
|
||||||
TYPE STR = ARRAY[1..32] OF CHAR;
|
TYPE STR = ARRAY[1..32] OF CHAR;
|
||||||
STRCAP = POINTER TO STR;
|
STRCAP = POINTER TO STR;
|
||||||
|
|
|
@ -13,9 +13,12 @@ IMPLEMENTATION MODULE Terminal;
|
||||||
|
|
||||||
Implementation for Unix.
|
Implementation for Unix.
|
||||||
*)
|
*)
|
||||||
IMPORT Unix;
|
FROM SYSTEM IMPORT ADR;
|
||||||
FROM SYSTEM IMPORT ADR;
|
#ifdef __USG
|
||||||
|
FROM Unix IMPORT read, write, open, fcntl;
|
||||||
|
#else
|
||||||
|
FROM Unix IMPORT read, write, open, ioctl;
|
||||||
|
#endif
|
||||||
VAR fildes: INTEGER;
|
VAR fildes: INTEGER;
|
||||||
unreadch: CHAR;
|
unreadch: CHAR;
|
||||||
unread: BOOLEAN;
|
unread: BOOLEAN;
|
||||||
|
@ -27,7 +30,7 @@ IMPLEMENTATION MODULE Terminal;
|
||||||
ch := unreadch;
|
ch := unreadch;
|
||||||
unread := FALSE
|
unread := FALSE
|
||||||
ELSE
|
ELSE
|
||||||
IF Unix.read(fildes, ADR(ch), 1) < 0 THEN
|
IF read(fildes, ADR(ch), 1) < 0 THEN
|
||||||
;
|
;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
|
@ -42,25 +45,25 @@ IMPLEMENTATION MODULE Terminal;
|
||||||
unread := FALSE
|
unread := FALSE
|
||||||
ELSE
|
ELSE
|
||||||
#ifdef __USG
|
#ifdef __USG
|
||||||
l := Unix.fcntl(fildes, (*FGETFL*) 3, 0);
|
l := fcntl(fildes, (*FGETFL*) 3, 0);
|
||||||
IF Unix.fcntl(fildes,
|
IF fcntl(fildes,
|
||||||
(* FSETFL *) 4,
|
(* FSETFL *) 4,
|
||||||
l + (*ONDELAY*) 2) < 0 THEN
|
l + (*ONDELAY*) 2) < 0 THEN
|
||||||
;
|
;
|
||||||
END;
|
END;
|
||||||
IF Unix.read(fildes, ADR(ch), 1) = 0 THEN
|
IF read(fildes, ADR(ch), 1) = 0 THEN
|
||||||
ch := 0C;
|
ch := 0C;
|
||||||
ELSE
|
ELSE
|
||||||
unreadch := ch;
|
unreadch := ch;
|
||||||
END;
|
END;
|
||||||
IF Unix.fcntl(fildes, (*FSETFL*)4, l) < 0 THEN
|
IF fcntl(fildes, (*FSETFL*)4, l) < 0 THEN
|
||||||
;
|
;
|
||||||
END;
|
END;
|
||||||
#else
|
#else
|
||||||
#ifdef __BSD4_2
|
#ifdef __BSD4_2
|
||||||
IF Unix.ioctl(fildes, INTEGER(ORD('f')*256+127+4*65536+40000000H), ADR(l)) < 0 THEN
|
IF ioctl(fildes, INTEGER(ORD('f')*256+127+4*65536+40000000H), ADR(l)) < 0 THEN
|
||||||
#else
|
#else
|
||||||
IF Unix.ioctl(fildes, INTEGER(ORD('f')*256+127), ADR(l)) < 0 THEN
|
IF ioctl(fildes, INTEGER(ORD('f')*256+127), ADR(l)) < 0 THEN
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
END;
|
END;
|
||||||
|
@ -68,7 +71,7 @@ IMPLEMENTATION MODULE Terminal;
|
||||||
IF l = 0 THEN
|
IF l = 0 THEN
|
||||||
ch := 0C;
|
ch := 0C;
|
||||||
ELSE
|
ELSE
|
||||||
IF Unix.read(fildes, ADR(ch), 1) < 0 THEN
|
IF read(fildes, ADR(ch), 1) < 0 THEN
|
||||||
;
|
;
|
||||||
END;
|
END;
|
||||||
unreadch := ch;
|
unreadch := ch;
|
||||||
|
@ -84,7 +87,7 @@ IMPLEMENTATION MODULE Terminal;
|
||||||
|
|
||||||
PROCEDURE Write(ch: CHAR);
|
PROCEDURE Write(ch: CHAR);
|
||||||
BEGIN
|
BEGIN
|
||||||
IF Unix.write(fildes, ADR(ch), 1) < 0 THEN
|
IF write(fildes, ADR(ch), 1) < 0 THEN
|
||||||
;
|
;
|
||||||
END;
|
END;
|
||||||
END Write;
|
END Write;
|
||||||
|
@ -106,6 +109,6 @@ IMPLEMENTATION MODULE Terminal;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
tty := "/dev/tty";
|
tty := "/dev/tty";
|
||||||
fildes := Unix.open(ADR(tty), 2);
|
fildes := open(ADR(tty), 2);
|
||||||
unread := FALSE;
|
unread := FALSE;
|
||||||
END Terminal.
|
END Terminal.
|
||||||
|
|
|
@ -11,17 +11,18 @@ IMPLEMENTATION MODULE Traps;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
IMPORT EM;
|
FROM EM IMPORT SIG, LINO, FILN, TRP;
|
||||||
IMPORT Unix;
|
FROM Unix IMPORT write;
|
||||||
FROM SYSTEM IMPORT ADDRESS, ADR;
|
FROM SYSTEM IMPORT ADDRESS, ADR;
|
||||||
FROM Arguments IMPORT Argv;
|
FROM Arguments IMPORT
|
||||||
|
Argv;
|
||||||
|
|
||||||
PROCEDURE InstallTrapHandler(t: TrapHandler): TrapHandler;
|
PROCEDURE InstallTrapHandler(t: TrapHandler): TrapHandler;
|
||||||
(* Install a new trap handler, and return the previous one.
|
(* Install a new trap handler, and return the previous one.
|
||||||
Parameter of trap handler is the trap number.
|
Parameter of trap handler is the trap number.
|
||||||
*)
|
*)
|
||||||
BEGIN
|
BEGIN
|
||||||
RETURN EM.SIG(t);
|
RETURN SIG(t);
|
||||||
END InstallTrapHandler;
|
END InstallTrapHandler;
|
||||||
|
|
||||||
PROCEDURE Message(str: ARRAY OF CHAR);
|
PROCEDURE Message(str: ARRAY OF CHAR);
|
||||||
|
@ -34,7 +35,7 @@ IMPLEMENTATION MODULE Traps;
|
||||||
buf, buf2: ARRAY [0..255] OF CHAR;
|
buf, buf2: ARRAY [0..255] OF CHAR;
|
||||||
i, j: CARDINAL;
|
i, j: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
p := EM.FILN();
|
p := FILN();
|
||||||
IF p # NIL THEN
|
IF p # NIL THEN
|
||||||
i := 1;
|
i := 1;
|
||||||
buf[0] := '"';
|
buf[0] := '"';
|
||||||
|
@ -45,12 +46,12 @@ IMPLEMENTATION MODULE Traps;
|
||||||
END;
|
END;
|
||||||
buf[i] := '"';
|
buf[i] := '"';
|
||||||
INC(i);
|
INC(i);
|
||||||
IF Unix.write(2, ADR(buf), i) < 0 THEN END;
|
IF write(2, ADR(buf), i) < 0 THEN END;
|
||||||
ELSE
|
ELSE
|
||||||
l := Argv(0, buf);
|
l := Argv(0, buf);
|
||||||
IF Unix.write(2, ADR(buf), l-1) < 0 THEN END;
|
IF write(2, ADR(buf), l-1) < 0 THEN END;
|
||||||
END;
|
END;
|
||||||
lino := EM.LINO();
|
lino := LINO();
|
||||||
i := 0;
|
i := 0;
|
||||||
IF lino # 0 THEN
|
IF lino # 0 THEN
|
||||||
i := 7;
|
i := 7;
|
||||||
|
@ -76,20 +77,20 @@ IMPLEMENTATION MODULE Traps;
|
||||||
END;
|
END;
|
||||||
buf[i] := ':';
|
buf[i] := ':';
|
||||||
buf[i+1] := ' ';
|
buf[i+1] := ' ';
|
||||||
IF Unix.write(2, ADR(buf), i+2) < 0 THEN END;
|
IF write(2, ADR(buf), i+2) < 0 THEN END;
|
||||||
i := 0;
|
i := 0;
|
||||||
WHILE (i <= HIGH(str)) AND (str[i] # 0C) DO
|
WHILE (i <= HIGH(str)) AND (str[i] # 0C) DO
|
||||||
INC(i);
|
INC(i);
|
||||||
END;
|
END;
|
||||||
IF Unix.write(2, ADR(str), i) < 0 THEN END;
|
IF write(2, ADR(str), i) < 0 THEN END;
|
||||||
buf[0] := 12C;
|
buf[0] := 12C;
|
||||||
IF Unix.write(2, ADR(buf), 1) < 0 THEN END;
|
IF write(2, ADR(buf), 1) < 0 THEN END;
|
||||||
END Message;
|
END Message;
|
||||||
|
|
||||||
PROCEDURE Trap(n: INTEGER);
|
PROCEDURE Trap(n: INTEGER);
|
||||||
(* cause trap number "n" to occur *)
|
(* cause trap number "n" to occur *)
|
||||||
BEGIN
|
BEGIN
|
||||||
EM.TRP(n);
|
TRP(n);
|
||||||
END Trap;
|
END Trap;
|
||||||
|
|
||||||
END Traps.
|
END Traps.
|
||||||
|
|
|
@ -11,30 +11,30 @@ IMPLEMENTATION MODULE random;
|
||||||
Version: $Header$
|
Version: $Header$
|
||||||
*)
|
*)
|
||||||
|
|
||||||
FROM Unix IMPORT getpid, time;
|
FROM Unix IMPORT getpid, time;
|
||||||
TYPE index = [1..55];
|
TYPE index = [1..55];
|
||||||
|
|
||||||
VAR X: ARRAY index OF CARDINAL;
|
VAR X: ARRAY index OF CARDINAL;
|
||||||
j, k: index;
|
j, k: index;
|
||||||
tm: LONGINT;
|
tm: LONGINT;
|
||||||
|
|
||||||
PROCEDURE Random(): CARDINAL;
|
PROCEDURE Random(): CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF k-1 <= 0 THEN k := 55; ELSE DEC(k) END;
|
IF k-1 <= 0 THEN k := 55; ELSE DEC(k) END;
|
||||||
IF j-1 <= 0 THEN j := 55; ELSE DEC(j) END;
|
IF j-1 <= 0 THEN j := 55; ELSE DEC(j) END;
|
||||||
X[k] := X[k] + X[j];
|
X[k] := X[k] + X[j];
|
||||||
RETURN X[k]
|
RETURN X[k]
|
||||||
END Random;
|
END Random;
|
||||||
|
|
||||||
PROCEDURE Uniform (lwb, upb: CARDINAL): CARDINAL;
|
PROCEDURE Uniform (lwb, upb: CARDINAL): CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
IF upb <= lwb THEN RETURN lwb; END;
|
IF upb <= lwb THEN RETURN lwb; END;
|
||||||
RETURN lwb + (Random() MOD (upb - lwb + 1));
|
RETURN lwb + (Random() MOD (upb - lwb + 1));
|
||||||
END Uniform;
|
END Uniform;
|
||||||
|
|
||||||
PROCEDURE StartSeed(seed: CARDINAL);
|
PROCEDURE StartSeed(seed: CARDINAL);
|
||||||
VAR v: CARDINAL;
|
VAR v: CARDINAL;
|
||||||
BEGIN
|
BEGIN
|
||||||
FOR k := 1 TO 55 DO
|
FOR k := 1 TO 55 DO
|
||||||
seed := 1297 * seed + 123;
|
seed := 1297 * seed + 123;
|
||||||
X[k] := seed;
|
X[k] := seed;
|
||||||
|
@ -49,7 +49,7 @@ BEGIN
|
||||||
END;
|
END;
|
||||||
k := 1;
|
k := 1;
|
||||||
j := 25;
|
j := 25;
|
||||||
END StartSeed;
|
END StartSeed;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
tm := time(NIL);
|
tm := time(NIL);
|
||||||
|
|
Loading…
Reference in a new issue