-- RegisterInterDocCommands.mesa
-- written by Bill Paxton, 5-Oct-81
-- last edit by Bill Paxton,  5-Oct-81  9:54:03

DIRECTORY
InterFile,
PutGet,
CVExecutive,
Rope,
WindowManager,
TypeScript;

RegisterInterDocCommands: PROGRAM
	IMPORTS InterFile, PutGet, CVExecutive, Rope, WindowManager, TypeScript =
BEGIN

WriteInterDoc: PROC [ts: TypeScript.Typescript, param: Rope.Ref] = {
	ok: BOOLEAN;
	destname, sourcename: Rope.Ref;
	[ok, destname, sourcename] ← GetArgs[ts, param];
	IF ~ok THEN RETURN;
	WindowManager.WaitCursor[];
	[] ← InterFile.ToFile[destname, PutGet.FromFile[sourcename]];
	WindowManager.UnWaitCursor[];
	TypeScript.ClientPutRope[ts, "Done."] };

ReadInterDoc: PROC [ts: TypeScript.Typescript, param: Rope.Ref] = {
	ok: BOOLEAN;
	destname, sourcename: Rope.Ref;
	[ok, destname, sourcename] ← GetArgs[ts, param];
	IF ~ok THEN RETURN;
	WindowManager.WaitCursor[];
	[] ← PutGet.ToFile[destname, InterFile.FromFile[sourcename]];
	WindowManager.UnWaitCursor[];
	TypeScript.ClientPutRope[ts, "Done."] };

GetArgs: PROC [ts: TypeScript.Typescript, param: Rope.Ref] RETURNS
	[ok: BOOLEAN, destname, sourcename: Rope.Ref] = {
	arrow: Rope.Ref;
	offset: LONG INTEGER;
	[destname, offset] ← CVExecutive.GetToken[param];
	[arrow, offset] ← CVExecutive.GetToken[param, offset];
	[sourcename, offset] ← CVExecutive.GetToken[param, offset];
	IF ~Rope.Equal[arrow, "←"] OR Rope.Size[sourcename]=0 OR Rope.Size[destname]=0 THEN {
		TypeScript.ClientPutRope[ts,
			"Error.  Command line must be of the form <destname> ← <sourcename>"];
		ok ← FALSE }
	ELSE ok ← TRUE };

CVExecutive.AddCommand["WriteInterDoc", WriteInterDoc,
	"Reads Tioga format and writes InterDoc format.
	Command line of form <destname> ← <sourcename>"];

CVExecutive.AddCommand["ReadInterDoc", ReadInterDoc,
	"Reads InterDoc format and writes Tioga format.
	Command line of form <destname> ← <sourcename>"];

END.