Procedure Labelline; LABEL 1,3; CONST {All of these set the default values} TYPEDEFAULT='curved'; { Sets type 'curved','straight', or 'angled'} TEXTDEFAULT='Enter text here'; {Sets text} INCREMENTDEFAULT='1'; {Sets increment} ISARROW=TRUE; {Arrowhead on} ISCIRCLED=FALSE; {Circled off} ARROWTYPE=1; {Solid arrowhead} ARROWSIZE=.2; {Arrow length in inches} ARROWANGLE=12; {Arrow angle in degrees} LEADERDEFAULT=''; TRAILERDEFAULT=''; VAR labeltext,incrementtext: STRING; h,lh,nh: HANDLE; Arrow,labelisval,incisval,curved,angled,straight:BOOLEAN; cancel,circled: BOOLEAN; x1,y1,x2,y2,x3,y3,cx1,cx2,cy1,cy2:REAL; x4,x5,y4,y5,mainlength,sidelength,length,length2:REAL; alpha1,alpha2,alphatot,radius,pi,textoffset,layerscale:REAL; item,typesize: INTEGER; increment,labelval:REAL; Frac,DisAcc : LONGINT; Format : INTEGER; UPI,boxinc,len,wid : REAL; UMark,SqUMark:STRING; x6,y6,x7,y7,r,s,m,xm1,ym1:REAL; length3,alpha3,sideoffset:REAL; seed:LONGINT; myleader,mytrailer,finaltext:STRING; function rand:real; begin seed:=(125*seed+1) MOD 16384; rand:=seed/16384; end; Procedure MakeDialog; BEGIN BEGINDIALOG( 1, 1,30,50,300,375); ADDBUTTON('OK', 1, 1,160,290,240,310); ADDBUTTON('Cancel', 2, 1, 30,290,110,310); ADDBUTTON('Arrowhead', 8, 2, 90, 60,180, 80); ADDBUTTON('Circled', 13, 2, 20, 60,90, 80); ADDFIELD('ð Label Text ð', 9, 1, 20, 5,130, 30); ADDFIELD(labeltext, 10, 2, 20, 32,250, 52); ADDFIELD('Increment', 12, 1, 150, 5,230, 25); ADDFIELD(incrementtext, 11, 2, 230, 7,250, 20); ADDFIELD('__________________________________________', 14, 1, 20, 80,250, 100); ADDBUTTON('Curved', 15, 3, 20, 100,90, 120); ADDBUTTON('Angled', 16, 3, 100, 100,170, 120); ADDBUTTON('Straight', 17, 3, 180, 100,250, 120); ADDFIELD('__________________________________________', 18, 1, 20, 120,250, 140); ADDFIELD('ð Leader ð', 19, 1, 20, 140,80, 160); ADDBUTTON('(N)', 20, 1, 100, 140,130, 160); ADDBUTTON('(E)', 21, 1, 150, 140,180, 160); ADDBUTTON('Clear', 23, 1, 200, 140,250, 160); ADDFIELD(myleader, 22, 2, 20, 170,250, 190); ADDFIELD('__________________________________________', 29, 1, 20, 200,250, 220); ADDFIELD('ð Trailer ð', 24, 1, 20, 220, 80, 240); ADDBUTTON('Clear', 27, 1, 200, 220,250, 240); ADDFIELD(mytrailer, 28, 2, 20, 250,250, 270); ENDDIALOG; END; procedure rundialog; BEGIN GetDialog(1); setItem(8,arrow); setItem(13,circled); setfield(10,labeltext); setfield(11,incrementtext); setitem(15,curved); setitem(16,angled); setitem(17,straight); setfield(22,myleader); setfield(28,mytrailer); selfield(10); REPEAT DialogEvent(item); if (item=8) then setitem(8,not(itemsel(8))); if (item=13) then setitem(13,not(itemsel(13))); if (item=15) then begin setitem(15,true); setitem(16,false); setitem(17,false); end; if (item=16) then begin setitem(16,true); setitem(15,false); setitem(17,false); end; if (item=17) then begin setitem(17,true); setitem(16,false); setitem(15,false); end; if (item=20) then setfield(22,'(N)'); if (item=21) then setfield(22,'(E)'); if (item=23) then setfield(22,''); if (item=27) then setfield(28,''); UNTIL (item=1) OR (item=2); {OK or Cancel} IF itemSel(8) THEN arrow:=TRUE ELSE arrow:=FALSE; IF itemSel(13) THEN circled:=TRUE ELSE circled:=FALSE; IF itemSel(15) THEN curved:=TRUE ELSE curved:=FALSE; IF itemSel(16) THEN angled:=TRUE ELSE angled:=FALSE; IF itemSel(17) THEN straight:=TRUE ELSE straight:=FALSE; labeltext:=getfield(10); incrementtext:=getfield(11); myleader:=getfield(22); mytrailer:=getfield(28); clrdialog; IF item=2 THEN cancel:=TRUE ELSE cancel:=FALSE; END; BEGIN {- - - - Main Program - - - - -} labeltext:=TEXTDEFAULT; myleader:=LEADERDEFAULT; mytrailer:=TRAILERDEFAULT; seed:=str2num(copy(date(0,2),7,2)); incrementtext:=INCREMENTDEFAULT; TextJust(2); boxinc:=1.4; lh:=ActLayer; layerscale:=GetLScale(lh); curved:=false; straight:=false; angled:=false; if TYPEDEFAULT='curved' then curved:=true; if TYPEDEFAULT='angled' then angled:=true; if TYPEDEFAULT='straight' then straight:=true; textorigin(0,0); begintext; ' ' endtext; h:=LNewObj; typesize:=getsize(h); DelObject(h); GetUnits(Frac,DisAcc,Format,UPI,UMark,SqUMark); textoffset:=typesize/144*UPI*layerscale; pi:=4*arctan(1); arrow:=ISARROW; circled:=ISCIRCLED; cancel:=false; makedialog; REPEAT rundialog; IF Cancel=False then begin Pushattrs; PenSize(3); if arrow then marker(ARROWTYPE,ARROWSIZE,ARROWANGLE) else marker(0,0,0); Message('Drag from start to end of marker line...'); GetLine(x1, y1, x2, y2); ClrMessage; if (x1=x2) & (y1=y2) then begin cancel:=true; goto 3; end; mainlength:=sqrt((x2-x1)^2+(y2-y1)^2); alpha1:=arcsin((y2-y1)/mainlength); if (x2'') then finaltext:=concat(myleader,' ',labeltext) else finaltext:=labeltext; if (mytrailer<>'') then finaltext:=concat(finaltext,' ',mytrailer); if finaltext <> '' then begin begintext; finaltext endtext; end; h:=LNewObj; setclass(h,'Label'); if circled then begin GetBBox(h,X1, Y1, X2, Y2); len:=x2-x1; wid:=(y1-y2)*1.1; if len