diff options
Diffstat (limited to 'usr.sbin/i4b/isdnmonitor/curses.c')
-rw-r--r-- | usr.sbin/i4b/isdnmonitor/curses.c | 624 |
1 files changed, 0 insertions, 624 deletions
diff --git a/usr.sbin/i4b/isdnmonitor/curses.c b/usr.sbin/i4b/isdnmonitor/curses.c deleted file mode 100644 index 1e7eec1..0000000 --- a/usr.sbin/i4b/isdnmonitor/curses.c +++ /dev/null @@ -1,624 +0,0 @@ -/* - * Copyright (c) 1999 Hellmuth Michaelis. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - *--------------------------------------------------------------------------- - * - * i4b daemon - curses fullscreen output - * ------------------------------------- - * - * $Id: curses.c,v 1.10 1999/12/13 21:25:25 hm Exp $ - * - * $FreeBSD$ - * - * last edit-date: [Mon Dec 13 21:51:47 1999] - * - *---------------------------------------------------------------------------*/ - -#include "monprivate.h" - -#ifndef WIN32 - -static void display_bell(void); -static void display_chans(void); - -/*---------------------------------------------------------------------------* - * program exit - *---------------------------------------------------------------------------*/ -void -do_exit(int exitval) -{ - if(curses_ready) - endwin(); - exit(exitval); -} - -/*---------------------------------------------------------------------------* - * init curses fullscreen display - *---------------------------------------------------------------------------*/ -void -init_screen(void) -{ - char buffer[512]; - int uheight, lheight; - int i, j; - - initscr(); /* curses init */ - - if((COLS < 80) || (LINES < 24)) - { - endwin(); - fprintf(stderr, "ERROR, minimal screensize must be 80x24, is %dx%d, terminating!",COLS, LINES); - exit(1); - } - - noecho(); - raw(); - - uheight = nctrl * 2; /* cards * b-channels */ - lheight = LINES - uheight - 6 + 1; /* rest of display */ - - if((upper_w = newwin(uheight, COLS, UPPER_B, 0)) == NULL) - { - endwin(); - fprintf(stderr, "ERROR, curses init upper window, terminating!"); - exit(1); - } - - if((mid_w = newwin(1, COLS, UPPER_B+uheight+1, 0)) == NULL) - { - endwin(); - fprintf(stderr, "ERROR, curses init mid window, terminating!"); - exit(1); - } - - if((lower_w = newwin(lheight, COLS, UPPER_B+uheight+3, 0)) == NULL) - { - endwin(); - fprintf(stderr, "ERROR, curses init lower window, LINES = %d, lheight = %d, uheight = %d, terminating!", LINES, lheight, uheight); - exit(1); - } - - scrollok(lower_w, 1); - - sprintf(buffer, "----- isdn controller channel state ------------- isdnmonitor %02d.%02d.%d -", VERSION, REL, STEP); - - while(strlen(buffer) < COLS) - strcat(buffer, "-"); - - move(0, 0); - standout(); - addstr(buffer); - standend(); - - move(1, 0); - /* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */ - addstr("c tei b remote iface dir outbytes obps inbytes ibps units"); - - if(hostname) - sprintf(buffer, "----- isdn userland interface state ------------- %s:%d -", hostname, portno); - else - sprintf(buffer, "----- isdn userland interface state ------------- %s -", sockpath); - - while(strlen(buffer) < COLS) - strcat(buffer, "-"); - - move(uheight+2, 0); - standout(); - addstr(buffer); - standend(); - - sprintf(buffer, "----- isdnd logfile display --------------------------------------------------"); - while(strlen(buffer) < COLS) - strcat(buffer, "-"); - - move(uheight+4, 0); - standout(); - addstr(buffer); - standend(); - - refresh(); - - for(i=0, j=0; i <= nctrl; i++, j+=2) - { - mvwprintw(upper_w, j, H_CNTL, "%d --- 1 ", i); /*TEI*/ - mvwprintw(upper_w, j+1, H_CNTL, " L12 2 "); - } - wrefresh(upper_w); - -#ifdef NOTDEF - for(i=0, j=0; i < nentries; i++) /* walk thru all entries */ - { - p = &cfg_entry_tab[i]; /* get ptr to enry */ - - mvwprintw(mid_w, 0, j, "%s%d ", bdrivername(p->usrdevicename), p->usrdeviceunit); - - p->fs_position = j; - - j += ((strlen(bdrivername(p->usrdevicename)) + (p->usrdeviceunit > 9 ? 2 : 1) + 1)); - } -#else - mvwprintw(mid_w, 0, 0, "%s", devbuf); -#endif - wrefresh(mid_w); - - wmove(lower_w, 0, 0); - wrefresh(lower_w); - - curses_ready = 1; -} - -/*---------------------------------------------------------------------------* - * display the charge in units - *---------------------------------------------------------------------------*/ -void -display_charge(int pos, int charge) -{ - mvwprintw(upper_w, pos, H_UNITS, "%d", charge); - wclrtoeol(upper_w); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display the calculated charge in units - *---------------------------------------------------------------------------*/ -void -display_ccharge(int pos, int units) -{ - mvwprintw(upper_w, pos, H_UNITS, "(%d)", units); - wclrtoeol(upper_w); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display accounting information - *---------------------------------------------------------------------------*/ -void -display_acct(int pos, int obyte, int obps, int ibyte, int ibps) -{ - mvwprintw(upper_w, pos, H_OUT, "%-10d", obyte); - mvwprintw(upper_w, pos, H_OUTBPS, "%-4d", obps); - mvwprintw(upper_w, pos, H_IN, "%-10d", ibyte); - mvwprintw(upper_w, pos, H_INBPS, "%-4d", ibps); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * erase line at disconnect time - *---------------------------------------------------------------------------*/ -void -display_disconnect(int pos) -{ - wmove(upper_w, pos, H_TELN); - wclrtoeol(upper_w); - wrefresh(upper_w); - - if(do_bell) - display_bell(); -} - -/*---------------------------------------------------------------------------* - * display interface up/down information - *---------------------------------------------------------------------------*/ -void -display_updown(int pos, int updown, char *device) -{ - if(updown) - wstandend(mid_w); - else - wstandout(mid_w); - - mvwprintw(mid_w, 0, pos, "%s ", device); - - wstandend(mid_w); - wrefresh(mid_w); -} - -/*---------------------------------------------------------------------------* - * display interface up/down information - *---------------------------------------------------------------------------*/ -void -display_l12stat(int controller, int layer, int state) -{ - if(controller > nctrl) - return; - - if(!(layer == 1 || layer == 2)) - return; - - if(state) - wstandout(upper_w); - else - wstandend(upper_w); - - if(layer == 1) - { - mvwprintw(upper_w, (controller*2)+1, H_TEI+1, "1"); - - if(!state) - mvwprintw(upper_w, (controller*2)+1, H_TEI+2, "2"); - } - else if(layer == 2) - { - mvwprintw(upper_w, (controller*2)+1, H_TEI+2, "2"); - if(state) - mvwprintw(upper_w, (controller*2)+1, H_TEI+1, "1"); - } - - wstandend(upper_w); - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display TEI - *---------------------------------------------------------------------------*/ -void -display_tei(int controller, int tei) -{ - if(controller > nctrl) - return; - - if(tei == -1) - mvwprintw(upper_w, controller*2, H_TEI, "---"); - else - mvwprintw(upper_w, controller*2, H_TEI, "%3d", tei); - - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display bell :-) - *---------------------------------------------------------------------------*/ -static void -display_bell(void) -{ - static char bell[1] = { 0x07 }; - write(STDOUT_FILENO, &bell[0], 1); -} - -/*---------------------------------------------------------------------------* - * curses menu for fullscreen command mode - *---------------------------------------------------------------------------*/ -void -do_menu(void) -{ - static char *menu[WMITEMS] = - { - "1 - (D)isplay refresh", - "2 - (H)angup (choose a channel)", - "3 - (R)eread config file", - "4 - (Q)uit the program", - }; - - WINDOW *menu_w; - int c; - int mpos; - fd_set set; - struct timeval timeout; - - /* create a new window in the lower screen area */ - - if((menu_w = newwin(WMENU_HGT, WMENU_LEN, WMENU_POSLN, WMENU_POSCO )) == NULL) - { - return; - } - - /* create a border around the window */ - - box(menu_w, '|', '-'); - - /* add a title */ - - wstandout(menu_w); - mvwaddstr(menu_w, 0, (WMENU_LEN / 2) - (strlen(WMENU_TITLE) / 2), WMENU_TITLE); - wstandend(menu_w); - - /* fill the window with the menu options */ - - for(mpos=0; mpos <= (WMITEMS-1); mpos++) - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - - /* highlight the first menu option */ - - mpos = 0; - wstandout(menu_w); - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - wstandend(menu_w); - - /* input loop */ - - for(;;) - { - wrefresh(menu_w); - - FD_ZERO(&set); - FD_SET(STDIN_FILENO, &set); - timeout.tv_sec = WMTIMEOUT; - timeout.tv_usec = 0; - - /* if no char is available within timeout, exit menu*/ - - if((select(STDIN_FILENO + 1, &set, NULL, NULL, &timeout)) <= 0) - goto mexit; - - c = wgetch(menu_w); - - switch(c) - { - case ' ': - case '\t': /* hilite next option */ - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - mpos++; - if(mpos >= WMITEMS) - mpos = 0; - wstandout(menu_w); - mvwaddstr(menu_w, mpos + 2, 2, menu[mpos]); - wstandend(menu_w); - break; - - case ('0'+WREFRESH+1): /* display refresh */ - case 'D': - case 'd': - wrefresh(curscr); - goto mexit; - - case ('0'+WQUIT+1): /* quit program */ - case 'Q': - case 'q': - do_exit(0); - goto mexit; - - - case ('0'+WHANGUP+1): /* hangup connection */ - case 'H': - case 'h': - display_chans(); - goto mexit; - - case ('0'+WREREAD+1): /* reread config file */ - case 'R': - case 'r': - reread(); - goto mexit; - - case '\n': - case '\r': /* exec highlighted option */ - switch(mpos) - { - case WREFRESH: - wrefresh(curscr); - break; - - case WQUIT: - do_exit(0); - break; - - case WHANGUP: - display_chans(); - break; - - case WREREAD: - reread(); - break; - } - goto mexit; - break; - - default: - goto mexit; - break; - } - } - -mexit: - /* delete the menu window */ - - delwin(menu_w); - - /* re-display the original lower window contents */ - - touchwin(lower_w); - wrefresh(lower_w); -} - -/*---------------------------------------------------------------------------* - * display connect information - *---------------------------------------------------------------------------*/ -void -display_connect(int pos, int dir, char *name, char *remtel, char *dev) -{ - char buffer[256]; - - /* remote telephone number */ - - sprintf(buffer, "%s/%s", name, remtel); - - buffer[H_IFN - H_TELN - 1] = '\0'; - - mvwprintw(upper_w, pos, H_TELN, "%s", buffer); - - /* interface */ - - mvwprintw(upper_w, pos, H_IFN, "%s ", dev); - - mvwprintw(upper_w, pos, H_IO, dir ? "out" : "in"); - - mvwprintw(upper_w, pos, H_OUT, "-"); - mvwprintw(upper_w, pos, H_OUTBPS, "-"); - mvwprintw(upper_w, pos, H_IN, "-"); - mvwprintw(upper_w, pos, H_INBPS, "-"); - - if(do_bell) - display_bell(); - - wrefresh(upper_w); -} - -/*---------------------------------------------------------------------------* - * display channel information for shutdown - *---------------------------------------------------------------------------*/ -static void -display_chans(void) -{ - char buffer[80]; - int i; - int cnt = 0; - WINDOW *chan_w; - int nlines, ncols, pos_x, pos_y; - fd_set set; - struct timeval timeout; - - /* need this later to close the connection */ - struct ctlr_chan { - int cntl; - int chn; - } *cc = NULL; - - for(i = 0; i < nctrl; i++) - { - if(remstate[i].ch1state) - cnt++; - if(remstate[i].ch2state) - cnt++; - } - - if(cnt > 0) - { - if ((cc = (struct ctlr_chan *)malloc (cnt * - sizeof (struct ctlr_chan))) == NULL) - { - return; - } - nlines = cnt + 4; - ncols = 60; - } - else - { - nlines = 5; - ncols = 22; - } - - pos_y = WMENU_POSLN + 4; - pos_x = WMENU_POSCO + 10; - - /* create a new window in the lower screen area */ - - if((chan_w = newwin(nlines, ncols, pos_y, pos_x )) == NULL) - { - if (cnt > 0) - free(cc); - return; - } - - /* create a border around the window */ - - box(chan_w, '|', '-'); - - /* add a title */ - - wstandout(chan_w); - mvwaddstr(chan_w, 0, (ncols / 2) - (strlen("Channels") / 2), "Channels"); - wstandend(chan_w); - - /* no active channels */ - if (cnt == 0) - { - mvwaddstr(chan_w, 2, 2, "No active channels"); - wrefresh(chan_w); - sleep(1); - - /* delete the channels window */ - - delwin(chan_w); - return; - } - - nlines = 2; - ncols = 1; - - for (i = 0; i < nctrl; i++) - { - if(remstate[i].ch1state) - { - sprintf(buffer, "%d - Controller %d channel %s", ncols, i, "B1"); - mvwaddstr(chan_w, nlines, 2, buffer); - cc[ncols - 1].cntl = i; - cc[ncols - 1].chn = CHAN_B1; - nlines++; - ncols++; - } - if(remstate[i].ch2state) - { - sprintf(buffer, "%d - Controller %d channel %s", ncols, i, "B2"); - mvwaddstr(chan_w, nlines, 2, buffer); - cc[ncols - 1].cntl = i; - cc[ncols - 1].chn = CHAN_B2; - nlines++; - ncols++; - } - } - - for(;;) - { - wrefresh(chan_w); - - FD_ZERO(&set); - FD_SET(STDIN_FILENO, &set); - timeout.tv_sec = WMTIMEOUT; - timeout.tv_usec = 0; - - /* if no char is available within timeout, exit menu*/ - - if((select(STDIN_FILENO + 1, &set, NULL, NULL, &timeout)) <= 0) - break; - - ncols = wgetch(chan_w); - - if (!(isdigit(ncols))) - { - display_bell(); - continue; - } - - nlines = ncols - '0'; - - if ((nlines == 0) || (nlines > cnt)) - { - display_bell(); - continue; - } - - hangup(cc[nlines-1].cntl, cc[nlines-1].chn); - break; - } - - free(cc); - - /* delete the channels window */ - - delwin(chan_w); -} - -#endif /* !WIN32*/ - -/* EOF */ |