many fixes

This commit is contained in:
vysheng 2013-10-03 20:09:06 +04:00
parent 78f4d71855
commit 9c70da9ed7
3 changed files with 42 additions and 12 deletions

View File

@ -10,7 +10,7 @@ EXE=telegram
all: $(SRC) $(EXE)
$(EXE): $(OBJ)
$(LD) $(LDFLAGS) $(OBJ) -o $@
$(LD) $(OBJ) $(LDFLAGS) -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@

View File

@ -27,7 +27,7 @@ int commands_flags[] = {
070,
072,
};
char *a = 0;
char **user_list = &a;
char **chat_list = &a;
@ -36,7 +36,7 @@ int init_token (char **q) {
char *r = *q;
while (*r == ' ') { r ++; }
if (!*r) { return 0; }
q = &r;
*q = r;
return 1;
}
@ -44,7 +44,7 @@ char *get_token (char **q, int *l) {
char *r = *q;
while (*r == ' ') { r ++; }
if (!*r) {
q = &r;
*q = r;
*l = 0;
return 0;
}
@ -56,8 +56,9 @@ char *get_token (char **q, int *l) {
} else {
neg = 0;
}
r++;
}
q = &r;
*q = r;
*l = r - s;
return s;
}
@ -74,7 +75,7 @@ int get_complete_mode (void) {
int n = 0;
int flags = -1;
while (*command) {
if ((int)strlen (*command) == l && !memcmp (r, *command, l)) {
if (!strncmp (r, *command, l)) {
flags = commands_flags[n];
break;
}
@ -95,12 +96,10 @@ int get_complete_mode (void) {
int complete_string_list (char **list, int index, const char *text, int len, char **R) {
index ++;
int cc = 0;
while (cc <= 1 && list[index] && strncmp (list[index], text, len)) {
while (list[index] && strncmp (list[index], text, len)) {
index ++;
if (!list[index]) { index = 0; cc ++; }
}
if (list[index] && cc <= 1) {
if (list[index]) {
*R = strdup (list[index]);
return index;
} else {
@ -110,7 +109,7 @@ int complete_string_list (char **list, int index, const char *text, int len, cha
}
char *command_generator (const char *text, int state) {
static int len, index, mode;
if (!state) {
len = strlen (text);
index = -1;

33
loop.c
View File

@ -8,6 +8,8 @@
#include <readline/readline.h>
#include <readline/history.h>
#include <errno.h>
#include "interface.h"
extern char *default_username;
extern char *auth_token;
@ -16,7 +18,36 @@ void set_default_username (const char *s);
int main_loop (void) {
assert (0);
fd_set inp, outp;
struct timeval tv;
while (1) {
FD_ZERO (&inp);
FD_ZERO (&outp);
FD_SET (0, &inp);
tv.tv_sec = 1;
tv.tv_usec = 0;
int lfd = 0;
if (select (lfd + 1, &inp, &outp, NULL, &tv) < 0) {
if (errno == EINTR) {
/* resuming from interrupt, so not an error situation,
this generally happens when you suspend your
messenger with "C-z" and then "fg". This is allowed "
*/
rl_reset_line_state ();
rl_forced_update_display ();
continue;
}
perror ("select()");
break;
}
if (FD_ISSET (0, &inp)) {
rl_callback_read_char ();
}
}
return 0;
}
int loop (void) {