1 #if !defined(TARGET_POSIX) && !defined(_XBMC)
8 static void RawPrint(char *Msg,MESSAGE_TYPE MessageType);
10 static MESSAGE_TYPE MsgStream=MSG_STDOUT;
11 static bool Sound=false;
12 const int MaxMsgSize=2*NM+2048;
14 void InitConsoleOptions(MESSAGE_TYPE MsgStream,bool Sound)
16 ::MsgStream=MsgStream;
20 #if !defined(GUI) && !defined(SILENT)
21 void mprintf(const char *fmt,...)
23 if (MsgStream==MSG_NULL || MsgStream==MSG_ERRONLY)
25 safebuf char Msg[MaxMsgSize];
28 vsprintf(Msg,fmt,argptr);
29 RawPrint(Msg,MsgStream);
35 #if !defined(GUI) && !defined(SILENT)
36 void eprintf(const char *fmt,...)
38 if (MsgStream==MSG_NULL)
40 safebuf char Msg[MaxMsgSize];
43 vsprintf(Msg,fmt,argptr);
44 RawPrint(Msg,MSG_STDERR);
50 #if !defined(GUI) && !defined(SILENT)
51 void RawPrint(char *Msg,MESSAGE_TYPE MessageType)
57 OutFile.SetHandleType(FILE_HANDLESTD);
61 OutFile.SetHandleType(FILE_HANDLEERR);
69 char OutMsg[MaxMsgSize],*OutPos=OutMsg;
70 for (int I=0;Msg[I]!=0;I++)
72 if (Msg[I]=='\n' && (I==0 || Msg[I-1]!='\r'))
79 #if defined(_UNIX) || defined(_EMX)
80 char OutMsg[MaxMsgSize],*OutPos=OutMsg;
81 for (int I=0;Msg[I]!=0;I++)
88 OutFile.Write(Msg,strlen(Msg));
107 void GetPasswordText(char *Str,int MaxLength)
110 HANDLE hConIn=GetStdHandle(STD_INPUT_HANDLE);
111 HANDLE hConOut=GetStdHandle(STD_OUTPUT_HANDLE);
112 DWORD ConInMode,ConOutMode;
114 GetConsoleMode(hConIn,&ConInMode);
115 GetConsoleMode(hConOut,&ConOutMode);
116 SetConsoleMode(hConIn,ENABLE_LINE_INPUT);
117 SetConsoleMode(hConOut,ENABLE_PROCESSED_OUTPUT|ENABLE_WRAP_AT_EOL_OUTPUT);
118 ReadConsole(hConIn,Str,MaxLength-1,&Read,NULL);
121 SetConsoleMode(hConIn,ConInMode);
122 SetConsoleMode(hConOut,ConOutMode);
123 #elif defined(_EMX) || defined(_BEOS)
124 fgets(Str,MaxLength-1,stdin);
126 strncpy(Str,getpass(""),MaxLength-1);
134 #if !defined(GUI) && !defined(SILENT)
135 unsigned int GetKey()
142 fgets(Str,sizeof(Str),stdin);
146 SrcFile.SetHandleType(FILE_HANDLESTD);
147 SrcFile.Read(Str,sizeof(Str));
156 bool GetPassword(PASSWORD_TYPE Type,const char *FileName,char *Password,int MaxLength)
162 #if defined(_EMX) || defined(_BEOS)
163 strcpy(PromptStr,St(MAskPswEcho));
165 strcpy(PromptStr,St(MAskPsw));
167 if (Type!=PASSWORD_GLOBAL)
169 strcat(PromptStr,St(MFor));
170 strcat(PromptStr,PointToName(FileName));
172 eprintf("\n%s: ",PromptStr);
173 GetPasswordText(Password,MaxLength);
174 if (*Password==0 && Type==PASSWORD_GLOBAL)
176 if (Type==PASSWORD_GLOBAL)
178 strcpy(PromptStr,St(MReAskPsw));
181 GetPasswordText(CmpStr,sizeof(CmpStr));
182 if (*CmpStr==0 || strcmp(Password,CmpStr)!=0)
184 strcpy(PromptStr,St(MNotMatchPsw));
187 CharToOem(PromptStr,PromptStr);
191 memset(Password,0,MaxLength);
192 memset(CmpStr,0,sizeof(CmpStr));
195 memset(CmpStr,0,sizeof(CmpStr));
204 #if !defined(GUI) && !defined(SILENT)
205 int Ask(const char *AskStr)
207 const int MaxItems=10;
208 char Item[MaxItems][40];
209 int ItemKeyPos[MaxItems],NumItems=0;
211 for (const char *NextItem=AskStr;NextItem!=NULL;NextItem=strchr(NextItem+1,'_'))
213 char *CurItem=Item[NumItems];
214 strncpy(CurItem,NextItem+1,sizeof(Item[0]));
215 char *EndItem=strchr(CurItem,'_');
219 while ((CurKey=CurItem[KeyPos])!=0)
222 for (int I=0;I<NumItems && !Found;I++)
223 if (loctoupper(Item[I][ItemKeyPos[I]])==loctoupper(CurKey))
225 if (!Found && CurKey!=' ')
229 ItemKeyPos[NumItems]=KeyPos;
233 for (int I=0;I<NumItems;I++)
235 eprintf(I==0 ? (NumItems>4 ? "\n":" "):", ");
236 int KeyPos=ItemKeyPos[I];
237 for (int J=0;J<KeyPos;J++)
238 eprintf("%c",Item[I][J]);
239 eprintf("[%c]%s",Item[I][KeyPos],&Item[I][KeyPos+1]);
244 OemToCharBuff((LPCSTR)&Ch,(LPTSTR)&Ch,1);
247 for (int I=0;I<NumItems;I++)
248 if (Ch==Item[I][ItemKeyPos[I]])
255 int KbdAnsi(char *Addr,int Size)
259 for (int I=0;I<Size;I++)
260 if (Addr[I]==27 && Addr[I+1]=='[')
262 for (int J=I+2;J<Size;J++)
266 if (!isdigit(Addr[J]) && Addr[J]!=';')
276 void OutComment(char *Comment,int Size)
279 if (KbdAnsi(Comment,Size)==2)
281 const int MaxOutSize=0x400;
282 for (int I=0;I<Size;I+=MaxOutSize)
284 char Msg[MaxOutSize+1];
285 int CopySize=Min(MaxOutSize,Size-I);
286 strncpy(Msg,Comment+I,CopySize);
296 void OutComment(char *Comment,int Size)