Commit f34d525d authored by Andreas Tille's avatar Andreas Tille
Browse files

New upstream version 1.0+git20190616.034f1ab

parent d9350062
Loading
Loading
Loading
Loading
+270 −247
Original line number Diff line number Diff line
@@ -22,13 +22,14 @@
#define PATHSEP "/"
#endif

static char *Usage = "[-vfd] <path:db|dam> <track:name>";
static char *Usage = "[-vfd] <path:db|dam> <track:name> ...";

int main(int argc, char *argv[])
{ char *prefix;
  FILE *aout, *dout;
  int   nblocks;
  int   nfiles;
  FILE *aout, *dout;
  int   c;

  int   VERBOSE;
  int   FORCE;
  int   DELETE;
@@ -52,7 +53,7 @@ int main(int argc, char *argv[])
    FORCE   = flags['f'];
    DELETE  = flags['d'];

    if (argc != 3)
    if (argc < 3)
      { fprintf(stderr,"Usage: %s %s\n",Prog_Name,Usage);
        fprintf(stderr,"\n");
        fprintf(stderr,"   -v: verbose\n");
@@ -62,6 +63,8 @@ int main(int argc, char *argv[])
      }
  }

  //  Open DB stub and get number of blocks

  { char *pwd, *root;
    int   i, plen, index, isdam;
    FILE *dstub;
@@ -103,26 +106,13 @@ int main(int argc, char *argv[])
    free(dstub_name);
    free(pwd);
    free(root);

    aout = fopen(Catenate(prefix,argv[2],".","anno"),"r");
    if (aout != NULL && !FORCE)
      { fprintf(stderr,"%s: Track file %s%s.anno already exists!\n",Prog_Name,prefix,argv[2]);
        exit (1);
  }

    dout = fopen(Catenate(prefix,argv[2],".","data"),"r");
    if (dout != NULL && !FORCE)
      { fprintf(stderr,"%s: Track file %s%s.data already exists!\n",Prog_Name,prefix,argv[2]);
        exit (1);
      }
  //  For each track do

    aout = Fopen(Catenate(prefix,argv[2],".","anno"),"w");
    if (aout == NULL)
      exit (1);
    dout = NULL;
  }
 
  { int   tracktot, tracksiz;
  for (c = 2; c < argc; c++)
    { int   nfiles;
      int   tracktot, tracksiz;
      int64 trackoff;
      char  data[1024];
      void *anno;
@@ -131,6 +121,36 @@ int main(int argc, char *argv[])
      int         nextra;
      int64       extail;

      //  Open the output .anno for writing, and output header stub

      if (VERBOSE)
        { fprintf(stderr,"\nConstructing %s%s:\n",prefix,argv[c]);
          fflush(stderr);
        }

      aout = fopen(Catenate(prefix,argv[c],".","anno"),"r");
      if (aout != NULL)
        { if (!FORCE)
            { fprintf(stderr,"%s: Track file %s%s.anno already exists!\n",Prog_Name,prefix,argv[c]);
              exit (1);
            }
          fclose(aout);
        }

      dout = fopen(Catenate(prefix,argv[c],".","data"),"r");
      if (dout != NULL)
        { if (!FORCE)
            { fprintf(stderr,"%s: Track file %s%s.data already exists!\n",Prog_Name,prefix,argv[c]);
              exit (1);
            }
          fclose(dout);
        }

      aout = Fopen(Catenate(prefix,argv[c],".","anno"),"w");
      if (aout == NULL)
        exit (1);
      dout = NULL;

      extra    = NULL;
      anno     = NULL;
      trackoff = 0;
@@ -140,6 +160,8 @@ int main(int argc, char *argv[])
      if (fwrite(&tracksiz,sizeof(int),1,aout) != 1)
        SYSTEM_WRITE_ERROR

      //  OPen and catenate in each block .anno and .data file

      nextra = 0;
      nfiles = 0;
      while (1)
@@ -147,9 +169,9 @@ int main(int argc, char *argv[])
          char *dfile_name, *afile_name;
          int   i, apos, size, esize, tracklen;
  
        afile_name = Strdup(Numbered_Suffix(prefix,nfiles+1,Catenate(".",argv[2],".","anno")),
          afile_name = Strdup(Numbered_Suffix(prefix,nfiles+1,Catenate(".",argv[c],".","anno")),
                              "Allocating .anno file name");
        dfile_name = Strdup(Numbered_Suffix(prefix,nfiles+1,Catenate(".",argv[2],".","data")),
          dfile_name = Strdup(Numbered_Suffix(prefix,nfiles+1,Catenate(".",argv[c],".","data")),
                              "Allocating .data file name");
          if (afile_name == NULL || dfile_name == NULL)
            goto error;
@@ -158,7 +180,7 @@ int main(int argc, char *argv[])
          afile = fopen(afile_name,"r");
          if (afile == NULL)
            break;
        dfile = fopen(Numbered_Suffix(prefix,nfiles+1,Catenate(".",argv[2],".","data")),"r");
          dfile = fopen(Numbered_Suffix(prefix,nfiles+1,Catenate(".",argv[c],".","data")),"r");
          if (dfile == NULL && errno != ENOENT)
            { fprintf(stderr,"%s: The file %s is corrupted\n",Prog_Name,dfile_name);
              goto error;
@@ -169,12 +191,12 @@ int main(int argc, char *argv[])
          lfile = afile;
  
          if (VERBOSE)
          { fprintf(stderr,"Concatenating %s%d.%s ...\n",prefix,nfiles+1,argv[2]);
            { fprintf(stderr,"  Concatenating %s%d.%s ...\n",prefix,nfiles+1,argv[c]);
              fflush(stderr);
            }
    
        FREAD(&tracklen,sizeof(int),1,afile)
        FREAD(&size,sizeof(int),1,afile)
          FFREAD(&tracklen,sizeof(int),1,afile)
          FFREAD(&size,sizeof(int),1,afile)
          if (size == 0)
            esize = 8;
          else
@@ -183,7 +205,7 @@ int main(int argc, char *argv[])
          if (nfiles == 0)
            { tracksiz = size;
              if (dfile != NULL)
              { dout = Fopen(Catenate(prefix,argv[2],".","data"),"w");
                { dout = Fopen(Catenate(prefix,argv[c],".","data"),"w");
                  if (dout == NULL)
                    goto error;
                }
@@ -213,46 +235,46 @@ int main(int argc, char *argv[])
            }
    
          if (dfile != NULL)
          { int64 dlen;
            { int64 dlen, d;
  
              if (esize == 4)
                { int anno4;
    
                  for (i = 0; i < tracklen; i++)
                  { FREAD(&anno4,sizeof(int),1,afile)
                    { FFREAD(&anno4,sizeof(int),1,afile)
                      anno4 += trackoff;
                    FWRITE(&anno4,sizeof(int),1,aout)
                      FFWRITE(&anno4,sizeof(int),1,aout)
                    }
                FREAD(&anno4,sizeof(int),1,afile)
                  FFREAD(&anno4,sizeof(int),1,afile)
                  dlen = anno4;
                }
              else
                { int64 anno8;
    
                  for (i = 0; i < tracklen; i++)
                  { FREAD(&anno8,sizeof(int64),1,afile)
                    { FFREAD(&anno8,sizeof(int64),1,afile)
                      anno8 += trackoff;
                    FWRITE(&anno8,sizeof(int64),1,aout)
                      FFWRITE(&anno8,sizeof(int64),1,aout)
                    }
                FREAD(&anno8,sizeof(int64),1,afile)
                  FFREAD(&anno8,sizeof(int64),1,afile)
                  dlen = anno8;
                }
              trackoff += dlen;

            for (i = 1024; i < dlen; i += 1024)
              { FREAD(data,1024,1,dfile)
                FWRITE(data,1024,1,dout)
              for (d = 1024; d < dlen; d += 1024)
                { FFREAD(data,1024,1,dfile)
                  FFWRITE(data,1024,1,dout)
                }
            i -= 1024;
            if (i < dlen)
              { FREAD(data,dlen-i,1,dfile)
                FWRITE(data,dlen-i,1,dout)
              d -= 1024;
              if (d < dlen)
                { FFREAD(data,dlen-d,1,dfile)
                  FFWRITE(data,dlen-d,1,dout)
                }
            }
          else
            { for (i = 0; i < tracklen; i++)
              { FREAD(anno,esize,1,afile)
                FWRITE(anno,esize,1,aout)
                { FFREAD(anno,esize,1,afile)
                  FFWRITE(anno,esize,1,aout)
                }
            }
  
@@ -307,7 +329,7 @@ int main(int argc, char *argv[])

      if (nfiles == 0)
        { fprintf(stderr,"%s: Couldn't find first track block %s1.%s.anno\n",
                       Prog_Name,prefix,argv[2]);
                         Prog_Name,prefix,argv[c]);
          goto error;
        }
      else
@@ -316,17 +338,17 @@ int main(int argc, char *argv[])
          if (dout != NULL)
            { if (tracksiz == 4)
                { int anno4 = trackoff;
                FWRITE(&anno4,sizeof(int),1,aout)
                  FFWRITE(&anno4,sizeof(int),1,aout)
                }
              else
                { int64 anno8 = trackoff;
                FWRITE(&anno8,sizeof(int64),1,aout)
                  FFWRITE(&anno8,sizeof(int64),1,aout)
                }
            }
  
          if (nextra == 0)
            { while (fread(&byte,1,1,lfile) == 1)
              FWRITE(&byte,1,1,aout)
                FFWRITE(&byte,1,1,aout)
            }
          else
            { int i;
@@ -336,9 +358,8 @@ int main(int argc, char *argv[])
          fclose(lfile);

          FSEEKO(aout,0,SEEK_SET)
        FWRITE(&tracktot,sizeof(int),1,aout)
        FWRITE(&tracksiz,sizeof(int),1,aout)
      }
          FFWRITE(&tracktot,sizeof(int),1,aout)
          FFWRITE(&tracksiz,sizeof(int),1,aout)
        }

      if (nfiles != nblocks)
@@ -356,17 +377,19 @@ int main(int argc, char *argv[])
          char *name;

          for (i = 1; i <= nblocks ;i++)
        { name = Numbered_Suffix(prefix,i,Catenate(".",argv[2],".","anno"));
            { name = Numbered_Suffix(prefix,i,Catenate(".",argv[c],".","anno"));
              if (unlink(name) != 0)
                fprintf(stderr,"%s: [WARNING] Couldn't delete file %s\n",Prog_Name,name);
              if (dout != NULL)
            { name = Numbered_Suffix(prefix,i,Catenate(".",argv[2],".","data"));
                { name = Numbered_Suffix(prefix,i,Catenate(".",argv[c],".","data"));
                  if (unlink(name) != 0)
                    fprintf(stderr,"%s: [WARNING] Couldn't delete file %s\n",Prog_Name,name);
                }
            }
        }
    
    }

  free(prefix);
  exit (0);

@@ -374,17 +397,17 @@ error:
  { char *name;

    fclose(aout);
    name = Catenate(prefix,argv[2],".","anno");
    name = Catenate(prefix,argv[c],".","anno");
    if (unlink(name) != 0)
      fprintf(stderr,"%s: [WARNING] Couldn't delete file %s during abort\n",Prog_Name,name);
    if (dout != NULL)
      { fclose(dout);
        name = Catenate(prefix,argv[2],".","data");
        name = Catenate(prefix,argv[c],".","data");
        if (unlink(name) != 0)
          fprintf(stderr,"%s: [WARNING] Couldn't delete file %s during abort\n",Prog_Name,name);
      }
    free(prefix);
  }

  free(prefix);
  exit (1);
}
+1303 −799

File changed.

Preview size limit exceeded, changes collapsed.

+175 −81

File changed.

Preview size limit exceeded, changes collapsed.

DBa2b.c

0 → 100644
+108 −0
Original line number Diff line number Diff line
#include <stdlib.h>
#include <stdio.h>

#include "DB.h"

int main(int argc, char *argv[])
{ char   code, which;
  int64  total;
  int    len, rno, mno, qual;
  int    vec[4];
  char  *buffer[256];
  char **mname;
  int  **masks;

  (void) argv;

  if (argc > 1)
    { fprintf(stderr,"Usage: DBa2b <(ascii) >(binary)\n");
      exit (1);
    }

  while (scanf(" %c",&code) == 1)       //  Header lines
    if (code == '@' || code == '+')
      { scanf(" %c",&which);
        fwrite(&code,sizeof(char),1,stdout);
        fwrite(&which,sizeof(char),1,stdout);
        if (which == 'T')
          { scanf("%d %lld",&mno,&total);
            fwrite(&mno,sizeof(int),1,stdout);
            fwrite(&total,sizeof(int64),1,stdout);
            if (code == '@')
              { masks[mno] = (int *) malloc(sizeof(int)*2*total);
                scanf(" %d",&len);
                mname[mno] = (char *) malloc(sizeof(char)*(len+1));
                scanf(" %s",mname[mno]);
                fwrite(&len,sizeof(int),1,stdout);
                fwrite(mname[mno],sizeof(char),len,stdout);
              }
          }
        else
          { scanf(" %lld",&total);
            if (which == 'M')
              { masks = (int **) malloc(sizeof(int *)*total);
                mname = (char **) malloc(sizeof(char *)*total);
              }
            else if (code == '@')
              buffer[(int) which] = malloc(total+1);
            fwrite(&total,sizeof(int64),1,stdout);
          }
      }
    else
      { ungetc(code,stdin);
        break;
      }

  buffer['A'] = buffer['c'] = buffer['d'] = 
  buffer['i'] = buffer['m'] = buffer['s'] = buffer['S'];

  while (scanf(" %c",&code) == 1)       //  For each data line do
    { fwrite(&code,sizeof(char),1,stdout);
      switch (code)
      { case 'R':                         //  Read
          scanf(" %d",&rno);
          fwrite(&rno,sizeof(int),1,stdout);
          break;
        case 'Q':                         //  Read
          scanf(" %d",&qual);
          fwrite(&qual,sizeof(int),1,stdout);
          break;
        case 'L':                         //  Well, Pulse range
          scanf(" %d %d %d",vec,vec+1,vec+2);
          fwrite(vec,sizeof(int),3,stdout);
          break;
        case 'N':                         //  SNR values
          scanf(" %d %d %d %d",vec,vec+1,vec+2,vec+3);
          fwrite(vec,sizeof(int),4,stdout);
          break;
        case 'S': case 'A': case 'c':     //  DNA strings (2-bit compressible)
          scanf(" %d",&len);
          scanf(" %s",buffer[(int) code]);
          if (code == 'A')
            Number_Arrow(buffer[(int) code]);
          else
            Number_Read(buffer[(int) code]);
          Compress_Read(len,buffer[(int) code]);
          fwrite(&len,sizeof(int),1,stdout);
          fwrite(buffer[(int) code],sizeof(char),COMPRESSED_LEN(len),stdout);
          break;
        case 'H': case 'I': case 'F':     //  All other string fields
        case 'd': case 'i':
        case 'm': case 's':
          scanf(" %d",&len);
          scanf(" %s",buffer[(int) code]);
          fwrite(&len,sizeof(int),1,stdout);
          fwrite(buffer[(int) code],sizeof(char),len,stdout);
          break;
        case 'T':                         //  Mask
          scanf("%d %d",&mno,&len);
          for (int i = 0; i < len; i++)
            scanf(" %d %d",masks[mno]+2*i,masks[mno]+2*i+1);
          fwrite(&mno,sizeof(int),1,stdout);
          fwrite(&len,sizeof(int),1,stdout);
          fwrite(masks[mno],sizeof(int),2*len,stdout);
      }
    }

  exit (0);
}

DBb2a.c

0 → 100644
+109 −0
Original line number Diff line number Diff line
#include <stdlib.h>
#include <stdio.h>

#include "DB.h"

int main(int argc, char *argv[])
{ char   code, which;
  int64  total;
  int    len, rno, mno, qual;
  int    vec[4];
  char  *buffer[256];
  char **mname;
  int  **masks;

  (void) argv;

  if (argc > 1)
    { fprintf(stderr,"Usage: DBb2a <(binary) >(ascii)\n");
      exit (1);
    }

  if (fread(&code,sizeof(char),1,stdin) == 0)
    code = 0;
    
  while (code == '@' || code == '+')
    { fread(&which,sizeof(char),1,stdin);
      printf("%c %c",code,which);
      if (which == 'T')
        { fread(&mno,sizeof(int),1,stdin);
          fread(&total,sizeof(int64),1,stdin);
          printf("%d %lld",mno,total);
          if (code == '@')
            { masks[mno] = (int *) malloc(sizeof(int)*2*total);
              fread(&len,sizeof(int),1,stdin);
              mname[mno] = (char *) malloc(sizeof(char)*(len+1));
              fread(mname[mno],sizeof(char),len,stdin);
              printf(" %d %.*s",len,len,mname[mno]);
            }
          printf("\n");
        }
      else
        { fread(&total,sizeof(int64),1,stdin);
          if (which == 'M')
            { masks = (int **) malloc(sizeof(int *)*total);
              mname = (char **) malloc(sizeof(char *)*total);
            }
          else if (code == '@')
            buffer[(int) which] = malloc(total+1);
          printf(" %lld\n",total);
        }

      if (fread(&code,sizeof(char),1,stdin) == 0)
       code = 0;
    }

  buffer['A'] = buffer['c'] = buffer['d'] = 
  buffer['i'] = buffer['m'] = buffer['s'] = buffer['S'];

  while (code != 0)       //  For each data line do
    { switch (code)
      { case 'R':                         //  Read
          fread(&rno,sizeof(int),1,stdin);
          printf("R %d\n",rno);
          break;
        case 'Q':                         //  Qual Value
          fread(&qual,sizeof(int),1,stdin);
          printf("Q %d\n",qual);
          break;
        case 'L':                         //  Well, Pulse range
          fread(vec,sizeof(int),3,stdin);
          printf("L %d %d %d\n",vec[0],vec[1],vec[2]);
          break;
        case 'N':                         //  SNR values
          fread(vec,sizeof(int),4,stdin);
          printf("N %d %d %d %d\n",vec[0],vec[1],vec[2],vec[3]);
          break;
        case 'S': case 'A': case 'c':     //  DNA strings (2-bit compressible)
          fread(&len,sizeof(int),1,stdin);
          fread(buffer[(int) code],sizeof(char),COMPRESSED_LEN(len),stdin);
          Uncompress_Read(len,buffer[(int) code]);
          if (code == 'A')
            Letter_Arrow(buffer[(int) code]);
          else
            Lower_Read(buffer[(int) code]);
          printf("%c %d %.*s\n",code,len,len,buffer[(int) code]);
          break;
        case 'H': case 'I': case 'F':     //  All other string fields
        case 'd': case 'i':
        case 'm': case 's':
          fread(&len,sizeof(int),1,stdin);
          fread(buffer[(int) code],sizeof(char),len,stdin);
          printf("%c %d %.*s\n",code,len,len,buffer[(int) code]);
          break;
        case 'T':                         //  Mask
          fread(&mno,sizeof(int),1,stdin);
          fread(&len,sizeof(int),1,stdin);
          fread(masks[mno],sizeof(int),2*len,stdin);
          printf("T%d %d",mno,len);
          for (int i = 0; i < len; i++)
            printf(" %d %d",masks[mno][2*i],masks[mno][2*i+1]);
          printf("\n");
      }

      if (fread(&code,sizeof(char),1,stdin) == 0)
       code = 0;
    }

  exit (0);
}
Loading