20 unsigned labelhash(
const char *prog,
const char *label);
46 { 101,
"label already defined" },
47 { 102,
"label table is full" },
48 { 103,
"label not found" },
60 unsigned labelhash(
const char *prog,
const char *label)
62 HKEY *keys[2] = {NULL};
71 for(
int j = 0; j < i + 1; j++) {
91 assert(prog != NULL && label != NULL);
97 if((!prog[0] || (strcmp(prog, l->
prog) == 0)) &&
98 strcmp(label, l->
label) == 0)
108 assert(label != NULL);
114 if(
getlabel(prog, label) != 0xFFFF) {
144 assert(p->
label != NULL);
149 for(
int i = 0; i < s; i++) {
151 fprintf(stdout,
"%s.", l[i]->prog);
153 fprintf(stdout,
"%s ---> #%04X\n", l[i]->label, l[i]->adr);
165 for(p =
labels[i]; p != NULL; p = q) {
void addcerrlist(int cerrc, CERR cerrv[])
エラーリストを作成・追加する
void setcerr(int num, const char *str)
現在のエラーを設定する
#define FREE(ptr)
メモリを解放するマクロ
char * strdup_chk(const char *s, const char *tag)
malloc_chkを実行してメモリを確保し、コピーした文字列を返す
void * calloc_chk(size_t nmemb, size_t size, const char *tag)
領域の数とサイズを指定してメモリーを確保するcallocを実行する
#define ARRAYSIZE(array)
配列のサイズを返すマクロ
void * malloc_chk(size_t size, const char *tag)
mallocを実行し、0で初期化する
unsigned hash(int keyc, HKEY *keyv[], int tabsize)
ハッシュ値を取得する
void addcerrlist_label()
ラベルのエラーをエラーリストに追加する
bool addlabel(const char *prog, const char *label, WORD adr)
プログラム名、ラベル、アドレスをラベル表に追加する
unsigned labelhash(const char *prog, const char *label)
void printlabel()
ラベル表を表示する
static LABELTAB * labels[LABELTABSIZE]
ラベル表
WORD getlabel(const char *prog, const char *label)
プログラム名とラベルに対応するアドレスをラベル表から検索する
int compare_adr(const void *a, const void *b)
static CERR cerr_label[]
ラベルのエラー
HKEY * label_hashkey(const char *value)
void freelabel()
ラベル表を解放する
unsigned short WORD
16ビットの数値を表すデータ型