File: swkon.c

package info (click to toggle)
kon2 0.3.9b-20
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd, lenny, squeeze, wheezy
  • size: 628 kB
  • ctags: 808
  • sloc: ansic: 6,974; makefile: 219; sh: 181
file content (88 lines) | stat: -rw-r--r-- 1,799 bytes parent folder | download | duplicates (7)
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
#include	<stdio.h>
#include	<stdlib.h>
#include	<unistd.h>
#include	<errno.h>
#include	<string.h>
#include	<ctype.h>
#include	<sys/stat.h>
#include	<sys/socket.h>
#include	<signal.h>

#include	<interface.h>

const char	*progName;

int	OpenSocket(void)
{
	int	s;

	if ((s = SocketClientOpen()) == -1) {
		fprintf(stderr, "%s> connect fail.\n", progName);
		exit(EXIT_FAILURE);
	}
	return s;
}

int	WaitAck(int s)
{
	struct messageHeader mh;
	bzero(&mh, sizeof(mh));
	SocketRecCommand(s, &mh);
	if (mh.cmd != CHR_ACK) {
		fprintf(stderr, "%s> no answer.\n", progName);
		return EXIT_FAILURE;
	}
	return EXIT_SUCCESS;
}

int	ChangeMode(char	cmd)
{
	int	s = OpenSocket();
	SocketSendCommand(s, cmd);
	return WaitAck(s);
}

int	ResetKon(int argc, const char *argv[])
{
	int	s = OpenSocket();
	int	i, len;

	SocketSendCommand(s, CHR_RESTART);
	if (WaitAck(s) != EXIT_SUCCESS)
		return EXIT_FAILURE;
	write(s, &argc, sizeof(argc));
	for (i = 0; i < argc; i++) {
		len = strlen(argv[i]);
		write(s, &len, sizeof(len));
		write(s, argv[i], len);
	}
	return EXIT_SUCCESS;
}

void	usage(void)
{
	fprintf(stderr, "usage:\n"
		"	%s -h|-help	(print this help)\n"
		"	%s -t		(switch to text mode)\n"
		"	%s -g		(switch to graphics mode)\n"
		"	%s [video] [-capability value ...]	(reset KON)\n",
		progName, progName, progName, progName);
}

int	main(int argc, const char *argv[])
{
	progName = argv[0];

	if (argc == 2) {
		if (strcasecmp(argv[1], "-h") == 0 || strcasecmp(argv[1], "-help") == 0) {
			usage();
			return EXIT_SUCCESS;
		} else if (strcasecmp(argv[1], "-t") == 0)
			return ChangeMode(CHR_TEXTMODE);
		else if (strcasecmp(argv[1], "-g") == 0)
			return ChangeMode(CHR_GRAPHMODE);
		else if (strcasecmp(argv[1], "-s") == 0)
			return ChangeMode(CHR_STAT);
	}
	return ResetKon(argc - 1, argv + 1);
}