/************************************************************************* module :[ナンバーディスプレイデータ(ダイヤル番号)の入力] function :[ 1. ] return :[] common :[] condition :[] comment :[] machine :[SH7043] language :[SHC] keyword :[OPR] date :[1999/01/07] author :[藤村春夫] *************************************************************************/ UBYTE ND_DialNumberInput(UBYTE *stored_data) /* 登録済みデータ */ { UBYTE key; /* キー取り込みデータ */ /** 初期化 */ ClearCharacterInput(); CMN_StringCopy(CharacterInput.Buffer, stored_data); CharacterInput.MaxFigure = SYS_DIRECT_DIAL_MAX - 1; CharacterInput.WritePosition = (UBYTE)CMN_StringLength(CharacterInput.Buffer); CharacterInput.CursorPosition = CharacterInput.WritePosition; /** データ入力 */ while (1) { /** 下段に登録状況を表示 */ DisplayNumberInput(); /** キー取り込み */ key = NumberInputKeyGet(); switch (key) { case STOP_KEY: /* ストップキー */ /* 終了 */ CursorOff(); return (NG); case SET_KEY: /* セットキー */ /* 終了 */ CursorOff(); return (OK); case DIAL_MARK_KEY: /* ダイアル記号キー */ CharacterDataSet_FigureCheck('-'); break; case TEN_AST_KEY: /* * */ CharacterDataSet_FigureCheck(key); break; case OPR_NO_KEY: break; default: NackBuzzer(); break; } } }
void InitScr( void ) { int i; CursorOff(); ClearScr(); for ( i = 1; i <= MAX_ROW; i++ ) { PutChar( i, MAX_COL + 1, '|' ); // write right side of grid } for ( i = 1; i < MAX_COL + 1; i++ ) { PutChar( MAX_ROW + 1, i, '-' ); // write bottom side of grid } }
/************************************************************************* module :[指定した位置に一文字表示] function :[ 1.引数で指定された位置に一文字表示する 2.表示位置:上段ー>0〜19、下段->20〜39 ] return :[] common :[SYS_LCD_DataPortStatus] condition :[] comment :[] machine :[SH7043] language :[SHC] keyword :[OPR] date :[1995/02/23] author :[江口] *************************************************************************/ void DisplayChar(UBYTE pos, /*表示位置 0-39*/ UBYTE dsp_char) /*表示文字*/ { UBYTE IntEnble; /* 表示がとろすぎてLCD表示がつぶれます。by O.Kimoto 1999/02/26 */ #if (0) ** /* 現状のLOTUS/KURUMIは、LCDの途中から文字を表示すると言う考え方が基本的に存在しない。 ** ** よって、暫定的にこの関数が呼ばれると、上下のどちらかのバッファに指定文字をセットし、後の表示に関しては ** ** 表示割り込み処理に任せるものとする。 ** ** By O.Kimoto 1998/09/25 ** */ ** UBYTE ddram_adr; ** ** /** カーソルをOFFする 1996/01/06 Eguchi */ ** CursorOff(); ** ** /*-------------------------*/ ** /** 表示位置のアドレス計算 */ ** /*-------------------------*/ ** if (pos < 20) { ** ddram_adr = (UBYTE)DDRAM_FIRST_ROW_ADDRESS + pos; ** }
void ecs_MainMenu() //Main Menu for Navigation with options... { char cToCount; clearLcdScreen(); key_init(); setCursorLcd( 0, 0); displayStringLcd("ECS"); setCursorLcd( 1, 0); displayStringLcd("Main"); setCursorLcd( 2, 0); displayStringLcd("Menu"); for(cToCount =0;cToCount<3; cToCount++){ setCursorLcd(cToCount, 4); displayCharLcd( 4 ); } setCursorLcd(0, 5); displayCharLcd( 0x7f); //box symbol ascii equivalentt hex code... displayStringLcd("Sync Data..."); setCursorLcd( 1, 5 ); displayCharLcd( 0xdb ); //symbol for Sync mode operation.'<-' displayStringLcd( "Settings..."); setCursorLcd( 2, 5 ); displayCharLcd( 0x7e ); //symbol for Data mode operation. '->' displayStringLcd( "Data Entry..."); for(cToCount =0;cToCount<20; cToCount++){ setCursorLcd(3, cToCount); displayCharLcd( 1 ); } CursorOff(); }
/************************************************************************* module :[マーキュリーダイアル番号入力] function :[ 1 ] return :[ OK:正常終了 NG:登録中止 ] common :[ FunctionDisplayBuffer CharacterInput ] condition :[] comment :[] machine :[SH7043] language :[SHC] keyword :[OPR] date :[1995/05/18] author :[江口] 1996/06/25 H,Yagi *************************************************************************/ UBYTE MercuryNumberInput(void) { UBYTE key; /* キー取り込みデータ */ #if defined(STOCKHM2) || (PRO_PREFIX_KEY == ENABLE) /* Added by SMuratec C.P 2004/07/08 for prefix number display *//* by K.Watanabe 2004/10/12 */ UWORD length; #endif /* 使用するワークバッファをクリアする */ ClearCharacterInput(); CharacterInput.MaxFigure = (UBYTE)(SYS_MERCURY_BUF_MAX - 1); #if defined(STOCKHM2) || (PRO_PREFIX_KEY == ENABLE) /* Added by SMuratec C.P 2004/07/08 for prefix number display *//* by K.Watanabe 2004/10/12 */ length = CMN_StringLength(SYB_MercuryDialBuffer); CMN_StringCopy(CharacterInput.Buffer,SYB_MercuryDialBuffer); CharacterInput.CursorPosition = length; CharacterInput.WritePosition = length; #endif /*******************/ /* データ入力処理 */ /*******************/ while (1) { /** 表示処理 */ DisplayNumberInput(); /* 下段に入力状態を表示 */ /** キー取り込み *//* カーソル移動などの処理は実行済み*/ key = NumberInputKeyGet(); switch (key) { case STOP_KEY: /* ストップキー */ /** 終了 */ CursorOff(); return (NG); case SET_KEY: /* セットキー */ /*--------------------------------*/ /* 入力された値のチェックを行う */ /*--------------------------------*/ if (CheckCharacterInputEmpty() == TRUE) { /* 入力されていない */ CursorOff(); /* 終了する */ return (OK); } /** チェック用のバッファにチェックする番号をセットする */ SetToCheckBuffer(&CharacterInput.Buffer[0], NULL); if (CheckDirectDialNumberInput() == OK) { CursorOff(); return (OK); } else { NackBuzzer(); /** エラー箇所にカーソルを移動させる */ CharacterInput.CursorPosition = ErrorPositionSet(); } break; case DIAL_MARK_KEY: /* ダイアル記号キー */ CharacterInputDialCharSet(); break; case REDIAL_KEY: /* ポーズとして使用するかも */ CharacterInputDialMarkSet(PAUSE_MARK); break; case FLASH_KEY: /* フラッシュキー1996/04/20 追加 */ CharacterInputDialMarkSet(FLASH_MARK); break; case MERCURY_KEY: /* マーキュリーキー 1996/07/16 H,Yagi */ CharacterInputDialMarkSet(MERCURY_TONE_MARK); break; case TEN_SHARP_KEY: /* # */ /* case TEN_ASTA_KEY: */ case TEN_AST_KEY: /* * */ /* Modified by S.Fukui Sep.18,1997 */ CharacterDataSet_FigureCheck(key); break; case OPR_NO_KEY: break; default: NackBuzzer(); break; } } }
/************************************************************************* module :[LCD下段に文字列を表示] function :[LCD下段の指定された位置に文字列を表示] return :[] common :[DisplayBufferLow] condition :[点滅表示には使用しないこと] comment :[] *************************************************************************/ void DisplayStringLow( UBYTE pos, /* 表示位置(0〜19) */ CONST UBYTE *string) /* 表示文字列 */ { UBYTE write_data; UBYTE counter; UBYTE IntEnble; /* 表示がとろすぎてLCD表示がつぶれます。by O.Kimoto 1999/02/26 */ /** カーソルをOFFする By H.Fujimura 1998/11/05 */ CursorOff(); /* 表示文字列のアドレス変換 */ string = CalculateStringAddress(string); /* 表示がとろすぎてLCD表示がつぶれます。 ** by O.Kimoto 1999/02/26 */ IntEnble = CheckInterruptEnable(); CMN_DisableInterrupt(); /* Task Switching 防止のため */ /* LCD_DisplayBufferLow[]にコピーする前に点滅を止めるようにする T.Nose 2005/03/10 */ /** 点滅表示を停止する By H.Fujimura 1998/12/02 */ /* 点滅中に点滅タスク以外のタスクが表示を書き換えるには点滅をやめる時であるとする */ StopFunctionFlashLow(); /* 表示文字列の書き込み */ for (counter = pos; counter < OPR_DISPLAY_MAX; counter++) { write_data = *string++; if (write_data == 0x00) { /* NULLの場合書き込み終了(文字列の最後にはNULLをいれておく) */ break; } #if (0) ** /* 関数置き換え By O.Kimoto 1998/09/25 */ ** write_data = ConvSpecialChar(*string++); /* 特殊文字変換 */ #else write_data = CheckSpecialCharacter(write_data); /* 特殊文字変換 */ #endif #if (0) ** /* LCD表示がちらつくので、ローカル用バッファに一旦コピーしてから表示するように変更 ** ** byO.Kimoto 1999/02/06 ** */ ** DisplayBufferLow[counter] = write_data; #else LCD_DisplayBufferLow[counter] = write_data; #endif } /* 表示がとろすぎてLCD表示がつぶれます。 ** by O.Kimoto 1999/02/26 */ if (IntEnble) { CMN_EnableInterrupt(); } #if 0 /* LCD_DisplayBufferLow[]にコピーする前に点滅を止めるようにする T.Nose 2005/03/10 */ /** 点滅表示を停止する By H.Fujimura 1998/12/02 */ /* 点滅中に点滅タスク以外のタスクが表示を書き換えるには点滅をやめる時であるとする */ StopFunctionFlashLow(); #endif }
int main( int argc, char* argv[] ) { sem_t *sem; char sem_str[20]; char str[40]; // general purpose string strcpy( sem_str, argv[1] ); sem = sem_open( sem_str, O_CREAT ); if ( sem == SEM_FAILED ) { perror( "keypoll semaphore" ); exit(1); } CursorOff( sem ); sem_wait( sem ); sprintf( str, "\033[%d;%dH", 1, 1 ); write( OUT, str, strlen(str) ); sprintf( str, "Pick a character from the alphabet" ); write( OUT, str, strlen(str) ); sprintf( str, "\033[%d;%dH", 2, 2 ); write( OUT, str, strlen(str) ); sprintf( str, "5 seconds !!" ); write( OUT, str, strlen(str) ); sem_post( sem ); int i; int j = 5; char ch; // increase keypoll sensitivity -- check 4 times a second for ( i = 20; i > 0; i-- ) { if ( (i % 5) == 0 ) { PutChar( 2, 2, j + 48, sem ); j--; } usleep( USEC ); ch = KeyPoll(); if ( ch != ' ' && (int)ch > 64 && (int)ch < 123 ) { if ( (int)ch > 90 ) { ch = (char)((int)ch - 32); // make it a capital letter } break; } } sprintf( str, "\033[%d;%dH", 2, 2 ); // will position cursor if ( ch == ' ' ) { // i'll pick for you // be more random srand( time(NULL) * getpid() ); ch = (char) (rand() % 26) + 64; char sentence[40]; sprintf( sentence, "0 seconds !! I've picked for you:" ); sem_wait( sem ); write( OUT, str, strlen(str) ); // position cursor write( OUT, sentence, strlen(sentence) ); sem_post( sem ); sprintf( str, "\033[%d;%dH", 2, (strlen(sentence) + 3) ); char space = ' '; sem_wait( sem ); for ( i = 0; i < 15; i++ ) { write( OUT, str, strlen(str) ); write( OUT, &space, 1 ); usleep( USEC * 2 ); write( OUT, str, strlen(str) ); write( OUT, &ch, 1 ); usleep( USEC * 2 ); } sem_post( sem ); } else { // you picked char sentence[40]; sprintf( sentence, "0 seconds !! You've picked:" ); sem_wait( sem ); write( OUT, str, strlen(str) ); // position cursor write( OUT, sentence, strlen(sentence) ); sem_post( sem ); sprintf( str, "\033[%d;%dH", 2, (strlen(sentence) + 3) ); char space = ' '; sem_wait( sem ); for ( i = 0; i < 7; i++ ) { write( OUT, str, strlen(str) ); write( OUT, &space, 1 ); usleep( USEC * 2 ); write( OUT, str, strlen(str) ); write( OUT, &ch, 1 ); usleep( USEC * 2 ); } sem_post( sem ); } usleep( USEC * 10 ); exit ((int)ch); }