mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-06-29 11:40:38 +00:00
Merge pull request #444 from QB64-Phoenix-Edition/adler-crc-hash
Adler crc hash
This commit is contained in:
commit
781250bf54
|
@ -9,5 +9,7 @@
|
|||
|
||||
struct qbs;
|
||||
|
||||
uint32_t func__adler32(qbs *text);
|
||||
uint32_t func__crc32(qbs *text);
|
||||
qbs *func__deflate(qbs *text);
|
||||
qbs *func__inflate(qbs *text, int64_t originalsize, int32_t passed);
|
||||
|
|
|
@ -49,6 +49,7 @@ bool FontRenderTextASCII(int32_t fh, const uint8_t *codepoint, int32_t codepoint
|
|||
int32_t FontPrintWidthUTF32(int32_t fh, const uint32_t *codepoint, int32_t codepoints);
|
||||
int32_t FontPrintWidthASCII(int32_t fh, const uint8_t *codepoint, int32_t codepoints);
|
||||
|
||||
qbs *func__md5(qbs *text);
|
||||
int32_t func__UFontHeight(int32_t qb64_fh, int32_t passed);
|
||||
int32_t func__UPrintWidth(const qbs *text, int32_t utf_encoding, int32_t qb64_fh, int32_t passed);
|
||||
int32_t func__ULineSpacing(int32_t qb64_fh, int32_t passed);
|
||||
|
|
|
@ -10,7 +10,7 @@ MINIZ_OBJS := $(patsubst %.c,$(PATH_INTERNAL_C)/parts/compression/%.o,$(MINIZ_SR
|
|||
COMPRESSION_OBJS := $(patsubst %.cpp,$(PATH_INTERNAL_C)/parts/compression/%.o,$(COMPRESSION_SRCS))
|
||||
|
||||
$(PATH_INTERNAL_C)/parts/compression/%.o: $(PATH_INTERNAL_C)/parts/compression/%.c
|
||||
$(CC) -O2 $(CFLAGS) -DDEPENDENCY_CONSOLE_ONLY -Wall $< -c -o $@
|
||||
$(CC) -O2 $(CFLAGS) -DDEPENDENCY_CONSOLE_ONLY -DMINIZ_NO_STDIO -DMINIZ_NO_TIME -DMINIZ_NO_ARCHIVE_APIS -DMINIZ_NO_ARCHIVE_WRITING_APIS -Wall $< -c -o $@
|
||||
|
||||
$(PATH_INTERNAL_C)/parts/compression/%.o: $(PATH_INTERNAL_C)/parts/compression/%.cpp
|
||||
$(CXX) -O2 $(CXXFLAGS) -DDEPENDENCY_CONSOLE_ONLY -Wall $< -c -o $@
|
||||
|
|
|
@ -7,6 +7,16 @@
|
|||
#include "../../libqb.h"
|
||||
#include "miniz.h"
|
||||
|
||||
uint32_t func__adler32(qbs *text) {
|
||||
if (!text->len) return 1;
|
||||
return (uint32_t) adler32(1, text->chr, text->len);
|
||||
}
|
||||
|
||||
uint32_t func__crc32(qbs *text) {
|
||||
if (!text->len) return 0;
|
||||
return (uint32_t) crc32(0, text->chr, text->len);
|
||||
}
|
||||
|
||||
qbs *func__deflate(qbs *text) {
|
||||
uLongf filesize = (uint32_t)text->len; // length of the text
|
||||
uLongf compsize = compressBound(filesize);
|
||||
|
|
|
@ -14,6 +14,9 @@
|
|||
#include <cstdio>
|
||||
#include <ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
extern "C" {
|
||||
#include "freetype/md5.h"
|
||||
}
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
|
@ -1006,6 +1009,27 @@ bool FontRenderTextASCII(int32_t fh, const uint8_t *codepoint, int32_t codepoint
|
|||
return false;
|
||||
}
|
||||
|
||||
/// @brief Expose freetype's MD5 procedure for public use
|
||||
/// @param text The message to build the MD5 hash of
|
||||
/// @return The generated MD5 hash as hexadecimal string
|
||||
qbs *func__md5(qbs *text) {
|
||||
{
|
||||
MD5_CTX ctx;
|
||||
unsigned char md5[16];
|
||||
qbs *res;
|
||||
int i;
|
||||
|
||||
MD5_Init(&ctx);
|
||||
if (text->len) MD5_Update(&ctx, text->chr, text->len);
|
||||
MD5_Final(md5,&ctx);
|
||||
|
||||
res = qbs_new(32, 1);
|
||||
for (i = 0; i < 16; i++) sprintf((char*)&res->chr[i*2], "%02X", md5[i]);
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
/// @brief Return the true font height in pixel
|
||||
/// @param qb64_fh A QB64 font handle (this can be a builtin font as well)
|
||||
/// @param passed Optional arguments flag
|
||||
|
|
|
@ -1411,6 +1411,18 @@ id.ret = LONGTYPE - ISPOINTER
|
|||
id.hr_syntax = "_FONT[(imageHandle&)]"
|
||||
regid
|
||||
|
||||
clearid
|
||||
id.n = qb64prefix$ + "Md5"
|
||||
id.Dependency=DEPENDENCY_LOADFONT
|
||||
id.musthave = "$"
|
||||
id.subfunc = 1
|
||||
id.callname = "func__md5"
|
||||
id.args = 1
|
||||
id.arg = MKL$(STRINGTYPE - ISPOINTER)
|
||||
id.ret = STRINGTYPE - ISPOINTER
|
||||
id.hr_syntax = "_MD5$(dataString$)"
|
||||
regid
|
||||
|
||||
clearid
|
||||
id.n = qb64prefix$ + "PrintString"
|
||||
id.subfunc = 2
|
||||
|
@ -3814,6 +3826,28 @@ id.hr_syntax = "_ROR(numericalVariable, numericalValue)"
|
|||
regid
|
||||
' a740g: end of ROR & ROL additions
|
||||
|
||||
clearid
|
||||
id.n = qb64prefix$ + "Adler32"
|
||||
id.Dependency=DEPENDENCY_ZLIB
|
||||
id.subfunc = 1
|
||||
id.callname = "func__adler32"
|
||||
id.args = 1
|
||||
id.arg = MKL$(STRINGTYPE - ISPOINTER)
|
||||
id.ret = ULONGTYPE - ISPOINTER
|
||||
id.hr_syntax = "_ADLER32(dataString$)"
|
||||
regid
|
||||
|
||||
clearid
|
||||
id.n = qb64prefix$ + "Crc32"
|
||||
id.Dependency=DEPENDENCY_ZLIB
|
||||
id.subfunc = 1
|
||||
id.callname = "func__crc32"
|
||||
id.args = 1
|
||||
id.arg = MKL$(STRINGTYPE - ISPOINTER)
|
||||
id.ret = ULONGTYPE - ISPOINTER
|
||||
id.hr_syntax = "_CRC32(dataString$)"
|
||||
regid
|
||||
|
||||
clearid
|
||||
id.n = qb64prefix$ + "Deflate"
|
||||
id.Dependency=DEPENDENCY_ZLIB
|
||||
|
|
|
@ -4,6 +4,6 @@ listOfKeywords$ = listOfKeywords$ + "_ERRORLINE@_ERRORMESSAGE$@_EXIT@_EXPLICIT@_
|
|||
listOfKeywords$ = listOfKeywords$ + "_GLCOPYTEXSUBIMAGE2D@_GLCULLFACE@_GLDELETELISTS@_GLDELETETEXTURES@_GLDEPTHFUNC@_GLDEPTHMASK@_GLDEPTHRANGE@_GLDISABLE@_GLDISABLECLIENTSTATE@_GLDRAWARRAYS@_GLDRAWBUFFER@_GLDRAWELEMENTS@_GLDRAWPIXELS@_GLEDGEFLAG@_GLEDGEFLAGPOINTER@_GLEDGEFLAGV@_GLENABLE@_GLENABLECLIENTSTATE@_GLEND@_GLENDLIST@_GLEVALCOORD1D@_GLEVALCOORD1DV@_GLEVALCOORD1F@_GLEVALCOORD1FV@_GLEVALCOORD2D@_GLEVALCOORD2DV@_GLEVALCOORD2F@_GLEVALCOORD2FV@_GLEVALMESH1@_GLEVALMESH2@_GLEVALPOINT1@_GLEVALPOINT2@_GLFEEDBACKBUFFER@_GLFINISH@_GLFLUSH@_GLFOGF@_GLFOGFV@_GLFOGI@_GLFOGIV@_GLFRONTFACE@_GLFRUSTUM@_GLGENLISTS@_GLGENTEXTURES@_GLGETBOOLEANV@_GLGETCLIPPLANE@_GLGETDOUBLEV@_GLGETERROR@_GLGETFLOATV@_GLGETINTEGERV@_GLGETLIGHTFV@_GLGETLIGHTIV@_GLGETMAPDV@_GLGETMAPFV@_GLGETMAPIV@_GLGETMATERIALFV@_GLGETMATERIALIV@_GLGETPIXELMAPFV@_GLGETPIXELMAPUIV@_GLGETPIXELMAPUSV@_GLGETPOINTERV@_GLGETPOLYGONSTIPPLE@_GLGETSTRING@_GLGETTEXENVFV@_GLGETTEXENVIV@_GLGETTEXGENDV@_GLGETTEXGENFV@_GLGETTEXGENIV@_GLGETTEXIMAGE@_GLGETTEXLEVELPARAMETERFV@_GLGETTEXLEVELPARAMETERIV@_GLGETTEXPARAMETERFV@_GLGETTEXPARAMETERIV@_GLHINT@_GLINDEXMASK@_GLINDEXPOINTER@_GLINDEXD@_GLINDEXDV@_GLINDEXF@_GLINDEXFV@_GLINDEXI@_GLINDEXIV@_GLINDEXS@_GLINDEXSV@_GLINDEXUB@_GLINDEXUBV@_GLINITNAMES@_GLINTERLEAVEDARRAYS@_GLISENABLED@_GLISLIST@_GLISTEXTURE@_GLLIGHTMODELF@_GLLIGHTMODELFV@_GLLIGHTMODELI@_GLLIGHTMODELIV@_GLLIGHTF@_GLLIGHTFV@_GLLIGHTI@_GLLIGHTIV@_GLLINESTIPPLE@_GLLINEWIDTH@_GLLISTBASE@_GLLOADIDENTITY@_GLLOADMATRIXD@_GLLOADMATRIXF@_GLLOADNAME@_GLLOGICOP@_GLMAP1D@_GLMAP1F@_GLMAP2D@_GLMAP2F@_GLMAPGRID1D@_GLMAPGRID1F@_GLMAPGRID2D@_GLMAPGRID2F@_GLMATERIALF@_GLMATERIALFV@_GLMATERIALI@_GLMATERIALIV@_GLMATRIXMODE@_GLMULTMATRIXD@_GLMULTMATRIXF@_GLNEWLIST@_GLNORMAL3B@_GLNORMAL3BV@_GLNORMAL3D@_GLNORMAL3DV@_GLNORMAL3F@_GLNORMAL3FV@_GLNORMAL3I@_GLNORMAL3IV@_GLNORMAL3S@_GLNORMAL3SV@_GLNORMALPOINTER@_GLORTHO@_GLPASSTHROUGH@_GLPIXELMAPFV@_GLPIXELMAPUIV@_GLPIXELMAPUSV@_GLPIXELSTOREF@_GLPIXELSTOREI@_GLPIXELTRANSFERF@_GLPIXELTRANSFERI@_GLPIXELZOOM@_GLPOINTSIZE@_GLPOLYGONMODE@_GLPOLYGONOFFSET@_GLPOLYGONSTIPPLE@"
|
||||
listOfKeywords$ = listOfKeywords$ + "_GLPOPATTRIB@_GLPOPCLIENTATTRIB@_GLPOPMATRIX@_GLPOPNAME@_GLPRIORITIZETEXTURES@_GLPUSHATTRIB@_GLPUSHCLIENTATTRIB@_GLPUSHMATRIX@_GLPUSHNAME@_GLRASTERPOS2D@_GLRASTERPOS2DV@_GLRASTERPOS2F@_GLRASTERPOS2FV@_GLRASTERPOS2I@_GLRASTERPOS2IV@_GLRASTERPOS2S@_GLRASTERPOS2SV@_GLRASTERPOS3D@_GLRASTERPOS3DV@_GLRASTERPOS3F@_GLRASTERPOS3FV@_GLRASTERPOS3I@_GLRASTERPOS3IV@_GLRASTERPOS3S@_GLRASTERPOS3SV@_GLRASTERPOS4D@_GLRASTERPOS4DV@_GLRASTERPOS4F@_GLRASTERPOS4FV@_GLRASTERPOS4I@_GLRASTERPOS4IV@_GLRASTERPOS4S@_GLRASTERPOS4SV@_GLREADBUFFER@_GLREADPIXELS@_GLRECTD@_GLRECTDV@_GLRECTF@_GLRECTFV@_GLRECTI@_GLRECTIV@_GLRECTS@_GLRECTSV@_GLRENDERMODE@_GLROTATED@_GLROTATEF@_GLSCALED@_GLSCALEF@_GLSCISSOR@_GLSELECTBUFFER@_GLSHADEMODEL@_GLSTENCILFUNC@_GLSTENCILMASK@_GLSTENCILOP@_GLTEXCOORD1D@_GLTEXCOORD1DV@_GLTEXCOORD1F@_GLTEXCOORD1FV@_GLTEXCOORD1I@_GLTEXCOORD1IV@_GLTEXCOORD1S@_GLTEXCOORD1SV@_GLTEXCOORD2D@_GLTEXCOORD2DV@_GLTEXCOORD2F@_GLTEXCOORD2FV@_GLTEXCOORD2I@_GLTEXCOORD2IV@_GLTEXCOORD2S@_GLTEXCOORD2SV@_GLTEXCOORD3D@_GLTEXCOORD3DV@_GLTEXCOORD3F@_GLTEXCOORD3FV@_GLTEXCOORD3I@_GLTEXCOORD3IV@_GLTEXCOORD3S@_GLTEXCOORD3SV@_GLTEXCOORD4D@_GLTEXCOORD4DV@_GLTEXCOORD4F@_GLTEXCOORD4FV@_GLTEXCOORD4I@_GLTEXCOORD4IV@_GLTEXCOORD4S@_GLTEXCOORD4SV@_GLTEXCOORDPOINTER@_GLTEXENVF@_GLTEXENVFV@_GLTEXENVI@_GLTEXENVIV@_GLTEXGEND@_GLTEXGENDV@_GLTEXGENF@_GLTEXGENFV@_GLTEXGENI@_GLTEXGENIV@_GLTEXIMAGE1D@_GLTEXIMAGE2D@_GLTEXPARAMETERF@_GLTEXPARAMETERFV@_GLTEXPARAMETERI@_GLTEXPARAMETERIV@_GLTEXSUBIMAGE1D@_GLTEXSUBIMAGE2D@_GLTRANSLATED@_GLTRANSLATEF@_GLVERTEX2D@_GLVERTEX2DV@_GLVERTEX2F@_GLVERTEX2FV@_GLVERTEX2I@_GLVERTEX2IV@_GLVERTEX2S@_GLVERTEX2SV@_GLVERTEX3D@_GLVERTEX3DV@_GLVERTEX3F@_GLVERTEX3FV@_GLVERTEX3I@_GLVERTEX3IV@_GLVERTEX3S@_GLVERTEX3SV@_GLVERTEX4D@_GLVERTEX4DV@_GLVERTEX4F@_GLVERTEX4FV@_GLVERTEX4I@_GLVERTEX4IV@_GLVERTEX4S@_GLVERTEX4SV@_GLVERTEXPOINTER@_GLVIEWPORT@SMOOTH@STRETCH@_ANTICLOCKWISE@_BEHIND@_CLEAR@_FILLBACKGROUND@_GLUPERSPECTIVE@_HARDWARE@_HARDWARE1@_KEEPBACKGROUND@_NONE@_OFF@_ONLY@_ONLYBACKGROUND@_ONTOP@_SEAMLESS@_SMOOTH@_SMOOTHSHRUNK@_SMOOTHSTRETCHED@"
|
||||
listOfKeywords$ = listOfKeywords$ + "_SOFTWARE@_SQUAREPIXELS@_STRETCH@_ALLOWFULLSCREEN@_ALL@_ECHO@_INSTRREV@_TRIM$@_ACCEPTFILEDROP@_FINISHDROP@_TOTALDROPPEDFILES@_DROPPEDFILE@_DROPPEDFILE$@_SHR@_SHL@_ROR@_ROL@"
|
||||
listOfKeywords$ = listOfKeywords$ + "_DEFLATE$@_INFLATE$@_READBIT@_RESETBIT@_SETBIT@_TOGGLEBIT@$ASSERTS@CONSOLE@_ASSERT@_CAPSLOCK@_NUMLOCK@_SCROLLLOCK@_TOGGLE@_CONSOLEFONT@_CONSOLECURSOR@_CONSOLEINPUT@_CINP@$NOPREFIX@$COLOR@$DEBUG@$EMBED@_EMBEDDED$@_ENVIRONCOUNT@$UNSTABLE@$MIDISOUNDFONT@"
|
||||
listOfKeywords$ = listOfKeywords$ + "_ADLER32@_CRC32@_MD5$@_DEFLATE$@_INFLATE$@_READBIT@_RESETBIT@_SETBIT@_TOGGLEBIT@$ASSERTS@CONSOLE@_ASSERT@_CAPSLOCK@_NUMLOCK@_SCROLLLOCK@_TOGGLE@_CONSOLEFONT@_CONSOLECURSOR@_CONSOLEINPUT@_CINP@$NOPREFIX@$COLOR@$DEBUG@$EMBED@_EMBEDDED$@_ENVIRONCOUNT@$UNSTABLE@$MIDISOUNDFONT@"
|
||||
listOfKeywords$ = listOfKeywords$ + "_NOTIFYPOPUP@_MESSAGEBOX@_INPUTBOX$@_SELECTFOLDERDIALOG$@_COLORCHOOSERDIALOG@_OPENFILEDIALOG$@_SAVEFILEDIALOG$@_SAVEIMAGE@_FILES$@_FULLPATH$@"
|
||||
listOfKeywords$ = listOfKeywords$ + "_STATUSCODE@_SNDNEW@_SCALEDWIDTH@_SCALEDHEIGHT@_UFONTHEIGHT@_UPRINTWIDTH@_ULINESPACING@_UPRINTSTRING@_UCHARPOS@"
|
||||
|
|
21
tests/compile_tests/hash/test.bas
Normal file
21
tests/compile_tests/hash/test.bas
Normal file
|
@ -0,0 +1,21 @@
|
|||
$CONSOLE
|
||||
_DEST _CONSOLE
|
||||
|
||||
t$ = "QB64 Phoenix Edition"
|
||||
PRINT " Text: "; t$
|
||||
PRINT "Txt-Len: "; LTRIM$(STR$(LEN(t$)))
|
||||
PRINT "-----------------------------------------"
|
||||
PRINT "Adler32: "; RIGHT$("00000000" + HEX$(_ADLER32(t$)), 8)
|
||||
PRINT " Crc32: "; RIGHT$("00000000" + HEX$(_CRC32(t$)), 8)
|
||||
PRINT " Md5: "; _MD5$(t$)
|
||||
PRINT
|
||||
t$ = ""
|
||||
PRINT " Text: "; t$
|
||||
PRINT "Txt-Len: "; LTRIM$(STR$(LEN(t$)))
|
||||
PRINT "-----------------------------------------"
|
||||
PRINT "Adler32: "; RIGHT$("00000000" + HEX$(_ADLER32(t$)), 8)
|
||||
PRINT " Crc32: "; RIGHT$("00000000" + HEX$(_CRC32(t$)), 8)
|
||||
PRINT " Md5: "; _MD5$(t$)
|
||||
|
||||
SYSTEM
|
||||
|
13
tests/compile_tests/hash/test.output
Normal file
13
tests/compile_tests/hash/test.output
Normal file
|
@ -0,0 +1,13 @@
|
|||
Text: QB64 Phoenix Edition
|
||||
Txt-Len: 20
|
||||
-----------------------------------------
|
||||
Adler32: 41F806E5
|
||||
Crc32: 691EE005
|
||||
Md5: E512ECA19E9487D7C2F564E848314238
|
||||
|
||||
Text:
|
||||
Txt-Len: 0
|
||||
-----------------------------------------
|
||||
Adler32: 00000001
|
||||
Crc32: 00000000
|
||||
Md5: D41D8CD98F00B204E9800998ECF8427E
|
Loading…
Reference in a new issue