diff options
Diffstat (limited to 'tools/nimrepl.nim')
-rwxr-xr-x | tools/nimrepl.nim | 172 |
1 files changed, 0 insertions, 172 deletions
diff --git a/tools/nimrepl.nim b/tools/nimrepl.nim deleted file mode 100755 index 220307dba..000000000 --- a/tools/nimrepl.nim +++ /dev/null @@ -1,172 +0,0 @@ -# -# -# Nimrod REPL -# (c) Copyright 2010 Dominik Picheta -# -# See the file "copying.txt", included in this -# distribution, for details about the copyright. -# - -import glib2, gtk2, gdk2, os, osproc, dialogs, strutils - -when defined(tinyc): - const runCmd = "run" -else: - const runCmd = "c -r" - -var nimExe = findExe("nimrod") -if nimExe.len == 0: nimExe = "../bin" / addFileExt("nimrod", os.exeExt) - -proc execCode(code: string): string = - var f: TFile - if open(f, "temp.nim", fmWrite): - f.write(code) - f.close() - result = osproc.execProcess( - "$# $# --verbosity:0 --hint[Conf]:off temp.nim" % [nimExe, runCmd], - {poStdErrToStdOut}) - else: - result = "cannot open file 'temp.nim'" - -var shiftPressed = False -var w: gtk2.PWindow -var InputTextBuffer: PTextBuffer -var OutputTextBuffer: PTextBuffer - -proc destroy(widget: PWidget, data: pgpointer){.cdecl.} = - main_quit() - -proc FileOpenClicked(menuitem: PMenuItem, userdata: pgpointer) {.cdecl.} = - var path = ChooseFileToOpen(w) - if path != "": - var file = readFile(path) - if file != nil: - set_text(InputTextBuffer, file, len(file)) - else: - error(w, "Unable to read from file") - -proc FileSaveClicked(menuitem: PMenuItem, userdata: pgpointer) {.cdecl.} = - var path = ChooseFileToSave(w) - - if path == "": return - var startIter: TTextIter - var endIter: TTextIter - get_start_iter(InputTextBuffer, addr(startIter)) - get_end_iter(InputTextBuffer, addr(endIter)) - var InputText = get_text(InputTextBuffer, addr(startIter), - addr(endIter), False) - var f: TFile - if open(f, path, fmWrite): - f.write(InputText) - f.close() - else: - error(w, "Unable to write to file") - -proc inputKeyPressed(widget: PWidget, event: PEventKey, - userdata: pgpointer): bool = - if ($keyval_name(event.keyval)).tolower() == "shift_l": - # SHIFT is pressed - shiftPressed = True - -proc setError(msg: string) = - outputTextBuffer.setText(msg, msg.len) - -proc inputKeyReleased(widget: PWidget, event: PEventKey, - userdata: pgpointer): bool = - #echo(keyval_name(event.keyval)) - if ($keyval_name(event.keyval)).tolower() == "shift_l": - # SHIFT is released - shiftPressed = False - - if ($keyval_name(event.keyval)).tolower() == "return": - #echo($keyval_name(event.keyval), "Shift_L") - # Enter pressed - if shiftPressed == False: - var startIter: TTextIter - var endIter: TTextIter - get_start_iter(InputTextBuffer, addr(startIter)) - get_end_iter(InputTextBuffer, addr(endIter)) - var InputText = get_text(InputTextBuffer, addr(startIter), - addr(endIter), False) - - try: - var r = execCode($InputText) - set_text(OutputTextBuffer, r, len(r)) - except EIO: - setError("Error: Could not open file temp.nim") - - -proc initControls() = - w = window_new(gtk2.WINDOW_TOPLEVEL) - set_default_size(w, 500, 600) - set_title(w, "Nimrod REPL") - discard signal_connect(w, "destroy", SIGNAL_FUNC(nimrepl.destroy), nil) - - # MainBox (vbox) - var MainBox = vbox_new(False, 0) - add(w, MainBox) - - # TopMenu (MenuBar) - var TopMenu = menu_bar_new() - show(TopMenu) - - var FileMenu = menu_new() - var OpenMenuItem = menu_item_new("Open") - append(FileMenu, OpenMenuItem) - show(OpenMenuItem) - discard signal_connect(OpenMenuItem, "activate", - SIGNAL_FUNC(FileOpenClicked), nil) - var SaveMenuItem = menu_item_new("Save...") - append(FileMenu, SaveMenuItem) - show(SaveMenuItem) - discard signal_connect(SaveMenuItem, "activate", - SIGNAL_FUNC(FileSaveClicked), nil) - var FileMenuItem = menu_item_new("File") - - - set_submenu(FileMenuItem, FileMenu) - show(FileMenuItem) - append(TopMenu, FileMenuItem) - - pack_start(MainBox, TopMenu, False, False, 0) - - # VPaned - Seperates the InputTextView and the OutputTextView - var paned = vpaned_new() - set_position(paned, 450) - pack_start(MainBox, paned, True, True, 0) - show(paned) - - # Init the TextBuffers - InputTextBuffer = text_buffer_new(nil) - OutputTextBuffer = text_buffer_new(nil) - - # InputTextView (TextView) - var InputScrolledWindow = scrolled_window_new(nil, nil) - set_policy(InputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC) - var InputTextView = text_view_new(InputTextBuffer) - add_with_viewport(InputScrolledWindow, InputTextView) - add1(paned, InputScrolledWindow) - show(InputScrolledWindow) - show(InputTextView) - - discard signal_connect(InputTextView, "key-release-event", - SIGNAL_FUNC(inputKeyReleased), nil) - discard signal_connect(InputTextView, "key-press-event", - SIGNAL_FUNC(inputKeyPressed), nil) - - # OutputTextView (TextView) - var OutputScrolledWindow = scrolled_window_new(nil, nil) - set_policy(OutputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC) - var OutputTextView = text_view_new(OutputTextBuffer) - add_with_viewport(OutputScrolledWindow, OutputTextView) - add2(paned, OutputScrolledWindow) - show(OutputScrolledWindow) - show(OutputTextView) - - show(w) - show(MainBox) - -nimrod_init() -initControls() -main() - |