1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-12 15:45:13 +00:00
Commit graph

2774 commits

Author SHA1 Message Date
Matthew Kilgore 1438c882d2 Update webfactory/ssh-agent 2022-11-19 15:13:26 -05:00
Matthew Kilgore e8ebf56a2f Add basic http tests
These tests cover basic HTTP functionality via _OPENCLIENT(), and also
that it fails to work without `$Unstable:Http` in place.
2022-11-19 15:13:26 -05:00
Matthew Kilgore 77e0a369af Add $Unstable entry for Http
This effectively adds Http support to QB64-PE via adding $Unstable:Http
which will trigger building with DEP_HTTP, which enables Http support in
libqb.
2022-11-19 15:13:26 -05:00
Matthew Kilgore ffdf9db390 Add libqb.cpp stream support for HTTP
Modifies libqb.cpp to add support for opening HTTP connections via
_OPENCLIENT(). This makes use of the libqb_http API in ./libqb, which is
backed by libcurl.

This also includes a bit of refactoring for some of the code that
required additions. I replaced a few of the integer values with enums,
and added a new entry for Http and then implemented it in all the
necessary locations. In addition to `_OPENCLIENT()`, there is also
support for using HTTP connections with `EOF()`, `LOF()`, `GET #`
(variable and fixed length), and `CLOSE`.

I additionally fixed an issue of parsing the colon parts of the
`_OPENCLIENT()` parameter, where having too many colons would cause the
program to crash. Since we only allow so many parts to begin with it I
simply limited the max number of parts it will split to 10.

Fixes: #98
Fixes: #46
2022-11-19 15:13:26 -05:00
Matthew Kilgore 45d52271da Add libqb_http API for HTTP connections
This adds the libqb_http API, which is designed to support HTTP and
HTTPS usage from QB64-PE source.

The design consists of a single thread which services all the HTTP(s)
connections. There are then various libqb_http APIs exposed that allow
interacting with this thread to create a new connection, query
connection status, read data, or close the connection.

Internally the thread makes use of the curl_multi interface to allow a
single thread to service multiple HTTP(s) connections in parallel. This
means you can _OPENCLIENT() multiple HTTP connection in a row and all of
them will be serviced at the same time in whatever order data is
available.

HTTP is optional and selected via a Makefile setting. A stub is swapped
in if HTTP support is not used, which avoids need to add another build
flag to libqb.cpp.
2022-11-19 15:13:26 -05:00
Matthew Kilgore 848aa6b5d2 Pin versions of build agents
This ensures that our build will continue to use the same versions of
our OSs even if GitHub updates them.
2022-11-19 01:55:20 -05:00
Matthew Kilgore 1994ca3f73 Install libcurl on Linux build agent 2022-11-19 01:55:20 -05:00
Matthew Kilgore d8a3ec75fd Run tests with -O2
Since we do allow users to use optimization, it's worth running our
tests with it to verify at least those work.
2022-11-19 01:55:20 -05:00
Matthew Kilgore b066c641f4 Add the libcurl license 2022-11-19 01:55:20 -05:00
Matthew Kilgore 1eec789114 Specify the XCode SDK version 2022-11-18 01:50:28 -05:00
Matt Kilgore ba6e5f6438
Merge pull request #246 from mkilgore/add-libcurl-to-repo
Add libcurl to the repository
2022-11-17 22:31:44 -05:00
Matthew Kilgore 34a7df535e Add libcurl to the repository
This copy is used for building on Windows. For Linux and OS X we used
the system-provided copy.
2022-11-17 22:03:41 -05:00
github-actions[bot] 5e3fa2d6c2 Automatic update of ./internal/source 2022-11-16 06:19:29 +00:00
Matt Kilgore 249750bcbd
Merge pull request #249 from mkilgore/release-3.4.1
Version 3.4.1
2022-11-16 01:01:20 -05:00
Matthew Kilgore 1aac3b1955 Version 3.4.1 2022-11-15 23:47:34 -05:00
github-actions[bot] de63331a19 Automatic update of ./internal/source 2022-11-16 04:41:13 +00:00
Matt Kilgore 0cfb01c6bb
Merge pull request #247 from SteveMcNeill/main
Swap in Optional New Load File Dialog
2022-11-15 23:24:33 -05:00
Matt Kilgore 4ff9edbf9d
Merge branch 'main' into main 2022-11-15 22:55:06 -05:00
Matthew Kilgore 65cfbda3b7 Rename 'New Dialogs' to 'GUI Dialogs', Persist setting
The 'New Dialogs' menu option was renamed to 'GUI Dialogs' to better
explain what it does. Additionally the setting of which dialogs to use
is saved to the config.ini file so that it presists across multiple runs
of QB64-PE.
2022-11-15 22:21:29 -05:00
Matt Kilgore bd6ad5fde6
Merge pull request #248 from mkilgore/fix-password-inputbox
Fix password handling in _InputBox$ on Windows
2022-11-15 21:04:30 -05:00
Matthew Kilgore a28342be99 Fix password handling in _InputBox$ on Windows
We were incorrectly treating the empty string and NULL the same and
using a password dialog for both. It now has the correct behavior of
displaying the password when provided the empty string, but just
displaying a blank input box when provided NULL.
2022-11-14 20:23:41 -05:00
SteveMcNeill 2147911ec3 Swap in Optional New Load File Dialog
And without screwing up the keyword casing this time!  ;)
2022-11-14 17:47:27 -05:00
Samuel Gomes 884ff158ff
Merge pull request #243 from a740g/setup-win-enhancements
setup_win enhancements
2022-11-14 23:00:09 +05:30
Samuel Gomes 0dd825e5f3 Add -static-libgcc -static-libstdc++ to TEST_CFLAGS-$(win) 2022-11-14 12:15:51 +05:30
Samuel Gomes cb14a3d4d7
Merge branch 'main' into setup-win-enhancements 2022-11-14 09:54:13 +05:30
Samuel Gomes 2cd889f0ec Update .ci/bootstrap.bat to use setup_mingw.cmd 2022-11-14 09:53:58 +05:30
Matt Kilgore 855eaac864
Merge pull request #245 from mkilgore/dialog-fixes
Improve dialog window association and _InputBox$ support on Windows
2022-11-13 15:41:24 -05:00
Matthew Kilgore e6964dfc69 Include stdint.h on Windows, change integer defines to use them
It seems we weren't including stdint.h on Windows by mistake. Likely we
were getting it anywy from some other header, but it sounds like that
got changed in newer versions of MinGW and either way we shouldn't rely
on that.

Being that we include stdint.h on all platforms, I also changed os.h to
always use these types when defining the `int32` and friends sized
types. Ideally we get rid of those defines in the future but we can at
least use the stdint.h types going forward (as we already have).
2022-11-12 19:48:26 -05:00
Matthew Kilgore 1509f85719 Improve _InputBox$ support on Windows
This applies various dialog settings so that the dialog is always on
top, and also so that Tab works as expected to move between the
controls. The Edit control is moved first so that it's focused when the
window appears.
2022-11-12 19:48:17 -05:00
Matthew Kilgore 3f709ba65b Add logic to correctly discover our process's Window
Currently we have two different ways of determining what Window handle
to tie our dialogs too - we either use GetForegroundWindow(), or create
a completely new and hidden handle. The associated window determines
what process names shows up on notifications, and also which window
can't be interacted with while a dialog is open.

Both of those approaches aren't really good. In the case of
GetForegroundWindow(), it just returns whatever window the user has in
focus, which might be a completely different process. With the hidden
window, it means the dialog and notification aren't really tied to the
QB64-PE program, so you can still interact with the window even when a
dialog is open, and the notification doesn't show an exectuable name.

To solve this we're now using EnumWindows() to enumerate over all the
Windows on the system and find one associated with our ProcessId. We
then check if it's the top-level window and return it if it is.

If that process fails to find a window (such as if this is a
console-only program, or $SCREENHIDE is used) then we check if
GetConsoleWindow() gives us a handle and use that.

If neither approach works, then we fall back to creating a hidden window
so that the dialogs can still work.
2022-11-12 19:16:43 -05:00
Samuel Gomes 2229b41e34 Update MINGW download URLs 2022-11-11 18:59:08 +05:30
Matthew Kilgore c5e2be53f9 Swap bmp test images for png
Functionally it doesn't matter what kind of images we store for the
tests, as _LOADIMAGE() will open them exactly the same. png however has
the advantages of being substantially smaller, and also viewable
directly on GitHub in PRs, making them easier to review.
2022-11-09 21:56:44 -05:00
Samuel Gomes 309fc2b732
Merge branch 'QB64-Phoenix-Edition:main' into setup-win-enhancements 2022-11-10 07:27:46 +05:30
Matt Kilgore 4799c9b7d0
Merge pull request #241 from mkilgore/paint-fill-fix
Fix PAINT when border color is not supplied (QB64Official/qb64#38)
2022-11-09 20:39:28 -05:00
Matt Kilgore a85f10e35c
Merge branch 'main' into paint-fill-fix 2022-11-08 21:55:53 -05:00
Samuel Gomes 1150d23a2a
Merge branch 'QB64-Phoenix-Edition:main' into setup-win-enhancements 2022-11-08 23:54:33 +05:30
Matt Kilgore f40bc3acaa
Merge pull request #238 from mkilgore/fix-inputbox-windows
Fix _InputBox$ on Windows to use DialogBoxIndirect, and a few other changes
2022-11-08 13:18:48 -05:00
Matthew Kilgore ac8aac39b7 Use signed type for xdelta and ydelta arrays
I accidentally declared these as uint32_t even though I store -1 in
them. It was working anyway due to the implicit conversion that happens
when adding it to an int32_t, but it should be fixed regardless.
2022-11-08 01:32:05 -05:00
Matthew Kilgore 8005e62402 Add PAINT tile image-based tests 2022-11-08 01:02:22 -05:00
Matthew Kilgore 4f5af8888e Fix PAINT when border color is not supplied
The border color parameter to PAINT is optional, but sub_paint was not
handling that case. What it should do in that situation is keep painting
until it finds pixels that are not the same color as the original
starting pixel was. Instead it would simply assume border color was
valid and paint until it finds color zero (the default parameter value
when it's not provided).

This was originally reported in QB64Official/qb64#2, and Walt
(@TheJoyfulProgrammer) fixed it in QB64Official/qb64#38. Functionally
this is the same change, however I'm checking `passed & 4` to see
whether a border color was provided rather than `bordercol == NULL`.
The later has problems if the provided bordercolor is zero, which is
allowed since zero is a valid color. The `passed` argument indicates
which of the function arguments were actually provided in the QB64
source that called PAINT.

Additionally, along with the `while (true)` loop that Walt changed I
went ahead and removed the duplication of the sections for each
direction. We now just use a couple of arrays to determine which
direction we're checking and loop over all 4.
2022-11-08 00:59:12 -05:00
Matthew Kilgore 90b3bd2662 Address build warnings on tinyfiledialogs.c
A function was made unnecessary but wasn't removed, triggering a
warning. Additionally gcc likes parenthesis around `=` assignments used
for conditions.
2022-11-08 00:49:13 -05:00
Matthew Kilgore 5b238467a9 Use hidden input if defaultText is blank
Fairly simple, this sets the ES_PASSWORD flag when the default text is
blank.

Additionally I fixed the dialog callback to correctly call EndDialog()
rather than DestroyWindow().
2022-11-08 00:49:13 -05:00
Matthew Kilgore 7bf68383d5 Fix warnings, remove unused code in tinyfiledialogs.c 2022-11-08 00:49:13 -05:00
Matthew Kilgore ee9f8e4404 Remove quote checks on Windows
These are the last of the quote checks, these don't require any
associated changes as the underlying Win32 functions already allow
quotes. They were simply added to keep parity with the functionality on
other platforms, that that has since been fixed.
2022-11-08 00:49:13 -05:00
Matthew Kilgore ec0ec10652 Add missing static to char array in tinyfd_openFileDialog
Fairly simple, lBuff is used to return the resulting filename and has to
be static so that it's still valid when the function exits.
2022-11-08 00:49:13 -05:00
Matthew Kilgore 0115029e5e Implement InputBox using DialogBoxIndirect
This removes the VBS based InputBox for Windows and replaces it with a
version that uses DialogBoxIndirect to create the dialog. While it is a
bit more complicated in some respects, it removes any concerns about the
contents of the strings as they're no longer being inserted into the
generated script.

It also has the advantage that it doesn't spawn another process (which
then shows up in the task bar in some situations).

With this changes quote characters are allowed in all of the parameters.
2022-11-08 00:49:13 -05:00
Samuel Gomes a9d29e17d7
Merge branch 'QB64-Phoenix-Edition:main' into setup-win-enhancements 2022-11-08 07:56:48 +05:30
Matt Kilgore f5b24dfdc1
Merge pull request #239 from mkilgore/fix-macos-escaping
Fix osascript escaping on Mac OS
2022-11-07 21:25:24 -05:00
Matthew Kilgore f73a1da97d Fix osascript escaping on Mac OS
Escaping the osascript commands requires two layers of escaping: One for the
script itself, and one for the sh arguments.

For the script itself, we simply have to escape the " character with \". When
then take the result of that and escape it sutably for sh arguments in single
quotes. We already have a function for that so we simply call that to do the
job.
2022-11-07 02:43:29 -05:00
Samuel Gomes 218a9234c6
Merge branch 'QB64-Phoenix-Edition:main' into setup-win-enhancements 2022-11-07 00:16:37 +05:30