INITMWIN.A 3.2 KB

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