-- TSJaM.mesa; Typescript for JaM
-- Written by Werner Winiger, August, 1981.
-- last edited by Paxton, 15-Sep-81 11:40:13

DIRECTORY
  JaMIODefs USING [DirectUserOutput, AppendUserLine],
  JaMControlDefs USING [RunJaM],
  ViewerMenus USING [Destroy, Grow, Close],
  Menus USING [Menu, CreateMenu, InsertMenuEntry, MenuProc],
  Process USING [Detach],
  Rope USING [Ref],
  TypeScript USING [Typescript, TSLineProc, CreateTypescript, ClientPutChar];
  
TSJaM: PROGRAM
IMPORTS JaMIODefs, JaMControlDefs, ViewerMenus, Menus, Process, TypeScript = {

JaMtypescript: TypeScript.Typescript;

-- the output procedure to be called from JaM:
PutChar: PROC[ch: CHARACTER] = {IF ~TSdestroyed THEN
	TypeScript.ClientPutChar[JaMtypescript, ch]};

-- the input procedure to be called from the typescript:
TakeLine: PROC [ts: TypeScript.Typescript, line: Rope.Ref] = {
  JaMIODefs.AppendUserLine[line] };

TSdestroyed: BOOLEAN ← FALSE;

WatchedDestroy: Menus.MenuProc = {
  TSdestroyed ← TRUE;
  ViewerMenus.Destroy[info];
  };
  
JaMmenu: Menus.Menu ← Menus.CreateMenu[];

-- main code --

Start: PROC = {
	JaMIODefs.DirectUserOutput[PutChar];
	JaMtypescript ← TypeScript.CreateTypescript[
		 line: TakeLine, name: "*JaM*", iconic: TRUE, fork: FALSE];
	Menus.InsertMenuEntry[JaMmenu, "Destroy", WatchedDestroy, TRUE];
	Menus.InsertMenuEntry[JaMmenu, "Grow", ViewerMenus.Grow];
	Menus.InsertMenuEntry[JaMmenu, "Close", ViewerMenus.Close];
	JaMtypescript.menu ← JaMmenu;
	Process.Detach[FORK JaMControlDefs.RunJaM[]] };

Start;

}.


Paxton   15-Sep-81 11:13:14
   changed to fork RunJaM and pass lines directly to jam io