Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
cdMain.c
// imWare |
// Wednesday, February 14, 1990 |
// James Beninghaus |
#include <stdio.h> |
#include <string.h> |
#include <ToolUtils.h> |
#include <Errors.h> |
#include <cd.h> |
#define sUNDEF 0 |
#define sDRIVE 1 |
#define sPLAY 2 |
#define sPAUSE 3 |
#define sCONTINUE 4 |
#define sSTOP 5 |
#define sEJECT 6 |
#define min(a, b) (a<b ? a:b) |
#define max(a, b) (a>b ? a:b) |
void Usage() { |
printf("cd [-drive 1..6] [-play [1..73 [1..73]] [stereo | mono] | -pause | -continue | -stop | -eject]\n"); |
exit(paramErr); |
} |
main (int argc, char *argv[]) { |
auto OSErr osErr; |
auto short drive, |
ioRefNum, |
count, |
track, |
state; |
auto Byte userCDNumber, |
userStart, |
userStop, |
discStart, |
discStop, |
audioStatus, |
playMode, |
cntlField, |
minutes, |
seconds, |
frames; |
InitGraf((Ptr) &qd.thePort); |
state = sUNDEF; |
userCDNumber = 1; |
userStart = 0; |
userStop = 100; |
playMode = STEREO; |
count = 0; |
while (++count < argc) |
if (0 == strcmp("-drive", argv[count])) |
state = sDRIVE; |
else if (1 == sscanf(argv[count], "%hd", &drive) && 1 <= drive && drive <= 6 && sDRIVE == state) { |
state = sUNDEF; |
userCDNumber = (Byte) drive; |
} else if (0 == strcmp("-play", argv[count]) && sUNDEF == state) |
state = sPLAY; |
else if (1 == sscanf(argv[count], "%hd", &track) && 1 <= track && track <= 73 && sPLAY == state) |
if (0 == userStart) |
userStart = (Byte) track; |
else |
userStop = (Byte) track; |
else if (0 == strcmp("stereo", argv[count]) && sPLAY == state) |
playMode = STEREO; |
else if (0 == strcmp("mono", argv[count]) && sPLAY == state) |
playMode = MONO; |
else if (0 == strcmp("-pause", argv[count]) && sUNDEF == state) |
state = sPAUSE; |
else if (0 == strcmp("-continue", argv[count]) && sUNDEF == state) |
state = sCONTINUE; |
else if (0 == strcmp("-stop", argv[count]) && sUNDEF == state) |
state = sSTOP; |
else if (0 == strcmp("-eject", argv[count]) && sUNDEF == state) |
state = sEJECT; |
else |
Usage(); |
osErr = OpenCD(userCDNumber, &ioRefNum); |
if (noErr == osErr) |
switch (state) { |
case sUNDEF : |
case sDRIVE : |
case sPLAY : |
osErr = TrackCount(ioRefNum, &discStop); |
if (noErr == osErr) { |
discStart = 0; |
do |
osErr = TrackInfo(ioRefNum, ++discStart, &cntlField, &minutes, &seconds, &frames); |
while (BitTst(&cntlField, 5) && noErr == osErr); |
if (noErr == osErr) { |
osErr = AStop(ioRefNum, max(min(userStop, discStop), discStart)); |
if (noErr == osErr) |
osErr = APlay(ioRefNum, min(max(userStart, discStart), discStop), playMode); |
} |
} |
break; |
case sPAUSE : |
osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames); |
if (noErr == osErr) |
if (PLAYING == audioStatus) |
osErr = APause(ioRefNum, PAUSE); |
break; |
case sCONTINUE : |
osErr = AStatus(ioRefNum, &audioStatus, &playMode, &cntlField, &minutes, &seconds, &frames); |
if (noErr == osErr) |
if (PAUSED == audioStatus) |
osErr = APause(ioRefNum, CONTINUE); |
break; |
case sSTOP : |
osErr = AStop(ioRefNum, 0); |
break; |
case sEJECT : |
osErr = EjectCD(ioRefNum); |
break; |
} |
exit(osErr); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14