diff --git a/nds-gen b/nds-gen new file mode 100755 index 0000000..27a2cd6 --- /dev/null +++ b/nds-gen @@ -0,0 +1,180 @@ +#!/bin/awk -f + +BEGIN { + reg_tab[0] = "E"; # Europe + reg_tab[1] = "U"; # USA + reg_tab[2] = "G"; # Germany + reg_tab[3] = "C"; # China + reg_tab[4] = "S"; # Spain + reg_tab[5] = "F"; # France + reg_tab[6] = "I"; # Italy + reg_tab[7] = "J"; # Japan + reg_tab[8] = "Nl"; # Nederland + reg_tab[9] = "En"; # England + reg_tab[10] = "Dn"; # Denmark + reg_tab[11] = "Fi"; # Finland + reg_tab[12] = "No"; # Norway + reg_tab[13] = "Pl"; # Poland + reg_tab[14] = "Pr"; # Portugal + reg_tab[15] = "Sw"; # Sweden + reg_tab[16] = "UE"; # USA and Europe + reg_tab[17] = "JUE"; # Japan, USA and Europe + reg_tab[18] = "JU"; # Japan and USA + reg_tab[19] = "Au"; # Australia + reg_tab[20] = "nK"; # North Korea + reg_tab[21] = "Br"; # Brazil + reg_tab[22] = "K"; # South Korea + reg_tab[23] = "EB"; # Europe and Brazil + reg_tab[24] = "EUB"; # Europe, USA and Brazil + reg_tab[25] = "UB"; # USA and Brazil + reg_tab[26] = "R"; # Russia + reg_tab[27] = "R"; # Russia + reg_tab[28] = "Gr"; # Greece + + lang_tab[1] = "Fr"; # French + lang_tab[2] = "En"; # English + lang_tab[4] = "Zh"; # Chinese + lang_tab[8] = "da"; # Danish + lang_tab[16] = "Nl"; # Dutch + lang_tab[32] = "Fi"; # Finnish + lang_tab[64] = "De"; # German + lang_tab[128] = "It"; # Italian + lang_tab[256] = "Ja"; # Japanese + lang_tab[512] = "Nn"; # Norwegian + lang_tab[1024] = "Pl"; # Polish + lang_tab[2048] = "Pt"; # Portuguese + lang_tab[4096] = "Es"; # Spanish + lang_tab[8192] = "Sv"; # Swedish + lang_tab[16384] = "En"; # English + lang_tab[32768] = "Pt"; # Portuguese + lang_tab[65536] = "Ko"; # Korean + lang_tab[131072] = "Ru"; # Russian + lang_tab[262144] = "El"; # Greek + + mask["None"] = "000000000"; + mask["Eeprom - 4 kbit"] = "100000000"; + mask["Eeprom - 64 kbit"] = "200000000"; + mask["Eeprom - 512 kbit"] = "500000000"; + mask["Flash - 2 Mbit"] = "300000000"; + mask["Flash - 4 Mbit"] = "400000000"; + mask["Flash - 64 Mbit"] = "600000000"; + mask["TBC"] = "F00000000"; + + nb = 0; +} + +// { + rn = $0; + + gsub( ".*", "", rn); + gsub( ".*", "", rn); +} + +// { + title = $0; + + gsub( ".*<title>", "", title); + gsub( ".*", "", title); + gsub( "&", "\\&", title); + gsub( "<", "<", title); + gsub( ">", ">", title); +} + +// { + save_type = $0; + + gsub( ".*", "", save_type); + gsub( ".*", "", save_type); +} + +// { + location = $0; + + gsub( ".*", "", location); + gsub( ".*", "", location); +} + +// { + language = $0; + + gsub( ".*", "", language); + gsub( ".*", "", language); +} + +// { + crc = $0; + + gsub( ".*", "", crc); + gsub( ".*", "", crc); +} + +// { + id = $0; + + gsub( ".*", "", id); + gsub( ".*", "", id); +} + +/<\/game>/ { + tab[nb, "rn"] = rn; + tab[nb, "title"] = title; + tab[nb, "save_type"] = save_type; + tab[nb, "location"] = location; + tab[nb, "language"] = language; + tab[nb, "crc"] = crc; + tab[nb, "id"] = id; + + nb++; + printf( "Reading: %s...\r", id) > "/dev/stderr"; + + rn = ""; + id = ""; + title = ""; + save_type = ""; + crc = ""; +} + +END { + if( mode == "dsrom.lst") + { + printf( "%4d\n", tab[ (nb - 1), "id"]); + } + + for( i = 0; i < nb; i++) + { + reg = reg_tab[tab[i, "location"]]; + lang = ""; + + for( j = 0; j < 20; j++) + { + if( and( tab[i, "language"], ( 2 ^ j)) != 0) + { + if( lang != "") + { + lang = lang "-" + } + + lang = lang lang_tab[2 ^ j]; + } + } + + if( mode == "dsrom.dat") + { + printf( "%s;%s;%s;%s;%s;%s;%s\n", tab[i, "rn"], tab[i, "id"], tab[i, "title"], reg, lang, tab[i, "save_type"], tab[i, "crc"]); + } + else if( mode == "dsrom.lst") + { + if( tab[i, "id"] != "xxxx") + { + id = tab[i, "id"]; + printf( "Writing: %s...\r", id) > "/dev/stderr"; + cmd = "unzip -p /opt/public/nds/roms/"id"* | dd skip=12 count=4 bs=1 2>/dev/null"; + + cmd | getline fp; + close( cmd); + + printf( "%s %s-0 %s %s (%s) [%s] {%s}\n", id, fp, mask[tab[i, "save_type"]], tab[i, "title"], reg, lang, tab[i, "crc"]); + } + } + } +}