void AddFixOffs(S16 type, S16 size, U8 *ptr, S32 org, void *data) { FIXOFFS *fix; INSCRIPT *scr = curScript; if(scr) while(scr->parent&&!scr->path) scr = scr->parent; if(PRECOMPILING) return; fix = (FIXOFFS*)ssAlloc(sizeof(FIXOFFS)); if(curMacro && (type==FIXTYPE_LABEL) && (((LABEL*)data)->flags&LABELFLAG_MACKER) ) { fix->prev = curMacro->fixoffs; curMacro->fixoffs = fix; } else { fix->prev = fixOffs; fixOffs = fix; } fix->type = type; fix->ptr = ptr; fix->org = org; fix->size = size; fix->data = data; if(scr) { fix->filename = strdup(scr->filename); fix->line = scr->line; } else fix->filename = NULL; }
void FASTCALL EnterIfDef(BOOL RESULT) { IFDEF *ifdef = (IFDEF*)ssAlloc(sizeof(IFDEF)); ifdef->prev = curScript->ifdefTrack; curScript->ifdefTrack = ifdef; ifdef->RESULT = RESULT; ifdef->ELSE = FALSE; }
void FASTCALL SetBank(S16 type, char *label) { BANK *newbank; int i; if(!PRECOMPILING) { curBank = FindBank(label); return; } if(bankCounts[type]>MAX_BANKCOUNT) fatal(FTL_MAXBANKCOUNT); newbank = (BANK*)ssAlloc(sizeof(BANK)); if(!banks) banks = newbank; if(bankPtr) { bankPtr->next = newbank; } bankPtr = curBank = newbank; newbank->next = NULL; newbank->type = type; newbank->maxsize = bankSizes[type]; newbank->bank = bankCounts[type]++; newbank->org = (type==BANKTYPE_ROM)?0x10000-newbank->maxsize:0; newbank->buffer = newbank->ptr = (U8*)ssAlloc(newbank->maxsize); newbank->end = newbank->buffer+newbank->maxsize; for(i=0; i<newbank->maxsize; i++) newbank->buffer[i] = GetPadChar(); if(label) newbank->label = strdup(label); else { newbank->label = (char*)ssAlloc((U32)strlen("bankXXXXXXXXX")); sprintf(newbank->label,"bank%04u",newbank->bank); } }
U8 *FASTCALL LoadFile(int dir, char *filename, S32 *_len) { U32 len; U8 *buffer=NULL; FILE *f=OpenFile(dir,filename,"rb"); if(f) { len=FileLen(f); if(len) { buffer = ssAlloc(len+1); FRead(buffer,len,f); buffer[len] = 0; } if(_len) *_len = len; CloseFile(f); } return buffer; }
BOOL FASTCALL AddStringList(STRLIST **plist, char *label) { STRLIST *list=*plist, *newlist; newlist = ssAlloc(sizeof(STRLIST)); if(list) { while(list->next) list = list->next; list->next = newlist; } else *plist = newlist; newlist->next = NULL; newlist->string = strdup(label); return TRUE; }