1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-09-09 19:50:16 +00:00
Commit graph

59 commits

Author SHA1 Message Date
Samuel Gomes
68af1fe5f7 Fix case-insensitive pattern matching on Windows and _FILES behavior 2024-01-29 18:38:05 +05:30
RainRat
f65a74c22a fix typos 2024-01-28 10:37:47 -08:00
Samuel Gomes
8fa66795b8 Make FILES work for cases where fileSpec does not contain a directory 2024-01-24 19:01:36 +05:30
Samuel Gomes
2bf7b7919c Make _FILES$() throw an error if it called with an argument the first time 2024-01-04 04:46:14 +05:30
Samuel Gomes
103e0f0873 Cleanup FS_GetKnownDirectory() and make libqb/ compile using -O2 2024-01-02 23:49:43 +05:30
Samuel Gomes
b32dedf3f0 Change _FQN$ to _FULLPATH$ 2023-12-30 23:35:06 +05:30
Samuel Gomes
ced74fb82e Add QB64 error constants 2023-12-29 17:57:35 +05:30
Samuel Gomes
c2bdb61c4a Fix comment typos 2023-12-29 15:27:27 +05:30
a740g
d8cb77e2d1 Change FS_GetKnownDirectory() to return "/Applications" on macOS 2023-12-29 04:42:32 +05:30
a740g
77122d475a Update func__dir() to support "PROGRAMFILES(X86)" 2023-12-29 04:04:02 +05:30
Samuel Gomes
84b58c0fde Update func__sndopen() to use filepath_fix_directory() 2023-12-29 02:49:30 +05:30
Samuel Gomes
cd5a60546f Remove new_error check in func__FQN() 2023-12-29 02:41:12 +05:30
Samuel Gomes
0d71d08a9c Replace most qbs stuff with std::string 2023-12-29 02:34:09 +05:30
Samuel Gomes
fa395b7c58 Implement func__FQN() 2023-12-29 02:09:02 +05:30
Samuel Gomes
35e44a620d Update func__files() to handle fileSpec directory name without trailing slash 2023-12-29 01:17:05 +05:30
Samuel Gomes
85afb4b84a Make FS_GetFQN() return trailing slash for directories 2023-12-29 00:58:15 +05:30
Samuel Gomes
fcabef61ce Implement cross-platform sub_files() 2023-12-28 23:35:20 +05:30
Samuel Gomes
a29d2b5955 Prefix function names with FS_ to avoid possible collisions 2023-12-28 02:28:53 +05:30
Samuel Gomes
c558d2a2d2 Update func__files() to return directory names with trailing slash 2023-12-28 01:50:24 +05:30
Samuel Gomes
5d037775af Add support for _FILES$() 2023-12-15 20:54:11 +05:30
a740g
9760895f92 Fix func__files() to return empty qbs on error 2023-12-15 13:48:04 +05:30
a740g
5c078a1ec1 Implement func__files() 2023-12-15 13:43:49 +05:30
a740g
260adbfe6b Update more macOS known directories 2023-12-15 12:02:44 +05:30
a740g
3dd2495cee Add more Linux known directories 2023-12-14 23:56:14 +05:30
Samuel Gomes
ef142ecd52 Update comments 2023-12-14 20:00:19 +05:30
a740g
4d4b99ddd9 Fix some known directories 2023-12-14 02:47:29 +05:30
Samuel Gomes
901bdb4cd3 Add filesys test 2023-12-13 12:26:09 +05:30
Samuel Gomes
941f3583a4 Update comments 2023-12-13 10:59:04 +05:30
Samuel Gomes
a52c3ba977 Simplify sub_kill() 2023-12-12 15:40:35 +05:30
a740g
ed30f7c211 Add some known directory support for macOS & Linux 2023-12-11 20:10:40 +05:30
a740g
3353364cf8 Make PATHNAME_LENGTH_MAX > 4k or FILENAME_MAX 2023-12-11 19:04:18 +05:30
Samuel Gomes
3604a7a7f7 Update sub_kill() to handle file spec without wildcard correctly 2023-12-11 16:17:53 +05:30
Samuel Gomes
07c8554f89 Cross-platform full sub_kill() implementation 2023-12-11 15:31:06 +05:30
Samuel Gomes
4ca0cf3a7b Add initial support for FILES$() 2023-12-11 04:46:28 +05:30
Samuel Gomes
1b3a5a72f4 Simplify and remove magic numbers 2023-12-11 04:06:38 +05:30
Samuel Gomes
20e5789ffd Simplify func__direxists() and func__fileexists() 2023-12-11 02:43:26 +05:30
Samuel Gomes
ffcd045da1 Make func__dir() cross-platform ready 2023-12-11 01:26:43 +05:30
Samuel Gomes
96a2ffcb1e Simplify func__cwd() 2023-12-10 12:25:38 +05:30
Samuel Gomes
7a1f5100f2 Use Win32 ANSI API names 2023-12-10 11:40:34 +05:30
Samuel Gomes
a11a66fb63 Rename startDir to g_startDir 2023-12-10 11:25:01 +05:30
Samuel Gomes
48539861f3 Repace fixdir() with filepath_fix_directory() 2023-12-10 11:15:41 +05:30
Samuel Gomes
0e251eb8e8 Consolidate all filesystem related functions to it's own translation unit 2023-12-10 01:16:29 +05:30
RainRat
3914037c0f fix typos 2023-04-30 15:20:42 -07:00
Matthew Kilgore
42bded9ba9 Fix build on MacOS High Sierra
Fairly simple, MacOS High Sierra's libcurl version is too old and not
have `CURLINFO_CONTENT_LENGTH_DOWNLOAD_T`. This adds a version check to
use the older version of that command which gives back a double instead.

Fixes: #287
2023-01-20 13:30:12 -05:00
Matthew Kilgore
f21ce09e2d Replace time() with std::chrono, fix startup delay
Currently main() includes logic that is intended to sync time() with
GetTicks() for the purpose of using GetTicks() to get millisecond
accuracy with time(), which only has second accuracy. Unfortunately, the
'syncing' up of these time sources results in an average of a half
second delay in starting a QB64-PE program.

This logic is easly replaced with std::chrono, which provides a real
time clock which is also millisecond accurate. That removes the need to
use time() and GetTicks() together to get millisecond accuracy, and
means the delay syncing them is no longer necessary.

I also separated most of the "delay" and "time" related functions into
datetime.cpp, and included the new std::chrono code into that file.

Since I needed to call some of the rounding functions in datetime.cpp I
also moved that stuff out into its own .cpp and header files to clean
things up a bit.

Fixes: #282
2023-01-08 20:24:25 -05:00
Matthew Kilgore
f88960966b Fix use-after-free bug in buffer.cpp
Fairly simple, the finished entry is free'd and then removed from the
list, but that order results in us accessing the entry's next member
after it has been free'd. Swapping the order of the operations fixes the
issue.

Fixes: #281
2023-01-08 20:24:25 -05:00
Matthew Kilgore
7ac2eefcb8 Fix slowdown of _ScreenX and _ScreenY
The commands _ScreenX and _ScreenY got significantly slower due to the
need to wait for the GLUT thread to wake up and execute the glutGet()
command for them. We've already seen a few programs (including the IDE)
where this behavior completely grinds the program to a halt, so we
definitely can't keep it.

The simple solution here is to not call glutGet() on every _ScreenX/Y
command. Instead every time the idle/timer function runs we get the
current values for the relevant glutGet() variables and store them.
libqb_glut_get() then checks if the value being read is one of the ones
we read in the idle/timer functionand if so just returns the last read
value. By doing it this way the commands no longer has to wait on the
GLUT thread for the result.
2022-11-30 17:33:17 -05:00
Matthew Kilgore
f7fabda198 Fix random seg faults on exit
Fairly straightfowrad, programs were randomly seg faulting on exit. This
was happening due to GLUT registering a cleanup function via atexit(),
which then gets called when exit() is called.

The issue happens when exit() is called on a thread other than the GLUT
thread, which leads to the exit() call then attempting to cleanup GLUT
while the other thread is still using it, which randomly leads to seg
faults.

Fixing this is slightly annoying. We cannot stop the GLUT thread, as
the basic GLUT API (which is used on Mac OS) simply does not offer a way
to exit the glutMainLoop() call. Thus the simplest solution is to simply
make sure we call exit() on the GLUT thread, which we can fairly easily
due via the message queue.

That being the case, a new libqb_exit() API was added, which simply
regsiters the GLUT exit message and then waits for the program to end.
The atexit() handler then runs on the GLUT thread and everything works
out fine.

In the future we probably should redo the exit logic a bit so that all
the threads are actually stopped/joined to ensure the exit process is
consistent, however this is good enough for now. Also, there's plenty of
error states which call exit() which I did not address.
2022-11-29 20:04:54 -05:00
Matthew Kilgore
72193e34e5 Add GLUT command queue, processed on GLUT thread
This fixes all the code so that all the calls to glut functions
happen on the same thread that is running GLUT.

We achieve this by creating a queue of GLUT commands to execute.
Commands can be added to the queue anywhere in the code, and then the
queue is processed on the GLUT thread via it's idle func or timer func.
The command is run and if necessary the result is provided in the
message queue object. Each object contains a completion which can be
waited on to block until the GLUT thread has processed the command.

Fixes: #66
2022-11-29 20:04:54 -05:00
Matthew Kilgore
d678be717c Move GLUT initialization logic into separate .cpp file 2022-11-29 20:04:53 -05:00