;_____________________________________________________________________________ ; ; Text Functions Test ;_____________________________________________________________________________ ; ; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) Name "Text Functions Test" OutFile "TextFuncTest.exe" Caption "$(^Name)" ShowInstDetails show XPStyle on RequestExecutionLevel user Var FUNCTION Var TEMPFILE1 Var TEMPFILE2 Var TEMPFILE3 Var HANDLE Var OUT !include "TextFunc.nsh" !insertmacro LineFind !insertmacro LineRead !insertmacro FileReadFromEnd !insertmacro LineSum !insertmacro FileJoin !insertmacro TextCompare !insertmacro TextCompareS !insertmacro ConfigRead !insertmacro ConfigReadS !insertmacro ConfigWrite !insertmacro ConfigWriteS !insertmacro FileRecode !insertmacro TrimNewLines !insertmacro un.LineFind !insertmacro un.LineRead !insertmacro un.FileReadFromEnd !insertmacro un.LineSum !insertmacro un.FileJoin !insertmacro un.TextCompare !insertmacro un.TextCompareS !insertmacro un.ConfigRead !insertmacro un.ConfigReadS !insertmacro un.ConfigWrite !insertmacro un.ConfigWriteS !insertmacro un.FileRecode !insertmacro un.TrimNewLines ;############### 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 CreateTestFile GetTempFileName $TEMPFILE1 FileOpen $HANDLE $TEMPFILE1 w FileWrite $HANDLE '1A=a$\r$\n' FileWrite $HANDLE '2B=b$\r$\n' FileWrite $HANDLE '3C=c$\r$\n' FileWrite $HANDLE '4D=d$\r$\n' FileWrite $HANDLE '5E=e$\r$\n' FileClose $HANDLE GetTempFileName $TEMPFILE2 GetTempFileName $TEMPFILE3 SectionEnd Section LineFind ${StackVerificationStart} LineFind ${LineFind} '$TEMPFILE1' '/NUL' '1:-4 3 -1' 'LineFindCallback1' IfErrors error StrCmp $OUT '|1:2|-5|1|1A=a$\r$\n|1:2|-4|2|2B=b$\r$\n|3:3|-3|3|3C=c$\r$\n' 0 error StrCpy $OUT '' SetDetailsPrint none ${LineFind} '$TEMPFILE1' '$TEMPFILE2' '1:-1' 'LineFindCallback2' SetDetailsPrint both IfErrors error StrCmp $OUT '|1:-1||1|1A=a$\r$\n|1:-1||2|4D=d$\r$\n|1:-1||3|3C=c$\r$\n|1:-1||4|2B=B$\r$\n|1:-1||5|5E=e$\r$\n' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Function LineFindCallback1 StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9' StrCmp $R8 3 0 +2 StrCpy $0 StopLineFind Push $0 FunctionEnd Function LineFindCallback2 StrCmp $R8 2 0 +2 StrCpy $R9 '4D=d$\r$\n' StrCmp $R8 4 0 +2 StrCpy $R9 '2B=B$\r$\n' StrCpy $OUT '$OUT|$R6|$R7|$R8|$R9' Push $0 FunctionEnd Section LineRead ${StackVerificationStart} LineRead ${LineRead} '$TEMPFILE1' '-1' $OUT IfErrors error StrCmp $OUT '5E=e$\r$\n' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section FileReadFromEnd ${StackVerificationStart} FileReadFromEnd StrCpy $OUT '' ${FileReadFromEnd} '$TEMPFILE1' 'FileReadFromEndCallback' IfErrors error StrCmp $OUT '|-1|5|5E=e$\r$\n|-2|4|4D=d$\r$\n|-3|3|3C=c$\r$\n|-4|2|2B=b$\r$\n' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Function FileReadFromEndCallback StrCpy $OUT '$OUT|$7|$8|$9' StrCmp $8 2 0 +2 StrCpy $0 StopFileReadFromEnd Push $0 FunctionEnd Section LineSum ${StackVerificationStart} LineSum ${LineSum} '$TEMPFILE1' $OUT IfErrors error StrCmp $OUT '5' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section FileJoin ${StackVerificationStart} FileJoin SetDetailsPrint none ${FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3' SetDetailsPrint both ${StackVerificationEnd} SectionEnd Section TextCompare ${StackVerificationStart} TextCompare StrCpy $OUT '' ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'TextCompareCallback' StrCmp $OUT '|2|4D=d$\r$\n|2|2B=b$\r$\n|4|2B=B$\r$\n|4|4D=d$\r$\n' 0 error StrCpy $OUT '' ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastEqual' 'TextCompareCallback' StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error StrCpy $OUT '' ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback' StrCmp $OUT '' 0 error StrCpy $OUT '' ${TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback' StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|4|2B=B$\r$\n|2|2B=b$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|2|4D=d$\r$\n|4|4D=d$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section TextCompareS ${StackVerificationStart} TextCompareS StrCpy $OUT '' ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowDiff' 'TextCompareCallback' StrCmp $OUT '|||2|2B=b$\r$\n' 0 error StrCpy $OUT '' ${TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'SlowEqual' 'TextCompareCallback' StrCmp $OUT '|1|1A=a$\r$\n|1|1A=a$\r$\n|3|3C=c$\r$\n|3|3C=c$\r$\n|2|4D=d$\r$\n|4|4D=d$\r$\n|5|5E=e$\r$\n|5|5E=e$\r$\n' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Function TextCompareCallback StrCpy $OUT '$OUT|$6|$7|$8|$9' Push $0 FunctionEnd Section ConfigRead ${StackVerificationStart} ConfigRead ${ConfigRead} '$TEMPFILE1' '3c=' $OUT StrCmp $OUT 'c' 0 error ${ConfigRead} '$TEMPFILE1' '6F=' $OUT StrCmp $OUT '' 0 error ${ConfigRead} '$TEMPFILE1' 'FF=' $OUT IfErrors 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section ConfigReadS ${StackVerificationStart} ConfigReadS ${ConfigReadS} '$TEMPFILE1' '3C=' $OUT StrCmp $OUT 'c' 0 error ${ConfigReadS} '$TEMPFILE1' '3c=' $OUT IfErrors 0 error StrCmp $OUT '' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section ConfigWrite ${StackVerificationStart} ConfigWrite ${ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT StrCmp $OUT 'CHANGED' 0 error ${ConfigWrite} '$TEMPFILE1' '2B=' '' $OUT StrCmp $OUT 'DELETED' 0 error ${ConfigWrite} '$TEMPFILE1' '3c=' 'c' $OUT StrCmp $OUT 'SAME' 0 error ${ConfigWrite} '$TEMPFILE1' '6F=' '*' $OUT StrCmp $OUT 'ADDED' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section ConfigWriteS ${StackVerificationStart} ConfigWriteS ${ConfigWriteS} '$TEMPFILE1' '5e=' 'e**' $OUT StrCmp $OUT 'ADDED' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section FileRecode ${StackVerificationStart} FileRecode ${FileRecode} '$TEMPFILE1' 'CharToOem' ${StackVerificationEnd} SectionEnd Section TrimNewLines ${StackVerificationStart} TrimNewLines ${TrimNewLines} 'Text Line$\r$\n' $OUT StrCmp $OUT 'Text Line' 0 error ${TrimNewLines} 'Text Line' $OUT StrCmp $OUT 'Text Line' 0 error ${TrimNewLines} 'Text Line$\n' $OUT StrCmp $OUT 'Text Line' 0 error goto +2 error: SetErrors ${StackVerificationEnd} SectionEnd Section WriteUninstaller SetDetailsPrint none Delete $TEMPFILE1 Delete $TEMPFILE2 Delete $TEMPFILE3 SetDetailsPrint both goto +2 WriteUninstaller '$EXEDIR\un.TextFuncTest.exe' SectionEnd ;############### UNINSTALL ############### Section un.Uninstall ${un.LineFind} '$TEMPFILE1' '/NUL' '1:-1' 'un.LineFindCallback' ${un.LineRead} '$TEMPFILE1' '-1' $OUT ${un.FileReadFromEnd} '$TEMPFILE1' 'un.FileReadFromEndCallback' ${un.LineSum} '$TEMPFILE1' $OUT ${un.FileJoin} '$TEMPFILE1' '$TEMPFILE2' '$TEMPFILE3' ${un.TextCompare} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback' ${un.TextCompareS} '$TEMPFILE1' '$TEMPFILE2' 'FastDiff' 'un.TextCompareCallback' ${un.ConfigRead} '$TEMPFILE1' '3c=' $OUT ${un.ConfigReadS} '$TEMPFILE1' '3c=' $OUT ${un.ConfigWrite} '$TEMPFILE1' '5E=' 'e**' $OUT ${un.ConfigWriteS} '$TEMPFILE1' '5E=' 'e**' $OUT ${un.FileRecode} '$TEMPFILE1' 'CharToOem' ${un.TrimNewLines} 'Text Line$\r$\n' $OUT SectionEnd Function un.LineFindCallback Push $0 FunctionEnd Function un.FileReadFromEndCallback Push $0 FunctionEnd Function un.TextCompareCallback Push $0 FunctionEnd