home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
cdrom
/
Misc
/
mkisofs
/
convert.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-05-29
|
6KB
|
341 lines
/* convert.c: */
#include <stdlib.h>
#include <string.h>
#include "mkisofs.h"
static char g_conversion_table[256] = {
'X', /* 0 */
'X', /* 1 */
'X', /* 2 */
'X', /* 3 */
'X', /* 4 */
'X', /* 5 */
'X', /* 6 */
'X', /* 7 */
'X', /* 8 */
'X', /* 9 */
'X', /* 10 */
'X', /* 11 */
'X', /* 12 */
'X', /* 13 */
'X', /* 14 */
'X', /* 15 */
'X', /* 16 */
'X', /* 17 */
'X', /* 18 */
'X', /* 19 */
'X', /* 20 */
'X', /* 21 */
'X', /* 22 */
'X', /* 23 */
'X', /* 24 */
'X', /* 25 */
'X', /* 26 */
'X', /* 27 */
'X', /* 28 */
'X', /* 29 */
'X', /* 30 */
'X', /* 31 */
'S', /* space */
'E', /* ! */
'Q', /* " */
'H', /* # */
'D', /* $ */
'P', /* % */
'A', /* & */
'A', /* ' */
'P', /* ( */
'P', /* ) */
'A', /* * */
'P', /* + */
'C', /* , */
'M', /* - */
'D', /* . */
'S', /* / */
'0', /* 0 */
'1', /* 1 */
'2', /* 2 */
'3', /* 3 */
'4', /* 4 */
'5', /* 5 */
'6', /* 6 */
'7', /* 7 */
'8', /* 8 */
'9', /* 9 */
'C', /* : */
'S', /* ; */
'L', /* < */
'E', /* = */
'G', /* > */
'Q', /* ? */
'A', /* @ */
'A', /* A */
'B', /* B */
'C', /* C */
'D', /* D */
'E', /* E */
'F', /* F */
'G', /* G */
'H', /* H */
'I', /* I */
'J', /* J */
'K', /* K */
'L', /* L */
'M', /* M */
'N', /* N */
'O', /* O */
'P', /* P */
'Q', /* Q */
'R', /* R */
'S', /* S */
'T', /* T */
'U', /* U */
'V', /* V */
'W', /* W */
'X', /* X */
'Y', /* Y */
'Z', /* Z */
'B', /* [ */
'B', /* \ */
'B', /* ] */
'C', /* ^ */
'_', /* _ */
'A', /* ` */
'A', /* a */
'B', /* b */
'C', /* c */
'D', /* d */
'E', /* e */
'F', /* f */
'G', /* g */
'H', /* h */
'I', /* i */
'J', /* j */
'K', /* k */
'L', /* l */
'M', /* m */
'N', /* n */
'O', /* o */
'P', /* p */
'Q', /* q */
'R', /* r */
'S', /* s */
'T', /* t */
'U', /* u */
'V', /* v */
'W', /* w */
'X', /* x */
'Y', /* y */
'Z', /* z */
'B', /* { */
'B', /* | */
'B', /* } */
'T', /* ~ */
'D', /* delete */
'X', /* 128 */
'X', /* 129 */
'X', /* 130 */
'X', /* 131 */
'X', /* 132 */
'X', /* 133 */
'X', /* 134 */
'X', /* 135 */
'X', /* 136 */
'X', /* 137 */
'X', /* 138 */
'X', /* 139 */
'X', /* 140 */
'X', /* 141 */
'X', /* 142 */
'X', /* 143 */
'X', /* 144 */
'X', /* 145 */
'X', /* 146 */
'X', /* 147 */
'X', /* 148 */
'X', /* 149 */
'X', /* 150 */
'X', /* 151 */
'X', /* 152 */
'X', /* 153 */
'X', /* 154 */
'X', /* 155 */
'X', /* 156 */
'X', /* 157 */
'X', /* 158 */
'X', /* 159 */
'X', /* 160 */
'E', /* ¡ */
'C', /* ¢ */
'L', /* £ */
'C', /* ¤ */
'Y', /* ¥ */
'S', /* ¦ */
'P', /* § */
'D', /* ¨ */
'C', /* © */
'A', /* ª */
'G', /* « */
'N', /* ¬ */
'M', /* */
'R', /* ® */
'B', /* ¯ */
'C', /* ° */
'P', /* ± */
'2', /* ² */
'3', /* ³ */
'A', /* ´ */
'M', /* µ */
'P', /* ¶ */
'D', /* · */
'C', /* ¸ */
'1', /* ¹ */
'O', /* º */
'G', /* » */
'4', /* ¼ */
'2', /* ½ */
'3', /* ¾ */
'Q', /* ¿ */
'A', /* À */
'A', /* Á */
'A', /* Â */
'A', /* Ã */
'A', /* Ä */
'A', /* Å */
'A', /* Æ */
'C', /* Ç */
'E', /* È */
'E', /* É */
'E', /* Ê */
'E', /* Ë */
'I', /* Ì */
'I', /* Í */
'I', /* Î */
'I', /* Ï */
'D', /* Ð */
'N', /* Ñ */
'O', /* Ò */
'O', /* Ó */
'O', /* Ô */
'O', /* Õ */
'O', /* Ö */
'X', /* × */
'O', /* Ø */
'U', /* Ù */
'U', /* Ú */
'U', /* Û */
'U', /* Ü */
'Y', /* Ý */
'D', /* Þ */
'S', /* ß */
'A', /* à */
'A', /* á */
'A', /* â */
'A', /* ã */
'A', /* ä */
'A', /* å */
'A', /* æ */
'C', /* ç */
'E', /* è */
'E', /* é */
'E', /* ê */
'E', /* ë */
'I', /* ì */
'I', /* í */
'I', /* î */
'I', /* ï */
'D', /* ð */
'N', /* ñ */
'O', /* ò */
'O', /* ó */
'O', /* ô */
'O', /* õ */
'O', /* ö */
'D', /* ÷ */
'O', /* ø */
'U', /* ù */
'U', /* ú */
'U', /* û */
'U', /* ü */
'Y', /* ý */
'D', /* þ */
'Y' /* ÿ */
};
static void map_special_characters (char *str)
{
for (; *str; str++)
*str = g_conversion_table[*(unsigned char*)str];
}
static void shorten_name (char *name, int max_length)
{
int len = strlen (name);
if (len <= max_length)
return;
while (len > max_length) {
int i;
for (i=len-1; i>=0; i--)
if (strchr ("AEIOUaeiou", name[i]))
break;
if (i<0)
break;
memmove (name + i, name + i + 1, len-i);
len--;
}
name[max_length] = 0;
}
char *convert_filename (const char *filename)
{
char *name, *extension;
char *dotptr;
static char result[40];
if (dotptr = strrchr (filename, '.')) {
int len = dotptr - filename;
name = malloc (len + 1);
memcpy (name, filename, len);
name[len] = 0;
extension = strdup (dotptr + 1);
} else {
name = strdup ((char*) filename);
extension = strdup ("");
}
if (map_filenames) {
map_special_characters (name);
map_special_characters (extension);
}
shorten_name (name, short_filenames ? 8 : 30);
shorten_name (extension, short_filenames ? 3 : (30 - strlen (name)));
strcpy (result, name);
strcat (result, ".");
strcat (result, extension);
strcat (result, ";1");
free (name);
free (extension);
return result;
}
char *convert_dirname (const char *dirname)
{
static char result[40];
strcpy (result, dirname);
if (map_filenames)
map_special_characters (result);
shorten_name (result, short_filenames ? 8 : 31);
return result;
}