(09-05-2017 08:26 AM)webmasterpdx Wrote: I have a decent program for converting bases...
First, here are some utility functions I use, including the key definition.
Code:
// BASE CONVERSION
KEY KA_3()
BEGIN
RETURN STRING(EVAL(MBase()));
END;
// DEFINE MENU
EXPORT PUTMENU(mTXT)
BEGIN
DRAWMENU(mTXT(1),mTXT(2),mTXT(3),mTXT(4),mTXT(5),mTXT(6));
END;
// SETS mSEL GLOBAL VIA MENU SELECT
EXPORT GETMENU(mx,my,mTXT)
BEGIN
LOCAL mSEL;
mSEL:=0;
IF my≥220 AND my≤239 THEN
CASE
IF mx≥0 AND mx≤51 AND mTXT(1)>"" THEN
mSEL:=1;
END;
IF mx≥53 AND mx≤104 AND mTXT(2)>"" THEN
mSEL:=2;
END;
IF mx≥106 AND mx≤157 AND mTXT(3)>"" THEN
mSEL:=3;
END;
IF mx≥159 AND mx≤210 AND mTXT(4)>"" THEN
mSEL:=4;
END;
IF mx≥212 AND mx≤263 AND mTXT(5)>"" THEN
mSEL:=5;
END;
IF mx≥265 AND mx≤319 AND mTXT(6)>"" THEN
mSEL:=6;
END;
END; // CASE
END; // IF MENU
RETURN mSEL;
END; // BEGIN
And here is the base conversion program itself.
Code:
EXPORT MBase()
BEGIN
LOCAL men,m,m1,mx,my,s;
// initialize
men:={"","BIN","OCT","DEC","HEX","EXIT"};
PUTMENU(men);
REPEAT // WAIT FOR A MOUSE CLICK
m:=WAIT(−1);
UNTIL (m(1)==3 OR m(1)==7);
mx:=m(2); my:=m(3);
s:=GETMENU(mx,my,men);
IF (s==1 OR s==6) THEN RETURN END;
RETURN s:=SETBASE(Ans(1),s-1);
END; // BEGIN
Enjoy...
A couple of changes I made to my version allow the function MBase() to be also usable from the command line using passed parameter in both rpn and algebraic/textbook
In the base conversion program:
EXPORT MBase(in)
...
RETURN s:=SETBASE(in,s-1);
In the key definitions:
...
RETURN STRING(EVAL(MBase(Ans(1))));
It may be useful to some..