WordFunc.nsh 41 KB

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