DIRECTORY Inline, Mopcodes, TiogaLooks, TiogaLooksOps; TiogaLooksSupport: CEDAR DEFINITIONS IMPORTS Inline, Mopcodes SHARES TiogaLooksOps = BEGIN OPEN TiogaLooks, TiogaLooksOps; BaseRun: PROC [x: BaseRuns, index: Offset, lower: NAT _ 0, upper: NAT _ LAST[NAT]] RETURNS [NAT]; ExtractRuns: PROC [base: BaseRuns, ref: Runs, start, len: Offset, index: NAT _ 0] RETURNS [NAT]; -- value is next index CountRunsAfterChanges: PROC [ref: Runs, start, len: Offset, limit: Offset _ MaxOffset, remove, add: Looks, merge: BOOLEAN _ FALSE, firstLooks: Looks _ noLooks] RETURNS [count: NAT, nonempty: BOOLEAN, lastLooks: Looks]; ExtractRunsAfterChanges: PROC [base: BaseRuns, ref: Runs, remove, add: Looks, start: Offset, len: Offset, index: NAT _ 0] RETURNS [NAT]; -- value is next index CopyRuns: PROC [to, from: BaseRuns, toLoc, fromLoc, nRuns: NAT]; MakeRun: PROC [len: Offset] RETURNS [new: Runs]; TryFlatSubstr: PROC [base: Runs, start, len: Offset, limit: Offset _ FlatMax] RETURNS [BaseRuns]; TryFlatConcat: PROC [base, rest: Runs, baseLen, restLen: Offset] RETURNS [new: BaseRuns]; TryFlatConcatRest: PROC [base, rest: Runs, baseLen, restLen, numRuns: Offset, merge: BOOLEAN, looks: Looks] RETURNS [BaseRuns]; ModifyLooks: PROC [old, remove, add: Looks] RETURNS [Looks]; MergeChanges: PROC [oldrem, oldadd, rem, add: Looks] RETURNS [newrem, newadd: Looks]; LooksAND: PROC [looks1, looks2: Looks] RETURNS [Looks]; LooksOR: PROC [looks1, looks2: Looks] RETURNS [Looks]; LooksNOT: PROC [looks: Looks] RETURNS [Looks]; TbaseSize: PROC [x: BaseRuns] RETURNS [Offset] = INLINE { RETURN [IF x.length=0 THEN 0 ELSE x[x.length-1].after] }; InsertRun: PROC [base: BaseRuns, len: Offset, looks: Looks, index: NAT] RETURNS [NAT]; NewBase: PROC [runs: NAT] RETURNS [BaseRuns]; FindBaseRuns: PROC [x: BaseRuns, start, len: Offset] RETURNS [first, last: NAT]; BaseRunLengths: PROC [x: BaseRuns, start, len: Offset, first, last: NAT] RETURNS [firstLen, lastLen: Offset]; Pair: TYPE = MACHINE DEPENDENT RECORD [low,high: CARDINAL]; Short: PROC [x: Offset] RETURNS [NAT] = TRUSTED MACHINE CODE { Mopcodes.zLI1; Mopcodes.zBNDCK; Mopcodes.zPOP; Mopcodes.zLINI; Mopcodes.zBNDCK}; CheckLongSub: PROC [x,y: Offset] RETURNS [Offset] = INLINE { RETURN [NonNeg[x-y]] }; NonNeg: PROC [x: Offset] RETURNS [Offset] = TRUSTED MACHINE CODE { Mopcodes.zLINI; Mopcodes.zBNDCK}; END. ^TiogaLooksSupport.mesa; written by Bill Paxton, February 1981 edited by McGregor, February 8, 1983 11:53 am edited by Bill Paxton, May 27, 1983 2:26 pm edited by Maxwell, January 5, 1983 12:48 pm Internal support interface for TiogaLooks support procedures modified looks are == (old & ~remove) v add -- ((lks & ~oldrem) v oldadd) & ~rem) v add == -- lks & ~(oldrem v rem)) v ((oldadd & ~rem) v add -- thus, newrem _ oldrem v rem, newadd _ (oldadd & ~rem) v add compute looks1 & looks2 compute looks1 v looks2 compute ~looks inlines miscellaneous support routines quick range check and shortening ÊŘJšœ Ïc3™=Jšœ-™-Jšœ+™+Jšœ+™+J™Jšœ)™)J˜šÏk ˜ J˜J˜ J˜ J˜—J˜šœž˜$Jšžœ˜Jšžœ˜—Jšžœžœ˜%J˜Jšœ™J˜šÏnœž˜ Jš œ$žœ žœžœžœ˜DJšžœžœ˜J˜—šŸ œž˜Jšœ7žœ˜?Jšžœžœ˜%J˜—šŸœž˜˜:Jšœžœžœ˜H—Jšžœ žœ žœ˜:J˜—šŸœž˜˜/Jšœ#žœ˜+—Jšžœžœ˜%J˜—JšŸœžœ-žœ˜@J˜JšŸœžœžœ ˜0J˜šŸ œž˜J˜9Jšžœ ˜J˜—šŸ œž˜J˜,Jšžœ˜J˜—šŸœž˜˜5Jšœžœ˜—Jšžœ ˜J˜—šŸ œžœžœ ˜™>J˜šŸœžœžœ ˜7Jšœ™J˜—šŸœžœžœ ˜6Jšœ™J˜—šŸœžœžœ ˜.Jšœ™J˜—Jšœ™J˜šŸ œžœžœ žœ˜9Jšžœžœ žœžœ˜9J˜—Jš Ÿ œžœ4žœžœžœ˜VJ˜JšŸœžœžœžœ ˜-J˜šŸ œžœ"˜4Jšžœžœ˜J˜—šŸœžœ0žœ˜HJšžœ˜$J˜—Jšœ™J˜Jš œžœžœž œžœ žœ˜;J˜šŸœžœ žœžœžœžœžœ˜>Jšœ ™ J˜PJ˜—šŸ œžœžœ žœ˜