home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
basic
/
egbas.lbr
/
CONV.BZS
/
CONV.BAS
Wrap
BASIC Source File
|
1988-01-24
|
3KB
|
99 lines
0 REM 02-02-85zed & corrected 6/16 Bug corrected 7/18
10 PRINT CHR$(26)
20 PRINT"Eric Gans"
30 PRINT"French Department UCLA"
40 PRINT"Los Angeles, CA 90024"
50 PRINT"02/02/85"
60 REM rewritten by E. Gans 6/16/84
70 PRINT:PRINT TAB(35)"CONV":PRINT
80 PRINT" Generalized Base Conversion"
90 PRINT:PRINT" This program will convert numbers from & to any base up to 30."
100 PRINT" Digits >9 are expressed as letters: a=10, b=11 etc."
110 PRINT
120 PRINT" For the most common bases (Decimal, Binary, Hexadecimal), separate"
130 PRINT" commands are available; otherwise just input old & new bases."
140 DIM B(30),NN(30)
150 PRINT:PRINT
160 INPUT "Enter dh,db,bd for Dec/Hex/Bin; x=other; q=quit";D$
170 IF D$="q" THEN END
180 IF D$="x" THEN 620
190 IF D$="db" OR D$="dh" GOTO 230
200 IF D$="bd" OR D$="bh" GOTO 380
210 IF D$="hd" OR D$="hb" GOTO 490
220 PRINT CHR$(7):GOTO 160
230 INPUT "Decimal #";D
240 IF D$="dh" THEN PRINT"Hex is "HEX$(D):PRINT:GOTO 170
250 I=1
260 WHILE D>=1
270 B=INT(D/2)
280 IF B=D/2 THEN B(I)=0 ELSE B(I)=1
290 D=B
300 I=I+1
310 WEND
320 PRINT"Binary is: ";
330 FOR J=I-1 TO 1 STEP-1
340 PRINT USING"#";B(J);
350 NEXT
360 PRINT:PRINT
370 GOTO 160
380 REM bin->dec
390 INPUT "Binary #";B$
400 D=0
410 FOR I=1 TO LEN(B$)
420 IF MID$(B$,I,1)<>"1" AND MID$(B$,I,1)<>"0" THEN PRINT CHR$(7):GOTO 390
430 D=D+VAL(MID$(B$,LEN(B$)-I+1,1))*2^(I-1)
440 NEXT
450 PRINT"Decimal equivalent is"D
460 IF D$="bh" THEN PRINT"Hex is "HEX$(D)
470 PRINT
480 GOTO 160
490 REM hex
500 D=0
510 INPUT "Hex #";H$
520 FOR I=LEN(H$) TO 1 STEP-1
530 H$(I)=MID$(H$,I,1)
540 IF ASC(H$(I))>102 OR ASC(H$(I))<48 OR (ASC(H$(I))>57 AND ASC(H$(I))<97) THEN PRINT CHR$(7):GOTO 490
550 IF ASC(H$(I))<58 THEN H(I)=VAL(H$(I)) ELSE H(I)=ASC(H$(I))-87
560 D=D+H(I)*16^(LEN(H$)-I)
570 NEXT
580 PRINT"Decimal equivalent is"D
590 IF D$="hb" GOTO 250
600 PRINT
610 GOTO 160
620 REM generalized base conversion
630 PRINT
640 INPUT "Old base";OB
650 IF OB<2 OR OB>30 THEN PRINT CHR$(7):GOTO 640
660 INPUT "New base";NB
670 IF NB<2 OR NB>30 THEN PRINT CHR$(7):GOTO 660
680 IF NB=OB THEN PRINT CHR$(7):GOTO 660
690 IF OB=10 THEN INPUT "Number";N:GOTO 820
700 INPUT "Number";N$
710 N=0
720 IF LEN(N$)=0 OR LEN(N$)>30 THEN PRINT CHR$(7):GOTO 700
730 FOR I=LEN(N$) TO 1 STEP-1
740 IF ASC(MID$(N$,I,1))<48 OR (ASC(MID$(N$,I,1))>57 AND ASC(MID$(N$,I,1))<97) THEN PRINT CHR$(7):GOTO 700
750 IF OB<11 THEN IF VAL(MID$(N$,I,1))>OB-1 THEN PRINT CHR$(7):GOTO 700
760 IF OB>10 THEN IF ASC(MID$(N$,I,1))>86+OB THEN PRINT CHR$(7):GOTO 700
770 IF ASC(MID$(N$,I,1))<58 THEN N=N+VAL(MID$(N$,I,1))*OB^(LEN(N$)-I)
780 IF ASC(MID$(N$,I,1))>96 THEN N=N+(ASC(MID$(N$,I,1))-87)*OB^(LEN(N$)-I)
790 NEXT
800 PRINT"Decimal equivalent is"N
810 IF NB=10 THEN PRINT:N=0:GOTO 170
820 J=0
830 WHILE N>=1
840 J=J+1
850 NN(J)=N-NB*INT(N/NB)
860 N=INT(N/NB)
870 WEND
880 PRINT"Number to base"NB"is ";
890 FOR I=J TO 1 STEP-1
900 IF NN(I)<10 THEN PRINT CHR$(NN(I)+48);
910 IF NN(I)>10 THEN PRINT CHR$(NN(I)+87);
920 NEXT
930 PRINT:PRINT
940 N=0
950 GOTO 160
)<10 THEN PRINT CHR$(NN(I)+48);
910 IF NN(I)>10 THEN PRINT CHR$(NN(I)+87);
920 N