diff --git a/ChangeLog b/ChangeLog index df02a4ee6..0988d1421 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +1999-11-03 Gordon Matzigkeit + + * debian/rules: Add variables for cross-compilation. + + * debian/control (Standards-Version): Update to version 3.1.0. + * debian/rules (build): Install manpages into /usr/share/man, and + info into /usr/share/info in accordance with FHS. + (binary-arch): Likewise, and put docs into /usr/share/doc. + * debian/postinst: Use /usr/share/info, and manage compatibility + /usr/doc/grub -> /usr/share/doc/grub symlink. + * debian/prerm: Likewise. + + * stage2/Makefile.am (CLEANFILES): Change to + $(nodist_pkgdata_DATA) so that the raw binary files are deleted. + * stage1/Makefile.am (CLEANFILES): Likewise. + 1999-11-06 OKUJI Yoshinori * grub/asmstub.c (grub_putchar) [HAVE_LIBCURSES]: Do not call @@ -8,13 +24,13 @@ function biosdisk is changed from SECTOR + I * SECTOR_SIZE to SECTOR + I. (find_func): Clear ERRNUM before each of the attempts. - + 1999-11-05 OKUJI Yoshinori * docs/multiboot.texi (Boot information format): Add the members `drives_addr' and `drives_count' into the Multiboot information structure, and added the descriptions. - + 1999-11-03 Gordon Matzigkeit * util/mbchk.c (main): Move the version number inside the diff --git a/TODO b/TODO index 2dde4c028..7d30e27c5 100644 --- a/TODO +++ b/TODO @@ -26,6 +26,9 @@ Priorities: * Support embedding a Stage 1.5 in the "bootloader" area of a FFS partition. !!! +* Support embedding a Stage 1.5 in the EXT2_BOOT_LOADER_INO of an ext2fs + partition. Maybe we can just make a hard link to an existing file? ! + * Complete the netboot support. ! * Add automatic configuration support. @@ -38,6 +41,10 @@ Priorities: * Fix the completion so that it works for BSD partitions as well. !! +* Add BSD syntax support, using results of ioprobe to map drives. + (0x1f0-0x1f77 = primary IDE, 0x170-0x176 = secondary, + 0x1e8-0x1ef = tertiary, 0x168-0x16f = quaternary). + * Add more filesystems support (XFS, NTFS, etc.) * Add remote console support (serial, parallel and net). diff --git a/configure b/configure index d8d7bfde0..9ab5ae1a5 100644 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13.1 +# Generated automatically using autoconf version 2.13.1 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation @@ -975,7 +975,7 @@ else fi echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6 - + if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= @@ -985,7 +985,7 @@ else MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE - + if test "x$enable_maintainer_mode" = xyes; then # Extract the first word of "perl", so it can be a program name with args. @@ -1005,7 +1005,7 @@ else *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" - for ac_dir in $ac_dummy; do + for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_PERL="$ac_dir/$ac_word" @@ -1363,7 +1363,7 @@ else *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy=""$with_binutils:$PATH"" - for ac_dir in $ac_dummy; do + for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_RANLIB="$ac_dir/$ac_word" @@ -1430,7 +1430,7 @@ echo "configure:1430: checking whether optimization for size works" >&5 if eval "test \"\${size_flag+set}\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else - + saved_CFLAGS=$CFLAGS CFLAGS="-Os -g" cat > conftest.$ac_ext <&6 @@ -1489,7 +1489,7 @@ else *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy=""$with_binutils:$PATH"" - for ac_dir in $ac_dummy; do + for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_OBJCOPY="$ac_dir/$ac_word" @@ -2230,7 +2230,7 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then cat >> confdefs.h <&6 fi @@ -2847,4 +2847,3 @@ EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || $SHELL $CONFIG_STATUS || exit 1 - diff --git a/debian/changelog b/debian/changelog index 7004fcb4b..f9e513ff3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,18 @@ grub (0.5.94) unstable; urgency=low - + + -- + +grub (0.5.93.1) unstable; urgency=low + + * Update to Standards-Version: 3.0.1, mainly for FHS support. + * Fix definition of ext2_dir_entry. (closes:bug#49017) + * Fix rules for cross-compiling. (closes:bug#49034) + * Update synopsis for grub(8). (closes:bug#48991) + * Don't clear the line when hitting enter in the GRUB shell. + (closes:bug#48989) + + -- Gordon Matzigkeit Fri, 5 Nov 1999 22:31:30 -0600 + grub (0.5.93) unstable; urgency=low * Updated example configurations. (closes:bug#42136) diff --git a/debian/control b/debian/control index a3f576853..c54837e21 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: grub Section: base Priority: extra Maintainer: GNU GRUB Maintainers -Standards-Version: 2.5.0.0 +Standards-Version: 3.0.1 Package: grub Architecture: i386 hurd-i386 diff --git a/debian/postinst b/debian/postinst index 87903c1e7..4e37a1955 100644 --- a/debian/postinst +++ b/debian/postinst @@ -1,6 +1,20 @@ #! /bin/sh set -e + +# Provide a backward-compatibility symlink to the doc directory. +package=grub +case "$1" in +install | upgrade) + if [ -d /usr/doc ]; then + if [ ! -e /usr/doc/$package -a -d /usr/share/doc/$package ]; then + ln -s /usr/share/doc/$package /usr/doc/$package + fi + fi + ;; +esac + +# Install our info pages. install-info --quiet --section Kernel Kernel \ - /usr/info/grub.info.gz + /usr/share/info/grub.info.gz install-info --quiet --section Kernel Kernel \ - /usr/info/multiboot.info.gz + /usr/share/info/multiboot.info.gz diff --git a/debian/prerm b/debian/prerm index 14e5da5b7..e51c8da7c 100644 --- a/debian/prerm +++ b/debian/prerm @@ -1,3 +1,16 @@ #! /bin/sh -install-info --quiet --remove /usr/info/grub.info.gz -install-info --quiet --remove /usr/info/multiboot.info.gz +set -e + +# Delete our backward-compatibility symlink. +package=grub +case "$1" in +remove | upgrade) + if [ -d /usr/doc -a -L /usr/doc/$package ]; then + rm -f /usr/doc/$package + fi + ;; +esac + +# Install our info pages. +install-info --quiet --remove /usr/share/info/grub.info.gz +install-info --quiet --remove /usr/share/info/multiboot.info.gz diff --git a/debian/rules b/debian/rules index 5915a4d4c..1acb7c313 100644 --- a/debian/rules +++ b/debian/rules @@ -4,13 +4,26 @@ package:=grub +# For cross-compilation. +DEB_BUILD_ARCH := $(shell dpkg --print-installation-architecture) +DEB_BUILD_GNU_CPU := $(patsubst hurd-%,%,$(DEB_BUILD_ARCH)) +ifeq ($(filter-out hurd-%,$(DEB_BUILD_ARCH)),) + DEB_BUILD_GNU_SYSTEM := gnu +else + DEB_BUILD_GNU_SYSTEM := linux +endif +DEB_BUILD_GNU_TYPE := $(DEB_BUILD_GNU_CPU)-$(DEB_BUILD_GNU_SYSTEM) +DEB_HOST_GNU_TYPE := $(DEB_BUILD_GNU_TYPE) + INSTALL = install -c INSTALL_DATA = $(INSTALL) -m 644 INSTALL_PROGRAM = $(INSTALL) -m 755 build: $(checkdir) - ./configure --prefix=/usr + ./configure --prefix=/usr \ + $(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \ + --mandir='$${datadir}/man' --infodir='$${datadir}/info' make echo timestamp > build @@ -31,25 +44,26 @@ binary-arch: checkroot build $(checkdir) -rm -rf debian/tmp ## make dirs - install -d debian/tmp debian/tmp/usr/doc/grub debian/tmp/DEBIAN + install -d debian/tmp debian/tmp/usr/share/doc/grub debian/tmp/DEBIAN ## install files dir=`cd debian/tmp && pwd` && make install DESTDIR=$$dir - gzip -f9 debian/tmp/usr/info/* debian/tmp/usr/man/man8/* + gzip -f9 debian/tmp/usr/share/info/* debian/tmp/usr/share/man/*/* strip -s debian/tmp/usr/sbin/* - $(INSTALL_DATA) TODO BUGS NEWS docs/menu.lst debian/tmp/usr/doc/grub/ + $(INSTALL_DATA) TODO BUGS NEWS docs/menu.lst \ + debian/tmp/usr/share/doc/grub/ - $(INSTALL_DATA) ChangeLog debian/tmp/usr/doc/grub/changelog - gzip -f9 debian/tmp/usr/doc/grub/changelog - $(INSTALL_DATA) debian/changelog debian/tmp/usr/doc/grub/changelog.Debian - gzip -f9 debian/tmp/usr/doc/grub/changelog.Debian - $(INSTALL_DATA) debian/copyright debian/tmp/usr/doc/grub/ - $(INSTALL_DATA) debian/README.debian debian/tmp/usr/doc/grub/ + $(INSTALL_DATA) ChangeLog debian/tmp/usr/share/doc/grub/changelog + gzip -f9 debian/tmp/usr/share/doc/grub/changelog + $(INSTALL_DATA) debian/changelog debian/tmp/usr/share/doc/grub/changelog.Debian + gzip -f9 debian/tmp/usr/share/doc/grub/changelog.Debian + $(INSTALL_DATA) debian/copyright debian/tmp/usr/share/doc/grub/ + $(INSTALL_DATA) debian/README.debian debian/tmp/usr/share/doc/grub/ # Install control files. $(INSTALL_PROGRAM) debian/postinst debian/prerm debian/tmp/DEBIAN - dpkg-shlibdeps debian/tmp/usr/sbin/grub + dpkg-shlibdeps debian/tmp/usr/*bin/* dpkg-gencontrol chown -R root.root debian/tmp chmod -R go=rX debian/tmp diff --git a/stage1/Makefile.am b/stage1/Makefile.am index 229111263..dee0a3504 100644 --- a/stage1/Makefile.am +++ b/stage1/Makefile.am @@ -1,6 +1,9 @@ pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) nodist_pkgdata_DATA = stage1 +BUILT_SOURCES = stage2_size.h +CLEANFILES = $(nodist_pkgdata_DATA) $(BUILT_SOURCES) + # We can't use builtins or standard includes. AM_CFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 diff --git a/stage1/Makefile.in b/stage1/Makefile.in index 704a90b48..776c62bcb 100644 --- a/stage1/Makefile.in +++ b/stage1/Makefile.in @@ -83,6 +83,9 @@ install_sh = @install_sh@ pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) nodist_pkgdata_DATA = stage1 +BUILT_SOURCES = stage2_size.h +CLEANFILES = $(nodist_pkgdata_DATA) $(BUILT_SOURCES) + # We can't use builtins or standard includes. AM_CFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 diff --git a/stage2/Makefile.am b/stage2/Makefile.am index ad922bc13..d6ab99354 100644 --- a/stage2/Makefile.am +++ b/stage2/Makefile.am @@ -23,6 +23,7 @@ libgrub_a_CFLAGS = $(GRUB_CFLAGS) -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 \ pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) nodist_pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \ minix_stage1_5 +CLEANFILES = $(nodist_pkgdata_DATA) noinst_DATA = pre_stage2 start noinst_PROGRAMS = pre_stage2.exec start.exec \ e2fs_stage1_5.exec fat_stage1_5.exec \ diff --git a/stage2/Makefile.in b/stage2/Makefile.in index d41af8b95..82741be3a 100644 --- a/stage2/Makefile.in +++ b/stage2/Makefile.in @@ -110,6 +110,7 @@ pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) nodist_pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \ minix_stage1_5 +CLEANFILES = $(nodist_pkgdata_DATA) noinst_DATA = pre_stage2 start noinst_PROGRAMS = pre_stage2.exec start.exec \ e2fs_stage1_5.exec fat_stage1_5.exec \ diff --git a/stage2/char_io.c b/stage2/char_io.c index 55290ff5b..d53a38a7d 100644 --- a/stage2/char_io.c +++ b/stage2/char_io.c @@ -128,9 +128,9 @@ grub_sprintf (char *buffer, const char *format, ...) int *dataptr = (int *) &format; char c, *ptr, str[16]; char *bp = buffer; - + dataptr++; - + while ((c = *format++) != 0) { if (c != '%') @@ -140,26 +140,26 @@ grub_sprintf (char *buffer, const char *format, ...) { case 'd': case 'u': case 'x': *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; - + ptr = str; - + while (*ptr) *bp++ = *(ptr++); /* putchar(*(ptr++)); */ break; - + case 'c': *bp++ = (*(dataptr++))&0xff; - /* putchar((*(dataptr++))&0xff); */ + /* putchar((*(dataptr++))&0xff); */ break; - + case 's': ptr = (char *) (*(dataptr++)); - + while ((c = *ptr++) != 0) *bp++ = c; /* putchar(c); */ break; } } - + *bp = 0; return bp - buffer; } @@ -222,7 +222,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, char *buf = (char *) CMDLINE_BUF; /* The kill buffer. */ char *kill = (char *) KILL_BUF; - + /* nested function definition for code simplicity */ static void cl_print (char *str, int echo_char) { @@ -241,7 +241,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, } } } - + /* nested function definition for code simplicity */ static void cl_setcpos (void) { @@ -249,13 +249,13 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, xend = ((lpos + plen) % 79); gotoxy (xend, yend); } - + /* nested function definition for initial command-line printing */ static void cl_init () { /* distinguish us from other lines and error messages! */ putchar ('\n'); - + /* print full line and set position here */ ystart = (getxy () & 0xff); yend = ystart; @@ -264,7 +264,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, cl_print (buf, echo_char); cl_setcpos (); } - + /* nested function definition for erasing to the end of the line */ static void cl_kill_to_end () { @@ -283,7 +283,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, static void cl_insert (const char *str) { int l = grub_strlen (str); - + if (llen + l < maxlen) { if (lpos == llen) @@ -306,7 +306,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, llen += l; } } - + plen = grub_strlen (prompt); llen = grub_strlen (cmdline); @@ -321,9 +321,9 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, } lpos = llen; grub_strcpy (buf, cmdline); - + cl_init (); - + while (ASCII_CHAR (c = getkey ()) != '\n' && ASCII_CHAR (c) != '\r') { switch (c) @@ -378,7 +378,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, pos++; is_filename = (lpos > pos); - + /* Find the position of the equal character after a command, and replace it with a space. */ for (i = pos; buf[i] && buf[i] != ' '; i++) @@ -400,7 +400,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, completion_buffer[lpos - i] = 0; ret = print_completions (is_filename, 1); errnum = ERR_NONE; - + if (ret >= 0) { /* Found, so insert COMPLETION_BUFFER. */ @@ -410,7 +410,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, { /* There is more than one candidates, so print the list. */ - + /* Go to the part after the line here. */ yend = ((llen + plen) / 79) + ystart; grub_putchar ('\n'); @@ -419,11 +419,11 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, print_completions (is_filename, 0); } } - + /* Restore the command-line. */ if (equal_pos >= 0) buf[equal_pos] = '='; - + if (ret) cl_init (); } @@ -478,14 +478,14 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, case 16: /* C-p fetch the previous command */ { char *p; - + if (history < 0) /* Save the working buffer. */ grub_strcpy (cmdline, buf); else if (grub_strcmp (get_history (history), buf) != 0) /* If BUF is modified, add it into the history list. */ add_history (buf, history); - + history++; p = get_history (history); if (! p) @@ -493,7 +493,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, history--; break; } - + lpos = 0; cl_setcpos (); cl_kill_to_end (); @@ -507,7 +507,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, case 14: /* C-n fetch the next command */ { char *p; - + if (history < 0) { break; @@ -515,12 +515,12 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, else if (grub_strcmp (get_history (history), buf) != 0) /* If BUF is modified, add it into the history list. */ add_history (buf, history); - + history--; p = get_history (history); if (! p) p = cmdline; - + lpos = 0; cl_setcpos (); cl_kill_to_end (); @@ -579,7 +579,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, } } } - + /* Move the cursor to the end of the command. */ lpos = llen; cl_setcpos (); @@ -599,7 +599,7 @@ get_cmdline (char *prompt, char *cmdline, int maxlen, empty, add it into the history list. */ if (readline && lpos < llen) add_history (cmdline, 0); - + return 0; } #endif /* STAGE1_5 */ @@ -626,7 +626,7 @@ safe_parse_maxint (char **str_ptr, int *myint_ptr) (A >= B && A <= C) <=> ((A - B) <= (C - B)) when C > B and A is unsigned. */ unsigned int digit; - + digit = tolower (*ptr) - '0'; if (digit > 9) { @@ -690,7 +690,7 @@ grub_memcmp (const char *s1, const char *s2, int n) s2++; n--; } - + return 0; } @@ -784,10 +784,10 @@ int grub_strlen (const char *str) { int len = 0; - + while (*str++) len++; - + return len; } #endif /* ! STAGE1_5 */ @@ -817,7 +817,7 @@ memcheck (int addr, int len) # endif return ret; } - + if (start_addr () <= addr && end_addr () > addr + len) return ! errnum; #endif /* GRUB_UTIL */ @@ -841,7 +841,7 @@ grub_memmove (char *to, const char *from, int len) linux-2.2.2/include/asm-i386/string.h. This is not very fast but compact. */ int d0, d1, d2; - + if (to < from) { asm volatile ("cld\n\t" diff --git a/util/mbchk.c b/util/mbchk.c index b39b29a40..6c2c19b60 100644 --- a/util/mbchk.c +++ b/util/mbchk.c @@ -48,7 +48,7 @@ Check if the format of FILE complies with the Multiboot Specification. Report bugs to . "); - + exit (status); } @@ -58,7 +58,7 @@ check_multiboot (const char *filename, FILE *fp) multiboot_header_t *mbh = 0; int i; char buf[8192]; - + if (fread (buf, 1, 8192, fp) < 0) { fprintf (stderr, "%s: Read error.\n", filename); @@ -75,17 +75,17 @@ check_multiboot (const char *filename, FILE *fp) break; } } - + if (! mbh) { fprintf (stderr, "%s: No Multiboot header.\n", filename); return 0; } - + if (! quiet) printf ("%s: The Multiboot header is found at the offset %d.\n", filename, i); - + /* Check for the checksum. */ if (mbh->magic + mbh->flags + mbh->checksum != 0) { @@ -94,7 +94,7 @@ check_multiboot (const char *filename, FILE *fp) filename, mbh->checksum); return 0; } - + /* Reserved flags must be zero. */ if (mbh->flags & ~0x00010003) { @@ -103,7 +103,7 @@ check_multiboot (const char *filename, FILE *fp) filename, mbh->flags); return 0; } - + if (! quiet) { printf ("%s: Page alignment is turned %s.\n", @@ -113,7 +113,7 @@ check_multiboot (const char *filename, FILE *fp) printf ("%s: Address fields is turned %s.\n", filename, (mbh->flags & 0x10000)? "on" : "off"); } - + /* Check for the address fields. */ if (mbh->flags & 0x10000) { @@ -125,7 +125,7 @@ check_multiboot (const char *filename, FILE *fp) filename, mbh->header_addr, mbh->load_addr); return 0; } - + if (mbh->load_addr >= mbh->load_end_addr) { fprintf (stderr, @@ -134,7 +134,7 @@ check_multiboot (const char *filename, FILE *fp) filename, mbh->load_addr, mbh->load_end_addr); return 0; } - + if (mbh->load_end_addr > mbh->bss_end_addr) { fprintf (stderr, @@ -143,7 +143,7 @@ check_multiboot (const char *filename, FILE *fp) filename, mbh->load_end_addr, mbh->bss_end_addr); return 0; } - + if (mbh->load_addr > mbh->entry_addr) { fprintf (stderr, @@ -152,7 +152,7 @@ check_multiboot (const char *filename, FILE *fp) filename, mbh->load_addr, mbh->entry_addr); return 0; } - + if (mbh->load_end_addr <= mbh->entry_addr) { fprintf (stderr, @@ -161,7 +161,7 @@ check_multiboot (const char *filename, FILE *fp) filename, mbh->load_end_addr, mbh->entry_addr); return 0; } - + /* This is a GRUB-specific limitation. */ if (mbh->load_addr < 0x100000) { @@ -172,10 +172,10 @@ check_multiboot (const char *filename, FILE *fp) return 0; } } - + if (! quiet) printf ("%s: All checks passed.\n", filename); - + return 1; } @@ -183,7 +183,7 @@ int main (int argc, char *argv[]) { int c; - + do { c = getopt_long (argc, argv, optstring, longopts, 0); @@ -191,20 +191,20 @@ main (int argc, char *argv[]) { case EOF: break; - + case 'h': usage (0); break; case 'v': - printf ("mbchk (GNU GRUB) " VERSION "\n"); + printf ("mbchk (GNU GRUB " VERSION ")\n"); exit (0); break; case 'q': quiet = 1; break; - + default: usage (1); break; @@ -240,5 +240,3 @@ main (int argc, char *argv[]) return 0; } - -