Windows 7 alternative?

hippy

Technical Support
Staff member
Apparently, wave32.ocx is not enough.
Thanks for the clarification. I got the same. Copied an 'MFC40.DLL' into 'system32', ran 'regsvr32' again and it worked, now PE5 runs without error. Whoot!

No joy with PE6 so far though. I copied the desktop link information of what gets run from the menu and tried running that in a Terminal and that gives me ...
Code:
$ env WINEPREFIX="/home/pi/.wine" wine C:\\windows\\command\\start.exe /Unix /home/pi/.wine/dosdevices/c:/users/pi/Start\ Menu/Programs/Revolution\ Education/PICAXE\ Editor\ 6/PICAXE\ Editor\ 6.lnk

0009:fixme:exec:SHELL_execute flags ignored: 0x00000100
0009:fixme:exec:SHELL_execute flags ignored: 0x00004100
Unhandled Exception:
System.InvalidProgramException: Invalid IL code in #e.#d:#b (string[]):
IL_0002: brtrue.s  IL_0009
That to me seems to indicate it's trying to run some kind of .Net code which it can't understand. 'brtrue.s' would, at a guess, be 'short branch if true', which sounds like something which should exist

Added : : Good guess - https://en.wikipedia.org/wiki/List_of_CIL_instructions

Not sure what's causing that; WINE, Mono, or something else. I get the same issue if I run the PicaxeEditor.exe rather than the .lnk file.
 

hippy

Technical Support
Staff member
One handy trick, and you can leave off the '.exe' extension if you want to ...

wine explorer.exe

This opens the familiar Windows File Explorer which lets you see what's actually there under the WINE 'Fake Windows' hierarchy. And best of all it allows you to double-click to run apps just as one normally would from Explorer. There's also a limited Control Panel with an ability to Add/Remove applications.

Still no closer to getting PE6 to work though :(
 

tmfkam

Senior Member
Again, going from the original tutorial...

Wave32.ocx is an activeX component. To use an activeX component, it needs registering within Windows, this is done using regsvr32. Wave32 seems to internally depend on a function or functions provided by mfc40.dll so if mfc40 cannot be found wave32 cannot be registered and PE5, which relies on wave32, gives an error.

Which goes to show that when programming, try to ensure you never rely on any external libraries. Welcome to Windows famous "Dll hell"!
 

PhilHornby

Senior Member
Wave32.ocx is an activeX component. To use an activeX component, it needs registering within Windows, this is done using regsvr32.
Actually, all that Regsvr32 does, is call the .OCX at its DLLRegisterServer interface, and the .OCX registers itself. This is normally not required, because programs that use .OCX files (certainly those written in Visual Basic 4/5/6) will call this interface themselves, the first time they are run.

One gotcha, however, is when an unregistered .OCX file is found somewhere down the Path, and that 'path' later disappears (such as a network or USB drive). If there is a danger of this happening, the .OCX can be copied somewhere 'safe' and Regsvr32 used to get it registered at that location. (Amongst the stuff that the DLLRegisterServer routine writes into the Registry, one item is actual location of the .OCX itself. Once registered, this information is always used and the .OCX is never searched for again. If this information becomes invalid, then so be it :( )
 

tmfkam

Senior Member
Actually, all that Regsvr32 does, is call the .OCX at its DLLRegisterServer interface, and the .OCX registers itself. This is normally not required, because programs that use .OCX files (certainly those written in Visual Basic 4/5/6) will call this interface themselves, the first time they are run.

One gotcha, however, is when an unregistered .OCX file is found somewhere down the Path, and that 'path' later disappears (such as a network or USB drive). If there is a danger of this happening, the .OCX can be copied somewhere 'safe' and Regsvr32 used to get it registered at that location. (Amongst the stuff that the DLLRegisterServer routine writes into the Registry, one item is actual location of the .OCX itself. Once registered, this information is always used and the .OCX is never searched for again. If this information becomes invalid, then so be it :( )
When I was writing programs for Windows using Delphi, to install the .ocx the program required I always had to install it (and it's dependencies) with regsvr32. Just loading it from my main executable was never enough? Still, that was some time ago now, perhaps I could have called them in the correct sequence, in the correct manner and have them self register?
 

hippy

Technical Support
Staff member
When I was writing programs for Windows using Delphi, to install the .ocx the program required I always had to install it (and it's dependencies) with regsvr32.
I recall a lot of languages just reference OCX and DLL files and assume they will be there, Windows would abort them with 'Cannot find" if they weren't when run.

I suspect it may be that the setup program installs the files needed then registers them and it could be, if it can't, it silently ignores such failures. That could be the case here because it could not register wave32.ocx because mfc40.dll did not exist. Most setup programs only install what they need, ie wave32.ocx, and likely won't have an mfc40.dll if that is assumed to be a core file already installed by Windows.

I don't think it's worth worrying over what should happen or does happen; it's more a case of how to fix things as needed. That's where I was/am floundering because I am not familiar with WINE or how it works.

Indeed. I did so in post 76:

Here's the link to the tutorial I originally used: https://picaxeforum.co.uk/threads/successfully-running-pe5-under-linux-wine.29702/
Thanks. I had read that but thought you meant something else, some step-by-step, 'what to type', guide.
 

kfjl

Member
One handy trick, and you can leave off the '.exe' extension if you want to ...

wine explorer.exe

This opens the familiar Windows File Explorer which lets you see what's actually there under the WINE 'Fake Windows' hierarchy. And best of all it allows you to double-click to run apps just as one normally would from Explorer. There's also a limited Control Panel with an ability to Add/Remove applications.
That's exciting.

When I do that in Linux, it seems so ordinary.

Code:
[kl@PB PICAXE Editor]$ logsave mylog wine PicaxeEditor.exe
0009:err:module:load_so_dll failed to load .so lib "/usr/bin/../lib32/wine/l3codeca.acm.so": libmpg123.so.0: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type

Unhandled Exception:
System.InvalidProgramException: Invalid IL code in #e.#d:#b (string[]): IL_0002: brtrue.s  IL_0009


[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidProgramException: Invalid IL code in #e.#d:#b (string[]): IL_0002: brtrue.s  IL_0009


wine exited with status code 1
[kl@PB PICAXE Editor]$
This is a daft thing to be stopped by: "/usr/bin/../lib32/wine/l3codeca.acm.so".

What's in /../ ?

I tried writing the output to a log, but the log used the same "/../" notation. So where is PE6 trying to load l3codeca.acm.so from? If I knew I could create the path and put the file where PE6 is expecting to find it.
 

kfjl

Member
Here's a screenshot of my /usr/bin folder. There are no sub-folders under what you can see.

Above-right you can see I have the necessary files. I just don't know where PE6 looks for them.

Below-right I searched for (L3)codeca.acm.so and (thirteen)codeca.acm.so in my /usr/bin folder in case I'd mistaken an "l" for a "1". Then I looked for a file I knew was there (yapp in /usr/bin/vendor_perl) just to be sure I was using the right syntax.

This is Archlinux so things are rarely where you would expect them to be if you're used to, say, Debian (like me).

This is a dumb thing to get stuck on.
 

Attachments

PhilHornby

Senior Member
perhaps I could have called them in the correct sequence, in the correct manner and have them self register?
Maybe Borland didn't insert the extra code into Delphi, to go find them if the first instantiation failed. I wish Microsoft hadn't bothered, because it sometimes created some odd side effects :confused:
 

PhilHornby

Senior Member
I suspect it may be that the setup program installs the files needed then registers them and it could be, if it can't, it silently ignores such failures. That could be the case here because it could not register wave32.ocx because mfc40.dll did not exist. Most setup programs only install what they need, ie wave32.ocx, and likely won't have an mfc40.dll if that is assumed to be a core file already installed by Windows.
The file that is actually missing, would seem to be Wave32.dep ...
microsoft said:
"When you distribute an ActiveX control with your run-time application, include
the .ocx file for the ActiveX control and any .dll or other supporting files
needed by the control.

To make this easier, the Setup Wizard supports the use of dependency (.dep)
files. The .dep file for an ActiveX control contains information specifying the

files that are required to use the control"
 

inglewoodpete

Senior Member
All of this to-and-fro explains to me why I surrender and use Windows 10 😕 . It's one thing to know how to use a tool but this is an example of the tool taking centre stage. I hope that the many hours everyone is putting in are worth it! Perhaps someone could write a reliable process document for Rev Ed's website once it has been sorted out, so that future users can focus on using the tool rather than the science of installing it.
 

kfjl

Member
All of this to-and-fro explains to me why I surrender and use Windows 10 😕 . It's one thing to know how to use a tool but this is an example of the tool taking centre stage. I hope that the many hours everyone is putting in are worth it! Perhaps someone could write a reliable process document for Rev Ed's website once it has been sorted out, so that future users can focus on using the tool rather than the science of installing it.
The tool here is WINE not linux, and none of us has much of a clue how to use it.

LinAXEpad is lighter, faster, and easier on the eyes than PE5.

All of this to-and-fro is the price of whistles and bells.

I tried the simulator in PE5 with a led-blinking program. The pin C.2 on the simulator blinked at the same time as the led on my breadboard.

You can't stop progress...
 

hippy

Technical Support
Staff member
This is a daft thing to be stopped by: "/usr/bin/../lib32/wine/l3codeca.acm.so".
The '..' means 'go up a directory' so it appears to be looking for -

"/usr/lib32/wine/l3codeca.acm.so".

On my Debian I don't have a /usr/lib32 directory, but don't get that "failed to load so lib" error, it goes straight to "Invalid IL code in #e.#d:#b".

My guess would be that "l3codeca.acm.so" isn't actually required as it continues anyway, is similar to the pre-load error one gets on a Pi when running the X86 Linux command line compilers.

I did find a post which suggests it's part of mp3 support, likely a codec given its name, and "l3" may be "Lame 3" which would make sense. I guess WINE is trying to load it just in case it needs it. I tried to find it on my Debian system but couldn't, so it may be there but not yet located.

There is a "\Windows\System32\l3codeca.acm" on my Windows XP so I guess the "l3codeca.acm.so" is just Linux's equivalent, part of WINE.

That "lib32" suggests to me it's something to do with 32-bit. One thing I did do is "sudo dpkg --add-architecture i386" before installing WINE. Not sure if that's why I am not seeing the same error.

The file that is actually missing, would seem to be Wave32.dep
Could be but I suspect not. That doesn't exist on my Windows PC so I don't know where we would get that from if needed.

I guess it may have solved having to manually install 'mfc40.dll' but I don't think it should matter too much with it being missing now we have got 'wave32.ocx' registered manually - It's PE5 which needs that and that now runs okay.

Perhaps someone could write a reliable process document for Rev Ed's website once it has been sorted out
I am sure we will once we have it figured out - If we ever do !

Though how "reliable" that would be is difficult to say given Linux comes in so many flavours and what works on one doesn't necessarily work on another. That's one of the reasons there can be reluctance to support Linux. On top of that, because there's no commitment to backwards compatibility in the Linux world, it can be like documenting shifting sand; today's solution may not work tomorrow.
 

kfjl

Member
The '..' means 'go up a directory' so it appears to be looking for -

"/usr/lib32/wine/l3codeca.acm.so".
I very much doubt that.

"/usr/bin/../lib32/wine/l3codeca.acm.so"

for me means the full path is too long to write, otherwise why not just write:

"/usr/lib32/wine/l3codeca.acm.so"?

Where are "l3codeca.acm.so" and "libmpg123.so.0" on your debian partition? I'd like to put mine in the same place to see if that gets rid of the error message.

For those who think getting PE5 to work was complicated (and linux with it), take a look back through the posts of this thread.

You can count the number of commands we had to write in the linux terminal on the fingers of one hand.

Even if you work in a sawmill.
 

hippy

Technical Support
Staff member
The '..' means 'go up a directory' so it appears to be looking for -

"/usr/lib32/wine/l3codeca.acm.so".
I very much doubt that.

"/usr/bin/../lib32/wine/l3codeca.acm.so"

for me means the full path is too long to write, otherwise why not just write:

"/usr/lib32/wine/l3codeca.acm.so"?
The reason usually comes down to how the paths and filenames are concatenated within the program throwing the error. It's common to take a fully qualified root path and simply append a relative file path to that, not worrying about relativeness; the OS will sort that out.

When something is missing, because something is too long when shown, that's usually done using three or more dots because single ./ and double ../ do have very specific meanings.

Also, it's not common to do that in error messages. It makes identifying a file impossible when that's done. And it doesn't seem long enough to have required shortening any way.

Where are "l3codeca.acm.so" and "libmpg123.so.0" on your debian partition? I'd like to put mine in the same place to see if that gets rid of the error message.
/opt/wine-stable/lib/wine/l3codeca.acm.so
/usr/lib/i386-linux-gnu/libmpg123.so.0.44.8
/usr/lib/i386-linux-gnu/libmpg123.so.0

"libmpg123.so.0" is a symlink to "libmpg123.so.0.44.8"
 

Captain Haddock

Senior Member
Just a quick nip back to windows updates, I updated a win 8.1 pro machine to win 10 friday and it still activated on the same licence free of charge with no problems, I did it to a cloned hdd to keep my original setup working.
 

erco

Senior Member
Good to hear that upgrade is still free in the post-Win7 support era. I've been trying to help my non-tech sister into upgrading her desktop, but no joy. Her Win7 HP crashed and hasn't been usable for some time. She's 3000 miles away, that's not helping. I sent her a USB drive with Win10 v1909 plus my Win7 installation DVD to run startup repair but that didn't work. We could do a clean Win10 install, but that might require her to buy a license. Also, I'm trying to preserve the existing photos on her HDD. Still looking for a solution that she can handle. Removing her HDD and mailing to me would work, but that ain't in her skillset!
 

kfjl

Member

Universal-USB-Installer-1.9.9.0.exe – December 4, 2019 (note the ".exe")

These are usefull for recovering data from disks that will no longer boot.

You can then re-install Windows and wait for it to happen again.
 

erco

Senior Member
Thanks kfjl, I will check that out!

LOL, "re-install Windows for it to happen again".
 

bogbean

Well-known member
Unfortunately it is not as simple as it sounds, and is even more complicated for a Raspberry Pi which is ARM-based, rather than X86.

The main problem with porting any Windows code is that it usually relies on Windows and third-party components to do some pretty big things. And if those aren't available for Linux one has to drop those and lose the functionality they provide, or recreate the same functionality oneself, and that is not usually a realistic proposition for most.

One therefore has to head towards the lowest common denominator and, once that's done, one ends up with a stripped-down version of what it was. Which for PE6 is pretty much LinAXEpad.

The PICAXE X86 Linux compilers do run on Raspberry Pi thanks to 'fanoush' figuring out how to achieve that, and they can be used with VS Code, though that isn't entirely without issue.

That open source code like VS Code, which is intended to work on everything, doesn't always work, even with Microsoft and a huge development team behind it, illustrates just how difficult porting can be. One can imagine how much more difficult it can be to get something never intended to work to do so.

It might be possible to get LinAXEpad running on a Raspberry Pi but I have never figured out how to. It needs people who have the knowledge and experience to figure that out and those who could help appear reluctant to do so when Microsoft, Windows, X86 or closed-source is involved. Some in the Pi community are ideologically hostile to the very notion of anything which doesn't fit their view of how things should be and will even actively discourage giving such assistance.
Sorry to take this thread off topic but I have been trying (and failing) to run LinAXEpad on a Raspberry Pi 4 running the 64 bit bullseye OS, which I believe is Debian 11 and I wondered if anybody can help? I am a linux noob.

I have seen previous solutions for running 32 bit applications on a 64 bit linux that rely on installing an ia32 datapackage. I think that approach has been replaced with linux multiarch support but I've been unable getting that to work. tring to run LinAXEpad returns the following:
Code:
pi@raspberrypi:~/Documents/picaxe/linaxepad $ ./LinAXEpad
bash: ./LinAXEpad: No such file or directory
I've also followed the instructions on this site to build and attempt to run 32 bit i386 applications with box86: https://pimylifeup.com/raspberry-pi-x86/
I am able to run the teamspeak server 32 bit i386 application that is the example on that site. But attempting to run LinAXEpad using box86 gives the following error:
Code:
pi@raspberrypi:~/Documents/picaxe/linaxepad $ box86 ./LinAXEpad
Box86 with Dynarec v0.2.5 41201cbb built on Mar  2 2022 21:10:23
Error initializing native libgtk-x11-2.0.so.0 (last dlerror is libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory)
Error: loading needed libs in elf ./LinAXEpad
the libgtk-x11-2.0.so.0 library is present:
Code:
pi@raspberrypi:~/Documents/picaxe/linaxepad $ dpkg -S libgtk-x11-2.0.so.0
libgtk2.0-0:arm64: /usr/lib/aarch64-linux-gnu/libgtk-x11-2.0.so.0
libgtk2.0-0:arm64: /usr/lib/aarch64-linux-gnu/libgtk-x11-2.0.so.0.2400.33
so I'm a bit stumped there and wondered if anybody could help or if it would be worth not spending more time on it and just stick to coding in a text editor and uploading programmes separately using the command line compilers.
 

hippy

Technical Support
Staff member
I'm a bit stumped there and wondered if anybody could help or if it would be worth not spending more time on it and just stick to coding in a text editor and uploading programmes separately using the command line compilers.
I don't believe even experienced Linux users have managed to get LinAXEpad to run on a Pi so it is probably not worth spending more time on that at present.

If text editors and command line compilers are not your thing; we do support PICAXE development using VS Code on Linux and that includes the Pi -


That was working under 32-bit Raspberry Pi OS, Stretch and Buster, and should also work with 64-Bit Bullseye.

We have a separate forum for LinAXEpad and compiler support -


Where you are welcome to post threads related to getting the PICAXE compilers working with Pi or other ARM platforms.

The following thread may prove useful in getting the command line compilers to work with 64-bit -

 

bogbean

Well-known member
I don't believe even experienced Linux users have managed to get LinAXEpad to run on a Pi so it is probably not worth spending more time on that at present.
Thanks hippy, that's really helpful to know and will stop me wasting hours going round in circles.
I'm not averse to using a text editor and the compilers. Actually my RPi os comes with geany already installed and that does quite a nice job of applying an intelligent presentation style to the code. Thanks for pointing out the VS Code option and separate forum.
 
Top