1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-09-20 03:14:45 +00:00

Move _MK and _CV implementation functions to separate cpp

This commit is contained in:
Matthew Kilgore 2024-02-12 01:51:15 -05:00
parent 01b4209c1b
commit b9a4bec188
5 changed files with 574 additions and 545 deletions

View file

@ -6847,7 +6847,6 @@ int32 lock_display_required = 0;
#define cost_delay 0
uint32 cost = 0;
#include "msbin.c"
int64 build_int64(uint32 val2, uint32 val1) {
static int64 val;
@ -7202,276 +7201,6 @@ qbs *func_varptr_helper(uint8 type, uint16 offset) {
return tqbs;
}
qbs *func_mksmbf(float val) {
static qbs *tqbs;
tqbs = qbs_new(4, 1);
if (_fieeetomsbin(&val, (float *)tqbs->chr) == 1) {
error(5);
tqbs->len = 0;
}
return tqbs;
}
qbs *func_mkdmbf(double val) {
static qbs *tqbs;
tqbs = qbs_new(8, 1);
if (_dieeetomsbin(&val, (double *)tqbs->chr) == 1) {
error(5);
tqbs->len = 0;
}
return tqbs;
}
float func_cvsmbf(qbs *str) {
static float val;
if (str->len < 4) {
error(5);
return 0;
}
if (_fmsbintoieee((float *)str->chr, &val) == 1) {
error(5);
return 0;
}
return val;
}
double func_cvdmbf(qbs *str) {
static double val;
if (str->len < 8) {
error(5);
return 0;
}
if (_dmsbintoieee((double *)str->chr, &val) == 1) {
error(5);
return 0;
}
return val;
}
qbs *b2string(char v) {
static qbs *tqbs;
tqbs = qbs_new(1, 1);
*((char *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ub2string(char v) {
static qbs *tqbs;
tqbs = qbs_new(1, 1);
*((uint8 *)(tqbs->chr)) = v;
return tqbs;
}
qbs *i2string(int16 v) {
static qbs *tqbs;
tqbs = qbs_new(2, 1);
*((int16 *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ui2string(int16 v) {
static qbs *tqbs;
tqbs = qbs_new(2, 1);
*((uint16 *)(tqbs->chr)) = v;
return tqbs;
}
qbs *l2string(int32 v) {
static qbs *tqbs;
tqbs = qbs_new(4, 1);
*((int32 *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ul2string(uint32 v) {
static qbs *tqbs;
tqbs = qbs_new(4, 1);
*((uint32 *)(tqbs->chr)) = v;
return tqbs;
}
qbs *i642string(int64 v) {
static qbs *tqbs;
tqbs = qbs_new(8, 1);
*((int64 *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ui642string(uint64 v) {
static qbs *tqbs;
tqbs = qbs_new(8, 1);
*((uint64 *)(tqbs->chr)) = v;
return tqbs;
}
qbs *s2string(float v) {
static qbs *tqbs;
tqbs = qbs_new(4, 1);
*((float *)(tqbs->chr)) = v;
return tqbs;
}
qbs *d2string(double v) {
static qbs *tqbs;
tqbs = qbs_new(8, 1);
*((double *)(tqbs->chr)) = v;
return tqbs;
}
qbs *f2string(long double v) {
static qbs *tqbs;
tqbs = qbs_new(32, 1);
memset(tqbs->chr, 0, 32);
*((long double *)(tqbs->chr)) = v;
return tqbs;
}
qbs *o2string(ptrszint v) {
static qbs *tqbs;
tqbs = qbs_new(sizeof(ptrszint), 1);
memset(tqbs->chr, 0, sizeof(ptrszint));
*((ptrszint *)(tqbs->chr)) = v;
return tqbs;
}
qbs *uo2string(uptrszint v) {
static qbs *tqbs;
tqbs = qbs_new(sizeof(uptrszint), 1);
memset(tqbs->chr, 0, sizeof(uptrszint));
*((uptrszint *)(tqbs->chr)) = v;
return tqbs;
}
qbs *bit2string(uint32 bsize, int64 v) {
static qbs *tqbs;
tqbs = qbs_new(8, 1);
int64 bmask;
bmask = ~(-(((int64)1) << bsize));
*((int64 *)(tqbs->chr)) = v & bmask;
tqbs->len = (bsize + 7) >> 3;
return tqbs;
}
qbs *ubit2string(uint32 bsize, uint64 v) {
static qbs *tqbs;
int64 bmask;
tqbs = qbs_new(8, 1);
bmask = ~(-(((int64)1) << bsize));
*((uint64 *)(tqbs->chr)) = v & bmask;
tqbs->len = (bsize + 7) >> 3;
return tqbs;
}
char string2b(qbs *str) {
if (str->len < 1) {
error(5);
return 0;
} else {
return *((char *)str->chr);
}
}
uint8 string2ub(qbs *str) {
if (str->len < 1) {
error(5);
return 0;
} else {
return *((uint8 *)str->chr);
}
}
int16 string2i(qbs *str) {
if (str->len < 2) {
error(5);
return 0;
} else {
return *((int16 *)str->chr);
}
}
uint16 string2ui(qbs *str) {
if (str->len < 2) {
error(5);
return 0;
} else {
return *((uint16 *)str->chr);
}
}
int32 string2l(qbs *str) {
if (str->len < 4) {
error(5);
return 0;
} else {
return *((int32 *)str->chr);
}
}
uint32 string2ul(qbs *str) {
if (str->len < 4) {
error(5);
return 0;
} else {
return *((uint32 *)str->chr);
}
}
int64 string2i64(qbs *str) {
if (str->len < 8) {
error(5);
return 0;
} else {
return *((int64 *)str->chr);
}
}
uint64 string2ui64(qbs *str) {
if (str->len < 8) {
error(5);
return 0;
} else {
return *((uint64 *)str->chr);
}
}
float string2s(qbs *str) {
if (str->len < 4) {
error(5);
return 0;
} else {
return *((float *)str->chr);
}
}
double string2d(qbs *str) {
if (str->len < 8) {
error(5);
return 0;
} else {
return *((double *)str->chr);
}
}
long double string2f(qbs *str) {
if (str->len < 32) {
error(5);
return 0;
} else {
return *((long double *)str->chr);
}
}
ptrszint string2o(qbs *str) {
if (str->len < sizeof(ptrszint)) {
error(5);
return 0;
} else {
return *((ptrszint *)str->chr);
}
}
uptrszint string2uo(qbs *str) {
if (str->len < sizeof(uptrszint)) {
error(5);
return 0;
} else {
return *((uptrszint *)str->chr);
}
}
uint64 string2ubit(qbs *str, uint32 bsize) {
int64 bmask;
if (str->len < ((bsize + 7) >> 3)) {
error(5);
return 0;
}
bmask = ~(-(((int64)1) << bsize));
return (*(uint64 *)str->chr) & bmask;
}
int64 string2bit(qbs *str, uint32 bsize) {
int64 bmask, bval64;
if (str->len < ((bsize + 7) >> 3)) {
error(5);
return 0;
}
bmask = ~(-(((int64)1) << bsize));
bval64 = (*(uint64 *)str->chr) & bmask;
if (bval64 & (((int64)1) << (bsize - 1)))
return (bval64 | (~bmask));
return bval64;
}
qbs *qbs_inkey() {
if (is_error_pending())
return qbs_new(0, 1);

View file

@ -13,6 +13,7 @@ libqb-objs-y += $(PATH_LIBQB)/src/rounding.o
libqb-objs-y += $(PATH_LIBQB)/src/qbs.o
libqb-objs-y += $(PATH_LIBQB)/src/qbs_str.o
libqb-objs-y += $(PATH_LIBQB)/src/qbs_cmem.o
libqb-objs-y += $(PATH_LIBQB)/src/qbs_mk_cv.o
libqb-objs-y += $(PATH_LIBQB)/src/string_functions.o
libqb-objs-$(DEP_HTTP) += $(PATH_LIBQB)/src/http.o

View file

@ -0,0 +1,42 @@
#pragma once
#include <stdint.h>
#include "qbs.h"
qbs *func_mksmbf(float val);
qbs *func_mkdmbf(double val);
float func_cvsmbf(qbs *str);
double func_cvdmbf(qbs *str);
qbs *b2string(char v);
qbs *ub2string(char v);
qbs *i2string(int16_t v);
qbs *ui2string(int16_t v);
qbs *l2string(int32_t v);
qbs *ul2string(uint32_t v);
qbs *i642string(int64_t v);
qbs *ui642string(uint64_t v);
qbs *s2string(float v);
qbs *d2string(double v);
qbs *f2string(long double v);
qbs *o2string(intptr_t v);
qbs *uo2string(uintptr_t v);
qbs *bit2string(uint32_t bsize, int64_t v);
qbs *ubit2string(uint32_t bsize, uint64_t v);
char string2b(qbs *str);
uint8_t string2ub(qbs *str);
int16_t string2i(qbs *str);
uint16_t string2ui(qbs *str);
int32_t string2l(qbs *str);
uint32_t string2ul(qbs *str);
int64_t string2i64(qbs *str);
uint64_t string2ui64(qbs *str);
float string2s(qbs *str);
double string2d(qbs *str);
long double string2f(qbs *str);
intptr_t string2o(qbs *str);
uintptr_t string2uo(qbs *str);
uint64_t string2ubit(qbs *str, uint32_t bsize);
int64_t string2bit(qbs *str, uint32_t bsize);

View file

@ -1,3 +1,13 @@
#include "libqb-common.h"
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "error_handle.h"
#include "qbs-mk-cv.h"
//
// The following are implementations of Microsoft RTL functions not
// include in the Borland RTL.
@ -31,14 +41,12 @@
//
//--------------------------------------------------------------------
//#include <string.h> /* for strncpy */
int32 _fmsbintoieee(float *src4, float *dest4) {
static int32_t _fmsbintoieee(float *src4, float *dest4) {
unsigned char *msbin = (unsigned char *)src4;
unsigned char *ieee = (unsigned char *)dest4;
unsigned char sign = 0x00;
unsigned char ieee_exp = 0x00;
int32 i;
int32_t i;
/* MS Binary Format */
/* byte order => m3 | m2 | m1 | exponent */
@ -87,12 +95,12 @@ int32 _fmsbintoieee(float *src4, float *dest4) {
return 0;
}
int32 _fieeetomsbin(float *src4, float *dest4) {
static int32_t _fieeetomsbin(float *src4, float *dest4) {
unsigned char *ieee = (unsigned char *)src4;
unsigned char *msbin = (unsigned char *)dest4;
unsigned char sign = 0x00;
unsigned char msbin_exp = 0x00;
int32 i;
int32_t i;
/* See _fmsbintoieee() for details of formats */
sign = ieee[3] & 0x80;
@ -118,12 +126,12 @@ int32 _fieeetomsbin(float *src4, float *dest4) {
return 0;
}
int32 _dmsbintoieee(double *src8, double *dest8) {
static int32_t _dmsbintoieee(double *src8, double *dest8) {
unsigned char msbin[8];
unsigned char *ieee = (unsigned char *)dest8;
unsigned char sign = 0x00;
uint32 ieee_exp = 0x0000;
int32 i;
uint32_t ieee_exp = 0x0000;
int32_t i;
/* A manipulatable copy of the msbin number */
memcpy(msbin, src8, 8); // strncpy((char *)msbin,(char *)src8,8);
@ -194,13 +202,13 @@ int32 _dmsbintoieee(double *src8, double *dest8) {
return 0;
}
int32 _dieeetomsbin(double *src8, double *dest8) {
static int32_t _dieeetomsbin(double *src8, double *dest8) {
unsigned char ieee[8];
unsigned char *msbin = (unsigned char *)dest8;
unsigned char sign = 0x00;
unsigned char any_on = 0x00;
uint32 msbin_exp = 0x0000;
int32 i;
uint32_t msbin_exp = 0x0000;
int32_t i;
/* Make a clobberable copy of the source number */
memcpy(ieee, src8, 8); // strncpy((char *)ieee,(char *)src8,8);
@ -238,3 +246,285 @@ int32 _dieeetomsbin(double *src8, double *dest8) {
return 0;
}
qbs *func_mksmbf(float val) {
qbs *tqbs = qbs_new(4, 1);
if (_fieeetomsbin(&val, (float *)tqbs->chr) == 1) {
error(5);
tqbs->len = 0;
}
return tqbs;
}
qbs *func_mkdmbf(double val) {
qbs *tqbs = qbs_new(8, 1);
if (_dieeetomsbin(&val, (double *)tqbs->chr) == 1) {
error(5);
tqbs->len = 0;
}
return tqbs;
}
float func_cvsmbf(qbs *str) {
float val;
if (str->len < 4) {
error(5);
return 0;
}
if (_fmsbintoieee((float *)str->chr, &val) == 1) {
error(5);
return 0;
}
return val;
}
double func_cvdmbf(qbs *str) {
double val;
if (str->len < 8) {
error(5);
return 0;
}
if (_dmsbintoieee((double *)str->chr, &val) == 1) {
error(5);
return 0;
}
return val;
}
qbs *b2string(char v) {
qbs *tqbs = qbs_new(1, 1);
*((char *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ub2string(char v) {
qbs *tqbs = qbs_new(1, 1);
*((uint8_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *i2string(int16_t v) {
qbs *tqbs = qbs_new(2, 1);
*((int16_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ui2string(int16_t v) {
qbs *tqbs = qbs_new(2, 1);
*((uint16_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *l2string(int32_t v) {
qbs *tqbs = qbs_new(4, 1);
*((int32_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ul2string(uint32_t v) {
qbs *tqbs = qbs_new(4, 1);
*((uint32_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *i642string(int64_t v) {
qbs *tqbs = qbs_new(8, 1);
*((int64_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *ui642string(uint64_t v) {
qbs *tqbs = qbs_new(8, 1);
*((uint64_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *s2string(float v) {
qbs *tqbs = qbs_new(4, 1);
*((float *)(tqbs->chr)) = v;
return tqbs;
}
qbs *d2string(double v) {
qbs *tqbs = qbs_new(8, 1);
*((double *)(tqbs->chr)) = v;
return tqbs;
}
qbs *f2string(long double v) {
qbs *tqbs = qbs_new(32, 1);
memset(tqbs->chr, 0, 32);
*((long double *)(tqbs->chr)) = v;
return tqbs;
}
qbs *o2string(intptr_t v) {
qbs *tqbs = qbs_new(sizeof(intptr_t), 1);
memset(tqbs->chr, 0, sizeof(intptr_t));
*((intptr_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *uo2string(uintptr_t v) {
qbs *tqbs = qbs_new(sizeof(uintptr_t), 1);
memset(tqbs->chr, 0, sizeof(uintptr_t));
*((uintptr_t *)(tqbs->chr)) = v;
return tqbs;
}
qbs *bit2string(uint32_t bsize, int64_t v) {
qbs *tqbs = qbs_new(8, 1);
int64_t bmask;
bmask = ~(-(((int64_t)1) << bsize));
*((int64_t *)(tqbs->chr)) = v & bmask;
tqbs->len = (bsize + 7) >> 3;
return tqbs;
}
qbs *ubit2string(uint32_t bsize, uint64_t v) {
qbs *tqbs = qbs_new(8, 1);
int64_t bmask = ~(-(((int64_t)1) << bsize));
*((uint64_t *)(tqbs->chr)) = v & bmask;
tqbs->len = (bsize + 7) >> 3;
return tqbs;
}
char string2b(qbs *str) {
if (str->len < 1) {
error(5);
return 0;
} else {
return *((char *)str->chr);
}
}
uint8_t string2ub(qbs *str) {
if (str->len < 1) {
error(5);
return 0;
} else {
return *((uint8_t *)str->chr);
}
}
int16_t string2i(qbs *str) {
if (str->len < 2) {
error(5);
return 0;
} else {
return *((int16_t *)str->chr);
}
}
uint16_t string2ui(qbs *str) {
if (str->len < 2) {
error(5);
return 0;
} else {
return *((uint16_t *)str->chr);
}
}
int32_t string2l(qbs *str) {
if (str->len < 4) {
error(5);
return 0;
} else {
return *((int32_t *)str->chr);
}
}
uint32_t string2ul(qbs *str) {
if (str->len < 4) {
error(5);
return 0;
} else {
return *((uint32_t *)str->chr);
}
}
int64_t string2i64(qbs *str) {
if (str->len < 8) {
error(5);
return 0;
} else {
return *((int64_t *)str->chr);
}
}
uint64_t string2ui64(qbs *str) {
if (str->len < 8) {
error(5);
return 0;
} else {
return *((uint64_t *)str->chr);
}
}
float string2s(qbs *str) {
if (str->len < 4) {
error(5);
return 0;
} else {
return *((float *)str->chr);
}
}
double string2d(qbs *str) {
if (str->len < 8) {
error(5);
return 0;
} else {
return *((double *)str->chr);
}
}
long double string2f(qbs *str) {
if (str->len < 32) {
error(5);
return 0;
} else {
return *((long double *)str->chr);
}
}
intptr_t string2o(qbs *str) {
if (str->len < sizeof(intptr_t)) {
error(5);
return 0;
} else {
return *((intptr_t *)str->chr);
}
}
uintptr_t string2uo(qbs *str) {
if (str->len < sizeof(uintptr_t)) {
error(5);
return 0;
} else {
return *((uintptr_t *)str->chr);
}
}
uint64_t string2ubit(qbs *str, uint32_t bsize) {
int64_t bmask;
if (str->len < ((bsize + 7) >> 3)) {
error(5);
return 0;
}
bmask = ~(-(((int64_t)1) << bsize));
return (*(uint64_t *)str->chr) & bmask;
}
int64_t string2bit(qbs *str, uint32_t bsize) {
int64_t bmask, bval64;
if (str->len < ((bsize + 7) >> 3)) {
error(5);
return 0;
}
bmask = ~(-(((int64_t)1) << bsize));
bval64 = (*(uint64_t *)str->chr) & bmask;
if (bval64 & (((int64_t)1) << (bsize - 1)))
return (bval64 | (~bmask));
return bval64;
}

View file

@ -11,6 +11,7 @@
#include "gui.h"
#include "image.h"
#include "qbs.h"
#include "qbs-mk-cv.h"
#include "error_handle.h"
#include "mem.h"
#include "rounding.h"
@ -250,14 +251,6 @@ extern int32 func_peek(int32 offset);
extern void sub_poke(int32 offset, int32 value);
extern void more_return_points();
extern qbs *func_varptr_helper(uint8 type, uint16 offset);
extern qbs *func_mksmbf(float val);
extern qbs *func_mkdmbf(double val);
extern float func_cvsmbf(qbs *str);
extern double func_cvdmbf(qbs *str);
extern qbs *bit2string(uint32 bsize, int64 v);
extern qbs *ubit2string(uint32 bsize, uint64 v);
extern uint64 string2ubit(qbs *str, uint32 bsize);
extern int64 string2bit(qbs *str, uint32 bsize);
extern void sub_lset(qbs *dest, qbs *source);
extern void sub_rset(qbs *dest, qbs *source);
extern qbs *func_space(int32 spaces);
@ -507,32 +500,6 @@ extern int32 print_using_double(qbs *format, double value, int32 start,
qbs *output);
extern int32 print_using_float(qbs *format, long double value, int32 start,
qbs *output);
extern qbs *b2string(char v);
extern qbs *ub2string(char v);
extern qbs *i2string(int16 v);
extern qbs *ui2string(int16 v);
extern qbs *l2string(int32 v);
extern qbs *ul2string(uint32 v);
extern qbs *i642string(int64 v);
extern qbs *ui642string(uint64 v);
extern qbs *s2string(float v);
extern qbs *d2string(double v);
extern qbs *f2string(long double v);
extern qbs *o2string(ptrszint v);
extern qbs *uo2string(uptrszint v);
extern char string2b(qbs *str);
extern uint8 string2ub(qbs *str);
extern int16 string2i(qbs *str);
extern uint16 string2ui(qbs *str);
extern int32 string2l(qbs *str);
extern uint32 string2ul(qbs *str);
extern int64 string2i64(qbs *str);
extern uint64 string2ui64(qbs *str);
extern float string2s(qbs *str);
extern double string2d(qbs *str);
extern long double string2f(qbs *str);
extern ptrszint string2o(qbs *str);
extern uptrszint string2uo(qbs *str);
// Cobalt(aka Dave) added the next 2 lines
uint64 func__shr(uint64 a1, int b1);
uint64 func__shl(uint64 a1, int b1);