home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / source / kfortune.zoo / kfscan.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-05-20  |  1.7 KB  |  85 lines

  1. /*
  2.  * kfortune: a very simple "fortune" clone
  3.  * 
  4.  * Copyright (c) 1989 by Kenji Rikitake.
  5.  * All Rights Reserved.
  6.  * 1st version: May 20, 1989
  7.  *
  8.  * The author allows this program to be used for any purposes.
  9.  */
  10. /*
  11.  * kfhash: hashing program for kfortune.tp
  12.  */
  13.  
  14. #include <stdio.h>
  15.  
  16. #define DELIM 0x0c
  17.  
  18. void usage()
  19. {
  20.     fprintf(stderr,"Usage: kfscan <infile> <outfile>");
  21.     exit(1);
  22. }
  23.  
  24. int main(int argc, char **argv)
  25. {
  26.     FILE *inp, *outp;
  27.     int c;
  28.     unsigned int num;
  29.     unsigned long pos;
  30.     
  31.     if (argc != 3) usage();
  32.     
  33.     if ((inp = fopen(argv[1], "rb")) == NULL) {
  34.         fprintf(stderr, "input file open error: %s\n", argv[1]);
  35.         exit(2);
  36.         }
  37.  
  38.     if ((outp = fopen(argv[2], "wb")) == NULL) {
  39.         fprintf(stderr, "output file open error: %s\n", argv[1]);
  40.         exit(3);
  41.         }
  42.  
  43.     
  44.     rewind(inp);
  45.     rewind(outp);
  46.     num = 0;
  47.     if (putw(num, outp) == EOF) {
  48.         fprintf(stderr, "write error on beginning\n");
  49.         exit(4);
  50.         }
  51.     if (putw(0x0000, outp) == EOF) {
  52.         fprintf(stderr, "write error on beginning\n");
  53.         exit(4);
  54.         }
  55.     if (putw(0x0000, outp) == EOF) {
  56.         fprintf(stderr, "write error on beginning\n");
  57.         exit(4);
  58.         }
  59.     
  60.     while ((c = getc(inp)) != EOF) {
  61.         if (c == DELIM) {
  62.             num++;
  63.             pos = ftell(inp);
  64.             if (putw((pos & 0xffff), outp) == EOF) {
  65.                 fprintf(stderr, "write error during processing\n");
  66.                 exit(5);
  67.                 }
  68.             if (putw(((pos & 0xffff0000) >> 16), outp) == EOF) {
  69.                 fprintf(stderr, "write error during processing\n");
  70.                 exit(5);
  71.                 }
  72.             }
  73.         }
  74.     
  75.     rewind(outp);
  76.     num++;
  77.     if (putw(num, outp) == EOF) {
  78.         fprintf(stderr, "write error on ending\n");
  79.         exit(6);
  80.         }
  81.     
  82.     printf("total strings: %d\n", num);
  83.     fcloseall();
  84. }
  85.