Newer
Older
CVSS_3.0_GUI / node_modules / nwjs-builder-phoenix / assets / nsis / Include / WordFunc.nsh
root on 7 May 2019 40 KB Initial commit
  1. /*
  2. _____________________________________________________________________________
  3.  
  4. Word Functions Header v3.3
  5. _____________________________________________________________________________
  6.  
  7. 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
  8.  
  9. See documentation for more information about the following functions.
  10.  
  11. Usage in script:
  12. 1. !include "WordFunc.nsh"
  13. 2. [Section|Function]
  14. ${WordFunction} "Param1" "Param2" "..." $var
  15. [SectionEnd|FunctionEnd]
  16.  
  17.  
  18. WordFunction=[WordFind|WordFindS|WordFind2X|WordFind2XS|WordFind3X|WordFind3XS|
  19. WordReplace|WordReplaceS|WordAdd|WordAddS|WordInsert|WordInsertS|
  20. StrFilter|StrFilterS|VersionCompare|VersionConvert]
  21.  
  22. _____________________________________________________________________________
  23.  
  24. Thanks to:
  25. _____________________________________________________________________________
  26.  
  27. WordFind3X
  28. Afrow UK (Based on his idea of Function "StrSortLR")
  29. StrFilter
  30. sunjammer (Function "StrUpper")
  31. VersionCompare
  32. Afrow UK (Based on his Function "VersionCheckNew2")
  33. VersionConvert
  34. Afrow UK (Based on his idea of Function "CharIndexReplace")
  35. */
  36.  
  37.  
  38. ;_____________________________________________________________________________
  39. ;
  40. ; Macros
  41. ;_____________________________________________________________________________
  42. ;
  43. ; Change log window verbosity (default: 3=no script)
  44. ;
  45. ; Example:
  46. ; !include "WordFunc.nsh"
  47. ; !insertmacro WordFind
  48. ; ${WORDFUNC_VERBOSE} 4 # all verbosity
  49. ; !insertmacro WordReplace
  50. ; ${WORDFUNC_VERBOSE} 3 # no script
  51.  
  52. !ifndef WORDFUNC_INCLUDED
  53.  
  54. !verbose push 3
  55. !define /IfNDef _WORDFUNC_VERBOSE 3
  56. !verbose ${_WORDFUNC_VERBOSE}
  57. !define WORDFUNC_VERBOSE `!insertmacro WORDFUNC_VERBOSE`
  58.  
  59. !define WORDFUNC_INCLUDED
  60.  
  61. !include Util.nsh
  62.  
  63.  
  64. !macro WORDFUNC_VERBOSE _VERBOSE
  65. !verbose push 3
  66. !define /ReDef _WORDFUNC_VERBOSE ${_VERBOSE}
  67. !verbose pop
  68. !macroend
  69.  
  70.  
  71. !macro WordFindCall _ART _STRING _DELIMITER _OPTION _RESULT
  72. !verbose push
  73. !verbose ${_WORDFUNC_VERBOSE}
  74. Push `${_STRING}`
  75. Push `${_DELIMITER}`
  76. Push `${_OPTION}`
  77. ${CallArtificialFunction}${_ART} WordFind_
  78. Pop ${_RESULT}
  79. !verbose pop
  80. !macroend
  81.  
  82. !macro WordFindSCall _ART _STRING _DELIMITER _OPTION _RESULT
  83. !verbose push
  84. !verbose ${_WORDFUNC_VERBOSE}
  85. Push `${_STRING}`
  86. Push `${_DELIMITER}`
  87. Push `${_OPTION}`
  88. ${CallArtificialFunction}${_ART} WordFindS_
  89. Pop ${_RESULT}
  90. !verbose pop
  91. !macroend
  92.  
  93. !macro WordFind2XCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
  94. !verbose push
  95. !verbose ${_WORDFUNC_VERBOSE}
  96. Push `${_STRING}`
  97. Push `${_DELIMITER1}`
  98. Push `${_DELIMITER2}`
  99. Push `${_NUMBER}`
  100. ${CallArtificialFunction} WordFind2X_
  101. Pop ${_RESULT}
  102. !verbose pop
  103. !macroend
  104.  
  105. !macro WordFind2XSCall _STRING _DELIMITER1 _DELIMITER2 _NUMBER _RESULT
  106. !verbose push
  107. !verbose ${_WORDFUNC_VERBOSE}
  108. Push `${_STRING}`
  109. Push `${_DELIMITER1}`
  110. Push `${_DELIMITER2}`
  111. Push `${_NUMBER}`
  112. ${CallArtificialFunction} WordFind2XS_
  113. Pop ${_RESULT}
  114. !verbose pop
  115. !macroend
  116.  
  117. !macro WordFind3XCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
  118. !verbose push
  119. !verbose ${_WORDFUNC_VERBOSE}
  120. Push `${_STRING}`
  121. Push `${_DELIMITER1}`
  122. Push `${_CENTER}`
  123. Push `${_DELIMITER2}`
  124. Push `${_NUMBER}`
  125. ${CallArtificialFunction} WordFind3X_
  126. Pop ${_RESULT}
  127. !verbose pop
  128. !macroend
  129.  
  130. !macro WordFind3XSCall _STRING _DELIMITER1 _CENTER _DELIMITER2 _NUMBER _RESULT
  131. !verbose push
  132. !verbose ${_WORDFUNC_VERBOSE}
  133. Push `${_STRING}`
  134. Push `${_DELIMITER1}`
  135. Push `${_CENTER}`
  136. Push `${_DELIMITER2}`
  137. Push `${_NUMBER}`
  138. ${CallArtificialFunction} WordFind3XS_
  139. Pop ${_RESULT}
  140. !verbose pop
  141. !macroend
  142.  
  143. !macro WordReplaceCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
  144. !verbose push
  145. !verbose ${_WORDFUNC_VERBOSE}
  146. Push `${_STRING}`
  147. Push `${_WORD1}`
  148. Push `${_WORD2}`
  149. Push `${_NUMBER}`
  150. ${CallArtificialFunction} WordReplace_
  151. Pop ${_RESULT}
  152. !verbose pop
  153. !macroend
  154.  
  155. !macro WordReplaceSCall _STRING _WORD1 _WORD2 _NUMBER _RESULT
  156. !verbose push
  157. !verbose ${_WORDFUNC_VERBOSE}
  158. Push `${_STRING}`
  159. Push `${_WORD1}`
  160. Push `${_WORD2}`
  161. Push `${_NUMBER}`
  162. ${CallArtificialFunction} WordReplaceS_
  163. Pop ${_RESULT}
  164. !verbose pop
  165. !macroend
  166.  
  167. !macro WordAddCall _STRING1 _DELIMITER _STRING2 _RESULT
  168. !verbose push
  169. !verbose ${_WORDFUNC_VERBOSE}
  170. Push `${_STRING1}`
  171. Push `${_DELIMITER}`
  172. Push `${_STRING2}`
  173. ${CallArtificialFunction} WordAdd_
  174. Pop ${_RESULT}
  175. !verbose pop
  176. !macroend
  177.  
  178. !macro WordAddSCall _STRING1 _DELIMITER _STRING2 _RESULT
  179. !verbose push
  180. !verbose ${_WORDFUNC_VERBOSE}
  181. Push `${_STRING1}`
  182. Push `${_DELIMITER}`
  183. Push `${_STRING2}`
  184. ${CallArtificialFunction} WordAddS_
  185. Pop ${_RESULT}
  186. !verbose pop
  187. !macroend
  188.  
  189. !macro WordInsertCall _STRING _DELIMITER _WORD _NUMBER _RESULT
  190. !verbose push
  191. !verbose ${_WORDFUNC_VERBOSE}
  192. Push `${_STRING}`
  193. Push `${_DELIMITER}`
  194. Push `${_WORD}`
  195. Push `${_NUMBER}`
  196. ${CallArtificialFunction} WordInsert_
  197. Pop ${_RESULT}
  198. !verbose pop
  199. !macroend
  200.  
  201. !macro WordInsertSCall _STRING _DELIMITER _WORD _NUMBER _RESULT
  202. !verbose push
  203. !verbose ${_WORDFUNC_VERBOSE}
  204. Push `${_STRING}`
  205. Push `${_DELIMITER}`
  206. Push `${_WORD}`
  207. Push `${_NUMBER}`
  208. ${CallArtificialFunction} WordInsertS_
  209. Pop ${_RESULT}
  210. !verbose pop
  211. !macroend
  212.  
  213. !macro StrFilterCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
  214. !verbose push
  215. !verbose ${_WORDFUNC_VERBOSE}
  216. Push `${_STRING}`
  217. Push `${_FILTER}`
  218. Push `${_INCLUDE}`
  219. Push `${_EXCLUDE}`
  220. ${CallArtificialFunction} StrFilter_
  221. Pop ${_RESULT}
  222. !verbose pop
  223. !macroend
  224.  
  225. !macro StrFilterSCall _STRING _FILTER _INCLUDE _EXCLUDE _RESULT
  226. !verbose push
  227. !verbose ${_WORDFUNC_VERBOSE}
  228. Push `${_STRING}`
  229. Push `${_FILTER}`
  230. Push `${_INCLUDE}`
  231. Push `${_EXCLUDE}`
  232. ${CallArtificialFunction} StrFilterS_
  233. Pop ${_RESULT}
  234. !verbose pop
  235. !macroend
  236.  
  237. !macro VersionCompareCall _VER1 _VER2 _RESULT
  238. !verbose push
  239. !verbose ${_WORDFUNC_VERBOSE}
  240. Push `${_VER1}`
  241. Push `${_VER2}`
  242. ${CallArtificialFunction} VersionCompare_
  243. Pop ${_RESULT}
  244. !verbose pop
  245. !macroend
  246.  
  247. !macro VersionConvertCall _VERSION _CHARLIST _RESULT
  248. !verbose push
  249. !verbose ${_WORDFUNC_VERBOSE}
  250. Push `${_VERSION}`
  251. Push `${_CHARLIST}`
  252. ${CallArtificialFunction} VersionConvert_
  253. Pop ${_RESULT}
  254. !verbose pop
  255. !macroend
  256.  
  257. !macro WordFindBody _WORDFUNC_S
  258. Exch $1
  259. Exch
  260. Exch $0
  261. Exch
  262. Exch 2
  263. Exch $R0
  264. Exch 2
  265. Push $2
  266. Push $3
  267. Push $4
  268. Push $5
  269. Push $6
  270. Push $7
  271. Push $8
  272. Push $9
  273. Push $R1
  274. Push $R2
  275. ClearErrors
  276.  
  277. StrCpy $9 ''
  278. StrCpy $2 $1 1
  279. StrCpy $1 $1 '' 1
  280. StrCmp $2 'E' 0 +3
  281. StrCpy $9 E
  282. goto -4
  283.  
  284. StrCpy $3 ''
  285. StrCmp${_WORDFUNC_S} $2 '+' +6
  286. StrCmp${_WORDFUNC_S} $2 '-' +5
  287. StrCmp${_WORDFUNC_S} $2 '/' WordFunc_WordFind${_WORDFUNC_S}_restart
  288. StrCmp${_WORDFUNC_S} $2 '#' WordFunc_WordFind${_WORDFUNC_S}_restart
  289. StrCmp${_WORDFUNC_S} $2 '*' WordFunc_WordFind${_WORDFUNC_S}_restart
  290. goto WordFunc_WordFind${_WORDFUNC_S}_error3
  291.  
  292. StrCpy $4 $1 1 -1
  293. StrCmp${_WORDFUNC_S} $4 '*' +4
  294. StrCmp${_WORDFUNC_S} $4 '}' +3
  295. StrCmp${_WORDFUNC_S} $4 '{' +2
  296. goto +4
  297. StrCpy $1 $1 -1
  298. StrCpy $3 '$4$3'
  299. goto -7
  300. StrCmp${_WORDFUNC_S} $3 '*' WordFunc_WordFind${_WORDFUNC_S}_error3
  301. StrCmp${_WORDFUNC_S} $3 '**' WordFunc_WordFind${_WORDFUNC_S}_error3
  302. StrCmp${_WORDFUNC_S} $3 '}{' WordFunc_WordFind${_WORDFUNC_S}_error3
  303. IntOp $1 $1 + 0
  304. StrCmp${_WORDFUNC_S} $1 0 WordFunc_WordFind${_WORDFUNC_S}_error2
  305.  
  306. WordFunc_WordFind${_WORDFUNC_S}_restart:
  307. StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind${_WORDFUNC_S}_error1
  308. StrCpy $4 0
  309. StrCpy $5 0
  310. StrCpy $6 0
  311. StrLen $7 $0
  312. goto WordFunc_WordFind${_WORDFUNC_S}_loop
  313.  
  314. WordFunc_WordFind${_WORDFUNC_S}_preloop:
  315. IntOp $6 $6 + 1
  316.  
  317. WordFunc_WordFind${_WORDFUNC_S}_loop:
  318. StrCpy $8 $R0 $7 $6
  319. StrCmp${_WORDFUNC_S} $8$5 0 WordFunc_WordFind${_WORDFUNC_S}_error1
  320. StrLen $R2 $8
  321. IntCmp $R2 0 +2
  322. StrCmp${_WORDFUNC_S} $8 $0 +5 WordFunc_WordFind${_WORDFUNC_S}_preloop
  323. StrCmp${_WORDFUNC_S} $3 '{' WordFunc_WordFind${_WORDFUNC_S}_minus
  324. StrCmp${_WORDFUNC_S} $3 '}' WordFunc_WordFind${_WORDFUNC_S}_minus
  325. StrCmp${_WORDFUNC_S} $2 '*' WordFunc_WordFind${_WORDFUNC_S}_minus
  326. StrCmp${_WORDFUNC_S} $5 $6 WordFunc_WordFind${_WORDFUNC_S}_minus +5
  327. StrCmp${_WORDFUNC_S} $3 '{' +4
  328. StrCmp${_WORDFUNC_S} $3 '}' +3
  329. StrCmp${_WORDFUNC_S} $2 '*' +2
  330. StrCmp${_WORDFUNC_S} $5 $6 WordFunc_WordFind${_WORDFUNC_S}_nextword
  331. IntOp $4 $4 + 1
  332. StrCmp${_WORDFUNC_S} $2$4 +$1 WordFunc_WordFind${_WORDFUNC_S}_plus
  333. StrCmp${_WORDFUNC_S} $2 '/' 0 WordFunc_WordFind${_WORDFUNC_S}_nextword
  334. IntOp $8 $6 - $5
  335. StrCpy $8 $R0 $8 $5
  336. StrCmp${_WORDFUNC_S} $1 $8 0 WordFunc_WordFind${_WORDFUNC_S}_nextword
  337. StrCpy $R1 $4
  338. goto WordFunc_WordFind${_WORDFUNC_S}_end
  339. WordFunc_WordFind${_WORDFUNC_S}_nextword:
  340. IntOp $6 $6 + $7
  341. StrCpy $5 $6
  342. goto WordFunc_WordFind${_WORDFUNC_S}_loop
  343.  
  344. WordFunc_WordFind${_WORDFUNC_S}_minus:
  345. StrCmp${_WORDFUNC_S} $2 '-' 0 WordFunc_WordFind${_WORDFUNC_S}_sum
  346. StrCpy $2 '+'
  347. IntOp $1 $4 - $1
  348. IntOp $1 $1 + 1
  349. IntCmp $1 0 WordFunc_WordFind${_WORDFUNC_S}_error2 WordFunc_WordFind${_WORDFUNC_S}_error2 WordFunc_WordFind${_WORDFUNC_S}_restart
  350. WordFunc_WordFind${_WORDFUNC_S}_sum:
  351. StrCmp${_WORDFUNC_S} $2 '#' 0 WordFunc_WordFind${_WORDFUNC_S}_sumdelim
  352. StrCpy $R1 $4
  353. goto WordFunc_WordFind${_WORDFUNC_S}_end
  354. WordFunc_WordFind${_WORDFUNC_S}_sumdelim:
  355. StrCmp${_WORDFUNC_S} $2 '*' 0 WordFunc_WordFind${_WORDFUNC_S}_error2
  356. StrCpy $R1 $4
  357. goto WordFunc_WordFind${_WORDFUNC_S}_end
  358.  
  359. WordFunc_WordFind${_WORDFUNC_S}_plus:
  360. StrCmp${_WORDFUNC_S} $3 '' 0 +4
  361. IntOp $6 $6 - $5
  362. StrCpy $R1 $R0 $6 $5
  363. goto WordFunc_WordFind${_WORDFUNC_S}_end
  364. StrCmp${_WORDFUNC_S} $3 '{' 0 +3
  365. StrCpy $R1 $R0 $6
  366. goto WordFunc_WordFind${_WORDFUNC_S}_end
  367. StrCmp${_WORDFUNC_S} $3 '}' 0 +4
  368. IntOp $6 $6 + $7
  369. StrCpy $R1 $R0 '' $6
  370. goto WordFunc_WordFind${_WORDFUNC_S}_end
  371. StrCmp${_WORDFUNC_S} $3 '{*' +2
  372. StrCmp${_WORDFUNC_S} $3 '*{' 0 +3
  373. StrCpy $R1 $R0 $6
  374. goto WordFunc_WordFind${_WORDFUNC_S}_end
  375. StrCmp${_WORDFUNC_S} $3 '*}' +2
  376. StrCmp${_WORDFUNC_S} $3 '}*' 0 +3
  377. StrCpy $R1 $R0 '' $5
  378. goto WordFunc_WordFind${_WORDFUNC_S}_end
  379. StrCmp${_WORDFUNC_S} $3 '}}' 0 +3
  380. StrCpy $R1 $R0 '' $6
  381. goto WordFunc_WordFind${_WORDFUNC_S}_end
  382. StrCmp${_WORDFUNC_S} $3 '{{' 0 +3
  383. StrCpy $R1 $R0 $5
  384. goto WordFunc_WordFind${_WORDFUNC_S}_end
  385. StrCmp${_WORDFUNC_S} $3 '{}' 0 WordFunc_WordFind${_WORDFUNC_S}_error3
  386. StrLen $3 $R0
  387. StrCmp${_WORDFUNC_S} $3 $6 0 +3
  388. StrCpy $0 ''
  389. goto +2
  390. IntOp $6 $6 + $7
  391. StrCpy $8 $R0 '' $6
  392. StrCmp${_WORDFUNC_S} $4$8 1 +6
  393. StrCmp${_WORDFUNC_S} $4 1 +2 +7
  394. IntOp $6 $6 + $7
  395. StrCpy $3 $R0 $7 $6
  396. StrCmp${_WORDFUNC_S} $3 '' +2
  397. StrCmp${_WORDFUNC_S} $3 $0 -3 +3
  398. StrCpy $R1 ''
  399. goto WordFunc_WordFind${_WORDFUNC_S}_end
  400. StrCmp${_WORDFUNC_S} $5 0 0 +3
  401. StrCpy $0 ''
  402. goto +2
  403. IntOp $5 $5 - $7
  404. StrCpy $3 $R0 $5
  405. StrCpy $R1 '$3$0$8'
  406. goto WordFunc_WordFind${_WORDFUNC_S}_end
  407.  
  408. WordFunc_WordFind${_WORDFUNC_S}_error3:
  409. StrCpy $R1 3
  410. goto WordFunc_WordFind${_WORDFUNC_S}_error
  411. WordFunc_WordFind${_WORDFUNC_S}_error2:
  412. StrCpy $R1 2
  413. goto WordFunc_WordFind${_WORDFUNC_S}_error
  414. WordFunc_WordFind${_WORDFUNC_S}_error1:
  415. StrCpy $R1 1
  416. WordFunc_WordFind${_WORDFUNC_S}_error:
  417. StrCmp $9 'E' 0 +3
  418. SetErrors
  419.  
  420. WordFunc_WordFind${_WORDFUNC_S}_end:
  421. StrCpy $R0 $R1
  422.  
  423. Pop $R2
  424. Pop $R1
  425. Pop $9
  426. Pop $8
  427. Pop $7
  428. Pop $6
  429. Pop $5
  430. Pop $4
  431. Pop $3
  432. Pop $2
  433. Pop $1
  434. Pop $0
  435. Exch $R0
  436. !macroend
  437.  
  438. !define WordFind `!insertmacro WordFindCall ''`
  439. !define un.WordFind `!insertmacro WordFindCall ''`
  440.  
  441. !macro WordFind
  442. !macroend
  443.  
  444. !macro un.WordFind
  445. !macroend
  446.  
  447. !macro WordFind_
  448. !verbose push
  449. !verbose ${_WORDFUNC_VERBOSE}
  450.  
  451. !insertmacro WordFindBody ''
  452.  
  453. !verbose pop
  454. !macroend
  455.  
  456. !define WordFindS `!insertmacro WordFindSCall ''`
  457. !define un.WordFindS `!insertmacro WordFindSCall ''`
  458.  
  459. !macro WordFindS
  460. !macroend
  461.  
  462. !macro un.WordFindS
  463. !macroend
  464.  
  465. !macro WordFindS_
  466. !verbose push
  467. !verbose ${_WORDFUNC_VERBOSE}
  468.  
  469. !insertmacro WordFindBody 'S'
  470.  
  471. !verbose pop
  472. !macroend
  473.  
  474. !macro WordFind2XBody _WORDFUNC_S
  475. Exch $2
  476. Exch
  477. Exch $1
  478. Exch
  479. Exch 2
  480. Exch $0
  481. Exch 2
  482. Exch 3
  483. Exch $R0
  484. Exch 3
  485. Push $3
  486. Push $4
  487. Push $5
  488. Push $6
  489. Push $7
  490. Push $8
  491. Push $9
  492. Push $R1
  493. Push $R2
  494. ClearErrors
  495.  
  496. StrCpy $R2 ''
  497. StrCpy $3 $2 1
  498. StrCpy $2 $2 '' 1
  499. StrCmp $3 'E' 0 +3
  500. StrCpy $R2 E
  501. goto -4
  502.  
  503. StrCmp${_WORDFUNC_S} $3 '+' +5
  504. StrCmp${_WORDFUNC_S} $3 '-' +4
  505. StrCmp${_WORDFUNC_S} $3 '#' WordFunc_WordFind2X${_WORDFUNC_S}_restart
  506. StrCmp${_WORDFUNC_S} $3 '/' WordFunc_WordFind2X${_WORDFUNC_S}_restart
  507. goto WordFunc_WordFind2X${_WORDFUNC_S}_error3
  508.  
  509. StrCpy $4 $2 2 -2
  510. StrCmp${_WORDFUNC_S} $4 '{{' +9
  511. StrCmp${_WORDFUNC_S} $4 '}}' +8
  512. StrCmp${_WORDFUNC_S} $4 '{*' +7
  513. StrCmp${_WORDFUNC_S} $4 '*{' +6
  514. StrCmp${_WORDFUNC_S} $4 '*}' +5
  515. StrCmp${_WORDFUNC_S} $4 '}*' +4
  516. StrCmp${_WORDFUNC_S} $4 '{}' +3
  517. StrCpy $4 ''
  518. goto +2
  519. StrCpy $2 $2 -2
  520. IntOp $2 $2 + 0
  521. StrCmp${_WORDFUNC_S} $2 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2
  522.  
  523. WordFunc_WordFind2X${_WORDFUNC_S}_restart:
  524. StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind2X${_WORDFUNC_S}_error1
  525. StrCpy $5 -1
  526. StrCpy $6 0
  527. StrCpy $7 ''
  528. StrLen $8 $0
  529. StrLen $9 $1
  530.  
  531. WordFunc_WordFind2X${_WORDFUNC_S}_loop:
  532. IntOp $5 $5 + 1
  533.  
  534. WordFunc_WordFind2X${_WORDFUNC_S}_delim1:
  535. StrCpy $R1 $R0 $8 $5
  536. StrCmp${_WORDFUNC_S} $R1$6 0 WordFunc_WordFind2X${_WORDFUNC_S}_error1
  537. StrCmp${_WORDFUNC_S} $R1 '' WordFunc_WordFind2X${_WORDFUNC_S}_minus
  538. StrCmp${_WORDFUNC_S} $R1 $0 +2
  539. StrCmp${_WORDFUNC_S} $7 '' WordFunc_WordFind2X${_WORDFUNC_S}_loop WordFunc_WordFind2X${_WORDFUNC_S}_delim2
  540. StrCmp${_WORDFUNC_S} $0 $1 0 +2
  541. StrCmp${_WORDFUNC_S} $7 '' 0 WordFunc_WordFind2X${_WORDFUNC_S}_delim2
  542. IntOp $7 $5 + $8
  543. StrCpy $5 $7
  544. goto WordFunc_WordFind2X${_WORDFUNC_S}_delim1
  545.  
  546. WordFunc_WordFind2X${_WORDFUNC_S}_delim2:
  547. StrCpy $R1 $R0 $9 $5
  548. StrCmp${_WORDFUNC_S} $R1 $1 0 WordFunc_WordFind2X${_WORDFUNC_S}_loop
  549. IntOp $6 $6 + 1
  550. StrCmp${_WORDFUNC_S} $3$6 '+$2' WordFunc_WordFind2X${_WORDFUNC_S}_plus
  551. StrCmp${_WORDFUNC_S} $3 '/' 0 WordFunc_WordFind2X${_WORDFUNC_S}_nextword
  552. IntOp $R1 $5 - $7
  553. StrCpy $R1 $R0 $R1 $7
  554. StrCmp${_WORDFUNC_S} $R1 $2 0 +3
  555. StrCpy $R1 $6
  556. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  557. WordFunc_WordFind2X${_WORDFUNC_S}_nextword:
  558. IntOp $5 $5 + $9
  559. StrCpy $7 ''
  560. goto WordFunc_WordFind2X${_WORDFUNC_S}_delim1
  561.  
  562. WordFunc_WordFind2X${_WORDFUNC_S}_minus:
  563. StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordFind2X${_WORDFUNC_S}_sum
  564. StrCpy $3 +
  565. IntOp $2 $6 - $2
  566. IntOp $2 $2 + 1
  567. IntCmp $2 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2 WordFunc_WordFind2X${_WORDFUNC_S}_error2 WordFunc_WordFind2X${_WORDFUNC_S}_restart
  568. WordFunc_WordFind2X${_WORDFUNC_S}_sum:
  569. StrCmp${_WORDFUNC_S} $3 '#' 0 WordFunc_WordFind2X${_WORDFUNC_S}_error2
  570. StrCpy $R1 $6
  571. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  572.  
  573. WordFunc_WordFind2X${_WORDFUNC_S}_plus:
  574. StrCmp${_WORDFUNC_S} $4 '' 0 +4
  575. IntOp $R1 $5 - $7
  576. StrCpy $R1 $R0 $R1 $7
  577. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  578. IntOp $5 $5 + $9
  579. IntOp $7 $7 - $8
  580. StrCmp${_WORDFUNC_S} $4 '{*' +2
  581. StrCmp${_WORDFUNC_S} $4 '*{' 0 +3
  582. StrCpy $R1 $R0 $5
  583. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  584. StrCmp${_WORDFUNC_S} $4 '*}' +2
  585. StrCmp${_WORDFUNC_S} $4 '}*' 0 +3
  586. StrCpy $R1 $R0 '' $7
  587. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  588. StrCmp${_WORDFUNC_S} $4 '}}' 0 +3
  589. StrCpy $R1 $R0 '' $5
  590. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  591. StrCmp${_WORDFUNC_S} $4 '{{' 0 +3
  592. StrCpy $R1 $R0 $7
  593. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  594. StrCmp${_WORDFUNC_S} $4 '{}' 0 WordFunc_WordFind2X${_WORDFUNC_S}_error3
  595. StrCpy $5 $R0 '' $5
  596. StrCpy $7 $R0 $7
  597. StrCpy $R1 '$7$5'
  598. goto WordFunc_WordFind2X${_WORDFUNC_S}_end
  599.  
  600. WordFunc_WordFind2X${_WORDFUNC_S}_error3:
  601. StrCpy $R1 3
  602. goto WordFunc_WordFind2X${_WORDFUNC_S}_error
  603. WordFunc_WordFind2X${_WORDFUNC_S}_error2:
  604. StrCpy $R1 2
  605. goto WordFunc_WordFind2X${_WORDFUNC_S}_error
  606. WordFunc_WordFind2X${_WORDFUNC_S}_error1:
  607. StrCpy $R1 1
  608. WordFunc_WordFind2X${_WORDFUNC_S}_error:
  609. StrCmp $R2 'E' 0 +3
  610. SetErrors
  611.  
  612. WordFunc_WordFind2X${_WORDFUNC_S}_end:
  613. StrCpy $R0 $R1
  614.  
  615. Pop $R2
  616. Pop $R1
  617. Pop $9
  618. Pop $8
  619. Pop $7
  620. Pop $6
  621. Pop $5
  622. Pop $4
  623. Pop $3
  624. Pop $2
  625. Pop $1
  626. Pop $0
  627. Exch $R0
  628. !macroend
  629.  
  630. !define WordFind2X `!insertmacro WordFind2XCall`
  631. !define un.WordFind2X `!insertmacro WordFind2XCall`
  632.  
  633. !macro WordFind2X
  634. !macroend
  635.  
  636. !macro un.WordFind2X
  637. !macroend
  638.  
  639. !macro WordFind2X_
  640. !verbose push
  641. !verbose ${_WORDFUNC_VERBOSE}
  642.  
  643. !insertmacro WordFind2XBody ''
  644.  
  645. !verbose pop
  646. !macroend
  647.  
  648. !define WordFind2XS `!insertmacro WordFind2XSCall`
  649. !define un.WordFind2XS `!insertmacro WordFind2XSCall`
  650.  
  651. !macro WordFind2XS
  652. !macroend
  653.  
  654. !macro un.WordFind2XS
  655. !macroend
  656.  
  657. !macro WordFind2XS_
  658. !verbose push
  659. !verbose ${_WORDFUNC_VERBOSE}
  660.  
  661. !insertmacro WordFind2XBody 'S'
  662.  
  663. !verbose pop
  664. !macroend
  665.  
  666. !macro WordFind3XBody _WORDFUNC_S
  667. Exch $3
  668. Exch
  669. Exch $2
  670. Exch
  671. Exch 2
  672. Exch $1
  673. Exch 2
  674. Exch 3
  675. Exch $0
  676. Exch 3
  677. Exch 4
  678. Exch $R0
  679. Exch 4
  680. Push $4
  681. Push $5
  682. Push $6
  683. Push $7
  684. Push $8
  685. Push $9
  686. Push $R1
  687. Push $R2
  688. Push $R3
  689. Push $R4
  690. Push $R5
  691. ClearErrors
  692.  
  693. StrCpy $R5 ''
  694. StrCpy $4 $3 1
  695. StrCpy $3 $3 '' 1
  696. StrCmp $4 'E' 0 +3
  697. StrCpy $R5 E
  698. goto -4
  699.  
  700. StrCmp${_WORDFUNC_S} $4 '+' +5
  701. StrCmp${_WORDFUNC_S} $4 '-' +4
  702. StrCmp${_WORDFUNC_S} $4 '#' WordFunc_WordFind3X${_WORDFUNC_S}_restart
  703. StrCmp${_WORDFUNC_S} $4 '/' WordFunc_WordFind3X${_WORDFUNC_S}_restart
  704. goto WordFunc_WordFind3X${_WORDFUNC_S}_error3
  705.  
  706. StrCpy $5 $3 2 -2
  707. StrCmp${_WORDFUNC_S} $5 '{{' +9
  708. StrCmp${_WORDFUNC_S} $5 '}}' +8
  709. StrCmp${_WORDFUNC_S} $5 '{*' +7
  710. StrCmp${_WORDFUNC_S} $5 '*{' +6
  711. StrCmp${_WORDFUNC_S} $5 '*}' +5
  712. StrCmp${_WORDFUNC_S} $5 '}*' +4
  713. StrCmp${_WORDFUNC_S} $5 '{}' +3
  714. StrCpy $5 ''
  715. goto +2
  716. StrCpy $3 $3 -2
  717. IntOp $3 $3 + 0
  718. StrCmp${_WORDFUNC_S} $3 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2
  719.  
  720. WordFunc_WordFind3X${_WORDFUNC_S}_restart:
  721. StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordFind3X${_WORDFUNC_S}_error1
  722. StrCpy $6 -1
  723. StrCpy $7 0
  724. StrCpy $8 ''
  725. StrCpy $9 ''
  726. StrLen $R1 $0
  727. StrLen $R2 $1
  728. StrLen $R3 $2
  729.  
  730. WordFunc_WordFind3X${_WORDFUNC_S}_loop:
  731. IntOp $6 $6 + 1
  732.  
  733. WordFunc_WordFind3X${_WORDFUNC_S}_delim1:
  734. StrCpy $R4 $R0 $R1 $6
  735. StrCmp${_WORDFUNC_S} $R4$7 0 WordFunc_WordFind3X${_WORDFUNC_S}_error1
  736. StrCmp${_WORDFUNC_S} $R4 '' WordFunc_WordFind3X${_WORDFUNC_S}_minus
  737. StrCmp${_WORDFUNC_S} $R4 $0 +2
  738. StrCmp${_WORDFUNC_S} $8 '' WordFunc_WordFind3X${_WORDFUNC_S}_loop WordFunc_WordFind3X${_WORDFUNC_S}_center
  739. StrCmp${_WORDFUNC_S} $0 $1 +2
  740. StrCmp${_WORDFUNC_S} $0 $2 0 +2
  741. StrCmp${_WORDFUNC_S} $8 '' 0 WordFunc_WordFind3X${_WORDFUNC_S}_center
  742. IntOp $8 $6 + $R1
  743. StrCpy $6 $8
  744. goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1
  745.  
  746. WordFunc_WordFind3X${_WORDFUNC_S}_center:
  747. StrCmp${_WORDFUNC_S} $9 '' 0 WordFunc_WordFind3X${_WORDFUNC_S}_delim2
  748. StrCpy $R4 $R0 $R2 $6
  749. StrCmp${_WORDFUNC_S} $R4 $1 0 WordFunc_WordFind3X${_WORDFUNC_S}_loop
  750. IntOp $9 $6 + $R2
  751. StrCpy $6 $9
  752. goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1
  753.  
  754. WordFunc_WordFind3X${_WORDFUNC_S}_delim2:
  755. StrCpy $R4 $R0 $R3 $6
  756. StrCmp${_WORDFUNC_S} $R4 $2 0 WordFunc_WordFind3X${_WORDFUNC_S}_loop
  757. IntOp $7 $7 + 1
  758. StrCmp${_WORDFUNC_S} $4$7 '+$3' WordFunc_WordFind3X${_WORDFUNC_S}_plus
  759. StrCmp${_WORDFUNC_S} $4 '/' 0 WordFunc_WordFind3X${_WORDFUNC_S}_nextword
  760. IntOp $R4 $6 - $8
  761. StrCpy $R4 $R0 $R4 $8
  762. StrCmp${_WORDFUNC_S} $R4 $3 0 +3
  763. StrCpy $R4 $7
  764. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  765. WordFunc_WordFind3X${_WORDFUNC_S}_nextword:
  766. IntOp $6 $6 + $R3
  767. StrCpy $8 ''
  768. StrCpy $9 ''
  769. goto WordFunc_WordFind3X${_WORDFUNC_S}_delim1
  770.  
  771. WordFunc_WordFind3X${_WORDFUNC_S}_minus:
  772. StrCmp${_WORDFUNC_S} $4 '-' 0 WordFunc_WordFind3X${_WORDFUNC_S}_sum
  773. StrCpy $4 +
  774. IntOp $3 $7 - $3
  775. IntOp $3 $3 + 1
  776. IntCmp $3 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2 WordFunc_WordFind3X${_WORDFUNC_S}_error2 WordFunc_WordFind3X${_WORDFUNC_S}_restart
  777. WordFunc_WordFind3X${_WORDFUNC_S}_sum:
  778. StrCmp${_WORDFUNC_S} $4 '#' 0 WordFunc_WordFind3X${_WORDFUNC_S}_error2
  779. StrCpy $R4 $7
  780. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  781.  
  782. WordFunc_WordFind3X${_WORDFUNC_S}_plus:
  783. StrCmp${_WORDFUNC_S} $5 '' 0 +4
  784. IntOp $R4 $6 - $8
  785. StrCpy $R4 $R0 $R4 $8
  786. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  787. IntOp $6 $6 + $R3
  788. IntOp $8 $8 - $R1
  789. StrCmp${_WORDFUNC_S} $5 '{*' +2
  790. StrCmp${_WORDFUNC_S} $5 '*{' 0 +3
  791. StrCpy $R4 $R0 $6
  792. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  793. StrCmp${_WORDFUNC_S} $5 '*}' +2
  794. StrCmp${_WORDFUNC_S} $5 '}*' 0 +3
  795. StrCpy $R4 $R0 '' $8
  796. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  797. StrCmp${_WORDFUNC_S} $5 '}}' 0 +3
  798. StrCpy $R4 $R0 '' $6
  799. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  800. StrCmp${_WORDFUNC_S} $5 '{{' 0 +3
  801. StrCpy $R4 $R0 $8
  802. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  803. StrCmp${_WORDFUNC_S} $5 '{}' 0 WordFunc_WordFind3X${_WORDFUNC_S}_error3
  804. StrCpy $6 $R0 '' $6
  805. StrCpy $8 $R0 $8
  806. StrCpy $R4 '$8$6'
  807. goto WordFunc_WordFind3X${_WORDFUNC_S}_end
  808.  
  809. WordFunc_WordFind3X${_WORDFUNC_S}_error3:
  810. StrCpy $R4 3
  811. goto WordFunc_WordFind3X${_WORDFUNC_S}_error
  812. WordFunc_WordFind3X${_WORDFUNC_S}_error2:
  813. StrCpy $R4 2
  814. goto WordFunc_WordFind3X${_WORDFUNC_S}_error
  815. WordFunc_WordFind3X${_WORDFUNC_S}_error1:
  816. StrCpy $R4 1
  817. WordFunc_WordFind3X${_WORDFUNC_S}_error:
  818. StrCmp $R5 'E' 0 +3
  819. SetErrors
  820.  
  821. WordFunc_WordFind3X${_WORDFUNC_S}_end:
  822. StrCpy $R0 $R4
  823. Pop $R5
  824. Pop $R4
  825. Pop $R3
  826. Pop $R2
  827. Pop $R1
  828. Pop $9
  829. Pop $8
  830. Pop $7
  831. Pop $6
  832. Pop $5
  833. Pop $4
  834. Pop $3
  835. Pop $2
  836. Pop $1
  837. Pop $0
  838. Exch $R0
  839. !macroend
  840.  
  841. !define WordFind3X `!insertmacro WordFind3XCall`
  842. !define un.WordFind3X `!insertmacro WordFind3XCall`
  843.  
  844. !macro WordFind3X
  845. !macroend
  846.  
  847. !macro un.WordFind3X
  848. !macroend
  849.  
  850. !macro WordFind3X_
  851. !verbose push
  852. !verbose ${_WORDFUNC_VERBOSE}
  853.  
  854. !insertmacro WordFind3XBody ''
  855.  
  856. !verbose pop
  857. !macroend
  858.  
  859. !define WordFind3XS `!insertmacro WordFind3XSCall`
  860. !define un.WordFind3XS `!insertmacro WordFind3XSCall`
  861.  
  862. !macro WordFind3XS
  863. !macroend
  864.  
  865. !macro un.WordFind3XS
  866. !macroend
  867.  
  868. !macro WordFind3XS_
  869. !verbose push
  870. !verbose ${_WORDFUNC_VERBOSE}
  871.  
  872. !insertmacro WordFind3XBody 'S'
  873.  
  874. !verbose pop
  875. !macroend
  876.  
  877. !macro WordReplaceBody _WORDFUNC_S
  878. Exch $2
  879. Exch
  880. Exch $1
  881. Exch
  882. Exch 2
  883. Exch $0
  884. Exch 2
  885. Exch 3
  886. Exch $R0
  887. Exch 3
  888. Push $3
  889. Push $4
  890. Push $5
  891. Push $6
  892. Push $7
  893. Push $8
  894. Push $9
  895. Push $R1
  896. ClearErrors
  897.  
  898. StrCpy $R1 $R0
  899. StrCpy $9 ''
  900. StrCpy $3 $2 1
  901. StrCpy $2 $2 '' 1
  902. StrCmp $3 'E' 0 +3
  903. StrCpy $9 E
  904. goto -4
  905.  
  906. StrCpy $4 $2 1 -1
  907. StrCpy $5 ''
  908. StrCpy $6 ''
  909. StrLen $7 $0
  910.  
  911. StrCmp${_WORDFUNC_S} $7 0 WordFunc_WordReplace${_WORDFUNC_S}_error1
  912. StrCmp${_WORDFUNC_S} $R0 '' WordFunc_WordReplace${_WORDFUNC_S}_error1
  913. StrCmp${_WORDFUNC_S} $3 '{' WordFunc_WordReplace${_WORDFUNC_S}_beginning
  914. StrCmp${_WORDFUNC_S} $3 '}' WordFunc_WordReplace${_WORDFUNC_S}_ending WordFunc_WordReplace${_WORDFUNC_S}_errorchk
  915.  
  916. WordFunc_WordReplace${_WORDFUNC_S}_beginning:
  917. StrCpy $8 $R0 $7
  918. StrCmp${_WORDFUNC_S} $8 $0 0 +4
  919. StrCpy $R0 $R0 '' $7
  920. StrCpy $5 '$5$1'
  921. goto -4
  922. StrCpy $3 $2 1
  923. StrCmp${_WORDFUNC_S} $3 '}' 0 WordFunc_WordReplace${_WORDFUNC_S}_merge
  924.  
  925. WordFunc_WordReplace${_WORDFUNC_S}_ending:
  926. StrCpy $8 $R0 '' -$7
  927. StrCmp${_WORDFUNC_S} $8 $0 0 +4
  928. StrCpy $R0 $R0 -$7
  929. StrCpy $6 '$6$1'
  930. goto -4
  931.  
  932. WordFunc_WordReplace${_WORDFUNC_S}_merge:
  933. StrCmp${_WORDFUNC_S} $4 '*' 0 +5
  934. StrCmp${_WORDFUNC_S} $5 '' +2
  935. StrCpy $5 $1
  936. StrCmp${_WORDFUNC_S} $6 '' +2
  937. StrCpy $6 $1
  938. StrCpy $R0 '$5$R0$6'
  939. goto WordFunc_WordReplace${_WORDFUNC_S}_end
  940.  
  941. WordFunc_WordReplace${_WORDFUNC_S}_errorchk:
  942. StrCmp${_WORDFUNC_S} $3 '+' +2
  943. StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordReplace${_WORDFUNC_S}_error3
  944.  
  945. StrCpy $5 $2 1
  946. IntOp $2 $2 + 0
  947. StrCmp${_WORDFUNC_S} $2 0 0 WordFunc_WordReplace${_WORDFUNC_S}_one
  948. StrCmp${_WORDFUNC_S} $5 0 WordFunc_WordReplace${_WORDFUNC_S}_error2
  949. StrCpy $3 ''
  950.  
  951. WordFunc_WordReplace${_WORDFUNC_S}_all:
  952. StrCpy $5 0
  953. StrCpy $2 $R0 $7 $5
  954. StrCmp${_WORDFUNC_S} $2 '' +4
  955. StrCmp${_WORDFUNC_S} $2 $0 +6
  956. IntOp $5 $5 + 1
  957. goto -4
  958. StrCmp${_WORDFUNC_S} $R0 $R1 WordFunc_WordReplace${_WORDFUNC_S}_error1
  959. StrCpy $R0 '$3$R0'
  960. goto WordFunc_WordReplace${_WORDFUNC_S}_end
  961. StrCpy $2 $R0 $5
  962. IntOp $5 $5 + $7
  963. StrCmp${_WORDFUNC_S} $4 '*' 0 +3
  964. StrCpy $6 $R0 $7 $5
  965. StrCmp${_WORDFUNC_S} $6 $0 -3
  966. StrCpy $R0 $R0 '' $5
  967. StrCpy $3 '$3$2$1'
  968. goto WordFunc_WordReplace${_WORDFUNC_S}_all
  969.  
  970. WordFunc_WordReplace${_WORDFUNC_S}_one:
  971. StrCpy $5 0
  972. StrCpy $8 0
  973. goto WordFunc_WordReplace${_WORDFUNC_S}_loop
  974.  
  975. WordFunc_WordReplace${_WORDFUNC_S}_preloop:
  976. IntOp $5 $5 + 1
  977.  
  978. WordFunc_WordReplace${_WORDFUNC_S}_loop:
  979. StrCpy $6 $R0 $7 $5
  980. StrCmp${_WORDFUNC_S} $6$8 0 WordFunc_WordReplace${_WORDFUNC_S}_error1
  981. StrCmp${_WORDFUNC_S} $6 '' WordFunc_WordReplace${_WORDFUNC_S}_minus
  982. StrCmp${_WORDFUNC_S} $6 $0 0 WordFunc_WordReplace${_WORDFUNC_S}_preloop
  983. IntOp $8 $8 + 1
  984. StrCmp${_WORDFUNC_S} $3$8 +$2 WordFunc_WordReplace${_WORDFUNC_S}_found
  985. IntOp $5 $5 + $7
  986. goto WordFunc_WordReplace${_WORDFUNC_S}_loop
  987.  
  988. WordFunc_WordReplace${_WORDFUNC_S}_minus:
  989. StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordReplace${_WORDFUNC_S}_error2
  990. StrCpy $3 +
  991. IntOp $2 $8 - $2
  992. IntOp $2 $2 + 1
  993. IntCmp $2 0 WordFunc_WordReplace${_WORDFUNC_S}_error2 WordFunc_WordReplace${_WORDFUNC_S}_error2 WordFunc_WordReplace${_WORDFUNC_S}_one
  994.  
  995. WordFunc_WordReplace${_WORDFUNC_S}_found:
  996. StrCpy $3 $R0 $5
  997. StrCmp${_WORDFUNC_S} $4 '*' 0 +5
  998. StrCpy $6 $3 '' -$7
  999. StrCmp${_WORDFUNC_S} $6 $0 0 +3
  1000. StrCpy $3 $3 -$7
  1001. goto -3
  1002. IntOp $5 $5 + $7
  1003. StrCmp${_WORDFUNC_S} $4 '*' 0 +3
  1004. StrCpy $6 $R0 $7 $5
  1005. StrCmp${_WORDFUNC_S} $6 $0 -3
  1006. StrCpy $R0 $R0 '' $5
  1007. StrCpy $R0 '$3$1$R0'
  1008. goto WordFunc_WordReplace${_WORDFUNC_S}_end
  1009.  
  1010. WordFunc_WordReplace${_WORDFUNC_S}_error3:
  1011. StrCpy $R0 3
  1012. goto WordFunc_WordReplace${_WORDFUNC_S}_error
  1013. WordFunc_WordReplace${_WORDFUNC_S}_error2:
  1014. StrCpy $R0 2
  1015. goto WordFunc_WordReplace${_WORDFUNC_S}_error
  1016. WordFunc_WordReplace${_WORDFUNC_S}_error1:
  1017. StrCpy $R0 1
  1018. WordFunc_WordReplace${_WORDFUNC_S}_error:
  1019. StrCmp $9 'E' +3
  1020. StrCpy $R0 $R1
  1021. goto +2
  1022. SetErrors
  1023.  
  1024. WordFunc_WordReplace${_WORDFUNC_S}_end:
  1025. Pop $R1
  1026. Pop $9
  1027. Pop $8
  1028. Pop $7
  1029. Pop $6
  1030. Pop $5
  1031. Pop $4
  1032. Pop $3
  1033. Pop $2
  1034. Pop $1
  1035. Pop $0
  1036. Exch $R0
  1037. !macroend
  1038.  
  1039. !define WordReplace `!insertmacro WordReplaceCall`
  1040. !define un.WordReplace `!insertmacro WordReplaceCall`
  1041.  
  1042. !macro WordReplace
  1043. !macroend
  1044.  
  1045. !macro un.WordReplace
  1046. !macroend
  1047.  
  1048. !macro WordReplace_
  1049. !verbose push
  1050. !verbose ${_WORDFUNC_VERBOSE}
  1051.  
  1052. !insertmacro WordReplaceBody ''
  1053.  
  1054. !verbose pop
  1055. !macroend
  1056.  
  1057. !define WordReplaceS `!insertmacro WordReplaceSCall`
  1058. !define un.WordReplaceS `!insertmacro WordReplaceSCall`
  1059.  
  1060. !macro WordReplaceS
  1061. !macroend
  1062.  
  1063. !macro un.WordReplaceS
  1064. !macroend
  1065.  
  1066. !macro WordReplaceS_
  1067. !verbose push
  1068. !verbose ${_WORDFUNC_VERBOSE}
  1069.  
  1070. !insertmacro WordReplaceBody 'S'
  1071.  
  1072. !verbose pop
  1073. !macroend
  1074.  
  1075. !macro WordAddBody _WORDFUNC_S
  1076. Exch $1
  1077. Exch
  1078. Exch $0
  1079. Exch
  1080. Exch 2
  1081. Exch $R0
  1082. Exch 2
  1083. Push $2
  1084. Push $3
  1085. Push $4
  1086. Push $5
  1087. Push $6
  1088. Push $7
  1089. Push $R1
  1090. ClearErrors
  1091.  
  1092. StrCpy $7 ''
  1093. StrCpy $2 $1 1
  1094. StrCmp $2 'E' 0 +4
  1095. StrCpy $7 E
  1096. StrCpy $1 $1 '' 1
  1097. goto -4
  1098.  
  1099. StrCpy $5 0
  1100. StrCpy $R1 $R0
  1101. StrCpy $2 $1 '' 1
  1102. StrCpy $1 $1 1
  1103. StrCmp${_WORDFUNC_S} $1 '+' +2
  1104. StrCmp${_WORDFUNC_S} $1 '-' 0 WordFunc_WordAdd${_WORDFUNC_S}_error3
  1105.  
  1106. StrCmp${_WORDFUNC_S} $0 '' WordFunc_WordAdd${_WORDFUNC_S}_error1
  1107. StrCmp${_WORDFUNC_S} $2 '' WordFunc_WordAdd${_WORDFUNC_S}_end
  1108. StrCmp${_WORDFUNC_S} $R0 '' 0 +5
  1109. StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_end
  1110. StrCmp${_WORDFUNC_S} $1 '+' 0 +3
  1111. StrCpy $R0 $2
  1112. goto WordFunc_WordAdd${_WORDFUNC_S}_end
  1113.  
  1114. WordFunc_WordAdd${_WORDFUNC_S}_loop:
  1115. IntOp $5 $5 + 1
  1116. !insertmacro WordFind${_WORDFUNC_S}Call 2 $2 $0 E+$5 $3
  1117. IfErrors 0 WordFunc_WordAdd${_WORDFUNC_S}_/word
  1118. StrCmp${_WORDFUNC_S} $3 2 +4
  1119. StrCmp${_WORDFUNC_S} $3$5 11 0 +3
  1120. StrCpy $3 $2
  1121. goto WordFunc_WordAdd${_WORDFUNC_S}_/word
  1122. StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_end WordFunc_WordAdd${_WORDFUNC_S}_preend
  1123.  
  1124. WordFunc_WordAdd${_WORDFUNC_S}_/word:
  1125. !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E/$3 $4
  1126. IfErrors +2
  1127. StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_delete WordFunc_WordAdd${_WORDFUNC_S}_loop
  1128. StrCmp${_WORDFUNC_S} $1$4 '-1' +2
  1129. StrCmp${_WORDFUNC_S} $1 '-' WordFunc_WordAdd${_WORDFUNC_S}_loop +4
  1130. StrCmp${_WORDFUNC_S} $R0 $3 0 WordFunc_WordAdd${_WORDFUNC_S}_loop
  1131. StrCpy $R0 ''
  1132. goto WordFunc_WordAdd${_WORDFUNC_S}_end
  1133. StrCmp${_WORDFUNC_S} $1$4 '+1' 0 +2
  1134. StrCmp${_WORDFUNC_S} $R0 $3 WordFunc_WordAdd${_WORDFUNC_S}_loop
  1135. StrCmp${_WORDFUNC_S} $R0 $R1 +3
  1136. StrCpy $R1 '$R1$0$3'
  1137. goto WordFunc_WordAdd${_WORDFUNC_S}_loop
  1138. StrLen $6 $0
  1139. StrCpy $6 $R0 '' -$6
  1140. StrCmp${_WORDFUNC_S} $6 $0 0 -4
  1141. StrCpy $R1 '$R1$3'
  1142. goto WordFunc_WordAdd${_WORDFUNC_S}_loop
  1143.  
  1144. WordFunc_WordAdd${_WORDFUNC_S}_delete:
  1145. !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E+$4{} $R0
  1146. goto WordFunc_WordAdd${_WORDFUNC_S}_/word
  1147.  
  1148. WordFunc_WordAdd${_WORDFUNC_S}_error3:
  1149. StrCpy $R1 3
  1150. goto WordFunc_WordAdd${_WORDFUNC_S}_error
  1151. WordFunc_WordAdd${_WORDFUNC_S}_error1:
  1152. StrCpy $R1 1
  1153. WordFunc_WordAdd${_WORDFUNC_S}_error:
  1154. StrCmp $7 'E' 0 WordFunc_WordAdd${_WORDFUNC_S}_end
  1155. SetErrors
  1156.  
  1157. WordFunc_WordAdd${_WORDFUNC_S}_preend:
  1158. StrCpy $R0 $R1
  1159.  
  1160. WordFunc_WordAdd${_WORDFUNC_S}_end:
  1161. Pop $R1
  1162. Pop $7
  1163. Pop $6
  1164. Pop $5
  1165. Pop $4
  1166. Pop $3
  1167. Pop $2
  1168. Pop $1
  1169. Pop $0
  1170. Exch $R0
  1171. !macroend
  1172.  
  1173. !define WordAdd `!insertmacro WordAddCall`
  1174. !define un.WordAdd `!insertmacro WordAddCall`
  1175.  
  1176. !macro WordAdd
  1177. !macroend
  1178.  
  1179. !macro un.WordAdd
  1180. !macroend
  1181.  
  1182. !macro WordAdd_
  1183. !verbose push
  1184. !verbose ${_WORDFUNC_VERBOSE}
  1185.  
  1186. !insertmacro WordAddBody ''
  1187.  
  1188. !verbose pop
  1189. !macroend
  1190.  
  1191. !define WordAddS `!insertmacro WordAddSCall`
  1192. !define un.WordAddS `!insertmacro WordAddSCall`
  1193.  
  1194. !macro WordAddS
  1195. !macroend
  1196.  
  1197. !macro un.WordAddS
  1198. !macroend
  1199.  
  1200. !macro WordAddS_
  1201. !verbose push
  1202. !verbose ${_WORDFUNC_VERBOSE}
  1203.  
  1204. !insertmacro WordAddBody 'S'
  1205.  
  1206. !verbose pop
  1207. !macroend
  1208.  
  1209. !macro WordInsertBody _WORDFUNC_S
  1210. Exch $2
  1211. Exch
  1212. Exch $1
  1213. Exch
  1214. Exch 2
  1215. Exch $0
  1216. Exch 2
  1217. Exch 3
  1218. Exch $R0
  1219. Exch 3
  1220. Push $3
  1221. Push $4
  1222. Push $5
  1223. Push $6
  1224. Push $7
  1225. Push $8
  1226. Push $9
  1227. Push $R1
  1228. ClearErrors
  1229.  
  1230. StrCpy $5 ''
  1231. StrCpy $6 $0
  1232. StrCpy $7 }
  1233.  
  1234. StrCpy $9 ''
  1235. StrCpy $R1 $R0
  1236. StrCpy $3 $2 1
  1237. StrCpy $2 $2 '' 1
  1238. StrCmp $3 'E' 0 +3
  1239. StrCpy $9 'E'
  1240. goto -4
  1241.  
  1242. StrCmp${_WORDFUNC_S} $3 '+' +2
  1243. StrCmp${_WORDFUNC_S} $3 '-' 0 WordFunc_WordInsert${_WORDFUNC_S}_error3
  1244. IntOp $2 $2 + 0
  1245. StrCmp${_WORDFUNC_S} $2 0 WordFunc_WordInsert${_WORDFUNC_S}_error2
  1246. StrCmp${_WORDFUNC_S} $0 '' WordFunc_WordInsert${_WORDFUNC_S}_error1
  1247.  
  1248. StrCmp${_WORDFUNC_S} $2 1 0 WordFunc_WordInsert${_WORDFUNC_S}_two
  1249. GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_oneback
  1250. StrCmp${_WORDFUNC_S} $3 '+' WordFunc_WordInsert${_WORDFUNC_S}_call
  1251. StrCpy $7 {
  1252. goto WordFunc_WordInsert${_WORDFUNC_S}_call
  1253. WordFunc_WordInsert${_WORDFUNC_S}_oneback:
  1254. IfErrors 0 +2
  1255. StrCpy $4 $R0
  1256. StrCmp${_WORDFUNC_S} $3 '+' 0 +3
  1257. StrCpy $R0 '$1$0$4'
  1258. goto WordFunc_WordInsert${_WORDFUNC_S}_end
  1259. StrCpy $R0 '$4$0$1'
  1260. goto WordFunc_WordInsert${_WORDFUNC_S}_end
  1261.  
  1262. WordFunc_WordInsert${_WORDFUNC_S}_two:
  1263. IntOp $2 $2 - 1
  1264. GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_twoback
  1265. StrCmp${_WORDFUNC_S} $3 '+' 0 WordFunc_WordInsert${_WORDFUNC_S}_call
  1266. StrCpy $7 {
  1267. goto WordFunc_WordInsert${_WORDFUNC_S}_call
  1268. WordFunc_WordInsert${_WORDFUNC_S}_twoback:
  1269. IfErrors 0 WordFunc_WordInsert${_WORDFUNC_S}_tree
  1270. StrCmp${_WORDFUNC_S} $2$4 11 0 WordFunc_WordInsert${_WORDFUNC_S}_error2
  1271. StrCmp${_WORDFUNC_S} $3 '+' 0 +3
  1272. StrCpy $R0 '$R0$0$1'
  1273. goto WordFunc_WordInsert${_WORDFUNC_S}_end
  1274. StrCpy $R0 '$1$0$R0'
  1275. goto WordFunc_WordInsert${_WORDFUNC_S}_end
  1276.  
  1277. WordFunc_WordInsert${_WORDFUNC_S}_tree:
  1278. StrCpy $7 }
  1279. StrCpy $5 $4
  1280. IntOp $2 $2 + 1
  1281. GetLabelAddress $8 WordFunc_WordInsert${_WORDFUNC_S}_treeback
  1282. StrCmp${_WORDFUNC_S} $3 '+' WordFunc_WordInsert${_WORDFUNC_S}_call
  1283. StrCpy $7 {
  1284. goto WordFunc_WordInsert${_WORDFUNC_S}_call
  1285. WordFunc_WordInsert${_WORDFUNC_S}_treeback:
  1286. IfErrors 0 +3
  1287. StrCpy $4 ''
  1288. StrCpy $6 ''
  1289. StrCmp${_WORDFUNC_S} $3 '+' 0 +3
  1290. StrCpy $R0 '$5$0$1$6$4'
  1291. goto WordFunc_WordInsert${_WORDFUNC_S}_end
  1292. StrCpy $R0 '$4$6$1$0$5'
  1293. goto WordFunc_WordInsert${_WORDFUNC_S}_end
  1294.  
  1295. WordFunc_WordInsert${_WORDFUNC_S}_call:
  1296. !insertmacro WordFind${_WORDFUNC_S}Call 2 $R0 $0 E$3$2*$7 $4
  1297. goto $8
  1298.  
  1299. WordFunc_WordInsert${_WORDFUNC_S}_error3:
  1300. StrCpy $R0 3
  1301. goto WordFunc_WordInsert${_WORDFUNC_S}_error
  1302. WordFunc_WordInsert${_WORDFUNC_S}_error2:
  1303. StrCpy $R0 2
  1304. goto WordFunc_WordInsert${_WORDFUNC_S}_error
  1305. WordFunc_WordInsert${_WORDFUNC_S}_error1:
  1306. StrCpy $R0 1
  1307. WordFunc_WordInsert${_WORDFUNC_S}_error:
  1308. StrCmp $9 'E' +3
  1309. StrCpy $R0 $R1
  1310. goto +2
  1311. SetErrors
  1312.  
  1313. WordFunc_WordInsert${_WORDFUNC_S}_end:
  1314. Pop $R1
  1315. Pop $9
  1316. Pop $8
  1317. Pop $7
  1318. Pop $6
  1319. Pop $5
  1320. Pop $4
  1321. Pop $3
  1322. Pop $2
  1323. Pop $1
  1324. Pop $0
  1325. Exch $R0
  1326. !macroend
  1327.  
  1328. !define WordInsert `!insertmacro WordInsertCall`
  1329. !define un.WordInsert `!insertmacro WordInsertCall`
  1330.  
  1331. !macro WordInsert
  1332. !macroend
  1333.  
  1334. !macro un.WordInsert
  1335. !macroend
  1336.  
  1337. !macro WordInsert_
  1338. !verbose push
  1339. !verbose ${_WORDFUNC_VERBOSE}
  1340.  
  1341. !insertmacro WordInsertBody ''
  1342.  
  1343. !verbose pop
  1344. !macroend
  1345.  
  1346.  
  1347. !define WordInsertS `!insertmacro WordInsertSCall`
  1348. !define un.WordInsertS `!insertmacro WordInsertSCall`
  1349.  
  1350. !macro WordInsertS
  1351. !macroend
  1352.  
  1353. !macro un.WordInsertS
  1354. !macroend
  1355.  
  1356. !macro WordInsertS_
  1357. !verbose push
  1358. !verbose ${_WORDFUNC_VERBOSE}
  1359.  
  1360. !insertmacro WordInsertBody 'S'
  1361.  
  1362. !verbose pop
  1363. !macroend
  1364.  
  1365. !macro StrFilterBody _WORDFUNC_S
  1366. Exch $2
  1367. Exch
  1368. Exch $1
  1369. Exch
  1370. Exch 2
  1371. Exch $0
  1372. Exch 2
  1373. Exch 3
  1374. Exch $R0
  1375. Exch 3
  1376. Push $3
  1377. Push $4
  1378. Push $5
  1379. Push $6
  1380. Push $7
  1381. Push $R1
  1382. Push $R2
  1383. Push $R3
  1384. Push $R4
  1385. Push $R5
  1386. Push $R6
  1387. Push $R7
  1388. Push $R8
  1389. ClearErrors
  1390.  
  1391. StrCpy $R2 $0 '' -3
  1392. StrCmp $R2 "eng" WordFunc_StrFilter${_WORDFUNC_S}_eng
  1393. StrCmp $R2 "rus" WordFunc_StrFilter${_WORDFUNC_S}_rus
  1394. WordFunc_StrFilter${_WORDFUNC_S}_eng:
  1395. StrCpy $4 65
  1396. StrCpy $5 90
  1397. StrCpy $6 97
  1398. StrCpy $7 122
  1399. goto WordFunc_StrFilter${_WORDFUNC_S}_langend
  1400. WordFunc_StrFilter${_WORDFUNC_S}_rus:
  1401. StrCpy $4 192
  1402. StrCpy $5 223
  1403. StrCpy $6 224
  1404. StrCpy $7 255
  1405. goto WordFunc_StrFilter${_WORDFUNC_S}_langend
  1406. ;...
  1407.  
  1408. WordFunc_StrFilter${_WORDFUNC_S}_langend:
  1409. StrCpy $R7 ''
  1410. StrCpy $R8 ''
  1411.  
  1412. StrCmp${_WORDFUNC_S} $2 '' 0 WordFunc_StrFilter${_WORDFUNC_S}_begin
  1413.  
  1414. WordFunc_StrFilter${_WORDFUNC_S}_restart1:
  1415. StrCpy $2 ''
  1416. StrCpy $3 $0 1
  1417. StrCmp${_WORDFUNC_S} $3 '+' +2
  1418. StrCmp${_WORDFUNC_S} $3 '-' 0 +3
  1419. StrCpy $0 $0 '' 1
  1420. goto +2
  1421. StrCpy $3 ''
  1422.  
  1423. IntOp $0 $0 + 0
  1424. StrCmp${_WORDFUNC_S} $0 0 +5
  1425. StrCpy $R7 $0 1 0
  1426. StrCpy $R8 $0 1 1
  1427. StrCpy $R2 $0 1 2
  1428. StrCmp${_WORDFUNC_S} $R2 '' WordFunc_StrFilter${_WORDFUNC_S}_filter WordFunc_StrFilter${_WORDFUNC_S}_error
  1429.  
  1430. WordFunc_StrFilter${_WORDFUNC_S}_restart2:
  1431. StrCmp${_WORDFUNC_S} $3 '' WordFunc_StrFilter${_WORDFUNC_S}_end
  1432. StrCpy $R7 ''
  1433. StrCpy $R8 '+-'
  1434. goto WordFunc_StrFilter${_WORDFUNC_S}_begin
  1435.  
  1436. WordFunc_StrFilter${_WORDFUNC_S}_filter:
  1437. StrCmp${_WORDFUNC_S} $R7 '1' +3
  1438. StrCmp${_WORDFUNC_S} $R7 '2' +2
  1439. StrCmp${_WORDFUNC_S} $R7 '3' 0 WordFunc_StrFilter${_WORDFUNC_S}_error
  1440.  
  1441. StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_begin
  1442. StrCmp${_WORDFUNC_S} $R7$R8 '23' +2
  1443. StrCmp${_WORDFUNC_S} $R7$R8 '32' 0 +3
  1444. StrCpy $R7 -1
  1445. goto WordFunc_StrFilter${_WORDFUNC_S}_begin
  1446. StrCmp${_WORDFUNC_S} $R7$R8 '13' +2
  1447. StrCmp${_WORDFUNC_S} $R7$R8 '31' 0 +3
  1448. StrCpy $R7 -2
  1449. goto WordFunc_StrFilter${_WORDFUNC_S}_begin
  1450. StrCmp${_WORDFUNC_S} $R7$R8 '12' +2
  1451. StrCmp${_WORDFUNC_S} $R7$R8 '21' 0 WordFunc_StrFilter${_WORDFUNC_S}_error
  1452. StrCpy $R7 -3
  1453.  
  1454. WordFunc_StrFilter${_WORDFUNC_S}_begin:
  1455. StrCpy $R6 0
  1456. StrCpy $R1 ''
  1457.  
  1458. WordFunc_StrFilter${_WORDFUNC_S}_loop:
  1459. StrCpy $R2 $R0 1 $R6
  1460. StrCmp${_WORDFUNC_S} $R2 '' WordFunc_StrFilter${_WORDFUNC_S}_restartchk
  1461.  
  1462. StrCmp${_WORDFUNC_S} $2 '' +7
  1463. StrCpy $R4 0
  1464. StrCpy $R5 $2 1 $R4
  1465. StrCmp${_WORDFUNC_S} $R5 '' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol
  1466. StrCmp${_WORDFUNC_S} $R5 $R2 WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol
  1467. IntOp $R4 $R4 + 1
  1468. goto -4
  1469.  
  1470. StrCmp${_WORDFUNC_S} $1 '' +7
  1471. StrCpy $R4 0
  1472. StrCpy $R5 $1 1 $R4
  1473. StrCmp${_WORDFUNC_S} $R5 '' +4
  1474. StrCmp${_WORDFUNC_S} $R5 $R2 WordFunc_StrFilter${_WORDFUNC_S}_addsymbol
  1475. IntOp $R4 $R4 + 1
  1476. goto -4
  1477.  
  1478. StrCmp${_WORDFUNC_S} $R7 '1' +2
  1479. StrCmp${_WORDFUNC_S} $R7 '-1' 0 +4
  1480. StrCpy $R4 48
  1481. StrCpy $R5 57
  1482. goto WordFunc_StrFilter${_WORDFUNC_S}_loop2
  1483. StrCmp${_WORDFUNC_S} $R8 '+-' 0 +2
  1484. StrCmp${_WORDFUNC_S} $3 '+' 0 +4
  1485. StrCpy $R4 $4
  1486. StrCpy $R5 $5
  1487. goto WordFunc_StrFilter${_WORDFUNC_S}_loop2
  1488. StrCpy $R4 $6
  1489. StrCpy $R5 $7
  1490.  
  1491. WordFunc_StrFilter${_WORDFUNC_S}_loop2:
  1492. IntFmt $R3 '%c' $R4
  1493. StrCmp $R2 $R3 WordFunc_StrFilter${_WORDFUNC_S}_found
  1494. StrCmp $R4 $R5 WordFunc_StrFilter${_WORDFUNC_S}_notfound
  1495. IntOp $R4 $R4 + 1
  1496. goto WordFunc_StrFilter${_WORDFUNC_S}_loop2
  1497.  
  1498. WordFunc_StrFilter${_WORDFUNC_S}_found:
  1499. StrCmp${_WORDFUNC_S} $R8 '+-' WordFunc_StrFilter${_WORDFUNC_S}_setcase
  1500. StrCmp${_WORDFUNC_S} $R7 '3' WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol
  1501. StrCmp${_WORDFUNC_S} $R7 '-3' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol
  1502. StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol
  1503.  
  1504. WordFunc_StrFilter${_WORDFUNC_S}_notfound:
  1505. StrCmp${_WORDFUNC_S} $R8 '+-' WordFunc_StrFilter${_WORDFUNC_S}_addsymbol
  1506. StrCmp${_WORDFUNC_S} $R7 '3' 0 +2
  1507. StrCmp${_WORDFUNC_S} $R5 57 WordFunc_StrFilter${_WORDFUNC_S}_addsymbol +3
  1508. StrCmp${_WORDFUNC_S} $R7 '-3' 0 +5
  1509. StrCmp${_WORDFUNC_S} $R5 57 WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol
  1510. StrCpy $R4 48
  1511. StrCpy $R5 57
  1512. goto WordFunc_StrFilter${_WORDFUNC_S}_loop2
  1513. StrCmp${_WORDFUNC_S} $R8 '' WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol WordFunc_StrFilter${_WORDFUNC_S}_addsymbol
  1514.  
  1515. WordFunc_StrFilter${_WORDFUNC_S}_setcase:
  1516. StrCpy $R2 $R3
  1517. WordFunc_StrFilter${_WORDFUNC_S}_addsymbol:
  1518. StrCpy $R1 $R1$R2
  1519. WordFunc_StrFilter${_WORDFUNC_S}_skipsymbol:
  1520. IntOp $R6 $R6 + 1
  1521. goto WordFunc_StrFilter${_WORDFUNC_S}_loop
  1522.  
  1523. WordFunc_StrFilter${_WORDFUNC_S}_error:
  1524. SetErrors
  1525. StrCpy $R0 ''
  1526. goto WordFunc_StrFilter${_WORDFUNC_S}_end
  1527.  
  1528. WordFunc_StrFilter${_WORDFUNC_S}_restartchk:
  1529. StrCpy $R0 $R1
  1530. StrCmp${_WORDFUNC_S} $2 '' 0 WordFunc_StrFilter${_WORDFUNC_S}_restart1
  1531. StrCmp${_WORDFUNC_S} $R8 '+-' 0 WordFunc_StrFilter${_WORDFUNC_S}_restart2
  1532.  
  1533. WordFunc_StrFilter${_WORDFUNC_S}_end:
  1534. Pop $R8
  1535. Pop $R7
  1536. Pop $R6
  1537. Pop $R5
  1538. Pop $R4
  1539. Pop $R3
  1540. Pop $R2
  1541. Pop $R1
  1542. Pop $7
  1543. Pop $6
  1544. Pop $5
  1545. Pop $4
  1546. Pop $3
  1547. Pop $2
  1548. Pop $1
  1549. Pop $0
  1550. Exch $R0
  1551. !macroend
  1552.  
  1553. !define StrFilter `!insertmacro StrFilterCall`
  1554. !define un.StrFilter `!insertmacro StrFilterCall`
  1555.  
  1556. !macro StrFilter
  1557. !macroend
  1558.  
  1559. !macro un.StrFilter
  1560. !macroend
  1561.  
  1562. !macro StrFilter_
  1563. !verbose push
  1564. !verbose ${_WORDFUNC_VERBOSE}
  1565.  
  1566. !insertmacro StrFilterBody ''
  1567.  
  1568. !verbose pop
  1569. !macroend
  1570.  
  1571.  
  1572. !define StrFilterS `!insertmacro StrFilterSCall`
  1573. !define un.StrFilterS `!insertmacro StrFilterSCall`
  1574.  
  1575. !macro StrFilterS
  1576. !macroend
  1577.  
  1578. !macro un.StrFilterS
  1579. !macroend
  1580.  
  1581. !macro StrFilterS_
  1582. !verbose push
  1583. !verbose ${_WORDFUNC_VERBOSE}
  1584.  
  1585. !insertmacro StrFilterBody 'S'
  1586.  
  1587. !verbose pop
  1588. !macroend
  1589.  
  1590. !define VersionCompare `!insertmacro VersionCompareCall`
  1591. !define un.VersionCompare `!insertmacro VersionCompareCall`
  1592.  
  1593. !macro VersionCompare
  1594. !macroend
  1595.  
  1596. !macro un.VersionCompare
  1597. !macroend
  1598.  
  1599. !macro VersionCompare_
  1600. !verbose push
  1601. !verbose ${_WORDFUNC_VERBOSE}
  1602.  
  1603. Exch $1
  1604. Exch
  1605. Exch $0
  1606. Exch
  1607. Push $2
  1608. Push $3
  1609. Push $4
  1610. Push $5
  1611. Push $6
  1612. Push $7
  1613.  
  1614. WordFunc_VersionCompare_begin:
  1615. StrCpy $2 -1
  1616. IntOp $2 $2 + 1
  1617. StrCpy $3 $0 1 $2
  1618. StrCmp $3 '' +2
  1619. StrCmp $3 '.' 0 -3
  1620. StrCpy $4 $0 $2
  1621. IntOp $2 $2 + 1
  1622. StrCpy $0 $0 '' $2
  1623.  
  1624. StrCpy $2 -1
  1625. IntOp $2 $2 + 1
  1626. StrCpy $3 $1 1 $2
  1627. StrCmp $3 '' +2
  1628. StrCmp $3 '.' 0 -3
  1629. StrCpy $5 $1 $2
  1630. IntOp $2 $2 + 1
  1631. StrCpy $1 $1 '' $2
  1632.  
  1633. StrCmp $4$5 '' WordFunc_VersionCompare_equal
  1634.  
  1635. StrCpy $6 -1
  1636. IntOp $6 $6 + 1
  1637. StrCpy $3 $4 1 $6
  1638. StrCmp $3 '0' -2
  1639. StrCmp $3 '' 0 +2
  1640. StrCpy $4 0
  1641.  
  1642. StrCpy $7 -1
  1643. IntOp $7 $7 + 1
  1644. StrCpy $3 $5 1 $7
  1645. StrCmp $3 '0' -2
  1646. StrCmp $3 '' 0 +2
  1647. StrCpy $5 0
  1648.  
  1649. StrCmp $4 0 0 +2
  1650. StrCmp $5 0 WordFunc_VersionCompare_begin WordFunc_VersionCompare_newer2
  1651. StrCmp $5 0 WordFunc_VersionCompare_newer1
  1652. IntCmp $6 $7 0 WordFunc_VersionCompare_newer1 WordFunc_VersionCompare_newer2
  1653.  
  1654. StrCpy $4 '1$4'
  1655. StrCpy $5 '1$5'
  1656. IntCmp $4 $5 WordFunc_VersionCompare_begin WordFunc_VersionCompare_newer2 WordFunc_VersionCompare_newer1
  1657.  
  1658. WordFunc_VersionCompare_equal:
  1659. StrCpy $0 0
  1660. goto WordFunc_VersionCompare_end
  1661. WordFunc_VersionCompare_newer1:
  1662. StrCpy $0 1
  1663. goto WordFunc_VersionCompare_end
  1664. WordFunc_VersionCompare_newer2:
  1665. StrCpy $0 2
  1666.  
  1667. WordFunc_VersionCompare_end:
  1668. Pop $7
  1669. Pop $6
  1670. Pop $5
  1671. Pop $4
  1672. Pop $3
  1673. Pop $2
  1674. Pop $1
  1675. Exch $0
  1676.  
  1677. !verbose pop
  1678. !macroend
  1679.  
  1680. !define VersionConvert `!insertmacro VersionConvertCall`
  1681. !define un.VersionConvert `!insertmacro VersionConvertCall`
  1682.  
  1683. !macro VersionConvert
  1684. !macroend
  1685.  
  1686. !macro un.VersionConvert
  1687. !macroend
  1688.  
  1689. !macro VersionConvert_
  1690. !verbose push
  1691. !verbose ${_WORDFUNC_VERBOSE}
  1692.  
  1693. Exch $1
  1694. Exch
  1695. Exch $0
  1696. Exch
  1697. Push $2
  1698. Push $3
  1699. Push $4
  1700. Push $5
  1701. Push $6
  1702. Push $7
  1703.  
  1704. StrCmp $1 '' 0 +2
  1705. StrCpy $1 'abcdefghijklmnopqrstuvwxyz'
  1706. StrCpy $1 $1 99
  1707.  
  1708. StrCpy $2 0
  1709. StrCpy $7 'dot'
  1710. goto WordFunc_VersionConvert_loop
  1711.  
  1712. WordFunc_VersionConvert_preloop:
  1713. IntOp $2 $2 + 1
  1714.  
  1715. WordFunc_VersionConvert_loop:
  1716. StrCpy $3 $0 1 $2
  1717. StrCmp $3 '' WordFunc_VersionConvert_endcheck
  1718. StrCmp $3 '.' WordFunc_VersionConvert_dot
  1719. StrCmp $3 '0' WordFunc_VersionConvert_digit
  1720. IntCmp $3 '0' WordFunc_VersionConvert_letter WordFunc_VersionConvert_letter WordFunc_VersionConvert_digit
  1721.  
  1722. WordFunc_VersionConvert_dot:
  1723. StrCmp $7 'dot' WordFunc_VersionConvert_replacespecial
  1724. StrCpy $7 'dot'
  1725. goto WordFunc_VersionConvert_preloop
  1726.  
  1727. WordFunc_VersionConvert_digit:
  1728. StrCmp $7 'letter' WordFunc_VersionConvert_insertdot
  1729. StrCpy $7 'digit'
  1730. goto WordFunc_VersionConvert_preloop
  1731.  
  1732. WordFunc_VersionConvert_letter:
  1733. StrCpy $5 0
  1734. StrCpy $4 $1 1 $5
  1735. IntOp $5 $5 + 1
  1736. StrCmp $4 '' WordFunc_VersionConvert_replacespecial
  1737. StrCmp $4 $3 0 -3
  1738. IntCmp $5 9 0 0 +2
  1739. StrCpy $5 '0$5'
  1740.  
  1741. StrCmp $7 'letter' +2
  1742. StrCmp $7 'dot' 0 +3
  1743. StrCpy $6 ''
  1744. goto +2
  1745. StrCpy $6 '.'
  1746.  
  1747. StrCpy $4 $0 $2
  1748. IntOp $2 $2 + 1
  1749. StrCpy $0 $0 '' $2
  1750. StrCpy $0 '$4$6$5$0'
  1751. StrLen $4 '$6$5'
  1752. IntOp $2 $2 + $4
  1753. IntOp $2 $2 - 1
  1754. StrCpy $7 'letter'
  1755. goto WordFunc_VersionConvert_loop
  1756.  
  1757. WordFunc_VersionConvert_replacespecial:
  1758. StrCmp $7 'dot' 0 +3
  1759. StrCpy $6 ''
  1760. goto +2
  1761. StrCpy $6 '.'
  1762.  
  1763. StrCpy $4 $0 $2
  1764. IntOp $2 $2 + 1
  1765. StrCpy $0 $0 '' $2
  1766. StrCpy $0 '$4$6$0'
  1767. StrLen $4 $6
  1768. IntOp $2 $2 + $4
  1769. IntOp $2 $2 - 1
  1770. StrCpy $7 'dot'
  1771. goto WordFunc_VersionConvert_loop
  1772.  
  1773. WordFunc_VersionConvert_insertdot:
  1774. StrCpy $4 $0 $2
  1775. StrCpy $0 $0 '' $2
  1776. StrCpy $0 '$4.$0'
  1777. StrCpy $7 'dot'
  1778. goto WordFunc_VersionConvert_preloop
  1779.  
  1780. WordFunc_VersionConvert_endcheck:
  1781. StrCpy $4 $0 1 -1
  1782. StrCmp $4 '.' 0 WordFunc_VersionConvert_end
  1783. StrCpy $0 $0 -1
  1784. goto -3
  1785.  
  1786. WordFunc_VersionConvert_end:
  1787. Pop $7
  1788. Pop $6
  1789. Pop $5
  1790. Pop $4
  1791. Pop $3
  1792. Pop $2
  1793. Pop $1
  1794. Exch $0
  1795.  
  1796. !verbose pop
  1797. !macroend
  1798.  
  1799. !verbose pop
  1800. !endif
Buy Me A Coffee