dosemu2 / comcom64

64bit command.com
https://github.com/dosemu2/comcom32/
GNU General Public License v3.0
32 stars 5 forks source link

WPDOS cannot find command.com #37

Closed emendelson closed 4 years ago

emendelson commented 4 years ago

Describe the bug In WordPerfect for DOS (5.1 or 6.2), the Go to DOS and DOS Command features cannot find COMMAND.COM and therefore don't function. This is with default settings; COMSPEC is defined in the environment as G:\COMMAND.COM (which exists).

To Reproduce Run any version of WPDOS. Use Ctrl-F1, Go to DOS. The window goes blank for a moment, then returns. To see exactly what the problem is, use Ctrl-F1, DOS Command, and enter "pause" or "dir" or any other command; WP 6.2 returns a message "Can't find COMMAND.COM"; WP 5.1 displays the "Press any key to continue" message but doesn't run the command.

stsp commented 4 years ago

Maybe it doesn't look into COMSPEC? Try copying command.com to C:

emendelson commented 4 years ago

That was the first thing I tried. It had no effect. I also tried copying command.com to c: and changing the COMSPEC variable; also no luck.

I used to have a 32-bit Windows system that booted from Drive F: and WPDOS had no trouble finding command.com there.

This was not a problem in original DOSEMU, because I wrote some WP macros that used the DOS command feature to run a "unix" command that launched a shell script. I was trying out those macros and came across this issue.

andrewbird commented 4 years ago

I think you need to run dosemu with the -D+d debug flag and collect the boot.log, as that way you will be able to search the log for command.com and deduce where it's looking for it.

emendelson commented 4 years ago

I moved my .dosemurc, and started dosemu with the default configuration. I ran these commands: CD WP51 WP and then Ctrl-F1, Go to DOS (brief blink in the window), then Ctrl-F1, DOS Command, VER {Enter), again no result.

Here is the boot.log:

boot.log

I'm afraid it doesn't tell me anything. I can't see anything about command.com after WP loads, but probably I'm not looking for the right things.

andrewbird commented 4 years ago

I'm afraid it doesn't tell me anything. I can't see anything about command.com after WP loads,

Me neither!

Can you try using FreeDOS's command.com instead?

emendelson commented 4 years ago

Works perfectly with FreeDOS's command.com, version 0.84-pre2. I copied it to drive_c, started the emulator, entered SET COMSPEC=C:\COMMAND.COM and WP shelled to DOS correctly.

EDIT: And it works correctly without the SET COMSPEC command. dosemu seems to find the C:\COMMAND.COM and uses it automatically as the command processor. (You knew that, of course; I didn't.)

stsp commented 4 years ago

Yes, we knew that, but you didn't ask. :) I think it will even set COMSPEC to C in that case, so it will still be correct. What is very strange though, is that it depends on command.com itself. What if, for example, you replace comcom32 with freecom on drive G rather than on C? By copying it to /usr/share/comcom32/command.com, and removing it from C. Will it agree to run freecom even from G?

emendelson commented 4 years ago

Works perfectly, following the procedure you described.

I'm testing now with default settings, so comcom32 and command.com are in F:. I renamed the command.com (which I see is a link to comcom32.exe) in /usr/share/comcom32 and copied the FreeDOS command.com into the same folder. I renamed command.com in ~/.dosemu/drive_c. When I started dosemu, The SET command produces COMSPEC=F:\COMMAND.COM

When I ran WPDOS 5.1 and 6.2, both were able to shell to DOS and run DOS commands as they should.

Does this help in sorting out why comcom32.exe doesn't work with WPDOS?

stsp commented 4 years ago

Does this help in sorting out why comcom32.exe doesn't work with WPDOS?

Its not like it doesn't work. Its more like WP doesn't even try to run it, as we don't see it does, in the log.

emendelson commented 4 years ago

Here's a log, for what it's worth (which may be nothing).

boot.log

stsp commented 4 years ago

And for me DOS shell works perfectly in WP 6.2:

Type 'EXIT' to return to program
C:\WP62>ver /r
comcom32 v0.1
 Source Control Revision ID: alpha-1-64-g4657294

Reported DOS version (Int21.3000): 5.00 OEM: FDh
Reported true DOS version (Int21.3306): 7.10
Version string (Int21.33FF): FDPP kernel 1.0rc2 [GIT: ] (compiled May 10 2020)
Type 'EXIT' to return to program
C:\WP62>set
USERDRV=C
SHELLDRV=L
DOSEMUDRV=J
FDPP_AUTOEXEC=J:\FDPPAUTO.BAT
FREEDOSDRV=M
COMSPEC=L:\COMMAND.COM
PATH=J:\dosemu;L:\;M:\bin;M:\gnu;
TEMP=C:\tmp
PROMPT=Type 'EXIT' to return to program$_$P$G
BLASTER=A220 I5 D1 H5 P330 T6
MIDI=SYNTH:2 MAP:E MODE:0
ERRORLEVEL=0
DOSEMU_VERSION=2.0pre8-20200512-1848-gc3c71a6b8
Type 'EXIT' to return to program
emendelson commented 4 years ago

Once again, there must be something that you have on your system that I don't have. I'm running Ubuntu 20.04 installed in a VMware machine with nested virtualization turned on, and only the steps that I listed in the wiki. So I'm completely baffled.

Last time something worked for you but not for me, it was because I hadn't installed qemu-kvm. Is there any other possibility?

By the way, the same no-shell problem occurs in Ubuntu 18.04 running in Parallels Desktop on a Mac.

stsp commented 4 years ago

See ver /r, maybe it will indicate some differences.

andrewbird commented 4 years ago

By the way, the same no-shell problem occurs in Ubuntu 18.04 running in Parallels Desktop on a Mac.

Is WP installation done each time, or is it file copied between them? I'm just wondering if some setting comcom32 doesn't like is being transferred.

stsp commented 4 years ago

I didn't re-install anything too. Just extracted WP from provided archive.

emendelson commented 4 years ago

If you mean "ver /r" at the dosemu command line, this is what I get with the comcom32 command.com

C:\UP51>ver /r comcom32 v0.1
Reported DOS version (Int21.3000): 5.00 OEM: FDh
Reported true DOS version (Int21.3306): 7.10
Version string (Int21.33FF): FDPP kernel 1.0rc2 [GIT: ] (compiled May 10 2020)

I also deleted all the SET files (where WP stores its settings) and tried again, with the same result - no shelling to DOS under the comcom32 command.com.

I may try this on real hardware and also reinstall under VMware and will report.

stsp commented 4 years ago

Where is comcom32 version? Mine was

comcom32 v0.1
 Source Control Revision ID: alpha-1-64-g4657294
emendelson commented 4 years ago

How do it get a version string from comcom32?? I'm sorry to be so ignorant, but I can't figure out how to get that output. Do I get it from the Linux terminal or the dosemu command line? And what command do I type to produce that output (I see that it should be ver /r, but what do I type to get a command line where I can enter "ver /r")?

Again, apologies for being so ignorant.

stsp commented 4 years ago

comcom32.exe.gz

Try this comcom32. Put it to C and symlink to command.com. Then do ver /r in DOS.

andrewbird commented 4 years ago

I wonder if you have a really old version of comcom32, as before this

C. Masloch   2019-05-02 12:03:42 +0200

the source revision id wasn't reported.

emendelson commented 4 years ago

Well, I'm probably being very confused, but after copying comcom32.exe to drive_c and then (in the drive_c folder) running "ln -s comcom32.exe command.com", and then starting dosemu and entering ver, I get

concom32 v0.1

If I enter ver/r I get the same output I posted above.

If it helps, comcom32.exe is 66,945 bytes.

How can I get a current version? I ran sudo apt upgrade before testing any of this.

stsp commented 4 years ago

comcom32 I provided above, is 233984 bytes, and 119120 bytes compressed. You are doing something very, very wrong.

andrewbird commented 4 years ago

Perhaps you need to rule out multiple copies lying around? find / -name comcom32.exe -ls 2>/dev/null find / -name command.com -ls 2>/dev/null

BTW, my comcom32 from Ubuntu PPA is

 177664 May 10 23:16 /usr/share/comcom32/comcom32.exe
andrewbird commented 4 years ago

A second thought it that perhaps you have uppercase and lower case versions?

emendelson commented 4 years ago

Sorry - the number I reported was wrong, not the file. I have only two copies of comcom32.exe, one in /usr/share/comcom32, 177664 bytes, the other (copied from the first) in ~/.dosemu/drive_c

Now that I've cleared the trash, the only command.com's I have are the links to comcom32.exe in ~/.dosemu/drive_c and and in /usr/share/comcom32

I think some old links were getting in the way before. When I run ver /r in dosemu, with command.com symlinked to comcom32.exe, I get:

comcom,32 v0.1
` Reported DOS version etc.,etc., `

BUT I do not see anything about source control. So probably I have an old version? If so, how do I install a new one?

andrewbird commented 4 years ago

So since your file size was identical to mine, I tried running ver /r on my Ubuntu 18.04 system

C:\>ver/r
comcom32 v0.1

Reported DOS version (Int21.3000): 5.00 OEM: FDh
Reported true DOS version (Int21.3306): 7.10
Version string (Int21.33FF): FDPP kernel 1.0rc2 [GIT: rc-2] (compiled May  8 2020)

So you can see the source id version string is missing there too. @stsp is it being built on launchpad, perhaps the build repo is not git?

emendelson commented 4 years ago

A second thought it that perhaps you have uppercase and lower case versions?

No upper-case versions anywhere.

stsp commented 4 years ago

It was build locally, but I uploaded it, and obviously @emendelson still plays with another one!

emendelson commented 4 years ago

Well, I installed Ubuntu this week and installed dosemu and comcom32 the same day, using the commands I listed on the wiki. Is there some other source that I should have tried?

When I ran sudo apt upgrade, I saw the new version of the dosemu conf file getting installed, but nothing happened to update comcom32.

andrewbird commented 4 years ago

I think @emendelson's version of comcom32 matches mine (at least with file size) from the PPA, neither display the source id.

$ dpkg -s comcom32
Package: comcom32
Status: install ok installed
Priority: optional
Section: contrib/otherosfs
Installed-Size: 184
Maintainer: Stas Sergeev <stsp@users.sourceforge.net>
Architecture: amd64
Version: 0.1~alpha1-102-aae9c24+202005102216~ubuntu18.04.1
Description: 32-bit command.com
 comcom32 is a 32-bit command.com.
Homepage: http://www.github.com/stsp/comcom32
stsp commented 4 years ago

So what? I uploaded the one that I tried, and it worked.

andrewbird commented 4 years ago

I think we've gone off down a rabbit hole thinking he has some rogue old broken version, purely because the 'source id' string is missing from ver/r, which isn't the case as its display is conditional on it having length

commit d94e467b5f35b6a64be54d9fd3138a0a29827d16
Author: C. Masloch <pushbx@38.de>
Date:   Thu May 2 12:03:42 2019 +0200

    in perform_ver, display revisionid

diff --git a/command.c b/command.c
index 2fd9cb3..78a5716 100644
--- a/command.c
+++ b/command.c
@@ -2740,6 +2740,10 @@ static void perform_type(const char *arg)
 static void perform_ver(const char *arg)
   {
   printf("comcom32 v0.1\n");
+  if (strlen(revisionid))
+    {
+    printf(" Source Control Revision ID: %s\n", revisionid);
+    }
   }

For some reason the comcom32 in the PPA has no source id.

The fact that your just compiled version works is very interesting, but I don't know what the git hash 4657294 is as it's not in the public repo?

stsp commented 4 years ago

Seems not.

stsp commented 4 years ago
commit 4657294ec8489fcd9a3e31bc6ab357eadb01e29a
Author: Stas Sergeev <stsp@users.sourceforge.net>
Date:   Fri Apr 3 22:23:50 2020 +0300

    makefile fixes

But it seems private indeed.

emendelson commented 4 years ago

I just now downloaded the source from

https://github.com/dosemu2/comcom32/releases

and built it, and copied it into /usr/share/comcom32. I deleted the copy (and symlink) in c:\ , started up dosemu, ran WP, and shelling worked correctly.

I think this may mean that a user needs to run sudo apt install comcom32 after visiting the instructions on this page:

https://github.com/dosemu2/comcom32/releases

But I'm not certain.

andrewbird commented 4 years ago

@stsp didn't you recently switch the compiler used to build comcom32 from your own PPA ppa:stsp-0/djgpp to ppa:jwt27/djgpp-toolchain, could that be the difference?

@emendelson since you just built a working copy which djgpp package do you have? dpkg -s djgpp

emendelson commented 4 years ago

@emendelson since you just built a working copy which djgpp package do you have? dpkg -s djgpp

@andrewbird - As I wrote in my post up above, I built comcom32.exe (and only comcom32.exe) by downloading the source from this page

https://github.com/dosemu2/comcom32/releases

and running build.sh - I didn't build anything else.

The dpkg command that you asked for produces a message saying that djgpp is not installed.

andrewbird commented 4 years ago

As I wrote in my post up above, I built comcom32.exe

You are not to know this, but since djgpp (compiler) isn't installed build.sh didn't actually build anything from source it only copied a pre-compiled (by stsp) exe to the target directory.

It's still useful to know that though! :smile:

stsp commented 4 years ago

Very unlikely, as the pre-compiled binary was removed after djgpp deployment on LP.

andrewbird commented 4 years ago

Very unlikely, as the pre-compiled binary was removed after djgpp deployment on LP.

Incorrect, @emendelson is talking about how he downloaded source and compiled it to create a working comcom32.exe; but he doesn't have djgpp compiler so how did he create it? I just checked and the pre-compiled binary is still in the source .tar.gz. I just tried ver /r on it and it looks to be really old. See comcom32-alpha-1/tmp/comcom32.exe in the tar.gz on the releases page.

stsp commented 4 years ago

Ah, release instead of git, or instead of trying the one I uploaded... I think there is a mis-communication here.

emendelson commented 4 years ago

Ah. @andrewbird is right - I downloaded the archive (dated last month) from the Releases page. It did occur to me that "build.sh" was working suspiciously quickly, but the exe file appeared, so I didn't look into it any further.

But the exe file certainly works with WPDOS, and the file size seems to be close to (or identical with) the file size that @stsp mentioned earlier in this thread.

Apologies again for making things complicated through my ignorance.

emendelson commented 4 years ago

Ah, release instead of git, or instead of trying the one I uploaded... I think there is a mis-communication here.

Where can I find "the one that I uploaded"?

stsp commented 4 years ago

Right in this thread, by scrolling it upwards.

emendelson commented 4 years ago

Right in this thread, by scrolling it upwards.

As usual, the answer is right in front of my eyes, when I'm looking for it somewhere else.

emendelson commented 4 years ago

Works perfectly. Thank you.

stsp commented 4 years ago

Should now be fixed.

emendelson commented 4 years ago

Thank you! This means that if I use "sudo apt" to update dosemu2 tomorrow, the fixed version will get installed?

stsp commented 4 years ago

I updated the package repository.

emendelson commented 4 years ago

I updated the package repository.

And I just installed it. Thank you.