示例#1
0
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;
  }
示例#2
0
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);
  }
示例#3
0
/**
 * レジストリ値を取得する。
 *
 * 戻り値のポインタは呼び出し元が必ず開放しなければならない。
 *
 * 存在しないレジストリパスを指定した場合、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, &regname)) == 0) {
		return NULL;
	}
	
	// 値を取得する
	if ((value = get_val(subkey, regname, type)) == NULL) {
		return NULL;
	}
	
	// サブキーをクローズする
	close_reg(subkey);
	
	return value;
}
示例#4
0
/**
 * レジストリ値を設定する。
 *
 */
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, &regname)) == 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;
}