Od ponad 20 lat dzielę się z Wami swoją pasją oraz tworzę dla was moim zdaniem ciekawe i przede wszystkim przydatne rzeczy. Całkowicie za darmo! To się nigdy nie zmieni.
Niestety, sprzęt komputerowy (laptop) na którym obecnie pracuję zestarzał się - ma już 12 lat i jest to już niestety mocno odczuwalne. Moja obecna sytuacja finansowa nie pozwala mi na zakup nowego laptopa, dzięki któremu nadal będę mógł realizować swoją pasję, a tym samym dzielić się nią z Wami.
Mam nadzieję, że dzięki Waszej pomocy będę mógł zakupić sprzęt, który posłuży równie długo co obecny. Jak wiemy, sprzęt komputerowy jest dzisiaj horrendalnie drogi (zwłaszcza laptopy). Mam nadzieję, że wspólnie to się uda.
Dlatego też postanowiłem założyć specjalną zrzutkę na uznanej platformie crowd-fundingowej, dzięki której w transparentny sposób można dorzucić coś od siebie. Cel jest ambitny, ale wierzę w siłę społeczności!
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