Allow #-comments in conversion table file
This commit is contained in:
parent
7aebc62b33
commit
27629843b5
@ -5,6 +5,8 @@
|
||||
PROG= mount_msdos
|
||||
SRCS= mount_msdos.c getmntopts.c
|
||||
MAN8= mount_msdos.8
|
||||
DPADD= ${LIBUTIL}
|
||||
LDADD= -lutil
|
||||
|
||||
MOUNT= ${.CURDIR}/../../mount
|
||||
CFLAGS+= -I${MOUNT}
|
||||
|
@ -1,3 +1,7 @@
|
||||
# $FreeBSD$
|
||||
#
|
||||
# u2w: 16 rows of KOI8-R -> Unicode conversion table (upper half)
|
||||
#
|
||||
0x2500 0x2502 0x250c 0x2510 0x2514 0x2518 0x251c 0x2524
|
||||
0x252c 0x2534 0x253c 0x2580 0x2584 0x2588 0x258c 0x2590
|
||||
0x2591 0x2592 0x2593 0x2320 0x25a0 0x2219 0x221a 0x2248
|
||||
@ -14,7 +18,9 @@
|
||||
0x0425 0x0418 0x0419 0x041a 0x041b 0x041c 0x041d 0x041e
|
||||
0x041f 0x042f 0x0420 0x0421 0x0422 0x0423 0x0416 0x0412
|
||||
0x042c 0x042b 0x0417 0x0428 0x042d 0x0429 0x0427 0x042a
|
||||
|
||||
#
|
||||
# d2u: 16 rows of CP866 -> KOI8-R conversion table (upper half)
|
||||
#
|
||||
0xe1 0xe2 0xf7 0xe7 0xe4 0xe5 0xf6 0xfa
|
||||
0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0
|
||||
0xf2 0xf3 0xf4 0xf5 0xe6 0xe8 0xe3 0xfe
|
||||
@ -31,7 +37,9 @@
|
||||
0xdb 0xdd 0xdf 0xd9 0xd8 0xdc 0xc0 0xd1
|
||||
0xb3 0xa3 229 197 73 105 245 213
|
||||
0x9c 0x95 0x9e 0x96 78 210 0x94 0x9a
|
||||
|
||||
#
|
||||
# u2d: 16 rows of KOI8-R -> CP866 conversion table (upper half)
|
||||
#
|
||||
0xc4 0xb3 0xda 0xbf 0xc0 0xd9 0xc3 0xb4
|
||||
0xc2 0xc1 0xc5 0xdf 0xdc 0xdb 0xdd 0xde
|
||||
0xb0 0xb1 0xb2 179 0xfe 0xf9 0xfb 61
|
||||
|
@ -149,15 +149,17 @@ Specify text file with 3 conversion tables:
|
||||
.Bl -enum
|
||||
.It
|
||||
Local character set to Unicode conversion table (upper half) for Win'95 long
|
||||
names, 128 Unicode codes.
|
||||
names, 128 Unicode codes separated by 8 per row.
|
||||
If some code not present in Unicode, use
|
||||
0x003F code ('?') as replacement.
|
||||
.It
|
||||
DOS to local character set conversion table (upper half) for DOS names,
|
||||
128 character codes. Code 0x3F ('?') used for impossible translations.
|
||||
128 character codes separated by 8 per row.
|
||||
Code 0x3F ('?') used for impossible translations.
|
||||
.It
|
||||
Local character set to DOS conversion table (upper half) for DOS names,
|
||||
128 character codes. Some codes have special meaning:
|
||||
128 character codes separated by 8 per row.
|
||||
Some codes have special meaning:
|
||||
.Bl -hang
|
||||
.It 0x00
|
||||
character disallowed in DOS file name;
|
||||
|
@ -47,6 +47,8 @@ static const char rcsid[] =
|
||||
#include <locale.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
/* must be after stdio to declare fparseln */
|
||||
#include <libutil.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sysexits.h>
|
||||
@ -260,9 +262,10 @@ load_u2wtable (pargs, name)
|
||||
char *name;
|
||||
{
|
||||
FILE *f;
|
||||
int i, code;
|
||||
int i, j, code[8];
|
||||
size_t line = 0;
|
||||
char buf[128];
|
||||
char *fn;
|
||||
char *fn, *s, *p;
|
||||
|
||||
if (*name == '/')
|
||||
fn = name;
|
||||
@ -273,21 +276,50 @@ load_u2wtable (pargs, name)
|
||||
}
|
||||
if ((f = fopen(fn, "r")) == NULL)
|
||||
err(EX_NOINPUT, "%s", fn);
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "u2w: missing item number %d", i);
|
||||
pargs->u2w[i] = code;
|
||||
p = NULL;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
if (p != NULL) free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read u2w table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "u2w table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->u2w[i * 8 + j] = code[j];
|
||||
}
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "d2u: missing item number %d", i);
|
||||
pargs->d2u[i] = code;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read d2u table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "d2u table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->d2u[i * 8 + j] = code[j];
|
||||
}
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "u2d: missing item number %d", i);
|
||||
pargs->u2d[i] = code;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read u2d table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "u2d table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->u2d[i * 8 + j] = code[j];
|
||||
}
|
||||
free(p);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
PROG= mount_msdos
|
||||
SRCS= mount_msdos.c getmntopts.c
|
||||
MAN8= mount_msdos.8
|
||||
DPADD= ${LIBUTIL}
|
||||
LDADD= -lutil
|
||||
|
||||
MOUNT= ${.CURDIR}/../../mount
|
||||
CFLAGS+= -I${MOUNT}
|
||||
|
@ -1,3 +1,7 @@
|
||||
# $FreeBSD$
|
||||
#
|
||||
# u2w: 16 rows of KOI8-R -> Unicode conversion table (upper half)
|
||||
#
|
||||
0x2500 0x2502 0x250c 0x2510 0x2514 0x2518 0x251c 0x2524
|
||||
0x252c 0x2534 0x253c 0x2580 0x2584 0x2588 0x258c 0x2590
|
||||
0x2591 0x2592 0x2593 0x2320 0x25a0 0x2219 0x221a 0x2248
|
||||
@ -14,7 +18,9 @@
|
||||
0x0425 0x0418 0x0419 0x041a 0x041b 0x041c 0x041d 0x041e
|
||||
0x041f 0x042f 0x0420 0x0421 0x0422 0x0423 0x0416 0x0412
|
||||
0x042c 0x042b 0x0417 0x0428 0x042d 0x0429 0x0427 0x042a
|
||||
|
||||
#
|
||||
# d2u: 16 rows of CP866 -> KOI8-R conversion table (upper half)
|
||||
#
|
||||
0xe1 0xe2 0xf7 0xe7 0xe4 0xe5 0xf6 0xfa
|
||||
0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0
|
||||
0xf2 0xf3 0xf4 0xf5 0xe6 0xe8 0xe3 0xfe
|
||||
@ -31,7 +37,9 @@
|
||||
0xdb 0xdd 0xdf 0xd9 0xd8 0xdc 0xc0 0xd1
|
||||
0xb3 0xa3 229 197 73 105 245 213
|
||||
0x9c 0x95 0x9e 0x96 78 210 0x94 0x9a
|
||||
|
||||
#
|
||||
# u2d: 16 rows of KOI8-R -> CP866 conversion table (upper half)
|
||||
#
|
||||
0xc4 0xb3 0xda 0xbf 0xc0 0xd9 0xc3 0xb4
|
||||
0xc2 0xc1 0xc5 0xdf 0xdc 0xdb 0xdd 0xde
|
||||
0xb0 0xb1 0xb2 179 0xfe 0xf9 0xfb 61
|
||||
|
@ -149,15 +149,17 @@ Specify text file with 3 conversion tables:
|
||||
.Bl -enum
|
||||
.It
|
||||
Local character set to Unicode conversion table (upper half) for Win'95 long
|
||||
names, 128 Unicode codes.
|
||||
names, 128 Unicode codes separated by 8 per row.
|
||||
If some code not present in Unicode, use
|
||||
0x003F code ('?') as replacement.
|
||||
.It
|
||||
DOS to local character set conversion table (upper half) for DOS names,
|
||||
128 character codes. Code 0x3F ('?') used for impossible translations.
|
||||
128 character codes separated by 8 per row.
|
||||
Code 0x3F ('?') used for impossible translations.
|
||||
.It
|
||||
Local character set to DOS conversion table (upper half) for DOS names,
|
||||
128 character codes. Some codes have special meaning:
|
||||
128 character codes separated by 8 per row.
|
||||
Some codes have special meaning:
|
||||
.Bl -hang
|
||||
.It 0x00
|
||||
character disallowed in DOS file name;
|
||||
|
@ -47,6 +47,8 @@ static const char rcsid[] =
|
||||
#include <locale.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
/* must be after stdio to declare fparseln */
|
||||
#include <libutil.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sysexits.h>
|
||||
@ -260,9 +262,10 @@ load_u2wtable (pargs, name)
|
||||
char *name;
|
||||
{
|
||||
FILE *f;
|
||||
int i, code;
|
||||
int i, j, code[8];
|
||||
size_t line = 0;
|
||||
char buf[128];
|
||||
char *fn;
|
||||
char *fn, *s, *p;
|
||||
|
||||
if (*name == '/')
|
||||
fn = name;
|
||||
@ -273,21 +276,50 @@ load_u2wtable (pargs, name)
|
||||
}
|
||||
if ((f = fopen(fn, "r")) == NULL)
|
||||
err(EX_NOINPUT, "%s", fn);
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "u2w: missing item number %d", i);
|
||||
pargs->u2w[i] = code;
|
||||
p = NULL;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
if (p != NULL) free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read u2w table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "u2w table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->u2w[i * 8 + j] = code[j];
|
||||
}
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "d2u: missing item number %d", i);
|
||||
pargs->d2u[i] = code;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read d2u table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "d2u table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->d2u[i * 8 + j] = code[j];
|
||||
}
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "u2d: missing item number %d", i);
|
||||
pargs->u2d[i] = code;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read u2d table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "u2d table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->u2d[i * 8 + j] = code[j];
|
||||
}
|
||||
free(p);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
PROG= mount_msdos
|
||||
SRCS= mount_msdos.c getmntopts.c
|
||||
MAN8= mount_msdos.8
|
||||
DPADD= ${LIBUTIL}
|
||||
LDADD= -lutil
|
||||
|
||||
MOUNT= ${.CURDIR}/../../mount
|
||||
CFLAGS+= -I${MOUNT}
|
||||
|
@ -1,3 +1,7 @@
|
||||
# $FreeBSD$
|
||||
#
|
||||
# u2w: 16 rows of KOI8-R -> Unicode conversion table (upper half)
|
||||
#
|
||||
0x2500 0x2502 0x250c 0x2510 0x2514 0x2518 0x251c 0x2524
|
||||
0x252c 0x2534 0x253c 0x2580 0x2584 0x2588 0x258c 0x2590
|
||||
0x2591 0x2592 0x2593 0x2320 0x25a0 0x2219 0x221a 0x2248
|
||||
@ -14,7 +18,9 @@
|
||||
0x0425 0x0418 0x0419 0x041a 0x041b 0x041c 0x041d 0x041e
|
||||
0x041f 0x042f 0x0420 0x0421 0x0422 0x0423 0x0416 0x0412
|
||||
0x042c 0x042b 0x0417 0x0428 0x042d 0x0429 0x0427 0x042a
|
||||
|
||||
#
|
||||
# d2u: 16 rows of CP866 -> KOI8-R conversion table (upper half)
|
||||
#
|
||||
0xe1 0xe2 0xf7 0xe7 0xe4 0xe5 0xf6 0xfa
|
||||
0xe9 0xea 0xeb 0xec 0xed 0xee 0xef 0xf0
|
||||
0xf2 0xf3 0xf4 0xf5 0xe6 0xe8 0xe3 0xfe
|
||||
@ -31,7 +37,9 @@
|
||||
0xdb 0xdd 0xdf 0xd9 0xd8 0xdc 0xc0 0xd1
|
||||
0xb3 0xa3 229 197 73 105 245 213
|
||||
0x9c 0x95 0x9e 0x96 78 210 0x94 0x9a
|
||||
|
||||
#
|
||||
# u2d: 16 rows of KOI8-R -> CP866 conversion table (upper half)
|
||||
#
|
||||
0xc4 0xb3 0xda 0xbf 0xc0 0xd9 0xc3 0xb4
|
||||
0xc2 0xc1 0xc5 0xdf 0xdc 0xdb 0xdd 0xde
|
||||
0xb0 0xb1 0xb2 179 0xfe 0xf9 0xfb 61
|
||||
|
@ -149,15 +149,17 @@ Specify text file with 3 conversion tables:
|
||||
.Bl -enum
|
||||
.It
|
||||
Local character set to Unicode conversion table (upper half) for Win'95 long
|
||||
names, 128 Unicode codes.
|
||||
names, 128 Unicode codes separated by 8 per row.
|
||||
If some code not present in Unicode, use
|
||||
0x003F code ('?') as replacement.
|
||||
.It
|
||||
DOS to local character set conversion table (upper half) for DOS names,
|
||||
128 character codes. Code 0x3F ('?') used for impossible translations.
|
||||
128 character codes separated by 8 per row.
|
||||
Code 0x3F ('?') used for impossible translations.
|
||||
.It
|
||||
Local character set to DOS conversion table (upper half) for DOS names,
|
||||
128 character codes. Some codes have special meaning:
|
||||
128 character codes separated by 8 per row.
|
||||
Some codes have special meaning:
|
||||
.Bl -hang
|
||||
.It 0x00
|
||||
character disallowed in DOS file name;
|
||||
|
@ -47,6 +47,8 @@ static const char rcsid[] =
|
||||
#include <locale.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
/* must be after stdio to declare fparseln */
|
||||
#include <libutil.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sysexits.h>
|
||||
@ -260,9 +262,10 @@ load_u2wtable (pargs, name)
|
||||
char *name;
|
||||
{
|
||||
FILE *f;
|
||||
int i, code;
|
||||
int i, j, code[8];
|
||||
size_t line = 0;
|
||||
char buf[128];
|
||||
char *fn;
|
||||
char *fn, *s, *p;
|
||||
|
||||
if (*name == '/')
|
||||
fn = name;
|
||||
@ -273,21 +276,50 @@ load_u2wtable (pargs, name)
|
||||
}
|
||||
if ((f = fopen(fn, "r")) == NULL)
|
||||
err(EX_NOINPUT, "%s", fn);
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "u2w: missing item number %d", i);
|
||||
pargs->u2w[i] = code;
|
||||
p = NULL;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
if (p != NULL) free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read u2w table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "u2w table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->u2w[i * 8 + j] = code[j];
|
||||
}
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "d2u: missing item number %d", i);
|
||||
pargs->d2u[i] = code;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read d2u table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "d2u table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->d2u[i * 8 + j] = code[j];
|
||||
}
|
||||
for (i = 0; i < 128; i++) {
|
||||
if (fscanf(f, "%i", &code) != 1)
|
||||
errx(EX_DATAERR, "u2d: missing item number %d", i);
|
||||
pargs->u2d[i] = code;
|
||||
for (i = 0; i < 16; i++) {
|
||||
do {
|
||||
free(p);
|
||||
if ((p = s = fparseln(f, NULL, &line, NULL, 0)) == NULL)
|
||||
errx(EX_DATAERR, "can't read u2d table row %d near line %d", i, line);
|
||||
while (isspace((unsigned char)*s))
|
||||
s++;
|
||||
} while (*s == '\0');
|
||||
if (sscanf(s, "%i%i%i%i%i%i%i%i",
|
||||
code, code + 1, code + 2, code + 3, code + 4, code + 5, code + 6, code + 7) != 8)
|
||||
errx(EX_DATAERR, "u2d table: missing item(s) in row %d, line %d", i, line);
|
||||
for (j = 0; j < 8; j++)
|
||||
pargs->u2d[i * 8 + j] = code[j];
|
||||
}
|
||||
free(p);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user