Clipper, CCC

Postfix függvényhívás

Fórumok

Volt már szó róla kb. egy éve, hogy talán érdemes volna megcsinálni a postfix függvényhívást. Hát itt van. Két új szabályt vettem fel a Lemon nyelvtanba:

  
    expr ::= expr : : func ( parlist )
    expr ::= expr : : func         

A postfix függvényhívásból ugyanaz a kód generálódik, mint a nyíl jobb oldalán álló hagyományos függvényhívásból.

  
    x::func(a,b,c)  ->  func(x,a,b,c)
    x::func         ->  func(x)

A postfix függvényhívás operátora a '::'. Egy-karakteres operátor nem lehetséges, mert már minden szóbajöhető karakter foglalt ('.' a névtér határoló, ':' a metódushívás). De nem olyan rossz ez a '::', hasonlít a metódushíváshoz, de mégis meg lehet különböztetni.

A ::-tól balra levő akármilyen kifejezés (precedencia!) lesz a ::-tól jobbra álló akármilyen (pl. névtérből vett) függvény első paramétere, miközben az esetleges többi paraméter eggyel hátrébb csúszik. Mintha minden függvény az első argumentumának a metódusa volna.

Példa:


#define OGGNAME1(x) strtran(atail(split(x,dirsep())),".ogg","")
#define OGGNAME2(x) (x)::split(dirsep())::atail::strtran(".ogg","")

Ezek a makrók egy ogg fájl teljes specifikációjából kiveszik a path és kiterjesztés nélküli fájlnevet. (Persze más eszközök is volnának erre, ez csak egy példa.) A fájlspecifikációt felvágja a dirsep-eknél, a keletkező tömbből veszi az utolsó elemet, abból kihagyja az .ogg kiterjesztést. Az első makró hagyományos, a második postfix függvényhívással van megírva.

Ellene szól: új szintaktika, kicsivel hosszabb kód, ügyelni kell a precedenciára.

Mellette szól: balról jobbra olvasható kód, kevesebb távoli zárójelpár.

Megjegyzés: Természetesen a függvényeknek csak egy implementációjuk van, ami azonban kétféle szintaktikával is meghívható. A fordító kiegyenlíti a különbséget, ezért a hatékonyság is egyforma.

frontend programozás

Fórumok

Linuxon frontend programok százait használjuk. Csak egy példa a műfajra a gnome-ppp, ami a parancssoros wvdial elé rak GTK UI-t.

A CCCDIR/tutor alatt van két új Jáva terminálos demó, amik a vorbiscomment-hez és az ogg123-hoz adnak grafikus interfészt (oggedit, oggplay). Persze az oggplay nem szól jobban, mint a parancssoros ogg123:) csak mutatja, hogyan kell ilyesmit csinálni CCC-ben.

Set parancsok

Fórumok

Azt tapasztalom, hogy a set parancsok vészes hirtelenséggel nagybetűsek lettek, eddig xcommand volt mind, most pedig command-dá változtak. Ennek van valami konkrét oka?

w

Elszáll a terminál libxcb-vel

Fórumok

terminal.exe: ../../src/xcb_lock.c:33: _XCBUnlockDisplay: Assertion `xcb_get_request_sent(dpy->xcb->connection) == dpy->request' failed.Úgy lehet ilyet kapni, hogy a maskban az F4-gyel kijelölt területet jobbra-balra növelem-csökkentem. Hasonló hiba jön a z-ből is, bár ritkábban. Következmény: Hardyn nem futnak a karakteres CCC programok.

Háttérinfó:

The XCB library provides an interface to the X Window System protocol, designed to replace the Xlib interface. XCB provides several advantages over Xlib:

* Size: small library and lower memory footprint
* Latency hiding: batch several requests and wait for the replies later
* Direct protocol access: one-to-one mapping between interface and protocol
* Thread support: access XCB from multiple threads, with no explicit locking
* Easy creation of new extensions: automatically generates interface from machine-parsable protocol descriptions

Ez egy új fejlemény. A Feistyben benne vannak a libxcb csomagok, de nincsenek telepítve. A Gutsyban nem tudom mi a helyzet, nem vettem észre hibát, de nem is használtam túl sokat (és most éppen lecseréltem Hardyra, tehát nem is tudom megnézni). A Hardyban rátértek a libxcb használatára. Rendkívül nagyszerű, csak nem kompatibilis hátrafelé.

Git(t)egylet? :)

Fórumok

Sziasztok!

Nagyon hype-olják mostanában ezt a git-et. Megnézegettem, és azt kell mondanom, hogy tényleg okos cucc. mrev, nem tudom, találkoztál-e már vele, de lehet, hogy érdemes lenne megfontolni a használatát. Gyakorlatilag semmi veszteség nem lenne a subversion-höz képest, viszont lehetne nyereség a közösségnek.
Én azt hiszem, azt fogom csinálni, hogy először a céges SVN repót átteszem Gitbe, és megnézem, hogy igaz-e, hogy ez egy szinte észrevétlen átállás. Ha igen, akkor átteszem a ccc-contrib repót is.
Esetleg van valakinek valami tapasztalata ezügyben?

w

Asszociatív tömb

Fórumok

function main()
local hash:=simplehashNew()

    hash:set("próba","szerencse")
    hash["vanaki"]:="forrón szereti"
    
    ? hash["próba"]+="!" // szerencse!
    ? hash:get("vanaki") // forrón szereti

SQL2 table-sequence összekapcsolás

Fórumok

Ha az ember egy létrehozott szekvenciát egy konkrét táblával össze akar kapcsolni, ezt jelenleg csak manuálisan tudja megcsinálni vmi sql client/manager programmal.
Nem lehetne ezt leegyszerűsíteni úgy, hogy a szekvenciát a tds-ben definiálnánk, a
column-hoz default-ként hozzárndelnénk?
Ezután a tableentity:create metodus a táblával egyidőben létrehozhatná a szekvenciát is és mindjárt hozzá is rendelhetné a megfelelő oszlophoz.
Valami ilyesmire gondoltam:

name: testdata.a
version: "bt2tds 1.0.01"

table: konto.a

column: ID N4 d=seq_a
column: NAME C10 nn
column: VALUE N19.2
column: DATUM D
column: FLAG L

primkey: ID

index: name(NAME)

sequence: name=seq_a min=1 max=9999999 inc=2

Nagyon elvetemült gondolat?

Dinamikus jttabpane

Fórumok

Olyan erkölcstelenségre vetemednék, hogy jttabpane-be röptében tenném be és venném ki a füleket. Perpill erre nem alkalmas ő, mert elég statikusan konstruálódik. Vagy csináljak ablakokat?

w

rejtéjes prtsc

Fórumok

Régi clipper-es programom évek óta gond nélkül működik hálózatban, több felhasználós módban. Az egyik PC-t szeptemberben lecseréltük egy AMD Athlon 64 X2-re, Windows XP prof.-ot kapott. Novemberben a következő jelenség állt elő: a program elhagyásakor tök sötét képernyő (még kurzor sincs!) mellett az otthagyott képernyőt kezdi nyomtatni a nyomtató, de vég nélkül. Nincs beragadt billentyű! Ugyanez a program a másik terminálon nem okoz ilyen jelenséget, függetlenűl, hogy win 98, vagy XP fölött fut. Tehát a programot, sőt az op. rendszert is kizárnám, mint okozót. A hardverre sem gondolok komolyan, mert hasonló gépen, máshol nincs ilyen gond. Vírust nem találtam. NOD-al vizsgáltam. A BIOS-ra gyanakszom, de ahhoz nem igen értek. Ja! Megpróbáltam, format c:, WIN XP újratelepítés. 3 óráig nem csinálta, na meg szeptembertől-novemberig.