Commit Graph
145 Commits
Author SHA1 Message Date
Ryan C. Gordon 25ddf52ad7 lxapigen.pl doesn't need the native dir specified on the command line now. 2018-07-03 22:47:58 -04:00
Ryan C. Gordon 0a6a7208d8 Added a perl script that will filter os2imports.pl.
It filters out APIs that are implemented in 2ine, so you can see just what's
missing.
2018-07-03 22:47:19 -04:00
Ryan C. Gordon afc9e0846f Fixed exepack2 decompression.
Now 4os2.exe runs without a weird crash during startup (but still fails on a
missing API call a little later).
2018-06-29 22:05:06 -04:00
Ryan C. Gordon ec49615ef3 Fixed incorrect stack setup in NE loader. 2018-06-27 18:52:42 -04:00
Ryan C. Gordon 14073f3361 Added a basic config file parser to lib2ine.
This will let the app set up some state about the OS/2 "system", like what
Unix paths are mapped to which OS/2 drive letters, system vars, etc.

This reads from /etc/2ine.cfg, and then tries a copy in the user's local
config dir to add/override settings.

This mostly doesn't do anything yet, but the framework is there for adding
stuff, and the drive letter mapping is done, even if nothing is using it.
2018-06-24 02:40:36 -04:00
Ryan C. Gordon 9860532454 Cleanup *INFOSEG creation. 2018-06-19 13:59:21 -04:00
cracyc 35d2162ba4 fix last few export names 2018-06-19 12:05:24 -04:00
cracyc c7f212d035 build fixes 2018-06-19 11:59:46 -04:00
cracyc 8457fc0e22 Implemented a whole bunch of 16-bit APIs. OS/2 1.0's cmd.exe sort of works!
(Most of this work was cracyc's effort, but I started tweaking it before
I thought to perform a commit.  --ryan.)
2018-06-18 15:52:58 -04:00
cracyc 5ae85f2426 Use OS2PATH instead of Ryan's hardcoded hack. 2018-06-18 15:29:36 -04:00
Ryan C. Gordon 3e83a67d48 Let OS2APIINFO optionally take key/value pairs, use it for export names.
This lets me remove my tcpip32 hack, and will let me export old symbols
as all caps for OS/2's use and something more sane for regular use
(like VioGetCurPos() in modern times is VIOGETCURPOS in viocalls.dll, etc).
2018-06-17 22:21:52 -04:00
Ryan C. Gordon fcbedae5d1 Fixed comment. 2018-06-17 00:23:53 -04:00
cracyc 1b885afc0b Deal better with proc lookup into 16-bit bridge entry points. 2018-06-16 23:46:42 -04:00
cracyc a13726b2b7 Allocate the full 64k segment for the environment.
This is read/write memory owned by the process, which can reallocate it,
which CMD.EXE does.

(FIXME comment by ryan, rest of the patch was from cracyc.)
2018-06-16 23:45:07 -04:00
cracyc 241c4ea590 CMakeLists.txt: check for ncursesw/curses.h. 2018-06-16 23:31:51 -04:00
cracyc 38ae18c0fe Accept NE EXE type 0 or 1 (really old 16-bit OS/2 apps use 0). 2018-06-16 21:48:31 -04:00
Ryan C. Gordon a80afaa0c1 Be aggressive about saving registers in the 16-bit bridge.
Fixes a lot of stuff.  :)
2018-06-14 12:25:38 -04:00
Ryan C. Gordon cdaf533140 Fixed typo in Dos16Write's TRACE_NATIVE line. 2018-06-14 12:24:57 -04:00
Ryan C. Gordon 4ab1d427b7 lx_loader: deal with iterated segments in NE executables. 2018-06-13 01:46:41 -04:00
Ryan C. Gordon c659bb083a lx_dump: report NE application type and some other previously-missing flags. 2018-06-13 01:08:10 -04:00
Ryan C. Gordon ab60f82c43 lx_dump: report OS/2 EXE flags for NE modules. 2018-06-13 01:00:12 -04:00
Ryan C. Gordon 37c3cc5a0a Bunch more work on 16-bit entry points.
Can run testargv16.exe now. This means Watcom C startup code, and Watcom's
printf(), both work.
2018-06-07 23:48:39 -04:00
Ryan C. Gordon 36dedda17c Deal with NE binaries with a stack size of zero.
Microsoft C 5.1's CL.EXE does this. This is valid in the NE spec.
2018-06-07 23:44:54 -04:00
Ryan C. Gordon d82dd93262 Update testargv.c to work on older compilers, added 16-bit .exe of it. 2018-06-07 23:41:42 -04:00
Ryan C. Gordon 085b1c7ec7 Implement some 16-bit APIs that our hello16.exe needs. 2018-06-06 17:27:37 -04:00
Ryan C. Gordon bd2a9bf249 lxapigen.pl: show full diffs when changing things. 2018-06-06 17:26:20 -04:00
Ryan C. Gordon fbe6aaf432 Added a 16-bit Hello World app. 2018-06-06 17:25:47 -04:00
Ryan C. Gordon 0148811a0c lx_loader: Load 16-bit NE binaries!
This currently only works with a simple Hello World program, but this is the
bulk of the work to 16-bit program support.

Still need some minor effort to get 16-bit DLLs working, and of course we
need to implement a ton of missing 16-bit API calls.
2018-06-06 17:25:22 -04:00
Ryan C. Gordon bdc285797c lx_dump: Don't fail for extremely small (but valid) binaries.
Although strictly speaking, it looks like the final OS/2 releases
will fail if the OS/2 .EXE is less than ~320 bytes, choosing to
launch it as a DOS program instead (giving you the "This is an
OS/2 executable" message from the DOS stub, comically).
2018-06-06 17:20:30 -04:00
Ryan C. Gordon 4cbda8515b Changed asm for 16-bit missing trampolines to escape 16-bit mode first. 2018-06-06 17:17:12 -04:00
Ryan C. Gordon 8b695647db lxapigen.pl: Don't overwrite files that didn't change.
This prevents a full rebuild every time you add an API.
2018-06-06 16:19:24 -04:00
Ryan C. Gordon b1217b7fe0 Added docs on NE format that I found on the web. 2018-05-28 12:57:50 -04:00
Ryan C. Gordon c19db82bc8 Added script that takes a pipe from lx_dump and reports all needed symbols.
This, with its fairly large (but incomplete) dictionary of system APIs, is
useful when you want to know that a module wants "VioWrtNCell" and not
"ordinal 52 in VIOCALLS.DLL".  :)
2018-05-28 05:03:07 -04:00
Ryan C. Gordon 537b81f460 lx_dump: 16-bit modules should list imported modules starting at 1. 2018-05-28 03:29:40 -04:00
Ryan C. Gordon 3bde50a716 lx_dump: Finished 16-bit fixup output. 2018-05-28 02:36:50 -04:00
Ryan C. Gordon 8e2c1449ab Initial work on parsing NE (16-bit) executables.
This is just lx_dump for now, but if some work proves out, we can load these
with lx_loader, too, and bridge the 16-bit APIs to 32-bits the same as we
do anyhow, giving us access to 16-bit OS/2 binaries.
2018-03-07 15:54:01 -05:00
Ryan C. Gordon c4ba0aaa12 Forgot to add lib2ine.c to revision control. :/ 2018-02-28 00:28:59 -05:00
Ryan C. Gordon 312b87ca53 Let the libraries build as native binaries without 32-bit x86 dependencies.
Obviously, this disables lx_loader, but you can compile a C program that
uses OS/2 APIs as a native 64-bit Linux app and run them.

So now we can do 2ine and 2inelib.  :)
2018-02-27 23:42:17 -05:00
Ryan C. Gordon aa8f842232 Work to make OS/2 API available to native apps, not just OS/2 binaries.
GLoaderState is moved to a new lib2ine library, which everything links
to and sets up what it can in a DLL constructor, so your app can just
link to doscalls or whatever and it'll have what it needs without
something like lx_loader doing a lot of heavy lifting before your
main() runs.
2018-02-27 23:18:51 -05:00
Ryan C. Gordon 12204217cc hgignore: don't look at several separate build directories I'm using. 2018-02-27 15:17:16 -05:00
Ryan C. Gordon a1af09c108 Hacked up tcpip32.h to allow including from native apps outside of 2ine. 2018-02-27 15:16:17 -05:00
Ryan C. Gordon 6821de5ed7 Automate handling of support code for OS/2 binaries.
Now a perl script parses our headers and generates glue code, export tables,
etc. This automates all the macro nonsense and bridge code, and separates
out all the stuff you need for binary compat with OS/2, so you can remove it
all from the build if you want to just build native libraries that supply
the OS/2 API to native apps (like Winelib vs Wine).

This makes upkeep details less nasty, and easier to build native binaries
when implementing and improving APIs, so you can debug directly without
a lot of drama.
2018-02-27 03:25:21 -05:00
Ryan C. Gordon dcf40e843b Added header comments to everything. 2018-02-26 12:54:16 -05:00
Ryan C. Gordon ce72cbfe63 Updated README. 2018-01-28 10:37:53 -05:00
Ryan C. Gordon 98dabed0a6 Updated copyright date. 2018-01-28 10:36:43 -05:00
Ryan C. Gordon 6604f3c169 Added DosWaitThread() to LX export table. 2018-02-26 09:57:31 -05:00
Ryan C. Gordon b6795ed5f6 Add in some stub libraries.
These don't do anything but exist and export no symbols for now, but if you
have something that links against, say, SOM.DLL, you can at least start it
up and have it fail when it calls into that library instead of failing to
start at all.
2018-02-24 16:50:05 -05:00
Ryan C. Gordon cec77df5d6 Implemented DosSetFileSize().
Info-ZIP's unzip for OS/2 can now unpack .zip files!  :)
2018-01-20 02:03:35 -05:00
Ryan C. Gordon efbc04419f Commented out some debug printf()s. 2018-01-20 02:02:31 -05:00
Ryan C. Gordon 4be33b8ae0 Free process modules in correct (?) order during termination.
Fixes crash when ending FTP.EXE, where real TNLS32.DLL suddenly doesn't have
access to unloaded-too-soon doscalls module.
2018-01-19 21:41:10 -05:00