SpRegistry

Syntax: result = spRegistry ( key, name , val , [ type ] )
 * Mode 1: Setting single value.

Syntax: result = spRegistry ( key, [ 'DEFAULT:' ] , val )
 * Mode 2: Setting default value of a certain key.

Syntax: result = spRegistry ( key, name )
 * Mode 3: Querying single value.

Syntax: result = spRegistry ( key [, [ 'DEFAULT:' ] ] )
 * Mode 4: Query default value of a certain key.

Syntax: result = spRegistry ( key, [ 'TYPE:' ] , name )
 * Mode 5: Query type of a single value.

Syntax: result = spRegistry ( key, name , 'DELETE:' )
 * Mode 6: Deleting a single value.

Syntax: result = spRegistry ( key, [ 'DEFAULT:' ] , 'DELETE:' )
 * Mode 7: Deleting default value of a certain key.

Syntax: result = spRegistry ( key, 'DELETE:' )
 * Mode 8: Deleting an key and all associated subkeys and values.

Syntax: result = spRegistry ( key, 'VALUES:' , 'stem' )
 * Mode 9: Querying names of all values associated with a certain key.

Syntax: result = spRegistry ( key, 'SUBKEYS:' , 'stem' )
 * Mode 10: Querying subkeys of a certain key.

Parameters:
 * key – Registry key.
 * name – Name of the value to be set, queried, or deleted.
 * val – Value to be set, queried, or deleted.
 * stem – The result of the enumerating operations will be set into this stem variable.

Returns:
 * For successful setting invocations, result will equal ''. (1,2)
 * For successful querying invocations, result will be given the value of the specified registry value. (3,4,5)
 * For successful deleting invocations, result will equal ''. (6,7,8)
 * For successful enumerating operations, result will be number of items returned. (9,10)
 * Possible types returned by mode 5 are 'dword:' (2 byte values), 'hex:' (variable length binary data), '' (variable length strings).

The error string 'ERROR:' may be returned if an error occurs. Additionally the Variable 'RC' will be set to the return code of the failing API Call.

Return Codes of common failure situations:
 * 3 File Not Found (Key not found)
 * 1010 Bad Key

Remarks: When setting a value of a non existing key, the key will be created.

Example Code: /* regdump.cmd (spUtils Example Code) */ /* Prints out a registry key with all values and subvalues, like the */ /* Registry Export function of Regedit */ PARSE ARG args IF RIGHT(args,1)='\' THEN args=LEFT(args,LENGTH(args)-1) SAY 'REGEDIT4' SAY '' CALL RegDump args RETURN RegDump: PROCEDURE SAY '['||ARG(1)||']' CALL KeyDump ARG(1) CALL spRegistry ARG(1),'SUBKEYS:','s'     DO i=1 TO s.0 CALL RegDump ARG(1)||'\'||s.i     END RETURN KeyDump: PROCEDURE CALL spRegistry ARG(1),'VALUES:','v'     DO i=1 to v.0 CALL ValDump ARG(1), v.i     END CALL LINEOUT ,'' RETURN

ValDump: PROCEDURE IF ARG(2)='' THEN DO          val=spRegistry(ARG(1),'DEFAULT:') type='' out='@=' END ELSE DO          val=spRegistry(ARG(1),ARG(2)) type=spRegistry(ARG(1),'TYPE:',ARG(2)) out='"'          DO i=1 TO LENGTH(ARG(2))                c=SUBSTR(ARG(2),i,1)                IF c='\' | c='"' THEN out=out||'\' out=out||c END out=out||'"='type END SELECT     WHEN type='dword:' THEN CALL DWordDump val      WHEN type='hex:' THEN CALL HexDump val      WHEN type= THEN CALL StringDump val      THERWISE EXIT 1 END RETURN DWordDump: PROCEDURE EXPOSE out      DO i=1 TO LENGTH(out)           c=SUBSTR(out,i,1)      CALL LINEOUT ,out||spD2X(ARG(1),'l')      RETURN HexDump: PROCEDURE EXPOSE out      DO i=1 TO LENGTH(ARG(1))           IF i>1 & LENGTH(out)>3 THEN out=out||','           out=out||spD2X(C2D(SUBSTR(ARG(1),i,1)),'b')           IF LENGTH(out)>75 & i<=LENGTH(ARG(1)) THEN DO                CALL LINEOUT ,out||',\'                out=' '           END      END      IF out\= THEN CALL LINEOUT ,out      RETURN StringDump: PROCEDURE EXPOSE out      CALL CHAROUT ,out||'"' posx=LENGTH(out)+1 DO i=1 TO LENGTH(ARG(1)) IF i>1 & posx>76 & i<LENGTH(ARG(1)) THEN DO               CALL LINEOUT ,'"\'                CALL CHAROUT ,'"' posx=1 END c=SUBSTR(ARG(1),i,1) IF c='\' | c='"' THEN DO               CALL CHAROUT ,'\'                posx=posx+1           END           CALL CHAROUT ,c           posx=posx+1 END CALL LINEOUT ,'"' RETURN