<<>> <> <> <> <> <> <> <> <> DIRECTORY OSOps, RunRegressions, XMesaProcs; XMesaCmplr5: PROGRAM IMPORTS RunRegressions, OSOps, XMesaProcs = BEGIN filename: LONG STRING _ "XMesaCmplr5"L; XMesaCall5: PROCEDURE = { XMesaProcs.PrintCR; XMesaProcs.PrintS[filename]; XMesaProcs.PrintCR; XMesa5a[]; -- STRING's XMesa5b[]; -- ARRAY DESCRIPTOR's XMesa5c[]; -- BASE and RELATIVE POINTER's XMesa5d[]; -- VARIANT RECORD's XMesa5e[]; -- SEQUENCE's, DSA and Zones XMesaProcs.PrintS["Done"L]; XMesaProcs.PrintCR; }; --end of XMesaCall5 XMesa5a: PROCEDURE = { -- STRING's stringMax: INTEGER = 128; someExtra: INTEGER = 0; currentLine: LONG STRING _ [256]; nowLine: LONG STRING _ [256]; funnyStuff: LONG STRING = "ha"; stringBuffer: LONG STRING _ [stringMax + someExtra]; laugh: LONG STRING _ funnyStuff; joke: LONG STRING = "ha"; s1: LONG STRING _ "I know where its at"; s1[7] _ 't; XMesaProcs.Ischarequal[s1[7], 't, 2700, filename]; laugh[1] _ 'e; <> XMesaProcs.Isequal[currentLine.maxlength, 256, 2720, filename]; XMesaProcs.Isequal[stringBuffer.maxlength, 128, 2730, filename]; XMesaProcs.Isnotequal[stringBuffer.maxlength, 256, 2740, filename]; currentLine _ "I know what it takes"; nowLine _ "I know where its at"; IF currentLine = nowLine THEN XMesaProcs.PutFailMessage[2750, filename]; nowLine _ currentLine; IF currentLine # nowLine THEN XMesaProcs.PutFailMessage[2770, filename]; }; XMesa5b: PROCEDURE = { -- ARRAY DESCRIPTOR's n: INTEGER; signalRaised: BOOLEAN _ FALSE; dd: LONG DESCRIPTOR FOR ARRAY OF INTEGER; <> PpT: TYPE = ARRAY [0..10) OF INTEGER; pp: LONG POINTER TO PpT; Table: TYPE = DESCRIPTOR FOR ARRAY OF INTEGER; this: INTEGER = 10; thisArray: ARRAY [0..this) OF INTEGER _ ALL[5]; anyTable: Table _ DESCRIPTOR[thisArray]; Randomize: PROCEDURE [input: Table] = { --randomize first 10 elements i, j: INTEGER _ 0; i _ input.LENGTH; FOR j IN [0..i) DO input[j] _ j; ENDLOOP; }; <> uz: UNCOUNTED ZONE _ OSOps.GetSystemUZone[]; pp _ uz.NEW[PpT]; Randomize[anyTable]; XMesaProcs.Isequal[thisArray[0], 0, 2780, filename]; XMesaProcs.Isequal[thisArray[1], anyTable[1], 2790, filename]; dd _ DESCRIPTOR[pp]; dd[0] _ 100; dd[5] _ 100; dd[9] _ 100; BEGIN ENABLE ANY => {XMesaProcs.PutFailMessage[2792, filename]; CONTINUE}; XMesaProcs.Isequal[dd[5], 100, 2794, filename]; XMesaProcs.Isequal[dd[9], 100, 2796, filename]; END; dd _ DESCRIPTOR[pp, 5]; BEGIN ENABLE ANY => {signalRaised _ TRUE; CONTINUE}; XMesaProcs.Isequal[dd[9], 100, 2799, filename]; --this is here to check bounds checking <> uz.FREE[@pp]; END; XMesaProcs.Isboolequal[signalRaised, TRUE, 2798, filename]; signalRaised _ FALSE; n _ LENGTH[dd]; XMesaProcs.Isequal[n, 5, 2810, filename]; }; XMesa5c: PROCEDURE = { --BASE and RELATIVE POINTER's <> }; XMesa5d: PROCEDURE = { -- VARIANT RECORDs z: UNCOUNTED ZONE = OSOps.GetSystemUZone[]; <> StreamType: TYPE = {disk, display, keyboard}; StreamHandle: TYPE = POINTER TO Stream; Stream: TYPE = RECORD [ Get: INTEGER, Put: INTEGER, body: SELECT type: StreamType FROM disk => [ fileid: INTEGER, buffer: SELECT size: * FROM short => [b: CARDINAL], long => [b: INTEGER], ENDCASE], display => [first: BOOL, last: INTEGER, nlines: [0..100]], keyboard => [keys: INTEGER], ENDCASE]; <> overlayrec: TYPE = RECORD [ SELECT OVERLAID * FROM one => [c: CHAR, i: INTEGER, next: LONG POINTER TO overlayrec], two => [b: BOOL, next: LONG POINTER TO overlayrec _ NIL], three => [s: STRING], ENDCASE]; VRec: TYPE = RECORD [ common: INTEGER _ 0, variant: SELECT tag: * FROM red => [r1: BOOL _ FALSE], green => [g1: INTEGER _ 0] ENDCASE _ red[TRUE] | NULL]; v1: VRec _ [common: 10]; v2: VRec _ [variant: NULL]; overlyexample: overlayrec; otherPtr: LONG POINTER TO overlayrec.two _ NIL; clearexample: two overlayrec; <> r: Stream; rDisk: disk Stream; rDisplay: display Stream; rKeyb: keyboard Stream; rShort: short disk Stream; rLong: long disk Stream; rDisk.fileid _ 0; rDisplay.first _ FALSE; rShort _ [5, 10, disk[-1, short[65535]]]; XMesaProcs.Isequal[rShort.Get, 5, 2900, filename]; XMesaProcs.Isequal[rShort.Put, 10, 2910, filename]; XMesaProcs.Isequal[rShort.fileid, -1, 2920, filename]; XMesaProcs.IsCardequal[rShort.b, 65535, 2930, filename]; rLong _ [6, 11, disk[-2, long[-5]]]; XMesaProcs.Isequal[rLong.Get, 6, 2900, filename]; XMesaProcs.Isequal[rLong.Put, 11, 2910, filename]; XMesaProcs.Isequal[rLong.fileid, -2, 2920, filename]; XMesaProcs.Isequal[rLong.b, -5, 2930, filename]; rKeyb _ [1, 2, keyboard[3]]; XMesaProcs.Isequal[rKeyb.Get, 1, 2940, filename]; XMesaProcs.Isequal[rKeyb.Put, 2, 2950, filename]; XMesaProcs.Isequal[rKeyb.keys, 3, 2960, filename]; <> r.body _ keyboard[10]; WITH strm: r SELECT FROM display => BEGIN strm.first _ FALSE; strm.last _ -2; strm.nlines _ 8; END; disk => WITH strm SELECT FROM short => b _ 65535; long => b _ -2; ENDCASE; keyboard => IF strm.keys # 10 THEN XMesaProcs.PutFailMessage[2965, filename]; ENDCASE => strm.body _ disk[-5, short[65535]]; IF r.type # keyboard THEN XMesaProcs.PutFailMessage[2983, filename]; r.body _ display[TRUE, -1, 99]; IF r.type # display THEN XMesaProcs.PutFailMessage[2987, filename]; WITH strm: r SELECT FROM display => BEGIN IF strm.first # TRUE THEN XMesaProcs.PutFailMessage[2995, filename]; IF strm.last # -1 THEN XMesaProcs.PutFailMessage[3005, filename]; IF strm.nlines # 99 THEN XMesaProcs.PutFailMessage[3015, filename]; END; ENDCASE => XMesaProcs.PutFailMessage[3020, filename]; <> overlyexample.b _ FALSE; XMesaProcs.Isboolequal[overlyexample.b, FALSE, 3030, filename]; overlyexample.c _ 'A; XMesaProcs.Ischarequal[overlyexample.c, 'A, 3040, filename]; clearexample.b _ TRUE; clearexample.next _ otherPtr; XMesaProcs.Isboolequal[clearexample.b, TRUE, 3050, filename]; XMesaProcs.Ispointerequal[clearexample.next, otherPtr, 3060, filename]; otherPtr _ @clearexample; XMesaProcs.Isboolequal[otherPtr.b, TRUE, 3070, filename]; XMesaProcs.Ispointerequal[otherPtr.next, NIL, 3080, filename]; <> << This section moved to module 15: <> XMesaProcs.Isequal[v.common, 0, 3100, filename]; WITH any: v SELECT FROM red => XMesaProcs.Isboolequal[any.r1, TRUE, 3110, filename]; ENDCASE; XMesaProcs.Isequal[v1.common, 10, 3120, filename]; WITH any: v1 SELECT FROM red => XMesaProcs.Isboolequal[any.r1, TRUE, 3130, filename]; ENDCASE; XMesaProcs.Isequal[v2.common, 0, 3140, filename]; XMesaProcs.Isequal[rv.common, 0, 3150, filename]; XMesaProcs.Isboolequal[rv.r1, FALSE, 3160, filename]; XMesaProcs.Isequal[gv.common, 0, 3170, filename]; XMesaProcs.Isequal[gv.g1, 0, 3180, filename]; >> }; XMesa5e: PROCEDURE = { -- SEQUENCE's, DSA and Zones ptr: LONG POINTER TO Rec; Rec: TYPE = RECORD [bool: BOOL, seq: SEQUENCE length: CARDINAL OF CARDINAL]; z: UNCOUNTED ZONE = OSOps.GetSystemUZone[]; zz: UNCOUNTED ZONE = OSOps.GetSystemUZone[]; NodePtr: TYPE = LONG POINTER TO Node; nillnit: NodePtr _ NIL; Node: TYPE = RECORD [value: LONG CARDINAL _ 0, next: NodePtr _ nillnit] _ [ 1, NIL]; currentNode, otherNode: NodePtr _ NIL; currentNode _ z.NEW[Node _ [4, otherNode]]; XMesaProcs.IsLongCardEqual[currentNode.value, 4, 3190, filename]; XMesaProcs.Ispointerequal[currentNode.next, otherNode, 3200, filename]; z.FREE[@currentNode]; <> ptr _ zz.NEW[Rec[10]]; FOR begin: INTEGER IN [0..9] DO ptr[begin] _ begin; ENDLOOP; XMesaProcs.Isequal[ptr[3], 3, 3210, filename]; XMesaProcs.Isequal[ptr[5], 5, 3220, filename]; IF ptr.length # 10 THEN XMesaProcs.PutFailMessage[3235, filename]; zz.FREE[@ptr]; <> ptr _ zz.NEW[Rec[5]]; FOR begin: INTEGER IN [0..4] DO ptr[begin] _ begin + 10; ENDLOOP; XMesaProcs.Isequal[ptr[3], 13, 3240, filename]; IF ptr.length # 5 THEN XMesaProcs.PutFailMessage[3260, filename]; zz.FREE[@ptr]; }; <> RunRegressions.RegisterTest[XMesaCall5, "test5"]; END...