[xiph-commits] r17662 - trunk/squishyball
xiphmont at svn.xiph.org
xiphmont at svn.xiph.org
Fri Nov 26 08:29:23 PST 2010
Author: xiphmont
Date: 2010-11-26 08:29:22 -0800 (Fri, 26 Nov 2010)
New Revision: 17662
Added:
trunk/squishyball/main.h
Removed:
trunk/squishyball/tty.h
Modified:
trunk/squishyball/Makefile.am
trunk/squishyball/main.c
trunk/squishyball/mincurses.c
trunk/squishyball/mincurses.h
trunk/squishyball/tty.c
Log:
Get more tty work/bugfixes into SVN
Modified: trunk/squishyball/Makefile.am
===================================================================
--- trunk/squishyball/Makefile.am 2010-11-25 22:26:20 UTC (rev 17661)
+++ trunk/squishyball/Makefile.am 2010-11-26 16:29:22 UTC (rev 17662)
@@ -8,7 +8,7 @@
mandir = @MANDIR@
man_MANS = squishyball.1
-squishyball_SOURCES = main.c tty.c tty.h mincurses.c mincurses.h
+squishyball_SOURCES = main.c main.h tty.c mincurses.c mincurses.h
debug:
$(MAKE) all CFLAGS="@DEBUG@"
Modified: trunk/squishyball/main.c
===================================================================
--- trunk/squishyball/main.c 2010-11-25 22:26:20 UTC (rev 17661)
+++ trunk/squishyball/main.c 2010-11-26 16:29:22 UTC (rev 17662)
@@ -19,7 +19,7 @@
#include <signal.h>
#include <ncurses.h>
#include "mincurses.h"
-#include "tty.h"
+#include "main.h"
#define MAXFILES 10
static int verbose=0;
@@ -34,19 +34,6 @@
return 0;
}
-typedef struct pcm_struct pcm_t;
-
-struct pcm_struct {
- char *path;
- int rate;
- int bits; /* negative indicates IEEE754 float */
- int ch;
- char *matrix;
- unsigned char *data;
- off_t size;
- int dither;
-};
-
void free_pcm(pcm_t *pcm){
if(pcm){
if(pcm->path)free(pcm->path);
@@ -1409,7 +1396,7 @@
" -e --end-time <time> : Set sample end time for playback\n"
" -h --help : Print this usage information.\n"
" -M --mark-flip : Mark transitions between samples with\n"
- " a short period of silence (default)\n"
+ " a short period of silence\n"
" -n --trials <n> : Set desired number of trials\n"
" (default: 10)\n"
" -r --restart-after : Restart playback from sample start\n"
@@ -1420,7 +1407,7 @@
" -s --start-time <time> : Set start time within sample for\n"
" playback\n"
" -S --seamless-flip : Do not mark transitions between samples;\n"
- " flip with a seamless crossfade\n"
+ " flip with a seamless crossfade (default)\n"
" -t --force-truncate : Always truncate (never dither) when\n"
" down-converting samples to 16-bit for\n"
" playback.\n"
@@ -1458,22 +1445,6 @@
,VERSION);
}
-static char timebuffer[80];
-static char *make_time_string(double s){
- long hrs=s/60/60;
- long min=s/60-hrs*60;
- long sec=s-hrs*60*60-min*60;
- long hsec=(s-(int)s)*100;
- if(hrs>0){
- snprintf(timebuffer,80,"%ld:%02ld:%02ld.%02ld",hrs,min,sec,hsec);
- }else if(min>0){
- snprintf(timebuffer,80,"%ld:%02ld.%02ld",min,sec,hsec);
- }else{
- snprintf(timebuffer,80,"%ld.%02ld",sec,hsec);
- }
- return timebuffer;
-}
-
static int parse_time(char *s,double *t){
double secf;
long secl;
@@ -1917,7 +1888,7 @@
int force_dither=0;
int force_truncate=0;
int restart_mode=0;
- int beep_mode=1;
+ int beep_mode=3;
int tests=10;
double start=0;
double end=-1;
@@ -2092,7 +2063,7 @@
for(i=0;i<test_files;i++){
if(verbose)
fprintf(stderr,"\t%s: %s\n",pcm[i]->path,
- make_time_string((double)pcm[i]->size/pcm[i]->ch/((pcm[i]->bits+7)/8)/pcm[i]->rate));
+ make_time_string((double)pcm[i]->size/pcm[i]->ch/((pcm[i]->bits+7)/8)/pcm[i]->rate,0));
pcm[i]->size=n;
}
if(verbose)
@@ -2105,7 +2076,11 @@
/* set up terminal */
atexit(min_remove_panel);
- min_init_panel(5);
+ {
+ double len=pcm[0]->size/((pcm[0]->bits+7)/8)/pcm[0]->ch/(double)pcm[0]->rate;
+ panel_init(pcm, test_files, test_mode, start, end>0 ? end : len, len,
+ beep_mode, restart_mode, tests, "");
+ }
/* set up shared state */
memset(&state,0,sizeof(state));
Added: trunk/squishyball/main.h
===================================================================
--- trunk/squishyball/main.h (rev 0)
+++ trunk/squishyball/main.h 2010-11-26 16:29:22 UTC (rev 17662)
@@ -0,0 +1,55 @@
+/*
+ *
+ * squishyball
+ *
+ * Copyright (C) 2010 Xiph.Org
+ *
+ * squishyball is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * squishyball is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with rtrecord; see the file COPYING. If not, write to the
+ * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
+#ifndef _SB__H_
+#define _SB__H_
+
+typedef struct pcm_struct pcm_t;
+
+struct pcm_struct {
+ char *path;
+ int rate;
+ int bits; /* negative indicates IEEE754 float */
+ int ch;
+ char *matrix;
+ unsigned char *data;
+ off_t size;
+ int dither;
+};
+
+
+extern char *make_time_string(double s,int pad);
+extern void panel_init(pcm_t **pcm, int test_files, int test_mode, double start, double end, double size,
+ int flip_mode,int repeat_mode,int trials,char *trial_list);
+extern void panel_update_playing(char c);
+extern void panel_update_start(double time);
+extern void panel_update_current(double time);
+extern void panel_update_end(double time);
+extern void panel_update_repeat_mode(int mode);
+extern void panel_update_flip_mode(int mode);
+extern void panel_update_trials(char *trial_list);
+extern void panel_update_sample(int n);
+extern void panel_update_pause(int flag);
+
+
+#endif
Modified: trunk/squishyball/mincurses.c
===================================================================
--- trunk/squishyball/mincurses.c 2010-11-25 22:26:20 UTC (rev 17661)
+++ trunk/squishyball/mincurses.c 2010-11-26 16:29:22 UTC (rev 17662)
@@ -395,9 +395,9 @@
void min_remove_panel(){
if(initted){
- if(delete_line){
+ if(parm_delete_line){
min_mvcur(0,0);
- min_putp(tparm(delete_line,panel_lines));
+ min_putp(tparm(parm_delete_line,panel_lines));
}
min_showcur();
min_flush();
@@ -454,7 +454,14 @@
return 1;
}
-static int unset_attributes(){
+static int fg=-1;
+static int bg=-1;
+static int bold=0;
+static int blink=0;
+static int rev=0;
+static int ul=0;
+
+static int unset(){
if(exit_attribute_mode){
min_putp(exit_attribute_mode);
return 0;
@@ -462,25 +469,128 @@
return 1;
}
+int min_unset(){
+ fg=-1;
+ bg=-1;
+ bold=0;
+ if(ul){
+ min_underline(0);
+ ul=0;
+ }
+ return unset();
+}
+
+static int reset(){
+ int ret=0;
+ if(fg>=0)ret|=min_fg(fg);
+ if(bg>=0)ret|=min_bg(bg);
+ if(bold)ret|=min_bold(1);
+ if(blink)ret|=min_blink(1);
+ if(rev)ret|=min_reverse(1);
+ return ret;
+}
+
int min_fg(int c){
- if(set_a_foreground){
- min_putp(tparm(set_a_foreground,c));
- return 0;
- }else
- return 1;
+ int ret=0;
+ if(c<0 && fg>=0){
+ fg=-1;
+ ret|=unset();
+ ret|=reset();
+ }else{
+ if(set_a_foreground){
+ fg=c;
+ min_putp(tparm(set_a_foreground,c));
+ }else
+ ret=1;
+ }
+ return ret;
}
int min_bg(int c){
- if(set_a_background){
- min_putp(tparm(set_a_background,c));
- return 0;
- }else
- return 1;
+ int ret=0;
+ if(c<0 && bg>=0){
+ bg=-1;
+ ret|=unset();
+ ret|=reset();
+ }else{
+ if(set_a_background){
+ bg=c;
+ min_putp(tparm(set_a_background,c));
+ }else
+ ret=1;
+ }
+ return ret;
}
-void min_color(int f,int b){
- if(f==-1 || b==-1) unset_attributes();
- if(f!=-1) min_fg(f);
- if(b!=-1) min_bg(b);
+int min_bold(int flag){
+ int ret=0;
+ if(!flag && bold){
+ bold=0;
+ ret|=unset();
+ ret|=reset();
+ }else{
+ if(enter_bold_mode){
+ min_putp(enter_bold_mode);
+ bold=1;
+ }else
+ ret=1;
+ }
+ return ret;
}
+int min_color(int f,int b){
+ int ret=0;
+ ret|=min_fg(f);
+ ret|=min_bg(b);
+ return ret;
+}
+
+int min_blink(int flag){
+ int ret=0;
+ if(!flag && blink){
+ blink=0;
+ ret|=unset();
+ ret|=reset();
+ }else{
+ if(enter_blink_mode){
+ min_putp(enter_blink_mode);
+ blink=1;
+ }else
+ ret=1;
+ }
+ return ret;
+}
+
+int min_underline(int flag){
+ if(flag){
+ if(enter_underline_mode){
+ ul=1;
+ min_putp(enter_underline_mode);
+ return 0;
+ }else
+ return 1;
+ }else{
+ if(exit_underline_mode){
+ ul=0;
+ min_putp(exit_underline_mode);
+ return 0;
+ }else
+ return 1;
+ }
+}
+
+int min_reverse(int flag){
+ int ret=0;
+ if(!flag && rev){
+ rev=0;
+ ret|=unset();
+ ret|=reset();
+ }else{
+ if(enter_reverse_mode){
+ min_putp(enter_reverse_mode);
+ rev=1;
+ }else
+ ret=1;
+ }
+ return ret;
+}
Modified: trunk/squishyball/mincurses.h
===================================================================
--- trunk/squishyball/mincurses.h 2010-11-25 22:26:20 UTC (rev 17661)
+++ trunk/squishyball/mincurses.h 2010-11-26 16:29:22 UTC (rev 17662)
@@ -25,6 +25,7 @@
#ifndef _MINCURSES_H_
#define _MINCURSES_H_
+extern int min_flush();
extern int min_getch(int nonblock);
extern int min_putchar(int c);
extern int min_putp(const char *str);
@@ -39,8 +40,13 @@
extern int min_clrbol(void);
extern int min_gfxmode(void);
extern int min_textmode(void);
+
+extern int min_unset(void);
extern int min_fg(int c);
extern int min_bg(int c);
-extern void min_color(int f,int b);
-
+extern int min_color(int f,int b);
+extern int min_bold(int flag);
+extern int min_blink(int flag);
+extern int min_underline(int flag);
+extern int min_reverse(int flag);
#endif
Modified: trunk/squishyball/tty.c
===================================================================
--- trunk/squishyball/tty.c 2010-11-25 22:26:20 UTC (rev 17661)
+++ trunk/squishyball/tty.c 2010-11-26 16:29:22 UTC (rev 17662)
@@ -31,9 +31,45 @@
#include <unistd.h>
#include <math.h>
#include <errno.h>
+#include "main.h"
#include "mincurses.h"
-#if 0
+/*
+
+- CASUAL COMPARISON MODE ------------------------------------- 2ch 24bit 44100 -
+
+PLAYING A 00:00:00.00 | 00:00:00.00 | 00:00:00.00 00:00:00.00
+OOOOOOOOOOOOOOOOOOOHHHHHHHHHHHHH|HHHHHHHHHHHHHHHHHHHHH00000000000000000000000000
+ ^
++------------------------------------------------- REPEAT AFTER - SILENT FLIP -+
+| 6/10 trials: ABABAA |
++------------------------------------------------------------------------------+
+
+*/
+
+static int p_tm,p_ch,p_b,p_r,p_fm,p_rm,pcm_n,p_tr,p_tn,p_pau;
+static double p_st,p_cur,p_end,p_len;
+static char p_pl, *p_tl;
+static pcm_t **pcm_p;
+
+static char timebuffer[80];
+char *make_time_string(double s,int pad){
+ long hrs=s/60/60;
+ long min=s/60-hrs*60;
+ long sec=s-hrs*60*60-min*60;
+ long hsec=(s-(int)s)*100;
+ if(pad){
+ snprintf(timebuffer,80,"%02ld:%02ld:%02ld.%02ld",hrs,min,sec,hsec);
+ }else if(hrs>0){
+ snprintf(timebuffer,80,"%ld:%02ld:%02ld.%02ld",hrs,min,sec,hsec);
+ }else if(min>0){
+ snprintf(timebuffer,80,"%ld:%02ld.%02ld",min,sec,hsec);
+ }else{
+ snprintf(timebuffer,80,"%ld.%02ld",sec,hsec);
+ }
+ return timebuffer;
+}
+
void fill(char *buf,char c,int cols){
int i;
for(i=0;i<cols;i++)
@@ -41,7 +77,7 @@
buf[i]=0;
}
-void printover(char *buf,int pos, char *s){
+void print_into(char *buf,int pos, char *s){
int len = strlen(buf);
int len2 = strlen(s);
int i;
@@ -49,32 +85,344 @@
buf[i+pos]=s[i];
}
-void printhline(char *s,int textcolor){
- int pos=0,last=0;
+void panel_update_playing(char c){
+}
- while(s[pos]){
- /* draw line */
- while(s[pos] && s[pos]=='_')pos++;
- if(pos>last){
- if(!min_gfxmode()){
- for(;last<pos;last++)
- min_putchar(ACS_HLINE);
- min_textmode();
- }else{
- min_write(s+last,pos-last);
- }
+void panel_update_start(double time){
+
+}
+void panel_update_current(double time){
+
+}
+void panel_update_end(double time){
+
+}
+
+void panel_update_repeat_mode(int mode){
+
+}
+
+void panel_update_flip_mode(int mode){
+
+}
+
+void panel_update_trials(char *trial_list){
+
+}
+
+void panel_update_sample(int n){
+
+}
+void panel_update_pause(int flag){
+
+}
+
+static void draw_topbar(void){
+ char buf[columns+1];
+ char buf2[columns+1];
+
+ fill(buf,ACS_HLINE,columns);
+ min_mvcur(0,1);
+ min_gfxmode();
+ min_putstr(buf);
+ min_textmode();
+
+ min_mvcur(1,1);
+ switch(p_tm){
+ case 0:
+ min_putstr(" A/B MODE ");
+ break;
+ case 1:
+ min_putstr(" A/B/X MODE ");
+ break;
+ case 2:
+ min_putstr(" X/X/Y MODE ");
+ break;
+ case 3:
+ min_putstr(" CASUAL COMPARISON MODE ");
+ break;
+ }
+
+ sprintf(buf2," %dch %dbit %dHz ",p_ch,p_b,p_r);
+
+ min_mvcur(columns-strlen(buf2)-1,1);
+ min_putstr(buf2);
+}
+
+static void draw_timebar(void){
+ int pre = rint(p_st/p_len*columns);
+ int post = rint((p_len-p_end)/p_len*columns);
+ int cur = rint(p_cur/(p_len-1)*columns);
+ char buf[columns+1];
+ int i;
+
+ /* first line: spacing */
+ min_mvcur(0,2);
+ fill(buf,' ',columns);
+ min_putstr(buf);
+
+ /* second line: timing */
+ min_mvcur(0,3);
+ if(p_pau){
+ min_blink(1);
+ min_putstr("PAUSED ");
+ min_blink(0);
+ }else{
+ min_putstr("PLAYING ");
+ switch(p_tm){
+ case 0: /* AB */
+ case 1: /* ABX */
+ min_putchar(p_pl+'A');
+ break;
+ case 2: /* XXY*/
+ case 3: /* Casual */
+ min_putchar(p_pl+'1');
+ break;
}
+ }
- /* draw text */
- while(s[pos] && s[pos]!='_')pos++;
- if(pos>last){
- if(textcolor>=0)
- min_fg(textcolor);
- min_write(s+last,pos-last);
- if(textcolor>=0)
- min_color(-1,-1);
- last = pos;
+ for(i=9;i<columns/2-19;i++)
+ min_putchar(' ');
+
+ if(p_st<=0.f){
+ min_fg(COLOR_CYAN);
+ min_putstr("xx:xx:xx.xx");
+ min_fg(-1);
+ }else{
+ char *time=make_time_string(p_st,1);
+ min_putstr(time);
+ }
+ min_putstr(" | ");
+ {
+ char *time=make_time_string(p_cur,1);
+ min_putstr(time);
+ }
+ min_putstr(" | ");
+ if(p_end>=p_len){
+ min_fg(COLOR_CYAN);
+ min_putstr("xx:xx:xx.xx");
+ min_fg(-1);
+ }else{
+ char *time=make_time_string(p_end,1);
+ min_putstr(time);
+ }
+
+ for(i=columns/2+20;i<columns-11;i++)
+ min_putchar(' ');
+ {
+ char *time=make_time_string(p_len,1);
+ min_putstr(time);
+ }
+
+ /* third line: indicator */
+ i=0;
+ min_mvcur(0,4);
+ if(pre>0){
+ min_bg(COLOR_CYAN);
+ while(i<pre){
+ min_putchar(' ');
+ i++;
}
}
+ min_color(COLOR_YELLOW,COLOR_BLACK);
+ min_bold(1);
+ while(i<cur){
+ min_putchar(' ');
+ i++;
+ }
+ min_putchar(ACS_VLINE);
+ i++;
+ while(i<(columns-post)){
+ min_putchar(' ');
+ i++;
+ }
+ min_bg(COLOR_CYAN);
+ while(i<columns){
+ min_putchar(' ');
+ i++;
+ }
+ min_bg(-1);
+
+ /* fourth line: spacing with indicator */
+ min_mvcur(0,5);
+ min_fg(COLOR_YELLOW);
+ min_bold(1);
+ i=0;
+ while(i<cur){
+ min_putchar(' ');
+ i++;
+ }
+ min_putchar(ACS_TTEE);
+ i++;
+ while(i<post){
+ min_putchar(' ');
+ i++;
+ }
+ min_unset();
}
-#endif
+
+static void draw_trials_box(void){
+ char buf[columns+1];
+
+ /* top line of box */
+ fill(buf,ACS_HLINE,columns);
+ buf[0]=ACS_ULCORNER;
+ buf[columns-1]=ACS_URCORNER;
+
+ switch(p_rm){
+ case 0:
+ break;
+ case 1:
+ print_into(buf,columns-31," RESTART AFTER ");
+ break;
+ case 2:
+ print_into(buf,columns-31," RESTART EVERY ");
+ break;
+ }
+ switch(p_fm){
+ case 1:
+ print_into(buf,columns-12," MARK FLIP ");
+ break;
+ case 2:
+ print_into(buf,columns-12," BEEP FLIP ");
+ break;
+ case 3:
+ print_into(buf,columns-14," SILENT FLIP ");
+ break;
+ }
+ min_mvcur(0,6);
+ min_putstr(buf);
+
+ /* trials line */
+ min_mvcur(0,7);
+ min_putchar(ACS_VLINE);
+ {
+ int l = strlen(p_tl);
+ sprintf(buf," %d/%d trials: ",l,p_tn);
+ min_putstr(buf);
+
+ l+=strlen(buf);
+ if(l>columns-4){
+ min_putstr("...");
+ min_putstr(p_tl+l-columns-7);
+ min_putchar(' ');
+ }else{
+ int i;
+ min_putstr(p_tl);
+ for(i=strlen(buf)+strlen(p_tl);i<columns-2;i++)
+ min_putchar(' ');
+ }
+ }
+ min_putchar(ACS_VLINE);
+
+ min_mvcur(0,8);
+ fill(buf,ACS_HLINE,columns);
+ buf[0]=ACS_LLCORNER;
+ buf[columns-1]=ACS_LRCORNER;
+ min_putstr(buf);
+}
+
+static void draw_samples_box(void){
+ char buf[columns+1];
+ int i;
+
+ /* top line of box */
+ fill(buf,ACS_HLINE,columns);
+ buf[0]=ACS_ULCORNER;
+ buf[columns-1]=ACS_URCORNER;
+
+ switch(p_rm){
+ case 0:
+ break;
+ case 1:
+ print_into(buf,columns-31," RESTART AFTER ");
+ break;
+ case 2:
+ print_into(buf,columns-31," RESTART EVERY ");
+ break;
+ }
+ switch(p_fm){
+ case 1:
+ print_into(buf,columns-12," MARK FLIP ");
+ break;
+ case 2:
+ print_into(buf,columns-12," BEEP FLIP ");
+ break;
+ case 3:
+ print_into(buf,columns-14," SILENT FLIP ");
+ break;
+ }
+ min_mvcur(0,6);
+ min_putstr(buf);
+
+ /* one line per sample, highlight the currently played sample */
+ for(i=0;i<pcm_n;i++){
+ min_mvcur(0,7+i);
+ min_putchar(ACS_VLINE);
+ fill(buf,' ',columns-3);
+ if(i==p_pl){
+ min_putchar('>');
+ min_bold(1);
+ }else
+ min_putchar(' ');
+
+ if(strlen(pcm_p[i]->path)>columns-4)
+ print_into(buf,0,pcm_p[i]->path+strlen(pcm_p[i]->path)-columns+4);
+ else
+ print_into(buf,0,pcm_p[i]->path);
+ min_putstr(buf);
+ if(i==p_pl)
+ min_bold(0);
+ min_putchar(ACS_VLINE);
+ }
+ min_mvcur(0,7+pcm_n);
+ fill(buf,ACS_HLINE,columns);
+ buf[0]=ACS_LLCORNER;
+ buf[columns-1]=ACS_LRCORNER;
+ min_putstr(buf);
+}
+
+void panel_redraw_full(void){
+ draw_topbar();
+ draw_timebar();
+
+ if(p_tm==3)
+ draw_samples_box();
+ else
+ draw_trials_box();
+ min_flush();
+}
+
+void panel_init(pcm_t **pcm, int test_files, int test_mode, double start, double end, double size,
+ int flip_mode,int repeat_mode,int trials,char *trial_list){
+ if(min_init_panel(test_mode==3 ? test_files+8:9)){
+ fprintf(stderr,"Unable to initialize terminal\n");
+ exit(101);
+ }
+
+ if(columns<70){
+ fprintf(stderr,"Squishball requires a >=70 column terminal to run.\n");
+ exit(102);
+ }
+
+ p_tm=test_mode;
+ p_ch=pcm[0]->ch;
+ p_b=pcm[0]->bits;
+ p_r=pcm[0]->rate;
+ p_pl=0;
+ p_st=start;
+ p_cur=start;
+ p_end=end;
+ p_len=size;
+ p_fm=flip_mode;
+ p_rm=repeat_mode;
+ p_tr=0;
+ p_tn=trials;
+ p_tl=strdup(trial_list);
+ pcm_n=test_files;
+ pcm_p=pcm;
+ p_pau=0;
+
+ min_hidecur();
+ panel_redraw_full();
+}
Deleted: trunk/squishyball/tty.h
===================================================================
--- trunk/squishyball/tty.h 2010-11-25 22:26:20 UTC (rev 17661)
+++ trunk/squishyball/tty.h 2010-11-26 16:29:22 UTC (rev 17662)
@@ -1,29 +0,0 @@
-/*
- *
- * squishyball
- *
- * Copyright (C) 2010 Xiph.Org
- *
- * squishyball is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * squishyball is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rtrecord; see the file COPYING. If not, write to the
- * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- */
-
-#ifndef _SB_TTY_H_
-#define _SB_TTY_H_
-
-
-
-#endif
More information about the commits
mailing list