Mercurial > hg > nnchat
comparison nnchat.c @ 252:dcf78e2c458c
Improve log filename format parsing; Add special casing for handling of function keys for certain terminal types.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 24 Apr 2011 23:35:00 +0300 |
parents | fce4e2e31d69 |
children | 269135d58acd |
comparison
equal
deleted
inserted
replaced
249:51319822ae92 | 252:dcf78e2c458c |
---|---|
940 } | 940 } |
941 | 941 |
942 return FALSE; | 942 return FALSE; |
943 } | 943 } |
944 | 944 |
945 #define VPUTCH(CH) th_vputch(&bufData, &bufSize, &bufLen, CH) | 945 #define VPUTCH(CH) th_vputch(&bufData, &bufSize, &bufLen, CH) |
946 #define VPUTS(STR) th_vputs(&bufData, &bufSize, &bufLen, STR) | 946 #define VPUTS(STR) th_vputs(&bufData, &bufSize, &bufLen, STR) |
947 | 947 |
948 char *logParseFilename(const char *fmt, int id) | 948 char *logParseFilename(const char *fmt, int id) |
949 { | 949 { |
950 size_t bufSize = strlen(fmt) + 32, bufLen = 0; | 950 size_t bufSize = strlen(fmt) + TH_BUFGROW, bufLen = 0; |
951 char *bufData = NULL, tmpBuf[32]; | 951 char *bufData = th_malloc(bufSize); |
952 char tmpBuf[32]; | |
952 const char *s = fmt; | 953 const char *s = fmt; |
953 | 954 |
954 while (*s) { | 955 while (*s) { |
955 if (*s == '%') { | 956 if (*s == '%') { |
956 s++; | 957 s++; |
957 switch (*s) { | 958 switch (*s) { |
958 case 'i': | 959 case 'i': |
959 snprintf(tmpBuf, sizeof(tmpBuf), "%05d", id); | 960 snprintf(tmpBuf, sizeof(tmpBuf), "%05d", id); |
960 VPUTS(tmpBuf); | 961 VPUTS(tmpBuf); |
961 break; | 962 break; |
962 | 963 |
964 case 'd': | |
965 snprintf(tmpBuf, sizeof(tmpBuf), "%d", id); | |
966 VPUTS(tmpBuf); | |
967 break; | |
968 | |
963 case '%': | 969 case '%': |
964 VPUTCH('%'); | 970 VPUTCH('%'); |
965 break; | |
966 | |
967 default: | |
968 VPUTCH('%'); | |
969 VPUTCH(*s); | |
970 break; | 971 break; |
971 } | 972 } |
972 s++; | 973 s++; |
973 } else { | 974 } else { |
974 VPUTCH(*s); | 975 VPUTCH(*s); |
1289 } | 1290 } |
1290 } else | 1291 } else |
1291 if (c == '[') { | 1292 if (c == '[') { |
1292 c = wgetch(stdscr); | 1293 c = wgetch(stdscr); |
1293 switch (c) { | 1294 switch (c) { |
1295 case 0x31: | |
1296 c = wgetch(stdscr); | |
1297 if (c >= 0x31 && c <= 0x39) | |
1298 c = KEY_F(c - 0x30); | |
1299 else | |
1300 c = ERR; | |
1301 break; | |
1302 | |
1294 case 0x32: c = KEY_IC; break; | 1303 case 0x32: c = KEY_IC; break; |
1295 case 0x33: c = KEY_DC; break; | 1304 case 0x33: c = KEY_DC; break; |
1296 | 1305 |
1297 case 0x35: c = KEY_PPAGE; break; | 1306 case 0x35: c = KEY_PPAGE; break; |
1298 case 0x36: c = KEY_NPAGE; break; | 1307 case 0x36: c = KEY_NPAGE; break; |