Utilites

«*»= void DisplayMessage(char *msg) RectangleType r; char *s; UInt slen=0,height=0,w,maxw=0,y=0;

FntSetFont(2); for(s=msg; *(s+slen)!= '' ; slen++) if(*(s+slen)=='') height+=FntCharHeight(); w=FntCharsWidth(s,slen); maxw=MAX(maxw,w); s+=slen+1; slen=0;

height+=FntCharHeight(); maxw=MAX(maxw,FntCharsWidth(s,slen));

r.topLeft.x=(160-maxw)/2-10; r.topLeft.y=(160-height)/2-10; r.extent.x=maxw+20; r.extent.y=height+20;

y=r.topLeft.y+10;

WinEraseRectangle(&r,7);

for(s=msg; *(s+slen)!= '' ; slen++) if(*(s+slen)=='') w=FntCharsWidth(s,slen); WinDrawChars(s,slen,(SWord)((160-w)/2),y); y+=FntCharHeight(); s+=slen+1; slen=0;

w=FntCharsWidth(s,slen); WinDrawChars(s,slen,(SWord)((160-w)/2),y);

WinDrawGrayRectangleFrame(boldRoundFrame,&r);

void SetMode(int newmode) ControlPtr mlabel; FormPtr frm;

if(mode != newmode && prefs.deselect) DeselectAll();

mode=newmode;

frm=FrmGetActiveForm(); mlabel=GetObjectPtr(frm,ModeLabel); switch(mode) case MOVE_ITEM: CtlSetLabel(mlabel,"Move Items"); break; case RESIZE_LOC: CtlSetLabel(mlabel,"Resize"); break; case EDIT_ITEM: CtlSetLabel(mlabel,"Edit"); break; case NEW_LOC: CtlSetLabel(mlabel,"New Loc"); break; case DEL_ITEM: CtlSetLabel(mlabel,"Delete Item"); break; case PARAMS: CtlSetLabel(mlabel,"Parameters"); break; case MOVE_VERTEX: CtlSetLabel(mlabel,"Move Vtx"); break; case INSERT_VERTEX: CtlSetLabel(mlabel,"Insert Vtx"); break; case NEW_CONNECTION: CtlSetLabel(mlabel,"New Con"); break; case DEL_VERTEX: CtlSetLabel(mlabel,"Delete Vtx"); break; case ADD_TEXT: CtlSetLabel(mlabel,"New Text"); break;

void CenterDisplayOn(RectanglePtr r) int screen_width=MAPAREAWIDTH/currentSection->si.scale; int screen_height=MAPAREAHEIGHT/currentSection->si.scale;

currentSection->si.xoffset=r->topLeft.x-(screen_width-r->extent.x)/2; currentSection->si.yoffset=r->topLeft.y-(screen_height-r->extent.y)/2;

void doOptions() FormPtr nf=FrmInitForm(OptionsForm); FieldPtr fld; Handle text; VoidPtr p;

if(prefs.verbose) CtlSetValue(GetObjectPtr(nf,VerboseOpt),1); else CtlSetValue(GetObjectPtr(nf,VerboseOpt),0);

if(prefs.fastdraw) CtlSetValue(GetObjectPtr(nf,FastDraw),1); else CtlSetValue(GetObjectPtr(nf,FastDraw),0);

if(prefs.deselect) CtlSetValue(GetObjectPtr(nf,DeselectMode),1); else CtlSetValue(GetObjectPtr(nf,DeselectMode),0);

if(prefs.overwriteFrame) CtlSetValue(GetObjectPtr(nf,OverwriteFrame),1); else CtlSetValue(GetObjectPtr(nf,OverwriteFrame),0);

if(prefs.copyHalf) CtlSetValue(GetObjectPtr(nf,HalfCut),1); else CtlSetValue(GetObjectPtr(nf,HalfCut),0);

fld=GetObjectPtr(nf,GridSizeField); if(currentSection) text=FldGetTextHandle(fld); if(!text) text=(Handle)MemHandleNew(3); p=MemHandleLock((VoidHand)text); StrIToA(p,currentSection->si.gridsize); FldSetTextHandle(fld,text); MemHandleUnlock((VoidHand)text);

if(FrmDoDialog(nf) == OkButton) prefs.verbose=CtlGetValue(GetObjectPtr(nf,VerboseOpt)); prefs.fastdraw=CtlGetValue(GetObjectPtr(nf,FastDraw)); prefs.deselect=CtlGetValue(GetObjectPtr(nf,DeselectMode)); prefs.overwriteFrame=CtlGetValue(GetObjectPtr(nf,OverwriteFrame)); prefs.copyHalf=CtlGetValue(GetObjectPtr(nf,HalfCut)); if(currentSection) text=FldGetTextHandle(fld); p=MemHandleLock((VoidHand)text); currentSection->si.gridsize=StrAToI(p); MemHandleUnlock((VoidHand)text); @

«Includes»= #include <Pilot.h> #include "callback.h" #include <Common.h> #include <System/SysAll.h> #include <UI/UIAll.h>

#include "mapperRsc.h" #include "mapper.h" @

«Prototypes»= static void EditUpdateScrollBar (); static void updateSectionList(); static void SetZoom(int); static void exitEdit();

Boolean SelectMapHandleEvent (EventPtr); Boolean AboutFormHandleEvent (EventPtr); int euklid(int, int); void RecalcConnectionBox(Item *); void DeselectAll(); void SelectedRect(RectangleType *); void DeselectConnections(); void SelectConnections(); void CenterDisplayOn(RectanglePtr); void SearchItems(); void SetMode(int newmode); void CutToClip(); void CopyToClip(); void PasteFromClip(); void ZoomOut(); void ZoomIn(); void DisplayMessage(char *); @

«Globals»=

Map *currentMap; int section; Section *currentSection; Section *clipboard;

Section *searchSection,*searchStart; int searchIndex; char *searchString=NULL; Boolean searchFlag=false; Boolean searchCase=false;

char **sectionNames=NULL; UInt allocedSecNames=0;

int downX,downY; Byte mode=MOVE_ITEM; int fontResize=0;

static Vertex *selVertex; static SelectedVertexSet *selSet;

extern Prefs prefs; Boolean modified; Boolean menuDisplayed; @