nimrepl compiles again (but doesn't work)

This commit is contained in:
Araq 2015-06-27 23:35:34 +02:00
commit 8f58ab99eb

View file

@ -15,10 +15,10 @@ else:
const runCmd = "c -r" const runCmd = "c -r"
var nimExe = findExe("nim") var nimExe = findExe("nim")
if nimExe.len == 0: nimExe = "../bin" / addFileExt("nim", os.exeExt) if nimExe.len == 0: nimExe = "../bin" / addFileExt("nim", os.ExeExt)
proc execCode(code: string): string = proc execCode(code: string): string =
var f: TFile var f: File
if open(f, "temp.nim", fmWrite): if open(f, "temp.nim", fmWrite):
f.write(code) f.write(code)
f.close() f.close()
@ -28,145 +28,145 @@ proc execCode(code: string): string =
else: else:
result = "cannot open file 'temp.nim'" result = "cannot open file 'temp.nim'"
var shiftPressed = False var shiftPressed = false
var w: gtk2.PWindow var w: gtk2.PWindow
var InputTextBuffer: PTextBuffer var inputTextBuffer: PTextBuffer
var OutputTextBuffer: PTextBuffer var outputTextBuffer: PTextBuffer
proc destroy(widget: PWidget, data: pgpointer){.cdecl.} = proc destroy(widget: PWidget, data: pointer){.cdecl.} =
main_quit() main_quit()
proc fileOpenClicked(menuitem: PMenuItem, userdata: pgpointer) {.cdecl.} = proc fileOpenClicked(menuitem: PMenuItem, userdata: pointer) {.cdecl.} =
var path = ChooseFileToOpen(w) var path = chooseFileToOpen(w)
if path != "": if path != "":
var file = readFile(path) var file = readFile(path)
if file != nil: if file != nil:
set_text(InputTextBuffer, file, len(file).gint) set_text(inputTextBuffer, file, len(file).gint)
else: else:
error(w, "Unable to read from file") error(w, "Unable to read from file")
proc fileSaveClicked(menuitem: PMenuItem, userdata: pgpointer) {.cdecl.} = proc fileSaveClicked(menuitem: PMenuItem, userdata: pointer) {.cdecl.} =
var path = ChooseFileToSave(w) var path = chooseFileToSave(w)
if path == "": return if path == "": return
var startIter: TTextIter var startIter: TTextIter
var endIter: TTextIter var endIter: TTextIter
get_start_iter(InputTextBuffer, addr(startIter)) get_start_iter(inputTextBuffer, addr(startIter))
get_end_iter(InputTextBuffer, addr(endIter)) get_end_iter(inputTextBuffer, addr(endIter))
var InputText = get_text(InputTextBuffer, addr(startIter), var inputText = get_text(inputTextBuffer, addr(startIter),
addr(endIter), False) addr(endIter), false)
var f: TFile var f: File
if open(f, path, fmWrite): if open(f, path, fmWrite):
f.write(InputText) f.write(inputText)
f.close() f.close()
else: else:
error(w, "Unable to write to file") error(w, "Unable to write to file")
proc inputKeyPressed(widget: PWidget, event: PEventKey, proc inputKeyPressed(widget: PWidget, event: PEventKey,
userdata: pgpointer): bool {.cdecl.} = userdata: pointer): bool {.cdecl.} =
if ($keyval_name(event.keyval)).tolower() == "shift_l": if ($keyval_name(event.keyval)).tolower() == "shift_l":
# SHIFT is pressed # SHIFT is pressed
shiftPressed = True shiftPressed = true
proc setError(msg: string) = proc setError(msg: string) =
outputTextBuffer.setText(msg, msg.len.gint) outputTextBuffer.setText(msg, msg.len.gint)
proc inputKeyReleased(widget: PWidget, event: PEventKey, proc inputKeyReleased(widget: PWidget, event: PEventKey,
userdata: pgpointer): bool {.cdecl.} = userdata: pointer): bool {.cdecl.} =
#echo(keyval_name(event.keyval)) #echo(keyval_name(event.keyval))
if ($keyval_name(event.keyval)).tolower() == "shift_l": if ($keyval_name(event.keyval)).tolower() == "shift_l":
# SHIFT is released # SHIFT is released
shiftPressed = False shiftPressed = false
if ($keyval_name(event.keyval)).tolower() == "return": if ($keyval_name(event.keyval)).tolower() == "return":
#echo($keyval_name(event.keyval), "Shift_L") #echo($keyval_name(event.keyval), "Shift_L")
# Enter pressed # Enter pressed
if shiftPressed == False: if not shiftPressed:
var startIter: TTextIter var startIter: TTextIter
var endIter: TTextIter var endIter: TTextIter
get_start_iter(InputTextBuffer, addr(startIter)) get_start_iter(inputTextBuffer, addr(startIter))
get_end_iter(InputTextBuffer, addr(endIter)) get_end_iter(inputTextBuffer, addr(endIter))
var InputText = get_text(InputTextBuffer, addr(startIter), var inputText = get_text(inputTextBuffer, addr(startIter),
addr(endIter), False) addr(endIter), false)
try: try:
var r = execCode($InputText) var r = execCode($inputText)
set_text(OutputTextBuffer, r, len(r).gint) set_text(outputTextBuffer, r, len(r).gint)
except EIO: except IOError:
setError("Error: Could not open file temp.nim") setError("Error: Could not open file temp.nim")
proc initControls() = proc initControls() =
w = window_new(gtk2.WINDOW_TOPLEVEL) w = window_new(gtk2.WINDOW_TOPLEVEL)
set_default_size(w, 500, 600) set_default_size(w, 500, 600)
set_title(w, "Nimrod REPL") set_title(w, "Nim REPL")
discard signal_connect(w, "destroy", SIGNAL_FUNC(nimrepl.destroy), nil) 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")
# MainBox (vbox)
set_submenu(FileMenuItem, FileMenu) var mainBox = vbox_new(false, 0)
show(FileMenuItem) add(w, mainBox)
append(TopMenu, FileMenuItem)
# TopMenu (MenuBar)
pack_start(MainBox, TopMenu, False, False, 0) 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 - Separates the InputTextView and the OutputTextView # VPaned - Separates the InputTextView and the OutputTextView
var paned = vpaned_new() var paned = vpaned_new()
set_position(paned, 450) set_position(paned, 450)
pack_start(MainBox, paned, True, True, 0) pack_start(mainBox, paned, true, true, 0)
show(paned) show(paned)
# Init the TextBuffers # Init the TextBuffers
InputTextBuffer = text_buffer_new(nil) inputTextBuffer = text_buffer_new(nil)
OutputTextBuffer = text_buffer_new(nil) outputTextBuffer = text_buffer_new(nil)
# InputTextView (TextView) # InputTextView (TextView)
var InputScrolledWindow = scrolled_window_new(nil, nil) var inputScrolledWindow = scrolled_window_new(nil, nil)
set_policy(InputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC) set_policy(inputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC)
var InputTextView = text_view_new(InputTextBuffer) var inputTextView = text_view_new(inputTextBuffer)
add_with_viewport(InputScrolledWindow, InputTextView) add_with_viewport(inputScrolledWindow, inputTextView)
add1(paned, InputScrolledWindow) add1(paned, inputScrolledWindow)
show(InputScrolledWindow) show(inputScrolledWindow)
show(InputTextView) show(inputTextView)
discard signal_connect(InputTextView, "key-release-event", discard signal_connect(inputTextView, "key-release-event",
SIGNAL_FUNC(inputKeyReleased), nil) SIGNAL_FUNC(inputKeyReleased), nil)
discard signal_connect(InputTextView, "key-press-event", discard signal_connect(inputTextView, "key-press-event",
SIGNAL_FUNC(inputKeyPressed), nil) SIGNAL_FUNC(inputKeyPressed), nil)
# OutputTextView (TextView) # OutputTextView (TextView)
var OutputScrolledWindow = scrolled_window_new(nil, nil) var outputScrolledWindow = scrolled_window_new(nil, nil)
set_policy(OutputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC) set_policy(outputScrolledWindow, POLICY_AUTOMATIC, POLICY_AUTOMATIC)
var OutputTextView = text_view_new(OutputTextBuffer) var outputTextView = text_view_new(outputTextBuffer)
add_with_viewport(OutputScrolledWindow, OutputTextView) add_with_viewport(outputScrolledWindow, outputTextView)
add2(paned, OutputScrolledWindow) add2(paned, outputScrolledWindow)
show(OutputScrolledWindow) show(outputScrolledWindow)
show(OutputTextView) show(outputTextView)
show(w) show(w)
show(MainBox) show(mainBox)
nimrod_init() nim_init()
initControls() initControls()
main() main()