home *** CD-ROM | disk | FTP | other *** search
- /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- -- EasyPlayer, EYP, Ralph Debusmann 1997-9
- */
-
- OPT MODULE
- OPT EXPORT
-
- MODULE 'dos/dos',
- '*easyconst','*easystructs','*modules/reqs'
-
- CONST TOKENIZED=PATTERN*2+2
-
- PROC recognize(filename,intinfo:PTR TO interfaceinfo,numints) HANDLE
- DEF file=NIL,i,tokenized[TOKENIZED]:ARRAY,fileid=0,header[HEADER]:ARRAY,
- header2[HEADER]:ARRAY
- FOR i:=0 TO numints-1
- IF (intinfo[i].pattern[0]) AND (intinfo[i].intname[]<>INTDISABLED)
- IF ParsePatternNoCase(intinfo[i].pattern,tokenized,TOKENIZED)<>-1
- IF MatchPatternNoCase(tokenized,filename)=1 THEN fileid:=i+1
- ENDIF
- ENDIF
- EXIT fileid
- ENDFOR
-
- IF (file:=Open(filename,MODE_OLDFILE))=FALSE THEN Raise(ERR_OPEN)
- IF (Read(file,header,HEADER))=0 THEN Raise(ERR_READ)
- FOR i:=0 TO numints-1
- IF intinfo[i].header[0] AND (intinfo[i].intname[]<>INTDISABLED)
- IF intinfo[i].headeroffset>(HEADER-StrLen(intinfo[i].header))
- Seek(file,intinfo[i].headeroffset,OFFSET_BEGINNING)
- IF (Read(file,header2,HEADER))=0 THEN Raise(ERR_READ)
- IF StrCmp(header2,intinfo[i].header,StrLen(intinfo[i].header)) THEN fileid:=i+1
- ELSE
- IF StrCmp(header+intinfo[i].headeroffset,intinfo[i].header,StrLen(intinfo[i].header)) THEN fileid:=i+1
- ENDIF
- ENDIF
- EXIT fileid
- ENDFOR
-
- IF fileid=0 THEN Raise(ERR_NORECOG)
-
- EXCEPT DO
- IF file THEN Close(file)
-
- SELECT exception
- CASE ERR_OPEN
- errorreq('Couldn''t open "%s".','recognize',[filename])
- CASE ERR_READ
- errorreq('Couldn''t read from "%s".','recognize',[filename])
- CASE ERR_NORECOG
- errorreq('No interface recognizes "%s".','recognize',[filename])
- ENDSELECT
- ReThrow()
- ENDPROC fileid
-