Squares

General FreeBASIC programming questions.
badidea
Posts: 1542
Joined: May 24, 2007 22:10
Location: The Netherlands

Re: Squares

Postby badidea » Oct 08, 2019 23:44

That is probably because FBIDE (that is a windows application right?) does not know which terminal program to open.
I use Geany on linux. In Geany I can specify the terminal to use.
In my case mate-terminal -e "/bin/sh %c" but I can set xterm as well.
Maybe some setting in Wine to specify the terminal?
dodicat
Posts: 5936
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: Squares

Postby dodicat » Oct 09, 2019 0:42

Hi Albert.
I rarely use Linux, and I don't have Wine, but you could try inserting the ./ in the fbide - view - settings - freebasic - run command
Something like
./ "<$file>" <$param>
It might open the terminal and run the executable, you never know!
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 09, 2019 1:17

@CoderJeff

if v1 = 0 then outputs+= "0"
if v1 = 1 then outputs+= "10"
if v1 = 2 then outputs+= "11"
if v1 = 3 then outputs+= "001"

Your code says 001 conflicts with 0 ??

It's not good compression anyways , only 39% after 40 loops.. Compresses 10,000 down to 6,200 after 40 loops.
After 150 loops , 10,000 only goes down to 3,800.

100,000 does better , after 150 loops it goes down to 8,400 ( 91% compression )
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 09, 2019 2:16

@Dodicat

I tried it and it didn't work.. tried ./ and .\ neither worked..

@badidea

I've got geany , but i don't like the IDE. With greany you have to compile the code before you run it , that's why the console will open..

With FBIDE , if you set "screen 0".. You have to compile it and then run the compiled code. in order for the console to open..
"Quick Run" won't open a screen 0 , console,,
dodicat
Posts: 5936
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: Squares

Postby dodicat » Oct 09, 2019 18:40

Albert.
Create a folder called bin in your home folder, not any deeper, but directly in your home folder.
This bin folder automatically has special attributes, any executable in it is on the system path.
pop your fb source code (.bas files) directly into this folder and use fbide as usual to run it/ quick run it.
It is worth a try.
Like yourself, I dislike ides where you have to save and compile every time you adjust your code.
badidea
Posts: 1542
Joined: May 24, 2007 22:10
Location: The Netherlands

Re: Squares

Postby badidea » Oct 09, 2019 19:39

That seems to be easy to fix in Geany. Change 'Execute' command to:
fbc -exx -w all "%f" && "./%e" (optinal: -exx -w all)
Or the build commands:
Image
Note: fbc32/64 for 32 or 64 bit executable in my case.

Edit: There is one problem. Is the source code contains an error, the error is displayed, but the previous executable is run. Pretty confident that is can be improved as well, just don't know yet how. That was easy, use '&&' instead of ';'.

One day, I'll write a wiki-page for Geany and FB, topics:
* Compile and run
* Context action / keyword help
* FBeauty code beautifier
* Keyboard shortcut actions
* Other usefull Geany settings
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 10, 2019 1:29

@badidea

I don't like the Geany IDE.

I prefer to use FBIDE , i like the code window being full screen... Where you can see all the ends of the lines , without scrolling....
FBIDE gives you a bigger code window , where you can see all the code with just a glance.

@Dodicat

I'll give it a try...
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 10, 2019 22:47

@Dodicat

I tried your \home\bin idea , it didn't work..
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 10, 2019 23:34

@Dodicat

I've done another compression idea... I need help with the decompression..

The "outs" string = "0" "10" "11" , so it easy to step through...
You can't have a "00" or "01" so if you run into a "00" then you know its "0" , "0" . If you run into a "01" then you know its a "0" plus a "10" or "11"

The problem I'm having is with the "which" string... "00" "01" "10" "11" , "100" "101"
How to tell when you have a "100" and "101" ??? ( 4 and 5 ) ??

Do you have any ideas ???

( Compresses 1,000,000 bytes down to 20,000 after 100 loops. )

I got the decompressor started... Need help finishing it....

Code: Select all


Declare Function      compress_loop( chrs as string ) as string
Declare Function decompress_loop( chrs as string ) as string

screen 19
'=====================================================================
'=====================================================================
'start program
'=====================================================================
'=====================================================================
dim as double time1 , time2 , time3 , time4
do
   
    randomize
   
    dim as string s = ""
    For n As Long = 1 To 8
        s+=chr(Int(Rnd*256))
    Next
   
    time1=timer
    'begin compress
        dim as string comp = s
            'do
            '    dim as longint chk = len(comp) - 1
            '    comp = compress_loop(comp)
            '    if len(comp) >= chk then exit do
            'loop
            for a as longint = 1 to 1 step 1
                comp = compress_loop(comp)
            next
    'end compress
    time2 = timer
   
    time3=timer
    'begin decompress
        dim as string final_out = comp
        for a as longint = 1 to 1 step 1
            final_out = decompress_loop(final_out)
        next
    'end decompress
    time4 = timer
   
   'sleep
   
    'cls
    'draw string( 0,10) , left(s,100)
    'draw string( 0,30) , left(final_out,100)
    print string(99,"=")
    print "inp = " ; (s)
    print string(99,"=")
    print "out = " ; (final_out)
    print
    print "compress time   = "; time2-time1
    print "decompress time = "; time4-time3
    print
   
    if s = final_out then print "Decompressed OK" else print "Decompression failed."
    print string(99,"=")
   
    sleep
   
loop until inkey = chr(27)

sleep
end
'===============================================================================
'===============================================================================
'compress
'===============================================================================
'===============================================================================
Function compress_loop( chrs as string ) as string
   
    print "c inp = " ; len(chrs) ' , chrs
   
    dim as string outs = ""
    dim as string zeros = string( 8 , "0" )
    dim as string n1
    for a as longint = 1 to len( chrs ) step 1
        n1 = zeros + bin( chrs[ a - 1 ] )
        outs+= right( n1 , 8 )
    next
   
    print "c bin = " ; len(outs)   , outs
   
    dim as string outs1 = ""
    dim as string which = ""
    dim as string v1
    for a as longint = 1 to len( outs ) step 4
       
        v1 = hex( val( "&B" + mid( outs , a , 4 ) ) )
       
        if v1 = "0"  or v1 = "1" or  v1 = "2"   then which+= "00"
        if v1 = "3"  or v1 = "4" or  v1 = "5"   then which+= "01"
        if v1 = "6"  or v1 = "7" or  v1 = "8"   then which+= "10"
        if v1 = "9"  or v1 = "A" or  v1 = "B"  then which+= "11"
        if v1 = "C" or v1 = "D" or  v1 = "E"  then which+= "100"
        if v1 = "F"                                            then which+= "101"
       
        if v1 = "0" then outs1+= "0"
        if v1 = "1" then outs1+= "10"
        if v1 = "2" then outs1+= "11"
       
        if v1 = "3" then outs1+= "0"
        if v1 = "4" then outs1+= "10"
        if v1 = "5" then outs1+= "11"
       
        if v1 = "6" then outs1+= "0"
        if v1 = "7" then outs1+= "10"
        if v1 = "8" then outs1+= "11"
       
        if v1 = "9" then outs1+= "0"
        if v1 = "A" then outs1+= "10"
        if v1 = "B" then outs1+= "11"

        if v1 = "C" then outs1+= "0"
        if v1 = "D" then outs1+= "10"
        if v1 = "E" then outs1+= "11"
       
        if v1 = "F" then outs1+= "0"
       
    next
   
    print "c out = " ; len( outs1 ) , outs1
    print "c whi = " ; len( which ) , which
    print
    print "c tot = "  ;  len(outs1) + len(which)  ' , which
    print
   
    dim as ubyte count1 = 0
    dim as string str1
    dim as ubyte dec1
    do
        str1 = str( len( outs1 ) / 8 )
        dec1 = instr( 1 , str1 , "." )
        if dec1 <> 0 then outs1+= "0" : count1+= 1
    loop until dec1 = 0

    dim as ubyte count2 = 0
    do
        str1 = str( len( which ) / 8 )
        dec1 = instr( 1 , str1 , "." )
        if dec1 <> 0 then which+= "0" : count2+= 1
    loop until dec1 = 0

    dim as string final = ""
    for a as longint = 1 to len( outs1 ) step 8
        final+= chr( val( "&B" + mid( outs1 , a , 8 ) ) )
    next
    final+= "END"
    for a as longint = 1 to len( which ) step 8
        final+= chr( val( "&B" + mid( which , a , 8 ) ) )
    next
   
    final = chr( count1 ) + chr( count2 ) + final
   
    print "c fin = " ; len(final)
   
    return final
   
end function
'===============================================================================
'============================================================================
Function decompress_loop( chrs as string ) as string
   
    dim as ubyte count1 = asc( left( chrs , 1 ) )
    chrs = mid( chrs , 2 )
    dim as ubyte count2 = asc( left( chrs , 1 ) )
    chrs = mid( chrs , 2 )
   
    dim as longint place = instr( 1 , chrs , "END" )
   
    dim as string ins1 = left( chrs , place - 1 )
    dim as string ins2 = mid( chrs , place + 3 )
   
    dim as string outs1 = ""
    dim as string zeros = string( 8 , "0" )
    dim as string n1
    for a as longint = 1 to len( ins1 ) step 1
        n1 = zeros + bin( ins1[ a - 1 ] )
        outs1+= right( n1 , 8 )
    next
    outs1 = left( outs1 , len( outs1 ) - count1 )
   
    dim as string which = ""
    for a as longint = 1 to len( ins2 ) step 1
        n1 = zeros + bin( ins2[ a - 1 ] )
        which+= right( n1 , 8 )
    next
    which = left( which , len( which ) - count2 )
   
    print
    print "d out = " ; len( outs1 ) , outs1
    print "d whi = " ; len( which ) , which
   
    return chrs

end function



!!~~edited~~!!
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 11, 2019 3:17

@Dodicat

It compresses without Zlib..

Here it is doing 1,000,000 bytes. ( takes a few minutes. Got to speed it up.. )

Compresses 1,000,000 bytes down to 440 bytes

Code: Select all


Declare Function      compress_loop( chrs as string ) as string
Declare Function decompress_loop( chrs as string ) as string

screen 19
'=====================================================================
'=====================================================================
'start program
'=====================================================================
'=====================================================================
dim as double time1 , time2 , time3 , time4
do
   
    randomize
   
    dim as string s = ""
    For n As Long = 1 To 1000000
        s+=chr(Int(Rnd*256))
    Next
   
    time1=timer
    'begin compress
        dim as string comp = s
            do
                dim as longint chk = len(comp) - 1
                comp = compress_loop(comp)
                if len(comp) >= chk then exit do
            loop
            'for a as longint = 1 to 1 step 1
            '    comp = compress_loop(comp)
           'next
    'end compress
    time2 = timer
   
    time3=timer
    'begin decompress
        dim as string final_out = comp
        for a as longint = 1 to 1 step 1
            final_out = decompress_loop(final_out)
        next
    'end decompress
    time4 = timer
   
   'sleep
   
    'cls
    'draw string( 0,10) , left(s,100)
    'draw string( 0,30) , left(final_out,100)
    print string(99,"=")
    'print "inp = " ; (s)
    print string(99,"=")
    'print "out = " ; (final_out)
    print
    print "compress time   = "; time2-time1
    print "decompress time = "; time4-time3
    print
   
    if s = final_out then print "Decompressed OK" else print "Decompression failed."
    print string(99,"=")
   
    sleep
   
loop until inkey = chr(27)

sleep
end
'===============================================================================
'===============================================================================
'compress
'===============================================================================
'===============================================================================
Function compress_loop( chrs as string ) as string
   
    'print "c inp = " ; len(chrs) ' , chrs
   
    dim as string outs = ""
    dim as string zeros = string( 8 , "0" )
    dim as string n1
    for a as longint = 1 to len( chrs ) step 1
        n1 = zeros + bin( chrs[ a - 1 ] )
        outs+= right( n1 , 8 )
    next
   
    'print "c bin = " ; len(outs)  ' , outs
   
    dim as string outs1 = ""
    dim as string which = ""
    dim as string v1
    for a as longint = 1 to len( outs ) step 4
       
        v1 = hex( val( "&B" + mid( outs , a , 4 ) ) )
       
        if v1 = "0"  or v1 = "1" or  v1 = "2"   then which+= "00"
        if v1 = "3"  or v1 = "4" or  v1 = "5"   then which+= "01"
        if v1 = "6"  or v1 = "7" or  v1 = "8"   then which+= "10"
        if v1 = "9"  or v1 = "A" or  v1 = "B"  then which+= "11"
        if v1 = "C" or v1 = "D" or  v1 = "E"  then which+= "100"
        if v1 = "F"                                            then which+= "101"
       
        if v1 = "0" then outs1+= "0"
        if v1 = "1" then outs1+= "10"
        if v1 = "2" then outs1+= "11"
       
        if v1 = "3" then outs1+= "0"
        if v1 = "4" then outs1+= "10"
        if v1 = "5" then outs1+= "11"
       
        if v1 = "6" then outs1+= "0"
        if v1 = "7" then outs1+= "10"
        if v1 = "8" then outs1+= "11"
       
        if v1 = "9" then outs1+= "0"
        if v1 = "A" then outs1+= "10"
        if v1 = "B" then outs1+= "11"

        if v1 = "C" then outs1+= "0"
        if v1 = "D" then outs1+= "10"
        if v1 = "E" then outs1+= "11"
       
        if v1 = "F" then outs1+= "0"
       
    next
   
    'print "c out = " ; len( outs1 )  ' , outs1
    'print "c whi = " ; len( which ) '  , which
    'print
    'print "c tot = "  ;  len(outs1) + len(which)  ' , which
    'print
   
    dim as ubyte count1 = 0
    dim as string str1
    dim as ubyte dec1
    do
        str1 = str( len( outs1 ) / 8 )
        dec1 = instr( 1 , str1 , "." )
        if dec1 <> 0 then outs1+= "0" : count1+= 1
    loop until dec1 = 0

    dim as ubyte count2 = 0
    do
        str1 = str( len( which ) / 8 )
        dec1 = instr( 1 , str1 , "." )
        if dec1 <> 0 then which+= "0" : count2+= 1
    loop until dec1 = 0

    dim as string final = ""
    for a as longint = 1 to len( outs1 ) step 8
        final+= chr( val( "&B" + mid( outs1 , a , 8 ) ) )
    next
    final+= "END"
    for a as longint = 1 to len( which ) step 8
        final+= chr( val( "&B" + mid( which , a , 8 ) ) )
    next
   
    final = chr( count1 ) + chr( count2 ) + final
   
    print "c fin = " ; len(final)
   
    return final
   
end function
'===============================================================================
'============================================================================
Function decompress_loop( chrs as string ) as string
   
    dim as ubyte count1 = asc( left( chrs , 1 ) )
    chrs = mid( chrs , 2 )
    dim as ubyte count2 = asc( left( chrs , 1 ) )
    chrs = mid( chrs , 2 )
   
    dim as longint place = instr( 1 , chrs , "END" )
   
    dim as string ins1 = left( chrs , place - 1 )
    dim as string ins2 = mid( chrs , place + 3 )
   
    dim as string outs1 = ""
    dim as string zeros = string( 8 , "0" )
    dim as string n1
    for a as longint = 1 to len( ins1 ) step 1
        n1 = zeros + bin( ins1[ a - 1 ] )
        outs1+= right( n1 , 8 )
    next
    outs1 = left( outs1 , len( outs1 ) - count1 )
   
    dim as string which = ""
    for a as longint = 1 to len( ins2 ) step 1
        n1 = zeros + bin( ins2[ a - 1 ] )
        which+= right( n1 , 8 )
    next
    which = left( which , len( which ) - count2 )
   
    'print
    'print "d out = " ; len( outs1 ) ' , outs1
    'print "d whi = " ; len( which ) ' , which
   
    return chrs

end function

dodicat
Posts: 5936
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: Squares

Postby dodicat » Oct 11, 2019 12:15

Regarding the Linux/fbide Albert, short of installing wine and trying out fbide for myself, I can't think of anything else, and I am not really a Linux user anyway these days.
When I do use Linux (mainly to test run code), I use gedit set for language vb.net.
It at least gives keyword highlighting and line numbers.
I just compile and run via the terminal, using the up/down keys to retrieve shell commands (Like windows --doskey).
If I remember correctly the kwrite editor has the same features, but I don't have it installed.
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 11, 2019 15:39

@Dodicat

For the above compression. Maybe ; i could put in some counters , to tell how many "100" ' s and "101" ' s were looking for??

If you can't help with the decompression just let me know...

Here it is with the counters....

Code: Select all


Declare Function      compress_loop( chrs as string ) as string
Declare Function decompress_loop( chrs as string ) as string

screen 19
'=====================================================================
'=====================================================================
'start program
'=====================================================================
'=====================================================================
dim as double time1 , time2 , time3 , time4
do
   
    randomize
   
    dim as string s = ""
    For n As Long = 1 To 8
        s+=chr(Int(Rnd*256))
    Next
   
    time1=timer
    'begin compress
        dim as string comp = s
            'do
            '    dim as longint chk = len(comp) - 1
            '    comp = compress_loop(comp)
            '    if len(comp) >= chk then exit do
            'loop
            for a as longint = 1 to 1 step 1
                comp = compress_loop(comp)
            next
    'end compress
    time2 = timer
   
    time3=timer
    'begin decompress
        dim as string final_out = comp
        for a as longint = 1 to 1 step 1
            final_out = decompress_loop(final_out)
        next
    'end decompress
    time4 = timer
   
   'sleep
   
    'cls
    'draw string( 0,10) , left(s,100)
    'draw string( 0,30) , left(final_out,100)
    print string(99,"=")
    print "inp = " ; (s)
    print string(99,"=")
    print "out = " ; (final_out)
    print
    print "compress time   = "; time2-time1
    print "decompress time = "; time4-time3
    print
   
    if s = final_out then print "Decompressed OK" else print "Decompression failed."
    print string(99,"=")
   
    sleep
   
loop until inkey = chr(27)

sleep
end
'===============================================================================
'===============================================================================
'compress
'===============================================================================
'===============================================================================
Function compress_loop( chrs as string ) as string
   
    print "c inp = " ; len(chrs) ' , chrs
   
    dim as string outs = ""
    dim as string zeros = string( 8 , "0" )
    dim as string n1
    for a as longint = 1 to len( chrs ) step 1
        n1 = zeros + bin( chrs[ a - 1 ] )
        outs+= right( n1 , 8 )
    next
   
    print "c bin = " ; len(outs)   , outs
   
    dim as string outs1 = ""
    dim as string which = ""
    dim as string v1
    dim as longint _4 = 0
    dim as longint _5 = 0
    for a as longint = 1 to len( outs ) step 4
       
        v1 = hex( val( "&B" + mid( outs , a , 4 ) ) )
       
        if v1 = "0"  or v1 = "1" or  v1 = "2"   then which+= "00"
        if v1 = "3"  or v1 = "4" or  v1 = "5"   then which+= "01"
        if v1 = "6"  or v1 = "7" or  v1 = "8"   then which+= "10"
        if v1 = "9"  or v1 = "A" or  v1 = "B"  then which+= "11"
        if v1 = "C" or v1 = "D" or  v1 = "E"  then which+= "100" : _4+= 1
        if v1 = "F"                                            then which+= "101" : _5+= 1
       
        if v1 = "0" then outs1+= "0"
        if v1 = "1" then outs1+= "10"
        if v1 = "2" then outs1+= "11"
       
        if v1 = "3" then outs1+= "0"
        if v1 = "4" then outs1+= "10"
        if v1 = "5" then outs1+= "11"
       
        if v1 = "6" then outs1+= "0"
        if v1 = "7" then outs1+= "10"
        if v1 = "8" then outs1+= "11"
       
        if v1 = "9" then outs1+= "0"
        if v1 = "A" then outs1+= "10"
        if v1 = "B" then outs1+= "11"

        if v1 = "C" then outs1+= "0"
        if v1 = "D" then outs1+= "10"
        if v1 = "E" then outs1+= "11"
       
        if v1 = "F" then outs1+= "0"
       
    next
   
    print
    print "c out = " ; len( outs1 ) , outs1
    print "c whi = " ; len( which ) , which
    print
    print "c tot = "  ;  len(outs1) + len(which)  ' , which
    print
    print "c 100 = " ; _4
    print "c 101 = " ; _5
    print
   
    dim as ubyte count1 = 0
    dim as string str1
    dim as ubyte dec1
    do
        str1 = str( len( outs1 ) / 8 )
        dec1 = instr( 1 , str1 , "." )
        if dec1 <> 0 then outs1+= "0" : count1+= 1
    loop until dec1 = 0

    dim as ubyte count2 = 0
    do
        str1 = str( len( which ) / 8 )
        dec1 = instr( 1 , str1 , "." )
        if dec1 <> 0 then which+= "0" : count2+= 1
    loop until dec1 = 0

    dim as string final = ""
    for a as longint = 1 to len( outs1 ) step 8
        final+= chr( val( "&B" + mid( outs1 , a , 8 ) ) )
    next
    final+= "END"
    for a as longint = 1 to len( which ) step 8
        final+= chr( val( "&B" + mid( which , a , 8 ) ) )
    next
   
    final = chr( count1 ) + chr( count2 ) + final
   
    print "c fin = " ; len(final)
   
    return final
   
end function
'===============================================================================
'============================================================================
Function decompress_loop( chrs as string ) as string
   
    dim as ubyte count1 = asc( left( chrs , 1 ) )
    chrs = mid( chrs , 2 )
    dim as ubyte count2 = asc( left( chrs , 1 ) )
    chrs = mid( chrs , 2 )
   
    dim as longint place = instr( 1 , chrs , "END" )
   
    dim as string ins1 = left( chrs , place - 1 )
    dim as string ins2 = mid( chrs , place + 3 )
   
    dim as string outs1 = ""
    dim as string zeros = string( 8 , "0" )
    dim as string n1
    for a as longint = 1 to len( ins1 ) step 1
        n1 = zeros + bin( ins1[ a - 1 ] )
        outs1+= right( n1 , 8 )
    next
    outs1 = left( outs1 , len( outs1 ) - count1 )
   
    dim as string which = ""
    for a as longint = 1 to len( ins2 ) step 1
        n1 = zeros + bin( ins2[ a - 1 ] )
        which+= right( n1 , 8 )
    next
    which = left( which , len( which ) - count2 )
   
    print
    print "d out = " ; len( outs1 ) , outs1
    print "d whi = " ; len( which ) , which
   
    return chrs

end function

albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 11, 2019 17:10

@Dodicat

I got it figured out!!! Stepping by 24 bits , instead of 4 bits , works.. ( 6 hex digits instead of 1 hex digit )

I needed a multiple of 3 , to equal it out...

24 / 3 equals an even number of 3's and 8's.... But now , it requires Zlib in order to compress..

I'll wait , till i got the de-compressor working , before i post it..
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 11, 2019 17:44

@Dodicat

for a as longint = 1 to len( which ) step 8
final+= mkl( valulng( "&H" + mid( which , a , 8 ) ) )
next

I had val( "&H" , for some reason val() won't work on 32 bits , you need valulng...

With valulng it doesn't compress..
I thought you only needed valulng for numbers greater than 32 bits.

So it's back to searching for the "100"'s and "101"'s
albert
Posts: 4999
Joined: Sep 28, 2006 2:41
Location: California, USA

Re: Squares

Postby albert » Oct 11, 2019 22:13

With your eyes , and brain , you can tell where the all the various bits are...

But the computer program is blind.

I've got to figure out , how to make the program , process like a brain.. To find the various bit sequences.

Return to “General”

Who is online

Users browsing this forum: Majestic-12 [Bot] and 21 guests