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

📄 pshar.c

📁 Reference Implementation of G.711 standard and other voice codecs
💻 C
📖 第 1 页 / 共 2 页
字号:
      if (!(out = fopen(optarg, "w")))      {	fprintf(stderr, "shar: can't open archive %s\n", optarg);	exit(0);      }      break;    default:      errflg++;    }  }  if (UnShar)    exit(0);  C = local_getarg(argc, argv);  if (errflg || EOF == C)  {    if (EOF == C)      fprintf(stderr, "shar: No input files\n");    fprintf(stderr, "%s%s%s%s", Usage1, Usage2, Usage3, Usage4);    exit(1);  }  savind = 0;  do  {    if (getpat(optarg))      exit(2);  }  while (EOF != (C = local_getarg(argc, argv)));  sav[savind] = 0;  header(sav);  for (ppchList = sav; *ppchList; ++ppchList)  {#if defined (CPM) || defined(MSDOS)    strlower(*ppchList);#endif    shar(*ppchList);  }  fputs("#\tEnd of shell archive\n", out);  fputs("exit 0\n", out);  fclose(out);#ifdef VMS  exit(0);#else  return(0);#endif}int getpat(pattern)  char           *pattern;{  register char  *ptr;  extern void * malloc(size_t size);#if defined (AMIGA)  while (ptr = scdir(pattern))  {#else  ptr = pattern;  {#endif    sav[savind] = (char *)malloc(strlen(ptr) + 1);    strcpy(sav[savind++], ptr);#if defined (CPM)    temp = open(ptr, O_RDONLY);    if (temp == -1)    {#else    if (access(ptr, 4))    {#endif      fprintf(stderr, "No read access for file: %s\n", ptr);      return (-1);    }#if defined (CPM)    close(temp);#endif  }  return (0);}/* * get option letter from argument vector */int             getopt(nargc, nargv, ostr)  int             nargc;  char          **nargv, *ostr;{  register char  *oli;		/* option letter list index */  static char    *place = EMSG;	/* option letter processing */  if (!*place)  {				/* update scanning pointer */    if (optind >= nargc || *(place = nargv[optind]) != '-' || !*++place)      return (EOF);    if (*place == '-')    {				/* found "--" */      ++optind;      return EOF;    }  }				/* option letter okay? */  if ((optopt = (int) *place++) == (int) ':' || !(oli = index(ostr, optopt)))  {    if (!*place)      ++optind;    tell(": illegal option -- ");  }  if (*++oli != ':')  {				/* don't need argument */    optarg = NULL;    if (!*place)      ++optind;  }  else  {				/* need an argument */    if (*place)    {				/* no white space */      optarg = place;    }    else    {      if (nargc <= ++optind)      {				/* no arg */	place = EMSG;	tell(": option requires an argument -- ");      }      else      {	optarg = nargv[optind];	/* white space */      }    }    place = EMSG;    ++optind;  }  return (optopt);		/* dump back option letter */}int                local_getarg(nargc, nargv)  int             nargc;  char          **nargv;{  if (nargc <= optind)  {    optarg = (char *) 0;    return EOF;  }  else  {    optarg = nargv[optind++];    return 0;  }}int dounshar(ArcNam)  char           *ArcNam;{  register int    i;  register FILE  *inptr, *outptr;  auto char       line[BUFSIZ];  int             DirNum = -1;  int             Prefix = 0;  char            Dirs[5][40], FilNam[128], Delim[40], ScrStr[128];  char           *ptr;  if (!(inptr = fopen(ArcNam, "r")))  {    fprintf(stderr, "shar: Can't open archive '%s'\n", ArcNam);    return(1);  }  while (fgets(line, BUFSIZ, inptr))  {    if (strncmp(line, "sed ", 4) == 0)    {      Prefix = 0;      if (!(ptr = index(line, '/')))	goto getfil;      if (*++ptr == '^')	++ptr;      while (*ptr++ != '/')	Prefix++;      goto getfil;    }    else if (strncmp(line, "cat ", 4) == 0)    {      Prefix = 0;      ;  getfil:#if defined (VMS)      strcpy(FilNam, "[");#else      FilNam[0] = 0;#endif      for (i = 0; i <= DirNum; i++)      {#if defined (VMS)	strcat(FilNam, ".");	strcat(FilNam, Dirs[i]);#else	strcat(FilNam, Dirs[i]);	strcat(FilNam, "/");#endif      }#if defined (VMS)      strcat(FilNam, "]");#endif      getshpar(line, ">", ScrStr);      strcat(FilNam, ScrStr);#if defined (CPM)      tocpmformat(FilNam);	/* tweek format as needed */#endif      getshpar(line, "<<", Delim);      fprintf(stderr, "Creating %s ...", FilNam);      outptr = fopen(FilNam, "w");      while (fgets(line, BUFSIZ, inptr))      {	if (strncmp(line, Delim, strlen(Delim)) == 0)	  break;	if (outptr)	  fputs(&line[Prefix], outptr);      }      if (outptr)      {	fclose(outptr);	fprintf(stderr, "...done\n");      }      else	fprintf(stderr, "...error in creating file\n");    }    else if (strncmp(line, "mkdir ", 6) == 0)    {      fprintf(stderr, "Need to make directory: %s\n", &line[6]);    }    else if (strncmp(line, "chdir ", 6) == 0)    {      if (line[6] == '.' && line[7] == '.')	DirNum--;      else	strcpy(Dirs[++DirNum], &line[6]);      if (DirNum < -1)	DirNum = -1;    }    else if (strncmp(line, "cd ", 3) == 0)    {      if (line[3] == '.' && line[4] == '.')	DirNum--;      else	strcpy(Dirs[++DirNum], &line[3]);      if (DirNum < -1)	DirNum = -1;    }  }  fclose(inptr);  return(0);}void getshpar(line, sea, par)  char           *line, *sea, *par;{  register char  *scr1, *scr2;  while (*line)  {    scr1 = line;    scr2 = sea;    while (*scr1 && *scr2 && *scr1 == *scr2)    {      scr1++;      scr2++;    }    if (*scr2 == 0)    {      if (*scr1 == 0)      {	*par = 0;	return;      }      while (*scr1 == ' ' || *scr1 == '\t' ||	     *scr1 == '\\' || *scr1 == '\'' || *scr1 == '"')	scr1++;      while (*scr1 != 0 && *scr1 != ' ' && *scr1 != '\t' &&	     *scr1 != '\\' && *scr1 != '\'' && *scr1 != '"' &&	     *scr1 != '\n' && *scr1 != '\r')	*par++ = *scr1++;      *par = 0;      return;    }    line++;  }  *par = 0;}#if defined (CPM)tocpmformat(filename)  char           *filename;{  char            buffer[100];  char            extension[100];  register char  *temp;  int             mod = 0;  strcpy(buffer, filename);  /* Make sure we get rid of any pathnames */  if ((temp = rindex(buffer, '/')) != 0)  {    strcpy(buffer, (char *) ((temp - buffer) + filename + 1));    mod = 1;  }  if (strlen(filename) <= 8)  {    if (mod != 0)    {      strcpy(filename, buffer);    }    return (0);  }  /* If it already is in "CPM" format we'll check if we need to truncate the   * front filename part. */  if ((temp = index(buffer, '.')) != 0)  {    if ((temp - buffer) < 8)    {      if (mod != 0)      {	strcpy(filename, buffer);      }      return (0);    }    else    {      strcpy(extension, temp);      strcpy(&buffer[8], extension);      buffer[12] = '\0';      strcpy(filename, buffer);      return (1);    }  }  /* OK, filename is longer than can be handled, and it doesnt have a   * filetype "." marker already.  We will put one in to minimize truncation. */  strcpy(extension, &buffer[8]);  buffer[8] = '.';  strcpy(&buffer[9], extension);  buffer[12] = '\0';  strcpy(filename, buffer);  return (2);}#endif#if defined (CPM) || defined (MSDOS)void strlower(string)  char           *string;{  register char  *pointer;  char            c;  for (pointer = string; (c = *pointer) != '\0'; pointer++)  {    if (isupper(c))      *pointer = tolower(c);  }}#endif

⌨️ 快捷键说明

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