(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * INITMWIN.A - Modula-2 Windows startup * * * * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) include "corelib.inc" module initmwin section segment ENTERCODE(CODE,28H) public __ecode_dummy : segment INITCODE(CODE,28H) public __icode_dummy : segment _TEXT(CODE,28H) segment _INIT(INIT_CODE,28H) public __initcode_dummy : segment _FAR_DATA(FAR_DATA,28H) public __fd_dummy : segment STACK(STACK,74H) public __s_dummy : segment BEGDATA(DATA,28H) segment _DATA(DATA,28H) public __ud_dummy : segment BSS_START(BSS,28H) segment _BSS(BSS,28H) segment BSS_END(BSS,28H) section segment _TEXT(CODE,28H) segment _DATA(DATA,28H) select _DATA public __ireg: org 10 select _TEXT extrn INITAPP extrn WAITEVENT extrn WINMAIN extrn _exit public ENTRYPOINT: xor ax, ax push ax call far WAITEVENT push [__ireg][hInstance] call far INITAPP or ax, ax jz BadApp push [__ireg][hInstance] push [__ireg][hPrevInst] push [__ireg][PSPSeg] push [__ireg][cmdLine] push [__ireg][cmdShow] call far WINMAIN public exitApp: push ax (*%F NearCall *) call far _exit (*%E *) (*%T NearCall *) call _exit (*%E *) BadApp: mov ax, 0FFH jmp exitApp section segment ENTERCODE(CODE,28H) segment CODE(none,28H); segment INITCODE(CODE,28H) segment _TEXT(CODE,28H) segment _FAR_DATA(FAR_DATA,28H) segment EMU_STATE(DATA,28H) EMU_STATE__: org 0; segment STACK(STACK,74H) STACK__: org 0; segment BEGDATA(DATA,28H) BEGDATA__: org 0; segment _INIT(INIT_CODE,28H) _INIT__: org 0; segment CONST(CONST,28H) CONST__: org 0; segment _CONST(DATA,28H) _CONST__: org 0; segment _DATA(DATA,28H) _DATA__: org 0; segment BSS_START(BSS,28H) BSS_START__: org 0; segment _BSS(BSS,28H) _BSS__: org 0; segment BSS_END(BSS,28H) BSS_END__: org 0; group DGROUP(BEGDATA,EMU_STATE,CONST,_CONST,_DATA,BSS_START,_BSS,BSS_END,STACK) select BEGDATA beg_data_dummy : dw 0, 0, 0, 0, 0, 0, 0, 0, 0 select _DATA InitRec: dw 0, 0, 0, _INIT select BSS_START public __bss_start: select BSS_END public __bss_end: select _TEXT extrn _main extrn __startup extrn _x_main extrn _x_initx extrn _x_bss_end extrn _x_bss_start extrn __ireg extrn INITTASK extrn __InitLink extrn exitApp extrn __initm select ENTERCODE public __wstart: sub bp, bp push bp (* terminate bp chain ? *) call far INITTASK or ax, ax jz BadApp mov [__ireg][hInstance], di (* cx contains stack base *) mov [__ireg][hPrevInst], si mov [__ireg][PSPSeg], es mov [__ireg][cmdLine], bx mov [__ireg][cmdShow], dx (*%T _fcall*) mov bx,cs:[mainaddress] mov word [_x_main][0], bx mov bx,cs:[mainaddress][2] mov word [_x_main][2], bx (*%E*) (*%F _fcall*) mov word [_x_main][0], _main (*%E*) mov word [_x_bss_end], __bss_end mov word [_x_bss_start], __bss_start mov bx, InitRec mov ax, ds call far __InitLink mov ax,cs:[mainaddress][4] mov word [_x_initx][0], ax mov ax,cs:[mainaddress][6] mov word [_x_initx][2], ax jmp far __startup BadApp: mov ax, 0FFH jmp far exitApp dw beg_data_dummy dw EMU_STATE__ dw CONST__ dw _CONST__ dw _DATA__ dw BSS_START__ dw _BSS__ dw BSS_END__ (* establishes order ! *) dw STACK__ dw 0 mainaddress: dd _main dd __initm end*