@ECHO OFF
SETLOCAL
SET ERRORLEVEL=
SET EXITCODE=

REM Basic sanity checks: Inform the curious user what is this script for
SET NEXT_ARG=%1
IF NOT DEFINED NEXT_ARG GOTO :TOOL_NOT_SPECIFIED
IF /I %NEXT_ARG% == /? GOTO :WRONG_ARGS
IF /I %NEXT_ARG% == /h GOTO :WRONG_ARGS
IF /I %NEXT_ARG% == /help GOTO :WRONG_ARGS
IF /I %NEXT_ARG% == -? GOTO :WRONG_ARGS
IF /I %NEXT_ARG% == -h GOTO :WRONG_ARGS
IF /I %NEXT_ARG% == --help GOTO :WRONG_ARGS

REM Use script location for directory navigation
SET SCRIPT_LOCATION=%~dp0
IF NOT "%SCRIPT_LOCATION:~-32%"=="\j2ee\cluster\bootstrap\scripts\" GOTO :ERR_SCRIPT_LOCATION

REM Check input parameters
SET NODE_NAME=%1
IF NOT DEFINED NODE_NAME GOTO :TOOL_NOT_SPECIFIED
SHIFT

SET STARTUP_FILE=%1
IF NOT DEFINED STARTUP_FILE (
  SET STARTUP_FILE=%SCRIPT_LOCATION%startup.properties
) ELSE (
  SHIFT
)
IF NOT EXIST %STARTUP_FILE% GOTO :STARTUP_FILE_NOT_FOUND

SET PARAMETERS=
:PARAMETERS_LOOP
SET NEXT_ARG=%1
IF NOT DEFINED NEXT_ARG GOTO :LOOP_EXIT
SET PARAMETERS=%PARAMETERS% %NEXT_ARG%
SHIFT
GOTO :PARAMETERS_LOOP
:LOOP_EXIT

REM Get the instance number: 2 chars starting at 34 symbol backwards
REM SCRIPT_LOCATION is like "D:\usr\sap\HSI\J00\j2ee\cluster\bootstrap\scripts\"
SET INSTANCE_NUMBER=%SCRIPT_LOCATION:~-34,2%
REM Attempt to detect wrong paths shorter than 34 chars: INSTANCE_NUMBER will be C: or D: etc.
IF EXIST %INSTANCE_NUMBER% GOTO :ERR_SCRIPT_LOCATION

REM Get the profile path
FOR /F "skip=3 tokens=1*" %%i IN ('%SCRIPT_LOCATION%..\..\..\..\exe\sapcontrol -nr %INSTANCE_NUMBER% -prot PIPE -function ParameterValue SAPPROFILE_IN_EFFECT') DO SET PROFILE=%%i
IF "%PROFILE%" == "FAIL:" GOTO :SAPSTARTSRV_ERROR
IF NOT EXIST %PROFILE% GOTO :PROFILE_ERROR

REM Launch the tool via JSF
%SCRIPT_LOCATION%..\..\..\..\exe\jstart.exe -launch -nodename=%NODE_NAME% -file=%STARTUP_FILE% pf=%PROFILE% %PARAMETERS%
SET EXITCODE=%ERRORLEVEL%
SET OUTPUT_FILE=%SCRIPT_LOCATION%..\..\..\..\work\jvm_%NODE_NAME%.out
IF EXIST %OUTPUT_FILE% TYPE %OUTPUT_FILE%
IF %EXITCODE% NEQ 0 (
  ECHO ERROR: JStart exit code [%EXITCODE%], see details in log file [dev_%NODE_NAME%]
)
GOTO :END

REM ERROR - the script parameters are totaly wrong
:WRONG_ARGS
SET EXITCODE=10
ECHO %0: This helper script is not designed to be run directly
GOTO :END

REM ERROR - the script is located in wrong folder
:ERR_SCRIPT_LOCATION
SET EXITCODE=11
ECHO Instance not found: The launcher script is located in wrong folder: [%SCRIPT_LOCATION%]
ECHO Expected script location: [...\j2ee\cluster\bootstrap\scripts\]
GOTO :END

REM ERROR - startup file not found
:STARTUP_FILE_NOT_FOUND
SET EXITCODE=12
ECHO FATAL: Startup file not found: [%STARTUP_FILE%]
GOTO :END

REM ERROR - no tool specified
:TOOL_NOT_SPECIFIED
SET EXITCODE=13
ECHO FATAL: No tool specified for launch
goto:END

REM ERROR - the instance can not be parsed
:INSTANCE_ERROR
SET EXITCODE=14
ECHO FATAL: Instance not found
GOTO :END

REM ERROR - the profile does not exist
:PROFILE_ERROR
SET EXITCODE=15
ECHO. FATAL: Profile not found: [%PROFILE%]
GOTO :END

REM ERROR - the sapstartsrv is not started
:SAPSTARTSRV_ERROR
SET EXITCODE=16
ECHO. FATAL: SAPSTART service for instance [%INSTANCE_NAME%] is not started
GOTO :END

:END
IF DEFINED EXITCODE EXIT /B %EXITCODE%