import java.io.*;

class Shortcut
{
	String	filename;
	String	name;
	String	url;
	int		valid;
	

	Shortcut( String fname ){
		filename = fname;
		url = "";
		valid = 0;

		int lastBackSlash = fname.lastIndexOf( "\\" );
		if( -1 == lastBackSlash )	lastBackSlash = 0;
		else						lastBackSlash++;
		int dotUrl = fname.toUpperCase().indexOf( ".URL" );
		if( -1 == dotUrl )	name = "";
		else				name = fname.substring( lastBackSlash, dotUrl );
	}

	public String getUrl(){
		return	url;
	}

	public String getName(){
		return	name;
	}

	public int getInfo() throws IOException{
		FileInputStream file = new FileInputStream( filename );
		byte[] buf = new byte[file.available()];
		byte[] pattern1 = new String( "[InternetShortcut]" ).getBytes();
		byte[] pattern2 = new String( "URL=" ).getBytes();
		file.read( buf );
		file.close();
		int mc1 = 0;
		int mc2 = 0;
		int i, j;
		for( i = 0; i < buf.length; i++ ){
			if( buf[i] == pattern1[0] ){
				for( j = 1; j < pattern1.length && buf[i + j] == pattern1[j]; j++ ){}
				if( j >= pattern1.length ){
					mc1++;
					i += j;
					break;
				}
			}
		}
		for( ; i < buf.length; i++ ){
			if( buf[i] == pattern2[0] ){
				for( j = 1; j < pattern2.length && buf[i + j] == pattern2[j]; j++ ){
				}
				if( j >= pattern2.length ){
					mc2++;
					i += j;
					break;
				}
			}
		}
		int count = 0;
		for( count = 0; count < buf.length - i - 2; count++ ){
			if(( 10 == buf[i + count + 1] )&&( 13 == buf[i + count + 2] ))	break;
		}
		this.url = new String( buf, i, count );
		valid = 1;
		return valid;
	}

	public void printlnLink(){
		System.out.println( "<a target=\"_blank\" href=\"" + url + "\">" + name + "</a>" );
	}
}


class ShortcutDir
{
	String	name;
	File	dir;
	
	ShortcutDir( String d ){
		name = d;
		dir = new File( d );
	}
	
	public static void usage( int code ){
		System.err.println( "usage: ShortcutDir( <directory> )" );
	}

	public void list(){
		if( !dir.isDirectory() ){
			System.err.println( name + ": not directory" );
			usage( -1 );
		}

		System.out.println( "<dl>" );
		String files[];
		files = dir.list();
		
		for( int i = 0; i < files.length - 1; i ++ ){
			for( int j = i + 1; j < files.length; j++ ){
				File fileI = new File( dir.getPath() + "\\" + files[i] );
				File fileJ = new File( dir.getPath() + "\\" + files[j] );
				if(( !fileI.isDirectory() && fileJ.isDirectory() )||	//	file & dir
				  ((( fileI.isFile() && fileJ.isFile() )||( fileI.isDirectory() && fileJ.isDirectory() ))&&( 0 < files[i].toUpperCase().compareTo( files[j].toUpperCase() )))
				){
					String x = files[i];
					files[i] = files[j];
					files[j] = x;
				}
			}
		}
		
		
		for( int i = 0; i < files.length; i++ ){
			String fileName = dir.getPath() + "\\" + files[i];
			File theFile = new File( fileName );
			if( theFile.isDirectory() ){
				System.out.println( "<dd><b>" + files[i] + "</b>" );
				ShortcutDir subDir = new ShortcutDir( fileName );
				subDir.list();
			}
			if( theFile.isFile() ){
				System.out.print( "<dd>" );
				int dotUrl = files[i].toUpperCase().indexOf( ".URL" );
				if( -1 != dotUrl ){
					Shortcut sc = new Shortcut( fileName );
					try{
						sc.getInfo();
					}catch( Exception e){
						System.err.println( "error: " + e + " filename=" + fileName );
					}
					sc.printlnLink();
				}
			}
		}
		System.out.println( "</dl>" );
	}
}



class Fav2HTML
{
	
	public static void usage( int code ){
		System.err.println( "usage: java Fav2HTML <directory>" );
		System.exit( code );
	}
	

	public static void main( String args[] ){
		if( 0 == args.length ){
			usage( 0 );
		}
		
		System.out.println( "<html>" );
		System.out.println( "<head>" );
		System.out.println( "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=Shift_JIS\">" );
		System.out.println( "<title>My Favorites</title>" );
		System.out.println( "</head>" );
		System.out.println( "<body>" );
		
		
		ShortcutDir sd = new ShortcutDir( args[0] );
		sd.list();

		System.out.println( "</body>" );
		System.out.println( "</html>" );

	}
}

