Files
linguist/samples/REXX/BatchRemapBrushes.pprx
Iggy Drougge 7024c7cb37 Add REXX.
2016-07-18 21:02:51 +02:00

174 lines
5.1 KiB
Rexx

/* Ga igenom lador med IFF-filer rekursivt och skapa:
1: Spritekartor om 320x256 med alla spritar
2: En tabell med enumererade spritenummer
Aterstar:
*: Att skriva shapesfiler direkt
$VER: 1.0
*/
SIGNAL ON BREAK_C
PARSE ARG argument
template = 'START/N COLOURS/N REMAP/S RECURSIVE/S PALETTE/K DIRECTORY/A'
CALL Init
ADDRESS 'PPAINT'
OPTIONS RESULTS
GetBestVideoMode WIDTH 320 HEIGHT 256 COLORS args.colours
modeid=Word(RESULT,1)
say modeid
Set 'FORCE "DISPLAY=' || modeid || '"'
IF RC~=0 THEN EXIT 20
Set 'FORCE "IMAGEW=320" "IMAGEH=256" "COLORS='args.colours'"'
ClearImage
LockGUI
ScreenToFront
x=0 ; y=0 ; maxhoejd=0 ; fil#=0 ; blad#=0
CALL WriteLn konstfil, ';Blad' blad#
DO UNTIL Lines()==0 & fillista==''
DO WHILE fillista~=''
PARSE VAR fillista filnamn 'y' fillista
IF Right(filnamn,5)=='.info' THEN ITERATE
IF Word(StateF(dir||filnamn),1)=='DIR' THEN DO
PUSH fillista
PUSH dir
dir=dir||filnamn||'/'
SAY 'Entering directory' dir'...'
fillista=ShowDir(dir,'ALL','y')
ITERATE
END
LoadBrush FILE dir || filnamn NOPROGRESS
IF RC~==0 THEN DO
SAY 'Skipping file:' dir || filnamn
ITERATE
END
IF args.remap THEN RemapBrush NOPROGRESS
GetBrushAttributes WIDTH ; bredd=RESULT
GetBrushAttributes HEIGHT ; hoejd=RESULT
GetBrushAttributes COLORS ; djup=RESULT
IF bredd//16==0 THEN ebwidth=bredd
ELSE ebwidth=bredd+(16-(bredd//16))
maxhoejd=Max(maxhoejd,hoejd)
SAY 'File:' Left(filnamn,29) 'Width:' bredd ' Height:' hoejd ' Depth:' djup ' ebwidth:' ebwidth
SetCurrentBrush RECTANGULAR WIDTH 1 HEIGHT 1
DrawRectangle x y x+ebwidth y+hoejd
Text fil# 'X' x+2 'Y' y+2
SetCurrentBrush 1 ; SetBrushHandle 0 0
PutBrush x y
CALL WriteLn(konstfil,'; '||fil# ||': '|| filnamn ||' ('||ebwidth||'x'||hoejd||'x'||djup||')')
CALL WriteLn(konstfil,'#'||Upper(Left(filnamn,Min(Length(filnamn),Max(LastPos('.',filnamn)-1,0))))||'='fil#)
x=x+ebwidth
IF x+ebwidth>319 THEN DO
x=0
y=y+maxhoejd
IF y+maxhoejd>255 THEN DO
SaveImage FILE 'Spritesheet' || blad# || '.ilbm' FORCE
IF RC==0 THEN SAY 'Saved sheet' blad#
ELSE SAY "Couldn't save spritesheet"
ClearImage
y=0
blad#=blad#+1
CALL WriteLn konstfil, ';Blad' blad#
END
maxhoejd=0
END
fil#=fil#+1
END /* WHILE fillista */
IF Lines()>0 THEN DO
PARSE PULL dir
PARSE PULL fillista
SAY 'Going back to' dir'...'
END
END /* UNTIL Lines() */
BREAK_C:
FreeBrush FORCE
UnLockGUI
medd=fil# 'files processed in' blad#+1 'sheets'
SAY medd
RequestNotify 'TITLE SpriteSheet.pprx PROMPT "'medd'"'
ScreenToBack
CALL Close(konstfil)
DO WHILE Lines()>0; PULL .; END
EXIT 0
Init:
IF argument = '' | argument = '?' THEN DO
SAY template
EXIT 0
END
CALL ReadArgs()
IF ~Show('L',"rexxsupport.library") THEN DO
IF ~AddLib("rexxsupport.library",0,-30,0) THEN DO
SAY 'Hittade inte rexxsupport.library'
EXIT 20
END
END
IF ~Open(konstfil,'SpriteConstants.txt','WRITE') THEN EXIT 10
IF ~SHOW('P', 'PPAINT') THEN DO
SAY "Couldn't find PPaint. Please start the program first."
EXIT 5
END
dir=args.directory
IF dir='""' THEN dir=Pragma('DIRECTORY')
IF dir='' THEN dir='Ram:Megamanv6/Graphics/'
IF Right(dir,1)~=='/' THEN dir=dir || '/'
fillista=ShowDir(dir,'FILES','y')
fillista=ShowDir(dir,'ALL','y')
IF fillista="" THEN DO
SAY "Found no files"
EXIT 5
END
IF args.colours==0 THEN args.colours=16
ADDRESS 'PPAINT'
OPTIONS RESULTS
IF args.palette~='' THEN LoadPalette args.palette
RETURN
ReadArgs:
/* ReadArgs()-like evaluation of command line arguments */
SAY 'ReadArgs'
DO key# = 1 TO Words(Template)
key=Word(template,key#)
PARSE VAR key key "/" keytype
SELECT
WHEN keytype='S'|keytype='N' THEN args.key=0
WHEN keytype='K'|keytype='A' THEN args.key=''
OTHERWISE NOP /* Error in template */
END
END
DO WHILE argument ~= ''
PARSE VAR argument arg1 argument
arg2=''
DO key# = 1 TO Words(template)
key = Word(template,key#)
PARSE VAR key key '/' keytype
IF Upper(Left(arg1,Length(key))) = key THEN DO
SELECT
WHEN keytype='S' THEN DO
args.key=1
END
WHEN keytype='K' | keytype='N' | keytype='A' THEN DO
IF Index(arg1,'=')>0
THEN DO
SAY 'Innehaller ='
PARSE VAR arg1 '=' arg2
SAY 'arg2:' arg2
END
ELSE PARSE VAR argument arg2 argument
args.key=arg2
IF keytype='N' & DataType(arg2)~==NUM THEN DO
SAY 'Illegal numerical argument' key arg2
EXIT 10
END
END
END
arg1=''
LEAVE key#
END
END
IF arg1~='' THEN args.directory=arg1
END
RETURN