#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
/* #include <linux/soundcard.h> */
#include <curses.h>
#include <wav.h>
#include <ncinput.h>
#include "mfjterm.h"
#include "inout.h"
#include "misc.h"
#include "timefuncs.h"
void set_spd(int k)
{
char s[80];
int *spd = NULL;
char *cmdstr = NULL;
char **sstr = NULL;
int limit = 0;
if ((opmode != ASCII) && (opmode != RTTY) && (opmode != PACTOR))
return;
switch (opmode) {
case ASCII:
spd = &ascii_spd;
cmdstr = ascii_cmd_str[ascii_shift];
sstr = speed_str;
limit = 8;
break;
case RTTY:
spd = &rtty_spd;
cmdstr = rtty_cmd_str[rtty_shift];
sstr = speed_str;
limit = 8;
break;
case PACTOR:
spd = &pactor_spd;
sstr = pactspeed_str;
limit = 1;
}
switch (k){
case KEY_LEFT:
if ((--(*spd)) < 0)
(*spd) = limit;
break;
case KEY_RIGHT:
if ((++(*spd)) > limit)
(*spd) = 0;
}
if (opmode != PACTOR) {
write_tnc(0x03);
zleep(20);
write_tnc(0x0A);
strcpy(s,"");
strcat(s,cmdstr);
strcat(s,speed_str[(*spd)]);
send_string(s,1);
send_string("CONV",1);
}
attrset(A_REVERSE);
curs_set(0);
move(0, 65);
sprintf(s, "Speed: %-3s", sstr[*spd]);
addstr(s);
refresh();
move(tnc_y, tnc_x);
curs_set(1);
}
void set_inv(void)
{
if ((opmode != AMTOR) && (opmode != RTTY) && (opmode != ASCII))
return;
delta_inv = 0;
switch (opmode) {
case AMTOR:
amtor_inv ^= 1;
send_string(a_rinv_str[amtor_inv],1);
send_string(a_tinv_str[amtor_inv],1);
delta_inv = amtor_inv;
break;
case ASCII:
ascii_inv ^= 1;
write_tnc(0x03);
zleep(20);
write_tnc(0x0A);
send_string(b_rinv_str[ascii_inv],1);
send_string(b_tinv_str[ascii_inv],1);
send_string("CONV",1);
delta_inv = ascii_inv;
break;
case RTTY:
rtty_inv ^= 1;
write_tnc(0x03);
zleep(20);
write_tnc(0x0A);
send_string(b_rinv_str[rtty_inv],1);
send_string(b_tinv_str[rtty_inv],1);
send_string("CONV",1);
delta_inv = rtty_inv;
}
if (delta_inv)
attrset(A_NORMAL);
else
attrset(A_REVERSE);
curs_set(0);
move(19, 75);
addch(modesign[opmode]);
if (! delta_shift)
attrset(A_REVERSE);
addch(shiftsign[delta_shift]);
refresh();
move(tnc_y, tnc_x);
curs_set(1);
}
void set_shift(void)
{
char s[50];
int spd;
char *cmdstr;
if ((opmode != RTTY) && (opmode != ASCII))
return;
if (opmode == ASCII) {
ascii_shift ^= 1;
delta_shift = ascii_shift;
spd = ascii_spd;
cmdstr = ascii_cmd_str[ascii_shift];
} else {
rtty_shift ^= 1;
delta_shift = rtty_shift;
spd = rtty_spd;
cmdstr = rtty_cmd_str[rtty_shift];
}
write_tnc(0x03);
zleep(20);
write_tnc(0x0A);
strcpy(s,"");
strcat(s,cmdstr);
strcat(s,speed_str[spd]);
send_string(s,1);
send_string("CONV",1);
if (delta_inv && delta_shift)
attrset(A_NORMAL);
else
attrset(A_REVERSE);
curs_set(0);
move(19,76);
addch(shiftsign[delta_shift]);
refresh();
move(tnc_y, tnc_x);
curs_set(1);
}
void set_usos(int on)
{
char s[80];
write_tnc(0x03);
zleep(20);
write_tnc(0x0A);
send_string(usos_str[on], 1);
send_string("CONV", 1);
attrset(A_REVERSE);
curs_set(0);
move(0, 52);
sprintf(s, "%s", usos_str2[usos]);
addstr(s);
refresh();
move(tnc_y, tnc_x);
curs_set(1);
}
void switch_fec(int on)
{
switch(opmode){
case AMTOR:
if (on) {
send_string("FEC",1);
zleep(20);
send_string("K",1);
transmit = TRUE;
} else {
transmit = FALSE;
write_tnc(3);
zleep(20);
send_string("R",1);
}
break;
case PACTOR:
if (on) {
send_string(pactor_fec_cmd[pactor_spd],1);
transmit = TRUE;
} else {
transmit = FALSE;
write_tnc(3);
zleep(20);
send_string("D",1);
}
}
}
void set_scancrit(void)
{
attrset(A_REVERSE);
move(19, 1);
addstr("String to scan for: ");
edgets(stdscr, scancrit, 30, FALSE);
move(19, 1);
addstr(" ");
if (strlen(scancrit)) {
scan = TRUE;
strcpy(scanstr," ");
} else
scan = FALSE;
curs_set(0);
move(0,78);
addch(scansign[scan]);
refresh();
move(tnc_y, tnc_x);
curs_set(1);
}
void sound_alarm(void)
{
int i;
#if 0
if (use_dsp_as_alarm) {
sprintf(samp_name, "%s%s", lib_path, "/alarm.wav");
play_wav(samp_name);
} else {
for (i = 0; i < 10; i++) {
putchar(7);
zleep(10);
}
}
#endif
for (i = 0; i < 10; i++) {
putchar(7);
zleep(10);
}
strcpy(scanstr," ");
}
void show_help(void)
{
char cmd_str[161];
char amt_hlp_path[81];
static char pager_parms[31];
if (! pager[0]) return;
attrset(A_REVERSE);
move(19, 1);
addstr("Optional parameters: ");
refresh();
edgets(stdscr, pager_parms, 30, FALSE);
move(19, 1);
addstr(" ");
refresh();
setscrreg(0, 24);
attrset(A_NORMAL);
endwin();
sprintf(amt_hlp_path, "%s%s", lib_path, "/mfjterm.hlp");
sprintf(cmd_str, "%s %s %s", pager, pager_parms, amt_hlp_path);
system(cmd_str);
old_min = 0xffff;
move(tnc_y, tnc_x);
refresh();
}
void invoke_editor(void)
{
setscrreg(0, 24);
attrset(A_NORMAL);
endwin();
system(editor);
old_min = 0xffff;
move(tnc_y, tnc_x);
refresh();
}
void bbs_capture(void)
{
bbs_cap ^= 1;
attrset(A_REVERSE);
curs_set(0);
move(0, 52);
if (bbs_cap) {
addstr("BBS capture");
} else
addstr(" ");
strcpy(scanstr," ");
move(tnc_y, tnc_x);
curs_set(1);
}
void open_bbs_capf(int mode)
{
static char *fname[2] = {"fbb.txt", "mail.txt"};
bbs_capf = fopen(fname[mode], "a");
bbs_capf_open = TRUE;
}
void close_bbs_capf()
{
fclose(bbs_capf);
strcpy(scanstr," ");
bbs_capf_open = FALSE;
}