All pastes #1451191 Raw Edit

psymp3-ng.c

public c v1 · immutable
#1451191 ·published 2009-06-07 21:42 UTC
rendered paste body
/* psymp3-ng: Next generation of PsyMP3, written in C. */#include <stdio.h>#include <SDL.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#ifdef __WIN32__#include <windows.h>#endif#include <fmod.h>#ifdef _USE_GTK#include <gtk/gtk.h>#endif#define WIDTH 640#define HEIGHT 400#define BPP 4#define DEPTH 32char *mp3file, *mp3name, *mp3artist, *mp3author;void *mp3albumart;FSOUND_STREAM *stream;SDL_Surface *screen;SDL_Event event;// SDL functionsint Init_SDL(){	if (SDL_Init(SDL_INIT_VIDEO) < 0) return -1;	screen = SDL_SetVideoMode(WIDTH, HEIGHT, DEPTH, 		SDL_HWSURFACE);	if(!screen) return -1;	return(0);}// FMOD functions// GUI function#if defined(__WIN32__) && !defined(_USE_GTK)void MsgBox(char *message){	int pid = getpid();	char tmp[512];	snprintf(tmp, 512, "PsyMP3-ng: running as PID %d.", pid);	MessageBox(NULL, message, tmp, NULL);}#endif#ifdef _USE_GTKchar *file_getname(){	GtkWidget *dialog;	char *retfile; 	dialog = gtk_file_chooser_dialog_new( "PsyMP3 - Select an mp3" 		" or Ogg Vorbis file...", 		NULL, 	  GTK_FILE_CHOOSER_ACTION_OPEN,		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, 		GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL );	g_signal_connect (GTK_OBJECT (dialog), "destroy", 		GTK_SIGNAL_FUNC (&gtk_widget_destroy), NULL);	GtkFileFilter *filter = gtk_file_filter_new();	gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.mp3");	gtk_file_filter_set_name (filter, "MPEG Layer-3 Audio (*.mp3)");	gtk_file_chooser_add_filter (dialog, filter);	g_object_unref (filter);	filter = gtk_file_filter_new();	gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.wma");	gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.asf");	gtk_file_filter_set_name (filter, "Windows Media Audio (*.wma; *.asf)");	gtk_file_chooser_add_filter (dialog, filter);	g_object_unref (filter);	filter = gtk_file_filter_new();	gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.ogg");	gtk_file_filter_set_name (filter, "Ogg Vorbis/Ogg FLAC (*.ogg)");	gtk_file_chooser_add_filter (dialog, filter);	g_object_unref (filter);	filter = gtk_file_filter_new();	gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.flac");	gtk_file_filter_set_name (filter, "Free Lossless Audio Codec/FLAC (*.flac)");	gtk_file_chooser_add_filter (dialog, filter);	g_object_unref (filter);	filter = gtk_file_filter_new();	gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.*");	gtk_file_filter_set_name (filter, "All Files (*.*)");	gtk_file_chooser_add_filter (dialog, filter);	g_object_unref (filter);	if( gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {		char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));		retfile = malloc(4096);		strncpy(retfile, filename, 4095); 		g_free(filename);  	}//	gtk_widget_destroy( GTK_WIDGET(dialog) );	return(retfile);}gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer shit){	g_print("delete event occurred\n");	return TRUE;}void destroy(GtkWidget *widget, gpointer shit){	}void hello(GtkWidget *widget, gpointer shit){	g_print("MsgBox(): Destroying window.\n");}void MsgBox(char *message){	GtkWidget *gwindow, *gbutton, *gbox, *label;	char tmp[1024];	snprintf(tmp,1024,"PsyMP3 - running as PID %d", getpid());	gwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);	label = gtk_label_new(message);	gtk_window_set_title (GTK_WINDOW (gwindow), tmp);	g_signal_connect (GTK_OBJECT (gwindow), "delete_event", 		GTK_SIGNAL_FUNC (&delete_event), NULL);	g_signal_connect (GTK_OBJECT (gwindow), "destroy", 		GTK_SIGNAL_FUNC (&gtk_widget_destroy), NULL);    	gbox = gtk_vbox_new (FALSE, 0);	gtk_container_add (GTK_CONTAINER (gwindow), gbox);	gtk_container_set_border_width (GTK_CONTAINER (gwindow), 15);	gbutton = gtk_button_new_with_mnemonic ("_Ok");    	g_signal_connect (GTK_OBJECT (gbutton), "clicked", 		GTK_SIGNAL_FUNC (&hello), NULL);    	g_signal_connect_swapped (GTK_OBJECT (gbutton), "clicked", 		GTK_SIGNAL_FUNC (&gtk_widget_destroy), 		GTK_OBJECT (gwindow));	gtk_box_pack_start (GTK_BOX(gbox), label, FALSE, FALSE, 5);	gtk_box_pack_start (GTK_BOX(gbox), gbutton, FALSE, FALSE, 5);	gtk_widget_show(label);	gtk_widget_show(gbutton);	gtk_widget_show(gbox);	gtk_widget_show(gwindow);	gtk_main ();}#elsevoid MsgBox(char *message){	printf("PsyMP3-ng[%d]: %s\n",getpid(),message);}#endif// Player functionsvoid ExitPlayer(){	SDL_Quit();	exit(0);}// End of functions.int main(int argc, char *argv[]){	struct timespec ts;	ts.tv_sec = 0;	ts.tv_nsec = 33000; 	int ret;#ifdef _USE_GTK	gtk_init(&argc, &argv);#endif	printf("PsyMP3-ng pre-alpha\n");#ifdef __PREFER_OSS__	FSOUND_SetOutput(FSOUND_OUTPUT_OSS);#endif			ret = Init_SDL();	if (ret == -1) {		printf("SDL init failed.");	}	// FMOD Init goes here.		// Testcase; file_getname() returns malloc()'d string anyways.	free(file_getname());	do {		while(SDL_PollEvent(&event)) {			switch (event.type) {				case SDL_QUIT:				case SDL_KEYDOWN:					ExitPlayer();			}		}	} while (1);	ExitPlayer();}