#include #include #include #include #include #include #include #include #include #include #include #pragma check_stack(off) #pragma intrinsic(_disable,_enable) #pragma function(inp,outp) #define _GB 2 #define _GF 3 void interrupt far new_0a(void); void (interrupt far *old_0a)(void); union REGS inregs,outregs; struct SREGS segregs; int moux,mouy,right,left,old_l,old_r,old_x,old_y; FILE *fds,*fdo; char far wind[14000]; long vsync_counter; double myu[8],chaos[8]; int volume[8],filter[8][12],midich[8],shift[8],range[2][8],tim[2][8]; int down[8],program[8],panpot[8],para1[8],para2[8],ch_trig; int section,edit_ch,note[8],velocity[8],phase[8],counter[8],sum[8]; int data_buffer[30][8][9],fifo_pointer,read_pointer; unsigned char ref_table[8][3200],midi_fifo[4][10000]; mouse(flag) int flag; { if(flag==0){inregs.x.ax=2;} else if(flag==1){inregs.x.ax=1;} int86(51,&inregs,&outregs); } getmouse(right,left,x,y) int *right,*left,*x,*y; { inregs.x.ax=3; int86(51,&inregs,&outregs); *right=outregs.x.bx; *left=outregs.x.ax; *x=outregs.x.cx; *y=outregs.x.dx; } setmouse(x,y) int x,y; { inregs.x.ax=4; inregs.x.cx=x; inregs.x.dx=y; int86(51,&inregs,&outregs); } m_style(x,y,buf) int x,y; char *buf; { inregs.x.ax=9; inregs.x.bx=x; inregs.x.cx=y; segread(&segregs); segregs.es=segregs.ds; inregs.x.dx=(int)buf; int86x(51,&inregs,&outregs,&segregs); } m_view(xmin,ymin,xmax,ymax) int xmin,ymin,xmax,ymax; { inregs.x.ax=16; inregs.x.cx=xmin; inregs.x.dx=xmax; int86(51,&inregs,&outregs); inregs.x.ax=17; inregs.x.cx=ymin; inregs.x.dx=ymax; int86(51,&inregs,&outregs); } m_color(color) int color; { inregs.x.ax=18; inregs.x.bx=color; int86(51,&inregs,&outregs); } symbol(x,y,color,str,skip) int x,y,color,skip; unsigned char str[80]; { int i=0; _setcolor(color); while(str[i]!=0){ _gputchar(x,y,str[i++],_GXOR); x += skip; } } int style[]={ 0,0,0,0,0,0,0,0,0x0070,0x0e88,0x1184,0x2142,0x2221,0x9210, 0xe107,0x1108,0x1108,0xe107,0x1108,0x1108,0xe107,0x4108,0x4208, 0xfc07,0,0,0,0,0,0,0,0 }; put_command(x) int x; { while((inp(0xe0d2)&0x40)!=0){} outp(0xe0d2,x); } put_data(x) int x; { while((inp(0xe0d2)&0x40)!=0){} outp(0xe0d0,x); } get_data(){ while((inp(0xe0d2)&0x80)!=0){} return(inp(0xe0d0)); } set_command(x) int x; { put_command(x); while(get_data()!=0xfe){} } msb_hot_reset(){ inp(0xe0d0); inp(0xe0d0); inp(0xe0d0); set_command(0xff); } vsync_int_start(){ if(old_0a!=NULL) return; old_0a=_dos_getvect(0x0a); _dos_setvect(0x0a,new_0a); outp(0x64,0); _disable(); outp(0x02,inp(0x02)&0xfb); _enable(); signal(SIGINT,SIG_IGN); } vsync_int_stop(){ if(old_0a==NULL) return; _disable(); outp(0x02,inp(0x02)|0x04); _enable(); _dos_setvect(0x0a,old_0a); old_0a=NULL; signal(SIGINT,SIG_DFL); } void interrupt far new_0a(){ outp(0x64,0); vsync_counter++; _disable(); _chain_intr(old_0a); } main(){ int i,j,d,ch,m_ctr,rsb,dcb,keyno,m_m,m_stat=0; int job_fg[8],job_ct=0,run_flag=0,pause_pass=0,bar_disp=0; inregs.x.ax=0; int86(51,&inregs,&outregs); if(outregs.x.ax==0){printf("\nPlease install mouse.sys !\n");exit(0);} m_style(0,8,style); m_color(1); m_view(0,0,639,399); setmouse(320,200); msb_hot_reset(); set_command(0xf0); set_command(0xfd); set_command(0x3f); for(i=0;i<4096;i++){ for(j=0;j<200;j++){} inp(0xe0d0); } for(d=0;d<8;d++){ midich[d]=d; velocity[d]=0; phase[d]=0; counter[d]=0; chaos[d]=0.5; job_fg[d]=0; } _setvideomode(_98RESS16COLOR); _displaycursor(_GCURSOROFF); _clearscreen(_GCLEARSCREEN); parameter_file_read(); section=1; screen_display(); edit_ch=0; fifo_pointer=0; read_pointer=0; mouse(1); getmouse(&old_r,&old_l,&old_x,&old_y); vsync_counter=0; vsync_int_start(); while(1){ if(vsync_counter!=0){ vsync_counter=0; if(run_flag!=2) put_data(0xf8); for(ch=0;ch<8;ch++) job_fg[ch]=1; } if((inp(0xe0d2)&0x80)==0){ d=inp(0xe0d0); if(d>0xef){} else if(d>0x7f){ rsb=d; dcb=0; } else if(rsb==0xcf){ if((run_flag==1)&&((d==0x7f)||(d==0))){ put_data(0xfa); run_flag=0; window_draw(0); } else if((run_flag==2)&&((d==0x7f)||(d==0))){ run_flag=0; window_draw(0); } else if((run_flag==3)&&((d==0x7f)||(d==0))){ d=ch_trig; if(++ch_trig>4) ch_trig=1; phase[d]=3; if(volume[d]!=0){ velocity[d]=0x7f; } } } else if(rsb==0xdf){ if((run_flag==1)&&((d==0x7f)||(d==0))){ put_data(0xfa); run_flag=0; window_draw(0); } else if((run_flag==2)&&((d==0x7f)||(d==0))){ run_flag=0; window_draw(0); } else if((run_flag==3)&&((d==0x7f)||(d==0))){ d=ch_trig; if(++ch_trig>4) ch_trig=1; phase[d]=3; if(volume[d]!=0){ velocity[d]=0x7f; } } } else if(rsb==0xaf){ if(dcb==0){ keyno=d; dcb=1; } else{ dcb=0; midi_display(1,rsb,keyno,d,0); if(keyno==60){ if((d>0)&&(d<10)){ if(run_flag==1){ run_flag=0; window_draw(0); pause_pass=1; } for(i=0;i<8;i++){ chaos[d]=0.5; velocity[i]=0; } section=d; screen_display(); } } else if(keyno==61){ if((d>0)&&(d<9)){ phase[d-1]=1; if(volume[d-1]!=0){ velocity[d-1]=0x7f; } } } else if(keyno==62) edit_ch=d; else if((keyno>62)&&(keyno<93)){ edit_midi_rx(keyno,d); } else if((keyno==93)&&(pause_pass==0)){ run_flag=2; window_draw(1); } else if(keyno==94){ if(d==0) run_flag=0; else run_flag=3; ch_trig=1; } else if(keyno==95){ if(d==0) bar_disp=0; else{ bar_disp=d; bar_display(d); } } } } else if((rsb>0xbf)&&(rsb<0xcf)){ midi_display(3,rsb,d,0,0); } else if((rsb>0x8f)&&(rsb<0xa0)){ if(dcb==0){ keyno=d; dcb=1; } else{ dcb=0; if(d!=0) midi_display(0,rsb,keyno,d,0); } } else if((rsb>0xaf)&&(rsb<0xc0)){ if(dcb==0){ keyno=d; dcb=1; } else{ dcb=0; midi_display(2,rsb,keyno,d,0); if((rsb==0xbf)&&(keyno==0x7f)&&(d==0)){ if(pause_pass==0){ run_flag=1; window_draw(1); } } } } } else if(job_fg[job_ct]!=0){ each_channel(job_ct); job_fg[job_ct]=0; job_ct=(job_ct+1)&0x07; } else if(kbhit()!=0){ d=getch(); if(d==0x1b) break; else if((d==0x20)||(d==0x0d)){ if(run_flag==1){ put_data(0xfa); run_flag=0; window_draw(0); } else if(run_flag==2){ run_flag=0; window_draw(0); } } else if((d>0x30)&&(d<0x3a)){ for(ch=0;ch<8;ch++) velocity[ch]=0; parameter_to_data_buffer(); section=d-0x30; screen_display(); } else if((d=='c')||(d=='C')) put_data(0xfc); else if((d=='b')||(d=='B')) put_data(0xfb); else if(d=='A'){ put_data(0xfa); pause_pass=0; } } else{ getmouse(&right,&left,&moux,&mouy); if((right==0)&&(left==0)) m_stat=0; else if((old_l==0)&&(left!=0)){ m_stat=1; m_ctr=0; m_m=1; } else if((old_r==0)&&(right!=0)){ m_stat=2; m_ctr=0; m_m=1; } else if(left!=0){ if(++m_ctr>30){ m_stat=1; m_ctr=0; m_m=0; } } else if(right!=0){ if(++m_ctr>30){ m_stat=2; m_ctr=0; m_m=0;} } if(m_stat==1){ m_stat=0; m_stat_1(m_m); } else if(m_stat==2){ m_stat=0; m_stat_2(m_m); } old_r=right; old_l=left; old_x=moux; old_y=mouy; if(bar_disp==0){ _settextposition(12,66); printf("(X=%03d,Y=%03d)",moux,mouy); } midi_display(0,0,0,0,1); } } vsync_int_stop(); mouse(0); for(i=0;i<8;i++){ put_data(0x80+midich[i]); put_data(note[i]); put_data(0); } put_data(0xfc); for(i=0;i<16;i++){ put_data(0xb0+i); put_data(0x7f); put_data(0); } put_command(0xff); parameter_to_data_buffer(); parameter_file_write(); for(i=0;i<4096;i++){ for(j=0;j<200;j++){} inp(0xe0d0); } _clearscreen(_GCLEARSCREEN); _displaycursor(_GCURSORON); _setvideomode (_DEFAULTMODE); } m_stat_1(m_m) int m_m; { if((mouy>176)&&(mouy<189)) volume_change(0,m_m); else if((mouy>384)&&(mouy<397)) volume_change(4,m_m); else if((mouy>114)&&(mouy<128)) range_change(0,0); else if((mouy>322)&&(mouy<336)) range_change(4,0); else if((mouy>98)&&(mouy<112)) time_change(0,0); else if((mouy>306)&&(mouy<320)) time_change(4,0); else if((mouy>82)&&(mouy<96)) dwn_prg_change(0,0); else if((mouy>290)&&(mouy<304)) dwn_prg_change(4,0); else if((mouy>50)&&(mouy<64)) myu_change(0,0,m_m); else if((mouy>258)&&(mouy<272)) myu_change(4,0,m_m); else if((mouy>158)&&(mouy<174)) map_change(0,0); else if((mouy>366)&&(mouy<382)) map_change(4,0); else if((mouy>66)&&(mouy<80)) p1_p2_change(0,0); else if((mouy>274)&&(mouy<288)) p1_p2_change(4,0); else if((mouy>34)&&(mouy<48)) volpan_change(0,0); else if((mouy>242)&&(mouy<256)) volpan_change(4,0); else if((mouy>0)&&(mouy<16)) channel_trigger(0,m_m); else if((mouy>208)&&(mouy<224)) channel_trigger(4,m_m); } m_stat_2(m_m) int m_m; { if((mouy>176)&&(mouy<189)) volume_change(0,m_m); else if((mouy>384)&&(mouy<397)) volume_change(4,m_m); else if((mouy>114)&&(mouy<128)) range_change(0,1); else if((mouy>322)&&(mouy<336)) range_change(4,1); else if((mouy>98)&&(mouy<112)) time_change(0,1); else if((mouy>306)&&(mouy<320)) time_change(4,1); else if((mouy>82)&&(mouy<96)) dwn_prg_change(0,1); else if((mouy>290)&&(mouy<304)) dwn_prg_change(4,1); else if((mouy>50)&&(mouy<64)) myu_change(0,1,m_m); else if((mouy>258)&&(mouy<272)) myu_change(4,1,m_m); else if((mouy>158)&&(mouy<174)) map_change(0,1); else if((mouy>366)&&(mouy<382)) map_change(4,1); else if((mouy>66)&&(mouy<80)) p1_p2_change(0,1); else if((mouy>274)&&(mouy<288)) p1_p2_change(4,1); else if((mouy>34)&&(mouy<48)) volpan_change(0,1); else if((mouy>242)&&(mouy<256)) volpan_change(4,1); } point_screen(mode,y,midi) int mode,y,midi; { char ss[5]; int i,j,k,l,xx,yy,xt,yt,xx_b,yy_b; xt=1+(y%4)*20; yt=(y/4)*13; xx=1+(y%4)*160; yy=1+(y/4)*208; if(mode==0){ mouse(0); ss[0]='A'+y; ss[1]=0; _setlinestyle(0xffff); _setcolor(0); _rectangle(_GF,xx,yy,xx+157,yy+190); _setcolor(7); _rectangle(_GB,xx,yy,xx+157,yy+190); _rectangle(_GF,xx,yy,xx+157,yy+14); _settextposition(yt,xt); printf("\x1b[30m"); printf(" == %s == ch:%d ",ss,midich[y]+1); printf("\x1b[37m"); mouse(1); } else if(mode==1){ mouse(0); _setlinestyle(0xffff); _setcolor(0); _rectangle(_GF,xx+1,yy+173,xx+156,yy+189); _setcolor(7); xx_b=xx+6+(volume[y]/2)*143/64; yy_b=yy+176; _moveto(xx+7,yy_b+5); _lineto(xx+150,yy_b+5); _moveto(xx+7,yy_b+6); _lineto(xx+150,yy_b+6); i=0; _moveto(xx+7+11*i,yy_b+2); _lineto(xx+7+11*i,yy_b+9); i=13; _moveto(xx+7+11*i,yy_b+2); _lineto(xx+7+11*i,yy_b+9); for(i=1;i<13;i++){ _moveto(xx+7+11*i,yy_b+3); _lineto(xx+7+11*i,yy_b+8); } _rectangle(_GF,xx_b,yy_b,xx_b+5,yy_b+11); _setcolor(0); _rectangle(_GF,xx_b+1,yy_b+1,xx_b+4,yy_b+10); _setcolor(7); _rectangle(_GF,xx_b+2,yy_b+2,xx_b+3,yy_b+9); _settextposition(yt+2,xt); printf(" vol=%03d pan=%03d",volume[y],panpot[y]); if(midi==0){ put_data(0xb0+midich[y]); put_data(0x07); put_data(volume[y]); put_data(0xb0+midich[y]); put_data(0x0A); put_data(panpot[y]); } mouse(1); } else if(mode==2){ mouse(0); _setlinestyle(0xffff); _setcolor(0); _rectangle(_GF,xx+13,yy+131,xx+144,yy+157); _setcolor(7); _setlinestyle(0x6666); _rectangle(_GB,xx+12,yy+130,xx+145,yy+158); _setlinestyle(0xffff); for(i=0;i<7;i++){ _rectangle(_GB,xx+12+19*i,yy+158,xx+31+19*i,yy+172); } yy_b=yy+159; xx_b=xx+31; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+50; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+88; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+107; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); xx_b=xx+126; _rectangle(_GF,xx_b-6,yy_b,xx_b+6,yy_b+7); yy_b=yy+156; _rectangle(_GB,xx+20,yy_b,xx+23,yy_b-filter[y][0]); _rectangle(_GF,xx+29,yy_b,xx+33,yy_b-filter[y][1]); _rectangle(_GB,xx+39,yy_b,xx+42,yy_b-filter[y][2]); _rectangle(_GF,xx+48,yy_b,xx+52,yy_b-filter[y][3]); _rectangle(_GB,xx+58,yy_b,xx+61,yy_b-filter[y][4]); _rectangle(_GB,xx+77,yy_b,xx+80,yy_b-filter[y][5]); _rectangle(_GF,xx+86,yy_b,xx+90,yy_b-filter[y][6]); _rectangle(_GB,xx+96,yy_b,xx+99,yy_b-filter[y][7]); _rectangle(_GF,xx+105,yy_b,xx+109,yy_b-filter[y][8]); _rectangle(_GB,xx+115,yy_b,xx+118,yy_b-filter[y][9]); _rectangle(_GF,xx+124,yy_b,xx+128,yy_b-filter[y][10]); _rectangle(_GB,xx+134,yy_b,xx+137,yy_b-filter[y][11]); mouse(1); } else if(mode==3){ _settextposition(yt+7,xt); printf(" low=%03d high=%03d",range[0][y],range[1][y]); } else if(mode==4){ _settextposition(yt+6,xt); printf(" dly=%03d stp=%03d",tim[0][y],tim[1][y]); } else if(mode==5){ _settextposition(yt+5,xt); printf(" dwn=%03d prg=%03d",down[y],program[y]); if(midi==0){ put_data(0xc0+midich[y]); put_data(program[y]); } } else if(mode==6){ _settextposition(yt+3,xt); printf(" myu=%f <%d>",myu[y],shift[y]+1); } else if(mode==7){ _settextposition(yt+1,xt); printf(" note=%03d vel=%03d",note[y],velocity[y]); } else if(mode==8){ _settextposition(yt+4,xt); printf(" pp1=%03d pp2=%03d",para1[y],para2[y]); } if((mode==2)||(mode==3)){ sum[y]=0; j=0; for(i=range[0][y];i0)&&(moux<159)) of=0; else if((moux>160)&&(moux<319)) of=1; else if((moux>320)&&(moux<479)) of=2; else if((moux>480)&&(moux<639)) of=3; else return(0); y=off+of; phase[y]=1; if(volume[y]!=0) velocity[y]=0x7f; } volume_change(off,m_m) int off,m_m; { int of,y,x; if(m_m==0) return(0); if((moux>7)&&(moux<152)) { of=0; x=8; } else if((moux>167)&&(moux<312)) { of=1; x=168; } else if((moux>327)&&(moux<472)) { of=2; x=328; } else if((moux>487)&&(moux<632)) { of=3; x=488; } else return(0); y=off+of; volume[y]=(moux-x)*127/143; point_screen(1,y,0); /* Volume */ } range_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>80)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>240)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>400)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>560)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(range[0][y]>0) range[0][y]--; } else if((z==0)&&(md==1)){ if(range[0][y]<127) range[0][y]++; } else if((z==1)&&(md==0)){ if(range[1][y]>0) range[1][y]--; } else if((z==1)&&(md==1)){ if(range[1][y]<127) range[1][y]++; } point_screen(3,y,0); /* Range */ } time_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>87)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>247)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>407)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>567)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(tim[0][y]>0) tim[0][y]--; } else if((z==0)&&(md==1)){ if(tim[0][y]<127) tim[0][y]++; } else if((z==1)&&(md==0)){ if(tim[1][y]>0) tim[1][y]--; } else if((z==1)&&(md==1)){ if(tim[1][y]<127) tim[1][y]++; } point_screen(4,y,0); /* Delay, Step */ } dwn_prg_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>87)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>247)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>407)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>567)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(down[y]>0) down[y]--; } else if((z==0)&&(md==1)){ if(down[y]<127) down[y]++; } else if((z==1)&&(md==0)){ if(program[y]>0) program[y]--; } else if((z==1)&&(md==1)){ if(program[y]<127) program[y]++; } point_screen(5,y,0); /* Down, Program */ } p1_p2_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>87)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>247)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>407)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>567)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(para1[y]>0) para1[y]--; } else if((z==0)&&(md==1)){ if(para1[y]<127) para1[y]++; } else if((z==1)&&(md==0)){ if(para2[y]>0) para2[y]--; } else if((z==1)&&(md==1)){ if(para2[y]<127) para2[y]++; } point_screen(8,y,0); /* Parameters */ } volpan_change(off,md) int off,md; { int of,y,z; if((moux>15)&&(moux<71)) { of=0; z=0; } else if((moux>87)&&(moux<143)) { of=0; z=1; } else if((moux>175)&&(moux<231)) { of=1; z=0; } else if((moux>247)&&(moux<303)) { of=1; z=1; } else if((moux>335)&&(moux<391)) { of=2; z=0; } else if((moux>407)&&(moux<463)) { of=2; z=1; } else if((moux>495)&&(moux<551)) { of=3; z=0; } else if((moux>567)&&(moux<623)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(volume[y]>0) volume[y]--; } else if((z==0)&&(md==1)){ if(volume[y]<127) volume[y]++; } else if((z==1)&&(md==0)){ if(panpot[y]>0) panpot[y]--; } else if((z==1)&&(md==1)){ if(panpot[y]<127) panpot[y]++; } point_screen(1,y,0); /* Volume, Panpot */ } myu_change(off,md,m_m) int off,md,m_m; { int of,y,z; if((moux>15)&&(moux<111)) { of=0; z=0; } else if((moux>120)&&(moux<142)) { of=0; z=1; } else if((moux>175)&&(moux<271)) { of=1; z=0; } else if((moux>280)&&(moux<302)) { of=1; z=1; } else if((moux>335)&&(moux<431)) { of=2; z=0; } else if((moux>440)&&(moux<462)) { of=2; z=1; } else if((moux>495)&&(moux<591)) { of=3; z=0; } else if((moux>600)&&(moux<622)) { of=3; z=1; } else return(0); y=off+of; if((z==0)&&(md==0)){ if(shift[y]==0) myu[y]=myu[y]-0.1; else if(shift[y]==1) myu[y]=myu[y]-0.01; else if(shift[y]==2) myu[y]=myu[y]-0.001; else if(shift[y]==3) myu[y]=myu[y]-0.0001; else if(shift[y]==4) myu[y]=myu[y]-0.00001; else if(shift[y]==5) myu[y]=myu[y]-0.000001; if(myu[y]<1.0) myu[y]=1.0; } else if((z==0)&&(md==1)){ if(shift[y]==0) myu[y]=myu[y]+0.1; else if(shift[y]==1) myu[y]=myu[y]+0.01; else if(shift[y]==2) myu[y]=myu[y]+0.001; else if(shift[y]==3) myu[y]=myu[y]+0.0001; else if(shift[y]==4) myu[y]=myu[y]+0.00001; else if(shift[y]==5) myu[y]=myu[y]+0.000001; if(myu[y]>4.0) myu[y]=4.0; } else if((m_m!=0)&&(z==1)&&(md==0)){ if(shift[y]>0) shift[y]--; } else if((m_m!=0)&&(z==1)&&(md==1)){ if(shift[y]<5) shift[y]++; } point_screen(6,y,0); /* Myu, Shift */ } map_change(off,md) int off,md; { int f,of,y,z,xx,yy; if(off==0) yy=mouy; else yy=mouy-208; if((moux>13)&&(moux<147)) { of=0; xx=moux; } else if((moux>172)&&(moux<307)) { of=1; xx=moux-160; } else if((moux>332)&&(moux<467)) { of=2; xx=moux-320; } else if((moux>492)&&(moux<627)) { of=3; xx=moux-480; } else return(0); if((yy<168)&&(xx>25)&&(xx<38)) z=1; else if((yy<168)&&(xx>44)&&(xx<58)) z=3; else if((yy<168)&&(xx>82)&&(xx<96)) z=6; else if((yy<168)&&(xx>101)&&(xx<115)) z=8; else if((yy<168)&&(xx>120)&&(xx<134)) z=10; else if(xx<32) z=0; else if(xx<51) z=2; else if(xx<70) z=4; else if(xx<89) z=5; else if(xx<108) z=7; else if(xx<127) z=9; else z=11; y=off+of; if(md==0){ if(filter[y][z]>0) filter[y][z]--; } else { if(filter[y][z]<24) filter[y][z]++; } point_screen(2,y,0); /* Note Map */ } parameter_file_write(){ int i,j,k; fds=fopen("chaosgen.dat","wb"); for(i=0;i<9;i++){ for(j=0;j<8;j++){ for(k=0;k<30;k++) fputc(data_buffer[k][j][i],fds); fputc(0xff,fds); fputc(0xff,fds); } } fclose(fds); } parameter_file_read(){ int i,j,k; if((fds=fopen("chaosgen.dat","rb"))==NULL){ for(i=0;i<9;i++){ for(j=0;j<8;j++){ data_buffer[0][j][i]=3; /* Myu over point */ data_buffer[1][j][i]=j; /* Myu (1) */ data_buffer[2][j][i]=j; /* Myu (2) */ data_buffer[3][j][i]=j; /* Myu (3) */ data_buffer[4][j][i]=j; /* Myu (4) */ data_buffer[5][j][i]=j; /* Myu (5) */ data_buffer[6][j][i]=j; /* Myu (6) */ data_buffer[7][j][i]=1; /* shift */ data_buffer[8][j][i]=1+2*j; /* down */ data_buffer[9][j][i]=2*j+1; /* program */ data_buffer[10][j][i]=64+2*j; /* volume */ data_buffer[11][j][i]=64; /* panpot */ data_buffer[12][j][i]=99; /* para(1) */ data_buffer[13][j][i]=99; /* para(2) */ data_buffer[14][j][i]=36-j; /* range[0] low */ data_buffer[15][j][i]=84+j; /* range[1] high */ data_buffer[16][j][i]=j; /* tim[0] Delay */ data_buffer[17][j][i]=1+j*2; /* tim[1] Step */ data_buffer[18][j][i]=12; /* filter[0] */ data_buffer[19][j][i]=12; /* filter[1] */ data_buffer[20][j][i]=12; /* filter[2] */ data_buffer[21][j][i]=12; /* filter[3] */ data_buffer[22][j][i]=12; /* filter[4] */ data_buffer[23][j][i]=12; /* filter[5] */ data_buffer[24][j][i]=12; /* filter[6] */ data_buffer[25][j][i]=12; /* filter[7] */ data_buffer[26][j][i]=12; /* filter[8] */ data_buffer[27][j][i]=12; /* filter[9] */ data_buffer[28][j][i]=12; /* filter[10] */ data_buffer[29][j][i]=12; /* filter[11] */ } } } else{ for(i=0;i<9;i++){ for(j=0;j<8;j++){ for(k=0;k<30;k++){ data_buffer[k][j][i]=fgetc(fds); } fgetc(fds); fgetc(fds); } } fclose(fds); } } screen_display(){ int i,j,k,m0,m1,m2,m3,m4,m5,m6; i=section-1; for(j=0;j<8;j++){ m0=data_buffer[0][j][i]; /* Myu over point */ m1=data_buffer[1][j][i]; /* Myu (1) */ m2=data_buffer[2][j][i]; /* Myu (2) */ m3=data_buffer[3][j][i]; /* Myu (3) */ m4=data_buffer[4][j][i]; /* Myu (4) */ m5=data_buffer[5][j][i]; /* Myu (5) */ m6=data_buffer[6][j][i]; /* Myu (6) */ myu[j]=(double)m0; myu[j]=myu[j]+0.1*(double)m1; myu[j]=myu[j]+0.01*(double)m2; myu[j]=myu[j]+0.001*(double)m3; myu[j]=myu[j]+0.0001*(double)m4; myu[j]=myu[j]+0.00001*(double)m5; myu[j]=myu[j]+0.000001*(double)m6; shift[j]=data_buffer[7][j][i]; /* shift */ down[j]=data_buffer[8][j][i]; /* down */ program[j]=data_buffer[9][j][i]; /* program */ volume[j]=data_buffer[10][j][i]; /* volume */ panpot[j]=data_buffer[11][j][i]; /* panpot */ para1[j]=data_buffer[12][j][i]; /* para(1) */ para2[j]=data_buffer[13][j][i]; /* para(2) */ range[0][j]=data_buffer[14][j][i]; /* range[0] low */ range[1][j]=data_buffer[15][j][i]; /* range[1] high */ tim[0][j]=data_buffer[16][j][i]; /* tim[0] Delay */ tim[1][j]=data_buffer[17][j][i]; /* tim[1] Step */ for(k=0;k<12;k++){ filter[j][k]=data_buffer[18+k][j][i]; /* filter[k] */ } } for(i=0;i<8;i++){ point_screen(0,i,0); /* Whole Frame */ point_screen(7,i,0); /* Note, Velocity */ point_screen(6,i,0); /* Myu, Shift */ point_screen(8,i,0); /* Parameters */ point_screen(1,i,0); /* Volume, Panpot */ point_screen(5,i,0); /* Down, Program */ point_screen(4,i,0); /* Delay, Step */ point_screen(3,i,0); /* Range */ point_screen(2,i,0); /* Note Map */ } _settextposition(12,1); if(section==1) printf("y1z2 3 4 5 6 7 8 9 "); else if(section==2) printf(" 1y2z3 4 5 6 7 8 9 "); else if(section==3) printf(" 1 2y3z4 5 6 7 8 9 "); else if(section==4) printf(" 1 2 3y4z5 6 7 8 9 "); else if(section==5) printf(" 1 2 3 4y5z6 7 8 9 "); else if(section==6) printf(" 1 2 3 4 5y6z7 8 9 "); else if(section==7) printf(" 1 2 3 4 5 6y7z8 9 "); else if(section==8) printf(" 1 2 3 4 5 6 7y8z9 "); else if(section==9) printf(" 1 2 3 4 5 6 7 8y9z"); } parameter_to_data_buffer(){ double myu_buff; int i,j,k,m; i=section-1; for(j=0;j<8;j++){ myu_buff=myu[j]; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[0][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[1][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[2][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[3][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[4][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[5][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[6][j][i]=m; data_buffer[7][j][i]=shift[j]; data_buffer[8][j][i]=down[j]; data_buffer[9][j][i]=program[j]; data_buffer[10][j][i]=volume[j]; data_buffer[11][j][i]=panpot[j]; data_buffer[12][j][i]=para1[j]; data_buffer[13][j][i]=para2[j]; data_buffer[14][j][i]=range[0][j]; data_buffer[15][j][i]=range[1][j]; data_buffer[16][j][i]=tim[0][j]; data_buffer[17][j][i]=tim[1][j]; for(k=0;k<12;k++){ data_buffer[18+k][j][i]=filter[j][k]; } } } each_channel(ch) int ch; { if(phase[ch]==0){ counter[ch]=0; } else if(phase[ch]==1){ if(++counter[ch]>tim[0][ch]) phase[ch]=2; } else if(phase[ch]==2){ phase[ch]=3; chaos[ch]=myu[ch]*chaos[ch]*(1.0-chaos[ch]); note[ch]=(int)ref_table[ch][(int)(sum[ch]*chaos[ch])]; put_data(0x90+midich[ch]); put_data(note[ch]); put_data(0x7f); velocity[ch]=0x7f; point_screen(7,ch,0); /* Note, Velocity */ } else if(phase[ch]==3){ phase[ch]=4; put_data(0x80+midich[ch]); put_data(note[ch]); put_data(0x00); counter[ch]=0; } else if(phase[ch]==4){ if(++counter[ch]>tim[1][ch]) phase[ch]=5; } else if(phase[ch]==5){ velocity[ch]=velocity[ch]-down[ch]; if(velocity[ch]<1){ phase[ch]=0; return(0); } phase[ch]=3; chaos[ch]=myu[ch]*chaos[ch]*(1.0-chaos[ch]); note[ch]=(int)ref_table[ch][(int)(sum[ch]*chaos[ch])]; put_data(0x90+midich[ch]); put_data(note[ch]); put_data(velocity[ch]); point_screen(7,ch,0); /* Note, Velocity */ } } myu_decode(j) int j; { double myu_buff; int i,m; i=section-1; myu_buff=myu[j]; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[0][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[1][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[2][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[3][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[4][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[5][j][i]=m; m=(int)myu_buff; myu_buff=10.0*(myu_buff-(double)m); data_buffer[6][j][i]=m; } myu_encode(j) int j; { int i,m0,m1,m2,m3,m4,m5,m6; i=section-1; m0=data_buffer[0][j][i]; /* Myu over point */ m1=data_buffer[1][j][i]; /* Myu (1) */ m2=data_buffer[2][j][i]; /* Myu (2) */ m3=data_buffer[3][j][i]; /* Myu (3) */ m4=data_buffer[4][j][i]; /* Myu (4) */ m5=data_buffer[5][j][i]; /* Myu (5) */ m6=data_buffer[6][j][i]; /* Myu (6) */ myu[j]=(double)m0; myu[j]=myu[j]+0.1*(double)m1; myu[j]=myu[j]+0.01*(double)m2; myu[j]=myu[j]+0.001*(double)m3; myu[j]=myu[j]+0.0001*(double)m4; myu[j]=myu[j]+0.00001*(double)m5; myu[j]=myu[j]+0.000001*(double)m6; } edit_midi_rx(sel,data) int sel,data; { int i,j,m0,m1,m2,m3,m4,m5,m6; if((edit_ch<1)||(edit_ch>8)) return(0); i=section-1; j=edit_ch-1; switch(sel){ case (63): myu_decode(j); data_buffer[0][j][i]=data; /* Myu over point */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (64): myu_decode(j); data_buffer[1][j][i]=data; /* Myu (1) */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (65): myu_decode(j); data_buffer[2][j][i]=data; /* Myu (2) */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (66): myu_decode(j); data_buffer[3][j][i]=data; /* Myu (3) */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (67): myu_decode(j); data_buffer[4][j][i]=data; /* Myu (4) */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (68): myu_decode(j); data_buffer[5][j][i]=data; /* Myu (5) */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (69): myu_decode(j); data_buffer[6][j][i]=data; /* Myu (6) */ myu_encode(j); point_screen(6,j,0); /* Myu, Shift */ break; case (70): shift[j]=data; point_screen(6,j,0); /* Myu, Shift */ break; case (71): down[j]=data; point_screen(5,j,0); /* Down, Program */ break; case (72): program[j]=data; point_screen(5,j,0); /* Down, Program */ break; case (73): volume[j]=data; point_screen(1,j,0); /* Volume, Panpot */ break; case (74): panpot[j]=data; point_screen(1,j,0); /* Volume, Panpot */ break; case (75): para1[j]=data; point_screen(8,j,0); /* Parameters */ break; case (76): para2[j]=data; point_screen(8,j,0); /* Parameters */ break; case (77): range[0][j]=data; point_screen(3,j,0); /* Range */ break; case (78): range[1][j]=data; point_screen(3,j,0); /* Range */ break; case (79): tim[0][j]=data; point_screen(4,j,0); /* Delay, Step */ break; case (80): tim[1][j]=data; point_screen(4,j,0); /* Delay, Step */ break; case (81): filter[j][0]=data; point_screen(2,j,0); /* Note Map */ break; case (82): filter[j][1]=data; point_screen(2,j,0); /* Note Map */ break; case (83): filter[j][2]=data; point_screen(2,j,0); /* Note Map */ break; case (84): filter[j][3]=data; point_screen(2,j,0); /* Note Map */ break; case (85): filter[j][4]=data; point_screen(2,j,0); /* Note Map */ break; case (86): filter[j][5]=data; point_screen(2,j,0); /* Note Map */ break; case (87): filter[j][6]=data; point_screen(2,j,0); /* Note Map */ break; case (88): filter[j][7]=data; point_screen(2,j,0); /* Note Map */ break; case (89): filter[j][8]=data; point_screen(2,j,0); /* Note Map */ break; case (90): filter[j][9]=data; point_screen(2,j,0); /* Note Map */ break; case (91): filter[j][10]=data; point_screen(2,j,0); /* Note Map */ break; case (92): filter[j][11]=data; point_screen(2,j,0); /* Note Map */ break; } } midi_display(mode,status,keyno,data,u_d) int mode,status,keyno,data,u_d; { int j,fifo_buff; if(u_d==0){ fifo_buff=fifo_pointer; midi_fifo[0][fifo_pointer]=mode; midi_fifo[1][fifo_pointer]=status; midi_fifo[2][fifo_pointer]=keyno; midi_fifo[3][fifo_pointer]=data; fifo_pointer++; if(fifo_pointer>9999) fifo_pointer=0; if(fifo_pointer==read_pointer) fifo_pointer=fifo_buff; return(0); } if(fifo_pointer==read_pointer) return(0); mode=midi_fifo[0][read_pointer]; status=midi_fifo[1][read_pointer]; keyno=midi_fifo[2][read_pointer]; data=midi_fifo[3][read_pointer]; read_pointer++; if(read_pointer>9999) read_pointer=0; switch(mode){ case(0): _settextposition(12,32); printf("%02X %02X %02X",status,keyno,data); break; case(1): _settextposition(12,41); printf("%02X %02X %02X",status,keyno,data); break; case(2): _settextposition(12,50); printf("%02X %02X %02X",status,keyno,data); if(status>0xb7) break; j=status&0x0f; if(keyno==7) volume[j]=data; else if(keyno==10) panpot[j]=data; else break; point_screen(1,j,1); /* Volume, Panpot */ break; case(3): _settextposition(12,59); printf("%02X %02X",status,keyno); if(status>0xc7) break; j=status&0x0f; program[j]=keyno; point_screen(5,j,1); /* Down, Program */ break; } } window_draw(d) int d; { int w1x=7,w1y=133,w2x=632,w2y=170; if(d==0){ _settextposition(9,15); printf(" "); mouse(0); _putimage(w1x,w1y,wind,_GPSET); mouse(1); return(0); } mouse(0); _getimage(w1x,w1y,w2x,w2y,wind); _setcolor(0); _rectangle(_GFILLINTERIOR,w1x,w1y,w2x,w2y); _setcolor(7); _rectangle(_GFILLINTERIOR,w1x+4,w1y+4,w2x-4,w2y-4); _setcolor(0); _rectangle(_GFILLINTERIOR,w1x+8,w1y+8,w2x-8,w2y-8); _setcolor(7); mouse(1); _settextposition(9,15); printf("System is waiting ... Plaese Cueing with JOY/KBD !!"); } bar_display(d) int d; { _settextposition(12,66); printf(" "); if(d>127) char_disp(10); else if(d>99) char_disp(1); else char_disp(0); d=d-100*(d/100); char_disp(d/10); char_disp(d%10); printf(" "); } char_disp(x) int x; { if(x==0) printf("O"); else if(x==1) printf("P"); else if(x==2) printf("Q"); else if(x==3) printf("R"); else if(x==4) printf("S"); else if(x==5) printf("T"); else if(x==6) printf("U"); else if(x==7) printf("V"); else if(x==8) printf("W"); else if(x==9) printf("X"); else printf(""); }