HC> Allok rendelkezesere. Az oradijam 5000 Huf+afa.
HC> Ez egy kb 40 oras munka.
HC> Jobban jar ha ket het alatt kitalal valami temat, majusig
HC> meg boven meg lehet tanulni egy kozepiskolai (szak?)dolgozat
Csak tudnám, hogy a fenében lehet ezt megbecsülni, hogy 40 órás munka
:) Még az sem derült ki (számomra), miről van szó... lényeg a lényeg,
szövegszerkesztés, számlázó program, könyvelő program, minden, a 40
óra, az 40 óra :)
Éljenek a tapasztalt delphi programozók ;)
hsz
|
Udv, Coderek,
van Novelles a vonalban?
olyan IPX kapcsolatot szeretnek, ahol mindenki, aki azonos socketben
van, megkapja egymas uzeneteit, es nem kell allandoan olvasgatni, hanem
rogton le is kezeli ezeket egy fuggveny. Hosszas kuzdelem aran
elkeszultek a rutinok. Minden tokeletes, amig csak egy gep megy:
megkapja a sajat uzeneteit. Ha viszont mas gep is figyel, az elszall,
mint a gyozelmi zaszlo. Ha kiveszem a "handledata" rutint, akkor
valamivel jobb a helyzet - de en nem akarok pollozni, kezelje csak le a
rutin a bejovo adatokat, kulonben valoszinuleg elvesznek (a program
tobbi resze sokaig fut).
DOS-ODI van, Novell szerver nincs. Tippek?
Ime a rutinok (elnezest, kicsit hosszu lesz es angol szavakat is
tartalmaz):
> unsigned socknum;
> unsigned char work[512];
> typedef struct
> { unsigned char network[4],node[6];
> unsigned socket;
> } NETADDR;
> struct IPXHEAD
> { unsigned check,length;
> unsigned char pc,ptype;
> NETADDR dest,src;
> } ipxhead[2];
> struct ECB
> { far *link,far (*esr)();
> unsigned char inuse,complete;
> unsigned socket;
> unsigned char ipxwork[4],dwork[12],immedaddr[6];
> unsigned fragcount, headdata[2], headsize, fragdata[2], fragsize;
> } ecb[2];
>
> far handledata()
> { printf("Rec'd:%Fs\n",MK_FP((*ecb).fragdata[1],(*ecb).fragdata[0]));
> listenpacket(work);
> }
>
> opensocket()
> { if(socknum) socknum = socknum & ~128 | 64;
> _AL = _BX = 0; _DX = socknum; geninterrupt(0x7a);
> printf("Open:%x\tRet:%x\n",_DX,_AL);
> return(_AL);
> }
>
> closesocket()
> { if(socknum) socknum = socknum & ~128 | 64;
> _BX = 1; _DX = socknum; geninterrupt(0x7a); socknum = 0;
> }
>
> sendpacket(char *packet)
> { ecb[1].socket = socknum; ecb[1].fragcount = 2;
> ecb[1].headdata[0] = FP_OFF(ipxhead); ecb[1].headdata[1] =
> FP_SEG(ipxhead);
> ecb[1].headsize = sizeof(*ipxhead); ecb[1].fragsize = 11;
> ecb[1].fragdata[0] = FP_OFF(packet); ecb[1].fragdata[1] =
> FP_SEG(packet);
> memset(ecb[1].immedaddr,255,6); memset((*ipxhead).dest.node,255,6);
> (*ipxhead).ptype = 4; (*ipxhead).dest.socket = socknum;
> _BX = 3; _ES = FP_SEG(ecb + 1); _SI = FP_OFF(ecb + 1);
> geninterrupt(0x7a);
> }
>
> listenpacket(char *packet)
> { (*ecb).esr = handledata; (*ecb).socket = socknum; (*ecb).fragcount = 2;
> (*ecb).headdata[0] = FP_OFF(ipxhead + 1);
> (*ecb).headdata[1] = FP_SEG(ipxhead + 1);
> (*ecb).headsize = sizeof(*ipxhead); (*ecb).fragsize = 11;
> (*ecb).fragdata[0] = FP_OFF(packet); (*ecb).fragdata[1] =
> FP_SEG(packet);
> _BX = 4; _ES = FP_SEG(ecb); _SI = FP_OFF(ecb); geninterrupt(0x7a);
> return(_AL);
> }
>
> main(int argc,char *argv[])
> { socknum = 2; opensocket();
> printf("Lis'n:%x\n",listenpacket(work));
>
> printf("Inuse:%2x\tComplete:%2x\tWork:%s\n",(*ecb).inuse,(*ecb).complete,work
);
> sendpacket(argc > 1 ? argv[1] : "Proba.....");
> getchar();
> sendpacket("Proba2.....");
>
> printf("Inuse:%2x\tComplete:%2x\tWork:%s\n",(*ecb).inuse,(*ecb).complete,work
);
> closesocket();
> }
|