Old solaris-config.sh
  1 #!/bin/sh
  2 #
  3 # @(#)config.sh 7.60 02/04/24
  4 #
  5 # Script to set up the device-dependent configuration files.
  6 #
  7 #    xmcd  - Motif(tm) CD Audio Player
  8 #    cda   - Command-line CD Audio Player
  9 #
 10 #    Copyright (C) 1993-2002  Ti Kan
 11 #    E-mail: xmcd@amb.org
 12 #
 13 #    This program is free software; you can redistribute it and/or modify
 14 #    it under the terms of the GNU General Public License as published by
 15 #    the Free Software Foundation; either version 2 of the License, or
 16 #    (at your option) any later version.
 17 #
 18 #    This program is distributed in the hope that it will be useful,
 19 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
 20 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 21 #    GNU General Public License for more details.
 22 #
 23 #    You should have received a copy of the GNU General Public License
 24 #    along with this program; if not, write to the Free Software
 25 #    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 26 #
 27 
 28 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/local/bin:/usr/ucb
 29 export PATH
 30 
 31 VER=3.2.1
 32 
 33 # Change the following directory to fit your local configuration
 34 BINDIR=/opt/sfw/bin
 35 XMCDLIB=/opt/sfw/lib/X11/xmcd
 36 DISCOGDIR=/opt/sfw/lib/X11/xmcd/discog
 37 XMCD_URL=http://www.amb.org/xmcd/
 38 
 39 ERRFILE=/tmp/xmcd.err
 40 BTMPFILE=/tmp/.xmcdcfg.b$$
 41 MTMPFILE=/tmp/.xmcdcfg.m$$
 42 
 43 CFGDIR=$XMCDLIB/config
 44 SCRDIR=$XMCDLIB/scripts
 45 CDDB1PATH="rock;jazz;blues;newage;classical;reggae;folk;country;soundtrack;misc;data"
 46 OWNER=_default_
 47 GROUP=_default_
 48 CDIRPERM=777
 49 
 50 # Utility functions
 51 
 52 do_exit()
 53 {
 54         if [ $1 -eq 0 ]
 55         then
 56                 rm -f $CFGDIR/common.cfg.old
 57                 $ECHO "\n\nXmcd set-up is now complete.\n"
 58                 $ECHO "Please read the DRIVES file supplied with the xmcd"
 59                 $ECHO "distribution for hardware configuration information"
 60                 $ECHO "about specific drives.\n"
 61         else
 62                 $ECHO "\n\nErrors have occurred configuring xmcd."
 63                 if [ $ERRFILE != /dev/null ]
 64                 then
 65                         $ECHO "See $ERRFILE for an error log."
 66                 fi
 67         fi
 68         exit $1
 69 }
 70 
 71 log_err()
 72 {
 73         if [ "$1" = "-p" ]
 74         then
 75                 $ECHO "Error: $2" >&2
 76         fi
 77         $ECHO "$2" >>$ERRFILE
 78 }
 79 
 80 get_str()
 81 {
 82         $ECHO "$* \c"
 83         read ANS
 84         if [ -n "$ANS" ]
 85         then
 86                 return 0
 87         else
 88                 return 1
 89         fi
 90 }
 91 
 92 get_yn()
 93 {
 94         if [ -z "$YNDEF" ]
 95         then
 96                 YNDEF=y
 97         fi
 98 
 99         while :
100         do
101                 $ECHO "$*? [${YNDEF}] \c"
102                 read ANS
103                 if [ -n "$ANS" ]
104                 then
105                         case $ANS in
106                         [yY])
107                                 RET=0
108                                 break
109                                 ;;
110                         [nN])
111                                 RET=1
112                                 break
113                                 ;;
114                         *)
115                                 $ECHO "Please answer y or n"
116                                 ;;
117                         esac
118                 else
119                         if [ $YNDEF = y ]
120                         then
121                                 RET=0
122                         else
123                                 RET=1
124                         fi
125                         break
126                 fi
127         done
128 
129         YNDEF=
130         return $RET
131 }
132 
133 
134 do_link()
135 {
136         source=$1
137         target=$2
138 
139         rm -f $target
140 
141         # Try symlink first
142         ln -s $source $target 2>/dev/null
143         RETSTAT=$?
144 
145         if [ $RETSTAT != 0 -a -f $source ]
146         then
147                 # Use hard link if a regular file
148                 ln $source $target 2>/dev/null
149                 RETSTAT=$?
150         fi
151 
152         if [ $RETSTAT != 0 ]
153         then
154                 log_err -p "Cannot link $source -> $target"
155         fi
156         return $RETSTAT
157 }
158 
159 
160 do_chown()
161 {
162         if [ $2 != _default_ ]
163         then
164                 chown $1 $2 2>/dev/null
165         fi
166 }
167 
168 
169 do_chgrp()
170 {
171         if [ $2 != _default_ ]
172         then
173                 chgrp $1 $2 2>/dev/null
174         fi
175 }
176 
177 
178 do_chmod()
179 {
180         if [ $2 != _default_ ]
181         then
182                 chmod $1 $2 2>/dev/null
183         fi
184 }
185 
186 
187 make_dir()
188 {
189         dir=$1
190         perm=$2
191         owner=$3
192         group=$4
193         $ECHO "\t$dir"
194         if [ ! -d $dir ]
195         then
196                 mkdir -p $dir
197         fi
198         do_chmod $perm $dir 2>/dev/null
199         return 0
200 }
201 
202 
203 get_old_cparm()
204 {
205         if [ -r $CFGDIR/common.cfg.old ]
206         then
207                 cparmfile=$CFGDIR/common.cfg.old
208         elif [ -z "$FROM_INSTALL_SH" ]
209         then
210                 cparmfile=$CFGDIR/common.cfg
211         else
212                 return 1
213         fi
214 
215         PARMVAL=`grep "^${1}:" $cparmfile 2>/dev/null | $AWK '{ print $2 }'`
216         return $?
217 }
218 
219 
220 get_proxy()
221 {
222         YNDEF=n
223         if get_old_cparm "cddbUseProxy" || get_old_cparm "cddbUseHttpProxy"
224         then
225                 if echo "$PARMVAL" | fgrep -i true >/dev/null 2>&1
226                 then
227                         YNDEF=y
228                 fi
229         fi
230         $ECHO "\n  Is this system within a firewall that requires the use of"
231         get_yn "  an HTTP proxy server to access the Internet"
232         if [ $? -ne 0 ]
233         then
234                 USEPROXY=False
235                 PROXYSERVER="localhost:80"
236                 return
237         fi
238 
239         USEPROXY=True
240 
241         PROXYSERVER=
242         PROXYPORT=
243         if get_old_cparm "proxyServer"
244         then
245                 PROXYSERVER=`echo ${PARMVAL} | $AWK -F: '{ print $1 }'`
246                 PROXYPORT=`echo ${PARMVAL} | $AWK -F: '{ print $2 }'`
247         fi
248         if [ -z "$PROXYSERVER" ]
249         then
250                 PROXYSERVER=localhost
251         fi
252         if [ -z "$PROXYPORT" ]
253         then
254                 PROXYPORT=80
255         fi
256 
257         while :
258         do
259                 if get_str \
260                 "  Enter the proxy server host name or IP number: [${PROXYSERVER}]"
261                 then
262                         if ($ECHO "$ANS" | grep "[      ]") >/dev/null 2>&1
263                         then
264                                 $ECHO "  Invalid input.  Try again."
265                                 continue
266                         else
267                                 PROXYSERVER="$ANS"
268                         fi
269                 fi
270                 break
271         done
272 
273         while :
274         do
275                 if get_str \
276                 "  Enter the proxy server port number: [${PROXYPORT}]"
277                 then
278                         if [ `expr "$ANS" : '^[0-9]*$'` -eq 0 ]
279                         then
280                                 $ECHO "  Invalid input.  Try again."
281                                 continue
282                         else
283                                 PROXYPORT="$ANS"
284                         fi
285                 fi
286                 break
287         done
288 
289         PROXYSERVER="${PROXYSERVER}:${PROXYPORT}"
290 
291         YNDEF=n
292         if get_old_cparm "proxyAuthorization" && \
293                 echo "$PARMVAL" | fgrep -i true >/dev/null 2>&1
294         then
295                 YNDEF=y
296         fi
297         get_yn "  Does the proxy server require password authorization"
298         if [ $? -ne 0 ]
299         then
300                 PROXYAUTH=False
301         else
302                 PROXYAUTH=True
303         fi
304 }
305 
306 
307 cddb_config()
308 {
309         # Set up cdinfoPath
310 
311         $ECHO "\nIf your system has Internet connectivity and functional"
312         $ECHO "domain name service (DNS), you should answer 'y' to the next"
313         $ECHO "question.  If this system is not linked to the Internet at all,"
314         $ECHO "then answer 'n'."
315 
316         YNDEF=y
317         if get_old_cparm "internetOffline" || get_old_cparm "disableCddb" || \
318            get_old_cparm "cddbRemoteDisable"
319         then
320                 if echo "$PARMVAL" | fgrep -i true >/dev/null 2>&1
321                 then
322                         YNDEF=n
323                 fi
324         fi
325 
326         $ECHO "\n  Would you like to access the Internet CDDB(tm) servers "
327         get_yn "  for album/track information"
328         if [ $? -ne 0 ]
329         then
330                 $ECHO "\nInternet CDDB server access is disabled."
331                 $ECHO "To enable it later, run the $CFGDIR/config.sh"
332                 $ECHO "script again."
333                 INETOFFLN=True
334                 CDINFOPATH="$CDDB1PATH"
335                 return
336         fi
337 
338         INETOFFLN=False
339         if [ -d $XMCDLIB/cdinfo ]
340         then
341                 CDINFOPATH="CDDB;${CDDB1PATH}"
342         else
343                 CDINFOPATH="CDDB"
344         fi
345 
346         get_proxy
347 
348         $ECHO "\nAnswer 'y' to the question below only if you have"
349         $ECHO "Netscape(tm) Navigator or Communicator web browser installed"
350         $ECHO "on your system."
351 
352         YNDEF=y
353         if get_old_cparm "autoMusicBrowser" && \
354                 echo "$PARMVAL" | fgrep -i false >/dev/null 2>&1
355         then
356                 YNDEF=n
357         fi
358         get_yn "\n  Would you like the automatic CDDB Music Browser feature"
359         if [ $? -ne 0 ]
360         then
361                 AUTOBROWSER=False
362         else
363                 AUTOBROWSER=True
364         fi
365 }
366 
367 
368 ask_scsi_config()
369 {
370         $ECHO "\n  Since you have an unlisted drive, I will assume"
371         $ECHO "  that it is SCSI-2 compliant.  If this is not true then"
372         $ECHO "  xmcd will probably not work."
373 
374         YNDEF=n
375         if get_yn "\n  Do you want to continue"
376         then
377                 METHOD=0
378                 VENDOR=0
379                 VOLBASE=0
380                 VOLTAPER=0
381                 PLAYNOTUR=False
382         else
383                 return 1
384         fi
385 
386         $ECHO "\n  You will now be asked several technical questions about"
387         $ECHO "  your drive.  If you don't know the answer, try accepting"
388         $ECHO "  the default values, and if problems occur when using"
389         $ECHO "  xmcd, reconfigure the settings by running this script"
390         $ECHO "  again, or editing the $CFGDIR/$CONFIGFILE"
391         $ECHO "  file."
392         $ECHO "\n  Please refer to the \"xmcd Drive Configuration Guide\""
393         $ECHO "  for help.  It can be found at the xmcd web site:"
394         $ECHO "\n  ${XMCD_URL}config.html"
395         $ECHO "\n  If you get an unlisted drive working with xmcd in this"
396         $ECHO "  manner, the author of xmcd would like to hear from you"
397         $ECHO "  and incorporate the settings into the next xmcd release."
398         $ECHO "  Please send e-mail to \"xmcd@amb.org\"."
399 
400         while :
401         do
402             YNDEF=n
403             if get_yn "\n  Is your drive on $XMCD_DEV a multi-disc changer"
404             then
405                 $ECHO "\n  Select one of the following changer methods:\n"
406                 $ECHO "  1.\tSCSI LUN addressing method"
407                 $ECHO "  2.\tSCSI medium changer method"
408                 $ECHO "  3.\tother"
409                 $ECHO "  q.\tquit (abort configuration)"
410 
411                 while :
412                 do
413                     if get_str "\n  Enter choice: [1]"
414                     then
415                         case "$ANS" in
416                         [1-3])
417                             break
418                             ;;
419                         q)
420                             return 1
421                             ;;
422                         *)
423                             $ECHO "  Please answer 1 to 3."
424                             ;;
425                         esac
426                     else
427                         ANS=1
428                         break
429                     fi
430                 done    
431 
432                 if [ "$ANS" -eq 3 ]
433                 then
434                     #
435                     # Unsupported changer method: just treat it
436                     # as a single-disc drive
437                     #
438                     $ECHO "\n  Your drive will be treated as a single-disc unit."
439                     CHGMETHOD=0
440                     NUMDISCS=1
441                     MULTIPLAY=False
442                 else
443                     CHGMETHOD="$ANS"
444                     while :
445                     do
446                         if get_str \
447                             "\n  How many discs does the drive support?:"
448                         then
449                             case "$ANS" in
450                             [1-9]*)
451                                 NUMDISCS="$ANS"
452                                 break
453                                 ;;
454                             *)
455                                 $ECHO "  Invalid input.  Try again."
456                                 ;;
457                             esac
458                         else
459                             $ECHO "  Invalid input.  Try again."
460                         fi
461                     done
462 
463                     if [ "$NUMDISCS" -gt 1 ]
464                     then
465                         MULTIPLAY=True
466                     else
467                         CHGMETHOD=0
468                         MULTIPLAY=False
469                     fi
470                 fi
471             else
472                 CHGMETHOD=0
473                 NUMDISCS=1
474                 MULTIPLAY=False
475             fi
476 
477             $ECHO "\n  Does your drive on $XMCD_DEV:\n"
478 
479             YNDEF=y
480             if get_yn "  - Support the Play_Audio_MSF command"
481             then
482                     PLAYMSF=True
483             else
484                     PLAYMSF=False
485             fi
486 
487             YNDEF=n
488             if get_yn "  - Support the Play_Audio(12) command"
489             then
490                     PLAY12=True
491             else
492                     PLAY12=False
493             fi
494 
495             YNDEF=y
496             if get_yn "  - Support the Play_Audio(10) command"
497             then
498                     PLAY10=True
499             else
500                     PLAY10=False
501             fi
502 
503             YNDEF=y
504             if get_yn "  - Support the Play_Audio_Track/Index command"
505             then
506                     PLAYTI=True
507             else
508                     PLAYTI=False
509             fi
510 
511             YNDEF=n
512             if get_yn \
513                 "  - Support caddy load via the Start_Stop_Unit command"
514             then
515                     LOAD=True
516             else
517                     LOAD=False
518             fi
519 
520             YNDEF=y
521             if get_yn \
522                 "  - Support caddy eject via the Start_Stop_Unit command"
523             then
524                     EJECT=True
525             else
526                     EJECT=False
527             fi
528 
529             YNDEF=y
530             if get_yn \
531                 "  - Support the DBD bit in the Mode_Sense command"
532             then
533                     MODEDBD=True
534             else
535                     MODEDBD=False
536             fi
537 
538             YNDEF=n
539             if get_yn \
540                 "  - Need the 10-byte version of the Mode_Sense command"
541             then
542                     MODE10BYTE=True
543             else
544                     MODE10BYTE=False
545             fi
546 
547             YNDEF=y
548             if get_yn \
549                 "  - Support audio volume control via the Mode_Select command"
550             then
551                     YNDEF=y
552                     if get_yn \
553                     "  - Support independent volume control for each channel"
554                     then
555                             VOLSUPP=True
556                             BALSUPP=True
557                     else
558                             VOLSUPP=True
559                             BALSUPP=False
560                     fi
561 
562                     YNDEF=y
563                     if get_yn \
564                         "  - Support audio channel routing via Mode_Select"
565                     then
566                             CHRSUPP=True
567                     else
568                             CHRSUPP=False
569                     fi
570             else
571                     VOLCTL=0
572                     VOLSUPP=False
573                     BALSUPP=False
574                     CHRSUPP=False
575             fi
576 
577             YNDEF=y
578             if get_yn "  - Support the Pause/Resume command"
579             then
580                     PAUSE=True
581             else
582                     PAUSE=False
583             fi
584 
585             YNDEF=y
586             if get_yn "  - Support the Prevent/Allow_Medium_Removal command"
587             then
588                     CADDYLOCK=True
589             else
590                     CADDYLOCK=False
591             fi
592 
593             YNDEF=n
594             if get_yn \
595                 "  - Support Data Format 1 of the Read_Subchannel command"
596             then
597                     CURPOSFMT=True
598             else
599                     CURPOSFMT=False
600             fi
601 
602             YNDEF=n
603             if get_yn "  - Return CDDA data in big-endian byte order"
604             then
605                     CDDADATABE=True
606             else
607                     CDDADATABE=False
608             fi
609 
610             YNDEF=y
611             if get_yn "  - Need a Mode_Select operation to enable CDDA reading"
612             then
613                     CDDASCSIMODESEL=True
614             else
615                     CDDASCSIMODESEL=False
616             fi
617 
618             if [ $CDDASCSIMODESEL = True ]
619             then
620                 while :
621                 do
622                     if get_str \
623                         "  \n  What is the Mode_Select density code to enable CDDA reading?: [0]"
624                     then
625                         case "$ANS" in
626                         [0-9]*)
627                             CDDASCSIDENSITY="$ANS"
628                             break
629                             ;;
630                         *)
631                             $ECHO "  Invalid input.  Try again."
632                             ;;
633                         esac
634                     else
635                         CDDASCSIDENSITY=0
636                         break
637                     fi
638                 done
639             else
640                 CDDASCSIDENSITY=0
641             fi
642 
643             while :
644             do
645                 $ECHO "  \n  Which command should be used for CDDA reads?"
646                 $ECHO "    0    MMC standard Read_CD"
647                 $ECHO "    1    SCSI standard Read"
648                 $ECHO "    2    NEC Read_CDDA"
649                 $ECHO "    3    Sony Read_CDDA"
650                 if get_str "  Select one: [2]"
651                 then
652                     case "$ANS" in
653                     [0-3])
654                         CDDASCSIREADCMD="$ANS"
655                         break
656                         ;;
657                     *)
658                         $ECHO "  Invalid input.  Try again."
659                         ;;
660                     esac
661                 else
662                     CDDASCSIREADCMD=2
663                     break
664                 fi
665             done
666 
667             while :
668             do
669                 if get_str \
670                     "  \n  What is the required wait time (seconds) for the drive to spin up?: [3]"
671                 then
672                     case "$ANS" in
673                     [0-9]*)
674                         SPINUPINTVL="$ANS"
675                         break
676                         ;;
677                     *)
678                         $ECHO "  Invalid input.  Try again."
679                         ;;
680                     esac
681                 else
682                     SPINUPINTVL=3
683                     break
684                 fi
685             done
686 
687             if [ "$PAUSE" = True ]
688             then
689                 YNDEF=n
690                 if get_yn \
691                 "\n  Does the drive require strict pause/resume symmetry"
692                 then
693                         STRICTPR=True
694                 else
695                         STRICTPR=False
696                 fi
697 
698                 YNDEF=n
699                 if get_yn \
700                 "\n  Does the drive require a pause before reissuing play"
701                 then
702                         PLAYPAUSEPLAY=True
703                 else
704                         PLAYPAUSEPLAY=False
705                 fi
706             else
707                     STRICTPR=False
708                     PLAYPAUSEPLAY=False
709             fi
710 
711             $ECHO "\n  This is the configuration for ${XMCD_DEV}:\n"
712             $ECHO "  logicalDriverNumber:   $DRVNO"
713             $ECHO "  mediumChangeMethod:    $CHGMETHOD"
714             $ECHO "  numDiscs:              $NUMDISCS"
715             $ECHO "  playAudio12Support:    $PLAY12"
716             $ECHO "  playAudioMSFSupport:   $PLAYMSF"
717             $ECHO "  playAudio10Support:    $PLAY10"
718             $ECHO "  playAudioTISupport:    $PLAYTI"
719             $ECHO "  loadSupport:           $LOAD"
720             $ECHO "  ejectSupport:          $EJECT"
721             $ECHO "  modeSenseSetDBD:       $MODEDBD"
722             $ECHO "  modeSenseUse10Byte:    $MODE10BYTE"
723             $ECHO "  volumeControlSupport:  $VOLSUPP"
724             $ECHO "  balanceControlSupport: $BALSUPP"
725             $ECHO "  pauseResumeSupport:    $PAUSE"
726             $ECHO "  strictPauseResume:     $STRICTPR"
727             $ECHO "  playPausePlay:         $PLAYPAUSEPLAY"
728             $ECHO "  caddyLockSupport:      $CADDYLOCK"
729             $ECHO "  curposFormat:          $CURPOSFMT"
730             $ECHO "  multiPlay:             $MULTIPLAY"
731             $ECHO "  spinUpInterval:        $SPINUPINTVL"
732             $ECHO "  cddaScsiModeSelect:    $CDDASCSIMODESEL"
733             $ECHO "  cddaScsiReadCommand:   $CDDASCSIREADCMD"
734             $ECHO "  cddaScsiDensity:       $CDDASCSIDENSITY"
735             $ECHO "  cddaDataBigEndian:     $CDDADATABE"
736 
737             YNDEF=y
738             if get_yn "\n  Is this acceptable"
739             then
740                     break
741             fi
742 
743             $ECHO "  Try again..."
744         done
745 
746         return 0
747 }
748 
749 
750 ask_nonscsi_config()
751 {
752         #
753         # Select the ioctl method
754         #
755         $ECHO "\n  Please select a Device Interface Method:\n"
756         $ECHO "  1.\tSunOS/Solaris/Linux/QNX ioctl method"
757         $ECHO "  2.\tFreeBSD/NetBSD/OpenBSD ioctl method"
758         $ECHO "  3.\tIBM AIX IDE ioctl method"
759         $ECHO "  4.\tBSDI BSD/OS ATAPI"
760         $ECHO "  5.\tSCO Open Server ATAPI BTLD"
761         $ECHO "  6.\tCompaq Tru64 UNIX / Digital UNIX ATAPI"
762         $ECHO "  7.\tHP-UX ATAPI"
763         $ECHO "  q.\tquit (abort configuration)"
764 
765         if [ -z "$IOCDEF" -o "$IOCDEF" = 0 ]
766         then
767                 IOCDEF=1
768         fi
769 
770         while :
771         do
772                 if get_str "\n  Enter choice: [$IOCDEF]"
773                 then
774                         case "$ANS" in
775                         [1-7])
776                                 break
777                                 ;;
778                         q)
779                                 return 1
780                                 ;;
781                         *)
782                                 $ECHO "  Please answer 1 to 7."
783                                 ;;
784                         esac
785                 else
786                         ANS=$IOCDEF
787                         break
788                 fi
789         done
790 
791         IOCMETHOD="$ANS"
792 
793         if [ -z "$NUMDISCS" ]
794         then
795                 YNDEF=n
796                 if get_yn "\n  Is your drive on $XMCD_DEV a multi-disc changer"
797                 then
798                         while :
799                         do
800                                 if get_str \
801                                 "\n  How many discs does the drive support?:"
802                                 then
803                                     case "$ANS" in
804                                     [1-9]*)
805                                         NUMDISCS="$ANS"
806                                         break
807                                         ;;
808                                     *)
809                                         $ECHO "  Invalid input.  Try again."
810                                         ;;
811                                     esac
812                                 else
813                                     $ECHO "  Invalid input.  Try again."
814                                 fi
815                         done
816 
817                         if [ "$NUMDISCS" -gt 1 ]
818                         then
819                                 CHGMETHOD=3
820                                 MULTIPLAY=True
821                         else
822                                 CHGMETHOD=0
823                                 MULTIPLAY=False
824                         fi
825                 else
826                         CHGMETHOD=0
827                         NUMDISCS=1
828                         MULTIPLAY=False
829                 fi
830         fi
831 
832         # Set the rest of the parameters
833         case "$IOCMETHOD" in
834         1)      # SunOS/Solaris/Linux/QNX ioctl method
835                 METHOD=1
836                 VENDOR=0
837                 VOLBASE=0
838                 VOLTAPER=0
839                 PLAYMSF=True
840                 PLAY12=False
841                 PLAY10=False
842                 PLAYTI=True
843                 LOAD=True
844                 EJECT=True
845                 MODEDBD=False
846                 MODE10BYTE=False
847                 VOLSUPP=True
848                 BALSUPP=True
849                 CHRSUPP=True
850                 VOLCTL=3
851                 PAUSE=True
852                 STRICTPR=False
853                 PLAYPAUSEPLAY=False
854                 CADDYLOCK=False
855                 CURPOSFMT=False
856                 PLAYNOTUR=False
857                 SPINUPINTVL=3
858                 CDDASCSIMODESEL=0
859                 CDDASCSIREADCMD=0
860                 CDDASCSIDENSITY=0
861                 CDDADATABE=0
862                 ;;
863         2)      # FreeBSD/NetBSD ioctl method
864                 METHOD=2
865                 VENDOR=0
866                 VOLBASE=0
867                 VOLTAPER=0
868                 PLAYMSF=True
869                 PLAY12=False
870                 PLAY10=False
871                 PLAYTI=True
872                 LOAD=True
873                 EJECT=True
874                 MODEDBD=False
875                 MODE10BYTE=False
876                 VOLSUPP=True
877                 BALSUPP=True
878                 CHRSUPP=False
879                 VOLCTL=3
880                 PAUSE=True
881                 STRICTPR=False
882                 PLAYPAUSEPLAY=False
883                 CADDYLOCK=True
884                 CURPOSFMT=False
885                 PLAYNOTUR=False
886                 SPINUPINTVL=3
887                 CDDASCSIMODESEL=0
888                 CDDASCSIREADCMD=0
889                 CDDASCSIDENSITY=0
890                 CDDADATABE=0
891                 ;;
892         3)      # IBM AIX IDE ioctl method
893                 METHOD=3
894                 VENDOR=0
895                 VOLBASE=0
896                 VOLTAPER=0
897                 PLAYMSF=True
898                 PLAY12=False
899                 PLAY10=False
900                 PLAYTI=True
901                 LOAD=False
902                 EJECT=True
903                 MODEDBD=False
904                 MODE10BYTE=False
905                 VOLSUPP=True
906                 BALSUPP=True
907                 CHRSUPP=False
908                 VOLCTL=3
909                 PAUSE=True
910                 STRICTPR=False
911                 PLAYPAUSEPLAY=False
912                 CADDYLOCK=True
913                 CURPOSFMT=False
914                 PLAYNOTUR=False
915                 SPINUPINTVL=3
916                 CDDASCSIMODESEL=0
917                 CDDASCSIREADCMD=0
918                 CDDASCSIDENSITY=0
919                 CDDADATABE=0
920                 ;;
921         4)      # BSDI BSD/OS ATAPI (SCSI emulation)
922                 # Set up as a "generic" SCSI-2 drive
923                 METHOD=0
924                 VENDOR=0
925                 VOLBASE=0
926                 VOLTAPER=0
927                 PLAYMSF=True
928                 PLAY12=False
929                 PLAY10=False
930                 PLAYTI=True
931                 LOAD=True
932                 EJECT=True
933                 MODEDBD=False
934                 MODE10BYTE=False
935                 VOLSUPP=False
936                 BALSUPP=False
937                 CHRSUPP=False
938                 VOLCTL=0
939                 PAUSE=True
940                 STRICTPR=False
941                 PLAYPAUSEPLAY=False
942                 CADDYLOCK=False
943                 CURPOSFMT=True
944                 PLAYNOTUR=False
945                 CHGMETHOD=0
946                 NUMDISCS=1
947                 MULTIPLAY=False
948                 SPINUPINTVL=3
949                 CDDASCSIMODESEL=0
950                 CDDASCSIREADCMD=0
951                 CDDASCSIDENSITY=0
952                 CDDADATABE=0
953                 ;;
954         5)      # SCO Open Server ATAPI BTLD (SCSI emulation)
955                 # Set up as a "generic" SCSI-2 drive
956                 METHOD=0
957                 VENDOR=0
958                 VOLBASE=0
959                 VOLTAPER=0
960                 PLAYMSF=True
961                 PLAY12=False
962                 PLAY10=False
963                 PLAYTI=True
964                 LOAD=True
965                 EJECT=True
966                 MODEDBD=False
967                 MODE10BYTE=False
968                 VOLSUPP=True
969                 BALSUPP=True
970                 CHRSUPP=False
971                 VOLCTL=3
972                 PAUSE=True
973                 STRICTPR=False
974                 PLAYPAUSEPLAY=False
975                 CADDYLOCK=False
976                 CURPOSFMT=False
977                 PLAYNOTUR=False
978                 CHGMETHOD=0
979                 NUMDISCS=1
980                 MULTIPLAY=False
981                 SPINUPINTVL=3
982                 CDDASCSIMODESEL=0
983                 CDDASCSIREADCMD=0
984                 CDDASCSIDENSITY=0
985                 CDDADATABE=0
986                 ;;
987         6)      # Compaq Tru64 UNIX / Digital UNIX ATAPI (SCSI emulation)
988                 # Set up as a "generic" SCSI-2 drive
989                 METHOD=0
990                 VENDOR=0
991                 VOLBASE=0
992                 VOLTAPER=0
993                 PLAYMSF=True
994                 PLAY12=False
995                 PLAY10=False
996                 PLAYTI=True
997                 LOAD=True
998                 EJECT=True
999                 MODEDBD=False
1000                 MODE10BYTE=False
1001                 VOLSUPP=True
1002                 BALSUPP=True
1003                 CHRSUPP=True
1004                 VOLCTL=7
1005                 PAUSE=True
1006                 STRICTPR=False
1007                 PLAYPAUSEPLAY=False
1008                 CADDYLOCK=True
1009                 CURPOSFMT=True
1010                 PLAYNOTUR=False
1011                 CHGMETHOD=0
1012                 NUMDISCS=1
1013                 MULTIPLAY=False
1014                 SPINUPINTVL=3
1015                 CDDASCSIMODESEL=0
1016                 CDDASCSIREADCMD=0
1017                 CDDASCSIDENSITY=0
1018                 CDDADATABE=0
1019                 ;;
1020         7)      # HP-UX ATAPI (SCSI emulation)
1021                 # Set up as a "generic" SCSI-2 drive
1022                 METHOD=0
1023                 VENDOR=0
1024                 VOLBASE=0
1025                 VOLTAPER=0
1026                 PLAYMSF=True
1027                 PLAY12=False
1028                 PLAY10=False
1029                 PLAYTI=True
1030                 LOAD=True
1031                 EJECT=True
1032                 MODEDBD=True
1033                 MODE10BYTE=False
1034                 VOLSUPP=True
1035                 BALSUPP=True
1036                 CHRSUPP=True
1037                 VOLCTL=7
1038                 PAUSE=True
1039                 STRICTPR=False
1040                 PLAYPAUSEPLAY=False
1041                 CADDYLOCK=True
1042                 CURPOSFMT=True
1043                 PLAYNOTUR=False
1044                 CHGMETHOD=0
1045                 NUMDISCS=1
1046                 MULTIPLAY=False
1047                 SPINUPINTVL=3
1048                 CDDASCSIMODESEL=0
1049                 CDDASCSIREADCMD=0
1050                 CDDASCSIDENSITY=0
1051                 CDDADATABE=0
1052                 ;;
1053         *)      # Should not get here
1054                 $ECHO "  Error: unsupported ioctl method."
1055                 return 1
1056                 ;;
1057         esac
1058 
1059         return 0
1060 }
1061 
1062 
1063 drive_sel()
1064 {
1065         if [ "$OS_SYS" = QNX ]
1066         then
1067                 ask_nonscsi_config
1068                 return $?
1069         fi
1070 
1071         eval `\
1072         (
1073                 $ECHO "ENTRIES=\""
1074                 cd $CFGDIR/.tbl
1075                 for i in *
1076                 do
1077                         if [ -f $i ]
1078                         then
1079                                 if fgrep tblver=6 $CFGDIR/.tbl/$i \
1080                                         >/dev/null 2>&1
1081                                 then
1082                                         $ECHO "$i \c"
1083                                 else
1084                                         log_err -p \
1085                                         "$CFGDIR/.tbl/$i version mismatch"
1086                                 fi
1087                         fi
1088                 done
1089                 $ECHO "\""
1090         )`
1091 
1092         j=1
1093         >$BTMPFILE
1094         if [ -n "$ENTRIES" ]
1095         then
1096                 for i in $ENTRIES
1097                 do
1098                         brand=`fgrep tblalias= $CFGDIR/.tbl/$i 2>/dev/null | \
1099                                 sed 's/^.*tblalias=//'`
1100                         if [ -z "$brand" ]
1101                         then
1102                                 brand=$i
1103                         fi
1104                         $ECHO "  $j\t$brand" >>$BTMPFILE
1105                         j=`expr $j + 1`
1106                 done
1107         fi
1108         if [ "$IS_SCSI" -eq 0 ]
1109         then
1110                 $ECHO "  $j\tother non-SCSI" >>$BTMPFILE
1111         elif [ "$IS_SCSI" -eq 1 ]
1112         then
1113                 $ECHO "  $j\tother SCSI" >>$BTMPFILE
1114         fi
1115         $ECHO "  ..\tStart over with drive $DRVNO configuration" >>$BTMPFILE
1116         $ECHO "  q\tquit (abort configuration)" >>$BTMPFILE
1117 
1118         showmenu=1
1119         while :
1120         do
1121                 if [ $showmenu = 1 ]
1122                 then
1123                         $ECHO "\n  Device ($XMCD_DEV) configuration"
1124                         $ECHO "  Please select the drive brand:\n"
1125 
1126                         PGLEN=`wc -l $BTMPFILE | $AWK '{ print $1 + 2 }'`
1127                         if [ $PGLEN -gt 18 ]
1128                         then
1129                                 PGLEN=`expr $PGLEN / 2`
1130                                 pr -t -2 -w78 -l$PGLEN $BTMPFILE
1131                         else
1132                                 cat $BTMPFILE
1133                         fi
1134                         showmenu=0
1135                 fi
1136 
1137                 if get_str "\n  Enter choice:"
1138                 then
1139                         if [ "$ANS" = q ]
1140                         then
1141                                 rm -f $BTMPFILE
1142                                 return 1
1143                         elif [ "$ANS" = ".." ]
1144                         then
1145                                 rm -f $BTMPFILE
1146                                 return 2
1147                         elif [ "$ANS" -lt 1 -o "$ANS" -gt $j ]
1148                         then
1149                                 $ECHO "  Please answer 1 to $j."
1150                         elif [ "$IS_SCSI" -eq 0 ] && [ "$ANS" = "$j" ]
1151                         then
1152                                 ask_nonscsi_config
1153                                 rm -f $BTMPFILE
1154                                 return $?
1155                         elif [ "$IS_SCSI" -eq 1 ] && [ "$ANS" = "$j" ]
1156                         then
1157                                 ask_scsi_config
1158                                 rm -f $BTMPFILE
1159                                 return $?
1160                         else
1161                                 k=1
1162                                 for i in $ENTRIES
1163                                 do
1164                                         if [ $k = $ANS ]
1165                                         then
1166                                                 model_sel $i $CFGDIR/.tbl/$i
1167                                                 ret=$?
1168                                                 if [ $ret -eq 2 ]
1169                                                 then
1170                                                         showmenu=1
1171                                                         break
1172                                                 else
1173                                                         rm -f $BTMPFILE
1174                                                         return $ret
1175                                                 fi
1176                                         fi
1177                                         k=`expr $k + 1`
1178                                 done
1179                         fi
1180                 else
1181                         $ECHO "  Please answer 1 to $j."
1182                 fi
1183         done
1184 
1185         # Should not get here.
1186         rm -f $BTMPFILE
1187         return 1
1188 }
1189 
1190 
1191 model_sel()
1192 {
1193         BRAND=$1
1194         CFGFILE=$2
1195 
1196         $ECHO "\n  Device ($XMCD_DEV) configuration"
1197         $ECHO "  Please select the $BRAND drive model:\n"
1198 
1199         $AWK -F: '
1200         BEGIN           { n = 1 }
1201         /^#/            { next }
1202         /^$/            { next }
1203         /^[     ]*$/    { next }
1204         {
1205                 if ($2 == 0) {
1206                         if ($3 == 1)
1207                                 mode = "OS driver ioctl"
1208                         else
1209                                 mode = "other"
1210                 }
1211                 else if ($2 == 1)
1212                         mode = "SCSI-1"
1213                 else if ($2 >= 2)
1214                         mode = "SCSI-2"
1215 
1216                 if (is_scsi == "-1") {
1217                         printf("  %d\t%-12s%s\n", n, $1, mode)
1218                         n++
1219                 }
1220                 else if (is_scsi == "0" && $2 == 0) {
1221                         printf("  %d\t%-12s%s\n", n, $1, mode)
1222                         n++
1223                 }
1224                 else if (is_scsi == "1" && $2 >= 1) {
1225                         printf("  %d\t%-12s%s\n", n, $1, mode)
1226                         n++
1227                 }
1228         }
1229         END {
1230                 if (is_scsi == "0")
1231                         printf("  %d\t%-12s%s\n", n, "other", "non-SCSI")
1232                 else if (is_scsi == "1")
1233                         printf("  %d\t%-12s%s\n", n, "other", "SCSI")
1234                 printf("  ..\tGo back to drive brand menu\n")
1235                 printf("  q\tquit (abort configuration)\n")
1236         }
1237         ' is_scsi="$IS_SCSI" $CFGFILE >$MTMPFILE
1238 
1239         k=`wc -l $MTMPFILE | $AWK '{ print $1 - 2 }'`
1240         PGLEN=`expr $k + 4`
1241 
1242         if [ $PGLEN -gt 16 ]
1243         then
1244                 $ECHO "\tModel       Mode\c"
1245                 $ECHO "                       Model       Mode\n"
1246                 PGLEN=`expr $PGLEN / 2`
1247                 pr -t -2 -w78 -l$PGLEN $MTMPFILE
1248         else
1249                 $ECHO "\tModel       Mode\n"
1250                 cat $MTMPFILE
1251         fi
1252 
1253         rm -f $MTMPFILE
1254 
1255         while :
1256         do
1257                 if get_str "\n  Enter choice:"
1258                 then
1259                         if [ "$ANS" = "q" ]
1260                         then
1261                                 return 1
1262                         elif [ "$ANS" = ".." ]
1263                         then
1264                                 return 2
1265                         elif [ "$ANS" -lt 1 -o "$ANS" -gt $k ]
1266                         then
1267                                 $ECHO "  Please answer 1 to $k."
1268                         elif [ "$IS_SCSI" -eq 0 ] && [ "$ANS" = "$k" ]
1269                         then
1270                                 ask_nonscsi_config
1271                                 return $?
1272                         elif [ "$IS_SCSI" -eq 1 ] && [ "$ANS" = "$k" ]
1273                         then
1274                                 ask_scsi_config
1275                                 return $?
1276                         else
1277                                 read_config $CFGFILE $ANS
1278                                 if [ "$IS_SCSI" -eq 0 ]
1279                                 then
1280                                         ask_nonscsi_config
1281                                 fi
1282                                 return $?
1283                         fi
1284                 else
1285                         $ECHO "  Please answer 1 to $k."
1286                 fi
1287         done
1288 
1289         # Should not get here.
1290         return 1
1291 }
1292 
1293 
1294 read_config()
1295 {
1296         eval `$AWK -F: '
1297         BEGIN {
1298                 n = 0
1299         }
1300         !/^#/ {
1301             if ((is_scsi && $2 > 0) || (!is_scsi && $2 == 0)) {
1302                 n++
1303                 if (n == sel) {
1304                     if ($2 > 0) {
1305                         print "METHOD=0"
1306                         printf("VENDOR=%d\n", $3)
1307                     }
1308                     else {
1309                         printf("METHOD=%d\n", $3)
1310                         print "VENDOR=0"
1311                     }
1312 
1313                     printf("PLAYMSF=%s\n", $4 == 0 ? "False" : "True")
1314                     printf("PLAY12=%s\n", $5 == 0 ? "False" : "True")
1315                     printf("PLAY10=%s\n", $6 == 0 ? "False" : "True")
1316                     printf("PLAYTI=%s\n", $7 == 0 ? "False" : "True")
1317                     printf("LOAD=%s\n", $8 == 0 ? "False" : "True")
1318                     printf("EJECT=%s\n", $9 == 0 ? "False" : "True")
1319                     printf("MODEDBD=%s\n", $10 == 0 ? "False" : "True")
1320                     printf("MODE10BYTE=%s\n", $11 == 0 ? "False" : "True")
1321                     printf("VOLCTL=%d\n", $12)
1322                     printf("VOLBASE=%d\n", $13)
1323                     printf("VOLTAPER=%d\n", $14)
1324                     printf("PAUSE=%s\n", $15 == 0 ? "False" : "True")
1325                     printf("STRICTPR=%s\n", $16 == 0 ? "False" : "True")
1326                     printf("PLAYPAUSEPLAY=%s\n", $17 == 0 ? "False" : "True")
1327                     printf("CADDYLOCK=%s\n", $18 == 0 ? "False" : "True")
1328                     printf("CURPOSFMT=%s\n", $19 == 0 ? "False" : "True")
1329                     printf("PLAYNOTUR=%s\n", $20 == 0 ? "False" : "True")
1330                     printf("CHGMETHOD=%d\n", $21)
1331                     printf("MULTIPLAY=%s\n", $21 == 0 ? "False" : "True")
1332                     printf("NUMDISCS=%d\n", $22)
1333                     printf("SPINUPINTVL=%d\n", $23)
1334                     printf("CDDASCSIMODESEL=%s\n", $24 == 0 ? "False" : "True")
1335                     printf("CDDASCSIDENSITY=%d\n", $25)
1336                     printf("CDDASCSIREADCMD=%d\n", $26)
1337                     printf("CDDADATABE=%s\n", $27 == 0 ? "False" : "True")
1338                 }
1339             }
1340         }
1341         ' is_scsi="$IS_SCSI" sel=$2 $1`
1342 
1343         return $?
1344 }
1345 
1346 
1347 set_devnode_elems()
1348 {
1349         # Set default device node name elements
1350 
1351         if [ -x /bin/ipcs -o -x /usr/bin/ipcs ]
1352         then
1353                 # System has SysV IPC: enable CDDA write-file only as default
1354                 CDDAMETHOD=1
1355                 CDDAREADMETHOD=1
1356                 CDDAWRITEMETHOD=5
1357         else
1358                 # No SysV IPC: disable CDDA
1359                 CDDAMETHOD=0
1360                 CDDAREADMETHOD=0
1361                 CDDAWRITEMETHOD=0
1362         fi
1363         CDDAREADCHUNKBLOCKS=4
1364         IOCDEF=0
1365 
1366         if [ "$OS_SYS" = AIX ]
1367         then
1368                 # IBM AIX
1369                 DEVPREF=/dev/rcd
1370                 DEVSUFF=
1371                 FIRST=0
1372                 IOCDEF=3
1373                 CDDAMETHOD=1
1374                 if [ "$IS_SCSI" -eq 1 ]
1375                 then
1376                         CDDAREADMETHOD=1
1377                 else
1378                         CDDAREADMETHOD=5
1379                 fi
1380                 CDDAWRITEMETHOD=1
1381         elif [ "$OS_SYS" = A/UX ]
1382         then
1383                 # Apple A/UX
1384                 DEVPREF=/dev/scsi/
1385                 DEVSUFF=
1386                 FIRST=3
1387         elif [ "$OS_SYS" = BSD/OS ]
1388         then
1389                 # BSDI BSD/OS
1390                 DEVPREF=/dev/rsd
1391                 DEVSUFF=c
1392                 FIRST=2
1393                 IOCDEF=4
1394                 CDDAMETHOD=1
1395                 CDDAREADMETHOD=1
1396                 CDDAWRITEMETHOD=1
1397         elif [ "$OS_SYS" = dgux ]
1398         then
1399                 # Data General DG/UX
1400                 DEVPREF="/dev/scsi/scsi(ncsc@7(FFFB0000,7),"
1401                 DEVSUFF=",0)"
1402                 FIRST=2
1403         elif [ "$OS_SYS" = FreeBSD ]
1404         then
1405                 # FreeBSD
1406                 if [ "$IS_SCSI" -eq 1 ]
1407                 then
1408                         DEVPREF=/dev/rcd
1409                 else
1410                         DEVPREF=/dev/rwcd
1411                 fi
1412                 DEVSUFF=c
1413                 FIRST=0
1414                 IOCDEF=2
1415                 CDDAMETHOD=1
1416                 if [ "$IS_SCSI" -eq 1 ]
1417                 then
1418                         CDDAREADMETHOD=1
1419                 else
1420                         CDDAREADMETHOD=4
1421                 fi
1422                 CDDAWRITEMETHOD=1
1423         elif [ "$OS_SYS" = HP-UX ]
1424         then
1425                 case "$OS_REL" in
1426                 [AB].09*)       # HP-UX 9.x
1427                         DEVPREF=/dev/rdsk/c201d
1428                         DEVSUFF=s0
1429                         FIRST=4
1430                         ;;
1431                 B.10*)          # HP-UX 10.x
1432                         DEVPREF=/dev/rdsk/c0t
1433                         DEVSUFF=s0
1434                         FIRST=4
1435                 ;;
1436                 B.11*)          # HP-UX 11.x
1437                         DEVPREF=/dev/rdsk/c0t
1438                         DEVSUFF=s0
1439                         FIRST=4
1440                         ;;
1441                 *)
1442                         OS_REL=unknown
1443                         ;;
1444                 esac
1445                 IOCDEF=7
1446                 CDDAMETHOD=1
1447                 CDDAREADMETHOD=1
1448                 CDDAWRITEMETHOD=4
1449         elif [ "$OS_SYS" = IRIX -o "$OS_SYS" = IRIX64 ]
1450         then
1451                 # SGI IRIX
1452                 DEVPREF=`hinv | grep CDROM | line | \
1453                     sed 's/^.*controller \([0-9]*\).*$/\/dev\/scsi\/sc\1d/'`
1454                 DEVSUFF=l0
1455                 FIRST=`hinv | grep CDROM | line | \
1456                         sed 's/^.*unit \([0-9]*\).*$/\1/'`
1457                 CDDAMETHOD=1
1458                 CDDAREADMETHOD=1
1459                 CDDAWRITEMETHOD=3
1460         elif [ "$OS_SYS" = Linux ]
1461         then
1462                 # Linux
1463                 if [ "$IS_SCSI" -eq 1 ]
1464                 then
1465                         DEVPREF=/dev/scd
1466                         FIRST=0
1467                 else
1468                         DEVPREF=/dev/cdrom
1469                         FIRST=
1470                 fi
1471                 DEVSUFF=
1472                 BLKDEV=1
1473                 IOCDEF=1
1474                 CDDAMETHOD=1
1475                 if [ "$IS_SCSI" -eq 1 ]
1476                 then
1477                         CDDAREADMETHOD=1
1478                 else
1479                         CDDAREADMETHOD=3
1480                 fi
1481                 CDDAWRITEMETHOD=1
1482                 CDDAREADCHUNKBLOCKS=8
1483         elif [ "$OS_SYS" = NetBSD ] || [ "$OS_SYS" = OpenBSD ]
1484         then
1485                 # NetBSD/OpenBSD
1486                 if [ "$IS_SCSI" -eq 1 ]
1487                 then
1488                         DEVPREF=/dev/rcd
1489                 else
1490                         DEVPREF=/dev/rwcd
1491                 fi
1492                 case "$OS_MACH" in
1493                 *86)
1494                         DEVSUFF=d
1495                         ;;
1496                 *)
1497                         DEVSUFF=c
1498                         ;;
1499                 esac
1500                 FIRST=0
1501                 IOCDEF=2
1502                 CDDAMETHOD=1
1503                 if [ "$IS_SCSI" -eq 1 ]
1504                 then
1505                         CDDAREADMETHOD=1
1506                 else
1507                         CDDAREADMETHOD=4
1508                 fi
1509                 CDDAWRITEMETHOD=1
1510         elif [ "$OS_SYS" = OSF1 ]
1511         then
1512                 case "$OS_MACH" in
1513                 alpha)  # Digital OSF/1
1514                         if [ -d /devices/rdisk ]
1515                         then
1516                                 DEVPREF=/devices/rdisk/cdrom
1517                                 DEVSUFF=c
1518                                 FIRST=2
1519                         else
1520                                 DEVPREF=/dev/rrz
1521                                 DEVSUFF=c
1522                                 FIRST=4
1523                         fi
1524                         IOCDEF=6
1525                         ;;
1526                 *)
1527                         OS_REL=unknown
1528                         ;;
1529                 esac
1530         elif [ "$OS_SYS" = QNX ]
1531         then
1532                 # QNX
1533                 DEVPREF=/dev/cd
1534                 DEVSUFF=
1535                 FIRST=0
1536                 BLKDEV=1
1537                 IOCDEF=1
1538         elif [ "$OS_SYS" = SINIX-N ]
1539         then
1540                 # SNI SINIX-N
1541                 DEVPREF=/dev/ios0/rsdisk
1542                 DEVSUFF=s0
1543                 FIRST=005
1544         elif [ "$OS_SYS" = SINIX-P ]
1545         then
1546                 # SNI SINIX-P
1547                 DEVPREF=/dev/ios0/rsdisk
1548                 DEVSUFF=s0
1549                 FIRST=006
1550         elif [ "$OS_SYS" = SunOS -o "$OS_SYS" = Solaris ]
1551         then
1552                 case "$OS_REL" in
1553                 4.*)    # SunOS 4.x
1554                         case `arch -k` in
1555                         sun4[cmu])
1556                                 DEVPREF=/dev/rsr
1557                                 DEVSUFF=
1558                                 FIRST=0
1559                                 ;;
1560                         *)
1561                                 OS_REL=unknown
1562                                 ;;
1563                         esac
1564                         CDDAMETHOD=1
1565                         CDDAREADMETHOD=1
1566                         CDDAWRITEMETHOD=5
1567                         CDDAREADCHUNKBLOCKS=16
1568                         ;;
1569                 5.*)    # SunOS 5.x
1570                         YNDEF=y
1571                         if get_yn \
1572                         "  Does your system use the Volume Manager (/usr/sbin/vold)"
1573                         then
1574                                 DEVPREF=/vol/dev/aliases/cdrom
1575                                 DEVSUFF=
1576                                 FIRST=0
1577                                 VOLMGT=True
1578                                 CLOSEONEJECT=True
1579                         else
1580                                 DEVPREF=/dev/rdsk/c0t
1581                                 DEVSUFF=d0s0
1582                                 FIRST=6
1583                         fi
1584                         IOCDEF=1
1585                         CDDAMETHOD=1
1586                         if [ "$IS_SCSI" -eq 1 ]
1587                         then
1588                                 CDDAREADMETHOD=1
1589                         else
1590                                 CDDAREADMETHOD=2
1591                         fi
1592                         CDDAWRITEMETHOD=2
1593                         CDDAREADCHUNKBLOCKS=75
1594                         ;;
1595                 *)
1596                         OS_REL=unknown
1597                         ;;
1598                 esac
1599         elif [ "$OS_SYS" = ULTRIX ]
1600         then
1601                 case "$OS_MACH" in
1602                 RISC)   # Digital Ultrix
1603                         DEVPREF=/dev/rrz
1604                         DEVSUFF=c
1605                         FIRST=4
1606                         ;;
1607                 *)
1608                         OS_REL=unknown
1609                         ;;
1610                 esac
1611         elif [ -x /bin/ftx ] && ftx
1612         then
1613                 case "$OS_REL" in
1614                 4.*)    
1615                         if [ -x /bin/hppa ] && hppa
1616                         then
1617                                 # Stratus FTX SVR4/PA-RISC
1618                                 DEVPREF=/dev/rcdrom/c0a2d
1619                                 DEVSUFF=l0
1620                                 FIRST=0
1621                         else
1622                                 # On non-supported FTX variants
1623                                 OS_REL=unknown
1624                         fi
1625                         ;;
1626                 *)
1627                         OS_REL=unknown
1628                         ;;
1629                 esac
1630         elif [ -x /bin/i386 -o -x /sbin/i386 ] && i386
1631         then
1632                 case "$OS_REL" in
1633                 3.2)    # SCO UNIX/Open Desktop/Open Server
1634                         DEVPREF=/dev/rcd
1635                         DEVSUFF=
1636                         FIRST=0
1637                         IOCDEF=5
1638                         CDDAMETHOD=1
1639                         CDDAREADMETHOD=1
1640                         CDDAWRITEMETHOD=1
1641                         CDDAREADCHUNKBLOCKS=8
1642                         ;;
1643                 4.0)    # UNIX SVR4.0/x86
1644                         DEVPREF=/dev/rcdrom/cd
1645                         DEVSUFF=
1646                         FIRST=0
1647                         ;;
1648                 4.1)    # UNIX SVR4.1/x86
1649                         DEVPREF=/dev/rcdrom/cdrom
1650                         DEVSUFF=
1651                         FIRST=1
1652                         ;;
1653                 4.2)    # UNIX SVR4.2/x86 (UnixWare 1.x)
1654                         DEVPREF=/dev/rcdrom/cdrom
1655                         DEVSUFF=
1656                         FIRST=1
1657                         CDDAMETHOD=1
1658                         CDDAREADMETHOD=1
1659                         CDDAWRITEMETHOD=1
1660                         ;;
1661                 4*MP)   # UNIX SVR4.2MP/x86 (UnixWare 2.x)
1662                         DEVPREF=/dev/rcdrom/cdrom
1663                         DEVSUFF=
1664                         FIRST=1
1665                         CDDAMETHOD=1
1666                         CDDAREADMETHOD=1
1667                         CDDAWRITEMETHOD=1
1668                         ;;
1669                 5)      # UNIX SVR5/x86 (UnixWare 7, Caldera Open UNIX 8)
1670                         DEVPREF=/dev/rcdrom/cdrom
1671                         DEVSUFF=
1672                         FIRST=1
1673                         CDDAMETHOD=1
1674                         CDDAREADMETHOD=1
1675                         CDDAWRITEMETHOD=1
1676                         ;;
1677                 5.*)    # UNIX SVR5.*/x86 (UnixWare 7.x, Caldera Open UNIX 8)
1678                         DEVPREF=/dev/rcdrom/cdrom
1679                         DEVSUFF=
1680                         FIRST=1
1681                         CDDAMETHOD=1
1682                         CDDAREADMETHOD=1
1683                         CDDAWRITEMETHOD=1
1684                         ;;
1685                 *)
1686                         OS_REL=unknown
1687                         ;;
1688                 esac
1689         elif [ -x /bin/m88k ] && m88k
1690         then
1691                 case "$OS_REL" in
1692                 4.0)    # UNIX SVR4.0/88k
1693                         DEVPREF=/dev/rdsk/m187_c0d
1694                         DEVSUFF=s7
1695                         FIRST=3
1696                         ;;
1697                 *)
1698                         OS_REL=unknown
1699                         ;;
1700                 esac
1701         elif [ -r /vmunix ] && (strings /vmunix | fgrep NEWS-OS) \
1702                 >/dev/null 2>&1
1703         then
1704                 # Sony NEWS-OS
1705                 DEVPREF=/dev/rsd
1706                 DEVSUFF=c
1707                 FIRST=06
1708         else
1709                 OS_REL=unknown
1710         fi
1711 
1712         NOT_SUPPORTED="Error: You are not running an operating system that's currently supported by xmcd."
1713 
1714         if [ "$OS_REL" = unknown ]
1715         then
1716                 $ECHO "$NOT_SUPPORTED"
1717                 YNDEF=n
1718                 get_yn "Would you like to proceed anyway"
1719                 if [ $? -ne 0 ]
1720                 then
1721                         $ECHO "\nConfiguration aborted." >&2
1722                         log_err -n "Configuration aborted by user"
1723                         do_exit 3
1724                 fi
1725         fi
1726 }
1727 
1728 
1729 drive_config()
1730 {
1731         EXITSTAT=0
1732         DRVNO=0
1733         SEDLINE=
1734 
1735         case "$OS_SYS" in
1736         Linux|FreeBSD|NetBSD|OpenBSD)
1737                 SCSIDEF=n
1738                 ;;
1739         *)
1740                 SCSIDEF=y
1741                 ;;
1742         esac
1743 
1744         while :
1745         do
1746             $ECHO "\nConfiguring drive $DRVNO..."
1747             NUMDISCS=
1748 
1749             #
1750             # Set default device path name
1751             #
1752 
1753             YNDEF=$SCSIDEF
1754             if get_yn "\n  Does this drive use a SCSI interface"
1755             then
1756                 IS_SCSI=1       
1757             else
1758                 IS_SCSI=0
1759 
1760                 $ECHO "\n  Non-SCSI drives are currently supported only on the"
1761                 $ECHO "  BSDI, Digital/Tru64 UNIX, FreeBSD, HP-UX, IBM AIX,"
1762                 $ECHO "  Linux, NetBSD, OpenBSD, QNX, SCO Open Server and"
1763                 $ECHO "  Sun Solaris platforms."
1764                 $ECHO "  You must have kernel driver support for your CD-ROM"
1765                 $ECHO "  drive type."
1766 
1767                 YNDEF=y
1768                 get_yn "\n  Do you want to continue"
1769                 if [ $? -ne 0 ]
1770                 then
1771                     $ECHO "\nConfiguration aborted." >&2
1772                     log_err -n "Configuration aborted by user."
1773                     do_exit 1
1774                 fi
1775             fi
1776 
1777             set_devnode_elems
1778 
1779             if [ $DRVNO -eq 0 ]
1780             then
1781                 DEVNO=$FIRST
1782             elif [ -z "$DEVNO" ]
1783             then
1784                 DEVNO=1
1785             fi
1786 
1787             if [ $DRVNO -eq 0 ] && get_old_cparm "device" && [ -n "$PARMVAL" ]
1788             then
1789                 # If the old device path has the expected prefix for the
1790                 # type of device, then use the old device name as the
1791                 # default
1792                 n="`expr length "$DEVPREF" 2>/dev/null`"
1793                 m="`expr $PARMVAL : "$DEVPREF" 2>/dev/null`"
1794                 if [ -n "$n" -a "$n" != 0 -a "$n" = "$m" ]
1795                 then
1796                     DEFAULT_DEV=$PARMVAL
1797                 else
1798                     DEFAULT_DEV="${DEVPREF}${DEVNO}${DEVSUFF}"
1799                 fi
1800             else
1801                 DEFAULT_DEV="${DEVPREF}${DEVNO}${DEVSUFF}"
1802             fi
1803 
1804             while :
1805             do
1806                 if get_str "\n  Enter device path: [$DEFAULT_DEV]"
1807                 then
1808                     XMCD_DEV=$ANS
1809                 else
1810                     XMCD_DEV=$DEFAULT_DEV
1811                 fi
1812 
1813                 if [ $VOLMGT = True ]
1814                 then
1815                     break
1816                 fi
1817                 if [ $BLKDEV = 0 -a -c $XMCD_DEV ]
1818                 then
1819                     break
1820                 fi
1821                 if [ $BLKDEV = 1 -a -b $XMCD_DEV ]
1822                 then
1823                     break
1824                 fi
1825 
1826                 $ECHO "  $XMCD_DEV is an invalid device."
1827             done
1828 
1829             CONFIGFILE=`basename $XMCD_DEV`
1830             if [ $DRVNO -eq 0 ]
1831             then
1832                 XMCD_DEV0="$XMCD_DEV"
1833             fi
1834 
1835             drive_sel
1836             CFGSTAT=$?
1837             if [ $CFGSTAT -eq 2 ]
1838             then
1839                 continue
1840             elif [ $CFGSTAT -ne 0 ]
1841             then
1842                 $ECHO "\nConfiguration aborted." >&2
1843                 log_err -n "Configuration aborted by user."
1844                 do_exit $CFGSTAT
1845             fi
1846 
1847             if [ $NUMDISCS -gt 1 ]
1848             then
1849                 $ECHO "\n  This drive is a ${NUMDISCS}-disc changer."
1850 
1851                 case $CHGMETHOD in
1852                 1)
1853                     # SCSI LUN addressing method
1854                     $ECHO "\n  In order to change discs, your system must support separate device"
1855                     $ECHO "  nodes for each LUN of the multi-disc changer."
1856 
1857                     YNDEF=y
1858                     if get_yn "  Does your OS platforms support this?"
1859                     then
1860                         $ECHO "\n  Please enter the device nodes now."
1861 
1862                         n=1
1863                         DEVLIST=
1864                         LUNDEV=$XMCD_DEV
1865                         while [ $n -le $NUMDISCS ]
1866                         do
1867                             #
1868                             # Construct a default device
1869                             #
1870                             if [ "$OS_SYS" != HP-UX ] && \
1871                                (echo $LUNDEV | grep "s[0-9]*$") >/dev/null 2>&1
1872                             then
1873                                 LUNPREF=`echo $LUNDEV | \
1874                                     sed 's/\(.*\)[0-9]s[0-9]*/\1/'`
1875                                 LUNNUM=`echo $LUNDEV | \
1876                                     sed 's/.*\([0-9]\)s[0-9]*/\1/'`
1877                                 LUNSUFF=`echo $LUNDEV | \
1878                                     sed 's/.*[0-9]\(s[0-9]*\)/\1/'`
1879                             else
1880                                 LUNPREF=`echo $LUNDEV | \
1881                                     sed 's/\(.*\)[0-9][^0-9]*/\1/'`
1882                                 LUNNUM=`echo $LUNDEV | \
1883                                     sed 's/.*\([0-9]\)[^0-9]*/\1/'`
1884                                 LUNSUFF=`echo $LUNDEV | \
1885                                     sed 's/.*[0-9]\([^0-9]*\)/\1/'`
1886                             fi
1887 
1888                             if [ -n "$LUNNUM" ]
1889                             then
1890                                 if [ $n -gt 1 ]
1891                                 then
1892                                     LUNNUM=`expr $LUNNUM + 1`
1893                                 fi
1894                             else
1895                                 LUNNUM=`expr $n - 1`
1896                             fi
1897 
1898                             SAVDEV=$LUNDEV
1899                             LUNDEV="${LUNPREF}${LUNNUM}${LUNSUFF}"
1900 
1901                             if get_str "  Disc $n: [$LUNDEV]"
1902                             then
1903                                 LUNDEV=$ANS
1904                             fi
1905 
1906                             if [ $VOLMGT = False ]
1907                             then
1908                                 if [ $BLKDEV = 0 -a ! -c $LUNDEV ]
1909                                 then
1910                                     $ECHO "  $LUNDEV is invalid.  Try again."
1911                                     LUNDEV=$SAVDEV
1912                                     continue
1913                                 fi
1914                                 if [ $BLKDEV = 1 -a ! -b $LUNDEV ]
1915                                 then
1916                                     $ECHO "  $LUNDEV is invalid.  Try again."
1917                                     LUNDEV=$SAVDEV
1918                                     continue
1919                                 fi
1920                             fi
1921 
1922                             if [ -z "$DEVLIST" ]
1923                             then
1924                                 DEVLIST=$LUNDEV
1925                             else
1926                                 DEVLIST="${DEVLIST};${LUNDEV}"
1927                             fi
1928 
1929                             n=`expr $n + 1`
1930                         done
1931                     else
1932                         $ECHO "  It will be treated as a single disc player."
1933                         CHGMETHOD=0
1934                         NUMDISCS=1
1935                         MULTIPLAY=False
1936                         DEVLIST=$XMCD_DEV
1937                     fi
1938                     ;;
1939                 2)
1940                     # SCSI medium changer method
1941                     $ECHO "\n  In order to change discs, your system must support a separate device"
1942                     $ECHO "  node for the medium changer mechanism."
1943 
1944                     DEVLIST=$XMCD_DEV
1945 
1946                     YNDEF=y
1947                     if get_yn "  Does your OS platforms support this?"
1948                     then
1949                         while :
1950                         do
1951                             LUNDEV=/dev/changer
1952                             if get_str \
1953                             "\n  Enter the medium changer device: [$LUNDEV]"
1954                             then
1955                                 LUNDEV=$ANS
1956                             fi
1957 
1958                             if [ ! -c $LUNDEV ]
1959                             then
1960                                 $ECHO "  $LUNDEV is invalid.  Try again."
1961                                 continue
1962                             fi
1963 
1964                             DEVLIST="${DEVLIST};${LUNDEV}"
1965                             break
1966                         done
1967                     else
1968                         $ECHO \
1969                         "\n  The drive will be treated as a single disc player."
1970                         CHGMETHOD=0
1971                         NUMDISCS=1
1972                         MULTIPLAY=False
1973                         DEVLIST=$XMCD_DEV
1974                     fi
1975                     ;;
1976                 3)
1977                     # OS ioctl method
1978                     DEVLIST=$XMCD_DEV
1979                     ;;
1980                 *)
1981                     # Unsupported changer method
1982                     DEVLIST=$XMCD_DEV
1983                     ;;
1984                 esac
1985             else
1986                 DEVLIST=$XMCD_DEV
1987             fi
1988 
1989             DRVNOTICE="\n  NOTE: This configuration disables these features:"
1990 
1991             if [ $PLAYTI = False ]
1992             then
1993                 $ECHO "$DRVNOTICE"
1994                 DRVNOTICE="\c"
1995                 $ECHO "  - The Previous Index and Next Index buttons."
1996             fi
1997 
1998             if [ $CADDYLOCK = False ]
1999             then
2000                 $ECHO "$DRVNOTICE"
2001                 DRVNOTICE="\c"
2002                 $ECHO "  - The caddy lock."
2003             fi
2004 
2005             if [ $LOAD = False ]
2006             then
2007                 $ECHO "$DRVNOTICE"
2008                 DRVNOTICE="\c"
2009                 $ECHO "  - Software-controlled caddy load."
2010             fi
2011 
2012             if [ $PAUSE = False -a $VENDOR = 0 ]
2013             then
2014                 $ECHO "$DRVNOTICE"
2015                 DRVNOTICE="\c"
2016                 $ECHO "  - Audio pause/resume function."
2017             fi
2018 
2019             case "$VOLCTL" in
2020             0)
2021                 $ECHO "$DRVNOTICE"
2022                 DRVNOTICE="\c"
2023                 $ECHO "  - The volume, balance and channel routing controls."
2024                 VOLSUPP=False
2025                 BALSUPP=False
2026                 CHRSUPP=False
2027                 ;;
2028             1)
2029                 $ECHO "$DRVNOTICE"
2030                 DRVNOTICE="\c"
2031                 $ECHO "  - The balance and channel routing controls."
2032                 VOLSUPP=True
2033                 BALSUPP=False
2034                 CHRSUPP=False
2035                 ;;
2036             2)
2037                 $ECHO "$DRVNOTICE"
2038                 DRVNOTICE="\c"
2039                 $ECHO "  - The volume and channel routing controls."
2040                 VOLSUPP=False
2041                 BALSUPP=True
2042                 CHRSUPP=False
2043                 ;;
2044             3)
2045                 $ECHO "$DRVNOTICE"
2046                 DRVNOTICE="\c"
2047                 $ECHO "  - The channel routing control."
2048                 VOLSUPP=True
2049                 BALSUPP=True
2050                 CHRSUPP=False
2051                 ;;
2052             4)
2053                 $ECHO "$DRVNOTICE"
2054                 DRVNOTICE="\c"
2055                 $ECHO "  - The volume and balance controls."
2056                 VOLSUPP=False
2057                 BALSUPP=False
2058                 CHRSUPP=True
2059                 ;;
2060             5)
2061                 $ECHO "$DRVNOTICE"
2062                 DRVNOTICE="\c"
2063                 $ECHO "  - The balance control."
2064                 VOLSUPP=True
2065                 BALSUPP=False
2066                 CHRSUPP=True
2067                 ;;
2068             6)
2069                 $ECHO "$DRVNOTICE"
2070                 DRVNOTICE="\c"
2071                 $ECHO "  - The volume control."
2072                 VOLSUPP=False
2073                 BALSUPP=True
2074                 CHRSUPP=True
2075                 ;;
2076             7)
2077                 VOLSUPP=True
2078                 BALSUPP=True
2079                 CHRSUPP=True
2080                 ;;
2081             *)
2082                 ;;
2083             esac
2084 
2085             $ECHO "\n  Creating the $CFGDIR/$CONFIGFILE file..."
2086             GDEVLIST=`echo $DEVLIST | sed 's/\//\\\\\//g'`
2087 
2088             sed \
2089             -e "s/^!.*DO NOT MODIFY.*$/! DEVICE CONFIGURATION FILE/" \
2090             -e "s/^logicalDriveNumber:.*/logicalDriveNumber:    $DRVNO/" \
2091             -e "s/^cddaMethod:.*/cddaMethod:            $CDDAMETHOD/" \
2092             -e "s/^cddaReadMethod:.*/cddaReadMethod:            $CDDAREADMETHOD/" \
2093             -e "s/^cddaWriteMethod:.*/cddaWriteMethod:  $CDDAWRITEMETHOD/" \
2094             -e "s/^cddaReadChunkBlocks:.*/cddaReadChunkBlocks:  $CDDAREADCHUNKBLOCKS/" \
2095             -e "s/^cddaScsiModeSelect:.*/cddaScsiModeSelect:    $CDDASCSIMODESEL/" \
2096             -e "s/^cddaScsiReadCommand:.*/cddaScsiReadCommand:  $CDDASCSIREADCMD/" \
2097             -e "s/^cddaScsiDensity:.*/cddaScsiDensity:  $CDDASCSIDENSITY/" \
2098             -e "s/^cddaDataBigEndian:.*/cddaDataBigEndian:      $CDDADATABE/" \
2099             -e "s/^deviceInterfaceMethod:.*/deviceInterfaceMethod:      $METHOD/" \
2100             -e "s/^mediumChangeMethod:.*/mediumChangeMethod:    $CHGMETHOD/" \
2101             -e "s/^numDiscs:.*/numDiscs:                $NUMDISCS/" \
2102             -e "s/^deviceList:.*/deviceList:    $GDEVLIST/" \
2103             -e "s/^driveVendorCode:.*/driveVendorCode:  $VENDOR/" \
2104             -e "s/^playAudio12Support:.*/playAudio12Support:    $PLAY12/" \
2105             -e "s/^playAudioMSFSupport:.*/playAudioMSFSupport:  $PLAYMSF/" \
2106             -e "s/^playAudio10Support:.*/playAudio10Support:    $PLAY10/" \
2107             -e "s/^playAudioTISupport:.*/playAudioTISupport:    $PLAYTI/" \
2108             -e "s/^loadSupport:.*/loadSupport:          $LOAD/" \
2109             -e "s/^ejectSupport:.*/ejectSupport:                $EJECT/" \
2110             -e "s/^modeSenseSetDBD:.*/modeSenseSetDBD:  $MODEDBD/" \
2111             -e "s/^modeSenseUse10Byte:.*/modeSenseUse10Byte:    $MODE10BYTE/" \
2112             -e "s/^volumeControlSupport:.*/volumeControlSupport:        $VOLSUPP/" \
2113             -e "s/^balanceControlSupport:.*/balanceControlSupport:      $BALSUPP/" \
2114             -e "s/^channelRouteSupport:.*/channelRouteSupport:  $CHRSUPP/" \
2115             -e "s/^volumeControlTaper:.*/volumeControlTaper:    $VOLTAPER/" \
2116             -e "s/^scsiAudioVolumeBase:.*/scsiAudioVolumeBase:  $VOLBASE/" \
2117             -e "s/^pauseResumeSupport:.*/pauseResumeSupport:    $PAUSE/" \
2118             -e "s/^strictPauseResume:.*/strictPauseResume:      $STRICTPR/" \
2119             -e "s/^playPausePlay:.*/playPausePlay:              $PLAYPAUSEPLAY/" \
2120             -e "s/^caddyLockSupport:.*/caddyLockSupport:        $CADDYLOCK/" \
2121             -e "s/^curposFormat:.*/curposFormat:                $CURPOSFMT/" \
2122             -e "s/^noTURWhenPlaying:.*/noTURWhenPlaying:        $PLAYNOTUR/" \
2123             -e "s/^spinUpInterval:.*/spinUpInterval:            $SPINUPINTVL/" \
2124             -e "s/^spinDownOnLoad:.*/spinDownOnLoad:            $STOPONLOAD/" \
2125             -e "s/^ejectOnExit:.*/ejectOnExit:          $EJECTONEXIT/" \
2126             -e "s/^stopOnExit:.*/stopOnExit:            $STOPONEXIT/" \
2127             -e "s/^exitOnEject:.*/exitOnEject:          $EXITONEJECT/" \
2128             -e "s/^closeOnEject:.*/closeOnEject:                $CLOSEONEJECT/" \
2129             -e "s/^multiPlay:.*/multiPlay:              $MULTIPLAY/" \
2130                 < $CFGDIR/device.cfg > $CFGDIR/$CONFIGFILE
2131             do_chmod 644 $CFGDIR/$CONFIGFILE 2>/dev/null
2132             (cd $CFGDIR; rm -f ${CONFIGFILE}-${OS_NODE} ;\
2133              do_link $CONFIGFILE ${CONFIGFILE}-${OS_NODE})
2134 
2135             YNDEF=n
2136             if get_yn \
2137                     "\n  Do you have more CD-ROM or CD-R drives on your system"
2138             then
2139                 DRVNO=`expr $DRVNO + 1`
2140 
2141                 case `expr $DEVNO : '.*'` in
2142                 0)
2143                         ;;
2144                 1)
2145                         DEVNO=`expr $DEVNO + 1`
2146                         ;;
2147                 2)
2148                         DEVNO=`echo $DEVNO | \
2149                                 $AWK '{ printf("%02d\n", $1 + 1) }'`
2150                         ;;
2151                 3)
2152                         DEVNO=`echo $DEVNO | \
2153                                 $AWK '{ printf("%03d\n", $1 + 1) }'`
2154                         ;;
2155                 4)
2156                         DEVNO=`echo $DEVNO | \
2157                                 $AWK '{ printf("%04d\n", $1 + 1) }'`
2158                         ;;
2159                 *)
2160                         DEVNO=`expr $DEVNO + 1`
2161                         ;;
2162                 esac
2163             else
2164                 break
2165             fi
2166         done
2167 }
2168 
2169 
2170 common_config()
2171 {
2172         #
2173         # Configure common.cfg file
2174         #
2175         chmod 644 $CFGDIR/common.cfg 2>/dev/null
2176         if [ -w $CFGDIR/common.cfg ]
2177         then
2178                 $AWK '
2179                 /^device:/      {
2180                         printf("device:\t\t\t%s\n", device)
2181                         next
2182                 }
2183                 /^cdinfoPath:/  {
2184                         printf("cdinfoPath:\t\t%s\n", cdinfopath)
2185                         next
2186                 }
2187                 /^internetOffline:/     {
2188                         printf("internetOffline:\t\t%s\n", inetoffln)
2189                         next
2190                 }
2191                 /^cddbUseProxy:/ {
2192                         printf("cddbUseProxy:\t\t%s\n", useproxy)
2193                         next
2194                 }
2195                 /^proxyServer:/ {
2196                         printf("proxyServer:\t\t%s\n", proxyserver)
2197                         next
2198                 }
2199                 /^proxyAuthorization:/ {
2200                         printf("proxyAuthorization:\t%s\n", proxyauth)
2201                         next
2202                 }
2203                 /^autoMusicBrowser:/ {
2204                         printf("autoMusicBrowser:\t%s\n", autobrowser)
2205                         next
2206                 }
2207                 /^solaris2VolumeManager:/ {
2208                         printf("solaris2VolumeManager:\t%s\n", volmgt)
2209                         next
2210                 }
2211                 {
2212                         print $0
2213                 }' \
2214                         device="$XMCD_DEV0" \
2215                         cdinfopath="$CDINFOPATH" \
2216                         inetoffln="$INETOFFLN" \
2217                         useproxy="$USEPROXY" \
2218                         proxyserver="$PROXYSERVER" \
2219                         proxyauth="$PROXYAUTH" \
2220                         autobrowser="$AUTOBROWSER" \
2221                         volmgt="$VOLMGT" \
2222                         $CFGDIR/common.cfg > /tmp/xmcd.$$
2223 
2224                 cp /tmp/xmcd.$$ $CFGDIR/common.cfg
2225                 rm -f /tmp/xmcd.$$
2226                 (cd $CFGDIR; rm -f common.cfg-${OS_NODE} ;\
2227                          do_link common.cfg common.cfg-${OS_NODE})
2228         else
2229                 log_err -p "Cannot configure $CFGDIR/common.cfg"
2230                 EXITSTAT=1 
2231         fi
2232 }
2233 
2234 
2235 #
2236 # Main starts here
2237 #
2238 
2239 # Catch some signals
2240 trap "rm -f $BTMPFILE $MTMPFILE; exit 1" 1 2 3 5 15
2241 
2242 # Get platform information
2243 OS_SYS=`(uname -s) 2>/dev/null`
2244 OS_REL=`(uname -r) 2>/dev/null`
2245 OS_MACH=`(uname -m) 2>/dev/null`
2246 OS_NODE=`(uname -n) 2>/dev/null`
2247 
2248 if [ -z "$OS_SYS" ]
2249 then
2250         OS_SYS=unkn
2251 fi
2252 if [ -z "$OS_REL" ]
2253 then
2254         OS_REL=unkn
2255 fi
2256 if [ -z "$OS_MACH" ]
2257 then
2258         OS_MACH=unkn
2259 fi
2260 if [ -z "$OS_NODE" ]
2261 then
2262         OS_NODE=unkn
2263 fi
2264 
2265 # Use Sysv echo if possible
2266 if [ -x /usr/5bin/echo ]                                # SunOS SysV echo
2267 then
2268         ECHO=/usr/5bin/echo
2269 elif [ -z "`(echo -e a) 2>/dev/null | fgrep e`" ]    # GNU bash, etc.
2270 then
2271         ECHO="echo -e"
2272 else                                                    # generic SysV
2273         ECHO=echo
2274 fi
2275 if [ "$OS_SYS" = QNX ]
2276 then
2277         ECHO=echo
2278 fi
2279 
2280 # Use nawk if available
2281 if [ -x /bin/nawk -o -x /usr/bin/nawk ]
2282 then
2283         AWK=nawk
2284 else
2285         # If awk doesn't work well on your system and you have gawk,
2286         # try changing the following to gawk.
2287         AWK=awk
2288 fi
2289 
2290 # Error log file handling
2291 if [ -f $ERRFILE -a ! -w $ERRFILE ]
2292 then
2293         ERRFILE=/dev/null
2294 fi
2295 
2296 #
2297 # Read the README first
2298 #
2299 $ECHO "\n*** See /opt/sfw/READMEs/README.SFWxmcd before configuring xmcd ***"
2300 
2301 $ECHO "\nXmcd version $VER Configuration Program"
2302 $ECHO "Setting up for host: ${OS_NODE}"
2303 $ECHO "--------------------------------------"
2304 
2305 # Sanity check
2306 
2307 if [ ! -w $CFGDIR ]
2308 then
2309         log_err -p "No write permission in $CFGDIR"
2310         do_exit 1
2311 fi
2312 
2313 if [ ! -r $CFGDIR/device.cfg ]
2314 then
2315         log_err -p "Cannot find $CFGDIR/device.cfg"
2316         do_exit 2
2317 fi
2318 
2319 fgrep cfgver=1 $CFGDIR/device.cfg >/dev/null 2>&1
2320 if [ $? -ne 0 ]
2321 then
2322         log_err -p "$CFGDIR/device.cfg version mismatch"
2323         do_exit 2
2324 fi
2325 
2326 if [ ! -d $CFGDIR/.tbl ]
2327 then
2328         log_err -p "The directory $CFGDIR/.tbl is missing"
2329         do_exit 2
2330 fi
2331 
2332 #
2333 # Set some defaults
2334 #
2335 DEVPREF=/dev/rcdrom
2336 DEVSUFF=
2337 FIRST=0
2338 BLKDEV=0
2339 VOLMGT=False
2340 STOPONLOAD=True
2341 EJECTONEXIT=False
2342 STOPONEXIT=True
2343 EXITONEJECT=False
2344 CLOSEONEJECT=False
2345 INETOFFLN=False
2346 USEPROXY=False
2347 PROXYSERVER="localhost:80"
2348 PROXYAUTH=False
2349 AUTOBROWSER=True
2350 CDINFOPATH=
2351 
2352 #
2353 # Configure CDDB server access
2354 #
2355 $ECHO "\n*** CDDB(tm) ACCESS CONFIGURATION ***"
2356 cddb_config
2357 
2358 #
2359 # Device and common configuration
2360 #
2361 $ECHO "\n\n*** DRIVE CONFIGURATION ***"
2362 drive_config
2363 common_config
2364 
2365 do_exit $EXITSTAT
2366