home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / EGON2_3.LZH / EGON_2_3 / LIB / TEST.C < prev    next >
C/C++ Source or Header  |  1995-01-05  |  9KB  |  347 lines

  1. #include <stdio.h>
  2. #include <portab.h>
  3. #include <tos.h>
  4. #include "metados.h"
  5.  
  6. /*
  7.   Variablen und Strukturen
  8. */
  9.  
  10. struct cdrom_msf       msf;
  11. struct cdrom_ti        ti;
  12. struct cdrom_tochdr    tochdr;
  13. struct cdrom_tocentry  tocentry;
  14. struct cdrom_subchnl   subchnl;
  15. struct cdrom_mcn       mcn;
  16. struct cdrom_tisrc     tisrc;
  17. struct cdrom_volctrl   volctrl;
  18. struct cdrom_audioctrl audioctrl;
  19. struct cdrom_read      cd_read;
  20.  
  21. META_INFO_1 info;
  22. META_DRVINFO buf;
  23. CD_TOC_ENTRY toc[100];
  24. CD_TOC_ENTRY toc1[100];
  25. CD_DISC_INFO discinf;
  26.  
  27. unsigned char play[2];
  28. long     start,stop,offset,dummy;
  29. long     test[4];
  30. int      drive,i,song;
  31.  
  32. union
  33. {
  34.     unsigned char c[4];
  35.     long          l;
  36. } foo;
  37.  
  38. /* 
  39.    Prototypen
  40. */
  41.  
  42. void wait_4_key(void);
  43.  
  44. void wait_4_key(void)
  45. {
  46.     printf("*** Bitte RETURN drücken ***");
  47.     Bconin(2);
  48.     printf("\033M");
  49. }
  50.  
  51. int main(void)
  52. {
  53.     
  54.     /* zuerst einige allgemeine Daten über das installierte MetaDOS */
  55.  
  56.     Metainit (&info);
  57.     printf("\033EMetados Version:  %s\n", info.mi_version_string);
  58.     printf("Versionsnummer:   %x\n", info.mi_info->mi_version);
  59.     printf("MetaDOS Magic:    %lx\n", info.mi_info->mi_magic);
  60.     drive = Metagetdriveno(info.mi_drivemap);
  61.     printf("Metados Laufwerk: %c\n", drive);
  62.     Metaopen (drive, &buf);
  63.     printf("BOS Treiber:      %s\n", buf.mdr_name);
  64.     printf("DOS-ID:           A B C D E F G H I J K L M N O P Q R S T U V W X\n");
  65.     printf("MetaDOS-ID:       ");
  66.     for (i=0; i<24; i++)
  67.     {
  68.         if (info.mi_info->mi_log2phys[i]!=0)
  69.             printf("%c ",info.mi_info->mi_log2phys[i]);
  70.         else
  71.             printf("  ");
  72.     }
  73.     printf("\n");
  74.  
  75.     wait_4_key();
  76.  
  77.     /* Trackoffset einer Multi Session CD */  
  78.  
  79.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMREADOFFSET,&offset) == 0)
  80.         printf("CDROMREADOFFSET: %lx\n",offset);
  81.     else
  82.         printf("*** Fehler bei CDROMREADOFFSET\n");
  83.  
  84.     wait_4_key();
  85.  
  86.     /* CD Rom anhalten */
  87.  
  88.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMSTOP,&dummy) == 0)
  89.         printf("CD angehalten\n");
  90.     else
  91.         printf("*** Fehler bei CDROMSTOP\n");
  92.         
  93.     wait_4_key();
  94.  
  95.     /* CD Rom starten */
  96.  
  97.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMSTART,&dummy) == 0)
  98.         printf("CD gestartet\n");
  99.     else
  100.         printf("*** Fehler bei CDROMSTAR\n");
  101.         
  102.     wait_4_key();
  103.  
  104.     /* CD auswerfen */
  105.  
  106.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMEJECT,&dummy) == 0)
  107.         printf("CD ausgeworfen\n");
  108.     else
  109.         printf("*** Fehler bei CDROMEJECT\n");
  110.         
  111.     wait_4_key();
  112.  
  113.     /* CD Rom verriegeln */
  114.  
  115.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMPREVENTREMOVAL,&dummy) == 0)
  116.         printf("CD verriegelt\n");
  117.     else
  118.         printf("*** Fehler bei CDROMPREVENTREMOVAL\n");
  119.         
  120.     wait_4_key();
  121.  
  122.     /* CD Rom entriegeln */
  123.  
  124.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMALLOWREMOVAL,&dummy) == 0)
  125.         printf("CD entriegelt\n");
  126.     else
  127.         printf("*** Fehler bei CDROMALLOWREMOVAL\n");
  128.         
  129.     wait_4_key();
  130.     
  131.     /* Musikstück für 15 Sekunden anspielen */
  132.  
  133.     msf.cdmsf_min0=0;
  134.     msf.cdmsf_sec0=5;
  135.     msf.cdmsf_frame0=0;        /* von 00:05:00 */
  136.     msf.cdmsf_min1=0;
  137.     msf.cdmsf_sec1=20;
  138.     msf.cdmsf_frame1=74;    /* bis 00:20:74 */
  139.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMPLAYMSF,&msf) == 0)
  140.         printf("Spiele CD von %d:%d:%d bis %d:%d:%d\n",
  141.             msf.cdmsf_min0,msf.cdmsf_sec0,msf.cdmsf_frame0,
  142.             msf.cdmsf_min1,msf.cdmsf_sec1,msf.cdmsf_frame1);
  143.     else
  144.         printf("*** Fehler bei CDROMPLAYMSF\n");
  145.         
  146.     wait_4_key();    
  147.  
  148.     /* Track #2 spielen */
  149.     
  150.     ti.cdti_trk0=2;
  151.     ti.cdti_ind0=1;        /* von Track 02, Index 01 */
  152.     ti.cdti_trk1=2;
  153.     ti.cdti_ind1=99;    /* bis Track 02, Index 99 */
  154.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMPLAYTRKIND,&ti) == 0)
  155.         printf("Spiele CD von %d, %d bis %d, %d\n",
  156.             ti.cdti_trk0,ti.cdti_ind0,
  157.             ti.cdti_trk1,ti.cdti_ind1);
  158.     else
  159.         printf("*** Fehler bei CDROMPLAYTRKIND\n");
  160.         
  161.     wait_4_key();    
  162.  
  163.     /* Lese TOC-Header */
  164.     
  165.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMREADTOCHDR,&tochdr) == 0)
  166.         printf("Starttrack: %d   Endtrack: %d\n",
  167.             tochdr.cdth_trk0,tochdr.cdth_trk1);
  168.     else
  169.         printf("*** Fehler bei CDROMREADTOCHDR\n");
  170.     
  171.     wait_4_key();
  172.  
  173.     /* Lese TOC-Entry von Track 7 */
  174.     
  175.     tocentry.cdte_track=7;
  176.     tocentry.cdte_format=CDROM_LBA;
  177.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMREADTOCENTRY,&tocentry) == 0)
  178.         printf("Adr: %hx   Ctrl: %hx   Anfang: %lx\n",
  179.             tocentry.cdte_adr,tocentry.cdte_ctrl,
  180.             tocentry.cdte_addr.lba);
  181.     else
  182.         printf("*** Fehler bei CDROMREADTOCENTRY\n");
  183.     
  184.     wait_4_key();
  185.  
  186.     /* Lese CD Rom Subchannel */
  187.     
  188.     subchnl.cdsc_format=CDROM_LBA;
  189.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMSUBCHNL,&subchnl) == 0)
  190.     {
  191.         printf("Audiostatus: %hx   Adr: %hx   Ctrl: %hx   ",
  192.             subchnl.cdsc_audiostatus,subchnl.cdsc_adr,subchnl.cdsc_ctrl);
  193.         printf("Track: %d   Index: %d   Abs.Adr: %lx   Rel.Adr: %lx\n",
  194.             subchnl.cdsc_trk,subchnl.cdsc_ind,
  195.             subchnl.cdsc_absaddr.lba,
  196.             subchnl.cdsc_reladdr.lba);
  197.     }
  198.     else
  199.         printf("*** Fehler bei CDROMSUBCHNL\n");
  200.     
  201.     wait_4_key();
  202.  
  203.     /* Lese Media Katalog Nummer */
  204.  
  205.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMGETMCN,&mcn) == 0)
  206.         printf("Audiostatus: %hx   Media Katalog Nummer: %s\n",
  207.             mcn.mcn_audiostatus,mcn.mcn_mcn);
  208.     else
  209.         printf("*** Fehler bei CDROMGETMCN\n");
  210.     
  211.     wait_4_key();
  212.  
  213.     /* Lese International Standard Recording Code von Track 7 */
  214.  
  215.     tisrc.tisrc_track=7;
  216.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMGETTISRC,&tisrc) == 0)
  217.         printf("Audiostatus: %hx   ISRC: %s\n",
  218.             tisrc.tisrc_audiostatus,tisrc.tisrc_tisrc);
  219.     else
  220.         printf("*** Fehler bei CDROMGETTISRC\n");
  221.     
  222.     wait_4_key();
  223.  
  224.     /* Setze Lautstärkewerte auf 150 */
  225.  
  226.     volctrl.channel0=150;
  227.     volctrl.channel1=150;
  228.     volctrl.channel2=150;
  229.     volctrl.channel3=150;
  230.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMVOLCTRL,&volctrl) == 0)
  231.         printf("CDROMVOLCTRL OK\n");
  232.     else
  233.         printf("*** Fehler bei CDROMVOLCTRL\n");
  234.     
  235.     wait_4_key();
  236.  
  237.     /* Lese Lautstärkewerte aus */
  238.     
  239.     audioctrl.set=0;
  240.     if (Metaioctl(drive,IOCTL_MAGIC,CDROMAUDIOCTRL,&audioctrl) == 0)
  241.     {
  242.         printf("Port 0 Control: %hd\n",audioctrl.channel[0].selection);
  243.         printf("Port 0 Volume:  %hd\n",audioctrl.channel[0].volume);
  244.         printf("Port 1 Control: %hd\n",audioctrl.channel[1].selection);
  245.         printf("Port 1 Volume:  %hd\n",audioctrl.channel[1].volume);
  246.         printf("Port 2 Control: %hd\n",audioctrl.channel[2].selection);
  247.         printf("Port 2 Volume:  %hd\n",audioctrl.channel[2].volume);
  248.         printf("Port 3 Control: %hd\n",audioctrl.channel[3].selection);
  249.         printf("Port 3 Volume:  %hd\n",audioctrl.channel[3].volume);
  250.     }
  251.     else
  252.         printf("*** Fehler bei CDROMAUDIOCTRL\n");
  253.     
  254.     wait_4_key();
  255.  
  256. /*
  257.    Das waren die IOCTL-Funktionen, jetzt kommt MetaDOS
  258. */
  259.  
  260.     /* zuerst lesen wir die komplette TOC im MetaDOS-Format */
  261.      
  262.     while (Metagettoc (drive, 0, toc) != 0l);
  263.     while (Metagettoc (drive, 0, toc1) != 0l);
  264.  
  265.     /* ... und geben sie auf dem Bildschirm aus */
  266.     
  267.     i = 0;
  268.     while (toc[i].trackno != 0xa2)
  269.     {
  270.         printf("Track %2hd: %02hx:%02hx:%02hx  (%lx)\n", 
  271.             toc[i].trackno, toc[i].minute, toc[i].second, 
  272.             toc[i].frame, toc1[i]);
  273.         i++;
  274.     }
  275.  
  276.     wait_4_key();
  277.     
  278.     /* Nun eine Beschreibung der eingelegten CD im MetaDOS-Format */
  279.     
  280.     if (Metadiscinfo(drive, &discinf) == 0)
  281.     {
  282.         printf("Art der CD:  %02x\n", discinf.disctype);
  283.         printf("First Track: %02d\n", discinf.firsttrack);
  284.         printf("Last Track:  %02d\n", discinf.lasttrack);
  285.         printf("Akt. Track:  %02d\n", discinf.curtrack);
  286.         printf("Rel. Adress: %02x:%02x:%02x\n",
  287.             discinf.relposm, discinf.relposs, discinf.relposf);
  288.         printf("Abs. Adress: %02x:%02x:%02x\n",
  289.             discinf.absposm, discinf.absposs, discinf.absposf);
  290.         printf("End of CD:   %02x:%02x:%02x\n",
  291.             discinf.endposm, discinf.endposs, discinf.endposf);
  292.         printf("Index No.:   %02d\n", discinf.index);
  293.     }
  294.     else
  295.         printf("*** Fehler bei Metadiscinfo\n");
  296.         
  297.     /* Jetzt starten wir einen Track mittels Metasetsongtime */
  298.     
  299.     printf("Welches Lied ?");
  300.     scanf("%d",&song);
  301.     foo.c[0]=0;
  302.     foo.c[1]=toc[song-1].minute; 
  303.     foo.c[2]=toc[song-1].second; 
  304.     foo.c[3]=toc[song-1].frame;
  305.     start=foo.l; 
  306.     foo.c[1]=toc[song].minute; 
  307.     foo.c[2]=toc[song].second; 
  308.     foo.c[3]=toc[song].frame;
  309.     stop=foo.l; 
  310.     if (Metasetsongtime (drive, 0, start, stop) == 0)
  311.         printf("Titel %d läuft (Metasetsongtime)\n", song);
  312.     else
  313.         printf("*** Fehler bei Metasetsongtime\n");
  314.     
  315.     wait_4_key();
  316.     
  317.     /* Audioplay wird abgebrochen */
  318.     
  319.     if (Metastopaudio(drive) !=0)
  320.         printf("*** Fehler bei Metastopaudio\n");
  321.  
  322.     /*    ... und jetzt einen Track mit Metastartaudio abspielen */
  323.     
  324.     printf("Welches Lied ?");
  325.     scanf("%d",&song);
  326.     play[0] = 1;
  327.     play[1] = song;
  328.     if (Metastartaudio (drive, 0, play) == 0)
  329.         printf("Titel %d läuft (Metastartaudio)\n", song);
  330.     else
  331.         printf("*** Fehler bei Metastartaudio\n");
  332.         
  333.     wait_4_key();
  334.  
  335.     /* Audioplay wird abgebrochen */
  336.     
  337.     if (Metastopaudio(drive)!=0)
  338.         printf("*** Fehler bei Metastopaudio\n");
  339.  
  340.     /* T H E   E N D ! */
  341.     
  342.     printf("Ende der Vorführung !\n");
  343.     
  344.     wait_4_key();
  345.     
  346.     return (0);
  347. }