├── .gitignore ├── .idea ├── .name ├── codeStyleSettings.xml ├── compiler.xml ├── dictionaries │ └── elias.xml ├── encodings.xml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── libraries │ └── guava_17_0.xml ├── misc.xml ├── modules.xml ├── runConfigurations │ └── Test.xml ├── scopes │ └── scope_settings.xml ├── uiDesigner.xml └── vcs.xml ├── build-tools ├── .dir-locals.el ├── Makefile ├── android.cc ├── android.hh ├── eval_expression.cc ├── generate_headers.sh ├── java_ostream.cc ├── java_ostream.hh ├── org_gnu_apl_Native.h ├── utils.cc └── utils.hh ├── client ├── AndroidManifest.xml ├── ant.properties ├── assets │ ├── files │ │ ├── etc │ │ │ └── gnu-apl.d │ │ │ │ └── preferences │ │ └── lib │ │ │ └── apl │ │ │ ├── wslib3 │ │ │ └── meta.apl │ │ │ ├── wslib4 │ │ │ └── dummy.apl │ │ │ └── wslib5 │ │ │ └── HTML.apl │ └── fonts │ │ ├── FreeMono.ttf │ │ ├── FreeMonoBold.ttf │ │ ├── FreeMonoBoldOblique.ttf │ │ └── FreeMonoOblique.ttf ├── build.xml ├── client.iml ├── gen │ └── com │ │ └── dhsdevelopments │ │ └── aplandroid │ │ ├── BuildConfig.java │ │ ├── Manifest.java │ │ └── R.java ├── libs │ └── armeabi │ │ └── libapl.so ├── local.properties ├── proguard-project.txt ├── project.properties ├── res │ ├── drawable-hdpi │ │ ├── ic_launcher.png │ │ ├── icon_en_gb.png │ │ ├── icon_en_us.png │ │ ├── sym_keyboard_delete.png │ │ ├── sym_keyboard_done.png │ │ ├── sym_keyboard_return.png │ │ ├── sym_keyboard_search.png │ │ ├── sym_keyboard_shift.png │ │ └── sym_keyboard_space.png │ ├── drawable-ldpi │ │ └── ic_launcher.png │ ├── drawable-mdpi │ │ ├── ic_launcher.png │ │ ├── icon_en_gb.png │ │ ├── icon_en_us.png │ │ ├── sym_keyboard_delete.png │ │ ├── sym_keyboard_done.png │ │ ├── sym_keyboard_return.png │ │ ├── sym_keyboard_search.png │ │ ├── sym_keyboard_shift.png │ │ └── sym_keyboard_space.png │ ├── drawable-xhdpi │ │ └── ic_launcher.png │ ├── layout │ │ ├── apl_input.xml │ │ ├── input.xml │ │ ├── interpreter.xml │ │ ├── interpreter_log.xml │ │ └── result_text.xml │ ├── menu │ │ └── main_activity_actions.xml │ ├── values-land │ │ └── dimens.xml │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ └── strings.xml │ └── xml │ │ ├── ime_preferences.xml │ │ ├── keyboard_layout.xml │ │ ├── method.xml │ │ ├── qwerty.xml │ │ ├── symbols.xml │ │ ├── symbols_apl.xml │ │ ├── symbols_apl_shift.xml │ │ └── symbols_shift.xml └── src │ └── com │ └── dhsdevelopments │ └── aplandroid │ ├── AplAndroidApp.java │ ├── AplNative.java │ ├── EvalRequest.java │ ├── Installer.java │ ├── Interpreter.java │ ├── InterpreterFragment.java │ ├── Log.java │ ├── ResultListAdapter.java │ ├── ResultListEntry.java │ ├── input1 │ ├── AplInput.java │ ├── AplKeyboardView.java │ └── CustomKeyboard.java │ └── input2 │ ├── CandidateView.java │ ├── ImePreferences.java │ ├── InputMethodSettingsFragment.java │ ├── InputMethodSettingsImpl.java │ ├── InputMethodSettingsInterface.java │ ├── LatinKeyboard.java │ ├── LatinKeyboardView.java │ ├── PaintOverride.java │ └── SoftKeyboard.java ├── gnu-apl-api ├── gnu-apl-api.iml └── src │ └── org │ └── gnu │ └── apl │ ├── AplException.java │ ├── AplExecException.java │ ├── AplValue.java │ ├── Native.java │ └── Test.java ├── lib └── guava-17.0.jar └── notes.txt /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | /.idea/workspace.xml 3 | *~ 4 | *.o 5 | /build-tools/libapl.dylib 6 | /build-tools/libapl.so 7 | /build-tools/.apl.history 8 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | android-gnu-apl -------------------------------------------------------------------------------- /.idea/codeStyleSettings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /.idea/dictionaries/elias.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aplandroid 5 | dest 6 | eval 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 22 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/libraries/guava_17_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/runConfigurations/Test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 24 | -------------------------------------------------------------------------------- /.idea/scopes/scope_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/uiDesigner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /build-tools/.dir-locals.el: -------------------------------------------------------------------------------- 1 | ((c++-mode . ((eval . (progn 2 | (em-append-include-dirs (append (list (expand-file-name "~/src/apl-android/src")) 3 | (if (eq system-type 'darwin) 4 | (list "/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/include" 5 | "/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/include/darwin") 6 | (list "/usr/local/jdk1.7.0_45/include" 7 | "/usr/local/jdk1.7.0_45/include/linux")))) 8 | (when (eq system-type 'darwin) 9 | (em-append-include-dirs (list "/usr/local/Cellar/gettext/0.18.3.2/include"))) 10 | (flycheck-mode 1) 11 | (company-mode 1)))))) 12 | -------------------------------------------------------------------------------- /build-tools/Makefile: -------------------------------------------------------------------------------- 1 | OBJS = android.o eval_expression.o utils.o java_ostream.o 2 | 3 | GNU_APL_SRC = $(HOME)/src/apl-android 4 | 5 | UNAME = $(shell uname) 6 | ifeq ($(UNAME),Darwin) 7 | JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home 8 | JAVA_INCLUDES = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/darwin 9 | else 10 | JAVA_HOME = /usr/local/jdk1.7.0_45 11 | JAVA_INCLUDES = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux 12 | endif 13 | 14 | CROSSBUILD = $(shell sh -c "cat $(GNU_APL_SRC)/config.status | grep androideabi >/dev/null && echo androideabi") 15 | ifeq ($(CROSSBUILD),androideabi) 16 | CC=arm-linux-androideabi-gcc 17 | CXX=arm-linux-androideabi-g++ 18 | LIBRARY_EXT = so 19 | SHARED_FLAGS = -shared 20 | APL_LIBRARIES = -ldl -lm -lgomp -llog 21 | else 22 | ifeq ($(UNAME),Darwin) 23 | LIBRARY_EXT = dylib 24 | SHARED_FLAGS = -dynamiclib -Wl,-undefined,dynamic_lookup 25 | APL_LIBRARIES = -lreadline -ldl -lncurses -lpthread -lm -lblas -llapack -lcurses 26 | else 27 | LIBRARY_EXT = so 28 | SHARED_FLAGS = -shared 29 | APL_LIBRARIES = -lreadline -ldl -lncurses -lpthread -lrt -lm -lgomp -lblas -llapack -lcurses -lnsl 30 | endif 31 | endif 32 | 33 | LIBNAME = libapl.$(LIBRARY_EXT) 34 | 35 | CXXFLAGS = -g -Wall -fPIC $(JAVA_INCLUDES) -I$(GNU_APL_SRC)/src 36 | 37 | all: $(LIBNAME) 38 | 39 | $(LIBNAME): $(OBJS) 40 | $(CXX) -g -fPIC -rdynamic $(SHARED_FLAGS) -o $(LIBNAME) $(GNU_APL_SRC)/src/*.o $(OBJS) $(APL_LIBRARIES) 41 | 42 | copylib: $(LIBNAME) 43 | cp $(LIBNAME) ../client/libs/armeabi/$(LIBNAME) 44 | 45 | clean: 46 | rm -f $(OBJS) $(LIBNAME) 47 | -------------------------------------------------------------------------------- /build-tools/android.cc: -------------------------------------------------------------------------------- 1 | //#include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include "android.hh" 8 | #include "utils.hh" 9 | #include "java_ostream.hh" 10 | 11 | #include "org_gnu_apl_Native.h" 12 | 13 | #include "Command.hh" 14 | 15 | static jmethodID append; 16 | 17 | template > 18 | class JavaAplStreambuf : public std::basic_streambuf 19 | { 20 | public: 21 | JavaAplStreambuf() : env( NULL ), writer( NULL ) {} 22 | void set_writer( JNIEnv *env_in, jobject writer_in ) { env = env_in; writer = writer_in; } 23 | void unset_writer( void ) { env = NULL; writer = NULL; } 24 | 25 | protected: 26 | void put_buffer( const typename traits::char_type *s, std::streamsize n ) { 27 | if( env != NULL && writer != NULL ) { 28 | for( int i = 0 ; i < n ; i++ ) { 29 | buf.push_back( s[i] ); 30 | } 31 | int end = buf.size(); 32 | // At this point we might have a broken UTF-8 sequence at the end 33 | if( (buf[buf.size() - 1] & 0x80) == 0x80 ) { 34 | // OK, last character is part of a multibyte sequence 35 | // Find the start of the sequence 36 | int p = end - 1; 37 | while( p > 0 && (buf[p] & 0xC0) != 0xC0 ) { 38 | p--; 39 | } 40 | if( (buf[p] & 0xC0) == 0xC0 ) { 41 | // p now points to the start of the final multibyte sequence 42 | // Check if this sequence is broken 43 | int num_ones = 0; 44 | int v = static_cast(buf[p]) & 0xFF; 45 | while( v & 0x80 ) { 46 | v <<= 1; 47 | num_ones++; 48 | } 49 | // v now contains the number of left-most bits 50 | // this number is equal to the size of the multibyte sequence 51 | if( num_ones > end - p ) { 52 | end = p; 53 | } 54 | } 55 | else { 56 | end = p; 57 | } 58 | } 59 | 60 | if( end > 0 ) { 61 | char result_buf[end + 1]; 62 | for( int i = 0 ; i < end ; i++ ) { 63 | result_buf[i] = buf[i]; 64 | } 65 | result_buf[end] = 0; 66 | 67 | jstring buf_javastring = env->NewStringUTF( result_buf ); 68 | if( buf_javastring == NULL ) { 69 | throw new JavaExceptionThrown( "Error creating string" ); 70 | } 71 | 72 | jobject ret = env->CallObjectMethod( writer, append, buf_javastring ); 73 | if( env->ExceptionCheck() ) { 74 | env->DeleteLocalRef( buf_javastring ); 75 | throw JavaExceptionThrown( "Error writing string" ); 76 | } 77 | 78 | buf.erase( buf.begin(), buf.begin() + end ); 79 | 80 | env->DeleteLocalRef( ret ); 81 | env->DeleteLocalRef( buf_javastring ); 82 | } 83 | } 84 | } 85 | 86 | typename traits::int_type overflow( typename traits::int_type c ) { 87 | typename traits::char_type buf[2]; 88 | buf[0] = c; 89 | buf[1] = 0; 90 | put_buffer( buf, 1 ); 91 | return traits::not_eof( c ); 92 | } 93 | 94 | std::streamsize xsputn( const typename traits::char_type *s, std::streamsize n ) { 95 | put_buffer( s, n ); 96 | return n; 97 | } 98 | 99 | JNIEnv *env; 100 | jobject writer; 101 | std::vector buf; 102 | }; 103 | 104 | JavaAplStreambuf cin_streambuf; 105 | JavaAplStreambuf cout_streambuf; 106 | JavaAplStreambuf cerr_streambuf; 107 | JavaAplStreambuf uerr_streambuf; 108 | 109 | std::ostream CIN( &cin_streambuf ); 110 | std::ostream COUT( &cout_streambuf ); 111 | std::ostream CERR( &cerr_streambuf ); 112 | std::ostream UERR( &uerr_streambuf ); 113 | 114 | int init_apl( int argc, const char *argv[] ); 115 | 116 | JNIEXPORT jint JNICALL Java_org_gnu_apl_Native_init( JNIEnv *env, jclass, jstring path_jstring ) 117 | { 118 | const char *argv[] = { "apl", "--silent", "--rawCIN", NULL }; 119 | 120 | JniStringWrapper path_string( env, path_jstring ); 121 | 122 | setenv( "APL_LIB_ROOT", path_string.get_string(), 1 ); 123 | 124 | jclass javaIoWriterCl = env->FindClass( "java/io/Writer" ); 125 | if( javaIoWriterCl == NULL ) { 126 | return 0; 127 | } 128 | 129 | append = env->GetMethodID( javaIoWriterCl, "append", "(Ljava/lang/CharSequence;)Ljava/io/Writer;"); 130 | if( append == NULL ) { 131 | return 0; 132 | } 133 | 134 | int ret = init_apl( 3, argv ); 135 | return ret; 136 | } 137 | 138 | JNIEXPORT void JNICALL Java_org_gnu_apl_Native_evalWithIo( JNIEnv *env, jclass, 139 | jstring expr, 140 | jobject cin, 141 | jobject cout, 142 | jobject cerr, 143 | jobject uerr ) 144 | { 145 | cin_streambuf.set_writer( env, cin ); 146 | cout_streambuf.set_writer( env, cout ); 147 | cerr_streambuf.set_writer( env, cerr ); 148 | uerr_streambuf.set_writer( env, uerr ); 149 | 150 | JniStringWrapper expr_java_str( env, expr ); 151 | UTF8_string utf8( expr_java_str.get_string() ); 152 | UCS_string expr_ucs( utf8 ); 153 | 154 | try { 155 | Command::process_line( expr_ucs ); 156 | } 157 | catch( JavaExceptionThrown &e ) { 158 | // Exception is already set to the correct value 159 | } 160 | catch( ErrorWithComment &e ) { 161 | jclass exceptionCl = env->FindClass( "org/gnu/apl/AplException" ); 162 | if( exceptionCl != NULL ) { 163 | env->ThrowNew( exceptionCl, e.get_message().c_str() ); 164 | } 165 | } 166 | 167 | cin_streambuf.unset_writer(); 168 | cout_streambuf.unset_writer(); 169 | cerr_streambuf.unset_writer(); 170 | uerr_streambuf.unset_writer(); 171 | } 172 | -------------------------------------------------------------------------------- /build-tools/android.hh: -------------------------------------------------------------------------------- 1 | #ifndef ANDROID_HH 2 | #define ANDROID_HH 3 | 4 | #pragma GCC diagnostic push 5 | #pragma GCC diagnostic ignored "-Wunknown-pragmas" 6 | #pragma GCC diagnostic ignored "-Wpragmas" 7 | #pragma GCC diagnostic ignored "-Wunused-variable" 8 | #pragma GCC diagnostic ignored "-Wsign-compare" 9 | #pragma GCC diagnostic ignored "-Wreturn-type" 10 | #pragma GCC diagnostic ignored "-Wparentheses" 11 | #pragma GCC diagnostic ignored "-Wreorder" 12 | #pragma GCC diagnostic ignored "-Wmismatched-tags" 13 | #pragma GCC diagnostic ignored "-Woverloaded-virtual" 14 | #include "Native_interface.hh" 15 | #include "Executable.hh" 16 | #include "IndexExpr.hh" 17 | #include "main.hh" 18 | #pragma GCC diagnostic pop 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /build-tools/eval_expression.cc: -------------------------------------------------------------------------------- 1 | #include "android.hh" 2 | #include "utils.hh" 3 | 4 | #include "org_gnu_apl_Native.h" 5 | 6 | JNIEXPORT jobject JNICALL Java_org_gnu_apl_Native_evalExpression( JNIEnv *env, jclass cl, jstring expr ) 7 | { 8 | JniStringWrapper s( env, expr ); 9 | 10 | Executable *statements = 0; 11 | try { 12 | statements = StatementList::fix( s.get_string(), LOC ); 13 | } 14 | catch( Error err ) { 15 | jclass execptionCl = env->FindClass( "org/gnu/apl/AplExecException" ); 16 | if( execptionCl == NULL ) { 17 | return NULL; 18 | } 19 | jmethodID constructor = env->GetMethodID( execptionCl, "", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" ); 20 | if( constructor == NULL ) { 21 | return NULL; 22 | } 23 | jstring line1 = env->NewStringUTF( UTF8_string( err.get_error_line_1() ).c_str() ); 24 | jstring line2 = env->NewStringUTF( UTF8_string( err.get_error_line_2() ).c_str() ); 25 | jstring line3 = env->NewStringUTF( UTF8_string( err.get_error_line_3() ).c_str() ); 26 | jobject ex = env->NewObject( execptionCl, constructor, line1, line2, line3 ); 27 | if( ex != NULL ) { 28 | env->Throw( (jthrowable)ex ); 29 | } 30 | return NULL; 31 | } 32 | 33 | if( statements == NULL ) { 34 | throw_apl_exception( env, "Parse error" ); 35 | return NULL; 36 | } 37 | 38 | // Section grabbed from Command.cc 39 | { 40 | const Token_string & body = statements->get_body(); 41 | if( body.size() == 3 42 | && body[0].get_tag() == TOK_ESCAPE 43 | && body[1].get_Class() == TC_END 44 | && body[2].get_tag() == TOK_RETURN_STATS ) 45 | { 46 | delete statements; 47 | 48 | // remove all SI entries up to (including) the next immediate 49 | // execution context 50 | // 51 | for(bool goon = true ; goon ; ) { 52 | StateIndicator * si = Workspace::SI_top(); 53 | if( si == 0 ) { 54 | break; // SI empty 55 | } 56 | 57 | const Executable * exec = si->get_executable(); 58 | Assert(exec); 59 | goon = exec->get_parse_mode() != PM_STATEMENT_LIST; 60 | si->escape(); // pop local vars of user defined functions 61 | Workspace::pop_SI(LOC); 62 | } 63 | // TODO: is null the right thing to return at this point? 64 | return NULL; 65 | } 66 | } 67 | 68 | Workspace::push_SI(statements, LOC); 69 | 70 | for (;;) { 71 | // 72 | // NOTE that the entire SI may change while executing this loop. 73 | // We should therefore avoid references to SI entries. 74 | // 75 | Token token = Workspace::SI_top()->get_executable()->execute_body(); 76 | 77 | // Q(token) 78 | 79 | // start over if execution has pushed a new context 80 | // 81 | if (token.get_tag() == TOK_SI_PUSHED) { 82 | continue; 83 | } 84 | 85 | // maybe call EOC handler and repeat if true returned 86 | // 87 | check_EOC: 88 | if (Workspace::SI_top()->call_eoc_handler(token)) { 89 | continue; 90 | } 91 | 92 | // the far most frequent cases are TC_VALUE and TOK_VOID 93 | // so we handle them first. 94 | // 95 | if (token.get_Class() == TC_VALUE || token.get_tag() == TOK_VOID ) { 96 | if (Workspace::SI_top()->get_executable()->get_parse_mode() == PM_STATEMENT_LIST) { 97 | if (attention_raised) { 98 | attention_raised = false; 99 | interrupt_raised = false; 100 | ATTENTION; 101 | } 102 | 103 | break; // will return to calling context 104 | } 105 | 106 | Workspace::pop_SI(LOC); 107 | 108 | // we are back in the calling SI. There should be a TOK_SI_PUSHED 109 | // token at the top of stack. Replace it with the result from 110 | // the called (just poped) SI. 111 | // 112 | { 113 | Prefix & prefix = 114 | Workspace::SI_top()->get_prefix(); 115 | Assert(prefix.at0().get_tag() == TOK_SI_PUSHED); 116 | 117 | copy_1(prefix.tos().tok, token, LOC); 118 | } 119 | if (attention_raised) { 120 | attention_raised = false; 121 | interrupt_raised = false; 122 | ATTENTION; 123 | } 124 | 125 | continue; 126 | } 127 | 128 | if (token.get_tag() == TOK_BRANCH) { 129 | StateIndicator * si = Workspace::SI_top_fun(); 130 | 131 | if (si == 0) { 132 | Workspace::more_error() = UCS_string( 133 | "branch back into function (→N) without " 134 | "suspended function"); 135 | SYNTAX_ERROR; // →N without function, 136 | } 137 | 138 | // pop contexts above defined function 139 | // 140 | while (si != Workspace::SI_top()) { 141 | Workspace::pop_SI(LOC); 142 | } 143 | 144 | const Function_Line line = Function_Line(token.get_int_val()); 145 | 146 | if (line == Function_Retry) { 147 | si->retry(LOC); 148 | } 149 | else { 150 | si->goon(line, LOC); 151 | } 152 | continue; 153 | } 154 | 155 | if (token.get_tag() == TOK_ESCAPE) { 156 | // remove all SI entries up to (including) the next immediate 157 | // execution context 158 | // 159 | for (bool goon = true ; goon ;) { 160 | StateIndicator * si = Workspace::SI_top(); 161 | if (si == 0) break; // SI empty 162 | 163 | const Executable * exec = si->get_executable(); 164 | Assert(exec); 165 | goon = exec->get_parse_mode() != PM_STATEMENT_LIST; 166 | si->escape(); // pop local vars of user defined functions 167 | Workspace::pop_SI(LOC); 168 | } 169 | return NULL; 170 | 171 | Assert(0 && "not reached"); 172 | } 173 | 174 | if (token.get_tag() == TOK_ERROR) { 175 | // clear attention and interrupt flags 176 | // 177 | attention_raised = false; 178 | interrupt_raised = false; 179 | 180 | // check for safe execution mode. Entries in safe execution mode 181 | // can be far above the current SI entry. The EOC handler will 182 | // unroll the SI stack. 183 | // 184 | for (StateIndicator * si = Workspace::SI_top() ; si ; si = si->get_parent()) { 185 | if (si->get_safe_execution()) { 186 | // pop SI entries above the entry with safe_execution 187 | // 188 | while (Workspace::SI_top() != si) { 189 | Workspace::pop_SI(LOC); 190 | } 191 | 192 | goto check_EOC; 193 | } 194 | } 195 | 196 | Workspace::get_error()->print(CERR); 197 | if (Workspace::SI_top()->get_level() == 0) { 198 | Value::erase_stale(LOC); 199 | IndexExpr::erase_stale(LOC); 200 | } 201 | return NULL; 202 | } 203 | 204 | // we should not come here. 205 | // 206 | Q1(token) Q1(token.get_Class()) Q1(token.get_tag()) FIXME; 207 | } 208 | 209 | // pop the context for the statements 210 | // 211 | Workspace::pop_SI(LOC); 212 | 213 | return NULL; 214 | } 215 | -------------------------------------------------------------------------------- /build-tools/generate_headers.sh: -------------------------------------------------------------------------------- 1 | /usr/local/jdk1.7.0_45/bin/javah -d ../../build-tools org.gnu.apl.Native 2 | -------------------------------------------------------------------------------- /build-tools/java_ostream.cc: -------------------------------------------------------------------------------- 1 | #include "java_ostream.hh" 2 | 3 | #include 4 | 5 | void write_string_to_java_stream( JNIEnv *env, jobject writer, const char *s, std::streamsize n ) 6 | { 7 | char str_buf[n + 1]; 8 | memcpy( str_buf, s, n ); 9 | str_buf[n] = 0; 10 | jstring java_string = env->NewStringUTF( str_buf ); 11 | if( java_string == NULL ) { 12 | throw "Unable to allocate string"; 13 | } 14 | 15 | jclass cl = env->FindClass( "java/io/Writer" ); 16 | if( cl == NULL ) { 17 | throw "foo"; 18 | } 19 | jmethodID append = env->GetMethodID( cl, "append", "(Ljava/lang/CharSequence;)Ljava/io/Writer;" ); 20 | if( append == NULL ) { 21 | throw "bar"; 22 | } 23 | 24 | env->CallObjectMethod( writer, append, java_string ); 25 | if( env->ExceptionCheck() ) { 26 | throw JavaExceptionThrown( "Exception when writing stream" ); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /build-tools/java_ostream.hh: -------------------------------------------------------------------------------- 1 | #ifndef JAVA_OSTREAM_HH 2 | #define JAVA_OSTREAM_HH 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | class ErrorWithComment 11 | { 12 | public: 13 | ErrorWithComment( const std::string &message_in ) : message( message_in ) {} 14 | std::string get_message( void ) { return message; } 15 | 16 | private: 17 | std::string message; 18 | }; 19 | 20 | class JavaExceptionThrown : public ErrorWithComment 21 | { 22 | public: 23 | JavaExceptionThrown( const std::string &message_in ) : ErrorWithComment( message_in ) {} 24 | }; 25 | 26 | void write_string_to_java_stream( JNIEnv *env, jobject writer, const char *s, std::streamsize n ); 27 | 28 | template > 29 | class JavaStreambuf : public std::basic_streambuf 30 | { 31 | protected: 32 | typename traits::int_type overflow( typename traits::int_type c ) { 33 | std::cout << "overflow called" << std::endl; 34 | return traits::not_eof( c ); 35 | } 36 | 37 | std::streamsize xsputn( const char *s, std::streamsize n ) { 38 | write_string_to_java_stream( env, java_writer, s, n ); 39 | return n; 40 | } 41 | 42 | JNIEnv *env; 43 | jobject java_writer; 44 | 45 | public: 46 | void init( JNIEnv *env_in, jobject java_writer_in ) { env = env_in; java_writer = java_writer_in; } 47 | }; 48 | 49 | template > 50 | class BasicJavaOStream : public std::basic_ostream 51 | { 52 | public: 53 | BasicJavaOStream ( JNIEnv *env, jobject java_writer ) 54 | : std::basic_ios( &sbuf ), std::basic_ostream( &sbuf ) { 55 | sbuf.init( env, java_writer ); 56 | } 57 | 58 | private: 59 | JavaStreambuf sbuf; 60 | }; 61 | 62 | typedef BasicJavaOStream JavaOStream; 63 | typedef BasicJavaOStream WJavaOStream; 64 | 65 | #endif 66 | -------------------------------------------------------------------------------- /build-tools/org_gnu_apl_Native.h: -------------------------------------------------------------------------------- 1 | /* DO NOT EDIT THIS FILE - it is machine generated */ 2 | #include 3 | /* Header for class org_gnu_apl_Native */ 4 | 5 | #ifndef _Included_org_gnu_apl_Native 6 | #define _Included_org_gnu_apl_Native 7 | #ifdef __cplusplus 8 | extern "C" { 9 | #endif 10 | /* 11 | * Class: org_gnu_apl_Native 12 | * Method: init 13 | * Signature: (Ljava/lang/String;)I 14 | */ 15 | JNIEXPORT jint JNICALL Java_org_gnu_apl_Native_init 16 | (JNIEnv *, jclass, jstring); 17 | 18 | /* 19 | * Class: org_gnu_apl_Native 20 | * Method: evalExpression 21 | * Signature: (Ljava/lang/String;)Lorg/gnu/apl/AplValue; 22 | */ 23 | JNIEXPORT jobject JNICALL Java_org_gnu_apl_Native_evalExpression 24 | (JNIEnv *, jclass, jstring); 25 | 26 | /* 27 | * Class: org_gnu_apl_Native 28 | * Method: evalWithIo 29 | * Signature: (Ljava/lang/String;Ljava/io/Writer;Ljava/io/Writer;Ljava/io/Writer;Ljava/io/Writer;)V 30 | */ 31 | JNIEXPORT void JNICALL Java_org_gnu_apl_Native_evalWithIo 32 | (JNIEnv *, jclass, jstring, jobject, jobject, jobject, jobject); 33 | 34 | #ifdef __cplusplus 35 | } 36 | #endif 37 | #endif 38 | -------------------------------------------------------------------------------- /build-tools/utils.cc: -------------------------------------------------------------------------------- 1 | #include "utils.hh" 2 | 3 | #include 4 | 5 | void throw_apl_exception( JNIEnv *env, const std::string &message ) 6 | { 7 | jclass exceptionCl = env->FindClass( "org/gnu/apl/AplException" ); 8 | if( exceptionCl != NULL ) { 9 | env->ThrowNew( exceptionCl, message.c_str() ); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /build-tools/utils.hh: -------------------------------------------------------------------------------- 1 | #ifndef UTILS_HH 2 | #define UTILS_HH 3 | 4 | #include "jni.h" 5 | 6 | #include 7 | 8 | class JniStringWrapper 9 | { 10 | public: 11 | JniStringWrapper( JNIEnv *env_in, jstring jnistring_in ) 12 | : env( env_in ), jnistring( jnistring_in ) 13 | { 14 | native_string = env->GetStringUTFChars( jnistring, 0 ); 15 | } 16 | 17 | ~JniStringWrapper() { env->ReleaseStringUTFChars( jnistring, native_string ); } 18 | const char *get_string( void ) { return native_string; } 19 | 20 | private: 21 | JNIEnv *env; 22 | jstring jnistring; 23 | const char *native_string; 24 | }; 25 | 26 | void throw_apl_exception( JNIEnv *env, const std::string &message ); 27 | 28 | #endif 29 | -------------------------------------------------------------------------------- /client/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /client/ant.properties: -------------------------------------------------------------------------------- 1 | # This file is used to override default values used by the Ant build system. 2 | # 3 | # This file must be checked into Version Control Systems, as it is 4 | # integral to the build system of your project. 5 | 6 | # This file is only used by the Ant script. 7 | 8 | # You can use this to override default values such as 9 | # 'source.dir' for the location of your java source folder and 10 | # 'out.dir' for the location of your output folder. 11 | 12 | # You can also use it define how the release builds are signed by declaring 13 | # the following properties: 14 | # 'key.store' for the location of your keystore and 15 | # 'key.alias' for the name of the key to use. 16 | # The password will be asked during the build when you use the 'release' target. 17 | 18 | -------------------------------------------------------------------------------- /client/assets/files/etc/gnu-apl.d/preferences: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # 3 | # this file contains user preferences for GNU APL. 4 | # 5 | # It should live in: 6 | # 7 | # (1) in folder gnu-apl of the system configuration directory. or 8 | # (2) in folder .gnu-apl in the user's home 9 | # 10 | # In both cases the file name should be 'preferences' 11 | # 12 | # The system configuration directory is usually /etc or /etc/local 13 | # It can be overridden by ./configure --sysconfdir=something-else 14 | # 15 | # If both files are present then (1) is read before (2) so that for 16 | # duplicate settings in both files (2) prevails. 17 | # 18 | # Command line options take precedence over settings in any of these files. 19 | # 20 | # The initial content of this files contains all possible settings, but 21 | # commented out. You should not remove lines but rather comment or 22 | # uncomment them. 23 | # 24 | 25 | 26 | ############################################################################### 27 | # 28 | # WELCOME MESSAGE 29 | # 30 | # Print (or don't) a welcome message on start-up 31 | # 32 | # The corresponding command line options is --silent 33 | # 34 | Welcome Yes (default) 35 | # Welcome No 36 | 37 | 38 | ############################################################################### 39 | # 40 | # OUTPUT COLORING 41 | # 42 | # Output coloring can cause problems when, for example: 43 | # 44 | # (a) you run GNU APL as script 45 | # (b) you use a black background 46 | # (c) you run GNU APL from emacs 47 | # (d) you run GNU APL from a different terminal than color xterm 48 | # 49 | # In case (a) you should use the --script command line option and 50 | # leave Color as is. 51 | # 52 | # In cases (b), (c), and (d) you can uncomment the 'Color No' line below. 53 | # This only affects the initial state of output coloring; you can 54 | # re-enable colors later with APL command ]XTERM ON. 55 | # 56 | # The corresponding command line options are --Color and --noColor 57 | # 58 | # If your terminal does not understand the ANSI escape sequences, 59 | # or if you don't like to provide escape sequences, then you can set Color 60 | # to "curses" and set color numbers instead of escape sequences below. This 61 | # requires that certain environment variables (e.g. TERM) are set properly 62 | # and that your terminfo database contains the terminal you use. 63 | # 64 | Color ANSI (default) 65 | # Color CURSES 66 | # Color No 67 | # 68 | # If you want to disable coloring initially, but switch to curses if the 69 | # command ]COLOR (or the equivalent but now obsolete command ]XTERM) 70 | # is given later on, then you can give the color command twice: 71 | # 72 | # Color CURSES 73 | # Color No 74 | # 75 | 76 | 77 | ############################################################################### 78 | # 79 | # OUTPUT COLOR ESCAPE SEQUENCES FOR ANSI TERMINALS 80 | # 81 | # Output coloring is implemented as follows: 82 | # 83 | # There are 4 output channels called CIN, COUT, CERR, and UERR 84 | # 85 | # CIN is the echo of the input typed by the user, 86 | # COUT is the normal output of the APL interpreter, 87 | # CERR is additional error information, in particular logging. 88 | # UERR is output of the APL interpreter cotaining error messages, 89 | # 90 | # CIN, COUT, and UERR appear on stdout while CERR appears on stderr. 91 | # Normally stdout and stderr are both displayed on the same terminal, 92 | # but output redirection in the shell can make a difference. 93 | # 94 | # When the interpreter changes from one output channel to another, for 95 | # instance from CIN to COUT after the user has entered a line, then an 96 | # escape sequence (actually, any short sequence of characters) is sent 97 | # to the real output channel (i,e. stdout or stderr). The new channel 98 | # determines which sequence is sent: 99 | # 100 | # CIN: CIN-SEQUENCE CLEAR-EOL 101 | # COUT: COUT-SEQUENCE CLEAR-EOL 102 | # CERR: CERR-SEQUENCE CLEAR-EOL 103 | #UCERR: UERR-SEQUENCE CLEAR-EOL 104 | # 105 | # In addition, when the interpreter exists, then a sequence 106 | # 107 | # RESET-SEQUENCE CLEAR-EOL 108 | # 109 | # is sent which should set the colors to their initial state. 110 | # 111 | # The reason for sending CLEAR-EOL (i.e. clear to end of line) is to color 112 | # the entire next line not only the chars printed on the next line. 113 | # 114 | # Unfortunately it is difficult, if not impossible, to read the current 115 | # color setting from the terminal. Therefore the following is assumed: 116 | # 117 | # "GNU APL is started in a color xterm with white background". 118 | # 119 | # Color xterm is a VT100 (or ANSI) compatible terminal emulation. 120 | # If this assumption is correct, then everything should be fine. Otherwise 121 | # you may want to change the escape sequence sent to the terminal below. 122 | # The numbers below are the decimal values of the bytes sent to the terminal; 123 | # 27 is the escape character, for example. In order to change some or all 124 | # sequences, uncomment the corresponding line and change the hex numbers 125 | # (most likely the columns background and foreground). 126 | # Each sequence can be up to 20 characters long. 127 | # 128 | # The default setting (i.e. for a white background) is this: 129 | # 130 | # VT100: foreground background 131 | # color | | color 132 | # V V 133 | # // ESC [ 0 ; 3 fg ; 4 bg m 134 | # CIN-SEQUENCE 1b 5b 30 3b 33 30 3b 34 37 6d // ESC [0;30;47m 135 | # COUT-SEQUENCE 1b 5b 30 3b 33 30 3b 34 38 6d // ESC [0;30;48m 136 | # CERR-SEQUENCE 1b 5b 30 3b 33 35 3b 34 38 6d // ESC [0;35;48m 137 | # UERR-SEQUENCE 1b 5b 30 3b 33 35 3b 34 38 6d // ESC [0;35;48m 138 | # RESET-SEQUENCE 1b 5b 30 3b 33 38 3b 34 38 6d // ESC [0;38;48m 139 | # CLEAR-EOL-SEQUENCE 1b 5b 4B // ESC [K 140 | # 141 | # On a black background (still assuming VT100 so that the CLEAR-EOL-SEQUENCE 142 | # does not need to be re-defined), the following may be more suitable: 143 | # 144 | # CIN-SEQUENCE 1b 5b 30 3b 33 32 3b 34 30 6d // ESC [0;32;40m 145 | # COUT-SEQUENCE 1b 5b 30 3b 33 37 3b 34 30 6d // ESC [0;37;40m 146 | # CERR-SEQUENCE 1b 5b 30 3b 33 31 3b 34 30 6d // ESC [0;31;40m 147 | # UERR-SEQUENCE 1b 5b 30 3b 33 31 3b 34 30 6d // ESC [0;31;40m 148 | # RESET-SEQUENCE 1b 5b 30 3b 33 37 3b 34 30 6d // ESC [0;37;48m 149 | # 150 | # 151 | 152 | 153 | ############################################################################### 154 | # 155 | # OUTPUT COLOR NUMBER FOR CURSES 156 | # 157 | # There is second way of specifying colors that uses the curses library. 158 | # Instead of specifying the escape sequences sent to the terminal you 159 | # only need to specify the colors wanted and curses will provide the escape 160 | # sequences needed. 161 | # 162 | # Numbers for colors seem to be (nota bene: the author is color-blind): 163 | # 164 | # 0: black 165 | # 1: blue 166 | # 2: green 167 | # 3: cyan 168 | # 4: red 169 | # 5: magenta 170 | # 6: yellow 171 | # 7: white 172 | # 173 | # The colors are specified as numbers like this: 174 | # 175 | # CIN-FOREGROUND 0 176 | # CIN-BACKGROUND 7 177 | # COUT-FOREGROUND 2 178 | # COUT-BACKGROUND 7 179 | # CERR-FOREGROUND 5 180 | # CERR-BACKGROUND 8 181 | # UERR-FOREGROUND 5 182 | # UERR-BACKGROUND 8 183 | # 184 | # or, for dark background: 185 | # 186 | # CIN-FOREGROUND 2 187 | # CIN-BACKGROUND 0 188 | # COUT-FOREGROUND 7 189 | # COUT-BACKGROUND 0 190 | # CERR-FOREGROUND 5 191 | # CERR-BACKGROUND 0 192 | # UERR-FOREGROUND 5 193 | # UERR-BACKGROUND 0 194 | # 195 | # Normally the two methods (escape sequences vs. color numbers) shall not 196 | # be mixed. If they are mixed then the last entry in this file determines 197 | # which method will be used. Also, the numbers for colors are different 198 | # in both methods. 199 | # 200 | 201 | 202 | ############################################################################### 203 | # 204 | # SHARED VARIABLES 205 | # 206 | # shared variables ⎕SVO, ⎕SVR, ... fork a helper process (APnnn) to 207 | # communicate with other APL processors. If you do not need these functions 208 | # then you can prevent starting of APnnn by setting SharedVars to Disabled. 209 | # If SharedVars are disabled then GNU APL starts a little faster and, of 210 | # course, ⎕SVO and friends won't work. 211 | # 212 | # The corresponding command line options are --SV and --noSV 213 | # 214 | SharedVars Enabled (default) 215 | # SharedVars Disabled 216 | 217 | 218 | ############################################################################### 219 | # 220 | # LOGGING FACILITIES 221 | # 222 | # If dynamic logging is disabled then these settings have no effect. 223 | # 224 | # Otherwise you can specify the Logging facilities (numbered 1-37 or more) 225 | # that shall be turned on when the APL interpreter starts, This option can 226 | # be used several times. 227 | # 228 | # See command ]LOG for available logging facilities 229 | # 230 | # The corresponding command line option is -l 231 | # 232 | # Logging 1 233 | # Logging 2 234 | # ... 235 | # Logging 37 236 | 237 | 238 | ############################################################################### 239 | # 240 | # GNU APL uses library numbers from 0 to 0 in commands )LOAD, )SAVE, and )COPY, 241 | # for example: 242 | # 243 | # )LOAD 1 workspace 244 | # 245 | # Commands )IN and )OUT use library number 0 implicitly; 246 | # )LOAD, )SAVE, and )COPY use library number 0 implicitly when no 247 | # library number is given. 248 | # 249 | # The directories corresponding to the library numbers can be configured below. 250 | # library numbers 3, 4, and 5 are used (and overridden) libraries shipped with 251 | # GNU APL 252 | # 253 | # LIBREF-0 /home/xyz/my-own-libs 254 | # LIBREF-1 /home/xyz/my-group-libs 255 | # LIBREF-2 /group/abc/other-libs 256 | LIBREF-3 /usr/local/lib/apl/wslib3 257 | LIBREF-4 /usr/local/lib/apl/wslib4 258 | LIBREF-5 /usr/local/lib/apl/wslib5 259 | # LIBREF-6 /usr/lib/gnu-apl/lib-6 260 | # LIBREF-7 /usr/lib/gnu-apl/lib-7 261 | # LIBREF-8 /usr/lib/gnu-apl/lib-8 262 | # LIBREF-9 /usr/lib/gnu-apl/lib-9 263 | # 264 | 265 | ############################################################################### 266 | # 267 | # READLINE HISTORY PARAMETERS 268 | # 269 | # GNU APL normally uses GNU Readline for obtaining input from the user. 270 | # Below the number of history lines and the location of the history file 271 | # can be configured. 272 | # 273 | READLINE_HISTORY_LEN 500 274 | READLINE_HISTORY_PATH .apl.history 275 | 276 | 277 | ############################################################################### 278 | # 279 | # CREATE BACKUP BEFORE )SAVE or )DUMP WOKRSPACE 280 | # 281 | BACKUP_BEFORE_SAVE yes 282 | 283 | -------------------------------------------------------------------------------- /client/assets/files/lib/apl/wslib3/meta.apl: -------------------------------------------------------------------------------- 1 | ⍝! apl 2 | ⍝ meta: a library for creating and checking meta functions in a library 3 | ⍝ 4 | 5 | ⍝ return the meta functions to be provided by Package 6 | ⍝ 7 | ∇Z←meta∆functions Package;MP 8 | MP←Package,'⍙' ⍝ the meta prefix 9 | Z← ,⊂MP,'Author' 10 | Z←Z,⊂MP,'Version' 11 | Z←Z,⊂MP,'Portability' 12 | Z←Z,⊂MP,'License' 13 | Z←Z,⊂MP,'BugEmail' 14 | Z←Z,⊂MP,'Requires' 15 | Z←Z,⊂MP,'Provides' 16 | Z←Z,⊂MP,'Download' 17 | Z←Z,⊂MP,'Documentation' 18 | ∇ 19 | 20 | ⍝ create all meta functions to be provided by Package 21 | ⍝ 22 | ∇meta∆make_functions Package;Funs 23 | Funs←meta∆functions Package 24 | meta∆make_function ¨ Funs 25 | ∇ 26 | 27 | ⍝ create one meta function, asking for its value 28 | ⍝ 29 | ∇meta∆make_function Fun;Value;Q 30 | ⍞←Q←50↑' Value to be returned by ',Fun,':' 31 | Value←(⍴Q)↓⍞ ◊ '' 32 | L0←'Z←' , Fun 33 | L1←'Z←,⊂''', Value, '''' 34 | Q←⎕FX L0 L1 35 | ∇ 36 | 37 | meta∆make_functions 'meta' 38 | 39 | )FNS 40 | )OFF 41 | 42 | -------------------------------------------------------------------------------- /client/assets/files/lib/apl/wslib4/dummy.apl: -------------------------------------------------------------------------------- 1 | ⍝!/usr/bin/apl --script 2 | 3 | 'This is a placeholder to trigger the creation of its parent directory' 4 | )OFF 5 | 6 | -------------------------------------------------------------------------------- /client/assets/files/lib/apl/wslib5/HTML.apl: -------------------------------------------------------------------------------- 1 | ⍝! apl --script 2 | ⍝ 3 | ⍝ HTML.apl 4 | ⍝ 5 | ⍝ This file is a GNU APL L1 library containing functions for generating some 6 | ⍝ frequently used HTML tags. 7 | ⍝ 8 | ⍝ The library is used by means of the )COPY command: 9 | ⍝ 10 | ⍝ )COPY 5 HTML 11 | ⍝ 12 | ⍝ 13 | ⍝ The library provides the following functions (meta functions omitted): 14 | ⍝ 15 | ⍝ HTML∆debug return debug info to be displayed in a HTML page 16 | ⍝ HTML∆Assert check a condition and complain if not met 17 | ⍝ HTML∆xbox append text matrices A and B horizontally 18 | ⍝ HTML∆HTTP_header CGI header (if started from a web server) 19 | ⍝ HTML∆attr HTML attribute xA with value xB 20 | ⍝ 21 | ⍝ HTML∆_alt HTML attribute 'alt' with value xB 22 | ⍝ HTML∆_content HTML attribute 'content' with value xB 23 | ⍝ HTML∆_height HTML attribute 'height' with value xB 24 | ⍝ HTML∆_href HTML attribute 'href' with value xB 25 | ⍝ HTML∆_http_eq HTML attribute 'http-equiv' with value xB 26 | ⍝ HTML∆_name HTML attribute 'name' with value xB 27 | ⍝ HTML∆__rel HTML attribute 'rel' with value xB 28 | ⍝ HTML∆__src HTML attribute 'src' with value xB 29 | ⍝ HTML∆__type HTML attribute 'type' with value xB 30 | ⍝ HTML∆__width HTML attribute 'width' with value xB 31 | ⍝ HTML∆__h_w HTML attributes 'height' and 'width' with value xB 32 | ⍝ 33 | ⍝ HTML∆T HTML tag 34 | ⍝ HTML∆TX_B_E multi-line yB tagged with xA and /xA 35 | ⍝ HTML∆TX_B_E_1 single-line xB tagged with xA and /xA 36 | ⍝ HTML∆TX_B_1 single-line xB tagged with xA and no /xA 37 | ⍝ HTML∆x2y convert single-line xB to multi-line yZ 38 | ⍝ HTML∆indent_2 indent single-line xB 39 | ⍝ HTML∆indent_2 indent multi-line xB 40 | ⍝ HTML∆emit_1 disclose one-line yB and print it 41 | ⍝ HTML∆emit disclose multi-line yB and print it 42 | ⍝ HTML∆A xB 43 | ⍝ HTML∆Title xB 44 | ⍝ HTML∆Img 45 | ⍝ HTML∆Link 46 | ⍝ HTML∆Style 365 | ⍝ 366 | ∇yZ←HTML∆Style[xX] yB 367 | HTML∆Assert 1 ≡ ≡xX ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴xX 368 | HTML∆Assert 2 ≡ ≡yB ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yB 369 | yZ←'STYLE' HTML∆TX_B_E[xX] yB 370 | HTML∆Assert 2 ≡ ≡yZ ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yZ 371 | ∇ 372 | 373 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 374 | ⍝ tag xB as LIST ITEM 375 | ⍝
  • xB 376 | ⍝ 377 | ∇xZ←HTML∆Li xB 378 | HTML∆Assert 1 ≡ ≡xB ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴xB 379 | xZ←'
  • ', xB 380 | HTML∆Assert 1 ≡ ≡xZ ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴xZ 381 | ∇ 382 | 383 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 384 | ⍝ tag yB as ORDERED LIST 385 | ⍝
      386 | ⍝
    1. B[1] 387 | ⍝
    2. B[2] 388 | ⍝ ... 389 | ⍝
    390 | ⍝ 391 | ∇yZ←HTML∆Ol[xX] yB 392 | →1+(0≠⎕NC 'xX')⍴⎕LC ◊ xX←'' 393 | yZ←'OL' HTML∆TX_B_E[xX] HTML∆Li¨yB 394 | ∇ 395 | 396 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 397 | ⍝ tag yB as UNORDERED LIST 398 | ⍝
      399 | ⍝
    • B[1] 400 | ⍝
    • B[2] 401 | ⍝ ... 402 | ⍝
    403 | ⍝ 404 | ∇yZ←HTML∆Ul[xX] yB 405 | →1+(0≠⎕NC 'xX')⍴⎕LC ◊ xX←'' 406 | yZ←'UL' HTML∆TX_B_E[xX] HTML∆Li¨yB 407 | ∇ 408 | 409 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 410 | ⍝ popular HTML elements 411 | ⍝ 412 | ∇yZ←HTML∆H1[xX] xB 413 | yZ←"H1" HTML∆TX_B_E_1[xX] xB 414 | ∇ 415 | 416 | ∇yZ←HTML∆H2[xX] xB 417 | yZ←"H2" HTML∆TX_B_E_1[xX] xB 418 | ∇ 419 | 420 | ∇yZ←HTML∆H3[xX] xB 421 | yZ←"H3" HTML∆TX_B_E_1[xX] xB 422 | ∇ 423 | 424 | ∇yZ←HTML∆H4[xX] xB 425 | yZ←"H4" HTML∆TX_B_E_1[xX] xB 426 | ∇ 427 | 428 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 429 | ⍝ return HEAD using xTITLE 430 | ⍝ 431 | ⍝ B 432 | ⍝ 433 | ⍝ 434 | ∇yZ←HTML∆Head;yB 435 | yB←HTML∆Title xTITLE 436 | yB←yB,,⊂'META' HTML∆T[(HTML∆_http_eq 'Content-Type'), HTML∆_content 'text/html; charset=UTF-8'] 1 437 | yB←yB,,⊂'META' HTML∆T[(HTML∆_name 'description'), HTML∆_content xDESCRIPTION] 1 438 | yB←yB,HTML∆Link (HTML∆__rel 'stylesheet'),(HTML∆__type 'text/css'), HTML∆_href 'apl-home.css' 439 | yB←yB,HTML∆Style[HTML∆__type 'text/css'] ,⊂'' 440 | 441 | yZ←'HEAD' HTML∆TX_B_E yB 442 | HTML∆Assert 2 ≡ ≡yZ ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yZ 443 | ∇ 444 | 445 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 446 | ⍝ tag yB as BODY 447 | ⍝ 448 | ⍝ B 449 | ⍝ 450 | ⍝ 451 | ∇yZ←HTML∆Body[xX] yB 452 | HTML∆Assert 2 ≡ ≡yB ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yB 453 | yZ←'BODY' HTML∆TX_B_E[xX] yB 454 | HTML∆Assert 2 ≡ ≡yZ ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yZ 455 | ∇ 456 | 457 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 458 | ⍝ HTML document with body yB 459 | ⍝ 460 | ⍝ B 461 | ⍝ 462 | ⍝ 463 | ∇yZ←HTML∆Html[xX] yB 464 | →1+(0≠⎕NC 'xX')⍴⎕LC ◊ xX←'' 465 | HTML∆Assert 2 ≡ ≡yB ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yB 466 | yZ←'HTML' HTML∆TX_B_E HTML∆Head, HTML∆Body[xX] yB 467 | HTML∆Assert 2 ≡ ≡yZ ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yZ 468 | ∇ 469 | 470 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 471 | ⍝ The entire document 472 | ⍝ 473 | ∇yZ←HTML∆Document 474 | yZ← HTML∆x2y HTML∆HTTP_header 475 | yZ←yZ, HTML∆x2y '' 476 | yZ←yZ, HTML∆Html yBODY 477 | HTML∆Assert 2 ≡ ≡yZ ◊ HTML∆Assert 1 ≡ ''⍴⍴⍴yZ 478 | ∇ 479 | 480 | 481 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 482 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 483 | ⍝⍝ ⍝⍝ 484 | ⍝⍝ library meta information... ⍝⍝ 485 | ⍝⍝ ⍝⍝ 486 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 487 | ⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝⍝ 488 | 489 | ∇Z←HTML⍙Author 490 | Z←,⊂'Jürgen Sauermann' 491 | ∇ 492 | 493 | ∇Z←HTML⍙Version 494 | Z←,⊂'1.0' 495 | ∇ 496 | 497 | ∇Z←HTML⍙Portability 498 | ⍝ this library is L3 because it uses user-defined function with axis, which 499 | ⍝ is a GNU APL only feature. 500 | ⍝ 501 | Z←,⊂'L3' 502 | ∇ 503 | 504 | ∇Z←HTML⍙License 505 | Z←,⊂'LGPL (GNU Lesser General Public License)'' 506 | ∇ 507 | 508 | ∇Z←HTML⍙BugEmail 509 | Z←,⊂'bug-apl@gnu.org' 510 | ∇ 511 | 512 | ∇Z←HTML⍙Requires 513 | Z←0⍴⊂'' 514 | ∇ 515 | 516 | ∇Z←HTML⍙Provides 517 | Z←,⊂'HTML encoding functions' 518 | ∇ 519 | 520 | ∇Z←HTML⍙Download;URI;OPTS 521 | URI←'http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/wslib3/HTML.apl' 522 | OPTS←'root=apl' 523 | Z←,⊂URI,'?',OPTS 524 | ∇ 525 | 526 | ∇Z←HTML⍙Documentaion 527 | Z←,⊂'http://www.gnu.org/software/apl/Library-Guidelines.html' 528 | ∇ 529 | 530 | -------------------------------------------------------------------------------- /client/assets/fonts/FreeMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/assets/fonts/FreeMono.ttf -------------------------------------------------------------------------------- /client/assets/fonts/FreeMonoBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/assets/fonts/FreeMonoBold.ttf -------------------------------------------------------------------------------- /client/assets/fonts/FreeMonoBoldOblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/assets/fonts/FreeMonoBoldOblique.ttf -------------------------------------------------------------------------------- /client/assets/fonts/FreeMonoOblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/assets/fonts/FreeMonoOblique.ttf -------------------------------------------------------------------------------- /client/build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 29 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | 49 | 50 | 51 | 52 | 56 | 57 | 69 | 70 | 71 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /client/client.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /client/gen/com/dhsdevelopments/aplandroid/BuildConfig.java: -------------------------------------------------------------------------------- 1 | /*___Generated_by_IDEA___*/ 2 | 3 | package com.dhsdevelopments.aplandroid; 4 | 5 | /* This stub is only used by the IDE. It is NOT the BuildConfig class actually packed into the APK */ 6 | public final class BuildConfig { 7 | public final static boolean DEBUG = Boolean.parseBoolean(null); 8 | } -------------------------------------------------------------------------------- /client/gen/com/dhsdevelopments/aplandroid/Manifest.java: -------------------------------------------------------------------------------- 1 | /*___Generated_by_IDEA___*/ 2 | 3 | package com.dhsdevelopments.aplandroid; 4 | 5 | /* This stub is only used by the IDE. It is NOT the Manifest class actually packed into the APK */ 6 | public final class Manifest { 7 | } -------------------------------------------------------------------------------- /client/gen/com/dhsdevelopments/aplandroid/R.java: -------------------------------------------------------------------------------- 1 | /*___Generated_by_IDEA___*/ 2 | 3 | package com.dhsdevelopments.aplandroid; 4 | 5 | /* This stub is only used by the IDE. It is NOT the R class actually packed into the APK */ 6 | public final class R { 7 | } -------------------------------------------------------------------------------- /client/libs/armeabi/libapl.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/libs/armeabi/libapl.so -------------------------------------------------------------------------------- /client/local.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must *NOT* be checked into Version Control Systems, 5 | # as it contains information specific to your local configuration. 6 | 7 | # location of the SDK. This is only used by Ant 8 | # For customization when using a Version Control System, please read the 9 | # header note. 10 | sdk.dir=/home/elias/src/android-sdk-linux_86 11 | -------------------------------------------------------------------------------- /client/proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | -------------------------------------------------------------------------------- /client/project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system edit 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | # 10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): 11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 12 | 13 | # Project target. 14 | target=Google Inc.:Google APIs:21 15 | -------------------------------------------------------------------------------- /client/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/icon_en_gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/icon_en_gb.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/icon_en_us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/icon_en_us.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/sym_keyboard_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/sym_keyboard_delete.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/sym_keyboard_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/sym_keyboard_done.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/sym_keyboard_return.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/sym_keyboard_return.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/sym_keyboard_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/sym_keyboard_search.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/sym_keyboard_shift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/sym_keyboard_shift.png -------------------------------------------------------------------------------- /client/res/drawable-hdpi/sym_keyboard_space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-hdpi/sym_keyboard_space.png -------------------------------------------------------------------------------- /client/res/drawable-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/icon_en_gb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/icon_en_gb.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/icon_en_us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/icon_en_us.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/sym_keyboard_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/sym_keyboard_delete.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/sym_keyboard_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/sym_keyboard_done.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/sym_keyboard_return.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/sym_keyboard_return.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/sym_keyboard_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/sym_keyboard_search.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/sym_keyboard_shift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/sym_keyboard_shift.png -------------------------------------------------------------------------------- /client/res/drawable-mdpi/sym_keyboard_space.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-mdpi/sym_keyboard_space.png -------------------------------------------------------------------------------- /client/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lokedhs/android-gnu-apl/2385d564b5c6de2106cb995fdfac35d00db22e21/client/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /client/res/layout/apl_input.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /client/res/layout/input.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /client/res/layout/interpreter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /client/res/layout/interpreter_log.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 |