diff -pu3r cdrtools-2.00.3-orig/mkisofs/iso9660.h cdrtools-2.00.3-work/mkisofs/iso9660.h
--- cdrtools-2.00.3-orig/mkisofs/iso9660.h	2000-04-19 22:09:18.000000000 +0100
+++ cdrtools-2.00.3-work/mkisofs/iso9660.h	2004-04-08 13:40:19.000000000 +0100
@@ -149,6 +149,13 @@ struct iso_path_table {
 };
 
 /*
+ * Romeo ugliness
+ */
+/* TODO: <rich@phekda.gotadsl.co.uk>: This probably belongs somewhere else. */
+
+#define LEN_ROMEONAME 128
+
+/*
  * A ISO filename is: "abcde.eee;1" -> <filename> '.' <ext> ';' <version #>
  *
  * The maximum needed string length is:
@@ -161,6 +168,7 @@ struct iso_path_table {
  */
 #define	LEN_ISONAME	31
 #define	MAX_ISONAME	37
+#define MAX_NAME	LEN_ROMEONAME
 
 struct iso_directory_record {
 	unsigned char length		[ISODCL (1, 1)];   /* 711 */
@@ -173,7 +181,7 @@ struct iso_directory_record {
 	char interleave			[ISODCL (28, 28)]; /* 711 */
 	char volume_sequence_number	[ISODCL (29, 32)]; /* 723 */
 	unsigned char name_len		[ISODCL (33, 33)]; /* 711 */
-	char name			[MAX_ISONAME+1]; /* Not really, but we need something here */
+	char name			[MAX_NAME+1]; /* Not really, but we need something here */
 };
 
 
diff -pu3r cdrtools-2.00.3-orig/mkisofs/mkisofs.c cdrtools-2.00.3-work/mkisofs/mkisofs.c
--- cdrtools-2.00.3-orig/mkisofs/mkisofs.c	2003-05-15 15:12:44.000000000 +0100
+++ cdrtools-2.00.3-work/mkisofs/mkisofs.c	2004-04-08 13:32:54.000000000 +0100
@@ -95,6 +95,7 @@ int	use_genboot = 0;
 int	use_RockRidge = 0;
 int	use_Joliet = 0;
 int	jlen = JMAX;	/* maximum Joliet file name length */
+int	use_Romeo = 0;
 int	verbose = 1;
 int	debug = 0;
 int	gui = 0;
@@ -154,6 +155,7 @@ int	iso9660_level = 1;
 int	iso9660_namelen = LEN_ISONAME; /* 31 characters, may be set to 37 */
 int	full_iso9660_filenames = 0; /* Full 31 character iso9660 filenames */
 int	relaxed_filenames = 0;	/* For Amiga.  Disc will not work with DOS */
+int	romeo_filenames = 0;	/* Romeo-format filenames */
 int	allow_lowercase = 0;	/* Allow lower case letters */
 int	allow_multidot = 0;	/* Allow more than on dot in filename */
 int	iso_translate = 1;	/* 1 == enables '#', '-' and '~' removal */
@@ -345,6 +347,8 @@ struct ld_option {
 
 #define OPTION_JLONG			1063
 
+#define OPTION_ROMEO                    1064
+
 #ifdef UDF
 #define OPTION_UDF			1500
 #endif
@@ -538,6 +542,8 @@ static const struct ld_option ld_options
 	'r', NULL, "Generate rationalized Rock Ridge directory information", ONE_DASH},
 	{{"rock", no_argument, NULL, 'R'},
 	'R', NULL, "Generate Rock Ridge directory information", ONE_DASH},
+	{{"romeo", no_argument, NULL, OPTION_ROMEO},
+	 '\0', NULL, "Enable Romeo format", ONE_DASH},
 
 #ifdef SORTING
 	{ {"sort", required_argument, NULL, OPTION_SORT},
@@ -1278,6 +1284,13 @@ main(argc, argv)
 			use_Joliet++;
 			jlen = JLONGMAX;
 			break;
+		case OPTION_ROMEO:
+		        use_Romeo++;
+			iso9660_namelen = LEN_ROMEONAME;
+			full_iso9660_filenames++;
+			romeo_filenames++;
+			warn_violate++;
+		        break;
 		case OPTION_JCHARSET:
 			use_Joliet++;
 			/* FALLTHROUGH */
diff -pu3r cdrtools-2.00.3-orig/mkisofs/mkisofs.h cdrtools-2.00.3-work/mkisofs/mkisofs.h
--- cdrtools-2.00.3-orig/mkisofs/mkisofs.h	2002-12-07 19:59:42.000000000 +0000
+++ cdrtools-2.00.3-work/mkisofs/mkisofs.h	2004-04-08 13:33:39.000000000 +0100
@@ -343,6 +343,7 @@ extern int	iso9660_level;
 extern int	iso9660_namelen;
 extern int      full_iso9660_filenames;
 extern int	relaxed_filenames;
+extern int	romeo_filenames;
 extern int	allow_lowercase;
 extern int	allow_multidot;
 extern int	iso_translate;
diff -pu3r cdrtools-2.00.3-orig/mkisofs/name.c cdrtools-2.00.3-work/mkisofs/name.c
--- cdrtools-2.00.3-orig/mkisofs/name.c	2002-12-25 14:16:50.000000000 +0000
+++ cdrtools-2.00.3-work/mkisofs/name.c	2004-04-08 13:39:52.000000000 +0100
@@ -351,6 +351,55 @@ iso9660_file_length(name, sresult, dirfl
 					 * Here we allow a more relaxed syntax.
 					 */
 					*result++ = c;
+				} else if (romeo_filenames) {
+				  /* Romeo-format filenames */
+				  if (isalnum(c)) {
+				    *result++ = c;
+				  } else {
+				    switch(c) {
+				    /*
+				     * Supported symbols in Romeo-format
+				     * filenames
+				     */
+				    case ' ':
+				    case '!':
+				    case '%':
+				    case '&':
+				    case '\'':
+				    case '(':
+				    case ')':
+				    case '=':
+				    case '+':
+				    case ',':
+				    case '-':
+				    case '.':
+				    case ';':
+				    case '<':
+				    case '>':
+				    case '_':
+				      *result++ = c;
+				      break;
+
+				    case '#':
+/* TODO: <rich@phekda.gotadsl.co.uk>: Should we disallow this? */
+/*				    case '-': */
+				    case '~':
+				      /*
+				       * Check if we should allow these
+				       * illegal characters used by
+				       * Microsoft.
+				       */
+				      if (iso_translate)
+					*result++ = '_';
+				      else
+					*result++ = c;
+				      break;
+					
+				    default:
+				      *result++ = '_';
+				      break;
+				    }
+				  }
 				} else switch (c) {
 					/*
 					 * Dos style filenames.

