home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaMiscModsCD3.iso / _PROGRAMME / PLAYER / GUI / EasyPlayer.lha / EYP / Source / easyrecognize.e < prev    next >
Encoding:
Text File  |  1999-09-25  |  1.6 KB  |  55 lines

  1. /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  2. -- EasyPlayer, EYP, Ralph Debusmann 1997-9
  3. */
  4.  
  5. OPT MODULE
  6. OPT EXPORT
  7.  
  8. MODULE 'dos/dos',
  9. '*easyconst','*easystructs','*modules/reqs'
  10.  
  11. CONST TOKENIZED=PATTERN*2+2
  12.  
  13. PROC recognize(filename,intinfo:PTR TO interfaceinfo,numints) HANDLE
  14. DEF file=NIL,i,tokenized[TOKENIZED]:ARRAY,fileid=0,header[HEADER]:ARRAY,
  15. header2[HEADER]:ARRAY
  16.     FOR i:=0 TO numints-1
  17.         IF (intinfo[i].pattern[0]) AND (intinfo[i].intname[]<>INTDISABLED)
  18.             IF ParsePatternNoCase(intinfo[i].pattern,tokenized,TOKENIZED)<>-1
  19.                 IF MatchPatternNoCase(tokenized,filename)=1    THEN fileid:=i+1
  20.             ENDIF
  21.         ENDIF
  22.         EXIT fileid
  23.     ENDFOR
  24.  
  25.     IF (file:=Open(filename,MODE_OLDFILE))=FALSE THEN Raise(ERR_OPEN)
  26.     IF (Read(file,header,HEADER))=0 THEN Raise(ERR_READ)
  27.     FOR i:=0 TO numints-1
  28.         IF intinfo[i].header[0] AND (intinfo[i].intname[]<>INTDISABLED)
  29.             IF intinfo[i].headeroffset>(HEADER-StrLen(intinfo[i].header))
  30.                 Seek(file,intinfo[i].headeroffset,OFFSET_BEGINNING)
  31.                 IF (Read(file,header2,HEADER))=0 THEN Raise(ERR_READ)
  32.                 IF StrCmp(header2,intinfo[i].header,StrLen(intinfo[i].header)) THEN fileid:=i+1
  33.             ELSE
  34.                 IF StrCmp(header+intinfo[i].headeroffset,intinfo[i].header,StrLen(intinfo[i].header)) THEN fileid:=i+1
  35.             ENDIF
  36.         ENDIF
  37.         EXIT fileid
  38.     ENDFOR
  39.  
  40.     IF fileid=0 THEN Raise(ERR_NORECOG)
  41.  
  42. EXCEPT DO
  43.     IF file THEN Close(file)
  44.  
  45.     SELECT exception
  46.         CASE ERR_OPEN
  47.             errorreq('Couldn''t open "%s".','recognize',[filename])
  48.         CASE ERR_READ
  49.             errorreq('Couldn''t read from "%s".','recognize',[filename])
  50.         CASE ERR_NORECOG
  51.             errorreq('No interface recognizes "%s".','recognize',[filename])
  52.     ENDSELECT
  53.     ReThrow()
  54. ENDPROC fileid
  55.