Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

GUIS - vidžet server

grafičkog korisničkog interfejsa (GUI) verzija1.6 u četvrtak, 30. decembra 2004.



Software Description
Name GUIS
License GNU General Public License
Author Basile Starynkevitch
Version 1.6
Development system Linux/Debian/Sid x86
Programming Language C
Software Dependencies
GTK 2.4 (or 2.2)
and related libraries
(Glib, Pango, Atk) required
Python 2.3 (or 2.2) recommended
PyGTK 2.2 recommended
Ruby 1.8 recommended
Ryby-Gnome2 0.11.x recommended
Slang 1.4.x optional
Slgtk 0.5.x optional


Molim vas, budite ljubazni da mi pošaljete ( basile@starynkevitch.net) mejl ako koristite ovu informaciju i ovaj Guis softver.

Guis je dostupan (kao gnuzipped izvor tarball) na http://www.starynkevitch.net/Basile/guis-1.6.tar.gz i ovaj dokument je na http://www.starynkevitch.net/Basile/guisdoc.html. Pogledajte takođe moju početnu stranicu na http://www.starynkevitch.net/Basile/ ili Guis stranicu http://freshmeat.net/projects/guis/ na Freshmeat zbog najava novih verzija. Molim vas da pošaljete predloge, dodatke, kritike, itd..

1. Opis i upotreba


Ovaj odeljak daje kratak pregled s klasičnim primerom sabirača. Potom su dati detalji o korišćenju.

1.1 Motivi i tome slično


Guis je mali vidžet server. To je GTK2 (vidite http://www.gtk.org/) zasnovani program koji preko cevi sluša ima li vidžet zahteva (zahtevi su Pajton [ili Rubi] skripta - vidite http://www.python.org/ koja koriste PyGTK 2.0 spoj GTK2 s Pajtonom - vidite http://www.daa.com.au/~james/software/pygtk/) i emituje događaje ili odgovore. Guis je koristan za programe (naročito setuid programe ili (ruby, ocaml, perl...) skripta) koji ne žele da linkuju sve vidžet programske alate, već više vole da šalju korisnički interfejs na neki drugi proces.

Izbor skripting jezika nije kritičan, pod uslovom da postoji puni Gtk2 spoj. Portovanje Guis-a na neki drugi skripting jezik trebalo bi da bude lako.

(Pre mnogo godina, bio sam zadovoljan korisnik Sun OpenWindows sistema s njegovim programljivim NeWS [vidžet] serverom. Još uvek mi nedostaje taj vidžet server (vidite poruku koju sam objavio oktobra 1993. na http://www.daa.com.au/~james/software/pygtk/ koja je kopirana na http://starynkevitch.net/Basile/NeWS_descr_oct_1993.html). Ne razumem zašto NeWS tim, koji je takođe verovatno dizajnirao Javu, nije razmotrio ideju da ugradi JVM u X11 server, kao standardnu X11 ekstenziju, a ugrađivanje programskog alata u Javu, kao što radi Swing, nije rešenje).

Sličan projekat je entity - vidite http://www.entity.cx/. Glavna razlika između entity i guis je u tome što je guis server (koji sluša komande preko cevi...), dok je entity skript mašina.

IRAF vidžet server - vidite http://iraf.noao.edu/iraf/web/projects/x11iraf/ ima slične ciljeve. I PicoGui http://picogui.org/ takođe je zasnovan na serveru.

XUL sistem Mozille (vidite http://www.xulplanet.com/) takođe opisuje interfejs sa XML.

(Prethodno Berlin, sada) Fresco server trebalo bi da bude CORBA server za vidžete - koji deluje kao da je skoro neaktivan. Vidite http://www.fresco.org/.

1.2 Uvod


Guis je komunikacija programa grafičkog korisničkog interfejsa s klijentskom aplikacijom (uz upotrebu zasebnih protokola). Aplikacija šalje zahteve za gradnju vidžeta Guisu (tako da su ovi zahtevi za Guis ulaz ) i obrađuje vidžet događaje koje pošalje Guis. Obično se Guis pokreće malom Pajton inicijalnom skriptom koja definiše proste funkcije i gradi neke vidžete. Zahtevi su Pajton fragmenti izvornog koda. Odgovori (tj. događaji koji se šalju iz Guisa aplikaciji) samo su neke poslate tekstualne linije (od strane nekog Pajton koda koji poziva guis_send).

Zapravo, Guis jako zavisi od GTK2, a manje zavisi od Pajtona. Kod je dizajniran tako da Guis bude lako prenosiv do bilo kog drugog prevodioca1 skripti koji može da proceni zahteve u tekstualnim stringovima, pod uslovom da je prevodilac spojen sa GTK2. Jedini razlog što koristim Pajton ovde jeste dostupnost skoro potpunog spoja Pajtona sa GTK2. (Inače bih preferirao neke druge skripting jezike). Da bi nas podsetilo da Guis koristi Pajton binarni sistem on se zove pyguis.

Od verzije 1.3 Guis je takođe povezan s Ruby. Vidite odlomak 4 ispod.

1.2.1 povratni pozivi


Inicijalna skripta (ili aplikacija) odgovorna je za instaliranje odgovarajućih povratnih poziva s primitivom poveži/connect (ili ekvivalentnim) skripting jezika (Pajton ili Rubi).

VAŽNO Povratni pozivi u Guis-u treba da budu robusni: povratni pozivi ne mogu da naprave neuhvaćene izuzetke (jer njih pokreće gtk_main_loop u Guis-u, izvan (Pajton ili Rubi) prevodioca. Aplikacije treba da obuhvate povratne pozive zajedno sa odgovarajućim mehanizmom (catch...) u skripti.

1.2.2 Inicijalna skripta


Obično Guis pokreće inicijalnu skriptu (u Pajtonu ili Rubi), koju prevodi skripting jezik pre nego što ona uđe u gtk_main_loop. Ova inicijalna skripta obično gradi vidžet i definiše neke funkcije specifične za aplikaciju (da implementira protokol odgovarajuć za vašu aplikaciju).

Inicijalna skripta pokreće se jednom. Označena je -s opcijom ili -scripter trikom. Pogledajte ispod 2.2 i glavnu stranicu.

Možete (ako je moguće) završiti svoju inicijalnu skriptu pozivom na gtk_main_loop kako je predviđeno (Pajton ili Rubi) GTK2 spojem. Pozivanje će učiniti da evaluacija zahteva bude pod boljom kontrolom i može da dozvoli izuzetke u povratnim pozivima (pogledajte svoju dokumentaciju o GTK spojevima koje koristite). Onda morate da eksplicitno izađete iz Guis-a (pozivajući primitiv izlaz/exit Pajtona ili Rubi) ili recite Guis-u (koristeći guis_main_loop_in_script) da pozivate glavnu petlju.

I dalje sam čvrsti protivnik neuhvaćenih izuzetaka u povratnim pozivima.

1.2.3 protokoli


Svaki zahtev poslat iz aplikacije Guisu treba da se završi sa dva uzastopna kontrolna karaktera za novi red kodirana u C kao \n\n ili novom stranicom (kodiranom u C kao \F, decimala 12).

Očigledno, zahtevi ne mogu da sadrže (unutra) dvostruki novi red koji je konvencija pogodna za većinu skripting jezika (uključujući i Pajton, Rubi, OCaml, Lua , Rep-Lisp, Slang...).

Zgodan način da se otklone grešake Guisovih inicijalnih skripti jeste da pokrenete pyguis s eksplicitnim FIFO ulazom: napravite ga s mkfifo / tmp/fifo, a zatim pokrenite pyguis -s yourscript -i /tmp/fifo-o -; u drugom xterm, pokrenite cat >> / tmp/fifo i ne zaboravite da završite svaki zahtev s duplim karakterom za novi red (tj. vraćanje).

Događaji ili odgovori poslati iz Guisa aplikaciji prosti su redovi (možda veoma dugi) koje se završavaju novim redom. Ne bi trebalo da sadrže nikakav kontrolni karakter (npr. novi red ili stranica). Zahtevi i odgovori su asinhroni (zahtev se može poslati bez ikakvih odgovora i obrnuto).

Ideja vodilja Guisa je da su ulazni i izlazni protokoli krojeni prema vašoj aplikaciji. Na ulaznoj strani (zahtevi vaše aplikacije Guisu) protokol je obično sačinjen od poziva određenim funkcijama definisanim u inicijalnoj skripti. Na izlaznoj strani (odgovori ili događaji iz Guisa vašoj aplikaciji) protokol je definisan slanjem (putem odgovarajućeg primitiva, obično guis_send, skripting jezika) proizvoljnih redova vašoj aplikaciji od povratnih poziva.

1.2.4 ostali programski alati (Qt3)


Bilo bi interesantno kada bismo imali sličan pristup sa QT3. Pokušao sam i ostavljeni su neki (loši, nepotpuni, čak i nemogući za kompilovanje) C++ kodovi pod direktorijumom bad_kt_stuff/ ovog Guisa. Slobodno možete ponovo da koristite ovaj kod (pod GNU licencom). Moj glavni problem bio je nedostatak dobrog spoja sa QT3 i problemi s tredovima (pre svega to što su tredovi skoro nekompatibilni sa ugrađenim Pajtonom).

1.3 Mali primer


U svrhu ilustracije, pretpostavimo da imamo aplikaciju koja izračunava zbir 2 integera i želimo da joj damo lep grafički interfejs koji sadrži dva (moguća za dalje editovanje) vidžeta tekstualnog unosa, dugme za odustajanje, i vidžet etiketu da prikazuje zbir. Slika 1: Jednostavan primer demo prozor

_____________________________________________________________________________________


Figure 1: Simple example demo window
_____________________________________________________________________________________


1.3.1 protokoli


Moramo prvo da razmotrimo poruke koje aplikacija šalje Guis-u. Treba najpre da pokrenemo interfejs (dajući mu neki lep naslov). Moraćemo da prikažemo zbir koristeći “prikažizbir”/displaysum i da prikažemo poruku o greški koristeći “prikažigrešku”/displayerror. I moramo da zaustavimo demo, putem funkcije stopdemo. Sve ove funkcije su Pajton funkcije definisane u fajlu inicijalne skripte.

Takođe treba da definišemo poruke poslate iz Guis-a nazad aplikaciji. Poslaćemo običan END za kraj, i složeniju poruku koja počinje sa ADD da zatražimo od aplikacije da napravi dodatak (prikazujući rezultat sa zahtevom “prikažizbir”/displaysum). ADD poruka treba da sadrži tekstualni sadržaj dva ulazna vidžeta. Budući da tekstualni sadržaj može biti bilo šta (čak može da sadrži kontrolne karaktere kao što je onaj za novi red) trebalo bi da bude kodiran. Mi koristimo C kao konvenciju kodiranja, tako da će obično poslati ADD "1" "3" ili čak ADD "\t1" "3" ako prva stavka počinje tabom3. Aplikacija je zadužena za proveru da li unosi sadrže validne brojeve.

Guis program server baferuje sve ulaze (Pajton zahteve) i izlaze (odgovore), čitajući i pišući u najkraćem mogućem roku.

Tipična razmena između aplikacije i Guis-a može biti ovakva: prvo aplikacija startuje i šalje.

start("pid 1234")

Onda Guis pokazuje prozor i pušta korisnika da vrši interakciju sa njim. Neke interakcije s korisnikom navode Guis da pošalje poruke kao što je

ADD "2" "5"

Na njih aplikacija reaguje sa

displaysum(2,5,7)

Kada korisnik zatvori prozor, Guis šalje

END

Na šta aplikacija reaguje sa

stopdemo()

I onda izlazi.

Kada se pokrene -T indikatorom, Guis otvara prozor da pokaže trag svih zahteva i odgovora (ovo je korisno za uklanjanje grešaka kod skripta i aplikacije):

_____________________________________________________________________________________


Slika 2: Prozor traga protokola
_____________________________________________________________________________________


1.3.2 inicijalna Pajton skripta



Pišemo malu Pajton inicijalnu skriptu. Poseban trik u Guis-u je da, ako je Guis pozvan imenom (tj. argv[0] u C načinu govora) zaključno sa -scripter, onda je sledeći (drugi) parametar ime inicijalne skripte.

#! /usr/bin/env pyguis-scripter
# file guisdemo_script in -*- python -*-

Stoga možemo početi našu skriptu takvim trikom, naša inicijalna skripta može biti pozvana od strane bilo kojeg pyguis-scriptera koji se može naći u našem $PATH. Činimo ga simboličnim linkom za pyguis izvršni fajl.

Moramo da kažemo Pajtonu da koristiti gtk modul (koji obezbeđuje pygtk) i guis modul (ugrađen u pyguis).

import gtk
import guis

Potom, moramo da definišemo povratni poziv koji koristi dugme “prekini”/quit; on samo šalje END string aplikaciji.

def end_cb(*args):
    guis.guis_send("END")

Takođe definišemo povratni poziv koji se koristi kada su ažurirani tekstualni unosi. On koristi primitiv guis.to_guis da konvertuje C string u njegovu tekstualnu predstavu, ali mogli smo da koristimo i Pajton repr funkciju.

Treba da definišemo startnu funkciju, koju je aplikacija pozvala u svom prvom zahtevu, da bismo izgradili grafičke vidžete i povezali ih s povratnim pozivima. Ona prvo gradi prozor i njegov ugrađeni vertikalni okvir (koristeći GTK2 pozive na Pajtonu):


def start(welcomsg):
    global window, xent, yent, sumlab
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.set_title("Guis Demo")
    vbox = gtk.VBox(gtk.FALSE,2)
    window.add(vbox)

Onda gradi ostale vidžete (detalji ovde obrisani, pogledajte izvor fajla guisdemo_script). Najzad, pravi dugme “odustani”/quit, povezuje ga s povratnim pozivom end_cb, dodaje ga u vbox i pokazuje sve prozore:


    # ...
    quitbut = gtk.Button("quit")
    quitbut.connect("clicked", end_cb)
    vbox.add(quitbut)
    window.show_all()

Treba da definišemo funkciju “prikažizbir”/displaysum.


def displaysum(x,y,sum):
    sumlab.set_markup(('<i>%d</i> + <i>%d</i>' % (x,y))
                       + (' = <big>%d</big>' % sum))

Treba da definišemo funkciju “prikažigrešku”/displayerror. Da biste izbegli zbrku sa Gtk2 (pango obezbeđen) oznakama nalik XML, konvertujemo poruku u njenu XML predstavu (tj. koristeći < za < itd...)="" koristeći="">guis.xml_codedprimitive.


def displayerror(message):
    sumlab.set_markup('<b>ERROR:</b> '
                      + (guis.xml_coded(message)))

Takođe je potrebna stopdemo funkcija (pogledajte izvorni fajl).

1.3.3 klijent aplikacija


Pretpostavljamo da je klijent aplikacija napisana u C. Možete je kodirati na bilo kom jeziku koji je u stanju da komunicira na kanalima na tekstualni način. Ovde komentarišemo delove fajla guisdemo_client.c. Ne morate da povežete nikakvu Guis specifičnu biblioteku s njim!

Objavljujemo veliki linijski bafer, i fajlove zahteva i odgovora. Takođe bismo mogli da koristimo glibc specifičnu getline funkciju koja dinamički dodeljuje bafer.


  char linbuf[1024];
  FILE *toguis = stdout;
  FILE *fromguis = stdin;

U početku, želimo da pošaljemo zahtev kao start("guis demo"). Zahtevi mogu počinjati komentarom koji se koristi kao pomoć u identifikovanju poruka o greškama 4.


  fprintf (toguis, "#initial start\n"
           "start(\"pid %d\")\n\n",
           (int) getpid ());
  fflush (toguis);

Ne zaboravite da vrlo često praznite svoj kanal za zahteve, i da započnete svaki zahtev sa dva nova reda.

Naravno, treba nam petlja da pročitamo poruke o događajima (ili odgovorima) iz Guisa - svaka od njih je jedna (ponekad veoma duga) linija završena jednim novim redom.


    if (!strncmp (linbuf, "ADD", 3)) {
      int x=0,  y=0,  pos=0;
      if (sscanf (linbuf, "ADD \"%d\" \"%d\" %n", 
                  &x, &y, &pos) > 0 && pos > 0) {
        fprintf (toguis, "#good sum\n"
                 "displaysum(%d,%d,%d)\n\n",
                 x, y, x + y);
      } else {
        fprintf (toguis, "#bad input\n"
                 "displayerror(\"bad input\")\n\n");
      }

Ako red odgovora počinje sa ADD skeniramo ga na odgovarajući način i tražimo da prikaže fensi red kao “2 + 3 = 5”, inače (loš sken zbog ne-numeričkih unosa) prikazujemo “nevažeći unos”/invalid input.


    if (!strncmp (linbuf, "ADD", 3)) {
      int x=0,  y=0,  pos=0;
      if (sscanf (linbuf, "ADD \"%d\" \"%d\" %n", 
                  &x, &y, &pos) > 0 && pos > 0) {
        fprintf (toguis, "#good sum\n"
                 "displaysum(%d,%d,%d)\n\n",
                 x, y, x + y);
      } else {
        fprintf (toguis, "#bad input\n"
                 "displayerror(\"bad input\")\n\n");
      }

Ako je odgovor END, lagano stanemo (slanjem stopdemo() zahteva i izlaskom):


    } else if (!strncmp (linbuf, "END", 3)) {
      fprintf (toguis, "#stop\n" "stopdemo()\n\n");
      fflush (toguis);
      sleep (1);
      exit (0);
    } 

Nakon upozorenja o neočekivanim ulaznim redovima, ispraznimo kanal za zahteve i okončamo petlju.


    fflush (toguis);
  }; // end of while feof

Normalno, petlja nikad ne bi trebalo da bude okončana, pošto bi naša guis pajton skripta trebalo da signalizira prekid sa END (obrađeno gore).

2. Napomene

2.1 Instaliranje Guis-a


Treba vam Pajton (2.2.x ili 2.3.y sa http://www.python.org/), GTK (2.2 ili neki bolji sa http://www.gtk.org/)i PyGTK (1.99.18 ili 2.0 ili neki bolji sa http://www.daa.com.au/~james/software/pygtk/) za izgradnju pyguisa (Pajton verzija Guis-a). Treba vam Ruby (1.8.x) sa http://www.ruby-lang.org/ i ruby-gnome 0.9.1 ili kasniji sa http://ruby-gnome2.sourceforge.jp/ za izgradnju ruguisa (Rubi verzija Guis-a). Napravio sam Pajton-2.255 bez tredova, koji radi sa Guis-om. Ja koristim GNU gcc (3.3) i GNU make (3.80). Možete da dodate fajl local_local.mk koji sadrži definicije za vašu instalaciju, kao što su PREFIX=/usr, CC=gcc-3.3, PYTHONCFLAGS=-I/usr/include/python2.2 ili PYTHONLDFLAGS=-lpython2.2 RUBY=ruby itd... Mozete čak i da uredite Makefile.

Najpre konfigurišite, ili sa make config ili sa ./Configure skriptom. Pokrenite ga sa -help da dobijete informacije o upotrebi.

Zatim pokrenite make (napravi) i onda make install (napravi instalacju) (što obično zahteva da bude koren).

Možete da izgradite samo Ruby verziju sa make ruguis ili samo Pajton verziju sa make pyguis.

Da biste pokrenuli demo, verovatno je potrebno da samo dodate . ili Guis izvorni direktorijum na vaš $PATH pre pokretanja guis_demo.sh ili možete da pokrenete guisdemo_script -p guisdemo_client -T command. use guisdemo_rubyscript da pokrenete Ruby verziju.

2.2 Aktiviranje Guis-a


Pogledajte glavnu stranicu u izvornoj distribuciji za kompletno uputstvo o aktiviranju ili pozovite binarni kod opcijom --pomoć/help.

Guis se obično aktivira kao pyguis komanda, ili indirektno kao pyguis-skripter, ako ga startuje njegova inicijalna skripta.

Guis se može pokrenuti na slejv način (nakon što je startovana aplikacija) određivanjem njegovog ulaznog (input) i izlaznog (output) kanala (putem -i i -o opcija). Možete navesti deskriptore ili puteve kao kanale.

Guis se takođe može pokrenuti kao master, dajući aplikaciji komandu kao parametar sa -p. Obično treba da citirate ovaj parametar (zbog vaše ljuske), osim ako komanda nema spejsova!

-T opcija je interesantna za pokazivanje razmene između guis-a i njegove aplikacije u posebnom prozoru Ovo je veoma korisno za otklanjanje grešaka u vašoj inicijalnoj skripti ili aplikaciji.

-D opcija (onemogućena sa -DNDEBUG compile-indikatorom) pokazuje brojne informacije o uklanjanju grešaka (da bi se debagovao sam pyguis).

-L opcija zapisuje sve zahteve u log fajl.

-I ili - input-enconding opcija podešava ulazno kodiranje (u skladu sa GLib2 na ulaznim kanalima). Isto tako, -O ili -output-encoding za izlazno kodiranje.

3. Guis za Pajton

3.1 Aktiviranje


Kao i obično, vidite odlomak 2.2 iznad.

3.1.1 dodati Pajton primitivi


Abecednim redom, ovde su imena umrežena u guis-ov ugrađeni Pajton modul. Treba, naravno, da naučite i koristite module koje j dao pygtk da biste zapravo izgradili bilo kakav GTK2 vidžet! Ne treba eksplicitno da pozovete gtk_main_loop iz Pajtona, jer ga već zove pyguis.

3.1.2 end_of_input_hook


Nekim parametrom koji se može pozvati, podešava kuku koja se poziva na kraju ulaza. Uvek vratite prethodnu kuku (čak i bez ikakvih parametara). Takođe verovatno morate da podesite i vreme ograničenja koristeći end_timeout naveden ispod.

3.1.3 end_timeout


Dobijte (bez parametara) ili podesite (sa integer parametrom) vremensko ograničenje u milisekundama nakon kojeg pyguis izlazi na kraju ulaza. Korisno je u kombinaciji sa end_of_input_hook iznad.

3.1.4 guis_send


Pošaljite string parametar na izlaznom kanalu aplikacije. String ne bi trebalo da sadrži kontrolne karaktere (ovo se ne proverava), inače bi aplikacija mogla imati teškoća dok ga skenira. Novi red se dodaje po potrebi. (Možete koristiti mnoge Pajton pakete za izgradnju poslatog stringa; npr. mogli biste da šaljete XML stvari).

3.1.5 main_loop_in_script


Dobijte (bez parametra) ili podesite (parametrom istinite vrednosti) indikator koji govori Guis-u da je glavna petlja gtk_main pozvana od strane inicijalne skripte.

3.1.6 nb_replies


Dobijte (bez parametra) broj poslatih odgovora (redovi događaja poslatog aplikaciji). Mogli biste da podesite ovaj broj integer parametrom (ali ne vidim razlog da to radite).

3.1.7 nb_requests


Dobijte broj obrađenih Pajton zahteva. Možete da podesite ovaj broj integer parametrom (ali ne vidim razlog da to radite).

3.1.8 pipe_check_period


Dobijte (bez parametra) ili podesite (integer parametrom) period u milisekundama (trebalo bi da bude od 0 ili 50 do 10.000) za proveru okončanja aplikacije (u master modu). Ovo je korisno sa end_of_input_hook iznad.

3.1.9 to_guis


Konvertujte objekat (ili mnogo njih, smatrano kao -torka) u string koji se može slati aplikaciji koristeći sledeći algoritam:

3.1.10 xml_coded


Brzo konvertujte Pajton string ili unicode u njegovu XML predstavu (tako se string od 3 karaktera a<b konvertuje u string od 6 karaktera a&lt;b) sa prekidnim znakovima prema XML potrebama: Rezultat guis.xml_coded je string sa samo ASCII karakterima koji se mogu štampati (kodiran 32-126).

4. Guis sa Ruby


Guis je portovan sa Ruby 1.8. Pogledajte http://www.ruby-lang.org/ za više informacija o Ruby-ju. Binarno ime je ruguis (uključujući ruguis-skripter trik) i ima istu invokaciju kao pyguis (Pajton) verzija. Ruby port je u fajlu ru_gguis.c

Ovaj port koristi ruby-gnome2 spoj GTK2. Vidite http://ruby-gnome2.sourceforge.jp/.

Demo radi na Ruby način - on je u fajlu guisdemo_rubyscript i može se pokrenuti ruguis -T -D -s guisdemo_rubyscript -p guisdemo_client (pod uslovom da je . u vašem $PATH).

4.1 otvorena pitanja


Ne znam da li ugrađeni modul može da ima virtuelne promenljive (definisane C funkcijom rb_define_virtual_variable u Ruby fazi izvršavanja).

Voleo bih da odštampam više (npr. trenutno okruženje u debug_extra), ali ne znam kako da ga kodiram.

4.2 Ruby API


Postoji ugrađeni Guis Ruby modul. Sadrži guis_send primitiv da bi poslao nazad string aplikaciji.

$guis_nbreq, $guis_nbsend i $guis_pipecheckperiod su (globalne) virtualne promenljive (implementirane putem C funkcije rb_define_virtual_variable).

$guis_main_loop_in_script globalna je promenljiva koja kada se podesi na pravu vrednost izbegava pozivanje gtk_main nakon tumačenja inicijalne skripte (koja bi stoga trebalo da eksplicitno poziva Gtk.main).

Konverzija u XML zapis obavlja se to_xml metodom koja se doda postojećoj string klasi.

Konverzija u zapis nalik C (poput to_guis u Pajtonu iznad 3.1.9) vrši se to_guis metodom sa ugrađenim implementacijama za matrice, stringove, integere, brojeve s pokretnim zarezom, simbole. Korisnik može da doda i druge metode postojećim klasama Ruby kodom kao što je...


ExistingClass.class_eval { 
  def to_guis
    return "result"
  end 
}

Onda je kraj ulazne kuke podesiv sa


Guis::on_end_of_input do |timeout|
  # user end input hook
done

Da biste uklonili kraj ulazne kuke, samo uradite


#removing end of input hook
Guis::on_end_of_input

5. Eksperimentalna i nepotpuna Sleng verzija Guis-a koja koristi slgtk


Pogledajte http://s-lang.org/ za Sleng prevodioca. Pogledajte http://space.mit.edu/cxc/software/slang/modules/slgtk za Slgtk koji spaja Sleng za Gtk.

Guis port za Sleng je nepotpun i jedva testiran. Pogledajte izvorni kod za više detalja. Povratna informacija je dobrodošla.

6. Povratna informacija

6.1 Povratna informacija dobrodošla


Molimo vas da šaljete komentare, kritike, predloge i dopune na basile_NOSPAM@starynkevitch.net.invalid (ali sklonite _NOSPAM i .invalid iz adrese) pomenuvši guis u naslovu. Slobodno sugerišite nove funkcije. Pišite mi o bilo kakvom uspehu (tj. Guis upotreba) u vašim aplikacijama.

Zainteresovan sam za povratne informacije (na ovoj stranici guisdoc).

Da li vam je ova stranica:
veoma zanimljiva (1); zanimljiva (2); nezanimljiva (3); veoma nezanimljiva (4)

6.2 Dnevnik promena


verzija 1.6
(30. decembar, 2004.) - manje čišćenje koda

verzija 1.5
(10. maj 2004.) - portovan sa Gtk2.2, dodat Sleng preliminarni port (i nefunkcionalni port na Perl)

verzija 1.4
(5. septembar 2003.) bugfix (bafer koristi GString) i dodat guis_main_loop_in_script), uz podršku i Pajton2.2 i Pajton2.3.

verzija 1.3
(2. septembar 2003.) sadrži eksperimentalni Ruby port (i upozorava na izuzetke u povratnim pozivima). verzija 1.2
(31. avgust 2003.) manje popravke: samo dodat guis.kml_coded primitiv i ažuriran demo i dokumentacija.

verzija 1.1
(30. avgust 2003.) napraviljen veliki prelaz na Pajton korišćenjem PyGTK; prethodne verzije koristile su Lua).

verzije <=>
(22. mart 2003.) i starije bile su zasnovane na Lua (sa GTK spojem za Lua generisanim od strane CommonLisp skripte).

_____________________________________________________________________________________


1

2

3

4

5

6



Published (Last edited): 28-09-2012 , source: http://starynkevitch.net/Basile/guisdoc.html