;_____________________________________________________________________________ ; ; Word Functions Test ;_____________________________________________________________________________ ; ; 2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) Name "Word Functions Test" OutFile "WordFuncTest.exe" Caption "$(^Name)" ShowInstDetails show XPStyle on Var FUNCTION Var OUT !include "WordFunc.nsh" !insertmacro WordFind !insertmacro WordFind2X !insertmacro WordFind3X !insertmacro WordReplace !insertmacro WordAdd !insertmacro WordInsert !insertmacro StrFilter !insertmacro VersionCompare !insertmacro VersionConvert !insertmacro un.WordFind !insertmacro un.WordFind2X !insertmacro un.WordFind3X !insertmacro un.WordReplace !insertmacro un.WordAdd !insertmacro un.WordInsert !insertmacro un.StrFilter !insertmacro un.VersionCompare !insertmacro un.VersionConvert ;############### INSTALL ############### !define StackVerificationStart `!insertmacro StackVerificationStart` !macro StackVerificationStart _FUNCTION StrCpy $FUNCTION ${_FUNCTION} Call StackVerificationStart !macroend !define StackVerificationEnd `!insertmacro StackVerificationEnd` !macro StackVerificationEnd Call StackVerificationEnd !macroend Function StackVerificationStart StrCpy $0 !0 StrCpy $1 !1 StrCpy $2 !2 StrCpy $3 !3 StrCpy $4 !4 StrCpy $5 !5 StrCpy $6 !6 StrCpy $7 !7 StrCpy $8 !8 StrCpy $9 !9 StrCpy $R0 !R0 StrCpy $R1 !R1 StrCpy $R2 !R2 StrCpy $R3 !R3 StrCpy $R4 !R4 StrCpy $R5 !R5 StrCpy $R6 !R6 StrCpy $R7 !R7 StrCpy $R8 !R8 StrCpy $R9 !R9 FunctionEnd Function StackVerificationEnd IfErrors +3 DetailPrint 'PASSED $FUNCTION no errors' goto +2 DetailPrint 'FAILED $FUNCTION error' StrCmp $0 '!0' 0 error StrCmp $1 '!1' 0 error StrCmp $2 '!2' 0 error StrCmp $3 '!3' 0 error StrCmp $4 '!4' 0 error StrCmp $5 '!5' 0 error StrCmp $6 '!6' 0 error StrCmp $7 '!7' 0 error StrCmp $8 '!8' 0 error StrCmp $9 '!9' 0 error StrCmp $R0 '!R0' 0 error StrCmp $R1 '!R1' 0 error StrCmp $R2 '!R2' 0 error StrCmp $R3 '!R3' 0 error StrCmp $R4 '!R4' 0 error StrCmp $R5 '!R5' 0 error StrCmp $R6 '!R6' 0 error StrCmp $R7 '!R7' 0 error StrCmp $R8 '!R8' 0 error StrCmp $R9 '!R9' 0 error DetailPrint 'PASSED $FUNCTION stack' goto end error: DetailPrint 'FAILED $FUNCTION stack' ; MessageBox MB_OKCANCEL '$$0={$0}$\n$$1={$1}$\n$$2={$2}$\n$$3={$3}$\n$$4={$4}$\n$$5={$5}$\n$$6={$6}$\n$$7={$7}$\n$$8={$8}$\n$$9={$9}$\n$$R0={$R0}$\n$$R1={$R1}$\n$$R2={$R2}$\n$$R3={$R3}$\n$$R4={$R4}$\n$$R5={$R5}$\n$$R6={$R6}$\n$$R7={$R7}$\n$$R8={$R8}$\n$$R9={$R9}' IDOK +2 ; quit end: FunctionEnd Section WordFind ${StackVerificationStart} WordFind ${WordFind} '||io.sys|||Program Files|||WINDOWS' '||' '-02' $OUT StrCmp $OUT '|Program Files' 0 error ${WordFind} '||io.sys||||Program Files||||WINDOWS' '||' '-2' $OUT StrCmp $OUT 'Program Files' 0 error ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '-2}' $OUT StrCmp $OUT '|logo.sys|||WINDOWS' 0 error ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '#' $OUT StrCmp $OUT '3' 0 error ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '*' $OUT StrCmp $OUT '2' 0 error ${WordFind} 'C:\io.sys|||Program Files|||WINDOWS' '||' '/|Program Files' $OUT StrCmp $OUT '2' 0 error ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '+2}}' $OUT StrCmp $OUT '|||WINDOWS' 0 error ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '+2{}' $OUT StrCmp $OUT 'C:\io.sys|||WINDOWS' 0 error ${WordFind} 'C:\io.sys|||logo.sys|||WINDOWS' '||' '+2*}' $OUT StrCmp $OUT '|logo.sys|||WINDOWS' 0 error ${WordFind} 'C:\\Program Files\\NSIS\\NSIS.chm' '\' '-2{*' $OUT StrCmp $OUT 'C:\\Program Files\\NSIS' 0 error ${WordFind} 'C:\io.sys|||Program Files|||WINDOWS|||' '||' '-1' $OUT StrCmp $OUT '|' 0 error ${WordFind} '||C:\io.sys|||logo.sys|||WINDOWS||' '||' '-1}' $OUT StrCmp $OUT '' 0 error ${WordFind} '||C:\io.sys|||logo.sys|||WINDOWS||' '||' '+1{' $OUT StrCmp $OUT '' 0 error ${WordFind} 'C:\io.sys|||logo.sys' '_' 'E+1' $OUT IfErrors 0 error StrCmp $OUT 1 0 error ${WordFind} 'C:\io.sys|||logo.sys|||' '\' 'E+3' $OUT IfErrors 0 error StrCmp $OUT 2 0 error ${WordFind} 'C:\io.sys|||logo.sys' '\' 'E1' $OUT IfErrors 0 error StrCmp $OUT 3 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section WordFind2X ${StackVerificationStart} WordFind2X ${WordFind2X} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT StrCmp $OUT 'logo.sys' 0 error ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1' $OUT StrCmp $OUT 'logo' 0 error ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1{{' $OUT StrCmp $OUT 'C:\WINDOWS C:\io.sys C:' 0 error ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1{}' $OUT StrCmp $OUT 'C:\WINDOWS C:\io.sys C:sys' 0 error ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '-1{*' $OUT StrCmp $OUT 'C:\WINDOWS C:\io.sys C:\logo.' 0 error ${WordFind2X} 'C:\WINDOWS C:\io.sys C:\logo.sys' '\' '.' '/logo' $OUT StrCmp $OUT '2' 0 error ${WordFind2X} '||a||b||c' '||' '||' 'E+1' $OUT StrCmp $OUT 'a' 0 error ${WordFind2X} '[io.sys];[C:\logo.sys]' '\' '];' 'E+1' $OUT IfErrors 0 error StrCmp $OUT 1 0 error ${WordFind2X} '[io.sys];[C:\logo.sys]' '[' '];' 'E+2' $OUT IfErrors 0 error StrCmp $OUT 2 0 error ${WordFind2X} '[io.sys];[C:\logo.sys]' '\' '];' 'E2' $OUT IfErrors 0 error StrCmp $OUT 3 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section WordFind3X ${StackVerificationStart} WordFind3X ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT StrCmp $OUT '1.AAB' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1' $OUT StrCmp $OUT '2.BAA' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1{{' $OUT StrCmp $OUT '[1.AAB];' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1{}' $OUT StrCmp $OUT '[1.AAB];[3.BBB];' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '-1{*' $OUT StrCmp $OUT '[1.AAB];[2.BAA];' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '/2.BAA' $OUT StrCmp $OUT '2' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'XX' '];' 'E+1' $OUT IfErrors 0 error StrCmp $OUT '1' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' 'E+3' $OUT IfErrors 0 error StrCmp $OUT '2' 0 error ${WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' 'E3' $OUT IfErrors 0 error StrCmp $OUT '3' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section WordReplace ${StackVerificationStart} WordReplace ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT StrCmp $OUT 'C:\io.sys C:\logo.bmp C:\WINDOWS' 0 error ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' '' '+' $OUT StrCmp $OUT 'C:\io. C:\logo. C:\WINDOWS' 0 error ${WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' ' ' ' ' '+1*' $OUT StrCmp $OUT 'C:\io.sys C:\logo.sys C:\WINDOWS' 0 error ${WordReplace} 'C:\io.sys C:\logo.sysSYSsys C:\WINDOWS' 'sys' 'bmp' '+*' $OUT StrCmp $OUT 'C:\io.bmp C:\logo.bmp C:\WINDOWS' 0 error ${WordReplace} 'sysSYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys' 'sys' '|' '{}*' $OUT StrCmp $OUT '|C:\io.sys C:\logo.sys C:\WINDOWS|' 0 error ${WordReplace} 'C:\io.sys C:\logo.sys' '#sys' '|sys|' 'E+1' $OUT IfErrors 0 error StrCmp $OUT '1' 0 error ${WordReplace} 'C:\io.sys C:\logo.sys' '.sys' '|sys|' 'E+3' $OUT IfErrors 0 error StrCmp $OUT '2' 0 error ${WordReplace} 'C:\io.sys C:\logo.sys' '.sys' '|sys|' 'E3' $OUT IfErrors 0 error StrCmp $OUT '3' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section WordAdd ${StackVerificationStart} WordAdd ${WordAdd} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT StrCmp $OUT 'C:\io.sys C:\WINDOWS C:\config.sys' 0 error ${WordAdd} 'C:\io.sys C:\logo.sys C:\WINDOWS' ' ' '-C:\WINDOWS C:\config.sys C:\IO.SYS' $OUT StrCmp $OUT 'C:\logo.sys' 0 error ${WordAdd} 'C:\io.sys' ' ' '+C:\WINDOWS C:\config.sys C:\IO.SYS' $OUT StrCmp $OUT 'C:\io.sys C:\WINDOWS C:\config.sys' 0 error ${WordAdd} 'C:\io.sys C:\logo.sys C:\WINDOWS' ' ' '-C:\WINDOWS' $OUT StrCmp $OUT 'C:\io.sys C:\logo.sys' 0 error ${WordAdd} 'C:\io.sys C:\logo.sys' ' ' '+C:\logo.sys' $OUT StrCmp $OUT 'C:\io.sys C:\logo.sys' 0 error ${WordAdd} 'C:\io.sys C:\logo.sys' ' ' 'E-' $OUT StrCmp $OUT 'C:\io.sys C:\logo.sys' 0 error IfErrors error ${WordAdd} 'C:\io.sys C:\logo.sys' '' 'E-C:\logo.sys' $OUT IfErrors 0 error StrCmp $OUT '1' 0 error ${WordAdd} 'C:\io.sys C:\logo.sys' '' 'EC:\logo.sys' $OUT IfErrors 0 error StrCmp $OUT '3' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section WordInsert ${StackVerificationStart} WordInsert ${WordInsert} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT StrCmp $OUT 'C:\io.sys C:\logo.sys C:\WINDOWS' 0 error ${WordInsert} 'C:\io.sys' ' ' 'C:\WINDOWS' '+2' $OUT StrCmp $OUT 'C:\io.sys C:\WINDOWS' 0 error ${WordInsert} '' ' ' 'C:\WINDOWS' '+1' $OUT StrCmp $OUT 'C:\WINDOWS ' 0 error ${WordInsert} 'C:\io.sys C:\logo.sys' '' 'C:\logo.sys' 'E+1' $OUT IfErrors 0 error StrCmp $OUT '1' 0 error ${WordInsert} 'C:\io.sys C:\logo.sys' ' ' 'C:\logo.sys' 'E+4' $OUT IfErrors 0 error StrCmp $OUT '2' 0 error ${WordInsert} 'C:\io.sys C:\logo.sys' '' 'C:\logo.sys' 'E1' $OUT IfErrors 0 error StrCmp $OUT '3' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section StrFilter ${StackVerificationStart} StrFilter ${StrFilter} '123abc 456DEF 7890|%#' '+' '' '' $OUT IfErrors error StrCmp $OUT '123ABC 456DEF 7890|%#' 0 error ${StrFilter} '123abc 456DEF 7890|%#' '-' 'ef' '' $OUT IfErrors error StrCmp $OUT '123abc 456dEF 7890|%#' 0 error ${StrFilter} '123abc 456DEF 7890|%#' '2' '|%' '' $OUT IfErrors error StrCmp $OUT 'abcDEF|%' 0 error ${StrFilter} '123abc 456DEF 7890|%#' '13' 'af' '4590' $OUT IfErrors error StrCmp $OUT '123a 6F 78|%#' 0 error ${StrFilter} '123abc 456DEF 7890|%#' '+12' 'b' 'def' $OUT IfErrors error StrCmp $OUT '123AbC4567890' 0 error ${StrFilter} '123abc 456DEF 7890|%#' '+12' 'b' 'def' $OUT IfErrors error StrCmp $OUT '123AbC4567890' 0 error ${StrFilter} '123abc 456DEF 7890|%#' '123' 'b' 'def' $OUT IfErrors 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section VersionCompare ${StackVerificationStart} VersionCompare ${VersionCompare} '1.1.1.9' '1.1.1.01' $OUT StrCmp $OUT '1' 0 error ${VersionCompare} '1.1.1.1' '1.1.1.10' $OUT StrCmp $OUT '2' 0 error ${VersionCompare} '91.1.1.1' '101.1.1.9' $OUT StrCmp $OUT '2' 0 error ${VersionCompare} '1.1.1.1' '1.1.1.1' $OUT StrCmp $OUT '0' 0 error ${VersionCompare} '1.1.1.9' '1.1.1.10' $OUT StrCmp $OUT '2' 0 error ${VersionCompare} '1.1.1.0' '1.1.1' $OUT StrCmp $OUT '0' 0 error ${VersionCompare} '1.1.0.0' '1.1' $OUT StrCmp $OUT '0' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section VersionConvert ${StackVerificationStart} VersionConvert ${VersionConvert} '9.0a' '' $OUT StrCmp $OUT '9.0.01' 0 error ${VersionConvert} '9.0c' '' $OUT StrCmp $OUT '9.0.03' 0 error ${VersionConvert} '0.15c-9m' '' $OUT StrCmp $OUT '0.15.03.9.13' 0 error ${VersionConvert} '0.15c+' 'abcdefghijklmnopqrstuvwxyz+' $OUT StrCmp $OUT '0.15.0327' 0 error ${VersionConvert} '0.0xa12.x.ax|.|.|x|a|.3|a.4.||5.|' '' $OUT StrCmp $OUT '0.0.2401.12.24.0124.24.01.3.01.4.5' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section WriteUninstaller goto +2 WriteUninstaller '$EXEDIR\un.WordFuncTest.exe' SectionEnd ;############### UNINSTALL ############### Section un.Uninstall ${un.WordFind} 'C:\io.sys C:\Program Files C:\WINDOWS' ' C:\' '-02' $OUT ${un.WordFind2X} '[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]' '[C:\' '];' '+2' $OUT ${un.WordFind3X} '[1.AAB];[2.BAA];[3.BBB];' '[' 'AA' '];' '+1' $OUT ${un.WordReplace} 'C:\io.sys C:\logo.sys C:\WINDOWS' 'SYS' 'bmp' '+2' $OUT ${un.WordAdd} 'C:\io.sys C:\WINDOWS' ' ' '+C:\WINDOWS C:\config.sys' $OUT ${un.WordInsert} 'C:\io.sys C:\WINDOWS' ' ' 'C:\logo.sys' '-2' $OUT ${un.StrFilter} '123abc 456DEF 7890|%#' '+' '' '' $OUT ${un.VersionCompare} '1.1.1.9' '1.1.1.01' $OUT ${un.VersionConvert} '9.0a' '' $OUT SectionEnd