home *** CD-ROM | disk | FTP | other *** search
- #include <quickdraw.h>
- #include <windows.h>
- #include <textedit.h>
- #include <Packages.h>
- #include <toolutils.h>
- #include <memory.h>
- #include <stdio.h>
- #include <osevents.h>
- #include <strings.h>
- #include <errors.h>
- #include <appletalk.h>
- #include <Ctype.h>
- #define SOCK 20
- #define LPAREND '('
- #define RPAREND ')'
- void HexNum(unsigned Integer n,char *s);
-
- #pragma segment Main
- void PackENtity(EntityName *,char *);
- pascal OSErr HChooser(message,caller,ObjName,zoneName,p1,p2)
- Integer message,caller;
- StringPtr ObjName,zoneName;
- LongInt p1,p2;
- {
- #pragma unused(caller)
- #pragma unused(p1)
- #pragma unused(p2)
- MPPParamBlock ATD;
- EntityName eName;
- char buff[512];
- char pEname[108];
- GrafPtr OldPort;
- WindowPtr myWind;
- AddrBlock addr;
- EventRecord myEvent;
- short err,i,n,j;
-
-
-
- if(message == 15) {
- /* if(ObjName[0] == 0) return 0; */
- GetPort(&OldPort);
- myWind = GetNewWindow(-4080,NULL,(WindowPtr) -1L);
- if(myWind == NULL) return 0;
- SetPort(myWind);
- EraseRect(&(*myWind).portRect);
- if(ObjName[0] != 0) {
- BlockMove((Ptr) ObjName,(Ptr) &eName.objStr,(LongInt) ObjName[0]+1);
- BlockMove((Ptr) zoneName,(Ptr) &eName.zoneStr,(LongInt) zoneName[0]+1);
- eName.typeStr[0] = 1;
- eName.typeStr[1] = '=';
- PackENtity(&eName,pEname);
- ATD.NBPinterval = 3;
- ATD.NBPcount = 15;
- ATD.NBPretBuffPtr = buff;
- ATD.NBPretBuffSize = 128;
- ATD.NBPentityPtr = (Ptr) pEname;
- ATD.NBPmaxToGet = 1;
- err = PLookupName(&ATD,false);
- n = ATD.NBPnumGotten;
- j = NBPExtract(buff,n,1,&eName,&addr);
- }
- else
- BlockMove((Ptr) &p2,(Ptr) &addr ,sizeof(AddrBlock)) ;
- j = 0;
- for(i = 0; i < 512; i++) buff[i] = ' ';
- if(eName.objStr[0] == 0) {
- for(i = 0; i < ObjName[0]; i++,j++) buff[j] = ObjName[i+1];
- j++;
- }
- else {
- for(i = 0; i < eName.objStr[0]; i++,j++) buff[j] = eName.objStr[i+1];
- j++;
- }
- buff[j++] = ':';
- for(i = 0; i < eName.typeStr[0]; i++,j++) buff[j] = eName.typeStr[i+1];
- j++;
- buff[j++] = '@';
- for(i = 0; i < zoneName[0]; i++,j++) buff[j] = zoneName[i+1];
- j++;
- GetIndString(pEname,-4080,1);
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- j++;
- NumToString(addr.aNet,pEname); /* decimal net number */
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- buff[j++] = LPAREND;
- HexNum(addr.aNet,pEname); /* hex net number */
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- buff[j++] = RPAREND;
- j++;
- GetIndString(pEname,-4080,2);
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- j++;
- NumToString(addr.aNode,pEname); /* decimal node number */
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- buff[j++] = LPAREND;
- HexNum(addr.aNode,pEname); /* hex node number */
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- buff[j++] = RPAREND;
- j++;
- GetIndString(pEname,-4080,3);
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- NumToString(addr.aSocket,pEname); /* decimal node number */
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- j++;
-
- buff[j++] = LPAREND;
- HexNum(addr.aSocket,pEname); /* hex socket number */
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- buff[j++]= RPAREND;
- j++;
- GetIndString(pEname,-4080,4);
- for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
- j++;
- TextBox(buff,(LongInt) j,&(*myWind).portRect,normal);
- do {
- err = GetNextEvent(mouseDown | keyDown,&myEvent);
- #if 0
- if(myEvent.what == updateEvt && myWind == (WindowPtr) myEvent.message) {
- BeginUpdate(myWind);
- EraseRect(&(*myWind).portRect);
- TextBox(buff,(LongInt) j,&(*myWind).portRect,normal);
- ValidRect(&(*myWind).portRect);
- EndUpdate(myWind);
- err = false;
- }
- else if(myEvent.what == activateEvt) err = false;
- #endif
- } while (!err);
- DisposeWindow(myWind);
- SetPort(OldPort);
- }
- }
-
-
- void PackENtity(eN,pN)
- EntityName *eN;
- char *pN;
-
- {
- short s,e,i;
-
- s = 0;
- e = (char ) eN->objStr[0]; /* length of 1st string */
- pN[s] = e;
- s++; /* next spot */
-
- for(i = 0; i < e; i++) { pN[s] = (*eN).objStr[i+1]; s++; }
-
- e = (char) eN->typeStr[0];
- pN[s] = e;
-
- s++;
- for(i = 0; i < e; i++) { pN[s] = (*eN).typeStr[i+1]; s++; }
-
- e = (char) eN->zoneStr[0];
- pN[s] = e;
-
- s++;
- for(i = 0; i < e; i++) { pN[s] = (*eN).zoneStr[i+1]; s++; }
- }
- /*----------------------------------
- Convert a number to a hex string rep.
- prefixed by '0x'. The result is a pString.
- -------------------------------------*/
- void HexNum(n,s)
- unsigned Integer n;
- char *s;
-
- {
- Integer j,i;
- unsigned Integer d,r;
- char tmp[10];
- d = n;
- i = 0;
- do {
-
- r = d % 16;
- d = d / 16;
- if(r > 9)
- tmp[i] = r - 10 + 'A';
- else
- tmp[i] = r + '0';
- i++;
- } while (d != 0);
- s[2] = 'x';
- s[1] = '0';
- s[0] = 2;
- for(j = i-1,r=3;j >= 0; j--,r++) {
- s[r] = tmp[j]; s[0]++;
- }
- }