(* Release 3.10 *) (*-------------------------------------------------------------------------* * * * INITWDLL.A - Windows DLL startup * * * * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. * * All Rights Reserved * * * *--------------------------------------------------------------------------*) module initwdll section segment ENTERCODE(CODE,28H) segment INITCODE(CODE,28H) segment MP_CODE(MP_CODE,68H) segment _TEXT(CODE,28H) segment _INIT(INIT_CODE,28H) segment _FAR_DATA(FAR_DATA,28H) segment FAR_BSS(FAR_BSS,28H) segment CONST(CONST,28H) segment _CONST(DATA,28H) segment _DATA(DATA,28H) segment BSS_START(BSS,28H) segment _BSS(BSS,28H) segment BSS_END(BSS,28H) segment STACK(STACK,74H) 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 (* 18 Bytes *) select _TEXT db 0 select _DATA SSisDS = 8 HeapSize = 6 StackSize = 4 select _DATA InitRec: dw 0, 0, 0, _INIT select BSS_START public __bss_start: public _edata: select BSS_END public __bss_end: public _end: select _INIT public init_d : add ax, 4 add ax, 4 add ax, 4 add ax, 4 add ax, 4 add ax, 4 ret far 0 select _TEXT text_dummy : db 0 select ENTERCODE extrn _main extrn __startup extrn _x_main extrn _x_initx extrn __heap_size extrn _x_bss_end extrn _x_bss_start extrn __near_stack_start extrn __x_near_stack_start extrn __CmdLine extrn __iHandle extrn __InitLink extrn __initWDLL extrn LOCALINIT extrn LIBMAIN public __dstart : push bp push di push si mov [__CmdLine], si (* es:si = command line *) mov [__CmdLine][2], es mov [__iHandle], di (* hInstance *) mov [__heap_size], cx (* Heap Size from .EXP file *) jcxz $NoHeap push ax push cx xor ax, ax push ds push ax push cx call far LOCALINIT (* Initialize Local Heap *) or ax, ax pop cx pop ax jz $HeapInitError $NoHeap: (*%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], LIBMAIN (*%E*) mov bx,cs:[mainaddress][4] mov word [_x_initx][0], bx mov bx,cs:[mainaddress][6] mov word [_x_initx][2], bx push ax push bx call far init_d mov bx, InitRec mov ax, ds call far __InitLink pop bx pop ax call far __startup $HeapInitError: pop si pop di pop bp ret far 0 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 LIBMAIN dd __initWDLL end *