home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / drdobbs / 1988 / 05 / porter / mktable.c next >
Text File  |  1988-04-04  |  2KB  |  73 lines

  1. /* MKTABLE.C: Makes a data table with header record */
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5. #define  SIG  19364            /* application file signature */
  6.  
  7. typedef struct {
  8.   char      fname [20];
  9.   int       ftype, flen;
  10. } DESCR;
  11.  
  12. struct {                           /* header record for file */
  13.   unsigned  signature;
  14.   int       nrecs;
  15.   char      tablename [10];
  16.   int       reclen;
  17.   long      datastart;
  18.   int       descrsize;
  19.   int       ndescr;
  20. } header;
  21.  
  22. struct {                             /* data record for file */
  23.   char      name [20];
  24.   int       age;
  25. } data;
  26.  
  27. main ()
  28. {
  29. FILE  *fp;
  30. char  age [3];
  31. int   n;
  32. DESCR descr;
  33.  
  34.   fp = fopen ("database.xyz", "w");           /* create file */
  35.  
  36.   header.signature = SIG;               /* initialize header */
  37.   header.nrecs = 0;
  38.   strcpy (header.tablename, "Age list");
  39.   header.reclen = sizeof data;
  40.   header.datastart = 256L;
  41.   header.descrsize = sizeof (descr);
  42.   header.ndescr = 2;
  43.   fwrite (&header, sizeof header, 1, fp);   /* write to file */
  44.  
  45.   strcpy (descr.fname, "NAME");     /* initialize descriptor */
  46.   descr.ftype = 1;
  47.   descr.flen  = 20;
  48.   fwrite (&descr, sizeof (descr), 1, fp);   /* write to file */
  49.  
  50.   strcpy (descr.fname, "AGE");                /* ditto above */
  51.   descr.ftype = 0;
  52.   descr.flen  = 2;
  53.   fwrite (&descr, sizeof (descr), 1, fp);
  54.  
  55.   fseek (fp, 256L, SEEK_SET);
  56.  
  57.   do {                                       /* capture data */
  58.     printf ("\nName? ");
  59.     gets (data.name);
  60.     if (strlen (data.name)) {        /* continue until blank */
  61.       printf ("Age?  ");
  62.       gets (age);
  63.       data.age = atoi (age);
  64.       fwrite (&data, sizeof data, 1, fp);    /* write record */
  65.       header.nrecs += 1;                     /* count record */
  66.     }
  67.   } while (strlen (data.name));     /* until no more entered */
  68.  
  69.   fseek (fp, 0L, SEEK_SET);           /* go to start of file */
  70.   fwrite (&header, sizeof header, 1, fp);   /* update header */
  71.   fclose (fp);                                 /* close file */
  72. }
  73.