;>>> BISECTOR.GXM
;>>> Bisects an ARC or ANGLE defined by two Rays. 
;>>> Written by Vincent Ferrara 2005 
;>>> Revision - A. (22/05/05)
;>>> Added ability to restore current OA setting. 
;>>> Removed superfluous coding and added point extraction of arc > Thanks Bjorn Holmgren.
;>>> SO added to ray selection and added contineous loop for selection of objects > Thanks William McCormick Jr.
;>>> Revision - B. (31/05/05)
;>>> SO removed. Problematic when object not found.
;>>> Added feedback at the prompt line of angle being bisected.
;>>> Further superflluous coding removed. > Thanks Bjorn Holmgren.
;
/MSP,++,/XMD,++,MO;
/VLC;
OR,??,/VIN,0,$VAL;
AL,??,/VIN,11,$VAL,AL,++;
SY,??,/VIN,12,$VAL,SY,++;
OA,!,/VRL,3,$VAL;
;
.FIRST;
/PMT,1,'Select an ARC to bisect or First RAY of angle..>',#;
/PMT,2,'Press <ESC> to cancel',#;
/VPT,1,@;
/IF,$DERR[EQ]-2,/GTO,EXIT; 
/CEL,O,$X(1),$Y(1),!;
/IF,$VAL[EQ]0,/GTO,NOTFOUND-1;
/EEX,1,E;
/VIN,3,$VAL;
/IF,$I(3)[EQ]2,/GTO,LINE-1; 
/IF,$I(3)[EQ]11,/GTO,ARC; 
/BEEP;
/PMT,1,'<< NOT A VALID OBJECT >>',#,|,'Press <ESC> to finish or <ENTER> to restart',#,/CIN;
/IF,$VAL[EQ]-2,/GTO,EXIT; 
/IF,$VAL[EQ]-1,/DEL,/GTO,FIRST;
/IF,$VAL[LE]0,/GTO,EXIT;
;
.NOTFOUND-1;
/BEEP;
/PMT,1,'<< OBJECT NOT FOUND >>',#,|,'Press <ESC> to finish or <ENTER> to continue',#,/CIN;
/IF,$VAL[EQ]-2,/GTO,EXIT; 
/IF,$VAL[EQ]-1,/DEL,/GTO,FIRST;
/IF,$VAL[LE]0,/GTO,EXIT;
;
.ARC; 
/EEX,1,P,2,A,/VPT,2,$PNTX,$PNTY; 
/EEX,1,V,3,A,/VRL,4,$STR;
/DEL;
/PMT,1,'You are Bisecting a Span Angle of >,$R(4),',#;
OA,A,SM,$X(2),$Y(2),SN,$X(2),$Y(2);
L1,SN,$X(2),$Y(2),@;
/IF,$DERR[EQ]-2,/GTO,EXIT; 
/GTO,FIRST;
;
.LINE-1;
/EEX,1,P,1,A,/VPT,2,$PNTX,$PNTY;
/EEX,1,P,2,A,/VPT,3,$PNTX,$PNTY;
/DEL;
OA,=,$X(1),$Y(1);
/VRL,0,$VAL;
;
.SECOND;
/PMT,1,'Select Second RAY of angle..>',#;
/PMT,2,'Press <ESC> to cancel',#;
/VPT,4,@;
/IF,$DERR[EQ]-2,/GTO,EXIT; 
/CEL,O,$X(4),$Y(4),!;
/IF,$VAL[EQ]0,/GTO,NOTFOUND-2;
/EEX,1,E;
/VIN,3,$VAL;
/IF,$I(3)[EQ]2,/GTO,LINE-2; 
/BEEP;
/PMT,1,'<< NOT A VALID OBJECT >>',#,|,'Press <ESC> to finish or <ENTER> to continue',#,/CIN;
/IF,$VAL[EQ]-2,/GTO,EXIT; 
/IF,$VAL[EQ]-1,/GTO,SECOND;
/IF,$VAL[LE]0,/GTO,EXIT;
;
.NOTFOUND-2;
/BEEP;
/PMT,1,'<< Second RAY not found >>',#,|,'Press <ESC> to finish or <ENTER> to continue',#,/CIN;
/IF,$VAL[EQ]-2,/GTO,EXIT; 
/IF,$VAL[EQ]-1,/GTO,SECOND;
/IF,$VAL[LE]0,/GTO,EXIT;
;
.LINE-2;
/EEX,1,P,1,A,/VPT,5,$PNTX,$PNTY;
/EEX,1,P,2,A,/VPT,6,$PNTX,$PNTY;
/DEL;
OA,=,$X(4),$Y(4);
/VRL,1,$VAL;
;
/VIN,1,0;
/GEO,1,2,3,5,6,1,7,2;
/IF,$I(2)[NE]1,/GTO,PARALLEL;
/IF,$R(0)[EQ]$R(1),/GTO,PARALLEL;
/IF,$R(0)[GT]$R(1),/VRL,2,($R(0)-$R(1))/2+$R(1);
/IF,$R(0)[LT]$R(1),/VRL,2,($R(1)-$R(0))/2+$R(0);
OA,$R(2);
LI,SO,$X(1),$Y(1),#,/VPT,8,LP,PU;
LI,SO,$X(4),$Y(4),#,/VPT,9,LP,PU;
A2,$X(7),$Y(7),$X(8),$Y(8),$X(9),$Y(9);
/CEL,T,!;
/EEX,1,V,3,A,/VRL,4,$STR;
/DEL,OO;
/PMT,1,'You are Bisecting an Angle of >,$R(4),',#;
L1,$X(7),$Y(7),@;
/IF,$DERR[EQ]-2,/GTO,EXIT; 
/GTO,FIRST;
;
.PARALLEL;
/BEEP;
/PMT,1,'<< Both RAYS are PARALLEL >>',#,|,'Press <ESC> to finish or <ENTER> to restart',#,/CIN;
/IF,$VAL[EQ]-2,/GTO,EXIT; 
/IF,$VAL[EQ]-1,/DEL,/GTO,FIRST;
/IF,$VAL[LET]0,/GTO,EXIT; 
;
.EXIT;
OA,$R(3);
/IF,$I(0)[EQ]1,OR,++;
/IF,$I(0)[EQ]0,OR,--;
/IF,$I(11)[EQ]0,AL,--;
/IF,$I(12)[EQ]0,SY,--;
/XMD,--,/MSP,--,PU;
