diff -urN midi_prog-/Makefile midi_prog/Makefile --- midi_prog-/Makefile Thu Apr 2 00:00:00 2015 +++ midi_prog/Makefile Thu Apr 2 01:00:00 2015 @@ -1,6 +1,6 @@ CC = gcc LIB = -lm -lpthread -L../cui -lcui -TARG = prog51 +TARG = prog52 OBJS = main.o vcf.o ch.o delay.o stat.o note.o env.o tone.o filter.o lfo.o modu.o vco.o wave.o out.o rd.o util.o OBJS += cui_tone.o CFLAGS += -Wall -I.. diff -urN midi_prog-/rd.c midi_prog/rd.c --- midi_prog-/rd.c Sat Jan 25 00:00:00 2014 +++ midi_prog/rd.c Thu Apr 2 01:00:00 2015 @@ -1,22 +1,20 @@ #include "rd.h" -static int bk_buf = -1; +#define BK_BUF_N 256 +static int bk_buf[ BK_BUF_N ], bk_buf_n = 0; int rd(void) { - int v; - - if((v = bk_buf) < 0) return getchar(); - bk_buf = -1; - return v; + if(bk_buf_n <= 0) return getchar(); + return bk_buf[ --bk_buf_n ]; } void bk(int v) { - if(bk_buf >= 0) ERR("give up"); - bk_buf = v; + if(bk_buf_n >= 256) ERR("give up"); + bk_buf[ bk_buf_n++ ] = v; } static void @@ -28,12 +26,30 @@ s[i] = '\0'; } +void +rd_str_peek(int n, char *s) +{ + int i; + + rd_str(n, s); + for(i=0; iname; tone++){ if(strcmp(name, tone->name) == 0) return tone; } - fprintf(stderr, "not found '%s'\n", name); - return NULL; /* not found */ + MSG(name); ERR("not found"); } static void @@ -342,14 +342,8 @@ name_inf.n++; name_inf.area_sz += strlen(tone->name) + 1; } - if((name_inf.lst = malloc(sizeof(struct name_lst) * name_inf.n)) == NULL){ - fprintf(stderr, "No mem"); - exit(1); - } - if((name_inf.area = malloc(name_inf.area_sz)) == NULL){ - fprintf(stderr, "No mem"); - exit(1); - } + if((name_inf.lst = malloc(sizeof(struct name_lst) * name_inf.n)) == NULL) ERR("No Mem"); + if((name_inf.area = malloc(name_inf.area_sz)) == NULL) ERR("No Mem"); offset = 0; for(tone=tone_inf, i=0; tone->name; tone++, i++){ name_inf.lst[i].name = tone->name; @@ -374,14 +368,8 @@ } compo_inf.arr_n++; } - if((compo_inf.lst = malloc(sizeof(struct compo_lst) * compo_inf.n)) == NULL){ - fprintf(stderr, "No mem"); - exit(1); - } - if((compo_inf.arr = malloc(sizeof(struct tone_compo_rec) * compo_inf.arr_n)) == NULL){ - fprintf(stderr, "No mem"); - exit(1); - } + if((compo_inf.lst = malloc(sizeof(struct compo_lst) * compo_inf.n)) == NULL) ERR("No Mem"); + if((compo_inf.arr = malloc(sizeof(struct tone_compo_rec) * compo_inf.arr_n)) == NULL) ERR("No Mem"); idx = 0; for(i=0; tones_lst[i].prog >= 0; i++){ compo_inf.lst[i].tone_compo = tone_compo = tones_lst[i].tone_compo; @@ -393,6 +381,16 @@ } } +static void +try_load(void) +{ + char *load_hd = "load\n"; + + if(!rd_str_chk_peek(load_hd)) return; + rd_str_chk(strlen(load_hd), load_hd); + tone_load_fp(stdin); +} + void tone_init(void) { @@ -409,6 +407,7 @@ name_inf_setup(); compo_inf_setup(); + try_load(); } #define CH_PROG(ch) ( (ch) == 9 ? 0 : ch_inf[ch].prog ) @@ -473,12 +472,8 @@ static void save_n_data(int n, int usz, void *p, FILE *fp) { - if(fwrite(&n, sizeof(n), 1, fp) != 1){ - fprintf(stderr, "error write\n"); - } - if(fwrite(p, usz, n, fp) != n){ - fprintf(stderr, "error write\n"); - } + if(fwrite(&n, sizeof(n), 1, fp) != 1) ERR("write"); + if(fwrite(p, usz, n, fp) != n) ERR("write"); } void @@ -488,8 +483,7 @@ int sz; if((fp = fopen(path, "w")) == NULL){ - fprintf(stderr, "Can't open '%s'\n", path); - return; + MSG(path); ERR("open"); } sz = sizeof(tone_inf[0]); @@ -518,20 +512,10 @@ int n; void *p = NULL; - if(fread(np, sizeof(n), 1, fp) != 1){ - fprintf(stderr, "error read\n"); - return p; - } + if(fread(np, sizeof(*np), 1, fp) != 1) ERR("read"); n = *np; - if((p = malloc(usz * n)) == NULL){ - fprintf(stderr, "No mem\n"); - return p; - } - if(fread(p, usz, n, fp) != n){ - fprintf(stderr, "error read\n"); - free(p); - return NULL; - } + if((p = malloc(usz * n)) == NULL) ERR("No Mem"); + if(fread(p, usz, n, fp) != n) ERR("read"); return p; } @@ -543,8 +527,7 @@ for(i=0; itone = name_search(tone_compo->name); } } + + for(i=0; i