home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / utilities / wb / fprocess10.lha / Programming / Source / FProcess.E
Encoding:
Text File  |  1992-09-02  |  3.9 KB  |  115 lines

  1. /* Little program to identify a file and run a predesigned process on it. */ 
  2. /* Uses about 81k */
  3.  
  4. OPT OSVERSION=37
  5.  
  6. MODULE 'reqtools', 'libraries/reqtools' 
  7.  
  8. DEF ftype[100]:ARRAY OF LONG, action[100]:ARRAY OF LONG, flist:PTR TO rtfilelist,
  9.     filetype[100]:ARRAY OF LONG, last=0, match, exit,
  10.     filename[256]:STRING, filepath[256]:STRING, fileid[20]:STRING
  11.  
  12. PROC loadftypes()
  13.   DEF file, flag=FALSE, temp[256]:STRING, index
  14.   IF file:= Open('ENV:FProcess.Prefs', OLDFILE)
  15.     Fgets(file,temp,5) ; last:=Val(temp,NIL)
  16.     FOR index:=1 TO last
  17.       Fgets(file,temp,256)
  18.       Fgets(file,temp,256) ; filetype[index]:=String((StrLen(temp)-1))
  19.       StrCopy(filetype[index],temp,(StrLen(temp)-1))
  20.       Fgets(file,temp,256) ; ftype[index]:=String((StrLen(temp)-1))
  21.       StrCopy(ftype[index],temp,(StrLen(temp)-1))   
  22.       Fgets(file,temp,256) ; action[index]:=String((StrLen(temp)-1))
  23.       StrCopy(action[index],temp,(StrLen(temp)-1))  
  24.     ENDFOR
  25.     Close(file) ; flag:=TRUE
  26.   ELSE ; Close(file) ; WriteF('Couldn''t open ENV:Fprocess.Prefs!\n')
  27.   ENDIF
  28. ENDPROC flag
  29.  
  30. PROC filereq()
  31.   DEF a[2]:STRING, req:PTR TO rtfilerequester
  32.   IF reqtoolsbase:=OpenLibrary('reqtools.library',38)
  33.     IF req:=RtAllocRequestA(RT_FILEREQ,NIL)
  34.       RtChangeReqAttrA(req,[RTFI_DIR, filepath,  NIL])
  35.       IF flist:=RtFileRequestA(req, filename, 'Select a file to process.', [RTFI_FLAGS, FREQF_MULTISELECT, NIL])
  36.         IF (StrCmp(req.dir,'',ALL)=FALSE) 
  37.           StrCopy(filepath,req.dir,ALL) ; MidStr(a,req.dir,StrLen(req.dir)-1,ALL)
  38.           IF (StrCmp(a,':',ALL)=FALSE) THEN StrAdd(filepath,'/',ALL)
  39.         ENDIF
  40.       ELSE ; exit:=1 
  41.       ENDIF
  42.       RtFreeRequest(req)
  43.     ELSE ; exit:=1 ; WriteF('Could not open filerequester!\n')
  44.     ENDIF
  45.     CloseLibrary(reqtoolsbase)
  46.   ELSE ; exit:=1 ; WriteF('Could not open reqtools.library!\n')
  47.   ENDIF
  48. ENDPROC 
  49.  
  50. PROC identify(fname,id)
  51.   DEF index=0, indexx=0, done=FALSE, yes, test1[10]:STRING, test2[10]:STRING
  52.   match:=0
  53.   WHILE (done=FALSE)AND(index<last) ; INC index
  54.     IF StrCmp(ftype[index],'#',1)
  55.       RightStr(test1,ftype[index],StrLen(ftype[index])-1)
  56.       RightStr(test2,fname,       StrLen(ftype[index])-1)
  57.       IF StrCmp(test1,test2,StrLen(ftype[index])-1) 
  58.         match:=index ; done:=TRUE
  59.       ENDIF
  60.     ELSE
  61.       indexx:=0 ; yes:=TRUE
  62.       WHILE (indexx<StrLen(ftype[index]))AND(yes=TRUE) 
  63.         MidStr(test1, ftype[index], indexx, 1) ; MidStr(test2, id, indexx, 1)
  64.         IF (StrCmp(test1,'?',ALL)=FALSE) THEN yes:=StrCmp(test1,test2,1)
  65.         INC indexx 
  66.       ENDWHILE
  67.       IF yes ; match:=index ; done:=TRUE ; ELSE ; match:=0 ;ENDIF
  68.     ENDIF
  69.   ENDWHILE
  70. ENDPROC match
  71.  
  72. PROC load()
  73.   DEF this:PTR TO rtfilelist, done=FALSE
  74.   filereq() ; this:=flist
  75.   REPEAT
  76.     IF exit=0
  77.       StrCopy(filename,this.name,this.strlen) ; SetStr(filename,StrLen(filename))
  78.       dostuff()
  79.     ENDIF
  80.     IF this.next=NIL THEN done:=TRUE ELSE this:=this.next
  81.   UNTIL done 
  82.   DisposeLink(flist)
  83. ENDPROC exit
  84.  
  85. PROC dostuff()
  86.   DEF file, newfile[256]:STRING
  87.   StringF(newfile,'\s\s',filepath,filename)
  88.   IF exit=0
  89.     IF file:= Open(newfile, OLDFILE)
  90.       Fgets(file,fileid,22) ; SetStr(fileid,StrLen(fileid))
  91.       IF identify(filename,fileid) 
  92.         WriteF('\l\s[20] : \l\s\n',filetype[match],filename)
  93.         StringF(newfile,'\s >NIL: \s\s',action[match],filepath,filename)
  94.         IF (StrCmp(action[match],'',ALL)=FALSE) THEN Execute(newfile,0,0)
  95.       ELSE ; WriteF('Unknown Filetype     : \l\s[20] : \s\n',fileid,filename)
  96.       ENDIF
  97.     ELSE ; WriteF('Couldn''t open file: \s\n',filename)        
  98.     ENDIF
  99.     Close(file)
  100.   ENDIF
  101. ENDPROC
  102.  
  103. PROC main()
  104.   DEF myargs:PTR TO LONG, rdargs
  105.   myargs:=[0] ; StrCopy(filename,'',ALL) ; StrCopy(filepath,'',ALL)
  106.   IF loadftypes()
  107.     IF rdargs:=ReadArgs('Filename/A',myargs,NIL)
  108.       StrCopy(filename,myargs[0],ALL) ; FreeArgs(rdargs)
  109.       StrCopy(filepath,'',ALL) ; dostuff()
  110.     ELSE
  111.       WHILE (exit<>1) DO load() 
  112.     ENDIF
  113.   ENDIF
  114. ENDPROC
  115.