diff --git a/source/qb64.bas b/source/qb64.bas index ca9412b65..fc07844aa 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -1043,137 +1043,6 @@ IF C = 9 THEN 'run idecompiled = 1 END IF - - IF MakeAndroid THEN - - - CreateAndroidProject file$ - - - 'generate program name - - - 'pf$ = "programs\android\" + file$ - - 'IF _DIREXISTS(pf$) = 0 THEN - ' 'once only setup - - ' COLOR 7, 1: LOCATE idewy - 3, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 2, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 1, 2: PRINT SPACE$(idewx - 2); 'clear status window - ' LOCATE idewy - 3, 2: PRINT "Initializing project [programs\android\" + file$ + "]..."; - ' PCOPY 3, 0 - - - ' MKDIR pf$ - ' SHELL _HIDE "cmd /c xcopy /e programs\android\project_template\*.* " + pf$ - ' SHELL _HIDE "cmd /c xcopy /e programs\android\eclipse_template\*.* " + pf$ - - ' 'modify templates - ' fr_fh = FREEFILE - ' OPEN pf$ + "\AndroidManifest.xml" FOR BINARY AS #fr_fh - ' a$ = SPACE$(LOF(fr_fh)) - ' GET #fr_fh, , a$ - ' CLOSE fr_fh - ' OPEN pf$ + "\AndroidManifest.xml" FOR OUTPUT AS #fr_fh - ' ss$ = CHR$(34) + "com.example.native_activity" + CHR$(34) - ' file_namespace$ = LCASE$(file$) - ' a = ASC(file_namespace$) - ' IF a >= 48 AND a <= 57 THEN file_namespace$ = "ns_" + file_namespace$ - ' i = INSTR(a$, ss$) - ' a$ = LEFT$(a$, i - 1) + CHR$(34) + "com.example." + file_namespace$ + CHR$(34) + RIGHT$(a$, LEN(a$) - i - LEN(ss$) + 1) - ' PRINT #fr_fh, a$; - ' CLOSE fr_fh - - ' fr_fh = FREEFILE - ' OPEN pf$ + "\res\values\strings.xml" FOR BINARY AS #fr_fh - ' a$ = SPACE$(LOF(fr_fh)) - ' GET #fr_fh, , a$ - ' CLOSE fr_fh - ' OPEN pf$ + "\res\values\strings.xml" FOR OUTPUT AS #fr_fh - ' ss$ = ">NativeActivity<" - ' i = INSTR(a$, ss$) - ' a$ = LEFT$(a$, i - 1) + ">" + file$ + "<" + RIGHT$(a$, LEN(a$) - i - LEN(ss$) + 1) - ' PRINT #fr_fh, a$; - ' CLOSE fr_fh - - ' fr_fh = FREEFILE - ' OPEN pf$ + "\.project" FOR BINARY AS #fr_fh - ' a$ = SPACE$(LOF(fr_fh)) - ' GET #fr_fh, , a$ - ' CLOSE fr_fh - ' OPEN pf$ + "\.project" FOR OUTPUT AS #fr_fh - ' ss$ = "NativeActivity" - ' i = INSTR(a$, ss$) - ' a$ = LEFT$(a$, i - 1) + "" + file$ + "" + RIGHT$(a$, LEN(a$) - i - LEN(ss$) + 1) - ' PRINT #fr_fh, a$; - ' CLOSE fr_fh - - ' IF _DIREXISTS(pf$ + "\jni\temp") = 0 THEN MKDIR pf$ + "\jni\temp" - - ' IF _DIREXISTS(pf$ + "\jni\c") = 0 THEN MKDIR pf$ + "\jni\c" - - ' 'c - ' ex_fh = FREEFILE - ' OPEN "internal\temp\xcopy_exclude.txt" FOR OUTPUT AS #ex_fh - ' PRINT #ex_fh, "c_compiler\" - ' CLOSE ex_fh - ' SHELL _HIDE "cmd /c xcopy /e /EXCLUDE:internal\temp\xcopy_exclude.txt internal\c\*.* " + pf$ + "\jni\c" - - 'ELSE - - ' COLOR 7, 1: LOCATE idewy - 3, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 2, 2: PRINT SPACE$(idewx - 2);: LOCATE idewy - 1, 2: PRINT SPACE$(idewx - 2); 'clear status window - ' LOCATE idewy - 3, 2: PRINT "Updating project [programs\android\" + file$ + "]..."; - ' PCOPY 3, 0 - - 'END IF - - ''temp - 'SHELL _HIDE "cmd /c del " + pf$ + "\jni\temp\*.txt" - 'SHELL _HIDE "cmd /c copy " + tmpdir$ + "*.txt " + pf$ + "\jni\temp" - - ''touch main.cpp (for ndk) - 'fr_fh = FREEFILE - 'OPEN pf$ + "\jni\main.cpp" FOR BINARY AS #fr_fh - 'a$ = SPACE$(LOF(fr_fh)) - 'GET #fr_fh, , a$ - 'CLOSE fr_fh - 'OPEN pf$ + "\jni\main.cpp" FOR OUTPUT AS #fr_fh - 'IF ASC(a$, LEN(a$)) <> 32 THEN a$ = a$ + " " ELSE a$ = LEFT$(a$, LEN(a$) - 1) - 'PRINT #fr_fh, a$; - 'CLOSE fr_fh - - ''note: .bat files affect the directory they are called from - 'CHDIR pf$ - 'IF INSTR(IdeAndroidStartScript$, ":") THEN - ' SHELL _HIDE IdeAndroidMakeScript$ - 'ELSE - ' SHELL _HIDE "..\..\..\" + IdeAndroidMakeScript$ - 'END IF - 'CHDIR "..\..\.." - - '''touch manifest (for Eclipse) - ''fr_fh = FREEFILE - ''OPEN pf$ + "\AndroidManifest.xml" FOR BINARY AS #fr_fh - ''a$ = SPACE$(LOF(fr_fh)) - ''GET #fr_fh, , a$ - ''CLOSE fr_fh - ''OPEN pf$ + "\AndroidManifest.xml" FOR OUTPUT AS #fr_fh - ''IF ASC(a$, LEN(a$)) <> 32 THEN a$ = a$ + " " ELSE a$ = LEFT$(a$, LEN(a$) - 1) - ''PRINT #fr_fh, a$; - ''CLOSE fr_fh - ''^^^^above inconsistent^^^^ - - ''clear the gen folder (for Eclipse) - 'IF _DIREXISTS(pf$ + "\gen") THEN - ' SHELL _HIDE "cmd /c rmdir /s /q " + pf$ + "\gen" - ' SHELL _HIDE "cmd /c md " + pf$ + "\gen" - 'END IF - - sendc$ = CHR$(11) '".EXE file created" aka "Android project created" - GOTO sendcommand - - END IF - - IF iderunmode = 2 THEN sendc$ = CHR$(11) '.EXE file created GOTO sendcommand @@ -2022,8 +1891,11 @@ DO IF udtxbytealign(u) THEN udtxbytealign(i) = 1: udtebytealign(i2) = 1 ELSE IF (typ AND ISSTRING) THEN - IF (typ AND ISFIXEDLENGTH) = 0 THEN a$ = "Expected STRING *": GOTO errmes - udtesize(i2) = typsize * 8 + IF (typ AND ISFIXEDLENGTH) = 0 THEN + udtesize(i2) = OFFSETTYPE AND 511 + ELSE + udtesize(i2) = typsize * 8 + END IF udtxbytealign(i) = 1: udtebytealign(i2) = 1 ELSE udtesize(i2) = typ AND 511 @@ -2046,7 +1918,7 @@ DO udtenext(i2 - 1) = i2 END IF - 'print "+"+rtrim$(udtename(i2));udtesize(i2);udtebytealign(i2);udtxsize(i) + 'print "+"+rtrim$(udtename(i2));udtetype(i2);udtesize(i2);udtebytealign(i2);udtxsize(i) GOTO finishedlinepp @@ -13650,6 +13522,17 @@ FUNCTION dim2 (varname$, typ2$, method, elements$) IF f THEN PRINT #13, "if(" + n$ + "==NULL){" IF f THEN PRINT #13, n$ + "=(void*)mem_static_malloc(" + str2$(bytes) + ");" IF f THEN PRINT #13, "memset(" + n$ + ",0," + str2(bytes) + ");" + i2 = udtxnext(i) + offset = 0 + do while i2 + if udtetype(i2) and ISSTRING then + if (udtetype(i2) and ISFIXEDLENGTH) = 0 then + if f then print #13, "*(qbs**)(((char*)" + n$ + ")+" + str$(offset) + ") = qbs_new(0,0);" + end if + end if + offset = offset + udtesize(i2) \ 8 + i2 = udtenext(i2) + loop IF f THEN PRINT #13, "}" END IF regid @@ -20053,9 +19936,14 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG) IF typ AND ISOFFSETINBITS THEN Give_Error "Cannot resolve bit-length variables inside user defined types yet": EXIT FUNCTION IF typ AND ISSTRING THEN - o2$ = "(((uint8*)" + scope$ + n$ + ")+(" + o$ + "))" - r$ = "qbs_new_fixed(" + o2$ + "," + str2(udtetypesize(E)) + ",1)" - typ = STRINGTYPE + ISFIXEDLENGTH 'ISPOINTER retained, it is still a pointer! + IF typ AND ISFIXEDLENGTH THEN + o2$ = "(((uint8*)" + scope$ + n$ + ")+(" + o$ + "))" + r$ = "qbs_new_fixed(" + o2$ + "," + str2(udtetypesize(E)) + ",1)" + typ = STRINGTYPE + ISFIXEDLENGTH 'ISPOINTER retained, it is still a pointer! + ELSE + r$ = "((qbs*)(" + scope$ + n$ + "+(" + o$ + ")))" + typ = STRINGTYPE + END IF ELSE typ = typ - ISUDT - ISREFERENCE - ISPOINTER IF typ AND ISARRAY THEN typ = typ - ISARRAY @@ -21266,8 +21154,12 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG) IF typ AND ISOFFSETINBITS THEN Give_Error "Cannot resolve bit-length variables inside user defined types yet": EXIT SUB IF typ AND ISSTRING THEN - o2$ = "(((uint8*)" + scope$ + n$ + ")+(" + o$ + "))" - r$ = "qbs_new_fixed(" + o2$ + "," + str2(udtetypesize(E)) + ",1)" + IF typ AND ISFIXEDLENGTH THEN + o2$ = "(((uint8*)" + scope$ + n$ + ")+(" + o$ + "))" + r$ = "qbs_new_fixed(" + o2$ + "," + str2(udtetypesize(E)) + ",1)" + ELSE + r$ = "((qbs*)((" + scope$ + n$ + ")+(" + o$ + ")))" + END IF IF method = 0 THEN e$ = evaluatetotyp(e$, STRINGTYPE - ISPOINTER) IF Error_Happened THEN EXIT SUB PRINT #12, "qbs_set(" + r$ + "," + e$ + ");"