home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #31 / NN_1992_31.iso / spool / alt / sources / 2896 < prev    next >
Encoding:
Text File  |  1992-12-29  |  48.1 KB  |  1,697 lines

  1. Newsgroups: alt.sources
  2. Path: sparky!uunet!elroy.jpl.nasa.gov!swrinde!zaphod.mps.ohio-state.edu!magnus.acs.ohio-state.edu!usenet.ins.cwru.edu!eagle!sandman.lerc.nasa.gov!drich
  3. From: drich@sandman.lerc.nasa.gov (Daniel Rich)
  4. Subject: xcdplayer-2.2, Part (5/5) - X11 CD player for Sun and SGI
  5. Message-ID: <1992Dec28.225808.24021@eagle.lerc.nasa.gov>
  6. Sender: news@eagle.lerc.nasa.gov
  7. Nntp-Posting-Host: sandman.lerc.nasa.gov
  8. Organization: NASA Lewis Research Center
  9. Date: Mon, 28 Dec 1992 22:58:08 GMT
  10. Lines: 1685
  11.  
  12. Submitted-by: drich@lerc.nasa.gov
  13. Archive-name: xcdplayer-2.2/part05
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then unpack
  17. # it by saving it into a file and typing "sh file".  To overwrite existing
  18. # files, type "sh file -c".  You can also feed this as standard input via
  19. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  20. # will see the following message at the end:
  21. #        "End of archive 5 (of 5)."
  22. # Contents:  xcdplayer-2.2/Makefile xcdplayer-2.2/cdrom_sgi.c
  23. # Wrapped by drich@sandman on Mon Dec 28 17:30:38 1992
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -d 'xcdplayer-2.2' ; then
  26. :
  27. else
  28.   mkdir xcdplayer-2.2
  29. fi
  30. if test -f 'xcdplayer-2.2/Makefile' -a "${1}" != "-c" ; then 
  31.   echo shar: Will not clobber existing file \"'xcdplayer-2.2/Makefile'\"
  32. else
  33. echo shar: Extracting \"'xcdplayer-2.2/Makefile'\" \(20008 characters\)
  34. sed "s/^X//" >'xcdplayer-2.2/Makefile' <<'END_OF_FILE'
  35. X# Makefile generated by imake - do not edit!
  36. X# $XConsortium: imake.c,v 1.51 89/12/12 12:37:30 jim Exp $
  37. X
  38. X###########################################################################
  39. X# Makefile generated from "Imake.tmpl" and <Imakefile>
  40. X# $XConsortium: Imake.tmpl,v 1.77 89/12/18 17:01:37 jim Exp $
  41. X#
  42. X# Platform-specific parameters may be set in the appropriate .cf
  43. X# configuration files.  Site-wide parameters may be set in the file
  44. X# site.def.  Full rebuilds are recommended if any parameters are changed.
  45. X#
  46. X# If your C preprocessor doesn't define any unique symbols, you'll need
  47. X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
  48. X# "make Makefile", "make Makefiles", or "make World").
  49. X#
  50. X# If you absolutely can't get imake to work, you'll need to set the
  51. X# variables at the top of each Makefile as well as the dependencies at the
  52. X# bottom (makedepend will do this automatically).
  53. X#
  54. X
  55. X###########################################################################
  56. X# platform-specific configuration parameters - edit sgi.cf to change
  57. X
  58. XCRT1 = /usr/lib/crt1.o
  59. XCRTN = /usr/lib/crtn.o
  60. X
  61. X###########################################################################
  62. X# site-specific configuration parameters - edit site.def to change
  63. X
  64. X# site:  $XConsortium: site.def,v 1.21 89/12/06 11:46:50 jim Exp $
  65. X
  66. X        OPTIMIZER = -g#-O2
  67. X
  68. X            SHELL = /bin/sh
  69. X
  70. X              TOP = .
  71. X      CURRENT_DIR = .
  72. X
  73. X               AR = ar scq
  74. X  BOOTSTRAPCFLAGS = "$(OPTIMIZER)"
  75. X               CC = cc
  76. X
  77. X         COMPRESS = compress
  78. X              CPP = /lib/cpp $(STD_CPP_DEFINES)
  79. X    PREPROCESSCMD = cc -E $(STD_CPP_DEFINES)
  80. X          INSTALL = bsdinst.sh
  81. X               LD = ld
  82. X             LINT = lint
  83. X      LINTLIBFLAG = -o
  84. X         LINTOPTS = -ax
  85. X               LN = ln -s
  86. X
  87. X               MV = mv
  88. X               CP = cp
  89. X           RANLIB = /bin/true
  90. X  RANLIBINSTFLAGS =
  91. X               RM = rm -f
  92. X  VENDOR_INCLUDES =
  93. X     STD_INCLUDES =
  94. X  STD_CPP_DEFINES = -DSYSV
  95. X      STD_DEFINES = -DSYSV -DMALLOC_0_RETURNS_NULL
  96. X EXTRA_LOAD_FLAGS =
  97. X  EXTRA_LIBRARIES = -lsun -lmalloc -lc_s
  98. X             TAGS = ctags
  99. X
  100. X    SHAREDCODEDEF = -DSHAREDCODE
  101. X         SHLIBDEF = -DATTSHAREDLIB
  102. X
  103. X    PROTO_DEFINES = -DFUNCPROTO -DNARROWPROTO
  104. X
  105. X     INSTPGMFLAGS = -s
  106. X
  107. X     INSTBINFLAGS = -m 0755
  108. X     INSTUIDFLAGS = -m 4755
  109. X     INSTLIBFLAGS = -m 0664
  110. X     INSTINCFLAGS = -m 0444
  111. X     INSTMANFLAGS = -m 0444
  112. X     INSTDATFLAGS = -m 0444
  113. X    INSTKMEMFLAGS = -m 2755 -g sys
  114. X
  115. X          DESTDIR =
  116. X
  117. X     TOP_INCLUDES = -I$(INCROOT)
  118. X
  119. X      CDEBUGFLAGS = $(OPTIMIZER)
  120. X        CCOPTIONS = -cckr -float
  121. X      COMPATFLAGS =
  122. X
  123. X      ALLINCLUDES = $(STD_INCLUDES) $(TOP_INCLUDES) $(INCLUDES) $(EXTRA_INCLUDES) $(VENDOR_INCLUDES)
  124. X       ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(PROTO_DEFINES) $(DEFINES) $(COMPATFLAGS)
  125. X           CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
  126. X        LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
  127. X           LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
  128. X        LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS)
  129. X   LDCOMBINEFLAGS = -r
  130. X
  131. X        MACROFILE = sgi.cf
  132. X           RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
  133. X
  134. X    IMAKE_DEFINES =
  135. X
  136. X         IRULESRC = $(CONFIGDIR)
  137. X        IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
  138. X
  139. X     ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
  140. X            $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
  141. X            $(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES)
  142. X
  143. X###########################################################################
  144. X# X Window System Build Parameters
  145. X# $XConsortium: Project.tmpl,v 1.68 90/07/03 12:14:47 rws Exp $
  146. X
  147. X###########################################################################
  148. X# X Window System make variables; this need to be coordinated with rules
  149. X# $XConsortium: Project.tmpl,v 1.68 90/07/03 12:14:47 rws Exp $
  150. X
  151. X          PATHSEP = /
  152. X        USRLIBDIR = $(DESTDIR)/usr/lib
  153. X           BINDIR = $(DESTDIR)/usr/bin/X11
  154. X          INCROOT = $(DESTDIR)/usr/include
  155. X     BUILDINCROOT = $(TOP)
  156. X      BUILDINCDIR = $(BUILDINCROOT)/X11
  157. X      BUILDINCTOP = ..
  158. X           INCDIR = $(INCROOT)/X11
  159. X           ADMDIR = $(DESTDIR)/usr/adm
  160. X           LIBDIR = $(USRLIBDIR)/X11
  161. X        CONFIGDIR = $(LIBDIR)/config
  162. X       LINTLIBDIR = $(USRLIBDIR)/lint
  163. X
  164. X          FONTDIR = $(LIBDIR)/fonts
  165. X         XINITDIR = $(LIBDIR)/xinit
  166. X           XDMDIR = $(LIBDIR)/xdm
  167. X           AWMDIR = $(LIBDIR)/awm
  168. X           TWMDIR = $(LIBDIR)/twm
  169. X           GWMDIR = $(LIBDIR)/gwm
  170. X          MANPATH = $(DESTDIR)/usr/man
  171. X    MANSOURCEPATH = $(MANPATH)/man
  172. X           MANDIR = $(MANSOURCEPATH)n
  173. X        LIBMANDIR = $(MANSOURCEPATH)3
  174. X      XAPPLOADDIR = $(LIBDIR)/app-defaults
  175. X
  176. X       FONTCFLAGS = -t
  177. X
  178. X     INSTAPPFLAGS = $(INSTDATFLAGS)
  179. X
  180. X            IMAKE = imake
  181. X           DEPEND = makedepend
  182. X              RGB = rgb
  183. X
  184. X            FONTC = bdftopcf
  185. X
  186. X        MKFONTDIR = mkfontdir
  187. X
  188. X        MKDIRHIER = mkdir -p
  189. X
  190. X        CONFIGSRC = $(TOP)/config
  191. X        CLIENTSRC = $(TOP)/clients
  192. X          DEMOSRC = $(TOP)/demos
  193. X           LIBSRC = $(TOP)/lib
  194. X
  195. X          FONTSRC = $(TOP)/fonts.pcf
  196. X
  197. X       INCLUDESRC = $(TOP)/X11
  198. X        SERVERSRC = $(TOP)/server
  199. X          UTILSRC = $(TOP)/util
  200. X        SCRIPTSRC = $(UTILSRC)/scripts
  201. X       EXAMPLESRC = $(TOP)/examples
  202. X       CONTRIBSRC = $(TOP)/../contrib
  203. X           DOCSRC = $(TOP)/doc
  204. X           RGBSRC = $(TOP)/rgb
  205. X        DEPENDSRC = $(UTILSRC)/makedepend
  206. X         IMAKESRC = $(CONFIGSRC)
  207. X         XAUTHSRC = $(LIBSRC)/Xau
  208. X          XLIBSRC = $(LIBSRC)/X
  209. X           XMUSRC = $(LIBSRC)/Xmu
  210. X       TOOLKITSRC = $(LIBSRC)/Xt
  211. X       AWIDGETSRC = $(LIBSRC)/Xaw
  212. X       OLDXLIBSRC = $(LIBSRC)/oldX
  213. X      XDMCPLIBSRC = $(LIBSRC)/Xdmcp
  214. X         XILIBSRC = $(EXTENSIONSRC)/lib/xinput
  215. X      BDFTOSNFSRC = $(FONTSRC)/tools/bdftosnf
  216. X      BDFTOPCFSRC = $(FONTSRC)/tools/bdftopcf
  217. X     MKFONTDIRSRC = $(FONTSRC)/tools/mkfontdir
  218. X     EXTENSIONSRC = $(TOP)/extensions
  219. X
  220. X  DEPEXTENSIONLIB =  $(USRLIBDIR)/libXext.a
  221. X     EXTENSIONLIB =   -lXext
  222. X
  223. X          DEPXLIB = $(DEPEXTENSIONLIB)  $(USRLIBDIR)/libX11_s.a
  224. X             XLIB = $(EXTENSIONLIB)  -lX11_s
  225. X
  226. X      DEPXAUTHLIB =  $(USRLIBDIR)/libXau.a
  227. X         XAUTHLIB =   -lXau
  228. X
  229. X        DEPXMULIB =  $(USRLIBDIR)/libXmu.a
  230. X           XMULIB =   -lXmu
  231. X
  232. X       DEPOLDXLIB =  $(USRLIBDIR)/liboldX.a
  233. X          OLDXLIB =   -loldX
  234. X
  235. X      DEPXTOOLLIB =  $(USRLIBDIR)/libXt_s.a
  236. X         XTOOLLIB =  -lXt_s
  237. X
  238. X        DEPXAWLIB =  $(USRLIBDIR)/libXaw.a
  239. X           XAWLIB =   -lXaw
  240. X
  241. X         DEPXILIB =  $(USRLIBDIR)/libXi.a
  242. X            XILIB =   -lXi
  243. X
  244. X LINTEXTENSIONLIB =  $(LINTLIBDIR)/llib-lXext.ln
  245. X         LINTXLIB =  $(LINTLIBDIR)/llib-lX11.ln
  246. X          LINTXMU =  $(LINTLIBDIR)/llib-lXmu.ln
  247. X        LINTXTOOL =  $(LINTLIBDIR)/llib-lXt.ln
  248. X          LINTXAW =  $(LINTLIBDIR)/llib-lXaw.ln
  249. X
  250. X          DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
  251. X
  252. X         DEPLIBS1 = $(DEPLIBS)
  253. X         DEPLIBS2 = $(DEPLIBS)
  254. X         DEPLIBS3 = $(DEPLIBS)
  255. X
  256. X###########################################################################
  257. X# Imake rules for building libraries, programs, scripts, and data files
  258. X# rules:  $XConsortium: Imake.rules,v 1.70 90/05/04 16:57:30 keith Exp $
  259. X
  260. X###########################################################################
  261. X# start of Imakefile
  262. X
  263. XLOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
  264. XLINTLIBS = -lXaw -lXt -lX11
  265. X
  266. XLOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) -lcdaudio -lds -laudio -lm
  267. X           SRCS = main.c top_setup.c logo_setup.c button_setup.c cdrom_callb.c\
  268. X                  cdrom_sgi.c internals.c shuffle.c program.c leds.c debug.c
  269. X
  270. X           OBJS = main.o top_setup.o logo_setup.o button_setup.o cdrom_callb.o\
  271. X                  cdrom_sgi.o internals.o shuffle.o program.o leds.o debug.o
  272. X
  273. X       PROGRAMS = xcdplayer
  274. X
  275. Xall:: ${PROGRAMS}
  276. X
  277. X        PROGRAM = xcdplayer
  278. X
  279. Xall:: xcdplayer
  280. X
  281. Xxcdplayer: $(OBJS) $(DEPLIBS)
  282. X     $(RM) $@ ; \
  283. X    $(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS) $(EXTRA_LOAD_FLAGS)
  284. X
  285. Xinstall:: xcdplayer
  286. X    $(INSTALL) -c $(INSTPGMFLAGS) $(INSTALLFLAGS) xcdplayer $(BINDIR)
  287. X
  288. Xinstall.man:: xcdplayer.man
  289. X    $(INSTALL) -c $(INSTMANFLAGS) xcdplayer.man $(MANDIR)/xcdplayer.n
  290. X
  291. Xdepend::
  292. X    $(DEPEND) -s "# DO NOT DELETE" -- $(ALLDEFINES) -- $(SRCS)
  293. X
  294. Xlint:
  295. X    $(LINT) $(LINTFLAGS) $(SRCS) $(LINTLIBS)
  296. Xlint1:
  297. X    $(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
  298. X
  299. Xclean::
  300. X    $(RM) $(PROGRAM)
  301. X
  302. Xcdinfo:  cdinfo.o
  303. X     $(RM) $@ ; \
  304. X    $(CC) -o $@  cdinfo.o $(LDOPTIONS)  $(LDLIBS)  $(EXTRA_LOAD_FLAGS)
  305. X
  306. Xclean::
  307. X    $(RM) cdinfo
  308. X
  309. Xcdgrab:  cdgrab.o
  310. X     $(RM) $@ ; \
  311. X    $(CC) -o $@  cdgrab.o $(LDOPTIONS)  $(LDLIBS)  $(EXTRA_LOAD_FLAGS)
  312. X
  313. Xclean::
  314. X    $(RM) cdgrab
  315. X
  316. Xlint:
  317. X    $(LINT) $(LINTFLAGS) ${SRCS} $(LINTLIBS)
  318. Xlint1:
  319. X    $(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
  320. X
  321. Xinstall:: XCdplayer.ad
  322. X    $(INSTALL) -c $(INSTAPPFLAGS) XCdplayer.ad $(XAPPLOADDIR)/XCdplayer
  323. X
  324. X###########################################################################
  325. X# common rules for all Makefiles - do not edit
  326. X
  327. Xemptyrule::
  328. X
  329. Xclean::
  330. X    $(RM_CMD) \#*
  331. X
  332. XMakefile::
  333. X    -@if [ -f Makefile ]; then \
  334. X        echo "    $(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
  335. X        $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
  336. X    else : ; fi ; \
  337. X    $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
  338. X
  339. Xtags::
  340. X    $(TAGS) -w *.[ch]
  341. X    $(TAGS) -xw *.[ch] > TAGS
  342. X
  343. X###########################################################################
  344. X# empty rules for directories that do not have SUBDIRS - do not edit
  345. X
  346. Xinstall::
  347. X    @echo "install in $(CURRENT_DIR) done"
  348. X
  349. Xinstall.man::
  350. X    @echo "install.man in $(CURRENT_DIR) done"
  351. X
  352. XMakefiles::
  353. X
  354. Xincludes::
  355. X
  356. X###########################################################################
  357. X# dependencies generated by makedepend
  358. X
  359. X# DO NOT DELETE
  360. X
  361. Xmain.o: /usr/include/stdio.h /usr/include/X11/Intrinsic.h
  362. Xmain.o: /usr/include/X11/Xlib.h /usr/include/sys/types.h /usr/include/X11/X.h
  363. Xmain.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  364. Xmain.o: /usr/include/X11/Xos.h /usr/include/strings.h /usr/include/string.h
  365. Xmain.o: /usr/include/fcntl.h /usr/include/sys/fcntl.h /usr/include/sys/file.h
  366. Xmain.o: /usr/include/sys/time.h /usr/include/time.h /usr/include/X11/Core.h
  367. Xmain.o: /usr/include/X11/Composite.h /usr/include/X11/Constraint.h
  368. Xmain.o: /usr/include/X11/Object.h /usr/include/X11/RectObj.h
  369. Xmain.o: /usr/include/X11/StringDefs.h debug.h cdrom_globs.h version.h
  370. Xmain.o: patchlevel.h
  371. Xtop_setup.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  372. Xtop_setup.o: /usr/include/sys/types.h /usr/include/X11/X.h
  373. Xtop_setup.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  374. Xtop_setup.o: /usr/include/X11/Xos.h /usr/include/strings.h
  375. Xtop_setup.o: /usr/include/string.h /usr/include/fcntl.h
  376. Xtop_setup.o: /usr/include/sys/fcntl.h /usr/include/sys/file.h
  377. Xtop_setup.o: /usr/include/sys/time.h /usr/include/time.h
  378. Xtop_setup.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  379. Xtop_setup.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  380. Xtop_setup.o: /usr/include/X11/RectObj.h /usr/include/X11/StringDefs.h
  381. Xtop_setup.o: /usr/include/X11/Shell.h /usr/include/X11/Xaw/Form.h
  382. Xtop_setup.o: /usr/include/stdio.h cdrom_globs.h version.h patchlevel.h
  383. Xtop_setup.o: debug.h logo.xbm
  384. Xlogo_setup.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  385. Xlogo_setup.o: /usr/include/sys/types.h /usr/include/X11/X.h
  386. Xlogo_setup.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  387. Xlogo_setup.o: /usr/include/X11/Xos.h /usr/include/strings.h
  388. Xlogo_setup.o: /usr/include/string.h /usr/include/fcntl.h
  389. Xlogo_setup.o: /usr/include/sys/fcntl.h /usr/include/sys/file.h
  390. Xlogo_setup.o: /usr/include/sys/time.h /usr/include/time.h
  391. Xlogo_setup.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  392. Xlogo_setup.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  393. Xlogo_setup.o: /usr/include/X11/RectObj.h /usr/include/X11/StringDefs.h
  394. Xlogo_setup.o: /usr/include/X11/Shell.h /usr/include/X11/Xaw/Form.h
  395. Xlogo_setup.o: /usr/include/X11/Xaw/Label.h /usr/include/X11/Xaw/Simple.h
  396. Xlogo_setup.o: /usr/include/X11/Xmu/Converters.h
  397. Xlogo_setup.o: /usr/include/X11/Xaw/Command.h /usr/include/X11/Xaw/Toggle.h
  398. Xlogo_setup.o: /usr/include/X11/Xaw/Scrollbar.h /usr/include/X11/Xaw/Dialog.h
  399. Xlogo_setup.o: /usr/include/X11/Xaw/Viewport.h /usr/include/X11/Xaw/Reports.h
  400. Xlogo_setup.o: /usr/include/math.h /usr/include/svr4_math.h
  401. Xlogo_setup.o: /usr/include/stdio.h cdrom_globs.h version.h patchlevel.h
  402. Xlogo_setup.o: cdrom_sgi.h /usr/include/cdaudio.h /usr/include/audio.h
  403. Xlogo_setup.o: logo.xbm thumb.xbm /usr/include/X11/bitmaps/gray
  404. Xbutton_setup.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  405. Xbutton_setup.o: /usr/include/sys/types.h /usr/include/X11/X.h
  406. Xbutton_setup.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  407. Xbutton_setup.o: /usr/include/X11/Xos.h /usr/include/strings.h
  408. Xbutton_setup.o: /usr/include/string.h /usr/include/fcntl.h
  409. Xbutton_setup.o: /usr/include/sys/fcntl.h /usr/include/sys/file.h
  410. Xbutton_setup.o: /usr/include/sys/time.h /usr/include/time.h
  411. Xbutton_setup.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  412. Xbutton_setup.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  413. Xbutton_setup.o: /usr/include/X11/RectObj.h /usr/include/X11/StringDefs.h
  414. Xbutton_setup.o: /usr/include/X11/Xaw/Form.h /usr/include/X11/Xaw/Toggle.h
  415. Xbutton_setup.o: /usr/include/X11/Xaw/Command.h /usr/include/X11/Xaw/Label.h
  416. Xbutton_setup.o: /usr/include/X11/Xaw/Simple.h
  417. Xbutton_setup.o: /usr/include/X11/Xmu/Converters.h cdrom_globs.h version.h
  418. Xbutton_setup.o: patchlevel.h cdrom_sgi.h /usr/include/cdaudio.h
  419. Xbutton_setup.o: /usr/include/audio.h play.xbm pause.xbm stop.xbm prev.xbm
  420. Xbutton_setup.o: next.xbm eject.xbm audio.xbm quit.xbm cycle.xbm shuffle.xbm
  421. Xbutton_setup.o: rewind.xbm ff.xbm pgm.xbm
  422. Xcdrom_callb.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  423. Xcdrom_callb.o: /usr/include/sys/types.h /usr/include/X11/X.h
  424. Xcdrom_callb.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  425. Xcdrom_callb.o: /usr/include/X11/Xos.h /usr/include/strings.h
  426. Xcdrom_callb.o: /usr/include/string.h /usr/include/fcntl.h
  427. Xcdrom_callb.o: /usr/include/sys/fcntl.h /usr/include/sys/file.h
  428. Xcdrom_callb.o: /usr/include/sys/time.h /usr/include/time.h
  429. Xcdrom_callb.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  430. Xcdrom_callb.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  431. Xcdrom_callb.o: /usr/include/X11/RectObj.h /usr/include/X11/StringDefs.h
  432. Xcdrom_callb.o: /usr/include/X11/Xaw/Form.h /usr/include/X11/Xaw/Toggle.h
  433. Xcdrom_callb.o: /usr/include/X11/Xaw/Command.h /usr/include/X11/Xaw/Label.h
  434. Xcdrom_callb.o: /usr/include/X11/Xaw/Simple.h
  435. Xcdrom_callb.o: /usr/include/X11/Xmu/Converters.h /usr/include/stdio.h debug.h
  436. Xcdrom_callb.o: cdrom_globs.h version.h patchlevel.h cdrom_sgi.h
  437. Xcdrom_callb.o: /usr/include/cdaudio.h /usr/include/audio.h
  438. Xcdrom_sgi.o: /usr/include/stdio.h /usr/include/sys/file.h
  439. Xcdrom_sgi.o: /usr/include/sys/fcntl.h /usr/include/sys/types.h
  440. Xcdrom_sgi.o: /usr/include/sys/param.h /usr/include/sys/signal.h
  441. Xcdrom_sgi.o: /usr/include/sys/stat.h /usr/include/mntent.h
  442. Xcdrom_sgi.o: /usr/include/sys/fsid.h /usr/include/string.h
  443. Xcdrom_sgi.o: /usr/include/signal.h /usr/include/sys/buf.h
  444. Xcdrom_sgi.o: /usr/include/sys/sema.h /usr/include/sys/time.h
  445. Xcdrom_sgi.o: /usr/include/time.h /usr/include/sys/ipc.h
  446. Xcdrom_sgi.o: /usr/include/sys/shm.h debug.h cdrom_sgi.h
  447. Xcdrom_sgi.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  448. Xcdrom_sgi.o: /usr/include/X11/X.h /usr/include/X11/Xutil.h
  449. Xcdrom_sgi.o: /usr/include/X11/Xresource.h /usr/include/X11/Xos.h
  450. Xcdrom_sgi.o: /usr/include/strings.h /usr/include/fcntl.h
  451. Xcdrom_sgi.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  452. Xcdrom_sgi.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  453. Xcdrom_sgi.o: /usr/include/X11/RectObj.h /usr/include/cdaudio.h
  454. Xcdrom_sgi.o: /usr/include/audio.h
  455. Xinternals.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  456. Xinternals.o: /usr/include/sys/types.h /usr/include/X11/X.h
  457. Xinternals.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  458. Xinternals.o: /usr/include/X11/Xos.h /usr/include/strings.h
  459. Xinternals.o: /usr/include/string.h /usr/include/fcntl.h
  460. Xinternals.o: /usr/include/sys/fcntl.h /usr/include/sys/file.h
  461. Xinternals.o: /usr/include/sys/time.h /usr/include/time.h
  462. Xinternals.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  463. Xinternals.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  464. Xinternals.o: /usr/include/X11/RectObj.h /usr/include/X11/StringDefs.h
  465. Xinternals.o: /usr/include/X11/Xaw/Form.h /usr/include/X11/Xaw/Toggle.h
  466. Xinternals.o: /usr/include/X11/Xaw/Command.h /usr/include/X11/Xaw/Label.h
  467. Xinternals.o: /usr/include/X11/Xaw/Simple.h /usr/include/X11/Xmu/Converters.h
  468. Xinternals.o: /usr/include/stdio.h debug.h cdrom_globs.h version.h
  469. Xinternals.o: patchlevel.h cdrom_sgi.h /usr/include/cdaudio.h
  470. Xinternals.o: /usr/include/audio.h
  471. Xshuffle.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  472. Xshuffle.o: /usr/include/sys/types.h /usr/include/X11/X.h
  473. Xshuffle.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  474. Xshuffle.o: /usr/include/X11/Xos.h /usr/include/strings.h
  475. Xshuffle.o: /usr/include/string.h /usr/include/fcntl.h
  476. Xshuffle.o: /usr/include/sys/fcntl.h /usr/include/sys/file.h
  477. Xshuffle.o: /usr/include/sys/time.h /usr/include/time.h
  478. Xshuffle.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  479. Xshuffle.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  480. Xshuffle.o: /usr/include/X11/RectObj.h /usr/include/stdio.h debug.h
  481. Xshuffle.o: cdrom_globs.h version.h patchlevel.h cdrom_sgi.h
  482. Xshuffle.o: /usr/include/cdaudio.h /usr/include/audio.h
  483. Xprogram.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  484. Xprogram.o: /usr/include/sys/types.h /usr/include/X11/X.h
  485. Xprogram.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  486. Xprogram.o: /usr/include/X11/Xos.h /usr/include/strings.h
  487. Xprogram.o: /usr/include/string.h /usr/include/fcntl.h
  488. Xprogram.o: /usr/include/sys/fcntl.h /usr/include/sys/file.h
  489. Xprogram.o: /usr/include/sys/time.h /usr/include/time.h
  490. Xprogram.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  491. Xprogram.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  492. Xprogram.o: /usr/include/X11/RectObj.h /usr/include/X11/StringDefs.h
  493. Xprogram.o: /usr/include/X11/Shell.h /usr/include/X11/Xaw/Form.h
  494. Xprogram.o: /usr/include/X11/Xaw/Label.h /usr/include/X11/Xaw/Simple.h
  495. Xprogram.o: /usr/include/X11/Xmu/Converters.h /usr/include/X11/Xaw/List.h
  496. Xprogram.o: /usr/include/X11/Xaw/Command.h /usr/include/X11/Xaw/Toggle.h
  497. Xprogram.o: /usr/include/X11/Xaw/Viewport.h /usr/include/X11/Xaw/Reports.h
  498. Xprogram.o: /usr/include/X11/Xaw/Dialog.h /usr/include/stdio.h
  499. Xprogram.o: /usr/include/malloc.h debug.h cdrom_globs.h version.h patchlevel.h
  500. Xprogram.o: cdrom_sgi.h /usr/include/cdaudio.h /usr/include/audio.h
  501. Xleds.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  502. Xleds.o: /usr/include/sys/types.h /usr/include/X11/X.h
  503. Xleds.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  504. Xleds.o: /usr/include/X11/Xos.h /usr/include/strings.h /usr/include/string.h
  505. Xleds.o: /usr/include/fcntl.h /usr/include/sys/fcntl.h /usr/include/sys/file.h
  506. Xleds.o: /usr/include/sys/time.h /usr/include/time.h /usr/include/X11/Core.h
  507. Xleds.o: /usr/include/X11/Composite.h /usr/include/X11/Constraint.h
  508. Xleds.o: /usr/include/X11/Object.h /usr/include/X11/RectObj.h
  509. Xleds.o: /usr/include/X11/StringDefs.h /usr/include/X11/Xaw/Label.h
  510. Xleds.o: /usr/include/X11/Xaw/Simple.h /usr/include/X11/Xmu/Converters.h
  511. Xleds.o: cdrom_globs.h version.h patchlevel.h circle0a.xbm circle0b.xbm
  512. Xleds.o: circle0c.xbm circle0d.xbm circle0e.xbm circle0f.xbm circle0g.xbm
  513. Xleds.o: circle0h.xbm circle00.xbm
  514. Xdebug.o: /usr/include/X11/Intrinsic.h /usr/include/X11/Xlib.h
  515. Xdebug.o: /usr/include/sys/types.h /usr/include/X11/X.h
  516. Xdebug.o: /usr/include/X11/Xutil.h /usr/include/X11/Xresource.h
  517. Xdebug.o: /usr/include/X11/Xos.h /usr/include/strings.h /usr/include/string.h
  518. Xdebug.o: /usr/include/fcntl.h /usr/include/sys/fcntl.h
  519. Xdebug.o: /usr/include/sys/file.h /usr/include/sys/time.h /usr/include/time.h
  520. Xdebug.o: /usr/include/X11/Core.h /usr/include/X11/Composite.h
  521. Xdebug.o: /usr/include/X11/Constraint.h /usr/include/X11/Object.h
  522. Xdebug.o: /usr/include/X11/RectObj.h /usr/include/varargs.h
  523. Xdebug.o: /usr/include/stdio.h debug.h
  524. END_OF_FILE
  525. if test 20008 -ne `wc -c <'xcdplayer-2.2/Makefile'`; then
  526.     echo shar: \"'xcdplayer-2.2/Makefile'\" unpacked with wrong size!
  527. fi
  528. # end of 'xcdplayer-2.2/Makefile'
  529. fi
  530. if test -f 'xcdplayer-2.2/cdrom_sgi.c' -a "${1}" != "-c" ; then 
  531.   echo shar: Will not clobber existing file \"'xcdplayer-2.2/cdrom_sgi.c'\"
  532. else
  533. echo shar: Extracting \"'xcdplayer-2.2/cdrom_sgi.c'\" \(24783 characters\)
  534. sed "s/^X//" >'xcdplayer-2.2/cdrom_sgi.c' <<'END_OF_FILE'
  535. X/*
  536. X * Copyright (C) 1990 Regents of the University of California.
  537. X *
  538. X * Permission to use, copy, modify, distribute, and sell this software and
  539. X * its documentation for any purpose is hereby granted without fee,
  540. X * provided that the above copyright notice appear in all copies and that
  541. X * both that copyright notice and this permission notice appear in
  542. X * supporting documentation, and that the name of the University of
  543. X * California not be used in advertising or publicity pertaining to
  544. X * distribution of the software without specific, written prior
  545. X * permission.  the University of California makes no representations
  546. X * about the suitability of this software for any purpose.  It is provided
  547. X * "as is" without express or implied warranty.
  548. X */
  549. X
  550. Xstatic int c;
  551. X
  552. X# if defined(sgi)
  553. X# include <stdio.h>
  554. X
  555. X# include <sys/file.h>
  556. X# include <sys/types.h>
  557. X# include <sys/param.h>
  558. X# include <sys/stat.h>
  559. X
  560. X# include <mntent.h>
  561. X# include <string.h>
  562. X# include <signal.h>
  563. X
  564. X# include <sys/buf.h>
  565. X
  566. X# include <sys/time.h>
  567. X
  568. X/* We need shared memory for the counter display if using scsi_audio */
  569. X#include <sys/ipc.h>
  570. X#include <sys/shm.h>
  571. Xint        shmid;
  572. Xkey_t        shmkey;
  573. X
  574. X
  575. X# include "debug.h"
  576. X# include "cdrom_sgi.h"
  577. X
  578. Xextern char    *device;
  579. X# if defined(notdef)
  580. Xextern void    cdrom_print_toc();
  581. X# endif /* defined(notdef) */
  582. X
  583. Xvoid        cdrom_audio_close();
  584. Xvoid        cdrom_callback();
  585. Xvoid        cdrom_kill_child();
  586. Xint        cdrom_child_setup();
  587. Xvoid        cdrom_child_pause();
  588. Xvoid        cdrom_child_died();
  589. Xvoid        cdrom_child_quit();
  590. X
  591. X#define INIT_READ    200    /* Maximum number we can play */
  592. X#define ONE_SECOND    75    /* One second of data */
  593. X
  594. Xcdrom_info        cdi;
  595. Xstruct _cdrom_shmem    *cdrom_shmem;
  596. Xchar            info_filename[256];
  597. XFILE            *disc_info = NULL;
  598. X
  599. XCDPLAYER    *cdrom_fd = NULL;
  600. XALport        audio_fd = NULL;
  601. Xlong        audio_param[6];
  602. XCDFRAME        *cd_audio_buff = NULL;
  603. XCDPARSER    *cd_parser = NULL;
  604. Xint        cdrom_audio_opened = 0;
  605. X
  606. Xget_stored_info()
  607. X{
  608. X    int i,n;
  609. X    char    line[100];
  610. X    char    *title;
  611. X
  612. X    if ( cdi.maxtrack == 0) {
  613. X        return(0);
  614. X    }
  615. X    for (i = 0, n = 0; i < cdi.maxtrack; i++)
  616. X        n = n + ((i+1) * cdi.times[i]);
  617. X    n = n / cdi.maxtrack;
  618. X
  619. X    disc_title = NULL;
  620. X    if (cdInfoDir != NULL)
  621. X        sprintf(info_filename, "%s/cd.%d", cdInfoDir, n);
  622. X    else
  623. X        sprintf(info_filename, "cd.%d", n);
  624. X
  625. X    if ((disc_info = fopen(info_filename, "r")) != NULL)
  626. X    {
  627. X        fgets(line, 100, disc_info);
  628. X        title = strchr(line, ':');
  629. X        if (title != NULL)
  630. X        {
  631. X            *(strchr(title, '\n')) = '\0';
  632. X            disc_title = strdup(title + 1);
  633. X        }
  634. X        fgets(line, 100, disc_info);
  635. X        sscanf(line, "Program: %s", program_str);
  636. X    }
  637. X    if (disc_title == NULL) {
  638. X        disc_title = NOTITLESTR;
  639. X    }
  640. X}
  641. X
  642. Xint
  643. Xcdrom_open() {
  644. X    int        n;
  645. X    CDSTATUS    cdrom_stat;
  646. X    extern void update_title();
  647. X
  648. X    if (cdrom_fd != NULL) {
  649. X        return(cdi.curtrack);
  650. X    }
  651. X
  652. X    if (device != NULL) {
  653. X        fprintf(stderr,"Device: %s\n",device);
  654. X        if ((cdrom_fd = CDopen(device, "r")) == NULL) {
  655. X            fprintf(stderr, "open cdrom: %s",device);
  656. X            perror("CDopen");
  657. X            return(-1);
  658. X        }
  659. X    } else {
  660. X        if ((cdrom_fd = CDopen(0, "r")) == NULL) {
  661. X            fprintf(stderr, "open cdrom: ");
  662. X            perror("CDopen");
  663. X            return(-1);
  664. X        }
  665. X    }
  666. X
  667. X    if (cdrom_get_times() == -1) {
  668. X        cdrom_close();
  669. X        return(-1);
  670. X    }
  671. X
  672. X    if ((n = cdrom_get_curtrack()) == -1)
  673. X        return(-1);
  674. X
  675. X    get_stored_info();
  676. X
  677. X    update_title();
  678. X
  679. X    if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  680. X        fprintf(stderr, "CDgetstatus(cdrom_stat): ");
  681. X        perror("CDgetstatus");
  682. X        return(-1);
  683. X    }
  684. X    if ((cdrom_stat.state == CD_PLAYING) ||
  685. X        (cdrom_stat.state == CD_PAUSED)) {
  686. X        cdi.scsi_audio = 0;
  687. X    } else {
  688. X        cdi.scsi_audio = cdrom_audio_avail();
  689. X    }
  690. X
  691. X    if (cdi.scsi_audio) {
  692. X        if (cd_audio_buff == (CDFRAME *) NULL) {
  693. X            if ((cd_audio_buff =
  694. X                 (CDFRAME *) malloc(INIT_READ * CDDA_BLOCKSIZE)) == NULL) {
  695. X                fprintf(stderr,"cdrom_open: cannot allocate cd digital data buffer!\n");
  696. X                perror("cdrom_open");
  697. X                cdi.scsi_audio = 0;
  698. X            }
  699. X        }
  700. X        if (cd_parser == NULL) {
  701. X            if ((cd_parser = CDcreateparser()) == NULL) {
  702. X                fprintf(stderr,"cdrom_open: CDcreateparser failed!\n");
  703. X                perror("cdrom_open");
  704. X                cdi.scsi_audio = 0;
  705. X            }
  706. X            CDresetparser(cd_parser);
  707. X            CDsetcallback(cd_parser, cd_audio, cdrom_callback, 0);
  708. X            CDsetcallback(cd_parser, cd_pnum, cdrom_callback, 0);
  709. X            CDsetcallback(cd_parser, cd_atime, cdrom_callback, 0);
  710. X            CDsetcallback(cd_parser, cd_catalog, cdrom_callback, 0);
  711. X        }
  712. X#if 0
  713. X        /* Get the catalog number, if one exists */
  714. X        CDseektrack(cdrom_fd,1);
  715. X        cdrom_shmem->cdrom_audio_cdi.state = CD_PLAYING;
  716. X        cdrom_play_frames(1);
  717. X#endif
  718. X    }
  719. X
  720. X    if (cdi.state & CDROM_STATE_PLAY)
  721. X        cdi.curtrack = n;
  722. X
  723. X    if (cdi.state & CDROM_STATE_SHUFFLE)
  724. X        shuffle_setup();
  725. X
  726. X    return(cdi.curtrack);
  727. X}
  728. X
  729. Xvoid
  730. Xcdrom_close() {
  731. X    if (cdrom_fd == NULL)
  732. X        return;
  733. X
  734. X    if (cdi.scsi_audio) {
  735. X        cdrom_kill_child();
  736. X        cdrom_audio_close();
  737. X    }
  738. X    if (cdi.times != NULL) {
  739. X        free((char *) cdi.times);
  740. X        free((char *) cdi.addrs);
  741. X        cdi.times = NULL;
  742. X        cdi.addrs = NULL;
  743. X    }
  744. X
  745. X    (void) CDclose(cdrom_fd);
  746. X    cdrom_fd = NULL;
  747. X}
  748. X
  749. Xint
  750. Xcdrom_audio_open() {
  751. X    ALconfig    aconfig;
  752. X    
  753. X    aconfig = ALnewconfig();
  754. X
  755. X    /* Attempt to create the largest buffer we can */
  756. X    ALsetqueuesize (aconfig, SAMPLES_PER_FRAME * INIT_READ);
  757. X
  758. X    /* Make sure we are 16bit stereo */
  759. X    ALsetwidth(aconfig, AL_SAMPLE_16);
  760. X    ALsetchannels(aconfig, AL_STEREO);
  761. X
  762. X    if ((audio_fd = ALopenport("XCplayer", "w", aconfig)) == NULL) {
  763. X        ALfreeconfig(aconfig);
  764. X        return(-1);    /* No error, just return -1 */
  765. X    }
  766. X    
  767. X    ALfreeconfig(aconfig);
  768. X
  769. X    audio_param[0] = AL_OUTPUT_RATE;
  770. X    audio_param[1] = AL_RATE_44100;
  771. X    ALsetparams(AL_DEFAULT_DEVICE, audio_param, 2);
  772. X
  773. X    shmkey = IPC_PRIVATE;
  774. X    if ((shmid = shmget(shmkey, sizeof(struct _cdrom_shmem), 
  775. X                (SHM_R | SHM_W | IPC_CREAT | IPC_EXCL) )) < 0) {
  776. X        perror("shmget");
  777. X        return(-1);
  778. X    }
  779. X    cdrom_shmem = shmat(shmid, NULL, SHM_RND);
  780. X}
  781. X
  782. Xvoid
  783. Xcdrom_audio_close() {
  784. X    if (audio_fd == NULL)
  785. X        return;
  786. X
  787. X    (void) ALcloseport(audio_fd);
  788. X    shmdt(cdrom_shmem);
  789. X    shmctl(shmid,IPC_RMID);
  790. X    audio_fd = NULL;
  791. X    cdrom_audio_opened = 0;
  792. X}
  793. X
  794. Xvoid
  795. Xcdrom_callback(arg, type, data)
  796. X    int        arg;
  797. X    CDDATATYPES    type;
  798. X    void        *data;
  799. X{
  800. X    struct cdtimecode    *timecode_info;
  801. X    CDPROGNUM        *pnum_info;
  802. X    char *            catalog_num;
  803. X    int            otime, time;
  804. X    int            i;
  805. X
  806. X    switch (type) {
  807. X    case cd_audio:
  808. X        ALwritesamps(audio_fd, data, SAMPLES_PER_FRAME);
  809. X        break;
  810. X    case cd_pnum:
  811. X        pnum_info = data;
  812. X
  813. X        if (pnum_info->value <= 
  814. X            cdrom_shmem->cdrom_audio_cdi.end_track) {
  815. X            cdrom_shmem->cdrom_audio_cdi.curtrack = pnum_info->value;
  816. X        } else {
  817. X            cdrom_shmem->cdrom_audio_cdi.curtrack = 0;
  818. X            cdrom_shmem->cdrom_audio_cdi.state = CD_READY;
  819. X        }
  820. X        break;
  821. X    case cd_atime:
  822. X        timecode_info = data;
  823. X
  824. X        otime = (cdrom_shmem->cdrom_audio_msf.minute * 60) +
  825. X            cdrom_shmem->cdrom_audio_msf.second;
  826. X        time = (((timecode_info->mhi * 10) + 
  827. X             timecode_info->mlo) * 60) +
  828. X                 (timecode_info->shi * 10) +
  829. X                     timecode_info->slo;
  830. X
  831. X        if ((otime > (time + 2)) || (otime < time - 2)) {
  832. X            if (CDseek(cdrom_fd, 
  833. X                   cdrom_shmem->cdrom_audio_msf.minute,
  834. X                   cdrom_shmem->cdrom_audio_msf.second, 
  835. X                   cdrom_shmem->cdrom_audio_msf.frame) < 0) {
  836. X                perror("CDseek");
  837. X            }
  838. X            cdrom_shmem->cdrom_audio_cdi.state = CD_ABORT;
  839. X            return;
  840. X        }
  841. X
  842. X        cdrom_shmem->cdrom_audio_msf.minute = 
  843. X            (timecode_info->mhi * 10) + timecode_info->mlo;
  844. X        cdrom_shmem->cdrom_audio_msf.second = 
  845. X            (timecode_info->shi * 10) + timecode_info->slo;
  846. X        cdrom_shmem->cdrom_audio_msf.frame = 
  847. X            (timecode_info->fhi * 10) + timecode_info->flo;
  848. X        
  849. X        break;
  850. X    case cd_catalog:
  851. X        catalog_num = data;
  852. X#if 0
  853. X        fprintf(stderr,"Catalog #: ");
  854. X        for (i=0; i<13; i++) {
  855. X            fprintf(stderr,"%d",*(catalog_num+i));
  856. X        }
  857. X        fprintf(stderr,"\n");
  858. X#endif
  859. X    default:
  860. X        return;
  861. X    }
  862. X}
  863. X
  864. Xint
  865. Xcdrom_start() {
  866. X    return(0);
  867. X}
  868. X
  869. Xint
  870. Xcdrom_stop() {
  871. X    if (cdi.scsi_audio && cdrom_audio_opened) {
  872. X        cdrom_kill_child();
  873. X        cdrom_shmem->cdrom_audio_cdi.curtrack = cdi.curtrack;
  874. X        cdrom_shmem->cdrom_audio_cdi.state = CD_READY;
  875. X    }
  876. X    if (! CDstop(cdrom_fd)) {
  877. X        perror("CDstop");
  878. X        return(-1);
  879. X    }
  880. X
  881. X    return(0);
  882. X}
  883. X
  884. Xint
  885. Xcdrom_eject() {
  886. X    if (cdi.scsi_audio && cdrom_audio_opened) {
  887. X        cdrom_kill_child();
  888. X        cdrom_shmem->cdrom_audio_cdi.state = CD_NODISC;
  889. X    }
  890. X    if (! CDeject(cdrom_fd)) {
  891. X        perror("ioctl(cdromeject)");
  892. X        return(-1);
  893. X    }
  894. X    cdrom_close();
  895. X
  896. X    return(0);
  897. X}
  898. X
  899. Xint
  900. Xcdrom_pause() {
  901. X    int track;
  902. X
  903. X    if (cdi.scsi_audio && cdrom_audio_opened) {
  904. X        cdrom_shmem->cdrom_audio_cdi.state = CD_PAUSED;
  905. X        return(0);
  906. X    }
  907. X    if (! cdrom_paused(&track)) {
  908. X        if (! CDtogglepause(cdrom_fd)) {
  909. X            perror("CDtogglepause");
  910. X            return(-1);
  911. X        }
  912. X    }
  913. X    
  914. X    return(0);
  915. X}
  916. X
  917. Xint
  918. Xcdrom_resume() {
  919. X    int track;
  920. X
  921. X    if (cdi.scsi_audio && cdrom_audio_opened) {
  922. X        cdrom_shmem->cdrom_audio_cdi.state = CD_PLAYING;
  923. X        return(0);
  924. X    }
  925. X    if (! cdrom_playing(&track)) {
  926. X        if (! CDtogglepause(cdrom_fd)) {
  927. X            perror("CDtogglepause");
  928. X            return(-1);
  929. X        }
  930. X    }
  931. X
  932. X    return(0);
  933. X}
  934. X
  935. Xint
  936. Xcdrom_toggle_audio()
  937. X{
  938. X    if (cdi.scsi_audio) {
  939. X        cdrom_kill_child();
  940. X        cdi.scsi_audio = 0;
  941. X        return;
  942. X    }
  943. X    cdi.scsi_audio = 1;
  944. X}
  945. X
  946. Xint
  947. Xcdrom_volume(left_vol, right_vol)
  948. X    int            left_vol;
  949. X    int            right_vol;
  950. X{
  951. X    CDVOLUME    cd_vol;
  952. X
  953. X    if (cdi.scsi_audio) {
  954. X        audio_param[0] = AL_LEFT_SPEAKER_GAIN;
  955. X        audio_param[1] = left_vol;
  956. X        audio_param[2] = AL_RIGHT_SPEAKER_GAIN;
  957. X        audio_param[3] = right_vol;
  958. X
  959. X        ALsetparams (AL_DEFAULT_DEVICE, audio_param, 4);
  960. X    } else {
  961. X#if 0
  962. X        /* I would love to use this, but it isn't documented */
  963. X        cd_vol.chan0 = (unsigned char)left_vol;
  964. X        cd_vol.chan1 = (unsigned char)right_vol;
  965. X        CDsetvolume(cdrom_fd, &cd_vol);
  966. X#endif
  967. X        return(-1);
  968. X    }
  969. X
  970. X    return(0);
  971. X}
  972. X
  973. Xint
  974. Xcdrom_get_volume()
  975. X{
  976. X    int vol;
  977. X    CDVOLUME    cd_vol;
  978. X
  979. X    audio_param[0] = AL_LEFT_SPEAKER_GAIN;
  980. X    audio_param[2] = AL_RIGHT_SPEAKER_GAIN;
  981. X    if (cdi.scsi_audio) {
  982. X        ALgetparams (AL_DEFAULT_DEVICE, audio_param, 4);
  983. X    
  984. X        /* Return the average of left and right channels */
  985. X        vol=(audio_param[1] + audio_param[3]) / 2;
  986. X    } else {
  987. X#if 0
  988. X        /* I would love to use this, but it isn't documented */
  989. X        CDgetvolume(cdrom_fd, &cd_vol);
  990. X        fprintf(stderr,"%d %d %d %d\n",cd_vol.chan0,cd_vol.chan1,
  991. X            cd_vol.chan2,cd_vol.chan3);
  992. X        vol=(cd_vol.chan0 + cd_vol.chan1) / 2;
  993. X#endif
  994. X        vol = -1;
  995. X    }
  996. X
  997. X    return(vol);
  998. X}
  999. X
  1000. Xint
  1001. Xcdrom_get_times() {
  1002. X    CDSTATUS            tochdr;
  1003. X    extern unsigned short    *ushort_malloc();
  1004. X    extern struct msf    *msf_malloc();
  1005. X    unsigned long        trk, trk_total, otime;
  1006. X    struct msf        msf;
  1007. X
  1008. X    if (cdrom_read_tochdr(&tochdr) == -1) {
  1009. X        cdi.mintrack = 0;
  1010. X        cdi.maxtrack = 0;
  1011. X        return(-1);
  1012. X#if 0
  1013. X        return(0);
  1014. X#endif
  1015. X    }
  1016. X
  1017. X    cdi.mintrack = tochdr.first;
  1018. X    cdi.maxtrack = tochdr.last;
  1019. X
  1020. X    if (cdi.times != NULL)
  1021. X    {
  1022. X        free((char *) cdi.times);
  1023. X        free((char *) cdi.addrs);
  1024. X        cdi.times = NULL;
  1025. X        cdi.addrs = NULL;
  1026. X    }
  1027. X
  1028. X    cdi.times = ushort_malloc(cdi.maxtrack - cdi.mintrack + 1);
  1029. X    cdi.addrs = msf_malloc(cdi.maxtrack - cdi.mintrack + 2);
  1030. X
  1031. X    otime = 0;
  1032. X
  1033. X    for (trk = cdi.mintrack; trk <= cdi.maxtrack; trk++) {
  1034. X        if (cdrom_get_msf(trk, &msf, &trk_total) == -1)
  1035. X            return(-1);
  1036. X
  1037. X        /* record start address for each track (track 1 starts at 0)*/
  1038. X        cdi.addrs[trk - cdi.mintrack] = msf;
  1039. X
  1040. X        trk_total -= otime;
  1041. X
  1042. X        /* use start time of next track as length of previous */
  1043. X        if (otime != 0) 
  1044. X        {
  1045. X            cdi.times[trk - cdi.mintrack - 1] = trk_total;
  1046. X        }
  1047. X
  1048. X        otime += trk_total;
  1049. X
  1050. X    }
  1051. X
  1052. X    /* find start of  leadout to get length of last track */
  1053. X    if (cdrom_get_msf(CDROM_LEADOUT, &msf, &trk_total) == -1)
  1054. X        return(-1);
  1055. X
  1056. X    /* recode leadout start address */
  1057. X    cdi.addrs[trk - cdi.mintrack] = msf;
  1058. X    trk_total -= otime;
  1059. X    otime += trk_total;
  1060. X
  1061. X    cdi.times[trk - cdi.mintrack - 1] = trk_total;
  1062. X
  1063. X    return(0);
  1064. X}
  1065. X
  1066. X# if defined(notdef)
  1067. Xstatic void
  1068. Xcdrom_print_toc() {
  1069. X    unsigned long        trk, trk_total;
  1070. X
  1071. X    for (trk = cdi.mintrack; trk <= cdi.maxtrack; trk++) {
  1072. X        trk_total = cdi.times[trk - cdi.mintrack];
  1073. X        debug_printf(1, "%02u:%02u\n", trk_total/60, trk_total%60);
  1074. X    }
  1075. X}
  1076. X# endif /* defined(notdef) */
  1077. X
  1078. Xint
  1079. Xcdrom_get_curtrack() {
  1080. X    CDSTATUS cdrom_stat;
  1081. X  
  1082. X    if (cdi.scsi_audio && cdrom_audio_opened &&
  1083. X        ((cdrom_shmem->cdrom_audio_cdi.state == CD_PLAYING) ||
  1084. X         (cdrom_shmem->cdrom_audio_cdi.state == CD_PAUSED))) {
  1085. X        if (((cdrom_shmem->cdrom_audio_msf.minute * 60) +
  1086. X             cdrom_shmem->cdrom_audio_msf.second) > 
  1087. X            ((cdi.addrs[cdrom_shmem->cdrom_audio_cdi.curtrack].minute * 60) +
  1088. X             cdi.addrs[cdrom_shmem->cdrom_audio_cdi.curtrack].second)) {
  1089. X            cdrom_shmem->cdrom_audio_cdi.curtrack++;
  1090. X        }
  1091. X        if (((cdrom_shmem->cdrom_audio_msf.minute * 60) +
  1092. X             cdrom_shmem->cdrom_audio_msf.second) < 
  1093. X            ((cdi.addrs[cdrom_shmem->cdrom_audio_cdi.curtrack-1].minute * 60) +
  1094. X             cdi.addrs[cdrom_shmem->cdrom_audio_cdi.curtrack-1].second)) {
  1095. X            cdrom_shmem->cdrom_audio_cdi.curtrack--;
  1096. X        }
  1097. X        return(cdrom_shmem->cdrom_audio_cdi.curtrack);
  1098. X    }
  1099. X    if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  1100. X        fprintf(stderr, "CDgetstatus(cdrom_stat): ");
  1101. X        perror("CDgetstatus");
  1102. X        return(-1);
  1103. X    }
  1104. X
  1105. X    switch (cdrom_stat.state) {
  1106. X    case CD_ERROR:
  1107. X        return(-1);
  1108. X        
  1109. X    case CD_NODISC:
  1110. X        debug_printf(1, "cdrom_get_curtrack: no disc\n");
  1111. X        return(0);
  1112. X        
  1113. X        /* playing track cdrom_stat.track */
  1114. X    case CD_PLAYING:
  1115. X        return((int) cdrom_stat.track);
  1116. X        
  1117. X        /* paused on track cdrom_stat.track */
  1118. X    case CD_PAUSED:
  1119. X        return((int) cdrom_stat.track);
  1120. X  
  1121. X        /* punt */
  1122. X    case CD_READY:
  1123. X        return(0);
  1124. X
  1125. X        /* punt */
  1126. X    case CD_STILL:
  1127. X        return(0);
  1128. X
  1129. X#if 0
  1130. X    case CD_NOSTATUS:
  1131. X        debug_printf(1, "cdrom_get_curtrack: no status\n");
  1132. X        return(0);
  1133. X#endif
  1134. X    }
  1135. X
  1136. X    /* bad value in cdrom_stat */
  1137. X    return(-1);
  1138. X}
  1139. X
  1140. Xint
  1141. Xcdrom_get_msf(track, msf, length)
  1142. X    unsigned long        track;
  1143. X    struct msf        *msf;
  1144. X    unsigned long        *length;
  1145. X{
  1146. X    struct cdrom_tocentry    tocentry;
  1147. X    
  1148. X    if (cdrom_read_tocentry(track, &tocentry) == -1)
  1149. X        return(-1);
  1150. X    
  1151. X    msf->minute = tocentry.cdte_addr.msf.minute;
  1152. X    msf->second = tocentry.cdte_addr.msf.second;
  1153. X    msf->frame = tocentry.cdte_addr.msf.frame;
  1154. X
  1155. X    *length = ((int) tocentry.cdte_addr.msf.minute * 60) +
  1156. X        (int) tocentry.cdte_addr.msf.second;
  1157. X
  1158. X    return(0);
  1159. X}
  1160. X
  1161. Xint
  1162. Xcdrom_get_curmsf(msf)
  1163. X    struct msf *msf;
  1164. X{
  1165. X    int         num_frames;
  1166. X    CDSTATUS     cdrom_stat;
  1167. X
  1168. X    if (cdi.scsi_audio && cdrom_audio_opened) {
  1169. X        msf->minute = cdrom_shmem->cdrom_audio_msf.minute;
  1170. X        msf->second = cdrom_shmem->cdrom_audio_msf.second;
  1171. X        msf->frame = cdrom_shmem->cdrom_audio_msf.frame;
  1172. X        if (msf->minute < 0) {
  1173. X            msf->minute = 0;
  1174. X            msf->second = 0;
  1175. X            msf->frame = 0;
  1176. X        }
  1177. X        return(0);
  1178. X    }
  1179. X    if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  1180. X        fprintf(stderr, "CDgetstatus(cdrom_stat): ");
  1181. X        perror("CDgetstatus");
  1182. X        return(-1);
  1183. X    }
  1184. X    msf->minute = cdrom_stat.abs_min;
  1185. X    msf->second = cdrom_stat.abs_sec;
  1186. X    msf->frame = cdrom_stat.abs_frame;
  1187. X
  1188. X    return (0);
  1189. X}
  1190. X
  1191. Xint
  1192. Xcdrom_play_track(start_track, end_track)
  1193. X    unsigned char        start_track;
  1194. X    unsigned char        end_track;
  1195. X{
  1196. X    int         track;
  1197. X    struct msf     msf;
  1198. X
  1199. X    track = start_track;
  1200. X    
  1201. X    if ( cdi.scsi_audio && cdrom_audio_opened ) {
  1202. X        cdrom_shmem->cdrom_audio_cdi.start_track = start_track;
  1203. X        cdrom_shmem->cdrom_audio_cdi.end_track = end_track;
  1204. X
  1205. X        cdrom_shmem->cdrom_audio_cdi.state = CD_ABORT;
  1206. X        if (CDseektrack(cdrom_fd, track) < 0) {
  1207. X            perror("CDseektrack");
  1208. X            return(-1);
  1209. X        }
  1210. X        msf = cdi.addrs[track - cdi.mintrack];
  1211. X        cdrom_shmem->cdrom_audio_msf.minute = msf.minute;
  1212. X        cdrom_shmem->cdrom_audio_msf.second = msf.second;
  1213. X        cdrom_shmem->cdrom_audio_msf.frame = msf.frame;
  1214. X        cdi.curtrack = track;
  1215. X        cdrom_shmem->cdrom_audio_cdi.curtrack = track;
  1216. X        cdrom_shmem->cdrom_audio_cdi.state = CD_PLAYING;
  1217. X        if (cdrom_shmem->cdrom_audio_cdi.child_pid != 0) {
  1218. X            return(0);
  1219. X        }
  1220. X        signal(SIGCLD, cdrom_child_died);
  1221. X        if ((cdrom_shmem->cdrom_audio_cdi.child_pid = fork()) == 0) {
  1222. X            cdrom_child_setup();
  1223. X            while (1) {
  1224. X                cdrom_play_frames(ONE_SECOND);
  1225. X            }
  1226. X        }
  1227. X    } else {
  1228. X        if (! CDplaytrack(cdrom_fd, track, 1)) {
  1229. X            perror("CDplaytrack");
  1230. X            return(-1);
  1231. X        }
  1232. X    }      
  1233. X
  1234. X    return(0);
  1235. X}
  1236. X
  1237. Xint
  1238. Xcdrom_play_msf(start_msf, end_msf)
  1239. X    struct msf    *start_msf;
  1240. X    struct msf    *end_msf;
  1241. X{
  1242. X    int num_frames;
  1243. X    int i;
  1244. X
  1245. X    /* Fix negative seconds */
  1246. X    if (start_msf->second < 0) {
  1247. X        start_msf->second += 60;
  1248. X        start_msf->minute--;
  1249. X    }
  1250. X    
  1251. X    if ( cdi.scsi_audio && cdrom_audio_opened ) {
  1252. X        cdrom_shmem->cdrom_audio_msf.minute = start_msf->minute;
  1253. X        cdrom_shmem->cdrom_audio_msf.second = start_msf->second;
  1254. X        cdrom_shmem->cdrom_audio_msf.frame = start_msf->frame;
  1255. X        if (CDseek(cdrom_fd, start_msf->minute,
  1256. X                start_msf->second, 
  1257. X                start_msf->frame) < 0) {
  1258. X            perror("CDseek");
  1259. X            return(-1);
  1260. X        }
  1261. X        cdrom_shmem->cdrom_audio_cdi.state = CD_PLAYING;
  1262. X        cdrom_shmem->cdrom_audio_cdi.curtrack = cdi.curtrack;
  1263. X        if (cdrom_shmem->cdrom_audio_cdi.child_pid != 0) {
  1264. X            return(0);
  1265. X        }
  1266. X        signal(SIGCLD, cdrom_child_died);
  1267. X        if ((cdrom_shmem->cdrom_audio_cdi.child_pid = fork()) == 0) {
  1268. X            cdrom_child_setup();
  1269. X            while (1) {
  1270. X                cdrom_play_frames(ONE_SECOND);
  1271. X            }
  1272. X        }
  1273. X
  1274. X    } else {
  1275. X        if (! CDplayabs(cdrom_fd, start_msf->minute, 
  1276. X                start_msf->second, 
  1277. X                start_msf->frame, 1)) {
  1278. X            perror("CDplayabs");
  1279. X            return(-1);
  1280. X        }
  1281. X
  1282. X        return(0);
  1283. X    }
  1284. X}
  1285. X
  1286. Xint
  1287. Xcdrom_read_tocentry(track, tocentry)
  1288. X    unsigned int        track;
  1289. X    struct cdrom_tocentry     *tocentry;
  1290. X{
  1291. X    CDSTATUS cdrom_stat;
  1292. X    CDTRACKINFO cdrom_track;
  1293. X
  1294. X    tocentry->cdte_track = track;
  1295. X    tocentry->cdte_format = CDROM_MSF;
  1296. X
  1297. X    if (cdrom_status() == CD_NODISC) {
  1298. X        tocentry->cdte_addr.msf.minute = 0;
  1299. X        tocentry->cdte_addr.msf.second = 0;
  1300. X        tocentry->cdte_addr.msf.frame = 0;
  1301. X        return(0);
  1302. X    }
  1303. X
  1304. X    if (track == CDROM_LEADOUT) {
  1305. X        if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  1306. X            fprintf(stderr, "CDgetstatus(cdrom_read_tocentry): ");
  1307. X            perror("CDgetstatus");
  1308. X            return(-1);
  1309. X        }
  1310. X        tocentry->cdte_addr.msf.minute = cdrom_stat.total_min;
  1311. X        tocentry->cdte_addr.msf.second = cdrom_stat.total_sec;
  1312. X        tocentry->cdte_addr.msf.frame = cdrom_stat.total_frame;
  1313. X    } else {
  1314. X        if (! CDgettrackinfo(cdrom_fd, track, 
  1315. X                     (CDTRACKINFO *) &cdrom_track)) {
  1316. X            fprintf(stderr, "CDgettrackinfo(cdrom_read_tocentry): ");
  1317. X            perror("CDgetstatus");
  1318. X            return(-1);
  1319. X        }
  1320. X        tocentry->cdte_addr.msf.minute = cdrom_track.start_min;
  1321. X        tocentry->cdte_addr.msf.second = cdrom_track.start_sec;
  1322. X        tocentry->cdte_addr.msf.frame = cdrom_track.start_frame;
  1323. X    }
  1324. X    return(0);
  1325. X}
  1326. X
  1327. Xint
  1328. Xcdrom_read_tochdr(tochdr)
  1329. X    CDSTATUS *tochdr;
  1330. X{
  1331. X    if (cdrom_status() == CD_NODISC) 
  1332. X        return(-1);
  1333. X
  1334. X    if (! CDgetstatus(cdrom_fd, tochdr)) {
  1335. X        fprintf(stderr, "CDgetstatus(cdrom_read_tochdr): ");
  1336. X        perror("CDgetstatus");
  1337. X        return(-1);
  1338. X    }
  1339. X
  1340. X    return(0);
  1341. X}
  1342. X
  1343. Xint
  1344. Xcdrom_status() {
  1345. X    CDSTATUS cdrom_stat;
  1346. X
  1347. X    if (cdrom_fd == NULL) {
  1348. X        return(-1);
  1349. X    }
  1350. X
  1351. X    if (cdi.scsi_audio && cdrom_audio_opened &&
  1352. X        (cdrom_shmem->cdrom_audio_cdi.child_pid != 0)) { 
  1353. X        return(cdrom_shmem->cdrom_audio_cdi.state);
  1354. X    }
  1355. X    if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  1356. X        fprintf(stderr, "CDgetstatus(cdrom_stat): ");
  1357. X        perror("CDgetstatus");
  1358. X        return(-1);
  1359. X    }
  1360. X
  1361. X    switch (cdrom_stat.state) {
  1362. X    case CD_ERROR:
  1363. X        return(CD_ERROR);
  1364. X    case CD_NODISC:
  1365. X        return(CD_NODISC);
  1366. X    case CD_READY:
  1367. X        return(CD_READY);
  1368. X    case CD_PLAYING:
  1369. X        return(CD_PLAYING);
  1370. X    case CD_PAUSED:
  1371. X        return(CD_PAUSED);
  1372. X    case CD_STILL:
  1373. X        return(CD_STILL);
  1374. X    }
  1375. X
  1376. X    return(-1);
  1377. X}
  1378. X
  1379. Xint
  1380. Xcdrom_playing(track)
  1381. X    int            *track;
  1382. X{
  1383. X    CDSTATUS cdrom_stat;
  1384. X
  1385. X    if (cdi.scsi_audio && cdrom_audio_opened &&
  1386. X        ((cdrom_shmem->cdrom_audio_cdi.state == CD_PLAYING) ||
  1387. X         (cdrom_shmem->cdrom_audio_cdi.state == CD_PAUSED))) {
  1388. X        return(cdrom_shmem->cdrom_audio_cdi.state);
  1389. X    }
  1390. X
  1391. X    if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  1392. X        fprintf(stderr, "CDgetstatus(cdrom_playing): ");
  1393. X        perror("CDstatus");
  1394. X        return(-1);
  1395. X    }
  1396. X
  1397. X    *track = cdrom_stat.track;
  1398. X    if (cdrom_stat.state == CD_PLAYING) {
  1399. X        return(1);
  1400. X    }
  1401. X
  1402. X    return(0);
  1403. X}
  1404. X
  1405. Xint
  1406. Xcdrom_paused(track)
  1407. X    int            *track;
  1408. X{
  1409. X    CDSTATUS cdrom_stat;
  1410. X
  1411. X    if (cdi.scsi_audio && cdrom_audio_opened &&
  1412. X        ((cdrom_shmem->cdrom_audio_cdi.state == CD_PLAYING) ||
  1413. X         (cdrom_shmem->cdrom_audio_cdi.state == CD_PAUSED))) {
  1414. X        return(cdrom_shmem->cdrom_audio_cdi.state);
  1415. X    }
  1416. X
  1417. X    if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  1418. X        fprintf(stderr, "CDgetstatus(cdrom_paused): ");
  1419. X        perror("CDgetstatus");
  1420. X        return(-1);
  1421. X    }
  1422. X
  1423. X    *track = cdrom_stat.track;
  1424. X    if (cdrom_status() == CD_PAUSED) {
  1425. X        return(1);
  1426. X    }
  1427. X
  1428. X    return(0);
  1429. X}
  1430. X
  1431. X# if defined(notused)
  1432. Xint
  1433. Xmounted(name)
  1434. X    char        *name;
  1435. X{
  1436. X    char        buf[MAXPATHLEN], *cp;
  1437. X    struct stat    st;
  1438. X    dev_t        bdevno;
  1439. X    FILE        *fp;
  1440. X    struct mntent    *mnt;
  1441. X
  1442. X    /*
  1443. X     * Get the block device corresponding to the raw device opened,
  1444. X     * and find its device number.
  1445. X     */
  1446. X    if (stat(name, &st) != 0) {
  1447. X        (void) fprintf(stderr, "stat: ");
  1448. X        perror(name);
  1449. X        return(UNMOUNTED);
  1450. X    }
  1451. X
  1452. X    /*
  1453. X     * If this is a raw device, we have to build the block device name.
  1454. X     */
  1455. X    if ((st.st_mode & S_IFMT) == S_IFCHR) {
  1456. X        if ((cp = strchr(name, 'r')) != NULL)
  1457. X            cp++;
  1458. X
  1459. X        (void) sprintf(buf, "/dev/%s", cp);
  1460. X        if (stat(buf, &st) != 0) {
  1461. X            (void) fprintf(stderr, "stat: ");
  1462. X            perror(buf);
  1463. X            return(UNMOUNTED);
  1464. X        }
  1465. X    }
  1466. X
  1467. X    if ((st.st_mode & S_IFMT) != S_IFBLK)
  1468. X        return(UNMOUNTED);
  1469. X
  1470. X    bdevno = st.st_rdev & (dev_t)(~0x07);    /* Mask out partition. */
  1471. X
  1472. X    /*
  1473. X     * Now go through the mtab, looking at all hsfs filesystems.
  1474. X     * Compare the device mounted with our bdevno.
  1475. X     */
  1476. X    if ((fp = setmntent(MOUNTED, "r")) == NULL) {
  1477. X        (void) fprintf(stderr, "couldn't open %s\n", MOUNTED);
  1478. X        return(UNMOUNTED);
  1479. X    }
  1480. X
  1481. X    while ((mnt = getmntent(fp)) != NULL) {
  1482. X        /* avoid obvious excess stat(2)'s */
  1483. X        if (strcmp(mnt->mnt_type, "hsfs") != 0)
  1484. X            continue;
  1485. X
  1486. X        if (stat(mnt->mnt_fsname, &st) != 0)
  1487. X            continue;
  1488. X
  1489. X        if (((st.st_mode & S_IFMT) == S_IFBLK) &&
  1490. X            ((st.st_rdev & (dev_t)(~0x07)) == bdevno)) {
  1491. X            (void) endmntent(fp);
  1492. X            return(STILL_MOUNTED);
  1493. X        }
  1494. X    }
  1495. X
  1496. X    (void) endmntent(fp);
  1497. X
  1498. X    return(UNMOUNTED);
  1499. X}
  1500. X# endif /* defined(notused) */
  1501. X
  1502. Xint
  1503. Xcdrom_play_frames(number)
  1504. X    int    number;
  1505. X{
  1506. X    int    frames_to_read = number;
  1507. X    int    num_frames;
  1508. X    int    frame_ctr;
  1509. X    struct msf msf;
  1510. X    CDSTATUS cdrom_stat;
  1511. X
  1512. X    if (cdrom_audio_opened && 
  1513. X        cdrom_shmem->cdrom_audio_cdi.state != CD_PLAYING) {
  1514. X        sleep(1);
  1515. X        return(-1);
  1516. X    }
  1517. X
  1518. X    if (frames_to_read > INIT_READ) {
  1519. X        frames_to_read = INIT_READ;
  1520. X    }
  1521. X    if ((num_frames = 
  1522. X         CDreadda(cdrom_fd, &cd_audio_buff[0], frames_to_read)) == -1) {
  1523. X        perror("CDreadda");
  1524. X        return(-1);
  1525. X    }
  1526. X    if (num_frames == 0) {
  1527. X        msf = cdi.addrs[cdi.maxtrack];
  1528. X        if ((cdrom_shmem->cdrom_audio_msf.minute >= (msf.minute-1)) &&
  1529. X            (cdrom_shmem->cdrom_audio_msf.second >= (msf.second-1)) ) {
  1530. X            cdrom_shmem->cdrom_audio_cdi.curtrack = 0;
  1531. X            cdrom_shmem->cdrom_audio_cdi.state = CD_READY;
  1532. X        }
  1533. X        return(0);
  1534. X    }
  1535. X    for (frame_ctr=0;
  1536. X         frame_ctr<num_frames && 
  1537. X         cdrom_shmem->cdrom_audio_cdi.state == CD_PLAYING;
  1538. X         frame_ctr++) {
  1539. X        CDparseframe(cd_parser, &cd_audio_buff[frame_ctr]);
  1540. X    }
  1541. X    if (cdrom_shmem->cdrom_audio_cdi.state == CD_ABORT) {
  1542. X        cdrom_shmem->cdrom_audio_cdi.state = CD_PLAYING;
  1543. X    }
  1544. X    return(num_frames);
  1545. X}
  1546. X
  1547. Xint
  1548. Xcdrom_child_setup() {
  1549. X    cdrom_shmem = shmat(shmid, NULL, SHM_RND);
  1550. X    cdrom_shmem->cdrom_audio_cdi.state = CD_PLAYING;
  1551. X    signal(SIGHUP,cdrom_child_quit);
  1552. X}
  1553. X
  1554. Xvoid
  1555. Xcdrom_child_died() {
  1556. X    cdrom_stop();
  1557. X    wait(NULL);
  1558. X    cdrom_shmem->cdrom_audio_cdi.child_pid = 0;
  1559. X    cdrom_shmem->cdrom_audio_cdi.state = CD_READY;
  1560. X    cdrom_shmem->cdrom_audio_cdi.curtrack = 0;
  1561. X    cdi.curtrack = 0;
  1562. X    cdrom_shmem->cdrom_audio_msf.minute = 0;
  1563. X    cdrom_shmem->cdrom_audio_msf.second = 0;
  1564. X    cdrom_shmem->cdrom_audio_msf.frame = 0;
  1565. X    signal(SIGCLD,cdrom_child_died);
  1566. X}
  1567. X
  1568. Xvoid
  1569. Xcdrom_child_quit() {
  1570. X    shmdt(cdrom_shmem);
  1571. X    exit(1);
  1572. X}
  1573. X
  1574. Xvoid
  1575. Xcdrom_kill_child()
  1576. X{
  1577. X    if (!(cdrom_audio_opened && cdrom_shmem->cdrom_audio_cdi.child_pid)) {
  1578. X        return;
  1579. X    }
  1580. X    kill(cdrom_shmem->cdrom_audio_cdi.child_pid, SIGHUP);
  1581. X    wait(NULL);
  1582. X    cdrom_shmem->cdrom_audio_cdi.state = CD_READY;
  1583. X    cdrom_shmem->cdrom_audio_cdi.child_pid = 0;
  1584. X}
  1585. X
  1586. Xint
  1587. Xcdrom_audio_avail() {
  1588. X    CDSTATUS    cdrom_stat;
  1589. X
  1590. X    if (cdrom_audio_opened && (! audio_button_state())) {
  1591. X        return(0);
  1592. X    }
  1593. X    cdrom_audio_opened = 1;
  1594. X
  1595. X    if (! CDgetstatus(cdrom_fd, (CDSTATUS *) &cdrom_stat)) {
  1596. X        fprintf(stderr, "CDgetstatus(cdrom_stat): ");
  1597. X        perror("CDgetstatus");
  1598. X        return(-1);
  1599. X    }
  1600. X
  1601. X    if ( cdrom_stat.scsi_audio && (cdrom_audio_open() >= 0) ) {
  1602. X        return(1);
  1603. X    } else {
  1604. X        return(0);
  1605. X    }
  1606. X}
  1607. X
  1608. Xunsigned short *
  1609. Xushort_malloc(n)
  1610. X    int        n;
  1611. X{
  1612. X    extern char    *calloc();
  1613. X    unsigned short    *ptr;
  1614. X
  1615. X    ptr = (unsigned short *) calloc(n, sizeof(unsigned short));
  1616. X    if (ptr == NULL) {
  1617. X        perror("calloc");
  1618. X        exit(1);
  1619. X    }
  1620. X
  1621. X    return(ptr);
  1622. X}
  1623. X
  1624. Xstruct msf *
  1625. Xmsf_malloc(n)
  1626. X    int        n;
  1627. X{
  1628. X    extern char    *calloc();
  1629. X    struct msf    *ptr;
  1630. X
  1631. X    ptr = (struct msf *) calloc(n, sizeof(struct msf));
  1632. X    if (ptr == NULL) {
  1633. X        perror("calloc");
  1634. X        exit(1);
  1635. X    }
  1636. X
  1637. X    return(ptr);
  1638. X}
  1639. X
  1640. Xint
  1641. Xcdrom_disp_cdi() {
  1642. X    int trk;
  1643. X
  1644. X    fprintf(stderr,"CDI structure:\n");
  1645. X    fprintf(stderr,"\tcurtrack: %d\n",cdi.curtrack);
  1646. X    fprintf(stderr,"\tmin: %d  max: %d  total: %d\n",
  1647. X        cdi.mintrack, cdi.maxtrack, cdi.ntracks);
  1648. X    fprintf(stderr,"\tdur: %d  state: %2x\n",cdi.duration, cdi.state);
  1649. X    fprintf(stderr,"\tcurrand: %d  lastprog: %d\n",
  1650. X        cdi.currand, cdi.lastprog);
  1651. X    fprintf(stderr,"\n\tTracklist:\n");
  1652. X    if (cdi.maxtrack != cdi.mintrack) {
  1653. X        for (trk=cdi.mintrack; trk<=cdi.maxtrack; trk++) {
  1654. X            fprintf(stderr,"\t%3d: %d %02d:%02d %d\n",trk,cdi.times[trk],
  1655. X                cdi.addrs[trk].minute,cdi.addrs[trk].second,
  1656. X                cdi.addrs[trk].frame);
  1657. X        }
  1658. X    }
  1659. X
  1660. X    if (cdi.scsi_audio) {
  1661. X        fprintf(stderr,"AUDIO_CDI structure:\n");
  1662. X        fprintf(stderr,"\tcurtrack: %d\n",cdrom_shmem->cdrom_audio_cdi.curtrack);
  1663. X        fprintf(stderr,"\tdur: %d  state: %d\n",cdrom_shmem->cdrom_audio_cdi.duration, cdrom_shmem->cdrom_audio_cdi.state);
  1664. X    }
  1665. X}
  1666. X
  1667. X# endif /* defined(sgi) */
  1668. END_OF_FILE
  1669. if test 24783 -ne `wc -c <'xcdplayer-2.2/cdrom_sgi.c'`; then
  1670.     echo shar: \"'xcdplayer-2.2/cdrom_sgi.c'\" unpacked with wrong size!
  1671. fi
  1672. # end of 'xcdplayer-2.2/cdrom_sgi.c'
  1673. fi
  1674. echo shar: End of archive 5 \(of 5\).
  1675. cp /dev/null ark5isdone
  1676. MISSING=""
  1677. for I in 1 2 3 4 5 ; do
  1678.     if test ! -f ark${I}isdone ; then
  1679.     MISSING="${MISSING} ${I}"
  1680.     fi
  1681. done
  1682. if test "${MISSING}" = "" ; then
  1683.     echo You have unpacked all 5 archives.
  1684.     rm -f ark[1-9]isdone
  1685. else
  1686.     echo You still need to unpack the following archives:
  1687.     echo "        " ${MISSING}
  1688. fi
  1689. ##  End of shell archive.
  1690. exit 0
  1691. -- 
  1692. Dan Rich                    | drich@lerc.nasa.gov   |  (216) 433-4000
  1693. Sr. Systems Engineer        | "Danger, you haven't seen the last of me!"
  1694. RMS Technologies, Inc.      |    "No, but the first of you turns my stomach!"
  1695. NASA Lewis Research Center  | -- The Firesign Theatre's Nick Danger
  1696.  
  1697.