1#! /bin/sh
2
3if test -z "$AWK"; then
4  AWK=awk
5fi
6if test -z "$CC"; then
7  CC=cc
8fi
9if test -z "$srcdir"; then
10  srcdir=.
11fi
12
13LC_ALL=C
14export LC_ALL
15
16rm -f comm.h
17cat << EOF > comm.h
18/*
19 * This file is automagically created from comm.c -- DO NOT EDIT
20 */
21
22struct comm
23{
24  char *name;
25  int flags;
26#ifdef MULTIUSER
27  AclBits userbits[ACL_BITS_PER_CMD];
28#endif
29};
30
31#define ARGS_MASK	(3)
32
33#define ARGS_0	(0)
34#define ARGS_1	(1)
35#define ARGS_2	(2)
36#define ARGS_3	(3)
37
38#define ARGS_PLUS1	(1<<2)
39#define ARGS_PLUS2	(1<<3)
40#define ARGS_PLUS3	(1<<4)
41#define ARGS_ORMORE	(1<<5)
42
43#define NEED_FORE	(1<<6)	/* this command needs a fore window */
44#define NEED_DISPLAY	(1<<7)	/* this command needs a display */
45#define NEED_LAYER	(1<<8)	/* this command needs a layer */
46
47#define ARGS_01		(ARGS_0 | ARGS_PLUS1)
48#define ARGS_02		(ARGS_0 | ARGS_PLUS2)
49#define ARGS_12		(ARGS_1 | ARGS_PLUS1)
50#define ARGS_23		(ARGS_2 | ARGS_PLUS1)
51#define ARGS_24		(ARGS_2 | ARGS_PLUS2)
52#define ARGS_34		(ARGS_3 | ARGS_PLUS1)
53#define ARGS_012	(ARGS_0 | ARGS_PLUS1 | ARGS_PLUS2)
54#define ARGS_0123	(ARGS_0 | ARGS_PLUS1 | ARGS_PLUS2 | ARGS_PLUS3)
55#define ARGS_123	(ARGS_1 | ARGS_PLUS1 | ARGS_PLUS2)
56#define ARGS_124	(ARGS_1 | ARGS_PLUS1 | ARGS_PLUS3)
57#define ARGS_1234	(ARGS_1 | ARGS_PLUS1 | ARGS_PLUS2 | ARGS_PLUS3)
58
59struct action
60{
61  int nr;
62  char **args;
63  int *argl;
64};
65
66#define RC_ILLEGAL -1
67
68EOF
69$AWK < ${srcdir}/comm.c >> comm.h '
70/^  [{] ".*/	{   if (old > $2) {
71		printf("***ERROR: %s <= %s !!!\n\n", $2, old);
72		exit 1;
73	    }
74	old = $2;
75	}
76'
77$CC -E -I. -I${srcdir} ${srcdir}/comm.c > comm.cpp
78sed < comm.cpp \
79  -n \
80  -e '/^ *{ "/y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
81  -e '/^ *{ "/s/^ *{ "\([^"]*\)".*/\1/p' \
82| $AWK '
83/.*/ {	printf "#define RC_%s %d\n",$0,i++;
84     }
85END  {	printf "\n#define RC_LAST %d\n",i-1;
86     }
87' >> comm.h
88chmod a-w comm.h
89rm -f comm.cpp
90