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;