xref: /csrg-svn/sys/luna68k/stand/parse.c (revision 57092)
1*57092Sakito /*
2*57092Sakito  * Copyright (c) 1992 OMRON Corporation.
3*57092Sakito  * Copyright (c) 1992 The Regents of the University of California.
4*57092Sakito  * All rights reserved.
5*57092Sakito  *
6*57092Sakito  * This code is derived from software contributed to Berkeley by
7*57092Sakito  * OMRON Corporation.
8*57092Sakito  *
9*57092Sakito  * %sccs.include.redist.c%
10*57092Sakito  *
11*57092Sakito  *	@(#)parse.c	7.1 (Berkeley) 12/13/92
12*57092Sakito  */
13*57092Sakito 
14*57092Sakito /*
15*57092Sakito  * parse.c -- command parser
16*57092Sakito  * by A.Fujita, JAN-30-1992
17*57092Sakito  */
18*57092Sakito 
19*57092Sakito #include <luna68k/stand/status.h>
20*57092Sakito 
21*57092Sakito /* for scsi.c */
22*57092Sakito 
23*57092Sakito int scsi();
24*57092Sakito 
25*57092Sakito /* for disklabel.c */
26*57092Sakito 
27*57092Sakito int disklabel();
28*57092Sakito 
29*57092Sakito /* for boot.c */
30*57092Sakito 
31*57092Sakito int boot();
32*57092Sakito 
33*57092Sakito int load();
34*57092Sakito 
35*57092Sakito int how_to_boot();
36*57092Sakito 
37*57092Sakito /* for tape.c */
38*57092Sakito 
39*57092Sakito int tape();
40*57092Sakito 
41*57092Sakito /* for fsdump.c */
42*57092Sakito 
43*57092Sakito int fsdump();
44*57092Sakito int fsrestore();
45*57092Sakito 
46*57092Sakito /* for screen.c */
47*57092Sakito 
48*57092Sakito int screen();
49*57092Sakito 
50*57092Sakito int
51*57092Sakito check_args(argc, argv)
52*57092Sakito 	int   argc;
53*57092Sakito 	char *argv[];
54*57092Sakito {
55*57092Sakito 	register int i;
56*57092Sakito 
57*57092Sakito 	for ( i = 0; i < argc; i++)
58*57092Sakito 		printf("argv[%d] = \"%s\"\n", i, argv[i]);
59*57092Sakito 
60*57092Sakito 	return(ST_NORMAL);
61*57092Sakito }
62*57092Sakito 
63*57092Sakito int
64*57092Sakito exit_program(argc, argv)
65*57092Sakito 	int   argc;
66*57092Sakito 	char *argv[];
67*57092Sakito {
68*57092Sakito 	return(ST_EXIT);
69*57092Sakito }
70*57092Sakito 
71*57092Sakito struct command_entry {
72*57092Sakito 	char *name;
73*57092Sakito 	int (*func)();
74*57092Sakito };
75*57092Sakito 
76*57092Sakito struct command_entry entries[] = {
77*57092Sakito { "b",		boot         },
78*57092Sakito { "boot",	boot         },
79*57092Sakito { "chkargs",	check_args   },
80*57092Sakito { "disklabel",	disklabel    },
81*57092Sakito { "exit",	exit_program },
82*57092Sakito { "fsdump",	fsdump       },
83*57092Sakito { "fsrestore",	fsrestore    },
84*57092Sakito { "howto",	how_to_boot  },
85*57092Sakito { "load",       load         },
86*57092Sakito { "screen",	screen	     },
87*57092Sakito { "tape",	tape	     },
88*57092Sakito { "tp",		tape	     },
89*57092Sakito { "scsi",	scsi         },
90*57092Sakito { "quit",	exit_program },
91*57092Sakito { 0, 0 }
92*57092Sakito };
93*57092Sakito 
94*57092Sakito 
95*57092Sakito int
96*57092Sakito parse(argc, argv)
97*57092Sakito 	int   argc;
98*57092Sakito 	char *argv[];
99*57092Sakito {
100*57092Sakito 	register int i, status = ST_NOTFOUND;
101*57092Sakito 
102*57092Sakito 	for (i = 0; entries[i].name != (char *) 0; i++) {
103*57092Sakito 		if (!strcmp(argv[0], entries[i].name)) {
104*57092Sakito 			status = (*entries[i].func)(argc, argv);
105*57092Sakito 			break;
106*57092Sakito 		}
107*57092Sakito 	}
108*57092Sakito 
109*57092Sakito 	return(status);
110*57092Sakito }
111*57092Sakito 
112*57092Sakito 
113*57092Sakito 
114*57092Sakito /*
115*57092Sakito  * getargs -- make argument arrays
116*57092Sakito  */
117*57092Sakito 
118*57092Sakito getargs(buffer, argv, maxargs)
119*57092Sakito 	char buffer[], *argv[];
120*57092Sakito 	int  maxargs;
121*57092Sakito {
122*57092Sakito 	register int   n = 0;
123*57092Sakito 	register char *p = buffer;
124*57092Sakito 
125*57092Sakito 	argv[n++] = p;
126*57092Sakito 	while (*p != '\0') {
127*57092Sakito 		if ( *p == ' ' ) {
128*57092Sakito 			*p = '\0';
129*57092Sakito 		} else if (p != buffer && *(p-1) == '\0') {
130*57092Sakito 			if ( n < maxargs )
131*57092Sakito 				argv[n++] = p;
132*57092Sakito 		}
133*57092Sakito 		p++;
134*57092Sakito 	}
135*57092Sakito 
136*57092Sakito 	return(n);
137*57092Sakito }
138