home *** CD-ROM | disk | FTP | other *** search
- #include "Globals.h"
-
- #define FP 1 /*Pen for filenames in YAFR (white)*/
- #define DP 3 /* " " dirnames " " (orange)*/
-
- extern ColorReq();
-
- /*I think most of these are self explanatory (HandleNew() handles the New*/
- /*item in the Project menu, etc.)*/
- void HandleNew()
- {
- if(Modified && !AreYouSure(Window))
- return;
-
- NewAll();
- }
-
- 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,FALSE))
- {
- Modified=FALSE;
- TitleErrorCancel(); /*Write current filename in title bar*/
- } /*if there was no error*/
- }
- }
-
- void Save(arexx)
- BYTE arexx;
- {
- if(FileName[0]==NULL)
- HandleSaveAs();
- else
- {
- WriteItemList(FileName,arexx);
- Modified=FALSE;
- TitleErrorCancel();
- }
- }
-
- void HandleSaveAs()
- {
- if(GetFilename(SFileName,SDirName,SExt,FileName,24,9,
- "Enter filename for save",Screen,FP,DP,TRUE))
- {
- if(WriteItemList(FileName,FALSE)) /*Save As... never called from ARexx*/
- {
- Modified=FALSE;
- TitleErrorCancel(); /*Update filename in title bar*/
- } /*if there was no error*/
- }
- }
-
- HandlePrintDisk(arexxstat,filename)
- BYTE arexxstat; /*Called from arexx or not?*/
- char *filename; /*Filename if called from ARexx*/
- {
- struct FileHandle *fp;
- char chip buffer[90];
- struct LineItem *Item;
-
- if(arexxstat)
- strcpy(PDName,filename);
- else
- 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)
- {
- if(!arexxstat)
- TitleError("Can't open file!");
- return(FALSE);
- }
-
- Item=(struct LineItem *)FirstItem;
- while(Item != NULL)
- {
- MakeTextLine(buffer,Item);
- Write(fp,buffer,strlen(buffer));
- Item=(struct LineItem *)Item->NextItem;
- }
- Close(fp);
- return(TRUE);
- }
-
- HandlePrintPrinter() /*Send an outline to the printer*/
- {
- struct FileHandle *fp;
- char chip RetBuf[8];
- char Printed=0;
- char chip buffer[90];
- struct LineItem *Item;
- struct Preferences preferences;
- UWORD maxlines;
-
- if((fp=(struct FileHandle *)Open("prt:",MODE_OLDFILE))==NULL)
- {
- TitleError("Can't open printer!");
- return(FALSE);
- }
-
- GetPrefs(&preferences,sizeof(struct Preferences));
- maxlines=preferences.PaperLength-1; /*Get maximum page size*/
-
- RetBuf[0]=0x0d;
- RetBuf[1]=0x0a;
-
- if(prefs.DS)
- {
- RetBuf[2]=0x0d;
- RetBuf[3]=0x0a;
- RetBuf[4]=0;
- }
- else
- RetBuf[2]=0;
-
- Item=(struct LineItem *)FirstItem;
- while(Item != NULL)
- {
- for(Printed=2;Printed < maxlines && Item != NULL;
- Printed+=(prefs.DS) ? 2 : 1)
- {
- 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);
- }
- Close(fp);
- return(TRUE);
- }
-
- void 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);
- if(HandleCopy()) /*Copy to buffer. If it was successful,*/
- HandleErase(); /*erase the block copied from*/
- else
- return(FALSE);
- CheckModified();
- }
-
- HandleCopy()
- {
- struct WhichOne which;
-
- if(ClipMode < NOINV)
- FreeListMem(ClipStart,ClipEnd);
- if(InvsMode > NOINV)
- if(StartChar < EndChar)
- WriteInvsTextToClip(StartChar,EndChar-StartChar+1,CurrentItem->Text);
- else
- WriteInvsTextToClip(EndChar,StartChar-EndChar+1,CurrentItem->Text);
- else
- { /*Find the true start/end*/
- FindStartEnd(StartIItem,EndIItem,&which);
-
- /*If cutting out a bunch of continuations, get the parent and all*/
- /*the child continuations as well*/
- which.Start=(struct LineItem *)FindPrevNonCont(which.Start);
- if((which.End = (struct LineItem *)FindNextNonCont(which.End))==NULL)
- which.End=(struct LineItem *)LastItem;
-
- if(which.End->NextItem != NULL && !which.End->cont &&
- which.End->NextItem->cont)
- return(FALSE);
- if(!SnagBlock(which.Start,which.End))
- return(FALSE);
- }
- ClipMode=InvsMode;
- return(TRUE);
- }
-
- void HandlePaste()
- {
- int TempX,TempY;
- char text[160];
-
- CancelInvs();
- CheckModified();
- if(ClipMode < NOINV)
- {
- if((!CurrentItem->NextItem->cont) || (CurrentItem->NextItem == NULL))
- AddBlock(CurrentItem);
- }
- else
- {
- strcpy(text,CurrentItem->Text);
- ReadItemString(PosInText(CurrentItem->Level),
- 79-PosInText(CurrentItem->Level),text);
-
- TempX=CurX;
- PlotCursor(1,(TempY=CurY));
-
- /*Break line apart if paste overruns the line*/
- if(BreakLineApart(CurrentItem,CurrentItem->NextItem,
- text)==CurrentItem)
- PrintItem(CurrentItem);
- else
- PrintItemList(CurrentItem,CurY);
- PlotCursor(TempX > MaxX(CurrentItem)?MaxX(CurrentItem):TempX,TempY);
- }
- }
-
- HandleErase()
- {
- BYTE status=TRUE;
-
- if(InvsMode==NOINV)
- return(FALSE);
-
- if(InvsMode > NOINV)
- DelTextBlock();
- else
- status=HandleDelBlock();
- if(status)
- {
- InvsMode=NOINV;
- CheckModified();
- }
- }
-
- void Refresh() /*Refresh the entire screen*/
- {
- 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);
- }
-
- void CheckModified() /*Put an '*' in the title bar if it isn't there*/
- {
- if(Modified==FALSE)
- {
- Modified=TRUE;
- TitleErrorCancel();
- }
- }
-
- void MakeTextLine(Buffer,Item) /*Convert a LineItem into a text string*/
- char *Buffer;
- struct LineItem *Item;
- {
- UBYTE buflen;
- strcpy(Buffer,"");
- GetOutlineChars(Item,Buffer); /*Get the number*/
- strcat(Buffer," ");
- strcat(Buffer,Item->Text); /*Append the text*/
- buflen=strlen(Buffer);
- Buffer[buflen]=0x0a;
- if(prefs.DS)
- {
- Buffer[buflen+1]=0x0a;
- Buffer[buflen+2]=NULL;
- }
- else
- Buffer[buflen+1]=NULL;
- }
-
- void HandlePalette() /*Change the color palette*/
- {
- ColorReq(Screen);
- SaveColors(&(Screen->ViewPort));
- }
-
- void HandleReloadPrefs()
- {
- UBYTE X,Y;
- X=CurX;
- Y=CurY;
-
- GetLinerPrefs("liner:liner.prefs"); /*Get the preferences from disk*/
- CloseGraphics();
- ClearMenus();
- InterpretPrefs(); /*Install them*/
-
- PrintItemList(FirstScrnItem,1); /*Restore the current outline*/
- 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*/
- }
-
- /*End of menu.c*/
-