Index: mplayer/loader/modify_reg.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ mplayer/loader/modify_reg.c 2007-02-08 12:14:12.000000000 -0800 @@ -0,0 +1,103 @@ +#include +#include +#include "registry.c" + +void parse_key(char *raw, HKEY *root, char *path, char *key) { + char *tmpkey, *start; + tmpkey = strrchr(raw, '\\'); + if(tmpkey == raw || tmpkey == NULL) { + printf("Couldn't process key \"%s\"\n", raw); + return; + } + start = strchr(raw, '\\'); + if(start == raw || start == NULL) { + printf("Couldn't process key \"%s\"\n", raw); + return; + } + if(strncmp(raw, "HKEY_CURRENT_USER\\", 18) == 0 || + strncmp(raw, "HKCU\\", 5) == 0) { + *root = HKEY_CURRENT_USER; + } else if(strncmp(raw, "HKEY_LOCAL_MACHINE\\", 19) == 0 || + strncmp(raw, "HKLM\\", 5) == 0) { + *root = HKEY_LOCAL_MACHINE; + } else { + printf("Couldn't process key \"%s\"\n", raw); + return; + } + strncpy(key, tmpkey + 1, strlen(tmpkey)-1); + key[strlen(tmpkey)-1] = 0; + while(*start == '\\') + start++; + while(*(tmpkey-1) == '\\') + tmpkey--; + strncpy(path, start, tmpkey - start); + path[tmpkey - start] = 0; +} + +int main(int argc, char *argv[]) { + int i; + long type = REG_SZ; + char c, path[256], key[256], *value = NULL; + HKEY root = 0; + int Option_Index; + int list = 0; + int newkey, status; + static struct option Long_Options[] = { + {"registry", 1, 0, 'r'}, + {"list", 0, 0, 'l'}, + {"key", 1, 0, 'k'}, + {"value", 1, 0, 'v'}, + {"type", 1, 0, 't'}, + }; + while(1) { + c = getopt_long(argc, argv, "r:lk:v:t:", Long_Options, &Option_Index); + if(c == EOF) + break; + switch(c) { + case 'r': + localregpathname = optarg; + break; + case 'l': + list = 1; + break; + case 'k': + parse_key(optarg, &root, path, key); + break; + case 'v': + value = optarg; + break; + case 't': + //not supported yet; + break; + } + } + if(localregpathname == NULL || (! list && ! root)) { + printf("Must specify '-r' and either '-k' or '-l'\n"); + return 1; + } + open_registry(); + insert_handle(HKEY_LOCAL_MACHINE, "HKLM"); + insert_handle(HKEY_CURRENT_USER, "HKCU"); + + if(list) { + for(i=0; i < reg_size; i++) { + if(regs[i].type == DIR) { + printf("Directory: %s\n", regs[i].name); + } else if(regs[i].type == REG_DWORD) { + DWORD v = (DWORD)regs[i].value; + printf("%s :: %08x type: DWORD\n", regs[i].name, v); + } else if(regs[i].type == REG_SZ) { + printf("%s :: '%s' len: %d type: String\n", regs[i].name, regs[i].value, regs[i].len); + } else { + printf("%s :: '%s' len: %d type: %08x\n", regs[i].name, regs[i].value, regs[i].len, regs[i].type); + } + } + } + if(root) { + RegCreateKeyExA(root, path, 0, 0, 0, 0, 0, &newkey, &status); + if(value != NULL) { + RegSetValueExA(newkey, key, 0, type, value, strlen(value)+1); + } + } + return 0; +}