MAIN.A 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * MAIN.A *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. sameCS = 1 - ( (model / 1) & 1 ) (* True in S and C models *)
  11. sameDS = 1 - ( (model / 2) & 1 ) (* False in XL model *)
  12. NearPtr = 1 - ( (model / 4) & 1 ) (* True in S and M models *)
  13. _OS2_MT = (model / 8) & 1 (* True in MT model *)
  14. RegParam = (model / 16) & 1 (* True if register parameters *)
  15. (*%F sameCS *)
  16. frame = 6 (* Far call stack frame *)
  17. (*%E *)
  18. (*%T sameCS *)
  19. frame = 4 (* Near call stack frame *)
  20. (*%E *)
  21. (* One option must be True *)
  22. Main0Args = 0 (* no main parameters *)
  23. Main2Args = 0 (* Brings in command line only *)
  24. Main3Args = 1 (* Brings in command line and environment *)
  25. (* These Are Default values *)
  26. StackSize = 04000H (* sets stack size *)
  27. HeapSize = 0FFFFH (* sets maximum near heap size *)
  28. SSinDGROUP = 1 (* selects near stack *)
  29. module main
  30. segment STACK(STACK,74H)
  31. segment _TEXT(CODE,28H)
  32. segment _DATA(DATA, 28H)
  33. RetCode = 0
  34. select _TEXT (* main must use _TEXT if S or C models *)
  35. public _main :
  36. (*%F RegParam *) (* Stack frame calling convention *)
  37. (*%F NearPtr *) (* Far data pointer models M, L, MT *)
  38. ArgC = frame
  39. ArgV = 2+frame
  40. EnvV = 6+frame
  41. RetSize = 0
  42. (*%E *)
  43. (*%T NearPtr *) (* Near data pointer models S, C *)
  44. ArgC = frame
  45. ArgV = 2+frame
  46. EnvV = 4+frame
  47. RetSize = 0
  48. (*%E *)
  49. (*%E *)
  50. (*%T RegParam *) (* Register parameter calling convention *)
  51. (*%F NearPtr *) (* Far data pointer models M, L, MT *)
  52. EnvV = frame (* ArgC = ax, ArgV = cx:bx *)
  53. RetSize = 0
  54. (*%E *)
  55. (*%T NearPtr *)
  56. RetSize = 0
  57. (*%E *)
  58. (* Far data pointer models M, L, MT *)
  59. (*%E *) (* ArgC = ax, ArgV = bx, EnvV = cx *)
  60. push bp
  61. mov bp, sp
  62. (* your stuff here *)
  63. mov ax, RetCode (* Return Code in ax *)
  64. pop bp
  65. (*%F sameCS *)
  66. ret far RetSize (* far return for M, L, MT models *)
  67. (*%E *)
  68. (*%T sameCS *)
  69. ret RetSize (* near return for S, C models *)
  70. (*%E *)
  71. (*****************************************************************************)
  72. section
  73. segment NEAR_STACK(BSS, 28H)
  74. public __near_stack_start :
  75. (*%T SSinDGROUP *)
  76. org StackSize
  77. (*%E *)
  78. (*%F SSinDGROUP *)
  79. org 1
  80. (*%E *)
  81. db 0
  82. section
  83. segment NEAR_HEAP(BSS, 28H)
  84. public __near_heap_start :
  85. org HeapSize
  86. db 0
  87. section
  88. segment _TEXT(CODE,28H)
  89. segment _DATA(DATA, 28H)
  90. select _DATA
  91. (*%T Main3Args*)
  92. extrn __main_args3
  93. public __initx: dw __main_args3; dw _TEXT
  94. (*%E *)
  95. (*%T Main2Args*)
  96. extrn __main_args2
  97. public __initx: dw __main_args2; dw _TEXT
  98. (*%E *)
  99. (*%T Main0Args*)
  100. extrn __call_main
  101. public __initx: dw __call_main; dw _TEXT
  102. (*%E *)
  103. dw StackSize
  104. dw HeapSize
  105. db SSinDGROUP
  106. end
  107.