├── ChangeLog ├── ChangeLog.2007 ├── ChangeLog.2008 ├── HTML └── applet.html ├── INSTALL ├── LICENSE ├── NOTICE ├── README.markdown ├── TODO-tests-docs ├── android ├── AndroidManifest.xml ├── README ├── README.eclipse ├── android.properties ├── bin │ └── Hecl.apk ├── build.xml ├── generator │ └── Dumper.java ├── res │ ├── drawable │ │ ├── aicon.png │ │ ├── buttonhecl.png │ │ └── heclicon.png │ ├── layout │ │ └── main.xml │ ├── raw │ │ ├── lib.hcl │ │ └── script.hcl │ └── values │ │ └── strings.xml └── src │ ├── Hecl-debug.apk │ ├── Hecl.apk │ └── org │ └── hecl │ └── android │ ├── AndroidCmd.java │ ├── AttributeProps.java │ ├── Hecl.java │ ├── HeclCallback.java │ ├── HeclHandler.java │ ├── HeclServiceConnection.java │ ├── ScriptProvider.java │ └── SubHecl.java ├── androidbuilder └── org │ └── hecl │ └── androidbuilder │ └── AndroidBuilder.java ├── applet └── org │ └── hecl │ └── applet │ └── HeclApplet.java ├── applettweak └── org │ └── hecl │ └── applettweak │ └── AppletTweak.java ├── blackberry.properties ├── blackberry.xml ├── blackberry ├── Hecl.java ├── heclfile.hcl └── script.hcl ├── blackberrygui └── org │ └── hecl │ └── blackberry │ ├── BrowserCmd.java │ ├── BrowserLauncher.java │ ├── DeviceCmds.java │ ├── InvokeCmds.java │ └── ServiceBookCmd.java ├── build-tools ├── BBJDEVersion.java ├── README ├── antenna-bin-1.0.0.jar ├── lib │ └── proguard.jar ├── proguard.jar ├── proguardgui.jar └── retrace.jar ├── build.xml ├── cldc10midp10.properties ├── cldc11midp20.properties ├── commandline ├── Hecl.java └── StandaloneHecl.java ├── core.xml ├── core └── org │ └── hecl │ ├── AnonProc.java │ ├── ClassCommand.java │ ├── ClassCommandInfo.java │ ├── CodeThing.java │ ├── Command.java │ ├── Compare.java │ ├── ControlCmds.java │ ├── DoubleThing.java │ ├── Ensemble.java │ ├── FractionalThing.java │ ├── GroupThing.java │ ├── HashCmds.java │ ├── HashThing.java │ ├── HeclException.java │ ├── HeclModule.java │ ├── HeclTask.java │ ├── IntThing.java │ ├── IntegralThing.java │ ├── Interp.java │ ├── InterpCmds.java │ ├── ListCmds.java │ ├── ListThing.java │ ├── LongThing.java │ ├── MathCmds.java │ ├── NumberThing.java │ ├── ObjectThing.java │ ├── Operator.java │ ├── Parse.java │ ├── ParseList.java │ ├── ParseState.java │ ├── PrintThing.java │ ├── Proc.java │ ├── Properties.java │ ├── PutsCmd.java │ ├── RealThing.java │ ├── SortCmd.java │ ├── Stanza.java │ ├── StringCmds.java │ ├── StringThing.java │ ├── SubstThing.java │ └── Thing.java ├── docs ├── after.html ├── and.html ├── android.html ├── append.html ├── base64_decode.html ├── base64_encode.html ├── bgerror.html ├── blackberry.html ├── break.html ├── browser_open.html ├── building_hecl.html ├── catch.html ├── cd.html ├── chunk.xsl ├── classof.html ├── clock.html ├── commands.html ├── continue.html ├── copy.html ├── creating_new_hecl_commands.html ├── currentfile.html ├── demo_screenshot.png ├── device_systemversion.html ├── double.html ├── eq.html ├── equality.html ├── eval.html ├── exit.html ├── extensioncommands.html ├── false.html ├── file_basename.html ├── file_cd.html ├── file_current.html ├── file_delete.html ├── file_devs.html ├── file_du.html ├── file_exists.html ├── file_hidden.html ├── file_isdirectory.html ├── file_isopen.html ├── file_join.html ├── file_list.html ├── file_mkdir.html ├── file_mtime.html ├── file_readable.html ├── file_rename.html ├── file_size.html ├── file_split.html ├── file_truncate.html ├── file_writable.html ├── filefinder.html ├── filetolist.html ├── filter.html ├── float.html ├── for.html ├── foreach.html ├── fpmath.html ├── global.html ├── hacking_hecl_j2me.html ├── hasclass.html ├── hash.html ├── hecl-look-right.png ├── hecl.css ├── hecl.html ├── hecl.jpg ├── hecl.pdf ├── hecl.png ├── hecl.xml ├── hecl.xsl ├── hecl_javadocs.html ├── heclandjava.html ├── heclbuilder-screen.png ├── hello_screenshot1.png ├── http_commands.html ├── http_data.html ├── http_formatQuery.html ├── http_geturl.html ├── http_ncode.html ├── http_status.html ├── if.html ├── images │ ├── blank.png │ ├── caution.png │ ├── draft.png │ ├── hecl-look-right.png │ ├── hecl.png │ ├── home.png │ ├── important.png │ ├── next.png │ ├── note.png │ ├── prev.png │ ├── tip.png │ ├── toc-blank.png │ ├── toc-minus.png │ ├── toc-plus.png │ ├── up.png │ └── warning.png ├── incr.html ├── index.html ├── installation.html ├── intro.html ├── invoke_calculator.html ├── invoke_call.html ├── invoke_camera.html ├── invoke_video.html ├── j2me.html ├── j2metutorial.html ├── javame_quick_start.html ├── jdocs │ ├── allclasses-frame.html │ ├── allclasses-noframe.html │ ├── constant-values.html │ ├── deprecated-list.html │ ├── help-doc.html │ ├── index-all.html │ ├── index.html │ ├── org │ │ └── hecl │ │ │ ├── AnonProc.html │ │ │ ├── ClassCommand.html │ │ │ ├── ClassCommandInfo.html │ │ │ ├── CodeThing.html │ │ │ ├── Command.html │ │ │ ├── Compare.html │ │ │ ├── DoubleThing.html │ │ │ ├── FractionalThing.html │ │ │ ├── GroupThing.html │ │ │ ├── HashThing.html │ │ │ ├── HeclException.html │ │ │ ├── HeclModule.html │ │ │ ├── HeclTask.html │ │ │ ├── IntThing.html │ │ │ ├── IntegralThing.html │ │ │ ├── Interp.WaitToken.html │ │ │ ├── Interp.html │ │ │ ├── ListThing.html │ │ │ ├── LongThing.html │ │ │ ├── MathCmds.html │ │ │ ├── NumberThing.html │ │ │ ├── ObjectThing.html │ │ │ ├── Operator.html │ │ │ ├── Parse.html │ │ │ ├── ParseList.html │ │ │ ├── ParseState.html │ │ │ ├── PrintThing.html │ │ │ ├── Properties.html │ │ │ ├── RealThing.html │ │ │ ├── StringThing.html │ │ │ ├── SubstThing.html │ │ │ ├── Thing.html │ │ │ ├── class-use │ │ │ ├── AnonProc.html │ │ │ ├── ClassCommand.html │ │ │ ├── ClassCommandInfo.html │ │ │ ├── CodeThing.html │ │ │ ├── Command.html │ │ │ ├── Compare.html │ │ │ ├── DoubleThing.html │ │ │ ├── FractionalThing.html │ │ │ ├── GroupThing.html │ │ │ ├── HashThing.html │ │ │ ├── HeclException.html │ │ │ ├── HeclModule.html │ │ │ ├── HeclTask.html │ │ │ ├── IntThing.html │ │ │ ├── IntegralThing.html │ │ │ ├── Interp.WaitToken.html │ │ │ ├── Interp.html │ │ │ ├── ListThing.html │ │ │ ├── LongThing.html │ │ │ ├── MathCmds.html │ │ │ ├── NumberThing.html │ │ │ ├── ObjectThing.html │ │ │ ├── Operator.html │ │ │ ├── Parse.html │ │ │ ├── ParseList.html │ │ │ ├── ParseState.html │ │ │ ├── PrintThing.html │ │ │ ├── Properties.html │ │ │ ├── RealThing.html │ │ │ ├── StringThing.html │ │ │ ├── SubstThing.html │ │ │ └── Thing.html │ │ │ ├── files │ │ │ ├── FileCmds.html │ │ │ ├── HeclChannel.html │ │ │ ├── HeclFileUtils.html │ │ │ ├── HeclStreamCmds.html │ │ │ ├── class-use │ │ │ │ ├── FileCmds.html │ │ │ │ ├── HeclChannel.html │ │ │ │ ├── HeclFileUtils.html │ │ │ │ └── HeclStreamCmds.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ │ ├── heclbuilder │ │ │ ├── HeclBuilderGui.html │ │ │ ├── HeclEditor.html │ │ │ ├── class-use │ │ │ │ ├── HeclBuilderGui.html │ │ │ │ └── HeclEditor.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ │ ├── jarhack │ │ │ ├── JarHack.html │ │ │ ├── class-use │ │ │ │ └── JarHack.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ │ ├── java │ │ │ ├── HeclJavaCmd.html │ │ │ ├── JavaCmd.html │ │ │ ├── MethodProps.html │ │ │ ├── NullCmd.html │ │ │ ├── Reflector.html │ │ │ ├── class-use │ │ │ │ ├── HeclJavaCmd.html │ │ │ │ ├── JavaCmd.html │ │ │ │ ├── MethodProps.html │ │ │ │ ├── NullCmd.html │ │ │ │ └── Reflector.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ │ ├── midp20 │ │ │ ├── MidletCmd.html │ │ │ ├── class-use │ │ │ │ └── MidletCmd.html │ │ │ ├── lcdui │ │ │ │ ├── AlertCmd.html │ │ │ │ ├── CanvasCmd.html │ │ │ │ ├── CanvasEvent.html │ │ │ │ ├── ChoiceGroupCmd.html │ │ │ │ ├── CommandCmd.html │ │ │ │ ├── DateFieldCmd.html │ │ │ │ ├── DisplayableCmd.html │ │ │ │ ├── EventCmd.html │ │ │ │ ├── EventHandler.html │ │ │ │ ├── FormCmd.html │ │ │ │ ├── GUICmds.html │ │ │ │ ├── GraphicsCmd.html │ │ │ │ ├── HeclCanvas.html │ │ │ │ ├── ImageCmd.html │ │ │ │ ├── ImageItemCmd.html │ │ │ │ ├── ItemCmd.html │ │ │ │ ├── ListCmd.html │ │ │ │ ├── OptionCmd.html │ │ │ │ ├── ScreenCmd.html │ │ │ │ ├── SettingsCmd.html │ │ │ │ ├── SpacerCmd.html │ │ │ │ ├── StringItemCmd.html │ │ │ │ ├── TextBoxCmd.html │ │ │ │ ├── TextFieldCmd.html │ │ │ │ ├── TickerCmd.html │ │ │ │ ├── WidgetInfo.html │ │ │ │ ├── WidgetProp.html │ │ │ │ ├── class-use │ │ │ │ │ ├── AlertCmd.html │ │ │ │ │ ├── CanvasCmd.html │ │ │ │ │ ├── CanvasEvent.html │ │ │ │ │ ├── ChoiceGroupCmd.html │ │ │ │ │ ├── CommandCmd.html │ │ │ │ │ ├── DateFieldCmd.html │ │ │ │ │ ├── DisplayableCmd.html │ │ │ │ │ ├── EventCmd.html │ │ │ │ │ ├── EventHandler.html │ │ │ │ │ ├── FormCmd.html │ │ │ │ │ ├── GUICmds.html │ │ │ │ │ ├── GraphicsCmd.html │ │ │ │ │ ├── HeclCanvas.html │ │ │ │ │ ├── ImageCmd.html │ │ │ │ │ ├── ImageItemCmd.html │ │ │ │ │ ├── ItemCmd.html │ │ │ │ │ ├── ListCmd.html │ │ │ │ │ ├── OptionCmd.html │ │ │ │ │ ├── ScreenCmd.html │ │ │ │ │ ├── SettingsCmd.html │ │ │ │ │ ├── SpacerCmd.html │ │ │ │ │ ├── StringItemCmd.html │ │ │ │ │ ├── TextBoxCmd.html │ │ │ │ │ ├── TextFieldCmd.html │ │ │ │ │ ├── TickerCmd.html │ │ │ │ │ ├── WidgetInfo.html │ │ │ │ │ └── WidgetProp.html │ │ │ │ ├── package-frame.html │ │ │ │ ├── package-summary.html │ │ │ │ ├── package-tree.html │ │ │ │ └── package-use.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ │ ├── misc │ │ │ ├── HeclUtils.html │ │ │ ├── class-use │ │ │ │ └── HeclUtils.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ ├── package-use.html │ │ │ └── rms │ │ │ ├── RMSCmd.html │ │ │ ├── RMSInputStream.html │ │ │ ├── RMSModule.html │ │ │ ├── RMSOutputStream.html │ │ │ ├── RMSUtils.html │ │ │ ├── class-use │ │ │ ├── RMSCmd.html │ │ │ ├── RMSInputStream.html │ │ │ ├── RMSModule.html │ │ │ ├── RMSOutputStream.html │ │ │ └── RMSUtils.html │ │ │ ├── package-frame.html │ │ │ ├── package-summary.html │ │ │ ├── package-tree.html │ │ │ └── package-use.html │ ├── overview-frame.html │ ├── overview-summary.html │ ├── overview-tree.html │ ├── package-list │ ├── resources │ │ └── inherit.gif │ ├── serialized-form.html │ └── stylesheet.css ├── join.html ├── kxml.attrcount.html ├── kxml.attrvalue.html ├── kxml.create.html ├── kxml.getname.html ├── kxml.gettext.html ├── kxml.html ├── kxml.input.html ├── kxml.next.html ├── kxml.nexttag.html ├── kxml.requireend.html ├── kxml.requirestart.html ├── lappend.html ├── lcdui_alert.html ├── lcdui_canvas.html ├── lcdui_choicegroup.html ├── lcdui_command.html ├── lcdui_date.html ├── lcdui_dismiss_command.html ├── lcdui_event.html ├── lcdui_font.html ├── lcdui_form.html ├── lcdui_gauge.html ├── lcdui_image.html ├── lcdui_imageitem.html ├── lcdui_item_options.html ├── lcdui_list.html ├── lcdui_select_command.html ├── lcdui_settings.html ├── lcdui_spacer.html ├── lcdui_stringitem.html ├── lcdui_textbox.html ├── lcdui_textfield.html ├── lcdui_ticker.html ├── lindex.html ├── list.html ├── listtofile.html ├── llen.html ├── location_commands.html ├── location_get.html ├── lrange.html ├── lset.html ├── math.html ├── max.html ├── midlet_checkpermissions.html ├── midlet_exit.html ├── midlet_flashbacklight.html ├── midlet_getappproperty.html ├── midlet_onpause.html ├── midlet_onresume.html ├── midlet_pause.html ├── midlet_platformrequest.html ├── midlet_resourceasstring.html ├── midlet_resume.html ├── midlet_vibrate.html ├── midp10_alert.html ├── midp10_choicegroup.html ├── midp10_cmd.html ├── midp10_commands.html ├── midp10_datefield.html ├── midp10_form.html ├── midp10_gauge.html ├── midp10_getindex.html ├── midp10_getprop.html ├── midp10_j2me_exit.html ├── midp10_listbox.html ├── midp10_noscreen.html ├── midp10_screenappend.html ├── midp10_setcurrent.html ├── midp10_setindex.html ├── midp10_setprop.html ├── midp10_string.html ├── midp10_stringitem.html ├── midp10_textbox.html ├── midp10_textfield.html ├── midp20commands.html ├── min.html ├── ne.html ├── networking_commands.html ├── nochunk.xsl ├── not.html ├── open.html ├── or.html ├── proc.html ├── puts.html ├── readall.html ├── recordstore_commands.html ├── ref.html ├── rename.html ├── return.html ├── reverse-screen.png ├── reverse.hcl ├── rms_add.html ├── rms_delete.html ├── rms_get.html ├── rms_hdel.html ├── rms_hexists.html ├── rms_hget.html ├── rms_hkeys.html ├── rms_hset.html ├── rms_list.html ├── rms_set.html ├── rms_size.html ├── rms_sizeavail.html ├── search.html ├── servicebook_records.html ├── set.html ├── shoplist1.png ├── shoplist2.png ├── sort.html ├── source.html ├── split.html ├── strbytelen.html ├── strcmp.html ├── strfind.html ├── strindex.html ├── strlast.html ├── strlen.html ├── strlower.html ├── strrange.html ├── strrep.html ├── strreplace.html ├── strtrim.html ├── strupper.html ├── system_getproperty.html ├── system_hasproperty.html ├── textfield.html ├── throw.html ├── time.html ├── tnotify.html ├── true.html ├── tutorial.html ├── twait.html ├── unset.html ├── upeval.html └── while.html ├── files └── org │ └── hecl │ └── files │ ├── FileCmds.java │ ├── FileFinder.java │ ├── FileFinderCallback.java │ ├── FileFinderCmds.java │ ├── HeclChannel.java │ ├── HeclFileUtils.java │ └── HeclStreamCmds.java ├── heclbuilder ├── org │ └── hecl │ │ └── heclbuilder │ │ ├── HeclBuilderGui.java │ │ └── HeclEditor.java └── swing-layout-1.0.jar ├── j2me.xml ├── jarhack └── org │ └── hecl │ └── jarhack │ └── JarHack.java ├── jars ├── blackberry │ └── signed-4.3 │ │ ├── Hecl.cod │ │ └── HeclFile.cod ├── commons-cli-1.1.jar ├── jline-0.9.94.jar ├── kxml2-2.3.0.jar ├── microemulator.jar └── mwt.jar ├── java └── org │ └── hecl │ └── java │ ├── HeclJavaCmd.java │ ├── JavaCmd.java │ ├── MethodProps.java │ ├── NullCmd.java │ └── Reflector.java ├── kxml └── org │ └── hecl │ └── kxml │ └── KXMLCmd.java ├── load └── org │ └── hecl │ └── load │ └── LoadCmd.java ├── location └── org │ └── hecl │ └── location │ ├── LocationCmd.java │ └── LocationRequest.java ├── logos ├── hecl-look-left.png ├── logo.svg └── logo.xcf ├── media └── org │ └── hecl │ └── media │ ├── HeclMedia.java │ └── MediaCmd.java ├── midp10 ├── Hecl.java ├── Hecl.png ├── README ├── examples │ ├── alert.hcl │ ├── choicegroup.hcl │ ├── datefield.hcl │ ├── form.hcl │ ├── gauge.hcl │ ├── listbox.hcl │ ├── recordstore.hcl │ └── textbox.hcl ├── hecl_logo.png ├── script.hcl ├── template.jad └── updatejad.hcl ├── midp10gui ├── GUI.java ├── GUICmdFacade.java ├── ListBox.java └── SMS.java ├── midp20 ├── Hecl.java ├── Hecl.png ├── hecl_logo.png ├── heclfile.hcl └── script.hcl ├── midp20gui └── org │ ├── awt │ ├── Color.java │ ├── Dimension.java │ ├── Point.java │ ├── Rectangle.java │ ├── Transparency.java │ ├── geom │ │ ├── AffineTransform.java │ │ ├── Dimension2D.java │ │ ├── NoninvertibleTransformException.java │ │ ├── Point2D.java │ │ └── Rectangle2D.java │ └── image │ │ └── ImageObserver.java │ ├── graphics │ ├── Draw.java │ ├── Drawable.java │ └── VFont.java │ └── hecl │ ├── midp20 │ ├── MidletCmd.java │ └── lcdui │ │ ├── AlertCmd.java │ │ ├── CanvasCmd.java │ │ ├── CanvasEvent.java │ │ ├── ChoiceGroupCmd.java │ │ ├── CommandCmd.java │ │ ├── DateFieldCmd.java │ │ ├── DisplayableCmd.java │ │ ├── EventCmd.java │ │ ├── EventHandler.java │ │ ├── FontMap.java │ │ ├── FormCmd.java │ │ ├── GUICmds.java │ │ ├── GaugeCmd.java │ │ ├── GraphicsCmd.java │ │ ├── HeclCanvas.java │ │ ├── ImageCmd.java │ │ ├── ImageItemCmd.java │ │ ├── ItemCmd.java │ │ ├── ListCmd.java │ │ ├── OptionCmd.java │ │ ├── ScreenCmd.java │ │ ├── SettingsCmd.java │ │ ├── SpacerCmd.java │ │ ├── StringItemCmd.java │ │ ├── TextBoxCmd.java │ │ ├── TextFieldCmd.java │ │ ├── TickerCmd.java │ │ ├── WidgetInfo.java │ │ ├── WidgetListener.java │ │ └── WidgetProp.java │ └── misc │ └── HeclUtils.java ├── misc.xml ├── mwt.properties ├── mwt ├── Hecl.png ├── hecl_logo.png └── script.hcl ├── mwtgui ├── ButtonCmd.java ├── ComponentCmd.java ├── EventGetWay.java ├── FontCmd.java ├── ImageButtonCmd.java ├── LabelCmd.java ├── MidletCmd.java ├── MwtCmds.java ├── MwtManager.java ├── MwtManagerCmd.java ├── MwtWidgetInfo.java ├── ScrollerCmd.java ├── SkinCmd.java ├── TextBoxCmd.java ├── WindowCmd.java └── ext │ ├── HeclWindow.java │ ├── ImageButton.java │ ├── Scroller.java │ └── TextBox.java ├── net └── org │ └── hecl │ ├── Base64.java │ ├── Base64Cmd.java │ ├── HttpCmd.java │ ├── HttpRequest.java │ └── QueryParam.java ├── rms └── org │ └── hecl │ └── rms │ ├── RMSCmd.java │ ├── RMSInputStream.java │ ├── RMSModule.java │ ├── RMSOutputStream.java │ └── RMSUtils.java ├── settings.xml └── tests ├── after.hcl ├── alias.hcl ├── append.hcl ├── break.hcl ├── catch.hcl ├── circular.hcl ├── deepcopy.hcl ├── equality.hcl ├── eval.hcl ├── files.hcl ├── filter.hcl ├── for.hcl ├── foreach.hcl ├── global.hcl ├── harness.hcl ├── hash.hcl ├── http.hcl ├── i18n.hcl ├── if.hcl ├── incr.hcl ├── index.hcl ├── intro.hcl ├── java.hcl ├── join.hcl ├── list.hcl ├── listlen.hcl ├── logic.hcl ├── loops.hcl ├── lset.hcl ├── math.hcl ├── parse.hcl ├── path.hcl ├── performance.hcl ├── proc.hcl ├── return.hcl ├── sample.hcl ├── search.hcl ├── set.hcl ├── sort-performance.hcl ├── sort.hcl ├── source.hcl ├── sourcefile.hcl ├── split.hcl ├── string.hcl ├── suite.hcl ├── test.hcl ├── threads.hcl ├── throw.hcl ├── time.hcl ├── upeval.hcl └── while.hcl /HTML/applet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Hecl interpreter in an applet 6 | 14 | 15 | 16 | 17 | 18 | 19 |

Hecl Applet

20 | 21 |

Enter text in the first box, and click to see it run.

22 | 23 | Script:
24 |
25 |

26 |
31 | 32 |

33 |
34 | 35 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /INSTALL: -------------------------------------------------------------------------------- 1 | Getting Started with Hecl 2 | ========================= 3 | 4 | How to compile and run simple Hecl programs. 5 | 6 | 1) Hecl is built with the Ant tool, so you'll need that in order to 7 | build Hecl. 8 | 9 | 2) To compile the J2SE version of Hecl, do this: 10 | 11 | ant packageCommandline 12 | 13 | 3) At this point, you have a Hecl.jar file in the directory 14 | jars/j2se/Hecl.jar 15 | 16 | java -jar jars/j2se/Hecl.jar 17 | hecl> puts "hello world" 18 | hello world 19 | 20 | 4) Testing. If you wish to test that your installation passes the 21 | test suite: 22 | 23 | java -jar jars/j2se/Hecl.jar tests/suite.hcl 24 | 25 | and, to get some performance numbers: 26 | 27 | java -jar jars/j2se/Hecl.jar tests/performance.hcl 28 | 29 | 5) Java ME versions - see docs/j2me.html 30 | 31 | 6) Android - to compile and install the Android example, do: 32 | 33 | ant packageAndroid 34 | 35 | You will need to set up android/android.properties to point the 36 | right place, though. 37 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | This product includes software developed by David N. Welton 2 | (http://www.dedasys.com/) and Wolfgang Kechel . 3 | 4 | It also includes various ideas borrowed from Jacl. 5 | 6 | Important: feel free to use this code with or in (L)GPL projects. I 7 | don't think there is any problem between the two licenses. 8 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | Hecl Programming Language 2 | ========================= 3 | 4 | The Hecl Programming Language is an attempt to create a programming 5 | language that works the way I want it to. The goals I have in mind 6 | are: 7 | 8 | * Simplicity. The language shouldn't be complicated. It should 9 | "scale down", which means that even someone without much experience 10 | programming ought to be able to use it and be productive with it, 11 | even if their code isn't beautiful. 12 | 13 | * Power. Experts should be able to use it and not feel limited. 14 | 15 | * Small Core. The core language should be simple and compact. 16 | Modules provide additional functionality. 17 | 18 | * Extensible. Hecl may be used to extend Hecl, as well as Java, of 19 | course. The syntax is flexible enough that it is possible to create 20 | new control structures, for example, entirely in Hecl itself. 21 | 22 | * Embeddable. Hecl is easy to embed into your own Java applications. 23 | 24 | * JavaME/J2ME. Hecl is built to run in Java ME, which provides a much 25 | smaller API than 'regular' Java. 26 | 27 | To get started, read the INSTALL file and the documentation, starting 28 | with docs/index.html. 29 | 30 | ---- 31 | 32 | David N. Welton - davidw@dedasys.com 33 | -------------------------------------------------------------------------------- /TODO-tests-docs: -------------------------------------------------------------------------------- 1 | # This commands need to be documented and tested. 2 | 3 | base64::encode / decode 4 | bgerror - documented, not tested. 5 | 6 | exp 7 | false 8 | filesize 9 | 10 | float 11 | floor 12 | 13 | getprop 14 | 15 | hclear 16 | hcontains 17 | hkeys 18 | hremove 19 | hset 20 | http.data 21 | http.formatQuery 22 | http.geturl 23 | http.ncode 24 | http.status 25 | 26 | linsert 27 | 28 | load 29 | 30 | rename 31 | 32 | runtime.freememory 33 | runtime.totalmemory 34 | 35 | strbytelen 36 | strcmp 37 | strfind 38 | 39 | strlast 40 | 41 | strlower 42 | strrange 43 | strtrim 44 | strtriml 45 | strtrimr 46 | strupper 47 | system.gc 48 | system.getproperty 49 | system.hasproperty 50 | system.time 51 | throw 52 | 53 | tnotify 54 | 55 | twait -------------------------------------------------------------------------------- /android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /android/README: -------------------------------------------------------------------------------- 1 | Hecl on Android 2 | =============== 3 | 4 | This README is the documentation for Hecl on Android. It's not much, 5 | but until things settle down and we begin to commit things to DocBook, 6 | it's better than nothing. 7 | 8 | Building Hecl 9 | ------------- 10 | 11 | ant android-install (or android-reinstall) builds Hecl and sends it to 12 | the running Android emulator. 13 | 14 | Editing the script 15 | ------------------ 16 | 17 | The package that gets sent to the emulator resides in 18 | android/bin/Hecl.apk, and is basically a .zip file. This means that 19 | it's possible to modify the Hecl script contained therein and 20 | repackage the .apk without recompiling anything: 21 | 22 | # Go to the android directory. 23 | cd android/ 24 | # Replace the script.hcl file in Hecl.apk with our modifications. 25 | zip -r bin/Hecl.apk res/raw/script.hcl 26 | # Send it to the emulator. 27 | /opt/android_sdk_linux_m3-rc22a/tools/adb install bin/Hecl.apk 28 | 29 | With the Hecl script executed being res/raw/script.hcl. 30 | 31 | Android Hecl Commands 32 | --------------------- 33 | 34 | Read script.hcl to get an idea of what's going on. If you don't like 35 | some aspect of how it works, now's the time to say something! In 36 | order to get something working, I created some reflection code for 37 | Hecl, so most of the commands are, in reality, closely related to the 38 | Java classes and methods documented here: 39 | 40 | http://code.google.com/android/reference/index.html 41 | -------------------------------------------------------------------------------- /android/README.eclipse: -------------------------------------------------------------------------------- 1 | Martin Mainusch explains how to edit Hecl/Android in Eclipse: 2 | 3 | First, in case you haven't done it already, you have to install the 4 | Android Eclipse plugin: 5 | 6 | http://code.google.com/android/intro/installing.html#installingplugin 7 | 8 | To use Eclipse with Hecl/Android, I create a new android project and 9 | just copy everything from hecl/android/ folder, meaning /src, /res and 10 | Androidmanifest.xml into the newly created project. 11 | 12 | Then, you have to set the path to /hecl/jars/j2se.jar: 13 | 14 | Select the new project in the package view in eclipse > right click > 15 | select properties > select Java Build Path > and select the tab 16 | "Libraries". 17 | 18 | Here you should see the Hecl.jar from /hecl/jars/j2se.jar. Open the 19 | tree view and select source attachment > and than "Edit" -button on 20 | the right site of the view. 21 | 22 | Now you have to select "workspace" and than navigate to the hecl/core 23 | folder. 24 | 25 | Please keep in mind that hecl has be build with (located in the settings.xml file) 27 | for debugging to work. 28 | 29 | After that, I can set a breakpoint in Hecl.java file where ever I wish 30 | and than start the debug section. 31 | -------------------------------------------------------------------------------- /android/android.properties: -------------------------------------------------------------------------------- 1 | sdk-folder=/opt/android-sdk 2 | android-tools=/opt/android-sdk/tools 3 | android-platform=/opt/android-sdk/platforms/android-1.6 4 | android-platform-tools=/opt/android-sdk/platforms/android-1.6/tools 5 | -------------------------------------------------------------------------------- /android/bin/Hecl.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidw/hecl/ba81ffc962cc76dd99f5e78945d6776b98350fa0/android/bin/Hecl.apk -------------------------------------------------------------------------------- /android/generator/Dumper.java: -------------------------------------------------------------------------------- 1 | import java.lang.reflect.Field; 2 | import java.lang.reflect.Method; 3 | 4 | import java.util.Enumeration; 5 | import java.util.Hashtable; 6 | 7 | public class Dumper { 8 | static Hashtable unknownTypes; 9 | 10 | public static void main(String[] args) { 11 | unknownTypes = new Hashtable(); 12 | 13 | try { 14 | Class c = Class.forName("android.widget.TextView"); 15 | // Class c = Class.forName("android.widget.Button"); 16 | Method ms[] = c.getDeclaredMethods(); 17 | for (int i = 0; i < ms.length; i++) { 18 | String sig = ms[i].getReturnType().getSimpleName() + " " + ms[i].getName(); 19 | Class params[] = ms[i].getParameterTypes(); 20 | for (int j = 0; j < params.length; j++) { 21 | sig += " " + params[j].getSimpleName(); 22 | } 23 | System.out.println(" " + sig + " :"); 24 | gencode(ms[i]); 25 | } 26 | 27 | System.out.println("UNKNOWN TYPES:"); 28 | for (Enumeration e = unknownTypes.keys() ; e.hasMoreElements() ;) { 29 | System.out.println(e.nextElement()); 30 | } 31 | } catch (Exception e) { 32 | System.err.println(e.toString()); 33 | e.printStackTrace(); 34 | } 35 | } 36 | 37 | public static void gencode(Method m) { 38 | Class params[] = m.getParameterTypes(); 39 | String args = ""; 40 | if (params.length > 0) { 41 | int i; 42 | for (i = 0; i < params.length - 1; i++) { 43 | args += genArg(params[i], i) + ", "; 44 | } 45 | args += genArg(params[i], i); 46 | } 47 | System.out.println(genretval(m.getReturnType().getSimpleName()) + "view." + m.getName() + "(" + args + ") )"); 48 | } 49 | 50 | public static String genretval(String retval) { 51 | if (retval.equals("int") || retval.equals("boolean")) { 52 | return "Thing retval = IntThing.create( "; 53 | } else if (retval.equals("void")) { 54 | return "Thing retval = null; ("; 55 | } 56 | return ""; 57 | } 58 | 59 | public static String genArg(Class param, int pos) { 60 | pos += 2; 61 | String p = param.getSimpleName(); 62 | if (p.equals("int")) { 63 | return "IntThing.get(argv[" + pos + "])"; 64 | } else { 65 | unknownTypes.put(p, 1); 66 | } 67 | return p; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /android/res/drawable/aicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidw/hecl/ba81ffc962cc76dd99f5e78945d6776b98350fa0/android/res/drawable/aicon.png -------------------------------------------------------------------------------- /android/res/drawable/buttonhecl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidw/hecl/ba81ffc962cc76dd99f5e78945d6776b98350fa0/android/res/drawable/buttonhecl.png -------------------------------------------------------------------------------- /android/res/drawable/heclicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/davidw/hecl/ba81ffc962cc76dd99f5e78945d6776b98350fa0/android/res/drawable/heclicon.png -------------------------------------------------------------------------------- /android/res/layout/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 |