/*-----------------------------------------------------------------------*/
static void PutElem(void * elem)
  {
    t_ELMsize elemSize = elm2link(elem)->size;     
    Putt_ELMsize(elemSize);
    if (1!=fwrite(elem,(int)elemSize,1,fileW))
      AbortLL_M("PutListLev1","fwrite failed");
  }
static t_ELMsize Gett_ELMsize(void)
{
  t_ELMsize l;
  if (1 != fread(&l,sizeof(l),1,fileR))
    AbortLL_M("Gett_ELMsize","fread failed");

  return l;
}
static char GetChar(void)
{
  char c;
  if (1 != fread(&c,sizeof(c),1,fileR))
    AbortLL_M("GetChar","fread failed");

  return c;
}
/*---------- empty element allocation and and linking ------------------*/
static void *
InsEmptyBefLLf(l_list *li, size_t size)
{
  l_list * newEl;

  if (NULL==(newEl=(l_list*)malloc(size+sizeof(t_linkLL))))
       AbortLL_M("InsEmptyBefLLf","malloc failed");

  l_lbefore(li,newEl);
  newEl->size=size;
  return (link2elm(newEl));
}
/*-----------------------------------------------------------------------*/
static void WritefLL(char * filename, t_LL list, void (*PutList)(t_LL l))
{
  if('-' == *filename) fileW = stdout;
  else if (NULL==(  fileW = fopen(filename,"wb")))
          AbortLL_M("WriteLL","fopen failed");

  fprintf(fileW,"#LL");
  
  PutList(list);

  fclose(fileW);
}
Example #6
0
File: LLfile.c Project: caomw/mods
void LL2File(t_LL list, char * name)
{
  FILE *file = (strcmp("-",name)) ? fopen(name,"w") : stdout ;
  char * str;

  if (NULL==file) AbortLL_M("LL2File","can't open file for write");

  ForeachLL_M(list,str)
      fputs(str,file);

  fclose(file);
}
t_LL ReadLL(char * filename)
{
  t_LL   list;

  if('-' == *filename) fileR = stdin;
  else if (NULL==(  fileR = fopen(filename,"rb")))
          AbortLL_M("ReadLL","fopen failed");

                        /* .LL file starts #LL followed by a (t_LLsize) 0*/
  if('#'!=GetChar() || 'L'!=GetChar() || 'L'!=GetChar() || 0!=Gett_LLsize())
    AbortLL_M("ReadLL","file not in LL format!");

  list = GetList();
 
  {                              /* test whether the whole file was read */
    char c;
    if(0 != fread(&c,sizeof(c),1,fileR))
      AbortLL_M("ReadLL","trailing chars found");
  }
  
  fclose(fileR);
  return list;
}
Example #8
0
File: LLfile.c Project: caomw/mods
static t_LL AuxFile2LL(char * name, int exitOnErr)
{
  char  buffer[MAX_LINE_LENGTH];
  t_LL list  = ConsLL();
  FILE *file = fopen(name,"r");

  if (NULL==file)
    {
      if (!exitOnErr) return list;            /* return empty list */
      else             AbortLL_M("File2LL","can't open file for read");
    }

  while(fgets(buffer,MAX_LINE_LENGTH,file))
    InsLastLLf(list,strlen(buffer)+1,buffer);

  fclose(file);
  return list;
}
/*-----------------------------------------------------------------------*/
static t_LL GetList(void)
{
  t_LL list = ConsLL();
  t_LLsize size = Gett_LLsize();
   
  while(size-- > 0)
  {
    t_ELMsize elemSize = Gett_ELMsize();
    if (0 == elemSize )
    {  /* this element is a list, get it by a recursive call */
       t_LL listElem = GetList();
       InsLastLL(list,listElem);
    }
    else
    { 
       void * elemData = InsEmptyBefLLf(list2link(list),elemSize);
       if (1!=fread(elemData,elemSize,1,fileR))
         AbortLL_M("GetList","fread failed");
    }
  }

  return list;
}
static void Putt_ELMsize(t_ELMsize l)
{
  if (1 != fwrite(&l,sizeof(l),1,fileW))
    AbortLL_M("Putt_ELMsize","fwrite failed");
}