# HG changeset patch # User darius # Date 893316142 0 # Node ID ca72d2b59bf46b1c5aa3350b5a8a0dc33df03bfc # Parent 6218f988555278fd565aa1f828a9e7673e98d2a9 Kill this stuff.. Rewriting the frontend diff -r 6218f9885552 -r ca72d2b59bf4 examples/unix/tcl/tcldisplay.c --- a/examples/unix/tcl/tcldisplay.c Thu Apr 23 07:21:28 1998 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,231 +0,0 @@ -/* - -Name: -TCLDISPLAY.C - -Description: -TCL display section of mikmod - -Peter Amstutz - -HISTORY -======= - -v1.00 (19/01/97) - split off from display.c to utilize TCL/TK frontend -v1.01 (27/03/97) - added version verification, so the version of the - tcl/tk script has to match up with the version - that tclmikmod expects. Also upper-ascii translation, - so mods that have ibm upper-ascii characters are translated - into something that vaguly resembles what it was supposed - to look like, rather than the gobbledygook that you end - up with otherwise... translation table is stored in - "asc8-to-7.txt" (that is, 8 bit to 7 bit ascii) -v1.02 (22/04/97) - modified to work with MikMod 3.0 -*/ - -#include -#include -#include -#include -#include -#include "mikmod.h" - -extern int quiet; -extern float speed_constant; /* multiplier for tempo,initialised to 1 */ -int readme; -int writeme; -pid_t pid; -extern UNIMOD *mf; -extern int dorandom; - -void init_display(void) -{ - int pipe1[2]; - int pipe2[2]; - FILE *tclfile; - char c; - char verline[40]; - - if(quiet) return; - - pipe(pipe1); - pipe(pipe2); - - pid=fork(); - - if(pid==0) - { - dup2(pipe1[0],STDIN_FILENO); - close(pipe1[0]); - dup2(pipe2[1],STDOUT_FILENO); - close(pipe2[1]); - execlp("wish","wish",NULL); - perror("Error in fork() call to start wish!!!"); - exit(1); - } - readme=pipe2[0]; - writeme=pipe1[1]; - if((tclfile=fopen("start.tcl","r"))==NULL) - { - perror("Error reading start.tcl file!"); - exit(1); - } - fgets(verline,40,tclfile); - if(strcmp(verline,"#V1.13\n")!=0) - { - perror("start.tcl version mismatch!"); - exit(1); - } - while(!feof(tclfile)) - { - c=fgetc(tclfile); - write(writeme,&c,1); - } - c='\n'; - write(writeme,&c,1); - usleep(500000); -} - -void display_driver_error(char *myerr) -{ - if(quiet) return; - printf("Driver error: %s.\n",myerr); -} - -void display_driver(void) -{ - char string[512]; - if(quiet) return; - sprintf(string, -".top1.fra2.fra62.fra98.che5 %s\n" -".top1.fra2.fra62.fra98.che6 %s\n" -".top1.fra2.fra62.fra98.che7 %s\n" -".top1.fra2.fra62.fra77.che1 %s\n" -".top1.fra2.fra62.fra16.lab18 configure -text {%u}\n", - (md_mode&DMODE_16BITS) ? "deselect":"select", - (md_mode&DMODE_INTERP) ? "deselect":"select", - (md_mode&DMODE_STEREO) ? "deselect":"select", - (dorandom) ? "select":"deselect", - md_mixfreq); - write(writeme,string,strlen(string)); -} - -void display_file(void) -{ - char filename[255]; - char arc[255]; - char string[512]; - if(quiet) return; - PL_GetCurrent(&playlist,filename,arc); - sprintf(string,"File: %s\n",filename); - write(writeme,string,strlen(string)); -} - -void display_name() -{ - char string[512]; - if(quiet) return; - - sprintf(string, -".top1.fra2.lab10 configure -text {\"%s\"}\n" -".top1.fra2.fra22.lab25 configure -text {Type: %s}\n" -".top1.fra2.fra22.lab30 configure -text {Periods: %s}\n", - mf->songname==NULL?"":mf->songname, - mf->modtype, - (mf->flags&UF_XMPERIODS) ? "XM type" : "mod type"); - write(writeme,string,strlen(string)); - -} - -void display_status() -{ - char string[512]; - if(quiet) return; - - sprintf(string, -".top1.fra2.fra22.lab27 configure -text {Pattern: %i/ %i}\n" -".top1.fra2.fra22.lab28 configure -text {Position: %i}\n" -".top1.fra2.fra22.lab29 configure -text {Tempo: %i}\n", - mf->sngpos, mf->numpos, - mf->patpos, mf->sngspd); - write(writeme,string,strlen(string)); -} - -void exit_display() -{ - if(quiet) return; - write(writeme,"destroy .\n",10); - kill(pid,SIGKILL); -} - -void display_instruments() -{ - int t, i, n; - char string[255]; - unsigned char string2[255]; - unsigned char upasc2lowasc[128]; - FILE *table; - - table=fopen("asc8-to-7.txt","r"); - if(table!=NULL) - { - for(i=0;i<128;i++) - { - fgets(string,255,table); - upasc2lowasc[i]=string[4]; - } - } - - write(writeme,".inst.lb delete 0 end\n",31); - - for(t=0;tnumins;t++) - { - if(mf->instruments[t].insname!=NULL) - { - /* get rid of {}[]$ chars... You won't belive what a pain in - the ass it was to find the bug that makes this code - essential */ - for(i=0,n=0;iinstruments[t].insname);i++,n++) - { - /* quote all possible characters that the tcl - interpreter might try to interpret - (yes, there are a lot) */ - if(mf->instruments[t].insname[i]=='{' || - mf->instruments[t].insname[i]=='}' || - mf->instruments[t].insname[i]=='[' || - mf->instruments[t].insname[i]==']' || - mf->instruments[t].insname[i]=='$' || - mf->instruments[t].insname[i]=='\"' || - mf->instruments[t].insname[i]=='\\' || - mf->instruments[t].insname[i]=='(' || - mf->instruments[t].insname[i]==')' || - mf->instruments[t].insname[i]=='@' || - mf->instruments[t].insname[i]=='%' || - mf->instruments[t].insname[i]=='#') - { - string2[n]='\\'; - n++; - } - string2[n]=mf->instruments[t].insname[i]; - if(string2[n]>127) - { - string2[n]=upasc2lowasc[string2[n]-128]; - } - } - string2[n]=0; - sprintf(string,".inst.lb insert end \"%s\"\n",string2); - } - else sprintf(string,".inst.lb insert end \"\"\n"); - write(writeme,string,strlen(string)); - } - fclose(table); -} - -void display_all(void) -{ - if(quiet) return; - display_driver(); - display_file(); - display_name(); - display_status(); -}