home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume38 / cdplay / part01 < prev    next >
Encoding:
Text File  |  1993-06-19  |  18.5 KB  |  831 lines

  1. Newsgroups: comp.sources.misc
  2. From: Eric_Wallengren@univel.com (Eric Wallengren)
  3. Subject: v38i014:  cdplay - Simple Audio cd-player for Toshiba CD-ROMS for UnixWare, Part01/01
  4. Message-ID: <1993Jun20.231004.11773@sparky.imd.sterling.com>
  5. X-Md4-Signature: 1688c2df2e130ff9b35ca870e1788136
  6. Keywords: UnixWare, wksh, Univel
  7. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  8. Organization: Univel
  9. Date: Sun, 20 Jun 1993 23:10:04 GMT
  10. Approved: kent@sparky.imd.sterling.com
  11.  
  12. Submitted-by: Eric_Wallengren@univel.com (Eric Wallengren)
  13. Posting-number: Volume 38, Issue 14
  14. Archive-name: cdplay/part01
  15. Environment: UnixWare, wksh, Univel
  16.  
  17. This application utilizes the Windowing Korn Shell for a front end 
  18. and simple "c" source for the back end.
  19.  
  20. #! /bin/sh
  21. # This is a shell archive.  Remove anything before this line, then feed it
  22. # into a shell via "sh file" or similar.  To overwrite existing files,
  23. # type "sh file -c".
  24. # Contents:  README Makefile cdfront cdplay.c
  25. # Wrapped by kent@sparky on Sun Jun 20 18:03:27 1993
  26. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  27. echo If this archive is complete, you will see the following message:
  28. echo '          "shar: End of archive 1 (of 1)."'
  29. if test -f 'README' -a "${1}" != "-c" ; then 
  30.   echo shar: Will not clobber existing file \"'README'\"
  31. else
  32.   echo shar: Extracting \"'README'\" \(1541 characters\)
  33.   sed "s/^X//" >'README' <<'END_OF_FILE'
  34. X
  35. XAudio cdplayer for Toshiba cd-roms running under UnixWare.
  36. XRequires headphones or speakers to be plugged into your 
  37. Xcd-rom player.
  38. X
  39. XIt's quick, simple and very dirty, but it works. 
  40. X
  41. XTo configure, edit cdplay.c, search for:
  42. X
  43. X#define CD_ROM 
  44. X
  45. Xand substitute my cd-device for your cd-device
  46. X
  47. XTo compile type "make"
  48. X
  49. XTo install type "make install" (You must be root).
  50. X
  51. XThis consists of 2 parts. The first is called "cdplay" and will
  52. Xprint all options with the help of a "-?" flag. The second is a
  53. XWindowing Korn Shell script which acts as a front end to cdplay.
  54. X
  55. XOnce installed, type "cdfront" and press return. A display will 
  56. Xappear with Numbers representing track numbers, and pixmaps
  57. Xrepresenting functions, which are L to R:
  58. X
  59. XBack  Play  Skip
  60. XPause Power Eject
  61. X
  62. XSelecting a number will play from that track on (Remember, it's 
  63. Xquick, simple and very dirty). Selecting Back will play the track
  64. Xprevious to the one initially selected, Skip will play the track
  65. Xafter the initially selected track, Play will play from the initially
  66. Xselected track or from the first track when started, pause once will
  67. Xpause, pause re-selected will start play again, Eject will eject the 
  68. Xdisk and Power will exit the program. 
  69. X
  70. XThe screen will not re-map when putting in a new cd, you must exit
  71. Xthe application and re-start it to map a new cd.
  72. X
  73. XDo what I did, make a symbolic link from /usr/X/bin/cdfront to the
  74. X"Applications" folder in your home directoy, and launch the app 
  75. Xby double-clicking on the icon with your mouse.
  76. X
  77. X
  78. XEric Wallengren
  79. Xeric@univel.COM
  80. END_OF_FILE
  81.   if test 1541 -ne `wc -c <'README'`; then
  82.     echo shar: \"'README'\" unpacked with wrong size!
  83.   fi
  84.   # end of 'README'
  85. fi
  86. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  87.   echo shar: Will not clobber existing file \"'Makefile'\"
  88. else
  89.   echo shar: Extracting \"'Makefile'\" \(118 characters\)
  90.   sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  91. Xcdplay: cdplay.o
  92. X    cc cdplay.o -o cdplay
  93. X
  94. Xclean:
  95. X    rm *.o cdplay
  96. X
  97. Xinstall:
  98. X    cp cdplay /usr/X/bin
  99. X    cp cdfront /usr/X/bin
  100. END_OF_FILE
  101.   if test 118 -ne `wc -c <'Makefile'`; then
  102.     echo shar: \"'Makefile'\" unpacked with wrong size!
  103.   fi
  104.   # end of 'Makefile'
  105. fi
  106. if test -f 'cdfront' -a "${1}" != "-c" ; then 
  107.   echo shar: Will not clobber existing file \"'cdfront'\"
  108. else
  109.   echo shar: Extracting \"'cdfront'\" \(9654 characters\)
  110.   sed "s/^X//" >'cdfront' <<'END_OF_FILE'
  111. X#! /usr/X/bin/wksh -openlook -iconic iconPixmap:/tmp/logo
  112. X
  113. XPAUSEFILE=/tmp/`basename $0.$$`
  114. XFUNCLIST="prev play next pause quit eject"
  115. Xif [[ "$XGUI" = "OPEN_LOOK" ]]
  116. Xthen
  117. X    Button=oblongButton
  118. Xelse
  119. X    Button=rectButton
  120. Xfi
  121. X
  122. Xquit()
  123. X{
  124. X    cdplay -s  2>/dev/null
  125. X
  126. X    for i in $FUNCLIST
  127. X    do
  128. X        rm /tmp/$i
  129. X    done
  130. X
  131. X    if [ -s $PAUSEFILE ]
  132. X    then
  133. X        rm $PAUSEFILE
  134. X    fi
  135. X    exit 0
  136. X}
  137. X
  138. Xcdlogo()
  139. X{
  140. X
  141. Xcat <<-EOF >/tmp/logo
  142. X#define disc_format 1
  143. X#define disc_width 56
  144. X#define disc_height 38
  145. X#define disc_ncolors 2
  146. X#define disc_chars_per_pixel 1
  147. Xstatic char * disc_colors[] = {
  148. X" " , "#000000000000",
  149. X"." , "#FFFFFFFFFFFF"
  150. X} ;
  151. Xstatic char * disc_pixels[] = {
  152. X"                                                        ",
  153. X"                                                        ",
  154. X"                     ..   ..  .   . ...   ..   ..  ...  ",
  155. X"            ......  .  . .  . .. .. .  . .  . .  .  .   ",
  156. X"            .    .  .    .  . . . . .... .... .     .   ",
  157. X"            .    .  .  . .  . .   . .    .  . .  .  .   ",
  158. X"            .    .   ..   ..  .   . .    .  .  ..   .   ",
  159. X"            .    .                                      ",
  160. X"            .    .                                      ",
  161. X"            .    .                                      ",
  162. X"      .......    .  ......    ..........    ........    ",
  163. X"     .           .  .    .   .         .   .        .   ",
  164. X"    .            .  .    .  .          .  .          .  ",
  165. X"    .     ..     .  .    .  .          .  .    ..    .  ",
  166. X"    .    .  .    .  .    .  .   ........  .   .  .   .  ",
  167. X"    .    .  .    .  .    .  .  .          .   .  .   .  ",
  168. X"    .    .  .    .  .    .  .   ......    .   .  .....  ",
  169. X"    .    .  .    .  .    .  .         .   .   .         ",
  170. X"    .    .  .    .  .    .  .          .  .   .         ",
  171. X"    .    .  .    .  .    .   .         .  .   .  .....  ",
  172. X"    .    .  .    .  .    .    ......   .  .   .  .   .  ",
  173. X"    .    .  .    .  .    .          .  .  .   .  .   .  ",
  174. X"    .    .  .    .  .    .  ........   .  .   .  .   .  ",
  175. X"    .     ..     .  .    .  .          .  .    ..    .  ",
  176. X"    .            .  .    .  .          .  .          .  ",
  177. X"     .           .  .    .  .         .    .        .   ",
  178. X"      ............  ......  ..........      ........    ",
  179. X"                                                        ",
  180. X"                                                        ",
  181. X"                                                        ",
  182. X"    ...  .  ... . ...  ..  .      ..  .  . ...  .  ..   ",
  183. X"    .  . . .    .  .  .  . .     .  . .  . .  . . .  .  ",
  184. X"    .  . . . .. .  .  .... .     .... .  . .  . . .  .  ",
  185. X"    .  . . .  . .  .  .  . .     .  . .  . .  . . .  .  ",
  186. X"    ...  .  ... .  .  .  . ....  .  .  ..  ...  .  ..   ",
  187. X"                                                        ",
  188. X"                                                        ",
  189. X"                                                        "
  190. X} ;
  191. XEOF
  192. X
  193. Xcat <<-EOF >/tmp/eject
  194. X#define eject_format 1
  195. X#define eject_width 16
  196. X#define eject_height 16
  197. X#define eject_ncolors 2
  198. X#define eject_chars_per_pixel 1
  199. Xstatic char * eject_colors[] = {
  200. X" " , "#AAAAAAAAAAAA",
  201. X"." , "#000000000000"
  202. X} ;
  203. Xstatic char * eject_pixels[] = {
  204. X"                ",
  205. X"                ",
  206. X"        .       ",
  207. X"       ...      ",
  208. X"      .. ..     ",
  209. X"     ..   ..    ",
  210. X"    ..     ..   ",
  211. X"   ..       ..  ",
  212. X"   ...........  ",
  213. X"   ...........  ",
  214. X"                ",
  215. X"                ",
  216. X"   ...........  ",
  217. X"   ...........  ",
  218. X"                ",
  219. X"                "
  220. X} ;
  221. XEOF
  222. X
  223. Xcat <<-EOF >/tmp/next
  224. X#define next_format 1
  225. X#define next_width 16
  226. X#define next_height 16
  227. X#define next_ncolors 2
  228. X#define next_chars_per_pixel 1
  229. Xstatic char * next_colors[] = {
  230. X" " , "#AAAAAAAAAAAA",
  231. X"." , "#000000000000"
  232. X} ;
  233. Xstatic char * next_pixels[] = {
  234. X"             .. ",
  235. X" ..   ..     .. ",
  236. X"  ..   ..    .. ",
  237. X"   ..   ..   .. ",
  238. X"    ..   ..  .. ",
  239. X"     ..   .. .. ",
  240. X"      ..   .... ",
  241. X"       ..   ... ",
  242. X"      ..   .... ",
  243. X"     ..   .. .. ",
  244. X"    ..   ..  .. ",
  245. X"   ..   ..   .. ",
  246. X"  ..   ..    .. ",
  247. X" ..   ..     .. ",
  248. X"             .. ",
  249. X"                "
  250. X} ;
  251. XEOF
  252. X
  253. Xcat <<-EOF >/tmp/pause
  254. X#define pause_format 1
  255. X#define pause_width 16
  256. X#define pause_height 16
  257. X#define pause_ncolors 2
  258. X#define pause_chars_per_pixel 1
  259. Xstatic char * pause_colors[] = {
  260. X" " , "#AAAAAAAAAAAA",
  261. X"." , "#000000000000"
  262. X} ;
  263. Xstatic char * pause_pixels[] = {
  264. X"                ",
  265. X"    ..   ..     ",
  266. X"    ..   ..     ",
  267. X"    ..   ..     ",
  268. X"    ..   ..     ",
  269. X"    ..   ..     ",
  270. X"    ..   ..     ",
  271. X"    ..   ..     ",
  272. X"    ..   ..     ",
  273. X"    ..   ..     ",
  274. X"    ..   ..     ",
  275. X"    ..   ..     ",
  276. X"    ..   ..     ",
  277. X"    ..   ..     ",
  278. X"                ",
  279. X"                "
  280. X} ;
  281. XEOF
  282. X
  283. Xcat <<-EOF >/tmp/play
  284. X#define play_format 1
  285. X#define play_width 16
  286. X#define play_height 16
  287. X#define play_ncolors 2
  288. X#define play_chars_per_pixel 1
  289. Xstatic char * play_colors[] = {
  290. X" " , "#AAAAAAAAAAAA",
  291. X"." , "#000000000000"
  292. X} ;
  293. Xstatic char * play_pixels[] = {
  294. X"                ",
  295. X"     ...        ",
  296. X"     ....       ",
  297. X"     .....      ",
  298. X"     .. ...     ",
  299. X"     ..  ...    ",
  300. X"     ..   ...   ",
  301. X"     ..    ...  ",
  302. X"     ..   ...   ",
  303. X"     ..  ...    ",
  304. X"     .. ...     ",
  305. X"     .....      ",
  306. X"     ....       ",
  307. X"     ...        ",
  308. X"                ",
  309. X"                "
  310. X} ;
  311. X
  312. Xcat <<-EOF >/tmp/prev
  313. X#define prev_format 1
  314. X#define prev_width 16
  315. X#define prev_height 16
  316. X#define prev_ncolors 2
  317. X#define prev_chars_per_pixel 1
  318. Xstatic char * prev_colors[] = {
  319. X" " , "#AAAAAAAAAAAA",
  320. X"." , "#000000000000"
  321. X} ;
  322. Xstatic char * prev_pixels[] = {
  323. X" ..             ",
  324. X" ..     ..   .. ",
  325. X" ..    ..   ..  ",
  326. X" ..   ..   ..   ",
  327. X" ..  ..   ..    ",
  328. X" .. ..   ..     ",
  329. X" ....   ..      ",
  330. X" ...   ..       ",
  331. X" ....   ..      ",
  332. X" .. ..   ..     ",
  333. X" ..  ..   ..    ",
  334. X" ..   ..   ..   ",
  335. X" ..    ..   ..  ",
  336. X" ..     ..   .. ",
  337. X" ..             ",
  338. X"                "
  339. X} ;
  340. XEOF
  341. X
  342. Xcat <<-EOF >/tmp/prev
  343. X#define prev_format 1
  344. X#define prev_width 16
  345. X#define prev_height 16
  346. X#define prev_ncolors 2
  347. X#define prev_chars_per_pixel 1
  348. Xstatic char * prev_colors[] = {
  349. X" " , "#AAAAAAAAAAAA",
  350. X"." , "#000000000000"
  351. X} ;
  352. Xstatic char * prev_pixels[] = {
  353. X" ..             ",
  354. X" ..     ..   .. ",
  355. X" ..    ..   ..  ",
  356. X" ..   ..   ..   ",
  357. X" ..  ..   ..    ",
  358. X" .. ..   ..     ",
  359. X" ....   ..      ",
  360. X" ...   ..       ",
  361. X" ....   ..      ",
  362. X" .. ..   ..     ",
  363. X" ..  ..   ..    ",
  364. X" ..   ..   ..   ",
  365. X" ..    ..   ..  ",
  366. X" ..     ..   .. ",
  367. X" ..             ",
  368. X"                "
  369. X} ;
  370. XEOF
  371. X
  372. Xcat <<-EOF >/tmp/quit
  373. X#define quit_format 1
  374. X#define quit_width 16
  375. X#define quit_height 16
  376. X#define quit_ncolors 2
  377. X#define quit_chars_per_pixel 1
  378. Xstatic char * quit_colors[] = {
  379. X" " , "#AAAAAAAAAAAA",
  380. X"." , "#000000000000"
  381. X} ;
  382. Xstatic char * quit_pixels[] = {
  383. X"       ......   ",
  384. X"       ......   ",
  385. X"      ......    ",
  386. X"      .....     ",
  387. X"     .....      ",
  388. X"     ....       ",
  389. X"    ........    ",
  390. X"    .......     ",
  391. X"      ....      ",
  392. X"     ....       ",
  393. X"    ....        ",
  394. X"    ...         ",
  395. X"   ...          ",
  396. X"   ..           ",
  397. X"  ..            ",
  398. X"  .             "
  399. X} ;
  400. XEOF
  401. X
  402. X}
  403. X
  404. XplayTrack()
  405. X{
  406. X    ((THISTRACK=$CB_INDEX+1))
  407. X    cdplay -t $THISTRACK 2>/dev/null
  408. X}
  409. X
  410. Xeject()
  411. X{
  412. X    cdplay -e 2>/dev/null
  413. X    if [ "$XGUI" = "MOTIF" ]
  414. X    then
  415. X        sv W13 set:false
  416. X    fi
  417. X}
  418. X
  419. Xplay()
  420. X{
  421. X    cdplay -t $THISTRACK 2>/dev/null
  422. X    if [ "$XGUI" = "MOTIF" ]
  423. X    then
  424. X        sv W9 set:false
  425. X    fi
  426. X}
  427. X
  428. Xnext()
  429. X{
  430. X    
  431. X    if [ $THISTRACK -ne MAXTRACKS ]
  432. X    then
  433. X        ((NEXTTRACK=$THISTRACK+1))
  434. X        THISTRACK=$NEXTTRACK
  435. X        cdplay -t $NEXTTRACK 2>/dev/null
  436. X    else
  437. X        errormsg "No more tracks on disc"
  438. X        cdplay -t $THISTRACK 2>/dev/null
  439. X    fi
  440. X    if [ "$XGUI" = "MOTIF" ]
  441. X    then
  442. X        sv W10 set:false
  443. X    fi
  444. X}
  445. X
  446. Xprev()
  447. X{
  448. X    
  449. X    if [ $THISTRACK -ne 1 ]
  450. X    then
  451. X        ((PREVTRACK=$THISTRACK-1))
  452. X        THISTRACK=$PREVTRACK
  453. X        cdplay -t $PREVTRACK 2>/dev/null
  454. X    else
  455. X        errormsg "At the beginning of the disc"
  456. X        cdplay -t $THISTRACK 2>/dev/null
  457. X    fi
  458. X    if [ "$XGUI" = "MOTIF" ]
  459. X    then
  460. X        sv W8 set:false
  461. X    fi
  462. X}
  463. X
  464. Xpause()
  465. X{
  466. X    if [ -s $PAUSEFILE ]
  467. X    then
  468. X        rm $PAUSEFILE
  469. X        cdplay -r 2>/dev/null
  470. X    else
  471. X        echo paused >$PAUSEFILE
  472. X        cdplay -p 2>/dev/null
  473. X    fi
  474. X    if [ "$XGUI" = "MOTIF" ]
  475. X    then
  476. X        sv W11 set:false
  477. X    fi
  478. X}
  479. X        
  480. XmakeTrackList()
  481. X{
  482. X    tracks=`cdplay -c |awk '{FS=":"} {print $2}'`
  483. X    THISTRACK=1
  484. X    MAXTRACKS=${tracks#" "}
  485. X    ((tracks=${tracks#" "}+1))
  486. X
  487. X    COUNTER=1
  488. X    while [ $COUNTER -lt $MAXTRACKS ]
  489. X    do
  490. X        TRACK="$TRACK {$COUNTER, $COUNTER},"
  491. X        ((COUNTER=$COUNTER+1))
  492. X    done
  493. X    TRACK="$TRACK {$MAXTRACKS, $COUNTER}"
  494. X}
  495. X
  496. XmakeFuncList()
  497. X{
  498. X    COUNTER=0
  499. X    for i in $FUNCLIST
  500. X    do
  501. X        Function[COUNTER]=$i
  502. X        Funcname[COUNTER]=`typeset -u $i`
  503. X        ((COUNTER=$COUNTER+1))
  504. X    done
  505. X}
  506. X
  507. Xerrormsg()
  508. X{
  509. X    cps NOTICE notice noticeShell $FORM \
  510. X        title:"ERROR" \
  511. X        noticeType:warning \
  512. X        emanateWidget:$FORM
  513. X
  514. X    acb $NOTICE popdownCallback "dw $NOTICE"
  515. X
  516. X    sv $NOTICE_TA string:"${1}"
  517. X
  518. X    cmw OK Ok flatButtons $NOTICE_CA \
  519. X        numItems:1 \
  520. X        numItemFields:1 \
  521. X        itemFields:'{label}' \
  522. X        items:'{Ok}'
  523. X
  524. X    pu $NOTICE GrabExclusive
  525. X}
  526. X
  527. Xcdlogo
  528. XmakeTrackList
  529. XmakeFuncList
  530. X
  531. Xoi TOP top "CD Juke-Box" "@" 
  532. X
  533. Xcmw FORM form form $TOP 
  534. X
  535. Xcmw CDMAIN cdmain controlArea $FORM layoutType:fixedcols measure:1 
  536. X
  537. Xcmw DISC disc staticText $CDMAIN width:32 height:36 recomputeSize:false \
  538. X    string:"" backgroundPixmap:/tmp/logo
  539. X
  540. Xcmw CAP caption caption $CDMAIN label:"Tracks: "
  541. X
  542. Xcmw BUTTONS buttons flatButtons $CAP \
  543. X    layoutType:fixedcols \
  544. X    measure:5 \
  545. X    numItemFields:2 \
  546. X    numItems:$MAXTRACKS \
  547. X    itemFields:'{label,userData}' \
  548. X    items:"$TRACK"
  549. X    
  550. Xsv $BUTTONS selectProc:"playTrack"
  551. X
  552. Xcmw FUNCTION function caption $CDMAIN label:"Functions:"
  553. Xcmw FUNCCONTROL control controlArea $FUNCTION \
  554. X    layoutType:fixedcols \
  555. X    measure:3
  556. X
  557. Xfor i in $FUNCLIST
  558. Xdo
  559. X    typeset -u Function=$i
  560. X    cmw $Function $i $Button $FUNCCONTROL \
  561. X        labelJustify:center \
  562. X        labelType:image \
  563. X        labelImage:/tmp/$i \
  564. X        select:$i 
  565. Xdone
  566. X
  567. Xrw $TOP
  568. Xml
  569. END_OF_FILE
  570.   if test 9654 -ne `wc -c <'cdfront'`; then
  571.     echo shar: \"'cdfront'\" unpacked with wrong size!
  572.   fi
  573.   chmod +x 'cdfront'
  574.   # end of 'cdfront'
  575. fi
  576. if test -f 'cdplay.c' -a "${1}" != "-c" ; then 
  577.   echo shar: Will not clobber existing file \"'cdplay.c'\"
  578. else
  579.   echo shar: Extracting \"'cdplay.c'\" \(3908 characters\)
  580.   sed "s/^X//" >'cdplay.c' <<'END_OF_FILE'
  581. X/* 
  582. X   Basic cd-rom player for UnixWare
  583. X
  584. X    Eric Wallengren, Univel 1993
  585. X
  586. X    Can be redistribiuted as long as Univel/UnixWare 
  587. X    and my name are left intact. 
  588. X
  589. X   This allows a Toshiba CD-ROM to play audio cds. It requires 
  590. X   headphones or speakers to be pluggged into the front of the
  591. X   cd-rom drive.
  592. X*/
  593. X
  594. X#include <stdio.h>
  595. X#include <sys/types.h>
  596. X#include <sys/stat.h>
  597. X#include <fcntl.h>
  598. X#include <sys/cdrom.h>
  599. X#include <sys/cd_ioctl.h>
  600. X
  601. X/* Define the starting track and the device used for accessing the cdrom */
  602. X#define MIN_TRACK 1
  603. X
  604. X/* Change device to suit your needs */
  605. X#define CD_ROM "/dev/rcdrom/c0t2l0\0" 
  606. X
  607. X/* Gotta have structures */
  608. Xstruct cdrom_inq Inquiry;
  609. Xstruct cdrom_capacity Capacity;
  610. Xstruct cdrom_audio Audio;
  611. X
  612. X/* Ugly kludge which everyone needs, one per program */
  613. Xextern int Trackloop[99]={1,2,3,4,5,6,7,8,9, \
  614. X               16,17,18,19,20,21,22,23,24,25, \
  615. X              32,33,34,35,36,37,38,39,40,41, \
  616. X              48,49,50,51,52,53,54,55,56,57, \
  617. X              64,65,66,67,68,69,70,71,72,73, \
  618. X              80,81,82,83,84,85,86,87,88,89, \
  619. X              96,97,98,99,100,101,102,103,104,105, \
  620. X              112,113,114,115,116,117,118,119,120,121, \
  621. X              128,129,130,131,132,133,134,135,136,137, \
  622. X              144,145,146,147,148,149,150,151,152,153};
  623. X/* File for open */
  624. Xint CdRom;
  625. X
  626. Xextern char ValidArgs[6]={'c', 'e', 'p', 'r', 's', 't'};
  627. X
  628. Xmain(argc, argv)
  629. Xint   argc;
  630. Xchar *argv[];
  631. X{
  632. X
  633. X    int a, tracks;
  634. X    int b=0;
  635. X
  636. X    for(a=1; a<argc; a++)
  637. X    {
  638. X        if(argv[a][0] != '-')
  639. X        {
  640. X            printf("Invalid switch\n");
  641. X            exit(1);
  642. X        }
  643. X        for(b=0; b<6; b++)
  644. X        {
  645. X
  646. X            if(argv[a][1] == ValidArgs[b])
  647. X            {
  648. X                switch(ValidArgs[b]) {
  649. X                    case 'c' :
  650. X                        tracks=Count_Tracks();
  651. X                        printf("Tracks: %d\n", tracks);
  652. X                    break;
  653. X                    case 'e' :
  654. X                        Eject_Disk();
  655. X                    break;
  656. X                    case 'r' :
  657. X                        Resume_Play();
  658. X                    break;
  659. X                    case 't' :
  660. X                        a++;
  661. X                        Select_Track(atoi(argv[a]));
  662. X                    break;
  663. X                    case 'p' :
  664. X                        Stop_Play();
  665. X                    break;
  666. X                    case 's' :
  667. X                        Quit_Play();
  668. X                    break;
  669. X                    default:
  670. X                        Help_Message();
  671. X                    break;    
  672. X                }
  673. X                exit(0);
  674. X            }
  675. X        }
  676. X        
  677. X    }
  678. X    Help_Message();
  679. X}
  680. X
  681. X/* Open the device */
  682. XOpen_Device()
  683. X{
  684. X    if((CdRom=open(CD_ROM, O_RDONLY)) < 0)
  685. X        perror("Opening Device"), exit(1);
  686. X}
  687. X
  688. X/* Quit playing the CD */
  689. XQuit_Play()
  690. X{
  691. X
  692. X    int Return;
  693. X
  694. X    Open_Device();
  695. X
  696. X    if((Return=ioctl(CdRom, C_STOPUNIT, NULL)) < 0)
  697. X        perror("Stopping Play"), exit(1);
  698. X
  699. X}
  700. X
  701. X/* How many tracks are there */
  702. XCount_Tracks()
  703. X{
  704. X
  705. X    int Return;
  706. X    int tracks=0;
  707. X
  708. X    Open_Device();
  709. X
  710. X    if((Return=ioctl(CdRom, C_STARTUNIT, NULL)) < 0)
  711. X        perror("Starting CD-ROM");
  712. X
  713. X    if((Return=ioctl(CdRom, C_REZERO, NULL)) < 0)
  714. X        perror("Seeking track 0");
  715. X
  716. X    Audio.addr_track=Trackloop[tracks];
  717. X
  718. X    Audio.play=0;
  719. X    Audio.type=2;
  720. X
  721. X    while(Return > -1)
  722. X    {
  723. X        if((Return=ioctl(CdRom, C_AUDIOSEARCH, &Audio)) < 0)
  724. X            return tracks;
  725. X        ++tracks;
  726. X        Audio.addr_track=Trackloop[tracks];
  727. X    }
  728. X}
  729. X
  730. X/* Kick the disk out */
  731. XEject_Disk()
  732. X{
  733. X
  734. X    int Return;
  735. X
  736. X    Open_Device();
  737. X
  738. X    if((Return=ioctl(CdRom, C_TRAYOPEN, NULL)) < 0)
  739. X        perror("Opening Tray");
  740. X
  741. X}
  742. X
  743. X/* Select the track to play */
  744. XSelect_Track(TrackNum)
  745. Xint TrackNum;
  746. X{
  747. X
  748. X    int Return;
  749. X
  750. X    Open_Device();
  751. X
  752. X    Audio.play=0;
  753. X    Audio.type=2;
  754. X
  755. X    Audio.addr_track=Trackloop[TrackNum-1];
  756. X
  757. X    if((Return=ioctl(CdRom, C_AUDIOSEARCH, &Audio)) < 0)
  758. X        printf("Track %d does not exist\n", TrackNum ), exit(1);
  759. X    
  760. X    Audio.play=3;
  761. X    Audio.type=3;
  762. X
  763. X    if((Return=ioctl(CdRom, C_PLAYAUDIO, &Audio)) < 0)
  764. X        perror("Playing CD");
  765. X    
  766. X}
  767. X
  768. X/* Pause the cd-rom */
  769. XStop_Play()
  770. X{
  771. X
  772. X    int Return;
  773. X
  774. X    Open_Device();
  775. X
  776. X    if((Return=ioctl(CdRom, C_STILL, NULL)) < 0)
  777. X        perror("Stopping Player");
  778. X
  779. X}
  780. X
  781. X/* Resume playing the cd-rom */
  782. XResume_Play()
  783. X{
  784. X
  785. X    int Return;
  786. X
  787. X    Open_Device();
  788. X
  789. X    Audio.play=3;
  790. X    Audio.type=2;
  791. X
  792. X    if((Return=ioctl(CdRom, C_PLAYAUDIO, &Audio)) < 0)
  793. X        perror("Resuming Play");
  794. X
  795. X}
  796. X
  797. X/* How do ya use this thing anyway? */
  798. XHelp_Message()
  799. X{
  800. X
  801. X    printf("Usage:  -c Count tracks\n \
  802. X    -e Eject Disk\n\t-p Pause Play\n \
  803. X    -r Restart from current position\n \
  804. X    -s Stop Play\n \
  805. X    -t <int> Select track to start play from\n");
  806. X
  807. X}
  808. END_OF_FILE
  809.   if test 3908 -ne `wc -c <'cdplay.c'`; then
  810.     echo shar: \"'cdplay.c'\" unpacked with wrong size!
  811.   fi
  812.   # end of 'cdplay.c'
  813. fi
  814. echo shar: End of archive 1 \(of 1\).
  815. cp /dev/null ark1isdone
  816. MISSING=""
  817. for I in 1 ; do
  818.     if test ! -f ark${I}isdone ; then
  819.     MISSING="${MISSING} ${I}"
  820.     fi
  821. done
  822. if test "${MISSING}" = "" ; then
  823.     echo You have the archive.
  824.     rm -f ark[1-9]isdone
  825. else
  826.     echo You still must unpack the following archives:
  827.     echo "        " ${MISSING}
  828. fi
  829. exit 0
  830. exit 0 # Just in case...
  831.