-- StateCold.mesa last edit: Sandman July 18, 1980 11:44 AM -- last edit: Bruce 26-Sep-80 13:04:07 DIRECTORY Commands USING [DispatchChar, StringId], DebugOps USING [fileSW], Event USING [Notify], DHeap USING [FreeEverything, Zero], HeapString USING [Replace], Init USING [], Nub USING [DoCommand], Profile USING [], State USING [Context, GSHandle, GState, Handle, SetParse, Stack, StringArray, StringProc, Strings], Storage USING [Free, FreeString, Node, String], TajoMisc USING [], TextSource USING [Handle], TextSW USING [Adjust, GetSource], ToolWindow USING [AdjustProcType, TransitionProcType], UserInput USING [SetStringIn]; StateCold: PROGRAM IMPORTS Commands, DebugOps, Event, DHeap, HeapString, Nub, State, Storage, TextSW, UserInput EXPORTS Init, Profile, State, TajoMisc = BEGIN OPEN State; debugging: PUBLIC BOOLEAN _ FALSE; librarian: PUBLIC STRING _ NIL; registry: PUBLIC STRING _ NIL; userName: PUBLIC STRING; userPassword: PUBLIC STRING; top: PUBLIC Handle _ NIL; strings: PUBLIC Strings; gstate: GState _ []; gs: PUBLIC GSHandle _ @gstate; OutOfState: PUBLIC ERROR = CODE; Adjust: PUBLIC ToolWindow.AdjustProcType = BEGIN IF when = after THEN TextSW.Adjust[DebugOps.fileSW, [[0,0], box.dims], when]; END; Transition: PUBLIC ToolWindow.TransitionProcType = { source: TextSource.Handle; IF new # tiny THEN RETURN; source _ TextSW.GetSource[DebugOps.fileSW]; [] _ source.actOn[source,truncate]}; -- TajoMisc SetDebugging: PUBLIC PROC [debug: BOOLEAN] = BEGIN debugging _ debug; Event.Notify[setDefaults]; END; SetLibrarian: PUBLIC PROCEDURE [s: STRING] = BEGIN HeapString.Replace[to: @librarian, from: s]; Event.Notify[setDefaults]; END; SetRegistry: PUBLIC PROCEDURE [s: STRING] = BEGIN HeapString.Replace[to: @registry, from: s]; Event.Notify[setDefaults]; END; -- strings SetString: PUBLIC PROCEDURE [id: Commands.StringId, val: STRING] = BEGIN IF strings[id] # NIL THEN Storage.FreeString[strings[id]]; strings[id] _ val; END; -- context Push: PUBLIC PROCEDURE = BEGIN temp: Handle _ MakeContext[]; temp.prev _ top; IF top.prev = NIL THEN DHeap.FreeEverything[]; gs.level _ gs.level+1; top_temp; top.howSet _ state; END; Pop: PUBLIC PROCEDURE = BEGIN temp: Handle; i, next: POINTER TO Stack; IF top = NIL THEN ERROR OutOfState; temp _ top.prev; FOR i _ top.fooStack, next UNTIL i = NIL DO next _ i.link; Storage.Free[i]; ENDLOOP; DHeap.FreeEverything[]; Storage.Free[top]; top _ temp; gs.level _ gs.level-1; END; ResetParse: PUBLIC PROC = {SetParse[IF gs.inNub THEN Nub.DoCommand ELSE Commands.DispatchChar]}; MakeContext: PROCEDURE RETURNS [h: Handle] = BEGIN h _ Storage.Node[SIZE[Context]]; h^ _ []; END; Go: PUBLIC PROCEDURE = BEGIN top _ MakeContext[]; [] _ UserInput.SetStringIn[DebugOps.fileSW, State.StringProc, FALSE] END; OnYourMark: PUBLIC PROCEDURE = BEGIN p: POINTER _ Storage.Node[SIZE[StringArray]]; strings _ DESCRIPTOR[p,SIZE[StringArray]]; DHeap.Zero[p,SIZE[StringArray]]; gs.parse _ Commands.DispatchChar; strings[user] _ userName _ Storage.String[30]; strings[password] _ userPassword _ Storage.String[30]; END; END.