MAIN.A 3.2 KB

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