94
94
static int charbychar = 0;
95
95
static int international = 0;
96
96
static int allprosigns = 0;
97
static int allpunctuation = 1;
97
static int allpunctuation = 0;
98
98
static int tryagaincount = 1;
99
99
static float words_per_minute = WORDS_PER_MINUTE;
100
100
static float error_frequency = ERROR_FREQUENCY;
350
/* DGHJKLMOPQUVWYZhjkouyz are still available */
351
while ((ch = getopt (argc, argv, "ABC:E:F:IM:N:R:STXabcdef:g:ilmn:p:qrstv:w:x:")) != EOF)
361
user_charset = optarg;
365
sscanf (optarg, "%d", &error_threshold);
366
if (error_threshold < error_floor)
367
error_floor = error_threshold;
370
sscanf (optarg, "%f", &fwords_per_minute);
377
sscanf (optarg, "%d", &max_behindness);
378
if (max_behindness < 1)
382
sscanf (optarg, "%d", &wordcount);
383
if (wordcount < 1) wordcount = -1;
386
sscanf (optarg, "%d", &timeout);
388
if (timeout < 1) timeout = -1;
398
sscanf (optarg, "%f", &error_volume);
416
sscanf (optarg, "%f", &frequency1);
419
sscanf (optarg, "%f", &frequency2);
431
sscanf (optarg, "%d", &wordlen);
432
if (wordlen < 1) wordlen = 1;
433
if (wordlen > MAXWORDLEN) wordlen = MAXWORDLEN;
438
sscanf (optarg, "%d", &tryagaincount);
454
sscanf (optarg, "%f", &volume);
461
sscanf (optarg, "%f", &words_per_minute);
464
sscanf (optarg, "%f", &error_frequency);
467
fprintf (stderr, "Type \"morse\" without arguments to get self-doc!\n");
474
if (fwords_per_minute <= 0.)
475
fwords_per_minute = words_per_minute;
476
new_words_per_minute ();
478
frequency = frequency1;
480
if (BeepInit () != 0)
482
fprintf (stderr, "Can't access speaker.\n");
349
486
for (ii = 0; ii < TWOFIFTYSIX; ii++)
405
542
code[(int) ';'] = "-.-.-.";
406
543
code[(int) '$'] = "...-..-";
407
544
code[(int) '!'] = "-.-.--";
545
code[(int) '@'] = ".--.-.";
548
if (allpunctuation) {
410
549
/* Commonly used procedure signs ("prosigns") */
411
550
code[(int) '+'] = ".-.-."; /* <AR> end of message */
412
551
code[(int) '*'] = ".-..."; /* <AS> wait, stand-by */
413
552
code[(int) '='] = "-...-"; /* <BT> (double dash) pause, break for text */
414
553
code[(int) '('] = "-.--."; /* <KN> over-specified station only */
415
554
code[(int) '%'] = "...-.-"; /* <SK> end of contact, known also as <VA> */
417
557
if (allprosigns) {
418
558
/* Not so commonly used procedure signs ("prosigns") */
419
559
code[(int) '^'] = ".-.-"; /* <AA> new line, the same as :a, ae */
420
560
code[(int) '#'] = "-...-.-";/* <BK> invite receiving station to transmit */
421
561
code[(int) '&'] = "-.-.-"; /* <KA> attention */
422
code[(int) '@'] = "...-."; /* <SN> understood */
562
code[(int) '~'] = "...-."; /* <SN> understood */
425
565
if (international) {
437
577
code[(int) ((unsigned char)'\247')] = ".-.-.."; /* paragraph */
582
for (ii = 0; ii < strlen(user_charset); ii++)
584
*(user_charset+ii) = tolower(*(user_charset+ii));
586
for (ii = 0; ii < TWOFIFTYSIX; ii++)
588
if (code[ii] != NULL)
590
if (strchr(user_charset, ii) != NULL)
592
randomfactor[ii] = RANDOMBASELEVEL - 1;
595
randomfactor[ii] = 0;
440
601
for (ii = 0; ii < TWOFIFTYSIX; ii++)
442
603
/* Everything starts equally fresh */
461
622
words_per_minute = WORDS_PER_MINUTE;
462
623
fwords_per_minute = -1.;
464
/* DGHJKLMOPQUVWYZhjkouyz are still available */
465
while ((ch = getopt (argc, argv, "ABC:E:F:IM:N:R:STXabcdef:g:ilmn:p:qrstv:w:x:")) != EOF)
475
for (ii = 0; ii < strlen(optarg); ii++)
477
*(optarg+ii) = tolower(*(optarg+ii));
479
for (ii = 0; ii < TWOFIFTYSIX; ii++)
481
if (code[ii] != NULL)
483
if (strchr(optarg, ii) != NULL)
485
randomfactor[ii] = RANDOMBASELEVEL - 1;
488
randomfactor[ii] = 0;
495
sscanf (optarg, "%d", &error_threshold);
496
if (error_threshold < error_floor)
497
error_floor = error_threshold;
500
sscanf (optarg, "%f", &fwords_per_minute);
507
sscanf (optarg, "%d", &max_behindness);
508
if (max_behindness < 1)
512
sscanf (optarg, "%d", &wordcount);
513
if (wordcount < 1) wordcount = -1;
516
sscanf (optarg, "%d", &timeout);
518
if (timeout < 1) timeout = -1;
528
sscanf (optarg, "%f", &error_volume);
546
sscanf (optarg, "%f", &frequency1);
549
sscanf (optarg, "%f", &frequency2);
561
sscanf (optarg, "%d", &wordlen);
562
if (wordlen < 1) wordlen = 1;
563
if (wordlen > MAXWORDLEN) wordlen = MAXWORDLEN;
568
sscanf (optarg, "%d", &tryagaincount);
584
sscanf (optarg, "%f", &volume);
591
sscanf (optarg, "%f", &words_per_minute);
594
sscanf (optarg, "%f", &error_frequency);
597
fprintf (stderr, "Type \"morse\" without arguments to get self-doc!\n");
604
if (fwords_per_minute <= 0.)
605
fwords_per_minute = words_per_minute;
606
new_words_per_minute ();
608
frequency = frequency1;
610
if (BeepInit () != 0)
612
fprintf (stderr, "Can't access speaker.\n");
616
625
time(&starttime);
618
627
handler.sa_handler = die;
1243
1252
printf ("<KN>");
1244
1253
else if (c == '%' && showmorse)
1245
1254
printf ("<SK>");
1247
else if (c == '^' && (code[(int) '^'] != NULL) && showmorse)
1249
else if (c == '#' && showmorse)
1251
else if (c == '&' && showmorse)
1253
else if (c == '@' && showmorse)
1255
else if (allprosigns) {
1256
if (c == '^' && (code[(int) '^'] != NULL) && showmorse)
1258
else if (c == '#' && showmorse)
1260
else if (c == '&' && showmorse)
1262
else if (c == '~' && showmorse)
1257
1266
printf ("%c", c);