diff options
author | irungentoo <irungentoo@gmail.com> | 2013-08-06 16:59:34 -0700 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2013-08-06 16:59:34 -0700 |
commit | 804216580d1db3ad9ad79da5f1f1183b5aec2568 (patch) | |
tree | 97bc0945c567d8cdbfdedfd00077a485fdbedaaa | |
parent | ba520d15583430d974c7fa7306cb7ba3fcac6759 (diff) | |
parent | 16b3ec746e9ab518a1efa221524391f8f692f75b (diff) |
Merge pull request #363 from JFreegman/master
code format/clean up
-rw-r--r-- | testing/toxic/chat.c | 108 | ||||
-rw-r--r-- | testing/toxic/friendlist.c | 104 | ||||
-rw-r--r-- | testing/toxic/main.c | 217 | ||||
-rw-r--r-- | testing/toxic/prompt.c | 284 |
4 files changed, 334 insertions, 379 deletions
diff --git a/testing/toxic/chat.c b/testing/toxic/chat.c index 7262e722..20c01620 100644 --- a/testing/toxic/chat.c +++ b/testing/toxic/chat.c | |||
@@ -16,38 +16,34 @@ | |||
16 | 16 | ||
17 | typedef struct { | 17 | typedef struct { |
18 | int friendnum; | 18 | int friendnum; |
19 | |||
20 | char line[256]; | 19 | char line[256]; |
21 | size_t pos; | 20 | size_t pos; |
22 | |||
23 | WINDOW* history; | 21 | WINDOW* history; |
24 | WINDOW* linewin; | 22 | WINDOW* linewin; |
25 | |||
26 | } ChatContext; | 23 | } ChatContext; |
27 | 24 | ||
28 | extern int w_active; | 25 | extern int active_window; |
26 | |||
29 | extern void del_window(ToxWindow *w, int f_num); | 27 | extern void del_window(ToxWindow *w, int f_num); |
30 | extern void fix_name(uint8_t* name); | 28 | extern void fix_name(uint8_t *name); |
31 | void print_help(ChatContext* self); | 29 | void print_help(ChatContext *self); |
32 | void execute(ToxWindow* self, ChatContext* ctx, char* cmd); | 30 | void execute(ToxWindow *self, ChatContext *ctx, char *cmd); |
33 | 31 | ||
34 | static void chat_onMessage(ToxWindow* self, int num, uint8_t* msg, uint16_t len) { | 32 | static void chat_onMessage(ToxWindow *self, int num, uint8_t *msg, uint16_t len) |
35 | ChatContext* ctx = (ChatContext*) self->x; | 33 | { |
34 | ChatContext *ctx = (ChatContext*) self->x; | ||
36 | uint8_t nick[MAX_NAME_LENGTH] = {0}; | 35 | uint8_t nick[MAX_NAME_LENGTH] = {0}; |
37 | |||
38 | time_t now; | 36 | time_t now; |
39 | time(&now); | 37 | time(&now); |
40 | struct tm * timeinfo; | 38 | struct tm * timeinfo; |
41 | timeinfo = localtime(&now); | 39 | timeinfo = localtime(&now); |
42 | 40 | ||
43 | if(ctx->friendnum != num) | 41 | if (ctx->friendnum != num) |
44 | return; | 42 | return; |
45 | 43 | ||
46 | getname(num, (uint8_t*) &nick); | 44 | getname(num, (uint8_t*) &nick); |
47 | |||
48 | msg[len-1] = '\0'; | 45 | msg[len-1] = '\0'; |
49 | nick[MAX_NAME_LENGTH-1] = '\0'; | 46 | nick[MAX_NAME_LENGTH-1] = '\0'; |
50 | |||
51 | fix_name(msg); | 47 | fix_name(msg); |
52 | fix_name(nick); | 48 | fix_name(nick); |
53 | 49 | ||
@@ -64,15 +60,14 @@ static void chat_onMessage(ToxWindow* self, int num, uint8_t* msg, uint16_t len) | |||
64 | flash(); | 60 | flash(); |
65 | } | 61 | } |
66 | 62 | ||
67 | static void chat_onNickChange(ToxWindow* self, int num, uint8_t* nick, uint16_t len) { | 63 | static void chat_onNickChange(ToxWindow *self, int num, uint8_t *nick, uint16_t len) |
68 | ChatContext* ctx = (ChatContext*) self->x; | 64 | { |
69 | 65 | ChatContext *ctx = (ChatContext*) self->x; | |
70 | if(ctx->friendnum != num) | 66 | if (ctx->friendnum != num) |
71 | return; | 67 | return; |
72 | 68 | ||
73 | nick[len-1] = '\0'; | 69 | nick[len-1] = '\0'; |
74 | fix_name(nick); | 70 | fix_name(nick); |
75 | |||
76 | snprintf(self->title, sizeof(self->title), "[%s (%d)]", nick, num); | 71 | snprintf(self->title, sizeof(self->title), "[%s (%d)]", nick, num); |
77 | 72 | ||
78 | wattron(ctx->history, COLOR_PAIR(3)); | 73 | wattron(ctx->history, COLOR_PAIR(3)); |
@@ -80,7 +75,8 @@ static void chat_onNickChange(ToxWindow* self, int num, uint8_t* nick, uint16_t | |||
80 | wattroff(ctx->history, COLOR_PAIR(3)); | 75 | wattroff(ctx->history, COLOR_PAIR(3)); |
81 | } | 76 | } |
82 | 77 | ||
83 | static void chat_onStatusChange(ToxWindow* self, int num, uint8_t* status, uint16_t len) { | 78 | static void chat_onStatusChange(ToxWindow *self, int num, uint8_t *status, uint16_t len) |
79 | { | ||
84 | 80 | ||
85 | } | 81 | } |
86 | 82 | ||
@@ -89,35 +85,33 @@ int string_is_empty(char *string) | |||
89 | { | 85 | { |
90 | int rc = 0; | 86 | int rc = 0; |
91 | char *copy = strdup(string); | 87 | char *copy = strdup(string); |
92 | |||
93 | rc = ((strtok(copy, " ") == NULL) ? 1:0); | 88 | rc = ((strtok(copy, " ") == NULL) ? 1:0); |
94 | free(copy); | 89 | free(copy); |
95 | |||
96 | return rc; | 90 | return rc; |
97 | } | 91 | } |
98 | 92 | ||
99 | static void chat_onKey(ToxWindow* self, int key) { | 93 | static void chat_onKey(ToxWindow *self, int key) |
100 | ChatContext* ctx = (ChatContext*) self->x; | 94 | { |
101 | 95 | ChatContext *ctx = (ChatContext*) self->x; | |
102 | time_t now; | 96 | time_t now; |
103 | time(&now); | 97 | time(&now); |
104 | struct tm * timeinfo; | 98 | struct tm * timeinfo; |
105 | timeinfo = localtime(&now); | 99 | timeinfo = localtime(&now); |
106 | 100 | ||
107 | /* PRINTABLE characters: Add to line */ | 101 | /* Add printable characters to line */ |
108 | if(isprint(key)) { | 102 | if (isprint(key)) { |
109 | if(ctx->pos != sizeof(ctx->line)-1) { | 103 | if (ctx->pos != sizeof(ctx->line)-1) { |
110 | ctx->line[ctx->pos++] = key; | 104 | ctx->line[ctx->pos++] = key; |
111 | ctx->line[ctx->pos] = '\0'; | 105 | ctx->line[ctx->pos] = '\0'; |
112 | } | 106 | } |
113 | } | 107 | } |
114 | 108 | ||
115 | /* RETURN key: Execute command or print line */ | 109 | /* RETURN key: Execute command or print line */ |
116 | else if(key == '\n') { | 110 | else if (key == '\n') { |
117 | if (ctx->line[0] == '/') | 111 | if (ctx->line[0] == '/') |
118 | execute(self, ctx, ctx->line); | 112 | execute(self, ctx, ctx->line); |
119 | else { | 113 | else { |
120 | if(!string_is_empty(ctx->line)) { | 114 | if (!string_is_empty(ctx->line)) { |
121 | /* make sure the string has at least non-space character */ | 115 | /* make sure the string has at least non-space character */ |
122 | wattron(ctx->history, COLOR_PAIR(2)); | 116 | wattron(ctx->history, COLOR_PAIR(2)); |
123 | wprintw(ctx->history, "[%02d:%02d:%02d] ", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); | 117 | wprintw(ctx->history, "[%02d:%02d:%02d] ", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); |
@@ -127,7 +121,7 @@ static void chat_onKey(ToxWindow* self, int key) { | |||
127 | wattroff(ctx->history, COLOR_PAIR(1)); | 121 | wattroff(ctx->history, COLOR_PAIR(1)); |
128 | wprintw(ctx->history, "%s\n", ctx->line); | 122 | wprintw(ctx->history, "%s\n", ctx->line); |
129 | } | 123 | } |
130 | if(m_sendmessage(ctx->friendnum, (uint8_t*) ctx->line, strlen(ctx->line)+1) < 0) { | 124 | if (m_sendmessage(ctx->friendnum, (uint8_t*) ctx->line, strlen(ctx->line)+1) < 0) { |
131 | wattron(ctx->history, COLOR_PAIR(3)); | 125 | wattron(ctx->history, COLOR_PAIR(3)); |
132 | wprintw(ctx->history, " * Failed to send message.\n"); | 126 | wprintw(ctx->history, " * Failed to send message.\n"); |
133 | wattroff(ctx->history, COLOR_PAIR(3)); | 127 | wattroff(ctx->history, COLOR_PAIR(3)); |
@@ -138,29 +132,32 @@ static void chat_onKey(ToxWindow* self, int key) { | |||
138 | } | 132 | } |
139 | 133 | ||
140 | /* BACKSPACE key: Remove one character from line */ | 134 | /* BACKSPACE key: Remove one character from line */ |
141 | else if(key == 0x107 || key == 0x8 || key == 0x7f) { | 135 | else if (key == 0x107 || key == 0x8 || key == 0x7f) { |
142 | if(ctx->pos != 0) { | 136 | if (ctx->pos != 0) { |
143 | ctx->line[--ctx->pos] = '\0'; | 137 | ctx->line[--ctx->pos] = '\0'; |
144 | } | 138 | } |
145 | } | 139 | } |
146 | } | 140 | } |
147 | 141 | ||
148 | void execute(ToxWindow* self, ChatContext* ctx, char* cmd) | 142 | void execute(ToxWindow *self, ChatContext *ctx, char *cmd) |
149 | { | 143 | { |
150 | if (!strcmp(cmd, "/clear") || !strcmp(cmd, "/c")) { | 144 | if (!strcmp(cmd, "/clear") || !strcmp(cmd, "/c")) { |
151 | wclear(self->window); | 145 | wclear(self->window); |
152 | wclear(ctx->history); | 146 | wclear(ctx->history); |
153 | } | 147 | } |
148 | |||
154 | else if (!strcmp(cmd, "/help") || !strcmp(cmd, "/h")) | 149 | else if (!strcmp(cmd, "/help") || !strcmp(cmd, "/h")) |
155 | print_help(ctx); | 150 | print_help(ctx); |
151 | |||
156 | else if (!strcmp(cmd, "/quit") || !strcmp(cmd, "/exit") || !strcmp(cmd, "/q")) { | 152 | else if (!strcmp(cmd, "/quit") || !strcmp(cmd, "/exit") || !strcmp(cmd, "/q")) { |
157 | endwin(); | 153 | endwin(); |
158 | exit(0); | 154 | exit(0); |
159 | } | 155 | } |
156 | |||
160 | else if (!strncmp(cmd, "/status ", strlen("/status "))) { | 157 | else if (!strncmp(cmd, "/status ", strlen("/status "))) { |
161 | char* msg; | 158 | char *msg; |
162 | msg = strchr(cmd, ' '); | 159 | msg = strchr(cmd, ' '); |
163 | if(msg == NULL) { | 160 | if (msg == NULL) { |
164 | wprintw(ctx->history, "Invalid syntax.\n"); | 161 | wprintw(ctx->history, "Invalid syntax.\n"); |
165 | return; | 162 | return; |
166 | } | 163 | } |
@@ -168,10 +165,11 @@ void execute(ToxWindow* self, ChatContext* ctx, char* cmd) | |||
168 | m_set_userstatus(USERSTATUS_KIND_RETAIN, (uint8_t*) msg, strlen(msg)+1); | 165 | m_set_userstatus(USERSTATUS_KIND_RETAIN, (uint8_t*) msg, strlen(msg)+1); |
169 | wprintw(ctx->history, "Status set to: %s\n", msg); | 166 | wprintw(ctx->history, "Status set to: %s\n", msg); |
170 | } | 167 | } |
168 | |||
171 | else if (!strncmp(cmd, "/nick ", strlen("/nick "))) { | 169 | else if (!strncmp(cmd, "/nick ", strlen("/nick "))) { |
172 | char* nick; | 170 | char *nick; |
173 | nick = strchr(cmd, ' '); | 171 | nick = strchr(cmd, ' '); |
174 | if(nick == NULL) { | 172 | if (nick == NULL) { |
175 | wprintw(ctx->history, "Invalid syntax.\n"); | 173 | wprintw(ctx->history, "Invalid syntax.\n"); |
176 | return; | 174 | return; |
177 | } | 175 | } |
@@ -179,7 +177,8 @@ void execute(ToxWindow* self, ChatContext* ctx, char* cmd) | |||
179 | setname((uint8_t*) nick, strlen(nick)+1); | 177 | setname((uint8_t*) nick, strlen(nick)+1); |
180 | wprintw(ctx->history, "Nickname set to: %s\n", nick); | 178 | wprintw(ctx->history, "Nickname set to: %s\n", nick); |
181 | } | 179 | } |
182 | else if(!strcmp(cmd, "/myid")) { | 180 | |
181 | else if (!strcmp(cmd, "/myid")) { | ||
183 | char id[32*2 + 1] = {0}; | 182 | char id[32*2 + 1] = {0}; |
184 | int i; | 183 | int i; |
185 | for (i = 0; i < 32; i++) { | 184 | for (i = 0; i < 32; i++) { |
@@ -189,48 +188,46 @@ void execute(ToxWindow* self, ChatContext* ctx, char* cmd) | |||
189 | } | 188 | } |
190 | wprintw(ctx->history, "Your ID: %s\n", id); | 189 | wprintw(ctx->history, "Your ID: %s\n", id); |
191 | } | 190 | } |
191 | |||
192 | else if (strcmp(ctx->line, "/close") == 0) { | 192 | else if (strcmp(ctx->line, "/close") == 0) { |
193 | w_active = 0; // Go to prompt screen | 193 | active_window = 0; // Go to prompt screen |
194 | int f_num = ctx->friendnum; | 194 | int f_num = ctx->friendnum; |
195 | delwin(ctx->linewin); | 195 | delwin(ctx->linewin); |
196 | del_window(self, f_num); | 196 | del_window(self, f_num); |
197 | } | 197 | } |
198 | |||
198 | else | 199 | else |
199 | wprintw(ctx->history, "Invalid command.\n"); | 200 | wprintw(ctx->history, "Invalid command.\n"); |
200 | } | 201 | } |
201 | 202 | ||
202 | static void chat_onDraw(ToxWindow* self) { | 203 | static void chat_onDraw(ToxWindow *self) |
204 | { | ||
203 | curs_set(1); | 205 | curs_set(1); |
204 | int x, y; | 206 | int x, y; |
205 | ChatContext* ctx = (ChatContext*) self->x; | 207 | ChatContext *ctx = (ChatContext*) self->x; |
206 | |||
207 | getmaxyx(self->window, y, x); | 208 | getmaxyx(self->window, y, x); |
208 | |||
209 | (void) x; | 209 | (void) x; |
210 | if(y < 3) | 210 | if (y < 3) return; |
211 | return; | ||
212 | 211 | ||
213 | wclear(ctx->linewin); | 212 | wclear(ctx->linewin); |
214 | mvwhline(ctx->linewin, 0, 0, '_', COLS); | 213 | mvwhline(ctx->linewin, 0, 0, '_', COLS); |
215 | mvwprintw(self->window, y-1, 0, "%s\n", ctx->line); | 214 | mvwprintw(self->window, y-1, 0, "%s\n", ctx->line); |
216 | |||
217 | wrefresh(self->window); | 215 | wrefresh(self->window); |
218 | } | 216 | } |
219 | 217 | ||
220 | static void chat_onInit(ToxWindow* self) { | 218 | static void chat_onInit(ToxWindow *self) |
219 | { | ||
221 | int x, y; | 220 | int x, y; |
222 | ChatContext* ctx = (ChatContext*) self->x; | 221 | ChatContext *ctx = (ChatContext*) self->x; |
223 | |||
224 | getmaxyx(self->window, y, x); | 222 | getmaxyx(self->window, y, x); |
225 | |||
226 | ctx->history = subwin(self->window, y - 4, x, 0, 0); | 223 | ctx->history = subwin(self->window, y - 4, x, 0, 0); |
227 | scrollok(ctx->history, 1); | 224 | scrollok(ctx->history, 1); |
228 | |||
229 | ctx->linewin = subwin(self->window, 2, x, y - 3, 0); | 225 | ctx->linewin = subwin(self->window, 2, x, y - 3, 0); |
230 | print_help(ctx); | 226 | print_help(ctx); |
231 | } | 227 | } |
232 | 228 | ||
233 | void print_help(ChatContext* self) { | 229 | void print_help(ChatContext *self) |
230 | { | ||
234 | wattron(self->history, COLOR_PAIR(2) | A_BOLD); | 231 | wattron(self->history, COLOR_PAIR(2) | A_BOLD); |
235 | wprintw(self->history, "Commands:\n"); | 232 | wprintw(self->history, "Commands:\n"); |
236 | wattroff(self->history, A_BOLD); | 233 | wattroff(self->history, A_BOLD); |
@@ -246,9 +243,9 @@ void print_help(ChatContext* self) { | |||
246 | wattroff(self->history, COLOR_PAIR(2)); | 243 | wattroff(self->history, COLOR_PAIR(2)); |
247 | } | 244 | } |
248 | 245 | ||
249 | ToxWindow new_chat(int friendnum) { | 246 | ToxWindow new_chat(int friendnum) |
247 | { | ||
250 | ToxWindow ret; | 248 | ToxWindow ret; |
251 | |||
252 | memset(&ret, 0, sizeof(ret)); | 249 | memset(&ret, 0, sizeof(ret)); |
253 | 250 | ||
254 | ret.onKey = &chat_onKey; | 251 | ret.onKey = &chat_onKey; |
@@ -264,9 +261,8 @@ ToxWindow new_chat(int friendnum) { | |||
264 | 261 | ||
265 | snprintf(ret.title, sizeof(ret.title), "[%s (%d)]", nick, friendnum); | 262 | snprintf(ret.title, sizeof(ret.title), "[%s (%d)]", nick, friendnum); |
266 | 263 | ||
267 | ChatContext* x = calloc(1, sizeof(ChatContext)); | 264 | ChatContext *x = calloc(1, sizeof(ChatContext)); |
268 | x->friendnum = friendnum; | 265 | x->friendnum = friendnum; |
269 | |||
270 | ret.x = (void*) x; | 266 | ret.x = (void*) x; |
271 | return ret; | 267 | return ret; |
272 | } | 268 | } |
diff --git a/testing/toxic/friendlist.c b/testing/toxic/friendlist.c index 94e8fb47..f03914e6 100644 --- a/testing/toxic/friendlist.c +++ b/testing/toxic/friendlist.c | |||
@@ -15,60 +15,56 @@ | |||
15 | extern char WINDOW_STATUS[TOXWINDOWS_MAX_NUM]; | 15 | extern char WINDOW_STATUS[TOXWINDOWS_MAX_NUM]; |
16 | extern int add_window(ToxWindow w, int n); | 16 | extern int add_window(ToxWindow w, int n); |
17 | extern ToxWindow new_chat(int friendnum); | 17 | extern ToxWindow new_chat(int friendnum); |
18 | extern int w_active; | 18 | |
19 | extern int active_window; | ||
19 | 20 | ||
20 | typedef struct { | 21 | typedef struct { |
21 | uint8_t name[MAX_NAME_LENGTH]; | 22 | uint8_t name[MAX_NAME_LENGTH]; |
22 | uint8_t status[MAX_USERSTATUS_LENGTH]; | 23 | uint8_t status[MAX_USERSTATUS_LENGTH]; |
23 | int num; | 24 | int num; |
24 | int chatwin; | 25 | int chatwin; |
25 | } friend_t; | 26 | } friend_t; |
26 | 27 | ||
27 | static friend_t friends[MAX_FRIENDS_NUM]; | 28 | static friend_t friends[MAX_FRIENDS_NUM]; |
28 | static int num_friends = 0; | 29 | static int num_friends = 0; |
29 | static int num_selected = 0; | 30 | static int num_selected = 0; |
30 | 31 | ||
31 | 32 | void fix_name(uint8_t *name) | |
32 | void fix_name(uint8_t* name) { | 33 | { |
33 | 34 | /* Remove all non alphanumeric characters */ | |
34 | // Remove all non alphanumeric characters. | 35 | uint8_t *p = name; |
35 | uint8_t* p = name; | 36 | uint8_t *q = name; |
36 | uint8_t* q = name; | ||
37 | |||
38 | while(*p != 0) { | 37 | while(*p != 0) { |
39 | if(isprint(*p)) { | 38 | if (isprint(*p)) |
40 | *q++ = *p; | 39 | *q++ = *p; |
41 | } | ||
42 | |||
43 | p++; | 40 | p++; |
44 | } | 41 | } |
45 | |||
46 | *q = 0; | 42 | *q = 0; |
47 | } | 43 | } |
48 | 44 | ||
49 | void friendlist_onMessage(ToxWindow* self, int num, uint8_t* str, uint16_t len) { | 45 | void friendlist_onMessage(ToxWindow *self, int num, uint8_t *str, uint16_t len) |
50 | 46 | { | |
51 | if(num >= num_friends) | 47 | if (num >= num_friends) |
52 | return; | 48 | return; |
53 | 49 | ||
54 | if(friends[num].chatwin == -1) { | 50 | if (friends[num].chatwin == -1) { |
55 | friends[num].chatwin = num; | 51 | friends[num].chatwin = num; |
56 | int i; | 52 | int i; |
57 | /* Find first open slot to hold chat window */ | 53 | /* Find first open slot to hold chat window */ |
58 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; i++) { | 54 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) { |
59 | if (WINDOW_STATUS[i] == -1) { | 55 | if (WINDOW_STATUS[i] == -1) { |
60 | WINDOW_STATUS[i] = num; | 56 | WINDOW_STATUS[i] = num; |
61 | add_window(new_chat(num), i); | 57 | add_window(new_chat(num), i); |
62 | w_active = i; | 58 | active_window = i; |
63 | break; | 59 | break; |
64 | } | 60 | } |
65 | } | 61 | } |
66 | } | 62 | } |
67 | } | 63 | } |
68 | 64 | ||
69 | void friendlist_onNickChange(ToxWindow* self, int num, uint8_t* str, uint16_t len) { | 65 | void friendlist_onNickChange(ToxWindow *self, int num, uint8_t *str, uint16_t len) |
70 | 66 | { | |
71 | if(len >= MAX_NAME_LENGTH || num >= num_friends) | 67 | if (len >= MAX_NAME_LENGTH || num >= num_friends) |
72 | return; | 68 | return; |
73 | 69 | ||
74 | memcpy((char*) &friends[num].name, (char*) str, len); | 70 | memcpy((char*) &friends[num].name, (char*) str, len); |
@@ -76,9 +72,9 @@ void friendlist_onNickChange(ToxWindow* self, int num, uint8_t* str, uint16_t le | |||
76 | fix_name(friends[num].name); | 72 | fix_name(friends[num].name); |
77 | } | 73 | } |
78 | 74 | ||
79 | void friendlist_onStatusChange(ToxWindow* self, int num, uint8_t* str, uint16_t len) { | 75 | void friendlist_onStatusChange(ToxWindow *self, int num, uint8_t *str, uint16_t len) |
80 | 76 | { | |
81 | if(len >= MAX_USERSTATUS_LENGTH || num >= num_friends) | 77 | if (len >= MAX_USERSTATUS_LENGTH || num >= num_friends) |
82 | return; | 78 | return; |
83 | 79 | ||
84 | memcpy((char*) &friends[num].status, (char*) str, len); | 80 | memcpy((char*) &friends[num].status, (char*) str, len); |
@@ -86,9 +82,9 @@ void friendlist_onStatusChange(ToxWindow* self, int num, uint8_t* str, uint16_t | |||
86 | fix_name(friends[num].status); | 82 | fix_name(friends[num].status); |
87 | } | 83 | } |
88 | 84 | ||
89 | int friendlist_onFriendAdded(int num) { | 85 | int friendlist_onFriendAdded(int num) |
90 | 86 | { | |
91 | if(num_friends == MAX_FRIENDS_NUM) | 87 | if (num_friends == MAX_FRIENDS_NUM) |
92 | return -1; | 88 | return -1; |
93 | 89 | ||
94 | friends[num_friends].num = num; | 90 | friends[num_friends].num = num; |
@@ -99,34 +95,34 @@ int friendlist_onFriendAdded(int num) { | |||
99 | return 0; | 95 | return 0; |
100 | } | 96 | } |
101 | 97 | ||
102 | static void friendlist_onKey(ToxWindow* self, int key) { | 98 | static void friendlist_onKey(ToxWindow *self, int key) |
103 | if(key == KEY_UP) { | 99 | { |
104 | num_selected--; | 100 | if (key == KEY_UP) { |
105 | if (num_selected < 0) | 101 | if (--num_selected < 0) |
106 | num_selected = num_friends-1; | 102 | num_selected = num_friends-1; |
107 | } | 103 | } |
108 | else if(key == KEY_DOWN) { | 104 | else if (key == KEY_DOWN) { |
109 | if(num_friends != 0) | 105 | if (num_friends != 0) |
110 | num_selected = (num_selected+1) % num_friends; | 106 | num_selected = (num_selected+1) % num_friends; |
111 | } | 107 | } |
112 | else if(key == '\n') { | 108 | else if (key == '\n') { |
113 | /* Jump to chat window if already open */ | 109 | /* Jump to chat window if already open */ |
114 | if (friends[num_selected].chatwin != -1) { | 110 | if (friends[num_selected].chatwin != -1) { |
115 | int i; | 111 | int i; |
116 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; i++) { | 112 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) { |
117 | if (WINDOW_STATUS[i] == num_selected) { | 113 | if (WINDOW_STATUS[i] == num_selected) { |
118 | w_active = i; | 114 | active_window = i; |
119 | break; | 115 | break; |
120 | } | 116 | } |
121 | } | 117 | } |
122 | }else { | 118 | }else { |
123 | int i; | 119 | int i; |
124 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; i++) { | 120 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) { |
125 | if (WINDOW_STATUS[i] == -1) { | 121 | if (WINDOW_STATUS[i] == -1) { |
126 | WINDOW_STATUS[i] = num_selected; | 122 | WINDOW_STATUS[i] = num_selected; |
127 | friends[num_selected].chatwin = num_selected; | 123 | friends[num_selected].chatwin = num_selected; |
128 | add_window(new_chat(num_selected), i); | 124 | add_window(new_chat(num_selected), i); |
129 | w_active = i; | 125 | active_window = i; |
130 | break; | 126 | break; |
131 | } | 127 | } |
132 | } | 128 | } |
@@ -134,13 +130,11 @@ static void friendlist_onKey(ToxWindow* self, int key) { | |||
134 | } | 130 | } |
135 | } | 131 | } |
136 | 132 | ||
137 | static void friendlist_onDraw(ToxWindow* self) { | 133 | static void friendlist_onDraw(ToxWindow *self) |
134 | { | ||
138 | curs_set(0); | 135 | curs_set(0); |
139 | size_t i; | ||
140 | |||
141 | werase(self->window); | 136 | werase(self->window); |
142 | 137 | if (num_friends == 0) { | |
143 | if(num_friends == 0) { | ||
144 | wprintw(self->window, "Empty. Add some friends! :-)\n"); | 138 | wprintw(self->window, "Empty. Add some friends! :-)\n"); |
145 | } | 139 | } |
146 | else { | 140 | else { |
@@ -150,12 +144,11 @@ static void friendlist_onDraw(ToxWindow* self) { | |||
150 | } | 144 | } |
151 | 145 | ||
152 | wprintw(self->window, "\n"); | 146 | wprintw(self->window, "\n"); |
153 | 147 | int i; | |
154 | for(i=0; i<num_friends; i++) { | 148 | for (i = 0; i < num_friends; ++i) { |
155 | 149 | if (i == num_selected) wattron(self->window, COLOR_PAIR(3)); | |
156 | if(i == num_selected) wattron(self->window, COLOR_PAIR(3)); | ||
157 | wprintw(self->window, " [#%d] ", friends[i].num); | 150 | wprintw(self->window, " [#%d] ", friends[i].num); |
158 | if(i == num_selected) wattroff(self->window, COLOR_PAIR(3)); | 151 | if (i == num_selected) wattroff(self->window, COLOR_PAIR(3)); |
159 | 152 | ||
160 | attron(A_BOLD); | 153 | attron(A_BOLD); |
161 | wprintw(self->window, "%s ", friends[i].name); | 154 | wprintw(self->window, "%s ", friends[i].name); |
@@ -163,22 +156,21 @@ static void friendlist_onDraw(ToxWindow* self) { | |||
163 | 156 | ||
164 | wprintw(self->window, "(%s)\n", friends[i].status); | 157 | wprintw(self->window, "(%s)\n", friends[i].status); |
165 | } | 158 | } |
166 | |||
167 | wrefresh(self->window); | 159 | wrefresh(self->window); |
168 | } | 160 | } |
169 | 161 | ||
170 | void disable_chatwin(int f_num) { | 162 | void disable_chatwin(int f_num) |
163 | { | ||
171 | friends[f_num].chatwin = -1; | 164 | friends[f_num].chatwin = -1; |
172 | } | 165 | } |
173 | 166 | ||
174 | static void friendlist_onInit(ToxWindow* self) { | 167 | static void friendlist_onInit(ToxWindow *self) |
168 | { | ||
175 | 169 | ||
176 | } | 170 | } |
177 | 171 | ||
178 | |||
179 | ToxWindow new_friendlist() { | 172 | ToxWindow new_friendlist() { |
180 | ToxWindow ret; | 173 | ToxWindow ret; |
181 | |||
182 | memset(&ret, 0, sizeof(ret)); | 174 | memset(&ret, 0, sizeof(ret)); |
183 | 175 | ||
184 | ret.onKey = &friendlist_onKey; | 176 | ret.onKey = &friendlist_onKey; |
@@ -187,7 +179,7 @@ ToxWindow new_friendlist() { | |||
187 | ret.onMessage = &friendlist_onMessage; | 179 | ret.onMessage = &friendlist_onMessage; |
188 | ret.onNickChange = &friendlist_onNickChange; | 180 | ret.onNickChange = &friendlist_onNickChange; |
189 | ret.onStatusChange = &friendlist_onStatusChange; | 181 | ret.onStatusChange = &friendlist_onStatusChange; |
190 | strcpy(ret.title, "[friends]"); | ||
191 | 182 | ||
183 | strcpy(ret.title, "[friends]"); | ||
192 | return ret; | 184 | return ret; |
193 | } | 185 | } |
diff --git a/testing/toxic/main.c b/testing/toxic/main.c index 19a0b959..1ba8b6c9 100644 --- a/testing/toxic/main.c +++ b/testing/toxic/main.c | |||
@@ -18,106 +18,108 @@ extern ToxWindow new_friendlist(); | |||
18 | 18 | ||
19 | extern int friendlist_onFriendAdded(int num); | 19 | extern int friendlist_onFriendAdded(int num); |
20 | extern void disable_chatwin(int f_num); | 20 | extern void disable_chatwin(int f_num); |
21 | extern int add_req(uint8_t* public_key); // XXX | 21 | extern int add_req(uint8_t *public_key); // XXX |
22 | |||
23 | /* Holds status of chat windows */ | ||
24 | char WINDOW_STATUS[MAX_WINDOW_SLOTS]; | ||
22 | 25 | ||
23 | char WINDOW_STATUS[MAX_WINDOW_SLOTS]; // Holds status of chat windows | ||
24 | static ToxWindow windows[MAX_WINDOW_SLOTS]; | 26 | static ToxWindow windows[MAX_WINDOW_SLOTS]; |
25 | int w_num; | ||
26 | int w_active; | ||
27 | static ToxWindow* prompt; | 27 | static ToxWindow* prompt; |
28 | 28 | ||
29 | // CALLBACKS START | 29 | int w_num; |
30 | void on_request(uint8_t* public_key, uint8_t* data, uint16_t length) { | 30 | int active_window; |
31 | size_t i; | ||
32 | int n = add_req(public_key); | ||
33 | 31 | ||
32 | /* CALLBACKS START */ | ||
33 | void on_request(uint8_t *public_key, uint8_t *data, uint16_t length) | ||
34 | { | ||
35 | int n = add_req(public_key); | ||
34 | wprintw(prompt->window, "\nFriend request from:\n"); | 36 | wprintw(prompt->window, "\nFriend request from:\n"); |
35 | 37 | ||
36 | for(i=0; i<32; i++) { | 38 | int i; |
39 | for (i = 0; i < 32; ++i) { | ||
37 | wprintw(prompt->window, "%02x", public_key[i] & 0xff); | 40 | wprintw(prompt->window, "%02x", public_key[i] & 0xff); |
38 | } | 41 | } |
39 | wprintw(prompt->window, "\n"); | ||
40 | 42 | ||
43 | wprintw(prompt->window, "\n"); | ||
41 | wprintw(prompt->window, "Use \"accept %d\" to accept it.\n", n); | 44 | wprintw(prompt->window, "Use \"accept %d\" to accept it.\n", n); |
42 | 45 | for (i = 0; i < MAX_WINDOW_SLOTS; ++i) { | |
43 | for(i=0; i<MAX_WINDOW_SLOTS; i++) { | 46 | if (windows[i].onFriendRequest != NULL) |
44 | if(windows[i].onFriendRequest != NULL) | ||
45 | windows[i].onFriendRequest(&windows[i], public_key, data, length); | 47 | windows[i].onFriendRequest(&windows[i], public_key, data, length); |
46 | } | 48 | } |
47 | } | 49 | } |
48 | 50 | ||
49 | void on_message(int friendnumber, uint8_t* string, uint16_t length) { | 51 | void on_message(int friendnumber, uint8_t *string, uint16_t length) |
50 | size_t i; | 52 | { |
51 | |||
52 | wprintw(prompt->window, "\n(message) %d: %s\n", friendnumber, string); | 53 | wprintw(prompt->window, "\n(message) %d: %s\n", friendnumber, string); |
53 | 54 | int i; | |
54 | for(i=0; i<MAX_WINDOW_SLOTS; i++) { | 55 | for (i = 0; i < MAX_WINDOW_SLOTS; ++i) { |
55 | if(windows[i].onMessage != NULL) | 56 | if (windows[i].onMessage != NULL) |
56 | windows[i].onMessage(&windows[i], friendnumber, string, length); | 57 | windows[i].onMessage(&windows[i], friendnumber, string, length); |
57 | } | 58 | } |
58 | } | 59 | } |
59 | 60 | ||
60 | void on_nickchange(int friendnumber, uint8_t* string, uint16_t length) { | 61 | void on_nickchange(int friendnumber, uint8_t *string, uint16_t length) |
61 | size_t i; | 62 | { |
62 | |||
63 | wprintw(prompt->window, "\n(nickchange) %d: %s!\n", friendnumber, string); | 63 | wprintw(prompt->window, "\n(nickchange) %d: %s!\n", friendnumber, string); |
64 | 64 | int i; | |
65 | for(i=0; i<MAX_WINDOW_SLOTS; i++) { | 65 | for (i = 0; i < MAX_WINDOW_SLOTS; ++i) { |
66 | if(windows[i].onNickChange != NULL) | 66 | if (windows[i].onNickChange != NULL) |
67 | windows[i].onNickChange(&windows[i], friendnumber, string, length); | 67 | windows[i].onNickChange(&windows[i], friendnumber, string, length); |
68 | } | 68 | } |
69 | } | 69 | } |
70 | 70 | ||
71 | void on_statuschange(int friendnumber, USERSTATUS_KIND kind, uint8_t* string, uint16_t length) { | 71 | void on_statuschange(int friendnumber, USERSTATUS_KIND kind, uint8_t *string, uint16_t length) |
72 | size_t i; | 72 | { |
73 | |||
74 | wprintw(prompt->window, "\n(statuschange) %d: %s\n", friendnumber, string); | 73 | wprintw(prompt->window, "\n(statuschange) %d: %s\n", friendnumber, string); |
75 | 74 | int i; | |
76 | for(i=0; i<MAX_WINDOW_SLOTS; i++) { | 75 | for (i=0; i<MAX_WINDOW_SLOTS; ++i) { |
77 | if(windows[i].onStatusChange != NULL) | 76 | if (windows[i].onStatusChange != NULL) |
78 | windows[i].onStatusChange(&windows[i], friendnumber, string, length); | 77 | windows[i].onStatusChange(&windows[i], friendnumber, string, length); |
79 | } | 78 | } |
80 | } | 79 | } |
81 | 80 | ||
82 | void on_friendadded(int friendnumber) { | 81 | void on_friendadded(int friendnumber) |
82 | { | ||
83 | friendlist_onFriendAdded(friendnumber); | 83 | friendlist_onFriendAdded(friendnumber); |
84 | } | 84 | } |
85 | // CALLBACKS END | 85 | /* CALLBACKS END */ |
86 | 86 | ||
87 | static void init_term() { | 87 | static void init_term() |
88 | // Setup terminal. | 88 | { |
89 | /* Setup terminal */ | ||
89 | initscr(); | 90 | initscr(); |
90 | cbreak(); | 91 | cbreak(); |
91 | keypad(stdscr, 1); | 92 | keypad(stdscr, 1); |
92 | noecho(); | 93 | noecho(); |
93 | timeout(100); | 94 | timeout(100); |
94 | 95 | ||
95 | if(has_colors()) { | 96 | if (has_colors()) { |
96 | start_color(); | 97 | start_color(); |
97 | init_pair(1, COLOR_GREEN, COLOR_BLACK); | 98 | init_pair(1, COLOR_GREEN, COLOR_BLACK); |
98 | init_pair(2, COLOR_CYAN, COLOR_BLACK); | 99 | init_pair(2, COLOR_CYAN, COLOR_BLACK); |
99 | init_pair(3, COLOR_RED, COLOR_BLACK); | 100 | init_pair(3, COLOR_RED, COLOR_BLACK); |
100 | init_pair(4, COLOR_BLUE, COLOR_BLACK); | 101 | init_pair(4, COLOR_BLUE, COLOR_BLACK); |
101 | } | 102 | } |
102 | |||
103 | refresh(); | 103 | refresh(); |
104 | } | 104 | } |
105 | 105 | ||
106 | static void init_tox() { | 106 | static void init_tox() |
107 | // Init core. | 107 | { |
108 | /* Init core */ | ||
108 | initMessenger(); | 109 | initMessenger(); |
109 | 110 | ||
110 | // Callbacks. | 111 | /* Callbacks */ |
111 | m_callback_friendrequest(on_request); | 112 | m_callback_friendrequest(on_request); |
112 | m_callback_friendmessage(on_message); | 113 | m_callback_friendmessage(on_message); |
113 | m_callback_namechange(on_nickchange); | 114 | m_callback_namechange(on_nickchange); |
114 | m_callback_userstatus(on_statuschange); | 115 | m_callback_userstatus(on_statuschange); |
115 | } | 116 | } |
116 | 117 | ||
117 | void init_window_status() { | 118 | void init_window_status() |
119 | { | ||
118 | /* Default window values decrement from -2 */ | 120 | /* Default window values decrement from -2 */ |
119 | int i; | 121 | int i; |
120 | for (i = 0; i < N_DEFAULT_WINS; i++) | 122 | for (i = 0; i < N_DEFAULT_WINS; ++i) |
121 | WINDOW_STATUS[i] = -(i+2); | 123 | WINDOW_STATUS[i] = -(i+2); |
122 | 124 | ||
123 | int j; | 125 | int j; |
@@ -125,15 +127,16 @@ void init_window_status() { | |||
125 | WINDOW_STATUS[j] = -1; | 127 | WINDOW_STATUS[j] = -1; |
126 | } | 128 | } |
127 | 129 | ||
128 | int add_window(ToxWindow w, int n) { | 130 | int add_window(ToxWindow w, int n) |
129 | if(w_num >= TOXWINDOWS_MAX_NUM) | 131 | { |
132 | if (w_num >= TOXWINDOWS_MAX_NUM) | ||
130 | return -1; | 133 | return -1; |
131 | 134 | ||
132 | if(LINES < 2) | 135 | if (LINES < 2) |
133 | return -1; | 136 | return -1; |
134 | 137 | ||
135 | w.window = newwin(LINES - 2, COLS, 0, 0); | 138 | w.window = newwin(LINES - 2, COLS, 0, 0); |
136 | if(w.window == NULL) | 139 | if (w.window == NULL) |
137 | return -1; | 140 | return -1; |
138 | 141 | ||
139 | windows[n] = w; | 142 | windows[n] = w; |
@@ -143,10 +146,11 @@ int add_window(ToxWindow w, int n) { | |||
143 | } | 146 | } |
144 | 147 | ||
145 | /* Deletes window w and cleans up */ | 148 | /* Deletes window w and cleans up */ |
146 | void del_window(ToxWindow *w, int f_num) { | 149 | void del_window(ToxWindow *w, int f_num) |
150 | { | ||
147 | delwin(w->window); | 151 | delwin(w->window); |
148 | int i; | 152 | int i; |
149 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; i++) { | 153 | for (i = N_DEFAULT_WINS; i < MAX_WINDOW_SLOTS; ++i) { |
150 | if (WINDOW_STATUS[i] == f_num) { | 154 | if (WINDOW_STATUS[i] == f_num) { |
151 | WINDOW_STATUS[i] = -1; | 155 | WINDOW_STATUS[i] = -1; |
152 | disable_chatwin(f_num); | 156 | disable_chatwin(f_num); |
@@ -157,11 +161,12 @@ void del_window(ToxWindow *w, int f_num) { | |||
157 | refresh(); | 161 | refresh(); |
158 | } | 162 | } |
159 | 163 | ||
160 | static void init_windows() { | 164 | static void init_windows() |
165 | { | ||
161 | w_num = 0; | 166 | w_num = 0; |
162 | int n_prompt = 0; | 167 | int n_prompt = 0; |
163 | int n_friendslist = 1; | 168 | int n_friendslist = 1; |
164 | if(add_window(new_prompt(), n_prompt) == -1 | 169 | if (add_window(new_prompt(), n_prompt) == -1 |
165 | || add_window(new_friendlist(), n_friendslist) == -1) { | 170 | || add_window(new_friendlist(), n_friendslist) == -1) { |
166 | fprintf(stderr, "add_window() failed.\n"); | 171 | fprintf(stderr, "add_window() failed.\n"); |
167 | endwin(); | 172 | endwin(); |
@@ -170,88 +175,79 @@ static void init_windows() { | |||
170 | prompt = &windows[n_prompt]; | 175 | prompt = &windows[n_prompt]; |
171 | } | 176 | } |
172 | 177 | ||
173 | static void do_tox() { | 178 | static void do_tox() |
179 | { | ||
174 | static bool dht_on = false; | 180 | static bool dht_on = false; |
175 | 181 | if (!dht_on && DHT_isconnected()) { | |
176 | if(!dht_on && DHT_isconnected()) { | ||
177 | dht_on = true; | 182 | dht_on = true; |
178 | wprintw(prompt->window, "\nDHT connected!\n"); | 183 | wprintw(prompt->window, "\nDHT connected!\n"); |
179 | } | 184 | } |
180 | else if(dht_on && !DHT_isconnected()) { | 185 | else if (dht_on && !DHT_isconnected()) { |
181 | dht_on = false; | 186 | dht_on = false; |
182 | wprintw(prompt->window, "\nDHT disconnected!\n"); | 187 | wprintw(prompt->window, "\nDHT disconnected!\n"); |
183 | } | 188 | } |
184 | |||
185 | doMessenger(); | 189 | doMessenger(); |
186 | } | 190 | } |
187 | 191 | ||
188 | static void load_data(char *path) { | 192 | static void load_data(char *path) |
189 | FILE* fd; | 193 | { |
194 | FILE *fd; | ||
190 | size_t len; | 195 | size_t len; |
191 | uint8_t* buf; | 196 | uint8_t *buf; |
192 | 197 | ||
193 | if((fd = fopen(path, "r")) != NULL) { | 198 | if ((fd = fopen(path, "r")) != NULL) { |
194 | fseek(fd, 0, SEEK_END); | 199 | fseek(fd, 0, SEEK_END); |
195 | len = ftell(fd); | 200 | len = ftell(fd); |
196 | fseek(fd, 0, SEEK_SET); | 201 | fseek(fd, 0, SEEK_SET); |
197 | 202 | ||
198 | buf = malloc(len); | 203 | buf = malloc(len); |
199 | 204 | if (buf == NULL) { | |
200 | if(buf == NULL) { | ||
201 | fprintf(stderr, "malloc() failed.\n"); | 205 | fprintf(stderr, "malloc() failed.\n"); |
202 | |||
203 | fclose(fd); | 206 | fclose(fd); |
204 | endwin(); | 207 | endwin(); |
205 | exit(1); | 208 | exit(1); |
206 | } | 209 | } |
207 | 210 | if (fread(buf, len, 1, fd) != 1){ | |
208 | if(fread(buf, len, 1, fd) != 1){ | ||
209 | fprintf(stderr, "fread() failed.\n"); | 211 | fprintf(stderr, "fread() failed.\n"); |
210 | |||
211 | free(buf); | 212 | free(buf); |
212 | fclose(fd); | 213 | fclose(fd); |
213 | endwin(); | 214 | endwin(); |
214 | exit(1); | 215 | exit(1); |
215 | } | 216 | } |
216 | |||
217 | Messenger_load(buf, len); | 217 | Messenger_load(buf, len); |
218 | } | 218 | } |
219 | else { | 219 | else { |
220 | len = Messenger_size(); | 220 | len = Messenger_size(); |
221 | buf = malloc(len); | 221 | buf = malloc(len); |
222 | 222 | if (buf == NULL) { | |
223 | if(buf == NULL) { | ||
224 | fprintf(stderr, "malloc() failed.\n"); | 223 | fprintf(stderr, "malloc() failed.\n"); |
225 | endwin(); | 224 | endwin(); |
226 | exit(1); | 225 | exit(1); |
227 | } | 226 | } |
228 | |||
229 | Messenger_save(buf); | 227 | Messenger_save(buf); |
230 | 228 | ||
231 | fd = fopen(path, "w"); | 229 | fd = fopen(path, "w"); |
232 | if(fd == NULL) { | 230 | if (fd == NULL) { |
233 | fprintf(stderr, "fopen() failed.\n"); | 231 | fprintf(stderr, "fopen() failed.\n"); |
234 | |||
235 | free(buf); | 232 | free(buf); |
236 | endwin(); | 233 | endwin(); |
237 | exit(1); | 234 | exit(1); |
238 | } | 235 | } |
239 | 236 | ||
240 | if(fwrite(buf, len, 1, fd) != 1){ | 237 | if (fwrite(buf, len, 1, fd) != 1){ |
241 | fprintf(stderr, "fwrite() failed.\n"); | 238 | fprintf(stderr, "fwrite() failed.\n"); |
242 | |||
243 | free(buf); | 239 | free(buf); |
244 | fclose(fd); | 240 | fclose(fd); |
245 | endwin(); | 241 | endwin(); |
246 | exit(1); | 242 | exit(1); |
247 | } | 243 | } |
248 | } | 244 | } |
249 | |||
250 | free(buf); | 245 | free(buf); |
251 | fclose(fd); | 246 | fclose(fd); |
252 | } | 247 | } |
253 | 248 | ||
254 | static void draw_bar() { | 249 | static void draw_bar() |
250 | { | ||
255 | static int odd = 0; | 251 | static int odd = 0; |
256 | 252 | ||
257 | attron(COLOR_PAIR(4)); | 253 | attron(COLOR_PAIR(4)); |
@@ -265,21 +261,21 @@ static void draw_bar() { | |||
265 | attroff(COLOR_PAIR(4) | A_BOLD); | 261 | attroff(COLOR_PAIR(4) | A_BOLD); |
266 | 262 | ||
267 | int i; | 263 | int i; |
268 | for (i = 0; i < (MAX_WINDOW_SLOTS-1); i++) { | 264 | for (i = 0; i < (MAX_WINDOW_SLOTS); ++i) { |
269 | if (WINDOW_STATUS[i] != -1) { | 265 | if (WINDOW_STATUS[i] != -1) { |
270 | if (i == w_active) | 266 | if (i == active_window) |
271 | attron(A_BOLD); | 267 | attron(A_BOLD); |
272 | 268 | ||
273 | odd = (odd+1) % 10; | 269 | odd = (odd+1) % 10; |
274 | if(windows[i].blink && (odd < 5)) { | 270 | if (windows[i].blink && (odd < 5)) { |
275 | attron(COLOR_PAIR(3)); | 271 | attron(COLOR_PAIR(3)); |
276 | } | 272 | } |
277 | 273 | ||
278 | printw(" %s", windows[i].title); | 274 | printw(" %s", windows[i].title); |
279 | if(windows[i].blink && (odd < 5)) { | 275 | if (windows[i].blink && (odd < 5)) { |
280 | attron(COLOR_PAIR(3)); | 276 | attron(COLOR_PAIR(3)); |
281 | } | 277 | } |
282 | if(i == w_active) { | 278 | if (i == active_window) { |
283 | attroff(A_BOLD); | 279 | attroff(A_BOLD); |
284 | } | 280 | } |
285 | } | 281 | } |
@@ -287,35 +283,37 @@ static void draw_bar() { | |||
287 | refresh(); | 283 | refresh(); |
288 | } | 284 | } |
289 | 285 | ||
290 | void prepare_window(WINDOW* w) { | 286 | void prepare_window(WINDOW *w) |
287 | { | ||
291 | mvwin(w, 0, 0); | 288 | mvwin(w, 0, 0); |
292 | wresize(w, LINES-2, COLS); | 289 | wresize(w, LINES-2, COLS); |
293 | } | 290 | } |
294 | 291 | ||
295 | /* Shows next window when tab or back-tab is pressed */ | 292 | /* Shows next window when tab or back-tab is pressed */ |
296 | void set_active_window(int ch) { | 293 | void set_active_window(int ch) |
294 | { | ||
297 | int f_inf = 0; | 295 | int f_inf = 0; |
298 | int max = MAX_WINDOW_SLOTS-1; | 296 | int max = MAX_WINDOW_SLOTS-1; |
299 | if (ch == '\t') { | 297 | if (ch == '\t') { |
300 | int i = (w_active + 1) % max; | 298 | int i = (active_window + 1) % max; |
301 | while (true) { | 299 | while (true) { |
302 | if (WINDOW_STATUS[i] != -1) { | 300 | if (WINDOW_STATUS[i] != -1) { |
303 | w_active = i; | 301 | active_window = i; |
304 | return; | 302 | return; |
305 | } | 303 | } |
306 | i = (i + 1) % max; | 304 | i = (i + 1) % max; |
307 | if (f_inf++ > max) { // infinite loop check | 305 | if (f_inf++ > max) { // infinite loop check |
308 | endwin(); | 306 | endwin(); |
309 | clear(); | 307 | clear(); |
310 | exit(2); | 308 | exit(2); |
311 | } | 309 | } |
312 | } | 310 | } |
313 | }else { | 311 | }else { |
314 | int i = w_active - 1; | 312 | int i = active_window - 1; |
315 | if (i < 0) i = max; | 313 | if (i < 0) i = max; |
316 | while (true) { | 314 | while (true) { |
317 | if (WINDOW_STATUS[i] != -1) { | 315 | if (WINDOW_STATUS[i] != -1) { |
318 | w_active = i; | 316 | active_window = i; |
319 | return; | 317 | return; |
320 | } | 318 | } |
321 | if (--i < 0) i = max; | 319 | if (--i < 0) i = max; |
@@ -328,26 +326,26 @@ void set_active_window(int ch) { | |||
328 | } | 326 | } |
329 | } | 327 | } |
330 | 328 | ||
331 | int main(int argc, char* argv[]) { | 329 | int main(int argc, char *argv[]) |
330 | { | ||
332 | int ch; | 331 | int ch; |
333 | int i = 0; | ||
334 | int f_flag = 0; | 332 | int f_flag = 0; |
335 | char *filename = "data"; | 333 | char *filename = "data"; |
336 | ToxWindow* a; | 334 | ToxWindow* a; |
337 | 335 | ||
338 | for(i = 0; i < argc; i++) { | 336 | int i = 0; |
339 | if (argv[i] == NULL){ | 337 | for (i = 0; i < argc; ++i) { |
340 | break; | 338 | if (argv[i] == NULL) |
341 | } else if(argv[i][0] == '-') { | 339 | break; |
342 | if(argv[i][1] == 'f') { | 340 | else if (argv[i][0] == '-') { |
343 | if(argv[i + 1] != NULL) | 341 | if (argv[i][1] == 'f') { |
344 | filename = argv[i + 1]; | 342 | if (argv[i + 1] != NULL) |
345 | else { | 343 | filename = argv[i + 1]; |
346 | f_flag = -1; | 344 | else |
347 | } | 345 | f_flag = -1; |
348 | } | 346 | } |
349 | } | ||
350 | } | 347 | } |
348 | } | ||
351 | 349 | ||
352 | init_term(); | 350 | init_term(); |
353 | init_tox(); | 351 | init_tox(); |
@@ -355,7 +353,7 @@ int main(int argc, char* argv[]) { | |||
355 | init_windows(); | 353 | init_windows(); |
356 | init_window_status(); | 354 | init_window_status(); |
357 | 355 | ||
358 | if(f_flag == -1) { | 356 | if (f_flag == -1) { |
359 | attron(COLOR_PAIR(3) | A_BOLD); | 357 | attron(COLOR_PAIR(3) | A_BOLD); |
360 | wprintw(prompt->window, "You passed '-f' without giving an argument!\n" | 358 | wprintw(prompt->window, "You passed '-f' without giving an argument!\n" |
361 | "defaulting to 'data' for a keyfile...\n"); | 359 | "defaulting to 'data' for a keyfile...\n"); |
@@ -363,24 +361,21 @@ int main(int argc, char* argv[]) { | |||
363 | } | 361 | } |
364 | 362 | ||
365 | while(true) { | 363 | while(true) { |
366 | // Update tox. | 364 | /* Update tox */ |
367 | do_tox(); | 365 | do_tox(); |
368 | 366 | ||
369 | // Draw. | 367 | /* Draw */ |
370 | a = &windows[w_active]; | 368 | a = &windows[active_window]; |
371 | prepare_window(a->window); | 369 | prepare_window(a->window); |
372 | a->blink = false; | 370 | a->blink = false; |
373 | draw_bar(); | 371 | draw_bar(); |
374 | a->onDraw(a); | 372 | a->onDraw(a); |
375 | 373 | ||
376 | // Handle input. | 374 | /* Handle input */ |
377 | ch = getch(); | 375 | ch = getch(); |
378 | if(ch == '\t' || ch == KEY_BTAB) | 376 | if (ch == '\t' || ch == KEY_BTAB) |
379 | set_active_window(ch); | 377 | set_active_window(ch); |
380 | else if(ch != ERR) { | 378 | else if (ch != ERR) { |
381 | a->onKey(a, ch); | ||
382 | } | ||
383 | else if(ch != ERR) { | ||
384 | a->onKey(a, ch); | 379 | a->onKey(a, ch); |
385 | } | 380 | } |
386 | } | 381 | } |
diff --git a/testing/toxic/prompt.c b/testing/toxic/prompt.c index 20f6b480..89c87d8f 100644 --- a/testing/toxic/prompt.c +++ b/testing/toxic/prompt.c | |||
@@ -16,83 +16,78 @@ uint8_t pending_requests[256][CLIENT_ID_SIZE]; // XXX | |||
16 | uint8_t num_requests=0; // XXX | 16 | uint8_t num_requests=0; // XXX |
17 | 17 | ||
18 | extern void on_friendadded(int friendnumber); | 18 | extern void on_friendadded(int friendnumber); |
19 | static void print_usage(ToxWindow* self); | 19 | static void print_usage(ToxWindow *self); |
20 | static char prompt_buf[256] = {0}; | ||
21 | static int prompt_buf_pos = 0; | ||
20 | 22 | ||
21 | // XXX: | 23 | // XXX: |
22 | int add_req(uint8_t* public_key) { | 24 | int add_req(uint8_t *public_key) |
25 | { | ||
23 | memcpy(pending_requests[num_requests], public_key, CLIENT_ID_SIZE); | 26 | memcpy(pending_requests[num_requests], public_key, CLIENT_ID_SIZE); |
24 | ++num_requests; | 27 | ++num_requests; |
25 | |||
26 | return num_requests-1; | 28 | return num_requests-1; |
27 | } | 29 | } |
28 | 30 | ||
29 | // XXX: FIX | 31 | // XXX: FIX |
30 | unsigned char * hex_string_to_bin(char hex_string[]) | 32 | unsigned char *hex_string_to_bin(char hex_string[]) |
31 | { | 33 | { |
32 | size_t len = strlen(hex_string); | 34 | size_t len = strlen(hex_string); |
33 | unsigned char *val = malloc(len); | 35 | unsigned char *val = malloc(len); |
34 | char *pos = hex_string; | 36 | char *pos = hex_string; |
35 | int i; | 37 | int i; |
36 | for(i = 0; i < len; ++i, pos+=2) | 38 | for (i = 0; i < len; ++i, pos+=2) |
37 | sscanf(pos,"%2hhx",&val[i]); | 39 | sscanf(pos,"%2hhx",&val[i]); |
38 | return val; | 40 | return val; |
39 | } | 41 | } |
40 | 42 | ||
41 | static char prompt_buf[256] = {0}; | 43 | static void execute(ToxWindow *self, char *u_cmd) |
42 | static int prompt_buf_pos=0; | 44 | { |
43 | 45 | int newlines = 0; | |
44 | static void execute(ToxWindow* self, char* u_cmd) { | 46 | char cmd[256] = {0}; |
45 | int i; | 47 | int i; |
46 | int newlines = 0; | 48 | for (i = 0; i < strlen(prompt_buf); ++i) { |
47 | char cmd[256] = {0}; | ||
48 | for(i = 0; i < strlen(prompt_buf); i++) | ||
49 | { | ||
50 | if (u_cmd[i] == '\n') | 49 | if (u_cmd[i] == '\n') |
51 | ++newlines; | 50 | ++newlines; |
52 | else | 51 | else |
53 | cmd[i - newlines] = u_cmd[i]; | 52 | cmd[i - newlines] = u_cmd[i]; |
54 | } | 53 | } |
55 | 54 | ||
56 | if(!strcmp(cmd, "quit") || !strcmp(cmd, "exit") || !strcmp(cmd, "q")) { | 55 | if (!strcmp(cmd, "quit") || !strcmp(cmd, "exit") || !strcmp(cmd, "q")) { |
57 | endwin(); | 56 | endwin(); |
58 | exit(0); | 57 | exit(0); |
59 | } | 58 | } |
60 | else if(!strncmp(cmd, "connect ", strlen("connect "))) { | ||
61 | char* ip; | ||
62 | char* port; | ||
63 | char* key; | ||
64 | IP_Port dht; | ||
65 | 59 | ||
66 | ip = strchr(cmd, ' '); | 60 | else if (!strncmp(cmd, "connect ", strlen("connect "))) { |
67 | if(ip == NULL) { | 61 | IP_Port dht; |
62 | char *ip = strchr(cmd, ' '); | ||
63 | if (ip == NULL) { | ||
68 | wprintw(self->window, "Invalid syntax.\n"); | 64 | wprintw(self->window, "Invalid syntax.\n"); |
69 | return; | 65 | return; |
70 | } | 66 | } |
71 | ip++; | 67 | ip++; |
72 | 68 | ||
73 | port = strchr(ip, ' '); | 69 | char *port = strchr(ip, ' '); |
74 | if(port == NULL) { | 70 | if (port == NULL) { |
75 | wprintw(self->window, "Invalid syntax.\n"); | 71 | wprintw(self->window, "Invalid syntax.\n"); |
76 | return; | 72 | return; |
77 | } | 73 | } |
78 | port[0] = 0; | 74 | port[0] = 0; |
79 | port++; | 75 | port++; |
80 | 76 | ||
81 | key = strchr(port, ' '); | 77 | char *key = strchr(port, ' '); |
82 | if(key == NULL) { | 78 | if (key == NULL) { |
83 | wprintw(self->window, "Invalid syntax.\n"); | 79 | wprintw(self->window, "Invalid syntax.\n"); |
84 | return; | 80 | return; |
85 | } | 81 | } |
86 | key[0] = 0; | 82 | key[0] = 0; |
87 | key++; | 83 | key++; |
88 | 84 | ||
89 | if(atoi(port) == 0) { | 85 | if (atoi(port) == 0) { |
90 | wprintw(self->window, "Invalid syntax.\n"); | 86 | wprintw(self->window, "Invalid syntax.\n"); |
91 | return; | 87 | return; |
92 | } | 88 | } |
93 | 89 | ||
94 | dht.port = htons(atoi(port)); | 90 | dht.port = htons(atoi(port)); |
95 | |||
96 | uint32_t resolved_address = resolve_addr(ip); | 91 | uint32_t resolved_address = resolve_addr(ip); |
97 | if (resolved_address == 0) { | 92 | if (resolved_address == 0) { |
98 | return; | 93 | return; |
@@ -103,49 +98,39 @@ static void execute(ToxWindow* self, char* u_cmd) { | |||
103 | DHT_bootstrap(dht, binary_string); | 98 | DHT_bootstrap(dht, binary_string); |
104 | free(binary_string); | 99 | free(binary_string); |
105 | } | 100 | } |
106 | else if(!strncmp(cmd, "add ", strlen("add "))) { | 101 | |
102 | else if (!strncmp(cmd, "add ", strlen("add "))) { | ||
107 | uint8_t id_bin[32]; | 103 | uint8_t id_bin[32]; |
108 | size_t i; | ||
109 | char xx[3]; | 104 | char xx[3]; |
110 | uint32_t x; | 105 | uint32_t x; |
111 | 106 | char *id = strchr(cmd, ' '); | |
112 | char* id; | 107 | if (id == NULL) { |
113 | char* msg; | ||
114 | int num; | ||
115 | |||
116 | id = strchr(cmd, ' '); | ||
117 | if(id == NULL) { | ||
118 | wprintw(self->window, "Invalid syntax.\n"); | 108 | wprintw(self->window, "Invalid syntax.\n"); |
119 | return; | 109 | return; |
120 | } | 110 | } |
121 | id++; | 111 | id++; |
122 | 112 | char *msg = strchr(id, ' '); | |
123 | msg = strchr(id, ' '); | 113 | if (msg != NULL) { |
124 | if(msg != NULL) { | ||
125 | msg[0] = 0; | 114 | msg[0] = 0; |
126 | msg++; | 115 | msg++; |
127 | } | 116 | } |
128 | else msg = ""; | 117 | else msg = ""; |
129 | 118 | if (strlen(id) != 2*32) { | |
130 | if(strlen(id) != 2*32) { | ||
131 | wprintw(self->window, "Invalid ID length.\n"); | 119 | wprintw(self->window, "Invalid ID length.\n"); |
132 | return; | 120 | return; |
133 | } | 121 | } |
134 | 122 | int i; | |
135 | for(i=0; i<32; i++) { | 123 | for (i = 0; i < 32; ++i) { |
136 | xx[0] = id[2*i]; | 124 | xx[0] = id[2*i]; |
137 | xx[1] = id[2*i+1]; | 125 | xx[1] = id[2*i+1]; |
138 | xx[2] = '\0'; | 126 | xx[2] = '\0'; |
139 | 127 | if (sscanf(xx, "%02x", &x) != 1) { | |
140 | if(sscanf(xx, "%02x", &x) != 1) { | ||
141 | wprintw(self->window, "Invalid ID.\n"); | 128 | wprintw(self->window, "Invalid ID.\n"); |
142 | return; | 129 | return; |
143 | } | 130 | } |
144 | |||
145 | id_bin[i] = x; | 131 | id_bin[i] = x; |
146 | } | 132 | } |
147 | 133 | int num = m_addfriend(id_bin, (uint8_t*) msg, strlen(msg)+1); | |
148 | num = m_addfriend(id_bin, (uint8_t*) msg, strlen(msg)+1); | ||
149 | switch (num) { | 134 | switch (num) { |
150 | case -1: | 135 | case -1: |
151 | wprintw(self->window, "Message is too long.\n"); | 136 | wprintw(self->window, "Message is too long.\n"); |
@@ -168,178 +153,167 @@ static void execute(ToxWindow* self, char* u_cmd) { | |||
168 | break; | 153 | break; |
169 | } | 154 | } |
170 | } | 155 | } |
171 | else if(!strcmp(cmd, "clear")) { | 156 | |
172 | wclear(self->window); | 157 | else if (!strcmp(cmd, "clear")) { |
158 | wclear(self->window); | ||
173 | } | 159 | } |
174 | else if(!strcmp(cmd, "help")) { | 160 | |
175 | wclear(self->window); | 161 | else if (!strcmp(cmd, "help")) { |
176 | print_usage(self); | 162 | wclear(self->window); |
163 | print_usage(self); | ||
177 | } | 164 | } |
178 | else if(!strncmp(cmd, "status ", strlen("status "))) { | ||
179 | char* msg; | ||
180 | 165 | ||
181 | msg = strchr(cmd, ' '); | 166 | else if (!strncmp(cmd, "status ", strlen("status "))) { |
182 | if(msg == NULL) { | 167 | char *msg = strchr(cmd, ' '); |
168 | if (msg == NULL) { | ||
183 | wprintw(self->window, "Invalid syntax.\n"); | 169 | wprintw(self->window, "Invalid syntax.\n"); |
184 | return; | 170 | return; |
185 | } | 171 | } |
186 | msg++; | 172 | msg++; |
187 | |||
188 | m_set_userstatus(USERSTATUS_KIND_RETAIN, (uint8_t*) msg, strlen(msg)+1); | 173 | m_set_userstatus(USERSTATUS_KIND_RETAIN, (uint8_t*) msg, strlen(msg)+1); |
189 | wprintw(self->window, "Status set to: %s\n", msg); | 174 | wprintw(self->window, "Status set to: %s\n", msg); |
190 | } | 175 | } |
191 | else if(!strncmp(cmd, "nick ", strlen("nick "))) { | ||
192 | char* nick; | ||
193 | 176 | ||
194 | nick = strchr(cmd, ' '); | 177 | else if (!strncmp(cmd, "nick ", strlen("nick "))) { |
195 | if(nick == NULL) { | 178 | char *nick = strchr(cmd, ' '); |
179 | if (nick == NULL) { | ||
196 | wprintw(self->window, "Invalid syntax.\n"); | 180 | wprintw(self->window, "Invalid syntax.\n"); |
197 | return; | 181 | return; |
198 | } | 182 | } |
199 | nick++; | 183 | nick++; |
200 | |||
201 | setname((uint8_t*) nick, strlen(nick)+1); | 184 | setname((uint8_t*) nick, strlen(nick)+1); |
202 | wprintw(self->window, "Nickname set to: %s\n", nick); | 185 | wprintw(self->window, "Nickname set to: %s\n", nick); |
203 | } | 186 | } |
204 | else if(!strcmp(cmd, "myid")) { | 187 | |
188 | else if (!strcmp(cmd, "myid")) { | ||
205 | char id[32*2 + 1] = {0}; | 189 | char id[32*2 + 1] = {0}; |
206 | size_t i; | 190 | size_t i; |
207 | 191 | for (i = 0; i < 32; ++i) { | |
208 | for(i=0; i<32; i++) { | ||
209 | char xx[3]; | 192 | char xx[3]; |
210 | snprintf(xx, sizeof(xx), "%02x", self_public_key[i] & 0xff); | 193 | snprintf(xx, sizeof(xx), "%02x", self_public_key[i] & 0xff); |
211 | strcat(id, xx); | 194 | strcat(id, xx); |
212 | } | 195 | } |
213 | |||
214 | wprintw(self->window, "Your ID: %s\n", id); | 196 | wprintw(self->window, "Your ID: %s\n", id); |
215 | } | 197 | } |
216 | else if(!strncmp(cmd, "accept ", strlen("accept "))) { | ||
217 | char* id; | ||
218 | int num; | ||
219 | 198 | ||
220 | id = strchr(cmd, ' '); | 199 | else if (!strncmp(cmd, "accept ", strlen("accept "))) { |
221 | if(id == NULL) { | 200 | char *id = strchr(cmd, ' '); |
201 | if (id == NULL) { | ||
222 | wprintw(self->window, "Invalid syntax.\n"); | 202 | wprintw(self->window, "Invalid syntax.\n"); |
223 | return; | 203 | return; |
224 | } | 204 | } |
225 | id++; | 205 | id++; |
226 | 206 | ||
227 | num = atoi(id); | 207 | int num = atoi(id); |
228 | if(num >= num_requests) { | 208 | if (num >= num_requests) { |
229 | wprintw(self->window, "Invalid syntax.\n"); | 209 | wprintw(self->window, "Invalid syntax.\n"); |
230 | return; | 210 | return; |
231 | } | 211 | } |
232 | 212 | ||
233 | num = m_addfriend_norequest(pending_requests[num]); | 213 | num = m_addfriend_norequest(pending_requests[num]); |
234 | 214 | if (num == -1) | |
235 | if(num == -1) { | ||
236 | wprintw(self->window, "Failed to add friend.\n"); | 215 | wprintw(self->window, "Failed to add friend.\n"); |
237 | } | ||
238 | else { | 216 | else { |
239 | wprintw(self->window, "Friend accepted as: %d.\n", num); | 217 | wprintw(self->window, "Friend accepted as: %d.\n", num); |
240 | on_friendadded(num); | 218 | on_friendadded(num); |
241 | } | 219 | } |
242 | } | 220 | } |
243 | else if(!strncmp(cmd, "msg ", strlen("msg "))) { | ||
244 | char* id; | ||
245 | char* msg; | ||
246 | |||
247 | id = strchr(cmd, ' '); | ||
248 | 221 | ||
249 | if(id == NULL) { | 222 | else if (!strncmp(cmd, "msg ", strlen("msg "))) { |
223 | char *id = strchr(cmd, ' '); | ||
224 | if (id == NULL) { | ||
250 | wprintw(self->window, "Invalid syntax.\n"); | 225 | wprintw(self->window, "Invalid syntax.\n"); |
251 | return; | 226 | return; |
252 | } | 227 | } |
253 | id++; | 228 | char *msg = strchr(++id, ' '); |
254 | 229 | if (msg == NULL) { | |
255 | msg = strchr(id, ' '); | ||
256 | if(msg == NULL) { | ||
257 | wprintw(self->window, "Invalid syntax.\n"); | 230 | wprintw(self->window, "Invalid syntax.\n"); |
258 | return; | 231 | return; |
259 | } | 232 | } |
260 | msg[0] = 0; | 233 | msg[0] = 0; |
261 | msg++; | 234 | msg++; |
262 | 235 | if (m_sendmessage(atoi(id), (uint8_t*) msg, strlen(msg)+1) < 0) | |
263 | if(m_sendmessage(atoi(id), (uint8_t*) msg, strlen(msg)+1) < 0) { | ||
264 | wprintw(self->window, "Error occurred while sending message.\n"); | 236 | wprintw(self->window, "Error occurred while sending message.\n"); |
265 | } | 237 | else |
266 | else { | ||
267 | wprintw(self->window, "Message successfully sent.\n"); | 238 | wprintw(self->window, "Message successfully sent.\n"); |
268 | } | ||
269 | } | 239 | } |
270 | else { | 240 | else |
271 | wprintw(self->window, "Invalid command.\n"); | 241 | wprintw(self->window, "Invalid command.\n"); |
272 | } | ||
273 | } | 242 | } |
274 | 243 | ||
275 | static void prompt_onKey(ToxWindow* self, int key) { | 244 | static void prompt_onKey(ToxWindow *self, int key) |
276 | // PRINTABLE characters: Add to line. | 245 | { |
277 | if(isprint(key)) { | 246 | /* Add printable characters to line */ |
278 | if (prompt_buf_pos == (sizeof(prompt_buf) - 1)){ | 247 | if (isprint(key)) { |
279 | wprintw(self->window, "\nToo Long.\n"); | 248 | if (prompt_buf_pos == (sizeof(prompt_buf) - 1)) { |
280 | prompt_buf_pos = 0; | 249 | wprintw(self->window, "\nToo Long.\n"); |
281 | prompt_buf[0] = 0; | 250 | prompt_buf_pos = 0; |
282 | } | 251 | prompt_buf[0] = 0; |
283 | else if(!(prompt_buf_pos == 0) && (prompt_buf_pos < COLS) && (prompt_buf_pos % (COLS - 3) == 0)) { | 252 | } |
284 | prompt_buf[prompt_buf_pos++] = '\n'; | 253 | else if (!(prompt_buf_pos == 0) && (prompt_buf_pos < COLS) |
254 | && (prompt_buf_pos % (COLS - 3) == 0)) { | ||
255 | prompt_buf[prompt_buf_pos++] = '\n'; | ||
285 | } | 256 | } |
286 | else if(!(prompt_buf_pos == 0) && (prompt_buf_pos > COLS) && ((prompt_buf_pos - (COLS - 3)) % (COLS) == 0)) { | 257 | else if (!(prompt_buf_pos == 0) && (prompt_buf_pos > COLS) |
287 | prompt_buf[prompt_buf_pos++] = '\n'; | 258 | && ((prompt_buf_pos - (COLS - 3)) % (COLS) == 0)) { |
259 | prompt_buf[prompt_buf_pos++] = '\n'; | ||
288 | } | 260 | } |
289 | prompt_buf[prompt_buf_pos++] = key; | 261 | prompt_buf[prompt_buf_pos++] = key; |
290 | prompt_buf[prompt_buf_pos] = 0; | 262 | prompt_buf[prompt_buf_pos] = 0; |
291 | } | 263 | } |
292 | 264 | ||
293 | // RETURN key: execute command. | 265 | /* RETURN key: execute command */ |
294 | else if(key == '\n') { | 266 | else if (key == '\n') { |
295 | wprintw(self->window, "\n"); | 267 | wprintw(self->window, "\n"); |
296 | execute(self, prompt_buf); | 268 | execute(self, prompt_buf); |
297 | prompt_buf_pos = 0; | 269 | prompt_buf_pos = 0; |
298 | prompt_buf[0] = 0; | 270 | prompt_buf[0] = 0; |
299 | } | 271 | } |
300 | 272 | ||
301 | // BACKSPACE key: Remove one character from line. | 273 | /* BACKSPACE key: Remove one character from line */ |
302 | else if(key == 0x107 || key == 0x8 || key == 0x7f) { | 274 | else if (key == 0x107 || key == 0x8 || key == 0x7f) { |
303 | if(prompt_buf_pos != 0) { | 275 | if (prompt_buf_pos != 0) { |
304 | prompt_buf[--prompt_buf_pos] = 0; | 276 | prompt_buf[--prompt_buf_pos] = 0; |
305 | } | 277 | } |
306 | } | 278 | } |
307 | } | 279 | } |
308 | 280 | ||
309 | static void prompt_onDraw(ToxWindow* self) { | 281 | static void prompt_onDraw(ToxWindow *self) |
310 | curs_set(1); | 282 | { |
311 | int x, y; | 283 | curs_set(1); |
312 | getyx(self->window, y, x); | 284 | int x, y; |
313 | (void) x; | 285 | getyx(self->window, y, x); |
314 | int i; | 286 | (void) x; |
315 | for (i = 0; i < (strlen(prompt_buf)); i++) | 287 | int i; |
316 | { | 288 | for (i = 0; i < (strlen(prompt_buf)); ++i) { |
317 | if ((prompt_buf[i] == '\n') && (y != 0)) | 289 | if ((prompt_buf[i] == '\n') && (y != 0)) |
318 | --y; | 290 | --y; |
319 | } | 291 | } |
320 | wattron(self->window, COLOR_PAIR(1)); | 292 | |
321 | mvwprintw(self->window, y, 0, "# "); | 293 | wattron(self->window, COLOR_PAIR(1)); |
322 | wattroff(self->window, COLOR_PAIR(1)); | 294 | mvwprintw(self->window, y, 0, "# "); |
323 | mvwprintw(self->window, y, 2, "%s", prompt_buf); | 295 | wattroff(self->window, COLOR_PAIR(1)); |
324 | wclrtoeol(self->window); | 296 | mvwprintw(self->window, y, 2, "%s", prompt_buf); |
325 | wrefresh(self->window); | 297 | wclrtoeol(self->window); |
298 | wrefresh(self->window); | ||
326 | } | 299 | } |
327 | 300 | ||
328 | static void print_usage(ToxWindow* self) { | 301 | static void print_usage(ToxWindow *self) |
302 | { | ||
329 | wattron(self->window, COLOR_PAIR(2) | A_BOLD); | 303 | wattron(self->window, COLOR_PAIR(2) | A_BOLD); |
330 | wprintw(self->window, "Commands:\n"); | 304 | wprintw(self->window, "Commands:\n"); |
331 | wattroff(self->window, A_BOLD); | 305 | wattroff(self->window, A_BOLD); |
332 | |||
333 | wprintw(self->window, " connect <ip> <port> <key> : Connect to DHT server\n"); | ||
334 | wprintw(self->window, " add <id> <message> : Add friend\n"); | ||
335 | wprintw(self->window, " status <message> : Set your status\n"); | ||
336 | wprintw(self->window, " nick <nickname> : Set your nickname\n"); | ||
337 | wprintw(self->window, " accept <number> : Accept friend request\n"); | ||
338 | wprintw(self->window, " myid : Print your ID\n"); | ||
339 | wprintw(self->window, " quit/exit : Exit program\n"); | ||
340 | wprintw(self->window, " help : Print this message again\n"); | ||
341 | wprintw(self->window, " clear : Clear this window\n"); | ||
342 | 306 | ||
307 | wprintw(self->window, " connect <ip> <port> <key> : Connect to DHT server\n"); | ||
308 | wprintw(self->window, " add <id> <message> : Add friend\n"); | ||
309 | wprintw(self->window, " status <message> : Set your status\n"); | ||
310 | wprintw(self->window, " nick <nickname> : Set your nickname\n"); | ||
311 | wprintw(self->window, " accept <number> : Accept friend request\n"); | ||
312 | wprintw(self->window, " myid : Print your ID\n"); | ||
313 | wprintw(self->window, " quit/exit : Exit program\n"); | ||
314 | wprintw(self->window, " help : Print this message again\n"); | ||
315 | wprintw(self->window, " clear : Clear this window\n"); | ||
316 | |||
343 | wattron(self->window, A_BOLD); | 317 | wattron(self->window, A_BOLD); |
344 | wprintw(self->window, "TIP: Use the TAB key to navigate through the tabs.\n\n"); | 318 | wprintw(self->window, "TIP: Use the TAB key to navigate through the tabs.\n\n"); |
345 | wattroff(self->window, A_BOLD); | 319 | wattroff(self->window, A_BOLD); |
@@ -347,22 +321,20 @@ static void print_usage(ToxWindow* self) { | |||
347 | wattroff(self->window, COLOR_PAIR(2)); | 321 | wattroff(self->window, COLOR_PAIR(2)); |
348 | } | 322 | } |
349 | 323 | ||
350 | static void prompt_onInit(ToxWindow* self) { | 324 | static void prompt_onInit(ToxWindow *self) |
325 | { | ||
351 | scrollok(self->window, 1); | 326 | scrollok(self->window, 1); |
352 | |||
353 | print_usage(self); | 327 | print_usage(self); |
354 | wclrtoeol(self->window); | 328 | wclrtoeol(self->window); |
355 | } | 329 | } |
356 | 330 | ||
357 | ToxWindow new_prompt() { | 331 | ToxWindow new_prompt() |
332 | { | ||
358 | ToxWindow ret; | 333 | ToxWindow ret; |
359 | |||
360 | memset(&ret, 0, sizeof(ret)); | 334 | memset(&ret, 0, sizeof(ret)); |
361 | |||
362 | ret.onKey = &prompt_onKey; | 335 | ret.onKey = &prompt_onKey; |
363 | ret.onDraw = &prompt_onDraw; | 336 | ret.onDraw = &prompt_onDraw; |
364 | ret.onInit = &prompt_onInit; | 337 | ret.onInit = &prompt_onInit; |
365 | strcpy(ret.title, "[prompt]"); | 338 | strcpy(ret.title, "[prompt]"); |
366 | |||
367 | return ret; | 339 | return ret; |
368 | } | 340 | } |