📄 timidity.c
字号:
sf_file = w[1]; order = cutoff = reso = amp = -1; isremove = 0; for(j = 2; j < words; j++) { if(strcmp(w[j], "remove") == 0) { isremove = 1; break; } if(!(cp = strchr(w[j], '='))) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: bad patch option %s", name, line, w[j]); CHECKERRLIMIT; break; } *cp++=0; k = atoi(cp); if(!strcmp(w[j], "order")) { if(k < 0 || (*cp < '0' || *cp > '9')) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: order must be a digit", name, line); CHECKERRLIMIT; break; } order = k; } else if(!strcmp(w[j], "cutoff")) { if(k < 0 || (*cp < '0' || *cp > '9')) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: cutoff must be a digit", name, line); CHECKERRLIMIT; break; } cutoff = k; } else if(!strcmp(w[j], "reso")) { if(k < 0 || (*cp < '0' || *cp > '9')) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: reso must be a digit", name, line); CHECKERRLIMIT; break; } reso = k; } else if(!strcmp(w[j], "amp")) { amp = k; } } if(isremove) remove_soundfont(sf_file); else add_soundfont(sf_file, order, cutoff, reso, amp); } else if(!strcmp(w[0], "font")) { int bank, preset, keynote; if(words < 2) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: no font command", name, line); CHECKERRLIMIT; continue; } if(!strcmp(w[1], "exclude")) { if(words < 3) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No bank/preset/key is given", name, line); CHECKERRLIMIT; continue; } bank = atoi(w[2]); if(words >= 4) preset = atoi(w[3]) - progbase; else preset = -1; if(words >= 5) keynote = atoi(w[4]); else keynote = -1; if(exclude_soundfont(bank, preset, keynote)) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No soundfont is given", name, line); CHECKERRLIMIT; } } else if(!strcmp(w[1], "order")) { int order; if(words < 4) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No order/bank is given", name, line); CHECKERRLIMIT; continue; } order = atoi(w[2]); bank = atoi(w[3]); if(words >= 5) preset = atoi(w[4]) - progbase; else preset = -1; if(words >= 6) keynote = atoi(w[5]); else keynote = -1; if(order_soundfont(bank, preset, keynote, order)) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No soundfont is given", name, line); CHECKERRLIMIT; } } } else if(!strcmp(w[0], "progbase")) { if(words < 2 || *w[1] < '0' || *w[1] > '9') { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: syntax error", name, line); CHECKERRLIMIT; continue; } progbase = atoi(w[1]); } else if(!strcmp(w[0], "map")) /* map <name> set1 elem1 set2 elem2 */ { int arg[5], isdrum; if(words != 6) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: syntax error", name, line); CHECKERRLIMIT; continue; } if((arg[0] = mapname2id(w[1], &isdrum)) == -1) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: Invalid map name: %s", name, line, w[1]); CHECKERRLIMIT; continue; } for(i = 2; i < 6; i++) arg[i - 1] = atoi(w[i]); if(isdrum) { arg[1] -= progbase; arg[3] -= progbase; } else { arg[2] -= progbase; arg[4] -= progbase; } for(i = 1; i < 5; i++) if(arg[i] < 0 || arg[i] > 127) break; if(i != 5) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: Invalid parameter", name, line); CHECKERRLIMIT; continue; } set_instrument_map(arg[0], arg[1], arg[2], arg[3], arg[4]); } /* * Standard configurations */ else if(!strcmp(w[0], "dir")) { if(words < 2) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No directory given", name, line); CHECKERRLIMIT; continue; } for(i = 1; i < words; i++) add_to_pathlist(w[i]); } else if(!strcmp(w[0], "source")) { if(words < 2) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No file name given", name, line); CHECKERRLIMIT; continue; } for(i = 1; i < words; i++) { int status; rcf_count++; status = read_config_file(w[i], 0); rcf_count--; if(status == 2) { reuse_mblock(&varbuf); close_file(tf); return 2; } else if(status != 0) { CHECKERRLIMIT; continue; } } } else if(!strcmp(w[0], "default")) { if(words != 2) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: Must specify exactly one patch name", name, line); CHECKERRLIMIT; continue; } strncpy(def_instr_name, w[1], 255); def_instr_name[255] = '\0'; default_instrument_name = def_instr_name; } /* drumset [mapid] num */ else if(!strcmp(w[0], "drumset")) { int newmapid, isdrum, newbankno; if(words < 2) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No drum set number given", name, line); CHECKERRLIMIT; continue; } if (words != 2 && !isdigit(*w[1])) { if ((newmapid = mapname2id(w[1], &isdrum)) == -1 || !isdrum) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: Invalid drum set map name: %s", name, line, w[1]); CHECKERRLIMIT; continue; } words--; memmove(&w[1], &w[2], sizeof w[0] * words); } else newmapid = INST_NO_MAP; i = atoi(w[1]) - progbase; if(i < 0 || i > 127) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: Drum set must be between %d and %d", name, line, progbase, progbase + 127); CHECKERRLIMIT; continue; } newbankno = i; i = alloc_instrument_map_bank(1, newmapid, i); if (i == -1) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No free drum set available to map", name, line); CHECKERRLIMIT; continue; } if(words == 2) { bank = drumset[i]; bankno = i; mapid = newmapid; origbankno = newbankno; dr = 1; } else { if(words < 4 || *w[2] < '0' || *w[2] > '9') { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: syntax error", name, line); CHECKERRLIMIT; continue; } if (set_patchconf(name, line, drumset[i], &w[2], 1, newmapid, newbankno, i)) { CHECKERRLIMIT; continue; } } } /* bank [mapid] num */ else if(!strcmp(w[0], "bank")) { int newmapid, isdrum, newbankno; if(words < 2) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No bank number given", name, line); CHECKERRLIMIT; continue; } if (words != 2 && !isdigit(*w[1])) { if ((newmapid = mapname2id(w[1], &isdrum)) == -1 || isdrum) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: Invalid bank map name: %s", name, line, w[1]); CHECKERRLIMIT; continue; } words--; memmove(&w[1], &w[2], sizeof w[0] * words); } else newmapid = INST_NO_MAP; i = atoi(w[1]); if(i < 0 || i > 127) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: Tone bank must be between 0 and 127", name, line); CHECKERRLIMIT; continue; } newbankno = i; i = alloc_instrument_map_bank(0, newmapid, i); if (i == -1) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: No free tone bank available to map", name, line); CHECKERRLIMIT; continue; } if(words == 2) { bank = tonebank[i]; bankno = i; mapid = newmapid; origbankno = newbankno; dr = 0; } else { if(words < 4 || *w[2] < '0' || *w[2] > '9') { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: syntax error", name, line); CHECKERRLIMIT; continue; } if (set_patchconf(name, line, tonebank[i], &w[2], 0, newmapid, newbankno, i)) { CHECKERRLIMIT; continue; } } } else { if(words < 2 || *w[0] < '0' || *w[0] > '9') { if(extension_flag) continue; ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "%s: line %d: syntax error", name, line); CHECKERRLIMIT; continue; } if (set_patchconf(name, line, bank, w, dr, mapid, origbankno, bankno)) { CHECKERRLIMIT; continue; } } } if(errno) { ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "Can't read %s: %s", name, strerror(errno)); errcnt++; } reuse_mblock(&varbuf); close_file(tf); return errcnt != 0;}#ifdef SUPPORT_SOCKET#if defined(__W32__) && !defined(MAIL_NAME)#define MAIL_NAME "anonymous"#endif /* __W32__ */#ifdef MAIL_NAME#define get_username() MAIL_NAME#else /* MAIL_NAME */#include <pwd.h>static char *get_username(void){ char *p; struct passwd *pass; /* USER * LOGIN * LOGNAME * getpwnam() */ if((p = getenv("USER")) != NULL) return p; if((p = getenv("LOGIN")) != NULL) return p; if((p = getenv("LOGNAME")) != NULL) return p; pass = getpwuid(getuid()); if(pass == NULL) return "nobody"; return pass->pw_name;}#endif /* MAIL_NAME */static void init_mail_addr(void){ char addr[BUFSIZ]; sprintf(addr, "%s%s", get_username(), MAIL_DOMAIN); user_mailaddr = safe_strdup(addr);}#endif /* SUPPORT_SOCKET */static int read_user_config_file(void){ char *home; char path[BUFSIZ]; int opencheck;#ifdef __W32__/* HOME or home */ home = getenv("HOME"); if(home == NULL) home = getenv("home"); if(home == NULL) { ctl->cmsg(CMSG_INFO, VERB_NOISY, "Warning: HOME environment is not defined."); return 0; }/* .timidity.cfg or timidity.cfg */ sprintf(path, "%s" PATH_STRING "timidity.cfg", home); if((opencheck = open(path, 0)) < 0) { sprintf(pat
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -