CD Player 0.1

Publicado por Lord Arthas Menethil 29/08/2006

[ Hits: 5.259 ]

Download cdplayer.c




Simples reprodutor de CD feito em C, com NCurses. Ainda tem pouca coisa, só toca o CD, pausa, essas coisas, mas ainda sem controle de volume e tals...

  



Esconder código-fonte

/* Declaração dos includes */
#include <curses.h>
#include <err.h>
#include <fcntl.h>
#include <getopt.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <linux/cdrom.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>

/* Pré-Declaração das funções que serão utilizadas */
void usar(void);
void about(void);
int opt(int ac, char *av[]);
int ligar(void);

/* Variáveis Globais */
const char* const sopt = "ha:p";
const struct option lopt[] = 
{
   { "help", 0, NULL, 'h' },
   { "about", 0, NULL, 'a' },
   { "play", 0, NULL, 'p' },
   { NULL, 0, NULL, 0 }
};
struct cdrom_tochdr header;
struct cdrom_ti inicio;

int main(int argc, char *argv[])
{   
   opt(argc, argv);
   return(0);
}

void usar(void)
{
   fprintf(stderr, "-h or --help = Mostra isso tudo\n");
   fprintf(stderr, "-p or --play = Toca o CD\n");
   fprintf(stderr, "-a or --about = Mostra o about desse prog\n");
}

void about(void)
{
   fprintf(stderr, "DeadlyCorpse CD Player 0.1, by Morte137\n");
   fprintf(stderr, "Codado em C com NCurses\n");
   fprintf(stderr, "Agradecimentos: os de sempre\n");
   fprintf(stderr, "Ajuda grande: Advanced Programming in Linux, GNU LibC Manual\n");
   fprintf(stderr, "Inté\n");
}

int opt(int ac, char *av[])
{
   int nopt;
   bool device;
   nopt = getopt_long(ac, av, sopt, lopt, NULL);
   
   switch(nopt)
   {
      case 'h':
         usar();
      break;
      case 'a':
         about();
      break;
      case 'p':
         ligar();
      break;
      case '?':
         usar();
      break;
      default:
         usar();
      break;
   }
   return(0);
}

int ligar(void)
{
   int cdrom = open("/dev/cdrom", O_RDONLY);
   
   initscr();
   start_color();
   init_pair(1, COLOR_RED, COLOR_BLACK);
   bkgd(COLOR_PAIR(1));
   move(2, 1);
   printw("DeadlyCorpse CD PLayer 0.1");
   move(3, 1);
   printw("Digite q para sair, p para pausar, r para despausar, s para parar totalmente");
   move(5, 1);
   
   while(1)
   {
      char str[50];
      getstr(str);
      
      if(strcmp("q", str) == 0)
      {
         ioctl(cdrom, CDROMSTOP, 0);
         close(cdrom);
         endwin();
         exit(0);
      }
      
      if(strcmp("p", str) == 0)
      {
         ioctl(cdrom, CDROMPAUSE, 0);
      }
      
      if(strcmp("r", str) == 0)
      {
         ioctl(cdrom, CDROMRESUME, 0);
      }
      
      if(strcmp("s", str) == 0)
      {
         ioctl(cdrom, CDROMSTOP, 0);
      }
      
      else
      {
         ioctl(cdrom, CDROMREADTOCHDR, (void *) &header);
         inicio.cdti_trk0 = header.cdth_trk0;
         inicio.cdti_ind0 = 0;
         inicio.cdti_trk1 = header.cdth_trk1;
         inicio.cdti_ind1 = 255;
         ioctl(cdrom, CDROMPLAYTRKIND, (void *) &inicio);
      }
      refresh();
   }
   return(0);
}

Scripts recomendados

Funções com número variável de argumentos

Entendendo a função fork()

Pilha com Ponteiros

Lista Simplesmente Encadeada

Driver tgz


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário