nimrepl compiles again (but doesn't work)
This commit is contained in:
parent
2297a1aa60
commit
8f58ab99eb
1 changed files with 89 additions and 89 deletions
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue