#define ABOUT_Y_REG 42 #define ABOUT_Y_LACED 142 #define FP 1 /*Pen for filenames in YAFR (white)*/ #define DP 3 /* " " dirnames " " (orange)*/ NewAll() /*Get rid of all the Items*/ { char Buffer[10]; FreeListMem(FirstItem,LastItem); DoubleSpc=0; MenuItem1.Flags=CHECKIT+ITEMTEXT+COMMSEQ+MENUTOGGLE+ITEMENABLED+HIGHCOMP; SubItems[StartingLevel]->Flags-=CHECKED; /*Restore StartingLevel to 0*/ StartingLevel=0; SubItems[0]->Flags+=CHECKED; FirstItem=LastItem=FirstScrnItem=ScrnBtm=CurrentItem= (struct LineItem *)AllocMem(sizeof(struct LineItem),MEMF_CLEAR); CurrentItem->Level=1; Buffer[0]=0x0c; WriteConsole(Buffer,1); PrintItemList(CurrentItem,1); PlotCursor(MinX(CurrentItem),CurY); Modified=FALSE; TitleErrorCancel(); MenuItem1.Flags=CHECKIT+ITEMTEXT+COMMSEQ+MENUTOGGLE+ITEMENABLED+HIGHCOMP; return(TRUE); } /*I think most of these are self explanatory (HandleNew() handles the New*/ /*item in the Project menu, etc.)*/ HandleNew() { if(AreYouSure(Window)) { NewAll(); FileName[0]=NULL; /*Remove default filenames*/ SFileName[0]=NULL; PDName[0]=NULL; PFileName[0]=NULL; TitleErrorCancel(); } } HandleOpen() { if(GetFilename(SFileName,SDirName,SExt,FileName,24,9, "Enter filename for open",Screen,FP,DP,TRUE)) { if(Modified) if(!AreYouSure(Window)) return(FALSE); if(ReadItemList(FileName)) { Modified=FALSE; TitleErrorCancel(); /*Write current filename in Title bar*/ } /*if there was no error*/ } } Save() { if(FileName[0]==NULL) HandleSaveAs(); else { WriteItemList(FileName); Modified=FALSE; TitleErrorCancel(); } } HandleSaveAs() { if(GetFilename(SFileName,SDirName,SExt,FileName,24,9, "Enter filename for save",Screen,FP,DP,TRUE)) { if(WriteItemList(FileName)) { Modified=FALSE; TitleErrorCancel(); /*Update filename in title bar*/ } /*if there was no error*/ } } HandlePrintDisk() { struct FileHandle *fp; char *buffer; struct LineItem *Item; if(!GetFilename(PFileName,PDirName,PExt,PDName,24,9, "Enter filename for print",Screen,FP,DP,TRUE)) return(FALSE); if((fp=(struct FileHandle *)Open(PDName,MODE_NEWFILE))==NULL) { TitleError("Can't open file!"); return(FALSE); } buffer=(char *)AllocMem(90,MEMF_CHIP|MEMF_CLEAR); Item=(struct LineItem *)FirstItem; while(Item != NULL) { strcpy(buffer,""); GetOutlineChars(Item,buffer); strcat(buffer," "); strcat(buffer,Item->Text); Write(fp,&buffer[Indent],strlen(&buffer[Indent])); buffer[0]=0x0a; Write(fp,buffer,1); if(DoubleSpc) Write(fp,buffer,1); /*If double spaced, print another RETURN*/ Item=(struct LineItem *)Item->NextItem; } FreeMem(buffer,90); Close(fp); return(TRUE); } HandlePrintPrinter() { struct FileHandle *fp; char *buffer,RetBuf[5],Printed=0; struct LineItem *Item; if((fp=(struct FileHandle *)Open("prt:",MODE_OLDFILE))==NULL) { TitleError("Can't open printer!"); return(FALSE); } buffer=(char *)AllocMem(90,MEMF_CHIP|MEMF_CLEAR); RetBuf[0]=0x0d; RetBuf[1]=0x0a; if(DoubleSpc) { RetBuf[2]=0x0d; RetBuf[3]=0x0a; RetBuf[4]=0; } else RetBuf[2]=0; Item=(struct LineItem *)FirstItem; while(Item != NULL) { for(Printed=0;Printed < 60 && Item != NULL;Printed+=(1+DoubleSpc)) { strcpy(buffer,""); GetOutlineChars(Item,buffer); strcat(buffer," "); strcat(buffer,Item->Text); Write(fp,&buffer[Indent],strlen(&buffer[Indent])); strcpy(buffer,RetBuf); Write(fp,buffer,strlen(buffer)); Item=(struct LineItem *)Item->NextItem; } buffer[0]=NEWPAGE; Write(fp,buffer,1); } FreeMem(buffer,90); Close(fp); return(TRUE); } HandleAbout() { int ctr; struct Window *AboutWdw; /*Get chip memory for the gadget image.*/ if((ImageData1Chip=(USHORT *)AllocMem(420,MEMF_CHIP|MEMF_CLEAR))==NULL) return(FALSE); for(ctr=0;ctr<210;ctr++) /*Transfer image info into chip memory*/ { ImageData1Chip[ctr]=ImageData1[ctr]; } /*Do the same for the reversed image*/ if((ImageData2Chip=(USHORT *)AllocMem(840,MEMF_CHIP|MEMF_CLEAR))==NULL) return(FALSE); for(ctr=0;ctr<420;ctr++) /*Transfer image info into chip memory*/ { ImageData2Chip[ctr]=ImageData2[ctr]; } NewAboutWindow.Screen=Screen; /*Pointer to window's screen*/ Image1.ImageData=(USHORT *)ImageData1Chip; Image2.ImageData=(USHORT *)ImageData2Chip; if(Laced) NewAboutWindow.TopEdge=ABOUT_Y_LACED; else NewAboutWindow.TopEdge=ABOUT_Y_REG; if((AboutWdw=(struct Window *)OpenWindow(&NewAboutWindow))==NULL) { /*Open the window*/ FreeMem(ImageData1Chip,420); FreeMem(ImageData2Chip,840); return(FALSE); } SetWindowTitles(AboutWdw,-1,"For your information..."); SetAPen(AboutWdw->RPort,1); PrintIText(AboutWdw->RPort,&IntuiTextList2,0,0); /*Wait for the user to press the Continue... gadget*/ Wait(1<UserPort->mp_SigBit); CloseWindow(AboutWdw); /*Close the window*/ FreeMem(ImageData1Chip,420); FreeMem(ImageData2Chip,840); } HandleQuit() { if(Modified) /*Ask "Are you sure?" only if outline isn't saved*/ { if(AreYouSure(Window)) CloseStuff(); } else CloseStuff(); } HandleCut() { if(NOINV==InvsMode) return(FALSE); CheckModified(); HandleCopy(); HandleErase(); } HandleCopy() { if(ClipMode < NOINV) FreeListMem(ClipStart,ClipEnd); ClipMode=InvsMode; if(InvsMode > NOINV) if(StartChar < EndChar) WriteInvsTextToClip(StartChar,EndChar-StartChar+1,CurrentItem->Text); else WriteInvsTextToClip(EndChar,StartChar-EndChar+1,CurrentItem->Text); else if(InvsMode == BLOCK_DOWN) SnagBlock(StartIItem,EndIItem); else SnagBlock(EndIItem,StartIItem); } HandlePaste() { int TempX; CheckModified(); if(ClipMode < NOINV) AddBlock(CurrentItem); else { ReadItemString(PosInText(CurrentItem->Level), 79-PosInText(CurrentItem->Level),CurrentItem->Text); CurrentItem->Text[MaxLen(CurrentItem->Level)]=NULL; TempX=CurX; PlotCursor(1,CurY); PrintItem(CurrentItem); PlotCursor(TempX,CurY); } } HandleErase() { if(InvsMode==NOINV) return(FALSE); CheckModified(); if(InvsMode > NOINV) DelTextBlock(); else HandleDelBlock(); InvsMode=NOINV; } DoubleSpacing() { CheckModified(); DoubleSpc=DoubleSpc ^ 1; /*XOR DoubleSpc w/1 to toggle between*/ } /*true and false*/ HandleInterlaced() /*Toggle between normal and interlaced screen*/ { UBYTE X,Y; X=CurX; Y=CurY; /*Store cursor position*/ CloseGraphics(); if(Laced) /*If interlaced*/ { NewScreen.Height=200; NewWindow.Height-=200; NewScreen.ViewModes=HIRES; /*Remove LACE from screen description*/ SCRNHEIGHT-=25; /*Rows*/ Laced=FALSE; /*Status switch*/ } else /*not interlaced*/ { NewScreen.Height=400; NewWindow.Height+=200; NewScreen.ViewModes=HIRES+LACE; /*Add LACE to screen description*/ SCRNHEIGHT+=25; /*Rows*/ Laced=TRUE; } OpenGraphics(); PrintItemList(FirstScrnItem,1); if(Y > DispRows) /*if the old laced Y is > the current possible rows*/ { Y=DispRows; /*Y now = the last screen item*/ CurrentItem=(struct LineItem *)ScrnBtm; } if(X > MaxX(CurrentItem)) /*Out of bounds*/ X=MaxX(CurrentItem); else if(X < MinX(CurrentItem)) X=MinX(CurrentItem); PlotCursor(X,Y); /*Restore cursor position*/ } HandleFirst() /*Handle 'Starting Level' menu item*/ { CheckModified(); StartingLevel=0; Refresh(); } HandleSecond() { CheckModified(); StartingLevel=1; Refresh(); } HandleThird() { CheckModified(); StartingLevel=2; Refresh(); } HandleFourth() { CheckModified(); StartingLevel=3; Refresh(); } HandleFifth() { CheckModified(); StartingLevel=4; Refresh(); } HandleSixth() { CheckModified(); StartingLevel=5; Refresh(); } Refresh() { UBYTE OldX,OldY; OldX=CurX; OldY=CurY; PrintItemList(FirstScrnItem,1); if(OldX < MinX(CurrentItem)) OldX=MinX(CurrentItem); else if(OldX > MaxX(CurrentItem)) OldX=MaxX(CurrentItem); PlotCursor(OldX,OldY); } CheckModified() { if(Modified==FALSE) { Modified=TRUE; TitleErrorCancel(); } }