char *give_room_name(t_dbllist *lst_rooms, int index) { t_elem *tmp; tmp = lst_rooms->head; while (tmp != NULL) { if (index == ROOM(tmp)->index) return (ft_strdup(ROOM(tmp)->name)); tmp = tmp->next; } return (NULL); }
static int cons_write (NkPort* port, const u_char* buf, int count) { int res = 0; unsigned long flags; spin_lock_irqsave(&port->lock, flags); if (cons_flush_chars(port) == 0) { res = os_ctx->cops.write(port->id, buf, count); } if ( res < count ) { int room = ROOM(port); if ( (count - res) < room ) { room = count - res; } memcpy(port->buf + port->sz, buf + res, room); port->sz += room; res += room; } spin_unlock_irqrestore(&port->lock, flags); return res; }
void free_lst_rooms(t_anthill *anthill) { t_elem *tmp; tmp = anthill->lst_rooms->head; while (tmp != NULL) { ft_strdel(&(ROOM(tmp)->name)); free(tmp->content); tmp->content = NULL; free(tmp); tmp = tmp->next; } anthill->lst_rooms->tail = NULL; anthill->lst_rooms->head = NULL; }
SYSCALL(void, maConnWriteFromData(MAHandle conn, MAHandle data, int offset, int size)) { LOGST("ConnWriteFromData %i %i %i %i", conn, data, offset, size); MYASSERT(offset >= 0, ERR_DATA_OOB); MYASSERT(size > 0, ERR_DATA_OOB); MYASSERT(offset + size > 0, ERR_DATA_OOB); MAStreamConn& mac = getStreamConn(conn); MYASSERT((mac.state & CONNOP_WRITE) == 0, ERR_CONN_ALREADY_WRITING); Stream& stream = *SYSCALL_THIS->resources.extract_RT_BINARY(data); { int sLength; MYASSERT(stream.length(sLength), ERR_DATA_OOB); MYASSERT(sLength >= offset + size, ERR_DATA_OOB); ROOM(SYSCALL_THIS->resources.add_RT_FLUX(data, (void*)(size_t)sLength)); } mac.state |= CONNOP_WRITE; gThreadPool.execute(new ConnWriteFromData(mac, stream, data, offset, size)); }
void write_zone_to_disk(int vnum) { int zonenum = real_zone(vnum); if (zonenum < 0) { mudlog("Attempted to write Non-Existent zone!", NULL, LOG_SYSLOG, TRUE); return; } FILE *fp; int i; sprintf(buf, "%s/%d.zon", ZON_PREFIX, vnum); fp = fopen(buf, "w+"); // write it out! fprintf(fp, "#%d\n", vnum); fprintf(fp, "%s~\n", ZONE.name); fprintf(fp, "%d %d %d %d %d %d\n", ZONE.top, ZONE.lifespan, ZONE.reset_mode, ZONE.security, ZONE.connected, ZONE.juridiction); fprintf(fp, "%d %d %d %d %d\n", ZONE.editor_ids[0], ZONE.editor_ids[1], ZONE.editor_ids[2], ZONE.editor_ids[3], ZONE.editor_ids[4]); for (i = 0; i < ZONE.num_cmds; ++i) { switch (ZONE.cmd[i].command) { case 'M': fprintf(fp, "%c %d %ld %d %ld\n", Zcmd.command, Zcmd.if_flag, MOB(Zcmd.arg1), Zcmd.arg2, ROOM(Zcmd.arg3)); break; case 'V': fprintf(fp, "%c %d %ld %d %ld\n", Zcmd.command, Zcmd.if_flag, VEH(Zcmd.arg1), Zcmd.arg2, ROOM(Zcmd.arg3)); break; case 'S': fprintf(fp, "%c %d %ld %d\n", Zcmd.command, Zcmd.if_flag, MOB(Zcmd.arg1), Zcmd.arg2); break; case 'U': fprintf(fp, "%c %d %ld %d\n", Zcmd.command, Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2); break; case 'I': fprintf(fp, "%c %d %ld %d\n", Zcmd.command, Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2); break; case 'O': fprintf(fp, "%c %d %ld %d %ld\n", Zcmd.command, Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2, ROOM(Zcmd.arg3)); break; case 'H': fprintf(fp, "%c %d %ld %d %ld\n", Zcmd.command, Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2, HOST(Zcmd.arg3)); break; case 'P': fprintf(fp, "%c %d %ld %d %ld\n", Zcmd.command, Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2, OBJ(Zcmd.arg3)); break; case 'D': fprintf(fp, "%c %d %ld %d %d\n", Zcmd.command, Zcmd.if_flag, ROOM(Zcmd.arg1), Zcmd.arg2, Zcmd.arg3); break; case 'E': fprintf(fp, "L %d %ld %d %d\n", Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2, Zcmd.arg3); break; case 'N': fprintf(fp, "%c %d %ld %d %d\n", Zcmd.command, Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2, Zcmd.arg3); break; case 'G': case 'C': fprintf(fp, "%c %d %ld %d\n", Zcmd.command, Zcmd.if_flag, OBJ(Zcmd.arg1), Zcmd.arg2); break; case 'R': fprintf(fp, "%c %d %ld %ld\n", Zcmd.command, Zcmd.if_flag, ROOM(Zcmd.arg1), OBJ(Zcmd.arg2)); break; } } fprintf(fp, "$\n"); fclose(fp); }
void zedit_disp_command_menu(struct descriptor_data *d) { CLS(CH); send_to_char(CH, "^WCommand: ^c%d^n\r\n", d->edit_number ); send_to_char(CH, "^G1^Y) ^WType: ^c%s^n\r\n", get_type(COM->command) ); send_to_char(CH, "^G2^Y) ^WConditional: ^c%s^n\r\n", (!COM->if_flag ? "Always" : "If Last") ); switch (COM->command) { case 'M': send_to_char(CH, "^G3^Y) ^WLoad mob: ^c%s ^y(^B%d)^n\r\n", GET_NAME(mob_proto+COM->arg1), MOB(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); send_to_char(CH, "^G5^Y) ^WLoad in room: ^c%s ^y(^B%d^y)^n\r\n", world[COM->arg3].name, ROOM(COM->arg3) ); break; case 'S': send_to_char(CH, "^G3^Y) ^WLoad mob: ^c%s ^y(^B%d)^n\r\n", GET_NAME(mob_proto+COM->arg1), MOB(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); break; case 'U': send_to_char(CH, "^G3^Y) ^WAttach obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); break; case 'I': send_to_char(CH, "^G3^Y) ^WCarry obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); break; case 'O': send_to_char(CH, "^G3^Y) ^WLoad obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); send_to_char(CH, "^G5^Y) ^WLoad in room: ^c%s ^y(^B%d^y)^n\r\n", world[COM->arg3].name, ROOM(COM->arg3) ); break; case 'H': send_to_char(CH, "^G3^Y) ^WLoad obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); send_to_char(CH, "^G5^Y) ^WLoad in host: ^c%s ^y(^B%d^y)^n\r\n", matrix[COM->arg3].name, HOST(COM->arg3) ); break; case 'V': send_to_char(CH, "^G3^Y) ^WLoad Veh: ^c%s ^y(^B%d^y)^n\r\n", veh_proto[COM->arg1].short_description, VEH(COM->arg1)); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); send_to_char(CH, "^G5^Y) ^WLoad in room: ^c%s ^y(^B%d^y)^n\r\n", world[COM->arg3].name, ROOM(COM->arg3) ); break; case 'P': send_to_char(CH, "^G3^Y) ^WPut obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); send_to_char(CH, "^G5^Y) ^WInto obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg3].text.name, OBJ(COM->arg3) ); break; case 'G': send_to_char(CH, "^G3^Y) ^WGive obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); break; case 'E': send_to_char(CH, "^G3^Y) ^WEquip obj: ^c%s (%d)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1)); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2 ); send_to_char(CH, "^G5^Y) ^WAt ^c%s^W position\r\n", short_where[COM->arg3] ); break; case 'N': send_to_char(CH, "^G3^Y) ^WGive obj: ^c%s (%d)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1)); send_to_char(CH, "^G4^Y) ^WMaximum number in game: ^c%d^n\r\n", COM->arg2); send_to_char(CH, "^G5^Y) ^WTotal number to give: ^c%d^n\r\n", COM->arg3); break; case 'R': send_to_char(CH, "^G3^Y) ^WRemove obj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg2].text.name, OBJ(COM->arg2) ); send_to_char(CH, "^G4^Y) ^WFrom room: ^c%s ^y(^B%d^y)^n\r\n", world[COM->arg1].name, ROOM(COM->arg1) ); break; case 'D': send_to_char(CH, "^G3^Y) ^WSet door: ^c%s^n\r\n", dirs[COM->arg2] ); send_to_char(CH, "^G4^Y) ^WIn room: ^c%s ^y(^B%d^y)^n\r\n", world[COM->arg1].name, ROOM(COM->arg1) ); send_to_char(CH, "^G5^Y) ^WTo state: ^c%s^n\r\n", (COM->arg3 == 0 ? "open" : (COM->arg3 == 1 ? "closed" : "closed and locked")) ); break; case 'C': send_to_char(CH, "^G3^Y) ^WObj: ^c%s ^y(^B%d^y)^n\r\n", obj_proto[COM->arg1].text.name, OBJ(COM->arg1) ); send_to_char(CH, "^G4^Y) ^WTo: ^c%s^n\r\n", (COM->arg2 == 1 ? "bioware" : "cyberware") ); break; } send_to_char("^Gq^Y) ^WQuit\r\n^wEnter your selection: ", CH); d->edit_mode = ZEDIT_COMMAND_MENU; }
/* * Loads a resource from the stream, from originalHandle index to destHandle placeholder. */ bool Syscall::loadResource(Stream& file, MAHandle originalHandle, MAHandle destHandle) { if(!file.isOpen()) { return false; } if ((resourceType == NULL) || (resourceSize == NULL) || (resourceOffset == NULL)) { return false; } int type = resourceType[originalHandle - 1]; int size = resourceSize[originalHandle - 1]; int offset = resourceOffset[originalHandle - 1]; int rI = destHandle; if ( resources.is_loaded(rI) ) { return true; } TEST(file.seek(Seek::Start, offset)); switch(type) { case RT_BINARY: { #ifndef _android MemStream* ms = new MemStream(size); #else char* b = loadBinary(rI, size); MemStream* ms = new MemStream(b, size); #endif TEST(file.readFully(*ms)); ROOM(resources.dadd_RT_BINARY(rI, ms)); #ifdef _android checkAndStoreAudioResource(rI); #endif } break; case RT_IMAGE: { MemStream b(size); TEST(file.readFully(b)); #ifndef _android // On all platforms except Android, we load and add // the image data. "dadd" means "delete and add", // and is defined in runtimes\cpp\base\ResourceArray.h RT_IMAGE_Type* image = loadImage(b); if(!image) BIG_PHAT_ERROR(ERR_IMAGE_LOAD_FAILED); ROOM(resources.dadd_RT_IMAGE(rI, image)); #else // On Android images are stored on the Java side. // Here we allocate a dummy array (real image is // in a table in Java) so that the resource handling, // like deleting resources, will work also on Android. // The actual image will be garbage collected on // Android when a resource is replaced in the Java table. ROOM(resources.dadd_RT_IMAGE(rI, new int[1])); int pos; file.tell(pos); loadImage( rI, pos - size, size, Base::gSyscall->getReloadHandle()); #endif } break; case RT_SPRITE: { DAR_USHORT(indexSource); DAR_USHORT(left); DAR_USHORT(top); DAR_USHORT(width); DAR_USHORT(height); DAR_SHORT(cx); DAR_SHORT(cy); #ifndef _android ROOM(resources.dadd_RT_IMAGE(rI, loadSprite(resources.get_RT_IMAGE(indexSource), left, top, width, height, cx, cy))); #endif } break; default: LOG("Cannot load resource type %d.", type); } return true; }
/* * Loads all resources from the stream, except images, binaries and sprites. */ bool Syscall::loadResources(Stream& file, const char* aFilename) { bool hasResources = true; if(!file.isOpen()) hasResources = false; else { int len, pos; TEST(file.length(len)); TEST(file.tell(pos)); if(len == pos) hasResources = false; } if(!hasResources/* && aFilename != NULL*/) { resources.init(0); return true; } #define MATCH_BYTE(c) { DAR_UBYTE(b); if(b != c) { FAIL; } } MATCH_BYTE('M'); MATCH_BYTE('A'); MATCH_BYTE('R'); MATCH_BYTE('S'); DAR_UVINT(nResources); DAR_UVINT(rSize); resources.init(nResources); resourcesCount = nResources; resourceOffset = new int[nResources]; resourceSize = new int[nResources]; resourceType = new int[nResources]; resourcesFilename = new char[strlen(aFilename) + 1]; strcpy(resourcesFilename, aFilename); // rI is the resource index. int rI = 1; while(true) { DAR_UBYTE(type); if(type == 0) break; //dispose flag DAR_UVINT(size); LOG_RES("Type %i, size %i\n", type, size); int index = rI - 1; TEST(file.tell(resourceOffset[index])); resourceSize[index] = size; resourceType[index] = type; switch(type) { case RT_UBIN: { int pos; MYASSERT(aFilename, ERR_RES_LOAD_UBIN); TEST(file.tell(pos)); #ifndef _android ROOM(resources.dadd_RT_BINARY(rI, new LimitedFileStream(aFilename, pos, size))); #else // Android loads ubins by using JNI. loadUBinary(rI, pos, size); ROOM(resources.dadd_RT_BINARY(rI, new LimitedFileStream( aFilename, pos, size, getJNIEnvironment(), getJNIThis()))); #endif TEST(file.seek(Seek::Current, size)); } break; case RT_PLACEHOLDER: ROOM(resources.dadd_RT_PLACEHOLDER(rI, NULL)); break; case RT_LABEL: { MemStream b(size); TEST(file.readFully(b)); ROOM(resources.dadd_RT_LABEL(rI, new Label((const char*)b.ptr(), rI))); } break; #ifdef LOGGING_ENABLED case 99: //testtype #define DUMP_UVI { DAR_UVINT(u); LOG_RES("u %i\n", u); } #define DUMP_SVI { DAR_SVINT(s); LOG_RES("s %i\n", s); } DUMP_UVI; DUMP_UVI; DUMP_UVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; break; #endif default: TEST(file.seek(Seek::Current, size)); } rI++; } if(rI != nResources + 1) { LOG("rI %i, nR %i\n", rI, nResources); BIG_PHAT_ERROR(ERR_RES_FILE_INCONSISTENT); } LOG_RES("ResLoad complete\n"); return true; }
/* * Loads all resources from the given buffer. */ bool Syscall::loadResourcesFromBuffer(Stream& file, const char* aFilename) { bool hasResources = true; if(!file.isOpen()) hasResources = false; else { int len, pos; TEST(file.length(len)); TEST(file.tell(pos)); if(len == pos) hasResources = false; } if(!hasResources/* && aFilename != NULL*/) { resources.init(0); return true; } #define MATCH_BYTE(c) { DAR_UBYTE(b); if(b != c) { FAIL; } } MATCH_BYTE('M'); MATCH_BYTE('A'); MATCH_BYTE('R'); MATCH_BYTE('S'); DAR_UVINT(nResources); DAR_UVINT(rSize); resources.init(nResources); // rI is the resource index. int rI = 1; while(true) { DAR_UBYTE(type); if(type == 0) break; //dispose flag DAR_UVINT(size); LOG_RES("Type %i, size %i\n", type, size); switch(type) { case RT_BINARY: { #ifndef _android MemStream* ms = new MemStream(size); #else char* b = loadBinary(rI, size); MemStream* ms = new MemStream(b, size); #endif TEST(file.readFully(*ms)); ROOM(resources.dadd_RT_BINARY(rI, ms)); #ifdef _android checkAndStoreAudioResource(rI); #endif } break; case RT_UBIN: { int pos; MYASSERT(aFilename, ERR_RES_LOAD_UBIN); TEST(file.tell(pos)); #ifndef _android ROOM(resources.dadd_RT_BINARY(rI, new LimitedFileStream(aFilename, pos, size))); #else // Android loads ubins by using JNI. loadUBinary(rI, pos, size); ROOM(resources.dadd_RT_BINARY(rI, new LimitedFileStream( aFilename, pos, size, getJNIEnvironment(), getJNIThis()))); #endif TEST(file.seek(Seek::Current, size)); } break; case RT_PLACEHOLDER: ROOM(resources.dadd_RT_PLACEHOLDER(rI, NULL)); break; case RT_IMAGE: { MemStream b(size); TEST(file.readFully(b)); #ifndef _android // On all platforms except Android, we load and add // the image data. "dadd" means "delete and add", // and is defined in runtimes\cpp\base\ResourceArray.h RT_IMAGE_Type* image = loadImage(b); if(!image) BIG_PHAT_ERROR(ERR_IMAGE_LOAD_FAILED); ROOM(resources.dadd_RT_IMAGE(rI, image)); #else // On Android images are stored on the Java side. // Here we allocate a dummy array (real image is // in a table in Java) so that the resource handling, // like deleting resources, will work also on Android. // The actual image will be garbage collected on // Android when a resource is replaced in the Java table. ROOM(resources.dadd_RT_IMAGE(rI, new int[1])); int pos; file.tell(pos); loadImage( rI, pos - size, size, Base::gSyscall->getReloadHandle()); #endif } break; case RT_SPRITE: { DAR_USHORT(indexSource); DAR_USHORT(left); DAR_USHORT(top); DAR_USHORT(width); DAR_USHORT(height); DAR_SHORT(cx); DAR_SHORT(cy); #ifndef _android ROOM(resources.dadd_RT_IMAGE(rI, loadSprite(resources.get_RT_IMAGE(indexSource), left, top, width, height, cx, cy))); #endif } break; case RT_LABEL: { MemStream b(size); TEST(file.readFully(b)); ROOM(resources.dadd_RT_LABEL(rI, new Label((const char*)b.ptr(), rI))); } break; #ifdef LOGGING_ENABLED case 99: //testtype #define DUMP_UVI { DAR_UVINT(u); LOG_RES("u %i\n", u); } #define DUMP_SVI { DAR_SVINT(s); LOG_RES("s %i\n", s); } DUMP_UVI; DUMP_UVI; DUMP_UVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; DUMP_SVI; break; #endif default: TEST(file.seek(Seek::Current, size)); } rI++; } if(rI != nResources + 1) { LOG("rI %i, nR %i\n", rI, nResources); BIG_PHAT_ERROR(ERR_RES_FILE_INCONSISTENT); } LOG_RES("ResLoad complete\n"); return true; }
static int cons_write_room (NkPort* port) { return ROOM(port); }