fix watcom

This commit is contained in:
Nishi 2026-09-22 10:57:31 +09:00
commit 9bdd80b421
4 changed files with 55 additions and 8 deletions

16
WatMakefile generated
View file

@ -1,13 +1,13 @@
CC = wcc386 -bt=nt -q CC = wcc386 -bt=nt -q -fr
LD = wlink option quiet LD = wlink option quiet
MW_CFLAGS = -bd -i=include -i=external/libz/include -d_MILSKO -d_MILSKO_BUILD -dUSE_GDI -dUSE_STB_IMAGE -dSTBI_NO_SIMD -dUSE_GDI_TEXT -dMW_OPENGL MW_CFLAGS = -bd -i=include -i=external/libz/include -d_MILSKO -d_MILSKO_BUILD -dUSE_GDI -dUSE_STB_IMAGE -dSTBI_NO_SIMD -dUSE_GDI_TEXT -dMW_OPENGL -dMW_DIRECT3D9
MW_LDFLAGS = system nt_dll MW_LDFLAGS = system nt_dll
EXE_CFLAGS = -i=include EXE_CFLAGS = -i=include
EXE_LDFLAGS = system nt EXE_LDFLAGS = system nt
all: src/Mw.dll examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe all: src/Mw.dll examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/dxdemos/direct3d9.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe
lib: src/Mw.dll lib: src/Mw.dll
examples: examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe examples: examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/dxdemos/direct3d9.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe
clean: .SYMBOLIC clean: .SYMBOLIC
%erase external/libz/src/adler32.obj %erase external/libz/src/adler32.obj
%erase external/libz/src/compress.obj %erase external/libz/src/compress.obj
@ -131,6 +131,7 @@ clean: .SYMBOLIC
%erase examples/basic/tab.obj %erase examples/basic/tab.obj
%erase examples/basic/treeview.obj %erase examples/basic/treeview.obj
%erase examples/basic/viewport.obj %erase examples/basic/viewport.obj
%erase examples/dxdemos/direct3d9.obj
%erase examples/gldemos/boing.obj %erase examples/gldemos/boing.obj
%erase examples/gldemos/clock.obj %erase examples/gldemos/clock.obj
%erase examples/gldemos/cube.obj %erase examples/gldemos/cube.obj
@ -160,6 +161,7 @@ clean: .SYMBOLIC
%erase examples/basic/tab.exe %erase examples/basic/tab.exe
%erase examples/basic/treeview.exe %erase examples/basic/treeview.exe
%erase examples/basic/viewport.exe %erase examples/basic/viewport.exe
%erase examples/dxdemos/direct3d9.exe
%erase examples/gldemos/boing.exe %erase examples/gldemos/boing.exe
%erase examples/gldemos/clock.exe %erase examples/gldemos/clock.exe
%erase examples/gldemos/cube.exe %erase examples/gldemos/cube.exe
@ -305,6 +307,12 @@ examples/basic/viewport.exe: examples/basic/viewport.obj src/Mw.dll
examples/basic/viewport.obj: examples/basic/viewport.c examples/basic/viewport.obj: examples/basic/viewport.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/viewport.c $(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/viewport.c
examples/dxdemos/direct3d9.exe: examples/dxdemos/direct3d9.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/dxdemos/direct3d9.obj library clib3r.lib library src/Mw.lib
examples/dxdemos/direct3d9.obj: examples/dxdemos/direct3d9.c
$(CC) $(EXE_CFLAGS) -fo=$@ examples/dxdemos/direct3d9.c
examples/gldemos/boing.exe: examples/gldemos/boing.obj src/Mw.dll examples/gldemos/boing.exe: examples/gldemos/boing.obj src/Mw.dll
$(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/boing.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib $(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/boing.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib

View file

@ -25,6 +25,9 @@
#error D3D9 widget only avaliable for Win32 backends #error D3D9 widget only avaliable for Win32 backends
#undef MW_DIRECT3D9 #undef MW_DIRECT3D9
#else #else
#ifdef __WATCOMC__
#include <windows.h>
#endif
#include <d3d9.h> #include <d3d9.h>
#endif #endif
#endif #endif

View file

@ -4,13 +4,17 @@
#include <Mw/Widget/Direct3D9.h> #include <Mw/Widget/Direct3D9.h>
typedef struct gdid3d9 { typedef struct gdid3d9 {
void* d3d9dll; void* d3d9dll;
IDirect3D9* (*Direct3DCreate9)(UINT sdk_version); IDirect3D9*(D3DAPI* Direct3DCreate9)(UINT sdk_version);
LPDIRECT3D9 d3d; // the pointer to our Direct3D interface LPDIRECT3D9 d3d; // the pointer to our Direct3D interface
LPDIRECT3DDEVICE9 d3ddev; // the pointer to the device class LPDIRECT3DDEVICE9 d3ddev; // the pointer to the device class
} gdid3d9_t; } gdid3d9_t;
#ifndef D3D_SDK_VERSION
#define D3D_SDK_VERSION 32
#endif
static int wcreate_d3d9(MwWidget handle) { static int wcreate_d3d9(MwWidget handle) {
gdid3d9_t* o = malloc(sizeof(gdid3d9_t)); gdid3d9_t* o = malloc(sizeof(gdid3d9_t));
HRESULT hr; HRESULT hr;

View file

@ -59,6 +59,17 @@ DX9_FLAGS =
EOF EOF
} }
sub skip_d3d9 {
my $f = $_[0];
my $type = $_[1];
if (($f =~ /\/dxdemos\//) and not($type eq "Watcom")) {
return 1;
}
return 0;
}
sub generate { sub generate {
my ($output, $type) = @_; my ($output, $type) = @_;
@ -82,8 +93,8 @@ sub generate {
my $lib = ""; my $lib = "";
my $c_dllout = ""; my $c_dllout = "";
my $c_dllafter = ""; my $c_dllafter = "";
my $d3d9_flags = ""; my $d3d9_flags = "";
my $d3d9_block = ""; my $d3d9_block = "";
if ($type eq "Borland") { if ($type eq "Borland") {
$cc = "bcc32 -c"; $cc = "bcc32 -c";
@ -112,7 +123,7 @@ sub generate {
$d3d9_block = d3d9_detect_block(); $d3d9_block = d3d9_detect_block();
} }
elsif ($type eq "Watcom") { elsif ($type eq "Watcom") {
$cc = "wcc386 -bt=nt -q"; $cc = "wcc386 -bt=nt -q -fr";
$link = "wlink option quiet"; $link = "wlink option quiet";
$out = "-fo="; $out = "-fo=";
$dllout = "name "; $dllout = "name ";
@ -131,6 +142,8 @@ sub generate {
$prefobj = "file "; $prefobj = "file ";
$needlibs = "${lib}clib3r.lib"; $needlibs = "${lib}clib3r.lib";
$c_dllout = "option implib=src${dir}Mw.lib"; $c_dllout = "option implib=src${dir}Mw.lib";
$d3d9_flags = "${def}MW_DIRECT3D9";
} }
open(OUT, ">", $output); open(OUT, ">", $output);
@ -154,6 +167,9 @@ sub generate {
} }
print(OUT "all: src${dir}Mw.dll"); print(OUT "all: src${dir}Mw.dll");
foreach my $f (@examples) { foreach my $f (@examples) {
if (skip_d3d9($f, $type)) {
next;
}
$b = $f; $b = $f;
$b =~ s/\.c$/.exe/; $b =~ s/\.c$/.exe/;
$b =~ s/\//$dir/g; $b =~ s/\//$dir/g;
@ -163,6 +179,9 @@ sub generate {
print(OUT "lib: src${dir}Mw.dll\n"); print(OUT "lib: src${dir}Mw.dll\n");
print(OUT "examples:"); print(OUT "examples:");
foreach my $f (@examples) { foreach my $f (@examples) {
if (skip_d3d9($f, $type)) {
next;
}
$b = $f; $b = $f;
$b =~ s/\.c$/.exe/; $b =~ s/\.c$/.exe/;
$b =~ s/\//$dir/g; $b =~ s/\//$dir/g;
@ -171,6 +190,9 @@ sub generate {
print(OUT "\n"); print(OUT "\n");
print(OUT "clean: $symbolic\n"); print(OUT "clean: $symbolic\n");
foreach my $f (@cfiles) { foreach my $f (@cfiles) {
if (skip_d3d9($f, $type)) {
next;
}
my $b = $f; my $b = $f;
$b =~ s/\.c$/.obj/; $b =~ s/\.c$/.obj/;
$b =~ s/\//$dir/g; $b =~ s/\//$dir/g;
@ -182,12 +204,18 @@ sub generate {
print(OUT " $del d3d9flags.mk\n"); print(OUT " $del d3d9flags.mk\n");
} }
foreach my $f (@examples) { foreach my $f (@examples) {
if (skip_d3d9($f, $type)) {
next;
}
my $b = $f; my $b = $f;
$b =~ s/\.c$/.obj/; $b =~ s/\.c$/.obj/;
$b =~ s/\//$dir/g; $b =~ s/\//$dir/g;
print(OUT " $del $b\n"); print(OUT " $del $b\n");
} }
foreach my $f (@examples) { foreach my $f (@examples) {
if (skip_d3d9($f, $type)) {
next;
}
$b = $f; $b = $f;
$b =~ s/\.c$/.exe/; $b =~ s/\.c$/.exe/;
$b =~ s/\//$dir/g; $b =~ s/\//$dir/g;
@ -195,6 +223,9 @@ sub generate {
} }
print(OUT "\n"); print(OUT "\n");
foreach my $f (@examples) { foreach my $f (@examples) {
if (skip_d3d9($f, $type)) {
next;
}
my $b = $f; my $b = $f;
$b =~ s/\.c$/.exe/; $b =~ s/\.c$/.exe/;
$b =~ s/\//$dir/g; $b =~ s/\//$dir/g;
@ -256,6 +287,7 @@ push(@cfiles, "src/backend/gdi.c");
scan_examples("examples/basic"); scan_examples("examples/basic");
scan_examples("examples/gldemos"); scan_examples("examples/gldemos");
scan_examples("examples/dxdemos");
@examples = sort(@examples); @examples = sort(@examples);