INITMWIN.A 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * INITMWIN.A - Modula-2 Windows startup *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. include "corelib.inc"
  11. module initmwin
  12. section
  13. segment ENTERCODE(CODE,28H)
  14. public __ecode_dummy :
  15. segment INITCODE(CODE,28H)
  16. public __icode_dummy :
  17. segment _TEXT(CODE,28H)
  18. segment _INIT(INIT_CODE,28H)
  19. public __initcode_dummy :
  20. segment _FAR_DATA(FAR_DATA,28H)
  21. public __fd_dummy :
  22. segment STACK(STACK,74H)
  23. public __s_dummy :
  24. segment BEGDATA(DATA,28H)
  25. segment _DATA(DATA,28H)
  26. public __ud_dummy :
  27. segment BSS_START(BSS,28H)
  28. segment _BSS(BSS,28H)
  29. segment BSS_END(BSS,28H)
  30. section
  31. segment _TEXT(CODE,28H)
  32. segment _DATA(DATA,28H)
  33. select _DATA
  34. public __ireg: org 10
  35. select _TEXT
  36. extrn INITAPP
  37. extrn WAITEVENT
  38. extrn WINMAIN
  39. extrn _exit
  40. public ENTRYPOINT:
  41. xor ax, ax
  42. push ax
  43. call far WAITEVENT
  44. push [__ireg][hInstance]
  45. call far INITAPP
  46. or ax, ax
  47. jz BadApp
  48. push [__ireg][hInstance]
  49. push [__ireg][hPrevInst]
  50. push [__ireg][PSPSeg]
  51. push [__ireg][cmdLine]
  52. push [__ireg][cmdShow]
  53. call far WINMAIN
  54. public exitApp:
  55. push ax
  56. (*%F NearCall *)
  57. call far _exit
  58. (*%E *)
  59. (*%T NearCall *)
  60. call _exit
  61. (*%E *)
  62. BadApp:
  63. mov ax, 0FFH
  64. jmp exitApp
  65. section
  66. segment ENTERCODE(CODE,28H)
  67. segment CODE(none,28H);
  68. segment INITCODE(CODE,28H)
  69. segment _TEXT(CODE,28H)
  70. segment _FAR_DATA(FAR_DATA,28H)
  71. segment EMU_STATE(DATA,28H)
  72. EMU_STATE__: org 0;
  73. segment STACK(STACK,74H)
  74. STACK__: org 0;
  75. segment BEGDATA(DATA,28H)
  76. BEGDATA__: org 0;
  77. segment _INIT(INIT_CODE,28H)
  78. _INIT__: org 0;
  79. segment CONST(CONST,28H)
  80. CONST__: org 0;
  81. segment _CONST(DATA,28H)
  82. _CONST__: org 0;
  83. segment _DATA(DATA,28H)
  84. _DATA__: org 0;
  85. segment BSS_START(BSS,28H)
  86. BSS_START__: org 0;
  87. segment _BSS(BSS,28H)
  88. _BSS__: org 0;
  89. segment BSS_END(BSS,28H)
  90. BSS_END__: org 0;
  91. group DGROUP(BEGDATA,EMU_STATE,CONST,_CONST,_DATA,BSS_START,_BSS,BSS_END,STACK)
  92. select BEGDATA
  93. beg_data_dummy : dw 0, 0, 0, 0, 0, 0, 0, 0, 0
  94. select _DATA
  95. InitRec: dw 0, 0, 0, _INIT
  96. select BSS_START
  97. public __bss_start:
  98. select BSS_END
  99. public __bss_end:
  100. select _TEXT
  101. extrn _main
  102. extrn __startup
  103. extrn _x_main
  104. extrn _x_initx
  105. extrn _x_bss_end
  106. extrn _x_bss_start
  107. extrn __ireg
  108. extrn INITTASK
  109. extrn __InitLink
  110. extrn exitApp
  111. extrn __initm
  112. select ENTERCODE
  113. public __wstart:
  114. sub bp, bp
  115. push bp (* terminate bp chain ? *)
  116. call far INITTASK
  117. or ax, ax
  118. jz BadApp
  119. mov [__ireg][hInstance], di (* cx contains stack base *)
  120. mov [__ireg][hPrevInst], si
  121. mov [__ireg][PSPSeg], es
  122. mov [__ireg][cmdLine], bx
  123. mov [__ireg][cmdShow], dx
  124. (*%T _fcall*)
  125. mov bx,cs:[mainaddress]
  126. mov word [_x_main][0], bx
  127. mov bx,cs:[mainaddress][2]
  128. mov word [_x_main][2], bx
  129. (*%E*)
  130. (*%F _fcall*)
  131. mov word [_x_main][0], _main
  132. (*%E*)
  133. mov word [_x_bss_end], __bss_end
  134. mov word [_x_bss_start], __bss_start
  135. mov bx, InitRec
  136. mov ax, ds
  137. call far __InitLink
  138. mov ax,cs:[mainaddress][4]
  139. mov word [_x_initx][0], ax
  140. mov ax,cs:[mainaddress][6]
  141. mov word [_x_initx][2], ax
  142. jmp far __startup
  143. BadApp:
  144. mov ax, 0FFH
  145. jmp far exitApp
  146. dw beg_data_dummy
  147. dw EMU_STATE__
  148. dw CONST__
  149. dw _CONST__
  150. dw _DATA__
  151. dw BSS_START__
  152. dw _BSS__
  153. dw BSS_END__ (* establishes order ! *)
  154. dw STACK__
  155. dw 0
  156. mainaddress:
  157. dd _main
  158. dd __initm
  159. end*
  160.