⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vlmgr.c

📁 harvest是一个下载html网页得机器人
💻 C
📖 第 1 页 / 共 2 页
字号:
      } else if(!strcmp(argv[i], "-ki")){        ki = TRUE;      } else if(!strcmp(argv[i], "-ox")){        ox = TRUE;      } else if(!strcmp(argv[i], "-top")){        if(++i >= argc) usage();        top = argv[i];      } else if(!strcmp(argv[i], "-bot")){        if(++i >= argc) usage();        bot = argv[i];      } else if(!strcmp(argv[i], "-gt")){        gt = TRUE;      } else if(!strcmp(argv[i], "-lt")){        lt = TRUE;      } else if(!strcmp(argv[i], "-max")){        if(++i >= argc) usage();        max = atoi(argv[i]);      } else if(!strcmp(argv[i], "-desc")){        desc = TRUE;      } else {        usage();      }    } else if(!name){      name = argv[i];    } else {      usage();    }  }  if(!name) usage();  tbuf = NULL;  bbuf = NULL;  if(kx){    if(top) tbuf = hextoobj(top, &tsiz);    if(bot) bbuf = hextoobj(bot, &bsiz);  } else if(ki){    if(top) tbuf = dectoiobj(top, &tsiz);    if(bot) bbuf = dectoiobj(bot, &bsiz);  } else {    if(top){      tbuf = mystrdup(top);      tsiz = strlen(tbuf);    }    if(bot){      bbuf = mystrdup(bot);      bsiz = strlen(bbuf);    }  }  rv = dolist(name, tbuf, tsiz, bbuf, bsiz, ki ? VL_CMPINT : VL_CMPLEX, ki, ox, gt, lt, max, desc);  free(tbuf);  free(bbuf);  return rv;}/* parse arguments of optimize command */int runoptimize(int argc, char **argv){  char *name;  int i, rv;  name = NULL;  for(i = 2; i < argc; i++){    if(!name && argv[i][0] == '-'){      usage();    } else if(!name){      name = argv[i];    } else {      usage();    }  }  if(!name) usage();  rv = dooptimize(name);  return rv;}/* parse arguments of inform command */int runinform(int argc, char **argv){  char *name;  int i, rv;  name = NULL;  for(i = 2; i < argc; i++){    if(!name && argv[i][0] == '-'){      usage();    } else if(!name){      name = argv[i];    } else {      usage();    }  }  if(!name) usage();  rv = doinform(name);  return rv;}/* parse arguments of remove command */int runremove(int argc, char **argv){  char *name;  int i, rv;  name = NULL;  for(i = 2; i < argc; i++){    if(!name && argv[i][0] == '-'){      usage();    } else if(!name){      name = argv[i];    } else {      usage();    }  }  if(!name) usage();  rv = doremove(name);  return rv;}/* print an error message */void pdperror(const char *name){  fprintf(stderr, "%s: %s: %s\n", progname, name, dperrmsg(dpecode));}/* print an object */void printobj(const char *obj, int size){  int i;  for(i = 0; i < size; i++){    putchar(obj[i]);  }}/* print an object as a hexadecimal string */void printobjhex(const char *obj, int size){  int i;  for(i = 0; i < size; i++){    printf("%s%02X", i > 0 ? " " : "", ((const unsigned char *)obj)[i]);  }}/* perform create command */int docreate(const char *name){  VILLA *villa;  if(!(villa = vlopen(name, VL_OWRITER | VL_OCREAT | VL_OTRUNC, VL_CMPLEX))){    pdperror(name);    return 1;  }  if(!vlclose(villa)){    pdperror(name);    return 1;  }  return 0;}/* perform put command */int doput(const char *name, const char *kbuf, int ksiz, const char *vbuf, int vsiz,          int dmode, VLCFUNC cmp){  VILLA *villa;  if(!(villa = vlopen(name, VL_OWRITER, cmp))){    pdperror(name);    return 1;  }  if(!vlput(villa, kbuf, ksiz, vbuf, vsiz, dmode)){    pdperror(name);    vlclose(villa);    return 1;  }  if(!vlclose(villa)){    pdperror(name);    return 1;  }  return 0;}/* perform out command */int doout(const char *name, const char *kbuf, int ksiz, VLCFUNC cmp, int lb){  VILLA *villa;  if(!(villa = vlopen(name, VL_OWRITER, cmp))){    pdperror(name);    return 1;  }  if(lb){    if(!vloutlist(villa, kbuf, ksiz)){      pdperror(name);      vlclose(villa);      return 1;    }  } else {    if(!vlout(villa, kbuf, ksiz)){      pdperror(name);      vlclose(villa);      return 1;    }  }  if(!vlclose(villa)){    pdperror(name);    return 1;  }  return 0;}/* perform get command */int doget(const char *name, const char *kbuf, int ksiz, VLCFUNC cmp, int lb, int ox, int nb){  VILLA *villa;  CBLIST *vals;  char *vbuf;  int vsiz;  if(!(villa = vlopen(name, VL_OREADER, cmp))){    pdperror(name);    return 1;  }  if(lb){    if(!(vals = vlgetlist(villa, kbuf, ksiz))){      pdperror(name);      vlclose(villa);      return 1;    }    while((vbuf = cblistshift(vals, &vsiz)) != NULL){      if(ox){        printobjhex(vbuf, vsiz);      } else {        printobj(vbuf, vsiz);      }      free(vbuf);      putchar('\n');    }    cblistclose(vals);  } else {    if(!(vbuf = vlget(villa, kbuf, ksiz, &vsiz))){      pdperror(name);      vlclose(villa);      return 1;    }    if(ox){      printobjhex(vbuf, vsiz);    } else {      printobj(vbuf, vsiz);    }    free(vbuf);    if(!nb) putchar('\n');  }  if(!vlclose(villa)){    pdperror(name);    return 1;  }  return 0;}/* perform list command */int dolist(const char *name, const char *tbuf, int tsiz, const char *bbuf, int bsiz,             VLCFUNC cmp, int ki, int ox, int gt, int lt, int max, int desc){  VILLA *villa;  char *kbuf, *vbuf;  int ksiz, vsiz, show, rv;  if(!(villa = vlopen(name, VL_OREADER, cmp))){    pdperror(name);    return 1;  }  if(max < 0) max = vlrnum(villa);  if(desc){    if(bbuf){      vlcurjump(villa, bbuf, bsiz, VL_JBACKWARD);    } else {      vlcurlast(villa);    }    show = 0;    while(show < max && (kbuf = vlcurkey(villa, &ksiz)) != NULL){      if(bbuf && lt){        if(cmp(kbuf, ksiz, bbuf, bsiz) == 0){          free(kbuf);          vlcurnext(villa);          continue;        }        lt = FALSE;      }      if(tbuf){        rv = cmp(kbuf, ksiz, tbuf, tsiz);        if(rv < 0 || (gt && rv == 0)){          free(kbuf);          break;        }      }      if(!(vbuf = vlcurval(villa, &vsiz))){        free(kbuf);        break;      }      if(ox){        printobjhex(kbuf, ksiz);        putchar('\t');        printobjhex(vbuf, vsiz);      } else {        printobj(kbuf, ksiz);        putchar('\t');        printobj(vbuf, vsiz);      }      putchar('\n');      free(kbuf);      free(vbuf);      show++;      vlcurprev(villa);    }  } else {    if(tbuf){      vlcurjump(villa, tbuf, tsiz, VL_JFORWARD);    } else {      vlcurfirst(villa);    }    show = 0;    while(show < max && (kbuf = vlcurkey(villa, &ksiz)) != NULL){      if(tbuf && gt){        if(cmp(kbuf, ksiz, tbuf, tsiz) == 0){          free(kbuf);          vlcurnext(villa);          continue;        }        gt = FALSE;      }      if(bbuf){        rv = cmp(kbuf, ksiz, bbuf, bsiz);        if(rv > 0 || (lt && rv == 0)){          free(kbuf);          break;        }      }      if(!(vbuf = vlcurval(villa, &vsiz))){        free(kbuf);        break;      }      if(ox){        printobjhex(kbuf, ksiz);        putchar('\t');        printobjhex(vbuf, vsiz);      } else {        printobj(kbuf, ksiz);        putchar('\t');        printobj(vbuf, vsiz);      }      putchar('\n');      free(kbuf);      free(vbuf);      show++;      vlcurnext(villa);    }  }  if(!vlclose(villa)){    pdperror(name);    return 1;  }  return 0;}/* perform optimize command */int dooptimize(const char *name){  VILLA *villa;  if(!(villa = vlopen(name, VL_OWRITER, VL_CMPLEX))){    pdperror(name);    return 1;  }  if(!vloptimize(villa)){    pdperror(name);    vlclose(villa);    return 1;  }  if(!vlclose(villa)){    pdperror(name);    return 1;  }  return 0;}/* perform inform command */int doinform(const char *name){  VILLA *villa;  char *tmp;  if(!(villa = vlopen(name, VL_OREADER, VL_CMPLEX))){    pdperror(name);    return 1;  }  tmp = vlname(villa);  printf("name: %s\n", tmp ? tmp : "(null)");  free(tmp);  printf("file size: %d\n", vlfsiz(villa));  printf("leaf nodes: %d\n", vllnum(villa));  printf("non-leaf nodes: %d\n", vlnnum(villa));  printf("records: %d\n", vlrnum(villa));  printf("inode number: %d\n", vlinode(villa));  if(!vlclose(villa)){    pdperror(name);    return 1;  }  return 0;}/* perform remove command */int doremove(const char *name){  if(!vlremove(name)){    pdperror(name);    return 1;  }  return 0;}/* END OF FILE */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -