DIRECTORY Rope; TiogaLooks: CEDAR DEFINITIONS = BEGIN Runs: TYPE = REF RunsBody; Looks: TYPE = PACKED ARRAY Look OF Bit; Look: TYPE = CHAR [firstLook..lastLook]; -- 32 bits indexed from 'a firstLook: CHAR = 'a; lastLook: CHAR = firstLook+31; Bit: TYPE = BOOL _ FALSE; noLooks: Looks = ALL[FALSE]; allLooks: Looks = ALL[TRUE]; Offset: TYPE = INT _ 0; MaxOffset: Offset = LAST[Offset]; LooksToRope: PROC [looks: Looks] RETURNS [rope: Rope.ROPE]; RopeToLooks: PROC [rope: Rope.ROPE] RETURNS [looks: Looks]; RunsBody: TYPE = RECORD [SELECT tag: * FROM base => [runs: SEQUENCE length: NAT OF Run], node => [SELECT case: * FROM substr => [size: Offset, base: Runs, start: Offset], concat => [size: Offset, base,rest: Runs, pos: Offset], replace => [size: Offset, base,replace: Runs, start,oldPos,newPos: Offset], change => [size: Offset, base: Runs, remove,add:Looks, start,len: Offset], ENDCASE], ENDCASE]; Run: TYPE = RECORD [after: Offset, looks: Looks]; BaseRuns: TYPE = REF Tbase; Tbase: TYPE = base RunsBody; Tsubstr: TYPE = substr node RunsBody; Tconcat: TYPE = concat node RunsBody; Treplace: TYPE = replace node RunsBody; Tchange: TYPE = change node RunsBody; END. θTiogaLooks.mesa; written by Bill Paxton, February 1981 last edit by Bill Paxton, June 1, 1983 10:09 am last edit by McGregor, March 31, 1983 11:47 am ***** Private declarations RunsBody is modeled after RopeRep from ROPE.Mesa Κϋ˜Jšœ6™6Jšœ/™/Jšœ.™.J˜šΟk ˜ Jšœ˜J˜—Jšœ œ˜Jš˜J˜Jšœœœ ˜Jš œœœœœ˜'JšœœœΟc˜CJšœ œ˜Jšœ œ˜Jšœœœœ˜Jšœœœ˜Jšœœœ˜J˜Jšœœœ˜Jšœœ ˜!J˜IprocšΟn œœœ œ˜;J˜KšŸ œœ œœ˜;J˜Jšž™J˜šœ œœœ˜+Jšž0™0Jšœœ œœ˜,šœ œ ˜J˜4J˜7J˜KJ˜JJšœ˜ —Jšœ˜ —J˜Jšœœœ˜1Jšœ œœ˜Jšœœ˜Jšœ œ˜%Jšœ œ˜%Jšœ œ˜'Jšœ œ˜%J˜Jšœ˜J˜—…—œ