home *** CD-ROM | disk | FTP | other *** search
/ Gold Fish 3 / goldfish_volume_3.bin / files / dev / e / amigae / rkrmsrc / resources / query_serial.e < prev    next >
Text File  |  1995-04-02  |  2KB  |  61 lines

  1. -> Query_Serial.e - Try to open the serial device and if unsuccessful,
  2. ->                  return the name of the owner.
  3.  
  4. OPT PREPROCESS  -> E-Note: we are using the NAME macros
  5.  
  6. -> E-Note: E does not (as of v3.1a) support Resources in the conventional way
  7. MODULE 'amigalib/io',
  8.        'amigalib/ports',
  9.        'other/misc',
  10.        'devices/serial',
  11.        'dos/dos',
  12.        'exec/io',
  13.        'resources/misc'
  14.  
  15. ENUM ERR_NONE, ERR_CRIO, ERR_PORT
  16.  
  17. CONST UNIT_NUMBER=0
  18.  
  19. DEF serialMP=NIL, serialIO=NIL:PTR TO ioextser
  20.  
  21. PROC main() HANDLE
  22.   DEF status,  -> Return value of SDCMD_QUERY
  23.       user     -> Name of serial port owner if not us
  24.  
  25.   IF NIL=(serialMP:=createPort(NIL, NIL)) THEN Raise(ERR_PORT)
  26.   IF NIL=(serialIO:=createExtIO(serialMP, SIZEOF ioextser)) THEN Raise(ERR_CRIO)
  27.   IF OpenDevice(SERIALNAME, UNIT_NUMBER, serialIO, 0)
  28.     WriteF('\n\s did not open', SERIALNAME)
  29.  
  30.     miscbase:=OpenResource(MISCNAME)
  31.  
  32.     -> Find out who has the serial device
  33.     IF NIL=(user:=allocMiscResource(MR_SERIALPORT, 'Us'))
  34.       WriteF('\n')
  35.       freeMiscResource(MR_SERIALPORT)
  36.     ELSE
  37.       WriteF(' because \s owns it\n\n', user)
  38.     ENDIF
  39.   ELSE
  40.     serialIO.iostd.command:=SDCMD_QUERY
  41.     SendIO(serialIO)  -> Execute query
  42.  
  43.     status:=serialIO.status  -> Store returned status
  44.  
  45.     WriteF('\t The serial port status is \h\n', status)
  46.  
  47.     AbortIO(serialIO)
  48.     WaitIO(serialIO)
  49.  
  50.     CloseDevice(serialIO)
  51.   ENDIF
  52.  
  53. EXCEPT DO
  54.   IF serialIO THEN deleteExtIO(serialIO)
  55.   IF serialMP THEN deletePort(serialMP)
  56.   SELECT exception
  57.   CASE ERR_CRIO;  WriteF('Can''t create IO request\n')
  58.   CASE ERR_PORT;  WriteF('Can''t create message port\n')
  59.   ENDSELECT
  60. ENDPROC IF exception<>ERR_NONE THEN RETURN_FAIL ELSE RETURN_OK
  61.