Win16-os hibakeresés

 ( NevemTeve | 2014. január 9., csütörtök - 16:50 )

Valamit elronthattam, debuggolni kellene. Ahogy látszik a dolog, Assembly szinten kellene nézelődni (A function-prolog lehet rossz. Talán.)... Sajnos a jó öreg BorlandC4.5-höz tartozó TDW nem indul el. Google barátom az OpenWatcom-ot ajánlotta, annak van 16-bites fordítója és debuggere is. Kipróbáltam, tényleg van.
Sajnos megpusztul azon a ponton, amikor 'huge' pointerrel kellene matekoznia.
Ez a forrásprogram, a memory model large, a szerkesztésnél a lib286\clibl -t használom [szerk: itt korábban tévesen 'clibc' állt -- akkor legalább meglenne a hiba], ennek ellenére a __PIA úgy fut(na) le, hogy a DS-t nem állítja be, vagyis mintha nem tudná, hogy 'large' modellben vagyunk...

wcl opciói:

wcl -d2 -c -bw -ml -2 fontlist.c

wlinker paramétere:

NAME fontlist.exe 
FORMAT WINDOWS 
OPTION NODEFAULTLIBS 
OPTION NOCASEEXACT 
OPTION STACK=16384 
OPTION MAP 
OPTION VERBOSE 
DEBUG WATCOM ALL 
FILE fontlist.obj 
LIBPATH C:\WATCOM\LIB286 
LIBPATH C:\WATCOM\LIB286\WIN 
LIBRARY clibl.lib 
LIBRARY commdlg.lib 
LIBRARY windows.lib 

20140120.1140: A callback paraméterezése volt rossz, a 'fontType' paraméter Win16 esetén 'int', Win32/64 esetén 'DWORD'. (Mondjuk az első két paraméter típusa is 'ingadozó', LOGFONT/ENUMLOGFONT/ENUMLOGFONTEXDV, TEXTMETRIC/NEWTEXTMETRIC...)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Uff, ez durva! Mi a cél ezzel?

Nem tudom, de ez 2014-ben perverz... ;-)

"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."

Sub

A TDW mire panaszkodik?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

Alapvetően a Windows NT-re. Lenne még a TD32, de az nem viszi a 16-bites alkalmazást. Az egész kezdete az volt, hogy a dtelnet-ben eltoltam valamit, de csak a 16-bites verzióban van hibajelenség. A gond az EnumFontFamilies callback-jével van, aminek a paraméterezése verziók között különböző. Ha szerencsém van, akkor az olyasféle #define-ok, mint STRICT meg WIN32_LEAN_AND_MEAN segítenek
megtalálni a hibát. Ettől függetlenül jó lenne, ha rájönnék, mit rontottam el az OpenWatcom-mal (és ez még csak nem is az igazi program, csak C. Petzold egyik demoprogramja!) No meg az is érdekelne, hogy miért nem panaszolt az a kevés felhasználó, aki letöltötte? Mert mind csak tévedésből töltötte le a 32/64-bites helyett?
--
zsebHUP-ot használok!

De mi az ordogert nem raksz fel virtualboxban egy dos-t es buveszkedsz azzal? Tenyleg ennyire mazochista vagy?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

Már most egy Oracle VM VirtualBox-ban megy egy WindowsXP, mert a host renszer egy 64-bites Windows7, amin semmilyen 16-bites progi nem megy.
Az igazi tényleg egy Windows3.11 telepítése lenne egy emulált gépen... ha másért nem, a nosztalgia kedvéért jó lenne;)

Az még dosbox alatt is megy.

WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE DESCRIBE IT HERE!

Epic.

Mondjuk annyit érdemes megemlíteni, hogy ha az időutazás még nem ért véget, és még mindig WIN16-ra (is) akarunk fordítani, akkor legalább ennyit tegyünk magunkért:

#if !defined (_WIN32)
    #ifndef WINVER
	#define WINVER 0x030a
    #endif
#endif

ugyanis egyes header-ek televannak #if-ekkel és a WINVER-től függően más-más módon prototype-olják például az EnumFont[Families] callback-függvényét... (TEXTMETRIC vs NEWTEXTMETRIC, LOGFONT helyett ENUMLOGFONT...) mintha nem lenne elég a 16/32-bit közötti inkompatibilitás

En inkabb #ifdef _WIN16 -ot csinalnek. Attol, hogy a WIN32 nincs definialva, meg lehet, hogy nem windowsra forditunk.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

Hát, elég nagy itt a Káosz Galaktika, de ahol én néztem, ott a _WIN32 megvolt mindenhol, 64-bitesben is (a _WIN64 mellett).

Hint: linuxon, aixen _nincs_ _WIN32 definialva :-)
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.

Ja, hogy így értve... emiatt nem aggódom, mert a kérdéses projekt a Windows API-ra épül...