WordFunc.nsh 41 KB

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