Annotation of sbbs/tone/tone.c, revision 1.1

1.1     ! root        1: /* TONE.C */
        !             2: 
        !             3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
        !             4: 
        !             5: /* Test sound freqs and durations from command line */
        !             6: 
        !             7: #ifdef __OS2__
        !             8:        #define INCL_DOS
        !             9:        #include <os2.h>
        !            10: #endif
        !            11: #include <io.h>
        !            12: #include <dos.h>
        !            13: #include <math.h>
        !            14: #include <stdio.h>
        !            15: #include <string.h>
        !            16: #include <stdlib.h>
        !            17: #include <fcntl.h>
        !            18: 
        !            19: #ifdef __OS2__
        !            20:        #define mswait(x) DosSleep(x)
        !            21:        #define delay(x) DosSleep(x)
        !            22:        #define sound(x) DosBeep(x,0)
        !            23:        #define nosound() DosBeep(0,0)
        !            24: #endif
        !            25: 
        !            26: #define NOT_ABORTABLE  (1<<0)
        !            27: #define SHOW_DOT               (1<<1)
        !            28: #define SHOW_FREQ              (1<<2)
        !            29: #define NO_VISUAL              (1<<3)
        !            30: #define USE_MSWAIT             (1<<4)
        !            31: 
        !            32: #ifdef __OS2__
        !            33:        int mswtyp;
        !            34: #else
        !            35:        extern mswtyp;
        !            36: #endif
        !            37: 
        !            38: int aborted=0; /* Ctrl-C hit? */
        !            39: int mode=0;    /* Optional modes */
        !            40: int t=1;               /* Timing */
        !            41: int s=0;               /* Stacato */
        !            42: int octave=4;  /* Default octave */
        !            43: 
        !            44: double pitch=523.50/32.0;       /* low 'C' */
        !            45: 
        !            46: void play(char *freq, char *dur)
        !            47: {
        !            48:        char *notes="c d ef g a b";
        !            49:        char *sharp="BC D EF G A ";
        !            50:        int i,n,d,o=octave;
        !            51:        double f;
        !            52: 
        !            53: d=atoi(dur);
        !            54: if(isdigit(freq[0]))
        !            55:        f=atoi(freq);
        !            56: else
        !            57:        switch(toupper(freq[0])) {
        !            58:                case 'O':               /* default octave */
        !            59:                        if(isdigit(dur[0]))
        !            60:                                octave=d;
        !            61:                        else
        !            62:                                octave+=d;
        !            63:             return;
        !            64:                case 'P':               /* pitch variation */
        !            65:                        if(isdigit(dur[0]))
        !            66:                                pitch=atof(dur)/32.0;
        !            67:                        else
        !            68:                                pitch+=atof(dur);
        !            69:             return;
        !            70:                case 'Q':               /* quit */
        !            71:                        nosound();
        !            72:                        exit(0);
        !            73:                case 'R':               /* rest */
        !            74:             f=0;
        !            75:             break;
        !            76:                case 'S':               /* stacato */
        !            77:                        if(isdigit(dur[0]))
        !            78:                                s=d;
        !            79:                        else
        !            80:                                s+=d;
        !            81:                        return;
        !            82:                case 'T':               /* time adjust */
        !            83:                        t=d;
        !            84:             return;
        !            85:                case 'V':
        !            86:                        if(mode&NO_VISUAL)
        !            87:                                return;
        !            88:                        n=strlen(dur);
        !            89:                        while(n && dur[n]<=' ')
        !            90:                                n--;
        !            91:                        dur[n+1]=0;
        !            92:                        if(dur[n]=='\\') {
        !            93:                                dur[n]=0;
        !            94:                                printf("%s",dur); }
        !            95:                        else
        !            96:                                printf("%s\r\n",dur);
        !            97:                        return;
        !            98:                case 'X':               /* exit */
        !            99:                        exit(1);
        !           100:                default:
        !           101:                        for(n=0;notes[n];n++)
        !           102:                                if(freq[0]==notes[n] || freq[0]==sharp[n])
        !           103:                                        break;
        !           104:                        if(isdigit(freq[1]))
        !           105:                                o=(freq[1]&0xf);
        !           106:                        else
        !           107:                                o=octave;
        !           108:                        f=pitch*pow(2,o+(double)n/12);
        !           109:                        break; }
        !           110: if(!f)
        !           111:        nosound();
        !           112: else
        !           113:        sound(f);
        !           114: if(f && mode&SHOW_FREQ) {
        !           115:        for(i=0;freq[i]>' ';i++)
        !           116:                ;
        !           117:        freq[i]=0;
        !           118:        printf("%-4.4s",freq); }
        !           119: if(mode&SHOW_DOT)
        !           120:        printf(".");
        !           121: if(t>10) {
        !           122:        if(mode&USE_MSWAIT)
        !           123:                mswait((d*t)-(d*s));
        !           124:        else
        !           125:                delay((d*t)-(d*s)); }
        !           126: else {
        !           127:        if(mode&USE_MSWAIT)
        !           128:                mswait(d*t);
        !           129:        else
        !           130:                delay(d*t); }
        !           131: if(s) {
        !           132:        nosound();
        !           133:        if(t>10) {
        !           134:                if(mode&USE_MSWAIT)
        !           135:                        mswait(d*s);
        !           136:                else
        !           137:                        delay(d*s); }
        !           138:        else {
        !           139:                if(mode&USE_MSWAIT)
        !           140:                        mswait(s);
        !           141:                else
        !           142:                        delay(s); } }
        !           143: }
        !           144: 
        !           145: void usage(void)
        !           146: {
        !           147: printf("usage: tone [/opts] [(note[oct]|freq) dur | (cmd val) [...]] "
        !           148:        "[+filename]\n\n");
        !           149: printf("where: note  = a,b,c,d,e,f, or g (naturals) or A,B,C,D,E,F, or "
        !           150:        "G (sharps)\n");
        !           151: printf("       oct   = octave 1 through 9 (default=%d)\n",octave);
        !           152: printf("       freq  = frequency (in Hz) or 0 for silence\n");
        !           153: printf("       dur   = duration (in timer counts)\n");
        !           154: printf("       cmd   = o set default octave (+/- to adjust) "
        !           155:        "(default=%d)\n",octave);
        !           156: printf("               p set middle c pitch (+/- to adjust) "
        !           157:        "(default=%.2f)\n",pitch*32.0);
        !           158: printf("               q quit program immediately\n");
        !           159: printf("               r rest (silence) for val timer counts\n");
        !           160: printf("               s set stacato duration (in ms) (+/- to adjust) "
        !           161:        "(default=%d)\n",s);
        !           162: printf("               t set timer count value (in ms) "
        !           163:        "(default=%d)\n",t);
        !           164: printf("               v visual text diplay of val (no val=cr/lf)\n");
        !           165: printf("               x quit program immediately (leave tone on)\n");
        !           166: printf("       opts  = d display dot for each note\n");
        !           167: printf("               f display frequency or note value\n");
        !           168: printf("               n not abortable with key-stroke\n");
        !           169: printf("               v disable visual text commands\n");
        !           170: printf("               t use time-slice aware delays\n");
        !           171: exit(0);
        !           172: }
        !           173: 
        !           174: int cbreakh()  /* ctrl-break handler */
        !           175: {
        !           176: aborted=1;
        !           177: return(1);             /* 1 to continue, 0 to abort */
        !           178: }
        !           179: 
        !           180: void main(int argc, char **argv)
        !           181: {
        !           182:     char *p,str[128];
        !           183:        int i,j,file;
        !           184:        FILE *stream;
        !           185: 
        !           186: #ifndef __OS2__
        !           187: ctrlbrk(cbreakh);
        !           188: #endif
        !           189: 
        !           190: printf("\nTone Generation Utility  v1.01  Developed 1993 Rob Swindell\n\n");
        !           191: 
        !           192: if(argc<2)
        !           193:        usage();
        !           194: 
        !           195: mswtyp=0;
        !           196: delay(0);
        !           197: for(i=1;i<argc;i++) {
        !           198:        if(argv[i][0]=='/') {
        !           199:                for(j=1;argv[i][j];j++)
        !           200:                        switch(toupper(argv[i][j])) {
        !           201:                                case 'D':
        !           202:                                        mode^=SHOW_DOT;
        !           203:                                        break;
        !           204:                                case 'F':
        !           205:                                        mode^=SHOW_FREQ;
        !           206:                                        break;
        !           207:                                case 'N':
        !           208:                                        mode^=NOT_ABORTABLE;
        !           209:                                        break;
        !           210:                                case 'V':
        !           211:                                        mode^=NO_VISUAL;
        !           212:                                        break;
        !           213:                                case 'T':
        !           214:                                        mode^=USE_MSWAIT;
        !           215:                                        mswtyp=atoi(argv[i]+j+1);
        !           216:                                        while(isdigit(argv[i][j+1]))
        !           217:                                                j++;
        !           218:                                        break;
        !           219:                                default:
        !           220:                                        usage(); }
        !           221:                continue; }
        !           222:        if(argv[i][0]=='+') {
        !           223:                if((file=open(argv[i]+1,O_RDONLY|O_DENYNONE|O_BINARY))==-1
        !           224:                        || (stream=fdopen(file,"rb"))==NULL) {
        !           225:                        strcpy(str,argv[0]);
        !           226:                        p=strrchr(str,'\\');
        !           227:                        if(p)
        !           228:                                *(p+1)=0;
        !           229:                        strcat(str,argv[i]+1);
        !           230:                        if((file=open(str,O_RDONLY|O_DENYNONE|O_BINARY))==-1
        !           231:                                || (stream=fdopen(file,"rb"))==NULL) {
        !           232:                                printf("\7Error opening %s\n",argv[i]+1);
        !           233:                                exit(1); } }
        !           234:                while(mode&NOT_ABORTABLE || !kbhit()) {
        !           235:                        if(!fgets(str,81,stream))
        !           236:                                break;
        !           237:                        if(!isalnum(str[0]))
        !           238:                                continue;
        !           239:                        p=str;
        !           240:                        while(*p>' ')
        !           241:                                p++;
        !           242:                        while(*p && *p<=' ')
        !           243:                                p++;
        !           244:                        play(str,p); }
        !           245:                fclose(stream);
        !           246:                continue; }
        !           247:        play(argv[i],argv[i+1]);
        !           248:        i++;
        !           249:        if(aborted)
        !           250:                break; }
        !           251: nosound();
        !           252: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.