Quelltext /~heha/hs/winasm.zip/MYFIRST.ASM

;	include	windows.inc	;Konstanten-Definitionen

	IDEAL

Char	equ	<Byte>
PChar	equ	<DWord>
THandle	equ	<Word>
HWnd	equ	<Word>

	model	small,windows pascal
	P286

procdesc InitTask far
procdesc WaitEvent far	Task:THandle
procdesc InitApp far 	Task:THandle
procdesc MessageBox far	Parent:HWnd, Text:PChar, Title:PChar, MB_:Word

	includelib	"kernel"
	includelib	"user"

DATASEG
wZero		dw	?		;Diese Variablen MSSEN sich
OldSP		dw	?		;am Anfang des automatischen
OldSS		dw	?		;Datensegmentes befinden,
LocalHeap	dw	?		;da InitTask() hierhin diverse
AtomTable	dw	?		;Werte kopiert
StackTop	dw	?
StackMin	dw	?
StackBottom	dw	?

HInstance	dw	?		;Diese globalen Variablen
HPrevInst	dw	?		;sind einfach zweckmig
CmdLine		dd	?		;(Pascal-like)
PrefixSeg	=	Word $-2	;Man knnte sie aber auch gePUSHt
CmdShow		dw	?		;einer WinMain()-Funktion bergeben

Hello$	db	'Hallo Welt!',0

CODESEG
proc Main
	call	far InitTask		;Task-Parameter holen
;Es scheint ein Bug zu sein, da im IDEAL-Modus das FAR erforderlich ist,
;ansonsten kommen leider die seltsamsten Fehlermeldungen.
;Aber ich wollte keinesfalls zurck zum MASM-Modus
	or	ax,ax
	jz	@@e
	mov	[HInstance],di		;sollte =DS sein
	mov	[HPrevInst],si
	mov	[CmdShow],dx
	mov	[word LOW CmdLine],bx
	mov	[word HIGH CmdLine],es
	call	far WaitEvent,0
;	call	far InitApp,[HInstance]	;Warteschlange einrichten
;Da unter Windows 3.1 [HInstance] = DS gilt, ist auch mglich:
	call	far InitApp,ds
	or	ax,ax
	jz	@@e

	call	far MessageBox,0,ds offset Hello$,[CmdLine],0

@@e:	mov	ax,4c00h
	int	21h
endp
	end	Main
Vorgefundene Kodierung: UTF-80