home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / sysext / chooser / whosther.sit / Main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-01-11  |  4.7 KB  |  192 lines

  1. #include <quickdraw.h>
  2. #include <windows.h>
  3. #include <textedit.h>
  4. #include <Packages.h>
  5. #include <toolutils.h>
  6. #include <memory.h>
  7. #include <stdio.h>
  8. #include <osevents.h>
  9. #include <strings.h>
  10. #include <errors.h>
  11. #include <appletalk.h>
  12. #include <Ctype.h>
  13. #define SOCK 20
  14. #define LPAREND '('
  15. #define RPAREND ')'
  16. void HexNum(unsigned Integer n,char *s);
  17.  
  18. #pragma segment Main
  19. void PackENtity(EntityName *,char *);
  20. pascal OSErr HChooser(message,caller,ObjName,zoneName,p1,p2)
  21. Integer message,caller;
  22. StringPtr ObjName,zoneName;
  23. LongInt p1,p2;
  24. {
  25. #pragma unused(caller)
  26. #pragma unused(p1)
  27. #pragma unused(p2)
  28.     MPPParamBlock ATD;
  29.     EntityName eName;
  30.     char buff[512];
  31.     char pEname[108];
  32.     GrafPtr OldPort;
  33.     WindowPtr myWind;
  34.     AddrBlock addr;
  35.     EventRecord myEvent;
  36.     short err,i,n,j;
  37.  
  38.     
  39.  
  40.     if(message == 15)  {
  41. /*    if(ObjName[0] == 0) return 0; */
  42.     GetPort(&OldPort);
  43.     myWind = GetNewWindow(-4080,NULL,(WindowPtr) -1L);
  44.     if(myWind == NULL) return 0;
  45.     SetPort(myWind);
  46.     EraseRect(&(*myWind).portRect);
  47.         if(ObjName[0] != 0) {
  48.             BlockMove((Ptr) ObjName,(Ptr) &eName.objStr,(LongInt) ObjName[0]+1);
  49.         BlockMove((Ptr) zoneName,(Ptr) &eName.zoneStr,(LongInt) zoneName[0]+1);
  50.         eName.typeStr[0] = 1;
  51.         eName.typeStr[1] = '=';
  52.         PackENtity(&eName,pEname);
  53.         ATD.NBPinterval = 3;
  54.         ATD.NBPcount = 15;
  55.         ATD.NBPretBuffPtr = buff;
  56.         ATD.NBPretBuffSize = 128;
  57.         ATD.NBPentityPtr = (Ptr) pEname;
  58.         ATD.NBPmaxToGet = 1;
  59.         err = PLookupName(&ATD,false);
  60.         n = ATD.NBPnumGotten;
  61.             j = NBPExtract(buff,n,1,&eName,&addr); 
  62.     }
  63.     else 
  64.         BlockMove((Ptr) &p2,(Ptr) &addr ,sizeof(AddrBlock)) ;
  65.         j = 0;
  66.         for(i = 0; i < 512; i++) buff[i] = ' ';
  67.         if(eName.objStr[0] == 0) {
  68.             for(i = 0; i < ObjName[0]; i++,j++) buff[j] = ObjName[i+1];
  69.             j++;
  70.         }
  71.         else {
  72.             for(i = 0; i < eName.objStr[0]; i++,j++) buff[j] = eName.objStr[i+1];
  73.             j++;
  74.         }
  75.         buff[j++] = ':';
  76.         for(i = 0; i < eName.typeStr[0]; i++,j++) buff[j] = eName.typeStr[i+1];
  77.         j++;
  78.         buff[j++] = '@';
  79.         for(i = 0; i < zoneName[0]; i++,j++) buff[j] = zoneName[i+1];
  80.         j++; 
  81.         GetIndString(pEname,-4080,1);
  82.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  83.         j++; 
  84.         NumToString(addr.aNet,pEname); /* decimal net number */
  85.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  86.         buff[j++] = LPAREND;
  87.         HexNum(addr.aNet,pEname);  /* hex net number */
  88.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  89.         buff[j++] = RPAREND;
  90.         j++;
  91.         GetIndString(pEname,-4080,2);
  92.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  93.         j++; 
  94.         NumToString(addr.aNode,pEname);    /* decimal node number */
  95.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  96.         buff[j++] = LPAREND;
  97.         HexNum(addr.aNode,pEname);     /* hex node number */
  98.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  99.         buff[j++] = RPAREND;
  100.         j++;
  101.         GetIndString(pEname,-4080,3);
  102.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  103.         NumToString(addr.aSocket,pEname);    /* decimal node number */
  104.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  105.         j++;
  106.         
  107.         buff[j++] = LPAREND;
  108.         HexNum(addr.aSocket,pEname);    /* hex socket number */
  109.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  110.         buff[j++]= RPAREND;
  111.         j++;
  112.         GetIndString(pEname,-4080,4);
  113.         for(i = 0; i < pEname[0]; i++,j++) buff[j] = pEname[i+1];
  114.         j++;
  115.         TextBox(buff,(LongInt) j,&(*myWind).portRect,normal);
  116.         do {
  117.             err = GetNextEvent(mouseDown | keyDown,&myEvent);
  118. #if 0
  119.             if(myEvent.what == updateEvt && myWind == (WindowPtr) myEvent.message) {
  120.                 BeginUpdate(myWind);
  121.                 EraseRect(&(*myWind).portRect);
  122.                 TextBox(buff,(LongInt) j,&(*myWind).portRect,normal);
  123.                 ValidRect(&(*myWind).portRect);        
  124.                 EndUpdate(myWind);
  125.                 err = false;
  126.             }
  127.             else if(myEvent.what == activateEvt) err = false;
  128. #endif
  129.         } while (!err);    
  130.         DisposeWindow(myWind);
  131.         SetPort(OldPort);
  132.     }
  133.     }
  134.  
  135.  
  136. void PackENtity(eN,pN)
  137. EntityName *eN;
  138. char *pN;
  139.  
  140. {
  141.     short s,e,i;
  142.  
  143.     s = 0;    
  144.     e = (char ) eN->objStr[0];  /* length of 1st string */
  145.     pN[s] = e;
  146.     s++;  /* next spot */
  147.     
  148.     for(i = 0; i < e; i++)  { pN[s] = (*eN).objStr[i+1]; s++; }
  149.     
  150.     e = (char) eN->typeStr[0];
  151.     pN[s] = e;
  152.     
  153.     s++;
  154.     for(i = 0; i < e; i++)  { pN[s] = (*eN).typeStr[i+1]; s++; }
  155.  
  156.     e = (char) eN->zoneStr[0];
  157.     pN[s] = e;
  158.     
  159.     s++;
  160.     for(i = 0; i < e; i++)  { pN[s] = (*eN).zoneStr[i+1]; s++; }
  161. }
  162. /*----------------------------------
  163.     Convert a number to a hex string rep.
  164.     prefixed by '0x'. The result is a pString.
  165.     -------------------------------------*/
  166. void HexNum(n,s)
  167. unsigned Integer n;
  168. char *s;
  169.  
  170. {
  171.     Integer j,i;
  172.     unsigned Integer d,r;
  173.     char tmp[10];
  174.     d = n;
  175.     i = 0;
  176.     do {
  177.     
  178.         r = d % 16;
  179.         d = d / 16;
  180.         if(r > 9) 
  181.             tmp[i] = r - 10  + 'A';
  182.         else
  183.             tmp[i] = r + '0';
  184.         i++;
  185.     } while (d != 0);
  186.     s[2] = 'x';
  187.     s[1] = '0';
  188.     s[0] = 2;
  189.     for(j = i-1,r=3;j >= 0; j--,r++)  {
  190.         s[r] = tmp[j]; s[0]++;
  191.         }
  192. }