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

📄 cbcodec.c

📁 harvest是一个下载html网页得机器人
💻 C
字号:
/************************************************************************************************* * Popular encoders and decoders *                                                      Copyright (C) 2000-2003 Mikio Hirabayashi * This file is part of QDBM, Quick Database Manager. * QDBM is free software; you can redistribute it and/or modify it under the terms of the GNU * Lesser General Public License as published by the Free Software Foundation; either version * 2.1 of the License or any later version.  QDBM is distributed in the hope that it will be * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more * details. * You should have received a copy of the GNU Lesser General Public License along with QDBM; if * not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA. *************************************************************************************************/#include <cabin.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#undef TRUE#define TRUE           1                 /* boolean true */#undef FALSE#define FALSE          0                 /* boolean false *//* for RISC OS */#if defined(__riscos__) || defined(__riscos)#include <unixlib/local.h>int __riscosify_control = __RISCOSIFY_NO_PROCESS;#endif/* global variables */const char *progname;                    /* program name *//* function prototypes */int main(int argc, char **argv);void usage(void);char *readstdin(int *sp);int runurl(int argc, char **argv);int runbase(int argc, char **argv);int runquote(int argc, char **argv);int runzlib(int argc, char **argv);/* main routine */int main(int argc, char **argv){  int rv;  progname = argv[0];  if(argc < 2) usage();  rv = 0;  if(!strcmp(argv[1], "url")){    rv = runurl(argc, argv);  } else if(!strcmp(argv[1], "base")){    rv = runbase(argc, argv);  } else if(!strcmp(argv[1], "quote")){    rv = runquote(argc, argv);  } else if(!strcmp(argv[1], "zlib")){    rv = runzlib(argc, argv);  } else {    usage();  }  return rv;}/* print the usage and exit */void usage(void){  fprintf(stderr, "%s: popular encoders and decoders\n", progname);  fprintf(stderr, "\n");  fprintf(stderr, "usage:\n");  fprintf(stderr, "  %s url [-d] [-l] [-e expr] [file]\n", progname);  fprintf(stderr, "  %s base [-d] [-l] [-c num] [-e expr] [file]\n", progname);  fprintf(stderr, "  %s quote [-d] [-l] [-c num] [-e expr] [file]\n", progname);  fprintf(stderr, "  %s zlib [-d] [file]\n", progname);  exit(1);}/* read the standard input */char *readstdin(int *sp){  char *buf;  int i, blen, c;  blen = 256;  buf = cbmalloc(blen);  for(i = 0; (c = getchar()) != EOF; i++){    if(i >= blen - 1) buf = cbrealloc(buf, blen *= 2);    buf[i] = c;  }  buf[i] = '\0';  *sp = i;  return buf;}/* parse arguments of url command */int runurl(int argc, char **argv){  int i, size, dec, line;  char *expr, *file, *buf, *res;  dec = FALSE;  line = FALSE;  expr = NULL;  file = NULL;  for(i = 2; i < argc; i++){    if(!file && argv[i][0] == '-'){      if(!strcmp(argv[i], "-d")){        dec = TRUE;      } else if(!strcmp(argv[i], "-l")){        line = TRUE;      } else if(!strcmp(argv[i], "-e")){        if(++i >= argc) usage();        expr = argv[i];      } else {        usage();      }    } else if(!file){      file = argv[i];    } else {      usage();    }  }  buf = NULL;  if(expr){    size = strlen(expr);    buf = cbmemdup(expr, size);  } else if(file){    if(!(buf = cbreadfile(file, &size))){      fprintf(stderr, "%s: %s: cannot open\n", progname, file);      return 1;    }  } else {    buf = readstdin(&size);  }  if(dec){    res = cburldecode(buf, &size);    for(i = 0; i < size; i++){      putchar(res[i]);    }    if(line) putchar('\n');    free(res);  } else {    res = cburlencode(buf, size);    for(i = 0; res[i] != '\0'; i++){      putchar(res[i]);    }    free(res);  }  if(line) putchar('\n');  free(buf);  return 0;}/* parse arguments of base command */int runbase(int argc, char **argv){  int i, ci, size, dec, line, cols;  char *expr, *file, *buf, *res;  dec = FALSE;  line = FALSE;  cols = -1;  expr = NULL;  file = NULL;  for(i = 2; i < argc; i++){    if(!file && argv[i][0] == '-'){      if(!strcmp(argv[i], "-d")){        dec = TRUE;      } else if(!strcmp(argv[i], "-l")){        line = TRUE;      } else if(!strcmp(argv[i], "-c")){        if(++i >= argc) usage();        cols = atoi(argv[i]);      } else if(!strcmp(argv[i], "-e")){        if(++i >= argc) usage();        expr = argv[i];      } else {        usage();      }    } else if(!file){      file = argv[i];    } else {      usage();    }  }  buf = NULL;  if(expr){    size = strlen(expr);    buf = cbmemdup(expr, size);  } else if(file){    if(!(buf = cbreadfile(file, &size))){      fprintf(stderr, "%s: %s: cannot open\n", progname, file);      return 1;    }  } else {    buf = readstdin(&size);  }  if(dec){    res = cbbasedecode(buf, &size);    for(i = 0; i < size; i++){      putchar(res[i]);    }    if(line) putchar('\n');    free(res);  } else {    res = cbbaseencode(buf, size);    ci = 0;    for(i = 0; res[i] != '\0'; i++){      if(cols > 0 && ci >= cols){        putchar('\n');        ci = 0;      }      putchar(res[i]);      ci++;    }    if(line) putchar('\n');    free(res);  }  free(buf);  return 0;}/* parse arguments of quote command */int runquote(int argc, char **argv){  int i, ci, size, dec, line, cols;  char *expr, *file, *buf, *res;  dec = FALSE;  line = FALSE;  cols = -1;  expr = NULL;  file = NULL;  for(i = 2; i < argc; i++){    if(!file && argv[i][0] == '-'){      if(!strcmp(argv[i], "-d")){        dec = TRUE;      } else if(!strcmp(argv[i], "-l")){        line = TRUE;      } else if(!strcmp(argv[i], "-c")){        if(++i >= argc) usage();        cols = atoi(argv[i]);      } else if(!strcmp(argv[i], "-e")){        if(++i >= argc) usage();        expr = argv[i];      } else {        usage();      }    } else if(!file){      file = argv[i];    } else {      usage();    }  }  buf = NULL;  if(expr){    size = strlen(expr);    buf = cbmemdup(expr, size);  } else if(file){    if(!(buf = cbreadfile(file, &size))){      fprintf(stderr, "%s: %s: cannot open\n", progname, file);      return 1;    }  } else {    buf = readstdin(&size);  }  if(dec){    res = cbquotedecode(buf, &size);    for(i = 0; i < size; i++){      putchar(res[i]);    }    if(line) putchar('\n');    free(res);  } else {    res = cbquoteencode(buf, size);    ci = 0;    for(i = 0; res[i] != '\0'; i++){      if(cols > 0 && (ci >= cols || (ci >= cols - 2 && res[i] == '='))){        printf("=\n");        ci = 0;      }      if(res[i] == '\r' || res[i] == '\n') ci = 0;      putchar(res[i]);      ci++;    }    if(line) putchar('\n');    free(res);  }  free(buf);  return 0;}/* parse arguments of zlib command */int runzlib(int argc, char **argv){  int i, bsiz, rsiz, dec;  char *file, *buf, *res;  dec = FALSE;  file = NULL;  for(i = 2; i < argc; i++){    if(!file && argv[i][0] == '-'){      if(!strcmp(argv[i], "-d")){        dec = TRUE;      } else {        usage();      }    } else if(!file){      file = argv[i];    } else {      usage();    }  }  buf = NULL;  if(file){    if(!(buf = cbreadfile(file, &bsiz))){      fprintf(stderr, "%s: %s: cannot open\n", progname, file);      return 1;    }  } else {    buf = readstdin(&bsiz);  }  if(dec){    if(!(res = cbinflate(buf, bsiz, &rsiz))){      fprintf(stderr, "%s: inflate failed\n", progname);      free(buf);      return 1;    }    for(i = 0; i < rsiz; i++){      putchar(res[i]);    }    free(res);  } else {    if(!(res = cbdeflate(buf, bsiz, &rsiz))){      fprintf(stderr, "%s: deflate failed\n", progname);      free(buf);      return 1;    }    for(i = 0; i < rsiz; i++){      putchar(res[i]);    }    free(res);  }  free(buf);  return 0;}/* END OF FILE */

⌨️ 快捷键说明

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