> BBCtoGIF v0.22 + Convert BBC screen image to GIF image > v0.10 10-Jul-2010 JGH: Initial version based on BBCtoBMP (+ v0.20 03-Oct-2012 JGH: Mostly working 20 v0.21 03-Oct-2012 JGH: Zebra lines correct <; v0.22 04-Oct-2012 JGH: Different code lengths working F: PE ctrl% 31,name% 79,zp% 7,palette% 15,buf% 255:X%=ctrl%:Y%=X%256 Z#mem%=0: ->&5400: mem% &4FFF d: n? :Close_All: " at line "+ ,<>17 <128):exit() xXA$=OS_GetEnv+" ":quit$=cl(" -q",1):d$=".":s$="/":os%=32:Win_TextIO:d$="\":s$="." qsm%=cl("-s",0):rle%=cl("-u",0)cl("-c",0):vb%=cl("-v",0):mode$=cl("-m",1):cl("-?",0):syntax:exit(0) :in$=cl("",0):out$=cl("",0):mode$="":mode$=cl("",0) Yin$="":"BBC Screen image: "in$:"BBC Screen mode: "mode$:"Output GIF file: "out$ (in$="" out$="":syntax:exit(220) %mode%=mode$7:mode$="":mode%=-1 $os%=32:in$,".")=0:in$=in$+"." GX%!2=0:X%!6=0:file(in$,5)<>1:"File '"in$"' not found":exit(214) (fsize%=X%!10:X%!2=0: X%!6=0:rdInf =scr%=(X%?5=&FF X%!2<>X%!6 (X%?9=0 X%?9=&FF)):cpr%=0 Dscr%:cpr%=(X%?5=&FF X%?9=0)(X%?8+1):mode%<0:mode%=X%?7 16 =cpr%:mem%=0:"No memory for decompression":exit(128-2) mode%<0:syntax:exit(220) :  FOR test%=255 TO 3 STEP -1 " out$="TEST"+STR$test%+".gif"  Set mode parameters " ------------------- ,Lmode%=0:ColoursUsed%=2 :BitCount%=1:px%=8:xs%=1:ys%=2:zebra%=0:cols%=80 6]mode%=1:ColoursUsed%=4 :BitCount%=2:px%=4:xs%=2:ys%=2:zebra%=0:cols%=80:sm%:xs%=1:ys%=1 @]mode%=2:ColoursUsed%=16:BitCount%=4:px%=2:xs%=4:ys%=2:zebra%=0:cols%=80:sm%:xs%=2:ys%=1 JLmode%=3:ColoursUsed%=2 :BitCount%=1:px%=8:xs%=1:ys%=2:zebra%=2:cols%=80 T]mode%=4:ColoursUsed%=2 :BitCount%=1:px%=8:xs%=2:ys%=2:zebra%=0:cols%=40:sm%:xs%=1:ys%=1 ^]mode%=5:ColoursUsed%=4 :BitCount%=2:px%=4:xs%=4:ys%=2:zebra%=0:cols%=40:sm%:xs%=2:ys%=1 h]mode%=6:ColoursUsed%=2 :BitCount%=1:px%=8:xs%=2:ys%=2:zebra%=2:cols%=40:sm%:xs%=1:ys%=1 rMmode%=7:ColoursUsed%=8 :BitCount%=3:"MODE 7 not supported":exit(128-1) |1NumColours%=2^BitCount% : Number of colours : 3 Read palette entries from load/exec addresses 3 --------------------------------------------- A%=015:palette%?A%=A%7: 'ColoursUsed%=4:!palette%=&07030100 'ColoursUsed%=2:!palette%=&00000700 }scr%:col%=X%!6 &FFF:A%=03:palette%?A%=col%7:col%=col%8::col%=X%!2 &FFF:A%=47:palette%?A%=col%7:col%=col%8: :  Load BBC screen file  -------------------- $scrload:rows%=(fsize%cols%)-8 lscr%:mode%=2:mem%:A%=03:palette%?(A%*2+8)=(mem%?A%)7:palette%?(A%*2+9)=(mem%?A%)16::!mem%=mem%!4 :  Calculate variables  ------------------- Width% =cols%*xs%*px% &#Height%=rows%*ys%+zebra%*ys%*26 0"Flags% =128+16*3+(BitCount%-1) :$ Flags% =128+16*0+(BitCount%-1) D PRINT"px%=";px% N PRINT"BitCount=";BitCount% X PRINT"Width =";Width% b PRINT"Height =";Height% l: v Open output file  --------------- Fout%=(out$): out%=0:"Can't open '"out$"'":Close_All:exit(192) :  File header  ----------- 5$zp%="GIF89a":wr32(out%,zp%!0):wr16(out%,zp%!4) :  Info header  ----------- wr16(out%,Width%) wr16(out%,Height%) #out%,Flags% 0#out%,0 : Background colour +#out%,0 : Aspect ratio  :  Colour table   ------------ * colour%=0 NumColours%-1 4,#out%,(((palette%?colour%)1)<>0): red >.#out%,(((palette%?colour%)2)<>0): green H-#out%,(((palette%?colour%)4)<>0): blue R \: f Raster header p ------------- z/#out%,&2C : Image descriptor 4wr16(out%,0) : NW corner is at (0, ) 4wr16(out%,0) : NW corner is at ( ,0) wr16(out%,Width%) wr16(out%,Height%) 4#out%,0 : No local colour table : " Output uncompressed GIF data " ----------------------------  BitCount%<4:BitCount%=4 + Can't get it working with BitCount%<4 MBitCount%=5: 5 with bytemax=21 gives smaller files than 4 with bytemax=5 : FInitialCodeSize%=BitCount%: InitialCodeSize%<2:InitialCodeSize%=2 "CodeSize% =InitialCodeSize%+1 ClearCode% =2^(CodeSize%-1) EndOfInfo% =ClearCode%+1 $counter% =EndOfInfo%+1 .acc% =0 8cnt% =0 Bbytecount% =0 L bytemax%=24:sm%:bytemax%=48 V< CodeSize%=8:bytemax%=126 : BitCount%=7, Colours%=128 `; CodeSize%=7:bytemax%=49 : BitCount%=6, Colours%=64 j; CodeSize%=6:bytemax%=21 : BitCount%=5, Colours%=32 tD CodeSize%=5:bytemax%=5 : BitCount%=4, Colours%=16 - MODE 2 ~A IF CodeSize%=4:bytemax%=test% :REM BitCount%=3, Colours%=8 ` IF CodeSize%=3:bytemax%=test% :REM BitCount%=2 or 1, Colours%=4 or 2 - All MODES except 2 : / PRINT"InitialCodeSize%=";InitialCodeSize%  PRINT"CodeSize=";CodeSize% " PRINT"ClearCode=";ClearCode% " PRINT"EndOfInfo=";EndOfInfo% :  Raster data  ----------- #out%,InitialCodeSize% gifOutput(ClearCode%,0) 1 row%=0 rows%-1:vb%: 13;rows%-row%;" ";  sq%=1 ys%   col%=0 cols%-1 )ptr%=col%*8+(row%7)+(row%8)*cols%*8 - mem%:B%=mem%?ptr% #in%=ptr%:B%=#in% ( ColoursUsed%=2 :mode0 2 ColoursUsed%=4 :mode1 < ColoursUsed%=16:mode2 F col% P sq% Z:(row%7)=7: zebra%: A%=1 cols%*px%*2*ys%:px(0): d row% n. zebra%: A%=1 cols%*px%*6*ys%:px(0): x vb%: 13;" ";13; gifOutput(EndOfInfo%,0) gifFlush: Last block !gifFlush: Zero-length block #out%,";" :  Finished  -------- Close_All  NEXT  exit(0) 2os%<32:"SetType "+out$+" 695":"Stamp "+out$ exit(0): :  mode0 Epx((B%128)128):px((B%64)64):px((B%32)32):px((B%16)16) 7px((B%8)8):px((B%4)4):px((B%2)2):px(B%1) " ,: 6 mode1 @!px(((B%&80)64)((B%8)8)) J!px(((B%&40)32)((B%4)4)) T!px(((B%&20)16)((B%2)2)) ^px(((B%&10)8)(B%1)) h r: | mode2 9px(((B%&80)16)((B%&20)8)((B%8)4)((B%2)2)) 4px(((B%&40)8)((B%&10)4)((B%4)2)(B%1))  :  Output a pixel  -------------- px(Pixel%)  x%=1 xs% gifOutput(Pixel%,)  x%  : gifOutput(A%,clr%)  lp%  lp%=1 CodeSize% .acc%=acc%2+128*(A%1):cnt%=cnt%+1:A%=A%2 &G cnt%=8:bytecount%=bytecount%+1:buf%?bytecount%=acc%:acc%=0:cnt%=0 0B bytecount%=bytemax%:gifFlush:clr%:gifOutput(ClearCode%,0) : lp% D N: XgifFlush bF?buf%=bytecount%: Z%=0 bytecount%:#out%,buf%?Z%::bytecount%=0 l v:  Load BBC screen image  ---------------------  scrload +cpr%=0:mem%:"Load "+in$+" "+~mem%: in%=(in$):cpr%=0: : % Read in compressed screen image % ------------------------------- +ptr%=0::B%=#in%:N%=#in%:N%=0:N%=256 Vmem%?ptr%=B%:ptr%=ptr%+cpr%:N%=N%-1:ptr%>&4FFF:(ptr%3)<>cpr%-1:ptr%=ptr%-&4FFF N%=0:#in%:#in%:in%=0 fsize%=ptr%+1-cpr%: :  Read in .inf file   ----------------- 4rdInf:in%=(fn_noext(in$)+s$+"inf"): in%=0:  A%=0:B%=#in%:B%=10:B%=13 *3name%?A%=B%:A%=A%+1: #in% A%>79:#in%:in%=0 4IA$=$name%:X%!2=cl("",0):X%!2=("&"+cl("",0)):X%!6=("&"+cl("",0)) > H: RRsyntax:"Syntax: BBCtoGIF -mode -small -verbose": \2wr32(O%,A%):!zp%=A%: A%=03:#O%,zp%?A%:: f2wr16(O%,A%):!zp%=A%: A%=01:#O%,zp%?A%:: p: z!ݤfn_noext(A$):A$,s$)=0:=A$ 1 A%:A%=A$+1:A%=A%-1:":"+s$+d$,A$,A%,1)) "A$,A%,1)=s$:=A$,A%-1) =A$ : ! > BLib.Close 1.00 09Aug1998 Close_All:*EXEC "in%=in%:in%:A%=in%:in%=0:#A% 'out%=out%:out%:A%=out%:out%=0:#A%  : # > BLib.ProgEnv 1.05 09Jan2007 :ݤOS_GetEnv:A$,A%,X%,Y%:X%=1:os%=((&FFF4)&FF00)256 Los%=32:>&FFFF:X%256:ș"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$ os%=32:A$=$&100 gA$=0:>&FFFF:run$=$&8100:ș16A$,,A%:ș72,"",A%:A$=A$,1+A$+" "," ",1+A$," "))):A$=0:A$=run$ 2A$=0:?(P-3):A$=$&600 A$=0:A$=$(-&300) *Y%=-10:A$=" "+A$:A$=A$,2):A$<>32 $6Y%:A$=34:A%=A$,"""",2)+1 Y%:A%=A$+" "," ") .-Y%:run$=A$,A%-1):run$<>"":A$=A$,A%+1) 8 :=A$ B&os(A$):A$=42:A$ A$<>"":A$ L VFexit(A%):"FX1,"+(A%255):quit$=quit$:A$=quit$:quit$="":os(A$) `os%=32:Ș A% jos%<6: *Quit t ~: # > BLib.CmdLine 1.10 27Jul2009 cݤcl(l$,n%):l$="":A$=s(A$):A$=34:A%=A$+" "" ",""" ",2):l$=A$,2,A%-2):A$=s(A$,A%+1)):=l$ "":A%=A$,l$):A%:A$=s(A$,A%-1)+A$,A$," ",A%)+1))+" ":= n%=0:l$<>"":= %A%=" ",l$=32)+A$,l$):A%=0:="" 'A$=A$,A%-1)+s(A$,A$," ",A%)+1)) Cl$=32:l$=A$,A%):A$=A$,A%-1):=l$,1-(l$=34),l$+2*(l$=34)) PA$,A%,1)<>34:l$=A$,A%,A$+" "," ",A%)-A%):A$=A$,A%-1)+A$,A%+l$+1):=l$ Jl$=A$,A%+1,A$+""" ",""" ",A%+1)-A%-1):A$=A$,A%-1)+A$,A%+l$+3):=l$ /ݤs(A$):A$,1)=" ":A$=A$,2):A$,1)<>" " +A$,1)=" ":A$=A$,A$-1):A$,1)<>" " =A$ :  > BLib.Win.TextIO Win_TextIO (/ș"GetStdHandle",-10 @hfile%(1):*INPUT 13 20ș"GetStdHandle",-11 @hfile%(2):*OUTPUT 14 <%ș"SetConsoleMode",@hfile%(1),0: F: P > BLib.Generic.FileIO ZJݤfile(A$,A%):os%<32:$name%=A$:?X%=name%:X%?1=name%256:=(&FFDD)&FF dA$,".")=0:A$=A$+"." nLA%=255 A%=5:X%!14=(A$):X%!14:X%!10=#X%!14:#X%!14:X%!14:X%!14=&33 x1A%=255:X%?6=0:"LOAD """+A$+""" "+~X%!2:=1 A%=5: X%!14:=1 A%=5:=0 FA%=0:"SAVE """+A$+""" "+~X%!10+" "+~X%!14:X%!10=X%!14-X%!10:=1 BA%=7:"SAVE """+A$+""" "+~+"+"+~X%!10:X%!10=X%!14-X%!10:=1 A%=8  : :=2 "mkdir "+A$:=2  =0