WITH tv
SELECT
FROM
tvo: IntegerTVHandle =>
BEGIN
IF tvo.value<0
THEN
--<<How should we fixc this kludge??>> --
{PutLongCardinal [h, 0]; PutOperator [h, minus]; PutLongCardinal [h, -tvo.value]}
ELSE PutLongCardinal [h, tvo.value];
END;
tvo: AtomTVHandle => PutISAtom [h, tvo.value];
tvo: StringTVHandle =>
BEGIN
list: ISToken.TVHandle ← tvo.list;
OutputByte [data, '"];
WHILE list#
NIL
DO
PutTVObject [h, list];
list ← list.next;
IF list#NIL AND data.mayNeedSeparatorBlank THEN OutputByte [data, ' ];
data.mayNeedSeparatorBlank ← FALSE;
ENDLOOP;
OutputByte [data, '"];
END;
tvo: DollarTVHandle => PutTag [h, tvo.value];
tvo: CharactersTVHandle => PutXStringLiteral [h, @tvo.value];
tvo: PlusTVHandle => PutOperator [h, plus];
tvo: MinusTVHandle => PutOperator [h, minus];
tvo: TimesTVHandle => PutOperator [h, times];
tvo: DivideTVHandle => PutOperator [h, divide];
tvo: GetsTVHandle => PutOperator [h, gets];
tvo: LeftCurlyTVHandle => PutOperator [h, leftCurly];
tvo: RightCurlyTVHandle => PutOperator [h, rightCurly];
tvo: PushTVHandle => PutOperator [h, push];
tvo: PopTVHandle => PutOperator [h, pop];
tvo: NodeTVHandle => ISNode.Externalize [tvo.isnode, h];
tvo: NullTVHandle => NULL;
ENDCASE => ERROR; -- we should handle all possibilities above --