parse.c revision 1.2 1 /* $NetBSD: parse.c,v 1.2 2013/01/16 15:15:01 tsutsui Exp $ */
2
3 /*
4 * Copyright (c) 1992 OMRON Corporation.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * OMRON Corporation.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by the University of
20 * California, Berkeley and its contributors.
21 * 4. Neither the name of the University nor the names of its contributors
22 * may be used to endorse or promote products derived from this software
23 * without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35 * SUCH DAMAGE.
36 *
37 * @(#)parse.c 8.1 (Berkeley) 6/10/93
38 */
39 /*
40 * Copyright (c) 1992, 1993
41 * The Regents of the University of California. All rights reserved.
42 *
43 * This code is derived from software contributed to Berkeley by
44 * OMRON Corporation.
45 *
46 * Redistribution and use in source and binary forms, with or without
47 * modification, are permitted provided that the following conditions
48 * are met:
49 * 1. Redistributions of source code must retain the above copyright
50 * notice, this list of conditions and the following disclaimer.
51 * 2. Redistributions in binary form must reproduce the above copyright
52 * notice, this list of conditions and the following disclaimer in the
53 * documentation and/or other materials provided with the distribution.
54 * 3. Neither the name of the University nor the names of its contributors
55 * may be used to endorse or promote products derived from this software
56 * without specific prior written permission.
57 *
58 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
59 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
60 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
61 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
62 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
63 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
64 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
65 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
66 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
67 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
68 * SUCH DAMAGE.
69 *
70 * @(#)parse.c 8.1 (Berkeley) 6/10/93
71 */
72
73 /*
74 * parse.c -- command parser
75 * by A.Fujita, JAN-30-1992
76 */
77
78 #include <lib/libkern/libkern.h>
79 #include <luna68k/stand/boot/samachdep.h>
80 #include <luna68k/stand/boot/status.h>
81
82 int
83 check_args(int argc, char *argv[])
84 {
85 int i;
86
87 for ( i = 0; i < argc; i++)
88 printf("argv[%d] = \"%s\"\n", i, argv[i]);
89
90 return(ST_NORMAL);
91 }
92
93 int
94 exit_program(int argc, char *argv[])
95 {
96 return(ST_EXIT);
97 }
98
99 struct command_entry {
100 char *name;
101 int (*func)(int, char **);
102 };
103
104 struct command_entry entries[] = {
105 { "b", boot },
106 { "boot", boot },
107 { "chkargs", check_args },
108 { "disklabel", disklabel },
109 { "exit", exit_program },
110 #ifdef notyet
111 { "fsdump", fsdump },
112 { "fsrestore", fsrestore },
113 #endif
114 { "howto", how_to_boot },
115 { "ls", cmd_ls },
116 { "screen", screen },
117 #ifdef notyet
118 { "tape", tape },
119 { "tp", tape },
120 #endif
121 { "scsi", scsi },
122 { "quit", exit_program },
123 { 0, 0 }
124 };
125
126
127 int
128 parse(int argc, char *argv[])
129 {
130 int i, status = ST_NOTFOUND;
131
132 for (i = 0; entries[i].name != (char *) 0; i++) {
133 if (!strcmp(argv[0], entries[i].name)) {
134 status = (*entries[i].func)(argc, argv);
135 break;
136 }
137 }
138
139 return(status);
140 }
141
142
143
144 /*
145 * getargs -- make argument arrays
146 */
147
148 int
149 getargs(char buffer[], char *argv[], int maxargs)
150 {
151 int n = 0;
152 char *p = buffer;
153
154 argv[n++] = p;
155 while (*p != '\0') {
156 if ( *p == ' ' ) {
157 *p = '\0';
158 } else if (p != buffer && *(p-1) == '\0') {
159 if ( n < maxargs )
160 argv[n++] = p;
161 }
162 p++;
163 }
164
165 return(n);
166 }
167