/*********************************************************************************
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 ;
}