gIcont 1.0 & 1.0 patched (версия под Linux)

Сегодня я выкладываю на всеобщее обозрение свой быдлокод (:-D) графического фронт-энда для транслятора icont…
Прежде всего, пара слов о том, почему код выкладывается здесь.

Код выкладывается здесь для демонстрации простейшего графического фронт-энда под Linux (и для демонстрации несовершенства Мира тоже :-D ), а также я выкладываю этот код в знак того, что эта версия уже не будет поддерживаться, и как следствие, будет создана новая версия фронт-энда и причем с нуля.

Такая вот петрушка, господа!
Сам фронт-энд прост как пробка: из текстовых полей для исходного и конечного файла получаются аргументы для командной строки, которые склеиваются с командами для компиляции, выполнения или генерации ucode (в зависимости, естественно, от нажатой кнопки). Для этого шаманского действия из пути вырезается расширение файла (*.icn, даже для Linux), а результат сливается с уже подготовленными командами для командной строки, после чего полученная строка передается в мою любимую функцию system, выполняющую системные команды.
И при этом, все это безобразие написано на ObjectIcon.
Вот в общем код:

import
   gui(Align, Dialog, Event, Label,
       TextButton, TextField, TextPaint, TextDisplay)
  

class gIcont(Dialog)
   private
      source_path,
      about,
      label_2,
      generate,
      label_1,
      run_file,
      executable,
      exe_path

   public component_setup()
      self.setup()
   end

   public new()
      cast(self,Dialog).new()
      return
   end

   private on_about(ev)
   local d
   d := Notice()
   d.show_modal()     
   end

   private on_executable(ev)
   local source,exec
   source:=source_path.get_contents()
   exec:=exe_path.get_contents()
   create_exe(source,exec)
   end

   private on_gIcont(ev)
   dispose()
   end

   private on_generate(ev)
   local filename
   filename:=source_path.get_contents()
   generate_ucode(filename)
   end

   private on_run_file(ev)
   local filename
   filename:=source_path.get_contents()
   execute(filename)
   end

   private setup()
      local paint_2, paint_4, paint_1, paint_6, paint_3, paint_5
      self.set_label("gIcont v.1.0 (Linux)")
      self.set_size(361, 257)
      source_path := TextField().
         set_pos("8", "44").
         set_size("340").
         clear_constraints().
         set_constraint("x_align", Align.L).
         set_constraint("x_fill", &yes).
         set_constraint("x_weight", 1.0).
         set_contents("~/").
         set_font("Sans Mono,14")
      self.add(source_path)
      paint_1 := TextPaint("Source path :")
      label_1 := Label().
         set_pos("4", "13").
         clear_constraints().
         set_constraint("x_align", Align.L).
         set_paint(paint_1)
      self.add(label_1)
      paint_2 := TextPaint("Executable path :")
      label_2 := Label().
         set_pos("6", "96").
         clear_constraints().
         set_constraint("x_align", Align.L).
         set_paint(paint_2)
      self.add(label_2)
      exe_path := TextField().
         set_pos("8", "127").
         set_size("340").
         clear_constraints().
         set_constraint("x_align", Align.L).
         set_constraint("x_fill", &yes).
         set_constraint("x_weight", 1.0).
         set_contents("~/")
      self.add(exe_path)
      paint_3 := TextPaint("Create executable")
      executable := TextButton().
         set_pos("9", "177").
         clear_constraints().
         connect(self.on_executable, Event.BUTTON_PRESS).
         set_toggles(&no).
         set_paint(paint_3)
      self.add(executable)
      paint_4 := TextPaint("Create ucode")
      generate := TextButton().
         set_pos("199", "177").
         set_size("149", "30").
         clear_constraints().
         connect(self.on_generate, Event.BUTTON_PRESS).
         set_toggles(&no).
         set_paint(paint_4)
      self.add(generate)
      paint_5 := TextPaint("Execute source")
      run_file := TextButton().
         set_pos("9", "214").
         set_size("186", "30").
         clear_constraints().
         connect(self.on_run_file, Event.BUTTON_PRESS).
         set_toggles(&no).
         set_paint(paint_5)
      self.add(run_file)
      paint_6 := TextPaint("About gIcont")
      about := TextButton().
         set_pos("199", "214").
         set_size("149", "30").
         clear_constraints().
         connect(self.on_about, Event.BUTTON_PRESS).
         set_toggles(&no).
         set_paint(paint_6)
      self.add(about)
      self.connect(self.on_gIcont, Event.WINDOW_CLOSE_BUTTON)
   end
end

procedure main()
   local d
   d := gIcont()
   d.show_modal()
end

procedure execute(filename)
system("icont "||filename||" -x")
end

procedure generate_ucode(filename)
system("icont -c "||filename)
end

procedure create_exe(source,exec)
local poz,cmd,tmp
if exec=="~/" | exec=="" then {
 if poz:=find(".icn",source) then tmp:=source[1:poz] else tmp:=source
 cmd:="icont -o "||tmp||" "||source
 system(cmd)
} else {
 if poz:=find(".icn",exec) then tmp:=exec[1:poz] else tmp:=exec
 cmd:="icont -o "||tmp||" "||source
 system(cmd)
}
end 

class Notice(Dialog)
   private
      text_display_1

   public component_setup()
      self.setup()
   end

   public new()
      cast(self,Dialog).new()
      return
   end

   private on_Notice(ev)
   dispose()
   end

   private setup()
      self.set_size(479, 303)
      self.set_label("About gIcont")
      text_display_1 := TextDisplay().
         set_pos("2", "3").
         set_size("475", "297").
         clear_constraints().
         set_constraint("x_fill", &yes).
         set_constraint("x_weight", 1.0).
         set_constraint("y_fill", &yes).
         set_constraint("y_weight", 1.0).
         set_font("Sans Mono,14").
         set_contents(["Graphical Icont front-end", " (gIcont) v.1.1", "", "Created by disconnectix ", "        ", "", " Simple GUI shell for icont translator.", "Experimental version.", "", " This software is part of project IDP -", "IconDevelPack (IconDevelopmentPackage) ", "available on code.google.com/p/icon-development-", "package/", "", " Written in ObjectIcon and distributed under", "BSD Licnse.", "", "", ""])
      self.add(text_display_1)
      self.connect(self.on_Notice, Event.WINDOW_CLOSE_BUTTON)
   end
end

P.S: По хорошему, надо было бы еще выложить файл gicont.layout, но… я потерял этот файл и к тому же без всякой задней мысли выпилил из конца листинга указание на файл layout’а… Так что извиняйте :(

Добавить комментарий