This commit is contained in:
mibi88 2022-11-01 13:00:39 +01:00
parent 239f9136ec
commit 6ebedf3bbe
9 changed files with 348 additions and 0 deletions

41
CMakeLists.txt Normal file
View File

@ -0,0 +1,41 @@
# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the
# toolchain file and module path of the fxSDK
cmake_minimum_required(VERSION 3.15)
project(MyAddin)
include(GenerateG1A)
include(GenerateG3A)
include(Fxconv)
find_package(Gint 2.9 REQUIRED)
set(SOURCES
src/main.c
# ...
)
# Shared assets, fx-9860G-only assets and fx-CG-50-only assets
set(ASSETS
# ...
)
set(ASSETS_fx
assets-fx/example.png
# ...
)
set(ASSETS_cg
assets-cg/example.png
# ...
)
fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA)
add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
target_compile_options(myaddin PRIVATE -Wall -Wextra -Os)
target_link_libraries(myaddin Gint::Gint)
if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G)
generate_g1a(TARGET myaddin OUTPUT "Keydemo.g1a"
NAME "Keydemo" ICON assets-fx/icon.png)
elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
generate_g3a(TARGET myaddin OUTPUT "Keydemo.g3a"
NAME "Keydemo" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png)
endif()

BIN
assets-cg/example.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,3 @@
example.png:
type: bopti-image
name: img_example

BIN
assets-cg/icon-sel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

BIN
assets-cg/icon-uns.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
assets-fx/example.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -0,0 +1,3 @@
example.png:
type: bopti-image
name: img_example

BIN
assets-fx/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

301
src/main.c Normal file
View File

@ -0,0 +1,301 @@
/*
* SuperInput demo - A new way to type text on casio fx calculators !
* Copyright (C) 2022 Mibi88
*
* 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 2 of the License, or
* (at your option) 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 https://www.gnu.org/licenses/.
*/
#include <gint/display.h>
#include <gint/keyboard.h>
#define INSZ 20
#define INSZS1 (INSZ-1)
unsigned char input[INSZ], keyc;
int pos, lenght, shift, alpha, inchar, key;
void shiftstrpartright(int start){
unsigned char c;
unsigned char copy[INSZ];
for(int i=0;i<INSZ;i++){
copy[i] = input[i];
}
for(int i=start;i<INSZS1;i++){
c = copy[i];
input[i+1] = c;
}
}
void shiftstrpartleft(int start){
unsigned char c;
for(int i=start;i<INSZS1;i++){
c = input[i+1];
input[i] = c;
}
input[INSZS1] = ' ';
}
int main(void)
{
for(int i=0;i<INSZ;i++){
input[i] = ' ';
}
pos = 0;
lenght = 0;
shift = 0;
alpha = 1;
key = 0;
clearevents();
int opt = 0xDC;
while(!keydown(KEY_EXIT)){
key = getkey_opt(opt, NULL).key;
inchar = 1;
keyc = ' ';
if(alpha){
if(!shift){
switch(key){
case KEY_SQUARE:
keyc = '\''; break;
case KEY_POWER:
keyc = '^'; break;
case KEY_XOT:
keyc = 'a'; break;
case KEY_LOG:
keyc = 'b'; break;
case KEY_LN:
keyc = 'c'; break;
case KEY_SIN:
keyc = 'd'; break;
case KEY_COS:
keyc = 'e'; break;
case KEY_TAN:
keyc = 'f'; break;
case KEY_FRAC:
keyc = 'g'; break;
case KEY_FD:
keyc = 'h'; break;
case KEY_LEFTP:
keyc = 'i'; break;
case KEY_RIGHTP:
keyc = 'j'; break;
case KEY_COMMA:
keyc = 'k'; break;
case KEY_ARROW:
keyc = 'l'; break;
case KEY_7:
keyc = 'm'; break;
case KEY_8:
keyc = 'n'; break;
case KEY_9:
keyc = 'o'; break;
case KEY_4:
keyc = 'p'; break;
case KEY_5:
keyc = 'q'; break;
case KEY_6:
keyc = 'r'; break;
case KEY_MUL:
keyc = 's'; break;
case KEY_DIV:
keyc = 't'; break;
case KEY_1:
keyc = 'u'; break;
case KEY_2:
keyc = 'v'; break;
case KEY_3:
keyc = 'w'; break;
case KEY_ADD:
keyc = 'x'; break;
case KEY_SUB:
keyc = 'y'; break;
case KEY_0:
keyc = 'z'; break;
case KEY_DOT:
keyc = ' '; break;
case KEY_EXP:
keyc = '"'; break;
case KEY_NEG:
keyc = '_'; break;
case KEY_EXE:
keyc = '\n'; break;
default:
inchar = 0; break;
};
}else{
switch(key){
case KEY_SQUARE:
keyc = '!'; break;
case KEY_POWER:
keyc = '?'; break;
case KEY_XOT:
keyc = 'A'; break;
case KEY_LOG:
keyc = 'B'; break;
case KEY_LN:
keyc = 'C'; break;
case KEY_SIN:
keyc = 'D'; break;
case KEY_COS:
keyc = 'E'; break;
case KEY_TAN:
keyc = 'F'; break;
case KEY_FRAC:
keyc = 'G'; break;
case KEY_FD:
keyc = 'H'; break;
case KEY_LEFTP:
keyc = 'I'; break;
case KEY_RIGHTP:
keyc = 'J'; break;
case KEY_COMMA:
keyc = 'K'; break;
case KEY_ARROW:
keyc = 'L'; break;
case KEY_7:
keyc = 'M'; break;
case KEY_8:
keyc = 'N'; break;
case KEY_9:
keyc = 'O'; break;
case KEY_4:
keyc = 'P'; break;
case KEY_5:
keyc = 'Q'; break;
case KEY_6:
keyc = 'R'; break;
case KEY_MUL:
keyc = 'S'; break;
case KEY_DIV:
keyc = 'T'; break;
case KEY_1:
keyc = 'U'; break;
case KEY_2:
keyc = 'V'; break;
case KEY_3:
keyc = 'W'; break;
case KEY_ADD:
keyc = 'X'; break;
case KEY_SUB:
keyc = 'Y'; break;
case KEY_0:
keyc = 'Z'; break;
case KEY_DOT:
keyc = ' '; break;
case KEY_EXP:
keyc = '#'; break;
case KEY_NEG:
keyc = '$'; break;
case KEY_EXE:
keyc = '\n'; break;
default:
inchar = 0; break;
};
}
}else{
switch(key){
case KEY_SQUARE:
keyc = '%'; break;
case KEY_POWER:
keyc = '\\'; break;
case KEY_XOT:
keyc = '{'; break;
case KEY_LOG:
keyc = '}'; break;
case KEY_LN:
keyc = '['; break;
case KEY_SIN:
keyc = ']'; break;
case KEY_COS:
keyc = '~'; break;
case KEY_TAN:
keyc = '@'; break;
case KEY_FRAC:
keyc = '<'; break;
case KEY_FD:
keyc = '>'; break;
case KEY_LEFTP:
keyc = '('; break;
case KEY_RIGHTP:
keyc = ')'; break;
case KEY_COMMA:
keyc = ','; break;
case KEY_ARROW:
keyc = '='; break;
case KEY_7:
keyc = '7'; break;
case KEY_8:
keyc = '8'; break;
case KEY_9:
keyc = '9'; break;
case KEY_4:
keyc = '4'; break;
case KEY_5:
keyc = '5'; break;
case KEY_6:
keyc = '6'; break;
case KEY_MUL:
keyc = '*'; break;
case KEY_DIV:
keyc = '/'; break;
case KEY_1:
keyc = '1'; break;
case KEY_2:
keyc = '2'; break;
case KEY_3:
keyc = '3'; break;
case KEY_ADD:
keyc = '+'; break;
case KEY_SUB:
keyc = '-'; break;
case KEY_0:
keyc = '0'; break;
case KEY_DOT:
keyc = '.'; break;
case KEY_EXP:
keyc = ';'; break;
case KEY_NEG:
keyc = '|'; break;
case KEY_EXE:
keyc = '\n'; break;
default:
inchar = 0; break;
};
}
if(inchar && lenght < INSZS1){
shiftstrpartright(pos);
input[pos] = keyc;
pos++;
lenght++;
}
if(key == KEY_LEFT && pos > 0){
pos--;
}else if(key == KEY_RIGHT && pos < lenght){
pos++;
}
if(key == KEY_SHIFT){
shift = !shift;
}else if(key == KEY_ALPHA){
alpha = !alpha;
}else if(key == KEY_DEL && pos > 0){
shiftstrpartleft(pos-1);
lenght--;
pos--;
}
dclear(C_WHITE);
dtext(1, 1, C_BLACK, (char*)input);
dline(pos*6, 1, pos*6, 7, C_BLACK);
dupdate();
clearevents();
}
return 1;
}