home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / EGON2_3.LZH / EGON_2_3 / LIB / METADOS.H next >
C/C++ Source or Header  |  1994-12-25  |  9KB  |  316 lines

  1. /*
  2.  
  3.  
  4.     EGON! MetaDOS Headerfile
  5.  
  6.     Das File enthält DEFINES, Strukturen und Prototypen zum
  7.     Umgang mit MetaDOS Funktionen.
  8.  
  9.     Copyright (c) EDV-Service Ch. Bontenackels
  10.                   Beethovenstra₧e 5
  11.                   52146 Würselen
  12.  
  13. */
  14.  
  15.  
  16.  
  17. /*
  18.    Datenstrukturen, welche von den MetaDOS Funktionen
  19.    benötigt werden.
  20. */
  21.  
  22. typedef struct
  23. {
  24.     unsigned char trackno, minute, second, frame;
  25. } CD_TOC_ENTRY;
  26.  
  27. typedef struct
  28. {
  29.     unsigned char disctype;     /* 0: audio, 1: data */
  30.     unsigned char firsttrack, lasttrack, curtrack;
  31.     unsigned char relposz, relposm, relposs, relposf;
  32.     unsigned char absposz, absposm, absposs, absposf;
  33.     unsigned char endposz, endposm, endposs, endposf;
  34.     unsigned char index, res[3];
  35.     unsigned long reserved[123];
  36. } CD_DISC_INFO;
  37.  
  38. typedef struct
  39. {
  40.     unsigned short mi_version;   /* z.B.: 0x230 == '02.30' */
  41.     long           mi_magic;     /* '_MET' */
  42.     const char     *mi_log2phys; /* maps DOS-IDs to MetaDOS XBIOS device numbers */
  43. } META_INFO_2;
  44.  
  45. typedef struct
  46. {
  47.     unsigned long mi_drivemap;        /* Bitvektor Meta-DOS-Gerätetreiber "A.."Z" (Bit 0: "A") */
  48.     const char    *mi_version_string; /* Zeichenkette mit Namen und Versionsnummer von Meta-DOS */
  49.     long          reserved;
  50.     META_INFO_2   *mi_info;
  51. } META_INFO_1;
  52.  
  53. typedef struct
  54. {
  55.     char    *mdr_name;
  56.     long    res[3];
  57. } META_DRVINFO;
  58.  
  59. typedef union
  60. {
  61.     struct {
  62.         unsigned char reserved, minute, second, frame;
  63.    } msf;
  64.     long lba;
  65. } cd_ad;
  66.  
  67. /*
  68.    Von Metaioctl benutzte Datenstrukturen.
  69. */
  70.  
  71. struct cdrom_msf
  72. {
  73.     unsigned char cdmsf_min0;     /* start minute */
  74.     unsigned char cdmsf_sec0;     /* start second */
  75.     unsigned char cdmsf_frame0;   /* start frame */
  76.     unsigned char cdmsf_min1;     /* end minute */
  77.     unsigned char cdmsf_sec1;     /* end second */
  78.     unsigned char cdmsf_frame1;   /* end frame */
  79. };
  80.  
  81. struct cdrom_ti
  82. {
  83.     unsigned char cdti_trk0;      /* start track */
  84.     unsigned char cdti_ind0;      /* start index */
  85.     unsigned char cdti_trk1;      /* end track */
  86.     unsigned char cdti_ind1;      /* end index */
  87. };
  88.  
  89. struct cdrom_tochdr
  90. {
  91.     unsigned char cdth_trk0;      /* start track */
  92.     unsigned char cdth_trk1;      /* end track */
  93. };
  94.  
  95. struct cdrom_tocentry
  96. {
  97.     /* Eingabewerte */
  98.  
  99.     unsigned char cdte_track;     /* Tracknummer oder CDROM_LEADOUT */
  100.     unsigned char cdte_format;    /* CDROM_LBA oder CDROM_MSF */
  101.  
  102.     /* Rückgabewerte */
  103.  
  104.     unsigned cdte_adr:4;     /* the SUBQ channel encodes 0: nothing,
  105.                                  1: position data, 2: MCN, 3: ISRC,
  106.                                  else: reserved */
  107.     unsigned cdte_ctrl:4;    /* bit 0: audio with pre-emphasis,
  108.                                  bit 1: digital copy permitted,
  109.                                  bit 2: data track,
  110.                                  bit 3: four channel */
  111.     unsigned char cdte_datamode;        /* nicht benutzt */
  112.      cd_ad    cdte_addr;          /* Anfang des Tracks */
  113. };
  114.  
  115. struct cdrom_subchnl
  116. {
  117.     /* Eingabewerte */
  118.  
  119.     unsigned char cdsc_format;  /* CDROM_MSF oder CDROM_LBA */
  120.  
  121.     /* Rückgabewerte */
  122.  
  123.     unsigned char cdsc_audiostatus; /* see below */
  124.     unsigned      cdsc_resvd: 8;    /* reserved */
  125.     unsigned      cdsc_adr:   4;    /* see above */
  126.     unsigned      cdsc_ctrl:  4;    /* see above */
  127.     unsigned char cdsc_trk;         /* current track */
  128.     unsigned char cdsc_ind;         /* current index */
  129.     cd_ad         cdsc_absaddr;     /* absolute address */
  130.     cd_ad         cdsc_reladdr;     /* track relative address */
  131. };
  132.  
  133. struct cdrom_mcn
  134. {
  135.     unsigned char mcn_audiostatus;  /* see above */
  136.     unsigned char mcn_mcn[23];      /* Media catalog number as ASCII string */
  137. };
  138.  
  139. struct cdrom_tisrc
  140. {
  141.     /* Eingabewerte */
  142.  
  143.     unsigned char tisrc_track;      /* track number */
  144.  
  145.     /* Rückgabewerte */
  146.  
  147.     unsigned char tisrc_audiostatus;/* see above */
  148.     unsigned char tisrc_tisrc[23];  /* Track International Standard Recording Code (ASCII) */
  149. };
  150.  
  151. struct cdrom_volctrl
  152. {
  153.     unsigned char channel0;         /* volume level 0..255 */
  154.     unsigned char channel1;
  155.     unsigned char channel2;
  156.     unsigned char channel3;
  157. };
  158.  
  159. struct cdrom_audioctrl
  160. {
  161.     /* Eingabewerte */
  162.  
  163.     int set;    /* 0 == inquire only */
  164.  
  165.     /* Ein/Rückgabewerte */
  166.  
  167.     struct {
  168.         unsigned char selection;
  169.         unsigned char volume;
  170.     } channel[4];
  171. };
  172.  
  173. struct cdrom_read
  174. {
  175.     long cdread_lba;        /* logical block address */
  176.     char *cdread_bufaddr;   /* buffer pointer */
  177.     long cdread_buflen;     /* byte count */
  178. };
  179.  
  180.  
  181.  
  182. /*
  183.    Konstanten von MetaDOS
  184. */
  185.  
  186.  
  187. /*
  188.    Magic für Metaioctl Funktion
  189. */
  190.  
  191. #define IOCTL_MAGIC  0x4643544cL    /* "FCTL" */
  192.  
  193.  
  194. /* CD-ROM address types */
  195.  
  196. #define CDROM_LBA   0x01
  197. #define CDROM_MSF   0x02
  198.  
  199. /* SUB Q control bits */
  200.  
  201. #define CDROM_AUDIO_EMPHASIS    0x01
  202. #define CDROM_COPY_PERMITTED    0x02
  203. #define CDROM_DATA_TRACK        0x04
  204. #define CDROM_FOUR_CHANNEL      0x08
  205.  
  206. /* The leadout track is always 0xAA, regardless of # of tracks on disc */
  207.  
  208. #define CDROM_LEADOUT   0xAA
  209.  
  210. /* return value from READ SUBCHANNEL DATA */
  211.  
  212. #define CDROM_AUDIO_INVALID     0x00    /* audio status not supported */
  213. #define CDROM_AUDIO_PLAY        0x11    /* audio play operation in progress */
  214. #define CDROM_AUDIO_PAUSED      0x12    /* audio play operation paused */
  215. #define CDROM_AUDIO_COMPLETED   0x13    /* audio play successfully completed */
  216. #define CDROM_AUDIO_ERROR       0x14    /* audio play stopped due to error */
  217. #define CDROM_AUDIO_NO_STATUS   0x15    /* no current audio status to return */
  218.  
  219. /* CD-ROM Fcntl opcodes */
  220.  
  221. /* Get block number of first sector in last session of a multisession
  222.    CD. Argument points to a LONG. Used by iso9660f.dos */
  223. #define CDROMREADOFFSET     (('C'<<8)|0x00)
  224.  
  225. /* Pause audio operation */
  226. #define CDROMPAUSE          (('C'<<8)|0x01)
  227.  
  228. /* Resume audio operation */
  229. #define CDROMRESUME         (('C'<<8)|0x02)
  230.  
  231. /* Play audio. Argument points to cdrom_msf structure */
  232. #define CDROMPLAYMSF        (('C'<<8)|0x03)
  233.  
  234. /* Play audio. Argument points to cdrom_ti structure */
  235. #define CDROMPLAYTRKIND     (('C'<<8)|0x04)
  236.  
  237. /* Read header of table of contents. Argument points to cdrom_tochdr
  238.    structure */
  239. #define CDROMREADTOCHDR     (('C'<<8)|0x05)
  240.  
  241. /* Read a toc entry. Argument points to cdrom_tocentry structure */
  242. #define CDROMREADTOCENTRY   (('C'<<8)|0x06)
  243.  
  244. /* Stops spindle motor */
  245. #define CDROMSTOP           (('C'<<8)|0x07)
  246.  
  247. /* Starts spindle motor */
  248. #define CDROMSTART          (('C'<<8)|0x08)
  249.  
  250. /* Eject medium */
  251. #define CDROMEJECT          (('C'<<8)|0x09)
  252.  
  253. /* Sets audio playback volume. Argument points to cdrom_volctrl
  254.    structure. Only for compatibility to Unix drivers, see also
  255.    CDROMAUDIOCTRL */
  256. #define CDROMVOLCTRL        (('C'<<8)|0x0a)
  257.  
  258. /* Read subchannel information. Argument points to cdrom_subchnl
  259.    structure. */
  260. #define CDROMSUBCHNL        (('C'<<8)|0x0b)
  261.  
  262. /* Read Mode 2 or 1 sectors. Argument points to cdrom_read
  263.    structure. Blocks have either 2336 or 2048 bytes. */
  264. #define CDROMREADMODE2      (('C'<<8)|0x0c)
  265. #define CDROMREADMODE1      (('C'<<8)|0x0d)
  266.  
  267. /* Lock eject mechanism */
  268. #define CDROMPREVENTREMOVAL (('C'<<8)|0x0e)
  269.  
  270. /* Unlock eject mechanism */
  271. #define CDROMALLOWREMOVAL   (('C'<<8)|0x0f)
  272.  
  273. /* Control audio settings. Argument points to cdrom_audioctrl
  274.    structure */
  275. #define CDROMAUDIOCTRL      (('C'<<8)|0x10)
  276.  
  277. /* Read Digital Audio (red book) sectors. Argument points to
  278.    cdrom_read structure. Blocks have 2352 bytes. */
  279. #define CDROMREADDA         (('C'<<8)|0x11)
  280.  
  281. /* Read media catalog number. Argument points to cdrom_mcn
  282.    structure */
  283. #define CDROMGETMCN         (('C'<<8)|0x13)
  284.  
  285. /* Read track international standard recording code. Argument points
  286.    to cdrom_tisrc structure */
  287. #define CDROMGETTISRC       (('C'<<8)|0x14)
  288.  
  289.  
  290.  
  291. /*
  292.     Prototypen für die MetaDOS Funktionen
  293. */
  294.  
  295. long Metainit (META_INFO_1 *buffer);
  296. long Metaopen (int drive, META_DRVINFO *buffer);
  297. long Metaclose (int drive);
  298. long Metaread (int drive, void *buffer, long blockno, int count);
  299. long Metawrite (int drive, void *buffer, long blockno, int count);
  300. long Metaseek (int drive, long blockno);
  301. long Metastatus (int drive, void *buffer);
  302. long Metaioctl (int drive, long magic, int opcode, void *buffer);
  303. long Metasetsongtime (int drive, int repeat, long start, long end);
  304. long Metagettoc (int drive, int flag, CD_TOC_ENTRY *buffer);
  305. long Metadiscinfo (int drive, CD_DISC_INFO *buffer);
  306. long Metastartaudio (int drive, int flag, unsigned char *buffer);
  307. long Metastopaudio (int drive);
  308.  
  309. /*
  310.     Liefert zu einer Drivemap die entsprechende MetaDOS-ID
  311. */
  312.  
  313. int Metagetdriveno (long drivemap);
  314.  
  315.  
  316.