Dołączenie pliku nagłówkowego:
!include "FileFunc.nsh"
Wywołanie funkcji:
Section Install ${GetFileExt} "C:\Pobrane elementy\Index.html" $R0 ; $R0="html" SectionEnd
Section un.Install ${GetParent} "C:\Pobrane elementy\Index.html" $R0 ; $R0="C:\Pobrane elementy" SectionEnd
${Locate} "[Ścieżka]" "[Opcje]" "Funkcja"
"[Ścieżka]" ; Dysk lub katalog ; "[Opcje]" ; /L=[FD|F|D|DE|FDE] ; /L=FD - Lokalizuje pliki oraz katalogi (domyślne) ; /L=F - Lokalizuje tylko pliki ; /L=D - Lokalizuje tylko katalogi ; /L=DE - Lokalizuje tylko puste katalogi ; /L=FDE - Lokalizuje pliki oraz puste katalogi ; /M=[maska] ; /M=*.* - Lokalizuje wszystko (domyślnie) ; /M=*.doc - Lokalizuje Work.doc, 1.doc ... ; /M=Pho* - Lokalizuje PHOTOS, phone.txt ... ; /M=win???.exe - Lokalizuje winamp.exe, winver.exe ... ; /M=winamp.exe - Lokalizuje tylko winamp.exe ; /S=No:No[B|K|M|G] ; /S= - Nie wykrywa rozmiaru pliku (szybsze) (domyślne) ; /S=0:0B - Lokalizuje tylko pliki o rozmiarze 0 bajtów ; /S=5:9K - Lokalizuje tylko pliki o rozmiarze od 5 do 9 kilobajtów ; /S=:10M - Lokalizuje tylko pliki o rozmiarze 10 megabajtów lub mniej ; /S=1G - Lokalizuje tylko pliki o rozmiarze 1 gigabajt lub więcej ; /G=[1|0] ; /G=1 - Lokalizuje z podkatalogami (domyślnie) ; /G=0 - Lokalizuje bez podkatalogów ; /B=[0|1] ; /B=0 - Baner nie jest używany (domyślnie) ; /B=1 - Baner jest używany. Wywołanie zwrotne, gdy funkcja ; zaczyna wyszukiwać w nowym katalogu "Funkcja" ; Funkcja zwrotna, po znalezieniu Function "Funkcja" ; $R9 "path\name" ; $R8 "path" ; $R7 "name" ; $R6 "size" ($R6="", jeśli katalog, $R6="0", jeśli plik z parametrem /S=) ; $R0-$R5 nie używane (zapisywanie do nich danych). ; ... Push $var ; jeśli $var="StopLocate" to wyjście z funkcji FunctionEnd
Section ${Locate} "C:\ftp" "/L=F /M=RPC DCOM.rar /S=1K" "Przyklad1" ; Plik 'RPC DCOM.rar' w katalogu 'C:\ftp' o rozmiarze 1 Kb lub więcej IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 MessageBox MB_OK "$$R0=$R0" SectionEnd Function Przyklad1 StrCpy $R0 $R9 ; $R0="C:\ftp\files\RPC DCOM.rar" MessageBox MB_YESNO '$R0$\n$\nSzukać kolejnego?' IDYES +2 StrCpy $0 StopLocate Push $0 FunctionEnd
Section GetTempFileName $R0 FileOpen $R1 $R0 w ${Locate} "C:\ftp" "/S=:2M /G=0" "Przyklad2" ; Katalogi i wszystkie pliki o rozmiarze 2 Mb lub mniej ; nie skanuj podkatalogów FileClose $R1 IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 Exec '"notepad.exe" "$R0"' SectionEnd Function Przyklad2 StrCmp $R6 '' 0 +3 FileWrite $R1 "Katalog=$R9$\r$\n" goto +2 FileWrite $R1 "Plik=$R9 Rozmiar=$R6 Mb$\r$\n" Push $0 FunctionEnd
Section GetTempFileName $R0 ${Locate} "C:\ftp" "/L=F /S=0K" "Przyklad3" ; Wszystkie pliki w katalogu 'C:\ftp' o rozmiarze w Kb IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 Exec '"notepad.exe" "$R0"' SectionEnd Function Przyklad3 WriteIniStr $R0 "$R8" "$R7" "$R6 Kb" Push $0 FunctionEnd
Section StrCpy $R2 0 StrCpy $R3 0 loop: StrCpy $R1 0 ${Locate} "C:\ftp" "/L=DE" "Przyklad4" IntOp $R3 $R3 + 1 IntOp $R2 $R2 + $R1 StrCmp $R0 StopLocate +2 StrCmp $R1 0 0 loop IfErrors 0 +2 MessageBox MB_OK 'Błąd' IDOK +2 MessageBox MB_OK '$R2 katalogi zostały usunięte$\n$R3 przebiegów' SectionEnd Function Przyklad4 MessageBox MB_YESNOCANCEL 'Usunąć pusty katalog "$R9"?' IDNO end IDCANCEL cancel RMDir $R9 IntOp $R1 $R1 + 1 goto end cancel: StrCpy $R0 StopLocate end: Push $R0 FunctionEnd
Section StrCpy $R0 "C:\ftp" ; Katalog, z którego przenosimy pliki StrCpy $R1 "C:\ftp2" ; Katalog, do którego przenosimy pliki StrCpy $R2 0 StrCpy $R3 0 ${Locate} "$R0" "/L=F" "Przyklad5" IfErrors 0 +2 MessageBox MB_OK 'Błąd' IDOK +4 StrCmp $R3 0 0 +2 MessageBox MB_OK '$R2 plików zostało przeniesionych' IDOK +2 MessageBox MB_OK '$R2 plików zostało przeniesionych$\n$R3 NIE zostało przeniesionych' SectionEnd Function Przyklad5 StrCmp $R8 $R1 +6 IfFileExists '$R1\$R7' +4 Rename $R9 '$R1\$R7' IntOp $R2 $R2 + 1 goto +2 IntOp $R3 $R3 + 1 Push $0 FunctionEnd
Section StrCpy $R0 "C:\ftp" ; Katalog, z którego kopiujemy pliki StrCpy $R1 "C:\ftp2" ; Katalog, do którego kopiujemy pliki StrLen $R2 $R0 GetTempFileName $0 FileOpen $R3 $0 w ${Locate} "$R0" "/L=FDE" "Przyklad6" FileClose $R3 IfErrors 0 +2 MessageBox MB_OK 'Błąd' Exec '"notepad.exe" "$0"' ; Wyświetl dziennik w notatniku SectionEnd Function Przyklad6 StrCpy $1 $R8 '' $R2 StrCmp $R6 '' 0 +3 CreateDirectory '$R1$1\$R7' goto end CreateDirectory '$R1$1' CopyFiles /SILENT $R9 '$R1$1' IfFileExists '$R1$1\$R7' 0 +3 FileWrite $R3 "-stary:$R9 -nowy:$R1$1\$R7 -sukces$\r$\n" goto +2 FileWrite $R3 "-stary:$R9 -nowy:$R1$1\$R7 -błąd$\r$\n" end: Push $0 FunctionEnd
Section StrCpy $R0 "C:\ftp" ; Pobierana struktura katalogów StrCpy $R1 "C:\ftp2" ; Katalog, do którego przeniesiona zostanie struktura katalogów StrLen $R2 $R0 ${Locate} "$R0" "/L=D" "Przyklad7" IfErrors 0 +2 MessageBox MB_OK 'Błąd' SectionEnd Function Przyklad7 StrCpy $1 $R9 '' $R2 CreateDirectory '$R1$1' Push $0 FunctionEnd
(Lokalizacja z banerem - wymagana jest wtyczka NxS)
Section nxs::Show /NOUNLOAD `Instalator $(^Name)` /top \ `Trwa wyszukiwanie$\r$\nProszę czekać..., jeśli możesz...` /h 1 /can 1 /end ${Locate} "C:\WINDOWS" "/L=F /M=*.inf /B=1" "Przyklad8" nxs::Destroy SectionEnd Function Przyklad8 StrCmp $R0 $R8 abortcheck StrCpy $R0 $R8 nxs::Update /NOUNLOAD /sub "$R8" /pos 78 /end abortcheck: nxs::HasUserAborted /NOUNLOAD Pop $0 StrCmp $0 1 0 +2 StrCpy $0 StopLocate StrCmp $R9 '' end ; ... end: Push $0 FunctionEnd
${GetSize} "[Ścieżka]" "[Opcje]" $var1 $var2 $var3
"[Ścieżka]" ; Dysk lub katalog ; "[Opcje]" ; /M=[maska] ; /M=*.* - Znajduje wszystko (domyślnie) ; /M=*.doc - Znajduje Work.doc, 1.doc ... ; /M=Pho* - Znajduje PHOTOS, phone.txt ... ; /M=win???.exe - Znajduje winamp.exe, winver.exe ... ; /M=winamp.exe - Znajduje tylko winamp.exe ; /S=No:No[B|K|M|G] ; /S= - Nie wykrywa rozmiaru pliku (szybsze) (domyślnie) ; /S=0:0B - Wyszukuje tylko pliki o rozmiarze równym dokładnie 0 bajtów ; /S=5:9K - Wyszukuje tylko pliki o rozmiarze od 5 do 9 kilobajtów ; /S=:10M - Wyszukuje tylko pliki o rozmiarze 10 megabajtów lub mniejsze ; /S=1G - Wyszukuje tylko pliki o rozmiarze 1 gigabajt lub większe ; /G=[1|0] ; /G=1 - Wyszukuje w podkatalogach (domyślnie) ; /G=0 - Wyszukuje bez podkatalogów ; $var1 ; Wynik1: Rozmiar $var2 ; Wynik2: Suma plików $var3 ; Wynik3: Suma katalogów
Section ; Znajduje rozmiar pliku "C:\WINDOWS\Explorer.exe" w kilobajtach ${GetSize} "C:\WINDOWS" "/M=Explorer.exe /S=0K /G=0" $0 $1 $2 ; $0="220" Kb ; $1="1" plików ; $2="" katalogów IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd
Section ; Znajduje rozmiar katalogu "C:\Installs\Reanimator\Drivers" w megabajtach ${GetSize} "C:\Installs\Reanimator\Drivers" "/S=0M" $0 $1 $2 ; $0="132" Mb ; $1="555" plików ; $2="55" katalogów IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd
Section ; Znajduje liczbę plików i katalogów "C:\WINDOWS" (bez podkatalogów) ${GetSize} "C:\WINDOWS" "/G=0" $0 $1 $2 ; $0="" rozmiar ; $1="253" plików ; $2="46" katalogów IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd
${DriveSpace} "[Napęd]" "[Opcje]" $var
"[Napęd]" ; Dysk do sprawdzenia ; "[Opcje]" ; /D=[T|O|F] ; /D=T - Całkowita przestrzeń (domyślnie) ; /D=O - Zajęta przestrzeń ; /D=F - Wolna przestrzeń ; /S=[B|K|M|G] ; /S=B - Rozmiar w bajtach (domyślnie) ; /S=K - Rozmiar w kilobajtach ; /S=M - Rozmiar w megabajtach ; /S=G - Rozmiar w gigabajtach ; $var ; Wynik: Rozmiar
Section ${DriveSpace} "C:\" "/D=F /S=M" $R0 ; $R0="2530" megabajtów wolnego miejsca na dysku C: SectionEnd
${GetDrives} "[Opcja]" "Funkcja"
"[Opcja]" ; [FDD+HDD+CDROM+NET+RAM] ; FDD Napędy stacji dyskietek ; HDD Napędy dysku twardego ; CDROM Napędy CD-ROM ; NET Napędy sieciowe ; RAM Napędy dysków RAM ; ; [ALL] ; Znajduje wszystkie napędy po literze (domyślnie) ; "Funkcja" ; Funkcja zwrotna po znalezieniu Function "Funkcja" ; $9 "litera napędu" (a:\ c:\ ...) ; $8 "typ napędu" (FDD HDD ...) ; $R0-$R9 nie są używane (przechowywane są w nich dane). ; ... Push $var ; jeśli $var="StopGetDrives", to następuje wyjście z funkcji FunctionEnd
Section ${GetDrives} "FDD+CDROM" "Przyklad1" SectionEnd Function Przyklad1 MessageBox MB_OK "$9 (Napęd $8)" Push $0 FunctionEnd
Section ${GetDrives} "ALL" "Przyklad2" SectionEnd Function Przyklad2 MessageBox MB_OK "$9 (Napęd $8)" Push $0 FunctionEnd
Section StrCpy $R0 "D:\" ; Litera napędu StrCpy $R1 "nieprawidłowy" ${GetDrives} "ALL" "Przyklad3" MessageBox MB_OK "Typ napędu $R0 to $R1" SectionEnd Function Przyklad3 StrCmp $9 $R0 0 +3 StrCpy $R1 $8 StrCpy $0 StopGetDrives Push $0 FunctionEnd
${GetTime} "[Plik]" "[Opcja]" $var1 $var2 $var3 $var4 $var5 $var6 $var7
"[Plik]" ; Ignorowany, jeśli "L" lub "LS" ; "[Opcja]" ; [Opcje] ; L Czas lokalny ; A Ostatni czas dostępu do pliku ; C Czas utworzenia pliku ; M Czas modyfikacji pliku ; LS Czas systemowy (UTC) ; AS Ostatni czas dostępu do pliku (UTC) ; CS Czas utworzenia pliku (UTC) ; MS Czas modyfikacji pliku (UTC) ; $var1 ; Wynik1: dzień $var2 ; Wynik2: miesiąc $var3 ; Wynik3: rok $var4 ; Wynik4: nazwa dnia tygodnia $var5 ; Wynik5: godzina $var6 ; Wynik6: minuta $var7 ; Wynik7: sekundy
Section ${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6 ; $0="01" dzień ; $1="04" miesiąc ; $2="2005" rok ; $3="Piątek" nazwa dnia tygodnia ; $4="16" godzina ; $5="05" minuta ; $6="50" sekundy MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6' SectionEnd
Section ${GetTime} "$WINDIR\Explorer.exe" "C" $0 $1 $2 $3 $4 $5 $6 ; $0="12" dzień ; $1="10" miesiąc ; $2="2004" rok ; $3="Wtorek" nazwa dnia tygodnia ; $4="2" godzina ; $5="32" minuta ; $6="03" sekundy IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6' SectionEnd
Section ${GetTime} "" "LS" $0 $1 $2 $3 $4 $5 $6 ; $0="01" dzień ; $1="04" miesiąc ; $2="2005" rok ; $3="Piątek" nazwa dnia tygodnia ; $4="11" godzina ; $5="05" minuta ; $6="50" sekundy MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6' SectionEnd
Section ${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6 StrCmp $4 0 0 +3 StrCpy $4 12 goto +3 StrCmp $4 12 +5 IntCmp $4 12 0 0 +3 StrCpy $7 AM goto +3 IntOp $4 $4 - 12 StrCpy $7 PM MessageBox MB_OK 'Data=$0/$1/$2 ($3)$\nCzas=$4:$5:$6 $7' SectionEnd
${GetFileAttributes} "[Plik]" "[Atrybuty]" $var
"[Plik]" ; Plik lub katalog ; "[Atrybuty]" ; "ALL" (domyślnie) ; -wszystkie atrybuty pliku połączone znakiem "|" na wyjściu ; ; "READONLY|HIDDEN|SYSTEM|DIRECTORY|ARCHIVE| ; DEVICE|NORMAL|TEMPORARY|SPARSE_FILE|REPARSE_POINT| ; COMPRESSED|OFFLINE|NOT_CONTENT_INDEXED|ENCRYPTED" ; -plik musi mieć określone atrybuty ; $var ; Wynik: ; $var=atr1|atr2|... (jeśli użyto "ALL") ; $var=1 plik posiada określone atrybuty ; $var=0 plik nie posiada określonych atrybutów
Section ${GetFileAttributes} "C:\MSDOS.SYS" "ALL" $R0 ; $R0=READONLY|HIDDEN|SYSTEM|ARCHIVE SectionEnd
Section ${GetFileAttributes} "C:\MSDOS.SYS" "SYSTEM|HIDDEN" $R0 ; $R0=1 SectionEnd
Section ${GetFileAttributes} "C:\MSDOS.SYS" "NORMAL" $R0 ; $R0=0 SectionEnd
${GetFileVersion} "[Plik wykonywalny]" $var
"[Plik wykonywalny]" ; Plik wykonywalny (*.exe *.dll ...) $var ; Wynik: Numer wersji
Section ${GetFileVersion} "C:\ftp\program.exe" $R0 ; $R0="1.1.0.12" SectionEnd
${GetExeName} $var
Section ${GetExeName} $R0 ; $R0="C:\ftp\program.exe" SectionEnd
${GetExePath} $var
Section ${GetExePath} $R0 ; $R0="C:\ftp" SectionEnd
${GetParameters} $var
Section ${GetParameters} $R0 ; $R0="[parametry]" SectionEnd
${GetOptions} "[Parametry]" "[Opcja]" $var
"[Parametry]" ; Parametry linii poleceń ; "[Opcje]" ; Nazwa opcji ; $var ; Wynik: łańcuch znaków opcji
Section ${GetOptions} "/S /T" "/T" $R0 IfErrors 0 +2 MessageBox MB_OK "Nie znaleziono" IDOK +2 MessageBox MB_OK "Znaleziono" SectionEnd
Section ${GetOptions} "-INSTDIR=C:\Program Files\Common Files -SILENT=yes" "-INSTDIR=" $R0 ;$R0=C:\Program Files\Common Files SectionEnd
Section ${GetOptions} '/SILENT=yes /INSTDIR="C:/Program Files/Common Files" /ADMIN=password' \ "/INSTDIR=" $R0 ;$R0=C:/Program Files/Common Files SectionEnd
Section ${GetOptions} `-SILENT=yes -INSTDIR='"C:/Program Files/Common Files"' \ -ADMIN=password` "-INSTDIR=" $R0 ;$R0="C:/Program Files/Common Files" SectionEnd
${GetRoot} "[Pełna Ścieżka dostępu]" $var
Section ${GetRoot} "C:\Program Files\NSIS" $R0 ; $R0="C:" SectionEnd
Section ${GetRoot} "\\SuperPimp\NSIS\Source\exehead\Ui.c" $R0 ; $R0="\\SuperPimp\NSIS" SectionEnd
${GetParent} "[Ścieżka dostępu]" $var
Section ${GetParent} "C:\Program Files\Winamp\uninstwa.exe" $R0 ; $R0="C:\Program Files\Winamp" SectionEnd
${GetFileName} "[Ścieżka dostępu]" $var
Section ${GetFileName} "C:\Program Files\Winamp\uninstwa.exe" $R0 ; $R0="uninstwa.exe" SectionEnd
${GetBaseName} "[Ścieżka dostępu]" $var
Section ${GetBaseName} "C:\ftp\program.exe" $R0 ; $R0="program" SectionEnd
${GetFileExt} "[Ścieżka dostępu]" $var
Section ${GetFileExt} "C:\ftp\program.exe" $R0 ; $R0="exe" SectionEnd
${BannerTrimPath} "[Ścieżka dostępu]" "[Opcja]" $var
"[Ścieżka dostępu]" ; ; "[Opcja]" ; [Długość][A|B|C|D] ; ; Długość -Maksymalna długość łańcucha znaków ; A -Skraca ścieżkę dostępu w środku (domyślnie) ; (C:\root\...\trzecia ścieżka dostępu) ; Jeśli tryb A nie jest dostępny, to użyty zostanie tryb B ; B -Skraca ścieżkę dostępu z prawej ; (C:\root\druga ścieżka dostępu\...) ; Jeśli tryb B nie jest dostępny, to użyty zostanie tryb C ; C -Skraca ścieżkę dostępu z prawej ; (C:\root\druga ścieżka dostępu\trzecia śc...) ; D -Skraca ścieżkę dostępu z prawej + nazwa pliku ; (C:\root\druga śc...\trzecia ścieżka dostępu) ; Jeśli tryb D nie jest dostępny, to użyty zostanie tryb C ; $var ; Wynik: Skrócona ścieżka dostępu
Section ${BannerTrimPath} "C:\Server\Documents\Terminal\license.htm" "35A" $R0 ; $R0=C:\Server\...\Terminal\license.htm SectionEnd
!include "WinMessages.nsh" !include "FileFunc.nsh" Section Banner::show "Rozpoczynanie..." Banner::getWindow Pop $R1 ${Locate} "$WINDIR" "/L=F /M=*.* /B=1" "LocateCallback" Banner::destroy SectionEnd Function LocateCallback StrCmp $R0 $R8 code StrCpy $R0 $R8 ${BannerTrimPath} "$R8" "38B" $R8 GetDlgItem $1 $R1 1030 SendMessage $1 ${WM_SETTEXT} 0 "STR:$R8" code: StrCmp $R9 '' end ; ... end: Push $0 FunctionEnd
(Wtyczka NxS):
!include "FileFunc.nsh" Section nxs::Show /NOUNLOAD `Instalacja $(^Name)` \ /top `Instalator coś wyszukuje$\nProszę czekać$\nJeśli możesz...` \ /h 1 /can 1 /end ${Locate} "$WINDIR" "/L=F /M=*.* /B=1" "LocateCallback" nxs::Destroy SectionEnd Function LocateCallback StrCmp $R0 $R8 abortcheck StrCpy $R0 $R8 ${BannerTrimPath} "$R8" "55A" $R8 nxs::Update /NOUNLOAD /sub "$R8" /pos 78 /end abortcheck: nxs::HasUserAborted /NOUNLOAD Pop $0 StrCmp $0 1 0 +2 StrCmy $0 StopLocate StrCmp $R9 '' end ; ... end: Push $0 FunctionEnd
${DirState} "[Ścieżka dostępu]" $var
"[Ścieżka dostępu]" ; Katalog $var ; Wynik: ; $var=0 (pusty) ; $var=1 (pełny) ; $var=-1 (katalog nie został znaleziony)
Section ${DirState} "$TEMP" $R0 ; $R0="1" katalog jest pełny SectionEnd
Dołączenie pliku nagłówkowego:
!include "TextFunc.nsh"
Wywoływanie funkcji:
Section Instalacja ${LineRead} "C:\a.log" "-1" $R0 ; $R0="Ostatnia linia$\r$\n" SectionEnd
Section un.Instalacja ${TrimNewLines} "Ostatnia linia$\r$\n" $R0 ; $R0="Ostatnia linia" SectionEnd
${LineFind} "[Plik1]" "[Plik2|/NUL]" "[Liczba linii]" "Funkcja"
"[Plik1]" ; Wejściowy plik tekstowy ; "[Plik2|/NUL]" ; [Plik2] ; Wyjściowy plik tekstowy ; Jeśli pusty, to Plik2=Plik1 ; [/NUL] ; Brak wyjściowego pliku tekstowego (odczytuje tylko Plik1) ; "[Liczba linii]" ; [Nr|-Nr|Nr:Nr|{Nr}|{-Nr}|{Nr:Nr}] ; 1:-1 wszystkie linie do zmiany (domyślnie) ; 2 druga linia od początku ; -3 trzecia linia od końca ; 5:9 zakres linii od 5 do 9 ; {2} tylko druga linia od początku na wyjściu ; {-3} tylko trzecia linia od końca na wyjściu ; {5:9} tylko zakres linii od 5 do 9 na wyjściu ; "Funkcja" ; Funkcja zwrotna dla określonych linii Function "Funkcja" ; $R9 Bieżąca linia ; $R8 Numer bieżącej linii ; $R7 Negatywny numer bieżącej linii ; $R6 Bieżący zakres linii ; $R5 Uchwyt pliku otwartego do odczytu ; $R4 Uchwyt pliku otwartego do zapisu ($R4="", jeśli "/NUL") ; możesz użyć dowolnej funkcji operujących na łańcuchu znaków ; $R0-$R3 nie są używane (przechowywane są w nich dane). ; ... Push $var ; jeśli $var="StopLineFind", to następuje wyjście z funkcji ; jeśli $var="SkipWrite", to pomija bieżącą linie (ignorowany, gdy "/NUL") FunctionEnd
Section ${LineFind} "C:\a.log" "C:\a-edited.log" "3:-1" "Przyklad1" IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd Function Przyklad1 ${TrimNewLines} '$R9' $R9 StrCpy $R9 $R9 '' 2 StrCpy $R9 '$R9$\r$\n' ; zaczyna od 3 linii i usuwa dwa pierwsze symbole Push $0 FunctionEnd
Section ${LineFind} "C:\a.log" "a.log" "{5:12 15 -6:-5 -1}" "Przyklad2" IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd Function Przyklad2 ${TrimNewLines} '$R9' $R9 StrCpy $R9 "$R9 ~zmieniona linia ($R8)~$\r$\n" Push $0 FunctionEnd
Section ${LineFind} "C:\a.log" "\logs\a.log" "2:3 10:-5 -3: - 2" "Przyklad3" IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd Function Przyklad3 StrCpy $0 SkipWrite Push $0 FunctionEnd
Section ${LineFind} "C:\a.log" "" "10" "Przyklad4 IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd Function Przyklad4 FileWrite $R4 "---Pierwsza linia---$\r$\n" FileWrite $R4 "---Druga linia ...---$\r$\n" Push $0 FunctionEnd
!include "WordFunc.nsh" Section StrCpy $R0 0 ${LineFind} "C:\a.log" "C:\logs\a.log" "1:-1" "Przyklad5" IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 MessageBox MB_OK "Zmienione linie=$R0" SectionEnd Function Przyklad5 StrCpy $1 $R9 ${WordReplace} '$R9' ' ' '_' '+*' $R9 StrCmp $1 $R9 +2 IntOp $R0 $R0 + 1 ; $R0 - liczba zmienionych linii Push $0 FunctionEnd
Section ${LineFind} "\a.log" "C:\logs\a.log" "" "Przyklad6" IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 MessageBox MB_OK "Przetworzone linie=$R1:$R2" SectionEnd Function Przyklad6 ; (Obcina linie od linii do innej linii (również tę linię)) StrCmp $R0 finish stop StrCmp $R0 start finish StrCmp $R9 'Początkowa linia$\r$\n' 0 skip StrCpy $R0 start StrCpy $R1 $R8 goto code finish: StrCmp $R9 'Końcowa linia$\r$\n' 0 code StrCpy $R0 finish StrCpy $R2 $R8 goto code skip: StrCpy $0 SkipWrite goto output stop: StrCpy $0 StopLineFind goto output ; (Usuwa linie od linii do innej linii (również tę linię)) ; StrCmp $R0 finish code ; StrCmp $R0 start finish ; StrCmp $R9 'Początkowa linia$\r$\n' 0 code ; StrCpy $R0 start ; StrCpy $R1 $R8 ; goto skip ; finish: ; StrCmp $R9 'Końcowa linia$\r$\n' 0 skip ; StrCpy $R0 finish ; StrCpy $R2 $R8 ; skip: ; StrCpy $0 SkipWrite ; goto output code: ; ... output: Push $0 FunctionEnd
Section ${LineFind} "C:\a.log" "/NUL" "1:-1" "Przyklad7" IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd Function Przyklad7 MessageBox MB_OKCANCEL '$$R9 "Linia"=[$R9]$\n$$R8 "#" =[$R8]' IDOK +2 StrCpy $0 StopLineFind Push $0 FunctionEnd
${LineRead} "[Plik]" "[Numer linii]" $var
"[Plik]" ; Wejściowy plik tekstowy ; "[Numer linii]" ; [Nr|-Nr] ; 3 liczba linii od początku ; -5 liczba linii od końca ; $var ; Wynik: Linia
Section ${LineRead} "C:\a.log" "-1" $R0 ; $R0="Ostatnia linia$\r$\n" SectionEnd
${FileReadFromEnd} "[Plik]" "Funkcja"
"[Plik]" ; Wejściowy plik tekstowy "Funkcja" ; Funkcja zwrotna Function "Funkcja" ; $9 Bieżąca linia ; $8 Bieżący numer linii ; $7 Negatywny numer bieżącej linii ; $R0-$R9 nie są używane (przechowywane są w nich dane). ; ... Push $var ; jeśli $var="StopFileReadFromEnd", to następuje wyjście z funkcji FunctionEnd
Section ${FileReadFromEnd} "C:\a.log" "Przyklad1" IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd Function Przyklad1 MessageBox MB_OKCANCEL '"Linia"=[$9]$\n "#"=[$8]$\n "-#"=[$7]' IDOK +2 StrCpy $0 StopFileReadFromEnd Push $0 FunctionEnd
Section GetTempFileName $R0 FileOpen $R1 $R0 w ${FileReadFromEnd} "C:\a.log" "Przyklad2" FileClose $R1 IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 Exec '"notepad.exe" "$R0"' SectionEnd Function Przyklad2 StrCmp $7 -1 0 +5 StrCpy $1 $9 1 -1 StrCmp $1 '$\n' +3 StrCmp $1 '$\r' +2 StrCpy $9 '$9$\r$\n' FileWrite $R1 "$9" Push $0 FunctionEnd
${LineSum} "[Plik]" $var
"[Plik]" ; Plik wejściowy $var ; Wynik: Suma linii
Section ${LineSum} "C:\a.log" $R0 ; $R0="54" SectionEnd
${FileJoin} "[Plik1]" "[Plik2]" "[Plik3]"
"[Plik1]" ; Wejściowy Plik1 "[Plik2]" ; Wejściowy Plik2 "[Plik3]" ; Wyjściowy Plik3 ; Jeśli [Plik3]="", to dodaje [Plik2] do [Plik1]
Section ${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\Z.log" SectionEnd
Section ${FileJoin} "C:\a.log" "C:\logs\b.log" "C:\a.log" SectionEnd
${TextCompare} "[Plik1]" "[Plik2]" "[Opcja]" "Funkcja"
"[Plik1]" ; Plik1 Porównuje te linie "[Plik2]" ; Plik2 Porównuje z tymi liniami "[Opcje]" ; (linia po linii): ; FastDiff Porównuje linię N (Plik1) z linią N (Plik2) ; Wywołaj funkcję, jeśli znaleziono różną linie ; FastEqual Porównuje linię N (Plik1) z linią N (Plik2) ; Wywołaj funkcję, jeśli znaleziono taką samą linię ; (numer linii niezależny): ; SlowDiff Porównuje linię N (Plik1) z wszystkimi liniami (Plik2) ; Wywołaj funkcję, jeśli linia N (Plik1) jest różna ; SlowEqual Porównuje linię N (Plik1) z wszystkimi liniami (Plik2) ; Wywołaj funkcję, jeśli linia N (Plik1) jest taka sama "Funkcja" ; Funkcja zwrotna Function "Funkcja" ; $9 "Linia Pliku1" ; $8 "Numer linii" ; $7 "Linia Pliku2" (pusty, jeśli SlowDiff) ; $6 "Numer linii" (pusty, jeśli SlowDiff) ; $R0-$R9 nie są używane (przechowywane są w nich dane). ; ... Push $var ; jeśli $var="StopTextCompare", to następuje wyjście z funkcji FunctionEnd
Section StrCpy $R0 '' ${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Przyklad1" IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +4 StrCmp $R0 NotEqual 0 +2 MessageBox MB_OK "Pliki różnią się" IDOK +2 MessageBox MB_OK "Pliki są takie same" SectionEnd Function Przyklad1 StrCpy $R0 NotEqual StrCpy $0 StopTextCompare Push $0 FunctionEnd
Section StrCpy $R0 'Text1.txt' StrCpy $R1 'Text2.txt' GetTempFileName $R2 FileOpen $R3 $R2 w FileWrite $R3 "$R0 | $R1$\r$\n" ${TextCompare} "$R0" "$R1" "FastDiff" "Przyklad2" IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 Exec "notepad.exe $R2" FunctionEnd Function Przyklad2 FileWrite $R3 '$8=$9' FileWrite $R3 '$6=$7$\r$\n' Push $0 FunctionEnd
Section StrCpy $R0 'Text1.txt' StrCpy $R1 'Text2.txt' GetTempFileName $R2 FileOpen $R3 $R2 w FileWrite $R3 "$R0 | $R1$\r$\n" ${TextCompare} "$R0" "$R1" "FastEqual" "Przyklad3" IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 Exec "notepad.exe $R2" FunctionEnd Function Przyklad3 FileWrite $R3 '$8|$6=$9' Push $0 FunctionEnd
Section StrCpy $R0 'Text1.txt' StrCpy $R1 'Text2.txt' GetTempFileName $R2 FileOpen $R3 $R2 w FileWrite $R3 "$R0 | $R1$\r$\n" ${TextCompare} "$R0" "$R1" "SlowDiff" "Przyklad4" IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK end FileWrite $R3 "$\r$\n$R1 | $R0$\r$\n" ${TextCompare} "$R1" "$R0" "SlowDiff" "Przyklad4" FileClose $R3 IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK end Exec "notepad.exe $R2" end: FunctionEnd Function Przyklad4 FileWrite $R3 '$8=$9' Push $0 FunctionEnd
Section StrCpy $R0 'Text1.txt' StrCpy $R1 'Text2.txt' GetTempFileName $R2 FileOpen $R3 $R2 w FileWrite $R3 "$R0 | $R1$\r$\n" ${TextCompare} "$R0" "$R1" "SlowEqual" "Przyklad5" IfErrors 0 +2 MessageBox MB_OK "Błąd" IDOK +2 Exec "notepad.exe $R2" FunctionEnd Function Przyklad5 FileWrite $R3 '$8|$6=$9' Push $0 FunctionEnd
Section ${TextCompare} "C:\1.txt" "C:\2.txt" "FastDiff" "Przyklad6" IfErrors 0 +2 MessageBox MB_OK "Błąd" SectionEnd Function Przyklad6 MessageBox MB_OKCANCEL '\ $$9 "Linia Pliku1" = [$9]$\n\ $$8 "Linia #" = [$8]$\n\ $$7 "Linia Pliku2" = [$7]$\n\ $$6 "Linia #" = [$6]'\ IDOK +2 StrCmp $0 StopTextCompare Push $0 FunctionEnd
${ConfigRead} "[Plik]" "[Wejście]" $var
"[Plik]" ; Plik konfiguracyjny ; "[Wejście]" ; Nazwa wejścia ; $var ; Wynik: Wartość
Section ${ConfigRead} "C:\AUTOEXEC.BAT" "SET winbootdir=" $R0 ; $R0=C:\WINDOWS SectionEnd
Section ${ConfigRead} "C:\apache\conf\httpd.conf" "Timeout " $R0 ; $R0=30 SectionEnd
${ConfigWrite} "[Plik]" "[Wejście]" "[Wartość]" $var
"[Plik]" ; Plik konfiguracyjny ; "[Wejście]" ; Nazwa wejścia ; "[Wartość]" ; Nazwa wartości ; Jeśli "", to usuwa wejście ; $var ; Wynik: ; $var=CHANGED Wartość jest zapisywana ; $var=DELETED Wejście jest usuwane ; $var=ADDED Wejście oraz wartość są dodawane ; $var=SAME Wejście oraz wartość już istnieją
Section ${ConfigWrite} "C:\AUTOEXEC.BAT" "SET winbootdir=" "D:\WINDOWS" $R0 ; $R0=CHANGED SectionEnd
Section ${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "30" $R0 ; $R0=SAME SectionEnd
Section ${ConfigWrite} "C:\apache\conf\httpd.conf" "Timeout " "" $R0 ; $R0=DELETED SectionEnd
${FileRecode} "[Plik]" "[Format]"
"[Plik]" ; ; "[Format]" ; OemToChar - z DOS do Windows ; CharToOem - z Windows do DOS
Section ${FileRecode} "C:\SCANDISK.LOG" "CharToOem" SectionEnd
Dołączenie pliku nagłówkowego:
!include "WordFunc.nsh"
Wywoływanie funkcji:
Section Instalacja ${WordFind} "A--H---S" "-" "+2" $R0 ; $R0="H" SectionEnd
Section un.Instalacja ${WordReplace} "A--H---S" "-" "x" "+3*" $R0 ; $R0="A--HxS" SectionEnd
Łańcuchy znaków: "[wyraz+1][rozdzielnik][wyraz+2][rozdzielnik][wyraz+3]..." "[rozdzielnik][wyraz+1][rozdzielnik][wyraz+2][rozdzielnik]..." "[rozdzielnik][rozdzielnik][wyraz+1][rozdzielnik][rozdzielnik][rozdzielnik]..." "...[wyraz-3][rozdzielnik][wyraz - 2][rozdzielnik][wyraz-1]" "...[rozdzielnik][wyraz - 2][rozdzielnik][wyraz-1][rozdzielnik]" "...[rozdzielnik][rozdzielnik][wyraz-1][rozdzielnik][rozdzielnik][rozdzielnik]"
${WordFind} "[łańcuch znaków]" "[rozdzielnik]" "[E][opcje]" $var
"[łańcuch znaków]" ; [Łańcuch znaków] ; Wejściowy łańcuch znaków "[rozdzielnik]" ; [Rozdzielnik] ; Jeden lub kilka symboli "[E][opcje]" ; [Opcje] ; +liczba : numer wyrazu od początku ; -liczba : numer wyrazu od końca ; +liczba} : numer rozdzielnika od początku ; cała przestrzeń po ; rozdzielnik do wyjścia ; +liczba{ : numer rozdzielnika od początku ; cała przestrzeń przed ; rozdzielnik do wyjścia ; +liczba}} : numer wyrazu od początku ; cała przestrzeń po tym wyrazie ; do wyjścia ; +liczba{{ : numer wyrazu od początku ; cała przestrzeń przed tym wyrazem ; do wyjścia ; +liczba{} : numer wyrazu od początku ; cała przestrzeń przed i po ; ten wyraz (wykluczenie wyrazu) ; +liczba*} : numer wyrazu od początku ; cała przestrzeń po ; wyraz do wyjścia z wyrazem ; +liczba{* : numer wyrazu od początku ; cała przestrzeń przed ; wyraz do wyjścia z wyrazem ; # : suma wyrazów do wyjścia ; * : suma rozdzielników do wyjścia ; /word : liczba wyrazów do wyjścia ; ; [E] ; Z poziomem błędów na wyjściu ; IfErrors: ; $var=1 rozdzielnik nie znaleziony ; $var=2 nie ma takiego numeru wyrazu ; $var=3 błąd składni (użyj: +1,-1},#,*,/word,...) ; [] ; Brak poziomu błędów na wyjściu (domyślnie) ; Jeśli znaleziono jakieś błędy, to (wynik=wejściowy łańcuch znaków) ; $var ; Wyjście (wynik)
Section ${WordFind} "C:\io.sys C:\Program Files C:\WINDOWS" " C:\" "-02" $R0 ; $R0="Program Files" SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" "sys" " - 2}" $R0 ; $R0=" C:\logo.sys C:\WINDOWS" SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " C:\" "#" $R0 ; $R0="3" SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" "sys" "*" $R0 ; $R0="2" SectionEnd
Section ${WordFind} "C:\io.sys C:\Program Files C:\WINDOWS" " " "/Files" $R0 ; $R0="3" SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "+2}}" $R0 ; $R0=" C:\WINDOWS" SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "+2{}" $R0 ; $R0="C:\io.sys C:\WINDOWS" SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "+2*}" $R0 ; $R0="C:\logo.sys C:\WINDOWS" SectionEnd
Section StrCpy $R0 "C:\Program Files\NSIS\NSIS.chm" ; "C:\Program Files\NSIS\Include\" ; "C:\\Program Files\\NSIS\\NSIS.chm" ${WordFind} "$R0" "\" " - 2{*" $R0 ; $R0="C:\Program Files\NSIS" ; "C:\\Program Files\\NSIS" SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys C:\WINDOWS" ":\lo" "E+1{" $R0 ; $R0="C:\io.sys C" IfErrors end StrLen $0 $R0 ; $0 = Pozycja startowa wyrazu (11) StrLen $1 ':\lo' ; $1 = Długość wyrazu (4) ; StrCpy $R0 $R1 $1 $0 ; $R0 = :\lo end: SectionEnd
Section ${WordFind} "[łańcuch znaków]" "[rozdzielnik]" "E[opcje]" $R0 IfErrors 0 end StrCmp $R0 1 0 +2 ; Poziom błędów 1? MessageBox MB_OK 'rozdzielnik nie został znaleziony' IDOK end StrCmp $R0 2 0 +2 ; Poziom błędów 2? MessageBox MB_OK 'nie ma takiego numeru wyrazu' IDOK end StrCmp $R0 3 0 +2 ; Poziom błędów 3? MessageBox MB_OK 'błąd składni' end: SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys" "_" "+1" $R0 ; $R0="C:\io.sys C:\logo.sys" (błąd: rozdzielnik "_" nie został znaleziony) SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys" ":\lo" "E+1{" $R0 IfErrors notfound found found: MessageBox MB_OK 'Znaleziono' IDOK end notfound: MessageBox MB_OK 'Nie znaleziono' end: SectionEnd
Section ${WordFind} "C:\io.sys C:\logo.sys" ":\lo" "+1{" $R0 StrCmp $R0 "C:\io.sys C:\logo.sys" notfound found ; błąd? found: MessageBox MB_OK 'Znaleziono' IDOK end notfound: MessageBox MB_OK 'Nie znaleziono' end: SectionEnd
Section StrCpy $0 'OneWord' StrCpy $1 1 loop: ${WordFind} "$0" " " "E+$1" $R0 IfErrors 0 code StrCmp $1$R0 11 0 error StrCpy $R0 $0 goto end code: ; ... IntOp $1 $1 + 1 goto loop error: StrCpy $1 '' StrCpy $R0 '' end: ; $R0="OneWord" SectionEnd
Łańcuchy znaków: "[rozdzielnik1][wyraz+1][rozdzielnik2][rozdzielnik1][wyraz+2][rozdzielnik2]..." "[tekst][rozdzielnik1][tekst][rozdzielnik1][wyraz+1][rozdzielnik2][tekst]..." "...[rozdzielnik1][wyraz - 2][rozdzielnik2][rozdzielnik1][wyraz-1][rozdzielnik2]" "...[tekst][rozdzielnik1][tekst][rozdzielnik1][wyraz-1][rozdzielnik2][tekst]"
${WordFind2X} "[łańcuch znaków]" "[rozdzielnik1]" "[rozdzielnik2]" "[E][opcje]" $var
"[łańcuch znaków]" ; [łańcuch znaków] ; Wejściowy łańcuch znaków "[rozdzielnik1]" ; [rozdzielnik1] ; Pierwszy rozdzielnik "[rozdzielnik2]" ; [rozdzielnik2] ; Drugi rozdzielnik "[E][opcje]" ; [opcje] ; +liczba : numer wyrazu od początku ; -liczba : numer wyrazu od końca ; +liczba}} : numer wyrazu od początku całej przestrzeni ; po tym wyrazie do wyjścia ; +liczba{{ : numer wyrazu od końca całej przestrzeni ; przed tym wyrazem do wyjścia ; +liczba{} : numer wyrazu od początku ; cała przestrzeń przed i po ; ten wyraz (wykluczenie wyrazu) ; +liczba*} : numer wyrazu od początku ; cała przestrzeń po ; wyraz do wyjścia z wyrazem ; +liczba{* : numer wyrazu od początku ; cała przestrzeń przed ; wyraz do wyjścia z wyrazem ; # : suma wyrazów do wyjścia ; /word : liczba wyrazów do wyjścia ; ; [E] ; Z poziomem błędów na wyjściu ; IfErrors: ; $var=1 nie znaleziono wyrazów ; $var=2 nie ma takiego numeru wyrazu ; $var=3 błąd składni (użyj: +1,-1,#) ; [] ; Brak poziomu błędów na wyjściu (domyślnie) ; Jeśli znaleziono jakieś błędy, to (wynik=wejściowy łańcuch znaków) ; $var ; Wyjście (wynik)
Section ${WordFind2X} "[C:\io.sys];[C:\logo.sys];[C:\WINDOWS]" "[C:\" "];" "+2" $R0 ; $R0="logo.sys" SectionEnd
Section ${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1" $R0 ; $R0="logo" SectionEnd
Section ${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1{{" $R0 ; $R0="C:\WINDOWS C:\io.sys C:" SectionEnd
Section ${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1{}" $R0 ; $R0="C:\WINDOWS C:\io.sys C:sys" SectionEnd
Section ${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "-1{*" $R0 ; $R0="C:\WINDOWS C:\io.sys C:\logo." SectionEnd
Section ${WordFind2X} "C:\WINDOWS C:\io.sys C:\logo.sys" "\" "." "/logo" $R0 ; $R0="2" SectionEnd
Section ${WordFind2X} "[io.sys];[C:\logo.sys]" "\" "];" "E+1" $R0 ; $R0="1" ("\...];" nie został znaleziony) IfErrors 0 noerrors MessageBox MB_OK 'Poziom błędów=$R0' IDOK end noerrors: MessageBox MB_OK 'Brak błędów' end: SectionEnd
${WordFind3X} "[łańcuch znaków]" "[rozdzielnik1]" "[środek]" "[rozdzielnik2]" "[E][opcje]" $var
"[łańcuch znaków]" ; [łańcuch znaków] ; Wejściowy łańcuch znaków "[rozdzielnik1]" ; [rozdzielnik1] ; Pierwszy rozdzielnik "[środek]" ; [środek] ; Środkowy łańcuch znaków "[rozdzielnik2]" ; [rozdzielnik2] ; Drugi rozdzielnik "[E][opcje]" ; [opcje] ; +liczba : numer wyrazu od początku ; -liczba : numer wyrazu od końca ; +liczba}} : numer wyrazu od początku całej przestrzeni ; po tym wyrazie do wyjścia ; +liczba{{ : numer wyrazu od końca całej przestrzeni ; przed tym wyrazem do wyjścia ; +liczba{} : numer wyrazu od początku ; cała przestrzeń przed i po ; ten wyraz (wykluczenie wyrazu) ; +liczba*} : numer wyrazu od początku ; cała przestrzeń po ; wyraz do wyjścia z wyrazem ; +liczba{* : numer wyrazu od początku ; cała przestrzeń przed ; wyraz do wyjścia z wyrazem ; # : suma wyrazów do wyjścia ; /word : liczba wyrazów do wyjścia ; ; [E] ; z poziomem błędów na wyjściu ; IfErrors: ; $var=1 nie znaleziono wyrazów ; $var=2 nie ma takiego numeru wyrazu ; $var=3 błąd składni (użyj: +1,-1,#) ; [] ; Brak poziomu błędów na wyjściu (domyślnie) ; Jeśli znaleziono jakieś błędy, to (wynik=wejściowy łańcuch znaków) ; $var ; Wyjście (wynik)
Section ${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "+1" $R0 ; $R0="1.AAB" SectionEnd
Section ${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1" $R0 ; $R0="2.BAA" SectionEnd
Section ${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1{{" $R0 ; $R0="[1.AAB];" SectionEnd
Section ${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1{}" $R0 ; $R0="[1.AAB];[3.BBB];" SectionEnd
Section ${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "-1{*" $R0 ; $R0="[1.AAB];[2.BAA];" SectionEnd
Section ${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "AA" "];" "/2.BAA" $R0 ; $R0="2" SectionEnd
Section ${WordFind3X} "[1.AAB];[2.BAA];[3.BBB];" "[" "XX" "];" "E+1" $R0 ; $R0="1" ("[...XX...];" nie znaleziono) IfErrors 0 noerrors MessageBox MB_OK 'Poziom błędów=$R0' IDOK end noerrors: MessageBox MB_OK 'Brak błędów' end: SectionEnd
${WordReplace} "[łańcuch znaków]" "[wyraz1]" "[wyraz2]" "[E][opcje]" $var
"[łańcuch znaków]" ; [łańcuch znaków] ; Wejściowy łańcuch znaków "[wyraz1]" ; [wyraz1] ; Wyraz do zamiany lub usunięcia "[wyraz2]" ; [wyraz2] ; Zamieniany wyraz (jeśli pusty, kasowany) "[E][opcje]" ; [opcje] ; +liczba : Ilość znaków wyrazu od początku ; -liczba : Ilość znaków wyrazu od końca ; +liczba* : Ilość znaków wyrazu od początku zamiana wielokrotna ; -liczba* : Ilość znaków wyrazu od końca zamiana wielokrotna ; + : Zamienia wszystkie wyniki ; +* : Zamienia wielokrotnie wszystkie wyniki ; { : Jeśli istnieją zamienia wszystkie rozdzielniki ; od lewej strony ; } : Jeśli istnieją zamienia wszystkie rozdzielniki ; od prawej strony ; {} : Jeśli istnieją zamienia wszystkie rozdzielniki ; po obu stronach ; {* : Jeśli istnieją wielokrotnie zamienia wszystkie ; rozdzielniki od lewej strony ; }* : Jeśli istnieją wielokrotnie zamienia wszystkie ; rozdzielniki od prawej strony ; {}* : Jeśli istnieją wielokrotnie zamienia wszystkie ; rozdzielniki po obu stronach ; ; [E] ; Z poziomem błędów na wyjściu ; IfErrors: ; $var=1 wyraz do zastąpienia nie został znaleziony ; $var=2 brak takiego numeru wyrazu ; $var=3 błąd składni (użyj: +1,-1,+1*,-1*,+,+*,{},{}*) ; [] ; Brak poziomu błędów na wyjściu (domyślnie) ; Jeśli znaleziono jakieś błędy to (wynik=wejściowy łańcuch znaków) ; $var ; Wyjście (wynik)
Section ${WordReplace} "C:\io.sys C:\logo.sys C:\WINDOWS" "SYS" "bmp" "+2" $R0 ; $R0="C:\io.sys C:\logo.bmp C:\WINDOWS" SectionEnd
Section ${WordReplace} "C:\io.sys C:\logo.sys C:\WINDOWS" "SYS" "" "+" $R0 ; $R0="C:\io. C:\logo. C:\WINDOWS" SectionEnd
Section ${WordReplace} "C:\io.sys C:\logo.sys C:\WINDOWS" " " " " "+1*" $R0 ; +1* lub +2* lub +3* lub +4* lub +5* lub +6* ; $R0="C:\io.sys C:\logo.sys C:\WINDOWS" SectionEnd
Section ${WordReplace} "C:\io.sys C:\logo.sysSYSsys C:\WINDOWS" "sys" "bmp" "+*" $R0 ; $R0="C:\io.bmp C:\logo.bmp C:\WINDOWS" SectionEnd
Section ${WordReplace} "sysSYSsysC:\io.sys C:\logo.sys C:\WINDOWSsysSYSsys" "sys" "|" "{}*" $R0 ; $R0="|C:\io.sys C:\logo.sys C:\WINDOWS|" SectionEnd
Section ${WordReplace} "C:\io.sys C:\logo.sys" "sys" "bmp" "E+3" $R0 ; $R0="2" (brak takiego numeru wyrazu "+3") IfErrors 0 noerrors MessageBox MB_OK 'Poziom błędów=$R0' IDOK end noerrors: MessageBox MB_OK 'Brak błędów' end: SectionEnd
${WordAdd} "[łańcuch znaków1]" "[rozdzielnik]" "[E][opcje]" $var
"[łańcuch znaków1]" ; [łańcuch znaków1] ; Łańcuch znaków do dodania lub usunięcia "[rozdzielnik]" ; [rozdzielnik] ; Jeden lub kilka symboli rozdzielających "[E][opcje]" ; [opcje] ; +łańcuch znaków2 : wyrazy do dodania ; -łańcuch znaków2 : wyrazy do usunięcia ; ; [E] ; Z poziomem błędów na wyjściu ; IfErrors: ; $var=1 rozdzielnik jest pusty ; $var=3 błąd składni (użyj: +text,-text) ; [] ; Bez poziomu błędów na wyjściu (domyślnie) ; Jeśli znaleziono błędy, to (wynik=wejściowy łańcuch znaków) ; $var ; Wyjście (wynik)
Section ${WordAdd} "C:\io.sys C:\WINDOWS" " " "+C:\WINDOWS C:\config.sys" $R0 ; $R0="C:\io.sys C:\WINDOWS C:\config.sys" SectionEnd
Section ${WordAdd} "C:\io.sys C:\logo.sys C:\WINDOWS" " " \ "-C:\WINDOWS C:\config.sys C:\IO.SYS" $R0 ; $R0="C:\logo.sys" SectionEnd
Section ${WordAdd} "C:\io.sys" " " "+C:\WINDOWS C:\config.sys C:\IO.SYS" $R0 ; $R0="C:\io.sys C:\WINDOWS C:\config.sys" SectionEnd
Section ${WordAdd} "C:\io.sys C:\logo.sys C:\WINDOWS" " " "-C:\WINDOWS" $R0 ; $R0="C:\io.sys C:\logo.sys" SectionEnd
Section ${WordAdd} "C:\io.sys C:\logo.sys" " " "+C:\logo.sys" $R0 StrCmp $R0 "C:\io.sys C:\logo.sys" 0 +2 MessageBox MB_OK "Nie znaleziono żadnych nowych wyrazów do dodania" SectionEnd
Section ${WordAdd} "C:\io.sys C:\logo.sys" " " "-C:\config.sys" $R0 StrCmp $R0 "C:\io.sys C:\logo.sys" 0 +2 MessageBox MB_OK "Nie znaleziono żadnych wyrazów do usunięcia" SectionEnd
Section ${WordAdd} "C:\io.sys C:\logo.sys" "" "E-C:\logo.sys" $R0 ; $R0="1" (rozdzielnik jest pusty "") IfErrors 0 noerrors MessageBox MB_OK 'Poziom błędów=$R0' IDOK end noerrors: MessageBox MB_OK 'Brak błędów' end: SectionEnd
${WordInsert} "[łańcuch znaków]" "[rozdzielnik]" "[wyraz]" "[E][opcje]" $var
"[łańcuch znaków]" ; [łańcuch znaków] ; Wejściowy łańcuch znaków "[rozdzielnik]" ; [rozdzielnik] ; Jeden lub kilka symboli rozdzielających "[wyraz]" ; [wyraz] ; Wyraz do wstawienia "[E][opcje]" ; [opcje] ; +liczba : ilość liter od początku ; -liczba : ilość liter od końca ; ; [E] ; Z poziomami błędów na wyjściu ; IfErrors: ; $var=1 rozdzielnik jest pusty ; $var=2 nieprawidłowy numer litery ; $var=3 błąd składni (użyj: +1,-1) ; [] ; Wyjście bez poziomu błędów (domyślnie) ; Jeśli znaleziono jakieś błędy to (wynik=wejściowy łańcuch znaków) ; $var ; Wyjście (wynik)
Section ${WordInsert} "C:\io.sys C:\WINDOWS" " " "C:\logo.sys" " - 2" $R0 ; $R0="C:\io.sys C:\logo.sys C:\WINDOWS" SectionEnd
Section ${WordInsert} "C:\io.sys" " " "C:\WINDOWS" "+2" $R0 ; $R0="C:\io.sys C:\WINDOWS" SectionEnd
Section ${WordInsert} "" " " "C:\WINDOWS" "+1" $R0 ; $R0="C:\WINDOWS " SectionEnd
Section ${WordInsert} "C:\io.sys C:\logo.sys" " " "C:\logo.sys" "E+4" $R0 ; $R0="2" (błędny numer litery "+4") IfErrors 0 noerrors MessageBox MB_OK 'Poziom błędów=$R0' IDOK end noerrors: MessageBox MB_OK 'Brak błędów' end: SectionEnd
${StrFilter} "[łańcuch znaków]" "[opcje]" "[symbole1]" "[symbole2]" $var
"[łańcuch znaków]" ; [łańcuch znaków] ; Wejściowy łańcuch znaków ; "[opcje]" ; [+|-][1|2|3|12|23|31][eng|rus] ; + : Konwertuje łańcuch znaków na wielkie litery ; - : Konwertuje łańcuch znaków na małe litery ; 1 : Tylko cyfry ; 2 : tylko litery ; 3 : Tylko znaki specjalne ; 12 : Tylko cyfry + litery ; 23 : Tylko litery + znaki specjalne ; 31 : Tylko znaki specjalne + cyfry ; eng : Symbole angielskie (domyślnie) ; rus : Symbole rosyjskie ; "[symbole1]" ; [symbole1] ; Symbole dołączane (niezmienialne) ; "[symbole2]" ; [symbole2] ; Symbole wykluczane ; $var ; Wyjście (wynik)
Section ${StrFilter} "123abc 456DEF 7890|%#" "+" "" "" $R0 ; $R0="123ABC 456DEF 7890|%#" SectionEnd
Section ${StrFilter} "123abc 456DEF 7890|%#" "-" "ef" "" $R0 ; $R0="123abc 456dEF 7890|%#" SectionEnd
Section ${StrFilter} "123abc 456DEF 7890|%#" "2" "|%" "" $R0 ; $R0="abcDEF|%" ;tylko litery + |% SectionEnd
Section ${StrFilter} "123abc 456DEF 7890|%#" "13" "af" "4590" $R0 ; $R0="123a 6F 78|%#" ;tylko cyfry + znaki specjalne + af - 4590 SectionEnd
Section ${StrFilter} "123abc 456DEF 7890|%#" "+12" "b" "def" $R0 ; $R0="123AbC4567890" ;tylko cyfry + litery + b - def SectionEnd
Section ${StrFilter} "123abcÀÁÂ 456DEFãäå 7890|%#" "+12rus" "ä" "ãå" $R0 ; $R0="123ÀÁÂ456ä7890" ;tylko cyfry + litery + ä - ãå SectionEnd
Section ${StrFilter} "123abcÀÁÂ 456DEFãäå 7890|%#" "2rus" "" "" $R0 ; $R0="ÀÁÂãäå" ;tylko litery rosyjskie ${StrFilter} "123abcÀÁÂ 456DEFãäå 7890|%#" "2" "$R0" "" $R0 ; $R0="abcÀÁÂDEFãäå" ;tylko litery angielskie + rosyjskie SectionEnd
Section Push "_01-PERPETUOUS_DREAMER__-__THE_SOUND_OF_GOODBYE_(ORIG._MIX).MP3_" Call Capitalize Pop $R0 ; $R0="_01-Perpetuous_Dreamer__-__The_Sound_Of_Goodbye_(Orig._Mix).mp3_" ${WordReplace} "$R0" "_" " " "+*" $R0 ; $R0=" 01-Perpetuous Dreamer - The Sound Of Goodbye (Orig. Mix).mp3 " ${WordReplace} "$R0" " " "" "{}" $R0 ; $R0="01-Perpetuous Dreamer - The Sound Of Goodbye (Orig. Mix).mp3" SectionEnd Function Capitalize Exch $R0 Push $0 Push $1 Push $2 ${StrFilter} '$R0' '-eng' '' '' $R0 ${StrFilter} '$R0' '-rus' '' '' $R0 StrCpy $0 0 loop: IntOp $0 $0 + 1 StrCpy $1 $R0 1 $0 StrCmp $1 '' end StrCmp $1 ' ' +5 StrCmp $1 '_' +4 StrCmp $1 '-' +3 StrCmp $1 '(' +2 StrCmp $1 '[' 0 loop IntOp $0 $0 + 1 StrCpy $1 $R0 1 $0 StrCmp $1 '' end ${StrFilter} '$1' '+eng' '' '' $1 ${StrFilter} '$1' '+rus' '' '' $1 StrCpy $2 $R0 $0 IntOp $0 $0 + 1 StrCpy $R0 $R0 '' $0 IntOp $0 $0 - 2 StrCpy $R0 '$2$1$R0' goto loop end: Pop $2 Pop $1 Pop $0 Exch $R0 FunctionEnd
${VersionCompare} "[Wersja1]" "[Wersja2]" $var
"[Wersja1]" ; Pierwsza wersja "[Wersja2]" ; Druga wersja $var ; Wynik: ; $var=0 Wersje są takie same ; $var=1 Wersja1 jest nowsza ; $var=2 Wersja2 jest nowsza
Section ${VersionCompare} "1.1.1.9" "1.1.1.01" $R0 ; $R0="1" SectionEnd
${VersionConvert} "[Wersja]" "[Lista znaków]" $var
"[Wersja]" ; Wersja ; "[Lista znaków]" ; Lista znaków, które zostaną zamienione przez liczby ; "abcdefghijklmnopqrstuvwxyz" (domyślne) ; $var ; Wynik: skonwertowana wersja
Section ${VersionConvert} "9.0a" "" $R0 ; $R0="9.0.01" ${VersionConvert} "9.0c" "" $R1 ; $R1="9.0.03" ${VersionCompare} "$R0" "$R1" $R2 ; $R2="2" wersja2 jest nowsza SectionEnd
Section ${VersionConvert} "0.15c-9m" "" $R0 ; $R0="0.15.03.9.13" ${VersionConvert} "0.15c-1n" "" $R1 ; $R1="0.15.03.1.14" ${VersionCompare} "$R0" "$R1" $R2 ; $R2="1" wersja1 jest nowsza SectionEnd
Section ${VersionConvert} "0.15c+" "abcdefghijklmnopqrstuvwxyz+" $R0 ; $R0="0.15.0327" ${VersionConvert} "0.15c" "abcdefghijklmnopqrstuvwxyz+" $R1 ; $R1="0.15.03" ${VersionCompare} "$R0" "$R1" $R2 ; $R2="1" wersja1 jest nowsza SectionEnd