void found_reg(char *name,int addr,char *type,int word_size,int no_words) { struct regs *r; if(regs) close_reg(); r=malloc(sizeof(struct regs)); r->next=regs; regs=r; r->name=name; r->addr=addr; r->rtype=0; r->type=type; r->no_words=no_words; r->word_size=word_size; }
void gen_chdr(FILE *fd,char *name) { struct rtype *r; struct regs *i; if(regs) close_reg(); reduce_names(regs); simp_names(regs); fix_names(regs); fix_names1(regs); // Cheating here reduce_names((struct regs *)rtypes); simp_names((struct regs *)rtypes); fix_names((struct regs *)rtypes); fix_names1((struct regs *)rtypes); // Check for conflicting addresses check_conflict(); fprintf(fd,"/* This file utomatically generated by vcsr */\n"); fprintf(fd,"/* Do not edit: instead modify Verilog RTL */\n\n"); fprintf(fd,"#include \"csrdef.h\"\n\n"); for(r=rtypes;r;r=r->next) { struct field *f; fprintf(fd,"struct %s {\n",r->name); for(f=r->fields;f;f=f->next) if(f->iz_flag) fprintf(fd," %sInit(%s, %d, %d, 0x%x);\n",f->type,f->name,f->size,f->start,f->iz); else fprintf(fd," %s(%s, %d, %d);\n",f->type,f->name,f->size,f->start); fprintf(fd,"};\n\n"); } fprintf(fd,"struct %s_t CHIP_COLLECTION {\n",name); for(i=regs;i;i=i->next) if(i->word_size) fprintf(fd," %s(%s[%d:%d], %s, 0x%x);\n",i->type,i->name,i->no_words,i->word_size,i->rtype ? i->rtype->name : "(undefined)",i->addr); else fprintf(fd," %s(%s, %s, 0x%x);\n",i->type,i->name,i->rtype ? i->rtype->name : "(undefined)",i->addr); fprintf(fd,"} %s;\n",name); }
/** * レジストリ値を取得する。 * * 戻り値のポインタは呼び出し元が必ず開放しなければならない。 * * 存在しないレジストリパスを指定した場合、NULL を返す。 * * @param [in] path レジストリパス * @param [out] type レジストリ型 * @return レジストリ値 */ void *Registory_GetValue(const char *path, PDWORD type) { HKEY subkey; char *regname; void *value = NULL; // サブキーをオープンする if ((subkey = open_reg(path, KEY_QUERY_VALUE, ®name)) == 0) { return NULL; } // 値を取得する if ((value = get_val(subkey, regname, type)) == NULL) { return NULL; } // サブキーをクローズする close_reg(subkey); return value; }
/** * レジストリ値を設定する。 * */ LONG Registory_SetValue(const char *path, DWORD type, CONST BYTE *data, DWORD size) { HKEY subkey; char *regname; // サブキーをオープンする if ((subkey = open_reg(path, KEY_SET_VALUE, ®name)) == 0) { return !ERROR_SUCCESS; } // 値を書き込む LONG rc = RegSetValueEx( subkey, // HKEY hKey, // 親キーのハンドル regname, // LPCTSTR lpValueName, // レジストリエントリ名 0, // DWORD Reserved, // 予約済み type, // DWORD dwType, // レジストリエントリのデータ型 data, // CONST BYTE *lpData, // レジストリエントリのデータ size // DWORD cbData // レジストリエントリのデータのサイズ ); // サブキーをクローズする close_reg(subkey); return rc; }