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