home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
calculat
/
baseconv.lbr
/
BASECONV.BZS
/
BASECONV.BAS
Wrap
BASIC Source File
|
1988-01-24
|
4KB
|
98 lines
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 <CR> 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%<BI% AND 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