MS_PW.C
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:5k
源码类别:

DVD

开发平台:

Others

  1. /* **************************************************************************************
  2.  *  Copyright (c) 2002 ZORAN Corporation, All Rights Reserved
  3.  *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
  4.  *
  5.  *  File: $Workfile: MS_PW.C $             
  6.  *
  7.  * Description:
  8.  * ============
  9.  * menu system password handling
  10.  * 
  11.  * Log:
  12.  * ====
  13.  * $Revision: 4 $
  14.  * Last Modified by $Author: Rogerl $ at $Modtime: 03-04-03 22:09 $ 
  15.  ****************************************************************************************
  16.  * Updates:
  17.  ****************************************************************************************
  18.  * $Log: /SourceCode/I64_Common/I64_Reference/UI/Menu_sys/MS_PW.C $
  19.  * 
  20.  * 4     03-04-07 11:29 Rogerl
  21.  * Force action at last
  22.  * 
  23.  * 3     03-01-09 4:43 Leslie
  24.  * Unicode support
  25.  * 
  26.  * 11    5/22/02 8:52a Tomasp
  27.  * Changed include paths.
  28.  * 
  29.  * 10    23/04/02 9:39 Nirm
  30.  * - Added dependency in "Config.h".
  31.  * 
  32.  * 9     11/03/02 12:52 Nirm
  33.  * Debug message in case of memory allocation failure.
  34.  * 
  35.  * 8     2/27/02 7:02a Tomasp
  36.  * Changed get_blk/rel_blk to malloc,free.
  37.  * 
  38.  * 6     16/01/02 8:57 Nirm
  39.  * Fixed debug-messages.
  40.  * 
  41.  * 5     13/01/02 16:39 Atai
  42.  * Remove old Defines
  43.  * 
  44.  * 4     9/01/02 18:23 Nirm
  45.  * Corrected Include-Paths.
  46.  * 
  47.  * 3     30/12/01 10:03 Atai
  48.  * Add explicit casting
  49.  * 
  50.  * 2     25/12/01 10:52 Atai
  51.  * Code cleaning
  52.  **************************************************************************************** */
  53. #include "Config.h" // Global Configuration - do not remove!
  54. #ifdef _DEBUG
  55. #include "DebugDbgMain.h"
  56. #undef IFTRACE
  57. #define IFTRACE if (gTraceMenu)
  58. #endif //_DEBUG
  59. #include <stdio.h>
  60. #include <stdlib.h>
  61. #include <string.h>
  62. #include "Includesysdefs.h"
  63. #include "Decoderosdrendr.h"
  64. #include "UIMenu_Sysosd_drv.h"
  65. #include "UIMenu_Sysms_wdgt.h"
  66. #define MS_MAX_EDIT 7
  67. // Assume that the English font set is currently set
  68. void MS_str_2_hidden_str(wchar_t *in,wchar_t *out)
  69. {
  70. while (*in)
  71. {
  72. if ((*in <= '9') && (*in >= '0'))
  73. {
  74.   *out = 0x002a;//UNICODE_STAR;
  75. }
  76. else
  77.   *out = 0x002d;//UNICODE_DASH;
  78. out++;
  79. in++;
  80. }
  81. *out = NULL_CHAR;
  82. }
  83. static void display (MS_WIDGET *widget, char focus)
  84. {
  85. MS_EDIT *edit = (MS_EDIT *)widget;
  86. wchar_t str[MS_MAX_EDIT+1];
  87. #ifndef D_MSPW_DISPLAY_WHILE_EDITING
  88.   MS_str_2_hidden_str(edit->present.text,str);
  89. #endif // D_MSPW_DISPLAY_WHILE_EDITING
  90. // First time focus, start from beginning of the field
  91. OSD_PutText(widget->pos.x,
  92. widget->pos.y,
  93. widget->pos.w,
  94. widget->pos.h,
  95. #ifdef D_MS_EXTENSIONS
  96. FORE_COLOR(widget, focus),
  97. #else
  98. FG_COLOR(widget->color),
  99. #endif //D_MS_EXTENSIONS
  100. BACK_COLOR(widget, focus),
  101. str,MS_JUST(widget),
  102. C_ASCII);
  103. }
  104. static unsigned char number_select(MS_EDIT *edit,unsigned char num) 
  105. {
  106. if ( edit_number_select(edit, num) )
  107. {
  108. display( (MS_WIDGET *)edit, C_FOCUSED );  // Display the text with the new number;
  109. }
  110. return 1;
  111. }
  112. // Expose user_op for MS_PASSWORD
  113. MS_UOP password_user_op(MS_WIDGET *widget,MS_UOP uop,char param) 
  114. {
  115. switch (uop) {
  116. case MS_UOP_DELETE:
  117. return 0;
  118. case MS_UOP_CLEAR:
  119. _wcsnset( ((wchar_t *) ((MS_EDIT *)widget)->present.text), L'-', ((MS_EDIT *) widget)->max_width);
  120. //param = 1;
  121. param = ( (((MS_DIALOG *) widget->parent)->pwli_focus->widget == widget) ? C_FOCUSED : !C_FOCUSED );
  122.   // Fall through!
  123. case MS_UOP_DISPLAY:
  124. ((MS_EDIT *)widget)->current_num = 0;
  125. display(widget,param);
  126. return 0;
  127. case MS_UOP_0:
  128. case MS_UOP_1:
  129. case MS_UOP_2:
  130. case MS_UOP_3:
  131. case MS_UOP_4:
  132. case MS_UOP_5:
  133. case MS_UOP_6:
  134. case MS_UOP_7:
  135. case MS_UOP_8:
  136. case MS_UOP_9:
  137.   {
  138. number_select((MS_EDIT *)widget,(unsigned char)(uop-MS_UOP_0));
  139. return MS_UOP_NOP;
  140.   }
  141.   //break;
  142. }
  143. if (uop != MS_UOP_ENTER) {
  144. return uop;
  145. }
  146. if((((MS_EDIT *)widget)->current_num != 4)&&(uop == MS_UOP_ENTER))
  147. {
  148. _wcsnset( ((wchar_t *) ((MS_EDIT *)widget)->present.text), L'-', ((MS_EDIT *) widget)->max_width);
  149. param = ( (((MS_DIALOG *) widget->parent)->pwli_focus->widget == widget) ? C_FOCUSED : !C_FOCUSED );
  150. ((MS_EDIT *)widget)->current_num = 0;
  151. display(widget,param);
  152. return 0;
  153. }
  154. ((MS_EDIT *)widget)->current_num = 0;
  155. //Take action at last
  156. ((MS_EDIT *)widget)->action(((MS_EDIT *)widget)->present.text);
  157. return MS_UOP_NOP;
  158. }
  159. // text must be a valid memory, size  "max_width" plus one , ended with '' 
  160. MS_PASSWORD *MS_create_password(MS_POS *pos,MS_COLOR color,void *text,void (* action)(void *), unsigned char max_width,unsigned char attr)
  161. {
  162. MS_PASSWORD *password;
  163. dbg_printf(("MS_create_passwordn"));
  164. password = (MS_PASSWORD *)malloc(sizeof(MS_PASSWORD));
  165. #ifdef _DEBUG
  166. if (NULL == password) {
  167. tr_printf(("FATAL: MS_create_password() Failed: Low system resources.n"));
  168. return NULL;
  169. }
  170. #endif //_DEBUG
  171. ((MS_WIDGET *)password)->pos = *pos;
  172. ((MS_WIDGET *)password)->parent = NO_PARENT;
  173. ((MS_EDIT *)password)->present.text = text;
  174. ((MS_EDIT *)password)->action = action;
  175. ((MS_EDIT *)password)->max_width = max_width;
  176. ((MS_EDIT *)password)->current_num = 0;
  177. ((MS_WIDGET *)password)->attr = attr | MS_ASCII;
  178. ((MS_WIDGET *)password)->color = color;
  179. ((MS_WIDGET *)password)->user_op = password_user_op;
  180. ((MS_WIDGET *)password)->attrh = ALIGN_CENTER;
  181. return password;
  182. }