TJaMStorage.mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
Last edit by Doug Wyatt, 7-Oct-81 16:40:17
Michael Plass, February 14, 1985 12:28:23 pm PST
Zone: PROC RETURNS[UNCOUNTED ZONE];
Prune: PROC;
Expanding text operations
TextObject: TYPE = PRIVATE RECORD[text,cache: LONG STRING, len,max,lim: CARDINAL];
TextNew:
PROC[s:
LONG
STRING, lim:
CARDINAL ←
LAST[
NAT]]
RETURNS[TextObject] =
INLINE {
RETURN[[text: s, cache: s, len: 0, max: s.maxlength, lim: lim]] };
TextPut:
PROC[t:
POINTER
TO TextObject, c:
CHARACTER] =
INLINE {
i: CARDINAL = t.len; IF i<t.max THEN { t.text[i] ← c; t.len ← i + 1 }
ELSE PrivateTextPut[t,c] };
TextRead:
PROC[t:
POINTER
TO TextObject]
RETURNS[
LONG
STRING] =
INLINE {
s: LONG STRING ← t.text; s.length ← t.len; RETURN[s] };
TextLen: PROC[t: POINTER TO TextObject] RETURNS[CARDINAL] = INLINE { RETURN[t.len] };
TextReset: PROC[t: POINTER TO TextObject] = INLINE { t.len ← 0 };
TextFree:
PROC[t:
POINTER
TO TextObject] =
INLINE {
IF t.text#t.cache THEN PrivateTextFree[t]; t.max ← t.lim ← 0 };
PrivateTextPut: PRIVATE PROC[t: POINTER TO TextObject, c: CHARACTER];
PrivateTextFree: PRIVATE PROC[t: POINTER TO TextObject];
}.