home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 March / CMCD0304.ISO / Software / Freeware / Programare / nullsoft / nsis20.exe / Contrib / ExDLL / extdll.inc < prev    next >
Text File  |  2003-08-07  |  3KB  |  146 lines

  1. ;################################################################
  2. ; ExtDLL header for MASM32
  3. ;
  4. ; Author: Ramon
  5. ;
  6. ; Obs: This header must be included after windows.inc and kernel32.inc
  7. ;      because it need the prototypes for lstrcpy, lstrcpyn, 
  8. ;      GlobalAlloc and GlobalFree
  9. ;
  10. ;################################################################
  11. stack_t struct
  12.   next dd ?
  13.   text dd ? ; 1 DUP(?) ; this should be the length of string_size
  14. stack_t ends
  15.  
  16. .const
  17. ; For page showing plug-ins
  18. WM_NOTIFY_OUTER_NEXT   equ (WM_USER+0x8)
  19. WM_NOTIFY_CUSTOM_READY equ (WM_USER+0xd)
  20. NOTIFY_BYE_BYE         equ 'x'
  21.  
  22. INST_0 EQU 0         ; $0
  23. INST_1 EQU 1         ; $1
  24. INST_2 EQU 2         ; $2
  25. INST_3 EQU 3         ; $3
  26. INST_4 EQU 4         ; $4
  27. INST_5 EQU 5         ; $5
  28. INST_6 EQU 6         ; $6
  29. INST_7 EQU 7         ; $7
  30. INST_8 EQU 8         ; $8
  31. INST_9 EQU 9         ; $9
  32. INST_R0 EQU 10        ; $R0
  33. INST_R1 EQU 11        ; $R1
  34. INST_R2 EQU 12        ; $R2
  35. INST_R3 EQU 13        ; $R3
  36. INST_R4 EQU 14        ; $R4
  37. INST_R5 EQU 15        ; $R5
  38. INST_R6 EQU 16        ; $R6
  39. INST_R7 EQU 17        ; $R7
  40. INST_R8 EQU 18        ; $R8
  41. INST_R9 EQU 19        ; $R9
  42. INST_CMDLINE EQU 20   ; $CMDLINE
  43. INST_INSTDIR EQU 21   ; $INSTDIR
  44. INST_OUTDIR EQU 22    ; $OUTDIR
  45. INST_EXEDIR EQU 23    ; $EXEDIR
  46. INST_LANG EQU 24      ; $LANGUAGE
  47. __INST_LAST EQU 25
  48.  
  49. .data?
  50. g_stringsize dd ?
  51. g_stacktop dd ?
  52. g_variables dd ?
  53.  
  54. m2m MACRO M1, M2
  55.       push M2
  56.       pop  M1
  57. ENDM
  58.  
  59. EXDLL_INIT MACRO
  60.       m2m g_stringsize, string_size
  61.       m2m g_stacktop, stacktop
  62.       m2m g_variables, variables
  63. ENDM
  64.  
  65. .code
  66.  
  67. ; utility functions (not required but often useful)
  68. popstring proc uses edi pStr:DWORD
  69.  
  70.   LOCAL th:DWORD
  71.  
  72.   mov edi, g_stacktop
  73.   cmp edi, 0
  74.   jz  STACK_ERR
  75.   mov edi, [edi]
  76.   cmp edi, 0
  77.   jz  STACK_ERR
  78.  
  79.   ASSUME edi:PTR stack_t
  80.   invoke lstrcpy, pStr, ADDR [edi].text
  81.   mov th , edi
  82.   mov edi, [edi].next
  83.   mov eax, g_stacktop
  84.   mov [eax], edi
  85.   invoke GlobalFree, th
  86.   ASSUME edi:PTR NOTHING
  87.   mov eax, 0
  88.   ret
  89.   
  90. STACK_ERR:
  91.   mov eax, 1
  92.   ret
  93.  
  94. popstring endp
  95.  
  96. pushstring proc uses edi pStr:DWORD
  97.  
  98.   cmp g_stacktop, 0
  99.   jz  STACK_ERR
  100.  
  101.   mov eax, sizeof stack_t
  102.   add eax, g_stringsize
  103.   invoke GlobalAlloc, GPTR, eax
  104.  
  105.   mov edi, eax
  106.   assume edi:PTR stack_t
  107.  
  108.   invoke lstrcpyn, ADDR [edi].text, pStr, g_stringsize
  109.   mov eax, g_stacktop
  110.   push DWORD PTR[eax]
  111.   mov [eax], edi
  112.   pop eax
  113.   ;lea edi, [edi].next ; Not needed [edi].next == edi
  114.   mov DWORD PTR[edi], eax
  115.   ASSUME edi:PTR NOTHING
  116.  
  117. STACK_ERR:
  118.   ret
  119.  
  120. pushstring endp
  121.  
  122. getuservariable proc varnum:DWORD
  123.  
  124.   .if varnum < 0 || varnum >= __INST_LAST
  125.     xor eax, eax
  126.   .else
  127.     mov eax, varnum
  128.     imul eax, g_stringsize
  129.     add eax, g_variables
  130.   .endif
  131.   ret
  132.  
  133. getuservariable endp
  134.  
  135. setuservariable proc varnum:DWORD, var:DWORD
  136.  
  137.   .if (var != NULL && varnum >= 0 && varnum < __INST_LAST)
  138.     mov eax, varnum
  139.     imul eax, g_stringsize
  140.     add eax, g_variables
  141.     invoke lstrcpy, eax, var
  142.   .endif
  143.   ret
  144.  
  145. setuservariable endp
  146.