hash/softwarelist.dtd
| r8287 | r8288 | |
| 8 | 8 | <!ELEMENT description (#PCDATA)> |
| 9 | 9 | <!ELEMENT year (#PCDATA)> |
| 10 | 10 | <!ELEMENT publisher (#PCDATA)> |
| 11 | | <!ELEMENT part (dataarea*)> |
| 11 | <!ELEMENT part (feature*, dataarea*)> |
| 12 | 12 | <!ATTLIST part name CDATA #REQUIRED> |
| 13 | 13 | <!ATTLIST part interface CDATA #REQUIRED> |
| 14 | 14 | <!-- feature is used to store things like pcb-type, mapper type, etc. Specific values depend on the system. --> |
| 15 | | <!ATTLIST part feature CDATA #IMPLIED> |
| 15 | <!ELEMENT feature EMPTY> |
| 16 | <!ATTLIST feature name CDATA #REQUIRED> |
| 17 | <!ATTLIST feature value CDATA #IMPLIED> |
| 16 | 18 | <!ELEMENT dataarea (rom*)> |
| 17 | 19 | <!ATTLIST dataarea name CDATA #REQUIRED> |
| 18 | 20 | <!ATTLIST dataarea size CDATA #REQUIRED> |
| r8287 | r8288 | |
| 20 | 22 | <!ATTLIST dataarea endian (big|little) "little"> |
| 21 | 23 | <!ELEMENT rom EMPTY> |
| 22 | 24 | <!ATTLIST rom name CDATA #IMPLIED> |
| 23 | | <!ATTLIST rom size CDATA #REQUIRED> |
| 25 | <!ATTLIST rom size CDATA #IMPLIED> |
| 24 | 26 | <!ATTLIST rom crc CDATA #IMPLIED> |
| 25 | 27 | <!ATTLIST rom md5 CDATA #IMPLIED> |
| 26 | 28 | <!ATTLIST rom sha1 CDATA #IMPLIED> |
hash/aes.xml
| r8287 | r8288 | |
| 650 | 650 | <description>Fatal Fury 2 / Garou Densetsu 2 - arata-naru tatakai</description> |
| 651 | 651 | <year>1992</year> |
| 652 | 652 | <publisher>SNK</publisher> |
| 653 | | <part name="cart" interface="aes_cart" feature="fatfury2_prot"> |
| 653 | <part name="cart" interface="aes_cart"> |
| 654 | <feature name="crypt" value="fatfury2_prot" /> |
| 654 | 655 | <dataarea name="maincpu" size="1048576"> |
| 655 | 656 | <rom name="047-p1.bin" size="524288" crc="be40ea92" sha1="958b891bb8beb6af122d5467257ab20cbc6cf574" offset="000000" /> |
| 656 | 657 | <rom name="047-p2.bin" size="524288" crc="2a9beac5" sha1="61378f89d64fef4c172825694f83229c2ab1a7af" offset="080000" /> |
| r8287 | r8288 | |
| 1058 | 1059 | <description>The King of Fighters '99 - Millennium Battle</description> |
| 1059 | 1060 | <year>1999</year> |
| 1060 | 1061 | <publisher>SNK</publisher> |
| 1061 | | <part name="cart" interface="aes_cart" feature="kof99_crypt"> |
| 1062 | <part name="cart" interface="aes_cart"> |
| 1063 | <feature name="crypt" value="kof99_crypt" /> |
| 1062 | 1064 | <dataarea name="maincpu" size="9437184"> |
| 1063 | 1065 | <rom name="251-sma.kc" size="262144" crc="6c9d0647" sha1="2a0ce62ca6c18007e8fbe1b60475c7874ab79389" offset="0c0000" /> |
| 1064 | 1066 | <rom name="251-p1.bin" size="4194304" crc="006e4532" sha1="47791ab4044ad55988b1d3412d95b65b91a163c8" offset="100000" /> |
| r8287 | r8288 | |
| 1095 | 1097 | <description>Metal Slug 3</description> |
| 1096 | 1098 | <year>2000</year> |
| 1097 | 1099 | <publisher>SNK</publisher> |
| 1098 | | <part name="cart" interface="aes_cart" feature="mslug3_crypt"> |
| 1100 | <part name="cart" interface="aes_cart"> |
| 1101 | <feature name="crypt" value="mslug3_crypt" /> |
| 1099 | 1102 | <dataarea name="maincpu" size="5242880"> |
| 1100 | 1103 | <rom name="256-ph1.bin" size="1048576" crc="9c42ca85" sha1="7a8f77a89867b889295ae9b9dfd4ba28f02d234d" offset="000000" /> |
| 1101 | 1104 | <rom name="256-ph2.bin" size="4194304" crc="1f3d8ce8" sha1="08b05a8abfb86ec09a5e758d6273acf1489961f9" offset="100000" /> |
| r8287 | r8288 | |
| 1131 | 1134 | <description>The King of Fighters 2001</description> |
| 1132 | 1135 | <year>2001</year> |
| 1133 | 1136 | <publisher>Eolith / SNK</publisher> |
| 1134 | | <part name="cart" interface="aes_cart" feature="kof2001_crypt"> |
| 1137 | <part name="cart" interface="aes_cart"> |
| 1138 | <feature name="crypt" value="kof2001_crypt" /> |
| 1135 | 1139 | <dataarea name="maincpu" size="5242880"> |
| 1136 | 1140 | <rom name="262-pg1.bin" size="1048576" crc="2af7e741" sha1="e41282d73ed6d521da056f1a16573bb61bfa3826" offset="000000" /> |
| 1137 | 1141 | <rom name="262-pg2.bin" size="4194304" crc="91eea062" sha1="82bae42bbeedb9f3aa0c7c0b0a7a69be499cf98f" offset="100000" /> |
| r8287 | r8288 | |
| 1169 | 1173 | <description>Metal Slug 4</description> |
| 1170 | 1174 | <year>2002</year> |
| 1171 | 1175 | <publisher>Mega / Playmore</publisher> |
| 1172 | | <part name="cart" interface="aes_cart" feature="mslug4_crypt"> |
| 1176 | <part name="cart" interface="aes_cart"> |
| 1177 | <feature name="crypt" value="mslug4_crypt" /> |
| 1173 | 1178 | <dataarea name="maincpu" size="5242880"> |
| 1174 | 1179 | <rom name="263-ph1.bin" size="1048576" crc="c67f5c8d" sha1="12af74964843f103520d9f0825069ea2f67eeb2f" offset="000000" /> |
| 1175 | 1180 | <rom name="263-ph2.bin" size="4194304" crc="bc3ec89e" sha1="2cb0626bc4fa57e1d25f208e04532b570d87b3fb" offset="100000" /> |
| r8287 | r8288 | |
| 1203 | 1208 | <description>The King of Fighters 2002</description> |
| 1204 | 1209 | <year>2002</year> |
| 1205 | 1210 | <publisher>Eolith / Playmore</publisher> |
| 1206 | | <part name="cart" interface="aes_cart" feature="kof2002_crypt"> |
| 1211 | <part name="cart" interface="aes_cart"> |
| 1212 | <feature name="crypt" value="kof2002_crypt" /> |
| 1207 | 1213 | <dataarea name="maincpu" size="5242880"> |
| 1208 | 1214 | <rom name="265-p1.bin" size="1048576" crc="9ede7323" sha1="ad9d45498777fda9fa58e75781f48e09aee705a6" offset="000000" /> |
| 1209 | 1215 | <rom name="265-p2.bin" size="4194304" crc="327266b8" sha1="98f445cc0a94f8744d74bca71cb420277622b034" offset="100000" /> |
| r8287 | r8288 | |
| 1240 | 1246 | <description>Matrimelee / Shin Gouketsuji Ichizoku Toukon</description> |
| 1241 | 1247 | <year>2002</year> |
| 1242 | 1248 | <publisher>Noise Factory / Atlus</publisher> |
| 1243 | | <part name="cart" interface="aes_cart" feature="matrim_crypt"> |
| 1249 | <part name="cart" interface="aes_cart"> |
| 1250 | <feature name="crypt" value="matrim_crypt" /> |
| 1244 | 1251 | <dataarea name="maincpu" size="5242880"> |
| 1245 | 1252 | <rom name="266-p1.bin" size="1048576" crc="5d4c2dc7" sha1="8d723b0d28ec344eef26009b361a2b97d300dd51" offset="000000" /> |
| 1246 | 1253 | <rom name="266-p2.bin" size="4194304" crc="a14b1906" sha1="1daa14d73512f760ef569b06f9facb279437d1db" offset="100000" /> |
| r8287 | r8288 | |
| 1276 | 1283 | <description>Metal Slug 5</description> |
| 1277 | 1284 | <year>2003</year> |
| 1278 | 1285 | <publisher>SNK Playmore</publisher> |
| 1279 | | <part name="cart" interface="aes_cart" feature="mslug5_crypt"> |
| 1286 | <part name="cart" interface="aes_cart"> |
| 1287 | <feature name="crypt" value="mslug5_crypt" /> |
| 1280 | 1288 | <dataarea name="maincpu" size="8388608"> |
| 1281 | 1289 | <rom name="268-p1cr2.bin" size="4194304" crc="3636690a" sha1="e0da714b4bdc6efffe1250ded02ebddb3ab6d7b3" offset="000000" loadflag="load32_word" /> |
| 1282 | 1290 | <rom name="268-p2cr2.bin" size="4194304" crc="8dfc47a2" sha1="27d618cfbd0107a4d2a836797e967b39d2eb4851" offset="000002" loadflag="load32_word" /> |
| r8287 | r8288 | |
| 1312 | 1320 | <description>SNK vs CAPCOM SVC CHAOS</description> |
| 1313 | 1321 | <year>2003</year> |
| 1314 | 1322 | <publisher>SNK Playmore</publisher> |
| 1315 | | <part name="cart" interface="aes_cart" feature="svc_crypt"> |
| 1323 | <part name="cart" interface="aes_cart"> |
| 1324 | <feature name="crypt" value="svc_crypt" /> |
| 1316 | 1325 | <dataarea name="maincpu" size="8388608"> |
| 1317 | 1326 | <rom name="269-p1.bin" size="4194304" crc="38e2005e" sha1="1b902905916a30969282f1399a756e32ff069097" offset="000000" loadflag="load32_word" /> |
| 1318 | 1327 | <rom name="269-p2.bin" size="4194304" crc="6d13797c" sha1="3cb71a95cea6b006b44cac0f547df88aec0007b7" offset="000002" loadflag="load32_word" /> |
| r8287 | r8288 | |
| 1347 | 1356 | <description>Samurai Shodown V / Samurai Spirits Zero</description> |
| 1348 | 1357 | <year>2003</year> |
| 1349 | 1358 | <publisher>Yuki Enterprise / SNK Playmore</publisher> |
| 1350 | | <part name="cart" interface="aes_cart" feature="samsho5_crypt"> |
| 1359 | <part name="cart" interface="aes_cart"> |
| 1360 | <feature name="crypt" value="samsho5_crypt" /> |
| 1351 | 1361 | <dataarea name="maincpu" size="8388608"> |
| 1352 | 1362 | <rom name="270-p1c.bin" size="4194304" crc="bf956089" sha1="c538289069bf338b9fa7ecc5c9143763dbb776a8" offset="000000" /> |
| 1353 | 1363 | <rom name="270-p2c.bin" size="4194304" crc="943a6b1d" sha1="12bd02fc197456da6ee86f066086094cef0f4bf9" offset="400000" /> |
src/mess/devices/aescart.c
| r8287 | r8288 | |
| 407 | 407 | static void install_protection(running_device* image) |
| 408 | 408 | { |
| 409 | 409 | neogeo_state *state = (neogeo_state *)image->machine->driver_data; |
| 410 | const char *crypt_feature = image_get_feature( image, "crypt" ); |
| 410 | 411 | |
| 411 | | if(image_get_feature(image) == NULL) |
| 412 | if(crypt_feature == NULL) |
| 412 | 413 | return; |
| 413 | 414 | |
| 414 | | if(strcmp(image_get_feature(image),"fatfury2_prot") == 0) |
| 415 | if(strcmp(crypt_feature,"fatfury2_prot") == 0) |
| 415 | 416 | { |
| 416 | 417 | fatfury2_install_protection(image->machine); |
| 417 | 418 | logerror("Installed Fatal Fury 2 protection\n"); |
| 418 | 419 | } |
| 419 | | if(strcmp(image_get_feature(image),"kof99_crypt") == 0) |
| 420 | if(strcmp(crypt_feature,"kof99_crypt") == 0) |
| 420 | 421 | { |
| 421 | 422 | kof99_decrypt_68k(image->machine); |
| 422 | 423 | state->fixed_layer_bank_type = 1; |
| r8287 | r8288 | |
| 424 | 425 | kof99_install_protection(image->machine); |
| 425 | 426 | logerror("Decrypted KOF99 code and graphics.\n"); |
| 426 | 427 | } |
| 427 | | if(strcmp(image_get_feature(image),"mslug3_crypt") == 0) |
| 428 | if(strcmp(crypt_feature,"mslug3_crypt") == 0) |
| 428 | 429 | { |
| 429 | 430 | state->fixed_layer_bank_type = 1; |
| 430 | 431 | kof99_neogeo_gfx_decrypt(image->machine, 0xad); |
| 431 | 432 | logerror("Decrypted Metal Slug 3 graphics\n"); |
| 432 | 433 | } |
| 433 | | if(strcmp(image_get_feature(image),"matrim_crypt") == 0) |
| 434 | if(strcmp(crypt_feature,"matrim_crypt") == 0) |
| 434 | 435 | { |
| 435 | 436 | matrim_decrypt_68k(image->machine); |
| 436 | 437 | neo_pcm2_swap(image->machine, 1); |
| r8287 | r8288 | |
| 439 | 440 | kof2000_neogeo_gfx_decrypt(image->machine, 0x6a); |
| 440 | 441 | logerror("Decrypted Matrimelee code, sound and graphics\n"); |
| 441 | 442 | } |
| 442 | | if(strcmp(image_get_feature(image),"svc_crypt") == 0) |
| 443 | if(strcmp(crypt_feature,"svc_crypt") == 0) |
| 443 | 444 | { |
| 444 | 445 | svc_px_decrypt(image->machine); |
| 445 | 446 | neo_pcm2_swap(image->machine, 3); |
| r8287 | r8288 | |
| 449 | 450 | install_pvc_protection(image->machine); |
| 450 | 451 | logerror("Decrypted SvC code, sound and graphics.\n"); |
| 451 | 452 | } |
| 452 | | if(strcmp(image_get_feature(image),"samsho5_crypt") == 0) |
| 453 | if(strcmp(crypt_feature,"samsho5_crypt") == 0) |
| 453 | 454 | { |
| 454 | 455 | samsho5_decrypt_68k(image->machine); |
| 455 | 456 | neo_pcm2_swap(image->machine, 4); |
| r8287 | r8288 | |
| 458 | 459 | kof2000_neogeo_gfx_decrypt(image->machine, 0x0f); |
| 459 | 460 | logerror("Decrypted Samurai Shodown V code, sound and graphics.\n"); |
| 460 | 461 | } |
| 461 | | if(strcmp(image_get_feature(image),"kof2001_crypt") == 0) |
| 462 | if(strcmp(crypt_feature,"kof2001_crypt") == 0) |
| 462 | 463 | { |
| 463 | 464 | state->fixed_layer_bank_type = 1; |
| 464 | 465 | kof2000_neogeo_gfx_decrypt(image->machine, 0x1e); |
| 465 | 466 | neogeo_cmc50_m1_decrypt(image->machine); |
| 466 | 467 | logerror("Decrypted KOF2001 code and graphics.\n"); |
| 467 | 468 | } |
| 468 | | if(strcmp(image_get_feature(image),"kof2002_crypt") == 0) |
| 469 | if(strcmp(crypt_feature,"kof2002_crypt") == 0) |
| 469 | 470 | { |
| 470 | 471 | kof2002_decrypt_68k(image->machine); |
| 471 | 472 | neo_pcm2_swap(image->machine, 0); |
| r8287 | r8288 | |
| 473 | 474 | kof2000_neogeo_gfx_decrypt(image->machine, 0xec); |
| 474 | 475 | logerror("Decrypted KOF2002 code, sound and graphics.\n"); |
| 475 | 476 | } |
| 476 | | if(strcmp(image_get_feature(image),"mslug4_crypt") == 0) |
| 477 | if(strcmp(crypt_feature,"mslug4_crypt") == 0) |
| 477 | 478 | { |
| 478 | 479 | state->fixed_layer_bank_type = 1; /* USA violent content screen is wrong -- not a bug, confirmed on real hardware! */ |
| 479 | 480 | neogeo_cmc50_m1_decrypt(image->machine); |
| r8287 | r8288 | |
| 481 | 482 | neo_pcm2_snk_1999(image->machine, 8); |
| 482 | 483 | logerror("Decrypted Metal Slug 4 code, sound and graphics.\n"); |
| 483 | 484 | } |
| 484 | | if(strcmp(image_get_feature(image),"mslug5_crypt") == 0) |
| 485 | if(strcmp(crypt_feature,"mslug5_crypt") == 0) |
| 485 | 486 | { |
| 486 | 487 | mslug5_decrypt_68k(image->machine); |
| 487 | 488 | neo_pcm2_swap(image->machine, 2); |
src/mess/softlist.c
| r8287 | r8288 | |
| 247 | 247 | } |
| 248 | 248 | } |
| 249 | 249 | |
| 250 | /*------------------------------------------------- |
| 251 | add_feature |
| 252 | -------------------------------------------------*/ |
| 250 | 253 | |
| 254 | static void add_feature(software_list *swlist, char *feature_name, char *feature_value) |
| 255 | { |
| 256 | software_part *part = &swlist->softinfo->partdata[swlist->current_part_entry-1]; |
| 257 | feature_list *new_entry; |
| 258 | |
| 259 | /* First allocate the new entry */ |
| 260 | new_entry = (feature_list *)pool_malloc_lib(swlist->pool, sizeof(feature_list) ); |
| 261 | |
| 262 | if ( new_entry ) |
| 263 | { |
| 264 | new_entry->next = NULL; |
| 265 | new_entry->name = feature_name; |
| 266 | new_entry->value = feature_value ? feature_value : feature_name; |
| 267 | |
| 268 | /* Add new feature to end of feature list */ |
| 269 | if ( part->featurelist ) |
| 270 | { |
| 271 | feature_list *list = part->featurelist; |
| 272 | while ( list->next != NULL ) |
| 273 | { |
| 274 | list = list->next; |
| 275 | } |
| 276 | list->next = new_entry; |
| 277 | } |
| 278 | else |
| 279 | { |
| 280 | part->featurelist = new_entry; |
| 281 | } |
| 282 | } |
| 283 | else |
| 284 | { |
| 285 | /* Unable to allocate memory */ |
| 286 | } |
| 287 | } |
| 288 | |
| 251 | 289 | /*------------------------------------------------- |
| 252 | 290 | add_software_part |
| 253 | 291 | -------------------------------------------------*/ |
| 254 | 292 | |
| 255 | | static void add_software_part(software_list *swlist, const char *name, const char *interface, const char *feature) |
| 293 | static void add_software_part(software_list *swlist, const char *name, const char *interface) |
| 256 | 294 | { |
| 257 | 295 | software_part *part = &swlist->softinfo->partdata[swlist->current_part_entry]; |
| 258 | 296 | |
| 259 | 297 | part->name = name; |
| 260 | 298 | part->interface_ = interface; |
| 261 | | part->feature = feature; |
| 299 | part->featurelist = NULL; |
| 262 | 300 | part->romdata = NULL; |
| 263 | 301 | |
| 264 | 302 | swlist->current_part_entry += 1; |
| r8287 | r8288 | |
| 419 | 457 | { |
| 420 | 458 | const char *str_name = NULL; |
| 421 | 459 | const char *str_interface = NULL; |
| 422 | | const char *str_feature = NULL; |
| 423 | 460 | |
| 424 | 461 | for ( ; attributes[0]; attributes += 2 ) |
| 425 | 462 | { |
| r8287 | r8288 | |
| 428 | 465 | |
| 429 | 466 | if ( !strcmp( attributes[0], "interface" ) ) |
| 430 | 467 | str_interface = attributes[1]; |
| 431 | | |
| 432 | | if ( !strcmp( attributes[0], "feature" ) ) |
| 433 | | str_feature = attributes[1]; |
| 434 | 468 | } |
| 435 | 469 | |
| 436 | 470 | if ( str_name && str_interface ) |
| r8287 | r8288 | |
| 439 | 473 | { |
| 440 | 474 | char *name = (char *)pool_malloc_lib(swlist->pool, ( strlen( str_name ) + 1 ) * sizeof(char) ); |
| 441 | 475 | char *interface = (char *)pool_malloc_lib(swlist->pool, ( strlen( str_interface ) + 1 ) * sizeof(char) ); |
| 442 | | char *feature = NULL; |
| 443 | 476 | |
| 444 | 477 | if ( !name || !interface ) |
| 445 | 478 | return; |
| r8287 | r8288 | |
| 447 | 480 | strcpy( name, str_name ); |
| 448 | 481 | strcpy( interface, str_interface ); |
| 449 | 482 | |
| 450 | | if ( str_feature ) |
| 451 | | { |
| 452 | | feature = (char *)pool_malloc_lib(swlist->pool, ( strlen( str_feature ) + 1 ) * sizeof(char) ); |
| 453 | | if ( !feature ) |
| 454 | | return; |
| 455 | | strcpy( feature, str_feature ); |
| 456 | | } |
| 483 | add_software_part( swlist, name, interface ); |
| 457 | 484 | |
| 458 | | add_software_part( swlist, name, interface, feature ); |
| 459 | | |
| 460 | 485 | /* Allocate initial space to hold the rom information */ |
| 461 | 486 | swlist->rom_entries = 3; |
| 462 | 487 | swlist->current_rom_entry = 0; |
| r8287 | r8288 | |
| 512 | 537 | /* Missing dataarea name or size */ |
| 513 | 538 | } |
| 514 | 539 | } |
| 540 | else if ( !strcmp(tagname, "feature") ) |
| 541 | { |
| 542 | const char *str_feature_name = NULL; |
| 543 | const char *str_feature_value = NULL; |
| 544 | |
| 545 | for ( ; attributes[0]; attributes += 2 ) |
| 546 | { |
| 547 | if ( !strcmp( attributes[0], "name" ) ) |
| 548 | str_feature_name = attributes[1]; |
| 549 | |
| 550 | if ( !strcmp( attributes[0], "value" ) ) |
| 551 | str_feature_value = attributes[1]; |
| 552 | } |
| 553 | |
| 554 | /* Prepare for adding feature to feature list */ |
| 555 | if ( str_feature_name && swlist->softinfo ) |
| 556 | { |
| 557 | char *name = (char *)pool_malloc_lib(swlist->pool, ( strlen( str_feature_name ) + 1 ) * sizeof(char) ); |
| 558 | char *value = NULL; |
| 559 | |
| 560 | if ( !name ) |
| 561 | return; |
| 562 | |
| 563 | strcpy( name, str_feature_name ); |
| 564 | |
| 565 | if ( str_feature_value ) |
| 566 | { |
| 567 | value = (char *)pool_malloc_lib(swlist->pool, ( strlen( str_feature_value ) + 1 ) * sizeof(char) ); |
| 568 | |
| 569 | if ( !value ) |
| 570 | return; |
| 571 | |
| 572 | strcpy( value, str_feature_value ); |
| 573 | } |
| 574 | |
| 575 | add_feature( swlist, name, value ); |
| 576 | } |
| 577 | } |
| 515 | 578 | else |
| 516 | 579 | unknown_tag( &swlist->state, tagname ); |
| 517 | 580 | break; |
| r8287 | r8288 | |
| 639 | 702 | case POS_MAIN: |
| 640 | 703 | if ( swlist->softinfo ) |
| 641 | 704 | { |
| 642 | | add_software_part( swlist, NULL, NULL, NULL ); |
| 705 | add_software_part( swlist, NULL, NULL ); |
| 643 | 706 | } |
| 644 | 707 | break; |
| 645 | 708 | |
| r8287 | r8288 | |
| 1065 | 1128 | (*sw_part)->name = auto_strdup( device->machine, software_part_ptr->name ); |
| 1066 | 1129 | if ( software_part_ptr->interface_ ) |
| 1067 | 1130 | (*sw_part)->interface_ = auto_strdup( device->machine, software_part_ptr->interface_ ); |
| 1068 | | if ( software_part_ptr->feature ) |
| 1069 | | (*sw_part)->feature = auto_strdup( device->machine, software_part_ptr->feature ); |
| 1070 | 1131 | |
| 1132 | if ( software_part_ptr->featurelist ) |
| 1133 | { |
| 1134 | feature_list *list = software_part_ptr->featurelist; |
| 1135 | feature_list *new_list = auto_alloc_clear( device->machine, feature_list ); |
| 1136 | |
| 1137 | (*sw_part)->featurelist = new_list; |
| 1138 | |
| 1139 | new_list->name = auto_strdup( device->machine, list->name ); |
| 1140 | new_list->value = auto_strdup( device->machine, list->value ); |
| 1141 | |
| 1142 | list = list->next; |
| 1143 | |
| 1144 | while( list ) |
| 1145 | { |
| 1146 | new_list->next = auto_alloc_clear( device->machine, feature_list ); |
| 1147 | new_list = new_list->next; |
| 1148 | new_list->name = auto_strdup( device->machine, list->name ); |
| 1149 | new_list->value = auto_strdup( device->machine, list->value ); |
| 1150 | |
| 1151 | list = list->next; |
| 1152 | } |
| 1153 | |
| 1154 | new_list->next = NULL; |
| 1155 | } |
| 1156 | |
| 1071 | 1157 | /* Tell the world which part we actually loaded */ |
| 1072 | 1158 | *full_sw_name = auto_alloc_array( device->machine, char, strlen(swlist_name) + strlen(software_info_ptr->shortname) + strlen(software_part_ptr->name) + 3 ); |
| 1073 | 1159 | sprintf( *full_sw_name, "%s:%s:%s", swlist_name, software_info_ptr->shortname, software_part_ptr->name ); |