/********************************************************************************* source of "nwriter", a basic text-editor for the Nspire; last modified 21.04.11 Copyright (C) 2011 Olivier Thill alias shrear This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************************/ #include #include "key.h" #include "store.h" #include "screen.h" int key_pressed(t_key is_pressed) { if ( isKeyPressed(is_pressed) ) { while ( isKeyPressed(is_pressed) ) { //loop to prevent more than one reactions per keypress } return 1 ; } else return 0 ; } int set_configuration(char* file_path, char* font_path, char* font, int* font_meta, char* font_description, char* screen_buffer, char screen_color) { //local variables int index ; while ( !key_pressed(KEY_NSPIRE_ESC) ) { memset(screen_buffer, screen_color, SCREEN_HEIGHT*SCREEN_WIDTH) ; //display current configuration write_string("to change .txt prees SHIFT\r\nto change .font press VAR", font, font_meta, screen_buffer, screen_color, 10, 20, 1, 1) ; write_string("Current .txt is:", font, font_meta, screen_buffer, screen_color, 50, 20, 1, 1) ; write_string(file_path, font, font_meta, screen_buffer, screen_color, 63, 20, 1, 1) ; write_string("Current .font is:", font, font_meta, screen_buffer, screen_color, 80, 20, 1, 1) ; write_string(font_path, font, font_meta, screen_buffer, screen_color, 93, 20, 1, 1) ; write_string(font_description, font, font_meta, screen_buffer, screen_color, 106, 20, 1, 1) ; display_buffer(screen_buffer) ; if ( any_key_pressed() ) memset(screen_buffer, screen_color, SCREEN_HEIGHT*SCREEN_WIDTH) ; //change .txt path if ( key_pressed(KEY_NSPIRE_SHIFT) || key_pressed(KEY_NSPIRE_CAPS) ) while ( !key_pressed(KEY_NSPIRE_ENTER) ) { memset(screen_buffer, screen_color, SCREEN_HEIGHT*SCREEN_WIDTH) ; write_string("Current .txt is:", font, font_meta, screen_buffer, screen_color, 10, 20, 1, 1) ; write_string(file_path, font, font_meta, screen_buffer, screen_color, 23, 20, 1, 1) ; display_buffer(screen_buffer) ; index = strlen ( file_path ); //delete last char if ( key_pressed ( KEY_NSPIRE_DEL ) ) { if ( index != 0 ) index-- ; if ( file_path[index] != 0 ) file_path[index] = 0 ; } //write char index = write_key(file_path, index) ; } //change .font path else if ( key_pressed(KEY_NSPIRE_VAR) ) { while ( !key_pressed(KEY_NSPIRE_ENTER) ) { memset(screen_buffer, screen_color, SCREEN_HEIGHT*SCREEN_WIDTH) ; write_string("Current .font is:", font, font_meta, screen_buffer, screen_color, 10, 20, 1, 1) ; write_string(font_path, font, font_meta, screen_buffer, screen_color, 23, 20, 1, 1) ; display_buffer(screen_buffer) ; index = strlen ( font_path ); //delete last char if ( key_pressed ( KEY_NSPIRE_DEL ) ) { if ( index != 0 ) index-- ; if ( font_path[index] != 0 ) font_path[index] = 0 ; } //write char index = write_key(font_path, index) ; } return 1 ; } } return 0 ; } int write_key(char* store, int index) { //control characters if ( key_pressed ( KEY_NSPIRE_RET ) ) index = store_char(0x0A, store, index) ; else if ( key_pressed ( KEY_NSPIRE_TAB ) ) index = store_char(0x09, store, index) ; //symbol characters else if ( key_pressed ( KEY_NSPIRE_SPACE ) ) index = store_char(0x20, store, index) ; else if ( key_pressed ( KEY_NSPIRE_LP ) ) index = store_char(0x28, store, index) ; else if ( key_pressed ( KEY_NSPIRE_RP ) ) index = store_char(0x29, store, index) ; else if ( key_pressed ( KEY_NSPIRE_MULTIPLY ) ) index = store_char(0x2A, store, index) ; else if ( key_pressed ( KEY_NSPIRE_PLUS ) ) index = store_char(0x2B, store, index) ; else if ( key_pressed ( KEY_NSPIRE_COMMA ) ) index = store_char(0x2C, store, index) ; else if ( key_pressed ( KEY_NSPIRE_MINUS ) ) index = store_char(0x2D, store, index) ; else if ( key_pressed ( KEY_NSPIRE_PERIOD ) ) index = store_char(0x2E, store, index) ; //numbers else if ( key_pressed ( KEY_NSPIRE_0 ) ) index = store_char(0x30, store, index) ; else if ( key_pressed ( KEY_NSPIRE_1 ) ) index = store_char(0x31, store, index) ; else if ( key_pressed ( KEY_NSPIRE_2 ) ) index = store_char(0x32, store, index) ; else if ( key_pressed ( KEY_NSPIRE_3 ) ) index = store_char(0x33, store, index) ; else if ( key_pressed ( KEY_NSPIRE_4 ) ) index = store_char(0x34, store, index) ; else if ( key_pressed ( KEY_NSPIRE_5 ) ) index = store_char(0x35, store, index) ; else if ( key_pressed ( KEY_NSPIRE_6 ) ) index = store_char(0x36, store, index) ; else if ( key_pressed ( KEY_NSPIRE_7 ) ) index = store_char(0x37, store, index) ; else if ( key_pressed ( KEY_NSPIRE_8 ) ) index = store_char(0x38, store, index) ; else if ( key_pressed ( KEY_NSPIRE_9 ) ) index = store_char(0x39, store, index) ; else if ( key_pressed ( KEY_NSPIRE_DIVIDE ) ) index = store_char(0x3A, store, index) ; //alphabetical characters (lower case) else if ( !isKeyPressed ( KEY_NSPIRE_SHIFT ) && !isKeyPressed ( KEY_NSPIRE_CAPS ) ) { if ( key_pressed ( KEY_NSPIRE_A ) ) index = store_char(0x61, store, index) ; else if ( key_pressed ( KEY_NSPIRE_B ) ) index = store_char(0x62, store, index) ; else if ( key_pressed ( KEY_NSPIRE_C ) ) index = store_char(0x63, store, index) ; else if ( key_pressed ( KEY_NSPIRE_D ) ) index = store_char(0x64, store, index) ; else if ( key_pressed ( KEY_NSPIRE_E ) ) index = store_char(0x65, store, index) ; else if ( key_pressed ( KEY_NSPIRE_F ) ) index = store_char(0x66, store, index) ; else if ( key_pressed ( KEY_NSPIRE_G ) ) index = store_char(0x67, store, index) ; else if ( key_pressed ( KEY_NSPIRE_H ) ) index = store_char(0x68, store, index) ; else if ( key_pressed ( KEY_NSPIRE_I ) ) index = store_char(0x69, store, index) ; else if ( key_pressed ( KEY_NSPIRE_J ) ) index = store_char(0x6A, store, index) ; else if ( key_pressed ( KEY_NSPIRE_K ) ) index = store_char(0x6B, store, index) ; else if ( key_pressed ( KEY_NSPIRE_L ) ) index = store_char(0x6C, store, index) ; else if ( key_pressed ( KEY_NSPIRE_M ) ) index = store_char(0x6D, store, index) ; else if ( key_pressed ( KEY_NSPIRE_N ) ) index = store_char(0x6E, store, index) ; else if ( key_pressed ( KEY_NSPIRE_O ) ) index = store_char(0x6F, store, index) ; else if ( key_pressed ( KEY_NSPIRE_P ) ) index = store_char(0x70, store, index) ; else if ( key_pressed ( KEY_NSPIRE_Q ) ) index = store_char(0x71, store, index) ; else if ( key_pressed ( KEY_NSPIRE_R ) ) index = store_char(0x72, store, index) ; else if ( key_pressed ( KEY_NSPIRE_S ) ) index = store_char(0x73, store, index) ; else if ( key_pressed ( KEY_NSPIRE_T ) ) index = store_char(0x74, store, index) ; else if ( key_pressed ( KEY_NSPIRE_U ) ) index = store_char(0x75, store, index) ; else if ( key_pressed ( KEY_NSPIRE_V ) ) index = store_char(0x76, store, index) ; else if ( key_pressed ( KEY_NSPIRE_W ) ) index = store_char(0x77, store, index) ; else if ( key_pressed ( KEY_NSPIRE_X ) ) index = store_char(0x78, store, index) ; else if ( key_pressed ( KEY_NSPIRE_Y ) ) index = store_char(0x79, store, index) ; else if ( key_pressed ( KEY_NSPIRE_Z ) ) index = store_char(0x7A, store, index) ; } //alphabetical characters (upper case) else if ( isKeyPressed ( KEY_NSPIRE_SHIFT ) || isKeyPressed ( KEY_NSPIRE_CAPS ) ) { if ( key_pressed ( KEY_NSPIRE_A ) ) index = store_char(0x41, store, index) ; else if ( key_pressed ( KEY_NSPIRE_B ) ) index = store_char(0x42, store, index) ; else if ( key_pressed ( KEY_NSPIRE_C ) ) index = store_char(0x43, store, index) ; else if ( key_pressed ( KEY_NSPIRE_D ) ) index = store_char(0x44, store, index) ; else if ( key_pressed ( KEY_NSPIRE_E ) ) index = store_char(0x45, store, index) ; else if ( key_pressed ( KEY_NSPIRE_F ) ) index = store_char(0x46, store, index) ; else if ( key_pressed ( KEY_NSPIRE_G ) ) index = store_char(0x47, store, index) ; else if ( key_pressed ( KEY_NSPIRE_H ) ) index = store_char(0x48, store, index) ; else if ( key_pressed ( KEY_NSPIRE_I ) ) index = store_char(0x49, store, index) ; else if ( key_pressed ( KEY_NSPIRE_J ) ) index = store_char(0x4A, store, index) ; else if ( key_pressed ( KEY_NSPIRE_K ) ) index = store_char(0x4B, store, index) ; else if ( key_pressed ( KEY_NSPIRE_L ) ) index = store_char(0x4C, store, index) ; else if ( key_pressed ( KEY_NSPIRE_M ) ) index = store_char(0x4D, store, index) ; else if ( key_pressed ( KEY_NSPIRE_N ) ) index = store_char(0x4E, store, index) ; else if ( key_pressed ( KEY_NSPIRE_O ) ) index = store_char(0x4F, store, index) ; else if ( key_pressed ( KEY_NSPIRE_P ) ) index = store_char(0x50, store, index) ; else if ( key_pressed ( KEY_NSPIRE_Q ) ) index = store_char(0x51, store, index) ; else if ( key_pressed ( KEY_NSPIRE_R ) ) index = store_char(0x52, store, index) ; else if ( key_pressed ( KEY_NSPIRE_S ) ) index = store_char(0x53, store, index) ; else if ( key_pressed ( KEY_NSPIRE_T ) ) index = store_char(0x54, store, index) ; else if ( key_pressed ( KEY_NSPIRE_U ) ) index = store_char(0x55, store, index) ; else if ( key_pressed ( KEY_NSPIRE_V ) ) index = store_char(0x56, store, index) ; else if ( key_pressed ( KEY_NSPIRE_W ) ) index = store_char(0x57, store, index) ; else if ( key_pressed ( KEY_NSPIRE_X ) ) index = store_char(0x58, store, index) ; else if ( key_pressed ( KEY_NSPIRE_Y ) ) index = store_char(0x59, store, index) ; else if ( key_pressed ( KEY_NSPIRE_Z ) ) index = store_char(0x5A, store, index) ; } //hex input if ( isKeyPressed ( KEY_NSPIRE_NEGATIVE ) ) { //local variable char hex_temp = write_hex() ; if ( hex_temp ) index = store_char(hex_temp, store, index) ; } return index ; } char write_hex(void) { //local variables char hex_char = 0 ; char hex_char_temp = 0; char hex_control = 0 ; //wait for two digits being pressed while ( isKeyPressed(KEY_NSPIRE_NEGATIVE) && !hex_control ) { if ( key_pressed(KEY_NSPIRE_0) ) hex_control++ ; else if ( key_pressed(KEY_NSPIRE_1) ) hex_char = 0x10 ; else if ( key_pressed(KEY_NSPIRE_2) ) hex_char = 0x20 ; else if ( key_pressed(KEY_NSPIRE_3) ) hex_char = 0x30 ; else if ( key_pressed(KEY_NSPIRE_4) ) hex_char = 0x40 ; else if ( key_pressed(KEY_NSPIRE_5) ) hex_char = 0x50 ; else if ( key_pressed(KEY_NSPIRE_6) ) hex_char = 0x60 ; else if ( key_pressed(KEY_NSPIRE_7) ) hex_char = 0x70 ; else if ( key_pressed(KEY_NSPIRE_8) ) hex_char = 0x80 ; else if ( key_pressed(KEY_NSPIRE_9) ) hex_char = 0x90 ; else if ( key_pressed(KEY_NSPIRE_A) ) hex_char = 0xA0 ; else if ( key_pressed(KEY_NSPIRE_B) ) hex_char = 0xB0 ; else if ( key_pressed(KEY_NSPIRE_C) ) hex_char = 0xC0 ; else if ( key_pressed(KEY_NSPIRE_D) ) hex_char = 0xD0 ; else if ( key_pressed(KEY_NSPIRE_E) ) hex_char = 0xE0 ; else if ( key_pressed(KEY_NSPIRE_F) ) hex_char = 0xF0 ; if ( hex_char ) hex_control++ ; } hex_control = 0 ; hex_char_temp = hex_char ; while ( isKeyPressed(KEY_NSPIRE_NEGATIVE) && !hex_control ) { if ( key_pressed(KEY_NSPIRE_0) ) hex_control++ ; else if ( key_pressed(KEY_NSPIRE_1) ) hex_char += 0x1 ; else if ( key_pressed(KEY_NSPIRE_2) ) hex_char += 0x2 ; else if ( key_pressed(KEY_NSPIRE_3) ) hex_char += 0x3 ; else if ( key_pressed(KEY_NSPIRE_4) ) hex_char += 0x4 ; else if ( key_pressed(KEY_NSPIRE_5) ) hex_char += 0x5 ; else if ( key_pressed(KEY_NSPIRE_6) ) hex_char += 0x6 ; else if ( key_pressed(KEY_NSPIRE_7) ) hex_char += 0x7 ; else if ( key_pressed(KEY_NSPIRE_8) ) hex_char += 0x8 ; else if ( key_pressed(KEY_NSPIRE_9) ) hex_char += 0x9 ; else if ( key_pressed(KEY_NSPIRE_A) ) hex_char += 0xA ; else if ( key_pressed(KEY_NSPIRE_B) ) hex_char += 0xB ; else if ( key_pressed(KEY_NSPIRE_C) ) hex_char += 0xC ; else if ( key_pressed(KEY_NSPIRE_D) ) hex_char += 0xD ; else if ( key_pressed(KEY_NSPIRE_E) ) hex_char += 0xE ; else if ( key_pressed(KEY_NSPIRE_F) ) hex_char += 0xF ; if ( hex_char != hex_char_temp ) hex_control++ ; } //return the char or zero if NEGATIVE got released before two digits are pressed if ( hex_control ) return hex_char ; else return 0 ; }