예제 #1
0
int synth_setup()
{
    int i;
    char *nativemusicenv = getenv("SDL_NATIVE_MUSIC");
    char *extmidi=getenv("SDL_NATIVE_MUSIC_EXT");

    if(extmidi)
    {
	
    	FORCE_EXT_DEV = atoi(extmidi);
	printf("EXT midi %s , %d \n",extmidi,FORCE_EXT_DEV);
    }
    
    if (ioctl(seqfd, SNDCTL_SEQ_NRSYNTHS, &nrsynths) == -1) 
    {
	fprintf(stderr, "there is no soundcard\n");
	return 0;
    }
    for (i = 0; i < nrsynths; i++) 
    {
	card_info[i].device = i;
	if (ioctl(seqfd, SNDCTL_SYNTH_INFO, &card_info[i]) == -1) 
	{
	    fprintf(stderr, "cannot get info on soundcard\n");
	    perror(SEQUENCER_DEV);
	    return 0;
	}
	card_info[i].device = i;
	if (card_info[i].synth_type == SYNTH_TYPE_SAMPLE
	    && card_info[i].synth_subtype == SAMPLE_TYPE_GUS)
	{
	    gus_dev = i;
	}
#ifndef GP2X //maks
	else if (card_info[i].synth_type == SYNTH_TYPE_SAMPLE
	    && card_info[i].synth_subtype == SAMPLE_TYPE_AWE32)
	{
	    awe_dev = i;
	}
#endif
	else if (card_info[i].synth_type == SYNTH_TYPE_FM) 
	{
	    sb_dev = i;
	    if (play_fm)
		loadfm();
	    if (wantopl3) 
	    {
		card_info[i].nr_voices = 12;	/* we have 12 with 4-op */
	    }
	}
    }

    if (gus_dev >= 0) {
	if (ioctl(seqfd, SNDCTL_SEQ_RESETSAMPLES, &gus_dev) == -1) 
	{
	    perror("Sample reset");
	    return 0;
	}
    }
    if (ioctl(seqfd, SNDCTL_SEQ_NRMIDIS, &nrmidis) == -1) 
    {
	fprintf(stderr, "can't get info about midi ports\n");
	return 0;
    }
    if (nrmidis > 0) {
	if (FORCE_EXT_DEV >= 0)
	    ext_dev = FORCE_EXT_DEV;
	else
	    ext_dev = nrmidis - 1;
    }

    if( nativemusicenv ) /* select device by SDL_NATIVE_MUSIC */
    {
	if(strcasecmp(nativemusicenv,"GUS") == 0)
	{
    	    if( gus_dev >= 0 )
	    {
    		play_gus = 1;
	        awe_dev = -1;
		sb_dev  = -1;
	        ext_dev = -1;
	        return 1;
            }else
	    {
    		play_gus = 0;
		return 0;
	    }
	}else if(strcasecmp(nativemusicenv,"AWE") == 0)
	{
    	    if( awe_dev >= 0 )
	    {
    		play_awe = 1;
	        gus_dev = -1;
		sb_dev  = -1;
	        ext_dev = -1;
	        return 1;
            }else
	    {
    		play_awe = 0;
		return 0;
	    }
	}else if(strcasecmp(nativemusicenv,"FM") == 0)
	{
    	    if( sb_dev >= 0 && fm_patch_aviable )
	    {
    		play_fm = 1;
		gus_dev = -1;
	        awe_dev = -1;
	        ext_dev = -1;
	        wantopl3 = 0;
	        return 1;
            }else
	    {
    		play_fm = 0;
		return 0;
	    }
	}else if(strcasecmp(nativemusicenv,"OPL3") == 0)
	{
    	    if( sb_dev >= 0 && opl3_patch_aviable )
	    {
    		play_fm = 1;
		gus_dev = -1;
	        awe_dev = -1;
	        ext_dev = -1;
	        wantopl3 = 1;
	        return 1;
            }else
	    {
    		play_fm = 0;
		return 0;
	    }
	}else if(strcasecmp(nativemusicenv,"EXT") == 0)
	{
    	    if( ext_dev >= 0 )
	    {
    		play_ext = 1;
	        gus_dev = -1;
	        awe_dev = -1;
		sb_dev  = -1;
	        return 1;
            }else
	    {
    		play_ext = 0;
		return 0;
	    }
	}
    }
    /* autoselect best device */
    if( gus_dev >= 0 )
    {
        play_gus = 1;
        awe_dev = -1;
        sb_dev  = -1;
        ext_dev = -1;
        return 1;
        }
    if( awe_dev >= 0 )
    {
        play_awe = 1;
	gus_dev = -1;
        sb_dev  = -1;
        ext_dev = -1;
        return 1;
    }
    if( sb_dev >= 0 && fm_patch_aviable )
    {
        play_fm = 1;
	gus_dev = -1;
        awe_dev = -1;
        ext_dev = -1;
        return 2;	/* return 1 if use FM befor Timidity */
    }
    if( ext_dev >= 0 )
    {
        play_ext = 1;
	gus_dev = -1;
        awe_dev = -1;
        sb_dev  = -1;
        return 3;
    }
    return 0;
}
예제 #2
0
파일: config.c 프로젝트: AllenDou/gsh
/* I agree, this is a very rudimental way to load a configuration...
   will improve later if the config gets more complex */
void loadServerConfig(char *filename) {
		FILE *fp;
		char buf[REDIS_CONFIGLINE_MAX+1], *err = NULL;
		int linenum = 0;
		sds line = NULL;

		if (filename[0] == '-' && filename[1] == '\0')
				fp = stdin;
		else {
				if ((fp = fopen(filename,"r")) == NULL) {
						redisLog(REDIS_WARNING, "Fatal error, can't open config file '%s'", filename);
						exit(1);
				}
		}

		while(fgets(buf,REDIS_CONFIGLINE_MAX+1,fp) != NULL) {
				sds *argv;
				int argc, j;

				linenum++;
				line = sdsnew(buf);
				line = sdstrim(line," \t\r\n");

				/* Skip comments and blank lines*/
				if (line[0] == '#' || line[0] == '\0') {
						sdsfree(line);
						continue;
				}

				/* Split into arguments */
				argv = sdssplitargs(line,&argc);
				sdstolower(argv[0]);

				/* Execute config directives */
				if (!strcasecmp(argv[0],"timeout") && argc == 2) {
						server.maxidletime = atoi(argv[1]);
						if (server.maxidletime < 0) {
								err = "Invalid timeout value"; goto loaderr;
						}
				} else if (!strcasecmp(argv[0],"port") && argc == 2) {
						server.port = atoi(argv[1]);
						if (server.port < 0 || server.port > 65535) {
								err = "Invalid port"; goto loaderr;
						}
				} else if (!strcasecmp(argv[0],"bind") && argc == 2) {
						server.bindaddr = zstrdup(argv[1]);
				} else if (!strcasecmp(argv[0],"formula") && argc == 2) {
						void *val = loadfm(argv[1]);
						if(!val) goto loaderr;
						int retval = dictAdd(server.fms, sdsnew(argv[1]), val);
						if(retval != DICT_OK) goto loaderr;
				} else if (!strcasecmp(argv[0],"dir") && argc == 2) {
						if (chdir(argv[1]) == -1) {
								redisLog(REDIS_WARNING,"Can't chdir to '%s': %s",
												argv[1], strerror(errno));
								exit(1);
						}
				} else if (!strcasecmp(argv[0],"loglevel") && argc == 2) {
						if (!strcasecmp(argv[1],"debug")) server.verbosity = REDIS_DEBUG;
						else if (!strcasecmp(argv[1],"verbose")) server.verbosity = REDIS_VERBOSE;
						else if (!strcasecmp(argv[1],"notice")) server.verbosity = REDIS_NOTICE;
						else if (!strcasecmp(argv[1],"warning")) server.verbosity = REDIS_WARNING;
						else {
								err = "Invalid log level. Must be one of debug, notice, warning";
								goto loaderr;
						}
				} else if (!strcasecmp(argv[0],"logfile") && argc == 2) {
						FILE *logfp;

						server.logfile = zstrdup(argv[1]);
						if (!strcasecmp(server.logfile,"stdout")) {
								zfree(server.logfile);
								server.logfile = NULL;
						}
						if (server.logfile) {
								/* Test if we are able to open the file. The server will not
								 * be able to abort just for this problem later... */
								logfp = fopen(server.logfile,"a");
								if (logfp == NULL) {
										err = sdscatprintf(sdsempty(),
														"Can't open the log file: %s", strerror(errno));
										goto loaderr;
								}
								fclose(logfp);
						}
				} else if (!strcasecmp(argv[0],"databases") && argc == 2) {
						server.dbnum = atoi(argv[1]);
						if (server.dbnum < 1) {
								err = "Invalid number of databases"; goto loaderr;
						}
				} else if (!strcasecmp(argv[0],"maxclients") && argc == 2) {
						server.maxclients = atoi(argv[1]);
				} else if (!strcasecmp(argv[0],"daemonize") && argc == 2) {
						if ((server.daemonize = yesnotoi(argv[1])) == -1) {
								err = "argument must be 'yes' or 'no'"; goto loaderr;
						}
				} else if (!strcasecmp(argv[0],"pidfile") && argc == 2) {
						zfree(server.pidfile);
						server.pidfile = zstrdup(argv[1]);
				} else {
						err = "Bad directive or wrong number of arguments"; goto loaderr;
				}
				for (j = 0; j < argc; j++)
						sdsfree(argv[j]);
				zfree(argv);
				sdsfree(line);
		}
		if (fp != stdin) fclose(fp);
		return;

loaderr:
		fprintf(stderr, "\n*** FATAL CONFIG FILE ERROR ***\n");
		fprintf(stderr, "Reading the configuration file, at line %d\n", linenum);
		fprintf(stderr, ">>> '%s'\n", line);
		fprintf(stderr, "%s\n", err);
		exit(1);

}