TCH (statz) | #1, Főfasz (10443) |
1152 | #2510 | ^ | Idézet | Sat, 13 Apr 2013 02:42:24 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
Köszi, ezt én is tudtam... Na, ez már hasznosabb volt, valószínűleg az Amigás SAS C eléggé custom egy darab, szóval lehet. Ehun a teljes forrás. Viszont még mindig nem tudom, hogy azt a részt akkor hogy írom át Pascalba. :P |
saxus (statz) | #9, Agyfasz (419) |
258 | #2511 | ^ | Idézet | Sat, 13 Apr 2013 04:03:26 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
Te kecskebaszó! Az idézett kódban honnan a halálból került oda a ; ? Az eredetiben nincs ott, a CreateExtIO kimenetét castolja.TimerIO = (struct timerequest *) CreateExtIO( timerport, sizeof( struct timerequest ) ); if (TimerIO == NULL ) |
TCH (statz) | #1, Főfasz (10443) |
344 | #2512 | ^ | Idézet | Sat, 13 Apr 2013 04:12:15 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
Nabazdmeg...azt a szart én raktam oda, mert azt hittem, hogy lemaradt onnan a forrásban...ezért imádom a C-t, plz magyarázd már el, hogy ott minek typecastol, meg egyáltalán egy structot minek typecastolni, pláne minek a saját tipusára typecastolni, de főleg hogy a bubánatba' lehet egyáltalán typecastolni... |
saxus (statz) | #9, Agyfasz (419) |
614 | #2513 | ^ | Idézet | Sat, 13 Apr 2013 08:15:06 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
C-ben te a memóriával azt csinálsz, amit akarsz. Ha te ugy dontesz h az a void* valojaban egy KutyaFasza* struct, akkor az. Vagy Ld. Union (Avagy polimorfizmus in da szi vaj): egy Union belul tudsz definiálni tobb structot is, mindig a legnagyobb lesz a mérete. Definialsz pl egy uniót az ipv4es címnek, egyik nézete egy char a, b, c, d hol allo struktúra, masik nézete meg egy int. Ha kiiratod használod a bytenkent bontott format, ha dolgozol vele es nem kell bitmaszkolasokkal buzulni ha meg csak dolgozol vele vagy a memóriában pakolaszod, használod az intes nezetet. Attol meg ua a 4 bytes szeglete a ramnak. |
saxus (statz) | #9, Agyfasz (419) |
322 | #2514 | ^ | Idézet | Sat, 13 Apr 2013 08:50:08 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
Na és itt is van: http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0029.html struct IORequest *-tel tér vissza a struct timerequest meg egy struct timerequest { struct IORequest tr_node; struct timeval tr_time; }; Das ist eine OOP/Polimorfizmus in da C-way. |
Prometheus (statz) | #3, Főfasz (1824) |
52 | #2515 | ^ | Idézet | Sat, 13 Apr 2013 10:54:20 +02 |
86.101.*.* | *.catv.broadband.hu |
Kemi, nem vagy elérhető. Tudnánk beszélni telefonon? |
kemi (statz) | #2, Főfasz (2970) |
200 | #2516 | ^ | Idézet | Sat, 13 Apr 2013 11:43:15 +02 |
188.143.*.* | *.pool.digikabel.hu |
Mert ki volt kapcsolva. Most már elérhető vagyok, és az a jó számom. (csak nem tudlak visszahívni, mert nincs pénz a kártyámon.) |
TCH (statz) | #1, Főfasz (10443) |
480 | #2517 | ^ | Idézet | Sat, 13 Apr 2013 13:31:09 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
saxus, azt tudom mi van a structokban (ahhoz van is már Pascalos unit), viszont a magyarázatod arra nem adott magyarázatot, hogy minek typecastolják itt azt a structot, ráadásul ugyanarra ami. Apropó, structon belül egy másik struct az pointerként van jelen, vagy ténylegesen benne van a másik struct is? http://hup.hu/cikkek/20130413/arm_az_arm_chipek_es_a_linux_vegigsopornek_az_iparagon Ez jó hír. |
saxus (statz) | #9, Agyfasz (419) |
978 | #2518 | ^ | Idézet | Sat, 13 Apr 2013 13:52:18 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
structban structok = amennyi az ossz structok hossza, annyi lesz a memoriaban szekvencialisan lefoglalva. unionban akarmi = leghosszabb elem hossza, az "alelemek" csak maz nezetek, mindegyik ugyanarrol a memroacimrol kezdodik. Ha struct IOResult* lenne, akkor termeszetesen pointer lenne a structban. Es nezd mar meg, hogy kurvara nem ugyanazzal ter vissza: struct IORequest *CreateExtIO(struct MsgPort *, ULONG); Ilyen C fele OOP emulaciokor szoktak ezt igy csinalni, hogy a "szarmaztatott" structba beleturjak a masik structot az elejere. Azert van a timerequest elejen az IOResult struct. Gondolom a CreateExtIO megcsinalja az elejere es azert keri at a timerequest meretet parameterbe, hogy akkora helyet foglaljon le neki, hogy aztan a tobbi bizgentyu ne mast csapjon felul. Mit ne mondjak, ez tipikusan az az eset szvsz, amikor 10000x kenyelmesebb lenne egybol valami OOP-t nativan tamogato nyelvvel jatszani, mintsem C-ben ganyolni :) |
saxus (statz) | #9, Agyfasz (419) |
336 | #2519 | ^ | Idézet | Sat, 13 Apr 2013 13:58:45 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
Egyébként, ha kultúráltan akarod átírni Pascalra, akkor használj valami ObjectPascalt, csinálj egy IORequest osztályt, abból meg származtassd a timerequest-et. És akkor nem kell ilyen nyomi structokkal szenvedni. Mondjuk már fingom nincs, de talán a Pascal is összemásolja a structokat egy nagy egészbe, ha nem külön pointert használsz. |
TCH (statz) | #1, Főfasz (10443) |
881 | #251a | ^ | Idézet | Sat, 13 Apr 2013 20:06:09 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
Feltűnt, hogy ez Amigára van? Feltűnt, hogy nem én írtam? Azzal kell dolgozni, ami van. Amúgy legszívesebben ASM-ben csinálnám, mert ott már a fordításra összerakhatom kézzel az összes adatot oszt csak ugrálgatok, de ez van. Amigára nincs Object-Pascal; volt egy AmiPascal nevű próbálkozás, ködbeveszett, csak sima Pascal van. kemi, akkor segítesz átírni? |
TCH (statz) | #1, Főfasz (10443) |
2970 | #251b | ^ | Idézet | Sat, 13 Apr 2013 21:33:49 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
Ok, akkor kemi, vagy saxus, vagy akárki, akinek van rálátása mindkét nyelvre. Itt az eredeti 4 függvénystruct timeval { ULONG tv_secs; ULONG tv_micro; }; struct timerequest { struct IORequest tr_node; struct timeval tr_time; }; struct timerequest *create_timer(ULONG unit) { LONG error; struct MsgPort *timerport; struct timerequest *TimerIO; timerport = CreatePort(0, 0); if (timerport == NULL) { return(NULL); } TimerIO = (struct timerequest *) CreateExtIO(timerport, sizeof(struct timerequest)); if (TimerIO == NULL) { DeletePort(timerport); return(NULL); } error = OpenDevice(TIMERNAME, unit, (struct IORequest *) TimerIO, 0L); if (error != 0) { delete_timer(TimerIO); return(NULL); } return( TimerIO ); } void wait_for_timer(struct timerequest *tr, struct timeval *tv) { tr->tr_node.io_Command = TR_ADDREQUEST; tr->tr_time = *tv; DoIO((struct IORequest *) tr); } void delete_timer(struct timerequest *tr ) { struct MsgPort *tp; if (tr != 0 ) { tp = tr->tr_node.io_Message.mn_ReplyPort; if (tp != 0) { DeletePort(tp); } CloseDevice( (struct IORequest *) tr); DeleteExtIO( (struct IORequest *) tr); } } LONG time_delay(struct timeval *tv, LONG unit) { struct timerequest *tr; tr = create_timer(unit); if (tr == NULL) { return(-1L); } wait_for_timer(tr, tv); delete_timer(tr); return (0L); }itt meg amit Pascalban sikerült alkotnom. type ttimeval = packed record tv_secs: longword; tv_micro: longword; end; ptimeval = ^ttimeval; ttimerequest = packed record tr_node: tiorequest; tr_time: ttimeval; end; ptimerequest = ^ttimerequest; function create_timer(_unit: longword): pttimerequest; var error: longint; timerport: pmessageport; timerio: ptimerequest; begin timerport := createport(0, 0); if (timerport = nil) then begin create_timer := nil; exit end; timerio := ptimerequest(createextio(timerport, sizeof(ttimerequest))); if (timerio = nil) then begin deleteport(timerport); create_timer := nil; exit; end; error := opendevice('timer.device', _unit, piorequest(timerio), 0); if (error <> 0) then begin delete_timer(timerio); create_timer := nil; exit; end; create_timer := timerio; end; procedure wait_for_timer(tr: ptimerequest; tv: ptimeval); begin tr.tr_node.io := 9; tr.tr_time := tv^; doio(piorequest(tr)); end; procedure delete_timer(tr: ptimerequest); var tp: pmsgport; begin if (tr <> nil) then begin tp := tr.tr_node.io_message.mn_replyport; if (tp <> nil) then begin deleteport(tp); end; closedevice(piorequest(tr)); deleteextio(piorequest(tr)); end; end; function time_delay(tv: ptimeval, _unit: longword): longint; var tr: ptimerequest; begin tr := create_timer(_unit); if (tr = nil) then begin time_delay := -1; exit; end; wait_for_timer(tr, tv); delete_timer(tr); time_delay := 0; end;Stimmel? Elbasztam? Egyéb? |
saxus (statz) | #9, Agyfasz (419) |
235 | #251c | ^ | Idézet | Sun, 14 Apr 2013 18:53:14 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
"Feltűnt, hogy ez Amigára van? Feltűnt, hogy nem én írtam?" Feltűnt, miután rákerestem az eredeti kódra. Ott viszont írtak C++ fordítót is. Mindegy, nem nyitok vitát a C-sek önszopató perverzióiról. Kódot meg majd megnézem. |
TCH (statz) | #1, Főfasz (10443) |
466 | #251d | ^ | Idézet | Sun, 14 Apr 2013 19:15:24 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
Belinkeltem az eredeti kódot, mi a túrónak kellett keresni? A feladat nem az volt, hogy írjuk át OOP modellre a meglévő kódot, hanem, hogy írjuk át Pascalra. Nem vagyok C-s. Ha az lennék, nem akarnám átírni a kódot egy totál más nyelvre. Thx. |
saxus (statz) | #9, Agyfasz (419) |
196 | #251e | ^ | Idézet | Sun, 14 Apr 2013 20:08:27 +02 |
84.3.*.* | *.catv.pool.telekom.hu |
"Belinkeltem az eredeti kódot, mi a túrónak kellett keresni?" Mert először csak egy kódrészletet adtál :) Amúgy első ránézésre jónak tűnik. Itt is "0"-ként értelmezett a nil? |
TCH (statz) | #1, Főfasz (10443) |
222 | #251f | ^ | Idézet | Sun, 14 Apr 2013 22:04:36 +02 |
78.92.*.* | *.catv.pool.telekom.hu |
Jogos. Igen, a nil az a C-s null Pascalos megfelelője. |