#!/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"]); } } } }