1$!
2$! @(#)seldrive.com	7.9 04/01/14
3$!
4$! CD drive device settings command procedure for OpenVMS
5$! See the INSTALL.VMS file for details.
6$! OpenVMS versions: 6.0 and later, tested with 7.2 and 7.3 on VAX(tm) machines
7$!                   and 7.2-1 as well as 7.3-1 on Alpha(tm) machines
8$!
9$!      xmcd   - Motif(R) CD Audio Player/Ripper
10$!
11$!   Copyright (C) 1993-2004  Ti Kan
12$!   E-mail: xmcd@amb.org
13$!   Contributing author: Michael Monscheuer
14$!   E-mail: M.Monscheuer@t-online.de
15$!
16$!   This program is free software; you can redistribute it and/or modify
17$!   it under the terms of the GNU General Public License as published by
18$!   the Free Software Foundation; either version 2 of the License, or
19$!   (at your option) any later version.
20$!
21$!   This program is distributed in the hope that it will be useful,
22$!   but WITHOUT ANY WARRANTY; without even the implied warranty of
23$!   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24$!   GNU General Public License for more details.
25$!
26$!   You should have received a copy of the GNU General Public License
27$!   along with this program; if not, write to the Free Software
28$!   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29$!
30$!=============================================================================
31$!
32$!   This procedure will on behalf of the user apply the modifications needed
33$!   in XMCD's configuration file DEVICE.CFG for making use of the CD drive's
34$!   capabilities.
35$!   It usually is being executed from inside INSTALLVMS.COM at the time XMCD
36$!   is being installed on your system.
37$!   However, this procedure also can be run from the command prompt.
38$!   This for example may become necessary if the CD drive was replaced with
39$!   a different model than used previously.
40$!   If running this procedure from the command prompt and you don't know what
41$!   CD drive model you are using with XMCD, you may pass the CD drive's VMS
42$!   device name to this procedure as P1 (f.i. @SELDRIVE $1$DKA400). VMS will
43$!   tell you your drive's model name then if it is willing and able to reveal
44$!   it.
45$!
46$!   This procedure makes use of the drive configuration tables in the
47$!   [.LIBDI_D.CFGTBL] subdirectory which contain vendor and drive specific
48$!   configuration data on numerous CD drives. Two menues are presented
49$!   to chose the vendor and model name from.
50$!
51$!   Parameters:
52$!   ------------
53$!   P1 - Optional, VMS device name of CD drive used with XMCD, f.i. $1$DKA400
54$!        Only used when procedure is run from the command prompt
55$!   P2 - Reserved for use with INSTALLVMS.COM only.
56$!
57$!   Restrictions:
58$!   --------------
59$!
60$!   This procedure cannot be used with pre-V7.0 VMS versions.
61$!   Also, it will discard unsuitable versions of xmcd configuration
62$!   tables and resultingly not apply any modification to DEVICE.CFG
63$!
64$!
65$! Some basics first...
66$!
67$	IF F$VERIFY()
68$	 THEN
69$	  ESC = "<ESC>"
70$	  BEL = "<BEL>"
71$	  CR  = "<CR>"
72$	  LF  = "<LF>"
73$	 ELSE
74$	  BEL[0,8]=7
75$	  LF[0,8]=10
76$	  CR[0,8]=13
77$	  ESC[0,8]=27
78$	ENDIF
79$
80$	MATCHTBLVERS = 6
81$
82$	IF F$GETSYI("VERSION") .LES. "V7"
83$	 THEN
84$	  WRITE SYS$OUTPUT "''CR'''LF'%DRVCFG-F-VVMM, VMS version mismatch, version is not 7.0 or later''CR'''LF'"
85$	  EXIT
86$	ENDIF
87$	IF P2 .EQS. "NO_ENTRY_TEXT" THEN GOTO NO_P1
88$!
89$! Prepare user having to specify the CD drive model.
90$!
91$	WRITE SYS$OUTPUT "''ESC'[0;0H''ESC'[2J''CR'''LF'  Configuration of device settings"
92$	WRITE SYS$OUTPUT "  ---------------------------------"
93$	WRITE SYS$OUTPUT "''CR'''LF'  You now need to specify your CD drive model."
94$	WRITE SYS$OUTPUT "  This information will be used to apply changes to xmcd's device"
95$	WRITE SYS$OUTPUT "  configuration file which will be necessary to make use of all your"
96$	WRITE SYS$OUTPUT "  CD drive's capabilities."
97$	WRITE SYS$OUTPUT ""
98$
99$	IF P1 .EQS. "" THEN GOTO ENTRY_TEXT_DONE
100$	IF .NOT. F$GETDVI(P1,"EXISTS")
101$	 THEN
102$	  WRITE SYS$OUTPUT "''CR'''LF'%SYSTEM-W-NOSUCHDEV, no such device available - ''P1'"
103$	  EXIT
104$	ENDIF
105$	DRVMDL = F$GETDVI(P1,"DEVICE_TYPE_NAME")
106$
107$	WRITE SYS$OUTPUT "  Your CD drive ''P1' is considered to be a ''ESC'[7m ''DRVMDL' ''ESC'[0m ."
108$	WRITE SYS$OUTPUT ""
109$	WRITE SYS$OUTPUT "  Remember this model type when next being prompted with the drive"
110$	WRITE SYS$OUTPUT "  manufacturer and model type menues.''CR'''LF'"
111$
112$ ENTRY_TEXT_DONE:
113$
114$	INQUIRE/NOPUNCTATION DUMMY "''ESC'[28C''ESC'[7mPress Return to continue''ESC'[0m"
115$	WRITE SYS$OUTPUT "''ESC'[1A''ESC'[2K"
116$
117$ NO_P1:
118$
119$!
120$! Check whether procedure is run in correct environment.
121$!
122$	IF F$SEARCH("DEVICE.CFG") .EQS. ""
123$	 THEN
124$	  WRITE SYS$OUTPUT "''CR'''LF'  %DRVCFG-F-NOCFGFIL, No device configuration file DEVICE.CFG found!"
125$	  WRITE SYS$OUTPUT "  Make sure you are running this procedure from your xmcd top-level directory!''CR'''LF'"
126$	  GOTO ERR_EXIT
127$	ENDIF
128$!
129$! Determine available vendor specific configuration files.
130$!
131$	WRITE SYS$OUTPUT "''CR'''LF'  %DRVCFG-S-GACD, Gathering available drive configuration data."
132$	WRITE SYS$OUTPUT "  This may take a few seconds.''CR'''LF'''LF'"
133$	VCNT = 0
134$	DCNT = 0
135$ GET_VENDOR:
136$	VEND = F$SEARCH("[.LIBDI_D.CFGTBL]*.")
137$	IF VEND .EQS. "" THEN GOTO GOT_VENDORS
138$	SEARCH/NOWARNING/NOOUT 'VEND' "tblver=''MATCHTBLVERS'"
139$	IF $SEVERITY .NE. 1 THEN GOTO GET_VENDOR
140$	VCNT = VCNT + 1
141$	VEND'VCNT' = F$PARSE(VEND,,,"NAME")
142$       PIPE SEARCH 'VEND' "alias" | (READ SYS$INPUT RESULT ; DEFINE/JOB ALINAM &RESULT)
143$       VENDS'VCNT' = F$EDIT(F$ELEMENT(1,"=",F$TRNLNM("ALINAM")),"TRIM")
144$       DEASS/JOB ALINAM
145$	FNDSTR = VENDS'VCNT'
146$	WRITE SYS$OUTPUT "''ESC'[1A''ESC'[0K  Found vendor: ''FNDSTR'"
147$	GOTO GET_VENDOR
148$ GOT_VENDORS:
149$	IF VCNT .EQ. 0
150$	 THEN
151$	  WRITE SYS$OUTPUT "''CR'''LF'  %DRVCFG-F-NOCFGFIL, No drive configuration files found!"
152$	  GOTO ERR_EXIT
153$	ENDIF
154$!
155$! Display vendor name menu
156$!
157$	WRITE SYS$OUTPUT "''ESC'[0;0H''ESC'[2J"
158$	WRITE SYS$OUTPUT "''ESC'#6Drive Manufacturer Menu"
159$	WRITE SYS$OUTPUT "-------------------------------------------------------------------------------"
160$	RCNT = 1
161$	LCNT = 4
162$	FILL = " "
163$ DISP_VENDORS:
164$	IF LCNT .EQ. 21
165$	 THEN
166$	  LCNT = 4
167$	  RCNT = RCNT + 33
168$	ENDIF
169$	DCNT = DCNT + 1
170$	IF DCNT .GT. VCNT THEN GOTO DISP_VEND_DONE
171$	LCNT = LCNT + 1
172$	IF DCNT .GE. 10 THEN FILL = ""
173$	VENDSTR = VENDS'DCNT'
174$	WRITE SYS$OUTPUT "''ESC'[''LCNT';''RCNT'H''FILL'''DCNT') ''VENDSTR'"
175$	GOTO DISP_VENDORS
176$
177$ DISP_VEND_DONE:
178$
179$	OPEN/READ 0 SYS$COMMAND
180$	READ/END=ERR_EXIT/PROMPT="''ESC'[23;0H''ESC'[0KEnter your CD drive's manufacturer number (or press ^Z to exit): " 0 DCHOICE
181$	CLOSE 0
182$	IF DCHOICE .LT. 1 .OR. DCHOICE .GT. DCNT-1 THEN GOTO DISP_VEND_DONE
183$
184$	FILE = VEND'DCHOICE'
185$	OPEN/READ 1 [.LIBDI_D.CFGTBL]'FILE'.
186$!
187$! Determine available drive models of selected vendor
188$!
189$	DRCNT = 0
190$ READDEVFIL:
191$	READ/ERROR=ENDREADDEV 1 LINE
192$	STR = F$EDIT(F$EXTRACT(0,1,LINE),"COLLAPSE")
193$	IF STR .EQS. "#" .OR. STR .EQS. "" THEN GOTO READDEVFIL
194$	DRCNT = DRCNT + 1
195$	DRIVE'DRCNT' = F$ELEMENT(0,":",LINE)
196$	GOTO READDEVFIL
197$ ENDREADDEV:
198$	CLOSE 1
199$	VCNT = 0
200$	IF DRCNT .EQ. 0
201$	 THEN
202$	  WRITE SYS$OUTPUT "''CR'''LF'  %DRVCFG-F-NODRVPAR, No ''vendstr' drives found!"
203$	  GOTO ERR_EXIT
204$	ENDIF
205$!
206$! Display model name menue
207$!
208$	MODELMANU = VENDS'DCHOICE'
209$	WRITE SYS$OUTPUT "''ESC'[0;0H''ESC'[2J"
210$	WRITE SYS$OUTPUT "  ''MODELMANU' Drive Model Menu"
211$	WRITE SYS$OUTPUT "  -----------------------------------------------------------------------------"
212$	RCNT = 3
213$	LCNT = 4
214$	FILL = " "
215$ DISP_MODELS:
216$	IF LCNT .EQ. 21
217$	 THEN
218$	  LCNT = 4
219$	  RCNT = RCNT + 18
220$	ENDIF
221$	VCNT = VCNT + 1
222$	IF VCNT .GT. DRCNT THEN GOTO DISP_MODEL_DONE
223$	LCNT = LCNT + 1
224$	IF VCNT .GE. 10 THEN FILL = ""
225$	MODELSTR = DRIVE'VCNT'
226$	WRITE SYS$OUTPUT "''ESC'[''LCNT';''RCNT'H''FILL'''VCNT') ''MODELSTR'"
227$	GOTO DISP_MODELS
228$
229$ DISP_MODEL_DONE:
230$
231$	OPEN/READ 2 SYS$COMMAND
232$	READ/END=ERR_EXIT/PROMPT="''ESC'[23;3H''ESC'[0KEnter your CD drive's model number (or press ^Z to exit): " 2 MCHOICE
233$	CLOSE 2
234$	IF MCHOICE .LT. 1 .OR. MCHOICE .GT. VCNT-1 THEN GOTO DISP_MODEL_DONE
235$	MODEL = DRIVE'MCHOICE'
236$!
237$! Setup params to be updated in DEVICE.CFG
238$!
239$	OPEN/READ 3 [.LIBDI_D.CFGTBL]'FILE'.
240$ READDEVCAP:
241$	READ/ERROR=ENDREADCAP 3 LINE
242$	STR = F$EDIT(F$EXTRACT(0,1,LINE),"COLLAPSE")
243$	IF STR .EQS. "#" .OR. STR .EQS. "" THEN GOTO READDEVCAP
244$	DRIVE = F$ELEMENT(0,":",LINE)
245$	IF DRIVE .EQS. MODEL THEN GOTO ENDREADCAP
246$	GOTO READDEVCAP
247$ ENDREADCAP:
248$	CLOSE 3
249$
250$	WRITE SYS$OUTPUT "''CR'''LF'  %DRVCFG-I-CHKCHG, Checking required modifications to DEVICE.CFG"
251$
252$	mode = F$ELEMENT(1,":",LINE)
253$!
254$! For non-SCSI drives (where the cfgtbl mode field is 0), the
255$! deviceInterfaceMethod parameter is set in a platform-dependent manner
256$! (See the comments of this parameter in device.cfg).  For VMS, the
257$! deviceInterfaceMethod should be set to 0 even in this case because
258$! non-SCSI (IDE) drives are supported via SCSI-emulation in VMS's DQdriver.
259$!
260$	OPEN/WRITE 101 CHANGE.1
261$	WRITE 101 "deviceInterfaceMethod:  0"
262$	CLOSE 101
263$       OPEN/WRITE 201 MOD1.EDT
264$	WRITE 201 "FIND 'deviceInterfaceMethod:'"
265$	WRITE 201 "DELETE"
266$	WRITE 201 "INCLUDE CHANGE.1"
267$	WRITE 201 "EXIT"
268$	CLOSE 201
269$
270$	vcode = F$ELEMENT(2,":",LINE)
271$	OPEN/WRITE 102 CHANGE.2
272$	WRITE 102 "driveVendorCode:        ''vcode'"
273$	CLOSE 102
274$       OPEN/WRITE 202 MOD2.EDT
275$	WRITE 202 "FIND 'driveVendorCode:'"
276$	WRITE 202 "DELETE"
277$	WRITE 202 "INCLUDE CHANGE.2"
278$	WRITE 202 "EXIT"
279$	CLOSE 202
280$
281$	pmsf = F$ELEMENT(3,":",LINE)
282$	IF pmsf
283$	 THEN
284$	  pmsf = "True"
285$	 ELSE
286$	  pmsf = "False"
287$	ENDIF
288$	OPEN/WRITE 103 CHANGE.3
289$	WRITE 103 "playAudioMSFSupport:    ''pmsf'"
290$	CLOSE 103
291$       OPEN/WRITE 203 MOD3.EDT
292$	WRITE 203 "FIND 'playAudioMSFSupport:'"
293$	WRITE 203 "DELETE"
294$	WRITE 203 "INCLUDE CHANGE.3"
295$	WRITE 203 "EXIT"
296$	CLOSE 203
297$
298$	p12 = F$ELEMENT(4,":",LINE)
299$       IF p12
300$        THEN
301$         p12 = "True"
302$        ELSE
303$         p12 = "False"
304$       ENDIF
305$	OPEN/WRITE 104 CHANGE.4
306$	WRITE 104 "playAudio12Support:     ''p12'"
307$	CLOSE 104
308$       OPEN/WRITE 204 MOD4.EDT
309$	WRITE 204 "FIND 'playAudio12Support:'"
310$	WRITE 204 "DELETE"
311$	WRITE 204 "INCLUDE CHANGE.4"
312$	WRITE 204 "EXIT"
313$	CLOSE 204
314$
315$	p10 = F$ELEMENT(5,":",LINE)
316$       IF p10
317$        THEN
318$         p10 = "True"
319$        ELSE
320$         p10 = "False"
321$       ENDIF
322$	OPEN/WRITE 105 CHANGE.5
323$	WRITE 105 "playAudio10Support:     ''p10'"
324$	CLOSE 105
325$       OPEN/WRITE 205 MOD5.EDT
326$	WRITE 205 "FIND 'playAudio10Support:'"
327$	WRITE 205 "DELETE"
328$	WRITE 205 "INCLUDE CHANGE.5"
329$	WRITE 205 "EXIT"
330$	CLOSE 205
331$
332$	pti = F$ELEMENT(6,":",LINE)
333$       IF pti
334$        THEN
335$         pti = "True"
336$        ELSE
337$         pti = "False"
338$       ENDIF
339$	OPEN/WRITE 106 CHANGE.6
340$	WRITE 106 "playAudioTISupport:     ''pti'"
341$	CLOSE 106
342$       OPEN/WRITE 206 MOD6.EDT
343$	WRITE 206 "FIND 'playAudioTISupport:'"
344$	WRITE 206 "DELETE"
345$	WRITE 206 "INCLUDE CHANGE.6"
346$	WRITE 206 "EXIT"
347$	CLOSE 206
348$
349$	ld = F$ELEMENT(7,":",LINE)
350$       IF ld
351$        THEN
352$         ld = "True"
353$        ELSE
354$         ld = "False"
355$       ENDIF
356$	OPEN/WRITE 107 CHANGE.7
357$	WRITE 107 "loadSupport:            ''ld'"
358$	CLOSE 107
359$       OPEN/WRITE 207 MOD7.EDT
360$	WRITE 207 "FIND 'loadSupport:'"
361$	WRITE 207 "DELETE"
362$	WRITE 207 "INCLUDE CHANGE.7"
363$	WRITE 207 "EXIT"
364$	CLOSE 207
365$
366$	ej = F$ELEMENT(8,":",LINE)
367$       IF ej
368$        THEN
369$         ej = "True"
370$        ELSE
371$         ej = "False"
372$       ENDIF
373$	OPEN/WRITE 108 CHANGE.8
374$	WRITE 108 "ejectSupport:           ''ej'"
375$	CLOSE 108
376$       OPEN/WRITE 208 MOD8.EDT
377$	WRITE 208 "FIND 'ejectSupport:'"
378$	WRITE 208 "DELETE"
379$	WRITE 208 "INCLUDE CHANGE.8"
380$	WRITE 208 "EXIT"
381$	CLOSE 208
382$
383$	mdbd = F$ELEMENT(9,":",LINE)
384$       IF mdbd
385$        THEN
386$         mdbd = "True"
387$        ELSE
388$         mdbd = "False"
389$       ENDIF
390$	OPEN/WRITE 109 CHANGE.9
391$	WRITE 109 "modeSenseSetDBD:        ''mdbd'"
392$	CLOSE 109
393$       OPEN/WRITE 209 MOD9.EDT
394$	WRITE 209 "FIND 'modeSenseSetDBD:'"
395$	WRITE 209 "DELETE"
396$	WRITE 209 "INCLUDE CHANGE.9"
397$	WRITE 209 "EXIT"
398$	CLOSE 209
399$
400$	m10 = F$ELEMENT(10,":",LINE)
401$       IF m10
402$        THEN
403$         m10 = "True"
404$        ELSE
405$         m10 = "False"
406$       ENDIF
407$	OPEN/WRITE 110 CHANGE.10
408$	WRITE 110 "modeSenseUse10Byte:     ''m10'"
409$	CLOSE 110
410$       OPEN/WRITE 210 MOD10.EDT
411$	WRITE 210 "FIND 'modeSenseUse10Byte:'"
412$	WRITE 210 "DELETE"
413$	WRITE 210 "INCLUDE CHANGE.10"
414$	WRITE 210 "EXIT"
415$	CLOSE 210
416$
417$	vctl = F$ELEMENT(11,":",LINE)
418$	VOLCTL = "False"
419$	IF vctl .EQ. 1 .OR. vctl .EQ. 3 .OR. vctl .EQ. 5 .OR. vctl .EQ. 7 THEN VOLCTL = "True"
420$	OPEN/WRITE 111A CHANGE.11A
421$	WRITE 111A "volumeControlSupport:   ''VOLCTL'"
422$	CLOSE 111A
423$       OPEN/WRITE 211A MOD11A.EDT
424$	WRITE 211A "FIND 'volumeControlSupport:'"
425$	WRITE 211A "DELETE"
426$	WRITE 211A "INCLUDE CHANGE.11A"
427$	WRITE 211A "EXIT"
428$	CLOSE 211A
429$
430$	BALCTL = "False"
431$	IF vctl .EQ. 2 .OR. vctl .EQ. 3 .OR. vctl .EQ. 6 .OR. vctl .EQ. 7 THEN BALCTL = "True"
432$	OPEN/WRITE 111B CHANGE.11B
433$	WRITE 111B "balanceControlSupport:  ''BALCTL'"
434$	CLOSE 111B
435$       OPEN/WRITE 211B MOD11B.EDT
436$	WRITE 211B "FIND 'balanceControlSupport:'"
437$	WRITE 211B "DELETE"
438$	WRITE 211B "INCLUDE CHANGE.11B"
439$	WRITE 211B "EXIT"
440$	CLOSE 211B
441$
442$	ROUCTL = "False"
443$	IF vctl .EQ. 4 .OR. vctl .EQ. 5 .OR. vctl .EQ. 6 .OR. vctl .EQ. 7 THEN ROUCTL = "True"
444$	OPEN/WRITE 111C CHANGE.11C
445$	WRITE 111C "channelRouteSupport:    ''ROUCTL'"
446$	CLOSE 111C
447$       OPEN/WRITE 211C MOD11C.EDT
448$	WRITE 211C "FIND 'channelRouteSupport:'"
449$	WRITE 211C "DELETE"
450$	WRITE 211C "INCLUDE CHANGE.11C"
451$	WRITE 211C "EXIT"
452$	CLOSE 211C
453$
454$	vbase = F$ELEMENT(12,":",LINE)
455$	OPEN/WRITE 112 CHANGE.12
456$	WRITE 112 "scsiAudioVolumeBase:    ''vbase'"
457$	CLOSE 112
458$       OPEN/WRITE 212 MOD12.EDT
459$	WRITE 212 "FIND 'scsiAudioVolumeBase:'"
460$	WRITE 212 "DELETE"
461$	WRITE 212 "INCLUDE CHANGE.12"
462$	WRITE 212 "EXIT"
463$	CLOSE 212
464$
465$	vtaper = F$ELEMENT(13,":",LINE)
466$	OPEN/WRITE 113 CHANGE.13
467$	WRITE 113 "volumeControlTaper:     ''vtaper'"
468$	CLOSE 113
469$       OPEN/WRITE 213 MOD13.EDT
470$	WRITE 213 "FIND 'volumeControlTaper:'"
471$	WRITE 213 "DELETE"
472$	WRITE 213 "INCLUDE CHANGE.13"
473$	WRITE 213 "EXIT"
474$	CLOSE 213
475$
476$	paus = F$ELEMENT(14,":",LINE)
477$       IF paus
478$        THEN
479$         paus = "True"
480$        ELSE
481$         paus = "False"
482$       ENDIF
483$	OPEN/WRITE 114 CHANGE.14
484$	WRITE 114 "pauseResumeSupport:     ''paus'"
485$	CLOSE 114
486$       OPEN/WRITE 214 MOD14.EDT
487$	WRITE 214 "FIND 'pauseResumeSupport:'"
488$	WRITE 214 "DELETE"
489$	WRITE 214 "INCLUDE CHANGE.14"
490$	WRITE 214 "EXIT"
491$	CLOSE 214
492$
493$	strict = F$ELEMENT(15,":",LINE)
494$       IF strict
495$        THEN
496$         strict = "True"
497$        ELSE
498$         strict = "False"
499$       ENDIF
500$	OPEN/WRITE 115 CHANGE.15
501$	WRITE 115 "strictPauseResume:      ''strict'"
502$	CLOSE 115
503$       OPEN/WRITE 215 MOD15.EDT
504$	WRITE 215 "FIND 'strictPauseResume:'"
505$	WRITE 215 "DELETE"
506$	WRITE 215 "INCLUDE CHANGE.15"
507$	WRITE 215 "EXIT"
508$	CLOSE 215
509$
510$	ppp = F$ELEMENT(16,":",LINE)
511$       IF ppp
512$        THEN
513$         ppp = "True"
514$        ELSE
515$         ppp = "False"
516$       ENDIF
517$	OPEN/WRITE 116 CHANGE.16
518$	WRITE 116 "playPausePlay:          ''ppp'"
519$	CLOSE 116
520$       OPEN/WRITE 216 MOD16.EDT
521$	WRITE 216 "FIND 'playPausePlay:'"
522$	WRITE 216 "DELETE"
523$	WRITE 216 "INCLUDE CHANGE.16"
524$	WRITE 216 "EXIT"
525$	CLOSE 216
526$
527$	lk = F$ELEMENT(17,":",LINE)
528$       IF lk
529$        THEN
530$         lk = "True"
531$        ELSE
532$         lk = "False"
533$       ENDIF
534$	OPEN/WRITE 117 CHANGE.17
535$	WRITE 117 "caddyLockSupport:       ''lk'"
536$	CLOSE 117
537$       OPEN/WRITE 217 MOD17.EDT
538$	WRITE 217 "FIND 'caddyLockSupport:'"
539$	WRITE 217 "DELETE"
540$	WRITE 217 "INCLUDE CHANGE.17"
541$	WRITE 217 "EXIT"
542$	CLOSE 217
543$
544$	cp = F$ELEMENT(18,":",LINE)
545$       IF cp
546$        THEN
547$         cp = "True"
548$        ELSE
549$         cp = "False"
550$       ENDIF
551$	OPEN/WRITE 118 CHANGE.18
552$	WRITE 118 "curposFormat:           ''cp'"
553$	CLOSE 118
554$       OPEN/WRITE 218 MOD18.EDT
555$	WRITE 218 "FIND 'curposFormat:'"
556$	WRITE 218 "DELETE"
557$	WRITE 218 "INCLUDE CHANGE.18"
558$	WRITE 218 "EXIT"
559$	CLOSE 218
560$
561$	tur = F$ELEMENT(19,":",LINE)
562$       IF tur
563$        THEN
564$         tur = "True"
565$        ELSE
566$         tur = "False"
567$       ENDIF
568$	OPEN/WRITE 119 CHANGE.19
569$	WRITE 119 "noTURWhenPlaying:       ''tur'"
570$	CLOSE 119
571$       OPEN/WRITE 219 MOD19.EDT
572$	WRITE 219 "FIND 'noTURWhenPlaying:'"
573$	WRITE 219 "DELETE"
574$	WRITE 219 "INCLUDE CHANGE.19"
575$	WRITE 219 "EXIT"
576$	CLOSE 219
577$
578$	chg = F$ELEMENT(20,":",LINE)
579$	OPEN/WRITE 120 CHANGE.20
580$	WRITE 120 "mediumChangeMethod:     ''chg'"
581$	CLOSE 120
582$       OPEN/WRITE 220 MOD20.EDT
583$	WRITE 220 "FIND 'mediumChangeMethod:'"
584$	WRITE 220 "DELETE"
585$	WRITE 220 "INCLUDE CHANGE.20"
586$	WRITE 220 "EXIT"
587$	CLOSE 220
588$
589$	ndisc = F$ELEMENT(21,":",LINE)
590$	OPEN/WRITE 121 CHANGE.21
591$	WRITE 121 "numDiscs:               ''ndisc'"
592$	CLOSE 121
593$       OPEN/WRITE 221 MOD21.EDT
594$	WRITE 221 "FIND 'numDiscs:'"
595$	WRITE 221 "DELETE"
596$	WRITE 221 "INCLUDE CHANGE.21"
597$	WRITE 221 "EXIT"
598$	CLOSE 221
599$
600$	sp = F$ELEMENT(22,":",LINE)
601$	OPEN/WRITE 122 CHANGE.22
602$	WRITE 122 "spinUpInterval:         ''sp'"
603$	CLOSE 122
604$       OPEN/WRITE 222 MOD22.EDT
605$	WRITE 222 "FIND 'spinUpInterval:'"
606$	WRITE 222 "DELETE"
607$	WRITE 222 "INCLUDE CHANGE.22"
608$	WRITE 222 "EXIT"
609$	CLOSE 222
610$
611$	msel = F$ELEMENT(23,":",LINE)
612$       IF msel
613$        THEN
614$         msel = "True"
615$        ELSE
616$         msel = "False"
617$       ENDIF
618$	OPEN/WRITE 123 CHANGE.23
619$	WRITE 123 "cddaScsiModeSelect:     ''msel'"
620$	CLOSE 123
621$       OPEN/WRITE 223 MOD23.EDT
622$	WRITE 223 "FIND 'cddaScsiModeSelect:'"
623$	WRITE 223 "DELETE"
624$	WRITE 223 "INCLUDE CHANGE.23"
625$	WRITE 223 "EXIT"
626$	CLOSE 223
627$
628$	dens = F$ELEMENT(24,":",LINE)
629$	OPEN/WRITE 124 CHANGE.24
630$	WRITE 124 "cddaScsiDensity:        ''dens'"
631$	CLOSE 124
632$       OPEN/WRITE 224 MOD24.EDT
633$	WRITE 224 "FIND 'cddaScsiDensity:'"
634$	WRITE 224 "DELETE"
635$	WRITE 224 "INCLUDE CHANGE.24"
636$	WRITE 224 "EXIT"
637$	CLOSE 224
638$
639$	rdcmd = F$ELEMENT(25,":",LINE)
640$	OPEN/WRITE 125 CHANGE.25
641$	WRITE 125 "cddaScsiReadCommand:    ''rdcmd'"
642$	CLOSE 125
643$       OPEN/WRITE 225 MOD25.EDT
644$	WRITE 225 "FIND 'cddaScsiReadCommand:'"
645$	WRITE 225 "DELETE"
646$	WRITE 225 "INCLUDE CHANGE.25"
647$	WRITE 225 "EXIT"
648$	CLOSE 225
649$
650$	be = F$ELEMENT(26,":",LINE)
651$       IF be
652$        THEN
653$         be = "True"
654$        ELSE
655$         be = "False"
656$       ENDIF
657$	OPEN/WRITE 126 CHANGE.26
658$	WRITE 126 "cddaDataBigEndian:      ''be'"
659$	CLOSE 126
660$       OPEN/WRITE 226 MOD26.EDT
661$	WRITE 226 "FIND 'cddaDataBigEndian:'"
662$	WRITE 226 "DELETE"
663$	WRITE 226 "INCLUDE CHANGE.26"
664$	WRITE 226 "EXIT"
665$	CLOSE 226
666$!
667$! OpenVMS CDDA defaults
668$!
669$	OPEN/WRITE 1000 CHANGE.1000
670$	WRITE 1000 "cddaMethod:             2"
671$	CLOSE 1000
672$       OPEN/WRITE 2000 MOD2000.EDT
673$	WRITE 2000 "FIND 'cddaMethod:'"
674$	WRITE 2000 "DELETE"
675$	WRITE 2000 "INCLUDE CHANGE.1000"
676$	WRITE 2000 "EXIT"
677$	CLOSE 2000
678$
679$	OPEN/WRITE 1001 CHANGE.1001
680$	WRITE 1001 "cddaReadMethod:         1"
681$	CLOSE 1001
682$       OPEN/WRITE 2001 MOD2001.EDT
683$	WRITE 2001 "FIND 'cddaReadMethod:'"
684$	WRITE 2001 "DELETE"
685$	WRITE 2001 "INCLUDE CHANGE.1001"
686$	WRITE 2001 "EXIT"
687$	CLOSE 2001
688$
689$	OPEN/WRITE 1002 CHANGE.1002
690$	WRITE 1002 "cddaWriteMethod:        7"
691$	CLOSE 1002
692$       OPEN/WRITE 2002 MOD2002.EDT
693$	WRITE 2002 "FIND 'cddaWriteMethod:'"
694$	WRITE 2002 "DELETE"
695$	WRITE 2002 "INCLUDE CHANGE.1002"
696$	WRITE 2002 "EXIT"
697$	CLOSE 2002
698$
699$!
700$! Display some informational messages and apply changes to DEVICE.CFG
701$!
702$
703$	WRITE SYS$OUTPUT "  %DRVCFG-I-COPY, Saving default DEVICE.CFG as DEVICE_ORIG.CFG"
704$	COPYY DEVICE.CFG DEVICE_ORIG.CFG
705$	WRITE SYS$OUTPUT "  %DRVCFG-I-APPCHG, Applying changes to DEVICE.CFG"
706$       DEFINE/NOLOG SYS$INPUT SYS$COMMAND
707$       DEFINE/NOLOG SYS$OUTPUT NLA0:
708$       EDITTT/EDT/COMMAND=MOD1.EDT   DEVICE.CFG
709$       EDITTT/EDT/COMMAND=MOD2.EDT   DEVICE.CFG
710$       EDITTT/EDT/COMMAND=MOD3.EDT   DEVICE.CFG
711$       EDITTT/EDT/COMMAND=MOD4.EDT   DEVICE.CFG
712$       EDITTT/EDT/COMMAND=MOD5.EDT   DEVICE.CFG
713$       EDITTT/EDT/COMMAND=MOD6.EDT   DEVICE.CFG
714$       EDITTT/EDT/COMMAND=MOD7.EDT   DEVICE.CFG
715$       EDITTT/EDT/COMMAND=MOD8.EDT   DEVICE.CFG
716$       EDITTT/EDT/COMMAND=MOD9.EDT   DEVICE.CFG
717$       EDITTT/EDT/COMMAND=MOD10.EDT  DEVICE.CFG
718$       EDITTT/EDT/COMMAND=MOD11A.EDT DEVICE.CFG
719$       EDITTT/EDT/COMMAND=MOD11B.EDT DEVICE.CFG
720$       EDITTT/EDT/COMMAND=MOD11C.EDT DEVICE.CFG
721$       EDITTT/EDT/COMMAND=MOD12.EDT  DEVICE.CFG
722$       EDITTT/EDT/COMMAND=MOD13.EDT  DEVICE.CFG
723$       EDITTT/EDT/COMMAND=MOD14.EDT  DEVICE.CFG
724$       EDITTT/EDT/COMMAND=MOD15.EDT  DEVICE.CFG
725$       EDITTT/EDT/COMMAND=MOD16.EDT  DEVICE.CFG
726$       EDITTT/EDT/COMMAND=MOD17.EDT  DEVICE.CFG
727$       EDITTT/EDT/COMMAND=MOD18.EDT  DEVICE.CFG
728$       EDITTT/EDT/COMMAND=MOD19.EDT  DEVICE.CFG
729$       EDITTT/EDT/COMMAND=MOD20.EDT  DEVICE.CFG
730$       EDITTT/EDT/COMMAND=MOD21.EDT  DEVICE.CFG
731$       EDITTT/EDT/COMMAND=MOD22.EDT  DEVICE.CFG
732$       EDITTT/EDT/COMMAND=MOD23.EDT  DEVICE.CFG
733$       EDITTT/EDT/COMMAND=MOD24.EDT  DEVICE.CFG
734$       EDITTT/EDT/COMMAND=MOD25.EDT  DEVICE.CFG
735$       EDITTT/EDT/COMMAND=MOD26.EDT  DEVICE.CFG
736$
737$       EDITTT/EDT/COMMAND=MOD2000.EDT  DEVICE.CFG
738$       EDITTT/EDT/COMMAND=MOD2001.EDT  DEVICE.CFG
739$       EDITTT/EDT/COMMAND=MOD2002.EDT  DEVICE.CFG
740$
741$       DEASSIGN SYS$OUTPUT
742$       DEASSIGN SYS$INPUT
743$	WRITE SYS$OUTPUT "  %DRVCFG-I-CLNUP, Cleaning up temporary files..."
744$       DELETE/NOCONFIRM MOD*.EDT;*,CHANGE.*;*
745$	PURGE DEVICE.CFG
746$	RENAME DEVICE.CFG DEVICE.CFG;1
747$
748$	WRITE SYS$OUTPUT "''CR'''LF'  %DRVCFG-S-SUCUPD, DEVICE.CFG successfully updated."
749$	GOTO EXIT
750$
751$ ERR_EXIT:
752$	WRITE SYS$OUTPUT "''CR'''LF'  Automatic configuration of DEVICE.CFG _not_ done.''CR'''LF'"
753$	WRITE SYS$OUTPUT "  You need to either re-run this procedure or edit your DEVICE.CFG file "
754$	WRITE SYS$OUTPUT "  manually to make use of all your CD drive's capabilities.''CR'''LF'"
755$	IF P2 .NES. "NO_ENTRY_TEXT" THEN GOTO EXIT
756$	INQUIRE/NOPUNCTATION DUMMY "''ESC'[28C''ESC'[7mPress Return to continue''ESC'[0m"
757$
758$ EXIT:
759$	EXIT
760$
761