home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyEthernet.p < prev    next >
Encoding:
Text File  |  1997-01-28  |  2.2 KB  |  97 lines  |  [TEXT/CWIE]

  1. unit MyEthernet;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types;
  7.  
  8.     type
  9.         EthernetAddress = packed array[0..5] of Byte;
  10.  
  11.     function GetEthernetAddress (var addr: EthernetAddress): OSErr;
  12.  
  13. implementation
  14.  
  15.     uses
  16.         Devices, ENET, Slots, ROMDefs;
  17.  
  18.     function OpenEthernetDriver (var ern: integer): OSErr;
  19.         var
  20.             sb: SpBlock;
  21.             pb: ParamBlockRec;
  22.             err, err2: OSErr;
  23.             found: boolean;
  24.             EnetStr: Str15;
  25.     begin
  26.         found := false;                   {assume no sResource found}
  27.  
  28.         {set up the SpBlock}
  29.         sb.spCategory := catNetwork;
  30.         sb.spCType := typeEthernet;
  31.         sb.spDrvrSW := 0;
  32.         sb.spDrvrHW := 0;
  33.         sb.spTBMask := 3;        {match only Category and CType }
  34.         sb.spSlot := 0;                {start search from here}
  35.         sb.spID := 0;                    {start search from here}
  36.         sb.spExtDev := 0;            {ID of the external device}
  37.  
  38.         err := SNextTypeSRsrc(@sb);
  39.         if err = noErr then begin            {found an sResource match; }
  40.             EnetStr := '.ENET';
  41.             pb.ioCompletion := nil;            {call made synchronously}
  42.             pb.ioNamePtr := @EnetStr;
  43.             pb.ioPermssn := fsCurPerm;
  44.             pb.ioSFlags := 0;                    {reserved for driver use}
  45.             pb.ioSlot := sb.spSlot;            {slot of Ethernet card to open}
  46.             pb.ioID := sb.spID;                    {sResource ID for slot}
  47.             err := OpenSlotSync( @pb );
  48.             if err = noErr then begin
  49.                 ern := pb.ioRefNum;
  50.             end;
  51.         end;
  52.         if err <> noErr then begin
  53.             err := OpenDriver( '.ENET', ern );
  54.         end;
  55.         if err <> noErr then begin
  56.             err2 := OpenDriver( '.ENET0', ern );
  57.             if err2 = noErr then begin
  58.                 err := noErr;
  59.             end;
  60.         end;
  61.         OpenEthernetDriver := err;
  62.     end;
  63.  
  64.     function GetEthernetAddress (var addr: EthernetAddress): OSErr;
  65.         var
  66.             err: OSErr;
  67.             buffer: packed array[0..77] of Byte;
  68.             pb: EParamBlock;
  69.             ern: integer;
  70.     begin
  71.         err := OpenEthernetDriver(ern);
  72.         if err = noErr then begin
  73.             pb.ioRefNum := ern;
  74.             pb.csCode := ENetGetInfo;
  75.             pb.ePointer := @buffer;
  76.             pb.eBuffSize := sizeof(buffer);
  77.             err := EGetInfo(@pb, false);
  78.             if err = noErr then begin
  79.                 BlockMoveData(@buffer, @addr, 6);
  80.             end;
  81.         end;
  82.         GetEthernetAddress := err;
  83.     end;
  84.  
  85. end.
  86.     function OpenEthernetDriver (var ern: integer): OSErr;
  87.         var
  88.             err: OSErr;
  89.     begin
  90.         err := OpenDriver('.ENET', ern);
  91.         if err <> noErr then begin
  92.             err := OpenDriver('.ENET0', ern);        (* check for SCSI Ethernet devices *)
  93.         end; (* if *)
  94.         OpenEthernetDriver := err;
  95.     end;
  96.  
  97.