MODULE menus; (* Menu bar demo: File / Edit / Help with a status line. *) FROM InOut IMPORT WriteString, WriteLn; IMPORT tv; CONST mNew = 100; mQuit = 101; mCut = 102; mCopy = 103; mAbout = 104; VAR e : tv.Event; quit : BOOLEAN; st : tv.ViewPtr; cmd : INTEGER; msg, tmp : ARRAY [0..95] OF CHAR; PROCEDURE Show(s : ARRAY OF CHAR); BEGIN tv.SetText(st, s); tv.Finish END Show; BEGIN IF NOT tv.Init() THEN WriteString("not a tty"); WriteLn; HALT END; st := tv.NewView(tv.VText, 0, tv.Rows() - 1, tv.Cols(), 1); tv.AddView(tv.Desk(), st); tv.MenuBarInit; tv.MenuAdd("File"); tv.MenuItemAdd("New", mNew); tv.MenuSep; tv.MenuItemAdd("Quit", mQuit); tv.MenuAdd("Edit"); tv.MenuItemAdd("Cut", mCut); tv.MenuItemAdd("Copy", mCopy); tv.MenuAdd("Help"); tv.MenuItemAdd("About", mAbout); Show(" Choose a menu with the mouse or F10"); quit := FALSE; WHILE NOT quit DO IF tv.Resized() THEN tv.Finish END; IF tv.ReadEvent(e) THEN IF (e.kind = tv.evKey) AND (e.key = tv.kEsc) THEN quit := TRUE ELSE cmd := tv.HandleEvent(e); IF cmd = mQuit THEN quit := TRUE ELSIF cmd = mAbout THEN IF tv.MessageBox("About", "tvision-m2", tv.mbOK) = tv.cmOK THEN END; Show(" About closed") ELSIF cmd >= 100 THEN tv.CopyText(msg, " Command #"); tv.IntToText(tmp, cmd, 0); tv.AppendText(msg, tmp); Show(msg) END END; IF NOT quit THEN tv.Finish END END END; tv.Done END menus.