<> <> <> <> <> <> <> DIRECTORY Basics USING [LongNumber, LowHalf], Commander USING [Handle, CommandProc], IO USING [STREAM], Real USING [RoundLI, Fix, Float], RealFns USING [SinDeg, CosDeg, ArcTanDeg, Exp, Ln, SqRt], Rope USING [ROPE]; PascalBasic: CEDAR DEFINITIONS IMPORTS Basics, Real, RealFns = BEGIN <> PascalInteger: TYPE = LONG INTEGER; <> PascalReal: TYPE = REAL; PascalChar: TYPE = CHARACTER; PascalBoolean: TYPE = BOOLEAN; AlfaLength: PascalInteger = 10; AlfaIndex: TYPE = [1..AlfaLength]; Alfa: TYPE = PACKED ARRAY AlfaIndex OF PascalChar; <> <> CharArrayPtr: TYPE = LONG POINTER; CharArrayConcretePtr: TYPE = LONG POINTER TO PACKED ARRAY[1..1) OF PascalChar _ NIL; CommandProc: TYPE = Commander.CommandProc; UnsafeCommandProc: TYPE = UNSAFE PROC; ROPE: TYPE = Rope.ROPE; <> Maxint: PascalInteger = LAST[PascalInteger]; <> PascalStaticZone: UNCOUNTED ZONE; -- for static allocations PascalZone: UNCOUNTED ZONE; -- for dynamic allocations z: ZONE; -- for the runtime's own use <> subsystemName: ROPE; ProcRec: TYPE = RECORD [p: UnsafeCommandProc]; SubsystemProcRec: ProcRec; ExclusiveProc: CommandProc; commandLineTail: ROPE; clientData: REF ANY; ttyInputStream: IO.STREAM; ttyOutputStream: IO.STREAM; <> NumericInputError: SIGNAL; PascalHalt: SIGNAL; AttemptToDisposeInvalidPtr: SIGNAL; <

> PascalRegister: PROCEDURE[name: ROPE, proc: UnsafeCommandProc]; PascalHALT: PROCEDURE = INLINE {SIGNAL PascalHalt}; longInt: PROCEDURE [x: INT] RETURNS [INT] = INLINE {RETURN[x]}; card: PROCEDURE [x: CARDINAL] RETURNS [CARDINAL] = INLINE {RETURN[x]}; nat: PROCEDURE [x: NAT] RETURNS [NAT] = INLINE {RETURN[x]}; shortInt: PROCEDURE [x: INTEGER] RETURNS [INTEGER] = INLINE {RETURN[x]}; PascalIntegerSQR: PROCEDURE [x: PascalInteger] RETURNS [PascalInteger] = INLINE {RETURN[x*x]}; PascalRealSQR: PROCEDURE [x: PascalReal] RETURNS [PascalReal] = INLINE { RETURN[x*x]}; PascalSIN: PROCEDURE [x: PascalReal] RETURNS [PascalReal] = INLINE { RETURN[RealFns.SinDeg[x]]}; PascalCOS: PROCEDURE [x: PascalReal] RETURNS [PascalReal] = INLINE { RETURN[RealFns.CosDeg[x]]}; PascalEXP: PROCEDURE [x: PascalReal] RETURNS [PascalReal] = INLINE { RETURN[RealFns.Exp[x]]}; PascalLN: PROCEDURE [x: PascalReal] RETURNS [PascalReal] = INLINE { RETURN[RealFns.Ln[x]]}; PascalSQRT: PROCEDURE [x: PascalReal] RETURNS [PascalReal] = INLINE { RETURN[RealFns.SqRt[x]]}; PascalARCTAN: PROCEDURE [x: PascalReal] RETURNS [PascalReal] = INLINE { RETURN[RealFns.ArcTanDeg[y: x, x: 1.0]]}; PascalROUND: PROCEDURE [x: PascalReal] RETURNS [PascalInteger] = Real.RoundLI; PascalTRUNC: PROCEDURE [x: PascalReal] RETURNS [PascalInteger] = Real.Fix; PascalFLOAT: PROCEDURE [x: PascalInteger] RETURNS [PascalReal] = Real.Float; PascalMULPower2: PROC [i: INT, lg: NAT] RETURNS [INT]; PascalDIVPower2: PROC [i: INT, lg: NAT] RETURNS [INT]; PascalMODPower2Mask: PROC [i: INT, mask: --nonneg-- INT] RETURNS [INT]; PascalODD: PROCEDURE [x: PascalInteger] RETURNS [PascalBoolean] = INLINE { t: Basics.LongNumber = [li[x]]; RETURN[(t.lo MOD 2) # 0]}; PascalORD: PROCEDURE [x: LONG UNSPECIFIED] RETURNS [PascalInteger] = INLINE { RETURN[LOOPHOLE[x, PascalInteger]]}; PascalCHR: PROCEDURE [x: PascalInteger] RETURNS [PascalChar] = INLINE { RETURN[LOOPHOLE[Basics.LowHalf[LOOPHOLE[x, LONG CARDINAL]], PascalChar]]}; PascalDATE: PROCEDURE [a: LONG POINTER TO Alfa]; PascalTIME: PROCEDURE [a: LONG POINTER TO Alfa]; PascalReadClock: PROCEDURE RETURNS [PascalInteger]; <> <> <> PascalStringCompare, PascalLongStringCompare: PROCEDURE [ aa: CharArrayPtr _ NIL, aLen: PascalInteger _ 0, as: ROPE _ NIL, ba: CharArrayPtr _ NIL, bLen: PascalInteger _ 0, bs: ROPE _ NIL] RETURNS [[-1..1]]; <> <> <> <b.>> END. -- PascalBasic