#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <curses.h>
#include "mfjterm.h"
#include "misc.h"
#include "inout.h"
#include "timefuncs.h"
void set_tnc_params(void)
{
char s[50];
int speed_mode;
int speed;
delta_inv=FALSE;
delta_shift=0;
speed=0;
speed_mode = FALSE;
strcpy(s,"");
if (last_opmode == PACTOR) {
write_tnc(0x03);
zleep(20);
send_string("EXIT",1);
zleep(20);
write_tnc(0x0A);
zleep(20);
} else {
write_tnc(0x03);
zleep(20);
write_tnc(0x03);
zleep(20);
write_tnc(0x0A);
zleep(20);
}
if (last_opmode == AMTOR){
send_string("ECHO OFF", 1);
zleep(20);
}
switch (opmode){
case AMTOR:
send_string("RADIO 1",1);
zleep(10);
send_string("ECHO ON",1);
zleep(20);
send_string("MODE AMTOR",1);
zleep(50);
while (! chk_incoming());
read_tnc();
send_string(a_rinv_str[amtor_inv], 1);
send_string(a_tinv_str[amtor_inv], 1);
delta_inv = amtor_inv;
last_opmode = AMTOR;
break;
case ASCII:
send_string("RADIO 1",1);
zleep(10);
send_string(b_rinv_str[ascii_inv],1);
send_string(b_tinv_str[ascii_inv],1);
zleep(10);
strcat(s,ascii_cmd_str[ascii_shift]);
strcat(s,speed_str[ascii_spd]);
send_string(s,1);
zleep(10);
send_string("CONV",1);
delta_inv=ascii_inv;
delta_shift=ascii_shift;
speed=ascii_spd;
speed_mode = TRUE;
last_opmode = ASCII;
break;
case RTTY:
send_string("RADIO 1",1);
zleep(10);
send_string(usos_str[usos],1);
zleep(10);
send_string(b_rinv_str[rtty_inv],1);
send_string(b_tinv_str[rtty_inv],1);
zleep(10);
strcat(s,rtty_cmd_str[rtty_shift]);
strcat(s,speed_str[rtty_spd]);
send_string(s,1);
zleep(10);
send_string("CONV",1);
delta_inv = rtty_inv;
delta_shift = rtty_shift;
speed=rtty_spd;
speed_mode = TRUE;
last_opmode = RTTY;
break;
case PACTOR:
send_string("RADIO 1",1);
zleep(10);
send_string("MODE PT",1);
speed_mode = TRUE;
last_opmode = PACTOR;
break;
case HPKT:
send_string("DEADTIME 12",1);
zleep(5);
send_string("ACKTIME 52",1);
zleep(5);
send_string("DWAIT 0",1);
zleep(5);
send_string("RESPTIME 0",1);
zleep(5);
send_string("MAXFRAME 1",1);
zleep(5);
send_string("FRACK 8",1);
zleep(5);
send_string("PACLEN 40",1);
zleep(5);
send_string("RADIO 1",1);
zleep(10);
send_string("MODE HP",1);
last_opmode = HPKT;
break;
case VPKT:
send_string("DEADTIME 33",1);
zleep(5);
send_string("ACKTIME 13",1);
zleep(5);
send_string("RESPTIME 0",1);
zleep(5);
send_string("DWAIT 0",1);
zleep(5);
send_string("MAXFRAME 4",1);
zleep(5);
send_string("FRACK 3",1);
zleep(5);
send_string("PACLEN 128",1);
zleep(5);
send_string("RADIO 2",1);
zleep(10);
send_string("MODE VP",1);
last_opmode = VPKT;
break;
}
if (delta_inv)
attrset(A_NORMAL);
else
attrset(A_REVERSE);
move(19, 75);
addch(modesign[opmode]);
if (! delta_shift)
attrset(A_REVERSE);
addch(shiftsign[delta_shift]);
attrset(A_REVERSE);
move(0, 52);
if (opmode == RTTY) {
sprintf(s, "%s", usos_str2[usos]);
} else
sprintf(s, " ");
addstr(s);
move(0, 65);
if (speed_mode) {
if (opmode == PACTOR)
sprintf(s, "Speed: %-3s", pactspeed_str[pactor_spd]);
else
sprintf(s, "Speed: %-3s", speed_str[speed]);
addstr(s);
} else
addstr(" ");
move(tnc_y, tnc_x);
refresh();
}
void change_opmode(void)
{
int k;
attrset(A_REVERSE);
curs_set(0);
move(19, 1);
addstr("Enter new opmode (A)MTOR A(S)CII (R)TTY (P)ACTOR (V)PKT (H)PKT");
nodelay(stdscr, FALSE);
k = getch();
nodelay(stdscr, TRUE);
move(19, 1);
addstr(" ");
move(tnc_y, tnc_x);
curs_set(1);
switch (k){
case 'a':
case 'A':
opmode = AMTOR;
break;
case 's':
case 'S':
opmode = ASCII;
break;
case 'r':
case 'R':
opmode = RTTY;
break;
case 'p':
case 'P':
opmode = PACTOR;
break;
case 'v':
case 'V':
opmode = VPKT;
break;
case 'h':
case 'H':
opmode = HPKT;
break;
default :
refresh();
goto abort;
}
set_tnc_params();
abort:
}