#include #include #include #include #include #include #include #include #include #include "mfjterm.h" #include "misc.h" #include "inout.h" #include "qso.h" #include "timefuncs.h" char* mk_sc(char *dc) { static char sc[5]; int numlet, i, first, pos = 0; sc[0] = 0; numlet = 0; first = 0; if(dc[0] < 'A') first = 1; for (i = first; i < strlen(dc); i++) if (dc[i] >= 'A') numlet++; else pos = i; switch (numlet){ case 3 : sc[0] = dc[first]; sc[1] = dc[first]; if ((strlen(dc)-1)-pos > 1) { sc[2] = dc[++pos]; sc[3] = dc[++pos]; } else { sc[2] = dc[++first]; sc[3] = dc[++pos]; } break; case 4 : if ((strlen(dc)-1)-pos > 2) goto case5; sc[0] = dc[first++]; sc[1] = dc[first]; sc[2] = dc[++pos]; sc[3] = dc[++pos]; break; case5: case 5 : sc[0] = dc[first]; sc[1] = dc[++pos]; sc[2] = dc[++pos]; sc[3] = dc[++pos]; } sc[4] = 0; return sc; } void set_my_callsign(void) { int i; attrset(A_REVERSE); move(19, 1); addstr("My Call: "); edgets(stdscr, callsign, 10, TRUE); move(19, 1); addstr(" "); refresh(); for (i = 0; i < strlen(callsign); i++) callsign[i] = toupper(callsign[i]); if (strlen(callsign)) strcpy(my_selcall, mk_sc(callsign)); else strcpy(my_selcall,""); attrset(A_REVERSE); move(19, 1); addstr("My SelCall: "); edgets(stdscr, my_selcall, 4, TRUE); move(19, 1); addstr(" "); move(tnc_y, tnc_x); refresh(); } void get_call(void) { int i; attrset(A_REVERSE); move(19, 1); addstr("Call: "); edgets(stdscr, destcall, 10, TRUE); move(19, 1); addstr(" "); refresh(); for (i = 0; i < strlen(destcall); i++) destcall[i] = toupper(destcall[i]); if (opmode == AMTOR) { move(19, 1); addstr("SelCall: "); if (strlen(destcall)) strcpy(selcall, mk_sc(destcall)); else strcpy(selcall,""); edgets(stdscr, selcall, 4, TRUE); move(19, 1); addstr(" "); refresh(); } move(tnc_y, tnc_x); refresh(); } /* void lookup_call(void) { return; } */ void grab_callsign(void) { char *p, *p2; int cs_len, i; cs_grab ^= 1; curs_set(0); attrset(A_REVERSE); move(19, 1); if (cs_grab) addstr("GRABBING CALLSIGN..."); else { for (i = 0; i < strlen(scanstr); i++) scanstr[i] = toupper(scanstr[i]); if ((p = strstr(scanstr, "DE "))) { p += 3; while (*p == ' ') p++; if ((p2 = strpbrk(p, " \r\n"))) { if ((cs_len = p2 - p) <= 10) { strncpy(destcall, p, cs_len); destcall[cs_len] = 0; } } } strcpy(scanstr," "); addstr(" "); } move(tnc_y, tnc_x); curs_set(1); refresh(); } void conn(void) { int i; char s[80]; strcpy(s,""); switch (opmode) { case AMTOR : strcat(s,"ARQ "); strcat(s,selcall); send_string(s,1); break; case ASCII : case RTTY : write_tnc(K_CTL_T); write_tnc(0x0A); send_ry(); for (i = 0; i < 3; i++) { strcat(s,destcall); strcat(s, " "); } strcat(s,"DE "); for (i = 0; i < 3; i++) { strcat(s, callsign); strcat(s, " "); } strcat(s, "PSE KN KN"); send_string(s,1); break; default : strcat(s,"C "); strcat(s,destcall); send_string(s,1); break; } } void send_ry(void) { if ((opmode == RTTY) || (opmode == ASCII)) send_string("RYRYRYRYRYRYRYRYRYRYRYRYRYRYRYRY", 1); } void insert_call_sequence(int spc) { char s[80]; strcpy(s, ""); strcat(s, destcall); strcat(s, " DE "); strcat(s, callsign); if (spc) strcat(s," "); send_string(s,0); } void turn_it_over(void) { int type; insert_call_sequence(0); switch (opmode) { case AMTOR: type = 0; break; case PACTOR: type = 1; break; default: type = 2; } send_string(over_str[type],1); if ((opmode != AMTOR) && (opmode != PACTOR)) write_tnc(K_CTL_R); } void end_qso(void) { insert_call_sequence(0); switch (opmode){ case AMTOR: send_string(" I AM NOW BREAKING THE LINK...", 1); waitfor_string("...\012"); transmit = FALSE; write_tnc(0x03); zleep(20); send_string("R", 1); break; case ASCII: case RTTY: send_string(" AR SK SK",1); break; case PACTOR: send_string(" AR SK", 1); waitfor_string(" SK\012"); transmit = FALSE; write_tnc(0x03); zleep(20); send_string("DISC", 1); break; default: send_string(" AR SK", 1); write_tnc(0x03); zleep(20); send_string("DISC", 1); } } .