Home » Archimedes archive » Micro User » MU 1991-10.adf » PD-Stuff » Graphics/!Translatr/!RunImage

Graphics/!Translatr/!RunImage

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Micro User » MU 1991-10.adf » PD-Stuff
Filename: Graphics/!Translatr/!RunImage
Read OK:
File size: 15606 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >!RunImage
   20REMLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOG
   30REM Converts foreign graphics files to Archimedes
   40REM Version date : Thu,25 Apr 1991.23:16:49
   50REM LEN 1991 Zeridajh software
   60REM by John Kortink
   70REMLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOG
   80ON ERROR MODE0:PRINT'"Error"''"'";REPORT$;"' (code ";ERL;")"'':END
   90tversion%=644:REM Translator version number
  100DIM window &A00,iconsprites 2048,icondata 4096,icondend 0
  110DIM menuico% 256,poll 256,block 256,err 256,wimppal 256,pointer 512
  120DIM InPal%(256),ImgPal%(256),ShowPal%(256),UserModeSet%(4)
  130DIM arg% 1024,dum% 5*1024,transtab% 256,Buffer%(32,1)
  140DIM buffer% 32*8,freq% 1024,palrgb% 1024,hambas% 64
  150DIM intmap% 1024,pbmint% 256
  160Progneed%=150*1024:REM Estimated space needed for program+vars
  170LowHeap%=1024:REM Lowest size for heap (sprite, buffers, etc.)
  180Totalfree%=HIMEM-PAGE:REM Total free for program+vars+sprbuf
  190MidHimem%=PAGE+Progneed%:REM Pseudo HIMEM (top of prog, start of heap)
  200Heap%=MidHimem%:HeapSize%=Totalfree%-Progneed%:REM Set heap + size
  210IFHeapSize%<LowHeap% THEN ERROR 1,"No room to start up Translator"
  220HIMEM=MidHimem%:REM Lower himem to below sprite buffer
  230PROCinitialise:REM Initialise application
  240PROCmode_change(-1):REM Reselect current mode to tidy up
  250Lname$=FNOSvar("Translator$File"):IFLname$<>"" THEN SYS "OS_CLI","Unset Translator$File":Ltype%=FNimage_type(Lname$,TRUE):IFLtype%>0 THEN Action=ActLoad:REM Auto-boot, pending load
  260ON ERROR PROCerror(ERR,REPORT$+" (code "+STR$ERL+")"):PROCiclose
  270REM Poll and action
  280IFDataLoadRef% THEN pollmask%=48 ELSE pollmask%=49:REM No nulls if wasted
  290CASE FNpoll(pollmask%) OF
  300 WHEN 0 : PROCnull
  310 WHEN 1 : PROCredraw
  320 WHEN 2 : PROCopen
  330 WHEN 3 : PROCclose
  340  IFKill THEN Kill=FALSE:SlotDown=TRUE
  350 WHEN 6 : PROCmouseclick
  360 WHEN 7 : PROCdragdrop
  370 WHEN 8 : PROCkey
  380 WHEN 9 : PROCmenuselect
  390 WHEN 17,18 : PROCmessage
  400ENDCASE
  410IFAction THEN
  420 SlotDown=TRUE:END=&1000000:PROCnew_slot:HIMEM=MidHimem%:REM Claim max
  430 CASE Action OF
  440  WHEN ActLoad : REM Load new image
  450   Action=0:REM Reset action flag
  460   Ok=FNload(Ltype%,Lname$):REM Attempt to load image
  470   IFOk THEN Action=ActPostLoad
  480  WHEN ActRotate : REM Rotate image
  490   Action=0:REM Reset action flag
  500   free%=Heap%+HeapSize%-SprEnd%:REM Free above sprite
  510   IFfree%>8*1024 THEN
  520    PROChour_on:PROCvar("rotb",SprEnd%):PROCvar("rots",free%):SYS "Translator_Rotate",SprPtr%:PROChour_off:REM Rotate sprite
  530    Sprite%!12=Sprite%!8+!(Sprite%+Sprite%!8):SWAP SprH%,SprW%
  540    PROCnew_image_window:REM New image window
  550   ELSE PROCerror(-1,"No room for rotate buffer !")
  560   ENDIF
  570 ENDCASE
  580ENDIF
  590IFSlotDown THEN
  600 IFImg THEN END=(SprEnd%+1023)ANDNOT1023 ELSE END=MidHimem%
  610 PROCnew_slot:HIMEM=MidHimem%
  620 SlotDown=FALSE
  630ENDIF
  640IF(Action=ActPostLoad) THEN
  650 Action=0:REM Reset action flag
  660 PROCset_mode(ImgMode%):REM Select image mode
  670 ZoomX=1:ZoomY=1:REM Reset zoom factors
  680 IFAutoPal THEN PROCset_palette(1):REM Select image palette if enabled
  690 PROCnew_image_window:REM Open window on image
  700ENDIF
  710GOTO 270:REM Sorry, I have to. Current BASIC restrictions with END=.
  720 
  730DEFPROCnew_slot
  740REM Slot changed, reset info
  750HeapSize%=HIMEM-MidHimem%:REM New size of heap
  760ENDPROC
  770
  780DEFPROCmenuselect
  790SYS WDecodeM%,,menu1,poll,STRING$(100," ") TO ,,,select$:REM Selection
  800REM Decode main/sub/subsub selection string
  810menupath$=select$:REM Remember menu path
  820select2=FALSE:select3=FALSE:select4=FALSE:select5=FALSE:select2$="":select3$="":select4$="":select5$="":REM Defaults
  830p%=INSTR(select$,"."):IFp%>0 THEN select2=TRUE:select2$=MID$(select$,p%+1):select$=LEFT$(select$,p%-1):p%=INSTR(select2$,"."):IFp%>0 THEN select3=TRUE:select3$=MID$(select2$,p%+1):select2$=LEFT$(select2$,p%-1):p%=INSTR(select3$,".")
  840IFp%>0 THEN select4=TRUE:select4$=MID$(select3$,p%+1):select3$=LEFT$(select3$,p%-1):p%=INSTR(select4$,"."):IFp%>0 THEN select5=TRUE:select5$=MID$(select4$,p%+1):select4$=LEFT$(select4$,p%-1)
  850REM Filter clicks on roots of entries with submenu
  860CASE menupath$ OF
  870 WHEN "Image info","Pop up","Process","Manipulate","Examine","Misc" : IFselect2 ELSE select$=""
  880 WHEN "Pop up.Mode set","Process.Colour","Process.Sprite output","Process.Scaling","Process.Misc","Examine.Zoom","Manipulate.Mirror","Misc.Save","Misc.Status" : IFselect3 ELSE select$=""
  890 WHEN "Process.Sprite output.Output mode","Process.Sprite output.Output palette","Process.Sprite output.Error spreading","Process.Scaling.x","Process.Scaling.y","Examine.Zoom.In","Examine.Zoom.Out" : IFselect4 ELSE select$=""
  900ENDCASE
  910CASE select$ OF
  920 WHEN "" : REM Do nothing
  930 WHEN "Quit" : REM Quit program
  940  PROCdie:REM Tidy up and exit
  950 WHEN "Pop up" : REM Pop up options
  960  CASE select2$ OF
  970   WHEN "Auto mode" : AutoMode=NOTAutoMode
  980   WHEN "Auto palette" : AutoPal=NOTAutoPal
  990   WHEN "Mode set" : REM Select new mode set
 1000    CASE LEFT$(select3$,4) OF
 1010     WHEN "Root" : REM No selection (root)
 1020     WHEN "None" : ModeSet=0:REM No mode set
 1030     WHEN "Norm" : ModeSet=1:REM Normal monitor mode set
 1040     WHEN "Mult" : ModeSet=2:REM Multisync monitor mode set
 1050     OTHERWISE : REM User mode set, check and if ok, change
 1060      s$=select3$:p%=INSTR(s$,","):IFp%>0 THEN m1%=VALs$:s$=MID$(s$,p%+1):p%=INSTR(s$,","):IFp%>0 THEN m2%=VALs$:s$=MID$(s$,p%+1):p%=INSTR(s$,","):IFp%>0 THEN m3%=VALs$:s$=MID$(s$,p%+1):m4%=VALs$
 1070      IFp%>0 THEN UserModeSet%(1)=m1%:UserModeSet%(2)=m2%:UserModeSet%(3)=m3%:UserModeSet%(4)=m4%:ModeSet=3 ELSE PROCerror(-1,"Bad user mode set. Please use '<2colmode>,<4colmode>,<16colmode>,<256colmode>', e.g. '1,2,3,4'.")
 1080    ENDCASE
 1090   WHEN "Auto zoom" : AutoZoom=NOTAutoZoom
 1100   WHEN "View mode" : ViewMode=NOTViewMode
 1110  ENDCASE
 1120 WHEN "Process" : REM Processing options
 1130  CASE select2$ OF
 1140   WHEN "Colour" : REM Colour processing options
 1150    CASE select3$ OF
 1160     WHEN "Black and white" : BlackWhite=NOTBlackWhite
 1170     WHEN "Correct gamma" : REM Gamma correction factor
 1180      IF(select4$+select5$)="" THEN GammaF=1 ELSE GammaF=VAL(select4$+"."+select5$):REM New factor
 1190      Gamma=(GammaF<>1)AND(GammaF>0):REM Gamma in effect ?
 1200     WHEN "Correct black" : REM Black correction factor
 1210      IFselect4$="" THEN BlackF=0 ELSE BlackF=VAL(select4$):REM New factor
 1220      Black=(BlackF<>0):REM Black correction in effect ?
 1230     WHEN "Expand range" : Range=NOTRange
 1240     WHEN "Invert RGB" : InvertRGB=NOTInvertRGB
 1250    ENDCASE
 1260   WHEN "Sprite output" : REM Sprite output options
 1270    CASE select3$ OF
 1280     WHEN "Output mode" : REM Change output mode selection
 1290      IFselect4$="Auto" THEN OutMode=1 ELSE OutMode=2
 1300     WHEN "Output palette" : REM Change output palette selection
 1310      IFselect4$="Current" THEN OutPal=1 ELSE IFselect4$="Default" THEN OutPal=2 ELSE OutPal=3
 1320     WHEN "Error spreading" : REM Set error spreading
 1330      CASE select4$ OF
 1340       WHEN "Simple" : ErrSpread=1
 1350       WHEN "Floyd Steinberg" : ErrSpread=2
 1360       WHEN "Off" : ErrSpread=0
 1370      ENDCASE
 1380     WHEN "Zig zag" : ZigZag=NOTZigZag
 1390    ENDCASE
 1400   WHEN "Clear output" : REM Clear output file off
 1410    IFClearFile THEN SYS "OS_File",6,ClearSave$:ClearFile=FALSE
 1420   WHEN "Scaling" : REM Change scale factors
 1430    xm%=-1:ym%=-1:xd%=-1:yd%=-1
 1440    CASE select3$ OF
 1450     WHEN "1:1" : xm%=1:ym%=1:xd%=1:yd%=1
 1460     WHEN "1:2" : xm%=1:ym%=1:xd%=2:yd%=2
 1470     WHEN "2:1" : xm%=2:ym%=2:xd%=1:yd%=1
 1480     WHEN "x","y" : s$=select4$:p%=INSTR(s$,":"):mul%=VALs$:IFp%>0 THEN s$=MID$(s$,p%+1):div%=VALs$ ELSE div%=0:REM Determine scaling ratio (0=inpix)
 1490      IFselect3$="x" THEN xm%=mul%:xd%=div% ELSE ym%=mul%:yd%=div%
 1500    ENDCASE
 1510    IFxm%=-1 ELSE XMul%=xm%:XDiv%=xd%:DivIsInX=(XDiv%<=0)
 1520    IFym%=-1 ELSE YMul%=ym%:YDiv%=yd%:DivIsInY=(YDiv%<=0)
 1530   WHEN "Misc" : REM Miscelaneous options
 1540    CASE select3$ OF
 1550     WHEN "Screen blanking" : Blanking=NOTBlanking
 1560     WHEN "GIF scan" : GIFScan=NOTGIFScan
 1570     WHEN "Image number" : REM Image number
 1580      IFselect4$="" THEN ImageNr%=1 ELSE ImageNr%=VAL(select4$)
 1590     WHEN "Next image","Previous image" : REM Image number up/down
 1600      CASE LEFT$(select3$,1) OF
 1610       WHEN "N" : ImageNr%+=1
 1620       WHEN "P" : IFImageNr%>1 THEN ImageNr%-=1
 1630      ENDCASE
 1640      IFInFile$<>"" THEN Lname$=InFile$:Ltype%=InType%:Action=ActLoad ELSE PROCerror(-1,"Load an image file first !"):REM Pending load
 1650     WHEN "Percentage" : Percent=NOTPercent
 1660    ENDCASE
 1670  ENDCASE
 1680 WHEN "Manipulate" : REM Manipulation options
 1690  CASE select2$ OF
 1700   WHEN "Rotate" : REM Rotate sprite
 1710    Action=ActRotate:REM Pending load
 1720   WHEN "Mirror" : REM Mirror image
 1730    PROCvar("imgx",SprW%):PROCvar("imgy",SprH%):REM Module info
 1740    PROChour_on
 1750    IFselect3$="x" THEN SYS "Translator_MirrorX",SprPtr% ELSE SYS "Translator_MirrorY",SprPtr%:REM Mirror sprite
 1760    PROChour_off
 1770    PROCnew_window(win_img%):REM Freshen image window
 1780  ENDCASE
 1790 WHEN "Examine" : REM Examination options
 1800  CASE select2$ OF
 1810   WHEN "Zoom" : REM Zoom in, out, normal size
 1820    OldZoomX=ZoomX:OldZoomY=ZoomY:REM Remember old zoom factors
 1830    CASE select3$ OF
 1840     WHEN "In": IFselect4$="Both" THEN ZoomX=ZoomX*2:ZoomY=ZoomY*2 ELSE IFselect4$="x" THEN ZoomX=ZoomX*2 ELSE IFselect4$="y" THEN ZoomY=ZoomY*2
 1850     WHEN "Out": IFselect4$="Both" THEN ZoomX=ZoomX/2:ZoomY=ZoomY/2 ELSE IFselect4$="x" THEN ZoomX=ZoomX/2 ELSE IFselect4$="y" THEN ZoomY=ZoomY/2
 1860     WHEN "1:1": ZoomX=1:ZoomY=1
 1870    ENDCASE
 1880    REM Set image window extent and title according to current zoom factor
 1890    !block=0:block!4=0:block!8=FNsprW*ZoomX:block!12=FNsprH*ZoomY
 1900    SYS WSetE%,win_img%,block:REM Set window extent to zoomed size
 1910    $IMWtt%=FNimage_title:REM New title
 1920    !block=win_img%:SYS WGetWS%,,block:REM Read window's position
 1930    dx%=(block!12-block!4)/2:dy%=(block!16-block!8)/2:REM Half window size
 1940    vx%=block!20+dx%:vy%=block!24-dy%:REM Vector from centre to origin
 1950    REM Calculate new scroll offsets by scaling vector and re-transpose
 1960    block!20=vx%*ZoomX/OldZoomX-dx%:block!24=vy%*ZoomY/OldZoomY+dy%
 1970    PROCclose_window(win_img%):PROCopen_window(win_img%,block)
 1980   WHEN "Magnifier" : REM Pop up zoom window
 1990    ZoomWin=TRUE:ZoomWX%=0:ZoomWY%=0:ZoomW=ZoomD:REM Init zoom window
 2000    PROCopen_window(win_zoom%,-1):REM Open zoom window
 2010  ENDCASE
 2020 WHEN "Misc" : REM Miscellaneous options
 2030  CASE select2$ OF
 2040   WHEN "Reload last" : REM Reload last image file
 2050    IFInFile$<>"" THEN Lname$=InFile$:Ltype%=InType%:Action=ActLoad ELSE PROCerror(-1,"Load an image file first !"):REM Pending load
 2060   WHEN "Save" : REM Save whole or part of image
 2070    CASE select3$ OF
 2080     WHEN "Include palette" : SavePal=NOTSavePal
 2090     WHEN "Same leafname" : SameLeaf=NOTSameLeaf
 2100     OTHERWISE : SaveKind$=select3$:REM Remember type of save
 2110       $SAVfn%=SaveSpr$:$SAVsn%="file_ff9":REM Set file window for sprite
 2120       PROCopen_window(win_file%,-1):REM Open file window
 2130       SYS WSetCa%,win_file%,1,,,-1,LEN(SaveSpr$)
 2140    ENDCASE
 2150   WHEN "Image palette" : REM Select image palette
 2160    PROCset_palette(1)
 2170   WHEN "Status" : REM Manipulate defaults
 2180    CASE select3$ OF
 2190     WHEN "Save" : Status=OPENOUT("<Translator$Dir>.Status"):PRINT#Status,AutoMode,AutoPal,ModeSet,ErrSpread,SavePal,UserModeSet%(1),UserModeSet%(2),UserModeSet%(3),UserModeSet%(4),AutoZoom,BlackWhite,GIFScan,Blanking,InvertRGB
 2200      PRINT#Status,ZigZag,ViewMode,OutMode,OutPal,Percent,GammaF,Gamma,BlackF,Black,Range,SameLeaf:CLOSE#Status
 2210     WHEN "Load" : IFFNload_status ELSE PROCerror(-1,"I cannot find my status file ! Have you saved one ?")
 2220     WHEN "Kill" : SYS "OS_File",6,"<Translator$Dir>.Status"
 2230    ENDCASE
 2240  ENDCASE
 2250ENDCASE
 2260SYS WGetPI%,,block:REM Get pointer info
 2270IF((block!8)AND1)>0 THEN PROCmain_menu:REM Adjust -> re-open
 2280ENDPROC
 2290
 2300DEFPROCclose
 2310Kill=FALSE:REM Flag returned : image killed
 2320win%=poll!0:REM Window handle
 2330PROCclose_window(win%):REM Close window
 2340CASE win% OF
 2350 WHEN win_img% : PROCinvalidate_image:PROCset_palette(0)
 2360  PROCclose_window(win_file%)
 2370  PROCclose_window(win_zoom%):ZoomWin=FALSE
 2380  IFViewMode THEN PROCmode_change(PreMode)
 2390  Kill=TRUE
 2400 WHEN win_zoom% : ZoomWin=FALSE
 2410ENDCASE
 2420ENDPROC
 2430
 2440DEFPROCopen
 2450PROCopen_window(0,poll)
 2460ENDPROC
 2470
 2480DEFPROCredraw
 2490PROCredraw_window(poll!0,FALSE)
 2500ENDPROC
 2510
 2520DEFPROCnull
 2530IFDataLoadRef% THEN
 2540 DataLoadRef%=FALSE:SYS "OS_File",6,Save$:REM Delete file saved/created
 2550 PROCerror(-1,"Bad data transfer, receiver dead"):REM No DataLoadAck
 2560ENDIF
 2570ENDPROC
 2580
 2590DEFPROCkey
 2600win%=poll!0:ico%=poll!4:char%=poll!24:REM Window, icon, key pressed
 2610IF(win%=win_file%) AND (ico%=1) THEN
 2620 CASE char% OF
 2630  WHEN 13 : REM Return pressed
 2640   PROCerror(-1,"Please drag the sprite file icon to a directory viewer")
 2650  WHEN 27 : REM Escape pressed
 2660   PROCclose_window(win_file%)
 2670 ENDCASE
 2680ENDIF
 2690ENDPROC
 2700
 2710DEFPROCmessage
 2720REM Ignore messages originating from myself
 2730IF(poll!4)=TaskHandle% THEN msgnr%=-1 ELSE msgnr%=poll!16
 2740CASE msgnr% OF
 2750 WHEN -1 : REM Don't react
 2760 WHEN 0 : PROCdie:REM Request to terminate task
 2770 WHEN 1 : REM DataSave, transfer via scrap file
 2780  scrap$=FNOSvar("Wimp$Scrap"):REM Read scrap filename
 2790  IFscrap$<>"" THEN poll!12=poll!8:poll!16=2:poll!36=-1:$(poll+44)=scrap$+CHR$0:poll!0=44+(LENscrap$+1+3)ANDNOT3:SYS WSendMsg%,18,poll,poll!4 ELSE PROCerror(-1,"Wimp$Scrap not defined"):REM Send DataSaveAck if scrap file defined
 2800 WHEN 2 : REM DataSaveAck, save file
 2810  IFpoll!12=DataSaveRef% THEN
 2820   Save$=FNstring(poll+44):REM Full pathname of file to be saved/created
 2830   REM Save sprite file or 'open' Clear file
 2840   IF$SAVsn%="file_ff9" THEN SprSave$=Save$:PROCsave_sprite(SprSave$) ELSE ClearSave$=Save$:SYS "OS_File",11,ClearSave$,&690,0,0:ClearFile=TRUE
 2850   poll!12=poll!8:poll!16=3:REM Amend data block for DataLoad
 2860   SYS WSendMsg%,18,poll,poll!4:REM Send DataLoad
 2870   DataLoadRef%=poll!8:REM Await a DataLoadAck, remember myref
 2880  ENDIF
 2890 WHEN 3,5 : REM DataLoad/Open : attempt to load
 2900  type%=poll!40:name$=FNstring(poll+44):REM Filetype and filename
 2910  CASE type% OF
 2920   WHEN &FF9,&DE2,&DFA,&D58,&004 : IFmsgnr%=3 THEN type%=FNimage_type(name$,TRUE) ELSE type%=0
 2930   OTHERWISE type%=FNimage_type(name$,(msgnr%=3))
 2940  ENDCASE
 2950  IFtype%>0 THEN
 2960   poll!12=poll!8:poll!16=4:SYS WSendMsg%,17,poll,poll!4:REM DataLoadAck
 2970   Lname$=name$:Ltype%=type%:Action=ActLoad:REM Pending load
 2980  ELSE IFmsgnr%=3 THEN PROCerror(-1,"I don't recognize this file. Please filetype it appropiately."):REM Drag unrecognized
 2990  ENDIF
 3000 WHEN 4 : REM DataLoadAck, check or ignore
 3010  IFDataLoadRef% THEN IFpoll!12=DataLoadRef% THEN DataLoadRef%=FALSE
 3020 WHEN &400C0 : REM Submenu warning
 3030  pointer%=poll!20:x%=poll!24:y%=poll!28:REM Get pointer/proposed x/y
 3040  SYS WDecodeM%,,menu1,poll+32,STRING$(100," ") TO ,,,path$:REM Get path
 3050  CASE path$ OF
 3060   WHEN "Process.Clear output" : $SAVfn%=SaveClear$:$SAVsn%="file_690":SYS WCreateSM%,,pointer%,x%,y%:SYS WSetCa%,win_file%,1,,,-1,LEN(SaveClear$):REM Open file window for Clear file
 3070  ENDCASE
 3080 WHEN &400C1 : REM Mode has changed (and it may not have been me)
 3090  PROCmode_change(-1):REM Tidy up
 3100ENDCASE
 3110ENDPROC
 3120 
 3130DEFPROCmouseclick
 3140but%=poll!8:win%=poll!12:ico%=poll!16:REM Buttons/window/icon
 3150CASE win% OF
 3160 WHEN -2 : REM Click on iconbar
 3170  IFico%=Iiconbar% THEN
 3180   REM Iconbar icon clicked
 3190   CASE but% AND 7 OF
 3200    WHEN 2 : PROCmouse(x%,_%,_%):m%=menuico%
 3210     $m%="Translator":m%?12=tf%:m%?13=tb%:m%?14=wf%:m%?15=wb%:m%!16=10*16:m%!20=40:m%!24=0:m%!28=0:m%!32=win_info%:m%!36=(wb%<<28)+(wf%<<24)+1:$(m%+40)="Info":m%!52=0:m%!56=win_filet%:m%!60=m%!36
 3220     $(m%+64)="Filetypes":m%!76=&80:m%!80=-1:m%!84=m%!36:$(m%+88)="Quit":menu1=m%:SYS WCreateM%,,menu1,x%-64,96+3*40
 3230    WHEN 1,4 : From%=1:PROCmain_menu
 3240   ENDCASE
 3250  ENDIF
 3260 WHEN win_img% : REM Click on image window
 3270  CASE but% AND 7 OF
 3280   WHEN 2 : From%=2:PROCmain_menu
 3290   OTHERWISE : REM Wandering over image, recalculate zoom window if open
 3300    IFZoomWin THEN
 3310     xs%=Xstep%:ys%=Ystep%:x%=poll!0:y%=poll!4:!block=win_img%:SYS WGetWS%,,block:ox%=block!4-block!20:oy%=block!16-block!24:rx%=x%-ox%:ry%=y%-oy%:ex%=rx%/ZoomX/xs%:ey%=ry%/ZoomY/ys%:REM Pixel coordinates in image
 3320     IFZoomX<1 THEN ex%=ex%+1/ZoomX-1:REM Display correction
 3330     IFZoomY<1 THEN ey%=ey%+1/ZoomY-1:REM Display correction
 3340     IF(ZoomWX%<>ex%)OR(ZoomWY%<>ey%) THEN ZoomWX%=ex%:ZoomWY%=ey%:PROCredraw_window(win_zoom%,TRUE):REM If changed, redraw zoom window
 3350    ENDIF
 3360  ENDCASE
 3370 WHEN win_zoom% : REM Click on zoom window
 3380  CASE but% AND 7 OF
 3390   WHEN 1 : IFZoomW>ZoomD THEN ZoomW=ZoomW-1
 3400   WHEN 2 : ZoomW=ZoomD
 3410   WHEN 4 : IF(ZoomW/ZoomD)<100 THEN ZoomW=ZoomW+1
 3420  ENDCASE
 3430  PROCredraw_window(win_zoom%,TRUE):REM Redraw zoom window
 3440 WHEN win_file% : REM Click on file window
 3450  IFico%=0 THEN
 3460   CASE but% AND &7F OF
 3470    WHEN 16,64 : REM Drag,calculate drag box and create it
 3480     !block=win%:SYS WGetWS%,,block:x%=block!4:y%=block!8:block!4=ico%:SYS WGetIS%,,block:!block=win%:block!4=5:block!8+=x%:block!12+=y%:block!16=block!8+68:block!20=block!12+68:block!24=0:block!28=0:block!32=ScrW%:block!36=ScrH%
 3490     SYS WDragB%,,block:REM Create drag box
 3500   ENDCASE
 3510  ENDIF
 3520 WHEN win_rgbbits% : REM RGB slider manipulation
 3530  !block=win%:SYS WGetWS%,,block:x%=block!4:y%=block!8:block!4=ico%:SYS WGetIS%,,block:x%+=block!8+2:y%+=block!12+8:REM Position in slider icon
 3540  mx%=!poll:dx%=mx%-x%-8:val%=dx% DIV 16:IFval%>8 THEN val%=8:REM Position
 3550  IFico%=3 THEN col%=11:sn$="R":bit%=16 ELSE IFico%=4 THEN col%=10:sn$="G":bit%=8 ELSE col%=8:sn$="B":bit%=0:REM Slider colours, names, bitoffsets
 3560  REM Plot slider in slider sprite
 3570  SYS OSSpop%,60+256,iconsprites,"slider"+sn$,0 TO r0,r1,r2,r3:GCOL0,0:RECTANGLE FILL 2,8,8*16,16:GCOL0,col%:IFval%>0 THEN RECTANGLE FILL 2,8,val%*16,16
 3580  SYS OSSpop%,r0,r1,r2,r3:REM Restore VDU context
 3590  RGBbits%=(RGBbits% AND NOT (255<<bit%)) OR (val%<<bit%):!block=win%:block!4=ico%:block!8=0:block!12=0:SYS WSetIS%,,block:REM Update code and icon
 3600ENDCASE
 3610ENDPROC
 3620 
 3630DEFPROCdragdrop
 3640SYS WCreateM%,,-1:REM Close menu
 3650SYS WGetPI%,,block:REM Get pointer position
 3660dropwin%=block!12:dropico%=block!16:REM Window/icon where box dropped
 3670save$=FNstring(SAVfn%):REM Get leafname
 3680IF$SAVsn%="file_ff9" THEN SaveSpr$=save$:ft%=&FF9 ELSE SaveClear$=save$:ft%=&690:REM Remember leafname, set filetype
 3690block!20=block!12:block!24=block!16:block!28=block!0:block!32=block!4:block!12=0:block!16=1:block!36=0:block!40=ft%:$(block+44)=save$+CHR$0:!block=(44+LENsave$+4)ANDNOT3
 3700SYS WSendMsg%,17,block,dropwin%,dropico%:REM Send DataSave
 3710DataSaveRef%=block!8:REM Remember myref for DataSave
 3720PROCclose_window(win_file%):REM Close file window
 3730ENDPROC
 3740
 3750DEFFNimage_type(name$,check)
 3760REM Examines file and returns filetype <>0 if image file
 3770REM If check=TRUE, contents are checked as well as filetype
 3780LOCAL obj%,load%,type%,Head,id$,i%
 3790SYS "OS_File",5,name$ TO obj%,,load%:REM Read file info
 3800IFobj%<>1 THEN =0:REM Not a file
 3810IF(load%>>>20)=&FFF THEN type%=(load%>>>8)AND&FFF ELSE type%=0
 3820CASE type% OF
 3830 WHEN &690,&691,&692,&693,&694,&695,&697,&698,&699,&69A,&69B,&69C,&69D,&69E,&69F,&FC9,&FF0,&FF9,&DE2,&DFA,&D58,&004 : REM Recognized by filetype
 3840 OTHERWISE IFcheck ELSE =0
 3850  Head=OPENIN(name$):REM Open file to examine contents
 3860  type%=0:REM Not recognized anything (yet)
 3870  id$="":FOR i%=1 TO 12:id$+=CHR$(BGET#Head):NEXT
 3880  IFLEFT$(id$,6)="GIF87a" THEN type%=&695 ELSE IF(LEFT$(id$,4)="FORM") AND (RIGHT$(id$,4)="ILBM") THEN type%=&693 ELSE IFLEFT$(id$,4)=CHR$&59+CHR$&A6+CHR$&6A+CHR$&95 THEN type%=&FC9
 3890  IFtype%<>0 ELSE IF(LEFT$(id$,2)="II") OR (LEFT$(id$,2)="MM") THEN type%=&FF0 ELSE IFLEFT$(id$,5)="Irlam" THEN type%=&69B ELSE IFLEFT$(id$,2)="BM" THEN type%=&69C ELSE IF(INSTR("P1P2P3P4P5P6",LEFT$(id$,2))MOD2)>0 THEN type%=&69E
 3900  IFtype%<>0 ELSE IFLEFT$(id$,4)="ZVDA" THEN type%=&69F
 3910  IFtype%<>0 ELSE PTR#Head=&41:id$="":FOR i%=1 TO 4:id$+=CHR$(BGET#Head):NEXT:IFid$="PNTG" THEN type%=&694
 3920  IFtype%<>0 ELSE PTR#Head=&10:id$="":FOR i%=1 TO 9:id$+=CHR$(BGET#Head):NEXT:IFid$="MILLIPEDE" THEN type%=&69A
 3930  CLOSE#Head:REM Close image file
 3940ENDCASE
 3950=type%
 3960 
 3970DEFFNload(type%,name$)
 3980REM Loads image file
 3990REM Returns TRUE if succesful load, else FALSE
 4000InFile$=name$:InType%=type%:REM Set file info
 4010pos%=LENname$:REPEAT pos%-=1:period=(MID$(name$,pos%,1)="."):UNTIL (pos%=1) OR period:IFperiod THEN Leaf$=RIGHT$(name$,LENname$-pos%) ELSE Leaf$=name$
 4020SYS "OS_File",5,name$ TO ,,,,Flen%:REM File's length
 4030F1%=OPENIN(name$):d%=FNib:PROCiptr(F1%,0):REM Open file, ensure disc
 4040PROCvar("fha1",F1%):PROCvar("ifp1",0):REM REM Module info
 4050PROChour_on
 4060IFPercent THEN SYS "Hourglass_Percentage",0:REM Init percentage if on
 4070IFwin_img%>0 THEN PROCclose_window(win_img%):REM Old image discarded
 4080IFImg THEN PROCinvalidate_image ELSE PreMode=MODE
 4090PROCdeallocate:REM Free all memory
 4100CASE type% OF
 4110 WHEN &FF9 : p%=INSTR("."+FNupstring(name$),".HIP."):IFp%>0 THEN loppath$=name$:MID$(loppath$,p%,3)="LOP":F2%=OPENIN(loppath$):IFF2%=0 THEN PROCerror(-1,"I cannot find the ArVis LOP file !"):ENDPROC
 4120  IFp%=0 THEN Ok=FNpic_ARC ELSE PROCvar("fha2",F2%):PROCvar("ifp2",0):Ok=FNpic_ARVIS:REM What's this then ?
 4130 WHEN &DE2 : Ok=FNpic_PROART
 4140 WHEN &DFA : Ok=FNpic_WATFORD
 4150 WHEN &D58 : Ok=FNpic_RENDER
 4160 WHEN &004 : Ok=FNpic_AIM
 4170 WHEN &690 : Ok=FNpic_CLEAR
 4180 WHEN &691 : Ok=FNpic_DEGAS
 4190 WHEN &692 : Ok=FNpic_IMG
 4200 WHEN &693 : Ok=FNpic_IFF
 4210 WHEN &694 : Ok=FNpic_MAC
 4220 WHEN &695 : Ok=FNpic_GIF
 4230 WHEN &697 : Ok=FNpic_PCX
 4240 WHEN &698 : Ok=FNpic_QRT
 4250 WHEN &699 : Ok=FNpic_MTV
 4260 WHEN &69A : Ok=FNpic_CADSOFT
 4270 WHEN &69B : Ok=FNpic_IRLAM
 4280 WHEN &69C : Ok=FNpic_BMP
 4290 WHEN &69D : Ok=FNpic_TARGA
 4300 WHEN &69E : Ok=FNpic_PBMPLUS
 4310 WHEN &69F : Ok=FNpic_ZVDA
 4320 WHEN &FC9 : Ok=FNpic_SUN
 4330 WHEN &FF0 : Ok=FNpic_TIFF
 4340ENDCASE
 4350Img=Ok:REM Image ok if all is well
 4360IFImg THEN
 4370 ImgMode%=Mode%
 4380 IFSameLeaf THEN SaveSpr$=Leaf$
 4390ENDIF
 4400PROChour_off
 4410PROCiclose:REM Close input file(s)
 4420=Img
 4430
 4440DEFPROCsave_sprite(out$)
 4450REM Saves image as spritefile
 4460CASE SaveKind$ OF
 4470 WHEN "Full" : REM Full resolution sprite, no edit
 4480 WHEN "Whole" : PROCedit_part(FALSE,FALSE)
 4490 WHEN "Whole (scaled)" : PROCedit_part(TRUE,FALSE)
 4500 WHEN "Part" : PROCedit_part(FALSE,TRUE)
 4510 WHEN "Part (scaled)" : PROCedit_part(TRUE,TRUE)
 4520ENDCASE
 4530PROChour_on
 4540IFSaveKind$="Full" THEN
 4550 REM Full sprite, save image with palette (optionally)
 4560 Out=OPENOUT(out$):REM Open sprite file
 4570 spr%=Sprite%+Sprite%!8:REM Start of sprite
 4580 cols%=2^SprColbits%:REM Colours in sprite
 4590 IFSavePal THEN
 4600  REM Save with palette included
 4610  IFcols%=256 THEN ents%=64 ELSE ents%=cols%:REM Palette entries
 4620  extra%=ents%*8:REM Extra room for palette
 4630  SYS "OS_GBPB",1,Out,Sprite%+4,8,0:REM Output part of control block
 4640  !arg%=extra%+Sprite%!12:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4650  !arg%=extra%+!spr%:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4660  SYS "OS_GBPB",2,Out,spr%+4,28:REM Output part of sprite header
 4670  !arg%=extra%+spr%!32:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4680  !arg%=extra%+spr%!36:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4690  SYS "OS_GBPB",2,Out,spr%+40,4:REM Output sprite's mode
 4700  FOR c%=1 TO ents%:arg%!(c%*8-8)=FNreadpalval(ImgPal%(c%)):arg%!(c%*8-4)=arg%!(c%*8-8):NEXT:SYS "OS_GBPB",2,Out,arg%,ents%*8:REM Output palette
 4710  SYS "OS_GBPB",2,Out,spr%+spr%!32,(spr%!16+1)*(spr%!20+1)*4:REM Data
 4720 ELSE REM No palette, output the whole lot
 4730  SYS "OS_GBPB",1,Out,Sprite%+4,Sprite%!12-4,0:REM Output all
 4740 ENDIF
 4750 CLOSE#Out:SYS "OS_CLI","SetType "+out$+" Sprite":REM Close & type
 4760ELSE REM Edited part in window on screen, save it
 4770 PROCinvalidate_screen:REM Screen invalid
 4780 IFSavePal THEN pal%=1 ELSE pal%=0
 4790 SYS OSSpop%,2,,out$,pal%:REM Save screen in window
 4800 VDU24,0;0;ScrW%;ScrH%;:REM Reset screen window
 4810ENDIF
 4820PROChour_off
 4830ENDPROC
 4840
 4850DEFFNpic_DEGAS
 4860REM Makes Atari Degas image (PI1/2/3,PC1/2/3)
 4870compr%=FNib:res%=FNib:REM Flags, resolution (1/2/3)
 4880compressed=((compr%AND%10000000)>0):REM Compressed flag
 4890total%=32000:REM Total data bytes
 4900CASE res% OF
 4910 WHEN 0 : width%=320:height%=200:colbits%=4
 4920 WHEN 1 : width%=640:height%=200:colbits%=2
 4930 WHEN 2 : width%=640:height%=400:colbits%=1
 4940ENDCASE
 4950colours%=2^colbits%:REM Number of colours
 4960PROCset(width%,height%,colours%,Mode%)
 4970IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 4980IFFNnew_image(0) ELSE =FALSE
 4990PROCiget(F1%,dum%,32):REM Read palette from file
 5000InPal%(0)=colbits%:FOR c%=0 TO colours%-1:v%=dum%!(c%*2):r%=(v%AND7)*32:g%=((v%>>12)AND7)*32:b%=((v%>>8)AND7)*32:InPal%(colours%-c%)=(r%<<16)+(g%<<8)+b%:NEXT
 5010IFcompressed THEN compr$="Run length":type$="PC"+STR$(res%+1) ELSE compr$="":type$="PI"+STR$(res%+1)
 5020PROCimage_info("Atari Degas "+type$,width%,height%,0,colbits%,Mode%,compr$,"",Flen%-34,total%)
 5030PROCvar("comp",compressed):PROCvar("rest",res%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",&22):IFFNunpack("DEGAS") ELSE =FALSE
 5040=TRUE
 5050 
 5060DEFFNpic_IMG
 5070REM Makes Atari IMG image
 5080version%=FNidb:headlen%=FNidb:nplanes%=FNidb:REM Version, headlength, planes
 5090patlen%=FNidb:pw%=FNidb:ph%=FNidb:REM Pattern length, pixel width and height
 5100width%=FNidb:height%=FNidb:REM Width and height in pixels
 5110colours%=2^nplanes%:REM Number of colours
 5120PROCset(width%,height%,colours%,Mode%)
 5130IFcolours%<>2 OR patlen%<>2 THEN PROCerror(-1,"I cannot display Atari IMG images with more than 2 colours or patternlength<>2 !"):ENDPROC
 5140IFFNallocate_std(width%,(width%*nplanes%+7)DIV8,width%,0) ELSE =FALSE
 5150IFFNnew_image(0) ELSE =FALSE
 5160PROCgreypal(InPal%(),nplanes%,1):REM Set palette
 5170PROCimage_info("Atari IMG",width%,height%,0,nplanes%,Mode%,"Several ways","",Flen%-headlen%*2,(width%*height%*nplanes%)DIV8)
 5180PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",headlen%*2):IFFNunpack("IMG") ELSE =FALSE
 5190=TRUE
 5200 
 5210DEFFNpic_MAC
 5220REM Makes MacIntosh MacPaint image
 5230width%=576:height%=720:colbits%=1:REM Resolution
 5240PROCset(width%,height%,2^colbits%,Mode%)
 5250IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 5260IFFNnew_image(0) ELSE =FALSE
 5270PROCgreypal(InPal%(),colbits%,1):REM Set palette
 5280PROCimage_info("MacIntosh MacPaint",width%,height%,0,colbits%,Mode%,"Run length","",Flen%-640,(576*720)DIV8)
 5290PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",640):IFFNunpack("MAC") ELSE =FALSE
 5300=TRUE
 5310 
 5320DEFFNpic_IFF
 5330REM Makes Amiga IFF image
 5340bmhd=FALSE:cmap=FALSE:body=FALSE:REM Init flags
 5350ham=FALSE:lace=FALSE:hires=FALSE:halfbright=FALSE:REM Init flags
 5360REM Check if this is a standard IFF picture file
 5370form$=FNistring(F1%,4):PROCiskip(F1%,4):form$+=FNistring(F1%,4):IFform$<>"FORMILBM" THEN PROCerror(-1,"This screen file is not an IFF screen file !"):=FALSE
 5380REPEAT REM Follow BMHD,CMAP and BODY headers
 5390head$=FNistring(F1%,4):hlen%=FNiwb:startptr%=FNiptr(F1%)
 5400CASE head$ OF
 5410 WHEN "BMHD" : bmhd=TRUE:REM Bitmap header
 5420       REM Read picture/screen width, height, colours, etc.
 5430       width%=FNidb:height%=FNidb:PROCiskip(F1%,4):planes%=FNib:PROCiskip(F1%,1)
 5440       compressed=(FNib=1):PROCiskip(F1%,5):s_width%=FNidb:s_height%=FNidb
 5450 WHEN "CAMG" : flags%=FNiwb:REM Get flag bits, set flags from it
 5460       ham=((flags%AND&800)>0):lace=((flags%AND&4)>0)
 5470       hires=((flags%AND&8000)>0):halfbright=((flags%AND&80)>0)
 5480 WHEN "CMAP" : cmap=TRUE:REM Colour map (palette)
 5490       paldefs%=hlen%DIV3:REM Number of palette entries
 5500       PROCread24pal(F1%,InPal%(),paldefs%,0,1,2,3)
 5510 WHEN "BODY" : body=TRUE:REM Screen data
 5520       REM Check if all parts are there
 5530       IFNOTbmhd THEN PROCerror(-1,"IFF error : I did not find a 'BMHD' block. Cannot proceed !"):UNTIL TRUE:=FALSE ELSE IFNOTcmap THEN PROCerror(-1,"IFF error : I did not find a 'CMAP' block. Cannot proceed !"):UNTIL TRUE:=FALSE
 5540       REM Determine suitable Archimedes screen mode
 5550       IFham THEN
 5560        PROCset(width%,height%,256,Mode%):colbits%=12:info$="HAM (Hold And Modify)":InPal%(0)=colbits%:FOR c%=0 TO 15:hambas%!(c%<<2)=InPal%(c%+1):NEXT:PROCvar("map1",hambas%)
 5570        Mode%=FNmode(320,s_height%,256)
 5580        IFFNallocate_std(width%,width%*4,0,width%) ELSE =FALSE
 5590       ELSE colours%=2^planes%:PROCset(width%,height%,colours%,Mode%):colbits%=planes%:InPal%(0)=planes%:info$=""
 5600        IFhalfbright THEN info$="Half-bright":half%=colours%DIV2:FOR c%=1 TO half%:InPal%(c%+half%)=(InPal%(c%)AND&E0E0E0)>>1:NEXT
 5610        IFFNallocate_std(width%,width%,0,0) ELSE =FALSE
 5620       ENDIF
 5630       IFFNnew_image(0) ELSE =FALSE
 5640       IFcompressed THEN compr$="Run length" ELSE compr$=""
 5650       IFcolbits%>8 THEN ci%=2 ELSE ci%=0
 5660       PROCimage_info("Amiga IFF",width%,height%,ci%,colbits%,Mode%,compr$,info$,Flen%-FNiptr(F1%),(width%*height%*planes%)DIV8)
 5670       IFham THEN PROCvar("scty",1) ELSE PROCvar("scty",0)
 5680       PROCvar("ifp1",FNiptr(F1%)):PROCvar("plan",planes%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("comp",compressed):IFFNunpack("IFF") ELSE =FALSE
 5690ENDCASE
 5700IFhead$<>"BODY" THEN PROCiskip(F1%,hlen%-(FNiptr(F1%)-startptr%)):REM To next
 5710UNTIL body
 5720=TRUE
 5730 
 5740DEFFNpic_GIF
 5750REM Makes GIF (Graphics Interchange Format) image
 5760LOCAL g_InPal%(),Pic_ptr%(),Pic_len%()
 5770DIM g_InPal%(256),Pic_ptr%(256),Pic_len%(256)
 5780signature$=FNistring(F1%,6):REM Read GIF signature
 5790IFLEFT$(signature$,3)<>"GIF" THEN PROCerror(-1,"This screen file is not a GIF screen file !"):=FALSE
 5800REM Read data in Screen Descriptor
 5810r_width%=FNidl:r_height%=FNidl:REM Raster size
 5820flags%=FNib:backgr%=FNib:PROCiskip(F1%,1):REM Flags and back colour
 5830global=((flags%AND&80)>0):REM Global colour map following ?
 5840g_pixbits%=(flags%AND7)+1:REM Global bits per pixel
 5850colbits%=((flags%>>4)AND7)+1:REM Bits of colour resolution
 5860IFglobal THEN
 5870 REM Read Global Colour Map
 5880 PROCread24pal(F1%,g_InPal%(),2^g_pixbits%,0,1,2,3)
 5890 g_InPal%(0)=g_pixbits%:REM Palette entries
 5900ELSE InPal%(0)=-1:REM No palette found
 5910ENDIF
 5920REM Scan data for pictures, make a list
 5930picture%=0:REPEAT
 5940PROCskip_GIF_extension:REM Skip extension blocks preceding Image
 5950REM Search for next Image Descriptor
 5960REPEAT _%=FNib:image=(_%=ASC","):end=(_%=ASC";"):UNTIL image OR end OR FNieof(F1%)
 5970IFNOTimage THEN IFNOTend THEN PROCerror(-1,"Warning ! GIF file is not properly terminated !"):end=TRUE:PROChour_off:PROChour_on:REM Read beyond file
 5980IFimage THEN
 5990 REM Register picture's position
 6000 picture%+=1:Pic_ptr%(picture%)=FNiptr(F1%)-1
 6010 PROCiskip(F1%,8):_%=FNib:IF(_%AND&80)>0 THEN PROCiskip(F1%,3*2^((_%AND7)+1)):REM If there's a local colour map, skip it
 6020 IFGIFScan THEN
 6030  REM Determine picture data length, skip data
 6040  PROCiskip(F1%,1):REPEAT c%=FNib:PROCiskip(F1%,c%):UNTIL c%=0
 6050  Pic_len%(picture%)=FNiptr(F1%)-Pic_ptr%(picture%)
 6060 ELSE Pic_len%(picture%)=FNilen(F1%)-Pic_ptr%(picture%):end=TRUE
 6070 ENDIF
 6080ENDIF
 6090UNTIL end
 6100pictures%=picture%:REM Number of pictures found
 6110IFpictures%>0 ELSE PROCerror(-1,"I cannot find any images in this GIF file !"):=FALSE
 6120IFGIFScan THEN
 6130 IF(ImageNr%>0) AND (ImageNr%<=pictures%) THEN picture%=ImageNr% ELSE PROCerror(-1,"This GIF file contains "+STR$(pictures%)+" images. Select '1'-'"+STR$(pictures%)+"' in the 'Image number' submenu !"):=FALSE
 6140ELSE picture%=1
 6150ENDIF
 6160PROCiptr(F1%,Pic_ptr%(picture%)+1):len%=Pic_len%(picture%):REM Pic pos & len
 6170REM Read Image Descriptor data
 6180i_left%=FNidl:i_top%=FNidl:REM Position in frame
 6190i_width%=FNidl:i_height%=FNidl:flags%=FNib:REM Size and flags
 6200local=(flags%AND&80)>0:REM Local colour map following ?
 6210ibit=(flags%AND&40)>0:REM Image stored in interlaced order ?
 6220l_pixbits%=(flags%AND7)+1:REM Local bits per pixel
 6230IFlocal THEN
 6240 pixbits%=l_pixbits%:REM Read and use Local Colour Map palette
 6250 PROCread24pal(F1%,InPal%(),2^l_pixbits%,0,1,2,3)
 6260 InPal%(0)=l_pixbits%:REM Palette entries
 6270ELSE pixbits%=g_pixbits%:InPal%()=g_InPal%():REM Use Global data
 6280ENDIF
 6290IFInPal%(0)=-1 THEN PROCerror(-1,"I cannot find a palette in this GIF file !"):=FALSE
 6300colours%=2^pixbits%:REM Number of colours
 6310width%=i_width%:height%=i_height%:REM True width and height
 6320PROCset(width%,height%,colours%,Mode%)
 6330IFFNallocate(B_lzwtable%,32*1024) ELSE PROCerror(-1,"I have no room for the LZW decompression table !"):=FALSE
 6340IFFNallocate_std(width%,0,width%,0) ELSE =FALSE
 6350REM Room needed for decompression data and de-interlacing
 6360IFpixbits%<=2 THEN rbits%=pixbits% ELSE IFpixbits%<=4 THEN rbits%=4 ELSE rbits%=8:REM Round up bpp to sprite bpp
 6370room%=(((width%*rbits%+31)>>5)<<2)*(height%+1):REM Room needed
 6380IFFNnew_image(room%) ELSE =FALSE
 6390IFGIFScan THEN np$=STR$pictures% ELSE np$="?"
 6400PROCimage_info(signature$,width%,height%,0,pixbits%,Mode%,"LZW",np$+" pics (this is "+FNtimes(picture%)+")",len%,(height%*width%*pixbits%)DIV8)
 6410IFibit THEN PROCvar("lace",1) ELSE PROCvar("lace",0)
 6420PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("GIF") ELSE =FALSE
 6430=TRUE
 6440 
 6450DEFPROCskip_GIF_extension
 6460REM Skips a GIF Extension Block if present at current pointer
 6470LOCAL _%
 6480IF(FNib)=ASC"!" THEN
 6490 PROCiskip(F1%,1):REM Skip function code
 6500 REPEAT _%=FNib:PROCiskip(F1%,_%):UNTIL _%=0:REM Skip data byte blocks
 6510ELSE PROCiskip(F1%,-1)
 6520ENDIF
 6530ENDPROC
 6540 
 6550DEFFNpic_ARC
 6560REM Loads Archimedes sprite image
 6570pictures%=FNiwl:ofirst%=FNiwl:REM Number of sprites, offset to first
 6580IF(ImageNr%>0) AND (ImageNr%<=pictures%) THEN picture%=ImageNr% ELSE PROCerror(-1,"This sprite file contains "+STR$(pictures%)+" images. Select '1'-'"+STR$(pictures%)+"' in the 'Image number' submenu !"):=FALSE
 6590PROCiskip(F1%,ofirst%-8-4):REM Start of first sprite
 6600skip%=picture%-1:WHILE skip%>0:PROCiskip(F1%,FNiwl-4):skip%-=1:ENDWHILE
 6610start%=FNiptr(F1%):PROCiskip(F1%,16):REM Remember start, skip offset and name
 6620words%=FNiwl+1:height%=FNiwl+1:REM Width in words, height in lines
 6630bfirst%=FNiwl:blast%=FNiwl:REM First/last bits used
 6640oimage%=FNiwl:PROCiskip(F1%,4):sprMode%=FNiwl:REM Offset to image, mode
 6650colbits%=2^FNmode_var(sprMode%,9):colours%=2^colbits%:REM Colours
 6660IFcolbits%=8 THEN ents%=64 ELSE ents%=colours%
 6670IFoimage%<=44 THEN
 6680 PROCstdpal(InPal%(),colbits%):REM No palette, set default
 6690ELSE PROCread24pal(F1%,InPal%(),ents%,1,2,3,8):InPal%(0)=colbits%:REM Read palette
 6700 IFcolbits%=8 THEN FOR c%=1 TO ents%:p%=InPal%(c%):InPal%(c%+64)=p% OR 1<<15:InPal%(c%+128)=p% OR 1<<7:InPal%(c%+192)=p% OR 1<<15 OR 1<<7:NEXT
 6710ENDIF
 6720width%=(words%*32-bfirst%-(31-blast%)) DIV colbits%
 6730IFFNavailable_mode(sprMode%) THEN Mode%=sprMode% ELSE Mode%=FNmode(width%,height%,colours%):REM Determine other mode if sprite's mode won't do
 6740PROCset(width%,height%,colours%,_%)
 6750IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 6760IFFNnew_image(0) ELSE =FALSE
 6770PROCimage_info("Archimedes sprite",width%,height%,0,colbits%,Mode%,"",STR$pictures%+" sprites (this is "+FNtimes(picture%)+")",1,1)
 6780PROCvar("ifp1",start%+oimage%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("wrds",words%):PROCvar("bfir",bfirst%):IFFNunpack("ARC") ELSE =FALSE
 6790=TRUE
 6800 
 6810DEFFNpic_PROART
 6820REM Makes ProArtisan image
 6830width%=640:height%=256:REM Set resolution
 6840PROCset(width%,height%,256,Mode%)
 6850IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 6860room%=(width%*height%+3)ANDNOT3:REM Room needed for unpack (coltable)
 6870IFFNnew_image(room%) ELSE =FALSE
 6880collen%=FNiwl:comflag%=FNiwl:REM Length of colour table/compression
 6890coltable%=SprTop%-collen%:REM Space for colour table
 6900PROCiget(F1%,coltable%,collen%):REM Read colour table
 6910PROCstdpal(InPal%(),8):REM Standard 256 colour palette
 6920PROCimage_info("ProArtisan",width%,height%,0,8,Mode%,"Run length","",Flen%-8,width%*height%)
 6930PROCvar("ifp1",FNiptr(F1%)):PROCvar("prot",coltable%):PROCvar("comp",comflag%):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("PROART") ELSE =FALSE
 6940=TRUE
 6950 
 6960DEFFNpic_WATFORD
 6970REM Makes Watford digitiser image
 6980width%=512:height%=256:REM Set resolution
 6990PROCset(width%,height%,256,Mode%)
 7000IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 7010IFFNnew_image(0) ELSE =FALSE
 7020PROCgreypal(InPal%(),6,1):REM Palette is 64 greys
 7030PROCimage_info("Watford digitiser",width%,height%,1,6,Mode%,"Run length","",Flen%,(width%*height%*6)DIV8)
 7040PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",0):IFFNunpack("WATFORD") ELSE =FALSE
 7050=TRUE
 7060 
 7070DEFFNpic_RENDER
 7080REM Makes Render Bender image
 7090Mode%=FNib:REM Read image's mode
 7100IFFNmode_var(Mode%,9)<>3 THEN PROCerror(-1,"This Render Bender image was not defined in a 256 colour mode !") ELSE width%=FNmode_var(Mode%,11)+1:height%=FNmode_var(Mode%,12)+1
 7110PROCset(width%,height%,256,Mode%)
 7120IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 7130IFFNnew_image(0) ELSE =FALSE
 7140PROCstdpal(InPal%(),8):REM Standard 256 colour palette
 7150PROCimage_info("Render Bender",width%,height%,0,8,Mode%,"Run length","",Flen%-1,width%*height%)
 7160PROCvar("ifp1",1):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("RENDER") ELSE =FALSE
 7170=TRUE
 7180 
 7190DEFFNpic_AIM
 7200REM Makes AIM image
 7210width%=256:height%=256:REM Set resolution
 7220PROCset(width%,height%,256,Mode%)
 7230IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 7240IFFNnew_image(0) ELSE =FALSE
 7250PROCgreypal(InPal%(),8,1):REM Palette is 256 greys
 7260PROCimage_info("AIM",width%,height%,1,8,Mode%,"","",Flen%,256*256)
 7270PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",0):IFFNunpack("AIM") ELSE =FALSE
 7280=TRUE
 7290 
 7300DEFFNpic_SUN
 7310REM Makes SUN image
 7320magic%=FNiwb:IFmagic%<>&59A66A95 THEN PROCerror(-1,"This is no standard SUN raster file !"):=FALSE
 7330width%=FNiwb:height%=FNiwb:colbits%=FNiwb:REM Read resolution
 7340length%=FNiwb:type%=FNiwb:maptype%=FNiwb:maplength%=FNiwb:REM Extra info
 7350IFtype%>2 THEN PROCerror(-1,"I can only read uncompressed or RLE Sun images !"):=FALSE
 7360colours%=2^colbits%:REM Number of colours
 7370CASE colbits% OF
 7380 WHEN 1,8 : IF(maptype%<>1)OR(maplength%=0) THEN
 7390             IFcolbits%>1 THEN PROCerror(-1,"This SUN image file contains no palette ! I will use a greyscale.")
 7400             PROCgreypal(InPal%(),colbits%,1)
 7410            ELSE InPal%()=0:FOR i%=1 TO 3:FOR c%=1 TO maplength%DIV3:InPal%(c%)=(InPal%(c%)<<8)+FNib:NEXT:NEXT:InPal%(0)=colbits%
 7420            ENDIF
 7430 OTHERWISE : PROCerror(-1,"I can only read 1- and 8-bit per pixel Sun images !"):=FALSE
 7440ENDCASE
 7450PROCset(width%,height%,colours%,Mode%)
 7460IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 7470IFFNnew_image(0) ELSE =FALSE
 7480IFtype%=2 THEN compr$="Run length" ELSE compr$=""
 7490PROCimage_info("SUN",width%,height%,0,colbits%,Mode%,compr$,"",Flen%-32-maplength%,(width%*height%*colbits%)DIV8)
 7500PROCvar("ifp1",32+maplength%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("comp",type%):IFFNunpack("SUN") ELSE =FALSE
 7510=TRUE
 7520 
 7530DEFFNpic_PCX
 7540REM Makes PCX image
 7550man%=FNib:REM Manufacture code (should be 10)
 7560IFman%<>10 THEN PROCerror(-1,"This is no standard PCX file !"):=FALSE
 7570version%=FNib:REM Version code (0/2/3/5)
 7580encoding%=FNib:REM Encoding code (0-none, 1-PCX runlength encoding)
 7590bits%=FNib:REM Bits per 'pixel' (1-EGA, 8-MCGA)
 7600wxmin%=FNidl:wymin%=FNidl:wxmax%=FNidl:wymax%=FNidl:REM Window coordinates
 7610width%=wxmax%-wxmin%+1:height%=wymax%-wymin%+1:REM Resolution in pixels
 7620PROCiskip(F1%,4):REM Skip Hres/Vres
 7630InPal%()=0:REM Clear palette
 7640PROCread24pal(F1%,InPal%(),16,0,1,2,3):REM Read colourmap in header
 7650PROCiskip(F1%,1):REM Skip reserved byte
 7660planes%=FNib:REM Colourplanes
 7670linelen%=FNidl:REM Bytes per line
 7680REM roundlen%=((width%*bits%+7)DIV8):IFroundlen%<>linelen% THEN width%=linelen%*8/bits%:REM Correct width if window and linelength data conflict
 7690pixbits%=bits%*planes%:REM Bits per pixel
 7700IF(pixbits%=1) OR (pixbits%=2) OR (pixbits%=4) OR (pixbits%=8) ELSE PROCerror(-1,"I cannot handle "+STR$(2^pixbits%)+" colour EGA PCX files !"):=FALSE
 7710colours%=2^pixbits%:REM Number of colours
 7720PROCiptr(F1%,FNilen(F1%)-769):code%=FNib:REM Try end-769 for palette
 7730IFcode%<>12 THEN
 7740 IFFNallocate(B_infile%,1024) ELSE PROCerror(-1,"I have no room for the input file buffer !"):=FALSE
 7750 PROCvar("ifp1",128):PROCvar("totl",linelen%*planes%*height%):PROCvar("comp",encoding%):PROCunpack_phase("PCX",2):REM Get (packed) length
 7760 len%=FNvar("pakl"):PROCiptr(F1%,128+len%):REM Go to end of image data
 7770 code%=FNib:REM Get code (12 indicates palette info follows)
 7780ENDIF
 7790IFcode%=12 THEN PROCread24pal(F1%,InPal%(),colours%,0,1,2,3)
 7800grey=FALSE:REM Flag to indicate forced greyscale
 7810IFbits%=8 THEN IFcode%<>12 THEN PROCerror(-1,"I cannot find the palette in this 256-colour PCX image ! I will use a greyscale."):grey=TRUE
 7820IFNOTgrey THEN IFSUM(InPal%())=0 THEN PROCerror(-1,"I cannot find a decent palette in this PCX image ! I will use a greyscale."):grey=TRUE
 7830IFgrey THEN PROCgreypal(InPal%(),pixbits%,1) ELSE InPal%(0)=pixbits%
 7840IF(pixbits%=1)OR(pixbits%=8) THEN size%=0 ELSE size%=(width%*pixbits%+7)DIV8:REM Intermediate pixel data buffer for 'planed' data
 7850PROCset(width%,height%,colours%,Mode%)
 7860IFFNallocate_std(width%,(width%*pixbits%+7)DIV8,width%,size%) ELSE =FALSE
 7870IFFNnew_image(0) ELSE =FALSE
 7880IFencoding%=1 THEN compr$="Run length" ELSE compr$=""
 7890PROCimage_info("PCX",width%,height%,0,pixbits%,Mode%,compr$,"",Flen%-128,(width%*height%*pixbits%)DIV8)
 7900PROCvar("ifp1",128):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("comp",encoding%):PROCvar("line",linelen%):IFFNunpack("PCX") ELSE =FALSE
 7910=TRUE
 7920 
 7930DEFFNpic_TIFF
 7940REM Makes TIFF image
 7950headbytes%=2:REM Count bytes in header
 7960id$=FNistring(F1%,2):REM TIFF identification
 7970CASE id$ OF
 7980 WHEN "II" : Ttype%=0:REM Set low-to-high type of data
 7990 WHEN "MM" : Ttype%=1:REM Set high-to-low type of data
 8000 OTHERWISE : PROCerror(-1,"This is not a TIFF file !"):=FALSE
 8010ENDCASE
 8020version%=FNtiff(3):REM TIFF version number
 8030IFversion%<>42 THEN PROCerror(-1,"I cannot handle this TIFF version's images !"):=FALSE
 8040offFIFD%=FNtiff(4):REM Offset to first IFD
 8050PROCiptr(F1%,offFIFD%):REM Go to first IFD
 8060entries%=FNtiff(3):REM Number of IFD entries
 8070InPal%()=0:pal=FALSE:REM No palette yet
 8080rowsperstrip%=-1:bits%=1:compression%=1:planar%=1:fillorder%=1:greyunit%=3:pixsamples%=1:softw$="":REM Defaults
 8090FOR e%=1 TO entries%
 8100tag%=FNtiff(3):type%=FNtiff(3):length%=FNtiff(4):REM Tag and info
 8110IFlength%>1 THEN value%=FNtiff(4) ELSE IFtype%=1 THEN value%=FNtiff(1):PROCiskip(F1%,3) ELSE IFtype%=3 THEN value%=FNtiff(3):PROCiskip(F1%,2) ELSE value%=FNtiff(4):REM Read value
 8120cptr%=FNiptr(F1%):REM Remember current position in file
 8130CASE tag% OF
 8140 WHEN 256 : width%=value%
 8150 WHEN 257 : height%=value%
 8160 WHEN 258 : IFlength%=1 THEN
 8170             bits%=value%
 8180            ELSE PROCiptr(F1%,value%):p%=FNtiff(type%):s%=2:ok=TRUE:WHILE s%<=length%:ok=ok AND (FNtiff(type%)=p%):s%+=1:ENDWHILE
 8190             IFNOTok THEN PROCerror(-1,"I cannot handle unequal bits per sample plane TIFF !"):=FALSE
 8200             PROCiptr(F1%,cptr%):bits%=p%*length%
 8210            ENDIF
 8220 WHEN 259 : compression%=value%
 8230 WHEN 262 : photometric%=value%
 8240 WHEN 266 : fillorder%=value%
 8250 WHEN 273 : IFFNallocate(B_stroff%,4+length%*4) ELSE PROCerror(-1,"I have no room for the TIFF strip offsets !"):=FALSE
 8260            stroff%=Buffer%(B_stroff%,0):!stroff%=length%:IFlength%=1 THEN stroff%!4=value% ELSE PROCiptr(F1%,value%):p%=stroff%+4:FOR s%=1 TO length%:!p%=FNtiff(type%):p%+=4:NEXT:PROCiptr(F1%,cptr%)
 8270 WHEN 277 : pixsamples%=value%
 8280 WHEN 278 : rowsperstrip%=value%
 8290 WHEN 284 : planar%=value%
 8300 WHEN 290 : greyunit%=value%
 8310 WHEN 291 : PROCiptr(F1%,value%):div%=2*10^greyunit%:FOR g%=1 TO length%:c%=FNtiff(type%)*255:i%=c%/div%:InPal%(g%)=i%+(i%<<8)+(i%<<16):NEXT:pal=TRUE:PROCiptr(F1%,cptr%)
 8320 WHEN 305 : PROCiptr(F1%,value%):softw$=FNtiff(type%):PROCiptr(F1%,cptr%)
 8330 WHEN 320 : PROCiptr(F1%,value%):InPal%()=0:FOR p%=1 TO 3:FOR c%=1 TO length%DIV3:v%=FNtiff(type%):InPal%(c%)=(InPal%(c%)<<8)+(v%>>8):NEXT:NEXT:pal=TRUE:PROCiptr(F1%,cptr%)
 8340ENDCASE
 8350NEXT
 8360IFrowsperstrip%=-1 THEN rowsperstrip%=height%
 8370CASE compression% OF
 8380 WHEN 1 : compr$=""
 8390 WHEN 32773 : compr$="Packbits"
 8400 WHEN 5 : compr$="LZW"
 8410 OTHERWISE : PROCerror(-1,"I cannot handle TIFF compression #"+STR$(compression%)+" !"):=FALSE
 8420ENDCASE
 8430IF((pixsamples%=1)AND((bits%=1)OR(bits%=2)OR(bits%=4)OR(bits%=8))) OR ((bits%=24)AND(pixsamples%=3)) ELSE PROCerror(-1,"I can only handle TIFF images with 1,2,4,8 or 24 bits per pixel !"):=FALSE
 8440IFplanar%<>1 THEN PROCerror(-1,"I cannot handle TIFF images with multiple planes !"):=FALSE
 8450InPal%(0)=bits%:IFpal ELSE IFbits%>8 ELSE IFphotometric%=0 THEN PROCgreypal(InPal%(),bits%,-1) ELSE PROCgreypal(InPal%(),bits%,1)
 8460IFbits%=24 THEN colours%=256:size1%=width%*4:size2%=0 ELSE colours%=2^bits%:size1%=(width%*bits%+7)DIV8:size2%=width%
 8470PROCset(width%,height%,colours%,Mode%)
 8480CASE compression% OF
 8490 WHEN 1 : size3%=0:REM No temp buffer
 8500 WHEN 32773 : size3%=1024:REM Small temp buffer
 8510 WHEN 5 : size3%=((width%*bits%+7)DIV8)*rowsperstrip%:REM Temp for 1 strip
 8520          IFFNallocate(B_lzwtable%,32*1024) ELSE PROCerror(-1,"I have no room for the LZW decompression table !"):=FALSE
 8530ENDCASE
 8540IFFNallocate_std(width%,size1%,size2%,size3%) ELSE =FALSE
 8550IFFNnew_image(0) ELSE =FALSE
 8560IFbits%=24 THEN code%=2 ELSE IFphotometric%<=1 THEN code%=1 ELSE code%=0
 8570IFsoftw$<>"" THEN softw$=LEFT$("Made by "+softw$,25)
 8580PROCimage_info("TIFF",width%,height%,code%,bits%,Mode%,compr$,softw$,Flen%-headbytes%,(width%*height%*bits%)DIV8)
 8590PROCvar("ifp1",stroff%!4):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("rops",rowsperstrip%):PROCvar("bito",fillorder%):PROCvar("comp",compression%):IFFNunpack("TIFF") ELSE =FALSE
 8600=TRUE
 8610 
 8620DEFFNtiff(type%)
 8630REM Returns tiff data type
 8640LOCAL i$,b%
 8650CASE type% OF
 8660 WHEN 1 : headbytes%+=1:=FNib
 8670 WHEN 2 : i$="":b%=FNib:WHILE b%<>0:i$+=CHR$b%:b%=FNib:ENDWHILE:headbytes%+=LENi$+1:=i$
 8680 WHEN 3 : headbytes%+=2:IFTtype%=0 THEN =FNidl ELSE =FNidb
 8690 WHEN 4 : headbytes%+=4:IFTtype%=0 THEN =FNiwl ELSE =FNiwb
 8700 WHEN 5 : =0
 8710ENDCASE
 8720=0
 8730 
 8740DEFFNpic_QRT
 8750REM Makes QRT image
 8760width%=FNidl:height%=FNidl:REM Read resolution
 8770PROCset(width%,height%,256,Mode%)
 8780IFFNallocate_std(width%,width%*4,0,width%*3) ELSE =FALSE
 8790IFFNnew_image(0) ELSE =FALSE
 8800InPal%(0)=24:REM No palette, pure 24-bit RGB
 8810PROCimage_info("QRT RAW",width%,height%,2,24,Mode%,"","",1,1)
 8820PROCvar("ifp1",4):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("QRT") ELSE =FALSE
 8830=TRUE
 8840 
 8850DEFFNpic_ARVIS
 8860REM Makes ArVis image
 8870PROCiptr(F1%,4):PROCiptr(F1%,FNiwl-4):PROCiskip(F1%,16):width%=FNiwl*4+4:height%=FNiwl+1:REM Get width and height
 8880PROCiskip(F1%,8):PROCiskip(F1%,FNiwl-36):PROCiptr(F2%,4):PROCiptr(F2%,FNiwlf(F2%)-4):PROCiskip(F2%,32):PROCiskip(F2%,FNiwlf(F2%)-36):REM Go to sprite data
 8890colbits%=15:colours%=2^colbits%:REM Colours
 8900PROCset(width%,height%,256,Mode%)
 8910IFFNallocate_std(width%,width%*4,0,width%*2) ELSE =FALSE
 8920IFFNnew_image(0) ELSE =FALSE
 8930InPal%(0)=15:REM No palette, pure 15-bit RGB
 8940PROCimage_info("ArVis",width%,height%,2,15,Mode%,"","",1,1)
 8950PROCvar("ifp1",FNiptr(F1%)):PROCvar("ifp2",FNiptr(F2%)):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("ARVIS") ELSE =FALSE
 8960=TRUE
 8970 
 8980DEFFNpic_CLEAR
 8990REM Makes Clear image
 9000maker$=FNistring(F1%,-1):version%=FNiwl:REM Creator information
 9010width%=FNiwl:height%=FNiwl:bits%=FNiwl:REM Width, height, bpp
 9020IFbits%<=8 THEN colbits%=bits%:PROCread24pal(F1%,InPal%(),2^bits%,0,1,2,3) ELSE colbits%=8
 9030InPal%(0)=bits%:REM Bits per pixel
 9040IFbits%<=8 THEN size%=width% ELSE size%=width%*4
 9050PROCset(width%,height%,2^colbits%,Mode%)
 9060IFFNallocate_std(width%,size%,0,0) ELSE =FALSE
 9070IFFNnew_image(0) ELSE =FALSE
 9080PROCimage_info("Clear",width%,height%,code%,bits%,Mode%,"","by "+maker$+" "+STR$(version%DIV100)+"."+RIGHT$("0"+STR$(version%MOD100),2),1,1)
 9090PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("CLEAR") ELSE =FALSE
 9100=TRUE
 9110 
 9120DEFFNpic_MTV
 9130REM Makes MTV image
 9140size$=FNistring(F1%,-1):REM String containing resolution
 9150width%=VALsize$:height%=VAL(MID$(size$,INSTR(size$," "))):REM Resolution
 9160PROCset(width%,height%,256,Mode%)
 9170IFFNallocate_std(width%,width%*4,0,0) ELSE =FALSE
 9180IFFNnew_image(0) ELSE =FALSE
 9190InPal%(0)=24:REM No palette, pure 24-bit RGB
 9200PROCimage_info("MTV",width%,height%,2,24,Mode%,"","",1,1)
 9210PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("MTV") ELSE =FALSE
 9220=TRUE
 9230 
 9240DEFFNpic_CADSOFT
 9250REM Makes Cadsoft image
 9260PROCiptr(F1%,9):width%=(FNidl+2)/2:height%=(FNidl+2)/2:REM Resolution
 9270PROCiptr(F1%,26):compression%=FNib:REM Compression code
 9280PROCiptr(F1%,512):InPal%()=0:InPal%(0)=8:FOR rgb%=16 TO 0 STEP -8:FOR c%=1 TO 256:InPal%(c%)=InPal%(c%) OR (FNib<<rgb%):NEXT:NEXT:REM Palette
 9290PROCset(width%,height%,256,Mode%)
 9300IFFNallocate_std(width%,width%,0,0) ELSE =FALSE
 9310IFFNnew_image(0) ELSE =FALSE
 9320IFcompression%=2 THEN compr$="Run length" ELSE compr$=""
 9330PROCimage_info("CadSoft",width%,height%,0,8,Mode%,compr$,"",Flen%-&600,width%*height%)
 9340PROCvar("ifp1",&600):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("comp",compression%):IFFNunpack("CADSOFT") ELSE =FALSE
 9350=TRUE
 9360 
 9370DEFFNpic_IRLAM
 9380REM Makes Irlam image
 9390id$=FNistring(F1%,-1):p%=INSTR(id$,":"):REM String containing image info
 9400width%=VALMID$(id$,p%+1):height%=VALMID$(id$,p%+2+LENSTR$width%)
 9410PROCset(width%,height%,256,Mode%)
 9420IFFNallocate_std(width%,width%*4,0,width%*3) ELSE =FALSE
 9430IFFNnew_image(0) ELSE =FALSE
 9440InPal%(0)=24:REM No palette, pure 24-bit RGB
 9450PROCimage_info("Irlam",width%,height%,2,24,Mode%,"","",1,1)
 9460PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("IRLAM") ELSE =FALSE
 9470=TRUE
 9480
 9490DEFFNpic_BMP
 9500REM Makes BMP (Windows 3) image
 9510PROCiptr(F1%,18):width%=FNiwl:height%=FNiwl:REM Size
 9520PROCiptr(F1%,28):colbits%=FNib:REM Bits per pixel
 9530IF(colbits%=1)OR(colbits%=2)OR(colbits%=4)OR(colbits%=8) ELSE PROCerror(-1,"I can only handle 1,2,4 or 8 bit per pixel BMP images ! This is "+STR$colbits%+" bpp."):=FALSE
 9540rowbytes%=(colbits%*width%+7)DIV8:REM Bytes per pixel row
 9550PROCiptr(F1%,54):PROCread24pal(F1%,InPal%(),2^colbits%,2,1,0,4)
 9560InPal%(0)=colbits%
 9570PROCset(width%,height%,2^colbits%,Mode%)
 9580IFFNallocate_std(width%,rowbytes%,width%,0) ELSE =FALSE
 9590IFFNnew_image(0) ELSE =FALSE
 9600PROCimage_info("Windows 3 BMP",width%,height%,0,colbits%,Mode%,"","",1,1)
 9610PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("BMP") ELSE =FALSE
 9620=TRUE
 9630
 9640DEFFNpic_TARGA
 9650REM Makes Truevision TARGA image
 9660idlen%=FNib:colmaptype%=FNib:REM Length of ID string, colourmap type
 9670imagetype%=FNib:REM Image type
 9680index%=FNidl:length%=FNidl:REM Colourmap first index & #indices
 9690cmapsize%=FNib:REM Bits per colour
 9700xorg%=FNidl:xorg%=FNidl:REM X/Y origin
 9710width%=FNidl:height%=FNidl:REM Size of image
 9720pixbits%=FNib:flags%=FNib:REM Bits per pixel & flags
 9730PROCiskip(F1%,idlen%):REM Skip ID string
 9740fattr%=flags%AND&0F:flips%=(flags%AND&30)>>4:REM Attributes, flip-flags
 9750fleave%=(flags%AND&C0)>>6:REM Interleave code
 9760IFpixbits%>8 THEN IFcolmaptype%<>0 THEN PROCerror(-1,"I cannot handle >8 bit TARGA with colourmaps !"):=FALSE
 9770IFfleave%<>0 THEN PROCerror(-1,"I cannot handle interlaced TARGA !"):=FALSE
 9780InPal%()=0:REM Clear colourmap
 9790IFcolmaptype%<>0 THEN
 9800 FOR c%=index%+1 TO index%+length%
 9810 CASE cmapsize% OF
 9820  WHEN 8 : i%=FNib:InPal%(c%)=i% OR i%<<8 OR i%<<16
 9830  WHEN 15,16 : i%=FNidl:InPal%(c%)=((i%AND&7C00)<<9)+((i%AND&3E0)<<6)+((i%AND&1F)<<3)
 9840  WHEN 24 : InPal%(c%)=FNitl
 9850  WHEN 32 : InPal%(c%)=FNiwl AND &FFFFFF
 9860 ENDCASE
 9870 NEXT
 9880ELSE PROCgreypal(InPal%(),8,1)
 9890ENDIF
 9900InPal%(0)=pixbits%:REM Bits per pixel
 9910rle=(imagetype%>=9)AND(imagetype%<=11):REM Run length encoded ?
 9920IFpixbits%>8 THEN code%=2:size2%=width%*4 ELSE size2%=width%:IF(cmapsize%=8)OR(colmaptype%=0) THEN code%=1 ELSE code%=0
 9930PROCset(width%,height%,256,Mode%)
 9940IFFNallocate_std(width%,size2%,0,size2%) ELSE =FALSE
 9950IFFNnew_image(room%) ELSE =FALSE
 9960IFrle THEN compr$="Run length" ELSE compr$=""
 9970PROCimage_info("Truevision TARGA",width%,height%,code%,pixbits%,Mode%,compr$,"",Flen%-FNiptr(F1%),(width%*height%*pixbits%)DIV8)
 9980PROCvar("ordr",flips%):PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("comp",rle):IFFNunpack("TARGA") ELSE =FALSE
 9990=TRUE
10000
10010DEFFNpic_PBMPLUS
10020REM Makes PBMPLUS image
10030type$=FNistring(F1%,2):PROCpbm_white:REM PBMPLUS type
10040type%=VAL(MID$(type$,2)):REM Type number
10050width%=FNpbm_decval:height%=FNpbm_decval:REM Width and height
10060CASE type% OF
10070 WHEN 1,4 : code%=1:maxval%=-1:bpp%=1:REM Bilevel
10080  PROCgreypal(InPal%(),1,-1):REM Bilevel palette (0=white,1=black)
10090 WHEN 2,5 : maxval%=FNpbm_decval:REM Max grey
10100  IFmaxval%>255 THEN PROCerror(-1,"I cannot read >256-level grey PBMPLUS"):=FALSE
10110  code%=1:bpp%=FNcolstobpp(1+maxval%):REM Grey, calculate bpp
10120  InPal%(0)=bpp%:step=255/maxval%:v=0:FOR c%=0 TO maxval%:v%=INTv:InPal%(c%+1)=v%ORv%<<8ORv%<<16:v+=step:NEXT:REM Palette
10130 WHEN 3,6 : maxval%=FNpbm_decval:REM Max r/g/b
10140  IFmaxval%>255 THEN PROCerror(-1,"I cannot read >256-level RGB PBMPLUS"):=FALSE
10150  code%=2:bpc%=FNcolstobpp(1+maxval%):REM RGB
10160  IFbpc%<3 THEN bpp%=9 ELSE bpp%=3*bpc%
10170  InPal%(0)=bpp%:step=255/maxval%:v=0:FOR c%=0 TO maxval%:pbmint%?c%=INTv:v+=step:NEXT:REM Intmap
10180ENDCASE
10190IFtype%<=3 THEN PROCpbm_white ELSE c%=FNib:IF(c%=32)OR(c%=9)OR(c%=10)OR(c%=13) ELSE PROCiskip(F1%,-1)
10200IFbpp%>8 THEN rowbytes%=4*width%:colbits%=8 ELSE rowbytes%=width%:colbits%=bpp%
10210PROCset(width%,height%,2^colbits%,Mode%)
10220IFtype%=4 THEN size1%=width% ELSE size1%=0
10230IFFNallocate_std(width%,rowbytes%,size1%,0) ELSE =FALSE
10240IFFNnew_image(0) ELSE =FALSE
10250PROCimage_info("PBMPLUS "+type$,width%,height%,code%,bpp%,Mode%,"","",1,1)
10260PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("scty",type%):PROCvar("map1",pbmint%):IFFNunpack("PBMPLUS") ELSE =FALSE
10270=TRUE
10280
10290DEFPROCpbm_white
10300REM Skips PBMPLUS whitespace and comments
10310LOCAL c%,ok
10320ok=FALSE:REM Exit flag
10330REPEAT
10340REPEAT c%=FNib:UNTIL NOT((c%=32)OR(c%=9)OR(c%=13)OR(c%=10))
10350IFc%=ASC"#" THEN REPEAT c%=FNib:UNTIL (c%=13)OR(c%=10) ELSE ok=TRUE
10360UNTIL ok
10370PROCiskip(F1%,-1):REM Step back to last non-white
10380ENDPROC
10390
10400DEFFNpbm_decval
10410REM Skips whitespace, returns decimal value for PBMPLUS
10420LOCAL c%,v$
10430PROCpbm_white
10440c%=FNib:v$="":REM Init
10450WHILE (c%>=ASC"0")AND(c%<=ASC"9"):v$+=CHR$c%:c%=FNib:ENDWHILE
10460=VALv$
10470 
10480DEFFNpic_ZVDA
10490REM Makes Zeridajh Video Digitiser Animation image
10500id$=FNistring(F1%,4):IFid$<>"ZVDA" THEN PROCerror(-1,"This is not a Zeridajh Video Digitiser Animation file !"):ENDPROC
10510version%=FNiwl:mode%=FNiwl:REM Version of maker & mode of pics
10520width%=FNiwl:height%=FNiwl:REM Size of pics
10530pictures%=FNiwl:off1%=FNiwl:REM Number of pics, offset to first
10540IF(ImageNr%>0) AND (ImageNr%<=pictures%) THEN picture%=ImageNr% ELSE PROCerror(-1,"This ZVDA file contains "+STR$(pictures%)+" images. Select '1'-'"+STR$(pictures%)+"' in the 'Image number' submenu !"):=FALSE
10550compr%=FNiwl:REM Compression method
10560IFcompr%<>1 THEN PROCerror(-1,"I only know Bitmap compression, no #"+STR$(compr%)+" !")
10570PROCiptr(F1%,off1%):REM Skip to first picture
10580s%=1:WHILE s%<picture%:PROCiskip(F1%,FNiwl-4):s%+=1:ENDWHILE:REM Go to pic
10590complen%=FNiwl:REM Length of picture data
10600colbits%=2^FNmode_var(mode%,9):REM Bits per pixel
10610PROCgreypal(InPal%(),colbits%,1):REM Pics are grey
10620rowbytes%=((colbits%*width%+63)DIV64)*8:REM Bytes per pixel row
10630PROCset(width%,height%,2^colbits%,Mode%)
10640bitmaplen%=height%*rowbytes%DIV8:REM Length of bitmap
10650IFFNallocate_std(width%,rowbytes%,width%,bitmaplen%) ELSE =FALSE
10660IFFNnew_image(0) ELSE =FALSE
10670PROCimage_info("Zeridajh VDA",width%,height%,1,colbits%,Mode%,"Bitmap",STR$pictures%+" images (this is "+FNtimes(picture%)+")",complen%,rowbytes%*height%)
10680PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("maxc",complen%):IFFNunpack("ZVDA") ELSE =FALSE
10690=TRUE
10700
10710DEFPROCimage_info(type$,width%,height%,code%,colbits%,mode%,compr$,info$,datalen%,piclen%)
10720REM Sets information about the image
10730LOCAL factor%,w%,h%,c%,i%,id$
10740ImgW%=width%:ImgH%=height%:ImgBits%=colbits%:REM Register resolution
10750$IMIfn%=Leaf$:$IMIit%=type$
10760IFinfo$="" THEN $IMIin%="-" ELSE $IMIin%=info$
10770$IMIif%=STR$Flen%+" bytes"
10780IFcompr$="" THEN $IMIco%="None (0%)" ELSE factor%=100-INT(100*(datalen%/piclen%)):$IMIco%=compr$+" ("+STR$factor%+"%)"
10790$IMIwh%=STR$width%+" x "+STR$height%+" pixels"
10800IF(width%<>SprW%)OR(height%<>SprH%) THEN $IMIsc%="to "+STR$SprW%+" x "+STR$SprH% ELSE $IMIsc%="Full size"
10810$IMIbp%=STR$(colbits%)+"-bit "+MID$("colourgrey  RGB",1+code%*6,6)
10820PROCmode_info(mode%,w%,h%,c%):$IMIsm%=STR$mode%+" ("+STR$w%+"x"+STR$h%+"x"+STR$c%+")"
10830ENDPROC
10840 
10850DEFPROCnew_image_window
10860REM Creates new image window of appropiate size in current mode
10870LOCAL w%
10880PROCautozoom:REM Auto zoom if enabled
10890!block=win_img%:SYS WGetWI%,,block:REM Read window's definition
10900!dum%=win_img%:SYS WDeleteW%,,dum%:REM Delete old definition
10910w%=block+4:w%!40=0:w%!44=0:w%!48=FNsprW*ZoomX:w%!52=FNsprH*ZoomY:$IMWtt%=FNimage_title:REM Rewrite work area and title
10920SYS WCreateW%,,w% TO win_img%:REM Create new window
10930IFImg THEN PROCopen_window(win_img%,0)
10940ENDPROC
10950 
10960DEFFNimage_title
10970REM Returns image window title depending on zoom factors
10980LOCAL title$
10990title$="Image":REM Base
11000IFZoomX<1 THEN title$+=" x/"+STR$(1/ZoomX) ELSE IFZoomX>1 THEN title$+=" x*"+STR$(ZoomX)
11010IFZoomY<1 THEN title$+=" y/"+STR$(1/ZoomY) ELSE IFZoomY>1 THEN title$+=" y*"+STR$(ZoomY)
11020=title$+" "+InFile$
11030 
11040DEFPROCset(w%,h%,c%,RETURN m%)
11050REM Some presetting : determines mode, sets deferred scaling, sets outpix
11060REM Given are width, height, colours of image, returned is mode
11070m%=FNmode(w%,h%,c%):REM Return most suitable mode
11080OutMode%=m%:REM Set output mode
11090IFDivIsInX THEN XDiv%=w%:REM Select Xin as XDiv (deferred scaling)
11100IFDivIsInY THEN YDiv%=h%:REM Idem YDiv
11110IFXMul%<=XDiv% THEN OutX%=w%*XMul%/XDiv% ELSE OutX%=FNceil(w%*XMul%/XDiv%)
11120IFYMul%<=YDiv% THEN OutY%=h%*YMul%/YDiv% ELSE OutY%=FNceil(h%*YMul%/YDiv%)
11130ENDPROC
11140 
11150DEFFNnew_image(room%)
11160REM Allocates image sprite
11170REM There are at least room% bytes from sprite start to 'lomem'
11180REM Returns TRUE if all is well, else FALSE
11190LOCAL colbits%,bits%,bitsrot%,words%,wordsrot%,sizeup%,sizerot%
11200LOCAL datasize%,sptr%,sprdoff%,size%
11210xres%=OutX%:yres%=OutY%:mode%=OutMode%:REM Output image size and mode
11220IF(yres%<=0)OR(xres%<=0) THEN PROCerror(-1,"There are no pixels left with the current scaling !"):=FALSE
11230colbits%=2^FNmode_var(mode%,9):REM Bits per pixel
11240bits%=xres%*colbits%:bitsrot%=yres%*colbits%:REM Bits per row
11250words%=(bits%+31)>>5:wordsrot%=(bitsrot%+31)>>5:REM Words per row
11260sizeup%=words%*yres%<<2:sizerot%=wordsrot%*xres%<<2:REM Sprite sizes
11270datasize%=FNmax(sizeup%,sizerot%):REM Maximum sprite size (normal/rotated)
11280datasize%=FNmax(datasize%,room%):REM More room needed ?
11290IFFNallocate(B_area%,16) ELSE PROCerror(-1,"I have no room for the sprite area header !"):=FALSE
11300sprdoff%=44:REM Offset to sprite data/sprite header size
11310IFFNallocate(B_sprite%,sprdoff%) ELSE PROCerror(-1,"I have no room for the image sprite header !"):=FALSE
11320IFFNallocate(B_sprimg%,datasize%) ELSE PROCerror(-1,"I have no room to store this image ! I need at least "+STR$((Short%+1023)DIV1024)+"K more !"):=FALSE
11330IFdatasize%<room% THEN size%=room%-datasize% ELSE size%=0
11340IFFNallocate(B_imgtop%,size%) ELSE PROCerror(-1,"I have no room to process this image ! I need at least "+STR$((Short%+1023)DIV1024)+"K more !"):=FALSE
11350SprTop%=Buffer%(B_imgtop%,0)+Buffer%(B_imgtop%,1):REM End of sprite room
11360Sprite%=Buffer%(B_area%,0):!Sprite%=Buffer%(B_area%,1)+Buffer%(B_sprite%,1)+Buffer%(B_sprimg%,1):Sprite%!4=1:Sprite%!8=16:Sprite%!12=Sprite%!8+sprdoff%+sizeup%:REM Init sprite area
11370sptr%=Buffer%(B_sprite%,0):REM Start of sprite
11380SprEnd%=sptr%+sprdoff%+datasize%:REM End of sprite
11390!sptr%=sprdoff%+sizeup%:REM Offset to next sprite
11400$(sptr%+4)=ImageSpr$+STRING$(12,CHR$0):REM Sprite's name
11410sptr%!16=words%-1:REM Width in words-1
11420sptr%!20=yres%-1:REM Height in scanlines-1
11430sptr%!24=0:sptr%!28=31-(words%*32-bits%):REM Start/end bits
11440sptr%!32=sprdoff%:sptr%!36=sptr%!32:REM Offset to sprite data/mask
11450sptr%!40=mode%:REM Mode of sprite
11460SYS "Translator_WriteWords",sptr%+sprdoff%,0,sizeup%>>2:REM Wipe sprite
11470PROCvar("rowl",words%<<2):REM Module info
11480PROCvar("outb",colbits%):REM Module info
11490PROCvar("spri",sptr%+sptr%!32):REM Module info
11500SprColbits%=colbits%:SprPtr%=sptr%:SprMode%=mode%:REM Global sprite info
11510SprW%=xres%:SprH%=yres%:REM Remember sprite's resolution in pixels
11520=TRUE
11530 
11540DEFPROCdeallocate
11550REM Deallocates all buffers
11560Buffer%()=0:REM Wipe all buffer info
11570Store%=FNalign(Heap%):Free%=HeapSize%:REM Deallocate all storage space
11580ENDPROC
11590 
11600DEFFNallocate(nr%,bytes%)
11610REM Allocates bytes% bytes to buffer number nr% (word-aligned)
11620REM Returns TRUE if succesful, else FALSE
11630IF(bytes%<0)OR(bytes%>16*1024*1024) THEN PROCerror(-1,"Are you NUTS ?"):Short%=999999*1024:=FALSE:REM Enormous amount asked
11640bytes%=FNalign(bytes%):REM Word-align
11650IFFree%<bytes% THEN Short%=bytes%-Free%:=FALSE
11660Buffer%(nr%,0)=Store%:Buffer%(nr%,1)=bytes%:REM Allocate buffer
11670Store%+=bytes%:Free%-=bytes%:REM Deallocate storage used
11680=TRUE
11690 
11700DEFFNallocate_std(width%,pixbuf1%,pixval%,pixbuf2%)
11710REM Allocates standard buffers (pixel buffers, etc.)
11720LOCAL times%
11730IFFNallocate(B_pixbuf1%,pixbuf1%) ELSE PROCerror(-1,"I have no room for pixel buffer #1 !"):=FALSE
11740IFFNallocate(B_pixval%,pixval%) ELSE PROCerror(-1,"I have no room for a pixel value buffer !"):=FALSE
11750IFFNallocate(B_pixbuf2%,pixbuf2%) ELSE PROCerror(-1,"I have no room for pixel buffer #2 !"):=FALSE
11760IFXMul%<>XDiv% THEN
11770 IFFNallocate(B_pixscaled%,FNmax(pixbuf1%,pixval%)*FNceil(XMul%/XDiv%)) ELSE PROCerror(-1,"I have no room for the scaled pixel buffer !"):=FALSE
11780ENDIF
11790IFErrSpread=2 THEN
11800 IFBlackWhite THEN times%=1 ELSE times%=4
11810 IFFNallocate(B_fserr%,(width%+2)*times%*4*FNceil(XMul%/XDiv%)) ELSE PROCerror(-1,"I have no room for Floyd Steinberg error spreading !"):=FALSE
11820ENDIF
11830=TRUE
11840 
11850DEFPROChour_on
11860REM Turns hourglass on
11870SYS "Hourglass_On"
11880ENDPROC
11890 
11900DEFPROChour_off
11910REM Turns hourglass off
11920SYS "Hourglass_Off"
11930ENDPROC
11940 
11950DEFPROCedit_part(size,part)
11960REM Edits image size and part (if enabled with flags)
11970REM Returns with (scaled) image in graphics window ready for save
11980LOCAL _%,ox%,oy%,x%,y%,but%,x1%,x2%,y1%,y2%,xs%,ys%,sizex%,sizey%
11990LOCAL sprW%,sprH%,ptr$,r0,r1,r2,r3
12000!pointer=512:pointer!4=0:pointer!8=16:pointer!12=16:ptr$="ptr":SYS "OS_SpriteOp",15+256,pointer,ptr$,0,32,32,8:REM Initialise pointer sprite area
12010SYS OSSpop%,60+256,pointer,ptr$,0 TO r0,r1,r2,r3:MOVE 0,124:GCOL0,3:PLOT1,0,-32:PLOT0,0,32:PLOT1,40,0:PLOT0,-40,0:PLOT1,60,-30:PLOT0,-60,26:PLOT1,60,-30:SYS OSSpop%,r0,r1,r2,r3:REM Plot arrow in pointer sprite
12020VDU24,0;0;ScrW%;ScrH%;:REM Whole screen window for image sprite
12030sprW%=FNsprW:sprH%=FNsprH:REM True OS size of image sprite
12040xs%=2^FNmode_var(MODE,4):REM X coordinate step
12050ys%=2^FNmode_var(MODE,5):REM Y coordinate step
12060IFScrW%>sprW% THEN sizex%=sprW% ELSE sizex%=ScrW%:REM Initial width
12070IFScrH%>sprH% THEN sizey%=sprH% ELSE sizey%=ScrH%:REM Initial height
12080!arg%=sizex%:arg%!4=sizey%:arg%!8=sprW%:arg%!12=sprH%:REM Initial scaling
12090CLG:PROCplot_image(0,0,0,arg%):REM Initial display
12100IFsize THEN
12110 MOUSE RECTANGLE 0,0,ScrW%-xs%,ScrH%-ys%:REM Restrict pointer to screen
12120 ox%=sizex%-xs%:oy%=sizey%-ys%:REM 'Old' coordinates
12130 MOUSE TO ox%,oy%:REM Pointer to upper left corner
12140 REPEAT PROCrmouse(_%,_%,but%):UNTIL but%=0:REM Wait for buttons released
12150 REPEAT PROCvalue_ptr(sizex%DIVxs%,sizey%DIVys%)
12160 REPEAT PROCrmouse(x%,y%,but%):UNTIL (x%<>ox%)OR(y%<>oy%)OR(but%<>0)
12170 IFbut%=0 THEN
12180  IFoy%>y% THEN MOVE 0,y%:PLOT 103,FNmax(x%,ox%),oy%:REM Wipe Y-portion
12190  IFox%>x% THEN MOVE x%,0:PLOT 103,ox%,FNmax(y%,oy%):REM Wipe X-portion
12200  sizex%=x%+xs%:sizey%=y%+ys%:REM True scaled image size
12210  !arg%=sizex%:arg%!4=sizey%:arg%!8=sprW%:arg%!12=sprH%
12220  PROCplot_image(0,0,0,arg%)
12230  ox%=x%:oy%=y%:REM Remember old coordinates
12240 ENDIF
12250 UNTIL but%<>0
12260 SYS "OS_CLI","Pointer 1":REM Restore default pointer
12270ENDIF
12280IFpart THEN
12290 REPEAT PROCmouse(_%,_%,but%):UNTIL but%=0:REM Wait for buttons released
12300 MOUSE RECTANGLE 0,0,sizex%-xs%,sizey%-ys%:REM Restrict pointer to image
12310 MOUSE TO 0,sizey%-ys%:REM Mouse to top right of scaled sprite
12320 REPEAT PROCrmouse(x1%,y2%,but%):PROCvalue_ptr(x1%DIVxs%,y2%DIVys%)
12330 UNTIL but%<>0:REM Get top left point
12340 REPEAT PROCmouse(_%,_%,but%):UNTIL but%=0:REM Wait for buttons released
12350 x2%=x1%:y1%=y2%:REM Initial window corner
12360 MOUSE RECTANGLE x1%,0,sizex%-xs%-x1%,y2%:REM Trap mouse to down/right
12370 SYS WSetCol%,(4<<4)+0:REM Invert colour on screen
12380 ox%=x2%:oy%=y1%:RECTANGLE x1%,y1%,x2%-x1%,y2%-y1%:REM First rectangle
12390 REPEAT PROCrmouse(x2%,y1%,but%)
12400 PROCvalue_ptr((x2%-x1%)DIVxs%+1,(y2%-y1%)DIVys%+1)
12410 IF(x2%<>ox%)OR(y1%<>oy%) THEN
12420  RECTANGLE x1%,oy%,ox%-x1%,y2%-oy%:REM Wipe old rectangle
12430  RECTANGLE x1%,y1%,x2%-x1%,y2%-y1%:REM New rectangle
12440  ox%=x2%:oy%=y1%:REM Old mouse position
12450 ENDIF
12460 UNTIL but%<>0:REM Until second button press
12470 MOUSE RECTANGLE 0,0,ScrW%,ScrH%:REM Reset mouse rectangle to whole screen
12480 RECTANGLE x1%,y1%,x2%-x1%,y2%-y1%:REM Wipe rectangle
12490 MOVE 0,0:REM Wipe surrounding area
12500 _%=x1%-xs%:IF_%>=0 THEN PLOT 103,_%,1024-ys% ELSE MOVE _%,1024-ys%
12510 _%=y2%+ys%:IF_%<ScrH% THEN PLOT 103,1280-xs%,_% ELSE MOVE 1280-xs%,_%
12520 _%=x2%+xs%:IF_%<ScrW% THEN PLOT 103,_%,0 ELSE MOVE _%,0
12530 _%=y1%-ys%:IF_%>=0 THEN PLOT 103,x1%-xs%,_% ELSE MOVE x1%-xs%,_%
12540 SYS "OS_CLI","Pointer 1":REM Restore default pointer
12550ELSE x1%=0:y1%=0:x2%=sizex%-xs%:y2%=sizey%-ys%:REM Whole sprite window
12560ENDIF
12570VDU24,x1%;y1%;x2%;y2%;:REM Clip window
12580ENDPROC
12590 
12600DEFPROCrmouse(RETURN x%,RETURN y%,RETURN but%)
12610REM Returns mouse coordinates and buttons, rounded to exact pixel coords
12620PROCmouse(x%,y%,but%):REM Mouse state
12630x%-=x% MOD xs%:y%-=y% MOD ys%:REM Round down
12640ENDPROC
12650 
12660DEFPROCvalue_ptr(val1%,val2%)
12670REM Puts values in pointer
12680SYS OSSpop%,60+256,pointer,ptr$,0 TO r0,r1,r2,r3:REM Output to sprite
12690COLOUR129:COLOUR2:PRINTTAB(0,2);RIGHT$("   "+STR$val1%,4)'RIGHT$("   "+STR$val2%,4);:SYS OSSpop%,36+256,pointer,ptr$,%0000010:REM Print values and define
12700SYS OSSpop%,r0,r1,r2,r3:REM Restore output to screen
12710ENDPROC
12720 
12730DEFPROCmain_menu
12740REM Creates main menu
12750LOCAL x%,y%
12760PROCsetmenu:REM Set flags and data
12770PROCmouse(x%,y%,_%):IFFrom%=2 THEN y%+=24 ELSE y%=96+6*40
12780menu1=menumain%:SYS WCreateM%,,menu1,x%-64,y%
12790ENDPROC
12800 
12810DEFPROCsetmenu
12820REM Writes current flags and icon data to main menu
12830REM Main
12840PROCifl(ipTrImageinfo,0,NOTImg)
12850PROCifl(ipTrManipulate,0,NOTImg)
12860PROCifl(ipTrExamine,0,NOTImg)
12870REM Main.Pop up
12880PROCifl(ipPoAutomode,AutoMode,0)
12890PROCifl(ipPoAutopalette,AutoPal,0)
12900PROCifl(ipPoAutozoom,AutoZoom,0)
12910PROCifl(ipPoViewmode,ViewMode,0)
12920PROCifl(ipPoModeset,(ModeSet>0),NOTAutoMode)
12930REM Main.Pop up.Mode set
12940PROCifl(ipMoNone,(ModeSet=0),0)
12950PROCifl(ipMoNormal,(ModeSet=1),0)
12960PROCifl(ipMoMultisync,(ModeSet=2),0)
12970PROCifl(ipMoums,(ModeSet=3),0)
12980PROCida(idMoums,FNums)
12990REM Main.Process
13000PROCifl(ipPrClearoutput,ClearFile,0)
13010PROCifl(ipPrScaling,((XMul%<>XDiv%)OR(YMul%<>YDiv%)),0)
13020REM Main.Process.Colour
13030PROCifl(ipCoBlackandwhite,BlackWhite,0)
13040PROCifl(ipCoCorrectgamma,Gamma,0)
13050PROCifl(ipCoCorrectblack,Black,0)
13060PROCifl(ipCoExpandrange,Range,0)
13070PROCifl(ipCoInvertRGB,InvertRGB,0)
13080REM Main.Process.Sprite output
13090PROCifl(ipSpOutputpalette,0,(OutMode=1))
13100PROCifl(ipSpErrorspreading,(ErrSpread<>0),0)
13110PROCifl(ipSpZigzag,ZigZag,0)
13120REM Main.Process.Scaling
13130PROCifl(ipScx,(XMul%<>XDiv%),0)
13140PROCifl(ipScy,(YMul%<>YDiv%),0)
13150REM Main.Process.Misc
13160PROCifl(ipMiScreenblanking,Blanking,0)
13170PROCifl(ipMiGIFscan,GIFScan,0)
13180PROCifl(ipMiPercentage,Percent,0)
13190REM Main.Process.Colour.Correct gamma
13200PROCida(idGagam,STR$(GammaF))
13210REM Main.Process.Colour.Correct black
13220PROCida(idBlbla,STR$(BlackF))
13230REM Main.Process.Sprite output.Error spreading
13240PROCifl(ipSpSimple,(ErrSpread=1),0)
13250PROCifl(ipSpFloydSteinberg,(ErrSpread=2),0)
13260PROCifl(ipSpOff,(ErrSpread=0),0)
13270REM Main.Process.Sprite output.Output mode
13280PROCifl(ipMoAuto,(OutMode=1),0)
13290PROCifl(ipMoCurrent,(OutMode=2),0)
13300REM Main.Process.Sprite output.Output palette
13310PROCifl(ipPaCurrent,(OutPal=1),0)
13320PROCifl(ipPaDefault,(OutPal=2),0)
13330PROCifl(ipPaGreyscale,(OutPal=3),0)
13340REM Main.Process.Scaling.x
13350d$=STR$(XMul%)+":":IFDivIsInX THEN d$+="x" ELSE d$+=STR$(XDiv%)
13360PROCida(idXxsc,d$)
13370REM Main.Process.Scaling.y
13380d$=STR$(YMul%)+":":IFDivIsInY THEN d$+="y" ELSE d$+=STR$(YDiv%)
13390PROCida(idYysc,d$)
13400REM Main.Process.Misc.Image number
13410PROCida(idNunum,STR$(ImageNr%))
13420REM Main.Examine.Zoom
13430PROCifl(ipZo11,((ZoomX=1)AND(ZoomY=1)),0)
13440REM Main.Misc
13450PROCifl(ipMiImagepalette,0,NOTImg)
13460REM Main.Misc.Save
13470PROCifl(ipSaFull,0,NOTImg)
13480PROCifl(ipSaWhole,0,NOTImg)
13490PROCifl(ipSaPart,0,NOTImg)
13500PROCifl(ipSaWholescaled,0,NOTImg)
13510PROCifl(ipSaPartscaled,0,NOTImg)
13520PROCifl(ipSaIncludepalette,SavePal,0)
13530PROCifl(ipSaSameleafname,SameLeaf,0)
13540ENDPROC
13550 
13560DEFPROCifl(fl%,t%,d%)
13570REM Sets menu icon flags
13580t%=-(t%<>0):d%=-(d%<>0)
13590!fl%=((!fl%)ANDNOT1)+t%:REM Tick
13600fl%!8=((fl%!8)ANDNOT(1<<22))+(d%<<22):REM Shaded
13610ENDPROC
13620 
13630DEFPROCida(dp%,d$)
13640REM Sets menu icon data
13650$dp%=d$
13660ENDPROC
13670 
13680DEFPROCset_mode(mode%)
13690REM Sets new mode (if enabled) for image display
13700LOCAL log2bpp%
13710IFAutoMode ELSE PROCset_trans:ENDPROC:REM Auto mode selection not enabled
13720log2bpp%=FNmode_var(mode%,9):REM Log2BPP
13730CASE ModeSet OF
13740 WHEN 0 : REM No mode set : no change of display mode
13750 WHEN 1 : mode%=VALMID$(" 0 81215",log2bpp%*2+1,2):REM Normal set
13760 WHEN 2 : mode%=VALMID$("18192021",log2bpp%*2+1,2):REM Multisync set
13770 WHEN 3 : mode%=UserModeSet%(log2bpp%+1):REM User set
13780ENDCASE
13790IFNOTMultiSync THEN IF(mode%>=18)AND(mode%<=28) THEN mode%=VAL(MID$("0008121515002400081215",(mode%-18)*2+1,2)):REM Map to non-multisync mode
13800PROCmode_change(mode%):REM Select mode
13810ENDPROC
13820 
13830DEFPROCmode_change(mode%)
13840REM Mode has changed or select new mode
13850REM If mode%>=0, mode mode% is selected
13860LOCAL _%,xwind%,ywind%,othermode,colours%,pos%,altmode$,modecols%,sprcols%
13870SYS WReadP%,,wimppal:REM Read current WIMP palette
13880IF(mode%>=0) AND (mode%<>MODE) THEN
13890 SYS WSetM%,mode%:REM Change mode
13900 IFmode%<>MODE THEN
13910  SOUND 1,-10,180,1:REM Alert user that 'ideal' mode couldn't be selected
13920  colours%=2^(2^FNmode_var(mode%,9)):REM Colours required
13930  IFcolours%=2 THEN altmode$="|1800" ELSE IFcolours%=4 THEN altmode$="|1908|0801" ELSE IFcolours%=16 THEN altmode$="|2012|1612|1209" ELSE IFcolours%=256 THEN altmode$="|2115|2415|1513|1310"
13940  REPEAT
13950  IFMODE=mode% ELSE pos%=INSTR(altmode$,"|"+RIGHT$("0"+STR$mode%,2)):IFpos%>0 THEN mode%=VAL(MID$(altmode$,pos%+3)) ELSE PROCerror(-1,"I failed to select the ideal mode, nor any alternative mode ! Now you try it !"):mode%=-1
13960  SYS WSetM%,mode%:REM Change mode
13970  UNTIL (MODE=mode%) OR (mode%<0)
13980 ENDIF
13990ENDIF
14000othermode=(MODE<>CurrMode%):CurrMode%=MODE:REM Mode other than old ?
14010Xeig%=FNmode_var(MODE,4):Yeig%=FNmode_var(MODE,5):REM Read X/YEigFactor
14020Xstep%=2^Xeig%:Ystep%=2^Yeig%:REM Coordinate steps
14030xwind%=FNmode_var(MODE,11)+1:ywind%=FNmode_var(MODE,12)+1:REM Resolution
14040ScrW%=(1<<Xeig%)*xwind%:ScrH%=(1<<Yeig%)*ywind%:REM Screen size
14050IFImg THEN
14060 PROCset_trans:REM Re-set sprite translation
14070 IFAutoPal THEN PROCset_palette(1):REM Select image palette if enabled
14080 IFothermode THEN PROCnew_image_window
14090ENDIF
14100ENDPROC
14110 
14120DEFPROCset_trans
14130REM Sets translation factors (transtab & palette) for sprite plot
14140LOCAL mc%,sc%,v%,c%,gv%,gi%,i%,p%
14150mc%=2^(2^FNlog2BPP):sc%=2^SprColbits%:REM Colours available
14160ShowPal%()=ImgPal%():ShowPal%(0)=2^ShowPal%(0):REM Copy image palette
14170IFmc%=sc% THEN TransTabId=TRUE:ENDPROC:REM Ideal
14180TransTabId=FALSE:REM Always translation
14190IFmc%>sc% THEN
14200 IFmc%<=16 THEN FOR c%=0 TO sc%-1:transtab%?c%=c%AND(mc%-1):NEXT:ENDPROC
14210 SYS "Translator_Palette",8,dum%,2:REM Get default palette
14220 PROCstdpal(ShowPal%(),8):REM Show in default palette
14230 FOR c%=0 TO sc%-1:SYS "Translator_ClosestToRGB",ImgPal%(c%+1),256,dum% TO v%:transtab%?c%=v%:NEXT
14240ELSE REM Less colours than required, so compromise
14250 PROChour_on
14260 IFNOTFreqCalc THEN SYS "Translator_PixelFreq",SprPtr%,freq%:FreqCalc=TRUE:REM Calculate pixel frequencies in image sprite
14270 p1%=freq%:p2%=dum%:pc%=0:FOR c%=0 TO sc%-1:f%=!p1%:p1%+=4:IFf%>0 THEN !p2%=ImgPal%(c%+1)AND&F0F0F0:p2%!4=f%:p2%+=8:pc%+=1:transtab%?c%=1:NEXT ELSE transtab%?c%=0:NEXT
14280 SYS "Translator_Heckbert",dum%,pc%,mc% TO p1%,p2%,used%
14290 FOR c%=1 TO used%:ShowPal%(c%)=(!p1%)AND&F0F0F0:p1%+=4:NEXT:ShowPal%(0)=used%:FOR c%=0 TO sc%-1:IFtranstab%?c%=1 THEN transtab%?c%=!p2%:p2%+=4:NEXT ELSE NEXT
14300 PROChour_off
14310ENDIF
14320ENDPROC
14330 
14340DEFPROCautozoom
14350REM Adjust zoom factor for auto zoom (if enabled)
14360LOCAL _%
14370IFAutoZoom THEN
14380 _%=FNsprW*ZoomX:WHILE _%>ScrW%:ZoomX=ZoomX/2:_%=_%/2:ENDWHILE
14390 IFZoomX<1 THEN WHILE _%*2<=ScrW%:ZoomX=ZoomX*2:_%=_%*2:ENDWHILE
14400 _%=FNsprH*ZoomY:WHILE _%>ScrH%:ZoomY=ZoomY/2:_%=_%/2:ENDWHILE
14410 IFZoomY<1 THEN WHILE _%*2<=ScrH%:ZoomY=ZoomY*2:_%=_%*2:ENDWHILE
14420ENDIF
14430ENDPROC
14440 
14450DEFPROCplot_image(x%,y%,act%,scale%)
14460REM Plots image sprite with translation table
14470IFTransTabId THEN SYS OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale% ELSE SYS OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale%,transtab%
14480ENDPROC
14490 
14500DEFFNunpack(type$)
14510REM Unpacks image (final unpacking phase)
14520REM Returns TRUE if all is well, else FALSE
14530LOCAL c%,bpp%,pc%,b%,gf,bf,min%,max%,rgb%,s%,v%,sub%,mul,r%,g%
14540LOCAL rm%,gm%,bm%,i,ri,gi,bi,Out
14550IFFree%>2*1024 THEN IFFNallocate(B_infile%,Free%-16) ELSE PROCerror(-1,"I have no room for the input file buffer !"):=FALSE
14560bpp%=InPal%(0):REM Bits per pixel input
14570PROCvar("inbi",bpp%):REM Input (image) bits per pixel
14580PROCvar("bwhi",BlackWhite):REM B/w flag
14590PROCvar("espr",ErrSpread):REM Error spreading flag
14600PROCvar("zigz",ZigZag):REM Zig zag flag
14610PROCvar("clfh",0):REM No Clear (yet)
14620PROCvar("outx",OutX%):PROCvar("outy",OutY%):REM Output resolution
14630PROCvar("ymul",YMul%):PROCvar("ydiv",YDiv%):REM Scaling factors Y
14640PROCvar("xmul",XMul%):PROCvar("xdiv",XDiv%):REM Scaling factors X
14650IFPercent THEN IFNOTBlanking THEN PROCvar("perc",1):PROCvar("pinc",(100<<16)/ImgH%) ELSE PROCvar("perc",0):REM Hourglass percentage
14660REM Set palette (if relevant, i.e. not pure RGB input)
14670IFbpp%<=8 THEN FOR c%=0 TO 2^bpp%-1:palrgb%!(c%<<2)=InPal%(c%+1):NEXT
14680FOR b%=0 TO 31:buffer%!(b%*8)=Buffer%(b%,0):buffer%!(b%*8+4)=Buffer%(b%,1):NEXT:REM Buffer locations/sizes
14690IFOutMode=1 THEN pc%=0 ELSE pc%=OutPal:REM Select palette code
14700REM Build R/G/B intensity map for gamma/invert/rgbbits/b&w
14710IFGamma THEN IFGammaF>0 THEN gf=1/GammaF ELSE gf=0:REM Gamma factor
14720IFBlack THEN IFBlackF<>0 THEN bf=BlackF ELSE bf=0:REM Black correction
14730IFRange OR (bpp%<=8) THEN
14740 IFbpp%<=8 THEN
14750  min%=256:max%=0:FOR c%=0 TO 2^bpp%-1:rgb%=InPal%(c%+1):FOR s%=1 TO 3:v%=rgb%AND&FF:rgb%=rgb%>>8:min%=FNmin(min%,v%):max%=FNmax(max%,v%):NEXT:NEXT
14760 ELSE SYS "Translator_UnpackPre",palrgb%,pc%,buffer%,32,intmap%
14770  PROCunpack_phase(type$,3):REM Gather info on RGB range
14780  min%=FNvar("inmi"):max%=FNvar("inma"):REM Get min/max intensity
14790 ENDIF
14800 sub%=min%:mul=255/(max%-min%):REM Range correction factors
14810 RangeMin%=min%:RangeMax%=max%:REM Remember min/max
14820 $IMIrn%=STR$(RangeMin%)+"-"+STR$(RangeMax%)+" ("+STR$(INT((max%-min%)/2.55))+"%)":REM Set range info
14830 RangeI=TRUE:REM Info present
14840ELSE RangeI=FALSE:$IMIrn%="Unknown"
14850ENDIF
14860r%=(RGBbits%>>16)AND&FF:g%=(RGBbits%>>8)AND&FF:b%=RGBbits%AND&FF:v%=&FF00:rm%=v%>>r%:gm%=v%>>g%:bm%=v%>>b%:REM R/G/B masks
14870rg=0.300:gg=0.586:bg=0.114:REM Greyvalues of R/G/B
14880FOR c%=0 TO 255
14890IFRange THEN i=(c%-sub%)*mul ELSE i=c%
14900IFbf=0 ELSE i=i+bf:IFi<0 THEN i=0 ELSE IFi>255 THEN i=255
14910IFgf>0 THEN IFi>0 THEN i=((i/255)^gf)*255
14920IFInvertRGB THEN i=255-i
14930ri=i AND rm%:gi=i AND gm%:bi=i AND bm%
14940IFBlackWhite THEN ri=ri*rg:gi=gi*gg:bi=bi*bg
14950intmap%!(c%<<2)=(ri<<16)+(gi<<8)+bi
14960NEXT
14970GreyRgb=(bpp%>8) AND BlackWhite:REM Flag to indicate grey RGB output
14980SYS "Translator_UnpackPre",palrgb%,pc%,buffer%,32,intmap% TO ,truepal%
14990ImgPal%()=0:ImgPal%(0)=SprColbits%:FOR c%=0 TO 2^SprColbits%-1:ImgPal%(c%+1)=palrgb%!(c%<<2):NEXT:REM Read image palette
15000IFClearFile THEN
15010 Out=OPENOUT(ClearSave$):REM Open Clear file
15020 PROCostring(Out,"Translator"):PROCobf(Out,0):PROCowlf(Out,tversion%):PROCowlf(Out,OutX%):PROCowlf(Out,OutY%):REM Header
15030 IFGreyRgb THEN PROCowlf(Out,8):FOR c%=0 TO 255:PROCotlf(Out,c%ORc%<<8ORc%<<16):NEXT ELSE PROCowlf(Out,ImgBits%):REM Bpp and greypal if grey RGB
15040 IFImgBits%<=8 THEN FOR c%=0 TO 2^ImgBits%-1:rgb%=truepal%!(c%<<2):PROCotbf(Out,rgb%):NEXT:REM Set palette to 'true' palette
15050 PROCvar("clfh",Out):PROCvar("clfp",PTR#Out):PROCvar("clgr",GreyRgb):REM Inform clear writer on outfile
15060 bytes%=OutX%*OutY%:IFImgBits%>8 THEN bytes%=3*bytes%
15070 SYS "XOS_Args",6,Out,bytes%+PTR#Out TO ;f%:IFf%AND1 THEN CLOSE#Out:ClearFile=FALSE:SYS "OS_File",6,ClearSave$:PROCerror(-1,"No room for Clear file on disc !"):=FALSE
15080ELSE PROCvar("clfh",0):REM Clear off
15090ENDIF
15100PROCunpack_phase(type$,1):REM Execute final unpack phase
15110IFClearFile THEN
15120 ClearFile=FALSE:CLOSE#Out:IFFNvar("clfh")=0 THEN SYS "OS_File",6,ClearSave$:PROCerror(-1,"Error during output to Clear file : "+FNstring(FNvar("erro")+4)):REM Remove Clear file if error
15130ENDIF
15140=TRUE
15150 
15160DEFPROCunpack_phase(type$,phase%)
15170REM Executes unpack phase, blanks screen if enabled
15180PROCvar("phas",phase%):REM Set unpacking phase
15190$dum%=LEFT$(type$+"    ",4):REM Type to unpack
15200IFBlanking THEN SYS "Translator_VideoDMA",0:REM Blank if enabled
15210SYS "Translator_Unpack",!dum%:REM Execute unpack phase
15220IFBlanking THEN SYS "Translator_VideoDMA",1:REM Re-enable if blanked
15230IFphase%<>1 THEN result%=0 ELSE result%=FNvar("resu"):REM Result code
15240CASE result% OF
15250 WHEN 0 : REM All OK
15260 WHEN 1,2,3 : PROCerror(-1,"File is too short ! Image may be corrupted !"):REM Out of data
15270 WHEN 16 : PROCerror(-1,"Error in TIFF file : strip(s) missing ! Image may be corrupted !"):REM Out of TIFF strips
15280 OTHERWISE : PROCerror(-1,"Some mysterious error #"+STR$result%+"occured ! Image may be corrupted !"):REM Huh ?
15290ENDCASE
15300ENDPROC
15310 
15320DEFPROCset_palette(palette%)
15330REM Sets a palette according to palette%
15340REM  0 - Desktop palette
15350REM  1 - Image's own palette (when possible)
15360LOCAL c%
15370CASE palette% OF
15380 WHEN 0 : IFFNlog2BPP=3 THEN SYS "Translator_Palette",8,dum%,2:SYS "Translator_SetPalette",256,dum% ELSE SYS WSetP%,,wimppal
15390 WHEN 1 : FOR c%=0 TO ShowPal%(0)-1:dum%!(c%<<2)=ShowPal%(c%+1):NEXT:SYS "Translator_SetPalette",ShowPal%(0),dum%
15400ENDCASE
15410ENDPROC
15420 
15430DEFPROCstdpal(RETURN Pal%(),bpp%)
15440REM Sets a palette to standard Archimedes 2,4,16 or 256 colour palette
15450LOCAL c%,p%
15460SYS "Translator_Palette",bpp%,dum%,2:REM Calculate standard palette
15470p%=dum%:REM Pointer
15480FOR c%=1 TO 2^bpp%:Pal%(c%)=!p%:p%+=4:NEXT
15490Pal%(0)=bpp%
15500ENDPROC
15510 
15520DEFPROCgreypal(RETURN Pal%(),bpp%,dir%)
15530REM Sets a palette to greyscale for bpp% bits per pixel
15540REM dir%=1 gives black to white, dir%=-1 gives white to black
15550LOCAL cols%,step,i,c%
15560cols%=2^bpp%:step=255/(cols%-1):i=0
15570IFdir%=-1 THEN step=-step:i=255 ELSE i=0
15580FOR c%=1 TO 2^bpp%:Pal%(c%)=i OR i<<8 OR i<<16:i+=step:NEXT
15590Pal%(0)=bpp%
15600ENDPROC
15610 
15620DEFPROCmode_info(mode%,RETURN width%,RETURN height%,RETURN colours%)
15630REM Returns information about a particular mode
15640colours%=2^(2^FNmode_var(mode%,9)):width%=1+FNmode_var(mode%,11):height%=1+FNmode_var(mode%,12):REM Return info
15650ENDPROC
15660 
15670DEFPROCinvalidate_screen
15680REM Invalidates entire screen
15690SYS WForce%,-1,0,0,ScrW%,ScrH%:REM Force redraw whole screen
15700ENDPROC
15710 
15720DEFPROCinvalidate_image
15730REM Invalidates image
15740Img=FALSE:FreqCalc=FALSE:REM Reset image flags
15750ENDPROC
15760 
15770DEFPROCnew_window(handle%)
15780REM Redraws entire window area
15790PROCredraw_window(handle%,TRUE)
15800ENDPROC
15810 
15820DEFPROCredraw_window(handle%,force)
15830REM Redraws window with handle handle%
15840REM If force=TRUE the window's entire work area is updated
15850LOCAL more%,nx%,ny%,vw%,vh%,x%,y%,ox%,oy%,z
15860LOCAL x1%,x2%,x3%,x4%,y1%,y2%,y3%,y4%,w1%,w2%,w3%,w4%,h1%,h2%,h3%,h4%
15870!block=handle%:REM Set window's handle
15880IFforce THEN block!4=0:block!8=0:block!12=&7FFF:block!16=&7FFF:SYS WUpdateW%,,block TO more% ELSE SYS WRedrawW%,,block TO more%
15890vw%=block!12+Xstep%-block!4:vh%=block!16+Ystep%-block!8:REM Visible size
15900CASE handle% OF
15910 WHEN win_img% : REM Redraw image window
15920  nx%=(block!4-block!20):ny%=(block!16-block!24):REM Work area origin
15930  IFZoomX>=1 THEN !arg%=ZoomX:arg%!8=1 ELSE !arg%=1:arg%!8=1/ZoomX
15940  IFZoomY>=1 THEN arg%!4=ZoomY:arg%!12=1 ELSE arg%!4=1:arg%!12=1/ZoomY
15950  IF(vw%<=160)OR(vh%<=160) THEN x%=block!4:y%=block!8 ELSE vw%=0
15960  WHILE more%:IFvw%>0 THEN SYS WSetCol%,0:RECTANGLE FILL x%,y%,vw%,vh%
15970  PROCplot_image(nx%,ny%,0,arg%):REM Display image sprite
15980  SYS WGetR%,,block TO more%:ENDWHILE:REM Get next rectangle
15990 WHEN win_zoom% : REM Redraw zoom window
16000  x%=block!4:y%=block!8:REM Visible area coordinates
16010  z=ZoomW/ZoomD:REM Zoom factor
16020  ox%=vw%/2-ZoomWX%*z*Xstep%:oy%=vh%/2-ZoomWY%*z*Ystep%:REM Offset
16030  nx%=SprW%*z*Xstep%:ny%=SprH%*z*Ystep%:REM Total externals
16040  w1%=0:w2%=0:w3%=0:w4%=0:REM No uncovered borders yet
16050  IFox%>0 THEN x1%=x%:y1%=y%:w1%=ox%-Xstep%:h1%=vh%
16060  IF(ox%+nx%)<vw% THEN x2%=x%+ox%+nx%:y2%=y%:w2%=vw%-(ox%+nx%):h2%=vh%
16070  IFoy%>0 THEN x3%=x%:y3%=y%:w3%=vw%:h3%=oy%-Ystep%
16080  IF(oy%+ny%)<vh% THEN x4%=x%:y4%=y%+oy%+ny%:w4%=vw%:h4%=vh%-(oy%+ny%)
16090  !arg%=ZoomW:arg%!8=ZoomD:arg%!4=ZoomW:arg%!12=ZoomD:REM Zoom factors
16100  nx%=x%+ox%:ny%=y%+oy%:REM Plot coordinates
16110  WHILE more%:IFw1%>0 THEN RECTANGLE FILL x1%,y1%,w1%,h1%
16120  IFw2%>0 THEN RECTANGLE FILL x2%,y2%,w2%,h2%
16130  IFw3%>0 THEN RECTANGLE FILL x3%,y3%,w3%,h3%
16140  IFw4%>0 THEN RECTANGLE FILL x4%,y4%,w4%,h4%
16150  PROCplot_image(nx%,ny%,0,arg%):REM Display image sprite
16160  SYS WGetR%,,block TO more%:ENDWHILE:REM Get next rectangle
16170ENDCASE
16180ENDPROC
16190 
16200DEFPROCopen_window(handle%,info)
16210REM Opens window with handle handle%
16220REM If info>0 then info is ready at info, else get info, if -1 pop at top
16230LOCAL b%,px%,py%,_%,xs%,ys%
16240IFinfo>0 THEN
16250 FOR b%=0 TO 31 STEP 4:block!b%=info!b%:NEXT
16260ELSE !block=handle%:SYS WGetWS%,,block
16270 IFinfo=-1 THEN block!28=-1:REM Pop up at top if requested
16280 IFhandle%<>win_img% THEN PROCmouse(px%,py%,_%):xs%=block!12-block!4:ys%=block!16-block!8:block!4=px%-64:block!8=py%-ys%+16:block!12=block!4+xs%:block!16=block!8+ys%:REM Pop up at mouse if not image window
16290ENDIF
16300SYS WOpenW%,,block
16310ENDPROC
16320 
16330DEFPROCclose_window(handle%)
16340REM Closes window with handle handle%
16350!block=handle%:SYS WCloseW%,,block
16360ENDPROC
16370 
16380DEFFNpoll(mask%)
16390REM Returns poll reason code, masking with mask%, data at poll
16400LOCAL reasoncode
16410SYS WPoll%,mask%,poll TO reasoncode
16420=reasoncode
16430 
16440DEFPROCinitialise
16450REM Initialises program
16460SYS "Wimp_ReadPalette",,wimppal:REM Read current WIMP palette
16470PROChour_on:PROCinit_module:PROChour_off:REM Initialise module
16480SYS "OS_CheckModeValid",18 TO _%:MultiSync=(_%<>-1):REM Monitor type
16490applname$="Translator":REM Name of application
16500SYS "Wimp_Initialise",200,&4B534154,applname$ TO version,TaskHandle%
16510IFversion<200 THEN ERROR 1,"I cannot work with WIMP pre-2.00"
16520W%=FNswi_to_nr("Wimp_Initialise"):REM Base SWI number
16530WCreateW%=W%+1:WCreateI%=W%+2:WDeleteW%=W%+3:WOpenW%=W%+5:WCloseW%=W%+6:WPoll%=W%+7:WRedrawW%=W%+8:WUpdateW%=W%+9:WGetR%=W%+10:WGetWS%=W%+11:WGetWI%=W%+12:WSetIS%=W%+13:WGetIS%=W%+14:WGetPI%=W%+15:WDragB%=W%+16:WForce%=W%+17
16540WSetCa%=W%+18:WCreateM%=W%+20:WDecodeM%=W%+21:WSetE%=W%+23:WLoadT%=W%+27:WReport%=W%+31:WSetM%=W%+35:WSetP%=W%+36:WReadP%=W%+37:WSetCol%=W%+38:WSendMsg%=W%+39:WCreateSM%=W%+40
16550OSSpop%=FNswi_to_nr("OS_SpriteOp"):OSReadVV%=FNswi_to_nr("OS_ReadVduVariables"):OSReadMV%=FNswi_to_nr("OS_ReadModeVariable")
16560SYS WReadP%,,wimppal:REM Read current WIMP palette
16570tf%=7:tb%=2:wf%=7:wb%=0:si%=1:so%=3:REM Window/menu colours
16580!block=-1:block!4=0:block!8=0:block!12=68:block!16=68:block!20=&27003002:$(block+24)="!translatr":SYS WCreateI%,,block TO Iiconbar%:REM Iconbar icon
16590REM Load sprites for icons
16600!iconsprites=2048:iconsprites!4=0:iconsprites!8=16:iconsprites!12=16
16610SYS OSSpop%,10+256,iconsprites,"<Translator$Dir>.Sprites"
16620REM Load templates
16630SYS "Wimp_OpenTemplate",,"<Translator$Dir>.Templates"
16640ic=icondata:ie=icondend:REM Indirected icon data workspace
16650$dum%="save":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16660window!(88+24)=1:REM WIMP areaptr
16670SYS WCreateW%,,window TO win_file%
16680SAVsn%=FNiconaddr(win_file%,0):SAVfn%=FNiconaddr(win_file%,1)
16690$dum%="info":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16700SYS WCreateW%,,window TO win_info%
16710$dum%="filetypes":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16720SYS WCreateW%,,window TO win_filet%
16730$dum%="imageinfo":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16740SYS WCreateW%,,window TO win_iminfo%
16750w%=win_iminfo%:IMIfn%=FNiconaddr(w%,1):IMIit%=FNiconaddr(w%,3):IMIin%=FNiconaddr(w%,5):IMIif%=FNiconaddr(w%,7):IMIco%=FNiconaddr(w%,9)
16760IMIwh%=FNiconaddr(w%,11):IMIsc%=FNiconaddr(w%,13):IMIbp%=FNiconaddr(w%,15):IMIsm%=FNiconaddr(w%,17):IMIrn%=FNiconaddr(w%,19)
16770$dum%="rgbbits":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16780FOR i%=3 TO 5:ap%=window+88+i%*32+24:!ap%=iconsprites:NEXT:REM Areaptrs
16790SYS WCreateW%,,window TO win_rgbbits%
16800$dum%="image":IMWtt%=ic:SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16810window?35=&FF:REM Transparent background
16820SYS WCreateW%,,window TO win_img%
16830$dum%="zoom":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16840SYS WCreateW%,,window TO win_zoom%
16850SYS "Wimp_CloseTemplate"
16860REM Load menu structure
16870SYS "OS_File",5,"<Translator$Dir>.MenuStruct" TO ,,,,slen%
16880DIM menustruct% slen%
16890SYS "OS_File",255,"<Translator$Dir>.MenuStruct",menustruct%
16900SYS "OS_File",5,"<Translator$Dir>.MenuData" TO ,,,,dlen%
16910DIM menudata% dlen%
16920SYS "OS_File",255,"<Translator$Dir>.MenuData",menudata%
16930FOR a%=menustruct%+4 TO a%+slen%-8 STEP 4
16940d%=!a%:IF(d%AND&FFF00000)<>&DEA00000 ELSE k%=(d%>>16)AND&F:d%=d%AND&FFFF:IFk%=1 THEN !a%=d%+menustruct% ELSE IFk%=2 THEN !a%=d%+menudata% ELSE IFd%=1 THEN !a%=win_file% ELSE IFd%=2 THEN !a%=win_rgbbits% ELSE !a%=win_iminfo%
16950NEXT
16960Vars=OPENIN"<Translator$Dir>.MenuVars":WHILE NOTEOF#Vars:vn$=GET$#Vars:d%=BGET#Vars:vv$=GET$#Vars:d%=BGET#Vars:IFLEFT$(vn$,2)="id" THEN vv%=menudata%+VALvv$ ELSE vv%=menustruct%+VALvv$
16970d%=EVAL("FNcvar("+vn$+","+STR$vv%+")"):ENDWHILE:CLOSE#Vars
16980menumain%=menustruct%+!menustruct%
16990REM Init variables
17000SaveKind$="":Img=FALSE:SavePal=TRUE:ZoomX=1:ZoomY=1:ImageSpr$="image":Flen%=0:Load$="":SameLeaf=FALSE:SlotDown=FALSE
17010DataSaveRef%=-1:DataLoadRef%=FALSE:YMul%=1:YDiv%=1:XMul%=1:XDiv%=1:ClearFile=FALSE:SaveSpr$="Image":SaveClear$="Clear":SprSave$="":ClearSave$=""
17020F1%=0:F2%=0:SprW%=0:SprH%=0:ImageNr%=1:AutoMode=TRUE:AutoPal=TRUE:CurrMode%=-1:ErrSpread=1:ModeSet=0:UserModeSet%()=0,0,8,12,15:AutoZoom=FALSE
17030BlackWhite=FALSE:TransTabId=FALSE:ImgMode%=0:GIFScan=FALSE:RGBbits%=&080808:Blanking=FALSE:ZigZag=TRUE:InvertRGB=FALSE:FreqCalc=FALSE:OutMode=1:OutPal=1:InFile$="":InType%=0:Percent=TRUE
17040Action=0:ActLoad=1:ActRotate=2:ActPostLoad=3:ViewMode=FALSE:PreMode=MODE:ZoomWin=FALSE:ZoomD=4:ZoomW=ZoomD:DivIsInX=FALSE:DivIsInY=FALSE
17050OutX%=1:OutY%=1:OutMode%=15:GammaF=1:Gamma=FALSE:BlackF=0:Black=FALSE:Range=FALSE:RangeMin%=0:RangeMax%=0:RangeI=FALSE:From%=1:GreyRgb=FALSE
17060B_null%=0:B_area%=1:B_sprite%=2:B_sprimg%=3:B_imgtop%=4:B_infile%=5:B_pixbuf1%=6:B_pixbuf2%=7:B_pixval%=8:B_pixscaled%=9:B_lzwtable%=10:B_stroff%=11:B_fserr%=12
17070IFFNload_status:REM Load default status (if any)
17080ENDPROC
17090 
17100DEFFNcvar(RETURN var%,val%)
17110REM Creates new variable var%, value val%
17120var%=val%:=0
17130 
17140DEFFNiconaddr(win%,ico%)
17150REM Returns indirected icon's data address
17160!block=win%:block!4=ico%:SYS WGetIS%,,block:REM Get icon info
17170=block!28
17180 
17190DEFFNload_status
17200REM Loads default status (if any)
17210REM Returns TRUE if succesful, else FALSE (i.e. status file not found)
17220Status=OPENIN("<Translator$Dir>.Status"):IFStatus=0 THEN =FALSE
17230INPUT#Status,AutoMode,AutoPal,ModeSet,ErrSpread,SavePal,UserModeSet%(1),UserModeSet%(2),UserModeSet%(3),UserModeSet%(4),AutoZoom,BlackWhite,GIFScan,Blanking,InvertRGB,ZigZag,ViewMode,OutMode,OutPal,Percent,GammaF,Gamma,BlackF,Black
17240INPUT#Status,Range,SameLeaf:CLOSE#Status
17250IFErrSpread=-1 THEN ErrSpread=1
17260=TRUE
17270 
17280DEFFNums
17290REM Returns string representing current user mode set
17300=STR$(UserModeSet%(1))+","+STR$(UserModeSet%(2))+","+STR$(UserModeSet%(3))+","+STR$(UserModeSet%(4))
17310 
17320DEFFNavailable_mode(mode%)
17330REM Checks if mode% is a valid WIMP mode and available on monitor
17340IFmode%=3 OR mode%=6 OR mode%=7 OR mode%=23 THEN =FALSE
17350IFmode%<0 OR mode%>28 THEN =FALSE
17360IFmode%=24 OR mode%<18 THEN =TRUE ELSE =MultiSync
17370 
17380DEFFNalign(val%)
17390REM Returns next-up word aligned value of val%
17400=(val%+3)ANDNOT3
17410 
17420DEFFNreadpalval(rgb%)
17430REM Returns 'OS_ReadPalette' word from &RGB value
17440=((rgb%AND&FF)<<24)+((rgb%AND&FF00)<<8)+((rgb%AND&FF0000)>>8)+&10
17450 
17460DEFFNstring(addr%)
17470REM Returns CTRL-char terminated string at addr%
17480LOCAL _%,_c%,_$
17490_%=-1:REPEAT _%+=1:UNTIL addr%?_%<32
17500_c%=addr%?_%:addr%?_%=13:_$=$addr%:addr%?_%=_c%
17510=_$
17520 
17530DEFFNupstring(m$)
17540REM Returns upper case m$
17550LOCAL c%,v%,u$
17560u$=m$:FOR c%=1 TO LEN m$:v%=ASCMID$(m$,c%,1):IF(v%<=ASC"z")AND(v%>=ASC"a") THEN MID$(u$,c%,1)=CHR$(v%AND&5F)
17570NEXT:=u$
17580 
17590DEFPROCmouse(RETURN x%,RETURN y%,RETURN but%)
17600REM Returns x,y and button state of mouse
17610MOUSE x%,y%,but%
17620ENDPROC
17630 
17640DEFFNlog2BPP
17650REM Returns Log2BPP for current mode
17660=FNmode_var(MODE,9)
17670
17680DEFFNcolstobpp(cols%)
17690REM Returns bits per pixel needed for cols% colours
17700IFcols%<=1 THEN =1 ELSE =FNceil(LOG(cols%)/LOG2)
17710 
17720DEFFNvdu_var(varnr%)
17730REM Returns VDU variable varnr%
17740!arg%=varnr%:arg%!4=-1:SYS OSReadVV%,arg%,arg%+8:=arg%!8
17750 
17760DEFFNmode_var(mode%,varnr%)
17770REM Returns mode mode% variable varnr%
17780LOCAL result%
17790SYS OSReadMV%,mode%,varnr% TO ,,result%:=result%
17800 
17810DEFFNOS_var(_$)
17820REM Attempts to return OS-var's string value
17830LOCAL _r$,_l%
17840SYS "XOS_ReadVarVal",_$,STRING$(100," "),100,0,3 TO ,_r$,_l%
17850_r$=LEFT$(_r$,_l%):=_r$
17860 
17870DEFFNswi_to_nr(swi$)
17880REM Returns SWI number of SWI call swi$
17890LOCAL swinr%
17900SYS "XOS_SWINumberFromString",,swi$ TO swinr%
17910=swinr%
17920 
17930DEFPROCerror(errnr,errmsg$)
17940REM Handles errors
17950LOCAL but%,opt%
17960SYS "Translator_VideoDMA",1:REM Ensure video DMA enabled
17970IFerrnr=-1 THEN errnr=1:opt%=1 ELSE opt%=3
17980!err=errnr:$(err+4)=errmsg$
17990SYS "Translator_Palette",2^FNlog2BPP,dum%,1:REM Read current palette
18000PROCset_palette(0):REM Select WIMP palette
18010SYS WReport%,err,opt%,applname$ TO ,but%
18020IFbut%<>1 THEN PROCdie
18030SYS "Translator_SetPalette",2^(2^FNlog2BPP),dum%:REM Reset palette
18040ENDPROC
18050 
18060DEFFNsprW
18070REM Returns image sprite's width in OS pixels in current mode
18080=SprW%*Xstep%
18090 
18100DEFFNsprH
18110REM Returns image sprite's height in OS pixels in current mode
18120=SprH%*Ystep%
18130 
18140DEFFNmax(v1%,v2%)
18150REM Returns maximum of v1% and v2%
18160IFv1%>v2% THEN =v1% ELSE =v2%
18170 
18180DEFFNmin(v1%,v2%)
18190REM Returns minimum of v1% and v2%
18200IFv1%<v2% THEN =v1% ELSE =v2%
18210 
18220DEFFNceil(v)
18230REM Returns 'ceiling' of value (i.e. round up)
18240IFv=INTv THEN =v ELSE =INTv+1
18250 
18260DEFPROCdie
18270REM Tidies up and exits
18280PROCfinish:REM Tidy up
18290SYS "OS_Exit"
18300ENDPROC
18310 
18320DEFPROCfinish
18330REM Tidies up
18340SYS "Translator_TaskQuit" TO tasks%:IFtasks%<=0 THEN SYS "OS_Module",4,"Translator":REM Kill module if no other tasks are using it
18350SYS WSetP%,,wimppal:REM Reset palette
18360SYS "Wimp_CloseDown",TaskHandle%,&4B534154
18370ENDPROC
18380 
18390DEFFNmode(width%,height%,colours%)
18400REM Returns, if possible, a standard screen mode that is most suitable for
18410REM displaying a picture of (width%)x(height%) pixels in colours% colours
18420REM Returns -1 if number of colours greater than 256
18430LOCAL arccols%,arcwidth%,archeight%,mode%
18440IFOutMode=2 THEN =MODE
18450REM Range check for colours, width and height
18460IFcolours%>256 THEN =-1:REM Impossible !
18470REM Determine closest colours/width/height
18480IFcolours%>16 THEN arccols%=256 ELSE IFcolours%>4 THEN arccols%=16 ELSE IFcolours%>2 THEN arccols%=4 ELSE arccols%=2
18490IFwidth%>640 THEN arcwidth%=1056 ELSE IFwidth%>320 THEN arcwidth%=640 ELSE arcwidth%=320
18500IFheight%<=256 THEN archeight%=256 ELSE archeight%=512
18510CASE arccols% OF
18520 WHEN 2 : IFarcheight%=512 THEN mode%=18 ELSE mode%=0
18530 WHEN 4 : IFarcheight%=512 THEN mode%=19 ELSE IFarcwidth%<=320 THEN mode%=1 ELSE mode%=8
18540 WHEN 16 : IFarcheight%=512 THEN mode%=20 ELSE IFarcwidth%<=320 THEN mode%=9 ELSE IFarcwidth%=640 THEN mode%=12 ELSE mode%=16
18550 WHEN 256 : IFarcheight%=512 THEN mode%=21 ELSE IFarcwidth%=160 THEN mode%=10 ELSE IFarcwidth%=320 THEN mode%=13 ELSE IFarcwidth%=640 THEN mode%=15 ELSE mode%=24
18560ENDCASE
18570=mode%
18580 
18590DEFFNtimes(value%)
18600REM Returns STR$value% with 'plural extension'
18610LOCAL _d%
18620_d%=value%MOD10:REM Last digit determines extension
18630IF(((value%MOD100)DIV10)=1)OR(_d%>3)OR(_d%=0) THEN =STR$value%+"th"
18640CASE _d% OF
18650 WHEN 1 : =STR$value%+"st"
18660 WHEN 2 : =STR$value%+"nd"
18670 WHEN 3 : =STR$value%+"rd"
18680ENDCASE
18690
18700DEFPROCread24pal(fh%,RETURN Pal%(),cols%,ro%,go%,bo%,elen%)
18710REM Reads 24-bit palette from input file
18720REM Entries are cols%*elen%-byte, R,G,B at r0%/go%/bo% offsets
18730LOCAL p%,c%,m%
18740SYS "OS_GBPB",4,fh%,dum%,cols%*elen%:REM Read entire palette
18750p%=dum%:REM Pointer
18760FOR c%=1 TO cols%:Pal%(c%)=p%?ro%<<16 OR p%?go%<<8 OR p%?bo%:p%+=elen%:NEXT
18770ENDPROC
18780 
18790DEFFNistring(fh%,len%)
18800REM Returns string of from file
18810REM If len%>0 the number of characters is len%
18820REM If len%=-1 the string is CTRL-character terminated
18830LOCAL _%,r$,c%
18840_$="":IFlen%>0 THEN FOR _%=1 TO len%:r$+=CHR$FNibf(fh%):NEXT ELSE IFlen%=-1 THEN c%=FNibf(fh%):WHILE c%>=ASC" ":r$+=CHR$c%:c%=FNibf(fh%):ENDWHILE
18850=r$
18860 
18870DEFPROCiskip(fh%,amount%)
18880REM Skips amount% bytes in file
18890PTR#fh%=amount%+PTR#fh%
18900ENDPROC
18910 
18920DEFPROCiptr(fh%,newptr%)
18930REM Sets new offset in file
18940PTR#fh%=newptr%
18950ENDPROC
18960 
18970DEFFNiptr(fh%)
18980REM Returns current offset in file
18990=PTR#fh%
19000 
19010DEFFNilen(fh%)
19020REM Returns length of file
19030=EXT#fh%
19040 
19050DEFFNieof(fh%)
19060REM Returns end-of-file status of file
19070=EOF#fh%
19080 
19090DEFPROCiclose
19100REM Closes all input files
19110IFF1%<>0 THEN SYS "XOS_Find",0,F1%:F1%=0
19120IFF2%<>0 THEN SYS "XOS_Find",0,F2%:F2%=0
19130ENDPROC
19140 
19150DEFPROCiget(fh%,adr%,amount%)
19160REM Returns amount% bytes at adr% from file
19170SYS "OS_GBPB",4,fh%,adr%,amount%
19180ENDPROC
19190
19200DEFFNib:=BGET#F1%
19210DEFFNidb:=BGET#F1%<<8 OR BGET#F1%
19220DEFFNitb:=BGET#F1%<<16 OR BGET#F1%<<8 OR BGET#F1%
19230DEFFNiwb:=BGET#F1%<<24 OR BGET#F1%<<16 OR BGET#F1%<<8 OR BGET#F1%
19240DEFFNidl:=BGET#F1% OR BGET#F1%<<8
19250DEFFNitl:=BGET#F1% OR BGET#F1%<<8 OR BGET#F1%<<16
19260DEFFNiwl:=BGET#F1% OR BGET#F1%<<8 OR BGET#F1%<<16 OR BGET#F1%<<24
19270DEFFNibf(fh%):=BGET#fh%
19280DEFFNiwlf(fh%):=BGET#fh% OR BGET#fh%<<8 OR BGET#fh%<<16 OR BGET#fh%<<24
19290
19300DEFPROCobf(fh%,val%):BPUT#fh%,val%:ENDPROC
19310DEFPROCotbf(fh%,val%):BPUT#fh%,val%>>>16:BPUT#fh%,val%>>>8:BPUT#fh%,val%:ENDPROC
19320DEFPROCotlf(fh%,val%):BPUT#fh%,val%:BPUT#fh%,val%>>>8:BPUT#fh%,val%>>>16:ENDPROC
19330DEFPROCowlf(fh%,val%):BPUT#fh%,val%:BPUT#fh%,val%>>>8:BPUT#fh%,val%>>>16:BPUT#fh%,val%>>>24:ENDPROC
19340
19350DEFPROCostring(fh%,w$)
19360REM Outputs string to file
19370LOCAL i%
19380FOR i%=1 TO LENw$:BPUT#fh%,ASCMID$(w$,i%,1):NEXT
19390ENDPROC
19400
19410DEFPROCinit_module
19420REM Initialises module
19430SYS "Translator_MakeMaps":REM Initialise maps
19440SYS "Translator_TaskStart":REM Register task
19450ENDPROC
19460 
19470DEFPROCvar(varname$,value%)
19480REM Writes module variable
19490$dum%=varname$:SYS "Translator_SetVariable",!dum%,value%
19500ENDPROC
19510 
19520DEFFNvar(varname$)
19530REM Reads module variable
19540LOCAL value%
19550$dum%=varname$:SYS "Translator_ReadVariable",!dum% TO value%
19560=value%
19570 
19580DEFFNOSvar(name$)
19590REM Attempts to return OS-var's string value
19600LOCAL _r$,_l%
19610_r$=STRING$(100," "):SYS "XOS_ReadVarVal",name$,_r$,LEN_r$,0,3 TO ,_r$,_l%
19620=LEFT$(_r$,_l%)
19630

� >!RunImage
K��������������������������������������������������������������������
3� Converts foreign graphics files to Archimedes
(-� Version date : Thu,25 Apr 1991.23:16:49
2� � 1991 Zeridajh software
<� by John Kortink
FK��������������������������������������������������������������������
P1� � �0:�'"Error"''"'";�$;"' (code ";�;")"'':�
Z-tversion%=644:� Translator version number
d;� window &A00,iconsprites 2048,icondata 4096,icondend 0
nE� menuico% 256,poll 256,block 256,err 256,wimppal 256,pointer 512
x<� InPal%(256),ImgPal%(256),ShowPal%(256),UserModeSet%(4)
�7� arg% 1024,dum% 5*1024,transtab% 256,Buffer%(32,1)
�5� buffer% 32*8,freq% 1024,palrgb% 1024,hambas% 64
�� intmap% 1024,pbmint% 256
�@Progneed%=150*1024:� Estimated space needed for program+vars
�@LowHeap%=1024:� Lowest size for heap (sprite, buffers, etc.)
�7Totalfree%=�-�:� Total free for program+vars+sprbuf
�EMidHimem%=�+Progneed%:� Pseudo HIMEM (top of prog, start of heap)
�DHeap%=MidHimem%:HeapSize%=Totalfree%-Progneed%:� Set heap + size
�>�HeapSize%<LowHeap% � � 1,"No room to start up Translator"
�4�=MidHimem%:� Lower himem to below sprite buffer
�(�initialise:� Initialise application
�7�mode_change(-1):� Reselect current mode to tidy up
��Lname$=�OSvar("Translator$File"):�Lname$<>"" � ș "OS_CLI","Unset Translator$File":Ltype%=�image_type(Lname$,�):�Ltype%>0 � Action=ActLoad:� Auto-boot, pending load
-� � �error(�,�$+" (code "+Þ+")"):�iclose
� Poll and action
D�DataLoadRef% � pollmask%=48 � pollmask%=49:� No nulls if wasted
"Ȏ �poll(pollmask%) �
, � 0 : �null
6 � 1 : �redraw
@ � 2 : �open
J � 3 : �close
T  �Kill � Kill=�:SlotDown=�
^ � 6 : �mouseclick
h � 7 : �dragdrop
r � 8 : �key
| � 9 : �menuselect
� � 17,18 : �message
��
�
�Action �
�< SlotDown=�:�=&1000000:�new_slot:�=MidHimem%:� Claim max
� Ȏ Action �
�"  � ActLoad : � Load new image
�#   Action=0:� Reset action flag
�6   Ok=�load(Ltype%,Lname$):� Attempt to load image
�   �Ok � Action=ActPostLoad
�"  � ActRotate : � Rotate image
�#   Action=0:� Reset action flag
�8   free%=Heap%+HeapSize%-SprEnd%:� Free above sprite
�   �free%>8*1024 �
q    �hour_on:�var("rotb",SprEnd%):�var("rots",free%):ș "Translator_Rotate",SprPtr%:�hour_off:� Rotate sprite
@    Sprite%!12=Sprite%!8+!(Sprite%+Sprite%!8):Ȕ SprH%,SprW%
,    �new_image_window:� New image window
&1   � �error(-1,"No room for rotate buffer !")
0   �
: �
D�
N�SlotDown �
X0 �Img � �=(SprEnd%+1023)��1023 � �=MidHimem%
b �new_slot:�=MidHimem%
l SlotDown=�
v�
��(Action=ActPostLoad) �
�! Action=0:� Reset action flag
�, �set_mode(ImgMode%):� Select image mode
�) ZoomX=1:ZoomY=1:� Reset zoom factors
�A �AutoPal � �set_palette(1):� Select image palette if enabled
�- �new_image_window:� Open window on image
��
�D� �TNA:� Sorry, I have to. Current BASIC restrictions with END=.
� 
���new_slot
�� Slot changed, reset info
�,HeapSize%=�-MidHimem%:� New size of heap
��

��menuselect
?ș WDecodeM%,,menu1,poll,�100," ") � ,,,select$:� Selection
 -� Decode main/sub/subsub selection string
**menupath$=select$:� Remember menu path
4fselect2=�:select3=�:select4=�:select5=�:select2$="":select3$="":select4$="":select5$="":� Defaults
>�p%=�select$,"."):�p%>0 � select2=�:select2$=�select$,p%+1):select$=�select$,p%-1):p%=�select2$,"."):�p%>0 � select3=�:select3$=�select2$,p%+1):select2$=�select2$,p%-1):p%=�select3$,".")
H��p%>0 � select4=�:select4$=�select3$,p%+1):select3$=�select3$,p%-1):p%=�select4$,"."):�p%>0 � select5=�:select5$=�select4$,p%+1):select4$=�select4$,p%-1)
R4� Filter clicks on roots of entries with submenu
\Ȏ menupath$ �
f\ � "Image info","Pop up","Process","Manipulate","Examine","Misc" : �select2 � select$=""
p� � "Pop up.Mode set","Process.Colour","Process.Sprite output","Process.Scaling","Process.Misc","Examine.Zoom","Manipulate.Mirror","Misc.Save","Misc.Status" : �select3 � select$=""
z� � "Process.Sprite output.Output mode","Process.Sprite output.Output palette","Process.Sprite output.Error spreading","Process.Scaling.x","Process.Scaling.y","Examine.Zoom.In","Examine.Zoom.Out" : �select4 � select$=""
��
�Ȏ select$ �
� � "" : � Do nothing
� � "Quit" : � Quit program
�  �die:� Tidy up and exit
�" � "Pop up" : � Pop up options
�  Ȏ select2$ �
�)   � "Auto mode" : AutoMode=�AutoMode
�*   � "Auto palette" : AutoPal=�AutoPal
�+   � "Mode set" : � Select new mode set
�    Ȏ �select3$,4) �
�)     � "Root" : � No selection (root)
�+     � "None" : ModeSet=0:� No mode set
7     � "Norm" : ModeSet=1:� Normal monitor mode set
:     � "Mult" : ModeSet=2:� Multisync monitor mode set
5      : � User mode set, check and if ok, change
$�      s$=select3$:p%=�s$,","):�p%>0 � m1%=�s$:s$=�s$,p%+1):p%=�s$,","):�p%>0 � m2%=�s$:s$=�s$,p%+1):p%=�s$,","):�p%>0 � m3%=�s$:s$=�s$,p%+1):m4%=�s$
.�      �p%>0 � UserModeSet%(1)=m1%:UserModeSet%(2)=m2%:UserModeSet%(3)=m3%:UserModeSet%(4)=m4%:ModeSet=3 � �error(-1,"Bad user mode set. Please use '<2colmode>,<4colmode>,<16colmode>,<256colmode>', e.g. '1,2,3,4'.")
8	    �
B)   � "Auto zoom" : AutoZoom=�AutoZoom
L)   � "View mode" : ViewMode=�ViewMode
V  �
`' � "Process" : � Processing options
j  Ȏ select2$ �
t/   � "Colour" : � Colour processing options
~    Ȏ select3$ �
�5     � "Black and white" : BlackWhite=�BlackWhite
�6     � "Correct gamma" : � Gamma correction factor
�[      �(select4$+select5$)="" � GammaF=1 � GammaF=�(select4$+"."+select5$):� New factor
�:      Gamma=(GammaF<>1)�(GammaF>0):� Gamma in effect ?
�6     � "Correct black" : � Black correction factor
�C      �select4$="" � BlackF=0 � BlackF=�(select4$):� New factor
�:      Black=(BlackF<>0):� Black correction in effect ?
�(     � "Expand range" : Range=�Range
�.     � "Invert RGB" : InvertRGB=�InvertRGB
�	    �
�2   � "Sprite output" : � Sprite output options
�    Ȏ select3$ �
9     � "Output mode" : � Change output mode selection

2      �select4$="Auto" � OutMode=1 � OutMode=2
?     � "Output palette" : � Change output palette selection
T      �select4$="Current" � OutPal=1 � �select4$="Default" � OutPal=2 � OutPal=3
(4     � "Error spreading" : � Set error spreading
2      Ȏ select4$ �
<#       � "Simple" : ErrSpread=1
F,       � "Floyd Steinberg" : ErrSpread=2
P        � "Off" : ErrSpread=0
Z      �
d%     � "Zig zag" : ZigZag=�ZigZag
n	    �
x1   � "Clear output" : � Clear output file off
�:    �ClearFile � ș "OS_File",6,ClearSave$:ClearFile=�
�+   � "Scaling" : � Change scale factors
�#    xm%=-1:ym%=-1:xd%=-1:yd%=-1
�    Ȏ select3$ �
�*     � "1:1" : xm%=1:ym%=1:xd%=1:yd%=1
�*     � "1:2" : xm%=1:ym%=1:xd%=2:yd%=2
�*     � "2:1" : xm%=2:ym%=2:xd%=1:yd%=1
Ȁ     � "x","y" : s$=select4$:p%=�s$,":"):mul%=�s$:�p%>0 � s$=�s$,p%+1):div%=�s$ � div%=0:� Determine scaling ratio (0=inpix)
�?      �select3$="x" � xm%=mul%:xd%=div% � ym%=mul%:yd%=div%
�	    �
�9    �xm%=-1 � XMul%=xm%:XDiv%=xd%:DivIsInX=(XDiv%<=0)
�9    �ym%=-1 � YMul%=ym%:YDiv%=yd%:DivIsInY=(YDiv%<=0)
�(   � "Misc" : � Miscelaneous options
    Ȏ select3$ �
1     � "Screen blanking" : Blanking=�Blanking
(     � "GIF scan" : GIFScan=�GIFScan
"*     � "Image number" : � Image number
,:      �select4$="" � ImageNr%=1 � ImageNr%=�(select4$)
6A     � "Next image","Previous image" : � Image number up/down
@      Ȏ �select3$,1) �
J       � "N" : ImageNr%+=1
T,       � "P" : �ImageNr%>1 � ImageNr%-=1
^      �
h~      �InFile$<>"" � Lname$=InFile$:Ltype%=InType%:Action=ActLoad � �error(-1,"Load an image file first !"):� Pending load
r*     � "Percentage" : Percent=�Percent
|	    �
�  �
�, � "Manipulate" : � Manipulation options
�  Ȏ select2$ �
�#   � "Rotate" : � Rotate sprite
�'    Action=ActRotate:� Pending load
�"   � "Mirror" : � Mirror image
�;    �var("imgx",SprW%):�var("imgy",SprH%):� Module info
�    �hour_on
�i    �select3$="x" � ș "Translator_MirrorX",SprPtr% � ș "Translator_MirrorY",SprPtr%:� Mirror sprite
�    �hour_off
�4    �new_window(win_img%):� Freshen image window
�  �
�( � "Examine" : � Examination options
  Ȏ select2$ �
-   � "Zoom" : � Zoom in, out, normal size
A    OldZoomX=ZoomX:OldZoomY=ZoomY:� Remember old zoom factors
&    Ȏ select3$ �
0     � "In": �select4$="Both" � ZoomX=ZoomX*2:ZoomY=ZoomY*2 � �select4$="x" � ZoomX=ZoomX*2 � �select4$="y" � ZoomY=ZoomY*2
:�     � "Out": �select4$="Both" � ZoomX=ZoomX/2:ZoomY=ZoomY/2 � �select4$="x" � ZoomX=ZoomX/2 � �select4$="y" � ZoomY=ZoomY/2
D!     � "1:1": ZoomX=1:ZoomY=1
N	    �
XL    � Set image window extent and title according to current zoom factor
bC    !block=0:block!4=0:block!8=�sprW*ZoomX:block!12=�sprH*ZoomY
lC    ș WSetE%,win_img%,block:� Set window extent to zoomed size
v(    $IMWtt%=�image_title:� New title
�B    !block=win_img%:ș WGetWS%,,block:� Read window's position
�L    dx%=(block!12-block!4)/2:dy%=(block!16-block!8)/2:� Half window size
�H    vx%=block!20+dx%:vy%=block!24-dy%:� Vector from centre to origin
�I    � Calculate new scroll offsets by scaling vector and re-transpose
�G    block!20=vx%*ZoomX/OldZoomX-dx%:block!24=vy%*ZoomY/OldZoomY+dy%
�<    �close_window(win_img%):�open_window(win_img%,block)
�+   � "Magnifier" : � Pop up zoom window
�D    ZoomWin=�:ZoomWX%=0:ZoomWY%=0:ZoomW=ZoomD:� Init zoom window
�5    �open_window(win_zoom%,-1):� Open zoom window
�  �
�' � "Misc" : � Miscellaneous options
�  Ȏ select2$ �
�1   � "Reload last" : � Reload last image file
|    �InFile$<>"" � Lname$=InFile$:Ltype%=InType%:Action=ActLoad � �error(-1,"Load an image file first !"):� Pending load
/   � "Save" : � Save whole or part of image
    Ȏ select3$ �
 /     � "Include palette" : SavePal=�SavePal
*/     � "Same leafname" : SameLeaf=�SameLeaf
47      : SaveKind$=select3$:� Remember type of save
>K       $SAVfn%=SaveSpr$:$SAVsn%="file_ff9":� Set file window for sprite
H8       �open_window(win_file%,-1):� Open file window
R2       ș WSetCa%,win_file%,1,,,-1,�(SaveSpr$)
\	    �
f1   � "Image palette" : � Select image palette
p    �set_palette(1)
z)   � "Status" : � Manipulate defaults
�    Ȏ select3$ �
��     � "Save" : Status=�("<Translator$Dir>.Status"):�#Status,AutoMode,AutoPal,ModeSet,ErrSpread,SavePal,UserModeSet%(1),UserModeSet%(2),UserModeSet%(3),UserModeSet%(4),AutoZoom,BlackWhite,GIFScan,Blanking,InvertRGB
�k      �#Status,ZigZag,ViewMode,OutMode,OutPal,Percent,GammaF,Gamma,BlackF,Black,Range,SameLeaf:�#Status
�d     � "Load" : �load_status � �error(-1,"I cannot find my status file ! Have you saved one ?")
�<     � "Kill" : ș "OS_File",6,"<Translator$Dir>.Status"
�	    �
�  �
��
�(ș WGetPI%,,block:� Get pointer info
�5�((block!8)�1)>0 � �main_menu:� Adjust -> re-open
��
�
���close
	)Kill=�:� Flag returned : image killed
	win%=poll!0:� Window handle
	&�close_window(win%):� Close window
	$
Ȏ win% �
	.3 � win_img% : �invalidate_image:�set_palette(0)
	8  �close_window(win_file%)
	B(  �close_window(win_zoom%):ZoomWin=�
	L'  �ViewMode � �mode_change(PreMode)
	V  Kill=�
	` � win_zoom% : ZoomWin=�
	j�
	t�
	~
	�
��open
	��open_window(0,poll)
	��
	�
	���redraw
	��redraw_window(poll!0,�)
	��
	�
	�
��null
	��DataLoadRef% �
	�D DataLoadRef%=�:ș "OS_File",6,Save$:� Delete file saved/created
	�C �error(-1,"Bad data transfer, receiver dead"):� No DataLoadAck
�

�

	��key
(Ewin%=poll!0:ico%=poll!4:char%=poll!24:� Window, icon, key pressed
2"�(win%=win_file%) � (ico%=1) �
< Ȏ char% �
F  � 13 : � Return pressed
PJ   �error(-1,"Please drag the sprite file icon to a directory viewer")
Z  � 27 : � Escape pressed
d   �close_window(win_file%)
n �
x�
��
�
�
��message
�-� Ignore messages originating from myself
�6�(poll!4)=TaskHandle% � msgnr%=-1 � msgnr%=poll!16
�Ȏ msgnr% �
� � -1 : � Don't react
�+ � 0 : �die:� Request to terminate task
�. � 1 : � DataSave, transfer via scrap file
�7  scrap$=�OSvar("Wimp$Scrap"):� Read scrap filename
��  �scrap$<>"" � poll!12=poll!8:poll!16=2:poll!36=-1:$(poll+44)=scrap$+�0:poll!0=44+(�scrap$+1+3)��3:ș WSendMsg%,18,poll,poll!4 � �error(-1,"Wimp$Scrap not defined"):� Send DataSaveAck if scrap file defined
�# � 2 : � DataSaveAck, save file
�  �poll!12=DataSaveRef% �
I   Save$=�string(poll+44):� Full pathname of file to be saved/created
.   � Save sprite file or 'open' Clear file
�   �$SAVsn%="file_ff9" � SprSave$=Save$:�save_sprite(SprSave$) � ClearSave$=Save$:ș "OS_File",11,ClearSave$,&690,0,0:ClearFile=�
"?   poll!12=poll!8:poll!16=3:� Amend data block for DataLoad
,2   ș WSendMsg%,18,poll,poll!4:� Send DataLoad
6@   DataLoadRef%=poll!8:� Await a DataLoadAck, remember myref
@  �
J. � 3,5 : � DataLoad/Open : attempt to load
TB  type%=poll!40:name$=�string(poll+44):� Filetype and filename
^  Ȏ type% �
hT   � &FF9,&DE2,&DFA,&D58,&004 : �msgnr%=3 � type%=�image_type(name$,�) � type%=0
r,    type%=�image_type(name$,(msgnr%=3))
|  �
�  �type%>0 �
�I   poll!12=poll!8:poll!16=4:ș WSendMsg%,17,poll,poll!4:� DataLoadAck
�>   Lname$=name$:Ltype%=type%:Action=ActLoad:� Pending load
�r  � �msgnr%=3 � �error(-1,"I don't recognize this file. Please filetype it appropiately."):� Drag unrecognized
�  �
�) � 4 : � DataLoadAck, check or ignore
�<  �DataLoadRef% � �poll!12=DataLoadRef% � DataLoadRef%=�
�! � &400C0 : � Submenu warning
�G  pointer%=poll!20:x%=poll!24:y%=poll!28:� Get pointer/proposed x/y
�A  ș WDecodeM%,,menu1,poll+32,�100," ") � ,,,path$:� Get path
�  Ȏ path$ �
�   � "Process.Clear output" : $SAVfn%=SaveClear$:$SAVsn%="file_690":ș WCreateSM%,,pointer%,x%,y%:ș WSetCa%,win_file%,1,,,-1,�(SaveClear$):� Open file window for Clear file
�  �
@ � &400C1 : � Mode has changed (and it may not have been me)
   �mode_change(-1):� Tidy up
�
&�
0 
:��mouseclick
D?but%=poll!8:win%=poll!12:ico%=poll!16:� Buttons/window/icon
N
Ȏ win% �
X � -2 : � Click on iconbar
b  �ico%=Iiconbar% �
l   � Iconbar icon clicked
v   Ȏ but% � 7 �
�*    � 2 : �mouse(x%,_%,_%):m%=menuico%
��     $m%="Translator":m%?12=tf%:m%?13=tb%:m%?14=wf%:m%?15=wb%:m%!16=10*16:m%!20=40:m%!24=0:m%!28=0:m%!32=win_info%:m%!36=(wb%<<28)+(wf%<<24)+1:$(m%+40)="Info":m%!52=0:m%!56=win_filet%:m%!60=m%!36
�w     $(m%+64)="Filetypes":m%!76=&80:m%!80=-1:m%!84=m%!36:$(m%+88)="Quit":menu1=m%:ș WCreateM%,,menu1,x%-64,96+3*40
�"    � 1,4 : From%=1:�main_menu
�   �
�  �
�) � win_img% : � Click on image window
�  Ȏ but% � 7 �
�   � 2 : From%=2:�main_menu
�B    : � Wandering over image, recalculate zoom window if open
�    �ZoomWin �
��     xs%=Xstep%:ys%=Ystep%:x%=poll!0:y%=poll!4:!block=win_img%:ș WGetWS%,,block:ox%=block!4-block!20:oy%=block!16-block!24:rx%=x%-ox%:ry%=y%-oy%:ex%=rx%/ZoomX/xs%:ey%=ry%/ZoomY/ys%:� Pixel coordinates in image
�:     �ZoomX<1 � ex%=ex%+1/ZoomX-1:� Display correction

:     �ZoomY<1 � ey%=ey%+1/ZoomY-1:� Display correction

~     �(ZoomWX%<>ex%)�(ZoomWY%<>ey%) � ZoomWX%=ex%:ZoomWY%=ey%:�redraw_window(win_zoom%,�):� If changed, redraw zoom window

	    �

   �

*) � win_zoom% : � Click on zoom window

4  Ȏ but% � 7 �

>)   � 1 : �ZoomW>ZoomD � ZoomW=ZoomW-1

H   � 2 : ZoomW=ZoomD

R/   � 4 : �(ZoomW/ZoomD)<100 � ZoomW=ZoomW+1

\  �

f6  �redraw_window(win_zoom%,�):� Redraw zoom window

p) � win_file% : � Click on file window

z  �ico%=0 �

�   Ȏ but% � &7F �

�9    � 16,64 : � Drag,calculate drag box and create it

��     !block=win%:ș WGetWS%,,block:x%=block!4:y%=block!8:block!4=ico%:ș WGetIS%,,block:!block=win%:block!4=5:block!8+=x%:block!12+=y%:block!16=block!8+68:block!20=block!12+68:block!24=0:block!28=0:block!32=ScrW%:block!36=ScrH%

�,     ș WDragB%,,block:� Create drag box

�   �

�  �

�/ � win_rgbbits% : � RGB slider manipulation

ʏ  !block=win%:ș WGetWS%,,block:x%=block!4:y%=block!8:block!4=ico%:ș WGetIS%,,block:x%+=block!8+2:y%+=block!12+8:� Position in slider icon

�F  mx%=!poll:dx%=mx%-x%-8:val%=dx% � 16:�val%>8 � val%=8:� Position

ކ  �ico%=3 � col%=11:sn$="R":bit%=16 � �ico%=4 � col%=10:sn$="G":bit%=8 � col%=8:sn$="B":bit%=0:� Slider colours, names, bitoffsets

�$  � Plot slider in slider sprite

�~  ș OSSpop%,60+256,iconsprites,"slider"+sn$,0 � r0,r1,r2,r3:�0,0:ȓ Ȑ 2,8,8*16,16:�0,col%:�val%>0 � ȓ Ȑ 2,8,val%*16,16

�2  ș OSSpop%,r0,r1,r2,r3:� Restore VDU context
�  RGBbits%=(RGBbits% � � (255<<bit%)) � (val%<<bit%):!block=win%:block!4=ico%:block!8=0:block!12=0:ș WSetIS%,,block:� Update code and icon
�
�
$ 
.��dragdrop
8!ș WCreateM%,,-1:� Close menu
B,ș WGetPI%,,block:� Get pointer position
LGdropwin%=block!12:dropico%=block!16:� Window/icon where box dropped
V(save$=�string(SAVfn%):� Get leafname
`o�$SAVsn%="file_ff9" � SaveSpr$=save$:ft%=&FF9 � SaveClear$=save$:ft%=&690:� Remember leafname, set filetype
j�block!20=block!12:block!24=block!16:block!28=block!0:block!32=block!4:block!12=0:block!16=1:block!36=0:block!40=ft%:$(block+44)=save$+�0:!block=(44+�save$+4)��3
t;ș WSendMsg%,17,block,dropwin%,dropico%:� Send DataSave
~6DataSaveRef%=block!8:� Remember myref for DataSave
�0�close_window(win_file%):� Close file window
��
�
�ݤimage_type(name$,check)
�:� Examines file and returns filetype <>0 if image file
�=� If check=TRUE, contents are checked as well as filetype
�"� obj%,load%,type%,Head,id$,i%
�7ș "OS_File",5,name$ � obj%,,load%:� Read file info
��obj%<>1 � =0:� Not a file
�9�(load%>>>20)=&FFF � type%=(load%>>>8)�&FFF � type%=0
�Ȏ type% �
�� � &690,&691,&692,&693,&694,&695,&697,&698,&699,&69A,&69B,&69C,&69D,&69E,&69F,&FC9,&FF0,&FF9,&DE2,&DFA,&D58,&004 : � Recognized by filetype
  �check � =0

3  Head=�(name$):� Open file to examine contents
-  type%=0:� Not recognized anything (yet)
)  id$="":� i%=1 � 12:id$+=�(�#Head):�
(�  �id$,6)="GIF87a" � type%=&695 � �(�id$,4)="FORM") � (�id$,4)="ILBM") � type%=&693 � �id$,4)=�&59+�&A6+�&6A+�&95 � type%=&FC9
2�  �type%<>0 � �(�id$,2)="II") � (�id$,2)="MM") � type%=&FF0 � �id$,5)="Irlam" � type%=&69B � �id$,2)="BM" � type%=&69C � �(�"P1P2P3P4P5P6",�id$,2))�2)>0 � type%=&69E
<.  �type%<>0 � �id$,4)="ZVDA" � type%=&69F
FX  �type%<>0 � �#Head=&41:id$="":� i%=1 � 4:id$+=�(�#Head):�:�id$="PNTG" � type%=&694
P]  �type%<>0 � �#Head=&10:id$="":� i%=1 � 9:id$+=�(�#Head):�:�id$="MILLIPEDE" � type%=&69A
Z  �#Head:� Close image file
d�
n
=type%
x 
�ݤload(type%,name$)
�� Loads image file
�0� Returns TRUE if succesful load, else FALSE
�/InFile$=name$:InType%=type%:� Set file info
�{pos%=�name$:� pos%-=1:period=(�name$,pos%,1)="."):� (pos%=1) � period:�period � Leaf$=�name$,�name$-pos%) � Leaf$=name$
�4ș "OS_File",5,name$ � ,,,,Flen%:� File's length
�=F1%=�(name$):d%=�ib:�iptr(F1%,0):� Open file, ensure disc
�5�var("fha1",F1%):�var("ifp1",0):� REM Module info
��hour_on
�B�Percent � ș "Hourglass_Percentage",0:� Init percentage if on
�?�win_img%>0 � �close_window(win_img%):� Old image discarded
�(�Img � �invalidate_image � PreMode=�
�!�deallocate:� Free all memory
Ȏ type% �
� � &FF9 : p%=�"."+�upstring(name$),".HIP."):�p%>0 � loppath$=name$:�loppath$,p%,3)="LOP":F2%=�(loppath$):�F2%=0 � �error(-1,"I cannot find the ArVis LOP file !"):�
^  �p%=0 � Ok=�pic_ARC � �var("fha2",F2%):�var("ifp2",0):Ok=�pic_ARVIS:� What's this then ?
" � &DE2 : Ok=�pic_PROART
, � &DFA : Ok=�pic_WATFORD
6 � &D58 : Ok=�pic_RENDER
@ � &004 : Ok=�pic_AIM
J � &690 : Ok=�pic_CLEAR
T � &691 : Ok=�pic_DEGAS
^ � &692 : Ok=�pic_IMG
h � &693 : Ok=�pic_IFF
r � &694 : Ok=�pic_MAC
| � &695 : Ok=�pic_GIF
� � &697 : Ok=�pic_PCX
� � &698 : Ok=�pic_QRT
� � &699 : Ok=�pic_MTV
� � &69A : Ok=�pic_CADSOFT
� � &69B : Ok=�pic_IRLAM
� � &69C : Ok=�pic_BMP
� � &69D : Ok=�pic_TARGA
� � &69E : Ok=�pic_PBMPLUS
� � &69F : Ok=�pic_ZVDA
� � &FC9 : Ok=�pic_SUN
� � &FF0 : Ok=�pic_TIFF
��
�$Img=Ok:� Image ok if all is well

�Img �
 ImgMode%=Mode%
 �SameLeaf � SaveSpr$=Leaf$
&�
0
�hour_off
:!�iclose:� Close input file(s)
D=Img
N
X��save_sprite(out$)
b� Saves image as spritefile
lȎ SaveKind$ �
v1 � "Full" : � Full resolution sprite, no edit
�  � "Whole" : �edit_part(�,�)
�) � "Whole (scaled)" : �edit_part(�,�)
� � "Part" : �edit_part(�,�)
�( � "Part (scaled)" : �edit_part(�,�)
��
��hour_on
��SaveKind$="Full" �
�8 � Full sprite, save image with palette (optionally)
�# Out=�(out$):� Open sprite file
�- spr%=Sprite%+Sprite%!8:� Start of sprite
�, cols%=2^SprColbits%:� Colours in sprite
� �SavePal �
�"  � Save with palette included
;  �cols%=256 � ents%=64 � ents%=cols%:� Palette entries
-  extra%=ents%*8:� Extra room for palette
E  ș "OS_GBPB",1,Out,Sprite%+4,8,0:� Output part of control block
 D  !arg%=extra%+Sprite%!12:ș "OS_GBPB",2,Out,arg%,4:� New offset
*?  !arg%=extra%+!spr%:ș "OS_GBPB",2,Out,arg%,4:� New offset
4A  ș "OS_GBPB",2,Out,spr%+4,28:� Output part of sprite header
>A  !arg%=extra%+spr%!32:ș "OS_GBPB",2,Out,arg%,4:� New offset
HA  !arg%=extra%+spr%!36:ș "OS_GBPB",2,Out,arg%,4:� New offset
R9  ș "OS_GBPB",2,Out,spr%+40,4:� Output sprite's mode
\�  � c%=1 � ents%:arg%!(c%*8-8)=�readpalval(ImgPal%(c%)):arg%!(c%*8-4)=arg%!(c%*8-8):�:ș "OS_GBPB",2,Out,arg%,ents%*8:� Output palette
fF  ș "OS_GBPB",2,Out,spr%+spr%!32,(spr%!16+1)*(spr%!20+1)*4:� Data
p) � � No palette, output the whole lot
z>  ș "OS_GBPB",1,Out,Sprite%+4,Sprite%!12-4,0:� Output all
� �
�? �#Out:ș "OS_CLI","SetType "+out$+" Sprite":� Close & type
�0� � Edited part in window on screen, save it
�( �invalidate_screen:� Screen invalid
� �SavePal � pal%=1 � pal%=0
�4 ș OSSpop%,2,,out$,pal%:� Save screen in window
�/ �24,0;0;ScrW%;ScrH%;:� Reset screen window
��
�
�hour_off
��
�
�ݤpic_DEGAS
�/� Makes Atari Degas image (PI1/2/3,PC1/2/3)
3compr%=�ib:res%=�ib:� Flags, resolution (1/2/3)
7compressed=((compr%�%10000000)>0):� Compressed flag
#total%=32000:� Total data bytes
$
Ȏ res% �
., � 0 : width%=320:height%=200:colbits%=4
8, � 1 : width%=640:height%=200:colbits%=2
B, � 2 : width%=640:height%=400:colbits%=1
L�
V+colours%=2^colbits%:� Number of colours
`'�set(width%,height%,colours%,Mode%)
j>�allocate_std(width%,(width%*colbits%+7)�8,width%,0) � =�
t�new_image(0) � =�
~/�iget(F1%,dum%,32):� Read palette from file
��InPal%(0)=colbits%:� c%=0 � colours%-1:v%=dum%!(c%*2):r%=(v%�7)*32:g%=((v%>>12)�7)*32:b%=((v%>>8)�7)*32:InPal%(colours%-c%)=(r%<<16)+(g%<<8)+b%:�
�[�compressed � compr$="Run length":type$="PC"+�(res%+1) � compr$="":type$="PI"+�(res%+1)
�_�image_info("Atari Degas "+type$,width%,height%,0,colbits%,Mode%,compr$,"",Flen%-34,total%)
�~�var("comp",compressed):�var("rest",res%):�var("imgx",width%):�var("imgy",height%):�var("ifp1",&22):�unpack("DEGAS") � =�
�=�
� 
�
ݤpic_IMG
�� Makes Atari IMG image
�Kversion%=�idb:headlen%=�idb:nplanes%=�idb:� Version, headlength, planes
�Kpatlen%=�idb:pw%=�idb:ph%=�idb:� Pattern length, pixel width and height
�9width%=�idb:height%=�idb:� Width and height in pixels
�+colours%=2^nplanes%:� Number of colours
'�set(width%,height%,colours%,Mode%)

�colours%<>2 � patlen%<>2 � �error(-1,"I cannot display Atari IMG images with more than 2 colours or patternlength<>2 !"):�
>�allocate_std(width%,(width%*nplanes%+7)�8,width%,0) � =�
�new_image(0) � =�
(/�greypal(InPal%(),nplanes%,1):� Set palette
2{�image_info("Atari IMG",width%,height%,0,nplanes%,Mode%,"Several ways","",Flen%-headlen%*2,(width%*height%*nplanes%)�8)
<Y�var("imgx",width%):�var("imgy",height%):�var("ifp1",headlen%*2):�unpack("IMG") � =�
F=�
P 
Z
ݤpic_MAC
d$� Makes MacIntosh MacPaint image
n2width%=576:height%=720:colbits%=1:� Resolution
x)�set(width%,height%,2^colbits%,Mode%)
�>�allocate_std(width%,(width%*colbits%+7)�8,width%,0) � =�
��new_image(0) � =�
�/�greypal(InPal%(),colbits%,1):� Set palette
�k�image_info("MacIntosh MacPaint",width%,height%,0,colbits%,Mode%,"Run length","",Flen%-640,(576*720)�8)
�R�var("imgx",width%):�var("imgy",height%):�var("ifp1",640):�unpack("MAC") � =�
�=�
� 
�
ݤpic_IFF
�� Makes Amiga IFF image
�%bmhd=�:cmap=�:body=�:� Init flags
�2ham=�:lace=�:hires=�:halfbright=�:� Init flags
�2� Check if this is a standard IFF picture file
��form$=�istring(F1%,4):�iskip(F1%,4):form$+=�istring(F1%,4):�form$<>"FORMILBM" � �error(-1,"This screen file is not an IFF screen file !"):=�
)� � Follow BMHD,CMAP and BODY headers
9head$=�istring(F1%,4):hlen%=�iwb:startptr%=�iptr(F1%)
Ȏ head$ �
"& � "BMHD" : bmhd=�:� Bitmap header
,=       � Read picture/screen width, height, colours, etc.
6K       width%=�idb:height%=�idb:�iskip(F1%,4):planes%=�ib:�iskip(F1%,1)
@H       compressed=(�ib=1):�iskip(F1%,5):s_width%=�idb:s_height%=�idb
J> � "CAMG" : flags%=�iwb:� Get flag bits, set flags from it
T5       ham=((flags%�&800)>0):lace=((flags%�&4)>0)
^?       hires=((flags%�&8000)>0):halfbright=((flags%�&80)>0)
h- � "CMAP" : cmap=�:� Colour map (palette)
r7       paldefs%=hlen%�3:� Number of palette entries
|4       �read24pal(F1%,InPal%(),paldefs%,0,1,2,3)
�$ � "BODY" : body=�:� Screen data
�)       � Check if all parts are there
��       �bmhd � �error(-1,"IFF error : I did not find a 'BMHD' block. Cannot proceed !"):� �:=� � �cmap � �error(-1,"IFF error : I did not find a 'CMAP' block. Cannot proceed !"):� �:=�
�6       � Determine suitable Archimedes screen mode
�       �ham �
��        �set(width%,height%,256,Mode%):colbits%=12:info$="HAM (Hold And Modify)":InPal%(0)=colbits%:� c%=0 � 15:hambas%!(c%<<2)=InPal%(c%+1):�:�var("map1",hambas%)
�*        Mode%=�mode(320,s_height%,256)
�9        �allocate_std(width%,width%*4,0,width%) � =�
�o       � colours%=2^planes%:�set(width%,height%,colours%,Mode%):colbits%=planes%:InPal%(0)=planes%:info$=""
�x        �halfbright � info$="Half-bright":half%=colours%�2:� c%=1 � half%:InPal%(c%+half%)=(InPal%(c%)�&E0E0E0)>>1:�
�2        �allocate_std(width%,width%,0,0) � =�
�       �
�       �new_image(0) � =�
8       �compressed � compr$="Run length" � compr$=""
&       �colbits%>8 � ci%=2 � ci%=0
~       �image_info("Amiga IFF",width%,height%,ci%,colbits%,Mode%,compr$,info$,Flen%-�iptr(F1%),(width%*height%*planes%)�8)
&1       �ham � �var("scty",1) � �var("scty",0)
0�       �var("ifp1",�iptr(F1%)):�var("plan",planes%):�var("imgx",width%):�var("imgy",height%):�var("comp",compressed):�unpack("IFF") � =�
:�
DG�head$<>"BODY" � �iskip(F1%,hlen%-(�iptr(F1%)-startptr%)):� To next
N
� body
X=�
b 
l
ݤpic_GIF
v3� Makes GIF (Graphics Interchange Format) image
�&� g_InPal%(),Pic_ptr%(),Pic_len%()
�/� g_InPal%(256),Pic_ptr%(256),Pic_len%(256)
�3signature$=�istring(F1%,6):� Read GIF signature
�X�signature$,3)<>"GIF" � �error(-1,"This screen file is not a GIF screen file !"):=�
�$� Read data in Screen Descriptor
�.r_width%=�idl:r_height%=�idl:� Raster size
�@flags%=�ib:backgr%=�ib:�iskip(F1%,1):� Flags and back colour
�;global=((flags%�&80)>0):� Global colour map following ?
�3g_pixbits%=(flags%�7)+1:� Global bits per pixel
�:colbits%=((flags%>>4)�7)+1:� Bits of colour resolution
�
�global �
� � Read Global Colour Map
�4 �read24pal(F1%,g_InPal%(),2^g_pixbits%,0,1,2,3)
- g_InPal%(0)=g_pixbits%:� Palette entries
%� InPal%(0)=-1:� No palette found
�
 )� Scan data for pictures, make a list
*picture%=0:�
4?�skip_GIF_extension:� Skip extension blocks preceding Image
>&� Search for next Image Descriptor
HE� _%=�ib:image=(_%=�","):end=(_%=�";"):� image � end � �ieof(F1%)
R~�image � �end � �error(-1,"Warning ! GIF file is not properly terminated !"):end=�:�hour_off:�hour_on:� Read beyond file
\�image �
f" � Register picture's position
p0 picture%+=1:Pic_ptr%(picture%)=�iptr(F1%)-1
zk �iskip(F1%,8):_%=�ib:�(_%�&80)>0 � �iskip(F1%,3*2^((_%�7)+1)):� If there's a local colour map, skip it
� �GIFScan �
�0  � Determine picture data length, skip data
�2  �iskip(F1%,1):� c%=�ib:�iskip(F1%,c%):� c%=0
�6  Pic_len%(picture%)=�iptr(F1%)-Pic_ptr%(picture%)
�= � Pic_len%(picture%)=�ilen(F1%)-Pic_ptr%(picture%):end=�
� �
��
�	� end
�1pictures%=picture%:� Number of pictures found
�N�pictures%>0 � �error(-1,"I cannot find any images in this GIF file !"):=�
��GIFScan �
� �(ImageNr%>0) � (ImageNr%<=pictures%) � picture%=ImageNr% � �error(-1,"This GIF file contains "+�(pictures%)+" images. Select '1'-'"+�(pictures%)+"' in the 'Image number' submenu !"):=�
�� picture%=1
�
K�iptr(F1%,Pic_ptr%(picture%)+1):len%=Pic_len%(picture%):� Pic pos & len
 � Read Image Descriptor data
$0i_left%=�idl:i_top%=�idl:� Position in frame
.<i_width%=�idl:i_height%=�idl:flags%=�ib:� Size and flags
87local=(flags%�&80)>0:� Local colour map following ?
B<ibit=(flags%�&40)>0:� Image stored in interlaced order ?
L2l_pixbits%=(flags%�7)+1:� Local bits per pixel
V�local �
`@ pixbits%=l_pixbits%:� Read and use Local Colour Map palette
j2 �read24pal(F1%,InPal%(),2^l_pixbits%,0,1,2,3)
t+ InPal%(0)=l_pixbits%:� Palette entries
~?� pixbits%=g_pixbits%:InPal%()=g_InPal%():� Use Global data
��
�N�InPal%(0)=-1 � �error(-1,"I cannot find a palette in this GIF file !"):=�
�+colours%=2^pixbits%:� Number of colours
�=width%=i_width%:height%=i_height%:� True width and height
�'�set(width%,height%,colours%,Mode%)
�f�allocate(B_lzwtable%,32*1024) � �error(-1,"I have no room for the LZW decompression table !"):=�
�*�allocate_std(width%,0,width%,0) � =�
�;� Room needed for decompression data and de-interlacing
�d�pixbits%<=2 � rbits%=pixbits% � �pixbits%<=4 � rbits%=4 � rbits%=8:� Round up bpp to sprite bpp
�@room%=(((width%*rbits%+31)>>5)<<2)*(height%+1):� Room needed
��new_image(room%) � =�
�'�GIFScan � np$=�pictures% � np$="?"
��image_info(signature$,width%,height%,0,pixbits%,Mode%,"LZW",np$+" pics (this is "+�times(picture%)+")",len%,(height%*width%*pixbits%)�8)

+�ibit � �var("lace",1) � �var("lace",0)
Y�var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�unpack("GIF") � =�
=�
( 
2��skip_GIF_extension
<?� Skips a GIF Extension Block if present at current pointer
F� _%
P�(�ib)=�"!" �
Z' �iskip(F1%,1):� Skip function code
d; � _%=�ib:�iskip(F1%,_%):� _%=0:� Skip data byte blocks
n� �iskip(F1%,-1)
x�
��
� 
�
ݤpic_ARC
�#� Loads Archimedes sprite image
�Dpictures%=�iwl:ofirst%=�iwl:� Number of sprites, offset to first
���(ImageNr%>0) � (ImageNr%<=pictures%) � picture%=ImageNr% � �error(-1,"This sprite file contains "+�(pictures%)+" images. Select '1'-'"+�(pictures%)+"' in the 'Image number' submenu !"):=�
�3�iskip(F1%,ofirst%-8-4):� Start of first sprite
�=skip%=picture%-1:ȕ skip%>0:�iskip(F1%,�iwl-4):skip%-=1:�
�Kstart%=�iptr(F1%):�iskip(F1%,16):� Remember start, skip offset and name
�Bwords%=�iwl+1:height%=�iwl+1:� Width in words, height in lines
�3bfirst%=�iwl:blast%=�iwl:� First/last bits used
�Doimage%=�iwl:�iskip(F1%,4):sprMode%=�iwl:� Offset to image, mode
�Bcolbits%=2^�mode_var(sprMode%,9):colours%=2^colbits%:� Colours
+�colbits%=8 � ents%=64 � ents%=colours%
�oimage%<=44 �
9 �stdpal(InPal%(),colbits%):� No palette, set default
"N� �read24pal(F1%,InPal%(),ents%,1,2,3,8):InPal%(0)=colbits%:� Read palette
,� �colbits%=8 � � c%=1 � ents%:p%=InPal%(c%):InPal%(c%+64)=p% � 1<<15:InPal%(c%+128)=p% � 1<<7:InPal%(c%+192)=p% � 1<<15 � 1<<7:�
6�
@5width%=(words%*32-bfirst%-(31-blast%)) � colbits%
J��available_mode(sprMode%) � Mode%=sprMode% � Mode%=�mode(width%,height%,colours%):� Determine other mode if sprite's mode won't do
T$�set(width%,height%,colours%,_%)
^>�allocate_std(width%,(width%*colbits%+7)�8,width%,0) � =�
h�new_image(0) � =�
r��image_info("Archimedes sprite",width%,height%,0,colbits%,Mode%,"",�pictures%+" sprites (this is "+�times(picture%)+")",1,1)
|��var("ifp1",start%+oimage%):�var("imgx",width%):�var("imgy",height%):�var("wrds",words%):�var("bfir",bfirst%):�unpack("ARC") � =�
�=�
� 
�ݤpic_PROART
�� Makes ProArtisan image
�+width%=640:height%=256:� Set resolution
�"�set(width%,height%,256,Mode%)
�/�allocate_std(width%,width%,width%,0) � =�
�Croom%=(width%*height%+3)��3:� Room needed for unpack (coltable)
��new_image(room%) � =�
�Ccollen%=�iwl:comflag%=�iwl:� Length of colour table/compression
�6coltable%=SprTop%-collen%:� Space for colour table
�4�iget(F1%,coltable%,collen%):� Read colour table
�5�stdpal(InPal%(),8):� Standard 256 colour palette
]�image_info("ProArtisan",width%,height%,0,8,Mode%,"Run length","",Flen%-8,width%*height%)
��var("ifp1",�iptr(F1%)):�var("prot",coltable%):�var("comp",comflag%):�var("imgx",width%):�var("imgy",height%):�unpack("PROART") � =�
=�
& 
0ݤpic_WATFORD
:#� Makes Watford digitiser image
D+width%=512:height%=256:� Set resolution
N"�set(width%,height%,256,Mode%)
X/�allocate_std(width%,width%,width%,0) � =�
b�new_image(0) � =�
l0�greypal(InPal%(),6,1):� Palette is 64 greys
vh�image_info("Watford digitiser",width%,height%,1,6,Mode%,"Run length","",Flen%,(width%*height%*6)�8)
�T�var("imgx",width%):�var("imgy",height%):�var("ifp1",0):�unpack("WATFORD") � =�
�=�
� 
�ݤpic_RENDER
�� Makes Render Bender image
�!Mode%=�ib:� Read image's mode
���mode_var(Mode%,9)<>3 � �error(-1,"This Render Bender image was not defined in a 256 colour mode !") � width%=�mode_var(Mode%,11)+1:height%=�mode_var(Mode%,12)+1
�"�set(width%,height%,256,Mode%)
�/�allocate_std(width%,width%,width%,0) � =�
��new_image(0) � =�
�5�stdpal(InPal%(),8):� Standard 256 colour palette
�`�image_info("Render Bender",width%,height%,0,8,Mode%,"Run length","",Flen%-1,width%*height%)
�S�var("ifp1",1):�var("imgx",width%):�var("imgy",height%):�unpack("RENDER") � =�
=�
 

ݤpic_AIM
 � Makes AIM image
*+width%=256:height%=256:� Set resolution
4"�set(width%,height%,256,Mode%)
>/�allocate_std(width%,width%,width%,0) � =�
H�new_image(0) � =�
R1�greypal(InPal%(),8,1):� Palette is 256 greys
\C�image_info("AIM",width%,height%,1,8,Mode%,"","",Flen%,256*256)
fP�var("imgx",width%):�var("imgy",height%):�var("ifp1",0):�unpack("AIM") � =�
p=�
z 
�
ݤpic_SUN
�� Makes SUN image
�Zmagic%=�iwb:�magic%<>&59A66A95 � �error(-1,"This is no standard SUN raster file !"):=�
�<width%=�iwb:height%=�iwb:colbits%=�iwb:� Read resolution
�Flength%=�iwb:type%=�iwb:maptype%=�iwb:maplength%=�iwb:� Extra info
�O�type%>2 � �error(-1,"I can only read uncompressed or RLE Sun images !"):=�
�+colours%=2^colbits%:� Number of colours
�Ȏ colbits% �
�, � 1,8 : �(maptype%<>1)�(maplength%=0) �
�m             �colbits%>1 � �error(-1,"This SUN image file contains no palette ! I will use a greyscale.")
�.             �greypal(InPal%(),colbits%,1)
�s            � InPal%()=0:� i%=1 � 3:� c%=1 � maplength%�3:InPal%(c%)=(InPal%(c%)<<8)+�ib:�:�:InPal%(0)=colbits%
�            �
L  : �error(-1,"I can only read 1- and 8-bit per pixel Sun images !"):=�
�
'�set(width%,height%,colours%,Mode%)
$>�allocate_std(width%,(width%*colbits%+7)�8,width%,0) � =�
.�new_image(0) � =�
8.�type%=2 � compr$="Run length" � compr$=""
Bp�image_info("SUN",width%,height%,0,colbits%,Mode%,compr$,"",Flen%-32-maplength%,(width%*height%*colbits%)�8)
Lo�var("ifp1",32+maplength%):�var("imgx",width%):�var("imgy",height%):�var("comp",type%):�unpack("SUN") � =�
V=�
` 
j
ݤpic_PCX
t� Makes PCX image
~.man%=�ib:� Manufacture code (should be 10)
�>�man%<>10 � �error(-1,"This is no standard PCX file !"):=�
�)version%=�ib:� Version code (0/2/3/5)
�Dencoding%=�ib:� Encoding code (0-none, 1-PCX runlength encoding)
�0bits%=�ib:� Bits per 'pixel' (1-EGA, 8-MCGA)
�Hwxmin%=�idl:wymin%=�idl:wxmax%=�idl:wymax%=�idl:� Window coordinates
�Iwidth%=wxmax%-wxmin%+1:height%=wymax%-wymin%+1:� Resolution in pixels
�"�iskip(F1%,4):� Skip Hres/Vres
�InPal%()=0:� Clear palette
�B�read24pal(F1%,InPal%(),16,0,1,2,3):� Read colourmap in header
�&�iskip(F1%,1):� Skip reserved byte
�planes%=�ib:� Colourplanes
�"linelen%=�idl:� Bytes per line
�� roundlen%=((width%*bits%+7)DIV8):IFroundlen%<>linelen% THEN width%=linelen%*8/bits%:REM Correct width if window and linelength data conflict

+pixbits%=bits%*planes%:� Bits per pixel
��(pixbits%=1) � (pixbits%=2) � (pixbits%=4) � (pixbits%=8) � �error(-1,"I cannot handle "+�(2^pixbits%)+" colour EGA PCX files !"):=�
+colours%=2^pixbits%:� Number of colours
(A�iptr(F1%,�ilen(F1%)-769):code%=�ib:� Try end-769 for palette
2�code%<>12 �
<\ �allocate(B_infile%,1024) � �error(-1,"I have no room for the input file buffer !"):=�
F �var("ifp1",128):�var("totl",linelen%*planes%*height%):�var("comp",encoding%):�unpack_phase("PCX",2):� Get (packed) length
PD len%=�var("pakl"):�iptr(F1%,128+len%):� Go to end of image data
Z= code%=�ib:� Get code (12 indicates palette info follows)
d�
n9�code%=12 � �read24pal(F1%,InPal%(),colours%,0,1,2,3)
x.grey=�:� Flag to indicate forced greyscale
���bits%=8 � �code%<>12 � �error(-1,"I cannot find the palette in this 256-colour PCX image ! I will use a greyscale."):grey=�
�}�grey � �Ǝ(InPal%())=0 � �error(-1,"I cannot find a decent palette in this PCX image ! I will use a greyscale."):grey=�
�>�grey � �greypal(InPal%(),pixbits%,1) � InPal%(0)=pixbits%
�y�(pixbits%=1)�(pixbits%=8) � size%=0 � size%=(width%*pixbits%+7)�8:� Intermediate pixel data buffer for 'planed' data
�'�set(width%,height%,colours%,Mode%)
�B�allocate_std(width%,(width%*pixbits%+7)�8,width%,size%) � =�
��new_image(0) � =�
�2�encoding%=1 � compr$="Run length" � compr$=""
�f�image_info("PCX",width%,height%,0,pixbits%,Mode%,compr$,"",Flen%-128,(width%*height%*pixbits%)�8)
��var("ifp1",128):�var("imgx",width%):�var("imgy",height%):�var("comp",encoding%):�var("line",linelen%):�unpack("PCX") � =�
�=�
� 
�ݤpic_TIFF
� Makes TIFF image
(headbytes%=2:� Count bytes in header
-id$=�istring(F1%,2):� TIFF identification
"Ȏ id$ �
,5 � "II" : Ttype%=0:� Set low-to-high type of data
65 � "MM" : Ttype%=1:� Set high-to-low type of data
@2  : �error(-1,"This is not a TIFF file !"):=�
J�
T+version%=�tiff(3):� TIFF version number
^P�version%<>42 � �error(-1,"I cannot handle this TIFF version's images !"):=�
h+offFIFD%=�tiff(4):� Offset to first IFD
r)�iptr(F1%,offFIFD%):� Go to first IFD
|-entries%=�tiff(3):� Number of IFD entries
�%InPal%()=0:pal=�:� No palette yet
�qrowsperstrip%=-1:bits%=1:compression%=1:planar%=1:fillorder%=1:greyunit%=3:pixsamples%=1:softw$="":� Defaults
�� e%=1 � entries%
�@tag%=�tiff(3):type%=�tiff(3):length%=�tiff(4):� Tag and info
���length%>1 � value%=�tiff(4) � �type%=1 � value%=�tiff(1):�iskip(F1%,3) � �type%=3 � value%=�tiff(3):�iskip(F1%,2) � value%=�tiff(4):� Read value
�8cptr%=�iptr(F1%):� Remember current position in file
�
Ȏ tag% �
� � 256 : width%=value%
� � 257 : height%=value%
� � 258 : �length%=1 �
�             bits%=value%
�n            � �iptr(F1%,value%):p%=�tiff(type%):s%=2:ok=�:ȕ s%<=length%:ok=ok � (�tiff(type%)=p%):s%+=1:�
�\             �ok � �error(-1,"I cannot handle unequal bits per sample plane TIFF !"):=�
 2             �iptr(F1%,cptr%):bits%=p%*length%
             �
   � 259 : compression%=value%
 &  � 262 : photometric%=value%
 0 � 266 : fillorder%=value%
 :l � 273 : �allocate(B_stroff%,4+length%*4) � �error(-1,"I have no room for the TIFF strip offsets !"):=�
 D�            stroff%=Buffer%(B_stroff%,0):!stroff%=length%:�length%=1 � stroff%!4=value% � �iptr(F1%,value%):p%=stroff%+4:� s%=1 � length%:!p%=�tiff(type%):p%+=4:�:�iptr(F1%,cptr%)
 N � 277 : pixsamples%=value%
 X! � 278 : rowsperstrip%=value%
 b � 284 : planar%=value%
 l � 290 : greyunit%=value%
 v� � 291 : �iptr(F1%,value%):div%=2*10^greyunit%:� g%=1 � length%:c%=�tiff(type%)*255:i%=c%/div%:InPal%(g%)=i%+(i%<<8)+(i%<<16):�:pal=�:�iptr(F1%,cptr%)
 �C � 305 : �iptr(F1%,value%):softw$=�tiff(type%):�iptr(F1%,cptr%)
 �� � 320 : �iptr(F1%,value%):InPal%()=0:� p%=1 � 3:� c%=1 � length%�3:v%=�tiff(type%):InPal%(c%)=(InPal%(c%)<<8)+(v%>>8):�:�:pal=�:�iptr(F1%,cptr%)
 ��
 ��
 �-�rowsperstrip%=-1 � rowsperstrip%=height%
 �Ȏ compression% �
 � � 1 : compr$=""
 �  � 32773 : compr$="Packbits"
 � � 5 : compr$="LZW"
 �P  : �error(-1,"I cannot handle TIFF compression #"+�(compression%)+" !"):=�
 ��
 ��((pixsamples%=1)�((bits%=1)�(bits%=2)�(bits%=4)�(bits%=8))) � ((bits%=24)�(pixsamples%=3)) � �error(-1,"I can only handle TIFF images with 1,2,4,8 or 24 bits per pixel !"):=�
 �T�planar%<>1 � �error(-1,"I cannot handle TIFF images with multiple planes !"):=�
!pInPal%(0)=bits%:�pal � �bits%>8 � �photometric%=0 � �greypal(InPal%(),bits%,-1) � �greypal(InPal%(),bits%,1)
!p�bits%=24 � colours%=256:size1%=width%*4:size2%=0 � colours%=2^bits%:size1%=(width%*bits%+7)�8:size2%=width%
!'�set(width%,height%,colours%,Mode%)
! Ȏ compression% �
!*$ � 1 : size3%=0:� No temp buffer
!4. � 32773 : size3%=1024:� Small temp buffer
!>G � 5 : size3%=((width%*bits%+7)�8)*rowsperstrip%:� Temp for 1 strip
!Hp          �allocate(B_lzwtable%,32*1024) � �error(-1,"I have no room for the LZW decompression table !"):=�
!R�
!\4�allocate_std(width%,size1%,size2%,size3%) � =�
!f�new_image(0) � =�
!p>�bits%=24 � code%=2 � �photometric%<=1 � code%=1 � code%=0
!z/�softw$<>"" � softw$=�"Made by "+softw$,25)
!�p�image_info("TIFF",width%,height%,code%,bits%,Mode%,compr$,softw$,Flen%-headbytes%,(width%*height%*bits%)�8)
!���var("ifp1",stroff%!4):�var("imgx",width%):�var("imgy",height%):�var("rops",rowsperstrip%):�var("bito",fillorder%):�var("comp",compression%):�unpack("TIFF") � =�
!�=�
!� 
!�ݤtiff(type%)
!�� Returns tiff data type
!�� i$,b%
!�Ȏ type% �
!� � 1 : headbytes%+=1:=�ib
!�G � 2 : i$="":b%=�ib:ȕ b%<>0:i$+=�b%:b%=�ib:�:headbytes%+=�i$+1:=i$
!�2 � 3 : headbytes%+=2:�Ttype%=0 � =�idl � =�idb
!�2 � 4 : headbytes%+=4:�Ttype%=0 � =�iwl � =�iwb
!�
 � 5 : =0
"�
"=0
" 
"$
ݤpic_QRT
".� Makes QRT image
"8.width%=�idl:height%=�idl:� Read resolution
"B"�set(width%,height%,256,Mode%)
"L3�allocate_std(width%,width%*4,0,width%*3) � =�
"V�new_image(0) � =�
"`.InPal%(0)=24:� No palette, pure 24-bit RGB
"j>�image_info("QRT RAW",width%,height%,2,24,Mode%,"","",1,1)
"tP�var("ifp1",4):�var("imgx",width%):�var("imgy",height%):�unpack("QRT") � =�
"~=�
"� 
"�ݤpic_ARVIS
"�� Makes ArVis image
"�g�iptr(F1%,4):�iptr(F1%,�iwl-4):�iskip(F1%,16):width%=�iwl*4+4:height%=�iwl+1:� Get width and height
"���iskip(F1%,8):�iskip(F1%,�iwl-36):�iptr(F2%,4):�iptr(F2%,�iwlf(F2%)-4):�iskip(F2%,32):�iskip(F2%,�iwlf(F2%)-36):� Go to sprite data
"�-colbits%=15:colours%=2^colbits%:� Colours
"�"�set(width%,height%,256,Mode%)
"�3�allocate_std(width%,width%*4,0,width%*2) � =�
"��new_image(0) � =�
"�.InPal%(0)=15:� No palette, pure 15-bit RGB
"�<�image_info("ArVis",width%,height%,2,15,Mode%,"","",1,1)
"�s�var("ifp1",�iptr(F1%)):�var("ifp2",�iptr(F2%)):�var("imgx",width%):�var("imgy",height%):�unpack("ARVIS") � =�
#=�
#
 
#ݤpic_CLEAR
#� Makes Clear image
#(?maker$=�istring(F1%,-1):version%=�iwl:� Creator information
#2<width%=�iwl:height%=�iwl:bits%=�iwl:� Width, height, bpp
#<T�bits%<=8 � colbits%=bits%:�read24pal(F1%,InPal%(),2^bits%,0,1,2,3) � colbits%=8
#F$InPal%(0)=bits%:� Bits per pixel
#P-�bits%<=8 � size%=width% � size%=width%*4
#Z)�set(width%,height%,2^colbits%,Mode%)
#d)�allocate_std(width%,size%,0,0) � =�
#n�new_image(0) � =�
#x}�image_info("Clear",width%,height%,code%,bits%,Mode%,"","by "+maker$+" "+�(version%�100)+"."+�"0"+�(version%�100),2),1,1)
#�[�var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�unpack("CLEAR") � =�
#�=�
#� 
#�
ݤpic_MTV
#�� Makes MTV image
#�9size$=�istring(F1%,-1):� String containing resolution
#�=width%=�size$:height%=�(�size$,�size$," "))):� Resolution
#�"�set(width%,height%,256,Mode%)
#�,�allocate_std(width%,width%*4,0,0) � =�
#��new_image(0) � =�
#�.InPal%(0)=24:� No palette, pure 24-bit RGB
#�:�image_info("MTV",width%,height%,2,24,Mode%,"","",1,1)
#�Y�var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�unpack("MTV") � =�
$=�
$ 
$ݤpic_CADSOFT
$"� Makes Cadsoft image
$,B�iptr(F1%,9):width%=(�idl+2)/2:height%=(�idl+2)/2:� Resolution
$65�iptr(F1%,26):compression%=�ib:� Compression code
$@{�iptr(F1%,512):InPal%()=0:InPal%(0)=8:� rgb%=16 � 0 � -8:� c%=1 � 256:InPal%(c%)=InPal%(c%) � (�ib<<rgb%):�:�:� Palette
$J"�set(width%,height%,256,Mode%)
$T*�allocate_std(width%,width%,0,0) � =�
$^�new_image(0) � =�
$h5�compression%=2 � compr$="Run length" � compr$=""
$rW�image_info("CadSoft",width%,height%,0,8,Mode%,compr$,"",Flen%-&600,width%*height%)
$|q�var("ifp1",&600):�var("imgx",width%):�var("imgy",height%):�var("comp",compression%):�unpack("CADSOFT") � =�
$�=�
$� 
$�ݤpic_IRLAM
$�� Makes Irlam image
$�Did$=�istring(F1%,-1):p%=�id$,":"):� String containing image info
$�3width%=��id$,p%+1):height%=��id$,p%+2+��width%)
$�"�set(width%,height%,256,Mode%)
$�3�allocate_std(width%,width%*4,0,width%*3) � =�
$��new_image(0) � =�
$�.InPal%(0)=24:� No palette, pure 24-bit RGB
$�<�image_info("Irlam",width%,height%,2,24,Mode%,"","",1,1)
$�[�var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�unpack("IRLAM") � =�
$�=�
%
%
ݤpic_BMP
%!� Makes BMP (Windows 3) image
%&1�iptr(F1%,18):width%=�iwl:height%=�iwl:� Size
%0/�iptr(F1%,28):colbits%=�ib:� Bits per pixel
%:��(colbits%=1)�(colbits%=2)�(colbits%=4)�(colbits%=8) � �error(-1,"I can only handle 1,2,4 or 8 bit per pixel BMP images ! This is "+�colbits%+" bpp."):=�
%D9rowbytes%=(colbits%*width%+7)�8:� Bytes per pixel row
%N=�iptr(F1%,54):�read24pal(F1%,InPal%(),2^colbits%,2,1,0,4)
%XInPal%(0)=colbits%
%b)�set(width%,height%,2^colbits%,Mode%)
%l2�allocate_std(width%,rowbytes%,width%,0) � =�
%v�new_image(0) � =�
%�J�image_info("Windows 3 BMP",width%,height%,0,colbits%,Mode%,"","",1,1)
%�Y�var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�unpack("BMP") � =�
%�=�
%�
%�ݤpic_TARGA
%�"� Makes Truevision TARGA image
%�Didlen%=�ib:colmaptype%=�ib:� Length of ID string, colourmap type
%�imagetype%=�ib:� Image type
%�?index%=�idl:length%=�idl:� Colourmap first index & #indices
%�#cmapsize%=�ib:� Bits per colour
%�&xorg%=�idl:xorg%=�idl:� X/Y origin
%�,width%=�idl:height%=�idl:� Size of image
%�4pixbits%=�ib:flags%=�ib:� Bits per pixel & flags
&'�iskip(F1%,idlen%):� Skip ID string
&Efattr%=flags%�&0F:flips%=(flags%�&30)>>4:� Attributes, flip-flags
&-fleave%=(flags%�&C0)>>6:� Interleave code
& b�pixbits%>8 � �colmaptype%<>0 � �error(-1,"I cannot handle >8 bit TARGA with colourmaps !"):=�
&*D�fleave%<>0 � �error(-1,"I cannot handle interlaced TARGA !"):=�
&4 InPal%()=0:� Clear colourmap
&>�colmaptype%<>0 �
&H# � c%=index%+1 � index%+length%
&R Ȏ cmapsize% �
&\1  � 8 : i%=�ib:InPal%(c%)=i% � i%<<8 � i%<<16
&fO  � 15,16 : i%=�idl:InPal%(c%)=((i%�&7C00)<<9)+((i%�&3E0)<<6)+((i%�&1F)<<3)
&p  � 24 : InPal%(c%)=�itl
&z&  � 32 : InPal%(c%)=�iwl � &FFFFFF
&� �
&� �
&�� �greypal(InPal%(),8,1)
&��
&�'InPal%(0)=pixbits%:� Bits per pixel
&�?rle=(imagetype%>=9)�(imagetype%<=11):� Run length encoded ?
&�l�pixbits%>8 � code%=2:size2%=width%*4 � size2%=width%:�(cmapsize%=8)�(colmaptype%=0) � code%=1 � code%=0
&�"�set(width%,height%,256,Mode%)
&�/�allocate_std(width%,size2%,0,size2%) � =�
&��new_image(room%) � =�
&�*�rle � compr$="Run length" � compr$=""
&�~�image_info("Truevision TARGA",width%,height%,code%,pixbits%,Mode%,compr$,"",Flen%-�iptr(F1%),(width%*height%*pixbits%)�8)
&���var("ordr",flips%):�var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�var("comp",rle):�unpack("TARGA") � =�
'=�
'
'ݤpic_PBMPLUS
'$� Makes PBMPLUS image
'.3type$=�istring(F1%,2):�pbm_white:� PBMPLUS type
'8$type%=�(�type$,2)):� Type number
'B=width%=�pbm_decval:height%=�pbm_decval:� Width and height
'LȎ type% �
'V0 � 1,4 : code%=1:maxval%=-1:bpp%=1:� Bilevel
'`A  �greypal(InPal%(),1,-1):� Bilevel palette (0=white,1=black)
'j+ � 2,5 : maxval%=�pbm_decval:� Max grey
'tJ  �maxval%>255 � �error(-1,"I cannot read >256-level grey PBMPLUS"):=�
'~>  code%=1:bpp%=�colstobpp(1+maxval%):� Grey, calculate bpp
'�q  InPal%(0)=bpp%:step=255/maxval%:v=0:� c%=0 � maxval%:v%=�v:InPal%(c%+1)=v%�v%<<8�v%<<16:v+=step:�:� Palette
'�, � 3,6 : maxval%=�pbm_decval:� Max r/g/b
'�I  �maxval%>255 � �error(-1,"I cannot read >256-level RGB PBMPLUS"):=�
'�.  code%=2:bpc%=�colstobpp(1+maxval%):� RGB
'�$  �bpc%<3 � bpp%=9 � bpp%=3*bpc%
'�[  InPal%(0)=bpp%:step=255/maxval%:v=0:� c%=0 � maxval%:pbmint%?c%=�v:v+=step:�:� Intmap
'��
'�T�type%<=3 � �pbm_white � c%=�ib:�(c%=32)�(c%=9)�(c%=10)�(c%=13) � �iskip(F1%,-1)
'�L�bpp%>8 � rowbytes%=4*width%:colbits%=8 � rowbytes%=width%:colbits%=bpp%
'�)�set(width%,height%,2^colbits%,Mode%)
'�'�type%=4 � size1%=width% � size1%=0
'�2�allocate_std(width%,rowbytes%,size1%,0) � =�
(�new_image(0) � =�
(
K�image_info("PBMPLUS "+type$,width%,height%,code%,bpp%,Mode%,"","",1,1)
(��var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�var("scty",type%):�var("map1",pbmint%):�unpack("PBMPLUS") � =�
(=�
((
(2��pbm_white
(<+� Skips PBMPLUS whitespace and comments
(F� c%,ok
(Pok=�:� Exit flag
(Z�
(d0� c%=�ib:� �((c%=32)�(c%=9)�(c%=13)�(c%=10))
(n0�c%=�"#" � � c%=�ib:� (c%=13)�(c%=10) � ok=�
(x� ok
(�0�iskip(F1%,-1):� Step back to last non-white
(��
(�
(�ݤpbm_decval
(�9� Skips whitespace, returns decimal value for PBMPLUS
(�� c%,v$
(��pbm_white
(�c%=�ib:v$="":� Init
(�-ȕ (c%>=�"0")�(c%<=�"9"):v$+=�c%:c%=�ib:�
(�=�v$
(� 
(�ݤpic_ZVDA
(�4� Makes Zeridajh Video Digitiser Animation image
)mid$=�istring(F1%,4):�id$<>"ZVDA" � �error(-1,"This is not a Zeridajh Video Digitiser Animation file !"):�
)>version%=�iwl:mode%=�iwl:� Version of maker & mode of pics
)+width%=�iwl:height%=�iwl:� Size of pics
)"?pictures%=�iwl:off1%=�iwl:� Number of pics, offset to first
),��(ImageNr%>0) � (ImageNr%<=pictures%) � picture%=ImageNr% � �error(-1,"This ZVDA file contains "+�(pictures%)+" images. Select '1'-'"+�(pictures%)+"' in the 'Image number' submenu !"):=�
)6$compr%=�iwl:� Compression method
)@Q�compr%<>1 � �error(-1,"I only know Bitmap compression, no #"+�(compr%)+" !")
)J,�iptr(F1%,off1%):� Skip to first picture
)T>s%=1:ȕ s%<picture%:�iskip(F1%,�iwl-4):s%+=1:�:� Go to pic
)^*complen%=�iwl:� Length of picture data
)h2colbits%=2^�mode_var(mode%,9):� Bits per pixel
)r1�greypal(InPal%(),colbits%,1):� Pics are grey
)|?rowbytes%=((colbits%*width%+63)�64)*8:� Bytes per pixel row
)�)�set(width%,height%,2^colbits%,Mode%)
)�5bitmaplen%=height%*rowbytes%�8:� Length of bitmap
)�;�allocate_std(width%,rowbytes%,width%,bitmaplen%) � =�
)��new_image(0) � =�
)���image_info("Zeridajh VDA",width%,height%,1,colbits%,Mode%,"Bitmap",�pictures%+" images (this is "+�times(picture%)+")",complen%,rowbytes%*height%)
)�p�var("ifp1",�iptr(F1%)):�var("imgx",width%):�var("imgy",height%):�var("maxc",complen%):�unpack("ZVDA") � =�
)�=�
)�
)�Y��image_info(type$,width%,height%,code%,colbits%,mode%,compr$,info$,datalen%,piclen%)
)�&� Sets information about the image
)�� factor%,w%,h%,c%,i%,id$
)�FImgW%=width%:ImgH%=height%:ImgBits%=colbits%:� Register resolution
)�$IMIfn%=Leaf$:$IMIit%=type$
*+�info$="" � $IMIin%="-" � $IMIin%=info$
*$IMIif%=�Flen%+" bytes"
*n�compr$="" � $IMIco%="None (0%)" � factor%=100-�(100*(datalen%/piclen%)):$IMIco%=compr$+" ("+�factor%+"%)"
*&,$IMIwh%=�width%+" x "+�height%+" pixels"
*0_�(width%<>SprW%)�(height%<>SprH%) � $IMIsc%="to "+�SprW%+" x "+�SprH% � $IMIsc%="Full size"
*:?$IMIbp%=�(colbits%)+"-bit "+�"colourgrey  RGB",1+code%*6,6)
*DJ�mode_info(mode%,w%,h%,c%):$IMIsm%=�mode%+" ("+�w%+"x"+�h%+"x"+�c%+")"
*N�
*X 
*b��new_image_window
*lA� Creates new image window of appropiate size in current mode
*v� w%
*�$�autozoom:� Auto zoom if enabled
*�@!block=win_img%:ș WGetWI%,,block:� Read window's definition
*�=!dum%=win_img%:ș WDeleteW%,,dum%:� Delete old definition
*�uw%=block+4:w%!40=0:w%!44=0:w%!48=�sprW*ZoomX:w%!52=�sprH*ZoomY:$IMWtt%=�image_title:� Rewrite work area and title
*�3ș WCreateW%,,w% � win_img%:� Create new window
*�#�Img � �open_window(win_img%,0)
*��
*� 
*�ݤimage_title
*�:� Returns image window title depending on zoom factors
*�� title$
*�title$="Image":� Base
*�K�ZoomX<1 � title$+=" x/"+�(1/ZoomX) � �ZoomX>1 � title$+=" x*"+�(ZoomX)
+K�ZoomY<1 � title$+=" y/"+�(1/ZoomY) � �ZoomY>1 � title$+=" y*"+�(ZoomY)
+=title$+" "+InFile$
+ 
+ ��set(w%,h%,c%,� m%)
+*K� Some presetting : determines mode, sets deferred scaling, sets outpix
+4A� Given are width, height, colours of image, returned is mode
+>2m%=�mode(w%,h%,c%):� Return most suitable mode
+H!OutMode%=m%:� Set output mode
+R@�DivIsInX � XDiv%=w%:� Select Xin as XDiv (deferred scaling)
+\$�DivIsInY � YDiv%=h%:� Idem YDiv
+fF�XMul%<=XDiv% � OutX%=w%*XMul%/XDiv% � OutX%=�ceil(w%*XMul%/XDiv%)
+pF�YMul%<=YDiv% � OutY%=h%*YMul%/YDiv% � OutY%=�ceil(h%*YMul%/YDiv%)
+z�
+� 
+�ݤnew_image(room%)
+�� Allocates image sprite
+�A� There are at least room% bytes from sprite start to 'lomem'
+�-� Returns TRUE if all is well, else FALSE
+�?� colbits%,bits%,bitsrot%,words%,wordsrot%,sizeup%,sizerot%
+�$� datasize%,sptr%,sprdoff%,size%
+�Gxres%=OutX%:yres%=OutY%:mode%=OutMode%:� Output image size and mode
+�`�(yres%<=0)�(xres%<=0) � �error(-1,"There are no pixels left with the current scaling !"):=�
+�2colbits%=2^�mode_var(mode%,9):� Bits per pixel
+�?bits%=xres%*colbits%:bitsrot%=yres%*colbits%:� Bits per row
+�Cwords%=(bits%+31)>>5:wordsrot%=(bitsrot%+31)>>5:� Words per row
+�Fsizeup%=words%*yres%<<2:sizerot%=wordsrot%*xres%<<2:� Sprite sizes
,Kdatasize%=�max(sizeup%,sizerot%):� Maximum sprite size (normal/rotated)
,8datasize%=�max(datasize%,room%):� More room needed ?
,X�allocate(B_area%,16) � �error(-1,"I have no room for the sprite area header !"):=�
,$:sprdoff%=44:� Offset to sprite data/sprite header size
,.a�allocate(B_sprite%,sprdoff%) � �error(-1,"I have no room for the image sprite header !"):=�
,8��allocate(B_sprimg%,datasize%) � �error(-1,"I have no room to store this image ! I need at least "+�((Short%+1023)�1024)+"K more !"):=�
,B6�datasize%<room% � size%=room%-datasize% � size%=0
,L��allocate(B_imgtop%,size%) � �error(-1,"I have no room to process this image ! I need at least "+�((Short%+1023)�1024)+"K more !"):=�
,VJSprTop%=Buffer%(B_imgtop%,0)+Buffer%(B_imgtop%,1):� End of sprite room
,`�Sprite%=Buffer%(B_area%,0):!Sprite%=Buffer%(B_area%,1)+Buffer%(B_sprite%,1)+Buffer%(B_sprimg%,1):Sprite%!4=1:Sprite%!8=16:Sprite%!12=Sprite%!8+sprdoff%+sizeup%:� Init sprite area
,j0sptr%=Buffer%(B_sprite%,0):� Start of sprite
,t4SprEnd%=sptr%+sprdoff%+datasize%:� End of sprite
,~3!sptr%=sprdoff%+sizeup%:� Offset to next sprite
,�0$(sptr%+4)=ImageSpr$+�12,�0):� Sprite's name
,�(sptr%!16=words%-1:� Width in words-1
,�,sptr%!20=yres%-1:� Height in scanlines-1
,�=sptr%!24=0:sptr%!28=31-(words%*32-bits%):� Start/end bits
,�Dsptr%!32=sprdoff%:sptr%!36=sptr%!32:� Offset to sprite data/mask
,�#sptr%!40=mode%:� Mode of sprite
,�Hș "Translator_WriteWords",sptr%+sprdoff%,0,sizeup%>>2:� Wipe sprite
,�(�var("rowl",words%<<2):� Module info
,�'�var("outb",colbits%):� Module info
,�-�var("spri",sptr%+sptr%!32):� Module info
,�JSprColbits%=colbits%:SprPtr%=sptr%:SprMode%=mode%:� Global sprite info
,�DSprW%=xres%:SprH%=yres%:� Remember sprite's resolution in pixels
-=�
-
 
-��deallocate
-� Deallocates all buffers
-(&Buffer%()=0:� Wipe all buffer info
-2GStore%=�align(Heap%):Free%=HeapSize%:� Deallocate all storage space
-<�
-F 
-Pݤallocate(nr%,bytes%)
-Z@� Allocates bytes% bytes to buffer number nr% (word-aligned)
-d+� Returns TRUE if succesful, else FALSE
-nq�(bytes%<0)�(bytes%>16*1024*1024) � �error(-1,"Are you NUTS ?"):Short%=999999*1024:=�:� Enormous amount asked
-x&bytes%=�align(bytes%):� Word-align
-�*�Free%<bytes% � Short%=bytes%-Free%:=�
-�ABuffer%(nr%,0)=Store%:Buffer%(nr%,1)=bytes%:� Allocate buffer
-�:Store%+=bytes%:Free%-=bytes%:� Deallocate storage used
-�=�
-� 
-�4ݤallocate_std(width%,pixbuf1%,pixval%,pixbuf2%)
-�6� Allocates standard buffers (pixel buffers, etc.)
-�� times%
-�Z�allocate(B_pixbuf1%,pixbuf1%) � �error(-1,"I have no room for pixel buffer #1 !"):=�
-�]�allocate(B_pixval%,pixval%) � �error(-1,"I have no room for a pixel value buffer !"):=�
-�Z�allocate(B_pixbuf2%,pixbuf2%) � �error(-1,"I have no room for pixel buffer #2 !"):=�
-��XMul%<>XDiv% �
-�� �allocate(B_pixscaled%,�max(pixbuf1%,pixval%)*�ceil(XMul%/XDiv%)) � �error(-1,"I have no room for the scaled pixel buffer !"):=�
.�
.�ErrSpread=2 �
.& �BlackWhite � times%=1 � times%=4
."� �allocate(B_fserr%,(width%+2)*times%*4*�ceil(XMul%/XDiv%)) � �error(-1,"I have no room for Floyd Steinberg error spreading !"):=�
.,�
.6=�
.@ 
.J
��hour_on
.T� Turns hourglass on
.^ș "Hourglass_On"
.h�
.r 
.|��hour_off
.�� Turns hourglass off
.�ș "Hourglass_Off"
.��
.� 
.���edit_part(size,part)
.�7� Edits image size and part (if enabled with flags)
.�C� Returns with (scaled) image in graphics window ready for save
.�A� _%,ox%,oy%,x%,y%,but%,x1%,x2%,y1%,y2%,xs%,ys%,sizex%,sizey%
.�"� sprW%,sprH%,ptr$,r0,r1,r2,r3
.�!pointer=512:pointer!4=0:pointer!8=16:pointer!12=16:ptr$="ptr":ș "OS_SpriteOp",15+256,pointer,ptr$,0,32,32,8:� Initialise pointer sprite area
.�ș OSSpop%,60+256,pointer,ptr$,0 � r0,r1,r2,r3:� 0,124:�0,3:�1,0,-32:�0,0,32:�1,40,0:�0,-40,0:�1,60,-30:�0,-60,26:�1,60,-30:ș OSSpop%,r0,r1,r2,r3:� Plot arrow in pointer sprite
.�?�24,0;0;ScrW%;ScrH%;:� Whole screen window for image sprite
.�:sprW%=�sprW:sprH%=�sprH:� True OS size of image sprite
/,xs%=2^�mode_var(�,4):� X coordinate step
/,ys%=2^�mode_var(�,5):� Y coordinate step
/>�ScrW%>sprW% � sizex%=sprW% � sizex%=ScrW%:� Initial width
/&?�ScrH%>sprH% � sizey%=sprH% � sizey%=ScrH%:� Initial height
/0K!arg%=sizex%:arg%!4=sizey%:arg%!8=sprW%:arg%!12=sprH%:� Initial scaling
/:/�:�plot_image(0,0,0,arg%):� Initial display
/D�size �
/N? ȗ ȓ 0,0,ScrW%-xs%,ScrH%-ys%:� Restrict pointer to screen
/X6 ox%=sizex%-xs%:oy%=sizey%-ys%:� 'Old' coordinates
/b0 ȗ � ox%,oy%:� Pointer to upper left corner
/l? � �rmouse(_%,_%,but%):� but%=0:� Wait for buttons released
/v( � �value_ptr(sizex%�xs%,sizey%�ys%)
/�: � �rmouse(x%,y%,but%):� (x%<>ox%)�(y%<>oy%)�(but%<>0)
/� �but%=0 �
/�>  �oy%>y% � � 0,y%:� 103,�max(x%,ox%),oy%:� Wipe Y-portion
/�>  �ox%>x% � � x%,0:� 103,ox%,�max(y%,oy%):� Wipe X-portion
/�:  sizex%=x%+xs%:sizey%=y%+ys%:� True scaled image size
/�;  !arg%=sizex%:arg%!4=sizey%:arg%!8=sprW%:arg%!12=sprH%
/�  �plot_image(0,0,0,arg%)
/�.  ox%=x%:oy%=y%:� Remember old coordinates
/� �
/� � but%<>0
/�6 ș "OS_CLI","Pointer 1":� Restore default pointer
/��
/��part �
0> � �mouse(_%,_%,but%):� but%=0:� Wait for buttons released
0@ ȗ ȓ 0,0,sizex%-xs%,sizey%-ys%:� Restrict pointer to image
0< ȗ � 0,sizey%-ys%:� Mouse to top right of scaled sprite
0 8 � �rmouse(x1%,y2%,but%):�value_ptr(x1%�xs%,y2%�ys%)
0*# � but%<>0:� Get top left point
04> � �mouse(_%,_%,but%):� but%=0:� Wait for buttons released
0>, x2%=x1%:y1%=y2%:� Initial window corner
0H> ȗ ȓ x1%,0,sizex%-xs%-x1%,y2%:� Trap mouse to down/right
0R3 ș WSetCol%,(4<<4)+0:� Invert colour on screen
0\A ox%=x2%:oy%=y1%:ȓ x1%,y1%,x2%-x1%,y2%-y1%:� First rectangle
0f � �rmouse(x2%,y1%,but%)
0p0 �value_ptr((x2%-x1%)�xs%+1,(y2%-y1%)�ys%+1)
0z �(x2%<>ox%)�(y1%<>oy%) �
0�5  ȓ x1%,oy%,ox%-x1%,y2%-oy%:� Wipe old rectangle
0�0  ȓ x1%,y1%,x2%-x1%,y2%-y1%:� New rectangle
0�*  ox%=x2%:oy%=y1%:� Old mouse position
0� �
0�* � but%<>0:� Until second button press
0�B ȗ ȓ 0,0,ScrW%,ScrH%:� Reset mouse rectangle to whole screen
0�0 ȓ x1%,y1%,x2%-x1%,y2%-y1%:� Wipe rectangle
0�" � 0,0:� Wipe surrounding area
0�: _%=x1%-xs%:�_%>=0 � � 103,_%,1024-ys% � � _%,1024-ys%
0�= _%=y2%+ys%:�_%<ScrH% � � 103,1280-xs%,_% � � 1280-xs%,_%
0�/ _%=x2%+xs%:�_%<ScrW% � � 103,_%,0 � � _%,0
0�8 _%=y1%-ys%:�_%>=0 � � 103,x1%-xs%,_% � � x1%-xs%,_%
0�6 ș "OS_CLI","Pointer 1":� Restore default pointer
1E� x1%=0:y1%=0:x2%=sizex%-xs%:y2%=sizey%-ys%:� Whole sprite window
1�
1&�24,x1%;y1%;x2%;y2%;:� Clip window
1$�
1. 
18��rmouse(� x%,� y%,� but%)
1BJ� Returns mouse coordinates and buttons, rounded to exact pixel coords
1L$�mouse(x%,y%,but%):� Mouse state
1V*x%-=x% � xs%:y%-=y% � ys%:� Round down
1`�
1j 
1t��value_ptr(val1%,val2%)
1~� Puts values in pointer
1�Eș OSSpop%,60+256,pointer,ptr$,0 � r0,r1,r2,r3:� Output to sprite
1�w�129:�2:�0,2);�"   "+�val1%,4)'�"   "+�val2%,4);:ș OSSpop%,36+256,pointer,ptr$,%0000010:� Print values and define
1�5ș OSSpop%,r0,r1,r2,r3:� Restore output to screen
1��
1� 
1���main_menu
1�� Creates main menu
1�� x%,y%
1�!�setmenu:� Set flags and data
1�3�mouse(x%,y%,_%):�From%=2 � y%+=24 � y%=96+6*40
1�0menu1=menumain%:ș WCreateM%,,menu1,x%-64,y%
1��
2 
2

��setmenu
25� Writes current flags and icon data to main menu
2
� Main
2(�ifl(ipTrImageinfo,0,�Img)
22�ifl(ipTrManipulate,0,�Img)
2<�ifl(ipTrExamine,0,�Img)
2F� Main.Pop up
2P!�ifl(ipPoAutomode,AutoMode,0)
2Z#�ifl(ipPoAutopalette,AutoPal,0)
2d!�ifl(ipPoAutozoom,AutoZoom,0)
2n!�ifl(ipPoViewmode,ViewMode,0)
2x+�ifl(ipPoModeset,(ModeSet>0),�AutoMode)
2�� Main.Pop up.Mode set
2� �ifl(ipMoNone,(ModeSet=0),0)
2�"�ifl(ipMoNormal,(ModeSet=1),0)
2�%�ifl(ipMoMultisync,(ModeSet=2),0)
2��ifl(ipMoums,(ModeSet=3),0)
2��ida(idMoums,�ums)
2�� Main.Process
2�%�ifl(ipPrClearoutput,ClearFile,0)
2�7�ifl(ipPrScaling,((XMul%<>XDiv%)�(YMul%<>YDiv%)),0)
2�� Main.Process.Colour
2�(�ifl(ipCoBlackandwhite,BlackWhite,0)
2�"�ifl(ipCoCorrectgamma,Gamma,0)
2�"�ifl(ipCoCorrectblack,Black,0)
3!�ifl(ipCoExpandrange,Range,0)
3#�ifl(ipCoInvertRGB,InvertRGB,0)
3 � Main.Process.Sprite output
3")�ifl(ipSpOutputpalette,0,(OutMode=1))
3,-�ifl(ipSpErrorspreading,(ErrSpread<>0),0)
36�ifl(ipSpZigzag,ZigZag,0)
3@� Main.Process.Scaling
3J �ifl(ipScx,(XMul%<>XDiv%),0)
3T �ifl(ipScy,(YMul%<>YDiv%),0)
3^� Main.Process.Misc
3h'�ifl(ipMiScreenblanking,Blanking,0)
3r�ifl(ipMiGIFscan,GIFScan,0)
3|"�ifl(ipMiPercentage,Percent,0)
3�'� Main.Process.Colour.Correct gamma
3��ida(idGagam,�(GammaF))
3�'� Main.Process.Colour.Correct black
3��ida(idBlbla,�(BlackF))
3�0� Main.Process.Sprite output.Error spreading
3�$�ifl(ipSpSimple,(ErrSpread=1),0)
3�,�ifl(ipSpFloydSteinberg,(ErrSpread=2),0)
3�!�ifl(ipSpOff,(ErrSpread=0),0)
3�,� Main.Process.Sprite output.Output mode
3� �ifl(ipMoAuto,(OutMode=1),0)
3�#�ifl(ipMoCurrent,(OutMode=2),0)
3�/� Main.Process.Sprite output.Output palette
3�"�ifl(ipPaCurrent,(OutPal=1),0)
4"�ifl(ipPaDefault,(OutPal=2),0)
4$�ifl(ipPaGreyscale,(OutPal=3),0)
4� Main.Process.Scaling.x
4&6d$=�(XMul%)+":":�DivIsInX � d$+="x" � d$+=�(XDiv%)
40�ida(idXxsc,d$)
4:� Main.Process.Scaling.y
4D6d$=�(YMul%)+":":�DivIsInY � d$+="y" � d$+=�(YDiv%)
4N�ida(idYysc,d$)
4X$� Main.Process.Misc.Image number
4b�ida(idNunum,�(ImageNr%))
4l� Main.Examine.Zoom
4v(�ifl(ipZo11,((ZoomX=1)�(ZoomY=1)),0)
4�� Main.Misc
4�!�ifl(ipMiImagepalette,0,�Img)
4�� Main.Misc.Save
4��ifl(ipSaFull,0,�Img)
4��ifl(ipSaWhole,0,�Img)
4��ifl(ipSaPart,0,�Img)
4� �ifl(ipSaWholescaled,0,�Img)
4��ifl(ipSaPartscaled,0,�Img)
4�&�ifl(ipSaIncludepalette,SavePal,0)
4�%�ifl(ipSaSameleafname,SameLeaf,0)
4��
4� 
4���ifl(fl%,t%,d%)
5� Sets menu icon flags
5t%=-(t%<>0):d%=-(d%<>0)
5!fl%=((!fl%)��1)+t%:� Tick
5 .fl%!8=((fl%!8)��(1<<22))+(d%<<22):� Shaded
5*�
54 
5>��ida(dp%,d$)
5H� Sets menu icon data
5R$dp%=d$
5\�
5f 
5p��set_mode(mode%)
5z2� Sets new mode (if enabled) for image display
5�� log2bpp%
5�>�AutoMode � �set_trans:�:� Auto mode selection not enabled
5�)log2bpp%=�mode_var(mode%,9):� Log2BPP
5�Ȏ ModeSet �
5�4 � 0 : � No mode set : no change of display mode
5�: � 1 : mode%=��" 0 81215",log2bpp%*2+1,2):� Normal set
5�= � 2 : mode%=��"18192021",log2bpp%*2+1,2):� Multisync set
5�4 � 3 : mode%=UserModeSet%(log2bpp%+1):� User set
5��
5�}�MultiSync � �(mode%>=18)�(mode%<=28) � mode%=�(�"0008121515002400081215",(mode%-18)*2+1,2)):� Map to non-multisync mode
5�%�mode_change(mode%):� Select mode
5��
5� 
6��mode_change(mode%)
6)� Mode has changed or select new mode
6)� If mode%>=0, mode mode% is selected
6$J� _%,xwind%,ywind%,othermode,colours%,pos%,altmode$,modecols%,sprcols%
6.3ș WReadP%,,wimppal:� Read current WIMP palette
68�(mode%>=0) � (mode%<>�) �
6B" ș WSetM%,mode%:� Change mode
6L �mode%<>� �
6VG  � 1,-10,180,1:� Alert user that 'ideal' mode couldn't be selected
6`:  colours%=2^(2^�mode_var(mode%,9)):� Colours required
6j�  �colours%=2 � altmode$="|1800" � �colours%=4 � altmode$="|1908|0801" � �colours%=16 � altmode$="|2012|1612|1209" � �colours%=256 � altmode$="|2115|2415|1513|1310"
6t  �
6~�  ��=mode% � pos%=�altmode$,"|"+�"0"+�mode%,2)):�pos%>0 � mode%=�(�altmode$,pos%+3)) � �error(-1,"I failed to select the ideal mode, nor any alternative mode ! Now you try it !"):mode%=-1
6�#  ș WSetM%,mode%:� Change mode
6�  � (�=mode%) � (mode%<0)
6� �
6��
6�@othermode=(�<>CurrMode%):CurrMode%=�:� Mode other than old ?
6�AXeig%=�mode_var(�,4):Yeig%=�mode_var(�,5):� Read X/YEigFactor
6�4Xstep%=2^Xeig%:Ystep%=2^Yeig%:� Coordinate steps
6�Bxwind%=�mode_var(�,11)+1:ywind%=�mode_var(�,12)+1:� Resolution
6�AScrW%=(1<<Xeig%)*xwind%:ScrH%=(1<<Yeig%)*ywind%:� Screen size
6�
�Img �
6�+ �set_trans:� Re-set sprite translation
6�A �AutoPal � �set_palette(1):� Select image palette if enabled
7# �othermode � �new_image_window
7
�
7�
7 
7(��set_trans
72C� Sets translation factors (transtab & palette) for sprite plot
7<!� mc%,sc%,v%,c%,gv%,gi%,i%,p%
7F<mc%=2^(2^�log2BPP):sc%=2^SprColbits%:� Colours available
7PGShowPal%()=ImgPal%():ShowPal%(0)=2^ShowPal%(0):� Copy image palette
7Z%�mc%=sc% � TransTabId=�:�:� Ideal
7d%TransTabId=�:� Always translation
7n�mc%>sc% �
7x: �mc%<=16 � � c%=0 � sc%-1:transtab%?c%=c%�(mc%-1):�:�
7�; ș "Translator_Palette",8,dum%,2:� Get default palette
7�4 �stdpal(ShowPal%(),8):� Show in default palette
7�^ � c%=0 � sc%-1:ș "Translator_ClosestToRGB",ImgPal%(c%+1),256,dum% � v%:transtab%?c%=v%:�
7�1� � Less colours than required, so compromise
7�
 �hour_on
7�r �FreqCalc � ș "Translator_PixelFreq",SprPtr%,freq%:FreqCalc=�:� Calculate pixel frequencies in image sprite
7�� p1%=freq%:p2%=dum%:pc%=0:� c%=0 � sc%-1:f%=!p1%:p1%+=4:�f%>0 � !p2%=ImgPal%(c%+1)�&F0F0F0:p2%!4=f%:p2%+=8:pc%+=1:transtab%?c%=1:� � transtab%?c%=0:�
7�: ș "Translator_Heckbert",dum%,pc%,mc% � p1%,p2%,used%
7Ҋ � c%=1 � used%:ShowPal%(c%)=(!p1%)�&F0F0F0:p1%+=4:�:ShowPal%(0)=used%:� c%=0 � sc%-1:�transtab%?c%=1 � transtab%?c%=!p2%:p2%+=4:� � �
7� �hour_off
7��
7��
7� 
8��autozoom
83� Adjust zoom factor for auto zoom (if enabled)
8� _%
8"�AutoZoom �
8,7 _%=�sprW*ZoomX:ȕ _%>ScrW%:ZoomX=ZoomX/2:_%=_%/2:�
866 �ZoomX<1 � ȕ _%*2<=ScrW%:ZoomX=ZoomX*2:_%=_%*2:�
8@7 _%=�sprH*ZoomY:ȕ _%>ScrH%:ZoomY=ZoomY/2:_%=_%/2:�
8J6 �ZoomY<1 � ȕ _%*2<=ScrH%:ZoomY=ZoomY*2:_%=_%*2:�
8T�
8^�
8h 
8r#��plot_image(x%,y%,act%,scale%)
8|/� Plots image sprite with translation table
8��TransTabId � ș OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale% � ș OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale%,transtab%
8��
8� 
8�ݤunpack(type$)
8�+� Unpacks image (final unpacking phase)
8�-� Returns TRUE if all is well, else FALSE
8�>� c%,bpp%,pc%,b%,gf,bf,min%,max%,rgb%,s%,v%,sub%,mul,r%,g%
8� � rm%,gm%,bm%,i,ri,gi,bi,Out
8�o�Free%>2*1024 � �allocate(B_infile%,Free%-16) � �error(-1,"I have no room for the input file buffer !"):=�
8�)bpp%=InPal%(0):� Bits per pixel input
8�4�var("inbi",bpp%):� Input (image) bits per pixel
8�&�var("bwhi",BlackWhite):� B/w flag
8�1�var("espr",ErrSpread):� Error spreading flag
9&�var("zigz",ZigZag):� Zig zag flag
9#�var("clfh",0):� No Clear (yet)
9=�var("outx",OutX%):�var("outy",OutY%):� Output resolution
9&=�var("ymul",YMul%):�var("ydiv",YDiv%):� Scaling factors Y
90=�var("xmul",XMul%):�var("xdiv",XDiv%):� Scaling factors X
9:o�Percent � �Blanking � �var("perc",1):�var("pinc",(100<<16)/ImgH%) � �var("perc",0):� Hourglass percentage
9D8� Set palette (if relevant, i.e. not pure RGB input)
9N?�bpp%<=8 � � c%=0 � 2^bpp%-1:palrgb%!(c%<<2)=InPal%(c%+1):�
9Xf� b%=0 � 31:buffer%!(b%*8)=Buffer%(b%,0):buffer%!(b%*8+4)=Buffer%(b%,1):�:� Buffer locations/sizes
9b9�OutMode=1 � pc%=0 � pc%=OutPal:� Select palette code
9l<� Build R/G/B intensity map for gamma/invert/rgbbits/b&w
9v:�Gamma � �GammaF>0 � gf=1/GammaF � gf=0:� Gamma factor
9�=�Black � �BlackF<>0 � bf=BlackF � bf=0:� Black correction
9��Range � (bpp%<=8) �
9� �bpp%<=8 �
9��  min%=256:max%=0:� c%=0 � 2^bpp%-1:rgb%=InPal%(c%+1):� s%=1 � 3:v%=rgb%�&FF:rgb%=rgb%>>8:min%=�min(min%,v%):max%=�max(max%,v%):�:�
9�? � ș "Translator_UnpackPre",palrgb%,pc%,buffer%,32,intmap%
9�7  �unpack_phase(type$,3):� Gather info on RGB range
9�A  min%=�var("inmi"):max%=�var("inma"):� Get min/max intensity
9� �
9�= sub%=min%:mul=255/(max%-min%):� Range correction factors
9�5 RangeMin%=min%:RangeMax%=max%:� Remember min/max
9�\ $IMIrn%=�(RangeMin%)+"-"+�(RangeMax%)+" ("+�(�((max%-min%)/2.55))+"%)":� Set range info
9� RangeI=�:� Info present
9� � RangeI=�:$IMIrn%="Unknown"
:�
:vr%=(RGBbits%>>16)�&FF:g%=(RGBbits%>>8)�&FF:b%=RGBbits%�&FF:v%=&FF00:rm%=v%>>r%:gm%=v%>>g%:bm%=v%>>b%:� R/G/B masks
:4rg=0.300:gg=0.586:bg=0.114:� Greyvalues of R/G/B
: � c%=0 � 255
:*#�Range � i=(c%-sub%)*mul � i=c%
:4.�bf=0 � i=i+bf:�i<0 � i=0 � �i>255 � i=255
:>%�gf>0 � �i>0 � i=((i/255)^gf)*255
:H�InvertRGB � i=255-i
:R$ri=i � rm%:gi=i � gm%:bi=i � bm%
:\,�BlackWhite � ri=ri*rg:gi=gi*gg:bi=bi*bg
:f'intmap%!(c%<<2)=(ri<<16)+(gi<<8)+bi
:p�
:zDGreyRgb=(bpp%>8) � BlackWhite:� Flag to indicate grey RGB output
:�Hș "Translator_UnpackPre",palrgb%,pc%,buffer%,32,intmap% � ,truepal%
:�tImgPal%()=0:ImgPal%(0)=SprColbits%:� c%=0 � 2^SprColbits%-1:ImgPal%(c%+1)=palrgb%!(c%<<2):�:� Read image palette
:��ClearFile �
:�( Out=�(ClearSave$):� Open Clear file
:�k �ostring(Out,"Translator"):�obf(Out,0):�owlf(Out,tversion%):�owlf(Out,OutX%):�owlf(Out,OutY%):� Header
:�z �GreyRgb � �owlf(Out,8):� c%=0 � 255:�otlf(Out,c%�c%<<8�c%<<16):� � �owlf(Out,ImgBits%):� Bpp and greypal if grey RGB
:�q �ImgBits%<=8 � � c%=0 � 2^ImgBits%-1:rgb%=truepal%!(c%<<2):�otbf(Out,rgb%):�:� Set palette to 'true' palette
:�^ �var("clfh",Out):�var("clfp",�#Out):�var("clgr",GreyRgb):� Inform clear writer on outfile
:�5 bytes%=OutX%*OutY%:�ImgBits%>8 � bytes%=3*bytes%
:ސ ș "XOS_Args",6,Out,bytes%+�#Out � ;f%:�f%�1 � �#Out:ClearFile=�:ș "OS_File",6,ClearSave$:�error(-1,"No room for Clear file on disc !"):=�
:� � �var("clfh",0):� Clear off
:��
:�7�unpack_phase(type$,1):� Execute final unpack phase
;�ClearFile �
;� ClearFile=�:�#Out:�var("clfh")=0 � ș "OS_File",6,ClearSave$:�error(-1,"Error during output to Clear file : "+�string(�var("erro")+4)):� Remove Clear file if error
;�
;$=�
;. 
;8 ��unpack_phase(type$,phase%)
;B5� Executes unpack phase, blanks screen if enabled
;L-�var("phas",phase%):� Set unpacking phase
;V+$dum%=�type$+"    ",4):� Type to unpack
;`=�Blanking � ș "Translator_VideoDMA",0:� Blank if enabled
;j7ș "Translator_Unpack",!dum%:� Execute unpack phase
;tA�Blanking � ș "Translator_VideoDMA",1:� Re-enable if blanked
;~?�phase%<>1 � result%=0 � result%=�var("resu"):� Result code
;�Ȏ result% �
;� � 0 : � All OK
;�V � 1,2,3 : �error(-1,"File is too short ! Image may be corrupted !"):� Out of data
;�n � 16 : �error(-1,"Error in TIFF file : strip(s) missing ! Image may be corrupted !"):� Out of TIFF strips
;�c  : �error(-1,"Some mysterious error #"+�result%+"occured ! Image may be corrupted !"):� Huh ?
;��
;��
;� 
;���set_palette(palette%)
;�*� Sets a palette according to palette%
;��  0 - Desktop palette
;�.�  1 - Image's own palette (when possible)
<� c%
<
Ȏ palette% �
<r � 0 : �log2BPP=3 � ș "Translator_Palette",8,dum%,2:ș "Translator_SetPalette",256,dum% � ș WSetP%,,wimppal
<k � 1 : � c%=0 � ShowPal%(0)-1:dum%!(c%<<2)=ShowPal%(c%+1):�:ș "Translator_SetPalette",ShowPal%(0),dum%
<(�
<2�
<< 
<F��stdpal(� Pal%(),bpp%)
<PH� Sets a palette to standard Archimedes 2,4,16 or 256 colour palette
<Z� c%,p%
<dDș "Translator_Palette",bpp%,dum%,2:� Calculate standard palette
<np%=dum%:� Pointer
<x(� c%=1 � 2^bpp%:Pal%(c%)=!p%:p%+=4:�
<�Pal%(0)=bpp%
<��
<� 
<�!��greypal(� Pal%(),bpp%,dir%)
<�9� Sets a palette to greyscale for bpp% bits per pixel
<�?� dir%=1 gives black to white, dir%=-1 gives white to black
<�� cols%,step,i,c%
<�'cols%=2^bpp%:step=255/(cols%-1):i=0
<�%�dir%=-1 � step=-step:i=255 � i=0
<�7� c%=1 � 2^bpp%:Pal%(c%)=i � i<<8 � i<<16:i+=step:�
<�Pal%(0)=bpp%
<��
<� 
=4��mode_info(mode%,� width%,� height%,� colours%)
=1� Returns information about a particular mode
=ncolours%=2^(2^�mode_var(mode%,9)):width%=1+�mode_var(mode%,11):height%=1+�mode_var(mode%,12):� Return info
="�
=, 
=6��invalidate_screen
=@� Invalidates entire screen
=J=ș WForce%,-1,0,0,ScrW%,ScrH%:� Force redraw whole screen
=T�
=^ 
=h��invalidate_image
=r� Invalidates image
=|(Img=�:FreqCalc=�:� Reset image flags
=��
=� 
=���new_window(handle%)
=� � Redraws entire window area
=��redraw_window(handle%,�)
=��
=� 
=�"��redraw_window(handle%,force)
=�(� Redraws window with handle handle%
=�<� If force=TRUE the window's entire work area is updated
=�+� more%,nx%,ny%,vw%,vh%,x%,y%,ox%,oy%,z
=�E� x1%,x2%,x3%,x4%,y1%,y2%,y3%,y4%,w1%,w2%,w3%,w4%,h1%,h2%,h3%,h4%
=�(!block=handle%:� Set window's handle
>x�force � block!4=0:block!8=0:block!12=&7FFF:block!16=&7FFF:ș WUpdateW%,,block � more% � ș WRedrawW%,,block � more%
>Jvw%=block!12+Xstep%-block!4:vh%=block!16+Ystep%-block!8:� Visible size
>Ȏ handle% �
>&' � win_img% : � Redraw image window
>0G  nx%=(block!4-block!20):ny%=(block!16-block!24):� Work area origin
>:?  �ZoomX>=1 � !arg%=ZoomX:arg%!8=1 � !arg%=1:arg%!8=1/ZoomX
>DC  �ZoomY>=1 � arg%!4=ZoomY:arg%!12=1 � arg%!4=1:arg%!12=1/ZoomY
>N<  �(vw%<=160)�(vh%<=160) � x%=block!4:y%=block!8 � vw%=0
>X9  ȕ more%:�vw%>0 � ș WSetCol%,0:ȓ Ȑ x%,y%,vw%,vh%
>b8  �plot_image(nx%,ny%,0,arg%):� Display image sprite
>l5  ș WGetR%,,block � more%:�:� Get next rectangle
>v' � win_zoom% : � Redraw zoom window
>�6  x%=block!4:y%=block!8:� Visible area coordinates
>�!  z=ZoomW/ZoomD:� Zoom factor
>�D  ox%=vw%/2-ZoomWX%*z*Xstep%:oy%=vh%/2-ZoomWY%*z*Ystep%:� Offset
>�=  nx%=SprW%*z*Xstep%:ny%=SprH%*z*Ystep%:� Total externals
>�8  w1%=0:w2%=0:w3%=0:w4%=0:� No uncovered borders yet
>�3  �ox%>0 � x1%=x%:y1%=y%:w1%=ox%-Xstep%:h1%=vh%
>�F  �(ox%+nx%)<vw% � x2%=x%+ox%+nx%:y2%=y%:w2%=vw%-(ox%+nx%):h2%=vh%
>�3  �oy%>0 � x3%=x%:y3%=y%:w3%=vw%:h3%=oy%-Ystep%
>�F  �(oy%+ny%)<vh% � x4%=x%:y4%=y%+oy%+ny%:w4%=vw%:h4%=vh%-(oy%+ny%)
>�H  !arg%=ZoomW:arg%!8=ZoomD:arg%!4=ZoomW:arg%!12=ZoomD:� Zoom factors
>�.  nx%=x%+ox%:ny%=y%+oy%:� Plot coordinates
>�-  ȕ more%:�w1%>0 � ȓ Ȑ x1%,y1%,w1%,h1%
>�$  �w2%>0 � ȓ Ȑ x2%,y2%,w2%,h2%
?$  �w3%>0 � ȓ Ȑ x3%,y3%,w3%,h3%
?$  �w4%>0 � ȓ Ȑ x4%,y4%,w4%,h4%
?8  �plot_image(nx%,ny%,0,arg%):� Display image sprite
? 5  ș WGetR%,,block � more%:�:� Get next rectangle
?*�
?4�
?> 
?H��open_window(handle%,info)
?R&� Opens window with handle handle%
?\K� If info>0 then info is ready at info, else get info, if -1 pop at top
?f� b%,px%,py%,_%,xs%,ys%
?p
�info>0 �
?z' � b%=0 � 31 � 4:block!b%=info!b%:�
?�&� !block=handle%:ș WGetWS%,,block
?�8 �info=-1 � block!28=-1:� Pop up at top if requested
?�� �handle%<>win_img% � �mouse(px%,py%,_%):xs%=block!12-block!4:ys%=block!16-block!8:block!4=px%-64:block!8=py%-ys%+16:block!12=block!4+xs%:block!16=block!8+ys%:� Pop up at mouse if not image window
?��
?�ș WOpenW%,,block
?��
?� 
?���close_window(handle%)
?�'� Closes window with handle handle%
?�%!block=handle%:ș WCloseW%,,block
?��
?� 
?�ݤpoll(mask%)
@@� Returns poll reason code, masking with mask%, data at poll
@� reasoncode
@%ș WPoll%,mask%,poll � reasoncode
@$=reasoncode
@. 
@8��initialise
@B� Initialises program
@L>ș "Wimp_ReadPalette",,wimppal:� Read current WIMP palette
@V7�hour_on:�init_module:�hour_off:� Initialise module
@`Dș "OS_CheckModeValid",18 � _%:MultiSync=(_%<>-1):� Monitor type
@j0applname$="Translator":� Name of application
@tFș "Wimp_Initialise",200,&4B534154,applname$ � version,TaskHandle%
@~9�version<200 � � 1,"I cannot work with WIMP pre-2.00"
@�6W%=�swi_to_nr("Wimp_Initialise"):� Base SWI number
@��WCreateW%=W%+1:WCreateI%=W%+2:WDeleteW%=W%+3:WOpenW%=W%+5:WCloseW%=W%+6:WPoll%=W%+7:WRedrawW%=W%+8:WUpdateW%=W%+9:WGetR%=W%+10:WGetWS%=W%+11:WGetWI%=W%+12:WSetIS%=W%+13:WGetIS%=W%+14:WGetPI%=W%+15:WDragB%=W%+16:WForce%=W%+17
@��WSetCa%=W%+18:WCreateM%=W%+20:WDecodeM%=W%+21:WSetE%=W%+23:WLoadT%=W%+27:WReport%=W%+31:WSetM%=W%+35:WSetP%=W%+36:WReadP%=W%+37:WSetCol%=W%+38:WSendMsg%=W%+39:WCreateSM%=W%+40
@�}OSSpop%=�swi_to_nr("OS_SpriteOp"):OSReadVV%=�swi_to_nr("OS_ReadVduVariables"):OSReadMV%=�swi_to_nr("OS_ReadModeVariable")
@�3ș WReadP%,,wimppal:� Read current WIMP palette
@�=tf%=7:tb%=2:wf%=7:wb%=0:si%=1:so%=3:� Window/menu colours
@Ĕ!block=-1:block!4=0:block!8=0:block!12=68:block!16=68:block!20=&27003002:$(block+24)="!translatr":ș WCreateI%,,block � Iiconbar%:� Iconbar icon
@�� Load sprites for icons
@�H!iconsprites=2048:iconsprites!4=0:iconsprites!8=16:iconsprites!12=16
@�<ș OSSpop%,10+256,iconsprites,"<Translator$Dir>.Sprites"
@�� Load templates
@�8ș "Wimp_OpenTemplate",,"<Translator$Dir>.Templates"
A<ic=icondata:ie=icondend:� Indirected icon data workspace
A
:$dum%="save":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
A#window!(88+24)=1:� WIMP areaptr
A$ș WCreateW%,,window � win_file%
A(?SAVsn%=�iconaddr(win_file%,0):SAVfn%=�iconaddr(win_file%,1)
A2:$dum%="info":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
A<$ș WCreateW%,,window � win_info%
AF?$dum%="filetypes":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
AP%ș WCreateW%,,window � win_filet%
AZ?$dum%="imageinfo":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
Ad&ș WCreateW%,,window � win_iminfo%
An�w%=win_iminfo%:IMIfn%=�iconaddr(w%,1):IMIit%=�iconaddr(w%,3):IMIin%=�iconaddr(w%,5):IMIif%=�iconaddr(w%,7):IMIco%=�iconaddr(w%,9)
Ax{IMIwh%=�iconaddr(w%,11):IMIsc%=�iconaddr(w%,13):IMIbp%=�iconaddr(w%,15):IMIsm%=�iconaddr(w%,17):IMIrn%=�iconaddr(w%,19)
A�=$dum%="rgbbits":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
A�C� i%=3 � 5:ap%=window+88+i%*32+24:!ap%=iconsprites:�:� Areaptrs
A�'ș WCreateW%,,window � win_rgbbits%
A�E$dum%="image":IMWtt%=ic:ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
A�*window?35=&FF:� Transparent background
A�#ș WCreateW%,,window � win_img%
A�:$dum%="zoom":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
A�$ș WCreateW%,,window � win_zoom%
A�ș "Wimp_CloseTemplate"
A�� Load menu structure
A�<ș "OS_File",5,"<Translator$Dir>.MenuStruct" � ,,,,slen%
A�� menustruct% slen%
A�>ș "OS_File",255,"<Translator$Dir>.MenuStruct",menustruct%
B:ș "OS_File",5,"<Translator$Dir>.MenuData" � ,,,,dlen%
B� menudata% dlen%
B:ș "OS_File",255,"<Translator$Dir>.MenuData",menudata%
B"'� a%=menustruct%+4 � a%+slen%-8 � 4
B,�d%=!a%:�(d%�&FFF00000)<>&DEA00000 � k%=(d%>>16)�&F:d%=d%�&FFFF:�k%=1 � !a%=d%+menustruct% � �k%=2 � !a%=d%+menudata% � �d%=1 � !a%=win_file% � �d%=2 � !a%=win_rgbbits% � !a%=win_iminfo%
B6�
B@�Vars=�"<Translator$Dir>.MenuVars":ȕ ��#Vars:vn$=�#Vars:d%=�#Vars:vv$=�#Vars:d%=�#Vars:�vn$,2)="id" � vv%=menudata%+�vv$ � vv%=menustruct%+�vv$
BJ-d%=�("FNcvar("+vn$+","+�vv%+")"):�:�#Vars
BT&menumain%=menustruct%+!menustruct%
B^� Init variables
BhiSaveKind$="":Img=�:SavePal=�:ZoomX=1:ZoomY=1:ImageSpr$="image":Flen%=0:Load$="":SameLeaf=�:SlotDown=�
Br�DataSaveRef%=-1:DataLoadRef%=�:YMul%=1:YDiv%=1:XMul%=1:XDiv%=1:ClearFile=�:SaveSpr$="Image":SaveClear$="Clear":SprSave$="":ClearSave$=""
B|�F1%=0:F2%=0:SprW%=0:SprH%=0:ImageNr%=1:AutoMode=�:AutoPal=�:CurrMode%=-1:ErrSpread=1:ModeSet=0:UserModeSet%()=0,0,8,12,15:AutoZoom=�
B��BlackWhite=�:TransTabId=�:ImgMode%=0:GIFScan=�:RGBbits%=&080808:Blanking=�:ZigZag=�:InvertRGB=�:FreqCalc=�:OutMode=1:OutPal=1:InFile$="":InType%=0:Percent=�
B�yAction=0:ActLoad=1:ActRotate=2:ActPostLoad=3:ViewMode=�:PreMode=�:ZoomWin=�:ZoomD=4:ZoomW=ZoomD:DivIsInX=�:DivIsInY=�
B�|OutX%=1:OutY%=1:OutMode%=15:GammaF=1:Gamma=�:BlackF=0:Black=�:Range=�:RangeMin%=0:RangeMax%=0:RangeI=�:From%=1:GreyRgb=�
B��B_null%=0:B_area%=1:B_sprite%=2:B_sprimg%=3:B_imgtop%=4:B_infile%=5:B_pixbuf1%=6:B_pixbuf2%=7:B_pixval%=8:B_pixscaled%=9:B_lzwtable%=10:B_stroff%=11:B_fserr%=12
B�0�load_status:� Load default status (if any)
B��
B� 
B�ݤcvar(� var%,val%)
B�+� Creates new variable var%, value val%
B�var%=val%:=0
B� 
B�ݤiconaddr(win%,ico%)
B�,� Returns indirected icon's data address
C>!block=win%:block!4=ico%:ș WGetIS%,,block:� Get icon info
C
=block!28
C 
C&ݤload_status
C0#� Loads default status (if any)
C:H� Returns TRUE if succesful, else FALSE (i.e. status file not found)
CD6Status=�("<Translator$Dir>.Status"):�Status=0 � =�
CN��#Status,AutoMode,AutoPal,ModeSet,ErrSpread,SavePal,UserModeSet%(1),UserModeSet%(2),UserModeSet%(3),UserModeSet%(4),AutoZoom,BlackWhite,GIFScan,Blanking,InvertRGB,ZigZag,ViewMode,OutMode,OutPal,Percent,GammaF,Gamma,BlackF,Black
CX$�#Status,Range,SameLeaf:�#Status
Cb�ErrSpread=-1 � ErrSpread=1
Cl=�
Cv 
C�	ݤums
C�7� Returns string representing current user mode set
C�\=�(UserModeSet%(1))+","+�(UserModeSet%(2))+","+�(UserModeSet%(3))+","+�(UserModeSet%(4))
C� 
C�ݤavailable_mode(mode%)
C�C� Checks if mode% is a valid WIMP mode and available on monitor
C�0�mode%=3 � mode%=6 � mode%=7 � mode%=23 � =�
C��mode%<0 � mode%>28 � =�
C�*�mode%=24 � mode%<18 � =� � =MultiSync
C� 
C�ݤalign(val%)
C�0� Returns next-up word aligned value of val%
C�=(val%+3)��3
D 
Dݤreadpalval(rgb%)
D3� Returns 'OS_ReadPalette' word from &RGB value
D ?=((rgb%�&FF)<<24)+((rgb%�&FF00)<<8)+((rgb%�&FF0000)>>8)+&10
D* 
D4ݤstring(addr%)
D>2� Returns CTRL-char terminated string at addr%
DH� _%,_c%,_$
DR_%=-1:� _%+=1:� addr%?_%<32
D\3_c%=addr%?_%:addr%?_%=13:_$=$addr%:addr%?_%=_c%
Df=_$
Dp 
Dzݤupstring(m$)
D�� Returns upper case m$
D�� c%,v%,u$
D�Ru$=m$:� c%=1 � � m$:v%=��m$,c%,1):�(v%<=�"z")�(v%>=�"a") � �u$,c%,1)=�(v%�&5F)
D�	�:=u$
D� 
D���mouse(� x%,� y%,� but%)
D�+� Returns x,y and button state of mouse
D�ȗ x%,y%,but%
D��
D� 
D�
ݤlog2BPP
D�&� Returns Log2BPP for current mode
D�=�mode_var(�,9)
E
Eݤcolstobpp(cols%)
E5� Returns bits per pixel needed for cols% colours
E$(�cols%<=1 � =1 � =�ceil(�(cols%)/�2)
E. 
E8ݤvdu_var(varnr%)
EB!� Returns VDU variable varnr%
EL;!arg%=varnr%:arg%!4=-1:ș OSReadVV%,arg%,arg%+8:=arg%!8
EV 
E`ݤmode_var(mode%,varnr%)
Ej(� Returns mode mode% variable varnr%
Et
� result%
E~2ș OSReadMV%,mode%,varnr% � ,,result%:=result%
E� 
E�ݤOS_var(_$)
E�.� Attempts to return OS-var's string value
E�
� _r$,_l%
E�7ș "XOS_ReadVarVal",_$,�100," "),100,0,3 � ,_r$,_l%
E�_r$=�_r$,_l%):=_r$
E� 
E�ݤswi_to_nr(swi$)
E�)� Returns SWI number of SWI call swi$
E�� swinr%
E�/ș "XOS_SWINumberFromString",,swi$ � swinr%
E�=swinr%
F 
F
��error(errnr,errmsg$)
F� Handles errors
F� but%,opt%
F(9ș "Translator_VideoDMA",1:� Ensure video DMA enabled
F2'�errnr=-1 � errnr=1:opt%=1 � opt%=3
F<!err=errnr:$(err+4)=errmsg$
FFDș "Translator_Palette",2^�log2BPP,dum%,1:� Read current palette
FP)�set_palette(0):� Select WIMP palette
FZ*ș WReport%,err,opt%,applname$ � ,but%
Fd�but%<>1 � �die
FnBș "Translator_SetPalette",2^(2^�log2BPP),dum%:� Reset palette
Fx�
F� 
F�
ݤsprW
F�?� Returns image sprite's width in OS pixels in current mode
F�=SprW%*Xstep%
F� 
F�
ݤsprH
F�@� Returns image sprite's height in OS pixels in current mode
F�=SprH%*Ystep%
F� 
F�ݤmax(v1%,v2%)
F�$� Returns maximum of v1% and v2%
F��v1%>v2% � =v1% � =v2%
F� 
Gݤmin(v1%,v2%)
G$� Returns minimum of v1% and v2%
G�v1%<v2% � =v1% � =v2%
G" 
G,
ݤceil(v)
G60� Returns 'ceiling' of value (i.e. round up)
G@�v=�v � =v � =�v+1
GJ 
GT	��die
G^� Tidies up and exits
Gh�finish:� Tidy up
Grș "OS_Exit"
G|�
G� 
G���finish
G�� Tidies up
G�}ș "Translator_TaskQuit" � tasks%:�tasks%<=0 � ș "OS_Module",4,"Translator":� Kill module if no other tasks are using it
G�&ș WSetP%,,wimppal:� Reset palette
G�-ș "Wimp_CloseDown",TaskHandle%,&4B534154
G��
G� 
G�#ݤmode(width%,height%,colours%)
G�L� Returns, if possible, a standard screen mode that is most suitable for
G�K� displaying a picture of (width%)x(height%) pixels in colours% colours
G�6� Returns -1 if number of colours greater than 256
G�)� arccols%,arcwidth%,archeight%,mode%
H�OutMode=2 � =�
H/� Range check for colours, width and height
H&�colours%>256 � =-1:� Impossible !
H&,� Determine closest colours/width/height
H0c�colours%>16 � arccols%=256 � �colours%>4 � arccols%=16 � �colours%>2 � arccols%=4 � arccols%=2
H:N�width%>640 � arcwidth%=1056 � �width%>320 � arcwidth%=640 � arcwidth%=320
HD3�height%<=256 � archeight%=256 � archeight%=512
HNȎ arccols% �
HX/ � 2 : �archeight%=512 � mode%=18 � mode%=0
HbK � 4 : �archeight%=512 � mode%=19 � �arcwidth%<=320 � mode%=1 � mode%=8
Hli � 16 : �archeight%=512 � mode%=20 � �arcwidth%<=320 � mode%=9 � �arcwidth%=640 � mode%=12 � mode%=16
Hv� � 256 : �archeight%=512 � mode%=21 � �arcwidth%=160 � mode%=10 � �arcwidth%=320 � mode%=13 � �arcwidth%=640 � mode%=15 � mode%=24
H��
H�
=mode%
H� 
H�ݤtimes(value%)
H�0� Returns STR$value% with 'plural extension'
H�	� _d%
H�3_d%=value%�10:� Last digit determines extension
H�:�(((value%�100)�10)=1)�(_d%>3)�(_d%=0) � =�value%+"th"
H�Ȏ _d% �
H� � 1 : =�value%+"st"
H� � 2 : =�value%+"nd"
H� � 3 : =�value%+"rd"
H��
I
I5��read24pal(fh%,� Pal%(),cols%,ro%,go%,bo%,elen%)
I*� Reads 24-bit palette from input file
I @� Entries are cols%*elen%-byte, R,G,B at r0%/go%/bo% offsets
I*� p%,c%,m%
I4=ș "OS_GBPB",4,fh%,dum%,cols%*elen%:� Read entire palette
I>p%=dum%:� Pointer
IHG� c%=1 � cols%:Pal%(c%)=p%?ro%<<16 � p%?go%<<8 � p%?bo%:p%+=elen%:�
IR�
I\ 
Ifݤistring(fh%,len%)
Ip!� Returns string of from file
Iz0� If len%>0 the number of characters is len%
I�8� If len%=-1 the string is CTRL-character terminated
I�� _%,r$,c%
I�o_$="":�len%>0 � � _%=1 � len%:r$+=��ibf(fh%):� � �len%=-1 � c%=�ibf(fh%):ȕ c%>=�" ":r$+=�c%:c%=�ibf(fh%):�
I�=r$
I� 
I���iskip(fh%,amount%)
I�!� Skips amount% bytes in file
I��#fh%=amount%+�#fh%
I��
I� 
I���iptr(fh%,newptr%)
I�� Sets new offset in file
I��#fh%=newptr%
J�
J 
Jݤiptr(fh%)
J$$� Returns current offset in file
J.
=�#fh%
J8 
JBݤilen(fh%)
JL� Returns length of file
JV
=�#fh%
J` 
Jjݤieof(fh%)
Jt(� Returns end-of-file status of file
J~
=�#fh%
J� 
J���iclose
J�� Closes all input files
J�'�F1%<>0 � ș "XOS_Find",0,F1%:F1%=0
J�'�F2%<>0 � ș "XOS_Find",0,F2%:F2%=0
J��
J� 
J���iget(fh%,adr%,amount%)
J�-� Returns amount% bytes at adr% from file
J�#ș "OS_GBPB",4,fh%,adr%,amount%
J��
J�
Kݤib:=�#F1%
K
ݤidb:=�#F1%<<8 � �#F1%
K'ݤitb:=�#F1%<<16 � �#F1%<<8 � �#F1%
K3ݤiwb:=�#F1%<<24 � �#F1%<<16 � �#F1%<<8 � �#F1%
K(ݤidl:=�#F1% � �#F1%<<8
K2'ݤitl:=�#F1% � �#F1%<<8 � �#F1%<<16
K<3ݤiwl:=�#F1% � �#F1%<<8 � �#F1%<<16 � �#F1%<<24
KFݤibf(fh%):=�#fh%
KP9ݤiwlf(fh%):=�#fh% � �#fh%<<8 � �#fh%<<16 � �#fh%<<24
KZ
Kd ��obf(fh%,val%):�#fh%,val%:�
Kn@��otbf(fh%,val%):�#fh%,val%>>>16:�#fh%,val%>>>8:�#fh%,val%:�
Kx@��otlf(fh%,val%):�#fh%,val%:�#fh%,val%>>>8:�#fh%,val%>>>16:�
K�P��owlf(fh%,val%):�#fh%,val%:�#fh%,val%>>>8:�#fh%,val%>>>16:�#fh%,val%>>>24:�
K�
K���ostring(fh%,w$)
K�� Outputs string to file
K�� i%
K�#� i%=1 � �w$:�#fh%,��w$,i%,1):�
K��
K�
K���init_module
K�� Initialises module
K�.ș "Translator_MakeMaps":� Initialise maps
K�-ș "Translator_TaskStart":� Register task
K��
L 
L��var(varname$,value%)
L� Writes module variable
L";$dum%=varname$:ș "Translator_SetVariable",!dum%,value%
L,�
L6 
L@ݤvar(varname$)
LJ� Reads module variable
LT� value%
L^>$dum%=varname$:ș "Translator_ReadVariable",!dum% � value%
Lh=value%
Lr 
L|ݤOSvar(name$)
L�.� Attempts to return OS-var's string value
L�
� _r$,_l%
L�C_r$=�100," "):ș "XOS_ReadVarVal",name$,_r$,�_r$,0,3 � ,_r$,_l%
L�=�_r$,_l%)
L�
�
00000000  0d 00 0a 10 f4 20 3e 21  52 75 6e 49 6d 61 67 65  |..... >!RunImage|
00000010  0d 00 14 4b f4 ab ab ab  ab ab ab ab ab ab ab ab  |...K............|
00000020  ab ab ab ab ab ab ab ab  ab ab ab ab ab ab ab ab  |................|
*
00000050  ab ab ab ab ab ab ab ab  ab ab ab 0d 00 1e 33 f4  |..............3.|
00000060  20 43 6f 6e 76 65 72 74  73 20 66 6f 72 65 69 67  | Converts foreig|
00000070  6e 20 67 72 61 70 68 69  63 73 20 66 69 6c 65 73  |n graphics files|
00000080  20 74 6f 20 41 72 63 68  69 6d 65 64 65 73 0d 00  | to Archimedes..|
00000090  28 2d f4 20 56 65 72 73  69 6f 6e 20 64 61 74 65  |(-. Version date|
000000a0  20 3a 20 54 68 75 2c 32  35 20 41 70 72 20 31 39  | : Thu,25 Apr 19|
000000b0  39 31 2e 32 33 3a 31 36  3a 34 39 0d 00 32 1e f4  |91.23:16:49..2..|
000000c0  20 a9 20 31 39 39 31 20  5a 65 72 69 64 61 6a 68  | . 1991 Zeridajh|
000000d0  20 73 6f 66 74 77 61 72  65 0d 00 3c 15 f4 20 62  | software..<.. b|
000000e0  79 20 4a 6f 68 6e 20 4b  6f 72 74 69 6e 6b 0d 00  |y John Kortink..|
000000f0  46 4b f4 ab ab ab ab ab  ab ab ab ab ab ab ab ab  |FK..............|
00000100  ab ab ab ab ab ab ab ab  ab ab ab ab ab ab ab ab  |................|
*
00000130  ab ab ab ab ab ab ab ab  ab 0d 00 50 31 ee 20 85  |...........P1. .|
00000140  20 eb 30 3a f1 27 22 45  72 72 6f 72 22 27 27 22  | .0:.'"Error"''"|
00000150  27 22 3b f6 24 3b 22 27  20 28 63 6f 64 65 20 22  |'";.$;"' (code "|
00000160  3b 9e 3b 22 29 22 27 27  3a e0 0d 00 5a 2d 74 76  |;.;")"'':...Z-tv|
00000170  65 72 73 69 6f 6e 25 3d  36 34 34 3a f4 20 54 72  |ersion%=644:. Tr|
00000180  61 6e 73 6c 61 74 6f 72  20 76 65 72 73 69 6f 6e  |anslator version|
00000190  20 6e 75 6d 62 65 72 0d  00 64 3b de 20 77 69 6e  | number..d;. win|
000001a0  64 6f 77 20 26 41 30 30  2c 69 63 6f 6e 73 70 72  |dow &A00,iconspr|
000001b0  69 74 65 73 20 32 30 34  38 2c 69 63 6f 6e 64 61  |ites 2048,iconda|
000001c0  74 61 20 34 30 39 36 2c  69 63 6f 6e 64 65 6e 64  |ta 4096,icondend|
000001d0  20 30 0d 00 6e 45 de 20  6d 65 6e 75 69 63 6f 25  | 0..nE. menuico%|
000001e0  20 32 35 36 2c 70 6f 6c  6c 20 32 35 36 2c 62 6c  | 256,poll 256,bl|
000001f0  6f 63 6b 20 32 35 36 2c  65 72 72 20 32 35 36 2c  |ock 256,err 256,|
00000200  77 69 6d 70 70 61 6c 20  32 35 36 2c 70 6f 69 6e  |wimppal 256,poin|
00000210  74 65 72 20 35 31 32 0d  00 78 3c de 20 49 6e 50  |ter 512..x<. InP|
00000220  61 6c 25 28 32 35 36 29  2c 49 6d 67 50 61 6c 25  |al%(256),ImgPal%|
00000230  28 32 35 36 29 2c 53 68  6f 77 50 61 6c 25 28 32  |(256),ShowPal%(2|
00000240  35 36 29 2c 55 73 65 72  4d 6f 64 65 53 65 74 25  |56),UserModeSet%|
00000250  28 34 29 0d 00 82 37 de  20 61 72 67 25 20 31 30  |(4)...7. arg% 10|
00000260  32 34 2c 64 75 6d 25 20  35 2a 31 30 32 34 2c 74  |24,dum% 5*1024,t|
00000270  72 61 6e 73 74 61 62 25  20 32 35 36 2c 42 75 66  |ranstab% 256,Buf|
00000280  66 65 72 25 28 33 32 2c  31 29 0d 00 8c 35 de 20  |fer%(32,1)...5. |
00000290  62 75 66 66 65 72 25 20  33 32 2a 38 2c 66 72 65  |buffer% 32*8,fre|
000002a0  71 25 20 31 30 32 34 2c  70 61 6c 72 67 62 25 20  |q% 1024,palrgb% |
000002b0  31 30 32 34 2c 68 61 6d  62 61 73 25 20 36 34 0d  |1024,hambas% 64.|
000002c0  00 96 1e de 20 69 6e 74  6d 61 70 25 20 31 30 32  |.... intmap% 102|
000002d0  34 2c 70 62 6d 69 6e 74  25 20 32 35 36 0d 00 a0  |4,pbmint% 256...|
000002e0  40 50 72 6f 67 6e 65 65  64 25 3d 31 35 30 2a 31  |@Progneed%=150*1|
000002f0  30 32 34 3a f4 20 45 73  74 69 6d 61 74 65 64 20  |024:. Estimated |
00000300  73 70 61 63 65 20 6e 65  65 64 65 64 20 66 6f 72  |space needed for|
00000310  20 70 72 6f 67 72 61 6d  2b 76 61 72 73 0d 00 aa  | program+vars...|
00000320  40 4c 6f 77 48 65 61 70  25 3d 31 30 32 34 3a f4  |@LowHeap%=1024:.|
00000330  20 4c 6f 77 65 73 74 20  73 69 7a 65 20 66 6f 72  | Lowest size for|
00000340  20 68 65 61 70 20 28 73  70 72 69 74 65 2c 20 62  | heap (sprite, b|
00000350  75 66 66 65 72 73 2c 20  65 74 63 2e 29 0d 00 b4  |uffers, etc.)...|
00000360  37 54 6f 74 61 6c 66 72  65 65 25 3d 93 2d 90 3a  |7Totalfree%=.-.:|
00000370  f4 20 54 6f 74 61 6c 20  66 72 65 65 20 66 6f 72  |. Total free for|
00000380  20 70 72 6f 67 72 61 6d  2b 76 61 72 73 2b 73 70  | program+vars+sp|
00000390  72 62 75 66 0d 00 be 45  4d 69 64 48 69 6d 65 6d  |rbuf...EMidHimem|
000003a0  25 3d 90 2b 50 72 6f 67  6e 65 65 64 25 3a f4 20  |%=.+Progneed%:. |
000003b0  50 73 65 75 64 6f 20 48  49 4d 45 4d 20 28 74 6f  |Pseudo HIMEM (to|
000003c0  70 20 6f 66 20 70 72 6f  67 2c 20 73 74 61 72 74  |p of prog, start|
000003d0  20 6f 66 20 68 65 61 70  29 0d 00 c8 44 48 65 61  | of heap)...DHea|
000003e0  70 25 3d 4d 69 64 48 69  6d 65 6d 25 3a 48 65 61  |p%=MidHimem%:Hea|
000003f0  70 53 69 7a 65 25 3d 54  6f 74 61 6c 66 72 65 65  |pSize%=Totalfree|
00000400  25 2d 50 72 6f 67 6e 65  65 64 25 3a f4 20 53 65  |%-Progneed%:. Se|
00000410  74 20 68 65 61 70 20 2b  20 73 69 7a 65 0d 00 d2  |t heap + size...|
00000420  3e e7 48 65 61 70 53 69  7a 65 25 3c 4c 6f 77 48  |>.HeapSize%<LowH|
00000430  65 61 70 25 20 8c 20 85  20 31 2c 22 4e 6f 20 72  |eap% . . 1,"No r|
00000440  6f 6f 6d 20 74 6f 20 73  74 61 72 74 20 75 70 20  |oom to start up |
00000450  54 72 61 6e 73 6c 61 74  6f 72 22 0d 00 dc 34 d3  |Translator"...4.|
00000460  3d 4d 69 64 48 69 6d 65  6d 25 3a f4 20 4c 6f 77  |=MidHimem%:. Low|
00000470  65 72 20 68 69 6d 65 6d  20 74 6f 20 62 65 6c 6f  |er himem to belo|
00000480  77 20 73 70 72 69 74 65  20 62 75 66 66 65 72 0d  |w sprite buffer.|
00000490  00 e6 28 f2 69 6e 69 74  69 61 6c 69 73 65 3a f4  |..(.initialise:.|
000004a0  20 49 6e 69 74 69 61 6c  69 73 65 20 61 70 70 6c  | Initialise appl|
000004b0  69 63 61 74 69 6f 6e 0d  00 f0 37 f2 6d 6f 64 65  |ication...7.mode|
000004c0  5f 63 68 61 6e 67 65 28  2d 31 29 3a f4 20 52 65  |_change(-1):. Re|
000004d0  73 65 6c 65 63 74 20 63  75 72 72 65 6e 74 20 6d  |select current m|
000004e0  6f 64 65 20 74 6f 20 74  69 64 79 20 75 70 0d 00  |ode to tidy up..|
000004f0  fa a8 4c 6e 61 6d 65 24  3d a4 4f 53 76 61 72 28  |..Lname$=.OSvar(|
00000500  22 54 72 61 6e 73 6c 61  74 6f 72 24 46 69 6c 65  |"Translator$File|
00000510  22 29 3a e7 4c 6e 61 6d  65 24 3c 3e 22 22 20 8c  |"):.Lname$<>"" .|
00000520  20 c8 99 20 22 4f 53 5f  43 4c 49 22 2c 22 55 6e  | .. "OS_CLI","Un|
00000530  73 65 74 20 54 72 61 6e  73 6c 61 74 6f 72 24 46  |set Translator$F|
00000540  69 6c 65 22 3a 4c 74 79  70 65 25 3d a4 69 6d 61  |ile":Ltype%=.ima|
00000550  67 65 5f 74 79 70 65 28  4c 6e 61 6d 65 24 2c b9  |ge_type(Lname$,.|
00000560  29 3a e7 4c 74 79 70 65  25 3e 30 20 8c 20 41 63  |):.Ltype%>0 . Ac|
00000570  74 69 6f 6e 3d 41 63 74  4c 6f 61 64 3a f4 20 41  |tion=ActLoad:. A|
00000580  75 74 6f 2d 62 6f 6f 74  2c 20 70 65 6e 64 69 6e  |uto-boot, pendin|
00000590  67 20 6c 6f 61 64 0d 01  04 2d ee 20 85 20 f2 65  |g load...-. . .e|
000005a0  72 72 6f 72 28 9f 2c f6  24 2b 22 20 28 63 6f 64  |rror(.,.$+" (cod|
000005b0  65 20 22 2b c3 9e 2b 22  29 22 29 3a f2 69 63 6c  |e "+..+")"):.icl|
000005c0  6f 73 65 0d 01 0e 15 f4  20 50 6f 6c 6c 20 61 6e  |ose..... Poll an|
000005d0  64 20 61 63 74 69 6f 6e  0d 01 18 44 e7 44 61 74  |d action...D.Dat|
000005e0  61 4c 6f 61 64 52 65 66  25 20 8c 20 70 6f 6c 6c  |aLoadRef% . poll|
000005f0  6d 61 73 6b 25 3d 34 38  20 8b 20 70 6f 6c 6c 6d  |mask%=48 . pollm|
00000600  61 73 6b 25 3d 34 39 3a  f4 20 4e 6f 20 6e 75 6c  |ask%=49:. No nul|
00000610  6c 73 20 69 66 20 77 61  73 74 65 64 0d 01 22 19  |ls if wasted..".|
00000620  c8 8e 20 a4 70 6f 6c 6c  28 70 6f 6c 6c 6d 61 73  |.. .poll(pollmas|
00000630  6b 25 29 20 ca 0d 01 2c  10 20 c9 20 30 20 3a 20  |k%) ...,. . 0 : |
00000640  f2 6e 75 6c 6c 0d 01 36  12 20 c9 20 31 20 3a 20  |.null..6. . 1 : |
00000650  f2 72 65 64 72 61 77 0d  01 40 10 20 c9 20 32 20  |.redraw..@. . 2 |
00000660  3a 20 f2 6f 70 65 6e 0d  01 4a 11 20 c9 20 33 20  |: .open..J. . 3 |
00000670  3a 20 f2 63 6c 6f 73 65  0d 01 54 1f 20 20 e7 4b  |: .close..T.  .K|
00000680  69 6c 6c 20 8c 20 4b 69  6c 6c 3d a3 3a 53 6c 6f  |ill . Kill=.:Slo|
00000690  74 44 6f 77 6e 3d b9 0d  01 5e 16 20 c9 20 36 20  |tDown=...^. . 6 |
000006a0  3a 20 f2 6d 6f 75 73 65  63 6c 69 63 6b 0d 01 68  |: .mouseclick..h|
000006b0  14 20 c9 20 37 20 3a 20  f2 64 72 61 67 64 72 6f  |. . 7 : .dragdro|
000006c0  70 0d 01 72 0f 20 c9 20  38 20 3a 20 f2 6b 65 79  |p..r. . 8 : .key|
000006d0  0d 01 7c 16 20 c9 20 39  20 3a 20 f2 6d 65 6e 75  |..|. . 9 : .menu|
000006e0  73 65 6c 65 63 74 0d 01  86 17 20 c9 20 31 37 2c  |select.... . 17,|
000006f0  31 38 20 3a 20 f2 6d 65  73 73 61 67 65 0d 01 90  |18 : .message...|
00000700  05 cb 0d 01 9a 0d e7 41  63 74 69 6f 6e 20 8c 0d  |.......Action ..|
00000710  01 a4 3c 20 53 6c 6f 74  44 6f 77 6e 3d b9 3a e0  |..< SlotDown=.:.|
00000720  3d 26 31 30 30 30 30 30  30 3a f2 6e 65 77 5f 73  |=&1000000:.new_s|
00000730  6c 6f 74 3a d3 3d 4d 69  64 48 69 6d 65 6d 25 3a  |lot:.=MidHimem%:|
00000740  f4 20 43 6c 61 69 6d 20  6d 61 78 0d 01 ae 10 20  |. Claim max.... |
00000750  c8 8e 20 41 63 74 69 6f  6e 20 ca 0d 01 b8 22 20  |.. Action ...." |
00000760  20 c9 20 41 63 74 4c 6f  61 64 20 3a 20 f4 20 4c  | . ActLoad : . L|
00000770  6f 61 64 20 6e 65 77 20  69 6d 61 67 65 0d 01 c2  |oad new image...|
00000780  23 20 20 20 41 63 74 69  6f 6e 3d 30 3a f4 20 52  |#   Action=0:. R|
00000790  65 73 65 74 20 61 63 74  69 6f 6e 20 66 6c 61 67  |eset action flag|
000007a0  0d 01 cc 36 20 20 20 4f  6b 3d a4 6c 6f 61 64 28  |...6   Ok=.load(|
000007b0  4c 74 79 70 65 25 2c 4c  6e 61 6d 65 24 29 3a f4  |Ltype%,Lname$):.|
000007c0  20 41 74 74 65 6d 70 74  20 74 6f 20 6c 6f 61 64  | Attempt to load|
000007d0  20 69 6d 61 67 65 0d 01  d6 1f 20 20 20 e7 4f 6b  | image....   .Ok|
000007e0  20 8c 20 41 63 74 69 6f  6e 3d 41 63 74 50 6f 73  | . Action=ActPos|
000007f0  74 4c 6f 61 64 0d 01 e0  22 20 20 c9 20 41 63 74  |tLoad..."  . Act|
00000800  52 6f 74 61 74 65 20 3a  20 f4 20 52 6f 74 61 74  |Rotate : . Rotat|
00000810  65 20 69 6d 61 67 65 0d  01 ea 23 20 20 20 41 63  |e image...#   Ac|
00000820  74 69 6f 6e 3d 30 3a f4  20 52 65 73 65 74 20 61  |tion=0:. Reset a|
00000830  63 74 69 6f 6e 20 66 6c  61 67 0d 01 f4 38 20 20  |ction flag...8  |
00000840  20 66 72 65 65 25 3d 48  65 61 70 25 2b 48 65 61  | free%=Heap%+Hea|
00000850  70 53 69 7a 65 25 2d 53  70 72 45 6e 64 25 3a f4  |pSize%-SprEnd%:.|
00000860  20 46 72 65 65 20 61 62  6f 76 65 20 73 70 72 69  | Free above spri|
00000870  74 65 0d 01 fe 16 20 20  20 e7 66 72 65 65 25 3e  |te....   .free%>|
00000880  38 2a 31 30 32 34 20 8c  0d 02 08 71 20 20 20 20  |8*1024 ....q    |
00000890  f2 68 6f 75 72 5f 6f 6e  3a f2 76 61 72 28 22 72  |.hour_on:.var("r|
000008a0  6f 74 62 22 2c 53 70 72  45 6e 64 25 29 3a f2 76  |otb",SprEnd%):.v|
000008b0  61 72 28 22 72 6f 74 73  22 2c 66 72 65 65 25 29  |ar("rots",free%)|
000008c0  3a c8 99 20 22 54 72 61  6e 73 6c 61 74 6f 72 5f  |:.. "Translator_|
000008d0  52 6f 74 61 74 65 22 2c  53 70 72 50 74 72 25 3a  |Rotate",SprPtr%:|
000008e0  f2 68 6f 75 72 5f 6f 66  66 3a f4 20 52 6f 74 61  |.hour_off:. Rota|
000008f0  74 65 20 73 70 72 69 74  65 0d 02 12 40 20 20 20  |te sprite...@   |
00000900  20 53 70 72 69 74 65 25  21 31 32 3d 53 70 72 69  | Sprite%!12=Spri|
00000910  74 65 25 21 38 2b 21 28  53 70 72 69 74 65 25 2b  |te%!8+!(Sprite%+|
00000920  53 70 72 69 74 65 25 21  38 29 3a c8 94 20 53 70  |Sprite%!8):.. Sp|
00000930  72 48 25 2c 53 70 72 57  25 0d 02 1c 2c 20 20 20  |rH%,SprW%...,   |
00000940  20 f2 6e 65 77 5f 69 6d  61 67 65 5f 77 69 6e 64  | .new_image_wind|
00000950  6f 77 3a f4 20 4e 65 77  20 69 6d 61 67 65 20 77  |ow:. New image w|
00000960  69 6e 64 6f 77 0d 02 26  31 20 20 20 cc 20 f2 65  |indow..&1   . .e|
00000970  72 72 6f 72 28 2d 31 2c  22 4e 6f 20 72 6f 6f 6d  |rror(-1,"No room|
00000980  20 66 6f 72 20 72 6f 74  61 74 65 20 62 75 66 66  | for rotate buff|
00000990  65 72 20 21 22 29 0d 02  30 08 20 20 20 cd 0d 02  |er !")..0.   ...|
000009a0  3a 06 20 cb 0d 02 44 05  cd 0d 02 4e 0f e7 53 6c  |:. ...D....N..Sl|
000009b0  6f 74 44 6f 77 6e 20 8c  0d 02 58 30 20 e7 49 6d  |otDown ...X0 .Im|
000009c0  67 20 8c 20 e0 3d 28 53  70 72 45 6e 64 25 2b 31  |g . .=(SprEnd%+1|
000009d0  30 32 33 29 80 ac 31 30  32 33 20 8b 20 e0 3d 4d  |023)..1023 . .=M|
000009e0  69 64 48 69 6d 65 6d 25  0d 02 62 1a 20 f2 6e 65  |idHimem%..b. .ne|
000009f0  77 5f 73 6c 6f 74 3a d3  3d 4d 69 64 48 69 6d 65  |w_slot:.=MidHime|
00000a00  6d 25 0d 02 6c 0f 20 53  6c 6f 74 44 6f 77 6e 3d  |m%..l. SlotDown=|
00000a10  a3 0d 02 76 05 cd 0d 02  80 1b e7 28 41 63 74 69  |...v.......(Acti|
00000a20  6f 6e 3d 41 63 74 50 6f  73 74 4c 6f 61 64 29 20  |on=ActPostLoad) |
00000a30  8c 0d 02 8a 21 20 41 63  74 69 6f 6e 3d 30 3a f4  |....! Action=0:.|
00000a40  20 52 65 73 65 74 20 61  63 74 69 6f 6e 20 66 6c  | Reset action fl|
00000a50  61 67 0d 02 94 2c 20 f2  73 65 74 5f 6d 6f 64 65  |ag..., .set_mode|
00000a60  28 49 6d 67 4d 6f 64 65  25 29 3a f4 20 53 65 6c  |(ImgMode%):. Sel|
00000a70  65 63 74 20 69 6d 61 67  65 20 6d 6f 64 65 0d 02  |ect image mode..|
00000a80  9e 29 20 5a 6f 6f 6d 58  3d 31 3a 5a 6f 6f 6d 59  |.) ZoomX=1:ZoomY|
00000a90  3d 31 3a f4 20 52 65 73  65 74 20 7a 6f 6f 6d 20  |=1:. Reset zoom |
00000aa0  66 61 63 74 6f 72 73 0d  02 a8 41 20 e7 41 75 74  |factors...A .Aut|
00000ab0  6f 50 61 6c 20 8c 20 f2  73 65 74 5f 70 61 6c 65  |oPal . .set_pale|
00000ac0  74 74 65 28 31 29 3a f4  20 53 65 6c 65 63 74 20  |tte(1):. Select |
00000ad0  69 6d 61 67 65 20 70 61  6c 65 74 74 65 20 69 66  |image palette if|
00000ae0  20 65 6e 61 62 6c 65 64  0d 02 b2 2d 20 f2 6e 65  | enabled...- .ne|
00000af0  77 5f 69 6d 61 67 65 5f  77 69 6e 64 6f 77 3a f4  |w_image_window:.|
00000b00  20 4f 70 65 6e 20 77 69  6e 64 6f 77 20 6f 6e 20  | Open window on |
00000b10  69 6d 61 67 65 0d 02 bc  05 cd 0d 02 c6 44 e5 20  |image........D. |
00000b20  8d 54 4e 41 3a f4 20 53  6f 72 72 79 2c 20 49 20  |.TNA:. Sorry, I |
00000b30  68 61 76 65 20 74 6f 2e  20 43 75 72 72 65 6e 74  |have to. Current|
00000b40  20 42 41 53 49 43 20 72  65 73 74 72 69 63 74 69  | BASIC restricti|
00000b50  6f 6e 73 20 77 69 74 68  20 45 4e 44 3d 2e 0d 02  |ons with END=...|
00000b60  d0 05 20 0d 02 da 0e dd  f2 6e 65 77 5f 73 6c 6f  |.. ......new_slo|
00000b70  74 0d 02 e4 1e f4 20 53  6c 6f 74 20 63 68 61 6e  |t..... Slot chan|
00000b80  67 65 64 2c 20 72 65 73  65 74 20 69 6e 66 6f 0d  |ged, reset info.|
00000b90  02 ee 2c 48 65 61 70 53  69 7a 65 25 3d 93 2d 4d  |..,HeapSize%=.-M|
00000ba0  69 64 48 69 6d 65 6d 25  3a f4 20 4e 65 77 20 73  |idHimem%:. New s|
00000bb0  69 7a 65 20 6f 66 20 68  65 61 70 0d 02 f8 05 e1  |ize of heap.....|
00000bc0  0d 03 02 04 0d 03 0c 10  dd f2 6d 65 6e 75 73 65  |..........menuse|
00000bd0  6c 65 63 74 0d 03 16 3f  c8 99 20 57 44 65 63 6f  |lect...?.. WDeco|
00000be0  64 65 4d 25 2c 2c 6d 65  6e 75 31 2c 70 6f 6c 6c  |deM%,,menu1,poll|
00000bf0  2c c4 31 30 30 2c 22 20  22 29 20 b8 20 2c 2c 2c  |,.100," ") . ,,,|
00000c00  73 65 6c 65 63 74 24 3a  f4 20 53 65 6c 65 63 74  |select$:. Select|
00000c10  69 6f 6e 0d 03 20 2d f4  20 44 65 63 6f 64 65 20  |ion.. -. Decode |
00000c20  6d 61 69 6e 2f 73 75 62  2f 73 75 62 73 75 62 20  |main/sub/subsub |
00000c30  73 65 6c 65 63 74 69 6f  6e 20 73 74 72 69 6e 67  |selection string|
00000c40  0d 03 2a 2a 6d 65 6e 75  70 61 74 68 24 3d 73 65  |..**menupath$=se|
00000c50  6c 65 63 74 24 3a f4 20  52 65 6d 65 6d 62 65 72  |lect$:. Remember|
00000c60  20 6d 65 6e 75 20 70 61  74 68 0d 03 34 66 73 65  | menu path..4fse|
00000c70  6c 65 63 74 32 3d a3 3a  73 65 6c 65 63 74 33 3d  |lect2=.:select3=|
00000c80  a3 3a 73 65 6c 65 63 74  34 3d a3 3a 73 65 6c 65  |.:select4=.:sele|
00000c90  63 74 35 3d a3 3a 73 65  6c 65 63 74 32 24 3d 22  |ct5=.:select2$="|
00000ca0  22 3a 73 65 6c 65 63 74  33 24 3d 22 22 3a 73 65  |":select3$="":se|
00000cb0  6c 65 63 74 34 24 3d 22  22 3a 73 65 6c 65 63 74  |lect4$="":select|
00000cc0  35 24 3d 22 22 3a f4 20  44 65 66 61 75 6c 74 73  |5$="":. Defaults|
00000cd0  0d 03 3e bd 70 25 3d a7  73 65 6c 65 63 74 24 2c  |..>.p%=.select$,|
00000ce0  22 2e 22 29 3a e7 70 25  3e 30 20 8c 20 73 65 6c  |"."):.p%>0 . sel|
00000cf0  65 63 74 32 3d b9 3a 73  65 6c 65 63 74 32 24 3d  |ect2=.:select2$=|
00000d00  c1 73 65 6c 65 63 74 24  2c 70 25 2b 31 29 3a 73  |.select$,p%+1):s|
00000d10  65 6c 65 63 74 24 3d c0  73 65 6c 65 63 74 24 2c  |elect$=.select$,|
00000d20  70 25 2d 31 29 3a 70 25  3d a7 73 65 6c 65 63 74  |p%-1):p%=.select|
00000d30  32 24 2c 22 2e 22 29 3a  e7 70 25 3e 30 20 8c 20  |2$,"."):.p%>0 . |
00000d40  73 65 6c 65 63 74 33 3d  b9 3a 73 65 6c 65 63 74  |select3=.:select|
00000d50  33 24 3d c1 73 65 6c 65  63 74 32 24 2c 70 25 2b  |3$=.select2$,p%+|
00000d60  31 29 3a 73 65 6c 65 63  74 32 24 3d c0 73 65 6c  |1):select2$=.sel|
00000d70  65 63 74 32 24 2c 70 25  2d 31 29 3a 70 25 3d a7  |ect2$,p%-1):p%=.|
00000d80  73 65 6c 65 63 74 33 24  2c 22 2e 22 29 0d 03 48  |select3$,".")..H|
00000d90  9d e7 70 25 3e 30 20 8c  20 73 65 6c 65 63 74 34  |..p%>0 . select4|
00000da0  3d b9 3a 73 65 6c 65 63  74 34 24 3d c1 73 65 6c  |=.:select4$=.sel|
00000db0  65 63 74 33 24 2c 70 25  2b 31 29 3a 73 65 6c 65  |ect3$,p%+1):sele|
00000dc0  63 74 33 24 3d c0 73 65  6c 65 63 74 33 24 2c 70  |ct3$=.select3$,p|
00000dd0  25 2d 31 29 3a 70 25 3d  a7 73 65 6c 65 63 74 34  |%-1):p%=.select4|
00000de0  24 2c 22 2e 22 29 3a e7  70 25 3e 30 20 8c 20 73  |$,"."):.p%>0 . s|
00000df0  65 6c 65 63 74 35 3d b9  3a 73 65 6c 65 63 74 35  |elect5=.:select5|
00000e00  24 3d c1 73 65 6c 65 63  74 34 24 2c 70 25 2b 31  |$=.select4$,p%+1|
00000e10  29 3a 73 65 6c 65 63 74  34 24 3d c0 73 65 6c 65  |):select4$=.sele|
00000e20  63 74 34 24 2c 70 25 2d  31 29 0d 03 52 34 f4 20  |ct4$,p%-1)..R4. |
00000e30  46 69 6c 74 65 72 20 63  6c 69 63 6b 73 20 6f 6e  |Filter clicks on|
00000e40  20 72 6f 6f 74 73 20 6f  66 20 65 6e 74 72 69 65  | roots of entrie|
00000e50  73 20 77 69 74 68 20 73  75 62 6d 65 6e 75 0d 03  |s with submenu..|
00000e60  5c 12 c8 8e 20 6d 65 6e  75 70 61 74 68 24 20 ca  |\... menupath$ .|
00000e70  0d 03 66 5c 20 c9 20 22  49 6d 61 67 65 20 69 6e  |..f\ . "Image in|
00000e80  66 6f 22 2c 22 50 6f 70  20 75 70 22 2c 22 50 72  |fo","Pop up","Pr|
00000e90  6f 63 65 73 73 22 2c 22  4d 61 6e 69 70 75 6c 61  |ocess","Manipula|
00000ea0  74 65 22 2c 22 45 78 61  6d 69 6e 65 22 2c 22 4d  |te","Examine","M|
00000eb0  69 73 63 22 20 3a 20 e7  73 65 6c 65 63 74 32 20  |isc" : .select2 |
00000ec0  8b 20 73 65 6c 65 63 74  24 3d 22 22 0d 03 70 b7  |. select$=""..p.|
00000ed0  20 c9 20 22 50 6f 70 20  75 70 2e 4d 6f 64 65 20  | . "Pop up.Mode |
00000ee0  73 65 74 22 2c 22 50 72  6f 63 65 73 73 2e 43 6f  |set","Process.Co|
00000ef0  6c 6f 75 72 22 2c 22 50  72 6f 63 65 73 73 2e 53  |lour","Process.S|
00000f00  70 72 69 74 65 20 6f 75  74 70 75 74 22 2c 22 50  |prite output","P|
00000f10  72 6f 63 65 73 73 2e 53  63 61 6c 69 6e 67 22 2c  |rocess.Scaling",|
00000f20  22 50 72 6f 63 65 73 73  2e 4d 69 73 63 22 2c 22  |"Process.Misc","|
00000f30  45 78 61 6d 69 6e 65 2e  5a 6f 6f 6d 22 2c 22 4d  |Examine.Zoom","M|
00000f40  61 6e 69 70 75 6c 61 74  65 2e 4d 69 72 72 6f 72  |anipulate.Mirror|
00000f50  22 2c 22 4d 69 73 63 2e  53 61 76 65 22 2c 22 4d  |","Misc.Save","M|
00000f60  69 73 63 2e 53 74 61 74  75 73 22 20 3a 20 e7 73  |isc.Status" : .s|
00000f70  65 6c 65 63 74 33 20 8b  20 73 65 6c 65 63 74 24  |elect3 . select$|
00000f80  3d 22 22 0d 03 7a de 20  c9 20 22 50 72 6f 63 65  |=""..z. . "Proce|
00000f90  73 73 2e 53 70 72 69 74  65 20 6f 75 74 70 75 74  |ss.Sprite output|
00000fa0  2e 4f 75 74 70 75 74 20  6d 6f 64 65 22 2c 22 50  |.Output mode","P|
00000fb0  72 6f 63 65 73 73 2e 53  70 72 69 74 65 20 6f 75  |rocess.Sprite ou|
00000fc0  74 70 75 74 2e 4f 75 74  70 75 74 20 70 61 6c 65  |tput.Output pale|
00000fd0  74 74 65 22 2c 22 50 72  6f 63 65 73 73 2e 53 70  |tte","Process.Sp|
00000fe0  72 69 74 65 20 6f 75 74  70 75 74 2e 45 72 72 6f  |rite output.Erro|
00000ff0  72 20 73 70 72 65 61 64  69 6e 67 22 2c 22 50 72  |r spreading","Pr|
00001000  6f 63 65 73 73 2e 53 63  61 6c 69 6e 67 2e 78 22  |ocess.Scaling.x"|
00001010  2c 22 50 72 6f 63 65 73  73 2e 53 63 61 6c 69 6e  |,"Process.Scalin|
00001020  67 2e 79 22 2c 22 45 78  61 6d 69 6e 65 2e 5a 6f  |g.y","Examine.Zo|
00001030  6f 6d 2e 49 6e 22 2c 22  45 78 61 6d 69 6e 65 2e  |om.In","Examine.|
00001040  5a 6f 6f 6d 2e 4f 75 74  22 20 3a 20 e7 73 65 6c  |Zoom.Out" : .sel|
00001050  65 63 74 34 20 8b 20 73  65 6c 65 63 74 24 3d 22  |ect4 . select$="|
00001060  22 0d 03 84 05 cb 0d 03  8e 10 c8 8e 20 73 65 6c  |"........... sel|
00001070  65 63 74 24 20 ca 0d 03  98 18 20 c9 20 22 22 20  |ect$ ..... . "" |
00001080  3a 20 f4 20 44 6f 20 6e  6f 74 68 69 6e 67 0d 03  |: . Do nothing..|
00001090  a2 1e 20 c9 20 22 51 75  69 74 22 20 3a 20 f4 20  |.. . "Quit" : . |
000010a0  51 75 69 74 20 70 72 6f  67 72 61 6d 0d 03 ac 1d  |Quit program....|
000010b0  20 20 f2 64 69 65 3a f4  20 54 69 64 79 20 75 70  |  .die:. Tidy up|
000010c0  20 61 6e 64 20 65 78 69  74 0d 03 b6 22 20 c9 20  | and exit..." . |
000010d0  22 50 6f 70 20 75 70 22  20 3a 20 f4 20 50 6f 70  |"Pop up" : . Pop|
000010e0  20 75 70 20 6f 70 74 69  6f 6e 73 0d 03 c0 13 20  | up options.... |
000010f0  20 c8 8e 20 73 65 6c 65  63 74 32 24 20 ca 0d 03  | .. select2$ ...|
00001100  ca 29 20 20 20 c9 20 22  41 75 74 6f 20 6d 6f 64  |.)   . "Auto mod|
00001110  65 22 20 3a 20 41 75 74  6f 4d 6f 64 65 3d ac 41  |e" : AutoMode=.A|
00001120  75 74 6f 4d 6f 64 65 0d  03 d4 2a 20 20 20 c9 20  |utoMode...*   . |
00001130  22 41 75 74 6f 20 70 61  6c 65 74 74 65 22 20 3a  |"Auto palette" :|
00001140  20 41 75 74 6f 50 61 6c  3d ac 41 75 74 6f 50 61  | AutoPal=.AutoPa|
00001150  6c 0d 03 de 2b 20 20 20  c9 20 22 4d 6f 64 65 20  |l...+   . "Mode |
00001160  73 65 74 22 20 3a 20 f4  20 53 65 6c 65 63 74 20  |set" : . Select |
00001170  6e 65 77 20 6d 6f 64 65  20 73 65 74 0d 03 e8 19  |new mode set....|
00001180  20 20 20 20 c8 8e 20 c0  73 65 6c 65 63 74 33 24  |    .. .select3$|
00001190  2c 34 29 20 ca 0d 03 f2  29 20 20 20 20 20 c9 20  |,4) ....)     . |
000011a0  22 52 6f 6f 74 22 20 3a  20 f4 20 4e 6f 20 73 65  |"Root" : . No se|
000011b0  6c 65 63 74 69 6f 6e 20  28 72 6f 6f 74 29 0d 03  |lection (root)..|
000011c0  fc 2b 20 20 20 20 20 c9  20 22 4e 6f 6e 65 22 20  |.+     . "None" |
000011d0  3a 20 4d 6f 64 65 53 65  74 3d 30 3a f4 20 4e 6f  |: ModeSet=0:. No|
000011e0  20 6d 6f 64 65 20 73 65  74 0d 04 06 37 20 20 20  | mode set...7   |
000011f0  20 20 c9 20 22 4e 6f 72  6d 22 20 3a 20 4d 6f 64  |  . "Norm" : Mod|
00001200  65 53 65 74 3d 31 3a f4  20 4e 6f 72 6d 61 6c 20  |eSet=1:. Normal |
00001210  6d 6f 6e 69 74 6f 72 20  6d 6f 64 65 20 73 65 74  |monitor mode set|
00001220  0d 04 10 3a 20 20 20 20  20 c9 20 22 4d 75 6c 74  |...:     . "Mult|
00001230  22 20 3a 20 4d 6f 64 65  53 65 74 3d 32 3a f4 20  |" : ModeSet=2:. |
00001240  4d 75 6c 74 69 73 79 6e  63 20 6d 6f 6e 69 74 6f  |Multisync monito|
00001250  72 20 6d 6f 64 65 20 73  65 74 0d 04 1a 35 20 20  |r mode set...5  |
00001260  20 20 20 7f 20 3a 20 f4  20 55 73 65 72 20 6d 6f  |   . : . User mo|
00001270  64 65 20 73 65 74 2c 20  63 68 65 63 6b 20 61 6e  |de set, check an|
00001280  64 20 69 66 20 6f 6b 2c  20 63 68 61 6e 67 65 0d  |d if ok, change.|
00001290  04 24 98 20 20 20 20 20  20 73 24 3d 73 65 6c 65  |.$.      s$=sele|
000012a0  63 74 33 24 3a 70 25 3d  a7 73 24 2c 22 2c 22 29  |ct3$:p%=.s$,",")|
000012b0  3a e7 70 25 3e 30 20 8c  20 6d 31 25 3d bb 73 24  |:.p%>0 . m1%=.s$|
000012c0  3a 73 24 3d c1 73 24 2c  70 25 2b 31 29 3a 70 25  |:s$=.s$,p%+1):p%|
000012d0  3d a7 73 24 2c 22 2c 22  29 3a e7 70 25 3e 30 20  |=.s$,","):.p%>0 |
000012e0  8c 20 6d 32 25 3d bb 73  24 3a 73 24 3d c1 73 24  |. m2%=.s$:s$=.s$|
000012f0  2c 70 25 2b 31 29 3a 70  25 3d a7 73 24 2c 22 2c  |,p%+1):p%=.s$,",|
00001300  22 29 3a e7 70 25 3e 30  20 8c 20 6d 33 25 3d bb  |"):.p%>0 . m3%=.|
00001310  73 24 3a 73 24 3d c1 73  24 2c 70 25 2b 31 29 3a  |s$:s$=.s$,p%+1):|
00001320  6d 34 25 3d bb 73 24 0d  04 2e da 20 20 20 20 20  |m4%=.s$....     |
00001330  20 e7 70 25 3e 30 20 8c  20 55 73 65 72 4d 6f 64  | .p%>0 . UserMod|
00001340  65 53 65 74 25 28 31 29  3d 6d 31 25 3a 55 73 65  |eSet%(1)=m1%:Use|
00001350  72 4d 6f 64 65 53 65 74  25 28 32 29 3d 6d 32 25  |rModeSet%(2)=m2%|
00001360  3a 55 73 65 72 4d 6f 64  65 53 65 74 25 28 33 29  |:UserModeSet%(3)|
00001370  3d 6d 33 25 3a 55 73 65  72 4d 6f 64 65 53 65 74  |=m3%:UserModeSet|
00001380  25 28 34 29 3d 6d 34 25  3a 4d 6f 64 65 53 65 74  |%(4)=m4%:ModeSet|
00001390  3d 33 20 8b 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |=3 . .error(-1,"|
000013a0  42 61 64 20 75 73 65 72  20 6d 6f 64 65 20 73 65  |Bad user mode se|
000013b0  74 2e 20 50 6c 65 61 73  65 20 75 73 65 20 27 3c  |t. Please use '<|
000013c0  32 63 6f 6c 6d 6f 64 65  3e 2c 3c 34 63 6f 6c 6d  |2colmode>,<4colm|
000013d0  6f 64 65 3e 2c 3c 31 36  63 6f 6c 6d 6f 64 65 3e  |ode>,<16colmode>|
000013e0  2c 3c 32 35 36 63 6f 6c  6d 6f 64 65 3e 27 2c 20  |,<256colmode>', |
000013f0  65 2e 67 2e 20 27 31 2c  32 2c 33 2c 34 27 2e 22  |e.g. '1,2,3,4'."|
00001400  29 0d 04 38 09 20 20 20  20 cb 0d 04 42 29 20 20  |)..8.    ...B)  |
00001410  20 c9 20 22 41 75 74 6f  20 7a 6f 6f 6d 22 20 3a  | . "Auto zoom" :|
00001420  20 41 75 74 6f 5a 6f 6f  6d 3d ac 41 75 74 6f 5a  | AutoZoom=.AutoZ|
00001430  6f 6f 6d 0d 04 4c 29 20  20 20 c9 20 22 56 69 65  |oom..L)   . "Vie|
00001440  77 20 6d 6f 64 65 22 20  3a 20 56 69 65 77 4d 6f  |w mode" : ViewMo|
00001450  64 65 3d ac 56 69 65 77  4d 6f 64 65 0d 04 56 07  |de=.ViewMode..V.|
00001460  20 20 cb 0d 04 60 27 20  c9 20 22 50 72 6f 63 65  |  ...`' . "Proce|
00001470  73 73 22 20 3a 20 f4 20  50 72 6f 63 65 73 73 69  |ss" : . Processi|
00001480  6e 67 20 6f 70 74 69 6f  6e 73 0d 04 6a 13 20 20  |ng options..j.  |
00001490  c8 8e 20 73 65 6c 65 63  74 32 24 20 ca 0d 04 74  |.. select2$ ...t|
000014a0  2f 20 20 20 c9 20 22 43  6f 6c 6f 75 72 22 20 3a  |/   . "Colour" :|
000014b0  20 f4 20 43 6f 6c 6f 75  72 20 70 72 6f 63 65 73  | . Colour proces|
000014c0  73 69 6e 67 20 6f 70 74  69 6f 6e 73 0d 04 7e 15  |sing options..~.|
000014d0  20 20 20 20 c8 8e 20 73  65 6c 65 63 74 33 24 20  |    .. select3$ |
000014e0  ca 0d 04 88 35 20 20 20  20 20 c9 20 22 42 6c 61  |....5     . "Bla|
000014f0  63 6b 20 61 6e 64 20 77  68 69 74 65 22 20 3a 20  |ck and white" : |
00001500  42 6c 61 63 6b 57 68 69  74 65 3d ac 42 6c 61 63  |BlackWhite=.Blac|
00001510  6b 57 68 69 74 65 0d 04  92 36 20 20 20 20 20 c9  |kWhite...6     .|
00001520  20 22 43 6f 72 72 65 63  74 20 67 61 6d 6d 61 22  | "Correct gamma"|
00001530  20 3a 20 f4 20 47 61 6d  6d 61 20 63 6f 72 72 65  | : . Gamma corre|
00001540  63 74 69 6f 6e 20 66 61  63 74 6f 72 0d 04 9c 5b  |ction factor...[|
00001550  20 20 20 20 20 20 e7 28  73 65 6c 65 63 74 34 24  |      .(select4$|
00001560  2b 73 65 6c 65 63 74 35  24 29 3d 22 22 20 8c 20  |+select5$)="" . |
00001570  47 61 6d 6d 61 46 3d 31  20 8b 20 47 61 6d 6d 61  |GammaF=1 . Gamma|
00001580  46 3d bb 28 73 65 6c 65  63 74 34 24 2b 22 2e 22  |F=.(select4$+"."|
00001590  2b 73 65 6c 65 63 74 35  24 29 3a f4 20 4e 65 77  |+select5$):. New|
000015a0  20 66 61 63 74 6f 72 0d  04 a6 3a 20 20 20 20 20  | factor...:     |
000015b0  20 47 61 6d 6d 61 3d 28  47 61 6d 6d 61 46 3c 3e  | Gamma=(GammaF<>|
000015c0  31 29 80 28 47 61 6d 6d  61 46 3e 30 29 3a f4 20  |1).(GammaF>0):. |
000015d0  47 61 6d 6d 61 20 69 6e  20 65 66 66 65 63 74 20  |Gamma in effect |
000015e0  3f 0d 04 b0 36 20 20 20  20 20 c9 20 22 43 6f 72  |?...6     . "Cor|
000015f0  72 65 63 74 20 62 6c 61  63 6b 22 20 3a 20 f4 20  |rect black" : . |
00001600  42 6c 61 63 6b 20 63 6f  72 72 65 63 74 69 6f 6e  |Black correction|
00001610  20 66 61 63 74 6f 72 0d  04 ba 43 20 20 20 20 20  | factor...C     |
00001620  20 e7 73 65 6c 65 63 74  34 24 3d 22 22 20 8c 20  | .select4$="" . |
00001630  42 6c 61 63 6b 46 3d 30  20 8b 20 42 6c 61 63 6b  |BlackF=0 . Black|
00001640  46 3d bb 28 73 65 6c 65  63 74 34 24 29 3a f4 20  |F=.(select4$):. |
00001650  4e 65 77 20 66 61 63 74  6f 72 0d 04 c4 3a 20 20  |New factor...:  |
00001660  20 20 20 20 42 6c 61 63  6b 3d 28 42 6c 61 63 6b  |    Black=(Black|
00001670  46 3c 3e 30 29 3a f4 20  42 6c 61 63 6b 20 63 6f  |F<>0):. Black co|
00001680  72 72 65 63 74 69 6f 6e  20 69 6e 20 65 66 66 65  |rrection in effe|
00001690  63 74 20 3f 0d 04 ce 28  20 20 20 20 20 c9 20 22  |ct ?...(     . "|
000016a0  45 78 70 61 6e 64 20 72  61 6e 67 65 22 20 3a 20  |Expand range" : |
000016b0  52 61 6e 67 65 3d ac 52  61 6e 67 65 0d 04 d8 2e  |Range=.Range....|
000016c0  20 20 20 20 20 c9 20 22  49 6e 76 65 72 74 20 52  |     . "Invert R|
000016d0  47 42 22 20 3a 20 49 6e  76 65 72 74 52 47 42 3d  |GB" : InvertRGB=|
000016e0  ac 49 6e 76 65 72 74 52  47 42 0d 04 e2 09 20 20  |.InvertRGB....  |
000016f0  20 20 cb 0d 04 ec 32 20  20 20 c9 20 22 53 70 72  |  ....2   . "Spr|
00001700  69 74 65 20 6f 75 74 70  75 74 22 20 3a 20 f4 20  |ite output" : . |
00001710  53 70 72 69 74 65 20 6f  75 74 70 75 74 20 6f 70  |Sprite output op|
00001720  74 69 6f 6e 73 0d 04 f6  15 20 20 20 20 c8 8e 20  |tions....    .. |
00001730  73 65 6c 65 63 74 33 24  20 ca 0d 05 00 39 20 20  |select3$ ....9  |
00001740  20 20 20 c9 20 22 4f 75  74 70 75 74 20 6d 6f 64  |   . "Output mod|
00001750  65 22 20 3a 20 f4 20 43  68 61 6e 67 65 20 6f 75  |e" : . Change ou|
00001760  74 70 75 74 20 6d 6f 64  65 20 73 65 6c 65 63 74  |tput mode select|
00001770  69 6f 6e 0d 05 0a 32 20  20 20 20 20 20 e7 73 65  |ion...2      .se|
00001780  6c 65 63 74 34 24 3d 22  41 75 74 6f 22 20 8c 20  |lect4$="Auto" . |
00001790  4f 75 74 4d 6f 64 65 3d  31 20 8b 20 4f 75 74 4d  |OutMode=1 . OutM|
000017a0  6f 64 65 3d 32 0d 05 14  3f 20 20 20 20 20 c9 20  |ode=2...?     . |
000017b0  22 4f 75 74 70 75 74 20  70 61 6c 65 74 74 65 22  |"Output palette"|
000017c0  20 3a 20 f4 20 43 68 61  6e 67 65 20 6f 75 74 70  | : . Change outp|
000017d0  75 74 20 70 61 6c 65 74  74 65 20 73 65 6c 65 63  |ut palette selec|
000017e0  74 69 6f 6e 0d 05 1e 54  20 20 20 20 20 20 e7 73  |tion...T      .s|
000017f0  65 6c 65 63 74 34 24 3d  22 43 75 72 72 65 6e 74  |elect4$="Current|
00001800  22 20 8c 20 4f 75 74 50  61 6c 3d 31 20 8b 20 e7  |" . OutPal=1 . .|
00001810  73 65 6c 65 63 74 34 24  3d 22 44 65 66 61 75 6c  |select4$="Defaul|
00001820  74 22 20 8c 20 4f 75 74  50 61 6c 3d 32 20 8b 20  |t" . OutPal=2 . |
00001830  4f 75 74 50 61 6c 3d 33  0d 05 28 34 20 20 20 20  |OutPal=3..(4    |
00001840  20 c9 20 22 45 72 72 6f  72 20 73 70 72 65 61 64  | . "Error spread|
00001850  69 6e 67 22 20 3a 20 f4  20 53 65 74 20 65 72 72  |ing" : . Set err|
00001860  6f 72 20 73 70 72 65 61  64 69 6e 67 0d 05 32 17  |or spreading..2.|
00001870  20 20 20 20 20 20 c8 8e  20 73 65 6c 65 63 74 34  |      .. select4|
00001880  24 20 ca 0d 05 3c 23 20  20 20 20 20 20 20 c9 20  |$ ...<#       . |
00001890  22 53 69 6d 70 6c 65 22  20 3a 20 45 72 72 53 70  |"Simple" : ErrSp|
000018a0  72 65 61 64 3d 31 0d 05  46 2c 20 20 20 20 20 20  |read=1..F,      |
000018b0  20 c9 20 22 46 6c 6f 79  64 20 53 74 65 69 6e 62  | . "Floyd Steinb|
000018c0  65 72 67 22 20 3a 20 45  72 72 53 70 72 65 61 64  |erg" : ErrSpread|
000018d0  3d 32 0d 05 50 20 20 20  20 20 20 20 20 c9 20 22  |=2..P        . "|
000018e0  4f 66 66 22 20 3a 20 45  72 72 53 70 72 65 61 64  |Off" : ErrSpread|
000018f0  3d 30 0d 05 5a 0b 20 20  20 20 20 20 cb 0d 05 64  |=0..Z.      ...d|
00001900  25 20 20 20 20 20 c9 20  22 5a 69 67 20 7a 61 67  |%     . "Zig zag|
00001910  22 20 3a 20 5a 69 67 5a  61 67 3d ac 5a 69 67 5a  |" : ZigZag=.ZigZ|
00001920  61 67 0d 05 6e 09 20 20  20 20 cb 0d 05 78 31 20  |ag..n.    ...x1 |
00001930  20 20 c9 20 22 43 6c 65  61 72 20 6f 75 74 70 75  |  . "Clear outpu|
00001940  74 22 20 3a 20 f4 20 43  6c 65 61 72 20 6f 75 74  |t" : . Clear out|
00001950  70 75 74 20 66 69 6c 65  20 6f 66 66 0d 05 82 3a  |put file off...:|
00001960  20 20 20 20 e7 43 6c 65  61 72 46 69 6c 65 20 8c  |    .ClearFile .|
00001970  20 c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 36 2c  | .. "OS_File",6,|
00001980  43 6c 65 61 72 53 61 76  65 24 3a 43 6c 65 61 72  |ClearSave$:Clear|
00001990  46 69 6c 65 3d a3 0d 05  8c 2b 20 20 20 c9 20 22  |File=....+   . "|
000019a0  53 63 61 6c 69 6e 67 22  20 3a 20 f4 20 43 68 61  |Scaling" : . Cha|
000019b0  6e 67 65 20 73 63 61 6c  65 20 66 61 63 74 6f 72  |nge scale factor|
000019c0  73 0d 05 96 23 20 20 20  20 78 6d 25 3d 2d 31 3a  |s...#    xm%=-1:|
000019d0  79 6d 25 3d 2d 31 3a 78  64 25 3d 2d 31 3a 79 64  |ym%=-1:xd%=-1:yd|
000019e0  25 3d 2d 31 0d 05 a0 15  20 20 20 20 c8 8e 20 73  |%=-1....    .. s|
000019f0  65 6c 65 63 74 33 24 20  ca 0d 05 aa 2a 20 20 20  |elect3$ ....*   |
00001a00  20 20 c9 20 22 31 3a 31  22 20 3a 20 78 6d 25 3d  |  . "1:1" : xm%=|
00001a10  31 3a 79 6d 25 3d 31 3a  78 64 25 3d 31 3a 79 64  |1:ym%=1:xd%=1:yd|
00001a20  25 3d 31 0d 05 b4 2a 20  20 20 20 20 c9 20 22 31  |%=1...*     . "1|
00001a30  3a 32 22 20 3a 20 78 6d  25 3d 31 3a 79 6d 25 3d  |:2" : xm%=1:ym%=|
00001a40  31 3a 78 64 25 3d 32 3a  79 64 25 3d 32 0d 05 be  |1:xd%=2:yd%=2...|
00001a50  2a 20 20 20 20 20 c9 20  22 32 3a 31 22 20 3a 20  |*     . "2:1" : |
00001a60  78 6d 25 3d 32 3a 79 6d  25 3d 32 3a 78 64 25 3d  |xm%=2:ym%=2:xd%=|
00001a70  31 3a 79 64 25 3d 31 0d  05 c8 80 20 20 20 20 20  |1:yd%=1....     |
00001a80  c9 20 22 78 22 2c 22 79  22 20 3a 20 73 24 3d 73  |. "x","y" : s$=s|
00001a90  65 6c 65 63 74 34 24 3a  70 25 3d a7 73 24 2c 22  |elect4$:p%=.s$,"|
00001aa0  3a 22 29 3a 6d 75 6c 25  3d bb 73 24 3a e7 70 25  |:"):mul%=.s$:.p%|
00001ab0  3e 30 20 8c 20 73 24 3d  c1 73 24 2c 70 25 2b 31  |>0 . s$=.s$,p%+1|
00001ac0  29 3a 64 69 76 25 3d bb  73 24 20 8b 20 64 69 76  |):div%=.s$ . div|
00001ad0  25 3d 30 3a f4 20 44 65  74 65 72 6d 69 6e 65 20  |%=0:. Determine |
00001ae0  73 63 61 6c 69 6e 67 20  72 61 74 69 6f 20 28 30  |scaling ratio (0|
00001af0  3d 69 6e 70 69 78 29 0d  05 d2 3f 20 20 20 20 20  |=inpix)...?     |
00001b00  20 e7 73 65 6c 65 63 74  33 24 3d 22 78 22 20 8c  | .select3$="x" .|
00001b10  20 78 6d 25 3d 6d 75 6c  25 3a 78 64 25 3d 64 69  | xm%=mul%:xd%=di|
00001b20  76 25 20 8b 20 79 6d 25  3d 6d 75 6c 25 3a 79 64  |v% . ym%=mul%:yd|
00001b30  25 3d 64 69 76 25 0d 05  dc 09 20 20 20 20 cb 0d  |%=div%....    ..|
00001b40  05 e6 39 20 20 20 20 e7  78 6d 25 3d 2d 31 20 8b  |..9    .xm%=-1 .|
00001b50  20 58 4d 75 6c 25 3d 78  6d 25 3a 58 44 69 76 25  | XMul%=xm%:XDiv%|
00001b60  3d 78 64 25 3a 44 69 76  49 73 49 6e 58 3d 28 58  |=xd%:DivIsInX=(X|
00001b70  44 69 76 25 3c 3d 30 29  0d 05 f0 39 20 20 20 20  |Div%<=0)...9    |
00001b80  e7 79 6d 25 3d 2d 31 20  8b 20 59 4d 75 6c 25 3d  |.ym%=-1 . YMul%=|
00001b90  79 6d 25 3a 59 44 69 76  25 3d 79 64 25 3a 44 69  |ym%:YDiv%=yd%:Di|
00001ba0  76 49 73 49 6e 59 3d 28  59 44 69 76 25 3c 3d 30  |vIsInY=(YDiv%<=0|
00001bb0  29 0d 05 fa 28 20 20 20  c9 20 22 4d 69 73 63 22  |)...(   . "Misc"|
00001bc0  20 3a 20 f4 20 4d 69 73  63 65 6c 61 6e 65 6f 75  | : . Miscelaneou|
00001bd0  73 20 6f 70 74 69 6f 6e  73 0d 06 04 15 20 20 20  |s options....   |
00001be0  20 c8 8e 20 73 65 6c 65  63 74 33 24 20 ca 0d 06  | .. select3$ ...|
00001bf0  0e 31 20 20 20 20 20 c9  20 22 53 63 72 65 65 6e  |.1     . "Screen|
00001c00  20 62 6c 61 6e 6b 69 6e  67 22 20 3a 20 42 6c 61  | blanking" : Bla|
00001c10  6e 6b 69 6e 67 3d ac 42  6c 61 6e 6b 69 6e 67 0d  |nking=.Blanking.|
00001c20  06 18 28 20 20 20 20 20  c9 20 22 47 49 46 20 73  |..(     . "GIF s|
00001c30  63 61 6e 22 20 3a 20 47  49 46 53 63 61 6e 3d ac  |can" : GIFScan=.|
00001c40  47 49 46 53 63 61 6e 0d  06 22 2a 20 20 20 20 20  |GIFScan.."*     |
00001c50  c9 20 22 49 6d 61 67 65  20 6e 75 6d 62 65 72 22  |. "Image number"|
00001c60  20 3a 20 f4 20 49 6d 61  67 65 20 6e 75 6d 62 65  | : . Image numbe|
00001c70  72 0d 06 2c 3a 20 20 20  20 20 20 e7 73 65 6c 65  |r..,:      .sele|
00001c80  63 74 34 24 3d 22 22 20  8c 20 49 6d 61 67 65 4e  |ct4$="" . ImageN|
00001c90  72 25 3d 31 20 8b 20 49  6d 61 67 65 4e 72 25 3d  |r%=1 . ImageNr%=|
00001ca0  bb 28 73 65 6c 65 63 74  34 24 29 0d 06 36 41 20  |.(select4$)..6A |
00001cb0  20 20 20 20 c9 20 22 4e  65 78 74 20 69 6d 61 67  |    . "Next imag|
00001cc0  65 22 2c 22 50 72 65 76  69 6f 75 73 20 69 6d 61  |e","Previous ima|
00001cd0  67 65 22 20 3a 20 f4 20  49 6d 61 67 65 20 6e 75  |ge" : . Image nu|
00001ce0  6d 62 65 72 20 75 70 2f  64 6f 77 6e 0d 06 40 1b  |mber up/down..@.|
00001cf0  20 20 20 20 20 20 c8 8e  20 c0 73 65 6c 65 63 74  |      .. .select|
00001d00  33 24 2c 31 29 20 ca 0d  06 4a 1e 20 20 20 20 20  |3$,1) ...J.     |
00001d10  20 20 c9 20 22 4e 22 20  3a 20 49 6d 61 67 65 4e  |  . "N" : ImageN|
00001d20  72 25 2b 3d 31 0d 06 54  2c 20 20 20 20 20 20 20  |r%+=1..T,       |
00001d30  c9 20 22 50 22 20 3a 20  e7 49 6d 61 67 65 4e 72  |. "P" : .ImageNr|
00001d40  25 3e 31 20 8c 20 49 6d  61 67 65 4e 72 25 2d 3d  |%>1 . ImageNr%-=|
00001d50  31 0d 06 5e 0b 20 20 20  20 20 20 cb 0d 06 68 7e  |1..^.      ...h~|
00001d60  20 20 20 20 20 20 e7 49  6e 46 69 6c 65 24 3c 3e  |      .InFile$<>|
00001d70  22 22 20 8c 20 4c 6e 61  6d 65 24 3d 49 6e 46 69  |"" . Lname$=InFi|
00001d80  6c 65 24 3a 4c 74 79 70  65 25 3d 49 6e 54 79 70  |le$:Ltype%=InTyp|
00001d90  65 25 3a 41 63 74 69 6f  6e 3d 41 63 74 4c 6f 61  |e%:Action=ActLoa|
00001da0  64 20 8b 20 f2 65 72 72  6f 72 28 2d 31 2c 22 4c  |d . .error(-1,"L|
00001db0  6f 61 64 20 61 6e 20 69  6d 61 67 65 20 66 69 6c  |oad an image fil|
00001dc0  65 20 66 69 72 73 74 20  21 22 29 3a f4 20 50 65  |e first !"):. Pe|
00001dd0  6e 64 69 6e 67 20 6c 6f  61 64 0d 06 72 2a 20 20  |nding load..r*  |
00001de0  20 20 20 c9 20 22 50 65  72 63 65 6e 74 61 67 65  |   . "Percentage|
00001df0  22 20 3a 20 50 65 72 63  65 6e 74 3d ac 50 65 72  |" : Percent=.Per|
00001e00  63 65 6e 74 0d 06 7c 09  20 20 20 20 cb 0d 06 86  |cent..|.    ....|
00001e10  07 20 20 cb 0d 06 90 2c  20 c9 20 22 4d 61 6e 69  |.  ...., . "Mani|
00001e20  70 75 6c 61 74 65 22 20  3a 20 f4 20 4d 61 6e 69  |pulate" : . Mani|
00001e30  70 75 6c 61 74 69 6f 6e  20 6f 70 74 69 6f 6e 73  |pulation options|
00001e40  0d 06 9a 13 20 20 c8 8e  20 73 65 6c 65 63 74 32  |....  .. select2|
00001e50  24 20 ca 0d 06 a4 23 20  20 20 c9 20 22 52 6f 74  |$ ....#   . "Rot|
00001e60  61 74 65 22 20 3a 20 f4  20 52 6f 74 61 74 65 20  |ate" : . Rotate |
00001e70  73 70 72 69 74 65 0d 06  ae 27 20 20 20 20 41 63  |sprite...'    Ac|
00001e80  74 69 6f 6e 3d 41 63 74  52 6f 74 61 74 65 3a f4  |tion=ActRotate:.|
00001e90  20 50 65 6e 64 69 6e 67  20 6c 6f 61 64 0d 06 b8  | Pending load...|
00001ea0  22 20 20 20 c9 20 22 4d  69 72 72 6f 72 22 20 3a  |"   . "Mirror" :|
00001eb0  20 f4 20 4d 69 72 72 6f  72 20 69 6d 61 67 65 0d  | . Mirror image.|
00001ec0  06 c2 3b 20 20 20 20 f2  76 61 72 28 22 69 6d 67  |..;    .var("img|
00001ed0  78 22 2c 53 70 72 57 25  29 3a f2 76 61 72 28 22  |x",SprW%):.var("|
00001ee0  69 6d 67 79 22 2c 53 70  72 48 25 29 3a f4 20 4d  |imgy",SprH%):. M|
00001ef0  6f 64 75 6c 65 20 69 6e  66 6f 0d 06 cc 10 20 20  |odule info....  |
00001f00  20 20 f2 68 6f 75 72 5f  6f 6e 0d 06 d6 69 20 20  |  .hour_on...i  |
00001f10  20 20 e7 73 65 6c 65 63  74 33 24 3d 22 78 22 20  |  .select3$="x" |
00001f20  8c 20 c8 99 20 22 54 72  61 6e 73 6c 61 74 6f 72  |. .. "Translator|
00001f30  5f 4d 69 72 72 6f 72 58  22 2c 53 70 72 50 74 72  |_MirrorX",SprPtr|
00001f40  25 20 8b 20 c8 99 20 22  54 72 61 6e 73 6c 61 74  |% . .. "Translat|
00001f50  6f 72 5f 4d 69 72 72 6f  72 59 22 2c 53 70 72 50  |or_MirrorY",SprP|
00001f60  74 72 25 3a f4 20 4d 69  72 72 6f 72 20 73 70 72  |tr%:. Mirror spr|
00001f70  69 74 65 0d 06 e0 11 20  20 20 20 f2 68 6f 75 72  |ite....    .hour|
00001f80  5f 6f 66 66 0d 06 ea 34  20 20 20 20 f2 6e 65 77  |_off...4    .new|
00001f90  5f 77 69 6e 64 6f 77 28  77 69 6e 5f 69 6d 67 25  |_window(win_img%|
00001fa0  29 3a f4 20 46 72 65 73  68 65 6e 20 69 6d 61 67  |):. Freshen imag|
00001fb0  65 20 77 69 6e 64 6f 77  0d 06 f4 07 20 20 cb 0d  |e window....  ..|
00001fc0  06 fe 28 20 c9 20 22 45  78 61 6d 69 6e 65 22 20  |..( . "Examine" |
00001fd0  3a 20 f4 20 45 78 61 6d  69 6e 61 74 69 6f 6e 20  |: . Examination |
00001fe0  6f 70 74 69 6f 6e 73 0d  07 08 13 20 20 c8 8e 20  |options....  .. |
00001ff0  73 65 6c 65 63 74 32 24  20 ca 0d 07 12 2d 20 20  |select2$ ....-  |
00002000  20 c9 20 22 5a 6f 6f 6d  22 20 3a 20 f4 20 5a 6f  | . "Zoom" : . Zo|
00002010  6f 6d 20 69 6e 2c 20 6f  75 74 2c 20 6e 6f 72 6d  |om in, out, norm|
00002020  61 6c 20 73 69 7a 65 0d  07 1c 41 20 20 20 20 4f  |al size...A    O|
00002030  6c 64 5a 6f 6f 6d 58 3d  5a 6f 6f 6d 58 3a 4f 6c  |ldZoomX=ZoomX:Ol|
00002040  64 5a 6f 6f 6d 59 3d 5a  6f 6f 6d 59 3a f4 20 52  |dZoomY=ZoomY:. R|
00002050  65 6d 65 6d 62 65 72 20  6f 6c 64 20 7a 6f 6f 6d  |emember old zoom|
00002060  20 66 61 63 74 6f 72 73  0d 07 26 15 20 20 20 20  | factors..&.    |
00002070  c8 8e 20 73 65 6c 65 63  74 33 24 20 ca 0d 07 30  |.. select3$ ...0|
00002080  7f 20 20 20 20 20 c9 20  22 49 6e 22 3a 20 e7 73  |.     . "In": .s|
00002090  65 6c 65 63 74 34 24 3d  22 42 6f 74 68 22 20 8c  |elect4$="Both" .|
000020a0  20 5a 6f 6f 6d 58 3d 5a  6f 6f 6d 58 2a 32 3a 5a  | ZoomX=ZoomX*2:Z|
000020b0  6f 6f 6d 59 3d 5a 6f 6f  6d 59 2a 32 20 8b 20 e7  |oomY=ZoomY*2 . .|
000020c0  73 65 6c 65 63 74 34 24  3d 22 78 22 20 8c 20 5a  |select4$="x" . Z|
000020d0  6f 6f 6d 58 3d 5a 6f 6f  6d 58 2a 32 20 8b 20 e7  |oomX=ZoomX*2 . .|
000020e0  73 65 6c 65 63 74 34 24  3d 22 79 22 20 8c 20 5a  |select4$="y" . Z|
000020f0  6f 6f 6d 59 3d 5a 6f 6f  6d 59 2a 32 0d 07 3a 80  |oomY=ZoomY*2..:.|
00002100  20 20 20 20 20 c9 20 22  4f 75 74 22 3a 20 e7 73  |     . "Out": .s|
00002110  65 6c 65 63 74 34 24 3d  22 42 6f 74 68 22 20 8c  |elect4$="Both" .|
00002120  20 5a 6f 6f 6d 58 3d 5a  6f 6f 6d 58 2f 32 3a 5a  | ZoomX=ZoomX/2:Z|
00002130  6f 6f 6d 59 3d 5a 6f 6f  6d 59 2f 32 20 8b 20 e7  |oomY=ZoomY/2 . .|
00002140  73 65 6c 65 63 74 34 24  3d 22 78 22 20 8c 20 5a  |select4$="x" . Z|
00002150  6f 6f 6d 58 3d 5a 6f 6f  6d 58 2f 32 20 8b 20 e7  |oomX=ZoomX/2 . .|
00002160  73 65 6c 65 63 74 34 24  3d 22 79 22 20 8c 20 5a  |select4$="y" . Z|
00002170  6f 6f 6d 59 3d 5a 6f 6f  6d 59 2f 32 0d 07 44 21  |oomY=ZoomY/2..D!|
00002180  20 20 20 20 20 c9 20 22  31 3a 31 22 3a 20 5a 6f  |     . "1:1": Zo|
00002190  6f 6d 58 3d 31 3a 5a 6f  6f 6d 59 3d 31 0d 07 4e  |omX=1:ZoomY=1..N|
000021a0  09 20 20 20 20 cb 0d 07  58 4c 20 20 20 20 f4 20  |.    ...XL    . |
000021b0  53 65 74 20 69 6d 61 67  65 20 77 69 6e 64 6f 77  |Set image window|
000021c0  20 65 78 74 65 6e 74 20  61 6e 64 20 74 69 74 6c  | extent and titl|
000021d0  65 20 61 63 63 6f 72 64  69 6e 67 20 74 6f 20 63  |e according to c|
000021e0  75 72 72 65 6e 74 20 7a  6f 6f 6d 20 66 61 63 74  |urrent zoom fact|
000021f0  6f 72 0d 07 62 43 20 20  20 20 21 62 6c 6f 63 6b  |or..bC    !block|
00002200  3d 30 3a 62 6c 6f 63 6b  21 34 3d 30 3a 62 6c 6f  |=0:block!4=0:blo|
00002210  63 6b 21 38 3d a4 73 70  72 57 2a 5a 6f 6f 6d 58  |ck!8=.sprW*ZoomX|
00002220  3a 62 6c 6f 63 6b 21 31  32 3d a4 73 70 72 48 2a  |:block!12=.sprH*|
00002230  5a 6f 6f 6d 59 0d 07 6c  43 20 20 20 20 c8 99 20  |ZoomY..lC    .. |
00002240  57 53 65 74 45 25 2c 77  69 6e 5f 69 6d 67 25 2c  |WSetE%,win_img%,|
00002250  62 6c 6f 63 6b 3a f4 20  53 65 74 20 77 69 6e 64  |block:. Set wind|
00002260  6f 77 20 65 78 74 65 6e  74 20 74 6f 20 7a 6f 6f  |ow extent to zoo|
00002270  6d 65 64 20 73 69 7a 65  0d 07 76 28 20 20 20 20  |med size..v(    |
00002280  24 49 4d 57 74 74 25 3d  a4 69 6d 61 67 65 5f 74  |$IMWtt%=.image_t|
00002290  69 74 6c 65 3a f4 20 4e  65 77 20 74 69 74 6c 65  |itle:. New title|
000022a0  0d 07 80 42 20 20 20 20  21 62 6c 6f 63 6b 3d 77  |...B    !block=w|
000022b0  69 6e 5f 69 6d 67 25 3a  c8 99 20 57 47 65 74 57  |in_img%:.. WGetW|
000022c0  53 25 2c 2c 62 6c 6f 63  6b 3a f4 20 52 65 61 64  |S%,,block:. Read|
000022d0  20 77 69 6e 64 6f 77 27  73 20 70 6f 73 69 74 69  | window's positi|
000022e0  6f 6e 0d 07 8a 4c 20 20  20 20 64 78 25 3d 28 62  |on...L    dx%=(b|
000022f0  6c 6f 63 6b 21 31 32 2d  62 6c 6f 63 6b 21 34 29  |lock!12-block!4)|
00002300  2f 32 3a 64 79 25 3d 28  62 6c 6f 63 6b 21 31 36  |/2:dy%=(block!16|
00002310  2d 62 6c 6f 63 6b 21 38  29 2f 32 3a f4 20 48 61  |-block!8)/2:. Ha|
00002320  6c 66 20 77 69 6e 64 6f  77 20 73 69 7a 65 0d 07  |lf window size..|
00002330  94 48 20 20 20 20 76 78  25 3d 62 6c 6f 63 6b 21  |.H    vx%=block!|
00002340  32 30 2b 64 78 25 3a 76  79 25 3d 62 6c 6f 63 6b  |20+dx%:vy%=block|
00002350  21 32 34 2d 64 79 25 3a  f4 20 56 65 63 74 6f 72  |!24-dy%:. Vector|
00002360  20 66 72 6f 6d 20 63 65  6e 74 72 65 20 74 6f 20  | from centre to |
00002370  6f 72 69 67 69 6e 0d 07  9e 49 20 20 20 20 f4 20  |origin...I    . |
00002380  43 61 6c 63 75 6c 61 74  65 20 6e 65 77 20 73 63  |Calculate new sc|
00002390  72 6f 6c 6c 20 6f 66 66  73 65 74 73 20 62 79 20  |roll offsets by |
000023a0  73 63 61 6c 69 6e 67 20  76 65 63 74 6f 72 20 61  |scaling vector a|
000023b0  6e 64 20 72 65 2d 74 72  61 6e 73 70 6f 73 65 0d  |nd re-transpose.|
000023c0  07 a8 47 20 20 20 20 62  6c 6f 63 6b 21 32 30 3d  |..G    block!20=|
000023d0  76 78 25 2a 5a 6f 6f 6d  58 2f 4f 6c 64 5a 6f 6f  |vx%*ZoomX/OldZoo|
000023e0  6d 58 2d 64 78 25 3a 62  6c 6f 63 6b 21 32 34 3d  |mX-dx%:block!24=|
000023f0  76 79 25 2a 5a 6f 6f 6d  59 2f 4f 6c 64 5a 6f 6f  |vy%*ZoomY/OldZoo|
00002400  6d 59 2b 64 79 25 0d 07  b2 3c 20 20 20 20 f2 63  |mY+dy%...<    .c|
00002410  6c 6f 73 65 5f 77 69 6e  64 6f 77 28 77 69 6e 5f  |lose_window(win_|
00002420  69 6d 67 25 29 3a f2 6f  70 65 6e 5f 77 69 6e 64  |img%):.open_wind|
00002430  6f 77 28 77 69 6e 5f 69  6d 67 25 2c 62 6c 6f 63  |ow(win_img%,bloc|
00002440  6b 29 0d 07 bc 2b 20 20  20 c9 20 22 4d 61 67 6e  |k)...+   . "Magn|
00002450  69 66 69 65 72 22 20 3a  20 f4 20 50 6f 70 20 75  |ifier" : . Pop u|
00002460  70 20 7a 6f 6f 6d 20 77  69 6e 64 6f 77 0d 07 c6  |p zoom window...|
00002470  44 20 20 20 20 5a 6f 6f  6d 57 69 6e 3d b9 3a 5a  |D    ZoomWin=.:Z|
00002480  6f 6f 6d 57 58 25 3d 30  3a 5a 6f 6f 6d 57 59 25  |oomWX%=0:ZoomWY%|
00002490  3d 30 3a 5a 6f 6f 6d 57  3d 5a 6f 6f 6d 44 3a f4  |=0:ZoomW=ZoomD:.|
000024a0  20 49 6e 69 74 20 7a 6f  6f 6d 20 77 69 6e 64 6f  | Init zoom windo|
000024b0  77 0d 07 d0 35 20 20 20  20 f2 6f 70 65 6e 5f 77  |w...5    .open_w|
000024c0  69 6e 64 6f 77 28 77 69  6e 5f 7a 6f 6f 6d 25 2c  |indow(win_zoom%,|
000024d0  2d 31 29 3a f4 20 4f 70  65 6e 20 7a 6f 6f 6d 20  |-1):. Open zoom |
000024e0  77 69 6e 64 6f 77 0d 07  da 07 20 20 cb 0d 07 e4  |window....  ....|
000024f0  27 20 c9 20 22 4d 69 73  63 22 20 3a 20 f4 20 4d  |' . "Misc" : . M|
00002500  69 73 63 65 6c 6c 61 6e  65 6f 75 73 20 6f 70 74  |iscellaneous opt|
00002510  69 6f 6e 73 0d 07 ee 13  20 20 c8 8e 20 73 65 6c  |ions....  .. sel|
00002520  65 63 74 32 24 20 ca 0d  07 f8 31 20 20 20 c9 20  |ect2$ ....1   . |
00002530  22 52 65 6c 6f 61 64 20  6c 61 73 74 22 20 3a 20  |"Reload last" : |
00002540  f4 20 52 65 6c 6f 61 64  20 6c 61 73 74 20 69 6d  |. Reload last im|
00002550  61 67 65 20 66 69 6c 65  0d 08 02 7c 20 20 20 20  |age file...|    |
00002560  e7 49 6e 46 69 6c 65 24  3c 3e 22 22 20 8c 20 4c  |.InFile$<>"" . L|
00002570  6e 61 6d 65 24 3d 49 6e  46 69 6c 65 24 3a 4c 74  |name$=InFile$:Lt|
00002580  79 70 65 25 3d 49 6e 54  79 70 65 25 3a 41 63 74  |ype%=InType%:Act|
00002590  69 6f 6e 3d 41 63 74 4c  6f 61 64 20 8b 20 f2 65  |ion=ActLoad . .e|
000025a0  72 72 6f 72 28 2d 31 2c  22 4c 6f 61 64 20 61 6e  |rror(-1,"Load an|
000025b0  20 69 6d 61 67 65 20 66  69 6c 65 20 66 69 72 73  | image file firs|
000025c0  74 20 21 22 29 3a f4 20  50 65 6e 64 69 6e 67 20  |t !"):. Pending |
000025d0  6c 6f 61 64 0d 08 0c 2f  20 20 20 c9 20 22 53 61  |load.../   . "Sa|
000025e0  76 65 22 20 3a 20 f4 20  53 61 76 65 20 77 68 6f  |ve" : . Save who|
000025f0  6c 65 20 6f 72 20 70 61  72 74 20 6f 66 20 69 6d  |le or part of im|
00002600  61 67 65 0d 08 16 15 20  20 20 20 c8 8e 20 73 65  |age....    .. se|
00002610  6c 65 63 74 33 24 20 ca  0d 08 20 2f 20 20 20 20  |lect3$ ... /    |
00002620  20 c9 20 22 49 6e 63 6c  75 64 65 20 70 61 6c 65  | . "Include pale|
00002630  74 74 65 22 20 3a 20 53  61 76 65 50 61 6c 3d ac  |tte" : SavePal=.|
00002640  53 61 76 65 50 61 6c 0d  08 2a 2f 20 20 20 20 20  |SavePal..*/     |
00002650  c9 20 22 53 61 6d 65 20  6c 65 61 66 6e 61 6d 65  |. "Same leafname|
00002660  22 20 3a 20 53 61 6d 65  4c 65 61 66 3d ac 53 61  |" : SameLeaf=.Sa|
00002670  6d 65 4c 65 61 66 0d 08  34 37 20 20 20 20 20 7f  |meLeaf..47     .|
00002680  20 3a 20 53 61 76 65 4b  69 6e 64 24 3d 73 65 6c  | : SaveKind$=sel|
00002690  65 63 74 33 24 3a f4 20  52 65 6d 65 6d 62 65 72  |ect3$:. Remember|
000026a0  20 74 79 70 65 20 6f 66  20 73 61 76 65 0d 08 3e  | type of save..>|
000026b0  4b 20 20 20 20 20 20 20  24 53 41 56 66 6e 25 3d  |K       $SAVfn%=|
000026c0  53 61 76 65 53 70 72 24  3a 24 53 41 56 73 6e 25  |SaveSpr$:$SAVsn%|
000026d0  3d 22 66 69 6c 65 5f 66  66 39 22 3a f4 20 53 65  |="file_ff9":. Se|
000026e0  74 20 66 69 6c 65 20 77  69 6e 64 6f 77 20 66 6f  |t file window fo|
000026f0  72 20 73 70 72 69 74 65  0d 08 48 38 20 20 20 20  |r sprite..H8    |
00002700  20 20 20 f2 6f 70 65 6e  5f 77 69 6e 64 6f 77 28  |   .open_window(|
00002710  77 69 6e 5f 66 69 6c 65  25 2c 2d 31 29 3a f4 20  |win_file%,-1):. |
00002720  4f 70 65 6e 20 66 69 6c  65 20 77 69 6e 64 6f 77  |Open file window|
00002730  0d 08 52 32 20 20 20 20  20 20 20 c8 99 20 57 53  |..R2       .. WS|
00002740  65 74 43 61 25 2c 77 69  6e 5f 66 69 6c 65 25 2c  |etCa%,win_file%,|
00002750  31 2c 2c 2c 2d 31 2c a9  28 53 61 76 65 53 70 72  |1,,,-1,.(SaveSpr|
00002760  24 29 0d 08 5c 09 20 20  20 20 cb 0d 08 66 31 20  |$)..\.    ...f1 |
00002770  20 20 c9 20 22 49 6d 61  67 65 20 70 61 6c 65 74  |  . "Image palet|
00002780  74 65 22 20 3a 20 f4 20  53 65 6c 65 63 74 20 69  |te" : . Select i|
00002790  6d 61 67 65 20 70 61 6c  65 74 74 65 0d 08 70 17  |mage palette..p.|
000027a0  20 20 20 20 f2 73 65 74  5f 70 61 6c 65 74 74 65  |    .set_palette|
000027b0  28 31 29 0d 08 7a 29 20  20 20 c9 20 22 53 74 61  |(1)..z)   . "Sta|
000027c0  74 75 73 22 20 3a 20 f4  20 4d 61 6e 69 70 75 6c  |tus" : . Manipul|
000027d0  61 74 65 20 64 65 66 61  75 6c 74 73 0d 08 84 15  |ate defaults....|
000027e0  20 20 20 20 c8 8e 20 73  65 6c 65 63 74 33 24 20  |    .. select3$ |
000027f0  ca 0d 08 8e da 20 20 20  20 20 c9 20 22 53 61 76  |.....     . "Sav|
00002800  65 22 20 3a 20 53 74 61  74 75 73 3d ae 28 22 3c  |e" : Status=.("<|
00002810  54 72 61 6e 73 6c 61 74  6f 72 24 44 69 72 3e 2e  |Translator$Dir>.|
00002820  53 74 61 74 75 73 22 29  3a f1 23 53 74 61 74 75  |Status"):.#Statu|
00002830  73 2c 41 75 74 6f 4d 6f  64 65 2c 41 75 74 6f 50  |s,AutoMode,AutoP|
00002840  61 6c 2c 4d 6f 64 65 53  65 74 2c 45 72 72 53 70  |al,ModeSet,ErrSp|
00002850  72 65 61 64 2c 53 61 76  65 50 61 6c 2c 55 73 65  |read,SavePal,Use|
00002860  72 4d 6f 64 65 53 65 74  25 28 31 29 2c 55 73 65  |rModeSet%(1),Use|
00002870  72 4d 6f 64 65 53 65 74  25 28 32 29 2c 55 73 65  |rModeSet%(2),Use|
00002880  72 4d 6f 64 65 53 65 74  25 28 33 29 2c 55 73 65  |rModeSet%(3),Use|
00002890  72 4d 6f 64 65 53 65 74  25 28 34 29 2c 41 75 74  |rModeSet%(4),Aut|
000028a0  6f 5a 6f 6f 6d 2c 42 6c  61 63 6b 57 68 69 74 65  |oZoom,BlackWhite|
000028b0  2c 47 49 46 53 63 61 6e  2c 42 6c 61 6e 6b 69 6e  |,GIFScan,Blankin|
000028c0  67 2c 49 6e 76 65 72 74  52 47 42 0d 08 98 6b 20  |g,InvertRGB...k |
000028d0  20 20 20 20 20 f1 23 53  74 61 74 75 73 2c 5a 69  |     .#Status,Zi|
000028e0  67 5a 61 67 2c 56 69 65  77 4d 6f 64 65 2c 4f 75  |gZag,ViewMode,Ou|
000028f0  74 4d 6f 64 65 2c 4f 75  74 50 61 6c 2c 50 65 72  |tMode,OutPal,Per|
00002900  63 65 6e 74 2c 47 61 6d  6d 61 46 2c 47 61 6d 6d  |cent,GammaF,Gamm|
00002910  61 2c 42 6c 61 63 6b 46  2c 42 6c 61 63 6b 2c 52  |a,BlackF,Black,R|
00002920  61 6e 67 65 2c 53 61 6d  65 4c 65 61 66 3a d9 23  |ange,SameLeaf:.#|
00002930  53 74 61 74 75 73 0d 08  a2 64 20 20 20 20 20 c9  |Status...d     .|
00002940  20 22 4c 6f 61 64 22 20  3a 20 e7 a4 6c 6f 61 64  | "Load" : ..load|
00002950  5f 73 74 61 74 75 73 20  8b 20 f2 65 72 72 6f 72  |_status . .error|
00002960  28 2d 31 2c 22 49 20 63  61 6e 6e 6f 74 20 66 69  |(-1,"I cannot fi|
00002970  6e 64 20 6d 79 20 73 74  61 74 75 73 20 66 69 6c  |nd my status fil|
00002980  65 20 21 20 48 61 76 65  20 79 6f 75 20 73 61 76  |e ! Have you sav|
00002990  65 64 20 6f 6e 65 20 3f  22 29 0d 08 ac 3c 20 20  |ed one ?")...<  |
000029a0  20 20 20 c9 20 22 4b 69  6c 6c 22 20 3a 20 c8 99  |   . "Kill" : ..|
000029b0  20 22 4f 53 5f 46 69 6c  65 22 2c 36 2c 22 3c 54  | "OS_File",6,"<T|
000029c0  72 61 6e 73 6c 61 74 6f  72 24 44 69 72 3e 2e 53  |ranslator$Dir>.S|
000029d0  74 61 74 75 73 22 0d 08  b6 09 20 20 20 20 cb 0d  |tatus"....    ..|
000029e0  08 c0 07 20 20 cb 0d 08  ca 05 cb 0d 08 d4 28 c8  |...  .........(.|
000029f0  99 20 57 47 65 74 50 49  25 2c 2c 62 6c 6f 63 6b  |. WGetPI%,,block|
00002a00  3a f4 20 47 65 74 20 70  6f 69 6e 74 65 72 20 69  |:. Get pointer i|
00002a10  6e 66 6f 0d 08 de 35 e7  28 28 62 6c 6f 63 6b 21  |nfo...5.((block!|
00002a20  38 29 80 31 29 3e 30 20  8c 20 f2 6d 61 69 6e 5f  |8).1)>0 . .main_|
00002a30  6d 65 6e 75 3a f4 20 41  64 6a 75 73 74 20 2d 3e  |menu:. Adjust ->|
00002a40  20 72 65 2d 6f 70 65 6e  0d 08 e8 05 e1 0d 08 f2  | re-open........|
00002a50  04 0d 08 fc 0b dd f2 63  6c 6f 73 65 0d 09 06 29  |.......close...)|
00002a60  4b 69 6c 6c 3d a3 3a f4  20 46 6c 61 67 20 72 65  |Kill=.:. Flag re|
00002a70  74 75 72 6e 65 64 20 3a  20 69 6d 61 67 65 20 6b  |turned : image k|
00002a80  69 6c 6c 65 64 0d 09 10  1f 77 69 6e 25 3d 70 6f  |illed....win%=po|
00002a90  6c 6c 21 30 3a f4 20 57  69 6e 64 6f 77 20 68 61  |ll!0:. Window ha|
00002aa0  6e 64 6c 65 0d 09 1a 26  f2 63 6c 6f 73 65 5f 77  |ndle...&.close_w|
00002ab0  69 6e 64 6f 77 28 77 69  6e 25 29 3a f4 20 43 6c  |indow(win%):. Cl|
00002ac0  6f 73 65 20 77 69 6e 64  6f 77 0d 09 24 0d c8 8e  |ose window..$...|
00002ad0  20 77 69 6e 25 20 ca 0d  09 2e 33 20 c9 20 77 69  | win% ....3 . wi|
00002ae0  6e 5f 69 6d 67 25 20 3a  20 f2 69 6e 76 61 6c 69  |n_img% : .invali|
00002af0  64 61 74 65 5f 69 6d 61  67 65 3a f2 73 65 74 5f  |date_image:.set_|
00002b00  70 61 6c 65 74 74 65 28  30 29 0d 09 38 1e 20 20  |palette(0)..8.  |
00002b10  f2 63 6c 6f 73 65 5f 77  69 6e 64 6f 77 28 77 69  |.close_window(wi|
00002b20  6e 5f 66 69 6c 65 25 29  0d 09 42 28 20 20 f2 63  |n_file%)..B(  .c|
00002b30  6c 6f 73 65 5f 77 69 6e  64 6f 77 28 77 69 6e 5f  |lose_window(win_|
00002b40  7a 6f 6f 6d 25 29 3a 5a  6f 6f 6d 57 69 6e 3d a3  |zoom%):ZoomWin=.|
00002b50  0d 09 4c 27 20 20 e7 56  69 65 77 4d 6f 64 65 20  |..L'  .ViewMode |
00002b60  8c 20 f2 6d 6f 64 65 5f  63 68 61 6e 67 65 28 50  |. .mode_change(P|
00002b70  72 65 4d 6f 64 65 29 0d  09 56 0c 20 20 4b 69 6c  |reMode)..V.  Kil|
00002b80  6c 3d b9 0d 09 60 1c 20  c9 20 77 69 6e 5f 7a 6f  |l=...`. . win_zo|
00002b90  6f 6d 25 20 3a 20 5a 6f  6f 6d 57 69 6e 3d a3 0d  |om% : ZoomWin=..|
00002ba0  09 6a 05 cb 0d 09 74 05  e1 0d 09 7e 04 0d 09 88  |.j....t....~....|
00002bb0  0a dd f2 6f 70 65 6e 0d  09 92 18 f2 6f 70 65 6e  |...open.....open|
00002bc0  5f 77 69 6e 64 6f 77 28  30 2c 70 6f 6c 6c 29 0d  |_window(0,poll).|
00002bd0  09 9c 05 e1 0d 09 a6 04  0d 09 b0 0c dd f2 72 65  |..............re|
00002be0  64 72 61 77 0d 09 ba 1c  f2 72 65 64 72 61 77 5f  |draw.....redraw_|
00002bf0  77 69 6e 64 6f 77 28 70  6f 6c 6c 21 30 2c a3 29  |window(poll!0,.)|
00002c00  0d 09 c4 05 e1 0d 09 ce  04 0d 09 d8 0a dd f2 6e  |...............n|
00002c10  75 6c 6c 0d 09 e2 13 e7  44 61 74 61 4c 6f 61 64  |ull.....DataLoad|
00002c20  52 65 66 25 20 8c 0d 09  ec 44 20 44 61 74 61 4c  |Ref% ....D DataL|
00002c30  6f 61 64 52 65 66 25 3d  a3 3a c8 99 20 22 4f 53  |oadRef%=.:.. "OS|
00002c40  5f 46 69 6c 65 22 2c 36  2c 53 61 76 65 24 3a f4  |_File",6,Save$:.|
00002c50  20 44 65 6c 65 74 65 20  66 69 6c 65 20 73 61 76  | Delete file sav|
00002c60  65 64 2f 63 72 65 61 74  65 64 0d 09 f6 43 20 f2  |ed/created...C .|
00002c70  65 72 72 6f 72 28 2d 31  2c 22 42 61 64 20 64 61  |error(-1,"Bad da|
00002c80  74 61 20 74 72 61 6e 73  66 65 72 2c 20 72 65 63  |ta transfer, rec|
00002c90  65 69 76 65 72 20 64 65  61 64 22 29 3a f4 20 4e  |eiver dead"):. N|
00002ca0  6f 20 44 61 74 61 4c 6f  61 64 41 63 6b 0d 0a 00  |o DataLoadAck...|
00002cb0  05 cd 0d 0a 0a 05 e1 0d  0a 14 04 0d 0a 1e 09 dd  |................|
00002cc0  f2 6b 65 79 0d 0a 28 45  77 69 6e 25 3d 70 6f 6c  |.key..(Ewin%=pol|
00002cd0  6c 21 30 3a 69 63 6f 25  3d 70 6f 6c 6c 21 34 3a  |l!0:ico%=poll!4:|
00002ce0  63 68 61 72 25 3d 70 6f  6c 6c 21 32 34 3a f4 20  |char%=poll!24:. |
00002cf0  57 69 6e 64 6f 77 2c 20  69 63 6f 6e 2c 20 6b 65  |Window, icon, ke|
00002d00  79 20 70 72 65 73 73 65  64 0d 0a 32 22 e7 28 77  |y pressed..2".(w|
00002d10  69 6e 25 3d 77 69 6e 5f  66 69 6c 65 25 29 20 80  |in%=win_file%) .|
00002d20  20 28 69 63 6f 25 3d 31  29 20 8c 0d 0a 3c 0f 20  | (ico%=1) ...<. |
00002d30  c8 8e 20 63 68 61 72 25  20 ca 0d 0a 46 1d 20 20  |.. char% ...F.  |
00002d40  c9 20 31 33 20 3a 20 f4  20 52 65 74 75 72 6e 20  |. 13 : . Return |
00002d50  70 72 65 73 73 65 64 0d  0a 50 4a 20 20 20 f2 65  |pressed..PJ   .e|
00002d60  72 72 6f 72 28 2d 31 2c  22 50 6c 65 61 73 65 20  |rror(-1,"Please |
00002d70  64 72 61 67 20 74 68 65  20 73 70 72 69 74 65 20  |drag the sprite |
00002d80  66 69 6c 65 20 69 63 6f  6e 20 74 6f 20 61 20 64  |file icon to a d|
00002d90  69 72 65 63 74 6f 72 79  20 76 69 65 77 65 72 22  |irectory viewer"|
00002da0  29 0d 0a 5a 1d 20 20 c9  20 32 37 20 3a 20 f4 20  |)..Z.  . 27 : . |
00002db0  45 73 63 61 70 65 20 70  72 65 73 73 65 64 0d 0a  |Escape pressed..|
00002dc0  64 1f 20 20 20 f2 63 6c  6f 73 65 5f 77 69 6e 64  |d.   .close_wind|
00002dd0  6f 77 28 77 69 6e 5f 66  69 6c 65 25 29 0d 0a 6e  |ow(win_file%)..n|
00002de0  06 20 cb 0d 0a 78 05 cd  0d 0a 82 05 e1 0d 0a 8c  |. ...x..........|
00002df0  04 0d 0a 96 0d dd f2 6d  65 73 73 61 67 65 0d 0a  |.......message..|
00002e00  a0 2d f4 20 49 67 6e 6f  72 65 20 6d 65 73 73 61  |.-. Ignore messa|
00002e10  67 65 73 20 6f 72 69 67  69 6e 61 74 69 6e 67 20  |ges originating |
00002e20  66 72 6f 6d 20 6d 79 73  65 6c 66 0d 0a aa 36 e7  |from myself...6.|
00002e30  28 70 6f 6c 6c 21 34 29  3d 54 61 73 6b 48 61 6e  |(poll!4)=TaskHan|
00002e40  64 6c 65 25 20 8c 20 6d  73 67 6e 72 25 3d 2d 31  |dle% . msgnr%=-1|
00002e50  20 8b 20 6d 73 67 6e 72  25 3d 70 6f 6c 6c 21 31  | . msgnr%=poll!1|
00002e60  36 0d 0a b4 0f c8 8e 20  6d 73 67 6e 72 25 20 ca  |6...... msgnr% .|
00002e70  0d 0a be 19 20 c9 20 2d  31 20 3a 20 f4 20 44 6f  |.... . -1 : . Do|
00002e80  6e 27 74 20 72 65 61 63  74 0d 0a c8 2b 20 c9 20  |n't react...+ . |
00002e90  30 20 3a 20 f2 64 69 65  3a f4 20 52 65 71 75 65  |0 : .die:. Reque|
00002ea0  73 74 20 74 6f 20 74 65  72 6d 69 6e 61 74 65 20  |st to terminate |
00002eb0  74 61 73 6b 0d 0a d2 2e  20 c9 20 31 20 3a 20 f4  |task.... . 1 : .|
00002ec0  20 44 61 74 61 53 61 76  65 2c 20 74 72 61 6e 73  | DataSave, trans|
00002ed0  66 65 72 20 76 69 61 20  73 63 72 61 70 20 66 69  |fer via scrap fi|
00002ee0  6c 65 0d 0a dc 37 20 20  73 63 72 61 70 24 3d a4  |le...7  scrap$=.|
00002ef0  4f 53 76 61 72 28 22 57  69 6d 70 24 53 63 72 61  |OSvar("Wimp$Scra|
00002f00  70 22 29 3a f4 20 52 65  61 64 20 73 63 72 61 70  |p"):. Read scrap|
00002f10  20 66 69 6c 65 6e 61 6d  65 0d 0a e6 d2 20 20 e7  | filename....  .|
00002f20  73 63 72 61 70 24 3c 3e  22 22 20 8c 20 70 6f 6c  |scrap$<>"" . pol|
00002f30  6c 21 31 32 3d 70 6f 6c  6c 21 38 3a 70 6f 6c 6c  |l!12=poll!8:poll|
00002f40  21 31 36 3d 32 3a 70 6f  6c 6c 21 33 36 3d 2d 31  |!16=2:poll!36=-1|
00002f50  3a 24 28 70 6f 6c 6c 2b  34 34 29 3d 73 63 72 61  |:$(poll+44)=scra|
00002f60  70 24 2b bd 30 3a 70 6f  6c 6c 21 30 3d 34 34 2b  |p$+.0:poll!0=44+|
00002f70  28 a9 73 63 72 61 70 24  2b 31 2b 33 29 80 ac 33  |(.scrap$+1+3)..3|
00002f80  3a c8 99 20 57 53 65 6e  64 4d 73 67 25 2c 31 38  |:.. WSendMsg%,18|
00002f90  2c 70 6f 6c 6c 2c 70 6f  6c 6c 21 34 20 8b 20 f2  |,poll,poll!4 . .|
00002fa0  65 72 72 6f 72 28 2d 31  2c 22 57 69 6d 70 24 53  |error(-1,"Wimp$S|
00002fb0  63 72 61 70 20 6e 6f 74  20 64 65 66 69 6e 65 64  |crap not defined|
00002fc0  22 29 3a f4 20 53 65 6e  64 20 44 61 74 61 53 61  |"):. Send DataSa|
00002fd0  76 65 41 63 6b 20 69 66  20 73 63 72 61 70 20 66  |veAck if scrap f|
00002fe0  69 6c 65 20 64 65 66 69  6e 65 64 0d 0a f0 23 20  |ile defined...# |
00002ff0  c9 20 32 20 3a 20 f4 20  44 61 74 61 53 61 76 65  |. 2 : . DataSave|
00003000  41 63 6b 2c 20 73 61 76  65 20 66 69 6c 65 0d 0a  |Ack, save file..|
00003010  fa 1d 20 20 e7 70 6f 6c  6c 21 31 32 3d 44 61 74  |..  .poll!12=Dat|
00003020  61 53 61 76 65 52 65 66  25 20 8c 0d 0b 04 49 20  |aSaveRef% ....I |
00003030  20 20 53 61 76 65 24 3d  a4 73 74 72 69 6e 67 28  |  Save$=.string(|
00003040  70 6f 6c 6c 2b 34 34 29  3a f4 20 46 75 6c 6c 20  |poll+44):. Full |
00003050  70 61 74 68 6e 61 6d 65  20 6f 66 20 66 69 6c 65  |pathname of file|
00003060  20 74 6f 20 62 65 20 73  61 76 65 64 2f 63 72 65  | to be saved/cre|
00003070  61 74 65 64 0d 0b 0e 2e  20 20 20 f4 20 53 61 76  |ated....   . Sav|
00003080  65 20 73 70 72 69 74 65  20 66 69 6c 65 20 6f 72  |e sprite file or|
00003090  20 27 6f 70 65 6e 27 20  43 6c 65 61 72 20 66 69  | 'open' Clear fi|
000030a0  6c 65 0d 0b 18 85 20 20  20 e7 24 53 41 56 73 6e  |le....   .$SAVsn|
000030b0  25 3d 22 66 69 6c 65 5f  66 66 39 22 20 8c 20 53  |%="file_ff9" . S|
000030c0  70 72 53 61 76 65 24 3d  53 61 76 65 24 3a f2 73  |prSave$=Save$:.s|
000030d0  61 76 65 5f 73 70 72 69  74 65 28 53 70 72 53 61  |ave_sprite(SprSa|
000030e0  76 65 24 29 20 8b 20 43  6c 65 61 72 53 61 76 65  |ve$) . ClearSave|
000030f0  24 3d 53 61 76 65 24 3a  c8 99 20 22 4f 53 5f 46  |$=Save$:.. "OS_F|
00003100  69 6c 65 22 2c 31 31 2c  43 6c 65 61 72 53 61 76  |ile",11,ClearSav|
00003110  65 24 2c 26 36 39 30 2c  30 2c 30 3a 43 6c 65 61  |e$,&690,0,0:Clea|
00003120  72 46 69 6c 65 3d b9 0d  0b 22 3f 20 20 20 70 6f  |rFile=..."?   po|
00003130  6c 6c 21 31 32 3d 70 6f  6c 6c 21 38 3a 70 6f 6c  |ll!12=poll!8:pol|
00003140  6c 21 31 36 3d 33 3a f4  20 41 6d 65 6e 64 20 64  |l!16=3:. Amend d|
00003150  61 74 61 20 62 6c 6f 63  6b 20 66 6f 72 20 44 61  |ata block for Da|
00003160  74 61 4c 6f 61 64 0d 0b  2c 32 20 20 20 c8 99 20  |taLoad..,2   .. |
00003170  57 53 65 6e 64 4d 73 67  25 2c 31 38 2c 70 6f 6c  |WSendMsg%,18,pol|
00003180  6c 2c 70 6f 6c 6c 21 34  3a f4 20 53 65 6e 64 20  |l,poll!4:. Send |
00003190  44 61 74 61 4c 6f 61 64  0d 0b 36 40 20 20 20 44  |DataLoad..6@   D|
000031a0  61 74 61 4c 6f 61 64 52  65 66 25 3d 70 6f 6c 6c  |ataLoadRef%=poll|
000031b0  21 38 3a f4 20 41 77 61  69 74 20 61 20 44 61 74  |!8:. Await a Dat|
000031c0  61 4c 6f 61 64 41 63 6b  2c 20 72 65 6d 65 6d 62  |aLoadAck, rememb|
000031d0  65 72 20 6d 79 72 65 66  0d 0b 40 07 20 20 cd 0d  |er myref..@.  ..|
000031e0  0b 4a 2e 20 c9 20 33 2c  35 20 3a 20 f4 20 44 61  |.J. . 3,5 : . Da|
000031f0  74 61 4c 6f 61 64 2f 4f  70 65 6e 20 3a 20 61 74  |taLoad/Open : at|
00003200  74 65 6d 70 74 20 74 6f  20 6c 6f 61 64 0d 0b 54  |tempt to load..T|
00003210  42 20 20 74 79 70 65 25  3d 70 6f 6c 6c 21 34 30  |B  type%=poll!40|
00003220  3a 6e 61 6d 65 24 3d a4  73 74 72 69 6e 67 28 70  |:name$=.string(p|
00003230  6f 6c 6c 2b 34 34 29 3a  f4 20 46 69 6c 65 74 79  |oll+44):. Filety|
00003240  70 65 20 61 6e 64 20 66  69 6c 65 6e 61 6d 65 0d  |pe and filename.|
00003250  0b 5e 10 20 20 c8 8e 20  74 79 70 65 25 20 ca 0d  |.^.  .. type% ..|
00003260  0b 68 54 20 20 20 c9 20  26 46 46 39 2c 26 44 45  |.hT   . &FF9,&DE|
00003270  32 2c 26 44 46 41 2c 26  44 35 38 2c 26 30 30 34  |2,&DFA,&D58,&004|
00003280  20 3a 20 e7 6d 73 67 6e  72 25 3d 33 20 8c 20 74  | : .msgnr%=3 . t|
00003290  79 70 65 25 3d a4 69 6d  61 67 65 5f 74 79 70 65  |ype%=.image_type|
000032a0  28 6e 61 6d 65 24 2c b9  29 20 8b 20 74 79 70 65  |(name$,.) . type|
000032b0  25 3d 30 0d 0b 72 2c 20  20 20 7f 20 74 79 70 65  |%=0..r,   . type|
000032c0  25 3d a4 69 6d 61 67 65  5f 74 79 70 65 28 6e 61  |%=.image_type(na|
000032d0  6d 65 24 2c 28 6d 73 67  6e 72 25 3d 33 29 29 0d  |me$,(msgnr%=3)).|
000032e0  0b 7c 07 20 20 cb 0d 0b  86 10 20 20 e7 74 79 70  |.|.  .....  .typ|
000032f0  65 25 3e 30 20 8c 0d 0b  90 49 20 20 20 70 6f 6c  |e%>0 ....I   pol|
00003300  6c 21 31 32 3d 70 6f 6c  6c 21 38 3a 70 6f 6c 6c  |l!12=poll!8:poll|
00003310  21 31 36 3d 34 3a c8 99  20 57 53 65 6e 64 4d 73  |!16=4:.. WSendMs|
00003320  67 25 2c 31 37 2c 70 6f  6c 6c 2c 70 6f 6c 6c 21  |g%,17,poll,poll!|
00003330  34 3a f4 20 44 61 74 61  4c 6f 61 64 41 63 6b 0d  |4:. DataLoadAck.|
00003340  0b 9a 3e 20 20 20 4c 6e  61 6d 65 24 3d 6e 61 6d  |..>   Lname$=nam|
00003350  65 24 3a 4c 74 79 70 65  25 3d 74 79 70 65 25 3a  |e$:Ltype%=type%:|
00003360  41 63 74 69 6f 6e 3d 41  63 74 4c 6f 61 64 3a f4  |Action=ActLoad:.|
00003370  20 50 65 6e 64 69 6e 67  20 6c 6f 61 64 0d 0b a4  | Pending load...|
00003380  72 20 20 cc 20 e7 6d 73  67 6e 72 25 3d 33 20 8c  |r  . .msgnr%=3 .|
00003390  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 64 6f  | .error(-1,"I do|
000033a0  6e 27 74 20 72 65 63 6f  67 6e 69 7a 65 20 74 68  |n't recognize th|
000033b0  69 73 20 66 69 6c 65 2e  20 50 6c 65 61 73 65 20  |is file. Please |
000033c0  66 69 6c 65 74 79 70 65  20 69 74 20 61 70 70 72  |filetype it appr|
000033d0  6f 70 69 61 74 65 6c 79  2e 22 29 3a f4 20 44 72  |opiately."):. Dr|
000033e0  61 67 20 75 6e 72 65 63  6f 67 6e 69 7a 65 64 0d  |ag unrecognized.|
000033f0  0b ae 07 20 20 cd 0d 0b  b8 29 20 c9 20 34 20 3a  |...  ....) . 4 :|
00003400  20 f4 20 44 61 74 61 4c  6f 61 64 41 63 6b 2c 20  | . DataLoadAck, |
00003410  63 68 65 63 6b 20 6f 72  20 69 67 6e 6f 72 65 0d  |check or ignore.|
00003420  0b c2 3c 20 20 e7 44 61  74 61 4c 6f 61 64 52 65  |..<  .DataLoadRe|
00003430  66 25 20 8c 20 e7 70 6f  6c 6c 21 31 32 3d 44 61  |f% . .poll!12=Da|
00003440  74 61 4c 6f 61 64 52 65  66 25 20 8c 20 44 61 74  |taLoadRef% . Dat|
00003450  61 4c 6f 61 64 52 65 66  25 3d a3 0d 0b cc 21 20  |aLoadRef%=....! |
00003460  c9 20 26 34 30 30 43 30  20 3a 20 f4 20 53 75 62  |. &400C0 : . Sub|
00003470  6d 65 6e 75 20 77 61 72  6e 69 6e 67 0d 0b d6 47  |menu warning...G|
00003480  20 20 70 6f 69 6e 74 65  72 25 3d 70 6f 6c 6c 21  |  pointer%=poll!|
00003490  32 30 3a 78 25 3d 70 6f  6c 6c 21 32 34 3a 79 25  |20:x%=poll!24:y%|
000034a0  3d 70 6f 6c 6c 21 32 38  3a f4 20 47 65 74 20 70  |=poll!28:. Get p|
000034b0  6f 69 6e 74 65 72 2f 70  72 6f 70 6f 73 65 64 20  |ointer/proposed |
000034c0  78 2f 79 0d 0b e0 41 20  20 c8 99 20 57 44 65 63  |x/y...A  .. WDec|
000034d0  6f 64 65 4d 25 2c 2c 6d  65 6e 75 31 2c 70 6f 6c  |odeM%,,menu1,pol|
000034e0  6c 2b 33 32 2c c4 31 30  30 2c 22 20 22 29 20 b8  |l+32,.100," ") .|
000034f0  20 2c 2c 2c 70 61 74 68  24 3a f4 20 47 65 74 20  | ,,,path$:. Get |
00003500  70 61 74 68 0d 0b ea 10  20 20 c8 8e 20 70 61 74  |path....  .. pat|
00003510  68 24 20 ca 0d 0b f4 b1  20 20 20 c9 20 22 50 72  |h$ .....   . "Pr|
00003520  6f 63 65 73 73 2e 43 6c  65 61 72 20 6f 75 74 70  |ocess.Clear outp|
00003530  75 74 22 20 3a 20 24 53  41 56 66 6e 25 3d 53 61  |ut" : $SAVfn%=Sa|
00003540  76 65 43 6c 65 61 72 24  3a 24 53 41 56 73 6e 25  |veClear$:$SAVsn%|
00003550  3d 22 66 69 6c 65 5f 36  39 30 22 3a c8 99 20 57  |="file_690":.. W|
00003560  43 72 65 61 74 65 53 4d  25 2c 2c 70 6f 69 6e 74  |CreateSM%,,point|
00003570  65 72 25 2c 78 25 2c 79  25 3a c8 99 20 57 53 65  |er%,x%,y%:.. WSe|
00003580  74 43 61 25 2c 77 69 6e  5f 66 69 6c 65 25 2c 31  |tCa%,win_file%,1|
00003590  2c 2c 2c 2d 31 2c a9 28  53 61 76 65 43 6c 65 61  |,,,-1,.(SaveClea|
000035a0  72 24 29 3a f4 20 4f 70  65 6e 20 66 69 6c 65 20  |r$):. Open file |
000035b0  77 69 6e 64 6f 77 20 66  6f 72 20 43 6c 65 61 72  |window for Clear|
000035c0  20 66 69 6c 65 0d 0b fe  07 20 20 cb 0d 0c 08 40  | file....  ....@|
000035d0  20 c9 20 26 34 30 30 43  31 20 3a 20 f4 20 4d 6f  | . &400C1 : . Mo|
000035e0  64 65 20 68 61 73 20 63  68 61 6e 67 65 64 20 28  |de has changed (|
000035f0  61 6e 64 20 69 74 20 6d  61 79 20 6e 6f 74 20 68  |and it may not h|
00003600  61 76 65 20 62 65 65 6e  20 6d 65 29 0d 0c 12 20  |ave been me)... |
00003610  20 20 f2 6d 6f 64 65 5f  63 68 61 6e 67 65 28 2d  |  .mode_change(-|
00003620  31 29 3a f4 20 54 69 64  79 20 75 70 0d 0c 1c 05  |1):. Tidy up....|
00003630  cb 0d 0c 26 05 e1 0d 0c  30 05 20 0d 0c 3a 10 dd  |...&....0. ..:..|
00003640  f2 6d 6f 75 73 65 63 6c  69 63 6b 0d 0c 44 3f 62  |.mouseclick..D?b|
00003650  75 74 25 3d 70 6f 6c 6c  21 38 3a 77 69 6e 25 3d  |ut%=poll!8:win%=|
00003660  70 6f 6c 6c 21 31 32 3a  69 63 6f 25 3d 70 6f 6c  |poll!12:ico%=pol|
00003670  6c 21 31 36 3a f4 20 42  75 74 74 6f 6e 73 2f 77  |l!16:. Buttons/w|
00003680  69 6e 64 6f 77 2f 69 63  6f 6e 0d 0c 4e 0d c8 8e  |indow/icon..N...|
00003690  20 77 69 6e 25 20 ca 0d  0c 58 1e 20 c9 20 2d 32  | win% ...X. . -2|
000036a0  20 3a 20 f4 20 43 6c 69  63 6b 20 6f 6e 20 69 63  | : . Click on ic|
000036b0  6f 6e 62 61 72 0d 0c 62  17 20 20 e7 69 63 6f 25  |onbar..b.  .ico%|
000036c0  3d 49 69 63 6f 6e 62 61  72 25 20 8c 0d 0c 6c 1d  |=Iiconbar% ...l.|
000036d0  20 20 20 f4 20 49 63 6f  6e 62 61 72 20 69 63 6f  |   . Iconbar ico|
000036e0  6e 20 63 6c 69 63 6b 65  64 0d 0c 76 14 20 20 20  |n clicked..v.   |
000036f0  c8 8e 20 62 75 74 25 20  80 20 37 20 ca 0d 0c 80  |.. but% . 7 ....|
00003700  2a 20 20 20 20 c9 20 32  20 3a 20 f2 6d 6f 75 73  |*    . 2 : .mous|
00003710  65 28 78 25 2c 5f 25 2c  5f 25 29 3a 6d 25 3d 6d  |e(x%,_%,_%):m%=m|
00003720  65 6e 75 69 63 6f 25 0d  0c 8a c7 20 20 20 20 20  |enuico%....     |
00003730  24 6d 25 3d 22 54 72 61  6e 73 6c 61 74 6f 72 22  |$m%="Translator"|
00003740  3a 6d 25 3f 31 32 3d 74  66 25 3a 6d 25 3f 31 33  |:m%?12=tf%:m%?13|
00003750  3d 74 62 25 3a 6d 25 3f  31 34 3d 77 66 25 3a 6d  |=tb%:m%?14=wf%:m|
00003760  25 3f 31 35 3d 77 62 25  3a 6d 25 21 31 36 3d 31  |%?15=wb%:m%!16=1|
00003770  30 2a 31 36 3a 6d 25 21  32 30 3d 34 30 3a 6d 25  |0*16:m%!20=40:m%|
00003780  21 32 34 3d 30 3a 6d 25  21 32 38 3d 30 3a 6d 25  |!24=0:m%!28=0:m%|
00003790  21 33 32 3d 77 69 6e 5f  69 6e 66 6f 25 3a 6d 25  |!32=win_info%:m%|
000037a0  21 33 36 3d 28 77 62 25  3c 3c 32 38 29 2b 28 77  |!36=(wb%<<28)+(w|
000037b0  66 25 3c 3c 32 34 29 2b  31 3a 24 28 6d 25 2b 34  |f%<<24)+1:$(m%+4|
000037c0  30 29 3d 22 49 6e 66 6f  22 3a 6d 25 21 35 32 3d  |0)="Info":m%!52=|
000037d0  30 3a 6d 25 21 35 36 3d  77 69 6e 5f 66 69 6c 65  |0:m%!56=win_file|
000037e0  74 25 3a 6d 25 21 36 30  3d 6d 25 21 33 36 0d 0c  |t%:m%!60=m%!36..|
000037f0  94 77 20 20 20 20 20 24  28 6d 25 2b 36 34 29 3d  |.w     $(m%+64)=|
00003800  22 46 69 6c 65 74 79 70  65 73 22 3a 6d 25 21 37  |"Filetypes":m%!7|
00003810  36 3d 26 38 30 3a 6d 25  21 38 30 3d 2d 31 3a 6d  |6=&80:m%!80=-1:m|
00003820  25 21 38 34 3d 6d 25 21  33 36 3a 24 28 6d 25 2b  |%!84=m%!36:$(m%+|
00003830  38 38 29 3d 22 51 75 69  74 22 3a 6d 65 6e 75 31  |88)="Quit":menu1|
00003840  3d 6d 25 3a c8 99 20 57  43 72 65 61 74 65 4d 25  |=m%:.. WCreateM%|
00003850  2c 2c 6d 65 6e 75 31 2c  78 25 2d 36 34 2c 39 36  |,,menu1,x%-64,96|
00003860  2b 33 2a 34 30 0d 0c 9e  22 20 20 20 20 c9 20 31  |+3*40..."    . 1|
00003870  2c 34 20 3a 20 46 72 6f  6d 25 3d 31 3a f2 6d 61  |,4 : From%=1:.ma|
00003880  69 6e 5f 6d 65 6e 75 0d  0c a8 08 20 20 20 cb 0d  |in_menu....   ..|
00003890  0c b2 07 20 20 cd 0d 0c  bc 29 20 c9 20 77 69 6e  |...  ....) . win|
000038a0  5f 69 6d 67 25 20 3a 20  f4 20 43 6c 69 63 6b 20  |_img% : . Click |
000038b0  6f 6e 20 69 6d 61 67 65  20 77 69 6e 64 6f 77 0d  |on image window.|
000038c0  0c c6 13 20 20 c8 8e 20  62 75 74 25 20 80 20 37  |...  .. but% . 7|
000038d0  20 ca 0d 0c d0 1f 20 20  20 c9 20 32 20 3a 20 46  | .....   . 2 : F|
000038e0  72 6f 6d 25 3d 32 3a f2  6d 61 69 6e 5f 6d 65 6e  |rom%=2:.main_men|
000038f0  75 0d 0c da 42 20 20 20  7f 20 3a 20 f4 20 57 61  |u...B   . : . Wa|
00003900  6e 64 65 72 69 6e 67 20  6f 76 65 72 20 69 6d 61  |ndering over ima|
00003910  67 65 2c 20 72 65 63 61  6c 63 75 6c 61 74 65 20  |ge, recalculate |
00003920  7a 6f 6f 6d 20 77 69 6e  64 6f 77 20 69 66 20 6f  |zoom window if o|
00003930  70 65 6e 0d 0c e4 12 20  20 20 20 e7 5a 6f 6f 6d  |pen....    .Zoom|
00003940  57 69 6e 20 8c 0d 0c ee  d6 20 20 20 20 20 78 73  |Win .....     xs|
00003950  25 3d 58 73 74 65 70 25  3a 79 73 25 3d 59 73 74  |%=Xstep%:ys%=Yst|
00003960  65 70 25 3a 78 25 3d 70  6f 6c 6c 21 30 3a 79 25  |ep%:x%=poll!0:y%|
00003970  3d 70 6f 6c 6c 21 34 3a  21 62 6c 6f 63 6b 3d 77  |=poll!4:!block=w|
00003980  69 6e 5f 69 6d 67 25 3a  c8 99 20 57 47 65 74 57  |in_img%:.. WGetW|
00003990  53 25 2c 2c 62 6c 6f 63  6b 3a 6f 78 25 3d 62 6c  |S%,,block:ox%=bl|
000039a0  6f 63 6b 21 34 2d 62 6c  6f 63 6b 21 32 30 3a 6f  |ock!4-block!20:o|
000039b0  79 25 3d 62 6c 6f 63 6b  21 31 36 2d 62 6c 6f 63  |y%=block!16-bloc|
000039c0  6b 21 32 34 3a 72 78 25  3d 78 25 2d 6f 78 25 3a  |k!24:rx%=x%-ox%:|
000039d0  72 79 25 3d 79 25 2d 6f  79 25 3a 65 78 25 3d 72  |ry%=y%-oy%:ex%=r|
000039e0  78 25 2f 5a 6f 6f 6d 58  2f 78 73 25 3a 65 79 25  |x%/ZoomX/xs%:ey%|
000039f0  3d 72 79 25 2f 5a 6f 6f  6d 59 2f 79 73 25 3a f4  |=ry%/ZoomY/ys%:.|
00003a00  20 50 69 78 65 6c 20 63  6f 6f 72 64 69 6e 61 74  | Pixel coordinat|
00003a10  65 73 20 69 6e 20 69 6d  61 67 65 0d 0c f8 3a 20  |es in image...: |
00003a20  20 20 20 20 e7 5a 6f 6f  6d 58 3c 31 20 8c 20 65  |    .ZoomX<1 . e|
00003a30  78 25 3d 65 78 25 2b 31  2f 5a 6f 6f 6d 58 2d 31  |x%=ex%+1/ZoomX-1|
00003a40  3a f4 20 44 69 73 70 6c  61 79 20 63 6f 72 72 65  |:. Display corre|
00003a50  63 74 69 6f 6e 0d 0d 02  3a 20 20 20 20 20 e7 5a  |ction...:     .Z|
00003a60  6f 6f 6d 59 3c 31 20 8c  20 65 79 25 3d 65 79 25  |oomY<1 . ey%=ey%|
00003a70  2b 31 2f 5a 6f 6f 6d 59  2d 31 3a f4 20 44 69 73  |+1/ZoomY-1:. Dis|
00003a80  70 6c 61 79 20 63 6f 72  72 65 63 74 69 6f 6e 0d  |play correction.|
00003a90  0d 0c 7e 20 20 20 20 20  e7 28 5a 6f 6f 6d 57 58  |..~     .(ZoomWX|
00003aa0  25 3c 3e 65 78 25 29 84  28 5a 6f 6f 6d 57 59 25  |%<>ex%).(ZoomWY%|
00003ab0  3c 3e 65 79 25 29 20 8c  20 5a 6f 6f 6d 57 58 25  |<>ey%) . ZoomWX%|
00003ac0  3d 65 78 25 3a 5a 6f 6f  6d 57 59 25 3d 65 79 25  |=ex%:ZoomWY%=ey%|
00003ad0  3a f2 72 65 64 72 61 77  5f 77 69 6e 64 6f 77 28  |:.redraw_window(|
00003ae0  77 69 6e 5f 7a 6f 6f 6d  25 2c b9 29 3a f4 20 49  |win_zoom%,.):. I|
00003af0  66 20 63 68 61 6e 67 65  64 2c 20 72 65 64 72 61  |f changed, redra|
00003b00  77 20 7a 6f 6f 6d 20 77  69 6e 64 6f 77 0d 0d 16  |w zoom window...|
00003b10  09 20 20 20 20 cd 0d 0d  20 07 20 20 cb 0d 0d 2a  |.    ... .  ...*|
00003b20  29 20 c9 20 77 69 6e 5f  7a 6f 6f 6d 25 20 3a 20  |) . win_zoom% : |
00003b30  f4 20 43 6c 69 63 6b 20  6f 6e 20 7a 6f 6f 6d 20  |. Click on zoom |
00003b40  77 69 6e 64 6f 77 0d 0d  34 13 20 20 c8 8e 20 62  |window..4.  .. b|
00003b50  75 74 25 20 80 20 37 20  ca 0d 0d 3e 29 20 20 20  |ut% . 7 ...>)   |
00003b60  c9 20 31 20 3a 20 e7 5a  6f 6f 6d 57 3e 5a 6f 6f  |. 1 : .ZoomW>Zoo|
00003b70  6d 44 20 8c 20 5a 6f 6f  6d 57 3d 5a 6f 6f 6d 57  |mD . ZoomW=ZoomW|
00003b80  2d 31 0d 0d 48 18 20 20  20 c9 20 32 20 3a 20 5a  |-1..H.   . 2 : Z|
00003b90  6f 6f 6d 57 3d 5a 6f 6f  6d 44 0d 0d 52 2f 20 20  |oomW=ZoomD..R/  |
00003ba0  20 c9 20 34 20 3a 20 e7  28 5a 6f 6f 6d 57 2f 5a  | . 4 : .(ZoomW/Z|
00003bb0  6f 6f 6d 44 29 3c 31 30  30 20 8c 20 5a 6f 6f 6d  |oomD)<100 . Zoom|
00003bc0  57 3d 5a 6f 6f 6d 57 2b  31 0d 0d 5c 07 20 20 cb  |W=ZoomW+1..\.  .|
00003bd0  0d 0d 66 36 20 20 f2 72  65 64 72 61 77 5f 77 69  |..f6  .redraw_wi|
00003be0  6e 64 6f 77 28 77 69 6e  5f 7a 6f 6f 6d 25 2c b9  |ndow(win_zoom%,.|
00003bf0  29 3a f4 20 52 65 64 72  61 77 20 7a 6f 6f 6d 20  |):. Redraw zoom |
00003c00  77 69 6e 64 6f 77 0d 0d  70 29 20 c9 20 77 69 6e  |window..p) . win|
00003c10  5f 66 69 6c 65 25 20 3a  20 f4 20 43 6c 69 63 6b  |_file% : . Click|
00003c20  20 6f 6e 20 66 69 6c 65  20 77 69 6e 64 6f 77 0d  | on file window.|
00003c30  0d 7a 0f 20 20 e7 69 63  6f 25 3d 30 20 8c 0d 0d  |.z.  .ico%=0 ...|
00003c40  84 16 20 20 20 c8 8e 20  62 75 74 25 20 80 20 26  |..   .. but% . &|
00003c50  37 46 20 ca 0d 0d 8e 39  20 20 20 20 c9 20 31 36  |7F ....9    . 16|
00003c60  2c 36 34 20 3a 20 f4 20  44 72 61 67 2c 63 61 6c  |,64 : . Drag,cal|
00003c70  63 75 6c 61 74 65 20 64  72 61 67 20 62 6f 78 20  |culate drag box |
00003c80  61 6e 64 20 63 72 65 61  74 65 20 69 74 0d 0d 98  |and create it...|
00003c90  e7 20 20 20 20 20 21 62  6c 6f 63 6b 3d 77 69 6e  |.     !block=win|
00003ca0  25 3a c8 99 20 57 47 65  74 57 53 25 2c 2c 62 6c  |%:.. WGetWS%,,bl|
00003cb0  6f 63 6b 3a 78 25 3d 62  6c 6f 63 6b 21 34 3a 79  |ock:x%=block!4:y|
00003cc0  25 3d 62 6c 6f 63 6b 21  38 3a 62 6c 6f 63 6b 21  |%=block!8:block!|
00003cd0  34 3d 69 63 6f 25 3a c8  99 20 57 47 65 74 49 53  |4=ico%:.. WGetIS|
00003ce0  25 2c 2c 62 6c 6f 63 6b  3a 21 62 6c 6f 63 6b 3d  |%,,block:!block=|
00003cf0  77 69 6e 25 3a 62 6c 6f  63 6b 21 34 3d 35 3a 62  |win%:block!4=5:b|
00003d00  6c 6f 63 6b 21 38 2b 3d  78 25 3a 62 6c 6f 63 6b  |lock!8+=x%:block|
00003d10  21 31 32 2b 3d 79 25 3a  62 6c 6f 63 6b 21 31 36  |!12+=y%:block!16|
00003d20  3d 62 6c 6f 63 6b 21 38  2b 36 38 3a 62 6c 6f 63  |=block!8+68:bloc|
00003d30  6b 21 32 30 3d 62 6c 6f  63 6b 21 31 32 2b 36 38  |k!20=block!12+68|
00003d40  3a 62 6c 6f 63 6b 21 32  34 3d 30 3a 62 6c 6f 63  |:block!24=0:bloc|
00003d50  6b 21 32 38 3d 30 3a 62  6c 6f 63 6b 21 33 32 3d  |k!28=0:block!32=|
00003d60  53 63 72 57 25 3a 62 6c  6f 63 6b 21 33 36 3d 53  |ScrW%:block!36=S|
00003d70  63 72 48 25 0d 0d a2 2c  20 20 20 20 20 c8 99 20  |crH%...,     .. |
00003d80  57 44 72 61 67 42 25 2c  2c 62 6c 6f 63 6b 3a f4  |WDragB%,,block:.|
00003d90  20 43 72 65 61 74 65 20  64 72 61 67 20 62 6f 78  | Create drag box|
00003da0  0d 0d ac 08 20 20 20 cb  0d 0d b6 07 20 20 cd 0d  |....   .....  ..|
00003db0  0d c0 2f 20 c9 20 77 69  6e 5f 72 67 62 62 69 74  |../ . win_rgbbit|
00003dc0  73 25 20 3a 20 f4 20 52  47 42 20 73 6c 69 64 65  |s% : . RGB slide|
00003dd0  72 20 6d 61 6e 69 70 75  6c 61 74 69 6f 6e 0d 0d  |r manipulation..|
00003de0  ca 8f 20 20 21 62 6c 6f  63 6b 3d 77 69 6e 25 3a  |..  !block=win%:|
00003df0  c8 99 20 57 47 65 74 57  53 25 2c 2c 62 6c 6f 63  |.. WGetWS%,,bloc|
00003e00  6b 3a 78 25 3d 62 6c 6f  63 6b 21 34 3a 79 25 3d  |k:x%=block!4:y%=|
00003e10  62 6c 6f 63 6b 21 38 3a  62 6c 6f 63 6b 21 34 3d  |block!8:block!4=|
00003e20  69 63 6f 25 3a c8 99 20  57 47 65 74 49 53 25 2c  |ico%:.. WGetIS%,|
00003e30  2c 62 6c 6f 63 6b 3a 78  25 2b 3d 62 6c 6f 63 6b  |,block:x%+=block|
00003e40  21 38 2b 32 3a 79 25 2b  3d 62 6c 6f 63 6b 21 31  |!8+2:y%+=block!1|
00003e50  32 2b 38 3a f4 20 50 6f  73 69 74 69 6f 6e 20 69  |2+8:. Position i|
00003e60  6e 20 73 6c 69 64 65 72  20 69 63 6f 6e 0d 0d d4  |n slider icon...|
00003e70  46 20 20 6d 78 25 3d 21  70 6f 6c 6c 3a 64 78 25  |F  mx%=!poll:dx%|
00003e80  3d 6d 78 25 2d 78 25 2d  38 3a 76 61 6c 25 3d 64  |=mx%-x%-8:val%=d|
00003e90  78 25 20 81 20 31 36 3a  e7 76 61 6c 25 3e 38 20  |x% . 16:.val%>8 |
00003ea0  8c 20 76 61 6c 25 3d 38  3a f4 20 50 6f 73 69 74  |. val%=8:. Posit|
00003eb0  69 6f 6e 0d 0d de 86 20  20 e7 69 63 6f 25 3d 33  |ion....  .ico%=3|
00003ec0  20 8c 20 63 6f 6c 25 3d  31 31 3a 73 6e 24 3d 22  | . col%=11:sn$="|
00003ed0  52 22 3a 62 69 74 25 3d  31 36 20 8b 20 e7 69 63  |R":bit%=16 . .ic|
00003ee0  6f 25 3d 34 20 8c 20 63  6f 6c 25 3d 31 30 3a 73  |o%=4 . col%=10:s|
00003ef0  6e 24 3d 22 47 22 3a 62  69 74 25 3d 38 20 8b 20  |n$="G":bit%=8 . |
00003f00  63 6f 6c 25 3d 38 3a 73  6e 24 3d 22 42 22 3a 62  |col%=8:sn$="B":b|
00003f10  69 74 25 3d 30 3a f4 20  53 6c 69 64 65 72 20 63  |it%=0:. Slider c|
00003f20  6f 6c 6f 75 72 73 2c 20  6e 61 6d 65 73 2c 20 62  |olours, names, b|
00003f30  69 74 6f 66 66 73 65 74  73 0d 0d e8 24 20 20 f4  |itoffsets...$  .|
00003f40  20 50 6c 6f 74 20 73 6c  69 64 65 72 20 69 6e 20  | Plot slider in |
00003f50  73 6c 69 64 65 72 20 73  70 72 69 74 65 0d 0d f2  |slider sprite...|
00003f60  7e 20 20 c8 99 20 4f 53  53 70 6f 70 25 2c 36 30  |~  .. OSSpop%,60|
00003f70  2b 32 35 36 2c 69 63 6f  6e 73 70 72 69 74 65 73  |+256,iconsprites|
00003f80  2c 22 73 6c 69 64 65 72  22 2b 73 6e 24 2c 30 20  |,"slider"+sn$,0 |
00003f90  b8 20 72 30 2c 72 31 2c  72 32 2c 72 33 3a e6 30  |. r0,r1,r2,r3:.0|
00003fa0  2c 30 3a c8 93 20 c8 90  20 32 2c 38 2c 38 2a 31  |,0:.. .. 2,8,8*1|
00003fb0  36 2c 31 36 3a e6 30 2c  63 6f 6c 25 3a e7 76 61  |6,16:.0,col%:.va|
00003fc0  6c 25 3e 30 20 8c 20 c8  93 20 c8 90 20 32 2c 38  |l%>0 . .. .. 2,8|
00003fd0  2c 76 61 6c 25 2a 31 36  2c 31 36 0d 0d fc 32 20  |,val%*16,16...2 |
00003fe0  20 c8 99 20 4f 53 53 70  6f 70 25 2c 72 30 2c 72  | .. OSSpop%,r0,r|
00003ff0  31 2c 72 32 2c 72 33 3a  f4 20 52 65 73 74 6f 72  |1,r2,r3:. Restor|
00004000  65 20 56 44 55 20 63 6f  6e 74 65 78 74 0d 0e 06  |e VDU context...|
00004010  8f 20 20 52 47 42 62 69  74 73 25 3d 28 52 47 42  |.  RGBbits%=(RGB|
00004020  62 69 74 73 25 20 80 20  ac 20 28 32 35 35 3c 3c  |bits% . . (255<<|
00004030  62 69 74 25 29 29 20 84  20 28 76 61 6c 25 3c 3c  |bit%)) . (val%<<|
00004040  62 69 74 25 29 3a 21 62  6c 6f 63 6b 3d 77 69 6e  |bit%):!block=win|
00004050  25 3a 62 6c 6f 63 6b 21  34 3d 69 63 6f 25 3a 62  |%:block!4=ico%:b|
00004060  6c 6f 63 6b 21 38 3d 30  3a 62 6c 6f 63 6b 21 31  |lock!8=0:block!1|
00004070  32 3d 30 3a c8 99 20 57  53 65 74 49 53 25 2c 2c  |2=0:.. WSetIS%,,|
00004080  62 6c 6f 63 6b 3a f4 20  55 70 64 61 74 65 20 63  |block:. Update c|
00004090  6f 64 65 20 61 6e 64 20  69 63 6f 6e 0d 0e 10 05  |ode and icon....|
000040a0  cb 0d 0e 1a 05 e1 0d 0e  24 05 20 0d 0e 2e 0e dd  |........$. .....|
000040b0  f2 64 72 61 67 64 72 6f  70 0d 0e 38 21 c8 99 20  |.dragdrop..8!.. |
000040c0  57 43 72 65 61 74 65 4d  25 2c 2c 2d 31 3a f4 20  |WCreateM%,,-1:. |
000040d0  43 6c 6f 73 65 20 6d 65  6e 75 0d 0e 42 2c c8 99  |Close menu..B,..|
000040e0  20 57 47 65 74 50 49 25  2c 2c 62 6c 6f 63 6b 3a  | WGetPI%,,block:|
000040f0  f4 20 47 65 74 20 70 6f  69 6e 74 65 72 20 70 6f  |. Get pointer po|
00004100  73 69 74 69 6f 6e 0d 0e  4c 47 64 72 6f 70 77 69  |sition..LGdropwi|
00004110  6e 25 3d 62 6c 6f 63 6b  21 31 32 3a 64 72 6f 70  |n%=block!12:drop|
00004120  69 63 6f 25 3d 62 6c 6f  63 6b 21 31 36 3a f4 20  |ico%=block!16:. |
00004130  57 69 6e 64 6f 77 2f 69  63 6f 6e 20 77 68 65 72  |Window/icon wher|
00004140  65 20 62 6f 78 20 64 72  6f 70 70 65 64 0d 0e 56  |e box dropped..V|
00004150  28 73 61 76 65 24 3d a4  73 74 72 69 6e 67 28 53  |(save$=.string(S|
00004160  41 56 66 6e 25 29 3a f4  20 47 65 74 20 6c 65 61  |AVfn%):. Get lea|
00004170  66 6e 61 6d 65 0d 0e 60  6f e7 24 53 41 56 73 6e  |fname..`o.$SAVsn|
00004180  25 3d 22 66 69 6c 65 5f  66 66 39 22 20 8c 20 53  |%="file_ff9" . S|
00004190  61 76 65 53 70 72 24 3d  73 61 76 65 24 3a 66 74  |aveSpr$=save$:ft|
000041a0  25 3d 26 46 46 39 20 8b  20 53 61 76 65 43 6c 65  |%=&FF9 . SaveCle|
000041b0  61 72 24 3d 73 61 76 65  24 3a 66 74 25 3d 26 36  |ar$=save$:ft%=&6|
000041c0  39 30 3a f4 20 52 65 6d  65 6d 62 65 72 20 6c 65  |90:. Remember le|
000041d0  61 66 6e 61 6d 65 2c 20  73 65 74 20 66 69 6c 65  |afname, set file|
000041e0  74 79 70 65 0d 0e 6a a4  62 6c 6f 63 6b 21 32 30  |type..j.block!20|
000041f0  3d 62 6c 6f 63 6b 21 31  32 3a 62 6c 6f 63 6b 21  |=block!12:block!|
00004200  32 34 3d 62 6c 6f 63 6b  21 31 36 3a 62 6c 6f 63  |24=block!16:bloc|
00004210  6b 21 32 38 3d 62 6c 6f  63 6b 21 30 3a 62 6c 6f  |k!28=block!0:blo|
00004220  63 6b 21 33 32 3d 62 6c  6f 63 6b 21 34 3a 62 6c  |ck!32=block!4:bl|
00004230  6f 63 6b 21 31 32 3d 30  3a 62 6c 6f 63 6b 21 31  |ock!12=0:block!1|
00004240  36 3d 31 3a 62 6c 6f 63  6b 21 33 36 3d 30 3a 62  |6=1:block!36=0:b|
00004250  6c 6f 63 6b 21 34 30 3d  66 74 25 3a 24 28 62 6c  |lock!40=ft%:$(bl|
00004260  6f 63 6b 2b 34 34 29 3d  73 61 76 65 24 2b bd 30  |ock+44)=save$+.0|
00004270  3a 21 62 6c 6f 63 6b 3d  28 34 34 2b a9 73 61 76  |:!block=(44+.sav|
00004280  65 24 2b 34 29 80 ac 33  0d 0e 74 3b c8 99 20 57  |e$+4)..3..t;.. W|
00004290  53 65 6e 64 4d 73 67 25  2c 31 37 2c 62 6c 6f 63  |SendMsg%,17,bloc|
000042a0  6b 2c 64 72 6f 70 77 69  6e 25 2c 64 72 6f 70 69  |k,dropwin%,dropi|
000042b0  63 6f 25 3a f4 20 53 65  6e 64 20 44 61 74 61 53  |co%:. Send DataS|
000042c0  61 76 65 0d 0e 7e 36 44  61 74 61 53 61 76 65 52  |ave..~6DataSaveR|
000042d0  65 66 25 3d 62 6c 6f 63  6b 21 38 3a f4 20 52 65  |ef%=block!8:. Re|
000042e0  6d 65 6d 62 65 72 20 6d  79 72 65 66 20 66 6f 72  |member myref for|
000042f0  20 44 61 74 61 53 61 76  65 0d 0e 88 30 f2 63 6c  | DataSave...0.cl|
00004300  6f 73 65 5f 77 69 6e 64  6f 77 28 77 69 6e 5f 66  |ose_window(win_f|
00004310  69 6c 65 25 29 3a f4 20  43 6c 6f 73 65 20 66 69  |ile%):. Close fi|
00004320  6c 65 20 77 69 6e 64 6f  77 0d 0e 92 05 e1 0d 0e  |le window.......|
00004330  9c 04 0d 0e a6 1d dd a4  69 6d 61 67 65 5f 74 79  |........image_ty|
00004340  70 65 28 6e 61 6d 65 24  2c 63 68 65 63 6b 29 0d  |pe(name$,check).|
00004350  0e b0 3a f4 20 45 78 61  6d 69 6e 65 73 20 66 69  |..:. Examines fi|
00004360  6c 65 20 61 6e 64 20 72  65 74 75 72 6e 73 20 66  |le and returns f|
00004370  69 6c 65 74 79 70 65 20  3c 3e 30 20 69 66 20 69  |iletype <>0 if i|
00004380  6d 61 67 65 20 66 69 6c  65 0d 0e ba 3d f4 20 49  |mage file...=. I|
00004390  66 20 63 68 65 63 6b 3d  54 52 55 45 2c 20 63 6f  |f check=TRUE, co|
000043a0  6e 74 65 6e 74 73 20 61  72 65 20 63 68 65 63 6b  |ntents are check|
000043b0  65 64 20 61 73 20 77 65  6c 6c 20 61 73 20 66 69  |ed as well as fi|
000043c0  6c 65 74 79 70 65 0d 0e  c4 22 ea 20 6f 62 6a 25  |letype...". obj%|
000043d0  2c 6c 6f 61 64 25 2c 74  79 70 65 25 2c 48 65 61  |,load%,type%,Hea|
000043e0  64 2c 69 64 24 2c 69 25  0d 0e ce 37 c8 99 20 22  |d,id$,i%...7.. "|
000043f0  4f 53 5f 46 69 6c 65 22  2c 35 2c 6e 61 6d 65 24  |OS_File",5,name$|
00004400  20 b8 20 6f 62 6a 25 2c  2c 6c 6f 61 64 25 3a f4  | . obj%,,load%:.|
00004410  20 52 65 61 64 20 66 69  6c 65 20 69 6e 66 6f 0d  | Read file info.|
00004420  0e d8 1e e7 6f 62 6a 25  3c 3e 31 20 8c 20 3d 30  |....obj%<>1 . =0|
00004430  3a f4 20 4e 6f 74 20 61  20 66 69 6c 65 0d 0e e2  |:. Not a file...|
00004440  39 e7 28 6c 6f 61 64 25  3e 3e 3e 32 30 29 3d 26  |9.(load%>>>20)=&|
00004450  46 46 46 20 8c 20 74 79  70 65 25 3d 28 6c 6f 61  |FFF . type%=(loa|
00004460  64 25 3e 3e 3e 38 29 80  26 46 46 46 20 8b 20 74  |d%>>>8).&FFF . t|
00004470  79 70 65 25 3d 30 0d 0e  ec 0e c8 8e 20 74 79 70  |ype%=0...... typ|
00004480  65 25 20 ca 0d 0e f6 8f  20 c9 20 26 36 39 30 2c  |e% ..... . &690,|
00004490  26 36 39 31 2c 26 36 39  32 2c 26 36 39 33 2c 26  |&691,&692,&693,&|
000044a0  36 39 34 2c 26 36 39 35  2c 26 36 39 37 2c 26 36  |694,&695,&697,&6|
000044b0  39 38 2c 26 36 39 39 2c  26 36 39 41 2c 26 36 39  |98,&699,&69A,&69|
000044c0  42 2c 26 36 39 43 2c 26  36 39 44 2c 26 36 39 45  |B,&69C,&69D,&69E|
000044d0  2c 26 36 39 46 2c 26 46  43 39 2c 26 46 46 30 2c  |,&69F,&FC9,&FF0,|
000044e0  26 46 46 39 2c 26 44 45  32 2c 26 44 46 41 2c 26  |&FF9,&DE2,&DFA,&|
000044f0  44 35 38 2c 26 30 30 34  20 3a 20 f4 20 52 65 63  |D58,&004 : . Rec|
00004500  6f 67 6e 69 7a 65 64 20  62 79 20 66 69 6c 65 74  |ognized by filet|
00004510  79 70 65 0d 0f 00 12 20  7f 20 e7 63 68 65 63 6b  |ype.... . .check|
00004520  20 8b 20 3d 30 0d 0f 0a  33 20 20 48 65 61 64 3d  | . =0...3  Head=|
00004530  8e 28 6e 61 6d 65 24 29  3a f4 20 4f 70 65 6e 20  |.(name$):. Open |
00004540  66 69 6c 65 20 74 6f 20  65 78 61 6d 69 6e 65 20  |file to examine |
00004550  63 6f 6e 74 65 6e 74 73  0d 0f 14 2d 20 20 74 79  |contents...-  ty|
00004560  70 65 25 3d 30 3a f4 20  4e 6f 74 20 72 65 63 6f  |pe%=0:. Not reco|
00004570  67 6e 69 7a 65 64 20 61  6e 79 74 68 69 6e 67 20  |gnized anything |
00004580  28 79 65 74 29 0d 0f 1e  29 20 20 69 64 24 3d 22  |(yet)...)  id$="|
00004590  22 3a e3 20 69 25 3d 31  20 b8 20 31 32 3a 69 64  |":. i%=1 . 12:id|
000045a0  24 2b 3d bd 28 9a 23 48  65 61 64 29 3a ed 0d 0f  |$+=.(.#Head):...|
000045b0  28 84 20 20 e7 c0 69 64  24 2c 36 29 3d 22 47 49  |(.  ..id$,6)="GI|
000045c0  46 38 37 61 22 20 8c 20  74 79 70 65 25 3d 26 36  |F87a" . type%=&6|
000045d0  39 35 20 8b 20 e7 28 c0  69 64 24 2c 34 29 3d 22  |95 . .(.id$,4)="|
000045e0  46 4f 52 4d 22 29 20 80  20 28 c2 69 64 24 2c 34  |FORM") . (.id$,4|
000045f0  29 3d 22 49 4c 42 4d 22  29 20 8c 20 74 79 70 65  |)="ILBM") . type|
00004600  25 3d 26 36 39 33 20 8b  20 e7 c0 69 64 24 2c 34  |%=&693 . ..id$,4|
00004610  29 3d bd 26 35 39 2b bd  26 41 36 2b bd 26 36 41  |)=.&59+.&A6+.&6A|
00004620  2b bd 26 39 35 20 8c 20  74 79 70 65 25 3d 26 46  |+.&95 . type%=&F|
00004630  43 39 0d 0f 32 ab 20 20  e7 74 79 70 65 25 3c 3e  |C9..2.  .type%<>|
00004640  30 20 8b 20 e7 28 c0 69  64 24 2c 32 29 3d 22 49  |0 . .(.id$,2)="I|
00004650  49 22 29 20 84 20 28 c0  69 64 24 2c 32 29 3d 22  |I") . (.id$,2)="|
00004660  4d 4d 22 29 20 8c 20 74  79 70 65 25 3d 26 46 46  |MM") . type%=&FF|
00004670  30 20 8b 20 e7 c0 69 64  24 2c 35 29 3d 22 49 72  |0 . ..id$,5)="Ir|
00004680  6c 61 6d 22 20 8c 20 74  79 70 65 25 3d 26 36 39  |lam" . type%=&69|
00004690  42 20 8b 20 e7 c0 69 64  24 2c 32 29 3d 22 42 4d  |B . ..id$,2)="BM|
000046a0  22 20 8c 20 74 79 70 65  25 3d 26 36 39 43 20 8b  |" . type%=&69C .|
000046b0  20 e7 28 a7 22 50 31 50  32 50 33 50 34 50 35 50  | .(."P1P2P3P4P5P|
000046c0  36 22 2c c0 69 64 24 2c  32 29 29 83 32 29 3e 30  |6",.id$,2)).2)>0|
000046d0  20 8c 20 74 79 70 65 25  3d 26 36 39 45 0d 0f 3c  | . type%=&69E..<|
000046e0  2e 20 20 e7 74 79 70 65  25 3c 3e 30 20 8b 20 e7  |.  .type%<>0 . .|
000046f0  c0 69 64 24 2c 34 29 3d  22 5a 56 44 41 22 20 8c  |.id$,4)="ZVDA" .|
00004700  20 74 79 70 65 25 3d 26  36 39 46 0d 0f 46 58 20  | type%=&69F..FX |
00004710  20 e7 74 79 70 65 25 3c  3e 30 20 8b 20 cf 23 48  | .type%<>0 . .#H|
00004720  65 61 64 3d 26 34 31 3a  69 64 24 3d 22 22 3a e3  |ead=&41:id$="":.|
00004730  20 69 25 3d 31 20 b8 20  34 3a 69 64 24 2b 3d bd  | i%=1 . 4:id$+=.|
00004740  28 9a 23 48 65 61 64 29  3a ed 3a e7 69 64 24 3d  |(.#Head):.:.id$=|
00004750  22 50 4e 54 47 22 20 8c  20 74 79 70 65 25 3d 26  |"PNTG" . type%=&|
00004760  36 39 34 0d 0f 50 5d 20  20 e7 74 79 70 65 25 3c  |694..P]  .type%<|
00004770  3e 30 20 8b 20 cf 23 48  65 61 64 3d 26 31 30 3a  |>0 . .#Head=&10:|
00004780  69 64 24 3d 22 22 3a e3  20 69 25 3d 31 20 b8 20  |id$="":. i%=1 . |
00004790  39 3a 69 64 24 2b 3d bd  28 9a 23 48 65 61 64 29  |9:id$+=.(.#Head)|
000047a0  3a ed 3a e7 69 64 24 3d  22 4d 49 4c 4c 49 50 45  |:.:.id$="MILLIPE|
000047b0  44 45 22 20 8c 20 74 79  70 65 25 3d 26 36 39 41  |DE" . type%=&69A|
000047c0  0d 0f 5a 1f 20 20 d9 23  48 65 61 64 3a f4 20 43  |..Z.  .#Head:. C|
000047d0  6c 6f 73 65 20 69 6d 61  67 65 20 66 69 6c 65 0d  |lose image file.|
000047e0  0f 64 05 cb 0d 0f 6e 0a  3d 74 79 70 65 25 0d 0f  |.d....n.=type%..|
000047f0  78 05 20 0d 0f 82 17 dd  a4 6c 6f 61 64 28 74 79  |x. ......load(ty|
00004800  70 65 25 2c 6e 61 6d 65  24 29 0d 0f 8c 16 f4 20  |pe%,name$)..... |
00004810  4c 6f 61 64 73 20 69 6d  61 67 65 20 66 69 6c 65  |Loads image file|
00004820  0d 0f 96 30 f4 20 52 65  74 75 72 6e 73 20 54 52  |...0. Returns TR|
00004830  55 45 20 69 66 20 73 75  63 63 65 73 66 75 6c 20  |UE if succesful |
00004840  6c 6f 61 64 2c 20 65 6c  73 65 20 46 41 4c 53 45  |load, else FALSE|
00004850  0d 0f a0 2f 49 6e 46 69  6c 65 24 3d 6e 61 6d 65  |.../InFile$=name|
00004860  24 3a 49 6e 54 79 70 65  25 3d 74 79 70 65 25 3a  |$:InType%=type%:|
00004870  f4 20 53 65 74 20 66 69  6c 65 20 69 6e 66 6f 0d  |. Set file info.|
00004880  0f aa 7b 70 6f 73 25 3d  a9 6e 61 6d 65 24 3a f5  |..{pos%=.name$:.|
00004890  20 70 6f 73 25 2d 3d 31  3a 70 65 72 69 6f 64 3d  | pos%-=1:period=|
000048a0  28 c1 6e 61 6d 65 24 2c  70 6f 73 25 2c 31 29 3d  |(.name$,pos%,1)=|
000048b0  22 2e 22 29 3a fd 20 28  70 6f 73 25 3d 31 29 20  |"."):. (pos%=1) |
000048c0  84 20 70 65 72 69 6f 64  3a e7 70 65 72 69 6f 64  |. period:.period|
000048d0  20 8c 20 4c 65 61 66 24  3d c2 6e 61 6d 65 24 2c  | . Leaf$=.name$,|
000048e0  a9 6e 61 6d 65 24 2d 70  6f 73 25 29 20 8b 20 4c  |.name$-pos%) . L|
000048f0  65 61 66 24 3d 6e 61 6d  65 24 0d 0f b4 34 c8 99  |eaf$=name$...4..|
00004900  20 22 4f 53 5f 46 69 6c  65 22 2c 35 2c 6e 61 6d  | "OS_File",5,nam|
00004910  65 24 20 b8 20 2c 2c 2c  2c 46 6c 65 6e 25 3a f4  |e$ . ,,,,Flen%:.|
00004920  20 46 69 6c 65 27 73 20  6c 65 6e 67 74 68 0d 0f  | File's length..|
00004930  be 3d 46 31 25 3d 8e 28  6e 61 6d 65 24 29 3a 64  |.=F1%=.(name$):d|
00004940  25 3d a4 69 62 3a f2 69  70 74 72 28 46 31 25 2c  |%=.ib:.iptr(F1%,|
00004950  30 29 3a f4 20 4f 70 65  6e 20 66 69 6c 65 2c 20  |0):. Open file, |
00004960  65 6e 73 75 72 65 20 64  69 73 63 0d 0f c8 35 f2  |ensure disc...5.|
00004970  76 61 72 28 22 66 68 61  31 22 2c 46 31 25 29 3a  |var("fha1",F1%):|
00004980  f2 76 61 72 28 22 69 66  70 31 22 2c 30 29 3a f4  |.var("ifp1",0):.|
00004990  20 52 45 4d 20 4d 6f 64  75 6c 65 20 69 6e 66 6f  | REM Module info|
000049a0  0d 0f d2 0c f2 68 6f 75  72 5f 6f 6e 0d 0f dc 42  |.....hour_on...B|
000049b0  e7 50 65 72 63 65 6e 74  20 8c 20 c8 99 20 22 48  |.Percent . .. "H|
000049c0  6f 75 72 67 6c 61 73 73  5f 50 65 72 63 65 6e 74  |ourglass_Percent|
000049d0  61 67 65 22 2c 30 3a f4  20 49 6e 69 74 20 70 65  |age",0:. Init pe|
000049e0  72 63 65 6e 74 61 67 65  20 69 66 20 6f 6e 0d 0f  |rcentage if on..|
000049f0  e6 3f e7 77 69 6e 5f 69  6d 67 25 3e 30 20 8c 20  |.?.win_img%>0 . |
00004a00  f2 63 6c 6f 73 65 5f 77  69 6e 64 6f 77 28 77 69  |.close_window(wi|
00004a10  6e 5f 69 6d 67 25 29 3a  f4 20 4f 6c 64 20 69 6d  |n_img%):. Old im|
00004a20  61 67 65 20 64 69 73 63  61 72 64 65 64 0d 0f f0  |age discarded...|
00004a30  28 e7 49 6d 67 20 8c 20  f2 69 6e 76 61 6c 69 64  |(.Img . .invalid|
00004a40  61 74 65 5f 69 6d 61 67  65 20 8b 20 50 72 65 4d  |ate_image . PreM|
00004a50  6f 64 65 3d eb 0d 0f fa  21 f2 64 65 61 6c 6c 6f  |ode=....!.deallo|
00004a60  63 61 74 65 3a f4 20 46  72 65 65 20 61 6c 6c 20  |cate:. Free all |
00004a70  6d 65 6d 6f 72 79 0d 10  04 0e c8 8e 20 74 79 70  |memory...... typ|
00004a80  65 25 20 ca 0d 10 0e a7  20 c9 20 26 46 46 39 20  |e% ..... . &FF9 |
00004a90  3a 20 70 25 3d a7 22 2e  22 2b a4 75 70 73 74 72  |: p%=."."+.upstr|
00004aa0  69 6e 67 28 6e 61 6d 65  24 29 2c 22 2e 48 49 50  |ing(name$),".HIP|
00004ab0  2e 22 29 3a e7 70 25 3e  30 20 8c 20 6c 6f 70 70  |."):.p%>0 . lopp|
00004ac0  61 74 68 24 3d 6e 61 6d  65 24 3a c1 6c 6f 70 70  |ath$=name$:.lopp|
00004ad0  61 74 68 24 2c 70 25 2c  33 29 3d 22 4c 4f 50 22  |ath$,p%,3)="LOP"|
00004ae0  3a 46 32 25 3d 8e 28 6c  6f 70 70 61 74 68 24 29  |:F2%=.(loppath$)|
00004af0  3a e7 46 32 25 3d 30 20  8c 20 f2 65 72 72 6f 72  |:.F2%=0 . .error|
00004b00  28 2d 31 2c 22 49 20 63  61 6e 6e 6f 74 20 66 69  |(-1,"I cannot fi|
00004b10  6e 64 20 74 68 65 20 41  72 56 69 73 20 4c 4f 50  |nd the ArVis LOP|
00004b20  20 66 69 6c 65 20 21 22  29 3a e1 0d 10 18 5e 20  | file !"):....^ |
00004b30  20 e7 70 25 3d 30 20 8c  20 4f 6b 3d a4 70 69 63  | .p%=0 . Ok=.pic|
00004b40  5f 41 52 43 20 8b 20 f2  76 61 72 28 22 66 68 61  |_ARC . .var("fha|
00004b50  32 22 2c 46 32 25 29 3a  f2 76 61 72 28 22 69 66  |2",F2%):.var("if|
00004b60  70 32 22 2c 30 29 3a 4f  6b 3d a4 70 69 63 5f 41  |p2",0):Ok=.pic_A|
00004b70  52 56 49 53 3a f4 20 57  68 61 74 27 73 20 74 68  |RVIS:. What's th|
00004b80  69 73 20 74 68 65 6e 20  3f 0d 10 22 1c 20 c9 20  |is then ?..". . |
00004b90  26 44 45 32 20 3a 20 4f  6b 3d a4 70 69 63 5f 50  |&DE2 : Ok=.pic_P|
00004ba0  52 4f 41 52 54 0d 10 2c  1d 20 c9 20 26 44 46 41  |ROART..,. . &DFA|
00004bb0  20 3a 20 4f 6b 3d a4 70  69 63 5f 57 41 54 46 4f  | : Ok=.pic_WATFO|
00004bc0  52 44 0d 10 36 1c 20 c9  20 26 44 35 38 20 3a 20  |RD..6. . &D58 : |
00004bd0  4f 6b 3d a4 70 69 63 5f  52 45 4e 44 45 52 0d 10  |Ok=.pic_RENDER..|
00004be0  40 19 20 c9 20 26 30 30  34 20 3a 20 4f 6b 3d a4  |@. . &004 : Ok=.|
00004bf0  70 69 63 5f 41 49 4d 0d  10 4a 1b 20 c9 20 26 36  |pic_AIM..J. . &6|
00004c00  39 30 20 3a 20 4f 6b 3d  a4 70 69 63 5f 43 4c 45  |90 : Ok=.pic_CLE|
00004c10  41 52 0d 10 54 1b 20 c9  20 26 36 39 31 20 3a 20  |AR..T. . &691 : |
00004c20  4f 6b 3d a4 70 69 63 5f  44 45 47 41 53 0d 10 5e  |Ok=.pic_DEGAS..^|
00004c30  19 20 c9 20 26 36 39 32  20 3a 20 4f 6b 3d a4 70  |. . &692 : Ok=.p|
00004c40  69 63 5f 49 4d 47 0d 10  68 19 20 c9 20 26 36 39  |ic_IMG..h. . &69|
00004c50  33 20 3a 20 4f 6b 3d a4  70 69 63 5f 49 46 46 0d  |3 : Ok=.pic_IFF.|
00004c60  10 72 19 20 c9 20 26 36  39 34 20 3a 20 4f 6b 3d  |.r. . &694 : Ok=|
00004c70  a4 70 69 63 5f 4d 41 43  0d 10 7c 19 20 c9 20 26  |.pic_MAC..|. . &|
00004c80  36 39 35 20 3a 20 4f 6b  3d a4 70 69 63 5f 47 49  |695 : Ok=.pic_GI|
00004c90  46 0d 10 86 19 20 c9 20  26 36 39 37 20 3a 20 4f  |F.... . &697 : O|
00004ca0  6b 3d a4 70 69 63 5f 50  43 58 0d 10 90 19 20 c9  |k=.pic_PCX.... .|
00004cb0  20 26 36 39 38 20 3a 20  4f 6b 3d a4 70 69 63 5f  | &698 : Ok=.pic_|
00004cc0  51 52 54 0d 10 9a 19 20  c9 20 26 36 39 39 20 3a  |QRT.... . &699 :|
00004cd0  20 4f 6b 3d a4 70 69 63  5f 4d 54 56 0d 10 a4 1d  | Ok=.pic_MTV....|
00004ce0  20 c9 20 26 36 39 41 20  3a 20 4f 6b 3d a4 70 69  | . &69A : Ok=.pi|
00004cf0  63 5f 43 41 44 53 4f 46  54 0d 10 ae 1b 20 c9 20  |c_CADSOFT.... . |
00004d00  26 36 39 42 20 3a 20 4f  6b 3d a4 70 69 63 5f 49  |&69B : Ok=.pic_I|
00004d10  52 4c 41 4d 0d 10 b8 19  20 c9 20 26 36 39 43 20  |RLAM.... . &69C |
00004d20  3a 20 4f 6b 3d a4 70 69  63 5f 42 4d 50 0d 10 c2  |: Ok=.pic_BMP...|
00004d30  1b 20 c9 20 26 36 39 44  20 3a 20 4f 6b 3d a4 70  |. . &69D : Ok=.p|
00004d40  69 63 5f 54 41 52 47 41  0d 10 cc 1d 20 c9 20 26  |ic_TARGA.... . &|
00004d50  36 39 45 20 3a 20 4f 6b  3d a4 70 69 63 5f 50 42  |69E : Ok=.pic_PB|
00004d60  4d 50 4c 55 53 0d 10 d6  1a 20 c9 20 26 36 39 46  |MPLUS.... . &69F|
00004d70  20 3a 20 4f 6b 3d a4 70  69 63 5f 5a 56 44 41 0d  | : Ok=.pic_ZVDA.|
00004d80  10 e0 19 20 c9 20 26 46  43 39 20 3a 20 4f 6b 3d  |... . &FC9 : Ok=|
00004d90  a4 70 69 63 5f 53 55 4e  0d 10 ea 1a 20 c9 20 26  |.pic_SUN.... . &|
00004da0  46 46 30 20 3a 20 4f 6b  3d a4 70 69 63 5f 54 49  |FF0 : Ok=.pic_TI|
00004db0  46 46 0d 10 f4 05 cb 0d  10 fe 24 49 6d 67 3d 4f  |FF........$Img=O|
00004dc0  6b 3a f4 20 49 6d 61 67  65 20 6f 6b 20 69 66 20  |k:. Image ok if |
00004dd0  61 6c 6c 20 69 73 20 77  65 6c 6c 0d 11 08 0a e7  |all is well.....|
00004de0  49 6d 67 20 8c 0d 11 12  13 20 49 6d 67 4d 6f 64  |Img ..... ImgMod|
00004df0  65 25 3d 4d 6f 64 65 25  0d 11 1c 1f 20 e7 53 61  |e%=Mode%.... .Sa|
00004e00  6d 65 4c 65 61 66 20 8c  20 53 61 76 65 53 70 72  |meLeaf . SaveSpr|
00004e10  24 3d 4c 65 61 66 24 0d  11 26 05 cd 0d 11 30 0d  |$=Leaf$..&....0.|
00004e20  f2 68 6f 75 72 5f 6f 66  66 0d 11 3a 21 f2 69 63  |.hour_off..:!.ic|
00004e30  6c 6f 73 65 3a f4 20 43  6c 6f 73 65 20 69 6e 70  |lose:. Close inp|
00004e40  75 74 20 66 69 6c 65 28  73 29 0d 11 44 08 3d 49  |ut file(s)..D.=I|
00004e50  6d 67 0d 11 4e 04 0d 11  58 17 dd f2 73 61 76 65  |mg..N...X...save|
00004e60  5f 73 70 72 69 74 65 28  6f 75 74 24 29 0d 11 62  |_sprite(out$)..b|
00004e70  1f f4 20 53 61 76 65 73  20 69 6d 61 67 65 20 61  |.. Saves image a|
00004e80  73 20 73 70 72 69 74 65  66 69 6c 65 0d 11 6c 12  |s spritefile..l.|
00004e90  c8 8e 20 53 61 76 65 4b  69 6e 64 24 20 ca 0d 11  |.. SaveKind$ ...|
00004ea0  76 31 20 c9 20 22 46 75  6c 6c 22 20 3a 20 f4 20  |v1 . "Full" : . |
00004eb0  46 75 6c 6c 20 72 65 73  6f 6c 75 74 69 6f 6e 20  |Full resolution |
00004ec0  73 70 72 69 74 65 2c 20  6e 6f 20 65 64 69 74 0d  |sprite, no edit.|
00004ed0  11 80 20 20 c9 20 22 57  68 6f 6c 65 22 20 3a 20  |..  . "Whole" : |
00004ee0  f2 65 64 69 74 5f 70 61  72 74 28 a3 2c a3 29 0d  |.edit_part(.,.).|
00004ef0  11 8a 29 20 c9 20 22 57  68 6f 6c 65 20 28 73 63  |..) . "Whole (sc|
00004f00  61 6c 65 64 29 22 20 3a  20 f2 65 64 69 74 5f 70  |aled)" : .edit_p|
00004f10  61 72 74 28 b9 2c a3 29  0d 11 94 1f 20 c9 20 22  |art(.,.).... . "|
00004f20  50 61 72 74 22 20 3a 20  f2 65 64 69 74 5f 70 61  |Part" : .edit_pa|
00004f30  72 74 28 a3 2c b9 29 0d  11 9e 28 20 c9 20 22 50  |rt(.,.)...( . "P|
00004f40  61 72 74 20 28 73 63 61  6c 65 64 29 22 20 3a 20  |art (scaled)" : |
00004f50  f2 65 64 69 74 5f 70 61  72 74 28 b9 2c b9 29 0d  |.edit_part(.,.).|
00004f60  11 a8 05 cb 0d 11 b2 0c  f2 68 6f 75 72 5f 6f 6e  |.........hour_on|
00004f70  0d 11 bc 17 e7 53 61 76  65 4b 69 6e 64 24 3d 22  |.....SaveKind$="|
00004f80  46 75 6c 6c 22 20 8c 0d  11 c6 38 20 f4 20 46 75  |Full" ....8 . Fu|
00004f90  6c 6c 20 73 70 72 69 74  65 2c 20 73 61 76 65 20  |ll sprite, save |
00004fa0  69 6d 61 67 65 20 77 69  74 68 20 70 61 6c 65 74  |image with palet|
00004fb0  74 65 20 28 6f 70 74 69  6f 6e 61 6c 6c 79 29 0d  |te (optionally).|
00004fc0  11 d0 23 20 4f 75 74 3d  ae 28 6f 75 74 24 29 3a  |..# Out=.(out$):|
00004fd0  f4 20 4f 70 65 6e 20 73  70 72 69 74 65 20 66 69  |. Open sprite fi|
00004fe0  6c 65 0d 11 da 2d 20 73  70 72 25 3d 53 70 72 69  |le...- spr%=Spri|
00004ff0  74 65 25 2b 53 70 72 69  74 65 25 21 38 3a f4 20  |te%+Sprite%!8:. |
00005000  53 74 61 72 74 20 6f 66  20 73 70 72 69 74 65 0d  |Start of sprite.|
00005010  11 e4 2c 20 63 6f 6c 73  25 3d 32 5e 53 70 72 43  |.., cols%=2^SprC|
00005020  6f 6c 62 69 74 73 25 3a  f4 20 43 6f 6c 6f 75 72  |olbits%:. Colour|
00005030  73 20 69 6e 20 73 70 72  69 74 65 0d 11 ee 0f 20  |s in sprite.... |
00005040  e7 53 61 76 65 50 61 6c  20 8c 0d 11 f8 22 20 20  |.SavePal ...."  |
00005050  f4 20 53 61 76 65 20 77  69 74 68 20 70 61 6c 65  |. Save with pale|
00005060  74 74 65 20 69 6e 63 6c  75 64 65 64 0d 12 02 3b  |tte included...;|
00005070  20 20 e7 63 6f 6c 73 25  3d 32 35 36 20 8c 20 65  |  .cols%=256 . e|
00005080  6e 74 73 25 3d 36 34 20  8b 20 65 6e 74 73 25 3d  |nts%=64 . ents%=|
00005090  63 6f 6c 73 25 3a f4 20  50 61 6c 65 74 74 65 20  |cols%:. Palette |
000050a0  65 6e 74 72 69 65 73 0d  12 0c 2d 20 20 65 78 74  |entries...-  ext|
000050b0  72 61 25 3d 65 6e 74 73  25 2a 38 3a f4 20 45 78  |ra%=ents%*8:. Ex|
000050c0  74 72 61 20 72 6f 6f 6d  20 66 6f 72 20 70 61 6c  |tra room for pal|
000050d0  65 74 74 65 0d 12 16 45  20 20 c8 99 20 22 4f 53  |ette...E  .. "OS|
000050e0  5f 47 42 50 42 22 2c 31  2c 4f 75 74 2c 53 70 72  |_GBPB",1,Out,Spr|
000050f0  69 74 65 25 2b 34 2c 38  2c 30 3a f4 20 4f 75 74  |ite%+4,8,0:. Out|
00005100  70 75 74 20 70 61 72 74  20 6f 66 20 63 6f 6e 74  |put part of cont|
00005110  72 6f 6c 20 62 6c 6f 63  6b 0d 12 20 44 20 20 21  |rol block.. D  !|
00005120  61 72 67 25 3d 65 78 74  72 61 25 2b 53 70 72 69  |arg%=extra%+Spri|
00005130  74 65 25 21 31 32 3a c8  99 20 22 4f 53 5f 47 42  |te%!12:.. "OS_GB|
00005140  50 42 22 2c 32 2c 4f 75  74 2c 61 72 67 25 2c 34  |PB",2,Out,arg%,4|
00005150  3a f4 20 4e 65 77 20 6f  66 66 73 65 74 0d 12 2a  |:. New offset..*|
00005160  3f 20 20 21 61 72 67 25  3d 65 78 74 72 61 25 2b  |?  !arg%=extra%+|
00005170  21 73 70 72 25 3a c8 99  20 22 4f 53 5f 47 42 50  |!spr%:.. "OS_GBP|
00005180  42 22 2c 32 2c 4f 75 74  2c 61 72 67 25 2c 34 3a  |B",2,Out,arg%,4:|
00005190  f4 20 4e 65 77 20 6f 66  66 73 65 74 0d 12 34 41  |. New offset..4A|
000051a0  20 20 c8 99 20 22 4f 53  5f 47 42 50 42 22 2c 32  |  .. "OS_GBPB",2|
000051b0  2c 4f 75 74 2c 73 70 72  25 2b 34 2c 32 38 3a f4  |,Out,spr%+4,28:.|
000051c0  20 4f 75 74 70 75 74 20  70 61 72 74 20 6f 66 20  | Output part of |
000051d0  73 70 72 69 74 65 20 68  65 61 64 65 72 0d 12 3e  |sprite header..>|
000051e0  41 20 20 21 61 72 67 25  3d 65 78 74 72 61 25 2b  |A  !arg%=extra%+|
000051f0  73 70 72 25 21 33 32 3a  c8 99 20 22 4f 53 5f 47  |spr%!32:.. "OS_G|
00005200  42 50 42 22 2c 32 2c 4f  75 74 2c 61 72 67 25 2c  |BPB",2,Out,arg%,|
00005210  34 3a f4 20 4e 65 77 20  6f 66 66 73 65 74 0d 12  |4:. New offset..|
00005220  48 41 20 20 21 61 72 67  25 3d 65 78 74 72 61 25  |HA  !arg%=extra%|
00005230  2b 73 70 72 25 21 33 36  3a c8 99 20 22 4f 53 5f  |+spr%!36:.. "OS_|
00005240  47 42 50 42 22 2c 32 2c  4f 75 74 2c 61 72 67 25  |GBPB",2,Out,arg%|
00005250  2c 34 3a f4 20 4e 65 77  20 6f 66 66 73 65 74 0d  |,4:. New offset.|
00005260  12 52 39 20 20 c8 99 20  22 4f 53 5f 47 42 50 42  |.R9  .. "OS_GBPB|
00005270  22 2c 32 2c 4f 75 74 2c  73 70 72 25 2b 34 30 2c  |",2,Out,spr%+40,|
00005280  34 3a f4 20 4f 75 74 70  75 74 20 73 70 72 69 74  |4:. Output sprit|
00005290  65 27 73 20 6d 6f 64 65  0d 12 5c 8a 20 20 e3 20  |e's mode..\.  . |
000052a0  63 25 3d 31 20 b8 20 65  6e 74 73 25 3a 61 72 67  |c%=1 . ents%:arg|
000052b0  25 21 28 63 25 2a 38 2d  38 29 3d a4 72 65 61 64  |%!(c%*8-8)=.read|
000052c0  70 61 6c 76 61 6c 28 49  6d 67 50 61 6c 25 28 63  |palval(ImgPal%(c|
000052d0  25 29 29 3a 61 72 67 25  21 28 63 25 2a 38 2d 34  |%)):arg%!(c%*8-4|
000052e0  29 3d 61 72 67 25 21 28  63 25 2a 38 2d 38 29 3a  |)=arg%!(c%*8-8):|
000052f0  ed 3a c8 99 20 22 4f 53  5f 47 42 50 42 22 2c 32  |.:.. "OS_GBPB",2|
00005300  2c 4f 75 74 2c 61 72 67  25 2c 65 6e 74 73 25 2a  |,Out,arg%,ents%*|
00005310  38 3a f4 20 4f 75 74 70  75 74 20 70 61 6c 65 74  |8:. Output palet|
00005320  74 65 0d 12 66 46 20 20  c8 99 20 22 4f 53 5f 47  |te..fF  .. "OS_G|
00005330  42 50 42 22 2c 32 2c 4f  75 74 2c 73 70 72 25 2b  |BPB",2,Out,spr%+|
00005340  73 70 72 25 21 33 32 2c  28 73 70 72 25 21 31 36  |spr%!32,(spr%!16|
00005350  2b 31 29 2a 28 73 70 72  25 21 32 30 2b 31 29 2a  |+1)*(spr%!20+1)*|
00005360  34 3a f4 20 44 61 74 61  0d 12 70 29 20 cc 20 f4  |4:. Data..p) . .|
00005370  20 4e 6f 20 70 61 6c 65  74 74 65 2c 20 6f 75 74  | No palette, out|
00005380  70 75 74 20 74 68 65 20  77 68 6f 6c 65 20 6c 6f  |put the whole lo|
00005390  74 0d 12 7a 3e 20 20 c8  99 20 22 4f 53 5f 47 42  |t..z>  .. "OS_GB|
000053a0  50 42 22 2c 31 2c 4f 75  74 2c 53 70 72 69 74 65  |PB",1,Out,Sprite|
000053b0  25 2b 34 2c 53 70 72 69  74 65 25 21 31 32 2d 34  |%+4,Sprite%!12-4|
000053c0  2c 30 3a f4 20 4f 75 74  70 75 74 20 61 6c 6c 0d  |,0:. Output all.|
000053d0  12 84 06 20 cd 0d 12 8e  3f 20 d9 23 4f 75 74 3a  |... ....? .#Out:|
000053e0  c8 99 20 22 4f 53 5f 43  4c 49 22 2c 22 53 65 74  |.. "OS_CLI","Set|
000053f0  54 79 70 65 20 22 2b 6f  75 74 24 2b 22 20 53 70  |Type "+out$+" Sp|
00005400  72 69 74 65 22 3a f4 20  43 6c 6f 73 65 20 26 20  |rite":. Close & |
00005410  74 79 70 65 0d 12 98 30  cc 20 f4 20 45 64 69 74  |type...0. . Edit|
00005420  65 64 20 70 61 72 74 20  69 6e 20 77 69 6e 64 6f  |ed part in windo|
00005430  77 20 6f 6e 20 73 63 72  65 65 6e 2c 20 73 61 76  |w on screen, sav|
00005440  65 20 69 74 0d 12 a2 28  20 f2 69 6e 76 61 6c 69  |e it...( .invali|
00005450  64 61 74 65 5f 73 63 72  65 65 6e 3a f4 20 53 63  |date_screen:. Sc|
00005460  72 65 65 6e 20 69 6e 76  61 6c 69 64 0d 12 ac 1f  |reen invalid....|
00005470  20 e7 53 61 76 65 50 61  6c 20 8c 20 70 61 6c 25  | .SavePal . pal%|
00005480  3d 31 20 8b 20 70 61 6c  25 3d 30 0d 12 b6 34 20  |=1 . pal%=0...4 |
00005490  c8 99 20 4f 53 53 70 6f  70 25 2c 32 2c 2c 6f 75  |.. OSSpop%,2,,ou|
000054a0  74 24 2c 70 61 6c 25 3a  f4 20 53 61 76 65 20 73  |t$,pal%:. Save s|
000054b0  63 72 65 65 6e 20 69 6e  20 77 69 6e 64 6f 77 0d  |creen in window.|
000054c0  12 c0 2f 20 ef 32 34 2c  30 3b 30 3b 53 63 72 57  |../ .24,0;0;ScrW|
000054d0  25 3b 53 63 72 48 25 3b  3a f4 20 52 65 73 65 74  |%;ScrH%;:. Reset|
000054e0  20 73 63 72 65 65 6e 20  77 69 6e 64 6f 77 0d 12  | screen window..|
000054f0  ca 05 cd 0d 12 d4 0d f2  68 6f 75 72 5f 6f 66 66  |........hour_off|
00005500  0d 12 de 05 e1 0d 12 e8  04 0d 12 f2 0f dd a4 70  |...............p|
00005510  69 63 5f 44 45 47 41 53  0d 12 fc 2f f4 20 4d 61  |ic_DEGAS.../. Ma|
00005520  6b 65 73 20 41 74 61 72  69 20 44 65 67 61 73 20  |kes Atari Degas |
00005530  69 6d 61 67 65 20 28 50  49 31 2f 32 2f 33 2c 50  |image (PI1/2/3,P|
00005540  43 31 2f 32 2f 33 29 0d  13 06 33 63 6f 6d 70 72  |C1/2/3)...3compr|
00005550  25 3d a4 69 62 3a 72 65  73 25 3d a4 69 62 3a f4  |%=.ib:res%=.ib:.|
00005560  20 46 6c 61 67 73 2c 20  72 65 73 6f 6c 75 74 69  | Flags, resoluti|
00005570  6f 6e 20 28 31 2f 32 2f  33 29 0d 13 10 37 63 6f  |on (1/2/3)...7co|
00005580  6d 70 72 65 73 73 65 64  3d 28 28 63 6f 6d 70 72  |mpressed=((compr|
00005590  25 80 25 31 30 30 30 30  30 30 30 29 3e 30 29 3a  |%.%10000000)>0):|
000055a0  f4 20 43 6f 6d 70 72 65  73 73 65 64 20 66 6c 61  |. Compressed fla|
000055b0  67 0d 13 1a 23 74 6f 74  61 6c 25 3d 33 32 30 30  |g...#total%=3200|
000055c0  30 3a f4 20 54 6f 74 61  6c 20 64 61 74 61 20 62  |0:. Total data b|
000055d0  79 74 65 73 0d 13 24 0d  c8 8e 20 72 65 73 25 20  |ytes..$... res% |
000055e0  ca 0d 13 2e 2c 20 c9 20  30 20 3a 20 77 69 64 74  |...., . 0 : widt|
000055f0  68 25 3d 33 32 30 3a 68  65 69 67 68 74 25 3d 32  |h%=320:height%=2|
00005600  30 30 3a 63 6f 6c 62 69  74 73 25 3d 34 0d 13 38  |00:colbits%=4..8|
00005610  2c 20 c9 20 31 20 3a 20  77 69 64 74 68 25 3d 36  |, . 1 : width%=6|
00005620  34 30 3a 68 65 69 67 68  74 25 3d 32 30 30 3a 63  |40:height%=200:c|
00005630  6f 6c 62 69 74 73 25 3d  32 0d 13 42 2c 20 c9 20  |olbits%=2..B, . |
00005640  32 20 3a 20 77 69 64 74  68 25 3d 36 34 30 3a 68  |2 : width%=640:h|
00005650  65 69 67 68 74 25 3d 34  30 30 3a 63 6f 6c 62 69  |eight%=400:colbi|
00005660  74 73 25 3d 31 0d 13 4c  05 cb 0d 13 56 2b 63 6f  |ts%=1..L....V+co|
00005670  6c 6f 75 72 73 25 3d 32  5e 63 6f 6c 62 69 74 73  |lours%=2^colbits|
00005680  25 3a f4 20 4e 75 6d 62  65 72 20 6f 66 20 63 6f  |%:. Number of co|
00005690  6c 6f 75 72 73 0d 13 60  27 f2 73 65 74 28 77 69  |lours..`'.set(wi|
000056a0  64 74 68 25 2c 68 65 69  67 68 74 25 2c 63 6f 6c  |dth%,height%,col|
000056b0  6f 75 72 73 25 2c 4d 6f  64 65 25 29 0d 13 6a 3e  |ours%,Mode%)..j>|
000056c0  e7 a4 61 6c 6c 6f 63 61  74 65 5f 73 74 64 28 77  |..allocate_std(w|
000056d0  69 64 74 68 25 2c 28 77  69 64 74 68 25 2a 63 6f  |idth%,(width%*co|
000056e0  6c 62 69 74 73 25 2b 37  29 81 38 2c 77 69 64 74  |lbits%+7).8,widt|
000056f0  68 25 2c 30 29 20 8b 20  3d a3 0d 13 74 17 e7 a4  |h%,0) . =...t...|
00005700  6e 65 77 5f 69 6d 61 67  65 28 30 29 20 8b 20 3d  |new_image(0) . =|
00005710  a3 0d 13 7e 2f f2 69 67  65 74 28 46 31 25 2c 64  |...~/.iget(F1%,d|
00005720  75 6d 25 2c 33 32 29 3a  f4 20 52 65 61 64 20 70  |um%,32):. Read p|
00005730  61 6c 65 74 74 65 20 66  72 6f 6d 20 66 69 6c 65  |alette from file|
00005740  0d 13 88 95 49 6e 50 61  6c 25 28 30 29 3d 63 6f  |....InPal%(0)=co|
00005750  6c 62 69 74 73 25 3a e3  20 63 25 3d 30 20 b8 20  |lbits%:. c%=0 . |
00005760  63 6f 6c 6f 75 72 73 25  2d 31 3a 76 25 3d 64 75  |colours%-1:v%=du|
00005770  6d 25 21 28 63 25 2a 32  29 3a 72 25 3d 28 76 25  |m%!(c%*2):r%=(v%|
00005780  80 37 29 2a 33 32 3a 67  25 3d 28 28 76 25 3e 3e  |.7)*32:g%=((v%>>|
00005790  31 32 29 80 37 29 2a 33  32 3a 62 25 3d 28 28 76  |12).7)*32:b%=((v|
000057a0  25 3e 3e 38 29 80 37 29  2a 33 32 3a 49 6e 50 61  |%>>8).7)*32:InPa|
000057b0  6c 25 28 63 6f 6c 6f 75  72 73 25 2d 63 25 29 3d  |l%(colours%-c%)=|
000057c0  28 72 25 3c 3c 31 36 29  2b 28 67 25 3c 3c 38 29  |(r%<<16)+(g%<<8)|
000057d0  2b 62 25 3a ed 0d 13 92  5b e7 63 6f 6d 70 72 65  |+b%:....[.compre|
000057e0  73 73 65 64 20 8c 20 63  6f 6d 70 72 24 3d 22 52  |ssed . compr$="R|
000057f0  75 6e 20 6c 65 6e 67 74  68 22 3a 74 79 70 65 24  |un length":type$|
00005800  3d 22 50 43 22 2b c3 28  72 65 73 25 2b 31 29 20  |="PC"+.(res%+1) |
00005810  8b 20 63 6f 6d 70 72 24  3d 22 22 3a 74 79 70 65  |. compr$="":type|
00005820  24 3d 22 50 49 22 2b c3  28 72 65 73 25 2b 31 29  |$="PI"+.(res%+1)|
00005830  0d 13 9c 5f f2 69 6d 61  67 65 5f 69 6e 66 6f 28  |..._.image_info(|
00005840  22 41 74 61 72 69 20 44  65 67 61 73 20 22 2b 74  |"Atari Degas "+t|
00005850  79 70 65 24 2c 77 69 64  74 68 25 2c 68 65 69 67  |ype$,width%,heig|
00005860  68 74 25 2c 30 2c 63 6f  6c 62 69 74 73 25 2c 4d  |ht%,0,colbits%,M|
00005870  6f 64 65 25 2c 63 6f 6d  70 72 24 2c 22 22 2c 46  |ode%,compr$,"",F|
00005880  6c 65 6e 25 2d 33 34 2c  74 6f 74 61 6c 25 29 0d  |len%-34,total%).|
00005890  13 a6 7e f2 76 61 72 28  22 63 6f 6d 70 22 2c 63  |..~.var("comp",c|
000058a0  6f 6d 70 72 65 73 73 65  64 29 3a f2 76 61 72 28  |ompressed):.var(|
000058b0  22 72 65 73 74 22 2c 72  65 73 25 29 3a f2 76 61  |"rest",res%):.va|
000058c0  72 28 22 69 6d 67 78 22  2c 77 69 64 74 68 25 29  |r("imgx",width%)|
000058d0  3a f2 76 61 72 28 22 69  6d 67 79 22 2c 68 65 69  |:.var("imgy",hei|
000058e0  67 68 74 25 29 3a f2 76  61 72 28 22 69 66 70 31  |ght%):.var("ifp1|
000058f0  22 2c 26 32 32 29 3a e7  a4 75 6e 70 61 63 6b 28  |",&22):..unpack(|
00005900  22 44 45 47 41 53 22 29  20 8b 20 3d a3 0d 13 b0  |"DEGAS") . =....|
00005910  06 3d b9 0d 13 ba 05 20  0d 13 c4 0d dd a4 70 69  |.=..... ......pi|
00005920  63 5f 49 4d 47 0d 13 ce  1b f4 20 4d 61 6b 65 73  |c_IMG..... Makes|
00005930  20 41 74 61 72 69 20 49  4d 47 20 69 6d 61 67 65  | Atari IMG image|
00005940  0d 13 d8 4b 76 65 72 73  69 6f 6e 25 3d a4 69 64  |...Kversion%=.id|
00005950  62 3a 68 65 61 64 6c 65  6e 25 3d a4 69 64 62 3a  |b:headlen%=.idb:|
00005960  6e 70 6c 61 6e 65 73 25  3d a4 69 64 62 3a f4 20  |nplanes%=.idb:. |
00005970  56 65 72 73 69 6f 6e 2c  20 68 65 61 64 6c 65 6e  |Version, headlen|
00005980  67 74 68 2c 20 70 6c 61  6e 65 73 0d 13 e2 4b 70  |gth, planes...Kp|
00005990  61 74 6c 65 6e 25 3d a4  69 64 62 3a 70 77 25 3d  |atlen%=.idb:pw%=|
000059a0  a4 69 64 62 3a 70 68 25  3d a4 69 64 62 3a f4 20  |.idb:ph%=.idb:. |
000059b0  50 61 74 74 65 72 6e 20  6c 65 6e 67 74 68 2c 20  |Pattern length, |
000059c0  70 69 78 65 6c 20 77 69  64 74 68 20 61 6e 64 20  |pixel width and |
000059d0  68 65 69 67 68 74 0d 13  ec 39 77 69 64 74 68 25  |height...9width%|
000059e0  3d a4 69 64 62 3a 68 65  69 67 68 74 25 3d a4 69  |=.idb:height%=.i|
000059f0  64 62 3a f4 20 57 69 64  74 68 20 61 6e 64 20 68  |db:. Width and h|
00005a00  65 69 67 68 74 20 69 6e  20 70 69 78 65 6c 73 0d  |eight in pixels.|
00005a10  13 f6 2b 63 6f 6c 6f 75  72 73 25 3d 32 5e 6e 70  |..+colours%=2^np|
00005a20  6c 61 6e 65 73 25 3a f4  20 4e 75 6d 62 65 72 20  |lanes%:. Number |
00005a30  6f 66 20 63 6f 6c 6f 75  72 73 0d 14 00 27 f2 73  |of colours...'.s|
00005a40  65 74 28 77 69 64 74 68  25 2c 68 65 69 67 68 74  |et(width%,height|
00005a50  25 2c 63 6f 6c 6f 75 72  73 25 2c 4d 6f 64 65 25  |%,colours%,Mode%|
00005a60  29 0d 14 0a 7f e7 63 6f  6c 6f 75 72 73 25 3c 3e  |).....colours%<>|
00005a70  32 20 84 20 70 61 74 6c  65 6e 25 3c 3e 32 20 8c  |2 . patlen%<>2 .|
00005a80  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 63 61  | .error(-1,"I ca|
00005a90  6e 6e 6f 74 20 64 69 73  70 6c 61 79 20 41 74 61  |nnot display Ata|
00005aa0  72 69 20 49 4d 47 20 69  6d 61 67 65 73 20 77 69  |ri IMG images wi|
00005ab0  74 68 20 6d 6f 72 65 20  74 68 61 6e 20 32 20 63  |th more than 2 c|
00005ac0  6f 6c 6f 75 72 73 20 6f  72 20 70 61 74 74 65 72  |olours or patter|
00005ad0  6e 6c 65 6e 67 74 68 3c  3e 32 20 21 22 29 3a e1  |nlength<>2 !"):.|
00005ae0  0d 14 14 3e e7 a4 61 6c  6c 6f 63 61 74 65 5f 73  |...>..allocate_s|
00005af0  74 64 28 77 69 64 74 68  25 2c 28 77 69 64 74 68  |td(width%,(width|
00005b00  25 2a 6e 70 6c 61 6e 65  73 25 2b 37 29 81 38 2c  |%*nplanes%+7).8,|
00005b10  77 69 64 74 68 25 2c 30  29 20 8b 20 3d a3 0d 14  |width%,0) . =...|
00005b20  1e 17 e7 a4 6e 65 77 5f  69 6d 61 67 65 28 30 29  |....new_image(0)|
00005b30  20 8b 20 3d a3 0d 14 28  2f f2 67 72 65 79 70 61  | . =...(/.greypa|
00005b40  6c 28 49 6e 50 61 6c 25  28 29 2c 6e 70 6c 61 6e  |l(InPal%(),nplan|
00005b50  65 73 25 2c 31 29 3a f4  20 53 65 74 20 70 61 6c  |es%,1):. Set pal|
00005b60  65 74 74 65 0d 14 32 7b  f2 69 6d 61 67 65 5f 69  |ette..2{.image_i|
00005b70  6e 66 6f 28 22 41 74 61  72 69 20 49 4d 47 22 2c  |nfo("Atari IMG",|
00005b80  77 69 64 74 68 25 2c 68  65 69 67 68 74 25 2c 30  |width%,height%,0|
00005b90  2c 6e 70 6c 61 6e 65 73  25 2c 4d 6f 64 65 25 2c  |,nplanes%,Mode%,|
00005ba0  22 53 65 76 65 72 61 6c  20 77 61 79 73 22 2c 22  |"Several ways","|
00005bb0  22 2c 46 6c 65 6e 25 2d  68 65 61 64 6c 65 6e 25  |",Flen%-headlen%|
00005bc0  2a 32 2c 28 77 69 64 74  68 25 2a 68 65 69 67 68  |*2,(width%*heigh|
00005bd0  74 25 2a 6e 70 6c 61 6e  65 73 25 29 81 38 29 0d  |t%*nplanes%).8).|
00005be0  14 3c 59 f2 76 61 72 28  22 69 6d 67 78 22 2c 77  |.<Y.var("imgx",w|
00005bf0  69 64 74 68 25 29 3a f2  76 61 72 28 22 69 6d 67  |idth%):.var("img|
00005c00  79 22 2c 68 65 69 67 68  74 25 29 3a f2 76 61 72  |y",height%):.var|
00005c10  28 22 69 66 70 31 22 2c  68 65 61 64 6c 65 6e 25  |("ifp1",headlen%|
00005c20  2a 32 29 3a e7 a4 75 6e  70 61 63 6b 28 22 49 4d  |*2):..unpack("IM|
00005c30  47 22 29 20 8b 20 3d a3  0d 14 46 06 3d b9 0d 14  |G") . =...F.=...|
00005c40  50 05 20 0d 14 5a 0d dd  a4 70 69 63 5f 4d 41 43  |P. ..Z...pic_MAC|
00005c50  0d 14 64 24 f4 20 4d 61  6b 65 73 20 4d 61 63 49  |..d$. Makes MacI|
00005c60  6e 74 6f 73 68 20 4d 61  63 50 61 69 6e 74 20 69  |ntosh MacPaint i|
00005c70  6d 61 67 65 0d 14 6e 32  77 69 64 74 68 25 3d 35  |mage..n2width%=5|
00005c80  37 36 3a 68 65 69 67 68  74 25 3d 37 32 30 3a 63  |76:height%=720:c|
00005c90  6f 6c 62 69 74 73 25 3d  31 3a f4 20 52 65 73 6f  |olbits%=1:. Reso|
00005ca0  6c 75 74 69 6f 6e 0d 14  78 29 f2 73 65 74 28 77  |lution..x).set(w|
00005cb0  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 32 5e  |idth%,height%,2^|
00005cc0  63 6f 6c 62 69 74 73 25  2c 4d 6f 64 65 25 29 0d  |colbits%,Mode%).|
00005cd0  14 82 3e e7 a4 61 6c 6c  6f 63 61 74 65 5f 73 74  |..>..allocate_st|
00005ce0  64 28 77 69 64 74 68 25  2c 28 77 69 64 74 68 25  |d(width%,(width%|
00005cf0  2a 63 6f 6c 62 69 74 73  25 2b 37 29 81 38 2c 77  |*colbits%+7).8,w|
00005d00  69 64 74 68 25 2c 30 29  20 8b 20 3d a3 0d 14 8c  |idth%,0) . =....|
00005d10  17 e7 a4 6e 65 77 5f 69  6d 61 67 65 28 30 29 20  |...new_image(0) |
00005d20  8b 20 3d a3 0d 14 96 2f  f2 67 72 65 79 70 61 6c  |. =..../.greypal|
00005d30  28 49 6e 50 61 6c 25 28  29 2c 63 6f 6c 62 69 74  |(InPal%(),colbit|
00005d40  73 25 2c 31 29 3a f4 20  53 65 74 20 70 61 6c 65  |s%,1):. Set pale|
00005d50  74 74 65 0d 14 a0 6b f2  69 6d 61 67 65 5f 69 6e  |tte...k.image_in|
00005d60  66 6f 28 22 4d 61 63 49  6e 74 6f 73 68 20 4d 61  |fo("MacIntosh Ma|
00005d70  63 50 61 69 6e 74 22 2c  77 69 64 74 68 25 2c 68  |cPaint",width%,h|
00005d80  65 69 67 68 74 25 2c 30  2c 63 6f 6c 62 69 74 73  |eight%,0,colbits|
00005d90  25 2c 4d 6f 64 65 25 2c  22 52 75 6e 20 6c 65 6e  |%,Mode%,"Run len|
00005da0  67 74 68 22 2c 22 22 2c  46 6c 65 6e 25 2d 36 34  |gth","",Flen%-64|
00005db0  30 2c 28 35 37 36 2a 37  32 30 29 81 38 29 0d 14  |0,(576*720).8)..|
00005dc0  aa 52 f2 76 61 72 28 22  69 6d 67 78 22 2c 77 69  |.R.var("imgx",wi|
00005dd0  64 74 68 25 29 3a f2 76  61 72 28 22 69 6d 67 79  |dth%):.var("imgy|
00005de0  22 2c 68 65 69 67 68 74  25 29 3a f2 76 61 72 28  |",height%):.var(|
00005df0  22 69 66 70 31 22 2c 36  34 30 29 3a e7 a4 75 6e  |"ifp1",640):..un|
00005e00  70 61 63 6b 28 22 4d 41  43 22 29 20 8b 20 3d a3  |pack("MAC") . =.|
00005e10  0d 14 b4 06 3d b9 0d 14  be 05 20 0d 14 c8 0d dd  |....=..... .....|
00005e20  a4 70 69 63 5f 49 46 46  0d 14 d2 1b f4 20 4d 61  |.pic_IFF..... Ma|
00005e30  6b 65 73 20 41 6d 69 67  61 20 49 46 46 20 69 6d  |kes Amiga IFF im|
00005e40  61 67 65 0d 14 dc 25 62  6d 68 64 3d a3 3a 63 6d  |age...%bmhd=.:cm|
00005e50  61 70 3d a3 3a 62 6f 64  79 3d a3 3a f4 20 49 6e  |ap=.:body=.:. In|
00005e60  69 74 20 66 6c 61 67 73  0d 14 e6 32 68 61 6d 3d  |it flags...2ham=|
00005e70  a3 3a 6c 61 63 65 3d a3  3a 68 69 72 65 73 3d a3  |.:lace=.:hires=.|
00005e80  3a 68 61 6c 66 62 72 69  67 68 74 3d a3 3a f4 20  |:halfbright=.:. |
00005e90  49 6e 69 74 20 66 6c 61  67 73 0d 14 f0 32 f4 20  |Init flags...2. |
00005ea0  43 68 65 63 6b 20 69 66  20 74 68 69 73 20 69 73  |Check if this is|
00005eb0  20 61 20 73 74 61 6e 64  61 72 64 20 49 46 46 20  | a standard IFF |
00005ec0  70 69 63 74 75 72 65 20  66 69 6c 65 0d 14 fa 90  |picture file....|
00005ed0  66 6f 72 6d 24 3d a4 69  73 74 72 69 6e 67 28 46  |form$=.istring(F|
00005ee0  31 25 2c 34 29 3a f2 69  73 6b 69 70 28 46 31 25  |1%,4):.iskip(F1%|
00005ef0  2c 34 29 3a 66 6f 72 6d  24 2b 3d a4 69 73 74 72  |,4):form$+=.istr|
00005f00  69 6e 67 28 46 31 25 2c  34 29 3a e7 66 6f 72 6d  |ing(F1%,4):.form|
00005f10  24 3c 3e 22 46 4f 52 4d  49 4c 42 4d 22 20 8c 20  |$<>"FORMILBM" . |
00005f20  f2 65 72 72 6f 72 28 2d  31 2c 22 54 68 69 73 20  |.error(-1,"This |
00005f30  73 63 72 65 65 6e 20 66  69 6c 65 20 69 73 20 6e  |screen file is n|
00005f40  6f 74 20 61 6e 20 49 46  46 20 73 63 72 65 65 6e  |ot an IFF screen|
00005f50  20 66 69 6c 65 20 21 22  29 3a 3d a3 0d 15 04 29  | file !"):=....)|
00005f60  f5 20 f4 20 46 6f 6c 6c  6f 77 20 42 4d 48 44 2c  |. . Follow BMHD,|
00005f70  43 4d 41 50 20 61 6e 64  20 42 4f 44 59 20 68 65  |CMAP and BODY he|
00005f80  61 64 65 72 73 0d 15 0e  39 68 65 61 64 24 3d a4  |aders...9head$=.|
00005f90  69 73 74 72 69 6e 67 28  46 31 25 2c 34 29 3a 68  |istring(F1%,4):h|
00005fa0  6c 65 6e 25 3d a4 69 77  62 3a 73 74 61 72 74 70  |len%=.iwb:startp|
00005fb0  74 72 25 3d a4 69 70 74  72 28 46 31 25 29 0d 15  |tr%=.iptr(F1%)..|
00005fc0  18 0e c8 8e 20 68 65 61  64 24 20 ca 0d 15 22 26  |.... head$ ..."&|
00005fd0  20 c9 20 22 42 4d 48 44  22 20 3a 20 62 6d 68 64  | . "BMHD" : bmhd|
00005fe0  3d b9 3a f4 20 42 69 74  6d 61 70 20 68 65 61 64  |=.:. Bitmap head|
00005ff0  65 72 0d 15 2c 3d 20 20  20 20 20 20 20 f4 20 52  |er..,=       . R|
00006000  65 61 64 20 70 69 63 74  75 72 65 2f 73 63 72 65  |ead picture/scre|
00006010  65 6e 20 77 69 64 74 68  2c 20 68 65 69 67 68 74  |en width, height|
00006020  2c 20 63 6f 6c 6f 75 72  73 2c 20 65 74 63 2e 0d  |, colours, etc..|
00006030  15 36 4b 20 20 20 20 20  20 20 77 69 64 74 68 25  |.6K       width%|
00006040  3d a4 69 64 62 3a 68 65  69 67 68 74 25 3d a4 69  |=.idb:height%=.i|
00006050  64 62 3a f2 69 73 6b 69  70 28 46 31 25 2c 34 29  |db:.iskip(F1%,4)|
00006060  3a 70 6c 61 6e 65 73 25  3d a4 69 62 3a f2 69 73  |:planes%=.ib:.is|
00006070  6b 69 70 28 46 31 25 2c  31 29 0d 15 40 48 20 20  |kip(F1%,1)..@H  |
00006080  20 20 20 20 20 63 6f 6d  70 72 65 73 73 65 64 3d  |     compressed=|
00006090  28 a4 69 62 3d 31 29 3a  f2 69 73 6b 69 70 28 46  |(.ib=1):.iskip(F|
000060a0  31 25 2c 35 29 3a 73 5f  77 69 64 74 68 25 3d a4  |1%,5):s_width%=.|
000060b0  69 64 62 3a 73 5f 68 65  69 67 68 74 25 3d a4 69  |idb:s_height%=.i|
000060c0  64 62 0d 15 4a 3e 20 c9  20 22 43 41 4d 47 22 20  |db..J> . "CAMG" |
000060d0  3a 20 66 6c 61 67 73 25  3d a4 69 77 62 3a f4 20  |: flags%=.iwb:. |
000060e0  47 65 74 20 66 6c 61 67  20 62 69 74 73 2c 20 73  |Get flag bits, s|
000060f0  65 74 20 66 6c 61 67 73  20 66 72 6f 6d 20 69 74  |et flags from it|
00006100  0d 15 54 35 20 20 20 20  20 20 20 68 61 6d 3d 28  |..T5       ham=(|
00006110  28 66 6c 61 67 73 25 80  26 38 30 30 29 3e 30 29  |(flags%.&800)>0)|
00006120  3a 6c 61 63 65 3d 28 28  66 6c 61 67 73 25 80 26  |:lace=((flags%.&|
00006130  34 29 3e 30 29 0d 15 5e  3f 20 20 20 20 20 20 20  |4)>0)..^?       |
00006140  68 69 72 65 73 3d 28 28  66 6c 61 67 73 25 80 26  |hires=((flags%.&|
00006150  38 30 30 30 29 3e 30 29  3a 68 61 6c 66 62 72 69  |8000)>0):halfbri|
00006160  67 68 74 3d 28 28 66 6c  61 67 73 25 80 26 38 30  |ght=((flags%.&80|
00006170  29 3e 30 29 0d 15 68 2d  20 c9 20 22 43 4d 41 50  |)>0)..h- . "CMAP|
00006180  22 20 3a 20 63 6d 61 70  3d b9 3a f4 20 43 6f 6c  |" : cmap=.:. Col|
00006190  6f 75 72 20 6d 61 70 20  28 70 61 6c 65 74 74 65  |our map (palette|
000061a0  29 0d 15 72 37 20 20 20  20 20 20 20 70 61 6c 64  |)..r7       pald|
000061b0  65 66 73 25 3d 68 6c 65  6e 25 81 33 3a f4 20 4e  |efs%=hlen%.3:. N|
000061c0  75 6d 62 65 72 20 6f 66  20 70 61 6c 65 74 74 65  |umber of palette|
000061d0  20 65 6e 74 72 69 65 73  0d 15 7c 34 20 20 20 20  | entries..|4    |
000061e0  20 20 20 f2 72 65 61 64  32 34 70 61 6c 28 46 31  |   .read24pal(F1|
000061f0  25 2c 49 6e 50 61 6c 25  28 29 2c 70 61 6c 64 65  |%,InPal%(),palde|
00006200  66 73 25 2c 30 2c 31 2c  32 2c 33 29 0d 15 86 24  |fs%,0,1,2,3)...$|
00006210  20 c9 20 22 42 4f 44 59  22 20 3a 20 62 6f 64 79  | . "BODY" : body|
00006220  3d b9 3a f4 20 53 63 72  65 65 6e 20 64 61 74 61  |=.:. Screen data|
00006230  0d 15 90 29 20 20 20 20  20 20 20 f4 20 43 68 65  |...)       . Che|
00006240  63 6b 20 69 66 20 61 6c  6c 20 70 61 72 74 73 20  |ck if all parts |
00006250  61 72 65 20 74 68 65 72  65 0d 15 9a be 20 20 20  |are there....   |
00006260  20 20 20 20 e7 ac 62 6d  68 64 20 8c 20 f2 65 72  |    ..bmhd . .er|
00006270  72 6f 72 28 2d 31 2c 22  49 46 46 20 65 72 72 6f  |ror(-1,"IFF erro|
00006280  72 20 3a 20 49 20 64 69  64 20 6e 6f 74 20 66 69  |r : I did not fi|
00006290  6e 64 20 61 20 27 42 4d  48 44 27 20 62 6c 6f 63  |nd a 'BMHD' bloc|
000062a0  6b 2e 20 43 61 6e 6e 6f  74 20 70 72 6f 63 65 65  |k. Cannot procee|
000062b0  64 20 21 22 29 3a fd 20  b9 3a 3d a3 20 8b 20 e7  |d !"):. .:=. . .|
000062c0  ac 63 6d 61 70 20 8c 20  f2 65 72 72 6f 72 28 2d  |.cmap . .error(-|
000062d0  31 2c 22 49 46 46 20 65  72 72 6f 72 20 3a 20 49  |1,"IFF error : I|
000062e0  20 64 69 64 20 6e 6f 74  20 66 69 6e 64 20 61 20  | did not find a |
000062f0  27 43 4d 41 50 27 20 62  6c 6f 63 6b 2e 20 43 61  |'CMAP' block. Ca|
00006300  6e 6e 6f 74 20 70 72 6f  63 65 65 64 20 21 22 29  |nnot proceed !")|
00006310  3a fd 20 b9 3a 3d a3 0d  15 a4 36 20 20 20 20 20  |:. .:=....6     |
00006320  20 20 f4 20 44 65 74 65  72 6d 69 6e 65 20 73 75  |  . Determine su|
00006330  69 74 61 62 6c 65 20 41  72 63 68 69 6d 65 64 65  |itable Archimede|
00006340  73 20 73 63 72 65 65 6e  20 6d 6f 64 65 0d 15 ae  |s screen mode...|
00006350  11 20 20 20 20 20 20 20  e7 68 61 6d 20 8c 0d 15  |.       .ham ...|
00006360  b8 a7 20 20 20 20 20 20  20 20 f2 73 65 74 28 77  |..        .set(w|
00006370  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 32 35  |idth%,height%,25|
00006380  36 2c 4d 6f 64 65 25 29  3a 63 6f 6c 62 69 74 73  |6,Mode%):colbits|
00006390  25 3d 31 32 3a 69 6e 66  6f 24 3d 22 48 41 4d 20  |%=12:info$="HAM |
000063a0  28 48 6f 6c 64 20 41 6e  64 20 4d 6f 64 69 66 79  |(Hold And Modify|
000063b0  29 22 3a 49 6e 50 61 6c  25 28 30 29 3d 63 6f 6c  |)":InPal%(0)=col|
000063c0  62 69 74 73 25 3a e3 20  63 25 3d 30 20 b8 20 31  |bits%:. c%=0 . 1|
000063d0  35 3a 68 61 6d 62 61 73  25 21 28 63 25 3c 3c 32  |5:hambas%!(c%<<2|
000063e0  29 3d 49 6e 50 61 6c 25  28 63 25 2b 31 29 3a ed  |)=InPal%(c%+1):.|
000063f0  3a f2 76 61 72 28 22 6d  61 70 31 22 2c 68 61 6d  |:.var("map1",ham|
00006400  62 61 73 25 29 0d 15 c2  2a 20 20 20 20 20 20 20  |bas%)...*       |
00006410  20 4d 6f 64 65 25 3d a4  6d 6f 64 65 28 33 32 30  | Mode%=.mode(320|
00006420  2c 73 5f 68 65 69 67 68  74 25 2c 32 35 36 29 0d  |,s_height%,256).|
00006430  15 cc 39 20 20 20 20 20  20 20 20 e7 a4 61 6c 6c  |..9        ..all|
00006440  6f 63 61 74 65 5f 73 74  64 28 77 69 64 74 68 25  |ocate_std(width%|
00006450  2c 77 69 64 74 68 25 2a  34 2c 30 2c 77 69 64 74  |,width%*4,0,widt|
00006460  68 25 29 20 8b 20 3d a3  0d 15 d6 6f 20 20 20 20  |h%) . =....o    |
00006470  20 20 20 cc 20 63 6f 6c  6f 75 72 73 25 3d 32 5e  |   . colours%=2^|
00006480  70 6c 61 6e 65 73 25 3a  f2 73 65 74 28 77 69 64  |planes%:.set(wid|
00006490  74 68 25 2c 68 65 69 67  68 74 25 2c 63 6f 6c 6f  |th%,height%,colo|
000064a0  75 72 73 25 2c 4d 6f 64  65 25 29 3a 63 6f 6c 62  |urs%,Mode%):colb|
000064b0  69 74 73 25 3d 70 6c 61  6e 65 73 25 3a 49 6e 50  |its%=planes%:InP|
000064c0  61 6c 25 28 30 29 3d 70  6c 61 6e 65 73 25 3a 69  |al%(0)=planes%:i|
000064d0  6e 66 6f 24 3d 22 22 0d  15 e0 78 20 20 20 20 20  |nfo$=""...x     |
000064e0  20 20 20 e7 68 61 6c 66  62 72 69 67 68 74 20 8c  |   .halfbright .|
000064f0  20 69 6e 66 6f 24 3d 22  48 61 6c 66 2d 62 72 69  | info$="Half-bri|
00006500  67 68 74 22 3a 68 61 6c  66 25 3d 63 6f 6c 6f 75  |ght":half%=colou|
00006510  72 73 25 81 32 3a e3 20  63 25 3d 31 20 b8 20 68  |rs%.2:. c%=1 . h|
00006520  61 6c 66 25 3a 49 6e 50  61 6c 25 28 63 25 2b 68  |alf%:InPal%(c%+h|
00006530  61 6c 66 25 29 3d 28 49  6e 50 61 6c 25 28 63 25  |alf%)=(InPal%(c%|
00006540  29 80 26 45 30 45 30 45  30 29 3e 3e 31 3a ed 0d  |).&E0E0E0)>>1:..|
00006550  15 ea 32 20 20 20 20 20  20 20 20 e7 a4 61 6c 6c  |..2        ..all|
00006560  6f 63 61 74 65 5f 73 74  64 28 77 69 64 74 68 25  |ocate_std(width%|
00006570  2c 77 69 64 74 68 25 2c  30 2c 30 29 20 8b 20 3d  |,width%,0,0) . =|
00006580  a3 0d 15 f4 0c 20 20 20  20 20 20 20 cd 0d 15 fe  |.....       ....|
00006590  1e 20 20 20 20 20 20 20  e7 a4 6e 65 77 5f 69 6d  |.       ..new_im|
000065a0  61 67 65 28 30 29 20 8b  20 3d a3 0d 16 08 38 20  |age(0) . =....8 |
000065b0  20 20 20 20 20 20 e7 63  6f 6d 70 72 65 73 73 65  |      .compresse|
000065c0  64 20 8c 20 63 6f 6d 70  72 24 3d 22 52 75 6e 20  |d . compr$="Run |
000065d0  6c 65 6e 67 74 68 22 20  8b 20 63 6f 6d 70 72 24  |length" . compr$|
000065e0  3d 22 22 0d 16 12 26 20  20 20 20 20 20 20 e7 63  |=""...&       .c|
000065f0  6f 6c 62 69 74 73 25 3e  38 20 8c 20 63 69 25 3d  |olbits%>8 . ci%=|
00006600  32 20 8b 20 63 69 25 3d  30 0d 16 1c 7e 20 20 20  |2 . ci%=0...~   |
00006610  20 20 20 20 f2 69 6d 61  67 65 5f 69 6e 66 6f 28  |    .image_info(|
00006620  22 41 6d 69 67 61 20 49  46 46 22 2c 77 69 64 74  |"Amiga IFF",widt|
00006630  68 25 2c 68 65 69 67 68  74 25 2c 63 69 25 2c 63  |h%,height%,ci%,c|
00006640  6f 6c 62 69 74 73 25 2c  4d 6f 64 65 25 2c 63 6f  |olbits%,Mode%,co|
00006650  6d 70 72 24 2c 69 6e 66  6f 24 2c 46 6c 65 6e 25  |mpr$,info$,Flen%|
00006660  2d a4 69 70 74 72 28 46  31 25 29 2c 28 77 69 64  |-.iptr(F1%),(wid|
00006670  74 68 25 2a 68 65 69 67  68 74 25 2a 70 6c 61 6e  |th%*height%*plan|
00006680  65 73 25 29 81 38 29 0d  16 26 31 20 20 20 20 20  |es%).8)..&1     |
00006690  20 20 e7 68 61 6d 20 8c  20 f2 76 61 72 28 22 73  |  .ham . .var("s|
000066a0  63 74 79 22 2c 31 29 20  8b 20 f2 76 61 72 28 22  |cty",1) . .var("|
000066b0  73 63 74 79 22 2c 30 29  0d 16 30 8d 20 20 20 20  |scty",0)..0.    |
000066c0  20 20 20 f2 76 61 72 28  22 69 66 70 31 22 2c a4  |   .var("ifp1",.|
000066d0  69 70 74 72 28 46 31 25  29 29 3a f2 76 61 72 28  |iptr(F1%)):.var(|
000066e0  22 70 6c 61 6e 22 2c 70  6c 61 6e 65 73 25 29 3a  |"plan",planes%):|
000066f0  f2 76 61 72 28 22 69 6d  67 78 22 2c 77 69 64 74  |.var("imgx",widt|
00006700  68 25 29 3a f2 76 61 72  28 22 69 6d 67 79 22 2c  |h%):.var("imgy",|
00006710  68 65 69 67 68 74 25 29  3a f2 76 61 72 28 22 63  |height%):.var("c|
00006720  6f 6d 70 22 2c 63 6f 6d  70 72 65 73 73 65 64 29  |omp",compressed)|
00006730  3a e7 a4 75 6e 70 61 63  6b 28 22 49 46 46 22 29  |:..unpack("IFF")|
00006740  20 8b 20 3d a3 0d 16 3a  05 cb 0d 16 44 47 e7 68  | . =...:....DG.h|
00006750  65 61 64 24 3c 3e 22 42  4f 44 59 22 20 8c 20 f2  |ead$<>"BODY" . .|
00006760  69 73 6b 69 70 28 46 31  25 2c 68 6c 65 6e 25 2d  |iskip(F1%,hlen%-|
00006770  28 a4 69 70 74 72 28 46  31 25 29 2d 73 74 61 72  |(.iptr(F1%)-star|
00006780  74 70 74 72 25 29 29 3a  f4 20 54 6f 20 6e 65 78  |tptr%)):. To nex|
00006790  74 0d 16 4e 0a fd 20 62  6f 64 79 0d 16 58 06 3d  |t..N.. body..X.=|
000067a0  b9 0d 16 62 05 20 0d 16  6c 0d dd a4 70 69 63 5f  |...b. ..l...pic_|
000067b0  47 49 46 0d 16 76 33 f4  20 4d 61 6b 65 73 20 47  |GIF..v3. Makes G|
000067c0  49 46 20 28 47 72 61 70  68 69 63 73 20 49 6e 74  |IF (Graphics Int|
000067d0  65 72 63 68 61 6e 67 65  20 46 6f 72 6d 61 74 29  |erchange Format)|
000067e0  20 69 6d 61 67 65 0d 16  80 26 ea 20 67 5f 49 6e  | image...&. g_In|
000067f0  50 61 6c 25 28 29 2c 50  69 63 5f 70 74 72 25 28  |Pal%(),Pic_ptr%(|
00006800  29 2c 50 69 63 5f 6c 65  6e 25 28 29 0d 16 8a 2f  |),Pic_len%().../|
00006810  de 20 67 5f 49 6e 50 61  6c 25 28 32 35 36 29 2c  |. g_InPal%(256),|
00006820  50 69 63 5f 70 74 72 25  28 32 35 36 29 2c 50 69  |Pic_ptr%(256),Pi|
00006830  63 5f 6c 65 6e 25 28 32  35 36 29 0d 16 94 33 73  |c_len%(256)...3s|
00006840  69 67 6e 61 74 75 72 65  24 3d a4 69 73 74 72 69  |ignature$=.istri|
00006850  6e 67 28 46 31 25 2c 36  29 3a f4 20 52 65 61 64  |ng(F1%,6):. Read|
00006860  20 47 49 46 20 73 69 67  6e 61 74 75 72 65 0d 16  | GIF signature..|
00006870  9e 58 e7 c0 73 69 67 6e  61 74 75 72 65 24 2c 33  |.X..signature$,3|
00006880  29 3c 3e 22 47 49 46 22  20 8c 20 f2 65 72 72 6f  |)<>"GIF" . .erro|
00006890  72 28 2d 31 2c 22 54 68  69 73 20 73 63 72 65 65  |r(-1,"This scree|
000068a0  6e 20 66 69 6c 65 20 69  73 20 6e 6f 74 20 61 20  |n file is not a |
000068b0  47 49 46 20 73 63 72 65  65 6e 20 66 69 6c 65 20  |GIF screen file |
000068c0  21 22 29 3a 3d a3 0d 16  a8 24 f4 20 52 65 61 64  |!"):=....$. Read|
000068d0  20 64 61 74 61 20 69 6e  20 53 63 72 65 65 6e 20  | data in Screen |
000068e0  44 65 73 63 72 69 70 74  6f 72 0d 16 b2 2e 72 5f  |Descriptor....r_|
000068f0  77 69 64 74 68 25 3d a4  69 64 6c 3a 72 5f 68 65  |width%=.idl:r_he|
00006900  69 67 68 74 25 3d a4 69  64 6c 3a f4 20 52 61 73  |ight%=.idl:. Ras|
00006910  74 65 72 20 73 69 7a 65  0d 16 bc 40 66 6c 61 67  |ter size...@flag|
00006920  73 25 3d a4 69 62 3a 62  61 63 6b 67 72 25 3d a4  |s%=.ib:backgr%=.|
00006930  69 62 3a f2 69 73 6b 69  70 28 46 31 25 2c 31 29  |ib:.iskip(F1%,1)|
00006940  3a f4 20 46 6c 61 67 73  20 61 6e 64 20 62 61 63  |:. Flags and bac|
00006950  6b 20 63 6f 6c 6f 75 72  0d 16 c6 3b 67 6c 6f 62  |k colour...;glob|
00006960  61 6c 3d 28 28 66 6c 61  67 73 25 80 26 38 30 29  |al=((flags%.&80)|
00006970  3e 30 29 3a f4 20 47 6c  6f 62 61 6c 20 63 6f 6c  |>0):. Global col|
00006980  6f 75 72 20 6d 61 70 20  66 6f 6c 6c 6f 77 69 6e  |our map followin|
00006990  67 20 3f 0d 16 d0 33 67  5f 70 69 78 62 69 74 73  |g ?...3g_pixbits|
000069a0  25 3d 28 66 6c 61 67 73  25 80 37 29 2b 31 3a f4  |%=(flags%.7)+1:.|
000069b0  20 47 6c 6f 62 61 6c 20  62 69 74 73 20 70 65 72  | Global bits per|
000069c0  20 70 69 78 65 6c 0d 16  da 3a 63 6f 6c 62 69 74  | pixel...:colbit|
000069d0  73 25 3d 28 28 66 6c 61  67 73 25 3e 3e 34 29 80  |s%=((flags%>>4).|
000069e0  37 29 2b 31 3a f4 20 42  69 74 73 20 6f 66 20 63  |7)+1:. Bits of c|
000069f0  6f 6c 6f 75 72 20 72 65  73 6f 6c 75 74 69 6f 6e  |olour resolution|
00006a00  0d 16 e4 0d e7 67 6c 6f  62 61 6c 20 8c 0d 16 ee  |.....global ....|
00006a10  1d 20 f4 20 52 65 61 64  20 47 6c 6f 62 61 6c 20  |. . Read Global |
00006a20  43 6f 6c 6f 75 72 20 4d  61 70 0d 16 f8 34 20 f2  |Colour Map...4 .|
00006a30  72 65 61 64 32 34 70 61  6c 28 46 31 25 2c 67 5f  |read24pal(F1%,g_|
00006a40  49 6e 50 61 6c 25 28 29  2c 32 5e 67 5f 70 69 78  |InPal%(),2^g_pix|
00006a50  62 69 74 73 25 2c 30 2c  31 2c 32 2c 33 29 0d 17  |bits%,0,1,2,3)..|
00006a60  02 2d 20 67 5f 49 6e 50  61 6c 25 28 30 29 3d 67  |.- g_InPal%(0)=g|
00006a70  5f 70 69 78 62 69 74 73  25 3a f4 20 50 61 6c 65  |_pixbits%:. Pale|
00006a80  74 74 65 20 65 6e 74 72  69 65 73 0d 17 0c 25 cc  |tte entries...%.|
00006a90  20 49 6e 50 61 6c 25 28  30 29 3d 2d 31 3a f4 20  | InPal%(0)=-1:. |
00006aa0  4e 6f 20 70 61 6c 65 74  74 65 20 66 6f 75 6e 64  |No palette found|
00006ab0  0d 17 16 05 cd 0d 17 20  29 f4 20 53 63 61 6e 20  |....... ). Scan |
00006ac0  64 61 74 61 20 66 6f 72  20 70 69 63 74 75 72 65  |data for picture|
00006ad0  73 2c 20 6d 61 6b 65 20  61 20 6c 69 73 74 0d 17  |s, make a list..|
00006ae0  2a 10 70 69 63 74 75 72  65 25 3d 30 3a f5 0d 17  |*.picture%=0:...|
00006af0  34 3f f2 73 6b 69 70 5f  47 49 46 5f 65 78 74 65  |4?.skip_GIF_exte|
00006b00  6e 73 69 6f 6e 3a f4 20  53 6b 69 70 20 65 78 74  |nsion:. Skip ext|
00006b10  65 6e 73 69 6f 6e 20 62  6c 6f 63 6b 73 20 70 72  |ension blocks pr|
00006b20  65 63 65 64 69 6e 67 20  49 6d 61 67 65 0d 17 3e  |eceding Image..>|
00006b30  26 f4 20 53 65 61 72 63  68 20 66 6f 72 20 6e 65  |&. Search for ne|
00006b40  78 74 20 49 6d 61 67 65  20 44 65 73 63 72 69 70  |xt Image Descrip|
00006b50  74 6f 72 0d 17 48 45 f5  20 5f 25 3d a4 69 62 3a  |tor..HE. _%=.ib:|
00006b60  69 6d 61 67 65 3d 28 5f  25 3d 97 22 2c 22 29 3a  |image=(_%=.","):|
00006b70  65 6e 64 3d 28 5f 25 3d  97 22 3b 22 29 3a fd 20  |end=(_%=.";"):. |
00006b80  69 6d 61 67 65 20 84 20  65 6e 64 20 84 20 a4 69  |image . end . .i|
00006b90  65 6f 66 28 46 31 25 29  0d 17 52 7e e7 ac 69 6d  |eof(F1%)..R~..im|
00006ba0  61 67 65 20 8c 20 e7 ac  65 6e 64 20 8c 20 f2 65  |age . ..end . .e|
00006bb0  72 72 6f 72 28 2d 31 2c  22 57 61 72 6e 69 6e 67  |rror(-1,"Warning|
00006bc0  20 21 20 47 49 46 20 66  69 6c 65 20 69 73 20 6e  | ! GIF file is n|
00006bd0  6f 74 20 70 72 6f 70 65  72 6c 79 20 74 65 72 6d  |ot properly term|
00006be0  69 6e 61 74 65 64 20 21  22 29 3a 65 6e 64 3d b9  |inated !"):end=.|
00006bf0  3a f2 68 6f 75 72 5f 6f  66 66 3a f2 68 6f 75 72  |:.hour_off:.hour|
00006c00  5f 6f 6e 3a f4 20 52 65  61 64 20 62 65 79 6f 6e  |_on:. Read beyon|
00006c10  64 20 66 69 6c 65 0d 17  5c 0c e7 69 6d 61 67 65  |d file..\..image|
00006c20  20 8c 0d 17 66 22 20 f4  20 52 65 67 69 73 74 65  | ...f" . Registe|
00006c30  72 20 70 69 63 74 75 72  65 27 73 20 70 6f 73 69  |r picture's posi|
00006c40  74 69 6f 6e 0d 17 70 30  20 70 69 63 74 75 72 65  |tion..p0 picture|
00006c50  25 2b 3d 31 3a 50 69 63  5f 70 74 72 25 28 70 69  |%+=1:Pic_ptr%(pi|
00006c60  63 74 75 72 65 25 29 3d  a4 69 70 74 72 28 46 31  |cture%)=.iptr(F1|
00006c70  25 29 2d 31 0d 17 7a 6b  20 f2 69 73 6b 69 70 28  |%)-1..zk .iskip(|
00006c80  46 31 25 2c 38 29 3a 5f  25 3d a4 69 62 3a e7 28  |F1%,8):_%=.ib:.(|
00006c90  5f 25 80 26 38 30 29 3e  30 20 8c 20 f2 69 73 6b  |_%.&80)>0 . .isk|
00006ca0  69 70 28 46 31 25 2c 33  2a 32 5e 28 28 5f 25 80  |ip(F1%,3*2^((_%.|
00006cb0  37 29 2b 31 29 29 3a f4  20 49 66 20 74 68 65 72  |7)+1)):. If ther|
00006cc0  65 27 73 20 61 20 6c 6f  63 61 6c 20 63 6f 6c 6f  |e's a local colo|
00006cd0  75 72 20 6d 61 70 2c 20  73 6b 69 70 20 69 74 0d  |ur map, skip it.|
00006ce0  17 84 0f 20 e7 47 49 46  53 63 61 6e 20 8c 0d 17  |... .GIFScan ...|
00006cf0  8e 30 20 20 f4 20 44 65  74 65 72 6d 69 6e 65 20  |.0  . Determine |
00006d00  70 69 63 74 75 72 65 20  64 61 74 61 20 6c 65 6e  |picture data len|
00006d10  67 74 68 2c 20 73 6b 69  70 20 64 61 74 61 0d 17  |gth, skip data..|
00006d20  98 32 20 20 f2 69 73 6b  69 70 28 46 31 25 2c 31  |.2  .iskip(F1%,1|
00006d30  29 3a f5 20 63 25 3d a4  69 62 3a f2 69 73 6b 69  |):. c%=.ib:.iski|
00006d40  70 28 46 31 25 2c 63 25  29 3a fd 20 63 25 3d 30  |p(F1%,c%):. c%=0|
00006d50  0d 17 a2 36 20 20 50 69  63 5f 6c 65 6e 25 28 70  |...6  Pic_len%(p|
00006d60  69 63 74 75 72 65 25 29  3d a4 69 70 74 72 28 46  |icture%)=.iptr(F|
00006d70  31 25 29 2d 50 69 63 5f  70 74 72 25 28 70 69 63  |1%)-Pic_ptr%(pic|
00006d80  74 75 72 65 25 29 0d 17  ac 3d 20 cc 20 50 69 63  |ture%)...= . Pic|
00006d90  5f 6c 65 6e 25 28 70 69  63 74 75 72 65 25 29 3d  |_len%(picture%)=|
00006da0  a4 69 6c 65 6e 28 46 31  25 29 2d 50 69 63 5f 70  |.ilen(F1%)-Pic_p|
00006db0  74 72 25 28 70 69 63 74  75 72 65 25 29 3a 65 6e  |tr%(picture%):en|
00006dc0  64 3d b9 0d 17 b6 06 20  cd 0d 17 c0 05 cd 0d 17  |d=..... ........|
00006dd0  ca 09 fd 20 65 6e 64 0d  17 d4 31 70 69 63 74 75  |... end...1pictu|
00006de0  72 65 73 25 3d 70 69 63  74 75 72 65 25 3a f4 20  |res%=picture%:. |
00006df0  4e 75 6d 62 65 72 20 6f  66 20 70 69 63 74 75 72  |Number of pictur|
00006e00  65 73 20 66 6f 75 6e 64  0d 17 de 4e e7 70 69 63  |es found...N.pic|
00006e10  74 75 72 65 73 25 3e 30  20 8b 20 f2 65 72 72 6f  |tures%>0 . .erro|
00006e20  72 28 2d 31 2c 22 49 20  63 61 6e 6e 6f 74 20 66  |r(-1,"I cannot f|
00006e30  69 6e 64 20 61 6e 79 20  69 6d 61 67 65 73 20 69  |ind any images i|
00006e40  6e 20 74 68 69 73 20 47  49 46 20 66 69 6c 65 20  |n this GIF file |
00006e50  21 22 29 3a 3d a3 0d 17  e8 0e e7 47 49 46 53 63  |!"):=......GIFSc|
00006e60  61 6e 20 8c 0d 17 f2 be  20 e7 28 49 6d 61 67 65  |an ..... .(Image|
00006e70  4e 72 25 3e 30 29 20 80  20 28 49 6d 61 67 65 4e  |Nr%>0) . (ImageN|
00006e80  72 25 3c 3d 70 69 63 74  75 72 65 73 25 29 20 8c  |r%<=pictures%) .|
00006e90  20 70 69 63 74 75 72 65  25 3d 49 6d 61 67 65 4e  | picture%=ImageN|
00006ea0  72 25 20 8b 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |r% . .error(-1,"|
00006eb0  54 68 69 73 20 47 49 46  20 66 69 6c 65 20 63 6f  |This GIF file co|
00006ec0  6e 74 61 69 6e 73 20 22  2b c3 28 70 69 63 74 75  |ntains "+.(pictu|
00006ed0  72 65 73 25 29 2b 22 20  69 6d 61 67 65 73 2e 20  |res%)+" images. |
00006ee0  53 65 6c 65 63 74 20 27  31 27 2d 27 22 2b c3 28  |Select '1'-'"+.(|
00006ef0  70 69 63 74 75 72 65 73  25 29 2b 22 27 20 69 6e  |pictures%)+"' in|
00006f00  20 74 68 65 20 27 49 6d  61 67 65 20 6e 75 6d 62  | the 'Image numb|
00006f10  65 72 27 20 73 75 62 6d  65 6e 75 20 21 22 29 3a  |er' submenu !"):|
00006f20  3d a3 0d 17 fc 10 cc 20  70 69 63 74 75 72 65 25  |=...... picture%|
00006f30  3d 31 0d 18 06 05 cd 0d  18 10 4b f2 69 70 74 72  |=1........K.iptr|
00006f40  28 46 31 25 2c 50 69 63  5f 70 74 72 25 28 70 69  |(F1%,Pic_ptr%(pi|
00006f50  63 74 75 72 65 25 29 2b  31 29 3a 6c 65 6e 25 3d  |cture%)+1):len%=|
00006f60  50 69 63 5f 6c 65 6e 25  28 70 69 63 74 75 72 65  |Pic_len%(picture|
00006f70  25 29 3a f4 20 50 69 63  20 70 6f 73 20 26 20 6c  |%):. Pic pos & l|
00006f80  65 6e 0d 18 1a 20 f4 20  52 65 61 64 20 49 6d 61  |en... . Read Ima|
00006f90  67 65 20 44 65 73 63 72  69 70 74 6f 72 20 64 61  |ge Descriptor da|
00006fa0  74 61 0d 18 24 30 69 5f  6c 65 66 74 25 3d a4 69  |ta..$0i_left%=.i|
00006fb0  64 6c 3a 69 5f 74 6f 70  25 3d a4 69 64 6c 3a f4  |dl:i_top%=.idl:.|
00006fc0  20 50 6f 73 69 74 69 6f  6e 20 69 6e 20 66 72 61  | Position in fra|
00006fd0  6d 65 0d 18 2e 3c 69 5f  77 69 64 74 68 25 3d a4  |me...<i_width%=.|
00006fe0  69 64 6c 3a 69 5f 68 65  69 67 68 74 25 3d a4 69  |idl:i_height%=.i|
00006ff0  64 6c 3a 66 6c 61 67 73  25 3d a4 69 62 3a f4 20  |dl:flags%=.ib:. |
00007000  53 69 7a 65 20 61 6e 64  20 66 6c 61 67 73 0d 18  |Size and flags..|
00007010  38 37 6c 6f 63 61 6c 3d  28 66 6c 61 67 73 25 80  |87local=(flags%.|
00007020  26 38 30 29 3e 30 3a f4  20 4c 6f 63 61 6c 20 63  |&80)>0:. Local c|
00007030  6f 6c 6f 75 72 20 6d 61  70 20 66 6f 6c 6c 6f 77  |olour map follow|
00007040  69 6e 67 20 3f 0d 18 42  3c 69 62 69 74 3d 28 66  |ing ?..B<ibit=(f|
00007050  6c 61 67 73 25 80 26 34  30 29 3e 30 3a f4 20 49  |lags%.&40)>0:. I|
00007060  6d 61 67 65 20 73 74 6f  72 65 64 20 69 6e 20 69  |mage stored in i|
00007070  6e 74 65 72 6c 61 63 65  64 20 6f 72 64 65 72 20  |nterlaced order |
00007080  3f 0d 18 4c 32 6c 5f 70  69 78 62 69 74 73 25 3d  |?..L2l_pixbits%=|
00007090  28 66 6c 61 67 73 25 80  37 29 2b 31 3a f4 20 4c  |(flags%.7)+1:. L|
000070a0  6f 63 61 6c 20 62 69 74  73 20 70 65 72 20 70 69  |ocal bits per pi|
000070b0  78 65 6c 0d 18 56 0c e7  6c 6f 63 61 6c 20 8c 0d  |xel..V..local ..|
000070c0  18 60 40 20 70 69 78 62  69 74 73 25 3d 6c 5f 70  |.`@ pixbits%=l_p|
000070d0  69 78 62 69 74 73 25 3a  f4 20 52 65 61 64 20 61  |ixbits%:. Read a|
000070e0  6e 64 20 75 73 65 20 4c  6f 63 61 6c 20 43 6f 6c  |nd use Local Col|
000070f0  6f 75 72 20 4d 61 70 20  70 61 6c 65 74 74 65 0d  |our Map palette.|
00007100  18 6a 32 20 f2 72 65 61  64 32 34 70 61 6c 28 46  |.j2 .read24pal(F|
00007110  31 25 2c 49 6e 50 61 6c  25 28 29 2c 32 5e 6c 5f  |1%,InPal%(),2^l_|
00007120  70 69 78 62 69 74 73 25  2c 30 2c 31 2c 32 2c 33  |pixbits%,0,1,2,3|
00007130  29 0d 18 74 2b 20 49 6e  50 61 6c 25 28 30 29 3d  |)..t+ InPal%(0)=|
00007140  6c 5f 70 69 78 62 69 74  73 25 3a f4 20 50 61 6c  |l_pixbits%:. Pal|
00007150  65 74 74 65 20 65 6e 74  72 69 65 73 0d 18 7e 3f  |ette entries..~?|
00007160  cc 20 70 69 78 62 69 74  73 25 3d 67 5f 70 69 78  |. pixbits%=g_pix|
00007170  62 69 74 73 25 3a 49 6e  50 61 6c 25 28 29 3d 67  |bits%:InPal%()=g|
00007180  5f 49 6e 50 61 6c 25 28  29 3a f4 20 55 73 65 20  |_InPal%():. Use |
00007190  47 6c 6f 62 61 6c 20 64  61 74 61 0d 18 88 05 cd  |Global data.....|
000071a0  0d 18 92 4e e7 49 6e 50  61 6c 25 28 30 29 3d 2d  |...N.InPal%(0)=-|
000071b0  31 20 8c 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |1 . .error(-1,"I|
000071c0  20 63 61 6e 6e 6f 74 20  66 69 6e 64 20 61 20 70  | cannot find a p|
000071d0  61 6c 65 74 74 65 20 69  6e 20 74 68 69 73 20 47  |alette in this G|
000071e0  49 46 20 66 69 6c 65 20  21 22 29 3a 3d a3 0d 18  |IF file !"):=...|
000071f0  9c 2b 63 6f 6c 6f 75 72  73 25 3d 32 5e 70 69 78  |.+colours%=2^pix|
00007200  62 69 74 73 25 3a f4 20  4e 75 6d 62 65 72 20 6f  |bits%:. Number o|
00007210  66 20 63 6f 6c 6f 75 72  73 0d 18 a6 3d 77 69 64  |f colours...=wid|
00007220  74 68 25 3d 69 5f 77 69  64 74 68 25 3a 68 65 69  |th%=i_width%:hei|
00007230  67 68 74 25 3d 69 5f 68  65 69 67 68 74 25 3a f4  |ght%=i_height%:.|
00007240  20 54 72 75 65 20 77 69  64 74 68 20 61 6e 64 20  | True width and |
00007250  68 65 69 67 68 74 0d 18  b0 27 f2 73 65 74 28 77  |height...'.set(w|
00007260  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 63 6f  |idth%,height%,co|
00007270  6c 6f 75 72 73 25 2c 4d  6f 64 65 25 29 0d 18 ba  |lours%,Mode%)...|
00007280  66 e7 a4 61 6c 6c 6f 63  61 74 65 28 42 5f 6c 7a  |f..allocate(B_lz|
00007290  77 74 61 62 6c 65 25 2c  33 32 2a 31 30 32 34 29  |wtable%,32*1024)|
000072a0  20 8b 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
000072b0  68 61 76 65 20 6e 6f 20  72 6f 6f 6d 20 66 6f 72  |have no room for|
000072c0  20 74 68 65 20 4c 5a 57  20 64 65 63 6f 6d 70 72  | the LZW decompr|
000072d0  65 73 73 69 6f 6e 20 74  61 62 6c 65 20 21 22 29  |ession table !")|
000072e0  3a 3d a3 0d 18 c4 2a e7  a4 61 6c 6c 6f 63 61 74  |:=....*..allocat|
000072f0  65 5f 73 74 64 28 77 69  64 74 68 25 2c 30 2c 77  |e_std(width%,0,w|
00007300  69 64 74 68 25 2c 30 29  20 8b 20 3d a3 0d 18 ce  |idth%,0) . =....|
00007310  3b f4 20 52 6f 6f 6d 20  6e 65 65 64 65 64 20 66  |;. Room needed f|
00007320  6f 72 20 64 65 63 6f 6d  70 72 65 73 73 69 6f 6e  |or decompression|
00007330  20 64 61 74 61 20 61 6e  64 20 64 65 2d 69 6e 74  | data and de-int|
00007340  65 72 6c 61 63 69 6e 67  0d 18 d8 64 e7 70 69 78  |erlacing...d.pix|
00007350  62 69 74 73 25 3c 3d 32  20 8c 20 72 62 69 74 73  |bits%<=2 . rbits|
00007360  25 3d 70 69 78 62 69 74  73 25 20 8b 20 e7 70 69  |%=pixbits% . .pi|
00007370  78 62 69 74 73 25 3c 3d  34 20 8c 20 72 62 69 74  |xbits%<=4 . rbit|
00007380  73 25 3d 34 20 8b 20 72  62 69 74 73 25 3d 38 3a  |s%=4 . rbits%=8:|
00007390  f4 20 52 6f 75 6e 64 20  75 70 20 62 70 70 20 74  |. Round up bpp t|
000073a0  6f 20 73 70 72 69 74 65  20 62 70 70 0d 18 e2 40  |o sprite bpp...@|
000073b0  72 6f 6f 6d 25 3d 28 28  28 77 69 64 74 68 25 2a  |room%=(((width%*|
000073c0  72 62 69 74 73 25 2b 33  31 29 3e 3e 35 29 3c 3c  |rbits%+31)>>5)<<|
000073d0  32 29 2a 28 68 65 69 67  68 74 25 2b 31 29 3a f4  |2)*(height%+1):.|
000073e0  20 52 6f 6f 6d 20 6e 65  65 64 65 64 0d 18 ec 1b  | Room needed....|
000073f0  e7 a4 6e 65 77 5f 69 6d  61 67 65 28 72 6f 6f 6d  |..new_image(room|
00007400  25 29 20 8b 20 3d a3 0d  18 f6 27 e7 47 49 46 53  |%) . =....'.GIFS|
00007410  63 61 6e 20 8c 20 6e 70  24 3d c3 70 69 63 74 75  |can . np$=.pictu|
00007420  72 65 73 25 20 8b 20 6e  70 24 3d 22 3f 22 0d 19  |res% . np$="?"..|
00007430  00 8d f2 69 6d 61 67 65  5f 69 6e 66 6f 28 73 69  |...image_info(si|
00007440  67 6e 61 74 75 72 65 24  2c 77 69 64 74 68 25 2c  |gnature$,width%,|
00007450  68 65 69 67 68 74 25 2c  30 2c 70 69 78 62 69 74  |height%,0,pixbit|
00007460  73 25 2c 4d 6f 64 65 25  2c 22 4c 5a 57 22 2c 6e  |s%,Mode%,"LZW",n|
00007470  70 24 2b 22 20 70 69 63  73 20 28 74 68 69 73 20  |p$+" pics (this |
00007480  69 73 20 22 2b a4 74 69  6d 65 73 28 70 69 63 74  |is "+.times(pict|
00007490  75 72 65 25 29 2b 22 29  22 2c 6c 65 6e 25 2c 28  |ure%)+")",len%,(|
000074a0  68 65 69 67 68 74 25 2a  77 69 64 74 68 25 2a 70  |height%*width%*p|
000074b0  69 78 62 69 74 73 25 29  81 38 29 0d 19 0a 2b e7  |ixbits%).8)...+.|
000074c0  69 62 69 74 20 8c 20 f2  76 61 72 28 22 6c 61 63  |ibit . .var("lac|
000074d0  65 22 2c 31 29 20 8b 20  f2 76 61 72 28 22 6c 61  |e",1) . .var("la|
000074e0  63 65 22 2c 30 29 0d 19  14 59 f2 76 61 72 28 22  |ce",0)...Y.var("|
000074f0  69 66 70 31 22 2c a4 69  70 74 72 28 46 31 25 29  |ifp1",.iptr(F1%)|
00007500  29 3a f2 76 61 72 28 22  69 6d 67 78 22 2c 77 69  |):.var("imgx",wi|
00007510  64 74 68 25 29 3a f2 76  61 72 28 22 69 6d 67 79  |dth%):.var("imgy|
00007520  22 2c 68 65 69 67 68 74  25 29 3a e7 a4 75 6e 70  |",height%):..unp|
00007530  61 63 6b 28 22 47 49 46  22 29 20 8b 20 3d a3 0d  |ack("GIF") . =..|
00007540  19 1e 06 3d b9 0d 19 28  05 20 0d 19 32 18 dd f2  |...=...(. ..2...|
00007550  73 6b 69 70 5f 47 49 46  5f 65 78 74 65 6e 73 69  |skip_GIF_extensi|
00007560  6f 6e 0d 19 3c 3f f4 20  53 6b 69 70 73 20 61 20  |on..<?. Skips a |
00007570  47 49 46 20 45 78 74 65  6e 73 69 6f 6e 20 42 6c  |GIF Extension Bl|
00007580  6f 63 6b 20 69 66 20 70  72 65 73 65 6e 74 20 61  |ock if present a|
00007590  74 20 63 75 72 72 65 6e  74 20 70 6f 69 6e 74 65  |t current pointe|
000075a0  72 0d 19 46 08 ea 20 5f  25 0d 19 50 11 e7 28 a4  |r..F.. _%..P..(.|
000075b0  69 62 29 3d 97 22 21 22  20 8c 0d 19 5a 27 20 f2  |ib)=."!" ...Z' .|
000075c0  69 73 6b 69 70 28 46 31  25 2c 31 29 3a f4 20 53  |iskip(F1%,1):. S|
000075d0  6b 69 70 20 66 75 6e 63  74 69 6f 6e 20 63 6f 64  |kip function cod|
000075e0  65 0d 19 64 3b 20 f5 20  5f 25 3d a4 69 62 3a f2  |e..d; . _%=.ib:.|
000075f0  69 73 6b 69 70 28 46 31  25 2c 5f 25 29 3a fd 20  |iskip(F1%,_%):. |
00007600  5f 25 3d 30 3a f4 20 53  6b 69 70 20 64 61 74 61  |_%=0:. Skip data|
00007610  20 62 79 74 65 20 62 6c  6f 63 6b 73 0d 19 6e 14  | byte blocks..n.|
00007620  cc 20 f2 69 73 6b 69 70  28 46 31 25 2c 2d 31 29  |. .iskip(F1%,-1)|
00007630  0d 19 78 05 cd 0d 19 82  05 e1 0d 19 8c 05 20 0d  |..x........... .|
00007640  19 96 0d dd a4 70 69 63  5f 41 52 43 0d 19 a0 23  |.....pic_ARC...#|
00007650  f4 20 4c 6f 61 64 73 20  41 72 63 68 69 6d 65 64  |. Loads Archimed|
00007660  65 73 20 73 70 72 69 74  65 20 69 6d 61 67 65 0d  |es sprite image.|
00007670  19 aa 44 70 69 63 74 75  72 65 73 25 3d a4 69 77  |..Dpictures%=.iw|
00007680  6c 3a 6f 66 69 72 73 74  25 3d a4 69 77 6c 3a f4  |l:ofirst%=.iwl:.|
00007690  20 4e 75 6d 62 65 72 20  6f 66 20 73 70 72 69 74  | Number of sprit|
000076a0  65 73 2c 20 6f 66 66 73  65 74 20 74 6f 20 66 69  |es, offset to fi|
000076b0  72 73 74 0d 19 b4 c0 e7  28 49 6d 61 67 65 4e 72  |rst.....(ImageNr|
000076c0  25 3e 30 29 20 80 20 28  49 6d 61 67 65 4e 72 25  |%>0) . (ImageNr%|
000076d0  3c 3d 70 69 63 74 75 72  65 73 25 29 20 8c 20 70  |<=pictures%) . p|
000076e0  69 63 74 75 72 65 25 3d  49 6d 61 67 65 4e 72 25  |icture%=ImageNr%|
000076f0  20 8b 20 f2 65 72 72 6f  72 28 2d 31 2c 22 54 68  | . .error(-1,"Th|
00007700  69 73 20 73 70 72 69 74  65 20 66 69 6c 65 20 63  |is sprite file c|
00007710  6f 6e 74 61 69 6e 73 20  22 2b c3 28 70 69 63 74  |ontains "+.(pict|
00007720  75 72 65 73 25 29 2b 22  20 69 6d 61 67 65 73 2e  |ures%)+" images.|
00007730  20 53 65 6c 65 63 74 20  27 31 27 2d 27 22 2b c3  | Select '1'-'"+.|
00007740  28 70 69 63 74 75 72 65  73 25 29 2b 22 27 20 69  |(pictures%)+"' i|
00007750  6e 20 74 68 65 20 27 49  6d 61 67 65 20 6e 75 6d  |n the 'Image num|
00007760  62 65 72 27 20 73 75 62  6d 65 6e 75 20 21 22 29  |ber' submenu !")|
00007770  3a 3d a3 0d 19 be 33 f2  69 73 6b 69 70 28 46 31  |:=....3.iskip(F1|
00007780  25 2c 6f 66 69 72 73 74  25 2d 38 2d 34 29 3a f4  |%,ofirst%-8-4):.|
00007790  20 53 74 61 72 74 20 6f  66 20 66 69 72 73 74 20  | Start of first |
000077a0  73 70 72 69 74 65 0d 19  c8 3d 73 6b 69 70 25 3d  |sprite...=skip%=|
000077b0  70 69 63 74 75 72 65 25  2d 31 3a c8 95 20 73 6b  |picture%-1:.. sk|
000077c0  69 70 25 3e 30 3a f2 69  73 6b 69 70 28 46 31 25  |ip%>0:.iskip(F1%|
000077d0  2c a4 69 77 6c 2d 34 29  3a 73 6b 69 70 25 2d 3d  |,.iwl-4):skip%-=|
000077e0  31 3a ce 0d 19 d2 4b 73  74 61 72 74 25 3d a4 69  |1:....Kstart%=.i|
000077f0  70 74 72 28 46 31 25 29  3a f2 69 73 6b 69 70 28  |ptr(F1%):.iskip(|
00007800  46 31 25 2c 31 36 29 3a  f4 20 52 65 6d 65 6d 62  |F1%,16):. Rememb|
00007810  65 72 20 73 74 61 72 74  2c 20 73 6b 69 70 20 6f  |er start, skip o|
00007820  66 66 73 65 74 20 61 6e  64 20 6e 61 6d 65 0d 19  |ffset and name..|
00007830  dc 42 77 6f 72 64 73 25  3d a4 69 77 6c 2b 31 3a  |.Bwords%=.iwl+1:|
00007840  68 65 69 67 68 74 25 3d  a4 69 77 6c 2b 31 3a f4  |height%=.iwl+1:.|
00007850  20 57 69 64 74 68 20 69  6e 20 77 6f 72 64 73 2c  | Width in words,|
00007860  20 68 65 69 67 68 74 20  69 6e 20 6c 69 6e 65 73  | height in lines|
00007870  0d 19 e6 33 62 66 69 72  73 74 25 3d a4 69 77 6c  |...3bfirst%=.iwl|
00007880  3a 62 6c 61 73 74 25 3d  a4 69 77 6c 3a f4 20 46  |:blast%=.iwl:. F|
00007890  69 72 73 74 2f 6c 61 73  74 20 62 69 74 73 20 75  |irst/last bits u|
000078a0  73 65 64 0d 19 f0 44 6f  69 6d 61 67 65 25 3d a4  |sed...Doimage%=.|
000078b0  69 77 6c 3a f2 69 73 6b  69 70 28 46 31 25 2c 34  |iwl:.iskip(F1%,4|
000078c0  29 3a 73 70 72 4d 6f 64  65 25 3d a4 69 77 6c 3a  |):sprMode%=.iwl:|
000078d0  f4 20 4f 66 66 73 65 74  20 74 6f 20 69 6d 61 67  |. Offset to imag|
000078e0  65 2c 20 6d 6f 64 65 0d  19 fa 42 63 6f 6c 62 69  |e, mode...Bcolbi|
000078f0  74 73 25 3d 32 5e a4 6d  6f 64 65 5f 76 61 72 28  |ts%=2^.mode_var(|
00007900  73 70 72 4d 6f 64 65 25  2c 39 29 3a 63 6f 6c 6f  |sprMode%,9):colo|
00007910  75 72 73 25 3d 32 5e 63  6f 6c 62 69 74 73 25 3a  |urs%=2^colbits%:|
00007920  f4 20 43 6f 6c 6f 75 72  73 0d 1a 04 2b e7 63 6f  |. Colours...+.co|
00007930  6c 62 69 74 73 25 3d 38  20 8c 20 65 6e 74 73 25  |lbits%=8 . ents%|
00007940  3d 36 34 20 8b 20 65 6e  74 73 25 3d 63 6f 6c 6f  |=64 . ents%=colo|
00007950  75 72 73 25 0d 1a 0e 12  e7 6f 69 6d 61 67 65 25  |urs%.....oimage%|
00007960  3c 3d 34 34 20 8c 0d 1a  18 39 20 f2 73 74 64 70  |<=44 ....9 .stdp|
00007970  61 6c 28 49 6e 50 61 6c  25 28 29 2c 63 6f 6c 62  |al(InPal%(),colb|
00007980  69 74 73 25 29 3a f4 20  4e 6f 20 70 61 6c 65 74  |its%):. No palet|
00007990  74 65 2c 20 73 65 74 20  64 65 66 61 75 6c 74 0d  |te, set default.|
000079a0  1a 22 4e cc 20 f2 72 65  61 64 32 34 70 61 6c 28  |."N. .read24pal(|
000079b0  46 31 25 2c 49 6e 50 61  6c 25 28 29 2c 65 6e 74  |F1%,InPal%(),ent|
000079c0  73 25 2c 31 2c 32 2c 33  2c 38 29 3a 49 6e 50 61  |s%,1,2,3,8):InPa|
000079d0  6c 25 28 30 29 3d 63 6f  6c 62 69 74 73 25 3a f4  |l%(0)=colbits%:.|
000079e0  20 52 65 61 64 20 70 61  6c 65 74 74 65 0d 1a 2c  | Read palette..,|
000079f0  84 20 e7 63 6f 6c 62 69  74 73 25 3d 38 20 8c 20  |. .colbits%=8 . |
00007a00  e3 20 63 25 3d 31 20 b8  20 65 6e 74 73 25 3a 70  |. c%=1 . ents%:p|
00007a10  25 3d 49 6e 50 61 6c 25  28 63 25 29 3a 49 6e 50  |%=InPal%(c%):InP|
00007a20  61 6c 25 28 63 25 2b 36  34 29 3d 70 25 20 84 20  |al%(c%+64)=p% . |
00007a30  31 3c 3c 31 35 3a 49 6e  50 61 6c 25 28 63 25 2b  |1<<15:InPal%(c%+|
00007a40  31 32 38 29 3d 70 25 20  84 20 31 3c 3c 37 3a 49  |128)=p% . 1<<7:I|
00007a50  6e 50 61 6c 25 28 63 25  2b 31 39 32 29 3d 70 25  |nPal%(c%+192)=p%|
00007a60  20 84 20 31 3c 3c 31 35  20 84 20 31 3c 3c 37 3a  | . 1<<15 . 1<<7:|
00007a70  ed 0d 1a 36 05 cd 0d 1a  40 35 77 69 64 74 68 25  |...6....@5width%|
00007a80  3d 28 77 6f 72 64 73 25  2a 33 32 2d 62 66 69 72  |=(words%*32-bfir|
00007a90  73 74 25 2d 28 33 31 2d  62 6c 61 73 74 25 29 29  |st%-(31-blast%))|
00007aa0  20 81 20 63 6f 6c 62 69  74 73 25 0d 1a 4a 87 e7  | . colbits%..J..|
00007ab0  a4 61 76 61 69 6c 61 62  6c 65 5f 6d 6f 64 65 28  |.available_mode(|
00007ac0  73 70 72 4d 6f 64 65 25  29 20 8c 20 4d 6f 64 65  |sprMode%) . Mode|
00007ad0  25 3d 73 70 72 4d 6f 64  65 25 20 8b 20 4d 6f 64  |%=sprMode% . Mod|
00007ae0  65 25 3d a4 6d 6f 64 65  28 77 69 64 74 68 25 2c  |e%=.mode(width%,|
00007af0  68 65 69 67 68 74 25 2c  63 6f 6c 6f 75 72 73 25  |height%,colours%|
00007b00  29 3a f4 20 44 65 74 65  72 6d 69 6e 65 20 6f 74  |):. Determine ot|
00007b10  68 65 72 20 6d 6f 64 65  20 69 66 20 73 70 72 69  |her mode if spri|
00007b20  74 65 27 73 20 6d 6f 64  65 20 77 6f 6e 27 74 20  |te's mode won't |
00007b30  64 6f 0d 1a 54 24 f2 73  65 74 28 77 69 64 74 68  |do..T$.set(width|
00007b40  25 2c 68 65 69 67 68 74  25 2c 63 6f 6c 6f 75 72  |%,height%,colour|
00007b50  73 25 2c 5f 25 29 0d 1a  5e 3e e7 a4 61 6c 6c 6f  |s%,_%)..^>..allo|
00007b60  63 61 74 65 5f 73 74 64  28 77 69 64 74 68 25 2c  |cate_std(width%,|
00007b70  28 77 69 64 74 68 25 2a  63 6f 6c 62 69 74 73 25  |(width%*colbits%|
00007b80  2b 37 29 81 38 2c 77 69  64 74 68 25 2c 30 29 20  |+7).8,width%,0) |
00007b90  8b 20 3d a3 0d 1a 68 17  e7 a4 6e 65 77 5f 69 6d  |. =...h...new_im|
00007ba0  61 67 65 28 30 29 20 8b  20 3d a3 0d 1a 72 80 f2  |age(0) . =...r..|
00007bb0  69 6d 61 67 65 5f 69 6e  66 6f 28 22 41 72 63 68  |image_info("Arch|
00007bc0  69 6d 65 64 65 73 20 73  70 72 69 74 65 22 2c 77  |imedes sprite",w|
00007bd0  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 30 2c  |idth%,height%,0,|
00007be0  63 6f 6c 62 69 74 73 25  2c 4d 6f 64 65 25 2c 22  |colbits%,Mode%,"|
00007bf0  22 2c c3 70 69 63 74 75  72 65 73 25 2b 22 20 73  |",.pictures%+" s|
00007c00  70 72 69 74 65 73 20 28  74 68 69 73 20 69 73 20  |prites (this is |
00007c10  22 2b a4 74 69 6d 65 73  28 70 69 63 74 75 72 65  |"+.times(picture|
00007c20  25 29 2b 22 29 22 2c 31  2c 31 29 0d 1a 7c 86 f2  |%)+")",1,1)..|..|
00007c30  76 61 72 28 22 69 66 70  31 22 2c 73 74 61 72 74  |var("ifp1",start|
00007c40  25 2b 6f 69 6d 61 67 65  25 29 3a f2 76 61 72 28  |%+oimage%):.var(|
00007c50  22 69 6d 67 78 22 2c 77  69 64 74 68 25 29 3a f2  |"imgx",width%):.|
00007c60  76 61 72 28 22 69 6d 67  79 22 2c 68 65 69 67 68  |var("imgy",heigh|
00007c70  74 25 29 3a f2 76 61 72  28 22 77 72 64 73 22 2c  |t%):.var("wrds",|
00007c80  77 6f 72 64 73 25 29 3a  f2 76 61 72 28 22 62 66  |words%):.var("bf|
00007c90  69 72 22 2c 62 66 69 72  73 74 25 29 3a e7 a4 75  |ir",bfirst%):..u|
00007ca0  6e 70 61 63 6b 28 22 41  52 43 22 29 20 8b 20 3d  |npack("ARC") . =|
00007cb0  a3 0d 1a 86 06 3d b9 0d  1a 90 05 20 0d 1a 9a 10  |.....=..... ....|
00007cc0  dd a4 70 69 63 5f 50 52  4f 41 52 54 0d 1a a4 1c  |..pic_PROART....|
00007cd0  f4 20 4d 61 6b 65 73 20  50 72 6f 41 72 74 69 73  |. Makes ProArtis|
00007ce0  61 6e 20 69 6d 61 67 65  0d 1a ae 2b 77 69 64 74  |an image...+widt|
00007cf0  68 25 3d 36 34 30 3a 68  65 69 67 68 74 25 3d 32  |h%=640:height%=2|
00007d00  35 36 3a f4 20 53 65 74  20 72 65 73 6f 6c 75 74  |56:. Set resolut|
00007d10  69 6f 6e 0d 1a b8 22 f2  73 65 74 28 77 69 64 74  |ion...".set(widt|
00007d20  68 25 2c 68 65 69 67 68  74 25 2c 32 35 36 2c 4d  |h%,height%,256,M|
00007d30  6f 64 65 25 29 0d 1a c2  2f e7 a4 61 6c 6c 6f 63  |ode%).../..alloc|
00007d40  61 74 65 5f 73 74 64 28  77 69 64 74 68 25 2c 77  |ate_std(width%,w|
00007d50  69 64 74 68 25 2c 77 69  64 74 68 25 2c 30 29 20  |idth%,width%,0) |
00007d60  8b 20 3d a3 0d 1a cc 43  72 6f 6f 6d 25 3d 28 77  |. =....Croom%=(w|
00007d70  69 64 74 68 25 2a 68 65  69 67 68 74 25 2b 33 29  |idth%*height%+3)|
00007d80  80 ac 33 3a f4 20 52 6f  6f 6d 20 6e 65 65 64 65  |..3:. Room neede|
00007d90  64 20 66 6f 72 20 75 6e  70 61 63 6b 20 28 63 6f  |d for unpack (co|
00007da0  6c 74 61 62 6c 65 29 0d  1a d6 1b e7 a4 6e 65 77  |ltable)......new|
00007db0  5f 69 6d 61 67 65 28 72  6f 6f 6d 25 29 20 8b 20  |_image(room%) . |
00007dc0  3d a3 0d 1a e0 43 63 6f  6c 6c 65 6e 25 3d a4 69  |=....Ccollen%=.i|
00007dd0  77 6c 3a 63 6f 6d 66 6c  61 67 25 3d a4 69 77 6c  |wl:comflag%=.iwl|
00007de0  3a f4 20 4c 65 6e 67 74  68 20 6f 66 20 63 6f 6c  |:. Length of col|
00007df0  6f 75 72 20 74 61 62 6c  65 2f 63 6f 6d 70 72 65  |our table/compre|
00007e00  73 73 69 6f 6e 0d 1a ea  36 63 6f 6c 74 61 62 6c  |ssion...6coltabl|
00007e10  65 25 3d 53 70 72 54 6f  70 25 2d 63 6f 6c 6c 65  |e%=SprTop%-colle|
00007e20  6e 25 3a f4 20 53 70 61  63 65 20 66 6f 72 20 63  |n%:. Space for c|
00007e30  6f 6c 6f 75 72 20 74 61  62 6c 65 0d 1a f4 34 f2  |olour table...4.|
00007e40  69 67 65 74 28 46 31 25  2c 63 6f 6c 74 61 62 6c  |iget(F1%,coltabl|
00007e50  65 25 2c 63 6f 6c 6c 65  6e 25 29 3a f4 20 52 65  |e%,collen%):. Re|
00007e60  61 64 20 63 6f 6c 6f 75  72 20 74 61 62 6c 65 0d  |ad colour table.|
00007e70  1a fe 35 f2 73 74 64 70  61 6c 28 49 6e 50 61 6c  |..5.stdpal(InPal|
00007e80  25 28 29 2c 38 29 3a f4  20 53 74 61 6e 64 61 72  |%(),8):. Standar|
00007e90  64 20 32 35 36 20 63 6f  6c 6f 75 72 20 70 61 6c  |d 256 colour pal|
00007ea0  65 74 74 65 0d 1b 08 5d  f2 69 6d 61 67 65 5f 69  |ette...].image_i|
00007eb0  6e 66 6f 28 22 50 72 6f  41 72 74 69 73 61 6e 22  |nfo("ProArtisan"|
00007ec0  2c 77 69 64 74 68 25 2c  68 65 69 67 68 74 25 2c  |,width%,height%,|
00007ed0  30 2c 38 2c 4d 6f 64 65  25 2c 22 52 75 6e 20 6c  |0,8,Mode%,"Run l|
00007ee0  65 6e 67 74 68 22 2c 22  22 2c 46 6c 65 6e 25 2d  |ength","",Flen%-|
00007ef0  38 2c 77 69 64 74 68 25  2a 68 65 69 67 68 74 25  |8,width%*height%|
00007f00  29 0d 1b 12 89 f2 76 61  72 28 22 69 66 70 31 22  |).....var("ifp1"|
00007f10  2c a4 69 70 74 72 28 46  31 25 29 29 3a f2 76 61  |,.iptr(F1%)):.va|
00007f20  72 28 22 70 72 6f 74 22  2c 63 6f 6c 74 61 62 6c  |r("prot",coltabl|
00007f30  65 25 29 3a f2 76 61 72  28 22 63 6f 6d 70 22 2c  |e%):.var("comp",|
00007f40  63 6f 6d 66 6c 61 67 25  29 3a f2 76 61 72 28 22  |comflag%):.var("|
00007f50  69 6d 67 78 22 2c 77 69  64 74 68 25 29 3a f2 76  |imgx",width%):.v|
00007f60  61 72 28 22 69 6d 67 79  22 2c 68 65 69 67 68 74  |ar("imgy",height|
00007f70  25 29 3a e7 a4 75 6e 70  61 63 6b 28 22 50 52 4f  |%):..unpack("PRO|
00007f80  41 52 54 22 29 20 8b 20  3d a3 0d 1b 1c 06 3d b9  |ART") . =.....=.|
00007f90  0d 1b 26 05 20 0d 1b 30  11 dd a4 70 69 63 5f 57  |..&. ..0...pic_W|
00007fa0  41 54 46 4f 52 44 0d 1b  3a 23 f4 20 4d 61 6b 65  |ATFORD..:#. Make|
00007fb0  73 20 57 61 74 66 6f 72  64 20 64 69 67 69 74 69  |s Watford digiti|
00007fc0  73 65 72 20 69 6d 61 67  65 0d 1b 44 2b 77 69 64  |ser image..D+wid|
00007fd0  74 68 25 3d 35 31 32 3a  68 65 69 67 68 74 25 3d  |th%=512:height%=|
00007fe0  32 35 36 3a f4 20 53 65  74 20 72 65 73 6f 6c 75  |256:. Set resolu|
00007ff0  74 69 6f 6e 0d 1b 4e 22  f2 73 65 74 28 77 69 64  |tion..N".set(wid|
00008000  74 68 25 2c 68 65 69 67  68 74 25 2c 32 35 36 2c  |th%,height%,256,|
00008010  4d 6f 64 65 25 29 0d 1b  58 2f e7 a4 61 6c 6c 6f  |Mode%)..X/..allo|
00008020  63 61 74 65 5f 73 74 64  28 77 69 64 74 68 25 2c  |cate_std(width%,|
00008030  77 69 64 74 68 25 2c 77  69 64 74 68 25 2c 30 29  |width%,width%,0)|
00008040  20 8b 20 3d a3 0d 1b 62  17 e7 a4 6e 65 77 5f 69  | . =...b...new_i|
00008050  6d 61 67 65 28 30 29 20  8b 20 3d a3 0d 1b 6c 30  |mage(0) . =...l0|
00008060  f2 67 72 65 79 70 61 6c  28 49 6e 50 61 6c 25 28  |.greypal(InPal%(|
00008070  29 2c 36 2c 31 29 3a f4  20 50 61 6c 65 74 74 65  |),6,1):. Palette|
00008080  20 69 73 20 36 34 20 67  72 65 79 73 0d 1b 76 68  | is 64 greys..vh|
00008090  f2 69 6d 61 67 65 5f 69  6e 66 6f 28 22 57 61 74  |.image_info("Wat|
000080a0  66 6f 72 64 20 64 69 67  69 74 69 73 65 72 22 2c  |ford digitiser",|
000080b0  77 69 64 74 68 25 2c 68  65 69 67 68 74 25 2c 31  |width%,height%,1|
000080c0  2c 36 2c 4d 6f 64 65 25  2c 22 52 75 6e 20 6c 65  |,6,Mode%,"Run le|
000080d0  6e 67 74 68 22 2c 22 22  2c 46 6c 65 6e 25 2c 28  |ngth","",Flen%,(|
000080e0  77 69 64 74 68 25 2a 68  65 69 67 68 74 25 2a 36  |width%*height%*6|
000080f0  29 81 38 29 0d 1b 80 54  f2 76 61 72 28 22 69 6d  |).8)...T.var("im|
00008100  67 78 22 2c 77 69 64 74  68 25 29 3a f2 76 61 72  |gx",width%):.var|
00008110  28 22 69 6d 67 79 22 2c  68 65 69 67 68 74 25 29  |("imgy",height%)|
00008120  3a f2 76 61 72 28 22 69  66 70 31 22 2c 30 29 3a  |:.var("ifp1",0):|
00008130  e7 a4 75 6e 70 61 63 6b  28 22 57 41 54 46 4f 52  |..unpack("WATFOR|
00008140  44 22 29 20 8b 20 3d a3  0d 1b 8a 06 3d b9 0d 1b  |D") . =.....=...|
00008150  94 05 20 0d 1b 9e 10 dd  a4 70 69 63 5f 52 45 4e  |.. ......pic_REN|
00008160  44 45 52 0d 1b a8 1f f4  20 4d 61 6b 65 73 20 52  |DER..... Makes R|
00008170  65 6e 64 65 72 20 42 65  6e 64 65 72 20 69 6d 61  |ender Bender ima|
00008180  67 65 0d 1b b2 21 4d 6f  64 65 25 3d a4 69 62 3a  |ge...!Mode%=.ib:|
00008190  f4 20 52 65 61 64 20 69  6d 61 67 65 27 73 20 6d  |. Read image's m|
000081a0  6f 64 65 0d 1b bc a6 e7  a4 6d 6f 64 65 5f 76 61  |ode......mode_va|
000081b0  72 28 4d 6f 64 65 25 2c  39 29 3c 3e 33 20 8c 20  |r(Mode%,9)<>3 . |
000081c0  f2 65 72 72 6f 72 28 2d  31 2c 22 54 68 69 73 20  |.error(-1,"This |
000081d0  52 65 6e 64 65 72 20 42  65 6e 64 65 72 20 69 6d  |Render Bender im|
000081e0  61 67 65 20 77 61 73 20  6e 6f 74 20 64 65 66 69  |age was not defi|
000081f0  6e 65 64 20 69 6e 20 61  20 32 35 36 20 63 6f 6c  |ned in a 256 col|
00008200  6f 75 72 20 6d 6f 64 65  20 21 22 29 20 8b 20 77  |our mode !") . w|
00008210  69 64 74 68 25 3d a4 6d  6f 64 65 5f 76 61 72 28  |idth%=.mode_var(|
00008220  4d 6f 64 65 25 2c 31 31  29 2b 31 3a 68 65 69 67  |Mode%,11)+1:heig|
00008230  68 74 25 3d a4 6d 6f 64  65 5f 76 61 72 28 4d 6f  |ht%=.mode_var(Mo|
00008240  64 65 25 2c 31 32 29 2b  31 0d 1b c6 22 f2 73 65  |de%,12)+1...".se|
00008250  74 28 77 69 64 74 68 25  2c 68 65 69 67 68 74 25  |t(width%,height%|
00008260  2c 32 35 36 2c 4d 6f 64  65 25 29 0d 1b d0 2f e7  |,256,Mode%).../.|
00008270  a4 61 6c 6c 6f 63 61 74  65 5f 73 74 64 28 77 69  |.allocate_std(wi|
00008280  64 74 68 25 2c 77 69 64  74 68 25 2c 77 69 64 74  |dth%,width%,widt|
00008290  68 25 2c 30 29 20 8b 20  3d a3 0d 1b da 17 e7 a4  |h%,0) . =.......|
000082a0  6e 65 77 5f 69 6d 61 67  65 28 30 29 20 8b 20 3d  |new_image(0) . =|
000082b0  a3 0d 1b e4 35 f2 73 74  64 70 61 6c 28 49 6e 50  |....5.stdpal(InP|
000082c0  61 6c 25 28 29 2c 38 29  3a f4 20 53 74 61 6e 64  |al%(),8):. Stand|
000082d0  61 72 64 20 32 35 36 20  63 6f 6c 6f 75 72 20 70  |ard 256 colour p|
000082e0  61 6c 65 74 74 65 0d 1b  ee 60 f2 69 6d 61 67 65  |alette...`.image|
000082f0  5f 69 6e 66 6f 28 22 52  65 6e 64 65 72 20 42 65  |_info("Render Be|
00008300  6e 64 65 72 22 2c 77 69  64 74 68 25 2c 68 65 69  |nder",width%,hei|
00008310  67 68 74 25 2c 30 2c 38  2c 4d 6f 64 65 25 2c 22  |ght%,0,8,Mode%,"|
00008320  52 75 6e 20 6c 65 6e 67  74 68 22 2c 22 22 2c 46  |Run length","",F|
00008330  6c 65 6e 25 2d 31 2c 77  69 64 74 68 25 2a 68 65  |len%-1,width%*he|
00008340  69 67 68 74 25 29 0d 1b  f8 53 f2 76 61 72 28 22  |ight%)...S.var("|
00008350  69 66 70 31 22 2c 31 29  3a f2 76 61 72 28 22 69  |ifp1",1):.var("i|
00008360  6d 67 78 22 2c 77 69 64  74 68 25 29 3a f2 76 61  |mgx",width%):.va|
00008370  72 28 22 69 6d 67 79 22  2c 68 65 69 67 68 74 25  |r("imgy",height%|
00008380  29 3a e7 a4 75 6e 70 61  63 6b 28 22 52 45 4e 44  |):..unpack("REND|
00008390  45 52 22 29 20 8b 20 3d  a3 0d 1c 02 06 3d b9 0d  |ER") . =.....=..|
000083a0  1c 0c 05 20 0d 1c 16 0d  dd a4 70 69 63 5f 41 49  |... ......pic_AI|
000083b0  4d 0d 1c 20 15 f4 20 4d  61 6b 65 73 20 41 49 4d  |M.. .. Makes AIM|
000083c0  20 69 6d 61 67 65 0d 1c  2a 2b 77 69 64 74 68 25  | image..*+width%|
000083d0  3d 32 35 36 3a 68 65 69  67 68 74 25 3d 32 35 36  |=256:height%=256|
000083e0  3a f4 20 53 65 74 20 72  65 73 6f 6c 75 74 69 6f  |:. Set resolutio|
000083f0  6e 0d 1c 34 22 f2 73 65  74 28 77 69 64 74 68 25  |n..4".set(width%|
00008400  2c 68 65 69 67 68 74 25  2c 32 35 36 2c 4d 6f 64  |,height%,256,Mod|
00008410  65 25 29 0d 1c 3e 2f e7  a4 61 6c 6c 6f 63 61 74  |e%)..>/..allocat|
00008420  65 5f 73 74 64 28 77 69  64 74 68 25 2c 77 69 64  |e_std(width%,wid|
00008430  74 68 25 2c 77 69 64 74  68 25 2c 30 29 20 8b 20  |th%,width%,0) . |
00008440  3d a3 0d 1c 48 17 e7 a4  6e 65 77 5f 69 6d 61 67  |=...H...new_imag|
00008450  65 28 30 29 20 8b 20 3d  a3 0d 1c 52 31 f2 67 72  |e(0) . =...R1.gr|
00008460  65 79 70 61 6c 28 49 6e  50 61 6c 25 28 29 2c 38  |eypal(InPal%(),8|
00008470  2c 31 29 3a f4 20 50 61  6c 65 74 74 65 20 69 73  |,1):. Palette is|
00008480  20 32 35 36 20 67 72 65  79 73 0d 1c 5c 43 f2 69  | 256 greys..\C.i|
00008490  6d 61 67 65 5f 69 6e 66  6f 28 22 41 49 4d 22 2c  |mage_info("AIM",|
000084a0  77 69 64 74 68 25 2c 68  65 69 67 68 74 25 2c 31  |width%,height%,1|
000084b0  2c 38 2c 4d 6f 64 65 25  2c 22 22 2c 22 22 2c 46  |,8,Mode%,"","",F|
000084c0  6c 65 6e 25 2c 32 35 36  2a 32 35 36 29 0d 1c 66  |len%,256*256)..f|
000084d0  50 f2 76 61 72 28 22 69  6d 67 78 22 2c 77 69 64  |P.var("imgx",wid|
000084e0  74 68 25 29 3a f2 76 61  72 28 22 69 6d 67 79 22  |th%):.var("imgy"|
000084f0  2c 68 65 69 67 68 74 25  29 3a f2 76 61 72 28 22  |,height%):.var("|
00008500  69 66 70 31 22 2c 30 29  3a e7 a4 75 6e 70 61 63  |ifp1",0):..unpac|
00008510  6b 28 22 41 49 4d 22 29  20 8b 20 3d a3 0d 1c 70  |k("AIM") . =...p|
00008520  06 3d b9 0d 1c 7a 05 20  0d 1c 84 0d dd a4 70 69  |.=...z. ......pi|
00008530  63 5f 53 55 4e 0d 1c 8e  15 f4 20 4d 61 6b 65 73  |c_SUN..... Makes|
00008540  20 53 55 4e 20 69 6d 61  67 65 0d 1c 98 5a 6d 61  | SUN image...Zma|
00008550  67 69 63 25 3d a4 69 77  62 3a e7 6d 61 67 69 63  |gic%=.iwb:.magic|
00008560  25 3c 3e 26 35 39 41 36  36 41 39 35 20 8c 20 f2  |%<>&59A66A95 . .|
00008570  65 72 72 6f 72 28 2d 31  2c 22 54 68 69 73 20 69  |error(-1,"This i|
00008580  73 20 6e 6f 20 73 74 61  6e 64 61 72 64 20 53 55  |s no standard SU|
00008590  4e 20 72 61 73 74 65 72  20 66 69 6c 65 20 21 22  |N raster file !"|
000085a0  29 3a 3d a3 0d 1c a2 3c  77 69 64 74 68 25 3d a4  |):=....<width%=.|
000085b0  69 77 62 3a 68 65 69 67  68 74 25 3d a4 69 77 62  |iwb:height%=.iwb|
000085c0  3a 63 6f 6c 62 69 74 73  25 3d a4 69 77 62 3a f4  |:colbits%=.iwb:.|
000085d0  20 52 65 61 64 20 72 65  73 6f 6c 75 74 69 6f 6e  | Read resolution|
000085e0  0d 1c ac 46 6c 65 6e 67  74 68 25 3d a4 69 77 62  |...Flength%=.iwb|
000085f0  3a 74 79 70 65 25 3d a4  69 77 62 3a 6d 61 70 74  |:type%=.iwb:mapt|
00008600  79 70 65 25 3d a4 69 77  62 3a 6d 61 70 6c 65 6e  |ype%=.iwb:maplen|
00008610  67 74 68 25 3d a4 69 77  62 3a f4 20 45 78 74 72  |gth%=.iwb:. Extr|
00008620  61 20 69 6e 66 6f 0d 1c  b6 4f e7 74 79 70 65 25  |a info...O.type%|
00008630  3e 32 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |>2 . .error(-1,"|
00008640  49 20 63 61 6e 20 6f 6e  6c 79 20 72 65 61 64 20  |I can only read |
00008650  75 6e 63 6f 6d 70 72 65  73 73 65 64 20 6f 72 20  |uncompressed or |
00008660  52 4c 45 20 53 75 6e 20  69 6d 61 67 65 73 20 21  |RLE Sun images !|
00008670  22 29 3a 3d a3 0d 1c c0  2b 63 6f 6c 6f 75 72 73  |"):=....+colours|
00008680  25 3d 32 5e 63 6f 6c 62  69 74 73 25 3a f4 20 4e  |%=2^colbits%:. N|
00008690  75 6d 62 65 72 20 6f 66  20 63 6f 6c 6f 75 72 73  |umber of colours|
000086a0  0d 1c ca 11 c8 8e 20 63  6f 6c 62 69 74 73 25 20  |...... colbits% |
000086b0  ca 0d 1c d4 2c 20 c9 20  31 2c 38 20 3a 20 e7 28  |...., . 1,8 : .(|
000086c0  6d 61 70 74 79 70 65 25  3c 3e 31 29 84 28 6d 61  |maptype%<>1).(ma|
000086d0  70 6c 65 6e 67 74 68 25  3d 30 29 20 8c 0d 1c de  |plength%=0) ....|
000086e0  6d 20 20 20 20 20 20 20  20 20 20 20 20 20 e7 63  |m             .c|
000086f0  6f 6c 62 69 74 73 25 3e  31 20 8c 20 f2 65 72 72  |olbits%>1 . .err|
00008700  6f 72 28 2d 31 2c 22 54  68 69 73 20 53 55 4e 20  |or(-1,"This SUN |
00008710  69 6d 61 67 65 20 66 69  6c 65 20 63 6f 6e 74 61  |image file conta|
00008720  69 6e 73 20 6e 6f 20 70  61 6c 65 74 74 65 20 21  |ins no palette !|
00008730  20 49 20 77 69 6c 6c 20  75 73 65 20 61 20 67 72  | I will use a gr|
00008740  65 79 73 63 61 6c 65 2e  22 29 0d 1c e8 2e 20 20  |eyscale.")....  |
00008750  20 20 20 20 20 20 20 20  20 20 20 f2 67 72 65 79  |           .grey|
00008760  70 61 6c 28 49 6e 50 61  6c 25 28 29 2c 63 6f 6c  |pal(InPal%(),col|
00008770  62 69 74 73 25 2c 31 29  0d 1c f2 73 20 20 20 20  |bits%,1)...s    |
00008780  20 20 20 20 20 20 20 20  cc 20 49 6e 50 61 6c 25  |        . InPal%|
00008790  28 29 3d 30 3a e3 20 69  25 3d 31 20 b8 20 33 3a  |()=0:. i%=1 . 3:|
000087a0  e3 20 63 25 3d 31 20 b8  20 6d 61 70 6c 65 6e 67  |. c%=1 . mapleng|
000087b0  74 68 25 81 33 3a 49 6e  50 61 6c 25 28 63 25 29  |th%.3:InPal%(c%)|
000087c0  3d 28 49 6e 50 61 6c 25  28 63 25 29 3c 3c 38 29  |=(InPal%(c%)<<8)|
000087d0  2b a4 69 62 3a ed 3a ed  3a 49 6e 50 61 6c 25 28  |+.ib:.:.:InPal%(|
000087e0  30 29 3d 63 6f 6c 62 69  74 73 25 0d 1c fc 11 20  |0)=colbits%.... |
000087f0  20 20 20 20 20 20 20 20  20 20 20 cd 0d 1d 06 4c  |           ....L|
00008800  20 7f 20 3a 20 f2 65 72  72 6f 72 28 2d 31 2c 22  | . : .error(-1,"|
00008810  49 20 63 61 6e 20 6f 6e  6c 79 20 72 65 61 64 20  |I can only read |
00008820  31 2d 20 61 6e 64 20 38  2d 62 69 74 20 70 65 72  |1- and 8-bit per|
00008830  20 70 69 78 65 6c 20 53  75 6e 20 69 6d 61 67 65  | pixel Sun image|
00008840  73 20 21 22 29 3a 3d a3  0d 1d 10 05 cb 0d 1d 1a  |s !"):=.........|
00008850  27 f2 73 65 74 28 77 69  64 74 68 25 2c 68 65 69  |'.set(width%,hei|
00008860  67 68 74 25 2c 63 6f 6c  6f 75 72 73 25 2c 4d 6f  |ght%,colours%,Mo|
00008870  64 65 25 29 0d 1d 24 3e  e7 a4 61 6c 6c 6f 63 61  |de%)..$>..alloca|
00008880  74 65 5f 73 74 64 28 77  69 64 74 68 25 2c 28 77  |te_std(width%,(w|
00008890  69 64 74 68 25 2a 63 6f  6c 62 69 74 73 25 2b 37  |idth%*colbits%+7|
000088a0  29 81 38 2c 77 69 64 74  68 25 2c 30 29 20 8b 20  |).8,width%,0) . |
000088b0  3d a3 0d 1d 2e 17 e7 a4  6e 65 77 5f 69 6d 61 67  |=.......new_imag|
000088c0  65 28 30 29 20 8b 20 3d  a3 0d 1d 38 2e e7 74 79  |e(0) . =...8..ty|
000088d0  70 65 25 3d 32 20 8c 20  63 6f 6d 70 72 24 3d 22  |pe%=2 . compr$="|
000088e0  52 75 6e 20 6c 65 6e 67  74 68 22 20 8b 20 63 6f  |Run length" . co|
000088f0  6d 70 72 24 3d 22 22 0d  1d 42 70 f2 69 6d 61 67  |mpr$=""..Bp.imag|
00008900  65 5f 69 6e 66 6f 28 22  53 55 4e 22 2c 77 69 64  |e_info("SUN",wid|
00008910  74 68 25 2c 68 65 69 67  68 74 25 2c 30 2c 63 6f  |th%,height%,0,co|
00008920  6c 62 69 74 73 25 2c 4d  6f 64 65 25 2c 63 6f 6d  |lbits%,Mode%,com|
00008930  70 72 24 2c 22 22 2c 46  6c 65 6e 25 2d 33 32 2d  |pr$,"",Flen%-32-|
00008940  6d 61 70 6c 65 6e 67 74  68 25 2c 28 77 69 64 74  |maplength%,(widt|
00008950  68 25 2a 68 65 69 67 68  74 25 2a 63 6f 6c 62 69  |h%*height%*colbi|
00008960  74 73 25 29 81 38 29 0d  1d 4c 6f f2 76 61 72 28  |ts%).8)..Lo.var(|
00008970  22 69 66 70 31 22 2c 33  32 2b 6d 61 70 6c 65 6e  |"ifp1",32+maplen|
00008980  67 74 68 25 29 3a f2 76  61 72 28 22 69 6d 67 78  |gth%):.var("imgx|
00008990  22 2c 77 69 64 74 68 25  29 3a f2 76 61 72 28 22  |",width%):.var("|
000089a0  69 6d 67 79 22 2c 68 65  69 67 68 74 25 29 3a f2  |imgy",height%):.|
000089b0  76 61 72 28 22 63 6f 6d  70 22 2c 74 79 70 65 25  |var("comp",type%|
000089c0  29 3a e7 a4 75 6e 70 61  63 6b 28 22 53 55 4e 22  |):..unpack("SUN"|
000089d0  29 20 8b 20 3d a3 0d 1d  56 06 3d b9 0d 1d 60 05  |) . =...V.=...`.|
000089e0  20 0d 1d 6a 0d dd a4 70  69 63 5f 50 43 58 0d 1d  | ..j...pic_PCX..|
000089f0  74 15 f4 20 4d 61 6b 65  73 20 50 43 58 20 69 6d  |t.. Makes PCX im|
00008a00  61 67 65 0d 1d 7e 2e 6d  61 6e 25 3d a4 69 62 3a  |age..~.man%=.ib:|
00008a10  f4 20 4d 61 6e 75 66 61  63 74 75 72 65 20 63 6f  |. Manufacture co|
00008a20  64 65 20 28 73 68 6f 75  6c 64 20 62 65 20 31 30  |de (should be 10|
00008a30  29 0d 1d 88 3e e7 6d 61  6e 25 3c 3e 31 30 20 8c  |)...>.man%<>10 .|
00008a40  20 f2 65 72 72 6f 72 28  2d 31 2c 22 54 68 69 73  | .error(-1,"This|
00008a50  20 69 73 20 6e 6f 20 73  74 61 6e 64 61 72 64 20  | is no standard |
00008a60  50 43 58 20 66 69 6c 65  20 21 22 29 3a 3d a3 0d  |PCX file !"):=..|
00008a70  1d 92 29 76 65 72 73 69  6f 6e 25 3d a4 69 62 3a  |..)version%=.ib:|
00008a80  f4 20 56 65 72 73 69 6f  6e 20 63 6f 64 65 20 28  |. Version code (|
00008a90  30 2f 32 2f 33 2f 35 29  0d 1d 9c 44 65 6e 63 6f  |0/2/3/5)...Denco|
00008aa0  64 69 6e 67 25 3d a4 69  62 3a f4 20 45 6e 63 6f  |ding%=.ib:. Enco|
00008ab0  64 69 6e 67 20 63 6f 64  65 20 28 30 2d 6e 6f 6e  |ding code (0-non|
00008ac0  65 2c 20 31 2d 50 43 58  20 72 75 6e 6c 65 6e 67  |e, 1-PCX runleng|
00008ad0  74 68 20 65 6e 63 6f 64  69 6e 67 29 0d 1d a6 30  |th encoding)...0|
00008ae0  62 69 74 73 25 3d a4 69  62 3a f4 20 42 69 74 73  |bits%=.ib:. Bits|
00008af0  20 70 65 72 20 27 70 69  78 65 6c 27 20 28 31 2d  | per 'pixel' (1-|
00008b00  45 47 41 2c 20 38 2d 4d  43 47 41 29 0d 1d b0 48  |EGA, 8-MCGA)...H|
00008b10  77 78 6d 69 6e 25 3d a4  69 64 6c 3a 77 79 6d 69  |wxmin%=.idl:wymi|
00008b20  6e 25 3d a4 69 64 6c 3a  77 78 6d 61 78 25 3d a4  |n%=.idl:wxmax%=.|
00008b30  69 64 6c 3a 77 79 6d 61  78 25 3d a4 69 64 6c 3a  |idl:wymax%=.idl:|
00008b40  f4 20 57 69 6e 64 6f 77  20 63 6f 6f 72 64 69 6e  |. Window coordin|
00008b50  61 74 65 73 0d 1d ba 49  77 69 64 74 68 25 3d 77  |ates...Iwidth%=w|
00008b60  78 6d 61 78 25 2d 77 78  6d 69 6e 25 2b 31 3a 68  |xmax%-wxmin%+1:h|
00008b70  65 69 67 68 74 25 3d 77  79 6d 61 78 25 2d 77 79  |eight%=wymax%-wy|
00008b80  6d 69 6e 25 2b 31 3a f4  20 52 65 73 6f 6c 75 74  |min%+1:. Resolut|
00008b90  69 6f 6e 20 69 6e 20 70  69 78 65 6c 73 0d 1d c4  |ion in pixels...|
00008ba0  22 f2 69 73 6b 69 70 28  46 31 25 2c 34 29 3a f4  |".iskip(F1%,4):.|
00008bb0  20 53 6b 69 70 20 48 72  65 73 2f 56 72 65 73 0d  | Skip Hres/Vres.|
00008bc0  1d ce 1e 49 6e 50 61 6c  25 28 29 3d 30 3a f4 20  |...InPal%()=0:. |
00008bd0  43 6c 65 61 72 20 70 61  6c 65 74 74 65 0d 1d d8  |Clear palette...|
00008be0  42 f2 72 65 61 64 32 34  70 61 6c 28 46 31 25 2c  |B.read24pal(F1%,|
00008bf0  49 6e 50 61 6c 25 28 29  2c 31 36 2c 30 2c 31 2c  |InPal%(),16,0,1,|
00008c00  32 2c 33 29 3a f4 20 52  65 61 64 20 63 6f 6c 6f  |2,3):. Read colo|
00008c10  75 72 6d 61 70 20 69 6e  20 68 65 61 64 65 72 0d  |urmap in header.|
00008c20  1d e2 26 f2 69 73 6b 69  70 28 46 31 25 2c 31 29  |..&.iskip(F1%,1)|
00008c30  3a f4 20 53 6b 69 70 20  72 65 73 65 72 76 65 64  |:. Skip reserved|
00008c40  20 62 79 74 65 0d 1d ec  1e 70 6c 61 6e 65 73 25  | byte....planes%|
00008c50  3d a4 69 62 3a f4 20 43  6f 6c 6f 75 72 70 6c 61  |=.ib:. Colourpla|
00008c60  6e 65 73 0d 1d f6 22 6c  69 6e 65 6c 65 6e 25 3d  |nes..."linelen%=|
00008c70  a4 69 64 6c 3a f4 20 42  79 74 65 73 20 70 65 72  |.idl:. Bytes per|
00008c80  20 6c 69 6e 65 0d 1e 00  92 f4 20 72 6f 75 6e 64  | line..... round|
00008c90  6c 65 6e 25 3d 28 28 77  69 64 74 68 25 2a 62 69  |len%=((width%*bi|
00008ca0  74 73 25 2b 37 29 44 49  56 38 29 3a 49 46 72 6f  |ts%+7)DIV8):IFro|
00008cb0  75 6e 64 6c 65 6e 25 3c  3e 6c 69 6e 65 6c 65 6e  |undlen%<>linelen|
00008cc0  25 20 54 48 45 4e 20 77  69 64 74 68 25 3d 6c 69  |% THEN width%=li|
00008cd0  6e 65 6c 65 6e 25 2a 38  2f 62 69 74 73 25 3a 52  |nelen%*8/bits%:R|
00008ce0  45 4d 20 43 6f 72 72 65  63 74 20 77 69 64 74 68  |EM Correct width|
00008cf0  20 69 66 20 77 69 6e 64  6f 77 20 61 6e 64 20 6c  | if window and l|
00008d00  69 6e 65 6c 65 6e 67 74  68 20 64 61 74 61 20 63  |inelength data c|
00008d10  6f 6e 66 6c 69 63 74 0d  1e 0a 2b 70 69 78 62 69  |onflict...+pixbi|
00008d20  74 73 25 3d 62 69 74 73  25 2a 70 6c 61 6e 65 73  |ts%=bits%*planes|
00008d30  25 3a f4 20 42 69 74 73  20 70 65 72 20 70 69 78  |%:. Bits per pix|
00008d40  65 6c 0d 1e 14 89 e7 28  70 69 78 62 69 74 73 25  |el.....(pixbits%|
00008d50  3d 31 29 20 84 20 28 70  69 78 62 69 74 73 25 3d  |=1) . (pixbits%=|
00008d60  32 29 20 84 20 28 70 69  78 62 69 74 73 25 3d 34  |2) . (pixbits%=4|
00008d70  29 20 84 20 28 70 69 78  62 69 74 73 25 3d 38 29  |) . (pixbits%=8)|
00008d80  20 8b 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
00008d90  63 61 6e 6e 6f 74 20 68  61 6e 64 6c 65 20 22 2b  |cannot handle "+|
00008da0  c3 28 32 5e 70 69 78 62  69 74 73 25 29 2b 22 20  |.(2^pixbits%)+" |
00008db0  63 6f 6c 6f 75 72 20 45  47 41 20 50 43 58 20 66  |colour EGA PCX f|
00008dc0  69 6c 65 73 20 21 22 29  3a 3d a3 0d 1e 1e 2b 63  |iles !"):=....+c|
00008dd0  6f 6c 6f 75 72 73 25 3d  32 5e 70 69 78 62 69 74  |olours%=2^pixbit|
00008de0  73 25 3a f4 20 4e 75 6d  62 65 72 20 6f 66 20 63  |s%:. Number of c|
00008df0  6f 6c 6f 75 72 73 0d 1e  28 41 f2 69 70 74 72 28  |olours..(A.iptr(|
00008e00  46 31 25 2c a4 69 6c 65  6e 28 46 31 25 29 2d 37  |F1%,.ilen(F1%)-7|
00008e10  36 39 29 3a 63 6f 64 65  25 3d a4 69 62 3a f4 20  |69):code%=.ib:. |
00008e20  54 72 79 20 65 6e 64 2d  37 36 39 20 66 6f 72 20  |Try end-769 for |
00008e30  70 61 6c 65 74 74 65 0d  1e 32 10 e7 63 6f 64 65  |palette..2..code|
00008e40  25 3c 3e 31 32 20 8c 0d  1e 3c 5c 20 e7 a4 61 6c  |%<>12 ...<\ ..al|
00008e50  6c 6f 63 61 74 65 28 42  5f 69 6e 66 69 6c 65 25  |locate(B_infile%|
00008e60  2c 31 30 32 34 29 20 8b  20 f2 65 72 72 6f 72 28  |,1024) . .error(|
00008e70  2d 31 2c 22 49 20 68 61  76 65 20 6e 6f 20 72 6f  |-1,"I have no ro|
00008e80  6f 6d 20 66 6f 72 20 74  68 65 20 69 6e 70 75 74  |om for the input|
00008e90  20 66 69 6c 65 20 62 75  66 66 65 72 20 21 22 29  | file buffer !")|
00008ea0  3a 3d a3 0d 1e 46 7f 20  f2 76 61 72 28 22 69 66  |:=...F. .var("if|
00008eb0  70 31 22 2c 31 32 38 29  3a f2 76 61 72 28 22 74  |p1",128):.var("t|
00008ec0  6f 74 6c 22 2c 6c 69 6e  65 6c 65 6e 25 2a 70 6c  |otl",linelen%*pl|
00008ed0  61 6e 65 73 25 2a 68 65  69 67 68 74 25 29 3a f2  |anes%*height%):.|
00008ee0  76 61 72 28 22 63 6f 6d  70 22 2c 65 6e 63 6f 64  |var("comp",encod|
00008ef0  69 6e 67 25 29 3a f2 75  6e 70 61 63 6b 5f 70 68  |ing%):.unpack_ph|
00008f00  61 73 65 28 22 50 43 58  22 2c 32 29 3a f4 20 47  |ase("PCX",2):. G|
00008f10  65 74 20 28 70 61 63 6b  65 64 29 20 6c 65 6e 67  |et (packed) leng|
00008f20  74 68 0d 1e 50 44 20 6c  65 6e 25 3d a4 76 61 72  |th..PD len%=.var|
00008f30  28 22 70 61 6b 6c 22 29  3a f2 69 70 74 72 28 46  |("pakl"):.iptr(F|
00008f40  31 25 2c 31 32 38 2b 6c  65 6e 25 29 3a f4 20 47  |1%,128+len%):. G|
00008f50  6f 20 74 6f 20 65 6e 64  20 6f 66 20 69 6d 61 67  |o to end of imag|
00008f60  65 20 64 61 74 61 0d 1e  5a 3d 20 63 6f 64 65 25  |e data..Z= code%|
00008f70  3d a4 69 62 3a f4 20 47  65 74 20 63 6f 64 65 20  |=.ib:. Get code |
00008f80  28 31 32 20 69 6e 64 69  63 61 74 65 73 20 70 61  |(12 indicates pa|
00008f90  6c 65 74 74 65 20 69 6e  66 6f 20 66 6f 6c 6c 6f  |lette info follo|
00008fa0  77 73 29 0d 1e 64 05 cd  0d 1e 6e 39 e7 63 6f 64  |ws)..d....n9.cod|
00008fb0  65 25 3d 31 32 20 8c 20  f2 72 65 61 64 32 34 70  |e%=12 . .read24p|
00008fc0  61 6c 28 46 31 25 2c 49  6e 50 61 6c 25 28 29 2c  |al(F1%,InPal%(),|
00008fd0  63 6f 6c 6f 75 72 73 25  2c 30 2c 31 2c 32 2c 33  |colours%,0,1,2,3|
00008fe0  29 0d 1e 78 2e 67 72 65  79 3d a3 3a f4 20 46 6c  |)..x.grey=.:. Fl|
00008ff0  61 67 20 74 6f 20 69 6e  64 69 63 61 74 65 20 66  |ag to indicate f|
00009000  6f 72 63 65 64 20 67 72  65 79 73 63 61 6c 65 0d  |orced greyscale.|
00009010  1e 82 80 e7 62 69 74 73  25 3d 38 20 8c 20 e7 63  |....bits%=8 . .c|
00009020  6f 64 65 25 3c 3e 31 32  20 8c 20 f2 65 72 72 6f  |ode%<>12 . .erro|
00009030  72 28 2d 31 2c 22 49 20  63 61 6e 6e 6f 74 20 66  |r(-1,"I cannot f|
00009040  69 6e 64 20 74 68 65 20  70 61 6c 65 74 74 65 20  |ind the palette |
00009050  69 6e 20 74 68 69 73 20  32 35 36 2d 63 6f 6c 6f  |in this 256-colo|
00009060  75 72 20 50 43 58 20 69  6d 61 67 65 20 21 20 49  |ur PCX image ! I|
00009070  20 77 69 6c 6c 20 75 73  65 20 61 20 67 72 65 79  | will use a grey|
00009080  73 63 61 6c 65 2e 22 29  3a 67 72 65 79 3d b9 0d  |scale."):grey=..|
00009090  1e 8c 7d e7 ac 67 72 65  79 20 8c 20 e7 c6 8e 28  |..}..grey . ...(|
000090a0  49 6e 50 61 6c 25 28 29  29 3d 30 20 8c 20 f2 65  |InPal%())=0 . .e|
000090b0  72 72 6f 72 28 2d 31 2c  22 49 20 63 61 6e 6e 6f  |rror(-1,"I canno|
000090c0  74 20 66 69 6e 64 20 61  20 64 65 63 65 6e 74 20  |t find a decent |
000090d0  70 61 6c 65 74 74 65 20  69 6e 20 74 68 69 73 20  |palette in this |
000090e0  50 43 58 20 69 6d 61 67  65 20 21 20 49 20 77 69  |PCX image ! I wi|
000090f0  6c 6c 20 75 73 65 20 61  20 67 72 65 79 73 63 61  |ll use a greysca|
00009100  6c 65 2e 22 29 3a 67 72  65 79 3d b9 0d 1e 96 3e  |le."):grey=....>|
00009110  e7 67 72 65 79 20 8c 20  f2 67 72 65 79 70 61 6c  |.grey . .greypal|
00009120  28 49 6e 50 61 6c 25 28  29 2c 70 69 78 62 69 74  |(InPal%(),pixbit|
00009130  73 25 2c 31 29 20 8b 20  49 6e 50 61 6c 25 28 30  |s%,1) . InPal%(0|
00009140  29 3d 70 69 78 62 69 74  73 25 0d 1e a0 79 e7 28  |)=pixbits%...y.(|
00009150  70 69 78 62 69 74 73 25  3d 31 29 84 28 70 69 78  |pixbits%=1).(pix|
00009160  62 69 74 73 25 3d 38 29  20 8c 20 73 69 7a 65 25  |bits%=8) . size%|
00009170  3d 30 20 8b 20 73 69 7a  65 25 3d 28 77 69 64 74  |=0 . size%=(widt|
00009180  68 25 2a 70 69 78 62 69  74 73 25 2b 37 29 81 38  |h%*pixbits%+7).8|
00009190  3a f4 20 49 6e 74 65 72  6d 65 64 69 61 74 65 20  |:. Intermediate |
000091a0  70 69 78 65 6c 20 64 61  74 61 20 62 75 66 66 65  |pixel data buffe|
000091b0  72 20 66 6f 72 20 27 70  6c 61 6e 65 64 27 20 64  |r for 'planed' d|
000091c0  61 74 61 0d 1e aa 27 f2  73 65 74 28 77 69 64 74  |ata...'.set(widt|
000091d0  68 25 2c 68 65 69 67 68  74 25 2c 63 6f 6c 6f 75  |h%,height%,colou|
000091e0  72 73 25 2c 4d 6f 64 65  25 29 0d 1e b4 42 e7 a4  |rs%,Mode%)...B..|
000091f0  61 6c 6c 6f 63 61 74 65  5f 73 74 64 28 77 69 64  |allocate_std(wid|
00009200  74 68 25 2c 28 77 69 64  74 68 25 2a 70 69 78 62  |th%,(width%*pixb|
00009210  69 74 73 25 2b 37 29 81  38 2c 77 69 64 74 68 25  |its%+7).8,width%|
00009220  2c 73 69 7a 65 25 29 20  8b 20 3d a3 0d 1e be 17  |,size%) . =.....|
00009230  e7 a4 6e 65 77 5f 69 6d  61 67 65 28 30 29 20 8b  |..new_image(0) .|
00009240  20 3d a3 0d 1e c8 32 e7  65 6e 63 6f 64 69 6e 67  | =....2.encoding|
00009250  25 3d 31 20 8c 20 63 6f  6d 70 72 24 3d 22 52 75  |%=1 . compr$="Ru|
00009260  6e 20 6c 65 6e 67 74 68  22 20 8b 20 63 6f 6d 70  |n length" . comp|
00009270  72 24 3d 22 22 0d 1e d2  66 f2 69 6d 61 67 65 5f  |r$=""...f.image_|
00009280  69 6e 66 6f 28 22 50 43  58 22 2c 77 69 64 74 68  |info("PCX",width|
00009290  25 2c 68 65 69 67 68 74  25 2c 30 2c 70 69 78 62  |%,height%,0,pixb|
000092a0  69 74 73 25 2c 4d 6f 64  65 25 2c 63 6f 6d 70 72  |its%,Mode%,compr|
000092b0  24 2c 22 22 2c 46 6c 65  6e 25 2d 31 32 38 2c 28  |$,"",Flen%-128,(|
000092c0  77 69 64 74 68 25 2a 68  65 69 67 68 74 25 2a 70  |width%*height%*p|
000092d0  69 78 62 69 74 73 25 29  81 38 29 0d 1e dc 7f f2  |ixbits%).8).....|
000092e0  76 61 72 28 22 69 66 70  31 22 2c 31 32 38 29 3a  |var("ifp1",128):|
000092f0  f2 76 61 72 28 22 69 6d  67 78 22 2c 77 69 64 74  |.var("imgx",widt|
00009300  68 25 29 3a f2 76 61 72  28 22 69 6d 67 79 22 2c  |h%):.var("imgy",|
00009310  68 65 69 67 68 74 25 29  3a f2 76 61 72 28 22 63  |height%):.var("c|
00009320  6f 6d 70 22 2c 65 6e 63  6f 64 69 6e 67 25 29 3a  |omp",encoding%):|
00009330  f2 76 61 72 28 22 6c 69  6e 65 22 2c 6c 69 6e 65  |.var("line",line|
00009340  6c 65 6e 25 29 3a e7 a4  75 6e 70 61 63 6b 28 22  |len%):..unpack("|
00009350  50 43 58 22 29 20 8b 20  3d a3 0d 1e e6 06 3d b9  |PCX") . =.....=.|
00009360  0d 1e f0 05 20 0d 1e fa  0e dd a4 70 69 63 5f 54  |.... ......pic_T|
00009370  49 46 46 0d 1f 04 16 f4  20 4d 61 6b 65 73 20 54  |IFF..... Makes T|
00009380  49 46 46 20 69 6d 61 67  65 0d 1f 0e 28 68 65 61  |IFF image...(hea|
00009390  64 62 79 74 65 73 25 3d  32 3a f4 20 43 6f 75 6e  |dbytes%=2:. Coun|
000093a0  74 20 62 79 74 65 73 20  69 6e 20 68 65 61 64 65  |t bytes in heade|
000093b0  72 0d 1f 18 2d 69 64 24  3d a4 69 73 74 72 69 6e  |r...-id$=.istrin|
000093c0  67 28 46 31 25 2c 32 29  3a f4 20 54 49 46 46 20  |g(F1%,2):. TIFF |
000093d0  69 64 65 6e 74 69 66 69  63 61 74 69 6f 6e 0d 1f  |identification..|
000093e0  22 0c c8 8e 20 69 64 24  20 ca 0d 1f 2c 35 20 c9  |"... id$ ...,5 .|
000093f0  20 22 49 49 22 20 3a 20  54 74 79 70 65 25 3d 30  | "II" : Ttype%=0|
00009400  3a f4 20 53 65 74 20 6c  6f 77 2d 74 6f 2d 68 69  |:. Set low-to-hi|
00009410  67 68 20 74 79 70 65 20  6f 66 20 64 61 74 61 0d  |gh type of data.|
00009420  1f 36 35 20 c9 20 22 4d  4d 22 20 3a 20 54 74 79  |.65 . "MM" : Tty|
00009430  70 65 25 3d 31 3a f4 20  53 65 74 20 68 69 67 68  |pe%=1:. Set high|
00009440  2d 74 6f 2d 6c 6f 77 20  74 79 70 65 20 6f 66 20  |-to-low type of |
00009450  64 61 74 61 0d 1f 40 32  20 7f 20 3a 20 f2 65 72  |data..@2 . : .er|
00009460  72 6f 72 28 2d 31 2c 22  54 68 69 73 20 69 73 20  |ror(-1,"This is |
00009470  6e 6f 74 20 61 20 54 49  46 46 20 66 69 6c 65 20  |not a TIFF file |
00009480  21 22 29 3a 3d a3 0d 1f  4a 05 cb 0d 1f 54 2b 76  |!"):=...J....T+v|
00009490  65 72 73 69 6f 6e 25 3d  a4 74 69 66 66 28 33 29  |ersion%=.tiff(3)|
000094a0  3a f4 20 54 49 46 46 20  76 65 72 73 69 6f 6e 20  |:. TIFF version |
000094b0  6e 75 6d 62 65 72 0d 1f  5e 50 e7 76 65 72 73 69  |number..^P.versi|
000094c0  6f 6e 25 3c 3e 34 32 20  8c 20 f2 65 72 72 6f 72  |on%<>42 . .error|
000094d0  28 2d 31 2c 22 49 20 63  61 6e 6e 6f 74 20 68 61  |(-1,"I cannot ha|
000094e0  6e 64 6c 65 20 74 68 69  73 20 54 49 46 46 20 76  |ndle this TIFF v|
000094f0  65 72 73 69 6f 6e 27 73  20 69 6d 61 67 65 73 20  |ersion's images |
00009500  21 22 29 3a 3d a3 0d 1f  68 2b 6f 66 66 46 49 46  |!"):=...h+offFIF|
00009510  44 25 3d a4 74 69 66 66  28 34 29 3a f4 20 4f 66  |D%=.tiff(4):. Of|
00009520  66 73 65 74 20 74 6f 20  66 69 72 73 74 20 49 46  |fset to first IF|
00009530  44 0d 1f 72 29 f2 69 70  74 72 28 46 31 25 2c 6f  |D..r).iptr(F1%,o|
00009540  66 66 46 49 46 44 25 29  3a f4 20 47 6f 20 74 6f  |ffFIFD%):. Go to|
00009550  20 66 69 72 73 74 20 49  46 44 0d 1f 7c 2d 65 6e  | first IFD..|-en|
00009560  74 72 69 65 73 25 3d a4  74 69 66 66 28 33 29 3a  |tries%=.tiff(3):|
00009570  f4 20 4e 75 6d 62 65 72  20 6f 66 20 49 46 44 20  |. Number of IFD |
00009580  65 6e 74 72 69 65 73 0d  1f 86 25 49 6e 50 61 6c  |entries...%InPal|
00009590  25 28 29 3d 30 3a 70 61  6c 3d a3 3a f4 20 4e 6f  |%()=0:pal=.:. No|
000095a0  20 70 61 6c 65 74 74 65  20 79 65 74 0d 1f 90 71  | palette yet...q|
000095b0  72 6f 77 73 70 65 72 73  74 72 69 70 25 3d 2d 31  |rowsperstrip%=-1|
000095c0  3a 62 69 74 73 25 3d 31  3a 63 6f 6d 70 72 65 73  |:bits%=1:compres|
000095d0  73 69 6f 6e 25 3d 31 3a  70 6c 61 6e 61 72 25 3d  |sion%=1:planar%=|
000095e0  31 3a 66 69 6c 6c 6f 72  64 65 72 25 3d 31 3a 67  |1:fillorder%=1:g|
000095f0  72 65 79 75 6e 69 74 25  3d 33 3a 70 69 78 73 61  |reyunit%=3:pixsa|
00009600  6d 70 6c 65 73 25 3d 31  3a 73 6f 66 74 77 24 3d  |mples%=1:softw$=|
00009610  22 22 3a f4 20 44 65 66  61 75 6c 74 73 0d 1f 9a  |"":. Defaults...|
00009620  15 e3 20 65 25 3d 31 20  b8 20 65 6e 74 72 69 65  |.. e%=1 . entrie|
00009630  73 25 0d 1f a4 40 74 61  67 25 3d a4 74 69 66 66  |s%...@tag%=.tiff|
00009640  28 33 29 3a 74 79 70 65  25 3d a4 74 69 66 66 28  |(3):type%=.tiff(|
00009650  33 29 3a 6c 65 6e 67 74  68 25 3d a4 74 69 66 66  |3):length%=.tiff|
00009660  28 34 29 3a f4 20 54 61  67 20 61 6e 64 20 69 6e  |(4):. Tag and in|
00009670  66 6f 0d 1f ae 95 e7 6c  65 6e 67 74 68 25 3e 31  |fo.....length%>1|
00009680  20 8c 20 76 61 6c 75 65  25 3d a4 74 69 66 66 28  | . value%=.tiff(|
00009690  34 29 20 8b 20 e7 74 79  70 65 25 3d 31 20 8c 20  |4) . .type%=1 . |
000096a0  76 61 6c 75 65 25 3d a4  74 69 66 66 28 31 29 3a  |value%=.tiff(1):|
000096b0  f2 69 73 6b 69 70 28 46  31 25 2c 33 29 20 8b 20  |.iskip(F1%,3) . |
000096c0  e7 74 79 70 65 25 3d 33  20 8c 20 76 61 6c 75 65  |.type%=3 . value|
000096d0  25 3d a4 74 69 66 66 28  33 29 3a f2 69 73 6b 69  |%=.tiff(3):.iski|
000096e0  70 28 46 31 25 2c 32 29  20 8b 20 76 61 6c 75 65  |p(F1%,2) . value|
000096f0  25 3d a4 74 69 66 66 28  34 29 3a f4 20 52 65 61  |%=.tiff(4):. Rea|
00009700  64 20 76 61 6c 75 65 0d  1f b8 38 63 70 74 72 25  |d value...8cptr%|
00009710  3d a4 69 70 74 72 28 46  31 25 29 3a f4 20 52 65  |=.iptr(F1%):. Re|
00009720  6d 65 6d 62 65 72 20 63  75 72 72 65 6e 74 20 70  |member current p|
00009730  6f 73 69 74 69 6f 6e 20  69 6e 20 66 69 6c 65 0d  |osition in file.|
00009740  1f c2 0d c8 8e 20 74 61  67 25 20 ca 0d 1f cc 1a  |..... tag% .....|
00009750  20 c9 20 32 35 36 20 3a  20 77 69 64 74 68 25 3d  | . 256 : width%=|
00009760  76 61 6c 75 65 25 0d 1f  d6 1b 20 c9 20 32 35 37  |value%.... . 257|
00009770  20 3a 20 68 65 69 67 68  74 25 3d 76 61 6c 75 65  | : height%=value|
00009780  25 0d 1f e0 19 20 c9 20  32 35 38 20 3a 20 e7 6c  |%.... . 258 : .l|
00009790  65 6e 67 74 68 25 3d 31  20 8c 0d 1f ea 1d 20 20  |ength%=1 .....  |
000097a0  20 20 20 20 20 20 20 20  20 20 20 62 69 74 73 25  |           bits%|
000097b0  3d 76 61 6c 75 65 25 0d  1f f4 6e 20 20 20 20 20  |=value%...n     |
000097c0  20 20 20 20 20 20 20 cc  20 f2 69 70 74 72 28 46  |       . .iptr(F|
000097d0  31 25 2c 76 61 6c 75 65  25 29 3a 70 25 3d a4 74  |1%,value%):p%=.t|
000097e0  69 66 66 28 74 79 70 65  25 29 3a 73 25 3d 32 3a  |iff(type%):s%=2:|
000097f0  6f 6b 3d b9 3a c8 95 20  73 25 3c 3d 6c 65 6e 67  |ok=.:.. s%<=leng|
00009800  74 68 25 3a 6f 6b 3d 6f  6b 20 80 20 28 a4 74 69  |th%:ok=ok . (.ti|
00009810  66 66 28 74 79 70 65 25  29 3d 70 25 29 3a 73 25  |ff(type%)=p%):s%|
00009820  2b 3d 31 3a ce 0d 1f fe  5c 20 20 20 20 20 20 20  |+=1:....\       |
00009830  20 20 20 20 20 20 e7 ac  6f 6b 20 8c 20 f2 65 72  |      ..ok . .er|
00009840  72 6f 72 28 2d 31 2c 22  49 20 63 61 6e 6e 6f 74  |ror(-1,"I cannot|
00009850  20 68 61 6e 64 6c 65 20  75 6e 65 71 75 61 6c 20  | handle unequal |
00009860  62 69 74 73 20 70 65 72  20 73 61 6d 70 6c 65 20  |bits per sample |
00009870  70 6c 61 6e 65 20 54 49  46 46 20 21 22 29 3a 3d  |plane TIFF !"):=|
00009880  a3 0d 20 08 32 20 20 20  20 20 20 20 20 20 20 20  |.. .2           |
00009890  20 20 f2 69 70 74 72 28  46 31 25 2c 63 70 74 72  |  .iptr(F1%,cptr|
000098a0  25 29 3a 62 69 74 73 25  3d 70 25 2a 6c 65 6e 67  |%):bits%=p%*leng|
000098b0  74 68 25 0d 20 12 11 20  20 20 20 20 20 20 20 20  |th%. ..         |
000098c0  20 20 20 cd 0d 20 1c 20  20 c9 20 32 35 39 20 3a  |   .. .  . 259 :|
000098d0  20 63 6f 6d 70 72 65 73  73 69 6f 6e 25 3d 76 61  | compression%=va|
000098e0  6c 75 65 25 0d 20 26 20  20 c9 20 32 36 32 20 3a  |lue%. &  . 262 :|
000098f0  20 70 68 6f 74 6f 6d 65  74 72 69 63 25 3d 76 61  | photometric%=va|
00009900  6c 75 65 25 0d 20 30 1e  20 c9 20 32 36 36 20 3a  |lue%. 0. . 266 :|
00009910  20 66 69 6c 6c 6f 72 64  65 72 25 3d 76 61 6c 75  | fillorder%=valu|
00009920  65 25 0d 20 3a 6c 20 c9  20 32 37 33 20 3a 20 e7  |e%. :l . 273 : .|
00009930  a4 61 6c 6c 6f 63 61 74  65 28 42 5f 73 74 72 6f  |.allocate(B_stro|
00009940  66 66 25 2c 34 2b 6c 65  6e 67 74 68 25 2a 34 29  |ff%,4+length%*4)|
00009950  20 8b 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
00009960  68 61 76 65 20 6e 6f 20  72 6f 6f 6d 20 66 6f 72  |have no room for|
00009970  20 74 68 65 20 54 49 46  46 20 73 74 72 69 70 20  | the TIFF strip |
00009980  6f 66 66 73 65 74 73 20  21 22 29 3a 3d a3 0d 20  |offsets !"):=.. |
00009990  44 b7 20 20 20 20 20 20  20 20 20 20 20 20 73 74  |D.            st|
000099a0  72 6f 66 66 25 3d 42 75  66 66 65 72 25 28 42 5f  |roff%=Buffer%(B_|
000099b0  73 74 72 6f 66 66 25 2c  30 29 3a 21 73 74 72 6f  |stroff%,0):!stro|
000099c0  66 66 25 3d 6c 65 6e 67  74 68 25 3a e7 6c 65 6e  |ff%=length%:.len|
000099d0  67 74 68 25 3d 31 20 8c  20 73 74 72 6f 66 66 25  |gth%=1 . stroff%|
000099e0  21 34 3d 76 61 6c 75 65  25 20 8b 20 f2 69 70 74  |!4=value% . .ipt|
000099f0  72 28 46 31 25 2c 76 61  6c 75 65 25 29 3a 70 25  |r(F1%,value%):p%|
00009a00  3d 73 74 72 6f 66 66 25  2b 34 3a e3 20 73 25 3d  |=stroff%+4:. s%=|
00009a10  31 20 b8 20 6c 65 6e 67  74 68 25 3a 21 70 25 3d  |1 . length%:!p%=|
00009a20  a4 74 69 66 66 28 74 79  70 65 25 29 3a 70 25 2b  |.tiff(type%):p%+|
00009a30  3d 34 3a ed 3a f2 69 70  74 72 28 46 31 25 2c 63  |=4:.:.iptr(F1%,c|
00009a40  70 74 72 25 29 0d 20 4e  1f 20 c9 20 32 37 37 20  |ptr%). N. . 277 |
00009a50  3a 20 70 69 78 73 61 6d  70 6c 65 73 25 3d 76 61  |: pixsamples%=va|
00009a60  6c 75 65 25 0d 20 58 21  20 c9 20 32 37 38 20 3a  |lue%. X! . 278 :|
00009a70  20 72 6f 77 73 70 65 72  73 74 72 69 70 25 3d 76  | rowsperstrip%=v|
00009a80  61 6c 75 65 25 0d 20 62  1b 20 c9 20 32 38 34 20  |alue%. b. . 284 |
00009a90  3a 20 70 6c 61 6e 61 72  25 3d 76 61 6c 75 65 25  |: planar%=value%|
00009aa0  0d 20 6c 1d 20 c9 20 32  39 30 20 3a 20 67 72 65  |. l. . 290 : gre|
00009ab0  79 75 6e 69 74 25 3d 76  61 6c 75 65 25 0d 20 76  |yunit%=value%. v|
00009ac0  9a 20 c9 20 32 39 31 20  3a 20 f2 69 70 74 72 28  |. . 291 : .iptr(|
00009ad0  46 31 25 2c 76 61 6c 75  65 25 29 3a 64 69 76 25  |F1%,value%):div%|
00009ae0  3d 32 2a 31 30 5e 67 72  65 79 75 6e 69 74 25 3a  |=2*10^greyunit%:|
00009af0  e3 20 67 25 3d 31 20 b8  20 6c 65 6e 67 74 68 25  |. g%=1 . length%|
00009b00  3a 63 25 3d a4 74 69 66  66 28 74 79 70 65 25 29  |:c%=.tiff(type%)|
00009b10  2a 32 35 35 3a 69 25 3d  63 25 2f 64 69 76 25 3a  |*255:i%=c%/div%:|
00009b20  49 6e 50 61 6c 25 28 67  25 29 3d 69 25 2b 28 69  |InPal%(g%)=i%+(i|
00009b30  25 3c 3c 38 29 2b 28 69  25 3c 3c 31 36 29 3a ed  |%<<8)+(i%<<16):.|
00009b40  3a 70 61 6c 3d b9 3a f2  69 70 74 72 28 46 31 25  |:pal=.:.iptr(F1%|
00009b50  2c 63 70 74 72 25 29 0d  20 80 43 20 c9 20 33 30  |,cptr%). .C . 30|
00009b60  35 20 3a 20 f2 69 70 74  72 28 46 31 25 2c 76 61  |5 : .iptr(F1%,va|
00009b70  6c 75 65 25 29 3a 73 6f  66 74 77 24 3d a4 74 69  |lue%):softw$=.ti|
00009b80  66 66 28 74 79 70 65 25  29 3a f2 69 70 74 72 28  |ff(type%):.iptr(|
00009b90  46 31 25 2c 63 70 74 72  25 29 0d 20 8a 95 20 c9  |F1%,cptr%). .. .|
00009ba0  20 33 32 30 20 3a 20 f2  69 70 74 72 28 46 31 25  | 320 : .iptr(F1%|
00009bb0  2c 76 61 6c 75 65 25 29  3a 49 6e 50 61 6c 25 28  |,value%):InPal%(|
00009bc0  29 3d 30 3a e3 20 70 25  3d 31 20 b8 20 33 3a e3  |)=0:. p%=1 . 3:.|
00009bd0  20 63 25 3d 31 20 b8 20  6c 65 6e 67 74 68 25 81  | c%=1 . length%.|
00009be0  33 3a 76 25 3d a4 74 69  66 66 28 74 79 70 65 25  |3:v%=.tiff(type%|
00009bf0  29 3a 49 6e 50 61 6c 25  28 63 25 29 3d 28 49 6e  |):InPal%(c%)=(In|
00009c00  50 61 6c 25 28 63 25 29  3c 3c 38 29 2b 28 76 25  |Pal%(c%)<<8)+(v%|
00009c10  3e 3e 38 29 3a ed 3a ed  3a 70 61 6c 3d b9 3a f2  |>>8):.:.:pal=.:.|
00009c20  69 70 74 72 28 46 31 25  2c 63 70 74 72 25 29 0d  |iptr(F1%,cptr%).|
00009c30  20 94 05 cb 0d 20 9e 05  ed 0d 20 a8 2d e7 72 6f  | .... .... .-.ro|
00009c40  77 73 70 65 72 73 74 72  69 70 25 3d 2d 31 20 8c  |wsperstrip%=-1 .|
00009c50  20 72 6f 77 73 70 65 72  73 74 72 69 70 25 3d 68  | rowsperstrip%=h|
00009c60  65 69 67 68 74 25 0d 20  b2 15 c8 8e 20 63 6f 6d  |eight%. .... com|
00009c70  70 72 65 73 73 69 6f 6e  25 20 ca 0d 20 bc 14 20  |pression% .. .. |
00009c80  c9 20 31 20 3a 20 63 6f  6d 70 72 24 3d 22 22 0d  |. 1 : compr$="".|
00009c90  20 c6 20 20 c9 20 33 32  37 37 33 20 3a 20 63 6f  | .  . 32773 : co|
00009ca0  6d 70 72 24 3d 22 50 61  63 6b 62 69 74 73 22 0d  |mpr$="Packbits".|
00009cb0  20 d0 17 20 c9 20 35 20  3a 20 63 6f 6d 70 72 24  | .. . 5 : compr$|
00009cc0  3d 22 4c 5a 57 22 0d 20  da 50 20 7f 20 3a 20 f2  |="LZW". .P . : .|
00009cd0  65 72 72 6f 72 28 2d 31  2c 22 49 20 63 61 6e 6e  |error(-1,"I cann|
00009ce0  6f 74 20 68 61 6e 64 6c  65 20 54 49 46 46 20 63  |ot handle TIFF c|
00009cf0  6f 6d 70 72 65 73 73 69  6f 6e 20 23 22 2b c3 28  |ompression #"+.(|
00009d00  63 6f 6d 70 72 65 73 73  69 6f 6e 25 29 2b 22 20  |compression%)+" |
00009d10  21 22 29 3a 3d a3 0d 20  e4 05 cb 0d 20 ee b3 e7  |!"):=.. .... ...|
00009d20  28 28 70 69 78 73 61 6d  70 6c 65 73 25 3d 31 29  |((pixsamples%=1)|
00009d30  80 28 28 62 69 74 73 25  3d 31 29 84 28 62 69 74  |.((bits%=1).(bit|
00009d40  73 25 3d 32 29 84 28 62  69 74 73 25 3d 34 29 84  |s%=2).(bits%=4).|
00009d50  28 62 69 74 73 25 3d 38  29 29 29 20 84 20 28 28  |(bits%=8))) . ((|
00009d60  62 69 74 73 25 3d 32 34  29 80 28 70 69 78 73 61  |bits%=24).(pixsa|
00009d70  6d 70 6c 65 73 25 3d 33  29 29 20 8b 20 f2 65 72  |mples%=3)) . .er|
00009d80  72 6f 72 28 2d 31 2c 22  49 20 63 61 6e 20 6f 6e  |ror(-1,"I can on|
00009d90  6c 79 20 68 61 6e 64 6c  65 20 54 49 46 46 20 69  |ly handle TIFF i|
00009da0  6d 61 67 65 73 20 77 69  74 68 20 31 2c 32 2c 34  |mages with 1,2,4|
00009db0  2c 38 20 6f 72 20 32 34  20 62 69 74 73 20 70 65  |,8 or 24 bits pe|
00009dc0  72 20 70 69 78 65 6c 20  21 22 29 3a 3d a3 0d 20  |r pixel !"):=.. |
00009dd0  f8 54 e7 70 6c 61 6e 61  72 25 3c 3e 31 20 8c 20  |.T.planar%<>1 . |
00009de0  f2 65 72 72 6f 72 28 2d  31 2c 22 49 20 63 61 6e  |.error(-1,"I can|
00009df0  6e 6f 74 20 68 61 6e 64  6c 65 20 54 49 46 46 20  |not handle TIFF |
00009e00  69 6d 61 67 65 73 20 77  69 74 68 20 6d 75 6c 74  |images with mult|
00009e10  69 70 6c 65 20 70 6c 61  6e 65 73 20 21 22 29 3a  |iple planes !"):|
00009e20  3d a3 0d 21 02 70 49 6e  50 61 6c 25 28 30 29 3d  |=..!.pInPal%(0)=|
00009e30  62 69 74 73 25 3a e7 70  61 6c 20 8b 20 e7 62 69  |bits%:.pal . .bi|
00009e40  74 73 25 3e 38 20 8b 20  e7 70 68 6f 74 6f 6d 65  |ts%>8 . .photome|
00009e50  74 72 69 63 25 3d 30 20  8c 20 f2 67 72 65 79 70  |tric%=0 . .greyp|
00009e60  61 6c 28 49 6e 50 61 6c  25 28 29 2c 62 69 74 73  |al(InPal%(),bits|
00009e70  25 2c 2d 31 29 20 8b 20  f2 67 72 65 79 70 61 6c  |%,-1) . .greypal|
00009e80  28 49 6e 50 61 6c 25 28  29 2c 62 69 74 73 25 2c  |(InPal%(),bits%,|
00009e90  31 29 0d 21 0c 70 e7 62  69 74 73 25 3d 32 34 20  |1).!.p.bits%=24 |
00009ea0  8c 20 63 6f 6c 6f 75 72  73 25 3d 32 35 36 3a 73  |. colours%=256:s|
00009eb0  69 7a 65 31 25 3d 77 69  64 74 68 25 2a 34 3a 73  |ize1%=width%*4:s|
00009ec0  69 7a 65 32 25 3d 30 20  8b 20 63 6f 6c 6f 75 72  |ize2%=0 . colour|
00009ed0  73 25 3d 32 5e 62 69 74  73 25 3a 73 69 7a 65 31  |s%=2^bits%:size1|
00009ee0  25 3d 28 77 69 64 74 68  25 2a 62 69 74 73 25 2b  |%=(width%*bits%+|
00009ef0  37 29 81 38 3a 73 69 7a  65 32 25 3d 77 69 64 74  |7).8:size2%=widt|
00009f00  68 25 0d 21 16 27 f2 73  65 74 28 77 69 64 74 68  |h%.!.'.set(width|
00009f10  25 2c 68 65 69 67 68 74  25 2c 63 6f 6c 6f 75 72  |%,height%,colour|
00009f20  73 25 2c 4d 6f 64 65 25  29 0d 21 20 15 c8 8e 20  |s%,Mode%).! ... |
00009f30  63 6f 6d 70 72 65 73 73  69 6f 6e 25 20 ca 0d 21  |compression% ..!|
00009f40  2a 24 20 c9 20 31 20 3a  20 73 69 7a 65 33 25 3d  |*$ . 1 : size3%=|
00009f50  30 3a f4 20 4e 6f 20 74  65 6d 70 20 62 75 66 66  |0:. No temp buff|
00009f60  65 72 0d 21 34 2e 20 c9  20 33 32 37 37 33 20 3a  |er.!4. . 32773 :|
00009f70  20 73 69 7a 65 33 25 3d  31 30 32 34 3a f4 20 53  | size3%=1024:. S|
00009f80  6d 61 6c 6c 20 74 65 6d  70 20 62 75 66 66 65 72  |mall temp buffer|
00009f90  0d 21 3e 47 20 c9 20 35  20 3a 20 73 69 7a 65 33  |.!>G . 5 : size3|
00009fa0  25 3d 28 28 77 69 64 74  68 25 2a 62 69 74 73 25  |%=((width%*bits%|
00009fb0  2b 37 29 81 38 29 2a 72  6f 77 73 70 65 72 73 74  |+7).8)*rowsperst|
00009fc0  72 69 70 25 3a f4 20 54  65 6d 70 20 66 6f 72 20  |rip%:. Temp for |
00009fd0  31 20 73 74 72 69 70 0d  21 48 70 20 20 20 20 20  |1 strip.!Hp     |
00009fe0  20 20 20 20 20 e7 a4 61  6c 6c 6f 63 61 74 65 28  |     ..allocate(|
00009ff0  42 5f 6c 7a 77 74 61 62  6c 65 25 2c 33 32 2a 31  |B_lzwtable%,32*1|
0000a000  30 32 34 29 20 8b 20 f2  65 72 72 6f 72 28 2d 31  |024) . .error(-1|
0000a010  2c 22 49 20 68 61 76 65  20 6e 6f 20 72 6f 6f 6d  |,"I have no room|
0000a020  20 66 6f 72 20 74 68 65  20 4c 5a 57 20 64 65 63  | for the LZW dec|
0000a030  6f 6d 70 72 65 73 73 69  6f 6e 20 74 61 62 6c 65  |ompression table|
0000a040  20 21 22 29 3a 3d a3 0d  21 52 05 cb 0d 21 5c 34  | !"):=..!R...!\4|
0000a050  e7 a4 61 6c 6c 6f 63 61  74 65 5f 73 74 64 28 77  |..allocate_std(w|
0000a060  69 64 74 68 25 2c 73 69  7a 65 31 25 2c 73 69 7a  |idth%,size1%,siz|
0000a070  65 32 25 2c 73 69 7a 65  33 25 29 20 8b 20 3d a3  |e2%,size3%) . =.|
0000a080  0d 21 66 17 e7 a4 6e 65  77 5f 69 6d 61 67 65 28  |.!f...new_image(|
0000a090  30 29 20 8b 20 3d a3 0d  21 70 3e e7 62 69 74 73  |0) . =..!p>.bits|
0000a0a0  25 3d 32 34 20 8c 20 63  6f 64 65 25 3d 32 20 8b  |%=24 . code%=2 .|
0000a0b0  20 e7 70 68 6f 74 6f 6d  65 74 72 69 63 25 3c 3d  | .photometric%<=|
0000a0c0  31 20 8c 20 63 6f 64 65  25 3d 31 20 8b 20 63 6f  |1 . code%=1 . co|
0000a0d0  64 65 25 3d 30 0d 21 7a  2f e7 73 6f 66 74 77 24  |de%=0.!z/.softw$|
0000a0e0  3c 3e 22 22 20 8c 20 73  6f 66 74 77 24 3d c0 22  |<>"" . softw$=."|
0000a0f0  4d 61 64 65 20 62 79 20  22 2b 73 6f 66 74 77 24  |Made by "+softw$|
0000a100  2c 32 35 29 0d 21 84 70  f2 69 6d 61 67 65 5f 69  |,25).!.p.image_i|
0000a110  6e 66 6f 28 22 54 49 46  46 22 2c 77 69 64 74 68  |nfo("TIFF",width|
0000a120  25 2c 68 65 69 67 68 74  25 2c 63 6f 64 65 25 2c  |%,height%,code%,|
0000a130  62 69 74 73 25 2c 4d 6f  64 65 25 2c 63 6f 6d 70  |bits%,Mode%,comp|
0000a140  72 24 2c 73 6f 66 74 77  24 2c 46 6c 65 6e 25 2d  |r$,softw$,Flen%-|
0000a150  68 65 61 64 62 79 74 65  73 25 2c 28 77 69 64 74  |headbytes%,(widt|
0000a160  68 25 2a 68 65 69 67 68  74 25 2a 62 69 74 73 25  |h%*height%*bits%|
0000a170  29 81 38 29 0d 21 8e a6  f2 76 61 72 28 22 69 66  |).8).!...var("if|
0000a180  70 31 22 2c 73 74 72 6f  66 66 25 21 34 29 3a f2  |p1",stroff%!4):.|
0000a190  76 61 72 28 22 69 6d 67  78 22 2c 77 69 64 74 68  |var("imgx",width|
0000a1a0  25 29 3a f2 76 61 72 28  22 69 6d 67 79 22 2c 68  |%):.var("imgy",h|
0000a1b0  65 69 67 68 74 25 29 3a  f2 76 61 72 28 22 72 6f  |eight%):.var("ro|
0000a1c0  70 73 22 2c 72 6f 77 73  70 65 72 73 74 72 69 70  |ps",rowsperstrip|
0000a1d0  25 29 3a f2 76 61 72 28  22 62 69 74 6f 22 2c 66  |%):.var("bito",f|
0000a1e0  69 6c 6c 6f 72 64 65 72  25 29 3a f2 76 61 72 28  |illorder%):.var(|
0000a1f0  22 63 6f 6d 70 22 2c 63  6f 6d 70 72 65 73 73 69  |"comp",compressi|
0000a200  6f 6e 25 29 3a e7 a4 75  6e 70 61 63 6b 28 22 54  |on%):..unpack("T|
0000a210  49 46 46 22 29 20 8b 20  3d a3 0d 21 98 06 3d b9  |IFF") . =..!..=.|
0000a220  0d 21 a2 05 20 0d 21 ac  11 dd a4 74 69 66 66 28  |.!.. .!....tiff(|
0000a230  74 79 70 65 25 29 0d 21  b6 1c f4 20 52 65 74 75  |type%).!... Retu|
0000a240  72 6e 73 20 74 69 66 66  20 64 61 74 61 20 74 79  |rns tiff data ty|
0000a250  70 65 0d 21 c0 0b ea 20  69 24 2c 62 25 0d 21 ca  |pe.!... i$,b%.!.|
0000a260  0e c8 8e 20 74 79 70 65  25 20 ca 0d 21 d4 1d 20  |... type% ..!.. |
0000a270  c9 20 31 20 3a 20 68 65  61 64 62 79 74 65 73 25  |. 1 : headbytes%|
0000a280  2b 3d 31 3a 3d a4 69 62  0d 21 de 47 20 c9 20 32  |+=1:=.ib.!.G . 2|
0000a290  20 3a 20 69 24 3d 22 22  3a 62 25 3d a4 69 62 3a  | : i$="":b%=.ib:|
0000a2a0  c8 95 20 62 25 3c 3e 30  3a 69 24 2b 3d bd 62 25  |.. b%<>0:i$+=.b%|
0000a2b0  3a 62 25 3d a4 69 62 3a  ce 3a 68 65 61 64 62 79  |:b%=.ib:.:headby|
0000a2c0  74 65 73 25 2b 3d a9 69  24 2b 31 3a 3d 69 24 0d  |tes%+=.i$+1:=i$.|
0000a2d0  21 e8 32 20 c9 20 33 20  3a 20 68 65 61 64 62 79  |!.2 . 3 : headby|
0000a2e0  74 65 73 25 2b 3d 32 3a  e7 54 74 79 70 65 25 3d  |tes%+=2:.Ttype%=|
0000a2f0  30 20 8c 20 3d a4 69 64  6c 20 8b 20 3d a4 69 64  |0 . =.idl . =.id|
0000a300  62 0d 21 f2 32 20 c9 20  34 20 3a 20 68 65 61 64  |b.!.2 . 4 : head|
0000a310  62 79 74 65 73 25 2b 3d  34 3a e7 54 74 79 70 65  |bytes%+=4:.Ttype|
0000a320  25 3d 30 20 8c 20 3d a4  69 77 6c 20 8b 20 3d a4  |%=0 . =.iwl . =.|
0000a330  69 77 62 0d 21 fc 0d 20  c9 20 35 20 3a 20 3d 30  |iwb.!.. . 5 : =0|
0000a340  0d 22 06 05 cb 0d 22 10  06 3d 30 0d 22 1a 05 20  |."...."..=0.".. |
0000a350  0d 22 24 0d dd a4 70 69  63 5f 51 52 54 0d 22 2e  |."$...pic_QRT.".|
0000a360  15 f4 20 4d 61 6b 65 73  20 51 52 54 20 69 6d 61  |.. Makes QRT ima|
0000a370  67 65 0d 22 38 2e 77 69  64 74 68 25 3d a4 69 64  |ge."8.width%=.id|
0000a380  6c 3a 68 65 69 67 68 74  25 3d a4 69 64 6c 3a f4  |l:height%=.idl:.|
0000a390  20 52 65 61 64 20 72 65  73 6f 6c 75 74 69 6f 6e  | Read resolution|
0000a3a0  0d 22 42 22 f2 73 65 74  28 77 69 64 74 68 25 2c  |."B".set(width%,|
0000a3b0  68 65 69 67 68 74 25 2c  32 35 36 2c 4d 6f 64 65  |height%,256,Mode|
0000a3c0  25 29 0d 22 4c 33 e7 a4  61 6c 6c 6f 63 61 74 65  |%)."L3..allocate|
0000a3d0  5f 73 74 64 28 77 69 64  74 68 25 2c 77 69 64 74  |_std(width%,widt|
0000a3e0  68 25 2a 34 2c 30 2c 77  69 64 74 68 25 2a 33 29  |h%*4,0,width%*3)|
0000a3f0  20 8b 20 3d a3 0d 22 56  17 e7 a4 6e 65 77 5f 69  | . =.."V...new_i|
0000a400  6d 61 67 65 28 30 29 20  8b 20 3d a3 0d 22 60 2e  |mage(0) . =.."`.|
0000a410  49 6e 50 61 6c 25 28 30  29 3d 32 34 3a f4 20 4e  |InPal%(0)=24:. N|
0000a420  6f 20 70 61 6c 65 74 74  65 2c 20 70 75 72 65 20  |o palette, pure |
0000a430  32 34 2d 62 69 74 20 52  47 42 0d 22 6a 3e f2 69  |24-bit RGB."j>.i|
0000a440  6d 61 67 65 5f 69 6e 66  6f 28 22 51 52 54 20 52  |mage_info("QRT R|
0000a450  41 57 22 2c 77 69 64 74  68 25 2c 68 65 69 67 68  |AW",width%,heigh|
0000a460  74 25 2c 32 2c 32 34 2c  4d 6f 64 65 25 2c 22 22  |t%,2,24,Mode%,""|
0000a470  2c 22 22 2c 31 2c 31 29  0d 22 74 50 f2 76 61 72  |,"",1,1)."tP.var|
0000a480  28 22 69 66 70 31 22 2c  34 29 3a f2 76 61 72 28  |("ifp1",4):.var(|
0000a490  22 69 6d 67 78 22 2c 77  69 64 74 68 25 29 3a f2  |"imgx",width%):.|
0000a4a0  76 61 72 28 22 69 6d 67  79 22 2c 68 65 69 67 68  |var("imgy",heigh|
0000a4b0  74 25 29 3a e7 a4 75 6e  70 61 63 6b 28 22 51 52  |t%):..unpack("QR|
0000a4c0  54 22 29 20 8b 20 3d a3  0d 22 7e 06 3d b9 0d 22  |T") . =.."~.=.."|
0000a4d0  88 05 20 0d 22 92 0f dd  a4 70 69 63 5f 41 52 56  |.. ."....pic_ARV|
0000a4e0  49 53 0d 22 9c 17 f4 20  4d 61 6b 65 73 20 41 72  |IS."... Makes Ar|
0000a4f0  56 69 73 20 69 6d 61 67  65 0d 22 a6 67 f2 69 70  |Vis image.".g.ip|
0000a500  74 72 28 46 31 25 2c 34  29 3a f2 69 70 74 72 28  |tr(F1%,4):.iptr(|
0000a510  46 31 25 2c a4 69 77 6c  2d 34 29 3a f2 69 73 6b  |F1%,.iwl-4):.isk|
0000a520  69 70 28 46 31 25 2c 31  36 29 3a 77 69 64 74 68  |ip(F1%,16):width|
0000a530  25 3d a4 69 77 6c 2a 34  2b 34 3a 68 65 69 67 68  |%=.iwl*4+4:heigh|
0000a540  74 25 3d a4 69 77 6c 2b  31 3a f4 20 47 65 74 20  |t%=.iwl+1:. Get |
0000a550  77 69 64 74 68 20 61 6e  64 20 68 65 69 67 68 74  |width and height|
0000a560  0d 22 b0 87 f2 69 73 6b  69 70 28 46 31 25 2c 38  |."...iskip(F1%,8|
0000a570  29 3a f2 69 73 6b 69 70  28 46 31 25 2c a4 69 77  |):.iskip(F1%,.iw|
0000a580  6c 2d 33 36 29 3a f2 69  70 74 72 28 46 32 25 2c  |l-36):.iptr(F2%,|
0000a590  34 29 3a f2 69 70 74 72  28 46 32 25 2c a4 69 77  |4):.iptr(F2%,.iw|
0000a5a0  6c 66 28 46 32 25 29 2d  34 29 3a f2 69 73 6b 69  |lf(F2%)-4):.iski|
0000a5b0  70 28 46 32 25 2c 33 32  29 3a f2 69 73 6b 69 70  |p(F2%,32):.iskip|
0000a5c0  28 46 32 25 2c a4 69 77  6c 66 28 46 32 25 29 2d  |(F2%,.iwlf(F2%)-|
0000a5d0  33 36 29 3a f4 20 47 6f  20 74 6f 20 73 70 72 69  |36):. Go to spri|
0000a5e0  74 65 20 64 61 74 61 0d  22 ba 2d 63 6f 6c 62 69  |te data.".-colbi|
0000a5f0  74 73 25 3d 31 35 3a 63  6f 6c 6f 75 72 73 25 3d  |ts%=15:colours%=|
0000a600  32 5e 63 6f 6c 62 69 74  73 25 3a f4 20 43 6f 6c  |2^colbits%:. Col|
0000a610  6f 75 72 73 0d 22 c4 22  f2 73 65 74 28 77 69 64  |ours.".".set(wid|
0000a620  74 68 25 2c 68 65 69 67  68 74 25 2c 32 35 36 2c  |th%,height%,256,|
0000a630  4d 6f 64 65 25 29 0d 22  ce 33 e7 a4 61 6c 6c 6f  |Mode%).".3..allo|
0000a640  63 61 74 65 5f 73 74 64  28 77 69 64 74 68 25 2c  |cate_std(width%,|
0000a650  77 69 64 74 68 25 2a 34  2c 30 2c 77 69 64 74 68  |width%*4,0,width|
0000a660  25 2a 32 29 20 8b 20 3d  a3 0d 22 d8 17 e7 a4 6e  |%*2) . =.."....n|
0000a670  65 77 5f 69 6d 61 67 65  28 30 29 20 8b 20 3d a3  |ew_image(0) . =.|
0000a680  0d 22 e2 2e 49 6e 50 61  6c 25 28 30 29 3d 31 35  |."..InPal%(0)=15|
0000a690  3a f4 20 4e 6f 20 70 61  6c 65 74 74 65 2c 20 70  |:. No palette, p|
0000a6a0  75 72 65 20 31 35 2d 62  69 74 20 52 47 42 0d 22  |ure 15-bit RGB."|
0000a6b0  ec 3c f2 69 6d 61 67 65  5f 69 6e 66 6f 28 22 41  |.<.image_info("A|
0000a6c0  72 56 69 73 22 2c 77 69  64 74 68 25 2c 68 65 69  |rVis",width%,hei|
0000a6d0  67 68 74 25 2c 32 2c 31  35 2c 4d 6f 64 65 25 2c  |ght%,2,15,Mode%,|
0000a6e0  22 22 2c 22 22 2c 31 2c  31 29 0d 22 f6 73 f2 76  |"","",1,1).".s.v|
0000a6f0  61 72 28 22 69 66 70 31  22 2c a4 69 70 74 72 28  |ar("ifp1",.iptr(|
0000a700  46 31 25 29 29 3a f2 76  61 72 28 22 69 66 70 32  |F1%)):.var("ifp2|
0000a710  22 2c a4 69 70 74 72 28  46 32 25 29 29 3a f2 76  |",.iptr(F2%)):.v|
0000a720  61 72 28 22 69 6d 67 78  22 2c 77 69 64 74 68 25  |ar("imgx",width%|
0000a730  29 3a f2 76 61 72 28 22  69 6d 67 79 22 2c 68 65  |):.var("imgy",he|
0000a740  69 67 68 74 25 29 3a e7  a4 75 6e 70 61 63 6b 28  |ight%):..unpack(|
0000a750  22 41 52 56 49 53 22 29  20 8b 20 3d a3 0d 23 00  |"ARVIS") . =..#.|
0000a760  06 3d b9 0d 23 0a 05 20  0d 23 14 0f dd a4 70 69  |.=..#.. .#....pi|
0000a770  63 5f 43 4c 45 41 52 0d  23 1e 17 f4 20 4d 61 6b  |c_CLEAR.#... Mak|
0000a780  65 73 20 43 6c 65 61 72  20 69 6d 61 67 65 0d 23  |es Clear image.#|
0000a790  28 3f 6d 61 6b 65 72 24  3d a4 69 73 74 72 69 6e  |(?maker$=.istrin|
0000a7a0  67 28 46 31 25 2c 2d 31  29 3a 76 65 72 73 69 6f  |g(F1%,-1):versio|
0000a7b0  6e 25 3d a4 69 77 6c 3a  f4 20 43 72 65 61 74 6f  |n%=.iwl:. Creato|
0000a7c0  72 20 69 6e 66 6f 72 6d  61 74 69 6f 6e 0d 23 32  |r information.#2|
0000a7d0  3c 77 69 64 74 68 25 3d  a4 69 77 6c 3a 68 65 69  |<width%=.iwl:hei|
0000a7e0  67 68 74 25 3d a4 69 77  6c 3a 62 69 74 73 25 3d  |ght%=.iwl:bits%=|
0000a7f0  a4 69 77 6c 3a f4 20 57  69 64 74 68 2c 20 68 65  |.iwl:. Width, he|
0000a800  69 67 68 74 2c 20 62 70  70 0d 23 3c 54 e7 62 69  |ight, bpp.#<T.bi|
0000a810  74 73 25 3c 3d 38 20 8c  20 63 6f 6c 62 69 74 73  |ts%<=8 . colbits|
0000a820  25 3d 62 69 74 73 25 3a  f2 72 65 61 64 32 34 70  |%=bits%:.read24p|
0000a830  61 6c 28 46 31 25 2c 49  6e 50 61 6c 25 28 29 2c  |al(F1%,InPal%(),|
0000a840  32 5e 62 69 74 73 25 2c  30 2c 31 2c 32 2c 33 29  |2^bits%,0,1,2,3)|
0000a850  20 8b 20 63 6f 6c 62 69  74 73 25 3d 38 0d 23 46  | . colbits%=8.#F|
0000a860  24 49 6e 50 61 6c 25 28  30 29 3d 62 69 74 73 25  |$InPal%(0)=bits%|
0000a870  3a f4 20 42 69 74 73 20  70 65 72 20 70 69 78 65  |:. Bits per pixe|
0000a880  6c 0d 23 50 2d e7 62 69  74 73 25 3c 3d 38 20 8c  |l.#P-.bits%<=8 .|
0000a890  20 73 69 7a 65 25 3d 77  69 64 74 68 25 20 8b 20  | size%=width% . |
0000a8a0  73 69 7a 65 25 3d 77 69  64 74 68 25 2a 34 0d 23  |size%=width%*4.#|
0000a8b0  5a 29 f2 73 65 74 28 77  69 64 74 68 25 2c 68 65  |Z).set(width%,he|
0000a8c0  69 67 68 74 25 2c 32 5e  63 6f 6c 62 69 74 73 25  |ight%,2^colbits%|
0000a8d0  2c 4d 6f 64 65 25 29 0d  23 64 29 e7 a4 61 6c 6c  |,Mode%).#d)..all|
0000a8e0  6f 63 61 74 65 5f 73 74  64 28 77 69 64 74 68 25  |ocate_std(width%|
0000a8f0  2c 73 69 7a 65 25 2c 30  2c 30 29 20 8b 20 3d a3  |,size%,0,0) . =.|
0000a900  0d 23 6e 17 e7 a4 6e 65  77 5f 69 6d 61 67 65 28  |.#n...new_image(|
0000a910  30 29 20 8b 20 3d a3 0d  23 78 7d f2 69 6d 61 67  |0) . =..#x}.imag|
0000a920  65 5f 69 6e 66 6f 28 22  43 6c 65 61 72 22 2c 77  |e_info("Clear",w|
0000a930  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 63 6f  |idth%,height%,co|
0000a940  64 65 25 2c 62 69 74 73  25 2c 4d 6f 64 65 25 2c  |de%,bits%,Mode%,|
0000a950  22 22 2c 22 62 79 20 22  2b 6d 61 6b 65 72 24 2b  |"","by "+maker$+|
0000a960  22 20 22 2b c3 28 76 65  72 73 69 6f 6e 25 81 31  |" "+.(version%.1|
0000a970  30 30 29 2b 22 2e 22 2b  c2 22 30 22 2b c3 28 76  |00)+"."+."0"+.(v|
0000a980  65 72 73 69 6f 6e 25 83  31 30 30 29 2c 32 29 2c  |ersion%.100),2),|
0000a990  31 2c 31 29 0d 23 82 5b  f2 76 61 72 28 22 69 66  |1,1).#.[.var("if|
0000a9a0  70 31 22 2c a4 69 70 74  72 28 46 31 25 29 29 3a  |p1",.iptr(F1%)):|
0000a9b0  f2 76 61 72 28 22 69 6d  67 78 22 2c 77 69 64 74  |.var("imgx",widt|
0000a9c0  68 25 29 3a f2 76 61 72  28 22 69 6d 67 79 22 2c  |h%):.var("imgy",|
0000a9d0  68 65 69 67 68 74 25 29  3a e7 a4 75 6e 70 61 63  |height%):..unpac|
0000a9e0  6b 28 22 43 4c 45 41 52  22 29 20 8b 20 3d a3 0d  |k("CLEAR") . =..|
0000a9f0  23 8c 06 3d b9 0d 23 96  05 20 0d 23 a0 0d dd a4  |#..=..#.. .#....|
0000aa00  70 69 63 5f 4d 54 56 0d  23 aa 15 f4 20 4d 61 6b  |pic_MTV.#... Mak|
0000aa10  65 73 20 4d 54 56 20 69  6d 61 67 65 0d 23 b4 39  |es MTV image.#.9|
0000aa20  73 69 7a 65 24 3d a4 69  73 74 72 69 6e 67 28 46  |size$=.istring(F|
0000aa30  31 25 2c 2d 31 29 3a f4  20 53 74 72 69 6e 67 20  |1%,-1):. String |
0000aa40  63 6f 6e 74 61 69 6e 69  6e 67 20 72 65 73 6f 6c  |containing resol|
0000aa50  75 74 69 6f 6e 0d 23 be  3d 77 69 64 74 68 25 3d  |ution.#.=width%=|
0000aa60  bb 73 69 7a 65 24 3a 68  65 69 67 68 74 25 3d bb  |.size$:height%=.|
0000aa70  28 c1 73 69 7a 65 24 2c  a7 73 69 7a 65 24 2c 22  |(.size$,.size$,"|
0000aa80  20 22 29 29 29 3a f4 20  52 65 73 6f 6c 75 74 69  | "))):. Resoluti|
0000aa90  6f 6e 0d 23 c8 22 f2 73  65 74 28 77 69 64 74 68  |on.#.".set(width|
0000aaa0  25 2c 68 65 69 67 68 74  25 2c 32 35 36 2c 4d 6f  |%,height%,256,Mo|
0000aab0  64 65 25 29 0d 23 d2 2c  e7 a4 61 6c 6c 6f 63 61  |de%).#.,..alloca|
0000aac0  74 65 5f 73 74 64 28 77  69 64 74 68 25 2c 77 69  |te_std(width%,wi|
0000aad0  64 74 68 25 2a 34 2c 30  2c 30 29 20 8b 20 3d a3  |dth%*4,0,0) . =.|
0000aae0  0d 23 dc 17 e7 a4 6e 65  77 5f 69 6d 61 67 65 28  |.#....new_image(|
0000aaf0  30 29 20 8b 20 3d a3 0d  23 e6 2e 49 6e 50 61 6c  |0) . =..#..InPal|
0000ab00  25 28 30 29 3d 32 34 3a  f4 20 4e 6f 20 70 61 6c  |%(0)=24:. No pal|
0000ab10  65 74 74 65 2c 20 70 75  72 65 20 32 34 2d 62 69  |ette, pure 24-bi|
0000ab20  74 20 52 47 42 0d 23 f0  3a f2 69 6d 61 67 65 5f  |t RGB.#.:.image_|
0000ab30  69 6e 66 6f 28 22 4d 54  56 22 2c 77 69 64 74 68  |info("MTV",width|
0000ab40  25 2c 68 65 69 67 68 74  25 2c 32 2c 32 34 2c 4d  |%,height%,2,24,M|
0000ab50  6f 64 65 25 2c 22 22 2c  22 22 2c 31 2c 31 29 0d  |ode%,"","",1,1).|
0000ab60  23 fa 59 f2 76 61 72 28  22 69 66 70 31 22 2c a4  |#.Y.var("ifp1",.|
0000ab70  69 70 74 72 28 46 31 25  29 29 3a f2 76 61 72 28  |iptr(F1%)):.var(|
0000ab80  22 69 6d 67 78 22 2c 77  69 64 74 68 25 29 3a f2  |"imgx",width%):.|
0000ab90  76 61 72 28 22 69 6d 67  79 22 2c 68 65 69 67 68  |var("imgy",heigh|
0000aba0  74 25 29 3a e7 a4 75 6e  70 61 63 6b 28 22 4d 54  |t%):..unpack("MT|
0000abb0  56 22 29 20 8b 20 3d a3  0d 24 04 06 3d b9 0d 24  |V") . =..$..=..$|
0000abc0  0e 05 20 0d 24 18 11 dd  a4 70 69 63 5f 43 41 44  |.. .$....pic_CAD|
0000abd0  53 4f 46 54 0d 24 22 19  f4 20 4d 61 6b 65 73 20  |SOFT.$".. Makes |
0000abe0  43 61 64 73 6f 66 74 20  69 6d 61 67 65 0d 24 2c  |Cadsoft image.$,|
0000abf0  42 f2 69 70 74 72 28 46  31 25 2c 39 29 3a 77 69  |B.iptr(F1%,9):wi|
0000ac00  64 74 68 25 3d 28 a4 69  64 6c 2b 32 29 2f 32 3a  |dth%=(.idl+2)/2:|
0000ac10  68 65 69 67 68 74 25 3d  28 a4 69 64 6c 2b 32 29  |height%=(.idl+2)|
0000ac20  2f 32 3a f4 20 52 65 73  6f 6c 75 74 69 6f 6e 0d  |/2:. Resolution.|
0000ac30  24 36 35 f2 69 70 74 72  28 46 31 25 2c 32 36 29  |$65.iptr(F1%,26)|
0000ac40  3a 63 6f 6d 70 72 65 73  73 69 6f 6e 25 3d a4 69  |:compression%=.i|
0000ac50  62 3a f4 20 43 6f 6d 70  72 65 73 73 69 6f 6e 20  |b:. Compression |
0000ac60  63 6f 64 65 0d 24 40 7b  f2 69 70 74 72 28 46 31  |code.$@{.iptr(F1|
0000ac70  25 2c 35 31 32 29 3a 49  6e 50 61 6c 25 28 29 3d  |%,512):InPal%()=|
0000ac80  30 3a 49 6e 50 61 6c 25  28 30 29 3d 38 3a e3 20  |0:InPal%(0)=8:. |
0000ac90  72 67 62 25 3d 31 36 20  b8 20 30 20 88 20 2d 38  |rgb%=16 . 0 . -8|
0000aca0  3a e3 20 63 25 3d 31 20  b8 20 32 35 36 3a 49 6e  |:. c%=1 . 256:In|
0000acb0  50 61 6c 25 28 63 25 29  3d 49 6e 50 61 6c 25 28  |Pal%(c%)=InPal%(|
0000acc0  63 25 29 20 84 20 28 a4  69 62 3c 3c 72 67 62 25  |c%) . (.ib<<rgb%|
0000acd0  29 3a ed 3a ed 3a f4 20  50 61 6c 65 74 74 65 0d  |):.:.:. Palette.|
0000ace0  24 4a 22 f2 73 65 74 28  77 69 64 74 68 25 2c 68  |$J".set(width%,h|
0000acf0  65 69 67 68 74 25 2c 32  35 36 2c 4d 6f 64 65 25  |eight%,256,Mode%|
0000ad00  29 0d 24 54 2a e7 a4 61  6c 6c 6f 63 61 74 65 5f  |).$T*..allocate_|
0000ad10  73 74 64 28 77 69 64 74  68 25 2c 77 69 64 74 68  |std(width%,width|
0000ad20  25 2c 30 2c 30 29 20 8b  20 3d a3 0d 24 5e 17 e7  |%,0,0) . =..$^..|
0000ad30  a4 6e 65 77 5f 69 6d 61  67 65 28 30 29 20 8b 20  |.new_image(0) . |
0000ad40  3d a3 0d 24 68 35 e7 63  6f 6d 70 72 65 73 73 69  |=..$h5.compressi|
0000ad50  6f 6e 25 3d 32 20 8c 20  63 6f 6d 70 72 24 3d 22  |on%=2 . compr$="|
0000ad60  52 75 6e 20 6c 65 6e 67  74 68 22 20 8b 20 63 6f  |Run length" . co|
0000ad70  6d 70 72 24 3d 22 22 0d  24 72 57 f2 69 6d 61 67  |mpr$="".$rW.imag|
0000ad80  65 5f 69 6e 66 6f 28 22  43 61 64 53 6f 66 74 22  |e_info("CadSoft"|
0000ad90  2c 77 69 64 74 68 25 2c  68 65 69 67 68 74 25 2c  |,width%,height%,|
0000ada0  30 2c 38 2c 4d 6f 64 65  25 2c 63 6f 6d 70 72 24  |0,8,Mode%,compr$|
0000adb0  2c 22 22 2c 46 6c 65 6e  25 2d 26 36 30 30 2c 77  |,"",Flen%-&600,w|
0000adc0  69 64 74 68 25 2a 68 65  69 67 68 74 25 29 0d 24  |idth%*height%).$|
0000add0  7c 71 f2 76 61 72 28 22  69 66 70 31 22 2c 26 36  ||q.var("ifp1",&6|
0000ade0  30 30 29 3a f2 76 61 72  28 22 69 6d 67 78 22 2c  |00):.var("imgx",|
0000adf0  77 69 64 74 68 25 29 3a  f2 76 61 72 28 22 69 6d  |width%):.var("im|
0000ae00  67 79 22 2c 68 65 69 67  68 74 25 29 3a f2 76 61  |gy",height%):.va|
0000ae10  72 28 22 63 6f 6d 70 22  2c 63 6f 6d 70 72 65 73  |r("comp",compres|
0000ae20  73 69 6f 6e 25 29 3a e7  a4 75 6e 70 61 63 6b 28  |sion%):..unpack(|
0000ae30  22 43 41 44 53 4f 46 54  22 29 20 8b 20 3d a3 0d  |"CADSOFT") . =..|
0000ae40  24 86 06 3d b9 0d 24 90  05 20 0d 24 9a 0f dd a4  |$..=..$.. .$....|
0000ae50  70 69 63 5f 49 52 4c 41  4d 0d 24 a4 17 f4 20 4d  |pic_IRLAM.$... M|
0000ae60  61 6b 65 73 20 49 72 6c  61 6d 20 69 6d 61 67 65  |akes Irlam image|
0000ae70  0d 24 ae 44 69 64 24 3d  a4 69 73 74 72 69 6e 67  |.$.Did$=.istring|
0000ae80  28 46 31 25 2c 2d 31 29  3a 70 25 3d a7 69 64 24  |(F1%,-1):p%=.id$|
0000ae90  2c 22 3a 22 29 3a f4 20  53 74 72 69 6e 67 20 63  |,":"):. String c|
0000aea0  6f 6e 74 61 69 6e 69 6e  67 20 69 6d 61 67 65 20  |ontaining image |
0000aeb0  69 6e 66 6f 0d 24 b8 33  77 69 64 74 68 25 3d bb  |info.$.3width%=.|
0000aec0  c1 69 64 24 2c 70 25 2b  31 29 3a 68 65 69 67 68  |.id$,p%+1):heigh|
0000aed0  74 25 3d bb c1 69 64 24  2c 70 25 2b 32 2b a9 c3  |t%=..id$,p%+2+..|
0000aee0  77 69 64 74 68 25 29 0d  24 c2 22 f2 73 65 74 28  |width%).$.".set(|
0000aef0  77 69 64 74 68 25 2c 68  65 69 67 68 74 25 2c 32  |width%,height%,2|
0000af00  35 36 2c 4d 6f 64 65 25  29 0d 24 cc 33 e7 a4 61  |56,Mode%).$.3..a|
0000af10  6c 6c 6f 63 61 74 65 5f  73 74 64 28 77 69 64 74  |llocate_std(widt|
0000af20  68 25 2c 77 69 64 74 68  25 2a 34 2c 30 2c 77 69  |h%,width%*4,0,wi|
0000af30  64 74 68 25 2a 33 29 20  8b 20 3d a3 0d 24 d6 17  |dth%*3) . =..$..|
0000af40  e7 a4 6e 65 77 5f 69 6d  61 67 65 28 30 29 20 8b  |..new_image(0) .|
0000af50  20 3d a3 0d 24 e0 2e 49  6e 50 61 6c 25 28 30 29  | =..$..InPal%(0)|
0000af60  3d 32 34 3a f4 20 4e 6f  20 70 61 6c 65 74 74 65  |=24:. No palette|
0000af70  2c 20 70 75 72 65 20 32  34 2d 62 69 74 20 52 47  |, pure 24-bit RG|
0000af80  42 0d 24 ea 3c f2 69 6d  61 67 65 5f 69 6e 66 6f  |B.$.<.image_info|
0000af90  28 22 49 72 6c 61 6d 22  2c 77 69 64 74 68 25 2c  |("Irlam",width%,|
0000afa0  68 65 69 67 68 74 25 2c  32 2c 32 34 2c 4d 6f 64  |height%,2,24,Mod|
0000afb0  65 25 2c 22 22 2c 22 22  2c 31 2c 31 29 0d 24 f4  |e%,"","",1,1).$.|
0000afc0  5b f2 76 61 72 28 22 69  66 70 31 22 2c a4 69 70  |[.var("ifp1",.ip|
0000afd0  74 72 28 46 31 25 29 29  3a f2 76 61 72 28 22 69  |tr(F1%)):.var("i|
0000afe0  6d 67 78 22 2c 77 69 64  74 68 25 29 3a f2 76 61  |mgx",width%):.va|
0000aff0  72 28 22 69 6d 67 79 22  2c 68 65 69 67 68 74 25  |r("imgy",height%|
0000b000  29 3a e7 a4 75 6e 70 61  63 6b 28 22 49 52 4c 41  |):..unpack("IRLA|
0000b010  4d 22 29 20 8b 20 3d a3  0d 24 fe 06 3d b9 0d 25  |M") . =..$..=..%|
0000b020  08 04 0d 25 12 0d dd a4  70 69 63 5f 42 4d 50 0d  |...%....pic_BMP.|
0000b030  25 1c 21 f4 20 4d 61 6b  65 73 20 42 4d 50 20 28  |%.!. Makes BMP (|
0000b040  57 69 6e 64 6f 77 73 20  33 29 20 69 6d 61 67 65  |Windows 3) image|
0000b050  0d 25 26 31 f2 69 70 74  72 28 46 31 25 2c 31 38  |.%&1.iptr(F1%,18|
0000b060  29 3a 77 69 64 74 68 25  3d a4 69 77 6c 3a 68 65  |):width%=.iwl:he|
0000b070  69 67 68 74 25 3d a4 69  77 6c 3a f4 20 53 69 7a  |ight%=.iwl:. Siz|
0000b080  65 0d 25 30 2f f2 69 70  74 72 28 46 31 25 2c 32  |e.%0/.iptr(F1%,2|
0000b090  38 29 3a 63 6f 6c 62 69  74 73 25 3d a4 69 62 3a  |8):colbits%=.ib:|
0000b0a0  f4 20 42 69 74 73 20 70  65 72 20 70 69 78 65 6c  |. Bits per pixel|
0000b0b0  0d 25 3a 9d e7 28 63 6f  6c 62 69 74 73 25 3d 31  |.%:..(colbits%=1|
0000b0c0  29 84 28 63 6f 6c 62 69  74 73 25 3d 32 29 84 28  |).(colbits%=2).(|
0000b0d0  63 6f 6c 62 69 74 73 25  3d 34 29 84 28 63 6f 6c  |colbits%=4).(col|
0000b0e0  62 69 74 73 25 3d 38 29  20 8b 20 f2 65 72 72 6f  |bits%=8) . .erro|
0000b0f0  72 28 2d 31 2c 22 49 20  63 61 6e 20 6f 6e 6c 79  |r(-1,"I can only|
0000b100  20 68 61 6e 64 6c 65 20  31 2c 32 2c 34 20 6f 72  | handle 1,2,4 or|
0000b110  20 38 20 62 69 74 20 70  65 72 20 70 69 78 65 6c  | 8 bit per pixel|
0000b120  20 42 4d 50 20 69 6d 61  67 65 73 20 21 20 54 68  | BMP images ! Th|
0000b130  69 73 20 69 73 20 22 2b  c3 63 6f 6c 62 69 74 73  |is is "+.colbits|
0000b140  25 2b 22 20 62 70 70 2e  22 29 3a 3d a3 0d 25 44  |%+" bpp."):=..%D|
0000b150  39 72 6f 77 62 79 74 65  73 25 3d 28 63 6f 6c 62  |9rowbytes%=(colb|
0000b160  69 74 73 25 2a 77 69 64  74 68 25 2b 37 29 81 38  |its%*width%+7).8|
0000b170  3a f4 20 42 79 74 65 73  20 70 65 72 20 70 69 78  |:. Bytes per pix|
0000b180  65 6c 20 72 6f 77 0d 25  4e 3d f2 69 70 74 72 28  |el row.%N=.iptr(|
0000b190  46 31 25 2c 35 34 29 3a  f2 72 65 61 64 32 34 70  |F1%,54):.read24p|
0000b1a0  61 6c 28 46 31 25 2c 49  6e 50 61 6c 25 28 29 2c  |al(F1%,InPal%(),|
0000b1b0  32 5e 63 6f 6c 62 69 74  73 25 2c 32 2c 31 2c 30  |2^colbits%,2,1,0|
0000b1c0  2c 34 29 0d 25 58 16 49  6e 50 61 6c 25 28 30 29  |,4).%X.InPal%(0)|
0000b1d0  3d 63 6f 6c 62 69 74 73  25 0d 25 62 29 f2 73 65  |=colbits%.%b).se|
0000b1e0  74 28 77 69 64 74 68 25  2c 68 65 69 67 68 74 25  |t(width%,height%|
0000b1f0  2c 32 5e 63 6f 6c 62 69  74 73 25 2c 4d 6f 64 65  |,2^colbits%,Mode|
0000b200  25 29 0d 25 6c 32 e7 a4  61 6c 6c 6f 63 61 74 65  |%).%l2..allocate|
0000b210  5f 73 74 64 28 77 69 64  74 68 25 2c 72 6f 77 62  |_std(width%,rowb|
0000b220  79 74 65 73 25 2c 77 69  64 74 68 25 2c 30 29 20  |ytes%,width%,0) |
0000b230  8b 20 3d a3 0d 25 76 17  e7 a4 6e 65 77 5f 69 6d  |. =..%v...new_im|
0000b240  61 67 65 28 30 29 20 8b  20 3d a3 0d 25 80 4a f2  |age(0) . =..%.J.|
0000b250  69 6d 61 67 65 5f 69 6e  66 6f 28 22 57 69 6e 64  |image_info("Wind|
0000b260  6f 77 73 20 33 20 42 4d  50 22 2c 77 69 64 74 68  |ows 3 BMP",width|
0000b270  25 2c 68 65 69 67 68 74  25 2c 30 2c 63 6f 6c 62  |%,height%,0,colb|
0000b280  69 74 73 25 2c 4d 6f 64  65 25 2c 22 22 2c 22 22  |its%,Mode%,"",""|
0000b290  2c 31 2c 31 29 0d 25 8a  59 f2 76 61 72 28 22 69  |,1,1).%.Y.var("i|
0000b2a0  66 70 31 22 2c a4 69 70  74 72 28 46 31 25 29 29  |fp1",.iptr(F1%))|
0000b2b0  3a f2 76 61 72 28 22 69  6d 67 78 22 2c 77 69 64  |:.var("imgx",wid|
0000b2c0  74 68 25 29 3a f2 76 61  72 28 22 69 6d 67 79 22  |th%):.var("imgy"|
0000b2d0  2c 68 65 69 67 68 74 25  29 3a e7 a4 75 6e 70 61  |,height%):..unpa|
0000b2e0  63 6b 28 22 42 4d 50 22  29 20 8b 20 3d a3 0d 25  |ck("BMP") . =..%|
0000b2f0  94 06 3d b9 0d 25 9e 04  0d 25 a8 0f dd a4 70 69  |..=..%...%....pi|
0000b300  63 5f 54 41 52 47 41 0d  25 b2 22 f4 20 4d 61 6b  |c_TARGA.%.". Mak|
0000b310  65 73 20 54 72 75 65 76  69 73 69 6f 6e 20 54 41  |es Truevision TA|
0000b320  52 47 41 20 69 6d 61 67  65 0d 25 bc 44 69 64 6c  |RGA image.%.Didl|
0000b330  65 6e 25 3d a4 69 62 3a  63 6f 6c 6d 61 70 74 79  |en%=.ib:colmapty|
0000b340  70 65 25 3d a4 69 62 3a  f4 20 4c 65 6e 67 74 68  |pe%=.ib:. Length|
0000b350  20 6f 66 20 49 44 20 73  74 72 69 6e 67 2c 20 63  | of ID string, c|
0000b360  6f 6c 6f 75 72 6d 61 70  20 74 79 70 65 0d 25 c6  |olourmap type.%.|
0000b370  1f 69 6d 61 67 65 74 79  70 65 25 3d a4 69 62 3a  |.imagetype%=.ib:|
0000b380  f4 20 49 6d 61 67 65 20  74 79 70 65 0d 25 d0 3f  |. Image type.%.?|
0000b390  69 6e 64 65 78 25 3d a4  69 64 6c 3a 6c 65 6e 67  |index%=.idl:leng|
0000b3a0  74 68 25 3d a4 69 64 6c  3a f4 20 43 6f 6c 6f 75  |th%=.idl:. Colou|
0000b3b0  72 6d 61 70 20 66 69 72  73 74 20 69 6e 64 65 78  |rmap first index|
0000b3c0  20 26 20 23 69 6e 64 69  63 65 73 0d 25 da 23 63  | & #indices.%.#c|
0000b3d0  6d 61 70 73 69 7a 65 25  3d a4 69 62 3a f4 20 42  |mapsize%=.ib:. B|
0000b3e0  69 74 73 20 70 65 72 20  63 6f 6c 6f 75 72 0d 25  |its per colour.%|
0000b3f0  e4 26 78 6f 72 67 25 3d  a4 69 64 6c 3a 78 6f 72  |.&xorg%=.idl:xor|
0000b400  67 25 3d a4 69 64 6c 3a  f4 20 58 2f 59 20 6f 72  |g%=.idl:. X/Y or|
0000b410  69 67 69 6e 0d 25 ee 2c  77 69 64 74 68 25 3d a4  |igin.%.,width%=.|
0000b420  69 64 6c 3a 68 65 69 67  68 74 25 3d a4 69 64 6c  |idl:height%=.idl|
0000b430  3a f4 20 53 69 7a 65 20  6f 66 20 69 6d 61 67 65  |:. Size of image|
0000b440  0d 25 f8 34 70 69 78 62  69 74 73 25 3d a4 69 62  |.%.4pixbits%=.ib|
0000b450  3a 66 6c 61 67 73 25 3d  a4 69 62 3a f4 20 42 69  |:flags%=.ib:. Bi|
0000b460  74 73 20 70 65 72 20 70  69 78 65 6c 20 26 20 66  |ts per pixel & f|
0000b470  6c 61 67 73 0d 26 02 27  f2 69 73 6b 69 70 28 46  |lags.&.'.iskip(F|
0000b480  31 25 2c 69 64 6c 65 6e  25 29 3a f4 20 53 6b 69  |1%,idlen%):. Ski|
0000b490  70 20 49 44 20 73 74 72  69 6e 67 0d 26 0c 45 66  |p ID string.&.Ef|
0000b4a0  61 74 74 72 25 3d 66 6c  61 67 73 25 80 26 30 46  |attr%=flags%.&0F|
0000b4b0  3a 66 6c 69 70 73 25 3d  28 66 6c 61 67 73 25 80  |:flips%=(flags%.|
0000b4c0  26 33 30 29 3e 3e 34 3a  f4 20 41 74 74 72 69 62  |&30)>>4:. Attrib|
0000b4d0  75 74 65 73 2c 20 66 6c  69 70 2d 66 6c 61 67 73  |utes, flip-flags|
0000b4e0  0d 26 16 2d 66 6c 65 61  76 65 25 3d 28 66 6c 61  |.&.-fleave%=(fla|
0000b4f0  67 73 25 80 26 43 30 29  3e 3e 36 3a f4 20 49 6e  |gs%.&C0)>>6:. In|
0000b500  74 65 72 6c 65 61 76 65  20 63 6f 64 65 0d 26 20  |terleave code.& |
0000b510  62 e7 70 69 78 62 69 74  73 25 3e 38 20 8c 20 e7  |b.pixbits%>8 . .|
0000b520  63 6f 6c 6d 61 70 74 79  70 65 25 3c 3e 30 20 8c  |colmaptype%<>0 .|
0000b530  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 63 61  | .error(-1,"I ca|
0000b540  6e 6e 6f 74 20 68 61 6e  64 6c 65 20 3e 38 20 62  |nnot handle >8 b|
0000b550  69 74 20 54 41 52 47 41  20 77 69 74 68 20 63 6f  |it TARGA with co|
0000b560  6c 6f 75 72 6d 61 70 73  20 21 22 29 3a 3d a3 0d  |lourmaps !"):=..|
0000b570  26 2a 44 e7 66 6c 65 61  76 65 25 3c 3e 30 20 8c  |&*D.fleave%<>0 .|
0000b580  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 63 61  | .error(-1,"I ca|
0000b590  6e 6e 6f 74 20 68 61 6e  64 6c 65 20 69 6e 74 65  |nnot handle inte|
0000b5a0  72 6c 61 63 65 64 20 54  41 52 47 41 20 21 22 29  |rlaced TARGA !")|
0000b5b0  3a 3d a3 0d 26 34 20 49  6e 50 61 6c 25 28 29 3d  |:=..&4 InPal%()=|
0000b5c0  30 3a f4 20 43 6c 65 61  72 20 63 6f 6c 6f 75 72  |0:. Clear colour|
0000b5d0  6d 61 70 0d 26 3e 15 e7  63 6f 6c 6d 61 70 74 79  |map.&>..colmapty|
0000b5e0  70 65 25 3c 3e 30 20 8c  0d 26 48 23 20 e3 20 63  |pe%<>0 ..&H# . c|
0000b5f0  25 3d 69 6e 64 65 78 25  2b 31 20 b8 20 69 6e 64  |%=index%+1 . ind|
0000b600  65 78 25 2b 6c 65 6e 67  74 68 25 0d 26 52 13 20  |ex%+length%.&R. |
0000b610  c8 8e 20 63 6d 61 70 73  69 7a 65 25 20 ca 0d 26  |.. cmapsize% ..&|
0000b620  5c 31 20 20 c9 20 38 20  3a 20 69 25 3d a4 69 62  |\1  . 8 : i%=.ib|
0000b630  3a 49 6e 50 61 6c 25 28  63 25 29 3d 69 25 20 84  |:InPal%(c%)=i% .|
0000b640  20 69 25 3c 3c 38 20 84  20 69 25 3c 3c 31 36 0d  | i%<<8 . i%<<16.|
0000b650  26 66 4f 20 20 c9 20 31  35 2c 31 36 20 3a 20 69  |&fO  . 15,16 : i|
0000b660  25 3d a4 69 64 6c 3a 49  6e 50 61 6c 25 28 63 25  |%=.idl:InPal%(c%|
0000b670  29 3d 28 28 69 25 80 26  37 43 30 30 29 3c 3c 39  |)=((i%.&7C00)<<9|
0000b680  29 2b 28 28 69 25 80 26  33 45 30 29 3c 3c 36 29  |)+((i%.&3E0)<<6)|
0000b690  2b 28 28 69 25 80 26 31  46 29 3c 3c 33 29 0d 26  |+((i%.&1F)<<3).&|
0000b6a0  70 1c 20 20 c9 20 32 34  20 3a 20 49 6e 50 61 6c  |p.  . 24 : InPal|
0000b6b0  25 28 63 25 29 3d a4 69  74 6c 0d 26 7a 26 20 20  |%(c%)=.itl.&z&  |
0000b6c0  c9 20 33 32 20 3a 20 49  6e 50 61 6c 25 28 63 25  |. 32 : InPal%(c%|
0000b6d0  29 3d a4 69 77 6c 20 80  20 26 46 46 46 46 46 46  |)=.iwl . &FFFFFF|
0000b6e0  0d 26 84 06 20 cb 0d 26  8e 06 20 ed 0d 26 98 1c  |.&.. ..&.. ..&..|
0000b6f0  cc 20 f2 67 72 65 79 70  61 6c 28 49 6e 50 61 6c  |. .greypal(InPal|
0000b700  25 28 29 2c 38 2c 31 29  0d 26 a2 05 cd 0d 26 ac  |%(),8,1).&....&.|
0000b710  27 49 6e 50 61 6c 25 28  30 29 3d 70 69 78 62 69  |'InPal%(0)=pixbi|
0000b720  74 73 25 3a f4 20 42 69  74 73 20 70 65 72 20 70  |ts%:. Bits per p|
0000b730  69 78 65 6c 0d 26 b6 3f  72 6c 65 3d 28 69 6d 61  |ixel.&.?rle=(ima|
0000b740  67 65 74 79 70 65 25 3e  3d 39 29 80 28 69 6d 61  |getype%>=9).(ima|
0000b750  67 65 74 79 70 65 25 3c  3d 31 31 29 3a f4 20 52  |getype%<=11):. R|
0000b760  75 6e 20 6c 65 6e 67 74  68 20 65 6e 63 6f 64 65  |un length encode|
0000b770  64 20 3f 0d 26 c0 6c e7  70 69 78 62 69 74 73 25  |d ?.&.l.pixbits%|
0000b780  3e 38 20 8c 20 63 6f 64  65 25 3d 32 3a 73 69 7a  |>8 . code%=2:siz|
0000b790  65 32 25 3d 77 69 64 74  68 25 2a 34 20 8b 20 73  |e2%=width%*4 . s|
0000b7a0  69 7a 65 32 25 3d 77 69  64 74 68 25 3a e7 28 63  |ize2%=width%:.(c|
0000b7b0  6d 61 70 73 69 7a 65 25  3d 38 29 84 28 63 6f 6c  |mapsize%=8).(col|
0000b7c0  6d 61 70 74 79 70 65 25  3d 30 29 20 8c 20 63 6f  |maptype%=0) . co|
0000b7d0  64 65 25 3d 31 20 8b 20  63 6f 64 65 25 3d 30 0d  |de%=1 . code%=0.|
0000b7e0  26 ca 22 f2 73 65 74 28  77 69 64 74 68 25 2c 68  |&.".set(width%,h|
0000b7f0  65 69 67 68 74 25 2c 32  35 36 2c 4d 6f 64 65 25  |eight%,256,Mode%|
0000b800  29 0d 26 d4 2f e7 a4 61  6c 6c 6f 63 61 74 65 5f  |).&./..allocate_|
0000b810  73 74 64 28 77 69 64 74  68 25 2c 73 69 7a 65 32  |std(width%,size2|
0000b820  25 2c 30 2c 73 69 7a 65  32 25 29 20 8b 20 3d a3  |%,0,size2%) . =.|
0000b830  0d 26 de 1b e7 a4 6e 65  77 5f 69 6d 61 67 65 28  |.&....new_image(|
0000b840  72 6f 6f 6d 25 29 20 8b  20 3d a3 0d 26 e8 2a e7  |room%) . =..&.*.|
0000b850  72 6c 65 20 8c 20 63 6f  6d 70 72 24 3d 22 52 75  |rle . compr$="Ru|
0000b860  6e 20 6c 65 6e 67 74 68  22 20 8b 20 63 6f 6d 70  |n length" . comp|
0000b870  72 24 3d 22 22 0d 26 f2  7e f2 69 6d 61 67 65 5f  |r$="".&.~.image_|
0000b880  69 6e 66 6f 28 22 54 72  75 65 76 69 73 69 6f 6e  |info("Truevision|
0000b890  20 54 41 52 47 41 22 2c  77 69 64 74 68 25 2c 68  | TARGA",width%,h|
0000b8a0  65 69 67 68 74 25 2c 63  6f 64 65 25 2c 70 69 78  |eight%,code%,pix|
0000b8b0  62 69 74 73 25 2c 4d 6f  64 65 25 2c 63 6f 6d 70  |bits%,Mode%,comp|
0000b8c0  72 24 2c 22 22 2c 46 6c  65 6e 25 2d a4 69 70 74  |r$,"",Flen%-.ipt|
0000b8d0  72 28 46 31 25 29 2c 28  77 69 64 74 68 25 2a 68  |r(F1%),(width%*h|
0000b8e0  65 69 67 68 74 25 2a 70  69 78 62 69 74 73 25 29  |eight%*pixbits%)|
0000b8f0  81 38 29 0d 26 fc 80 f2  76 61 72 28 22 6f 72 64  |.8).&...var("ord|
0000b900  72 22 2c 66 6c 69 70 73  25 29 3a f2 76 61 72 28  |r",flips%):.var(|
0000b910  22 69 66 70 31 22 2c a4  69 70 74 72 28 46 31 25  |"ifp1",.iptr(F1%|
0000b920  29 29 3a f2 76 61 72 28  22 69 6d 67 78 22 2c 77  |)):.var("imgx",w|
0000b930  69 64 74 68 25 29 3a f2  76 61 72 28 22 69 6d 67  |idth%):.var("img|
0000b940  79 22 2c 68 65 69 67 68  74 25 29 3a f2 76 61 72  |y",height%):.var|
0000b950  28 22 63 6f 6d 70 22 2c  72 6c 65 29 3a e7 a4 75  |("comp",rle):..u|
0000b960  6e 70 61 63 6b 28 22 54  41 52 47 41 22 29 20 8b  |npack("TARGA") .|
0000b970  20 3d a3 0d 27 06 06 3d  b9 0d 27 10 04 0d 27 1a  | =..'..=..'...'.|
0000b980  11 dd a4 70 69 63 5f 50  42 4d 50 4c 55 53 0d 27  |...pic_PBMPLUS.'|
0000b990  24 19 f4 20 4d 61 6b 65  73 20 50 42 4d 50 4c 55  |$.. Makes PBMPLU|
0000b9a0  53 20 69 6d 61 67 65 0d  27 2e 33 74 79 70 65 24  |S image.'.3type$|
0000b9b0  3d a4 69 73 74 72 69 6e  67 28 46 31 25 2c 32 29  |=.istring(F1%,2)|
0000b9c0  3a f2 70 62 6d 5f 77 68  69 74 65 3a f4 20 50 42  |:.pbm_white:. PB|
0000b9d0  4d 50 4c 55 53 20 74 79  70 65 0d 27 38 24 74 79  |MPLUS type.'8$ty|
0000b9e0  70 65 25 3d bb 28 c1 74  79 70 65 24 2c 32 29 29  |pe%=.(.type$,2))|
0000b9f0  3a f4 20 54 79 70 65 20  6e 75 6d 62 65 72 0d 27  |:. Type number.'|
0000ba00  42 3d 77 69 64 74 68 25  3d a4 70 62 6d 5f 64 65  |B=width%=.pbm_de|
0000ba10  63 76 61 6c 3a 68 65 69  67 68 74 25 3d a4 70 62  |cval:height%=.pb|
0000ba20  6d 5f 64 65 63 76 61 6c  3a f4 20 57 69 64 74 68  |m_decval:. Width|
0000ba30  20 61 6e 64 20 68 65 69  67 68 74 0d 27 4c 0e c8  | and height.'L..|
0000ba40  8e 20 74 79 70 65 25 20  ca 0d 27 56 30 20 c9 20  |. type% ..'V0 . |
0000ba50  31 2c 34 20 3a 20 63 6f  64 65 25 3d 31 3a 6d 61  |1,4 : code%=1:ma|
0000ba60  78 76 61 6c 25 3d 2d 31  3a 62 70 70 25 3d 31 3a  |xval%=-1:bpp%=1:|
0000ba70  f4 20 42 69 6c 65 76 65  6c 0d 27 60 41 20 20 f2  |. Bilevel.'`A  .|
0000ba80  67 72 65 79 70 61 6c 28  49 6e 50 61 6c 25 28 29  |greypal(InPal%()|
0000ba90  2c 31 2c 2d 31 29 3a f4  20 42 69 6c 65 76 65 6c  |,1,-1):. Bilevel|
0000baa0  20 70 61 6c 65 74 74 65  20 28 30 3d 77 68 69 74  | palette (0=whit|
0000bab0  65 2c 31 3d 62 6c 61 63  6b 29 0d 27 6a 2b 20 c9  |e,1=black).'j+ .|
0000bac0  20 32 2c 35 20 3a 20 6d  61 78 76 61 6c 25 3d a4  | 2,5 : maxval%=.|
0000bad0  70 62 6d 5f 64 65 63 76  61 6c 3a f4 20 4d 61 78  |pbm_decval:. Max|
0000bae0  20 67 72 65 79 0d 27 74  4a 20 20 e7 6d 61 78 76  | grey.'tJ  .maxv|
0000baf0  61 6c 25 3e 32 35 35 20  8c 20 f2 65 72 72 6f 72  |al%>255 . .error|
0000bb00  28 2d 31 2c 22 49 20 63  61 6e 6e 6f 74 20 72 65  |(-1,"I cannot re|
0000bb10  61 64 20 3e 32 35 36 2d  6c 65 76 65 6c 20 67 72  |ad >256-level gr|
0000bb20  65 79 20 50 42 4d 50 4c  55 53 22 29 3a 3d a3 0d  |ey PBMPLUS"):=..|
0000bb30  27 7e 3e 20 20 63 6f 64  65 25 3d 31 3a 62 70 70  |'~>  code%=1:bpp|
0000bb40  25 3d a4 63 6f 6c 73 74  6f 62 70 70 28 31 2b 6d  |%=.colstobpp(1+m|
0000bb50  61 78 76 61 6c 25 29 3a  f4 20 47 72 65 79 2c 20  |axval%):. Grey, |
0000bb60  63 61 6c 63 75 6c 61 74  65 20 62 70 70 0d 27 88  |calculate bpp.'.|
0000bb70  71 20 20 49 6e 50 61 6c  25 28 30 29 3d 62 70 70  |q  InPal%(0)=bpp|
0000bb80  25 3a 73 74 65 70 3d 32  35 35 2f 6d 61 78 76 61  |%:step=255/maxva|
0000bb90  6c 25 3a 76 3d 30 3a e3  20 63 25 3d 30 20 b8 20  |l%:v=0:. c%=0 . |
0000bba0  6d 61 78 76 61 6c 25 3a  76 25 3d a8 76 3a 49 6e  |maxval%:v%=.v:In|
0000bbb0  50 61 6c 25 28 63 25 2b  31 29 3d 76 25 84 76 25  |Pal%(c%+1)=v%.v%|
0000bbc0  3c 3c 38 84 76 25 3c 3c  31 36 3a 76 2b 3d 73 74  |<<8.v%<<16:v+=st|
0000bbd0  65 70 3a ed 3a f4 20 50  61 6c 65 74 74 65 0d 27  |ep:.:. Palette.'|
0000bbe0  92 2c 20 c9 20 33 2c 36  20 3a 20 6d 61 78 76 61  |., . 3,6 : maxva|
0000bbf0  6c 25 3d a4 70 62 6d 5f  64 65 63 76 61 6c 3a f4  |l%=.pbm_decval:.|
0000bc00  20 4d 61 78 20 72 2f 67  2f 62 0d 27 9c 49 20 20  | Max r/g/b.'.I  |
0000bc10  e7 6d 61 78 76 61 6c 25  3e 32 35 35 20 8c 20 f2  |.maxval%>255 . .|
0000bc20  65 72 72 6f 72 28 2d 31  2c 22 49 20 63 61 6e 6e  |error(-1,"I cann|
0000bc30  6f 74 20 72 65 61 64 20  3e 32 35 36 2d 6c 65 76  |ot read >256-lev|
0000bc40  65 6c 20 52 47 42 20 50  42 4d 50 4c 55 53 22 29  |el RGB PBMPLUS")|
0000bc50  3a 3d a3 0d 27 a6 2e 20  20 63 6f 64 65 25 3d 32  |:=..'..  code%=2|
0000bc60  3a 62 70 63 25 3d a4 63  6f 6c 73 74 6f 62 70 70  |:bpc%=.colstobpp|
0000bc70  28 31 2b 6d 61 78 76 61  6c 25 29 3a f4 20 52 47  |(1+maxval%):. RG|
0000bc80  42 0d 27 b0 24 20 20 e7  62 70 63 25 3c 33 20 8c  |B.'.$  .bpc%<3 .|
0000bc90  20 62 70 70 25 3d 39 20  8b 20 62 70 70 25 3d 33  | bpp%=9 . bpp%=3|
0000bca0  2a 62 70 63 25 0d 27 ba  5b 20 20 49 6e 50 61 6c  |*bpc%.'.[  InPal|
0000bcb0  25 28 30 29 3d 62 70 70  25 3a 73 74 65 70 3d 32  |%(0)=bpp%:step=2|
0000bcc0  35 35 2f 6d 61 78 76 61  6c 25 3a 76 3d 30 3a e3  |55/maxval%:v=0:.|
0000bcd0  20 63 25 3d 30 20 b8 20  6d 61 78 76 61 6c 25 3a  | c%=0 . maxval%:|
0000bce0  70 62 6d 69 6e 74 25 3f  63 25 3d a8 76 3a 76 2b  |pbmint%?c%=.v:v+|
0000bcf0  3d 73 74 65 70 3a ed 3a  f4 20 49 6e 74 6d 61 70  |=step:.:. Intmap|
0000bd00  0d 27 c4 05 cb 0d 27 ce  54 e7 74 79 70 65 25 3c  |.'....'.T.type%<|
0000bd10  3d 33 20 8c 20 f2 70 62  6d 5f 77 68 69 74 65 20  |=3 . .pbm_white |
0000bd20  8b 20 63 25 3d a4 69 62  3a e7 28 63 25 3d 33 32  |. c%=.ib:.(c%=32|
0000bd30  29 84 28 63 25 3d 39 29  84 28 63 25 3d 31 30 29  |).(c%=9).(c%=10)|
0000bd40  84 28 63 25 3d 31 33 29  20 8b 20 f2 69 73 6b 69  |.(c%=13) . .iski|
0000bd50  70 28 46 31 25 2c 2d 31  29 0d 27 d8 4c e7 62 70  |p(F1%,-1).'.L.bp|
0000bd60  70 25 3e 38 20 8c 20 72  6f 77 62 79 74 65 73 25  |p%>8 . rowbytes%|
0000bd70  3d 34 2a 77 69 64 74 68  25 3a 63 6f 6c 62 69 74  |=4*width%:colbit|
0000bd80  73 25 3d 38 20 8b 20 72  6f 77 62 79 74 65 73 25  |s%=8 . rowbytes%|
0000bd90  3d 77 69 64 74 68 25 3a  63 6f 6c 62 69 74 73 25  |=width%:colbits%|
0000bda0  3d 62 70 70 25 0d 27 e2  29 f2 73 65 74 28 77 69  |=bpp%.'.).set(wi|
0000bdb0  64 74 68 25 2c 68 65 69  67 68 74 25 2c 32 5e 63  |dth%,height%,2^c|
0000bdc0  6f 6c 62 69 74 73 25 2c  4d 6f 64 65 25 29 0d 27  |olbits%,Mode%).'|
0000bdd0  ec 27 e7 74 79 70 65 25  3d 34 20 8c 20 73 69 7a  |.'.type%=4 . siz|
0000bde0  65 31 25 3d 77 69 64 74  68 25 20 8b 20 73 69 7a  |e1%=width% . siz|
0000bdf0  65 31 25 3d 30 0d 27 f6  32 e7 a4 61 6c 6c 6f 63  |e1%=0.'.2..alloc|
0000be00  61 74 65 5f 73 74 64 28  77 69 64 74 68 25 2c 72  |ate_std(width%,r|
0000be10  6f 77 62 79 74 65 73 25  2c 73 69 7a 65 31 25 2c  |owbytes%,size1%,|
0000be20  30 29 20 8b 20 3d a3 0d  28 00 17 e7 a4 6e 65 77  |0) . =..(....new|
0000be30  5f 69 6d 61 67 65 28 30  29 20 8b 20 3d a3 0d 28  |_image(0) . =..(|
0000be40  0a 4b f2 69 6d 61 67 65  5f 69 6e 66 6f 28 22 50  |.K.image_info("P|
0000be50  42 4d 50 4c 55 53 20 22  2b 74 79 70 65 24 2c 77  |BMPLUS "+type$,w|
0000be60  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 63 6f  |idth%,height%,co|
0000be70  64 65 25 2c 62 70 70 25  2c 4d 6f 64 65 25 2c 22  |de%,bpp%,Mode%,"|
0000be80  22 2c 22 22 2c 31 2c 31  29 0d 28 14 85 f2 76 61  |","",1,1).(...va|
0000be90  72 28 22 69 66 70 31 22  2c a4 69 70 74 72 28 46  |r("ifp1",.iptr(F|
0000bea0  31 25 29 29 3a f2 76 61  72 28 22 69 6d 67 78 22  |1%)):.var("imgx"|
0000beb0  2c 77 69 64 74 68 25 29  3a f2 76 61 72 28 22 69  |,width%):.var("i|
0000bec0  6d 67 79 22 2c 68 65 69  67 68 74 25 29 3a f2 76  |mgy",height%):.v|
0000bed0  61 72 28 22 73 63 74 79  22 2c 74 79 70 65 25 29  |ar("scty",type%)|
0000bee0  3a f2 76 61 72 28 22 6d  61 70 31 22 2c 70 62 6d  |:.var("map1",pbm|
0000bef0  69 6e 74 25 29 3a e7 a4  75 6e 70 61 63 6b 28 22  |int%):..unpack("|
0000bf00  50 42 4d 50 4c 55 53 22  29 20 8b 20 3d a3 0d 28  |PBMPLUS") . =..(|
0000bf10  1e 06 3d b9 0d 28 28 04  0d 28 32 0f dd f2 70 62  |..=..((..(2...pb|
0000bf20  6d 5f 77 68 69 74 65 0d  28 3c 2b f4 20 53 6b 69  |m_white.(<+. Ski|
0000bf30  70 73 20 50 42 4d 50 4c  55 53 20 77 68 69 74 65  |ps PBMPLUS white|
0000bf40  73 70 61 63 65 20 61 6e  64 20 63 6f 6d 6d 65 6e  |space and commen|
0000bf50  74 73 0d 28 46 0b ea 20  63 25 2c 6f 6b 0d 28 50  |ts.(F.. c%,ok.(P|
0000bf60  14 6f 6b 3d a3 3a f4 20  45 78 69 74 20 66 6c 61  |.ok=.:. Exit fla|
0000bf70  67 0d 28 5a 05 f5 0d 28  64 30 f5 20 63 25 3d a4  |g.(Z...(d0. c%=.|
0000bf80  69 62 3a fd 20 ac 28 28  63 25 3d 33 32 29 84 28  |ib:. .((c%=32).(|
0000bf90  63 25 3d 39 29 84 28 63  25 3d 31 33 29 84 28 63  |c%=9).(c%=13).(c|
0000bfa0  25 3d 31 30 29 29 0d 28  6e 30 e7 63 25 3d 97 22  |%=10)).(n0.c%=."|
0000bfb0  23 22 20 8c 20 f5 20 63  25 3d a4 69 62 3a fd 20  |#" . . c%=.ib:. |
0000bfc0  28 63 25 3d 31 33 29 84  28 63 25 3d 31 30 29 20  |(c%=13).(c%=10) |
0000bfd0  8b 20 6f 6b 3d b9 0d 28  78 08 fd 20 6f 6b 0d 28  |. ok=..(x.. ok.(|
0000bfe0  82 30 f2 69 73 6b 69 70  28 46 31 25 2c 2d 31 29  |.0.iskip(F1%,-1)|
0000bff0  3a f4 20 53 74 65 70 20  62 61 63 6b 20 74 6f 20  |:. Step back to |
0000c000  6c 61 73 74 20 6e 6f 6e  2d 77 68 69 74 65 0d 28  |last non-white.(|
0000c010  8c 05 e1 0d 28 96 04 0d  28 a0 10 dd a4 70 62 6d  |....(...(....pbm|
0000c020  5f 64 65 63 76 61 6c 0d  28 aa 39 f4 20 53 6b 69  |_decval.(.9. Ski|
0000c030  70 73 20 77 68 69 74 65  73 70 61 63 65 2c 20 72  |ps whitespace, r|
0000c040  65 74 75 72 6e 73 20 64  65 63 69 6d 61 6c 20 76  |eturns decimal v|
0000c050  61 6c 75 65 20 66 6f 72  20 50 42 4d 50 4c 55 53  |alue for PBMPLUS|
0000c060  0d 28 b4 0b ea 20 63 25  2c 76 24 0d 28 be 0e f2  |.(... c%,v$.(...|
0000c070  70 62 6d 5f 77 68 69 74  65 0d 28 c8 17 63 25 3d  |pbm_white.(..c%=|
0000c080  a4 69 62 3a 76 24 3d 22  22 3a f4 20 49 6e 69 74  |.ib:v$="":. Init|
0000c090  0d 28 d2 2d c8 95 20 28  63 25 3e 3d 97 22 30 22  |.(.-.. (c%>=."0"|
0000c0a0  29 80 28 63 25 3c 3d 97  22 39 22 29 3a 76 24 2b  |).(c%<=."9"):v$+|
0000c0b0  3d bd 63 25 3a 63 25 3d  a4 69 62 3a ce 0d 28 dc  |=.c%:c%=.ib:..(.|
0000c0c0  08 3d bb 76 24 0d 28 e6  05 20 0d 28 f0 0e dd a4  |.=.v$.(.. .(....|
0000c0d0  70 69 63 5f 5a 56 44 41  0d 28 fa 34 f4 20 4d 61  |pic_ZVDA.(.4. Ma|
0000c0e0  6b 65 73 20 5a 65 72 69  64 61 6a 68 20 56 69 64  |kes Zeridajh Vid|
0000c0f0  65 6f 20 44 69 67 69 74  69 73 65 72 20 41 6e 69  |eo Digitiser Ani|
0000c100  6d 61 74 69 6f 6e 20 69  6d 61 67 65 0d 29 04 6d  |mation image.).m|
0000c110  69 64 24 3d a4 69 73 74  72 69 6e 67 28 46 31 25  |id$=.istring(F1%|
0000c120  2c 34 29 3a e7 69 64 24  3c 3e 22 5a 56 44 41 22  |,4):.id$<>"ZVDA"|
0000c130  20 8c 20 f2 65 72 72 6f  72 28 2d 31 2c 22 54 68  | . .error(-1,"Th|
0000c140  69 73 20 69 73 20 6e 6f  74 20 61 20 5a 65 72 69  |is is not a Zeri|
0000c150  64 61 6a 68 20 56 69 64  65 6f 20 44 69 67 69 74  |dajh Video Digit|
0000c160  69 73 65 72 20 41 6e 69  6d 61 74 69 6f 6e 20 66  |iser Animation f|
0000c170  69 6c 65 20 21 22 29 3a  e1 0d 29 0e 3e 76 65 72  |ile !"):..).>ver|
0000c180  73 69 6f 6e 25 3d a4 69  77 6c 3a 6d 6f 64 65 25  |sion%=.iwl:mode%|
0000c190  3d a4 69 77 6c 3a f4 20  56 65 72 73 69 6f 6e 20  |=.iwl:. Version |
0000c1a0  6f 66 20 6d 61 6b 65 72  20 26 20 6d 6f 64 65 20  |of maker & mode |
0000c1b0  6f 66 20 70 69 63 73 0d  29 18 2b 77 69 64 74 68  |of pics.).+width|
0000c1c0  25 3d a4 69 77 6c 3a 68  65 69 67 68 74 25 3d a4  |%=.iwl:height%=.|
0000c1d0  69 77 6c 3a f4 20 53 69  7a 65 20 6f 66 20 70 69  |iwl:. Size of pi|
0000c1e0  63 73 0d 29 22 3f 70 69  63 74 75 72 65 73 25 3d  |cs.)"?pictures%=|
0000c1f0  a4 69 77 6c 3a 6f 66 66  31 25 3d a4 69 77 6c 3a  |.iwl:off1%=.iwl:|
0000c200  f4 20 4e 75 6d 62 65 72  20 6f 66 20 70 69 63 73  |. Number of pics|
0000c210  2c 20 6f 66 66 73 65 74  20 74 6f 20 66 69 72 73  |, offset to firs|
0000c220  74 0d 29 2c be e7 28 49  6d 61 67 65 4e 72 25 3e  |t.),..(ImageNr%>|
0000c230  30 29 20 80 20 28 49 6d  61 67 65 4e 72 25 3c 3d  |0) . (ImageNr%<=|
0000c240  70 69 63 74 75 72 65 73  25 29 20 8c 20 70 69 63  |pictures%) . pic|
0000c250  74 75 72 65 25 3d 49 6d  61 67 65 4e 72 25 20 8b  |ture%=ImageNr% .|
0000c260  20 f2 65 72 72 6f 72 28  2d 31 2c 22 54 68 69 73  | .error(-1,"This|
0000c270  20 5a 56 44 41 20 66 69  6c 65 20 63 6f 6e 74 61  | ZVDA file conta|
0000c280  69 6e 73 20 22 2b c3 28  70 69 63 74 75 72 65 73  |ins "+.(pictures|
0000c290  25 29 2b 22 20 69 6d 61  67 65 73 2e 20 53 65 6c  |%)+" images. Sel|
0000c2a0  65 63 74 20 27 31 27 2d  27 22 2b c3 28 70 69 63  |ect '1'-'"+.(pic|
0000c2b0  74 75 72 65 73 25 29 2b  22 27 20 69 6e 20 74 68  |tures%)+"' in th|
0000c2c0  65 20 27 49 6d 61 67 65  20 6e 75 6d 62 65 72 27  |e 'Image number'|
0000c2d0  20 73 75 62 6d 65 6e 75  20 21 22 29 3a 3d a3 0d  | submenu !"):=..|
0000c2e0  29 36 24 63 6f 6d 70 72  25 3d a4 69 77 6c 3a f4  |)6$compr%=.iwl:.|
0000c2f0  20 43 6f 6d 70 72 65 73  73 69 6f 6e 20 6d 65 74  | Compression met|
0000c300  68 6f 64 0d 29 40 51 e7  63 6f 6d 70 72 25 3c 3e  |hod.)@Q.compr%<>|
0000c310  31 20 8c 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |1 . .error(-1,"I|
0000c320  20 6f 6e 6c 79 20 6b 6e  6f 77 20 42 69 74 6d 61  | only know Bitma|
0000c330  70 20 63 6f 6d 70 72 65  73 73 69 6f 6e 2c 20 6e  |p compression, n|
0000c340  6f 20 23 22 2b c3 28 63  6f 6d 70 72 25 29 2b 22  |o #"+.(compr%)+"|
0000c350  20 21 22 29 0d 29 4a 2c  f2 69 70 74 72 28 46 31  | !").)J,.iptr(F1|
0000c360  25 2c 6f 66 66 31 25 29  3a f4 20 53 6b 69 70 20  |%,off1%):. Skip |
0000c370  74 6f 20 66 69 72 73 74  20 70 69 63 74 75 72 65  |to first picture|
0000c380  0d 29 54 3e 73 25 3d 31  3a c8 95 20 73 25 3c 70  |.)T>s%=1:.. s%<p|
0000c390  69 63 74 75 72 65 25 3a  f2 69 73 6b 69 70 28 46  |icture%:.iskip(F|
0000c3a0  31 25 2c a4 69 77 6c 2d  34 29 3a 73 25 2b 3d 31  |1%,.iwl-4):s%+=1|
0000c3b0  3a ce 3a f4 20 47 6f 20  74 6f 20 70 69 63 0d 29  |:.:. Go to pic.)|
0000c3c0  5e 2a 63 6f 6d 70 6c 65  6e 25 3d a4 69 77 6c 3a  |^*complen%=.iwl:|
0000c3d0  f4 20 4c 65 6e 67 74 68  20 6f 66 20 70 69 63 74  |. Length of pict|
0000c3e0  75 72 65 20 64 61 74 61  0d 29 68 32 63 6f 6c 62  |ure data.)h2colb|
0000c3f0  69 74 73 25 3d 32 5e a4  6d 6f 64 65 5f 76 61 72  |its%=2^.mode_var|
0000c400  28 6d 6f 64 65 25 2c 39  29 3a f4 20 42 69 74 73  |(mode%,9):. Bits|
0000c410  20 70 65 72 20 70 69 78  65 6c 0d 29 72 31 f2 67  | per pixel.)r1.g|
0000c420  72 65 79 70 61 6c 28 49  6e 50 61 6c 25 28 29 2c  |reypal(InPal%(),|
0000c430  63 6f 6c 62 69 74 73 25  2c 31 29 3a f4 20 50 69  |colbits%,1):. Pi|
0000c440  63 73 20 61 72 65 20 67  72 65 79 0d 29 7c 3f 72  |cs are grey.)|?r|
0000c450  6f 77 62 79 74 65 73 25  3d 28 28 63 6f 6c 62 69  |owbytes%=((colbi|
0000c460  74 73 25 2a 77 69 64 74  68 25 2b 36 33 29 81 36  |ts%*width%+63).6|
0000c470  34 29 2a 38 3a f4 20 42  79 74 65 73 20 70 65 72  |4)*8:. Bytes per|
0000c480  20 70 69 78 65 6c 20 72  6f 77 0d 29 86 29 f2 73  | pixel row.).).s|
0000c490  65 74 28 77 69 64 74 68  25 2c 68 65 69 67 68 74  |et(width%,height|
0000c4a0  25 2c 32 5e 63 6f 6c 62  69 74 73 25 2c 4d 6f 64  |%,2^colbits%,Mod|
0000c4b0  65 25 29 0d 29 90 35 62  69 74 6d 61 70 6c 65 6e  |e%).).5bitmaplen|
0000c4c0  25 3d 68 65 69 67 68 74  25 2a 72 6f 77 62 79 74  |%=height%*rowbyt|
0000c4d0  65 73 25 81 38 3a f4 20  4c 65 6e 67 74 68 20 6f  |es%.8:. Length o|
0000c4e0  66 20 62 69 74 6d 61 70  0d 29 9a 3b e7 a4 61 6c  |f bitmap.).;..al|
0000c4f0  6c 6f 63 61 74 65 5f 73  74 64 28 77 69 64 74 68  |locate_std(width|
0000c500  25 2c 72 6f 77 62 79 74  65 73 25 2c 77 69 64 74  |%,rowbytes%,widt|
0000c510  68 25 2c 62 69 74 6d 61  70 6c 65 6e 25 29 20 8b  |h%,bitmaplen%) .|
0000c520  20 3d a3 0d 29 a4 17 e7  a4 6e 65 77 5f 69 6d 61  | =..)....new_ima|
0000c530  67 65 28 30 29 20 8b 20  3d a3 0d 29 ae 97 f2 69  |ge(0) . =..)...i|
0000c540  6d 61 67 65 5f 69 6e 66  6f 28 22 5a 65 72 69 64  |mage_info("Zerid|
0000c550  61 6a 68 20 56 44 41 22  2c 77 69 64 74 68 25 2c  |ajh VDA",width%,|
0000c560  68 65 69 67 68 74 25 2c  31 2c 63 6f 6c 62 69 74  |height%,1,colbit|
0000c570  73 25 2c 4d 6f 64 65 25  2c 22 42 69 74 6d 61 70  |s%,Mode%,"Bitmap|
0000c580  22 2c c3 70 69 63 74 75  72 65 73 25 2b 22 20 69  |",.pictures%+" i|
0000c590  6d 61 67 65 73 20 28 74  68 69 73 20 69 73 20 22  |mages (this is "|
0000c5a0  2b a4 74 69 6d 65 73 28  70 69 63 74 75 72 65 25  |+.times(picture%|
0000c5b0  29 2b 22 29 22 2c 63 6f  6d 70 6c 65 6e 25 2c 72  |)+")",complen%,r|
0000c5c0  6f 77 62 79 74 65 73 25  2a 68 65 69 67 68 74 25  |owbytes%*height%|
0000c5d0  29 0d 29 b8 70 f2 76 61  72 28 22 69 66 70 31 22  |).).p.var("ifp1"|
0000c5e0  2c a4 69 70 74 72 28 46  31 25 29 29 3a f2 76 61  |,.iptr(F1%)):.va|
0000c5f0  72 28 22 69 6d 67 78 22  2c 77 69 64 74 68 25 29  |r("imgx",width%)|
0000c600  3a f2 76 61 72 28 22 69  6d 67 79 22 2c 68 65 69  |:.var("imgy",hei|
0000c610  67 68 74 25 29 3a f2 76  61 72 28 22 6d 61 78 63  |ght%):.var("maxc|
0000c620  22 2c 63 6f 6d 70 6c 65  6e 25 29 3a e7 a4 75 6e  |",complen%):..un|
0000c630  70 61 63 6b 28 22 5a 56  44 41 22 29 20 8b 20 3d  |pack("ZVDA") . =|
0000c640  a3 0d 29 c2 06 3d b9 0d  29 cc 04 0d 29 d6 59 dd  |..)..=..)...).Y.|
0000c650  f2 69 6d 61 67 65 5f 69  6e 66 6f 28 74 79 70 65  |.image_info(type|
0000c660  24 2c 77 69 64 74 68 25  2c 68 65 69 67 68 74 25  |$,width%,height%|
0000c670  2c 63 6f 64 65 25 2c 63  6f 6c 62 69 74 73 25 2c  |,code%,colbits%,|
0000c680  6d 6f 64 65 25 2c 63 6f  6d 70 72 24 2c 69 6e 66  |mode%,compr$,inf|
0000c690  6f 24 2c 64 61 74 61 6c  65 6e 25 2c 70 69 63 6c  |o$,datalen%,picl|
0000c6a0  65 6e 25 29 0d 29 e0 26  f4 20 53 65 74 73 20 69  |en%).).&. Sets i|
0000c6b0  6e 66 6f 72 6d 61 74 69  6f 6e 20 61 62 6f 75 74  |nformation about|
0000c6c0  20 74 68 65 20 69 6d 61  67 65 0d 29 ea 1d ea 20  | the image.)... |
0000c6d0  66 61 63 74 6f 72 25 2c  77 25 2c 68 25 2c 63 25  |factor%,w%,h%,c%|
0000c6e0  2c 69 25 2c 69 64 24 0d  29 f4 46 49 6d 67 57 25  |,i%,id$.).FImgW%|
0000c6f0  3d 77 69 64 74 68 25 3a  49 6d 67 48 25 3d 68 65  |=width%:ImgH%=he|
0000c700  69 67 68 74 25 3a 49 6d  67 42 69 74 73 25 3d 63  |ight%:ImgBits%=c|
0000c710  6f 6c 62 69 74 73 25 3a  f4 20 52 65 67 69 73 74  |olbits%:. Regist|
0000c720  65 72 20 72 65 73 6f 6c  75 74 69 6f 6e 0d 29 fe  |er resolution.).|
0000c730  1f 24 49 4d 49 66 6e 25  3d 4c 65 61 66 24 3a 24  |.$IMIfn%=Leaf$:$|
0000c740  49 4d 49 69 74 25 3d 74  79 70 65 24 0d 2a 08 2b  |IMIit%=type$.*.+|
0000c750  e7 69 6e 66 6f 24 3d 22  22 20 8c 20 24 49 4d 49  |.info$="" . $IMI|
0000c760  69 6e 25 3d 22 2d 22 20  8b 20 24 49 4d 49 69 6e  |in%="-" . $IMIin|
0000c770  25 3d 69 6e 66 6f 24 0d  2a 12 1b 24 49 4d 49 69  |%=info$.*..$IMIi|
0000c780  66 25 3d c3 46 6c 65 6e  25 2b 22 20 62 79 74 65  |f%=.Flen%+" byte|
0000c790  73 22 0d 2a 1c 6e e7 63  6f 6d 70 72 24 3d 22 22  |s".*.n.compr$=""|
0000c7a0  20 8c 20 24 49 4d 49 63  6f 25 3d 22 4e 6f 6e 65  | . $IMIco%="None|
0000c7b0  20 28 30 25 29 22 20 8b  20 66 61 63 74 6f 72 25  | (0%)" . factor%|
0000c7c0  3d 31 30 30 2d a8 28 31  30 30 2a 28 64 61 74 61  |=100-.(100*(data|
0000c7d0  6c 65 6e 25 2f 70 69 63  6c 65 6e 25 29 29 3a 24  |len%/piclen%)):$|
0000c7e0  49 4d 49 63 6f 25 3d 63  6f 6d 70 72 24 2b 22 20  |IMIco%=compr$+" |
0000c7f0  28 22 2b c3 66 61 63 74  6f 72 25 2b 22 25 29 22  |("+.factor%+"%)"|
0000c800  0d 2a 26 2c 24 49 4d 49  77 68 25 3d c3 77 69 64  |.*&,$IMIwh%=.wid|
0000c810  74 68 25 2b 22 20 78 20  22 2b c3 68 65 69 67 68  |th%+" x "+.heigh|
0000c820  74 25 2b 22 20 70 69 78  65 6c 73 22 0d 2a 30 5f  |t%+" pixels".*0_|
0000c830  e7 28 77 69 64 74 68 25  3c 3e 53 70 72 57 25 29  |.(width%<>SprW%)|
0000c840  84 28 68 65 69 67 68 74  25 3c 3e 53 70 72 48 25  |.(height%<>SprH%|
0000c850  29 20 8c 20 24 49 4d 49  73 63 25 3d 22 74 6f 20  |) . $IMIsc%="to |
0000c860  22 2b c3 53 70 72 57 25  2b 22 20 78 20 22 2b c3  |"+.SprW%+" x "+.|
0000c870  53 70 72 48 25 20 8b 20  24 49 4d 49 73 63 25 3d  |SprH% . $IMIsc%=|
0000c880  22 46 75 6c 6c 20 73 69  7a 65 22 0d 2a 3a 3f 24  |"Full size".*:?$|
0000c890  49 4d 49 62 70 25 3d c3  28 63 6f 6c 62 69 74 73  |IMIbp%=.(colbits|
0000c8a0  25 29 2b 22 2d 62 69 74  20 22 2b c1 22 63 6f 6c  |%)+"-bit "+."col|
0000c8b0  6f 75 72 67 72 65 79 20  20 52 47 42 22 2c 31 2b  |ourgrey  RGB",1+|
0000c8c0  63 6f 64 65 25 2a 36 2c  36 29 0d 2a 44 4a f2 6d  |code%*6,6).*DJ.m|
0000c8d0  6f 64 65 5f 69 6e 66 6f  28 6d 6f 64 65 25 2c 77  |ode_info(mode%,w|
0000c8e0  25 2c 68 25 2c 63 25 29  3a 24 49 4d 49 73 6d 25  |%,h%,c%):$IMIsm%|
0000c8f0  3d c3 6d 6f 64 65 25 2b  22 20 28 22 2b c3 77 25  |=.mode%+" ("+.w%|
0000c900  2b 22 78 22 2b c3 68 25  2b 22 78 22 2b c3 63 25  |+"x"+.h%+"x"+.c%|
0000c910  2b 22 29 22 0d 2a 4e 05  e1 0d 2a 58 05 20 0d 2a  |+")".*N...*X. .*|
0000c920  62 16 dd f2 6e 65 77 5f  69 6d 61 67 65 5f 77 69  |b...new_image_wi|
0000c930  6e 64 6f 77 0d 2a 6c 41  f4 20 43 72 65 61 74 65  |ndow.*lA. Create|
0000c940  73 20 6e 65 77 20 69 6d  61 67 65 20 77 69 6e 64  |s new image wind|
0000c950  6f 77 20 6f 66 20 61 70  70 72 6f 70 69 61 74 65  |ow of appropiate|
0000c960  20 73 69 7a 65 20 69 6e  20 63 75 72 72 65 6e 74  | size in current|
0000c970  20 6d 6f 64 65 0d 2a 76  08 ea 20 77 25 0d 2a 80  | mode.*v.. w%.*.|
0000c980  24 f2 61 75 74 6f 7a 6f  6f 6d 3a f4 20 41 75 74  |$.autozoom:. Aut|
0000c990  6f 20 7a 6f 6f 6d 20 69  66 20 65 6e 61 62 6c 65  |o zoom if enable|
0000c9a0  64 0d 2a 8a 40 21 62 6c  6f 63 6b 3d 77 69 6e 5f  |d.*.@!block=win_|
0000c9b0  69 6d 67 25 3a c8 99 20  57 47 65 74 57 49 25 2c  |img%:.. WGetWI%,|
0000c9c0  2c 62 6c 6f 63 6b 3a f4  20 52 65 61 64 20 77 69  |,block:. Read wi|
0000c9d0  6e 64 6f 77 27 73 20 64  65 66 69 6e 69 74 69 6f  |ndow's definitio|
0000c9e0  6e 0d 2a 94 3d 21 64 75  6d 25 3d 77 69 6e 5f 69  |n.*.=!dum%=win_i|
0000c9f0  6d 67 25 3a c8 99 20 57  44 65 6c 65 74 65 57 25  |mg%:.. WDeleteW%|
0000ca00  2c 2c 64 75 6d 25 3a f4  20 44 65 6c 65 74 65 20  |,,dum%:. Delete |
0000ca10  6f 6c 64 20 64 65 66 69  6e 69 74 69 6f 6e 0d 2a  |old definition.*|
0000ca20  9e 75 77 25 3d 62 6c 6f  63 6b 2b 34 3a 77 25 21  |.uw%=block+4:w%!|
0000ca30  34 30 3d 30 3a 77 25 21  34 34 3d 30 3a 77 25 21  |40=0:w%!44=0:w%!|
0000ca40  34 38 3d a4 73 70 72 57  2a 5a 6f 6f 6d 58 3a 77  |48=.sprW*ZoomX:w|
0000ca50  25 21 35 32 3d a4 73 70  72 48 2a 5a 6f 6f 6d 59  |%!52=.sprH*ZoomY|
0000ca60  3a 24 49 4d 57 74 74 25  3d a4 69 6d 61 67 65 5f  |:$IMWtt%=.image_|
0000ca70  74 69 74 6c 65 3a f4 20  52 65 77 72 69 74 65 20  |title:. Rewrite |
0000ca80  77 6f 72 6b 20 61 72 65  61 20 61 6e 64 20 74 69  |work area and ti|
0000ca90  74 6c 65 0d 2a a8 33 c8  99 20 57 43 72 65 61 74  |tle.*.3.. WCreat|
0000caa0  65 57 25 2c 2c 77 25 20  b8 20 77 69 6e 5f 69 6d  |eW%,,w% . win_im|
0000cab0  67 25 3a f4 20 43 72 65  61 74 65 20 6e 65 77 20  |g%:. Create new |
0000cac0  77 69 6e 64 6f 77 0d 2a  b2 23 e7 49 6d 67 20 8c  |window.*.#.Img .|
0000cad0  20 f2 6f 70 65 6e 5f 77  69 6e 64 6f 77 28 77 69  | .open_window(wi|
0000cae0  6e 5f 69 6d 67 25 2c 30  29 0d 2a bc 05 e1 0d 2a  |n_img%,0).*....*|
0000caf0  c6 05 20 0d 2a d0 11 dd  a4 69 6d 61 67 65 5f 74  |.. .*....image_t|
0000cb00  69 74 6c 65 0d 2a da 3a  f4 20 52 65 74 75 72 6e  |itle.*.:. Return|
0000cb10  73 20 69 6d 61 67 65 20  77 69 6e 64 6f 77 20 74  |s image window t|
0000cb20  69 74 6c 65 20 64 65 70  65 6e 64 69 6e 67 20 6f  |itle depending o|
0000cb30  6e 20 7a 6f 6f 6d 20 66  61 63 74 6f 72 73 0d 2a  |n zoom factors.*|
0000cb40  e4 0c ea 20 74 69 74 6c  65 24 0d 2a ee 19 74 69  |... title$.*..ti|
0000cb50  74 6c 65 24 3d 22 49 6d  61 67 65 22 3a f4 20 42  |tle$="Image":. B|
0000cb60  61 73 65 0d 2a f8 4b e7  5a 6f 6f 6d 58 3c 31 20  |ase.*.K.ZoomX<1 |
0000cb70  8c 20 74 69 74 6c 65 24  2b 3d 22 20 78 2f 22 2b  |. title$+=" x/"+|
0000cb80  c3 28 31 2f 5a 6f 6f 6d  58 29 20 8b 20 e7 5a 6f  |.(1/ZoomX) . .Zo|
0000cb90  6f 6d 58 3e 31 20 8c 20  74 69 74 6c 65 24 2b 3d  |omX>1 . title$+=|
0000cba0  22 20 78 2a 22 2b c3 28  5a 6f 6f 6d 58 29 0d 2b  |" x*"+.(ZoomX).+|
0000cbb0  02 4b e7 5a 6f 6f 6d 59  3c 31 20 8c 20 74 69 74  |.K.ZoomY<1 . tit|
0000cbc0  6c 65 24 2b 3d 22 20 79  2f 22 2b c3 28 31 2f 5a  |le$+=" y/"+.(1/Z|
0000cbd0  6f 6f 6d 59 29 20 8b 20  e7 5a 6f 6f 6d 59 3e 31  |oomY) . .ZoomY>1|
0000cbe0  20 8c 20 74 69 74 6c 65  24 2b 3d 22 20 79 2a 22  | . title$+=" y*"|
0000cbf0  2b c3 28 5a 6f 6f 6d 59  29 0d 2b 0c 17 3d 74 69  |+.(ZoomY).+..=ti|
0000cc00  74 6c 65 24 2b 22 20 22  2b 49 6e 46 69 6c 65 24  |tle$+" "+InFile$|
0000cc10  0d 2b 16 05 20 0d 2b 20  18 dd f2 73 65 74 28 77  |.+.. .+ ...set(w|
0000cc20  25 2c 68 25 2c 63 25 2c  f8 20 6d 25 29 0d 2b 2a  |%,h%,c%,. m%).+*|
0000cc30  4b f4 20 53 6f 6d 65 20  70 72 65 73 65 74 74 69  |K. Some presetti|
0000cc40  6e 67 20 3a 20 64 65 74  65 72 6d 69 6e 65 73 20  |ng : determines |
0000cc50  6d 6f 64 65 2c 20 73 65  74 73 20 64 65 66 65 72  |mode, sets defer|
0000cc60  72 65 64 20 73 63 61 6c  69 6e 67 2c 20 73 65 74  |red scaling, set|
0000cc70  73 20 6f 75 74 70 69 78  0d 2b 34 41 f4 20 47 69  |s outpix.+4A. Gi|
0000cc80  76 65 6e 20 61 72 65 20  77 69 64 74 68 2c 20 68  |ven are width, h|
0000cc90  65 69 67 68 74 2c 20 63  6f 6c 6f 75 72 73 20 6f  |eight, colours o|
0000cca0  66 20 69 6d 61 67 65 2c  20 72 65 74 75 72 6e 65  |f image, returne|
0000ccb0  64 20 69 73 20 6d 6f 64  65 0d 2b 3e 32 6d 25 3d  |d is mode.+>2m%=|
0000ccc0  a4 6d 6f 64 65 28 77 25  2c 68 25 2c 63 25 29 3a  |.mode(w%,h%,c%):|
0000ccd0  f4 20 52 65 74 75 72 6e  20 6d 6f 73 74 20 73 75  |. Return most su|
0000cce0  69 74 61 62 6c 65 20 6d  6f 64 65 0d 2b 48 21 4f  |itable mode.+H!O|
0000ccf0  75 74 4d 6f 64 65 25 3d  6d 25 3a f4 20 53 65 74  |utMode%=m%:. Set|
0000cd00  20 6f 75 74 70 75 74 20  6d 6f 64 65 0d 2b 52 40  | output mode.+R@|
0000cd10  e7 44 69 76 49 73 49 6e  58 20 8c 20 58 44 69 76  |.DivIsInX . XDiv|
0000cd20  25 3d 77 25 3a f4 20 53  65 6c 65 63 74 20 58 69  |%=w%:. Select Xi|
0000cd30  6e 20 61 73 20 58 44 69  76 20 28 64 65 66 65 72  |n as XDiv (defer|
0000cd40  72 65 64 20 73 63 61 6c  69 6e 67 29 0d 2b 5c 24  |red scaling).+\$|
0000cd50  e7 44 69 76 49 73 49 6e  59 20 8c 20 59 44 69 76  |.DivIsInY . YDiv|
0000cd60  25 3d 68 25 3a f4 20 49  64 65 6d 20 59 44 69 76  |%=h%:. Idem YDiv|
0000cd70  0d 2b 66 46 e7 58 4d 75  6c 25 3c 3d 58 44 69 76  |.+fF.XMul%<=XDiv|
0000cd80  25 20 8c 20 4f 75 74 58  25 3d 77 25 2a 58 4d 75  |% . OutX%=w%*XMu|
0000cd90  6c 25 2f 58 44 69 76 25  20 8b 20 4f 75 74 58 25  |l%/XDiv% . OutX%|
0000cda0  3d a4 63 65 69 6c 28 77  25 2a 58 4d 75 6c 25 2f  |=.ceil(w%*XMul%/|
0000cdb0  58 44 69 76 25 29 0d 2b  70 46 e7 59 4d 75 6c 25  |XDiv%).+pF.YMul%|
0000cdc0  3c 3d 59 44 69 76 25 20  8c 20 4f 75 74 59 25 3d  |<=YDiv% . OutY%=|
0000cdd0  68 25 2a 59 4d 75 6c 25  2f 59 44 69 76 25 20 8b  |h%*YMul%/YDiv% .|
0000cde0  20 4f 75 74 59 25 3d a4  63 65 69 6c 28 68 25 2a  | OutY%=.ceil(h%*|
0000cdf0  59 4d 75 6c 25 2f 59 44  69 76 25 29 0d 2b 7a 05  |YMul%/YDiv%).+z.|
0000ce00  e1 0d 2b 84 05 20 0d 2b  8e 16 dd a4 6e 65 77 5f  |..+.. .+....new_|
0000ce10  69 6d 61 67 65 28 72 6f  6f 6d 25 29 0d 2b 98 1c  |image(room%).+..|
0000ce20  f4 20 41 6c 6c 6f 63 61  74 65 73 20 69 6d 61 67  |. Allocates imag|
0000ce30  65 20 73 70 72 69 74 65  0d 2b a2 41 f4 20 54 68  |e sprite.+.A. Th|
0000ce40  65 72 65 20 61 72 65 20  61 74 20 6c 65 61 73 74  |ere are at least|
0000ce50  20 72 6f 6f 6d 25 20 62  79 74 65 73 20 66 72 6f  | room% bytes fro|
0000ce60  6d 20 73 70 72 69 74 65  20 73 74 61 72 74 20 74  |m sprite start t|
0000ce70  6f 20 27 6c 6f 6d 65 6d  27 0d 2b ac 2d f4 20 52  |o 'lomem'.+.-. R|
0000ce80  65 74 75 72 6e 73 20 54  52 55 45 20 69 66 20 61  |eturns TRUE if a|
0000ce90  6c 6c 20 69 73 20 77 65  6c 6c 2c 20 65 6c 73 65  |ll is well, else|
0000cea0  20 46 41 4c 53 45 0d 2b  b6 3f ea 20 63 6f 6c 62  | FALSE.+.?. colb|
0000ceb0  69 74 73 25 2c 62 69 74  73 25 2c 62 69 74 73 72  |its%,bits%,bitsr|
0000cec0  6f 74 25 2c 77 6f 72 64  73 25 2c 77 6f 72 64 73  |ot%,words%,words|
0000ced0  72 6f 74 25 2c 73 69 7a  65 75 70 25 2c 73 69 7a  |rot%,sizeup%,siz|
0000cee0  65 72 6f 74 25 0d 2b c0  24 ea 20 64 61 74 61 73  |erot%.+.$. datas|
0000cef0  69 7a 65 25 2c 73 70 74  72 25 2c 73 70 72 64 6f  |ize%,sptr%,sprdo|
0000cf00  66 66 25 2c 73 69 7a 65  25 0d 2b ca 47 78 72 65  |ff%,size%.+.Gxre|
0000cf10  73 25 3d 4f 75 74 58 25  3a 79 72 65 73 25 3d 4f  |s%=OutX%:yres%=O|
0000cf20  75 74 59 25 3a 6d 6f 64  65 25 3d 4f 75 74 4d 6f  |utY%:mode%=OutMo|
0000cf30  64 65 25 3a f4 20 4f 75  74 70 75 74 20 69 6d 61  |de%:. Output ima|
0000cf40  67 65 20 73 69 7a 65 20  61 6e 64 20 6d 6f 64 65  |ge size and mode|
0000cf50  0d 2b d4 60 e7 28 79 72  65 73 25 3c 3d 30 29 84  |.+.`.(yres%<=0).|
0000cf60  28 78 72 65 73 25 3c 3d  30 29 20 8c 20 f2 65 72  |(xres%<=0) . .er|
0000cf70  72 6f 72 28 2d 31 2c 22  54 68 65 72 65 20 61 72  |ror(-1,"There ar|
0000cf80  65 20 6e 6f 20 70 69 78  65 6c 73 20 6c 65 66 74  |e no pixels left|
0000cf90  20 77 69 74 68 20 74 68  65 20 63 75 72 72 65 6e  | with the curren|
0000cfa0  74 20 73 63 61 6c 69 6e  67 20 21 22 29 3a 3d a3  |t scaling !"):=.|
0000cfb0  0d 2b de 32 63 6f 6c 62  69 74 73 25 3d 32 5e a4  |.+.2colbits%=2^.|
0000cfc0  6d 6f 64 65 5f 76 61 72  28 6d 6f 64 65 25 2c 39  |mode_var(mode%,9|
0000cfd0  29 3a f4 20 42 69 74 73  20 70 65 72 20 70 69 78  |):. Bits per pix|
0000cfe0  65 6c 0d 2b e8 3f 62 69  74 73 25 3d 78 72 65 73  |el.+.?bits%=xres|
0000cff0  25 2a 63 6f 6c 62 69 74  73 25 3a 62 69 74 73 72  |%*colbits%:bitsr|
0000d000  6f 74 25 3d 79 72 65 73  25 2a 63 6f 6c 62 69 74  |ot%=yres%*colbit|
0000d010  73 25 3a f4 20 42 69 74  73 20 70 65 72 20 72 6f  |s%:. Bits per ro|
0000d020  77 0d 2b f2 43 77 6f 72  64 73 25 3d 28 62 69 74  |w.+.Cwords%=(bit|
0000d030  73 25 2b 33 31 29 3e 3e  35 3a 77 6f 72 64 73 72  |s%+31)>>5:wordsr|
0000d040  6f 74 25 3d 28 62 69 74  73 72 6f 74 25 2b 33 31  |ot%=(bitsrot%+31|
0000d050  29 3e 3e 35 3a f4 20 57  6f 72 64 73 20 70 65 72  |)>>5:. Words per|
0000d060  20 72 6f 77 0d 2b fc 46  73 69 7a 65 75 70 25 3d  | row.+.Fsizeup%=|
0000d070  77 6f 72 64 73 25 2a 79  72 65 73 25 3c 3c 32 3a  |words%*yres%<<2:|
0000d080  73 69 7a 65 72 6f 74 25  3d 77 6f 72 64 73 72 6f  |sizerot%=wordsro|
0000d090  74 25 2a 78 72 65 73 25  3c 3c 32 3a f4 20 53 70  |t%*xres%<<2:. Sp|
0000d0a0  72 69 74 65 20 73 69 7a  65 73 0d 2c 06 4b 64 61  |rite sizes.,.Kda|
0000d0b0  74 61 73 69 7a 65 25 3d  a4 6d 61 78 28 73 69 7a  |tasize%=.max(siz|
0000d0c0  65 75 70 25 2c 73 69 7a  65 72 6f 74 25 29 3a f4  |eup%,sizerot%):.|
0000d0d0  20 4d 61 78 69 6d 75 6d  20 73 70 72 69 74 65 20  | Maximum sprite |
0000d0e0  73 69 7a 65 20 28 6e 6f  72 6d 61 6c 2f 72 6f 74  |size (normal/rot|
0000d0f0  61 74 65 64 29 0d 2c 10  38 64 61 74 61 73 69 7a  |ated).,.8datasiz|
0000d100  65 25 3d a4 6d 61 78 28  64 61 74 61 73 69 7a 65  |e%=.max(datasize|
0000d110  25 2c 72 6f 6f 6d 25 29  3a f4 20 4d 6f 72 65 20  |%,room%):. More |
0000d120  72 6f 6f 6d 20 6e 65 65  64 65 64 20 3f 0d 2c 1a  |room needed ?.,.|
0000d130  58 e7 a4 61 6c 6c 6f 63  61 74 65 28 42 5f 61 72  |X..allocate(B_ar|
0000d140  65 61 25 2c 31 36 29 20  8b 20 f2 65 72 72 6f 72  |ea%,16) . .error|
0000d150  28 2d 31 2c 22 49 20 68  61 76 65 20 6e 6f 20 72  |(-1,"I have no r|
0000d160  6f 6f 6d 20 66 6f 72 20  74 68 65 20 73 70 72 69  |oom for the spri|
0000d170  74 65 20 61 72 65 61 20  68 65 61 64 65 72 20 21  |te area header !|
0000d180  22 29 3a 3d a3 0d 2c 24  3a 73 70 72 64 6f 66 66  |"):=..,$:sprdoff|
0000d190  25 3d 34 34 3a f4 20 4f  66 66 73 65 74 20 74 6f  |%=44:. Offset to|
0000d1a0  20 73 70 72 69 74 65 20  64 61 74 61 2f 73 70 72  | sprite data/spr|
0000d1b0  69 74 65 20 68 65 61 64  65 72 20 73 69 7a 65 0d  |ite header size.|
0000d1c0  2c 2e 61 e7 a4 61 6c 6c  6f 63 61 74 65 28 42 5f  |,.a..allocate(B_|
0000d1d0  73 70 72 69 74 65 25 2c  73 70 72 64 6f 66 66 25  |sprite%,sprdoff%|
0000d1e0  29 20 8b 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |) . .error(-1,"I|
0000d1f0  20 68 61 76 65 20 6e 6f  20 72 6f 6f 6d 20 66 6f  | have no room fo|
0000d200  72 20 74 68 65 20 69 6d  61 67 65 20 73 70 72 69  |r the image spri|
0000d210  74 65 20 68 65 61 64 65  72 20 21 22 29 3a 3d a3  |te header !"):=.|
0000d220  0d 2c 38 8c e7 a4 61 6c  6c 6f 63 61 74 65 28 42  |.,8...allocate(B|
0000d230  5f 73 70 72 69 6d 67 25  2c 64 61 74 61 73 69 7a  |_sprimg%,datasiz|
0000d240  65 25 29 20 8b 20 f2 65  72 72 6f 72 28 2d 31 2c  |e%) . .error(-1,|
0000d250  22 49 20 68 61 76 65 20  6e 6f 20 72 6f 6f 6d 20  |"I have no room |
0000d260  74 6f 20 73 74 6f 72 65  20 74 68 69 73 20 69 6d  |to store this im|
0000d270  61 67 65 20 21 20 49 20  6e 65 65 64 20 61 74 20  |age ! I need at |
0000d280  6c 65 61 73 74 20 22 2b  c3 28 28 53 68 6f 72 74  |least "+.((Short|
0000d290  25 2b 31 30 32 33 29 81  31 30 32 34 29 2b 22 4b  |%+1023).1024)+"K|
0000d2a0  20 6d 6f 72 65 20 21 22  29 3a 3d a3 0d 2c 42 36  | more !"):=..,B6|
0000d2b0  e7 64 61 74 61 73 69 7a  65 25 3c 72 6f 6f 6d 25  |.datasize%<room%|
0000d2c0  20 8c 20 73 69 7a 65 25  3d 72 6f 6f 6d 25 2d 64  | . size%=room%-d|
0000d2d0  61 74 61 73 69 7a 65 25  20 8b 20 73 69 7a 65 25  |atasize% . size%|
0000d2e0  3d 30 0d 2c 4c 8a e7 a4  61 6c 6c 6f 63 61 74 65  |=0.,L...allocate|
0000d2f0  28 42 5f 69 6d 67 74 6f  70 25 2c 73 69 7a 65 25  |(B_imgtop%,size%|
0000d300  29 20 8b 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |) . .error(-1,"I|
0000d310  20 68 61 76 65 20 6e 6f  20 72 6f 6f 6d 20 74 6f  | have no room to|
0000d320  20 70 72 6f 63 65 73 73  20 74 68 69 73 20 69 6d  | process this im|
0000d330  61 67 65 20 21 20 49 20  6e 65 65 64 20 61 74 20  |age ! I need at |
0000d340  6c 65 61 73 74 20 22 2b  c3 28 28 53 68 6f 72 74  |least "+.((Short|
0000d350  25 2b 31 30 32 33 29 81  31 30 32 34 29 2b 22 4b  |%+1023).1024)+"K|
0000d360  20 6d 6f 72 65 20 21 22  29 3a 3d a3 0d 2c 56 4a  | more !"):=..,VJ|
0000d370  53 70 72 54 6f 70 25 3d  42 75 66 66 65 72 25 28  |SprTop%=Buffer%(|
0000d380  42 5f 69 6d 67 74 6f 70  25 2c 30 29 2b 42 75 66  |B_imgtop%,0)+Buf|
0000d390  66 65 72 25 28 42 5f 69  6d 67 74 6f 70 25 2c 31  |fer%(B_imgtop%,1|
0000d3a0  29 3a f4 20 45 6e 64 20  6f 66 20 73 70 72 69 74  |):. End of sprit|
0000d3b0  65 20 72 6f 6f 6d 0d 2c  60 b6 53 70 72 69 74 65  |e room.,`.Sprite|
0000d3c0  25 3d 42 75 66 66 65 72  25 28 42 5f 61 72 65 61  |%=Buffer%(B_area|
0000d3d0  25 2c 30 29 3a 21 53 70  72 69 74 65 25 3d 42 75  |%,0):!Sprite%=Bu|
0000d3e0  66 66 65 72 25 28 42 5f  61 72 65 61 25 2c 31 29  |ffer%(B_area%,1)|
0000d3f0  2b 42 75 66 66 65 72 25  28 42 5f 73 70 72 69 74  |+Buffer%(B_sprit|
0000d400  65 25 2c 31 29 2b 42 75  66 66 65 72 25 28 42 5f  |e%,1)+Buffer%(B_|
0000d410  73 70 72 69 6d 67 25 2c  31 29 3a 53 70 72 69 74  |sprimg%,1):Sprit|
0000d420  65 25 21 34 3d 31 3a 53  70 72 69 74 65 25 21 38  |e%!4=1:Sprite%!8|
0000d430  3d 31 36 3a 53 70 72 69  74 65 25 21 31 32 3d 53  |=16:Sprite%!12=S|
0000d440  70 72 69 74 65 25 21 38  2b 73 70 72 64 6f 66 66  |prite%!8+sprdoff|
0000d450  25 2b 73 69 7a 65 75 70  25 3a f4 20 49 6e 69 74  |%+sizeup%:. Init|
0000d460  20 73 70 72 69 74 65 20  61 72 65 61 0d 2c 6a 30  | sprite area.,j0|
0000d470  73 70 74 72 25 3d 42 75  66 66 65 72 25 28 42 5f  |sptr%=Buffer%(B_|
0000d480  73 70 72 69 74 65 25 2c  30 29 3a f4 20 53 74 61  |sprite%,0):. Sta|
0000d490  72 74 20 6f 66 20 73 70  72 69 74 65 0d 2c 74 34  |rt of sprite.,t4|
0000d4a0  53 70 72 45 6e 64 25 3d  73 70 74 72 25 2b 73 70  |SprEnd%=sptr%+sp|
0000d4b0  72 64 6f 66 66 25 2b 64  61 74 61 73 69 7a 65 25  |rdoff%+datasize%|
0000d4c0  3a f4 20 45 6e 64 20 6f  66 20 73 70 72 69 74 65  |:. End of sprite|
0000d4d0  0d 2c 7e 33 21 73 70 74  72 25 3d 73 70 72 64 6f  |.,~3!sptr%=sprdo|
0000d4e0  66 66 25 2b 73 69 7a 65  75 70 25 3a f4 20 4f 66  |ff%+sizeup%:. Of|
0000d4f0  66 73 65 74 20 74 6f 20  6e 65 78 74 20 73 70 72  |fset to next spr|
0000d500  69 74 65 0d 2c 88 30 24  28 73 70 74 72 25 2b 34  |ite.,.0$(sptr%+4|
0000d510  29 3d 49 6d 61 67 65 53  70 72 24 2b c4 31 32 2c  |)=ImageSpr$+.12,|
0000d520  bd 30 29 3a f4 20 53 70  72 69 74 65 27 73 20 6e  |.0):. Sprite's n|
0000d530  61 6d 65 0d 2c 92 28 73  70 74 72 25 21 31 36 3d  |ame.,.(sptr%!16=|
0000d540  77 6f 72 64 73 25 2d 31  3a f4 20 57 69 64 74 68  |words%-1:. Width|
0000d550  20 69 6e 20 77 6f 72 64  73 2d 31 0d 2c 9c 2c 73  | in words-1.,.,s|
0000d560  70 74 72 25 21 32 30 3d  79 72 65 73 25 2d 31 3a  |ptr%!20=yres%-1:|
0000d570  f4 20 48 65 69 67 68 74  20 69 6e 20 73 63 61 6e  |. Height in scan|
0000d580  6c 69 6e 65 73 2d 31 0d  2c a6 3d 73 70 74 72 25  |lines-1.,.=sptr%|
0000d590  21 32 34 3d 30 3a 73 70  74 72 25 21 32 38 3d 33  |!24=0:sptr%!28=3|
0000d5a0  31 2d 28 77 6f 72 64 73  25 2a 33 32 2d 62 69 74  |1-(words%*32-bit|
0000d5b0  73 25 29 3a f4 20 53 74  61 72 74 2f 65 6e 64 20  |s%):. Start/end |
0000d5c0  62 69 74 73 0d 2c b0 44  73 70 74 72 25 21 33 32  |bits.,.Dsptr%!32|
0000d5d0  3d 73 70 72 64 6f 66 66  25 3a 73 70 74 72 25 21  |=sprdoff%:sptr%!|
0000d5e0  33 36 3d 73 70 74 72 25  21 33 32 3a f4 20 4f 66  |36=sptr%!32:. Of|
0000d5f0  66 73 65 74 20 74 6f 20  73 70 72 69 74 65 20 64  |fset to sprite d|
0000d600  61 74 61 2f 6d 61 73 6b  0d 2c ba 23 73 70 74 72  |ata/mask.,.#sptr|
0000d610  25 21 34 30 3d 6d 6f 64  65 25 3a f4 20 4d 6f 64  |%!40=mode%:. Mod|
0000d620  65 20 6f 66 20 73 70 72  69 74 65 0d 2c c4 48 c8  |e of sprite.,.H.|
0000d630  99 20 22 54 72 61 6e 73  6c 61 74 6f 72 5f 57 72  |. "Translator_Wr|
0000d640  69 74 65 57 6f 72 64 73  22 2c 73 70 74 72 25 2b  |iteWords",sptr%+|
0000d650  73 70 72 64 6f 66 66 25  2c 30 2c 73 69 7a 65 75  |sprdoff%,0,sizeu|
0000d660  70 25 3e 3e 32 3a f4 20  57 69 70 65 20 73 70 72  |p%>>2:. Wipe spr|
0000d670  69 74 65 0d 2c ce 28 f2  76 61 72 28 22 72 6f 77  |ite.,.(.var("row|
0000d680  6c 22 2c 77 6f 72 64 73  25 3c 3c 32 29 3a f4 20  |l",words%<<2):. |
0000d690  4d 6f 64 75 6c 65 20 69  6e 66 6f 0d 2c d8 27 f2  |Module info.,.'.|
0000d6a0  76 61 72 28 22 6f 75 74  62 22 2c 63 6f 6c 62 69  |var("outb",colbi|
0000d6b0  74 73 25 29 3a f4 20 4d  6f 64 75 6c 65 20 69 6e  |ts%):. Module in|
0000d6c0  66 6f 0d 2c e2 2d f2 76  61 72 28 22 73 70 72 69  |fo.,.-.var("spri|
0000d6d0  22 2c 73 70 74 72 25 2b  73 70 74 72 25 21 33 32  |",sptr%+sptr%!32|
0000d6e0  29 3a f4 20 4d 6f 64 75  6c 65 20 69 6e 66 6f 0d  |):. Module info.|
0000d6f0  2c ec 4a 53 70 72 43 6f  6c 62 69 74 73 25 3d 63  |,.JSprColbits%=c|
0000d700  6f 6c 62 69 74 73 25 3a  53 70 72 50 74 72 25 3d  |olbits%:SprPtr%=|
0000d710  73 70 74 72 25 3a 53 70  72 4d 6f 64 65 25 3d 6d  |sptr%:SprMode%=m|
0000d720  6f 64 65 25 3a f4 20 47  6c 6f 62 61 6c 20 73 70  |ode%:. Global sp|
0000d730  72 69 74 65 20 69 6e 66  6f 0d 2c f6 44 53 70 72  |rite info.,.DSpr|
0000d740  57 25 3d 78 72 65 73 25  3a 53 70 72 48 25 3d 79  |W%=xres%:SprH%=y|
0000d750  72 65 73 25 3a f4 20 52  65 6d 65 6d 62 65 72 20  |res%:. Remember |
0000d760  73 70 72 69 74 65 27 73  20 72 65 73 6f 6c 75 74  |sprite's resolut|
0000d770  69 6f 6e 20 69 6e 20 70  69 78 65 6c 73 0d 2d 00  |ion in pixels.-.|
0000d780  06 3d b9 0d 2d 0a 05 20  0d 2d 14 10 dd f2 64 65  |.=..-.. .-....de|
0000d790  61 6c 6c 6f 63 61 74 65  0d 2d 1e 1d f4 20 44 65  |allocate.-... De|
0000d7a0  61 6c 6c 6f 63 61 74 65  73 20 61 6c 6c 20 62 75  |allocates all bu|
0000d7b0  66 66 65 72 73 0d 2d 28  26 42 75 66 66 65 72 25  |ffers.-(&Buffer%|
0000d7c0  28 29 3d 30 3a f4 20 57  69 70 65 20 61 6c 6c 20  |()=0:. Wipe all |
0000d7d0  62 75 66 66 65 72 20 69  6e 66 6f 0d 2d 32 47 53  |buffer info.-2GS|
0000d7e0  74 6f 72 65 25 3d a4 61  6c 69 67 6e 28 48 65 61  |tore%=.align(Hea|
0000d7f0  70 25 29 3a 46 72 65 65  25 3d 48 65 61 70 53 69  |p%):Free%=HeapSi|
0000d800  7a 65 25 3a f4 20 44 65  61 6c 6c 6f 63 61 74 65  |ze%:. Deallocate|
0000d810  20 61 6c 6c 20 73 74 6f  72 61 67 65 20 73 70 61  | all storage spa|
0000d820  63 65 0d 2d 3c 05 e1 0d  2d 46 05 20 0d 2d 50 1a  |ce.-<...-F. .-P.|
0000d830  dd a4 61 6c 6c 6f 63 61  74 65 28 6e 72 25 2c 62  |..allocate(nr%,b|
0000d840  79 74 65 73 25 29 0d 2d  5a 40 f4 20 41 6c 6c 6f  |ytes%).-Z@. Allo|
0000d850  63 61 74 65 73 20 62 79  74 65 73 25 20 62 79 74  |cates bytes% byt|
0000d860  65 73 20 74 6f 20 62 75  66 66 65 72 20 6e 75 6d  |es to buffer num|
0000d870  62 65 72 20 6e 72 25 20  28 77 6f 72 64 2d 61 6c  |ber nr% (word-al|
0000d880  69 67 6e 65 64 29 0d 2d  64 2b f4 20 52 65 74 75  |igned).-d+. Retu|
0000d890  72 6e 73 20 54 52 55 45  20 69 66 20 73 75 63 63  |rns TRUE if succ|
0000d8a0  65 73 66 75 6c 2c 20 65  6c 73 65 20 46 41 4c 53  |esful, else FALS|
0000d8b0  45 0d 2d 6e 71 e7 28 62  79 74 65 73 25 3c 30 29  |E.-nq.(bytes%<0)|
0000d8c0  84 28 62 79 74 65 73 25  3e 31 36 2a 31 30 32 34  |.(bytes%>16*1024|
0000d8d0  2a 31 30 32 34 29 20 8c  20 f2 65 72 72 6f 72 28  |*1024) . .error(|
0000d8e0  2d 31 2c 22 41 72 65 20  79 6f 75 20 4e 55 54 53  |-1,"Are you NUTS|
0000d8f0  20 3f 22 29 3a 53 68 6f  72 74 25 3d 39 39 39 39  | ?"):Short%=9999|
0000d900  39 39 2a 31 30 32 34 3a  3d a3 3a f4 20 45 6e 6f  |99*1024:=.:. Eno|
0000d910  72 6d 6f 75 73 20 61 6d  6f 75 6e 74 20 61 73 6b  |rmous amount ask|
0000d920  65 64 0d 2d 78 26 62 79  74 65 73 25 3d a4 61 6c  |ed.-x&bytes%=.al|
0000d930  69 67 6e 28 62 79 74 65  73 25 29 3a f4 20 57 6f  |ign(bytes%):. Wo|
0000d940  72 64 2d 61 6c 69 67 6e  0d 2d 82 2a e7 46 72 65  |rd-align.-.*.Fre|
0000d950  65 25 3c 62 79 74 65 73  25 20 8c 20 53 68 6f 72  |e%<bytes% . Shor|
0000d960  74 25 3d 62 79 74 65 73  25 2d 46 72 65 65 25 3a  |t%=bytes%-Free%:|
0000d970  3d a3 0d 2d 8c 41 42 75  66 66 65 72 25 28 6e 72  |=..-.ABuffer%(nr|
0000d980  25 2c 30 29 3d 53 74 6f  72 65 25 3a 42 75 66 66  |%,0)=Store%:Buff|
0000d990  65 72 25 28 6e 72 25 2c  31 29 3d 62 79 74 65 73  |er%(nr%,1)=bytes|
0000d9a0  25 3a f4 20 41 6c 6c 6f  63 61 74 65 20 62 75 66  |%:. Allocate buf|
0000d9b0  66 65 72 0d 2d 96 3a 53  74 6f 72 65 25 2b 3d 62  |fer.-.:Store%+=b|
0000d9c0  79 74 65 73 25 3a 46 72  65 65 25 2d 3d 62 79 74  |ytes%:Free%-=byt|
0000d9d0  65 73 25 3a f4 20 44 65  61 6c 6c 6f 63 61 74 65  |es%:. Deallocate|
0000d9e0  20 73 74 6f 72 61 67 65  20 75 73 65 64 0d 2d a0  | storage used.-.|
0000d9f0  06 3d b9 0d 2d aa 05 20  0d 2d b4 34 dd a4 61 6c  |.=..-.. .-.4..al|
0000da00  6c 6f 63 61 74 65 5f 73  74 64 28 77 69 64 74 68  |locate_std(width|
0000da10  25 2c 70 69 78 62 75 66  31 25 2c 70 69 78 76 61  |%,pixbuf1%,pixva|
0000da20  6c 25 2c 70 69 78 62 75  66 32 25 29 0d 2d be 36  |l%,pixbuf2%).-.6|
0000da30  f4 20 41 6c 6c 6f 63 61  74 65 73 20 73 74 61 6e  |. Allocates stan|
0000da40  64 61 72 64 20 62 75 66  66 65 72 73 20 28 70 69  |dard buffers (pi|
0000da50  78 65 6c 20 62 75 66 66  65 72 73 2c 20 65 74 63  |xel buffers, etc|
0000da60  2e 29 0d 2d c8 0c ea 20  74 69 6d 65 73 25 0d 2d  |.).-... times%.-|
0000da70  d2 5a e7 a4 61 6c 6c 6f  63 61 74 65 28 42 5f 70  |.Z..allocate(B_p|
0000da80  69 78 62 75 66 31 25 2c  70 69 78 62 75 66 31 25  |ixbuf1%,pixbuf1%|
0000da90  29 20 8b 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |) . .error(-1,"I|
0000daa0  20 68 61 76 65 20 6e 6f  20 72 6f 6f 6d 20 66 6f  | have no room fo|
0000dab0  72 20 70 69 78 65 6c 20  62 75 66 66 65 72 20 23  |r pixel buffer #|
0000dac0  31 20 21 22 29 3a 3d a3  0d 2d dc 5d e7 a4 61 6c  |1 !"):=..-.]..al|
0000dad0  6c 6f 63 61 74 65 28 42  5f 70 69 78 76 61 6c 25  |locate(B_pixval%|
0000dae0  2c 70 69 78 76 61 6c 25  29 20 8b 20 f2 65 72 72  |,pixval%) . .err|
0000daf0  6f 72 28 2d 31 2c 22 49  20 68 61 76 65 20 6e 6f  |or(-1,"I have no|
0000db00  20 72 6f 6f 6d 20 66 6f  72 20 61 20 70 69 78 65  | room for a pixe|
0000db10  6c 20 76 61 6c 75 65 20  62 75 66 66 65 72 20 21  |l value buffer !|
0000db20  22 29 3a 3d a3 0d 2d e6  5a e7 a4 61 6c 6c 6f 63  |"):=..-.Z..alloc|
0000db30  61 74 65 28 42 5f 70 69  78 62 75 66 32 25 2c 70  |ate(B_pixbuf2%,p|
0000db40  69 78 62 75 66 32 25 29  20 8b 20 f2 65 72 72 6f  |ixbuf2%) . .erro|
0000db50  72 28 2d 31 2c 22 49 20  68 61 76 65 20 6e 6f 20  |r(-1,"I have no |
0000db60  72 6f 6f 6d 20 66 6f 72  20 70 69 78 65 6c 20 62  |room for pixel b|
0000db70  75 66 66 65 72 20 23 32  20 21 22 29 3a 3d a3 0d  |uffer #2 !"):=..|
0000db80  2d f0 13 e7 58 4d 75 6c  25 3c 3e 58 44 69 76 25  |-...XMul%<>XDiv%|
0000db90  20 8c 0d 2d fa 86 20 e7  a4 61 6c 6c 6f 63 61 74  | ..-.. ..allocat|
0000dba0  65 28 42 5f 70 69 78 73  63 61 6c 65 64 25 2c a4  |e(B_pixscaled%,.|
0000dbb0  6d 61 78 28 70 69 78 62  75 66 31 25 2c 70 69 78  |max(pixbuf1%,pix|
0000dbc0  76 61 6c 25 29 2a a4 63  65 69 6c 28 58 4d 75 6c  |val%)*.ceil(XMul|
0000dbd0  25 2f 58 44 69 76 25 29  29 20 8b 20 f2 65 72 72  |%/XDiv%)) . .err|
0000dbe0  6f 72 28 2d 31 2c 22 49  20 68 61 76 65 20 6e 6f  |or(-1,"I have no|
0000dbf0  20 72 6f 6f 6d 20 66 6f  72 20 74 68 65 20 73 63  | room for the sc|
0000dc00  61 6c 65 64 20 70 69 78  65 6c 20 62 75 66 66 65  |aled pixel buffe|
0000dc10  72 20 21 22 29 3a 3d a3  0d 2e 04 05 cd 0d 2e 0e  |r !"):=.........|
0000dc20  12 e7 45 72 72 53 70 72  65 61 64 3d 32 20 8c 0d  |..ErrSpread=2 ..|
0000dc30  2e 18 26 20 e7 42 6c 61  63 6b 57 68 69 74 65 20  |..& .BlackWhite |
0000dc40  8c 20 74 69 6d 65 73 25  3d 31 20 8b 20 74 69 6d  |. times%=1 . tim|
0000dc50  65 73 25 3d 34 0d 2e 22  87 20 e7 a4 61 6c 6c 6f  |es%=4..". ..allo|
0000dc60  63 61 74 65 28 42 5f 66  73 65 72 72 25 2c 28 77  |cate(B_fserr%,(w|
0000dc70  69 64 74 68 25 2b 32 29  2a 74 69 6d 65 73 25 2a  |idth%+2)*times%*|
0000dc80  34 2a a4 63 65 69 6c 28  58 4d 75 6c 25 2f 58 44  |4*.ceil(XMul%/XD|
0000dc90  69 76 25 29 29 20 8b 20  f2 65 72 72 6f 72 28 2d  |iv%)) . .error(-|
0000dca0  31 2c 22 49 20 68 61 76  65 20 6e 6f 20 72 6f 6f  |1,"I have no roo|
0000dcb0  6d 20 66 6f 72 20 46 6c  6f 79 64 20 53 74 65 69  |m for Floyd Stei|
0000dcc0  6e 62 65 72 67 20 65 72  72 6f 72 20 73 70 72 65  |nberg error spre|
0000dcd0  61 64 69 6e 67 20 21 22  29 3a 3d a3 0d 2e 2c 05  |ading !"):=...,.|
0000dce0  cd 0d 2e 36 06 3d b9 0d  2e 40 05 20 0d 2e 4a 0d  |...6.=...@. ..J.|
0000dcf0  dd f2 68 6f 75 72 5f 6f  6e 0d 2e 54 18 f4 20 54  |..hour_on..T.. T|
0000dd00  75 72 6e 73 20 68 6f 75  72 67 6c 61 73 73 20 6f  |urns hourglass o|
0000dd10  6e 0d 2e 5e 15 c8 99 20  22 48 6f 75 72 67 6c 61  |n..^... "Hourgla|
0000dd20  73 73 5f 4f 6e 22 0d 2e  68 05 e1 0d 2e 72 05 20  |ss_On"..h....r. |
0000dd30  0d 2e 7c 0e dd f2 68 6f  75 72 5f 6f 66 66 0d 2e  |..|...hour_off..|
0000dd40  86 19 f4 20 54 75 72 6e  73 20 68 6f 75 72 67 6c  |... Turns hourgl|
0000dd50  61 73 73 20 6f 66 66 0d  2e 90 16 c8 99 20 22 48  |ass off...... "H|
0000dd60  6f 75 72 67 6c 61 73 73  5f 4f 66 66 22 0d 2e 9a  |ourglass_Off"...|
0000dd70  05 e1 0d 2e a4 05 20 0d  2e ae 1a dd f2 65 64 69  |...... ......edi|
0000dd80  74 5f 70 61 72 74 28 73  69 7a 65 2c 70 61 72 74  |t_part(size,part|
0000dd90  29 0d 2e b8 37 f4 20 45  64 69 74 73 20 69 6d 61  |)...7. Edits ima|
0000dda0  67 65 20 73 69 7a 65 20  61 6e 64 20 70 61 72 74  |ge size and part|
0000ddb0  20 28 69 66 20 65 6e 61  62 6c 65 64 20 77 69 74  | (if enabled wit|
0000ddc0  68 20 66 6c 61 67 73 29  0d 2e c2 43 f4 20 52 65  |h flags)...C. Re|
0000ddd0  74 75 72 6e 73 20 77 69  74 68 20 28 73 63 61 6c  |turns with (scal|
0000dde0  65 64 29 20 69 6d 61 67  65 20 69 6e 20 67 72 61  |ed) image in gra|
0000ddf0  70 68 69 63 73 20 77 69  6e 64 6f 77 20 72 65 61  |phics window rea|
0000de00  64 79 20 66 6f 72 20 73  61 76 65 0d 2e cc 41 ea  |dy for save...A.|
0000de10  20 5f 25 2c 6f 78 25 2c  6f 79 25 2c 78 25 2c 79  | _%,ox%,oy%,x%,y|
0000de20  25 2c 62 75 74 25 2c 78  31 25 2c 78 32 25 2c 79  |%,but%,x1%,x2%,y|
0000de30  31 25 2c 79 32 25 2c 78  73 25 2c 79 73 25 2c 73  |1%,y2%,xs%,ys%,s|
0000de40  69 7a 65 78 25 2c 73 69  7a 65 79 25 0d 2e d6 22  |izex%,sizey%..."|
0000de50  ea 20 73 70 72 57 25 2c  73 70 72 48 25 2c 70 74  |. sprW%,sprH%,pt|
0000de60  72 24 2c 72 30 2c 72 31  2c 72 32 2c 72 33 0d 2e  |r$,r0,r1,r2,r3..|
0000de70  e0 92 21 70 6f 69 6e 74  65 72 3d 35 31 32 3a 70  |..!pointer=512:p|
0000de80  6f 69 6e 74 65 72 21 34  3d 30 3a 70 6f 69 6e 74  |ointer!4=0:point|
0000de90  65 72 21 38 3d 31 36 3a  70 6f 69 6e 74 65 72 21  |er!8=16:pointer!|
0000dea0  31 32 3d 31 36 3a 70 74  72 24 3d 22 70 74 72 22  |12=16:ptr$="ptr"|
0000deb0  3a c8 99 20 22 4f 53 5f  53 70 72 69 74 65 4f 70  |:.. "OS_SpriteOp|
0000dec0  22 2c 31 35 2b 32 35 36  2c 70 6f 69 6e 74 65 72  |",15+256,pointer|
0000ded0  2c 70 74 72 24 2c 30 2c  33 32 2c 33 32 2c 38 3a  |,ptr$,0,32,32,8:|
0000dee0  f4 20 49 6e 69 74 69 61  6c 69 73 65 20 70 6f 69  |. Initialise poi|
0000def0  6e 74 65 72 20 73 70 72  69 74 65 20 61 72 65 61  |nter sprite area|
0000df00  0d 2e ea b5 c8 99 20 4f  53 53 70 6f 70 25 2c 36  |...... OSSpop%,6|
0000df10  30 2b 32 35 36 2c 70 6f  69 6e 74 65 72 2c 70 74  |0+256,pointer,pt|
0000df20  72 24 2c 30 20 b8 20 72  30 2c 72 31 2c 72 32 2c  |r$,0 . r0,r1,r2,|
0000df30  72 33 3a ec 20 30 2c 31  32 34 3a e6 30 2c 33 3a  |r3:. 0,124:.0,3:|
0000df40  f0 31 2c 30 2c 2d 33 32  3a f0 30 2c 30 2c 33 32  |.1,0,-32:.0,0,32|
0000df50  3a f0 31 2c 34 30 2c 30  3a f0 30 2c 2d 34 30 2c  |:.1,40,0:.0,-40,|
0000df60  30 3a f0 31 2c 36 30 2c  2d 33 30 3a f0 30 2c 2d  |0:.1,60,-30:.0,-|
0000df70  36 30 2c 32 36 3a f0 31  2c 36 30 2c 2d 33 30 3a  |60,26:.1,60,-30:|
0000df80  c8 99 20 4f 53 53 70 6f  70 25 2c 72 30 2c 72 31  |.. OSSpop%,r0,r1|
0000df90  2c 72 32 2c 72 33 3a f4  20 50 6c 6f 74 20 61 72  |,r2,r3:. Plot ar|
0000dfa0  72 6f 77 20 69 6e 20 70  6f 69 6e 74 65 72 20 73  |row in pointer s|
0000dfb0  70 72 69 74 65 0d 2e f4  3f ef 32 34 2c 30 3b 30  |prite...?.24,0;0|
0000dfc0  3b 53 63 72 57 25 3b 53  63 72 48 25 3b 3a f4 20  |;ScrW%;ScrH%;:. |
0000dfd0  57 68 6f 6c 65 20 73 63  72 65 65 6e 20 77 69 6e  |Whole screen win|
0000dfe0  64 6f 77 20 66 6f 72 20  69 6d 61 67 65 20 73 70  |dow for image sp|
0000dff0  72 69 74 65 0d 2e fe 3a  73 70 72 57 25 3d a4 73  |rite...:sprW%=.s|
0000e000  70 72 57 3a 73 70 72 48  25 3d a4 73 70 72 48 3a  |prW:sprH%=.sprH:|
0000e010  f4 20 54 72 75 65 20 4f  53 20 73 69 7a 65 20 6f  |. True OS size o|
0000e020  66 20 69 6d 61 67 65 20  73 70 72 69 74 65 0d 2f  |f image sprite./|
0000e030  08 2c 78 73 25 3d 32 5e  a4 6d 6f 64 65 5f 76 61  |.,xs%=2^.mode_va|
0000e040  72 28 eb 2c 34 29 3a f4  20 58 20 63 6f 6f 72 64  |r(.,4):. X coord|
0000e050  69 6e 61 74 65 20 73 74  65 70 0d 2f 12 2c 79 73  |inate step./.,ys|
0000e060  25 3d 32 5e a4 6d 6f 64  65 5f 76 61 72 28 eb 2c  |%=2^.mode_var(.,|
0000e070  35 29 3a f4 20 59 20 63  6f 6f 72 64 69 6e 61 74  |5):. Y coordinat|
0000e080  65 20 73 74 65 70 0d 2f  1c 3e e7 53 63 72 57 25  |e step./.>.ScrW%|
0000e090  3e 73 70 72 57 25 20 8c  20 73 69 7a 65 78 25 3d  |>sprW% . sizex%=|
0000e0a0  73 70 72 57 25 20 8b 20  73 69 7a 65 78 25 3d 53  |sprW% . sizex%=S|
0000e0b0  63 72 57 25 3a f4 20 49  6e 69 74 69 61 6c 20 77  |crW%:. Initial w|
0000e0c0  69 64 74 68 0d 2f 26 3f  e7 53 63 72 48 25 3e 73  |idth./&?.ScrH%>s|
0000e0d0  70 72 48 25 20 8c 20 73  69 7a 65 79 25 3d 73 70  |prH% . sizey%=sp|
0000e0e0  72 48 25 20 8b 20 73 69  7a 65 79 25 3d 53 63 72  |rH% . sizey%=Scr|
0000e0f0  48 25 3a f4 20 49 6e 69  74 69 61 6c 20 68 65 69  |H%:. Initial hei|
0000e100  67 68 74 0d 2f 30 4b 21  61 72 67 25 3d 73 69 7a  |ght./0K!arg%=siz|
0000e110  65 78 25 3a 61 72 67 25  21 34 3d 73 69 7a 65 79  |ex%:arg%!4=sizey|
0000e120  25 3a 61 72 67 25 21 38  3d 73 70 72 57 25 3a 61  |%:arg%!8=sprW%:a|
0000e130  72 67 25 21 31 32 3d 73  70 72 48 25 3a f4 20 49  |rg%!12=sprH%:. I|
0000e140  6e 69 74 69 61 6c 20 73  63 61 6c 69 6e 67 0d 2f  |nitial scaling./|
0000e150  3a 2f da 3a f2 70 6c 6f  74 5f 69 6d 61 67 65 28  |:/.:.plot_image(|
0000e160  30 2c 30 2c 30 2c 61 72  67 25 29 3a f4 20 49 6e  |0,0,0,arg%):. In|
0000e170  69 74 69 61 6c 20 64 69  73 70 6c 61 79 0d 2f 44  |itial display./D|
0000e180  0b e7 73 69 7a 65 20 8c  0d 2f 4e 3f 20 c8 97 20  |..size ../N? .. |
0000e190  c8 93 20 30 2c 30 2c 53  63 72 57 25 2d 78 73 25  |.. 0,0,ScrW%-xs%|
0000e1a0  2c 53 63 72 48 25 2d 79  73 25 3a f4 20 52 65 73  |,ScrH%-ys%:. Res|
0000e1b0  74 72 69 63 74 20 70 6f  69 6e 74 65 72 20 74 6f  |trict pointer to|
0000e1c0  20 73 63 72 65 65 6e 0d  2f 58 36 20 6f 78 25 3d  | screen./X6 ox%=|
0000e1d0  73 69 7a 65 78 25 2d 78  73 25 3a 6f 79 25 3d 73  |sizex%-xs%:oy%=s|
0000e1e0  69 7a 65 79 25 2d 79 73  25 3a f4 20 27 4f 6c 64  |izey%-ys%:. 'Old|
0000e1f0  27 20 63 6f 6f 72 64 69  6e 61 74 65 73 0d 2f 62  |' coordinates./b|
0000e200  30 20 c8 97 20 b8 20 6f  78 25 2c 6f 79 25 3a f4  |0 .. . ox%,oy%:.|
0000e210  20 50 6f 69 6e 74 65 72  20 74 6f 20 75 70 70 65  | Pointer to uppe|
0000e220  72 20 6c 65 66 74 20 63  6f 72 6e 65 72 0d 2f 6c  |r left corner./l|
0000e230  3f 20 f5 20 f2 72 6d 6f  75 73 65 28 5f 25 2c 5f  |? . .rmouse(_%,_|
0000e240  25 2c 62 75 74 25 29 3a  fd 20 62 75 74 25 3d 30  |%,but%):. but%=0|
0000e250  3a f4 20 57 61 69 74 20  66 6f 72 20 62 75 74 74  |:. Wait for butt|
0000e260  6f 6e 73 20 72 65 6c 65  61 73 65 64 0d 2f 76 28  |ons released./v(|
0000e270  20 f5 20 f2 76 61 6c 75  65 5f 70 74 72 28 73 69  | . .value_ptr(si|
0000e280  7a 65 78 25 81 78 73 25  2c 73 69 7a 65 79 25 81  |zex%.xs%,sizey%.|
0000e290  79 73 25 29 0d 2f 80 3a  20 f5 20 f2 72 6d 6f 75  |ys%)./.: . .rmou|
0000e2a0  73 65 28 78 25 2c 79 25  2c 62 75 74 25 29 3a fd  |se(x%,y%,but%):.|
0000e2b0  20 28 78 25 3c 3e 6f 78  25 29 84 28 79 25 3c 3e  | (x%<>ox%).(y%<>|
0000e2c0  6f 79 25 29 84 28 62 75  74 25 3c 3e 30 29 0d 2f  |oy%).(but%<>0)./|
0000e2d0  8a 0e 20 e7 62 75 74 25  3d 30 20 8c 0d 2f 94 3e  |.. .but%=0 ../.>|
0000e2e0  20 20 e7 6f 79 25 3e 79  25 20 8c 20 ec 20 30 2c  |  .oy%>y% . . 0,|
0000e2f0  79 25 3a f0 20 31 30 33  2c a4 6d 61 78 28 78 25  |y%:. 103,.max(x%|
0000e300  2c 6f 78 25 29 2c 6f 79  25 3a f4 20 57 69 70 65  |,ox%),oy%:. Wipe|
0000e310  20 59 2d 70 6f 72 74 69  6f 6e 0d 2f 9e 3e 20 20  | Y-portion./.>  |
0000e320  e7 6f 78 25 3e 78 25 20  8c 20 ec 20 78 25 2c 30  |.ox%>x% . . x%,0|
0000e330  3a f0 20 31 30 33 2c 6f  78 25 2c a4 6d 61 78 28  |:. 103,ox%,.max(|
0000e340  79 25 2c 6f 79 25 29 3a  f4 20 57 69 70 65 20 58  |y%,oy%):. Wipe X|
0000e350  2d 70 6f 72 74 69 6f 6e  0d 2f a8 3a 20 20 73 69  |-portion./.:  si|
0000e360  7a 65 78 25 3d 78 25 2b  78 73 25 3a 73 69 7a 65  |zex%=x%+xs%:size|
0000e370  79 25 3d 79 25 2b 79 73  25 3a f4 20 54 72 75 65  |y%=y%+ys%:. True|
0000e380  20 73 63 61 6c 65 64 20  69 6d 61 67 65 20 73 69  | scaled image si|
0000e390  7a 65 0d 2f b2 3b 20 20  21 61 72 67 25 3d 73 69  |ze./.;  !arg%=si|
0000e3a0  7a 65 78 25 3a 61 72 67  25 21 34 3d 73 69 7a 65  |zex%:arg%!4=size|
0000e3b0  79 25 3a 61 72 67 25 21  38 3d 73 70 72 57 25 3a  |y%:arg%!8=sprW%:|
0000e3c0  61 72 67 25 21 31 32 3d  73 70 72 48 25 0d 2f bc  |arg%!12=sprH%./.|
0000e3d0  1d 20 20 f2 70 6c 6f 74  5f 69 6d 61 67 65 28 30  |.  .plot_image(0|
0000e3e0  2c 30 2c 30 2c 61 72 67  25 29 0d 2f c6 2e 20 20  |,0,0,arg%)./..  |
0000e3f0  6f 78 25 3d 78 25 3a 6f  79 25 3d 79 25 3a f4 20  |ox%=x%:oy%=y%:. |
0000e400  52 65 6d 65 6d 62 65 72  20 6f 6c 64 20 63 6f 6f  |Remember old coo|
0000e410  72 64 69 6e 61 74 65 73  0d 2f d0 06 20 cd 0d 2f  |rdinates./.. ../|
0000e420  da 0e 20 fd 20 62 75 74  25 3c 3e 30 0d 2f e4 36  |.. . but%<>0./.6|
0000e430  20 c8 99 20 22 4f 53 5f  43 4c 49 22 2c 22 50 6f  | .. "OS_CLI","Po|
0000e440  69 6e 74 65 72 20 31 22  3a f4 20 52 65 73 74 6f  |inter 1":. Resto|
0000e450  72 65 20 64 65 66 61 75  6c 74 20 70 6f 69 6e 74  |re default point|
0000e460  65 72 0d 2f ee 05 cd 0d  2f f8 0b e7 70 61 72 74  |er./..../...part|
0000e470  20 8c 0d 30 02 3e 20 f5  20 f2 6d 6f 75 73 65 28  | ..0.> . .mouse(|
0000e480  5f 25 2c 5f 25 2c 62 75  74 25 29 3a fd 20 62 75  |_%,_%,but%):. bu|
0000e490  74 25 3d 30 3a f4 20 57  61 69 74 20 66 6f 72 20  |t%=0:. Wait for |
0000e4a0  62 75 74 74 6f 6e 73 20  72 65 6c 65 61 73 65 64  |buttons released|
0000e4b0  0d 30 0c 40 20 c8 97 20  c8 93 20 30 2c 30 2c 73  |.0.@ .. .. 0,0,s|
0000e4c0  69 7a 65 78 25 2d 78 73  25 2c 73 69 7a 65 79 25  |izex%-xs%,sizey%|
0000e4d0  2d 79 73 25 3a f4 20 52  65 73 74 72 69 63 74 20  |-ys%:. Restrict |
0000e4e0  70 6f 69 6e 74 65 72 20  74 6f 20 69 6d 61 67 65  |pointer to image|
0000e4f0  0d 30 16 3c 20 c8 97 20  b8 20 30 2c 73 69 7a 65  |.0.< .. . 0,size|
0000e500  79 25 2d 79 73 25 3a f4  20 4d 6f 75 73 65 20 74  |y%-ys%:. Mouse t|
0000e510  6f 20 74 6f 70 20 72 69  67 68 74 20 6f 66 20 73  |o top right of s|
0000e520  63 61 6c 65 64 20 73 70  72 69 74 65 0d 30 20 38  |caled sprite.0 8|
0000e530  20 f5 20 f2 72 6d 6f 75  73 65 28 78 31 25 2c 79  | . .rmouse(x1%,y|
0000e540  32 25 2c 62 75 74 25 29  3a f2 76 61 6c 75 65 5f  |2%,but%):.value_|
0000e550  70 74 72 28 78 31 25 81  78 73 25 2c 79 32 25 81  |ptr(x1%.xs%,y2%.|
0000e560  79 73 25 29 0d 30 2a 23  20 fd 20 62 75 74 25 3c  |ys%).0*# . but%<|
0000e570  3e 30 3a f4 20 47 65 74  20 74 6f 70 20 6c 65 66  |>0:. Get top lef|
0000e580  74 20 70 6f 69 6e 74 0d  30 34 3e 20 f5 20 f2 6d  |t point.04> . .m|
0000e590  6f 75 73 65 28 5f 25 2c  5f 25 2c 62 75 74 25 29  |ouse(_%,_%,but%)|
0000e5a0  3a fd 20 62 75 74 25 3d  30 3a f4 20 57 61 69 74  |:. but%=0:. Wait|
0000e5b0  20 66 6f 72 20 62 75 74  74 6f 6e 73 20 72 65 6c  | for buttons rel|
0000e5c0  65 61 73 65 64 0d 30 3e  2c 20 78 32 25 3d 78 31  |eased.0>, x2%=x1|
0000e5d0  25 3a 79 31 25 3d 79 32  25 3a f4 20 49 6e 69 74  |%:y1%=y2%:. Init|
0000e5e0  69 61 6c 20 77 69 6e 64  6f 77 20 63 6f 72 6e 65  |ial window corne|
0000e5f0  72 0d 30 48 3e 20 c8 97  20 c8 93 20 78 31 25 2c  |r.0H> .. .. x1%,|
0000e600  30 2c 73 69 7a 65 78 25  2d 78 73 25 2d 78 31 25  |0,sizex%-xs%-x1%|
0000e610  2c 79 32 25 3a f4 20 54  72 61 70 20 6d 6f 75 73  |,y2%:. Trap mous|
0000e620  65 20 74 6f 20 64 6f 77  6e 2f 72 69 67 68 74 0d  |e to down/right.|
0000e630  30 52 33 20 c8 99 20 57  53 65 74 43 6f 6c 25 2c  |0R3 .. WSetCol%,|
0000e640  28 34 3c 3c 34 29 2b 30  3a f4 20 49 6e 76 65 72  |(4<<4)+0:. Inver|
0000e650  74 20 63 6f 6c 6f 75 72  20 6f 6e 20 73 63 72 65  |t colour on scre|
0000e660  65 6e 0d 30 5c 41 20 6f  78 25 3d 78 32 25 3a 6f  |en.0\A ox%=x2%:o|
0000e670  79 25 3d 79 31 25 3a c8  93 20 78 31 25 2c 79 31  |y%=y1%:.. x1%,y1|
0000e680  25 2c 78 32 25 2d 78 31  25 2c 79 32 25 2d 79 31  |%,x2%-x1%,y2%-y1|
0000e690  25 3a f4 20 46 69 72 73  74 20 72 65 63 74 61 6e  |%:. First rectan|
0000e6a0  67 6c 65 0d 30 66 1c 20  f5 20 f2 72 6d 6f 75 73  |gle.0f. . .rmous|
0000e6b0  65 28 78 32 25 2c 79 31  25 2c 62 75 74 25 29 0d  |e(x2%,y1%,but%).|
0000e6c0  30 70 30 20 f2 76 61 6c  75 65 5f 70 74 72 28 28  |0p0 .value_ptr((|
0000e6d0  78 32 25 2d 78 31 25 29  81 78 73 25 2b 31 2c 28  |x2%-x1%).xs%+1,(|
0000e6e0  79 32 25 2d 79 31 25 29  81 79 73 25 2b 31 29 0d  |y2%-y1%).ys%+1).|
0000e6f0  30 7a 1d 20 e7 28 78 32  25 3c 3e 6f 78 25 29 84  |0z. .(x2%<>ox%).|
0000e700  28 79 31 25 3c 3e 6f 79  25 29 20 8c 0d 30 84 35  |(y1%<>oy%) ..0.5|
0000e710  20 20 c8 93 20 78 31 25  2c 6f 79 25 2c 6f 78 25  |  .. x1%,oy%,ox%|
0000e720  2d 78 31 25 2c 79 32 25  2d 6f 79 25 3a f4 20 57  |-x1%,y2%-oy%:. W|
0000e730  69 70 65 20 6f 6c 64 20  72 65 63 74 61 6e 67 6c  |ipe old rectangl|
0000e740  65 0d 30 8e 30 20 20 c8  93 20 78 31 25 2c 79 31  |e.0.0  .. x1%,y1|
0000e750  25 2c 78 32 25 2d 78 31  25 2c 79 32 25 2d 79 31  |%,x2%-x1%,y2%-y1|
0000e760  25 3a f4 20 4e 65 77 20  72 65 63 74 61 6e 67 6c  |%:. New rectangl|
0000e770  65 0d 30 98 2a 20 20 6f  78 25 3d 78 32 25 3a 6f  |e.0.*  ox%=x2%:o|
0000e780  79 25 3d 79 31 25 3a f4  20 4f 6c 64 20 6d 6f 75  |y%=y1%:. Old mou|
0000e790  73 65 20 70 6f 73 69 74  69 6f 6e 0d 30 a2 06 20  |se position.0.. |
0000e7a0  cd 0d 30 ac 2a 20 fd 20  62 75 74 25 3c 3e 30 3a  |..0.* . but%<>0:|
0000e7b0  f4 20 55 6e 74 69 6c 20  73 65 63 6f 6e 64 20 62  |. Until second b|
0000e7c0  75 74 74 6f 6e 20 70 72  65 73 73 0d 30 b6 42 20  |utton press.0.B |
0000e7d0  c8 97 20 c8 93 20 30 2c  30 2c 53 63 72 57 25 2c  |.. .. 0,0,ScrW%,|
0000e7e0  53 63 72 48 25 3a f4 20  52 65 73 65 74 20 6d 6f  |ScrH%:. Reset mo|
0000e7f0  75 73 65 20 72 65 63 74  61 6e 67 6c 65 20 74 6f  |use rectangle to|
0000e800  20 77 68 6f 6c 65 20 73  63 72 65 65 6e 0d 30 c0  | whole screen.0.|
0000e810  30 20 c8 93 20 78 31 25  2c 79 31 25 2c 78 32 25  |0 .. x1%,y1%,x2%|
0000e820  2d 78 31 25 2c 79 32 25  2d 79 31 25 3a f4 20 57  |-x1%,y2%-y1%:. W|
0000e830  69 70 65 20 72 65 63 74  61 6e 67 6c 65 0d 30 ca  |ipe rectangle.0.|
0000e840  22 20 ec 20 30 2c 30 3a  f4 20 57 69 70 65 20 73  |" . 0,0:. Wipe s|
0000e850  75 72 72 6f 75 6e 64 69  6e 67 20 61 72 65 61 0d  |urrounding area.|
0000e860  30 d4 3a 20 5f 25 3d 78  31 25 2d 78 73 25 3a e7  |0.: _%=x1%-xs%:.|
0000e870  5f 25 3e 3d 30 20 8c 20  f0 20 31 30 33 2c 5f 25  |_%>=0 . . 103,_%|
0000e880  2c 31 30 32 34 2d 79 73  25 20 8b 20 ec 20 5f 25  |,1024-ys% . . _%|
0000e890  2c 31 30 32 34 2d 79 73  25 0d 30 de 3d 20 5f 25  |,1024-ys%.0.= _%|
0000e8a0  3d 79 32 25 2b 79 73 25  3a e7 5f 25 3c 53 63 72  |=y2%+ys%:._%<Scr|
0000e8b0  48 25 20 8c 20 f0 20 31  30 33 2c 31 32 38 30 2d  |H% . . 103,1280-|
0000e8c0  78 73 25 2c 5f 25 20 8b  20 ec 20 31 32 38 30 2d  |xs%,_% . . 1280-|
0000e8d0  78 73 25 2c 5f 25 0d 30  e8 2f 20 5f 25 3d 78 32  |xs%,_%.0./ _%=x2|
0000e8e0  25 2b 78 73 25 3a e7 5f  25 3c 53 63 72 57 25 20  |%+xs%:._%<ScrW% |
0000e8f0  8c 20 f0 20 31 30 33 2c  5f 25 2c 30 20 8b 20 ec  |. . 103,_%,0 . .|
0000e900  20 5f 25 2c 30 0d 30 f2  38 20 5f 25 3d 79 31 25  | _%,0.0.8 _%=y1%|
0000e910  2d 79 73 25 3a e7 5f 25  3e 3d 30 20 8c 20 f0 20  |-ys%:._%>=0 . . |
0000e920  31 30 33 2c 78 31 25 2d  78 73 25 2c 5f 25 20 8b  |103,x1%-xs%,_% .|
0000e930  20 ec 20 78 31 25 2d 78  73 25 2c 5f 25 0d 30 fc  | . x1%-xs%,_%.0.|
0000e940  36 20 c8 99 20 22 4f 53  5f 43 4c 49 22 2c 22 50  |6 .. "OS_CLI","P|
0000e950  6f 69 6e 74 65 72 20 31  22 3a f4 20 52 65 73 74  |ointer 1":. Rest|
0000e960  6f 72 65 20 64 65 66 61  75 6c 74 20 70 6f 69 6e  |ore default poin|
0000e970  74 65 72 0d 31 06 45 cc  20 78 31 25 3d 30 3a 79  |ter.1.E. x1%=0:y|
0000e980  31 25 3d 30 3a 78 32 25  3d 73 69 7a 65 78 25 2d  |1%=0:x2%=sizex%-|
0000e990  78 73 25 3a 79 32 25 3d  73 69 7a 65 79 25 2d 79  |xs%:y2%=sizey%-y|
0000e9a0  73 25 3a f4 20 57 68 6f  6c 65 20 73 70 72 69 74  |s%:. Whole sprit|
0000e9b0  65 20 77 69 6e 64 6f 77  0d 31 10 05 cd 0d 31 1a  |e window.1....1.|
0000e9c0  26 ef 32 34 2c 78 31 25  3b 79 31 25 3b 78 32 25  |&.24,x1%;y1%;x2%|
0000e9d0  3b 79 32 25 3b 3a f4 20  43 6c 69 70 20 77 69 6e  |;y2%;:. Clip win|
0000e9e0  64 6f 77 0d 31 24 05 e1  0d 31 2e 05 20 0d 31 38  |dow.1$...1.. .18|
0000e9f0  1e dd f2 72 6d 6f 75 73  65 28 f8 20 78 25 2c f8  |...rmouse(. x%,.|
0000ea00  20 79 25 2c f8 20 62 75  74 25 29 0d 31 42 4a f4  | y%,. but%).1BJ.|
0000ea10  20 52 65 74 75 72 6e 73  20 6d 6f 75 73 65 20 63  | Returns mouse c|
0000ea20  6f 6f 72 64 69 6e 61 74  65 73 20 61 6e 64 20 62  |oordinates and b|
0000ea30  75 74 74 6f 6e 73 2c 20  72 6f 75 6e 64 65 64 20  |uttons, rounded |
0000ea40  74 6f 20 65 78 61 63 74  20 70 69 78 65 6c 20 63  |to exact pixel c|
0000ea50  6f 6f 72 64 73 0d 31 4c  24 f2 6d 6f 75 73 65 28  |oords.1L$.mouse(|
0000ea60  78 25 2c 79 25 2c 62 75  74 25 29 3a f4 20 4d 6f  |x%,y%,but%):. Mo|
0000ea70  75 73 65 20 73 74 61 74  65 0d 31 56 2a 78 25 2d  |use state.1V*x%-|
0000ea80  3d 78 25 20 83 20 78 73  25 3a 79 25 2d 3d 79 25  |=x% . xs%:y%-=y%|
0000ea90  20 83 20 79 73 25 3a f4  20 52 6f 75 6e 64 20 64  | . ys%:. Round d|
0000eaa0  6f 77 6e 0d 31 60 05 e1  0d 31 6a 05 20 0d 31 74  |own.1`...1j. .1t|
0000eab0  1c dd f2 76 61 6c 75 65  5f 70 74 72 28 76 61 6c  |...value_ptr(val|
0000eac0  31 25 2c 76 61 6c 32 25  29 0d 31 7e 1c f4 20 50  |1%,val2%).1~.. P|
0000ead0  75 74 73 20 76 61 6c 75  65 73 20 69 6e 20 70 6f  |uts values in po|
0000eae0  69 6e 74 65 72 0d 31 88  45 c8 99 20 4f 53 53 70  |inter.1.E.. OSSp|
0000eaf0  6f 70 25 2c 36 30 2b 32  35 36 2c 70 6f 69 6e 74  |op%,60+256,point|
0000eb00  65 72 2c 70 74 72 24 2c  30 20 b8 20 72 30 2c 72  |er,ptr$,0 . r0,r|
0000eb10  31 2c 72 32 2c 72 33 3a  f4 20 4f 75 74 70 75 74  |1,r2,r3:. Output|
0000eb20  20 74 6f 20 73 70 72 69  74 65 0d 31 92 77 fb 31  | to sprite.1.w.1|
0000eb30  32 39 3a fb 32 3a f1 8a  30 2c 32 29 3b c2 22 20  |29:.2:..0,2);." |
0000eb40  20 20 22 2b c3 76 61 6c  31 25 2c 34 29 27 c2 22  |  "+.val1%,4)'."|
0000eb50  20 20 20 22 2b c3 76 61  6c 32 25 2c 34 29 3b 3a  |   "+.val2%,4);:|
0000eb60  c8 99 20 4f 53 53 70 6f  70 25 2c 33 36 2b 32 35  |.. OSSpop%,36+25|
0000eb70  36 2c 70 6f 69 6e 74 65  72 2c 70 74 72 24 2c 25  |6,pointer,ptr$,%|
0000eb80  30 30 30 30 30 31 30 3a  f4 20 50 72 69 6e 74 20  |0000010:. Print |
0000eb90  76 61 6c 75 65 73 20 61  6e 64 20 64 65 66 69 6e  |values and defin|
0000eba0  65 0d 31 9c 35 c8 99 20  4f 53 53 70 6f 70 25 2c  |e.1.5.. OSSpop%,|
0000ebb0  72 30 2c 72 31 2c 72 32  2c 72 33 3a f4 20 52 65  |r0,r1,r2,r3:. Re|
0000ebc0  73 74 6f 72 65 20 6f 75  74 70 75 74 20 74 6f 20  |store output to |
0000ebd0  73 63 72 65 65 6e 0d 31  a6 05 e1 0d 31 b0 05 20  |screen.1....1.. |
0000ebe0  0d 31 ba 0f dd f2 6d 61  69 6e 5f 6d 65 6e 75 0d  |.1....main_menu.|
0000ebf0  31 c4 17 f4 20 43 72 65  61 74 65 73 20 6d 61 69  |1... Creates mai|
0000ec00  6e 20 6d 65 6e 75 0d 31  ce 0b ea 20 78 25 2c 79  |n menu.1... x%,y|
0000ec10  25 0d 31 d8 21 f2 73 65  74 6d 65 6e 75 3a f4 20  |%.1.!.setmenu:. |
0000ec20  53 65 74 20 66 6c 61 67  73 20 61 6e 64 20 64 61  |Set flags and da|
0000ec30  74 61 0d 31 e2 33 f2 6d  6f 75 73 65 28 78 25 2c  |ta.1.3.mouse(x%,|
0000ec40  79 25 2c 5f 25 29 3a e7  46 72 6f 6d 25 3d 32 20  |y%,_%):.From%=2 |
0000ec50  8c 20 79 25 2b 3d 32 34  20 8b 20 79 25 3d 39 36  |. y%+=24 . y%=96|
0000ec60  2b 36 2a 34 30 0d 31 ec  30 6d 65 6e 75 31 3d 6d  |+6*40.1.0menu1=m|
0000ec70  65 6e 75 6d 61 69 6e 25  3a c8 99 20 57 43 72 65  |enumain%:.. WCre|
0000ec80  61 74 65 4d 25 2c 2c 6d  65 6e 75 31 2c 78 25 2d  |ateM%,,menu1,x%-|
0000ec90  36 34 2c 79 25 0d 31 f6  05 e1 0d 32 00 05 20 0d  |64,y%.1....2.. .|
0000eca0  32 0a 0d dd f2 73 65 74  6d 65 6e 75 0d 32 14 35  |2....setmenu.2.5|
0000ecb0  f4 20 57 72 69 74 65 73  20 63 75 72 72 65 6e 74  |. Writes current|
0000ecc0  20 66 6c 61 67 73 20 61  6e 64 20 69 63 6f 6e 20  | flags and icon |
0000ecd0  64 61 74 61 20 74 6f 20  6d 61 69 6e 20 6d 65 6e  |data to main men|
0000ece0  75 0d 32 1e 0a f4 20 4d  61 69 6e 0d 32 28 1e f2  |u.2... Main.2(..|
0000ecf0  69 66 6c 28 69 70 54 72  49 6d 61 67 65 69 6e 66  |ifl(ipTrImageinf|
0000ed00  6f 2c 30 2c ac 49 6d 67  29 0d 32 32 1f f2 69 66  |o,0,.Img).22..if|
0000ed10  6c 28 69 70 54 72 4d 61  6e 69 70 75 6c 61 74 65  |l(ipTrManipulate|
0000ed20  2c 30 2c ac 49 6d 67 29  0d 32 3c 1c f2 69 66 6c  |,0,.Img).2<..ifl|
0000ed30  28 69 70 54 72 45 78 61  6d 69 6e 65 2c 30 2c ac  |(ipTrExamine,0,.|
0000ed40  49 6d 67 29 0d 32 46 11  f4 20 4d 61 69 6e 2e 50  |Img).2F.. Main.P|
0000ed50  6f 70 20 75 70 0d 32 50  21 f2 69 66 6c 28 69 70  |op up.2P!.ifl(ip|
0000ed60  50 6f 41 75 74 6f 6d 6f  64 65 2c 41 75 74 6f 4d  |PoAutomode,AutoM|
0000ed70  6f 64 65 2c 30 29 0d 32  5a 23 f2 69 66 6c 28 69  |ode,0).2Z#.ifl(i|
0000ed80  70 50 6f 41 75 74 6f 70  61 6c 65 74 74 65 2c 41  |pPoAutopalette,A|
0000ed90  75 74 6f 50 61 6c 2c 30  29 0d 32 64 21 f2 69 66  |utoPal,0).2d!.if|
0000eda0  6c 28 69 70 50 6f 41 75  74 6f 7a 6f 6f 6d 2c 41  |l(ipPoAutozoom,A|
0000edb0  75 74 6f 5a 6f 6f 6d 2c  30 29 0d 32 6e 21 f2 69  |utoZoom,0).2n!.i|
0000edc0  66 6c 28 69 70 50 6f 56  69 65 77 6d 6f 64 65 2c  |fl(ipPoViewmode,|
0000edd0  56 69 65 77 4d 6f 64 65  2c 30 29 0d 32 78 2b f2  |ViewMode,0).2x+.|
0000ede0  69 66 6c 28 69 70 50 6f  4d 6f 64 65 73 65 74 2c  |ifl(ipPoModeset,|
0000edf0  28 4d 6f 64 65 53 65 74  3e 30 29 2c ac 41 75 74  |(ModeSet>0),.Aut|
0000ee00  6f 4d 6f 64 65 29 0d 32  82 1a f4 20 4d 61 69 6e  |oMode).2... Main|
0000ee10  2e 50 6f 70 20 75 70 2e  4d 6f 64 65 20 73 65 74  |.Pop up.Mode set|
0000ee20  0d 32 8c 20 f2 69 66 6c  28 69 70 4d 6f 4e 6f 6e  |.2. .ifl(ipMoNon|
0000ee30  65 2c 28 4d 6f 64 65 53  65 74 3d 30 29 2c 30 29  |e,(ModeSet=0),0)|
0000ee40  0d 32 96 22 f2 69 66 6c  28 69 70 4d 6f 4e 6f 72  |.2.".ifl(ipMoNor|
0000ee50  6d 61 6c 2c 28 4d 6f 64  65 53 65 74 3d 31 29 2c  |mal,(ModeSet=1),|
0000ee60  30 29 0d 32 a0 25 f2 69  66 6c 28 69 70 4d 6f 4d  |0).2.%.ifl(ipMoM|
0000ee70  75 6c 74 69 73 79 6e 63  2c 28 4d 6f 64 65 53 65  |ultisync,(ModeSe|
0000ee80  74 3d 32 29 2c 30 29 0d  32 aa 1f f2 69 66 6c 28  |t=2),0).2...ifl(|
0000ee90  69 70 4d 6f 75 6d 73 2c  28 4d 6f 64 65 53 65 74  |ipMoums,(ModeSet|
0000eea0  3d 33 29 2c 30 29 0d 32  b4 16 f2 69 64 61 28 69  |=3),0).2...ida(i|
0000eeb0  64 4d 6f 75 6d 73 2c a4  75 6d 73 29 0d 32 be 12  |dMoums,.ums).2..|
0000eec0  f4 20 4d 61 69 6e 2e 50  72 6f 63 65 73 73 0d 32  |. Main.Process.2|
0000eed0  c8 25 f2 69 66 6c 28 69  70 50 72 43 6c 65 61 72  |.%.ifl(ipPrClear|
0000eee0  6f 75 74 70 75 74 2c 43  6c 65 61 72 46 69 6c 65  |output,ClearFile|
0000eef0  2c 30 29 0d 32 d2 37 f2  69 66 6c 28 69 70 50 72  |,0).2.7.ifl(ipPr|
0000ef00  53 63 61 6c 69 6e 67 2c  28 28 58 4d 75 6c 25 3c  |Scaling,((XMul%<|
0000ef10  3e 58 44 69 76 25 29 84  28 59 4d 75 6c 25 3c 3e  |>XDiv%).(YMul%<>|
0000ef20  59 44 69 76 25 29 29 2c  30 29 0d 32 dc 19 f4 20  |YDiv%)),0).2... |
0000ef30  4d 61 69 6e 2e 50 72 6f  63 65 73 73 2e 43 6f 6c  |Main.Process.Col|
0000ef40  6f 75 72 0d 32 e6 28 f2  69 66 6c 28 69 70 43 6f  |our.2.(.ifl(ipCo|
0000ef50  42 6c 61 63 6b 61 6e 64  77 68 69 74 65 2c 42 6c  |Blackandwhite,Bl|
0000ef60  61 63 6b 57 68 69 74 65  2c 30 29 0d 32 f0 22 f2  |ackWhite,0).2.".|
0000ef70  69 66 6c 28 69 70 43 6f  43 6f 72 72 65 63 74 67  |ifl(ipCoCorrectg|
0000ef80  61 6d 6d 61 2c 47 61 6d  6d 61 2c 30 29 0d 32 fa  |amma,Gamma,0).2.|
0000ef90  22 f2 69 66 6c 28 69 70  43 6f 43 6f 72 72 65 63  |".ifl(ipCoCorrec|
0000efa0  74 62 6c 61 63 6b 2c 42  6c 61 63 6b 2c 30 29 0d  |tblack,Black,0).|
0000efb0  33 04 21 f2 69 66 6c 28  69 70 43 6f 45 78 70 61  |3.!.ifl(ipCoExpa|
0000efc0  6e 64 72 61 6e 67 65 2c  52 61 6e 67 65 2c 30 29  |ndrange,Range,0)|
0000efd0  0d 33 0e 23 f2 69 66 6c  28 69 70 43 6f 49 6e 76  |.3.#.ifl(ipCoInv|
0000efe0  65 72 74 52 47 42 2c 49  6e 76 65 72 74 52 47 42  |ertRGB,InvertRGB|
0000eff0  2c 30 29 0d 33 18 20 f4  20 4d 61 69 6e 2e 50 72  |,0).3. . Main.Pr|
0000f000  6f 63 65 73 73 2e 53 70  72 69 74 65 20 6f 75 74  |ocess.Sprite out|
0000f010  70 75 74 0d 33 22 29 f2  69 66 6c 28 69 70 53 70  |put.3").ifl(ipSp|
0000f020  4f 75 74 70 75 74 70 61  6c 65 74 74 65 2c 30 2c  |Outputpalette,0,|
0000f030  28 4f 75 74 4d 6f 64 65  3d 31 29 29 0d 33 2c 2d  |(OutMode=1)).3,-|
0000f040  f2 69 66 6c 28 69 70 53  70 45 72 72 6f 72 73 70  |.ifl(ipSpErrorsp|
0000f050  72 65 61 64 69 6e 67 2c  28 45 72 72 53 70 72 65  |reading,(ErrSpre|
0000f060  61 64 3c 3e 30 29 2c 30  29 0d 33 36 1d f2 69 66  |ad<>0),0).36..if|
0000f070  6c 28 69 70 53 70 5a 69  67 7a 61 67 2c 5a 69 67  |l(ipSpZigzag,Zig|
0000f080  5a 61 67 2c 30 29 0d 33  40 1a f4 20 4d 61 69 6e  |Zag,0).3@.. Main|
0000f090  2e 50 72 6f 63 65 73 73  2e 53 63 61 6c 69 6e 67  |.Process.Scaling|
0000f0a0  0d 33 4a 20 f2 69 66 6c  28 69 70 53 63 78 2c 28  |.3J .ifl(ipScx,(|
0000f0b0  58 4d 75 6c 25 3c 3e 58  44 69 76 25 29 2c 30 29  |XMul%<>XDiv%),0)|
0000f0c0  0d 33 54 20 f2 69 66 6c  28 69 70 53 63 79 2c 28  |.3T .ifl(ipScy,(|
0000f0d0  59 4d 75 6c 25 3c 3e 59  44 69 76 25 29 2c 30 29  |YMul%<>YDiv%),0)|
0000f0e0  0d 33 5e 17 f4 20 4d 61  69 6e 2e 50 72 6f 63 65  |.3^.. Main.Proce|
0000f0f0  73 73 2e 4d 69 73 63 0d  33 68 27 f2 69 66 6c 28  |ss.Misc.3h'.ifl(|
0000f100  69 70 4d 69 53 63 72 65  65 6e 62 6c 61 6e 6b 69  |ipMiScreenblanki|
0000f110  6e 67 2c 42 6c 61 6e 6b  69 6e 67 2c 30 29 0d 33  |ng,Blanking,0).3|
0000f120  72 1f f2 69 66 6c 28 69  70 4d 69 47 49 46 73 63  |r..ifl(ipMiGIFsc|
0000f130  61 6e 2c 47 49 46 53 63  61 6e 2c 30 29 0d 33 7c  |an,GIFScan,0).3||
0000f140  22 f2 69 66 6c 28 69 70  4d 69 50 65 72 63 65 6e  |".ifl(ipMiPercen|
0000f150  74 61 67 65 2c 50 65 72  63 65 6e 74 2c 30 29 0d  |tage,Percent,0).|
0000f160  33 86 27 f4 20 4d 61 69  6e 2e 50 72 6f 63 65 73  |3.'. Main.Proces|
0000f170  73 2e 43 6f 6c 6f 75 72  2e 43 6f 72 72 65 63 74  |s.Colour.Correct|
0000f180  20 67 61 6d 6d 61 0d 33  90 1b f2 69 64 61 28 69  | gamma.3...ida(i|
0000f190  64 47 61 67 61 6d 2c c3  28 47 61 6d 6d 61 46 29  |dGagam,.(GammaF)|
0000f1a0  29 0d 33 9a 27 f4 20 4d  61 69 6e 2e 50 72 6f 63  |).3.'. Main.Proc|
0000f1b0  65 73 73 2e 43 6f 6c 6f  75 72 2e 43 6f 72 72 65  |ess.Colour.Corre|
0000f1c0  63 74 20 62 6c 61 63 6b  0d 33 a4 1b f2 69 64 61  |ct black.3...ida|
0000f1d0  28 69 64 42 6c 62 6c 61  2c c3 28 42 6c 61 63 6b  |(idBlbla,.(Black|
0000f1e0  46 29 29 0d 33 ae 30 f4  20 4d 61 69 6e 2e 50 72  |F)).3.0. Main.Pr|
0000f1f0  6f 63 65 73 73 2e 53 70  72 69 74 65 20 6f 75 74  |ocess.Sprite out|
0000f200  70 75 74 2e 45 72 72 6f  72 20 73 70 72 65 61 64  |put.Error spread|
0000f210  69 6e 67 0d 33 b8 24 f2  69 66 6c 28 69 70 53 70  |ing.3.$.ifl(ipSp|
0000f220  53 69 6d 70 6c 65 2c 28  45 72 72 53 70 72 65 61  |Simple,(ErrSprea|
0000f230  64 3d 31 29 2c 30 29 0d  33 c2 2c f2 69 66 6c 28  |d=1),0).3.,.ifl(|
0000f240  69 70 53 70 46 6c 6f 79  64 53 74 65 69 6e 62 65  |ipSpFloydSteinbe|
0000f250  72 67 2c 28 45 72 72 53  70 72 65 61 64 3d 32 29  |rg,(ErrSpread=2)|
0000f260  2c 30 29 0d 33 cc 21 f2  69 66 6c 28 69 70 53 70  |,0).3.!.ifl(ipSp|
0000f270  4f 66 66 2c 28 45 72 72  53 70 72 65 61 64 3d 30  |Off,(ErrSpread=0|
0000f280  29 2c 30 29 0d 33 d6 2c  f4 20 4d 61 69 6e 2e 50  |),0).3.,. Main.P|
0000f290  72 6f 63 65 73 73 2e 53  70 72 69 74 65 20 6f 75  |rocess.Sprite ou|
0000f2a0  74 70 75 74 2e 4f 75 74  70 75 74 20 6d 6f 64 65  |tput.Output mode|
0000f2b0  0d 33 e0 20 f2 69 66 6c  28 69 70 4d 6f 41 75 74  |.3. .ifl(ipMoAut|
0000f2c0  6f 2c 28 4f 75 74 4d 6f  64 65 3d 31 29 2c 30 29  |o,(OutMode=1),0)|
0000f2d0  0d 33 ea 23 f2 69 66 6c  28 69 70 4d 6f 43 75 72  |.3.#.ifl(ipMoCur|
0000f2e0  72 65 6e 74 2c 28 4f 75  74 4d 6f 64 65 3d 32 29  |rent,(OutMode=2)|
0000f2f0  2c 30 29 0d 33 f4 2f f4  20 4d 61 69 6e 2e 50 72  |,0).3./. Main.Pr|
0000f300  6f 63 65 73 73 2e 53 70  72 69 74 65 20 6f 75 74  |ocess.Sprite out|
0000f310  70 75 74 2e 4f 75 74 70  75 74 20 70 61 6c 65 74  |put.Output palet|
0000f320  74 65 0d 33 fe 22 f2 69  66 6c 28 69 70 50 61 43  |te.3.".ifl(ipPaC|
0000f330  75 72 72 65 6e 74 2c 28  4f 75 74 50 61 6c 3d 31  |urrent,(OutPal=1|
0000f340  29 2c 30 29 0d 34 08 22  f2 69 66 6c 28 69 70 50  |),0).4.".ifl(ipP|
0000f350  61 44 65 66 61 75 6c 74  2c 28 4f 75 74 50 61 6c  |aDefault,(OutPal|
0000f360  3d 32 29 2c 30 29 0d 34  12 24 f2 69 66 6c 28 69  |=2),0).4.$.ifl(i|
0000f370  70 50 61 47 72 65 79 73  63 61 6c 65 2c 28 4f 75  |pPaGreyscale,(Ou|
0000f380  74 50 61 6c 3d 33 29 2c  30 29 0d 34 1c 1c f4 20  |tPal=3),0).4... |
0000f390  4d 61 69 6e 2e 50 72 6f  63 65 73 73 2e 53 63 61  |Main.Process.Sca|
0000f3a0  6c 69 6e 67 2e 78 0d 34  26 36 64 24 3d c3 28 58  |ling.x.4&6d$=.(X|
0000f3b0  4d 75 6c 25 29 2b 22 3a  22 3a e7 44 69 76 49 73  |Mul%)+":":.DivIs|
0000f3c0  49 6e 58 20 8c 20 64 24  2b 3d 22 78 22 20 8b 20  |InX . d$+="x" . |
0000f3d0  64 24 2b 3d c3 28 58 44  69 76 25 29 0d 34 30 13  |d$+=.(XDiv%).40.|
0000f3e0  f2 69 64 61 28 69 64 58  78 73 63 2c 64 24 29 0d  |.ida(idXxsc,d$).|
0000f3f0  34 3a 1c f4 20 4d 61 69  6e 2e 50 72 6f 63 65 73  |4:.. Main.Proces|
0000f400  73 2e 53 63 61 6c 69 6e  67 2e 79 0d 34 44 36 64  |s.Scaling.y.4D6d|
0000f410  24 3d c3 28 59 4d 75 6c  25 29 2b 22 3a 22 3a e7  |$=.(YMul%)+":":.|
0000f420  44 69 76 49 73 49 6e 59  20 8c 20 64 24 2b 3d 22  |DivIsInY . d$+="|
0000f430  79 22 20 8b 20 64 24 2b  3d c3 28 59 44 69 76 25  |y" . d$+=.(YDiv%|
0000f440  29 0d 34 4e 13 f2 69 64  61 28 69 64 59 79 73 63  |).4N..ida(idYysc|
0000f450  2c 64 24 29 0d 34 58 24  f4 20 4d 61 69 6e 2e 50  |,d$).4X$. Main.P|
0000f460  72 6f 63 65 73 73 2e 4d  69 73 63 2e 49 6d 61 67  |rocess.Misc.Imag|
0000f470  65 20 6e 75 6d 62 65 72  0d 34 62 1d f2 69 64 61  |e number.4b..ida|
0000f480  28 69 64 4e 75 6e 75 6d  2c c3 28 49 6d 61 67 65  |(idNunum,.(Image|
0000f490  4e 72 25 29 29 0d 34 6c  17 f4 20 4d 61 69 6e 2e  |Nr%)).4l.. Main.|
0000f4a0  45 78 61 6d 69 6e 65 2e  5a 6f 6f 6d 0d 34 76 28  |Examine.Zoom.4v(|
0000f4b0  f2 69 66 6c 28 69 70 5a  6f 31 31 2c 28 28 5a 6f  |.ifl(ipZo11,((Zo|
0000f4c0  6f 6d 58 3d 31 29 80 28  5a 6f 6f 6d 59 3d 31 29  |omX=1).(ZoomY=1)|
0000f4d0  29 2c 30 29 0d 34 80 0f  f4 20 4d 61 69 6e 2e 4d  |),0).4... Main.M|
0000f4e0  69 73 63 0d 34 8a 21 f2  69 66 6c 28 69 70 4d 69  |isc.4.!.ifl(ipMi|
0000f4f0  49 6d 61 67 65 70 61 6c  65 74 74 65 2c 30 2c ac  |Imagepalette,0,.|
0000f500  49 6d 67 29 0d 34 94 14  f4 20 4d 61 69 6e 2e 4d  |Img).4... Main.M|
0000f510  69 73 63 2e 53 61 76 65  0d 34 9e 19 f2 69 66 6c  |isc.Save.4...ifl|
0000f520  28 69 70 53 61 46 75 6c  6c 2c 30 2c ac 49 6d 67  |(ipSaFull,0,.Img|
0000f530  29 0d 34 a8 1a f2 69 66  6c 28 69 70 53 61 57 68  |).4...ifl(ipSaWh|
0000f540  6f 6c 65 2c 30 2c ac 49  6d 67 29 0d 34 b2 19 f2  |ole,0,.Img).4...|
0000f550  69 66 6c 28 69 70 53 61  50 61 72 74 2c 30 2c ac  |ifl(ipSaPart,0,.|
0000f560  49 6d 67 29 0d 34 bc 20  f2 69 66 6c 28 69 70 53  |Img).4. .ifl(ipS|
0000f570  61 57 68 6f 6c 65 73 63  61 6c 65 64 2c 30 2c ac  |aWholescaled,0,.|
0000f580  49 6d 67 29 0d 34 c6 1f  f2 69 66 6c 28 69 70 53  |Img).4...ifl(ipS|
0000f590  61 50 61 72 74 73 63 61  6c 65 64 2c 30 2c ac 49  |aPartscaled,0,.I|
0000f5a0  6d 67 29 0d 34 d0 26 f2  69 66 6c 28 69 70 53 61  |mg).4.&.ifl(ipSa|
0000f5b0  49 6e 63 6c 75 64 65 70  61 6c 65 74 74 65 2c 53  |Includepalette,S|
0000f5c0  61 76 65 50 61 6c 2c 30  29 0d 34 da 25 f2 69 66  |avePal,0).4.%.if|
0000f5d0  6c 28 69 70 53 61 53 61  6d 65 6c 65 61 66 6e 61  |l(ipSaSameleafna|
0000f5e0  6d 65 2c 53 61 6d 65 4c  65 61 66 2c 30 29 0d 34  |me,SameLeaf,0).4|
0000f5f0  e4 05 e1 0d 34 ee 05 20  0d 34 f8 14 dd f2 69 66  |....4.. .4....if|
0000f600  6c 28 66 6c 25 2c 74 25  2c 64 25 29 0d 35 02 1a  |l(fl%,t%,d%).5..|
0000f610  f4 20 53 65 74 73 20 6d  65 6e 75 20 69 63 6f 6e  |. Sets menu icon|
0000f620  20 66 6c 61 67 73 0d 35  0c 1b 74 25 3d 2d 28 74  | flags.5..t%=-(t|
0000f630  25 3c 3e 30 29 3a 64 25  3d 2d 28 64 25 3c 3e 30  |%<>0):d%=-(d%<>0|
0000f640  29 0d 35 16 1e 21 66 6c  25 3d 28 28 21 66 6c 25  |).5..!fl%=((!fl%|
0000f650  29 80 ac 31 29 2b 74 25  3a f4 20 54 69 63 6b 0d  |)..1)+t%:. Tick.|
0000f660  35 20 2e 66 6c 25 21 38  3d 28 28 66 6c 25 21 38  |5 .fl%!8=((fl%!8|
0000f670  29 80 ac 28 31 3c 3c 32  32 29 29 2b 28 64 25 3c  |)..(1<<22))+(d%<|
0000f680  3c 32 32 29 3a f4 20 53  68 61 64 65 64 0d 35 2a  |<22):. Shaded.5*|
0000f690  05 e1 0d 35 34 05 20 0d  35 3e 11 dd f2 69 64 61  |...54. .5>...ida|
0000f6a0  28 64 70 25 2c 64 24 29  0d 35 48 19 f4 20 53 65  |(dp%,d$).5H.. Se|
0000f6b0  74 73 20 6d 65 6e 75 20  69 63 6f 6e 20 64 61 74  |ts menu icon dat|
0000f6c0  61 0d 35 52 0b 24 64 70  25 3d 64 24 0d 35 5c 05  |a.5R.$dp%=d$.5\.|
0000f6d0  e1 0d 35 66 05 20 0d 35  70 15 dd f2 73 65 74 5f  |..5f. .5p...set_|
0000f6e0  6d 6f 64 65 28 6d 6f 64  65 25 29 0d 35 7a 32 f4  |mode(mode%).5z2.|
0000f6f0  20 53 65 74 73 20 6e 65  77 20 6d 6f 64 65 20 28  | Sets new mode (|
0000f700  69 66 20 65 6e 61 62 6c  65 64 29 20 66 6f 72 20  |if enabled) for |
0000f710  69 6d 61 67 65 20 64 69  73 70 6c 61 79 0d 35 84  |image display.5.|
0000f720  0e ea 20 6c 6f 67 32 62  70 70 25 0d 35 8e 3e e7  |.. log2bpp%.5.>.|
0000f730  41 75 74 6f 4d 6f 64 65  20 8b 20 f2 73 65 74 5f  |AutoMode . .set_|
0000f740  74 72 61 6e 73 3a e1 3a  f4 20 41 75 74 6f 20 6d  |trans:.:. Auto m|
0000f750  6f 64 65 20 73 65 6c 65  63 74 69 6f 6e 20 6e 6f  |ode selection no|
0000f760  74 20 65 6e 61 62 6c 65  64 0d 35 98 29 6c 6f 67  |t enabled.5.)log|
0000f770  32 62 70 70 25 3d a4 6d  6f 64 65 5f 76 61 72 28  |2bpp%=.mode_var(|
0000f780  6d 6f 64 65 25 2c 39 29  3a f4 20 4c 6f 67 32 42  |mode%,9):. Log2B|
0000f790  50 50 0d 35 a2 10 c8 8e  20 4d 6f 64 65 53 65 74  |PP.5.... ModeSet|
0000f7a0  20 ca 0d 35 ac 34 20 c9  20 30 20 3a 20 f4 20 4e  | ..5.4 . 0 : . N|
0000f7b0  6f 20 6d 6f 64 65 20 73  65 74 20 3a 20 6e 6f 20  |o mode set : no |
0000f7c0  63 68 61 6e 67 65 20 6f  66 20 64 69 73 70 6c 61  |change of displa|
0000f7d0  79 20 6d 6f 64 65 0d 35  b6 3a 20 c9 20 31 20 3a  |y mode.5.: . 1 :|
0000f7e0  20 6d 6f 64 65 25 3d bb  c1 22 20 30 20 38 31 32  | mode%=.." 0 812|
0000f7f0  31 35 22 2c 6c 6f 67 32  62 70 70 25 2a 32 2b 31  |15",log2bpp%*2+1|
0000f800  2c 32 29 3a f4 20 4e 6f  72 6d 61 6c 20 73 65 74  |,2):. Normal set|
0000f810  0d 35 c0 3d 20 c9 20 32  20 3a 20 6d 6f 64 65 25  |.5.= . 2 : mode%|
0000f820  3d bb c1 22 31 38 31 39  32 30 32 31 22 2c 6c 6f  |=.."18192021",lo|
0000f830  67 32 62 70 70 25 2a 32  2b 31 2c 32 29 3a f4 20  |g2bpp%*2+1,2):. |
0000f840  4d 75 6c 74 69 73 79 6e  63 20 73 65 74 0d 35 ca  |Multisync set.5.|
0000f850  34 20 c9 20 33 20 3a 20  6d 6f 64 65 25 3d 55 73  |4 . 3 : mode%=Us|
0000f860  65 72 4d 6f 64 65 53 65  74 25 28 6c 6f 67 32 62  |erModeSet%(log2b|
0000f870  70 70 25 2b 31 29 3a f4  20 55 73 65 72 20 73 65  |pp%+1):. User se|
0000f880  74 0d 35 d4 05 cb 0d 35  de 7d e7 ac 4d 75 6c 74  |t.5....5.}..Mult|
0000f890  69 53 79 6e 63 20 8c 20  e7 28 6d 6f 64 65 25 3e  |iSync . .(mode%>|
0000f8a0  3d 31 38 29 80 28 6d 6f  64 65 25 3c 3d 32 38 29  |=18).(mode%<=28)|
0000f8b0  20 8c 20 6d 6f 64 65 25  3d bb 28 c1 22 30 30 30  | . mode%=.(."000|
0000f8c0  38 31 32 31 35 31 35 30  30 32 34 30 30 30 38 31  |8121515002400081|
0000f8d0  32 31 35 22 2c 28 6d 6f  64 65 25 2d 31 38 29 2a  |215",(mode%-18)*|
0000f8e0  32 2b 31 2c 32 29 29 3a  f4 20 4d 61 70 20 74 6f  |2+1,2)):. Map to|
0000f8f0  20 6e 6f 6e 2d 6d 75 6c  74 69 73 79 6e 63 20 6d  | non-multisync m|
0000f900  6f 64 65 0d 35 e8 25 f2  6d 6f 64 65 5f 63 68 61  |ode.5.%.mode_cha|
0000f910  6e 67 65 28 6d 6f 64 65  25 29 3a f4 20 53 65 6c  |nge(mode%):. Sel|
0000f920  65 63 74 20 6d 6f 64 65  0d 35 f2 05 e1 0d 35 fc  |ect mode.5....5.|
0000f930  05 20 0d 36 06 18 dd f2  6d 6f 64 65 5f 63 68 61  |. .6....mode_cha|
0000f940  6e 67 65 28 6d 6f 64 65  25 29 0d 36 10 29 f4 20  |nge(mode%).6.). |
0000f950  4d 6f 64 65 20 68 61 73  20 63 68 61 6e 67 65 64  |Mode has changed|
0000f960  20 6f 72 20 73 65 6c 65  63 74 20 6e 65 77 20 6d  | or select new m|
0000f970  6f 64 65 0d 36 1a 29 f4  20 49 66 20 6d 6f 64 65  |ode.6.). If mode|
0000f980  25 3e 3d 30 2c 20 6d 6f  64 65 20 6d 6f 64 65 25  |%>=0, mode mode%|
0000f990  20 69 73 20 73 65 6c 65  63 74 65 64 0d 36 24 4a  | is selected.6$J|
0000f9a0  ea 20 5f 25 2c 78 77 69  6e 64 25 2c 79 77 69 6e  |. _%,xwind%,ywin|
0000f9b0  64 25 2c 6f 74 68 65 72  6d 6f 64 65 2c 63 6f 6c  |d%,othermode,col|
0000f9c0  6f 75 72 73 25 2c 70 6f  73 25 2c 61 6c 74 6d 6f  |ours%,pos%,altmo|
0000f9d0  64 65 24 2c 6d 6f 64 65  63 6f 6c 73 25 2c 73 70  |de$,modecols%,sp|
0000f9e0  72 63 6f 6c 73 25 0d 36  2e 33 c8 99 20 57 52 65  |rcols%.6.3.. WRe|
0000f9f0  61 64 50 25 2c 2c 77 69  6d 70 70 61 6c 3a f4 20  |adP%,,wimppal:. |
0000fa00  52 65 61 64 20 63 75 72  72 65 6e 74 20 57 49 4d  |Read current WIM|
0000fa10  50 20 70 61 6c 65 74 74  65 0d 36 38 1e e7 28 6d  |P palette.68..(m|
0000fa20  6f 64 65 25 3e 3d 30 29  20 80 20 28 6d 6f 64 65  |ode%>=0) . (mode|
0000fa30  25 3c 3e eb 29 20 8c 0d  36 42 22 20 c8 99 20 57  |%<>.) ..6B" .. W|
0000fa40  53 65 74 4d 25 2c 6d 6f  64 65 25 3a f4 20 43 68  |SetM%,mode%:. Ch|
0000fa50  61 6e 67 65 20 6d 6f 64  65 0d 36 4c 10 20 e7 6d  |ange mode.6L. .m|
0000fa60  6f 64 65 25 3c 3e eb 20  8c 0d 36 56 47 20 20 d4  |ode%<>. ..6VG  .|
0000fa70  20 31 2c 2d 31 30 2c 31  38 30 2c 31 3a f4 20 41  | 1,-10,180,1:. A|
0000fa80  6c 65 72 74 20 75 73 65  72 20 74 68 61 74 20 27  |lert user that '|
0000fa90  69 64 65 61 6c 27 20 6d  6f 64 65 20 63 6f 75 6c  |ideal' mode coul|
0000faa0  64 6e 27 74 20 62 65 20  73 65 6c 65 63 74 65 64  |dn't be selected|
0000fab0  0d 36 60 3a 20 20 63 6f  6c 6f 75 72 73 25 3d 32  |.6`:  colours%=2|
0000fac0  5e 28 32 5e a4 6d 6f 64  65 5f 76 61 72 28 6d 6f  |^(2^.mode_var(mo|
0000fad0  64 65 25 2c 39 29 29 3a  f4 20 43 6f 6c 6f 75 72  |de%,9)):. Colour|
0000fae0  73 20 72 65 71 75 69 72  65 64 0d 36 6a a8 20 20  |s required.6j.  |
0000faf0  e7 63 6f 6c 6f 75 72 73  25 3d 32 20 8c 20 61 6c  |.colours%=2 . al|
0000fb00  74 6d 6f 64 65 24 3d 22  7c 31 38 30 30 22 20 8b  |tmode$="|1800" .|
0000fb10  20 e7 63 6f 6c 6f 75 72  73 25 3d 34 20 8c 20 61  | .colours%=4 . a|
0000fb20  6c 74 6d 6f 64 65 24 3d  22 7c 31 39 30 38 7c 30  |ltmode$="|1908|0|
0000fb30  38 30 31 22 20 8b 20 e7  63 6f 6c 6f 75 72 73 25  |801" . .colours%|
0000fb40  3d 31 36 20 8c 20 61 6c  74 6d 6f 64 65 24 3d 22  |=16 . altmode$="|
0000fb50  7c 32 30 31 32 7c 31 36  31 32 7c 31 32 30 39 22  ||2012|1612|1209"|
0000fb60  20 8b 20 e7 63 6f 6c 6f  75 72 73 25 3d 32 35 36  | . .colours%=256|
0000fb70  20 8c 20 61 6c 74 6d 6f  64 65 24 3d 22 7c 32 31  | . altmode$="|21|
0000fb80  31 35 7c 32 34 31 35 7c  31 35 31 33 7c 31 33 31  |15|2415|1513|131|
0000fb90  30 22 0d 36 74 07 20 20  f5 0d 36 7e bf 20 20 e7  |0".6t.  ..6~.  .|
0000fba0  eb 3d 6d 6f 64 65 25 20  8b 20 70 6f 73 25 3d a7  |.=mode% . pos%=.|
0000fbb0  61 6c 74 6d 6f 64 65 24  2c 22 7c 22 2b c2 22 30  |altmode$,"|"+."0|
0000fbc0  22 2b c3 6d 6f 64 65 25  2c 32 29 29 3a e7 70 6f  |"+.mode%,2)):.po|
0000fbd0  73 25 3e 30 20 8c 20 6d  6f 64 65 25 3d bb 28 c1  |s%>0 . mode%=.(.|
0000fbe0  61 6c 74 6d 6f 64 65 24  2c 70 6f 73 25 2b 33 29  |altmode$,pos%+3)|
0000fbf0  29 20 8b 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |) . .error(-1,"I|
0000fc00  20 66 61 69 6c 65 64 20  74 6f 20 73 65 6c 65 63  | failed to selec|
0000fc10  74 20 74 68 65 20 69 64  65 61 6c 20 6d 6f 64 65  |t the ideal mode|
0000fc20  2c 20 6e 6f 72 20 61 6e  79 20 61 6c 74 65 72 6e  |, nor any altern|
0000fc30  61 74 69 76 65 20 6d 6f  64 65 20 21 20 4e 6f 77  |ative mode ! Now|
0000fc40  20 79 6f 75 20 74 72 79  20 69 74 20 21 22 29 3a  | you try it !"):|
0000fc50  6d 6f 64 65 25 3d 2d 31  0d 36 88 23 20 20 c8 99  |mode%=-1.6.#  ..|
0000fc60  20 57 53 65 74 4d 25 2c  6d 6f 64 65 25 3a f4 20  | WSetM%,mode%:. |
0000fc70  43 68 61 6e 67 65 20 6d  6f 64 65 0d 36 92 1d 20  |Change mode.6.. |
0000fc80  20 fd 20 28 eb 3d 6d 6f  64 65 25 29 20 84 20 28  | . (.=mode%) . (|
0000fc90  6d 6f 64 65 25 3c 30 29  0d 36 9c 06 20 cd 0d 36  |mode%<0).6.. ..6|
0000fca0  a6 05 cd 0d 36 b0 40 6f  74 68 65 72 6d 6f 64 65  |....6.@othermode|
0000fcb0  3d 28 eb 3c 3e 43 75 72  72 4d 6f 64 65 25 29 3a  |=(.<>CurrMode%):|
0000fcc0  43 75 72 72 4d 6f 64 65  25 3d eb 3a f4 20 4d 6f  |CurrMode%=.:. Mo|
0000fcd0  64 65 20 6f 74 68 65 72  20 74 68 61 6e 20 6f 6c  |de other than ol|
0000fce0  64 20 3f 0d 36 ba 41 58  65 69 67 25 3d a4 6d 6f  |d ?.6.AXeig%=.mo|
0000fcf0  64 65 5f 76 61 72 28 eb  2c 34 29 3a 59 65 69 67  |de_var(.,4):Yeig|
0000fd00  25 3d a4 6d 6f 64 65 5f  76 61 72 28 eb 2c 35 29  |%=.mode_var(.,5)|
0000fd10  3a f4 20 52 65 61 64 20  58 2f 59 45 69 67 46 61  |:. Read X/YEigFa|
0000fd20  63 74 6f 72 0d 36 c4 34  58 73 74 65 70 25 3d 32  |ctor.6.4Xstep%=2|
0000fd30  5e 58 65 69 67 25 3a 59  73 74 65 70 25 3d 32 5e  |^Xeig%:Ystep%=2^|
0000fd40  59 65 69 67 25 3a f4 20  43 6f 6f 72 64 69 6e 61  |Yeig%:. Coordina|
0000fd50  74 65 20 73 74 65 70 73  0d 36 ce 42 78 77 69 6e  |te steps.6.Bxwin|
0000fd60  64 25 3d a4 6d 6f 64 65  5f 76 61 72 28 eb 2c 31  |d%=.mode_var(.,1|
0000fd70  31 29 2b 31 3a 79 77 69  6e 64 25 3d a4 6d 6f 64  |1)+1:ywind%=.mod|
0000fd80  65 5f 76 61 72 28 eb 2c  31 32 29 2b 31 3a f4 20  |e_var(.,12)+1:. |
0000fd90  52 65 73 6f 6c 75 74 69  6f 6e 0d 36 d8 41 53 63  |Resolution.6.ASc|
0000fda0  72 57 25 3d 28 31 3c 3c  58 65 69 67 25 29 2a 78  |rW%=(1<<Xeig%)*x|
0000fdb0  77 69 6e 64 25 3a 53 63  72 48 25 3d 28 31 3c 3c  |wind%:ScrH%=(1<<|
0000fdc0  59 65 69 67 25 29 2a 79  77 69 6e 64 25 3a f4 20  |Yeig%)*ywind%:. |
0000fdd0  53 63 72 65 65 6e 20 73  69 7a 65 0d 36 e2 0a e7  |Screen size.6...|
0000fde0  49 6d 67 20 8c 0d 36 ec  2b 20 f2 73 65 74 5f 74  |Img ..6.+ .set_t|
0000fdf0  72 61 6e 73 3a f4 20 52  65 2d 73 65 74 20 73 70  |rans:. Re-set sp|
0000fe00  72 69 74 65 20 74 72 61  6e 73 6c 61 74 69 6f 6e  |rite translation|
0000fe10  0d 36 f6 41 20 e7 41 75  74 6f 50 61 6c 20 8c 20  |.6.A .AutoPal . |
0000fe20  f2 73 65 74 5f 70 61 6c  65 74 74 65 28 31 29 3a  |.set_palette(1):|
0000fe30  f4 20 53 65 6c 65 63 74  20 69 6d 61 67 65 20 70  |. Select image p|
0000fe40  61 6c 65 74 74 65 20 69  66 20 65 6e 61 62 6c 65  |alette if enable|
0000fe50  64 0d 37 00 23 20 e7 6f  74 68 65 72 6d 6f 64 65  |d.7.# .othermode|
0000fe60  20 8c 20 f2 6e 65 77 5f  69 6d 61 67 65 5f 77 69  | . .new_image_wi|
0000fe70  6e 64 6f 77 0d 37 0a 05  cd 0d 37 14 05 e1 0d 37  |ndow.7....7....7|
0000fe80  1e 05 20 0d 37 28 0f dd  f2 73 65 74 5f 74 72 61  |.. .7(...set_tra|
0000fe90  6e 73 0d 37 32 43 f4 20  53 65 74 73 20 74 72 61  |ns.72C. Sets tra|
0000fea0  6e 73 6c 61 74 69 6f 6e  20 66 61 63 74 6f 72 73  |nslation factors|
0000feb0  20 28 74 72 61 6e 73 74  61 62 20 26 20 70 61 6c  | (transtab & pal|
0000fec0  65 74 74 65 29 20 66 6f  72 20 73 70 72 69 74 65  |ette) for sprite|
0000fed0  20 70 6c 6f 74 0d 37 3c  21 ea 20 6d 63 25 2c 73  | plot.7<!. mc%,s|
0000fee0  63 25 2c 76 25 2c 63 25  2c 67 76 25 2c 67 69 25  |c%,v%,c%,gv%,gi%|
0000fef0  2c 69 25 2c 70 25 0d 37  46 3c 6d 63 25 3d 32 5e  |,i%,p%.7F<mc%=2^|
0000ff00  28 32 5e a4 6c 6f 67 32  42 50 50 29 3a 73 63 25  |(2^.log2BPP):sc%|
0000ff10  3d 32 5e 53 70 72 43 6f  6c 62 69 74 73 25 3a f4  |=2^SprColbits%:.|
0000ff20  20 43 6f 6c 6f 75 72 73  20 61 76 61 69 6c 61 62  | Colours availab|
0000ff30  6c 65 0d 37 50 47 53 68  6f 77 50 61 6c 25 28 29  |le.7PGShowPal%()|
0000ff40  3d 49 6d 67 50 61 6c 25  28 29 3a 53 68 6f 77 50  |=ImgPal%():ShowP|
0000ff50  61 6c 25 28 30 29 3d 32  5e 53 68 6f 77 50 61 6c  |al%(0)=2^ShowPal|
0000ff60  25 28 30 29 3a f4 20 43  6f 70 79 20 69 6d 61 67  |%(0):. Copy imag|
0000ff70  65 20 70 61 6c 65 74 74  65 0d 37 5a 25 e7 6d 63  |e palette.7Z%.mc|
0000ff80  25 3d 73 63 25 20 8c 20  54 72 61 6e 73 54 61 62  |%=sc% . TransTab|
0000ff90  49 64 3d b9 3a e1 3a f4  20 49 64 65 61 6c 0d 37  |Id=.:.:. Ideal.7|
0000ffa0  64 25 54 72 61 6e 73 54  61 62 49 64 3d a3 3a f4  |d%TransTabId=.:.|
0000ffb0  20 41 6c 77 61 79 73 20  74 72 61 6e 73 6c 61 74  | Always translat|
0000ffc0  69 6f 6e 0d 37 6e 0e e7  6d 63 25 3e 73 63 25 20  |ion.7n..mc%>sc% |
0000ffd0  8c 0d 37 78 3a 20 e7 6d  63 25 3c 3d 31 36 20 8c  |..7x: .mc%<=16 .|
0000ffe0  20 e3 20 63 25 3d 30 20  b8 20 73 63 25 2d 31 3a  | . c%=0 . sc%-1:|
0000fff0  74 72 61 6e 73 74 61 62  25 3f 63 25 3d 63 25 80  |transtab%?c%=c%.|
00010000  28 6d 63 25 2d 31 29 3a  ed 3a e1 0d 37 82 3b 20  |(mc%-1):.:..7.; |
00010010  c8 99 20 22 54 72 61 6e  73 6c 61 74 6f 72 5f 50  |.. "Translator_P|
00010020  61 6c 65 74 74 65 22 2c  38 2c 64 75 6d 25 2c 32  |alette",8,dum%,2|
00010030  3a f4 20 47 65 74 20 64  65 66 61 75 6c 74 20 70  |:. Get default p|
00010040  61 6c 65 74 74 65 0d 37  8c 34 20 f2 73 74 64 70  |alette.7.4 .stdp|
00010050  61 6c 28 53 68 6f 77 50  61 6c 25 28 29 2c 38 29  |al(ShowPal%(),8)|
00010060  3a f4 20 53 68 6f 77 20  69 6e 20 64 65 66 61 75  |:. Show in defau|
00010070  6c 74 20 70 61 6c 65 74  74 65 0d 37 96 5e 20 e3  |lt palette.7.^ .|
00010080  20 63 25 3d 30 20 b8 20  73 63 25 2d 31 3a c8 99  | c%=0 . sc%-1:..|
00010090  20 22 54 72 61 6e 73 6c  61 74 6f 72 5f 43 6c 6f  | "Translator_Clo|
000100a0  73 65 73 74 54 6f 52 47  42 22 2c 49 6d 67 50 61  |sestToRGB",ImgPa|
000100b0  6c 25 28 63 25 2b 31 29  2c 32 35 36 2c 64 75 6d  |l%(c%+1),256,dum|
000100c0  25 20 b8 20 76 25 3a 74  72 61 6e 73 74 61 62 25  |% . v%:transtab%|
000100d0  3f 63 25 3d 76 25 3a ed  0d 37 a0 31 cc 20 f4 20  |?c%=v%:..7.1. . |
000100e0  4c 65 73 73 20 63 6f 6c  6f 75 72 73 20 74 68 61  |Less colours tha|
000100f0  6e 20 72 65 71 75 69 72  65 64 2c 20 73 6f 20 63  |n required, so c|
00010100  6f 6d 70 72 6f 6d 69 73  65 0d 37 aa 0d 20 f2 68  |ompromise.7.. .h|
00010110  6f 75 72 5f 6f 6e 0d 37  b4 72 20 e7 ac 46 72 65  |our_on.7.r ..Fre|
00010120  71 43 61 6c 63 20 8c 20  c8 99 20 22 54 72 61 6e  |qCalc . .. "Tran|
00010130  73 6c 61 74 6f 72 5f 50  69 78 65 6c 46 72 65 71  |slator_PixelFreq|
00010140  22 2c 53 70 72 50 74 72  25 2c 66 72 65 71 25 3a  |",SprPtr%,freq%:|
00010150  46 72 65 71 43 61 6c 63  3d b9 3a f4 20 43 61 6c  |FreqCalc=.:. Cal|
00010160  63 75 6c 61 74 65 20 70  69 78 65 6c 20 66 72 65  |culate pixel fre|
00010170  71 75 65 6e 63 69 65 73  20 69 6e 20 69 6d 61 67  |quencies in imag|
00010180  65 20 73 70 72 69 74 65  0d 37 be 99 20 70 31 25  |e sprite.7.. p1%|
00010190  3d 66 72 65 71 25 3a 70  32 25 3d 64 75 6d 25 3a  |=freq%:p2%=dum%:|
000101a0  70 63 25 3d 30 3a e3 20  63 25 3d 30 20 b8 20 73  |pc%=0:. c%=0 . s|
000101b0  63 25 2d 31 3a 66 25 3d  21 70 31 25 3a 70 31 25  |c%-1:f%=!p1%:p1%|
000101c0  2b 3d 34 3a e7 66 25 3e  30 20 8c 20 21 70 32 25  |+=4:.f%>0 . !p2%|
000101d0  3d 49 6d 67 50 61 6c 25  28 63 25 2b 31 29 80 26  |=ImgPal%(c%+1).&|
000101e0  46 30 46 30 46 30 3a 70  32 25 21 34 3d 66 25 3a  |F0F0F0:p2%!4=f%:|
000101f0  70 32 25 2b 3d 38 3a 70  63 25 2b 3d 31 3a 74 72  |p2%+=8:pc%+=1:tr|
00010200  61 6e 73 74 61 62 25 3f  63 25 3d 31 3a ed 20 8b  |anstab%?c%=1:. .|
00010210  20 74 72 61 6e 73 74 61  62 25 3f 63 25 3d 30 3a  | transtab%?c%=0:|
00010220  ed 0d 37 c8 3a 20 c8 99  20 22 54 72 61 6e 73 6c  |..7.: .. "Transl|
00010230  61 74 6f 72 5f 48 65 63  6b 62 65 72 74 22 2c 64  |ator_Heckbert",d|
00010240  75 6d 25 2c 70 63 25 2c  6d 63 25 20 b8 20 70 31  |um%,pc%,mc% . p1|
00010250  25 2c 70 32 25 2c 75 73  65 64 25 0d 37 d2 8a 20  |%,p2%,used%.7.. |
00010260  e3 20 63 25 3d 31 20 b8  20 75 73 65 64 25 3a 53  |. c%=1 . used%:S|
00010270  68 6f 77 50 61 6c 25 28  63 25 29 3d 28 21 70 31  |howPal%(c%)=(!p1|
00010280  25 29 80 26 46 30 46 30  46 30 3a 70 31 25 2b 3d  |%).&F0F0F0:p1%+=|
00010290  34 3a ed 3a 53 68 6f 77  50 61 6c 25 28 30 29 3d  |4:.:ShowPal%(0)=|
000102a0  75 73 65 64 25 3a e3 20  63 25 3d 30 20 b8 20 73  |used%:. c%=0 . s|
000102b0  63 25 2d 31 3a e7 74 72  61 6e 73 74 61 62 25 3f  |c%-1:.transtab%?|
000102c0  63 25 3d 31 20 8c 20 74  72 61 6e 73 74 61 62 25  |c%=1 . transtab%|
000102d0  3f 63 25 3d 21 70 32 25  3a 70 32 25 2b 3d 34 3a  |?c%=!p2%:p2%+=4:|
000102e0  ed 20 8b 20 ed 0d 37 dc  0e 20 f2 68 6f 75 72 5f  |. . ..7.. .hour_|
000102f0  6f 66 66 0d 37 e6 05 cd  0d 37 f0 05 e1 0d 37 fa  |off.7....7....7.|
00010300  05 20 0d 38 04 0e dd f2  61 75 74 6f 7a 6f 6f 6d  |. .8....autozoom|
00010310  0d 38 0e 33 f4 20 41 64  6a 75 73 74 20 7a 6f 6f  |.8.3. Adjust zoo|
00010320  6d 20 66 61 63 74 6f 72  20 66 6f 72 20 61 75 74  |m factor for aut|
00010330  6f 20 7a 6f 6f 6d 20 28  69 66 20 65 6e 61 62 6c  |o zoom (if enabl|
00010340  65 64 29 0d 38 18 08 ea  20 5f 25 0d 38 22 0f e7  |ed).8... _%.8"..|
00010350  41 75 74 6f 5a 6f 6f 6d  20 8c 0d 38 2c 37 20 5f  |AutoZoom ..8,7 _|
00010360  25 3d a4 73 70 72 57 2a  5a 6f 6f 6d 58 3a c8 95  |%=.sprW*ZoomX:..|
00010370  20 5f 25 3e 53 63 72 57  25 3a 5a 6f 6f 6d 58 3d  | _%>ScrW%:ZoomX=|
00010380  5a 6f 6f 6d 58 2f 32 3a  5f 25 3d 5f 25 2f 32 3a  |ZoomX/2:_%=_%/2:|
00010390  ce 0d 38 36 36 20 e7 5a  6f 6f 6d 58 3c 31 20 8c  |..866 .ZoomX<1 .|
000103a0  20 c8 95 20 5f 25 2a 32  3c 3d 53 63 72 57 25 3a  | .. _%*2<=ScrW%:|
000103b0  5a 6f 6f 6d 58 3d 5a 6f  6f 6d 58 2a 32 3a 5f 25  |ZoomX=ZoomX*2:_%|
000103c0  3d 5f 25 2a 32 3a ce 0d  38 40 37 20 5f 25 3d a4  |=_%*2:..8@7 _%=.|
000103d0  73 70 72 48 2a 5a 6f 6f  6d 59 3a c8 95 20 5f 25  |sprH*ZoomY:.. _%|
000103e0  3e 53 63 72 48 25 3a 5a  6f 6f 6d 59 3d 5a 6f 6f  |>ScrH%:ZoomY=Zoo|
000103f0  6d 59 2f 32 3a 5f 25 3d  5f 25 2f 32 3a ce 0d 38  |mY/2:_%=_%/2:..8|
00010400  4a 36 20 e7 5a 6f 6f 6d  59 3c 31 20 8c 20 c8 95  |J6 .ZoomY<1 . ..|
00010410  20 5f 25 2a 32 3c 3d 53  63 72 48 25 3a 5a 6f 6f  | _%*2<=ScrH%:Zoo|
00010420  6d 59 3d 5a 6f 6f 6d 59  2a 32 3a 5f 25 3d 5f 25  |mY=ZoomY*2:_%=_%|
00010430  2a 32 3a ce 0d 38 54 05  cd 0d 38 5e 05 e1 0d 38  |*2:..8T...8^...8|
00010440  68 05 20 0d 38 72 23 dd  f2 70 6c 6f 74 5f 69 6d  |h. .8r#..plot_im|
00010450  61 67 65 28 78 25 2c 79  25 2c 61 63 74 25 2c 73  |age(x%,y%,act%,s|
00010460  63 61 6c 65 25 29 0d 38  7c 2f f4 20 50 6c 6f 74  |cale%).8|/. Plot|
00010470  73 20 69 6d 61 67 65 20  73 70 72 69 74 65 20 77  |s image sprite w|
00010480  69 74 68 20 74 72 61 6e  73 6c 61 74 69 6f 6e 20  |ith translation |
00010490  74 61 62 6c 65 0d 38 86  7f e7 54 72 61 6e 73 54  |table.8...TransT|
000104a0  61 62 49 64 20 8c 20 c8  99 20 4f 53 53 70 6f 70  |abId . .. OSSpop|
000104b0  25 2c 35 36 34 2c 53 70  72 69 74 65 25 2c 53 70  |%,564,Sprite%,Sp|
000104c0  72 50 74 72 25 2c 78 25  2c 79 25 2c 61 63 74 25  |rPtr%,x%,y%,act%|
000104d0  2c 73 63 61 6c 65 25 20  8b 20 c8 99 20 4f 53 53  |,scale% . .. OSS|
000104e0  70 6f 70 25 2c 35 36 34  2c 53 70 72 69 74 65 25  |pop%,564,Sprite%|
000104f0  2c 53 70 72 50 74 72 25  2c 78 25 2c 79 25 2c 61  |,SprPtr%,x%,y%,a|
00010500  63 74 25 2c 73 63 61 6c  65 25 2c 74 72 61 6e 73  |ct%,scale%,trans|
00010510  74 61 62 25 0d 38 90 05  e1 0d 38 9a 05 20 0d 38  |tab%.8....8.. .8|
00010520  a4 13 dd a4 75 6e 70 61  63 6b 28 74 79 70 65 24  |....unpack(type$|
00010530  29 0d 38 ae 2b f4 20 55  6e 70 61 63 6b 73 20 69  |).8.+. Unpacks i|
00010540  6d 61 67 65 20 28 66 69  6e 61 6c 20 75 6e 70 61  |mage (final unpa|
00010550  63 6b 69 6e 67 20 70 68  61 73 65 29 0d 38 b8 2d  |cking phase).8.-|
00010560  f4 20 52 65 74 75 72 6e  73 20 54 52 55 45 20 69  |. Returns TRUE i|
00010570  66 20 61 6c 6c 20 69 73  20 77 65 6c 6c 2c 20 65  |f all is well, e|
00010580  6c 73 65 20 46 41 4c 53  45 0d 38 c2 3e ea 20 63  |lse FALSE.8.>. c|
00010590  25 2c 62 70 70 25 2c 70  63 25 2c 62 25 2c 67 66  |%,bpp%,pc%,b%,gf|
000105a0  2c 62 66 2c 6d 69 6e 25  2c 6d 61 78 25 2c 72 67  |,bf,min%,max%,rg|
000105b0  62 25 2c 73 25 2c 76 25  2c 73 75 62 25 2c 6d 75  |b%,s%,v%,sub%,mu|
000105c0  6c 2c 72 25 2c 67 25 0d  38 cc 20 ea 20 72 6d 25  |l,r%,g%.8. . rm%|
000105d0  2c 67 6d 25 2c 62 6d 25  2c 69 2c 72 69 2c 67 69  |,gm%,bm%,i,ri,gi|
000105e0  2c 62 69 2c 4f 75 74 0d  38 d6 6f e7 46 72 65 65  |,bi,Out.8.o.Free|
000105f0  25 3e 32 2a 31 30 32 34  20 8c 20 e7 a4 61 6c 6c  |%>2*1024 . ..all|
00010600  6f 63 61 74 65 28 42 5f  69 6e 66 69 6c 65 25 2c  |ocate(B_infile%,|
00010610  46 72 65 65 25 2d 31 36  29 20 8b 20 f2 65 72 72  |Free%-16) . .err|
00010620  6f 72 28 2d 31 2c 22 49  20 68 61 76 65 20 6e 6f  |or(-1,"I have no|
00010630  20 72 6f 6f 6d 20 66 6f  72 20 74 68 65 20 69 6e  | room for the in|
00010640  70 75 74 20 66 69 6c 65  20 62 75 66 66 65 72 20  |put file buffer |
00010650  21 22 29 3a 3d a3 0d 38  e0 29 62 70 70 25 3d 49  |!"):=..8.)bpp%=I|
00010660  6e 50 61 6c 25 28 30 29  3a f4 20 42 69 74 73 20  |nPal%(0):. Bits |
00010670  70 65 72 20 70 69 78 65  6c 20 69 6e 70 75 74 0d  |per pixel input.|
00010680  38 ea 34 f2 76 61 72 28  22 69 6e 62 69 22 2c 62  |8.4.var("inbi",b|
00010690  70 70 25 29 3a f4 20 49  6e 70 75 74 20 28 69 6d  |pp%):. Input (im|
000106a0  61 67 65 29 20 62 69 74  73 20 70 65 72 20 70 69  |age) bits per pi|
000106b0  78 65 6c 0d 38 f4 26 f2  76 61 72 28 22 62 77 68  |xel.8.&.var("bwh|
000106c0  69 22 2c 42 6c 61 63 6b  57 68 69 74 65 29 3a f4  |i",BlackWhite):.|
000106d0  20 42 2f 77 20 66 6c 61  67 0d 38 fe 31 f2 76 61  | B/w flag.8.1.va|
000106e0  72 28 22 65 73 70 72 22  2c 45 72 72 53 70 72 65  |r("espr",ErrSpre|
000106f0  61 64 29 3a f4 20 45 72  72 6f 72 20 73 70 72 65  |ad):. Error spre|
00010700  61 64 69 6e 67 20 66 6c  61 67 0d 39 08 26 f2 76  |ading flag.9.&.v|
00010710  61 72 28 22 7a 69 67 7a  22 2c 5a 69 67 5a 61 67  |ar("zigz",ZigZag|
00010720  29 3a f4 20 5a 69 67 20  7a 61 67 20 66 6c 61 67  |):. Zig zag flag|
00010730  0d 39 12 23 f2 76 61 72  28 22 63 6c 66 68 22 2c  |.9.#.var("clfh",|
00010740  30 29 3a f4 20 4e 6f 20  43 6c 65 61 72 20 28 79  |0):. No Clear (y|
00010750  65 74 29 0d 39 1c 3d f2  76 61 72 28 22 6f 75 74  |et).9.=.var("out|
00010760  78 22 2c 4f 75 74 58 25  29 3a f2 76 61 72 28 22  |x",OutX%):.var("|
00010770  6f 75 74 79 22 2c 4f 75  74 59 25 29 3a f4 20 4f  |outy",OutY%):. O|
00010780  75 74 70 75 74 20 72 65  73 6f 6c 75 74 69 6f 6e  |utput resolution|
00010790  0d 39 26 3d f2 76 61 72  28 22 79 6d 75 6c 22 2c  |.9&=.var("ymul",|
000107a0  59 4d 75 6c 25 29 3a f2  76 61 72 28 22 79 64 69  |YMul%):.var("ydi|
000107b0  76 22 2c 59 44 69 76 25  29 3a f4 20 53 63 61 6c  |v",YDiv%):. Scal|
000107c0  69 6e 67 20 66 61 63 74  6f 72 73 20 59 0d 39 30  |ing factors Y.90|
000107d0  3d f2 76 61 72 28 22 78  6d 75 6c 22 2c 58 4d 75  |=.var("xmul",XMu|
000107e0  6c 25 29 3a f2 76 61 72  28 22 78 64 69 76 22 2c  |l%):.var("xdiv",|
000107f0  58 44 69 76 25 29 3a f4  20 53 63 61 6c 69 6e 67  |XDiv%):. Scaling|
00010800  20 66 61 63 74 6f 72 73  20 58 0d 39 3a 6f e7 50  | factors X.9:o.P|
00010810  65 72 63 65 6e 74 20 8c  20 e7 ac 42 6c 61 6e 6b  |ercent . ..Blank|
00010820  69 6e 67 20 8c 20 f2 76  61 72 28 22 70 65 72 63  |ing . .var("perc|
00010830  22 2c 31 29 3a f2 76 61  72 28 22 70 69 6e 63 22  |",1):.var("pinc"|
00010840  2c 28 31 30 30 3c 3c 31  36 29 2f 49 6d 67 48 25  |,(100<<16)/ImgH%|
00010850  29 20 8b 20 f2 76 61 72  28 22 70 65 72 63 22 2c  |) . .var("perc",|
00010860  30 29 3a f4 20 48 6f 75  72 67 6c 61 73 73 20 70  |0):. Hourglass p|
00010870  65 72 63 65 6e 74 61 67  65 0d 39 44 38 f4 20 53  |ercentage.9D8. S|
00010880  65 74 20 70 61 6c 65 74  74 65 20 28 69 66 20 72  |et palette (if r|
00010890  65 6c 65 76 61 6e 74 2c  20 69 2e 65 2e 20 6e 6f  |elevant, i.e. no|
000108a0  74 20 70 75 72 65 20 52  47 42 20 69 6e 70 75 74  |t pure RGB input|
000108b0  29 0d 39 4e 3f e7 62 70  70 25 3c 3d 38 20 8c 20  |).9N?.bpp%<=8 . |
000108c0  e3 20 63 25 3d 30 20 b8  20 32 5e 62 70 70 25 2d  |. c%=0 . 2^bpp%-|
000108d0  31 3a 70 61 6c 72 67 62  25 21 28 63 25 3c 3c 32  |1:palrgb%!(c%<<2|
000108e0  29 3d 49 6e 50 61 6c 25  28 63 25 2b 31 29 3a ed  |)=InPal%(c%+1):.|
000108f0  0d 39 58 66 e3 20 62 25  3d 30 20 b8 20 33 31 3a  |.9Xf. b%=0 . 31:|
00010900  62 75 66 66 65 72 25 21  28 62 25 2a 38 29 3d 42  |buffer%!(b%*8)=B|
00010910  75 66 66 65 72 25 28 62  25 2c 30 29 3a 62 75 66  |uffer%(b%,0):buf|
00010920  66 65 72 25 21 28 62 25  2a 38 2b 34 29 3d 42 75  |fer%!(b%*8+4)=Bu|
00010930  66 66 65 72 25 28 62 25  2c 31 29 3a ed 3a f4 20  |ffer%(b%,1):.:. |
00010940  42 75 66 66 65 72 20 6c  6f 63 61 74 69 6f 6e 73  |Buffer locations|
00010950  2f 73 69 7a 65 73 0d 39  62 39 e7 4f 75 74 4d 6f  |/sizes.9b9.OutMo|
00010960  64 65 3d 31 20 8c 20 70  63 25 3d 30 20 8b 20 70  |de=1 . pc%=0 . p|
00010970  63 25 3d 4f 75 74 50 61  6c 3a f4 20 53 65 6c 65  |c%=OutPal:. Sele|
00010980  63 74 20 70 61 6c 65 74  74 65 20 63 6f 64 65 0d  |ct palette code.|
00010990  39 6c 3c f4 20 42 75 69  6c 64 20 52 2f 47 2f 42  |9l<. Build R/G/B|
000109a0  20 69 6e 74 65 6e 73 69  74 79 20 6d 61 70 20 66  | intensity map f|
000109b0  6f 72 20 67 61 6d 6d 61  2f 69 6e 76 65 72 74 2f  |or gamma/invert/|
000109c0  72 67 62 62 69 74 73 2f  62 26 77 0d 39 76 3a e7  |rgbbits/b&w.9v:.|
000109d0  47 61 6d 6d 61 20 8c 20  e7 47 61 6d 6d 61 46 3e  |Gamma . .GammaF>|
000109e0  30 20 8c 20 67 66 3d 31  2f 47 61 6d 6d 61 46 20  |0 . gf=1/GammaF |
000109f0  8b 20 67 66 3d 30 3a f4  20 47 61 6d 6d 61 20 66  |. gf=0:. Gamma f|
00010a00  61 63 74 6f 72 0d 39 80  3d e7 42 6c 61 63 6b 20  |actor.9.=.Black |
00010a10  8c 20 e7 42 6c 61 63 6b  46 3c 3e 30 20 8c 20 62  |. .BlackF<>0 . b|
00010a20  66 3d 42 6c 61 63 6b 46  20 8b 20 62 66 3d 30 3a  |f=BlackF . bf=0:|
00010a30  f4 20 42 6c 61 63 6b 20  63 6f 72 72 65 63 74 69  |. Black correcti|
00010a40  6f 6e 0d 39 8a 18 e7 52  61 6e 67 65 20 84 20 28  |on.9...Range . (|
00010a50  62 70 70 25 3c 3d 38 29  20 8c 0d 39 94 0f 20 e7  |bpp%<=8) ..9.. .|
00010a60  62 70 70 25 3c 3d 38 20  8c 0d 39 9e 87 20 20 6d  |bpp%<=8 ..9..  m|
00010a70  69 6e 25 3d 32 35 36 3a  6d 61 78 25 3d 30 3a e3  |in%=256:max%=0:.|
00010a80  20 63 25 3d 30 20 b8 20  32 5e 62 70 70 25 2d 31  | c%=0 . 2^bpp%-1|
00010a90  3a 72 67 62 25 3d 49 6e  50 61 6c 25 28 63 25 2b  |:rgb%=InPal%(c%+|
00010aa0  31 29 3a e3 20 73 25 3d  31 20 b8 20 33 3a 76 25  |1):. s%=1 . 3:v%|
00010ab0  3d 72 67 62 25 80 26 46  46 3a 72 67 62 25 3d 72  |=rgb%.&FF:rgb%=r|
00010ac0  67 62 25 3e 3e 38 3a 6d  69 6e 25 3d a4 6d 69 6e  |gb%>>8:min%=.min|
00010ad0  28 6d 69 6e 25 2c 76 25  29 3a 6d 61 78 25 3d a4  |(min%,v%):max%=.|
00010ae0  6d 61 78 28 6d 61 78 25  2c 76 25 29 3a ed 3a ed  |max(max%,v%):.:.|
00010af0  0d 39 a8 3f 20 cc 20 c8  99 20 22 54 72 61 6e 73  |.9.? . .. "Trans|
00010b00  6c 61 74 6f 72 5f 55 6e  70 61 63 6b 50 72 65 22  |lator_UnpackPre"|
00010b10  2c 70 61 6c 72 67 62 25  2c 70 63 25 2c 62 75 66  |,palrgb%,pc%,buf|
00010b20  66 65 72 25 2c 33 32 2c  69 6e 74 6d 61 70 25 0d  |fer%,32,intmap%.|
00010b30  39 b2 37 20 20 f2 75 6e  70 61 63 6b 5f 70 68 61  |9.7  .unpack_pha|
00010b40  73 65 28 74 79 70 65 24  2c 33 29 3a f4 20 47 61  |se(type$,3):. Ga|
00010b50  74 68 65 72 20 69 6e 66  6f 20 6f 6e 20 52 47 42  |ther info on RGB|
00010b60  20 72 61 6e 67 65 0d 39  bc 41 20 20 6d 69 6e 25  | range.9.A  min%|
00010b70  3d a4 76 61 72 28 22 69  6e 6d 69 22 29 3a 6d 61  |=.var("inmi"):ma|
00010b80  78 25 3d a4 76 61 72 28  22 69 6e 6d 61 22 29 3a  |x%=.var("inma"):|
00010b90  f4 20 47 65 74 20 6d 69  6e 2f 6d 61 78 20 69 6e  |. Get min/max in|
00010ba0  74 65 6e 73 69 74 79 0d  39 c6 06 20 cd 0d 39 d0  |tensity.9.. ..9.|
00010bb0  3d 20 73 75 62 25 3d 6d  69 6e 25 3a 6d 75 6c 3d  |= sub%=min%:mul=|
00010bc0  32 35 35 2f 28 6d 61 78  25 2d 6d 69 6e 25 29 3a  |255/(max%-min%):|
00010bd0  f4 20 52 61 6e 67 65 20  63 6f 72 72 65 63 74 69  |. Range correcti|
00010be0  6f 6e 20 66 61 63 74 6f  72 73 0d 39 da 35 20 52  |on factors.9.5 R|
00010bf0  61 6e 67 65 4d 69 6e 25  3d 6d 69 6e 25 3a 52 61  |angeMin%=min%:Ra|
00010c00  6e 67 65 4d 61 78 25 3d  6d 61 78 25 3a f4 20 52  |ngeMax%=max%:. R|
00010c10  65 6d 65 6d 62 65 72 20  6d 69 6e 2f 6d 61 78 0d  |emember min/max.|
00010c20  39 e4 5c 20 24 49 4d 49  72 6e 25 3d c3 28 52 61  |9.\ $IMIrn%=.(Ra|
00010c30  6e 67 65 4d 69 6e 25 29  2b 22 2d 22 2b c3 28 52  |ngeMin%)+"-"+.(R|
00010c40  61 6e 67 65 4d 61 78 25  29 2b 22 20 28 22 2b c3  |angeMax%)+" ("+.|
00010c50  28 a8 28 28 6d 61 78 25  2d 6d 69 6e 25 29 2f 32  |(.((max%-min%)/2|
00010c60  2e 35 35 29 29 2b 22 25  29 22 3a f4 20 53 65 74  |.55))+"%)":. Set|
00010c70  20 72 61 6e 67 65 20 69  6e 66 6f 0d 39 ee 1c 20  | range info.9.. |
00010c80  52 61 6e 67 65 49 3d b9  3a f4 20 49 6e 66 6f 20  |RangeI=.:. Info |
00010c90  70 72 65 73 65 6e 74 0d  39 f8 20 cc 20 52 61 6e  |present.9. . Ran|
00010ca0  67 65 49 3d a3 3a 24 49  4d 49 72 6e 25 3d 22 55  |geI=.:$IMIrn%="U|
00010cb0  6e 6b 6e 6f 77 6e 22 0d  3a 02 05 cd 0d 3a 0c 76  |nknown".:....:.v|
00010cc0  72 25 3d 28 52 47 42 62  69 74 73 25 3e 3e 31 36  |r%=(RGBbits%>>16|
00010cd0  29 80 26 46 46 3a 67 25  3d 28 52 47 42 62 69 74  |).&FF:g%=(RGBbit|
00010ce0  73 25 3e 3e 38 29 80 26  46 46 3a 62 25 3d 52 47  |s%>>8).&FF:b%=RG|
00010cf0  42 62 69 74 73 25 80 26  46 46 3a 76 25 3d 26 46  |Bbits%.&FF:v%=&F|
00010d00  46 30 30 3a 72 6d 25 3d  76 25 3e 3e 72 25 3a 67  |F00:rm%=v%>>r%:g|
00010d10  6d 25 3d 76 25 3e 3e 67  25 3a 62 6d 25 3d 76 25  |m%=v%>>g%:bm%=v%|
00010d20  3e 3e 62 25 3a f4 20 52  2f 47 2f 42 20 6d 61 73  |>>b%:. R/G/B mas|
00010d30  6b 73 0d 3a 16 34 72 67  3d 30 2e 33 30 30 3a 67  |ks.:.4rg=0.300:g|
00010d40  67 3d 30 2e 35 38 36 3a  62 67 3d 30 2e 31 31 34  |g=0.586:bg=0.114|
00010d50  3a f4 20 47 72 65 79 76  61 6c 75 65 73 20 6f 66  |:. Greyvalues of|
00010d60  20 52 2f 47 2f 42 0d 3a  20 10 e3 20 63 25 3d 30  | R/G/B.: .. c%=0|
00010d70  20 b8 20 32 35 35 0d 3a  2a 23 e7 52 61 6e 67 65  | . 255.:*#.Range|
00010d80  20 8c 20 69 3d 28 63 25  2d 73 75 62 25 29 2a 6d  | . i=(c%-sub%)*m|
00010d90  75 6c 20 8b 20 69 3d 63  25 0d 3a 34 2e e7 62 66  |ul . i=c%.:4..bf|
00010da0  3d 30 20 8b 20 69 3d 69  2b 62 66 3a e7 69 3c 30  |=0 . i=i+bf:.i<0|
00010db0  20 8c 20 69 3d 30 20 8b  20 e7 69 3e 32 35 35 20  | . i=0 . .i>255 |
00010dc0  8c 20 69 3d 32 35 35 0d  3a 3e 25 e7 67 66 3e 30  |. i=255.:>%.gf>0|
00010dd0  20 8c 20 e7 69 3e 30 20  8c 20 69 3d 28 28 69 2f  | . .i>0 . i=((i/|
00010de0  32 35 35 29 5e 67 66 29  2a 32 35 35 0d 3a 48 18  |255)^gf)*255.:H.|
00010df0  e7 49 6e 76 65 72 74 52  47 42 20 8c 20 69 3d 32  |.InvertRGB . i=2|
00010e00  35 35 2d 69 0d 3a 52 24  72 69 3d 69 20 80 20 72  |55-i.:R$ri=i . r|
00010e10  6d 25 3a 67 69 3d 69 20  80 20 67 6d 25 3a 62 69  |m%:gi=i . gm%:bi|
00010e20  3d 69 20 80 20 62 6d 25  0d 3a 5c 2c e7 42 6c 61  |=i . bm%.:\,.Bla|
00010e30  63 6b 57 68 69 74 65 20  8c 20 72 69 3d 72 69 2a  |ckWhite . ri=ri*|
00010e40  72 67 3a 67 69 3d 67 69  2a 67 67 3a 62 69 3d 62  |rg:gi=gi*gg:bi=b|
00010e50  69 2a 62 67 0d 3a 66 27  69 6e 74 6d 61 70 25 21  |i*bg.:f'intmap%!|
00010e60  28 63 25 3c 3c 32 29 3d  28 72 69 3c 3c 31 36 29  |(c%<<2)=(ri<<16)|
00010e70  2b 28 67 69 3c 3c 38 29  2b 62 69 0d 3a 70 05 ed  |+(gi<<8)+bi.:p..|
00010e80  0d 3a 7a 44 47 72 65 79  52 67 62 3d 28 62 70 70  |.:zDGreyRgb=(bpp|
00010e90  25 3e 38 29 20 80 20 42  6c 61 63 6b 57 68 69 74  |%>8) . BlackWhit|
00010ea0  65 3a f4 20 46 6c 61 67  20 74 6f 20 69 6e 64 69  |e:. Flag to indi|
00010eb0  63 61 74 65 20 67 72 65  79 20 52 47 42 20 6f 75  |cate grey RGB ou|
00010ec0  74 70 75 74 0d 3a 84 48  c8 99 20 22 54 72 61 6e  |tput.:.H.. "Tran|
00010ed0  73 6c 61 74 6f 72 5f 55  6e 70 61 63 6b 50 72 65  |slator_UnpackPre|
00010ee0  22 2c 70 61 6c 72 67 62  25 2c 70 63 25 2c 62 75  |",palrgb%,pc%,bu|
00010ef0  66 66 65 72 25 2c 33 32  2c 69 6e 74 6d 61 70 25  |ffer%,32,intmap%|
00010f00  20 b8 20 2c 74 72 75 65  70 61 6c 25 0d 3a 8e 74  | . ,truepal%.:.t|
00010f10  49 6d 67 50 61 6c 25 28  29 3d 30 3a 49 6d 67 50  |ImgPal%()=0:ImgP|
00010f20  61 6c 25 28 30 29 3d 53  70 72 43 6f 6c 62 69 74  |al%(0)=SprColbit|
00010f30  73 25 3a e3 20 63 25 3d  30 20 b8 20 32 5e 53 70  |s%:. c%=0 . 2^Sp|
00010f40  72 43 6f 6c 62 69 74 73  25 2d 31 3a 49 6d 67 50  |rColbits%-1:ImgP|
00010f50  61 6c 25 28 63 25 2b 31  29 3d 70 61 6c 72 67 62  |al%(c%+1)=palrgb|
00010f60  25 21 28 63 25 3c 3c 32  29 3a ed 3a f4 20 52 65  |%!(c%<<2):.:. Re|
00010f70  61 64 20 69 6d 61 67 65  20 70 61 6c 65 74 74 65  |ad image palette|
00010f80  0d 3a 98 10 e7 43 6c 65  61 72 46 69 6c 65 20 8c  |.:...ClearFile .|
00010f90  0d 3a a2 28 20 4f 75 74  3d ae 28 43 6c 65 61 72  |.:.( Out=.(Clear|
00010fa0  53 61 76 65 24 29 3a f4  20 4f 70 65 6e 20 43 6c  |Save$):. Open Cl|
00010fb0  65 61 72 20 66 69 6c 65  0d 3a ac 6b 20 f2 6f 73  |ear file.:.k .os|
00010fc0  74 72 69 6e 67 28 4f 75  74 2c 22 54 72 61 6e 73  |tring(Out,"Trans|
00010fd0  6c 61 74 6f 72 22 29 3a  f2 6f 62 66 28 4f 75 74  |lator"):.obf(Out|
00010fe0  2c 30 29 3a f2 6f 77 6c  66 28 4f 75 74 2c 74 76  |,0):.owlf(Out,tv|
00010ff0  65 72 73 69 6f 6e 25 29  3a f2 6f 77 6c 66 28 4f  |ersion%):.owlf(O|
00011000  75 74 2c 4f 75 74 58 25  29 3a f2 6f 77 6c 66 28  |ut,OutX%):.owlf(|
00011010  4f 75 74 2c 4f 75 74 59  25 29 3a f4 20 48 65 61  |Out,OutY%):. Hea|
00011020  64 65 72 0d 3a b6 7a 20  e7 47 72 65 79 52 67 62  |der.:.z .GreyRgb|
00011030  20 8c 20 f2 6f 77 6c 66  28 4f 75 74 2c 38 29 3a  | . .owlf(Out,8):|
00011040  e3 20 63 25 3d 30 20 b8  20 32 35 35 3a f2 6f 74  |. c%=0 . 255:.ot|
00011050  6c 66 28 4f 75 74 2c 63  25 84 63 25 3c 3c 38 84  |lf(Out,c%.c%<<8.|
00011060  63 25 3c 3c 31 36 29 3a  ed 20 8b 20 f2 6f 77 6c  |c%<<16):. . .owl|
00011070  66 28 4f 75 74 2c 49 6d  67 42 69 74 73 25 29 3a  |f(Out,ImgBits%):|
00011080  f4 20 42 70 70 20 61 6e  64 20 67 72 65 79 70 61  |. Bpp and greypa|
00011090  6c 20 69 66 20 67 72 65  79 20 52 47 42 0d 3a c0  |l if grey RGB.:.|
000110a0  71 20 e7 49 6d 67 42 69  74 73 25 3c 3d 38 20 8c  |q .ImgBits%<=8 .|
000110b0  20 e3 20 63 25 3d 30 20  b8 20 32 5e 49 6d 67 42  | . c%=0 . 2^ImgB|
000110c0  69 74 73 25 2d 31 3a 72  67 62 25 3d 74 72 75 65  |its%-1:rgb%=true|
000110d0  70 61 6c 25 21 28 63 25  3c 3c 32 29 3a f2 6f 74  |pal%!(c%<<2):.ot|
000110e0  62 66 28 4f 75 74 2c 72  67 62 25 29 3a ed 3a f4  |bf(Out,rgb%):.:.|
000110f0  20 53 65 74 20 70 61 6c  65 74 74 65 20 74 6f 20  | Set palette to |
00011100  27 74 72 75 65 27 20 70  61 6c 65 74 74 65 0d 3a  |'true' palette.:|
00011110  ca 5e 20 f2 76 61 72 28  22 63 6c 66 68 22 2c 4f  |.^ .var("clfh",O|
00011120  75 74 29 3a f2 76 61 72  28 22 63 6c 66 70 22 2c  |ut):.var("clfp",|
00011130  8f 23 4f 75 74 29 3a f2  76 61 72 28 22 63 6c 67  |.#Out):.var("clg|
00011140  72 22 2c 47 72 65 79 52  67 62 29 3a f4 20 49 6e  |r",GreyRgb):. In|
00011150  66 6f 72 6d 20 63 6c 65  61 72 20 77 72 69 74 65  |form clear write|
00011160  72 20 6f 6e 20 6f 75 74  66 69 6c 65 0d 3a d4 35  |r on outfile.:.5|
00011170  20 62 79 74 65 73 25 3d  4f 75 74 58 25 2a 4f 75  | bytes%=OutX%*Ou|
00011180  74 59 25 3a e7 49 6d 67  42 69 74 73 25 3e 38 20  |tY%:.ImgBits%>8 |
00011190  8c 20 62 79 74 65 73 25  3d 33 2a 62 79 74 65 73  |. bytes%=3*bytes|
000111a0  25 0d 3a de 90 20 c8 99  20 22 58 4f 53 5f 41 72  |%.:.. .. "XOS_Ar|
000111b0  67 73 22 2c 36 2c 4f 75  74 2c 62 79 74 65 73 25  |gs",6,Out,bytes%|
000111c0  2b 8f 23 4f 75 74 20 b8  20 3b 66 25 3a e7 66 25  |+.#Out . ;f%:.f%|
000111d0  80 31 20 8c 20 d9 23 4f  75 74 3a 43 6c 65 61 72  |.1 . .#Out:Clear|
000111e0  46 69 6c 65 3d a3 3a c8  99 20 22 4f 53 5f 46 69  |File=.:.. "OS_Fi|
000111f0  6c 65 22 2c 36 2c 43 6c  65 61 72 53 61 76 65 24  |le",6,ClearSave$|
00011200  3a f2 65 72 72 6f 72 28  2d 31 2c 22 4e 6f 20 72  |:.error(-1,"No r|
00011210  6f 6f 6d 20 66 6f 72 20  43 6c 65 61 72 20 66 69  |oom for Clear fi|
00011220  6c 65 20 6f 6e 20 64 69  73 63 20 21 22 29 3a 3d  |le on disc !"):=|
00011230  a3 0d 3a e8 20 cc 20 f2  76 61 72 28 22 63 6c 66  |..:. . .var("clf|
00011240  68 22 2c 30 29 3a f4 20  43 6c 65 61 72 20 6f 66  |h",0):. Clear of|
00011250  66 0d 3a f2 05 cd 0d 3a  fc 37 f2 75 6e 70 61 63  |f.:....:.7.unpac|
00011260  6b 5f 70 68 61 73 65 28  74 79 70 65 24 2c 31 29  |k_phase(type$,1)|
00011270  3a f4 20 45 78 65 63 75  74 65 20 66 69 6e 61 6c  |:. Execute final|
00011280  20 75 6e 70 61 63 6b 20  70 68 61 73 65 0d 3b 06  | unpack phase.;.|
00011290  10 e7 43 6c 65 61 72 46  69 6c 65 20 8c 0d 3b 10  |..ClearFile ..;.|
000112a0  a9 20 43 6c 65 61 72 46  69 6c 65 3d a3 3a d9 23  |. ClearFile=.:.#|
000112b0  4f 75 74 3a e7 a4 76 61  72 28 22 63 6c 66 68 22  |Out:..var("clfh"|
000112c0  29 3d 30 20 8c 20 c8 99  20 22 4f 53 5f 46 69 6c  |)=0 . .. "OS_Fil|
000112d0  65 22 2c 36 2c 43 6c 65  61 72 53 61 76 65 24 3a  |e",6,ClearSave$:|
000112e0  f2 65 72 72 6f 72 28 2d  31 2c 22 45 72 72 6f 72  |.error(-1,"Error|
000112f0  20 64 75 72 69 6e 67 20  6f 75 74 70 75 74 20 74  | during output t|
00011300  6f 20 43 6c 65 61 72 20  66 69 6c 65 20 3a 20 22  |o Clear file : "|
00011310  2b a4 73 74 72 69 6e 67  28 a4 76 61 72 28 22 65  |+.string(.var("e|
00011320  72 72 6f 22 29 2b 34 29  29 3a f4 20 52 65 6d 6f  |rro")+4)):. Remo|
00011330  76 65 20 43 6c 65 61 72  20 66 69 6c 65 20 69 66  |ve Clear file if|
00011340  20 65 72 72 6f 72 0d 3b  1a 05 cd 0d 3b 24 06 3d  | error.;....;$.=|
00011350  b9 0d 3b 2e 05 20 0d 3b  38 20 dd f2 75 6e 70 61  |..;.. .;8 ..unpa|
00011360  63 6b 5f 70 68 61 73 65  28 74 79 70 65 24 2c 70  |ck_phase(type$,p|
00011370  68 61 73 65 25 29 0d 3b  42 35 f4 20 45 78 65 63  |hase%).;B5. Exec|
00011380  75 74 65 73 20 75 6e 70  61 63 6b 20 70 68 61 73  |utes unpack phas|
00011390  65 2c 20 62 6c 61 6e 6b  73 20 73 63 72 65 65 6e  |e, blanks screen|
000113a0  20 69 66 20 65 6e 61 62  6c 65 64 0d 3b 4c 2d f2  | if enabled.;L-.|
000113b0  76 61 72 28 22 70 68 61  73 22 2c 70 68 61 73 65  |var("phas",phase|
000113c0  25 29 3a f4 20 53 65 74  20 75 6e 70 61 63 6b 69  |%):. Set unpacki|
000113d0  6e 67 20 70 68 61 73 65  0d 3b 56 2b 24 64 75 6d  |ng phase.;V+$dum|
000113e0  25 3d c0 74 79 70 65 24  2b 22 20 20 20 20 22 2c  |%=.type$+"    ",|
000113f0  34 29 3a f4 20 54 79 70  65 20 74 6f 20 75 6e 70  |4):. Type to unp|
00011400  61 63 6b 0d 3b 60 3d e7  42 6c 61 6e 6b 69 6e 67  |ack.;`=.Blanking|
00011410  20 8c 20 c8 99 20 22 54  72 61 6e 73 6c 61 74 6f  | . .. "Translato|
00011420  72 5f 56 69 64 65 6f 44  4d 41 22 2c 30 3a f4 20  |r_VideoDMA",0:. |
00011430  42 6c 61 6e 6b 20 69 66  20 65 6e 61 62 6c 65 64  |Blank if enabled|
00011440  0d 3b 6a 37 c8 99 20 22  54 72 61 6e 73 6c 61 74  |.;j7.. "Translat|
00011450  6f 72 5f 55 6e 70 61 63  6b 22 2c 21 64 75 6d 25  |or_Unpack",!dum%|
00011460  3a f4 20 45 78 65 63 75  74 65 20 75 6e 70 61 63  |:. Execute unpac|
00011470  6b 20 70 68 61 73 65 0d  3b 74 41 e7 42 6c 61 6e  |k phase.;tA.Blan|
00011480  6b 69 6e 67 20 8c 20 c8  99 20 22 54 72 61 6e 73  |king . .. "Trans|
00011490  6c 61 74 6f 72 5f 56 69  64 65 6f 44 4d 41 22 2c  |lator_VideoDMA",|
000114a0  31 3a f4 20 52 65 2d 65  6e 61 62 6c 65 20 69 66  |1:. Re-enable if|
000114b0  20 62 6c 61 6e 6b 65 64  0d 3b 7e 3f e7 70 68 61  | blanked.;~?.pha|
000114c0  73 65 25 3c 3e 31 20 8c  20 72 65 73 75 6c 74 25  |se%<>1 . result%|
000114d0  3d 30 20 8b 20 72 65 73  75 6c 74 25 3d a4 76 61  |=0 . result%=.va|
000114e0  72 28 22 72 65 73 75 22  29 3a f4 20 52 65 73 75  |r("resu"):. Resu|
000114f0  6c 74 20 63 6f 64 65 0d  3b 88 10 c8 8e 20 72 65  |lt code.;.... re|
00011500  73 75 6c 74 25 20 ca 0d  3b 92 13 20 c9 20 30 20  |sult% ..;.. . 0 |
00011510  3a 20 f4 20 41 6c 6c 20  4f 4b 0d 3b 9c 56 20 c9  |: . All OK.;.V .|
00011520  20 31 2c 32 2c 33 20 3a  20 f2 65 72 72 6f 72 28  | 1,2,3 : .error(|
00011530  2d 31 2c 22 46 69 6c 65  20 69 73 20 74 6f 6f 20  |-1,"File is too |
00011540  73 68 6f 72 74 20 21 20  49 6d 61 67 65 20 6d 61  |short ! Image ma|
00011550  79 20 62 65 20 63 6f 72  72 75 70 74 65 64 20 21  |y be corrupted !|
00011560  22 29 3a f4 20 4f 75 74  20 6f 66 20 64 61 74 61  |"):. Out of data|
00011570  0d 3b a6 6e 20 c9 20 31  36 20 3a 20 f2 65 72 72  |.;.n . 16 : .err|
00011580  6f 72 28 2d 31 2c 22 45  72 72 6f 72 20 69 6e 20  |or(-1,"Error in |
00011590  54 49 46 46 20 66 69 6c  65 20 3a 20 73 74 72 69  |TIFF file : stri|
000115a0  70 28 73 29 20 6d 69 73  73 69 6e 67 20 21 20 49  |p(s) missing ! I|
000115b0  6d 61 67 65 20 6d 61 79  20 62 65 20 63 6f 72 72  |mage may be corr|
000115c0  75 70 74 65 64 20 21 22  29 3a f4 20 4f 75 74 20  |upted !"):. Out |
000115d0  6f 66 20 54 49 46 46 20  73 74 72 69 70 73 0d 3b  |of TIFF strips.;|
000115e0  b0 63 20 7f 20 3a 20 f2  65 72 72 6f 72 28 2d 31  |.c . : .error(-1|
000115f0  2c 22 53 6f 6d 65 20 6d  79 73 74 65 72 69 6f 75  |,"Some mysteriou|
00011600  73 20 65 72 72 6f 72 20  23 22 2b c3 72 65 73 75  |s error #"+.resu|
00011610  6c 74 25 2b 22 6f 63 63  75 72 65 64 20 21 20 49  |lt%+"occured ! I|
00011620  6d 61 67 65 20 6d 61 79  20 62 65 20 63 6f 72 72  |mage may be corr|
00011630  75 70 74 65 64 20 21 22  29 3a f4 20 48 75 68 20  |upted !"):. Huh |
00011640  3f 0d 3b ba 05 cb 0d 3b  c4 05 e1 0d 3b ce 05 20  |?.;....;....;.. |
00011650  0d 3b d8 1b dd f2 73 65  74 5f 70 61 6c 65 74 74  |.;....set_palett|
00011660  65 28 70 61 6c 65 74 74  65 25 29 0d 3b e2 2a f4  |e(palette%).;.*.|
00011670  20 53 65 74 73 20 61 20  70 61 6c 65 74 74 65 20  | Sets a palette |
00011680  61 63 63 6f 72 64 69 6e  67 20 74 6f 20 70 61 6c  |according to pal|
00011690  65 74 74 65 25 0d 3b ec  1a f4 20 20 30 20 2d 20  |ette%.;...  0 - |
000116a0  44 65 73 6b 74 6f 70 20  70 61 6c 65 74 74 65 0d  |Desktop palette.|
000116b0  3b f6 2e f4 20 20 31 20  2d 20 49 6d 61 67 65 27  |;...  1 - Image'|
000116c0  73 20 6f 77 6e 20 70 61  6c 65 74 74 65 20 28 77  |s own palette (w|
000116d0  68 65 6e 20 70 6f 73 73  69 62 6c 65 29 0d 3c 00  |hen possible).<.|
000116e0  08 ea 20 63 25 0d 3c 0a  11 c8 8e 20 70 61 6c 65  |.. c%.<.... pale|
000116f0  74 74 65 25 20 ca 0d 3c  14 72 20 c9 20 30 20 3a  |tte% ..<.r . 0 :|
00011700  20 e7 a4 6c 6f 67 32 42  50 50 3d 33 20 8c 20 c8  | ..log2BPP=3 . .|
00011710  99 20 22 54 72 61 6e 73  6c 61 74 6f 72 5f 50 61  |. "Translator_Pa|
00011720  6c 65 74 74 65 22 2c 38  2c 64 75 6d 25 2c 32 3a  |lette",8,dum%,2:|
00011730  c8 99 20 22 54 72 61 6e  73 6c 61 74 6f 72 5f 53  |.. "Translator_S|
00011740  65 74 50 61 6c 65 74 74  65 22 2c 32 35 36 2c 64  |etPalette",256,d|
00011750  75 6d 25 20 8b 20 c8 99  20 57 53 65 74 50 25 2c  |um% . .. WSetP%,|
00011760  2c 77 69 6d 70 70 61 6c  0d 3c 1e 6b 20 c9 20 31  |,wimppal.<.k . 1|
00011770  20 3a 20 e3 20 63 25 3d  30 20 b8 20 53 68 6f 77  | : . c%=0 . Show|
00011780  50 61 6c 25 28 30 29 2d  31 3a 64 75 6d 25 21 28  |Pal%(0)-1:dum%!(|
00011790  63 25 3c 3c 32 29 3d 53  68 6f 77 50 61 6c 25 28  |c%<<2)=ShowPal%(|
000117a0  63 25 2b 31 29 3a ed 3a  c8 99 20 22 54 72 61 6e  |c%+1):.:.. "Tran|
000117b0  73 6c 61 74 6f 72 5f 53  65 74 50 61 6c 65 74 74  |slator_SetPalett|
000117c0  65 22 2c 53 68 6f 77 50  61 6c 25 28 30 29 2c 64  |e",ShowPal%(0),d|
000117d0  75 6d 25 0d 3c 28 05 cb  0d 3c 32 05 e1 0d 3c 3c  |um%.<(...<2...<<|
000117e0  05 20 0d 3c 46 1b dd f2  73 74 64 70 61 6c 28 f8  |. .<F...stdpal(.|
000117f0  20 50 61 6c 25 28 29 2c  62 70 70 25 29 0d 3c 50  | Pal%(),bpp%).<P|
00011800  48 f4 20 53 65 74 73 20  61 20 70 61 6c 65 74 74  |H. Sets a palett|
00011810  65 20 74 6f 20 73 74 61  6e 64 61 72 64 20 41 72  |e to standard Ar|
00011820  63 68 69 6d 65 64 65 73  20 32 2c 34 2c 31 36 20  |chimedes 2,4,16 |
00011830  6f 72 20 32 35 36 20 63  6f 6c 6f 75 72 20 70 61  |or 256 colour pa|
00011840  6c 65 74 74 65 0d 3c 5a  0b ea 20 63 25 2c 70 25  |lette.<Z.. c%,p%|
00011850  0d 3c 64 44 c8 99 20 22  54 72 61 6e 73 6c 61 74  |.<dD.. "Translat|
00011860  6f 72 5f 50 61 6c 65 74  74 65 22 2c 62 70 70 25  |or_Palette",bpp%|
00011870  2c 64 75 6d 25 2c 32 3a  f4 20 43 61 6c 63 75 6c  |,dum%,2:. Calcul|
00011880  61 74 65 20 73 74 61 6e  64 61 72 64 20 70 61 6c  |ate standard pal|
00011890  65 74 74 65 0d 3c 6e 15  70 25 3d 64 75 6d 25 3a  |ette.<n.p%=dum%:|
000118a0  f4 20 50 6f 69 6e 74 65  72 0d 3c 78 28 e3 20 63  |. Pointer.<x(. c|
000118b0  25 3d 31 20 b8 20 32 5e  62 70 70 25 3a 50 61 6c  |%=1 . 2^bpp%:Pal|
000118c0  25 28 63 25 29 3d 21 70  25 3a 70 25 2b 3d 34 3a  |%(c%)=!p%:p%+=4:|
000118d0  ed 0d 3c 82 10 50 61 6c  25 28 30 29 3d 62 70 70  |..<..Pal%(0)=bpp|
000118e0  25 0d 3c 8c 05 e1 0d 3c  96 05 20 0d 3c a0 21 dd  |%.<....<.. .<.!.|
000118f0  f2 67 72 65 79 70 61 6c  28 f8 20 50 61 6c 25 28  |.greypal(. Pal%(|
00011900  29 2c 62 70 70 25 2c 64  69 72 25 29 0d 3c aa 39  |),bpp%,dir%).<.9|
00011910  f4 20 53 65 74 73 20 61  20 70 61 6c 65 74 74 65  |. Sets a palette|
00011920  20 74 6f 20 67 72 65 79  73 63 61 6c 65 20 66 6f  | to greyscale fo|
00011930  72 20 62 70 70 25 20 62  69 74 73 20 70 65 72 20  |r bpp% bits per |
00011940  70 69 78 65 6c 0d 3c b4  3f f4 20 64 69 72 25 3d  |pixel.<.?. dir%=|
00011950  31 20 67 69 76 65 73 20  62 6c 61 63 6b 20 74 6f  |1 gives black to|
00011960  20 77 68 69 74 65 2c 20  64 69 72 25 3d 2d 31 20  | white, dir%=-1 |
00011970  67 69 76 65 73 20 77 68  69 74 65 20 74 6f 20 62  |gives white to b|
00011980  6c 61 63 6b 0d 3c be 15  ea 20 63 6f 6c 73 25 2c  |lack.<... cols%,|
00011990  73 74 65 70 2c 69 2c 63  25 0d 3c c8 27 63 6f 6c  |step,i,c%.<.'col|
000119a0  73 25 3d 32 5e 62 70 70  25 3a 73 74 65 70 3d 32  |s%=2^bpp%:step=2|
000119b0  35 35 2f 28 63 6f 6c 73  25 2d 31 29 3a 69 3d 30  |55/(cols%-1):i=0|
000119c0  0d 3c d2 25 e7 64 69 72  25 3d 2d 31 20 8c 20 73  |.<.%.dir%=-1 . s|
000119d0  74 65 70 3d 2d 73 74 65  70 3a 69 3d 32 35 35 20  |tep=-step:i=255 |
000119e0  8b 20 69 3d 30 0d 3c dc  37 e3 20 63 25 3d 31 20  |. i=0.<.7. c%=1 |
000119f0  b8 20 32 5e 62 70 70 25  3a 50 61 6c 25 28 63 25  |. 2^bpp%:Pal%(c%|
00011a00  29 3d 69 20 84 20 69 3c  3c 38 20 84 20 69 3c 3c  |)=i . i<<8 . i<<|
00011a10  31 36 3a 69 2b 3d 73 74  65 70 3a ed 0d 3c e6 10  |16:i+=step:..<..|
00011a20  50 61 6c 25 28 30 29 3d  62 70 70 25 0d 3c f0 05  |Pal%(0)=bpp%.<..|
00011a30  e1 0d 3c fa 05 20 0d 3d  04 34 dd f2 6d 6f 64 65  |..<.. .=.4..mode|
00011a40  5f 69 6e 66 6f 28 6d 6f  64 65 25 2c f8 20 77 69  |_info(mode%,. wi|
00011a50  64 74 68 25 2c f8 20 68  65 69 67 68 74 25 2c f8  |dth%,. height%,.|
00011a60  20 63 6f 6c 6f 75 72 73  25 29 0d 3d 0e 31 f4 20  | colours%).=.1. |
00011a70  52 65 74 75 72 6e 73 20  69 6e 66 6f 72 6d 61 74  |Returns informat|
00011a80  69 6f 6e 20 61 62 6f 75  74 20 61 20 70 61 72 74  |ion about a part|
00011a90  69 63 75 6c 61 72 20 6d  6f 64 65 0d 3d 18 6e 63  |icular mode.=.nc|
00011aa0  6f 6c 6f 75 72 73 25 3d  32 5e 28 32 5e a4 6d 6f  |olours%=2^(2^.mo|
00011ab0  64 65 5f 76 61 72 28 6d  6f 64 65 25 2c 39 29 29  |de_var(mode%,9))|
00011ac0  3a 77 69 64 74 68 25 3d  31 2b a4 6d 6f 64 65 5f  |:width%=1+.mode_|
00011ad0  76 61 72 28 6d 6f 64 65  25 2c 31 31 29 3a 68 65  |var(mode%,11):he|
00011ae0  69 67 68 74 25 3d 31 2b  a4 6d 6f 64 65 5f 76 61  |ight%=1+.mode_va|
00011af0  72 28 6d 6f 64 65 25 2c  31 32 29 3a f4 20 52 65  |r(mode%,12):. Re|
00011b00  74 75 72 6e 20 69 6e 66  6f 0d 3d 22 05 e1 0d 3d  |turn info.="...=|
00011b10  2c 05 20 0d 3d 36 17 dd  f2 69 6e 76 61 6c 69 64  |,. .=6...invalid|
00011b20  61 74 65 5f 73 63 72 65  65 6e 0d 3d 40 1f f4 20  |ate_screen.=@.. |
00011b30  49 6e 76 61 6c 69 64 61  74 65 73 20 65 6e 74 69  |Invalidates enti|
00011b40  72 65 20 73 63 72 65 65  6e 0d 3d 4a 3d c8 99 20  |re screen.=J=.. |
00011b50  57 46 6f 72 63 65 25 2c  2d 31 2c 30 2c 30 2c 53  |WForce%,-1,0,0,S|
00011b60  63 72 57 25 2c 53 63 72  48 25 3a f4 20 46 6f 72  |crW%,ScrH%:. For|
00011b70  63 65 20 72 65 64 72 61  77 20 77 68 6f 6c 65 20  |ce redraw whole |
00011b80  73 63 72 65 65 6e 0d 3d  54 05 e1 0d 3d 5e 05 20  |screen.=T...=^. |
00011b90  0d 3d 68 16 dd f2 69 6e  76 61 6c 69 64 61 74 65  |.=h...invalidate|
00011ba0  5f 69 6d 61 67 65 0d 3d  72 17 f4 20 49 6e 76 61  |_image.=r.. Inva|
00011bb0  6c 69 64 61 74 65 73 20  69 6d 61 67 65 0d 3d 7c  |lidates image.=||
00011bc0  28 49 6d 67 3d a3 3a 46  72 65 71 43 61 6c 63 3d  |(Img=.:FreqCalc=|
00011bd0  a3 3a f4 20 52 65 73 65  74 20 69 6d 61 67 65 20  |.:. Reset image |
00011be0  66 6c 61 67 73 0d 3d 86  05 e1 0d 3d 90 05 20 0d  |flags.=....=.. .|
00011bf0  3d 9a 19 dd f2 6e 65 77  5f 77 69 6e 64 6f 77 28  |=....new_window(|
00011c00  68 61 6e 64 6c 65 25 29  0d 3d a4 20 f4 20 52 65  |handle%).=. . Re|
00011c10  64 72 61 77 73 20 65 6e  74 69 72 65 20 77 69 6e  |draws entire win|
00011c20  64 6f 77 20 61 72 65 61  0d 3d ae 1d f2 72 65 64  |dow area.=...red|
00011c30  72 61 77 5f 77 69 6e 64  6f 77 28 68 61 6e 64 6c  |raw_window(handl|
00011c40  65 25 2c b9 29 0d 3d b8  05 e1 0d 3d c2 05 20 0d  |e%,.).=....=.. .|
00011c50  3d cc 22 dd f2 72 65 64  72 61 77 5f 77 69 6e 64  |=."..redraw_wind|
00011c60  6f 77 28 68 61 6e 64 6c  65 25 2c 66 6f 72 63 65  |ow(handle%,force|
00011c70  29 0d 3d d6 28 f4 20 52  65 64 72 61 77 73 20 77  |).=.(. Redraws w|
00011c80  69 6e 64 6f 77 20 77 69  74 68 20 68 61 6e 64 6c  |indow with handl|
00011c90  65 20 68 61 6e 64 6c 65  25 0d 3d e0 3c f4 20 49  |e handle%.=.<. I|
00011ca0  66 20 66 6f 72 63 65 3d  54 52 55 45 20 74 68 65  |f force=TRUE the|
00011cb0  20 77 69 6e 64 6f 77 27  73 20 65 6e 74 69 72 65  | window's entire|
00011cc0  20 77 6f 72 6b 20 61 72  65 61 20 69 73 20 75 70  | work area is up|
00011cd0  64 61 74 65 64 0d 3d ea  2b ea 20 6d 6f 72 65 25  |dated.=.+. more%|
00011ce0  2c 6e 78 25 2c 6e 79 25  2c 76 77 25 2c 76 68 25  |,nx%,ny%,vw%,vh%|
00011cf0  2c 78 25 2c 79 25 2c 6f  78 25 2c 6f 79 25 2c 7a  |,x%,y%,ox%,oy%,z|
00011d00  0d 3d f4 45 ea 20 78 31  25 2c 78 32 25 2c 78 33  |.=.E. x1%,x2%,x3|
00011d10  25 2c 78 34 25 2c 79 31  25 2c 79 32 25 2c 79 33  |%,x4%,y1%,y2%,y3|
00011d20  25 2c 79 34 25 2c 77 31  25 2c 77 32 25 2c 77 33  |%,y4%,w1%,w2%,w3|
00011d30  25 2c 77 34 25 2c 68 31  25 2c 68 32 25 2c 68 33  |%,w4%,h1%,h2%,h3|
00011d40  25 2c 68 34 25 0d 3d fe  28 21 62 6c 6f 63 6b 3d  |%,h4%.=.(!block=|
00011d50  68 61 6e 64 6c 65 25 3a  f4 20 53 65 74 20 77 69  |handle%:. Set wi|
00011d60  6e 64 6f 77 27 73 20 68  61 6e 64 6c 65 0d 3e 08  |ndow's handle.>.|
00011d70  78 e7 66 6f 72 63 65 20  8c 20 62 6c 6f 63 6b 21  |x.force . block!|
00011d80  34 3d 30 3a 62 6c 6f 63  6b 21 38 3d 30 3a 62 6c  |4=0:block!8=0:bl|
00011d90  6f 63 6b 21 31 32 3d 26  37 46 46 46 3a 62 6c 6f  |ock!12=&7FFF:blo|
00011da0  63 6b 21 31 36 3d 26 37  46 46 46 3a c8 99 20 57  |ck!16=&7FFF:.. W|
00011db0  55 70 64 61 74 65 57 25  2c 2c 62 6c 6f 63 6b 20  |UpdateW%,,block |
00011dc0  b8 20 6d 6f 72 65 25 20  8b 20 c8 99 20 57 52 65  |. more% . .. WRe|
00011dd0  64 72 61 77 57 25 2c 2c  62 6c 6f 63 6b 20 b8 20  |drawW%,,block . |
00011de0  6d 6f 72 65 25 0d 3e 12  4a 76 77 25 3d 62 6c 6f  |more%.>.Jvw%=blo|
00011df0  63 6b 21 31 32 2b 58 73  74 65 70 25 2d 62 6c 6f  |ck!12+Xstep%-blo|
00011e00  63 6b 21 34 3a 76 68 25  3d 62 6c 6f 63 6b 21 31  |ck!4:vh%=block!1|
00011e10  36 2b 59 73 74 65 70 25  2d 62 6c 6f 63 6b 21 38  |6+Ystep%-block!8|
00011e20  3a f4 20 56 69 73 69 62  6c 65 20 73 69 7a 65 0d  |:. Visible size.|
00011e30  3e 1c 10 c8 8e 20 68 61  6e 64 6c 65 25 20 ca 0d  |>.... handle% ..|
00011e40  3e 26 27 20 c9 20 77 69  6e 5f 69 6d 67 25 20 3a  |>&' . win_img% :|
00011e50  20 f4 20 52 65 64 72 61  77 20 69 6d 61 67 65 20  | . Redraw image |
00011e60  77 69 6e 64 6f 77 0d 3e  30 47 20 20 6e 78 25 3d  |window.>0G  nx%=|
00011e70  28 62 6c 6f 63 6b 21 34  2d 62 6c 6f 63 6b 21 32  |(block!4-block!2|
00011e80  30 29 3a 6e 79 25 3d 28  62 6c 6f 63 6b 21 31 36  |0):ny%=(block!16|
00011e90  2d 62 6c 6f 63 6b 21 32  34 29 3a f4 20 57 6f 72  |-block!24):. Wor|
00011ea0  6b 20 61 72 65 61 20 6f  72 69 67 69 6e 0d 3e 3a  |k area origin.>:|
00011eb0  3f 20 20 e7 5a 6f 6f 6d  58 3e 3d 31 20 8c 20 21  |?  .ZoomX>=1 . !|
00011ec0  61 72 67 25 3d 5a 6f 6f  6d 58 3a 61 72 67 25 21  |arg%=ZoomX:arg%!|
00011ed0  38 3d 31 20 8b 20 21 61  72 67 25 3d 31 3a 61 72  |8=1 . !arg%=1:ar|
00011ee0  67 25 21 38 3d 31 2f 5a  6f 6f 6d 58 0d 3e 44 43  |g%!8=1/ZoomX.>DC|
00011ef0  20 20 e7 5a 6f 6f 6d 59  3e 3d 31 20 8c 20 61 72  |  .ZoomY>=1 . ar|
00011f00  67 25 21 34 3d 5a 6f 6f  6d 59 3a 61 72 67 25 21  |g%!4=ZoomY:arg%!|
00011f10  31 32 3d 31 20 8b 20 61  72 67 25 21 34 3d 31 3a  |12=1 . arg%!4=1:|
00011f20  61 72 67 25 21 31 32 3d  31 2f 5a 6f 6f 6d 59 0d  |arg%!12=1/ZoomY.|
00011f30  3e 4e 3c 20 20 e7 28 76  77 25 3c 3d 31 36 30 29  |>N<  .(vw%<=160)|
00011f40  84 28 76 68 25 3c 3d 31  36 30 29 20 8c 20 78 25  |.(vh%<=160) . x%|
00011f50  3d 62 6c 6f 63 6b 21 34  3a 79 25 3d 62 6c 6f 63  |=block!4:y%=bloc|
00011f60  6b 21 38 20 8b 20 76 77  25 3d 30 0d 3e 58 39 20  |k!8 . vw%=0.>X9 |
00011f70  20 c8 95 20 6d 6f 72 65  25 3a e7 76 77 25 3e 30  | .. more%:.vw%>0|
00011f80  20 8c 20 c8 99 20 57 53  65 74 43 6f 6c 25 2c 30  | . .. WSetCol%,0|
00011f90  3a c8 93 20 c8 90 20 78  25 2c 79 25 2c 76 77 25  |:.. .. x%,y%,vw%|
00011fa0  2c 76 68 25 0d 3e 62 38  20 20 f2 70 6c 6f 74 5f  |,vh%.>b8  .plot_|
00011fb0  69 6d 61 67 65 28 6e 78  25 2c 6e 79 25 2c 30 2c  |image(nx%,ny%,0,|
00011fc0  61 72 67 25 29 3a f4 20  44 69 73 70 6c 61 79 20  |arg%):. Display |
00011fd0  69 6d 61 67 65 20 73 70  72 69 74 65 0d 3e 6c 35  |image sprite.>l5|
00011fe0  20 20 c8 99 20 57 47 65  74 52 25 2c 2c 62 6c 6f  |  .. WGetR%,,blo|
00011ff0  63 6b 20 b8 20 6d 6f 72  65 25 3a ce 3a f4 20 47  |ck . more%:.:. G|
00012000  65 74 20 6e 65 78 74 20  72 65 63 74 61 6e 67 6c  |et next rectangl|
00012010  65 0d 3e 76 27 20 c9 20  77 69 6e 5f 7a 6f 6f 6d  |e.>v' . win_zoom|
00012020  25 20 3a 20 f4 20 52 65  64 72 61 77 20 7a 6f 6f  |% : . Redraw zoo|
00012030  6d 20 77 69 6e 64 6f 77  0d 3e 80 36 20 20 78 25  |m window.>.6  x%|
00012040  3d 62 6c 6f 63 6b 21 34  3a 79 25 3d 62 6c 6f 63  |=block!4:y%=bloc|
00012050  6b 21 38 3a f4 20 56 69  73 69 62 6c 65 20 61 72  |k!8:. Visible ar|
00012060  65 61 20 63 6f 6f 72 64  69 6e 61 74 65 73 0d 3e  |ea coordinates.>|
00012070  8a 21 20 20 7a 3d 5a 6f  6f 6d 57 2f 5a 6f 6f 6d  |.!  z=ZoomW/Zoom|
00012080  44 3a f4 20 5a 6f 6f 6d  20 66 61 63 74 6f 72 0d  |D:. Zoom factor.|
00012090  3e 94 44 20 20 6f 78 25  3d 76 77 25 2f 32 2d 5a  |>.D  ox%=vw%/2-Z|
000120a0  6f 6f 6d 57 58 25 2a 7a  2a 58 73 74 65 70 25 3a  |oomWX%*z*Xstep%:|
000120b0  6f 79 25 3d 76 68 25 2f  32 2d 5a 6f 6f 6d 57 59  |oy%=vh%/2-ZoomWY|
000120c0  25 2a 7a 2a 59 73 74 65  70 25 3a f4 20 4f 66 66  |%*z*Ystep%:. Off|
000120d0  73 65 74 0d 3e 9e 3d 20  20 6e 78 25 3d 53 70 72  |set.>.=  nx%=Spr|
000120e0  57 25 2a 7a 2a 58 73 74  65 70 25 3a 6e 79 25 3d  |W%*z*Xstep%:ny%=|
000120f0  53 70 72 48 25 2a 7a 2a  59 73 74 65 70 25 3a f4  |SprH%*z*Ystep%:.|
00012100  20 54 6f 74 61 6c 20 65  78 74 65 72 6e 61 6c 73  | Total externals|
00012110  0d 3e a8 38 20 20 77 31  25 3d 30 3a 77 32 25 3d  |.>.8  w1%=0:w2%=|
00012120  30 3a 77 33 25 3d 30 3a  77 34 25 3d 30 3a f4 20  |0:w3%=0:w4%=0:. |
00012130  4e 6f 20 75 6e 63 6f 76  65 72 65 64 20 62 6f 72  |No uncovered bor|
00012140  64 65 72 73 20 79 65 74  0d 3e b2 33 20 20 e7 6f  |ders yet.>.3  .o|
00012150  78 25 3e 30 20 8c 20 78  31 25 3d 78 25 3a 79 31  |x%>0 . x1%=x%:y1|
00012160  25 3d 79 25 3a 77 31 25  3d 6f 78 25 2d 58 73 74  |%=y%:w1%=ox%-Xst|
00012170  65 70 25 3a 68 31 25 3d  76 68 25 0d 3e bc 46 20  |ep%:h1%=vh%.>.F |
00012180  20 e7 28 6f 78 25 2b 6e  78 25 29 3c 76 77 25 20  | .(ox%+nx%)<vw% |
00012190  8c 20 78 32 25 3d 78 25  2b 6f 78 25 2b 6e 78 25  |. x2%=x%+ox%+nx%|
000121a0  3a 79 32 25 3d 79 25 3a  77 32 25 3d 76 77 25 2d  |:y2%=y%:w2%=vw%-|
000121b0  28 6f 78 25 2b 6e 78 25  29 3a 68 32 25 3d 76 68  |(ox%+nx%):h2%=vh|
000121c0  25 0d 3e c6 33 20 20 e7  6f 79 25 3e 30 20 8c 20  |%.>.3  .oy%>0 . |
000121d0  78 33 25 3d 78 25 3a 79  33 25 3d 79 25 3a 77 33  |x3%=x%:y3%=y%:w3|
000121e0  25 3d 76 77 25 3a 68 33  25 3d 6f 79 25 2d 59 73  |%=vw%:h3%=oy%-Ys|
000121f0  74 65 70 25 0d 3e d0 46  20 20 e7 28 6f 79 25 2b  |tep%.>.F  .(oy%+|
00012200  6e 79 25 29 3c 76 68 25  20 8c 20 78 34 25 3d 78  |ny%)<vh% . x4%=x|
00012210  25 3a 79 34 25 3d 79 25  2b 6f 79 25 2b 6e 79 25  |%:y4%=y%+oy%+ny%|
00012220  3a 77 34 25 3d 76 77 25  3a 68 34 25 3d 76 68 25  |:w4%=vw%:h4%=vh%|
00012230  2d 28 6f 79 25 2b 6e 79  25 29 0d 3e da 48 20 20  |-(oy%+ny%).>.H  |
00012240  21 61 72 67 25 3d 5a 6f  6f 6d 57 3a 61 72 67 25  |!arg%=ZoomW:arg%|
00012250  21 38 3d 5a 6f 6f 6d 44  3a 61 72 67 25 21 34 3d  |!8=ZoomD:arg%!4=|
00012260  5a 6f 6f 6d 57 3a 61 72  67 25 21 31 32 3d 5a 6f  |ZoomW:arg%!12=Zo|
00012270  6f 6d 44 3a f4 20 5a 6f  6f 6d 20 66 61 63 74 6f  |omD:. Zoom facto|
00012280  72 73 0d 3e e4 2e 20 20  6e 78 25 3d 78 25 2b 6f  |rs.>..  nx%=x%+o|
00012290  78 25 3a 6e 79 25 3d 79  25 2b 6f 79 25 3a f4 20  |x%:ny%=y%+oy%:. |
000122a0  50 6c 6f 74 20 63 6f 6f  72 64 69 6e 61 74 65 73  |Plot coordinates|
000122b0  0d 3e ee 2d 20 20 c8 95  20 6d 6f 72 65 25 3a e7  |.>.-  .. more%:.|
000122c0  77 31 25 3e 30 20 8c 20  c8 93 20 c8 90 20 78 31  |w1%>0 . .. .. x1|
000122d0  25 2c 79 31 25 2c 77 31  25 2c 68 31 25 0d 3e f8  |%,y1%,w1%,h1%.>.|
000122e0  24 20 20 e7 77 32 25 3e  30 20 8c 20 c8 93 20 c8  |$  .w2%>0 . .. .|
000122f0  90 20 78 32 25 2c 79 32  25 2c 77 32 25 2c 68 32  |. x2%,y2%,w2%,h2|
00012300  25 0d 3f 02 24 20 20 e7  77 33 25 3e 30 20 8c 20  |%.?.$  .w3%>0 . |
00012310  c8 93 20 c8 90 20 78 33  25 2c 79 33 25 2c 77 33  |.. .. x3%,y3%,w3|
00012320  25 2c 68 33 25 0d 3f 0c  24 20 20 e7 77 34 25 3e  |%,h3%.?.$  .w4%>|
00012330  30 20 8c 20 c8 93 20 c8  90 20 78 34 25 2c 79 34  |0 . .. .. x4%,y4|
00012340  25 2c 77 34 25 2c 68 34  25 0d 3f 16 38 20 20 f2  |%,w4%,h4%.?.8  .|
00012350  70 6c 6f 74 5f 69 6d 61  67 65 28 6e 78 25 2c 6e  |plot_image(nx%,n|
00012360  79 25 2c 30 2c 61 72 67  25 29 3a f4 20 44 69 73  |y%,0,arg%):. Dis|
00012370  70 6c 61 79 20 69 6d 61  67 65 20 73 70 72 69 74  |play image sprit|
00012380  65 0d 3f 20 35 20 20 c8  99 20 57 47 65 74 52 25  |e.? 5  .. WGetR%|
00012390  2c 2c 62 6c 6f 63 6b 20  b8 20 6d 6f 72 65 25 3a  |,,block . more%:|
000123a0  ce 3a f4 20 47 65 74 20  6e 65 78 74 20 72 65 63  |.:. Get next rec|
000123b0  74 61 6e 67 6c 65 0d 3f  2a 05 cb 0d 3f 34 05 e1  |tangle.?*...?4..|
000123c0  0d 3f 3e 05 20 0d 3f 48  1f dd f2 6f 70 65 6e 5f  |.?>. .?H...open_|
000123d0  77 69 6e 64 6f 77 28 68  61 6e 64 6c 65 25 2c 69  |window(handle%,i|
000123e0  6e 66 6f 29 0d 3f 52 26  f4 20 4f 70 65 6e 73 20  |nfo).?R&. Opens |
000123f0  77 69 6e 64 6f 77 20 77  69 74 68 20 68 61 6e 64  |window with hand|
00012400  6c 65 20 68 61 6e 64 6c  65 25 0d 3f 5c 4b f4 20  |le handle%.?\K. |
00012410  49 66 20 69 6e 66 6f 3e  30 20 74 68 65 6e 20 69  |If info>0 then i|
00012420  6e 66 6f 20 69 73 20 72  65 61 64 79 20 61 74 20  |nfo is ready at |
00012430  69 6e 66 6f 2c 20 65 6c  73 65 20 67 65 74 20 69  |info, else get i|
00012440  6e 66 6f 2c 20 69 66 20  2d 31 20 70 6f 70 20 61  |nfo, if -1 pop a|
00012450  74 20 74 6f 70 0d 3f 66  1b ea 20 62 25 2c 70 78  |t top.?f.. b%,px|
00012460  25 2c 70 79 25 2c 5f 25  2c 78 73 25 2c 79 73 25  |%,py%,_%,xs%,ys%|
00012470  0d 3f 70 0d e7 69 6e 66  6f 3e 30 20 8c 0d 3f 7a  |.?p..info>0 ..?z|
00012480  27 20 e3 20 62 25 3d 30  20 b8 20 33 31 20 88 20  |' . b%=0 . 31 . |
00012490  34 3a 62 6c 6f 63 6b 21  62 25 3d 69 6e 66 6f 21  |4:block!b%=info!|
000124a0  62 25 3a ed 0d 3f 84 26  cc 20 21 62 6c 6f 63 6b  |b%:..?.&. !block|
000124b0  3d 68 61 6e 64 6c 65 25  3a c8 99 20 57 47 65 74  |=handle%:.. WGet|
000124c0  57 53 25 2c 2c 62 6c 6f  63 6b 0d 3f 8e 38 20 e7  |WS%,,block.?.8 .|
000124d0  69 6e 66 6f 3d 2d 31 20  8c 20 62 6c 6f 63 6b 21  |info=-1 . block!|
000124e0  32 38 3d 2d 31 3a f4 20  50 6f 70 20 75 70 20 61  |28=-1:. Pop up a|
000124f0  74 20 74 6f 70 20 69 66  20 72 65 71 75 65 73 74  |t top if request|
00012500  65 64 0d 3f 98 c8 20 e7  68 61 6e 64 6c 65 25 3c  |ed.?.. .handle%<|
00012510  3e 77 69 6e 5f 69 6d 67  25 20 8c 20 f2 6d 6f 75  |>win_img% . .mou|
00012520  73 65 28 70 78 25 2c 70  79 25 2c 5f 25 29 3a 78  |se(px%,py%,_%):x|
00012530  73 25 3d 62 6c 6f 63 6b  21 31 32 2d 62 6c 6f 63  |s%=block!12-bloc|
00012540  6b 21 34 3a 79 73 25 3d  62 6c 6f 63 6b 21 31 36  |k!4:ys%=block!16|
00012550  2d 62 6c 6f 63 6b 21 38  3a 62 6c 6f 63 6b 21 34  |-block!8:block!4|
00012560  3d 70 78 25 2d 36 34 3a  62 6c 6f 63 6b 21 38 3d  |=px%-64:block!8=|
00012570  70 79 25 2d 79 73 25 2b  31 36 3a 62 6c 6f 63 6b  |py%-ys%+16:block|
00012580  21 31 32 3d 62 6c 6f 63  6b 21 34 2b 78 73 25 3a  |!12=block!4+xs%:|
00012590  62 6c 6f 63 6b 21 31 36  3d 62 6c 6f 63 6b 21 38  |block!16=block!8|
000125a0  2b 79 73 25 3a f4 20 50  6f 70 20 75 70 20 61 74  |+ys%:. Pop up at|
000125b0  20 6d 6f 75 73 65 20 69  66 20 6e 6f 74 20 69 6d  | mouse if not im|
000125c0  61 67 65 20 77 69 6e 64  6f 77 0d 3f a2 05 cd 0d  |age window.?....|
000125d0  3f ac 15 c8 99 20 57 4f  70 65 6e 57 25 2c 2c 62  |?.... WOpenW%,,b|
000125e0  6c 6f 63 6b 0d 3f b6 05  e1 0d 3f c0 05 20 0d 3f  |lock.?....?.. .?|
000125f0  ca 1b dd f2 63 6c 6f 73  65 5f 77 69 6e 64 6f 77  |....close_window|
00012600  28 68 61 6e 64 6c 65 25  29 0d 3f d4 27 f4 20 43  |(handle%).?.'. C|
00012610  6c 6f 73 65 73 20 77 69  6e 64 6f 77 20 77 69 74  |loses window wit|
00012620  68 20 68 61 6e 64 6c 65  20 68 61 6e 64 6c 65 25  |h handle handle%|
00012630  0d 3f de 25 21 62 6c 6f  63 6b 3d 68 61 6e 64 6c  |.?.%!block=handl|
00012640  65 25 3a c8 99 20 57 43  6c 6f 73 65 57 25 2c 2c  |e%:.. WCloseW%,,|
00012650  62 6c 6f 63 6b 0d 3f e8  05 e1 0d 3f f2 05 20 0d  |block.?....?.. .|
00012660  3f fc 11 dd a4 70 6f 6c  6c 28 6d 61 73 6b 25 29  |?....poll(mask%)|
00012670  0d 40 06 40 f4 20 52 65  74 75 72 6e 73 20 70 6f  |.@.@. Returns po|
00012680  6c 6c 20 72 65 61 73 6f  6e 20 63 6f 64 65 2c 20  |ll reason code, |
00012690  6d 61 73 6b 69 6e 67 20  77 69 74 68 20 6d 61 73  |masking with mas|
000126a0  6b 25 2c 20 64 61 74 61  20 61 74 20 70 6f 6c 6c  |k%, data at poll|
000126b0  0d 40 10 10 ea 20 72 65  61 73 6f 6e 63 6f 64 65  |.@... reasoncode|
000126c0  0d 40 1a 25 c8 99 20 57  50 6f 6c 6c 25 2c 6d 61  |.@.%.. WPoll%,ma|
000126d0  73 6b 25 2c 70 6f 6c 6c  20 b8 20 72 65 61 73 6f  |sk%,poll . reaso|
000126e0  6e 63 6f 64 65 0d 40 24  0f 3d 72 65 61 73 6f 6e  |ncode.@$.=reason|
000126f0  63 6f 64 65 0d 40 2e 05  20 0d 40 38 10 dd f2 69  |code.@.. .@8...i|
00012700  6e 69 74 69 61 6c 69 73  65 0d 40 42 19 f4 20 49  |nitialise.@B.. I|
00012710  6e 69 74 69 61 6c 69 73  65 73 20 70 72 6f 67 72  |nitialises progr|
00012720  61 6d 0d 40 4c 3e c8 99  20 22 57 69 6d 70 5f 52  |am.@L>.. "Wimp_R|
00012730  65 61 64 50 61 6c 65 74  74 65 22 2c 2c 77 69 6d  |eadPalette",,wim|
00012740  70 70 61 6c 3a f4 20 52  65 61 64 20 63 75 72 72  |ppal:. Read curr|
00012750  65 6e 74 20 57 49 4d 50  20 70 61 6c 65 74 74 65  |ent WIMP palette|
00012760  0d 40 56 37 f2 68 6f 75  72 5f 6f 6e 3a f2 69 6e  |.@V7.hour_on:.in|
00012770  69 74 5f 6d 6f 64 75 6c  65 3a f2 68 6f 75 72 5f  |it_module:.hour_|
00012780  6f 66 66 3a f4 20 49 6e  69 74 69 61 6c 69 73 65  |off:. Initialise|
00012790  20 6d 6f 64 75 6c 65 0d  40 60 44 c8 99 20 22 4f  | module.@`D.. "O|
000127a0  53 5f 43 68 65 63 6b 4d  6f 64 65 56 61 6c 69 64  |S_CheckModeValid|
000127b0  22 2c 31 38 20 b8 20 5f  25 3a 4d 75 6c 74 69 53  |",18 . _%:MultiS|
000127c0  79 6e 63 3d 28 5f 25 3c  3e 2d 31 29 3a f4 20 4d  |ync=(_%<>-1):. M|
000127d0  6f 6e 69 74 6f 72 20 74  79 70 65 0d 40 6a 30 61  |onitor type.@j0a|
000127e0  70 70 6c 6e 61 6d 65 24  3d 22 54 72 61 6e 73 6c  |pplname$="Transl|
000127f0  61 74 6f 72 22 3a f4 20  4e 61 6d 65 20 6f 66 20  |ator":. Name of |
00012800  61 70 70 6c 69 63 61 74  69 6f 6e 0d 40 74 46 c8  |application.@tF.|
00012810  99 20 22 57 69 6d 70 5f  49 6e 69 74 69 61 6c 69  |. "Wimp_Initiali|
00012820  73 65 22 2c 32 30 30 2c  26 34 42 35 33 34 31 35  |se",200,&4B53415|
00012830  34 2c 61 70 70 6c 6e 61  6d 65 24 20 b8 20 76 65  |4,applname$ . ve|
00012840  72 73 69 6f 6e 2c 54 61  73 6b 48 61 6e 64 6c 65  |rsion,TaskHandle|
00012850  25 0d 40 7e 39 e7 76 65  72 73 69 6f 6e 3c 32 30  |%.@~9.version<20|
00012860  30 20 8c 20 85 20 31 2c  22 49 20 63 61 6e 6e 6f  |0 . . 1,"I canno|
00012870  74 20 77 6f 72 6b 20 77  69 74 68 20 57 49 4d 50  |t work with WIMP|
00012880  20 70 72 65 2d 32 2e 30  30 22 0d 40 88 36 57 25  | pre-2.00".@.6W%|
00012890  3d a4 73 77 69 5f 74 6f  5f 6e 72 28 22 57 69 6d  |=.swi_to_nr("Wim|
000128a0  70 5f 49 6e 69 74 69 61  6c 69 73 65 22 29 3a f4  |p_Initialise"):.|
000128b0  20 42 61 73 65 20 53 57  49 20 6e 75 6d 62 65 72  | Base SWI number|
000128c0  0d 40 92 e4 57 43 72 65  61 74 65 57 25 3d 57 25  |.@..WCreateW%=W%|
000128d0  2b 31 3a 57 43 72 65 61  74 65 49 25 3d 57 25 2b  |+1:WCreateI%=W%+|
000128e0  32 3a 57 44 65 6c 65 74  65 57 25 3d 57 25 2b 33  |2:WDeleteW%=W%+3|
000128f0  3a 57 4f 70 65 6e 57 25  3d 57 25 2b 35 3a 57 43  |:WOpenW%=W%+5:WC|
00012900  6c 6f 73 65 57 25 3d 57  25 2b 36 3a 57 50 6f 6c  |loseW%=W%+6:WPol|
00012910  6c 25 3d 57 25 2b 37 3a  57 52 65 64 72 61 77 57  |l%=W%+7:WRedrawW|
00012920  25 3d 57 25 2b 38 3a 57  55 70 64 61 74 65 57 25  |%=W%+8:WUpdateW%|
00012930  3d 57 25 2b 39 3a 57 47  65 74 52 25 3d 57 25 2b  |=W%+9:WGetR%=W%+|
00012940  31 30 3a 57 47 65 74 57  53 25 3d 57 25 2b 31 31  |10:WGetWS%=W%+11|
00012950  3a 57 47 65 74 57 49 25  3d 57 25 2b 31 32 3a 57  |:WGetWI%=W%+12:W|
00012960  53 65 74 49 53 25 3d 57  25 2b 31 33 3a 57 47 65  |SetIS%=W%+13:WGe|
00012970  74 49 53 25 3d 57 25 2b  31 34 3a 57 47 65 74 50  |tIS%=W%+14:WGetP|
00012980  49 25 3d 57 25 2b 31 35  3a 57 44 72 61 67 42 25  |I%=W%+15:WDragB%|
00012990  3d 57 25 2b 31 36 3a 57  46 6f 72 63 65 25 3d 57  |=W%+16:WForce%=W|
000129a0  25 2b 31 37 0d 40 9c b3  57 53 65 74 43 61 25 3d  |%+17.@..WSetCa%=|
000129b0  57 25 2b 31 38 3a 57 43  72 65 61 74 65 4d 25 3d  |W%+18:WCreateM%=|
000129c0  57 25 2b 32 30 3a 57 44  65 63 6f 64 65 4d 25 3d  |W%+20:WDecodeM%=|
000129d0  57 25 2b 32 31 3a 57 53  65 74 45 25 3d 57 25 2b  |W%+21:WSetE%=W%+|
000129e0  32 33 3a 57 4c 6f 61 64  54 25 3d 57 25 2b 32 37  |23:WLoadT%=W%+27|
000129f0  3a 57 52 65 70 6f 72 74  25 3d 57 25 2b 33 31 3a  |:WReport%=W%+31:|
00012a00  57 53 65 74 4d 25 3d 57  25 2b 33 35 3a 57 53 65  |WSetM%=W%+35:WSe|
00012a10  74 50 25 3d 57 25 2b 33  36 3a 57 52 65 61 64 50  |tP%=W%+36:WReadP|
00012a20  25 3d 57 25 2b 33 37 3a  57 53 65 74 43 6f 6c 25  |%=W%+37:WSetCol%|
00012a30  3d 57 25 2b 33 38 3a 57  53 65 6e 64 4d 73 67 25  |=W%+38:WSendMsg%|
00012a40  3d 57 25 2b 33 39 3a 57  43 72 65 61 74 65 53 4d  |=W%+39:WCreateSM|
00012a50  25 3d 57 25 2b 34 30 0d  40 a6 7d 4f 53 53 70 6f  |%=W%+40.@.}OSSpo|
00012a60  70 25 3d a4 73 77 69 5f  74 6f 5f 6e 72 28 22 4f  |p%=.swi_to_nr("O|
00012a70  53 5f 53 70 72 69 74 65  4f 70 22 29 3a 4f 53 52  |S_SpriteOp"):OSR|
00012a80  65 61 64 56 56 25 3d a4  73 77 69 5f 74 6f 5f 6e  |eadVV%=.swi_to_n|
00012a90  72 28 22 4f 53 5f 52 65  61 64 56 64 75 56 61 72  |r("OS_ReadVduVar|
00012aa0  69 61 62 6c 65 73 22 29  3a 4f 53 52 65 61 64 4d  |iables"):OSReadM|
00012ab0  56 25 3d a4 73 77 69 5f  74 6f 5f 6e 72 28 22 4f  |V%=.swi_to_nr("O|
00012ac0  53 5f 52 65 61 64 4d 6f  64 65 56 61 72 69 61 62  |S_ReadModeVariab|
00012ad0  6c 65 22 29 0d 40 b0 33  c8 99 20 57 52 65 61 64  |le").@.3.. WRead|
00012ae0  50 25 2c 2c 77 69 6d 70  70 61 6c 3a f4 20 52 65  |P%,,wimppal:. Re|
00012af0  61 64 20 63 75 72 72 65  6e 74 20 57 49 4d 50 20  |ad current WIMP |
00012b00  70 61 6c 65 74 74 65 0d  40 ba 3d 74 66 25 3d 37  |palette.@.=tf%=7|
00012b10  3a 74 62 25 3d 32 3a 77  66 25 3d 37 3a 77 62 25  |:tb%=2:wf%=7:wb%|
00012b20  3d 30 3a 73 69 25 3d 31  3a 73 6f 25 3d 33 3a f4  |=0:si%=1:so%=3:.|
00012b30  20 57 69 6e 64 6f 77 2f  6d 65 6e 75 20 63 6f 6c  | Window/menu col|
00012b40  6f 75 72 73 0d 40 c4 94  21 62 6c 6f 63 6b 3d 2d  |ours.@..!block=-|
00012b50  31 3a 62 6c 6f 63 6b 21  34 3d 30 3a 62 6c 6f 63  |1:block!4=0:bloc|
00012b60  6b 21 38 3d 30 3a 62 6c  6f 63 6b 21 31 32 3d 36  |k!8=0:block!12=6|
00012b70  38 3a 62 6c 6f 63 6b 21  31 36 3d 36 38 3a 62 6c  |8:block!16=68:bl|
00012b80  6f 63 6b 21 32 30 3d 26  32 37 30 30 33 30 30 32  |ock!20=&27003002|
00012b90  3a 24 28 62 6c 6f 63 6b  2b 32 34 29 3d 22 21 74  |:$(block+24)="!t|
00012ba0  72 61 6e 73 6c 61 74 72  22 3a c8 99 20 57 43 72  |ranslatr":.. WCr|
00012bb0  65 61 74 65 49 25 2c 2c  62 6c 6f 63 6b 20 b8 20  |eateI%,,block . |
00012bc0  49 69 63 6f 6e 62 61 72  25 3a f4 20 49 63 6f 6e  |Iiconbar%:. Icon|
00012bd0  62 61 72 20 69 63 6f 6e  0d 40 ce 1c f4 20 4c 6f  |bar icon.@... Lo|
00012be0  61 64 20 73 70 72 69 74  65 73 20 66 6f 72 20 69  |ad sprites for i|
00012bf0  63 6f 6e 73 0d 40 d8 48  21 69 63 6f 6e 73 70 72  |cons.@.H!iconspr|
00012c00  69 74 65 73 3d 32 30 34  38 3a 69 63 6f 6e 73 70  |ites=2048:iconsp|
00012c10  72 69 74 65 73 21 34 3d  30 3a 69 63 6f 6e 73 70  |rites!4=0:iconsp|
00012c20  72 69 74 65 73 21 38 3d  31 36 3a 69 63 6f 6e 73  |rites!8=16:icons|
00012c30  70 72 69 74 65 73 21 31  32 3d 31 36 0d 40 e2 3c  |prites!12=16.@.<|
00012c40  c8 99 20 4f 53 53 70 6f  70 25 2c 31 30 2b 32 35  |.. OSSpop%,10+25|
00012c50  36 2c 69 63 6f 6e 73 70  72 69 74 65 73 2c 22 3c  |6,iconsprites,"<|
00012c60  54 72 61 6e 73 6c 61 74  6f 72 24 44 69 72 3e 2e  |Translator$Dir>.|
00012c70  53 70 72 69 74 65 73 22  0d 40 ec 14 f4 20 4c 6f  |Sprites".@... Lo|
00012c80  61 64 20 74 65 6d 70 6c  61 74 65 73 0d 40 f6 38  |ad templates.@.8|
00012c90  c8 99 20 22 57 69 6d 70  5f 4f 70 65 6e 54 65 6d  |.. "Wimp_OpenTem|
00012ca0  70 6c 61 74 65 22 2c 2c  22 3c 54 72 61 6e 73 6c  |plate",,"<Transl|
00012cb0  61 74 6f 72 24 44 69 72  3e 2e 54 65 6d 70 6c 61  |ator$Dir>.Templa|
00012cc0  74 65 73 22 0d 41 00 3c  69 63 3d 69 63 6f 6e 64  |tes".A.<ic=icond|
00012cd0  61 74 61 3a 69 65 3d 69  63 6f 6e 64 65 6e 64 3a  |ata:ie=icondend:|
00012ce0  f4 20 49 6e 64 69 72 65  63 74 65 64 20 69 63 6f  |. Indirected ico|
00012cf0  6e 20 64 61 74 61 20 77  6f 72 6b 73 70 61 63 65  |n data workspace|
00012d00  0d 41 0a 3a 24 64 75 6d  25 3d 22 73 61 76 65 22  |.A.:$dum%="save"|
00012d10  3a c8 99 20 57 4c 6f 61  64 54 25 2c 2c 77 69 6e  |:.. WLoadT%,,win|
00012d20  64 6f 77 2c 69 63 2c 69  65 2c 2d 31 2c 64 75 6d  |dow,ic,ie,-1,dum|
00012d30  25 2c 30 20 b8 20 2c 2c  69 63 0d 41 14 23 77 69  |%,0 . ,,ic.A.#wi|
00012d40  6e 64 6f 77 21 28 38 38  2b 32 34 29 3d 31 3a f4  |ndow!(88+24)=1:.|
00012d50  20 57 49 4d 50 20 61 72  65 61 70 74 72 0d 41 1e  | WIMP areaptr.A.|
00012d60  24 c8 99 20 57 43 72 65  61 74 65 57 25 2c 2c 77  |$.. WCreateW%,,w|
00012d70  69 6e 64 6f 77 20 b8 20  77 69 6e 5f 66 69 6c 65  |indow . win_file|
00012d80  25 0d 41 28 3f 53 41 56  73 6e 25 3d a4 69 63 6f  |%.A(?SAVsn%=.ico|
00012d90  6e 61 64 64 72 28 77 69  6e 5f 66 69 6c 65 25 2c  |naddr(win_file%,|
00012da0  30 29 3a 53 41 56 66 6e  25 3d a4 69 63 6f 6e 61  |0):SAVfn%=.icona|
00012db0  64 64 72 28 77 69 6e 5f  66 69 6c 65 25 2c 31 29  |ddr(win_file%,1)|
00012dc0  0d 41 32 3a 24 64 75 6d  25 3d 22 69 6e 66 6f 22  |.A2:$dum%="info"|
00012dd0  3a c8 99 20 57 4c 6f 61  64 54 25 2c 2c 77 69 6e  |:.. WLoadT%,,win|
00012de0  64 6f 77 2c 69 63 2c 69  65 2c 2d 31 2c 64 75 6d  |dow,ic,ie,-1,dum|
00012df0  25 2c 30 20 b8 20 2c 2c  69 63 0d 41 3c 24 c8 99  |%,0 . ,,ic.A<$..|
00012e00  20 57 43 72 65 61 74 65  57 25 2c 2c 77 69 6e 64  | WCreateW%,,wind|
00012e10  6f 77 20 b8 20 77 69 6e  5f 69 6e 66 6f 25 0d 41  |ow . win_info%.A|
00012e20  46 3f 24 64 75 6d 25 3d  22 66 69 6c 65 74 79 70  |F?$dum%="filetyp|
00012e30  65 73 22 3a c8 99 20 57  4c 6f 61 64 54 25 2c 2c  |es":.. WLoadT%,,|
00012e40  77 69 6e 64 6f 77 2c 69  63 2c 69 65 2c 2d 31 2c  |window,ic,ie,-1,|
00012e50  64 75 6d 25 2c 30 20 b8  20 2c 2c 69 63 0d 41 50  |dum%,0 . ,,ic.AP|
00012e60  25 c8 99 20 57 43 72 65  61 74 65 57 25 2c 2c 77  |%.. WCreateW%,,w|
00012e70  69 6e 64 6f 77 20 b8 20  77 69 6e 5f 66 69 6c 65  |indow . win_file|
00012e80  74 25 0d 41 5a 3f 24 64  75 6d 25 3d 22 69 6d 61  |t%.AZ?$dum%="ima|
00012e90  67 65 69 6e 66 6f 22 3a  c8 99 20 57 4c 6f 61 64  |geinfo":.. WLoad|
00012ea0  54 25 2c 2c 77 69 6e 64  6f 77 2c 69 63 2c 69 65  |T%,,window,ic,ie|
00012eb0  2c 2d 31 2c 64 75 6d 25  2c 30 20 b8 20 2c 2c 69  |,-1,dum%,0 . ,,i|
00012ec0  63 0d 41 64 26 c8 99 20  57 43 72 65 61 74 65 57  |c.Ad&.. WCreateW|
00012ed0  25 2c 2c 77 69 6e 64 6f  77 20 b8 20 77 69 6e 5f  |%,,window . win_|
00012ee0  69 6d 69 6e 66 6f 25 0d  41 6e 85 77 25 3d 77 69  |iminfo%.An.w%=wi|
00012ef0  6e 5f 69 6d 69 6e 66 6f  25 3a 49 4d 49 66 6e 25  |n_iminfo%:IMIfn%|
00012f00  3d a4 69 63 6f 6e 61 64  64 72 28 77 25 2c 31 29  |=.iconaddr(w%,1)|
00012f10  3a 49 4d 49 69 74 25 3d  a4 69 63 6f 6e 61 64 64  |:IMIit%=.iconadd|
00012f20  72 28 77 25 2c 33 29 3a  49 4d 49 69 6e 25 3d a4  |r(w%,3):IMIin%=.|
00012f30  69 63 6f 6e 61 64 64 72  28 77 25 2c 35 29 3a 49  |iconaddr(w%,5):I|
00012f40  4d 49 69 66 25 3d a4 69  63 6f 6e 61 64 64 72 28  |MIif%=.iconaddr(|
00012f50  77 25 2c 37 29 3a 49 4d  49 63 6f 25 3d a4 69 63  |w%,7):IMIco%=.ic|
00012f60  6f 6e 61 64 64 72 28 77  25 2c 39 29 0d 41 78 7b  |onaddr(w%,9).Ax{|
00012f70  49 4d 49 77 68 25 3d a4  69 63 6f 6e 61 64 64 72  |IMIwh%=.iconaddr|
00012f80  28 77 25 2c 31 31 29 3a  49 4d 49 73 63 25 3d a4  |(w%,11):IMIsc%=.|
00012f90  69 63 6f 6e 61 64 64 72  28 77 25 2c 31 33 29 3a  |iconaddr(w%,13):|
00012fa0  49 4d 49 62 70 25 3d a4  69 63 6f 6e 61 64 64 72  |IMIbp%=.iconaddr|
00012fb0  28 77 25 2c 31 35 29 3a  49 4d 49 73 6d 25 3d a4  |(w%,15):IMIsm%=.|
00012fc0  69 63 6f 6e 61 64 64 72  28 77 25 2c 31 37 29 3a  |iconaddr(w%,17):|
00012fd0  49 4d 49 72 6e 25 3d a4  69 63 6f 6e 61 64 64 72  |IMIrn%=.iconaddr|
00012fe0  28 77 25 2c 31 39 29 0d  41 82 3d 24 64 75 6d 25  |(w%,19).A.=$dum%|
00012ff0  3d 22 72 67 62 62 69 74  73 22 3a c8 99 20 57 4c  |="rgbbits":.. WL|
00013000  6f 61 64 54 25 2c 2c 77  69 6e 64 6f 77 2c 69 63  |oadT%,,window,ic|
00013010  2c 69 65 2c 2d 31 2c 64  75 6d 25 2c 30 20 b8 20  |,ie,-1,dum%,0 . |
00013020  2c 2c 69 63 0d 41 8c 43  e3 20 69 25 3d 33 20 b8  |,,ic.A.C. i%=3 .|
00013030  20 35 3a 61 70 25 3d 77  69 6e 64 6f 77 2b 38 38  | 5:ap%=window+88|
00013040  2b 69 25 2a 33 32 2b 32  34 3a 21 61 70 25 3d 69  |+i%*32+24:!ap%=i|
00013050  63 6f 6e 73 70 72 69 74  65 73 3a ed 3a f4 20 41  |consprites:.:. A|
00013060  72 65 61 70 74 72 73 0d  41 96 27 c8 99 20 57 43  |reaptrs.A.'.. WC|
00013070  72 65 61 74 65 57 25 2c  2c 77 69 6e 64 6f 77 20  |reateW%,,window |
00013080  b8 20 77 69 6e 5f 72 67  62 62 69 74 73 25 0d 41  |. win_rgbbits%.A|
00013090  a0 45 24 64 75 6d 25 3d  22 69 6d 61 67 65 22 3a  |.E$dum%="image":|
000130a0  49 4d 57 74 74 25 3d 69  63 3a c8 99 20 57 4c 6f  |IMWtt%=ic:.. WLo|
000130b0  61 64 54 25 2c 2c 77 69  6e 64 6f 77 2c 69 63 2c  |adT%,,window,ic,|
000130c0  69 65 2c 2d 31 2c 64 75  6d 25 2c 30 20 b8 20 2c  |ie,-1,dum%,0 . ,|
000130d0  2c 69 63 0d 41 aa 2a 77  69 6e 64 6f 77 3f 33 35  |,ic.A.*window?35|
000130e0  3d 26 46 46 3a f4 20 54  72 61 6e 73 70 61 72 65  |=&FF:. Transpare|
000130f0  6e 74 20 62 61 63 6b 67  72 6f 75 6e 64 0d 41 b4  |nt background.A.|
00013100  23 c8 99 20 57 43 72 65  61 74 65 57 25 2c 2c 77  |#.. WCreateW%,,w|
00013110  69 6e 64 6f 77 20 b8 20  77 69 6e 5f 69 6d 67 25  |indow . win_img%|
00013120  0d 41 be 3a 24 64 75 6d  25 3d 22 7a 6f 6f 6d 22  |.A.:$dum%="zoom"|
00013130  3a c8 99 20 57 4c 6f 61  64 54 25 2c 2c 77 69 6e  |:.. WLoadT%,,win|
00013140  64 6f 77 2c 69 63 2c 69  65 2c 2d 31 2c 64 75 6d  |dow,ic,ie,-1,dum|
00013150  25 2c 30 20 b8 20 2c 2c  69 63 0d 41 c8 24 c8 99  |%,0 . ,,ic.A.$..|
00013160  20 57 43 72 65 61 74 65  57 25 2c 2c 77 69 6e 64  | WCreateW%,,wind|
00013170  6f 77 20 b8 20 77 69 6e  5f 7a 6f 6f 6d 25 0d 41  |ow . win_zoom%.A|
00013180  d2 1b c8 99 20 22 57 69  6d 70 5f 43 6c 6f 73 65  |.... "Wimp_Close|
00013190  54 65 6d 70 6c 61 74 65  22 0d 41 dc 19 f4 20 4c  |Template".A... L|
000131a0  6f 61 64 20 6d 65 6e 75  20 73 74 72 75 63 74 75  |oad menu structu|
000131b0  72 65 0d 41 e6 3c c8 99  20 22 4f 53 5f 46 69 6c  |re.A.<.. "OS_Fil|
000131c0  65 22 2c 35 2c 22 3c 54  72 61 6e 73 6c 61 74 6f  |e",5,"<Translato|
000131d0  72 24 44 69 72 3e 2e 4d  65 6e 75 53 74 72 75 63  |r$Dir>.MenuStruc|
000131e0  74 22 20 b8 20 2c 2c 2c  2c 73 6c 65 6e 25 0d 41  |t" . ,,,,slen%.A|
000131f0  f0 17 de 20 6d 65 6e 75  73 74 72 75 63 74 25 20  |... menustruct% |
00013200  73 6c 65 6e 25 0d 41 fa  3e c8 99 20 22 4f 53 5f  |slen%.A.>.. "OS_|
00013210  46 69 6c 65 22 2c 32 35  35 2c 22 3c 54 72 61 6e  |File",255,"<Tran|
00013220  73 6c 61 74 6f 72 24 44  69 72 3e 2e 4d 65 6e 75  |slator$Dir>.Menu|
00013230  53 74 72 75 63 74 22 2c  6d 65 6e 75 73 74 72 75  |Struct",menustru|
00013240  63 74 25 0d 42 04 3a c8  99 20 22 4f 53 5f 46 69  |ct%.B.:.. "OS_Fi|
00013250  6c 65 22 2c 35 2c 22 3c  54 72 61 6e 73 6c 61 74  |le",5,"<Translat|
00013260  6f 72 24 44 69 72 3e 2e  4d 65 6e 75 44 61 74 61  |or$Dir>.MenuData|
00013270  22 20 b8 20 2c 2c 2c 2c  64 6c 65 6e 25 0d 42 0e  |" . ,,,,dlen%.B.|
00013280  15 de 20 6d 65 6e 75 64  61 74 61 25 20 64 6c 65  |.. menudata% dle|
00013290  6e 25 0d 42 18 3a c8 99  20 22 4f 53 5f 46 69 6c  |n%.B.:.. "OS_Fil|
000132a0  65 22 2c 32 35 35 2c 22  3c 54 72 61 6e 73 6c 61  |e",255,"<Transla|
000132b0  74 6f 72 24 44 69 72 3e  2e 4d 65 6e 75 44 61 74  |tor$Dir>.MenuDat|
000132c0  61 22 2c 6d 65 6e 75 64  61 74 61 25 0d 42 22 27  |a",menudata%.B"'|
000132d0  e3 20 61 25 3d 6d 65 6e  75 73 74 72 75 63 74 25  |. a%=menustruct%|
000132e0  2b 34 20 b8 20 61 25 2b  73 6c 65 6e 25 2d 38 20  |+4 . a%+slen%-8 |
000132f0  88 20 34 0d 42 2c bd 64  25 3d 21 61 25 3a e7 28  |. 4.B,.d%=!a%:.(|
00013300  64 25 80 26 46 46 46 30  30 30 30 30 29 3c 3e 26  |d%.&FFF00000)<>&|
00013310  44 45 41 30 30 30 30 30  20 8b 20 6b 25 3d 28 64  |DEA00000 . k%=(d|
00013320  25 3e 3e 31 36 29 80 26  46 3a 64 25 3d 64 25 80  |%>>16).&F:d%=d%.|
00013330  26 46 46 46 46 3a e7 6b  25 3d 31 20 8c 20 21 61  |&FFFF:.k%=1 . !a|
00013340  25 3d 64 25 2b 6d 65 6e  75 73 74 72 75 63 74 25  |%=d%+menustruct%|
00013350  20 8b 20 e7 6b 25 3d 32  20 8c 20 21 61 25 3d 64  | . .k%=2 . !a%=d|
00013360  25 2b 6d 65 6e 75 64 61  74 61 25 20 8b 20 e7 64  |%+menudata% . .d|
00013370  25 3d 31 20 8c 20 21 61  25 3d 77 69 6e 5f 66 69  |%=1 . !a%=win_fi|
00013380  6c 65 25 20 8b 20 e7 64  25 3d 32 20 8c 20 21 61  |le% . .d%=2 . !a|
00013390  25 3d 77 69 6e 5f 72 67  62 62 69 74 73 25 20 8b  |%=win_rgbbits% .|
000133a0  20 21 61 25 3d 77 69 6e  5f 69 6d 69 6e 66 6f 25  | !a%=win_iminfo%|
000133b0  0d 42 36 05 ed 0d 42 40  94 56 61 72 73 3d 8e 22  |.B6...B@.Vars=."|
000133c0  3c 54 72 61 6e 73 6c 61  74 6f 72 24 44 69 72 3e  |<Translator$Dir>|
000133d0  2e 4d 65 6e 75 56 61 72  73 22 3a c8 95 20 ac c5  |.MenuVars":.. ..|
000133e0  23 56 61 72 73 3a 76 6e  24 3d be 23 56 61 72 73  |#Vars:vn$=.#Vars|
000133f0  3a 64 25 3d 9a 23 56 61  72 73 3a 76 76 24 3d be  |:d%=.#Vars:vv$=.|
00013400  23 56 61 72 73 3a 64 25  3d 9a 23 56 61 72 73 3a  |#Vars:d%=.#Vars:|
00013410  e7 c0 76 6e 24 2c 32 29  3d 22 69 64 22 20 8c 20  |..vn$,2)="id" . |
00013420  76 76 25 3d 6d 65 6e 75  64 61 74 61 25 2b bb 76  |vv%=menudata%+.v|
00013430  76 24 20 8b 20 76 76 25  3d 6d 65 6e 75 73 74 72  |v$ . vv%=menustr|
00013440  75 63 74 25 2b bb 76 76  24 0d 42 4a 2d 64 25 3d  |uct%+.vv$.BJ-d%=|
00013450  a0 28 22 46 4e 63 76 61  72 28 22 2b 76 6e 24 2b  |.("FNcvar("+vn$+|
00013460  22 2c 22 2b c3 76 76 25  2b 22 29 22 29 3a ce 3a  |","+.vv%+")"):.:|
00013470  d9 23 56 61 72 73 0d 42  54 26 6d 65 6e 75 6d 61  |.#Vars.BT&menuma|
00013480  69 6e 25 3d 6d 65 6e 75  73 74 72 75 63 74 25 2b  |in%=menustruct%+|
00013490  21 6d 65 6e 75 73 74 72  75 63 74 25 0d 42 5e 14  |!menustruct%.B^.|
000134a0  f4 20 49 6e 69 74 20 76  61 72 69 61 62 6c 65 73  |. Init variables|
000134b0  0d 42 68 69 53 61 76 65  4b 69 6e 64 24 3d 22 22  |.BhiSaveKind$=""|
000134c0  3a 49 6d 67 3d a3 3a 53  61 76 65 50 61 6c 3d b9  |:Img=.:SavePal=.|
000134d0  3a 5a 6f 6f 6d 58 3d 31  3a 5a 6f 6f 6d 59 3d 31  |:ZoomX=1:ZoomY=1|
000134e0  3a 49 6d 61 67 65 53 70  72 24 3d 22 69 6d 61 67  |:ImageSpr$="imag|
000134f0  65 22 3a 46 6c 65 6e 25  3d 30 3a 4c 6f 61 64 24  |e":Flen%=0:Load$|
00013500  3d 22 22 3a 53 61 6d 65  4c 65 61 66 3d a3 3a 53  |="":SameLeaf=.:S|
00013510  6c 6f 74 44 6f 77 6e 3d  a3 0d 42 72 8c 44 61 74  |lotDown=..Br.Dat|
00013520  61 53 61 76 65 52 65 66  25 3d 2d 31 3a 44 61 74  |aSaveRef%=-1:Dat|
00013530  61 4c 6f 61 64 52 65 66  25 3d a3 3a 59 4d 75 6c  |aLoadRef%=.:YMul|
00013540  25 3d 31 3a 59 44 69 76  25 3d 31 3a 58 4d 75 6c  |%=1:YDiv%=1:XMul|
00013550  25 3d 31 3a 58 44 69 76  25 3d 31 3a 43 6c 65 61  |%=1:XDiv%=1:Clea|
00013560  72 46 69 6c 65 3d a3 3a  53 61 76 65 53 70 72 24  |rFile=.:SaveSpr$|
00013570  3d 22 49 6d 61 67 65 22  3a 53 61 76 65 43 6c 65  |="Image":SaveCle|
00013580  61 72 24 3d 22 43 6c 65  61 72 22 3a 53 70 72 53  |ar$="Clear":SprS|
00013590  61 76 65 24 3d 22 22 3a  43 6c 65 61 72 53 61 76  |ave$="":ClearSav|
000135a0  65 24 3d 22 22 0d 42 7c  88 46 31 25 3d 30 3a 46  |e$="".B|.F1%=0:F|
000135b0  32 25 3d 30 3a 53 70 72  57 25 3d 30 3a 53 70 72  |2%=0:SprW%=0:Spr|
000135c0  48 25 3d 30 3a 49 6d 61  67 65 4e 72 25 3d 31 3a  |H%=0:ImageNr%=1:|
000135d0  41 75 74 6f 4d 6f 64 65  3d b9 3a 41 75 74 6f 50  |AutoMode=.:AutoP|
000135e0  61 6c 3d b9 3a 43 75 72  72 4d 6f 64 65 25 3d 2d  |al=.:CurrMode%=-|
000135f0  31 3a 45 72 72 53 70 72  65 61 64 3d 31 3a 4d 6f  |1:ErrSpread=1:Mo|
00013600  64 65 53 65 74 3d 30 3a  55 73 65 72 4d 6f 64 65  |deSet=0:UserMode|
00013610  53 65 74 25 28 29 3d 30  2c 30 2c 38 2c 31 32 2c  |Set%()=0,0,8,12,|
00013620  31 35 3a 41 75 74 6f 5a  6f 6f 6d 3d a3 0d 42 86  |15:AutoZoom=..B.|
00013630  a0 42 6c 61 63 6b 57 68  69 74 65 3d a3 3a 54 72  |.BlackWhite=.:Tr|
00013640  61 6e 73 54 61 62 49 64  3d a3 3a 49 6d 67 4d 6f  |ansTabId=.:ImgMo|
00013650  64 65 25 3d 30 3a 47 49  46 53 63 61 6e 3d a3 3a  |de%=0:GIFScan=.:|
00013660  52 47 42 62 69 74 73 25  3d 26 30 38 30 38 30 38  |RGBbits%=&080808|
00013670  3a 42 6c 61 6e 6b 69 6e  67 3d a3 3a 5a 69 67 5a  |:Blanking=.:ZigZ|
00013680  61 67 3d b9 3a 49 6e 76  65 72 74 52 47 42 3d a3  |ag=.:InvertRGB=.|
00013690  3a 46 72 65 71 43 61 6c  63 3d a3 3a 4f 75 74 4d  |:FreqCalc=.:OutM|
000136a0  6f 64 65 3d 31 3a 4f 75  74 50 61 6c 3d 31 3a 49  |ode=1:OutPal=1:I|
000136b0  6e 46 69 6c 65 24 3d 22  22 3a 49 6e 54 79 70 65  |nFile$="":InType|
000136c0  25 3d 30 3a 50 65 72 63  65 6e 74 3d b9 0d 42 90  |%=0:Percent=..B.|
000136d0  79 41 63 74 69 6f 6e 3d  30 3a 41 63 74 4c 6f 61  |yAction=0:ActLoa|
000136e0  64 3d 31 3a 41 63 74 52  6f 74 61 74 65 3d 32 3a  |d=1:ActRotate=2:|
000136f0  41 63 74 50 6f 73 74 4c  6f 61 64 3d 33 3a 56 69  |ActPostLoad=3:Vi|
00013700  65 77 4d 6f 64 65 3d a3  3a 50 72 65 4d 6f 64 65  |ewMode=.:PreMode|
00013710  3d eb 3a 5a 6f 6f 6d 57  69 6e 3d a3 3a 5a 6f 6f  |=.:ZoomWin=.:Zoo|
00013720  6d 44 3d 34 3a 5a 6f 6f  6d 57 3d 5a 6f 6f 6d 44  |mD=4:ZoomW=ZoomD|
00013730  3a 44 69 76 49 73 49 6e  58 3d a3 3a 44 69 76 49  |:DivIsInX=.:DivI|
00013740  73 49 6e 59 3d a3 0d 42  9a 7c 4f 75 74 58 25 3d  |sInY=..B.|OutX%=|
00013750  31 3a 4f 75 74 59 25 3d  31 3a 4f 75 74 4d 6f 64  |1:OutY%=1:OutMod|
00013760  65 25 3d 31 35 3a 47 61  6d 6d 61 46 3d 31 3a 47  |e%=15:GammaF=1:G|
00013770  61 6d 6d 61 3d a3 3a 42  6c 61 63 6b 46 3d 30 3a  |amma=.:BlackF=0:|
00013780  42 6c 61 63 6b 3d a3 3a  52 61 6e 67 65 3d a3 3a  |Black=.:Range=.:|
00013790  52 61 6e 67 65 4d 69 6e  25 3d 30 3a 52 61 6e 67  |RangeMin%=0:Rang|
000137a0  65 4d 61 78 25 3d 30 3a  52 61 6e 67 65 49 3d a3  |eMax%=0:RangeI=.|
000137b0  3a 46 72 6f 6d 25 3d 31  3a 47 72 65 79 52 67 62  |:From%=1:GreyRgb|
000137c0  3d a3 0d 42 a4 a4 42 5f  6e 75 6c 6c 25 3d 30 3a  |=..B..B_null%=0:|
000137d0  42 5f 61 72 65 61 25 3d  31 3a 42 5f 73 70 72 69  |B_area%=1:B_spri|
000137e0  74 65 25 3d 32 3a 42 5f  73 70 72 69 6d 67 25 3d  |te%=2:B_sprimg%=|
000137f0  33 3a 42 5f 69 6d 67 74  6f 70 25 3d 34 3a 42 5f  |3:B_imgtop%=4:B_|
00013800  69 6e 66 69 6c 65 25 3d  35 3a 42 5f 70 69 78 62  |infile%=5:B_pixb|
00013810  75 66 31 25 3d 36 3a 42  5f 70 69 78 62 75 66 32  |uf1%=6:B_pixbuf2|
00013820  25 3d 37 3a 42 5f 70 69  78 76 61 6c 25 3d 38 3a  |%=7:B_pixval%=8:|
00013830  42 5f 70 69 78 73 63 61  6c 65 64 25 3d 39 3a 42  |B_pixscaled%=9:B|
00013840  5f 6c 7a 77 74 61 62 6c  65 25 3d 31 30 3a 42 5f  |_lzwtable%=10:B_|
00013850  73 74 72 6f 66 66 25 3d  31 31 3a 42 5f 66 73 65  |stroff%=11:B_fse|
00013860  72 72 25 3d 31 32 0d 42  ae 30 e7 a4 6c 6f 61 64  |rr%=12.B.0..load|
00013870  5f 73 74 61 74 75 73 3a  f4 20 4c 6f 61 64 20 64  |_status:. Load d|
00013880  65 66 61 75 6c 74 20 73  74 61 74 75 73 20 28 69  |efault status (i|
00013890  66 20 61 6e 79 29 0d 42  b8 05 e1 0d 42 c2 05 20  |f any).B....B.. |
000138a0  0d 42 cc 17 dd a4 63 76  61 72 28 f8 20 76 61 72  |.B....cvar(. var|
000138b0  25 2c 76 61 6c 25 29 0d  42 d6 2b f4 20 43 72 65  |%,val%).B.+. Cre|
000138c0  61 74 65 73 20 6e 65 77  20 76 61 72 69 61 62 6c  |ates new variabl|
000138d0  65 20 76 61 72 25 2c 20  76 61 6c 75 65 20 76 61  |e var%, value va|
000138e0  6c 25 0d 42 e0 10 76 61  72 25 3d 76 61 6c 25 3a  |l%.B..var%=val%:|
000138f0  3d 30 0d 42 ea 05 20 0d  42 f4 19 dd a4 69 63 6f  |=0.B.. .B....ico|
00013900  6e 61 64 64 72 28 77 69  6e 25 2c 69 63 6f 25 29  |naddr(win%,ico%)|
00013910  0d 42 fe 2c f4 20 52 65  74 75 72 6e 73 20 69 6e  |.B.,. Returns in|
00013920  64 69 72 65 63 74 65 64  20 69 63 6f 6e 27 73 20  |directed icon's |
00013930  64 61 74 61 20 61 64 64  72 65 73 73 0d 43 08 3e  |data address.C.>|
00013940  21 62 6c 6f 63 6b 3d 77  69 6e 25 3a 62 6c 6f 63  |!block=win%:bloc|
00013950  6b 21 34 3d 69 63 6f 25  3a c8 99 20 57 47 65 74  |k!4=ico%:.. WGet|
00013960  49 53 25 2c 2c 62 6c 6f  63 6b 3a f4 20 47 65 74  |IS%,,block:. Get|
00013970  20 69 63 6f 6e 20 69 6e  66 6f 0d 43 12 0d 3d 62  | icon info.C..=b|
00013980  6c 6f 63 6b 21 32 38 0d  43 1c 05 20 0d 43 26 11  |lock!28.C.. .C&.|
00013990  dd a4 6c 6f 61 64 5f 73  74 61 74 75 73 0d 43 30  |..load_status.C0|
000139a0  23 f4 20 4c 6f 61 64 73  20 64 65 66 61 75 6c 74  |#. Loads default|
000139b0  20 73 74 61 74 75 73 20  28 69 66 20 61 6e 79 29  | status (if any)|
000139c0  0d 43 3a 48 f4 20 52 65  74 75 72 6e 73 20 54 52  |.C:H. Returns TR|
000139d0  55 45 20 69 66 20 73 75  63 63 65 73 66 75 6c 2c  |UE if succesful,|
000139e0  20 65 6c 73 65 20 46 41  4c 53 45 20 28 69 2e 65  | else FALSE (i.e|
000139f0  2e 20 73 74 61 74 75 73  20 66 69 6c 65 20 6e 6f  |. status file no|
00013a00  74 20 66 6f 75 6e 64 29  0d 43 44 36 53 74 61 74  |t found).CD6Stat|
00013a10  75 73 3d 8e 28 22 3c 54  72 61 6e 73 6c 61 74 6f  |us=.("<Translato|
00013a20  72 24 44 69 72 3e 2e 53  74 61 74 75 73 22 29 3a  |r$Dir>.Status"):|
00013a30  e7 53 74 61 74 75 73 3d  30 20 8c 20 3d a3 0d 43  |.Status=0 . =..C|
00013a40  4e e7 e8 23 53 74 61 74  75 73 2c 41 75 74 6f 4d  |N..#Status,AutoM|
00013a50  6f 64 65 2c 41 75 74 6f  50 61 6c 2c 4d 6f 64 65  |ode,AutoPal,Mode|
00013a60  53 65 74 2c 45 72 72 53  70 72 65 61 64 2c 53 61  |Set,ErrSpread,Sa|
00013a70  76 65 50 61 6c 2c 55 73  65 72 4d 6f 64 65 53 65  |vePal,UserModeSe|
00013a80  74 25 28 31 29 2c 55 73  65 72 4d 6f 64 65 53 65  |t%(1),UserModeSe|
00013a90  74 25 28 32 29 2c 55 73  65 72 4d 6f 64 65 53 65  |t%(2),UserModeSe|
00013aa0  74 25 28 33 29 2c 55 73  65 72 4d 6f 64 65 53 65  |t%(3),UserModeSe|
00013ab0  74 25 28 34 29 2c 41 75  74 6f 5a 6f 6f 6d 2c 42  |t%(4),AutoZoom,B|
00013ac0  6c 61 63 6b 57 68 69 74  65 2c 47 49 46 53 63 61  |lackWhite,GIFSca|
00013ad0  6e 2c 42 6c 61 6e 6b 69  6e 67 2c 49 6e 76 65 72  |n,Blanking,Inver|
00013ae0  74 52 47 42 2c 5a 69 67  5a 61 67 2c 56 69 65 77  |tRGB,ZigZag,View|
00013af0  4d 6f 64 65 2c 4f 75 74  4d 6f 64 65 2c 4f 75 74  |Mode,OutMode,Out|
00013b00  50 61 6c 2c 50 65 72 63  65 6e 74 2c 47 61 6d 6d  |Pal,Percent,Gamm|
00013b10  61 46 2c 47 61 6d 6d 61  2c 42 6c 61 63 6b 46 2c  |aF,Gamma,BlackF,|
00013b20  42 6c 61 63 6b 0d 43 58  24 e8 23 53 74 61 74 75  |Black.CX$.#Statu|
00013b30  73 2c 52 61 6e 67 65 2c  53 61 6d 65 4c 65 61 66  |s,Range,SameLeaf|
00013b40  3a d9 23 53 74 61 74 75  73 0d 43 62 1f e7 45 72  |:.#Status.Cb..Er|
00013b50  72 53 70 72 65 61 64 3d  2d 31 20 8c 20 45 72 72  |rSpread=-1 . Err|
00013b60  53 70 72 65 61 64 3d 31  0d 43 6c 06 3d b9 0d 43  |Spread=1.Cl.=..C|
00013b70  76 05 20 0d 43 80 09 dd  a4 75 6d 73 0d 43 8a 37  |v. .C....ums.C.7|
00013b80  f4 20 52 65 74 75 72 6e  73 20 73 74 72 69 6e 67  |. Returns string|
00013b90  20 72 65 70 72 65 73 65  6e 74 69 6e 67 20 63 75  | representing cu|
00013ba0  72 72 65 6e 74 20 75 73  65 72 20 6d 6f 64 65 20  |rrent user mode |
00013bb0  73 65 74 0d 43 94 5c 3d  c3 28 55 73 65 72 4d 6f  |set.C.\=.(UserMo|
00013bc0  64 65 53 65 74 25 28 31  29 29 2b 22 2c 22 2b c3  |deSet%(1))+","+.|
00013bd0  28 55 73 65 72 4d 6f 64  65 53 65 74 25 28 32 29  |(UserModeSet%(2)|
00013be0  29 2b 22 2c 22 2b c3 28  55 73 65 72 4d 6f 64 65  |)+","+.(UserMode|
00013bf0  53 65 74 25 28 33 29 29  2b 22 2c 22 2b c3 28 55  |Set%(3))+","+.(U|
00013c00  73 65 72 4d 6f 64 65 53  65 74 25 28 34 29 29 0d  |serModeSet%(4)).|
00013c10  43 9e 05 20 0d 43 a8 1b  dd a4 61 76 61 69 6c 61  |C.. .C....availa|
00013c20  62 6c 65 5f 6d 6f 64 65  28 6d 6f 64 65 25 29 0d  |ble_mode(mode%).|
00013c30  43 b2 43 f4 20 43 68 65  63 6b 73 20 69 66 20 6d  |C.C. Checks if m|
00013c40  6f 64 65 25 20 69 73 20  61 20 76 61 6c 69 64 20  |ode% is a valid |
00013c50  57 49 4d 50 20 6d 6f 64  65 20 61 6e 64 20 61 76  |WIMP mode and av|
00013c60  61 69 6c 61 62 6c 65 20  6f 6e 20 6d 6f 6e 69 74  |ailable on monit|
00013c70  6f 72 0d 43 bc 30 e7 6d  6f 64 65 25 3d 33 20 84  |or.C.0.mode%=3 .|
00013c80  20 6d 6f 64 65 25 3d 36  20 84 20 6d 6f 64 65 25  | mode%=6 . mode%|
00013c90  3d 37 20 84 20 6d 6f 64  65 25 3d 32 33 20 8c 20  |=7 . mode%=23 . |
00013ca0  3d a3 0d 43 c6 1c e7 6d  6f 64 65 25 3c 30 20 84  |=..C...mode%<0 .|
00013cb0  20 6d 6f 64 65 25 3e 32  38 20 8c 20 3d a3 0d 43  | mode%>28 . =..C|
00013cc0  d0 2a e7 6d 6f 64 65 25  3d 32 34 20 84 20 6d 6f  |.*.mode%=24 . mo|
00013cd0  64 65 25 3c 31 38 20 8c  20 3d b9 20 8b 20 3d 4d  |de%<18 . =. . =M|
00013ce0  75 6c 74 69 53 79 6e 63  0d 43 da 05 20 0d 43 e4  |ultiSync.C.. .C.|
00013cf0  11 dd a4 61 6c 69 67 6e  28 76 61 6c 25 29 0d 43  |...align(val%).C|
00013d00  ee 30 f4 20 52 65 74 75  72 6e 73 20 6e 65 78 74  |.0. Returns next|
00013d10  2d 75 70 20 77 6f 72 64  20 61 6c 69 67 6e 65 64  |-up word aligned|
00013d20  20 76 61 6c 75 65 20 6f  66 20 76 61 6c 25 0d 43  | value of val%.C|
00013d30  f8 10 3d 28 76 61 6c 25  2b 33 29 80 ac 33 0d 44  |..=(val%+3)..3.D|
00013d40  02 05 20 0d 44 0c 16 dd  a4 72 65 61 64 70 61 6c  |.. .D....readpal|
00013d50  76 61 6c 28 72 67 62 25  29 0d 44 16 33 f4 20 52  |val(rgb%).D.3. R|
00013d60  65 74 75 72 6e 73 20 27  4f 53 5f 52 65 61 64 50  |eturns 'OS_ReadP|
00013d70  61 6c 65 74 74 65 27 20  77 6f 72 64 20 66 72 6f  |alette' word fro|
00013d80  6d 20 26 52 47 42 20 76  61 6c 75 65 0d 44 20 3f  |m &RGB value.D ?|
00013d90  3d 28 28 72 67 62 25 80  26 46 46 29 3c 3c 32 34  |=((rgb%.&FF)<<24|
00013da0  29 2b 28 28 72 67 62 25  80 26 46 46 30 30 29 3c  |)+((rgb%.&FF00)<|
00013db0  3c 38 29 2b 28 28 72 67  62 25 80 26 46 46 30 30  |<8)+((rgb%.&FF00|
00013dc0  30 30 29 3e 3e 38 29 2b  26 31 30 0d 44 2a 05 20  |00)>>8)+&10.D*. |
00013dd0  0d 44 34 13 dd a4 73 74  72 69 6e 67 28 61 64 64  |.D4...string(add|
00013de0  72 25 29 0d 44 3e 32 f4  20 52 65 74 75 72 6e 73  |r%).D>2. Returns|
00013df0  20 43 54 52 4c 2d 63 68  61 72 20 74 65 72 6d 69  | CTRL-char termi|
00013e00  6e 61 74 65 64 20 73 74  72 69 6e 67 20 61 74 20  |nated string at |
00013e10  61 64 64 72 25 0d 44 48  0f ea 20 5f 25 2c 5f 63  |addr%.DH.. _%,_c|
00013e20  25 2c 5f 24 0d 44 52 1f  5f 25 3d 2d 31 3a f5 20  |%,_$.DR._%=-1:. |
00013e30  5f 25 2b 3d 31 3a fd 20  61 64 64 72 25 3f 5f 25  |_%+=1:. addr%?_%|
00013e40  3c 33 32 0d 44 5c 33 5f  63 25 3d 61 64 64 72 25  |<32.D\3_c%=addr%|
00013e50  3f 5f 25 3a 61 64 64 72  25 3f 5f 25 3d 31 33 3a  |?_%:addr%?_%=13:|
00013e60  5f 24 3d 24 61 64 64 72  25 3a 61 64 64 72 25 3f  |_$=$addr%:addr%?|
00013e70  5f 25 3d 5f 63 25 0d 44  66 07 3d 5f 24 0d 44 70  |_%=_c%.Df.=_$.Dp|
00013e80  05 20 0d 44 7a 12 dd a4  75 70 73 74 72 69 6e 67  |. .Dz...upstring|
00013e90  28 6d 24 29 0d 44 84 1b  f4 20 52 65 74 75 72 6e  |(m$).D... Return|
00013ea0  73 20 75 70 70 65 72 20  63 61 73 65 20 6d 24 0d  |s upper case m$.|
00013eb0  44 8e 0e ea 20 63 25 2c  76 25 2c 75 24 0d 44 98  |D... c%,v%,u$.D.|
00013ec0  52 75 24 3d 6d 24 3a e3  20 63 25 3d 31 20 b8 20  |Ru$=m$:. c%=1 . |
00013ed0  a9 20 6d 24 3a 76 25 3d  97 c1 6d 24 2c 63 25 2c  |. m$:v%=..m$,c%,|
00013ee0  31 29 3a e7 28 76 25 3c  3d 97 22 7a 22 29 80 28  |1):.(v%<=."z").(|
00013ef0  76 25 3e 3d 97 22 61 22  29 20 8c 20 c1 75 24 2c  |v%>=."a") . .u$,|
00013f00  63 25 2c 31 29 3d bd 28  76 25 80 26 35 46 29 0d  |c%,1)=.(v%.&5F).|
00013f10  44 a2 09 ed 3a 3d 75 24  0d 44 ac 05 20 0d 44 b6  |D...:=u$.D.. .D.|
00013f20  1d dd f2 6d 6f 75 73 65  28 f8 20 78 25 2c f8 20  |...mouse(. x%,. |
00013f30  79 25 2c f8 20 62 75 74  25 29 0d 44 c0 2b f4 20  |y%,. but%).D.+. |
00013f40  52 65 74 75 72 6e 73 20  78 2c 79 20 61 6e 64 20  |Returns x,y and |
00013f50  62 75 74 74 6f 6e 20 73  74 61 74 65 20 6f 66 20  |button state of |
00013f60  6d 6f 75 73 65 0d 44 ca  11 c8 97 20 78 25 2c 79  |mouse.D.... x%,y|
00013f70  25 2c 62 75 74 25 0d 44  d4 05 e1 0d 44 de 05 20  |%,but%.D....D.. |
00013f80  0d 44 e8 0d dd a4 6c 6f  67 32 42 50 50 0d 44 f2  |.D....log2BPP.D.|
00013f90  26 f4 20 52 65 74 75 72  6e 73 20 4c 6f 67 32 42  |&. Returns Log2B|
00013fa0  50 50 20 66 6f 72 20 63  75 72 72 65 6e 74 20 6d  |PP for current m|
00013fb0  6f 64 65 0d 44 fc 13 3d  a4 6d 6f 64 65 5f 76 61  |ode.D..=.mode_va|
00013fc0  72 28 eb 2c 39 29 0d 45  06 04 0d 45 10 16 dd a4  |r(.,9).E...E....|
00013fd0  63 6f 6c 73 74 6f 62 70  70 28 63 6f 6c 73 25 29  |colstobpp(cols%)|
00013fe0  0d 45 1a 35 f4 20 52 65  74 75 72 6e 73 20 62 69  |.E.5. Returns bi|
00013ff0  74 73 20 70 65 72 20 70  69 78 65 6c 20 6e 65 65  |ts per pixel nee|
00014000  64 65 64 20 66 6f 72 20  63 6f 6c 73 25 20 63 6f  |ded for cols% co|
00014010  6c 6f 75 72 73 0d 45 24  28 e7 63 6f 6c 73 25 3c  |lours.E$(.cols%<|
00014020  3d 31 20 8c 20 3d 31 20  8b 20 3d a4 63 65 69 6c  |=1 . =1 . =.ceil|
00014030  28 ab 28 63 6f 6c 73 25  29 2f ab 32 29 0d 45 2e  |(.(cols%)/.2).E.|
00014040  05 20 0d 45 38 15 dd a4  76 64 75 5f 76 61 72 28  |. .E8...vdu_var(|
00014050  76 61 72 6e 72 25 29 0d  45 42 21 f4 20 52 65 74  |varnr%).EB!. Ret|
00014060  75 72 6e 73 20 56 44 55  20 76 61 72 69 61 62 6c  |urns VDU variabl|
00014070  65 20 76 61 72 6e 72 25  0d 45 4c 3b 21 61 72 67  |e varnr%.EL;!arg|
00014080  25 3d 76 61 72 6e 72 25  3a 61 72 67 25 21 34 3d  |%=varnr%:arg%!4=|
00014090  2d 31 3a c8 99 20 4f 53  52 65 61 64 56 56 25 2c  |-1:.. OSReadVV%,|
000140a0  61 72 67 25 2c 61 72 67  25 2b 38 3a 3d 61 72 67  |arg%,arg%+8:=arg|
000140b0  25 21 38 0d 45 56 05 20  0d 45 60 1c dd a4 6d 6f  |%!8.EV. .E`...mo|
000140c0  64 65 5f 76 61 72 28 6d  6f 64 65 25 2c 76 61 72  |de_var(mode%,var|
000140d0  6e 72 25 29 0d 45 6a 28  f4 20 52 65 74 75 72 6e  |nr%).Ej(. Return|
000140e0  73 20 6d 6f 64 65 20 6d  6f 64 65 25 20 76 61 72  |s mode mode% var|
000140f0  69 61 62 6c 65 20 76 61  72 6e 72 25 0d 45 74 0d  |iable varnr%.Et.|
00014100  ea 20 72 65 73 75 6c 74  25 0d 45 7e 32 c8 99 20  |. result%.E~2.. |
00014110  4f 53 52 65 61 64 4d 56  25 2c 6d 6f 64 65 25 2c  |OSReadMV%,mode%,|
00014120  76 61 72 6e 72 25 20 b8  20 2c 2c 72 65 73 75 6c  |varnr% . ,,resul|
00014130  74 25 3a 3d 72 65 73 75  6c 74 25 0d 45 88 05 20  |t%:=result%.E.. |
00014140  0d 45 92 10 dd a4 4f 53  5f 76 61 72 28 5f 24 29  |.E....OS_var(_$)|
00014150  0d 45 9c 2e f4 20 41 74  74 65 6d 70 74 73 20 74  |.E... Attempts t|
00014160  6f 20 72 65 74 75 72 6e  20 4f 53 2d 76 61 72 27  |o return OS-var'|
00014170  73 20 73 74 72 69 6e 67  20 76 61 6c 75 65 0d 45  |s string value.E|
00014180  a6 0d ea 20 5f 72 24 2c  5f 6c 25 0d 45 b0 37 c8  |... _r$,_l%.E.7.|
00014190  99 20 22 58 4f 53 5f 52  65 61 64 56 61 72 56 61  |. "XOS_ReadVarVa|
000141a0  6c 22 2c 5f 24 2c c4 31  30 30 2c 22 20 22 29 2c  |l",_$,.100," "),|
000141b0  31 30 30 2c 30 2c 33 20  b8 20 2c 5f 72 24 2c 5f  |100,0,3 . ,_r$,_|
000141c0  6c 25 0d 45 ba 16 5f 72  24 3d c0 5f 72 24 2c 5f  |l%.E.._r$=._r$,_|
000141d0  6c 25 29 3a 3d 5f 72 24  0d 45 c4 05 20 0d 45 ce  |l%):=_r$.E.. .E.|
000141e0  15 dd a4 73 77 69 5f 74  6f 5f 6e 72 28 73 77 69  |...swi_to_nr(swi|
000141f0  24 29 0d 45 d8 29 f4 20  52 65 74 75 72 6e 73 20  |$).E.). Returns |
00014200  53 57 49 20 6e 75 6d 62  65 72 20 6f 66 20 53 57  |SWI number of SW|
00014210  49 20 63 61 6c 6c 20 73  77 69 24 0d 45 e2 0c ea  |I call swi$.E...|
00014220  20 73 77 69 6e 72 25 0d  45 ec 2f c8 99 20 22 58  | swinr%.E./.. "X|
00014230  4f 53 5f 53 57 49 4e 75  6d 62 65 72 46 72 6f 6d  |OS_SWINumberFrom|
00014240  53 74 72 69 6e 67 22 2c  2c 73 77 69 24 20 b8 20  |String",,swi$ . |
00014250  73 77 69 6e 72 25 0d 45  f6 0b 3d 73 77 69 6e 72  |swinr%.E..=swinr|
00014260  25 0d 46 00 05 20 0d 46  0a 1a dd f2 65 72 72 6f  |%.F.. .F....erro|
00014270  72 28 65 72 72 6e 72 2c  65 72 72 6d 73 67 24 29  |r(errnr,errmsg$)|
00014280  0d 46 14 14 f4 20 48 61  6e 64 6c 65 73 20 65 72  |.F... Handles er|
00014290  72 6f 72 73 0d 46 1e 0f  ea 20 62 75 74 25 2c 6f  |rors.F... but%,o|
000142a0  70 74 25 0d 46 28 39 c8  99 20 22 54 72 61 6e 73  |pt%.F(9.. "Trans|
000142b0  6c 61 74 6f 72 5f 56 69  64 65 6f 44 4d 41 22 2c  |lator_VideoDMA",|
000142c0  31 3a f4 20 45 6e 73 75  72 65 20 76 69 64 65 6f  |1:. Ensure video|
000142d0  20 44 4d 41 20 65 6e 61  62 6c 65 64 0d 46 32 27  | DMA enabled.F2'|
000142e0  e7 65 72 72 6e 72 3d 2d  31 20 8c 20 65 72 72 6e  |.errnr=-1 . errn|
000142f0  72 3d 31 3a 6f 70 74 25  3d 31 20 8b 20 6f 70 74  |r=1:opt%=1 . opt|
00014300  25 3d 33 0d 46 3c 1f 21  65 72 72 3d 65 72 72 6e  |%=3.F<.!err=errn|
00014310  72 3a 24 28 65 72 72 2b  34 29 3d 65 72 72 6d 73  |r:$(err+4)=errms|
00014320  67 24 0d 46 46 44 c8 99  20 22 54 72 61 6e 73 6c  |g$.FFD.. "Transl|
00014330  61 74 6f 72 5f 50 61 6c  65 74 74 65 22 2c 32 5e  |ator_Palette",2^|
00014340  a4 6c 6f 67 32 42 50 50  2c 64 75 6d 25 2c 31 3a  |.log2BPP,dum%,1:|
00014350  f4 20 52 65 61 64 20 63  75 72 72 65 6e 74 20 70  |. Read current p|
00014360  61 6c 65 74 74 65 0d 46  50 29 f2 73 65 74 5f 70  |alette.FP).set_p|
00014370  61 6c 65 74 74 65 28 30  29 3a f4 20 53 65 6c 65  |alette(0):. Sele|
00014380  63 74 20 57 49 4d 50 20  70 61 6c 65 74 74 65 0d  |ct WIMP palette.|
00014390  46 5a 2a c8 99 20 57 52  65 70 6f 72 74 25 2c 65  |FZ*.. WReport%,e|
000143a0  72 72 2c 6f 70 74 25 2c  61 70 70 6c 6e 61 6d 65  |rr,opt%,applname|
000143b0  24 20 b8 20 2c 62 75 74  25 0d 46 64 13 e7 62 75  |$ . ,but%.Fd..bu|
000143c0  74 25 3c 3e 31 20 8c 20  f2 64 69 65 0d 46 6e 42  |t%<>1 . .die.FnB|
000143d0  c8 99 20 22 54 72 61 6e  73 6c 61 74 6f 72 5f 53  |.. "Translator_S|
000143e0  65 74 50 61 6c 65 74 74  65 22 2c 32 5e 28 32 5e  |etPalette",2^(2^|
000143f0  a4 6c 6f 67 32 42 50 50  29 2c 64 75 6d 25 3a f4  |.log2BPP),dum%:.|
00014400  20 52 65 73 65 74 20 70  61 6c 65 74 74 65 0d 46  | Reset palette.F|
00014410  78 05 e1 0d 46 82 05 20  0d 46 8c 0a dd a4 73 70  |x...F.. .F....sp|
00014420  72 57 0d 46 96 3f f4 20  52 65 74 75 72 6e 73 20  |rW.F.?. Returns |
00014430  69 6d 61 67 65 20 73 70  72 69 74 65 27 73 20 77  |image sprite's w|
00014440  69 64 74 68 20 69 6e 20  4f 53 20 70 69 78 65 6c  |idth in OS pixel|
00014450  73 20 69 6e 20 63 75 72  72 65 6e 74 20 6d 6f 64  |s in current mod|
00014460  65 0d 46 a0 11 3d 53 70  72 57 25 2a 58 73 74 65  |e.F..=SprW%*Xste|
00014470  70 25 0d 46 aa 05 20 0d  46 b4 0a dd a4 73 70 72  |p%.F.. .F....spr|
00014480  48 0d 46 be 40 f4 20 52  65 74 75 72 6e 73 20 69  |H.F.@. Returns i|
00014490  6d 61 67 65 20 73 70 72  69 74 65 27 73 20 68 65  |mage sprite's he|
000144a0  69 67 68 74 20 69 6e 20  4f 53 20 70 69 78 65 6c  |ight in OS pixel|
000144b0  73 20 69 6e 20 63 75 72  72 65 6e 74 20 6d 6f 64  |s in current mod|
000144c0  65 0d 46 c8 11 3d 53 70  72 48 25 2a 59 73 74 65  |e.F..=SprH%*Yste|
000144d0  70 25 0d 46 d2 05 20 0d  46 dc 12 dd a4 6d 61 78  |p%.F.. .F....max|
000144e0  28 76 31 25 2c 76 32 25  29 0d 46 e6 24 f4 20 52  |(v1%,v2%).F.$. R|
000144f0  65 74 75 72 6e 73 20 6d  61 78 69 6d 75 6d 20 6f  |eturns maximum o|
00014500  66 20 76 31 25 20 61 6e  64 20 76 32 25 0d 46 f0  |f v1% and v2%.F.|
00014510  1a e7 76 31 25 3e 76 32  25 20 8c 20 3d 76 31 25  |..v1%>v2% . =v1%|
00014520  20 8b 20 3d 76 32 25 0d  46 fa 05 20 0d 47 04 12  | . =v2%.F.. .G..|
00014530  dd a4 6d 69 6e 28 76 31  25 2c 76 32 25 29 0d 47  |..min(v1%,v2%).G|
00014540  0e 24 f4 20 52 65 74 75  72 6e 73 20 6d 69 6e 69  |.$. Returns mini|
00014550  6d 75 6d 20 6f 66 20 76  31 25 20 61 6e 64 20 76  |mum of v1% and v|
00014560  32 25 0d 47 18 1a e7 76  31 25 3c 76 32 25 20 8c  |2%.G...v1%<v2% .|
00014570  20 3d 76 31 25 20 8b 20  3d 76 32 25 0d 47 22 05  | =v1% . =v2%.G".|
00014580  20 0d 47 2c 0d dd a4 63  65 69 6c 28 76 29 0d 47  | .G,...ceil(v).G|
00014590  36 30 f4 20 52 65 74 75  72 6e 73 20 27 63 65 69  |60. Returns 'cei|
000145a0  6c 69 6e 67 27 20 6f 66  20 76 61 6c 75 65 20 28  |ling' of value (|
000145b0  69 2e 65 2e 20 72 6f 75  6e 64 20 75 70 29 0d 47  |i.e. round up).G|
000145c0  40 16 e7 76 3d a8 76 20  8c 20 3d 76 20 8b 20 3d  |@..v=.v . =v . =|
000145d0  a8 76 2b 31 0d 47 4a 05  20 0d 47 54 09 dd f2 64  |.v+1.GJ. .GT...d|
000145e0  69 65 0d 47 5e 19 f4 20  54 69 64 69 65 73 20 75  |ie.G^.. Tidies u|
000145f0  70 20 61 6e 64 20 65 78  69 74 73 0d 47 68 15 f2  |p and exits.Gh..|
00014600  66 69 6e 69 73 68 3a f4  20 54 69 64 79 20 75 70  |finish:. Tidy up|
00014610  0d 47 72 10 c8 99 20 22  4f 53 5f 45 78 69 74 22  |.Gr... "OS_Exit"|
00014620  0d 47 7c 05 e1 0d 47 86  05 20 0d 47 90 0c dd f2  |.G|...G.. .G....|
00014630  66 69 6e 69 73 68 0d 47  9a 0f f4 20 54 69 64 69  |finish.G... Tidi|
00014640  65 73 20 75 70 0d 47 a4  7d c8 99 20 22 54 72 61  |es up.G.}.. "Tra|
00014650  6e 73 6c 61 74 6f 72 5f  54 61 73 6b 51 75 69 74  |nslator_TaskQuit|
00014660  22 20 b8 20 74 61 73 6b  73 25 3a e7 74 61 73 6b  |" . tasks%:.task|
00014670  73 25 3c 3d 30 20 8c 20  c8 99 20 22 4f 53 5f 4d  |s%<=0 . .. "OS_M|
00014680  6f 64 75 6c 65 22 2c 34  2c 22 54 72 61 6e 73 6c  |odule",4,"Transl|
00014690  61 74 6f 72 22 3a f4 20  4b 69 6c 6c 20 6d 6f 64  |ator":. Kill mod|
000146a0  75 6c 65 20 69 66 20 6e  6f 20 6f 74 68 65 72 20  |ule if no other |
000146b0  74 61 73 6b 73 20 61 72  65 20 75 73 69 6e 67 20  |tasks are using |
000146c0  69 74 0d 47 ae 26 c8 99  20 57 53 65 74 50 25 2c  |it.G.&.. WSetP%,|
000146d0  2c 77 69 6d 70 70 61 6c  3a f4 20 52 65 73 65 74  |,wimppal:. Reset|
000146e0  20 70 61 6c 65 74 74 65  0d 47 b8 2d c8 99 20 22  | palette.G.-.. "|
000146f0  57 69 6d 70 5f 43 6c 6f  73 65 44 6f 77 6e 22 2c  |Wimp_CloseDown",|
00014700  54 61 73 6b 48 61 6e 64  6c 65 25 2c 26 34 42 35  |TaskHandle%,&4B5|
00014710  33 34 31 35 34 0d 47 c2  05 e1 0d 47 cc 05 20 0d  |34154.G....G.. .|
00014720  47 d6 23 dd a4 6d 6f 64  65 28 77 69 64 74 68 25  |G.#..mode(width%|
00014730  2c 68 65 69 67 68 74 25  2c 63 6f 6c 6f 75 72 73  |,height%,colours|
00014740  25 29 0d 47 e0 4c f4 20  52 65 74 75 72 6e 73 2c  |%).G.L. Returns,|
00014750  20 69 66 20 70 6f 73 73  69 62 6c 65 2c 20 61 20  | if possible, a |
00014760  73 74 61 6e 64 61 72 64  20 73 63 72 65 65 6e 20  |standard screen |
00014770  6d 6f 64 65 20 74 68 61  74 20 69 73 20 6d 6f 73  |mode that is mos|
00014780  74 20 73 75 69 74 61 62  6c 65 20 66 6f 72 0d 47  |t suitable for.G|
00014790  ea 4b f4 20 64 69 73 70  6c 61 79 69 6e 67 20 61  |.K. displaying a|
000147a0  20 70 69 63 74 75 72 65  20 6f 66 20 28 77 69 64  | picture of (wid|
000147b0  74 68 25 29 78 28 68 65  69 67 68 74 25 29 20 70  |th%)x(height%) p|
000147c0  69 78 65 6c 73 20 69 6e  20 63 6f 6c 6f 75 72 73  |ixels in colours|
000147d0  25 20 63 6f 6c 6f 75 72  73 0d 47 f4 36 f4 20 52  |% colours.G.6. R|
000147e0  65 74 75 72 6e 73 20 2d  31 20 69 66 20 6e 75 6d  |eturns -1 if num|
000147f0  62 65 72 20 6f 66 20 63  6f 6c 6f 75 72 73 20 67  |ber of colours g|
00014800  72 65 61 74 65 72 20 74  68 61 6e 20 32 35 36 0d  |reater than 256.|
00014810  47 fe 29 ea 20 61 72 63  63 6f 6c 73 25 2c 61 72  |G.). arccols%,ar|
00014820  63 77 69 64 74 68 25 2c  61 72 63 68 65 69 67 68  |cwidth%,archeigh|
00014830  74 25 2c 6d 6f 64 65 25  0d 48 08 13 e7 4f 75 74  |t%,mode%.H...Out|
00014840  4d 6f 64 65 3d 32 20 8c  20 3d eb 0d 48 12 2f f4  |Mode=2 . =..H./.|
00014850  20 52 61 6e 67 65 20 63  68 65 63 6b 20 66 6f 72  | Range check for|
00014860  20 63 6f 6c 6f 75 72 73  2c 20 77 69 64 74 68 20  | colours, width |
00014870  61 6e 64 20 68 65 69 67  68 74 0d 48 1c 26 e7 63  |and height.H.&.c|
00014880  6f 6c 6f 75 72 73 25 3e  32 35 36 20 8c 20 3d 2d  |olours%>256 . =-|
00014890  31 3a f4 20 49 6d 70 6f  73 73 69 62 6c 65 20 21  |1:. Impossible !|
000148a0  0d 48 26 2c f4 20 44 65  74 65 72 6d 69 6e 65 20  |.H&,. Determine |
000148b0  63 6c 6f 73 65 73 74 20  63 6f 6c 6f 75 72 73 2f  |closest colours/|
000148c0  77 69 64 74 68 2f 68 65  69 67 68 74 0d 48 30 63  |width/height.H0c|
000148d0  e7 63 6f 6c 6f 75 72 73  25 3e 31 36 20 8c 20 61  |.colours%>16 . a|
000148e0  72 63 63 6f 6c 73 25 3d  32 35 36 20 8b 20 e7 63  |rccols%=256 . .c|
000148f0  6f 6c 6f 75 72 73 25 3e  34 20 8c 20 61 72 63 63  |olours%>4 . arcc|
00014900  6f 6c 73 25 3d 31 36 20  8b 20 e7 63 6f 6c 6f 75  |ols%=16 . .colou|
00014910  72 73 25 3e 32 20 8c 20  61 72 63 63 6f 6c 73 25  |rs%>2 . arccols%|
00014920  3d 34 20 8b 20 61 72 63  63 6f 6c 73 25 3d 32 0d  |=4 . arccols%=2.|
00014930  48 3a 4e e7 77 69 64 74  68 25 3e 36 34 30 20 8c  |H:N.width%>640 .|
00014940  20 61 72 63 77 69 64 74  68 25 3d 31 30 35 36 20  | arcwidth%=1056 |
00014950  8b 20 e7 77 69 64 74 68  25 3e 33 32 30 20 8c 20  |. .width%>320 . |
00014960  61 72 63 77 69 64 74 68  25 3d 36 34 30 20 8b 20  |arcwidth%=640 . |
00014970  61 72 63 77 69 64 74 68  25 3d 33 32 30 0d 48 44  |arcwidth%=320.HD|
00014980  33 e7 68 65 69 67 68 74  25 3c 3d 32 35 36 20 8c  |3.height%<=256 .|
00014990  20 61 72 63 68 65 69 67  68 74 25 3d 32 35 36 20  | archeight%=256 |
000149a0  8b 20 61 72 63 68 65 69  67 68 74 25 3d 35 31 32  |. archeight%=512|
000149b0  0d 48 4e 11 c8 8e 20 61  72 63 63 6f 6c 73 25 20  |.HN... arccols% |
000149c0  ca 0d 48 58 2f 20 c9 20  32 20 3a 20 e7 61 72 63  |..HX/ . 2 : .arc|
000149d0  68 65 69 67 68 74 25 3d  35 31 32 20 8c 20 6d 6f  |height%=512 . mo|
000149e0  64 65 25 3d 31 38 20 8b  20 6d 6f 64 65 25 3d 30  |de%=18 . mode%=0|
000149f0  0d 48 62 4b 20 c9 20 34  20 3a 20 e7 61 72 63 68  |.HbK . 4 : .arch|
00014a00  65 69 67 68 74 25 3d 35  31 32 20 8c 20 6d 6f 64  |eight%=512 . mod|
00014a10  65 25 3d 31 39 20 8b 20  e7 61 72 63 77 69 64 74  |e%=19 . .arcwidt|
00014a20  68 25 3c 3d 33 32 30 20  8c 20 6d 6f 64 65 25 3d  |h%<=320 . mode%=|
00014a30  31 20 8b 20 6d 6f 64 65  25 3d 38 0d 48 6c 69 20  |1 . mode%=8.Hli |
00014a40  c9 20 31 36 20 3a 20 e7  61 72 63 68 65 69 67 68  |. 16 : .archeigh|
00014a50  74 25 3d 35 31 32 20 8c  20 6d 6f 64 65 25 3d 32  |t%=512 . mode%=2|
00014a60  30 20 8b 20 e7 61 72 63  77 69 64 74 68 25 3c 3d  |0 . .arcwidth%<=|
00014a70  33 32 30 20 8c 20 6d 6f  64 65 25 3d 39 20 8b 20  |320 . mode%=9 . |
00014a80  e7 61 72 63 77 69 64 74  68 25 3d 36 34 30 20 8c  |.arcwidth%=640 .|
00014a90  20 6d 6f 64 65 25 3d 31  32 20 8b 20 6d 6f 64 65  | mode%=12 . mode|
00014aa0  25 3d 31 36 0d 48 76 86  20 c9 20 32 35 36 20 3a  |%=16.Hv. . 256 :|
00014ab0  20 e7 61 72 63 68 65 69  67 68 74 25 3d 35 31 32  | .archeight%=512|
00014ac0  20 8c 20 6d 6f 64 65 25  3d 32 31 20 8b 20 e7 61  | . mode%=21 . .a|
00014ad0  72 63 77 69 64 74 68 25  3d 31 36 30 20 8c 20 6d  |rcwidth%=160 . m|
00014ae0  6f 64 65 25 3d 31 30 20  8b 20 e7 61 72 63 77 69  |ode%=10 . .arcwi|
00014af0  64 74 68 25 3d 33 32 30  20 8c 20 6d 6f 64 65 25  |dth%=320 . mode%|
00014b00  3d 31 33 20 8b 20 e7 61  72 63 77 69 64 74 68 25  |=13 . .arcwidth%|
00014b10  3d 36 34 30 20 8c 20 6d  6f 64 65 25 3d 31 35 20  |=640 . mode%=15 |
00014b20  8b 20 6d 6f 64 65 25 3d  32 34 0d 48 80 05 cb 0d  |. mode%=24.H....|
00014b30  48 8a 0a 3d 6d 6f 64 65  25 0d 48 94 05 20 0d 48  |H..=mode%.H.. .H|
00014b40  9e 13 dd a4 74 69 6d 65  73 28 76 61 6c 75 65 25  |....times(value%|
00014b50  29 0d 48 a8 30 f4 20 52  65 74 75 72 6e 73 20 53  |).H.0. Returns S|
00014b60  54 52 24 76 61 6c 75 65  25 20 77 69 74 68 20 27  |TR$value% with '|
00014b70  70 6c 75 72 61 6c 20 65  78 74 65 6e 73 69 6f 6e  |plural extension|
00014b80  27 0d 48 b2 09 ea 20 5f  64 25 0d 48 bc 33 5f 64  |'.H... _d%.H.3_d|
00014b90  25 3d 76 61 6c 75 65 25  83 31 30 3a f4 20 4c 61  |%=value%.10:. La|
00014ba0  73 74 20 64 69 67 69 74  20 64 65 74 65 72 6d 69  |st digit determi|
00014bb0  6e 65 73 20 65 78 74 65  6e 73 69 6f 6e 0d 48 c6  |nes extension.H.|
00014bc0  3a e7 28 28 28 76 61 6c  75 65 25 83 31 30 30 29  |:.(((value%.100)|
00014bd0  81 31 30 29 3d 31 29 84  28 5f 64 25 3e 33 29 84  |.10)=1).(_d%>3).|
00014be0  28 5f 64 25 3d 30 29 20  8c 20 3d c3 76 61 6c 75  |(_d%=0) . =.valu|
00014bf0  65 25 2b 22 74 68 22 0d  48 d0 0c c8 8e 20 5f 64  |e%+"th".H.... _d|
00014c00  25 20 ca 0d 48 da 18 20  c9 20 31 20 3a 20 3d c3  |% ..H.. . 1 : =.|
00014c10  76 61 6c 75 65 25 2b 22  73 74 22 0d 48 e4 18 20  |value%+"st".H.. |
00014c20  c9 20 32 20 3a 20 3d c3  76 61 6c 75 65 25 2b 22  |. 2 : =.value%+"|
00014c30  6e 64 22 0d 48 ee 18 20  c9 20 33 20 3a 20 3d c3  |nd".H.. . 3 : =.|
00014c40  76 61 6c 75 65 25 2b 22  72 64 22 0d 48 f8 05 cb  |value%+"rd".H...|
00014c50  0d 49 02 04 0d 49 0c 35  dd f2 72 65 61 64 32 34  |.I...I.5..read24|
00014c60  70 61 6c 28 66 68 25 2c  f8 20 50 61 6c 25 28 29  |pal(fh%,. Pal%()|
00014c70  2c 63 6f 6c 73 25 2c 72  6f 25 2c 67 6f 25 2c 62  |,cols%,ro%,go%,b|
00014c80  6f 25 2c 65 6c 65 6e 25  29 0d 49 16 2a f4 20 52  |o%,elen%).I.*. R|
00014c90  65 61 64 73 20 32 34 2d  62 69 74 20 70 61 6c 65  |eads 24-bit pale|
00014ca0  74 74 65 20 66 72 6f 6d  20 69 6e 70 75 74 20 66  |tte from input f|
00014cb0  69 6c 65 0d 49 20 40 f4  20 45 6e 74 72 69 65 73  |ile.I @. Entries|
00014cc0  20 61 72 65 20 63 6f 6c  73 25 2a 65 6c 65 6e 25  | are cols%*elen%|
00014cd0  2d 62 79 74 65 2c 20 52  2c 47 2c 42 20 61 74 20  |-byte, R,G,B at |
00014ce0  72 30 25 2f 67 6f 25 2f  62 6f 25 20 6f 66 66 73  |r0%/go%/bo% offs|
00014cf0  65 74 73 0d 49 2a 0e ea  20 70 25 2c 63 25 2c 6d  |ets.I*.. p%,c%,m|
00014d00  25 0d 49 34 3d c8 99 20  22 4f 53 5f 47 42 50 42  |%.I4=.. "OS_GBPB|
00014d10  22 2c 34 2c 66 68 25 2c  64 75 6d 25 2c 63 6f 6c  |",4,fh%,dum%,col|
00014d20  73 25 2a 65 6c 65 6e 25  3a f4 20 52 65 61 64 20  |s%*elen%:. Read |
00014d30  65 6e 74 69 72 65 20 70  61 6c 65 74 74 65 0d 49  |entire palette.I|
00014d40  3e 15 70 25 3d 64 75 6d  25 3a f4 20 50 6f 69 6e  |>.p%=dum%:. Poin|
00014d50  74 65 72 0d 49 48 47 e3  20 63 25 3d 31 20 b8 20  |ter.IHG. c%=1 . |
00014d60  63 6f 6c 73 25 3a 50 61  6c 25 28 63 25 29 3d 70  |cols%:Pal%(c%)=p|
00014d70  25 3f 72 6f 25 3c 3c 31  36 20 84 20 70 25 3f 67  |%?ro%<<16 . p%?g|
00014d80  6f 25 3c 3c 38 20 84 20  70 25 3f 62 6f 25 3a 70  |o%<<8 . p%?bo%:p|
00014d90  25 2b 3d 65 6c 65 6e 25  3a ed 0d 49 52 05 e1 0d  |%+=elen%:..IR...|
00014da0  49 5c 05 20 0d 49 66 17  dd a4 69 73 74 72 69 6e  |I\. .If...istrin|
00014db0  67 28 66 68 25 2c 6c 65  6e 25 29 0d 49 70 21 f4  |g(fh%,len%).Ip!.|
00014dc0  20 52 65 74 75 72 6e 73  20 73 74 72 69 6e 67 20  | Returns string |
00014dd0  6f 66 20 66 72 6f 6d 20  66 69 6c 65 0d 49 7a 30  |of from file.Iz0|
00014de0  f4 20 49 66 20 6c 65 6e  25 3e 30 20 74 68 65 20  |. If len%>0 the |
00014df0  6e 75 6d 62 65 72 20 6f  66 20 63 68 61 72 61 63  |number of charac|
00014e00  74 65 72 73 20 69 73 20  6c 65 6e 25 0d 49 84 38  |ters is len%.I.8|
00014e10  f4 20 49 66 20 6c 65 6e  25 3d 2d 31 20 74 68 65  |. If len%=-1 the|
00014e20  20 73 74 72 69 6e 67 20  69 73 20 43 54 52 4c 2d  | string is CTRL-|
00014e30  63 68 61 72 61 63 74 65  72 20 74 65 72 6d 69 6e  |character termin|
00014e40  61 74 65 64 0d 49 8e 0e  ea 20 5f 25 2c 72 24 2c  |ated.I... _%,r$,|
00014e50  63 25 0d 49 98 6f 5f 24  3d 22 22 3a e7 6c 65 6e  |c%.I.o_$="":.len|
00014e60  25 3e 30 20 8c 20 e3 20  5f 25 3d 31 20 b8 20 6c  |%>0 . . _%=1 . l|
00014e70  65 6e 25 3a 72 24 2b 3d  bd a4 69 62 66 28 66 68  |en%:r$+=..ibf(fh|
00014e80  25 29 3a ed 20 8b 20 e7  6c 65 6e 25 3d 2d 31 20  |%):. . .len%=-1 |
00014e90  8c 20 63 25 3d a4 69 62  66 28 66 68 25 29 3a c8  |. c%=.ibf(fh%):.|
00014ea0  95 20 63 25 3e 3d 97 22  20 22 3a 72 24 2b 3d bd  |. c%>=." ":r$+=.|
00014eb0  63 25 3a 63 25 3d a4 69  62 66 28 66 68 25 29 3a  |c%:c%=.ibf(fh%):|
00014ec0  ce 0d 49 a2 07 3d 72 24  0d 49 ac 05 20 0d 49 b6  |..I..=r$.I.. .I.|
00014ed0  18 dd f2 69 73 6b 69 70  28 66 68 25 2c 61 6d 6f  |...iskip(fh%,amo|
00014ee0  75 6e 74 25 29 0d 49 c0  21 f4 20 53 6b 69 70 73  |unt%).I.!. Skips|
00014ef0  20 61 6d 6f 75 6e 74 25  20 62 79 74 65 73 20 69  | amount% bytes i|
00014f00  6e 20 66 69 6c 65 0d 49  ca 17 cf 23 66 68 25 3d  |n file.I...#fh%=|
00014f10  61 6d 6f 75 6e 74 25 2b  8f 23 66 68 25 0d 49 d4  |amount%+.#fh%.I.|
00014f20  05 e1 0d 49 de 05 20 0d  49 e8 17 dd f2 69 70 74  |...I.. .I....ipt|
00014f30  72 28 66 68 25 2c 6e 65  77 70 74 72 25 29 0d 49  |r(fh%,newptr%).I|
00014f40  f2 1d f4 20 53 65 74 73  20 6e 65 77 20 6f 66 66  |... Sets new off|
00014f50  73 65 74 20 69 6e 20 66  69 6c 65 0d 49 fc 11 cf  |set in file.I...|
00014f60  23 66 68 25 3d 6e 65 77  70 74 72 25 0d 4a 06 05  |#fh%=newptr%.J..|
00014f70  e1 0d 4a 10 05 20 0d 4a  1a 0f dd a4 69 70 74 72  |..J.. .J....iptr|
00014f80  28 66 68 25 29 0d 4a 24  24 f4 20 52 65 74 75 72  |(fh%).J$$. Retur|
00014f90  6e 73 20 63 75 72 72 65  6e 74 20 6f 66 66 73 65  |ns current offse|
00014fa0  74 20 69 6e 20 66 69 6c  65 0d 4a 2e 0a 3d 8f 23  |t in file.J..=.#|
00014fb0  66 68 25 0d 4a 38 05 20  0d 4a 42 0f dd a4 69 6c  |fh%.J8. .JB...il|
00014fc0  65 6e 28 66 68 25 29 0d  4a 4c 1c f4 20 52 65 74  |en(fh%).JL.. Ret|
00014fd0  75 72 6e 73 20 6c 65 6e  67 74 68 20 6f 66 20 66  |urns length of f|
00014fe0  69 6c 65 0d 4a 56 0a 3d  a2 23 66 68 25 0d 4a 60  |ile.JV.=.#fh%.J`|
00014ff0  05 20 0d 4a 6a 0f dd a4  69 65 6f 66 28 66 68 25  |. .Jj...ieof(fh%|
00015000  29 0d 4a 74 28 f4 20 52  65 74 75 72 6e 73 20 65  |).Jt(. Returns e|
00015010  6e 64 2d 6f 66 2d 66 69  6c 65 20 73 74 61 74 75  |nd-of-file statu|
00015020  73 20 6f 66 20 66 69 6c  65 0d 4a 7e 0a 3d c5 23  |s of file.J~.=.#|
00015030  66 68 25 0d 4a 88 05 20  0d 4a 92 0c dd f2 69 63  |fh%.J.. .J....ic|
00015040  6c 6f 73 65 0d 4a 9c 1c  f4 20 43 6c 6f 73 65 73  |lose.J... Closes|
00015050  20 61 6c 6c 20 69 6e 70  75 74 20 66 69 6c 65 73  | all input files|
00015060  0d 4a a6 27 e7 46 31 25  3c 3e 30 20 8c 20 c8 99  |.J.'.F1%<>0 . ..|
00015070  20 22 58 4f 53 5f 46 69  6e 64 22 2c 30 2c 46 31  | "XOS_Find",0,F1|
00015080  25 3a 46 31 25 3d 30 0d  4a b0 27 e7 46 32 25 3c  |%:F1%=0.J.'.F2%<|
00015090  3e 30 20 8c 20 c8 99 20  22 58 4f 53 5f 46 69 6e  |>0 . .. "XOS_Fin|
000150a0  64 22 2c 30 2c 46 32 25  3a 46 32 25 3d 30 0d 4a  |d",0,F2%:F2%=0.J|
000150b0  ba 05 e1 0d 4a c4 05 20  0d 4a ce 1c dd f2 69 67  |....J.. .J....ig|
000150c0  65 74 28 66 68 25 2c 61  64 72 25 2c 61 6d 6f 75  |et(fh%,adr%,amou|
000150d0  6e 74 25 29 0d 4a d8 2d  f4 20 52 65 74 75 72 6e  |nt%).J.-. Return|
000150e0  73 20 61 6d 6f 75 6e 74  25 20 62 79 74 65 73 20  |s amount% bytes |
000150f0  61 74 20 61 64 72 25 20  66 72 6f 6d 20 66 69 6c  |at adr% from fil|
00015100  65 0d 4a e2 23 c8 99 20  22 4f 53 5f 47 42 50 42  |e.J.#.. "OS_GBPB|
00015110  22 2c 34 2c 66 68 25 2c  61 64 72 25 2c 61 6d 6f  |",4,fh%,adr%,amo|
00015120  75 6e 74 25 0d 4a ec 05  e1 0d 4a f6 04 0d 4b 00  |unt%.J....J...K.|
00015130  0f dd a4 69 62 3a 3d 9a  23 46 31 25 0d 4b 0a 1b  |...ib:=.#F1%.K..|
00015140  dd a4 69 64 62 3a 3d 9a  23 46 31 25 3c 3c 38 20  |..idb:=.#F1%<<8 |
00015150  84 20 9a 23 46 31 25 0d  4b 14 27 dd a4 69 74 62  |. .#F1%.K.'..itb|
00015160  3a 3d 9a 23 46 31 25 3c  3c 31 36 20 84 20 9a 23  |:=.#F1%<<16 . .#|
00015170  46 31 25 3c 3c 38 20 84  20 9a 23 46 31 25 0d 4b  |F1%<<8 . .#F1%.K|
00015180  1e 33 dd a4 69 77 62 3a  3d 9a 23 46 31 25 3c 3c  |.3..iwb:=.#F1%<<|
00015190  32 34 20 84 20 9a 23 46  31 25 3c 3c 31 36 20 84  |24 . .#F1%<<16 .|
000151a0  20 9a 23 46 31 25 3c 3c  38 20 84 20 9a 23 46 31  | .#F1%<<8 . .#F1|
000151b0  25 0d 4b 28 1b dd a4 69  64 6c 3a 3d 9a 23 46 31  |%.K(...idl:=.#F1|
000151c0  25 20 84 20 9a 23 46 31  25 3c 3c 38 0d 4b 32 27  |% . .#F1%<<8.K2'|
000151d0  dd a4 69 74 6c 3a 3d 9a  23 46 31 25 20 84 20 9a  |..itl:=.#F1% . .|
000151e0  23 46 31 25 3c 3c 38 20  84 20 9a 23 46 31 25 3c  |#F1%<<8 . .#F1%<|
000151f0  3c 31 36 0d 4b 3c 33 dd  a4 69 77 6c 3a 3d 9a 23  |<16.K<3..iwl:=.#|
00015200  46 31 25 20 84 20 9a 23  46 31 25 3c 3c 38 20 84  |F1% . .#F1%<<8 .|
00015210  20 9a 23 46 31 25 3c 3c  31 36 20 84 20 9a 23 46  | .#F1%<<16 . .#F|
00015220  31 25 3c 3c 32 34 0d 4b  46 15 dd a4 69 62 66 28  |1%<<24.KF...ibf(|
00015230  66 68 25 29 3a 3d 9a 23  66 68 25 0d 4b 50 39 dd  |fh%):=.#fh%.KP9.|
00015240  a4 69 77 6c 66 28 66 68  25 29 3a 3d 9a 23 66 68  |.iwlf(fh%):=.#fh|
00015250  25 20 84 20 9a 23 66 68  25 3c 3c 38 20 84 20 9a  |% . .#fh%<<8 . .|
00015260  23 66 68 25 3c 3c 31 36  20 84 20 9a 23 66 68 25  |#fh%<<16 . .#fh%|
00015270  3c 3c 32 34 0d 4b 5a 04  0d 4b 64 20 dd f2 6f 62  |<<24.KZ..Kd ..ob|
00015280  66 28 66 68 25 2c 76 61  6c 25 29 3a d5 23 66 68  |f(fh%,val%):.#fh|
00015290  25 2c 76 61 6c 25 3a e1  0d 4b 6e 40 dd f2 6f 74  |%,val%:..Kn@..ot|
000152a0  62 66 28 66 68 25 2c 76  61 6c 25 29 3a d5 23 66  |bf(fh%,val%):.#f|
000152b0  68 25 2c 76 61 6c 25 3e  3e 3e 31 36 3a d5 23 66  |h%,val%>>>16:.#f|
000152c0  68 25 2c 76 61 6c 25 3e  3e 3e 38 3a d5 23 66 68  |h%,val%>>>8:.#fh|
000152d0  25 2c 76 61 6c 25 3a e1  0d 4b 78 40 dd f2 6f 74  |%,val%:..Kx@..ot|
000152e0  6c 66 28 66 68 25 2c 76  61 6c 25 29 3a d5 23 66  |lf(fh%,val%):.#f|
000152f0  68 25 2c 76 61 6c 25 3a  d5 23 66 68 25 2c 76 61  |h%,val%:.#fh%,va|
00015300  6c 25 3e 3e 3e 38 3a d5  23 66 68 25 2c 76 61 6c  |l%>>>8:.#fh%,val|
00015310  25 3e 3e 3e 31 36 3a e1  0d 4b 82 50 dd f2 6f 77  |%>>>16:..K.P..ow|
00015320  6c 66 28 66 68 25 2c 76  61 6c 25 29 3a d5 23 66  |lf(fh%,val%):.#f|
00015330  68 25 2c 76 61 6c 25 3a  d5 23 66 68 25 2c 76 61  |h%,val%:.#fh%,va|
00015340  6c 25 3e 3e 3e 38 3a d5  23 66 68 25 2c 76 61 6c  |l%>>>8:.#fh%,val|
00015350  25 3e 3e 3e 31 36 3a d5  23 66 68 25 2c 76 61 6c  |%>>>16:.#fh%,val|
00015360  25 3e 3e 3e 32 34 3a e1  0d 4b 8c 04 0d 4b 96 15  |%>>>24:..K...K..|
00015370  dd f2 6f 73 74 72 69 6e  67 28 66 68 25 2c 77 24  |..ostring(fh%,w$|
00015380  29 0d 4b a0 1c f4 20 4f  75 74 70 75 74 73 20 73  |).K... Outputs s|
00015390  74 72 69 6e 67 20 74 6f  20 66 69 6c 65 0d 4b aa  |tring to file.K.|
000153a0  08 ea 20 69 25 0d 4b b4  23 e3 20 69 25 3d 31 20  |.. i%.K.#. i%=1 |
000153b0  b8 20 a9 77 24 3a d5 23  66 68 25 2c 97 c1 77 24  |. .w$:.#fh%,..w$|
000153c0  2c 69 25 2c 31 29 3a ed  0d 4b be 05 e1 0d 4b c8  |,i%,1):..K....K.|
000153d0  04 0d 4b d2 11 dd f2 69  6e 69 74 5f 6d 6f 64 75  |..K....init_modu|
000153e0  6c 65 0d 4b dc 18 f4 20  49 6e 69 74 69 61 6c 69  |le.K... Initiali|
000153f0  73 65 73 20 6d 6f 64 75  6c 65 0d 4b e6 2e c8 99  |ses module.K....|
00015400  20 22 54 72 61 6e 73 6c  61 74 6f 72 5f 4d 61 6b  | "Translator_Mak|
00015410  65 4d 61 70 73 22 3a f4  20 49 6e 69 74 69 61 6c  |eMaps":. Initial|
00015420  69 73 65 20 6d 61 70 73  0d 4b f0 2d c8 99 20 22  |ise maps.K.-.. "|
00015430  54 72 61 6e 73 6c 61 74  6f 72 5f 54 61 73 6b 53  |Translator_TaskS|
00015440  74 61 72 74 22 3a f4 20  52 65 67 69 73 74 65 72  |tart":. Register|
00015450  20 74 61 73 6b 0d 4b fa  05 e1 0d 4c 04 05 20 0d  | task.K....L.. .|
00015460  4c 0e 1a dd f2 76 61 72  28 76 61 72 6e 61 6d 65  |L....var(varname|
00015470  24 2c 76 61 6c 75 65 25  29 0d 4c 18 1c f4 20 57  |$,value%).L... W|
00015480  72 69 74 65 73 20 6d 6f  64 75 6c 65 20 76 61 72  |rites module var|
00015490  69 61 62 6c 65 0d 4c 22  3b 24 64 75 6d 25 3d 76  |iable.L";$dum%=v|
000154a0  61 72 6e 61 6d 65 24 3a  c8 99 20 22 54 72 61 6e  |arname$:.. "Tran|
000154b0  73 6c 61 74 6f 72 5f 53  65 74 56 61 72 69 61 62  |slator_SetVariab|
000154c0  6c 65 22 2c 21 64 75 6d  25 2c 76 61 6c 75 65 25  |le",!dum%,value%|
000154d0  0d 4c 2c 05 e1 0d 4c 36  05 20 0d 4c 40 13 dd a4  |.L,...L6. .L@...|
000154e0  76 61 72 28 76 61 72 6e  61 6d 65 24 29 0d 4c 4a  |var(varname$).LJ|
000154f0  1b f4 20 52 65 61 64 73  20 6d 6f 64 75 6c 65 20  |.. Reads module |
00015500  76 61 72 69 61 62 6c 65  0d 4c 54 0c ea 20 76 61  |variable.LT.. va|
00015510  6c 75 65 25 0d 4c 5e 3e  24 64 75 6d 25 3d 76 61  |lue%.L^>$dum%=va|
00015520  72 6e 61 6d 65 24 3a c8  99 20 22 54 72 61 6e 73  |rname$:.. "Trans|
00015530  6c 61 74 6f 72 5f 52 65  61 64 56 61 72 69 61 62  |lator_ReadVariab|
00015540  6c 65 22 2c 21 64 75 6d  25 20 b8 20 76 61 6c 75  |le",!dum% . valu|
00015550  65 25 0d 4c 68 0b 3d 76  61 6c 75 65 25 0d 4c 72  |e%.Lh.=value%.Lr|
00015560  05 20 0d 4c 7c 12 dd a4  4f 53 76 61 72 28 6e 61  |. .L|...OSvar(na|
00015570  6d 65 24 29 0d 4c 86 2e  f4 20 41 74 74 65 6d 70  |me$).L... Attemp|
00015580  74 73 20 74 6f 20 72 65  74 75 72 6e 20 4f 53 2d  |ts to return OS-|
00015590  76 61 72 27 73 20 73 74  72 69 6e 67 20 76 61 6c  |var's string val|
000155a0  75 65 0d 4c 90 0d ea 20  5f 72 24 2c 5f 6c 25 0d  |ue.L... _r$,_l%.|
000155b0  4c 9a 43 5f 72 24 3d c4  31 30 30 2c 22 20 22 29  |L.C_r$=.100," ")|
000155c0  3a c8 99 20 22 58 4f 53  5f 52 65 61 64 56 61 72  |:.. "XOS_ReadVar|
000155d0  56 61 6c 22 2c 6e 61 6d  65 24 2c 5f 72 24 2c a9  |Val",name$,_r$,.|
000155e0  5f 72 24 2c 30 2c 33 20  b8 20 2c 5f 72 24 2c 5f  |_r$,0,3 . ,_r$,_|
000155f0  6c 25 0d 4c a4 0e 3d c0  5f 72 24 2c 5f 6c 25 29  |l%.L..=._r$,_l%)|
00015600  0d 4c ae 04 0d ff                                 |.L....|
00015606