Annotation of ntddk/src/scsi/cdaudio/cdaudio.h, revision 1.1

1.1     ! root        1: #if DBG
        !             2: 
        !             3: //
        !             4: // CdAudio debug level global variable
        !             5: //
        !             6: 
        !             7: ULONG CdAudioDebug = 0;
        !             8: 
        !             9: //
        !            10: // Remap CdDump to local routine
        !            11: //
        !            12: 
        !            13: #define CdDump(X)  CdAudioDebugPrint X
        !            14: 
        !            15: VOID
        !            16: CdAudioDebugPrint(
        !            17:     ULONG DebugPrintLevel,
        !            18:     PCCHAR DebugMessage,
        !            19:     ...
        !            20:     );
        !            21: 
        !            22: #else
        !            23: 
        !            24: #define CdDump(X)
        !            25: 
        !            26: #endif // DBG
        !            27: 
        !            28: #include "class.h"
        !            29: 
        !            30: #define CDAUDIO_NOT_ACTIVE 0
        !            31: #define CDAUDIO_NEC        1
        !            32: #define CDAUDIO_PIONEER    2
        !            33: #define CDAUDIO_DENON      3
        !            34: #define CDAUDIO_HITATCHI   4
        !            35: #define CDAUDIO_CDS535     5
        !            36: #define CDAUDIO_CDS435     6
        !            37: 
        !            38: 
        !            39: #define CDAUDIO_NOT_PAUSED 0
        !            40: #define CDAUDIO_PAUSED     1
        !            41: 
        !            42: //
        !            43: // Device Extension
        !            44: //
        !            45: 
        !            46: typedef struct _CD_DEVICE_EXTENSION {
        !            47: 
        !            48:     //
        !            49:     // Class device extension.
        !            50:     //
        !            51: 
        !            52:     DEVICE_EXTENSION ClassDeviceExtension;
        !            53: 
        !            54:     //
        !            55:     // Target Device Object
        !            56:     //
        !            57: 
        !            58:     PDEVICE_OBJECT TargetDeviceObject;
        !            59: 
        !            60:     //
        !            61:     // Back pointer to device object
        !            62:     //
        !            63: 
        !            64:     PDEVICE_OBJECT DeviceObject;
        !            65: 
        !            66:     //
        !            67:     // CdAudio active for this drive
        !            68:     //
        !            69: 
        !            70:     UCHAR Active;
        !            71: 
        !            72:     //
        !            73:     // For drives that don't support
        !            74:     // PAUSE/RESUME (Denon), a flag
        !            75:     // to signify when the drive is
        !            76:     // paused.
        !            77:     //
        !            78: 
        !            79:     UCHAR Paused;
        !            80: 
        !            81:     //
        !            82:     // For drives that don't support
        !            83:     // PAUSE/RESUME (Denon), this is the
        !            84:     // current position on the disc when
        !            85:     // a pause was last executed.  This is
        !            86:     // stored in either BCD or binary,
        !            87:     // depending on the drive.
        !            88:     //
        !            89: 
        !            90:     UCHAR PausedM;
        !            91:     UCHAR PausedS;
        !            92:     UCHAR PausedF;
        !            93: 
        !            94:     //
        !            95:     // For drives that don't support
        !            96:     // PAUSE/RESUME (Denon), this is the
        !            97:     // last "ending" position on the disc when
        !            98:     // a play was last executed.  This is
        !            99:     // stored in BCD or binary, depending on
        !           100:     // the drive.
        !           101:     //
        !           102: 
        !           103:     UCHAR LastEndM;
        !           104:     UCHAR LastEndS;
        !           105:     UCHAR LastEndF;
        !           106: 
        !           107:     //
        !           108:     // Indicates the CD is currently playing music.
        !           109:     //
        !           110: 
        !           111:     BOOLEAN PlayActive;
        !           112: 
        !           113: } CD_DEVICE_EXTENSION, *PCD_DEVICE_EXTENSION;
        !           114: 
        !           115: #define AUDIO_TIMEOUT 10
        !           116: #define CD_DEVICE_EXTENSION_SIZE sizeof(CD_DEVICE_EXTENSION)
        !           117: #define MAXIMUM_RETRIES 4
        !           118: 
        !           119: //
        !           120: // Convert BCD character to decimal equivalent
        !           121: //
        !           122: 
        !           123: #define BCD_TO_DEC(x) ((((x & 0xF0)>>4)*10) + (x & 0x0F))
        !           124: #define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10))
        !           125: 
        !           126: //
        !           127: // Defines for NEC CDR cdrom drives
        !           128: //
        !           129: 
        !           130: #define NEC_READ_TOC_CODE           0xDE
        !           131: #define NEC_AUDIO_TRACK_SEARCH_CODE 0xD8
        !           132: #define NEC_PLAY_AUDIO_CODE         0xD9
        !           133: #define NEC_STILL_CODE              0xDA
        !           134: #define NEC_EJECT_CODE              0xDC
        !           135: #define NEC_READ_SUB_Q_CHANNEL_CODE 0xDD
        !           136: #define NEC_Q_CHANNEL_TRANSFER_SIZE 10
        !           137: 
        !           138: #define NEC_ENTER_PLAY_MODE         0x01
        !           139: #define NEC_TYPE_LOGICAL            0x00
        !           140: #define NEC_TYPE_ATIME              0x40
        !           141: #define NEC_TYPE_TRACK_NUMBER       0x80
        !           142: #define NEC_TYPE_NO_CHANGE          0xC0
        !           143: #define NEC_PLAY_STEREO             0x03
        !           144: #define NEC_TRANSFER_WHOLE_TOC      0x03
        !           145: #define NEC_TOC_TYPE_DISK           0xA0
        !           146: #define NEC_TOC_TYPE_SESSION        0xB0
        !           147: 
        !           148: //
        !           149: // The NEC cdrom TOC size is:
        !           150: //  2  bytes for size
        !           151: //  10 bytes first track data
        !           152: //  10 bytes last track data
        !           153: //  10 bytes total disk data
        !           154: //  10 bytes per track 99 track maximum.
        !           155: //
        !           156: 
        !           157: #define NEC_CDROM_TOC_SIZE          1022
        !           158: 
        !           159: //
        !           160: // NEC SENSE CODES
        !           161: //
        !           162: 
        !           163: #define NEC_SCSI_ERROR_NO_DISC              0x0B
        !           164: #define NEC_SCSI_ERROR_ILLEGAL_DISC         0x0C
        !           165: #define NEC_SCSI_ERROR_TRAY_OPEN            0x0D
        !           166: #define NEC_SCSI_ERROR_SEEK_ERROR           0x15
        !           167: #define NEC_SCSI_ERROR_MUSIC_AREA           0x1D
        !           168: #define NEC_SCSI_ERROR_DATA_AREA            0x1C
        !           169: #define NEC_SCSI_ERROR_PARITY_ERROR         0x30
        !           170: #define NEC_SCSI_ERROR_INVALID_COMMAND      0x20
        !           171: #define NEC_SCSI_ERROR_INVALID_ADDRESS      0x21
        !           172: #define NEC_SCSI_ERROR_INVALID_PARAMETER    0x22
        !           173: #define NEC_SCSI_ERROR_INVALID_CMD_SEQUENCE 0x24
        !           174: #define NEC_SCSI_ERROR_END_OF_VOLUME        0x25
        !           175: #define NEC_SCSI_ERROR_MEDIA_CHANGED        0x28
        !           176: #define NEC_SCSI_ERROR_DEVICE_RESET         0x29
        !           177: 
        !           178: //
        !           179: // NEC 10-byte cdb definitions.
        !           180: //
        !           181: 
        !           182: typedef union _NEC_CDB {
        !           183: 
        !           184:     //
        !           185:     // NEC Read TOC CDB
        !           186:     //
        !           187: 
        !           188:     struct _NEC_READ_TOC {
        !           189:         UCHAR OperationCode;
        !           190:         UCHAR Type : 2;
        !           191:         UCHAR Reserved1 : 6;
        !           192:         UCHAR TrackNumber;
        !           193:         UCHAR Reserved2[6];
        !           194:         UCHAR Control;
        !           195:     } NEC_READ_TOC, *PNEC_READ_TOC;
        !           196: 
        !           197:     //
        !           198:     // NEC Play CDB
        !           199:     //
        !           200: 
        !           201:     struct _NEC_PLAY_AUDIO {
        !           202:         UCHAR OperationCode;
        !           203:         UCHAR PlayMode : 3;
        !           204:         UCHAR Reserved1 : 5;
        !           205:         UCHAR Minute;
        !           206:         UCHAR Second;
        !           207:         UCHAR Frame;
        !           208:         UCHAR Reserved2[4];
        !           209:         UCHAR Control;
        !           210:     } NEC_PLAY_AUDIO, *PNEC_PLAY_AUDIO;
        !           211: 
        !           212:     //
        !           213:     // NEC Seek Audio
        !           214:     //
        !           215: 
        !           216:     struct _NEC_SEEK_AUDIO {
        !           217:         UCHAR OperationCode;
        !           218:         UCHAR Play : 1;
        !           219:         UCHAR Reserved1 : 7;
        !           220:         UCHAR Minute;
        !           221:         UCHAR Second;
        !           222:         UCHAR Frame;
        !           223:         UCHAR Reserved2[4];
        !           224:         UCHAR Control;
        !           225:     } NEC_SEEK_AUDIO, *PNEC_SEEK_AUDIO;
        !           226: 
        !           227:     //
        !           228:     // NEC Pause Audio
        !           229:     //
        !           230: 
        !           231:     struct _NEC_PAUSE_AUDIO {
        !           232:         UCHAR OperationCode;
        !           233:         UCHAR Reserved1[8];
        !           234:         UCHAR Control;
        !           235:     } NEC_PAUSE_AUDIO, *PNEC_PAUSE_AUDIO;
        !           236: 
        !           237:     //
        !           238:     // NEC Read Q Channel
        !           239:     //
        !           240: 
        !           241:     struct _NEC_READ_Q_CHANNEL {
        !           242:         UCHAR OperationCode;
        !           243:         UCHAR TransferSize : 5;
        !           244:         UCHAR Reserved1 : 3;
        !           245:         UCHAR Reserved2[7];
        !           246:         UCHAR Control;
        !           247:     } NEC_READ_Q_CHANNEL, *PNEC_READ_Q_CHANNEL;
        !           248: 
        !           249:     //
        !           250:     // NEC Eject Disc
        !           251:     //
        !           252: 
        !           253:     struct _NEC_EJECT {
        !           254:         UCHAR OperationCode;
        !           255:         UCHAR Immediate : 1;
        !           256:         UCHAR Reserved1 : 7;
        !           257:         UCHAR Reserved2[7];
        !           258:         UCHAR Control;
        !           259:     } NEC_EJECT, *PNEC_EJECT;
        !           260: 
        !           261: } NEC_CDB, *PNEC_CDB;
        !           262: 
        !           263: //
        !           264: // Defines for PIONEER DRM-600
        !           265: //
        !           266: 
        !           267: #define PIONEER_REZERO_UNIT_CODE        0x01
        !           268: #define PIONEER_EJECT_CODE              0xC0
        !           269: #define PIONEER_READ_TOC_CODE           0xC1
        !           270: #define PIONEER_READ_SUB_Q_CHANNEL_CODE 0xC2
        !           271: #define PIONEER_Q_CHANNEL_TRANSFER_SIZE 9
        !           272: #define PIONEER_AUDIO_STATUS_TRANSFER_SIZE 6
        !           273: #define PIONEER_AUDIO_TRACK_SEARCH_CODE 0xC8
        !           274: #define PIONEER_PLAY_AUDIO_CODE         0xC9
        !           275: #define PIONEER_PAUSE_CODE              0xCA
        !           276: #define PIONEER_AUDIO_STATUS_CODE       0xCC
        !           277: 
        !           278: #define PIONEER_READ_FIRST_AND_LAST     0x00
        !           279: #define PIONEER_READ_TRACK_INFO         0x02
        !           280: #define PIONEER_READ_LEAD_OUT_INFO      0x01
        !           281: #define PIONEER_TRANSFER_SIZE           0x04
        !           282: #define PIONEER_TYPE_ATIME              0x01
        !           283: #define PIONEER_STOP_ADDRESS            0x10
        !           284: 
        !           285: //
        !           286: // Pioneer cdb definitions.
        !           287: //
        !           288: 
        !           289: typedef union _PIONEER_CDB {
        !           290: 
        !           291: 
        !           292:     //
        !           293:     // Pioneer Start/Stop Unit
        !           294:     //
        !           295: 
        !           296:     struct _PNR_START_STOP {
        !           297:         UCHAR OperationCode;
        !           298:         UCHAR Immediate : 1;
        !           299:         UCHAR Reserved1 : 4;
        !           300:         UCHAR Lun : 3;
        !           301:         UCHAR Reserved2 : 7;
        !           302:         UCHAR PCF : 1;
        !           303:         UCHAR Reserved3;
        !           304:         UCHAR Start : 1;
        !           305:         UCHAR Eject : 1;
        !           306:         UCHAR Reserved4 : 6;
        !           307:         UCHAR Link : 1;
        !           308:         UCHAR Flag : 1;
        !           309:         UCHAR Reserved5 : 4;
        !           310:         UCHAR Vendor : 2;
        !           311:     } PNR_START_STOP, *PPNR_START_STOP;
        !           312: 
        !           313:     //
        !           314:     // Pioneer Read TOC CDB
        !           315:     //
        !           316: 
        !           317:     struct _PNR_READ_TOC {
        !           318:         UCHAR OperationCode;
        !           319:         UCHAR Reserved1 : 5;
        !           320:         UCHAR Lun : 3;
        !           321:         UCHAR Reserved2[3];
        !           322:         UCHAR TrackNumber;
        !           323:         UCHAR Reserved3;
        !           324:         UCHAR AssignedLength[2];
        !           325:         UCHAR Link : 1;
        !           326:         UCHAR Flag : 1;
        !           327:         UCHAR Reserved4 : 4;
        !           328:         UCHAR Type : 2;
        !           329:     } PNR_READ_TOC, *PPNR_READ_TOC;
        !           330: 
        !           331:     //
        !           332:     // Pioneer Play CDB
        !           333:     //
        !           334: 
        !           335:     struct _PNR_PLAY_AUDIO {
        !           336:         UCHAR OperationCode;
        !           337:         UCHAR PlayMode : 4;
        !           338:         UCHAR StopAddr : 1;
        !           339:         UCHAR Lun : 3;
        !           340:         UCHAR Reserved1;
        !           341:         UCHAR Minute;
        !           342:         UCHAR Second;
        !           343:         UCHAR Frame;
        !           344:         UCHAR Reserved2[3];
        !           345:         UCHAR Link : 1;
        !           346:         UCHAR Flag : 1;
        !           347:         UCHAR Reserved3 : 4;
        !           348:         UCHAR Type : 2;
        !           349:     } PNR_PLAY_AUDIO, *PPNR_PLAY_AUDIO;
        !           350: 
        !           351:     //
        !           352:     // Pioneer Seek Audio
        !           353:     //
        !           354: 
        !           355:     struct _PNR_SEEK_AUDIO {
        !           356:         UCHAR OperationCode;
        !           357:         UCHAR PlayMode : 4;
        !           358:         UCHAR PlayBack : 1;
        !           359:         UCHAR Lun : 3;
        !           360:         UCHAR Reserved1;
        !           361:         UCHAR Minute;
        !           362:         UCHAR Second;
        !           363:         UCHAR Frame;
        !           364:         UCHAR Reserved2[3];
        !           365:         UCHAR Link : 1;
        !           366:         UCHAR Flag : 1;
        !           367:         UCHAR Reserved3 : 4;
        !           368:         UCHAR Type : 2;
        !           369:     } PNR_SEEK_AUDIO, *PPNR_SEEK_AUDIO;
        !           370: 
        !           371:     //
        !           372:     // Pioneer Pause Audio
        !           373:     //
        !           374: 
        !           375:     struct _PNR_PAUSE_AUDIO {
        !           376:         UCHAR OperationCode;
        !           377:         UCHAR Reserved1 : 4;
        !           378:         UCHAR Pause : 1;
        !           379:         UCHAR Lun : 3;
        !           380:         UCHAR Reserved2[7];
        !           381:         UCHAR Link : 1;
        !           382:         UCHAR Flag : 1;
        !           383:         UCHAR Reserved3 : 4;
        !           384:         UCHAR Reserved4 : 2;
        !           385:     } PNR_PAUSE_AUDIO, *PPNR_PAUSE_AUDIO;
        !           386: 
        !           387:     //
        !           388:     // Pioneer Audio Status
        !           389:     //
        !           390: 
        !           391:     struct _PNR_AUDIO_STATUS {
        !           392:         UCHAR OperationCode;
        !           393:         UCHAR Reserved1 : 4;
        !           394:         UCHAR Reserved2 : 1;
        !           395:         UCHAR Lun : 3;
        !           396:         UCHAR Reserved3[6];
        !           397:         UCHAR AssignedLength;
        !           398:         UCHAR Link : 1;
        !           399:         UCHAR Flag : 1;
        !           400:         UCHAR Reserved4 : 4;
        !           401:         UCHAR Reserved5 : 2;
        !           402:     } PNR_AUDIO_STATUS, *PPNR_AUDIO_STATUS;
        !           403: 
        !           404:     //
        !           405:     // Pioneer Read Q Channel
        !           406:     //
        !           407: 
        !           408:     struct _PNR_READ_Q_CHANNEL {
        !           409:         UCHAR OperationCode;
        !           410:         UCHAR Reserved1 : 4;
        !           411:         UCHAR Reserved2 : 1;
        !           412:         UCHAR Lun : 3;
        !           413:         UCHAR Reserved3[6];
        !           414:         UCHAR AssignedLength;
        !           415:         UCHAR Link : 1;
        !           416:         UCHAR Flag : 1;
        !           417:         UCHAR Reserved4 : 4;
        !           418:         UCHAR Reserved5 : 2;
        !           419:     } PNR_READ_Q_CHANNEL, *PPNR_READ_Q_CHANNEL;
        !           420: 
        !           421:     //
        !           422:     // Pioneer Eject Disc
        !           423:     //
        !           424: 
        !           425:     struct _PNR_EJECT {
        !           426:         UCHAR OperationCode;
        !           427:         UCHAR Immediate : 1;
        !           428:         UCHAR Reserved1 : 4;
        !           429:         UCHAR Lun : 3;
        !           430:         UCHAR Reserved2[7];
        !           431:         UCHAR Link : 1;
        !           432:         UCHAR Flag : 1;
        !           433:         UCHAR Reserved4 : 4;
        !           434:         UCHAR Reserved5 : 2;
        !           435:     } PNR_EJECT, *PPNR_EJECT;
        !           436: 
        !           437: } PNR_CDB, *PPNR_CDB;
        !           438: 
        !           439: 
        !           440: //
        !           441: // Defines for DENON DRD-253
        !           442: //
        !           443: 
        !           444: #define DENON_READ_TOC_CODE             0xE9
        !           445: #define DENON_EJECT_CODE                0xE6
        !           446: #define DENON_PLAY_AUDIO_EXTENDED_CODE  0x22
        !           447: #define DENON_STOP_AUDIO_CODE           0xE7
        !           448: #define DENON_READ_SUB_Q_CHANNEL_CODE   0xEB
        !           449: 
        !           450: //
        !           451: // Defines for HITATCHI 1750s
        !           452: //
        !           453: 
        !           454: #define HITATCHI_READ_TOC_CODE              0xE8
        !           455: #define HITATCHI_EJECT_CODE                 0xE4
        !           456: #define HITATCHI_PLAY_AUDIO_MSF_CODE        0xE0
        !           457: #define HITATCHI_PAUSE_AUDIO_CODE           0xE1
        !           458: #define HITATCHI_READ_SUB_Q_CHANNEL_CODE    0xE5
        !           459: 
        !           460: //
        !           461: // 12 byte cdbs for Hitatchi
        !           462: //
        !           463: 
        !           464: typedef union _CDB12 {
        !           465: 
        !           466:     //
        !           467:     // Disc Information
        !           468:     //
        !           469: 
        !           470:     struct _READ_DISC_INFO {
        !           471: 
        !           472:         UCHAR   OperationCode;
        !           473:         UCHAR   Reserved : 5;
        !           474:         UCHAR   LogicalUnitNumber : 3;
        !           475:         UCHAR   Reserved1[7];
        !           476:         UCHAR   AllocationLength[2];
        !           477:         UCHAR   Link : 1;
        !           478:         UCHAR   Flag : 1;
        !           479:         UCHAR   Reserved2 : 4;
        !           480:         UCHAR   VendorUniqueBits : 2;
        !           481: 
        !           482:     } READ_DISC_INFO, *PREAD_DISC_INFO;
        !           483: 
        !           484:     //
        !           485:     // Play Audio
        !           486:     //
        !           487: 
        !           488:     struct _PLAY_AUDIO {
        !           489: 
        !           490:         UCHAR OperationCode;
        !           491:         UCHAR Immediate : 1;
        !           492:         UCHAR Right : 1;
        !           493:         UCHAR Left : 1;
        !           494:         UCHAR Reserved : 2;
        !           495:         UCHAR Lun : 3;
        !           496:         UCHAR StartingM;
        !           497:         UCHAR StartingS;
        !           498:         UCHAR StartingF;
        !           499:         UCHAR Reserved1[2];
        !           500:         UCHAR EndingM;
        !           501:         UCHAR EndingS;
        !           502:         UCHAR EndingF;
        !           503:         UCHAR Reserved2;
        !           504:         UCHAR Link : 1;
        !           505:         UCHAR Flag : 1;
        !           506:         UCHAR Reserved3 : 4;
        !           507:         UCHAR VendorUniqueBits : 2;
        !           508: 
        !           509:     } PLAY_AUDIO, *PPLAY_AUDIO;
        !           510: 
        !           511:     //
        !           512:     // Pause Audio
        !           513:     //
        !           514: 
        !           515:     struct _PAUSE {
        !           516: 
        !           517:         UCHAR OperationCode;
        !           518:         UCHAR Reserved : 5;
        !           519:         UCHAR Lun : 3;
        !           520:         UCHAR Reserved1[9];
        !           521:         UCHAR Link : 1;
        !           522:         UCHAR Flag : 1;
        !           523:         UCHAR Reserved2 : 4;
        !           524:         UCHAR VendorUnqiueBits : 2;
        !           525: 
        !           526:     } PAUSE_AUDIO, *PPAUSE_AUDIO;
        !           527: 
        !           528:     //
        !           529:     // Eject media
        !           530:     //
        !           531: 
        !           532:     struct _EJECT {
        !           533: 
        !           534:         UCHAR OperationCode;
        !           535:         UCHAR Reserved : 5;
        !           536:         UCHAR Lun : 3;
        !           537:         UCHAR Reserved1[8];
        !           538:         UCHAR Eject : 1;
        !           539:         UCHAR Mode : 1;
        !           540:         UCHAR Reserved2 : 6;
        !           541:         UCHAR Link : 1;
        !           542:         UCHAR Flag : 1;
        !           543:         UCHAR Reserved3 : 4;
        !           544:         UCHAR VendorUnqiueBits : 2;
        !           545: 
        !           546:     } EJECT, *PEJECT;
        !           547: 
        !           548:     //
        !           549:     // Audio Status
        !           550:     //
        !           551: 
        !           552:     struct _AUDIO_STATUS {
        !           553: 
        !           554:         UCHAR OperationCode;
        !           555:         UCHAR Reserved : 5;
        !           556:         UCHAR Lun : 3;
        !           557:         UCHAR Reserved1[9];
        !           558:         UCHAR Link : 1;
        !           559:         UCHAR Flag : 1;
        !           560:         UCHAR Reserved2 : 4;
        !           561:         UCHAR VendorUnqiueBits : 2;
        !           562: 
        !           563:     } AUDIO_STATUS, *PAUDIO_STATUS;
        !           564: 
        !           565: } CDB12, *PCDB12;
        !           566: 
        !           567: //
        !           568: // Defines for Chinon CDS-535 CDROM Drive
        !           569: //
        !           570: 
        !           571: #define CDS535_READ_TOC_CODE           0x43
        !           572: #define CDS535_EJECT_CODE              0xC0
        !           573: #define CDS535_READ_SUB_Q_CHANNEL_CODE 0x42
        !           574: #define CDS535_STOP_AUDIO              0xC6
        !           575: #define CDS535_GET_LAST_SESSION        0x26
        !           576: 
        !           577: //
        !           578: // Defines for Chinon CDS-435 CDROM Drive
        !           579: //
        !           580: 
        !           581: #define CDS435_READ_TOC_CODE            0x43
        !           582: #define CDS435_EJECT_CODE               0xC0
        !           583: #define CDS435_STOP_AUDIO_CODE          0xC6
        !           584: #define CDS435_PLAY_AUDIO_EXTENDED_CODE 0x47
        !           585: #define CDS435_READ_SUB_Q_CHANNEL_CODE  0x42
        !           586: 
        !           587: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.