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