After installing Mame 0.217, all qmc2 software lists are empty "no data available". If I reinstall 0.216, all is well. I've got to wonder if this might be the cause:
• Enhanced -listxml, -listsoftware, -getsoflist and -romident to support software lists enabled by slot card devices. [Vas Crabb]
Perhaps one of the changes confounds qmc2's lexer?
Anyway, before I report this as a qmc2 bug, I was wondering if anyone else has the same problem.
I can confirm that the software lists are gone. Since Rene has been recovering, it may be a while before a fix. Anyone know of a good alternative that uses the official Mame binary?
A-Noid
Thanks for the confirmation, A-Noid.
No, to your question.
Yes, unfortunatelly softwarelists support are gone
Anyway, QMC2 is a open source project.
Couldn't someone create a project fork to make minor updates to at least maintain QMC2 support with the latest versions of MAME while René recovers?
There already was a fork, Belegdol's fixes we recently discussed constitute such a fork. Not sure if it has a Github presence though.
I'd be very interested in any forks of 0.195. That version was quite stable, and nearly bug free, until MAME 0.216 started breaking things.
Just to clarify, there is (unfortunately) no fork of mine. I do have write access to upstream svn and I pushed some experimental minizip changes by accident. The fix was to revert the change done.
Thanks for the clarification, belegdol.
Now if you should ever become truly bored...
I have commit access to mainline qmc2 as well, I just don’t have time to take on maintenance of it alongside MAME.
I added exactly one attribute to the -listxml output that's necessary for a front-end to properly deal with slot cards that enable software lists (e.g. Acorn "tube" devices, Spectrum DOS expansions, WafaDrive, etc.), and provided a reference implementation for showing available software lists for a given slot configuration, and discovering a suitable configuration to run a given piece of software. It's very rare that I change the -listxml at all, and I try to avoid changing existing parts because it can break front-ends. Unfortunately qmc2 seems to be upset by the unrecognised attribute I added.
If you want to keep using qmc2, you need to update or keep using an old version of MAME with it. If you don't update it, you'll still be missing out on support for software lists enabled by slot cards. Prior to 0.217, MAME was not providing the necessary information, and using it effectively will require UI work.
I'm sure you strive not to break the front ends. And I understand this is sometimes impossible.
We should be grateful that that QMC2 worked so well, for 21 months, without support.
Thank you for the infos. And as always, respect for the mamedev team!
The problem was introduced by a commit by AJR. In infoxml.cpp on line 1954 tag is output before name for the software list entry:
out << util::string_format("\t\t<softwarelist tag=\"%s\" name=\"%s\" status=\"%s\"", normalize_string(newtag.c_str()), normalize_string(swlist.list_name().c_str()), swlist.is_original() ? "original" : "compatible");
This order is also not consistent with the DTD:
<!ELEMENT softwarelist EMPTY>
<!ATTLIST softwarelist name CDATA #REQUIRED>
<!ATTLIST softwarelist tag CDATA #REQUIRED>
<!ATTLIST softwarelist status (original|compatible) #REQUIRED>
<!ATTLIST softwarelist filter CDATA #IMPLIED>
qmc2 relies on name being the first attribute after softwarelist.
Exchanging the order fixes the issue. I will commit the fix shortly.
That's great, couriersud!
Yes, fantastic! A HUGE thanks!
(and apologies to Vas Crabb

)
That's absurd - attributes are order-insensitive. Any compliant DTD validator (e.g. xmllint) accepts the XML as-is. If you're going to change it though, flip the order in the DTD around. The tag is the identifier.
Vas, academically your are right. Your recent commit is academically right. Everything is right now. Understood.
Unfortunately your latest commit again kills QMC2 software lists again.
Rene can't fix it. I don't have access to the sourceforge repository. I don't have time for such academic topics as well.
Please, you have access to the QMC2 repository. Please fix it if for academic purposes you break it again.
That's absurd - attributes are order-insensitive. Any compliant DTD validator (e.g. xmllint) accepts the XML as-is. If you're going to change it though, flip the order in the DTD around. The tag is the identifier.
There is also no harm done or technical debt incurred to MAME or the XML standard to output things in the order QMC2 expects.
Fuck me, this code is terrible. It isn't even an XML parser, it’s doing string matching for specific tags. It's so fragile it’s ridiculous.
OK, after looking at this, it's sensitive to any re-ordering of XML attributes, and it’s making assumptions about where line breaks will or won’t occur in the XML. It’s just too damn fragile. The database schema is totally screwed, too. It’s not actually doing a proper object-relational mapping on anything, it’s just storing fragments of XML in the database. It has three redundant indices on tables. When it wants to actually display a machine in the UI, it does a bunch of string manipulations on the XML to extract the information it wants. It still hasn’t been updated to deal with imperfect/unemulated features on slot cards. It’s still looking for long-removed attributes on the “driver” element that were replaced by feature flags.
Hell, it’s not even dealing with XML character entities properly. Here’s the code it uses for XML character entities, which it only applies to the text content of the “manufacturer” element:
content.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'");
Not only does it assume that only a very small subset of XML character entities will ever be used, it assumes they’ll only ever be used in the “manufacturer” element.
Now I can try to improve it. I can try to port it to use an actual XML parser, and rework the database schema to something kind of like a normalised form. But this will take me ages, and take time I’d rather spend actually improving MAME. Pandering to it by putting the “name” attribute first doesn’t actually solve anything – that will cause it not to see the (almost useless and poorly named) “status” attribute instead.
It really needs a re-write to parse the file as XML rather than some imaginary fixed structure. This is the very definition of technical debt. It’s heavily relying on implementation details of how the XML is/was generated rather than parsing it as XML and working with the schema.
I
worked around this particular issue, but if you want qmc2 to keep working, someone really needs to make it use a real XML parser, and a real relational database schema. The current situation is beyond awful.
I
worked around this particular issue, but if you want qmc2 to keep working, someone really needs to make it use a real XML parser, and a real relational database schema. The current situation is beyond awful.
Thanks a lot, very much appreciated.
I agree that the current code situation is not optimal at all. But with the current resource-limited situation at least one of the more popular front-ends now is working again.
I have a proposal: We already have > 20 repos on github. Adding qmc2 as another one would really ease the workflow (fork, pull request) in comparison to sourceforge.
The sole intention is to keep qmc2 alive until Rene recovered and can take it over again. As a community we should be able to achieve that.
Well, I could also migrate it to git on SourceForge. If we think there’s any chance of external contributions, git vs svn is far more of a differentiating factor than GitHub vs SourceForge. But we don’t have people knocking on the door with contributions, whether they be updates, fixes or improvements. MAME already had plenty of people wanting/trying to contribute before it was moved to GitHub. Sure, pull requests on GitHub are simpler and more transparent, but the stream of external contributions was already there. I don’t see it materialising for qmc2 just by migrating it to git.
Also, I don’t have particularly high hopes for René devoting more time to qmc2 after his recovery. Even before his stroke, he’d been spending less time on it because of the other things going on in his life. As sad as it may be, qmc2 is going to suffer the same fate as any other piece of software that never moves beyond being a personal labour of love – they inevitably stagnate and die when the author loses interest or moves on.
Wow, I had no idea it was reading XML brute-force. There are a number of XML parsers that are a lot less hassle to use than doing that. Thanks Vas!
Yes - much thanks, to all involved! Now, the Windows folks just have to learn how to compile it. I hope the Ultimate Guide is up to date...
Since you guys are looking into QMC2, would it be possible to fix the removed artwork parameters as well?
I am not taking over maintenance of qmc2. I have enough going on in real life and a big enough MAME to-do list that it isn’t going to happen. FWIW I dislike qmc2 as a front-end. It’s very cluttered, it shoves all sorts of things into a tree view when they’d be better presented as information pages, on Mac it has widgets that look native but don’t behave the same way as native controls. After looking at the core code, it’s deep in technical debt, and needs a serious rework of its data layer. You’d likely be better off taking the data layer from minimaws (which covers 99% of what a front-end like qmc2 uses) and building something on top of that.
I came from the olden days of "Mame32" on Win95/98 and QMC2 just seemed like the last good Linux frontend that followed that type of look/feel and windowed style desktop program with all the info and extras just a few clicks away. For awhile there was a frontend called MAME+GUI or MAMEPGUI that worked well in Linux and also had the Mame32 look and feel. It stopped being maintained about 8-9 years ago. What are the other Linux users out there using nowadays?
These days I just use MAME from the command line. Well, these days I don’t actually use MAME because the layout of the modifiers on a PC-style keyboard (as opposed to a Mac) is annoying, and the keyboard controller locks out combinations of more than two letter keys from different rows. I only develop/test MAME.
I suppose that only paid frontends are good enough for Windows MAME nowadays, such as GameEX or LaunchBox. Has anyone here tested them?
Negatron is probably the closest front-end in spirit to qmc2. It's cross-platform and free, too.
Ironically given what we were just discussing, Negatron doesn't work with stock MAME -listxml. It needs a patched MAME.
Negatron does work with stock MAME - only mounting loose media on drives from slot cards requires patched MAME. But that doesn't work properly in qmc2 either since Bletch changed how listxml works in 2016 or whenever it was, and fixing it properly so it can be done with static data requires completely ripping out and replacing the options system yet again.
I tried to use Negatron but it supports computers/consoles only and NegaMAME supports arcade games only. The developer said to me that he wants to merge NegaMAME into Negatron in a near future but until that happens, I'm looking for another alternative.
Tested both Launchbox and GameEX and GameEX is pure crap!! For a paid frontend, I was hoping to see a more decent piece of software, but instead it is a very heavy mess and it freezed my machine before I was able to start using it... garbage!!
On the other hand, Launchbox has a more decent interface but I need to test it further to see if it does everything I need.
I am not taking over maintenance of qmc2. I have enough going on in real life and a big enough MAME to-do list that it isn’t going to happen. FWIW I dislike qmc2 as a front-end. It’s very cluttered, it shoves all sorts of things into a tree view when they’d be better presented as information pages, on Mac it has widgets that look native but don’t behave the same way as native controls. After looking at the core code, it’s deep in technical debt, and needs a serious rework of its data layer. You’d likely be better off taking the data layer from minimaws (which covers 99% of what a front-end like qmc2 uses) and building something on top of that.
I wasn't suggesting that you do the builds. One of the users should be able to handle that. You've already gone past the line of duty!
I suppose I'm so fond of QMC2 because it seems like a natural evolution of the mameui and messui, I used 15 years ago.
You might want to blame QT for you look/feel issues.
Thanks for the info on minimaws. I'll try and take a look at it.
Another problem I have with Negatron is that while the author says its operation is intuitive, I must judge that our intuition is somewhat different, as I find I need to refer to the documentation, quite often, to do even the simplest things. Setup is a breeze, though, compared to QMC2! It's plug-n-go.
Another problem I have with Negatron is that while the author says its operation is intuitive, I must judge that our intuition is somewhat different, as I find I need to refer to the documentation, quite often, to do even the simplest things. Setup is a breeze, though, compared to QMC2! It's plug-n-go.
I agree with you, Negatron is NOT intuitive at all!! That's the point that led me to stop using it really quick. QMC2 and LaunchBox on the other hand are quite intuitive, as soon as you get used to some specific behaviors on each one of them.
At this moment I'm trying to use LaunchBox and I'm enjoying it, despite the fact that you have to use commandline parameters manually to every single game you have in your collection. This is kind of annoying but fortunatelly, I don't have many games/systems in my collection. However, if you have a huge amount of games/systems, you will find LaunchBox very painful to configure.
I have the rebuilt "fixed" qmc2-mame executables (x86 and x64). Anyone have a place to host them? The x64 zip or rar, with best compression, is over the 5mb limit of the qmc2 bug tracker.
Just upload the complete packages to zippyshare, mega or some other filesharing site. For longevity and as an alternate, I can copy them from there onto my site, and they will be available to anyone.
It will be up to you though to compile and make available new versions as needed.
Much thanks. I have posted links, in a new thread, for folks who might be disinclined to read 40 posts, to find a link. The files are on google drive. The links show red, but they do seem to work, without login.
No complete package. I only built qmc2-mame, and did not attempt to recreate the installer.
And this is a one off. I am not taking over support of Windows versions. Or do you simply mean you are not, either?
I'm happy to "host" anything emulation-related, especially if it's Mame-related. But I won't be supporting anything more than I am now.
If things change and a new version becomes necessary, then someone who knows what to do will have to fix it and point me at it.
I will make these new qmc2 downloads available shortly, and add a link to this forum.
EDIT: done.