Итак... С локалями разобрался, проблема все-таки раньше, в момент получения данных от сокета. Соответственно могу весь файл выложить, но он больно большой... мб вот такой кусок пойдет: | Код |
/*<.0.>*/
/* If there are new connections waiting, accept them. */ if (FD_ISSET(mother_desc, &input_set)) new_descriptor(mother_desc);
/*<.1.>*/
/* Process descriptors with input pending */ /* Мысль есть, что пропадают буквы где-то в этом куске */ for (d = descriptor_list; d; d = next_d) { next_d = d->next; if (FD_ISSET(d->descriptor, &input_set)) if (process_input(d) < 0) close_socket(d); }
/* Process commands we just read from process_input */ for (d = descriptor_list; d; d = next_d) { next_d = d->next; /* * Not combined to retain --(d->wait) behavior. -gg 2/20/98 * If no wait state, no subtraction. If there is a wait * state then 1 is subtracted. Therefore we don't go less * than 0 ever and don't require an 'if' bracket. -gg 2/27/99 */ if (d->character) { GET_WAIT_STATE(d->character) -= (GET_WAIT_STATE(d->character) > 0);
if (GET_WAIT_STATE(d->character)) continue; }
if (!get_from_q(&d->input, comm, &aliased)) continue;
if (d->character) { /* Reset the idle timer & pull char back from void if necessary */ d->character->char_specials.timer = 0; if (STATE(d) == CON_PLAYING && GET_WAS_IN(d->character) != NOWHERE) { if (IN_ROOM(d->character) != NOWHERE) char_from_room(d->character); char_to_room(d->character, GET_WAS_IN(d->character)); GET_WAS_IN(d->character) = NOWHERE; act("$n has returned.", TRUE, d->character, 0, 0, TO_ROOM); } GET_WAIT_STATE(d->character) = 1; } d->has_prompt = FALSE; if (d->str)/* Writing boards, mail, etc. */ /* В этот момент в str уже находяться только английские буквы */ string_add(d, comm); else if (d->showstr_count) /* Reading something w/ pager */ show_string(d, comm); else if (STATE(d) != CON_PLAYING) /* In menus, etc. */ nanny(d, comm); else { /* else: we're playing normally. */ if (aliased) /* To prevent recursive aliases. */ d->has_prompt = TRUE; /* To get newline before next cmd output. */ else if (perform_alias(d, comm, sizeof(comm))) /* Run it through aliasing system */ get_from_q(&d->input, comm, &aliased); command_interpreter(d->character, comm); /* Send it to interpreter */
/*<.2.>*/
|
числа типа <.0.> - это пропуски кода (например удаления персонажей, потерявших связь и тд)... если нужно что-то оттуда - отписывайте номер, я выложу. Просто я честно не понимаю, где здесь можно потерять русские буквы. Только если в дескрипторах.
|