home *** CD-ROM | disk | FTP | other *** search
/ Software Collection (I) / TOOLS.iso / c04 / 13.img / RTLINC.ZIP / SE.ASM
Encoding:
Assembly Source File  |  1992-10-28  |  6.9 KB  |  360 lines

  1. ; *******************************************************
  2. ; *                            *
  3. ; *    VERSION CONTROL EQUATES                *
  4. ; *                            *
  5. ; *******************************************************
  6.  
  7. ; Boolean values
  8.  
  9. FALSE        EQU    0
  10. TRUE        EQU    NOT FALSE
  11.  
  12. ; Version equates
  13.  
  14.     IFDEF _Windows_
  15. WindowsVersion    EQU    TRUE
  16. DPMIVersion    EQU    FALSE
  17.     ELSE
  18.     IFDEF _DPMI_
  19. WindowsVersion    EQU    FALSE
  20. DPMIVersion    EQU    TRUE
  21.     ELSE
  22. WindowsVersion    EQU    FALSE
  23. DPMIVersion    EQU    FALSE
  24.     ENDIF
  25.     ENDIF
  26.  
  27. ; *******************************************************
  28. ; *                            *
  29. ; *    MACROS                        *
  30. ; *                            *
  31. ; *******************************************************
  32.  
  33.     LOCALS    @@
  34.  
  35. ; Public variable definition macro
  36.  
  37. VAR MACRO Symbol,SType,Count
  38.   PUBLIC Symbol
  39.   Symbol LABEL SType
  40.   IF Count
  41.     DB SType * Count DUP(?)
  42.   ENDIF
  43. ENDM
  44.  
  45. ; Parameter definition macro
  46.  
  47. ARG MACRO Symbol,SType,Count
  48.   LOCAL Offset
  49.   @AP = @AP + SType * Count
  50.   Offset = @AP
  51.   Symbol EQU (SType PTR [BP+@AF-Offset])
  52. ENDM
  53.  
  54. @AP = 0
  55. @AF = 0
  56.  
  57. ; Local variables definition macro
  58.  
  59. LOC MACRO Symbol,SType,Count
  60.   LOCAL Offset
  61.   @LP = @LP + SType * Count
  62.   Offset = @LP
  63.   Symbol EQU (SType PTR [BP+@LF-Offset])
  64. ENDM
  65.  
  66. @LP = 0
  67. @LF = 0
  68.  
  69. ; Stack frame modifiers
  70.  
  71. sfFar        EQU    01H        ;FAR frame
  72. sfMarkBP    EQU    02H        ;Make saved BP odd
  73. sfSaveDS    EQU    04H        ;Save DS at [BP-2]
  74. sfInitDS    EQU    08H        ;Init DS using SS
  75.  
  76. ; Default stack frame type
  77.  
  78. sfDefault = 0
  79.  
  80. ; Stack frame types
  81.  
  82.     IF WindowsVersion
  83. WINFAR        EQU    sfFar+sfMarkBP+sfSaveDS
  84.     ELSE
  85. WINFAR        EQU    sfFar
  86.     ENDIF
  87.  
  88. ; Entry code generation macro
  89.  
  90. ENTRY MACRO FrameType
  91.   IFB <FrameType>
  92.     @SF = sfDefault
  93.   ELSE
  94.     IFIDNI <FrameType>,<NEAR>
  95.       @SF = 0
  96.     ELSE
  97.       IFIDNI <FrameType>,<FAR>
  98.         @SF = sfFar
  99.       ELSE
  100.         @SF = FrameType
  101.       ENDIF
  102.     ENDIF
  103.   ENDIF
  104.   IF @SF AND sfMarkBP
  105.     INC BP
  106.   ENDIF
  107.   PUSH BP
  108.   MOV BP,SP
  109.   IF @SF AND sfFar
  110.     @AF = @AP + 6
  111.   ELSE
  112.     @AF = @AP + 4
  113.   ENDIF
  114.   IF @SF AND sfSaveDS
  115.     PUSH DS
  116.     @LF = -2
  117.   ELSE
  118.     @LF = 0
  119.   ENDIF
  120.   IF @LP
  121.     SUB SP,@LP
  122.   ENDIF
  123.   IF @SF AND sfInitDS
  124.     PUSH DS
  125.     PUSH SS
  126.     POP DS
  127.   ENDIF
  128. ENDM
  129.  
  130. ; Exit code generation macro
  131.  
  132. EXIT MACRO ArgSize
  133.   IF @SF AND sfInitDS
  134.     POP DS
  135.   ENDIF
  136.   IF @LF - @LP
  137.     MOV SP,BP
  138.   ENDIF
  139.   POP BP
  140.   IF @SF AND sfMarkBP
  141.     DEC BP
  142.   ENDIF
  143.   IFNB <ArgSize>
  144.     @AP = ArgSize
  145.   ENDIF
  146.   IF @SF AND sfFar
  147.     RETF @AP
  148.   ELSE
  149.     RETN @AP
  150.   ENDIF
  151.   @AP = 0
  152.   @LP = 0
  153. ENDM
  154.  
  155. ; *******************************************************
  156. ; *                            *
  157. ; *    EQUATES                        *
  158. ; *                            *
  159. ; *******************************************************
  160.  
  161. ; 10-Byte record
  162.  
  163. b0        EQU    (BYTE PTR 0)
  164. b1        EQU    (BYTE PTR 1)
  165. b2        EQU    (BYTE PTR 2)
  166. b3        EQU    (BYTE PTR 3)
  167. b4        EQU    (BYTE PTR 4)
  168. b5        EQU    (BYTE PTR 5)
  169. b6        EQU    (BYTE PTR 6)
  170. b7        EQU    (BYTE PTR 7)
  171. b8        EQU    (BYTE PTR 8)
  172. b9        EQU    (BYTE PTR 9)
  173.  
  174. ; 5-Word record
  175.  
  176. w0        EQU    (WORD PTR 0)
  177. w2        EQU    (WORD PTR 2)
  178. w4        EQU    (WORD PTR 4)
  179. w6        EQU    (WORD PTR 6)
  180. w8        EQU    (WORD PTR 8)
  181.  
  182. ; Pointer record
  183.  
  184. ofs        EQU    (WORD PTR 0)
  185. seg        EQU    (WORD PTR 2)
  186.  
  187. ; 8087 status word masks
  188.  
  189. mIE        EQU    0001H
  190. mDE        EQU    0002H
  191. mZE        EQU    0004H
  192. mOE        EQU    0008H
  193. mUE        EQU    0010H
  194. mPE        EQU    0020H
  195. mC0        EQU    0100H
  196. mC1        EQU    0200H
  197. mC2        EQU    0400H
  198. mC3        EQU    4000H
  199.  
  200. ; ASCII equates
  201.  
  202. bell        EQU    07H
  203. bs        EQU    08H
  204. tab        EQU    09H
  205. lf        EQU    0AH
  206. cr        EQU    0DH
  207. eof        EQU    1AH
  208. esc        EQU    1BH
  209. del        EQU    7FH
  210.  
  211. ; DOS interrupt vector number
  212.  
  213. DOS        EQU    21H
  214.  
  215. ; DOS function codes
  216.  
  217. dosSetDrive    EQU    0EH
  218. dosGetDrive    EQU    19H
  219. dosSetDTA    EQU    1AH
  220. dosSetInt    EQU    25H
  221. dosParse    EQU    29H
  222. dosGetDate    EQU    2AH
  223. dosSetDate    EQU    2BH
  224. dosGetTime    EQU    2CH
  225. dosSetTime    EQU    2DH
  226. dosGetVersion    EQU    30H
  227. dosGetInt    EQU    35H
  228. dosCreateDir    EQU    39H
  229. dosRemoveDir    EQU    3AH
  230. dosSetDir    EQU    3BH
  231. dosCreate    EQU    3CH
  232. dosOpen        EQU    3DH
  233. dosClose    EQU    3EH
  234. dosRead        EQU    3FH
  235. dosWrite    EQU    40H
  236. dosDelete    EQU    41H
  237. dosSeek        EQU    42H
  238. dosAttrib    EQU    43H
  239. dosIOCtl    EQU    44H
  240. dosGetDir    EQU    47H
  241. dosSetMem    EQU    4AH
  242. dosExec        EQU    4BH
  243. dosExit        EQU    4CH
  244. dosGetExit    EQU    4DH
  245. dosFindFirst    EQU    4EH
  246. dosSetPSP    EQU    50H
  247. dosGetPSP    EQU    51H
  248. dosMakePSP    EQU    55H
  249. dosRename    EQU    56H
  250. dosFDate    EQU    57H
  251.  
  252. ; Program segment prefix variables
  253.  
  254. pspMemTop    EQU    (WORD PTR 02H)
  255. pspFileTab    EQU    (BYTE PTR 18H)
  256. pspEnvSeg    EQU    (WORD PTR 2CH)
  257. pspFCB1        EQU    (BYTE PTR 5CH)
  258. pspFCB2        EQU    (BYTE PTR 6CH)
  259. pspCmdLine    EQU    (BYTE PTR 80H)
  260.  
  261. ; Free-list memory record layout
  262.  
  263. mNext        EQU    (DWORD PTR 0)
  264. mSize        EQU    (DWORD PTR 4)
  265. mRecSize    EQU    8
  266.  
  267. ; File record layout
  268.  
  269. fHandle        EQU    (WORD PTR 0)
  270. fMode        EQU    (WORD PTR 2)
  271. fBufSize    EQU    (WORD PTR 4)
  272. fPrivate    EQU    (WORD PTR 6)
  273. fBufPos        EQU    (WORD PTR 8)
  274. fBufEnd        EQU    (WORD PTR 10)
  275. fBufPtr        EQU    (DWORD PTR 12)
  276. fOpenProc    EQU    (DWORD PTR 16)
  277. fInOutProc    EQU    (DWORD PTR 20)
  278. fFlushProc    EQU    (DWORD PTR 24)
  279. fCloseProc    EQU    (DWORD PTR 28)
  280. fUserData    EQU    (BYTE PTR 32)
  281. fName        EQU    (BYTE PTR 48)
  282. fBuffer        EQU    (BYTE PTR 128)
  283. fRecSize    EQU    256
  284.  
  285. ; fMode values
  286.  
  287. fmClosed    EQU    0D7B0H
  288. fmInput        EQU    0D7B1H
  289. fmOutput    EQU    0D7B2H
  290. fmInOut        EQU    0D7B3H
  291.  
  292. ; Overlay header record
  293.  
  294. ovSignature    EQU    (WORD PTR 0)
  295. ovSaveReturn    EQU    (WORD PTR 2)
  296. ovFilePos    EQU    (WORD PTR 4)
  297. ovCodeSize    EQU    (WORD PTR 8)
  298. ovFixupSize    EQU    (WORD PTR 10)
  299. ovJumpCount    EQU    (WORD PTR 12)
  300. ovLink        EQU    (WORD PTR 14)
  301. ovSegment    EQU    (WORD PTR 16)
  302. ovRetryCount    EQU    (WORD PTR 18)
  303. ovNext        EQU    (WORD PTR 20)
  304. ovEmsPage    EQU    (WORD PTR 22)
  305. ovEmsOffset    EQU    (WORD PTR 24)
  306. ovUserData    EQU    (BYTE PTR 26)
  307. ovVectors    EQU    (BYTE PTR 32)
  308. ovRecSize    EQU    32
  309.  
  310. ; Windows data segment variables
  311.  
  312. pPtrCount    EQU    (WORD PTR DS:04H)
  313. pLocalHeap    EQU    (WORD PTR DS:06H)
  314. pAtomTable    EQU    (WORD PTR DS:08H)
  315. pStackTop    EQU    (WORD PTR DS:0AH)
  316. pStackBot    EQU    (WORD PTR DS:0CH)
  317. pStackMin    EQU    (WORD PTR DS:0EH)
  318.  
  319. ; DPMI interrupt vector
  320.  
  321. DPMI        EQU    31H
  322.  
  323. ; DPMI function codes
  324.  
  325. dpmiGetDesc    EQU    0000H        ;Allocate descriptors
  326. dpmiFreeDesc    EQU    0001H        ;Free descriptor
  327. dpmiSegToDesc    EQU    0002H        ;Map segment to descriptor
  328. dpmiGetSelInc    EQU    0003H        ;Get selector increment value
  329. dpmiGetSegBase    EQU    0006H        ;Get segment base address
  330. dpmiSetSegBase    EQU    0007H        ;Set segment base address
  331. dpmiSetSegSize    EQU    0008H        ;Set segment size
  332. dpmiGetRealInt    EQU    0200H        ;Get real mode int handler
  333. dpmiSetRealInt    EQU    0201H        ;Set real mode int handler
  334. dpmiGetExcept    EQU    0202H        ;Get exception handler
  335. dpmiSetExcept    EQU    0203H        ;Set exception handler
  336. dpmiGetInt    EQU    0204H        ;Get interrupt handler
  337. dpmiSetInt    EQU    0205H        ;Set interrupt handler
  338. dpmiGetRMCB    EQU    0303H        ;Get real mode call-back
  339. dpmiGetVersion    EQU    0400H        ;Get version information
  340.  
  341. ; Real mode call-back registers structure
  342.  
  343. realDI        EQU    (DWORD PTR 00H)
  344. realSI        EQU    (DWORD PTR 04H)
  345. realBP        EQU    (DWORD PTR 08H)
  346. realBX        EQU    (DWORD PTR 10H)
  347. realDX        EQU    (DWORD PTR 14H)
  348. realCX        EQU    (DWORD PTR 18H)
  349. realAX        EQU    (DWORD PTR 1CH)
  350. realFlags    EQU    (WORD PTR 20H)
  351. realES        EQU    (WORD PTR 22H)
  352. realDS        EQU    (WORD PTR 24H)
  353. realFS        EQU    (WORD PTR 26H)
  354. realGS        EQU    (WORD PTR 28H)
  355. realIP        EQU    (WORD PTR 2AH)
  356. realCS        EQU    (WORD PTR 2CH)
  357. realSP        EQU    (WORD PTR 2EH)
  358. realSS        EQU    (WORD PTR 30H)
  359. realRegsSize    EQU    32H
  360.