Applied patch by waltervn to remove the length parameter from getText() and fixed a silly bug in getLength()

svn-id: r40421
This commit is contained in:
Filippos Karapetis 2009-05-10 13:47:38 +00:00
parent dd84aaf648
commit 53f24f3e43
3 changed files with 40 additions and 50 deletions

View file

@ -727,56 +727,49 @@ reg_t kGetFarText(EngineState *s, int funct_nr, int argc, reg_t *argv) {
static MessageState state;
reg_t kMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
MessageTuple tuple;
if (!state.isInitialized())
message_state_initialize(s->resmgr, &state);
switch (UKPV(0)) {
case 0 : {
char *buffer = argc == 7 ? kernel_dereference_char_pointer(s, argv[6], 0) : NULL;
MessageTuple tuple;
int module = UKPV(1);
case 0:
case 2:
case 3:
case 4:
case 5:
if (!state.loadRes(UKPV(1)))
return NULL_REG;
tuple.noun = UKPV(2);
tuple.verb = UKPV(3);
tuple.cond = UKPV(4);
tuple.seq = UKPV(5);
}
switch (UKPV(0)) {
case 0 :
case 1 :
if (UKPV(0) == 0 ? state.getSpecific(&tuple) : state.getNext()) {
char *buffer = argc == 7 ? kernel_dereference_char_pointer(s, argv[6], state.getLength() + 1) : NULL;
if (state.loadRes(module) && state.getSpecific(&tuple)) {
if (buffer)
state.getText(buffer, 100);
state.getText(buffer);
// Talker id
return make_reg(0, state.getTalker());
} else {
if (buffer) strcpy(buffer, DUMMY_MESSAGE);
return NULL_REG;
}
}
case 1 : {
char *buffer = argc == 7 ? kernel_dereference_char_pointer(s, argv[6], 0) : NULL;
char *buffer = argc == 7 ? kernel_dereference_char_pointer(s, argv[6], 0) : NULL;
if (state.getNext()) {
if (buffer)
state.getText(buffer, 100);
// Talker id
return make_reg(0, state.getTalker());
} else {
if (buffer) strcpy(buffer, DUMMY_MESSAGE);
strcpy(buffer, DUMMY_MESSAGE);
return NULL_REG;
}
}
case 2 : {
MessageTuple tuple;
int module = UKPV(1);
tuple.noun = UKPV(2);
tuple.verb = UKPV(3);
tuple.cond = UKPV(4);
tuple.seq = UKPV(5);
if (state.loadRes(module) && state.getSpecific(&tuple))
case 2:
if (state.getSpecific(&tuple))
return make_reg(0, state.getLength() + 1);
else return NULL_REG;
}
}
return NULL_REG;
}
@ -785,8 +778,6 @@ reg_t kGetMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
if (!state.isInitialized())
message_state_initialize(s->resmgr, &state);
char *buffer = kernel_dereference_char_pointer(s, argv[3], 0);
MessageTuple tuple;
tuple.noun = UKPV(0);
int module = UKPV(1);
@ -794,12 +785,17 @@ reg_t kGetMessage(EngineState *s, int funct_nr, int argc, reg_t *argv) {
tuple.cond = 0;
tuple.seq = 0;
if (buffer && state.loadRes(module) && state.getSpecific(&tuple)) {
state.getText(buffer, 255);
return argv[3];
} else {
return NULL_REG;
if (state.loadRes(module) && state.getSpecific(&tuple)) {
int len = state.getLength();
char *buffer = kernel_dereference_char_pointer(s, argv[3], len + 1);
if (buffer) {
state.getText(buffer);
return argv[3];
}
}
return NULL_REG;
}
} // End of namespace Sci