xref: /csrg-svn/sys/luna68k/stand/parse.c (revision 63199)
157092Sakito /*
257092Sakito  * Copyright (c) 1992 OMRON Corporation.
3*63199Sbostic  * Copyright (c) 1992, 1993
4*63199Sbostic  *	The Regents of the University of California.  All rights reserved.
557092Sakito  *
657092Sakito  * This code is derived from software contributed to Berkeley by
757092Sakito  * OMRON Corporation.
857092Sakito  *
957092Sakito  * %sccs.include.redist.c%
1057092Sakito  *
11*63199Sbostic  *	@(#)parse.c	8.1 (Berkeley) 06/10/93
1257092Sakito  */
1357092Sakito 
1457092Sakito /*
1557092Sakito  * parse.c -- command parser
1657092Sakito  * by A.Fujita, JAN-30-1992
1757092Sakito  */
1857092Sakito 
1957092Sakito #include <luna68k/stand/status.h>
2057092Sakito 
2157092Sakito /* for scsi.c */
2257092Sakito 
2357092Sakito int scsi();
2457092Sakito 
2557092Sakito /* for disklabel.c */
2657092Sakito 
2757092Sakito int disklabel();
2857092Sakito 
2957092Sakito /* for boot.c */
3057092Sakito 
3157092Sakito int boot();
3257092Sakito 
3357092Sakito int load();
3457092Sakito 
3557092Sakito int how_to_boot();
3657092Sakito 
3757092Sakito /* for tape.c */
3857092Sakito 
3957092Sakito int tape();
4057092Sakito 
4157092Sakito /* for fsdump.c */
4257092Sakito 
4357092Sakito int fsdump();
4457092Sakito int fsrestore();
4557092Sakito 
4657092Sakito /* for screen.c */
4757092Sakito 
4857092Sakito int screen();
4957092Sakito 
5057092Sakito int
check_args(argc,argv)5157092Sakito check_args(argc, argv)
5257092Sakito 	int   argc;
5357092Sakito 	char *argv[];
5457092Sakito {
5557092Sakito 	register int i;
5657092Sakito 
5757092Sakito 	for ( i = 0; i < argc; i++)
5857092Sakito 		printf("argv[%d] = \"%s\"\n", i, argv[i]);
5957092Sakito 
6057092Sakito 	return(ST_NORMAL);
6157092Sakito }
6257092Sakito 
6357092Sakito int
exit_program(argc,argv)6457092Sakito exit_program(argc, argv)
6557092Sakito 	int   argc;
6657092Sakito 	char *argv[];
6757092Sakito {
6857092Sakito 	return(ST_EXIT);
6957092Sakito }
7057092Sakito 
7157092Sakito struct command_entry {
7257092Sakito 	char *name;
7357092Sakito 	int (*func)();
7457092Sakito };
7557092Sakito 
7657092Sakito struct command_entry entries[] = {
7757092Sakito { "b",		boot         },
7857092Sakito { "boot",	boot         },
7957092Sakito { "chkargs",	check_args   },
8057092Sakito { "disklabel",	disklabel    },
8157092Sakito { "exit",	exit_program },
8257092Sakito { "fsdump",	fsdump       },
8357092Sakito { "fsrestore",	fsrestore    },
8457092Sakito { "howto",	how_to_boot  },
8557092Sakito { "load",       load         },
8657092Sakito { "screen",	screen	     },
8757092Sakito { "tape",	tape	     },
8857092Sakito { "tp",		tape	     },
8957092Sakito { "scsi",	scsi         },
9057092Sakito { "quit",	exit_program },
9157092Sakito { 0, 0 }
9257092Sakito };
9357092Sakito 
9457092Sakito 
9557092Sakito int
parse(argc,argv)9657092Sakito parse(argc, argv)
9757092Sakito 	int   argc;
9857092Sakito 	char *argv[];
9957092Sakito {
10057092Sakito 	register int i, status = ST_NOTFOUND;
10157092Sakito 
10257092Sakito 	for (i = 0; entries[i].name != (char *) 0; i++) {
10357092Sakito 		if (!strcmp(argv[0], entries[i].name)) {
10457092Sakito 			status = (*entries[i].func)(argc, argv);
10557092Sakito 			break;
10657092Sakito 		}
10757092Sakito 	}
10857092Sakito 
10957092Sakito 	return(status);
11057092Sakito }
11157092Sakito 
11257092Sakito 
11357092Sakito 
11457092Sakito /*
11557092Sakito  * getargs -- make argument arrays
11657092Sakito  */
11757092Sakito 
getargs(buffer,argv,maxargs)11857092Sakito getargs(buffer, argv, maxargs)
11957092Sakito 	char buffer[], *argv[];
12057092Sakito 	int  maxargs;
12157092Sakito {
12257092Sakito 	register int   n = 0;
12357092Sakito 	register char *p = buffer;
12457092Sakito 
12557092Sakito 	argv[n++] = p;
12657092Sakito 	while (*p != '\0') {
12757092Sakito 		if ( *p == ' ' ) {
12857092Sakito 			*p = '\0';
12957092Sakito 		} else if (p != buffer && *(p-1) == '\0') {
13057092Sakito 			if ( n < maxargs )
13157092Sakito 				argv[n++] = p;
13257092Sakito 		}
13357092Sakito 		p++;
13457092Sakito 	}
13557092Sakito 
13657092Sakito 	return(n);
13757092Sakito }
138