OSDN Git Service

20080723
[linuxcw/linuxcw.git] / linuxcw / tools / cwread.c
1
2 #include<stdio.h>
3 #include<stdlib.h>
4 #include"libbeep.h"
5 #include"libcw.h"
6 #include"cwread.h"
7
8 // char * filenames;
9
10
11 int main(int argc, char ** argv)
12 {
13 int fd;
14 FILE * fp;
15 char chA, chB;
16
17 fd = -1;
18 chA = 0x00;
19 chB = 0x00;
20 filenames = (char *)calloc(2, sizeof(char));
21
22 // cw用の構造体を定義します。
23 cw_length cw_len;
24
25 // デフォルトの符号データベースを初期化
26 cw_default_memset(&cw_len);
27
28 // デフォルトの信号の長さ(3)と周波数(2)を設定
29 cw_defaultset(&cw_len, 700, 80);
30
31 optin(argc, argv, &cw_len);
32
33 // beepデバイスファイルを開いてFDを得る
34 fd = beep_fdopen(fd);
35
36
37 if((fp = fopen(filenames, "r"))!=NULL){
38    printf("open file name <%s>\n", filenames);
39    while( chA != EOF ){
40       chA=(char)fgetc(fp);
41       if(chA == '<'){
42          cw_len.cs = 0;
43          #ifdef CWREAD_BUG
44          printf("CWREAD_BUG main(): up line set.\n");
45          #endif
46          }
47       else if(chA == '>'){
48          cw_len.cs = cw_len.sp * 2;
49          #ifdef CWREAD_BUG
50          printf("CWREAD_BUG main(): up line break.\n");
51          #endif
52          }
53       else {
54          if(chA == ' '){
55             if(chB == ' '){ 
56                cw_sign(&cw_len, fd, '*');
57                #ifdef CWREAD_BUG
58                printf("CWREAD_BUG main(): sleep1\n");
59                #endif
60                }
61             else{
62                beep_sleep(cw_len.ws - cw_len.cs);
63                #ifdef CWREAD_BUG
64                printf("CWREAD_BUG main(): sleep2\n");
65                #endif
66                }
67             }
68          else{
69             cw_sign(&cw_len, fd, chA);
70             cw_sign(&cw_len, fd, ' ');
71             }
72          chB = chA;
73          }
74       }
75    fclose( fp );
76    }
77
78 else {
79    printf("file not open. stdin open.\n");
80    while( chA != EOF ){
81       chA=(char)fgetc(stdin);
82       if(chA == '<'){
83          cw_len.cs = 0;     // 前の文字の後ろに1スペース入っているので0
84          #ifdef CWREAD_BUG
85          printf("CWREAD_BUG main(): up line set.\n");
86          #endif
87          }
88       else if(chA == '>'){
89          cw_len.cs = cw_len.sp * 2;  // 前の文字の後ろに1スペースあるので2
90          #ifdef CWREAD_BUG
91          printf("CWREAD_BUG main(): up line break.\n");
92          #endif
93          }
94       else {
95          if(chA == ' '){
96             if(chB == ' '){ 
97                cw_sign(&cw_len, fd, '*');
98                #ifdef CWREAD_BUG
99                printf("CWREAD_BUG main(): sleep1\n");
100                #endif
101                }
102             else{
103                beep_sleep(cw_len.ws - cw_len.cs);
104                #ifdef CWREAD_BUG
105                printf("CWREAD_BUG main(): sleep2\n");
106                #endif
107                }
108             }
109          else{
110             cw_sign(&cw_len, fd, chA);
111             cw_sign(&cw_len, fd, ' ');
112             }
113          chB = chA;
114          }
115       }
116    }
117
118
119 // 符号データベースの検索
120 // キャラから番号検索
121 // printf("char_no(): %d\n", char_no(&cw_len, 'a'));
122 // 符号列から番号検索
123 // printf("note_no(): %d\n", note_no(&cw_len, "-.-."));
124
125 // 指定された文字列からCWを鳴らす関数
126 // デフォの設定は。。。
127 // 短点          '.'
128 // 長点          '-'
129 // 文字間の空白  ' '
130 // 単語間の空白  '*'
131 // それ意外の文字は何も起こらないが電気とあなたの労働力の無駄。
132 // beep_bufout(&cw_len, fd, ".... .-.*.... .-.*.... .-.***.-,-.*. .***");
133
134 // 単純にローマ字を指定し、音を出してみる。
135 //   cw_sign(&cw_len, fd, 'c');
136
137 // さも返事ああったかのように、周波数とスピードを少々変えてみます。(笑い)
138 // cw_defaultset(&cw_len, 880, 70);
139
140
141 // beepのFDを開放し終了。
142 beep_close(fd);
143
144 return 0;
145 }
146
147
148
149