Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
6.6 KiB

  1. /*
  2. * Module - main.c
  3. *
  4. * Presents the tcservice data in a simple console mode
  5. * application.
  6. *
  7. *
  8. * Sadagopan Rajaram - Dec 20 1999.
  9. *
  10. */
  11. #include "tcadmin.h"
  12. FARPROC getparams=NULL;
  13. FARPROC setparams=NULL;
  14. FARPROC deletekey = NULL;
  15. PVOID ResourceImageBase=NULL;
  16. HANDLE hConsoleInput=NULL;
  17. HANDLE hConsoleOutput = NULL;
  18. TCHAR lastChar = (TCHAR) 0;
  19. int __cdecl
  20. main(
  21. IN int argc,
  22. char *argv[]
  23. )
  24. {
  25. // Just load the library.
  26. HINSTANCE hinstLib;
  27. TCHAR key;
  28. LPTSTR buff;
  29. int result;
  30. int nameLen,deviceLen;
  31. UINT BaudRate;
  32. DWORD len;
  33. UCHAR WordLen,StopBits,Parity;
  34. BOOL fFreeResult;
  35. LONG retVal;
  36. TCHAR name[MAX_BUFFER_SIZE];
  37. TCHAR device[MAX_BUFFER_SIZE];
  38. BOOL cont=TRUE;
  39. LPTSTR temp;
  40. BOOL readRet;
  41. hConsoleInput = GetStdHandle(STD_INPUT_HANDLE);
  42. if(hConsoleInput != INVALID_HANDLE_VALUE){
  43. SetConsoleMode(hConsoleInput,
  44. ENABLE_PROCESSED_OUTPUT
  45. );
  46. }
  47. else {
  48. return 1;
  49. }
  50. hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  51. if(hConsoleOutput != INVALID_HANDLE_VALUE){
  52. SetConsoleMode(hConsoleOutput,
  53. ENABLE_PROCESSED_OUTPUT|
  54. ENABLE_WRAP_AT_EOL_OUTPUT
  55. );
  56. }
  57. else {
  58. return 1;
  59. }
  60. hinstLib = LoadLibrary(_T("tcdata"));
  61. RtlPcToFileHeader(main,&ResourceImageBase);
  62. if(!ResourceImageBase){
  63. _tprintf(_T("Cannot find image base\n"));
  64. return 1;
  65. }
  66. // If the handle is valid, try to get the function address.
  67. if(!hinstLib){
  68. buff=RetreiveMessageText(MSG_CANNOT_LOAD);
  69. if(buff){
  70. _tprintf(_T("%s"),buff);
  71. }
  72. return 1;
  73. }
  74. buff = RetreiveMessageText(MSG_PROCEDURE_NOT_FOUND);
  75. getparams = GetProcAddress(hinstLib, "GetParametersAtIndex");
  76. if(!getparams){
  77. if(buff){
  78. _tprintf(_T("%s"),buff);
  79. }
  80. return 1;
  81. }
  82. setparams = GetProcAddress(hinstLib, "SetParameters");
  83. if(!setparams){
  84. if(buff){
  85. _tprintf(_T("%s"),buff);
  86. }
  87. return 1;
  88. }
  89. deletekey = GetProcAddress(hinstLib, "DeleteKey");
  90. if(!deletekey){
  91. if(buff){
  92. _tprintf(_T("%s"),buff);
  93. }
  94. return 1;
  95. }
  96. TCFree(buff);
  97. buff = RetreiveMessageText(MSG_MAIN_SCREEN);
  98. if(!buff){
  99. return 1;
  100. }
  101. while(cont){
  102. _tprintf(_T("%s"),buff);
  103. do{
  104. readRet = ReadFile(hConsoleInput,
  105. &key,
  106. sizeof(TCHAR),
  107. &len,
  108. NULL
  109. );
  110. if(!readRet || !len){
  111. exit(1);
  112. }
  113. if(lastChar != _T('\r') || key != _T('\n')){
  114. lastChar = key;
  115. break;
  116. }
  117. lastChar = key;
  118. }while(1);
  119. switch(key){
  120. case _T('0'):
  121. cont=FALSE;
  122. break;
  123. case _T('1'):
  124. // Browse through the registry
  125. Browse();
  126. break;
  127. case _T('2'):
  128. // Add a key to the registry
  129. // send an add message to the
  130. // service if it exists.
  131. BaudRate = DEFAULT_BAUD_RATE;
  132. StopBits = STOP_BIT_1;
  133. Parity = NO_PARITY;
  134. WordLen = SERIAL_DATABITS_8;
  135. retVal = DisplayEditMenu(name,
  136. 0,
  137. device,
  138. 0,
  139. &BaudRate,
  140. &WordLen,
  141. &Parity,
  142. &StopBits
  143. );
  144. temp = RetreiveMessageText(MSG_CONFIRM_PROMPT);
  145. if(!temp){
  146. return 1;
  147. }
  148. temp[_tcslen(temp) -2] = '\0';
  149. _tprintf(_T("%s"),temp);
  150. TCFree(temp);
  151. do{
  152. readRet = ReadFile(hConsoleInput,
  153. &key,
  154. sizeof(TCHAR),
  155. &len,
  156. NULL
  157. );
  158. if(!readRet || !len){
  159. exit(1);
  160. }
  161. if(lastChar != _T('\r') || key != _T('\n')){
  162. lastChar = key;
  163. break;
  164. }
  165. lastChar = key;
  166. }while(1);
  167. if((key == _T('y'))
  168. || (key == _T('Y'))){
  169. retVal = (LONG) (setparams)(name,
  170. device,
  171. &StopBits,
  172. &Parity,
  173. &BaudRate,
  174. &WordLen
  175. );
  176. if(retVal != ERROR_SUCCESS){
  177. temp = RetreiveMessageText(MSG_ERROR_SET);
  178. if(temp){
  179. temp[_tcslen(temp) - 2 ] = _T('\0');
  180. _tprintf(_T("%s %d"),temp,retVal);
  181. TCFree(temp);
  182. }
  183. }
  184. }
  185. break;
  186. case _T('3'):
  187. SendParameterChange();
  188. break;
  189. case _T('4'):
  190. GetStatus();
  191. break;
  192. case _T('5'):
  193. StartTCService();
  194. break;
  195. case _T('6'):
  196. StopTCService();
  197. break;
  198. case _T('7'):
  199. AddAllComPorts();
  200. break;
  201. default:
  202. DisplayScreen(MSG_HELP_SCREEN);
  203. do{
  204. readRet = ReadFile(hConsoleInput,
  205. &key,
  206. sizeof(TCHAR),
  207. &len,
  208. NULL
  209. );
  210. if(!readRet || !len){
  211. exit(1);
  212. }
  213. if(lastChar != _T('\r') || key != _T('\n')){
  214. lastChar = key;
  215. break;
  216. }
  217. lastChar = key;
  218. }while(1);
  219. break;
  220. }
  221. }
  222. fFreeResult = FreeLibrary(hinstLib);
  223. return 0;
  224. }