Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Imported from util-linux-2.11m tarball.

  • Loading branch information...
commit e8f2641919de90b488ce3788a7795b88311750b5 1 parent 364cda4
@karelzak authored
Showing with 57,459 additions and 34,813 deletions.
  1. +92 −0 HISTORY
  2. +10 −2 INSTALL
  3. +10 −2 MCONFIG
  4. +0 −1  Makefile
  5. +1 −1  VERSION
  6. +14 −0 configure
  7. +24 −4 disk-utils/blockdev.c
  8. +12 −6 disk-utils/fdformat.c
  9. +15 −6 disk-utils/fsck.minix.c
  10. +3 −0  disk-utils/minix.h
  11. +19 −15 disk-utils/mkfs.minix.c
  12. +6 −5 disk-utils/setfdprm.c
  13. +1 −1  fdisk/Makefile
  14. +46 −7 fdisk/cfdisk.c
  15. +106 −58 fdisk/fdisk.c
  16. +1 −1  fdisk/fdisk.h
  17. +8 −4 fdisk/fdiskbsdlabel.c
  18. +2 −3 fdisk/fdisksgilabel.c
  19. +2 −2 fdisk/fdisksunlabel.c
  20. +3 −1 fdisk/i386_sys_types.c
  21. +129 −0 fdisk/partitiontype.c
  22. +32 −20 fdisk/sfdisk.c
  23. +0 −34 games/Makefile
  24. +0 −72 games/banner.6
  25. +0 −1,157 games/banner.c
  26. +75 −58 hwclock/hwclock.c
  27. +1 −0  lib/xstrncpy.c
  28. +1 −1  login-utils/Makefile
  29. +11 −5 login-utils/agetty.c
  30. +54 −11 login-utils/login.c
  31. +6 −4 login-utils/passwd.c
  32. +7 −2 login-utils/shutdown.c
  33. +5 −3 login-utils/simpleinit.c
  34. +87 −82 login-utils/vipw.c
  35. +7 −0 login-utils/wall.c
  36. +5 −2 misc-utils/Makefile
  37. +83 −17 misc-utils/cal.c
  38. +6 −3 misc-utils/logger.1
  39. +12 −3 misc-utils/namei.c
  40. +179 −0 misc-utils/replay.1
  41. +79 −0 misc-utils/replay.pl
  42. +7 −0 misc-utils/script.1
  43. +15 −2 misc-utils/script.c
  44. +2 −2 misc-utils/setterm.c
  45. +4 −3 mount/fstab.5
  46. +52 −0 mount/linux_fs.h
  47. +161 −15 mount/mount.8
  48. +2 −2 mount/mount_by_label.c
  49. +72 −11 mount/mount_guess_fstype.c
  50. +12 −6 mount/mount_guess_rootdev.c
  51. +1 −1  mount/nfs.5
  52. +20 −7 mount/nfsmount.c
  53. +0 −1  mount/nfsmount.x
  54. +0 −1  mount/rpcsvc/nfsmount.h
  55. +0 −1  mount/rpcsvc/nfsmount.x
  56. +1 −1  mount/sundries.c
  57. +2 −0  mount/swapon.c
  58. +13 −5 mount/umount.8
  59. +39 −14 mount/umount.c
  60. +2 −2 po/Makefile
  61. +0 −1  po/POTFILES.in
  62. +1,837 −1,820 po/cat-id-tbl.c
  63. +1,457 −1,296 po/cs.po
  64. +2,270 −1,775 po/da.po
  65. +4,675 −4,542 po/de.po
  66. +5,424 −4,968 po/es.po
  67. +4,690 −4,213 po/fr.po
  68. +5,426 −4,970 po/it.po
  69. +4,176 −3,687 po/ja.po
  70. +4,254 −3,990 po/nl.po
  71. +2,540 −1,843 po/pt_BR.po
  72. +9,696 −0 po/sv.po
  73. +9,327 −0 po/tr.po
  74. +16 −12 sys-utils/cytune.c
  75. +2 −2 sys-utils/ipcrm.8
  76. +2 −2 sys-utils/ipcs.c
  77. +1 −0  sys-utils/rdev.c
  78. +26 −6 sys-utils/readprofile.c
  79. +17 −7 sys-utils/renice.c
  80. +4 −1 testincl
  81. +8 −2 text-utils/Makefile
  82. +17 −0 text-utils/line.1
  83. +22 −0 text-utils/line.sh
  84. +5 −1 text-utils/more.1
  85. +8 −8 text-utils/more.c
View
92 HISTORY
@@ -1,3 +1,95 @@
+util-linux 2.11m
+
+* Danish messages (Claus Hindsgaul)
+* German messages (Karl Eichwalder)
+* Swedish messages (Christian Rose)
+* Turkish messages (Nilg�n Belma Bug�ner)
+* fdisk: added netbsd type (Steven J. Hill)
+* more: fix for unsigned char (Rusty Russell)
+* mount: added sysv magic (Tim Launchbury)
+* setterm: fixed "setterm -foreground default"
+
+util-linux 2.11l
+
+* Danish messages (Claus Hindsgaul)
+* banner: removed - it is in bsdgames
+* fdisk: show partitions with empty type but some other nonzero field
+* login: copy the static struct that getpwnam() returns before calling
+ PAM routines that might themselves use getpwnam(). Abort on problems.
+ (Olaf Kirch)
+* mount: added jfs magic (Christoph Hellwig)
+* renice: report the correct new priority after a setpriority()
+* umount: add lazy unmount (Christoph Hellwig)
+
+util-linux 2.11k
+
+ Various potential buffer overflows were pointed out by awayzzz@digibel.org.
+ Fixes in agetty, hwclock, namei, readprofile, simpleinit, vipw.
+ (Also added a few [f]close() calls - entirely superfluously.)
+
+* agetty: avoid possible buffer overflow
+* cfdisk: recognize xfs (Nathan Scott)
+* cytune: added close()
+* fdformat: added close()
+* fdisk: added fclose()
+* hwclock: avoid possible buffer overflow
+* mkfs.minix: added fclose()
+* mount: remove the assumption that 635 is the default mount port
+* namei: avoid possible buffer overflow
+* rdev: added closedir()
+* readprofile: avoid possible buffer overflow
+* sfdisk: added fclose()
+* simpleinit: avoid possible buffer overflow
+* swapon: added fclose()
+* umount: use tcp when mount was done using tcp (James D Strandboge)
+* vipw: avoid possible buffer overflow
+
+util-linux 2.11j
+
+* No new French messages yet
+* fdisk: fix for AIX label (Olaf Hering)
+* fdisk: fix for creating DOS label when BSD label is present
+* mount.8: added remark about blocksize to ext2 sb= mount option description.
+* partitiontype: new, not installed
+
+util-linux 2.11i
+
+* testincl: do not run conftest (Brian Murphy)
+* blockdev: corrected ioctl numbers now that BLKBSZGET is in 2.4.10pre3
+* cal: fixed for Hungarian locale
+* cal: fixed for multibyte locales (Pablo Saratxaga)
+* fdisk: avoid superfluous warning about DOS partitions
+* line: new, to support SCO shell scripts (Christoph Hellwig)
+* mount: added vxfs magic
+* passwd: tiny fix for ARM (Ken Cox)
+* replay: replay typescript with timings (Joey Hess)
+* script: add -t flag for timing (Joey Hess)
+
+util-linux 2.11h
+
+* Turkish messages (Nilg�n Belma Bug�ner)
+* Danish messages (Claus Hindsgaul)
+* banner: minor fix (awayzzz@digibel.org)
+* mkfs.minix: minix v2 fix
+* more.1: improved (Edward Betts)
+* mount.8: corrected description of the nwfs uni_xlate mount option
+* vipw: make temp files of mode 0600 (Bill Nottingham)
+* wall: avoid writing to /dev/:0
+
+util-linux 2.11g
+
+* MCONFIG & configure: fix for gcc 3.0
+ Note that nfsmount_xdr.c may give warnings with gcc 3.0, essentially
+ because of defines in <rpc/xdr.h> that use things like ntohl(*buf++)
+ where ntohl(x) is a macro with several occurrences of x.
+* blockdev: support for the get/set blocksize ioctls
+ [not yet in the 2.4.5 kernel]
+* fdisk: added Linux/PA-RISC type (Matt Taggart)
+* mount: minor fix (Andrey J. Melnikoff)
+* mount: added some ext3 stuff (Andrew Morton)
+* mount: added heuristics for reiserfs (Andrew Morton)
+* mount.8: added ext3 and reiserfs docs (Andrew Morton)
+
util-linux 2.11f
* Czech messages (Ji�� Pavlovsk�)
View
12 INSTALL
@@ -21,8 +21,8 @@ WARNING: The simpleinit and some other programs in this package are
To install from source:
1) Get source distribution (see the .lsm file for locations)
-2) Untar util-linux-2.10X.tar.gz somewhere
-3) cd util-linux-2.10X
+2) Untar util-linux-2.11X.tar.gz somewhere
+3) cd util-linux-2.11X
4) Edit MCONFIG
5) ./configure
6) Look at defines.h and make_include, and edit if necessary
@@ -34,6 +34,14 @@ To install from source:
compatible init!), or you will be hosed. If you are using the SysV
init and/or some other getty, they you can keep using those.
+People ask: I want to link statically and install in /foo. How?
+Answer: Try the following:
+ LDFLAGS="-static"
+ DESTDIR=/foo
+ export LDFLAGS DESTDIR
+ ./configure
+ make
+ make install
If you have compilation problems: tell util-linux@math.uio.no about it.
View
12 MCONFIG
@@ -92,12 +92,20 @@ HAVE_FDUTILS=no
# ADD_RAW=yes
# Different optimizations for different cpus.
+# gcc 3.0 likes options -mcpu=i486 instead of -m486
ifeq "$(ARCH)" "intel"
+ ifeq "$(HAVE_OLD_GCC)" "yes"
+ CPUHEAD=-m
+ else
+ CPUHEAD=-mcpu=i
+ endif
ifeq "$(CPU)" "i386"
- OPT= -pipe -O2 -m386 -fomit-frame-pointer
+ CPUTAIL=386
else
- OPT= -pipe -O2 -m486 -fomit-frame-pointer
+ CPUTAIL=486
endif
+ CPUOPT= $(CPUHEAD)$(CPUTAIL)
+ OPT= -pipe -O2 $(CPUOPT) -fomit-frame-pointer
else
ifeq "$(ARCH)" "arm"
OPT= -pipe -O2 -fsigned-char -fomit-frame-pointer
View
1  Makefile
@@ -12,7 +12,6 @@ SUBDIRS=po \
lib \
getopt-1.1.2 \
disk-utils \
- games \
login-utils \
misc-utils \
mount \
View
2  VERSION
@@ -1 +1 @@
-2.11f
+2.11m
View
14 configure
@@ -3,6 +3,8 @@
#
# We need to find out the following things:
#
+# Version of gcc
+#
# Existence of header files:
# H1. For fdisksunlabel.c: is there a <scsi/scsi.h>?
# H2. For fdisk.c: is there a <linux/blkpg.h>?
@@ -61,6 +63,18 @@ export COMPILE
rm -f conftest.c conftest
+#
+# Old gcc wants options like -m486, but gcc 3.0 says
+# `-m486' is deprecated. Use `-march=i486' or `-mcpu=i486' instead.
+#
+echo "
+main(){ exit(0); }
+" > conftest.c
+gccout=`$CC $CFLAGS -m386 conftest.c -o conftest 2>&1 | grep "march="`
+if test -z "$gccout"; then
+ echo "HAVE_OLD_GCC=yes" >> make_include
+fi
+rm -f conftest conftest.c
#
# Find out about the existence of header files
View
28 disk-utils/blockdev.c
@@ -25,6 +25,8 @@
#define BLKRASET _IO(0x12,98)
#define BLKRAGET _IO(0x12,99)
#define BLKSSZGET _IO(0x12,104)
+#define BLKBSZGET _IOR(0x12,112,sizeof(int))
+#define BLKBSZSET _IOW(0x12,113,sizeof(int))
#endif
const char *progname;
@@ -36,9 +38,10 @@ struct bdc {
int argtype;
#define ARGNONE 0
#define ARGINTA 1
-#define ARGINTP 2
-#define ARGINTG 3
-#define ARGLINTG 4
+#define ARGINTAP 2
+#define ARGINTP 3
+#define ARGINTG 4
+#define ARGLINTG 5
long argval;
char *argname;
char *help;
@@ -53,6 +56,12 @@ struct bdc {
#ifdef BLKSSZGET
{ "--getss", "BLKSSZGET", BLKSSZGET, ARGINTG, -1, NULL, N_("get sectorsize") },
#endif
+#ifdef BLKBSZGET
+ { "--getbsz", "BLKBSZGET", BLKBSZGET, ARGINTG, -1, NULL, N_("get blocksize") },
+#endif
+#ifdef BLKBSZSET
+ { "--setbsz", "BLKBSZSET", BLKBSZSET, ARGINTAP, 0, "BLOCKSIZE", N_("set blocksize") },
+#endif
#ifdef BLKGETSIZE
{ "--getsize", "BLKGETSIZE", BLKGETSIZE, ARGLINTG, -1, NULL, N_("get size") },
#endif
@@ -132,7 +141,8 @@ main(int argc, char **argv) {
for (d = 1; d < argc; d++) {
j = find_cmd(argv[d]);
if (j >= 0) {
- if (bdcms[j].argtype == ARGINTA)
+ if (bdcms[j].argtype == ARGINTA ||
+ bdcms[j].argtype == ARGINTAP)
d++;
continue;
}
@@ -154,6 +164,7 @@ main(int argc, char **argv) {
exit(1);
}
do_commands(fd, argv, d);
+ close(fd);
}
return 0;
}
@@ -195,6 +206,15 @@ do_commands(int fd, char **argv, int d) {
iarg = atoi(argv[++i]);
res = ioctl(fd, bdcms[j].ioc, iarg);
break;
+ case ARGINTAP:
+ if (i == d-1) {
+ fprintf(stderr, _("%s requires an argument\n"),
+ bdcms[j].name);
+ usage();
+ }
+ iarg = atoi(argv[++i]);
+ res = ioctl(fd, bdcms[j].ioc, &iarg);
+ break;
case ARGINTP:
case ARGINTG:
iarg = bdcms[j].argval;
View
18 disk-utils/fdformat.c
@@ -21,14 +21,13 @@
/* cannot include <linux/fs.h> */
#define MAJOR(a) ((a)>>8)
-static int ctrl;
struct floppy_struct param;
#define FLOPPY_MAJOR 2
#define SECTOR_SIZE 512
#define PERROR(msg) { perror(msg); exit(1); }
-static void format_disk(char *name)
+static void format_disk(int ctrl, char *name)
{
struct format_descr descr;
int track;
@@ -103,6 +102,7 @@ static void usage(char *name)
int main(int argc,char **argv)
{
+ int ctrl;
int verify;
struct stat st;
char *progname, *p;
@@ -135,13 +135,19 @@ int main(int argc,char **argv)
exit(1);
}
if (access(argv[1],W_OK) < 0) PERROR(argv[1]);
- if ((ctrl = open(argv[1],O_WRONLY)) < 0) PERROR(argv[1]);
+
+ ctrl = open(argv[1],O_WRONLY);
+ if (ctrl < 0)
+ PERROR(argv[1]);
if (ioctl(ctrl,FDGETPRM,(long) &param) < 0)
- PERROR(_("Could not determine current format type"));
+ PERROR(_("Could not determine current format type"));
printf(_("%s-sided, %d tracks, %d sec/track. Total capacity %d kB.\n"),
(param.head == 2) ? _("Double") : _("Single"),
param.track, param.sect,param.size >> 1);
- format_disk(argv[1]);
- if (verify) verify_disk(argv[1]);
+ format_disk(ctrl, argv[1]);
+ close(ctrl);
+
+ if (verify)
+ verify_disk(argv[1]);
return 0;
}
View
21 disk-utils/fsck.minix.c
@@ -1015,7 +1015,7 @@ check_file2 (struct minix2_inode *dir, unsigned int offset) {
if (ino > INODES) {
printf(_("The directory '"));
print_current_name ();
- printf (_("' contains a bad inode number for file '%.*s'.",
+ printf (_("' contains a bad inode number for file '%.*s'."),
namelen, name);
if (ask (_(" Remove"), 1)) {
*(unsigned short *) (name - 2) = 0;
@@ -1155,8 +1155,12 @@ check_counts(void) {
unmark_zone(i);
continue;
}
- printf(_("Zone %d: %sin use, counted=%d\n"),
- i,zone_in_use(i)?"":_("not "),zone_count[i]);
+ if (zone_in_use(i))
+ printf(_("Zone %d: in use, counted=%d\n"),
+ i, zone_count[i]);
+ else
+ printf(_("Zone %d: not in use, counted=%d\n"),
+ i, zone_count[i]);
}
}
@@ -1201,13 +1205,18 @@ check_counts2 (void) {
if (!zone_count[i]) {
if (bad_zone (i))
continue;
- printf (_("Zone %d: marked in use, no file uses it."), i);
+ printf (_("Zone %d: marked in use, no file uses it."),
+ i);
if (ask (_("Unmark"), 1))
unmark_zone (i);
continue;
}
- printf (_("Zone %d: %sin use, counted=%d\n"),
- i, zone_in_use (i) ? "" : _("not "), zone_count[i]);
+ if (zone_in_use (i))
+ printf (_("Zone %d: in use, counted=%d\n"),
+ i, zone_count[i]);
+ else
+ printf (_("Zone %d: not in use, counted=%d\n"),
+ i, zone_count[i]);
}
}
#endif
View
3  disk-utils/minix.h
@@ -50,11 +50,14 @@ struct minix_super_block {
#define NAME_MAX 255 /* # chars in a file name */
#define MINIX_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix_inode)))
+#define MINIX2_INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct minix2_inode)))
#define MINIX_VALID_FS 0x0001 /* Clean fs. */
#define MINIX_ERROR_FS 0x0002 /* fs has errors. */
#define MINIX_SUPER_MAGIC 0x137F /* original minix fs */
#define MINIX_SUPER_MAGIC2 0x138F /* minix fs, 30 char names */
+#define MINIX2_SUPER_MAGIC 0x2468 /* minix V2 fs */
+#define MINIX2_SUPER_MAGIC2 0x2478 /* minix V2 fs, 30 char names */
#endif /* KERNEL_INCLUDES_ARE_CLEAN */
View
34 disk-utils/mkfs.minix.c
@@ -160,11 +160,13 @@ static unsigned long req_nr_inodes = 0;
#define mark_zone(x) (setbit(zone_map,(x)-FIRSTZONE+1))
#define unmark_zone(x) (clrbit(zone_map,(x)-FIRSTZONE+1))
+#ifndef HAVE_MINIX2
static void
fatal_error(const char * fmt_string,int status) {
fprintf(stderr,fmt_string,program_name,device_name);
exit(status);
}
+#endif
static void
die(char *str) {
@@ -600,22 +602,24 @@ check_blocks(void) {
static void
get_list_blocks(char *filename) {
- FILE *listfile;
- unsigned long blockno;
+ FILE *listfile;
+ unsigned long blockno;
- listfile=fopen(filename,"r");
- if(listfile == (FILE *)NULL) {
- die(_("can't open file of bad blocks"));
- }
- while(!feof(listfile)) {
- fscanf(listfile,"%ld\n", &blockno);
- mark_zone(blockno);
- badblocks++;
- }
- if(badblocks > 1)
- printf(_("%d bad blocks\n"), badblocks);
- else if (badblocks == 1)
- printf(_("one bad block\n"));
+ listfile = fopen(filename,"r");
+ if (listfile == NULL)
+ die(_("can't open file of bad blocks"));
+
+ while (!feof(listfile)) {
+ fscanf(listfile,"%ld\n", &blockno);
+ mark_zone(blockno);
+ badblocks++;
+ }
+ fclose(listfile);
+
+ if(badblocks > 1)
+ printf(_("%d bad blocks\n"), badblocks);
+ else if (badblocks == 1)
+ printf(_("one bad block\n"));
}
int
View
11 disk-utils/setfdprm.c
@@ -97,13 +97,14 @@ usage(char *name) {
char *this;
if ((this = strrchr(name,'/')) != NULL) name = this+1;
- fprintf(stderr,_("usage: %s [ -p ] dev name\n"),name);
- fprintf(stderr,_(" %s [ -p ] dev size sect heads tracks stretch \
-gap rate spec1 fmt_gap\n"),name);
+ fprintf(stderr,_("usage:\n"));
+ fprintf(stderr,_(" %s [ -p ] dev name\n"),name);
+ fprintf(stderr,_(" %s [ -p ] dev size sect heads tracks stretch "
+ "gap rate spec1 fmt_gap\n"),name);
#ifdef FDMEDCNG
- fprintf(stderr,_(" %s [ -c | -y | -n | -d ] dev\n"),name);
+ fprintf(stderr,_(" %s [ -c | -y | -n | -d ] dev\n"),name);
#else
- fprintf(stderr,_(" %s [ -c | -y | -n ] dev\n"),name);
+ fprintf(stderr,_(" %s [ -c | -y | -n ] dev\n"),name);
#endif
exit(1);
}
View
2  fdisk/Makefile
@@ -77,4 +77,4 @@ install: all
.PHONY: clean
clean:
- -rm -f *.o *~ core $(SBIN)
+ -rm -f *.o *~ core $(SBIN) partitiontype
View
53 fdisk/cfdisk.c
@@ -47,6 +47,8 @@
* Some more i18n.
* Sun Jul 18 03:19:42 MEST 1999 <aeb@cwi.nl>
* Terabyte-sized disks.
+ * Sat Jun 30 05:23:19 EST 2001 <nathans@sgi.com>
+ * XFS label recognition.
*
****************************************************************************/
@@ -397,6 +399,8 @@ partition_type_text(int i) {
else if (p_info[i].id == LINUX) {
if (!strcmp(p_info[i].fstype, "ext2"))
return _("Linux ext2");
+ else if (!strcmp(p_info[i].fstype, "xfs"))
+ return _("Linux XFS");
else
return _("Linux");
} else if (p_info[i].id == OS2_OR_NTFS) {
@@ -612,7 +616,8 @@ get_dos_label(int i) {
}
static void
-get_ext2_label(int i) {
+get_linux_label(int i) {
+
#define EXT2_SUPER_MAGIC 0xEF53
#define EXT2LABELSZ 16
struct ext2_super_block {
@@ -622,22 +627,49 @@ get_ext2_label(int i) {
char s_volume_name[EXT2LABELSZ];
char s_last_mounted[64];
char s_dummy2[824];
- } sb;
- char *label = sb.s_volume_name;
+ } e2fsb;
+
+#define XFS_SUPER_MAGIC "XFSB"
+#define XFSLABELSZ 12
+ struct xfs_super_block {
+ unsigned char s_magic[4];
+ unsigned char s_dummy0[104];
+ unsigned char s_fname[XFSLABELSZ];
+ unsigned char s_dummy1[904];
+ } xfsb;
+
+ char *label;
ext2_loff_t offset;
int j;
offset = ((ext2_loff_t) p_info[i].first_sector + p_info[i].offset)
* SECTOR_SIZE + 1024;
if (ext2_llseek(fd, offset, SEEK_SET) == offset
- && read(fd, &sb, sizeof(sb)) == sizeof(sb)
- && sb.s_magic[0] + 256*sb.s_magic[1] == EXT2_SUPER_MAGIC) {
+ && read(fd, &e2fsb, sizeof(e2fsb)) == sizeof(e2fsb)
+ && e2fsb.s_magic[0] + 256*e2fsb.s_magic[1] == EXT2_SUPER_MAGIC) {
+ label = e2fsb.s_volume_name;
for(j=0; j<EXT2LABELSZ; j++)
if(!isprint(label[j]))
label[j] = 0;
label[EXT2LABELSZ] = 0;
strncpy(p_info[i].volume_label, label, LABELSZ);
strncpy(p_info[i].fstype, "ext2", FSTYPESZ);
+ return;
+ }
+
+ offset = ((ext2_loff_t) p_info[i].first_sector + p_info[i].offset)
+ * SECTOR_SIZE + 0;
+ if (ext2_llseek(fd, offset, SEEK_SET) == offset
+ && read(fd, &xfsb, sizeof(xfsb)) == sizeof(xfsb)
+ && !strcmp(xfsb.s_magic, XFS_SUPER_MAGIC)) {
+ label = xfsb.s_fname;
+ for(j=0; j<XFSLABELSZ; j++)
+ if(!isprint(label[j]))
+ label[j] = 0;
+ label[XFSLABELSZ] = 0;
+ strncpy(p_info[i].volume_label, label, LABELSZ);
+ strncpy(p_info[i].fstype, "xfs", FSTYPESZ);
+ return;
}
}
@@ -948,7 +980,7 @@ add_part(int num, int id, int flags, int first, int last, int offset,
if (may_have_dos_label(id))
get_dos_label(i);
else if (id == LINUX)
- get_ext2_label(i);
+ get_linux_label(i);
}
check_part_info();
@@ -1068,7 +1100,7 @@ menuUpdate( int y, int x, struct MenuItem *menuItems, int itemLength,
print_warning(_("Menu item too long. Menu may look odd."));
#endif
if (lenName >= sizeof(buff)) { /* truncate ridiculously long string */
- xstrncpy( buff, mi, sizeof(buff));
+ xstrncpy(buff, mi, sizeof(buff));
} else {
snprintf(buff, sizeof(buff),
(menuType & MENU_BUTTON) ? "[%*s%-*s]" : "%*s%-*s",
@@ -1447,6 +1479,12 @@ get_partition_table_geometry(partition_table *bufp) {
die_x(3);
zero_table = TRUE;
return;
+
+ /* Oskar Liljeblad suggested:
+ Bad signature blah blah
+ If this is a brand new harddrive that has not been partitioned
+ before, please run cfdisk -z.
+ */
}
hh = ss = 0;
@@ -2049,6 +2087,7 @@ print_part_table(void) {
fp_printf(fp, _("Partition Table for %s\n"), disk_device);
fp_printf(fp, "\n");
+ /* Three-line heading. Read "Start Sector" etc vertically. */
fp_printf(fp, _(" ---Starting--- ----Ending---- Start Number of\n"));
fp_printf(fp, _(" # Flags Head Sect Cyl ID Head Sect Cyl Sector Sectors\n"));
fp_printf(fp, _("-- ----- ---- ---- ---- ---- ---- ---- ---- -------- ---------\n"));
View
164 fdisk/fdisk.c
@@ -8,26 +8,13 @@
* (at your option) any later version.
*
* For detailed old history, see older versions.
- * Contributions before 2000 by faith@cs.unc.edu, Michael Bischoff,
+ * Contributions before 2001 by faith@cs.unc.edu, Michael Bischoff,
* LeBlanc@mcc.ac.uk, martin@cs.unc.edu, leisner@sdsp.mc.xerox.com,
* esr@snark.thyrsus.com, aeb@cwi.nl, quinlan@yggdrasil.com,
* fasten@cs.bonn.edu, orschaer@cip.informatik.uni-erlangen.de,
* jj@sunsite.mff.cuni.cz, fasten@shw.com, ANeuper@GUUG.de,
- * kgw@suse.de.
- *
- * Modified, Sun Feb 20 2000, kalium@gmx.de
- * Added fix operation allowing to reorder primary/extended partition
- * entries within the partition table. Some programs or OSes have
- * problems using a partition table with entries not ordered
- * according to their positions on disk.
- * Munged this patch to also make it work for logical partitions.
- * aeb, 2000-02-20.
- *
- * Wed Mar 1 14:34:53 EST 2000 David Huggins-Daines <dhuggins@linuxcare.com>
- * Better support for OSF/1 disklabels on Alpha.
- *
- * 2000-04-06, Michal Jaegermann (michal@ellpspace.math.ualberta.ca)
- * fixed and added some alpha stuff.
+ * kgw@suse.de, kalium@gmx.de, dhuggins@linuxcare.com,
+ * michal@ellpspace.math.ualberta.ca and probably others.
*/
@@ -170,6 +157,7 @@ int fd, /* the disk */
listing = 0, /* no aborts for fdisk -l */
nowarn = 0, /* no warnings for fdisk -l/-s */
dos_compatible_flag = ~0,
+ dos_changed = 0,
partitions = 4; /* maximum partition + 1 */
uint user_cylinders, user_heads, user_sectors;
@@ -209,7 +197,7 @@ void fatal(enum failure why) {
"Here DISK is something like /dev/hdb or /dev/sda\n"
"and PARTITION is something like /dev/hda7\n"
"-u: give Start and End in sector (instead of cylinder) units\n"
-"-b 2048: (for certain MO drives) use 2048-byte sectors\n");
+"-b 2048: (for certain MO disks) use 2048-byte sectors\n");
break;
case usage2:
/* msg in cases where fdisk used to probe */
@@ -312,6 +300,21 @@ set_changed(int i) {
ptes[i].changed = 1;
}
+/*
+ * Avoid warning about DOS partitions when no DOS partition was changed.
+ * Here a heuristic "is probably dos partition".
+ * We might also do the opposite and warn in all cases except
+ * for "is probably nondos partition".
+ */
+static int
+is_dos_partition(int t) {
+ return (t == 1 || t == 4 || t == 6 ||
+ t == 0x0b || t == 0x0c || t == 0x0e ||
+ t == 0x11 || t == 0x12 || t == 0x14 || t == 0x16 ||
+ t == 0x1b || t == 0x1c || t == 0x1e || t == 0x24 ||
+ t == 0xc1 || t == 0xc4 || t == 0xc6);
+}
+
static void
menu(void) {
if (sun_label) {
@@ -405,7 +408,7 @@ xmenu(void) {
puts(_(" c change number of cylinders"));
puts(_(" d print the raw data in the partition table"));
puts(_(" e list extended partitions")); /* !sun */
- puts(_(" g create an IRIX partition table")); /* sgi */
+ puts(_(" g create an IRIX (SGI) partition table"));/* sgi */
puts(_(" h change number of heads"));
puts(_(" m print this menu"));
puts(_(" p print the partition table"));
@@ -421,7 +424,7 @@ xmenu(void) {
puts(_(" c change number of cylinders"));
puts(_(" d print the raw data in the partition table"));
puts(_(" e list extended partitions")); /* !sun */
- puts(_(" g create an IRIX partition table")); /* sgi */
+ puts(_(" g create an IRIX (SGI) partition table"));/* sgi */
puts(_(" h change number of heads"));
puts(_(" m print this menu"));
puts(_(" p print the partition table"));
@@ -438,7 +441,7 @@ xmenu(void) {
puts(_(" d print the raw data in the partition table"));
puts(_(" e list extended partitions")); /* !sun */
puts(_(" f fix partition order")); /* !sun, !aix, !sgi */
- puts(_(" g create an IRIX partition table")); /* sgi */
+ puts(_(" g create an IRIX (SGI) partition table"));/* sgi */
puts(_(" h change number of heads"));
puts(_(" m print this menu"));
puts(_(" p print the partition table"));
@@ -500,6 +503,13 @@ void list_types(struct systypes *sys)
putchar('\n');
}
+static int
+is_cleared_partition(struct partition *p) {
+ return !(!p || p->boot_ind || p->head || p->sector || p->cyl ||
+ p->sys_ind || p->end_head || p->end_sector || p->end_cyl ||
+ get_start_sect(p) || get_nr_sects(p));
+}
+
static void
clear_partition(struct partition *p) {
if (!p)
@@ -698,6 +708,8 @@ create_doslabel(void) {
sun_nolabel(); /* otherwise always recognised as sun */
sgi_nolabel(); /* otherwise always recognised as sgi */
+ aix_label = osf_label = 0;
+ partitions = 4;
for (i = 510-64; i < 510; i++)
MBRbuffer[i] = 0;
@@ -705,7 +717,7 @@ create_doslabel(void) {
extended_offset = 0;
set_all_unchanged();
set_changed(0);
- get_boot(create_empty);
+ get_boot(create_empty_dos);
}
#include <sys/utsname.h>
@@ -804,6 +816,7 @@ get_geometry(int fd, struct geom *g) {
* Read MBR. Returns:
* -1: no 0xaa55 flag present (possibly entire disk BSD)
* 0: found or created label
+ * 1: I/O error
*/
int
get_boot(enum action what) {
@@ -811,13 +824,17 @@ get_boot(enum action what) {
partitions = 4;
- if (what == create_empty)
- goto got_table; /* skip reading disk */
+ if (what == create_empty_dos)
+ goto got_dos_table; /* skip reading disk */
+ if (what == create_empty_sun)
+ goto got_table;
if ((fd = open(disk_device, type_open)) < 0) {
- if ((fd = open(disk_device, O_RDONLY)) < 0)
+ if ((fd = open(disk_device, O_RDONLY)) < 0) {
+ if (what == try_only)
+ return 1;
fatal(unable_to_open);
- else
+ } else
printf(_("You will not be able to write the partition table.\n"));
}
@@ -825,8 +842,11 @@ get_boot(enum action what) {
update_units();
- if (sector_size != read(fd, MBRbuffer, sector_size))
+ if (sector_size != read(fd, MBRbuffer, sector_size)) {
+ if (what == try_only)
+ return 1;
fatal(unable_to_read);
+ }
got_table:
@@ -842,6 +862,8 @@ get_boot(enum action what) {
if (check_osf_label())
return 0;
+got_dos_table:
+
if (!valid_part_table_flag(MBRbuffer)) {
switch(what) {
case fdisk:
@@ -858,7 +880,8 @@ get_boot(enum action what) {
return -1;
case try_only:
return -1;
- case create_empty:
+ case create_empty_dos:
+ case create_empty_sun:
break;
}
@@ -876,7 +899,7 @@ get_boot(enum action what) {
pe->ext_pointer = NULL;
pe->offset = 0;
pe->sectorbuffer = MBRbuffer;
- pe->changed = (what == create_empty);
+ pe->changed = (what == create_empty_dos);
}
for (i = 0; i < 4; i++) {
@@ -1132,7 +1155,7 @@ delete_partition(int i) {
*/
if (warn_geometry())
- return;
+ return; /* C/H/S not set */
pe->changed = 1;
if (sun_label) {
@@ -1251,6 +1274,9 @@ change_sysid(void) {
(temp = partition_type(sys)) ? temp :
_("Unknown"));
ptes[i].changed = 1;
+ if (is_dos_partition(origsys) ||
+ is_dos_partition(sys))
+ dos_changed = 1;
break;
}
}
@@ -1512,7 +1538,7 @@ list_table(int xtra) {
struct pte *pe = &ptes[i];
p = pe->part_table;
- if (p && p->sys_ind) {
+ if (p && !is_cleared_partition(p)) {
unsigned int psects = get_nr_sects(p);
unsigned int pblocks = psects;
unsigned int podd = 0;
@@ -1844,6 +1870,15 @@ new_partition(void) {
return;
}
+ if (aix_label) {
+ printf(_("\tSorry - this fdisk cannot handle AIX disk labels."
+ "\n\tIf you want to add DOS-type partitions, create"
+ "\n\ta new empty DOS partition table first. (Use o.)"
+ "\n\tWARNING: "
+ "This will destroy the present disk contents.\n"));
+ return;
+ }
+
if (partitions >= MAXIMUM_PARTS) {
printf(_("The maximum number of partitions has been created\n"));
return;
@@ -1938,12 +1973,16 @@ reread_partition_table(int leave) {
error = errno;
}
- if (i < 0)
- printf(_("Re-read table failed with error %d: %s.\nReboot your "
- "system to ensure the partition table is updated.\n"),
+ if (i) {
+ printf(_("\nWARNING: Re-reading the partition table "
+ "failed with error %d: %s.\n"
+ "The kernel still uses the old table.\n"
+ "The new table will be used "
+ "at the next reboot.\n"),
error, strerror(error));
+ }
- if (!sun_label && !sgi_label)
+ if (dos_changed)
printf(
_("\nWARNING: If you have created or modified any DOS 6.x\n"
"partitions, please see the fdisk manual page for additional\n"
@@ -2110,43 +2149,53 @@ xselect(void) {
}
static int
-is_ide_cdrom(char *device) {
+is_ide_cdrom_or_tape(char *device) {
+ FILE *procf;
+ char buf[100];
+ struct stat statbuf;
+ int is_ide = 0;
+
/* No device was given explicitly, and we are trying some
- likely things. But opening /dev/hdc may produce errors like
+ likely things. But opening /dev/hdc may produce errors like
"hdc: tray open or drive not ready"
- if it happens to be a CD-ROM drive. It even happens that
- the process hangs on the attempt to read a music CD.
- So try to be careful. This only works since 2.1.73. */
-
- FILE *procf;
- char buf[100];
- struct stat statbuf;
+ if it happens to be a CD-ROM drive. It even happens that
+ the process hangs on the attempt to read a music CD.
+ So try to be careful. This only works since 2.1.73. */
- if (strncmp("/dev/hd", device, 7))
- return 0;
- snprintf(buf, sizeof(buf), "/proc/ide/%s/media", device+5);
- procf = fopen(buf, "r");
- if (procf != NULL && fgets(buf, sizeof(buf), procf))
- return !strncmp(buf, "cdrom", 5);
+ if (strncmp("/dev/hd", device, 7))
+ return 0;
- /* Now when this proc file does not exist, skip the
- device when it is read-only. */
- if (stat(device, &statbuf) == 0)
- return (statbuf.st_mode & 0222) == 0;
+ snprintf(buf, sizeof(buf), "/proc/ide/%s/media", device+5);
+ procf = fopen(buf, "r");
+ if (procf != NULL && fgets(buf, sizeof(buf), procf))
+ is_ide = (!strncmp(buf, "cdrom", 5) ||
+ !strncmp(buf, "tape", 4));
+ else
+ /* Now when this proc file does not exist, skip the
+ device when it is read-only. */
+ if (stat(device, &statbuf) == 0)
+ is_ide = ((statbuf.st_mode & 0222) == 0);
- return 0;
+ if (procf)
+ fclose(procf);
+ return is_ide;
}
static void
try(char *device, int user_specified) {
+ int gb;
+
disk_device = device;
if (setjmp(listingbuf))
return;
if (!user_specified)
- if (is_ide_cdrom(device))
+ if (is_ide_cdrom_or_tape(device))
return;
if ((fd = open(disk_device, type_open)) >= 0) {
- if (get_boot(try_only) < 0) {
+ gb = get_boot(try_only);
+ if (gb > 0) { /* I/O error */
+ close(fd);
+ } else if (gb < 0) { /* no DOS signature */
list_disk_geometry();
if (aix_label)
return;
@@ -2196,6 +2245,7 @@ tryprocpt(void) {
snprintf(devname, sizeof(devname), "/dev/%s", ptname);
try(devname, 0);
}
+ fclose(procpt);
}
static void
@@ -2312,8 +2362,6 @@ main(int argc, char **argv) {
fatal(usage2);
get_boot(fdisk);
- if (aix_label)
- exit(0);
#ifdef __alpha__
/* On alpha, if we detect a disklabel, go directly to
View
2  fdisk/fdisk.h
@@ -53,7 +53,7 @@ enum failure {usage, usage2, ioctl_error,
unable_to_open, unable_to_read, unable_to_seek,
unable_to_write, out_of_memory};
-enum action {fdisk, require, try_only, create_empty};
+enum action {fdisk, require, try_only, create_empty_dos, create_empty_sun};
struct geom {
unsigned int heads;
View
12 fdisk/fdiskbsdlabel.c
@@ -59,7 +59,8 @@
#include "common.h"
#include "fdisk.h"
-#define NETBSD_PARTITION 0xa5
+#define FREEBSD_PARTITION 0xa5
+#define NETBSD_PARTITION 0xa9
#define DKTYPENAMES
#include "fdiskbsdlabel.h"
@@ -148,8 +149,11 @@ hidden(int type) {
}
static int
-is_netbsd_partition_type(int type) {
- return (type == NETBSD_PARTITION || type == hidden(NETBSD_PARTITION));
+is_bsd_partition_type(int type) {
+ return (type == FREEBSD_PARTITION ||
+ type == hidden(FREEBSD_PARTITION) ||
+ type == NETBSD_PARTITION ||
+ type == hidden(NETBSD_PARTITION));
}
#endif
@@ -161,7 +165,7 @@ bselect (void) {
for (t=0; t<4; t++) {
p = get_part_table(t);
- if (p && is_netbsd_partition_type(p->sys_ind)) {
+ if (p && is_bsd_partition_type(p->sys_ind)) {
xbsd_part = p;
xbsd_part_index = t;
ss = get_start_sect(xbsd_part);
View
5 fdisk/fdisksgilabel.c
@@ -135,8 +135,7 @@ sgi_get_pcylcount(void) {
}
void
-sgi_nolabel()
-{
+sgi_nolabel() {
sgilabel->magic = 0;
sgi_label = 0;
partitions = 4;
@@ -579,7 +578,7 @@ sgi_change_sysid( int i, int sys )
"retrieve from its directory standalone tools like sash and fx.\n"
"Only the \"SGI volume\" entire disk section may violate this.\n"
"Type YES if you are sure about tagging this partition differently.\n"));
- if (strcmp (line_ptr, "YES\n"))
+ if (strcmp (line_ptr, _("YES\n")))
return;
}
sgilabel->partitions[i].id = SSWAP32(sys);
View
4 fdisk/fdisksunlabel.c
@@ -383,7 +383,7 @@ void create_sunlabel(void)
set_all_unchanged();
set_changed(0);
- get_boot(create_empty);
+ get_boot(create_empty_sun);
}
void
@@ -627,7 +627,7 @@ sun_change_sysid(int i, int sys) {
"there may destroy your partition table and bootblock.\n"
"Type YES if you're very sure you would like that partition\n"
"tagged with 82 (Linux swap): "));
- if (strcmp (line_ptr, "YES\n"))
+ if (strcmp (line_ptr, _("YES\n")))
return;
}
switch (sys) {
View
4 fdisk/i386_sys_types.c
@@ -64,9 +64,10 @@ struct systypes i386_sys_types[] = {
{0x94, N_("Amoeba BBT")}, /* (bad block table) */
{0x9f, N_("BSD/OS")}, /* BSDI */
{0xa0, N_("IBM Thinkpad hibernation")},
- {0xa5, N_("BSD/386")},
+ {0xa5, N_("FreeBSD")}, /* various BSD flavours */
{0xa6, N_("OpenBSD")},
{0xa7, N_("NeXTSTEP")},
+ {0xa9, N_("NetBSD")},
{0xb7, N_("BSDI fs")},
{0xb8, N_("BSDI swap")},
{0xbb, N_("Boot Wizard hidden")},
@@ -87,6 +88,7 @@ struct systypes i386_sys_types[] = {
{0xeb, N_("BeOS fs")},
{0xee, N_("EFI GPT")}, /* Intel EFI GUID Partition Table */
{0xef, N_("EFI (FAT-12/16/32)")},/* Intel EFI System Partition */
+ {0xf0, N_("Linux/PA-RISC boot")},/* Linux/PA-RISC boot loader */
{0xf1, N_("SpeedStor")},
{0xf4, N_("SpeedStor")}, /* SpeedStor large partition */
{0xf2, N_("DOS secondary")}, /* DOS 3.3+ secondary */
View
129 fdisk/partitiontype.c
@@ -0,0 +1,129 @@
+/*
+ * partitiontype.c, aeb, 2001-09-10
+ *
+ * call: partitiontype device
+ *
+ * either exit(1), or exit(0) with a single line of output
+ * DOS: sector 0 has a DOS signature.
+ */
+#include <stdio.h>
+#include <fcntl.h>
+
+struct aix_label {
+ unsigned int magic;
+ /* more ... */
+};
+
+#define AIX_LABEL_MAGIC 0xc9c2d4c1
+#define AIX_LABEL_MAGIC_SWAPPED 0xc1d4c2c9
+
+struct bsd_label {
+ unsigned int magic;
+ unsigned char stuff[128];
+ unsigned int magic2;
+ /* more ... */
+};
+
+#define BSD_LABEL_MAGIC 0x82564557
+
+struct sgi_label {
+ unsigned int magic;
+ /* more ... */
+};
+
+#define SGI_LABEL_MAGIC 0x0be5a941
+#define SGI_LABEL_MAGIC_SWAPPED 0x41a9e50b
+
+struct sun_label {
+ unsigned char stuff[508];
+ unsigned short magic; /* Magic number */
+ unsigned short csum; /* Label xor'd checksum */
+};
+
+#define SUN_LABEL_MAGIC 0xDABE
+#define SUN_LABEL_MAGIC_SWAPPED 0xBEDA
+
+int
+main(int argc, char **argv) {
+ int fd, n;
+ unsigned char buf[1024];
+ struct aix_label *paix;
+ struct bsd_label *pbsd;
+ struct sgi_label *psgi;
+ struct sun_label *psun;
+
+ if (argc != 2) {
+ fprintf(stderr, "call: %s device\n", argv[0]);
+ exit(1);
+ }
+ fd = open(argv[1], O_RDONLY);
+ if (fd == -1) {
+ perror(argv[1]);
+ fprintf(stderr, "%s: cannot open device %s\n",
+ argv[0], argv[1]);
+ exit(1);
+ }
+ n = read(fd, buf, sizeof(buf));
+ if (n != sizeof(buf)) {
+ if (n == -1)
+ perror(argv[1]);
+ fprintf(stderr, "%s: cannot read device %s\n",
+ argv[0], argv[1]);
+ exit(1);
+ }
+
+ psun = (struct sun_label *)(&buf);
+ if (psun->magic == SUN_LABEL_MAGIC ||
+ psun->magic == SUN_LABEL_MAGIC_SWAPPED) {
+ unsigned short csum = 0, *p;
+ int i;
+
+ for (p = (unsigned short *)(&buf);
+ p < (unsigned short *)(&buf[512]); p++)
+ csum ^= *p;
+
+ if (csum == 0) {
+ printf("SUN\n");
+ exit(0);
+ }
+ }
+
+ pbsd = (struct bsd_label *)(&buf[512]);
+ if (pbsd->magic == BSD_LABEL_MAGIC &&
+ pbsd->magic2 == BSD_LABEL_MAGIC) {
+ printf("BSD\n");
+ exit(0);
+ }
+
+ pbsd = (struct bsd_label *)(&buf[64]);
+ if (pbsd->magic == BSD_LABEL_MAGIC &&
+ pbsd->magic2 == BSD_LABEL_MAGIC) {
+ printf("BSD\n");
+ exit(0);
+ }
+
+ paix = (struct aix_label *)(&buf);
+ if (paix->magic == AIX_LABEL_MAGIC ||
+ paix->magic == AIX_LABEL_MAGIC_SWAPPED) {
+ printf("AIX\n");
+ exit(0);
+ }
+
+ psgi = (struct sgi_label *)(&buf);
+ if (psgi->magic == SGI_LABEL_MAGIC ||
+ psgi->magic == SGI_LABEL_MAGIC_SWAPPED) {
+ printf("SGI\n");
+ exit(0);
+ }
+
+ if (buf[510] == 0x55 && buf[511] == 0xaa) {
+ printf("DOS\n");
+ exit(0);
+ }
+#if 0
+ fprintf(stderr, "%s: do not recognize any label on %s\n",
+ argv[0], argv[1]);
+#endif
+ exit(1); /* unknown */
+}
+
View
52 fdisk/sfdisk.c
@@ -568,6 +568,7 @@ chs_ok (chs a, char *v, char *w) {
#define LINUX_NATIVE 0x83
#define LINUX_EXTENDED 0x85
#define BSD_PARTITION 0xa5
+#define NETBSD_PARTITION 0xa9
/* List of partition types now in i386_sys_types.c */
@@ -599,7 +600,7 @@ is_extended(unsigned char type) {
static int
is_bsd(unsigned char type) {
- return (type == BSD_PARTITION);
+ return (type == BSD_PARTITION || type == NETBSD_PARTITION);
}
/*
@@ -701,7 +702,7 @@ is_parent(struct part_desc *pp, struct part_desc *p) {
}
struct disk_desc {
- struct part_desc partitions[128];
+ struct part_desc partitions[512];
int partno;
} oldp, newp;
@@ -2318,27 +2319,35 @@ static struct devd {
static int
is_ide_cdrom_or_tape(char *device) {
- /* No device was given explicitly, and we are trying some
- likely things. But opening /dev/hdc may produce errors like
- "hdc: tray open or drive not ready"
- if it happens to be a CD-ROM drive. So try to be careful.
- This only works since 2.1.73. */
+ FILE *procf;
+ char buf[100];
+ struct stat statbuf;
+ int is_ide = 0;
- FILE *procf;
- char buf[100];
- struct stat statbuf;
+ /* No device was given explicitly, and we are trying some
+ likely things. But opening /dev/hdc may produce errors like
+ "hdc: tray open or drive not ready"
+ if it happens to be a CD-ROM drive. It even happens that
+ the process hangs on the attempt to read a music CD.
+ So try to be careful. This only works since 2.1.73. */
- sprintf(buf, "/proc/ide/%s/media", device+5);
- procf = fopen(buf, "r");
- if (procf != NULL && fgets(buf, sizeof(buf), procf))
- return !strncmp(buf, "cdrom", 5) || !strncmp(buf, "tape", 4);
+ if (strncmp("/dev/hd", device, 7))
+ return 0;
- /* Now when this proc file does not exist, skip the
- device when it is read-only. */
- if (stat(device, &statbuf) == 0)
- return (statbuf.st_mode & 0222) == 0;
+ snprintf(buf, sizeof(buf), "/proc/ide/%s/media", device+5);
+ procf = fopen(buf, "r");
+ if (procf != NULL && fgets(buf, sizeof(buf), procf))
+ is_ide = (!strncmp(buf, "cdrom", 5) ||
+ !strncmp(buf, "tape", 4));
+ else
+ /* Now when this proc file does not exist, skip the
+ device when it is read-only. */
+ if (stat(device, &statbuf) == 0)
+ is_ide = ((statbuf.st_mode & 0222) == 0);
- return 0;
+ if (procf)
+ fclose(procf);
+ return is_ide;
}
static void do_list(char *dev, int silent);
@@ -2570,7 +2579,10 @@ my_open (char *dev, int rw, int silent) {
fd = open(dev, mode);
if (fd < 0 && !silent) {
perror(dev);
- fatal(_("cannot open %s %s\n"), dev, rw ? _("read-write") : _("for reading"));
+ if (rw)
+ fatal(_("cannot open %s read-write\n"), dev);
+ else
+ fatal(_("cannot open %s for reading\n"), dev);
}
return fd;
}
View
34 games/Makefile
@@ -1,34 +0,0 @@
-# Makefile -- Makefile for util-linux Linux utilities
-# Created: Sat Dec 26 20:09:40 1992
-# Revised: Fri Oct 6 20:27:05 1995 by r.faith@ieee.org
-# Copyright 1992, 1993, 1994, 1995 Rickard E. Faith (faith@cs.unc.edu)
-# May be distributed under the GPL
-#
-include ../make_include
-include ../MCONFIG
-
-# Where to put man pages?
-
-MAN6= banner.6
-
-# Where to put binaries?
-# See the "install" rule for the links. . .
-
-USRGAMES= banner
-
-all: $(USRGAMES)
-
-# Rules for everything else
-
-banner.o: $(LIB)/errs.h
-banner: banner.o $(ERR_O)
-ddate: ddate.o
-
-install: all
- $(INSTALLDIR) $(USRGAMESDIR)
- $(INSTALLBIN) $(USRGAMES) $(USRGAMESDIR)
- $(INSTALLDIR) $(MAN6DIR)
- $(INSTALLMAN) $(MAN6) $(MAN6DIR)
-
-clean:
- -rm -f *.o *~ core $(USRGAMES)
View
72 games/banner.6
@@ -1,72 +0,0 @@
-.\" Copyright (c) 1980, 1993
-.\" The Regents of the University of California. 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.
-.\" 3. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. Neither the name of the University nor the names of its contributors
-.\" may be used to endorse or promote products derived from this software
-.\" without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
-.\"
-.\" @(#)banner.6 8.1 (Berkeley) 6/6/93
-.\"
-.TH BANNER 6 "June 6, 1993"
-.UC
-.SH NAME
-banner \- print large banner on printer
-.SH SYNOPSIS
-.B /usr/games/banner
-[
-.BI \-w n
-]
-message ...
-.SH DESCRIPTION
-.I Banner
-prints a large, high quality banner on the standard output.
-If the message is omitted, it prompts for and
-reads one line of its standard input. If
-.B \-w
-is given, the output is scrunched down from a width of 132 to
-.I n ,
-suitable for a narrow terminal. If
-.I n
-is omitted, it defaults to 80.
-.PP
-The output should be printed on a hard-copy device, up to 132 columns wide,
-with no breaks between the pages. The volume is great enough that you
-may want
-a printer or a fast hardcopy terminal, but if you are patient, a
-decwriter or other 300 baud terminal will do.
-.SH BUGS
-Several ASCII characters are not defined, notably <, >, [, ], \\,
-^, _, {, }, |, and ~. Also, the characters ", ', and & are funny
-looking (but in a useful way.)
-.PP
-The
-.B \-w
-option is implemented by skipping some rows and columns.
-The smaller it gets, the grainier the output.
-Sometimes it runs letters together.
-.SH AUTHOR
-Mark Horton
View
1,157 games/banner.c
@@ -1,1157 +0,0 @@
-/*
- * Copyright (c) 1980, 1993, 1994
- * The Regents of the University of California. 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
- *
- * 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
- * - added Native Language Support
- */
-
-/*
- * banner - prints large signs
- * banner [-w#] [-d] [-t] message ...
- */
-
-#include "errs.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include "nls.h"
-
-#define MAXMSG 1024
-#define DWIDTH 132
-#define NCHARS 128
-#define NBYTES 9271
-
-/* Pointers into data_table for each ASCII char */
-int asc_ptr[NCHARS] = {
-/* ^@ */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* ^H */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* ^P */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* ^X */ 0, 0, 0, 0, 0, 0, 0, 0,
-/* */ 1, 3, 50, 81, 104, 281, 483, 590,
-/* ( */ 621, 685, 749, 851, 862, 893, 898, 921,
-/* 0 */1019, 1150, 1200, 1419, 1599, 1744, 1934, 2111,
-/* 8 */2235, 2445, 2622, 2659, 0, 2708, 0, 2715,
-/* @ */2857, 3072, 3273, 3403, 3560, 3662, 3730, 3785,
-/* H */3965, 4000, 4015, 4115, 4281, 4314, 4432, 4548,
-/* P */4709, 4790, 4999, 5188, 5397, 5448, 5576, 5710,
-/* X */5892, 6106, 6257, 0, 0, 0, 0, 0,
-/* ` */ 50, 6503, 6642, 6733, 6837, 6930, 7073, 7157,
-/* h */7380, 7452, 7499, 7584, 7689, 7702, 7797, 7869,
-/* p */7978, 8069, 8160, 8222, 8381, 8442, 8508, 8605,
-/* x */8732, 8888, 9016, 0, 0, 0, 0, 0
-};
-
-/*
- * Table of stuff to print. Format:
- * 128+n -> print current line n times.
- * 64+n -> this is last byte of char.
- * else, put m chars at position n (where m
- * is the next elt in array) and goto second
- * next element in array.
- */
-char data_table[NBYTES] = {
-/* 0 1 2 3 4 5 6 7 8 9 */
-/* 0 */ 129, 227, 130, 34, 6, 90, 19, 129, 32, 10,
-/* 10 */ 74, 40, 129, 31, 12, 64, 53, 129, 30, 14,
-/* 20 */ 54, 65, 129, 30, 14, 53, 67, 129, 30, 14,
-/* 30 */ 54, 65, 129, 31, 12, 64, 53, 129, 32, 10,
-/* 40 */ 74, 40, 129, 34, 6, 90, 19, 129, 194, 130,
-/* 50 */ 99, 9, 129, 97, 14, 129, 96, 18, 129, 95,
-/* 60 */ 22, 129, 95, 16, 117, 2, 129, 95, 14, 129,
-/* 70 */ 96, 11, 129, 97, 9, 129, 99, 6, 129, 194,
-/* 80 */ 129, 87, 4, 101, 4, 131, 82, 28, 131, 87,
-/* 90 */ 4, 101, 4, 133, 82, 28, 131, 87, 4, 101,
-/* 100 */ 4, 131, 193, 129, 39, 1, 84, 27, 129, 38,
-/* 110 */ 3, 81, 32, 129, 37, 5, 79, 35, 129, 36,
-/* 120 */ 5, 77, 38, 129, 35, 5, 76, 40, 129, 34,
-/* 130 */ 5, 75, 21, 103, 14, 129, 33, 5, 74, 19,
-/* 140 */ 107, 11, 129, 32, 5, 73, 17, 110, 9, 129,
-/* 150 */ 32, 4, 73, 16, 112, 7, 129, 31, 4, 72,
-/* 160 */ 15, 114, 6, 129, 31, 4, 72, 14, 115, 5,
-/* 170 */ 129, 30, 4, 71, 15, 116, 5, 129, 27, 97,
-/* 180 */ 131, 30, 4, 69, 14, 117, 4, 129, 30, 4,
-/* 190 */ 68, 15, 117, 4, 132, 30, 4, 68, 14, 117,
-/* 200 */ 4, 129, 27, 97, 131, 30, 5, 65, 15, 116,
-/* 210 */ 5, 129, 31, 4, 65, 14, 116, 4, 129, 31,
-/* 220 */ 6, 64, 15, 116, 4, 129, 32, 7, 62, 16,
-/* 230 */ 115, 4, 129, 32, 9, 61, 17, 114, 5, 129,
-/* 240 */ 33, 11, 58, 19, 113, 5, 129, 34, 14, 55,
-/* 250 */ 21, 112, 5, 129, 35, 40, 111, 5, 129, 36,
-/* 260 */ 38, 110, 5, 129, 37, 35, 109, 5, 129, 38,
-/* 270 */ 32, 110, 3, 129, 40, 27, 111, 1, 129, 193,
-/* 280 */ 129, 30, 4, 103, 9, 129, 30, 7, 100, 15,
-/* 290 */ 129, 30, 10, 99, 17, 129, 33, 10, 97, 6,
-/* 300 */ 112, 6, 129, 36, 10, 96, 5, 114, 5, 129,
-/* 310 */ 39, 10, 96, 4, 115, 4, 129, 42, 10, 95,
-/* 320 */ 4, 116, 4, 129, 45, 10, 95, 3, 117, 3,
-/* 330 */ 129, 48, 10, 95, 3, 117, 3, 129, 51, 10,
-/* 340 */ 95, 4, 116, 4, 129, 54, 10, 96, 4, 115,
-/* 350 */ 4, 129, 57, 10, 96, 5, 114, 5, 129, 60,
-/* 360 */ 10, 97, 6, 112, 6, 129, 63, 10, 99, 17,
-/* 370 */ 129, 66, 10, 100, 15, 129, 69, 10, 103, 9,
-/* 380 */ 129, 39, 9, 72, 10, 129, 36, 15, 75, 10,
-/* 390 */ 129, 35, 17, 78, 10, 129, 33, 6, 48, 6,
-/* 400 */ 81, 10, 129, 32, 5, 50, 5, 84, 10, 129,
-/* 410 */ 32, 4, 51, 4, 87, 10, 129, 31, 4, 52,
-/* 420 */ 4, 90, 10, 129, 31, 3, 53, 3, 93, 10,
-/* 430 */ 129, 31, 3, 53, 3, 96, 10, 129, 31, 4,
-/* 440 */ 52, 4, 99, 10, 129, 32, 4, 51, 4, 102,
-/* 450 */ 10, 129, 32, 5, 50, 5, 105, 10, 129, 33,
-/* 460 */ 6, 48, 6, 108, 10, 129, 35, 17, 111, 10,
-/* 470 */ 129, 36, 15, 114, 7, 129, 40, 9, 118, 4,
-/* 480 */ 129, 193, 129, 48, 18, 129, 43, 28, 129, 41,
-/* 490 */ 32, 129, 39, 36, 129, 37, 40, 129, 35, 44,
-/* 500 */ 129, 34, 46, 129, 33, 13, 68, 13, 129, 32,
-/* 510 */ 9, 73, 9, 129, 32, 7, 75, 7, 129, 31,
-/* 520 */ 6, 77, 6, 129, 31, 5, 78, 5, 129, 30,
-/* 530 */ 5, 79, 5, 129, 20, 74, 132, 30, 4, 80,
-/* 540 */ 4, 129, 31, 3, 79, 4, 129, 31, 4, 79,
-/* 550 */ 4, 129, 32, 3, 78, 4, 129, 32, 4, 76,
-/* 560 */ 6, 129, 33, 4, 74, 7, 129, 34, 4, 72,
-/* 570 */ 8, 129, 35, 5, 72, 7, 129, 37, 5, 73,
-/* 580 */ 4, 129, 39, 4, 74, 1, 129, 129, 193, 130,
-/* 590 */ 111, 6, 129, 109, 10, 129, 108, 12, 129, 107,
-/* 600 */ 14, 129, 97, 2, 105, 16, 129, 99, 22, 129,
-/* 610 */ 102, 18, 129, 105, 14, 129, 108, 9, 129, 194,
-/* 620 */ 130, 63, 25, 129, 57, 37, 129, 52, 47, 129,
-/* 630 */ 48, 55, 129, 44, 63, 129, 41, 69, 129, 38,
-/* 640 */ 75, 129, 36, 79, 129, 34, 83, 129, 33, 28,
-/* 650 */ 90, 28, 129, 32, 23, 96, 23, 129, 32, 17,
-/* 660 */ 102, 17, 129, 31, 13, 107, 13, 129, 30, 9,
-/* 670 */ 112, 9, 129, 30, 5, 116, 5, 129, 30, 1,
-/* 680 */ 120, 1, 129, 194, 130, 30, 1, 120, 1, 129,
-/* 690 */ 30, 5, 116, 5, 129, 30, 9, 112, 9, 129,
-/* 700 */ 31, 13, 107, 13, 129, 32, 17, 102, 17, 129,
-/* 710 */ 32, 23, 96, 23, 129, 33, 28, 90, 28, 129,
-/* 720 */ 34, 83, 129, 36, 79, 129, 38, 75, 129, 41,
-/* 730 */ 69, 129, 44, 63, 129, 48, 55, 129, 52, 47,
-/* 740 */ 129, 57, 37, 129, 63, 25, 129, 194, 129, 80,
-/* 750 */ 4, 130, 80, 4, 129, 68, 2, 80, 4, 94,
-/* 760 */ 2, 129, 66, 6, 80, 4, 92, 6, 129, 67,
-/* 770 */ 7, 80, 4, 90, 7, 129, 69, 7, 80, 4,
-/* 780 */ 88, 7, 129, 71, 6, 80, 4, 87, 6, 129,
-/* 790 */ 72, 20, 129, 74, 16, 129, 76, 12, 129, 62,
-/* 800 */ 40, 131, 76, 12, 129, 74, 16, 129, 72, 20,
-/* 810 */ 129, 71, 6, 80, 4, 87, 6, 129, 69, 7,
-/* 820 */ 80, 4, 88, 7, 129, 67, 7, 80, 4, 90,
-/* 830 */ 7, 129, 66, 6, 80, 4, 92, 6, 129, 68,
-/* 840 */ 2, 80, 4, 94, 2, 129, 80, 4, 130, 193,
-/* 850 */ 129, 60, 4, 139, 41, 42, 131, 60, 4, 139,
-/* 860 */ 193, 130, 34, 6, 129, 32, 10, 129, 31, 12,
-/* 870 */ 129, 30, 14, 129, 20, 2, 28, 16, 129, 22,
-/* 880 */ 22, 129, 24, 19, 129, 27, 15, 129, 31, 9,
-/* 890 */ 129, 194, 129, 60, 4, 152, 193, 130, 34, 6,
-/* 900 */ 129, 32, 10, 129, 31, 12, 129, 30, 14, 131,
-/* 910 */ 31, 12, 129, 32, 10, 129, 34, 6, 129, 194,
-/* 920 */ 129, 30, 4, 129, 30, 7, 129, 30, 10, 129,
-/* 930 */ 33, 10, 129, 36, 10, 129, 39, 10, 129, 42,
-/* 940 */ 10, 129, 45, 10, 129, 48, 10, 129, 51, 10,
-/* 950 */ 129, 54, 10, 129, 57, 10, 129, 60, 10, 129,
-/* 960 */ 63, 10, 129, 66, 10, 129, 69, 10, 129, 72,
-/* 970 */ 10, 129, 75, 10, 129, 78, 10, 129, 81, 10,
-/* 980 */ 129, 84, 10, 129, 87, 10, 129, 90, 10, 129,
-/* 990 */ 93, 10, 129, 96, 10, 129, 99, 10, 129, 102,
-/* 1000 */ 10, 129, 105, 10, 129, 108, 10, 129, 111, 10,
-/* 1010 */ 129, 114, 7, 129, 117, 4, 129, 193, 129, 60,
-/* 1020 */ 31, 129, 53, 45, 129, 49, 53, 129, 46, 59,
-/* 1030 */ 129, 43, 65, 129, 41, 69, 129, 39, 73, 129,
-/* 1040 */ 37, 77, 129, 36, 79, 129, 35, 15, 101, 15,
-/* 1050 */ 129, 34, 11, 106, 11, 129, 33, 9, 109, 9,
-/* 1060 */ 129, 32, 7, 112, 7, 129, 31, 6, 114, 6,
-/* 1070 */ 129, 31, 5, 115, 5, 129, 30, 5, 116, 5,
-/* 1080 */ 129, 30, 4, 117, 4, 132, 30, 5, 116, 5,
-/* 1090 */ 129, 31, 5, 115, 5, 129, 31, 6, 114, 6,
-/* 1100 */ 129, 32, 7, 112, 7, 129, 33, 9, 109, 9,
-/* 1110 */ 129, 34, 11, 106, 11, 129, 35, 15, 101, 15,
-/* 1120 */ 129, 36, 79, 129, 37, 77, 129, 39, 73, 129,
-/* 1130 */ 41, 69, 129, 43, 65, 129, 46, 59, 129, 49,
-/* 1140 */ 53, 129, 53, 45, 129, 60, 31, 129, 193, 129,
-/* 1150 */ 30, 4, 129, 30, 4, 100, 1, 129, 30, 4,
-/* 1160 */ 100, 3, 129, 30, 4, 100, 5, 129, 30, 76,
-/* 1170 */ 129, 30, 78, 129, 30, 80, 129, 30, 82, 129,
-/* 1180 */ 30, 83, 129, 30, 85, 129, 30, 87, 129, 30,
-/* 1190 */ 89, 129, 30, 91, 129, 30, 4, 132, 193, 129,
-/* 1200 */ 30, 3, 129, 30, 7, 129, 30, 10, 112, 1,
-/* 1210 */ 129, 30, 13, 112, 2, 129, 30, 16, 112, 3,
-/* 1220 */ 129, 30, 18, 111, 5, 129, 30, 21, 111, 6,
-/* 1230 */ 129, 30, 23, 112, 6, 129, 30, 14, 47, 8,
-/* 1240 */ 113, 6, 129, 30, 14, 49, 8, 114, 5, 129,
-/* 1250 */ 30, 14, 51, 8, 115, 5, 129, 30, 14, 53,
-/* 1260 */ 8, 116, 4, 129, 30, 14, 55, 8, 116, 5,
-/* 1270 */ 129, 30, 14, 56, 9, 117, 4, 129, 30, 14,
-/* 1280 */ 57, 9, 117, 4, 129, 30, 14, 58, 10, 117,
-/* 1290 */ 4, 129, 30, 14, 59, 10, 117, 4, 129, 30,
-/* 1300 */ 14, 60, 11, 117, 4, 129, 30, 14, 61, 11,
-/* 1310 */ 116, 5, 129, 30, 14, 62, 11, 116, 5, 129,
-/* 1320 */ 30, 14, 63, 12, 115, 6, 129, 30, 14, 64,
-/* 1330 */ 13, 114, 7, 129, 30, 14, 65, 13, 113, 8,
-/* 1340 */ 129, 30, 14, 65, 15, 111, 9, 129, 30, 14,
-/* 1350 */ 66, 16, 109, 11, 129, 30, 14, 67, 17, 107,
-/* 1360 */ 12, 129, 30, 14, 68, 20, 103, 16, 129, 30,
-/* 1370 */ 14, 69, 49, 129, 30, 14, 70, 47, 129, 30,
-/* 1380 */ 14, 71, 45, 129, 30, 14, 73, 42, 129, 30,
-/* 1390 */ 15, 75, 38, 129, 33, 12, 77, 34, 129, 36,
-/* 1400 */ 10, 79, 30, 129, 40, 6, 82, 23, 129, 44,
-/* 1410 */ 3, 86, 15, 129, 47, 1, 129, 193, 129, 129,
-/* 1420 */ 38, 3, 129, 37, 5, 111, 1, 129, 36, 7,
-/* 1430 */ 111, 2, 129, 35, 9, 110, 5, 129, 34, 8,
-/* 1440 */ 110, 6, 129, 33, 7, 109, 8, 129, 32, 7,
-/* 1450 */ 110, 8, 129, 32, 6, 112, 7, 129, 31, 6,
-/* 1460 */ 113, 6, 129, 31, 5, 114, 6, 129, 30, 5,
-/* 1470 */ 115, 5, 129, 30, 5, 116, 4, 129, 30, 4,
-/* 1480 */ 117, 4, 131, 30, 4, 117, 4, 129, 30, 4,
-/* 1490 */ 79, 2, 117, 4, 129, 30, 5, 78, 4, 117,
-/* 1500 */ 4, 129, 30, 5, 77, 6, 116, 5, 129, 30,
-/* 1510 */ 6, 76, 8, 115, 6, 129, 30, 7, 75, 11,
-/* 1520 */ 114, 6, 129, 30, 8, 73, 15, 112, 8, 129,
-/* 1530 */ 31, 9, 71, 19, 110, 9, 129, 31, 11, 68,
-/* 1540 */ 26, 107, 12, 129, 32, 13, 65, 14, 82, 36,
-/* 1550 */ 129, 32, 16, 61, 17, 83, 34, 129, 33, 44,
-/* 1560 */ 84, 32, 129, 34, 42, 85, 30, 129, 35, 40,
-/* 1570 */ 87, 27, 129, 36, 38, 89, 23, 129, 38, 34,
-/* 1580 */ 92, 17, 129, 40, 30, 95, 11, 129, 42, 26,
-/* 1590 */ 129, 45, 20, 129, 49, 11, 129, 193, 129, 49,
-/* 1600 */ 1, 129, 49, 4, 129, 49, 6, 129, 49, 8,
-/* 1610 */ 129, 49, 10, 129, 49, 12, 129, 49, 14, 129,
-/* 1620 */ 49, 17, 129, 49, 19, 129, 49, 21, 129, 49,
-/* 1630 */ 23, 129, 49, 14, 65, 9, 129, 49, 14, 67,
-/* 1640 */ 9, 129, 49, 14, 69, 9, 129, 49, 14, 71,
-/* 1650 */ 10, 129, 49, 14, 74, 9, 129, 49, 14, 76,
-/* 1660 */ 9, 129, 49, 14, 78, 9, 129, 49, 14, 80,
-/* 1670 */ 9, 129, 49, 14, 82, 9, 129, 49, 14, 84,
-/* 1680 */ 9, 129, 30, 4, 49, 14, 86, 10, 129, 30,
-/* 1690 */ 4, 49, 14, 89, 9, 129, 30, 4, 49, 14,
-/* 1700 */ 91, 9, 129, 30, 4, 49, 14, 93, 9, 129,
-/* 1710 */ 30, 74, 129, 30, 76, 129, 30, 78, 129, 30,
-/* 1720 */ 81, 129, 30, 83, 129, 30, 85, 129, 30, 87,
-/* 1730 */ 129, 30, 89, 129, 30, 91, 129, 30, 4, 49,
-/* 1740 */ 14, 132, 193, 129, 37, 1, 129, 36, 3, 77,
-/* 1750 */ 3, 129, 35, 5, 78, 11, 129, 34, 7, 78,
-/* 1760 */ 21, 129, 33, 7, 79, 29, 129, 32, 7, 79,
-/* 1770 */ 38, 129, 32, 6, 80, 4, 92, 29, 129, 31,
-/* 1780 */ 6, 80, 5, 102, 19, 129, 31, 5, 80, 6,
-/* 1790 */ 107, 14, 129, 31, 4, 81, 5, 107, 14, 129,
-/* 1800 */ 30, 5, 81, 6, 107, 14, 129, 30, 4, 81,
-/* 1810 */ 6, 107, 14, 130, 30, 4, 81, 7, 107, 14,
-/* 1820 */ 129, 30, 4, 80, 8, 107, 14, 130, 30, 5,
-/* 1830 */ 80, 8, 107, 14, 129, 30, 5, 79, 9, 107,
-/* 1840 */ 14, 129, 31, 5, 79, 9, 107, 14, 129, 31,
-/* 1850 */ 6, 78, 10, 107, 14, 129, 32, 6, 76, 11,
-/* 1860 */ 107, 14, 129, 32, 8, 74, 13, 107, 14, 129,
-/* 1870 */ 33, 10, 71, 16, 107, 14, 129, 33, 15, 67,
-/* 1880 */ 19, 107, 14, 129, 34, 51, 107, 14, 129, 35,
-/* 1890 */ 49, 107, 14, 129, 36, 47, 107, 14, 129, 37,
-/* 1900 */ 45, 107, 14, 129, 39, 41, 107, 14, 129, 41,
-/* 1910 */ 37, 107, 14, 129, 44, 32, 107, 14, 129, 47,
-/* 1920 */ 25, 111, 10, 129, 51, 16, 115, 6, 129, 119,
-/* 1930 */ 2, 129, 193, 129, 56, 39, 129, 51, 49, 129,
-/* 1940 */ 47, 57, 129, 44, 63, 129, 42, 67, 129, 40,
-/* 1950 */ 71, 129, 38, 75, 129, 37, 77, 129, 35, 81,
-/* 1960 */ 129, 34, 16, 74, 5, 101, 16, 129, 33, 11,
-/* 1970 */ 76, 5, 107, 11, 129, 32, 9, 77, 5, 110,
-/* 1980 */ 9, 129, 32, 7, 79, 4, 112, 7, 129, 31,
-/* 1990 */ 6, 80, 4, 114, 6, 129, 31, 5, 81, 4,
-/* 2000 */ 115, 5, 129, 30, 5, 82, 4, 116, 5, 129,
-/* 2010 */ 30, 4, 82, 4, 116, 5, 129, 30, 4, 82,
-/* 2020 */ 5, 117, 4, 131, 30, 5, 82, 5, 117, 4,
-/* 2030 */ 129, 31, 5, 81, 6, 117, 4, 129, 31, 6,
-/* 2040 */ 80, 7, 117, 4, 129, 32, 7, 79, 8, 117,
-/* 2050 */ 4, 129, 32, 9, 77, 9, 116, 5, 129, 33,
-/* 2060 */ 11, 75, 11, 116, 4, 129, 34, 16, 69, 16,
-/* 2070 */ 115, 5, 129, 35, 49, 114, 5, 129, 37, 46,
-/* 2080 */ 113, 5, 129, 38, 44, 112, 6, 129, 40, 41,
-/* 2090 */ 112, 5, 129, 42, 37, 113, 3, 129, 44, 33,
-/* 2100 */ 114, 1, 129, 47, 27, 129, 51, 17, 129, 193,
-/* 2110 */ 129, 103, 2, 129, 103, 6, 129, 104, 9, 129,
-/* 2120 */ 105, 12, 129, 106, 15, 129, 107, 14, 135, 30,
-/* 2130 */ 10, 107, 14, 129, 30, 17, 107, 14, 129, 30,
-/* 2140 */ 25, 107, 14, 129, 30, 31, 107, 14, 129, 30,
-/* 2150 */ 37, 107, 14, 129, 30, 42, 107, 14, 129, 30,
-/* 2160 */ 46, 107, 14, 129, 30, 50, 107, 14, 129, 30,
-/* 2170 */ 54, 107, 14, 129, 30, 58, 107, 14, 129, 59,
-/* 2180 */ 32, 107, 14, 129, 64, 30, 107, 14, 129, 74,
-/* 2190 */ 23, 107, 14, 129, 81, 18, 107, 14, 129, 86,
-/* 2200 */ 16, 107, 14, 129, 91, 14, 107, 14, 129, 96,
-/* 2210 */ 25, 129, 100, 21, 129, 104, 17, 129, 107, 14,
-/* 2220 */ 129, 111, 10, 129, 114, 7, 129, 117, 4, 129,
-/* 2230 */ 120, 1, 129, 193, 129, 48, 13, 129, 44, 21,
-/* 2240 */ 129, 42, 26, 129, 40, 30, 92, 12, 129, 38,
-/* 2250 */ 34, 88, 20, 129, 36, 37, 86, 25, 129, 35,
-/* 2260 */ 39, 84, 29, 129, 34, 13, 63, 12, 82, 33,
-/* 2270 */ 129, 33, 11, 67, 9, 80, 36, 129, 32, 9,
-/* 2280 */ 70, 7, 79, 38, 129, 31, 8, 72, 46, 129,
-/* 2290 */ 30, 7, 74, 22, 108, 11, 129, 30, 6, 75,
-/* 2300 */ 19, 111, 9, 129, 30, 5, 75, 17, 113, 7,
-/* 2310 */ 129, 30, 5, 74, 16, 114, 6, 129, 30, 4,
-/* 2320 */ 73, 16, 115, 6, 129, 30, 4, 72, 16, 116,
-/* 2330 */ 5, 129, 30, 4, 72, 15, 117, 4, 129, 30,
-/* 2340 */ 4, 71, 16, 117, 4, 129, 30, 5, 70, 16,
-/* 2350 */ 117, 4, 129, 30, 5, 70, 15, 117, 4, 129,
-/* 2360 */ 30, 6, 69, 15, 116, 5, 129, 30, 7, 68,
-/* 2370 */ 17, 115, 5, 129, 30, 9, 67, 19, 114, 6,
-/* 2380 */ 129, 30, 10, 65, 22, 113, 6, 129, 31, 12,
-/* 2390 */ 63, 27, 110, 9, 129, 32, 14, 60, 21, 84,
-/* 2400 */ 9, 106, 12, 129, 33, 47, 85, 32, 129, 34,
-/* 2410 */ 45, 86, 30, 129, 35, 43, 88, 26, 129, 36,
-/* 2420 */ 40, 90, 22, 129, 38, 36, 93, 17, 129, 40,
-/* 2430 */ 32, 96, 10, 129, 42, 28, 129, 44, 23, 129,
-/* 2440 */ 48, 15, 129, 193, 129, 83, 17, 129, 77, 27,
-/* 2450 */ 129, 36, 1, 74, 33, 129, 35, 3, 72, 37,
-/* 2460 */ 129, 34, 5, 70, 41, 129, 33, 6, 69, 44,
-/* 2470 */ 129, 33, 5, 68, 46, 129, 32, 5, 67, 49,
-/* 2480 */ 129, 31, 5, 66, 17, 101, 16, 129, 31, 5,
-/* 2490 */ 66, 11, 108, 10, 129, 30, 4, 65, 9, 110,
-/* 2500 */ 9, 129, 30, 4, 64, 8, 112, 7, 129, 30,
-/* 2510 */ 4, 64, 7, 114, 6, 129, 30, 4, 64, 6,
-/* 2520 */ 115, 5, 129, 30, 4, 64, 5, 116, 5, 129,
-/* 2530 */ 30, 4, 64, 5, 117, 4, 131, 30, 4, 65,
-/* 2540 */ 4, 117, 4, 129, 30, 5, 65, 4, 116, 5,
-/* 2550 */ 129, 31, 5, 66, 4, 115, 5, 129, 31, 6,
-/* 2560 */ 67, 4, 114, 6, 129, 32, 7, 68, 4, 112,
-/* 2570 */ 7, 129, 32, 9, 69, 5, 110, 9, 129, 33,
-/* 2580 */ 11, 70, 5, 107, 11, 129, 34, 16, 72, 5,
-/* 2590 */ 101, 16, 129, 35, 81, 129, 37, 77, 129, 38,
-/* 2600 */ 75, 129, 40, 71, 129, 42, 67, 129, 44, 63,
-/* 2610 */ 129, 47, 57, 129, 51, 49, 129, 56, 39, 129,
-/* 2620 */ 193, 130, 34, 6, 74, 6, 129, 32, 10, 72,
-/* 2630 */ 10, 129, 31, 12, 71, 12, 129, 30, 14, 70,
-/* 2640 */ 14, 131, 31, 12, 71, 12, 129, 32, 10, 72,
-/* 2650 */ 10, 129, 34, 6, 74, 6, 129, 194, 130, 34,
-/* 2660 */ 6, 74, 6, 129, 32, 10, 72, 10, 129, 31,
-/* 2670 */ 12, 71, 12, 129, 30, 14, 70, 14, 129, 20,
-/* 2680 */ 2, 28, 16, 70, 14, 129, 22, 22, 70, 14,
-/* 2690 */ 129, 24, 19, 71, 12, 129, 27, 15, 72, 10,
-/* 2700 */ 129, 31, 9, 74, 6, 129, 194, 129, 53, 4,
-/* 2710 */ 63, 4, 152, 193, 130, 99, 7, 129, 97, 13,
-/* 2720 */ 129, 96, 16, 129, 96, 18, 129, 96, 19, 129,
-/* 2730 */ 97, 19, 129, 99, 6, 110, 7, 129, 112, 6,
-/* 2740 */ 129, 114, 5, 129, 34, 6, 57, 5, 115, 4,
-/* 2750 */ 129, 32, 10, 54, 12, 116, 4, 129, 31, 12,
-/* 2760 */ 53, 16, 117, 3, 129, 30, 14, 52, 20, 117,
-/* 2770 */ 4, 129, 30, 14, 52, 23, 117, 4, 129, 30,
-/* 2780 */ 14, 52, 25, 117, 4, 129, 31, 12, 52, 27,
-/* 2790 */ 117, 4, 129, 32, 10, 53, 10, 70, 11, 116,
-/* 2800 */ 5, 129, 34, 6, 55, 5, 73, 10, 115, 6,
-/* 2810 */ 129, 74, 11, 114, 7, 129, 75, 12, 112, 9,
-/* 2820 */ 129, 76, 13, 110, 10, 129, 77, 16, 106, 14,
-/* 2830 */ 129, 78, 41, 129, 80, 38, 129, 81, 36, 129,
-/* 2840 */ 82, 34, 129, 84, 30, 129, 86, 26, 129, 88,
-/* 2850 */ 22, 129, 92, 14, 129, 194, 129, 55, 15, 129,
-/* 2860 */ 50, 25, 129, 47, 32, 129, 45, 13, 70, 12,
-/* 2870 */ 129, 43, 9, 76, 10, 129, 42, 6, 79, 8,
-/* 2880 */ 129, 41, 5, 81, 7, 129, 40, 4, 84, 6,
-/* 2890 */ 129, 39, 4, 59, 12, 85, 6, 129, 38, 4,
-/* 2900 */ 55, 19, 87, 5, 129, 37, 4, 53, 23, 88,
-/* 2910 */ 4, 129, 36, 4, 51, 8, 71, 6, 89, 4,
-/* 2920 */ 129, 36, 4, 51, 6, 73, 4, 89, 4, 129,
-/* 2930 */ 36, 4, 50, 6, 74, 4, 90, 3, 129, 35,
-/* 2940 */ 4, 50, 5, 75, 3, 90, 4, 129, 35, 4,
-/* 2950 */ 50, 4, 75, 4, 90, 4, 131, 35, 4, 50,
-/* 2960 */ 5, 75, 4, 90, 4, 129, 36, 4, 51, 5,
-/* 2970 */ 75, 4, 90, 4, 129, 36, 4, 51, 6, 75,
-/* 2980 */ 4, 90, 4, 129, 36, 4, 53, 26, 90, 4,
-/* 2990 */ 129, 37, 4, 54, 25, 90, 4, 129, 37, 4,
-/* 3000 */ 52, 27, 90, 3, 129, 38, 4, 52, 4, 89,
-/* 3010 */ 4, 129, 39, 4, 51, 4, 88, 4, 129, 40,
-/* 3020 */ 4, 50, 4, 87, 5, 129, 41, 4, 50, 4,
-/* 3030 */ 86, 5, 129, 42, 4, 50, 4, 85, 5, 129,
-/* 3040 */ 43, 3, 50, 4, 83, 6, 129, 44, 2, 51,
-/* 3050 */ 5, 80, 7, 129, 46, 1, 52, 6, 76, 9,
-/* 3060 */ 129, 54, 28, 129, 56, 23, 129, 60, 16, 129,
-/* 3070 */ 193, 129, 30, 4, 132, 30, 5, 129, 30, 8,
-/* 3080 */ 129, 30, 12, 129, 30, 16, 129, 30, 4, 37,
-/* 3090 */ 12, 129, 30, 4, 41, 12, 129, 30, 4, 44,
-/* 3100 */ 13, 129, 30, 4, 48, 13, 129, 52, 13, 129,
-/* 3110 */ 56, 12, 129, 58, 14, 129, 58, 4, 64, 12,
-/* 3120 */ 129, 58, 4, 68, 12, 129, 58, 4, 72, 12,
-/* 3130 */ 129, 58, 4, 75, 13, 129, 58, 4, 79, 13,
-/* 3140 */ 129, 58, 4, 83, 13, 129, 58, 4, 87, 13,
-/* 3150 */ 129, 58, 4, 91, 12, 129, 58, 4, 95, 12,
-/* 3160 */ 129, 58, 4, 96, 15, 129, 58, 4, 93, 22,
-/* 3170 */ 129, 58, 4, 89, 30, 129, 58, 4, 85, 36,
-/* 3180 */ 129, 58, 4, 81, 38, 129, 58, 4, 77, 38,
-/* 3190 */ 129, 58, 4, 73, 38, 129, 58, 4, 70, 37,
-/* 3200 */ 129, 58, 4, 66, 37, 129, 58, 41, 129, 58,
-/* 3210 */ 37, 129, 54, 38, 129, 30, 4, 50, 38, 129,
-/* 3220 */ 30, 4, 46, 38, 129, 30, 4, 42, 38, 129,
-/* 3230 */ 30, 4, 38, 39, 129, 30, 43, 129, 30, 39,
-/* 3240 */ 129, 30, 35, 129, 30, 31, 129, 30, 27, 129,
-/* 3250 */ 30, 24, 129, 30, 20, 129, 30, 16, 129, 30,
-/* 3260 */ 12, 129, 30, 8, 129, 30, 5, 129, 30, 4,
-/* 3270 */ 132, 193, 129, 30, 4, 117, 4, 132, 30, 91,
-/* 3280 */ 137, 30, 4, 80, 4, 117, 4, 138, 30, 4,
-/* 3290 */ 80, 5, 116, 5, 129, 30, 5, 79, 6, 116,
-/* 3300 */ 5, 130, 30, 6, 78, 8, 115, 6, 129, 31,
-/* 3310 */ 6, 77, 9, 115, 6, 129, 31, 7, 76, 11,
-/* 3320 */ 114, 6, 129, 31, 8, 75, 14, 112, 8, 129,
-/* 3330 */ 32, 8, 74, 16, 111, 9, 129, 32, 9, 73,
-/* 3340 */ 19, 109, 10, 129, 33, 10, 71, 24, 106, 13,
-/* 3350 */ 129, 33, 13, 68, 12, 83, 35, 129, 34, 16,
-/* 3360 */ 64, 15, 84, 33, 129, 35, 43, 85, 31, 129,
-/* 3370 */ 36, 41, 86, 29, 129, 37, 39, 88, 25, 129,
-/* 3380 */ 38, 37, 90, 21, 129, 40, 33, 93, 15, 129,
-/* 3390 */ 42, 29, 96, 9, 129, 45, 24, 129, 49, 16,
-/* 3400 */ 129, 193, 129, 63, 25, 129, 57, 37, 129, 53,
-/* 3410 */ 45, 129, 50, 51, 129, 47, 57, 129, 45, 61,
-/* 3420 */ 129, 43, 65, 129, 41, 69, 129, 39, 73, 129,
-/* 3430 */ 38, 25, 92, 21, 129, 36, 21, 97, 18, 129,
-/* 3440 */ 35, 18, 102, 14, 129, 34, 16, 106, 11, 129,
-/* 3450 */ 33, 14, 108, 10, 129, 32, 12, 111, 8, 129,
-/* 3460 */ 32, 10, 113, 6, 129, 31, 10, 114, 6, 129,
-/* 3470 */ 31, 8, 115, 5, 129, 30, 8, 116, 5, 129,
-/* 3480 */ 30, 7, 116, 5, 129, 30, 6, 117, 4, 130,
-/* 3490 */ 30, 5, 117, 4, 131, 31, 4, 116, 5, 129,
-/* 3500 */ 32, 4, 116, 4, 129, 32, 5, 115, 5, 129,
-/* 3510 */ 33, 4, 114, 5, 129, 34, 4, 112, 6, 129,
-/* 3520 */ 35, 4, 110, 7, 129, 37, 4, 107, 9, 129,
-/* 3530 */ 39, 4, 103, 12, 129, 41, 4, 103, 18, 129,
-/* 3540 */ 43, 4, 103, 18, 129, 45, 5, 103, 18, 129,
-/* 3550 */ 48, 5, 103, 18, 129, 51, 1, 129, 193, 129,
-/* 3560 */ 30, 4, 117, 4, 132, 30, 91, 137, 30, 4,
-/* 3570 */ 117, 4, 135, 30, 5, 116, 5, 130, 30, 6,
-/* 3580 */ 115, 6, 130, 31, 6, 114, 6, 129, 31, 7,
-/* 3590 */ 113, 7, 129, 32, 7, 112, 7, 129, 32, 8,
-/* 3600 */ 111, 8, 129, 33, 9, 109, 9, 129, 33, 12,
-/* 3610 */ 106, 12, 129, 34, 13, 104, 13, 129, 35, 15,
-/* 3620 */ 101, 15, 129, 36, 19, 96, 19, 129, 37, 24,
-/* 3630 */ 90, 24, 129, 39, 73, 129, 40, 71, 129, 42,
-/* 3640 */ 67, 129, 44, 63, 129, 46, 59, 129, 49, 53,
-/* 3650 */ 129, 52, 47, 129, 56, 39, 129, 61, 29, 129,
-/* 3660 */ 193, 129, 30, 4, 117, 4, 132, 30, 91, 137,
-/* 3670 */ 30, 4, 80, 4, 117, 4, 140, 30, 4, 79,
-/* 3680 */ 6, 117, 4, 129, 30, 4, 77, 10, 117, 4,
-/* 3690 */ 129, 30, 4, 73, 18, 117, 4, 132, 30, 4,
-/* 3700 */ 117, 4, 130, 30, 5, 116, 5, 130, 30, 7,
-/* 3710 */ 114, 7, 129, 30, 8, 113, 8, 129, 30, 11,
-/* 3720 */ 110, 11, 129, 30, 18, 103, 18, 132, 193, 129,
-/* 3730 */ 30, 4, 117, 4, 132, 30, 91, 137, 30, 4,
-/* 3740 */ 80, 4, 117, 4, 132, 80, 4, 117, 4, 136,
-/* 3750 */ 79, 6, 117, 4, 129, 77, 10, 117, 4, 129,
-/* 3760 */ 73, 18, 117, 4, 132, 117, 4, 130, 116, 5,
-/* 3770 */ 130, 114, 7, 129, 113, 8, 129, 110, 11, 129,
-/* 3780 */ 103, 18, 132, 193, 129, 63, 25, 129, 57, 37,
-/* 3790 */ 129, 53, 45, 129, 50, 51, 129, 47, 57, 129,
-/* 3800 */ 45, 61, 129, 43, 65, 129, 41, 69, 129, 39,
-/* 3810 */ 73, 129, 38, 25, 92, 21, 129, 36, 21, 97,
-/* 3820 */ 18, 129, 35, 18, 102, 14, 129, 34, 16, 106,
-/* 3830 */ 11, 129, 33, 14, 108, 10, 129, 32, 12, 111,
-/* 3840 */ 8, 129, 32, 10, 113, 6, 129, 31, 10, 114,
-/* 3850 */ 6, 129, 31, 8, 115, 5, 129, 30, 8, 116,
-/* 3860 */ 5, 129, 30, 7, 116, 5, 129, 30, 6, 117,
-/* 3870 */ 4, 130, 30, 5, 117, 4, 131, 30, 5, 75,
-/* 3880 */ 4, 116, 5, 129, 31, 5, 75, 4, 116, 4,
-/* 3890 */ 129, 31, 6, 75, 4, 115, 5, 129, 32, 7,
-/* 3900 */ 75, 4, 114, 5, 129, 32, 9, 75, 4, 112,
-/* 3910 */ 6, 129, 33, 11, 75, 4, 110, 7, 129, 34,
-/* 3920 */ 15, 75, 4, 107, 9, 129, 35, 44, 103, 12,
-/* 3930 */ 129, 36, 43, 103, 18, 129, 38, 41, 103, 18,
-/* 3940 */ 129, 39, 40, 103, 18, 129, 41, 38, 103, 18,
-/* 3950 */ 129, 44, 35, 129, 48, 31, 129, 52, 27, 129,
-/* 3960 */ 61, 18, 129, 193, 129, 30, 4, 117, 4, 132,
-/* 3970 */ 30, 91, 137, 30, 4, 80, 4, 117, 4, 132,
-/* 3980 */ 80, 4, 140, 30, 4, 80, 4, 117, 4, 132,
-/* 3990 */ 30, 91, 137, 30, 4, 117, 4, 132, 193, 129,
-/* 4000 */ 30, 4, 117, 4, 132, 30, 91, 137, 30, 4,
-/* 4010 */ 117, 4, 132, 193, 129, 44, 7, 129, 40, 13,
-/* 4020 */ 129, 37, 17, 129, 35, 20, 129, 34, 22, 129,
-/* 4030 */ 33, 23, 129, 32, 24, 129, 32, 23, 129, 31,
-/* 4040 */ 6, 41, 13, 129, 31, 5, 42, 11, 129, 30,
-/* 4050 */ 5, 44, 7, 129, 30, 4, 132, 30, 5, 130,
-/* 4060 */ 31, 5, 129, 31, 6, 117, 4, 129, 31, 8,
-/* 4070 */ 117, 4, 129, 32, 9, 117, 4, 129, 33, 11,
-/* 4080 */ 117, 4, 129, 34, 87, 129, 35, 86, 129, 36,
-/* 4090 */ 85, 129, 37, 84, 129, 38, 83, 129, 40, 81,
-/* 4100 */ 129, 42, 79, 129, 45, 76, 129, 50, 71, 129,
-/* 4110 */ 117, 4, 132, 193, 129, 30, 4, 117, 4, 132,
-/* 4120 */ 30, 91, 137, 30, 4, 76, 8, 117, 4, 129,
-/* 4130 */ 30, 4, 73, 13, 117, 4, 129, 30, 4, 70,
-/* 4140 */ 18, 117, 4, 129, 30, 4, 67, 23, 117, 4,
-/* 4150 */ 129, 65, 26, 129, 62, 31, 129, 59, 35, 129,
-/* 4160 */ 56, 29, 89, 7, 129, 53, 29, 91, 7, 129,
-/* 4170 */ 50, 29, 93, 7, 129, 47, 29, 95, 6, 129,
-/* 4180 */ 30, 4, 45, 29, 96, 7, 129, 30, 4, 42,
-/* 4190 */ 29, 98, 7, 129, 30, 4, 39, 30, 100, 6,
-/* 4200 */ 129, 30, 4, 36, 30, 101, 7, 129, 30, 33,
-/* 4210 */ 103, 7, 117, 4, 129, 30, 30, 105, 6, 117,
-/* 4220 */ 4, 129, 30, 27, 106, 7, 117, 4, 129, 30,
-/* 4230 */ 25, 108, 7, 117, 4, 129, 30, 22, 110, 11,
-/* 4240 */ 129, 30, 19, 111, 10, 129, 30, 16, 113, 8,
-/* 4250 */ 129, 30, 13, 115, 6, 129, 30, 11, 116, 5,
-/* 4260 */ 129, 30, 8, 117, 4, 129, 30, 5, 117, 4,
-/* 4270 */ 129, 30, 4, 117, 4, 130, 30, 4, 130, 193,
-/* 4280 */ 129, 30, 4, 117, 4, 132, 30, 91, 137, 30,
-/* 4290 */ 4, 117, 4, 132, 30, 4, 144, 30, 5, 130,
-/* 4300 */ 30, 7, 129, 30, 8, 129, 30, 11, 129, 30,
-/* 4310 */ 18, 132, 193, 129, 30, 4, 117, 4, 132, 30,
-/* 4320 */ 91, 132, 30, 4, 103, 18, 129, 30, 4, 97,
-/* 4330 */ 24, 129, 30, 4, 92, 29, 129, 30, 4, 87,
-/* 4340 */ 34, 129, 81, 40, 129, 76, 45, 129, 70, 49,
-/* 4350 */ 129, 65, 49, 129, 60, 49, 129, 55, 49, 129,
-/* 4360 */ 50, 48, 129, 44, 49, 129, 39, 48, 129, 33,
-/* 4370 */ 49, 129, 30, 47, 129, 34, 37, 129, 40, 26,
-/* 4380 */ 129, 46, 19, 129, 52, 19, 129, 58, 19, 129,
-/* 4390 */ 64, 19, 129, 70, 19, 129, 76, 19, 129, 82,
-/* 4400 */ 19, 129, 30, 4, 88, 18, 129, 30, 4, 94,
-/* 4410 */ 18, 129, 30, 4, 100, 18, 129, 30, 4, 106,
-/* 4420 */ 15, 129, 30, 91, 137, 30, 4, 117, 4, 132,
-/* 4430 */ 193, 129, 30, 4, 117, 4, 132, 30, 91, 132,
-/* 4440 */ 30, 4, 107, 14, 129, 30, 4, 104, 17, 129,
-/* 4450 */ 30, 4, 101, 20, 129, 30, 4, 99, 22, 129,
-/* 4460 */ 96, 25, 129, 93, 28, 129, 91, 28, 129, 88,
-/* 4470 */ 29, 129, 85, 29, 129, 82, 29, 129, 79, 29,
-/* 4480 */ 129, 76, 29,