|
|
1.1 root 1: '**************************************************************************
2: '* MSSetup Toolkit Sample 1
3: '**************************************************************************
4:
5: '$DEFINE DEBUG ''Define for script development/debugging
6:
7: '$INCLUDE 'setupapi.inc'
8: '$INCLUDE 'msdetect.inc'
9:
10: ''Dialog ID's
11: CONST WELCOME = 100
12: CONST ASKQUIT = 200
13: CONST DESTPATH = 300
14: CONST EXITFAILURE = 400
15: CONST EXITQUIT = 600
16: CONST EXITSUCCESS = 700
17: CONST OPTIONS = 800
18: CONST APPHELP = 900
19: CONST BADPATH = 6400
20:
21: ''Bitmap ID
22: CONST LOGO = 1
23:
24: GLOBAL DEST$ ''Default destination directory.
25: GLOBAL OPTCUR$ ''Option selection from option dialog.
26:
27: DECLARE SUB Install
28: DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
29:
30:
31: INIT:
32: CUIDLL$ = "mscuistf.dll" ''Custom user interface dll
33: HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure
34:
35: SetBitmap CUIDLL$, LOGO
36: SetTitle "MSSetup Toolkit Sample 1"
37:
38: szInf$ = GetSymbolValue("STF_SRCINFPATH")
39: IF szInf$ = "" THEN
40: szInf$ = GetSymbolValue("STF_CWDDIR") + "SAMPLE1.INF"
41: END IF
42: ReadInfFile szInf$
43:
44: OPTCUR$ = "1"
45: DEST$ = "C:\DEMO"
46:
47: '$IFDEF DEBUG
48: i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal
49: WinDrive$ = MID$(GetWindowsDir, 1, 1)
50: IF IsDriveValid(WinDrive$) = 0 THEN
51: i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
52: GOTO QUIT
53: END IF
54: '$ENDIF ''DEBUG
55:
56:
57: WELCOME:
58: sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
59: IF sz$ = "CONTINUE" THEN
60: UIPop 1
61: ELSE
62: GOSUB ASKQUIT
63: GOTO WELCOME
64: END IF
65:
66:
67: OPTION:
68: SetSymbolValue "RadioDefault", OPTCUR$
69: OPTL1:
70: sz$ = UIStartDlg(CUIDLL$, OPTIONS, "FRadioDlgProc", APPHELP, HELPPROC$)
71: OPTCUR$ = GetSymbolValue("ButtonChecked")
72:
73: IF sz$ = "CONTINUE" THEN
74: UIPop(1)
75: ELSEIF sz$ = "REACTIVATE" THEN
76: GOTO OPTL1
77: ELSE
78: GOSUB ASKQUIT
79: GOTO OPTION
80: END IF
81:
82:
83: GETPATH:
84: SetSymbolValue "EditTextIn", DEST$
85: SetSymbolValue "EditFocus", "END"
86: GETPATHL1:
87: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
88: DEST$ = GetSymbolValue("EditTextOut")
89:
90: IF sz$ = "CONTINUE" THEN
91: IF IsDirWritable(DEST$) = 0 THEN
92: GOSUB BADPATH
93: GOTO GETPATHL1
94: END IF
95: UIPop 1
96: ELSEIF sz$ = "REACTIVATE" THEN
97: GOTO GETPATHL1
98: ELSEIF sz$ = "BACK" THEN
99: UIPop 1
100: GOTO OPTION
101: ELSE
102: GOSUB ASKQUIT
103: GOTO GETPATH
104: END IF
105:
106:
107: Install
108:
109:
110: QUIT:
111: ON ERROR GOTO ERRQUIT
112:
113: IF ERR = 0 THEN
114: dlg% = EXITSUCCESS
115: ELSEIF ERR = STFQUIT THEN
116: dlg% = EXITQUIT
117: ELSE
118: dlg% = EXITFAILURE
119: END IF
120: QUITL1:
121: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
122: IF sz$ = "REACTIVATE" THEN
123: GOTO QUITL1
124: END IF
125: UIPop 1
126:
127: END
128:
129: ERRQUIT:
130: i% = DoMsgBox("Setup sources were corrupted, call 555-1212!", "Setup Message", MB_OK+MB_TASKMODAL+MB_ICONHAND)
131: END
132:
133:
134:
135: BADPATH:
136: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
137: IF sz$ = "REACTIVATE" THEN
138: GOTO BADPATH
139: END IF
140: UIPop 1
141: RETURN
142:
143:
144:
145: ASKQUIT:
146: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
147:
148: IF sz$ = "EXIT" THEN
149: UIPopAll
150: ERROR STFQUIT
151: ELSEIF sz$ = "REACTIVATE" THEN
152: GOTO ASKQUIT
153: ELSE
154: UIPop 1
155: END IF
156: RETURN
157:
158:
159:
160: '**
161: '** Purpose:
162: '** Builds the copy list and performs all installation operations.
163: '** Arguments:
164: '** none.
165: '** Returns:
166: '** none.
167: '*************************************************************************
168: SUB Install STATIC
169:
170: SrcDir$ = GetSymbolValue("STF_SRCDIR")
171: CreateDir DEST$, cmoNone
172:
173: OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
174: WriteToLogFile ""
175: WriteToLogFile " User chose as destination directory: '" + DEST$ + "'"
176: WriteToLogFile " User chose option: '" + OPTCUR$ + "'"
177: WriteToLogFile ""
178: WriteToLogFile "May have had to create the directory: " + DEST$
179: WriteToLogFile ""
180:
181: AddSectionFilesToCopyList "Files", SrcDir$, DEST$
182: AddSectionKeyFileToCopyList "Options", OPTCUR$, SrcDir$, DEST$
183: CopyFilesInCopyList
184:
185: ini$ = MakePath(DEST$, "DEMO.INI")
186: CreateIniKeyValue "WIN.INI", "MSSetup Sample 1", "Option", OPTCUR$, cmoNone
187: CreateIniKeyValue ini$, "Section 1", "Key 1", "Value 1" , cmoNone
188: CreateIniKeyValue ini$, "Section 2", "Key 2", "Value 2" , cmoNone
189: CreateIniKeyValue ini$, "Section 3", "Key 3", "Value 3" , cmoNone
190:
191: CreateProgmanGroup "MSSetup Sample 1", "", cmoNone
192: ShowProgmanGroup "MSSetup Sample 1", 1, cmoNone
193: CreateProgmanItem "MSSetup Sample 1", "dialogs", "dlgedit.exe "+MakePath(DEST$,"dialogs.res"), "", cmoOverwrite
194: CreateProgmanItem "MSSetup Sample 1", "dlgprocs.c", "notepad.exe "+MakePath(DEST$,"dlgprocs.c"), "", cmoOverwrite
195:
196: AddDos5Help "YOURAPP", "A brief help text for your Windows application."+chr$(10)+"It can be continued on another line with chr$(10).", cmoNone
197:
198: CloseLogFile
199:
200: END SUB
201:
202:
203:
204: '**
205: '** Purpose:
206: '** Appends a file name to the end of a directory path,
207: '** inserting a backslash character as needed.
208: '** Arguments:
209: '** szDir$ - full directory path (with optional ending "\")
210: '** szFile$ - filename to append to directory
211: '** Returns:
212: '** Resulting fully qualified path name.
213: '*************************************************************************
214: FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
215: IF szDir$ = "" THEN
216: MakePath = szFile$
217: ELSEIF szFile$ = "" THEN
218: MakePath = szDir$
219: ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
220: MakePath = szDir$ + szFile$
221: ELSE
222: MakePath = szDir$ + "\" + szFile$
223: END IF
224: END FUNCTION
225:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.