#!/bin/sh # # frames - A frame range tool # # erco@3dsite.com (Greg Ercolano) # # This software is public domain. Please maintain version history. # Please notify me of bugs. Do not remove this header. # Use at your own risk. # # VERS DATE AUTHOR COMMENTS # 1.00 11/17/94 Greg Ercolano Initial version # 1.10 05/28/98 Greg Ercolano Added -rm # x.xx xx/xx/xx - - # awk ' # RETURN #SPACES EXACT LENGTH OF STRING 's' function Spaces(s) { return(substr(sprintf("%80s",""), 1, length(s))); } function HelpAndExit() { print "NAME" print " frame - a frame renumbering tool" print "" print "OPERATIONS [one must be specified]" print " -m[ove] oldrange newrange - Move frame range" print " -l[ink] oldrange newrange - Links" print " -s[link] oldrange newrange - Symbolic Links" print " -e[xist] range - Existance test a frame range" print " -r[m] range - Remove a frame range" #print "* -g[raph] range - Graph frame range sizes" print " range -exec cmd %s [%s..] - Execute a command on a frame range" print "" print "OPTIONS" print " -d[ebug] - debug [dont do anything - just print]" print " -q[uiet] - quiet" print "" print "FRAME RANGES" print " A range can be:" print "" print " foo.%d.rgb 1 10 - foo.1.rgb, foo.2.rgb.." print " foo.%04d.rgb 1 10 2 - foo.0001.rgb, foo.0003.rgb.." print " foo.%03d.rgb 1 10 2 - foo.001.rgb, foo.003.rgb.." print "" print "EXAMPLES" print " RENAME FRAMES. Renames one range of frames to another." print " The following changes the basename from foo to bla:" print "" print " "progname" -move foo.%04d.rla 1 10 bla.%04d.rla" print " "Spaces(progname) \ " ----------------- ------------"; print " "Spaces(progname) \ " Source Range Dest Name"; print "" print " SHIFT FRAMES. Shifts frames 1 thru 10 to 21 thru 30:" print "" print " "progname" -move foo.%04d.rla 1 10 foo.%04d.rla 21" print " "Spaces(progname) \ " ----------------- ---------------"; print " "Spaces(progname) \ " Source Range Dest Range"; print "" print " EXECUTE COMMAND. Executes imconv(1) to convert frames 1 thru 10" print " from rla files to rgb files:" print "" print " "progname" foo.%04d 1 10 -exec imconv %s.rla %s.rgb" print "" print " SYMBOLIC LINKS. Create 100 symbolic links that alternatly link" print " between a.0001.rgb and a.0002.rgb:" print "" print " "progname" -slink a.%04d.rgb 1 2 b.%04d.rgb 1 100" print "" print " REMOVE. Removes frames:" print "" print " "progname" -rm a.%04d.rgb 1 30" print "" #print " GRAPH. Graphs the frame sizes for a range of frames. Lets you" #print " do a quick check for bad frames:" #print "" #print " "progname" -graph a.%04d.rgb 1 30" #print " "progname" -graph a.%04d.rgb 1 30 -rep # repeat every 10 secs" #print "" print "To SEE what these commands do without running them, use '-debug'" print "and the equivalent unix commands are printed to stdout." exit(1); } # DOES FILE EXIST? function Exist(filename) { return( system("if [ -f "filename" ]; then exit 1; fi") ); } # GET FILE SIZE function Size(filename) { $1 = ""; cmd = "du -sL " filename; cmd | getline; close(cmd); if ( $1 == "" ) return(""); return($1); } # SHOW THE FRAME RANGES (FOR DEBUGGING) function ShowRanges() { for (t=0; t 0 && thisframe[i] > rangeefrm[i]) || \ (rangeifrm[i] < 0 && thisframe[i] < rangeefrm[i])) { return(1); } return(0); } # INIT THIS RANGE TO UNSPECIFIED STATE function CompileRangeStart(i) { if (i==-1) return; rangebase[i] = ""; rangesfrm[i] = ""; rangeefrm[i] = ""; rangeifrm[i] = ""; } # COMPILE A FRAME RANGE function CompileRange(i, s) { if (i==-1) return; if (rangebase[i] == "") { rangebase[i] = s; return; } if (rangesfrm[i] == "") { rangesfrm[i] = s + 0; return; } if (rangeefrm[i] == "") { rangeefrm[i] = s + 0; return; } if (rangeifrm[i] == "") { rangeifrm[i] = s + 0; return; } PrintError("\"" s "\": too many args for frame range"); exit(1); } # END THE COMPILATION OF A RANGE # Note that unspecified start/end/inc in secondary ranges # assume the defaults of the values in the primary frame range. # This allows for shorthand such as: # # frame -move old.%d.rla 101 200 , new.%d.rla # function CompileRangeEnd(i, defaults) { if (i==-1) return; # NO BASENAME? if (rangebase[i] == "") { PrintError("no basename specified"); exit(1); } # START FRAME UNSPECIFIED? if (rangesfrm[i] == "") { if (i==0) { PrintError("no start frame"); exit(1); } rangesfrm[i] = rangesfrm[0]; } # END FRAME UNSPECIFIED? if (rangeefrm[i] == "") { if (i==0) rangeefrm[i] = rangesfrm[i]; # PRIMARY: assume start frame else { } # SECONDARY: assume NOTHING! # Handle it in EndOfRange() } # FRAME INC UNSPECIFIED? if (rangeifrm[i] == "") { if (i==0) rangeifrm[i] = 1; # PRIMARY: assume 1 else rangeifrm[i] = rangeifrm[0]; # SECONDARY: assume primary inc } # START WITH THE START FRAME thisframe[i] = rangesfrm[i]; # SANITY CHECK FOR FRAME INCREMENT if (rangeefrm[i] != "") { if ((rangesfrm[i] > rangeefrm[i] && rangeifrm[i] > 0) || \ (rangesfrm[i] < rangeefrm[i] && rangeifrm[i] < 0)) { rangeifrm[i] = -rangeifrm[i]; } } } # EXEC OPERATION function Exec() { if (trange != 1) { PrintError("\"-exec\" only expects one range"); exit(1); } # LOOP THRU FRAME RANGES DebugMsg("\n#\n# EXEC: START\n#"); while ( 1 ) { if (EndOfRange(0)) break; filename = NextFrame(0); Run(sprintf(execcmd, filename, filename, filename, filename)); } close (shellcmd); DebugMsg("\n#\n# DONE\n#"); exit(0); } # MOVE OPERATION function Move() { if (trange != 2) { PrintError("\"-move\" expects two frame ranges"); exit(1); } DebugMsg("\n### MOVE: SAFE NAMES\n"); while ( 1 ) { if (EndOfRange(0)) break; infile = NextFrame(0); Run(sprintf("mv %s __safe__%s", infile, infile)); } DebugMsg("\n### MOVE: FINAL NAMES\n"); RangeRewind(0); RangeRewind(1); while ( 1 ) { if (EndOfRange(0)) break; if (EndOfRange(1)) RangeRewind(1); # loop the secondary range # if too short infile = NextFrame(0); outfile = NextFrame(1); Run(sprintf("mv __safe__%s %s", infile, outfile)); } DebugMsg("\n### MOVE: DONE\n"); exit(0); } # REMOVE OPERATION function Remove() { if (trange != 1) { PrintError("\"-rm\" expects only one frame range"); exit(1); } DebugMsg("\n### REMOVE FILES\n"); while ( 1 ) { if (EndOfRange(0)) break; infile = NextFrame(0); Run(sprintf("rm %s", infile)); } DebugMsg("\n#\n# DONE\n#"); exit(0); } # LINK OPERATION function Link() { if (trange != 2) { PrintError("\"-link\" expects two frame ranges"); exit(1); } DebugMsg("\n### CREATE HARD LINKS\n"); while ( 1 ) { if (EndOfRange(0)) break; infile = NextFrame(0); outfile = NextFrame(1); Run(sprintf("ln %s %s", infile, outfile)); } DebugMsg("\n#\n# DONE\n#"); exit(0); } # SYMBOLIC LINK OPERATION function Slink() { if (trange != 2) { PrintError("\"-slink\" expects two frame ranges"); exit(1); } DebugMsg("\n### CREATE SYMBOLIC LINKS\n"); while ( 1 ) { if (EndOfRange(0)) break; infile = NextFrame(0); outfile = NextFrame(1); Run(sprintf("ln -s %s %s", infile, outfile)); } DebugMsg("\n#\n# DONE\n#"); exit(0); } # EXISTANCE CHECK function ExistCheck() { if (trange < 1) { PrintError("\"-exist\" expects at least one frame range"); exit(1); } # LOOP THRU ALL RANGES SPECIFIED for (t=0; t max ) max = s_arr[tarr]; tarr++; } hashes = "########################################"; hashes = hashes hashes; if ( repeat ) system("clear"); # GRAPH FRAME SIZES for (t=0; t