Commit 96a08e1a authored by Per Cederqvist's avatar Per Cederqvist
Browse files

vcc blues.

parent 2d3aa63f
#
# $Id: Makefile.in,v 1.4 1993/10/13 00:00:39 ceder Exp $
# $Id: Makefile.in,v 1.5 1993/10/16 17:44:14 ceder Exp $
# Copyright (C) 1991 Lysator Academic Computer Association.
#
# This file is part of the LysKOM server.
......@@ -26,8 +26,6 @@ srcdir = @srcdir@
VPATH = @srcdir@
@STDLYSKOM@
CFLAGS = @CFLAGS@ -I$(srcdir)
HDRS = admin.h isc-parse.h prot-a-output.h async.h isc-interface.h \
prot-a-parse.h cache.h tmp-limits.h prot-a-send-async.h connections.h \
log.h prot-a.h dbck-cache.h lyskomd.h ram-output.h disk-cache.h \
......
#
# $Id: Makefile.src,v 1.4 1993/10/13 00:00:39 ceder Exp $
# $Id: Makefile.src,v 1.5 1993/10/16 17:44:14 ceder Exp $
# Copyright (C) 1991 Lysator Academic Computer Association.
#
# This file is part of the LysKOM server.
......@@ -26,8 +26,6 @@ srcdir = @srcdir@
VPATH = @srcdir@
@STDLYSKOM@
CFLAGS = @CFLAGS@ -I$(srcdir)
HDRS = admin.h isc-parse.h prot-a-output.h async.h isc-interface.h \
prot-a-parse.h cache.h tmp-limits.h prot-a-send-async.h connections.h \
log.h prot-a.h dbck-cache.h lyskomd.h ram-output.h disk-cache.h \
......
/*
* $Id: cache-node.c,v 0.10 1993/10/15 11:18:03 ceder Exp $
* $Id: cache-node.c,v 0.11 1993/10/16 17:44:34 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -28,10 +28,11 @@
* Used in diskomd.
*/
static char *rcsid = "$Id: cache-node.c,v 0.10 1993/10/15 11:18:03 ceder Exp $";
static char *rcsid = "$Id: cache-node.c,v 0.11 1993/10/16 17:44:34 ceder Exp $";
#include "rcs.h"
USE(rcsid);
#include <sys/types.h>
#include <stdio.h>
#ifdef HAVE_STDDEF_H
# include <stddef.h>
......@@ -43,13 +44,13 @@ USE(rcsid);
#include "lyskomd.h"
EXPORT const Cache_node EMPTY_CACHE_NODE =
((Cache_node){{ 0, 0, 0}, NULL, NULL, 0, 0, 0, 0, NULL, NULL, 0});
{{ 0, 0, 0}, NULL, NULL, 0, 0, 0, 0, NULL, NULL, 0};
EXPORT const Cache_node_block EMPTY_CACHE_NODE_BLOCK =
((Cache_node_block){ 0, NULL, NULL});
{ 0, NULL, NULL};
EXPORT const Cache_node_mcb EMPTY_CACHE_NODE_MCB =
((Cache_node_mcb){ 0, NULL, 0, 0, NULL, NULL, 0, NULL });
{ 0, NULL, 0, 0, NULL, NULL, 0, NULL };
EXPORT void
......@@ -177,8 +178,8 @@ create_cache_node (Cache_node_mcb *control,
unsigned long key)
{
if ( key >= control->lookup_table_size )
restart_kom("ERROR: create_cache_node(%lu, %lu): "
"lookup_table_size = %lu\n",
restart_kom("%s(%lu, %lu): lookup_table_size = %lu\n",
"ERROR: create_cache_node",
(unsigned long) control, key,
control->lookup_table_size);
......@@ -190,8 +191,8 @@ zero_init_cache_node (Cache_node_mcb *control,
unsigned long key)
{
if ( key >= control->lookup_table_size )
restart_kom("ERROR: zero_init_cache_node(%lu, %lu): "
"lookup_table_size = %lu\n",
restart_kom("%s(%lu, %lu): lookup_table_size = %lu\n",
"ERROR: zero_init_cache_node",
(unsigned long)control, key,
control->lookup_table_size);
......
/*
* $Id: conference.c,v 0.21 1993/10/14 09:10:48 ceder Exp $
* $Id: conference.c,v 0.22 1993/10/16 17:44:44 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -28,7 +28,7 @@
* All atomic calls that deals with conferences.
*/
static char *rcsid = "$Id: conference.c,v 0.21 1993/10/14 09:10:48 ceder Exp $";
static char *rcsid = "$Id: conference.c,v 0.22 1993/10/16 17:44:44 ceder Exp $";
#include "rcs.h"
USE(rcsid);
......@@ -919,8 +919,9 @@ do_set_presentation(Conf_no conf_no,
GET_T_STAT(new_pres, text_no, FAILURE);
if ( new_pres->no_of_marks >= MAX_MARKS_TEXT )
{
log("LIMIT: do_set_presentation(%d, ptr, %d): New presentation"
" has %d marks.\n", conf_no, text_no, new_pres->no_of_marks);
log("%s(%d, ptr, %d): New presentation has %d marks.\n",
"LIMIT: do_set_presentation",
conf_no, text_no, new_pres->no_of_marks);
kom_errno = KOM_MARK_LIMIT;
return FAILURE;
}
......
/*
* $Id: connections.c,v 0.28 1993/10/14 22:36:19 ceder Exp $
* $Id: connections.c,v 0.29 1993/10/16 17:45:02 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -30,7 +30,7 @@
* Created by Willf|r 31/3-90. Mostly written by ceder.
*/
static char *rcsid = "$Id: connections.c,v 0.28 1993/10/14 22:36:19 ceder Exp $";
static char *rcsid = "$Id: connections.c,v 0.29 1993/10/16 17:45:02 ceder Exp $";
#include "rcs.h"
USE(rcsid);
......@@ -541,8 +541,9 @@ mux_parse_message(Mux *mp, String tmp_str)
{
VBUGSTR(tmp_str);
BUG(("mux_parse_message(): mp->parse.unparsed = { len = %d, "
"string = %p }\n", mp->parse.unparsed.len,
BUG(("%s(): mp->parse.unparsed = { len = %d, string = %p }\n",
"mux_parse_message",
mp->parse.unparsed.len,
(void *)mp->parse.unparsed.string));
if ( s_strcat(&mp->parse.unparsed, tmp_str) != OK )
......@@ -612,7 +613,8 @@ dump_statistics(void)
if ( (fp = fopen(statisticfile, "a")) == NULL )
{
log(__FILE__ ": dump_statistics(): can't open file %s\n",
log("%s: dump_statistics(): can't open file %s\n",
__FILE__,
statisticfile);
return;
}
......
/*
* $Id: connections.h,v 0.13 1993/10/10 12:07:30 ceder Exp $
* $Id: connections.h,v 0.14 1993/10/16 17:45:15 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -23,7 +23,7 @@
* Please mail bug reports to bug-lyskom@lysator.liu.se.
*/
/*
* $Id: connections.h,v 0.13 1993/10/10 12:07:30 ceder Exp $
* $Id: connections.h,v 0.14 1993/10/16 17:45:15 ceder Exp $
*
* connections.h -- The top level of the communication packet.
*
......@@ -122,7 +122,7 @@ extern struct isc_mcb *kom_server_mcb;
* call. This is set by connectins.c whenever a complete message is parsed
* and a function in services.c is called.
*/
Connection * active_connection;
extern Connection * active_connection;
/*
......
/*
* $Id: dbck-cache.c,v 0.15 1993/10/14 09:10:54 ceder Exp $
* $Id: dbck-cache.c,v 0.16 1993/10/16 17:45:27 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -32,7 +32,7 @@
* Also save time as a time_t instead of a struct tm.
*/
static char *rcsid = "$Id: dbck-cache.c,v 0.15 1993/10/14 09:10:54 ceder Exp $";
static char *rcsid = "$Id: dbck-cache.c,v 0.16 1993/10/16 17:45:27 ceder Exp $";
#include "rcs.h"
USE(rcsid);
......@@ -127,6 +127,16 @@ BUGDECL;
abort(); \
}
#define VOID_TEXT_RANGE(str, num) if ( num == 0 || num >= next_text_num ) \
{ \
return;\
printf("Text_no out of range 1 ... %d ", next_text_num); \
printf(str); \
fflush(stdout); \
fflush(stderr); \
abort(); \
}
extern Conf_type
cached_get_conf_type (Conf_no conf_no)
......@@ -162,7 +172,7 @@ void
mark_text_as_changed( Text_no text_no )
{
TRACE2("Text %d is changed.\n", text_no);
TEXT_RANGE("mark_text_as_changed\n", text_no, (void)0);
VOID_TEXT_RANGE("mark_text_as_changed\n", text_no);
}
......@@ -321,8 +331,8 @@ cached_get_text( Text_no text )
if ( fread(the_string.string, sizeof(char), the_string.len, text_file)
!= the_string.len )
{
log("WARNING: cached_get_text: "
"couldn't read enough characters of text %d\n",
log("%s read enough characters of text %d\n",
"WARNING: cached_get_text: couldn't",
text);
}
......@@ -708,8 +718,8 @@ init_cache(void)
case '+':
conf_arr[ i ] = alloc_conference();
if ( fparse_conference(fp, conf_arr[ i ]) != OK )
restart_kom("init_cache(): fparse_conference failed. "
"i == %d\n", i);
restart_kom("init_cache(): %s. i == %d\n",
"fparse_conference failed", i);
name_list[i] = EMPTY_STRING;
s_strcpy(&name_list[i], conf_arr[ i ]->name);
......@@ -763,8 +773,8 @@ init_cache(void)
error might be that the file has been truncated (maybe
due to an overfull disk). */
log("init_cache(): fparse_text_stat failed for text %d.\n"
"All remaining texts are lost.\n", i);
log("init_cache(): fparse_text_stat failed for text %d.\n%s",
i, "All remaining texts are lost.\n");
next_text_num = i;
truncated_texts = TRUE;
}
......
/*
* $Id: dbck.c,v 0.17 1993/10/13 19:02:02 ceder Exp $
* $Id: dbck.c,v 0.18 1993/10/16 17:45:49 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -28,7 +28,7 @@
* Author: Per Cederqvist.
*/
static char *rcsid = "$Id: dbck.c,v 0.17 1993/10/13 19:02:02 ceder Exp $";
static char *rcsid = "$Id: dbck.c,v 0.18 1993/10/16 17:45:49 ceder Exp $";
#include "rcs.h"
USE(rcsid);
......@@ -36,7 +36,9 @@ USE(rcsid);
# include <stdlib.h>
#endif
#include <stdio.h>
#include <stdarg.h>
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#include "misc-types.h"
#include "kom-types.h"
......@@ -82,7 +84,7 @@ static Person_scratchpad *person_scratchpad[MAX_CONF];
int buglevel = 0;
#endif
#ifdef HAVE_VFPRINTF
#if defined(HAVE_VFPRINTF) && defined(HAVE_STDARG_H)
extern void
log (const char * format, ...)
{
......@@ -104,7 +106,7 @@ log (format, a, b, c, d, e, f, g)
}
#endif
#ifdef HAVE_VFPRINTF
#if defined(HAVE_VFPRINTF) && defined(HAVE_STDARG_H)
extern void
restart_kom (const char * format, ...)
{
......@@ -390,8 +392,7 @@ check_misc_infos(Text_no tno,
else if ( c->texts.first_local_no + c->texts.no_of_texts - 1
< group.local_no )
{
log("Text %lu: Recipient %lu<%lu> loc_no"
" is greater than %lu\n",
log("Text %lu: Recipient %lu<%lu> loc_no > %lu\n",
(u_long)tno, (u_long)group.recipient,
(u_long)group.local_no,
(u_long)(c->texts.first_local_no
......@@ -401,10 +402,10 @@ check_misc_infos(Text_no tno,
else if ( c->texts.texts[group.local_no
- c->texts.first_local_no] != tno )
{
log("Text %lu: Recipient %lu<%lu>: that local number "
"is mapped to %lu.\n",
log("Text %lu: Recipient %lu<%lu>: %s to %lu.\n",
(u_long)tno, (u_long)group.recipient,
(u_long)group.local_no,
"that local number is mapped",
(u_long)c->texts.texts[group.local_no
- c->texts.first_local_no]);
error++;
......@@ -423,8 +424,7 @@ check_misc_infos(Text_no tno,
delete_misc(tstat, previous);
mark_text_as_changed(tno);
modifications++;
log("Repaired: Conference 0 is no longer "
"a cc_recipient.\n");
log("Repaired: Conf 0 is no longer a cc_recipient.\n");
misc = previous;
}
else
......@@ -448,8 +448,7 @@ check_misc_infos(Text_no tno,
else if ( c->texts.first_local_no + c->texts.no_of_texts - 1
< group.local_no )
{
log("Text %lu: CC_Recipient %lu<%lu> loc_no is "
"greater than %lu\n",
log("Text %lu: CC_Recipient %lu<%lu> loc_no > %lu\n",
(u_long)tno, (u_long)group.cc_recipient,
(u_long)group.local_no,
(u_long)(c->texts.first_local_no
......@@ -459,10 +458,10 @@ check_misc_infos(Text_no tno,
else if ( c->texts.texts[group.local_no
- c->texts.first_local_no] != tno )
{
log("Text %lu: CC_Recipient %lu<%lu>: that local "
"number is mapped to %lu.\n",
log("Text %lu: CC_Recipient %lu<%lu>: %s to %lu.\n",
(u_long)tno, (u_long)group.cc_recipient,
(u_long)group.local_no,
"that local number is mapped",
(u_long)c->texts.texts[group.local_no
- c->texts.first_local_no]);
error++;
......@@ -644,8 +643,7 @@ check_texts(void)
log("WARNING: No texts found.\n");
else
{
log("Total of %lu texts (total %lu bytes, "
"average %lu bytes/text).\n",
log("Total of %lu texts (total %lu bytes, avg. %lu bytes/text).\n",
(u_long)number_of_texts,
(u_long)bytes,
(u_long)(bytes/number_of_texts));
......@@ -763,9 +761,9 @@ check_membership(Pers_no pno,
if ( mship->last_text_read >
conf->texts.first_local_no + conf->texts.no_of_texts - 1)
{
log("Person %lu has read text %lu in conf %lu, "
"which only has %lu texts.\n",
log("Person %lu %s %lu in conf %lu, which only has %lu texts.\n",
(u_long)pno,
"has read text",
(u_long)mship->last_text_read,
(u_long)mship->conf_no,
(u_long)(conf->texts.first_local_no
......@@ -777,9 +775,9 @@ check_membership(Pers_no pno,
{
if ( mship->read_texts[i] <= last )
{
log("Person %lu's membership in %lu is corrupt:"
" read text number %lu<%lu> <= %lu.\n",
log("Person %lu's membership in %lu %s %lu<%lu> <= %lu.\n",
(u_long)pno, (u_long)mship->conf_no,
"is corrupt: read text number",
(u_long)mship->read_texts[i], (u_long)i, (u_long)last);
error++;
}
......@@ -939,11 +937,11 @@ check_texts_in_conf(Conf_no cc,
{
if ( !is_recipient(cc, t) )
{
log("Text %lu<%lu> in conference %lu doesn't "
"have the conference as recipient.\n",
log("Text %lu<%lu> in conference %lu %s.\n",
(u_long)tlist->texts[i],
(u_long)i + tlist->first_local_no,
(u_long)cc);
(u_long)cc,
"doesn't have the conference as recipient");
if (confirm("Repair by setting Text_no to 0 in the map?") )
{
......@@ -1007,8 +1005,7 @@ check_member(Conf_no cc,
pp = cached_get_person_stat(memb->member);
if ( pp == NULL )
{
log("Person %lu, who is supposed to be a member in conf %lu, "
"is nonexistent.\n",
log("Person %lu, supposedly a member in conf %lu, is nonexistent.\n",
(u_long)memb->member, (u_long)cc);
error++;
}
......@@ -1111,8 +1108,8 @@ post_check_persons(void)
{
if ( (pstat = cached_get_person_stat(pers_no)) == NULL )
{
log("INTERNAL DBCK ERROR: post_check_persons(): can't "
"cached_get_person_stat(%d).\n", pers_no);
log("%s(): can't cached_get_person_stat(%d).\n",
"INTERNAL DBCK ERROR: post_check_persons", pers_no);
}
}
......
/*
* $Id: internal-connections.c,v 0.15 1993/10/14 09:10:58 ceder Exp $
* $Id: internal-connections.c,v 0.16 1993/10/16 17:46:02 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -28,7 +28,7 @@
* Abstract routines on the data type Connection.
*/
static char *rcsid = "$Id: internal-connections.c,v 0.15 1993/10/14 09:10:58 ceder Exp $";
static char *rcsid = "$Id: internal-connections.c,v 0.16 1993/10/16 17:46:02 ceder Exp $";
#include "rcs.h"
USE(rcsid);
......@@ -59,7 +59,7 @@ INTERNAL Session_no no_of_connection_attempts = 0;
INTERNAL Connection *last_conn = NULL;
INTERNAL const Connection EMPTY_CONNECTION =
((Connection){0, /* magic */
{0, /* magic */
NULL, /* prev */
NULL, /* next */
/* Things used by services.c */
......@@ -104,7 +104,7 @@ INTERNAL const Connection EMPTY_CONNECTION =
0, /* first_to_parse */
FALSE, /* more_to_parse */
NO_TIME, /* last_request */
0}); /* session_no */
0}; /* session_no */
static int no_of_allocated_connections = 0;
......@@ -248,8 +248,9 @@ check_conn_exists(Connection *foo)
while ( c != all_connections && found == FALSE );
if ( found == FALSE )
restart_kom("get_conn_by_number: foo == %d not found in"
" all_connections.\n", last_conn->session_no);
restart_kom("%s: foo == %d not found in all_connections.\n",
"get_conn_by_number",
last_conn->session_no);
}
#endif
......@@ -266,9 +267,10 @@ get_conn_by_number (Session_no session_no)
last_conn = all_connections;
else if ( all_connections == NULL )
{
restart_kom("get_conn_by_number(%d): last_conn = %d and "
"all_connections == NULL", session_no,
last_conn->session_no);
restart_kom("get_conn_by_number(%d): last_conn = %d %s",
session_no,
last_conn->session_no,
"and all_connections == NULL");
}
#ifdef DEFENSIVE_CHECKS
else
......@@ -313,7 +315,8 @@ traverse_connections (Session_no session_no)
void
dump_allocated_connections(FILE *fp)
{
fprintf(fp, "---" __FILE__ ":\n\tConnections: %d\n",
fprintf(fp, "---%s:\n\tConnections: %d\n",
__FILE__,
no_of_allocated_connections);
fprintf(fp, "\tConnection attempts: %d\n",
no_of_connection_attempts);
......
/*
* $Id: isc-malloc.c,v 1.4 1993/10/15 11:18:12 ceder Exp $
* $Id: isc-malloc.c,v 1.5 1993/10/16 17:46:18 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -29,10 +29,11 @@
* how many allocated blocks there are.
*/
static char *rcsid = "$Id: isc-malloc.c,v 1.4 1993/10/15 11:18:12 ceder Exp $";
static char *rcsid = "$Id: isc-malloc.c,v 1.5 1993/10/16 17:46:18 ceder Exp $";
#include "rcs.h"
USE(rcsid);
#include <sys/types.h>
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif
......@@ -73,7 +74,6 @@ isc_realloc_wrapper (void * ptr,
EXPORT void
dump_isc_alloc_counts(FILE *stat_file)
{
fprintf(stat_file, "---" __FILE__ ":\n"
"\tAllocated blocks by isc: %d\n",
no_of_allocated_blocks);
fprintf(stat_file, "---%s:\n\tAllocated blocks by isc: %d\n",
__FILE__, no_of_allocated_blocks);
}
/*
* $Id: log.c,v 0.9 1993/10/13 00:07:50 ceder Exp $
* $Id: log.c,v 0.10 1993/10/16 17:46:41 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -28,11 +28,13 @@
* File created by ceder 1990-05-25.
*/
static char *rcsid = "$Id: log.c,v 0.9 1993/10/13 00:07:50 ceder Exp $";
static char *rcsid = "$Id: log.c,v 0.10 1993/10/16 17:46:41 ceder Exp $";
#include "rcs.h"
USE(rcsid);
#include <stdarg.h>
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
......@@ -43,7 +45,7 @@ USE(rcsid);
* Add a string to the log file.
*/
#ifdef HAVE_VFPRINTF
#if defined(HAVE_VFPRINTF) && defined(HAVE_STDARG_H)
extern void
log (const char * format, ...)
{
......
/*
* $Id: log.h,v 0.5 1993/10/13 18:17:22 ceder Exp $
* $Id: log.h,v 0.6 1993/10/16 17:46:53 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -23,7 +23,7 @@
* Please mail bug reports to bug-lyskom@lysator.liu.se.
*/
/*
* $Id: log.h,v 0.5 1993/10/13 18:17:22 ceder Exp $
* $Id: log.h,v 0.6 1993/10/16 17:46:53 ceder Exp $
*
* log.h
*
......@@ -37,18 +37,17 @@
* Add a string to the log file.
*/
#ifdef HAVE_VFPRINTF
#if defined(HAVE_VFPRINTF) && defined(HAVE_STDARG_H)
extern void
log (const char * format, ...);
extern void
logv (const char * format, va_list AP);
#else /* !HAVE_VFPRINTF */
#else /* !HAVE_VFPRINTF || !HAVE_STDARG_H*/
extern void
log ();
#endif /* !HAVE_VFPRINTF */
#endif /* !HAVE_VFPRINTF || !HAVE_STDARG_H*/
#endif
/*
* $Id: logII.c,v 0.4 1993/10/12 18:43:35 ceder Exp $
* $Id: logII.c,v 0.5 1993/10/16 17:47:02 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -29,7 +29,9 @@
*/
#include <stdio.h>
#include <stdarg.h>
#ifdef HAVE_STDARG_H
# include <stdarg.h>
#endif
#ifdef HAVE_STDLIB_H
# include <stdlib.h>
#endif
......
/*
* $Id: lyskomd.h,v 0.7 1993/10/13 00:08:31 ceder Exp $
* $Id: lyskomd.h,v 0.8 1993/10/16 17:47:12 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*
* This file is part of the LysKOM server.
......@@ -23,7 +23,7 @@
* Please mail bug reports to bug-lyskom@lysator.liu.se.
*/
/*
* $Id: lyskomd.h,v 0.7 1993/10/13 00:08:31 ceder Exp $
* $Id: lyskomd.h,v 0.8 1993/10/16 17:47:12 ceder Exp $
*/
......@@ -40,7 +40,7 @@ extern int num_ip_mux_port;
* (At least one member in that group should not read his mail using kom...)
*/
#ifdef HAVE_VFPRINTF
#if defined(HAVE_VFPRINTF) && defined(HAVE_STDARG_H)
extern void
restart_kom(const char * format, ...);
#else
......
/*
* $Id: manipulate.h,v 0.7 1993/08/05 00:05:53 ceder Exp $
* $Id: manipulate.h,v 0.8 1993/10/16 17:47:25 ceder Exp $
* Copyright (C) 1991 Lysator Academic Computer Association.
*