void LuaCTable::Set(std::string key, LuaCObject* o) { lua_State* L = m_luavm->L; push(L); lua_pushstring(L, key.c_str()); PushArgs(o); lua_rawset(L, -3); lua_settop(L, 0); }
void ParseScript() { char str[512]; while(!feof(infile)) { memset(str,'\0',512); fgets(str,512,infile); switch(GetType(str)) { case 1: { int opcode = GetID(str); if(opcode!=-1) { Push(&bytestack,opcode,1); PushArgs(&bytestack,str,opcode,4); } } break; case 2: { char *name = GetFuncName(str); int opcode = GetOpcode(name); Push(&bytestack,opcode,1); PushArgs(&bytestack,str,opcode,strlen(name)); free(name); } break; case 3: { int id = GetID(str); if(id!=-1) { PushInt(&labelstack,bytestack.size,id); scrhead.labels.size++; } else { printf("Problem parsing label: %s",str); exit(1); } } break; case 4: { int id = GetID(str); if(id!=-1) { //Push(&markerstack,id,4); markerstack[id] = bytestack.size; scrhead.markers.size = 100; } else { printf("Problem parsing marker: %s",str); exit(1); } } break; case 5: { FILE *textfile = NULL; while(str[strlen(str)-1]=='\r' || str[strlen(str)-1]=='\n') str[strlen(str)-1] = '\0'; textfile = fopen(str+9,"rb"); if(!textfile) { printf("Could not open %s\n",str+9); exit(1); } ParseText(textfile); fclose(textfile); } break; case 6: { int t = 0; sscanf(str+1,"%x",&t); if(scrhead.unk12.size==0) unk12stack = (int*)calloc(1,sizeof(int)); else unk12stack = (int*)realloc(unk12stack,(scrhead.unk12.size+1)*sizeof(int)); unk12stack[scrhead.unk12.size++] = t; } break; case 7: { int t = 0; sscanf(str+1,"%x",&t); if(scrhead.unk13.size==0) unk13stack = (int*)calloc(1,sizeof(int)); else unk13stack = (int*)realloc(unk13stack,(scrhead.unk13.size+1)*sizeof(int)); unk13stack[scrhead.unk13.size++] = t; } break; default: break; } } }