#define VERSION "Dump xBase, Version 2.00\n"
int anz, i, j, k, felder, feldanz;
char modus[] = "rb", dateiname[64];
#include <stdio.h>
#include <alloc.h>
#include <string.h>
FILE *inchan;
struct {char kz, datum[3]; long anzahl; int lheader, laenge;
        char fill0[20];} db3_header;
struct db3_entry {char name[10], fill1, typ, fill10[4], f_laenge, nkst,
                 fill2[14];};
struct sdb3_dir {struct db3_entry feld[256]; char fill3;} *db3_dir;

/*********************/
main(int argc, char *argv[])
/*********************/
{
   clrscr();
   printf(VERSION);
   if (argc < 2)
   {
      printf("Dateiname ben”tigt!\n");
      exit();
   }
   for (anz = 1; anz < argc; anz++)
   {
      strcpy(dateiname, strupr(argv[anz]));
      if (strchr(dateiname, '.') == NULL)
         strcat(dateiname, ".DBF");
      if ((inchan = fopen(dateiname, modus)) != (FILE *) NULL)
      {
         fread (&db3_header, sizeof(db3_header), 1, inchan);
         printf("Datenbank: %s\n", dateiname);
         printf("Feld    Name        Typ  L„nge  Dez.st.\n");
         db3_dir = (struct sdb3_dir *) malloc(db3_header.lheader-34);
         fread (db3_dir, db3_header.lheader-33, 1, inchan);
         feldanz = (db3_header.lheader - 33) / 32;
         for (felder = 0; felder < feldanz; felder++)
         {
            i = (*db3_dir).feld[felder].f_laenge;
            j = (*db3_dir).feld[felder].nkst;
            if ((*db3_dir).feld[felder].typ == (char) 0)
               break;
            if ((*db3_dir).feld[felder].typ == 'C')
            {
               i += 256 * j;
               j = 0;
            }
            printf("%03d     %-10s   %c   %4d", felder+1, (*db3_dir).feld[felder].name,
              (*db3_dir).feld[felder].typ, i);
            if (j) /* Nachkommastellen */
               printf ("    %3d", j);
            printf("\n");
         }
         printf("** Gesamt **            %5d\n\n", db3_header.laenge);
         fclose(inchan);
      }
   }
}
