Updated 2016-06-18 09:28:00 by embeddedexpertnz

Features to be added to AndroWish edit

MG would love to see support for the vfs package, a requirement for loading starkits.

chw the vfs package is now included starting with the "James Joyce" edition (2014-01-13).

MG Brilliant, thanks for the quick response.

MG Follow-up: I installed the newer version of AndroWish in the emulator, did a
package require starkit

which worked (1.3.3). I then tried to source my starkit, but that failed with the error
can't find package vfs::mkcl
  while executing
"package require vfs::mkcl"
  (procedure "::vfs::mk4::Mount" line 4)
  invoked from within
"::vfs::mk4::Mount /storage/sdcard/Download/starkit.kit /storage/sdcard/Download/starkit.kit -readonly"
  ("eval" body line 1)
  invoke from within
"eval [list ::vfs::${driver}::Mount $self $self} $args"

chw so there's something missing in the CVS version of vfs. Can you please point me to where I can fetch a complete vfs source archive including the required stuff for starkits? There must also be some C code which needs to be adapted for Android which I didn't find on the web, either.

MG It looks like it tries to load vfs::mkcl as a fallback when the Mk4tcl package isn't available. I can't actually find any info about vfs::mkcl, but it seems Mk4tcl can be obtained from [1]

chw 2014-01-18: hopefully fixed with the "Amphetamine" edition which includes the read-only tclkit vqtcl module.

MG 99%! It errors out when trying to cd to a directory in a starkit (complains it's not a directory, while under other OSes you can CD into the file structure of a starkit without a problem). Curiously, though, it has created images with image create photo -file ... which are located inside the starkit. Anyway, I removed the cd and it loaded the starkit, which seems to be running perfectly. Thank you :)

chw 2014-01-21: when I try this on /storage/sdcard0/clock.kit
package require vfs::mkcl
vfs::mkcl::Mount /storage/sdcard0/clock.kit /mystarkit

it is possible to cd into the mounted startkit on /mystarkit, to glob, and to open files.

ramsan I would like to see a short tutorial in how to compile a simple tcl package that contains c/c++ code

chw unfortunately unsupported as a standalone piece since everything is built as a whole and finally packaged into an APK. So your best option is to fetch the complete source, add your tcl package containing native code to the .../jni subdirectory of the source tree, pick one of the Android.mk makefiles from the many ported extensions, adapt it to your package, add an appropriate pkgIndex.tcl to the .../assets subdirectory, and build the beast using Android NDK/SDK and "ant". A short recipe is in Tcl/Tk on android poll.

ramsan But then ... I cannot offer the package to other users. In my specific case, I have RamDebugger running ok on Androwish. But some parts of this program are made in c++ to instrument and colorize files faster. How can I create the dynamic library for this code in order for RamDebugger to run properly?

chw 2014-01-21: glimpsed over RamDebugger-source8.1.zip and saw many DLLs and shared libraries but no source code. As stated above, you should fetch the AndroWish sources, put your sources of those DLLs/shared libraries below the .../jni subdirectory and create appropriate Android.mk makefiles. Finally, you might want to call your application "RamDebugger": you have to subclass from tk.tcl.wish.AndroWish (an empty class body should do) in order to give the application another package/class name. That java stuff is below the .../src subdirectory. Adapt the AndroidManifest.xml to that package/class name and change the resources in .../res (strings, icons) to your needs. That should give you your RamDebugger APK at the end.

ramsan 2014-01-22: You are describing how to create an application only for myself. But this is not the objective. The objective is to create a package, an editor and debugger, that can be used by any user of androwish. (NOTE: the source code is at: scripts/RamDebuggerInstrumenter.cc). You can access the fossil source code at: [2]

chw 2014-01-23: then package RamDebugger into a starkit. I'm afraid, however, that for the shared libraries you have to carry out the above mentioned steps (get AndroWish sources, Android NDK, put C/C++ sources below .../jni, create Android.mk, use ndk-build to generate shared libraries). Another point to watch out for is that AndroWish builds for ARM and x86 processors, i.e. there are two versions of each shared library which you have to put into the starkit. And the package specific Tcl load command must use $tcl_platform(machine) to find out which library to load (I've never tested loading native code from a starkit, BTW).

PO would like to have an Android theme and the possibility to simulate right clicks (if possible).

dbohdan 2014-12-07: It would be really nice to have a Ttk (pixmap) theme based on Holo or the more recent Material Design to make AndroWish apps better blend in with the rest of Android. (This was the complaint in the most upvoted comment in the AndroWish thread on Hacker News.) However, I don't know anyone who'd be up to the task of designing this kind of a pixmap theme right now; certainly not me. In the meantime I wonder how much you could accomplish by just tweaking the colors/font on Tk controls and putting a gradient in the background. That's more or less how (some) PhoneGap apps try to fit in (except that they use HTML and CSS, with offers glow effects and whatnot), with mixed results.

Another school of thought says that if you can't behave 100% native you shouldn't try to look native at all; instead, try to find your own a distinct look. Perhaps the latter approach could work more easily for AndroWish and apps made with it.

chw 2014-12-07: schools, tastes, themes come and go faster as one can catch 'em up. Why care about it? All that I can do is to provide the stuff we like on our "old-shool" (desk|lap|whatever)tops for our new shiny smartphonish or tabletish gadgetry. Of course, I'm open for really good looking alternative themes but I'm not an artist, painter, designer, Steve Jobs. What about going back to the roots, back to the "bisque" theme of the very beginnings of Tk, which looked rather "Material"ly designed like the Dunes where once upon a time the sandworms lived and where all that silicon came from.

jima 2014-01-14

As asked for in the Tcler's Chat:

Do you know if/how a script can be started with AndroWish instead of starting it with an interactive console and a tk default window?

This question has also arised in comp.lang.tcl:


chw that is were the "borg" command comes into play as mentioned in AndroWish:
   borg shortcut add <name-of-shortcut> <file-to-be-sourced> <png-icon-as-base64-string>

The last parameter can be left out in which case Aladdin's magic device is shown. However, YMMV depending on Android version. On my 4.x devices it worked but the opposite (borg shortcut delete) did not. The <file-to-be-sourced> must be given as an absolute path and it must be readable by the user id under which the AndroWish package has been registered by the Android installer.

ed.s - 2014-02-12 02:24:31

1.BTL/RBC, please! I would love even a partial implementation - specifically, graph, if this is easier than a full implementation.

2.I am assuming things like complex/fourier can be simply included, as they are completely self contained and require no hardware access, is this right? Still, is there a place one can place such common tools? On Linux it would be /usr/share/tcl or something similar, could we have a /storage/sdcard0/AndroWish take up the same role? This would also be a good place to contain .androwishrc, to be executed at startup, if present (default font sizes, etc.). User scripts would also be placed there, and I would also write a little script that looks through this space, finds all file.tcl (and the matching file.png, if available) and create buttons associated with launching each of these (Borg shortcut ...).

Superlinux - 2014-02-26 06:08:47 There should be a way to check whether AndroWish is installed after I made my HelloTclTk package. If it's not installed, I should be able to grab it from Google Play store. Whenever chw wants, I can let him upload AndroWish releases on my Google Developer Console account by sending me the signed released package.

In HelloTclTk.java file, the following override of OnCreate(Bundle savedInstanceState) method can be added as a checkpoint. this is not Tcl. this is purely in Java.
    PackageManager pm = getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
    boolean AndroWish_is_installed=false;
    for (final ResolveInfo app : activityList) {
        if ((app.activityInfo.name).contains("wish")) {
    if (!AndroWish_is_installed){
        /*don't forget to define in strings.xml the value "@string/You_Must_Install_AndroWish" ,
          just to display the same meaning in as many languages as possible.
        Toast.makeText(TableOfContents.this,R.string.You_Must_Install_AndroWish, Toast.LENGTH_LONG).show();
        //Let's assume that the Androwish package name is the following string
        String package_name="tk.tcl.wish";
        //This will open the Play Store app to the following link
        Uri marketuriString = Uri.parse("market://details?id=" + package_name);
        // "market://details?id=tk.tcl.wish"
        Intent intent = new Intent(Intent.ACTION_VIEW, marketuriString);

chw 2014-02-27: good idea. The library stuff (also in Java) which is inherited by the HelloTclTk class has a static initializer which already might have detected the absence of vital native shared libraries (since it was not able to load them). Therefore code to deal with prompting the user for AndroWish installation belongs in that library, not in the APP template. But implementing that stuff is low priority on my list, since there are more problematic open ends left.

chw 2014-03-03: this is partly solved in the Pioneer 10 edition.

[bmidy] - 2014-02-26 08:45:09

Hi, very nice work!!

I d like to get Tix support and also BLT like another one asked.


chw 2014-02-26: I can see benefits of having BLT for data visualization but what gives Tix when there are ttk, treeview, tktable, tklib etc. all available and ready to use?

[bmidy] - 2014-02-27: Hi, I d like to get Tix as I used it a lots in many of my projects, I d like to port to android.

[pbb] - 2014-02-27 11:01:12

I would like to have gnocl (Tcl/GTK+ bindings) package included in AndroWish. Mainly for its text widget, which can do BIDI type rendering for Sanskrit script using the Devanagari font.

chw 2014-02-27: postponed until a stable GTK port is available for Android. Better give me a pointer to a fribidi or ICU/ubidi patch for the Tk text widget.

[bmidy] - 2014-02-27 14:17:29

Hi, I also wanted to use your great Androwish to open serial port using a OTG USB adapter with an USB-serial adapter. so the serial port is available as /dev/ttyUSB0 but I could not use the "fconfigure -mode" command. Is there a reason ? a workaround to open serial port.


chw 2014-02-27: probably a permission issue. Android APPs normally aren't allowed to open character devices. Since about Android 4.0 there's support for USB device access from Java code, see the pointer to the usb-serial github project above. The downside is that the entire device driver seems to require to be written in Java. Adding the usb-serial is on my wish list, but has very low priority.

[bmidy] - 2014-02-27 15:52:36

Also another thing that would be interesting: As I m using a SG Note 3 I get a 1920x1080 resolution which is good but all looks like very small. So it will be nice if it would be possible to have the possibility to zoom/pinch on the screen, but without additional code, I mean if it could be built-in in the "Tk/X" implementation. I do not know If my explanation is good enough, I hope.

chw 2014-03-03: in the Pioneer 10 edition fonts are now chosen based on pixel density. It should be readable on full HD displays now.

[bmidy] - 2014-02-27 17:10:50

Also another things that would be usefull: Associate .tcl file with the AndroWish app, so that the Androwish start and load the .tcl file. So it would be very easy to test our scripts.

chw 2014-03-02: already implemented by android.intent.action.VIEW for file URLs with any pattern and by android.intent.action.SEND for MIME type application/x-tcl. YMMV depending on Android's launcher and/or file manager.

Superlinux - 2014-03-02 09:10:20

Hi. How can I force the virtual keyboard to be only numeric, or to make the keyboard help me in typing Internet addresses ..etc?

chw 2014-03-02: This is not supported by the underlying libSDL 2.0.1 infrastructure. What about asking for this feature on http://www.libsdl.org ? Update: seems to be controllable by a simple integer mask, will try to add this in the "sdltk textinput" command.

chw 2014-03-03: in the Pioneer 10 edition that mask is added to the "sdltk textinput" command. However, the standard event bindings don't use this feature.

Superlinux - 2014-03-04 10:53:22

Well A reminder here to everyone, if you updated to AndroWish runtime "Pioneer 10 edition, 2014-03-03", then remember to update the java library of file name "tcltkapplib.jar" that comes in the HelloTclTk skeleton project. Just re-Download the HelloTclTk skeleton project from here . Unpack the HelloTclTk.zip. From the unpacking locate and copy and replace "tcltkapplib.jar" to your own project library folder named "libs".

Superlinux - 2014-03-05 14:23:45

Regarding the keyboard input type, how about making a quick command like this:
array set entry_vs_input_type { entry1_window_path entry1_input_type entry2_window_path entry2_input_type entry3_window_path entry3_input_type ... ... }
sdltk entry_input_types $entry_vs_input_type

And this command is used at the bottom of the script after the last defined entry. And has automatic bind <Focus> for all entries in the array.

eds - 2014-03-07 00:30:23

A very simple request: could we have another env variable under AndroWish that would tell unambiguosly that we are under Android?

On my desktop: set env(MACHTYPE) yields: i686-suse-linux

Under AndroWish it is not defined. It would be very handy to test for something like this, to make AndroWish-specific changes.

chw 2014-03-07: MACHTYPE is bash specific. Run tclsh from tcsh and you get i686. Newer AndroWishes support this construct
  set android 0
  catch {set android [sdltk android]}

to safely find out if you're running on Android.

eds - 2014-03-07 00:43:13

A very useful feature:
chw 2014-03-03: in the Pioneer 10 edition fonts are now chosen based on pixel density.

BUT: it seems to override not just the defaults, but also the explicitly controlled font sizes, which messes up a picture, made with labels of a very particular size, as these labels now grow and start overlapping and make a mess of things. Pre-Edison editions worked just fine on an unedited script from Linux.

If I edit the script to scale back from 10 to 6 point font, the labels on the picture are back to normal, but if I run the same script under Linux or windows, they are way too small. Sounds like I need a system-dependent switch, or a "Auto-scale fonts" should be a selectable option under AndroWish.

chw 2014-03-07: positive font sizes are now scaled to real world points (as on UN*X/Windows/MacOSX). Negative font sizes are pixel based. If you want to control your layout on pixel basis, use negative numbers. See the Tk documentation of the font command, and play with tk scaling (which I've never tested with AndroWish).

GCS 2014-03-13

It would be nice to have events associated with the Menu and Back buttons, and the Volume Up/Down keys. Apologies if they are already there and I missed them.

PS I am really curious about the development of AndroWish--is it just a hobby, or part of your work? Do you have specific project(s) in mind? ...? Anyhow, I am very very happy you are doing it.

chw 2014-03-15: at least the Back button is mapped as keycode 270 and starting with "The Ides of March" edition as keysym Break. The volume keys aren't exposed by SDL but consumed by the system. Unfortunately I have no device with a Menu key. If you can test the Menu key with this code snippet
    bind all <Key> { puts "keycode=%k     keysym=%K" }

a later AndroWish could provide a mapping to an X11 keysym. PS: yes, I have some commercial projects based on Tcl/Tk which I hope to port to the Android platform someday.

GCS 2014-03-15: Here is the output from hitting the Back and Menu buttons:
keycode=270     keysym=Break
keycode=118     keysym=App

So it seems what I need is already there! BTW, my plan is use these events to cycle through the open windows, since my SQLite GUI can have several open, and I know of no other convenient navigation mechanism.

Thanks for your prompt response.

chw 2014-03-15: Right now, I've learned that the Menu key disappeared in Android >= 4.0 (or was it 3.0 already). Thus, I suggest only to use the Back button, if you want to ensure, that your program can be operated on all devices. Maybe some years into the future (Android 8.1 comes to mind) even the Back button will have been eliminated (and those smart little things read-ahead our minds directly using DWIWM technology ;-)

hkoba 2014-03-21

Hi. Today, I wrote a minimum patch to enable CJK input via textinput. It worked for me(but not enough tested). Anyway, without this, current AndroWish get corrupted string from input method. So, please include this into next release!

chw 2014-03-22: thank you, hkoba-san. Your patch will go into the next edition. Did you find out the purpose of the SDL_TEXTEDITING event? Is that used for CJK input?

hkoba - 2014-03-22 07:44:36

hkoba: Thank you chw! If I understood correctly, SDL_TEXTEDITING is sent by input method to inform application about current(and possible) translation result. When user hits RETURN, it became final result and application will receive it via SDL_TEXTINPUT. For more information, see SDL tutorial. From 2...4 is TEXTEDITING, 5 is TEXTINPUT, I think.

So, expected (future, perfect) behavior is "previewing such potential result as overlay on the spot of final destination".

chw 2014-03-22: I see, however (as far as I was able to type in Japanese or Korean symbols which are unreadable for me) even the Android contacts app does not use the "on the spot" preview, but instead there's a preview/selection area above the on-screen keyboard. OTOH, the SDL library supports the SDL_TEXTEDITING event on the Android platform. Would it make sense to synthesize a text selection (Entry and Text widgets) of the inserted text by SDL_TEXTEDITING so that the later commit by SDL_TEXTINPUT would first erase the SDL_TEXTEDITING selection and then replace it by its own string?

hkoba - 2014-03-23 02:41:53

hkoba: To see "on the spot" preview, you may need to change settings of input method. Under correct settings, you can see the preview in Android contact too. See these photos.

For about "synthesized text selection", I'm not sure it is good way but if is not visible from Tk widget tree(like wish console), it may be a possible solution. Actually, I'm bit curious about how other SDL apps implement this. There would be some recommended way (for SDL or Android), I guess. So, IMHO, before implementing "synthesized text selection", we would better search other examples.

chw 2014-03-23: again, I see, thank you hkoba-san. That is not quite exactly what my ASUS phablet displays when I select one of those languages I can't speak and read, but they present the preview of text input above the on-screen keybord as on your photos. So I think our best option for now is to add your patch and see how other languages (neither mine nor yours) go with AndroWish. (Poor me at school last century. Only to become another brick in the wall. Should have learned more languages many years ago :(

hkoba 2014-03-24: I agreed with your above option and thank you for including my patch. If you find problems about applying my patch, please let me know. For about another SDL exampl, I searched "SDL_TEXTEDITING" deeply on github code search yesterday, but I could find only one real use. And I'm not sure this is good example or not. (For about reading many languages, same applies to me;-) You might notice my english is strange, especially about tense. I should learn them more)

escargo 2014-04-05: It would be nice if the commands like borg were a bit more self-documenting, so that if you are experimenting with a small device where it's not practical to be looking at the documentation at the same instant, you could do something like borg ? or borg help to access subcommand summaries. APN The rest of Tcl does not have this feature (if you discount the informative error messages) so not clear why this particular command should.

escargo From my point of view, the lack of built-in documentation in the rest of Tcl is a misfeature in the rest of Tcl. While you can interactively force some of the informative error messages to be output, having useful messages come out when you request them would be far better.

Certainly it's possible to ignore this feature request; I just think it would be helpful to be able to get any command to provide some useful information when you might not have access to real documentation (because of either no access or no room to run an application to display the info.

RS 2014-04-07 Some self-documentation could be done as often in Tcl:
 % info
 wrong # args: should be "info subcommand ?argument ...?"
 % info sub#
 unknown or ambiguous subcommand "sub#": must be args, body, cmdcount, commands,
 complete, default, exists, frame, functions, globals, hostname, level, library,
 loaded, locals, nameofexecutable, patchlevel, procs, script, sharedlibextension,
 tclversion, or vars
 % info args
 wrong # args: should be "info args procname"

ET - 2014-04-15 06:01:07

At the risk of stating the obvious,

  • I want an app store install of androwish. I don't want to deal with ant, java, sdks, etc. Just want to wish something. I'm now retired, and I only program for my own amusement, and nearly all using tcl/tk.
  • Then, an easy way to run a hello.tcl text file. I have 2 thoughts on this, either the equivalent of wish myprogram.tcl, but as a shortcut icon I can just tap, or possibly, a single tcl/tk program which can easily source one or several other *.tcl scripts from a set of buttons inside the first tcl program.

For example, all my windows systems run a socket listener that can eval whatever is sent to it This lets me mail code such as,
      package require twapi ; twapi::suspend_system -state standby -force true

to remotely put a windows computer into standby. (Don't freak, this is just for my private home lan. Security by obscurity)

On Windows, or ubuntu, this is trivial to do. I'd like to do this from my samsung tablet.

So, it seems to me that all that is really required is to wrap up that helloTclTk example so it can source a text file instead of the animation it does now.

chw 2014-04-15: please don't expect AndroWish in an app store any time soon since I still regularly manage to break some binary interfaces which will make it a support nightmare when/if other packages rely on it. Putting it on Google Play or something else is on my to-do list but has low priority. You don't need ant etc. just download and install the AndroWish-debug.apk on your device (after temporarily activating development mode).

Regarding running Tcl scripts, there's the borg shortcut ... command which allows you to make an icon on the Android desktop. Technically, this is identical to wish URI-of-Tcl-script. Your other proposal is implementable by adding some Tcl to your .wishrc.

With the current (Leonhard Euler) edition, dropbear is included allowing for SSH and SFTP access on the behalf of the AndroWish package. See my example of a .wishrc on the AndroWish page.

Another possibility to remotely start an arbitrary Android activity (can be a Tcl script) is now using SSH and the am command on Android:
  # start an interactive AndroWish
  am start -n tk.tcl.wish/.AndroWish
  # start the widget demo
  am start -n tk.tcl.wish/.AndroWishLauncher -d file:///assets/sdl2tk8.6/demos/widget -a android.content.intent.VIEW

The latter is technically equivalent what the borg shortcut places on the Android desktop. Yes, I agree with you, that this is much more to type than a simple wish widget on a normal UN*X or Windows machine, but currently I know of no other method.

ET - 2014-04-15 11:59:20

Someone once said to me, if it's truly that easy, then you should be able to tell my dog how to do it. Joking aside, the absence of a short complete step by step installation guide in a nice pretty box at the top of the main androwish page is kinda telling here.

It seems the goal, for now at least, is to provide a framework so app developers can write apps for android using the androwish base. That is a worthy goal, but if it were me, I'd reverse my priorities.

There's likely many more end users who might want to write a few handy scripts for themself. That's me - I only just bought my first tablet computer a week ago and It's frustrating not to have tools like tcl/tk that are normally at my fingertips.

But oh that app store! That's what sold me. To me, this is as important to user friendliness as the GUI was to the command line. I still shiver every time I have to install something on my windows computers. But any idiot with a phone knows what an app is. And they love how you buy them - like buying a song on itunes, only easier.

So dreaming ahead to a play store app, ... if .wishrc is to tcl like .bashrc is to bash then a line like this would suffice.
    if [file exists $startupFile] {source $startupFile}

All you'd need to do was explain where this file is and how to edit it. Maybe a little default startup script that brings up a screen with a handful of buttons to launch the other sample scripts. Something very simple to get people started. Think to the user, not the developer here.

There's no reason why there can't be an Androwish lite as well as developer versions. I think a lite version is within reach. Wouldn't you just love to see the app pop up in the store saying 1,000,000 downloads. Think of what that would do for our favorite computer language.

chw 2014-04-15 14:38:07: to somewhat quote Leonard (Bones) McCoy (not Euler): I'm a developer and not a marketroid. Really. If you have a nice startup script (btw $HOME/.wishrc is the path name of that startup script as in a normal interactive wish on UN*X or Windows) what about publishing it here on the wiki? And, yes, that file is really in the same place as on UN*X or Windows, see AndroWish: Documentation for the environment variables.

Although I've spent many days (and nights) now on developing it further, I still don't have the feeling that it is ready for prime time yet, despite the many millions of smartphone and tablet users awaiting it eagerly. Please, be a little patient.

ET - 2014-04-15 23:10:39

I'd love to help out, but unless I'm missing something, I can't find instructions for installing it. The youtube video just confused me.

I don't know how to download and install the AndroWish-debug.apk. I've got about 1 week's experience with the little beasty (as McCoy would say). If it ain't in the play store, I'm stumped. About all I know so far is how to plug it into a win7 system and see 2 folders (internal and external sd card) if that's how one would install things outside the play store.

I have a samsung galaxy tab 2 7.0 with 4.2.2. That's not on the list so I don't even know if my tablet is compatible. And my development platform would be windows (have winxp and win7/64 plus a win8/32 virtual). I have an older ubuntu 10.04 system as well.

But perhaps my ignorance could be used to advantage - for idiot proofing. So, if anyone is willing to step me through it, I'd take good notes and write up a page on the experience.

MG The installing, at least, I can help with - just visit the AndroWish download page in your browser and download the .apk file. When it's done, open the Downloads folder on your tablet and double-tap the .apk file. It'll tell you it's installing it, the permissions it wants, etc. Tell it OK, and that's it - you'll find AndroWish in your installed apps.

As for the developing.. I've also been trying on Windows, but have had no luck whatsoever so far using Eclipse (it appears to compile fine, but errors out when I try and run it). If you have any luck with that part, please let me know how!

ET Ahhhh, thanks. That was a lot easier than I thought it would be. BTW, how does one uninstall it, say when a new versions is available?

I see now that many of the issues I have discovered, like no arrow keys on my keyboard, have already been addressed by others and the sftp and ssh connections seem to be the way to get into the system. I couldn't figure out how to change the window size of the console. I didn't see any scroll bars after I typed in parray env. So I could only see the last few. I'm assuming that env(HOME) is where to place the .wishrc file. I can find the folder from my win7 system, though it does not treat the device as a regular flash drive, rather it thinks its a music device, so some things are not there, like right click search.

I develop my tlc/tk code all on windows using a few utilities I bought years ago. Then I hide all machine particulars inside procs that test for the machine type (tcl_platform array). I see this one says linux for os and platform is unix. The machine said arm7l. I wonder if the console used here will accept my mods that add several buttons to the left side of the console. The last time I was on linux, I had to use a trick to get a console.

Anyway I'm off to figure out how to get in via the ssh/sftp tools. I have a few windows programs, webdrive and putty for that.

MG You can uninstall it from the Applications menu. However, you don't need to do that to upgrade - all Android apps have a unique, internal name which never changes throughout the life of the app. Android uses that to tell if you're installing a new app or upgrading an existing one. So you can just download and install a newer version, and the OS will automatically remove the old one and upgrade.

ET - 2014-04-23 08:34:53

But I'm stuck on how to send a wake on lan magic packet....


Using version, Let it Be, I've been able to get this working. There are two caveats, one is to use the load command shown rather than the package require (for now, to be fixed later AW version). Second, without the close of the socket, it would crash AW on the second attempt to call testit. I don't know if this means a second open socket is the problem, but it's my guess.

Adapted from example WOL code at Generating The Wake On Lan Magic Packet
button .ex -text exit -command exit
button .test -text test -command {testloop}
pack .ex .test -fill both -expand 1
#package require udp
load libtcludp.so Udp
wm geom . 300x400+300+100
proc testloop {} {
    set last 50
    for {set m 0} {$m < $last} {incr m} {
        puts "testit $m"
        testit { 00:24:8c:9b:01:72} ;# change 1 if needed to match the local subnet
        after 1000

proc testit {av} {
    # Select the ipaddress and the port number.
    set ipaddress [lindex $av 0]
    set port   32767
    # Create a broadcast sending udp socket.
    set s [udp_open $port]
    puts "s= |$s| "
    fconfigure $s -buffering none -blocking 0 -translation binary
    fconfigure $s -broadcast 1 -remote [list $ipaddress $port]
    # Generate and send the magic packet
    set hw_addr [binary format H* [string map {: ""} [lindex $av 1]]]
    set msg "\xff\xff\xff\xff\xff\xff[string repeat $hw_addr 16]"
    # Lets send it 4 times to be safe
    for {set a 0} {$a < 4} {incr a} {
        puts -nonewline $s $msg
        puts "sent a wol $a"
        after 100
    close $s ;# without this, a second call to testit caused a crash of AW

chw 2014-05-21: Without the close of the socket you should have seen an error since you've tried to open that 32767 port again without setting -reuse at the very first open. Due to a missing compiler switch that triggered the crash. It will be fixed in the next edition of AndroWish. Good for me that you found that out!

Superlinux - 2014-06-19 16:24:56

Hi. how can I port this http://wiki.tcl.tk/39215 to AndroWish? And please if you can port it, please do.

nb Another vote for usb-serial functionality. This would let us write an FSM controller in Tcl and a ui in Tk to talk to physical hardware (seensors, pumps industrial process...) Edit: Opps just saw that usbserial is now included:-)

escargo - 2014-07-07

Maybe AndroWish could be added to the F-Droid repository of free applications for Android: https://f-droid.org/

That might make installing updates a bit easier.

KL - 2014-08-03

First of all thanks to chw for AndroWish!! I struggeled in the past with etcl (www.evolane.com) but missed official support for android devices. A great feature of etcl is that you can wrap the interpreter and the script into one application. Same is possible with freewrap (http://freewrap.sourceforge.net/). Do you think it is possible to add this kind of wrapping as well to AndroWish?? Thanks and Regards, K.L

chw 2014-08-07: currently there's another approach available: build your own small app using Android SDK which contains your Tcl stuff and some precompiled Java libs but uses at runtime the shared libraries and tcl modules of an already installed AndroWish app. More information on http://www.androwish.org/index.html/wiki?name=HelloTclTk

KL 2014-08-07: I already found this approach and I did already create my small app. But to run the app you need to have an installed AndroWish app. Packing the interpreter itself in the app would be a perfect possibility to distribute own apps.

nb 2014-09-22 Again great work with AW. I was wondering if I could get some help with this starkit. https://dl.dropboxusercontent.com/u/85561940/hydro.kit I'm using the moore package and tclral package. The above starkit works fine in WIN with 8.6 tclkit and 8.5 basekit. I believe my problem is related to this post "Moore Type State Models". If so can we get the included tclRAL upgraded/linked against tcl8.6 and include the ralutil package? TIA

escargo 2015-02-05: Is there a way to access Music playlists? I was really unhappy with how the so-called shuffle function played songs. The order was odd; some songs were played twice and some not at all. I would like to see something that could manipulate play lists. Even if it couldn't modify existing ones, having a program create a new play list with better randomization, elimination of duplicates, and other features would be more pleasing.

chw 2015-02-06: Maybe this is possible using "borg content ...". But you have to dig deep into Android's MediaStore.Audio documentation. I've tried the following:
# get a cursor on the audio media store
set cursor [borg content query content://media/external/audio/media]
# read out records
while {[$cursor move 1]} {
    puts [$cursor getrow]
# many rows of output ... e.g.
_id 3704 _data /mnt/sdcard/music/mm/the_pale_emperor/04the_mephistopheles_of_los_angeles.mp3 _display_name 04the_mephistopheles_of_los_angeles.mp3 _size 7135360 mime_type audio/mpeg date_added 1422041426 is_drm 0 date_modified 1422018634 title {The Mephistopheles Of Los Angeles} title_key {...} duration 297195 artist_id 18 composer {} album_id 38 track 4 year 2015 is_ringtone 0 is_music 1 is_alarm 0 is_notification 0 is_podcast 0 bookmark {} album_artist {} volid 1633892149 alive 1 artist_id:1 18 artist_key {...} artist {Marilyn Manson} album_id:1 38 album_key {...} album {The Pale Emperor}

The playlists are in

Using the "_id" column (345 in this example) of a specific playlist you can read out its members

For further information use the source, Luke, of Android's MediaStore .../frameworks/base/core/java/android/provider/MediaStore.java. Sadly, an overview on the tables and relations of the media meta information in our shiny tablets and smart phones would have fit on a single cheat sheet but in our Brave New Software World that has to be expressed as tons of Java classes and interfaces.

dzach 2015-12-26: A few more uses of borg content query ... in AndroWish: Tips and Tricks

MDD: It would be great if the Muzic MIDI package could be added, making it easy to create games like Muse that could make direct MIDI calls on Android.

stevel: Note that Muzic uses fluidsynth (http://www.fluidsynth.org) on Linux, but could be adapted to whatever MIDI library is available on Android.

chw 2015-06-04: a Muzic compatible extension is now available starting with check-in http://www.androwish.org/index.html/info/c6e3704ca9d27633 using dynamic linking of the libsonivox.so MIDI library (which hopefully is built into all recent Android versions). libsonivox.so has no support for soundfonts. An additional command muzic::close is provided to turn off MIDI playback in order to conserve battery power.

MDD: Thanks, Christian!

MDD: AndroWish makes Tcl the easiest way, by far, to make Android apps. I'd love to use it as the basis for a new course at CodeAbode (http://www.codeabode.com) sometime. I guess the two additional features that I can think of that would make it even more useful would be 1) a web-view command, that would open a Tcl-controlable webkit browser in a Tcl frame, and 2) full sdx.kit functionality, so we could create starpacks that could be distributed and run as stand-alone apps, without our users having to first install AndroWish.

chw 2015-08-27: A web view would certainly be very nice to have but I've still no idea how to implement this. OTOH, the latest release makes it easy to start a Tcl/Tk script from a link on a page displayed in your Android browser using the androwish://... URL scheme (see the examples on http://www.androwish.org/index.html/wiki?name=Example+Scripts). Right now this is limited to local files and files in the ZIP mounted assets of the APK.

Fabricio Rocha - More a question than a feature request... Tk is great, we all love it. But why not being able to use Tcl and Tk-style commands for creating apps with the native GUI? Would it be possible to have something like an optional package for Android/mobile interface widgets?

chw 2015-08-27: Sure. But this is a totally different new project, maybe even the resurrection of Tcl in Scripting Layer for Android, see https://github.com/damonkohler/sl4a

dzach 2015-11-26: By following Google's Material Design principles and guidlines, also mentioned above, one could get very good (looking) results with just plain Tk, provided the dimensions, icons and fonts get adjusted according to the very detailed guidlines. Animations may require more work, but are not impossible.

dzach 2015-09-30: - What a great work! Tried the new AndroWish SDK and worked just fine. I spent some time trying to add a 'Deselect all' button to the bones tool gui, but it turned out to be more complicated than I thought. Would that be very difficult to add?

chw 2015-10-01: the first page supports this already when you click on the heading over the checkmarks. Would you like to have this on the list with the app permissions, too?

dzach 2015-10-01: - Oh! I didn't click around enough, it seems. Perhaps, a symbol on that heading would make it easier to spot. Yes, please, it would be useful and consistant to have it on the app permissions page too. Thank you!

chw 2015-10-02: check-in http://www.androwish.org/index.html/info/af7a2710beac3af1 should fix the heading and add the same function to the app permission list. Please update.

dzach 2015-10-08: That looks nice, thank you!

GS 2015-09-30: Since Androwish can do photo capture, it could be nice if it can perform OCR with for example Tesseract (https://github.com/rmtheis/tess-two).

chw 2015-10-01: good point, please add a ticket on http://www.androwish.org

[alpha_tcler] - 2016-03-25 15:24:48

how can I use androwish for publish apps in google market? Can it be bundled with it and distributed?

MG I don't think there's anything special about AndroWish in this respect; you'd need to follow the same process as for any other app. (I don't recall there being anything in the AndroWish license that would stop you from listing something in the Play Store, but it's been a while since I looked). Google require you to jump through a lot of hoops to do that, though, especially if you intend to sell your app and not just give it away free.

[alpha_tcler] - 2016-03-25 15:24:48

It would be nice some support for REST in TCL/Androwish or using android-java subsystem, any ideas ?

pwq - 2016-06-18

I would like a borg interface to wifi (like the bluetooth api). Principally I would like to turn on and off the wifi programatically. Also to see connection status and if possible available AP and other data could be useful in the future.