File: sendtoxlog.c

package info (click to toggle)
xlog 2.0.3-2
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 15,140 kB
  • ctags: 1,122
  • sloc: ansic: 22,442; sh: 4,151; makefile: 691; sed: 16; xml: 8
file content (130 lines) | stat: -rw-r--r-- 4,138 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*

   sendtoxlog - example for sending data to xlog from a second application
   Copyright (C) 2001-2005 Joop Stakenborg <pg4i@amsat.org>
  
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   Xlog is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with xlog.  If not, see <http://www.gnu.org/licenses/>.

 */

/*
 *
 * Compile with 'gcc -o sendtoxlog sendtoxlog.c'
 * See the provided README for more details.
 *
 */

/* definition of some strings to send over */
#define DEMO1	"program:sendtoxlog\1version:1\1date:29 Jul 2001\1time:2214\1call:wa0eir"
#define DEMO2	"program:sendtoxlog\1version:1\1date:30 Dec 2001\1time:2214\1endtime:2220\
\1call:pg4i\1mhz:14\1mode:cw\1tx:579\1rx:569\1name:joop\1qth:houten\1notes:this\nis DEMO2\
\1power:100W\1locator:JO22OB\1free1:testfree1\1free2:testfree2"
#define DEMO3	"program:sendtoxlog\1version:1\1call:f8cfe"
#define DEMO4	"program:sendtoxlog\1version:1\1date:26 Aug 2003\1time:2214\1endtime:2220\
\1call:pg4i\1mhz:HAMLIB\1mode:HAMLIB\1tx:HAMLIB\1rx:569\1name:joop\1qth:houten\1notes:this is DEMO4\
\1power:HAMLIB\1locator:JO22OB\1free1:testfree1\1free2:testfree2"
#define DEMO5	"program:sendtoxlog\1version:1\1call:pg4i\1notes:áóèúéà"

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

extern int errno;

/* structure needed for the message queue */
typedef struct
{
	long mtype;				/* mtype should always be 88 */
	char mtext[1024];	/* mtext holds the message */
}
msgtype;

msgtype msgbuf;
int msgid;

/* this is the function which does the actual sending over the message queue */
static void
sendtoxlog (char *message)
{
	strcpy (msgbuf.mtext, message);
	if (msgsnd (msgid, (void *) &msgbuf, 1024, 0) == -1)
		fprintf (stderr, "msgsnd failed: %s\n", strerror (errno));
	else
		fprintf (stdout, "message sent OK\n");
}

int
main (int argc, char *argv[])
{

	/* first some command line parsing */
	if (argc == 1 || argc > 2)
		{
			fprintf (stdout, "Sendtoxlog, program which demonstrates how to send remote data to xlog.\n");
			fprintf (stdout, "	Usage: sendtoxlog [number], where number can be 1, 2, 3, 4 or 5 ...\n");
			fprintf (stdout, "		 sendtoxlog 1, demonstrates date time and callsign\n");
			fprintf (stdout, "		 sendtoxlog 2, demonstrates all entries\n");
			fprintf (stdout, "		 sendtoxlog 3, demonstrates only the callsign field\n");
			fprintf (stdout, "		 sendtoxlog 4, demonstrates hamlib capabilities\n");
			fprintf (stdout, "		 sendtoxlog 5, test language characters\n");
			exit (0);
		}
	if (strcmp (argv[1], "1") != 0 && strcmp (argv[1], "2") != 0
			&& strcmp (argv[1], "3") != 0 && strcmp (argv[1], "4") != 0
			&& strcmp (argv[1], "5") != 0)
		{
			fprintf (stdout, "Argument for sendtoxlog is '1', '2', '3', '4' or '5',");
			fprintf (stdout, "	type sendtoxlog for help.\n");
			exit (1);
		}

	/* create the message queue, you need to use 1238 for the key to talk to xlog */
	msgid = msgget ((key_t) 1238, 0666 | IPC_CREAT);
	if (msgid == -1)
		{
			fprintf (stderr, "msgget failed: %s\n", strerror (errno));
			exit (1);
		}
	/* you need to set mtype to 88 */
	msgbuf.mtype = 88;

	/* here we go */

	/* demo 1 */
	if (strcmp (argv[1], "1") == 0)
		sendtoxlog (DEMO1);
	/* demo 2 */
	if (strcmp (argv[1], "2") == 0)
		sendtoxlog (DEMO2);
	/* demo 3 */
	if (strcmp (argv[1], "3") == 0)
		sendtoxlog (DEMO3);
	/* demo 4 */
	if (strcmp (argv[1], "4") == 0)
		sendtoxlog (DEMO4);
	/* demo 5 */
	if (strcmp (argv[1], "5") == 0)
		sendtoxlog (DEMO5);

/* 
 * WARNING: do not remove the message queue with 
 * "msgctl(msgid, IPC_RMID, 0)", xlog will take care of it
 */
	exit (0);
}