mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-08 23:05:14 +00:00
Fixed ASCII tool colors to match QB64 IDE, and added in EXIT dupport with the red X on top.
Pushed changes introduced by LUKE (Johny B on the QB64 forums) as follows : Fixed setup_lnx.sh, added _CWD$, fixed handling of errno. Converted setup_lnx.sh to Linux line endings (was preventing the script from running). We now include <errno.h>, so the errno variable actually works - before it was just a regular variable that wasn't being set on error. Added a _CWD$ function that returns the current working directory. Should work on all 3 systems, but testing is needed on Win/Mac. Can cause the following runtime errors: 7 (Out of memory), 51 (Internal error).
This commit is contained in:
parent
9d2c936189
commit
ef083bb4af
Binary file not shown.
|
@ -4,4 +4,5 @@
|
||||||
//**
|
//**
|
||||||
//***********************************************
|
//***********************************************
|
||||||
|
|
||||||
|
#include "luke_mods.cpp"
|
||||||
#include "Steves_Main-List.cpp"
|
#include "Steves_Main-List.cpp"
|
53
internal/c/User Mods/luke_mods.cpp
Normal file
53
internal/c/User Mods/luke_mods.cpp
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
//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;
|
||||||
|
}
|
||||||
|
|
5
internal/c/User Mods/luke_mods.h
Normal file
5
internal/c/User Mods/luke_mods.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/* Routines by Luke
|
||||||
|
* The actual code is in Luke_Main-List.cpp
|
||||||
|
* Write me at <flukiluke@gmail.com> if I broke something
|
||||||
|
*/
|
||||||
|
qbs *func__cwd();
|
|
@ -9,4 +9,5 @@
|
||||||
//**
|
//**
|
||||||
//*************************************************************
|
//*************************************************************
|
||||||
|
|
||||||
|
#include "luke_mods.h"
|
||||||
#include "steve_mods.h"
|
#include "steve_mods.h"
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
#ifdef QB64_ANDROID
|
#ifdef QB64_ANDROID
|
||||||
#define QB64_GLES1
|
#define QB64_GLES1
|
||||||
#define QB64_NOT_X86
|
#define QB64_NOT_X86
|
||||||
#define QB64_GLUT
|
#define QB64_GLUT
|
||||||
#else
|
#else
|
||||||
#define QB64_GL1
|
#define QB64_GL1
|
||||||
#define QB64_GLUT
|
#define QB64_GLUT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QB64_LINUX
|
#ifdef QB64_LINUX
|
||||||
#ifndef QB64_MACOSX
|
#ifndef QB64_MACOSX
|
||||||
#ifndef QB64_ANDROID
|
#ifndef QB64_ANDROID
|
||||||
#define QB64_X11
|
#define QB64_X11
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,26 +23,26 @@
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#ifdef QB64_BACKSLASH_FILESYSTEM
|
#ifdef QB64_BACKSLASH_FILESYSTEM
|
||||||
#include "parts\\core\\gl_headers\\glew\\glew.h"
|
#include "parts\\core\\gl_headers\\glew\\glew.h"
|
||||||
#else
|
#else
|
||||||
#include "parts/core/gl_headers/glew/glew.h"
|
#include "parts/core/gl_headers/glew/glew.h"
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
//core
|
//core
|
||||||
#ifdef QB64_GLUT
|
#ifdef QB64_GLUT
|
||||||
#ifdef QB64_BACKSLASH_FILESYSTEM
|
#ifdef QB64_BACKSLASH_FILESYSTEM
|
||||||
#include "parts\\core\\src.c"
|
#include "parts\\core\\src.c"
|
||||||
#else
|
#else
|
||||||
#include "parts/core/src.c"
|
#include "parts/core/src.c"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef QB64_WINDOWS
|
#ifdef QB64_WINDOWS
|
||||||
#include <winbase.h>
|
#include <winbase.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//common includes
|
//common includes
|
||||||
|
@ -53,131 +53,132 @@
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
//OS/compiler specific includes
|
//OS/compiler specific includes
|
||||||
#ifdef QB64_WINDOWS
|
#ifdef QB64_WINDOWS
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <winspool.h>
|
#include <winspool.h>
|
||||||
#include <csignal>
|
#include <csignal>
|
||||||
#include <process.h> //required for multi-threading
|
#include <process.h> //required for multi-threading
|
||||||
|
|
||||||
//2013 midi
|
//2013 midi
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#ifndef QB64_MACOSX
|
#ifndef QB64_MACOSX
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef QB64_GLUT
|
#ifdef QB64_GLUT
|
||||||
#ifndef QB64_ANDROID
|
#ifndef QB64_ANDROID
|
||||||
#ifdef QB64_BACKSLASH_FILESYSTEM
|
#ifdef QB64_BACKSLASH_FILESYSTEM
|
||||||
#include "parts\\core\\gl_headers\\opengl_org_registery\\glext.h"
|
#include "parts\\core\\gl_headers\\opengl_org_registery\\glext.h"
|
||||||
#else
|
#else
|
||||||
#include "parts/core/gl_headers/opengl_org_registery/glext.h"
|
#include "parts/core/gl_headers/opengl_org_registery/glext.h"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
//QB64 string descriptor structure
|
//QB64 string descriptor structure
|
||||||
struct qbs_field{
|
struct qbs_field{
|
||||||
int32 fileno;
|
int32 fileno;
|
||||||
int64 fileid;
|
int64 fileid;
|
||||||
int64 size;
|
int64 size;
|
||||||
int64 offset;
|
int64 offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct qbs{
|
struct qbs{
|
||||||
uint8 *chr;//a 32 bit pointer to the string's data
|
uint8 *chr;//a 32 bit pointer to the string's data
|
||||||
int32 len;//must be signed for comparisons against signed int32s
|
int32 len;//must be signed for comparisons against signed int32s
|
||||||
uint8 in_cmem;//set to 1 if in the conventional memory DBLOCK
|
uint8 in_cmem;//set to 1 if in the conventional memory DBLOCK
|
||||||
uint16 *cmem_descriptor;
|
uint16 *cmem_descriptor;
|
||||||
uint16 cmem_descriptor_offset;
|
uint16 cmem_descriptor_offset;
|
||||||
uint32 listi;//the index in the list of strings that references it
|
uint32 listi;//the index in the list of strings that references it
|
||||||
uint8 tmp;//set to 1 if the string can be deleted immediately after being processed
|
uint8 tmp;//set to 1 if the string can be deleted immediately after being processed
|
||||||
uint32 tmplisti;//the index in the list of strings that references it
|
uint32 tmplisti;//the index in the list of strings that references it
|
||||||
uint8 fixed;//fixed length string
|
uint8 fixed;//fixed length string
|
||||||
uint8 readonly;//set to 1 if string is read only
|
uint8 readonly;//set to 1 if string is read only
|
||||||
qbs_field *field;
|
qbs_field *field;
|
||||||
};
|
};
|
||||||
|
|
||||||
//substitute functionality
|
//substitute functionality
|
||||||
|
|
||||||
#ifdef QB64_WINDOWS
|
#ifdef QB64_WINDOWS
|
||||||
inline void SDL_Delay(uint32 milliseconds){//redefine SDL_Delay to call Sleep
|
inline void SDL_Delay(uint32 milliseconds){//redefine SDL_Delay to call Sleep
|
||||||
Sleep(milliseconds);
|
Sleep(milliseconds);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
inline void SDL_Delay(uint32 milliseconds){//redefine SDL_Delay to call Sleep
|
inline void SDL_Delay(uint32 milliseconds){//redefine SDL_Delay to call Sleep
|
||||||
static uint64 sec,nsec;
|
static uint64 sec,nsec;
|
||||||
sec=milliseconds/1000;
|
sec=milliseconds/1000;
|
||||||
nsec=(milliseconds%1000)*1000000;
|
nsec=(milliseconds%1000)*1000000;
|
||||||
static timespec ts;
|
static timespec ts;
|
||||||
ts.tv_sec = sec;
|
ts.tv_sec = sec;
|
||||||
ts.tv_nsec = nsec;
|
ts.tv_nsec = nsec;
|
||||||
nanosleep (&ts, NULL);
|
nanosleep (&ts, NULL);
|
||||||
}
|
}
|
||||||
inline void Sleep(uint32 milliseconds){
|
inline void Sleep(uint32 milliseconds){
|
||||||
SDL_Delay(milliseconds);
|
SDL_Delay(milliseconds);
|
||||||
}
|
}
|
||||||
inline uint32 _lrotl(uint32 word,uint32 shift){
|
inline uint32 _lrotl(uint32 word,uint32 shift){
|
||||||
return (word << shift) | (word >> (32 - shift));
|
return (word << shift) | (word >> (32 - shift));
|
||||||
}
|
}
|
||||||
inline void ZeroMemory(void *ptr,int64 bytes){
|
inline void ZeroMemory(void *ptr,int64 bytes){
|
||||||
memset(ptr,0,bytes);
|
memset(ptr,0,bytes);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct img_struct{
|
struct img_struct{
|
||||||
void *lock_offset;
|
void *lock_offset;
|
||||||
int64 lock_id;
|
int64 lock_id;
|
||||||
uint8 valid;//0,1 0=invalid
|
uint8 valid;//0,1 0=invalid
|
||||||
uint8 text;//if set, surface is a text surface
|
uint8 text;//if set, surface is a text surface
|
||||||
uint8 console;//dummy surface to absorb unimplemented console functionality
|
uint8 console;//dummy surface to absorb unimplemented console functionality
|
||||||
uint16 width,height;
|
uint16 width,height;
|
||||||
uint8 bytes_per_pixel;//1,2,4
|
uint8 bytes_per_pixel;//1,2,4
|
||||||
uint8 bits_per_pixel;//1,2,4,8,16(text),32
|
uint8 bits_per_pixel;//1,2,4,8,16(text),32
|
||||||
uint32 mask;//1,3,0xF,0xFF,0xFFFF,0xFFFFFFFF
|
uint32 mask;//1,3,0xF,0xFF,0xFFFF,0xFFFFFFFF
|
||||||
uint16 compatible_mode;//0,1,2,7,8,9,10,11,12,13,32,256
|
uint16 compatible_mode;//0,1,2,7,8,9,10,11,12,13,32,256
|
||||||
uint32 color,background_color,draw_color;
|
uint32 color,background_color,draw_color;
|
||||||
uint32 font;//8,14,16,?
|
uint32 font;//8,14,16,?
|
||||||
int16 top_row,bottom_row;//VIEW PRINT settings, unique (as in QB) to each "page"
|
int16 top_row,bottom_row;//VIEW PRINT settings, unique (as in QB) to each "page"
|
||||||
int16 cursor_x,cursor_y;//unique (as in QB) to each "page"
|
int16 cursor_x,cursor_y;//unique (as in QB) to each "page"
|
||||||
uint8 cursor_show, cursor_firstvalue, cursor_lastvalue;
|
uint8 cursor_show, cursor_firstvalue, cursor_lastvalue;
|
||||||
union{
|
union{
|
||||||
uint8 *offset;
|
uint8 *offset;
|
||||||
uint32 *offset32;
|
uint32 *offset32;
|
||||||
};
|
};
|
||||||
uint32 flags;
|
uint32 flags;
|
||||||
uint32 *pal;
|
uint32 *pal;
|
||||||
int32 transparent_color;//-1 means no color is transparent
|
int32 transparent_color;//-1 means no color is transparent
|
||||||
uint8 alpha_disabled;
|
uint8 alpha_disabled;
|
||||||
uint8 holding_cursor;
|
uint8 holding_cursor;
|
||||||
uint8 print_mode;
|
uint8 print_mode;
|
||||||
//BEGIN apm ('active page migration')
|
//BEGIN apm ('active page migration')
|
||||||
//everything between apm points is migrated during active page changes
|
//everything between apm points is migrated during active page changes
|
||||||
//note: apm data is only relevent to graphics modes
|
//note: apm data is only relevent to graphics modes
|
||||||
uint8 apm_p1;
|
uint8 apm_p1;
|
||||||
int32 view_x1,view_y1,view_x2,view_y2;
|
int32 view_x1,view_y1,view_x2,view_y2;
|
||||||
int32 view_offset_x,view_offset_y;
|
int32 view_offset_x,view_offset_y;
|
||||||
float x,y;
|
float x,y;
|
||||||
uint8 clipping_or_scaling;
|
uint8 clipping_or_scaling;
|
||||||
float scaling_x,scaling_y,scaling_offset_x,scaling_offset_y;
|
float scaling_x,scaling_y,scaling_offset_x,scaling_offset_y;
|
||||||
float window_x1,window_y1,window_x2,window_y2;
|
float window_x1,window_y1,window_x2,window_y2;
|
||||||
double draw_ta;
|
double draw_ta;
|
||||||
double draw_scale;
|
double draw_scale;
|
||||||
uint8 apm_p2;
|
uint8 apm_p2;
|
||||||
//END apm
|
//END apm
|
||||||
};
|
};
|
||||||
//img_struct flags
|
//img_struct flags
|
||||||
#define IMG_FREEPAL 1 //free palette data before freeing image
|
#define IMG_FREEPAL 1 //free palette data before freeing image
|
||||||
|
@ -185,89 +186,89 @@ uint8 apm_p2;
|
||||||
#define IMG_FREEMEM 4 //if set, it means memory must be freed
|
#define IMG_FREEMEM 4 //if set, it means memory must be freed
|
||||||
|
|
||||||
#ifdef QB64_NOT_X86
|
#ifdef QB64_NOT_X86
|
||||||
inline int64 qbr(long double f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
inline int64 qbr(long double f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
||||||
inline uint64 qbr_longdouble_to_uint64(long double f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
inline uint64 qbr_longdouble_to_uint64(long double f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
||||||
inline int32 qbr_float_to_long(float f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
inline int32 qbr_float_to_long(float f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
||||||
inline int32 qbr_double_to_long(double f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
inline int32 qbr_double_to_long(double f){if (f<0) return(f-0.5f); else return(f+0.5f);}
|
||||||
#else
|
#else
|
||||||
//QBASIC compatible rounding via FPU:
|
//QBASIC compatible rounding via FPU:
|
||||||
#ifdef QB64_MICROSOFT
|
#ifdef QB64_MICROSOFT
|
||||||
inline int64 qbr(long double f){
|
inline int64 qbr(long double f){
|
||||||
int64 i;
|
int64 i;
|
||||||
__asm{
|
__asm{
|
||||||
fld f
|
fld f
|
||||||
fistp i
|
fistp i
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
inline uint64 qbr_longdouble_to_uint64(long double f){
|
inline uint64 qbr_longdouble_to_uint64(long double f){
|
||||||
uint64 i;
|
uint64 i;
|
||||||
__asm{
|
__asm{
|
||||||
fld f
|
fld f
|
||||||
fistp i
|
fistp i
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
inline int32 qbr_float_to_long(float f){
|
inline int32 qbr_float_to_long(float f){
|
||||||
int32 i;
|
int32 i;
|
||||||
__asm{
|
__asm{
|
||||||
fld f
|
fld f
|
||||||
fistp i
|
fistp i
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
inline int32 qbr_double_to_long(double f){
|
inline int32 qbr_double_to_long(double f){
|
||||||
int32 i;
|
int32 i;
|
||||||
__asm{
|
__asm{
|
||||||
fld f
|
fld f
|
||||||
fistp i
|
fistp i
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
//FLDS=load single
|
//FLDS=load single
|
||||||
//FLDL=load double
|
//FLDL=load double
|
||||||
//FLDT=load long double
|
//FLDT=load long double
|
||||||
inline int64 qbr(long double f){
|
inline int64 qbr(long double f){
|
||||||
int64 i;
|
int64 i;
|
||||||
__asm__ (
|
__asm__ (
|
||||||
"fldt %1;"
|
"fldt %1;"
|
||||||
"fistpll %0;"
|
"fistpll %0;"
|
||||||
:"=m" (i)
|
:"=m" (i)
|
||||||
:"m" (f)
|
:"m" (f)
|
||||||
);
|
);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
inline uint64 qbr_longdouble_to_uint64(long double f){
|
inline uint64 qbr_longdouble_to_uint64(long double f){
|
||||||
uint64 i;
|
uint64 i;
|
||||||
__asm__ (
|
__asm__ (
|
||||||
"fldt %1;"
|
"fldt %1;"
|
||||||
"fistpll %0;"
|
"fistpll %0;"
|
||||||
:"=m" (i)
|
:"=m" (i)
|
||||||
:"m" (f)
|
:"m" (f)
|
||||||
);
|
);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
inline int32 qbr_float_to_long(float f){
|
inline int32 qbr_float_to_long(float f){
|
||||||
int32 i;
|
int32 i;
|
||||||
__asm__ (
|
__asm__ (
|
||||||
"flds %1;"
|
"flds %1;"
|
||||||
"fistpl %0;"
|
"fistpl %0;"
|
||||||
:"=m" (i)
|
:"=m" (i)
|
||||||
:"m" (f)
|
:"m" (f)
|
||||||
);
|
);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
inline int32 qbr_double_to_long(double f){
|
inline int32 qbr_double_to_long(double f){
|
||||||
int32 i;
|
int32 i;
|
||||||
__asm__ (
|
__asm__ (
|
||||||
"fldl %1;"
|
"fldl %1;"
|
||||||
"fistpl %0;"
|
"fistpl %0;"
|
||||||
:"=m" (i)
|
:"=m" (i)
|
||||||
:"m" (f)
|
:"m" (f)
|
||||||
);
|
);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif //x86 support
|
#endif //x86 support
|
||||||
|
|
||||||
|
@ -276,22 +277,22 @@ static int64 bmask;
|
||||||
static uint64 *bptr64;
|
static uint64 *bptr64;
|
||||||
static int64 bval64;
|
static int64 bval64;
|
||||||
inline uint64 getubits(uint32 bsize,uint8 *base,ptrszint i){
|
inline uint64 getubits(uint32 bsize,uint8 *base,ptrszint i){
|
||||||
bmask=~(-(((int64)1)<<bsize));
|
bmask=~(-(((int64)1)<<bsize));
|
||||||
i*=bsize;
|
i*=bsize;
|
||||||
return ((*(uint64*)(base+(i>>3)))>>(i&7))&bmask;
|
return ((*(uint64*)(base+(i>>3)))>>(i&7))&bmask;
|
||||||
}
|
}
|
||||||
inline int64 getbits(uint32 bsize,uint8 *base,ptrszint i){
|
inline int64 getbits(uint32 bsize,uint8 *base,ptrszint i){
|
||||||
bmask=~(-(((int64)1)<<bsize));
|
bmask=~(-(((int64)1)<<bsize));
|
||||||
i*=bsize;
|
i*=bsize;
|
||||||
bval64=((*(uint64*)(base+(i>>3)))>>(i&7))&bmask;
|
bval64=((*(uint64*)(base+(i>>3)))>>(i&7))&bmask;
|
||||||
if (bval64&(((int64)1)<<(bsize-1))) return bval64|(~bmask);
|
if (bval64&(((int64)1)<<(bsize-1))) return bval64|(~bmask);
|
||||||
return bval64;
|
return bval64;
|
||||||
}
|
}
|
||||||
inline void setbits(uint32 bsize,uint8 *base,ptrszint i,int64 val){
|
inline void setbits(uint32 bsize,uint8 *base,ptrszint i,int64 val){
|
||||||
bmask=(((uint64)1)<<bsize)-1;
|
bmask=(((uint64)1)<<bsize)-1;
|
||||||
i*=bsize;
|
i*=bsize;
|
||||||
bptr64=(uint64*)(base+(i>>3));
|
bptr64=(uint64*)(base+(i>>3));
|
||||||
*bptr64=(*bptr64&( ( (bmask<<(i&7)) ^-1) )) | ((val&bmask)<<(i&7));
|
*bptr64=(*bptr64&( ( (bmask<<(i&7)) ^-1) )) | ((val&bmask)<<(i&7));
|
||||||
}
|
}
|
||||||
|
|
||||||
//QB64 internal variable type flags (internally referenced by some C functions)
|
//QB64 internal variable type flags (internally referenced by some C functions)
|
||||||
|
@ -304,98 +305,98 @@ bptr64=(uint64*)(base+(i>>3));
|
||||||
#define ISOFFSETINBITS 16777216
|
#define ISOFFSETINBITS 16777216
|
||||||
|
|
||||||
struct ontimer_struct{
|
struct ontimer_struct{
|
||||||
uint8 allocated;
|
uint8 allocated;
|
||||||
uint32 id;//the event ID to trigger (0=no event)
|
uint32 id;//the event ID to trigger (0=no event)
|
||||||
int64 pass;//the value to pass to the triggered event (only applicable to ON ... CALL ...(x)
|
int64 pass;//the value to pass to the triggered event (only applicable to ON ... CALL ...(x)
|
||||||
uint8 active;//0=OFF, 1=ON, 2=STOP
|
uint8 active;//0=OFF, 1=ON, 2=STOP
|
||||||
uint8 state;//0=untriggered,1=triggered
|
uint8 state;//0=untriggered,1=triggered
|
||||||
double seconds;//how many seconds between events
|
double seconds;//how many seconds between events
|
||||||
double last_time;//the last time this event was triggered
|
double last_time;//the last time this event was triggered
|
||||||
};
|
};
|
||||||
|
|
||||||
struct onkey_struct{
|
struct onkey_struct{
|
||||||
uint32 id;//the event ID to trigger (0=no event)
|
uint32 id;//the event ID to trigger (0=no event)
|
||||||
int64 pass;//the value to pass to the triggered event (only applicable to ON ... CALL ...(x)
|
int64 pass;//the value to pass to the triggered event (only applicable to ON ... CALL ...(x)
|
||||||
uint8 active;//0=OFF, 1=ON, 2=STOP
|
uint8 active;//0=OFF, 1=ON, 2=STOP
|
||||||
uint8 state;//0=untriggered,1=triggered,2=in progress(TIMER only),2+=multiple events queued(KEY only)
|
uint8 state;//0=untriggered,1=triggered,2=in progress(TIMER only),2+=multiple events queued(KEY only)
|
||||||
uint32 keycode;//32-bit code, same as what _KEYHIT returns
|
uint32 keycode;//32-bit code, same as what _KEYHIT returns
|
||||||
uint32 keycode_alternate;//an alternate keycode which may also trigger event
|
uint32 keycode_alternate;//an alternate keycode which may also trigger event
|
||||||
uint8 key_scancode;
|
uint8 key_scancode;
|
||||||
uint8 key_flags;
|
uint8 key_flags;
|
||||||
//flags:
|
//flags:
|
||||||
//0 No keyboard flag, 1-3 Either Shift key, 4 Ctrl key, 8 Alt key,32 NumLock key,64 Caps Lock key, 128 Extended keys on a 101-key keyboard
|
//0 No keyboard flag, 1-3 Either Shift key, 4 Ctrl key, 8 Alt key,32 NumLock key,64 Caps Lock key, 128 Extended keys on a 101-key keyboard
|
||||||
//To specify multiple shift states, add the values together. For example, a value of 12 specifies that the user-defined key is used in combination with the Ctrl and Alt keys.
|
//To specify multiple shift states, add the values together. For example, a value of 12 specifies that the user-defined key is used in combination with the Ctrl and Alt keys.
|
||||||
qbs *text;
|
qbs *text;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct onstrig_struct{
|
struct onstrig_struct{
|
||||||
uint32 id;//the event ID to trigger (0=no event)
|
uint32 id;//the event ID to trigger (0=no event)
|
||||||
int64 pass;//the value to pass to the triggered event (only applicable to ON ... CALL ...(x)
|
int64 pass;//the value to pass to the triggered event (only applicable to ON ... CALL ...(x)
|
||||||
uint8 active;//0=OFF, 1=ON, 2=STOP
|
uint8 active;//0=OFF, 1=ON, 2=STOP
|
||||||
uint8 state;//0=untriggered,1=triggered,2=in progress(TIMER only),2+=multiple events queued(KEY only)
|
uint8 state;//0=untriggered,1=triggered,2=in progress(TIMER only),2+=multiple events queued(KEY only)
|
||||||
};
|
};
|
||||||
|
|
||||||
struct byte_element_struct
|
struct byte_element_struct
|
||||||
{
|
{
|
||||||
uint64 offset;
|
uint64 offset;
|
||||||
int32 length;
|
int32 length;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct device_struct{
|
struct device_struct{
|
||||||
int32 used;
|
int32 used;
|
||||||
int32 type;
|
int32 type;
|
||||||
//0=Unallocated
|
//0=Unallocated
|
||||||
//1=SDL joystick interface
|
//1=SDL joystick interface
|
||||||
//2=?
|
//2=?
|
||||||
qbs *name;
|
qbs *name;
|
||||||
int32 connected;
|
int32 connected;
|
||||||
int32 lastbutton;
|
int32 lastbutton;
|
||||||
int32 lastaxis;
|
int32 lastaxis;
|
||||||
int32 lastwheel;
|
int32 lastwheel;
|
||||||
//--------------
|
//--------------
|
||||||
int32 max_events;
|
int32 max_events;
|
||||||
int32 queued_events;
|
int32 queued_events;
|
||||||
uint8 *events;//the structure and size of the events depends greatly on the device and its capabilities
|
uint8 *events;//the structure and size of the events depends greatly on the device and its capabilities
|
||||||
int32 event_size;
|
int32 event_size;
|
||||||
//--------------
|
//--------------
|
||||||
uint8 STRIG_button_pressed[256];//checked and cleared by the STRIG function
|
uint8 STRIG_button_pressed[256];//checked and cleared by the STRIG function
|
||||||
//--------------
|
//--------------
|
||||||
uint8 id[1024];
|
uint8 id[1024];
|
||||||
/////SDL_Joystick *SDL_js;
|
/////SDL_Joystick *SDL_js;
|
||||||
int32 SDL_js_index;
|
int32 SDL_js_index;
|
||||||
int32 SDL_buttons;
|
int32 SDL_buttons;
|
||||||
int32 SDL_axes;
|
int32 SDL_axes;
|
||||||
int32 SDL_balls;
|
int32 SDL_balls;
|
||||||
int32 SDL_hats;
|
int32 SDL_hats;
|
||||||
};
|
};
|
||||||
#define QUEUED_EVENTS_LIMIT 1024
|
#define QUEUED_EVENTS_LIMIT 1024
|
||||||
|
|
||||||
struct mem_block{
|
struct mem_block{
|
||||||
ptrszint offset;
|
ptrszint offset;
|
||||||
ptrszint size;
|
ptrszint size;
|
||||||
int64 lock_id;//64-bit key, must be present at lock's offset or memory region is invalid
|
int64 lock_id;//64-bit key, must be present at lock's offset or memory region is invalid
|
||||||
ptrszint lock_offset;//pointer to lock
|
ptrszint lock_offset;//pointer to lock
|
||||||
int32 type;
|
int32 type;
|
||||||
/*
|
/*
|
||||||
memorytype (4 bytes, but only the first used, for flags):
|
memorytype (4 bytes, but only the first used, for flags):
|
||||||
1 integer values
|
1 integer values
|
||||||
2 unsigned (set in conjunction with integer)
|
2 unsigned (set in conjunction with integer)
|
||||||
4 floating point values
|
4 floating point values
|
||||||
8 char string(s) 'element-size is the memory size of 1 string
|
8 char string(s) 'element-size is the memory size of 1 string
|
||||||
*/
|
*/
|
||||||
ptrszint elementsize;
|
ptrszint elementsize;
|
||||||
int32 image;
|
int32 image;
|
||||||
};
|
};
|
||||||
struct mem_lock{
|
struct mem_lock{
|
||||||
uint64 id;
|
uint64 id;
|
||||||
int32 type;//required to know what action to take (if any) when a request is made to free the block
|
int32 type;//required to know what action to take (if any) when a request is made to free the block
|
||||||
//0=no security (eg. user defined block from _OFFSET)
|
//0=no security (eg. user defined block from _OFFSET)
|
||||||
//1=C-malloc'ed block
|
//1=C-malloc'ed block
|
||||||
//2=image
|
//2=image
|
||||||
//3=sub/function scope block
|
//3=sub/function scope block
|
||||||
//4=array
|
//4=array
|
||||||
//---- type specific variables follow ----
|
//---- type specific variables follow ----
|
||||||
void *offset;//used by malloc'ed blocks to free them
|
void *offset;//used by malloc'ed blocks to free them
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3484,10 +3484,6 @@ void AllocConsole(){
|
||||||
void FreeConsole(){
|
void FreeConsole(){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int32 errno;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int MessageBox2(int ignore,char* message,char* title,int type){
|
int MessageBox2(int ignore,char* message,char* title,int type){
|
||||||
|
|
8
internal/source/User Mods/Luke Stuff-ID_Includes.bi
Normal file
8
internal/source/User Mods/Luke Stuff-ID_Includes.bi
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
'Get Current Working Directory
|
||||||
|
clearid
|
||||||
|
id.n = "_CWD"
|
||||||
|
id.musthave = "$"
|
||||||
|
id.subfunc = 1
|
||||||
|
id.callname = "func__cwd"
|
||||||
|
id.ret = STRINGTYPE - ISPOINTER
|
||||||
|
regid
|
|
@ -1 +1,2 @@
|
||||||
|
'$INCLUDE:'internal/source/User Mods/Luke Stuff-ID_Includes.bi'
|
||||||
'$INCLUDE:'internal/source/User Mods/Steve Stuff-ID_Includes.bi'
|
'$INCLUDE:'internal/source/User Mods/Steve Stuff-ID_Includes.bi'
|
||||||
|
|
|
@ -43,19 +43,19 @@ if(_SUB_IDEASCIIBOX_INTEGER_CURRENTONE==NULL){
|
||||||
_SUB_IDEASCIIBOX_INTEGER_CURRENTONE=(int16*)mem_static_malloc(2);
|
_SUB_IDEASCIIBOX_INTEGER_CURRENTONE=(int16*)mem_static_malloc(2);
|
||||||
*_SUB_IDEASCIIBOX_INTEGER_CURRENTONE=0;
|
*_SUB_IDEASCIIBOX_INTEGER_CURRENTONE=0;
|
||||||
}
|
}
|
||||||
int32 *_SUB_IDEASCIIBOX_LONG_X=NULL;
|
int32 *_SUB_IDEASCIIBOX_LONG_Y=NULL;
|
||||||
if(_SUB_IDEASCIIBOX_LONG_X==NULL){
|
if(_SUB_IDEASCIIBOX_LONG_Y==NULL){
|
||||||
_SUB_IDEASCIIBOX_LONG_X=(int32*)mem_static_malloc(4);
|
_SUB_IDEASCIIBOX_LONG_Y=(int32*)mem_static_malloc(4);
|
||||||
*_SUB_IDEASCIIBOX_LONG_X=0;
|
*_SUB_IDEASCIIBOX_LONG_Y=0;
|
||||||
}
|
}
|
||||||
int64 fornext_value1863;
|
int64 fornext_value1863;
|
||||||
int64 fornext_finalvalue1863;
|
int64 fornext_finalvalue1863;
|
||||||
int64 fornext_step1863;
|
int64 fornext_step1863;
|
||||||
uint8 fornext_step_negative1863;
|
uint8 fornext_step_negative1863;
|
||||||
int32 *_SUB_IDEASCIIBOX_LONG_Y=NULL;
|
int32 *_SUB_IDEASCIIBOX_LONG_X=NULL;
|
||||||
if(_SUB_IDEASCIIBOX_LONG_Y==NULL){
|
if(_SUB_IDEASCIIBOX_LONG_X==NULL){
|
||||||
_SUB_IDEASCIIBOX_LONG_Y=(int32*)mem_static_malloc(4);
|
_SUB_IDEASCIIBOX_LONG_X=(int32*)mem_static_malloc(4);
|
||||||
*_SUB_IDEASCIIBOX_LONG_Y=0;
|
*_SUB_IDEASCIIBOX_LONG_X=0;
|
||||||
}
|
}
|
||||||
int64 fornext_value1865;
|
int64 fornext_value1865;
|
||||||
int64 fornext_finalvalue1865;
|
int64 fornext_finalvalue1865;
|
||||||
|
@ -128,6 +128,11 @@ if(_SUB_IDEASCIIBOX_LONG_ATALL==NULL){
|
||||||
_SUB_IDEASCIIBOX_LONG_ATALL=(int32*)mem_static_malloc(4);
|
_SUB_IDEASCIIBOX_LONG_ATALL=(int32*)mem_static_malloc(4);
|
||||||
*_SUB_IDEASCIIBOX_LONG_ATALL=0;
|
*_SUB_IDEASCIIBOX_LONG_ATALL=0;
|
||||||
}
|
}
|
||||||
|
int32 *_SUB_IDEASCIIBOX_LONG_EX=NULL;
|
||||||
|
if(_SUB_IDEASCIIBOX_LONG_EX==NULL){
|
||||||
|
_SUB_IDEASCIIBOX_LONG_EX=(int32*)mem_static_malloc(4);
|
||||||
|
*_SUB_IDEASCIIBOX_LONG_EX=0;
|
||||||
|
}
|
||||||
int16 *_SUB_IDEASCIIBOX_INTEGER_RET=NULL;
|
int16 *_SUB_IDEASCIIBOX_INTEGER_RET=NULL;
|
||||||
if(_SUB_IDEASCIIBOX_INTEGER_RET==NULL){
|
if(_SUB_IDEASCIIBOX_INTEGER_RET==NULL){
|
||||||
_SUB_IDEASCIIBOX_INTEGER_RET=(int16*)mem_static_malloc(2);
|
_SUB_IDEASCIIBOX_INTEGER_RET=(int16*)mem_static_malloc(2);
|
||||||
|
|
70871
internal/source/main.txt
70871
internal/source/main.txt
File diff suppressed because it is too large
Load diff
Binary file not shown.
31
qb64.bas
31
qb64.bas
|
@ -11966,10 +11966,10 @@ ws = _NEWIMAGE(640, 480, 32)
|
||||||
SCREEN temp
|
SCREEN temp
|
||||||
DIM CurrentASC(1 TO 16, 1 TO 16)
|
DIM CurrentASC(1 TO 16, 1 TO 16)
|
||||||
DIM CurrentOne AS INTEGER
|
DIM CurrentOne AS INTEGER
|
||||||
CLS , _RGB(100, 0, 200)
|
CLS , _RGB(0, 0, 170)
|
||||||
COLOR , _RGB(100, 0, 200)
|
COLOR , _RGB(0, 0, 170)
|
||||||
FOR x = 1 TO 16
|
FOR y = 1 TO 16
|
||||||
FOR y = 1 TO 16
|
FOR x = 1 TO 16
|
||||||
LINE (x * 40, 0)-(x * 40, 480), _RGB32(255, 255, 0)
|
LINE (x * 40, 0)-(x * 40, 480), _RGB32(255, 255, 0)
|
||||||
LINE (0, y * 30)-(640, y * 30), _RGB32(255, 255, 0)
|
LINE (0, y * 30)-(640, y * 30), _RGB32(255, 255, 0)
|
||||||
IF counter THEN _PRINTSTRING (x * 40 - 28, y * 30 - 23), CHR$(counter)
|
IF counter THEN _PRINTSTRING (x * 40 - 28, y * 30 - 23), CHR$(counter)
|
||||||
|
@ -11978,11 +11978,11 @@ FOR x = 1 TO 16
|
||||||
NEXT
|
NEXT
|
||||||
|
|
||||||
_DEST temp1
|
_DEST temp1
|
||||||
CLS , _RGB(100, 0, 200)
|
CLS , _RGB(0, 0, 170)
|
||||||
COLOR , _RGB(100, 0, 200)
|
COLOR , _RGB(0, 0, 170)
|
||||||
counter = 0
|
counter = 0
|
||||||
FOR x = 1 TO 16
|
FOR y = 1 TO 16
|
||||||
FOR y = 1 TO 16
|
FOR x = 1 TO 16
|
||||||
LINE (x * 40, 0)-(x * 40, 480), _RGB32(255, 255, 0)
|
LINE (x * 40, 0)-(x * 40, 480), _RGB32(255, 255, 0)
|
||||||
LINE (0, y * 30)-(640, y * 30), _RGB32(255, 255, 0)
|
LINE (0, y * 30)-(640, y * 30), _RGB32(255, 255, 0)
|
||||||
text$ = LTRIM$(STR$(counter))
|
text$ = LTRIM$(STR$(counter))
|
||||||
|
@ -12003,17 +12003,17 @@ DO
|
||||||
|
|
||||||
x = _MOUSEX \ 40 + 1 'If mouse moved, where are we now?
|
x = _MOUSEX \ 40 + 1 'If mouse moved, where are we now?
|
||||||
y = _MOUSEY \ 30 + 1
|
y = _MOUSEY \ 30 + 1
|
||||||
num = (x - 1) * 16 + y - 1
|
num = (y - 1) * 16 + x - 1
|
||||||
IF num = 0 THEN
|
IF num = 0 THEN
|
||||||
text$ = ""
|
text$ = ""
|
||||||
ELSE
|
ELSE
|
||||||
flashcounter = flashcounter + 1
|
flashcounter = flashcounter + 1
|
||||||
IF flashcounter > 30 THEN
|
IF flashcounter > 30 THEN
|
||||||
COLOR _RGB32(255, 255, 255), _RGB(100, 0, 200)
|
COLOR _RGB32(255, 255, 255), _RGB(0, 0, 170)
|
||||||
text$ = CHR$(num)
|
text$ = CHR$(num)
|
||||||
IF LEN(text$) = 1 THEN text$ = " " + text$ + " "
|
IF LEN(text$) = 1 THEN text$ = " " + text$ + " "
|
||||||
ELSE
|
ELSE
|
||||||
COLOR _RGB32(255, 0, 0), _RGB(100, 0, 200)
|
COLOR _RGB32(255, 255, 255), _RGB(0, 0, 170)
|
||||||
text$ = RTRIM$(LTRIM$(STR$(num)))
|
text$ = RTRIM$(LTRIM$(STR$(num)))
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
@ -12043,9 +12043,16 @@ DO
|
||||||
IF y < 1 THEN y = 1
|
IF y < 1 THEN y = 1
|
||||||
IF y > 16 THEN y = 16
|
IF y > 16 THEN y = 16
|
||||||
_DISPLAY
|
_DISPLAY
|
||||||
|
Ex = _EXIT
|
||||||
|
IF Ex THEN
|
||||||
|
_AUTODISPLAY
|
||||||
|
SCREEN 0: WIDTH w, h: _DEST 0: _DELAY .2
|
||||||
|
IF _RESIZE THEN donothing = atall
|
||||||
|
EXIT FUNCTION
|
||||||
|
END IF
|
||||||
LOOP UNTIL _MOUSEBUTTON(1)
|
LOOP UNTIL _MOUSEBUTTON(1)
|
||||||
|
|
||||||
ret% = (x - 1) * 16 + y - 1
|
ret% = (y - 1) * 16 + x - 1
|
||||||
IF ret% > 0 AND ret% < 255 THEN
|
IF ret% > 0 AND ret% < 255 THEN
|
||||||
l = idecy
|
l = idecy
|
||||||
a$ = idegetline(l)
|
a$ = idegetline(l)
|
||||||
|
|
Loading…
Reference in a new issue