Thanks Albert.Sadly it will probably all happen again so some other culture in some other place.Here is an update of my perpetual machine.Red - north pole, green - south pole, white stuff - magnetic insulator.It is boring to watch because perpetual motion will probably be boring when it is invented (in squares hopefully).

dim shared as long cx,cycx=400cy=300#define map(a,b,x,c,d) ((d)-(c))*((x)-(a))/((b)-(a))+(c)Type Point As single x,y 'need floats for smoothness when moving or rotating points Declare sub rotate(As Point,As Single,As Single)' As PointEnd Type

sub point.rotate(pivot As Point,a As Single,d As Single)' As Point dim as point t=type(d*(Cos(a*.0174533)*(x-pivot.x)-Sin(a*.0174533)*(y-pivot.y)) +pivot.x,_ d*(Sin(a*.0174533)*(x-pivot.x)+Cos(a*.0174533)*(y-pivot.y)) +pivot.y) this=tEnd sub

Type Rectangle As Ushort wide As Ushort high As Single aspect As Byte pflag 'fill or not As Ulong clr 'colour im as any ptr=0 Declare Constructor(As Point=type(0,0),As Ushort=0,As Ushort=0,As Single =0,As Ulong=0,As Byte=0,as any ptr=0) As Point v(1 To 4) 'extra points for vertices/centroid As Point centroid Declare Sub Draw()End Type

Constructor rectangle(c As Point,w As Ushort,h As Ushort,a As Single,col As Ulong,pf As Byte,i as any ptr)v(1)=type(c.x-w/2,c.y-h/2)v(2)=type(c.x-w/2,c.y+h/2)v(3)=type(c.x+w/2,c.y+h/2)v(4)=type(c.x+w/2,c.y-h/2)For n As Long=1 To 4 v(n).rotate(c,a,1)Nextpflag=pfclr=colaspect=awide=whigh=hcentroid=cim=iEnd Constructor

Sub fill(a() As Point,c As Ulong,min As Long,max As Long,im as any ptr=0) #define dist(x1,y1,x2,y2) sqr( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) 'translation of a c snippet static As Long i,j,k,dy,dx, x,y,temp Static As Long NewX (1 To Ubound(a)) Static As Single Grad(1 To Ubound(a)) For i=1 To Ubound(a) - 1 dy=a(i+1).y-a(i).y dx=a(i+1).x-a(i).x If(dy=0) Then Grad(i)=1 If(dx=0) Then Grad(i)=0 If ((dy <> 0) And (dx <> 0)) Then Grad(i) = dx/dy End If Next i For y=min To max k = 1 For i=1 To Ubound(a) - 1 If( ((a(i).y<=y) Andalso (a(i+1).y>y)) Or ((a(i).y>y) _ Andalso (a(i+1).y<=y))) Then NewX(k)= Int(a(i).x+ Grad(i)*(y-a(i).y)) k +=1 End If Next i For j = 1 To k-2 For i = 1 To k-2 If NewX(i) > NewX(i+1) Then temp = NewX(i) NewX(i) = NewX(i+1) NewX(i+1) = temp End If Next i Next j

For i = 1 To k - 2 Step 2 Line im,(NewX(i),y)-(NewX(i+1)+1,y),c Next iNext yEnd Sub

Sub rectangle.draw() Static As Single miny=1e6,maxy=-1e6 Static As Point V1(1 To Ubound(v)+1) For n as long =1 To Ubound(v) If pflag=0 Then If n<Ubound(v) Then Line(v(n).x,v(n).y)-(v(n+1).x,v(n+1).y),clr If miny>v(n).y Then miny=v(n).y If maxy<v(n).y Then maxy=v(n).y V1(n)=v(n) Next If pflag=0 Then Line -(v(1).x,v(1).y),clr v1(Ubound(v1))=v(Lbound(v)) If pflag Then fill(v1(),clr,miny,maxy,im)End Sub

function DrawBox(x as long,y as long,w as long,h as long, _ angle as single,length as long,col as ulong,f as byte=1,i as any ptr=0) as point dim as rectangle r dim as single c=-angle angle=angle*.0174532925199433 '=4*atn(1)/180 var x2=x+length*cos(angle),y2=y-length*sin(angle) r=rectangle(type<point>(x2,y2),w,h,c,col,f,i) r.draw return type(x2,y2)end function

screen 19,32dim as any ptr i=imagecreate(800,600,0) for n as long=0 to 360 step 15 DrawBox(400,300,50,21,n+.5,100+100+5,rgb(200,200,200),1,i) DrawBox(400,300,50,20,n,150+108,rgb(200,0,0),1,i) DrawBox(400,300,50,20,n,100+108,rgb(0,200,0),1,i) nextdim as single adim as long fpsdo a+=.2 if a>360 then a=0 screenlock cls put(0,0),i,pset draw string(10,10),"Fps " & fps for n as long=0 to 360 step 20DrawBox(400,300,50,21,a+n-.5,152,rgb(200,200,200),1)DrawBox(400,300,50,20,a+n,150,rgb(200,0,0))DrawBox(400,300,50,20,a+n,100,rgb(0,200,0))nextscreenunlocksleep regulate(160,fps),1loop until len(inkey)sleep

I don't know what Hitler did with the infants and toddlers under the reading age?? But they rounded up whole households and charged them with espionage , if they possessed any of the books..Some 7,000,000 Jews were executed from 1939 to 1948..At 4 people per household , that's a little more than 1,500,000 households in Germany , Austria , Poland , that were rounded up..

Here's the bin mul with strings...It only works for up to 64 bits..Now , to make it step by more than 1 digit , at a time..

'swap numbers so that bigger number is number1 and smaller is number2 if len(number2) > len(number1) then swap number1,number2 if len(number1) = len(number2) then if val(left(number2,1)) > val(left(number1,1)) then swap number1,number2 end if

'begin looping thru strings multiplying do 'set total to zero total = 0 'we are going to be incrementing thru number2 while decrementing thru number1 'working in opposite directions from start1 to stop1 and start2 to stop2 'inc1 works from right to left in the top number1 string 'inc2 works from start2 to stop 2, in the bottom number2 string, decrementing each loop. inc1 = start1 inc2 = start2 do total += *inc1 * *inc2 inc1-= 1 inc2+= 1 loop until inc2 = stop2+1

'each loop we need to decrement stop1 'if stop1 goes negative we reset it to zero and decrement stop2 stop1 -= 1 if stop1 < chk_1 then stop1 += 1 stop2 -=1 if stop2 < chk_2 then stop2+= 1 end if 'each loop we decrement start2 to the left start2 -= 1 'if start2 goes negative we reset it to zero and decrement start1 'start1 is the rightmost digit of number1 we need to multiply if start2 < chk_2 then start2 += 1 start1 -= 1 if start1 < chk_1 then start1+=1 end if

loop until outplace = cptr(ulongint ptr,strptr(answer))+1

'put in the carry at the end if carry > 0 then *outplace = carry else *outplace = 0

@albert,I tried to find a way to reach out to you privately regarding this post, but you don't have a publicly accessible contact. I would have preferred to contact you privately, but I don't have the same access to user info that full Admins have so was unable.

You understand that the above linked post has no purpose here (as you marked it off-topic), and I also think you can understand how it is in-appropriate for this forum. I would like to request that you edit the post to remove the content. If you do not, I can and will do it for you, but would prefer not to.

I would like to request that you keep this kind of post off of the forum. I understand that we are pretty easy going when it comes to off-topic stuff, but this is not the first time in this thread that you have gone off-topic in this particular direction.

I don't want to discourage you from posting here or anywhere else on the forum, but please keep in mind that the purpose of this forum is to discuss the freeBASIC programming language.

'swap numbers so that bigger number is number1 and smaller is number2 if len(number2) > len(number1) then swap number1,number2 if len(number1) = len(number2) then if val(left(number2,1)) > val(left(number1,1)) then swap number1,number2 end if

'begin looping thru strings multiplying do 'set total to zero total = 0 'we are going to be incrementing thru number2 while decrementing thru number1 'working in opposite directions from start1 to stop1 and start2 to stop2 'inc1 works from right to left in the top number1 string 'inc2 works from start2 to stop 2, in the bottom number2 string, decrementing each loop. inc1 = start1 inc2 = start2 do total += *inc1 * *inc2 inc1-= 1 inc2+= 1 loop until inc2 = stop2+1

'each loop we need to decrement stop1 'if stop1 goes negative we reset it to zero and decrement stop2 stop1 -= 1 if stop1 < chk_1 then stop1 += 1 stop2 -=1 if stop2 < chk_2 then stop2+= 1 end if 'each loop we decrement start2 to the left start2 -= 1 'if start2 goes negative we reset it to zero and decrement start1 'start1 is the rightmost digit of number1 we need to multiply if start2 < chk_2 then start2 += 1 start1 -= 1 if start1 < chk_1 then start1+=1 end if

loop until outplace = cptr(ulongint ptr,strptr(answer))+1

'put in the carry at the end if carry > 0 then *outplace = carry else *outplace = 0

'swap numbers so that bigger number is number1 and smaller is number2 if len(number2) > len(number1) then swap number1,number2 if len(number1) = len(number2) then if val(left(number2,1)) > val(left(number1,1)) then swap number1,number2 end if

'begin looping thru strings multiplying do 'set total to zero total = 0 'we are going to be incrementing thru number2 while decrementing thru number1 'working in opposite directions from start1 to stop1 and start2 to stop2 'inc1 works from right to left in the top number1 string 'inc2 works from start2 to stop 2, in the bottom number2 string, decrementing each loop. inc1 = start1 inc2 = start2 do total += *inc1 * *inc2 inc1-= 1 inc2+= 1 loop until inc2 = stop2+1

'each loop we need to decrement stop1 'if stop1 goes negative we reset it to zero and decrement stop2 stop1 -= 1 if stop1 < chk_1 then stop1 += 1 stop2 -=1 if stop2 < chk_2 then stop2+= 1 end if 'each loop we decrement start2 to the left start2 -= 1 'if start2 goes negative we reset it to zero and decrement start1 'start1 is the rightmost digit of number1 we need to multiply if start2 < chk_2 then start2 += 1 start1 -= 1 if start1 < chk_1 then start1+=1 end if

loop until outplace = cptr(ulongint ptr,strptr(answer))+1

'put in the carry at the end if carry > 0 then *outplace = carry else *outplace = 0