'===========================================================================
' Subject: ROTATING DNA ANALYSIS              Date: 03-10-96 (09:59)       
'  Author: Sean Smith                         Code: QB, QBasic, PDS        
'  Origin: FidoNet QUIK_BAS Echo            Packet: EGAVGA.ABC
'===========================================================================
'        Here's some cool code I found.  Does a dna string analysis.
'Definately something new!  Its on 4 different messages starting now.  I
'did not write this code though.  :(

SCREEN 12

CLS
molcol = 15
barcol = 8
scancol = 4
center = 75
interval = .1
length = 75
radius = 4
ky = 275
jy = 250
iy = 225
hy = 200
gy = 175
fy = 150
ey = 125
dy = 100
cy = 75
by = 50
y = 25
obs = 200
REM hscandir = 1
REM vscandir = 1

LINE (0, 0)-(151, 301), 8, B
LINE (1, 1)-(150, 300), 7, B
LINE (2, 2)-(149, 299), 15, B
LINE (3, 3)-(148, 298), 7, B
LINE (4, 4)-(147, 297), 8, B

LOCATE 20, 1
COLOR 8
PRINT "   [";
COLOR 15
PRINT "DNA Analysis";
COLOR 8
PRINT "]"
COLOR 15
PRINT : COLOR 8: PRINT " Í"; : COLOR 7: PRINT "Í";
COLOR 15: PRINT "[ Building structure  ]";
COLOR 7: PRINT "Í"; : COLOR 8: PRINT "Í"
message = 2
GOTO 20
5 FOR angle = 0 TO 36000 STEP interval

REM -------SCAN--------

10
IF scanned = 1 THEN GOTO 20
IF message = 2 THEN LOCATE 22, 5: COLOR 15: PRINT " Scaning DNA String  "
IF hscan < 15 THEN hscandir = 1
IF hscan > 290 THEN hscandir = 0
IF hscandir = 0 THEN hscan = hscan - 5: LINE (5, hscan + 5)-(145, hscan + 5), 0
IF hscandir = 1 THEN hscan = hscan + 5: LINE (5, hscan - 5)-(145, hscan - 5), 0
LINE (5, hscan)-(145, hscan), scancol

IF vscan < 15 THEN vscandir = 1: pass = pass + .5
IF vscan > 140 THEN vscandir = 0:
IF vscandir = 0 THEN vscan = vscan - 5: LINE (vscan + 5, 5)-(vscan + 5, 295), 0
IF vscandir = 1 THEN vscan = vscan + 5: LINE (vscan - 5, 5)-(vscan - 5, 295), 0
LINE (vscan, 5)-(vscan, 295), scancol

IF pass = 3 THEN scanned = 1: message = 3: LINE (5, hscan)-(145, hscan), 0:
LINE (vscan, 5)-(vscan, 295), 0: FOR delay = 1 TO 5000: NEXT delay: GOTO 5
GOTO 20
IF scanned = 0 THEN GOTO 10
REM --------1------------
20
 IF message = 3 THEN LOCATE 22, 5: COLOR 15: PRINT " Testing Integrity "
 zangle = angle + 1
 x1 = (center - (COS(zangle) * (length / 2)))
 x2 = (center + (COS(zangle) * (length / 2)))
 a1 = obs - (SIN(zangle) * (length))
 a2 = obs + (SIN(zangle) * (length))

 radiusx1 = (obs / a1) * radius
 radiusx2 = (obs / a2) * radius
 LINE (lastx1, y)-(lastx2, y), 0
 CIRCLE (lastx1, y), lastrx1, 0
 CIRCLE (lastx2, y), lastrx2, 0
 LINE (x1, y)-(x2, y), barcol
 CIRCLE (x1, y), radiusx1, molcol
 CIRCLE (x2, y), radiusx2, molcol

 lastx1 = x1
 lastx2 = x2
 lastrx1 = radiusx1
 lastrx2 = radiusx2
IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay
REM-----------2-------------
 bangle = angle + 1.5
 bx1 = (center - (COS(bangle) * (length / 2)))
 bx2 = (center + (COS(bangle) * (length / 2)))
 ba1 = obs - (SIN(bangle) * (length))
 ba2 = obs + (SIN(bangle) * (length))

 bradiusx1 = (obs / ba1) * radius
 bradiusx2 = (obs / ba2) * radius
 LINE (blastx1, by)-(blastx2, by), 0
 CIRCLE (blastx1, by), blastrx1, 0
 CIRCLE (blastx2, by), blastrx2, 0

 LINE (bx1, by)-(bx2, by), barcol
 CIRCLE (bx1, by), bradiusx1, molcol
 CIRCLE (bx2, by), bradiusx2, molcol

 blastx1 = bx1
 blastx2 = bx2
 blastrx1 = bradiusx1
 blastrx2 = bradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------3-------------
 cangle = angle + 2
 cx1 = (center - (COS(cangle) * (length / 2)))
 cx2 = (center + (COS(cangle) * (length / 2)))
 ca1 = obs - (SIN(cangle) * (length))
 ca2 = obs + (SIN(cangle) * (length))

 cradiusx1 = (obs / ca1) * radius
 cradiusx2 = (obs / ca2) * radius
 LINE (clastx1, cy)-(clastx2, cy), 0
 CIRCLE (clastx1, cy), clastrx1, 0
 CIRCLE (clastx2, cy), clastrx2, 0

 LINE (cx1, cy)-(cx2, cy), barcol
 CIRCLE (cx1, cy), cradiusx1, molcol
 CIRCLE (cx2, cy), cradiusx2, molcol

 clastx1 = cx1
 clastx2 = cx2
 clastrx1 = cradiusx1
 clastrx2 = cradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------4-------------
 dangle = angle + 2.5
 dx1 = (center - (COS(dangle) * (length / 2)))
 dx2 = (center + (COS(dangle) * (length / 2)))
 da1 = obs - (SIN(dangle) * (length))
 da2 = obs + (SIN(dangle) * (length))

 dradiusx1 = (obs / da1) * radius
 dradiusx2 = (obs / da2) * radius
 LINE (dlastx1, dy)-(dlastx2, dy), 0
 CIRCLE (dlastx1, dy), dlastrx1, 0
 CIRCLE (dlastx2, dy), dlastrx2, 0

 LINE (dx1, dy)-(dx2, dy), barcol
 CIRCLE (dx1, dy), dradiusx1, molcol
 CIRCLE (dx2, dy), dradiusx2, molcol

 dlastx1 = dx1
 dlastx2 = dx2
 dlastrx1 = dradiusx1
 dlastrx2 = dradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------5-------------
 eangle = angle + 3!
 ex1 = (center - (COS(eangle) * (length / 2)))
 ex2 = (center + (COS(eangle) * (length / 2)))
 ea1 = obs - (SIN(eangle) * (length))
 ea2 = obs + (SIN(eangle) * (length))

 eradiusx1 = (obs / ea1) * radius
 eradiusx2 = (obs / ea2) * radius
 LINE (elastx1, ey)-(elastx2, ey), 0
 CIRCLE (elastx1, ey), elastrx1, 0
 CIRCLE (elastx2, ey), elastrx2, 0

 LINE (ex1, ey)-(ex2, ey), barcol
 CIRCLE (ex1, ey), eradiusx1, molcol
 CIRCLE (ex2, ey), eradiusx2, molcol

 elastx1 = ex1
 elastx2 = ex2
 elastrx1 = eradiusx1
 elastrx2 = eradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------6-------------
 fangle = angle + 3.5
 fx1 = (center - (COS(fangle) * (length / 2)))
 fx2 = (center + (COS(fangle) * (length / 2)))
 fa1 = obs - (SIN(fangle) * (length))
 fa2 = obs + (SIN(fangle) * (length))

 fradiusx1 = (obs / fa1) * radius
 fradiusx2 = (obs / fa2) * radius
 LINE (flastx1, fy)-(flastx2, fy), 0
 CIRCLE (flastx1, fy), flastrx1, 0
 CIRCLE (flastx2, fy), flastrx2, 0

 LINE (fx1, fy)-(fx2, fy), barcol
 CIRCLE (fx1, fy), fradiusx1, molcol
 CIRCLE (fx2, fy), fradiusx2, molcol

 flastx1 = fx1
 flastx2 = fx2
 flastrx1 = fradiusx1
 flastrx2 = fradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------7-------------
 gangle = angle + 4
 gx1 = (center - (COS(gangle) * (length / 2)))
 gx2 = (center + (COS(gangle) * (length / 2)))
 ga1 = obs - (SIN(gangle) * (length))
 ga2 = obs + (SIN(gangle) * (length))

 gradiusx1 = (obs / ga1) * radius
 gradiusx2 = (obs / ga2) * radius
 LINE (glastx1, gy)-(glastx2, gy), 0
 CIRCLE (glastx1, gy), glastrx1, 0
 CIRCLE (glastx2, gy), glastrx2, 0

 LINE (gx1, gy)-(gx2, gy), barcol
 CIRCLE (gx1, gy), gradiusx1, molcol
 CIRCLE (gx2, gy), gradiusx2, molcol

 glastx1 = gx1
 glastx2 = gx2
 glastrx1 = gradiusx1
 glastrx2 = gradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------8-------------
 hangle = angle + 4.5
 hx1 = (center - (COS(hangle) * (length / 2)))
 hx2 = (center + (COS(hangle) * (length / 2)))
 ha1 = obs - (SIN(hangle) * (length))
 ha2 = obs + (SIN(hangle) * (length))

 hradiusx1 = (obs / ha1) * radius
 hradiusx2 = (obs / ha2) * radius
 LINE (hlastx1, hy)-(hlastx2, hy), 0
 CIRCLE (hlastx1, hy), hlastrx1, 0
 CIRCLE (hlastx2, hy), hlastrx2, 0

 LINE (hx1, hy)-(hx2, hy), barcol
 CIRCLE (hx1, hy), hradiusx1, molcol
 CIRCLE (hx2, hy), hradiusx2, molcol

 hlastx1 = hx1
 hlastx2 = hx2
 hlastrx1 = hradiusx1
 hlastrx2 = hradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------9-------------
 iangle = angle + 5
 ix1 = (center - (COS(iangle) * (length / 2)))
 ix2 = (center + (COS(iangle) * (length / 2)))
 ia1 = obs - (SIN(iangle) * (length))
 ia2 = obs + (SIN(iangle) * (length))

 iradiusx1 = (obs / ia1) * radius
 iradiusx2 = (obs / ia2) * radius
 LINE (ilastx1, iy)-(ilastx2, iy), 0
 CIRCLE (ilastx1, iy), ilastrx1, 0
 CIRCLE (ilastx2, iy), ilastrx2, 0

 LINE (ix1, iy)-(ix2, iy), barcol
 CIRCLE (ix1, iy), iradiusx1, molcol
 CIRCLE (ix2, iy), iradiusx2, molcol

 ilastx1 = ix1
 ilastx2 = ix2
 ilastrx1 = iradiusx1
 ilastrx2 = iradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------10-------------
 jangle = angle + 5.5
 jx1 = (center - (COS(jangle) * (length / 2)))
 jx2 = (center + (COS(jangle) * (length / 2)))
 ja1 = obs - (SIN(jangle) * (length))
 ja2 = obs + (SIN(jangle) * (length))

 jradiusx1 = (obs / ja1) * radius
 jradiusx2 = (obs / ja2) * radius
 LINE (jlastx1, jy)-(jlastx2, jy), 0
 CIRCLE (jlastx1, jy), jlastrx1, 0
 CIRCLE (jlastx2, jy), jlastrx2, 0

 LINE (jx1, jy)-(jx2, jy), barcol
 CIRCLE (jx1, jy), jradiusx1, molcol
 CIRCLE (jx2, jy), jradiusx2, molcol

 jlastx1 = jx1
 jlastx2 = jx2
 jlastrx1 = jradiusx1
 jlastrx2 = jradiusx2

IF STAT = 0 THEN FOR delay = 1 TO 500: NEXT delay

REM-----------11------------
 kangle = angle + 6
 kx1 = (center - (COS(kangle) * (length / 2)))
 kx2 = (center + (COS(kangle) * (length / 2)))
 ka1 = obs - (SIN(kangle) * (length))
 ka2 = obs + (SIN(kangle) * (length))

 kradiusx1 = (obs / ka1) * radius
 kradiusx2 = (obs / ka2) * radius
 LINE (klastx1, ky)-(klastx2, ky), 0
 CIRCLE (klastx1, ky), klastrx1, 0
 CIRCLE (klastx2, ky), klastrx2, 0

 LINE (kx1, ky)-(kx2, ky), barcol
 CIRCLE (kx1, ky), kradiusx1, molcol
 CIRCLE (kx2, ky), kradiusx2, molcol

 klastx1 = kx1
 klastx2 = kx2
 klastrx1 = kradiusx1
 klastrx2 = kradiusx2

IF STAT = 0 THEN STAT = 1: GOTO 10
IF scanned = 0 THEN GOTO 10
IF INKEY$ <> "" THEN LOCATE 22, 5: PRINT " Analysis Aborted ": END
interval = interval + .01
NEXT angle

