-- LupineTypeTest.mesa.
-- Copyright (C) 1985 by Xerox Corporation. All rights reserved.
-- Last edited by BZM on 12-May-82 19:24:14.
-- Bob Hagmann February 8, 1985 5:10:11 pm PST


DIRECTORY

BasicTime USING [Unpacked],
Rope USING [ROPE],
RPC USING [Conversation, ShortSTRING, ShortROPE];


LupineTypeTest: DEFINITIONS =
BEGIN


-- Types.

ROPE: TYPE = Rope.ROPE;

Color: TYPE = {red, green, yellow};
ColorRange: TYPE = [1..3];
Intensity: TYPE = [0..127);

HANDLE: TYPE = PRIVATE HANDLEPtr; HANDLEPtr: TYPE = POINTER;

ProcType: TYPE = HANDLEProcType;
HANDLEProcType: TYPE = PROCEDURE [one: STRING, two: HANDLE]
RETURNS [more: BOOLEAN];

ExportObject: TYPE [1];
ExportHandle: TYPE = POINTER TO ExportObject;

Zone: TYPE = HANDLEZone; HANDLEZone: TYPE = ZONE;
UncountedZone: TYPE = HANDLEUZone; HANDLEUZone: TYPE = UNCOUNTED ZONE;
MdsZone: TYPE = HANDLEMDSZone; HANDLEMDSZone: TYPE = MDSZone;

ComputedVariant: TYPE = RECORD [
 oddPart: SELECT OVERLAID * FROM
  num => [INTEGER],
  flags => [SELECT COMPUTED {flags} FROM
   flags => [f: PACKED ARRAY CHARACTER OF BOOLEAN],
   ENDCASE ],
  ENDCASE ];

SmallVariant: TYPE = RECORD [
 handle: HANDLE,
 oddPart: SELECT varTag: * FROM
  test => [r: ROPE],
  empty => [],
  plain => [c: CARDINAL, r: REAL],
  ENDCASE ];

BigVariant: TYPE = RECORD [
 common: INTEGER,
 plain: PACKED ARRAY [1..64] OF CHARACTER,
 variant: SELECT varTag: * FROM
  list => [l: LIST OF REF TEXT],
  handle => [h, i, j: HANDLE],
  empty => [],
  plain => [c: CARDINAL, r: REAL],
  small => [fill: BOOLEAN, smallVar: SmallVariant],
  spectrum => [
  SELECT color: Color FROM
  yellow => [contrast: REF READONLY Intensity],
  red => [desc: LONG DESCRIPTOR FOR READONLY ARRAY OF RECORD [
   colorName: STRING,
   brilliance: Intensity] ],
  green => [empty: BOOLEAN],
  ENDCASE ],
  ENDCASE ];

Space: TYPE = PACKED ARRAY BOOLEAN OF ARRAY [1..7] OF REF SpaceRecord;
SpaceRecord: TYPE = RECORD [
 bits: DESCRIPTOR FOR PACKED ARRAY [2000..2010] OF BOOLEAN,
 colors: PACKED SEQUENCE range: ColorRange OF Intensity ];

ReadonlyString: TYPE = REF READONLY StringBody;
TestRecord: TYPE = RECORD [
 one: REF ReadonlyString,
 two: RECORD [block: ARRAY [0..4) OF LONG CARDINAL],
 three: LONG DESCRIPTOR FOR PACKED ARRAY OF Intensity ];

FiniteSequence: TYPE = RECORD [SEQUENCE range: ColorRange OF REF REAL];

PublicConv, PrivateConv: TYPE = HANDLEConversation;
HANDLEConversation: TYPE = RPC.Conversation;

RNameList: TYPE = LONG POINTER TO READONLY RNameListObject;
RNameListObject: TYPE = RECORD [
names: PACKED SEQUENCE length: [0..64] OF LONG RPC.ShortSTRING ];

Group: TYPE = RECORD [owners: RNameList, total: LONG INTEGER];

Int: TYPE = LONG POINTER TO LONG INTEGER;
HANDLEInt: TYPE = Int;
VALUEInt: TYPE = Int;
VARInt: TYPE = Int;
RESULTInt: TYPE = Int;

String: TYPE = STRING;
HANDLEString: TYPE = String;
VALUEString: TYPE = String;
VARString: TYPE = String;
RESULTString: TYPE = String;

Buffer: TYPE = LONG DESCRIPTOR FOR ARRAY OF WORD;
HANDLEBuffer: TYPE = Buffer;
VALUEBuffer: TYPE = Buffer;
VARBuffer: TYPE = Buffer;
RESULTBuffer: TYPE = Buffer;


-- Interface Exceptions.

PlainError: ERROR;

ArgError: ERROR [type: Color, position: CARDINAL];

PlainSignal: SIGNAL;

ArgSignal: SIGNAL [bogus: Color];

ResultSignal: SIGNAL RETURNS [resume: BOOLEAN];

AnonSignal: SIGNAL [now, later: BOOLEAN, text: POINTER TO READONLY TEXT]
RETURNS [BOOLEAN, BOOLEAN, POINTER TO READONLY TEXT];

FullSignal: SIGNAL [check: ProcType] RETURNS [use: Color];

ComplexSignal: SIGNAL [
 nat: NAT,
 refTime: REF BasicTime.Unpacked ]
RETURNS [
 atom: ATOM,
 list: LIST OF ATOM ];



-- Interface Procedures.

InlineCheck: PROCEDURE = INLINE {};

MachineCheck: PROCEDURE = MACHINE CODE {};

PlainProc: PROCEDURE;

ArgProc: PROCEDURE [number: CARDINAL, string: STRING];

ResProc: PROCEDURE RETURNS [block: ARRAY [0..4) OF INTEGER];

FullProc: PROCEDURE [input: BOOLEAN] RETURNS [output: CHARACTER];

BigProc: PROCEDURE [
 firstOne: BOOLEAN,
 ptr: LONG POINTER TO INTEGER,
 tooBig: ARRAY [0..300) OF BOOLEAN,
 willFit: ARRAY [0..200) OF BOOLEAN,
 str1: STRING,
 fitsToo: ARRAY [0..40) OF BOOLEAN,
 noDice: ARRAY [0..40) OF BOOLEAN,
 yep: BOOLEAN,
 fillsItUp: ARRAY [0..13) OF BOOLEAN,
 -- These next three don't fit into the overlay and should
 -- be copied, uninterpreted, into the second packet.
 stringHandle: HANDLEString,
 intHandle: HANDLEInt,
 descHandle: HANDLEBuffer,
 str2: STRING ];

CedarProc: PROC [
 nat: NAT,
 refInt: REF INTEGER,
 refAny: REF ]
RETURNS [
 body: REF StringBody,
 rope: REF READONLY TEXT,
 shortRope: RPC.ShortROPE,
 zone: Zone,
 list: LIST OF ARRAY Color OF LIST OF ATOM,
 finiteSeq: REF FiniteSequence ];
  
AnonProc: PROCEDURE [i: INTEGER, p: ProcType, h: HANDLE, u: BasicTime.Unpacked]
RETURNS [LONG INTEGER, LIST OF ZONE];

ZoneCheck: PROCEDURE [cedar: Zone, heap: UncountedZone] RETURNS [mds: MdsZone];

Test: PROCEDURE [input: BOOLEAN, array: ARRAY [0..10] OF TestRecord]
RETURNS [char: CHARACTER];

ConversationTest: PROCEDURE [doThis: PublicConv, skipThis: PrivateConv]
RETURNS [skipThisToo: PublicConv];


ProcParam: PROCEDURE [proc: ProcType];

ExportTest: PROCEDURE [object: ExportObject]
RETURNS [approved: ExportHandle, notApproved: HANDLE];

Array: PROC [ok: LONG CARDINAL, space: REF Space] RETURNS [real: REF REAL];


VarInt: PROCEDURE [
var: VARInt, val: VALUEInt, res: RESULTInt, han: HANDLEInt ];

VarString: PROCEDURE [
var: VARString, val: VALUEString, res: RESULTString, han: HANDLEString ];

VarBuffer: PROCEDURE [
var: VARBuffer, val: VALUEBuffer, res: RESULTBuffer, han: HANDLEBuffer ];


END. -- LupineTypeTest.


StringConvert: PROCEDURE [
StoR, RtoA, AtoS: BOOLEAN,
string: RPC.ShortSTRING,
rope: RPC.ShortROPE,
atom: RPC.ShortATOM ]
RETURNS [
longString: LONG STRING,
longRope: ROPE,
longAtom: ATOM ];

MakeList: PROCEDURE [individuals: LIST OF RPC.ShortROPE] RETURNS [RNameList];

CheckName: PROCEDURE [name: RPC.ShortSTRING, group: Group] RETURNS [BOOLEAN];

TestVariants: PROCEDURE [
 smallone: DESCRIPTOR FOR ARRAY OF SmallVariant,
 two: LONG CARDINAL ]
RETURNS [
 char: CHARACTER,
 big: REF BigVariant ];

TestVariants: PROCEDURE [
 smallone: DESCRIPTOR FOR READONLY ARRAY OF SmallVariant,
 two: LONG CARDINAL ]
RETURNS [
 char: CHARACTER
--big: REF BigVariant-- ];
Bob Hagmann February 8, 1985 5:10:12 pm PST
changes to: DIRECTORY