DIRECTORY
BasicTime: TYPE USING [GMT, nullGMT],
Buttons: TYPE USING [Button, ButtonProc],
Commander: TYPE USING [CommandProc, Register],
Containers: TYPE USING [ChildXBound, ChildYBound, Container, Create],
CS: TYPE USING [EndsIn, GMTFromRope, Init, RootName, RopeFromGMT, ShortName],
FS:
TYPE
USING [
OpenFile, nullOpenFile,
Create, Error, FileInfo, GetInfo, GetName, Open, StreamFromOpenFile],
IO: TYPE USING [card, Close, PutChar, PutF, PutFR, PutRope, RIS, rope, STREAM, time],
Labels: TYPE USING [Create, Label, Set, SetDisplayStyle],
List: TYPE USING [DRemove],
MBQueue: TYPE USING [Create, CreateMenuEntry, CreateButton, Flush, Queue],
Menus: TYPE USING [CreateEntry, CreateMenu, InsertMenuEntry, Menu, MenuProc],
Process: TYPE USING [Abort, CheckForAbort, GetCurrent],
ProcessProps: TYPE USING [GetProp],
Rope: TYPE USING [Concat, Equal, Find, Flatten, IsEmpty, Length, ROPE, Substr, Text],
Rules: TYPE USING [Create, Rule],
SMBcd: TYPE USING [WriteModelBcd],
SMComp: TYPE USING [CompileAll, LoadCompiler],
SMDF: TYPE USING [WriteDFFile],
SMEval: TYPE USING [Equiv, Eval],
SMFI: TYPE USING [SrcFileInfo],
SMFIOps:
TYPE
USING [
Ambiguous, EvaluateUnitId, Reset, NewestBcd, NewestSource, UnitToRope],
SMLDriver: TYPE USING [Bind, LoadAndBind, Loaded, StartAll, Started, Unload],
SMOps: TYPE USING [MS, NewModel, PatchList],
SMProj: TYPE USING [Proj, Reset],
SMUtil: TYPE USING [ParseStream, PrettyPrint, PrintTree],
SMTree: TYPE Tree USING [Ext, Handle, Link, null],
SMTreeOps:
TYPE TreeOps
USING [
GetExt, Initialize, Finalize, Map, NthSon, OpName, PutExt, PutNthSon,
Scan, ScanSons, UpdateLeaves],
TiogaMenuOps: TYPE USING [Open],
TypeScript: TYPE USING [TS, Create],
ViewerClasses: TYPE USING [Viewer],
ViewerEvents:
TYPE
USING [
EventProc, EventRegistration, RegisterEventProc, UnRegisterEventProc],
ViewerIO: TYPE USING [CreateViewerStreams],
ViewerOps:
TYPE
USING [
AddProp, EstablishViewerPosition, FetchProp, PaintViewer, SetMenu, SetOpenHeight],
ViewerTools:
TYPE
USING [
EnableUserEdits, GetContents, GetSelectionContents, InhibitUserEdits, MakeNewTextViewer,
SetContents, SetSelection];
Abort: Menus.MenuProc ~
TRUSTED {
not on the queue
g: Global ~ NARROW[clientData];
(g.q).Flush[];
IF g.process # NIL THEN Process.Abort[g.process]}; -- not properly monitored
Begin: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
InternalUnload[g, TRUE];
IF g.state = $idle OR g.modelSuperseded THEN InternalStartModel[g];
InternalParse[g, TRUE];
IF g.state >= $parsed THEN ClearExtensions[g.model.tree];
InternalCheck[g];
InternalCompile[g, FALSE];
InternalLoad[g, FALSE];
InternalStart[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Begin aborted\n"]};
};
Bind: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
IF g.state = $idle OR g.modelSuperseded THEN InternalStartModel[g];
InternalParse[g, TRUE];
InternalCheck[g];
InternalCompile[g, g.replaceable];
InternalBind[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Bind aborted\n"]};
};
SetState[g, g.state]};
Check: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
IF g.state = $idle OR g.modelSuperseded THEN InternalStartModel[g];
InternalParse[g, TRUE];
InternalCheck[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Check aborted\n"]};
};
SetState[g, g.state]};
Compile: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
IF g.state = $idle OR g.modelSuperseded THEN InternalStartModel[g];
InternalParse[g, TRUE];
InternalCheck[g];
InternalCompile[g, FALSE];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Compile aborted\n"]};
};
Continue: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
IF g.state = $idle OR g.modelSuperseded THEN InternalStartModel[g];
InternalParse[g, TRUE];
InternalCheck[g];
InternalCompile[g, g.replaceable];
InternalLoad[g, g.replaceable];
InternalStart[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Continue aborted\n"]};
};
SetState[g, g.state]};
Debug: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.ttyout.PutRope["---------------\n"];
IF g.state = $idle
THEN {
ENABLE ABORTED => {GOTO out};
g.model ← SMOps.NewModel[g.ttyin, g.ttyout, g.ttyout];
(g.model.tm).Initialize;
g.model.tree ← SMUtil.ParseStream[g.model, IO.RIS[ViewerTools.GetSelectionContents[]]];
IF g.model.tree # Tree.null
THEN {
IF g.debugLevel <= 1 THEN SMUtil.PrintTree[g.model, g.model.tree];
SMUtil.PrettyPrint[g.model.out, g.model.tree, g.model.comments]};
IF g.model.tree # Tree.null
THEN {
g.model.val ← SMEval.Eval[g.model, g.model.tree, NIL];
g.model.out.PutRope["\n\n"];
SMUtil.PrintTree[g.model, g.model.val];
SMUtil.PrettyPrint[g.model.out, g.model.val, NIL];
g.model.val ← NIL};
g.model ← NIL;
EXITS
out => {g.ttyout.PutRope["Debug aborted\n"]};
};
g.ttyout.PutRope["---------------\n"]};
Load: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
InternalLoad[g, FALSE];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Load aborted\n"]};
};
SetState[g, g.state]};
MakeDFFile: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
IF g.state >= $checked
THEN {
InternalTemporary[g];
SMDF.WriteDFFile[g.model, g.model.val, g.modelFileName]};
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["MakeDFFile aborted\n"]};
};
};
MakeModelBcd: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
IF g.state >= $checked
THEN {
InternalTemporary[g];
SMBcd.WriteModelBcd[g.model, g.model.val, g.modelFileName]};
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["MakeModelBcd aborted\n"]};
};
};
NewModeller: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
[] ← Create[ViewerTools.GetContents[g.wDirNameViewer]]};
NoticeAll: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
InternalNoticeAll[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["NoticeAll aborted\n"]};
};
};
Open: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
OpenViewer[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Open aborted\n"]};
};
};
StartModel: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
InternalStartModel[g];
InternalParse[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["StartModelling aborted\n"]};
};
SetState[g, g.state]};
Start: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
InternalStart[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Start aborted\n"]};
};
SetState[g, g.state]};
StopModel: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
InternalStopModel[g];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["StopModelling aborted\n"]};
};
SetState[g, $idle]};
Unload: Menus.MenuProc ~ {
g: Global ~ NARROW[clientData];
g.process ← Process.GetCurrent[];
{
ENABLE ABORTED => {GOTO out};
InternalUnload[g, TRUE];
g.process ← NIL;
EXITS
out => {g.ttyout.PutRope["Unload aborted\n"]};
};
SetState[g, g.state]};