tests/nsis3/share/doc/nsis/Examples/FileFunc.nsi

Summary

Maintainability
Test Coverage
;_____________________________________________________________________________
;
;                          File Functions
;_____________________________________________________________________________
;
; 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)

Name "File Functions"
OutFile "FileFunc.exe"
Caption "$(^Name)"
XPStyle on
RequestExecutionLevel user

!include "WinMessages.nsh"
!include "FileFunc.nsh"

Var INI
Var HWND
Var STATE
Var FUNCTION
Var LOCATE1
Var LOCATE2
Var GETSIZE1
Var GETSIZE2
Var GETSIZE3
Var GETSIZE4
Var GETSIZE5
Var GETSIZE6
Var DRIVESPACE1
Var DRIVESPACE2
Var GETDRIVES1
Var GETTIME1
Var GETTIME2
Var GETFILEATTRIBUTES1
Var GETFILEATTRIBUTES2
Var GETFILEVERSION1
Var GETOPTIONS1
Var GETOPTIONS2
Var GETROOT1
Var GETPARENT1
Var GETFILENAME1
Var GETBASENAME1
Var GETFILEEXT1
Var BANNERTRIMPATH1
Var BANNERTRIMPATH2
Var DIRSTATE1

Page Custom ShowCustom LeaveCustom

Function ShowCustom
    InstallOptions::initDialog "$INI"
    Pop $hwnd
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1206
    EnableWindow $1 0
    SendMessage $1 ${WM_ENABLE} 1 0
    StrCpy $LOCATE1 $DOCUMENTS
    StrCpy $LOCATE2 '/L=FD /M=*.* /S=0B /G=1 /B=0'
    StrCpy $GETSIZE1 '$WINDIR'
    StrCpy $GETSIZE2 '/M=Explorer.exe /S=0K /G=0'
    StrCpy $GETSIZE3 '$PROGRAMFILES\Common Files'
    StrCpy $GETSIZE4 '/S=0M'
    StrCpy $GETSIZE5 '$WINDIR'
    StrCpy $GETSIZE6 '/G=0'
    StrCpy $DRIVESPACE1 'C:\'
    StrCpy $DRIVESPACE2 '/D=F /S=M'
    StrCpy $GETDRIVES1 'FDD+CDROM'
    StrCpy $GETTIME1 '$WINDIR\Explorer.exe'
    StrCpy $GETTIME2 'C'
    StrCpy $GETFILEATTRIBUTES1 'C:\IO.SYS'
    StrCpy $GETFILEATTRIBUTES2 'ALL'
    StrCpy $GETFILEVERSION1 '$WINDIR\Explorer.exe'
    StrCpy $GETOPTIONS1 '/SILENT=yes /INSTDIR="$PROGRAMFILES\Common Files"'
    StrCpy $GETOPTIONS2 '/INSTDIR='
    StrCpy $GETROOT1 'C:\path\file.dll'
    StrCpy $GETPARENT1 'C:\path\file.dll'
    StrCpy $GETFILENAME1 'C:\path\file.dll'
    StrCpy $GETBASENAME1 'C:\path\file.dll'
    StrCpy $GETFILEEXT1 'C:\path\file.dll'
    StrCpy $BANNERTRIMPATH1 'C:\Server\Documents\Terminal\license.htm'
    StrCpy $BANNERTRIMPATH2 '34A'
    StrCpy $DIRSTATE1 '$TEMP'

    GetDlgItem $1 $HWND 1203
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE1"
    GetDlgItem $1 $HWND 1205
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE2"
    InstallOptions::show
    Pop $0
FunctionEnd

Function LeaveCustom
    ReadINIStr $STATE $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 $0 $INI "Settings" "State"
    StrCmp $0 6 view
    StrCmp $0 0 Enter
    goto main

    view:
    StrCpy $0 '$$'
    StrCpy $1 'n'
    StrCpy $2 'r'
    StrCmp $R4 "LocateCallback" 0 +3
    StrCpy $R0 `Function LocateCallback$\r$\n    MessageBox MB_OKCANCEL '$0$$R9    "path\name"=[$$R9]$0\$1$0$$R8    "path"          =[$$R8]$0\$1$0$$R7    "name"        =[$$R7]$0\$1$0$$R6    "size"           =[$$R6]' IDOK +2$\r$\n    StrCpy $$R0 StopLocate$\r$\n$\r$\n    Push $$R0$\r$\nFunctionEnd`
    goto send
    StrCmp $R4 "GetDrivesCallback" 0 error
    StrCpy $R0 `Function GetDrivesCallback$\r$\n    MessageBox MB_OKCANCEL '$0$$9    "drive letter"=[$$9]$0\$1$0$$8    "drive type" =[$$8]' IDOK +2$\r$\n    StrCpy $$R0 StopGetDrives$\r$\n    StrCpy $$R5 '$$R5$$9  [$$8 Drive]$$\$2$$\$1'$\r$\n$\r$\n    Push $$R0$\r$\nFunctionEnd`
    goto send

    main:
    StrCmp $FUNCTION '' DefaultSend
    StrCmp $FUNCTION Locate 0 +4
    StrCpy $LOCATE1 $R2
    StrCpy $LOCATE2 $R3
    goto DefaultSend
    StrCmp $FUNCTION GetSize1 0 +4
    StrCpy $GETSIZE1 $R2
    StrCpy $GETSIZE2 $R3
    goto DefaultSend
    StrCmp $FUNCTION GetSize2 0 +4
    StrCpy $GETSIZE3 $R2
    StrCpy $GETSIZE4 $R3
    goto DefaultSend
    StrCmp $FUNCTION GetSize3 0 +4
    StrCpy $GETSIZE5 $R2
    StrCpy $GETSIZE6 $R3
    goto DefaultSend
    StrCmp $FUNCTION DriveSpace 0 +4
    StrCpy $DRIVESPACE1 $R1
    StrCpy $DRIVESPACE2 $R3
    goto DefaultSend
    StrCmp $FUNCTION GetDrives 0 +3
    StrCpy $GETDRIVES1 $R1
    goto DefaultSend
    StrCmp $FUNCTION GetTime 0 +4
    StrCpy $GETTIME1 $R1
    StrCpy $GETTIME2 $R3
    goto DefaultSend
    StrCmp $FUNCTION GetFileAttributes 0 +4
    StrCpy $GETFILEATTRIBUTES1 $R1
    StrCpy $GETFILEATTRIBUTES2 $R3
    goto DefaultSend
    StrCmp $FUNCTION GetFileVersion 0 +3
    StrCpy $GETFILEVERSION1 $R1
    goto DefaultSend
    StrCmp $FUNCTION GetOptions 0 +4
    StrCpy $GETOPTIONS1 $R1
    StrCpy $GETOPTIONS2 $R3
    goto DefaultSend
    StrCmp $FUNCTION GetRoot 0 +3
    StrCpy $GETROOT1 $R1
    goto DefaultSend
    StrCmp $FUNCTION GetParent 0 +3
    StrCpy $GETPARENT1 $R1
    goto DefaultSend
    StrCmp $FUNCTION GetFileName 0 +3
    StrCpy $GETFILENAME1 $R1
    goto DefaultSend
    StrCmp $FUNCTION GetBaseName 0 +3
    StrCpy $GETBASENAME1 $R1
    goto DefaultSend
    StrCmp $FUNCTION GetFileExt 0 +3
    StrCpy $GETFILEEXT1 $R1
    goto DefaultSend
    StrCmp $FUNCTION BannerTrimPath 0 +4
    StrCpy $BANNERTRIMPATH1 $R1
    StrCpy $BANNERTRIMPATH2 $R3
    goto DefaultSend
    StrCmp $FUNCTION DirState 0 +2
    StrCpy $DIRSTATE1 $R2

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

    ReadINIStr $0 $INI "Field 1" "State"
    StrCmp $0 "  1. Locate" 0 GetSize1Send
    StrCpy $FUNCTION Locate
    GetDlgItem $1 $HWND 1203
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE1"
    GetDlgItem $1 $HWND 1204
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$LOCATE2"
    GetDlgItem $1 $HWND 1206
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:LocateCallback"
    GetDlgItem $1 $HWND 1207
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Path"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Options"
    GetDlgItem $1 $HWND 1211
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Function"
    abort

    GetSize1Send:
    StrCmp $0 "  2. GetSize                 (file)" 0 GetSize2Send
    StrCpy $FUNCTION 'GetSize1'
    GetDlgItem $1 $HWND 1203
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE1"
    GetDlgItem $1 $HWND 1204
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE2"
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:File"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Options"
    Abort

    GetSize2Send:
    StrCmp $0 "                                   (directory)" 0 GetSize3Send
    StrCpy $FUNCTION 'GetSize2'
    GetDlgItem $1 $HWND 1203
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE3"
    GetDlgItem $1 $HWND 1204
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE4"
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Directory"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Options"
    Abort

    GetSize3Send:
    StrCmp $0 "                                   (no size, no subdir)" 0 DriveSpaceSend
    StrCpy $FUNCTION 'GetSize3'
    GetDlgItem $1 $HWND 1203
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE5"
    GetDlgItem $1 $HWND 1204
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETSIZE6"
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Directory"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Options"
    Abort

    DriveSpaceSend:
    StrCmp $0 "  3. DriveSpace" 0 GetDrivesSend
    StrCpy $FUNCTION DriveSpace
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$DRIVESPACE1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    EnableWindow $1 0
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$DRIVESPACE2"
    GetDlgItem $1 $HWND 1206
    ShowWindow $1 0
    SendMessage $1 ${WM_SETTEXT} 1 "STR:"
    GetDlgItem $1 $HWND 1207
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Drive"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Options"
    abort

    GetDrivesSend:
    StrCmp $0 "  4. GetDrives             (by type)" 0 GetDrives2Send
    StrCpy $FUNCTION GetDrives
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETDRIVES1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    EnableWindow $1 0
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1206
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:GetDrivesCallback"
    GetDlgItem $1 $HWND 1207
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Option"
    GetDlgItem $1 $HWND 1211
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Function"
    abort

    GetDrives2Send:
    StrCmp $0 "                                   (all by letter)" 0 GetTime1Send
    StrCpy $FUNCTION ''
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    EnableWindow $1 0
    SendMessage $1 ${WM_ENABLE} 1 0
    SendMessage $1 ${WM_SETTEXT} 1 "STR:ALL"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    EnableWindow $1 0
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1206
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:GetDrivesCallback"
    GetDlgItem $1 $HWND 1207
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Option"
    GetDlgItem $1 $HWND 1211
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Function"
    abort

    GetTime1Send:
    StrCmp $0 "  5. GetTime                (local time)" 0 GetTime2Send
    StrCpy $FUNCTION ''
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    EnableWindow $1 0
    SendMessage $1 ${WM_ENABLE} 1 0
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    EnableWindow $1 0
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    EnableWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:L"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Option"
    Abort

    GetTime2Send:
    StrCmp $0 "                                   (file time)" 0 GetFileAttributesSend
    StrCpy $FUNCTION GetTime
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETTIME1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETTIME2"
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:File"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Option"
    Abort

    GetFileAttributesSend:
    StrCmp $0 "  6. GetFileAttributes" 0 GetFileVersionSend
    StrCpy $FUNCTION GetFileAttributes
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEATTRIBUTES1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEATTRIBUTES2"
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Path"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Attrib"
    Abort

    GetFileVersionSend:
    StrCmp $0 "  7. GetFileVersion" 0 GetCmdSend
    StrCpy $FUNCTION GetFileVersion
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEVERSION1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:File"
    Abort

    GetCmdSend:
    StrCmp $0 "  8. GetExeName" +3
    StrCmp $0 "  9. GetExePath" +2
    StrCmp $0 "10. GetParameters" 0 GetOptionsSend
    StrCpy $FUNCTION ''
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    Abort

    GetOptionsSend:
    StrCmp $0 "11. GetOptions" 0 GetRootSend
    StrCpy $FUNCTION GetOptions
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETOPTIONS1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    EnableWindow $1 0
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETOPTIONS2"
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Parameters"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Option"
    Abort

    GetRootSend:
    StrCmp $0 "12. GetRoot" 0 GetParentSend
    StrCpy $FUNCTION GetRoot
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETROOT1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:FullPath"
    Abort

    GetParentSend:
    StrCmp $0 "13. GetParent" 0 GetFileNameSend
    StrCpy $FUNCTION GetParent
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETPARENT1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:PathString"
    Abort

    GetFileNameSend:
    StrCmp $0 "14. GetFileName" 0 GetBaseNameSend
    StrCpy $FUNCTION GetFileName
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILENAME1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:PathString"
    Abort

    GetBaseNameSend:
    StrCmp $0 "15. GetBaseName" 0 GetFileExtSend
    StrCpy $FUNCTION GetBaseName
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETBASENAME1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:FileString"
    Abort

    GetFileExtSend:
    StrCmp $0 "16. GetFileExt" 0 BannerTrimPathSend
    StrCpy $FUNCTION GetFileExt
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$GETFILEEXT1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:FileString"
    Abort

    BannerTrimPathSend:
    StrCmp $0 "17. BannerTrimPath" 0 DirStateSend
    StrCpy $FUNCTION BannerTrimPath
    GetDlgItem $1 $HWND 1201
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$BANNERTRIMPATH1"
    GetDlgItem $1 $HWND 1202
    ShowWindow $1 1
    EnableWindow $1 0
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$BANNERTRIMPATH2"
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:PathString"
    GetDlgItem $1 $HWND 1210
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Option"
    Abort

    DirStateSend:
    StrCmp $0 "18. DirState" 0 RefreshShellIconsSend
    StrCpy $FUNCTION DirState
    GetDlgItem $1 $HWND 1203
    ShowWindow $1 1
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$DIRSTATE1"
    GetDlgItem $1 $HWND 1204
    ShowWindow $1 1
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0
    GetDlgItem $1 $HWND 1209
    SendMessage $1 ${WM_SETTEXT} 1 "STR:Directory"
    Abort

    RefreshShellIconsSend:
    StrCmp $0 "19. RefreshShellIcons" 0 Abort
    StrCpy $FUNCTION ''
    GetDlgItem $1 $HWND 1205
    ShowWindow $1 0

    Abort:
    Abort

;=Enter=
    Enter:
    StrCpy $R0 ''
    StrCpy $R5 ''

    StrCmp $STATE "  1. Locate" Locate
    StrCmp $STATE "  2. GetSize                 (file)" GetSize
    StrCmp $STATE "                                   (directory)" GetSize
    StrCmp $STATE "                                   (no size, no subdir)" GetSize
    StrCmp $STATE "  3. DriveSpace" DriveSpace
    StrCmp $STATE "  4. GetDrives             (by type)" GetDrives
    StrCmp $STATE "                                   (all by letter)" GetDrives
    StrCmp $STATE "  5. GetTime                (local time)" GetTime
    StrCmp $STATE "                                   (file time)" GetTime
    StrCmp $STATE "  6. GetFileAttributes" GetFileAttributes
    StrCmp $STATE "  7. GetFileVersion" GetFileVersion
    StrCmp $STATE "  8. GetExeName" GetExeName
    StrCmp $STATE "  9. GetExePath" GetExePath
    StrCmp $STATE "10. GetParameters" GetParameters
    StrCmp $STATE "11. GetOptions" GetOptions
    StrCmp $STATE "12. GetRoot" GetRoot
    StrCmp $STATE "13. GetParent" GetParent
    StrCmp $STATE "14. GetFileName" GetFileName
    StrCmp $STATE "15. GetBaseName" GetBaseName
    StrCmp $STATE "16. GetFileExt" GetFileExt
    StrCmp $STATE "17. BannerTrimPath" BannerTrimPath
    StrCmp $STATE "18. DirState" DirState
    StrCmp $STATE "19. RefreshShellIcons" RefreshShellIcons
    Abort

    Locate:
    ${Locate} "$R2" "$R3" "LocateCallback"
    IfErrors error
    StrCmp $R0 StopLocate 0 +3
    StrCpy $R0 'stopped'
    goto send
    StrCpy $R0 'done'
    goto send

    GetSize:
    ${GetSize} "$R2" "$R3" $0 $1 $2
    IfErrors error
    StrCpy $R0 "Size=$0$\r$\nFiles=$1$\r$\nFolders=$2"
    goto send

    DriveSpace:
    ${DriveSpace} "$R1" "$R3" $0
    IfErrors error
    StrCpy $R0 "$0"
    goto send

    GetDrives:
    ${GetDrives} "$R1" "GetDrivesCallback"
    StrCmp $R0 StopGetDrives 0 +3
    StrCpy $R0 '$R5stopped'
    goto send
    StrCpy $R0 '$R5done'
    goto send

    GetTime:
    ${GetTime} "$R1" "$R3" $0 $1 $2 $3 $4 $5 $6
    IfErrors error
    StrCpy $R0 'Date=$0/$1/$2 ($3)$\r$\nTime=$4:$5:$6'
    goto send

    GetFileAttributes:
    ${GetFileAttributes} "$R1" "$R3" $0
    IfErrors error
    StrCpy $R0 '$0'
    goto send

    GetFileVersion:
    ${GetFileVersion} "$R1" $0
    IfErrors error
    StrCpy $R0  '$0'
    goto send

    GetExeName:
    ${GetExeName} $0
    StrCpy $R0 '$0'
    goto send

    GetExePath:
    ${GetExePath} $0
    StrCpy $R0 '$0'
    goto send

    GetParameters:
    ${GetParameters} $0
    StrCpy $R0 '$0'
    StrCmp $R0 '' 0 send
    StrCpy $R0 'no parameters'
    goto send

    GetOptions:
    ${GetOptions} "$R1" "$R3" $0
    IfErrors error
    StrCpy $R0  '$0'
    goto send

    GetRoot:
    ${GetRoot} "$R1" $0
    StrCpy $R0  '$0'
    goto send

    GetParent:
    ${GetParent} "$R1" $0
    StrCpy $R0  '$0'
    goto send

    GetFileName:
    ${GetFileName} "$R1" $0
    StrCpy $R0  '$0'
    goto send

    GetBaseName:
    ${GetBaseName} "$R1" $0
    StrCpy $R0  '$0'
    goto send

    GetFileExt:
    ${GetFileExt} "$R1" $0
    StrCpy $R0  '$0'
    goto send

    BannerTrimPath:
    ${BannerTrimPath} "$R1" "$R3" $0
    StrCpy $R0  '$0'
    goto send

    DirState:
    ${DirState} "$R2" $0
    StrCpy $R0  '$0'
    goto send

    RefreshShellIcons:
    ${RefreshShellIcons}
    StrCpy $R0 'done'
    goto send

    error:
    StrCpy $R0 'error'

    send:
    GetDlgItem $1 $HWND 1208
    SendMessage $1 ${WM_SETTEXT} 1 "STR:$R0"

    abort
FunctionEnd

Function LocateCallback
    MessageBox MB_OKCANCEL '$$R9    "path\name"=[$R9]$\n$$R8    "path"          =[$R8]$\n$$R7    "name"        =[$R7]$\n$$R6    "size"           =[$R6]' IDOK +2
    StrCpy $R0 StopLocate

    Push $R0
FunctionEnd

Function GetDrivesCallback
    MessageBox MB_OKCANCEL '$$9    "drive letter"=[$9]$\n$$8    "drive type" =[$8]' IDOK +2
    StrCpy $R0 StopGetDrives
    StrCpy $R5 '$R5$9  [$8 Drive]$\r$\n'

    Push $R0
FunctionEnd

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

Page instfiles

Section "Empty"
SectionEnd