xref: /minix/external/bsd/nvi/dist/ipc/ipc_cmd.c (revision 84d9c625)
1 /*	$NetBSD: ipc_cmd.c,v 1.2 2013/11/22 15:52:05 christos Exp $	*/
2 #include "config.h"
3 
4 #include <sys/types.h>
5 #include <sys/queue.h>
6 
7 #include <bitstring.h>
8 #include <limits.h>
9 #include <stdio.h>
10 
11 #include "../common/common.h"
12 
13 #include "ip.h"
14 
15 static int ipc_unmarshall_a __P((IPVIWIN *, IP_BUF*, IPFunc));
16 static int ipc_unmarshall_12 __P((IPVIWIN *, IP_BUF*, IPFunc));
17 static int ipc_unmarshall __P((IPVIWIN *, IP_BUF*, IPFunc));
18 static int ipc_unmarshall_ab1 __P((IPVIWIN *, IP_BUF*, IPFunc));
19 #if 0
20 static int ipc_unmarshall_1a __P((IPVIWIN *, IP_BUF*, IPFunc));
21 #endif
22 static int ipc_unmarshall_1 __P((IPVIWIN *, IP_BUF*, IPFunc));
23 static int ipc_unmarshall_123 __P((IPVIWIN *, IP_BUF*, IPFunc));
24 
25 #define OFFSET(t,m) ((size_t)&((t *)0)->m)
26 
27 IPFUNLIST const ipfuns[] = {
28 /* SI_ADDSTR */
29     {"a",   ipc_unmarshall_a,	OFFSET(IPSIOPS, addstr)},
30 /* SI_ATTRIBUTE */
31     {"12",  ipc_unmarshall_12,	OFFSET(IPSIOPS, attribute)},
32 /* SI_BELL */
33     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, bell)},
34 /* SI_BUSY_OFF */
35     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, busy_off)},
36 /* SI_BUSY_ON */
37     {"a",   ipc_unmarshall_a,	OFFSET(IPSIOPS, busy_on)},
38 /* SI_CLRTOEOL */
39     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, clrtoeol)},
40 /* SI_DELETELN */
41     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, deleteln)},
42 /* SI_DISCARD */
43     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, discard)},
44 /* SI_EDITOPT */
45     {"ab1", ipc_unmarshall_ab1,	OFFSET(IPSIOPS, editopt)},
46 /* SI_INSERTLN */
47     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, insertln)},
48 /* SI_MOVE */
49     {"12",  ipc_unmarshall_12,	OFFSET(IPSIOPS, move)},
50 /* SI_QUIT */
51     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, quit)},
52 /* SI_REDRAW */
53     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, redraw)},
54 /* SI_REFRESH */
55     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, refresh)},
56 /* SI_RENAME */
57     {"a",   ipc_unmarshall_a,	OFFSET(IPSIOPS, rename)},
58 /* SI_REPLY */
59     {"1a",  NULL,		0},
60 /* SI_REWRITE */
61     {"1",   ipc_unmarshall_1,	OFFSET(IPSIOPS, rewrite)},
62 /* SI_SCROLLBAR */
63     {"123", ipc_unmarshall_123,	OFFSET(IPSIOPS, scrollbar)},
64 /* SI_SELECT */
65     {"a",   ipc_unmarshall_a,	OFFSET(IPSIOPS, select)},
66 /* SI_SPLIT */
67     {"",    ipc_unmarshall,	OFFSET(IPSIOPS, split)},
68 /* SI_WADDSTR */
69     {"a",   ipc_unmarshall_a,	OFFSET(IPSIOPS, waddstr)},
70 /* SI_EVENT_SUP */
71 };
72 
73 static int
ipc_unmarshall_a(IPVIWIN * ipvi,IP_BUF * ipb,IPFunc func)74 ipc_unmarshall_a(IPVIWIN *ipvi, IP_BUF *ipb, IPFunc func)
75 {
76     return ((IPFunc_a)func)(ipvi, ipb->str1, ipb->len1);
77 }
78 
79 static int
ipc_unmarshall_12(IPVIWIN * ipvi,IP_BUF * ipb,IPFunc func)80 ipc_unmarshall_12(IPVIWIN *ipvi, IP_BUF *ipb, IPFunc func)
81 {
82     return ((IPFunc_12)func)(ipvi, ipb->val1, ipb->val2);
83 }
84 
85 static int
ipc_unmarshall(IPVIWIN * ipvi,IP_BUF * ipb,IPFunc func)86 ipc_unmarshall(IPVIWIN *ipvi, IP_BUF *ipb, IPFunc func)
87 {
88     return func(ipvi);
89 }
90 
91 static int
ipc_unmarshall_ab1(IPVIWIN * ipvi,IP_BUF * ipb,IPFunc func)92 ipc_unmarshall_ab1(IPVIWIN *ipvi, IP_BUF *ipb, IPFunc func)
93 {
94     return ((IPFunc_ab1)func)(ipvi, ipb->str1, ipb->len1, ipb->str2, ipb->len2, ipb->val1);
95 }
96 
97 #if 0
98 static int
99 ipc_unmarshall_1a(IPVIWIN *ipvi, IP_BUF *ipb, IPFunc func)
100 {
101     return ((IPFunc_1a)func)(ipvi, ipb->val1, ipb->str1, ipb->len1);
102 }
103 #endif
104 
105 static int
ipc_unmarshall_1(IPVIWIN * ipvi,IP_BUF * ipb,IPFunc func)106 ipc_unmarshall_1(IPVIWIN *ipvi, IP_BUF *ipb, IPFunc func)
107 {
108     return ((IPFunc_1)func)(ipvi, ipb->val1);
109 }
110 
111 static int
ipc_unmarshall_123(IPVIWIN * ipvi,IP_BUF * ipb,IPFunc func)112 ipc_unmarshall_123(IPVIWIN *ipvi, IP_BUF *ipb, IPFunc func)
113 {
114     return ((IPFunc_123)func)(ipvi, ipb->val1, ipb->val2, ipb->val3);
115 }
116