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