There is a 2005 rpm build on Sourceforge but that one caused me problems, whereas the 2007 rpm build also from Sourceforge (not apparently built for any particular Linux distro) went in like a treat and is the one I now use. At the time of writing there is no rpm package of the 2012 version.
There is a discrepancy between my sdlbasic and the documentation- in theory rnd() should return a number up to 999999999, but in practice it returns a number up to 32 bit signed maxint. To solve this I have used rnd(999999999) instead of rnd().
More sdl basic listings can be found on: My 2nd sdlbasic page || My 3rd sdlbasic page
Alphabetical index to SDL programs on this site
Chris Burch has converted some of these routines to another programming language you may want to look at, OpenEuphoria versions by Chris Burch
Main sdlBasic homepage || sdlBasic Online Documentation
Anyway, on this page I will place my sdlBasic versions of TI Extended Basic graphics programs. Probably fairly easy to adapt these to other languages. The small images are portions of the displayed screen.
' high resolution graphics using
' sdlBasic (Windows, Unix etc etc) -requires SDL.
' after brooks, harding etc
setdisplay(800,800,16,2)
cls
' ORBITDGM PROGRAM
FOR C=-2 TO 0.01 STEP .0005
X=0
M=500*(C+2)
FOR I=0 TO 200
X=X*X+C
IF I>50 THEN
N=(800/4)*(2-X)
dot(M,N)
END IF
END FOR
END FOR
prints("Any key to end")
WAITKEY
END
' image using sdlBasic (Windows, Unix etc etc) ' from ti*mes 31 BIFURCATION PLOT GENERATOR ' (an idea from Clifford Pickover ' "Computers Pattern Chaos and Beauty" (1990)) ' S Shaw, 2014 SetDisplay(800,800,16,2) randomize

cls
fprints("ESC to end, R for random next")
MN=5 : MX=83
' FULL-ISH PIC WOULD BE 0 TO 125
' CHAOS RULES FROM 59 UP
BETA=5
' LOW beta VALUE 3 MAKES CHAOS FARTHER AWAY
' HIGHER VALUE INCREASES CHAOS
RS=270
' RS is PLOT RESOLUTION
X0=1.95
' START VALUE FOR Xt [t=0]
N=250
' ITERATION COUNT USE HIGHER FOR MORE CHAOS
RSC=2.8*RS/ (MX-MN) : CS=80
WHILE INKEY<>k_esc
FOR LA=MN TO MX STEP (MX-MN)/RS
X=X0
FOR I=1 TO N+10
X=LA*X*(1+X)^(-BETA)
IF I>10 THEN
dot ((LA-MN)*RSC+21 , X*CS+91)
end if
NEXT
NEXT
WAITKEY
IF INKEY=82 OR INKEY=114 THEN
MN=RND(150) : MX=MN+RND(100)+2 : BETA=3+RND(3)
X0=RND(3)+0.01 : RSC=2.8*RS/ (MX-MN) : CLS
fprints("ESC to end, R for random next")
END IF
Fractal Report Issue 10 pdf
Connett circles-
' high resolution graphics using sdlBasic ' (Windows, Unix etc etc) ' from Wallpaper by Peter Moon of Stockton on Tees, ' Fractal Report issue 10, August 1990 ' also see "wallpaper on your screen" ' Louis D Magguilli, Algorithm 4.2 (June 1993) ' CIRCLES from JE Connett, PWH Moon, S Shaw, 1990 SetDisplay(1000,900,16,2) randomize
SIDE=15
WHILE INKEY<>k_esc
cls
FOR I=1 TO 1000
FOR J=1 TO 900
X=I*SIDE/600
Y=J*SIDE/600
C=INT(X*X+Y*Y)
D=C/2
IF D-INT(D)<0.11 THEN
DOT(I+1,J+1)
END IF
END FOR
END FOR
prints ("ESC to end, r for random new one, s to zoom back to start, any other to zoom out ")
fprints ("Side=") : fprints(SIDE)
SIDE=SIDE*1.15
WAITKEY
IF INKEY=82 OR INKEY=114 THEN
SIDE=RND(160)
END IF
IF INKEY=83 OR INKEY=115 THEN
SIDE=15
END IF
WEND
END
ESCape key to exit, any other key to zoom. Where do the circles come from? There is no use of sin, cos or tan etc.
' BIPED GRAPHIC PROGRAM USING THREE DIFFERENT LOOPS ' WHEN FLAG IS SET TO 0 1 OR 2
setdisplay(800,800,16,2)
cls
' MAG sets the size of the image
MAG=21
' H and V set the image offset from top and side
H=330 : V=260
X=6.10 : Y=6.00
FLAG=0
WHILE FLAG<3
IF FLAG=1 THEN
X=8.30 : Y=8.02
END IF
IF FLAG=2 THEN
X=8.56 : Y=3.76
END IF
FOR L=1 TO 3299
NX=1-Y+ABS(X): NY=X : X=NX : Y=NY
A=H+X*MAG-Y*MAG
B=V+X*MAG+Y*MAG
dot(A,B)
NEXT
FLAG=FLAG+1
END WHILE
prints("press a key to end")
WAITKEY
END
Notice that sdlBasic supports numerous alternatives, so you can use WEND or END WHILE.
You may also choose to use NEXT or instead use END FOR - and they have the same effect.
' biped variable graphic program
setdisplay(800,800,16,2)
' mag sets the size of the image
mag=21
' h and v set the image offset from top and side
h=350 : v=220
' x and y determine the pattern that will be drawn
' seems best between 6 and 9 but try anything!
randomize
do
xr=rnd(10000)/10000*3 : yr=rnd(10000)/10000*3
cls
x=6+xr : y=6+yr
for l=1 to 3299
nx=1-y+abs(x): ny=x : x=nx : y=ny
a=h+x*mag-y*mag
b=v+x*mag+y*mag
dot(a,b)
end for
fprints(xr) : fprints(" ")
fprints(yr) : fprints(" hold escape key to terminate and touch other key for new image")waitkey if inkey=k_esc then end end if while inkey<>0 end while loop end
' high resolution graphics using sdlBasic ' (Windows, Unix etc etc) ' starry shapes S Shaw, 1990 SetDisplay(1000,1000,16,2) SC=5
WHILE INKEY<>k_esc
cls
FOR I=1 TO 1000
FOR J=1 TO 1000
A=I/SC
C=INT(A*SQR(A*J/SC)+0.5)
IF C/2<>INT(C/2) THEN
' the same graphic is produced using
' IF ANDBIT(C,2) THEN
DOT(J+1,I+1)
END IF
END FOR
END FOR
fprints ("ESC to end - any other to zoom in ")
fprints ("scalar= ") : fprints(SC)
WAITKEY
SC=SC*1.1
WEND
END
======================' starry shapes 2 - S Shaw, 1990 SetDisplay(800,800,16,2)
SHIFT=4
WHILE INKEY<>k_esc
cls
FOR I=1 TO 800
FOR J=1 TO 800
T=((I/20)^2)*J
IF ANDBIT(T,2^SHIFT) THEN
DOT(J,I)
END IF
END FOR
END FOR
fprints ("ESC to end - any other to increase bit shift ")
fprints ("shift= ") : fprints(SHIFT)
WAITKEY
SHIFT=SHIFT+1
IF SHIFT>10 THEN
SHIFT=4
END IF
WEND
END
' high resolution graphics using sdlBasic ' (Windows, Unix etc etc) ' sierpinski gasket from pascals triangle ' from clifford pickover. Modified S Shaw, 1990 SetDisplay(800,800,16,2) SC=3 DIM P[800],C[800] WHILE INKEY<>k_esc cls FOR L=0 TO 800 P[L]=1 : C[L]=0 END FOR FOR N=2 TO 800
FOR R=2 TO N
VAR=P[R]+P[R-1]
C[R]=VAR MOD SC
IF C[R]=0 THEN
DOT(N,R)
END IF
END FOR
FOR L=1 TO 800
P[L]=C[L]
END FOR
END FOR
locate(5,52) : fprints ("ESC to end - any other to increase modulus ")
fprints ("MODULUS ") : fprints(SC)
WAITKEY
SC=SC+1
WEND
END
' note that N MOD Q is the same as INT(N-Q*INT(N/Q))
' feather fractal using sdlBasic (Windows, Unix etc etc)
' strange attractor: Clifford A Pickover, Mazes for the Mind 1992
' also Clifford Pickover, Unseen Worlds, in Algorithm No 3.3, July 1992
' S Shaw, 1992 SetDisplay(800,800,16,2) SC=1 : N=1 WHILE INKEY<>k_esc cls
AA=-0.48 : B=0.93 : C=2-2*AA : X=3 : Y=0
W=AA*X+C*X*X/(1+X*X)
fprints (" zoom=") : fprints (SC)
fprints (" ...a moment...")
WHILE N<400000
' gives a reasonable image with this number of dots plotted
N=N+1
DOT (Y*25*SC+400,X*25*SC+500)
Z=X : X=B*Y+W : U=X*X : W=AA*X+C*U/(1+U) : Y=W-Z
WEND
fprints ("ESC to exit or any other key to zoom in/out")
WAITKEY
SC=(SC<>1)+(SC<>2.5)*2.5 : N=1
' above line toggles the value of SC and resets counterWEND END
' random attraction using sdlBasic (Windows, Unix etc etc)
' S Shaw, 1990-2013

SetDisplay(800,800,16,2)
RANDOMIZE
SC=0.5
A=rnd(999999999)/1000000000
IF RND(3)<2 THEN
B=1
ELSE
B=0.933
END IF
WHILE INKEY<>k_esc
CLS
FPRINTS(A) : FPRINTS(" - ") : PRINTS(B)
LOCATE(1,1) : PRINTS (" working ")
C=2-2*A : X=3 : Y=0 : W=A*X+C*X*X/(1+X*X)
FOR N=0 TO 500000
IF ABS(X)<0.0001 THEN
X=RND(10)
END IF
DOT(X*50*SC+350,Y*50*SC+450)
Z=X : X=B*Y+W : U=X*X : W=A*X+C*U/(1+U) : Y=W-Z
NEXT
locate(1,1)
fprints ("ESC to exit, i to zoom in,")
prints(" o to zoom out, or SPACE for another ")
WAITKEY
IF INKEY=73 OR INKEY=105 THEN
SC=SC*1.4 END IF IF INKEY=79 OR INKEY=111 THEN SC=SC*0.6 END IF IF INKEY=32 THEN rnd(999999999)/1000000000 IF RND(3)<2 THEN B=1 ELSE B=0.933 END IF END IF WEND END
' high resolution graphics using sdlBasic ' (Windows, Unix etc etc) ' plot S Shaw, 1990
' change x and y multipliers and offsets for
' detailed zoom (200 and 400 below)
' X varies between -1.7 and +1.7, Y from -1.1 to + 1.1
SetDisplay(800,800,16,2)
WHILE INKEY<>k_esc
cls
prints(" working...")
FOR T=0 TO 7000 STEP 0.006
X=SIN(0.99*T)-0.7*COS(3.01*T)
Y=COS(1.01*T)+0.1*SIN(15.03*T)
X=X*200+400 : Y=Y*200+400
DOT(Y,X)
NEXT
locate(0,0)
prints("ESC key to exit program, any other to run again")waitkey END WHILE end
Variables:
r= number of pixels down and across of pic.
b1,b2=phase shift of sine wave, minor adjustments
g= frequency of sine wave, main pattern determinator.
a=degree of disorder, low a=good order
m=modulus, degree of pattern density- m low=more pixels on. Also affects pattern.
' image using sdlBasic (Windows, Unix etc etc) ' (from egg tile generator page 242 of Computers ' Chaos Pattern and Beauty ' by Clifford A Pickover).(1990) ' for ti by S Shaw 1990 - SDL BASIC 2014
SetDisplay(800,800,16,2)
randomize
cls
fprints("ESC to end, R for random next")
R=700 : B1=-6 : B2=6 : G=314
A=5 : M=3
WHILE INKEY<>k_esc
FOR I=1 TO R
FOR J=1 TO R
X=B1+(G*I) : Y=B2+(G*J)
Z=A*(SIN(X)+SIN(Y))
C=INT(Z)
IF C/M<>INT(C/M) THEN
DOT (I+20,J+20)
END IF
NEXT
NEXT
WAITKEY
IF INKEY=82 OR INKEY=114 THEN
CLS : B1=INT(RND(6))+6*-1 : B2=INT (RND(9))+12*-1 : SC=1
G=INT (RND(260))+60 : A=INT(RND(7))+4 : M=INT(RND(4))+4
fprints("ESC to end, R for random next")END IF WEND END
The next program is based on work by M Feigenbaum in 1979 and produces some interesting pictures, depending on the limits you set when the program starts. Sometimes looking VERY closely (maximum magnification) will produce an interesting result, at other times it pays to stand back a little. Towards the bottom of the overall plot is chaos, on which can be found some overlying non-chaotic detail.
' image using sdlBasic (Windows, Unix etc etc) ' feigenbaum - Fractal Report 10 ' ' for ti by S Shaw 1990 - SDL BASIC 2014 ' SetDisplay(800,800,16,2) pi=3.1415926 RANDOMIZE WIDE=750 : : DEEP=400 bottom=1.14 : top=1.171 : LEFTS=2.53 : RIGHTS=2.586 VISIBLE=90 : INVISIBLE=10 SCALE=(RIGHTS-LEFTS)/WIDE WHILE INKEY<>k_esc cls
prints("ESC to end, a=visible+ b=visible- c & d move up and down")
fprints(" e=increase scale f=decrease scale g & h move left and right")

FOR RANGE=1 TO WIDE
K=LEFTS+RANGE*SCALE
P=0.3
FOR I=0 TO INVISIBLE
P=P+K*P*(1-P) :
NEXT
FOR I=0 TO VISIBLE
ROW=(P-BOTTOM)*DEEP/(TOP-BOTTOM)
COL=(K-LEFTS)*WIDE/(RIGHTS -LEFTS)
dot(ROW,COL)
P=P+K*P*(1-P)
NEXT
NEXT
WAITKEY
' increase visible a
IF INKEY=65 OR INKEY=97 THEN
CLS
VISIBLE=VISIBLE+5 : INVISIBLE=INVISIBLE-5
END IF
'decrease visible =b
IF INKEY=66 OR INKEY=98 THEN
CLS
VISIBLE=VISIBLE-5 : INVISIBLE=INVISIBLE+5
END IF
' up/down = c
IF INKEY=67 OR INKEY=99 THEN
CLS
LEFTS=LEFTS+0.01 : RIGHTS=RIGHTS+.01
END IF
' down/up=d
IF INKEY=68 OR INKEY=100 THEN
LEFTS=LEFTS-0.01 : RIGHTS=RIGHTS-.01
CLS
END IF
' increase wide=e
IF INKEY=69 OR INKEY=101 THEN
CLS
LEFTS=LEFTS-0.001 : RIGHTS=RIGHTS+0.001
SCALE=(RIGHTS-LEFTS)/WIDE
END IF
' decrease wide=f
IF INKEY=70 OR INKEY=102 THEN
CLS
LEFTS=LEFTS+0.001 : RIGHTS=RIGHTS-0.001
SCALE=(RIGHTS-LEFTS)/WIDE
END IF
' left/right = g
IF INKEY=71 OR INKEY=103 THEN
CLS
BOTTOM=BOTTOM+0.001 : TOP=TOP+0.001
END IF
' right / left =h
IF INKEY=72 OR INKEY=104 THEN
CLS
BOTTOM=BOTTOM-0.001 : TOP=TOP-0.001
END IF
WEND
END
Click image for larger version.' fluted scallops - joe jacobson 1988 ' journal of chaos and graphics august 1988 ' for ti-99/4a January 1991 by stephen shaw ' for sdlbasic 2017 stephen shaw setdisplay(800,800,16,2) cls RANDOMIZE(timer) p=3.1415 S=400 m=3 WHILE INKEY<>k_esc cls L=INT(60*(rnd(9999)/10000)+3) FOR B=16 TO 76 STEP 2 FOR A=0 TO 360 STEP 5 R3=SIN((L*A)/180*p) R=B*(1+(ABS(R3)/4)) X=R*COS(A/180*p) Y=R*SIN(A/180*p) IF A=0 THEN DOT(S+m*X,S+m*Y) OLDX=X OLDY=Y ELSE LINE(S+OLDX*m,S+OLDY*m,S+X*m,S+Y*m) OLDX=X OLDY=Y END IF NEXT NEXT WAITKEY IF INKEY=78 OR INKEY=110 THEN cls L=INT(60*(rnd(9999)/10000)+3)
fprints("ESC to end, any other key for random next")end if FOR I=1 TO 400000 j=cos(i) NEXT 'AVOID FLICKER WEND END