;_____________________________________________________________________________
;
;                          Text Functions
;_____________________________________________________________________________
;
; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)

Name "Text Functions"
OutFile "TextFunc.exe"
Caption "$(^Name)"
XPStyle on

!include "WinMessages.nsh"
!include "TextFunc.nsh"

!insertmacro LineFind
!insertmacro LineRead
!insertmacro FileReadFromEnd
!insertmacro LineSum
!insertmacro FileJoin
!insertmacro ConfigRead
!insertmacro ConfigWrite
!insertmacro FileRecode

Var HWND
Var INI
Var LOG
Var PROJECT
Var CALLBACK
Var VIEW
Var FUNCTION
Var LINEFIND1
Var LINEFIND2
Var LINEFIND3
Var LINEREAD1
Var LINEREAD2
Var FILEREADFROMEND1
Var LINESUM1
Var FILEJOIN1
Var FILEJOIN2
Var FILEJOIN3
Var TEXTCOMPARE1
Var TEXTCOMPARE2
Var TEXTCOMPARE3
Var CONFIGREAD1
Var CONFIGREAD2
Var CONFIGWRITE1
Var CONFIGWRITE2
Var CONFIGWRITE3
Var FILERECODE1
Var FILERECODE2

Page Custom ShowCustom LeaveCustom

Function ShowCustom
	InstallOptions::initDialog /NOUNLOAD "$INI"
	Pop $hwnd
	GetDlgItem $0 $HWND 1206
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1208
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1209
	ShowWindow $0 0
	StrCpy $FUNCTION LineFind
	StrCpy $LINEREAD2 10
	StrCpy $TEXTCOMPARE3 FastDiff
	StrCpy $CONFIGREAD1 "$WINDIR\system.ini"
	StrCpy $CONFIGREAD2 "shell="
	StrCpy $FILERECODE2 CharToOem
	InstallOptions::show
	Pop $0
FunctionEnd

Function LeaveCustom
	ReadINIStr $0 $INI "Settings" "State"
 	ReadINIStr $R0 $INI "Field 1" "State" 	
	ReadINIStr $R1 $INI "Field 2" "State"
 	ReadINIStr $R2 $INI "Field 3" "State"
 	ReadINIStr $R3 $INI "Field 4" "State"
 	ReadINIStr $R4 $INI "Field 5" "State"
 	ReadINIStr $R5 $INI "Field 6" "State"
	StrCpy $R4 $R4 8
	StrCpy $R5 $R5 8
	StrCpy $6 0
	StrCpy $7 '$${'
	StrCpy $8 'r'
	StrCpy $9 'n'

	StrCmp $0 10 Log
	StrCmp $0 9 ViewOrEdit
	StrCmp $0 0 Enter
	goto MainSend

	Log:
	Exec 'notepad.exe $LOG'
	Abort

	ViewOrEdit:
	StrCmp $FUNCTION FileReadFromEnd 0 Edit
	StrCmp $VIEW '' 0 ViewFileReadFromEndCallback
	GetTempFileName $VIEW $PLUGINSDIR
	StrCpy $7 '$$'
	FileOpen $0 $VIEW w
	FileWrite $0 `Function FileReadFromEndCallback$\r$\n`
	FileWrite $0 `	MessageBox MB_OKCANCEL '$7$$9       "Line"=[$$9]$7\$9$7$$8           "#"=[$$8]$7\$9$7$$7          "-#"=[$$7]' IDOK +2$\r$\n`
	FileWrite $0 `	StrCpy $$R0 StopFileReadFromEnd$\r$\n$\r$\n`
	FileWrite $0 `	Push $$R0$\r$\n`
	FileWrite $0 `FunctionEnd$\r$\n`
	FileClose $0
	StrCpy $7 '$${'
	SetFileAttributes $VIEW READONLY
	ViewFileReadFromEndCallback:
	Exec 'notepad.exe $VIEW'
	Abort

	Edit:
	StrCmp $CALLBACK '' +5
	StrCmp $6$R6 '0$R0$R4$R5' showproject
	StrCmp $R6 '$R0$R4$R5' +3
	Delete $CALLBACK
	StrCpy $CALLBACK ''
	StrCpy $R6 '$R0$R4$R5'

	#Project#
	StrCmp $6$R0 "01. LineFind" 0 +5
	IfFileExists $CALLBACK +2
	GetTempFileName $CALLBACK $PLUGINSDIR
	FileOpen $0 $CALLBACK w
	goto function
	IfFileExists $PROJECT +2
	GetTempFileName $PROJECT $PLUGINSDIR
	FileOpen $0 $PROJECT w

	#Name#
	FileWrite $0 'Name "$FUNCTION"$\r$\n'
	FileWrite $0 'OutFile "$PROJECT.exe"$\r$\n$\r$\n'

	#!include#
	StrCmp $R0$R4 '1. LineFindExample5' 0 TextFuncInclude
	IfFileExists '$EXEDIR\WordFunc.nsh' 0 +3
	FileWrite $0 '!include "$EXEDIR\WordFunc.nsh"$\r$\n'
	goto +2
	FileWrite $0 '!include "WordFunc.nsh"$\r$\n'
	FileWrite $0 '!insertmacro WordFind$\r$\n'
	FileWrite $0 '!insertmacro WordFindS$\r$\n'
	FileWrite $0 '!insertmacro WordFind2X$\r$\n'
	FileWrite $0 '!insertmacro WordFind2XS$\r$\n'
	FileWrite $0 '!insertmacro WordFind3X$\r$\n'
	FileWrite $0 '!insertmacro WordFind3XS$\r$\n'
	FileWrite $0 '!insertmacro WordReplace$\r$\n'
	FileWrite $0 '!insertmacro WordReplaceS$\r$\n'
	FileWrite $0 '!insertmacro WordAdd$\r$\n'
	FileWrite $0 '!insertmacro WordAddS$\r$\n'
	FileWrite $0 '!insertmacro WordInsert$\r$\n'
	FileWrite $0 '!insertmacro WordInsertS$\r$\n'
	FileWrite $0 '!insertmacro StrFilter$\r$\n'
	FileWrite $0 '!insertmacro StrFilterS$\r$\n'
	TextFuncInclude:
	IfFileExists '$EXEDIR\TextFunc.nsh' 0 +3
	FileWrite $0 '!include "$EXEDIR\TextFunc.nsh"$\r$\n'
	goto +2
	FileWrite $0 '!include "TextFunc.nsh"$\r$\n'
	FileWrite $0 '!insertmacro $FUNCTION$\r$\n'
	StrCmp $FUNCTION TextCompare +2
	FileWrite $0 '!insertmacro TrimNewLines$\r$\n'

	#Section#
	FileWrite $0 '$\r$\nSection -empty$\r$\n'
	FileWrite $0 'SectionEnd$\r$\n$\r$\n'

	#Function .onInit#
	FileWrite $0 'Function .onInit$\r$\n'
	StrCmp $R0$R5 "6. TextCompareExample1" 0 TextCompareExample235
	FileWrite $0 '	StrCpy $$R0 ""$\r$\n'
	FileWrite $0 '	$7TextCompare} "$R1" "$R2" "$R3" "$R5"$\r$\n'
	FileWrite $0 '	IfErrors error$\r$\n'
	FileWrite $0 '	StrCmp $$R0 NotEqual 0 +2$\r$\n'
	FileWrite $0 '	MessageBox MB_OK "             Files differ" IDOK +2$\r$\n'
	FileWrite $0 '	MessageBox MB_OK "           Files identical"$\r$\n'
	FileWrite $0 '	goto end$\r$\n$\r$\n'
	goto endoninit
	TextCompareExample235:
	StrCmp $R0$R5 "6. TextCompareExample2" +3
	StrCmp $R0$R5 "6. TextCompareExample3" +2
	StrCmp $R0$R5 "6. TextCompareExample5" 0 TextCompareExample4
	FileWrite $0 '	StrCpy $$R0 "$R1"$\r$\n'
	FileWrite $0 '	StrCpy $$R1 "$R2"$\r$\n$\r$\n'
	FileWrite $0 '	GetTempFileName $$R2$\r$\n'
	FileWrite $0 '	FileOpen $$R3 $$R2 w$\r$\n'
	FileWrite $0 '	FileWrite $$R3 "$$R0 | $$R1$$\$8$$\$9"$\r$\n'
	FileWrite $0 '	$7TextCompare} "$$R0" "$$R1" "$R3" "$R5"$\r$\n'
	FileWrite $0 '	IfErrors error$\r$\n'
	FileWrite $0 '	Exec "notepad.exe $$R2"$\r$\n'
	FileWrite $0 '	goto end$\r$\n$\r$\n'
	goto endoninit
	TextCompareExample4:
	StrCmp $R0$R5 "6. TextCompareExample4" 0 LineFindExample123456
	FileWrite $0 '	StrCpy $$R0 "$R1"$\r$\n'
	FileWrite $0 '	StrCpy $$R1 "$R2"$\r$\n$\r$\n'
	FileWrite $0 '	GetTempFileName $$R2$\r$\n'
	FileWrite $0 '	FileOpen $$R3 $$R2 w$\r$\n'
	FileWrite $0 '	FileWrite $$R3 "$$R0 | $$R1$$\$8$$\$9"$\r$\n'
	FileWrite $0 '	$7TextCompare} "$$R0" "$$R1" "$R3" "$R5"$\r$\n'
	FileWrite $0 '	IfErrors error$\r$\n'
	FileWrite $0 '	FileWrite $$R3 "$$\$8$$\$9$$R1 | $$R0$$\$8$$\$9"$\r$\n'
	FileWrite $0 '	$7TextCompare} "$$R1" "$$R0" "$R3" "$R5"$\r$\n'
	FileWrite $0 '	FileClose $$R3$\r$\n'
	FileWrite $0 '	IfErrors error$\r$\n'
	FileWrite $0 '	Exec "notepad.exe $$R2"$\r$\n$\r$\n'
	FileWrite $0 '	goto end$\r$\n$\r$\n'
	goto endoninit
	LineFindExample123456:
	FileWrite $0 '	$7$FUNCTION} "$R1" "$R2" "$R3" "$R4"$\r$\n'
	FileWrite $0 '	IfErrors error$\r$\n'
	FileWrite $0 '	MessageBox MB_YESNO "          Open output file?" IDNO end$\r$\n'
	FileWrite $0 '	StrCmp "$R2" "" 0 +3$\r$\n'
	FileWrite $0 `	Exec 'notepad.exe "$R1"'$\r$\n`
	FileWrite $0 '	goto end$\r$\n'
	FileWrite $0 '	SearchPath $$R2 "$R2"$\r$\n'
	FileWrite $0 `	Exec 'notepad.exe "$$R2"'$\r$\n`
	FileWrite $0 '	goto end$\r$\n$\r$\n'
	endoninit:
	FileWrite $0 '	error:$\r$\n'
	FileWrite $0 '	MessageBox MB_OK "Error"$\r$\n$\r$\n'
	FileWrite $0 '	end:$\r$\n'
	FileWrite $0 '	Quit$\r$\n'
	FileWrite $0 'FunctionEnd$\r$\n$\r$\n'
	#FunctionEnd#


	#Function CallBack#
	StrCmp $CALLBACK '' 0 close
	function:
	StrCmp $R0 '1. LineFind' 0 +8
	FileWrite $0 'Function $R4$\r$\n'
	StrCmp $R4 "Example1" Example1LF
	StrCmp $R4 "Example2" Example2LF
	StrCmp $R4 "Example3" Example3LF
	StrCmp $R4 "Example4" Example4LF
	StrCmp $R4 "Example5" Example5LF
	StrCmp $R4 "Example6" Example6LF

	FileWrite $0 'Function $R5$\r$\n'
	StrCmp $R5 "Example1" Example1TC
	StrCmp $R5 "Example2" Example2TC
	StrCmp $R5 "Example3" Example3TC
	StrCmp $R5 "Example4" Example4TC
	StrCmp $R5 "Example5" Example3TC

	Example1LF:
	FileWrite $0 "	$7TrimNewLines} '$$R9' $$R9$\r$\n"
	FileWrite $0 "	StrCpy $$R9 $$R9 '' 2       ;delete first two symbols$\r$\n"
	FileWrite $0 "	StrCpy $$R9 '$$R9$$\$8$$\$9'$\r$\n$\r$\n"
	goto endwrite
	Example2LF:
	FileWrite $0 "	$7TrimNewLines} '$$R9' $$R9$\r$\n"
	FileWrite $0 "	StrCpy $$R9 '$$R9   ~Changed line ($$R8)~$$\$8$$\$9'$\r$\n$\r$\n"
	goto endwrite
	Example3LF:
	FileWrite $0 "	StrCpy $$0 SkipWrite$\r$\n$\r$\n"
	goto endwrite
	Example4LF:
	FileWrite $0 "	FileWrite $$R4 '---First Line---$$\$8$$\$9'$\r$\n"
	FileWrite $0 "	FileWrite $$R4 '---Second Line ...---$$\$8$$\$9'$\r$\n$\r$\n"
	goto endwrite
	Example5LF:
	FileWrite $0 "	; You can use:$\r$\n"
	FileWrite $0 "	; $7WordFind}|$7WordFindS}|$7WordFind2X}|$7WordFind2XS}|$\r$\n"
	FileWrite $0 "	; $7WordFind3X}|$7WordFind3XS}|$7WordReplace}|$7WordReplaceS}|$\r$\n"
	FileWrite $0 "	; $7WordAdd}|$7WordAddS}|$7WordInsert}|$7WordInsertS}|$\r$\n"
	FileWrite $0 "	; $7StrFilter}|$7StrFilterS}$\r$\n$\r$\n"
	FileWrite $0 "	$7WordReplace} '$$R9' ' ' '_' '+*' $$R9$\r$\n$\r$\n"
	goto endwrite
	Example6LF:
	FileWrite $0 '	;(Cut lines from a line to another line (also including that line))$\r$\n'
	FileWrite $0 '	StrCmp $$R0 finish stop$\r$\n'
	FileWrite $0 '	StrCmp $$R0 start finish$\r$\n'
	FileWrite $0 '	StrCmp $$R9 "Start Line$$\$8$$\$9" 0 skip$\r$\n'
	FileWrite $0 '	StrCpy $$R0 start$\r$\n'
	FileWrite $0 '	StrCpy $$R1 $$R9$\r$\n'
	FileWrite $0 '	goto code$\r$\n'
	FileWrite $0 '	finish:$\r$\n'
	FileWrite $0 '	StrCmp $$R9 "Finish Line$$\$8$$\$9" 0 code$\r$\n'
	FileWrite $0 '	StrCpy $$R0 finish$\r$\n'
	FileWrite $0 '	StrCpy $$R2 $$R8$\r$\n'
	FileWrite $0 '	goto code$\r$\n'
	FileWrite $0 '	skip:$\r$\n'
	FileWrite $0 '	StrCpy $$0 SkipWrite$\r$\n'
	FileWrite $0 '	goto output$\r$\n'
	FileWrite $0 '	stop:$\r$\n'
	FileWrite $0 '	StrCpy $$0 StopLineFind$\r$\n'
	FileWrite $0 '	goto output$\r$\n$\r$\n'
	FileWrite $0 '	;;(Delete lines from a line to another line (also including that line))$\r$\n'
	FileWrite $0 '	; StrCmp $$R0 finish code$\r$\n'
	FileWrite $0 '	; StrCmp $$R0 start finish$\r$\n'
	FileWrite $0 '	; StrCmp $$R9 "Start Line$$\$8$$\$9" 0 code$\r$\n'
	FileWrite $0 '	; StrCpy $$R0 start$\r$\n'
	FileWrite $0 '	; StrCpy $$R1 $$R8$\r$\n'
	FileWrite $0 '	; goto skip$\r$\n'
	FileWrite $0 '	; finish:$\r$\n'
	FileWrite $0 '	; StrCmp $$R9 "Finish Line$$\$8$$\$9" 0 skip$\r$\n'
	FileWrite $0 '	; StrCpy $$R0 finish$\r$\n'
	FileWrite $0 '	; StrCpy $$R2 $$R8$\r$\n'
	FileWrite $0 '	; skip:$\r$\n'
	FileWrite $0 '	; StrCpy $$0 SkipWrite$\r$\n'
	FileWrite $0 '	; goto output$\r$\n$\r$\n'
	FileWrite $0 '	code:$\r$\n'
	FileWrite $0 '	;...$\r$\n$\r$\n'
	FileWrite $0 '	output:$\r$\n'
	goto endwrite
	Example1TC:
	FileWrite $0 "	StrCpy $$R0 NotEqual$\r$\n"
	FileWrite $0 "	StrCpy $$0 StopTextCompare$\r$\n$\r$\n"
	goto endwrite
	Example2TC:
	FileWrite $0 "	FileWrite $$R3 '$$8=$$9'$\r$\n"
	FileWrite $0 "	FileWrite $$R3 '$$6=$$7$$\$8$$\$9'$\r$\n$\r$\n"
	goto endwrite
	Example3TC:
	FileWrite $0 "	FileWrite $$R3 '$$8|$$6=$$9'$\r$\n$\r$\n"
	goto endwrite
	Example4TC:
	FileWrite $0 "	FileWrite $$R3 '$$8=$$9'$\r$\n$\r$\n"
	goto endwrite
	endwrite:
	FileWrite $0 '	Push $$0$\r$\n'
	FileWrite $0 'FunctionEnd$\r$\n'
	close:
	FileClose $0
	goto $6
	#FunctionEnd#

	showproject:
	StrCmp $R0 '1. LineFind' 0 +3
	ExecWait 'notepad.exe $CALLBACK'
	goto +4
	SetFileAttributes $PROJECT READONLY
	ExecWait 'notepad.exe $PROJECT'
	SetFileAttributes $PROJECT NORMAL
	Abort

	MainSend:
	GetDlgItem $0 $HWND 1210
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 1
	EnableWindow $0 1
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 1
	EnableWindow $0 1
	GetDlgItem $0 $HWND 1205
	EnableWindow $0 1
	GetDlgItem $0 $HWND 1206
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1207
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1208
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1209
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1211
	EnableWindow $0 1

	StrCmp $FUNCTION LineFind 0 +5
	StrCpy $LINEFIND1 $R1
	StrCpy $LINEFIND2 $R2
	StrCpy $LINEFIND3 $R3
	goto LineFindSend
	StrCmp $FUNCTION LineRead 0 +4
	StrCpy $LINEREAD1 $R1
	StrCpy $LINEREAD2 $R2
	goto LineFindSend
	StrCmp $FUNCTION FileReadFromEnd 0 +3
	StrCpy $FILEREADFROMEND1 $R1
	goto LineFindSend
	StrCmp $FUNCTION LineSum 0 +3
	StrCpy $LINESUM1 $R1
	goto LineFindSend
	StrCmp $FUNCTION FileJoin 0 +5
	StrCpy $FILEJOIN1 $R1
	StrCpy $FILEJOIN2 $R2
	StrCpy $FILEJOIN3 $R3
	goto LineFindSend
	StrCmp $FUNCTION TextCompare 0 +5
	StrCpy $TEXTCOMPARE1 $R1
	StrCpy $TEXTCOMPARE2 $R2
	StrCpy $TEXTCOMPARE3 $R3
	goto LineFindSend
	StrCmp $FUNCTION ConfigRead 0 +4
	StrCpy $CONFIGREAD1 $R1
	StrCpy $CONFIGREAD2 $R2
	goto LineFindSend
	StrCmp $FUNCTION ConfigWrite 0 +5
	StrCpy $CONFIGWRITE1 $R1
	StrCpy $CONFIGWRITE2 $R2
	StrCpy $CONFIGWRITE3 $R3
	goto LineFindSend
	StrCmp $FUNCTION FileRecode 0 +3
	StrCpy $FILERECODE1 $R1
	StrCpy $FILERECODE2 $R2

	LineFindSend:
	StrCmp $R0 "1. LineFind" 0 LineReadSend
	StrCmp $FUNCTION LineFind 0 LineFindSend2
	StrCmp $R4 "Example1" 0 +3
	StrCpy $LINEFIND3 "3:-1"
	goto LineFindSend2
	StrCmp $R4 "Example2" 0 +3
	StrCpy $LINEFIND3 "{5:12 15 -6:-5 -1}"
	goto LineFindSend2
	StrCmp $R4 "Example3" 0 +3
	StrCpy $LINEFIND3 "2:3 10:-5 -3:-2"
	goto LineFindSend2
	StrCmp $R4 "Example4" 0 +3
	StrCpy $LINEFIND3 "10"
	goto LineFindSend2
	StrCmp $R4 "Example5" 0 +3
	StrCpy $LINEFIND3 "1:-1"
	goto LineFindSend2
	StrCmp $R4 "Example6" 0 +3
	StrCpy $LINEFIND3 ""
	goto LineFindSend2
	StrCmp $R4 "Example7" 0 +2
	StrCpy $LINEFIND3 "1:-1"

	LineFindSend2:
	StrCpy $FUNCTION LineFind
	StrCmp $LINEFIND2 '/NUL' 0 +2
	StrCpy $LINEFIND2 ''
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEFIND1"
	GetDlgItem $0 $HWND 1203
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEFIND2"
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEFIND3"
	GetDlgItem $0 $HWND 1207
	ShowWindow $0 1
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Edit"
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 1
	StrCmp $LOG '' +2
	EnableWindow $0 1
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:OutputFile"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Range"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Function"

	StrCmp $R4 "Example7" 0 +9
	GetDlgItem $0 $HWND 1203
	EnableWindow $0 0
	SendMessage $0 ${WM_ENABLE} 1 0
	SendMessage $0 ${WM_SETTEXT} 1 "STR:/NUL"
	GetDlgItem $0 $HWND 1204
	EnableWindow $0 0
	GetDlgItem $0 $HWND 1211
	EnableWindow $0 0
	abort


	LineReadSend:
	StrCmp $R0 "2. LineRead" 0 FileReadFromEndSend
	StrCpy $FUNCTION LineRead
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEREAD1"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINEREAD2"
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Line #"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	Abort

	FileReadFromEndSend:
	StrCmp $R0 "3. FileReadFromEnd" 0 LineSumSend
	StrCpy $FUNCTION FileReadFromEnd
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEREADFROMEND1"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1209
	ShowWindow $0 1
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:View"
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Function"
	Abort

	LineSumSend:
	StrCmp $R0 "4. LineSum" 0 FileJoinSend
	StrCpy $FUNCTION LineSum
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$LINESUM1"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	Abort

	FileJoinSend:
	StrCmp $R0 "5. FileJoin" 0 TextCompareSend
	StrCpy $FUNCTION FileJoin
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEJOIN1"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEJOIN2"
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 1
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 1
	EnableWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILEJOIN3"
	GetDlgItem $0 $HWND 1206
	ShowWindow $0 1
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile1"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile2"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:OutputFile"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	Abort

	TextCompareSend:
	StrCmp $R0 "6. TextCompare" 0 ConfigReadSend
	StrCmp $FUNCTION TextCompare 0 TextCompareSend2
	StrCmp $R5 "Example1" 0 +3
	StrCpy $TEXTCOMPARE3 "FastDiff"
	goto TextCompareSend2
	StrCmp $R5 "Example2" 0 +3
	StrCpy $TEXTCOMPARE3 "FastDiff"
	goto TextCompareSend2
	StrCmp $R5 "Example3" 0 +3
	StrCpy $TEXTCOMPARE3 "FastEqual"
	goto TextCompareSend2
	StrCmp $R5 "Example4" 0 +3
	StrCpy $TEXTCOMPARE3 "SlowDiff"
	goto TextCompareSend2
	StrCmp $R5 "Example5" 0 +2
	StrCpy $TEXTCOMPARE3 "SlowEqual"

	TextCompareSend2:
	StrCpy $FUNCTION TextCompare
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$TEXTCOMPARE1"
	GetDlgItem $0 $HWND 1203
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$TEXTCOMPARE2"
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 1
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 1
	EnableWindow $0 0
	SendMessage $0 ${WM_ENABLE} 1 0
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$TEXTCOMPARE3"
	GetDlgItem $0 $HWND 1208
	ShowWindow $0 1
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:View"
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 1
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:TextFile1"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:TextFile2"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Option"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Function"
	abort

	ConfigReadSend:
	StrCmp $R0 "7. ConfigRead" 0 ConfigWriteSend
	StrCpy $FUNCTION ConfigRead
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGREAD1"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGREAD2"
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Entry"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	Abort

	ConfigWriteSend:
	StrCmp $R0 "8. ConfigWrite" 0 FileRecodeSend
	StrCpy $FUNCTION ConfigWrite
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGWRITE1"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGWRITE2"
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$CONFIGWRITE3"
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Entry"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Value"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	Abort

	FileRecodeSend:
	StrCmp $R0 "9. FileRecode" 0 Abort
	StrCpy $FUNCTION FileRecode
	GetDlgItem $0 $HWND 1201
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILERECODE1"
	GetDlgItem $0 $HWND 1203
	ShowWindow $0 1
	SendMessage $0 ${WM_SETTEXT} 1 "STR:$FILERECODE2"
	GetDlgItem $0 $HWND 1204
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1205
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1211
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1212
	ShowWindow $0 0
	GetDlgItem $0 $HWND 1213
	SendMessage $0 ${WM_SETTEXT} 1 "STR:InputFile"
	GetDlgItem $0 $HWND 1214
	SendMessage $0 ${WM_SETTEXT} 1 "STR:Format"
	GetDlgItem $0 $HWND 1215
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	GetDlgItem $0 $HWND 1216
	SendMessage $0 ${WM_SETTEXT} 1 "STR:"
	Abort

;=Enter=
	Enter:
	StrCmp $R1 '' 0 +3
	StrCpy $0 'Choose InputFile'
	goto send
	IfFileExists $R1 +3
	StrCpy $0 'InputFile is not exist'
	goto send

	StrCmp $R0 "1. LineFind" LineFindRead
	StrCmp $R0 "2. LineRead" LineRead
	StrCmp $R0 "3. FileReadFromEnd" FileReadFromEnd
	StrCmp $R0 "4. LineSum" LineSum
	StrCmp $R0 "5. FileJoin" FileJoin
	StrCmp $R0 "6. TextCompare" LineFind-TextCompare
	StrCmp $R0 "7. ConfigRead" ConfigRead
	StrCmp $R0 "8. ConfigWrite" ConfigWrite
	StrCmp $R0 "9. FileRecode" FileRecode
	Abort

	LineFindRead:
	StrCmp $R4 "Example7" 0 LineFind-TextCompare
	${LineFind} '$R1' '/NUL' '$R3' LineFindCallback
	IfErrors error
	StrCmp $R0 StopLineFind 0 done
	StrCpy $0 'stopped'
	goto send

	LineFind-TextCompare:
	GetLabelAddress $6 LineFindBack
	goto Edit
	LineFindBack:
	FileClose $0
	StrCmp $R0 "6. TextCompare" Compile
	StrCmp $CALLBACK '' Compile
	${FileJoin} "$PROJECT" "$CALLBACK" ""

	Compile:
	StrCmp $LOG '' 0 +4
	GetTempFileName $LOG $PLUGINSDIR
	GetDlgItem $0 $HWND 1212
	EnableWindow $0 1
	ReadRegStr $0 HKLM "SOFTWARE\NSIS" ""
	IfErrors 0 +2
	StrCpy $0 "${NSISDIR}"
	nsExec::Exec '"$0\makensis.exe" /O$LOG $PROJECT'
	Pop $0
	StrCmp $0 0 0 +6
	ExecWait '$PROJECT.exe' $0
	Delete $PROJECT
	Delete $PROJECT.exe
	StrCpy $PROJECT ''
	goto done
	MessageBox MB_YESNO|MB_ICONEXCLAMATION "Compile error. Open log?" IDNO +2
	Exec 'notepad.exe $LOG'
	StrCpy $0 "Compile Error"
	goto send

	LineRead:
	${LineRead} "$R1" "$R2" $0
	IfErrors error send

	FileReadFromEnd:
	${FileReadFromEnd} "$R1" "FileReadFromEndCallback"
	IfErrors error
	StrCmp $R0 StopFileReadFromEnd 0 done
	StrCpy $0 'stopped'
	goto send

	LineSum:
	${LineSum} "$R1" $0
	IfErrors error send

	FileJoin:
	${FileJoin} "$R1" "$R2" "$R3"
	IfErrors error
	MessageBox MB_YESNO "          Open output file?" IDNO done
	StrCmp $R3 '' 0 +3
	Exec '"notepad.exe" "$R1"'
	goto done
	Exec '"notepad.exe" "$R3"'
	goto done

	ConfigRead:
	${ConfigRead} "$R1" "$R2" $0
	IfErrors error send

	ConfigWrite:
	${ConfigWrite} "$R1" "$R2" "$R3" $0
	IfErrors error
	MessageBox MB_YESNO "          Open output file?" IDNO send
	Exec '"notepad.exe" "$R1"'
	goto send

	FileRecode:
	${FileRecode} "$R1" "$R2"
	IfErrors error
	MessageBox MB_YESNO "          Open output file?" IDNO done
	Exec '"notepad.exe" "$R1"'
	goto done

	error:
	StrCpy $0 'error'
	goto send

	done:
	StrCpy $0 'Done'

	send:
	GetDlgItem $1 $HWND 1210
	SendMessage $1 ${WM_SETTEXT} 1 "STR:$0"

	abort:
	Abort
FunctionEnd

Function LineFindCallback
	MessageBox MB_OKCANCEL '$$R9       "Line"=[$R9]$\n$$R8           "#"=[$R8]$\n$$R7          "-#"=[$R7]$\n$$R6   "Range"=[$R6]$\n$$R5     "Read"=[$R5]$\n$$R4     "Write"=[$R4]' IDOK +2
	StrCpy $R0 StopLineFind

	Push $R0
FunctionEnd

Function FileReadFromEndCallback
	MessageBox MB_OKCANCEL '$$9       "Line"=[$9]$\n$$8           "#"=[$8]$\n$$7          "-#"=[$7]' IDOK +2
	StrCpy $R0 StopFileReadFromEnd

	Push $R0
FunctionEnd

Function .onInit
	InitPluginsDir
	GetTempFileName $INI $PLUGINSDIR
	File /oname=$INI "TextFunc.ini"
FunctionEnd

Page instfiles

Section -Empty
SectionEnd
