From 0fceb64d25ff3d9586549bb43d971c5eef904330 Mon Sep 17 00:00:00 2001 From: Ralf Baechle Date: Mon, 7 Jun 1999 10:23:42 +0200 Subject: Import ax25-apps 0.0.1 from tarball --- listen/utils.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 listen/utils.c (limited to 'listen/utils.c') diff --git a/listen/utils.c b/listen/utils.c new file mode 100644 index 0000000..7b7cc5d --- /dev/null +++ b/listen/utils.c @@ -0,0 +1,121 @@ +/* + * Copyright 1996, 1997 Heikki Hannikainen OH7LZB + * + * Portions and ideas (like the ibm character mapping) from + * Tomi Manninen OH2BNS + */ + +#include +#include +#include +#include +#include +#include + +#include "listen.h" + +int color = 0; /* Colorized? */ +int sevenbit = 1; /* Are we on a 7-bit terminal? */ +int ibmhack = 0; /* IBM mapping? */ + +/* mapping of IBM codepage 437 chars 128-159 to ISO latin1 equivalents + * (158 and 159 are mapped to space) + */ + +unsigned char ibm_map[32] = +{ + 199, 252, 233, 226, 228, 224, 229, 231, + 234, 235, 232, 239, 238, 236, 196, 197, + 201, 230, 198, 244, 246, 242, 251, 249, + 255, 214, 220, 162, 163, 165, 32, 32 +}; + +/* + * Printf in Technicolor (TM) (available in selected theatres only) + */ + +void lprintf(int dtype, char *fmt, ...) +{ + va_list args; + char str[1024]; + unsigned char *p; + chtype ch; + + va_start(args, fmt); + vsnprintf(str, 1024, fmt, args); + va_end(args); + + if (color) { + for (p = str; *p != '\0'; p++) { + ch = *p; + + if (sevenbit && ch > 127) + ch = '.'; + + if ((ch > 127 && ch < 160) && ibmhack) + ch = ibm_map[ch - 128] | A_BOLD; + else if ((ch < 32) && (ch != '\n')) + ch = (ch + 64) | A_REVERSE; + + if ((dtype == T_ADDR) || (dtype == T_PROTOCOL) + || (dtype == T_AXHDR) || (dtype == T_IPHDR) + || (dtype == T_ROSEHDR)) + ch |= A_BOLD; + + ch |= COLOR_PAIR(dtype); + + addch(ch); + } + } else { + for (p = str; *p != '\0'; p++) + if ((*p < 32 && *p != '\n') + || (*p > 126 && *p < 160 && sevenbit)) + *p = '.'; + fputs(str, stdout); + fflush(stdout); + } +} + +int initcolor(void) +{ + if (!has_colors) + return 0; + initscr(); /* Start ncurses */ + start_color(); /* Initialize color support */ + refresh(); /* Clear screen */ + noecho(); /* Don't echo */ + wattrset(stdscr, 0); /* Clear attributes */ + scrollok(stdscr, TRUE); /* Like a scrolling Stone... */ + leaveok(stdscr, TRUE); /* Cursor position doesn't really matter */ + idlok(stdscr, TRUE); /* Use hardware ins/del of the terminal */ + nodelay(stdscr, TRUE); /* Make getch() nonblocking */ + + /* Pick colors for each type */ + init_pair(T_PORT, COLOR_GREEN, COLOR_BLACK); + init_pair(T_DATA, COLOR_WHITE, COLOR_BLACK); + init_pair(T_ERROR, COLOR_RED, COLOR_BLACK); + init_pair(T_PROTOCOL, COLOR_CYAN, COLOR_BLACK); + init_pair(T_AXHDR, COLOR_WHITE, COLOR_BLACK); + init_pair(T_IPHDR, COLOR_WHITE, COLOR_BLACK); + init_pair(T_ADDR, COLOR_GREEN, COLOR_BLACK); + init_pair(T_ROSEHDR, COLOR_WHITE, COLOR_BLACK); + init_pair(T_TIMESTAMP, COLOR_MAGENTA, COLOR_BLACK); + init_pair(T_KISS, COLOR_MAGENTA, COLOR_BLACK); + init_pair(T_BPQ, COLOR_MAGENTA, COLOR_BLACK); + init_pair(T_TCPHDR, COLOR_BLUE, COLOR_BLACK); + + return 1; +} + +char *servname(int port, char *proto) +{ + struct servent *serv; + static char str[16]; + + if ((serv = getservbyport(htons(port), proto))) + strncpy(str, serv->s_name, 16); + else + snprintf(str, 16, "%i", port); + + return str; +} -- cgit v1.2.3