/* * GLIB - a Generic LIBrarian and editor for synths * * Machine dependent stuff. * * Unix version */ #include "glib.h" #include int Rows, Cols; #include hello() { } bye() { windgoto(22,0); windrefresh(); windexit(0); } /* getmouse - get currect row and column of mouse */ getmouse(amr,amc) int *amr; int *amc; { #ifdef USEMOUSE /* no such */ #else *amr = -1; *amc = -1; #endif } /* statmouse - return mouse button state (0=nothing pressed,1=left,2=right) */ statmouse() { #ifdef USEMOUSE /* no such */ #else return(-1); #endif } /* Return when either a console key or mouse button is pressed. */ mouseorkey() { #ifdef USEMOUSE /* no such */ #else return(getconsole()); #endif } flushconsole() { } statconsole() { return(1); } getconsole() { return(getchar()); } getmidi() { return(-1); } statmidi() { return(0); } /*ARGSUSED*/ sendmidi(c) { } flushmidi() { while ( STATMIDI ) getmidi(); } long milliclock() { static long hzcount = 0; return(hzcount++); } millisleep(n) { sleep((n+500)/1000); } char * alloc(n) { char *p; if ( (p=malloc((unsigned)n)) == (char *)NULL ) { printf("*** Whoops *** alloc has failed?!? No more memory!\n"); fflush(stdout); bye(); } return(p); } windinit() { char *getenv(); initscr(); Cols = 80; Rows = 24; noecho(); nonl(); cbreak(); } windgoto(r,c) int r,c; { move(r,c); } windeeol() { clrtoeol(); } winderaserow(r) { windgoto(r,0); windeeol(); } windexit(r) int r; { nocbreak(); nl(); echo(); endwin(); exit(r); } windclear() { clear(); } /* windgets - get a line of input from the console, handling backspaces */ windgets(s) char *s; { char *origs = s; int c; while ( (c=getconsole()) != '\n' && c!='\r' && c!= EOF ) { if ( c == '\b' ) { if ( s > origs ) { windstr("\b \b"); s--; } } else { windputc(c); *s++ = c; } windrefresh(); } *s = '\0'; } windstr(s) char *s; { int c; while ( (c=(*s++)) != '\0' ) windputc(c); } windputc(c) int c; { addch(c); } windrefresh() { refresh(); } beep() { putchar('\007'); } windhigh() { standout(); } windnorm() { standend(); } /**************** * openls(), nextls(), and closels() are used to scan the current directory. ***************/ FILE *Phrlist = NULL; openls() { FILE *popen(); Phrlist = popen("ls","r"); } char * nextls() { static char fname[65]; if ( fscanf(Phrlist,"%s",fname) != 1 ) return(NULL); return(fname); } closels() { pclose(Phrlist); } #ifdef FAKECBREAK #include struct termio Initterm; static int First = 1; cbreak() { struct termio termbuff; if ( First ) { First = 0; ioctl(0,TCGETA,&Initterm); } termbuff = Initterm; termbuff.c_lflag &= (~ICANON); termbuff.c_cc[4] = 1; termbuff.c_cc[5] = 1; ioctl(0,TCSETA,&termbuff); } nocbreak() { ioctl(0,TCSETA,&Initterm); } #endif