home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff285.lzh / 'Liner / Source / disk.h < prev    next >
C/C++ Source or Header  |  1989-11-28  |  3KB  |  108 lines

  1. #define BUFF_SIZE sizeof(struct LineItem)
  2.  
  3. WriteItemList(FileName) /*Write the item list to disk*/
  4. char *FileName;
  5. {
  6.    struct FileHandle *fp;
  7.    struct LineItem *buffer,*CurItem;
  8.    UBYTE StartDouble;
  9.  
  10.    if((fp=(struct FileHandle *)Open(FileName,MODE_NEWFILE))==NULL)
  11.       {
  12.       TitleError("Can't open file for save!");
  13.       return(FALSE);
  14.       }
  15.  
  16.    buffer=(struct LineItem *)AllocMem(BUFF_SIZE,MEMF_CHIP|MEMF_CLEAR);
  17.  
  18.    strcpy(buffer->Text,"LFDB"); /*ID:  Liner Form Data Block*/
  19.    /*Store StaringLevel & DoubleSpc as one byte on disk*/
  20.    StartDouble=StartingLevel+(DoubleSpc*32);
  21.    buffer->Text[4]=StartDouble;
  22.    buffer->Text[5]=0;
  23.    Write(fp,buffer,BUFF_SIZE);
  24.    CurItem=(struct LineItem *)FirstItem;
  25.  
  26.    do
  27.       {
  28.       buffer->Level=CurItem->Level;
  29.       buffer->ItemNumber=CurItem->ItemNumber;
  30.       strcpy(buffer->Text,CurItem->Text);
  31.       Write(fp,buffer,BUFF_SIZE);
  32.       CurItem=(struct LineItem *)CurItem->NextItem;
  33.       }
  34.    while(CurItem != NULL);
  35.  
  36.    FreeMem(buffer,BUFF_SIZE);
  37.    Close(fp);
  38.    return(TRUE);
  39. }
  40.  
  41. ReadItemList(FileName)  /*Read an item list from disk*/
  42. char *FileName;
  43. {
  44.    struct FileHandle *fp;
  45.    struct LineItem *buffer,*CurItem;
  46.    int len;
  47.    char TempIndent;
  48.  
  49.    if((fp=(struct FileHandle *)Open(FileName,MODE_OLDFILE))==NULL)
  50.       {
  51.       TitleError("Can't open file for read!");
  52.       return(FALSE);
  53.       }
  54.  
  55.    FreeListMem(FirstItem,LastItem); /*Get rid of old outline*/
  56.    buffer=(struct LineItem *)AllocMem(BUFF_SIZE,MEMF_CHIP|MEMF_CLEAR);
  57.    Read(fp,buffer,BUFF_SIZE);
  58.    TempIndent=buffer->Text[4];
  59.    buffer->Text[4]=NULL;
  60.    if(strcmp(buffer->Text,"LFDB"))
  61.       {
  62.       close(fp);
  63.       return(FALSE);
  64.       }
  65.    if(TempIndent>=32)   /*If double spaced...*/
  66.       {
  67.       DoubleSpc=1;
  68.       MenuItem1.Flags=CHECKIT+ITEMTEXT+COMMSEQ+MENUTOGGLE+
  69.             ITEMENABLED+HIGHCOMP+CHECKED;
  70.       TempIndent-=32;  /*Removed double spacing flag*/
  71.       }
  72.    else
  73.       {
  74.       DoubleSpc=0;
  75.       MenuItem1.Flags=CHECKIT+ITEMTEXT+COMMSEQ+MENUTOGGLE+
  76.          ITEMENABLED+HIGHCOMP;
  77.       }
  78.  
  79.    SubItems[StartingLevel]->Flags-=CHECKED;
  80.    StartingLevel=(TempIndent < 6) ? TempIndent : 6;
  81.    SubItems[StartingLevel]->Flags+=CHECKED;
  82.  
  83.    CurItem=FirstItem=FirstScrnItem=(struct LineItem *)InsertItem(NULL,NULL);
  84.  
  85.    len=Read(fp,buffer,BUFF_SIZE);
  86.  
  87.    while(len > 0)
  88.       {
  89.       CurItem->ItemNumber=buffer->ItemNumber;
  90.       CurItem->Level=buffer->Level;
  91.       strcpy(CurItem->Text,buffer->Text);
  92.       len=Read(fp,buffer,BUFF_SIZE);
  93.       CurItem=(struct LineItem *)InsertItem(NULL,CurItem);
  94.       }
  95.  
  96.    LastItem=(struct LineItem *)CurItem->PrevItem;
  97.    LastItem->NextItem=NULL;
  98.    FreeMem(CurItem,sizeof(struct LineItem));
  99.    FreeMem(buffer,BUFF_SIZE);
  100.    Close(fp);
  101.  
  102.    PrintItemList(FirstItem,1);
  103.    CurrentItem=(struct LineItem *)FirstItem;
  104.    PlotCursor(MinX(CurrentItem),1);
  105.    return(TRUE);
  106. }
  107.  
  108.