home *** CD-ROM | disk | FTP | other *** search
- /* Little program to identify a file and run a predesigned process on it. */
- /* Uses about 81k */
-
- OPT OSVERSION=37
-
- MODULE 'reqtools', 'libraries/reqtools'
-
- DEF ftype[100]:ARRAY OF LONG, action[100]:ARRAY OF LONG, flist:PTR TO rtfilelist,
- filetype[100]:ARRAY OF LONG, last=0, match, exit,
- filename[256]:STRING, filepath[256]:STRING, fileid[20]:STRING
-
- PROC loadftypes()
- DEF file, flag=FALSE, temp[256]:STRING, index
- IF file:= Open('ENV:FProcess.Prefs', OLDFILE)
- Fgets(file,temp,5) ; last:=Val(temp,NIL)
- FOR index:=1 TO last
- Fgets(file,temp,256)
- Fgets(file,temp,256) ; filetype[index]:=String((StrLen(temp)-1))
- StrCopy(filetype[index],temp,(StrLen(temp)-1))
- Fgets(file,temp,256) ; ftype[index]:=String((StrLen(temp)-1))
- StrCopy(ftype[index],temp,(StrLen(temp)-1))
- Fgets(file,temp,256) ; action[index]:=String((StrLen(temp)-1))
- StrCopy(action[index],temp,(StrLen(temp)-1))
- ENDFOR
- Close(file) ; flag:=TRUE
- ELSE ; Close(file) ; WriteF('Couldn''t open ENV:Fprocess.Prefs!\n')
- ENDIF
- ENDPROC flag
-
- PROC filereq()
- DEF a[2]:STRING, req:PTR TO rtfilerequester
- IF reqtoolsbase:=OpenLibrary('reqtools.library',38)
- IF req:=RtAllocRequestA(RT_FILEREQ,NIL)
- RtChangeReqAttrA(req,[RTFI_DIR, filepath, NIL])
- IF flist:=RtFileRequestA(req, filename, 'Select a file to process.', [RTFI_FLAGS, FREQF_MULTISELECT, NIL])
- IF (StrCmp(req.dir,'',ALL)=FALSE)
- StrCopy(filepath,req.dir,ALL) ; MidStr(a,req.dir,StrLen(req.dir)-1,ALL)
- IF (StrCmp(a,':',ALL)=FALSE) THEN StrAdd(filepath,'/',ALL)
- ENDIF
- ELSE ; exit:=1
- ENDIF
- RtFreeRequest(req)
- ELSE ; exit:=1 ; WriteF('Could not open filerequester!\n')
- ENDIF
- CloseLibrary(reqtoolsbase)
- ELSE ; exit:=1 ; WriteF('Could not open reqtools.library!\n')
- ENDIF
- ENDPROC
-
- PROC identify(fname,id)
- DEF index=0, indexx=0, done=FALSE, yes, test1[10]:STRING, test2[10]:STRING
- match:=0
- WHILE (done=FALSE)AND(index<last) ; INC index
- IF StrCmp(ftype[index],'#',1)
- RightStr(test1,ftype[index],StrLen(ftype[index])-1)
- RightStr(test2,fname, StrLen(ftype[index])-1)
- IF StrCmp(test1,test2,StrLen(ftype[index])-1)
- match:=index ; done:=TRUE
- ENDIF
- ELSE
- indexx:=0 ; yes:=TRUE
- WHILE (indexx<StrLen(ftype[index]))AND(yes=TRUE)
- MidStr(test1, ftype[index], indexx, 1) ; MidStr(test2, id, indexx, 1)
- IF (StrCmp(test1,'?',ALL)=FALSE) THEN yes:=StrCmp(test1,test2,1)
- INC indexx
- ENDWHILE
- IF yes ; match:=index ; done:=TRUE ; ELSE ; match:=0 ;ENDIF
- ENDIF
- ENDWHILE
- ENDPROC match
-
- PROC load()
- DEF this:PTR TO rtfilelist, done=FALSE
- filereq() ; this:=flist
- REPEAT
- IF exit=0
- StrCopy(filename,this.name,this.strlen) ; SetStr(filename,StrLen(filename))
- dostuff()
- ENDIF
- IF this.next=NIL THEN done:=TRUE ELSE this:=this.next
- UNTIL done
- DisposeLink(flist)
- ENDPROC exit
-
- PROC dostuff()
- DEF file, newfile[256]:STRING
- StringF(newfile,'\s\s',filepath,filename)
- IF exit=0
- IF file:= Open(newfile, OLDFILE)
- Fgets(file,fileid,22) ; SetStr(fileid,StrLen(fileid))
- IF identify(filename,fileid)
- WriteF('\l\s[20] : \l\s\n',filetype[match],filename)
- StringF(newfile,'\s >NIL: \s\s',action[match],filepath,filename)
- IF (StrCmp(action[match],'',ALL)=FALSE) THEN Execute(newfile,0,0)
- ELSE ; WriteF('Unknown Filetype : \l\s[20] : \s\n',fileid,filename)
- ENDIF
- ELSE ; WriteF('Couldn''t open file: \s\n',filename)
- ENDIF
- Close(file)
- ENDIF
- ENDPROC
-
- PROC main()
- DEF myargs:PTR TO LONG, rdargs
- myargs:=[0] ; StrCopy(filename,'',ALL) ; StrCopy(filepath,'',ALL)
- IF loadftypes()
- IF rdargs:=ReadArgs('Filename/A',myargs,NIL)
- StrCopy(filename,myargs[0],ALL) ; FreeArgs(rdargs)
- StrCopy(filepath,'',ALL) ; dostuff()
- ELSE
- WHILE (exit<>1) DO load()
- ENDIF
- ENDIF
- ENDPROC
-