diff options
-rw-r--r-- | console/ChangeLog | 18 | ||||
-rw-r--r-- | console/console.c | 104 | ||||
-rw-r--r-- | console/display.c | 8 | ||||
-rw-r--r-- | console/display.h | 9 |
4 files changed, 117 insertions, 22 deletions
diff --git a/console/ChangeLog b/console/ChangeLog index b48b5943..e8c0527c 100644 --- a/console/ChangeLog +++ b/console/ChangeLog @@ -1,3 +1,21 @@ +2003-04-29 Marco Gerards <metgerards@student.han.nl> + + * display.c (display_create): Added arguments width, height and + lines, variables with the same name were removed. + * display.h (display_creat): Add missing arguments to prototype. + * console.c (DEFAULT_WIDTH): New macro. + (DEFAULT_HEIGHT): Likewise. + (DEFAULT_LINES): Likewise. + (STRX): Likewise. + (STR): Likewise. + (struct cons): New members lines, width and height. + (vcons_lookup): Add missing arguments to display_create. + (options): Add options width, height and lines. + (parse_opt): Parse width, height and lines. + (netfs_append_args): Append arguments width, height and lines. + (netfs_append_args): Fix asprintf error checking. + (main): Initialize cons with default width, height and lines. + 2002-12-10 Marcus Brinkmann <marcus@gnu.org> * console.c (main): Don't use err without setting it. diff --git a/console/console.c b/console/console.c index e67ba62e..3c8acb81 100644 --- a/console/console.c +++ b/console/console.c @@ -1,5 +1,5 @@ /* console.c -- A console server. - Copyright (C) 1997, 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2002, 2003 Free Software Foundation, Inc. Written by Miles Bader and Marcus Brinkmann. This program is free software; you can redistribute it and/or @@ -61,6 +61,13 @@ volatile struct mapped_time_value *console_maptime; #define DEFAULT_BLINKING 0 #define DEFAULT_REVERSED 0 #define DEFAULT_CONCEALED 0 +#define DEFAULT_WIDTH 80 +#define DEFAULT_HEIGHT 25 +#define DEFAULT_LINES 50 +/* Stringification of a macro. */ +#define STRX(s) #s +#define STR(s) STRX(s) + /* For the help output. */ #define DEFAULT_ATTRIBUTE_NAME "normal" #define DEFAULT_FOREGROUND CONS_COLOR_WHITE @@ -128,6 +135,11 @@ struct cons mach_port_t underlying; /* A template for the stat information of all nodes. */ struct stat stat_template; + + /* The amount of lines, width and height. */ + unsigned int lines; + unsigned int width; + unsigned int height; }; @@ -222,7 +234,8 @@ vcons_lookup (cons_t cons, int id, int create, vcons_t *r_vcons) mutex_init (&vcons->lock); err = display_create (&vcons->display, cons->encoding ?: DEFAULT_ENCODING, - cons->attribute); + cons->attribute, cons->lines, cons->width, + cons->height); if (err) { free (vcons->name); @@ -1335,6 +1348,12 @@ static const struct argp_option options[] = " (default `" DEFAULT_ATTRIBUTE_NAME "')" }, { "encoding", 'e', "NAME", 0, "Set encoding of virtual consoles to" " NAME (default `" DEFAULT_ENCODING "')" }, + { "width", 'w', "WIDTH", 0, "Set width to WIDTH (default `" + STR(DEFAULT_WIDTH) "')" }, + { "height", 'h', "HEIGHT", 0, "Set height to HEIGHT (default `" + STR(DEFAULT_HEIGHT) "')" }, + { "lines", 'l', "LINES", 0, "Set amount of scrollback lines to LINES " + "(default `" STR(DEFAULT_LINES) "')" }, {0} }; @@ -1443,7 +1462,8 @@ parse_opt (int opt, char *arg, struct argp_state *state) cons_t cons = state->input ?: netfs_root_node->nn->cons; error_t err; int color = 0; - + char *tail; + switch (opt) { default: @@ -1479,6 +1499,33 @@ parse_opt (int opt, char *arg, struct argp_state *state) if (err) argp_error (state, "Invalid attribute specifier: %s", arg); break; + + case 'l': + errno = 0; + cons->lines = strtoul (arg, &tail, 0); + if (tail == NULL || tail == arg || *tail != '\0') + argp_error (state, "LINES is not a number: %s", arg); + if (errno) + argp_error (state, "Overflow in argument LINES %s", arg); + break; + + case 'w': + errno = 0; + cons->width = strtoul (arg, &tail, 0); + if (tail == NULL || tail == arg || *tail != '\0') + argp_error (state, "WIDTH is not a number: %s", arg); + if (errno) + argp_error (state, "Overflow in argument WIDTH %s", arg); + break; + + case 'h': + errno = 0; + cons->height = strtoul (arg, &tail, 0); + if (tail == NULL || tail == arg || *tail != '\0') + argp_error (state, "HEIGHT is not a number: %s", arg); + if (errno) + argp_error (state, "Overflow in argument HEIGHT %s", arg); + break; case 'e': /* XXX Check validity of encoding. Can we perform all necessary @@ -1513,29 +1560,54 @@ netfs_append_args (char **argz, size_t *argz_len) if (cons->encoding && strcmp (cons->encoding, DEFAULT_ENCODING)) { char *buf; - asprintf (&buf, "--encoding=%s", cons->encoding); - if (buf) - err = argz_add (argz, argz_len, buf); + if (asprintf (&buf, "--encoding=%s", cons->encoding) < 0) + err = ENOMEM; else - err = errno; + err = argz_add (argz, argz_len, buf); + } if (!err && cons->attribute.fgcol != DEFAULT_FOREGROUND) { char *buf; - asprintf (&buf, "--foreground=%s", color_names[cons->attribute.fgcol]); - if (buf) - err = argz_add (argz, argz_len, buf); + if (asprintf (&buf, "--foreground=%s", + color_names[cons->attribute.fgcol]) < 0) + err = ENOMEM; else - err = errno; + err = argz_add (argz, argz_len, buf); + } if (!err && cons->attribute.bgcol != DEFAULT_BACKGROUND) { char *buf; - asprintf (&buf, "--background=%s", color_names[cons->attribute.bgcol]); - if (buf) + if (asprintf (&buf, "--background=%s", + color_names[cons->attribute.bgcol]) < 0) + err = ENOMEM; + else err = argz_add (argz, argz_len, buf); + } + if (!err && cons->lines != DEFAULT_LINES) + { + char *buf; + if (asprintf (&buf, "--lines=%d", cons->lines) < 0) + err = ENOMEM; else - err = errno; + err = argz_add (argz, argz_len, buf); + } + if (!err && cons->width != DEFAULT_WIDTH) + { + char *buf; + if (asprintf (&buf, "--width=%d", cons->lines) < 0) + err = ENOMEM; + else + err = argz_add (argz, argz_len, buf); + } + if (!err && cons->height != DEFAULT_HEIGHT) + { + char *buf; + if (asprintf (&buf, "--height=%d", cons->height) < 0) + err = ENOMEM; + else + err = argz_add (argz, argz_len, buf); } if (!err && cons->attribute.intensity != DEFAULT_INTENSITY) { @@ -1588,6 +1660,7 @@ netfs_append_args (char **argz, size_t *argz_len) } if (!err && attrp != attr) err = argz_add (argz, argz_len, attr_str); + return err; } @@ -1930,6 +2003,9 @@ main (int argc, char **argv) error (1, ENOMEM, "Cannot create console structure"); mutex_init (&cons->lock); cons->encoding = NULL; + cons->width = DEFAULT_WIDTH; + cons->height = DEFAULT_HEIGHT; + cons->lines = DEFAULT_LINES; cons->attribute.intensity = DEFAULT_INTENSITY; cons->attribute.underlined = DEFAULT_UNDERLINED; cons->attribute.blinking = DEFAULT_BLINKING; diff --git a/console/display.c b/console/display.c index ac9ef92f..090aaf80 100644 --- a/console/display.c +++ b/console/display.c @@ -1,6 +1,6 @@ /* display.c - The display component of a virtual console. Copyright (C) 1999 Kalle Olavi Niemitalo (emu.c from colortext 0.3). - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. Written by Marcus Brinkmann and Kalle Olavi Niemitalo. This file is part of the GNU Hurd. @@ -1801,13 +1801,11 @@ display_init (void) being ENCODING. */ error_t display_create (display_t *r_display, const char *encoding, - conchar_attr_t def_attr) + conchar_attr_t def_attr, unsigned int lines, + unsigned int width, unsigned int height) { error_t err = 0; display_t display; - int width = 80; - int height = 25; - int lines = 50; /* XXX For now. */ *r_display = NULL; display = calloc (1, sizeof *display); diff --git a/console/display.h b/console/display.h index 1fe6f6c0..d64cf69e 100644 --- a/console/display.h +++ b/console/display.h @@ -1,5 +1,5 @@ /* display.h - Interface to the display component of a virtual console. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003 Free Software Foundation, Inc. Written by Marcus Brinkmann. This file is part of the GNU Hurd. @@ -30,8 +30,11 @@ void display_init (void); /* Create a new virtual console display, with the system encoding being ENCODING and the default colors being FOREGROUND and BACKGROUND. */ -error_t display_create (display_t *r_display, const char *encoding, - conchar_attr_t attr); +error_t +display_create (display_t *r_display, const char *encoding, + conchar_attr_t def_attr, unsigned int lines, + unsigned int width, unsigned int height); + /* Destroy the display DISPLAY. */ void display_destroy (display_t display); |