IRC-Galleria

arafat

arafat

Pekka Puupää

Selaa blogimerkintöjä

ääliö ohjlemoi, olio koodaaTiistai 28.09.2010 06:25

[ei ihan ehtinyt maanantaiksi, mutta saahan olla kiitollista että saitte ylipäätään]

olipa muutosta dgd:ssä (vituiks pantu kaikki) hae vanha 1.3 versio, joka toimii myös amigalla kun open-soruce -sohlaajat on menny ääliöimään koodin ja lakkauttaneet cygwin,mingw tuen ja siirtyneet johonkin msvc expressionistiseen taidesuuntaan. vanhan version saapi osotteesta: http ://dgd. is-here. com/ftp/dgd/ (fixi noi välilyönnit). felix groesse lupaa että dgd ja hydra on yhteensopivat, mutta kun toi mun dgd on 1.3 niin voi olla että on jotain uusia functiooita driverissä, joita tässä ei vielä esiinny. tämä on avaimet käteen ja telnetillä sisään versio.

HUOM! jos tai kun käynnistät dgdn näilllä tiedstoilla enimmäistä kertaa palomuurisi kirkasee että DGD yrittää aukoa reikiä sun palomuuriin, ja sano että haluatko estää ulkoa tai networkista (tarkottanee localia) niin salli vaan localit reijät tai älä auo reikiä ennenkun olet kattonut että, saat portin 6047 tukittua, jos käytät sitä mikä on mud.dgd -conffissa oletusportti, porttia kannattaa tietty vaihtaa johonkin itellel mukavampaan näitä tallasia vakio-portteja, mitä oletuskonffeissa esitellään yleensä kaikki murto-ohjlemat ensimmäisenä on sorvaamassa, vaikka tällä nyt ei tässä muodossa pääsisikään varsinaista vaihinkoa tekemään... tosin tämä on 1.3 ja jakelussa on jo joku 1.4.1 ja siinä on esitelty ääliöntiin k&r c:stä siirtymisen myötä varmaan enemmän reikiä ja bugeja eli ajakaa tätä vaan (pois sourcefogesta tommonen not-so-open-source dgd1.4c+++ mitä pitää kääntää msvcexpressilla!)

kopioi alkuperänen mud-hakemisot huitsin-mudiin ja tee:
\kernel\
\kernel\include\
\kernel\sys\
\kernel\lib\
-hakemistot dgd-juureen c:\dgd\mud\ ja tiedostot ovat...

\include\std.h
\sys\driver.c
\lib\auto.c
\lib\telnet.c

(eli esim. c:\dgd\mud\kernel\sys\driver.c)

LUE: ensin kaikki, ennekun kirjotat telnettiä ja painelet enttereitä! sielä on tietoturvaan liittyvä kommentti, johon on syytä kiinnittää huomiota ihan vaan huvin vuoksi että tietää milloin siitä voi olla hyötyäkin.

commandlinelta: bin\dgd mud.dgd - c:\dgd -hakemistossa tai spectacular-spinning-jump-kickkiä mud.dgd:lle ja browsaa aina ajavaksi ohjelmaksi se dgd.exe.

sitte vaan: commandlinelta tai jostainn,

telnet localhost 6047

ja kovaa typoilua ja kun tekee mieli otta taukoa tai sorvata parseria niin pain q[enter]. kyl' on help0poa ja kivaa, kun on hyvät neuvot ja taitava ohjaaja *struttia ja kieliposkia*:P

ne on periaatteessa siinä jäjrestyksesä kun ne käännetään, kun dgd käynnistyy. totakai suosittelisin että muuttaa ton ääliömäisen _F_create -funcin ihan onrmaaliksi creator tms nimeksi ja vaihtaa ton mud nimen tilalle OmaLIB tai joku Hottepedi-dyntakoo-php-6-0.eli_lumiera_match_dgd.ULtraLIRBatin. muuttaa ton sys -rakenteen niin että viepi mud/lib/rojut mud/sys/lib (sitäkin järkevmäpi voi olla) alle ja rakenteelee isoimmat driverin funcit omiin tiedostoihinsa ja käytelee includea eikä kirjota sellasia 1450k isoja sourcefileitä. sitte näpää jotain execeliä sen verran tai jotain ietä että pääsee käsiksi noihin msfc*)-möhköihin niin voi rakentaa kivaa käyttöliittymää missä on kaikkia hienoja hakemistopuita ja saa väännellä parametreja vaan hiirellä suoraan ja vetää ja pudottaa oliota kontaineriin niin ei tarvi ohjelmoida yhtään sekun vaan kopioi tiedostoa piakata toiseen. jos käntää ton dgd vielä ite niin lisää siihen ton groessin ite tekemän regexin, vaikka toi parse_string ajaa kyllä saman asian, eli en ymmärää miks se sellaesn paketin on tehny. ja hyödyllinen homma olis panna toi paketti millä voi luoda ulospäin yhteyksiä niin tällä voi tehä sellasen proxin mitä käyttää mudclientillä niinn saa aika toisenlaista puhtia mudaukseen kun voi tällä (dgd) vaikka ylläpitää useamman pelaajan kanssa p2p periaatteilla karttoja yllä ettei juokse punaseen leijonaan tai johonkin trogoloidiin kun on menossa norse-villageen ripeemään Pelitaria!

--
--tässä on c:\dgd\mud\include\std.h, jonka kaikki (myös driver.c) includee)

/* file: mud/include/std.h */

# define TRUE 1
# define FALSE 0

#define DRIVER find_object("/kernel/sys/driver")

--
-- tämä on mud\kernel\sys\driver.c

void _F_create() {
::send_message("_F_\r\n");
write_file("/boot.txt", "_F_create\r\n");
}

send_message(string s) {
::send_message(s);
}

void initialize() {
send_message("driver: initialize\n");
write_file("/boot.txt", "initialize()\r\n");
}

void restored() {
}

string path_read(string path) {
return "";
}

string path_write(string path) {
return "";
}

object call_object(string objname) {
return nil;
}

int touch(object obj, string function) {
return 1; /* 40 */
}

object inherit_program(string file, string program, int priv) {
return compile_object(program);
}

mixed include_file(string file, string path) {
return path+"/"+file; /* 50 */
write_file("/incl.txt", path+"/"+file+"\r\n");
}

void recompile(object obj) {
}

object telnet_connect(int port) {
return clone_object(compile_object("/kernel/lib/telnet"));
}

/* you can make your own telnet protocol to support ansi iwth this, if you don't want to buid the ansi-pkg... in kernel */
object binary_connect(int port) {
return nil;
}

void interrupt() {
shutdown();
}

void compile_error(string file, int line, string err) {
send_message("compile error: "+file+" "+line+": "+err+"\r\n");
write_file("/compi.txt", "compile error: "+file+" "+line+": "+err+"\r\n");
}

void runtime_error(string error, int caught, int ticks) {
send_message("error: "+error+"\n");
write_file("/runti.txt", "error: "+error+"\r\n");
}

void atomic_error(string error, int atom, int ticks) {
}

string object_type(string file, string type) {
return type;
}

int compile_rlimits(string objname) {
return 0;
}

int runtime_rlimits(object obj, int stack, int ticks) {
return -1; /* 0 compile error will follow */
}

void remove_program(string objname, int timestamp, int index) {
}

--
-- auto.c, jonka siisi inheroi kaikki objectit patisi mud\kernel\sys\dirver.c

/* file: mud/kernel/lib/auto.c
*/

/* create() is defined in mud.dgd config file as _F_create... silly!
*/
void _F_create() {
DRIVER->send_message("create in auto.c\n");
}


static object compile_object(string file, string str...) {
return DRIVER->compile_object(file, str);
}

--
-- ja tässä tälla telnet.c

/* file: mud/kernel/lib/telnet.c
*/

void _F_create() {
DRIVER->send_message("telnet: new telnet object: first call\n");
::_F_create(); /* demo inheritance (and proper) use of create with super-classes */
}

int open() {
DRIVER->send_message("telnet: connect\n");
send_message("telnet: connect\n");
send_message("[q]>");
return 0;
}

void close(int flag) {
if (flag) {
send_message("telnet: quit (destruct_object)\n");
DRIVER->send_message("telnet: quit (destruct_object)\n");
} else {
send_message("telnet: peer closed (most prob)\n");
DRIVER->send_message("telnet: peer closed (most prob)\n");
destruct_object(this_object());
}
}

void receive_message(string message) {
DRIVER->send_message("telnet: msg_reicived:");
DRIVER->send_message(message);
DRIVER->send_message("\n");

send_message("You sent message:\n");
send_message(message+"\r\n[q]>");

if (message == "q")
destruct_object(this_object());
}

void message_done() {
DRIVER->send_message("telnet: msg_done()\n");

/* !note! if you do this_object()->send_message() you'll end up an infite recursion! */
}

void open_datagram() {
DRIVER->send_message("telnet: open_udp\n");
}

void receive_datagram(string packet) {
DRIVER->send_message("telnet: udp_recieved\n");
DRIVER->send_message(packet);
DRIVER->send_message("\n");
}

--
-- mud.dgd -conffi säilyy siis ennanllan ja sillä voi käynnistää näillä rakennetun palvelun. huomaa että telnet objecti käännetään joka kerta uudestaan, jonka johdosta sitä voi siis näppärästi lennossa korjialla. sitä ennen kannattaa ehkä kuitenkin tutustua ja laitta driver.c -tieostossa, kuntoon compile_error, runtime_error niin että niissä on päivämäärä tai ainakin kellonaika ja pari previous_objectia että näkee mistä kutsut virheisiin tulevat. mitään staattisia tai muita koodinsuojausmekanismeja ei ole käytetty edes drivier.c :ssää eli kannttaa tutustua sellaiseenkin. tuollasia DRIVER->send_message() -hommia ei ylipäätään pitäs oikein olla olemassakaan, mutta tahdoin pitää tämän niin yksinkertaisena ,että kuka tahansa voi tehdä mitä tahansa ja ihan ground up tai from scratch. noita fileitä saa vapaasti käyttää ja levittää ihan niinku lystii. saa sanoa että on arafatilta ottanu mallia jos ihan ummikkona huomaa että noilla tekee, jotain, mutta sekin on vapaaehtosta. saa tehä vaikka rahaa, jos se vaan dgd-lisenssien puolesta on mhollistaa, tai jos porttaat johonkin toiseen ohjlmemaan nin sitte sen lissenssi, noi gpgt ja muut on niin monimutkasta että en sellasia käytä.

arafat servant (RatLIB tulee, tai sitte ei. pitäs ensin ne postikortit...)

*)ms foundation classes ei taida olla mitä ajan takaa, mutta kun en noista tiedä. saa noi GUIt tongittua kun osaa sorvailla, mun mielestä tai riittää kun saa canvaasin auki niin sittehän siihe voi ympätä mitä vaan. ite pusaan GUIt VB4 kanssa niin en tiedä ,) kai tohon dgdhen vois ympätä tecgrafin IUPin(** ja kietasee sekaan vielä CodeMAXin niin onkin jo sellanen alusta että voi melkein pudottaa pois kaikki muut idet ja pideet...

**)IUP is a portable toolkit for building graphical user interfaces. It offers APIs in three basic languages: C, Lua and LED.IUP is free software, can be used for public and commercial applications.

Etkö vielä ole jäsen?

Liity ilmaiseksi

Rekisteröityneenä käyttäjänä voisit

Lukea ja kirjoittaa kommentteja, kirjoittaa blogia ja keskustella muiden käyttäjien kanssa lukuisissa yhteisöissä.