mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-09-08 00:40:17 +00:00
LINE INPUT will now use the faster method if passed a file handle that has been opened FOR BINARY. As such, the _BLINEINPUT command has been removed. qb64.bas now takes advantage of this for reading from '$include files, at least in Include Manager 1. Some tweaking of internal/source/main.txt was required to get things into a sane state, so I'm holing off changing the compiler any further so the auto-builder can make sure everything's smoothed over. Note: Everything should still compile as normal; I'm just being overcautious.
53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
//Get Current Working Directory
|
|
qbs *func__cwd(){
|
|
qbs *final, *tqbs;
|
|
int length;
|
|
char *buf, *ret;
|
|
|
|
#if defined QB64_WINDOWS
|
|
length = GetCurrentDirectoryA(0, NULL);
|
|
buf = (char *)malloc(length);
|
|
if (!buf) {
|
|
error(7); //"Out of memory"
|
|
return tqbs;
|
|
}
|
|
if (GetCurrentDirectoryA(length, buf) != --length) { //Sanity check
|
|
free(buf); //It's good practice
|
|
tqbs = qbs_new(0, 1);
|
|
error(51); //"Internal error"
|
|
return tqbs;
|
|
}
|
|
#elif defined QB64_LINUX
|
|
length = 512;
|
|
while(1) {
|
|
buf = (char *)malloc(length);
|
|
if (!buf) {
|
|
tqbs = qbs_new(0, 1);
|
|
error(7);
|
|
return tqbs;
|
|
}
|
|
ret = getcwd(buf, length);
|
|
if (ret) break;
|
|
if (errno != ERANGE) {
|
|
tqbs = qbs_new(0, 1);
|
|
error(51);
|
|
return tqbs;
|
|
}
|
|
free(buf);
|
|
length += 512;
|
|
}
|
|
length = strlen(ret);
|
|
ret = (char *)realloc(ret, length); //Chops off the null byte
|
|
if (!ret) {
|
|
tqbs = qbs_new(0, 1);
|
|
error(7);
|
|
return tqbs;
|
|
}
|
|
buf = ret;
|
|
#endif
|
|
final = qbs_new(length, 1);
|
|
memcpy(final->chr, buf, length);
|
|
free(buf);
|
|
return final;
|
|
}
|
|
|