#define BUFF_SIZE sizeof(struct LineItem) WriteItemList(FileName) /*Write the item list to disk*/ char *FileName; { struct FileHandle *fp; struct LineItem *buffer,*CurItem; UBYTE StartDouble; if((fp=(struct FileHandle *)Open(FileName,MODE_NEWFILE))==NULL) { TitleError("Can't open file for save!"); return(FALSE); } buffer=(struct LineItem *)AllocMem(BUFF_SIZE,MEMF_CHIP|MEMF_CLEAR); strcpy(buffer->Text,"LFDB"); /*ID: Liner Form Data Block*/ /*Store StaringLevel & DoubleSpc as one byte on disk*/ StartDouble=StartingLevel+(DoubleSpc*32); buffer->Text[4]=StartDouble; buffer->Text[5]=0; Write(fp,buffer,BUFF_SIZE); CurItem=(struct LineItem *)FirstItem; do { buffer->Level=CurItem->Level; buffer->ItemNumber=CurItem->ItemNumber; strcpy(buffer->Text,CurItem->Text); Write(fp,buffer,BUFF_SIZE); CurItem=(struct LineItem *)CurItem->NextItem; } while(CurItem != NULL); FreeMem(buffer,BUFF_SIZE); Close(fp); return(TRUE); } ReadItemList(FileName) /*Read an item list from disk*/ char *FileName; { struct FileHandle *fp; struct LineItem *buffer,*CurItem; int len; char TempIndent; if((fp=(struct FileHandle *)Open(FileName,MODE_OLDFILE))==NULL) { TitleError("Can't open file for read!"); return(FALSE); } FreeListMem(FirstItem,LastItem); /*Get rid of old outline*/ buffer=(struct LineItem *)AllocMem(BUFF_SIZE,MEMF_CHIP|MEMF_CLEAR); Read(fp,buffer,BUFF_SIZE); TempIndent=buffer->Text[4]; buffer->Text[4]=NULL; if(strcmp(buffer->Text,"LFDB")) { close(fp); return(FALSE); } if(TempIndent>=32) /*If double spaced...*/ { DoubleSpc=1; MenuItem1.Flags=CHECKIT+ITEMTEXT+COMMSEQ+MENUTOGGLE+ ITEMENABLED+HIGHCOMP+CHECKED; TempIndent-=32; /*Removed double spacing flag*/ } else { DoubleSpc=0; MenuItem1.Flags=CHECKIT+ITEMTEXT+COMMSEQ+MENUTOGGLE+ ITEMENABLED+HIGHCOMP; } SubItems[StartingLevel]->Flags-=CHECKED; StartingLevel=(TempIndent < 6) ? TempIndent : 6; SubItems[StartingLevel]->Flags+=CHECKED; CurItem=FirstItem=FirstScrnItem=(struct LineItem *)InsertItem(NULL,NULL); len=Read(fp,buffer,BUFF_SIZE); while(len > 0) { CurItem->ItemNumber=buffer->ItemNumber; CurItem->Level=buffer->Level; strcpy(CurItem->Text,buffer->Text); len=Read(fp,buffer,BUFF_SIZE); CurItem=(struct LineItem *)InsertItem(NULL,CurItem); } LastItem=(struct LineItem *)CurItem->PrevItem; LastItem->NextItem=NULL; FreeMem(CurItem,sizeof(struct LineItem)); FreeMem(buffer,BUFF_SIZE); Close(fp); PrintItemList(FirstItem,1); CurrentItem=(struct LineItem *)FirstItem; PlotCursor(MinX(CurrentItem),1); return(TRUE); }