#include"wsh_shell_promptwait.h"voidWshShellPromptWait_Flush(WshShellPromptWait_t*pWait){WSH_SHELL_ASSERT(pWait);if(!pWait)return;pWait->Handler=NULL;pWait->Ctx=NULL;}#if WSH_SHELL_PROMPT_WAITvoidWshShellPromptWait_Attach(WshShellPromptWait_t*pWait,WshShellPromptWait_Handler_thandler,void*pCtx){WSH_SHELL_ASSERT(pWait&&handler);if(!pWait||!handler)return;pWait->Handler=handler;pWait->Ctx=pCtx;}WSH_SHELL_RET_STATE_tWshShellPromptWait_Handle(WshShellPromptWait_t*pWait,WshShell_Char_tsymbol){WSH_SHELL_ASSERT(pWait);if(!pWait)returnWSH_SHELL_RET_STATE_ERR_PARAM;if(pWait->Handler){/* Ctrl+C cancels any pending prompt-wait, letting the cancel * handler in the main symbol dispatcher run normally. */if(symbol==WSH_SHELL_SYM_CANCEL){WshShellPromptWait_Flush(pWait);returnWSH_SHELL_RET_STATE_ERR_EMPTY;}WshShell_Bool_tres=pWait->Handler(symbol,pWait);if(!res)WSH_SHELL_PRINT("%c",WSH_SHELL_SYM_SOUND);returnres==true?WSH_SHELL_RET_STATE_SUCCESS:WSH_SHELL_RET_STATE_ERR_BUSY;}returnWSH_SHELL_RET_STATE_ERR_EMPTY;}WshShell_Bool_tWshShellPromptWait_Enter(WshShell_Char_tsymbol,WshShellPromptWait_t*pWait){WSH_SHELL_ASSERT(pWait);if(symbol=='\r'||symbol=='\n'){WshShellPromptWait_Flush(pWait);returntrue;}else{WSH_SHELL_PRINT_SYS("Press <Enter> to continue...\r\n");returnfalse;}}WshShell_Bool_tWshShellPromptWait_YesNo(WshShell_Char_tsymbol,WshShellPromptWait_t*pWait){WSH_SHELL_ASSERT(pWait);if(symbol=='Y'||symbol=='y'){WSH_SHELL_PRINT_SYS("Yes selected\r\n");}elseif(symbol=='N'||symbol=='n'){WSH_SHELL_PRINT_SYS("No selected\r\n");}else{WSH_SHELL_PRINT_SYS("Invalid input\r\n");returnfalse;}returntrue;}#else /* WSH_SHELL_PROMPT_WAIT */voidWshShellPromptWait_Attach(WshShellPromptWait_t*pWait,WshShellPromptWait_Handler_thandler,void*pCtx){return;}WSH_SHELL_RET_STATE_tWshShellPromptWait_Handle(WshShellPromptWait_t*pWait,WshShell_Char_tsymbol){returnWSH_SHELL_RET_STATE_SUCCESS;}WshShell_Bool_tWshShellPromptWait_Enter(WshShell_Char_tsymbol,WshShellPromptWait_t*pWait){returntrue;}WshShell_Bool_tWshShellPromptWait_YesNo(WshShell_Char_tsymbol,WshShellPromptWait_t*pWait){returntrue;}#endif /* WSH_SHELL_PROMPT_WAIT */