nsis.pas 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. {
  2. Original Code from
  3. (C) 2001 - Peter Windridge
  4. Code in seperate unit and some changes
  5. 2003 by Bernhard Mayer
  6. Fixed and formatted by Brett Dever
  7. http://editor.nfscheats.com/
  8. simply include this unit in your plugin project and export
  9. functions as needed
  10. }
  11. unit nsis;
  12. interface
  13. uses
  14. windows;
  15. type
  16. VarConstants = (
  17. INST_0, // $0
  18. INST_1, // $1
  19. INST_2, // $2
  20. INST_3, // $3
  21. INST_4, // $4
  22. INST_5, // $5
  23. INST_6, // $6
  24. INST_7, // $7
  25. INST_8, // $8
  26. INST_9, // $9
  27. INST_R0, // $R0
  28. INST_R1, // $R1
  29. INST_R2, // $R2
  30. INST_R3, // $R3
  31. INST_R4, // $R4
  32. INST_R5, // $R5
  33. INST_R6, // $R6
  34. INST_R7, // $R7
  35. INST_R8, // $R8
  36. INST_R9, // $R9
  37. INST_CMDLINE, // $CMDLINE
  38. INST_INSTDIR, // $INSTDIR
  39. INST_OUTDIR, // $OUTDIR
  40. INST_EXEDIR, // $EXEDIR
  41. INST_LANG, // $LANGUAGE
  42. __INST_LAST
  43. );
  44. TVariableList = INST_0..__INST_LAST;
  45. pstack_t = ^stack_t;
  46. stack_t = record
  47. next: pstack_t;
  48. text: PChar;
  49. end;
  50. var
  51. g_stringsize: integer;
  52. g_stacktop: ^pstack_t;
  53. g_variables: PChar;
  54. g_hwndParent: HWND;
  55. procedure Init(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer);
  56. function PopString(): string;
  57. procedure PushString(const str: string='');
  58. function GetUserVariable(const varnum: TVariableList): string;
  59. procedure SetUserVariable(const varnum: TVariableList; const value: string);
  60. procedure NSISDialog(const text, caption: string; const buttons: integer);
  61. implementation
  62. procedure Init(const hwndParent: HWND; const string_size: integer; const variables: PChar; const stacktop: pointer);
  63. begin
  64. g_stringsize := string_size;
  65. g_hwndParent := hwndParent;
  66. g_stacktop := stacktop;
  67. g_variables := variables;
  68. end;
  69. function PopString(): string;
  70. var
  71. th: pstack_t;
  72. begin
  73. if integer(g_stacktop^) <> 0 then begin
  74. th := g_stacktop^;
  75. Result := PChar(@th.text);
  76. g_stacktop^ := th.next;
  77. GlobalFree(HGLOBAL(th));
  78. end;
  79. end;
  80. procedure PushString(const str: string='');
  81. var
  82. th: pstack_t;
  83. begin
  84. if integer(g_stacktop) <> 0 then begin
  85. th := pstack_t(GlobalAlloc(GPTR, SizeOf(stack_t) + g_stringsize));
  86. lstrcpyn(@th.text, PChar(str), g_stringsize);
  87. th.next := g_stacktop^;
  88. g_stacktop^ := th;
  89. end;
  90. end;
  91. function GetUserVariable(const varnum: TVariableList): string;
  92. begin
  93. if (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then
  94. Result := g_variables + integer(varnum) * g_stringsize
  95. else
  96. Result := '';
  97. end;
  98. procedure SetUserVariable(const varnum: TVariableList; const value: string);
  99. begin
  100. if (value <> '') and (integer(varnum) >= 0) and (integer(varnum) < integer(__INST_LAST)) then
  101. lstrcpy(g_variables + integer(varnum) * g_stringsize, PChar(value))
  102. end;
  103. procedure NSISDialog(const text, caption: string; const buttons: integer);
  104. begin
  105. MessageBox(g_hwndParent, PChar(text), PChar(caption), buttons);
  106. end;
  107. begin
  108. end.