-- NodeStyleExtra.mesa
-- Written by Bill Paxton, January 1981
-- Last changed by Bill Paxton, 3-Jun-81 13:43:08

-- Internal defs for NodeStyle modules

DIRECTORY
	NodeStyle,
	TextNode,
	TextLooks,
	JaMOtherDefs,
	TiogaJaM;

NodeStyleExtra: DEFINITIONS
	IMPORTS NodeStyle, JaMOtherDefs, TiogaJaM =
BEGIN OPEN
	NodeStyle,
	nodeI:TextNode,
	looksI:TextLooks,
	tjI:TiogaJaM,
	jamI:JaMOtherDefs;

StyleCommand: PROC [text: REF TEXT, proc: PROC];

StyleLiteral: PROC [text: REF TEXT] RETURNS [name: tjI.JaMName];

Command: TYPE = jamI.Command;

cvlit, cvx, def, put, get, dict, attachdict, detachall, abind,
	begin, end, run, load, clrdict, where, known, assign, finishSubStyle:
	Command;

GetCommand: PROC [name: tjI.JaMName] RETURNS [c: Command];

-- Inlines

ExecuteCommand: PROC [c: Command] = INLINE {
	jamI.ExecuteCommand[c] };

PushCommand: PROC [c: Command] = INLINE {
	jamI.PushCommand[c] };

Object: TYPE = jamI.Obj;

PushObject: PROC [ob: Object] = INLINE {
	jamI.PushObj[ob] };

PopObject: PROC RETURNS [Object] = INLINE {
	RETURN[jamI.PopObj[]] };

PushName: PROC [name: tjI.JaMName] = INLINE {
	jamI.PushName[LOOPHOLE[name]] };

PopName: PROC RETURNS [tjI.JaMName] = INLINE {
	RETURN [LOOPHOLE[jamI.PopName[]]] };

ExecuteName: PROC [name: tjI.JaMName] RETURNS [BOOLEAN] = INLINE {
	RETURN[jamI.ExecuteName[LOOPHOLE[name]]] };

EvalName: PROC [name: tjI.JaMName] = INLINE {
	IF ~jamI.ExecuteName[LOOPHOLE[name]] THEN ERROR StyleError };

TryToPopName: PROC RETURNS [name: tjI.JaMName, ok: BOOLEAN] = INLINE {
	jname: jamI.Name;
	[jname, ok] ← jamI.TryToPopName[];
	RETURN [LOOPHOLE[jname],ok]};

PopNameOrReal: PROC RETURNS
	[flag: BOOLEAN, name: tjI.JaMName, value: REAL] = INLINE {
	jname: jamI.Name;
	[flag, jname, value] ← jamI.PopNameOrReal[];
	RETURN [flag, LOOPHOLE[jname], value]};

MakeName: PROC [txt: REF READONLY TEXT] RETURNS [tjI.JaMName] = INLINE {
	RETURN [LOOPHOLE[tjI.MakeName[LOOPHOLE[txt]]]] };

-- ***** Initialization

StartExtra: PROC; -- for initialization only

END.