--ILTSetProfileImpl.mesa --Created by -- JFung.PASA 15-Nov-83 15:44:26 --last edited by -- JFung.PASA 23-Jan-84 11:10:41 DIRECTORY Cursor, Event, EventTypes USING [deactivate], Exec, Format USING [StringProc], FormSW USING [ AllocateItemDescriptor, ClientItemsProcType, CommandItem, Destroy, Display, FindItem, FreeHintsProcType, ItemHandle, MenuProcType, newLine, ProcType, SetTagPlaces, StringItem], Heap USING [systemZone], LispToolOps, Process, Put, Runtime USING [GetBcdTime], String, Supervisor USING [ AddDependency, AgentProcedure, CreateSubsystem, EnumerationAborted, RemoveDependency, SubsystemHandle], Time USING [Append, Unpack], Tool USING [ Create, Destroy, MakeFileSW, MakeFormSW, MakeMsgSW, MakeSWsProc, UnusedLogName], ToolDriver USING [Address, NoteSWs, RemoveSWs], ToolWindow USING [Activate, Deactivate, DisplayProcType, TransitionProcType], UserInput, Version USING [Append], Window USING [GetDisplayProc, Handle]; ILTSetProfileImpl: PROGRAM IMPORTS Cursor, Event, Exec, FormSW, Heap, LispToolOps, Process, Put, Runtime, String, Supervisor, Time, Tool, ToolDriver, ToolWindow, UserInput, Version, Window EXPORTS LispToolOps = BEGIN OPEN ILT: LispToolOps; DataHandle: TYPE = LONG POINTER TO Data; Data: TYPE = MACHINE DEPENDENT RECORD [ -- Message subwindow stuff msgSW(0): Window.Handle ← NIL, -- File subwindow stuff fileSW(2): Window.Handle ← NIL, -- Form subwindow stuff -- Note: enumerateds and booleans must be word boundary -- aligned as addresses for them must be generated --formSW: Window.Handle ← NIL, paramSW(4): Window.Handle ← NIL, commandSW(6): Window.Handle ← NIL, busy(8): BOOLEAN ← FALSE, -- command is running userName(9): LONG STRING ← NIL, userPassword(11): LONG STRING ← NIL, domainName(13): LONG STRING ← NIL, organizationName(15): LONG STRING ← NIL, filePathName(17): LONG STRING ← NIL, volName(19): LONG STRING ← NIL, volHints(21): LONG POINTER TO VolHints ← NIL, volPassword(23): LONG STRING ← NIL, vMemSize(25): File.PageCount ← 0, fileTable(27): LONG POINTER TO SizeHints ← NIL, connection(29): FileTransfer.Connection ← NIL, indicator(31): Indicator ← left, docType(32): DocType ← general, fileServer(33): ServerType ← NS]; debug: BOOLEAN ← FALSE; toolData: DataHandle ← NIL; windowHandle: Window.Handle ← NIL; active: BOOLEAN ← FALSE; agent: Supervisor.SubsystemHandle = Supervisor.CreateSubsystem[ CheckDeactivate]; formDisplay: ToolWindow.DisplayProcType ← NIL; heraldName: STRING ← [50]; CheckDeactivate: Supervisor.AgentProcedure = BEGIN IF event = EventTypes.deactivate AND windowHandle # NIL AND windowHandle = eventData AND toolData.busy THEN BEGIN Put.Line[toolData.msgSW, "The tool is busy: aborting deactivation"L]; ERROR Supervisor.EnumerationAborted; END; END; --CheckDeactivate ClearCommandSubwindow: PROCEDURE = BEGIN item: FormSW.ItemHandle; FOR i: CARDINAL ← 0, i + 1 UNTIL (item ← FormSW.FindItem[ILT.toolData.commandSW, i]) = NIL DO item.flags.invisible ← TRUE ENDLOOP; FormSW.Display[toolData.commandSW]; END; ClearFileSubwindow: PROCEDURE = BEGIN item: FormSW.ItemHandle; FOR i: CARDINAL ← 0, i + 1 UNTIL (item ← FormSW.FindItem[ILT.toolData.fileSW, i]) = NIL DO item.flags.invisible ← TRUE ENDLOOP; FormSW.Display[ILT.toolData.fileSW]; formDisplay ← Window.GetDisplayProc[ILT.toolData.fileSW]; END; ClearMsgSubwindow: PROCEDURE = BEGIN item: FormSW.ItemHandle; FOR i: CARDINAL ← 0, i + 1 UNTIL (item ← FormSW.FindItem[toolData.msgSW, i]) = NIL DO item.flags.invisible ← TRUE ENDLOOP; FormSW.Display[toolData.msgSW]; formDisplay ← Window.GetDisplayProc[toolData.msgSW]; END; ClearSubWindows: PROCEDURE = BEGIN --ClearFileSubwindow; ClearMsgSubwindow; END; ClientTransition: ToolWindow.TransitionProcType = -- This procedure is called whenever the system determines that this -- Tool's state is undergoing a user invoked transition. -- In this Example we demonstrate a technique that minimizes the memory -- requirements for a Tool that is inactive. BEGIN SELECT TRUE FROM old = inactive => BEGIN IF toolData = NIL THEN toolData ← Heap.systemZone.NEW[Data ← []]; --ProcessUserDotCM[]; active ← TRUE; END; new = inactive => BEGIN Supervisor.RemoveDependency[ client: agent, implementor: Event.toolWindow]; IF toolData # NIL THEN BEGIN FormSW.Destroy[toolData.paramSW]; FormSW.Destroy[toolData.commandSW]; Heap.systemZone.FREE[@toolData]; END; --ToolDriver.RemoveSWs[tool: "LispTool"L]; active ← FALSE; END; ENDCASE END; Confirm: PROCEDURE RETURNS [okay: BOOLEAN] = BEGIN Cursor.Set[mouseRed]; [, okay] ← UserInput.WaitForConfirmation[]; Cursor.Set[textPointer]; UserInput.WaitNoButtons[]; END; --Confirm FormSWMakeUserCM: FormSW.ProcType = BEGIN toolData.busy ← TRUE; ClearSubWindows; IF Confirm[] THEN MakeUserCM[]; toolData.busy ← FALSE; END; --FormSWMakeUserCM FormSWQuitProc: FormSW.ProcType = BEGIN IF debug THEN { Put.Line[toolData.fileSW, "Quit Proc..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; [] ← ToolWindow.Deactivate[windowHandle]; END; --FormSWQuitProc Init: PROCEDURE = BEGIN --h: Exec.Handle; --execWrite: Format.StringProc ← Exec.OutputProc[h]; --execWrite["Creating tool window.."L]; --Process.Pause[Process.SecondsToTicks[5]]; Exec.AddCommand["SetDomain.~"L, SetDomainExec, Unload]; --IF (windowHandle # NIL) AND ~active THEN -- ToolWindow.Activate[windowHandle] --ELSE windowHandle ← MakeTool[]; END; SetDomainExec: Exec.ExecProc = BEGIN execWrite: Format.StringProc ← Exec.OutputProc[h]; --execWrite["Creating tool window.."L]; --Process.Pause[Process.SecondsToTicks[5]]; IF (windowHandle # NIL) AND ~active THEN ToolWindow.Activate[windowHandle] ELSE windowHandle ← MakeTool[]; END; MakeCommands: FormSW.ClientItemsProcType = BEGIN OPEN FormSW; tabs: ARRAY [0..3) OF CARDINAL ← [0, 30, 60]; nItems: CARDINAL = 2; items ← AllocateItemDescriptor[nItems]; items[0] ← CommandItem[ tag: "Set Domain/Organization"L, place: newLine, proc: FormSWMakeUserCM]; -- newLine is required, else will get 915 trap --items[1] ← CommandItem[tag: "Set Volume Password"L, proc: FormSWQuitProc]; items[1] ← CommandItem[tag: "Quit"L, proc: FormSWQuitProc]; SetTagPlaces[items, DESCRIPTOR[tabs], FALSE]; RETURN[items, TRUE]; END; MakeParams: FormSW.ClientItemsProcType = BEGIN OPEN FormSW; tabs: ARRAY [0..7) OF CARDINAL ← [0, 28, 52, 56, 60, 68, 75]; nItems: CARDINAL = 2; items ← AllocateItemDescriptor[nItems]; items[0] ← StringItem[ tag: "Domain"L, string: @ILT.toolData.domainName, inHeap: TRUE, place: newLine]; items[1] ← StringItem[ tag: "Organization"L, string: @ILT.toolData.organizationName, inHeap: TRUE]; << items[2] ← StringItem[ tag: "Volume"L, string: @ILT.toolData.volName, inHeap: TRUE, place: newLine]; items[3] ← StringItem[ tag: "Volume Password"L, string: @ILT.toolData.volPassword, --feedback: password, inHeap: TRUE]; >> SetTagPlaces[items, DESCRIPTOR[tabs], FALSE]; RETURN[items, TRUE] END; MakeSWs: Tool.MakeSWsProc = BEGIN logName: STRING ← [40]; addresses: ARRAY [0..4) OF ToolDriver.Address; Tool.UnusedLogName[unused: logName, root: "SetProfile.log"L]; toolData.msgSW ← Tool.MakeMsgSW[window: window, lines: 1]; toolData.paramSW ← Tool.MakeFormSW[ window: window, formProc: MakeParams]; toolData.commandSW ← Tool.MakeFormSW[ window: window, formProc: MakeCommands]; toolData.fileSW ← Tool.MakeFileSW[window: window, name: logName]; Supervisor.AddDependency[client: agent, implementor: Event.toolWindow]; -- do the ToolDriver stuff addresses ← [ [name: "msgSW"L, sw: ILT.toolData.msgSW], --[name: "formSW"L, sw: ILT.toolData.formSW], [name: "ParamSW"L, sw: ILT.toolData.paramSW], [ name: "CmdSW"L, sw: ILT.toolData.commandSW], [ name: "fileSW"L, sw: ILT.toolData.fileSW]]; ToolDriver.NoteSWs[ tool: "MakeUserCMTool"L, subwindows: DESCRIPTOR[addresses]]; END; MakeTool: PROCEDURE RETURNS [wh: Window.Handle] = BEGIN String.AppendString[heraldName, "XSIS:Xerox Profile Tool "L]; String.AppendString[heraldName, " of "L]; Time.Append[heraldName, Time.Unpack[Runtime.GetBcdTime[]]]; heraldName.length ← heraldName.length - 3; String.AppendString[heraldName, " on Pilot Version "L]; Version.Append[heraldName]; RETURN[ Tool.Create[ makeSWsProc: MakeSWs, initialState: default, clientTransition: ClientTransition, name: heraldName, tinyName1: "Profile"L, tinyName2: "Tool"L]] END; ProfileToolActivate: PUBLIC PROCEDURE = BEGIN IF windowHandle = NIL THEN windowHandle ← MakeTool[]; ToolWindow.Activate[windowHandle]; Window.Stack[ windowHandle, Window.GetChild[ Window.GetParent[windowHandle]]]; -- top me Window.ValidateTree[]; END; --ProfileToolActivate Unload: Exec.ExecProc = BEGIN IF windowHandle # NIL THEN Tool.Destroy[windowHandle]; ILT.windowHandle ← NIL; [] ← Exec.RemoveCommand[h, "SetProfile.~"L]; END; -- Mainline code Init[]; END...