--LTLoginImpl.mesa --Created by -- JFung.PASA 29-Sep-83 14:53:01 -- Modified version taken from Profile.mesa --last edited by -- JFung.PASA 7-Oct-83 9:58:07 DIRECTORY FormSW USING [Display, FindItem, ItemHandle, ProcType], Heap USING [systemZone], LispToolOps, Process, Profile USING [ debugging, GetDefaultDomain, GetDefaultOrganization, GetDefaultRegistry, GetLibrarian, GetLibrarianNames, GetUser, SetDebugging, SetDefaultDomain, SetDefaultOrganization, SetDefaultRegistry, SetLibrarian, SetUser], Put, String USING [CopyToNewString, EquivalentString, Replace], Supervisor USING [AgentProcedure, CreateSubsystem, SubsystemHandle]; LTLoginImpl: PROGRAM IMPORTS FormSW, Heap, LispToolOps, Process, Profile, Put, String EXPORTS LispToolOps = BEGIN OPEN ILT: LispToolOps; z: UNCOUNTED ZONE = Heap.systemZone; ProfileItem: TYPE = { apply, user, password, registry, abort, domain, organization, debug, librarian, prefix, suffix}; -- if the positions of apply and abort change, you must edit ToggleCommands dirty: PACKED ARRAY ProfileItem OF BOOLEAN ← ALL[FALSE]; ProfileFields: TYPE = RECORD [ userName: LONG STRING ← NIL, userPassword: LONG STRING ← NIL, domain: LONG STRING ← NIL, organization: LONG STRING ← NIL, registry: LONG STRING ← NIL, librarianName: LONG STRING ← NIL, librarianNamePrefix: LONG STRING ← NIL, librarianNameSuffix: LONG STRING ← NIL]; ProfileData: TYPE = RECORD [ --formSW: Window.Handle ← NIL, debugging: BOOLEAN ← NULL, strings: ARRAY ProfileItem OF LONG STRING ← ALL[NIL], busy: BOOLEAN ← FALSE]; --agent: Supervisor.SubsystemHandle = Supervisor.CreateSubsystem[Notify]; data: LONG POINTER TO ProfileData ← NIL; debug: BOOLEAN ← FALSE; profileInfo: ProfileFields ← []; GetUser: PROCEDURE [name, password: LONG STRING] = { profileInfo.userName ← String.CopyToNewString[name, z]; profileInfo.userPassword ← String.CopyToNewString[password, z]}; GetDefaultDomain: PROCEDURE [domain: LONG STRING] = { profileInfo.domain ← String.CopyToNewString[domain, z]}; GetDefaultOrganization: PROCEDURE [organization: LONG STRING] = { profileInfo.organization ← String.CopyToNewString[organization, z]}; GetDefaultRegistry: PROCEDURE [registry: LONG STRING] = { profileInfo.registry ← String.CopyToNewString[registry, z]}; GetLibrarian: PROCEDURE [librarian: LONG STRING] = { profileInfo.librarianName ← String.CopyToNewString[librarian, z]}; GetLibrarianNames: PROCEDURE [prefix, suffix: LONG STRING] = { profileInfo.librarianNamePrefix ← String.CopyToNewString[prefix, z]; profileInfo.librarianNameSuffix ← String.CopyToNewString[suffix, z]}; GetProfileInfo: PROCEDURE = { Profile.GetUser[GetUser]; Profile.GetDefaultDomain[GetDefaultDomain]; Profile.GetDefaultOrganization[GetDefaultOrganization]; Profile.GetDefaultRegistry[GetDefaultRegistry]; Profile.GetLibrarianNames[GetLibrarianNames]; Profile.GetLibrarian[GetLibrarian]}; FreeProfileInfo: PROCEDURE = BEGIN z.FREE[@profileInfo.userName]; profileInfo.userName ← NIL; z.FREE[@profileInfo.userPassword]; profileInfo.userPassword ← NIL; z.FREE[@profileInfo.domain]; profileInfo.domain ← NIL; z.FREE[@profileInfo.organization]; profileInfo.organization ← NIL; z.FREE[@profileInfo.registry]; profileInfo.registry ← NIL; z.FREE[@profileInfo.librarianName]; profileInfo.librarianName ← NIL; z.FREE[@profileInfo.librarianNamePrefix]; profileInfo.librarianNamePrefix ← NIL; z.FREE[@profileInfo.librarianNameSuffix]; profileInfo.librarianNameSuffix ← NIL; END; DataChanged: FormSW.ProcType = BEGIN dirty[VAL[index]] ← TRUE; IF ~commandsShowing THEN { FormSW.FindItem[sw, ORD[ProfileItem.abort]].flags.invisible ← FALSE; FormSW.FindItem[sw, ORD[ProfileItem.apply]].flags.invisible ← FALSE; FormSW.Display[sw]}; commandsShowing ← TRUE; END; commandsShowing: BOOLEAN ← FALSE; -- since everything is done in the Notifier, no monitor is needed to protect this boolean LoginProc: PUBLIC PROCEDURE = BEGIN data ← Heap.systemZone.NEW[ProfileData]; IF debug THEN { Put.Line[ILT.toolData.fileSW, "Enter LoginProc..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; data.strings[user] ← ILT.toolData.userName; data.strings[password] ← ILT.toolData.userPassword; data.strings[domain] ← ILT.toolData.domainName; data.strings[organization] ← ILT.toolData.organizationName; Apply; Heap.systemZone.FREE[@data]; END; Apply: PROCEDURE = BEGIN ENABLE UNWIND => FreeProfileInfo[]; IF debug THEN { Put.Line[ILT.toolData.fileSW, "Enter Apply..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; IF data = NIL THEN RETURN; IF debug THEN { Put.Line[ILT.toolData.fileSW, "GetProfileInfo..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; GetProfileInfo[]; IF debug THEN { Put.Line[ILT.toolData.fileSW, "UpdatePrimary..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; IF ~Equal[profileInfo.userName, user] OR ~Equal[profileInfo.userPassword, password] THEN UpdatePrimary[]; << IF data.debugging # Profile.debugging THEN Profile.SetDebugging[data.debugging]; >> IF debug THEN { Put.Line[ILT.toolData.fileSW, "SetDefaultDomain..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; IF ~Equal[profileInfo.domain, domain] THEN Profile.SetDefaultDomain[data.strings[domain]]; IF debug THEN { Put.Line[ILT.toolData.fileSW, "SetDefaultOrganization..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; IF ~Equal[profileInfo.organization, organization] THEN Profile.SetDefaultOrganization[data.strings[organization]]; IF debug THEN { Put.Line[ILT.toolData.fileSW, "SetDefaultRegistry..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; IF ~Equal[profileInfo.registry, registry] THEN Profile.SetDefaultRegistry[data.strings[registry]]; IF debug THEN { Put.Line[ILT.toolData.fileSW, "UpdateLibrarian..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; IF ~Equal[profileInfo.librarianName, librarian] OR ~Equal[profileInfo.librarianNamePrefix, prefix] OR ~Equal[profileInfo.librarianNameSuffix, suffix] THEN UpdateLibrarian[]; IF debug THEN { Put.Line[ILT.toolData.fileSW, "FreeProfileInfo..."L]; --Process.Pause[Process.SecondsToTicks[5]]; }; FreeProfileInfo[]; END; UpdatePrimary: PROC = BEGIN Profile.SetUser[data.strings[user], data.strings[password]]; END; UpdateLibrarian: PROC = BEGIN Profile.SetLibrarian[ data.strings[librarian], data.strings[prefix], data.strings[ suffix]]; END; ResetData: PROC [display: BOOLEAN] = BEGIN ENABLE UNWIND => FreeProfileInfo[]; IF data = NIL OR data.busy THEN RETURN; GetProfileInfo[]; Update[profileInfo.userName, user, display]; Update[profileInfo.userPassword, password, display]; Update[profileInfo.registry, registry, display]; Update[profileInfo.domain, domain, display]; Update[profileInfo.organization, organization, display]; Update[profileInfo.librarianName, librarian, display]; Update[profileInfo.librarianNamePrefix, prefix, display]; Update[profileInfo.librarianNameSuffix, suffix, display]; << IF data.debugging # Profile.debugging THEN { data.debugging ← Profile.debugging; IF display THEN FormSW.DisplayItem[data.formSW, ORD[ProfileItem.debug]]}; >> FreeProfileInfo[]; END; Equal: PROC [s: LONG STRING, index: ProfileItem] RETURNS [BOOLEAN] = BEGIN RETURN[String.EquivalentString[data.strings[index], s]]; END; Update: PROC [profile: LONG STRING, index: ProfileItem, display: BOOLEAN] = BEGIN IF Equal[profile, index] THEN RETURN; String.Replace[@data.strings[index], profile, z]; --IF display THEN FormSW.DisplayItem[data.formSW, ORD[index]]; END; --Notify: Supervisor.AgentProcedure = {ResetData[display: TRUE]}; END.