10 REM ** BASECON.BAS ORIGINAL AUTHOR UNKNOWN ** 20 REM ** MODIFIED FOR CP/M 2.2 MONTEZUMA MICRO ** 30 REM ** MBASIC 5.XX ** 40 REM ** G. R. WOODROW ELK CITY, OKLA ** 50 REM ****** video control codes ' system dependant '********* 60 PRINT CHR$(26) REM ** clear screen code ** 70 HI$="" REM ** turn on hi-lighting ** 80 LO$="" REM ** turn off hi-lighting ** 90 BL$="" REM ** Bell code ** 100 REM ======================================================================= 110 REM ***** Lines 120 -250 sits up screen display ******* 120 REM ***** X = ROW Y = COLUMN ******* 130 X=2:Y=15:GOSUB 960 140 PRINT HI$;"Binary * * Decimal * * Hexadecimal * * Octal ";LO$ 150 X=3:Y=15:GOSUB 960 160 PRINT HI$;" * * Conversion * * ";LO$ 170 X=6:Y=8:GOSUB 960 180 PRINT "(Add the suffix B, O, D or H to the number you input)" 190 X=9:Y=10:GOSUB 960 200 PRINT "Enter number to be converted or to exit" 210 REM ** setup to print answers ** 220 X=12:Y=0:GOSUB 960 230 PRINT "Hex";TAB(20)"Decimal";TAB(40)"Octal";TAB(60)"Binary" 240 X=13:Y=0:GOSUB 960:PRINT STRING$(79,95) 250 X=17:Y=0:GOSUB 960:PRINT STRING$(79,95) 260 REM ==================================================================== 270 REM **** Line 280 Positions cursor and gets number to convert ***** 280 X=9:Y=54:GOSUB 960:PRINT CHR$(21);BL$;:INPUT NI$ 290 REM ==================================================================== 300 REM *** Lines 310 - 400 checks input, exits if null, converts any lowercase letters to uppercase **** 310 BI%=0:IF NI$="" THEN PRINT CHR$(26):END 320 IF LEN(NI$)<2 THEN 770 330 T%=LEN(NI$):X$="" 340 FOR L% = 1 TO T% 350 B$=MID$(NI$,L%,1) 360 IF ASC(B$) < 90 THEN 390 370 T = ASC(B$) - 32 380 B$= CHR$(T) 390 X$ = X$ + B$:NEXT L% 400 NI$ = X$ 410 REM ==================================================================== 420 REM ***** lines 430-470 checks input string for proper suffix and num value ***** 430 IF ((RIGHT$(NI$,1)="B") AND (LEN(NI$) <= 9)) THEN BI%=2 : GOTO 570 440 IF ((RIGHT$(NI$,1)="O") AND (VAL(NI$) < 177778!)) THEN BI%=8 :GOTO 570 450 IF ((RIGHT$(NI$,1)="D") AND (VAL(NI$) < 65536! )) THEN BI%=10 :GOTO 570 460 IF ((RIGHT$(NI$,1)="H") AND (LEN(NI$) < 6 )) THEN BI%=16:GOTO 570 470 IF RIGHT$(NI$,1) <> "B" AND RIGHT$(NI$,1) <> "D" AND RIGHT$(NI$,1) <> "O" AND RIGHT$(NI$,1) <> "H" THEN 520 480 REM ==================================================================== 490 REM **** lines 500 - 540 Error Messages ****** 500 IF BI%=0 THEN X=16:Y=0:GOSUB 960 510 PRINT CHR$(21);"Number to large !!!":GOTO 280 520 X=16:Y=0:GOSUB 960 530 PRINT CHR$(21);"Please use the indicated suffix so I know what you want -!!" 540 GOTO 280 550 REM ===================================================================== 560 REM **** lines 570 - 650 prints answers to screen ****** 570 L%=LEN(NI$) 580 NI$=LEFT$(NI$,L%-1) 590 BO%=16:GOSUB 670:X=16:Y=0:GOSUB 960:PRINT CHR$(21);NO$, 600 BO%=10:GOSUB 670:PRINT TAB(20)NO$, 610 BO%=8:GOSUB 670:PRINT TAB(40)NO$, 620 BO%=2:GOSUB 670 630 IF LEN(NO$) < 8 THEN NO$="0"+NO$:GOTO 630 640 PRINT TAB(60)NO$ 650 GOTO 280 660 REM ===================================================================== 670 REM **BASE CONVERSION SUBROUTINE** 680 REM **CONVERT TO DECIMAL** 690 L%=LEN(NI$) 700 DEC=0 710 PWR%=0 720 FOR J=L% TO 1 STEP -1 730 K%=ASC(MID$(NI$,J,1)) 740 IF K%>64 THEN K%=K%-7 750 K%=K%-48 760 IF K%-1 THEN 780 770 X=16:Y=0:GOSUB 960:PRINT CHR$(21);"INVALID INPUT ":GOTO 280 780 DEC=DEC+INT(K% * BI% ^ PWR% +.5) 790 PWR%=PWR%+1 800 NEXT J 810 REM **CONVERT DECIMAL TO BASE** 820 H$="0123456789ABCDEF" 830 NO$="" 840 PWR%=INT(LOG(DEC)/LOG(BO%)) 850 FOR J=PWR% TO 0 STEP -1 860 XX=INT(BO% ^ J + .5) 870 CH%=INT(DEC/XX) 880 NO$=NO$+MID$(H$,CH%+1,1) 890 DEC=INT(DEC - (CH% * XX) + .5) 900 NEXT J 910 RETURN 920 REM =================================================================== 930 REM *** CURSOR POSITION ROUTINE *** 940 REM *** SET FOR MONTEZUMA MICRO 2.2 TRS80 MOD IV *** 950 REM *** CHANGE TO SUIT YOUR SYSTEM *** 960 PRINT CHR$(27);"=";CHR$(X+32);CHR$(Y+32); 970 RETURN