-- LupineMarshalTestImpl.mesa. -- Last edited by BZM on 18-Mar-82 15:14:04. -- Last edited by Bob Hagmann on February 8, 1985 5:13:45 pm PST DIRECTORY Atom USING [MakeAtom], ConvertUnsafe USING [ToRope], --Environment USING [charsPerWord], PrincOpsUtils USING [LongCOPY], LupineMarshalTest --USING [ALL]--, Rope USING [Concat, FromChar, FromProc, ROPE]; LupineMarshalTestImpl: PROGRAM IMPORTS Atom, ConvertUnsafe, PrincOpsUtils, Rope EXPORTS LupineMarshalTest = BEGIN OPEN LupineMarshalTest; Null: PUBLIC PROC = {NULL}; One: PUBLIC PROC [one: INTEGER] RETURNS [a: INTEGER] = {RETURN[one]}; Four: PUBLIC PROC [one,two,three,four: INTEGER] RETURNS [a,b,c,d: INTEGER] = {RETURN[one,two,three,four]}; Ten: PUBLIC PROC [one,two,three,four,five,six,seven,eight,nine,ten: INTEGER] RETURNS [a,b,c,d,e,f,g,h,i,j: INTEGER] = {RETURN[one,two,three,four,five,six,seven,eight,nine,ten]}; Signal: PUBLIC SIGNAL [in: INTEGER] RETURNS [out: INTEGER] = CODE; SignalTest: PUBLIC PROC [in: INTEGER, action: SignalAction] RETURNS [--out:-- INTEGER] = BEGIN SELECT action FROM signal => RETURN[ SIGNAL Signal[in] ]; error => RETURN[ ERROR Signal[in] ]; neither => RETURN[ in ]; ENDCASE => ERROR; END; TenArray: PUBLIC PROC [in: Array10] RETURNS [--out:-- Array10] = {RETURN[in]}; FortyArray: PUBLIC PROC [in: Array40] RETURNS [--out:-- Array40] = {RETURN[in]}; HundredArray: PUBLIC PROC [in: Array100] RETURNS [--out:-- Array100] = {RETURN[in]}; SimpleArithmetic: PUBLIC PROC [pad: VARArithmetic] = {IF pad # NIL THEN {pad.inPlus1 _ pad.in+1; pad.inTimes2 _ pad.in*2} }; FillArray: PUBLIC PROC [in: INTEGER, out: RESULTArray] = {FOR i: CARDINAL IN [0..LENGTH[out]) DO out[i] _ in-i ENDLOOP}; ReadPages: PUBLIC PROC [item: Item, buffer: RESULTPages] = BEGIN IF LENGTH[buffer] > 0 THEN BEGIN buffer[0] _ item; PrincOpsUtils.LongCOPY[ to: BASE[buffer]+SIZE[Item], from: BASE[buffer], nwords: (LENGTH[buffer]-1)*SIZE[Item] ]; END; END; CreateList: PUBLIC PROC [in: LONG INTEGER, length: INTEGER] RETURNS [out: IntList] = {FOR i: INTEGER DECREASING IN [0..length) DO out _ CONS[in-i, out] ENDLOOP}; StringCopy: PUBLIC PROC [in: ReadonlyString] RETURNS [out: Rope.ROPE _ NIL] = {IF in # NIL THEN FOR i: CARDINAL IN [0..in.length) DO out _ out.Concat[Rope.FromChar[in[i]]]; ENDLOOP}; CharToVariantString: PUBLIC PROC [ char: CHARACTER, length: INTEGER, type: StringType, makeNil: BOOLEAN ] RETURNS [StringSelection] = BEGIN SELECT type FROM nil => RETURN[ StringSelection[length, char, nil[]] ]; rope => BEGIN RopeChar: SAFE PROC RETURNS [CHARACTER] = TRUSTED {RETURN[char]}; rope: Rope.ROPE = IF makeNil THEN NIL ELSE Rope.FromProc[len: length, p: RopeChar]; RETURN[ StringSelection[length, char, rope[rope: rope]] ]; END; text => BEGIN text: REF TEXT; IF makeNil THEN text _ NIL ELSE BEGIN text _ NEW[TEXT[length] _ [length: length, text: NULL]]; FOR i: INTEGER IN [0..length) DO text[i] _ char; ENDLOOP; END; RETURN[ StringSelection[length, char, text[text: text]] ]; END; ENDCASE => ERROR; END; BitsToSequence: PUBLIC PROC [in: BitDescriptor] RETURNS [--out:-- REF READONLY BitSequence] = BEGIN out: REF --READONLY-- BitSequence = NEW[BitSequence[LENGTH[in]]]; FOR i: INTEGER IN [0..LENGTH[in]) DO IF i < LENGTH[out.fixed] THEN out.fixed[i+1] _ in[i]; out.dynamic[i+1] _ in[i]; ENDLOOP; RETURN[out]; END; PuntStringsToAtoms: PUBLIC SIGNAL = CODE; StringsToAtoms: PUBLIC PROC [in: StringList] RETURNS [out: AtomList_NIL] = {FOR str: INTEGER DECREASING IN (LENGTH[in]..0] DO out _ CONS[Atom.MakeAtom[ConvertUnsafe.ToRope[from: in[str]]], out]; IF str MOD 47 = 0 THEN SIGNAL PuntStringsToAtoms; ENDLOOP;}; END. -- LupineMarshalTestImpl. StringCopy: PUBLIC PROC [in: LONG STRING, out: VARString] = {IF in # NIL AND out # NIL THEN FOR i: CARDINAL IN [0..in.length) DO out[i] _ in[i] ENDLOOP}; {IF in # NIL AND out # NIL THEN PrincOpsUtils.LongCOPY[ to: BASE[out.text], from: BASE[in.text], nwords: (MIN[in.length, out.maxlength]+1)/Environment.charsPerWord ]}; StringDescriptor: PROC [ string: LONG STRING, text: RESULTTextDescriptor] = BEGIN IF LENGTH[text] # string.length THEN ERROR; PrincOpsUtils.LongCOPY[ to: BASE[text], from: @string.text, nwords: string.length/Environment.charsPerWord ]; END; Pattern: PROC [i: INTEGER] RETURNS [Bits] = INLINE {RETURN[ i MOD (LAST[Bits]+1) ]}; DCopyright c 1985 by Xerox Corporation. All rights reserved. ΚR˜˜Icodešœ Οmœ1™<—J˜,J˜@J˜˜ J˜J˜˜#J˜J˜"JšœΟkœžœ˜.J˜J˜——˜J˜1J˜J˜J˜J˜J˜J˜˜6J˜—˜/˜J˜——˜L˜(J˜;J˜J˜——J˜BJ˜˜;J˜J˜˜J˜'J˜'J˜J˜—J˜J˜J˜—˜@J˜ —˜BJ˜ —˜FJ˜ J˜J˜—˜4˜J˜4J˜——˜8J˜?J˜—˜:J˜˜ J˜˜J˜J˜J˜(—J˜—J˜J˜—˜;J˜˜,J˜J˜——˜M˜šœ$˜$Jšœ'˜'Jšœ ˜ —J˜——˜"J˜FJ˜J˜˜J˜6˜J˜J˜A˜J˜A—J˜:J˜—˜J˜J˜˜ J˜˜ J˜8J˜9J˜——J˜:J˜—J˜—J˜J˜—˜/J˜-J˜J˜A˜$J˜5J˜J˜—J˜ J˜J˜J˜—J˜)J˜˜J˜2J˜DJ˜1J˜ J˜J˜———J˜J˜J˜J˜J˜J˜J˜˜˜;˜ J˜=—˜˜J˜J˜J˜FJ˜———˜J˜2J˜J˜+˜J˜J˜J˜1—J˜J˜J˜˜+J˜(J˜J˜————…—Τj