home *** CD-ROM | disk | FTP | other *** search
- /* GoRe - mehrere Dateien auf einmal mit Joker (nur * oder #?) umbenennen
- 19.11.94 - erste Version, klappt bisher nur ohne Verzeichnisangabe und ist
- auch sonst noch ziemlich schrottig
- 5.12.94 - jetzt auch #? zugelassen, aber noch kein CurrentDir und Tausend Bugs (?!)
- Auf jeden Fall muß demnächst ein Feld eingerichtet werden, in dem alle gefundenen Namen kommen, danach
- darf erst umbenannt werden
- 6.12.94 - beide Sachen von oben integriert - eigentlich fertig, muß nun noch optimiert und fehlerbereinigt
- werden
- 8.12.94 - vor der (armen) Deutscharbeit eigentlich fertig, mal sehen, wo es noch ein paar Ungeziefer gibt...
- 9.12.94 - durchgetestet, läuft einwandfrei (Wahnsinn!)*/
-
- OPT OSVERSION=36
-
- MODULE 'dos/dos','dos/dosasl','exec/memory'
-
- CONST FILELEN=108
-
- DEF i,ver,memblock,ptr1,ptr2,lock,oldlock,rdargs,myanchorpath:anchorpath,myfib:fileinfoblock,
- myargs[3]:ARRAY OF LONG,var,chars[2]:STRING,
- arg1anzjoker,arg2anzjoker,arg1jokerlen,arg2jokerlen,
- arg1davor,arg1dahinter,
- arg2davor[FILELEN]:STRING,arg2dahinter[FILELEN]:STRING,
- arg1path[FILELEN]:STRING,arg1file[FILELEN]:STRING,
- arg2[FILELEN]:STRING,
- name1[FILELEN]:STRING,name2[FILELEN]:STRING,hilf[FILELEN]:STRING
-
- PROC main()
- ver:='$VER: GoRe rel.1a (9.12.94) by Ralph Debusmann'
-
- myargs:=[0,0,0]
- IF rdargs:=ReadArgs('FROM/A,TO=AS/A,QUIET/S',myargs,0)
-
- splitarg(myargs[0],arg1path,arg1file)
-
- StrCopy(arg2,myargs[1],ALL)
-
- arg1exjoker()
-
- arg2exjoker()
-
- /*****************************************************************************/
-
- IF (arg1anzjoker=0) OR (arg2anzjoker=0)
- IF myargs[2]=0
- PutStr(myargs[0])
- PutStr(' -> ')
- PutStr(myargs[1])
- PutStr('\n')
- ENDIF
- Rename(myargs[0],myargs[1])
- ENDIF
-
- IF (arg1anzjoker>1) OR (arg2anzjoker>1)
- PutStr('GoRe konnte nicht umbenennen: Nur eine Wildcard pro Dateiname ist erlaubt.\n')
- ENDIF
-
- IF (arg1anzjoker=1) AND (arg2anzjoker=1)
- IF lock:=Lock(arg1path,ACCESS_READ)
- IF oldlock:=CurrentDir(lock)
- IF MatchFirst(arg1file,myanchorpath)=0
- var:=1
- WHILE MatchNext(myanchorpath)=0 DO var++
- MatchEnd(myanchorpath)
- var:=var*FILELEN
- IF memblock:=AllocMem(var,MEMF_PUBLIC OR MEMF_CLEAR)
- ptr2:=memblock
- IF MatchFirst(arg1file,myanchorpath)=0
- filllist()
- WHILE MatchNext(myanchorpath)=0 DO filllist()
- MatchEnd(myanchorpath)
-
- CurrentDir(oldlock)
- UnLock(lock)
-
- ptr2:=memblock
- loop2:
- MOVE.L ptr2,A0
- TST.B (A0)
- BEQ fertig
-
- StrCopy(name1,arg1path,ALL)
- StrAdd(name1,ptr2,ALL)
-
- StrCopy(name2,arg2davor,ALL)
- MidStr(hilf,ptr2,arg1davor,(StrLen(ptr2)-arg1davor-arg1dahinter))
- StrAdd(name2,hilf,ALL)
- StrAdd(name2,arg2dahinter,ALL)
-
- IF myargs[2]=0
- PutStr(name1)
- PutStr(' -> ')
- PutStr(name2)
- PutStr('\n')
- ENDIF
-
- Rename(name1,name2)
-
- MOVE.L ptr2,A0
- loop3:
- TST.B (A0)+
- BNE.S loop3
-
- MOVE.L A0,ptr2
- BRA loop2
-
- fertig:
- ENDIF
- FreeMem(memblock,var)
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
-
- FreeArgs(rdargs)
- ENDIF
- ENDPROC
-
- /*****************************************************************************/
-
- PROC splitarg(arg,argpath,argfile)
- DEF i,char[1]:STRING
-
- i:=(StrLen(arg)-1)
- REPEAT
- MidStr(char,arg,i,1)
- i--
- UNTIL i=-1 OR StrCmp(char,'/',1) OR StrCmp(char,':',1)
-
- IF i>=0
- i:=i+2
- MidStr(argfile,arg,i,(StrLen(arg)-i))
- MidStr(argpath,arg,0,i)
- ELSE
- MidStr(argfile,arg,i+1,(StrLen(arg)-i-1))
- ENDIF
- ENDPROC
-
- /*****************************************************************************/
-
- PROC arg1exjoker()
- arg1anzjoker:=0
- arg1davor:=0
- arg1jokerlen:=1
-
- FOR i:=0 TO (EstrLen(arg1file)-1)
- MidStr(chars,arg1file,i,2)
- IF StrCmp(chars,'*',1) OR StrCmp(chars,'#?',2)
- arg1anzjoker++
- arg1davor:=i
- IF StrCmp(chars,'#?',2) THEN arg1jokerlen:=2
- ENDIF
- ENDFOR
-
- arg1dahinter:=EstrLen(arg1file)-arg1davor-arg1jokerlen
- ENDPROC
-
- /*****************************************************************************/
-
- PROC arg2exjoker()
- arg2anzjoker:=0
- arg2jokerlen:=1
-
- FOR i:=0 TO (EstrLen(arg2)-1)
- MidStr(chars,arg2,i,2)
- IF StrCmp(chars,'*',1) OR StrCmp(chars,'#?',2)
- arg2anzjoker++
- IF StrCmp(chars,'#?',2) THEN arg2jokerlen:=2
- IF i>0 THEN MidStr(arg2davor,arg2,0,i)
- MidStr(arg2dahinter,arg2,i+arg2jokerlen,(EstrLen(arg2)-i-arg2jokerlen))
- ENDIF
- ENDFOR
- ENDPROC
-
-
- /*****************************************************************************/
-
- PROC filllist()
- myfib:=myanchorpath.info
- ptr1:=myfib.filename
-
- MOVE.L ptr1,A0
- MOVE.L ptr2,A1
-
- loop:
- MOVE.B (A0)+,(A1)+
- TST.B (A0)
- BNE.S loop
- CLR.B (A1)+
-
- MOVE.L A1,ptr2
- ENDPROC
-