The KB contest logging computer program runs on the Linux operating system

with the Gnome desktop. The program is under development, and currently
supports the CQ WW, CQ WPX, and ARRL DX contests, plus Field Day.
Features include on-the-fly dupe checking, CW and voice message keying,
super check partial, packet (Telnet and rf nodes), networking, and
radio control (currently for the FT-1000 only). The program is designed
to be used by U.S. stations, with some support for Canadian stations.
New features and contests are being added regularly, and I will consider
adding support for DX stations if there is sufficient demand.

(The port version has bug fixes and some modifications for Canadian stations.
- db)

Submitted by:	self
This commit is contained in:
Diane Bruce 2007-12-21 16:55:15 +00:00
parent 41fc19e6a7
commit eab2edfb13
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=204272
18 changed files with 2106 additions and 0 deletions

View File

@ -48,6 +48,7 @@
SUBDIR += java-commapi-freebsd
SUBDIR += jerm
SUBDIR += kallers
SUBDIR += kb
SUBDIR += kermit
SUBDIR += klog
SUBDIR += kmobiletools

49
comms/kb/Makefile Normal file
View File

@ -0,0 +1,49 @@
# New ports collection makefile for: kb
# Date created: June 5, 2007
# Whom: Diane Bruce <db@db.net>
#
# $FreeBSD$
PORTNAME= kb
PORTVERSION= 7.09
CATEGORIES= comms hamradio
MASTER_SITES= http://www.db.net/downloads/ \
${MASTER_SITE_LOCAL}
MASTER_SITE_SUBDIR= db
DISTFILES= kb_src-${PORTVERSION}.tar.gz kb_inst-${PORTVERSION}.tar.gz
MAINTAINER= db@FreeBSD.org
COMMENT= Amateur Radio contest logger
USE_XLIB= yes
USE_GNOME= libgnome gtk20 libbonobo
NO_WRKSUBDIR= yes
PKGMESSAGE= ${FILESDIR}/pkg_message
pre-configure:
@${CP} ${FILESDIR}/Makefile ${WRKSRC}
.if exists(/usr/include/dev/speaker/speaker.h)
@${REINPLACE_CMD} -e 's|-UBSDSOUND|-DBSDSOUND="<dev/speaker/speaker.h>"|' ${WRKSRC}/Makefile
.elif exists(/usr/include/machine/speaker.h)
@${REINPLACE_CMD} -e 's|-UBSDSOUND|-DBSDSOUND="<machine/speaker.h>"|' ${WRKSRC}/Makefile
.endif
@${RM} ${WRKSRC}/kb_server
@${RM} ${WRKSRC}/kb
@${CP} ${FILESDIR}/bsd_bells.c ${WRKSRC}
do-install:
@${INSTALL_SCRIPT} ${FILESDIR}/kbserver ${LOCALBASE}/etc/rc.d
${INSTALL_SCRIPT} ${FILESDIR}/kb ${LOCALBASE}/bin
${INSTALL_PROGRAM} ${WRKSRC}/kb ${LOCALBASE}/bin/kb_bin
${INSTALL_PROGRAM} ${WRKSRC}/kb_server ${LOCALBASE}/sbin
${MKDIR} ${DATADIR}
.for f in ${WRKSRC}/COUNTY.CQP ${WRKSRC}/DEFAULT.INI \
${WRKSRC}/CALL_LIB.LST ${WRKSRC}/CALL_SS.LST \
${WRKSRC}/CALL_FD.LST ${WRKSRC}/HELP.LST \
${WRKSRC}/COUNTRY.LST ${WRKSRC}/HELPFD.LST \
${WRKSRC}/SECTION.LST ${WRKSRC}/STATE.LST
${INSTALL_DATA} ${WRKSRC}/$f ${DATADIR}
.endfor
@${CAT} ${PKGMESSAGE}
.include <bsd.port.mk>

6
comms/kb/distinfo Normal file
View File

@ -0,0 +1,6 @@
MD5 (kb_src-7.09.tar.gz) = 2ac7a11e18c245278800f00b9bf3d300
SHA256 (kb_src-7.09.tar.gz) = 7b6a7a8c8fbe01fbe1086f5b783414b056bf1d5db5945d086a3e7e6de1bfa6f8
SIZE (kb_src-7.09.tar.gz) = 93896
MD5 (kb_inst-7.09.tar.gz) = 1984eb53d5ba56b43c188f07de9ae3dd
SHA256 (kb_inst-7.09.tar.gz) = 0890702b3ee182d056e9a33055aa4519fded84b15a67556279173865c1eb10d2
SIZE (kb_inst-7.09.tar.gz) = 199940

16
comms/kb/files/Makefile Normal file
View File

@ -0,0 +1,16 @@
# Makefile for: kb
#
# $FreeBSD$
LIBS+= `pkg-config --cflags --libs gtk+-2.0`
LIBS+= `pkg-config --cflags --libs libgnome-2.0`
LIBS+= `pkg-config --cflags --libs bonobo-activation-2.0`
all: kb_server kb
kb_server: kb_server.c
${CC} ${CFLAGS} -o kb_server kb_server.c -lm
kb: boxes.c fboxes.c kb.c radio.c bsd_bells.c fields.c sboxes.c \
couzon.c init.c kb_server.c support.c elogs.c io.c network.c tree.c
${CC} ${CFLAGS} -I. ${LIBS} kb.c -UBSDSOUND -o kb

163
comms/kb/files/bsd_bells.c Normal file
View File

@ -0,0 +1,163 @@
#ifdef DEBUG_BELLS
#include <stdio.h>
#include <stdlib.h>
#include <dev/speaker/speaker.h>
#include <fcntl.h>
#include "kb_bells.h"
#define MAX_BELLS (SPEED_CHANGE_SOUND+1)
int fd_bells;
static void bsd_play_bells(int isound);
main()
{
int i;
fd_bells = open("/dev/speaker",O_RDWR);
if(fd_bells<0) {
fprintf(stderr,"kldload speaker.ko\n");
exit(-1);
}
for(i=1;i < MAX_BELLS;i++) {
printf("%d \n", i);
bsd_play_bells(i);
getchar();
}
}
#endif
static void bsd_play_bells(int isound)
{
tone_t tones;
switch(isound)
{
case BELL_SOUND :
play_bell_sound ();
break;
case DUPE_SOUND :
play_dupe_sound ();
break;
case MESSAGE_SOUND :
play_message_sound ();
break;
case BAND_CHANGE_SOUND :
play_band_change_sound ();
break;
case SINGLE_MULT_SOUND :
play_single_mult_sound ();
break;
case DOUBLE_MULT_SOUND :
play_double_mult_sound ();
break;
case BAD_CALL_SOUND :
play_bad_call_sound ();
break;
case BAD_KEY_SOUND :
play_bad_key_sound ();
break;
case SPEED_CHANGE_SOUND :
play_speed_change_sound ();
break;
default:
break;
}
}
#define DELAY_TO_HZ(x) (x/4)
play_bell_sound()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0x474);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_dupe_sound ()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0xfe0);
tones.duration = 12;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0x17c8);
tones.duration = 12;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_message_sound()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0xd58);
tones.duration = 12;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0x8e8);
tones.duration = 12;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0xd58);
tones.duration = 12;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_band_change_sound()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0x710);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = 0;
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0x710);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = 0;
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_single_mult_sound()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0x8e8);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0x6ac);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_double_mult_sound()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0x8e8);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0x6ac);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = 0;
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0x8e8);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
tones.frequency = DELAY_TO_HZ(0x6ac);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_bad_call_sound ()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0x11d0);
tones.duration = 38;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_bad_key_sound()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0x17cc);
tones.duration = 42;
ioctl(fd_bells, SPKRTONE, &tones);
}
play_speed_change_sound()
{
tone_t tones;
tones.frequency = DELAY_TO_HZ(0x710);
tones.duration = 6;
ioctl(fd_bells, SPKRTONE, &tones);
}

7
comms/kb/files/kb Normal file
View File

@ -0,0 +1,7 @@
#!/bin/sh
if [ ! -e ~/.kb ] ; then
mkdir ~/.kb
fi
cp -f /usr/local/share/kb/* ~/.kb
cd ~/.kb
exec kb_bin

34
comms/kb/files/kbserver Normal file
View File

@ -0,0 +1,34 @@
#! /bin/sh
#
# PROVIDE: kbserver
# REQUIRE: NETWORKING
#
# Add the following lines to /etc/rc.conf to enable kb_server
#
#kbserver_enable="YES"
. /etc/rc.subr
name=kbserver
rcvar=`set_rcvar`
load_rc_config $name
kbserver_enable=${kbserver_enable-"NO"}
command=/usr/local/sbin/kb_server
start_cmd=kbserver_start
stop_cmd=kbserver_stop
kbserver_start()
{
echo "Starting kb_server: "
${command}
return 0
}
kbserver_stop()
{
echo "Stopping kb_server: "
killall kb_server
return 0
}
run_rc_command "$1"

View File

@ -0,0 +1,35 @@
--- boxes.c.orig 2007-11-24 19:46:36.000000000 -0500
+++ boxes.c 2007-11-24 19:42:17.000000000 -0500
@@ -749,8 +749,13 @@
guint ikey, istate;
gchar msg[43], email_file_names[5][13], lpr_line[81];
gint margin=9;
+#ifdef BSD
+ const gchar *lpr_cmd =
+ "lpr ";
+#else
const gchar *lpr_cmd =
"lpr -r -o page-top=36 -o page-left=18 -o page-bottom=36 ";
+#endif
const gchar *print_file_names[4] = {"PRINT.SUM", "PRINT.DUP",
"PRINT.LOG", "PRINT.MLT"};
@@ -778,14 +783,14 @@
if(icall_count)
{
write_summary_file (print_file_names[obd->item], margin);
- strcpy(lpr_line, lpr_cmd);
- strcat(lpr_line, print_file_names[obd->item]);
+ snprintf(lpr_line, sizeof(lpr_line), "%s %s", lpr_cmd,
+ print_file_names[obd->item]);
icopy = system(lpr_line);
if(isel_contest==WPX)
{
write_multiplier_file (print_file_names[3], margin);
- strcpy(lpr_line, lpr_cmd);
- strcat(lpr_line, print_file_names[3]);
+ snprintf(lpr_line, sizeof(lpr_line), "%s %s", lpr_cmd,
+ print_file_names[3]);
icopy = system(lpr_line);
}
if(!icopy)

View File

@ -0,0 +1,915 @@
--- elogs.c.orig 2007-11-22 13:24:56.000000000 -0500
+++ elogs.c 2007-11-22 14:19:17.000000000 -0500
@@ -56,7 +56,6 @@
gchar locus_line[4], ops_line[45];
gint iqsos[2] = {0, 0}, idupes[2] = {0, 0}, ipoints[2] = {0, 0};
gint mults[2] = {0, 0}, izones[2] = {0, 0}, nlw[2] = {0, 0};
- gchar skip_line[3] = {'\r', '\n', '\0'};
const gchar *stpr = "State/Province: ";
const gchar *category_choices[8] = {"Single Operator",
"Single Operator, Assisted",
@@ -106,9 +105,7 @@
concat(line_out, cr_array[1].date, 4, 5, !COPY);
strcat(line_out, " ");
strcat(line_out, select_contest_items[isel_contest]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Call: ");
strcpy(station, init_screen_choices[0]);
@@ -169,9 +166,7 @@
strcat(line_out, "Section: ___");
break;
}
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp, "%s\n\n", line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Category: ");
for(i=0; i<8; i++)
@@ -192,16 +187,12 @@
strcpy(ops_line, "");
break;
}
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp, "%s\n\n", line_out);
if(strlen(ops_line))
{
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, ops_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp, "%s\n\n", line_out);
}
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Mode: ");
@@ -211,24 +202,18 @@
strcat(line_out, power_line);
concat(line_out, blank80, 0, 9, !COPY);
strcat(line_out, "Hours of Operation: __");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp, "%s\n\n\n", line_out);
switch (isel_contest)
{
case DX :
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" Net QSO Country Claimed");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" QSOs Points Mults Score");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp, "%s\n\n", line_out);
for(i=0; i<6; i++)
{
concat(line_out, blank80, 0, margin+2, COPY);
@@ -247,10 +232,9 @@
int_to_comma (score_mb.mults[mode][i], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n", line_out);
}
- fputs(skip_line, fp);
+ fprintf(fp,"\n");
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "All Bands");
concat(line_out, blank80, 0, 3, !COPY);
@@ -269,21 +253,17 @@
int_to_comma (ipoints[mode]*mults[mode], score_line);
left_blank_pad (score_line, sizeof(score_line));
strcat(line_out, score_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
break;
case FD :
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" Net CW Net PH");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" QSOs QSOs");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
for(i=0; i<6; i++)
{
concat(line_out, blank80, 0, margin+2, COPY);
@@ -297,10 +277,9 @@
int_to_comma (score_mb.qsos[PH][i]-score_mb.dupes[PH][i], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
- fputs(skip_line, fp);
+ fprintf(fp,"\n");
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "All Bands");
concat(line_out, blank80, 0, 4, !COPY);
@@ -315,8 +294,7 @@
int_to_comma (iqsos[CW]-idupes[CW]+iqsos[PH]-idupes[PH], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "QSO Points");
concat(line_out, blank80, 0, 3, !COPY);
@@ -331,8 +309,7 @@
int_to_comma (ipoints[CW]+ipoints[PH], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Power Multiplier");
concat(line_out, blank80, 0, 21, !COPY);
@@ -345,43 +322,34 @@
int_to_comma (pm, sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "QSO Score");
concat(line_out, blank80, 0, 28, !COPY);
int_to_comma (pm*(ipoints[CW]+ipoints[PH]), sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Bonus Points");
concat(line_out, blank80, 0, 24, !COPY);
concat(line_out, under_line, 0, 6, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Claimed Score");
concat(line_out, blank80, 0, 23, !COPY);
concat(line_out, under_line, 0, 6, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
break;
case WPX :
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" Net QSO Prefix Claimed");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" QSOs Points Mults Score");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
for(i=0; i<6; i++)
{
concat(line_out, blank80, 0, margin+2, COPY);
@@ -400,10 +368,9 @@
int_to_comma (score_mb.mults[mode][i], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
- fputs(skip_line, fp);
+ fprintf(fp,"\n");
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "All Bands");
concat(line_out, blank80, 0, 3, !COPY);
@@ -422,8 +389,7 @@
int_to_comma (ipoints[mode]*mults[mode], score_line);
left_blank_pad (score_line, sizeof(score_line));
strcat(line_out, score_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
break;
case CQP :
break;
@@ -431,14 +397,11 @@
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" Net QSO Country Zone Claimed");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" QSOs Points Mults Mults Score");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
for(i=0; i<6; i++)
{
concat(line_out, blank80, 0, margin+2, COPY);
@@ -461,10 +424,9 @@
int_to_comma (score_mb.zones[mode][i], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
- fputs(skip_line, fp);
+ fprintf(fp,"\n");
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "All Bands");
concat(line_out, blank80, 0, 2, !COPY);
@@ -487,22 +449,17 @@
int_to_comma (ipoints[mode]*(mults[mode]+izones[mode]), score_line);
left_blank_pad (score_line, sizeof(score_line));
strcat(line_out, score_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
break;
case SS :
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" Net QSO Section Claimed");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" QSOs Points Mults Score");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
concat(line_out, blank80, 0, 12, !COPY);
int_to_comma (iqsos[mode]-idupes[mode], sum_line);
@@ -520,21 +477,15 @@
int_to_comma (ipoints[mode]*mults[mode], score_line);
left_blank_pad (score_line, sizeof(score_line));
strcat(line_out, score_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" ARRL Sections Check-Off List");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" (Sections worked marked with an asterisk)");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
for(j=1; j<11; j++)
{
concat(line_out, blank80, 0, margin, COPY);
@@ -554,8 +505,7 @@
strcat(line_out, mult_line);
strcat(line_out, locus_line);
}
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
break;
case A160 :
@@ -565,18 +515,14 @@
int_to_comma (iqsos[CW]-idupes[CW], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "QSO Points");
concat(line_out, blank80, 0, 9, !COPY);
int_to_comma (ipoints[CW], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "States/Prov");
for(i=0; i<2; i++)
@@ -587,9 +533,7 @@
int_to_comma (nlw[CW], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Countries");
nlw[0] = 0;
@@ -602,18 +546,14 @@
int_to_comma (nlw[CW], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Total Mults");
concat(line_out, blank80, 0, 8, !COPY);
int_to_comma (mults[CW], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Claimed Score");
concat(line_out, blank80, 0, 1, !COPY);
@@ -621,16 +561,13 @@
score_line);
left_blank_pad (score_line, sizeof(score_line));
strcat(line_out, score_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
break;
case TEN :
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
" CW Phone All");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "QSOs");
concat(line_out, blank80, 0, 15, !COPY);
@@ -645,9 +582,7 @@
int_to_comma (iqsos[CW]-idupes[CW]+iqsos[PH]-idupes[PH], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "QSO Points");
concat(line_out, blank80, 0, 9, !COPY);
@@ -662,9 +597,7 @@
int_to_comma (ipoints[CW]+ipoints[PH], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "States/Prov");
for(i=0; i<2; i++)
@@ -683,9 +616,7 @@
int_to_comma (nlw[CW]+nlw[PH], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Countries");
nlw[0] = 0;
@@ -706,9 +637,7 @@
int_to_comma (nlw[CW]+nlw[PH], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Total Mults");
concat(line_out, blank80, 0, 8, !COPY);
@@ -723,9 +652,7 @@
int_to_comma (mults[CW]+mults[PH], sum_line);
left_blank_pad (sum_line, sizeof(sum_line));
strcat(line_out, sum_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Claimed Score");
concat(line_out, blank80, 0, 30, !COPY);
@@ -733,76 +660,51 @@
score_line);
left_blank_pad (score_line, sizeof(score_line));
strcat(line_out, score_line);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
break;
}
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"\n\n");
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
"Club Participation? ( ) Yes ( ) No If yes, print name below.");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Name of Club: ");
concat(line_out, under_line, 0, 49, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Rigs: ");
concat(line_out, under_line, 0, 57, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
concat(line_out, under_line, 0, 63, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Antennas: ");
concat(line_out, under_line, 0, 53, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
concat(line_out, under_line, 0, 63, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Remarks: ");
concat(line_out, under_line, 0, 54, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
concat(line_out, under_line, 0, 63, !COPY);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n%s\n\n",line_out,line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
"This is to certify that in this contest I have operated my");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
"transmitter within the limitations of my license and have");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out,
"observed fully the rules and regulations of the contest.");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, "Date ");
concat(line_out, under_line, 0, 9, !COPY);
@@ -810,25 +712,20 @@
concat(line_out, under_line, 0, 22, !COPY);
strcat(line_out, ", ");
strcat(line_out, init_screen_choices[1]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, init_screen_choices[2]);
strcat(line_out, ", ");
strcat(line_out, init_screen_choices[1]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, init_screen_choices[3]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
if(strlen(init_screen_choices[4]))
{
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, init_screen_choices[4]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, init_screen_choices[5]);
@@ -836,8 +733,7 @@
strcat(line_out, init_screen_choices[6]);
strcat(line_out, " ");
strcat(line_out, init_screen_choices[7]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
fflush(fp);
fsync(fileno(fp));
fclose(fp);
@@ -852,7 +748,6 @@
gchar station[14], mode_line[6], dupe_line[2];
gchar title_line[74], header_line1[74], call_hold[14], call_fill[14];
gint iqsos[2] = {0, 0}, max_lines=54;
- gchar skip_line[3] = {'\r', '\n', '\0'};
gchar form_feed[2] = {'\f', '\0'};
fp = fopen(filnam, "w");
@@ -924,10 +819,7 @@
int_to_char (npages, npages_char);
left_blank_pad (npages_char, sizeof(npages_char));
strcat(line_out, npages_char);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n\n",line_out);
}
if(margin || new_mb)
{
@@ -936,9 +828,7 @@
strcat(line_out, header_line1);
strcat(line_out, bandw[i]);
strcat(line_out, mode_char[j]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
}
strcpy(call_hold, "");
ic = 0;
@@ -973,8 +863,7 @@
ic %= 4;
if(!ic)
{
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
idl++;
}
}
@@ -986,14 +875,13 @@
}
if(ic)
{
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
if(margin)
fputs(form_feed, fp);
}
if(!margin)
- fputs(skip_line, fp);
+ fprintf(fp,"\n");
}
fflush(fp);
fsync(fileno(fp));
@@ -1014,7 +902,6 @@
gchar hl2_zone[7], hl2_country[10];
gint iqsos[2] = {0, 0}, nqsos[2] = {0, 0};
gint nzones[2] = {0, 0}, nmults[2] = {0, 0}, npts[2] = {0, 0};
- gchar skip_line[3] = {'\r', '\n', '\0'};
gchar form_feed[2] = {'\f', '\0'};
fp = fopen(filnam, "w");
@@ -1154,19 +1041,13 @@
strcat(line_out, ipage_char);
strcat(line_out, " of ");
strcat(line_out, npages_char);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, header_line1);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, header_line2);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
}
for(i=(ipage-1)*50+1; i<=ipage*50; i++)
{
@@ -1361,11 +1242,10 @@
npts[0] += atoi(cr_array[i].points);
npts[1] += atoi(cr_array[i].points);
strcat(line_out, cr_array[i].points);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
else if(margin)
- fputs(skip_line, fp);
+ fprintf(fp,"\n");
}
if(margin)
{
@@ -1385,7 +1265,7 @@
left_blank_pad (footer2_vars[2], sizeof(footer2_vars[2]));
int_to_char (npts[1], footer2_vars[3]);
left_blank_pad (footer2_vars[3], sizeof(footer2_vars[3]));
- fputs(skip_line, fp);
+ fprintf(fp,"\n");
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, footer_line1);
concat(line_out, blank80, 0, 9, !COPY);
@@ -1402,8 +1282,7 @@
strcat(line_out, footer1_vars[2]);
concat(line_out, blank80, 0, 3, !COPY);
strcat(line_out, footer1_vars[3]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, footer_line2);
concat(line_out, blank80, 0, 9, !COPY);
@@ -1420,9 +1299,7 @@
strcat(line_out, footer2_vars[2]);
concat(line_out, blank80, 0, 3, !COPY);
strcat(line_out, footer2_vars[3]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(form_feed, fp);
+ fprintf(fp,"%s\f\n",line_out);
}
}
fflush(fp);
@@ -1439,7 +1316,6 @@
gchar title_line[74], header_line1[74];
gint max_lines=54;
gint iqsos[2] = {0, 0};
- gchar skip_line[3] = {'\r', '\n', '\0'};
gchar form_feed[2] = {'\f', '\0'};
fp = fopen(filnam, "w");
@@ -1499,15 +1375,10 @@
strcat(line_out, ipage_char);
strcat(line_out, " of ");
strcat(line_out, npages_char);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n\n",line_out);
concat(line_out, blank80, 0, margin, COPY);
strcat(line_out, header_line1);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(skip_line, fp);
+ fprintf(fp,"%s\n\n",line_out);
}
jfirst = (ipage-1)*max_lines*10+1;
jlast = ipage*max_lines*10<px_tree.npx ?
@@ -1525,14 +1396,12 @@
ic %= 10;
if(!ic)
{
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
}
if(ic)
{
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
if(margin)
fputs(form_feed, fp);
@@ -1662,8 +1531,7 @@
strcat(category_cab, " ");
strcat(category_cab, mode_cab);
strcpy(line_out, "START-OF-LOG: 2.0");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
if(strlen(section)>0)
{
strcpy(line_out, "ARRL-SECTION: ");
@@ -1671,80 +1539,45 @@
}
else
strcpy(line_out, "ARRL-SECTION:");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
strcpy(line_out, "CALLSIGN: ");
strcat(line_out, init_screen_choices[0]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
strcpy(line_out, "CATEGORY: ");
strcat(line_out, category_cab);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
if(isel_contest==WPX && !strcmp(init_screen_choices[11], "<SO-TRI/SE>"))
{
strcpy(line_out, "CATEGORY-OVERLAY: ");
strcat(line_out, "TB-WIRES");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
strcpy(line_out, "CLAIMED-SCORE: ");
strcat(line_out, score_cab);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
strcpy(line_out, "CLUB:");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
strcpy(line_out, "CONTEST: ");
strcat(line_out, contest_cab);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
strcpy(line_out, "NAME: ");
strcat(line_out, init_screen_choices[2]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
strcpy(line_out, "ADDRESS: ");
strcat(line_out, init_screen_choices[3]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- if(strlen(init_screen_choices[4]))
- {
- strcpy(line_out, "ADDRESS: ");
- strcat(line_out, init_screen_choices[4]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- strcpy(line_out, "ADDRESS: ");
- strcat(line_out, init_screen_choices[5]);
- strcat(line_out, ", ");
- strcat(line_out, init_screen_choices[6]);
- strcat(line_out, " ");
- strcat(line_out, init_screen_choices[7]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- }
- else
- {
- strcpy(line_out, "ADDRESS: ");
- strcat(line_out, init_screen_choices[5]);
- strcat(line_out, ", ");
- strcat(line_out, init_screen_choices[6]);
- strcat(line_out, " ");
- strcat(line_out, init_screen_choices[7]);
- add_eol_chars (line_out);
- fputs(line_out, fp);
- strcpy(line_out, "ADDRESS:");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- }
- strcpy(line_out, "OPERATORS:");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- strcpy(line_out, "SOAPBOX:");
- add_eol_chars (line_out);
- fputs(line_out, fp);
- fputs(line_out, fp);
- fputs(line_out, fp);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
+ if(strlen(init_screen_choices[4])!=0)
+ fprintf(fp,"ADDRESS: %s\n",
+ init_screen_choices[4]);
+ fprintf(fp,"ADDRESS: %s, %s %s\n",init_screen_choices[5],
+ init_screen_choices[6],init_screen_choices[7]);
+
+ fprintf(fp,"OPERATORS:\n");
+ fprintf(fp,"SOAPBOX:\n");
+ fprintf(fp,"SOAPBOX:\n");
+ fprintf(fp,"SOAPBOX:\n");
+ fprintf(fp,"SOAPBOX:\n");
+ fprintf(fp,"SOAPBOX:\n");
switch (isel_contest)
{
case WPX :
@@ -1790,8 +1623,7 @@
strcat(line_out, exch_rcvd_cab);
strcat(line_out, " ");
strcat(line_out, cr_array[i].tx);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
break;
case FD :
@@ -1836,8 +1668,7 @@
strcat(line_out, exch_rcvd_cab);
strcat(line_out, " ");
strcat(line_out, cr_array[i].tx);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
break;
case CQP :
@@ -1892,8 +1723,7 @@
strcat(line_out, ck_rcvd_cab);
strcat(line_out, " ");
strcat(line_out, rst_rcvd_cab);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
break;
case A160 :
@@ -1947,8 +1777,7 @@
strcat(line_out, exch_rcvd_cab);
strcat(line_out, " ");
strcat(line_out, cr_array[i].tx);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
break;
default :
@@ -1995,13 +1824,10 @@
strcat(line_out, exch_rcvd_cab);
strcat(line_out, " ");
strcat(line_out, cr_array[i].tx);
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"%s\n",line_out);
}
}
- strcpy(line_out, "END-OF-LOG:");
- add_eol_chars (line_out);
- fputs(line_out, fp);
+ fprintf(fp,"END-OF-LOG:\n");
fflush(fp);
fsync(fileno(fp));
fclose(fp);

View File

@ -0,0 +1,15 @@
--- fields.c.orig 2007-09-10 10:57:01.000000000 -0400
+++ fields.c 2007-11-22 19:53:19.000000000 -0500
@@ -1418,6 +1418,12 @@
gint cyan_bar_color, text_color;
gchar str_hold[81];
+ /* If esk->ikey is nul shunt it off here. I saw it happen - db VA3DB */
+ if (esd->ikey == '\0')
+ {
+ play_bells (BELL_SOUND);
+ return;
+ }
beep = 1;
ccol = *esd->cursor_colp-esd->field_col;
lflp = strlen(esd->field_linep);

View File

@ -0,0 +1,27 @@
--- globs.h.orig 2007-07-20 10:26:01.000000000 -0400
+++ globs.h 2007-11-23 09:38:53.000000000 -0500
@@ -169,8 +169,15 @@
"<18.0>", "<19.2>", "<20.6>", "<22.2>", "<24.0>",
"<26.2>", "<28.8>", "<32.0>", "<36.0>", "<41.1>",
"<48.0>", "<57.6>", "<72.0>"};
+/* These device names are really specific to FreeBSD -db */
+#ifdef BSD
+static const gchar *port_bracket[6] = {"<OFF>", "<ttyd0>", "<ttyd1>",
+ "<ttyU0>", "<ttyU1>", "<TELNET>"};
+#else
static const gchar *port_bracket[6] = {"<OFF>", "<ttyS0>", "<ttyS1>",
"<ttyUSB0>", "<ttyUSB1>", "<TELNET>"};
+#endif
+
static const gchar *yn_bracket[2] = {"<YES>", "<NO>"};
static const gchar *dupe_bracket[2] = {"<ASK>", "<ALWAYS>"};
static const gchar *partial_bracket[3] = {"<NO>", "<2>", "<3>"};
@@ -178,7 +185,7 @@
" Station Call Sign", "Operator Call Sign",
" Operator Name", " Address",
" Address", " City",
- " State", " Zip Code",
+ " State/Province", " Zip/Postal Code",
" Latitude", " Longitude",
" Offset to UTC", " Entry Category",
" Power", " Contest Type",

150
comms/kb/files/patch-init.c Normal file
View File

@ -0,0 +1,150 @@
--- init.c.orig 2007-09-10 10:34:21.000000000 -0400
+++ init.c 2007-11-24 16:43:45.000000000 -0500
@@ -30,6 +30,7 @@
static gint set_error_check(gpointer data);
static gint check_precedence(void);
static gint butt_kick(gpointer widget);
+static void set_fixed_font(GtkWidget *);
struct init_vars
{
gint row1;
@@ -108,33 +109,13 @@
(col1+9)*wcol,
(row1+9)*hrow+hrow/2,
layout);
- pfd = pango_font_description_from_string ("misc fixed 16");
- pc = gtk_widget_get_pango_context (widget);
- pl = pango_context_get_language (pc);
- pfm = pango_context_get_metrics (pc, pfd, pl);
- ipfmgadw = pango_font_metrics_get_approximate_digit_width (pfm);
- cursor_offset = 8-pango_font_metrics_get_descent (pfm)/PANGO_SCALE;
- pango_font_metrics_unref (pfm);
- if(ipfmgadw==10240)
- {
- pango_layout_set_font_description (layout, pfd);
- pango_font_description_free (pfd);
- }
- else
- {
- pango_font_description_free (pfd);
- pfd = pango_font_description_from_string ("luxi mono 12");
- pango_layout_set_font_description (layout, pfd);
- pango_font_description_free (pfd);
- printf("%s\n", missing_font);
- printf("For a more readable KB screen ");
- printf("add the Misc Fixed font to your system.\n");
- printf("%s\n", missing_font);
- write_line (row1+23, col1+20, missing_font, HI_RED, SAVEPIX);
- write_line (row1+24, col1+6,
- "Now Using Alternate Font. KB Screens May Exhibit Display Problems.",
- HI_RED, SAVEPIX);
- }
+ /* Original code would only work on a 1024 wide screen.
+ * This works for other sized screens, including mine which is 1280 wide.
+ *
+ * - Diane VA3DB db@db.net
+ */
+ set_fixed_font(widget);
+
concat(comp_mon, __DATE__, 0, 2, COPY);
concat(comp_yr, __DATE__, 7, 10, COPY);
while(strcmp(comp_mon, month_array[icm]) && icm<11)
@@ -404,6 +385,7 @@
mode = CW;
else
mode = PH;
+ shift_fkeys = 0;
if(!sccfn && strcmp(init_screen_choices[16], port_bracket[0]))
{
idisplay_type = IDT_KEYER;
@@ -1139,8 +1121,13 @@
beep = 0;
break;
case 7 :
- if(isdigit_ui(ikey) || ikey=='-')
- beep = 0;
+ /* Canadian postal codes will be ANA[space]NAN
+ * I will cheat and allow any combination of alpha, numeric and space.
+ * - Diane VA3DB <db@db.net>
+ */
+ ikey = toupper_ui(ikey);
+ if(isalpha_ui(ikey) || isdigit_ui(ikey) || ikey==' ' || ikey=='-')
+ beep = 0;
break;
case 8 :
ikey = toupper_ui(ikey);
@@ -1163,7 +1150,7 @@
edit_line (&esd);
}
else
- play_bells (BAD_KEY_SOUND);
+ play_bells (BAD_KEY_SOUND);
}
return TRUE;
}
@@ -1791,6 +1778,7 @@
}
write_ini_file ();
insert_mode = 0;
+ shift_fkeys = 0;
shift_fkeys = (strcmp(set_screen_choices[11], yn_bracket[1]));
ssd->done = TRUE;
break;
@@ -2381,3 +2369,57 @@
update_rect.height);
return TRUE;
}
+
+/*
+ * set_fixed_font
+ *
+ * Author - Diane Bruce <db@db.net> VA3DB
+ * Inputs - None
+ * Output - None
+ * Side effects - Try to find a font that fits the screen
+ * giving 80 columns across
+ * KB relies upon the width of a monospace font being equal
+ * in width to one of 80 (NUMBER_OF_COLUMNS) columns.
+ * Bugs - I am sure there must be better ways of doing this.
+ * There is probably a mapping function between
+ * font size and pixel width. I'll look for that next.
+ */
+#define SBUFSIZE 64
+static void
+set_fixed_font(GtkWidget *widget)
+{
+ int width_col;
+ char font_desc[SBUFSIZE];
+ int width_font;
+ int font_size;
+ gint ipfmgadw;
+ PangoFontDescription *pfd;
+ PangoContext *pc;
+ PangoLanguage *pl;
+ PangoFontMetrics *pfm;
+
+ width_col = widget->allocation.width/NUMBER_OF_COLUMNS;
+
+ pc = gtk_widget_get_pango_context (widget);
+ pl = pango_context_get_language (pc);
+
+ for (font_size = 10; font_size < 24; font_size++)
+ {
+ snprintf(font_desc, sizeof(font_desc)-1, "monospace %d", font_size);
+
+ pfd = pango_font_description_from_string (font_desc);
+ pfm = pango_context_get_metrics (pc, pfd, pl);
+ ipfmgadw = pango_font_metrics_get_approximate_digit_width (pfm);
+ if (ipfmgadw/PANGO_SCALE == width_col)
+ {
+ printf("Found a good font [%s]\n", font_desc);
+ pango_font_metrics_unref (pfm);
+ break;
+ }
+ pango_font_metrics_unref (pfm);
+ }
+
+ cursor_offset = 8-pango_font_metrics_get_descent (pfm)/PANGO_SCALE;
+ pango_layout_set_font_description (layout, pfd);
+ pango_font_description_free (pfd);
+}

533
comms/kb/files/patch-io.c Normal file
View File

@ -0,0 +1,533 @@
--- io.c.orig 2007-07-01 15:19:57.000000000 -0400
+++ io.c 2007-11-24 18:14:00.000000000 -0500
@@ -17,6 +17,7 @@
static void rewrite_contest_file(void);
static void write_call_library_file(void);
static gint process_tmp_file(const gchar *filnam);
+static char* chomp(char *s);
static void fill_iend_array(void)
{
@@ -99,24 +100,22 @@
strcat(contest_line, cr_array[qnum].tx);
strcpy(field_hold, cr_array[qnum].prefix);
right_blank_pad(field_hold, sizeof(cr_array[qnum].prefix));
- strcat(contest_line, field_hold);
- add_eol_chars (contest_line);
+ sprintf(contest_line,"%s%s\n",contest_line,field_hold);
}
static void read_ini_file(void)
{
FILE *fp;
gchar filnam[13], msg[49], contest_ini_line[76];
- gint i, icolon, lcil, socil;
+ gint i, socil;
+ char *token;
guint answer;
- strcpy(filnam, contest_file_base);
- strcat(filnam, ".INI");
+ snprintf(filnam,sizeof(filnam), "%s.INI", contest_file_base);
fp = fopen(filnam, "r");
if(fp==NULL)
{
- strcpy(msg, filnam);
- strcat(msg, " does not exist. Use default? (Y/N)");
+ snprintf(msg,sizeof(msg),"%s does not exist. Use default? (Y/N)");
play_bells (DUPE_SOUND);
answer = boxed_message (msg, 0, LT_GRAY);
if(toupper_ui(answer)=='Y') fp = fopen("DEFAULT.INI","r");
@@ -125,53 +124,41 @@
socil = sizeof(contest_ini_line);
for(i=0; i<MAX_INIT_ITEMS; i++)
{
- fgets(contest_ini_line, socil, fp);
- if(feof(fp)) break;
- icolon = kb_index (contest_ini_line, ":");
- if(icolon>-1)
- {
- lcil = strlen(contest_ini_line);
- if(contest_ini_line[lcil-1]=='\n') contest_ini_line[lcil-1] = '\0';
- if(contest_ini_line[lcil-2]=='\r') contest_ini_line[lcil-2] = '\0';
- lcil = strlen(contest_ini_line);
- if(lcil>icolon+1)
- concat(init_screen_choices[i], contest_ini_line,
- icolon+1, lcil-1, COPY);
- }
+ if(fgets(contest_ini_line, socil, fp) == NULL)
+ break;
+ token = strtok(contest_ini_line, ":\r\n");
+ if (token != NULL)
+ {
+ token = strtok(NULL,":\r\n");
+ if (token != NULL)
+ strcpy(init_screen_choices[i], token);
+ }
}
for(i=0; i<MAX_SET_ITEMS; i++)
{
- fgets(contest_ini_line, socil, fp);
- if(feof(fp)) break;
- icolon = kb_index (contest_ini_line, ":");
- if(icolon>-1)
- {
- lcil = strlen(contest_ini_line);
- if(contest_ini_line[lcil-1]=='\n') contest_ini_line[lcil-1] = '\0';
- if(contest_ini_line[lcil-2]=='\r') contest_ini_line[lcil-2] = '\0';
- lcil = strlen(contest_ini_line);
- if(lcil>icolon+1)
- concat(set_screen_choices[i], contest_ini_line,
- icolon+1, lcil-1, COPY);
- }
+ if(fgets(contest_ini_line, socil, fp) == NULL)
+ break;
+ token = strtok(contest_ini_line, ":\r\n");
+ if (token != NULL)
+ {
+ token = strtok(NULL,":\r\n");
+ if (token != NULL)
+ strcpy(set_screen_choices[i], token);
+ }
}
if(!strcmp(set_screen_choices[1], "<NEVER>"))
strcpy(set_screen_choices[1], dupe_bracket[0]);
for(i=0; i<MAX_KEYER_ITEMS; i++)
{
- fgets(contest_ini_line, socil, fp);
- if(feof(fp)) break;
- icolon = kb_index (contest_ini_line, ":");
- if(icolon>-1)
- {
- lcil = strlen(contest_ini_line);
- if(contest_ini_line[lcil-1]=='\n') contest_ini_line[lcil-1] = '\0';
- if(contest_ini_line[lcil-2]=='\r') contest_ini_line[lcil-2] = '\0';
- lcil = strlen(contest_ini_line);
- if(lcil>icolon+1)
- concat(keyer_screen_choices[i], contest_ini_line,
- icolon+1, lcil-1, COPY);
- }
+ if(fgets(contest_ini_line, socil, fp) == NULL)
+ break;
+ token = strtok(contest_ini_line, ":\r\n");
+ if(token != NULL)
+ {
+ token = strtok(NULL,":\r\n");
+ if (token != NULL)
+ strcpy(keyer_screen_choices[i], token);
+ }
}
fclose(fp);
}
@@ -187,17 +174,14 @@
fp = fopen(filnam, "r");
if(fp==NULL)
{
- strcpy(msg, "Error reading ");
- strcat(msg, filnam);
+ snprintf(msg, sizeof(msg), "Error reading %s", filnam);
rw_error_box (main_drawing_area, msg);
return;
}
icall_count = 0;
socl = sizeof(contest_line);
- for( ; ; )
+ while(fgets(contest_line, socl, fp) != NULL)
{
- fgets(contest_line, socl, fp);
- if(feof(fp)) break;
icall_count++;
fill_cr_array_all (contest_line, icall_count);
}
@@ -257,16 +241,13 @@
gchar filnam[13], contest_line[76];
ded_num = 0;
- strcpy(filnam, contest_file_base);
- strcat(filnam, ".DED");
+ sprintf(filnam,"%s.DED", filnam);
fp = fopen(filnam, "r");
if(fp==NULL)
return;
socl = sizeof(contest_line);
- for( ; ; )
+ while(fgets(contest_line, socl, fp) != NULL)
{
- fgets(contest_line, socl, fp);
- if(feof(fp)) break;
ded_num++;
strcpy(ded_array[ded_num], contest_line);
}
@@ -276,7 +257,7 @@
static void read_locus_file(void)
{
FILE *fp;
- gint i, j, lcil, icn, soli;
+ gint i, j, icn, soli;
gchar filnam[13], msg[49], clat[5], clong[6];
gchar line_in[80];
gint n=0;
@@ -320,20 +301,14 @@
fp = fopen(filnam, "r");
if(fp==NULL)
{
- strcpy(msg, "Error reading ");
- strcat(msg, filnam);
+ snprintf(msg,sizeof(msg),"Error reading %s",filnam);
rw_error_box (main_drawing_area, msg);
return;
}
soli = sizeof(line_in);
- for( ; ; )
+ while(fgets(line_in, soli, fp) != NULL)
{
- fgets(line_in, soli, fp);
- if(feof(fp)) break;
- lcil = strlen(line_in);
- if(line_in[lcil-1]=='\n') line_in[lcil-1] = '\0';
- if(line_in[lcil-2]=='\r') line_in[lcil-2] = '\0';
- lcil = strlen(line_in);
+ chomp(line_in);
n++;
concat(loci.locus_name[n], line_in,
col_num[icn][0], col_num[icn][1], COPY);
@@ -376,8 +351,7 @@
fp = fopen(filnam, "r");
if(fp==NULL)
{
- strcpy(msg, "Error reading ");
- strcat(msg, filnam);
+ snprintf(msg, sizeof(msg), "Error reading %s",filnam);
rw_error_box (main_drawing_area, msg);
return;
}
@@ -385,12 +359,12 @@
contest_nc[i][0] = '\0';
for(i=0; i<MAX_COUNTRIES; i++)
{
- countries.country_name[i][0] = '\0';
- countries.country_abv[i][0] = '\0';
- countries.country_syn[i][0] = '\0';
- countries.continent_abv[i][0] = '\0';
- countries.zones_in_country[i][0] = '\0';
- countries.country_lat[i] = 0.;
+ countries.country_name[i][0] = '\0';
+ countries.country_abv[i][0] = '\0';
+ countries.country_syn[i][0] = '\0';
+ countries.continent_abv[i][0] = '\0';
+ countries.zones_in_country[i][0] = '\0';
+ countries.country_lat[i] = 0.;
countries.country_long[i] = 0.;
}
for(i=0; i<6; i++)
@@ -401,13 +375,9 @@
countries.izone_worked[i][j] = 0;
}
soli = sizeof(line_in);
- for( ; ; )
+ while(fgets(line_in, soli, fp) != NULL)
{
- fgets(line_in, soli, fp);
- if(feof(fp)) break;
- lcil = strlen(line_in);
- if(line_in[lcil-1]=='\n') line_in[lcil-1] = '\0';
- if(line_in[lcil-2]=='\r') line_in[lcil-2] = '\0';
+ chomp(line_in);
lcil = strlen(line_in);
if(line_in[0]=='-')
{
@@ -456,11 +426,11 @@
countries.country_lat[0] = -89.;
for(i=0; i<=n; i++)
{
- right_blank_unpad (countries.country_name[i]);
- right_blank_unpad (countries.country_abv[i]);
- right_blank_unpad (countries.country_syn[i]);
- right_blank_unpad (countries.continent_abv[i]);
- right_blank_unpad (countries.zones_in_country[i]);
+ right_blank_unpad (countries.country_name[i]);
+ right_blank_unpad (countries.country_abv[i]);
+ right_blank_unpad (countries.country_syn[i]);
+ right_blank_unpad (countries.continent_abv[i]);
+ right_blank_unpad (countries.zones_in_country[i]);
}
for(i=0; i<=notc; i++)
{
@@ -491,16 +461,16 @@
for(k=j; k<=n; k++)
{
strcpy(countries.country_name[k],
- countries.country_name[k+1]);
+ countries.country_name[k+1]);
strcpy(countries.country_abv[k],
- countries.country_abv[k+1]);
+ countries.country_abv[k+1]);
strcpy(countries.country_syn[k],
- countries.country_syn[k+1]);
+ countries.country_syn[k+1]);
strcpy(countries.continent_abv[k],
- countries.continent_abv[k+1]);
+ countries.continent_abv[k+1]);
strcpy(countries.zones_in_country[k],
- countries.zones_in_country[k+1]);
- countries.country_lat[k] = countries.country_lat[k+1];
+ countries.zones_in_country[k+1]);
+ countries.country_lat[k] = countries.country_lat[k+1];
countries.country_long[k] = countries.country_long[k+1];
}
n--;
@@ -557,19 +527,14 @@
fp = fopen(clib.filnam, "r");
if(fp==NULL)
{
- strcpy(msg, "Error reading ");
- strcat(msg, clib.filnam);
+ snprintf(msg, sizeof(msg), "Error reading %s", clib.filnam);
rw_error_box (main_drawing_area, msg);
return;
}
soli = sizeof(line_in);
- for( ; ; )
+ while(fgets(line_in, soli, fp) != NULL)
{
- fgets(line_in, soli, fp);
- if(feof(fp)) break;
- lcil = strlen(line_in);
- if(line_in[lcil-1]=='\n') line_in[lcil-1] = '\0';
- if(line_in[lcil-2]=='\r') line_in[lcil-2] = '\0';
+ chomp(line_in);
right_blank_pad (line_in, soli);
lcil = strlen(line_in);
n++;
@@ -595,9 +560,9 @@
fclose(fp);
for(i=0; i<=n; i++)
{
- right_blank_unpad (clib.call[i]);
- right_blank_unpad (clib.country[i]);
- right_blank_unpad (clib.section[i]);
+ right_blank_unpad (clib.call[i]);
+ right_blank_unpad (clib.country[i]);
+ right_blank_unpad (clib.section[i]);
right_blank_unpad (clib.county[i]);
}
clib.number_of_calls = n+1;
@@ -606,7 +571,6 @@
static void read_help_file(void)
{
FILE *fp;
- gint lcil, soli;
gchar filnam[13], msg[49];
gchar line_in[80];
gint n=-1;
@@ -622,19 +586,13 @@
fp = fopen(filnam, "r");
if(fp==NULL)
{
- strcpy(msg, "Error reading ");
- strcat(msg, filnam);
+ snprintf(msg,sizeof(msg), "Error reading %s",filnam);
rw_error_box (main_drawing_area, msg);
return;
}
- soli = sizeof(line_in);
- for( ; ; )
+ while(fgets(line_in, sizeof(line_in), fp) != NULL)
{
- fgets(line_in, soli, fp);
- if(feof(fp)) break;
- lcil = strlen(line_in);
- if(line_in[lcil-1]=='\n') line_in[lcil-1] = '\0';
- if(line_in[lcil-2]=='\r') line_in[lcil-2] = '\0';
+ chomp(line_in);
n++;
strcpy(helpbv.help_lines[n], line_in);
}
@@ -652,13 +610,10 @@
fp = fopen(filnam, "w");
if(fp==NULL)
{
- strcpy(msg, "Error writing ");
- strcat(msg, filnam);
+ snprintf(msg,sizeof(msg),"Error writing %s",filnam);
rw_error_box (main_drawing_area, msg);
return;
}
-// fflush(fp);
-// fsync(fileno(fp));
fclose(fp);
}
@@ -672,11 +627,7 @@
concat(filnam_hold, filnam, 0, idot-1, COPY);
else
strcpy(filnam_hold, filnam);
- strcpy(msg, "cp ");
- strcat(msg, filnam);
- strcat(msg, " ");
- strcat(msg, filnam_hold);
- strcat(msg, ".BAK");
+ snprintf(msg, sizeof(msg), "cp %s %s.BAK",filnam,filnam_hold);
icopy = system(msg);
return icopy;
}
@@ -687,13 +638,11 @@
gchar filnam[13], msg[49], contest_ini_line[76];
gint i;
- strcpy(filnam, contest_file_base);
- strcat(filnam, ".INI");
+ snprintf(filnam, sizeof(filnam), "%s.INIT", contest_file_base);
fp = fopen(filnam, "w");
if(fp==NULL)
{
- strcpy(msg, "Error writing ");
- strcat(msg, filnam);
+ snprintf(msg, sizeof(msg), "Error writing %s", filnam);
rw_error_box (main_drawing_area, msg);
return;
}
@@ -703,8 +652,7 @@
left_blank_unpad(contest_ini_line);
strcat(contest_ini_line, ":");
strcat(contest_ini_line, init_screen_choices[i]);
- add_eol_chars (contest_ini_line);
- fputs(contest_ini_line, fp);
+ fprintf(fp,"%s\n",contest_ini_line);
}
for(i=0; i<MAX_SET_ITEMS; i++)
{
@@ -712,8 +660,7 @@
left_blank_unpad(contest_ini_line);
strcat(contest_ini_line, ":");
strcat(contest_ini_line, set_screen_choices[i]);
- add_eol_chars (contest_ini_line);
- fputs(contest_ini_line, fp);
+ fprintf(fp,"%s\n",contest_ini_line);
}
for(i=0; i<MAX_KEYER_ITEMS; i++)
{
@@ -721,8 +668,7 @@
left_blank_unpad(contest_ini_line);
strcat(contest_ini_line, ":");
strcat(contest_ini_line, keyer_screen_choices[i]);
- add_eol_chars (contest_ini_line);
- fputs(contest_ini_line, fp);
+ fprintf(fp,"%s\n",contest_ini_line);
}
fflush(fp);
fsync(fileno(fp));
@@ -738,8 +684,7 @@
fp = fopen(filnam, "a");
if(fp==NULL)
{
- strcpy(msg, "Error writing ");
- strcat(msg, filnam);
+ snprintf(msg, sizeof(msg), "Error writing %s", filnam);
rw_error_box (main_drawing_area, msg);
return;
}
@@ -757,21 +702,18 @@
FILE *fp;
gchar filnam[13], msg[49], contest_line[76];
- strcpy(filnam, contest_file_base);
- strcat(filnam, ".DED");
+ snprintf(filnam, sizeof(filnam), "%s.DED", contest_file_base);
fp = fopen(filnam, "a");
if(fp==NULL)
{
- strcpy(msg, "Error writing ");
- strcat(msg, filnam);
+ snprintf(msg, sizeof(msg), "Error writing %s",filnam);
rw_error_box (main_drawing_area, msg);
return;
}
strcpy(contest_line, cmd);
- add_eol_chars (contest_line);
- fputs(contest_line, fp);
+ fprintf(fp,"%s\n",contest_line);
make_contest_line (contest_line, qnum);
- fputs(contest_line, fp);
+ fprintf(fp, "%s\n", contest_line);
fflush(fp);
fsync(fileno(fp));
fclose(fp);
@@ -789,8 +731,7 @@
fp = fopen(filnam, "w");
if(fp==NULL)
{
- strcpy(msg, "Error writing ");
- strcat(msg, filnam);
+ snprintf(msg, sizeof(msg), "Error writing %s", filnam);
rw_error_box (main_drawing_area, msg);
return;
}
@@ -813,8 +754,7 @@
fp = fopen(clib.filnam, "w");
if(fp==NULL)
{
- strcpy(msg, "Error writing ");
- strcat(msg, clib.filnam);
+ snprintf(msg, sizeof(msg),"Error writing %s",clib.filnam);
rw_error_box (main_drawing_area, msg);
return;
}
@@ -856,8 +796,7 @@
strcat(library_line, " ");
strcat(library_line, clib.check[9999]);
right_blank_unpad(library_line);
- add_eol_chars (library_line);
- fputs(library_line, fp);
+ fprintf(fp,"%s\n",library_line);
}
fflush(fp);
fsync(fileno(fp));
@@ -867,24 +806,35 @@
static gint process_tmp_file(const gchar *filnam)
{
FILE *fp;
+ FILE *pfp;
gchar filnam_hold[14], psc_line[81], system_line[41];
gint ami_running=-1;
- strcpy(filnam_hold, filnam);
- strcat(filnam_hold, ".tmp");
- strcpy(system_line, "ps -C ");
- strcat(system_line, filnam);
- strcat(system_line, " | sort > ");
- strcat(system_line, filnam_hold);
- system(system_line);
- fp = fopen(filnam_hold, "r");
- if(fp!=NULL)
+ snprintf(system_line, sizeof(system_line) - 1, "ps|grep %s|grep -v grep",
+ filnam);
+ pfp = popen(system_line, "r");
+ if(pfp!=NULL)
{
- fgets(psc_line, sizeof(psc_line), fp);
+ fgets(psc_line, sizeof(psc_line), pfp);
if(kb_index (psc_line, filnam)>-1)
ami_running = 0;
- fclose(fp);
- remove(filnam_hold);
+ fclose(pfp);
}
return ami_running;
}
+
+static char*
+chomp(char *s)
+{
+ char *p;
+
+ p = strchr(s, '\n');
+ if (p != NULL)
+ {
+ *p = '\0';
+ p--;
+ if (*p == '\r')
+ *p = '\0';
+ }
+}
+

32
comms/kb/files/patch-kb.c Normal file
View File

@ -0,0 +1,32 @@
--- kb.c.orig 2007-09-10 14:58:04.000000000 -0400
+++ kb.c 2007-11-24 14:46:35.000000000 -0500
@@ -1,7 +1,12 @@
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
+#if (defined(__unix__) || defined(unix)) && !defined(USG)
+#include <sys/param.h>
+#endif
+#ifndef BSD
#include <sys/io.h>
+#endif
#include <stdlib.h>
#include <time.h>
#include <string.h>
@@ -3090,10 +3095,14 @@
gtk_key_snooper_install (kp_snooper, drawing_area);
+#ifdef __FreeBSD__
+ fd_bells = open("/dev/speaker", O_RDWR);
+#else
fd_bells = open("/dev/kb_bells", O_RDWR);
+#endif
g_thread_init (NULL);
gtk_main ();
- close(fd_bells);
-
+ if(fd_bells > 0)
+ close(fd_bells);
return 0;
}

View File

@ -0,0 +1,86 @@
--- support.c.orig 2007-07-18 14:21:10.000000000 -0400
+++ support.c 2007-12-20 18:48:00.000000000 -0500
@@ -1,3 +1,6 @@
+#ifdef BSDSOUND
+#include BSDSOUND
+#endif
#include <termios.h>
#include <libgnome/libgnome.h>
#include <sys/utsname.h>
@@ -20,7 +23,6 @@
static void concat(gchar *s1, const gchar *s2, gint is2, gint js2,
gint nullout_s1);
static gint kb_index(const gchar *s1, const gchar *s2);
-static void add_eol_chars(gchar *line_out);
static void left_zero_pad(gchar *s1, gint ss1);
static void left_blank_pad(gchar *s1, gint ss1);
static void left_blank_unpad(gchar *s1);
@@ -144,10 +146,22 @@
layout);
}
+#ifdef BSDSOUND
+#include "bsd_bells.c"
+#endif
static void play_bells(int isound)
{
- if(!strcmp(set_screen_choices[3], "<YES>"))
- ioctl(fd_bells, _IO(KB_BELLS_IOCTL_BASE, isound));
+ if(fd_bells<0)
+ return;
+ if(strcmp(set_screen_choices[3], "<YES>") !=0)
+ return;
+#ifdef BSD
+#ifdef BSDSOUND
+ bsd_play_bells(isound);
+#endif
+#else
+ ioctl(fd_bells, _IO(KB_BELLS_IOCTL_BASE, isound));
+#endif
}
static void get_kb_time(void)
@@ -189,25 +203,8 @@
static void fill_kb_dt(void)
{
- gchar *t1;
-
- t1 = asctime(&kb_time);
- kb_dt.date[0] = month_num[2*kb_time.tm_mon];
- kb_dt.date[1] = month_num[2*kb_time.tm_mon+1];
- kb_dt.date[2] = *(t1+8);
- if(kb_dt.date[2]==' ')
- kb_dt.date[2] = '0';
- kb_dt.date[3] = *(t1+9);
- kb_dt.date[4] = *(t1+22);
- kb_dt.date[5] = *(t1+23);
- kb_dt.date[6] = '\0';
- kb_dt.time[0] = *(t1+11);
- kb_dt.time[1] = *(t1+12);
- kb_dt.time[2] = *(t1+14);
- kb_dt.time[3] = *(t1+15);
- kb_dt.time[4] = *(t1+17);
- kb_dt.time[5] = *(t1+18);
- kb_dt.time[6] = '\0';
+ strftime(kb_dt.date, sizeof(kb_dt.date), "%m%d%g", &kb_time);
+ strftime(kb_dt.time, sizeof(kb_dt.time), "%H%M%S", &kb_time);
}
static gint idelta_time(const gchar *day1, const gchar *day2,
@@ -284,15 +281,6 @@
return -1;
}
-static void add_eol_chars(gchar *line_out)
-{
- gint lcil;
-
- lcil = strlen(line_out);
- line_out[lcil] = '\r';
- line_out[lcil+1] = '\n';
- line_out[lcil+2] = '\0';
-}
static void left_zero_pad(gchar *s1, gint ss1)
{

View File

@ -0,0 +1,8 @@
kb is now installed.
If you want the speaker bell to work, make sure you add
speaker_load="YES" to /boot/loader.conf if your kernel
does not have speaker support. You will also need to modify
/etc/devfs.conf to add permission for users to use the speaker.
...
perm speaker 0660
...

14
comms/kb/pkg-descr Normal file
View File

@ -0,0 +1,14 @@
The KB contest logging computer program runs on the Linux operating system
with the Gnome desktop. The program is under development, and currently
supports the CQ WW, CQ WPX, and ARRL DX contests, plus Field Day.
Features include on-the-fly dupe checking, CW and voice message keying,
super check partial, packet (Telnet and rf nodes), networking, and
radio control (currently for the FT-1000 only). The program is designed
to be used by U.S. stations, with some support for Canadian stations.
New features and contests are being added regularly, and I will consider
adding support for DX stations if there is sufficient demand.
(The port version has bug fixes and some modifications for Canadian stations.
- db)
WWW: http://www.k2ct.net/kbsoftware/kbsoftware.htm

15
comms/kb/pkg-plist Normal file
View File

@ -0,0 +1,15 @@
bin/kb
bin/kb_bin
sbin/kb_server
etc/rc.d/kbserver
%%DATADIR%%/CALL_FD.LST
%%DATADIR%%/CALL_LIB.LST
%%DATADIR%%/CALL_SS.LST
%%DATADIR%%/COUNTY.CQP
%%DATADIR%%/COUNTRY.LST
%%DATADIR%%/DEFAULT.INI
%%DATADIR%%/HELP.LST
%%DATADIR%%/HELPFD.LST
%%DATADIR%%/SECTION.LST
%%DATADIR%%/STATE.LST
@dirrm %%DATADIR%%