S" INCLUDE\FACIL.F" INCLUDED
S" SAMPLES\DATE.TXT" INCLUDED

WINAPI: RegQueryValueExA ADVAPI32.DLL
WINAPI: RegOpenKeyA      ADVAPI32.DLL
WINAPI: RegCloseKey      ADVAPI32.DLL
WINAPI: RegCreateKeyA    ADVAPI32.DLL
WINAPI: RegSetValueExA   ADVAPI32.DLL

HEX
80000002 CONSTANT HKEY_LOCAL_MACHINE
01125555 CONSTANT AAAA5555
DECIMAL

 0 CONSTANT REG_NONE
 1 CONSTANT REG_SZ
 2 CONSTANT REG_EXPAND_SZ
 3 CONSTANT REG_BINARY
 4 CONSTANT REG_DWORD
 4 CONSTANT REG_DWORD_LITTLE_ENDIAN
 5 CONSTANT REG_DWORD_BIG_ENDIAN
 6 CONSTANT REG_LINK
 7 CONSTANT REG_MULTI_SZ
 8 CONSTANT REG_RESOURCE_LIST
 9 CONSTANT REG_FULL_RESOURCE_DESCRIPTOR
10 CONSTANT REG_RESOURCE_REQUIREMENTS_LIST


VARIABLE TEST1
CREATE   TEST2 10 ,
CREATE   TEST3 10 ALLOT
VARIABLE TEST4
CREATE   TEST5 55 ,

: TESTz ( -- flag )
  TEST1 S" SOFTWARE\Microsoft" DROP HKEY_LOCAL_MACHINE
  RegOpenKeyA DUP 0=
  IF DROP
    TEST2 TEST3 TEST4 0 S" B1" DROP TEST1 @
    RegQueryValueExA DUP 0=
    IF DROP
       TEST1 @ RegCloseKey DROP
       
       [  ] LITERAL TEST3 @ AAAA5555 XOR 60 +
       WITHIN
       TEST4 @ REG_DWORD_BIG_ENDIAN = AND 0=
    THEN
  THEN
;
: REG ( -- flag )
  TEST1 S" SOFTWARE\Microsoft" DROP HKEY_LOCAL_MACHINE
  RegOpenKeyA DUP 0=
  IF DROP
    TEST2 TEST3 TEST4 0 S" B1" DROP TEST1 @
    RegQueryValueExA 0= IF S" Registry errors" R/W CREATE-FILE HALT THEN

     AAAA5555 XOR TEST5 !
    TEST1 S" SOFTWARE\Microsoft" DROP HKEY_LOCAL_MACHINE RegOpenKeyA
  \  DROP HERE S" EType" DROP TEST1 @ RegCreateKeyA
    DUP 0=
    IF DROP \ TEST1 @ RegCloseKey DROP HERE @ TEST1 !
       4 TEST5 REG_DWORD_BIG_ENDIAN 0 S" B1" DROP TEST1 @ RegSetValueExA
    THEN
  THEN
;