RSS

bcc32 / bpick.c

09 11月

/* ファイルの指定開始位置から指定された終了位置までのバイトを取り出す */

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

void main(int argc, char *argv[])
{
 FILE *fp1, *fp2;
 long i, begin, end;
 char source[260], dest[260];
 char *p1, *p2;
 int b;

 if (argc < 5)
 {
  puts(“Usage: bpick pos_begin pos_end in_file out_file”);
  return;
 }

 begin = end = -1;

 p1 = *++argv;
 if ((*p1 == ‘0’) && (*(p1+1) == ‘x’))
 {
  sscanf(p1+2, “%x”, &begin);
 }
 else if (isdigit(*p1))
 {
  sscanf(p1, “%d”, &begin);
 }
 else
 {
  puts(“Error: Illegal parameter.”);
  return;
 }

 p2 = *++argv;
 if ((*p2 == ‘0’) && (*(p2+1) == ‘x’))
 {
  sscanf(p2+2, “%x”, &end);
 }
 else if (isdigit(*p2))
 {
  sscanf(p2, “%d”, &end);
 }
 else
 {
  puts(“Error: Illegal parameter.”);
  return;
 }

 strcpy(source, *++argv);
 strcpy(dest, *++argv);

 if (end < begin)
 {
  puts(“Error: Illegal parameter.”);
  return;
 }

 if ((fp1 = fopen(source, “rb”)) == NULL)
 {
  puts(“Error: Could not open the file.”);
  return;
 }

 if ((fp2 = fopen(dest, “wb”)) == NULL)
 {
  puts(“Error: Could not open the file.”);
  return;
 }

 puts(“Start …”);
 fseek(fp1, begin, 0);
 i = begin;

 while ((b = getc(fp1)) != EOF)
 {
  if (i >= end)
   break;
  putc((unsigned char)b, fp2);
  i++;
 }

 fclose(fp2);
 fclose(fp1);
 puts(“End.”);
}

 
bcc32 / bpick.c はコメントを受け付けていません。

投稿者: : 2010/11/09 投稿先 C

 

コメントは受け付けていません。