home *** CD-ROM | disk | FTP | other *** search
Wrap
'************************************************************************** '* toptrainer Setup Script '*************************************************************************** ' Hier k÷nnen die Unterverzeichnisnamen angegeben werden, wenn die 3-fach- ' Variante des Toptrainers installiert werden soll. ' ' Fⁿr alle Installationsvarianten gilt die Einstellung fⁿr den Namen der Programmgruppe ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ' GroupName$ ..... Bezeichnung der Programmgruppe unter Windows 3.x bzw. des ' Menⁿpunktes im Start|Programme-Menⁿ von Windows95 ' ' Fⁿr die Single-File-Variante des Top-Trainers gibt es folgende Einstellung: ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ' ProgName$ ...... Bezeichnung des Icons in der Programmgruppe ' ' Fⁿr die Multi-File-Variante des Top-Trainers gibt es folgende Einstellungen: ' @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ' SubDir1$ ....... DOS-Bezeichnung des Verzeichnisses, in das die Dateien der ' Sektion [SECTION1] kopiert werden sollen ' SubDir2$ ....... DOS-Bezeichnung des Verzeichnisses, in das die Dateien der ' Sektion [SECTION2] kopiert werden sollen ' SubDir3$ ....... DOS-Bezeichnung des Verzeichnisses, in das die Dateien der ' Sektion [SECTION3] kopiert werden sollen ' ProgName1$, ' ProgName2$, ' ProgName3$ ..... Bezeichnung des Icons fⁿr die Top-Trainer-Variante im Verzeichnis ' <SubDir1$>, <SubDir2$> sowie <SubDir3$> ' Fⁿr die Variante in <SubDir1$> wird die .STU-Datei angelegt! '************************************************************************** ' '*$DEFINE SINGLE_FILE Entferne das "*"-Zeichen zwischen dem Anfⁿhrungszeichen ' und dem "$"-Zeichen um ein Installationsprogramm fⁿr ' genau eine Toptrainer-Version zu erhalten '$DEFINE CZECH Entferne das Leerzeichen zischen dem Anfⁿhrungszeichen ' und dem "$"-Zeichen um eine tschechische Variante des ' Installationsscripts zu bekommen. Dazu sollten dann aber ' auch die tschechischen Varianten der DLLs ' MSCUISTF.DLL, ' CUSTOM.DLL, ' MSCOMSTF.DLL, ' MSDETSTF.DLL, ' MSINSSTF.DLL, ' MSSHLSTF.DLL und ' MSUILSTF.DLL verwendet werden!!!! '************************************************************************** '$IFDEF CZECH REM Generelle Einstellungen fuer alle tschechischen Versionen REM ********************************************************* CONST GroupName$ = "Psanφ na poΦφtaΦi" '$IFNDEF SINGLE_FILE REM Einstellungen fuer die tschechische Multi-Datei-Version REM ******************************************************* CONST SubDir1$ = "ZAV1-87" CONST SubDir2$ = "ZAV-NETT" CONST SubDir3$ = "ZAV-DEMO" CONST ProgName1$ = "ZAV1-87" CONST ProgName2$ = "Test rychlosti" CONST Progname3$ = "ZAV-demo" '$ELSE REM Einstellung fuer die einfache tschechische Version CONST ProgName$ = "ZAV1-3" '$ENDIF '$ELSE REM Einstellungen fuer alle deutschen Versionen REM ******************************************* CONST GroupName$ = "ZAV-Top-Trainer" '$IFNDEF SINGLE_FILE REM Einstellungen fuer die deutsche Multi-Datei-Version REM *************************************************** CONST SubDir1$ = "Beginner" CONST SubDir2$ = "Exercise" CONST SubDir3$ = "Contest" CONST ProgName1$ = "DEMO AnfΣngerprogramm" CONST ProgName2$ = "Trainingsprogramm" CONST Progname3$ = "PC-Wettbewerb" '$ELSE REM Einstelllungen fuer die einfache deutsche Version REM ************************************************* CONST ProgName$ = "ZAV-Top-Trainer" '$ENDIF '$ENDIF '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' '$INCLUDE 'special.inc' ''Dialog ID's CONST WILLKOMMEN = 100 CONST ASKQUIT = 200 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST REGISTRATION = 800 CONST NAMEREG = 900 CONST SHORTCUTREG = 1000 CONST APPHELP = 1100 CONST BADPATH = 1200 ''Bitmap ID CONST LOGO = 1 GLOBAL DEST$ ''Default destination directory. GLOBAL OPTCUR$ ''Option selection from option dialog. GLOBAL CUIDLL$ GLOBAL szUserName$ GLOBAL szShortCut$ GLOBAL FontDir$ GLOBAL IconDir$ GLOBAL ButtonNumber$ GLOBAL ScreenWidth$ GLOBAL ScreenHeight$ DECLARE FUNCTION Install%(SourceDir$) DECLARE FUNCTION UserEditOGMSettings(ButtonNumber$,ScreenWidth$,ScreenHeight$, HELPId%, HELPDLLPROC$) AS STRING DECLARE FUNCTION VALUE(szNumber$) AS LONG DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION UserAskQuit AS LONG DECLARE FUNCTION DoWelcomeDialog(CUIDLL$, WILLKOMMEN%, Proc$, APPHELP%, HELPPROC$) AS STRING DECLARE SUB InitializeInstall LIB "MSCUISTF.DLL" (hwnd%,Caption$) DECLARE SUB InitializeCustom LIB "Custom.DLL" (Caption$) DECLARE FUNCTION SectionizeWinOGMIni LIB "MSCUISTF.DLL" (SourcePath$) AS LONG DECLARE SUB UnsectionizeWinOGMIni LIB "MSCUISTF.DLL" (SourcePath$) DECLARE FUNCTION CheckForOGMEntries(sourcedir$) AS LONG DECLARE SUB CheckWinOGMIni DECLARE SUB ExecuteWinPrg LIB "MSCUISTF.DLL" (hwnd%,commandline$) Declare Sub GetUserName LIB "MSCUISTF.DLL" (szDir$) Declare SUB DecodeUserName(szName$, szShort$) Declare FUNCTION SetUserName LIB "MSCUISTF.DLL" (szDir$) AS LONG Declare FUNCTION EncodeUserName%(szName$, szShort$) INIT: CUIDLL$ = "custom.dll" ''Custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure hinst% = HinstFrame ''Instanz hframe% = HwndFrame ''Framehandle dlg%=999999 '$IFDEF CZECH InitializeInstall hWndFrame(),"ZAV-TOP" InitializeCustom "ZAV-TOP" '$ELSE InitializeInstall hWndFrame(),"ZAV programovanß v²uka" InitializeCustom "ZAV programovanß v²uka" '$ENDIF i% = Ctl3dRegister(hinst%) ''und 3D i% = Ctl3dAutoSubclass(hinst%) SetBitmap CUIDLL$, LOGO '$IFDEF CZECH SetTitle "ZAV-TOP" '$ELSE SetTitle "ZAV-Top-Trainer" '$ENDIF IF (GetProcessorType() < 3) OR (GetWindowsMajorVersion() < 3) OR (GetWindowsMajorVersion() = 3) AND (GetWindowsMinorVersion < 1) THEN '$IFDEF CZECH i% = DoMsgBox("Program ZAV-TOP vy₧aduje nejmΘn∞ poΦφtaΦ °ady 386 s instalovan²mi Windows minimßln∞ 3.1",AppName$,MB_OK+MB_ICONHAND) '$ELSE i% = DoMsgBox("Der ZAV-Top-Trainer ben÷tigt zumindest einen 80386-Rechner"+CHR$(13)+"mit Windows ab der Version 3.1",AppName$,MB_OK+MB_ICONHAND) '$ENDIF ERROR 1026 ' willkⁿrlicher Code END IF SrcDir$ = GetSymbolValue("STF_SRCINFPATH") IF SrcDir$ = "" THEN SrcDir$ = GetSymbolValue("STF_CWDDIR") + "TOPTRAIN.INF" END IF ReadInfFile SrcDir$ SetRestartDir GetWindowsDir() RestoreOrgIni = CheckForOGMEntries(GetSymbolValue("STF_SRCDIR")) '$IFDEF CZECH DEST$ = "C:\ZAV-TOP" '$ELSE DEST$ = "C:\TOPTRAIN" '$ENDIF '$IFDEF DEBUG REM i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal REM WinDrive$ = MID$(GetWindowsDir, 1, 1) REM IF IsDriveValid(WinDrive$) = 0 THEN REM i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK) REM GOTO QUIT REM END IF '$ENDIF ''DEBUG WELCOME: sz$ = UIStartDlg(CUIDLL$, WILLKOMMEN, "FInfoDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN UIPop 1 ELSE UIPop 1 IF UserAskQuit THEN dlg%=EXITQUIT GOTO QUIT END IF GOTO WELCOME END IF DecodeUserName szUserName$, szShortCut$ If szUserName$="SHUTDOWN" Then ERROR 1026 END IF REGISTER1: SetSymbolValue "NameIn", szUserName$ SetSymbolValue "OrgIn", szShortCut$ sz$ = UIStartDlg(CUIDLL$, REGISTRATION, "FNameOrgDlgProc", 0, "") UIPop 1 SELECT CASE sz$ CASE "CONTINUE" szUserName$ = GetSymbolValue("NameOut") szShortCut$ = GetSymbolValue("OrgOut") IF szUserName$ = "" THEN sz$ = UIStartDlg(CUIDLL$, NAMEREG, "FInfo0DlgProc", 0, "") UIPop 1 GOTO REGISTER1 END IF IF szShortCut$ = "" THEN sz$ = UIStartDlg(CUIDLL$, SHORTCUTREG, "FInfo0DlgProc", 0, "") UIPop 1 GOTO REGISTER1 '' WinExec(szProgLine$, cmdShow$) '' whatever you want END IF CASE "EXIT" GOSUB ASKQUIT GOTO REGISTER1 END SELECT UIPop 1 UserEditOGM: SELECT CASE UserEditOGMSettings(ButtonNumber$,ScreenWidth$,ScreenHeight$,APPHELP, HELPPROC$) CASE "CONTINUE" UIPop 1 CASE "BACK" UIPop 1 goto Welcome CASE "EXIT" dlg%=EXITQUIT GOTO QUIT END SELECT GETPATH: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", 0, "") DEST$ = GetSymbolValue("EditTextOut") IF sz$ = "CONTINUE" THEN IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH GOTO GETPATHL1 END IF UIPop 1 ELSEIF sz$ = "REACTIVATE" THEN GOTO GETPATHL1 ELSEIF sz$ = "BACK" THEN UIPop 1 GOTO UserEditOGM ELSE GOSUB ASKQUIT GOTO GETPATH END IF If FontDir$="" Then FontDir$=MakePath(Dest$,"OGM\FONTS") END IF IF IconDir$="" Then IF FontDir$="" Then IconDir$=MakePath(Dest$,"OGM\ICONS") ELSE IconDir$=FontDir$ WHILE (IconDir$ > "") AND (Mid$(IconDir$,Len(IconDir$),1)<>"\") IconDir$=MID$(IconDir$,1,Len(IconDir$)-1) WEND IF IconDir$="" THEN ' Some really queer path entry IconDir$=FontDir$+"\ICONS" ELSE IconDir$=IconDir$+"ICONS" END IF END IF END IF reboot%=Install%(GetSymbolValue("STF_SRCDIR")) CheckWinOgmIni CreateProgmanGroup GroupName$, "", cmoNone ShowProgmanGroup GroupName$, 1, cmoNone RUNDIR$ = MakePath (DEST$, "wtoptrai.exe") '$IFNDEF SINGLE_FILE CreateProgmanItem GroupName$, ProgName1$, RUNDIR$ , Makepath(DEST$,"TYPEWRIT.ICO")+",0,0,0,"+MakePath(Dest$,SubDir1$), cmoOverwrite CreateProgmanItem GroupName$, ProgName2$, RUNDIR$ , Makepath(DEST$,"TYPEWRIT.ICO")+",0,1,0,"+MakePath(Dest$,SubDir2$), cmoOverwrite CreateProgmanItem GroupName$, ProgName3$, RUNDIR$ , Makepath(DEST$,"TYPEWRIT.ICO")+",0,2,0,"+MakePath(Dest$,SubDir3$), cmoOverwrite ChDir MakePath(DEST$,SubDir1$) '$ELSE CreateProgManItem GroupName$, ProgName$, RUNDIR$ , Makepath(DEST$,"TYPEWRIT.ICO")+",0,0,0,"+Dest$, cmoOverwrite ChDir MakePath(DEST$,"") '$ENDIF IF EncodeUserName%(szUserName$, szShortCut$) <> 1 THEN Error 1027 END IF szCommandLine$ =RunDir$+" -install "+CHR$(34)+szUserName$+chr$(34)+" "+szShortCut$ ExecuteWinPrg hWndFrame(),RunDir$+" -install "+CHR$(34)+szUserName$+chr$(34)+" "+szShortCut$ ChDir GetSymbolValue("STF_SRCDIR") If RestoreOrgIni = 1 THEN UnSectionizeWinOgmIni MakePath(GetWindowsDir(),"WINOGM.INI") END IF dlg%=EXITSUCCESS QUIT: ON ERROR GOTO ERRQUIT IF (ERR = 0) AND (dlg%=EXITSUCCESS) THEN dlg% = EXITSUCCESS ELSEIF (ERR = STFQUIT) OR (dlg%=EXITQUIT) THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 i% = Ctl3dUnregister(hinst%) END ERRQUIT: '$IFDEF CZECH i% = DoMsgBox("InstalaΦnφ program je poÜkozen!\nInformujte dodavatele.", "SETUP - informace", MB_OK+MB_TASKMODAL+MB_ICONHAND) '$ELSE i% = DoMsgBox("Das Setup des ZAV-Top-Trainers ist beschΣdigt \n Benachrichtigen sie Ihren HΣndler", "Setup Benachrichtigung", MB_OK+MB_TASKMODAL+MB_ICONHAND) '$ENDIF i% = Ctl3dUnregister(hinst%) END BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO BADPATH END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT GOTO QUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Builds the copy list and performs all installation operations. '** Arguments: '** none. '** Returns: '** none. '************************************************************************* Function Install%(SourceDir$) STATIC AddToBillboardList "Custom.dll", 5000, "FModelessDlgProc", 100 AddToBillboardList "Custom.dll", 5000, "FModelessDlgProc", 100 AddToBillboardList "Custom.dll", 5000, "FModelessDlgProc", 100 AddToBillboardList "Custom.dll", 5000, "FModelessDlgProc", 100 AddToBillboardList "Custom.dll", 5000, "FModelessDlgProc", 100 AddToBillboardList "Custom.dll", 5000, "FModelessDlgProc", 100 AddToBillboardList "Custom.dll", 5000, "FModelessDlgProc", 100 CreateDir DEST$, cmoNone '$IFNDEF SINGLE_FILE CreateDir MakePath(Dest$,SubDir1$), cmoNone CreateDir MakePath(Dest$,SubDir2$), cmoNone CreateDir MakePath(Dest$,SubDir3$), cmoNone '$ENDIF IF Mid$(FontDir$,1,Len(Dest$))=Dest$ THEN CreateDir MakePath(Dest$,"OGM"),cmoNone END IF CreateDir FontDir$,cmoNone CreateDir IconDir$,cmoNone AddSectionFilesToCopyList "Files", SourceDir$, DEST$ '$IFNDEF SINGLE_FILE AddSectionFilesToCopyList "SECTION1", SourceDir$, MakePath(Dest$,SubDir1$) AddSectionFilesToCopyList "SECTION2", SourceDir$, MakePath(Dest$,SubDir2$) AddSectionFilesToCopyList "SECTION3", SourceDir$, MakePath(Dest$,SubDir3$) '$ENDIF ' ins Windowsverzeichnis AddSectionFilesToCopyList "WINDOWS", SourceDir$, GetWindowsDir() ' ins Systemverzeichnis AddSectionFilesToCopyList "SYSTEM", SourceDir$, GetWindowsSysDir() ' ins die verschiedenen OGM-Verzeichnisse AddSectionFilesToCopyList "FONTS", SourceDir$, FontDir$ AddSectionFilesToCopyList "ICONS", SourceDir$, IconDir$ i%=Ctl3dUnregister(hInstFrame()) SetCopyGaugePosition 100, 200 CopyFilesInCopyList Install%=RestartListEmpty() i%=Ctl3DRegister(hInstFrame()) i%=Ctl3dAutoSubClass(hInstFrame()) END FUNCTION '***************************************************************************** '** '** PARAMETERS '** IN/OUT ButtonNumber$ Number of MouseButtons '** IN/OUT ScreenWidth$ Displayable Width of Screen in mm '** IN/OUT ScreenHeight$ Displayable Height of Screen in mm '** IN HELPID% resource id of help window '** IN HELPDLLPROC$ name of help procedure in CUI DLL '** '***************************************************************************** FUNCTION UserEditOGMSettings(ButtonNumber$,ScreenWidth$,ScreenHeight$, HELPID%, HELPDLLPROC$) STATIC AS STRING OPTL1: SetSymbolValue "ButtonsIn",ButtonNumber$ SetSymbolValue "WidthIn",ScreenWidth$ SetSymbolValue "HeightIn",ScreenHeight$ sz$ = UIStartDlg("mscuistf.dll", 800, "FScreenSizeDlgProc", 900,"FHelpDlgProc") ButtonNumber$ = GetSymbolValue("MouseButtonCount") ScreenWidth$=GetSymbolValue("WidthOut") ScreenHeight$=GetSymbolValue("HeightOut") IF sz$ = "CONTINUE" THEN UIPop(1) UserEditOGMSettings="CONTINUE" ELSEIF sz$ = "BACK" THEN UIPop 1 UserEditOGMSettings = "BACK" ELSEIF sz$ = "REACTIVATE" THEN GOTO OPTL1 ELSE UIPop 1 IF UserASKQUIT THEN UserEditOGMSettings = "EXIT" ELSE GOTO OPTL1 END IF END IF RemoveSymbol "HeightIn" RemoveSymbol "WidthIn" RemoveSymbol "ButtonsIn" RemoveSymbol "MouseButtonCount" RemoveSymbol "WidthOut" RemoveSymbol "HeightOut" END FUNCTION FUNCTION VALUE(szNumber$) STATIC AS LONG DIM v AS LONG v = 0 FOR i%=1 TO LEN(szNumber$) v = v*10 + VAL(MID$(szNumber$,i%,1)) NEXT VALUE = v END FUNCTION '** '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION FUNCTION UserAskQuit STATIC AS LONG sz$ = UIStartDlg("custom.dll", ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll UserAskQuit = TRUE ELSE UIPop 1 UserAskQuit = FALSE END IF END FUNCTION FUNCTION CheckForOGMEntries(SourceDir$) STATIC AS LONG IF DoesFileExist(MakePath(GetWindowsDir(),"WINOGM.INI"),femExists)=0 THEN AddSectionFilesToCopyList "WINOGMINI", SourceDir$, GetWindowsDir() FontDir$="" IconDir$="" ButtonNumber$="2" ScreenWidth$="261" ScreenHeight$="200" ELSE CheckForOGMEntries = SectionizeWinOgmIni(MakePath(GetWindowsDir(),"WINOGM.INI")) FontDir$=GetIniKeyString(MakePath(GetWindowsDir,"WinOGM.INI"),"OGM Einstellungen","FontPath") IconDir$=GetIniKeyString(MakePath(GetWindowsDir,"WinOGM.INI"),"OGM Einstellungen","IconPath") ScreenSiz$=GetIniKeyString(MakePath(GetWindowsDir,"WINOGM.INI"),"OGM Einstellungen","ScreenSize") ButtonNumber$=GetIniKeyString(MakePath(GetWindowsDir,"WINOGM.INI"),"OGM Einstellungen","MouseButtonNumber") i%=InStr(ScreenSiz$,"x") ScreenWidth$=Mid$(ScreenSiz$,1,i%-1) ScreenHeight$=Mid$(ScreenSiz$,i%+1) END IF END FUNCTION SUB CheckWinOGMIni STATIC sz$=MakePath(GetWindowsDir(),"WINOGM.INI") CreateIniKeyValue sz$, "OGM Einstellungen", "FontPath" ,FontDir$, cmoVital + cmoOverwrite CreateIniKeyValue sz$, "OGM Einstellungen", "UseWindowsSliders","false",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "UseWindowsWindows","true",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "UseWindowsWindows","true",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "UseWindowsColours","true",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "UseWindowsControls","true",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "Controls3D","true",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "IncrementalSelectionColour","0,0,0",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "Autotopping","true",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "UseWindowsCursor","true",cmoVital+cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "ScreenSize" ,ScreenWidth$+"x"+ScreenHeight$, cmoVital + cmoOverwrite CreateIniKeyValue sz$, "OGM Einstellungen", "MouseButtonNumber", ButtonNumber$, cmoVital + cmoOverWrite CreateIniKeyValue sz$, "OGM Einstellungen", "IconPath" ,IconDir$, cmoVital + cmoOverwrite END SUB SUB DecodeUserName(szName$, szShort$) STATIC ' EncodeUserName " "," " GetUserName GetSymbolValue("STF_SRCDIR") szName$ = GetSymbolValue("NameOut") szShort$ = GetSymbolValue("OrgOut") RemoveSymbol "NameOut" RemoveSymbol "OrgOut" END SUB FUNCTION EncodeUserName%(szName$, szShort$) STATIC SetSymbolValue "NameIn", szName$ SetSymbolValue "OrgIn", szShort$ EncodeUserName = SetUserName(GetSymbolValue("STF_SRCDIR")) RemoveSymbol "NameIn" RemoveSymbol "OrgIn" END FUNCTION