<> <> <> <> DIRECTORY Ascii USING [Digit], MTMiscOps, Rope USING [Cat, Equal, Fetch, FromChar, IsEmpty, Length, ROPE, Translate, TranslatorType]; MTMiscOpsImpl: CEDAR PROGRAM IMPORTS Ascii, Rope EXPORTS MTMiscOps = BEGIN OPEN MTMiscOps; Lookup: PUBLIC PROC [name: Rope.ROPE, table: Table] RETURNS [BOOL] = { <> WHILE table # NIL DO IF name.Equal[table.first, FALSE] THEN RETURN [TRUE]; table _ table.rest; ENDLOOP; RETURN [FALSE]; }; AToI: PUBLIC PROC [r: Rope.ROPE] RETURNS [i: INT] ~ { <> j: INT; i _ 0; FOR j _ 0, j+1 WHILE j < r.Length AND Ascii.Digit[r.Fetch[j]] DO i _ i*10 + (r.Fetch[j]-'0); ENDLOOP; }; IToA: PUBLIC PROC [i: INT] RETURNS [r: Rope.ROPE] ~ { <> minus: BOOL ~ i < 0; IF minus THEN i _ -i; r _ NIL; WHILE i > 0 DO r _ Rope.Cat[Rope.FromChar[i MOD 10 + '0], r]; i _ i / 10; ENDLOOP; IF r.IsEmpty THEN r _ "0"; IF minus THEN r _ Rope.Cat["-", r]; }; Substitute: PUBLIC PROC [r: Rope.ROPE, oldChar, newChar: CHAR] RETURNS [newR: Rope.ROPE] ~ { <> Translator: Rope.TranslatorType ~ { IF old = oldChar THEN RETURN [newChar] ELSE RETURN [old]; }; RETURN [r.Translate[translator: Translator]]; }; END.