home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / Comands / gore.lha / GoRe.e < prev    next >
Encoding:
Text File  |  1994-12-10  |  4.6 KB  |  193 lines

  1. /* GoRe - mehrere Dateien auf einmal mit Joker (nur * oder #?)  umbenennen
  2. 19.11.94 - erste Version, klappt bisher nur ohne Verzeichnisangabe und ist
  3. auch sonst noch ziemlich schrottig
  4. 5.12.94 - jetzt auch #? zugelassen, aber noch kein CurrentDir und Tausend Bugs (?!)
  5. Auf jeden Fall muß demnächst ein Feld eingerichtet werden, in dem alle gefundenen Namen kommen, danach
  6. darf erst umbenannt werden
  7. 6.12.94 - beide Sachen von oben integriert - eigentlich fertig, muß nun noch optimiert und fehlerbereinigt
  8. werden
  9. 8.12.94 - vor der (armen) Deutscharbeit eigentlich fertig, mal sehen, wo es noch ein paar Ungeziefer gibt...
  10. 9.12.94 - durchgetestet, läuft einwandfrei (Wahnsinn!)*/
  11.  
  12. OPT OSVERSION=36
  13.  
  14. MODULE 'dos/dos','dos/dosasl','exec/memory'
  15.  
  16. CONST FILELEN=108
  17.  
  18. DEF i,ver,memblock,ptr1,ptr2,lock,oldlock,rdargs,myanchorpath:anchorpath,myfib:fileinfoblock,
  19.     myargs[3]:ARRAY OF LONG,var,chars[2]:STRING,
  20.     arg1anzjoker,arg2anzjoker,arg1jokerlen,arg2jokerlen,
  21.     arg1davor,arg1dahinter,
  22.     arg2davor[FILELEN]:STRING,arg2dahinter[FILELEN]:STRING,
  23.     arg1path[FILELEN]:STRING,arg1file[FILELEN]:STRING,
  24.     arg2[FILELEN]:STRING,
  25.     name1[FILELEN]:STRING,name2[FILELEN]:STRING,hilf[FILELEN]:STRING
  26.  
  27. PROC main()
  28.     ver:='$VER: GoRe rel.1a (9.12.94) by Ralph Debusmann'
  29.  
  30.     myargs:=[0,0,0]
  31.     IF rdargs:=ReadArgs('FROM/A,TO=AS/A,QUIET/S',myargs,0)
  32.  
  33.         splitarg(myargs[0],arg1path,arg1file)
  34.  
  35.         StrCopy(arg2,myargs[1],ALL)
  36.  
  37.         arg1exjoker()
  38.  
  39.         arg2exjoker()
  40.  
  41. /*****************************************************************************/
  42.  
  43.         IF (arg1anzjoker=0) OR (arg2anzjoker=0)
  44.             IF myargs[2]=0
  45.                 PutStr(myargs[0])
  46.                 PutStr(' -> ')
  47.                 PutStr(myargs[1])
  48.                 PutStr('\n')
  49.             ENDIF
  50.             Rename(myargs[0],myargs[1])
  51.         ENDIF
  52.  
  53.         IF (arg1anzjoker>1) OR (arg2anzjoker>1)
  54.             PutStr('GoRe konnte nicht umbenennen: Nur eine Wildcard pro Dateiname ist erlaubt.\n')
  55.         ENDIF
  56.  
  57.         IF (arg1anzjoker=1) AND (arg2anzjoker=1)
  58.             IF lock:=Lock(arg1path,ACCESS_READ)
  59.                 IF oldlock:=CurrentDir(lock)
  60.                     IF MatchFirst(arg1file,myanchorpath)=0
  61.                         var:=1
  62.                         WHILE MatchNext(myanchorpath)=0 DO var++
  63.                         MatchEnd(myanchorpath)
  64.                         var:=var*FILELEN
  65.                         IF memblock:=AllocMem(var,MEMF_PUBLIC OR MEMF_CLEAR)
  66.                             ptr2:=memblock
  67.                             IF MatchFirst(arg1file,myanchorpath)=0
  68.                                 filllist()
  69.                                 WHILE MatchNext(myanchorpath)=0 DO filllist()
  70.                                 MatchEnd(myanchorpath)
  71.  
  72.                                 CurrentDir(oldlock)
  73.                                 UnLock(lock)
  74.  
  75.                                 ptr2:=memblock
  76.                                 loop2:
  77.                                     MOVE.L    ptr2,A0
  78.                                     TST.B    (A0)
  79.                                     BEQ        fertig
  80.  
  81.                                 StrCopy(name1,arg1path,ALL)
  82.                                 StrAdd(name1,ptr2,ALL)
  83.  
  84.                                 StrCopy(name2,arg2davor,ALL)
  85.                                 MidStr(hilf,ptr2,arg1davor,(StrLen(ptr2)-arg1davor-arg1dahinter))
  86.                                 StrAdd(name2,hilf,ALL)
  87.                                 StrAdd(name2,arg2dahinter,ALL)
  88.  
  89.                                 IF myargs[2]=0
  90.                                     PutStr(name1)
  91.                                     PutStr(' -> ')
  92.                                     PutStr(name2)
  93.                                     PutStr('\n')
  94.                                 ENDIF
  95.  
  96.                                 Rename(name1,name2)    
  97.  
  98.                                 MOVE.L        ptr2,A0
  99.                                 loop3:
  100.                                     TST.B        (A0)+
  101.                                     BNE.S        loop3
  102.  
  103.                                 MOVE.L        A0,ptr2
  104.                                 BRA                loop2
  105.  
  106.                                 fertig:
  107.                             ENDIF
  108.                             FreeMem(memblock,var)
  109.                         ENDIF
  110.                     ENDIF
  111.                 ENDIF
  112.             ENDIF
  113.         ENDIF
  114.  
  115.         FreeArgs(rdargs)
  116.     ENDIF
  117. ENDPROC
  118.  
  119. /*****************************************************************************/
  120.  
  121. PROC splitarg(arg,argpath,argfile)
  122. DEF i,char[1]:STRING
  123.  
  124.         i:=(StrLen(arg)-1)
  125.         REPEAT
  126.             MidStr(char,arg,i,1)
  127.             i--
  128.         UNTIL i=-1 OR StrCmp(char,'/',1) OR StrCmp(char,':',1)
  129.  
  130.         IF i>=0
  131.             i:=i+2
  132.             MidStr(argfile,arg,i,(StrLen(arg)-i))
  133.             MidStr(argpath,arg,0,i)
  134.         ELSE
  135.             MidStr(argfile,arg,i+1,(StrLen(arg)-i-1))
  136.         ENDIF
  137. ENDPROC
  138.  
  139. /*****************************************************************************/
  140.  
  141. PROC arg1exjoker()
  142.     arg1anzjoker:=0
  143.     arg1davor:=0
  144.     arg1jokerlen:=1
  145.  
  146.         FOR i:=0 TO (EstrLen(arg1file)-1)
  147.             MidStr(chars,arg1file,i,2)
  148.             IF StrCmp(chars,'*',1) OR StrCmp(chars,'#?',2)
  149.                 arg1anzjoker++
  150.                 arg1davor:=i
  151.                 IF StrCmp(chars,'#?',2) THEN arg1jokerlen:=2
  152.             ENDIF
  153.         ENDFOR
  154.  
  155.         arg1dahinter:=EstrLen(arg1file)-arg1davor-arg1jokerlen
  156. ENDPROC
  157.  
  158. /*****************************************************************************/
  159.  
  160. PROC arg2exjoker()
  161.         arg2anzjoker:=0
  162.         arg2jokerlen:=1
  163.  
  164.         FOR i:=0 TO (EstrLen(arg2)-1)
  165.             MidStr(chars,arg2,i,2)
  166.             IF StrCmp(chars,'*',1) OR StrCmp(chars,'#?',2)
  167.                 arg2anzjoker++
  168.                 IF StrCmp(chars,'#?',2) THEN arg2jokerlen:=2
  169.                 IF i>0 THEN    MidStr(arg2davor,arg2,0,i)
  170.                 MidStr(arg2dahinter,arg2,i+arg2jokerlen,(EstrLen(arg2)-i-arg2jokerlen))
  171.             ENDIF
  172.         ENDFOR
  173. ENDPROC
  174.  
  175.  
  176. /*****************************************************************************/
  177.  
  178. PROC filllist()
  179.     myfib:=myanchorpath.info
  180.     ptr1:=myfib.filename
  181.  
  182.     MOVE.L ptr1,A0
  183.     MOVE.L ptr2,A1
  184.  
  185.     loop:
  186.         MOVE.B    (A0)+,(A1)+
  187.         TST.B    (A0)
  188.         BNE.S    loop
  189.         CLR.B    (A1)+
  190.  
  191.     MOVE.L    A1,ptr2
  192. ENDPROC
  193.