Welcome, Guest
You have to register before you can post on our site.

Username/Email:
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 490
» Latest member: Dr.Creek
» Forum threads: 2,823
» Forum posts: 26,475

Full Statistics

Latest Threads
DRAW to generate the poin...
Forum: QBJS, BAM, and Other BASICs
Last Post: CharlieJV
53 minutes ago
» Replies: 0
» Views: 6
Button rack or hotkey fun...
Forum: Utilities
Last Post: Petr
1 hour ago
» Replies: 4
» Views: 323
Next small EQ step - EQ D...
Forum: Petr
Last Post: Petr
2 hours ago
» Replies: 9
» Views: 434
What do you guys like to ...
Forum: General Discussion
Last Post: OldMoses
4 hours ago
» Replies: 32
» Views: 896
Happy Birthday Terry Ritc...
Forum: General Discussion
Last Post: madscijr
Today, 07:29 AM
» Replies: 21
» Views: 806
looking for project manag...
Forum: General Discussion
Last Post: TempodiBasic
Today, 02:04 AM
» Replies: 0
» Views: 24
Audio Spectrum Analyser
Forum: Programs
Last Post: SierraKen
Today, 01:36 AM
» Replies: 4
» Views: 89
Popup Calendar
Forum: Works in Progress
Last Post: SquirrelMonkey
Today, 01:11 AM
» Replies: 1
» Views: 36
Reading my brainwaves in ...
Forum: Programs
Last Post: Pete
Yesterday, 08:58 PM
» Replies: 3
» Views: 84
Rock Paper Scissor in TCP...
Forum: Games
Last Post: TempodiBasic
Yesterday, 08:05 PM
» Replies: 1
» Views: 24

 
  _SCREENMOVE _MIDDLE and resolutions
Posted by: NakedApe - 11-01-2023, 10:39 PM - Forum: Help Me! - Replies (14)

Howdy. I want a program to run at 1600x900 on desktops and 1280x720 or 1280x800 on laptops. That seems straightforward enough, but this sub - at the big resolution so far - doesn't actually center the program window on the desktop. Why is _SCREENMOVE _MIDDLE opening this window far to the right and off-screen? Also any suggestions for improving this resolution changing sub will be gladly and humbly accepted. Thanks! Ted
' ------------------------------------------------------------------------------
SUB resolution () '                     first attempt at resolution changer
    '                                             I want 1600x900 on larger screens else 1280x720 or 1280x800 on smaller
    DIM ratio AS SINGLE
  
    IF _DESKTOPWIDTH > 1750 THEN SWIDTH = 1600 ELSE SWIDTH = 1280
    ratio = _DESKTOPWIDTH / _DESKTOPHEIGHT

    IF ratio = 1.6 THEN '               8:5 aspect ratio - 13" macBook
        SHEIGHT = SWIDTH / ratio
    ELSE SHEIGHT = SWIDTH / 1.777 '     16:9 aspect ratio
    END IF

    CLS
    PRINT "Screen Width is"; SWIDTH
    PRINT "Screen Height is"; SHEIGHT
    PRINT "Aspect Ratio is"; ratio;
    _DELAY 3

    SCREEN _NEWIMAGE(SWIDTH, SHEIGHT, 32)

    IF SWIDTH = 1280 THEN '                     laptop mode in fullscreen
        _FULLSCREEN , _SMOOTH
        IF _FULLSCREEN = 0 THEN '               on fullscreen error
            BEEP: CLS
            _FULLSCREEN _OFF
            PRINT "Fullscreen failed. Going native. Press a key."
            SLEEP
            _SCREENMOVE _MIDDLE
        END IF
    END IF

    IF SWIDTH = 1600 THEN _SCREENMOVE _MIDDLE '        I put this here after the SCREEN statement, but it still doesn't center the program window

    CenterX = SWIDTH / 2 '                define screen center points
    CenterY = SHEIGHT / 2 '
END SUB
' ----------------------------------------------------------------------

Print this item

  It might be useful for something
Posted by: MasterGy - 11-01-2023, 10:14 AM - Forum: Programs - Replies (6)

Hello !

A 3D game is being made. For this, it was necessary to write some subprograms.

It can be useful if you want to use it for something.

The program checks whether two segments intersect.



Code: (Select All)

Screen _NewImage(800, 600, 32)

Do
    Cls

    x1 = 800 * Rnd
    y1 = 600 * Rnd

    x2 = 800 * Rnd
    y2 = 600 * Rnd

    x3 = 800 * Rnd
    y3 = 600 * Rnd

    x4 = 800 * Rnd
    y4 = 600 * Rnd

    Color _RGB32(255, 255, 255)
    Locate 1, 1: Print "SPACE to next"


    If IsIntersection(x1, y1, x2, y2, x3, y3, x4, y4) Then
        Color _RGB32(255, 50, 50)
        Locate 3, 10: Print "Intersect !"
    End If



    Line (x1, y1)-(x2, y2)
    Line (x3, y3)-(x4, y4)


    Do: Loop Until InKey$ = " "
Loop


Function IsIntersection (X1, Y1, X2, Y2, X3, Y3, X4, Y4)
    Denominator = (Y4 - Y3) * (X2 - X1) - (X4 - X3) * (Y2 - Y1)
    If Denominator = 0 Then
        IsIntersection = 0
    Else
        Ua = ((X4 - X3) * (Y1 - Y3) - (Y4 - Y3) * (X1 - X3)) / Denominator
        Ub = ((X2 - X1) * (Y1 - Y3) - (Y2 - Y1) * (X1 - X3)) / Denominator
        If Ua >= 0 And Ua <= 1 And Ub >= 0 And Ub <= 1 Then IsIntersection = 1 Else IsIntersection = 0
    End If
End Function





Creates a surface from arbitrary points arranged in a plane. First it forms sections, and then triangles from the sections.
In this code there is a function 'PointInTriangle' which returns TRUE if a point XY is inside a triangle bounded by points X1Y1X2Y2X3Y3.

Code: (Select All)

Randomize Timer
mon = _NewImage(1000, 400, 32)
Screen mon
marg = 50

pontok = 10 'how many points
Dim p(pontok - 1, 2)



For t = 0 To pontok - 1
    p(t, 0) = marg + (_Width - marg * 2) * Rnd
    p(t, 1) = marg + (_Height - marg * 2) * Rnd
    Circle (p(t, 0), p(t, 1)), 7
Next t
Locate 1, 1: Print "points:"; pontok, "Press SPACE to next"


Do: Loop Until InKey$ = " "
Cls
Dim sz(99999, 3)

Do: changing = 0
    For t1 = 0 To pontok - 1


        For t = 0 To pontok - 1: p(t, 2) = 1: Next t
        qq = 0: cdis = 1800 ^ 2
        Do: kovi = 0

            find = -1: mindis = 9999999
            For t = 0 To pontok - 1: If t = t1 Or p(t, 2) = 0 Then _Continue
                disx = p(t, 0) - p(t1, 0): If disx > cdis Then _Continue
                disy = p(t, 1) - p(t1, 1): If disy > cdis Then _Continue
                dis = (disx * disx + disy * disy): If dis > cdis Then _Continue
                If dis < mindis Then mindis = dis: find = t
            Next t


            If find <> -1 Then
                p(find, 2) = 0

                If szc > 0 Then
                    For asz = 0 To szc - 1
                        If (sz(asz, 0) = find And sz(asz, 1) = t1) Or (sz(asz, 0) = t1 And sz(asz, 1) = find) Then kovi = 1: Exit For
                    Next asz


                    If kovi = 0 Then
                        For asz = 0 To szc - 1
                            If (t1 = sz(asz, 0) Or t1 = sz(asz, 1)) = 0 And (find = sz(asz, 0) Or find = sz(asz, 1)) = 0 Then
                                If IsIntersection(p(t1, 0), p(t1, 1), p(find, 0), p(find, 1), p(sz(asz, 0), 0), p(sz(asz, 0), 1), p(sz(asz, 1), 0), p(sz(asz, 1), 1)) Then kovi = 1: Exit For
                            End If
                        Next asz
                    End If
                End If
                If kovi = 0 Then
                    sz(szc, 0) = t1: sz(szc, 1) = find: changing = 1
                    Line (p(sz(szc, 0), 0), p(sz(szc, 0), 1))-(p(sz(szc, 1), 0), p(sz(szc, 1), 1))
                    szc = szc + 1
                    Locate 1, 1: Print "szakaszok:"; szc
                End If
            Else kovi = 0
            End If

        Loop While kovi

    Next t1

Loop While changing
Locate 2, 1: Print "Press SPACE to next"
Do: Loop Until InKey$ = " "


'make triangles
Dim tri(9999, 3)
For s1 = 0 To szc - 1: v(0) = sz(s1, 0): v(1) = sz(s1, 1)
    For s2 = 0 To szc - 1: v(2) = sz(s2, 0): v(3) = sz(s2, 1)
        For s3 = 0 To szc - 1: v(4) = sz(s3, 0): v(5) = sz(s3, 1)
            For t = 0 To 5: ind(t, 1) = -1: Next t: ic = 0: For t1 = 0 To 5: n = 0: For t2 = 0 To 5
                If ind(t2, 0) = v(t1) And ind(t2, 1) <> -1 Then ind(t2, 1) = ind(t2, 1) + 1: n = 1
                Next t2: If n = 0 Then ind(ic, 0) = v(t1): ind(ic, 1) = 1: ic = ic + 1
            Next t1

            If ic = 3 And ind(0, 1) = 2 And ind(1, 1) = 2 And ind(2, 1) = 2 Then
                sort ind(0, 0), ind(1, 0), ind(2, 0)
                ok = 1
                For t = 0 To tr_c - 1
                    If ind(0, 0) = tri(t, 0) And ind(1, 0) = tri(t, 1) And ind(2, 0) = tri(t, 2) Then ok = 0
                Next t

                If ok Then
                    For t = 0 To pontok - 1
                        If t = ind(0, 0) Or t = ind(1, 0) Or t = ind(2, 0) Then _Continue
                        '                        If Abs(p(t, 0) - p(ind(0, 0), 0)) > n Then _Continue
                        '                      If Abs(p(t, 0) - p(ind(0, 0), 0)) > n Then _Continue



                        If PointInTriangle(p(t, 0), p(t, 1), p(ind(0, 0), 0), p(ind(0, 0), 1), p(ind(1, 0), 0), p(ind(1, 0), 1), p(ind(2, 0), 0), p(ind(2, 0), 1)) Then ok = 0: Exit For
                    Next t
                End If

                If ok Then tri(tr_c, 0) = ind(0, 0): tri(tr_c, 1) = ind(1, 0): tri(tr_c, 2) = ind(2, 0): tr_c = tr_c + 1
            End If

Next s3, s2, s1
Cls
Print "triangles:"; tr_c


'    If InKey$ = " " Then q = (q + 1) Mod tr_c
For t = 0 To tr_c - 1
    Color _RGB32(255, 255, 255)
    '        If q = t Then Color _RGB32(255 * Rnd, 255 * Rnd, 255 * Rnd)

    'Print tri(t, 0), tri(t, 1), tri(t, 2)

    Line (p(tri(t, 0), 0), p(tri(t, 0), 1))-(p(tri(t, 1), 0), p(tri(t, 1), 1))
    Line (p(tri(t, 0), 0), p(tri(t, 0), 1))-(p(tri(t, 2), 0), p(tri(t, 2), 1))
    Line (p(tri(t, 2), 0), p(tri(t, 2), 1))-(p(tri(t, 1), 0), p(tri(t, 1), 1))


    x = (p(tri(t, 0), 0) + p(tri(t, 1), 0) + p(tri(t, 2), 0)) / 3
    y = (p(tri(t, 0), 1) + p(tri(t, 1), 1) + p(tri(t, 2), 1)) / 3
    Color _RGB32(255 * Rnd, 255 * Rnd, 255 * Rnd)
    Paint (x, y), , _RGB32(255, 255, 255)
    'Circle (x, y), 20 ', _RGB32(255, 255, 255)
Next t








Function IsIntersection (X1, Y1, X2, Y2, X3, Y3, X4, Y4)
    Denominator = (Y4 - Y3) * (X2 - X1) - (X4 - X3) * (Y2 - Y1)
    If Denominator = 0 Then
        IsIntersection = 0
    Else
        Ua = ((X4 - X3) * (Y1 - Y3) - (Y4 - Y3) * (X1 - X3)) / Denominator
        Ub = ((X2 - X1) * (Y1 - Y3) - (Y2 - Y1) * (X1 - X3)) / Denominator
        IsIntersection = Ua >= 0 And Ua <= 1 And Ub >= 0 And Ub <= 1
    End If
End Function

Function PointInTriangle (X, Y, X1, Y1, X2, Y2, X3, Y3)
    D1 = (X - X2) * (Y1 - Y2) - (X1 - X2) * (Y - Y2)
    D2 = (X - X3) * (Y2 - Y3) - (X2 - X3) * (Y - Y3)
    D3 = (X - X1) * (Y3 - Y1) - (X3 - X1) * (Y - Y1)
    PointInTriangle = (D1 > 0 And D2 > 0 And D3 > 0) Or (D1 < 0 And D2 < 0 And D3 < 0)
End Function

Sub sort (a, b, c)
    If a > c Then Swap a, c
    If b > c Then Swap b, c
    If a > b Then Swap a, b
End Sub

Print this item

  Dia de la Muertos
Posted by: James D Jarvis - 10-31-2023, 06:25 PM - Forum: Programs - Replies (3)

Code: (Select All)
'Dia de los Muertos
'adapted from a  conversion by Paul Dunn  of an original by Bazzargh
'$dynamic
Dim S(0), C(0)
Dim klr As _Unsigned Long
Screen _NewImage(800, 600, 32)
Window (-852, -600)-(852, 416)
Do
    klr = _RGB32(255, 0, 0)
    Cls
    k = 360
    ReDim S(k + 1), C(k + 1)
    kv = 220 + r(35)
    For i = 0 To k
        t = i * 2 * _Pi / k
        S(i) = Sin(t)
        C(i) = Cos(t)
        circleBF 0, -i / 2, k * .8, _RGB32(kv, kv, kv)
    Next i
    circleBF 0, 0, k, _RGB32(kv, kv, kv)
    circleBF 120, -60, 80, _RGB32(1, 1, 1)
    circleBF -120, -60, 80, _RGB32(1, 1, 1)


    u = 120: v = -60: d = 2: n = 7: a = 70
    For j = 1 To r(30) + 10 '40

        For t = 0 To k * 2
            z = a * C(((t * n) / d) Mod k)
            x = u + z * C(t Mod k)
            y = v + z * S(t Mod k)
            e = x * x
            rr = Sqr(e + y * y)
            f = y + k
            g = Sqr(e + f * f)
            l = y + 60
            i = x - 120
            h = Sqr(e + f * f)
            If (g < 220 Or rr < k) And (rr <= 380 Or rr <= k) And (rr <= 360 Or rr > 480 Or Abs(x) >= 160 Or Abs(x Mod 32) <= 4 Or rr Mod 48 <= 4) And (j <= 1 Or h >= 90) And (y < -300 Or y >= -150 Or -x * 2 - y >= 180) Then
                circleBF x, y, 2, klr
                circleBF -x, y, 2, klr
            End If
        Next t
        d = r(3): n = r(5) + 2: a = r(80) + 50: u = r(k): v = r(940) - 520
        kv = r(121)
        klr = _RGB32(kv, kv, kv)
    Next j
    Do
        _Limit 60
        kk$ = InKey$
    Loop Until kk$ <> ""
Loop Until kk$ = Chr$(27)




Function r (i)
    r = Int(1 + Rnd * i)
End Function
Sub circleBF (cx As Long, cy As Long, rad As Long, klr As _Unsigned Long)
    rsqrd = rad * rad
    y = -rad
    While y <= rad
        x = Sqr(rsqrd - y * y)
        Line (cx - x, cy + y)-(cx + x, cy + y), klr, BF
        y = y + 1
    Wend
End Sub

Print this item

  Ternary operator
Posted by: Kernelpanic - 10-30-2023, 09:57 PM - Forum: General Discussion - Replies (8)

Can one also integrate the declaration of a library into a function?
The reason for the question is that I wrote a small program that allows one to use the tenary operator from C. If you could put the whole thing into a function, it might be useful for Basic. Maybe.  Huh

The Basic-Program:

Code: (Select All)

'Aufruf des tenaeren Operators in C - 30. Okt. 2023

Option _Explicit

'In QB64 mit "Declare Library" wie angegeben
Declare Library "D:\Lab\QuickBasic64\Extern-nicht-Basic\C-Aufruf\tenaerOp"
  Function tenaerOp& (ByVal N As Long, Byval X As Long)
End Declare

Dim As Long N, X

X = 77

Locate 3, 3
Input "Zahl: ", N

Locate 5, 3
Print Using "Ausgabe: ###"; tenaerOp&(N&, X&)

End

The C part:
Code: (Select All)
//TenaerenOperator von Basic aufrufen - 30. Okt. 2023

#include <stdio.h>
#include <stdlib.h>

long tenaerOp(long eingabe, long x)
{
    long ausgabe;
        
    ausgabe = x > eingabe ? 100 : 200;
    return(ausgabe);    
}

Print this item

  Variable height jump demo
Posted by: TerryRitchie - 10-30-2023, 06:27 PM - Forum: Programs - No Replies

I ran across some javascript code (link at top of code below) that shows how to do a dead simple variable height jump. It's much simpler than the methods I have been using over the years.

Click the mouse inside the window to initiate a jump.
The longer the mouse button is held the higher the jump.

Code: (Select All)
'
' Variable height jump demo
'
' Based on code found at: https://jsfiddle.net/LyM87/
'
' Click the mouse inside the window.
' The longer the mouse button is held the higher the jump.
' Press ESC to exit the program.
'
TYPE BoxTYPE
    positionX AS SINGLE ' x location of box
    positionY AS SINGLE ' y location of box
    velocityX AS SINGLE ' horizontal velocity of box
    velocityY AS SINGLE ' vertical velocity of box
    onGround AS INTEGER ' box on ground (-1 yes, 0 no)
END TYPE

DIM Box AS BoxTYPE '      the box
DIM gravity AS SINGLE '   amount of gravity

Box.positionX = 100 '                                   set initial start values
Box.positionY = 175
Box.velocityX = 4
Box.velocityY = 0
Box.onGround = -1
gravity = .5
SCREEN _NEWIMAGE(200, 200, 32) '                        graphics csreen
DO '                                                    begin main loop

    '+---------------------------------+
    '| Initiate a variable height jump |
    '+---------------------------------+

    WHILE _MOUSEINPUT: WEND '                           get latest mouse update
    IF _MOUSEBUTTON(1) THEN '                           is mouse button down? (start jump)
        IF Box.onGround THEN '                          yes, is box on the ground?
            Box.velocityY = -12 '                       yes, add vertical velocity
            Box.onGround = 0 '                          box is now off the ground
        END IF
    ELSE '                                              no, mouse button has been released (end jump)
        IF Box.velocityY < -6 THEN '                    is vertical velocity above -6?
            Box.velocityY = -6 '                        yes, limit vertical velocity to -6
        END IF
    END IF

    '+---------------------+
    '| Update box position |
    '+---------------------+

    Box.velocityY = Box.velocityY + gravity '           add positive value to vertical velocity
    Box.positionY = Box.positionY + Box.velocityY '     add vertical velocity to box current y location
    Box.positionX = Box.positionX + Box.velocityX '     add horizontal velocity to box current x location
    IF Box.positionY > 175 THEN '                       has box gone below ground?
        Box.positionY = 175 '                           yes, place box on ground
        Box.velocityY = 0 '                             remove vertical velocity
        Box.onGround = -1 '                             box is now on the ground
    END IF
    IF Box.positionX < 10 OR Box.positionX > 190 THEN ' has box reached either side of screen?
        Box.velocityX = -Box.velocityX '                yes, reverse horizontal velocity
    END IF

    '+----------------------------+
    '| Render screen with changes |
    '+----------------------------+

    _LIMIT 30 '                                         30 frames per second
    CLS '                                               clear screen
    LINE (0, 175)-(200, 175) '                          draw ground line
    LINE (Box.positionX - 10, Box.positionY - 20)-(Box.positionX + 10, Box.positionY), , B ' draw box
    _DISPLAY '                                          update screen with changes
LOOP UNTIL _KEYDOWN(27) '                               leave when ESC pressed
SYSTEM '                                                return to OS

Print this item

  Halloween Treats
Posted by: bplus - 10-29-2023, 01:21 PM - Forum: bplus - Replies (3)

Creep Out


The is a mod of Break Out with spiders crawling out of broken blocks and lots of sound effects and special spider web font.

   



Attached Files
.zip   Creep Out Wall Mod v2021-08-28A.zip (Size: 1.49 MB / Downloads: 51)
Print this item

  BUG Report please relocate where need be.
Posted by: MystikShadows - 10-28-2023, 03:32 PM - Forum: General Discussion - No Replies

LPRINT On A Microsoft PDF Printer driver in Wndows 11 Does not issue a page break when one should be issued. I Have a 21 records in a USER TYPE construct, if i LPRINT that to the print]]]] PDF file it only prints the first 10 records and nothing else. is there an instruction i'm missing or something to eject the page in the pdf file?

Code: (Select All)
            IF CurrentAlbum.IsActive = 1 THEN
                IF RTRIM$(CurrentAlbum.Title) <> "" AND CurrentAlbum.AlbumID > 0 THEN
                    LPRINT ""
                    LPRINT "Album ID:"; CurrentAlbum.AlbumID
                    LPRINT "Title...: "; CurrentAlbum.Title
                    LPRINT "Artist..: "; CurrentAlbum.Artist
                    LPRINT USING Template1$; CurrentAlbum.Label; CurrentAlbum.Country; CurrentAlbum.Language;
                    LPRINT USING Template2$; CurrentAlbum.Year; CurrentAlbum.Style; CurrentAlbum.Medium;
                    LPRINT ""
                END IF
            END IF
only one space is present not two as shown here, and yes, afte 10 records it's all i can see. there is no page 2 or whatever.

Help Smile

Print this item

  function "_ARCSEC()" is wrong?
Posted by: BSpinoza - 10-28-2023, 05:44 AM - Forum: General Discussion - Replies (16)

One example:

Code: (Select All)
PRINT _ARCSEC(-2.5)

results in "illegal function call".

But " .... the domain of sec inverse x is (-∞, -1] U [1, ∞) (being the range of secant function) and the range of arcsec is [0, π/2) U (π/2, π] (principal branch of sec x). ..."

From: https://www.cuemath.com/trigonometry/sec-inverse-x/

The result should be 1.982313172862385.

An alternative formula gives the correct result:

arcsec(x) = acos(1/x)

Code: (Select All)
PRINT _ACOS(1/-2.5)

This works fine and delivers: 1.982313172862385. 

The Help says:
Quote:  FUNCTION ARCSEC (x) ' Inverse Secant
    IF x < 1 THEN ARCSEC = ATN(x / SQR(1 - x * x)) + (SGN(x) - 1) * (2 * ATN(1)) ELSE BEEP
END FUNCTION
 I think this is not correct!   

 Correct for the domain is:  |x| > 1 

What do our mathematical specialists think?

Print this item

  Grab URL from net to file
Posted by: eoredson - 10-28-2023, 04:30 AM - Forum: Help Me! - Replies (7)

I have recently been using the following function to grab a file from the net:

Code: (Select All)
Rem Program to grab file from url PD 2023.

Declare Dynamic Library "urlmon"
  Function URLDownloadToFileA% (ByVal pCaller As Long, szURL As String, szFileName As String, Byval dwReserved As Long, Byval lpfnCB As Long)
End Declare

Declare Dynamic Library "kernel32"
  Function GetLastError& ()
  Function FormatMessageA& (ByVal f As Long, f$, Byval e As Long, Byval d As Long, g$, Byval s As Long, h$)
End Declare
Dim Shared ErrorBuffer As String * 260
Call GrabURL
End

' expiremental url grab.
Sub GrabURL
  ' URL to grab (page or a file)
  URL$ = "http://www.filegate.net/pub/oredson/emc3.zip"

  ' File to save URL as
  URLfile$ = "emc3.zip"

  ' display files
  Print "URL: "; URL$
  Print "File: "; URLfile$

  ' Download it.  Returns 0 if started.
  a& = URLDownloadToFileA%(0, URL$ + Chr$(0), URLfile$ + Chr$(0), 0, 0)
  If a& = 0& Then
      Print "Download started."
  End If
  If a& > 0& Then
      y& = FormatMessageA&(&H1200, "", a&, 0, ErrorBuffer$, 260, "")
      Var1$ = "Error 0x" + Hex$(a&): Print Var1$
      If y& > 2 Then
        Var2$ = Left$(ErrorBuffer$, y& - 2): Print Var2$
      End If
  End If
End Sub
but what I want to know if there is a way to determine the progress of the download if it is a very large file!?

Thanks, Erik.

Print this item

  Anyone familiar with GFABASIC32 for Windows?
Posted by: James D Jarvis - 10-27-2023, 08:52 PM - Forum: QBJS, BAM, and Other BASICs - Replies (7)

On a complete lark I recently downloaded GFABASIC32 for Windows and today I was fiddling with it and it's not such a bad version of Basic at all. Anyone else familiar with it at all?

Print this item