diff options
Diffstat (limited to 'lib/libdisk/tst01.c')
-rw-r--r-- | lib/libdisk/tst01.c | 128 |
1 files changed, 116 insertions, 12 deletions
diff --git a/lib/libdisk/tst01.c b/lib/libdisk/tst01.c index 9320356..8ed705a 100644 --- a/lib/libdisk/tst01.c +++ b/lib/libdisk/tst01.c @@ -6,32 +6,136 @@ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- * - * $Id$ + * $Id: tst01.c,v 1.2 1995/04/29 01:55:25 phk Exp $ * */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> +#include <err.h> +#include <readline/readline.h> +#include <readline/history.h> #include <sys/types.h> #include "libdisk.h" +CHAR_N; + int main(int argc, char **argv) { - int i; - struct disk *d; + struct disk *d,*db; + char myprompt[BUFSIZ]; + char *p,*q=0; + char **cp,*cmds[200]; + int ncmd,i; - for(i=1;i<argc;i++) { - d = Open_Disk(argv[i]); - if (!d) continue; - Debug_Disk(d); - if (d->chunks->size == 1411200) - Set_Bios_Geom(d,1024,15,63); - else - Set_Bios_Geom(d,2003,64,32); + if (argc < 2) { + fprintf(stderr,"Usage:\n\t%s diskname\n",argv[0]); + exit(1); + } + d = Open_Disk(argv[1]); + if (!d) + err(1,"Coudn't open disk %s",argv[1]); + + sprintf(myprompt,"%s %s> ",argv[0],argv[1]); + while(1) { + printf("\n\n\n\n"); Debug_Disk(d); - printf("<%s>\n",CheckRules(d)); + p = CheckRules(d); + if (p) { + printf("%s",p); + free(p); + } + if (q) + free(q); + q = p = readline(myprompt); + if(!p) + break; + for(cp = cmds; (*cp = strsep(&p, " \t")) != NULL;) + if (**cp != '\0') + cp++; + ncmd = cp - cmds; + if(!ncmd) + continue; + if (!strcasecmp(*cmds,"quit")) { break; } + if (!strcasecmp(*cmds,"exit")) { break; } + if (!strcasecmp(*cmds,"q")) { break; } + if (!strcasecmp(*cmds,"x")) { break; } + if (!strcasecmp(*cmds,"delete") && ncmd == 2) { + printf("delete = %d\n", + Delete_Chunk(d, + (struct chunk *)strtol(cmds[1],0,0))); + continue; + } + if (!strcasecmp(*cmds,"allfreebsd")) { + All_FreeBSD(d); + continue; + } + if (!strcasecmp(*cmds,"bios") && ncmd == 4) { + Set_Bios_Geom(d, + strtol(cmds[1],0,0), + strtol(cmds[2],0,0), + strtol(cmds[3],0,0)); + continue; + } + if (!strcasecmp(*cmds,"phys") && ncmd == 4) { + d = Set_Phys_Geom(d, + strtol(cmds[1],0,0), + strtol(cmds[2],0,0), + strtol(cmds[3],0,0)); + continue; + } + if (!strcasecmp(*cmds,"collapse")) { + if (cmds[1]) + while (Collapse_Chunk(d, + (struct chunk *)strtol(cmds[1],0,0))) + ; + else + Collapse_Disk(d); + continue; + } + if (!strcasecmp(*cmds,"read")) { + db=d; + if (cmds[1]) + d = Open_Disk(cmds[1]); + else + d = Open_Disk(db->name); + if (!d) { + fprintf(stderr,"Failed to open %s\n",argv[1]); + d = db; + } else { + Free_Disk(db); + } + continue; + } + if (!strcasecmp(*cmds,"create") && ncmd == 6) { + + printf("Create=%d\n", + Create_Chunk(d, + strtol(cmds[1],0,0), + strtol(cmds[2],0,0), + strtol(cmds[3],0,0), + strtol(cmds[4],0,0), + strtol(cmds[5],0,0))); + continue; + } + if (strcasecmp(*cmds,"help")) + printf("\007ERROR\n"); + printf("CMDS:\n"); + printf("\tallfreebsd\n"); + printf("\tbios cyl hd sect\n"); + printf("\tcollapse [pointer]\n"); + printf("\tcreate offset size enum subtype flags\n"); + printf("\tdelete pointer\n"); + printf("\tphys cyl hd sect\n"); + printf("\tquit\n"); + printf("\tread [disk]\n"); + printf("\nENUM:\n\t"); + for(i=0;chunk_n[i];i++) + printf("%d = %s%s",i,chunk_n[i],i == 4 ? "\n\t" : " "); + printf("\n"); + } exit (0); } |