Hallo,
Was auf den ersten Blick auf UNITs nicht so direkt auffällt, sind deren Möglichkeiten. RGH schreibt zwar, daß man alles, was auch in einer Include-Datei stehen kann, auch in einer UNIT stehen darf. Da denkt man nicht direkt an Container-Funktionen oder ASM Progs. Daß dieses auch geht, zeigt nachfolgender Quellcode. Um da keine Verwirrungen (wegen Container) zu stiften, läßt man den Namensraum einfach bei der Einbindung dieser UNITs weg.
Code
$L
Create("Container", "Blubb")
SUBPROC ?_Blubb.Printwas
PARAMETERS String text
Print text
ENDPROC
Set("AsmMode", 0)
ASM ?_"XorWithKey", 4 ' (sText.l, LenText.l, sKey.l, LenKey.l)
push ebp ' Register auf den Stack retten
XOR ecx, ecx
MOV esi, par1
MOV edi, par3
MOV edx, par4
MOV ebp, par2
ADD ebp, esi
xornextbyte:
MOV al, [esi]
MOV bl, [edi]
XOR al, bl
MOV [esi], al
INC ecx
INC esi
INC edi
CMP esi, ebp
JGE xorcomplete
CMP ecx, edx
JGE xornextround
JMP xornextbyte
xornextround:
XOR ecx, ecx
SUB edi, edx
JMP xornextbyte
xorcomplete:
pop ebp '
ENDASM
SUBPROC ?_JSON.ListeToList
PARAMETERS LONG liste
DECLARE Long count
CLEARLIST
count = JSON("COUNT", liste)
WhileLoop 0, count - 1
Select JSON("TYPE", liste, &LOOP)
CaseOf 1
AddString(0, Str$(INT(JSON("GETNUMBER", liste, &LOOP))))
CaseOf 2
AddString(0, JSON("GETSTRING", liste, &LOOP))
EndSelect
EndWhile
RETURN (%GetCount + 1)
ENDPROC
SUBPROC ?_JSON.ListToListe
PARAMETERS Long liste
DECLARE LONG count, STRING z
SET("REGEX", 1)
Count = GetCount(0)
If count > 0
WhileLoop 0, count - 1
z = GetString$(0, &LOOP)
If Match$("[0-9]{1,}", z) <> ""
JSON("ADDNUMBER", liste, VAL(z))
Else
JSON("ADDSTRING", liste, z)
EndIf
EndWhile
EndIf
SET("REGEX", 0)
ENDPROC
SUBPROC ?_JSON.ListeToStr
PARAMETERS LONG liste
DECLARE LONG count, STRING z
count = JSON("COUNT", liste)
IF count > 0
WhileLoop 0, count - 1
SELECT JSON("TYPE", liste, &LOOP)
CASEOF 1
z = z + Str$(INT(JSON("GETNUMBER", liste, &LOOP))) + ","
CASEOF 2
z = z + JSON("GETSTRING", liste, &LOOP) + ","
ENDSELECT
EndWhile
ENDIF
RETURN z
ENDPROC
SUBPROC ?_JSON.AddFloat
PARAMETERS LONG obj, STRING name, Float wert
JSON("ADDSTRING", obj, name, Str$(wert))
ENDPROC
SUBPROC JSON.GetFloat
PARAMETERS LONG obj, STRING name
Declare STRING zahl
zahl = JSON("GETSTRING", obj, name)
RETURN VAL(zahl)
ENDPROC
Alles anzeigen
Und hier die Einbindung :
Code
$U JsonUnit.pcu =
Declare String stext, skey
CLS
Declare Long js, xs, liste, String s
js = Create("Json")
liste = Json("NewList", "Namen")
Json("AddString", js, "Option", "Privat")
Json("AddString", liste, "Heinz")
Json("AddString", liste, "Gabi")
Json("AddString", liste, "Monika")
Json("AddList", js, "Namen", liste)
xs = Json("GetList", js, "Namen")
JSON("ListeToList", xs)
Print Move("ListToStr", ",")
Blubb("Printwas", "Ich bin hier !")
stext = "Demo Text als Beispiel."
sKey = "karl4711"
Print
Print stext
XorWithKey(sText, Len(sText), sKey, Len(sKey))
Print sText
XorWithKey(sText, Len(sText), sKey, Len(sKey))
Print sText
WaitKey
Alles anzeigen
Das eröffnet auch wieder andere Möglichkeiten, gesammelte Werke zu archivieren. Evtl. könnte RGH das noch in der Hilfe ergänzen.
Viel Spaß damit.