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

Grafix/!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-08.adf » PD-Stuff
Filename: Grafix/!Translatr/!RunImage
Read OK:
File size: 1563A bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >!RunImage
   20REMLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOG
   30REM Converts foreign graphics files to Archimedes
   40REM Version date : Sat,16 Mar 1991.18:36:55
   50REM LEN 1991 Zeridajh software
   60REM by John Kortink
   70REMLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOGLOG
   80ON ERROR MODE0:PRINT'"Error"''"'";REPORT$;"' (code ";ERL;")"'':END
   90tversion%=636: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% 2048,transtab% 256,Buffer%(32,1)
  140DIM buffer% 32*8,freq% 1024,palrgb% 1024,hambas% 64
  150DIM outpal% 1024,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
  210LowHimem%=Heap%+LowHeap%:REM Lowest pseudo HIMEM
  220IFHeapSize%<LowHeap% THEN ERROR 1,"No room to start up Translator"
  230HIMEM=MidHimem%:REM Lower himem to below sprite buffer
  240PROCinitialise:REM Initialise application
  250PROCmode_change(-1):REM Reselect current mode to tidy up
  260Lname$=FNOSvar("Translator$File"):IFLname$<>"" THEN SYS "OS_CLI","Unset Translator$File":Ltype%=FNimage_type(Lname$,TRUE):IFLtype%>0 THEN ActLoad=TRUE
  270ON ERROR PROCerror(ERR,REPORT$+" (code "+STR$ERL+")"):PROCiclose
  280REM Poll and action
  290IFDataLoadRef% THEN pollmask%=48 ELSE pollmask%=49:REM No nulls if wasted
  300CASE FNpoll(pollmask%) OF
  310 WHEN 0 : PROCnull
  320 WHEN 1 : PROCredraw
  330 WHEN 2 : PROCopen
  340 WHEN 3 : PROCclose
  350  IFKill THEN
  360   Kill=FALSE:REM Reset flag
  370   END=LowHimem%:REM Image killed, memory back to minimum
  380   PROCnew_slot:HIMEM=MidHimem%:REM New slotsize
  390  ENDIF
  400 WHEN 6 : PROCmouseclick
  410 WHEN 7 : PROCdragdrop
  420 WHEN 8 : PROCkey
  430 WHEN 9 : PROCmenuselect
  440 WHEN 17,18 : PROCmessage
  450ENDCASE
  460CASE TRUE OF
  470 WHEN ActLoad : REM Load new image
  480  ActLoad=FALSE:REM Reset flag
  490  END=&1000000:PROCnew_slot:HIMEM=MidHimem%:REM Claim
  500  Loaded=FNload(Ltype%,Lname$):REM Attempt to load image
  510  IFImg THEN END=(SprEnd%+1023)ANDNOT1023 ELSE END=MidHimem%:REM Return
  520  PROCnew_slot:HIMEM=MidHimem%:REM New slotsize
  530  IFLoaded THEN
  540   PROCset_mode(ImgMode%):REM Select image mode
  550   ZoomX=1:ZoomY=1:REM Reset zoom factors
  560   IFAutoPal THEN PROCset_palette(1):REM Select image palette if enabled
  570   PROCnew_image_window:REM Open window on image
  580  ENDIF
  590 WHEN ActRotate : REM Rotate image
  600  ActRotate=FALSE:REM Reset flag
  610  END=&1000000:REM Claim
  620  PROChour_on:REM Hourglass on
  630  PROCvar("rotb",SprEnd%):PROCvar("rots",HIMEM-SprEnd%):REM Set buffer
  640  SYS "Translator_Rotate",SprPtr%:REM Rotate sprite
  650  END=(SprEnd%+1023)ANDNOT1023:REM Return
  660  PROChour_off:REM Hourglass off
  670  Sprite%!12=Sprite%!8+!(Sprite%+Sprite%!8):SWAP SprH%,SprW%
  680  PROCnew_image_window:PROCnew_window(win_img%):REM New image window
  690ENDCASE
  700GOTO 280:REM Sorry, I have to. Current BASIC restrictions with END=.
  710 
  720DEFPROCnew_slot
  730REM Slot changed, reset info
  740HeapSize%=HIMEM-MidHimem%:REM New size of heap
  750ENDPROC
  760
  770DEFPROCmenuselect
  780ActRotate=FALSE:REM Flag returned to rotate image
  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 "Reload last","Next image","Previous image" : REM Reloaders
 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%:ActLoad=TRUE ELSE PROCerror(-1,"Load an image file first !")
 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    ActRotate=TRUE:REM Set rotate flag
 1720   WHEN "Mirror" : REM Mirror image
 1730    PROCvar("imgx",SprW%):PROCvar("imgy",SprH%):REM Module info
 1740    PROChour_on:REM Hourglass on
 1750    IFselect3$="x" THEN SYS "Translator_MirrorX",SprPtr% ELSE SYS "Translator_MirrorY",SprPtr%:REM Mirror sprite
 1760    PROChour_off:REM Hourglass 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 "Save" : REM Save whole or part of image
 2050    CASE select3$ OF
 2060     WHEN "Include palette" : SavePal=NOTSavePal
 2070     WHEN "Same leafname" : SameLeaf=NOTSameLeaf
 2080     OTHERWISE : SaveKind$=select3$:REM Remember type of save
 2090       $SAVfn%=SaveSpr$:$SAVsn%="file_ff9":REM Set file window for sprite
 2100       PROCopen_window(win_file%,-1):REM Open file window
 2110       SYS WSetCa%,win_file%,1,,,-1,LEN(SaveSpr$)
 2120    ENDCASE
 2130   WHEN "Image palette" : REM Select image palette
 2140    PROCset_palette(1)
 2150   WHEN "Status" : REM Manipulate defaults
 2160    CASE select3$ OF
 2170     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
 2180      PRINT#Status,ZigZag,ViewMode,OutMode,OutPal,Percent,GammaF,Gamma,BlackF,Black,Range,SameLeaf:CLOSE#Status
 2190     WHEN "Load" : IFFNload_status ELSE PROCerror(-1,"I cannot find my status file ! Have you saved one ?")
 2200     WHEN "Kill" : SYS "OS_File",6,"<Translator$Dir>.Status"
 2210    ENDCASE
 2220  ENDCASE
 2230ENDCASE
 2240SYS WGetPI%,,block:REM Get pointer info
 2250IF((block!8)AND1)>0 THEN PROCmain_menu:REM Adjust -> re-open
 2260ENDPROC
 2270
 2280DEFPROCclose
 2290Kill=FALSE:REM Flag returned : image killed
 2300win%=poll!0:REM Window handle
 2310PROCclose_window(win%):REM Close window
 2320CASE win% OF
 2330 WHEN win_img% : PROCinvalidate_image:PROCset_palette(0)
 2340  PROCclose_window(win_file%)
 2350  PROCclose_window(win_zoom%):ZoomWin=FALSE
 2360  IFViewMode THEN PROCmode_change(PreMode)
 2370  Kill=TRUE
 2380 WHEN win_zoom% : ZoomWin=FALSE
 2390ENDCASE
 2400ENDPROC
 2410
 2420DEFPROCopen
 2430PROCopen_window(0,poll)
 2440ENDPROC
 2450
 2460DEFPROCredraw
 2470PROCredraw_window(poll!0,FALSE)
 2480ENDPROC
 2490
 2500DEFPROCnull
 2510IFDataLoadRef% THEN
 2520 DataLoadRef%=FALSE:SYS "OS_File",6,Save$:REM Delete file saved/created
 2530 PROCerror(-1,"Bad data transfer, receiver dead"):REM No DataLoadAck
 2540ENDIF
 2550ENDPROC
 2560
 2570DEFPROCkey
 2580win%=poll!0:ico%=poll!4:char%=poll!24:REM Window, icon, key pressed
 2590IF(win%=win_file%) AND (ico%=1) THEN
 2600 CASE char% OF
 2610  WHEN 13 : REM Return pressed
 2620   PROCerror(-1,"Please drag the sprite file icon to a directory viewer")
 2630  WHEN 27 : REM Escape pressed
 2640   PROCclose_window(win_file%)
 2650 ENDCASE
 2660ENDIF
 2670ENDPROC
 2680
 2690DEFPROCmessage
 2700REM Ignore messages originating from myself
 2710IF(poll!4)=TaskHandle% THEN msgnr%=-1 ELSE msgnr%=poll!16
 2720CASE msgnr% OF
 2730 WHEN -1 : REM Don't react
 2740 WHEN 0 : PROCdie:REM Request to terminate task
 2750 WHEN 1 : REM DataSave, transfer via scrap file
 2760  scrap$=FNOSvar("Wimp$Scrap"):REM Read scrap filename
 2770  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
 2780 WHEN 2 : REM DataSaveAck, save file
 2790  IFpoll!12=DataSaveRef% THEN
 2800   Save$=FNstring(poll+44):REM Full pathname of file to be saved/created
 2810   REM Save sprite file or 'open' Clear file
 2820   IF$SAVsn%="file_ff9" THEN SprSave$=Save$:PROCsave_sprite(SprSave$) ELSE ClearSave$=Save$:SYS "OS_File",11,ClearSave$,&690,0,0:ClearFile=TRUE
 2830   poll!12=poll!8:poll!16=3:REM Amend data block for DataLoad
 2840   SYS WSendMsg%,18,poll,poll!4:REM Send DataLoad
 2850   DataLoadRef%=poll!8:REM Await a DataLoadAck, remember myref
 2860  ENDIF
 2870 WHEN 3,5 : REM DataLoad/Open : attempt to load
 2880  type%=poll!40:name$=FNstring(poll+44):REM Filetype and filename
 2890  CASE type% OF
 2900   WHEN &FF9,&DE2,&DFA,&D58,&004 : IFmsgnr%=3 THEN type%=FNimage_type(name$,TRUE) ELSE type%=0
 2910   OTHERWISE type%=FNimage_type(name$,(msgnr%=3))
 2920  ENDCASE
 2930  IFtype%>0 THEN
 2940   poll!12=poll!8:poll!16=4:SYS WSendMsg%,17,poll,poll!4:REM DataLoadAck
 2950   Lname$=name$:Ltype%=type%:ActLoad=TRUE:REM Pending load
 2960  ELSE IFmsgnr%=3 THEN PROCerror(-1,"I don't recognize this file. Please filetype it appropiately."):REM Drag unrecognized
 2970  ENDIF
 2980 WHEN 4 : REM DataLoadAck, check or ignore
 2990  IFDataLoadRef% THEN IFpoll!12=DataLoadRef% THEN DataLoadRef%=FALSE
 3000 WHEN &400C0 : REM Submenu warning
 3010  pointer%=poll!20:x%=poll!24:y%=poll!28:REM Get pointer/proposed x/y
 3020  SYS WDecodeM%,,menu1,poll+32,STRING$(100," ") TO ,,,path$:REM Get path
 3030  CASE path$ OF
 3040   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
 3050  ENDCASE
 3060 WHEN &400C1 : REM Mode has changed (and it may not have been me)
 3070  PROCmode_change(-1):REM Tidy up
 3080ENDCASE
 3090ENDPROC
 3100 
 3110DEFPROCmouseclick
 3120but%=poll!8:win%=poll!12:ico%=poll!16:REM Buttons/window/icon
 3130CASE win% OF
 3140 WHEN -2 : REM Click on iconbar
 3150  IFico%=Iiconbar% THEN
 3160   REM Iconbar icon clicked
 3170   CASE but% AND 7 OF
 3180    WHEN 2 : PROCmouse(x%,_%,_%):m%=menuico%
 3190     $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
 3200     $(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
 3210    WHEN 1,4 : From%=1:PROCmain_menu
 3220   ENDCASE
 3230  ENDIF
 3240 WHEN win_img% : REM Click on image window
 3250  CASE but% AND 7 OF
 3260   WHEN 2 : From%=2:PROCmain_menu
 3270   OTHERWISE : REM Wandering over image, recalculate zoom window if open
 3280    IFZoomWin THEN
 3290     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
 3300     IFZoomX<1 THEN ex%=ex%+1/ZoomX-1:REM Display correction
 3310     IFZoomY<1 THEN ey%=ey%+1/ZoomY-1:REM Display correction
 3320     IF(ZoomWX%<>ex%)OR(ZoomWY%<>ey%) THEN ZoomWX%=ex%:ZoomWY%=ey%:PROCredraw_window(win_zoom%,TRUE):REM If changed, redraw zoom window
 3330    ENDIF
 3340  ENDCASE
 3350 WHEN win_zoom% : REM Click on zoom window
 3360  CASE but% AND 7 OF
 3370   WHEN 1 : IFZoomW>ZoomD THEN ZoomW=ZoomW-1
 3380   WHEN 2 : ZoomW=ZoomD
 3390   WHEN 4 : IF(ZoomW/ZoomD)<100 THEN ZoomW=ZoomW+1
 3400  ENDCASE
 3410  PROCredraw_window(win_zoom%,TRUE):REM Redraw zoom window
 3420 WHEN win_file% : REM Click on file window
 3430  IFico%=0 THEN
 3440   CASE but% AND &7F OF
 3450    WHEN 16,64 : REM Drag,calculate drag box and create it
 3460     !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%
 3470     SYS WDragB%,,block:REM Create drag box
 3480   ENDCASE
 3490  ENDIF
 3500 WHEN win_rgbbits% : REM RGB slider manipulation
 3510  !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
 3520  mx%=!poll:dx%=mx%-x%-8:val%=dx% DIV 16:IFval%>8 THEN val%=8:REM Position
 3530  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
 3540  REM Plot slider in slider sprite
 3550  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
 3560  SYS OSSpop%,r0,r1,r2,r3:REM Restore VDU context
 3570  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
 3580ENDCASE
 3590ENDPROC
 3600 
 3610DEFPROCdragdrop
 3620SYS WCreateM%,,-1:REM Close menu
 3630SYS WGetPI%,,block:REM Get pointer position
 3640dropwin%=block!12:dropico%=block!16:REM Window/icon where box dropped
 3650save$=FNstring(SAVfn%):REM Get leafname
 3660IF$SAVsn%="file_ff9" THEN SaveSpr$=save$:ft%=&FF9 ELSE SaveClear$=save$:ft%=&690:REM Remember leafname, set filetype
 3670block!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
 3680SYS WSendMsg%,17,block,dropwin%,dropico%:REM Send DataSave
 3690DataSaveRef%=block!8:REM Remember myref for DataSave
 3700PROCclose_window(win_file%):REM Close file window
 3710ENDPROC
 3720
 3730DEFFNimage_type(name$,check)
 3740REM Examines file and returns filetype <>0 if image file
 3750REM If check=TRUE, contents are checked as well as filetype
 3760LOCAL obj%,load%,type%,Head,id$,i%
 3770SYS "OS_File",5,name$ TO obj%,,load%:REM Read file info
 3780IFobj%<>1 THEN =0:REM Not a file
 3790IF(load%>>>20)=&FFF THEN type%=(load%>>>8)AND&FFF ELSE type%=0
 3800CASE type% OF
 3810 WHEN &690,&691,&692,&693,&694,&695,&696,&697,&698,&699,&69A,&69B,&69C,&69D,&69E,&69F,&FF0,&FF9,&DE2,&DFA,&D58,&004 : REM Recognized by filetype
 3820 OTHERWISE IFcheck ELSE =0
 3830  Head=OPENIN(name$):REM Open file to examine contents
 3840  type%=0:REM Not recognized anything (yet)
 3850  id$="":FOR i%=1 TO 8:id$+=CHR$(BGET#Head):NEXT
 3860  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%=&696
 3870  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
 3880  IFtype%<>0 ELSE IFLEFT$(id$,4)="ZVDA" THEN type%=&69F
 3890  IFtype%<>0 ELSE PTR#Head=&41:id$="":FOR i%=1 TO 4:id$+=CHR$(BGET#Head):NEXT:IFid$="PNTG" THEN type%=&694
 3900  IFtype%<>0 ELSE PTR#Head=&10:id$="":FOR i%=1 TO 9:id$+=CHR$(BGET#Head):NEXT:IFid$="MILLIPEDE" THEN type%=&69A
 3910  CLOSE#Head:REM Close image file
 3920ENDCASE
 3930=type%
 3940 
 3950DEFFNload(type%,name$)
 3960REM Loads image file
 3970REM Returns TRUE if succesful load, else FALSE
 3980InFile$=name$:InType%=type%:REM Set file info
 3990pos%=LENname$:REPEAT pos%-=1:period=(MID$(name$,pos%,1)="."):UNTIL (pos%=1) OR period:IFperiod THEN Leaf$=RIGHT$(name$,LENname$-pos%) ELSE Leaf$=name$
 4000SYS "OS_File",5,name$ TO ,,,,Flen%:REM File's length
 4010F1%=OPENIN(name$):d%=FNib:PROCiptr(F1%,0):REM Open file, ensure disc
 4020PROCvar("fha1",F1%):PROCvar("ifp1",0):REM REM Module info
 4030PROChour_on:REM Hourglass on
 4040IFPercent THEN SYS "Hourglass_Percentage",0:REM Init percentage if on
 4050IFwin_img%>0 THEN PROCclose_window(win_img%):REM Old image discarded
 4060PROCinvalidate_image:REM New image to come, invalidate old image
 4070PreMode=MODE:REM Remember current mode
 4080PROCdeallocate:REM Free all memory
 4090CASE type% OF
 4100 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
 4110  IFp%=0 THEN Ok=FNpic_ARC ELSE PROCvar("fha2",F2%):PROCvar("ifp2",0):Ok=FNpic_ARVIS:REM What's this then ?
 4120 WHEN &DE2 : Ok=FNpic_PROART
 4130 WHEN &DFA : Ok=FNpic_WATFORD
 4140 WHEN &D58 : Ok=FNpic_RENDER
 4150 WHEN &004 : Ok=FNpic_AIM
 4160 WHEN &690 : Ok=FNpic_CLEAR
 4170 WHEN &691 : Ok=FNpic_DEGAS
 4180 WHEN &692 : Ok=FNpic_IMG
 4190 WHEN &693 : Ok=FNpic_IFF
 4200 WHEN &694 : Ok=FNpic_MAC
 4210 WHEN &695 : Ok=FNpic_GIF
 4220 WHEN &696 : Ok=FNpic_SUN
 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 &FF0 : Ok=FNpic_TIFF
 4330ENDCASE
 4340Img=Ok:REM Image ok if all is well
 4350IFImg THEN
 4360 ImgMode%=Mode%
 4370 IFSameLeaf THEN SaveSpr$=Leaf$
 4380ENDIF
 4390PROChour_off:REM Hourglass off
 4400PROCiclose:REM Close input file(s)
 4410=Img
 4420
 4430DEFPROCsave_sprite(out$)
 4440REM Saves image as spritefile
 4450CASE SaveKind$ OF
 4460 WHEN "Full" : REM Full resolution sprite, no edit
 4470 WHEN "Whole" : PROCedit_part(FALSE,FALSE)
 4480 WHEN "Whole (scaled)" : PROCedit_part(TRUE,FALSE)
 4490 WHEN "Part" : PROCedit_part(FALSE,TRUE)
 4500 WHEN "Part (scaled)" : PROCedit_part(TRUE,TRUE)
 4510ENDCASE
 4520PROChour_on:REM Hourglass on
 4530IFSaveKind$="Full" THEN
 4540 REM Full sprite, save image with palette (optionally)
 4550 Out=OPENOUT(out$):REM Open sprite file
 4560 spr%=Sprite%+Sprite%!8:REM Start of sprite
 4570 cols%=2^SprColbits%:REM Colours in sprite
 4580 IFSavePal THEN
 4590  REM Save with palette included
 4600  IFcols%=256 THEN ents%=64 ELSE ents%=cols%:REM Palette entries
 4610  extra%=ents%*8:REM Extra room for palette
 4620  SYS "OS_GBPB",1,Out,Sprite%+4,8,0:REM Output part of control block
 4630  !arg%=extra%+Sprite%!12:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4640  !arg%=extra%+!spr%:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4650  SYS "OS_GBPB",2,Out,spr%+4,28:REM Output part of sprite header
 4660  !arg%=extra%+spr%!32:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4670  !arg%=extra%+spr%!36:SYS "OS_GBPB",2,Out,arg%,4:REM New offset
 4680  SYS "OS_GBPB",2,Out,spr%+40,4:REM Output sprite's mode
 4690  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
 4700  SYS "OS_GBPB",2,Out,spr%+spr%!32,(spr%!16+1)*(spr%!20+1)*4:REM Data
 4710 ELSE REM No palette, output the whole lot
 4720  SYS "OS_GBPB",1,Out,Sprite%+4,Sprite%!12-4,0:REM Output all
 4730 ENDIF
 4740 CLOSE#Out:SYS "OS_CLI","SetType "+out$+" Sprite":REM Close & type
 4750ELSE REM Edited part in window on screen, save it
 4760 PROCinvalidate_screen:REM Screen invalid
 4770 IFSavePal THEN pal%=1 ELSE pal%=0
 4780 SYS OSSpop%,2,,out$,pal%:REM Save screen in window
 4790 VDU24,0;0;ScrW%;ScrH%;:REM Reset screen window
 4800ENDIF
 4810PROChour_off:REM Hourglass off
 4820ENDPROC
 4830
 4840DEFFNpic_DEGAS
 4850REM Makes Atari Degas image (PI1/2/3,PC1/2/3)
 4860compr%=FNib:res%=FNib:REM Flags, resolution (1/2/3)
 4870compressed=((compr%AND%10000000)>0):REM Compressed flag
 4880total%=32000:REM Total data bytes
 4890CASE res% OF
 4900 WHEN 0 : width%=320:height%=200:colbits%=4
 4910 WHEN 1 : width%=640:height%=200:colbits%=2
 4920 WHEN 2 : width%=640:height%=400:colbits%=1
 4930ENDCASE
 4940colours%=2^colbits%:REM Number of colours
 4950PROCset(width%,height%,colours%,Mode%)
 4960IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 4970IFFNnew_image(0) ELSE =FALSE
 4980PROCiget(F1%,dum%,32):REM Read palette from file
 4990InPal%(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
 5000IFcompressed THEN compr$="Run length":type$="PC"+STR$(res%+1) ELSE compr$="":type$="PI"+STR$(res%+1)
 5010PROCimage_info("Atari Degas "+type$,width%,height%,0,colbits%,Mode%,compr$,"",Flen%-34,total%)
 5020PROCvar("comp",compressed):PROCvar("rest",res%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",&22):IFFNunpack("DEGAS") ELSE =FALSE
 5030=TRUE
 5040 
 5050DEFFNpic_IMG
 5060REM Makes Atari IMG image
 5070version%=FNidb:headlen%=FNidb:nplanes%=FNidb:REM Version, headlength, planes
 5080patlen%=FNidb:pw%=FNidb:ph%=FNidb:REM Pattern length, pixel width and height
 5090width%=FNidb:height%=FNidb:REM Width and height in pixels
 5100colours%=2^nplanes%:REM Number of colours
 5110PROCset(width%,height%,colours%,Mode%)
 5120IFcolours%<>2 OR patlen%<>2 THEN PROCerror(-1,"I cannot display Atari IMG images with more than 2 colours or patternlength<>2 !"):ENDPROC
 5130IFFNallocate_std(width%,(width%*nplanes%+7)DIV8,width%,0) ELSE =FALSE
 5140IFFNnew_image(0) ELSE =FALSE
 5150PROCgreypal(InPal%(),nplanes%,1):REM Set palette
 5160PROCimage_info("Atari IMG",width%,height%,0,nplanes%,Mode%,"Several ways","",Flen%-headlen%*2,(width%*height%*nplanes%)DIV8)
 5170PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",headlen%*2):IFFNunpack("IMG") ELSE =FALSE
 5180=TRUE
 5190 
 5200DEFFNpic_MAC
 5210REM Makes MacIntosh MacPaint image
 5220width%=576:height%=720:colbits%=1:REM Resolution
 5230PROCset(width%,height%,2^colbits%,Mode%)
 5240IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 5250IFFNnew_image(0) ELSE =FALSE
 5260PROCgreypal(InPal%(),colbits%,1):REM Set palette
 5270PROCimage_info("MacIntosh MacPaint",width%,height%,0,colbits%,Mode%,"Run length","",Flen%-640,(576*720)DIV8)
 5280PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",640):IFFNunpack("MAC") ELSE =FALSE
 5290=TRUE
 5300 
 5310DEFFNpic_IFF
 5320REM Makes Amiga IFF image
 5330bmhd=FALSE:cmap=FALSE:body=FALSE:REM Init flags
 5340ham=FALSE:lace=FALSE:hires=FALSE:halfbright=FALSE:REM Init flags
 5350REM Check if this is a standard IFF picture file
 5360form$=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
 5370REPEAT REM Follow BMHD,CMAP and BODY headers
 5380head$=FNistring(F1%,4):hlen%=FNiwb:startptr%=FNiptr(F1%)
 5390CASE head$ OF
 5400 WHEN "BMHD" : bmhd=TRUE:REM Bitmap header
 5410       REM Read picture/screen width, height, colours, etc.
 5420       width%=FNidb:height%=FNidb:PROCiskip(F1%,4):planes%=FNib:PROCiskip(F1%,1)
 5430       compressed=(FNib=1):PROCiskip(F1%,5):s_width%=FNidb:s_height%=FNidb
 5440 WHEN "CAMG" : flags%=FNiwb:REM Get flag bits, set flags from it
 5450       ham=((flags%AND&800)>0):lace=((flags%AND&4)>0)
 5460       hires=((flags%AND&8000)>0):halfbright=((flags%AND&80)>0)
 5470 WHEN "CMAP" : cmap=TRUE:REM Colour map (palette)
 5480       paldefs%=hlen%DIV3:REM Number of palette entries
 5490       PROCread24pal(F1%,InPal%(),paldefs%,0,1,2,3)
 5500 WHEN "BODY" : body=TRUE:REM Screen data
 5510       REM Check if all parts are there
 5520       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
 5530       REM Determine suitable Archimedes screen mode
 5540       IFham THEN
 5550        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%)
 5560        Mode%=FNmode(320,s_height%,256)
 5570        IFFNallocate_std(width%,width%*4,0,width%) ELSE =FALSE
 5580       ELSE colours%=2^planes%:PROCset(width%,height%,colours%,Mode%):colbits%=planes%:InPal%(0)=planes%:info$=""
 5590        IFhalfbright THEN info$="Half-bright":half%=colours%DIV2:FOR c%=1 TO half%:InPal%(c%+half%)=(InPal%(c%)AND&E0E0E0)>>1:NEXT
 5600        IFFNallocate_std(width%,width%,0,0) ELSE =FALSE
 5610       ENDIF
 5620       IFFNnew_image(0) ELSE =FALSE
 5630       IFcompressed THEN compr$="Run length" ELSE compr$=""
 5640       IFcolbits%>8 THEN ci%=2 ELSE ci%=0
 5650       PROCimage_info("Amiga IFF",width%,height%,ci%,colbits%,Mode%,compr$,info$,Flen%-FNiptr(F1%),(width%*height%*planes%)DIV8)
 5660       IFham THEN PROCvar("scty",1) ELSE PROCvar("scty",0)
 5670       PROCvar("ifp1",FNiptr(F1%)):PROCvar("plan",planes%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("comp",compressed):IFFNunpack("IFF") ELSE =FALSE
 5680ENDCASE
 5690IFhead$<>"BODY" THEN PROCiskip(F1%,hlen%-(FNiptr(F1%)-startptr%)):REM To next
 5700UNTIL body
 5710=TRUE
 5720 
 5730DEFFNpic_GIF
 5740REM Makes GIF (Graphics Interchange Format) image
 5750LOCAL g_InPal%(),Pic_ptr%(),Pic_len%()
 5760DIM g_InPal%(256),Pic_ptr%(256),Pic_len%(256)
 5770signature$=FNistring(F1%,6):REM Read GIF signature
 5780IFLEFT$(signature$,3)<>"GIF" THEN PROCerror(-1,"This screen file is not a GIF screen file !"):=FALSE
 5790REM Read data in Screen Descriptor
 5800r_width%=FNidl:r_height%=FNidl:REM Raster size
 5810flags%=FNib:backgr%=FNib:PROCiskip(F1%,1):REM Flags and back colour
 5820global=((flags%AND&80)>0):REM Global colour map following ?
 5830g_pixbits%=(flags%AND7)+1:REM Global bits per pixel
 5840colbits%=((flags%>>4)AND7)+1:REM Bits of colour resolution
 5850IFglobal THEN
 5860 REM Read Global Colour Map
 5870 PROCread24pal(F1%,g_InPal%(),2^g_pixbits%,0,1,2,3)
 5880 g_InPal%(0)=g_pixbits%:REM Palette entries
 5890ELSE InPal%(0)=-1:REM No palette found
 5900ENDIF
 5910REM Scan data for pictures, make a list
 5920picture%=0:REPEAT
 5930PROCskip_GIF_extension:REM Skip extension blocks preceding Image
 5940REM Search for next Image Descriptor
 5950REPEAT _%=FNib:image=(_%=ASC","):end=(_%=ASC";"):UNTIL image OR end OR FNieof(F1%)
 5960IFNOTimage THEN IFNOTend THEN PROCerror(-1,"Warning ! GIF file is not properly terminated !"):end=TRUE:PROChour_off:PROChour_on:REM Read beyond file
 5970IFimage THEN
 5980 REM Register picture's position
 5990 picture%+=1:Pic_ptr%(picture%)=FNiptr(F1%)-1
 6000 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
 6010 IFGIFScan THEN
 6020  REM Determine picture data length, skip data
 6030  PROCiskip(F1%,1):REPEAT c%=FNib:PROCiskip(F1%,c%):UNTIL c%=0
 6040  Pic_len%(picture%)=FNiptr(F1%)-Pic_ptr%(picture%)
 6050 ELSE Pic_len%(picture%)=FNilen(F1%)-Pic_ptr%(picture%):end=TRUE
 6060 ENDIF
 6070ENDIF
 6080UNTIL end
 6090pictures%=picture%:REM Number of pictures found
 6100IFpictures%>0 ELSE PROCerror(-1,"I cannot find any images in this GIF file !"):=FALSE
 6110IFGIFScan THEN
 6120 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
 6130ELSE picture%=1
 6140ENDIF
 6150PROCiptr(F1%,Pic_ptr%(picture%)+1):len%=Pic_len%(picture%):REM Pic pos & len
 6160REM Read Image Descriptor data
 6170i_left%=FNidl:i_top%=FNidl:REM Position in frame
 6180i_width%=FNidl:i_height%=FNidl:flags%=FNib:REM Size and flags
 6190local=(flags%AND&80)>0:REM Local colour map following ?
 6200ibit=(flags%AND&40)>0:REM Image stored in interlaced order ?
 6210l_pixbits%=(flags%AND7)+1:REM Local bits per pixel
 6220IFlocal THEN
 6230 pixbits%=l_pixbits%:REM Read and use Local Colour Map palette
 6240 PROCread24pal(F1%,InPal%(),2^l_pixbits%,0,1,2,3)
 6250 InPal%(0)=l_pixbits%:REM Palette entries
 6260ELSE pixbits%=g_pixbits%:InPal%()=g_InPal%():REM Use Global data
 6270ENDIF
 6280IFInPal%(0)=-1 THEN PROCerror(-1,"I cannot find a palette in this GIF file !"):=FALSE
 6290colours%=2^pixbits%:REM Number of colours
 6300width%=i_width%:height%=i_height%:REM True width and height
 6310PROCset(width%,height%,colours%,Mode%)
 6320IFFNallocate(B_lzwtable%,32*1024) ELSE PROCerror(-1,"I have no room for the LZW decompression table !"):=FALSE
 6330IFFNallocate_std(width%,0,width%,0) ELSE =FALSE
 6340REM Room needed for decompression data and de-interlacing
 6350IFpixbits%<=2 THEN rbits%=pixbits% ELSE IFpixbits%<=4 THEN rbits%=4 ELSE rbits%=8:REM Round up bpp to sprite bpp
 6360room%=(((width%*rbits%+31)>>5)<<2)*(height%+1):REM Room needed
 6370IFFNnew_image(room%) ELSE =FALSE
 6380IFGIFScan THEN np$=STR$pictures% ELSE np$="?"
 6390PROCimage_info(signature$,width%,height%,0,pixbits%,Mode%,"LZW",np$+" pics (this is "+FNtimes(picture%)+")",len%,(height%*width%*pixbits%)DIV8)
 6400IFibit THEN PROCvar("lace",1) ELSE PROCvar("lace",0)
 6410PROCvar("ifp1",FNiptr(F1%)):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("GIF") ELSE =FALSE
 6420=TRUE
 6430 
 6440DEFPROCskip_GIF_extension
 6450REM Skips a GIF Extension Block if present at current pointer
 6460LOCAL _%
 6470IF(FNib)=ASC"!" THEN
 6480 PROCiskip(F1%,1):REM Skip function code
 6490 REPEAT _%=FNib:PROCiskip(F1%,_%):UNTIL _%=0:REM Skip data byte blocks
 6500ELSE PROCiskip(F1%,-1)
 6510ENDIF
 6520ENDPROC
 6530 
 6540DEFFNpic_ARC
 6550REM Loads Archimedes sprite image
 6560pictures%=FNiwl:ofirst%=FNiwl:REM Number of sprites, offset to first
 6570IF(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
 6580PROCiskip(F1%,ofirst%-8-4):REM Start of first sprite
 6590skip%=picture%-1:WHILE skip%>0:PROCiskip(F1%,FNiwl-4):skip%-=1:ENDWHILE
 6600start%=FNiptr(F1%):PROCiskip(F1%,16):REM Remember start, skip offset and name
 6610words%=FNiwl+1:height%=FNiwl+1:REM Width in words, height in lines
 6620bfirst%=FNiwl:blast%=FNiwl:REM First/last bits used
 6630oimage%=FNiwl:PROCiskip(F1%,4):sprMode%=FNiwl:REM Offset to image, mode
 6640colbits%=2^FNmode_var(sprMode%,9):colours%=2^colbits%:REM Colours
 6650IFcolbits%=8 THEN ents%=64 ELSE ents%=colours%
 6660IFoimage%<=44 THEN
 6670 PROCstdpal(InPal%(),colbits%):REM No palette, set default
 6680ELSE PROCread24pal(F1%,InPal%(),ents%,1,2,3,8):InPal%(0)=colbits%:REM Read palette
 6690 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
 6700ENDIF
 6710width%=(words%*32-bfirst%-(31-blast%)) DIV colbits%
 6720IFFNavailable_mode(sprMode%) THEN Mode%=sprMode% ELSE Mode%=FNmode(width%,height%,colours%):REM Determine other mode if sprite's mode won't do
 6730PROCset(width%,height%,colours%,_%)
 6740IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 6750IFFNnew_image(0) ELSE =FALSE
 6760PROCimage_info("Archimedes sprite",width%,height%,0,colbits%,Mode%,"",STR$pictures%+" sprites (this is "+FNtimes(picture%)+")",1,1)
 6770PROCvar("ifp1",start%+oimage%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("wrds",words%):PROCvar("bfir",bfirst%):IFFNunpack("ARC") ELSE =FALSE
 6780=TRUE
 6790 
 6800DEFFNpic_PROART
 6810REM Makes ProArtisan image
 6820width%=640:height%=256:REM Set resolution
 6830PROCset(width%,height%,256,Mode%)
 6840IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 6850room%=(width%*height%+3)ANDNOT3:REM Room needed for unpack (coltable)
 6860IFFNnew_image(room%) ELSE =FALSE
 6870collen%=FNiwl:comflag%=FNiwl:REM Length of colour table/compression
 6880coltable%=SprTop%-collen%:REM Space for colour table
 6890PROCiget(F1%,coltable%,collen%):REM Read colour table
 6900PROCstdpal(InPal%(),8):REM Standard 256 colour palette
 6910PROCimage_info("ProArtisan",width%,height%,0,8,Mode%,"Run length","",Flen%-8,width%*height%)
 6920PROCvar("ifp1",FNiptr(F1%)):PROCvar("prot",coltable%):PROCvar("comp",comflag%):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("PROART") ELSE =FALSE
 6930=TRUE
 6940 
 6950DEFFNpic_WATFORD
 6960REM Makes Watford digitiser image
 6970width%=512:height%=256:REM Set resolution
 6980PROCset(width%,height%,256,Mode%)
 6990IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 7000IFFNnew_image(0) ELSE =FALSE
 7010PROCgreypal(InPal%(),6,1):REM Palette is 64 greys
 7020PROCimage_info("Watford digitiser",width%,height%,1,6,Mode%,"Run length","",Flen%,(width%*height%*6)DIV8)
 7030PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",0):IFFNunpack("WATFORD") ELSE =FALSE
 7040=TRUE
 7050 
 7060DEFFNpic_RENDER
 7070REM Makes Render Bender image
 7080Mode%=FNib:REM Read image's mode
 7090IFFNmode_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
 7100PROCset(width%,height%,256,Mode%)
 7110IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 7120IFFNnew_image(0) ELSE =FALSE
 7130PROCstdpal(InPal%(),8):REM Standard 256 colour palette
 7140PROCimage_info("Render Bender",width%,height%,0,8,Mode%,"Run length","",Flen%-1,width%*height%)
 7150PROCvar("ifp1",1):PROCvar("imgx",width%):PROCvar("imgy",height%):IFFNunpack("RENDER") ELSE =FALSE
 7160=TRUE
 7170 
 7180DEFFNpic_AIM
 7190REM Makes AIM image
 7200width%=256:height%=256:REM Set resolution
 7210PROCset(width%,height%,256,Mode%)
 7220IFFNallocate_std(width%,width%,width%,0) ELSE =FALSE
 7230IFFNnew_image(0) ELSE =FALSE
 7240PROCgreypal(InPal%(),8,1):REM Palette is 256 greys
 7250PROCimage_info("AIM",width%,height%,1,8,Mode%,"","",Flen%,256*256)
 7260PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("ifp1",0):IFFNunpack("AIM") ELSE =FALSE
 7270=TRUE
 7280 
 7290DEFFNpic_SUN
 7300REM Makes SUN image
 7310magic%=FNiwb:IFmagic%<>&59A66A95 THEN PROCerror(-1,"This is no standard SUN raster file !"):=FALSE
 7320width%=FNiwb:height%=FNiwb:colbits%=FNiwb:REM Read resolution
 7330length%=FNiwb:type%=FNiwb:maptype%=FNiwb:maplength%=FNiwb:REM Extra info
 7340IFtype%>2 THEN PROCerror(-1,"I can only read uncompressed or RLE Sun images !"):=FALSE
 7350colours%=2^colbits%:REM Number of colours
 7360CASE colbits% OF
 7370 WHEN 1,8 : IF(maptype%<>1)OR(maplength%=0) THEN
 7380             IFcolbits%>1 THEN PROCerror(-1,"This SUN image file contains no palette ! I will use a greyscale.")
 7390             PROCgreypal(InPal%(),colbits%,1)
 7400            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%
 7410            ENDIF
 7420 OTHERWISE : PROCerror(-1,"I can only read 1- and 8-bit per pixel Sun images !"):=FALSE
 7430ENDCASE
 7440PROCset(width%,height%,colours%,Mode%)
 7450IFFNallocate_std(width%,(width%*colbits%+7)DIV8,width%,0) ELSE =FALSE
 7460IFFNnew_image(0) ELSE =FALSE
 7470IFtype%=2 THEN compr$="Run length" ELSE compr$=""
 7480PROCimage_info("SUN",width%,height%,0,colbits%,Mode%,compr$,"",Flen%-32-maplength%,(width%*height%*colbits%)DIV8)
 7490PROCvar("ifp1",32+maplength%):PROCvar("imgx",width%):PROCvar("imgy",height%):PROCvar("comp",type%):IFFNunpack("SUN") ELSE =FALSE
 7500=TRUE
 7510 
 7520DEFFNpic_PCX
 7530REM Makes PCX image
 7540man%=FNib:REM Manufacture code (should be 10)
 7550IFman%<>10 THEN PROCerror(-1,"This is no standard PCX file !"):=FALSE
 7560version%=FNib:REM Version code (0/2/3/5)
 7570IFversion%<5 THEN PROCerror(-1,"I cannot handle old PCX files (only version 5 and up) !"):=FALSE
 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$("colour  grey    RGB",1+code%*8,8)
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 IFNOTFreqCalc THEN PROChour_on:SYS "Translator_PixelFreq",SprPtr%,freq%:PROChour_off:FreqCalc=TRUE:REM Calculate pixel frequencies in image sprite
14260 PROChour_on:REM Hourglass on
14270 p%=dum%:FOR c%=1 TO sc%:!p%=ImgPal%(c%):p%+=4:NEXT:REM Image's palette
14280 REM Calculate translation table and palette for display
14290 SYS "Translator_CalcTrans",sc%,freq%,dum%,mc%,transtab%,arg% TO ,,,used%
14300 p%=arg%:FOR c%=1 TO used%:ShowPal%(c%)=!p%:p%+=4:NEXT:REM Read palette
14310 ShowPal%(0)=used%:REM Colours used in display palette
14320 PROChour_off:REM Hourglass off
14330ENDIF
14340ENDPROC
14350 
14360DEFPROCautozoom
14370REM Adjust zoom factor for auto zoom (if enabled)
14380LOCAL _%
14390IFAutoZoom THEN
14400 _%=FNsprW*ZoomX:WHILE _%>ScrW%:ZoomX=ZoomX/2:_%=_%/2:ENDWHILE
14410 IFZoomX<1 THEN WHILE _%*2<=ScrW%:ZoomX=ZoomX*2:_%=_%*2:ENDWHILE
14420 _%=FNsprH*ZoomY:WHILE _%>ScrH%:ZoomY=ZoomY/2:_%=_%/2:ENDWHILE
14430 IFZoomY<1 THEN WHILE _%*2<=ScrH%:ZoomY=ZoomY*2:_%=_%*2:ENDWHILE
14440ENDIF
14450ENDPROC
14460 
14470DEFPROCplot_image(x%,y%,act%,scale%)
14480REM Plots image sprite with translation table
14490IFTransTabId THEN SYS OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale% ELSE SYS OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale%,transtab%
14500ENDPROC
14510 
14520DEFFNunpack(type$)
14530REM Unpacks image (final unpacking phase)
14540REM Returns TRUE if all is well, else FALSE
14550LOCAL c%,bpp%,pc%,b%,gf,bf,min%,max%,rgb%,s%,v%,sub%,mul,r%,g%
14560LOCAL rm%,gm%,bm%,i,ri,gi,bi,Out
14570IFFree%>2*1024 THEN IFFNallocate(B_infile%,Free%-16) ELSE PROCerror(-1,"I have no room for the input file buffer !"):=FALSE
14580bpp%=InPal%(0):REM Bits per pixel input
14590PROCvar("inbi",bpp%):REM Input (image) bits per pixel
14600PROCvar("bwhi",BlackWhite):REM B/w flag
14610PROCvar("espr",ErrSpread):REM Error spreading flag
14620PROCvar("zigz",ZigZag):REM Zig zag flag
14630PROCvar("clfh",0):REM No Clear (yet)
14640PROCvar("outx",OutX%):PROCvar("outy",OutY%):REM Output resolution
14650PROCvar("ymul",YMul%):PROCvar("ydiv",YDiv%):REM Scaling factors Y
14660PROCvar("xmul",XMul%):PROCvar("xdiv",XDiv%):REM Scaling factors X
14670IFPercent THEN IFNOTBlanking THEN PROCvar("perc",1):PROCvar("pinc",(100<<16)/ImgH%) ELSE PROCvar("perc",0):REM Hourglass percentage
14680REM Set palette (if relevant, i.e. not pure RGB input)
14690IFbpp%<=8 THEN FOR c%=0 TO 2^bpp%-1:palrgb%!(c%<<2)=InPal%(c%+1):NEXT
14700FOR b%=0 TO 31:buffer%!(b%*8)=Buffer%(b%,0):buffer%!(b%*8+4)=Buffer%(b%,1):NEXT:REM Buffer locations/sizes
14710IFOutMode=1 THEN pc%=0 ELSE pc%=OutPal:REM Select palette code
14720REM Build R/G/B intensity map for gamma/invert/rgbbits/b&w
14730IFGamma THEN IFGammaF>0 THEN gf=1/GammaF ELSE gf=0:REM Gamma factor
14740IFBlack THEN IFBlackF<>0 THEN bf=BlackF ELSE bf=0:REM Black correction
14750IFRange THEN
14760 IFbpp%<=8 THEN
14770  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
14780 ELSE SYS "Translator_UnpackPre",palrgb%,pc%,buffer%,32,intmap%
14790  PROCunpack_phase(type$,3):REM Gather info on RGB range
14800  min%=FNvar("inmi"):max%=FNvar("inma"):REM Get min/max intensity
14810 ENDIF
14820 sub%=min%:mul=255/(max%-min%):REM Range correction factors
14830 RangeMin%=min%:RangeMax%=max%:REM Remember min/max
14840 $IMIrn%=STR$(RangeMin%)+"-"+STR$(RangeMax%)+" ("+STR$(INT((max%-min%)/2.55))+"%)":REM Set range info
14850ELSE $IMIrn%="Unknown"
14860ENDIF
14870r%=(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
14880rg=0.300:gg=0.586:bg=0.114:REM Greyvalues of R/G/B
14890FOR c%=0 TO 255
14900IFRange THEN i=(c%-sub%)*mul ELSE i=c%
14910IFbf=0 ELSE i=i+bf:IFi<0 THEN i=0 ELSE IFi>255 THEN i=255
14920IFgf>0 THEN IFi>0 THEN i=((i/255)^gf)*255
14930IFInvertRGB THEN i=255-i
14940ri=i AND rm%:gi=i AND gm%:bi=i AND bm%
14950IFBlackWhite THEN ri=ri*rg:gi=gi*gg:bi=bi*bg
14960intmap%!(c%<<2)=(ri<<16)+(gi<<8)+bi
14970NEXT
14980GreyRgb=(bpp%>8) AND BlackWhite:REM Flag to indicate grey RGB output
14990SYS "Translator_UnpackPre",palrgb%,pc%,buffer%,32,intmap% TO ,truepal%
15000ImgPal%()=0:ImgPal%(0)=SprColbits%:FOR c%=0 TO 2^SprColbits%-1:ImgPal%(c%+1)=palrgb%!(c%<<2):NEXT:REM Read image palette
15010IFClearFile THEN
15020 Out=OPENOUT(ClearSave$):REM Open Clear file
15030 PROCostring(Out,"Translator"):PROCobf(Out,0):PROCowlf(Out,tversion%):PROCowlf(Out,OutX%):PROCowlf(Out,OutY%):REM Header
15040 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
15050 IFImgBits%<=8 THEN FOR c%=0 TO 2^ImgBits%-1:rgb%=truepal%!(c%<<2):PROCotbf(Out,rgb%):NEXT:REM Set palette to 'true' palette
15060 PROCvar("clfh",Out):PROCvar("clfp",PTR#Out):PROCvar("clgr",GreyRgb):REM Inform clear writer on outfile
15070 bytes%=OutX%*OutY%:IFImgBits%>8 THEN bytes%=3*bytes%
15080 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
15090ELSE PROCvar("clfh",0):REM Clear off
15100ENDIF
15110PROCunpack_phase(type$,1):REM Execute final unpack phase
15120IFClearFile THEN
15130 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
15140ENDIF
15150=TRUE
15160 
15170DEFPROCunpack_phase(type$,phase%)
15180REM Executes unpack phase, blanks screen if enabled
15190PROCvar("phas",phase%):REM Set unpacking phase
15200$dum%=LEFT$(type$+"    ",4):REM Type to unpack
15210IFBlanking THEN SYS "Translator_VideoDMA",0:REM Blank if enabled
15220SYS "Translator_Unpack",!dum%:REM Execute unpack phase
15230IFBlanking THEN SYS "Translator_VideoDMA",1:REM Re-enable if blanked
15240IFphase%<>1 THEN result%=0 ELSE result%=FNvar("resu"):REM Result code
15250CASE result% OF
15260 WHEN 0 : REM All OK
15270 WHEN 1,2,3 : PROCerror(-1,"File is too short ! Image may be corrupted !"):REM Out of data
15280 WHEN 16 : PROCerror(-1,"Error in TIFF file : strip(s) missing ! Image may be corrupted !"):REM Out of TIFF strips
15290 OTHERWISE : PROCerror(-1,"Some mysterious error #"+STR$result%+"occured ! Image may be corrupted !"):REM Huh ?
15300ENDCASE
15310ENDPROC
15320 
15330DEFPROCset_palette(palette%)
15340REM Sets a palette according to palette%
15350REM  0 - Desktop palette
15360REM  1 - Image's own palette (when possible)
15370LOCAL c%
15380CASE palette% OF
15390 WHEN 0 : IFFNlog2BPP=3 THEN SYS "Translator_Palette",8,dum%,2:SYS "Translator_SetPalette",256,dum% ELSE SYS WSetP%,,wimppal
15400 WHEN 1 : FOR c%=0 TO ShowPal%(0)-1:dum%!(c%<<2)=ShowPal%(c%+1):NEXT:SYS "Translator_SetPalette",ShowPal%(0),dum%
15410ENDCASE
15420ENDPROC
15430 
15440DEFPROCstdpal(RETURN Pal%(),bpp%)
15450REM Sets a palette to standard Archimedes 2,4,16 or 256 colour palette
15460LOCAL c%,p%
15470SYS "Translator_Palette",bpp%,dum%,2:REM Calculate standard palette
15480p%=dum%:REM Pointer
15490FOR c%=1 TO 2^bpp%:Pal%(c%)=!p%:p%+=4:NEXT
15500Pal%(0)=bpp%
15510ENDPROC
15520 
15530DEFPROCgreypal(RETURN Pal%(),bpp%,dir%)
15540REM Sets a palette to greyscale for bpp% bits per pixel
15550REM dir%=1 gives black to white, dir%=-1 gives white to black
15560LOCAL cols%,step,i,c%
15570cols%=2^bpp%:step=255/(cols%-1):i=0
15580IFdir%=-1 THEN step=-step:i=255 ELSE i=0
15590FOR c%=1 TO 2^bpp%:Pal%(c%)=i OR i<<8 OR i<<16:i+=step:NEXT
15600Pal%(0)=bpp%
15610ENDPROC
15620 
15630DEFPROCmode_info(mode%,RETURN width%,RETURN height%,RETURN colours%)
15640REM Returns information about a particular mode
15650colours%=2^(2^FNmode_var(mode%,9)):width%=1+FNmode_var(mode%,11):height%=1+FNmode_var(mode%,12):REM Return info
15660ENDPROC
15670 
15680DEFPROCinvalidate_screen
15690REM Invalidates entire screen
15700SYS WForce%,-1,0,0,ScrW%,ScrH%:REM Force redraw whole screen
15710ENDPROC
15720 
15730DEFPROCinvalidate_image
15740REM Invalidates image
15750Img=FALSE:FreqCalc=FALSE:REM Reset image flags
15760ENDPROC
15770 
15780DEFPROCnew_window(handle%)
15790REM Redraws entire window area
15800PROCredraw_window(handle%,TRUE)
15810ENDPROC
15820 
15830DEFPROCredraw_window(handle%,force)
15840REM Redraws window with handle handle%
15850REM If force=TRUE the window's entire work area is updated
15860LOCAL more%,nx%,ny%,vw%,vh%,x%,y%,ox%,oy%,z
15870LOCAL x1%,x2%,x3%,x4%,y1%,y2%,y3%,y4%,w1%,w2%,w3%,w4%,h1%,h2%,h3%,h4%
15880!block=handle%:REM Set window's handle
15890IFforce THEN block!4=0:block!8=0:block!12=&7FFF:block!16=&7FFF:SYS WUpdateW%,,block TO more% ELSE SYS WRedrawW%,,block TO more%
15900vw%=block!12+Xstep%-block!4:vh%=block!16+Ystep%-block!8:REM Visible size
15910CASE handle% OF
15920 WHEN win_img% : REM Redraw image window
15930  nx%=(block!4-block!20):ny%=(block!16-block!24):REM Work area origin
15940  IFZoomX>=1 THEN !arg%=ZoomX:arg%!8=1 ELSE !arg%=1:arg%!8=1/ZoomX
15950  IFZoomY>=1 THEN arg%!4=ZoomY:arg%!12=1 ELSE arg%!4=1:arg%!12=1/ZoomY
15960  IF(vw%<=160)OR(vh%<=160) THEN x%=block!4:y%=block!8 ELSE vw%=0
15970  WHILE more%:IFvw%>0 THEN SYS WSetCol%,0:RECTANGLE FILL x%,y%,vw%,vh%
15980  PROCplot_image(nx%,ny%,0,arg%):REM Display image sprite
15990  SYS WGetR%,,block TO more%:ENDWHILE:REM Get next rectangle
16000 WHEN win_zoom% : REM Redraw zoom window
16010  x%=block!4:y%=block!8:REM Visible area coordinates
16020  z=ZoomW/ZoomD:REM Zoom factor
16030  ox%=vw%/2-ZoomWX%*z*Xstep%:oy%=vh%/2-ZoomWY%*z*Ystep%:REM Offset
16040  nx%=SprW%*z*Xstep%:ny%=SprH%*z*Ystep%:REM Total externals
16050  w1%=0:w2%=0:w3%=0:w4%=0:REM No uncovered borders yet
16060  IFox%>0 THEN x1%=x%:y1%=y%:w1%=ox%-Xstep%:h1%=vh%
16070  IF(ox%+nx%)<vw% THEN x2%=x%+ox%+nx%:y2%=y%:w2%=vw%-(ox%+nx%):h2%=vh%
16080  IFoy%>0 THEN x3%=x%:y3%=y%:w3%=vw%:h3%=oy%-Ystep%
16090  IF(oy%+ny%)<vh% THEN x4%=x%:y4%=y%+oy%+ny%:w4%=vw%:h4%=vh%-(oy%+ny%)
16100  !arg%=ZoomW:arg%!8=ZoomD:arg%!4=ZoomW:arg%!12=ZoomD:REM Zoom factors
16110  nx%=x%+ox%:ny%=y%+oy%:REM Plot coordinates
16120  WHILE more%:IFw1%>0 THEN RECTANGLE FILL x1%,y1%,w1%,h1%
16130  IFw2%>0 THEN RECTANGLE FILL x2%,y2%,w2%,h2%
16140  IFw3%>0 THEN RECTANGLE FILL x3%,y3%,w3%,h3%
16150  IFw4%>0 THEN RECTANGLE FILL x4%,y4%,w4%,h4%
16160  PROCplot_image(nx%,ny%,0,arg%):REM Display image sprite
16170  SYS WGetR%,,block TO more%:ENDWHILE:REM Get next rectangle
16180ENDCASE
16190ENDPROC
16200 
16210DEFPROCopen_window(handle%,info)
16220REM Opens window with handle handle%
16230REM If info>0 then info is ready at info, else get info, if -1 pop at top
16240LOCAL b%,px%,py%,_%,xs%,ys%
16250IFinfo>0 THEN
16260 FOR b%=0 TO 31 STEP 4:block!b%=info!b%:NEXT
16270ELSE !block=handle%:SYS WGetWS%,,block
16280 IFinfo=-1 THEN block!28=-1:REM Pop up at top if requested
16290 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
16300ENDIF
16310SYS WOpenW%,,block
16320ENDPROC
16330 
16340DEFPROCclose_window(handle%)
16350REM Closes window with handle handle%
16360!block=handle%:SYS WCloseW%,,block
16370ENDPROC
16380 
16390DEFFNpoll(mask%)
16400REM Returns poll reason code, masking with mask%, data at poll
16410LOCAL reasoncode
16420SYS WPoll%,mask%,poll TO reasoncode
16430=reasoncode
16440 
16450DEFPROCinitialise
16460REM Initialises program
16470SYS "Wimp_ReadPalette",,wimppal:REM Read current WIMP palette
16480PROChour_on:PROCinit_module:PROChour_off:REM Initialise module
16490SYS "OS_CheckModeValid",18 TO _%:MultiSync=(_%<>-1):REM Monitor type
16500applname$="Translator":REM Name of application
16510SYS "Wimp_Initialise",200,&4B534154,applname$ TO version,TaskHandle%
16520IFversion<200 THEN ERROR 1,"I cannot work with WIMP pre-2.00"
16530W%=FNswi_to_nr("Wimp_Initialise"):REM Base SWI number
16540WCreateW%=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
16550WSetCa%=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
16560OSSpop%=FNswi_to_nr("OS_SpriteOp"):OSReadVV%=FNswi_to_nr("OS_ReadVduVariables"):OSReadMV%=FNswi_to_nr("OS_ReadModeVariable")
16570SYS WReadP%,,wimppal:REM Read current WIMP palette
16580tf%=7:tb%=2:wf%=7:wb%=0:si%=1:so%=3:REM Window/menu colours
16590!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
16600REM Load sprites for icons
16610!iconsprites=2048:iconsprites!4=0:iconsprites!8=16:iconsprites!12=16
16620SYS OSSpop%,10+256,iconsprites,"<Translator$Dir>.Sprites"
16630REM Load templates
16640SYS "Wimp_OpenTemplate",,"<Translator$Dir>.Templates"
16650ic=icondata:ie=icondend:REM Indirected icon data workspace
16660$dum%="save":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16670window!(88+24)=1:REM WIMP areaptr
16680SYS WCreateW%,,window TO win_file%
16690SAVsn%=FNiconaddr(win_file%,0):SAVfn%=FNiconaddr(win_file%,1)
16700$dum%="info":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16710SYS WCreateW%,,window TO win_info%
16720$dum%="filetypes":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16730SYS WCreateW%,,window TO win_filet%
16740$dum%="imageinfo":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16750SYS WCreateW%,,window TO win_iminfo%
16760w%=win_iminfo%:IMIfn%=FNiconaddr(w%,1):IMIit%=FNiconaddr(w%,3):IMIin%=FNiconaddr(w%,5):IMIif%=FNiconaddr(w%,7):IMIco%=FNiconaddr(w%,9)
16770IMIwh%=FNiconaddr(w%,11):IMIsc%=FNiconaddr(w%,13):IMIbp%=FNiconaddr(w%,15):IMIsm%=FNiconaddr(w%,17):IMIrn%=FNiconaddr(w%,19)
16780$dum%="rgbbits":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16790FOR i%=3 TO 5:ap%=window+88+i%*32+24:!ap%=iconsprites:NEXT:REM Areaptrs
16800SYS WCreateW%,,window TO win_rgbbits%
16810$dum%="image":IMWtt%=ic:SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16820window?35=&FF:REM Transparent background
16830SYS WCreateW%,,window TO win_img%
16840$dum%="zoom":SYS WLoadT%,,window,ic,ie,-1,dum%,0 TO ,,ic
16850SYS WCreateW%,,window TO win_zoom%
16860SYS "Wimp_CloseTemplate"
16870REM Load menu structure
16880SYS "OS_File",5,"<Translator$Dir>.MenuStruct" TO ,,,,slen%
16890DIM menustruct% slen%
16900SYS "OS_File",255,"<Translator$Dir>.MenuStruct",menustruct%
16910SYS "OS_File",5,"<Translator$Dir>.MenuData" TO ,,,,dlen%
16920DIM menudata% dlen%
16930SYS "OS_File",255,"<Translator$Dir>.MenuData",menudata%
16940FOR a%=menustruct%+4 TO a%+slen%-8 STEP 4
16950d%=!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%
16960NEXT
16970Vars=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$
16980d%=EVAL("FNcvar("+vn$+","+STR$vv%+")"):ENDWHILE:CLOSE#Vars
16990menumain%=menustruct%+!menustruct%
17000REM Init variables
17010SaveKind$="":Img=FALSE:SavePal=TRUE:ZoomX=1:ZoomY=1:ImageSpr$="image":Flen%=0:Load$="":SameLeaf=FALSE
17020DataSaveRef%=-1:DataLoadRef%=FALSE:YMul%=1:YDiv%=1:XMul%=1:XDiv%=1:ClearFile=FALSE:SaveSpr$="Image":SaveClear$="Clear":SprSave$="":ClearSave$=""
17030F1%=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
17040BlackWhite=FALSE:TransTabId=FALSE:ImgMode%=0:GIFScan=FALSE:RGBbits%=&080808:Blanking=FALSE:ZigZag=TRUE:InvertRGB=FALSE:FreqCalc=FALSE:OutMode=1:OutPal=1:InFile$="":InType%=0
17050Percent=TRUE:ActLoad=FALSE:ActRotate=FALSE:ViewMode=FALSE:PreMode=MODE:ZoomWin=FALSE:ZoomD=4:ZoomW=ZoomD:DivIsInX=FALSE:DivIsInY=FALSE
17060OutX%=1:OutY%=1:OutMode%=15:GammaF=1:Gamma=FALSE:BlackF=0:Black=FALSE:Range=FALSE:RangeMin%=0:RangeMax%=0:From%=1:GreyRgb=FALSE
17070B_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
17080IFFNload_status:REM Load default status (if any)
17090ENDPROC
17100 
17110DEFFNcvar(RETURN var%,val%)
17120REM Creates new variable var%, value val%
17130var%=val%:=0
17140 
17150DEFFNiconaddr(win%,ico%)
17160REM Returns indirected icon's data address
17170!block=win%:block!4=ico%:SYS WGetIS%,,block:REM Get icon info
17180=block!28
17190 
17200DEFFNload_status
17210REM Loads default status (if any)
17220REM Returns TRUE if succesful, else FALSE (i.e. status file not found)
17230Status=OPENIN("<Translator$Dir>.Status"):IFStatus=0 THEN =FALSE
17240INPUT#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
17250INPUT#Status,Range,SameLeaf:CLOSE#Status
17260IFErrSpread=-1 THEN ErrSpread=1
17270=TRUE
17280 
17290DEFFNums
17300REM Returns string representing current user mode set
17310=STR$(UserModeSet%(1))+","+STR$(UserModeSet%(2))+","+STR$(UserModeSet%(3))+","+STR$(UserModeSet%(4))
17320 
17330DEFFNavailable_mode(mode%)
17340REM Checks if mode% is a valid WIMP mode and available on monitor
17350IFmode%=3 OR mode%=6 OR mode%=7 OR mode%=23 THEN =FALSE
17360IFmode%<0 OR mode%>28 THEN =FALSE
17370IFmode%=24 OR mode%<18 THEN =TRUE ELSE =MultiSync
17380 
17390DEFFNalign(val%)
17400REM Returns next-up word aligned value of val%
17410=(val%+3)ANDNOT3
17420 
17430DEFFNreadpalval(rgb%)
17440REM Returns 'OS_ReadPalette' word from &RGB value
17450=((rgb%AND&FF)<<24)+((rgb%AND&FF00)<<8)+((rgb%AND&FF0000)>>8)+&10
17460 
17470DEFFNstring(addr%)
17480REM Returns CTRL-char terminated string at addr%
17490LOCAL _%,_c%,_$
17500_%=-1:REPEAT _%+=1:UNTIL addr%?_%<32
17510_c%=addr%?_%:addr%?_%=13:_$=$addr%:addr%?_%=_c%
17520=_$
17530 
17540DEFFNupstring(m$)
17550REM Returns upper case m$
17560LOCAL c%,v%,u$
17570u$=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)
17580NEXT:=u$
17590 
17600DEFPROCmouse(RETURN x%,RETURN y%,RETURN but%)
17610REM Returns x,y and button state of mouse
17620MOUSE x%,y%,but%
17630ENDPROC
17640 
17650DEFFNlog2BPP
17660REM Returns Log2BPP for current mode
17670=FNmode_var(MODE,9)
17680
17690DEFFNcolstobpp(cols%)
17700REM Returns bits per pixel needed for cols% colours
17710IFcols%<=1 THEN =1 ELSE =FNceil(LOG(cols%)/LOG2)
17720 
17730DEFFNvdu_var(varnr%)
17740REM Returns VDU variable varnr%
17750!arg%=varnr%:arg%!4=-1:SYS OSReadVV%,arg%,arg%+8:=arg%!8
17760 
17770DEFFNmode_var(mode%,varnr%)
17780REM Returns mode mode% variable varnr%
17790LOCAL result%
17800SYS OSReadMV%,mode%,varnr% TO ,,result%:=result%
17810 
17820DEFFNOS_var(_$)
17830REM Attempts to return OS-var's string value
17840LOCAL _r$,_l%
17850SYS "XOS_ReadVarVal",_$,STRING$(100," "),100,0,3 TO ,_r$,_l%
17860_r$=LEFT$(_r$,_l%):=_r$
17870 
17880DEFFNswi_to_nr(swi$)
17890REM Returns SWI number of SWI call swi$
17900LOCAL swinr%
17910SYS "XOS_SWINumberFromString",,swi$ TO swinr%
17920=swinr%
17930 
17940DEFPROCerror(errnr,errmsg$)
17950REM Handles errors
17960LOCAL but%,opt%
17970SYS "Translator_VideoDMA",1:REM Ensure video DMA enabled
17980IFerrnr=-1 THEN errnr=1:opt%=1 ELSE opt%=3
17990!err=errnr:$(err+4)=errmsg$
18000SYS "Translator_Palette",2^FNlog2BPP,dum%,1:REM Read current palette
18010PROCset_palette(0):REM Select WIMP palette
18020SYS WReport%,err,opt%,applname$ TO ,but%
18030IFbut%<>1 THEN PROCdie
18040SYS "Translator_SetPalette",2^(2^FNlog2BPP),dum%:REM Reset palette
18050ENDPROC
18060 
18070DEFFNsprW
18080REM Returns image sprite's width in OS pixels in current mode
18090=SprW%*Xstep%
18100 
18110DEFFNsprH
18120REM Returns image sprite's height in OS pixels in current mode
18130=SprH%*Ystep%
18140 
18150DEFFNmax(v1%,v2%)
18160REM Returns maximum of v1% and v2%
18170IFv1%>v2% THEN =v1% ELSE =v2%
18180 
18190DEFFNmin(v1%,v2%)
18200REM Returns minimum of v1% and v2%
18210IFv1%<v2% THEN =v1% ELSE =v2%
18220 
18230DEFFNceil(v)
18240REM Returns 'ceiling' of value (i.e. round up)
18250IFv=INTv THEN =v ELSE =INTv+1
18260 
18270DEFPROCdie
18280REM Tidies up and exits
18290PROCfinish:REM Tidy up
18300SYS "OS_Exit"
18310ENDPROC
18320 
18330DEFPROCfinish
18340REM Tidies up
18350SYS "Translator_TaskQuit" TO tasks%:IFtasks%<=0 THEN SYS "OS_Module",4,"Translator":REM Kill module if no other tasks are using it
18360SYS WSetP%,,wimppal:REM Reset palette
18370SYS "Wimp_CloseDown",TaskHandle%,&4B534154
18380ENDPROC
18390 
18400DEFFNmode(width%,height%,colours%)
18410REM Returns, if possible, a standard screen mode that is most suitable for
18420REM displaying a picture of (width%)x(height%) pixels in colours% colours
18430REM Returns -1 if number of colours greater than 256
18440LOCAL arccols%,arcwidth%,archeight%,mode%
18450IFOutMode=2 THEN =MODE
18460REM Range check for colours, width and height
18470IFcolours%>256 THEN =-1:REM Impossible !
18480REM Determine closest colours/width/height
18490IFcolours%>16 THEN arccols%=256 ELSE IFcolours%>4 THEN arccols%=16 ELSE IFcolours%>2 THEN arccols%=4 ELSE arccols%=2
18500IFwidth%>640 THEN arcwidth%=1056 ELSE IFwidth%>320 THEN arcwidth%=640 ELSE arcwidth%=320
18510IFheight%<=256 THEN archeight%=256 ELSE archeight%=512
18520CASE arccols% OF
18530 WHEN 2 : IFarcheight%=512 THEN mode%=18 ELSE mode%=0
18540 WHEN 4 : IFarcheight%=512 THEN mode%=19 ELSE IFarcwidth%<=320 THEN mode%=1 ELSE mode%=8
18550 WHEN 16 : IFarcheight%=512 THEN mode%=20 ELSE IFarcwidth%<=320 THEN mode%=9 ELSE IFarcwidth%=640 THEN mode%=12 ELSE mode%=16
18560 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
18570ENDCASE
18580=mode%
18590 
18600DEFFNtimes(value%)
18610REM Returns STR$value% with 'plural extension'
18620LOCAL _d%
18630_d%=value%MOD10:REM Last digit determines extension
18640IF(((value%MOD100)DIV10)=1)OR(_d%>3)OR(_d%=0) THEN =STR$value%+"th"
18650CASE _d% OF
18660 WHEN 1 : =STR$value%+"st"
18670 WHEN 2 : =STR$value%+"nd"
18680 WHEN 3 : =STR$value%+"rd"
18690ENDCASE
18700
18710DEFPROCread24pal(fh%,RETURN Pal%(),cols%,ro%,go%,bo%,elen%)
18720REM Reads 24-bit palette from input file
18730REM Entries are cols%*elen%-byte, R,G,B at r0%/go%/bo% offsets
18740LOCAL p%,c%,m%
18750SYS "OS_GBPB",4,fh%,dum%,cols%*elen%:REM Read entire palette
18760p%=dum%:REM Pointer
18770FOR c%=1 TO cols%:Pal%(c%)=p%?ro%<<16 OR p%?go%<<8 OR p%?bo%:p%+=elen%:NEXT
18780ENDPROC
18790 
18800DEFFNistring(fh%,len%)
18810REM Returns string of from file
18820REM If len%>0 the number of characters is len%
18830REM If len%=-1 the string is CTRL-character terminated
18840LOCAL _%,r$,c%
18850_$="":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
18860=r$
18870 
18880DEFPROCiskip(fh%,amount%)
18890REM Skips amount% bytes in file
18900PTR#fh%=amount%+PTR#fh%
18910ENDPROC
18920 
18930DEFPROCiptr(fh%,newptr%)
18940REM Sets new offset in file
18950PTR#fh%=newptr%
18960ENDPROC
18970 
18980DEFFNiptr(fh%)
18990REM Returns current offset in file
19000=PTR#fh%
19010 
19020DEFFNilen(fh%)
19030REM Returns length of file
19040=EXT#fh%
19050 
19060DEFFNieof(fh%)
19070REM Returns end-of-file status of file
19080=EOF#fh%
19090 
19100DEFPROCiclose
19110REM Closes all input files
19120IFF1%<>0 THEN SYS "XOS_Find",0,F1%:F1%=0
19130IFF2%<>0 THEN SYS "XOS_Find",0,F2%:F2%=0
19140ENDPROC
19150 
19160DEFPROCiget(fh%,adr%,amount%)
19170REM Returns amount% bytes at adr% from file
19180SYS "OS_GBPB",4,fh%,adr%,amount%
19190ENDPROC
19200
19210DEFFNib:=BGET#F1%
19220DEFFNidb:=BGET#F1%<<8 OR BGET#F1%
19230DEFFNitb:=BGET#F1%<<16 OR BGET#F1%<<8 OR BGET#F1%
19240DEFFNiwb:=BGET#F1%<<24 OR BGET#F1%<<16 OR BGET#F1%<<8 OR BGET#F1%
19250DEFFNidl:=BGET#F1% OR BGET#F1%<<8
19260DEFFNitl:=BGET#F1% OR BGET#F1%<<8 OR BGET#F1%<<16
19270DEFFNiwl:=BGET#F1% OR BGET#F1%<<8 OR BGET#F1%<<16 OR BGET#F1%<<24
19280DEFFNibf(fh%):=BGET#fh%
19290DEFFNiwlf(fh%):=BGET#fh% OR BGET#fh%<<8 OR BGET#fh%<<16 OR BGET#fh%<<24
19300
19310DEFPROCobf(fh%,val%):BPUT#fh%,val%:ENDPROC
19320DEFPROCotbf(fh%,val%):BPUT#fh%,val%>>>16:BPUT#fh%,val%>>>8:BPUT#fh%,val%:ENDPROC
19330DEFPROCotlf(fh%,val%):BPUT#fh%,val%:BPUT#fh%,val%>>>8:BPUT#fh%,val%>>>16:ENDPROC
19340DEFPROCowlf(fh%,val%):BPUT#fh%,val%:BPUT#fh%,val%>>>8:BPUT#fh%,val%>>>16:BPUT#fh%,val%>>>24:ENDPROC
19350
19360DEFPROCostring(fh%,w$)
19370REM Outputs string to file
19380LOCAL i%
19390FOR i%=1 TO LENw$:BPUT#fh%,ASCMID$(w$,i%,1):NEXT
19400ENDPROC
19410
19420DEFPROCinit_module
19430REM Initialises module
19440SYS "Translator_MakeMaps":REM Initialise maps
19450SYS "Translator_TaskStart":REM Register task
19460ENDPROC
19470 
19480DEFPROCvar(varname$,value%)
19490REM Writes module variable
19500$dum%=varname$:SYS "Translator_SetVariable",!dum%,value%
19510ENDPROC
19520 
19530DEFFNvar(varname$)
19540REM Reads module variable
19550LOCAL value%
19560$dum%=varname$:SYS "Translator_ReadVariable",!dum% TO value%
19570=value%
19580 
19590DEFFNOSvar(name$)
19600REM Attempts to return OS-var's string value
19610LOCAL _r$,_l%
19620_r$=STRING$(100," "):SYS "XOS_ReadVarVal",name$,_r$,LEN_r$,0,3 TO ,_r$,_l%
19630=LEFT$(_r$,_l%)
19640

� >!RunImage
K��������������������������������������������������������������������
3� Converts foreign graphics files to Archimedes
(-� Version date : Sat,16 Mar 1991.18:36:55
2� � 1991 Zeridajh software
<� by John Kortink
FK��������������������������������������������������������������������
P1� � �0:�'"Error"''"'";�$;"' (code ";�;")"'':�
Z-tversion%=636:� 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)
�5� arg% 1024,dum% 2048,transtab% 256,Buffer%(32,1)
�5� buffer% 32*8,freq% 1024,palrgb% 1024,hambas% 64
�+� outpal% 1024,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
�2LowHimem%=Heap%+LowHeap%:� Lowest pseudo HIMEM
�>�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 � ActLoad=�
-� � �error(�,�$+" (code "+Þ+")"):�iclose
� Poll and action
"D�DataLoadRef% � pollmask%=48 � pollmask%=49:� No nulls if wasted
,Ȏ �poll(pollmask%) �
6 � 0 : �null
@ � 1 : �redraw
J � 2 : �open
T � 3 : �close
^
  �Kill �
h   Kill=�:� Reset flag
r9   �=LowHimem%:� Image killed, memory back to minimum
|+   �new_slot:�=MidHimem%:� New slotsize
�  �
� � 6 : �mouseclick
� � 7 : �dragdrop
� � 8 : �key
� � 9 : �menuselect
� � 17,18 : �message
��
�
Ȏ � �
�! � ActLoad : � Load new image
�  ActLoad=�:� Reset flag
�.  �=&1000000:�new_slot:�=MidHimem%:� Claim
�9  Loaded=�load(Ltype%,Lname$):� Attempt to load image
�:  �Img � �=(SprEnd%+1023)��1023 � �=MidHimem%:� Return
*  �new_slot:�=MidHimem%:� New slotsize
  �Loaded �
.   �set_mode(ImgMode%):� Select image mode
&+   ZoomX=1:ZoomY=1:� Reset zoom factors
0C   �AutoPal � �set_palette(1):� Select image palette if enabled
:/   �new_image_window:� Open window on image
D  �
N! � ActRotate : � Rotate image
X  ActRotate=�:� Reset flag
b  �=&1000000:� Claim
l  �hour_on:� Hourglass on
v>  �var("rotb",SprEnd%):�var("rots",�-SprEnd%):� Set buffer
�4  ș "Translator_Rotate",SprPtr%:� Rotate sprite
�%  �=(SprEnd%+1023)��1023:� Return
�  �hour_off:� Hourglass off
�>  Sprite%!12=Sprite%!8+!(Sprite%+Sprite%!8):Ȕ SprH%,SprW%
�@  �new_image_window:�new_window(win_img%):� New image window
��
�D� �TXA:� Sorry, I have to. Current BASIC restrictions with END=.
� 
���new_slot
�� Slot changed, reset info
�,HeapSize%=�-MidHimem%:� New size of heap
��
�
��menuselect
/ActRotate=�:� Flag returned to rotate image
?ș 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$)
6D     � "Reload last","Next image","Previous image" : � Reloaders
@      Ȏ �select3$,1) �
J       � "N" : ImageNr%+=1
T,       � "P" : �ImageNr%>1 � ImageNr%-=1
^      �
hj      �InFile$<>"" � Lname$=InFile$:Ltype%=InType%:ActLoad=� � �error(-1,"Load an image file first !")
r*     � "Percentage" : Percent=�Percent
|	    �
�  �
�, � "Manipulate" : � Manipulation options
�  Ȏ select2$ �
�#   � "Rotate" : � Rotate sprite
�%    ActRotate=�:� Set rotate flag
�"   � "Mirror" : � Mirror image
�;    �var("imgx",SprW%):�var("imgy",SprH%):� Module info
�    �hour_on:� Hourglass on
�i    �select3$="x" � ș "Translator_MirrorX",SprPtr% � ș "Translator_MirrorY",SprPtr%:� Mirror sprite
�!    �hour_off:� Hourglass 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$ �
�/   � "Save" : � Save whole or part of image
    Ȏ select3$ �
/     � "Include palette" : SavePal=�SavePal
/     � "Same leafname" : SameLeaf=�SameLeaf
 7      : SaveKind$=select3$:� Remember type of save
*K       $SAVfn%=SaveSpr$:$SAVsn%="file_ff9":� Set file window for sprite
48       �open_window(win_file%,-1):� Open file window
>2       ș WSetCa%,win_file%,1,,,-1,�(SaveSpr$)
H	    �
R1   � "Image palette" : � Select image palette
\    �set_palette(1)
f)   � "Status" : � Manipulate defaults
p    Ȏ select3$ �
z�     � "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)
	$  �close_window(win_file%)
	.(  �close_window(win_zoom%):ZoomWin=�
	8'  �ViewMode � �mode_change(PreMode)
	B  Kill=�
	L � win_zoom% : ZoomWin=�
	V�
	`�
	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
"�(win%=win_file%) � (ico%=1) �
( Ȏ char% �
2  � 13 : � Return pressed
<J   �error(-1,"Please drag the sprite file icon to a directory viewer")
F  � 27 : � Escape pressed
P   �close_window(win_file%)
Z �
d�
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
"@   DataLoadRef%=poll!8:� Await a DataLoadAck, remember myref
,  �
6. � 3,5 : � DataLoad/Open : attempt to load
@B  type%=poll!40:name$=�string(poll+44):� Filetype and filename
J  Ȏ type% �
TT   � &FF9,&DE2,&DFA,&D58,&004 : �msgnr%=3 � type%=�image_type(name$,�) � type%=0
^,    type%=�image_type(name$,(msgnr%=3))
h  �
r  �type%>0 �
|I   poll!12=poll!8:poll!16=4:ș WSendMsg%,17,poll,poll!4:� DataLoadAck
�9   Lname$=name$:Ltype%=type%: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
�
�
 
&��mouseclick
0?but%=poll!8:win%=poll!12:ico%=poll!16:� Buttons/window/icon
:
Ȏ win% �
D � -2 : � Click on iconbar
N  �ico%=Iiconbar% �
X   � Iconbar icon clicked
b   Ȏ but% � 7 �
l*    � 2 : �mouse(x%,_%,_%):m%=menuico%
v�     $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

   Ȏ but% � 7 �

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

4   � 2 : ZoomW=ZoomD

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

H  �

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

\) � win_file% : � Click on file window

f  �ico%=0 �

p   Ȏ but% � &7F �

z9    � 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
$!ș WCreateM%,,-1:� Close menu
.,ș WGetPI%,,block:� Get pointer position
8Gdropwin%=block!12:dropico%=block!16:� Window/icon where box dropped
B(save$=�string(SAVfn%):� Get leafname
Lo�$SAVsn%="file_ff9" � SaveSpr$=save$:ft%=&FF9 � SaveClear$=save$:ft%=&690:� Remember leafname, set filetype
V�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
`;ș WSendMsg%,17,block,dropwin%,dropico%:� Send DataSave
j6DataSaveRef%=block!8:� Remember myref for DataSave
t0�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,&696,&697,&698,&699,&69A,&69B,&69C,&69D,&69E,&69F,&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 � 8:id$+=�(�#Head):�
�  �id$,6)="GIF87a" � type%=&695 � �(�id$,4)="FORM") � (�id$,4)="ILBM") � type%=&693 � �id$,4)=�&59+�&A6+�&6A+�&95 � type%=&696
�  �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
2X  �type%<>0 � �#Head=&41:id$="":� i%=1 � 4:id$+=�(�#Head):�:�id$="PNTG" � type%=&694
<]  �type%<>0 � �#Head=&10:id$="":� i%=1 � 9:id$+=�(�#Head):�:�id$="MILLIPEDE" � type%=&69A
F  �#Head:� Close image file
P�
Z
=type%
d 
nݤload(type%,name$)
x� 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:� Hourglass on
�B�Percent � ș "Hourglass_Percentage",0:� Init percentage if on
�?�win_img%>0 � �close_window(win_img%):� Old image discarded
�?�invalidate_image:� New image to come, invalidate old image
�%PreMode=�:� Remember current mode
�!�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
, � &D58 : Ok=�pic_RENDER
6 � &004 : Ok=�pic_AIM
@ � &690 : Ok=�pic_CLEAR
J � &691 : Ok=�pic_DEGAS
T � &692 : Ok=�pic_IMG
^ � &693 : Ok=�pic_IFF
h � &694 : Ok=�pic_MAC
r � &695 : Ok=�pic_GIF
| � &696 : Ok=�pic_SUN
� � &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
� � &FF0 : Ok=�pic_TIFF
��
�$Img=Ok:� Image ok if all is well
�
�Img �
 ImgMode%=Mode%
 �SameLeaf � SaveSpr$=Leaf$
�
&�hour_off:� Hourglass off
0!�iclose:� Close input file(s)
:=Img
D
N��save_sprite(out$)
X� Saves image as spritefile
bȎ SaveKind$ �
l1 � "Full" : � Full resolution sprite, no edit
v  � "Whole" : �edit_part(�,�)
�) � "Whole (scaled)" : �edit_part(�,�)
� � "Part" : �edit_part(�,�)
�( � "Part (scaled)" : �edit_part(�,�)
��
��hour_on:� Hourglass 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
*A  ș "OS_GBPB",2,Out,spr%+4,28:� Output part of sprite header
4A  !arg%=extra%+spr%!32:ș "OS_GBPB",2,Out,arg%,4:� New offset
>A  !arg%=extra%+spr%!36:ș "OS_GBPB",2,Out,arg%,4:� New offset
H9  ș "OS_GBPB",2,Out,spr%+40,4:� Output sprite's mode
R�  � 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
\F  ș "OS_GBPB",2,Out,spr%+spr%!32,(spr%!16+1)*(spr%!20+1)*4:� Data
f) � � No palette, output the whole lot
p>  ș "OS_GBPB",1,Out,Sprite%+4,Sprite%!12-4,0:� Output all
z �
�? �#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:� Hourglass 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
., � 1 : width%=640:height%=200:colbits%=2
8, � 2 : width%=640:height%=400:colbits%=1
B�
L+colours%=2^colbits%:� Number of colours
V'�set(width%,height%,colours%,Mode%)
`>�allocate_std(width%,(width%*colbits%+7)�8,width%,0) � =�
j�new_image(0) � =�
t/�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
({�image_info("Atari IMG",width%,height%,0,nplanes%,Mode%,"Several ways","",Flen%-headlen%*2,(width%*height%*nplanes%)�8)
2Y�var("imgx",width%):�var("imgy",height%):�var("ifp1",headlen%*2):�unpack("IMG") � =�
<=�
F 
P
ݤpic_MAC
Z$� Makes MacIntosh MacPaint image
d2width%=576:height%=720:colbits%=1:� Resolution
n)�set(width%,height%,2^colbits%,Mode%)
x>�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.
,K       width%=�idb:height%=�idb:�iskip(F1%,4):planes%=�ib:�iskip(F1%,1)
6H       compressed=(�ib=1):�iskip(F1%,5):s_width%=�idb:s_height%=�idb
@> � "CAMG" : flags%=�iwb:� Get flag bits, set flags from it
J5       ham=((flags%�&800)>0):lace=((flags%�&4)>0)
T?       hires=((flags%�&8000)>0):halfbright=((flags%�&80)>0)
^- � "CMAP" : cmap=�:� Colour map (palette)
h7       paldefs%=hlen%�3:� Number of palette entries
r4       �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)
&�       �var("ifp1",�iptr(F1%)):�var("plan",planes%):�var("imgx",width%):�var("imgy",height%):�var("comp",compressed):�unpack("IFF") � =�
0�
:G�head$<>"BODY" � �iskip(F1%,hlen%-(�iptr(F1%)-startptr%)):� To next
D
� body
N=�
X 
b
ݤpic_GIF
l3� Makes GIF (Graphics Interchange Format) image
v&� 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:�
*?�skip_GIF_extension:� Skip extension blocks preceding Image
4&� Search for next Image Descriptor
>E� _%=�ib:image=(_%=�","):end=(_%=�";"):� image � end � �ieof(F1%)
H~�image � �end � �error(-1,"Warning ! GIF file is not properly terminated !"):end=�:�hour_off:�hour_on:� Read beyond file
R�image �
\" � Register picture's position
f0 picture%+=1:Pic_ptr%(picture%)=�iptr(F1%)-1
pk �iskip(F1%,8):_%=�ib:�(_%�&80)>0 � �iskip(F1%,3*2^((_%�7)+1)):� If there's a local colour map, skip it
z �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
.7local=(flags%�&80)>0:� Local colour map following ?
8<ibit=(flags%�&40)>0:� Image stored in interlaced order ?
B2l_pixbits%=(flags%�7)+1:� Local bits per pixel
L�local �
V@ pixbits%=l_pixbits%:� Read and use Local Colour Map palette
`2 �read24pal(F1%,InPal%(),2^l_pixbits%,0,1,2,3)
j+ InPal%(0)=l_pixbits%:� Palette entries
t?� 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") � =�
=�
 
(��skip_GIF_extension
2?� Skips a GIF Extension Block if present at current pointer
<� _%
F�(�ib)=�"!" �
P' �iskip(F1%,1):� Skip function code
Z; � _%=�ib:�iskip(F1%,_%):� _%=0:� Skip data byte blocks
d� �iskip(F1%,-1)
n�
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:�
,�
65width%=(words%*32-bfirst%-(31-blast%)) � colbits%
@��available_mode(sprMode%) � Mode%=sprMode% � Mode%=�mode(width%,height%,colours%):� Determine other mode if sprite's mode won't do
J$�set(width%,height%,colours%,_%)
T>�allocate_std(width%,(width%*colbits%+7)�8,width%,0) � =�
^�new_image(0) � =�
h��image_info("Archimedes sprite",width%,height%,0,colbits%,Mode%,"",�pictures%+" sprites (this is "+�times(picture%)+")",1,1)
r��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") � =�
=�
 
&ݤpic_WATFORD
0#� Makes Watford digitiser image
:+width%=512:height%=256:� Set resolution
D"�set(width%,height%,256,Mode%)
N/�allocate_std(width%,width%,width%,0) � =�
X�new_image(0) � =�
b0�greypal(InPal%(),6,1):� Palette is 64 greys
lh�image_info("Watford digitiser",width%,height%,1,6,Mode%,"Run length","",Flen%,(width%*height%*6)�8)
vT�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
*"�set(width%,height%,256,Mode%)
4/�allocate_std(width%,width%,width%,0) � =�
>�new_image(0) � =�
H1�greypal(InPal%(),8,1):� Palette is 256 greys
RC�image_info("AIM",width%,height%,1,8,Mode%,"","",Flen%,256*256)
\P�var("imgx",width%):�var("imgy",height%):�var("ifp1",0):�unpack("AIM") � =�
f=�
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) � =�
..�type%=2 � compr$="Run length" � compr$=""
8p�image_info("SUN",width%,height%,0,colbits%,Mode%,compr$,"",Flen%-32-maplength%,(width%*height%*colbits%)�8)
Bo�var("ifp1",32+maplength%):�var("imgx",width%):�var("imgy",height%):�var("comp",type%):�unpack("SUN") � =�
L=�
V 
`
ݤpic_PCX
j� Makes PCX image
t.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)
�Y�version%<5 � �error(-1,"I cannot handle old PCX files (only version 5 and up) !"):=�
�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"
*:C$IMIbp%=�(colbits%)+"-bit "+�"colour  grey    RGB",1+code%*8,8)
*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�� �FreqCalc � �hour_on:ș "Translator_PixelFreq",SprPtr%,freq%:�hour_off:FreqCalc=�:� Calculate pixel frequencies in image sprite
7� �hour_on:� Hourglass on
7�C p%=dum%:� c%=1 � sc%:!p%=ImgPal%(c%):p%+=4:�:� Image's palette
7�: � Calculate translation table and palette for display
7�K ș "Translator_CalcTrans",sc%,freq%,dum%,mc%,transtab%,arg% � ,,,used%
7�C p%=arg%:� c%=1 � used%:ShowPal%(c%)=!p%:p%+=4:�:� Read palette
7�8 ShowPal%(0)=used%:� Colours used in display palette
7� �hour_off:� Hourglass off
7��
8�
8 
8��autozoom
8"3� Adjust zoom factor for auto zoom (if enabled)
8,� _%
86�AutoZoom �
8@7 _%=�sprW*ZoomX:ȕ _%>ScrW%:ZoomX=ZoomX/2:_%=_%/2:�
8J6 �ZoomX<1 � ȕ _%*2<=ScrW%:ZoomX=ZoomX*2:_%=_%*2:�
8T7 _%=�sprH*ZoomY:ȕ _%>ScrH%:ZoomY=ZoomY/2:_%=_%/2:�
8^6 �ZoomY<1 � ȕ _%*2<=ScrH%:ZoomY=ZoomY*2:_%=_%*2:�
8h�
8r�
8| 
8�#��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
9&�var("bwhi",BlackWhite):� B/w flag
91�var("espr",ErrSpread):� Error spreading flag
9&�var("zigz",ZigZag):� Zig zag flag
9&#�var("clfh",0):� No Clear (yet)
90=�var("outx",OutX%):�var("outy",OutY%):� Output resolution
9:=�var("ymul",YMul%):�var("ydiv",YDiv%):� Scaling factors Y
9D=�var("xmul",XMul%):�var("xdiv",XDiv%):� Scaling factors X
9No�Percent � �Blanking � �var("perc",1):�var("pinc",(100<<16)/ImgH%) � �var("perc",0):� Hourglass percentage
9X8� Set palette (if relevant, i.e. not pure RGB input)
9b?�bpp%<=8 � � c%=0 � 2^bpp%-1:palrgb%!(c%<<2)=InPal%(c%+1):�
9lf� b%=0 � 31:buffer%!(b%*8)=Buffer%(b%,0):buffer%!(b%*8+4)=Buffer%(b%,1):�:� Buffer locations/sizes
9v9�OutMode=1 � pc%=0 � pc%=OutPal:� Select palette code
9�<� Build R/G/B intensity map for gamma/invert/rgbbits/b&w
9�:�Gamma � �GammaF>0 � gf=1/GammaF � gf=0:� Gamma factor
9�=�Black � �BlackF<>0 � bf=BlackF � bf=0:� Black correction
9��Range �
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
:� $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
:4#�Range � i=(c%-sub%)*mul � i=c%
:>.�bf=0 � i=i+bf:�i<0 � i=0 � �i>255 � i=255
:H%�gf>0 � �i>0 � i=((i/255)^gf)*255
:R�InvertRGB � i=255-i
:\$ri=i � rm%:gi=i � gm%:bi=i � bm%
:f,�BlackWhite � ri=ri*rg:gi=gi*gg:bi=bi*bg
:p'intmap%!(c%<<2)=(ri<<16)+(gi<<8)+bi
:z�
:�DGreyRgb=(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 
;B ��unpack_phase(type$,phase%)
;L5� Executes unpack phase, blanks screen if enabled
;V-�var("phas",phase%):� Set unpacking phase
;`+$dum%=�type$+"    ",4):� Type to unpack
;j=�Blanking � ș "Translator_VideoDMA",0:� Blank if enabled
;t7ș "Translator_Unpack",!dum%:� Execute unpack phase
;~A�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 
<P��stdpal(� Pal%(),bpp%)
<ZH� Sets a palette to standard Archimedes 2,4,16 or 256 colour palette
<d� c%,p%
<nDș "Translator_Palette",bpp%,dum%,2:� Calculate standard palette
<xp%=dum%:� Pointer
<�(� 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
=J� Invalidates entire screen
=T=ș WForce%,-1,0,0,ScrW%,ScrH%:� Force redraw whole screen
=^�
=h 
=r��invalidate_image
=|� 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% �
>0' � win_img% : � Redraw image window
>:G  nx%=(block!4-block!20):ny%=(block!16-block!24):� Work area origin
>D?  �ZoomX>=1 � !arg%=ZoomX:arg%!8=1 � !arg%=1:arg%!8=1/ZoomX
>NC  �ZoomY>=1 � arg%!4=ZoomY:arg%!12=1 � arg%!4=1:arg%!12=1/ZoomY
>X<  �(vw%<=160)�(vh%<=160) � x%=block!4:y%=block!8 � vw%=0
>b9  ȕ more%:�vw%>0 � ș WSetCol%,0:ȓ Ȑ x%,y%,vw%,vh%
>l8  �plot_image(nx%,ny%,0,arg%):� Display image sprite
>v5  ș WGetR%,,block � more%:�:� Get next rectangle
>�' � 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 
?R��open_window(handle%,info)
?\&� Opens window with handle handle%
?fK� If info>0 then info is ready at info, else get info, if -1 pop at top
?p� b%,px%,py%,_%,xs%,ys%
?z
�info>0 �
?�' � 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 
@B��initialise
@L� Initialises program
@V>ș "Wimp_ReadPalette",,wimppal:� Read current WIMP palette
@`7�hour_on:�init_module:�hour_off:� Initialise module
@jDș "OS_CheckModeValid",18 � _%:MultiSync=(_%<>-1):� Monitor type
@t0applname$="Translator":� Name of application
@~Fș "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
A8ș "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%
A2?SAVsn%=�iconaddr(win_file%,0):SAVfn%=�iconaddr(win_file%,1)
A<:$dum%="info":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
AF$ș WCreateW%,,window � win_info%
AP?$dum%="filetypes":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
AZ%ș WCreateW%,,window � win_filet%
Ad?$dum%="imageinfo":ș WLoadT%,,window,ic,ie,-1,dum%,0 � ,,ic
An&ș WCreateW%,,window � win_iminfo%
Ax�w%=win_iminfo%:IMIfn%=�iconaddr(w%,1):IMIit%=�iconaddr(w%,3):IMIin%=�iconaddr(w%,5):IMIif%=�iconaddr(w%,7):IMIco%=�iconaddr(w%,9)
A�{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%
B>ș "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
B6�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%
B@�
BJ�Vars=�"<Translator$Dir>.MenuVars":ȕ ��#Vars:vn$=�#Vars:d%=�#Vars:vv$=�#Vars:d%=�#Vars:�vn$,2)="id" � vv%=menudata%+�vv$ � vv%=menustruct%+�vv$
BT-d%=�("FNcvar("+vn$+","+�vv%+")"):�:�#Vars
B^&menumain%=menustruct%+!menustruct%
Bh� Init variables
Br^SaveKind$="":Img=�:SavePal=�:ZoomX=1:ZoomY=1:ImageSpr$="image":Flen%=0:Load$="":SameLeaf=�
B|�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
B�lPercent=�:ActLoad=�:ActRotate=�:ViewMode=�:PreMode=�:ZoomWin=�:ZoomD=4:ZoomW=ZoomD:DivIsInX=�:DivIsInY=�
B�sOutX%=1:OutY%=1:OutMode%=15:GammaF=1:Gamma=�:BlackF=0:Black=�:Range=�:RangeMin%=0:RangeMax%=0: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%)
C,� Returns indirected icon's data address
C>!block=win%:block!4=ico%:ș WGetIS%,,block:� Get icon info
C
=block!28
C& 
C0ݤload_status
C:#� Loads default status (if any)
CDH� Returns TRUE if succesful, else FALSE (i.e. status file not found)
CN6Status=�("<Translator$Dir>.Status"):�Status=0 � =�
CX��#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
Cb$�#Status,Range,SameLeaf:�#Status
Cl�ErrSpread=-1 � ErrSpread=1
Cv=�
C� 
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%
D=(val%+3)��3
D 
Dݤreadpalval(rgb%)
D 3� Returns 'OS_ReadPalette' word from &RGB value
D*?=((rgb%�&FF)<<24)+((rgb%�&FF00)<<8)+((rgb%�&FF0000)>>8)+&10
D4 
D>ݤstring(addr%)
DH2� Returns CTRL-char terminated string at addr%
DR� _%,_c%,_$
D\_%=-1:� _%+=1:� addr%?_%<32
Df3_c%=addr%?_%:addr%?_%=13:_$=$addr%:addr%?_%=_c%
Dp=_$
Dz 
D�ݤ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
E=�mode_var(�,9)
E
Eݤcolstobpp(cols%)
E$5� Returns bits per pixel needed for cols% colours
E.(�cols%<=1 � =1 � =�ceil(�(cols%)/�2)
E8 
EBݤvdu_var(varnr%)
EL!� Returns VDU variable varnr%
EV;!arg%=varnr%:arg%!4=-1:ș OSReadVV%,arg%,arg%+8:=arg%!8
E` 
Ejݤmode_var(mode%,varnr%)
Et(� Returns mode mode% variable varnr%
E~
� 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%
F=swinr%
F
 
F��error(errnr,errmsg$)
F� Handles errors
F(� but%,opt%
F29ș "Translator_VideoDMA",1:� Ensure video DMA enabled
F<'�errnr=-1 � errnr=1:opt%=1 � opt%=3
FF!err=errnr:$(err+4)=errmsg$
FPDș "Translator_Palette",2^�log2BPP,dum%,1:� Read current palette
FZ)�set_palette(0):� Select WIMP palette
Fd*ș WReport%,err,opt%,applname$ � ,but%
Fn�but%<>1 � �die
FxBș "Translator_SetPalette",2^(2^�log2BPP),dum%:� Reset palette
F��
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%
G 
Gݤmin(v1%,v2%)
G$� Returns minimum of v1% and v2%
G"�v1%<v2% � =v1% � =v2%
G, 
G6
ݤceil(v)
G@0� Returns 'ceiling' of value (i.e. round up)
GJ�v=�v � =v � =�v+1
GT 
G^	��die
Gh� Tidies up and exits
Gr�finish:� Tidy up
G|ș "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
H)� arccols%,arcwidth%,archeight%,mode%
H�OutMode=2 � =�
H/� Range check for colours, width and height
H&&�colours%>256 � =-1:� Impossible !
H0,� Determine closest colours/width/height
H:c�colours%>16 � arccols%=256 � �colours%>4 � arccols%=16 � �colours%>2 � arccols%=4 � arccols%=2
HDN�width%>640 � arcwidth%=1056 � �width%>320 � arcwidth%=640 � arcwidth%=320
HN3�height%<=256 � archeight%=256 � archeight%=512
HXȎ arccols% �
Hb/ � 2 : �archeight%=512 � mode%=18 � mode%=0
HlK � 4 : �archeight%=512 � mode%=19 � �arcwidth%<=320 � mode%=1 � mode%=8
Hvi � 16 : �archeight%=512 � mode%=20 � �arcwidth%<=320 � mode%=9 � �arcwidth%=640 � mode%=12 � mode%=16
H�� � 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"
I�
I
I5��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
I4� p%,c%,m%
I>=ș "OS_GBPB",4,fh%,dum%,cols%*elen%:� Read entire palette
IHp%=dum%:� Pointer
IRG� c%=1 � cols%:Pal%(c%)=p%?ro%<<16 � p%?go%<<8 � p%?bo%:p%+=elen%:�
I\�
If 
Ipݤistring(fh%,len%)
Iz!� Returns string of from file
I�0� 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
J�#fh%=newptr%
J�
J 
J$ݤiptr(fh%)
J.$� Returns current offset in file
J8
=�#fh%
JB 
JLݤilen(fh%)
JV� Returns length of file
J`
=�#fh%
Jj 
Jtݤieof(fh%)
J~(� 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��
K
K
ݤib:=�#F1%
Kݤidb:=�#F1%<<8 � �#F1%
K'ݤitb:=�#F1%<<16 � �#F1%<<8 � �#F1%
K(3ݤiwb:=�#F1%<<24 � �#F1%<<16 � �#F1%<<8 � �#F1%
K2ݤidl:=�#F1% � �#F1%<<8
K<'ݤitl:=�#F1% � �#F1%<<8 � �#F1%<<16
KF3ݤiwl:=�#F1% � �#F1%<<8 � �#F1%<<16 � �#F1%<<24
KPݤibf(fh%):=�#fh%
KZ9ݤiwlf(fh%):=�#fh% � �#fh%<<8 � �#fh%<<16 � �#fh%<<24
Kd
Kn ��obf(fh%,val%):�#fh%,val%:�
Kx@��otbf(fh%,val%):�#fh%,val%>>>16:�#fh%,val%>>>8:�#fh%,val%:�
K�@��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
L�
L 
L��var(varname$,value%)
L"� Writes module variable
L,;$dum%=varname$:ș "Translator_SetVariable",!dum%,value%
L6�
L@ 
LJݤvar(varname$)
LT� Reads module variable
L^� value%
Lh>$dum%=varname$:ș "Translator_ReadVariable",!dum% � value%
Lr=value%
L| 
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 53 61 74 2c 31  36 20 4d 61 72 20 31 39  | : Sat,16 Mar 19|
000000b0  39 31 2e 31 38 3a 33 36  3a 35 35 0d 00 32 1e f4  |91.18:36:55..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 33 36 3a f4 20 54 72  |ersion%=636:. 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 35 de  20 61 72 67 25 20 31 30  |(4)...5. arg% 10|
00000260  32 34 2c 64 75 6d 25 20  32 30 34 38 2c 74 72 61  |24,dum% 2048,tra|
00000270  6e 73 74 61 62 25 20 32  35 36 2c 42 75 66 66 65  |nstab% 256,Buffe|
00000280  72 25 28 33 32 2c 31 29  0d 00 8c 35 de 20 62 75  |r%(32,1)...5. bu|
00000290  66 66 65 72 25 20 33 32  2a 38 2c 66 72 65 71 25  |ffer% 32*8,freq%|
000002a0  20 31 30 32 34 2c 70 61  6c 72 67 62 25 20 31 30  | 1024,palrgb% 10|
000002b0  32 34 2c 68 61 6d 62 61  73 25 20 36 34 0d 00 96  |24,hambas% 64...|
000002c0  2b de 20 6f 75 74 70 61  6c 25 20 31 30 32 34 2c  |+. outpal% 1024,|
000002d0  69 6e 74 6d 61 70 25 20  31 30 32 34 2c 70 62 6d  |intmap% 1024,pbm|
000002e0  69 6e 74 25 20 32 35 36  0d 00 a0 40 50 72 6f 67  |int% 256...@Prog|
000002f0  6e 65 65 64 25 3d 31 35  30 2a 31 30 32 34 3a f4  |need%=150*1024:.|
00000300  20 45 73 74 69 6d 61 74  65 64 20 73 70 61 63 65  | Estimated space|
00000310  20 6e 65 65 64 65 64 20  66 6f 72 20 70 72 6f 67  | needed for prog|
00000320  72 61 6d 2b 76 61 72 73  0d 00 aa 40 4c 6f 77 48  |ram+vars...@LowH|
00000330  65 61 70 25 3d 31 30 32  34 3a f4 20 4c 6f 77 65  |eap%=1024:. Lowe|
00000340  73 74 20 73 69 7a 65 20  66 6f 72 20 68 65 61 70  |st size for heap|
00000350  20 28 73 70 72 69 74 65  2c 20 62 75 66 66 65 72  | (sprite, buffer|
00000360  73 2c 20 65 74 63 2e 29  0d 00 b4 37 54 6f 74 61  |s, etc.)...7Tota|
00000370  6c 66 72 65 65 25 3d 93  2d 90 3a f4 20 54 6f 74  |lfree%=.-.:. Tot|
00000380  61 6c 20 66 72 65 65 20  66 6f 72 20 70 72 6f 67  |al free for prog|
00000390  72 61 6d 2b 76 61 72 73  2b 73 70 72 62 75 66 0d  |ram+vars+sprbuf.|
000003a0  00 be 45 4d 69 64 48 69  6d 65 6d 25 3d 90 2b 50  |..EMidHimem%=.+P|
000003b0  72 6f 67 6e 65 65 64 25  3a f4 20 50 73 65 75 64  |rogneed%:. Pseud|
000003c0  6f 20 48 49 4d 45 4d 20  28 74 6f 70 20 6f 66 20  |o HIMEM (top of |
000003d0  70 72 6f 67 2c 20 73 74  61 72 74 20 6f 66 20 68  |prog, start of h|
000003e0  65 61 70 29 0d 00 c8 44  48 65 61 70 25 3d 4d 69  |eap)...DHeap%=Mi|
000003f0  64 48 69 6d 65 6d 25 3a  48 65 61 70 53 69 7a 65  |dHimem%:HeapSize|
00000400  25 3d 54 6f 74 61 6c 66  72 65 65 25 2d 50 72 6f  |%=Totalfree%-Pro|
00000410  67 6e 65 65 64 25 3a f4  20 53 65 74 20 68 65 61  |gneed%:. Set hea|
00000420  70 20 2b 20 73 69 7a 65  0d 00 d2 32 4c 6f 77 48  |p + size...2LowH|
00000430  69 6d 65 6d 25 3d 48 65  61 70 25 2b 4c 6f 77 48  |imem%=Heap%+LowH|
00000440  65 61 70 25 3a f4 20 4c  6f 77 65 73 74 20 70 73  |eap%:. Lowest ps|
00000450  65 75 64 6f 20 48 49 4d  45 4d 0d 00 dc 3e e7 48  |eudo HIMEM...>.H|
00000460  65 61 70 53 69 7a 65 25  3c 4c 6f 77 48 65 61 70  |eapSize%<LowHeap|
00000470  25 20 8c 20 85 20 31 2c  22 4e 6f 20 72 6f 6f 6d  |% . . 1,"No room|
00000480  20 74 6f 20 73 74 61 72  74 20 75 70 20 54 72 61  | to start up Tra|
00000490  6e 73 6c 61 74 6f 72 22  0d 00 e6 34 d3 3d 4d 69  |nslator"...4.=Mi|
000004a0  64 48 69 6d 65 6d 25 3a  f4 20 4c 6f 77 65 72 20  |dHimem%:. Lower |
000004b0  68 69 6d 65 6d 20 74 6f  20 62 65 6c 6f 77 20 73  |himem to below s|
000004c0  70 72 69 74 65 20 62 75  66 66 65 72 0d 00 f0 28  |prite buffer...(|
000004d0  f2 69 6e 69 74 69 61 6c  69 73 65 3a f4 20 49 6e  |.initialise:. In|
000004e0  69 74 69 61 6c 69 73 65  20 61 70 70 6c 69 63 61  |itialise applica|
000004f0  74 69 6f 6e 0d 00 fa 37  f2 6d 6f 64 65 5f 63 68  |tion...7.mode_ch|
00000500  61 6e 67 65 28 2d 31 29  3a f4 20 52 65 73 65 6c  |ange(-1):. Resel|
00000510  65 63 74 20 63 75 72 72  65 6e 74 20 6d 6f 64 65  |ect current mode|
00000520  20 74 6f 20 74 69 64 79  20 75 70 0d 01 04 89 4c  | to tidy up....L|
00000530  6e 61 6d 65 24 3d a4 4f  53 76 61 72 28 22 54 72  |name$=.OSvar("Tr|
00000540  61 6e 73 6c 61 74 6f 72  24 46 69 6c 65 22 29 3a  |anslator$File"):|
00000550  e7 4c 6e 61 6d 65 24 3c  3e 22 22 20 8c 20 c8 99  |.Lname$<>"" . ..|
00000560  20 22 4f 53 5f 43 4c 49  22 2c 22 55 6e 73 65 74  | "OS_CLI","Unset|
00000570  20 54 72 61 6e 73 6c 61  74 6f 72 24 46 69 6c 65  | Translator$File|
00000580  22 3a 4c 74 79 70 65 25  3d a4 69 6d 61 67 65 5f  |":Ltype%=.image_|
00000590  74 79 70 65 28 4c 6e 61  6d 65 24 2c b9 29 3a e7  |type(Lname$,.):.|
000005a0  4c 74 79 70 65 25 3e 30  20 8c 20 41 63 74 4c 6f  |Ltype%>0 . ActLo|
000005b0  61 64 3d b9 0d 01 0e 2d  ee 20 85 20 f2 65 72 72  |ad=....-. . .err|
000005c0  6f 72 28 9f 2c f6 24 2b  22 20 28 63 6f 64 65 20  |or(.,.$+" (code |
000005d0  22 2b c3 9e 2b 22 29 22  29 3a f2 69 63 6c 6f 73  |"+..+")"):.iclos|
000005e0  65 0d 01 18 15 f4 20 50  6f 6c 6c 20 61 6e 64 20  |e..... Poll and |
000005f0  61 63 74 69 6f 6e 0d 01  22 44 e7 44 61 74 61 4c  |action.."D.DataL|
00000600  6f 61 64 52 65 66 25 20  8c 20 70 6f 6c 6c 6d 61  |oadRef% . pollma|
00000610  73 6b 25 3d 34 38 20 8b  20 70 6f 6c 6c 6d 61 73  |sk%=48 . pollmas|
00000620  6b 25 3d 34 39 3a f4 20  4e 6f 20 6e 75 6c 6c 73  |k%=49:. No nulls|
00000630  20 69 66 20 77 61 73 74  65 64 0d 01 2c 19 c8 8e  | if wasted..,...|
00000640  20 a4 70 6f 6c 6c 28 70  6f 6c 6c 6d 61 73 6b 25  | .poll(pollmask%|
00000650  29 20 ca 0d 01 36 10 20  c9 20 30 20 3a 20 f2 6e  |) ...6. . 0 : .n|
00000660  75 6c 6c 0d 01 40 12 20  c9 20 31 20 3a 20 f2 72  |ull..@. . 1 : .r|
00000670  65 64 72 61 77 0d 01 4a  10 20 c9 20 32 20 3a 20  |edraw..J. . 2 : |
00000680  f2 6f 70 65 6e 0d 01 54  11 20 c9 20 33 20 3a 20  |.open..T. . 3 : |
00000690  f2 63 6c 6f 73 65 0d 01  5e 0d 20 20 e7 4b 69 6c  |.close..^.  .Kil|
000006a0  6c 20 8c 0d 01 68 1a 20  20 20 4b 69 6c 6c 3d a3  |l ...h.   Kill=.|
000006b0  3a f4 20 52 65 73 65 74  20 66 6c 61 67 0d 01 72  |:. Reset flag..r|
000006c0  39 20 20 20 e0 3d 4c 6f  77 48 69 6d 65 6d 25 3a  |9   .=LowHimem%:|
000006d0  f4 20 49 6d 61 67 65 20  6b 69 6c 6c 65 64 2c 20  |. Image killed, |
000006e0  6d 65 6d 6f 72 79 20 62  61 63 6b 20 74 6f 20 6d  |memory back to m|
000006f0  69 6e 69 6d 75 6d 0d 01  7c 2b 20 20 20 f2 6e 65  |inimum..|+   .ne|
00000700  77 5f 73 6c 6f 74 3a d3  3d 4d 69 64 48 69 6d 65  |w_slot:.=MidHime|
00000710  6d 25 3a f4 20 4e 65 77  20 73 6c 6f 74 73 69 7a  |m%:. New slotsiz|
00000720  65 0d 01 86 07 20 20 cd  0d 01 90 16 20 c9 20 36  |e....  ..... . 6|
00000730  20 3a 20 f2 6d 6f 75 73  65 63 6c 69 63 6b 0d 01  | : .mouseclick..|
00000740  9a 14 20 c9 20 37 20 3a  20 f2 64 72 61 67 64 72  |.. . 7 : .dragdr|
00000750  6f 70 0d 01 a4 0f 20 c9  20 38 20 3a 20 f2 6b 65  |op.... . 8 : .ke|
00000760  79 0d 01 ae 16 20 c9 20  39 20 3a 20 f2 6d 65 6e  |y.... . 9 : .men|
00000770  75 73 65 6c 65 63 74 0d  01 b8 17 20 c9 20 31 37  |uselect.... . 17|
00000780  2c 31 38 20 3a 20 f2 6d  65 73 73 61 67 65 0d 01  |,18 : .message..|
00000790  c2 05 cb 0d 01 cc 0a c8  8e 20 b9 20 ca 0d 01 d6  |......... . ....|
000007a0  21 20 c9 20 41 63 74 4c  6f 61 64 20 3a 20 f4 20  |! . ActLoad : . |
000007b0  4c 6f 61 64 20 6e 65 77  20 69 6d 61 67 65 0d 01  |Load new image..|
000007c0  e0 1c 20 20 41 63 74 4c  6f 61 64 3d a3 3a f4 20  |..  ActLoad=.:. |
000007d0  52 65 73 65 74 20 66 6c  61 67 0d 01 ea 2e 20 20  |Reset flag....  |
000007e0  e0 3d 26 31 30 30 30 30  30 30 3a f2 6e 65 77 5f  |.=&1000000:.new_|
000007f0  73 6c 6f 74 3a d3 3d 4d  69 64 48 69 6d 65 6d 25  |slot:.=MidHimem%|
00000800  3a f4 20 43 6c 61 69 6d  0d 01 f4 39 20 20 4c 6f  |:. Claim...9  Lo|
00000810  61 64 65 64 3d a4 6c 6f  61 64 28 4c 74 79 70 65  |aded=.load(Ltype|
00000820  25 2c 4c 6e 61 6d 65 24  29 3a f4 20 41 74 74 65  |%,Lname$):. Atte|
00000830  6d 70 74 20 74 6f 20 6c  6f 61 64 20 69 6d 61 67  |mpt to load imag|
00000840  65 0d 01 fe 3a 20 20 e7  49 6d 67 20 8c 20 e0 3d  |e...:  .Img . .=|
00000850  28 53 70 72 45 6e 64 25  2b 31 30 32 33 29 80 ac  |(SprEnd%+1023)..|
00000860  31 30 32 33 20 8b 20 e0  3d 4d 69 64 48 69 6d 65  |1023 . .=MidHime|
00000870  6d 25 3a f4 20 52 65 74  75 72 6e 0d 02 08 2a 20  |m%:. Return...* |
00000880  20 f2 6e 65 77 5f 73 6c  6f 74 3a d3 3d 4d 69 64  | .new_slot:.=Mid|
00000890  48 69 6d 65 6d 25 3a f4  20 4e 65 77 20 73 6c 6f  |Himem%:. New slo|
000008a0  74 73 69 7a 65 0d 02 12  0f 20 20 e7 4c 6f 61 64  |tsize....  .Load|
000008b0  65 64 20 8c 0d 02 1c 2e  20 20 20 f2 73 65 74 5f  |ed .....   .set_|
000008c0  6d 6f 64 65 28 49 6d 67  4d 6f 64 65 25 29 3a f4  |mode(ImgMode%):.|
000008d0  20 53 65 6c 65 63 74 20  69 6d 61 67 65 20 6d 6f  | Select image mo|
000008e0  64 65 0d 02 26 2b 20 20  20 5a 6f 6f 6d 58 3d 31  |de..&+   ZoomX=1|
000008f0  3a 5a 6f 6f 6d 59 3d 31  3a f4 20 52 65 73 65 74  |:ZoomY=1:. Reset|
00000900  20 7a 6f 6f 6d 20 66 61  63 74 6f 72 73 0d 02 30  | zoom factors..0|
00000910  43 20 20 20 e7 41 75 74  6f 50 61 6c 20 8c 20 f2  |C   .AutoPal . .|
00000920  73 65 74 5f 70 61 6c 65  74 74 65 28 31 29 3a f4  |set_palette(1):.|
00000930  20 53 65 6c 65 63 74 20  69 6d 61 67 65 20 70 61  | Select image pa|
00000940  6c 65 74 74 65 20 69 66  20 65 6e 61 62 6c 65 64  |lette if enabled|
00000950  0d 02 3a 2f 20 20 20 f2  6e 65 77 5f 69 6d 61 67  |..:/   .new_imag|
00000960  65 5f 77 69 6e 64 6f 77  3a f4 20 4f 70 65 6e 20  |e_window:. Open |
00000970  77 69 6e 64 6f 77 20 6f  6e 20 69 6d 61 67 65 0d  |window on image.|
00000980  02 44 07 20 20 cd 0d 02  4e 21 20 c9 20 41 63 74  |.D.  ...N! . Act|
00000990  52 6f 74 61 74 65 20 3a  20 f4 20 52 6f 74 61 74  |Rotate : . Rotat|
000009a0  65 20 69 6d 61 67 65 0d  02 58 1e 20 20 41 63 74  |e image..X.  Act|
000009b0  52 6f 74 61 74 65 3d a3  3a f4 20 52 65 73 65 74  |Rotate=.:. Reset|
000009c0  20 66 6c 61 67 0d 02 62  18 20 20 e0 3d 26 31 30  | flag..b.  .=&10|
000009d0  30 30 30 30 30 3a f4 20  43 6c 61 69 6d 0d 02 6c  |00000:. Claim..l|
000009e0  1d 20 20 f2 68 6f 75 72  5f 6f 6e 3a f4 20 48 6f  |.  .hour_on:. Ho|
000009f0  75 72 67 6c 61 73 73 20  6f 6e 0d 02 76 3e 20 20  |urglass on..v>  |
00000a00  f2 76 61 72 28 22 72 6f  74 62 22 2c 53 70 72 45  |.var("rotb",SprE|
00000a10  6e 64 25 29 3a f2 76 61  72 28 22 72 6f 74 73 22  |nd%):.var("rots"|
00000a20  2c 93 2d 53 70 72 45 6e  64 25 29 3a f4 20 53 65  |,.-SprEnd%):. Se|
00000a30  74 20 62 75 66 66 65 72  0d 02 80 34 20 20 c8 99  |t buffer...4  ..|
00000a40  20 22 54 72 61 6e 73 6c  61 74 6f 72 5f 52 6f 74  | "Translator_Rot|
00000a50  61 74 65 22 2c 53 70 72  50 74 72 25 3a f4 20 52  |ate",SprPtr%:. R|
00000a60  6f 74 61 74 65 20 73 70  72 69 74 65 0d 02 8a 25  |otate sprite...%|
00000a70  20 20 e0 3d 28 53 70 72  45 6e 64 25 2b 31 30 32  |  .=(SprEnd%+102|
00000a80  33 29 80 ac 31 30 32 33  3a f4 20 52 65 74 75 72  |3)..1023:. Retur|
00000a90  6e 0d 02 94 1f 20 20 f2  68 6f 75 72 5f 6f 66 66  |n....  .hour_off|
00000aa0  3a f4 20 48 6f 75 72 67  6c 61 73 73 20 6f 66 66  |:. Hourglass off|
00000ab0  0d 02 9e 3e 20 20 53 70  72 69 74 65 25 21 31 32  |...>  Sprite%!12|
00000ac0  3d 53 70 72 69 74 65 25  21 38 2b 21 28 53 70 72  |=Sprite%!8+!(Spr|
00000ad0  69 74 65 25 2b 53 70 72  69 74 65 25 21 38 29 3a  |ite%+Sprite%!8):|
00000ae0  c8 94 20 53 70 72 48 25  2c 53 70 72 57 25 0d 02  |.. SprH%,SprW%..|
00000af0  a8 40 20 20 f2 6e 65 77  5f 69 6d 61 67 65 5f 77  |.@  .new_image_w|
00000b00  69 6e 64 6f 77 3a f2 6e  65 77 5f 77 69 6e 64 6f  |indow:.new_windo|
00000b10  77 28 77 69 6e 5f 69 6d  67 25 29 3a f4 20 4e 65  |w(win_img%):. Ne|
00000b20  77 20 69 6d 61 67 65 20  77 69 6e 64 6f 77 0d 02  |w image window..|
00000b30  b2 05 cb 0d 02 bc 44 e5  20 8d 54 58 41 3a f4 20  |......D. .TXA:. |
00000b40  53 6f 72 72 79 2c 20 49  20 68 61 76 65 20 74 6f  |Sorry, I have to|
00000b50  2e 20 43 75 72 72 65 6e  74 20 42 41 53 49 43 20  |. Current BASIC |
00000b60  72 65 73 74 72 69 63 74  69 6f 6e 73 20 77 69 74  |restrictions wit|
00000b70  68 20 45 4e 44 3d 2e 0d  02 c6 05 20 0d 02 d0 0e  |h END=..... ....|
00000b80  dd f2 6e 65 77 5f 73 6c  6f 74 0d 02 da 1e f4 20  |..new_slot..... |
00000b90  53 6c 6f 74 20 63 68 61  6e 67 65 64 2c 20 72 65  |Slot changed, re|
00000ba0  73 65 74 20 69 6e 66 6f  0d 02 e4 2c 48 65 61 70  |set info...,Heap|
00000bb0  53 69 7a 65 25 3d 93 2d  4d 69 64 48 69 6d 65 6d  |Size%=.-MidHimem|
00000bc0  25 3a f4 20 4e 65 77 20  73 69 7a 65 20 6f 66 20  |%:. New size of |
00000bd0  68 65 61 70 0d 02 ee 05  e1 0d 02 f8 04 0d 03 02  |heap............|
00000be0  10 dd f2 6d 65 6e 75 73  65 6c 65 63 74 0d 03 0c  |...menuselect...|
00000bf0  2f 41 63 74 52 6f 74 61  74 65 3d a3 3a f4 20 46  |/ActRotate=.:. F|
00000c00  6c 61 67 20 72 65 74 75  72 6e 65 64 20 74 6f 20  |lag returned to |
00000c10  72 6f 74 61 74 65 20 69  6d 61 67 65 0d 03 16 3f  |rotate image...?|
00000c20  c8 99 20 57 44 65 63 6f  64 65 4d 25 2c 2c 6d 65  |.. WDecodeM%,,me|
00000c30  6e 75 31 2c 70 6f 6c 6c  2c c4 31 30 30 2c 22 20  |nu1,poll,.100," |
00000c40  22 29 20 b8 20 2c 2c 2c  73 65 6c 65 63 74 24 3a  |") . ,,,select$:|
00000c50  f4 20 53 65 6c 65 63 74  69 6f 6e 0d 03 20 2d f4  |. Selection.. -.|
00000c60  20 44 65 63 6f 64 65 20  6d 61 69 6e 2f 73 75 62  | Decode main/sub|
00000c70  2f 73 75 62 73 75 62 20  73 65 6c 65 63 74 69 6f  |/subsub selectio|
00000c80  6e 20 73 74 72 69 6e 67  0d 03 2a 2a 6d 65 6e 75  |n string..**menu|
00000c90  70 61 74 68 24 3d 73 65  6c 65 63 74 24 3a f4 20  |path$=select$:. |
00000ca0  52 65 6d 65 6d 62 65 72  20 6d 65 6e 75 20 70 61  |Remember menu pa|
00000cb0  74 68 0d 03 34 66 73 65  6c 65 63 74 32 3d a3 3a  |th..4fselect2=.:|
00000cc0  73 65 6c 65 63 74 33 3d  a3 3a 73 65 6c 65 63 74  |select3=.:select|
00000cd0  34 3d a3 3a 73 65 6c 65  63 74 35 3d a3 3a 73 65  |4=.:select5=.:se|
00000ce0  6c 65 63 74 32 24 3d 22  22 3a 73 65 6c 65 63 74  |lect2$="":select|
00000cf0  33 24 3d 22 22 3a 73 65  6c 65 63 74 34 24 3d 22  |3$="":select4$="|
00000d00  22 3a 73 65 6c 65 63 74  35 24 3d 22 22 3a f4 20  |":select5$="":. |
00000d10  44 65 66 61 75 6c 74 73  0d 03 3e bd 70 25 3d a7  |Defaults..>.p%=.|
00000d20  73 65 6c 65 63 74 24 2c  22 2e 22 29 3a e7 70 25  |select$,"."):.p%|
00000d30  3e 30 20 8c 20 73 65 6c  65 63 74 32 3d b9 3a 73  |>0 . select2=.:s|
00000d40  65 6c 65 63 74 32 24 3d  c1 73 65 6c 65 63 74 24  |elect2$=.select$|
00000d50  2c 70 25 2b 31 29 3a 73  65 6c 65 63 74 24 3d c0  |,p%+1):select$=.|
00000d60  73 65 6c 65 63 74 24 2c  70 25 2d 31 29 3a 70 25  |select$,p%-1):p%|
00000d70  3d a7 73 65 6c 65 63 74  32 24 2c 22 2e 22 29 3a  |=.select2$,"."):|
00000d80  e7 70 25 3e 30 20 8c 20  73 65 6c 65 63 74 33 3d  |.p%>0 . select3=|
00000d90  b9 3a 73 65 6c 65 63 74  33 24 3d c1 73 65 6c 65  |.:select3$=.sele|
00000da0  63 74 32 24 2c 70 25 2b  31 29 3a 73 65 6c 65 63  |ct2$,p%+1):selec|
00000db0  74 32 24 3d c0 73 65 6c  65 63 74 32 24 2c 70 25  |t2$=.select2$,p%|
00000dc0  2d 31 29 3a 70 25 3d a7  73 65 6c 65 63 74 33 24  |-1):p%=.select3$|
00000dd0  2c 22 2e 22 29 0d 03 48  9d e7 70 25 3e 30 20 8c  |,".")..H..p%>0 .|
00000de0  20 73 65 6c 65 63 74 34  3d b9 3a 73 65 6c 65 63  | select4=.:selec|
00000df0  74 34 24 3d c1 73 65 6c  65 63 74 33 24 2c 70 25  |t4$=.select3$,p%|
00000e00  2b 31 29 3a 73 65 6c 65  63 74 33 24 3d c0 73 65  |+1):select3$=.se|
00000e10  6c 65 63 74 33 24 2c 70  25 2d 31 29 3a 70 25 3d  |lect3$,p%-1):p%=|
00000e20  a7 73 65 6c 65 63 74 34  24 2c 22 2e 22 29 3a e7  |.select4$,"."):.|
00000e30  70 25 3e 30 20 8c 20 73  65 6c 65 63 74 35 3d b9  |p%>0 . select5=.|
00000e40  3a 73 65 6c 65 63 74 35  24 3d c1 73 65 6c 65 63  |:select5$=.selec|
00000e50  74 34 24 2c 70 25 2b 31  29 3a 73 65 6c 65 63 74  |t4$,p%+1):select|
00000e60  34 24 3d c0 73 65 6c 65  63 74 34 24 2c 70 25 2d  |4$=.select4$,p%-|
00000e70  31 29 0d 03 52 34 f4 20  46 69 6c 74 65 72 20 63  |1)..R4. Filter c|
00000e80  6c 69 63 6b 73 20 6f 6e  20 72 6f 6f 74 73 20 6f  |licks on roots o|
00000e90  66 20 65 6e 74 72 69 65  73 20 77 69 74 68 20 73  |f entries with s|
00000ea0  75 62 6d 65 6e 75 0d 03  5c 12 c8 8e 20 6d 65 6e  |ubmenu..\... men|
00000eb0  75 70 61 74 68 24 20 ca  0d 03 66 5c 20 c9 20 22  |upath$ ...f\ . "|
00000ec0  49 6d 61 67 65 20 69 6e  66 6f 22 2c 22 50 6f 70  |Image info","Pop|
00000ed0  20 75 70 22 2c 22 50 72  6f 63 65 73 73 22 2c 22  | up","Process","|
00000ee0  4d 61 6e 69 70 75 6c 61  74 65 22 2c 22 45 78 61  |Manipulate","Exa|
00000ef0  6d 69 6e 65 22 2c 22 4d  69 73 63 22 20 3a 20 e7  |mine","Misc" : .|
00000f00  73 65 6c 65 63 74 32 20  8b 20 73 65 6c 65 63 74  |select2 . select|
00000f10  24 3d 22 22 0d 03 70 b7  20 c9 20 22 50 6f 70 20  |$=""..p. . "Pop |
00000f20  75 70 2e 4d 6f 64 65 20  73 65 74 22 2c 22 50 72  |up.Mode set","Pr|
00000f30  6f 63 65 73 73 2e 43 6f  6c 6f 75 72 22 2c 22 50  |ocess.Colour","P|
00000f40  72 6f 63 65 73 73 2e 53  70 72 69 74 65 20 6f 75  |rocess.Sprite ou|
00000f50  74 70 75 74 22 2c 22 50  72 6f 63 65 73 73 2e 53  |tput","Process.S|
00000f60  63 61 6c 69 6e 67 22 2c  22 50 72 6f 63 65 73 73  |caling","Process|
00000f70  2e 4d 69 73 63 22 2c 22  45 78 61 6d 69 6e 65 2e  |.Misc","Examine.|
00000f80  5a 6f 6f 6d 22 2c 22 4d  61 6e 69 70 75 6c 61 74  |Zoom","Manipulat|
00000f90  65 2e 4d 69 72 72 6f 72  22 2c 22 4d 69 73 63 2e  |e.Mirror","Misc.|
00000fa0  53 61 76 65 22 2c 22 4d  69 73 63 2e 53 74 61 74  |Save","Misc.Stat|
00000fb0  75 73 22 20 3a 20 e7 73  65 6c 65 63 74 33 20 8b  |us" : .select3 .|
00000fc0  20 73 65 6c 65 63 74 24  3d 22 22 0d 03 7a de 20  | select$=""..z. |
00000fd0  c9 20 22 50 72 6f 63 65  73 73 2e 53 70 72 69 74  |. "Process.Sprit|
00000fe0  65 20 6f 75 74 70 75 74  2e 4f 75 74 70 75 74 20  |e output.Output |
00000ff0  6d 6f 64 65 22 2c 22 50  72 6f 63 65 73 73 2e 53  |mode","Process.S|
00001000  70 72 69 74 65 20 6f 75  74 70 75 74 2e 4f 75 74  |prite output.Out|
00001010  70 75 74 20 70 61 6c 65  74 74 65 22 2c 22 50 72  |put palette","Pr|
00001020  6f 63 65 73 73 2e 53 70  72 69 74 65 20 6f 75 74  |ocess.Sprite out|
00001030  70 75 74 2e 45 72 72 6f  72 20 73 70 72 65 61 64  |put.Error spread|
00001040  69 6e 67 22 2c 22 50 72  6f 63 65 73 73 2e 53 63  |ing","Process.Sc|
00001050  61 6c 69 6e 67 2e 78 22  2c 22 50 72 6f 63 65 73  |aling.x","Proces|
00001060  73 2e 53 63 61 6c 69 6e  67 2e 79 22 2c 22 45 78  |s.Scaling.y","Ex|
00001070  61 6d 69 6e 65 2e 5a 6f  6f 6d 2e 49 6e 22 2c 22  |amine.Zoom.In","|
00001080  45 78 61 6d 69 6e 65 2e  5a 6f 6f 6d 2e 4f 75 74  |Examine.Zoom.Out|
00001090  22 20 3a 20 e7 73 65 6c  65 63 74 34 20 8b 20 73  |" : .select4 . s|
000010a0  65 6c 65 63 74 24 3d 22  22 0d 03 84 05 cb 0d 03  |elect$="".......|
000010b0  8e 10 c8 8e 20 73 65 6c  65 63 74 24 20 ca 0d 03  |.... select$ ...|
000010c0  98 18 20 c9 20 22 22 20  3a 20 f4 20 44 6f 20 6e  |.. . "" : . Do n|
000010d0  6f 74 68 69 6e 67 0d 03  a2 1e 20 c9 20 22 51 75  |othing.... . "Qu|
000010e0  69 74 22 20 3a 20 f4 20  51 75 69 74 20 70 72 6f  |it" : . Quit pro|
000010f0  67 72 61 6d 0d 03 ac 1d  20 20 f2 64 69 65 3a f4  |gram....  .die:.|
00001100  20 54 69 64 79 20 75 70  20 61 6e 64 20 65 78 69  | Tidy up and exi|
00001110  74 0d 03 b6 22 20 c9 20  22 50 6f 70 20 75 70 22  |t..." . "Pop up"|
00001120  20 3a 20 f4 20 50 6f 70  20 75 70 20 6f 70 74 69  | : . Pop up opti|
00001130  6f 6e 73 0d 03 c0 13 20  20 c8 8e 20 73 65 6c 65  |ons....  .. sele|
00001140  63 74 32 24 20 ca 0d 03  ca 29 20 20 20 c9 20 22  |ct2$ ....)   . "|
00001150  41 75 74 6f 20 6d 6f 64  65 22 20 3a 20 41 75 74  |Auto mode" : Aut|
00001160  6f 4d 6f 64 65 3d ac 41  75 74 6f 4d 6f 64 65 0d  |oMode=.AutoMode.|
00001170  03 d4 2a 20 20 20 c9 20  22 41 75 74 6f 20 70 61  |..*   . "Auto pa|
00001180  6c 65 74 74 65 22 20 3a  20 41 75 74 6f 50 61 6c  |lette" : AutoPal|
00001190  3d ac 41 75 74 6f 50 61  6c 0d 03 de 2b 20 20 20  |=.AutoPal...+   |
000011a0  c9 20 22 4d 6f 64 65 20  73 65 74 22 20 3a 20 f4  |. "Mode set" : .|
000011b0  20 53 65 6c 65 63 74 20  6e 65 77 20 6d 6f 64 65  | Select new mode|
000011c0  20 73 65 74 0d 03 e8 19  20 20 20 20 c8 8e 20 c0  | set....    .. .|
000011d0  73 65 6c 65 63 74 33 24  2c 34 29 20 ca 0d 03 f2  |select3$,4) ....|
000011e0  29 20 20 20 20 20 c9 20  22 52 6f 6f 74 22 20 3a  |)     . "Root" :|
000011f0  20 f4 20 4e 6f 20 73 65  6c 65 63 74 69 6f 6e 20  | . No selection |
00001200  28 72 6f 6f 74 29 0d 03  fc 2b 20 20 20 20 20 c9  |(root)...+     .|
00001210  20 22 4e 6f 6e 65 22 20  3a 20 4d 6f 64 65 53 65  | "None" : ModeSe|
00001220  74 3d 30 3a f4 20 4e 6f  20 6d 6f 64 65 20 73 65  |t=0:. No mode se|
00001230  74 0d 04 06 37 20 20 20  20 20 c9 20 22 4e 6f 72  |t...7     . "Nor|
00001240  6d 22 20 3a 20 4d 6f 64  65 53 65 74 3d 31 3a f4  |m" : ModeSet=1:.|
00001250  20 4e 6f 72 6d 61 6c 20  6d 6f 6e 69 74 6f 72 20  | Normal monitor |
00001260  6d 6f 64 65 20 73 65 74  0d 04 10 3a 20 20 20 20  |mode set...:    |
00001270  20 c9 20 22 4d 75 6c 74  22 20 3a 20 4d 6f 64 65  | . "Mult" : Mode|
00001280  53 65 74 3d 32 3a f4 20  4d 75 6c 74 69 73 79 6e  |Set=2:. Multisyn|
00001290  63 20 6d 6f 6e 69 74 6f  72 20 6d 6f 64 65 20 73  |c monitor mode s|
000012a0  65 74 0d 04 1a 35 20 20  20 20 20 7f 20 3a 20 f4  |et...5     . : .|
000012b0  20 55 73 65 72 20 6d 6f  64 65 20 73 65 74 2c 20  | User mode set, |
000012c0  63 68 65 63 6b 20 61 6e  64 20 69 66 20 6f 6b 2c  |check and if ok,|
000012d0  20 63 68 61 6e 67 65 0d  04 24 98 20 20 20 20 20  | change..$.     |
000012e0  20 73 24 3d 73 65 6c 65  63 74 33 24 3a 70 25 3d  | s$=select3$:p%=|
000012f0  a7 73 24 2c 22 2c 22 29  3a e7 70 25 3e 30 20 8c  |.s$,","):.p%>0 .|
00001300  20 6d 31 25 3d bb 73 24  3a 73 24 3d c1 73 24 2c  | m1%=.s$:s$=.s$,|
00001310  70 25 2b 31 29 3a 70 25  3d a7 73 24 2c 22 2c 22  |p%+1):p%=.s$,","|
00001320  29 3a e7 70 25 3e 30 20  8c 20 6d 32 25 3d bb 73  |):.p%>0 . m2%=.s|
00001330  24 3a 73 24 3d c1 73 24  2c 70 25 2b 31 29 3a 70  |$:s$=.s$,p%+1):p|
00001340  25 3d a7 73 24 2c 22 2c  22 29 3a e7 70 25 3e 30  |%=.s$,","):.p%>0|
00001350  20 8c 20 6d 33 25 3d bb  73 24 3a 73 24 3d c1 73  | . m3%=.s$:s$=.s|
00001360  24 2c 70 25 2b 31 29 3a  6d 34 25 3d bb 73 24 0d  |$,p%+1):m4%=.s$.|
00001370  04 2e da 20 20 20 20 20  20 e7 70 25 3e 30 20 8c  |...      .p%>0 .|
00001380  20 55 73 65 72 4d 6f 64  65 53 65 74 25 28 31 29  | UserModeSet%(1)|
00001390  3d 6d 31 25 3a 55 73 65  72 4d 6f 64 65 53 65 74  |=m1%:UserModeSet|
000013a0  25 28 32 29 3d 6d 32 25  3a 55 73 65 72 4d 6f 64  |%(2)=m2%:UserMod|
000013b0  65 53 65 74 25 28 33 29  3d 6d 33 25 3a 55 73 65  |eSet%(3)=m3%:Use|
000013c0  72 4d 6f 64 65 53 65 74  25 28 34 29 3d 6d 34 25  |rModeSet%(4)=m4%|
000013d0  3a 4d 6f 64 65 53 65 74  3d 33 20 8b 20 f2 65 72  |:ModeSet=3 . .er|
000013e0  72 6f 72 28 2d 31 2c 22  42 61 64 20 75 73 65 72  |ror(-1,"Bad user|
000013f0  20 6d 6f 64 65 20 73 65  74 2e 20 50 6c 65 61 73  | mode set. Pleas|
00001400  65 20 75 73 65 20 27 3c  32 63 6f 6c 6d 6f 64 65  |e use '<2colmode|
00001410  3e 2c 3c 34 63 6f 6c 6d  6f 64 65 3e 2c 3c 31 36  |>,<4colmode>,<16|
00001420  63 6f 6c 6d 6f 64 65 3e  2c 3c 32 35 36 63 6f 6c  |colmode>,<256col|
00001430  6d 6f 64 65 3e 27 2c 20  65 2e 67 2e 20 27 31 2c  |mode>', e.g. '1,|
00001440  32 2c 33 2c 34 27 2e 22  29 0d 04 38 09 20 20 20  |2,3,4'.")..8.   |
00001450  20 cb 0d 04 42 29 20 20  20 c9 20 22 41 75 74 6f  | ...B)   . "Auto|
00001460  20 7a 6f 6f 6d 22 20 3a  20 41 75 74 6f 5a 6f 6f  | zoom" : AutoZoo|
00001470  6d 3d ac 41 75 74 6f 5a  6f 6f 6d 0d 04 4c 29 20  |m=.AutoZoom..L) |
00001480  20 20 c9 20 22 56 69 65  77 20 6d 6f 64 65 22 20  |  . "View mode" |
00001490  3a 20 56 69 65 77 4d 6f  64 65 3d ac 56 69 65 77  |: ViewMode=.View|
000014a0  4d 6f 64 65 0d 04 56 07  20 20 cb 0d 04 60 27 20  |Mode..V.  ...`' |
000014b0  c9 20 22 50 72 6f 63 65  73 73 22 20 3a 20 f4 20  |. "Process" : . |
000014c0  50 72 6f 63 65 73 73 69  6e 67 20 6f 70 74 69 6f  |Processing optio|
000014d0  6e 73 0d 04 6a 13 20 20  c8 8e 20 73 65 6c 65 63  |ns..j.  .. selec|
000014e0  74 32 24 20 ca 0d 04 74  2f 20 20 20 c9 20 22 43  |t2$ ...t/   . "C|
000014f0  6f 6c 6f 75 72 22 20 3a  20 f4 20 43 6f 6c 6f 75  |olour" : . Colou|
00001500  72 20 70 72 6f 63 65 73  73 69 6e 67 20 6f 70 74  |r processing opt|
00001510  69 6f 6e 73 0d 04 7e 15  20 20 20 20 c8 8e 20 73  |ions..~.    .. s|
00001520  65 6c 65 63 74 33 24 20  ca 0d 04 88 35 20 20 20  |elect3$ ....5   |
00001530  20 20 c9 20 22 42 6c 61  63 6b 20 61 6e 64 20 77  |  . "Black and w|
00001540  68 69 74 65 22 20 3a 20  42 6c 61 63 6b 57 68 69  |hite" : BlackWhi|
00001550  74 65 3d ac 42 6c 61 63  6b 57 68 69 74 65 0d 04  |te=.BlackWhite..|
00001560  92 36 20 20 20 20 20 c9  20 22 43 6f 72 72 65 63  |.6     . "Correc|
00001570  74 20 67 61 6d 6d 61 22  20 3a 20 f4 20 47 61 6d  |t gamma" : . Gam|
00001580  6d 61 20 63 6f 72 72 65  63 74 69 6f 6e 20 66 61  |ma correction fa|
00001590  63 74 6f 72 0d 04 9c 5b  20 20 20 20 20 20 e7 28  |ctor...[      .(|
000015a0  73 65 6c 65 63 74 34 24  2b 73 65 6c 65 63 74 35  |select4$+select5|
000015b0  24 29 3d 22 22 20 8c 20  47 61 6d 6d 61 46 3d 31  |$)="" . GammaF=1|
000015c0  20 8b 20 47 61 6d 6d 61  46 3d bb 28 73 65 6c 65  | . GammaF=.(sele|
000015d0  63 74 34 24 2b 22 2e 22  2b 73 65 6c 65 63 74 35  |ct4$+"."+select5|
000015e0  24 29 3a f4 20 4e 65 77  20 66 61 63 74 6f 72 0d  |$):. New factor.|
000015f0  04 a6 3a 20 20 20 20 20  20 47 61 6d 6d 61 3d 28  |..:      Gamma=(|
00001600  47 61 6d 6d 61 46 3c 3e  31 29 80 28 47 61 6d 6d  |GammaF<>1).(Gamm|
00001610  61 46 3e 30 29 3a f4 20  47 61 6d 6d 61 20 69 6e  |aF>0):. Gamma in|
00001620  20 65 66 66 65 63 74 20  3f 0d 04 b0 36 20 20 20  | effect ?...6   |
00001630  20 20 c9 20 22 43 6f 72  72 65 63 74 20 62 6c 61  |  . "Correct bla|
00001640  63 6b 22 20 3a 20 f4 20  42 6c 61 63 6b 20 63 6f  |ck" : . Black co|
00001650  72 72 65 63 74 69 6f 6e  20 66 61 63 74 6f 72 0d  |rrection factor.|
00001660  04 ba 43 20 20 20 20 20  20 e7 73 65 6c 65 63 74  |..C      .select|
00001670  34 24 3d 22 22 20 8c 20  42 6c 61 63 6b 46 3d 30  |4$="" . BlackF=0|
00001680  20 8b 20 42 6c 61 63 6b  46 3d bb 28 73 65 6c 65  | . BlackF=.(sele|
00001690  63 74 34 24 29 3a f4 20  4e 65 77 20 66 61 63 74  |ct4$):. New fact|
000016a0  6f 72 0d 04 c4 3a 20 20  20 20 20 20 42 6c 61 63  |or...:      Blac|
000016b0  6b 3d 28 42 6c 61 63 6b  46 3c 3e 30 29 3a f4 20  |k=(BlackF<>0):. |
000016c0  42 6c 61 63 6b 20 63 6f  72 72 65 63 74 69 6f 6e  |Black correction|
000016d0  20 69 6e 20 65 66 66 65  63 74 20 3f 0d 04 ce 28  | in effect ?...(|
000016e0  20 20 20 20 20 c9 20 22  45 78 70 61 6e 64 20 72  |     . "Expand r|
000016f0  61 6e 67 65 22 20 3a 20  52 61 6e 67 65 3d ac 52  |ange" : Range=.R|
00001700  61 6e 67 65 0d 04 d8 2e  20 20 20 20 20 c9 20 22  |ange....     . "|
00001710  49 6e 76 65 72 74 20 52  47 42 22 20 3a 20 49 6e  |Invert RGB" : In|
00001720  76 65 72 74 52 47 42 3d  ac 49 6e 76 65 72 74 52  |vertRGB=.InvertR|
00001730  47 42 0d 04 e2 09 20 20  20 20 cb 0d 04 ec 32 20  |GB....    ....2 |
00001740  20 20 c9 20 22 53 70 72  69 74 65 20 6f 75 74 70  |  . "Sprite outp|
00001750  75 74 22 20 3a 20 f4 20  53 70 72 69 74 65 20 6f  |ut" : . Sprite o|
00001760  75 74 70 75 74 20 6f 70  74 69 6f 6e 73 0d 04 f6  |utput options...|
00001770  15 20 20 20 20 c8 8e 20  73 65 6c 65 63 74 33 24  |.    .. select3$|
00001780  20 ca 0d 05 00 39 20 20  20 20 20 c9 20 22 4f 75  | ....9     . "Ou|
00001790  74 70 75 74 20 6d 6f 64  65 22 20 3a 20 f4 20 43  |tput mode" : . C|
000017a0  68 61 6e 67 65 20 6f 75  74 70 75 74 20 6d 6f 64  |hange output mod|
000017b0  65 20 73 65 6c 65 63 74  69 6f 6e 0d 05 0a 32 20  |e selection...2 |
000017c0  20 20 20 20 20 e7 73 65  6c 65 63 74 34 24 3d 22  |     .select4$="|
000017d0  41 75 74 6f 22 20 8c 20  4f 75 74 4d 6f 64 65 3d  |Auto" . OutMode=|
000017e0  31 20 8b 20 4f 75 74 4d  6f 64 65 3d 32 0d 05 14  |1 . OutMode=2...|
000017f0  3f 20 20 20 20 20 c9 20  22 4f 75 74 70 75 74 20  |?     . "Output |
00001800  70 61 6c 65 74 74 65 22  20 3a 20 f4 20 43 68 61  |palette" : . Cha|
00001810  6e 67 65 20 6f 75 74 70  75 74 20 70 61 6c 65 74  |nge output palet|
00001820  74 65 20 73 65 6c 65 63  74 69 6f 6e 0d 05 1e 54  |te selection...T|
00001830  20 20 20 20 20 20 e7 73  65 6c 65 63 74 34 24 3d  |      .select4$=|
00001840  22 43 75 72 72 65 6e 74  22 20 8c 20 4f 75 74 50  |"Current" . OutP|
00001850  61 6c 3d 31 20 8b 20 e7  73 65 6c 65 63 74 34 24  |al=1 . .select4$|
00001860  3d 22 44 65 66 61 75 6c  74 22 20 8c 20 4f 75 74  |="Default" . Out|
00001870  50 61 6c 3d 32 20 8b 20  4f 75 74 50 61 6c 3d 33  |Pal=2 . OutPal=3|
00001880  0d 05 28 34 20 20 20 20  20 c9 20 22 45 72 72 6f  |..(4     . "Erro|
00001890  72 20 73 70 72 65 61 64  69 6e 67 22 20 3a 20 f4  |r spreading" : .|
000018a0  20 53 65 74 20 65 72 72  6f 72 20 73 70 72 65 61  | Set error sprea|
000018b0  64 69 6e 67 0d 05 32 17  20 20 20 20 20 20 c8 8e  |ding..2.      ..|
000018c0  20 73 65 6c 65 63 74 34  24 20 ca 0d 05 3c 23 20  | select4$ ...<# |
000018d0  20 20 20 20 20 20 c9 20  22 53 69 6d 70 6c 65 22  |      . "Simple"|
000018e0  20 3a 20 45 72 72 53 70  72 65 61 64 3d 31 0d 05  | : ErrSpread=1..|
000018f0  46 2c 20 20 20 20 20 20  20 c9 20 22 46 6c 6f 79  |F,       . "Floy|
00001900  64 20 53 74 65 69 6e 62  65 72 67 22 20 3a 20 45  |d Steinberg" : E|
00001910  72 72 53 70 72 65 61 64  3d 32 0d 05 50 20 20 20  |rrSpread=2..P   |
00001920  20 20 20 20 20 c9 20 22  4f 66 66 22 20 3a 20 45  |     . "Off" : E|
00001930  72 72 53 70 72 65 61 64  3d 30 0d 05 5a 0b 20 20  |rrSpread=0..Z.  |
00001940  20 20 20 20 cb 0d 05 64  25 20 20 20 20 20 c9 20  |    ...d%     . |
00001950  22 5a 69 67 20 7a 61 67  22 20 3a 20 5a 69 67 5a  |"Zig zag" : ZigZ|
00001960  61 67 3d ac 5a 69 67 5a  61 67 0d 05 6e 09 20 20  |ag=.ZigZag..n.  |
00001970  20 20 cb 0d 05 78 31 20  20 20 c9 20 22 43 6c 65  |  ...x1   . "Cle|
00001980  61 72 20 6f 75 74 70 75  74 22 20 3a 20 f4 20 43  |ar output" : . C|
00001990  6c 65 61 72 20 6f 75 74  70 75 74 20 66 69 6c 65  |lear output file|
000019a0  20 6f 66 66 0d 05 82 3a  20 20 20 20 e7 43 6c 65  | off...:    .Cle|
000019b0  61 72 46 69 6c 65 20 8c  20 c8 99 20 22 4f 53 5f  |arFile . .. "OS_|
000019c0  46 69 6c 65 22 2c 36 2c  43 6c 65 61 72 53 61 76  |File",6,ClearSav|
000019d0  65 24 3a 43 6c 65 61 72  46 69 6c 65 3d a3 0d 05  |e$:ClearFile=...|
000019e0  8c 2b 20 20 20 c9 20 22  53 63 61 6c 69 6e 67 22  |.+   . "Scaling"|
000019f0  20 3a 20 f4 20 43 68 61  6e 67 65 20 73 63 61 6c  | : . Change scal|
00001a00  65 20 66 61 63 74 6f 72  73 0d 05 96 23 20 20 20  |e factors...#   |
00001a10  20 78 6d 25 3d 2d 31 3a  79 6d 25 3d 2d 31 3a 78  | xm%=-1:ym%=-1:x|
00001a20  64 25 3d 2d 31 3a 79 64  25 3d 2d 31 0d 05 a0 15  |d%=-1:yd%=-1....|
00001a30  20 20 20 20 c8 8e 20 73  65 6c 65 63 74 33 24 20  |    .. select3$ |
00001a40  ca 0d 05 aa 2a 20 20 20  20 20 c9 20 22 31 3a 31  |....*     . "1:1|
00001a50  22 20 3a 20 78 6d 25 3d  31 3a 79 6d 25 3d 31 3a  |" : xm%=1:ym%=1:|
00001a60  78 64 25 3d 31 3a 79 64  25 3d 31 0d 05 b4 2a 20  |xd%=1:yd%=1...* |
00001a70  20 20 20 20 c9 20 22 31  3a 32 22 20 3a 20 78 6d  |    . "1:2" : xm|
00001a80  25 3d 31 3a 79 6d 25 3d  31 3a 78 64 25 3d 32 3a  |%=1:ym%=1:xd%=2:|
00001a90  79 64 25 3d 32 0d 05 be  2a 20 20 20 20 20 c9 20  |yd%=2...*     . |
00001aa0  22 32 3a 31 22 20 3a 20  78 6d 25 3d 32 3a 79 6d  |"2:1" : xm%=2:ym|
00001ab0  25 3d 32 3a 78 64 25 3d  31 3a 79 64 25 3d 31 0d  |%=2:xd%=1:yd%=1.|
00001ac0  05 c8 80 20 20 20 20 20  c9 20 22 78 22 2c 22 79  |...     . "x","y|
00001ad0  22 20 3a 20 73 24 3d 73  65 6c 65 63 74 34 24 3a  |" : s$=select4$:|
00001ae0  70 25 3d a7 73 24 2c 22  3a 22 29 3a 6d 75 6c 25  |p%=.s$,":"):mul%|
00001af0  3d bb 73 24 3a e7 70 25  3e 30 20 8c 20 73 24 3d  |=.s$:.p%>0 . s$=|
00001b00  c1 73 24 2c 70 25 2b 31  29 3a 64 69 76 25 3d bb  |.s$,p%+1):div%=.|
00001b10  73 24 20 8b 20 64 69 76  25 3d 30 3a f4 20 44 65  |s$ . div%=0:. De|
00001b20  74 65 72 6d 69 6e 65 20  73 63 61 6c 69 6e 67 20  |termine scaling |
00001b30  72 61 74 69 6f 20 28 30  3d 69 6e 70 69 78 29 0d  |ratio (0=inpix).|
00001b40  05 d2 3f 20 20 20 20 20  20 e7 73 65 6c 65 63 74  |..?      .select|
00001b50  33 24 3d 22 78 22 20 8c  20 78 6d 25 3d 6d 75 6c  |3$="x" . xm%=mul|
00001b60  25 3a 78 64 25 3d 64 69  76 25 20 8b 20 79 6d 25  |%:xd%=div% . ym%|
00001b70  3d 6d 75 6c 25 3a 79 64  25 3d 64 69 76 25 0d 05  |=mul%:yd%=div%..|
00001b80  dc 09 20 20 20 20 cb 0d  05 e6 39 20 20 20 20 e7  |..    ....9    .|
00001b90  78 6d 25 3d 2d 31 20 8b  20 58 4d 75 6c 25 3d 78  |xm%=-1 . XMul%=x|
00001ba0  6d 25 3a 58 44 69 76 25  3d 78 64 25 3a 44 69 76  |m%:XDiv%=xd%:Div|
00001bb0  49 73 49 6e 58 3d 28 58  44 69 76 25 3c 3d 30 29  |IsInX=(XDiv%<=0)|
00001bc0  0d 05 f0 39 20 20 20 20  e7 79 6d 25 3d 2d 31 20  |...9    .ym%=-1 |
00001bd0  8b 20 59 4d 75 6c 25 3d  79 6d 25 3a 59 44 69 76  |. YMul%=ym%:YDiv|
00001be0  25 3d 79 64 25 3a 44 69  76 49 73 49 6e 59 3d 28  |%=yd%:DivIsInY=(|
00001bf0  59 44 69 76 25 3c 3d 30  29 0d 05 fa 28 20 20 20  |YDiv%<=0)...(   |
00001c00  c9 20 22 4d 69 73 63 22  20 3a 20 f4 20 4d 69 73  |. "Misc" : . Mis|
00001c10  63 65 6c 61 6e 65 6f 75  73 20 6f 70 74 69 6f 6e  |celaneous option|
00001c20  73 0d 06 04 15 20 20 20  20 c8 8e 20 73 65 6c 65  |s....    .. sele|
00001c30  63 74 33 24 20 ca 0d 06  0e 31 20 20 20 20 20 c9  |ct3$ ....1     .|
00001c40  20 22 53 63 72 65 65 6e  20 62 6c 61 6e 6b 69 6e  | "Screen blankin|
00001c50  67 22 20 3a 20 42 6c 61  6e 6b 69 6e 67 3d ac 42  |g" : Blanking=.B|
00001c60  6c 61 6e 6b 69 6e 67 0d  06 18 28 20 20 20 20 20  |lanking...(     |
00001c70  c9 20 22 47 49 46 20 73  63 61 6e 22 20 3a 20 47  |. "GIF scan" : G|
00001c80  49 46 53 63 61 6e 3d ac  47 49 46 53 63 61 6e 0d  |IFScan=.GIFScan.|
00001c90  06 22 2a 20 20 20 20 20  c9 20 22 49 6d 61 67 65  |."*     . "Image|
00001ca0  20 6e 75 6d 62 65 72 22  20 3a 20 f4 20 49 6d 61  | number" : . Ima|
00001cb0  67 65 20 6e 75 6d 62 65  72 0d 06 2c 3a 20 20 20  |ge number..,:   |
00001cc0  20 20 20 e7 73 65 6c 65  63 74 34 24 3d 22 22 20  |   .select4$="" |
00001cd0  8c 20 49 6d 61 67 65 4e  72 25 3d 31 20 8b 20 49  |. ImageNr%=1 . I|
00001ce0  6d 61 67 65 4e 72 25 3d  bb 28 73 65 6c 65 63 74  |mageNr%=.(select|
00001cf0  34 24 29 0d 06 36 44 20  20 20 20 20 c9 20 22 52  |4$)..6D     . "R|
00001d00  65 6c 6f 61 64 20 6c 61  73 74 22 2c 22 4e 65 78  |eload last","Nex|
00001d10  74 20 69 6d 61 67 65 22  2c 22 50 72 65 76 69 6f  |t image","Previo|
00001d20  75 73 20 69 6d 61 67 65  22 20 3a 20 f4 20 52 65  |us image" : . Re|
00001d30  6c 6f 61 64 65 72 73 0d  06 40 1b 20 20 20 20 20  |loaders..@.     |
00001d40  20 c8 8e 20 c0 73 65 6c  65 63 74 33 24 2c 31 29  | .. .select3$,1)|
00001d50  20 ca 0d 06 4a 1e 20 20  20 20 20 20 20 c9 20 22  | ...J.       . "|
00001d60  4e 22 20 3a 20 49 6d 61  67 65 4e 72 25 2b 3d 31  |N" : ImageNr%+=1|
00001d70  0d 06 54 2c 20 20 20 20  20 20 20 c9 20 22 50 22  |..T,       . "P"|
00001d80  20 3a 20 e7 49 6d 61 67  65 4e 72 25 3e 31 20 8c  | : .ImageNr%>1 .|
00001d90  20 49 6d 61 67 65 4e 72  25 2d 3d 31 0d 06 5e 0b  | ImageNr%-=1..^.|
00001da0  20 20 20 20 20 20 cb 0d  06 68 6a 20 20 20 20 20  |      ...hj     |
00001db0  20 e7 49 6e 46 69 6c 65  24 3c 3e 22 22 20 8c 20  | .InFile$<>"" . |
00001dc0  4c 6e 61 6d 65 24 3d 49  6e 46 69 6c 65 24 3a 4c  |Lname$=InFile$:L|
00001dd0  74 79 70 65 25 3d 49 6e  54 79 70 65 25 3a 41 63  |type%=InType%:Ac|
00001de0  74 4c 6f 61 64 3d b9 20  8b 20 f2 65 72 72 6f 72  |tLoad=. . .error|
00001df0  28 2d 31 2c 22 4c 6f 61  64 20 61 6e 20 69 6d 61  |(-1,"Load an ima|
00001e00  67 65 20 66 69 6c 65 20  66 69 72 73 74 20 21 22  |ge file first !"|
00001e10  29 0d 06 72 2a 20 20 20  20 20 c9 20 22 50 65 72  |)..r*     . "Per|
00001e20  63 65 6e 74 61 67 65 22  20 3a 20 50 65 72 63 65  |centage" : Perce|
00001e30  6e 74 3d ac 50 65 72 63  65 6e 74 0d 06 7c 09 20  |nt=.Percent..|. |
00001e40  20 20 20 cb 0d 06 86 07  20 20 cb 0d 06 90 2c 20  |   .....  ...., |
00001e50  c9 20 22 4d 61 6e 69 70  75 6c 61 74 65 22 20 3a  |. "Manipulate" :|
00001e60  20 f4 20 4d 61 6e 69 70  75 6c 61 74 69 6f 6e 20  | . Manipulation |
00001e70  6f 70 74 69 6f 6e 73 0d  06 9a 13 20 20 c8 8e 20  |options....  .. |
00001e80  73 65 6c 65 63 74 32 24  20 ca 0d 06 a4 23 20 20  |select2$ ....#  |
00001e90  20 c9 20 22 52 6f 74 61  74 65 22 20 3a 20 f4 20  | . "Rotate" : . |
00001ea0  52 6f 74 61 74 65 20 73  70 72 69 74 65 0d 06 ae  |Rotate sprite...|
00001eb0  25 20 20 20 20 41 63 74  52 6f 74 61 74 65 3d b9  |%    ActRotate=.|
00001ec0  3a f4 20 53 65 74 20 72  6f 74 61 74 65 20 66 6c  |:. Set rotate fl|
00001ed0  61 67 0d 06 b8 22 20 20  20 c9 20 22 4d 69 72 72  |ag..."   . "Mirr|
00001ee0  6f 72 22 20 3a 20 f4 20  4d 69 72 72 6f 72 20 69  |or" : . Mirror i|
00001ef0  6d 61 67 65 0d 06 c2 3b  20 20 20 20 f2 76 61 72  |mage...;    .var|
00001f00  28 22 69 6d 67 78 22 2c  53 70 72 57 25 29 3a f2  |("imgx",SprW%):.|
00001f10  76 61 72 28 22 69 6d 67  79 22 2c 53 70 72 48 25  |var("imgy",SprH%|
00001f20  29 3a f4 20 4d 6f 64 75  6c 65 20 69 6e 66 6f 0d  |):. Module info.|
00001f30  06 cc 1f 20 20 20 20 f2  68 6f 75 72 5f 6f 6e 3a  |...    .hour_on:|
00001f40  f4 20 48 6f 75 72 67 6c  61 73 73 20 6f 6e 0d 06  |. Hourglass on..|
00001f50  d6 69 20 20 20 20 e7 73  65 6c 65 63 74 33 24 3d  |.i    .select3$=|
00001f60  22 78 22 20 8c 20 c8 99  20 22 54 72 61 6e 73 6c  |"x" . .. "Transl|
00001f70  61 74 6f 72 5f 4d 69 72  72 6f 72 58 22 2c 53 70  |ator_MirrorX",Sp|
00001f80  72 50 74 72 25 20 8b 20  c8 99 20 22 54 72 61 6e  |rPtr% . .. "Tran|
00001f90  73 6c 61 74 6f 72 5f 4d  69 72 72 6f 72 59 22 2c  |slator_MirrorY",|
00001fa0  53 70 72 50 74 72 25 3a  f4 20 4d 69 72 72 6f 72  |SprPtr%:. Mirror|
00001fb0  20 73 70 72 69 74 65 0d  06 e0 21 20 20 20 20 f2  | sprite...!    .|
00001fc0  68 6f 75 72 5f 6f 66 66  3a f4 20 48 6f 75 72 67  |hour_off:. Hourg|
00001fd0  6c 61 73 73 20 6f 66 66  0d 06 ea 34 20 20 20 20  |lass off...4    |
00001fe0  f2 6e 65 77 5f 77 69 6e  64 6f 77 28 77 69 6e 5f  |.new_window(win_|
00001ff0  69 6d 67 25 29 3a f4 20  46 72 65 73 68 65 6e 20  |img%):. Freshen |
00002000  69 6d 61 67 65 20 77 69  6e 64 6f 77 0d 06 f4 07  |image window....|
00002010  20 20 cb 0d 06 fe 28 20  c9 20 22 45 78 61 6d 69  |  ....( . "Exami|
00002020  6e 65 22 20 3a 20 f4 20  45 78 61 6d 69 6e 61 74  |ne" : . Examinat|
00002030  69 6f 6e 20 6f 70 74 69  6f 6e 73 0d 07 08 13 20  |ion options.... |
00002040  20 c8 8e 20 73 65 6c 65  63 74 32 24 20 ca 0d 07  | .. select2$ ...|
00002050  12 2d 20 20 20 c9 20 22  5a 6f 6f 6d 22 20 3a 20  |.-   . "Zoom" : |
00002060  f4 20 5a 6f 6f 6d 20 69  6e 2c 20 6f 75 74 2c 20  |. Zoom in, out, |
00002070  6e 6f 72 6d 61 6c 20 73  69 7a 65 0d 07 1c 41 20  |normal size...A |
00002080  20 20 20 4f 6c 64 5a 6f  6f 6d 58 3d 5a 6f 6f 6d  |   OldZoomX=Zoom|
00002090  58 3a 4f 6c 64 5a 6f 6f  6d 59 3d 5a 6f 6f 6d 59  |X:OldZoomY=ZoomY|
000020a0  3a f4 20 52 65 6d 65 6d  62 65 72 20 6f 6c 64 20  |:. Remember old |
000020b0  7a 6f 6f 6d 20 66 61 63  74 6f 72 73 0d 07 26 15  |zoom factors..&.|
000020c0  20 20 20 20 c8 8e 20 73  65 6c 65 63 74 33 24 20  |    .. select3$ |
000020d0  ca 0d 07 30 7f 20 20 20  20 20 c9 20 22 49 6e 22  |...0.     . "In"|
000020e0  3a 20 e7 73 65 6c 65 63  74 34 24 3d 22 42 6f 74  |: .select4$="Bot|
000020f0  68 22 20 8c 20 5a 6f 6f  6d 58 3d 5a 6f 6f 6d 58  |h" . ZoomX=ZoomX|
00002100  2a 32 3a 5a 6f 6f 6d 59  3d 5a 6f 6f 6d 59 2a 32  |*2:ZoomY=ZoomY*2|
00002110  20 8b 20 e7 73 65 6c 65  63 74 34 24 3d 22 78 22  | . .select4$="x"|
00002120  20 8c 20 5a 6f 6f 6d 58  3d 5a 6f 6f 6d 58 2a 32  | . ZoomX=ZoomX*2|
00002130  20 8b 20 e7 73 65 6c 65  63 74 34 24 3d 22 79 22  | . .select4$="y"|
00002140  20 8c 20 5a 6f 6f 6d 59  3d 5a 6f 6f 6d 59 2a 32  | . ZoomY=ZoomY*2|
00002150  0d 07 3a 80 20 20 20 20  20 c9 20 22 4f 75 74 22  |..:.     . "Out"|
00002160  3a 20 e7 73 65 6c 65 63  74 34 24 3d 22 42 6f 74  |: .select4$="Bot|
00002170  68 22 20 8c 20 5a 6f 6f  6d 58 3d 5a 6f 6f 6d 58  |h" . ZoomX=ZoomX|
00002180  2f 32 3a 5a 6f 6f 6d 59  3d 5a 6f 6f 6d 59 2f 32  |/2:ZoomY=ZoomY/2|
00002190  20 8b 20 e7 73 65 6c 65  63 74 34 24 3d 22 78 22  | . .select4$="x"|
000021a0  20 8c 20 5a 6f 6f 6d 58  3d 5a 6f 6f 6d 58 2f 32  | . ZoomX=ZoomX/2|
000021b0  20 8b 20 e7 73 65 6c 65  63 74 34 24 3d 22 79 22  | . .select4$="y"|
000021c0  20 8c 20 5a 6f 6f 6d 59  3d 5a 6f 6f 6d 59 2f 32  | . ZoomY=ZoomY/2|
000021d0  0d 07 44 21 20 20 20 20  20 c9 20 22 31 3a 31 22  |..D!     . "1:1"|
000021e0  3a 20 5a 6f 6f 6d 58 3d  31 3a 5a 6f 6f 6d 59 3d  |: ZoomX=1:ZoomY=|
000021f0  31 0d 07 4e 09 20 20 20  20 cb 0d 07 58 4c 20 20  |1..N.    ...XL  |
00002200  20 20 f4 20 53 65 74 20  69 6d 61 67 65 20 77 69  |  . Set image wi|
00002210  6e 64 6f 77 20 65 78 74  65 6e 74 20 61 6e 64 20  |ndow extent and |
00002220  74 69 74 6c 65 20 61 63  63 6f 72 64 69 6e 67 20  |title according |
00002230  74 6f 20 63 75 72 72 65  6e 74 20 7a 6f 6f 6d 20  |to current zoom |
00002240  66 61 63 74 6f 72 0d 07  62 43 20 20 20 20 21 62  |factor..bC    !b|
00002250  6c 6f 63 6b 3d 30 3a 62  6c 6f 63 6b 21 34 3d 30  |lock=0:block!4=0|
00002260  3a 62 6c 6f 63 6b 21 38  3d a4 73 70 72 57 2a 5a  |:block!8=.sprW*Z|
00002270  6f 6f 6d 58 3a 62 6c 6f  63 6b 21 31 32 3d a4 73  |oomX:block!12=.s|
00002280  70 72 48 2a 5a 6f 6f 6d  59 0d 07 6c 43 20 20 20  |prH*ZoomY..lC   |
00002290  20 c8 99 20 57 53 65 74  45 25 2c 77 69 6e 5f 69  | .. WSetE%,win_i|
000022a0  6d 67 25 2c 62 6c 6f 63  6b 3a f4 20 53 65 74 20  |mg%,block:. Set |
000022b0  77 69 6e 64 6f 77 20 65  78 74 65 6e 74 20 74 6f  |window extent to|
000022c0  20 7a 6f 6f 6d 65 64 20  73 69 7a 65 0d 07 76 28  | zoomed size..v(|
000022d0  20 20 20 20 24 49 4d 57  74 74 25 3d a4 69 6d 61  |    $IMWtt%=.ima|
000022e0  67 65 5f 74 69 74 6c 65  3a f4 20 4e 65 77 20 74  |ge_title:. New t|
000022f0  69 74 6c 65 0d 07 80 42  20 20 20 20 21 62 6c 6f  |itle...B    !blo|
00002300  63 6b 3d 77 69 6e 5f 69  6d 67 25 3a c8 99 20 57  |ck=win_img%:.. W|
00002310  47 65 74 57 53 25 2c 2c  62 6c 6f 63 6b 3a f4 20  |GetWS%,,block:. |
00002320  52 65 61 64 20 77 69 6e  64 6f 77 27 73 20 70 6f  |Read window's po|
00002330  73 69 74 69 6f 6e 0d 07  8a 4c 20 20 20 20 64 78  |sition...L    dx|
00002340  25 3d 28 62 6c 6f 63 6b  21 31 32 2d 62 6c 6f 63  |%=(block!12-bloc|
00002350  6b 21 34 29 2f 32 3a 64  79 25 3d 28 62 6c 6f 63  |k!4)/2:dy%=(bloc|
00002360  6b 21 31 36 2d 62 6c 6f  63 6b 21 38 29 2f 32 3a  |k!16-block!8)/2:|
00002370  f4 20 48 61 6c 66 20 77  69 6e 64 6f 77 20 73 69  |. Half window si|
00002380  7a 65 0d 07 94 48 20 20  20 20 76 78 25 3d 62 6c  |ze...H    vx%=bl|
00002390  6f 63 6b 21 32 30 2b 64  78 25 3a 76 79 25 3d 62  |ock!20+dx%:vy%=b|
000023a0  6c 6f 63 6b 21 32 34 2d  64 79 25 3a f4 20 56 65  |lock!24-dy%:. Ve|
000023b0  63 74 6f 72 20 66 72 6f  6d 20 63 65 6e 74 72 65  |ctor from centre|
000023c0  20 74 6f 20 6f 72 69 67  69 6e 0d 07 9e 49 20 20  | to origin...I  |
000023d0  20 20 f4 20 43 61 6c 63  75 6c 61 74 65 20 6e 65  |  . Calculate ne|
000023e0  77 20 73 63 72 6f 6c 6c  20 6f 66 66 73 65 74 73  |w scroll offsets|
000023f0  20 62 79 20 73 63 61 6c  69 6e 67 20 76 65 63 74  | by scaling vect|
00002400  6f 72 20 61 6e 64 20 72  65 2d 74 72 61 6e 73 70  |or and re-transp|
00002410  6f 73 65 0d 07 a8 47 20  20 20 20 62 6c 6f 63 6b  |ose...G    block|
00002420  21 32 30 3d 76 78 25 2a  5a 6f 6f 6d 58 2f 4f 6c  |!20=vx%*ZoomX/Ol|
00002430  64 5a 6f 6f 6d 58 2d 64  78 25 3a 62 6c 6f 63 6b  |dZoomX-dx%:block|
00002440  21 32 34 3d 76 79 25 2a  5a 6f 6f 6d 59 2f 4f 6c  |!24=vy%*ZoomY/Ol|
00002450  64 5a 6f 6f 6d 59 2b 64  79 25 0d 07 b2 3c 20 20  |dZoomY+dy%...<  |
00002460  20 20 f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |  .close_window(|
00002470  77 69 6e 5f 69 6d 67 25  29 3a f2 6f 70 65 6e 5f  |win_img%):.open_|
00002480  77 69 6e 64 6f 77 28 77  69 6e 5f 69 6d 67 25 2c  |window(win_img%,|
00002490  62 6c 6f 63 6b 29 0d 07  bc 2b 20 20 20 c9 20 22  |block)...+   . "|
000024a0  4d 61 67 6e 69 66 69 65  72 22 20 3a 20 f4 20 50  |Magnifier" : . P|
000024b0  6f 70 20 75 70 20 7a 6f  6f 6d 20 77 69 6e 64 6f  |op up zoom windo|
000024c0  77 0d 07 c6 44 20 20 20  20 5a 6f 6f 6d 57 69 6e  |w...D    ZoomWin|
000024d0  3d b9 3a 5a 6f 6f 6d 57  58 25 3d 30 3a 5a 6f 6f  |=.:ZoomWX%=0:Zoo|
000024e0  6d 57 59 25 3d 30 3a 5a  6f 6f 6d 57 3d 5a 6f 6f  |mWY%=0:ZoomW=Zoo|
000024f0  6d 44 3a f4 20 49 6e 69  74 20 7a 6f 6f 6d 20 77  |mD:. Init zoom w|
00002500  69 6e 64 6f 77 0d 07 d0  35 20 20 20 20 f2 6f 70  |indow...5    .op|
00002510  65 6e 5f 77 69 6e 64 6f  77 28 77 69 6e 5f 7a 6f  |en_window(win_zo|
00002520  6f 6d 25 2c 2d 31 29 3a  f4 20 4f 70 65 6e 20 7a  |om%,-1):. Open z|
00002530  6f 6f 6d 20 77 69 6e 64  6f 77 0d 07 da 07 20 20  |oom window....  |
00002540  cb 0d 07 e4 27 20 c9 20  22 4d 69 73 63 22 20 3a  |....' . "Misc" :|
00002550  20 f4 20 4d 69 73 63 65  6c 6c 61 6e 65 6f 75 73  | . Miscellaneous|
00002560  20 6f 70 74 69 6f 6e 73  0d 07 ee 13 20 20 c8 8e  | options....  ..|
00002570  20 73 65 6c 65 63 74 32  24 20 ca 0d 07 f8 2f 20  | select2$ ..../ |
00002580  20 20 c9 20 22 53 61 76  65 22 20 3a 20 f4 20 53  |  . "Save" : . S|
00002590  61 76 65 20 77 68 6f 6c  65 20 6f 72 20 70 61 72  |ave whole or par|
000025a0  74 20 6f 66 20 69 6d 61  67 65 0d 08 02 15 20 20  |t of image....  |
000025b0  20 20 c8 8e 20 73 65 6c  65 63 74 33 24 20 ca 0d  |  .. select3$ ..|
000025c0  08 0c 2f 20 20 20 20 20  c9 20 22 49 6e 63 6c 75  |../     . "Inclu|
000025d0  64 65 20 70 61 6c 65 74  74 65 22 20 3a 20 53 61  |de palette" : Sa|
000025e0  76 65 50 61 6c 3d ac 53  61 76 65 50 61 6c 0d 08  |vePal=.SavePal..|
000025f0  16 2f 20 20 20 20 20 c9  20 22 53 61 6d 65 20 6c  |./     . "Same l|
00002600  65 61 66 6e 61 6d 65 22  20 3a 20 53 61 6d 65 4c  |eafname" : SameL|
00002610  65 61 66 3d ac 53 61 6d  65 4c 65 61 66 0d 08 20  |eaf=.SameLeaf.. |
00002620  37 20 20 20 20 20 7f 20  3a 20 53 61 76 65 4b 69  |7     . : SaveKi|
00002630  6e 64 24 3d 73 65 6c 65  63 74 33 24 3a f4 20 52  |nd$=select3$:. R|
00002640  65 6d 65 6d 62 65 72 20  74 79 70 65 20 6f 66 20  |emember type of |
00002650  73 61 76 65 0d 08 2a 4b  20 20 20 20 20 20 20 24  |save..*K       $|
00002660  53 41 56 66 6e 25 3d 53  61 76 65 53 70 72 24 3a  |SAVfn%=SaveSpr$:|
00002670  24 53 41 56 73 6e 25 3d  22 66 69 6c 65 5f 66 66  |$SAVsn%="file_ff|
00002680  39 22 3a f4 20 53 65 74  20 66 69 6c 65 20 77 69  |9":. Set file wi|
00002690  6e 64 6f 77 20 66 6f 72  20 73 70 72 69 74 65 0d  |ndow for sprite.|
000026a0  08 34 38 20 20 20 20 20  20 20 f2 6f 70 65 6e 5f  |.48       .open_|
000026b0  77 69 6e 64 6f 77 28 77  69 6e 5f 66 69 6c 65 25  |window(win_file%|
000026c0  2c 2d 31 29 3a f4 20 4f  70 65 6e 20 66 69 6c 65  |,-1):. Open file|
000026d0  20 77 69 6e 64 6f 77 0d  08 3e 32 20 20 20 20 20  | window..>2     |
000026e0  20 20 c8 99 20 57 53 65  74 43 61 25 2c 77 69 6e  |  .. WSetCa%,win|
000026f0  5f 66 69 6c 65 25 2c 31  2c 2c 2c 2d 31 2c a9 28  |_file%,1,,,-1,.(|
00002700  53 61 76 65 53 70 72 24  29 0d 08 48 09 20 20 20  |SaveSpr$)..H.   |
00002710  20 cb 0d 08 52 31 20 20  20 c9 20 22 49 6d 61 67  | ...R1   . "Imag|
00002720  65 20 70 61 6c 65 74 74  65 22 20 3a 20 f4 20 53  |e palette" : . S|
00002730  65 6c 65 63 74 20 69 6d  61 67 65 20 70 61 6c 65  |elect image pale|
00002740  74 74 65 0d 08 5c 17 20  20 20 20 f2 73 65 74 5f  |tte..\.    .set_|
00002750  70 61 6c 65 74 74 65 28  31 29 0d 08 66 29 20 20  |palette(1)..f)  |
00002760  20 c9 20 22 53 74 61 74  75 73 22 20 3a 20 f4 20  | . "Status" : . |
00002770  4d 61 6e 69 70 75 6c 61  74 65 20 64 65 66 61 75  |Manipulate defau|
00002780  6c 74 73 0d 08 70 15 20  20 20 20 c8 8e 20 73 65  |lts..p.    .. se|
00002790  6c 65 63 74 33 24 20 ca  0d 08 7a da 20 20 20 20  |lect3$ ...z.    |
000027a0  20 c9 20 22 53 61 76 65  22 20 3a 20 53 74 61 74  | . "Save" : Stat|
000027b0  75 73 3d ae 28 22 3c 54  72 61 6e 73 6c 61 74 6f  |us=.("<Translato|
000027c0  72 24 44 69 72 3e 2e 53  74 61 74 75 73 22 29 3a  |r$Dir>.Status"):|
000027d0  f1 23 53 74 61 74 75 73  2c 41 75 74 6f 4d 6f 64  |.#Status,AutoMod|
000027e0  65 2c 41 75 74 6f 50 61  6c 2c 4d 6f 64 65 53 65  |e,AutoPal,ModeSe|
000027f0  74 2c 45 72 72 53 70 72  65 61 64 2c 53 61 76 65  |t,ErrSpread,Save|
00002800  50 61 6c 2c 55 73 65 72  4d 6f 64 65 53 65 74 25  |Pal,UserModeSet%|
00002810  28 31 29 2c 55 73 65 72  4d 6f 64 65 53 65 74 25  |(1),UserModeSet%|
00002820  28 32 29 2c 55 73 65 72  4d 6f 64 65 53 65 74 25  |(2),UserModeSet%|
00002830  28 33 29 2c 55 73 65 72  4d 6f 64 65 53 65 74 25  |(3),UserModeSet%|
00002840  28 34 29 2c 41 75 74 6f  5a 6f 6f 6d 2c 42 6c 61  |(4),AutoZoom,Bla|
00002850  63 6b 57 68 69 74 65 2c  47 49 46 53 63 61 6e 2c  |ckWhite,GIFScan,|
00002860  42 6c 61 6e 6b 69 6e 67  2c 49 6e 76 65 72 74 52  |Blanking,InvertR|
00002870  47 42 0d 08 84 6b 20 20  20 20 20 20 f1 23 53 74  |GB...k      .#St|
00002880  61 74 75 73 2c 5a 69 67  5a 61 67 2c 56 69 65 77  |atus,ZigZag,View|
00002890  4d 6f 64 65 2c 4f 75 74  4d 6f 64 65 2c 4f 75 74  |Mode,OutMode,Out|
000028a0  50 61 6c 2c 50 65 72 63  65 6e 74 2c 47 61 6d 6d  |Pal,Percent,Gamm|
000028b0  61 46 2c 47 61 6d 6d 61  2c 42 6c 61 63 6b 46 2c  |aF,Gamma,BlackF,|
000028c0  42 6c 61 63 6b 2c 52 61  6e 67 65 2c 53 61 6d 65  |Black,Range,Same|
000028d0  4c 65 61 66 3a d9 23 53  74 61 74 75 73 0d 08 8e  |Leaf:.#Status...|
000028e0  64 20 20 20 20 20 c9 20  22 4c 6f 61 64 22 20 3a  |d     . "Load" :|
000028f0  20 e7 a4 6c 6f 61 64 5f  73 74 61 74 75 73 20 8b  | ..load_status .|
00002900  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 63 61  | .error(-1,"I ca|
00002910  6e 6e 6f 74 20 66 69 6e  64 20 6d 79 20 73 74 61  |nnot find my sta|
00002920  74 75 73 20 66 69 6c 65  20 21 20 48 61 76 65 20  |tus file ! Have |
00002930  79 6f 75 20 73 61 76 65  64 20 6f 6e 65 20 3f 22  |you saved one ?"|
00002940  29 0d 08 98 3c 20 20 20  20 20 c9 20 22 4b 69 6c  |)...<     . "Kil|
00002950  6c 22 20 3a 20 c8 99 20  22 4f 53 5f 46 69 6c 65  |l" : .. "OS_File|
00002960  22 2c 36 2c 22 3c 54 72  61 6e 73 6c 61 74 6f 72  |",6,"<Translator|
00002970  24 44 69 72 3e 2e 53 74  61 74 75 73 22 0d 08 a2  |$Dir>.Status"...|
00002980  09 20 20 20 20 cb 0d 08  ac 07 20 20 cb 0d 08 b6  |.    .....  ....|
00002990  05 cb 0d 08 c0 28 c8 99  20 57 47 65 74 50 49 25  |.....(.. WGetPI%|
000029a0  2c 2c 62 6c 6f 63 6b 3a  f4 20 47 65 74 20 70 6f  |,,block:. Get po|
000029b0  69 6e 74 65 72 20 69 6e  66 6f 0d 08 ca 35 e7 28  |inter info...5.(|
000029c0  28 62 6c 6f 63 6b 21 38  29 80 31 29 3e 30 20 8c  |(block!8).1)>0 .|
000029d0  20 f2 6d 61 69 6e 5f 6d  65 6e 75 3a f4 20 41 64  | .main_menu:. Ad|
000029e0  6a 75 73 74 20 2d 3e 20  72 65 2d 6f 70 65 6e 0d  |just -> re-open.|
000029f0  08 d4 05 e1 0d 08 de 04  0d 08 e8 0b dd f2 63 6c  |..............cl|
00002a00  6f 73 65 0d 08 f2 29 4b  69 6c 6c 3d a3 3a f4 20  |ose...)Kill=.:. |
00002a10  46 6c 61 67 20 72 65 74  75 72 6e 65 64 20 3a 20  |Flag returned : |
00002a20  69 6d 61 67 65 20 6b 69  6c 6c 65 64 0d 08 fc 1f  |image killed....|
00002a30  77 69 6e 25 3d 70 6f 6c  6c 21 30 3a f4 20 57 69  |win%=poll!0:. Wi|
00002a40  6e 64 6f 77 20 68 61 6e  64 6c 65 0d 09 06 26 f2  |ndow handle...&.|
00002a50  63 6c 6f 73 65 5f 77 69  6e 64 6f 77 28 77 69 6e  |close_window(win|
00002a60  25 29 3a f4 20 43 6c 6f  73 65 20 77 69 6e 64 6f  |%):. Close windo|
00002a70  77 0d 09 10 0d c8 8e 20  77 69 6e 25 20 ca 0d 09  |w...... win% ...|
00002a80  1a 33 20 c9 20 77 69 6e  5f 69 6d 67 25 20 3a 20  |.3 . win_img% : |
00002a90  f2 69 6e 76 61 6c 69 64  61 74 65 5f 69 6d 61 67  |.invalidate_imag|
00002aa0  65 3a f2 73 65 74 5f 70  61 6c 65 74 74 65 28 30  |e:.set_palette(0|
00002ab0  29 0d 09 24 1e 20 20 f2  63 6c 6f 73 65 5f 77 69  |)..$.  .close_wi|
00002ac0  6e 64 6f 77 28 77 69 6e  5f 66 69 6c 65 25 29 0d  |ndow(win_file%).|
00002ad0  09 2e 28 20 20 f2 63 6c  6f 73 65 5f 77 69 6e 64  |..(  .close_wind|
00002ae0  6f 77 28 77 69 6e 5f 7a  6f 6f 6d 25 29 3a 5a 6f  |ow(win_zoom%):Zo|
00002af0  6f 6d 57 69 6e 3d a3 0d  09 38 27 20 20 e7 56 69  |omWin=...8'  .Vi|
00002b00  65 77 4d 6f 64 65 20 8c  20 f2 6d 6f 64 65 5f 63  |ewMode . .mode_c|
00002b10  68 61 6e 67 65 28 50 72  65 4d 6f 64 65 29 0d 09  |hange(PreMode)..|
00002b20  42 0c 20 20 4b 69 6c 6c  3d b9 0d 09 4c 1c 20 c9  |B.  Kill=...L. .|
00002b30  20 77 69 6e 5f 7a 6f 6f  6d 25 20 3a 20 5a 6f 6f  | win_zoom% : Zoo|
00002b40  6d 57 69 6e 3d a3 0d 09  56 05 cb 0d 09 60 05 e1  |mWin=...V....`..|
00002b50  0d 09 6a 04 0d 09 74 0a  dd f2 6f 70 65 6e 0d 09  |..j...t...open..|
00002b60  7e 18 f2 6f 70 65 6e 5f  77 69 6e 64 6f 77 28 30  |~..open_window(0|
00002b70  2c 70 6f 6c 6c 29 0d 09  88 05 e1 0d 09 92 04 0d  |,poll)..........|
00002b80  09 9c 0c dd f2 72 65 64  72 61 77 0d 09 a6 1c f2  |.....redraw.....|
00002b90  72 65 64 72 61 77 5f 77  69 6e 64 6f 77 28 70 6f  |redraw_window(po|
00002ba0  6c 6c 21 30 2c a3 29 0d  09 b0 05 e1 0d 09 ba 04  |ll!0,.).........|
00002bb0  0d 09 c4 0a dd f2 6e 75  6c 6c 0d 09 ce 13 e7 44  |......null.....D|
00002bc0  61 74 61 4c 6f 61 64 52  65 66 25 20 8c 0d 09 d8  |ataLoadRef% ....|
00002bd0  44 20 44 61 74 61 4c 6f  61 64 52 65 66 25 3d a3  |D DataLoadRef%=.|
00002be0  3a c8 99 20 22 4f 53 5f  46 69 6c 65 22 2c 36 2c  |:.. "OS_File",6,|
00002bf0  53 61 76 65 24 3a f4 20  44 65 6c 65 74 65 20 66  |Save$:. Delete f|
00002c00  69 6c 65 20 73 61 76 65  64 2f 63 72 65 61 74 65  |ile saved/create|
00002c10  64 0d 09 e2 43 20 f2 65  72 72 6f 72 28 2d 31 2c  |d...C .error(-1,|
00002c20  22 42 61 64 20 64 61 74  61 20 74 72 61 6e 73 66  |"Bad data transf|
00002c30  65 72 2c 20 72 65 63 65  69 76 65 72 20 64 65 61  |er, receiver dea|
00002c40  64 22 29 3a f4 20 4e 6f  20 44 61 74 61 4c 6f 61  |d"):. No DataLoa|
00002c50  64 41 63 6b 0d 09 ec 05  cd 0d 09 f6 05 e1 0d 0a  |dAck............|
00002c60  00 04 0d 0a 0a 09 dd f2  6b 65 79 0d 0a 14 45 77  |........key...Ew|
00002c70  69 6e 25 3d 70 6f 6c 6c  21 30 3a 69 63 6f 25 3d  |in%=poll!0:ico%=|
00002c80  70 6f 6c 6c 21 34 3a 63  68 61 72 25 3d 70 6f 6c  |poll!4:char%=pol|
00002c90  6c 21 32 34 3a f4 20 57  69 6e 64 6f 77 2c 20 69  |l!24:. Window, i|
00002ca0  63 6f 6e 2c 20 6b 65 79  20 70 72 65 73 73 65 64  |con, key pressed|
00002cb0  0d 0a 1e 22 e7 28 77 69  6e 25 3d 77 69 6e 5f 66  |...".(win%=win_f|
00002cc0  69 6c 65 25 29 20 80 20  28 69 63 6f 25 3d 31 29  |ile%) . (ico%=1)|
00002cd0  20 8c 0d 0a 28 0f 20 c8  8e 20 63 68 61 72 25 20  | ...(. .. char% |
00002ce0  ca 0d 0a 32 1d 20 20 c9  20 31 33 20 3a 20 f4 20  |...2.  . 13 : . |
00002cf0  52 65 74 75 72 6e 20 70  72 65 73 73 65 64 0d 0a  |Return pressed..|
00002d00  3c 4a 20 20 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |<J   .error(-1,"|
00002d10  50 6c 65 61 73 65 20 64  72 61 67 20 74 68 65 20  |Please drag the |
00002d20  73 70 72 69 74 65 20 66  69 6c 65 20 69 63 6f 6e  |sprite file icon|
00002d30  20 74 6f 20 61 20 64 69  72 65 63 74 6f 72 79 20  | to a directory |
00002d40  76 69 65 77 65 72 22 29  0d 0a 46 1d 20 20 c9 20  |viewer")..F.  . |
00002d50  32 37 20 3a 20 f4 20 45  73 63 61 70 65 20 70 72  |27 : . Escape pr|
00002d60  65 73 73 65 64 0d 0a 50  1f 20 20 20 f2 63 6c 6f  |essed..P.   .clo|
00002d70  73 65 5f 77 69 6e 64 6f  77 28 77 69 6e 5f 66 69  |se_window(win_fi|
00002d80  6c 65 25 29 0d 0a 5a 06  20 cb 0d 0a 64 05 cd 0d  |le%)..Z. ...d...|
00002d90  0a 6e 05 e1 0d 0a 78 04  0d 0a 82 0d dd f2 6d 65  |.n....x.......me|
00002da0  73 73 61 67 65 0d 0a 8c  2d f4 20 49 67 6e 6f 72  |ssage...-. Ignor|
00002db0  65 20 6d 65 73 73 61 67  65 73 20 6f 72 69 67 69  |e messages origi|
00002dc0  6e 61 74 69 6e 67 20 66  72 6f 6d 20 6d 79 73 65  |nating from myse|
00002dd0  6c 66 0d 0a 96 36 e7 28  70 6f 6c 6c 21 34 29 3d  |lf...6.(poll!4)=|
00002de0  54 61 73 6b 48 61 6e 64  6c 65 25 20 8c 20 6d 73  |TaskHandle% . ms|
00002df0  67 6e 72 25 3d 2d 31 20  8b 20 6d 73 67 6e 72 25  |gnr%=-1 . msgnr%|
00002e00  3d 70 6f 6c 6c 21 31 36  0d 0a a0 0f c8 8e 20 6d  |=poll!16...... m|
00002e10  73 67 6e 72 25 20 ca 0d  0a aa 19 20 c9 20 2d 31  |sgnr% ..... . -1|
00002e20  20 3a 20 f4 20 44 6f 6e  27 74 20 72 65 61 63 74  | : . Don't react|
00002e30  0d 0a b4 2b 20 c9 20 30  20 3a 20 f2 64 69 65 3a  |...+ . 0 : .die:|
00002e40  f4 20 52 65 71 75 65 73  74 20 74 6f 20 74 65 72  |. Request to ter|
00002e50  6d 69 6e 61 74 65 20 74  61 73 6b 0d 0a be 2e 20  |minate task.... |
00002e60  c9 20 31 20 3a 20 f4 20  44 61 74 61 53 61 76 65  |. 1 : . DataSave|
00002e70  2c 20 74 72 61 6e 73 66  65 72 20 76 69 61 20 73  |, transfer via s|
00002e80  63 72 61 70 20 66 69 6c  65 0d 0a c8 37 20 20 73  |crap file...7  s|
00002e90  63 72 61 70 24 3d a4 4f  53 76 61 72 28 22 57 69  |crap$=.OSvar("Wi|
00002ea0  6d 70 24 53 63 72 61 70  22 29 3a f4 20 52 65 61  |mp$Scrap"):. Rea|
00002eb0  64 20 73 63 72 61 70 20  66 69 6c 65 6e 61 6d 65  |d scrap filename|
00002ec0  0d 0a d2 d2 20 20 e7 73  63 72 61 70 24 3c 3e 22  |....  .scrap$<>"|
00002ed0  22 20 8c 20 70 6f 6c 6c  21 31 32 3d 70 6f 6c 6c  |" . poll!12=poll|
00002ee0  21 38 3a 70 6f 6c 6c 21  31 36 3d 32 3a 70 6f 6c  |!8:poll!16=2:pol|
00002ef0  6c 21 33 36 3d 2d 31 3a  24 28 70 6f 6c 6c 2b 34  |l!36=-1:$(poll+4|
00002f00  34 29 3d 73 63 72 61 70  24 2b bd 30 3a 70 6f 6c  |4)=scrap$+.0:pol|
00002f10  6c 21 30 3d 34 34 2b 28  a9 73 63 72 61 70 24 2b  |l!0=44+(.scrap$+|
00002f20  31 2b 33 29 80 ac 33 3a  c8 99 20 57 53 65 6e 64  |1+3)..3:.. WSend|
00002f30  4d 73 67 25 2c 31 38 2c  70 6f 6c 6c 2c 70 6f 6c  |Msg%,18,poll,pol|
00002f40  6c 21 34 20 8b 20 f2 65  72 72 6f 72 28 2d 31 2c  |l!4 . .error(-1,|
00002f50  22 57 69 6d 70 24 53 63  72 61 70 20 6e 6f 74 20  |"Wimp$Scrap not |
00002f60  64 65 66 69 6e 65 64 22  29 3a f4 20 53 65 6e 64  |defined"):. Send|
00002f70  20 44 61 74 61 53 61 76  65 41 63 6b 20 69 66 20  | DataSaveAck if |
00002f80  73 63 72 61 70 20 66 69  6c 65 20 64 65 66 69 6e  |scrap file defin|
00002f90  65 64 0d 0a dc 23 20 c9  20 32 20 3a 20 f4 20 44  |ed...# . 2 : . D|
00002fa0  61 74 61 53 61 76 65 41  63 6b 2c 20 73 61 76 65  |ataSaveAck, save|
00002fb0  20 66 69 6c 65 0d 0a e6  1d 20 20 e7 70 6f 6c 6c  | file....  .poll|
00002fc0  21 31 32 3d 44 61 74 61  53 61 76 65 52 65 66 25  |!12=DataSaveRef%|
00002fd0  20 8c 0d 0a f0 49 20 20  20 53 61 76 65 24 3d a4  | ....I   Save$=.|
00002fe0  73 74 72 69 6e 67 28 70  6f 6c 6c 2b 34 34 29 3a  |string(poll+44):|
00002ff0  f4 20 46 75 6c 6c 20 70  61 74 68 6e 61 6d 65 20  |. Full pathname |
00003000  6f 66 20 66 69 6c 65 20  74 6f 20 62 65 20 73 61  |of file to be sa|
00003010  76 65 64 2f 63 72 65 61  74 65 64 0d 0a fa 2e 20  |ved/created.... |
00003020  20 20 f4 20 53 61 76 65  20 73 70 72 69 74 65 20  |  . Save sprite |
00003030  66 69 6c 65 20 6f 72 20  27 6f 70 65 6e 27 20 43  |file or 'open' C|
00003040  6c 65 61 72 20 66 69 6c  65 0d 0b 04 85 20 20 20  |lear file....   |
00003050  e7 24 53 41 56 73 6e 25  3d 22 66 69 6c 65 5f 66  |.$SAVsn%="file_f|
00003060  66 39 22 20 8c 20 53 70  72 53 61 76 65 24 3d 53  |f9" . SprSave$=S|
00003070  61 76 65 24 3a f2 73 61  76 65 5f 73 70 72 69 74  |ave$:.save_sprit|
00003080  65 28 53 70 72 53 61 76  65 24 29 20 8b 20 43 6c  |e(SprSave$) . Cl|
00003090  65 61 72 53 61 76 65 24  3d 53 61 76 65 24 3a c8  |earSave$=Save$:.|
000030a0  99 20 22 4f 53 5f 46 69  6c 65 22 2c 31 31 2c 43  |. "OS_File",11,C|
000030b0  6c 65 61 72 53 61 76 65  24 2c 26 36 39 30 2c 30  |learSave$,&690,0|
000030c0  2c 30 3a 43 6c 65 61 72  46 69 6c 65 3d b9 0d 0b  |,0:ClearFile=...|
000030d0  0e 3f 20 20 20 70 6f 6c  6c 21 31 32 3d 70 6f 6c  |.?   poll!12=pol|
000030e0  6c 21 38 3a 70 6f 6c 6c  21 31 36 3d 33 3a f4 20  |l!8:poll!16=3:. |
000030f0  41 6d 65 6e 64 20 64 61  74 61 20 62 6c 6f 63 6b  |Amend data block|
00003100  20 66 6f 72 20 44 61 74  61 4c 6f 61 64 0d 0b 18  | for DataLoad...|
00003110  32 20 20 20 c8 99 20 57  53 65 6e 64 4d 73 67 25  |2   .. WSendMsg%|
00003120  2c 31 38 2c 70 6f 6c 6c  2c 70 6f 6c 6c 21 34 3a  |,18,poll,poll!4:|
00003130  f4 20 53 65 6e 64 20 44  61 74 61 4c 6f 61 64 0d  |. Send DataLoad.|
00003140  0b 22 40 20 20 20 44 61  74 61 4c 6f 61 64 52 65  |."@   DataLoadRe|
00003150  66 25 3d 70 6f 6c 6c 21  38 3a f4 20 41 77 61 69  |f%=poll!8:. Awai|
00003160  74 20 61 20 44 61 74 61  4c 6f 61 64 41 63 6b 2c  |t a DataLoadAck,|
00003170  20 72 65 6d 65 6d 62 65  72 20 6d 79 72 65 66 0d  | remember myref.|
00003180  0b 2c 07 20 20 cd 0d 0b  36 2e 20 c9 20 33 2c 35  |.,.  ...6. . 3,5|
00003190  20 3a 20 f4 20 44 61 74  61 4c 6f 61 64 2f 4f 70  | : . DataLoad/Op|
000031a0  65 6e 20 3a 20 61 74 74  65 6d 70 74 20 74 6f 20  |en : attempt to |
000031b0  6c 6f 61 64 0d 0b 40 42  20 20 74 79 70 65 25 3d  |load..@B  type%=|
000031c0  70 6f 6c 6c 21 34 30 3a  6e 61 6d 65 24 3d a4 73  |poll!40:name$=.s|
000031d0  74 72 69 6e 67 28 70 6f  6c 6c 2b 34 34 29 3a f4  |tring(poll+44):.|
000031e0  20 46 69 6c 65 74 79 70  65 20 61 6e 64 20 66 69  | Filetype and fi|
000031f0  6c 65 6e 61 6d 65 0d 0b  4a 10 20 20 c8 8e 20 74  |lename..J.  .. t|
00003200  79 70 65 25 20 ca 0d 0b  54 54 20 20 20 c9 20 26  |ype% ...TT   . &|
00003210  46 46 39 2c 26 44 45 32  2c 26 44 46 41 2c 26 44  |FF9,&DE2,&DFA,&D|
00003220  35 38 2c 26 30 30 34 20  3a 20 e7 6d 73 67 6e 72  |58,&004 : .msgnr|
00003230  25 3d 33 20 8c 20 74 79  70 65 25 3d a4 69 6d 61  |%=3 . type%=.ima|
00003240  67 65 5f 74 79 70 65 28  6e 61 6d 65 24 2c b9 29  |ge_type(name$,.)|
00003250  20 8b 20 74 79 70 65 25  3d 30 0d 0b 5e 2c 20 20  | . type%=0..^,  |
00003260  20 7f 20 74 79 70 65 25  3d a4 69 6d 61 67 65 5f  | . type%=.image_|
00003270  74 79 70 65 28 6e 61 6d  65 24 2c 28 6d 73 67 6e  |type(name$,(msgn|
00003280  72 25 3d 33 29 29 0d 0b  68 07 20 20 cb 0d 0b 72  |r%=3))..h.  ...r|
00003290  10 20 20 e7 74 79 70 65  25 3e 30 20 8c 0d 0b 7c  |.  .type%>0 ...||
000032a0  49 20 20 20 70 6f 6c 6c  21 31 32 3d 70 6f 6c 6c  |I   poll!12=poll|
000032b0  21 38 3a 70 6f 6c 6c 21  31 36 3d 34 3a c8 99 20  |!8:poll!16=4:.. |
000032c0  57 53 65 6e 64 4d 73 67  25 2c 31 37 2c 70 6f 6c  |WSendMsg%,17,pol|
000032d0  6c 2c 70 6f 6c 6c 21 34  3a f4 20 44 61 74 61 4c  |l,poll!4:. DataL|
000032e0  6f 61 64 41 63 6b 0d 0b  86 39 20 20 20 4c 6e 61  |oadAck...9   Lna|
000032f0  6d 65 24 3d 6e 61 6d 65  24 3a 4c 74 79 70 65 25  |me$=name$:Ltype%|
00003300  3d 74 79 70 65 25 3a 41  63 74 4c 6f 61 64 3d b9  |=type%:ActLoad=.|
00003310  3a f4 20 50 65 6e 64 69  6e 67 20 6c 6f 61 64 0d  |:. Pending load.|
00003320  0b 90 72 20 20 cc 20 e7  6d 73 67 6e 72 25 3d 33  |..r  . .msgnr%=3|
00003330  20 8c 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
00003340  64 6f 6e 27 74 20 72 65  63 6f 67 6e 69 7a 65 20  |don't recognize |
00003350  74 68 69 73 20 66 69 6c  65 2e 20 50 6c 65 61 73  |this file. Pleas|
00003360  65 20 66 69 6c 65 74 79  70 65 20 69 74 20 61 70  |e filetype it ap|
00003370  70 72 6f 70 69 61 74 65  6c 79 2e 22 29 3a f4 20  |propiately."):. |
00003380  44 72 61 67 20 75 6e 72  65 63 6f 67 6e 69 7a 65  |Drag unrecognize|
00003390  64 0d 0b 9a 07 20 20 cd  0d 0b a4 29 20 c9 20 34  |d....  ....) . 4|
000033a0  20 3a 20 f4 20 44 61 74  61 4c 6f 61 64 41 63 6b  | : . DataLoadAck|
000033b0  2c 20 63 68 65 63 6b 20  6f 72 20 69 67 6e 6f 72  |, check or ignor|
000033c0  65 0d 0b ae 3c 20 20 e7  44 61 74 61 4c 6f 61 64  |e...<  .DataLoad|
000033d0  52 65 66 25 20 8c 20 e7  70 6f 6c 6c 21 31 32 3d  |Ref% . .poll!12=|
000033e0  44 61 74 61 4c 6f 61 64  52 65 66 25 20 8c 20 44  |DataLoadRef% . D|
000033f0  61 74 61 4c 6f 61 64 52  65 66 25 3d a3 0d 0b b8  |ataLoadRef%=....|
00003400  21 20 c9 20 26 34 30 30  43 30 20 3a 20 f4 20 53  |! . &400C0 : . S|
00003410  75 62 6d 65 6e 75 20 77  61 72 6e 69 6e 67 0d 0b  |ubmenu warning..|
00003420  c2 47 20 20 70 6f 69 6e  74 65 72 25 3d 70 6f 6c  |.G  pointer%=pol|
00003430  6c 21 32 30 3a 78 25 3d  70 6f 6c 6c 21 32 34 3a  |l!20:x%=poll!24:|
00003440  79 25 3d 70 6f 6c 6c 21  32 38 3a f4 20 47 65 74  |y%=poll!28:. Get|
00003450  20 70 6f 69 6e 74 65 72  2f 70 72 6f 70 6f 73 65  | pointer/propose|
00003460  64 20 78 2f 79 0d 0b cc  41 20 20 c8 99 20 57 44  |d x/y...A  .. WD|
00003470  65 63 6f 64 65 4d 25 2c  2c 6d 65 6e 75 31 2c 70  |ecodeM%,,menu1,p|
00003480  6f 6c 6c 2b 33 32 2c c4  31 30 30 2c 22 20 22 29  |oll+32,.100," ")|
00003490  20 b8 20 2c 2c 2c 70 61  74 68 24 3a f4 20 47 65  | . ,,,path$:. Ge|
000034a0  74 20 70 61 74 68 0d 0b  d6 10 20 20 c8 8e 20 70  |t path....  .. p|
000034b0  61 74 68 24 20 ca 0d 0b  e0 b1 20 20 20 c9 20 22  |ath$ .....   . "|
000034c0  50 72 6f 63 65 73 73 2e  43 6c 65 61 72 20 6f 75  |Process.Clear ou|
000034d0  74 70 75 74 22 20 3a 20  24 53 41 56 66 6e 25 3d  |tput" : $SAVfn%=|
000034e0  53 61 76 65 43 6c 65 61  72 24 3a 24 53 41 56 73  |SaveClear$:$SAVs|
000034f0  6e 25 3d 22 66 69 6c 65  5f 36 39 30 22 3a c8 99  |n%="file_690":..|
00003500  20 57 43 72 65 61 74 65  53 4d 25 2c 2c 70 6f 69  | WCreateSM%,,poi|
00003510  6e 74 65 72 25 2c 78 25  2c 79 25 3a c8 99 20 57  |nter%,x%,y%:.. W|
00003520  53 65 74 43 61 25 2c 77  69 6e 5f 66 69 6c 65 25  |SetCa%,win_file%|
00003530  2c 31 2c 2c 2c 2d 31 2c  a9 28 53 61 76 65 43 6c  |,1,,,-1,.(SaveCl|
00003540  65 61 72 24 29 3a f4 20  4f 70 65 6e 20 66 69 6c  |ear$):. Open fil|
00003550  65 20 77 69 6e 64 6f 77  20 66 6f 72 20 43 6c 65  |e window for Cle|
00003560  61 72 20 66 69 6c 65 0d  0b ea 07 20 20 cb 0d 0b  |ar file....  ...|
00003570  f4 40 20 c9 20 26 34 30  30 43 31 20 3a 20 f4 20  |.@ . &400C1 : . |
00003580  4d 6f 64 65 20 68 61 73  20 63 68 61 6e 67 65 64  |Mode has changed|
00003590  20 28 61 6e 64 20 69 74  20 6d 61 79 20 6e 6f 74  | (and it may not|
000035a0  20 68 61 76 65 20 62 65  65 6e 20 6d 65 29 0d 0b  | have been me)..|
000035b0  fe 20 20 20 f2 6d 6f 64  65 5f 63 68 61 6e 67 65  |.   .mode_change|
000035c0  28 2d 31 29 3a f4 20 54  69 64 79 20 75 70 0d 0c  |(-1):. Tidy up..|
000035d0  08 05 cb 0d 0c 12 05 e1  0d 0c 1c 05 20 0d 0c 26  |............ ..&|
000035e0  10 dd f2 6d 6f 75 73 65  63 6c 69 63 6b 0d 0c 30  |...mouseclick..0|
000035f0  3f 62 75 74 25 3d 70 6f  6c 6c 21 38 3a 77 69 6e  |?but%=poll!8:win|
00003600  25 3d 70 6f 6c 6c 21 31  32 3a 69 63 6f 25 3d 70  |%=poll!12:ico%=p|
00003610  6f 6c 6c 21 31 36 3a f4  20 42 75 74 74 6f 6e 73  |oll!16:. Buttons|
00003620  2f 77 69 6e 64 6f 77 2f  69 63 6f 6e 0d 0c 3a 0d  |/window/icon..:.|
00003630  c8 8e 20 77 69 6e 25 20  ca 0d 0c 44 1e 20 c9 20  |.. win% ...D. . |
00003640  2d 32 20 3a 20 f4 20 43  6c 69 63 6b 20 6f 6e 20  |-2 : . Click on |
00003650  69 63 6f 6e 62 61 72 0d  0c 4e 17 20 20 e7 69 63  |iconbar..N.  .ic|
00003660  6f 25 3d 49 69 63 6f 6e  62 61 72 25 20 8c 0d 0c  |o%=Iiconbar% ...|
00003670  58 1d 20 20 20 f4 20 49  63 6f 6e 62 61 72 20 69  |X.   . Iconbar i|
00003680  63 6f 6e 20 63 6c 69 63  6b 65 64 0d 0c 62 14 20  |con clicked..b. |
00003690  20 20 c8 8e 20 62 75 74  25 20 80 20 37 20 ca 0d  |  .. but% . 7 ..|
000036a0  0c 6c 2a 20 20 20 20 c9  20 32 20 3a 20 f2 6d 6f  |.l*    . 2 : .mo|
000036b0  75 73 65 28 78 25 2c 5f  25 2c 5f 25 29 3a 6d 25  |use(x%,_%,_%):m%|
000036c0  3d 6d 65 6e 75 69 63 6f  25 0d 0c 76 c7 20 20 20  |=menuico%..v.   |
000036d0  20 20 24 6d 25 3d 22 54  72 61 6e 73 6c 61 74 6f  |  $m%="Translato|
000036e0  72 22 3a 6d 25 3f 31 32  3d 74 66 25 3a 6d 25 3f  |r":m%?12=tf%:m%?|
000036f0  31 33 3d 74 62 25 3a 6d  25 3f 31 34 3d 77 66 25  |13=tb%:m%?14=wf%|
00003700  3a 6d 25 3f 31 35 3d 77  62 25 3a 6d 25 21 31 36  |:m%?15=wb%:m%!16|
00003710  3d 31 30 2a 31 36 3a 6d  25 21 32 30 3d 34 30 3a  |=10*16:m%!20=40:|
00003720  6d 25 21 32 34 3d 30 3a  6d 25 21 32 38 3d 30 3a  |m%!24=0:m%!28=0:|
00003730  6d 25 21 33 32 3d 77 69  6e 5f 69 6e 66 6f 25 3a  |m%!32=win_info%:|
00003740  6d 25 21 33 36 3d 28 77  62 25 3c 3c 32 38 29 2b  |m%!36=(wb%<<28)+|
00003750  28 77 66 25 3c 3c 32 34  29 2b 31 3a 24 28 6d 25  |(wf%<<24)+1:$(m%|
00003760  2b 34 30 29 3d 22 49 6e  66 6f 22 3a 6d 25 21 35  |+40)="Info":m%!5|
00003770  32 3d 30 3a 6d 25 21 35  36 3d 77 69 6e 5f 66 69  |2=0:m%!56=win_fi|
00003780  6c 65 74 25 3a 6d 25 21  36 30 3d 6d 25 21 33 36  |let%:m%!60=m%!36|
00003790  0d 0c 80 77 20 20 20 20  20 24 28 6d 25 2b 36 34  |...w     $(m%+64|
000037a0  29 3d 22 46 69 6c 65 74  79 70 65 73 22 3a 6d 25  |)="Filetypes":m%|
000037b0  21 37 36 3d 26 38 30 3a  6d 25 21 38 30 3d 2d 31  |!76=&80:m%!80=-1|
000037c0  3a 6d 25 21 38 34 3d 6d  25 21 33 36 3a 24 28 6d  |:m%!84=m%!36:$(m|
000037d0  25 2b 38 38 29 3d 22 51  75 69 74 22 3a 6d 65 6e  |%+88)="Quit":men|
000037e0  75 31 3d 6d 25 3a c8 99  20 57 43 72 65 61 74 65  |u1=m%:.. WCreate|
000037f0  4d 25 2c 2c 6d 65 6e 75  31 2c 78 25 2d 36 34 2c  |M%,,menu1,x%-64,|
00003800  39 36 2b 33 2a 34 30 0d  0c 8a 22 20 20 20 20 c9  |96+3*40..."    .|
00003810  20 31 2c 34 20 3a 20 46  72 6f 6d 25 3d 31 3a f2  | 1,4 : From%=1:.|
00003820  6d 61 69 6e 5f 6d 65 6e  75 0d 0c 94 08 20 20 20  |main_menu....   |
00003830  cb 0d 0c 9e 07 20 20 cd  0d 0c a8 29 20 c9 20 77  |.....  ....) . w|
00003840  69 6e 5f 69 6d 67 25 20  3a 20 f4 20 43 6c 69 63  |in_img% : . Clic|
00003850  6b 20 6f 6e 20 69 6d 61  67 65 20 77 69 6e 64 6f  |k on image windo|
00003860  77 0d 0c b2 13 20 20 c8  8e 20 62 75 74 25 20 80  |w....  .. but% .|
00003870  20 37 20 ca 0d 0c bc 1f  20 20 20 c9 20 32 20 3a  | 7 .....   . 2 :|
00003880  20 46 72 6f 6d 25 3d 32  3a f2 6d 61 69 6e 5f 6d  | From%=2:.main_m|
00003890  65 6e 75 0d 0c c6 42 20  20 20 7f 20 3a 20 f4 20  |enu...B   . : . |
000038a0  57 61 6e 64 65 72 69 6e  67 20 6f 76 65 72 20 69  |Wandering over i|
000038b0  6d 61 67 65 2c 20 72 65  63 61 6c 63 75 6c 61 74  |mage, recalculat|
000038c0  65 20 7a 6f 6f 6d 20 77  69 6e 64 6f 77 20 69 66  |e zoom window if|
000038d0  20 6f 70 65 6e 0d 0c d0  12 20 20 20 20 e7 5a 6f  | open....    .Zo|
000038e0  6f 6d 57 69 6e 20 8c 0d  0c da d6 20 20 20 20 20  |omWin .....     |
000038f0  78 73 25 3d 58 73 74 65  70 25 3a 79 73 25 3d 59  |xs%=Xstep%:ys%=Y|
00003900  73 74 65 70 25 3a 78 25  3d 70 6f 6c 6c 21 30 3a  |step%:x%=poll!0:|
00003910  79 25 3d 70 6f 6c 6c 21  34 3a 21 62 6c 6f 63 6b  |y%=poll!4:!block|
00003920  3d 77 69 6e 5f 69 6d 67  25 3a c8 99 20 57 47 65  |=win_img%:.. WGe|
00003930  74 57 53 25 2c 2c 62 6c  6f 63 6b 3a 6f 78 25 3d  |tWS%,,block:ox%=|
00003940  62 6c 6f 63 6b 21 34 2d  62 6c 6f 63 6b 21 32 30  |block!4-block!20|
00003950  3a 6f 79 25 3d 62 6c 6f  63 6b 21 31 36 2d 62 6c  |:oy%=block!16-bl|
00003960  6f 63 6b 21 32 34 3a 72  78 25 3d 78 25 2d 6f 78  |ock!24:rx%=x%-ox|
00003970  25 3a 72 79 25 3d 79 25  2d 6f 79 25 3a 65 78 25  |%:ry%=y%-oy%:ex%|
00003980  3d 72 78 25 2f 5a 6f 6f  6d 58 2f 78 73 25 3a 65  |=rx%/ZoomX/xs%:e|
00003990  79 25 3d 72 79 25 2f 5a  6f 6f 6d 59 2f 79 73 25  |y%=ry%/ZoomY/ys%|
000039a0  3a f4 20 50 69 78 65 6c  20 63 6f 6f 72 64 69 6e  |:. Pixel coordin|
000039b0  61 74 65 73 20 69 6e 20  69 6d 61 67 65 0d 0c e4  |ates in image...|
000039c0  3a 20 20 20 20 20 e7 5a  6f 6f 6d 58 3c 31 20 8c  |:     .ZoomX<1 .|
000039d0  20 65 78 25 3d 65 78 25  2b 31 2f 5a 6f 6f 6d 58  | ex%=ex%+1/ZoomX|
000039e0  2d 31 3a f4 20 44 69 73  70 6c 61 79 20 63 6f 72  |-1:. Display cor|
000039f0  72 65 63 74 69 6f 6e 0d  0c ee 3a 20 20 20 20 20  |rection...:     |
00003a00  e7 5a 6f 6f 6d 59 3c 31  20 8c 20 65 79 25 3d 65  |.ZoomY<1 . ey%=e|
00003a10  79 25 2b 31 2f 5a 6f 6f  6d 59 2d 31 3a f4 20 44  |y%+1/ZoomY-1:. D|
00003a20  69 73 70 6c 61 79 20 63  6f 72 72 65 63 74 69 6f  |isplay correctio|
00003a30  6e 0d 0c f8 7e 20 20 20  20 20 e7 28 5a 6f 6f 6d  |n...~     .(Zoom|
00003a40  57 58 25 3c 3e 65 78 25  29 84 28 5a 6f 6f 6d 57  |WX%<>ex%).(ZoomW|
00003a50  59 25 3c 3e 65 79 25 29  20 8c 20 5a 6f 6f 6d 57  |Y%<>ey%) . ZoomW|
00003a60  58 25 3d 65 78 25 3a 5a  6f 6f 6d 57 59 25 3d 65  |X%=ex%:ZoomWY%=e|
00003a70  79 25 3a f2 72 65 64 72  61 77 5f 77 69 6e 64 6f  |y%:.redraw_windo|
00003a80  77 28 77 69 6e 5f 7a 6f  6f 6d 25 2c b9 29 3a f4  |w(win_zoom%,.):.|
00003a90  20 49 66 20 63 68 61 6e  67 65 64 2c 20 72 65 64  | If changed, red|
00003aa0  72 61 77 20 7a 6f 6f 6d  20 77 69 6e 64 6f 77 0d  |raw zoom window.|
00003ab0  0d 02 09 20 20 20 20 cd  0d 0d 0c 07 20 20 cb 0d  |...    .....  ..|
00003ac0  0d 16 29 20 c9 20 77 69  6e 5f 7a 6f 6f 6d 25 20  |..) . win_zoom% |
00003ad0  3a 20 f4 20 43 6c 69 63  6b 20 6f 6e 20 7a 6f 6f  |: . Click on zoo|
00003ae0  6d 20 77 69 6e 64 6f 77  0d 0d 20 13 20 20 c8 8e  |m window.. .  ..|
00003af0  20 62 75 74 25 20 80 20  37 20 ca 0d 0d 2a 29 20  | but% . 7 ...*) |
00003b00  20 20 c9 20 31 20 3a 20  e7 5a 6f 6f 6d 57 3e 5a  |  . 1 : .ZoomW>Z|
00003b10  6f 6f 6d 44 20 8c 20 5a  6f 6f 6d 57 3d 5a 6f 6f  |oomD . ZoomW=Zoo|
00003b20  6d 57 2d 31 0d 0d 34 18  20 20 20 c9 20 32 20 3a  |mW-1..4.   . 2 :|
00003b30  20 5a 6f 6f 6d 57 3d 5a  6f 6f 6d 44 0d 0d 3e 2f  | ZoomW=ZoomD..>/|
00003b40  20 20 20 c9 20 34 20 3a  20 e7 28 5a 6f 6f 6d 57  |   . 4 : .(ZoomW|
00003b50  2f 5a 6f 6f 6d 44 29 3c  31 30 30 20 8c 20 5a 6f  |/ZoomD)<100 . Zo|
00003b60  6f 6d 57 3d 5a 6f 6f 6d  57 2b 31 0d 0d 48 07 20  |omW=ZoomW+1..H. |
00003b70  20 cb 0d 0d 52 36 20 20  f2 72 65 64 72 61 77 5f  | ...R6  .redraw_|
00003b80  77 69 6e 64 6f 77 28 77  69 6e 5f 7a 6f 6f 6d 25  |window(win_zoom%|
00003b90  2c b9 29 3a f4 20 52 65  64 72 61 77 20 7a 6f 6f  |,.):. Redraw zoo|
00003ba0  6d 20 77 69 6e 64 6f 77  0d 0d 5c 29 20 c9 20 77  |m window..\) . w|
00003bb0  69 6e 5f 66 69 6c 65 25  20 3a 20 f4 20 43 6c 69  |in_file% : . Cli|
00003bc0  63 6b 20 6f 6e 20 66 69  6c 65 20 77 69 6e 64 6f  |ck on file windo|
00003bd0  77 0d 0d 66 0f 20 20 e7  69 63 6f 25 3d 30 20 8c  |w..f.  .ico%=0 .|
00003be0  0d 0d 70 16 20 20 20 c8  8e 20 62 75 74 25 20 80  |..p.   .. but% .|
00003bf0  20 26 37 46 20 ca 0d 0d  7a 39 20 20 20 20 c9 20  | &7F ...z9    . |
00003c00  31 36 2c 36 34 20 3a 20  f4 20 44 72 61 67 2c 63  |16,64 : . Drag,c|
00003c10  61 6c 63 75 6c 61 74 65  20 64 72 61 67 20 62 6f  |alculate drag bo|
00003c20  78 20 61 6e 64 20 63 72  65 61 74 65 20 69 74 0d  |x and create it.|
00003c30  0d 84 e7 20 20 20 20 20  21 62 6c 6f 63 6b 3d 77  |...     !block=w|
00003c40  69 6e 25 3a c8 99 20 57  47 65 74 57 53 25 2c 2c  |in%:.. WGetWS%,,|
00003c50  62 6c 6f 63 6b 3a 78 25  3d 62 6c 6f 63 6b 21 34  |block:x%=block!4|
00003c60  3a 79 25 3d 62 6c 6f 63  6b 21 38 3a 62 6c 6f 63  |:y%=block!8:bloc|
00003c70  6b 21 34 3d 69 63 6f 25  3a c8 99 20 57 47 65 74  |k!4=ico%:.. WGet|
00003c80  49 53 25 2c 2c 62 6c 6f  63 6b 3a 21 62 6c 6f 63  |IS%,,block:!bloc|
00003c90  6b 3d 77 69 6e 25 3a 62  6c 6f 63 6b 21 34 3d 35  |k=win%:block!4=5|
00003ca0  3a 62 6c 6f 63 6b 21 38  2b 3d 78 25 3a 62 6c 6f  |:block!8+=x%:blo|
00003cb0  63 6b 21 31 32 2b 3d 79  25 3a 62 6c 6f 63 6b 21  |ck!12+=y%:block!|
00003cc0  31 36 3d 62 6c 6f 63 6b  21 38 2b 36 38 3a 62 6c  |16=block!8+68:bl|
00003cd0  6f 63 6b 21 32 30 3d 62  6c 6f 63 6b 21 31 32 2b  |ock!20=block!12+|
00003ce0  36 38 3a 62 6c 6f 63 6b  21 32 34 3d 30 3a 62 6c  |68:block!24=0:bl|
00003cf0  6f 63 6b 21 32 38 3d 30  3a 62 6c 6f 63 6b 21 33  |ock!28=0:block!3|
00003d00  32 3d 53 63 72 57 25 3a  62 6c 6f 63 6b 21 33 36  |2=ScrW%:block!36|
00003d10  3d 53 63 72 48 25 0d 0d  8e 2c 20 20 20 20 20 c8  |=ScrH%...,     .|
00003d20  99 20 57 44 72 61 67 42  25 2c 2c 62 6c 6f 63 6b  |. WDragB%,,block|
00003d30  3a f4 20 43 72 65 61 74  65 20 64 72 61 67 20 62  |:. Create drag b|
00003d40  6f 78 0d 0d 98 08 20 20  20 cb 0d 0d a2 07 20 20  |ox....   .....  |
00003d50  cd 0d 0d ac 2f 20 c9 20  77 69 6e 5f 72 67 62 62  |..../ . win_rgbb|
00003d60  69 74 73 25 20 3a 20 f4  20 52 47 42 20 73 6c 69  |its% : . RGB sli|
00003d70  64 65 72 20 6d 61 6e 69  70 75 6c 61 74 69 6f 6e  |der manipulation|
00003d80  0d 0d b6 8f 20 20 21 62  6c 6f 63 6b 3d 77 69 6e  |....  !block=win|
00003d90  25 3a c8 99 20 57 47 65  74 57 53 25 2c 2c 62 6c  |%:.. WGetWS%,,bl|
00003da0  6f 63 6b 3a 78 25 3d 62  6c 6f 63 6b 21 34 3a 79  |ock:x%=block!4:y|
00003db0  25 3d 62 6c 6f 63 6b 21  38 3a 62 6c 6f 63 6b 21  |%=block!8:block!|
00003dc0  34 3d 69 63 6f 25 3a c8  99 20 57 47 65 74 49 53  |4=ico%:.. WGetIS|
00003dd0  25 2c 2c 62 6c 6f 63 6b  3a 78 25 2b 3d 62 6c 6f  |%,,block:x%+=blo|
00003de0  63 6b 21 38 2b 32 3a 79  25 2b 3d 62 6c 6f 63 6b  |ck!8+2:y%+=block|
00003df0  21 31 32 2b 38 3a f4 20  50 6f 73 69 74 69 6f 6e  |!12+8:. Position|
00003e00  20 69 6e 20 73 6c 69 64  65 72 20 69 63 6f 6e 0d  | in slider icon.|
00003e10  0d c0 46 20 20 6d 78 25  3d 21 70 6f 6c 6c 3a 64  |..F  mx%=!poll:d|
00003e20  78 25 3d 6d 78 25 2d 78  25 2d 38 3a 76 61 6c 25  |x%=mx%-x%-8:val%|
00003e30  3d 64 78 25 20 81 20 31  36 3a e7 76 61 6c 25 3e  |=dx% . 16:.val%>|
00003e40  38 20 8c 20 76 61 6c 25  3d 38 3a f4 20 50 6f 73  |8 . val%=8:. Pos|
00003e50  69 74 69 6f 6e 0d 0d ca  86 20 20 e7 69 63 6f 25  |ition....  .ico%|
00003e60  3d 33 20 8c 20 63 6f 6c  25 3d 31 31 3a 73 6e 24  |=3 . col%=11:sn$|
00003e70  3d 22 52 22 3a 62 69 74  25 3d 31 36 20 8b 20 e7  |="R":bit%=16 . .|
00003e80  69 63 6f 25 3d 34 20 8c  20 63 6f 6c 25 3d 31 30  |ico%=4 . col%=10|
00003e90  3a 73 6e 24 3d 22 47 22  3a 62 69 74 25 3d 38 20  |:sn$="G":bit%=8 |
00003ea0  8b 20 63 6f 6c 25 3d 38  3a 73 6e 24 3d 22 42 22  |. col%=8:sn$="B"|
00003eb0  3a 62 69 74 25 3d 30 3a  f4 20 53 6c 69 64 65 72  |:bit%=0:. Slider|
00003ec0  20 63 6f 6c 6f 75 72 73  2c 20 6e 61 6d 65 73 2c  | colours, names,|
00003ed0  20 62 69 74 6f 66 66 73  65 74 73 0d 0d d4 24 20  | bitoffsets...$ |
00003ee0  20 f4 20 50 6c 6f 74 20  73 6c 69 64 65 72 20 69  | . Plot slider i|
00003ef0  6e 20 73 6c 69 64 65 72  20 73 70 72 69 74 65 0d  |n slider sprite.|
00003f00  0d de 7e 20 20 c8 99 20  4f 53 53 70 6f 70 25 2c  |..~  .. OSSpop%,|
00003f10  36 30 2b 32 35 36 2c 69  63 6f 6e 73 70 72 69 74  |60+256,iconsprit|
00003f20  65 73 2c 22 73 6c 69 64  65 72 22 2b 73 6e 24 2c  |es,"slider"+sn$,|
00003f30  30 20 b8 20 72 30 2c 72  31 2c 72 32 2c 72 33 3a  |0 . r0,r1,r2,r3:|
00003f40  e6 30 2c 30 3a c8 93 20  c8 90 20 32 2c 38 2c 38  |.0,0:.. .. 2,8,8|
00003f50  2a 31 36 2c 31 36 3a e6  30 2c 63 6f 6c 25 3a e7  |*16,16:.0,col%:.|
00003f60  76 61 6c 25 3e 30 20 8c  20 c8 93 20 c8 90 20 32  |val%>0 . .. .. 2|
00003f70  2c 38 2c 76 61 6c 25 2a  31 36 2c 31 36 0d 0d e8  |,8,val%*16,16...|
00003f80  32 20 20 c8 99 20 4f 53  53 70 6f 70 25 2c 72 30  |2  .. OSSpop%,r0|
00003f90  2c 72 31 2c 72 32 2c 72  33 3a f4 20 52 65 73 74  |,r1,r2,r3:. Rest|
00003fa0  6f 72 65 20 56 44 55 20  63 6f 6e 74 65 78 74 0d  |ore VDU context.|
00003fb0  0d f2 8f 20 20 52 47 42  62 69 74 73 25 3d 28 52  |...  RGBbits%=(R|
00003fc0  47 42 62 69 74 73 25 20  80 20 ac 20 28 32 35 35  |GBbits% . . (255|
00003fd0  3c 3c 62 69 74 25 29 29  20 84 20 28 76 61 6c 25  |<<bit%)) . (val%|
00003fe0  3c 3c 62 69 74 25 29 3a  21 62 6c 6f 63 6b 3d 77  |<<bit%):!block=w|
00003ff0  69 6e 25 3a 62 6c 6f 63  6b 21 34 3d 69 63 6f 25  |in%:block!4=ico%|
00004000  3a 62 6c 6f 63 6b 21 38  3d 30 3a 62 6c 6f 63 6b  |:block!8=0:block|
00004010  21 31 32 3d 30 3a c8 99  20 57 53 65 74 49 53 25  |!12=0:.. WSetIS%|
00004020  2c 2c 62 6c 6f 63 6b 3a  f4 20 55 70 64 61 74 65  |,,block:. Update|
00004030  20 63 6f 64 65 20 61 6e  64 20 69 63 6f 6e 0d 0d  | code and icon..|
00004040  fc 05 cb 0d 0e 06 05 e1  0d 0e 10 05 20 0d 0e 1a  |............ ...|
00004050  0e dd f2 64 72 61 67 64  72 6f 70 0d 0e 24 21 c8  |...dragdrop..$!.|
00004060  99 20 57 43 72 65 61 74  65 4d 25 2c 2c 2d 31 3a  |. WCreateM%,,-1:|
00004070  f4 20 43 6c 6f 73 65 20  6d 65 6e 75 0d 0e 2e 2c  |. Close menu...,|
00004080  c8 99 20 57 47 65 74 50  49 25 2c 2c 62 6c 6f 63  |.. WGetPI%,,bloc|
00004090  6b 3a f4 20 47 65 74 20  70 6f 69 6e 74 65 72 20  |k:. Get pointer |
000040a0  70 6f 73 69 74 69 6f 6e  0d 0e 38 47 64 72 6f 70  |position..8Gdrop|
000040b0  77 69 6e 25 3d 62 6c 6f  63 6b 21 31 32 3a 64 72  |win%=block!12:dr|
000040c0  6f 70 69 63 6f 25 3d 62  6c 6f 63 6b 21 31 36 3a  |opico%=block!16:|
000040d0  f4 20 57 69 6e 64 6f 77  2f 69 63 6f 6e 20 77 68  |. Window/icon wh|
000040e0  65 72 65 20 62 6f 78 20  64 72 6f 70 70 65 64 0d  |ere box dropped.|
000040f0  0e 42 28 73 61 76 65 24  3d a4 73 74 72 69 6e 67  |.B(save$=.string|
00004100  28 53 41 56 66 6e 25 29  3a f4 20 47 65 74 20 6c  |(SAVfn%):. Get l|
00004110  65 61 66 6e 61 6d 65 0d  0e 4c 6f e7 24 53 41 56  |eafname..Lo.$SAV|
00004120  73 6e 25 3d 22 66 69 6c  65 5f 66 66 39 22 20 8c  |sn%="file_ff9" .|
00004130  20 53 61 76 65 53 70 72  24 3d 73 61 76 65 24 3a  | SaveSpr$=save$:|
00004140  66 74 25 3d 26 46 46 39  20 8b 20 53 61 76 65 43  |ft%=&FF9 . SaveC|
00004150  6c 65 61 72 24 3d 73 61  76 65 24 3a 66 74 25 3d  |lear$=save$:ft%=|
00004160  26 36 39 30 3a f4 20 52  65 6d 65 6d 62 65 72 20  |&690:. Remember |
00004170  6c 65 61 66 6e 61 6d 65  2c 20 73 65 74 20 66 69  |leafname, set fi|
00004180  6c 65 74 79 70 65 0d 0e  56 a4 62 6c 6f 63 6b 21  |letype..V.block!|
00004190  32 30 3d 62 6c 6f 63 6b  21 31 32 3a 62 6c 6f 63  |20=block!12:bloc|
000041a0  6b 21 32 34 3d 62 6c 6f  63 6b 21 31 36 3a 62 6c  |k!24=block!16:bl|
000041b0  6f 63 6b 21 32 38 3d 62  6c 6f 63 6b 21 30 3a 62  |ock!28=block!0:b|
000041c0  6c 6f 63 6b 21 33 32 3d  62 6c 6f 63 6b 21 34 3a  |lock!32=block!4:|
000041d0  62 6c 6f 63 6b 21 31 32  3d 30 3a 62 6c 6f 63 6b  |block!12=0:block|
000041e0  21 31 36 3d 31 3a 62 6c  6f 63 6b 21 33 36 3d 30  |!16=1:block!36=0|
000041f0  3a 62 6c 6f 63 6b 21 34  30 3d 66 74 25 3a 24 28  |:block!40=ft%:$(|
00004200  62 6c 6f 63 6b 2b 34 34  29 3d 73 61 76 65 24 2b  |block+44)=save$+|
00004210  bd 30 3a 21 62 6c 6f 63  6b 3d 28 34 34 2b a9 73  |.0:!block=(44+.s|
00004220  61 76 65 24 2b 34 29 80  ac 33 0d 0e 60 3b c8 99  |ave$+4)..3..`;..|
00004230  20 57 53 65 6e 64 4d 73  67 25 2c 31 37 2c 62 6c  | WSendMsg%,17,bl|
00004240  6f 63 6b 2c 64 72 6f 70  77 69 6e 25 2c 64 72 6f  |ock,dropwin%,dro|
00004250  70 69 63 6f 25 3a f4 20  53 65 6e 64 20 44 61 74  |pico%:. Send Dat|
00004260  61 53 61 76 65 0d 0e 6a  36 44 61 74 61 53 61 76  |aSave..j6DataSav|
00004270  65 52 65 66 25 3d 62 6c  6f 63 6b 21 38 3a f4 20  |eRef%=block!8:. |
00004280  52 65 6d 65 6d 62 65 72  20 6d 79 72 65 66 20 66  |Remember myref f|
00004290  6f 72 20 44 61 74 61 53  61 76 65 0d 0e 74 30 f2  |or DataSave..t0.|
000042a0  63 6c 6f 73 65 5f 77 69  6e 64 6f 77 28 77 69 6e  |close_window(win|
000042b0  5f 66 69 6c 65 25 29 3a  f4 20 43 6c 6f 73 65 20  |_file%):. Close |
000042c0  66 69 6c 65 20 77 69 6e  64 6f 77 0d 0e 7e 05 e1  |file window..~..|
000042d0  0d 0e 88 04 0d 0e 92 1d  dd a4 69 6d 61 67 65 5f  |..........image_|
000042e0  74 79 70 65 28 6e 61 6d  65 24 2c 63 68 65 63 6b  |type(name$,check|
000042f0  29 0d 0e 9c 3a f4 20 45  78 61 6d 69 6e 65 73 20  |)...:. Examines |
00004300  66 69 6c 65 20 61 6e 64  20 72 65 74 75 72 6e 73  |file and returns|
00004310  20 66 69 6c 65 74 79 70  65 20 3c 3e 30 20 69 66  | filetype <>0 if|
00004320  20 69 6d 61 67 65 20 66  69 6c 65 0d 0e a6 3d f4  | image file...=.|
00004330  20 49 66 20 63 68 65 63  6b 3d 54 52 55 45 2c 20  | If check=TRUE, |
00004340  63 6f 6e 74 65 6e 74 73  20 61 72 65 20 63 68 65  |contents are che|
00004350  63 6b 65 64 20 61 73 20  77 65 6c 6c 20 61 73 20  |cked as well as |
00004360  66 69 6c 65 74 79 70 65  0d 0e b0 22 ea 20 6f 62  |filetype...". ob|
00004370  6a 25 2c 6c 6f 61 64 25  2c 74 79 70 65 25 2c 48  |j%,load%,type%,H|
00004380  65 61 64 2c 69 64 24 2c  69 25 0d 0e ba 37 c8 99  |ead,id$,i%...7..|
00004390  20 22 4f 53 5f 46 69 6c  65 22 2c 35 2c 6e 61 6d  | "OS_File",5,nam|
000043a0  65 24 20 b8 20 6f 62 6a  25 2c 2c 6c 6f 61 64 25  |e$ . obj%,,load%|
000043b0  3a f4 20 52 65 61 64 20  66 69 6c 65 20 69 6e 66  |:. Read file inf|
000043c0  6f 0d 0e c4 1e e7 6f 62  6a 25 3c 3e 31 20 8c 20  |o.....obj%<>1 . |
000043d0  3d 30 3a f4 20 4e 6f 74  20 61 20 66 69 6c 65 0d  |=0:. Not a file.|
000043e0  0e ce 39 e7 28 6c 6f 61  64 25 3e 3e 3e 32 30 29  |..9.(load%>>>20)|
000043f0  3d 26 46 46 46 20 8c 20  74 79 70 65 25 3d 28 6c  |=&FFF . type%=(l|
00004400  6f 61 64 25 3e 3e 3e 38  29 80 26 46 46 46 20 8b  |oad%>>>8).&FFF .|
00004410  20 74 79 70 65 25 3d 30  0d 0e d8 0e c8 8e 20 74  | type%=0...... t|
00004420  79 70 65 25 20 ca 0d 0e  e2 8f 20 c9 20 26 36 39  |ype% ..... . &69|
00004430  30 2c 26 36 39 31 2c 26  36 39 32 2c 26 36 39 33  |0,&691,&692,&693|
00004440  2c 26 36 39 34 2c 26 36  39 35 2c 26 36 39 36 2c  |,&694,&695,&696,|
00004450  26 36 39 37 2c 26 36 39  38 2c 26 36 39 39 2c 26  |&697,&698,&699,&|
00004460  36 39 41 2c 26 36 39 42  2c 26 36 39 43 2c 26 36  |69A,&69B,&69C,&6|
00004470  39 44 2c 26 36 39 45 2c  26 36 39 46 2c 26 46 46  |9D,&69E,&69F,&FF|
00004480  30 2c 26 46 46 39 2c 26  44 45 32 2c 26 44 46 41  |0,&FF9,&DE2,&DFA|
00004490  2c 26 44 35 38 2c 26 30  30 34 20 3a 20 f4 20 52  |,&D58,&004 : . R|
000044a0  65 63 6f 67 6e 69 7a 65  64 20 62 79 20 66 69 6c  |ecognized by fil|
000044b0  65 74 79 70 65 0d 0e ec  12 20 7f 20 e7 63 68 65  |etype.... . .che|
000044c0  63 6b 20 8b 20 3d 30 0d  0e f6 33 20 20 48 65 61  |ck . =0...3  Hea|
000044d0  64 3d 8e 28 6e 61 6d 65  24 29 3a f4 20 4f 70 65  |d=.(name$):. Ope|
000044e0  6e 20 66 69 6c 65 20 74  6f 20 65 78 61 6d 69 6e  |n file to examin|
000044f0  65 20 63 6f 6e 74 65 6e  74 73 0d 0f 00 2d 20 20  |e contents...-  |
00004500  74 79 70 65 25 3d 30 3a  f4 20 4e 6f 74 20 72 65  |type%=0:. Not re|
00004510  63 6f 67 6e 69 7a 65 64  20 61 6e 79 74 68 69 6e  |cognized anythin|
00004520  67 20 28 79 65 74 29 0d  0f 0a 28 20 20 69 64 24  |g (yet)...(  id$|
00004530  3d 22 22 3a e3 20 69 25  3d 31 20 b8 20 38 3a 69  |="":. i%=1 . 8:i|
00004540  64 24 2b 3d bd 28 9a 23  48 65 61 64 29 3a ed 0d  |d$+=.(.#Head):..|
00004550  0f 14 84 20 20 e7 c0 69  64 24 2c 36 29 3d 22 47  |...  ..id$,6)="G|
00004560  49 46 38 37 61 22 20 8c  20 74 79 70 65 25 3d 26  |IF87a" . type%=&|
00004570  36 39 35 20 8b 20 e7 28  c0 69 64 24 2c 34 29 3d  |695 . .(.id$,4)=|
00004580  22 46 4f 52 4d 22 29 20  80 20 28 c2 69 64 24 2c  |"FORM") . (.id$,|
00004590  34 29 3d 22 49 4c 42 4d  22 29 20 8c 20 74 79 70  |4)="ILBM") . typ|
000045a0  65 25 3d 26 36 39 33 20  8b 20 e7 c0 69 64 24 2c  |e%=&693 . ..id$,|
000045b0  34 29 3d bd 26 35 39 2b  bd 26 41 36 2b bd 26 36  |4)=.&59+.&A6+.&6|
000045c0  41 2b bd 26 39 35 20 8c  20 74 79 70 65 25 3d 26  |A+.&95 . type%=&|
000045d0  36 39 36 0d 0f 1e ab 20  20 e7 74 79 70 65 25 3c  |696....  .type%<|
000045e0  3e 30 20 8b 20 e7 28 c0  69 64 24 2c 32 29 3d 22  |>0 . .(.id$,2)="|
000045f0  49 49 22 29 20 84 20 28  c0 69 64 24 2c 32 29 3d  |II") . (.id$,2)=|
00004600  22 4d 4d 22 29 20 8c 20  74 79 70 65 25 3d 26 46  |"MM") . type%=&F|
00004610  46 30 20 8b 20 e7 c0 69  64 24 2c 35 29 3d 22 49  |F0 . ..id$,5)="I|
00004620  72 6c 61 6d 22 20 8c 20  74 79 70 65 25 3d 26 36  |rlam" . type%=&6|
00004630  39 42 20 8b 20 e7 c0 69  64 24 2c 32 29 3d 22 42  |9B . ..id$,2)="B|
00004640  4d 22 20 8c 20 74 79 70  65 25 3d 26 36 39 43 20  |M" . type%=&69C |
00004650  8b 20 e7 28 a7 22 50 31  50 32 50 33 50 34 50 35  |. .(."P1P2P3P4P5|
00004660  50 36 22 2c c0 69 64 24  2c 32 29 29 83 32 29 3e  |P6",.id$,2)).2)>|
00004670  30 20 8c 20 74 79 70 65  25 3d 26 36 39 45 0d 0f  |0 . type%=&69E..|
00004680  28 2e 20 20 e7 74 79 70  65 25 3c 3e 30 20 8b 20  |(.  .type%<>0 . |
00004690  e7 c0 69 64 24 2c 34 29  3d 22 5a 56 44 41 22 20  |..id$,4)="ZVDA" |
000046a0  8c 20 74 79 70 65 25 3d  26 36 39 46 0d 0f 32 58  |. type%=&69F..2X|
000046b0  20 20 e7 74 79 70 65 25  3c 3e 30 20 8b 20 cf 23  |  .type%<>0 . .#|
000046c0  48 65 61 64 3d 26 34 31  3a 69 64 24 3d 22 22 3a  |Head=&41:id$="":|
000046d0  e3 20 69 25 3d 31 20 b8  20 34 3a 69 64 24 2b 3d  |. i%=1 . 4:id$+=|
000046e0  bd 28 9a 23 48 65 61 64  29 3a ed 3a e7 69 64 24  |.(.#Head):.:.id$|
000046f0  3d 22 50 4e 54 47 22 20  8c 20 74 79 70 65 25 3d  |="PNTG" . type%=|
00004700  26 36 39 34 0d 0f 3c 5d  20 20 e7 74 79 70 65 25  |&694..<]  .type%|
00004710  3c 3e 30 20 8b 20 cf 23  48 65 61 64 3d 26 31 30  |<>0 . .#Head=&10|
00004720  3a 69 64 24 3d 22 22 3a  e3 20 69 25 3d 31 20 b8  |:id$="":. i%=1 .|
00004730  20 39 3a 69 64 24 2b 3d  bd 28 9a 23 48 65 61 64  | 9:id$+=.(.#Head|
00004740  29 3a ed 3a e7 69 64 24  3d 22 4d 49 4c 4c 49 50  |):.:.id$="MILLIP|
00004750  45 44 45 22 20 8c 20 74  79 70 65 25 3d 26 36 39  |EDE" . type%=&69|
00004760  41 0d 0f 46 1f 20 20 d9  23 48 65 61 64 3a f4 20  |A..F.  .#Head:. |
00004770  43 6c 6f 73 65 20 69 6d  61 67 65 20 66 69 6c 65  |Close image file|
00004780  0d 0f 50 05 cb 0d 0f 5a  0a 3d 74 79 70 65 25 0d  |..P....Z.=type%.|
00004790  0f 64 05 20 0d 0f 6e 17  dd a4 6c 6f 61 64 28 74  |.d. ..n...load(t|
000047a0  79 70 65 25 2c 6e 61 6d  65 24 29 0d 0f 78 16 f4  |ype%,name$)..x..|
000047b0  20 4c 6f 61 64 73 20 69  6d 61 67 65 20 66 69 6c  | Loads image fil|
000047c0  65 0d 0f 82 30 f4 20 52  65 74 75 72 6e 73 20 54  |e...0. Returns T|
000047d0  52 55 45 20 69 66 20 73  75 63 63 65 73 66 75 6c  |RUE if succesful|
000047e0  20 6c 6f 61 64 2c 20 65  6c 73 65 20 46 41 4c 53  | load, else FALS|
000047f0  45 0d 0f 8c 2f 49 6e 46  69 6c 65 24 3d 6e 61 6d  |E.../InFile$=nam|
00004800  65 24 3a 49 6e 54 79 70  65 25 3d 74 79 70 65 25  |e$:InType%=type%|
00004810  3a f4 20 53 65 74 20 66  69 6c 65 20 69 6e 66 6f  |:. Set file info|
00004820  0d 0f 96 7b 70 6f 73 25  3d a9 6e 61 6d 65 24 3a  |...{pos%=.name$:|
00004830  f5 20 70 6f 73 25 2d 3d  31 3a 70 65 72 69 6f 64  |. pos%-=1:period|
00004840  3d 28 c1 6e 61 6d 65 24  2c 70 6f 73 25 2c 31 29  |=(.name$,pos%,1)|
00004850  3d 22 2e 22 29 3a fd 20  28 70 6f 73 25 3d 31 29  |="."):. (pos%=1)|
00004860  20 84 20 70 65 72 69 6f  64 3a e7 70 65 72 69 6f  | . period:.perio|
00004870  64 20 8c 20 4c 65 61 66  24 3d c2 6e 61 6d 65 24  |d . Leaf$=.name$|
00004880  2c a9 6e 61 6d 65 24 2d  70 6f 73 25 29 20 8b 20  |,.name$-pos%) . |
00004890  4c 65 61 66 24 3d 6e 61  6d 65 24 0d 0f a0 34 c8  |Leaf$=name$...4.|
000048a0  99 20 22 4f 53 5f 46 69  6c 65 22 2c 35 2c 6e 61  |. "OS_File",5,na|
000048b0  6d 65 24 20 b8 20 2c 2c  2c 2c 46 6c 65 6e 25 3a  |me$ . ,,,,Flen%:|
000048c0  f4 20 46 69 6c 65 27 73  20 6c 65 6e 67 74 68 0d  |. File's length.|
000048d0  0f aa 3d 46 31 25 3d 8e  28 6e 61 6d 65 24 29 3a  |..=F1%=.(name$):|
000048e0  64 25 3d a4 69 62 3a f2  69 70 74 72 28 46 31 25  |d%=.ib:.iptr(F1%|
000048f0  2c 30 29 3a f4 20 4f 70  65 6e 20 66 69 6c 65 2c  |,0):. Open file,|
00004900  20 65 6e 73 75 72 65 20  64 69 73 63 0d 0f b4 35  | ensure disc...5|
00004910  f2 76 61 72 28 22 66 68  61 31 22 2c 46 31 25 29  |.var("fha1",F1%)|
00004920  3a f2 76 61 72 28 22 69  66 70 31 22 2c 30 29 3a  |:.var("ifp1",0):|
00004930  f4 20 52 45 4d 20 4d 6f  64 75 6c 65 20 69 6e 66  |. REM Module inf|
00004940  6f 0d 0f be 1b f2 68 6f  75 72 5f 6f 6e 3a f4 20  |o.....hour_on:. |
00004950  48 6f 75 72 67 6c 61 73  73 20 6f 6e 0d 0f c8 42  |Hourglass on...B|
00004960  e7 50 65 72 63 65 6e 74  20 8c 20 c8 99 20 22 48  |.Percent . .. "H|
00004970  6f 75 72 67 6c 61 73 73  5f 50 65 72 63 65 6e 74  |ourglass_Percent|
00004980  61 67 65 22 2c 30 3a f4  20 49 6e 69 74 20 70 65  |age",0:. Init pe|
00004990  72 63 65 6e 74 61 67 65  20 69 66 20 6f 6e 0d 0f  |rcentage if on..|
000049a0  d2 3f e7 77 69 6e 5f 69  6d 67 25 3e 30 20 8c 20  |.?.win_img%>0 . |
000049b0  f2 63 6c 6f 73 65 5f 77  69 6e 64 6f 77 28 77 69  |.close_window(wi|
000049c0  6e 5f 69 6d 67 25 29 3a  f4 20 4f 6c 64 20 69 6d  |n_img%):. Old im|
000049d0  61 67 65 20 64 69 73 63  61 72 64 65 64 0d 0f dc  |age discarded...|
000049e0  3f f2 69 6e 76 61 6c 69  64 61 74 65 5f 69 6d 61  |?.invalidate_ima|
000049f0  67 65 3a f4 20 4e 65 77  20 69 6d 61 67 65 20 74  |ge:. New image t|
00004a00  6f 20 63 6f 6d 65 2c 20  69 6e 76 61 6c 69 64 61  |o come, invalida|
00004a10  74 65 20 6f 6c 64 20 69  6d 61 67 65 0d 0f e6 25  |te old image...%|
00004a20  50 72 65 4d 6f 64 65 3d  eb 3a f4 20 52 65 6d 65  |PreMode=.:. Reme|
00004a30  6d 62 65 72 20 63 75 72  72 65 6e 74 20 6d 6f 64  |mber current mod|
00004a40  65 0d 0f f0 21 f2 64 65  61 6c 6c 6f 63 61 74 65  |e...!.deallocate|
00004a50  3a f4 20 46 72 65 65 20  61 6c 6c 20 6d 65 6d 6f  |:. Free all memo|
00004a60  72 79 0d 0f fa 0e c8 8e  20 74 79 70 65 25 20 ca  |ry...... type% .|
00004a70  0d 10 04 a7 20 c9 20 26  46 46 39 20 3a 20 70 25  |.... . &FF9 : p%|
00004a80  3d a7 22 2e 22 2b a4 75  70 73 74 72 69 6e 67 28  |=."."+.upstring(|
00004a90  6e 61 6d 65 24 29 2c 22  2e 48 49 50 2e 22 29 3a  |name$),".HIP."):|
00004aa0  e7 70 25 3e 30 20 8c 20  6c 6f 70 70 61 74 68 24  |.p%>0 . loppath$|
00004ab0  3d 6e 61 6d 65 24 3a c1  6c 6f 70 70 61 74 68 24  |=name$:.loppath$|
00004ac0  2c 70 25 2c 33 29 3d 22  4c 4f 50 22 3a 46 32 25  |,p%,3)="LOP":F2%|
00004ad0  3d 8e 28 6c 6f 70 70 61  74 68 24 29 3a e7 46 32  |=.(loppath$):.F2|
00004ae0  25 3d 30 20 8c 20 f2 65  72 72 6f 72 28 2d 31 2c  |%=0 . .error(-1,|
00004af0  22 49 20 63 61 6e 6e 6f  74 20 66 69 6e 64 20 74  |"I cannot find t|
00004b00  68 65 20 41 72 56 69 73  20 4c 4f 50 20 66 69 6c  |he ArVis LOP fil|
00004b10  65 20 21 22 29 3a e1 0d  10 0e 5e 20 20 e7 70 25  |e !"):....^  .p%|
00004b20  3d 30 20 8c 20 4f 6b 3d  a4 70 69 63 5f 41 52 43  |=0 . Ok=.pic_ARC|
00004b30  20 8b 20 f2 76 61 72 28  22 66 68 61 32 22 2c 46  | . .var("fha2",F|
00004b40  32 25 29 3a f2 76 61 72  28 22 69 66 70 32 22 2c  |2%):.var("ifp2",|
00004b50  30 29 3a 4f 6b 3d a4 70  69 63 5f 41 52 56 49 53  |0):Ok=.pic_ARVIS|
00004b60  3a f4 20 57 68 61 74 27  73 20 74 68 69 73 20 74  |:. What's this t|
00004b70  68 65 6e 20 3f 0d 10 18  1c 20 c9 20 26 44 45 32  |hen ?.... . &DE2|
00004b80  20 3a 20 4f 6b 3d a4 70  69 63 5f 50 52 4f 41 52  | : Ok=.pic_PROAR|
00004b90  54 0d 10 22 1d 20 c9 20  26 44 46 41 20 3a 20 4f  |T..". . &DFA : O|
00004ba0  6b 3d a4 70 69 63 5f 57  41 54 46 4f 52 44 0d 10  |k=.pic_WATFORD..|
00004bb0  2c 1c 20 c9 20 26 44 35  38 20 3a 20 4f 6b 3d a4  |,. . &D58 : Ok=.|
00004bc0  70 69 63 5f 52 45 4e 44  45 52 0d 10 36 19 20 c9  |pic_RENDER..6. .|
00004bd0  20 26 30 30 34 20 3a 20  4f 6b 3d a4 70 69 63 5f  | &004 : Ok=.pic_|
00004be0  41 49 4d 0d 10 40 1b 20  c9 20 26 36 39 30 20 3a  |AIM..@. . &690 :|
00004bf0  20 4f 6b 3d a4 70 69 63  5f 43 4c 45 41 52 0d 10  | Ok=.pic_CLEAR..|
00004c00  4a 1b 20 c9 20 26 36 39  31 20 3a 20 4f 6b 3d a4  |J. . &691 : Ok=.|
00004c10  70 69 63 5f 44 45 47 41  53 0d 10 54 19 20 c9 20  |pic_DEGAS..T. . |
00004c20  26 36 39 32 20 3a 20 4f  6b 3d a4 70 69 63 5f 49  |&692 : Ok=.pic_I|
00004c30  4d 47 0d 10 5e 19 20 c9  20 26 36 39 33 20 3a 20  |MG..^. . &693 : |
00004c40  4f 6b 3d a4 70 69 63 5f  49 46 46 0d 10 68 19 20  |Ok=.pic_IFF..h. |
00004c50  c9 20 26 36 39 34 20 3a  20 4f 6b 3d a4 70 69 63  |. &694 : Ok=.pic|
00004c60  5f 4d 41 43 0d 10 72 19  20 c9 20 26 36 39 35 20  |_MAC..r. . &695 |
00004c70  3a 20 4f 6b 3d a4 70 69  63 5f 47 49 46 0d 10 7c  |: Ok=.pic_GIF..||
00004c80  19 20 c9 20 26 36 39 36  20 3a 20 4f 6b 3d a4 70  |. . &696 : Ok=.p|
00004c90  69 63 5f 53 55 4e 0d 10  86 19 20 c9 20 26 36 39  |ic_SUN.... . &69|
00004ca0  37 20 3a 20 4f 6b 3d a4  70 69 63 5f 50 43 58 0d  |7 : Ok=.pic_PCX.|
00004cb0  10 90 19 20 c9 20 26 36  39 38 20 3a 20 4f 6b 3d  |... . &698 : Ok=|
00004cc0  a4 70 69 63 5f 51 52 54  0d 10 9a 19 20 c9 20 26  |.pic_QRT.... . &|
00004cd0  36 39 39 20 3a 20 4f 6b  3d a4 70 69 63 5f 4d 54  |699 : Ok=.pic_MT|
00004ce0  56 0d 10 a4 1d 20 c9 20  26 36 39 41 20 3a 20 4f  |V.... . &69A : O|
00004cf0  6b 3d a4 70 69 63 5f 43  41 44 53 4f 46 54 0d 10  |k=.pic_CADSOFT..|
00004d00  ae 1b 20 c9 20 26 36 39  42 20 3a 20 4f 6b 3d a4  |.. . &69B : Ok=.|
00004d10  70 69 63 5f 49 52 4c 41  4d 0d 10 b8 19 20 c9 20  |pic_IRLAM.... . |
00004d20  26 36 39 43 20 3a 20 4f  6b 3d a4 70 69 63 5f 42  |&69C : Ok=.pic_B|
00004d30  4d 50 0d 10 c2 1b 20 c9  20 26 36 39 44 20 3a 20  |MP.... . &69D : |
00004d40  4f 6b 3d a4 70 69 63 5f  54 41 52 47 41 0d 10 cc  |Ok=.pic_TARGA...|
00004d50  1d 20 c9 20 26 36 39 45  20 3a 20 4f 6b 3d a4 70  |. . &69E : Ok=.p|
00004d60  69 63 5f 50 42 4d 50 4c  55 53 0d 10 d6 1a 20 c9  |ic_PBMPLUS.... .|
00004d70  20 26 36 39 46 20 3a 20  4f 6b 3d a4 70 69 63 5f  | &69F : Ok=.pic_|
00004d80  5a 56 44 41 0d 10 e0 1a  20 c9 20 26 46 46 30 20  |ZVDA.... . &FF0 |
00004d90  3a 20 4f 6b 3d a4 70 69  63 5f 54 49 46 46 0d 10  |: Ok=.pic_TIFF..|
00004da0  ea 05 cb 0d 10 f4 24 49  6d 67 3d 4f 6b 3a f4 20  |......$Img=Ok:. |
00004db0  49 6d 61 67 65 20 6f 6b  20 69 66 20 61 6c 6c 20  |Image ok if all |
00004dc0  69 73 20 77 65 6c 6c 0d  10 fe 0a e7 49 6d 67 20  |is well.....Img |
00004dd0  8c 0d 11 08 13 20 49 6d  67 4d 6f 64 65 25 3d 4d  |..... ImgMode%=M|
00004de0  6f 64 65 25 0d 11 12 1f  20 e7 53 61 6d 65 4c 65  |ode%.... .SameLe|
00004df0  61 66 20 8c 20 53 61 76  65 53 70 72 24 3d 4c 65  |af . SaveSpr$=Le|
00004e00  61 66 24 0d 11 1c 05 cd  0d 11 26 1d f2 68 6f 75  |af$.......&..hou|
00004e10  72 5f 6f 66 66 3a f4 20  48 6f 75 72 67 6c 61 73  |r_off:. Hourglas|
00004e20  73 20 6f 66 66 0d 11 30  21 f2 69 63 6c 6f 73 65  |s off..0!.iclose|
00004e30  3a f4 20 43 6c 6f 73 65  20 69 6e 70 75 74 20 66  |:. Close input f|
00004e40  69 6c 65 28 73 29 0d 11  3a 08 3d 49 6d 67 0d 11  |ile(s)..:.=Img..|
00004e50  44 04 0d 11 4e 17 dd f2  73 61 76 65 5f 73 70 72  |D...N...save_spr|
00004e60  69 74 65 28 6f 75 74 24  29 0d 11 58 1f f4 20 53  |ite(out$)..X.. S|
00004e70  61 76 65 73 20 69 6d 61  67 65 20 61 73 20 73 70  |aves image as sp|
00004e80  72 69 74 65 66 69 6c 65  0d 11 62 12 c8 8e 20 53  |ritefile..b... S|
00004e90  61 76 65 4b 69 6e 64 24  20 ca 0d 11 6c 31 20 c9  |aveKind$ ...l1 .|
00004ea0  20 22 46 75 6c 6c 22 20  3a 20 f4 20 46 75 6c 6c  | "Full" : . Full|
00004eb0  20 72 65 73 6f 6c 75 74  69 6f 6e 20 73 70 72 69  | resolution spri|
00004ec0  74 65 2c 20 6e 6f 20 65  64 69 74 0d 11 76 20 20  |te, no edit..v  |
00004ed0  c9 20 22 57 68 6f 6c 65  22 20 3a 20 f2 65 64 69  |. "Whole" : .edi|
00004ee0  74 5f 70 61 72 74 28 a3  2c a3 29 0d 11 80 29 20  |t_part(.,.)...) |
00004ef0  c9 20 22 57 68 6f 6c 65  20 28 73 63 61 6c 65 64  |. "Whole (scaled|
00004f00  29 22 20 3a 20 f2 65 64  69 74 5f 70 61 72 74 28  |)" : .edit_part(|
00004f10  b9 2c a3 29 0d 11 8a 1f  20 c9 20 22 50 61 72 74  |.,.).... . "Part|
00004f20  22 20 3a 20 f2 65 64 69  74 5f 70 61 72 74 28 a3  |" : .edit_part(.|
00004f30  2c b9 29 0d 11 94 28 20  c9 20 22 50 61 72 74 20  |,.)...( . "Part |
00004f40  28 73 63 61 6c 65 64 29  22 20 3a 20 f2 65 64 69  |(scaled)" : .edi|
00004f50  74 5f 70 61 72 74 28 b9  2c b9 29 0d 11 9e 05 cb  |t_part(.,.).....|
00004f60  0d 11 a8 1b f2 68 6f 75  72 5f 6f 6e 3a f4 20 48  |.....hour_on:. H|
00004f70  6f 75 72 67 6c 61 73 73  20 6f 6e 0d 11 b2 17 e7  |ourglass on.....|
00004f80  53 61 76 65 4b 69 6e 64  24 3d 22 46 75 6c 6c 22  |SaveKind$="Full"|
00004f90  20 8c 0d 11 bc 38 20 f4  20 46 75 6c 6c 20 73 70  | ....8 . Full sp|
00004fa0  72 69 74 65 2c 20 73 61  76 65 20 69 6d 61 67 65  |rite, save image|
00004fb0  20 77 69 74 68 20 70 61  6c 65 74 74 65 20 28 6f  | with palette (o|
00004fc0  70 74 69 6f 6e 61 6c 6c  79 29 0d 11 c6 23 20 4f  |ptionally)...# O|
00004fd0  75 74 3d ae 28 6f 75 74  24 29 3a f4 20 4f 70 65  |ut=.(out$):. Ope|
00004fe0  6e 20 73 70 72 69 74 65  20 66 69 6c 65 0d 11 d0  |n sprite file...|
00004ff0  2d 20 73 70 72 25 3d 53  70 72 69 74 65 25 2b 53  |- spr%=Sprite%+S|
00005000  70 72 69 74 65 25 21 38  3a f4 20 53 74 61 72 74  |prite%!8:. Start|
00005010  20 6f 66 20 73 70 72 69  74 65 0d 11 da 2c 20 63  | of sprite..., c|
00005020  6f 6c 73 25 3d 32 5e 53  70 72 43 6f 6c 62 69 74  |ols%=2^SprColbit|
00005030  73 25 3a f4 20 43 6f 6c  6f 75 72 73 20 69 6e 20  |s%:. Colours in |
00005040  73 70 72 69 74 65 0d 11  e4 0f 20 e7 53 61 76 65  |sprite.... .Save|
00005050  50 61 6c 20 8c 0d 11 ee  22 20 20 f4 20 53 61 76  |Pal ...."  . Sav|
00005060  65 20 77 69 74 68 20 70  61 6c 65 74 74 65 20 69  |e with palette i|
00005070  6e 63 6c 75 64 65 64 0d  11 f8 3b 20 20 e7 63 6f  |ncluded...;  .co|
00005080  6c 73 25 3d 32 35 36 20  8c 20 65 6e 74 73 25 3d  |ls%=256 . ents%=|
00005090  36 34 20 8b 20 65 6e 74  73 25 3d 63 6f 6c 73 25  |64 . ents%=cols%|
000050a0  3a f4 20 50 61 6c 65 74  74 65 20 65 6e 74 72 69  |:. Palette entri|
000050b0  65 73 0d 12 02 2d 20 20  65 78 74 72 61 25 3d 65  |es...-  extra%=e|
000050c0  6e 74 73 25 2a 38 3a f4  20 45 78 74 72 61 20 72  |nts%*8:. Extra r|
000050d0  6f 6f 6d 20 66 6f 72 20  70 61 6c 65 74 74 65 0d  |oom for palette.|
000050e0  12 0c 45 20 20 c8 99 20  22 4f 53 5f 47 42 50 42  |..E  .. "OS_GBPB|
000050f0  22 2c 31 2c 4f 75 74 2c  53 70 72 69 74 65 25 2b  |",1,Out,Sprite%+|
00005100  34 2c 38 2c 30 3a f4 20  4f 75 74 70 75 74 20 70  |4,8,0:. Output p|
00005110  61 72 74 20 6f 66 20 63  6f 6e 74 72 6f 6c 20 62  |art of control b|
00005120  6c 6f 63 6b 0d 12 16 44  20 20 21 61 72 67 25 3d  |lock...D  !arg%=|
00005130  65 78 74 72 61 25 2b 53  70 72 69 74 65 25 21 31  |extra%+Sprite%!1|
00005140  32 3a c8 99 20 22 4f 53  5f 47 42 50 42 22 2c 32  |2:.. "OS_GBPB",2|
00005150  2c 4f 75 74 2c 61 72 67  25 2c 34 3a f4 20 4e 65  |,Out,arg%,4:. Ne|
00005160  77 20 6f 66 66 73 65 74  0d 12 20 3f 20 20 21 61  |w offset.. ?  !a|
00005170  72 67 25 3d 65 78 74 72  61 25 2b 21 73 70 72 25  |rg%=extra%+!spr%|
00005180  3a c8 99 20 22 4f 53 5f  47 42 50 42 22 2c 32 2c  |:.. "OS_GBPB",2,|
00005190  4f 75 74 2c 61 72 67 25  2c 34 3a f4 20 4e 65 77  |Out,arg%,4:. New|
000051a0  20 6f 66 66 73 65 74 0d  12 2a 41 20 20 c8 99 20  | offset..*A  .. |
000051b0  22 4f 53 5f 47 42 50 42  22 2c 32 2c 4f 75 74 2c  |"OS_GBPB",2,Out,|
000051c0  73 70 72 25 2b 34 2c 32  38 3a f4 20 4f 75 74 70  |spr%+4,28:. Outp|
000051d0  75 74 20 70 61 72 74 20  6f 66 20 73 70 72 69 74  |ut part of sprit|
000051e0  65 20 68 65 61 64 65 72  0d 12 34 41 20 20 21 61  |e header..4A  !a|
000051f0  72 67 25 3d 65 78 74 72  61 25 2b 73 70 72 25 21  |rg%=extra%+spr%!|
00005200  33 32 3a c8 99 20 22 4f  53 5f 47 42 50 42 22 2c  |32:.. "OS_GBPB",|
00005210  32 2c 4f 75 74 2c 61 72  67 25 2c 34 3a f4 20 4e  |2,Out,arg%,4:. N|
00005220  65 77 20 6f 66 66 73 65  74 0d 12 3e 41 20 20 21  |ew offset..>A  !|
00005230  61 72 67 25 3d 65 78 74  72 61 25 2b 73 70 72 25  |arg%=extra%+spr%|
00005240  21 33 36 3a c8 99 20 22  4f 53 5f 47 42 50 42 22  |!36:.. "OS_GBPB"|
00005250  2c 32 2c 4f 75 74 2c 61  72 67 25 2c 34 3a f4 20  |,2,Out,arg%,4:. |
00005260  4e 65 77 20 6f 66 66 73  65 74 0d 12 48 39 20 20  |New offset..H9  |
00005270  c8 99 20 22 4f 53 5f 47  42 50 42 22 2c 32 2c 4f  |.. "OS_GBPB",2,O|
00005280  75 74 2c 73 70 72 25 2b  34 30 2c 34 3a f4 20 4f  |ut,spr%+40,4:. O|
00005290  75 74 70 75 74 20 73 70  72 69 74 65 27 73 20 6d  |utput sprite's m|
000052a0  6f 64 65 0d 12 52 8a 20  20 e3 20 63 25 3d 31 20  |ode..R.  . c%=1 |
000052b0  b8 20 65 6e 74 73 25 3a  61 72 67 25 21 28 63 25  |. ents%:arg%!(c%|
000052c0  2a 38 2d 38 29 3d a4 72  65 61 64 70 61 6c 76 61  |*8-8)=.readpalva|
000052d0  6c 28 49 6d 67 50 61 6c  25 28 63 25 29 29 3a 61  |l(ImgPal%(c%)):a|
000052e0  72 67 25 21 28 63 25 2a  38 2d 34 29 3d 61 72 67  |rg%!(c%*8-4)=arg|
000052f0  25 21 28 63 25 2a 38 2d  38 29 3a ed 3a c8 99 20  |%!(c%*8-8):.:.. |
00005300  22 4f 53 5f 47 42 50 42  22 2c 32 2c 4f 75 74 2c  |"OS_GBPB",2,Out,|
00005310  61 72 67 25 2c 65 6e 74  73 25 2a 38 3a f4 20 4f  |arg%,ents%*8:. O|
00005320  75 74 70 75 74 20 70 61  6c 65 74 74 65 0d 12 5c  |utput palette..\|
00005330  46 20 20 c8 99 20 22 4f  53 5f 47 42 50 42 22 2c  |F  .. "OS_GBPB",|
00005340  32 2c 4f 75 74 2c 73 70  72 25 2b 73 70 72 25 21  |2,Out,spr%+spr%!|
00005350  33 32 2c 28 73 70 72 25  21 31 36 2b 31 29 2a 28  |32,(spr%!16+1)*(|
00005360  73 70 72 25 21 32 30 2b  31 29 2a 34 3a f4 20 44  |spr%!20+1)*4:. D|
00005370  61 74 61 0d 12 66 29 20  cc 20 f4 20 4e 6f 20 70  |ata..f) . . No p|
00005380  61 6c 65 74 74 65 2c 20  6f 75 74 70 75 74 20 74  |alette, output t|
00005390  68 65 20 77 68 6f 6c 65  20 6c 6f 74 0d 12 70 3e  |he whole lot..p>|
000053a0  20 20 c8 99 20 22 4f 53  5f 47 42 50 42 22 2c 31  |  .. "OS_GBPB",1|
000053b0  2c 4f 75 74 2c 53 70 72  69 74 65 25 2b 34 2c 53  |,Out,Sprite%+4,S|
000053c0  70 72 69 74 65 25 21 31  32 2d 34 2c 30 3a f4 20  |prite%!12-4,0:. |
000053d0  4f 75 74 70 75 74 20 61  6c 6c 0d 12 7a 06 20 cd  |Output all..z. .|
000053e0  0d 12 84 3f 20 d9 23 4f  75 74 3a c8 99 20 22 4f  |...? .#Out:.. "O|
000053f0  53 5f 43 4c 49 22 2c 22  53 65 74 54 79 70 65 20  |S_CLI","SetType |
00005400  22 2b 6f 75 74 24 2b 22  20 53 70 72 69 74 65 22  |"+out$+" Sprite"|
00005410  3a f4 20 43 6c 6f 73 65  20 26 20 74 79 70 65 0d  |:. Close & type.|
00005420  12 8e 30 cc 20 f4 20 45  64 69 74 65 64 20 70 61  |..0. . Edited pa|
00005430  72 74 20 69 6e 20 77 69  6e 64 6f 77 20 6f 6e 20  |rt in window on |
00005440  73 63 72 65 65 6e 2c 20  73 61 76 65 20 69 74 0d  |screen, save it.|
00005450  12 98 28 20 f2 69 6e 76  61 6c 69 64 61 74 65 5f  |..( .invalidate_|
00005460  73 63 72 65 65 6e 3a f4  20 53 63 72 65 65 6e 20  |screen:. Screen |
00005470  69 6e 76 61 6c 69 64 0d  12 a2 1f 20 e7 53 61 76  |invalid.... .Sav|
00005480  65 50 61 6c 20 8c 20 70  61 6c 25 3d 31 20 8b 20  |ePal . pal%=1 . |
00005490  70 61 6c 25 3d 30 0d 12  ac 34 20 c8 99 20 4f 53  |pal%=0...4 .. OS|
000054a0  53 70 6f 70 25 2c 32 2c  2c 6f 75 74 24 2c 70 61  |Spop%,2,,out$,pa|
000054b0  6c 25 3a f4 20 53 61 76  65 20 73 63 72 65 65 6e  |l%:. Save screen|
000054c0  20 69 6e 20 77 69 6e 64  6f 77 0d 12 b6 2f 20 ef  | in window.../ .|
000054d0  32 34 2c 30 3b 30 3b 53  63 72 57 25 3b 53 63 72  |24,0;0;ScrW%;Scr|
000054e0  48 25 3b 3a f4 20 52 65  73 65 74 20 73 63 72 65  |H%;:. Reset scre|
000054f0  65 6e 20 77 69 6e 64 6f  77 0d 12 c0 05 cd 0d 12  |en window.......|
00005500  ca 1d f2 68 6f 75 72 5f  6f 66 66 3a f4 20 48 6f  |...hour_off:. Ho|
00005510  75 72 67 6c 61 73 73 20  6f 66 66 0d 12 d4 05 e1  |urglass off.....|
00005520  0d 12 de 04 0d 12 e8 0f  dd a4 70 69 63 5f 44 45  |..........pic_DE|
00005530  47 41 53 0d 12 f2 2f f4  20 4d 61 6b 65 73 20 41  |GAS.../. Makes A|
00005540  74 61 72 69 20 44 65 67  61 73 20 69 6d 61 67 65  |tari Degas image|
00005550  20 28 50 49 31 2f 32 2f  33 2c 50 43 31 2f 32 2f  | (PI1/2/3,PC1/2/|
00005560  33 29 0d 12 fc 33 63 6f  6d 70 72 25 3d a4 69 62  |3)...3compr%=.ib|
00005570  3a 72 65 73 25 3d a4 69  62 3a f4 20 46 6c 61 67  |:res%=.ib:. Flag|
00005580  73 2c 20 72 65 73 6f 6c  75 74 69 6f 6e 20 28 31  |s, resolution (1|
00005590  2f 32 2f 33 29 0d 13 06  37 63 6f 6d 70 72 65 73  |/2/3)...7compres|
000055a0  73 65 64 3d 28 28 63 6f  6d 70 72 25 80 25 31 30  |sed=((compr%.%10|
000055b0  30 30 30 30 30 30 29 3e  30 29 3a f4 20 43 6f 6d  |000000)>0):. Com|
000055c0  70 72 65 73 73 65 64 20  66 6c 61 67 0d 13 10 23  |pressed flag...#|
000055d0  74 6f 74 61 6c 25 3d 33  32 30 30 30 3a f4 20 54  |total%=32000:. T|
000055e0  6f 74 61 6c 20 64 61 74  61 20 62 79 74 65 73 0d  |otal data bytes.|
000055f0  13 1a 0d c8 8e 20 72 65  73 25 20 ca 0d 13 24 2c  |..... res% ...$,|
00005600  20 c9 20 30 20 3a 20 77  69 64 74 68 25 3d 33 32  | . 0 : width%=32|
00005610  30 3a 68 65 69 67 68 74  25 3d 32 30 30 3a 63 6f  |0:height%=200:co|
00005620  6c 62 69 74 73 25 3d 34  0d 13 2e 2c 20 c9 20 31  |lbits%=4..., . 1|
00005630  20 3a 20 77 69 64 74 68  25 3d 36 34 30 3a 68 65  | : width%=640:he|
00005640  69 67 68 74 25 3d 32 30  30 3a 63 6f 6c 62 69 74  |ight%=200:colbit|
00005650  73 25 3d 32 0d 13 38 2c  20 c9 20 32 20 3a 20 77  |s%=2..8, . 2 : w|
00005660  69 64 74 68 25 3d 36 34  30 3a 68 65 69 67 68 74  |idth%=640:height|
00005670  25 3d 34 30 30 3a 63 6f  6c 62 69 74 73 25 3d 31  |%=400:colbits%=1|
00005680  0d 13 42 05 cb 0d 13 4c  2b 63 6f 6c 6f 75 72 73  |..B....L+colours|
00005690  25 3d 32 5e 63 6f 6c 62  69 74 73 25 3a f4 20 4e  |%=2^colbits%:. N|
000056a0  75 6d 62 65 72 20 6f 66  20 63 6f 6c 6f 75 72 73  |umber of colours|
000056b0  0d 13 56 27 f2 73 65 74  28 77 69 64 74 68 25 2c  |..V'.set(width%,|
000056c0  68 65 69 67 68 74 25 2c  63 6f 6c 6f 75 72 73 25  |height%,colours%|
000056d0  2c 4d 6f 64 65 25 29 0d  13 60 3e e7 a4 61 6c 6c  |,Mode%)..`>..all|
000056e0  6f 63 61 74 65 5f 73 74  64 28 77 69 64 74 68 25  |ocate_std(width%|
000056f0  2c 28 77 69 64 74 68 25  2a 63 6f 6c 62 69 74 73  |,(width%*colbits|
00005700  25 2b 37 29 81 38 2c 77  69 64 74 68 25 2c 30 29  |%+7).8,width%,0)|
00005710  20 8b 20 3d a3 0d 13 6a  17 e7 a4 6e 65 77 5f 69  | . =...j...new_i|
00005720  6d 61 67 65 28 30 29 20  8b 20 3d a3 0d 13 74 2f  |mage(0) . =...t/|
00005730  f2 69 67 65 74 28 46 31  25 2c 64 75 6d 25 2c 33  |.iget(F1%,dum%,3|
00005740  32 29 3a f4 20 52 65 61  64 20 70 61 6c 65 74 74  |2):. Read palett|
00005750  65 20 66 72 6f 6d 20 66  69 6c 65 0d 13 7e 95 49  |e from file..~.I|
00005760  6e 50 61 6c 25 28 30 29  3d 63 6f 6c 62 69 74 73  |nPal%(0)=colbits|
00005770  25 3a e3 20 63 25 3d 30  20 b8 20 63 6f 6c 6f 75  |%:. c%=0 . colou|
00005780  72 73 25 2d 31 3a 76 25  3d 64 75 6d 25 21 28 63  |rs%-1:v%=dum%!(c|
00005790  25 2a 32 29 3a 72 25 3d  28 76 25 80 37 29 2a 33  |%*2):r%=(v%.7)*3|
000057a0  32 3a 67 25 3d 28 28 76  25 3e 3e 31 32 29 80 37  |2:g%=((v%>>12).7|
000057b0  29 2a 33 32 3a 62 25 3d  28 28 76 25 3e 3e 38 29  |)*32:b%=((v%>>8)|
000057c0  80 37 29 2a 33 32 3a 49  6e 50 61 6c 25 28 63 6f  |.7)*32:InPal%(co|
000057d0  6c 6f 75 72 73 25 2d 63  25 29 3d 28 72 25 3c 3c  |lours%-c%)=(r%<<|
000057e0  31 36 29 2b 28 67 25 3c  3c 38 29 2b 62 25 3a ed  |16)+(g%<<8)+b%:.|
000057f0  0d 13 88 5b e7 63 6f 6d  70 72 65 73 73 65 64 20  |...[.compressed |
00005800  8c 20 63 6f 6d 70 72 24  3d 22 52 75 6e 20 6c 65  |. compr$="Run le|
00005810  6e 67 74 68 22 3a 74 79  70 65 24 3d 22 50 43 22  |ngth":type$="PC"|
00005820  2b c3 28 72 65 73 25 2b  31 29 20 8b 20 63 6f 6d  |+.(res%+1) . com|
00005830  70 72 24 3d 22 22 3a 74  79 70 65 24 3d 22 50 49  |pr$="":type$="PI|
00005840  22 2b c3 28 72 65 73 25  2b 31 29 0d 13 92 5f f2  |"+.(res%+1)..._.|
00005850  69 6d 61 67 65 5f 69 6e  66 6f 28 22 41 74 61 72  |image_info("Atar|
00005860  69 20 44 65 67 61 73 20  22 2b 74 79 70 65 24 2c  |i Degas "+type$,|
00005870  77 69 64 74 68 25 2c 68  65 69 67 68 74 25 2c 30  |width%,height%,0|
00005880  2c 63 6f 6c 62 69 74 73  25 2c 4d 6f 64 65 25 2c  |,colbits%,Mode%,|
00005890  63 6f 6d 70 72 24 2c 22  22 2c 46 6c 65 6e 25 2d  |compr$,"",Flen%-|
000058a0  33 34 2c 74 6f 74 61 6c  25 29 0d 13 9c 7e f2 76  |34,total%)...~.v|
000058b0  61 72 28 22 63 6f 6d 70  22 2c 63 6f 6d 70 72 65  |ar("comp",compre|
000058c0  73 73 65 64 29 3a f2 76  61 72 28 22 72 65 73 74  |ssed):.var("rest|
000058d0  22 2c 72 65 73 25 29 3a  f2 76 61 72 28 22 69 6d  |",res%):.var("im|
000058e0  67 78 22 2c 77 69 64 74  68 25 29 3a f2 76 61 72  |gx",width%):.var|
000058f0  28 22 69 6d 67 79 22 2c  68 65 69 67 68 74 25 29  |("imgy",height%)|
00005900  3a f2 76 61 72 28 22 69  66 70 31 22 2c 26 32 32  |:.var("ifp1",&22|
00005910  29 3a e7 a4 75 6e 70 61  63 6b 28 22 44 45 47 41  |):..unpack("DEGA|
00005920  53 22 29 20 8b 20 3d a3  0d 13 a6 06 3d b9 0d 13  |S") . =.....=...|
00005930  b0 05 20 0d 13 ba 0d dd  a4 70 69 63 5f 49 4d 47  |.. ......pic_IMG|
00005940  0d 13 c4 1b f4 20 4d 61  6b 65 73 20 41 74 61 72  |..... Makes Atar|
00005950  69 20 49 4d 47 20 69 6d  61 67 65 0d 13 ce 4b 76  |i IMG image...Kv|
00005960  65 72 73 69 6f 6e 25 3d  a4 69 64 62 3a 68 65 61  |ersion%=.idb:hea|
00005970  64 6c 65 6e 25 3d a4 69  64 62 3a 6e 70 6c 61 6e  |dlen%=.idb:nplan|
00005980  65 73 25 3d a4 69 64 62  3a f4 20 56 65 72 73 69  |es%=.idb:. Versi|
00005990  6f 6e 2c 20 68 65 61 64  6c 65 6e 67 74 68 2c 20  |on, headlength, |
000059a0  70 6c 61 6e 65 73 0d 13  d8 4b 70 61 74 6c 65 6e  |planes...Kpatlen|
000059b0  25 3d a4 69 64 62 3a 70  77 25 3d a4 69 64 62 3a  |%=.idb:pw%=.idb:|
000059c0  70 68 25 3d a4 69 64 62  3a f4 20 50 61 74 74 65  |ph%=.idb:. Patte|
000059d0  72 6e 20 6c 65 6e 67 74  68 2c 20 70 69 78 65 6c  |rn length, pixel|
000059e0  20 77 69 64 74 68 20 61  6e 64 20 68 65 69 67 68  | width and heigh|
000059f0  74 0d 13 e2 39 77 69 64  74 68 25 3d a4 69 64 62  |t...9width%=.idb|
00005a00  3a 68 65 69 67 68 74 25  3d a4 69 64 62 3a f4 20  |:height%=.idb:. |
00005a10  57 69 64 74 68 20 61 6e  64 20 68 65 69 67 68 74  |Width and height|
00005a20  20 69 6e 20 70 69 78 65  6c 73 0d 13 ec 2b 63 6f  | in pixels...+co|
00005a30  6c 6f 75 72 73 25 3d 32  5e 6e 70 6c 61 6e 65 73  |lours%=2^nplanes|
00005a40  25 3a f4 20 4e 75 6d 62  65 72 20 6f 66 20 63 6f  |%:. Number of co|
00005a50  6c 6f 75 72 73 0d 13 f6  27 f2 73 65 74 28 77 69  |lours...'.set(wi|
00005a60  64 74 68 25 2c 68 65 69  67 68 74 25 2c 63 6f 6c  |dth%,height%,col|
00005a70  6f 75 72 73 25 2c 4d 6f  64 65 25 29 0d 14 00 7f  |ours%,Mode%)....|
00005a80  e7 63 6f 6c 6f 75 72 73  25 3c 3e 32 20 84 20 70  |.colours%<>2 . p|
00005a90  61 74 6c 65 6e 25 3c 3e  32 20 8c 20 f2 65 72 72  |atlen%<>2 . .err|
00005aa0  6f 72 28 2d 31 2c 22 49  20 63 61 6e 6e 6f 74 20  |or(-1,"I cannot |
00005ab0  64 69 73 70 6c 61 79 20  41 74 61 72 69 20 49 4d  |display Atari IM|
00005ac0  47 20 69 6d 61 67 65 73  20 77 69 74 68 20 6d 6f  |G images with mo|
00005ad0  72 65 20 74 68 61 6e 20  32 20 63 6f 6c 6f 75 72  |re than 2 colour|
00005ae0  73 20 6f 72 20 70 61 74  74 65 72 6e 6c 65 6e 67  |s or patternleng|
00005af0  74 68 3c 3e 32 20 21 22  29 3a e1 0d 14 0a 3e e7  |th<>2 !"):....>.|
00005b00  a4 61 6c 6c 6f 63 61 74  65 5f 73 74 64 28 77 69  |.allocate_std(wi|
00005b10  64 74 68 25 2c 28 77 69  64 74 68 25 2a 6e 70 6c  |dth%,(width%*npl|
00005b20  61 6e 65 73 25 2b 37 29  81 38 2c 77 69 64 74 68  |anes%+7).8,width|
00005b30  25 2c 30 29 20 8b 20 3d  a3 0d 14 14 17 e7 a4 6e  |%,0) . =.......n|
00005b40  65 77 5f 69 6d 61 67 65  28 30 29 20 8b 20 3d a3  |ew_image(0) . =.|
00005b50  0d 14 1e 2f f2 67 72 65  79 70 61 6c 28 49 6e 50  |.../.greypal(InP|
00005b60  61 6c 25 28 29 2c 6e 70  6c 61 6e 65 73 25 2c 31  |al%(),nplanes%,1|
00005b70  29 3a f4 20 53 65 74 20  70 61 6c 65 74 74 65 0d  |):. Set palette.|
00005b80  14 28 7b f2 69 6d 61 67  65 5f 69 6e 66 6f 28 22  |.({.image_info("|
00005b90  41 74 61 72 69 20 49 4d  47 22 2c 77 69 64 74 68  |Atari IMG",width|
00005ba0  25 2c 68 65 69 67 68 74  25 2c 30 2c 6e 70 6c 61  |%,height%,0,npla|
00005bb0  6e 65 73 25 2c 4d 6f 64  65 25 2c 22 53 65 76 65  |nes%,Mode%,"Seve|
00005bc0  72 61 6c 20 77 61 79 73  22 2c 22 22 2c 46 6c 65  |ral ways","",Fle|
00005bd0  6e 25 2d 68 65 61 64 6c  65 6e 25 2a 32 2c 28 77  |n%-headlen%*2,(w|
00005be0  69 64 74 68 25 2a 68 65  69 67 68 74 25 2a 6e 70  |idth%*height%*np|
00005bf0  6c 61 6e 65 73 25 29 81  38 29 0d 14 32 59 f2 76  |lanes%).8)..2Y.v|
00005c00  61 72 28 22 69 6d 67 78  22 2c 77 69 64 74 68 25  |ar("imgx",width%|
00005c10  29 3a f2 76 61 72 28 22  69 6d 67 79 22 2c 68 65  |):.var("imgy",he|
00005c20  69 67 68 74 25 29 3a f2  76 61 72 28 22 69 66 70  |ight%):.var("ifp|
00005c30  31 22 2c 68 65 61 64 6c  65 6e 25 2a 32 29 3a e7  |1",headlen%*2):.|
00005c40  a4 75 6e 70 61 63 6b 28  22 49 4d 47 22 29 20 8b  |.unpack("IMG") .|
00005c50  20 3d a3 0d 14 3c 06 3d  b9 0d 14 46 05 20 0d 14  | =...<.=...F. ..|
00005c60  50 0d dd a4 70 69 63 5f  4d 41 43 0d 14 5a 24 f4  |P...pic_MAC..Z$.|
00005c70  20 4d 61 6b 65 73 20 4d  61 63 49 6e 74 6f 73 68  | Makes MacIntosh|
00005c80  20 4d 61 63 50 61 69 6e  74 20 69 6d 61 67 65 0d  | MacPaint image.|
00005c90  14 64 32 77 69 64 74 68  25 3d 35 37 36 3a 68 65  |.d2width%=576:he|
00005ca0  69 67 68 74 25 3d 37 32  30 3a 63 6f 6c 62 69 74  |ight%=720:colbit|
00005cb0  73 25 3d 31 3a f4 20 52  65 73 6f 6c 75 74 69 6f  |s%=1:. Resolutio|
00005cc0  6e 0d 14 6e 29 f2 73 65  74 28 77 69 64 74 68 25  |n..n).set(width%|
00005cd0  2c 68 65 69 67 68 74 25  2c 32 5e 63 6f 6c 62 69  |,height%,2^colbi|
00005ce0  74 73 25 2c 4d 6f 64 65  25 29 0d 14 78 3e e7 a4  |ts%,Mode%)..x>..|
00005cf0  61 6c 6c 6f 63 61 74 65  5f 73 74 64 28 77 69 64  |allocate_std(wid|
00005d00  74 68 25 2c 28 77 69 64  74 68 25 2a 63 6f 6c 62  |th%,(width%*colb|
00005d10  69 74 73 25 2b 37 29 81  38 2c 77 69 64 74 68 25  |its%+7).8,width%|
00005d20  2c 30 29 20 8b 20 3d a3  0d 14 82 17 e7 a4 6e 65  |,0) . =.......ne|
00005d30  77 5f 69 6d 61 67 65 28  30 29 20 8b 20 3d a3 0d  |w_image(0) . =..|
00005d40  14 8c 2f f2 67 72 65 79  70 61 6c 28 49 6e 50 61  |../.greypal(InPa|
00005d50  6c 25 28 29 2c 63 6f 6c  62 69 74 73 25 2c 31 29  |l%(),colbits%,1)|
00005d60  3a f4 20 53 65 74 20 70  61 6c 65 74 74 65 0d 14  |:. Set palette..|
00005d70  96 6b f2 69 6d 61 67 65  5f 69 6e 66 6f 28 22 4d  |.k.image_info("M|
00005d80  61 63 49 6e 74 6f 73 68  20 4d 61 63 50 61 69 6e  |acIntosh MacPain|
00005d90  74 22 2c 77 69 64 74 68  25 2c 68 65 69 67 68 74  |t",width%,height|
00005da0  25 2c 30 2c 63 6f 6c 62  69 74 73 25 2c 4d 6f 64  |%,0,colbits%,Mod|
00005db0  65 25 2c 22 52 75 6e 20  6c 65 6e 67 74 68 22 2c  |e%,"Run length",|
00005dc0  22 22 2c 46 6c 65 6e 25  2d 36 34 30 2c 28 35 37  |"",Flen%-640,(57|
00005dd0  36 2a 37 32 30 29 81 38  29 0d 14 a0 52 f2 76 61  |6*720).8)...R.va|
00005de0  72 28 22 69 6d 67 78 22  2c 77 69 64 74 68 25 29  |r("imgx",width%)|
00005df0  3a f2 76 61 72 28 22 69  6d 67 79 22 2c 68 65 69  |:.var("imgy",hei|
00005e00  67 68 74 25 29 3a f2 76  61 72 28 22 69 66 70 31  |ght%):.var("ifp1|
00005e10  22 2c 36 34 30 29 3a e7  a4 75 6e 70 61 63 6b 28  |",640):..unpack(|
00005e20  22 4d 41 43 22 29 20 8b  20 3d a3 0d 14 aa 06 3d  |"MAC") . =.....=|
00005e30  b9 0d 14 b4 05 20 0d 14  be 0d dd a4 70 69 63 5f  |..... ......pic_|
00005e40  49 46 46 0d 14 c8 1b f4  20 4d 61 6b 65 73 20 41  |IFF..... Makes A|
00005e50  6d 69 67 61 20 49 46 46  20 69 6d 61 67 65 0d 14  |miga IFF image..|
00005e60  d2 25 62 6d 68 64 3d a3  3a 63 6d 61 70 3d a3 3a  |.%bmhd=.:cmap=.:|
00005e70  62 6f 64 79 3d a3 3a f4  20 49 6e 69 74 20 66 6c  |body=.:. Init fl|
00005e80  61 67 73 0d 14 dc 32 68  61 6d 3d a3 3a 6c 61 63  |ags...2ham=.:lac|
00005e90  65 3d a3 3a 68 69 72 65  73 3d a3 3a 68 61 6c 66  |e=.:hires=.:half|
00005ea0  62 72 69 67 68 74 3d a3  3a f4 20 49 6e 69 74 20  |bright=.:. Init |
00005eb0  66 6c 61 67 73 0d 14 e6  32 f4 20 43 68 65 63 6b  |flags...2. Check|
00005ec0  20 69 66 20 74 68 69 73  20 69 73 20 61 20 73 74  | if this is a st|
00005ed0  61 6e 64 61 72 64 20 49  46 46 20 70 69 63 74 75  |andard IFF pictu|
00005ee0  72 65 20 66 69 6c 65 0d  14 f0 90 66 6f 72 6d 24  |re file....form$|
00005ef0  3d a4 69 73 74 72 69 6e  67 28 46 31 25 2c 34 29  |=.istring(F1%,4)|
00005f00  3a f2 69 73 6b 69 70 28  46 31 25 2c 34 29 3a 66  |:.iskip(F1%,4):f|
00005f10  6f 72 6d 24 2b 3d a4 69  73 74 72 69 6e 67 28 46  |orm$+=.istring(F|
00005f20  31 25 2c 34 29 3a e7 66  6f 72 6d 24 3c 3e 22 46  |1%,4):.form$<>"F|
00005f30  4f 52 4d 49 4c 42 4d 22  20 8c 20 f2 65 72 72 6f  |ORMILBM" . .erro|
00005f40  72 28 2d 31 2c 22 54 68  69 73 20 73 63 72 65 65  |r(-1,"This scree|
00005f50  6e 20 66 69 6c 65 20 69  73 20 6e 6f 74 20 61 6e  |n file is not an|
00005f60  20 49 46 46 20 73 63 72  65 65 6e 20 66 69 6c 65  | IFF screen file|
00005f70  20 21 22 29 3a 3d a3 0d  14 fa 29 f5 20 f4 20 46  | !"):=....). . F|
00005f80  6f 6c 6c 6f 77 20 42 4d  48 44 2c 43 4d 41 50 20  |ollow BMHD,CMAP |
00005f90  61 6e 64 20 42 4f 44 59  20 68 65 61 64 65 72 73  |and BODY headers|
00005fa0  0d 15 04 39 68 65 61 64  24 3d a4 69 73 74 72 69  |...9head$=.istri|
00005fb0  6e 67 28 46 31 25 2c 34  29 3a 68 6c 65 6e 25 3d  |ng(F1%,4):hlen%=|
00005fc0  a4 69 77 62 3a 73 74 61  72 74 70 74 72 25 3d a4  |.iwb:startptr%=.|
00005fd0  69 70 74 72 28 46 31 25  29 0d 15 0e 0e c8 8e 20  |iptr(F1%)...... |
00005fe0  68 65 61 64 24 20 ca 0d  15 18 26 20 c9 20 22 42  |head$ ....& . "B|
00005ff0  4d 48 44 22 20 3a 20 62  6d 68 64 3d b9 3a f4 20  |MHD" : bmhd=.:. |
00006000  42 69 74 6d 61 70 20 68  65 61 64 65 72 0d 15 22  |Bitmap header.."|
00006010  3d 20 20 20 20 20 20 20  f4 20 52 65 61 64 20 70  |=       . Read p|
00006020  69 63 74 75 72 65 2f 73  63 72 65 65 6e 20 77 69  |icture/screen wi|
00006030  64 74 68 2c 20 68 65 69  67 68 74 2c 20 63 6f 6c  |dth, height, col|
00006040  6f 75 72 73 2c 20 65 74  63 2e 0d 15 2c 4b 20 20  |ours, etc...,K  |
00006050  20 20 20 20 20 77 69 64  74 68 25 3d a4 69 64 62  |     width%=.idb|
00006060  3a 68 65 69 67 68 74 25  3d a4 69 64 62 3a f2 69  |:height%=.idb:.i|
00006070  73 6b 69 70 28 46 31 25  2c 34 29 3a 70 6c 61 6e  |skip(F1%,4):plan|
00006080  65 73 25 3d a4 69 62 3a  f2 69 73 6b 69 70 28 46  |es%=.ib:.iskip(F|
00006090  31 25 2c 31 29 0d 15 36  48 20 20 20 20 20 20 20  |1%,1)..6H       |
000060a0  63 6f 6d 70 72 65 73 73  65 64 3d 28 a4 69 62 3d  |compressed=(.ib=|
000060b0  31 29 3a f2 69 73 6b 69  70 28 46 31 25 2c 35 29  |1):.iskip(F1%,5)|
000060c0  3a 73 5f 77 69 64 74 68  25 3d a4 69 64 62 3a 73  |:s_width%=.idb:s|
000060d0  5f 68 65 69 67 68 74 25  3d a4 69 64 62 0d 15 40  |_height%=.idb..@|
000060e0  3e 20 c9 20 22 43 41 4d  47 22 20 3a 20 66 6c 61  |> . "CAMG" : fla|
000060f0  67 73 25 3d a4 69 77 62  3a f4 20 47 65 74 20 66  |gs%=.iwb:. Get f|
00006100  6c 61 67 20 62 69 74 73  2c 20 73 65 74 20 66 6c  |lag bits, set fl|
00006110  61 67 73 20 66 72 6f 6d  20 69 74 0d 15 4a 35 20  |ags from it..J5 |
00006120  20 20 20 20 20 20 68 61  6d 3d 28 28 66 6c 61 67  |      ham=((flag|
00006130  73 25 80 26 38 30 30 29  3e 30 29 3a 6c 61 63 65  |s%.&800)>0):lace|
00006140  3d 28 28 66 6c 61 67 73  25 80 26 34 29 3e 30 29  |=((flags%.&4)>0)|
00006150  0d 15 54 3f 20 20 20 20  20 20 20 68 69 72 65 73  |..T?       hires|
00006160  3d 28 28 66 6c 61 67 73  25 80 26 38 30 30 30 29  |=((flags%.&8000)|
00006170  3e 30 29 3a 68 61 6c 66  62 72 69 67 68 74 3d 28  |>0):halfbright=(|
00006180  28 66 6c 61 67 73 25 80  26 38 30 29 3e 30 29 0d  |(flags%.&80)>0).|
00006190  15 5e 2d 20 c9 20 22 43  4d 41 50 22 20 3a 20 63  |.^- . "CMAP" : c|
000061a0  6d 61 70 3d b9 3a f4 20  43 6f 6c 6f 75 72 20 6d  |map=.:. Colour m|
000061b0  61 70 20 28 70 61 6c 65  74 74 65 29 0d 15 68 37  |ap (palette)..h7|
000061c0  20 20 20 20 20 20 20 70  61 6c 64 65 66 73 25 3d  |       paldefs%=|
000061d0  68 6c 65 6e 25 81 33 3a  f4 20 4e 75 6d 62 65 72  |hlen%.3:. Number|
000061e0  20 6f 66 20 70 61 6c 65  74 74 65 20 65 6e 74 72  | of palette entr|
000061f0  69 65 73 0d 15 72 34 20  20 20 20 20 20 20 f2 72  |ies..r4       .r|
00006200  65 61 64 32 34 70 61 6c  28 46 31 25 2c 49 6e 50  |ead24pal(F1%,InP|
00006210  61 6c 25 28 29 2c 70 61  6c 64 65 66 73 25 2c 30  |al%(),paldefs%,0|
00006220  2c 31 2c 32 2c 33 29 0d  15 7c 24 20 c9 20 22 42  |,1,2,3)..|$ . "B|
00006230  4f 44 59 22 20 3a 20 62  6f 64 79 3d b9 3a f4 20  |ODY" : body=.:. |
00006240  53 63 72 65 65 6e 20 64  61 74 61 0d 15 86 29 20  |Screen data...) |
00006250  20 20 20 20 20 20 f4 20  43 68 65 63 6b 20 69 66  |      . Check if|
00006260  20 61 6c 6c 20 70 61 72  74 73 20 61 72 65 20 74  | all parts are t|
00006270  68 65 72 65 0d 15 90 be  20 20 20 20 20 20 20 e7  |here....       .|
00006280  ac 62 6d 68 64 20 8c 20  f2 65 72 72 6f 72 28 2d  |.bmhd . .error(-|
00006290  31 2c 22 49 46 46 20 65  72 72 6f 72 20 3a 20 49  |1,"IFF error : I|
000062a0  20 64 69 64 20 6e 6f 74  20 66 69 6e 64 20 61 20  | did not find a |
000062b0  27 42 4d 48 44 27 20 62  6c 6f 63 6b 2e 20 43 61  |'BMHD' block. Ca|
000062c0  6e 6e 6f 74 20 70 72 6f  63 65 65 64 20 21 22 29  |nnot proceed !")|
000062d0  3a fd 20 b9 3a 3d a3 20  8b 20 e7 ac 63 6d 61 70  |:. .:=. . ..cmap|
000062e0  20 8c 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 46  | . .error(-1,"IF|
000062f0  46 20 65 72 72 6f 72 20  3a 20 49 20 64 69 64 20  |F error : I did |
00006300  6e 6f 74 20 66 69 6e 64  20 61 20 27 43 4d 41 50  |not find a 'CMAP|
00006310  27 20 62 6c 6f 63 6b 2e  20 43 61 6e 6e 6f 74 20  |' block. Cannot |
00006320  70 72 6f 63 65 65 64 20  21 22 29 3a fd 20 b9 3a  |proceed !"):. .:|
00006330  3d a3 0d 15 9a 36 20 20  20 20 20 20 20 f4 20 44  |=....6       . D|
00006340  65 74 65 72 6d 69 6e 65  20 73 75 69 74 61 62 6c  |etermine suitabl|
00006350  65 20 41 72 63 68 69 6d  65 64 65 73 20 73 63 72  |e Archimedes scr|
00006360  65 65 6e 20 6d 6f 64 65  0d 15 a4 11 20 20 20 20  |een mode....    |
00006370  20 20 20 e7 68 61 6d 20  8c 0d 15 ae a7 20 20 20  |   .ham .....   |
00006380  20 20 20 20 20 f2 73 65  74 28 77 69 64 74 68 25  |     .set(width%|
00006390  2c 68 65 69 67 68 74 25  2c 32 35 36 2c 4d 6f 64  |,height%,256,Mod|
000063a0  65 25 29 3a 63 6f 6c 62  69 74 73 25 3d 31 32 3a  |e%):colbits%=12:|
000063b0  69 6e 66 6f 24 3d 22 48  41 4d 20 28 48 6f 6c 64  |info$="HAM (Hold|
000063c0  20 41 6e 64 20 4d 6f 64  69 66 79 29 22 3a 49 6e  | And Modify)":In|
000063d0  50 61 6c 25 28 30 29 3d  63 6f 6c 62 69 74 73 25  |Pal%(0)=colbits%|
000063e0  3a e3 20 63 25 3d 30 20  b8 20 31 35 3a 68 61 6d  |:. c%=0 . 15:ham|
000063f0  62 61 73 25 21 28 63 25  3c 3c 32 29 3d 49 6e 50  |bas%!(c%<<2)=InP|
00006400  61 6c 25 28 63 25 2b 31  29 3a ed 3a f2 76 61 72  |al%(c%+1):.:.var|
00006410  28 22 6d 61 70 31 22 2c  68 61 6d 62 61 73 25 29  |("map1",hambas%)|
00006420  0d 15 b8 2a 20 20 20 20  20 20 20 20 4d 6f 64 65  |...*        Mode|
00006430  25 3d a4 6d 6f 64 65 28  33 32 30 2c 73 5f 68 65  |%=.mode(320,s_he|
00006440  69 67 68 74 25 2c 32 35  36 29 0d 15 c2 39 20 20  |ight%,256)...9  |
00006450  20 20 20 20 20 20 e7 a4  61 6c 6c 6f 63 61 74 65  |      ..allocate|
00006460  5f 73 74 64 28 77 69 64  74 68 25 2c 77 69 64 74  |_std(width%,widt|
00006470  68 25 2a 34 2c 30 2c 77  69 64 74 68 25 29 20 8b  |h%*4,0,width%) .|
00006480  20 3d a3 0d 15 cc 6f 20  20 20 20 20 20 20 cc 20  | =....o       . |
00006490  63 6f 6c 6f 75 72 73 25  3d 32 5e 70 6c 61 6e 65  |colours%=2^plane|
000064a0  73 25 3a f2 73 65 74 28  77 69 64 74 68 25 2c 68  |s%:.set(width%,h|
000064b0  65 69 67 68 74 25 2c 63  6f 6c 6f 75 72 73 25 2c  |eight%,colours%,|
000064c0  4d 6f 64 65 25 29 3a 63  6f 6c 62 69 74 73 25 3d  |Mode%):colbits%=|
000064d0  70 6c 61 6e 65 73 25 3a  49 6e 50 61 6c 25 28 30  |planes%:InPal%(0|
000064e0  29 3d 70 6c 61 6e 65 73  25 3a 69 6e 66 6f 24 3d  |)=planes%:info$=|
000064f0  22 22 0d 15 d6 78 20 20  20 20 20 20 20 20 e7 68  |""...x        .h|
00006500  61 6c 66 62 72 69 67 68  74 20 8c 20 69 6e 66 6f  |alfbright . info|
00006510  24 3d 22 48 61 6c 66 2d  62 72 69 67 68 74 22 3a  |$="Half-bright":|
00006520  68 61 6c 66 25 3d 63 6f  6c 6f 75 72 73 25 81 32  |half%=colours%.2|
00006530  3a e3 20 63 25 3d 31 20  b8 20 68 61 6c 66 25 3a  |:. c%=1 . half%:|
00006540  49 6e 50 61 6c 25 28 63  25 2b 68 61 6c 66 25 29  |InPal%(c%+half%)|
00006550  3d 28 49 6e 50 61 6c 25  28 63 25 29 80 26 45 30  |=(InPal%(c%).&E0|
00006560  45 30 45 30 29 3e 3e 31  3a ed 0d 15 e0 32 20 20  |E0E0)>>1:....2  |
00006570  20 20 20 20 20 20 e7 a4  61 6c 6c 6f 63 61 74 65  |      ..allocate|
00006580  5f 73 74 64 28 77 69 64  74 68 25 2c 77 69 64 74  |_std(width%,widt|
00006590  68 25 2c 30 2c 30 29 20  8b 20 3d a3 0d 15 ea 0c  |h%,0,0) . =.....|
000065a0  20 20 20 20 20 20 20 cd  0d 15 f4 1e 20 20 20 20  |       .....    |
000065b0  20 20 20 e7 a4 6e 65 77  5f 69 6d 61 67 65 28 30  |   ..new_image(0|
000065c0  29 20 8b 20 3d a3 0d 15  fe 38 20 20 20 20 20 20  |) . =....8      |
000065d0  20 e7 63 6f 6d 70 72 65  73 73 65 64 20 8c 20 63  | .compressed . c|
000065e0  6f 6d 70 72 24 3d 22 52  75 6e 20 6c 65 6e 67 74  |ompr$="Run lengt|
000065f0  68 22 20 8b 20 63 6f 6d  70 72 24 3d 22 22 0d 16  |h" . compr$=""..|
00006600  08 26 20 20 20 20 20 20  20 e7 63 6f 6c 62 69 74  |.&       .colbit|
00006610  73 25 3e 38 20 8c 20 63  69 25 3d 32 20 8b 20 63  |s%>8 . ci%=2 . c|
00006620  69 25 3d 30 0d 16 12 7e  20 20 20 20 20 20 20 f2  |i%=0...~       .|
00006630  69 6d 61 67 65 5f 69 6e  66 6f 28 22 41 6d 69 67  |image_info("Amig|
00006640  61 20 49 46 46 22 2c 77  69 64 74 68 25 2c 68 65  |a IFF",width%,he|
00006650  69 67 68 74 25 2c 63 69  25 2c 63 6f 6c 62 69 74  |ight%,ci%,colbit|
00006660  73 25 2c 4d 6f 64 65 25  2c 63 6f 6d 70 72 24 2c  |s%,Mode%,compr$,|
00006670  69 6e 66 6f 24 2c 46 6c  65 6e 25 2d a4 69 70 74  |info$,Flen%-.ipt|
00006680  72 28 46 31 25 29 2c 28  77 69 64 74 68 25 2a 68  |r(F1%),(width%*h|
00006690  65 69 67 68 74 25 2a 70  6c 61 6e 65 73 25 29 81  |eight%*planes%).|
000066a0  38 29 0d 16 1c 31 20 20  20 20 20 20 20 e7 68 61  |8)...1       .ha|
000066b0  6d 20 8c 20 f2 76 61 72  28 22 73 63 74 79 22 2c  |m . .var("scty",|
000066c0  31 29 20 8b 20 f2 76 61  72 28 22 73 63 74 79 22  |1) . .var("scty"|
000066d0  2c 30 29 0d 16 26 8d 20  20 20 20 20 20 20 f2 76  |,0)..&.       .v|
000066e0  61 72 28 22 69 66 70 31  22 2c a4 69 70 74 72 28  |ar("ifp1",.iptr(|
000066f0  46 31 25 29 29 3a f2 76  61 72 28 22 70 6c 61 6e  |F1%)):.var("plan|
00006700  22 2c 70 6c 61 6e 65 73  25 29 3a f2 76 61 72 28  |",planes%):.var(|
00006710  22 69 6d 67 78 22 2c 77  69 64 74 68 25 29 3a f2  |"imgx",width%):.|
00006720  76 61 72 28 22 69 6d 67  79 22 2c 68 65 69 67 68  |var("imgy",heigh|
00006730  74 25 29 3a f2 76 61 72  28 22 63 6f 6d 70 22 2c  |t%):.var("comp",|
00006740  63 6f 6d 70 72 65 73 73  65 64 29 3a e7 a4 75 6e  |compressed):..un|
00006750  70 61 63 6b 28 22 49 46  46 22 29 20 8b 20 3d a3  |pack("IFF") . =.|
00006760  0d 16 30 05 cb 0d 16 3a  47 e7 68 65 61 64 24 3c  |..0....:G.head$<|
00006770  3e 22 42 4f 44 59 22 20  8c 20 f2 69 73 6b 69 70  |>"BODY" . .iskip|
00006780  28 46 31 25 2c 68 6c 65  6e 25 2d 28 a4 69 70 74  |(F1%,hlen%-(.ipt|
00006790  72 28 46 31 25 29 2d 73  74 61 72 74 70 74 72 25  |r(F1%)-startptr%|
000067a0  29 29 3a f4 20 54 6f 20  6e 65 78 74 0d 16 44 0a  |)):. To next..D.|
000067b0  fd 20 62 6f 64 79 0d 16  4e 06 3d b9 0d 16 58 05  |. body..N.=...X.|
000067c0  20 0d 16 62 0d dd a4 70  69 63 5f 47 49 46 0d 16  | ..b...pic_GIF..|
000067d0  6c 33 f4 20 4d 61 6b 65  73 20 47 49 46 20 28 47  |l3. Makes GIF (G|
000067e0  72 61 70 68 69 63 73 20  49 6e 74 65 72 63 68 61  |raphics Intercha|
000067f0  6e 67 65 20 46 6f 72 6d  61 74 29 20 69 6d 61 67  |nge Format) imag|
00006800  65 0d 16 76 26 ea 20 67  5f 49 6e 50 61 6c 25 28  |e..v&. g_InPal%(|
00006810  29 2c 50 69 63 5f 70 74  72 25 28 29 2c 50 69 63  |),Pic_ptr%(),Pic|
00006820  5f 6c 65 6e 25 28 29 0d  16 80 2f de 20 67 5f 49  |_len%().../. g_I|
00006830  6e 50 61 6c 25 28 32 35  36 29 2c 50 69 63 5f 70  |nPal%(256),Pic_p|
00006840  74 72 25 28 32 35 36 29  2c 50 69 63 5f 6c 65 6e  |tr%(256),Pic_len|
00006850  25 28 32 35 36 29 0d 16  8a 33 73 69 67 6e 61 74  |%(256)...3signat|
00006860  75 72 65 24 3d a4 69 73  74 72 69 6e 67 28 46 31  |ure$=.istring(F1|
00006870  25 2c 36 29 3a f4 20 52  65 61 64 20 47 49 46 20  |%,6):. Read GIF |
00006880  73 69 67 6e 61 74 75 72  65 0d 16 94 58 e7 c0 73  |signature...X..s|
00006890  69 67 6e 61 74 75 72 65  24 2c 33 29 3c 3e 22 47  |ignature$,3)<>"G|
000068a0  49 46 22 20 8c 20 f2 65  72 72 6f 72 28 2d 31 2c  |IF" . .error(-1,|
000068b0  22 54 68 69 73 20 73 63  72 65 65 6e 20 66 69 6c  |"This screen fil|
000068c0  65 20 69 73 20 6e 6f 74  20 61 20 47 49 46 20 73  |e is not a GIF s|
000068d0  63 72 65 65 6e 20 66 69  6c 65 20 21 22 29 3a 3d  |creen file !"):=|
000068e0  a3 0d 16 9e 24 f4 20 52  65 61 64 20 64 61 74 61  |....$. Read data|
000068f0  20 69 6e 20 53 63 72 65  65 6e 20 44 65 73 63 72  | in Screen Descr|
00006900  69 70 74 6f 72 0d 16 a8  2e 72 5f 77 69 64 74 68  |iptor....r_width|
00006910  25 3d a4 69 64 6c 3a 72  5f 68 65 69 67 68 74 25  |%=.idl:r_height%|
00006920  3d a4 69 64 6c 3a f4 20  52 61 73 74 65 72 20 73  |=.idl:. Raster s|
00006930  69 7a 65 0d 16 b2 40 66  6c 61 67 73 25 3d a4 69  |ize...@flags%=.i|
00006940  62 3a 62 61 63 6b 67 72  25 3d a4 69 62 3a f2 69  |b:backgr%=.ib:.i|
00006950  73 6b 69 70 28 46 31 25  2c 31 29 3a f4 20 46 6c  |skip(F1%,1):. Fl|
00006960  61 67 73 20 61 6e 64 20  62 61 63 6b 20 63 6f 6c  |ags and back col|
00006970  6f 75 72 0d 16 bc 3b 67  6c 6f 62 61 6c 3d 28 28  |our...;global=((|
00006980  66 6c 61 67 73 25 80 26  38 30 29 3e 30 29 3a f4  |flags%.&80)>0):.|
00006990  20 47 6c 6f 62 61 6c 20  63 6f 6c 6f 75 72 20 6d  | Global colour m|
000069a0  61 70 20 66 6f 6c 6c 6f  77 69 6e 67 20 3f 0d 16  |ap following ?..|
000069b0  c6 33 67 5f 70 69 78 62  69 74 73 25 3d 28 66 6c  |.3g_pixbits%=(fl|
000069c0  61 67 73 25 80 37 29 2b  31 3a f4 20 47 6c 6f 62  |ags%.7)+1:. Glob|
000069d0  61 6c 20 62 69 74 73 20  70 65 72 20 70 69 78 65  |al bits per pixe|
000069e0  6c 0d 16 d0 3a 63 6f 6c  62 69 74 73 25 3d 28 28  |l...:colbits%=((|
000069f0  66 6c 61 67 73 25 3e 3e  34 29 80 37 29 2b 31 3a  |flags%>>4).7)+1:|
00006a00  f4 20 42 69 74 73 20 6f  66 20 63 6f 6c 6f 75 72  |. Bits of colour|
00006a10  20 72 65 73 6f 6c 75 74  69 6f 6e 0d 16 da 0d e7  | resolution.....|
00006a20  67 6c 6f 62 61 6c 20 8c  0d 16 e4 1d 20 f4 20 52  |global ..... . R|
00006a30  65 61 64 20 47 6c 6f 62  61 6c 20 43 6f 6c 6f 75  |ead Global Colou|
00006a40  72 20 4d 61 70 0d 16 ee  34 20 f2 72 65 61 64 32  |r Map...4 .read2|
00006a50  34 70 61 6c 28 46 31 25  2c 67 5f 49 6e 50 61 6c  |4pal(F1%,g_InPal|
00006a60  25 28 29 2c 32 5e 67 5f  70 69 78 62 69 74 73 25  |%(),2^g_pixbits%|
00006a70  2c 30 2c 31 2c 32 2c 33  29 0d 16 f8 2d 20 67 5f  |,0,1,2,3)...- g_|
00006a80  49 6e 50 61 6c 25 28 30  29 3d 67 5f 70 69 78 62  |InPal%(0)=g_pixb|
00006a90  69 74 73 25 3a f4 20 50  61 6c 65 74 74 65 20 65  |its%:. Palette e|
00006aa0  6e 74 72 69 65 73 0d 17  02 25 cc 20 49 6e 50 61  |ntries...%. InPa|
00006ab0  6c 25 28 30 29 3d 2d 31  3a f4 20 4e 6f 20 70 61  |l%(0)=-1:. No pa|
00006ac0  6c 65 74 74 65 20 66 6f  75 6e 64 0d 17 0c 05 cd  |lette found.....|
00006ad0  0d 17 16 29 f4 20 53 63  61 6e 20 64 61 74 61 20  |...). Scan data |
00006ae0  66 6f 72 20 70 69 63 74  75 72 65 73 2c 20 6d 61  |for pictures, ma|
00006af0  6b 65 20 61 20 6c 69 73  74 0d 17 20 10 70 69 63  |ke a list.. .pic|
00006b00  74 75 72 65 25 3d 30 3a  f5 0d 17 2a 3f f2 73 6b  |ture%=0:...*?.sk|
00006b10  69 70 5f 47 49 46 5f 65  78 74 65 6e 73 69 6f 6e  |ip_GIF_extension|
00006b20  3a f4 20 53 6b 69 70 20  65 78 74 65 6e 73 69 6f  |:. Skip extensio|
00006b30  6e 20 62 6c 6f 63 6b 73  20 70 72 65 63 65 64 69  |n blocks precedi|
00006b40  6e 67 20 49 6d 61 67 65  0d 17 34 26 f4 20 53 65  |ng Image..4&. Se|
00006b50  61 72 63 68 20 66 6f 72  20 6e 65 78 74 20 49 6d  |arch for next Im|
00006b60  61 67 65 20 44 65 73 63  72 69 70 74 6f 72 0d 17  |age Descriptor..|
00006b70  3e 45 f5 20 5f 25 3d a4  69 62 3a 69 6d 61 67 65  |>E. _%=.ib:image|
00006b80  3d 28 5f 25 3d 97 22 2c  22 29 3a 65 6e 64 3d 28  |=(_%=.","):end=(|
00006b90  5f 25 3d 97 22 3b 22 29  3a fd 20 69 6d 61 67 65  |_%=.";"):. image|
00006ba0  20 84 20 65 6e 64 20 84  20 a4 69 65 6f 66 28 46  | . end . .ieof(F|
00006bb0  31 25 29 0d 17 48 7e e7  ac 69 6d 61 67 65 20 8c  |1%)..H~..image .|
00006bc0  20 e7 ac 65 6e 64 20 8c  20 f2 65 72 72 6f 72 28  | ..end . .error(|
00006bd0  2d 31 2c 22 57 61 72 6e  69 6e 67 20 21 20 47 49  |-1,"Warning ! GI|
00006be0  46 20 66 69 6c 65 20 69  73 20 6e 6f 74 20 70 72  |F file is not pr|
00006bf0  6f 70 65 72 6c 79 20 74  65 72 6d 69 6e 61 74 65  |operly terminate|
00006c00  64 20 21 22 29 3a 65 6e  64 3d b9 3a f2 68 6f 75  |d !"):end=.:.hou|
00006c10  72 5f 6f 66 66 3a f2 68  6f 75 72 5f 6f 6e 3a f4  |r_off:.hour_on:.|
00006c20  20 52 65 61 64 20 62 65  79 6f 6e 64 20 66 69 6c  | Read beyond fil|
00006c30  65 0d 17 52 0c e7 69 6d  61 67 65 20 8c 0d 17 5c  |e..R..image ...\|
00006c40  22 20 f4 20 52 65 67 69  73 74 65 72 20 70 69 63  |" . Register pic|
00006c50  74 75 72 65 27 73 20 70  6f 73 69 74 69 6f 6e 0d  |ture's position.|
00006c60  17 66 30 20 70 69 63 74  75 72 65 25 2b 3d 31 3a  |.f0 picture%+=1:|
00006c70  50 69 63 5f 70 74 72 25  28 70 69 63 74 75 72 65  |Pic_ptr%(picture|
00006c80  25 29 3d a4 69 70 74 72  28 46 31 25 29 2d 31 0d  |%)=.iptr(F1%)-1.|
00006c90  17 70 6b 20 f2 69 73 6b  69 70 28 46 31 25 2c 38  |.pk .iskip(F1%,8|
00006ca0  29 3a 5f 25 3d a4 69 62  3a e7 28 5f 25 80 26 38  |):_%=.ib:.(_%.&8|
00006cb0  30 29 3e 30 20 8c 20 f2  69 73 6b 69 70 28 46 31  |0)>0 . .iskip(F1|
00006cc0  25 2c 33 2a 32 5e 28 28  5f 25 80 37 29 2b 31 29  |%,3*2^((_%.7)+1)|
00006cd0  29 3a f4 20 49 66 20 74  68 65 72 65 27 73 20 61  |):. If there's a|
00006ce0  20 6c 6f 63 61 6c 20 63  6f 6c 6f 75 72 20 6d 61  | local colour ma|
00006cf0  70 2c 20 73 6b 69 70 20  69 74 0d 17 7a 0f 20 e7  |p, skip it..z. .|
00006d00  47 49 46 53 63 61 6e 20  8c 0d 17 84 30 20 20 f4  |GIFScan ....0  .|
00006d10  20 44 65 74 65 72 6d 69  6e 65 20 70 69 63 74 75  | Determine pictu|
00006d20  72 65 20 64 61 74 61 20  6c 65 6e 67 74 68 2c 20  |re data length, |
00006d30  73 6b 69 70 20 64 61 74  61 0d 17 8e 32 20 20 f2  |skip data...2  .|
00006d40  69 73 6b 69 70 28 46 31  25 2c 31 29 3a f5 20 63  |iskip(F1%,1):. c|
00006d50  25 3d a4 69 62 3a f2 69  73 6b 69 70 28 46 31 25  |%=.ib:.iskip(F1%|
00006d60  2c 63 25 29 3a fd 20 63  25 3d 30 0d 17 98 36 20  |,c%):. c%=0...6 |
00006d70  20 50 69 63 5f 6c 65 6e  25 28 70 69 63 74 75 72  | Pic_len%(pictur|
00006d80  65 25 29 3d a4 69 70 74  72 28 46 31 25 29 2d 50  |e%)=.iptr(F1%)-P|
00006d90  69 63 5f 70 74 72 25 28  70 69 63 74 75 72 65 25  |ic_ptr%(picture%|
00006da0  29 0d 17 a2 3d 20 cc 20  50 69 63 5f 6c 65 6e 25  |)...= . Pic_len%|
00006db0  28 70 69 63 74 75 72 65  25 29 3d a4 69 6c 65 6e  |(picture%)=.ilen|
00006dc0  28 46 31 25 29 2d 50 69  63 5f 70 74 72 25 28 70  |(F1%)-Pic_ptr%(p|
00006dd0  69 63 74 75 72 65 25 29  3a 65 6e 64 3d b9 0d 17  |icture%):end=...|
00006de0  ac 06 20 cd 0d 17 b6 05  cd 0d 17 c0 09 fd 20 65  |.. ........... e|
00006df0  6e 64 0d 17 ca 31 70 69  63 74 75 72 65 73 25 3d  |nd...1pictures%=|
00006e00  70 69 63 74 75 72 65 25  3a f4 20 4e 75 6d 62 65  |picture%:. Numbe|
00006e10  72 20 6f 66 20 70 69 63  74 75 72 65 73 20 66 6f  |r of pictures fo|
00006e20  75 6e 64 0d 17 d4 4e e7  70 69 63 74 75 72 65 73  |und...N.pictures|
00006e30  25 3e 30 20 8b 20 f2 65  72 72 6f 72 28 2d 31 2c  |%>0 . .error(-1,|
00006e40  22 49 20 63 61 6e 6e 6f  74 20 66 69 6e 64 20 61  |"I cannot find a|
00006e50  6e 79 20 69 6d 61 67 65  73 20 69 6e 20 74 68 69  |ny images in thi|
00006e60  73 20 47 49 46 20 66 69  6c 65 20 21 22 29 3a 3d  |s GIF file !"):=|
00006e70  a3 0d 17 de 0e e7 47 49  46 53 63 61 6e 20 8c 0d  |......GIFScan ..|
00006e80  17 e8 be 20 e7 28 49 6d  61 67 65 4e 72 25 3e 30  |... .(ImageNr%>0|
00006e90  29 20 80 20 28 49 6d 61  67 65 4e 72 25 3c 3d 70  |) . (ImageNr%<=p|
00006ea0  69 63 74 75 72 65 73 25  29 20 8c 20 70 69 63 74  |ictures%) . pict|
00006eb0  75 72 65 25 3d 49 6d 61  67 65 4e 72 25 20 8b 20  |ure%=ImageNr% . |
00006ec0  f2 65 72 72 6f 72 28 2d  31 2c 22 54 68 69 73 20  |.error(-1,"This |
00006ed0  47 49 46 20 66 69 6c 65  20 63 6f 6e 74 61 69 6e  |GIF file contain|
00006ee0  73 20 22 2b c3 28 70 69  63 74 75 72 65 73 25 29  |s "+.(pictures%)|
00006ef0  2b 22 20 69 6d 61 67 65  73 2e 20 53 65 6c 65 63  |+" images. Selec|
00006f00  74 20 27 31 27 2d 27 22  2b c3 28 70 69 63 74 75  |t '1'-'"+.(pictu|
00006f10  72 65 73 25 29 2b 22 27  20 69 6e 20 74 68 65 20  |res%)+"' in the |
00006f20  27 49 6d 61 67 65 20 6e  75 6d 62 65 72 27 20 73  |'Image number' s|
00006f30  75 62 6d 65 6e 75 20 21  22 29 3a 3d a3 0d 17 f2  |ubmenu !"):=....|
00006f40  10 cc 20 70 69 63 74 75  72 65 25 3d 31 0d 17 fc  |.. picture%=1...|
00006f50  05 cd 0d 18 06 4b f2 69  70 74 72 28 46 31 25 2c  |.....K.iptr(F1%,|
00006f60  50 69 63 5f 70 74 72 25  28 70 69 63 74 75 72 65  |Pic_ptr%(picture|
00006f70  25 29 2b 31 29 3a 6c 65  6e 25 3d 50 69 63 5f 6c  |%)+1):len%=Pic_l|
00006f80  65 6e 25 28 70 69 63 74  75 72 65 25 29 3a f4 20  |en%(picture%):. |
00006f90  50 69 63 20 70 6f 73 20  26 20 6c 65 6e 0d 18 10  |Pic pos & len...|
00006fa0  20 f4 20 52 65 61 64 20  49 6d 61 67 65 20 44 65  | . Read Image De|
00006fb0  73 63 72 69 70 74 6f 72  20 64 61 74 61 0d 18 1a  |scriptor data...|
00006fc0  30 69 5f 6c 65 66 74 25  3d a4 69 64 6c 3a 69 5f  |0i_left%=.idl:i_|
00006fd0  74 6f 70 25 3d a4 69 64  6c 3a f4 20 50 6f 73 69  |top%=.idl:. Posi|
00006fe0  74 69 6f 6e 20 69 6e 20  66 72 61 6d 65 0d 18 24  |tion in frame..$|
00006ff0  3c 69 5f 77 69 64 74 68  25 3d a4 69 64 6c 3a 69  |<i_width%=.idl:i|
00007000  5f 68 65 69 67 68 74 25  3d a4 69 64 6c 3a 66 6c  |_height%=.idl:fl|
00007010  61 67 73 25 3d a4 69 62  3a f4 20 53 69 7a 65 20  |ags%=.ib:. Size |
00007020  61 6e 64 20 66 6c 61 67  73 0d 18 2e 37 6c 6f 63  |and flags...7loc|
00007030  61 6c 3d 28 66 6c 61 67  73 25 80 26 38 30 29 3e  |al=(flags%.&80)>|
00007040  30 3a f4 20 4c 6f 63 61  6c 20 63 6f 6c 6f 75 72  |0:. Local colour|
00007050  20 6d 61 70 20 66 6f 6c  6c 6f 77 69 6e 67 20 3f  | map following ?|
00007060  0d 18 38 3c 69 62 69 74  3d 28 66 6c 61 67 73 25  |..8<ibit=(flags%|
00007070  80 26 34 30 29 3e 30 3a  f4 20 49 6d 61 67 65 20  |.&40)>0:. Image |
00007080  73 74 6f 72 65 64 20 69  6e 20 69 6e 74 65 72 6c  |stored in interl|
00007090  61 63 65 64 20 6f 72 64  65 72 20 3f 0d 18 42 32  |aced order ?..B2|
000070a0  6c 5f 70 69 78 62 69 74  73 25 3d 28 66 6c 61 67  |l_pixbits%=(flag|
000070b0  73 25 80 37 29 2b 31 3a  f4 20 4c 6f 63 61 6c 20  |s%.7)+1:. Local |
000070c0  62 69 74 73 20 70 65 72  20 70 69 78 65 6c 0d 18  |bits per pixel..|
000070d0  4c 0c e7 6c 6f 63 61 6c  20 8c 0d 18 56 40 20 70  |L..local ...V@ p|
000070e0  69 78 62 69 74 73 25 3d  6c 5f 70 69 78 62 69 74  |ixbits%=l_pixbit|
000070f0  73 25 3a f4 20 52 65 61  64 20 61 6e 64 20 75 73  |s%:. Read and us|
00007100  65 20 4c 6f 63 61 6c 20  43 6f 6c 6f 75 72 20 4d  |e Local Colour M|
00007110  61 70 20 70 61 6c 65 74  74 65 0d 18 60 32 20 f2  |ap palette..`2 .|
00007120  72 65 61 64 32 34 70 61  6c 28 46 31 25 2c 49 6e  |read24pal(F1%,In|
00007130  50 61 6c 25 28 29 2c 32  5e 6c 5f 70 69 78 62 69  |Pal%(),2^l_pixbi|
00007140  74 73 25 2c 30 2c 31 2c  32 2c 33 29 0d 18 6a 2b  |ts%,0,1,2,3)..j+|
00007150  20 49 6e 50 61 6c 25 28  30 29 3d 6c 5f 70 69 78  | InPal%(0)=l_pix|
00007160  62 69 74 73 25 3a f4 20  50 61 6c 65 74 74 65 20  |bits%:. Palette |
00007170  65 6e 74 72 69 65 73 0d  18 74 3f cc 20 70 69 78  |entries..t?. pix|
00007180  62 69 74 73 25 3d 67 5f  70 69 78 62 69 74 73 25  |bits%=g_pixbits%|
00007190  3a 49 6e 50 61 6c 25 28  29 3d 67 5f 49 6e 50 61  |:InPal%()=g_InPa|
000071a0  6c 25 28 29 3a f4 20 55  73 65 20 47 6c 6f 62 61  |l%():. Use Globa|
000071b0  6c 20 64 61 74 61 0d 18  7e 05 cd 0d 18 88 4e e7  |l data..~.....N.|
000071c0  49 6e 50 61 6c 25 28 30  29 3d 2d 31 20 8c 20 f2  |InPal%(0)=-1 . .|
000071d0  65 72 72 6f 72 28 2d 31  2c 22 49 20 63 61 6e 6e  |error(-1,"I cann|
000071e0  6f 74 20 66 69 6e 64 20  61 20 70 61 6c 65 74 74  |ot find a palett|
000071f0  65 20 69 6e 20 74 68 69  73 20 47 49 46 20 66 69  |e in this GIF fi|
00007200  6c 65 20 21 22 29 3a 3d  a3 0d 18 92 2b 63 6f 6c  |le !"):=....+col|
00007210  6f 75 72 73 25 3d 32 5e  70 69 78 62 69 74 73 25  |ours%=2^pixbits%|
00007220  3a f4 20 4e 75 6d 62 65  72 20 6f 66 20 63 6f 6c  |:. Number of col|
00007230  6f 75 72 73 0d 18 9c 3d  77 69 64 74 68 25 3d 69  |ours...=width%=i|
00007240  5f 77 69 64 74 68 25 3a  68 65 69 67 68 74 25 3d  |_width%:height%=|
00007250  69 5f 68 65 69 67 68 74  25 3a f4 20 54 72 75 65  |i_height%:. True|
00007260  20 77 69 64 74 68 20 61  6e 64 20 68 65 69 67 68  | width and heigh|
00007270  74 0d 18 a6 27 f2 73 65  74 28 77 69 64 74 68 25  |t...'.set(width%|
00007280  2c 68 65 69 67 68 74 25  2c 63 6f 6c 6f 75 72 73  |,height%,colours|
00007290  25 2c 4d 6f 64 65 25 29  0d 18 b0 66 e7 a4 61 6c  |%,Mode%)...f..al|
000072a0  6c 6f 63 61 74 65 28 42  5f 6c 7a 77 74 61 62 6c  |locate(B_lzwtabl|
000072b0  65 25 2c 33 32 2a 31 30  32 34 29 20 8b 20 f2 65  |e%,32*1024) . .e|
000072c0  72 72 6f 72 28 2d 31 2c  22 49 20 68 61 76 65 20  |rror(-1,"I have |
000072d0  6e 6f 20 72 6f 6f 6d 20  66 6f 72 20 74 68 65 20  |no room for the |
000072e0  4c 5a 57 20 64 65 63 6f  6d 70 72 65 73 73 69 6f  |LZW decompressio|
000072f0  6e 20 74 61 62 6c 65 20  21 22 29 3a 3d a3 0d 18  |n table !"):=...|
00007300  ba 2a e7 a4 61 6c 6c 6f  63 61 74 65 5f 73 74 64  |.*..allocate_std|
00007310  28 77 69 64 74 68 25 2c  30 2c 77 69 64 74 68 25  |(width%,0,width%|
00007320  2c 30 29 20 8b 20 3d a3  0d 18 c4 3b f4 20 52 6f  |,0) . =....;. Ro|
00007330  6f 6d 20 6e 65 65 64 65  64 20 66 6f 72 20 64 65  |om needed for de|
00007340  63 6f 6d 70 72 65 73 73  69 6f 6e 20 64 61 74 61  |compression data|
00007350  20 61 6e 64 20 64 65 2d  69 6e 74 65 72 6c 61 63  | and de-interlac|
00007360  69 6e 67 0d 18 ce 64 e7  70 69 78 62 69 74 73 25  |ing...d.pixbits%|
00007370  3c 3d 32 20 8c 20 72 62  69 74 73 25 3d 70 69 78  |<=2 . rbits%=pix|
00007380  62 69 74 73 25 20 8b 20  e7 70 69 78 62 69 74 73  |bits% . .pixbits|
00007390  25 3c 3d 34 20 8c 20 72  62 69 74 73 25 3d 34 20  |%<=4 . rbits%=4 |
000073a0  8b 20 72 62 69 74 73 25  3d 38 3a f4 20 52 6f 75  |. rbits%=8:. Rou|
000073b0  6e 64 20 75 70 20 62 70  70 20 74 6f 20 73 70 72  |nd up bpp to spr|
000073c0  69 74 65 20 62 70 70 0d  18 d8 40 72 6f 6f 6d 25  |ite bpp...@room%|
000073d0  3d 28 28 28 77 69 64 74  68 25 2a 72 62 69 74 73  |=(((width%*rbits|
000073e0  25 2b 33 31 29 3e 3e 35  29 3c 3c 32 29 2a 28 68  |%+31)>>5)<<2)*(h|
000073f0  65 69 67 68 74 25 2b 31  29 3a f4 20 52 6f 6f 6d  |eight%+1):. Room|
00007400  20 6e 65 65 64 65 64 0d  18 e2 1b e7 a4 6e 65 77  | needed......new|
00007410  5f 69 6d 61 67 65 28 72  6f 6f 6d 25 29 20 8b 20  |_image(room%) . |
00007420  3d a3 0d 18 ec 27 e7 47  49 46 53 63 61 6e 20 8c  |=....'.GIFScan .|
00007430  20 6e 70 24 3d c3 70 69  63 74 75 72 65 73 25 20  | np$=.pictures% |
00007440  8b 20 6e 70 24 3d 22 3f  22 0d 18 f6 8d f2 69 6d  |. np$="?".....im|
00007450  61 67 65 5f 69 6e 66 6f  28 73 69 67 6e 61 74 75  |age_info(signatu|
00007460  72 65 24 2c 77 69 64 74  68 25 2c 68 65 69 67 68  |re$,width%,heigh|
00007470  74 25 2c 30 2c 70 69 78  62 69 74 73 25 2c 4d 6f  |t%,0,pixbits%,Mo|
00007480  64 65 25 2c 22 4c 5a 57  22 2c 6e 70 24 2b 22 20  |de%,"LZW",np$+" |
00007490  70 69 63 73 20 28 74 68  69 73 20 69 73 20 22 2b  |pics (this is "+|
000074a0  a4 74 69 6d 65 73 28 70  69 63 74 75 72 65 25 29  |.times(picture%)|
000074b0  2b 22 29 22 2c 6c 65 6e  25 2c 28 68 65 69 67 68  |+")",len%,(heigh|
000074c0  74 25 2a 77 69 64 74 68  25 2a 70 69 78 62 69 74  |t%*width%*pixbit|
000074d0  73 25 29 81 38 29 0d 19  00 2b e7 69 62 69 74 20  |s%).8)...+.ibit |
000074e0  8c 20 f2 76 61 72 28 22  6c 61 63 65 22 2c 31 29  |. .var("lace",1)|
000074f0  20 8b 20 f2 76 61 72 28  22 6c 61 63 65 22 2c 30  | . .var("lace",0|
00007500  29 0d 19 0a 59 f2 76 61  72 28 22 69 66 70 31 22  |)...Y.var("ifp1"|
00007510  2c a4 69 70 74 72 28 46  31 25 29 29 3a f2 76 61  |,.iptr(F1%)):.va|
00007520  72 28 22 69 6d 67 78 22  2c 77 69 64 74 68 25 29  |r("imgx",width%)|
00007530  3a f2 76 61 72 28 22 69  6d 67 79 22 2c 68 65 69  |:.var("imgy",hei|
00007540  67 68 74 25 29 3a e7 a4  75 6e 70 61 63 6b 28 22  |ght%):..unpack("|
00007550  47 49 46 22 29 20 8b 20  3d a3 0d 19 14 06 3d b9  |GIF") . =.....=.|
00007560  0d 19 1e 05 20 0d 19 28  18 dd f2 73 6b 69 70 5f  |.... ..(...skip_|
00007570  47 49 46 5f 65 78 74 65  6e 73 69 6f 6e 0d 19 32  |GIF_extension..2|
00007580  3f f4 20 53 6b 69 70 73  20 61 20 47 49 46 20 45  |?. Skips a GIF E|
00007590  78 74 65 6e 73 69 6f 6e  20 42 6c 6f 63 6b 20 69  |xtension Block i|
000075a0  66 20 70 72 65 73 65 6e  74 20 61 74 20 63 75 72  |f present at cur|
000075b0  72 65 6e 74 20 70 6f 69  6e 74 65 72 0d 19 3c 08  |rent pointer..<.|
000075c0  ea 20 5f 25 0d 19 46 11  e7 28 a4 69 62 29 3d 97  |. _%..F..(.ib)=.|
000075d0  22 21 22 20 8c 0d 19 50  27 20 f2 69 73 6b 69 70  |"!" ...P' .iskip|
000075e0  28 46 31 25 2c 31 29 3a  f4 20 53 6b 69 70 20 66  |(F1%,1):. Skip f|
000075f0  75 6e 63 74 69 6f 6e 20  63 6f 64 65 0d 19 5a 3b  |unction code..Z;|
00007600  20 f5 20 5f 25 3d a4 69  62 3a f2 69 73 6b 69 70  | . _%=.ib:.iskip|
00007610  28 46 31 25 2c 5f 25 29  3a fd 20 5f 25 3d 30 3a  |(F1%,_%):. _%=0:|
00007620  f4 20 53 6b 69 70 20 64  61 74 61 20 62 79 74 65  |. Skip data byte|
00007630  20 62 6c 6f 63 6b 73 0d  19 64 14 cc 20 f2 69 73  | blocks..d.. .is|
00007640  6b 69 70 28 46 31 25 2c  2d 31 29 0d 19 6e 05 cd  |kip(F1%,-1)..n..|
00007650  0d 19 78 05 e1 0d 19 82  05 20 0d 19 8c 0d dd a4  |..x...... ......|
00007660  70 69 63 5f 41 52 43 0d  19 96 23 f4 20 4c 6f 61  |pic_ARC...#. Loa|
00007670  64 73 20 41 72 63 68 69  6d 65 64 65 73 20 73 70  |ds Archimedes sp|
00007680  72 69 74 65 20 69 6d 61  67 65 0d 19 a0 44 70 69  |rite image...Dpi|
00007690  63 74 75 72 65 73 25 3d  a4 69 77 6c 3a 6f 66 69  |ctures%=.iwl:ofi|
000076a0  72 73 74 25 3d a4 69 77  6c 3a f4 20 4e 75 6d 62  |rst%=.iwl:. Numb|
000076b0  65 72 20 6f 66 20 73 70  72 69 74 65 73 2c 20 6f  |er of sprites, o|
000076c0  66 66 73 65 74 20 74 6f  20 66 69 72 73 74 0d 19  |ffset to first..|
000076d0  aa c0 e7 28 49 6d 61 67  65 4e 72 25 3e 30 29 20  |...(ImageNr%>0) |
000076e0  80 20 28 49 6d 61 67 65  4e 72 25 3c 3d 70 69 63  |. (ImageNr%<=pic|
000076f0  74 75 72 65 73 25 29 20  8c 20 70 69 63 74 75 72  |tures%) . pictur|
00007700  65 25 3d 49 6d 61 67 65  4e 72 25 20 8b 20 f2 65  |e%=ImageNr% . .e|
00007710  72 72 6f 72 28 2d 31 2c  22 54 68 69 73 20 73 70  |rror(-1,"This sp|
00007720  72 69 74 65 20 66 69 6c  65 20 63 6f 6e 74 61 69  |rite file contai|
00007730  6e 73 20 22 2b c3 28 70  69 63 74 75 72 65 73 25  |ns "+.(pictures%|
00007740  29 2b 22 20 69 6d 61 67  65 73 2e 20 53 65 6c 65  |)+" images. Sele|
00007750  63 74 20 27 31 27 2d 27  22 2b c3 28 70 69 63 74  |ct '1'-'"+.(pict|
00007760  75 72 65 73 25 29 2b 22  27 20 69 6e 20 74 68 65  |ures%)+"' in the|
00007770  20 27 49 6d 61 67 65 20  6e 75 6d 62 65 72 27 20  | 'Image number' |
00007780  73 75 62 6d 65 6e 75 20  21 22 29 3a 3d a3 0d 19  |submenu !"):=...|
00007790  b4 33 f2 69 73 6b 69 70  28 46 31 25 2c 6f 66 69  |.3.iskip(F1%,ofi|
000077a0  72 73 74 25 2d 38 2d 34  29 3a f4 20 53 74 61 72  |rst%-8-4):. Star|
000077b0  74 20 6f 66 20 66 69 72  73 74 20 73 70 72 69 74  |t of first sprit|
000077c0  65 0d 19 be 3d 73 6b 69  70 25 3d 70 69 63 74 75  |e...=skip%=pictu|
000077d0  72 65 25 2d 31 3a c8 95  20 73 6b 69 70 25 3e 30  |re%-1:.. skip%>0|
000077e0  3a f2 69 73 6b 69 70 28  46 31 25 2c a4 69 77 6c  |:.iskip(F1%,.iwl|
000077f0  2d 34 29 3a 73 6b 69 70  25 2d 3d 31 3a ce 0d 19  |-4):skip%-=1:...|
00007800  c8 4b 73 74 61 72 74 25  3d a4 69 70 74 72 28 46  |.Kstart%=.iptr(F|
00007810  31 25 29 3a f2 69 73 6b  69 70 28 46 31 25 2c 31  |1%):.iskip(F1%,1|
00007820  36 29 3a f4 20 52 65 6d  65 6d 62 65 72 20 73 74  |6):. Remember st|
00007830  61 72 74 2c 20 73 6b 69  70 20 6f 66 66 73 65 74  |art, skip offset|
00007840  20 61 6e 64 20 6e 61 6d  65 0d 19 d2 42 77 6f 72  | and name...Bwor|
00007850  64 73 25 3d a4 69 77 6c  2b 31 3a 68 65 69 67 68  |ds%=.iwl+1:heigh|
00007860  74 25 3d a4 69 77 6c 2b  31 3a f4 20 57 69 64 74  |t%=.iwl+1:. Widt|
00007870  68 20 69 6e 20 77 6f 72  64 73 2c 20 68 65 69 67  |h in words, heig|
00007880  68 74 20 69 6e 20 6c 69  6e 65 73 0d 19 dc 33 62  |ht in lines...3b|
00007890  66 69 72 73 74 25 3d a4  69 77 6c 3a 62 6c 61 73  |first%=.iwl:blas|
000078a0  74 25 3d a4 69 77 6c 3a  f4 20 46 69 72 73 74 2f  |t%=.iwl:. First/|
000078b0  6c 61 73 74 20 62 69 74  73 20 75 73 65 64 0d 19  |last bits used..|
000078c0  e6 44 6f 69 6d 61 67 65  25 3d a4 69 77 6c 3a f2  |.Doimage%=.iwl:.|
000078d0  69 73 6b 69 70 28 46 31  25 2c 34 29 3a 73 70 72  |iskip(F1%,4):spr|
000078e0  4d 6f 64 65 25 3d a4 69  77 6c 3a f4 20 4f 66 66  |Mode%=.iwl:. Off|
000078f0  73 65 74 20 74 6f 20 69  6d 61 67 65 2c 20 6d 6f  |set to image, mo|
00007900  64 65 0d 19 f0 42 63 6f  6c 62 69 74 73 25 3d 32  |de...Bcolbits%=2|
00007910  5e a4 6d 6f 64 65 5f 76  61 72 28 73 70 72 4d 6f  |^.mode_var(sprMo|
00007920  64 65 25 2c 39 29 3a 63  6f 6c 6f 75 72 73 25 3d  |de%,9):colours%=|
00007930  32 5e 63 6f 6c 62 69 74  73 25 3a f4 20 43 6f 6c  |2^colbits%:. Col|
00007940  6f 75 72 73 0d 19 fa 2b  e7 63 6f 6c 62 69 74 73  |ours...+.colbits|
00007950  25 3d 38 20 8c 20 65 6e  74 73 25 3d 36 34 20 8b  |%=8 . ents%=64 .|
00007960  20 65 6e 74 73 25 3d 63  6f 6c 6f 75 72 73 25 0d  | ents%=colours%.|
00007970  1a 04 12 e7 6f 69 6d 61  67 65 25 3c 3d 34 34 20  |....oimage%<=44 |
00007980  8c 0d 1a 0e 39 20 f2 73  74 64 70 61 6c 28 49 6e  |....9 .stdpal(In|
00007990  50 61 6c 25 28 29 2c 63  6f 6c 62 69 74 73 25 29  |Pal%(),colbits%)|
000079a0  3a f4 20 4e 6f 20 70 61  6c 65 74 74 65 2c 20 73  |:. No palette, s|
000079b0  65 74 20 64 65 66 61 75  6c 74 0d 1a 18 4e cc 20  |et default...N. |
000079c0  f2 72 65 61 64 32 34 70  61 6c 28 46 31 25 2c 49  |.read24pal(F1%,I|
000079d0  6e 50 61 6c 25 28 29 2c  65 6e 74 73 25 2c 31 2c  |nPal%(),ents%,1,|
000079e0  32 2c 33 2c 38 29 3a 49  6e 50 61 6c 25 28 30 29  |2,3,8):InPal%(0)|
000079f0  3d 63 6f 6c 62 69 74 73  25 3a f4 20 52 65 61 64  |=colbits%:. Read|
00007a00  20 70 61 6c 65 74 74 65  0d 1a 22 84 20 e7 63 6f  | palette..". .co|
00007a10  6c 62 69 74 73 25 3d 38  20 8c 20 e3 20 63 25 3d  |lbits%=8 . . c%=|
00007a20  31 20 b8 20 65 6e 74 73  25 3a 70 25 3d 49 6e 50  |1 . ents%:p%=InP|
00007a30  61 6c 25 28 63 25 29 3a  49 6e 50 61 6c 25 28 63  |al%(c%):InPal%(c|
00007a40  25 2b 36 34 29 3d 70 25  20 84 20 31 3c 3c 31 35  |%+64)=p% . 1<<15|
00007a50  3a 49 6e 50 61 6c 25 28  63 25 2b 31 32 38 29 3d  |:InPal%(c%+128)=|
00007a60  70 25 20 84 20 31 3c 3c  37 3a 49 6e 50 61 6c 25  |p% . 1<<7:InPal%|
00007a70  28 63 25 2b 31 39 32 29  3d 70 25 20 84 20 31 3c  |(c%+192)=p% . 1<|
00007a80  3c 31 35 20 84 20 31 3c  3c 37 3a ed 0d 1a 2c 05  |<15 . 1<<7:...,.|
00007a90  cd 0d 1a 36 35 77 69 64  74 68 25 3d 28 77 6f 72  |...65width%=(wor|
00007aa0  64 73 25 2a 33 32 2d 62  66 69 72 73 74 25 2d 28  |ds%*32-bfirst%-(|
00007ab0  33 31 2d 62 6c 61 73 74  25 29 29 20 81 20 63 6f  |31-blast%)) . co|
00007ac0  6c 62 69 74 73 25 0d 1a  40 87 e7 a4 61 76 61 69  |lbits%..@...avai|
00007ad0  6c 61 62 6c 65 5f 6d 6f  64 65 28 73 70 72 4d 6f  |lable_mode(sprMo|
00007ae0  64 65 25 29 20 8c 20 4d  6f 64 65 25 3d 73 70 72  |de%) . Mode%=spr|
00007af0  4d 6f 64 65 25 20 8b 20  4d 6f 64 65 25 3d a4 6d  |Mode% . Mode%=.m|
00007b00  6f 64 65 28 77 69 64 74  68 25 2c 68 65 69 67 68  |ode(width%,heigh|
00007b10  74 25 2c 63 6f 6c 6f 75  72 73 25 29 3a f4 20 44  |t%,colours%):. D|
00007b20  65 74 65 72 6d 69 6e 65  20 6f 74 68 65 72 20 6d  |etermine other m|
00007b30  6f 64 65 20 69 66 20 73  70 72 69 74 65 27 73 20  |ode if sprite's |
00007b40  6d 6f 64 65 20 77 6f 6e  27 74 20 64 6f 0d 1a 4a  |mode won't do..J|
00007b50  24 f2 73 65 74 28 77 69  64 74 68 25 2c 68 65 69  |$.set(width%,hei|
00007b60  67 68 74 25 2c 63 6f 6c  6f 75 72 73 25 2c 5f 25  |ght%,colours%,_%|
00007b70  29 0d 1a 54 3e e7 a4 61  6c 6c 6f 63 61 74 65 5f  |)..T>..allocate_|
00007b80  73 74 64 28 77 69 64 74  68 25 2c 28 77 69 64 74  |std(width%,(widt|
00007b90  68 25 2a 63 6f 6c 62 69  74 73 25 2b 37 29 81 38  |h%*colbits%+7).8|
00007ba0  2c 77 69 64 74 68 25 2c  30 29 20 8b 20 3d a3 0d  |,width%,0) . =..|
00007bb0  1a 5e 17 e7 a4 6e 65 77  5f 69 6d 61 67 65 28 30  |.^...new_image(0|
00007bc0  29 20 8b 20 3d a3 0d 1a  68 80 f2 69 6d 61 67 65  |) . =...h..image|
00007bd0  5f 69 6e 66 6f 28 22 41  72 63 68 69 6d 65 64 65  |_info("Archimede|
00007be0  73 20 73 70 72 69 74 65  22 2c 77 69 64 74 68 25  |s sprite",width%|
00007bf0  2c 68 65 69 67 68 74 25  2c 30 2c 63 6f 6c 62 69  |,height%,0,colbi|
00007c00  74 73 25 2c 4d 6f 64 65  25 2c 22 22 2c c3 70 69  |ts%,Mode%,"",.pi|
00007c10  63 74 75 72 65 73 25 2b  22 20 73 70 72 69 74 65  |ctures%+" sprite|
00007c20  73 20 28 74 68 69 73 20  69 73 20 22 2b a4 74 69  |s (this is "+.ti|
00007c30  6d 65 73 28 70 69 63 74  75 72 65 25 29 2b 22 29  |mes(picture%)+")|
00007c40  22 2c 31 2c 31 29 0d 1a  72 86 f2 76 61 72 28 22  |",1,1)..r..var("|
00007c50  69 66 70 31 22 2c 73 74  61 72 74 25 2b 6f 69 6d  |ifp1",start%+oim|
00007c60  61 67 65 25 29 3a f2 76  61 72 28 22 69 6d 67 78  |age%):.var("imgx|
00007c70  22 2c 77 69 64 74 68 25  29 3a f2 76 61 72 28 22  |",width%):.var("|
00007c80  69 6d 67 79 22 2c 68 65  69 67 68 74 25 29 3a f2  |imgy",height%):.|
00007c90  76 61 72 28 22 77 72 64  73 22 2c 77 6f 72 64 73  |var("wrds",words|
00007ca0  25 29 3a f2 76 61 72 28  22 62 66 69 72 22 2c 62  |%):.var("bfir",b|
00007cb0  66 69 72 73 74 25 29 3a  e7 a4 75 6e 70 61 63 6b  |first%):..unpack|
00007cc0  28 22 41 52 43 22 29 20  8b 20 3d a3 0d 1a 7c 06  |("ARC") . =...|.|
00007cd0  3d b9 0d 1a 86 05 20 0d  1a 90 10 dd a4 70 69 63  |=..... ......pic|
00007ce0  5f 50 52 4f 41 52 54 0d  1a 9a 1c f4 20 4d 61 6b  |_PROART..... Mak|
00007cf0  65 73 20 50 72 6f 41 72  74 69 73 61 6e 20 69 6d  |es ProArtisan im|
00007d00  61 67 65 0d 1a a4 2b 77  69 64 74 68 25 3d 36 34  |age...+width%=64|
00007d10  30 3a 68 65 69 67 68 74  25 3d 32 35 36 3a f4 20  |0:height%=256:. |
00007d20  53 65 74 20 72 65 73 6f  6c 75 74 69 6f 6e 0d 1a  |Set resolution..|
00007d30  ae 22 f2 73 65 74 28 77  69 64 74 68 25 2c 68 65  |.".set(width%,he|
00007d40  69 67 68 74 25 2c 32 35  36 2c 4d 6f 64 65 25 29  |ight%,256,Mode%)|
00007d50  0d 1a b8 2f e7 a4 61 6c  6c 6f 63 61 74 65 5f 73  |.../..allocate_s|
00007d60  74 64 28 77 69 64 74 68  25 2c 77 69 64 74 68 25  |td(width%,width%|
00007d70  2c 77 69 64 74 68 25 2c  30 29 20 8b 20 3d a3 0d  |,width%,0) . =..|
00007d80  1a c2 43 72 6f 6f 6d 25  3d 28 77 69 64 74 68 25  |..Croom%=(width%|
00007d90  2a 68 65 69 67 68 74 25  2b 33 29 80 ac 33 3a f4  |*height%+3)..3:.|
00007da0  20 52 6f 6f 6d 20 6e 65  65 64 65 64 20 66 6f 72  | Room needed for|
00007db0  20 75 6e 70 61 63 6b 20  28 63 6f 6c 74 61 62 6c  | unpack (coltabl|
00007dc0  65 29 0d 1a cc 1b e7 a4  6e 65 77 5f 69 6d 61 67  |e)......new_imag|
00007dd0  65 28 72 6f 6f 6d 25 29  20 8b 20 3d a3 0d 1a d6  |e(room%) . =....|
00007de0  43 63 6f 6c 6c 65 6e 25  3d a4 69 77 6c 3a 63 6f  |Ccollen%=.iwl:co|
00007df0  6d 66 6c 61 67 25 3d a4  69 77 6c 3a f4 20 4c 65  |mflag%=.iwl:. Le|
00007e00  6e 67 74 68 20 6f 66 20  63 6f 6c 6f 75 72 20 74  |ngth of colour t|
00007e10  61 62 6c 65 2f 63 6f 6d  70 72 65 73 73 69 6f 6e  |able/compression|
00007e20  0d 1a e0 36 63 6f 6c 74  61 62 6c 65 25 3d 53 70  |...6coltable%=Sp|
00007e30  72 54 6f 70 25 2d 63 6f  6c 6c 65 6e 25 3a f4 20  |rTop%-collen%:. |
00007e40  53 70 61 63 65 20 66 6f  72 20 63 6f 6c 6f 75 72  |Space for colour|
00007e50  20 74 61 62 6c 65 0d 1a  ea 34 f2 69 67 65 74 28  | table...4.iget(|
00007e60  46 31 25 2c 63 6f 6c 74  61 62 6c 65 25 2c 63 6f  |F1%,coltable%,co|
00007e70  6c 6c 65 6e 25 29 3a f4  20 52 65 61 64 20 63 6f  |llen%):. Read co|
00007e80  6c 6f 75 72 20 74 61 62  6c 65 0d 1a f4 35 f2 73  |lour table...5.s|
00007e90  74 64 70 61 6c 28 49 6e  50 61 6c 25 28 29 2c 38  |tdpal(InPal%(),8|
00007ea0  29 3a f4 20 53 74 61 6e  64 61 72 64 20 32 35 36  |):. Standard 256|
00007eb0  20 63 6f 6c 6f 75 72 20  70 61 6c 65 74 74 65 0d  | colour palette.|
00007ec0  1a fe 5d f2 69 6d 61 67  65 5f 69 6e 66 6f 28 22  |..].image_info("|
00007ed0  50 72 6f 41 72 74 69 73  61 6e 22 2c 77 69 64 74  |ProArtisan",widt|
00007ee0  68 25 2c 68 65 69 67 68  74 25 2c 30 2c 38 2c 4d  |h%,height%,0,8,M|
00007ef0  6f 64 65 25 2c 22 52 75  6e 20 6c 65 6e 67 74 68  |ode%,"Run length|
00007f00  22 2c 22 22 2c 46 6c 65  6e 25 2d 38 2c 77 69 64  |","",Flen%-8,wid|
00007f10  74 68 25 2a 68 65 69 67  68 74 25 29 0d 1b 08 89  |th%*height%)....|
00007f20  f2 76 61 72 28 22 69 66  70 31 22 2c a4 69 70 74  |.var("ifp1",.ipt|
00007f30  72 28 46 31 25 29 29 3a  f2 76 61 72 28 22 70 72  |r(F1%)):.var("pr|
00007f40  6f 74 22 2c 63 6f 6c 74  61 62 6c 65 25 29 3a f2  |ot",coltable%):.|
00007f50  76 61 72 28 22 63 6f 6d  70 22 2c 63 6f 6d 66 6c  |var("comp",comfl|
00007f60  61 67 25 29 3a f2 76 61  72 28 22 69 6d 67 78 22  |ag%):.var("imgx"|
00007f70  2c 77 69 64 74 68 25 29  3a f2 76 61 72 28 22 69  |,width%):.var("i|
00007f80  6d 67 79 22 2c 68 65 69  67 68 74 25 29 3a e7 a4  |mgy",height%):..|
00007f90  75 6e 70 61 63 6b 28 22  50 52 4f 41 52 54 22 29  |unpack("PROART")|
00007fa0  20 8b 20 3d a3 0d 1b 12  06 3d b9 0d 1b 1c 05 20  | . =.....=..... |
00007fb0  0d 1b 26 11 dd a4 70 69  63 5f 57 41 54 46 4f 52  |..&...pic_WATFOR|
00007fc0  44 0d 1b 30 23 f4 20 4d  61 6b 65 73 20 57 61 74  |D..0#. Makes Wat|
00007fd0  66 6f 72 64 20 64 69 67  69 74 69 73 65 72 20 69  |ford digitiser i|
00007fe0  6d 61 67 65 0d 1b 3a 2b  77 69 64 74 68 25 3d 35  |mage..:+width%=5|
00007ff0  31 32 3a 68 65 69 67 68  74 25 3d 32 35 36 3a f4  |12:height%=256:.|
00008000  20 53 65 74 20 72 65 73  6f 6c 75 74 69 6f 6e 0d  | Set resolution.|
00008010  1b 44 22 f2 73 65 74 28  77 69 64 74 68 25 2c 68  |.D".set(width%,h|
00008020  65 69 67 68 74 25 2c 32  35 36 2c 4d 6f 64 65 25  |eight%,256,Mode%|
00008030  29 0d 1b 4e 2f e7 a4 61  6c 6c 6f 63 61 74 65 5f  |)..N/..allocate_|
00008040  73 74 64 28 77 69 64 74  68 25 2c 77 69 64 74 68  |std(width%,width|
00008050  25 2c 77 69 64 74 68 25  2c 30 29 20 8b 20 3d a3  |%,width%,0) . =.|
00008060  0d 1b 58 17 e7 a4 6e 65  77 5f 69 6d 61 67 65 28  |..X...new_image(|
00008070  30 29 20 8b 20 3d a3 0d  1b 62 30 f2 67 72 65 79  |0) . =...b0.grey|
00008080  70 61 6c 28 49 6e 50 61  6c 25 28 29 2c 36 2c 31  |pal(InPal%(),6,1|
00008090  29 3a f4 20 50 61 6c 65  74 74 65 20 69 73 20 36  |):. Palette is 6|
000080a0  34 20 67 72 65 79 73 0d  1b 6c 68 f2 69 6d 61 67  |4 greys..lh.imag|
000080b0  65 5f 69 6e 66 6f 28 22  57 61 74 66 6f 72 64 20  |e_info("Watford |
000080c0  64 69 67 69 74 69 73 65  72 22 2c 77 69 64 74 68  |digitiser",width|
000080d0  25 2c 68 65 69 67 68 74  25 2c 31 2c 36 2c 4d 6f  |%,height%,1,6,Mo|
000080e0  64 65 25 2c 22 52 75 6e  20 6c 65 6e 67 74 68 22  |de%,"Run length"|
000080f0  2c 22 22 2c 46 6c 65 6e  25 2c 28 77 69 64 74 68  |,"",Flen%,(width|
00008100  25 2a 68 65 69 67 68 74  25 2a 36 29 81 38 29 0d  |%*height%*6).8).|
00008110  1b 76 54 f2 76 61 72 28  22 69 6d 67 78 22 2c 77  |.vT.var("imgx",w|
00008120  69 64 74 68 25 29 3a f2  76 61 72 28 22 69 6d 67  |idth%):.var("img|
00008130  79 22 2c 68 65 69 67 68  74 25 29 3a f2 76 61 72  |y",height%):.var|
00008140  28 22 69 66 70 31 22 2c  30 29 3a e7 a4 75 6e 70  |("ifp1",0):..unp|
00008150  61 63 6b 28 22 57 41 54  46 4f 52 44 22 29 20 8b  |ack("WATFORD") .|
00008160  20 3d a3 0d 1b 80 06 3d  b9 0d 1b 8a 05 20 0d 1b  | =.....=..... ..|
00008170  94 10 dd a4 70 69 63 5f  52 45 4e 44 45 52 0d 1b  |....pic_RENDER..|
00008180  9e 1f f4 20 4d 61 6b 65  73 20 52 65 6e 64 65 72  |... Makes Render|
00008190  20 42 65 6e 64 65 72 20  69 6d 61 67 65 0d 1b a8  | Bender image...|
000081a0  21 4d 6f 64 65 25 3d a4  69 62 3a f4 20 52 65 61  |!Mode%=.ib:. Rea|
000081b0  64 20 69 6d 61 67 65 27  73 20 6d 6f 64 65 0d 1b  |d image's mode..|
000081c0  b2 a6 e7 a4 6d 6f 64 65  5f 76 61 72 28 4d 6f 64  |....mode_var(Mod|
000081d0  65 25 2c 39 29 3c 3e 33  20 8c 20 f2 65 72 72 6f  |e%,9)<>3 . .erro|
000081e0  72 28 2d 31 2c 22 54 68  69 73 20 52 65 6e 64 65  |r(-1,"This Rende|
000081f0  72 20 42 65 6e 64 65 72  20 69 6d 61 67 65 20 77  |r Bender image w|
00008200  61 73 20 6e 6f 74 20 64  65 66 69 6e 65 64 20 69  |as not defined i|
00008210  6e 20 61 20 32 35 36 20  63 6f 6c 6f 75 72 20 6d  |n a 256 colour m|
00008220  6f 64 65 20 21 22 29 20  8b 20 77 69 64 74 68 25  |ode !") . width%|
00008230  3d a4 6d 6f 64 65 5f 76  61 72 28 4d 6f 64 65 25  |=.mode_var(Mode%|
00008240  2c 31 31 29 2b 31 3a 68  65 69 67 68 74 25 3d a4  |,11)+1:height%=.|
00008250  6d 6f 64 65 5f 76 61 72  28 4d 6f 64 65 25 2c 31  |mode_var(Mode%,1|
00008260  32 29 2b 31 0d 1b bc 22  f2 73 65 74 28 77 69 64  |2)+1...".set(wid|
00008270  74 68 25 2c 68 65 69 67  68 74 25 2c 32 35 36 2c  |th%,height%,256,|
00008280  4d 6f 64 65 25 29 0d 1b  c6 2f e7 a4 61 6c 6c 6f  |Mode%).../..allo|
00008290  63 61 74 65 5f 73 74 64  28 77 69 64 74 68 25 2c  |cate_std(width%,|
000082a0  77 69 64 74 68 25 2c 77  69 64 74 68 25 2c 30 29  |width%,width%,0)|
000082b0  20 8b 20 3d a3 0d 1b d0  17 e7 a4 6e 65 77 5f 69  | . =.......new_i|
000082c0  6d 61 67 65 28 30 29 20  8b 20 3d a3 0d 1b da 35  |mage(0) . =....5|
000082d0  f2 73 74 64 70 61 6c 28  49 6e 50 61 6c 25 28 29  |.stdpal(InPal%()|
000082e0  2c 38 29 3a f4 20 53 74  61 6e 64 61 72 64 20 32  |,8):. Standard 2|
000082f0  35 36 20 63 6f 6c 6f 75  72 20 70 61 6c 65 74 74  |56 colour palett|
00008300  65 0d 1b e4 60 f2 69 6d  61 67 65 5f 69 6e 66 6f  |e...`.image_info|
00008310  28 22 52 65 6e 64 65 72  20 42 65 6e 64 65 72 22  |("Render Bender"|
00008320  2c 77 69 64 74 68 25 2c  68 65 69 67 68 74 25 2c  |,width%,height%,|
00008330  30 2c 38 2c 4d 6f 64 65  25 2c 22 52 75 6e 20 6c  |0,8,Mode%,"Run l|
00008340  65 6e 67 74 68 22 2c 22  22 2c 46 6c 65 6e 25 2d  |ength","",Flen%-|
00008350  31 2c 77 69 64 74 68 25  2a 68 65 69 67 68 74 25  |1,width%*height%|
00008360  29 0d 1b ee 53 f2 76 61  72 28 22 69 66 70 31 22  |)...S.var("ifp1"|
00008370  2c 31 29 3a f2 76 61 72  28 22 69 6d 67 78 22 2c  |,1):.var("imgx",|
00008380  77 69 64 74 68 25 29 3a  f2 76 61 72 28 22 69 6d  |width%):.var("im|
00008390  67 79 22 2c 68 65 69 67  68 74 25 29 3a e7 a4 75  |gy",height%):..u|
000083a0  6e 70 61 63 6b 28 22 52  45 4e 44 45 52 22 29 20  |npack("RENDER") |
000083b0  8b 20 3d a3 0d 1b f8 06  3d b9 0d 1c 02 05 20 0d  |. =.....=..... .|
000083c0  1c 0c 0d dd a4 70 69 63  5f 41 49 4d 0d 1c 16 15  |.....pic_AIM....|
000083d0  f4 20 4d 61 6b 65 73 20  41 49 4d 20 69 6d 61 67  |. Makes AIM imag|
000083e0  65 0d 1c 20 2b 77 69 64  74 68 25 3d 32 35 36 3a  |e.. +width%=256:|
000083f0  68 65 69 67 68 74 25 3d  32 35 36 3a f4 20 53 65  |height%=256:. Se|
00008400  74 20 72 65 73 6f 6c 75  74 69 6f 6e 0d 1c 2a 22  |t resolution..*"|
00008410  f2 73 65 74 28 77 69 64  74 68 25 2c 68 65 69 67  |.set(width%,heig|
00008420  68 74 25 2c 32 35 36 2c  4d 6f 64 65 25 29 0d 1c  |ht%,256,Mode%)..|
00008430  34 2f e7 a4 61 6c 6c 6f  63 61 74 65 5f 73 74 64  |4/..allocate_std|
00008440  28 77 69 64 74 68 25 2c  77 69 64 74 68 25 2c 77  |(width%,width%,w|
00008450  69 64 74 68 25 2c 30 29  20 8b 20 3d a3 0d 1c 3e  |idth%,0) . =...>|
00008460  17 e7 a4 6e 65 77 5f 69  6d 61 67 65 28 30 29 20  |...new_image(0) |
00008470  8b 20 3d a3 0d 1c 48 31  f2 67 72 65 79 70 61 6c  |. =...H1.greypal|
00008480  28 49 6e 50 61 6c 25 28  29 2c 38 2c 31 29 3a f4  |(InPal%(),8,1):.|
00008490  20 50 61 6c 65 74 74 65  20 69 73 20 32 35 36 20  | Palette is 256 |
000084a0  67 72 65 79 73 0d 1c 52  43 f2 69 6d 61 67 65 5f  |greys..RC.image_|
000084b0  69 6e 66 6f 28 22 41 49  4d 22 2c 77 69 64 74 68  |info("AIM",width|
000084c0  25 2c 68 65 69 67 68 74  25 2c 31 2c 38 2c 4d 6f  |%,height%,1,8,Mo|
000084d0  64 65 25 2c 22 22 2c 22  22 2c 46 6c 65 6e 25 2c  |de%,"","",Flen%,|
000084e0  32 35 36 2a 32 35 36 29  0d 1c 5c 50 f2 76 61 72  |256*256)..\P.var|
000084f0  28 22 69 6d 67 78 22 2c  77 69 64 74 68 25 29 3a  |("imgx",width%):|
00008500  f2 76 61 72 28 22 69 6d  67 79 22 2c 68 65 69 67  |.var("imgy",heig|
00008510  68 74 25 29 3a f2 76 61  72 28 22 69 66 70 31 22  |ht%):.var("ifp1"|
00008520  2c 30 29 3a e7 a4 75 6e  70 61 63 6b 28 22 41 49  |,0):..unpack("AI|
00008530  4d 22 29 20 8b 20 3d a3  0d 1c 66 06 3d b9 0d 1c  |M") . =...f.=...|
00008540  70 05 20 0d 1c 7a 0d dd  a4 70 69 63 5f 53 55 4e  |p. ..z...pic_SUN|
00008550  0d 1c 84 15 f4 20 4d 61  6b 65 73 20 53 55 4e 20  |..... Makes SUN |
00008560  69 6d 61 67 65 0d 1c 8e  5a 6d 61 67 69 63 25 3d  |image...Zmagic%=|
00008570  a4 69 77 62 3a e7 6d 61  67 69 63 25 3c 3e 26 35  |.iwb:.magic%<>&5|
00008580  39 41 36 36 41 39 35 20  8c 20 f2 65 72 72 6f 72  |9A66A95 . .error|
00008590  28 2d 31 2c 22 54 68 69  73 20 69 73 20 6e 6f 20  |(-1,"This is no |
000085a0  73 74 61 6e 64 61 72 64  20 53 55 4e 20 72 61 73  |standard SUN ras|
000085b0  74 65 72 20 66 69 6c 65  20 21 22 29 3a 3d a3 0d  |ter file !"):=..|
000085c0  1c 98 3c 77 69 64 74 68  25 3d a4 69 77 62 3a 68  |..<width%=.iwb:h|
000085d0  65 69 67 68 74 25 3d a4  69 77 62 3a 63 6f 6c 62  |eight%=.iwb:colb|
000085e0  69 74 73 25 3d a4 69 77  62 3a f4 20 52 65 61 64  |its%=.iwb:. Read|
000085f0  20 72 65 73 6f 6c 75 74  69 6f 6e 0d 1c a2 46 6c  | resolution...Fl|
00008600  65 6e 67 74 68 25 3d a4  69 77 62 3a 74 79 70 65  |ength%=.iwb:type|
00008610  25 3d a4 69 77 62 3a 6d  61 70 74 79 70 65 25 3d  |%=.iwb:maptype%=|
00008620  a4 69 77 62 3a 6d 61 70  6c 65 6e 67 74 68 25 3d  |.iwb:maplength%=|
00008630  a4 69 77 62 3a f4 20 45  78 74 72 61 20 69 6e 66  |.iwb:. Extra inf|
00008640  6f 0d 1c ac 4f e7 74 79  70 65 25 3e 32 20 8c 20  |o...O.type%>2 . |
00008650  f2 65 72 72 6f 72 28 2d  31 2c 22 49 20 63 61 6e  |.error(-1,"I can|
00008660  20 6f 6e 6c 79 20 72 65  61 64 20 75 6e 63 6f 6d  | only read uncom|
00008670  70 72 65 73 73 65 64 20  6f 72 20 52 4c 45 20 53  |pressed or RLE S|
00008680  75 6e 20 69 6d 61 67 65  73 20 21 22 29 3a 3d a3  |un images !"):=.|
00008690  0d 1c b6 2b 63 6f 6c 6f  75 72 73 25 3d 32 5e 63  |...+colours%=2^c|
000086a0  6f 6c 62 69 74 73 25 3a  f4 20 4e 75 6d 62 65 72  |olbits%:. Number|
000086b0  20 6f 66 20 63 6f 6c 6f  75 72 73 0d 1c c0 11 c8  | of colours.....|
000086c0  8e 20 63 6f 6c 62 69 74  73 25 20 ca 0d 1c ca 2c  |. colbits% ....,|
000086d0  20 c9 20 31 2c 38 20 3a  20 e7 28 6d 61 70 74 79  | . 1,8 : .(mapty|
000086e0  70 65 25 3c 3e 31 29 84  28 6d 61 70 6c 65 6e 67  |pe%<>1).(mapleng|
000086f0  74 68 25 3d 30 29 20 8c  0d 1c d4 6d 20 20 20 20  |th%=0) ....m    |
00008700  20 20 20 20 20 20 20 20  20 e7 63 6f 6c 62 69 74  |         .colbit|
00008710  73 25 3e 31 20 8c 20 f2  65 72 72 6f 72 28 2d 31  |s%>1 . .error(-1|
00008720  2c 22 54 68 69 73 20 53  55 4e 20 69 6d 61 67 65  |,"This SUN image|
00008730  20 66 69 6c 65 20 63 6f  6e 74 61 69 6e 73 20 6e  | file contains n|
00008740  6f 20 70 61 6c 65 74 74  65 20 21 20 49 20 77 69  |o palette ! I wi|
00008750  6c 6c 20 75 73 65 20 61  20 67 72 65 79 73 63 61  |ll use a greysca|
00008760  6c 65 2e 22 29 0d 1c de  2e 20 20 20 20 20 20 20  |le.")....       |
00008770  20 20 20 20 20 20 f2 67  72 65 79 70 61 6c 28 49  |      .greypal(I|
00008780  6e 50 61 6c 25 28 29 2c  63 6f 6c 62 69 74 73 25  |nPal%(),colbits%|
00008790  2c 31 29 0d 1c e8 73 20  20 20 20 20 20 20 20 20  |,1)...s         |
000087a0  20 20 20 cc 20 49 6e 50  61 6c 25 28 29 3d 30 3a  |   . InPal%()=0:|
000087b0  e3 20 69 25 3d 31 20 b8  20 33 3a e3 20 63 25 3d  |. i%=1 . 3:. c%=|
000087c0  31 20 b8 20 6d 61 70 6c  65 6e 67 74 68 25 81 33  |1 . maplength%.3|
000087d0  3a 49 6e 50 61 6c 25 28  63 25 29 3d 28 49 6e 50  |:InPal%(c%)=(InP|
000087e0  61 6c 25 28 63 25 29 3c  3c 38 29 2b a4 69 62 3a  |al%(c%)<<8)+.ib:|
000087f0  ed 3a ed 3a 49 6e 50 61  6c 25 28 30 29 3d 63 6f  |.:.:InPal%(0)=co|
00008800  6c 62 69 74 73 25 0d 1c  f2 11 20 20 20 20 20 20  |lbits%....      |
00008810  20 20 20 20 20 20 cd 0d  1c fc 4c 20 7f 20 3a 20  |      ....L . : |
00008820  f2 65 72 72 6f 72 28 2d  31 2c 22 49 20 63 61 6e  |.error(-1,"I can|
00008830  20 6f 6e 6c 79 20 72 65  61 64 20 31 2d 20 61 6e  | only read 1- an|
00008840  64 20 38 2d 62 69 74 20  70 65 72 20 70 69 78 65  |d 8-bit per pixe|
00008850  6c 20 53 75 6e 20 69 6d  61 67 65 73 20 21 22 29  |l Sun images !")|
00008860  3a 3d a3 0d 1d 06 05 cb  0d 1d 10 27 f2 73 65 74  |:=.........'.set|
00008870  28 77 69 64 74 68 25 2c  68 65 69 67 68 74 25 2c  |(width%,height%,|
00008880  63 6f 6c 6f 75 72 73 25  2c 4d 6f 64 65 25 29 0d  |colours%,Mode%).|
00008890  1d 1a 3e e7 a4 61 6c 6c  6f 63 61 74 65 5f 73 74  |..>..allocate_st|
000088a0  64 28 77 69 64 74 68 25  2c 28 77 69 64 74 68 25  |d(width%,(width%|
000088b0  2a 63 6f 6c 62 69 74 73  25 2b 37 29 81 38 2c 77  |*colbits%+7).8,w|
000088c0  69 64 74 68 25 2c 30 29  20 8b 20 3d a3 0d 1d 24  |idth%,0) . =...$|
000088d0  17 e7 a4 6e 65 77 5f 69  6d 61 67 65 28 30 29 20  |...new_image(0) |
000088e0  8b 20 3d a3 0d 1d 2e 2e  e7 74 79 70 65 25 3d 32  |. =......type%=2|
000088f0  20 8c 20 63 6f 6d 70 72  24 3d 22 52 75 6e 20 6c  | . compr$="Run l|
00008900  65 6e 67 74 68 22 20 8b  20 63 6f 6d 70 72 24 3d  |ength" . compr$=|
00008910  22 22 0d 1d 38 70 f2 69  6d 61 67 65 5f 69 6e 66  |""..8p.image_inf|
00008920  6f 28 22 53 55 4e 22 2c  77 69 64 74 68 25 2c 68  |o("SUN",width%,h|
00008930  65 69 67 68 74 25 2c 30  2c 63 6f 6c 62 69 74 73  |eight%,0,colbits|
00008940  25 2c 4d 6f 64 65 25 2c  63 6f 6d 70 72 24 2c 22  |%,Mode%,compr$,"|
00008950  22 2c 46 6c 65 6e 25 2d  33 32 2d 6d 61 70 6c 65  |",Flen%-32-maple|
00008960  6e 67 74 68 25 2c 28 77  69 64 74 68 25 2a 68 65  |ngth%,(width%*he|
00008970  69 67 68 74 25 2a 63 6f  6c 62 69 74 73 25 29 81  |ight%*colbits%).|
00008980  38 29 0d 1d 42 6f f2 76  61 72 28 22 69 66 70 31  |8)..Bo.var("ifp1|
00008990  22 2c 33 32 2b 6d 61 70  6c 65 6e 67 74 68 25 29  |",32+maplength%)|
000089a0  3a f2 76 61 72 28 22 69  6d 67 78 22 2c 77 69 64  |:.var("imgx",wid|
000089b0  74 68 25 29 3a f2 76 61  72 28 22 69 6d 67 79 22  |th%):.var("imgy"|
000089c0  2c 68 65 69 67 68 74 25  29 3a f2 76 61 72 28 22  |,height%):.var("|
000089d0  63 6f 6d 70 22 2c 74 79  70 65 25 29 3a e7 a4 75  |comp",type%):..u|
000089e0  6e 70 61 63 6b 28 22 53  55 4e 22 29 20 8b 20 3d  |npack("SUN") . =|
000089f0  a3 0d 1d 4c 06 3d b9 0d  1d 56 05 20 0d 1d 60 0d  |...L.=...V. ..`.|
00008a00  dd a4 70 69 63 5f 50 43  58 0d 1d 6a 15 f4 20 4d  |..pic_PCX..j.. M|
00008a10  61 6b 65 73 20 50 43 58  20 69 6d 61 67 65 0d 1d  |akes PCX image..|
00008a20  74 2e 6d 61 6e 25 3d a4  69 62 3a f4 20 4d 61 6e  |t.man%=.ib:. Man|
00008a30  75 66 61 63 74 75 72 65  20 63 6f 64 65 20 28 73  |ufacture code (s|
00008a40  68 6f 75 6c 64 20 62 65  20 31 30 29 0d 1d 7e 3e  |hould be 10)..~>|
00008a50  e7 6d 61 6e 25 3c 3e 31  30 20 8c 20 f2 65 72 72  |.man%<>10 . .err|
00008a60  6f 72 28 2d 31 2c 22 54  68 69 73 20 69 73 20 6e  |or(-1,"This is n|
00008a70  6f 20 73 74 61 6e 64 61  72 64 20 50 43 58 20 66  |o standard PCX f|
00008a80  69 6c 65 20 21 22 29 3a  3d a3 0d 1d 88 29 76 65  |ile !"):=....)ve|
00008a90  72 73 69 6f 6e 25 3d a4  69 62 3a f4 20 56 65 72  |rsion%=.ib:. Ver|
00008aa0  73 69 6f 6e 20 63 6f 64  65 20 28 30 2f 32 2f 33  |sion code (0/2/3|
00008ab0  2f 35 29 0d 1d 92 59 e7  76 65 72 73 69 6f 6e 25  |/5)...Y.version%|
00008ac0  3c 35 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |<5 . .error(-1,"|
00008ad0  49 20 63 61 6e 6e 6f 74  20 68 61 6e 64 6c 65 20  |I cannot handle |
00008ae0  6f 6c 64 20 50 43 58 20  66 69 6c 65 73 20 28 6f  |old PCX files (o|
00008af0  6e 6c 79 20 76 65 72 73  69 6f 6e 20 35 20 61 6e  |nly version 5 an|
00008b00  64 20 75 70 29 20 21 22  29 3a 3d a3 0d 1d 9c 44  |d up) !"):=....D|
00008b10  65 6e 63 6f 64 69 6e 67  25 3d a4 69 62 3a f4 20  |encoding%=.ib:. |
00008b20  45 6e 63 6f 64 69 6e 67  20 63 6f 64 65 20 28 30  |Encoding code (0|
00008b30  2d 6e 6f 6e 65 2c 20 31  2d 50 43 58 20 72 75 6e  |-none, 1-PCX run|
00008b40  6c 65 6e 67 74 68 20 65  6e 63 6f 64 69 6e 67 29  |length encoding)|
00008b50  0d 1d a6 30 62 69 74 73  25 3d a4 69 62 3a f4 20  |...0bits%=.ib:. |
00008b60  42 69 74 73 20 70 65 72  20 27 70 69 78 65 6c 27  |Bits per 'pixel'|
00008b70  20 28 31 2d 45 47 41 2c  20 38 2d 4d 43 47 41 29  | (1-EGA, 8-MCGA)|
00008b80  0d 1d b0 48 77 78 6d 69  6e 25 3d a4 69 64 6c 3a  |...Hwxmin%=.idl:|
00008b90  77 79 6d 69 6e 25 3d a4  69 64 6c 3a 77 78 6d 61  |wymin%=.idl:wxma|
00008ba0  78 25 3d a4 69 64 6c 3a  77 79 6d 61 78 25 3d a4  |x%=.idl:wymax%=.|
00008bb0  69 64 6c 3a f4 20 57 69  6e 64 6f 77 20 63 6f 6f  |idl:. Window coo|
00008bc0  72 64 69 6e 61 74 65 73  0d 1d ba 49 77 69 64 74  |rdinates...Iwidt|
00008bd0  68 25 3d 77 78 6d 61 78  25 2d 77 78 6d 69 6e 25  |h%=wxmax%-wxmin%|
00008be0  2b 31 3a 68 65 69 67 68  74 25 3d 77 79 6d 61 78  |+1:height%=wymax|
00008bf0  25 2d 77 79 6d 69 6e 25  2b 31 3a f4 20 52 65 73  |%-wymin%+1:. Res|
00008c00  6f 6c 75 74 69 6f 6e 20  69 6e 20 70 69 78 65 6c  |olution in pixel|
00008c10  73 0d 1d c4 22 f2 69 73  6b 69 70 28 46 31 25 2c  |s...".iskip(F1%,|
00008c20  34 29 3a f4 20 53 6b 69  70 20 48 72 65 73 2f 56  |4):. Skip Hres/V|
00008c30  72 65 73 0d 1d ce 1e 49  6e 50 61 6c 25 28 29 3d  |res....InPal%()=|
00008c40  30 3a f4 20 43 6c 65 61  72 20 70 61 6c 65 74 74  |0:. Clear palett|
00008c50  65 0d 1d d8 42 f2 72 65  61 64 32 34 70 61 6c 28  |e...B.read24pal(|
00008c60  46 31 25 2c 49 6e 50 61  6c 25 28 29 2c 31 36 2c  |F1%,InPal%(),16,|
00008c70  30 2c 31 2c 32 2c 33 29  3a f4 20 52 65 61 64 20  |0,1,2,3):. Read |
00008c80  63 6f 6c 6f 75 72 6d 61  70 20 69 6e 20 68 65 61  |colourmap in hea|
00008c90  64 65 72 0d 1d e2 26 f2  69 73 6b 69 70 28 46 31  |der...&.iskip(F1|
00008ca0  25 2c 31 29 3a f4 20 53  6b 69 70 20 72 65 73 65  |%,1):. Skip rese|
00008cb0  72 76 65 64 20 62 79 74  65 0d 1d ec 1e 70 6c 61  |rved byte....pla|
00008cc0  6e 65 73 25 3d a4 69 62  3a f4 20 43 6f 6c 6f 75  |nes%=.ib:. Colou|
00008cd0  72 70 6c 61 6e 65 73 0d  1d f6 22 6c 69 6e 65 6c  |rplanes..."linel|
00008ce0  65 6e 25 3d a4 69 64 6c  3a f4 20 42 79 74 65 73  |en%=.idl:. Bytes|
00008cf0  20 70 65 72 20 6c 69 6e  65 0d 1e 00 92 f4 20 72  | per line..... r|
00008d00  6f 75 6e 64 6c 65 6e 25  3d 28 28 77 69 64 74 68  |oundlen%=((width|
00008d10  25 2a 62 69 74 73 25 2b  37 29 44 49 56 38 29 3a  |%*bits%+7)DIV8):|
00008d20  49 46 72 6f 75 6e 64 6c  65 6e 25 3c 3e 6c 69 6e  |IFroundlen%<>lin|
00008d30  65 6c 65 6e 25 20 54 48  45 4e 20 77 69 64 74 68  |elen% THEN width|
00008d40  25 3d 6c 69 6e 65 6c 65  6e 25 2a 38 2f 62 69 74  |%=linelen%*8/bit|
00008d50  73 25 3a 52 45 4d 20 43  6f 72 72 65 63 74 20 77  |s%:REM Correct w|
00008d60  69 64 74 68 20 69 66 20  77 69 6e 64 6f 77 20 61  |idth if window a|
00008d70  6e 64 20 6c 69 6e 65 6c  65 6e 67 74 68 20 64 61  |nd linelength da|
00008d80  74 61 20 63 6f 6e 66 6c  69 63 74 0d 1e 0a 2b 70  |ta conflict...+p|
00008d90  69 78 62 69 74 73 25 3d  62 69 74 73 25 2a 70 6c  |ixbits%=bits%*pl|
00008da0  61 6e 65 73 25 3a f4 20  42 69 74 73 20 70 65 72  |anes%:. Bits per|
00008db0  20 70 69 78 65 6c 0d 1e  14 89 e7 28 70 69 78 62  | pixel.....(pixb|
00008dc0  69 74 73 25 3d 31 29 20  84 20 28 70 69 78 62 69  |its%=1) . (pixbi|
00008dd0  74 73 25 3d 32 29 20 84  20 28 70 69 78 62 69 74  |ts%=2) . (pixbit|
00008de0  73 25 3d 34 29 20 84 20  28 70 69 78 62 69 74 73  |s%=4) . (pixbits|
00008df0  25 3d 38 29 20 8b 20 f2  65 72 72 6f 72 28 2d 31  |%=8) . .error(-1|
00008e00  2c 22 49 20 63 61 6e 6e  6f 74 20 68 61 6e 64 6c  |,"I cannot handl|
00008e10  65 20 22 2b c3 28 32 5e  70 69 78 62 69 74 73 25  |e "+.(2^pixbits%|
00008e20  29 2b 22 20 63 6f 6c 6f  75 72 20 45 47 41 20 50  |)+" colour EGA P|
00008e30  43 58 20 66 69 6c 65 73  20 21 22 29 3a 3d a3 0d  |CX files !"):=..|
00008e40  1e 1e 2b 63 6f 6c 6f 75  72 73 25 3d 32 5e 70 69  |..+colours%=2^pi|
00008e50  78 62 69 74 73 25 3a f4  20 4e 75 6d 62 65 72 20  |xbits%:. Number |
00008e60  6f 66 20 63 6f 6c 6f 75  72 73 0d 1e 28 41 f2 69  |of colours..(A.i|
00008e70  70 74 72 28 46 31 25 2c  a4 69 6c 65 6e 28 46 31  |ptr(F1%,.ilen(F1|
00008e80  25 29 2d 37 36 39 29 3a  63 6f 64 65 25 3d a4 69  |%)-769):code%=.i|
00008e90  62 3a f4 20 54 72 79 20  65 6e 64 2d 37 36 39 20  |b:. Try end-769 |
00008ea0  66 6f 72 20 70 61 6c 65  74 74 65 0d 1e 32 10 e7  |for palette..2..|
00008eb0  63 6f 64 65 25 3c 3e 31  32 20 8c 0d 1e 3c 5c 20  |code%<>12 ...<\ |
00008ec0  e7 a4 61 6c 6c 6f 63 61  74 65 28 42 5f 69 6e 66  |..allocate(B_inf|
00008ed0  69 6c 65 25 2c 31 30 32  34 29 20 8b 20 f2 65 72  |ile%,1024) . .er|
00008ee0  72 6f 72 28 2d 31 2c 22  49 20 68 61 76 65 20 6e  |ror(-1,"I have n|
00008ef0  6f 20 72 6f 6f 6d 20 66  6f 72 20 74 68 65 20 69  |o room for the i|
00008f00  6e 70 75 74 20 66 69 6c  65 20 62 75 66 66 65 72  |nput file buffer|
00008f10  20 21 22 29 3a 3d a3 0d  1e 46 7f 20 f2 76 61 72  | !"):=...F. .var|
00008f20  28 22 69 66 70 31 22 2c  31 32 38 29 3a f2 76 61  |("ifp1",128):.va|
00008f30  72 28 22 74 6f 74 6c 22  2c 6c 69 6e 65 6c 65 6e  |r("totl",linelen|
00008f40  25 2a 70 6c 61 6e 65 73  25 2a 68 65 69 67 68 74  |%*planes%*height|
00008f50  25 29 3a f2 76 61 72 28  22 63 6f 6d 70 22 2c 65  |%):.var("comp",e|
00008f60  6e 63 6f 64 69 6e 67 25  29 3a f2 75 6e 70 61 63  |ncoding%):.unpac|
00008f70  6b 5f 70 68 61 73 65 28  22 50 43 58 22 2c 32 29  |k_phase("PCX",2)|
00008f80  3a f4 20 47 65 74 20 28  70 61 63 6b 65 64 29 20  |:. Get (packed) |
00008f90  6c 65 6e 67 74 68 0d 1e  50 44 20 6c 65 6e 25 3d  |length..PD len%=|
00008fa0  a4 76 61 72 28 22 70 61  6b 6c 22 29 3a f2 69 70  |.var("pakl"):.ip|
00008fb0  74 72 28 46 31 25 2c 31  32 38 2b 6c 65 6e 25 29  |tr(F1%,128+len%)|
00008fc0  3a f4 20 47 6f 20 74 6f  20 65 6e 64 20 6f 66 20  |:. Go to end of |
00008fd0  69 6d 61 67 65 20 64 61  74 61 0d 1e 5a 3d 20 63  |image data..Z= c|
00008fe0  6f 64 65 25 3d a4 69 62  3a f4 20 47 65 74 20 63  |ode%=.ib:. Get c|
00008ff0  6f 64 65 20 28 31 32 20  69 6e 64 69 63 61 74 65  |ode (12 indicate|
00009000  73 20 70 61 6c 65 74 74  65 20 69 6e 66 6f 20 66  |s palette info f|
00009010  6f 6c 6c 6f 77 73 29 0d  1e 64 05 cd 0d 1e 6e 39  |ollows)..d....n9|
00009020  e7 63 6f 64 65 25 3d 31  32 20 8c 20 f2 72 65 61  |.code%=12 . .rea|
00009030  64 32 34 70 61 6c 28 46  31 25 2c 49 6e 50 61 6c  |d24pal(F1%,InPal|
00009040  25 28 29 2c 63 6f 6c 6f  75 72 73 25 2c 30 2c 31  |%(),colours%,0,1|
00009050  2c 32 2c 33 29 0d 1e 78  2e 67 72 65 79 3d a3 3a  |,2,3)..x.grey=.:|
00009060  f4 20 46 6c 61 67 20 74  6f 20 69 6e 64 69 63 61  |. Flag to indica|
00009070  74 65 20 66 6f 72 63 65  64 20 67 72 65 79 73 63  |te forced greysc|
00009080  61 6c 65 0d 1e 82 80 e7  62 69 74 73 25 3d 38 20  |ale.....bits%=8 |
00009090  8c 20 e7 63 6f 64 65 25  3c 3e 31 32 20 8c 20 f2  |. .code%<>12 . .|
000090a0  65 72 72 6f 72 28 2d 31  2c 22 49 20 63 61 6e 6e  |error(-1,"I cann|
000090b0  6f 74 20 66 69 6e 64 20  74 68 65 20 70 61 6c 65  |ot find the pale|
000090c0  74 74 65 20 69 6e 20 74  68 69 73 20 32 35 36 2d  |tte in this 256-|
000090d0  63 6f 6c 6f 75 72 20 50  43 58 20 69 6d 61 67 65  |colour PCX image|
000090e0  20 21 20 49 20 77 69 6c  6c 20 75 73 65 20 61 20  | ! I will use a |
000090f0  67 72 65 79 73 63 61 6c  65 2e 22 29 3a 67 72 65  |greyscale."):gre|
00009100  79 3d b9 0d 1e 8c 7d e7  ac 67 72 65 79 20 8c 20  |y=....}..grey . |
00009110  e7 c6 8e 28 49 6e 50 61  6c 25 28 29 29 3d 30 20  |...(InPal%())=0 |
00009120  8c 20 f2 65 72 72 6f 72  28 2d 31 2c 22 49 20 63  |. .error(-1,"I c|
00009130  61 6e 6e 6f 74 20 66 69  6e 64 20 61 20 64 65 63  |annot find a dec|
00009140  65 6e 74 20 70 61 6c 65  74 74 65 20 69 6e 20 74  |ent palette in t|
00009150  68 69 73 20 50 43 58 20  69 6d 61 67 65 20 21 20  |his PCX image ! |
00009160  49 20 77 69 6c 6c 20 75  73 65 20 61 20 67 72 65  |I will use a gre|
00009170  79 73 63 61 6c 65 2e 22  29 3a 67 72 65 79 3d b9  |yscale."):grey=.|
00009180  0d 1e 96 3e e7 67 72 65  79 20 8c 20 f2 67 72 65  |...>.grey . .gre|
00009190  79 70 61 6c 28 49 6e 50  61 6c 25 28 29 2c 70 69  |ypal(InPal%(),pi|
000091a0  78 62 69 74 73 25 2c 31  29 20 8b 20 49 6e 50 61  |xbits%,1) . InPa|
000091b0  6c 25 28 30 29 3d 70 69  78 62 69 74 73 25 0d 1e  |l%(0)=pixbits%..|
000091c0  a0 79 e7 28 70 69 78 62  69 74 73 25 3d 31 29 84  |.y.(pixbits%=1).|
000091d0  28 70 69 78 62 69 74 73  25 3d 38 29 20 8c 20 73  |(pixbits%=8) . s|
000091e0  69 7a 65 25 3d 30 20 8b  20 73 69 7a 65 25 3d 28  |ize%=0 . size%=(|
000091f0  77 69 64 74 68 25 2a 70  69 78 62 69 74 73 25 2b  |width%*pixbits%+|
00009200  37 29 81 38 3a f4 20 49  6e 74 65 72 6d 65 64 69  |7).8:. Intermedi|
00009210  61 74 65 20 70 69 78 65  6c 20 64 61 74 61 20 62  |ate pixel data b|
00009220  75 66 66 65 72 20 66 6f  72 20 27 70 6c 61 6e 65  |uffer for 'plane|
00009230  64 27 20 64 61 74 61 0d  1e aa 27 f2 73 65 74 28  |d' data...'.set(|
00009240  77 69 64 74 68 25 2c 68  65 69 67 68 74 25 2c 63  |width%,height%,c|
00009250  6f 6c 6f 75 72 73 25 2c  4d 6f 64 65 25 29 0d 1e  |olours%,Mode%)..|
00009260  b4 42 e7 a4 61 6c 6c 6f  63 61 74 65 5f 73 74 64  |.B..allocate_std|
00009270  28 77 69 64 74 68 25 2c  28 77 69 64 74 68 25 2a  |(width%,(width%*|
00009280  70 69 78 62 69 74 73 25  2b 37 29 81 38 2c 77 69  |pixbits%+7).8,wi|
00009290  64 74 68 25 2c 73 69 7a  65 25 29 20 8b 20 3d a3  |dth%,size%) . =.|
000092a0  0d 1e be 17 e7 a4 6e 65  77 5f 69 6d 61 67 65 28  |......new_image(|
000092b0  30 29 20 8b 20 3d a3 0d  1e c8 32 e7 65 6e 63 6f  |0) . =....2.enco|
000092c0  64 69 6e 67 25 3d 31 20  8c 20 63 6f 6d 70 72 24  |ding%=1 . compr$|
000092d0  3d 22 52 75 6e 20 6c 65  6e 67 74 68 22 20 8b 20  |="Run length" . |
000092e0  63 6f 6d 70 72 24 3d 22  22 0d 1e d2 66 f2 69 6d  |compr$=""...f.im|
000092f0  61 67 65 5f 69 6e 66 6f  28 22 50 43 58 22 2c 77  |age_info("PCX",w|
00009300  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 30 2c  |idth%,height%,0,|
00009310  70 69 78 62 69 74 73 25  2c 4d 6f 64 65 25 2c 63  |pixbits%,Mode%,c|
00009320  6f 6d 70 72 24 2c 22 22  2c 46 6c 65 6e 25 2d 31  |ompr$,"",Flen%-1|
00009330  32 38 2c 28 77 69 64 74  68 25 2a 68 65 69 67 68  |28,(width%*heigh|
00009340  74 25 2a 70 69 78 62 69  74 73 25 29 81 38 29 0d  |t%*pixbits%).8).|
00009350  1e dc 7f f2 76 61 72 28  22 69 66 70 31 22 2c 31  |....var("ifp1",1|
00009360  32 38 29 3a f2 76 61 72  28 22 69 6d 67 78 22 2c  |28):.var("imgx",|
00009370  77 69 64 74 68 25 29 3a  f2 76 61 72 28 22 69 6d  |width%):.var("im|
00009380  67 79 22 2c 68 65 69 67  68 74 25 29 3a f2 76 61  |gy",height%):.va|
00009390  72 28 22 63 6f 6d 70 22  2c 65 6e 63 6f 64 69 6e  |r("comp",encodin|
000093a0  67 25 29 3a f2 76 61 72  28 22 6c 69 6e 65 22 2c  |g%):.var("line",|
000093b0  6c 69 6e 65 6c 65 6e 25  29 3a e7 a4 75 6e 70 61  |linelen%):..unpa|
000093c0  63 6b 28 22 50 43 58 22  29 20 8b 20 3d a3 0d 1e  |ck("PCX") . =...|
000093d0  e6 06 3d b9 0d 1e f0 05  20 0d 1e fa 0e dd a4 70  |..=..... ......p|
000093e0  69 63 5f 54 49 46 46 0d  1f 04 16 f4 20 4d 61 6b  |ic_TIFF..... Mak|
000093f0  65 73 20 54 49 46 46 20  69 6d 61 67 65 0d 1f 0e  |es TIFF image...|
00009400  28 68 65 61 64 62 79 74  65 73 25 3d 32 3a f4 20  |(headbytes%=2:. |
00009410  43 6f 75 6e 74 20 62 79  74 65 73 20 69 6e 20 68  |Count bytes in h|
00009420  65 61 64 65 72 0d 1f 18  2d 69 64 24 3d a4 69 73  |eader...-id$=.is|
00009430  74 72 69 6e 67 28 46 31  25 2c 32 29 3a f4 20 54  |tring(F1%,2):. T|
00009440  49 46 46 20 69 64 65 6e  74 69 66 69 63 61 74 69  |IFF identificati|
00009450  6f 6e 0d 1f 22 0c c8 8e  20 69 64 24 20 ca 0d 1f  |on.."... id$ ...|
00009460  2c 35 20 c9 20 22 49 49  22 20 3a 20 54 74 79 70  |,5 . "II" : Ttyp|
00009470  65 25 3d 30 3a f4 20 53  65 74 20 6c 6f 77 2d 74  |e%=0:. Set low-t|
00009480  6f 2d 68 69 67 68 20 74  79 70 65 20 6f 66 20 64  |o-high type of d|
00009490  61 74 61 0d 1f 36 35 20  c9 20 22 4d 4d 22 20 3a  |ata..65 . "MM" :|
000094a0  20 54 74 79 70 65 25 3d  31 3a f4 20 53 65 74 20  | Ttype%=1:. Set |
000094b0  68 69 67 68 2d 74 6f 2d  6c 6f 77 20 74 79 70 65  |high-to-low type|
000094c0  20 6f 66 20 64 61 74 61  0d 1f 40 32 20 7f 20 3a  | of data..@2 . :|
000094d0  20 f2 65 72 72 6f 72 28  2d 31 2c 22 54 68 69 73  | .error(-1,"This|
000094e0  20 69 73 20 6e 6f 74 20  61 20 54 49 46 46 20 66  | is not a TIFF f|
000094f0  69 6c 65 20 21 22 29 3a  3d a3 0d 1f 4a 05 cb 0d  |ile !"):=...J...|
00009500  1f 54 2b 76 65 72 73 69  6f 6e 25 3d a4 74 69 66  |.T+version%=.tif|
00009510  66 28 33 29 3a f4 20 54  49 46 46 20 76 65 72 73  |f(3):. TIFF vers|
00009520  69 6f 6e 20 6e 75 6d 62  65 72 0d 1f 5e 50 e7 76  |ion number..^P.v|
00009530  65 72 73 69 6f 6e 25 3c  3e 34 32 20 8c 20 f2 65  |ersion%<>42 . .e|
00009540  72 72 6f 72 28 2d 31 2c  22 49 20 63 61 6e 6e 6f  |rror(-1,"I canno|
00009550  74 20 68 61 6e 64 6c 65  20 74 68 69 73 20 54 49  |t handle this TI|
00009560  46 46 20 76 65 72 73 69  6f 6e 27 73 20 69 6d 61  |FF version's ima|
00009570  67 65 73 20 21 22 29 3a  3d a3 0d 1f 68 2b 6f 66  |ges !"):=...h+of|
00009580  66 46 49 46 44 25 3d a4  74 69 66 66 28 34 29 3a  |fFIFD%=.tiff(4):|
00009590  f4 20 4f 66 66 73 65 74  20 74 6f 20 66 69 72 73  |. Offset to firs|
000095a0  74 20 49 46 44 0d 1f 72  29 f2 69 70 74 72 28 46  |t IFD..r).iptr(F|
000095b0  31 25 2c 6f 66 66 46 49  46 44 25 29 3a f4 20 47  |1%,offFIFD%):. G|
000095c0  6f 20 74 6f 20 66 69 72  73 74 20 49 46 44 0d 1f  |o to first IFD..|
000095d0  7c 2d 65 6e 74 72 69 65  73 25 3d a4 74 69 66 66  ||-entries%=.tiff|
000095e0  28 33 29 3a f4 20 4e 75  6d 62 65 72 20 6f 66 20  |(3):. Number of |
000095f0  49 46 44 20 65 6e 74 72  69 65 73 0d 1f 86 25 49  |IFD entries...%I|
00009600  6e 50 61 6c 25 28 29 3d  30 3a 70 61 6c 3d a3 3a  |nPal%()=0:pal=.:|
00009610  f4 20 4e 6f 20 70 61 6c  65 74 74 65 20 79 65 74  |. No palette yet|
00009620  0d 1f 90 71 72 6f 77 73  70 65 72 73 74 72 69 70  |...qrowsperstrip|
00009630  25 3d 2d 31 3a 62 69 74  73 25 3d 31 3a 63 6f 6d  |%=-1:bits%=1:com|
00009640  70 72 65 73 73 69 6f 6e  25 3d 31 3a 70 6c 61 6e  |pression%=1:plan|
00009650  61 72 25 3d 31 3a 66 69  6c 6c 6f 72 64 65 72 25  |ar%=1:fillorder%|
00009660  3d 31 3a 67 72 65 79 75  6e 69 74 25 3d 33 3a 70  |=1:greyunit%=3:p|
00009670  69 78 73 61 6d 70 6c 65  73 25 3d 31 3a 73 6f 66  |ixsamples%=1:sof|
00009680  74 77 24 3d 22 22 3a f4  20 44 65 66 61 75 6c 74  |tw$="":. Default|
00009690  73 0d 1f 9a 15 e3 20 65  25 3d 31 20 b8 20 65 6e  |s..... e%=1 . en|
000096a0  74 72 69 65 73 25 0d 1f  a4 40 74 61 67 25 3d a4  |tries%...@tag%=.|
000096b0  74 69 66 66 28 33 29 3a  74 79 70 65 25 3d a4 74  |tiff(3):type%=.t|
000096c0  69 66 66 28 33 29 3a 6c  65 6e 67 74 68 25 3d a4  |iff(3):length%=.|
000096d0  74 69 66 66 28 34 29 3a  f4 20 54 61 67 20 61 6e  |tiff(4):. Tag an|
000096e0  64 20 69 6e 66 6f 0d 1f  ae 95 e7 6c 65 6e 67 74  |d info.....lengt|
000096f0  68 25 3e 31 20 8c 20 76  61 6c 75 65 25 3d a4 74  |h%>1 . value%=.t|
00009700  69 66 66 28 34 29 20 8b  20 e7 74 79 70 65 25 3d  |iff(4) . .type%=|
00009710  31 20 8c 20 76 61 6c 75  65 25 3d a4 74 69 66 66  |1 . value%=.tiff|
00009720  28 31 29 3a f2 69 73 6b  69 70 28 46 31 25 2c 33  |(1):.iskip(F1%,3|
00009730  29 20 8b 20 e7 74 79 70  65 25 3d 33 20 8c 20 76  |) . .type%=3 . v|
00009740  61 6c 75 65 25 3d a4 74  69 66 66 28 33 29 3a f2  |alue%=.tiff(3):.|
00009750  69 73 6b 69 70 28 46 31  25 2c 32 29 20 8b 20 76  |iskip(F1%,2) . v|
00009760  61 6c 75 65 25 3d a4 74  69 66 66 28 34 29 3a f4  |alue%=.tiff(4):.|
00009770  20 52 65 61 64 20 76 61  6c 75 65 0d 1f b8 38 63  | Read value...8c|
00009780  70 74 72 25 3d a4 69 70  74 72 28 46 31 25 29 3a  |ptr%=.iptr(F1%):|
00009790  f4 20 52 65 6d 65 6d 62  65 72 20 63 75 72 72 65  |. Remember curre|
000097a0  6e 74 20 70 6f 73 69 74  69 6f 6e 20 69 6e 20 66  |nt position in f|
000097b0  69 6c 65 0d 1f c2 0d c8  8e 20 74 61 67 25 20 ca  |ile...... tag% .|
000097c0  0d 1f cc 1a 20 c9 20 32  35 36 20 3a 20 77 69 64  |.... . 256 : wid|
000097d0  74 68 25 3d 76 61 6c 75  65 25 0d 1f d6 1b 20 c9  |th%=value%.... .|
000097e0  20 32 35 37 20 3a 20 68  65 69 67 68 74 25 3d 76  | 257 : height%=v|
000097f0  61 6c 75 65 25 0d 1f e0  19 20 c9 20 32 35 38 20  |alue%.... . 258 |
00009800  3a 20 e7 6c 65 6e 67 74  68 25 3d 31 20 8c 0d 1f  |: .length%=1 ...|
00009810  ea 1d 20 20 20 20 20 20  20 20 20 20 20 20 20 62  |..             b|
00009820  69 74 73 25 3d 76 61 6c  75 65 25 0d 1f f4 6e 20  |its%=value%...n |
00009830  20 20 20 20 20 20 20 20  20 20 20 cc 20 f2 69 70  |           . .ip|
00009840  74 72 28 46 31 25 2c 76  61 6c 75 65 25 29 3a 70  |tr(F1%,value%):p|
00009850  25 3d a4 74 69 66 66 28  74 79 70 65 25 29 3a 73  |%=.tiff(type%):s|
00009860  25 3d 32 3a 6f 6b 3d b9  3a c8 95 20 73 25 3c 3d  |%=2:ok=.:.. s%<=|
00009870  6c 65 6e 67 74 68 25 3a  6f 6b 3d 6f 6b 20 80 20  |length%:ok=ok . |
00009880  28 a4 74 69 66 66 28 74  79 70 65 25 29 3d 70 25  |(.tiff(type%)=p%|
00009890  29 3a 73 25 2b 3d 31 3a  ce 0d 1f fe 5c 20 20 20  |):s%+=1:....\   |
000098a0  20 20 20 20 20 20 20 20  20 20 e7 ac 6f 6b 20 8c  |          ..ok .|
000098b0  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 63 61  | .error(-1,"I ca|
000098c0  6e 6e 6f 74 20 68 61 6e  64 6c 65 20 75 6e 65 71  |nnot handle uneq|
000098d0  75 61 6c 20 62 69 74 73  20 70 65 72 20 73 61 6d  |ual bits per sam|
000098e0  70 6c 65 20 70 6c 61 6e  65 20 54 49 46 46 20 21  |ple plane TIFF !|
000098f0  22 29 3a 3d a3 0d 20 08  32 20 20 20 20 20 20 20  |"):=.. .2       |
00009900  20 20 20 20 20 20 f2 69  70 74 72 28 46 31 25 2c  |      .iptr(F1%,|
00009910  63 70 74 72 25 29 3a 62  69 74 73 25 3d 70 25 2a  |cptr%):bits%=p%*|
00009920  6c 65 6e 67 74 68 25 0d  20 12 11 20 20 20 20 20  |length%. ..     |
00009930  20 20 20 20 20 20 20 cd  0d 20 1c 20 20 c9 20 32  |       .. .  . 2|
00009940  35 39 20 3a 20 63 6f 6d  70 72 65 73 73 69 6f 6e  |59 : compression|
00009950  25 3d 76 61 6c 75 65 25  0d 20 26 20 20 c9 20 32  |%=value%. &  . 2|
00009960  36 32 20 3a 20 70 68 6f  74 6f 6d 65 74 72 69 63  |62 : photometric|
00009970  25 3d 76 61 6c 75 65 25  0d 20 30 1e 20 c9 20 32  |%=value%. 0. . 2|
00009980  36 36 20 3a 20 66 69 6c  6c 6f 72 64 65 72 25 3d  |66 : fillorder%=|
00009990  76 61 6c 75 65 25 0d 20  3a 6c 20 c9 20 32 37 33  |value%. :l . 273|
000099a0  20 3a 20 e7 a4 61 6c 6c  6f 63 61 74 65 28 42 5f  | : ..allocate(B_|
000099b0  73 74 72 6f 66 66 25 2c  34 2b 6c 65 6e 67 74 68  |stroff%,4+length|
000099c0  25 2a 34 29 20 8b 20 f2  65 72 72 6f 72 28 2d 31  |%*4) . .error(-1|
000099d0  2c 22 49 20 68 61 76 65  20 6e 6f 20 72 6f 6f 6d  |,"I have no room|
000099e0  20 66 6f 72 20 74 68 65  20 54 49 46 46 20 73 74  | for the TIFF st|
000099f0  72 69 70 20 6f 66 66 73  65 74 73 20 21 22 29 3a  |rip offsets !"):|
00009a00  3d a3 0d 20 44 b7 20 20  20 20 20 20 20 20 20 20  |=.. D.          |
00009a10  20 20 73 74 72 6f 66 66  25 3d 42 75 66 66 65 72  |  stroff%=Buffer|
00009a20  25 28 42 5f 73 74 72 6f  66 66 25 2c 30 29 3a 21  |%(B_stroff%,0):!|
00009a30  73 74 72 6f 66 66 25 3d  6c 65 6e 67 74 68 25 3a  |stroff%=length%:|
00009a40  e7 6c 65 6e 67 74 68 25  3d 31 20 8c 20 73 74 72  |.length%=1 . str|
00009a50  6f 66 66 25 21 34 3d 76  61 6c 75 65 25 20 8b 20  |off%!4=value% . |
00009a60  f2 69 70 74 72 28 46 31  25 2c 76 61 6c 75 65 25  |.iptr(F1%,value%|
00009a70  29 3a 70 25 3d 73 74 72  6f 66 66 25 2b 34 3a e3  |):p%=stroff%+4:.|
00009a80  20 73 25 3d 31 20 b8 20  6c 65 6e 67 74 68 25 3a  | s%=1 . length%:|
00009a90  21 70 25 3d a4 74 69 66  66 28 74 79 70 65 25 29  |!p%=.tiff(type%)|
00009aa0  3a 70 25 2b 3d 34 3a ed  3a f2 69 70 74 72 28 46  |:p%+=4:.:.iptr(F|
00009ab0  31 25 2c 63 70 74 72 25  29 0d 20 4e 1f 20 c9 20  |1%,cptr%). N. . |
00009ac0  32 37 37 20 3a 20 70 69  78 73 61 6d 70 6c 65 73  |277 : pixsamples|
00009ad0  25 3d 76 61 6c 75 65 25  0d 20 58 21 20 c9 20 32  |%=value%. X! . 2|
00009ae0  37 38 20 3a 20 72 6f 77  73 70 65 72 73 74 72 69  |78 : rowsperstri|
00009af0  70 25 3d 76 61 6c 75 65  25 0d 20 62 1b 20 c9 20  |p%=value%. b. . |
00009b00  32 38 34 20 3a 20 70 6c  61 6e 61 72 25 3d 76 61  |284 : planar%=va|
00009b10  6c 75 65 25 0d 20 6c 1d  20 c9 20 32 39 30 20 3a  |lue%. l. . 290 :|
00009b20  20 67 72 65 79 75 6e 69  74 25 3d 76 61 6c 75 65  | greyunit%=value|
00009b30  25 0d 20 76 9a 20 c9 20  32 39 31 20 3a 20 f2 69  |%. v. . 291 : .i|
00009b40  70 74 72 28 46 31 25 2c  76 61 6c 75 65 25 29 3a  |ptr(F1%,value%):|
00009b50  64 69 76 25 3d 32 2a 31  30 5e 67 72 65 79 75 6e  |div%=2*10^greyun|
00009b60  69 74 25 3a e3 20 67 25  3d 31 20 b8 20 6c 65 6e  |it%:. g%=1 . len|
00009b70  67 74 68 25 3a 63 25 3d  a4 74 69 66 66 28 74 79  |gth%:c%=.tiff(ty|
00009b80  70 65 25 29 2a 32 35 35  3a 69 25 3d 63 25 2f 64  |pe%)*255:i%=c%/d|
00009b90  69 76 25 3a 49 6e 50 61  6c 25 28 67 25 29 3d 69  |iv%:InPal%(g%)=i|
00009ba0  25 2b 28 69 25 3c 3c 38  29 2b 28 69 25 3c 3c 31  |%+(i%<<8)+(i%<<1|
00009bb0  36 29 3a ed 3a 70 61 6c  3d b9 3a f2 69 70 74 72  |6):.:pal=.:.iptr|
00009bc0  28 46 31 25 2c 63 70 74  72 25 29 0d 20 80 43 20  |(F1%,cptr%). .C |
00009bd0  c9 20 33 30 35 20 3a 20  f2 69 70 74 72 28 46 31  |. 305 : .iptr(F1|
00009be0  25 2c 76 61 6c 75 65 25  29 3a 73 6f 66 74 77 24  |%,value%):softw$|
00009bf0  3d a4 74 69 66 66 28 74  79 70 65 25 29 3a f2 69  |=.tiff(type%):.i|
00009c00  70 74 72 28 46 31 25 2c  63 70 74 72 25 29 0d 20  |ptr(F1%,cptr%). |
00009c10  8a 95 20 c9 20 33 32 30  20 3a 20 f2 69 70 74 72  |.. . 320 : .iptr|
00009c20  28 46 31 25 2c 76 61 6c  75 65 25 29 3a 49 6e 50  |(F1%,value%):InP|
00009c30  61 6c 25 28 29 3d 30 3a  e3 20 70 25 3d 31 20 b8  |al%()=0:. p%=1 .|
00009c40  20 33 3a e3 20 63 25 3d  31 20 b8 20 6c 65 6e 67  | 3:. c%=1 . leng|
00009c50  74 68 25 81 33 3a 76 25  3d a4 74 69 66 66 28 74  |th%.3:v%=.tiff(t|
00009c60  79 70 65 25 29 3a 49 6e  50 61 6c 25 28 63 25 29  |ype%):InPal%(c%)|
00009c70  3d 28 49 6e 50 61 6c 25  28 63 25 29 3c 3c 38 29  |=(InPal%(c%)<<8)|
00009c80  2b 28 76 25 3e 3e 38 29  3a ed 3a ed 3a 70 61 6c  |+(v%>>8):.:.:pal|
00009c90  3d b9 3a f2 69 70 74 72  28 46 31 25 2c 63 70 74  |=.:.iptr(F1%,cpt|
00009ca0  72 25 29 0d 20 94 05 cb  0d 20 9e 05 ed 0d 20 a8  |r%). .... .... .|
00009cb0  2d e7 72 6f 77 73 70 65  72 73 74 72 69 70 25 3d  |-.rowsperstrip%=|
00009cc0  2d 31 20 8c 20 72 6f 77  73 70 65 72 73 74 72 69  |-1 . rowsperstri|
00009cd0  70 25 3d 68 65 69 67 68  74 25 0d 20 b2 15 c8 8e  |p%=height%. ....|
00009ce0  20 63 6f 6d 70 72 65 73  73 69 6f 6e 25 20 ca 0d  | compression% ..|
00009cf0  20 bc 14 20 c9 20 31 20  3a 20 63 6f 6d 70 72 24  | .. . 1 : compr$|
00009d00  3d 22 22 0d 20 c6 20 20  c9 20 33 32 37 37 33 20  |="". .  . 32773 |
00009d10  3a 20 63 6f 6d 70 72 24  3d 22 50 61 63 6b 62 69  |: compr$="Packbi|
00009d20  74 73 22 0d 20 d0 17 20  c9 20 35 20 3a 20 63 6f  |ts". .. . 5 : co|
00009d30  6d 70 72 24 3d 22 4c 5a  57 22 0d 20 da 50 20 7f  |mpr$="LZW". .P .|
00009d40  20 3a 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | : .error(-1,"I |
00009d50  63 61 6e 6e 6f 74 20 68  61 6e 64 6c 65 20 54 49  |cannot handle TI|
00009d60  46 46 20 63 6f 6d 70 72  65 73 73 69 6f 6e 20 23  |FF compression #|
00009d70  22 2b c3 28 63 6f 6d 70  72 65 73 73 69 6f 6e 25  |"+.(compression%|
00009d80  29 2b 22 20 21 22 29 3a  3d a3 0d 20 e4 05 cb 0d  |)+" !"):=.. ....|
00009d90  20 ee b3 e7 28 28 70 69  78 73 61 6d 70 6c 65 73  | ...((pixsamples|
00009da0  25 3d 31 29 80 28 28 62  69 74 73 25 3d 31 29 84  |%=1).((bits%=1).|
00009db0  28 62 69 74 73 25 3d 32  29 84 28 62 69 74 73 25  |(bits%=2).(bits%|
00009dc0  3d 34 29 84 28 62 69 74  73 25 3d 38 29 29 29 20  |=4).(bits%=8))) |
00009dd0  84 20 28 28 62 69 74 73  25 3d 32 34 29 80 28 70  |. ((bits%=24).(p|
00009de0  69 78 73 61 6d 70 6c 65  73 25 3d 33 29 29 20 8b  |ixsamples%=3)) .|
00009df0  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 63 61  | .error(-1,"I ca|
00009e00  6e 20 6f 6e 6c 79 20 68  61 6e 64 6c 65 20 54 49  |n only handle TI|
00009e10  46 46 20 69 6d 61 67 65  73 20 77 69 74 68 20 31  |FF images with 1|
00009e20  2c 32 2c 34 2c 38 20 6f  72 20 32 34 20 62 69 74  |,2,4,8 or 24 bit|
00009e30  73 20 70 65 72 20 70 69  78 65 6c 20 21 22 29 3a  |s per pixel !"):|
00009e40  3d a3 0d 20 f8 54 e7 70  6c 61 6e 61 72 25 3c 3e  |=.. .T.planar%<>|
00009e50  31 20 8c 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |1 . .error(-1,"I|
00009e60  20 63 61 6e 6e 6f 74 20  68 61 6e 64 6c 65 20 54  | cannot handle T|
00009e70  49 46 46 20 69 6d 61 67  65 73 20 77 69 74 68 20  |IFF images with |
00009e80  6d 75 6c 74 69 70 6c 65  20 70 6c 61 6e 65 73 20  |multiple planes |
00009e90  21 22 29 3a 3d a3 0d 21  02 70 49 6e 50 61 6c 25  |!"):=..!.pInPal%|
00009ea0  28 30 29 3d 62 69 74 73  25 3a e7 70 61 6c 20 8b  |(0)=bits%:.pal .|
00009eb0  20 e7 62 69 74 73 25 3e  38 20 8b 20 e7 70 68 6f  | .bits%>8 . .pho|
00009ec0  74 6f 6d 65 74 72 69 63  25 3d 30 20 8c 20 f2 67  |tometric%=0 . .g|
00009ed0  72 65 79 70 61 6c 28 49  6e 50 61 6c 25 28 29 2c  |reypal(InPal%(),|
00009ee0  62 69 74 73 25 2c 2d 31  29 20 8b 20 f2 67 72 65  |bits%,-1) . .gre|
00009ef0  79 70 61 6c 28 49 6e 50  61 6c 25 28 29 2c 62 69  |ypal(InPal%(),bi|
00009f00  74 73 25 2c 31 29 0d 21  0c 70 e7 62 69 74 73 25  |ts%,1).!.p.bits%|
00009f10  3d 32 34 20 8c 20 63 6f  6c 6f 75 72 73 25 3d 32  |=24 . colours%=2|
00009f20  35 36 3a 73 69 7a 65 31  25 3d 77 69 64 74 68 25  |56:size1%=width%|
00009f30  2a 34 3a 73 69 7a 65 32  25 3d 30 20 8b 20 63 6f  |*4:size2%=0 . co|
00009f40  6c 6f 75 72 73 25 3d 32  5e 62 69 74 73 25 3a 73  |lours%=2^bits%:s|
00009f50  69 7a 65 31 25 3d 28 77  69 64 74 68 25 2a 62 69  |ize1%=(width%*bi|
00009f60  74 73 25 2b 37 29 81 38  3a 73 69 7a 65 32 25 3d  |ts%+7).8:size2%=|
00009f70  77 69 64 74 68 25 0d 21  16 27 f2 73 65 74 28 77  |width%.!.'.set(w|
00009f80  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 63 6f  |idth%,height%,co|
00009f90  6c 6f 75 72 73 25 2c 4d  6f 64 65 25 29 0d 21 20  |lours%,Mode%).! |
00009fa0  15 c8 8e 20 63 6f 6d 70  72 65 73 73 69 6f 6e 25  |... compression%|
00009fb0  20 ca 0d 21 2a 24 20 c9  20 31 20 3a 20 73 69 7a  | ..!*$ . 1 : siz|
00009fc0  65 33 25 3d 30 3a f4 20  4e 6f 20 74 65 6d 70 20  |e3%=0:. No temp |
00009fd0  62 75 66 66 65 72 0d 21  34 2e 20 c9 20 33 32 37  |buffer.!4. . 327|
00009fe0  37 33 20 3a 20 73 69 7a  65 33 25 3d 31 30 32 34  |73 : size3%=1024|
00009ff0  3a f4 20 53 6d 61 6c 6c  20 74 65 6d 70 20 62 75  |:. Small temp bu|
0000a000  66 66 65 72 0d 21 3e 47  20 c9 20 35 20 3a 20 73  |ffer.!>G . 5 : s|
0000a010  69 7a 65 33 25 3d 28 28  77 69 64 74 68 25 2a 62  |ize3%=((width%*b|
0000a020  69 74 73 25 2b 37 29 81  38 29 2a 72 6f 77 73 70  |its%+7).8)*rowsp|
0000a030  65 72 73 74 72 69 70 25  3a f4 20 54 65 6d 70 20  |erstrip%:. Temp |
0000a040  66 6f 72 20 31 20 73 74  72 69 70 0d 21 48 70 20  |for 1 strip.!Hp |
0000a050  20 20 20 20 20 20 20 20  20 e7 a4 61 6c 6c 6f 63  |         ..alloc|
0000a060  61 74 65 28 42 5f 6c 7a  77 74 61 62 6c 65 25 2c  |ate(B_lzwtable%,|
0000a070  33 32 2a 31 30 32 34 29  20 8b 20 f2 65 72 72 6f  |32*1024) . .erro|
0000a080  72 28 2d 31 2c 22 49 20  68 61 76 65 20 6e 6f 20  |r(-1,"I have no |
0000a090  72 6f 6f 6d 20 66 6f 72  20 74 68 65 20 4c 5a 57  |room for the LZW|
0000a0a0  20 64 65 63 6f 6d 70 72  65 73 73 69 6f 6e 20 74  | decompression t|
0000a0b0  61 62 6c 65 20 21 22 29  3a 3d a3 0d 21 52 05 cb  |able !"):=..!R..|
0000a0c0  0d 21 5c 34 e7 a4 61 6c  6c 6f 63 61 74 65 5f 73  |.!\4..allocate_s|
0000a0d0  74 64 28 77 69 64 74 68  25 2c 73 69 7a 65 31 25  |td(width%,size1%|
0000a0e0  2c 73 69 7a 65 32 25 2c  73 69 7a 65 33 25 29 20  |,size2%,size3%) |
0000a0f0  8b 20 3d a3 0d 21 66 17  e7 a4 6e 65 77 5f 69 6d  |. =..!f...new_im|
0000a100  61 67 65 28 30 29 20 8b  20 3d a3 0d 21 70 3e e7  |age(0) . =..!p>.|
0000a110  62 69 74 73 25 3d 32 34  20 8c 20 63 6f 64 65 25  |bits%=24 . code%|
0000a120  3d 32 20 8b 20 e7 70 68  6f 74 6f 6d 65 74 72 69  |=2 . .photometri|
0000a130  63 25 3c 3d 31 20 8c 20  63 6f 64 65 25 3d 31 20  |c%<=1 . code%=1 |
0000a140  8b 20 63 6f 64 65 25 3d  30 0d 21 7a 2f e7 73 6f  |. code%=0.!z/.so|
0000a150  66 74 77 24 3c 3e 22 22  20 8c 20 73 6f 66 74 77  |ftw$<>"" . softw|
0000a160  24 3d c0 22 4d 61 64 65  20 62 79 20 22 2b 73 6f  |$=."Made by "+so|
0000a170  66 74 77 24 2c 32 35 29  0d 21 84 70 f2 69 6d 61  |ftw$,25).!.p.ima|
0000a180  67 65 5f 69 6e 66 6f 28  22 54 49 46 46 22 2c 77  |ge_info("TIFF",w|
0000a190  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 63 6f  |idth%,height%,co|
0000a1a0  64 65 25 2c 62 69 74 73  25 2c 4d 6f 64 65 25 2c  |de%,bits%,Mode%,|
0000a1b0  63 6f 6d 70 72 24 2c 73  6f 66 74 77 24 2c 46 6c  |compr$,softw$,Fl|
0000a1c0  65 6e 25 2d 68 65 61 64  62 79 74 65 73 25 2c 28  |en%-headbytes%,(|
0000a1d0  77 69 64 74 68 25 2a 68  65 69 67 68 74 25 2a 62  |width%*height%*b|
0000a1e0  69 74 73 25 29 81 38 29  0d 21 8e a6 f2 76 61 72  |its%).8).!...var|
0000a1f0  28 22 69 66 70 31 22 2c  73 74 72 6f 66 66 25 21  |("ifp1",stroff%!|
0000a200  34 29 3a f2 76 61 72 28  22 69 6d 67 78 22 2c 77  |4):.var("imgx",w|
0000a210  69 64 74 68 25 29 3a f2  76 61 72 28 22 69 6d 67  |idth%):.var("img|
0000a220  79 22 2c 68 65 69 67 68  74 25 29 3a f2 76 61 72  |y",height%):.var|
0000a230  28 22 72 6f 70 73 22 2c  72 6f 77 73 70 65 72 73  |("rops",rowspers|
0000a240  74 72 69 70 25 29 3a f2  76 61 72 28 22 62 69 74  |trip%):.var("bit|
0000a250  6f 22 2c 66 69 6c 6c 6f  72 64 65 72 25 29 3a f2  |o",fillorder%):.|
0000a260  76 61 72 28 22 63 6f 6d  70 22 2c 63 6f 6d 70 72  |var("comp",compr|
0000a270  65 73 73 69 6f 6e 25 29  3a e7 a4 75 6e 70 61 63  |ession%):..unpac|
0000a280  6b 28 22 54 49 46 46 22  29 20 8b 20 3d a3 0d 21  |k("TIFF") . =..!|
0000a290  98 06 3d b9 0d 21 a2 05  20 0d 21 ac 11 dd a4 74  |..=..!.. .!....t|
0000a2a0  69 66 66 28 74 79 70 65  25 29 0d 21 b6 1c f4 20  |iff(type%).!... |
0000a2b0  52 65 74 75 72 6e 73 20  74 69 66 66 20 64 61 74  |Returns tiff dat|
0000a2c0  61 20 74 79 70 65 0d 21  c0 0b ea 20 69 24 2c 62  |a type.!... i$,b|
0000a2d0  25 0d 21 ca 0e c8 8e 20  74 79 70 65 25 20 ca 0d  |%.!.... type% ..|
0000a2e0  21 d4 1d 20 c9 20 31 20  3a 20 68 65 61 64 62 79  |!.. . 1 : headby|
0000a2f0  74 65 73 25 2b 3d 31 3a  3d a4 69 62 0d 21 de 47  |tes%+=1:=.ib.!.G|
0000a300  20 c9 20 32 20 3a 20 69  24 3d 22 22 3a 62 25 3d  | . 2 : i$="":b%=|
0000a310  a4 69 62 3a c8 95 20 62  25 3c 3e 30 3a 69 24 2b  |.ib:.. b%<>0:i$+|
0000a320  3d bd 62 25 3a 62 25 3d  a4 69 62 3a ce 3a 68 65  |=.b%:b%=.ib:.:he|
0000a330  61 64 62 79 74 65 73 25  2b 3d a9 69 24 2b 31 3a  |adbytes%+=.i$+1:|
0000a340  3d 69 24 0d 21 e8 32 20  c9 20 33 20 3a 20 68 65  |=i$.!.2 . 3 : he|
0000a350  61 64 62 79 74 65 73 25  2b 3d 32 3a e7 54 74 79  |adbytes%+=2:.Tty|
0000a360  70 65 25 3d 30 20 8c 20  3d a4 69 64 6c 20 8b 20  |pe%=0 . =.idl . |
0000a370  3d a4 69 64 62 0d 21 f2  32 20 c9 20 34 20 3a 20  |=.idb.!.2 . 4 : |
0000a380  68 65 61 64 62 79 74 65  73 25 2b 3d 34 3a e7 54  |headbytes%+=4:.T|
0000a390  74 79 70 65 25 3d 30 20  8c 20 3d a4 69 77 6c 20  |type%=0 . =.iwl |
0000a3a0  8b 20 3d a4 69 77 62 0d  21 fc 0d 20 c9 20 35 20  |. =.iwb.!.. . 5 |
0000a3b0  3a 20 3d 30 0d 22 06 05  cb 0d 22 10 06 3d 30 0d  |: =0."...."..=0.|
0000a3c0  22 1a 05 20 0d 22 24 0d  dd a4 70 69 63 5f 51 52  |".. ."$...pic_QR|
0000a3d0  54 0d 22 2e 15 f4 20 4d  61 6b 65 73 20 51 52 54  |T."... Makes QRT|
0000a3e0  20 69 6d 61 67 65 0d 22  38 2e 77 69 64 74 68 25  | image."8.width%|
0000a3f0  3d a4 69 64 6c 3a 68 65  69 67 68 74 25 3d a4 69  |=.idl:height%=.i|
0000a400  64 6c 3a f4 20 52 65 61  64 20 72 65 73 6f 6c 75  |dl:. Read resolu|
0000a410  74 69 6f 6e 0d 22 42 22  f2 73 65 74 28 77 69 64  |tion."B".set(wid|
0000a420  74 68 25 2c 68 65 69 67  68 74 25 2c 32 35 36 2c  |th%,height%,256,|
0000a430  4d 6f 64 65 25 29 0d 22  4c 33 e7 a4 61 6c 6c 6f  |Mode%)."L3..allo|
0000a440  63 61 74 65 5f 73 74 64  28 77 69 64 74 68 25 2c  |cate_std(width%,|
0000a450  77 69 64 74 68 25 2a 34  2c 30 2c 77 69 64 74 68  |width%*4,0,width|
0000a460  25 2a 33 29 20 8b 20 3d  a3 0d 22 56 17 e7 a4 6e  |%*3) . =.."V...n|
0000a470  65 77 5f 69 6d 61 67 65  28 30 29 20 8b 20 3d a3  |ew_image(0) . =.|
0000a480  0d 22 60 2e 49 6e 50 61  6c 25 28 30 29 3d 32 34  |."`.InPal%(0)=24|
0000a490  3a f4 20 4e 6f 20 70 61  6c 65 74 74 65 2c 20 70  |:. No palette, p|
0000a4a0  75 72 65 20 32 34 2d 62  69 74 20 52 47 42 0d 22  |ure 24-bit RGB."|
0000a4b0  6a 3e f2 69 6d 61 67 65  5f 69 6e 66 6f 28 22 51  |j>.image_info("Q|
0000a4c0  52 54 20 52 41 57 22 2c  77 69 64 74 68 25 2c 68  |RT RAW",width%,h|
0000a4d0  65 69 67 68 74 25 2c 32  2c 32 34 2c 4d 6f 64 65  |eight%,2,24,Mode|
0000a4e0  25 2c 22 22 2c 22 22 2c  31 2c 31 29 0d 22 74 50  |%,"","",1,1)."tP|
0000a4f0  f2 76 61 72 28 22 69 66  70 31 22 2c 34 29 3a f2  |.var("ifp1",4):.|
0000a500  76 61 72 28 22 69 6d 67  78 22 2c 77 69 64 74 68  |var("imgx",width|
0000a510  25 29 3a f2 76 61 72 28  22 69 6d 67 79 22 2c 68  |%):.var("imgy",h|
0000a520  65 69 67 68 74 25 29 3a  e7 a4 75 6e 70 61 63 6b  |eight%):..unpack|
0000a530  28 22 51 52 54 22 29 20  8b 20 3d a3 0d 22 7e 06  |("QRT") . =.."~.|
0000a540  3d b9 0d 22 88 05 20 0d  22 92 0f dd a4 70 69 63  |=..".. ."....pic|
0000a550  5f 41 52 56 49 53 0d 22  9c 17 f4 20 4d 61 6b 65  |_ARVIS."... Make|
0000a560  73 20 41 72 56 69 73 20  69 6d 61 67 65 0d 22 a6  |s ArVis image.".|
0000a570  67 f2 69 70 74 72 28 46  31 25 2c 34 29 3a f2 69  |g.iptr(F1%,4):.i|
0000a580  70 74 72 28 46 31 25 2c  a4 69 77 6c 2d 34 29 3a  |ptr(F1%,.iwl-4):|
0000a590  f2 69 73 6b 69 70 28 46  31 25 2c 31 36 29 3a 77  |.iskip(F1%,16):w|
0000a5a0  69 64 74 68 25 3d a4 69  77 6c 2a 34 2b 34 3a 68  |idth%=.iwl*4+4:h|
0000a5b0  65 69 67 68 74 25 3d a4  69 77 6c 2b 31 3a f4 20  |eight%=.iwl+1:. |
0000a5c0  47 65 74 20 77 69 64 74  68 20 61 6e 64 20 68 65  |Get width and he|
0000a5d0  69 67 68 74 0d 22 b0 87  f2 69 73 6b 69 70 28 46  |ight."...iskip(F|
0000a5e0  31 25 2c 38 29 3a f2 69  73 6b 69 70 28 46 31 25  |1%,8):.iskip(F1%|
0000a5f0  2c a4 69 77 6c 2d 33 36  29 3a f2 69 70 74 72 28  |,.iwl-36):.iptr(|
0000a600  46 32 25 2c 34 29 3a f2  69 70 74 72 28 46 32 25  |F2%,4):.iptr(F2%|
0000a610  2c a4 69 77 6c 66 28 46  32 25 29 2d 34 29 3a f2  |,.iwlf(F2%)-4):.|
0000a620  69 73 6b 69 70 28 46 32  25 2c 33 32 29 3a f2 69  |iskip(F2%,32):.i|
0000a630  73 6b 69 70 28 46 32 25  2c a4 69 77 6c 66 28 46  |skip(F2%,.iwlf(F|
0000a640  32 25 29 2d 33 36 29 3a  f4 20 47 6f 20 74 6f 20  |2%)-36):. Go to |
0000a650  73 70 72 69 74 65 20 64  61 74 61 0d 22 ba 2d 63  |sprite data.".-c|
0000a660  6f 6c 62 69 74 73 25 3d  31 35 3a 63 6f 6c 6f 75  |olbits%=15:colou|
0000a670  72 73 25 3d 32 5e 63 6f  6c 62 69 74 73 25 3a f4  |rs%=2^colbits%:.|
0000a680  20 43 6f 6c 6f 75 72 73  0d 22 c4 22 f2 73 65 74  | Colours.".".set|
0000a690  28 77 69 64 74 68 25 2c  68 65 69 67 68 74 25 2c  |(width%,height%,|
0000a6a0  32 35 36 2c 4d 6f 64 65  25 29 0d 22 ce 33 e7 a4  |256,Mode%).".3..|
0000a6b0  61 6c 6c 6f 63 61 74 65  5f 73 74 64 28 77 69 64  |allocate_std(wid|
0000a6c0  74 68 25 2c 77 69 64 74  68 25 2a 34 2c 30 2c 77  |th%,width%*4,0,w|
0000a6d0  69 64 74 68 25 2a 32 29  20 8b 20 3d a3 0d 22 d8  |idth%*2) . =..".|
0000a6e0  17 e7 a4 6e 65 77 5f 69  6d 61 67 65 28 30 29 20  |...new_image(0) |
0000a6f0  8b 20 3d a3 0d 22 e2 2e  49 6e 50 61 6c 25 28 30  |. =.."..InPal%(0|
0000a700  29 3d 31 35 3a f4 20 4e  6f 20 70 61 6c 65 74 74  |)=15:. No palett|
0000a710  65 2c 20 70 75 72 65 20  31 35 2d 62 69 74 20 52  |e, pure 15-bit R|
0000a720  47 42 0d 22 ec 3c f2 69  6d 61 67 65 5f 69 6e 66  |GB.".<.image_inf|
0000a730  6f 28 22 41 72 56 69 73  22 2c 77 69 64 74 68 25  |o("ArVis",width%|
0000a740  2c 68 65 69 67 68 74 25  2c 32 2c 31 35 2c 4d 6f  |,height%,2,15,Mo|
0000a750  64 65 25 2c 22 22 2c 22  22 2c 31 2c 31 29 0d 22  |de%,"","",1,1)."|
0000a760  f6 73 f2 76 61 72 28 22  69 66 70 31 22 2c a4 69  |.s.var("ifp1",.i|
0000a770  70 74 72 28 46 31 25 29  29 3a f2 76 61 72 28 22  |ptr(F1%)):.var("|
0000a780  69 66 70 32 22 2c a4 69  70 74 72 28 46 32 25 29  |ifp2",.iptr(F2%)|
0000a790  29 3a f2 76 61 72 28 22  69 6d 67 78 22 2c 77 69  |):.var("imgx",wi|
0000a7a0  64 74 68 25 29 3a f2 76  61 72 28 22 69 6d 67 79  |dth%):.var("imgy|
0000a7b0  22 2c 68 65 69 67 68 74  25 29 3a e7 a4 75 6e 70  |",height%):..unp|
0000a7c0  61 63 6b 28 22 41 52 56  49 53 22 29 20 8b 20 3d  |ack("ARVIS") . =|
0000a7d0  a3 0d 23 00 06 3d b9 0d  23 0a 05 20 0d 23 14 0f  |..#..=..#.. .#..|
0000a7e0  dd a4 70 69 63 5f 43 4c  45 41 52 0d 23 1e 17 f4  |..pic_CLEAR.#...|
0000a7f0  20 4d 61 6b 65 73 20 43  6c 65 61 72 20 69 6d 61  | Makes Clear ima|
0000a800  67 65 0d 23 28 3f 6d 61  6b 65 72 24 3d a4 69 73  |ge.#(?maker$=.is|
0000a810  74 72 69 6e 67 28 46 31  25 2c 2d 31 29 3a 76 65  |tring(F1%,-1):ve|
0000a820  72 73 69 6f 6e 25 3d a4  69 77 6c 3a f4 20 43 72  |rsion%=.iwl:. Cr|
0000a830  65 61 74 6f 72 20 69 6e  66 6f 72 6d 61 74 69 6f  |eator informatio|
0000a840  6e 0d 23 32 3c 77 69 64  74 68 25 3d a4 69 77 6c  |n.#2<width%=.iwl|
0000a850  3a 68 65 69 67 68 74 25  3d a4 69 77 6c 3a 62 69  |:height%=.iwl:bi|
0000a860  74 73 25 3d a4 69 77 6c  3a f4 20 57 69 64 74 68  |ts%=.iwl:. Width|
0000a870  2c 20 68 65 69 67 68 74  2c 20 62 70 70 0d 23 3c  |, height, bpp.#<|
0000a880  54 e7 62 69 74 73 25 3c  3d 38 20 8c 20 63 6f 6c  |T.bits%<=8 . col|
0000a890  62 69 74 73 25 3d 62 69  74 73 25 3a f2 72 65 61  |bits%=bits%:.rea|
0000a8a0  64 32 34 70 61 6c 28 46  31 25 2c 49 6e 50 61 6c  |d24pal(F1%,InPal|
0000a8b0  25 28 29 2c 32 5e 62 69  74 73 25 2c 30 2c 31 2c  |%(),2^bits%,0,1,|
0000a8c0  32 2c 33 29 20 8b 20 63  6f 6c 62 69 74 73 25 3d  |2,3) . colbits%=|
0000a8d0  38 0d 23 46 24 49 6e 50  61 6c 25 28 30 29 3d 62  |8.#F$InPal%(0)=b|
0000a8e0  69 74 73 25 3a f4 20 42  69 74 73 20 70 65 72 20  |its%:. Bits per |
0000a8f0  70 69 78 65 6c 0d 23 50  2d e7 62 69 74 73 25 3c  |pixel.#P-.bits%<|
0000a900  3d 38 20 8c 20 73 69 7a  65 25 3d 77 69 64 74 68  |=8 . size%=width|
0000a910  25 20 8b 20 73 69 7a 65  25 3d 77 69 64 74 68 25  |% . size%=width%|
0000a920  2a 34 0d 23 5a 29 f2 73  65 74 28 77 69 64 74 68  |*4.#Z).set(width|
0000a930  25 2c 68 65 69 67 68 74  25 2c 32 5e 63 6f 6c 62  |%,height%,2^colb|
0000a940  69 74 73 25 2c 4d 6f 64  65 25 29 0d 23 64 29 e7  |its%,Mode%).#d).|
0000a950  a4 61 6c 6c 6f 63 61 74  65 5f 73 74 64 28 77 69  |.allocate_std(wi|
0000a960  64 74 68 25 2c 73 69 7a  65 25 2c 30 2c 30 29 20  |dth%,size%,0,0) |
0000a970  8b 20 3d a3 0d 23 6e 17  e7 a4 6e 65 77 5f 69 6d  |. =..#n...new_im|
0000a980  61 67 65 28 30 29 20 8b  20 3d a3 0d 23 78 7d f2  |age(0) . =..#x}.|
0000a990  69 6d 61 67 65 5f 69 6e  66 6f 28 22 43 6c 65 61  |image_info("Clea|
0000a9a0  72 22 2c 77 69 64 74 68  25 2c 68 65 69 67 68 74  |r",width%,height|
0000a9b0  25 2c 63 6f 64 65 25 2c  62 69 74 73 25 2c 4d 6f  |%,code%,bits%,Mo|
0000a9c0  64 65 25 2c 22 22 2c 22  62 79 20 22 2b 6d 61 6b  |de%,"","by "+mak|
0000a9d0  65 72 24 2b 22 20 22 2b  c3 28 76 65 72 73 69 6f  |er$+" "+.(versio|
0000a9e0  6e 25 81 31 30 30 29 2b  22 2e 22 2b c2 22 30 22  |n%.100)+"."+."0"|
0000a9f0  2b c3 28 76 65 72 73 69  6f 6e 25 83 31 30 30 29  |+.(version%.100)|
0000aa00  2c 32 29 2c 31 2c 31 29  0d 23 82 5b f2 76 61 72  |,2),1,1).#.[.var|
0000aa10  28 22 69 66 70 31 22 2c  a4 69 70 74 72 28 46 31  |("ifp1",.iptr(F1|
0000aa20  25 29 29 3a f2 76 61 72  28 22 69 6d 67 78 22 2c  |%)):.var("imgx",|
0000aa30  77 69 64 74 68 25 29 3a  f2 76 61 72 28 22 69 6d  |width%):.var("im|
0000aa40  67 79 22 2c 68 65 69 67  68 74 25 29 3a e7 a4 75  |gy",height%):..u|
0000aa50  6e 70 61 63 6b 28 22 43  4c 45 41 52 22 29 20 8b  |npack("CLEAR") .|
0000aa60  20 3d a3 0d 23 8c 06 3d  b9 0d 23 96 05 20 0d 23  | =..#..=..#.. .#|
0000aa70  a0 0d dd a4 70 69 63 5f  4d 54 56 0d 23 aa 15 f4  |....pic_MTV.#...|
0000aa80  20 4d 61 6b 65 73 20 4d  54 56 20 69 6d 61 67 65  | Makes MTV image|
0000aa90  0d 23 b4 39 73 69 7a 65  24 3d a4 69 73 74 72 69  |.#.9size$=.istri|
0000aaa0  6e 67 28 46 31 25 2c 2d  31 29 3a f4 20 53 74 72  |ng(F1%,-1):. Str|
0000aab0  69 6e 67 20 63 6f 6e 74  61 69 6e 69 6e 67 20 72  |ing containing r|
0000aac0  65 73 6f 6c 75 74 69 6f  6e 0d 23 be 3d 77 69 64  |esolution.#.=wid|
0000aad0  74 68 25 3d bb 73 69 7a  65 24 3a 68 65 69 67 68  |th%=.size$:heigh|
0000aae0  74 25 3d bb 28 c1 73 69  7a 65 24 2c a7 73 69 7a  |t%=.(.size$,.siz|
0000aaf0  65 24 2c 22 20 22 29 29  29 3a f4 20 52 65 73 6f  |e$," "))):. Reso|
0000ab00  6c 75 74 69 6f 6e 0d 23  c8 22 f2 73 65 74 28 77  |lution.#.".set(w|
0000ab10  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 32 35  |idth%,height%,25|
0000ab20  36 2c 4d 6f 64 65 25 29  0d 23 d2 2c e7 a4 61 6c  |6,Mode%).#.,..al|
0000ab30  6c 6f 63 61 74 65 5f 73  74 64 28 77 69 64 74 68  |locate_std(width|
0000ab40  25 2c 77 69 64 74 68 25  2a 34 2c 30 2c 30 29 20  |%,width%*4,0,0) |
0000ab50  8b 20 3d a3 0d 23 dc 17  e7 a4 6e 65 77 5f 69 6d  |. =..#....new_im|
0000ab60  61 67 65 28 30 29 20 8b  20 3d a3 0d 23 e6 2e 49  |age(0) . =..#..I|
0000ab70  6e 50 61 6c 25 28 30 29  3d 32 34 3a f4 20 4e 6f  |nPal%(0)=24:. No|
0000ab80  20 70 61 6c 65 74 74 65  2c 20 70 75 72 65 20 32  | palette, pure 2|
0000ab90  34 2d 62 69 74 20 52 47  42 0d 23 f0 3a f2 69 6d  |4-bit RGB.#.:.im|
0000aba0  61 67 65 5f 69 6e 66 6f  28 22 4d 54 56 22 2c 77  |age_info("MTV",w|
0000abb0  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 32 2c  |idth%,height%,2,|
0000abc0  32 34 2c 4d 6f 64 65 25  2c 22 22 2c 22 22 2c 31  |24,Mode%,"","",1|
0000abd0  2c 31 29 0d 23 fa 59 f2  76 61 72 28 22 69 66 70  |,1).#.Y.var("ifp|
0000abe0  31 22 2c a4 69 70 74 72  28 46 31 25 29 29 3a f2  |1",.iptr(F1%)):.|
0000abf0  76 61 72 28 22 69 6d 67  78 22 2c 77 69 64 74 68  |var("imgx",width|
0000ac00  25 29 3a f2 76 61 72 28  22 69 6d 67 79 22 2c 68  |%):.var("imgy",h|
0000ac10  65 69 67 68 74 25 29 3a  e7 a4 75 6e 70 61 63 6b  |eight%):..unpack|
0000ac20  28 22 4d 54 56 22 29 20  8b 20 3d a3 0d 24 04 06  |("MTV") . =..$..|
0000ac30  3d b9 0d 24 0e 05 20 0d  24 18 11 dd a4 70 69 63  |=..$.. .$....pic|
0000ac40  5f 43 41 44 53 4f 46 54  0d 24 22 19 f4 20 4d 61  |_CADSOFT.$".. Ma|
0000ac50  6b 65 73 20 43 61 64 73  6f 66 74 20 69 6d 61 67  |kes Cadsoft imag|
0000ac60  65 0d 24 2c 42 f2 69 70  74 72 28 46 31 25 2c 39  |e.$,B.iptr(F1%,9|
0000ac70  29 3a 77 69 64 74 68 25  3d 28 a4 69 64 6c 2b 32  |):width%=(.idl+2|
0000ac80  29 2f 32 3a 68 65 69 67  68 74 25 3d 28 a4 69 64  |)/2:height%=(.id|
0000ac90  6c 2b 32 29 2f 32 3a f4  20 52 65 73 6f 6c 75 74  |l+2)/2:. Resolut|
0000aca0  69 6f 6e 0d 24 36 35 f2  69 70 74 72 28 46 31 25  |ion.$65.iptr(F1%|
0000acb0  2c 32 36 29 3a 63 6f 6d  70 72 65 73 73 69 6f 6e  |,26):compression|
0000acc0  25 3d a4 69 62 3a f4 20  43 6f 6d 70 72 65 73 73  |%=.ib:. Compress|
0000acd0  69 6f 6e 20 63 6f 64 65  0d 24 40 7b f2 69 70 74  |ion code.$@{.ipt|
0000ace0  72 28 46 31 25 2c 35 31  32 29 3a 49 6e 50 61 6c  |r(F1%,512):InPal|
0000acf0  25 28 29 3d 30 3a 49 6e  50 61 6c 25 28 30 29 3d  |%()=0:InPal%(0)=|
0000ad00  38 3a e3 20 72 67 62 25  3d 31 36 20 b8 20 30 20  |8:. rgb%=16 . 0 |
0000ad10  88 20 2d 38 3a e3 20 63  25 3d 31 20 b8 20 32 35  |. -8:. c%=1 . 25|
0000ad20  36 3a 49 6e 50 61 6c 25  28 63 25 29 3d 49 6e 50  |6:InPal%(c%)=InP|
0000ad30  61 6c 25 28 63 25 29 20  84 20 28 a4 69 62 3c 3c  |al%(c%) . (.ib<<|
0000ad40  72 67 62 25 29 3a ed 3a  ed 3a f4 20 50 61 6c 65  |rgb%):.:.:. Pale|
0000ad50  74 74 65 0d 24 4a 22 f2  73 65 74 28 77 69 64 74  |tte.$J".set(widt|
0000ad60  68 25 2c 68 65 69 67 68  74 25 2c 32 35 36 2c 4d  |h%,height%,256,M|
0000ad70  6f 64 65 25 29 0d 24 54  2a e7 a4 61 6c 6c 6f 63  |ode%).$T*..alloc|
0000ad80  61 74 65 5f 73 74 64 28  77 69 64 74 68 25 2c 77  |ate_std(width%,w|
0000ad90  69 64 74 68 25 2c 30 2c  30 29 20 8b 20 3d a3 0d  |idth%,0,0) . =..|
0000ada0  24 5e 17 e7 a4 6e 65 77  5f 69 6d 61 67 65 28 30  |$^...new_image(0|
0000adb0  29 20 8b 20 3d a3 0d 24  68 35 e7 63 6f 6d 70 72  |) . =..$h5.compr|
0000adc0  65 73 73 69 6f 6e 25 3d  32 20 8c 20 63 6f 6d 70  |ession%=2 . comp|
0000add0  72 24 3d 22 52 75 6e 20  6c 65 6e 67 74 68 22 20  |r$="Run length" |
0000ade0  8b 20 63 6f 6d 70 72 24  3d 22 22 0d 24 72 57 f2  |. compr$="".$rW.|
0000adf0  69 6d 61 67 65 5f 69 6e  66 6f 28 22 43 61 64 53  |image_info("CadS|
0000ae00  6f 66 74 22 2c 77 69 64  74 68 25 2c 68 65 69 67  |oft",width%,heig|
0000ae10  68 74 25 2c 30 2c 38 2c  4d 6f 64 65 25 2c 63 6f  |ht%,0,8,Mode%,co|
0000ae20  6d 70 72 24 2c 22 22 2c  46 6c 65 6e 25 2d 26 36  |mpr$,"",Flen%-&6|
0000ae30  30 30 2c 77 69 64 74 68  25 2a 68 65 69 67 68 74  |00,width%*height|
0000ae40  25 29 0d 24 7c 71 f2 76  61 72 28 22 69 66 70 31  |%).$|q.var("ifp1|
0000ae50  22 2c 26 36 30 30 29 3a  f2 76 61 72 28 22 69 6d  |",&600):.var("im|
0000ae60  67 78 22 2c 77 69 64 74  68 25 29 3a f2 76 61 72  |gx",width%):.var|
0000ae70  28 22 69 6d 67 79 22 2c  68 65 69 67 68 74 25 29  |("imgy",height%)|
0000ae80  3a f2 76 61 72 28 22 63  6f 6d 70 22 2c 63 6f 6d  |:.var("comp",com|
0000ae90  70 72 65 73 73 69 6f 6e  25 29 3a e7 a4 75 6e 70  |pression%):..unp|
0000aea0  61 63 6b 28 22 43 41 44  53 4f 46 54 22 29 20 8b  |ack("CADSOFT") .|
0000aeb0  20 3d a3 0d 24 86 06 3d  b9 0d 24 90 05 20 0d 24  | =..$..=..$.. .$|
0000aec0  9a 0f dd a4 70 69 63 5f  49 52 4c 41 4d 0d 24 a4  |....pic_IRLAM.$.|
0000aed0  17 f4 20 4d 61 6b 65 73  20 49 72 6c 61 6d 20 69  |.. Makes Irlam i|
0000aee0  6d 61 67 65 0d 24 ae 44  69 64 24 3d a4 69 73 74  |mage.$.Did$=.ist|
0000aef0  72 69 6e 67 28 46 31 25  2c 2d 31 29 3a 70 25 3d  |ring(F1%,-1):p%=|
0000af00  a7 69 64 24 2c 22 3a 22  29 3a f4 20 53 74 72 69  |.id$,":"):. Stri|
0000af10  6e 67 20 63 6f 6e 74 61  69 6e 69 6e 67 20 69 6d  |ng containing im|
0000af20  61 67 65 20 69 6e 66 6f  0d 24 b8 33 77 69 64 74  |age info.$.3widt|
0000af30  68 25 3d bb c1 69 64 24  2c 70 25 2b 31 29 3a 68  |h%=..id$,p%+1):h|
0000af40  65 69 67 68 74 25 3d bb  c1 69 64 24 2c 70 25 2b  |eight%=..id$,p%+|
0000af50  32 2b a9 c3 77 69 64 74  68 25 29 0d 24 c2 22 f2  |2+..width%).$.".|
0000af60  73 65 74 28 77 69 64 74  68 25 2c 68 65 69 67 68  |set(width%,heigh|
0000af70  74 25 2c 32 35 36 2c 4d  6f 64 65 25 29 0d 24 cc  |t%,256,Mode%).$.|
0000af80  33 e7 a4 61 6c 6c 6f 63  61 74 65 5f 73 74 64 28  |3..allocate_std(|
0000af90  77 69 64 74 68 25 2c 77  69 64 74 68 25 2a 34 2c  |width%,width%*4,|
0000afa0  30 2c 77 69 64 74 68 25  2a 33 29 20 8b 20 3d a3  |0,width%*3) . =.|
0000afb0  0d 24 d6 17 e7 a4 6e 65  77 5f 69 6d 61 67 65 28  |.$....new_image(|
0000afc0  30 29 20 8b 20 3d a3 0d  24 e0 2e 49 6e 50 61 6c  |0) . =..$..InPal|
0000afd0  25 28 30 29 3d 32 34 3a  f4 20 4e 6f 20 70 61 6c  |%(0)=24:. No pal|
0000afe0  65 74 74 65 2c 20 70 75  72 65 20 32 34 2d 62 69  |ette, pure 24-bi|
0000aff0  74 20 52 47 42 0d 24 ea  3c f2 69 6d 61 67 65 5f  |t RGB.$.<.image_|
0000b000  69 6e 66 6f 28 22 49 72  6c 61 6d 22 2c 77 69 64  |info("Irlam",wid|
0000b010  74 68 25 2c 68 65 69 67  68 74 25 2c 32 2c 32 34  |th%,height%,2,24|
0000b020  2c 4d 6f 64 65 25 2c 22  22 2c 22 22 2c 31 2c 31  |,Mode%,"","",1,1|
0000b030  29 0d 24 f4 5b f2 76 61  72 28 22 69 66 70 31 22  |).$.[.var("ifp1"|
0000b040  2c a4 69 70 74 72 28 46  31 25 29 29 3a f2 76 61  |,.iptr(F1%)):.va|
0000b050  72 28 22 69 6d 67 78 22  2c 77 69 64 74 68 25 29  |r("imgx",width%)|
0000b060  3a f2 76 61 72 28 22 69  6d 67 79 22 2c 68 65 69  |:.var("imgy",hei|
0000b070  67 68 74 25 29 3a e7 a4  75 6e 70 61 63 6b 28 22  |ght%):..unpack("|
0000b080  49 52 4c 41 4d 22 29 20  8b 20 3d a3 0d 24 fe 06  |IRLAM") . =..$..|
0000b090  3d b9 0d 25 08 04 0d 25  12 0d dd a4 70 69 63 5f  |=..%...%....pic_|
0000b0a0  42 4d 50 0d 25 1c 21 f4  20 4d 61 6b 65 73 20 42  |BMP.%.!. Makes B|
0000b0b0  4d 50 20 28 57 69 6e 64  6f 77 73 20 33 29 20 69  |MP (Windows 3) i|
0000b0c0  6d 61 67 65 0d 25 26 31  f2 69 70 74 72 28 46 31  |mage.%&1.iptr(F1|
0000b0d0  25 2c 31 38 29 3a 77 69  64 74 68 25 3d a4 69 77  |%,18):width%=.iw|
0000b0e0  6c 3a 68 65 69 67 68 74  25 3d a4 69 77 6c 3a f4  |l:height%=.iwl:.|
0000b0f0  20 53 69 7a 65 0d 25 30  2f f2 69 70 74 72 28 46  | Size.%0/.iptr(F|
0000b100  31 25 2c 32 38 29 3a 63  6f 6c 62 69 74 73 25 3d  |1%,28):colbits%=|
0000b110  a4 69 62 3a f4 20 42 69  74 73 20 70 65 72 20 70  |.ib:. Bits per p|
0000b120  69 78 65 6c 0d 25 3a 9d  e7 28 63 6f 6c 62 69 74  |ixel.%:..(colbit|
0000b130  73 25 3d 31 29 84 28 63  6f 6c 62 69 74 73 25 3d  |s%=1).(colbits%=|
0000b140  32 29 84 28 63 6f 6c 62  69 74 73 25 3d 34 29 84  |2).(colbits%=4).|
0000b150  28 63 6f 6c 62 69 74 73  25 3d 38 29 20 8b 20 f2  |(colbits%=8) . .|
0000b160  65 72 72 6f 72 28 2d 31  2c 22 49 20 63 61 6e 20  |error(-1,"I can |
0000b170  6f 6e 6c 79 20 68 61 6e  64 6c 65 20 31 2c 32 2c  |only handle 1,2,|
0000b180  34 20 6f 72 20 38 20 62  69 74 20 70 65 72 20 70  |4 or 8 bit per p|
0000b190  69 78 65 6c 20 42 4d 50  20 69 6d 61 67 65 73 20  |ixel BMP images |
0000b1a0  21 20 54 68 69 73 20 69  73 20 22 2b c3 63 6f 6c  |! This is "+.col|
0000b1b0  62 69 74 73 25 2b 22 20  62 70 70 2e 22 29 3a 3d  |bits%+" bpp."):=|
0000b1c0  a3 0d 25 44 39 72 6f 77  62 79 74 65 73 25 3d 28  |..%D9rowbytes%=(|
0000b1d0  63 6f 6c 62 69 74 73 25  2a 77 69 64 74 68 25 2b  |colbits%*width%+|
0000b1e0  37 29 81 38 3a f4 20 42  79 74 65 73 20 70 65 72  |7).8:. Bytes per|
0000b1f0  20 70 69 78 65 6c 20 72  6f 77 0d 25 4e 3d f2 69  | pixel row.%N=.i|
0000b200  70 74 72 28 46 31 25 2c  35 34 29 3a f2 72 65 61  |ptr(F1%,54):.rea|
0000b210  64 32 34 70 61 6c 28 46  31 25 2c 49 6e 50 61 6c  |d24pal(F1%,InPal|
0000b220  25 28 29 2c 32 5e 63 6f  6c 62 69 74 73 25 2c 32  |%(),2^colbits%,2|
0000b230  2c 31 2c 30 2c 34 29 0d  25 58 16 49 6e 50 61 6c  |,1,0,4).%X.InPal|
0000b240  25 28 30 29 3d 63 6f 6c  62 69 74 73 25 0d 25 62  |%(0)=colbits%.%b|
0000b250  29 f2 73 65 74 28 77 69  64 74 68 25 2c 68 65 69  |).set(width%,hei|
0000b260  67 68 74 25 2c 32 5e 63  6f 6c 62 69 74 73 25 2c  |ght%,2^colbits%,|
0000b270  4d 6f 64 65 25 29 0d 25  6c 32 e7 a4 61 6c 6c 6f  |Mode%).%l2..allo|
0000b280  63 61 74 65 5f 73 74 64  28 77 69 64 74 68 25 2c  |cate_std(width%,|
0000b290  72 6f 77 62 79 74 65 73  25 2c 77 69 64 74 68 25  |rowbytes%,width%|
0000b2a0  2c 30 29 20 8b 20 3d a3  0d 25 76 17 e7 a4 6e 65  |,0) . =..%v...ne|
0000b2b0  77 5f 69 6d 61 67 65 28  30 29 20 8b 20 3d a3 0d  |w_image(0) . =..|
0000b2c0  25 80 4a f2 69 6d 61 67  65 5f 69 6e 66 6f 28 22  |%.J.image_info("|
0000b2d0  57 69 6e 64 6f 77 73 20  33 20 42 4d 50 22 2c 77  |Windows 3 BMP",w|
0000b2e0  69 64 74 68 25 2c 68 65  69 67 68 74 25 2c 30 2c  |idth%,height%,0,|
0000b2f0  63 6f 6c 62 69 74 73 25  2c 4d 6f 64 65 25 2c 22  |colbits%,Mode%,"|
0000b300  22 2c 22 22 2c 31 2c 31  29 0d 25 8a 59 f2 76 61  |","",1,1).%.Y.va|
0000b310  72 28 22 69 66 70 31 22  2c a4 69 70 74 72 28 46  |r("ifp1",.iptr(F|
0000b320  31 25 29 29 3a f2 76 61  72 28 22 69 6d 67 78 22  |1%)):.var("imgx"|
0000b330  2c 77 69 64 74 68 25 29  3a f2 76 61 72 28 22 69  |,width%):.var("i|
0000b340  6d 67 79 22 2c 68 65 69  67 68 74 25 29 3a e7 a4  |mgy",height%):..|
0000b350  75 6e 70 61 63 6b 28 22  42 4d 50 22 29 20 8b 20  |unpack("BMP") . |
0000b360  3d a3 0d 25 94 06 3d b9  0d 25 9e 04 0d 25 a8 0f  |=..%..=..%...%..|
0000b370  dd a4 70 69 63 5f 54 41  52 47 41 0d 25 b2 22 f4  |..pic_TARGA.%.".|
0000b380  20 4d 61 6b 65 73 20 54  72 75 65 76 69 73 69 6f  | Makes Truevisio|
0000b390  6e 20 54 41 52 47 41 20  69 6d 61 67 65 0d 25 bc  |n TARGA image.%.|
0000b3a0  44 69 64 6c 65 6e 25 3d  a4 69 62 3a 63 6f 6c 6d  |Didlen%=.ib:colm|
0000b3b0  61 70 74 79 70 65 25 3d  a4 69 62 3a f4 20 4c 65  |aptype%=.ib:. Le|
0000b3c0  6e 67 74 68 20 6f 66 20  49 44 20 73 74 72 69 6e  |ngth of ID strin|
0000b3d0  67 2c 20 63 6f 6c 6f 75  72 6d 61 70 20 74 79 70  |g, colourmap typ|
0000b3e0  65 0d 25 c6 1f 69 6d 61  67 65 74 79 70 65 25 3d  |e.%..imagetype%=|
0000b3f0  a4 69 62 3a f4 20 49 6d  61 67 65 20 74 79 70 65  |.ib:. Image type|
0000b400  0d 25 d0 3f 69 6e 64 65  78 25 3d a4 69 64 6c 3a  |.%.?index%=.idl:|
0000b410  6c 65 6e 67 74 68 25 3d  a4 69 64 6c 3a f4 20 43  |length%=.idl:. C|
0000b420  6f 6c 6f 75 72 6d 61 70  20 66 69 72 73 74 20 69  |olourmap first i|
0000b430  6e 64 65 78 20 26 20 23  69 6e 64 69 63 65 73 0d  |ndex & #indices.|
0000b440  25 da 23 63 6d 61 70 73  69 7a 65 25 3d a4 69 62  |%.#cmapsize%=.ib|
0000b450  3a f4 20 42 69 74 73 20  70 65 72 20 63 6f 6c 6f  |:. Bits per colo|
0000b460  75 72 0d 25 e4 26 78 6f  72 67 25 3d a4 69 64 6c  |ur.%.&xorg%=.idl|
0000b470  3a 78 6f 72 67 25 3d a4  69 64 6c 3a f4 20 58 2f  |:xorg%=.idl:. X/|
0000b480  59 20 6f 72 69 67 69 6e  0d 25 ee 2c 77 69 64 74  |Y origin.%.,widt|
0000b490  68 25 3d a4 69 64 6c 3a  68 65 69 67 68 74 25 3d  |h%=.idl:height%=|
0000b4a0  a4 69 64 6c 3a f4 20 53  69 7a 65 20 6f 66 20 69  |.idl:. Size of i|
0000b4b0  6d 61 67 65 0d 25 f8 34  70 69 78 62 69 74 73 25  |mage.%.4pixbits%|
0000b4c0  3d a4 69 62 3a 66 6c 61  67 73 25 3d a4 69 62 3a  |=.ib:flags%=.ib:|
0000b4d0  f4 20 42 69 74 73 20 70  65 72 20 70 69 78 65 6c  |. Bits per pixel|
0000b4e0  20 26 20 66 6c 61 67 73  0d 26 02 27 f2 69 73 6b  | & flags.&.'.isk|
0000b4f0  69 70 28 46 31 25 2c 69  64 6c 65 6e 25 29 3a f4  |ip(F1%,idlen%):.|
0000b500  20 53 6b 69 70 20 49 44  20 73 74 72 69 6e 67 0d  | Skip ID string.|
0000b510  26 0c 45 66 61 74 74 72  25 3d 66 6c 61 67 73 25  |&.Efattr%=flags%|
0000b520  80 26 30 46 3a 66 6c 69  70 73 25 3d 28 66 6c 61  |.&0F:flips%=(fla|
0000b530  67 73 25 80 26 33 30 29  3e 3e 34 3a f4 20 41 74  |gs%.&30)>>4:. At|
0000b540  74 72 69 62 75 74 65 73  2c 20 66 6c 69 70 2d 66  |tributes, flip-f|
0000b550  6c 61 67 73 0d 26 16 2d  66 6c 65 61 76 65 25 3d  |lags.&.-fleave%=|
0000b560  28 66 6c 61 67 73 25 80  26 43 30 29 3e 3e 36 3a  |(flags%.&C0)>>6:|
0000b570  f4 20 49 6e 74 65 72 6c  65 61 76 65 20 63 6f 64  |. Interleave cod|
0000b580  65 0d 26 20 62 e7 70 69  78 62 69 74 73 25 3e 38  |e.& b.pixbits%>8|
0000b590  20 8c 20 e7 63 6f 6c 6d  61 70 74 79 70 65 25 3c  | . .colmaptype%<|
0000b5a0  3e 30 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |>0 . .error(-1,"|
0000b5b0  49 20 63 61 6e 6e 6f 74  20 68 61 6e 64 6c 65 20  |I cannot handle |
0000b5c0  3e 38 20 62 69 74 20 54  41 52 47 41 20 77 69 74  |>8 bit TARGA wit|
0000b5d0  68 20 63 6f 6c 6f 75 72  6d 61 70 73 20 21 22 29  |h colourmaps !")|
0000b5e0  3a 3d a3 0d 26 2a 44 e7  66 6c 65 61 76 65 25 3c  |:=..&*D.fleave%<|
0000b5f0  3e 30 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |>0 . .error(-1,"|
0000b600  49 20 63 61 6e 6e 6f 74  20 68 61 6e 64 6c 65 20  |I cannot handle |
0000b610  69 6e 74 65 72 6c 61 63  65 64 20 54 41 52 47 41  |interlaced TARGA|
0000b620  20 21 22 29 3a 3d a3 0d  26 34 20 49 6e 50 61 6c  | !"):=..&4 InPal|
0000b630  25 28 29 3d 30 3a f4 20  43 6c 65 61 72 20 63 6f  |%()=0:. Clear co|
0000b640  6c 6f 75 72 6d 61 70 0d  26 3e 15 e7 63 6f 6c 6d  |lourmap.&>..colm|
0000b650  61 70 74 79 70 65 25 3c  3e 30 20 8c 0d 26 48 23  |aptype%<>0 ..&H#|
0000b660  20 e3 20 63 25 3d 69 6e  64 65 78 25 2b 31 20 b8  | . c%=index%+1 .|
0000b670  20 69 6e 64 65 78 25 2b  6c 65 6e 67 74 68 25 0d  | index%+length%.|
0000b680  26 52 13 20 c8 8e 20 63  6d 61 70 73 69 7a 65 25  |&R. .. cmapsize%|
0000b690  20 ca 0d 26 5c 31 20 20  c9 20 38 20 3a 20 69 25  | ..&\1  . 8 : i%|
0000b6a0  3d a4 69 62 3a 49 6e 50  61 6c 25 28 63 25 29 3d  |=.ib:InPal%(c%)=|
0000b6b0  69 25 20 84 20 69 25 3c  3c 38 20 84 20 69 25 3c  |i% . i%<<8 . i%<|
0000b6c0  3c 31 36 0d 26 66 4f 20  20 c9 20 31 35 2c 31 36  |<16.&fO  . 15,16|
0000b6d0  20 3a 20 69 25 3d a4 69  64 6c 3a 49 6e 50 61 6c  | : i%=.idl:InPal|
0000b6e0  25 28 63 25 29 3d 28 28  69 25 80 26 37 43 30 30  |%(c%)=((i%.&7C00|
0000b6f0  29 3c 3c 39 29 2b 28 28  69 25 80 26 33 45 30 29  |)<<9)+((i%.&3E0)|
0000b700  3c 3c 36 29 2b 28 28 69  25 80 26 31 46 29 3c 3c  |<<6)+((i%.&1F)<<|
0000b710  33 29 0d 26 70 1c 20 20  c9 20 32 34 20 3a 20 49  |3).&p.  . 24 : I|
0000b720  6e 50 61 6c 25 28 63 25  29 3d a4 69 74 6c 0d 26  |nPal%(c%)=.itl.&|
0000b730  7a 26 20 20 c9 20 33 32  20 3a 20 49 6e 50 61 6c  |z&  . 32 : InPal|
0000b740  25 28 63 25 29 3d a4 69  77 6c 20 80 20 26 46 46  |%(c%)=.iwl . &FF|
0000b750  46 46 46 46 0d 26 84 06  20 cb 0d 26 8e 06 20 ed  |FFFF.&.. ..&.. .|
0000b760  0d 26 98 1c cc 20 f2 67  72 65 79 70 61 6c 28 49  |.&... .greypal(I|
0000b770  6e 50 61 6c 25 28 29 2c  38 2c 31 29 0d 26 a2 05  |nPal%(),8,1).&..|
0000b780  cd 0d 26 ac 27 49 6e 50  61 6c 25 28 30 29 3d 70  |..&.'InPal%(0)=p|
0000b790  69 78 62 69 74 73 25 3a  f4 20 42 69 74 73 20 70  |ixbits%:. Bits p|
0000b7a0  65 72 20 70 69 78 65 6c  0d 26 b6 3f 72 6c 65 3d  |er pixel.&.?rle=|
0000b7b0  28 69 6d 61 67 65 74 79  70 65 25 3e 3d 39 29 80  |(imagetype%>=9).|
0000b7c0  28 69 6d 61 67 65 74 79  70 65 25 3c 3d 31 31 29  |(imagetype%<=11)|
0000b7d0  3a f4 20 52 75 6e 20 6c  65 6e 67 74 68 20 65 6e  |:. Run length en|
0000b7e0  63 6f 64 65 64 20 3f 0d  26 c0 6c e7 70 69 78 62  |coded ?.&.l.pixb|
0000b7f0  69 74 73 25 3e 38 20 8c  20 63 6f 64 65 25 3d 32  |its%>8 . code%=2|
0000b800  3a 73 69 7a 65 32 25 3d  77 69 64 74 68 25 2a 34  |:size2%=width%*4|
0000b810  20 8b 20 73 69 7a 65 32  25 3d 77 69 64 74 68 25  | . size2%=width%|
0000b820  3a e7 28 63 6d 61 70 73  69 7a 65 25 3d 38 29 84  |:.(cmapsize%=8).|
0000b830  28 63 6f 6c 6d 61 70 74  79 70 65 25 3d 30 29 20  |(colmaptype%=0) |
0000b840  8c 20 63 6f 64 65 25 3d  31 20 8b 20 63 6f 64 65  |. code%=1 . code|
0000b850  25 3d 30 0d 26 ca 22 f2  73 65 74 28 77 69 64 74  |%=0.&.".set(widt|
0000b860  68 25 2c 68 65 69 67 68  74 25 2c 32 35 36 2c 4d  |h%,height%,256,M|
0000b870  6f 64 65 25 29 0d 26 d4  2f e7 a4 61 6c 6c 6f 63  |ode%).&./..alloc|
0000b880  61 74 65 5f 73 74 64 28  77 69 64 74 68 25 2c 73  |ate_std(width%,s|
0000b890  69 7a 65 32 25 2c 30 2c  73 69 7a 65 32 25 29 20  |ize2%,0,size2%) |
0000b8a0  8b 20 3d a3 0d 26 de 1b  e7 a4 6e 65 77 5f 69 6d  |. =..&....new_im|
0000b8b0  61 67 65 28 72 6f 6f 6d  25 29 20 8b 20 3d a3 0d  |age(room%) . =..|
0000b8c0  26 e8 2a e7 72 6c 65 20  8c 20 63 6f 6d 70 72 24  |&.*.rle . compr$|
0000b8d0  3d 22 52 75 6e 20 6c 65  6e 67 74 68 22 20 8b 20  |="Run length" . |
0000b8e0  63 6f 6d 70 72 24 3d 22  22 0d 26 f2 7e f2 69 6d  |compr$="".&.~.im|
0000b8f0  61 67 65 5f 69 6e 66 6f  28 22 54 72 75 65 76 69  |age_info("Truevi|
0000b900  73 69 6f 6e 20 54 41 52  47 41 22 2c 77 69 64 74  |sion TARGA",widt|
0000b910  68 25 2c 68 65 69 67 68  74 25 2c 63 6f 64 65 25  |h%,height%,code%|
0000b920  2c 70 69 78 62 69 74 73  25 2c 4d 6f 64 65 25 2c  |,pixbits%,Mode%,|
0000b930  63 6f 6d 70 72 24 2c 22  22 2c 46 6c 65 6e 25 2d  |compr$,"",Flen%-|
0000b940  a4 69 70 74 72 28 46 31  25 29 2c 28 77 69 64 74  |.iptr(F1%),(widt|
0000b950  68 25 2a 68 65 69 67 68  74 25 2a 70 69 78 62 69  |h%*height%*pixbi|
0000b960  74 73 25 29 81 38 29 0d  26 fc 80 f2 76 61 72 28  |ts%).8).&...var(|
0000b970  22 6f 72 64 72 22 2c 66  6c 69 70 73 25 29 3a f2  |"ordr",flips%):.|
0000b980  76 61 72 28 22 69 66 70  31 22 2c a4 69 70 74 72  |var("ifp1",.iptr|
0000b990  28 46 31 25 29 29 3a f2  76 61 72 28 22 69 6d 67  |(F1%)):.var("img|
0000b9a0  78 22 2c 77 69 64 74 68  25 29 3a f2 76 61 72 28  |x",width%):.var(|
0000b9b0  22 69 6d 67 79 22 2c 68  65 69 67 68 74 25 29 3a  |"imgy",height%):|
0000b9c0  f2 76 61 72 28 22 63 6f  6d 70 22 2c 72 6c 65 29  |.var("comp",rle)|
0000b9d0  3a e7 a4 75 6e 70 61 63  6b 28 22 54 41 52 47 41  |:..unpack("TARGA|
0000b9e0  22 29 20 8b 20 3d a3 0d  27 06 06 3d b9 0d 27 10  |") . =..'..=..'.|
0000b9f0  04 0d 27 1a 11 dd a4 70  69 63 5f 50 42 4d 50 4c  |..'....pic_PBMPL|
0000ba00  55 53 0d 27 24 19 f4 20  4d 61 6b 65 73 20 50 42  |US.'$.. Makes PB|
0000ba10  4d 50 4c 55 53 20 69 6d  61 67 65 0d 27 2e 33 74  |MPLUS image.'.3t|
0000ba20  79 70 65 24 3d a4 69 73  74 72 69 6e 67 28 46 31  |ype$=.istring(F1|
0000ba30  25 2c 32 29 3a f2 70 62  6d 5f 77 68 69 74 65 3a  |%,2):.pbm_white:|
0000ba40  f4 20 50 42 4d 50 4c 55  53 20 74 79 70 65 0d 27  |. PBMPLUS type.'|
0000ba50  38 24 74 79 70 65 25 3d  bb 28 c1 74 79 70 65 24  |8$type%=.(.type$|
0000ba60  2c 32 29 29 3a f4 20 54  79 70 65 20 6e 75 6d 62  |,2)):. Type numb|
0000ba70  65 72 0d 27 42 3d 77 69  64 74 68 25 3d a4 70 62  |er.'B=width%=.pb|
0000ba80  6d 5f 64 65 63 76 61 6c  3a 68 65 69 67 68 74 25  |m_decval:height%|
0000ba90  3d a4 70 62 6d 5f 64 65  63 76 61 6c 3a f4 20 57  |=.pbm_decval:. W|
0000baa0  69 64 74 68 20 61 6e 64  20 68 65 69 67 68 74 0d  |idth and height.|
0000bab0  27 4c 0e c8 8e 20 74 79  70 65 25 20 ca 0d 27 56  |'L... type% ..'V|
0000bac0  30 20 c9 20 31 2c 34 20  3a 20 63 6f 64 65 25 3d  |0 . 1,4 : code%=|
0000bad0  31 3a 6d 61 78 76 61 6c  25 3d 2d 31 3a 62 70 70  |1:maxval%=-1:bpp|
0000bae0  25 3d 31 3a f4 20 42 69  6c 65 76 65 6c 0d 27 60  |%=1:. Bilevel.'`|
0000baf0  41 20 20 f2 67 72 65 79  70 61 6c 28 49 6e 50 61  |A  .greypal(InPa|
0000bb00  6c 25 28 29 2c 31 2c 2d  31 29 3a f4 20 42 69 6c  |l%(),1,-1):. Bil|
0000bb10  65 76 65 6c 20 70 61 6c  65 74 74 65 20 28 30 3d  |evel palette (0=|
0000bb20  77 68 69 74 65 2c 31 3d  62 6c 61 63 6b 29 0d 27  |white,1=black).'|
0000bb30  6a 2b 20 c9 20 32 2c 35  20 3a 20 6d 61 78 76 61  |j+ . 2,5 : maxva|
0000bb40  6c 25 3d a4 70 62 6d 5f  64 65 63 76 61 6c 3a f4  |l%=.pbm_decval:.|
0000bb50  20 4d 61 78 20 67 72 65  79 0d 27 74 4a 20 20 e7  | Max grey.'tJ  .|
0000bb60  6d 61 78 76 61 6c 25 3e  32 35 35 20 8c 20 f2 65  |maxval%>255 . .e|
0000bb70  72 72 6f 72 28 2d 31 2c  22 49 20 63 61 6e 6e 6f  |rror(-1,"I canno|
0000bb80  74 20 72 65 61 64 20 3e  32 35 36 2d 6c 65 76 65  |t read >256-leve|
0000bb90  6c 20 67 72 65 79 20 50  42 4d 50 4c 55 53 22 29  |l grey PBMPLUS")|
0000bba0  3a 3d a3 0d 27 7e 3e 20  20 63 6f 64 65 25 3d 31  |:=..'~>  code%=1|
0000bbb0  3a 62 70 70 25 3d a4 63  6f 6c 73 74 6f 62 70 70  |:bpp%=.colstobpp|
0000bbc0  28 31 2b 6d 61 78 76 61  6c 25 29 3a f4 20 47 72  |(1+maxval%):. Gr|
0000bbd0  65 79 2c 20 63 61 6c 63  75 6c 61 74 65 20 62 70  |ey, calculate bp|
0000bbe0  70 0d 27 88 71 20 20 49  6e 50 61 6c 25 28 30 29  |p.'.q  InPal%(0)|
0000bbf0  3d 62 70 70 25 3a 73 74  65 70 3d 32 35 35 2f 6d  |=bpp%:step=255/m|
0000bc00  61 78 76 61 6c 25 3a 76  3d 30 3a e3 20 63 25 3d  |axval%:v=0:. c%=|
0000bc10  30 20 b8 20 6d 61 78 76  61 6c 25 3a 76 25 3d a8  |0 . maxval%:v%=.|
0000bc20  76 3a 49 6e 50 61 6c 25  28 63 25 2b 31 29 3d 76  |v:InPal%(c%+1)=v|
0000bc30  25 84 76 25 3c 3c 38 84  76 25 3c 3c 31 36 3a 76  |%.v%<<8.v%<<16:v|
0000bc40  2b 3d 73 74 65 70 3a ed  3a f4 20 50 61 6c 65 74  |+=step:.:. Palet|
0000bc50  74 65 0d 27 92 2c 20 c9  20 33 2c 36 20 3a 20 6d  |te.'., . 3,6 : m|
0000bc60  61 78 76 61 6c 25 3d a4  70 62 6d 5f 64 65 63 76  |axval%=.pbm_decv|
0000bc70  61 6c 3a f4 20 4d 61 78  20 72 2f 67 2f 62 0d 27  |al:. Max r/g/b.'|
0000bc80  9c 49 20 20 e7 6d 61 78  76 61 6c 25 3e 32 35 35  |.I  .maxval%>255|
0000bc90  20 8c 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
0000bca0  63 61 6e 6e 6f 74 20 72  65 61 64 20 3e 32 35 36  |cannot read >256|
0000bcb0  2d 6c 65 76 65 6c 20 52  47 42 20 50 42 4d 50 4c  |-level RGB PBMPL|
0000bcc0  55 53 22 29 3a 3d a3 0d  27 a6 2e 20 20 63 6f 64  |US"):=..'..  cod|
0000bcd0  65 25 3d 32 3a 62 70 63  25 3d a4 63 6f 6c 73 74  |e%=2:bpc%=.colst|
0000bce0  6f 62 70 70 28 31 2b 6d  61 78 76 61 6c 25 29 3a  |obpp(1+maxval%):|
0000bcf0  f4 20 52 47 42 0d 27 b0  24 20 20 e7 62 70 63 25  |. RGB.'.$  .bpc%|
0000bd00  3c 33 20 8c 20 62 70 70  25 3d 39 20 8b 20 62 70  |<3 . bpp%=9 . bp|
0000bd10  70 25 3d 33 2a 62 70 63  25 0d 27 ba 5b 20 20 49  |p%=3*bpc%.'.[  I|
0000bd20  6e 50 61 6c 25 28 30 29  3d 62 70 70 25 3a 73 74  |nPal%(0)=bpp%:st|
0000bd30  65 70 3d 32 35 35 2f 6d  61 78 76 61 6c 25 3a 76  |ep=255/maxval%:v|
0000bd40  3d 30 3a e3 20 63 25 3d  30 20 b8 20 6d 61 78 76  |=0:. c%=0 . maxv|
0000bd50  61 6c 25 3a 70 62 6d 69  6e 74 25 3f 63 25 3d a8  |al%:pbmint%?c%=.|
0000bd60  76 3a 76 2b 3d 73 74 65  70 3a ed 3a f4 20 49 6e  |v:v+=step:.:. In|
0000bd70  74 6d 61 70 0d 27 c4 05  cb 0d 27 ce 54 e7 74 79  |tmap.'....'.T.ty|
0000bd80  70 65 25 3c 3d 33 20 8c  20 f2 70 62 6d 5f 77 68  |pe%<=3 . .pbm_wh|
0000bd90  69 74 65 20 8b 20 63 25  3d a4 69 62 3a e7 28 63  |ite . c%=.ib:.(c|
0000bda0  25 3d 33 32 29 84 28 63  25 3d 39 29 84 28 63 25  |%=32).(c%=9).(c%|
0000bdb0  3d 31 30 29 84 28 63 25  3d 31 33 29 20 8b 20 f2  |=10).(c%=13) . .|
0000bdc0  69 73 6b 69 70 28 46 31  25 2c 2d 31 29 0d 27 d8  |iskip(F1%,-1).'.|
0000bdd0  4c e7 62 70 70 25 3e 38  20 8c 20 72 6f 77 62 79  |L.bpp%>8 . rowby|
0000bde0  74 65 73 25 3d 34 2a 77  69 64 74 68 25 3a 63 6f  |tes%=4*width%:co|
0000bdf0  6c 62 69 74 73 25 3d 38  20 8b 20 72 6f 77 62 79  |lbits%=8 . rowby|
0000be00  74 65 73 25 3d 77 69 64  74 68 25 3a 63 6f 6c 62  |tes%=width%:colb|
0000be10  69 74 73 25 3d 62 70 70  25 0d 27 e2 29 f2 73 65  |its%=bpp%.'.).se|
0000be20  74 28 77 69 64 74 68 25  2c 68 65 69 67 68 74 25  |t(width%,height%|
0000be30  2c 32 5e 63 6f 6c 62 69  74 73 25 2c 4d 6f 64 65  |,2^colbits%,Mode|
0000be40  25 29 0d 27 ec 27 e7 74  79 70 65 25 3d 34 20 8c  |%).'.'.type%=4 .|
0000be50  20 73 69 7a 65 31 25 3d  77 69 64 74 68 25 20 8b  | size1%=width% .|
0000be60  20 73 69 7a 65 31 25 3d  30 0d 27 f6 32 e7 a4 61  | size1%=0.'.2..a|
0000be70  6c 6c 6f 63 61 74 65 5f  73 74 64 28 77 69 64 74  |llocate_std(widt|
0000be80  68 25 2c 72 6f 77 62 79  74 65 73 25 2c 73 69 7a  |h%,rowbytes%,siz|
0000be90  65 31 25 2c 30 29 20 8b  20 3d a3 0d 28 00 17 e7  |e1%,0) . =..(...|
0000bea0  a4 6e 65 77 5f 69 6d 61  67 65 28 30 29 20 8b 20  |.new_image(0) . |
0000beb0  3d a3 0d 28 0a 4b f2 69  6d 61 67 65 5f 69 6e 66  |=..(.K.image_inf|
0000bec0  6f 28 22 50 42 4d 50 4c  55 53 20 22 2b 74 79 70  |o("PBMPLUS "+typ|
0000bed0  65 24 2c 77 69 64 74 68  25 2c 68 65 69 67 68 74  |e$,width%,height|
0000bee0  25 2c 63 6f 64 65 25 2c  62 70 70 25 2c 4d 6f 64  |%,code%,bpp%,Mod|
0000bef0  65 25 2c 22 22 2c 22 22  2c 31 2c 31 29 0d 28 14  |e%,"","",1,1).(.|
0000bf00  85 f2 76 61 72 28 22 69  66 70 31 22 2c a4 69 70  |..var("ifp1",.ip|
0000bf10  74 72 28 46 31 25 29 29  3a f2 76 61 72 28 22 69  |tr(F1%)):.var("i|
0000bf20  6d 67 78 22 2c 77 69 64  74 68 25 29 3a f2 76 61  |mgx",width%):.va|
0000bf30  72 28 22 69 6d 67 79 22  2c 68 65 69 67 68 74 25  |r("imgy",height%|
0000bf40  29 3a f2 76 61 72 28 22  73 63 74 79 22 2c 74 79  |):.var("scty",ty|
0000bf50  70 65 25 29 3a f2 76 61  72 28 22 6d 61 70 31 22  |pe%):.var("map1"|
0000bf60  2c 70 62 6d 69 6e 74 25  29 3a e7 a4 75 6e 70 61  |,pbmint%):..unpa|
0000bf70  63 6b 28 22 50 42 4d 50  4c 55 53 22 29 20 8b 20  |ck("PBMPLUS") . |
0000bf80  3d a3 0d 28 1e 06 3d b9  0d 28 28 04 0d 28 32 0f  |=..(..=..((..(2.|
0000bf90  dd f2 70 62 6d 5f 77 68  69 74 65 0d 28 3c 2b f4  |..pbm_white.(<+.|
0000bfa0  20 53 6b 69 70 73 20 50  42 4d 50 4c 55 53 20 77  | Skips PBMPLUS w|
0000bfb0  68 69 74 65 73 70 61 63  65 20 61 6e 64 20 63 6f  |hitespace and co|
0000bfc0  6d 6d 65 6e 74 73 0d 28  46 0b ea 20 63 25 2c 6f  |mments.(F.. c%,o|
0000bfd0  6b 0d 28 50 14 6f 6b 3d  a3 3a f4 20 45 78 69 74  |k.(P.ok=.:. Exit|
0000bfe0  20 66 6c 61 67 0d 28 5a  05 f5 0d 28 64 30 f5 20  | flag.(Z...(d0. |
0000bff0  63 25 3d a4 69 62 3a fd  20 ac 28 28 63 25 3d 33  |c%=.ib:. .((c%=3|
0000c000  32 29 84 28 63 25 3d 39  29 84 28 63 25 3d 31 33  |2).(c%=9).(c%=13|
0000c010  29 84 28 63 25 3d 31 30  29 29 0d 28 6e 30 e7 63  |).(c%=10)).(n0.c|
0000c020  25 3d 97 22 23 22 20 8c  20 f5 20 63 25 3d a4 69  |%=."#" . . c%=.i|
0000c030  62 3a fd 20 28 63 25 3d  31 33 29 84 28 63 25 3d  |b:. (c%=13).(c%=|
0000c040  31 30 29 20 8b 20 6f 6b  3d b9 0d 28 78 08 fd 20  |10) . ok=..(x.. |
0000c050  6f 6b 0d 28 82 30 f2 69  73 6b 69 70 28 46 31 25  |ok.(.0.iskip(F1%|
0000c060  2c 2d 31 29 3a f4 20 53  74 65 70 20 62 61 63 6b  |,-1):. Step back|
0000c070  20 74 6f 20 6c 61 73 74  20 6e 6f 6e 2d 77 68 69  | to last non-whi|
0000c080  74 65 0d 28 8c 05 e1 0d  28 96 04 0d 28 a0 10 dd  |te.(....(...(...|
0000c090  a4 70 62 6d 5f 64 65 63  76 61 6c 0d 28 aa 39 f4  |.pbm_decval.(.9.|
0000c0a0  20 53 6b 69 70 73 20 77  68 69 74 65 73 70 61 63  | Skips whitespac|
0000c0b0  65 2c 20 72 65 74 75 72  6e 73 20 64 65 63 69 6d  |e, returns decim|
0000c0c0  61 6c 20 76 61 6c 75 65  20 66 6f 72 20 50 42 4d  |al value for PBM|
0000c0d0  50 4c 55 53 0d 28 b4 0b  ea 20 63 25 2c 76 24 0d  |PLUS.(... c%,v$.|
0000c0e0  28 be 0e f2 70 62 6d 5f  77 68 69 74 65 0d 28 c8  |(...pbm_white.(.|
0000c0f0  17 63 25 3d a4 69 62 3a  76 24 3d 22 22 3a f4 20  |.c%=.ib:v$="":. |
0000c100  49 6e 69 74 0d 28 d2 2d  c8 95 20 28 63 25 3e 3d  |Init.(.-.. (c%>=|
0000c110  97 22 30 22 29 80 28 63  25 3c 3d 97 22 39 22 29  |."0").(c%<=."9")|
0000c120  3a 76 24 2b 3d bd 63 25  3a 63 25 3d a4 69 62 3a  |:v$+=.c%:c%=.ib:|
0000c130  ce 0d 28 dc 08 3d bb 76  24 0d 28 e6 05 20 0d 28  |..(..=.v$.(.. .(|
0000c140  f0 0e dd a4 70 69 63 5f  5a 56 44 41 0d 28 fa 34  |....pic_ZVDA.(.4|
0000c150  f4 20 4d 61 6b 65 73 20  5a 65 72 69 64 61 6a 68  |. Makes Zeridajh|
0000c160  20 56 69 64 65 6f 20 44  69 67 69 74 69 73 65 72  | Video Digitiser|
0000c170  20 41 6e 69 6d 61 74 69  6f 6e 20 69 6d 61 67 65  | Animation image|
0000c180  0d 29 04 6d 69 64 24 3d  a4 69 73 74 72 69 6e 67  |.).mid$=.istring|
0000c190  28 46 31 25 2c 34 29 3a  e7 69 64 24 3c 3e 22 5a  |(F1%,4):.id$<>"Z|
0000c1a0  56 44 41 22 20 8c 20 f2  65 72 72 6f 72 28 2d 31  |VDA" . .error(-1|
0000c1b0  2c 22 54 68 69 73 20 69  73 20 6e 6f 74 20 61 20  |,"This is not a |
0000c1c0  5a 65 72 69 64 61 6a 68  20 56 69 64 65 6f 20 44  |Zeridajh Video D|
0000c1d0  69 67 69 74 69 73 65 72  20 41 6e 69 6d 61 74 69  |igitiser Animati|
0000c1e0  6f 6e 20 66 69 6c 65 20  21 22 29 3a e1 0d 29 0e  |on file !"):..).|
0000c1f0  3e 76 65 72 73 69 6f 6e  25 3d a4 69 77 6c 3a 6d  |>version%=.iwl:m|
0000c200  6f 64 65 25 3d a4 69 77  6c 3a f4 20 56 65 72 73  |ode%=.iwl:. Vers|
0000c210  69 6f 6e 20 6f 66 20 6d  61 6b 65 72 20 26 20 6d  |ion of maker & m|
0000c220  6f 64 65 20 6f 66 20 70  69 63 73 0d 29 18 2b 77  |ode of pics.).+w|
0000c230  69 64 74 68 25 3d a4 69  77 6c 3a 68 65 69 67 68  |idth%=.iwl:heigh|
0000c240  74 25 3d a4 69 77 6c 3a  f4 20 53 69 7a 65 20 6f  |t%=.iwl:. Size o|
0000c250  66 20 70 69 63 73 0d 29  22 3f 70 69 63 74 75 72  |f pics.)"?pictur|
0000c260  65 73 25 3d a4 69 77 6c  3a 6f 66 66 31 25 3d a4  |es%=.iwl:off1%=.|
0000c270  69 77 6c 3a f4 20 4e 75  6d 62 65 72 20 6f 66 20  |iwl:. Number of |
0000c280  70 69 63 73 2c 20 6f 66  66 73 65 74 20 74 6f 20  |pics, offset to |
0000c290  66 69 72 73 74 0d 29 2c  be e7 28 49 6d 61 67 65  |first.),..(Image|
0000c2a0  4e 72 25 3e 30 29 20 80  20 28 49 6d 61 67 65 4e  |Nr%>0) . (ImageN|
0000c2b0  72 25 3c 3d 70 69 63 74  75 72 65 73 25 29 20 8c  |r%<=pictures%) .|
0000c2c0  20 70 69 63 74 75 72 65  25 3d 49 6d 61 67 65 4e  | picture%=ImageN|
0000c2d0  72 25 20 8b 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |r% . .error(-1,"|
0000c2e0  54 68 69 73 20 5a 56 44  41 20 66 69 6c 65 20 63  |This ZVDA file c|
0000c2f0  6f 6e 74 61 69 6e 73 20  22 2b c3 28 70 69 63 74  |ontains "+.(pict|
0000c300  75 72 65 73 25 29 2b 22  20 69 6d 61 67 65 73 2e  |ures%)+" images.|
0000c310  20 53 65 6c 65 63 74 20  27 31 27 2d 27 22 2b c3  | Select '1'-'"+.|
0000c320  28 70 69 63 74 75 72 65  73 25 29 2b 22 27 20 69  |(pictures%)+"' i|
0000c330  6e 20 74 68 65 20 27 49  6d 61 67 65 20 6e 75 6d  |n the 'Image num|
0000c340  62 65 72 27 20 73 75 62  6d 65 6e 75 20 21 22 29  |ber' submenu !")|
0000c350  3a 3d a3 0d 29 36 24 63  6f 6d 70 72 25 3d a4 69  |:=..)6$compr%=.i|
0000c360  77 6c 3a f4 20 43 6f 6d  70 72 65 73 73 69 6f 6e  |wl:. Compression|
0000c370  20 6d 65 74 68 6f 64 0d  29 40 51 e7 63 6f 6d 70  | method.)@Q.comp|
0000c380  72 25 3c 3e 31 20 8c 20  f2 65 72 72 6f 72 28 2d  |r%<>1 . .error(-|
0000c390  31 2c 22 49 20 6f 6e 6c  79 20 6b 6e 6f 77 20 42  |1,"I only know B|
0000c3a0  69 74 6d 61 70 20 63 6f  6d 70 72 65 73 73 69 6f  |itmap compressio|
0000c3b0  6e 2c 20 6e 6f 20 23 22  2b c3 28 63 6f 6d 70 72  |n, no #"+.(compr|
0000c3c0  25 29 2b 22 20 21 22 29  0d 29 4a 2c f2 69 70 74  |%)+" !").)J,.ipt|
0000c3d0  72 28 46 31 25 2c 6f 66  66 31 25 29 3a f4 20 53  |r(F1%,off1%):. S|
0000c3e0  6b 69 70 20 74 6f 20 66  69 72 73 74 20 70 69 63  |kip to first pic|
0000c3f0  74 75 72 65 0d 29 54 3e  73 25 3d 31 3a c8 95 20  |ture.)T>s%=1:.. |
0000c400  73 25 3c 70 69 63 74 75  72 65 25 3a f2 69 73 6b  |s%<picture%:.isk|
0000c410  69 70 28 46 31 25 2c a4  69 77 6c 2d 34 29 3a 73  |ip(F1%,.iwl-4):s|
0000c420  25 2b 3d 31 3a ce 3a f4  20 47 6f 20 74 6f 20 70  |%+=1:.:. Go to p|
0000c430  69 63 0d 29 5e 2a 63 6f  6d 70 6c 65 6e 25 3d a4  |ic.)^*complen%=.|
0000c440  69 77 6c 3a f4 20 4c 65  6e 67 74 68 20 6f 66 20  |iwl:. Length of |
0000c450  70 69 63 74 75 72 65 20  64 61 74 61 0d 29 68 32  |picture data.)h2|
0000c460  63 6f 6c 62 69 74 73 25  3d 32 5e a4 6d 6f 64 65  |colbits%=2^.mode|
0000c470  5f 76 61 72 28 6d 6f 64  65 25 2c 39 29 3a f4 20  |_var(mode%,9):. |
0000c480  42 69 74 73 20 70 65 72  20 70 69 78 65 6c 0d 29  |Bits per pixel.)|
0000c490  72 31 f2 67 72 65 79 70  61 6c 28 49 6e 50 61 6c  |r1.greypal(InPal|
0000c4a0  25 28 29 2c 63 6f 6c 62  69 74 73 25 2c 31 29 3a  |%(),colbits%,1):|
0000c4b0  f4 20 50 69 63 73 20 61  72 65 20 67 72 65 79 0d  |. Pics are grey.|
0000c4c0  29 7c 3f 72 6f 77 62 79  74 65 73 25 3d 28 28 63  |)|?rowbytes%=((c|
0000c4d0  6f 6c 62 69 74 73 25 2a  77 69 64 74 68 25 2b 36  |olbits%*width%+6|
0000c4e0  33 29 81 36 34 29 2a 38  3a f4 20 42 79 74 65 73  |3).64)*8:. Bytes|
0000c4f0  20 70 65 72 20 70 69 78  65 6c 20 72 6f 77 0d 29  | per pixel row.)|
0000c500  86 29 f2 73 65 74 28 77  69 64 74 68 25 2c 68 65  |.).set(width%,he|
0000c510  69 67 68 74 25 2c 32 5e  63 6f 6c 62 69 74 73 25  |ight%,2^colbits%|
0000c520  2c 4d 6f 64 65 25 29 0d  29 90 35 62 69 74 6d 61  |,Mode%).).5bitma|
0000c530  70 6c 65 6e 25 3d 68 65  69 67 68 74 25 2a 72 6f  |plen%=height%*ro|
0000c540  77 62 79 74 65 73 25 81  38 3a f4 20 4c 65 6e 67  |wbytes%.8:. Leng|
0000c550  74 68 20 6f 66 20 62 69  74 6d 61 70 0d 29 9a 3b  |th of bitmap.).;|
0000c560  e7 a4 61 6c 6c 6f 63 61  74 65 5f 73 74 64 28 77  |..allocate_std(w|
0000c570  69 64 74 68 25 2c 72 6f  77 62 79 74 65 73 25 2c  |idth%,rowbytes%,|
0000c580  77 69 64 74 68 25 2c 62  69 74 6d 61 70 6c 65 6e  |width%,bitmaplen|
0000c590  25 29 20 8b 20 3d a3 0d  29 a4 17 e7 a4 6e 65 77  |%) . =..)....new|
0000c5a0  5f 69 6d 61 67 65 28 30  29 20 8b 20 3d a3 0d 29  |_image(0) . =..)|
0000c5b0  ae 97 f2 69 6d 61 67 65  5f 69 6e 66 6f 28 22 5a  |...image_info("Z|
0000c5c0  65 72 69 64 61 6a 68 20  56 44 41 22 2c 77 69 64  |eridajh VDA",wid|
0000c5d0  74 68 25 2c 68 65 69 67  68 74 25 2c 31 2c 63 6f  |th%,height%,1,co|
0000c5e0  6c 62 69 74 73 25 2c 4d  6f 64 65 25 2c 22 42 69  |lbits%,Mode%,"Bi|
0000c5f0  74 6d 61 70 22 2c c3 70  69 63 74 75 72 65 73 25  |tmap",.pictures%|
0000c600  2b 22 20 69 6d 61 67 65  73 20 28 74 68 69 73 20  |+" images (this |
0000c610  69 73 20 22 2b a4 74 69  6d 65 73 28 70 69 63 74  |is "+.times(pict|
0000c620  75 72 65 25 29 2b 22 29  22 2c 63 6f 6d 70 6c 65  |ure%)+")",comple|
0000c630  6e 25 2c 72 6f 77 62 79  74 65 73 25 2a 68 65 69  |n%,rowbytes%*hei|
0000c640  67 68 74 25 29 0d 29 b8  70 f2 76 61 72 28 22 69  |ght%).).p.var("i|
0000c650  66 70 31 22 2c a4 69 70  74 72 28 46 31 25 29 29  |fp1",.iptr(F1%))|
0000c660  3a f2 76 61 72 28 22 69  6d 67 78 22 2c 77 69 64  |:.var("imgx",wid|
0000c670  74 68 25 29 3a f2 76 61  72 28 22 69 6d 67 79 22  |th%):.var("imgy"|
0000c680  2c 68 65 69 67 68 74 25  29 3a f2 76 61 72 28 22  |,height%):.var("|
0000c690  6d 61 78 63 22 2c 63 6f  6d 70 6c 65 6e 25 29 3a  |maxc",complen%):|
0000c6a0  e7 a4 75 6e 70 61 63 6b  28 22 5a 56 44 41 22 29  |..unpack("ZVDA")|
0000c6b0  20 8b 20 3d a3 0d 29 c2  06 3d b9 0d 29 cc 04 0d  | . =..)..=..)...|
0000c6c0  29 d6 59 dd f2 69 6d 61  67 65 5f 69 6e 66 6f 28  |).Y..image_info(|
0000c6d0  74 79 70 65 24 2c 77 69  64 74 68 25 2c 68 65 69  |type$,width%,hei|
0000c6e0  67 68 74 25 2c 63 6f 64  65 25 2c 63 6f 6c 62 69  |ght%,code%,colbi|
0000c6f0  74 73 25 2c 6d 6f 64 65  25 2c 63 6f 6d 70 72 24  |ts%,mode%,compr$|
0000c700  2c 69 6e 66 6f 24 2c 64  61 74 61 6c 65 6e 25 2c  |,info$,datalen%,|
0000c710  70 69 63 6c 65 6e 25 29  0d 29 e0 26 f4 20 53 65  |piclen%).).&. Se|
0000c720  74 73 20 69 6e 66 6f 72  6d 61 74 69 6f 6e 20 61  |ts information a|
0000c730  62 6f 75 74 20 74 68 65  20 69 6d 61 67 65 0d 29  |bout the image.)|
0000c740  ea 1d ea 20 66 61 63 74  6f 72 25 2c 77 25 2c 68  |... factor%,w%,h|
0000c750  25 2c 63 25 2c 69 25 2c  69 64 24 0d 29 f4 46 49  |%,c%,i%,id$.).FI|
0000c760  6d 67 57 25 3d 77 69 64  74 68 25 3a 49 6d 67 48  |mgW%=width%:ImgH|
0000c770  25 3d 68 65 69 67 68 74  25 3a 49 6d 67 42 69 74  |%=height%:ImgBit|
0000c780  73 25 3d 63 6f 6c 62 69  74 73 25 3a f4 20 52 65  |s%=colbits%:. Re|
0000c790  67 69 73 74 65 72 20 72  65 73 6f 6c 75 74 69 6f  |gister resolutio|
0000c7a0  6e 0d 29 fe 1f 24 49 4d  49 66 6e 25 3d 4c 65 61  |n.)..$IMIfn%=Lea|
0000c7b0  66 24 3a 24 49 4d 49 69  74 25 3d 74 79 70 65 24  |f$:$IMIit%=type$|
0000c7c0  0d 2a 08 2b e7 69 6e 66  6f 24 3d 22 22 20 8c 20  |.*.+.info$="" . |
0000c7d0  24 49 4d 49 69 6e 25 3d  22 2d 22 20 8b 20 24 49  |$IMIin%="-" . $I|
0000c7e0  4d 49 69 6e 25 3d 69 6e  66 6f 24 0d 2a 12 1b 24  |MIin%=info$.*..$|
0000c7f0  49 4d 49 69 66 25 3d c3  46 6c 65 6e 25 2b 22 20  |IMIif%=.Flen%+" |
0000c800  62 79 74 65 73 22 0d 2a  1c 6e e7 63 6f 6d 70 72  |bytes".*.n.compr|
0000c810  24 3d 22 22 20 8c 20 24  49 4d 49 63 6f 25 3d 22  |$="" . $IMIco%="|
0000c820  4e 6f 6e 65 20 28 30 25  29 22 20 8b 20 66 61 63  |None (0%)" . fac|
0000c830  74 6f 72 25 3d 31 30 30  2d a8 28 31 30 30 2a 28  |tor%=100-.(100*(|
0000c840  64 61 74 61 6c 65 6e 25  2f 70 69 63 6c 65 6e 25  |datalen%/piclen%|
0000c850  29 29 3a 24 49 4d 49 63  6f 25 3d 63 6f 6d 70 72  |)):$IMIco%=compr|
0000c860  24 2b 22 20 28 22 2b c3  66 61 63 74 6f 72 25 2b  |$+" ("+.factor%+|
0000c870  22 25 29 22 0d 2a 26 2c  24 49 4d 49 77 68 25 3d  |"%)".*&,$IMIwh%=|
0000c880  c3 77 69 64 74 68 25 2b  22 20 78 20 22 2b c3 68  |.width%+" x "+.h|
0000c890  65 69 67 68 74 25 2b 22  20 70 69 78 65 6c 73 22  |eight%+" pixels"|
0000c8a0  0d 2a 30 5f e7 28 77 69  64 74 68 25 3c 3e 53 70  |.*0_.(width%<>Sp|
0000c8b0  72 57 25 29 84 28 68 65  69 67 68 74 25 3c 3e 53  |rW%).(height%<>S|
0000c8c0  70 72 48 25 29 20 8c 20  24 49 4d 49 73 63 25 3d  |prH%) . $IMIsc%=|
0000c8d0  22 74 6f 20 22 2b c3 53  70 72 57 25 2b 22 20 78  |"to "+.SprW%+" x|
0000c8e0  20 22 2b c3 53 70 72 48  25 20 8b 20 24 49 4d 49  | "+.SprH% . $IMI|
0000c8f0  73 63 25 3d 22 46 75 6c  6c 20 73 69 7a 65 22 0d  |sc%="Full size".|
0000c900  2a 3a 43 24 49 4d 49 62  70 25 3d c3 28 63 6f 6c  |*:C$IMIbp%=.(col|
0000c910  62 69 74 73 25 29 2b 22  2d 62 69 74 20 22 2b c1  |bits%)+"-bit "+.|
0000c920  22 63 6f 6c 6f 75 72 20  20 67 72 65 79 20 20 20  |"colour  grey   |
0000c930  20 52 47 42 22 2c 31 2b  63 6f 64 65 25 2a 38 2c  | RGB",1+code%*8,|
0000c940  38 29 0d 2a 44 4a f2 6d  6f 64 65 5f 69 6e 66 6f  |8).*DJ.mode_info|
0000c950  28 6d 6f 64 65 25 2c 77  25 2c 68 25 2c 63 25 29  |(mode%,w%,h%,c%)|
0000c960  3a 24 49 4d 49 73 6d 25  3d c3 6d 6f 64 65 25 2b  |:$IMIsm%=.mode%+|
0000c970  22 20 28 22 2b c3 77 25  2b 22 78 22 2b c3 68 25  |" ("+.w%+"x"+.h%|
0000c980  2b 22 78 22 2b c3 63 25  2b 22 29 22 0d 2a 4e 05  |+"x"+.c%+")".*N.|
0000c990  e1 0d 2a 58 05 20 0d 2a  62 16 dd f2 6e 65 77 5f  |..*X. .*b...new_|
0000c9a0  69 6d 61 67 65 5f 77 69  6e 64 6f 77 0d 2a 6c 41  |image_window.*lA|
0000c9b0  f4 20 43 72 65 61 74 65  73 20 6e 65 77 20 69 6d  |. Creates new im|
0000c9c0  61 67 65 20 77 69 6e 64  6f 77 20 6f 66 20 61 70  |age window of ap|
0000c9d0  70 72 6f 70 69 61 74 65  20 73 69 7a 65 20 69 6e  |propiate size in|
0000c9e0  20 63 75 72 72 65 6e 74  20 6d 6f 64 65 0d 2a 76  | current mode.*v|
0000c9f0  08 ea 20 77 25 0d 2a 80  24 f2 61 75 74 6f 7a 6f  |.. w%.*.$.autozo|
0000ca00  6f 6d 3a f4 20 41 75 74  6f 20 7a 6f 6f 6d 20 69  |om:. Auto zoom i|
0000ca10  66 20 65 6e 61 62 6c 65  64 0d 2a 8a 40 21 62 6c  |f enabled.*.@!bl|
0000ca20  6f 63 6b 3d 77 69 6e 5f  69 6d 67 25 3a c8 99 20  |ock=win_img%:.. |
0000ca30  57 47 65 74 57 49 25 2c  2c 62 6c 6f 63 6b 3a f4  |WGetWI%,,block:.|
0000ca40  20 52 65 61 64 20 77 69  6e 64 6f 77 27 73 20 64  | Read window's d|
0000ca50  65 66 69 6e 69 74 69 6f  6e 0d 2a 94 3d 21 64 75  |efinition.*.=!du|
0000ca60  6d 25 3d 77 69 6e 5f 69  6d 67 25 3a c8 99 20 57  |m%=win_img%:.. W|
0000ca70  44 65 6c 65 74 65 57 25  2c 2c 64 75 6d 25 3a f4  |DeleteW%,,dum%:.|
0000ca80  20 44 65 6c 65 74 65 20  6f 6c 64 20 64 65 66 69  | Delete old defi|
0000ca90  6e 69 74 69 6f 6e 0d 2a  9e 75 77 25 3d 62 6c 6f  |nition.*.uw%=blo|
0000caa0  63 6b 2b 34 3a 77 25 21  34 30 3d 30 3a 77 25 21  |ck+4:w%!40=0:w%!|
0000cab0  34 34 3d 30 3a 77 25 21  34 38 3d a4 73 70 72 57  |44=0:w%!48=.sprW|
0000cac0  2a 5a 6f 6f 6d 58 3a 77  25 21 35 32 3d a4 73 70  |*ZoomX:w%!52=.sp|
0000cad0  72 48 2a 5a 6f 6f 6d 59  3a 24 49 4d 57 74 74 25  |rH*ZoomY:$IMWtt%|
0000cae0  3d a4 69 6d 61 67 65 5f  74 69 74 6c 65 3a f4 20  |=.image_title:. |
0000caf0  52 65 77 72 69 74 65 20  77 6f 72 6b 20 61 72 65  |Rewrite work are|
0000cb00  61 20 61 6e 64 20 74 69  74 6c 65 0d 2a a8 33 c8  |a and title.*.3.|
0000cb10  99 20 57 43 72 65 61 74  65 57 25 2c 2c 77 25 20  |. WCreateW%,,w% |
0000cb20  b8 20 77 69 6e 5f 69 6d  67 25 3a f4 20 43 72 65  |. win_img%:. Cre|
0000cb30  61 74 65 20 6e 65 77 20  77 69 6e 64 6f 77 0d 2a  |ate new window.*|
0000cb40  b2 23 e7 49 6d 67 20 8c  20 f2 6f 70 65 6e 5f 77  |.#.Img . .open_w|
0000cb50  69 6e 64 6f 77 28 77 69  6e 5f 69 6d 67 25 2c 30  |indow(win_img%,0|
0000cb60  29 0d 2a bc 05 e1 0d 2a  c6 05 20 0d 2a d0 11 dd  |).*....*.. .*...|
0000cb70  a4 69 6d 61 67 65 5f 74  69 74 6c 65 0d 2a da 3a  |.image_title.*.:|
0000cb80  f4 20 52 65 74 75 72 6e  73 20 69 6d 61 67 65 20  |. Returns image |
0000cb90  77 69 6e 64 6f 77 20 74  69 74 6c 65 20 64 65 70  |window title dep|
0000cba0  65 6e 64 69 6e 67 20 6f  6e 20 7a 6f 6f 6d 20 66  |ending on zoom f|
0000cbb0  61 63 74 6f 72 73 0d 2a  e4 0c ea 20 74 69 74 6c  |actors.*... titl|
0000cbc0  65 24 0d 2a ee 19 74 69  74 6c 65 24 3d 22 49 6d  |e$.*..title$="Im|
0000cbd0  61 67 65 22 3a f4 20 42  61 73 65 0d 2a f8 4b e7  |age":. Base.*.K.|
0000cbe0  5a 6f 6f 6d 58 3c 31 20  8c 20 74 69 74 6c 65 24  |ZoomX<1 . title$|
0000cbf0  2b 3d 22 20 78 2f 22 2b  c3 28 31 2f 5a 6f 6f 6d  |+=" x/"+.(1/Zoom|
0000cc00  58 29 20 8b 20 e7 5a 6f  6f 6d 58 3e 31 20 8c 20  |X) . .ZoomX>1 . |
0000cc10  74 69 74 6c 65 24 2b 3d  22 20 78 2a 22 2b c3 28  |title$+=" x*"+.(|
0000cc20  5a 6f 6f 6d 58 29 0d 2b  02 4b e7 5a 6f 6f 6d 59  |ZoomX).+.K.ZoomY|
0000cc30  3c 31 20 8c 20 74 69 74  6c 65 24 2b 3d 22 20 79  |<1 . title$+=" y|
0000cc40  2f 22 2b c3 28 31 2f 5a  6f 6f 6d 59 29 20 8b 20  |/"+.(1/ZoomY) . |
0000cc50  e7 5a 6f 6f 6d 59 3e 31  20 8c 20 74 69 74 6c 65  |.ZoomY>1 . title|
0000cc60  24 2b 3d 22 20 79 2a 22  2b c3 28 5a 6f 6f 6d 59  |$+=" y*"+.(ZoomY|
0000cc70  29 0d 2b 0c 17 3d 74 69  74 6c 65 24 2b 22 20 22  |).+..=title$+" "|
0000cc80  2b 49 6e 46 69 6c 65 24  0d 2b 16 05 20 0d 2b 20  |+InFile$.+.. .+ |
0000cc90  18 dd f2 73 65 74 28 77  25 2c 68 25 2c 63 25 2c  |...set(w%,h%,c%,|
0000cca0  f8 20 6d 25 29 0d 2b 2a  4b f4 20 53 6f 6d 65 20  |. m%).+*K. Some |
0000ccb0  70 72 65 73 65 74 74 69  6e 67 20 3a 20 64 65 74  |presetting : det|
0000ccc0  65 72 6d 69 6e 65 73 20  6d 6f 64 65 2c 20 73 65  |ermines mode, se|
0000ccd0  74 73 20 64 65 66 65 72  72 65 64 20 73 63 61 6c  |ts deferred scal|
0000cce0  69 6e 67 2c 20 73 65 74  73 20 6f 75 74 70 69 78  |ing, sets outpix|
0000ccf0  0d 2b 34 41 f4 20 47 69  76 65 6e 20 61 72 65 20  |.+4A. Given are |
0000cd00  77 69 64 74 68 2c 20 68  65 69 67 68 74 2c 20 63  |width, height, c|
0000cd10  6f 6c 6f 75 72 73 20 6f  66 20 69 6d 61 67 65 2c  |olours of image,|
0000cd20  20 72 65 74 75 72 6e 65  64 20 69 73 20 6d 6f 64  | returned is mod|
0000cd30  65 0d 2b 3e 32 6d 25 3d  a4 6d 6f 64 65 28 77 25  |e.+>2m%=.mode(w%|
0000cd40  2c 68 25 2c 63 25 29 3a  f4 20 52 65 74 75 72 6e  |,h%,c%):. Return|
0000cd50  20 6d 6f 73 74 20 73 75  69 74 61 62 6c 65 20 6d  | most suitable m|
0000cd60  6f 64 65 0d 2b 48 21 4f  75 74 4d 6f 64 65 25 3d  |ode.+H!OutMode%=|
0000cd70  6d 25 3a f4 20 53 65 74  20 6f 75 74 70 75 74 20  |m%:. Set output |
0000cd80  6d 6f 64 65 0d 2b 52 40  e7 44 69 76 49 73 49 6e  |mode.+R@.DivIsIn|
0000cd90  58 20 8c 20 58 44 69 76  25 3d 77 25 3a f4 20 53  |X . XDiv%=w%:. S|
0000cda0  65 6c 65 63 74 20 58 69  6e 20 61 73 20 58 44 69  |elect Xin as XDi|
0000cdb0  76 20 28 64 65 66 65 72  72 65 64 20 73 63 61 6c  |v (deferred scal|
0000cdc0  69 6e 67 29 0d 2b 5c 24  e7 44 69 76 49 73 49 6e  |ing).+\$.DivIsIn|
0000cdd0  59 20 8c 20 59 44 69 76  25 3d 68 25 3a f4 20 49  |Y . YDiv%=h%:. I|
0000cde0  64 65 6d 20 59 44 69 76  0d 2b 66 46 e7 58 4d 75  |dem YDiv.+fF.XMu|
0000cdf0  6c 25 3c 3d 58 44 69 76  25 20 8c 20 4f 75 74 58  |l%<=XDiv% . OutX|
0000ce00  25 3d 77 25 2a 58 4d 75  6c 25 2f 58 44 69 76 25  |%=w%*XMul%/XDiv%|
0000ce10  20 8b 20 4f 75 74 58 25  3d a4 63 65 69 6c 28 77  | . OutX%=.ceil(w|
0000ce20  25 2a 58 4d 75 6c 25 2f  58 44 69 76 25 29 0d 2b  |%*XMul%/XDiv%).+|
0000ce30  70 46 e7 59 4d 75 6c 25  3c 3d 59 44 69 76 25 20  |pF.YMul%<=YDiv% |
0000ce40  8c 20 4f 75 74 59 25 3d  68 25 2a 59 4d 75 6c 25  |. OutY%=h%*YMul%|
0000ce50  2f 59 44 69 76 25 20 8b  20 4f 75 74 59 25 3d a4  |/YDiv% . OutY%=.|
0000ce60  63 65 69 6c 28 68 25 2a  59 4d 75 6c 25 2f 59 44  |ceil(h%*YMul%/YD|
0000ce70  69 76 25 29 0d 2b 7a 05  e1 0d 2b 84 05 20 0d 2b  |iv%).+z...+.. .+|
0000ce80  8e 16 dd a4 6e 65 77 5f  69 6d 61 67 65 28 72 6f  |....new_image(ro|
0000ce90  6f 6d 25 29 0d 2b 98 1c  f4 20 41 6c 6c 6f 63 61  |om%).+... Alloca|
0000cea0  74 65 73 20 69 6d 61 67  65 20 73 70 72 69 74 65  |tes image sprite|
0000ceb0  0d 2b a2 41 f4 20 54 68  65 72 65 20 61 72 65 20  |.+.A. There are |
0000cec0  61 74 20 6c 65 61 73 74  20 72 6f 6f 6d 25 20 62  |at least room% b|
0000ced0  79 74 65 73 20 66 72 6f  6d 20 73 70 72 69 74 65  |ytes from sprite|
0000cee0  20 73 74 61 72 74 20 74  6f 20 27 6c 6f 6d 65 6d  | start to 'lomem|
0000cef0  27 0d 2b ac 2d f4 20 52  65 74 75 72 6e 73 20 54  |'.+.-. Returns T|
0000cf00  52 55 45 20 69 66 20 61  6c 6c 20 69 73 20 77 65  |RUE if all is we|
0000cf10  6c 6c 2c 20 65 6c 73 65  20 46 41 4c 53 45 0d 2b  |ll, else FALSE.+|
0000cf20  b6 3f ea 20 63 6f 6c 62  69 74 73 25 2c 62 69 74  |.?. colbits%,bit|
0000cf30  73 25 2c 62 69 74 73 72  6f 74 25 2c 77 6f 72 64  |s%,bitsrot%,word|
0000cf40  73 25 2c 77 6f 72 64 73  72 6f 74 25 2c 73 69 7a  |s%,wordsrot%,siz|
0000cf50  65 75 70 25 2c 73 69 7a  65 72 6f 74 25 0d 2b c0  |eup%,sizerot%.+.|
0000cf60  24 ea 20 64 61 74 61 73  69 7a 65 25 2c 73 70 74  |$. datasize%,spt|
0000cf70  72 25 2c 73 70 72 64 6f  66 66 25 2c 73 69 7a 65  |r%,sprdoff%,size|
0000cf80  25 0d 2b ca 47 78 72 65  73 25 3d 4f 75 74 58 25  |%.+.Gxres%=OutX%|
0000cf90  3a 79 72 65 73 25 3d 4f  75 74 59 25 3a 6d 6f 64  |:yres%=OutY%:mod|
0000cfa0  65 25 3d 4f 75 74 4d 6f  64 65 25 3a f4 20 4f 75  |e%=OutMode%:. Ou|
0000cfb0  74 70 75 74 20 69 6d 61  67 65 20 73 69 7a 65 20  |tput image size |
0000cfc0  61 6e 64 20 6d 6f 64 65  0d 2b d4 60 e7 28 79 72  |and mode.+.`.(yr|
0000cfd0  65 73 25 3c 3d 30 29 84  28 78 72 65 73 25 3c 3d  |es%<=0).(xres%<=|
0000cfe0  30 29 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |0) . .error(-1,"|
0000cff0  54 68 65 72 65 20 61 72  65 20 6e 6f 20 70 69 78  |There are no pix|
0000d000  65 6c 73 20 6c 65 66 74  20 77 69 74 68 20 74 68  |els left with th|
0000d010  65 20 63 75 72 72 65 6e  74 20 73 63 61 6c 69 6e  |e current scalin|
0000d020  67 20 21 22 29 3a 3d a3  0d 2b de 32 63 6f 6c 62  |g !"):=..+.2colb|
0000d030  69 74 73 25 3d 32 5e a4  6d 6f 64 65 5f 76 61 72  |its%=2^.mode_var|
0000d040  28 6d 6f 64 65 25 2c 39  29 3a f4 20 42 69 74 73  |(mode%,9):. Bits|
0000d050  20 70 65 72 20 70 69 78  65 6c 0d 2b e8 3f 62 69  | per pixel.+.?bi|
0000d060  74 73 25 3d 78 72 65 73  25 2a 63 6f 6c 62 69 74  |ts%=xres%*colbit|
0000d070  73 25 3a 62 69 74 73 72  6f 74 25 3d 79 72 65 73  |s%:bitsrot%=yres|
0000d080  25 2a 63 6f 6c 62 69 74  73 25 3a f4 20 42 69 74  |%*colbits%:. Bit|
0000d090  73 20 70 65 72 20 72 6f  77 0d 2b f2 43 77 6f 72  |s per row.+.Cwor|
0000d0a0  64 73 25 3d 28 62 69 74  73 25 2b 33 31 29 3e 3e  |ds%=(bits%+31)>>|
0000d0b0  35 3a 77 6f 72 64 73 72  6f 74 25 3d 28 62 69 74  |5:wordsrot%=(bit|
0000d0c0  73 72 6f 74 25 2b 33 31  29 3e 3e 35 3a f4 20 57  |srot%+31)>>5:. W|
0000d0d0  6f 72 64 73 20 70 65 72  20 72 6f 77 0d 2b fc 46  |ords per row.+.F|
0000d0e0  73 69 7a 65 75 70 25 3d  77 6f 72 64 73 25 2a 79  |sizeup%=words%*y|
0000d0f0  72 65 73 25 3c 3c 32 3a  73 69 7a 65 72 6f 74 25  |res%<<2:sizerot%|
0000d100  3d 77 6f 72 64 73 72 6f  74 25 2a 78 72 65 73 25  |=wordsrot%*xres%|
0000d110  3c 3c 32 3a f4 20 53 70  72 69 74 65 20 73 69 7a  |<<2:. Sprite siz|
0000d120  65 73 0d 2c 06 4b 64 61  74 61 73 69 7a 65 25 3d  |es.,.Kdatasize%=|
0000d130  a4 6d 61 78 28 73 69 7a  65 75 70 25 2c 73 69 7a  |.max(sizeup%,siz|
0000d140  65 72 6f 74 25 29 3a f4  20 4d 61 78 69 6d 75 6d  |erot%):. Maximum|
0000d150  20 73 70 72 69 74 65 20  73 69 7a 65 20 28 6e 6f  | sprite size (no|
0000d160  72 6d 61 6c 2f 72 6f 74  61 74 65 64 29 0d 2c 10  |rmal/rotated).,.|
0000d170  38 64 61 74 61 73 69 7a  65 25 3d a4 6d 61 78 28  |8datasize%=.max(|
0000d180  64 61 74 61 73 69 7a 65  25 2c 72 6f 6f 6d 25 29  |datasize%,room%)|
0000d190  3a f4 20 4d 6f 72 65 20  72 6f 6f 6d 20 6e 65 65  |:. More room nee|
0000d1a0  64 65 64 20 3f 0d 2c 1a  58 e7 a4 61 6c 6c 6f 63  |ded ?.,.X..alloc|
0000d1b0  61 74 65 28 42 5f 61 72  65 61 25 2c 31 36 29 20  |ate(B_area%,16) |
0000d1c0  8b 20 f2 65 72 72 6f 72  28 2d 31 2c 22 49 20 68  |. .error(-1,"I h|
0000d1d0  61 76 65 20 6e 6f 20 72  6f 6f 6d 20 66 6f 72 20  |ave no room for |
0000d1e0  74 68 65 20 73 70 72 69  74 65 20 61 72 65 61 20  |the sprite area |
0000d1f0  68 65 61 64 65 72 20 21  22 29 3a 3d a3 0d 2c 24  |header !"):=..,$|
0000d200  3a 73 70 72 64 6f 66 66  25 3d 34 34 3a f4 20 4f  |:sprdoff%=44:. O|
0000d210  66 66 73 65 74 20 74 6f  20 73 70 72 69 74 65 20  |ffset to sprite |
0000d220  64 61 74 61 2f 73 70 72  69 74 65 20 68 65 61 64  |data/sprite head|
0000d230  65 72 20 73 69 7a 65 0d  2c 2e 61 e7 a4 61 6c 6c  |er size.,.a..all|
0000d240  6f 63 61 74 65 28 42 5f  73 70 72 69 74 65 25 2c  |ocate(B_sprite%,|
0000d250  73 70 72 64 6f 66 66 25  29 20 8b 20 f2 65 72 72  |sprdoff%) . .err|
0000d260  6f 72 28 2d 31 2c 22 49  20 68 61 76 65 20 6e 6f  |or(-1,"I have no|
0000d270  20 72 6f 6f 6d 20 66 6f  72 20 74 68 65 20 69 6d  | room for the im|
0000d280  61 67 65 20 73 70 72 69  74 65 20 68 65 61 64 65  |age sprite heade|
0000d290  72 20 21 22 29 3a 3d a3  0d 2c 38 8c e7 a4 61 6c  |r !"):=..,8...al|
0000d2a0  6c 6f 63 61 74 65 28 42  5f 73 70 72 69 6d 67 25  |locate(B_sprimg%|
0000d2b0  2c 64 61 74 61 73 69 7a  65 25 29 20 8b 20 f2 65  |,datasize%) . .e|
0000d2c0  72 72 6f 72 28 2d 31 2c  22 49 20 68 61 76 65 20  |rror(-1,"I have |
0000d2d0  6e 6f 20 72 6f 6f 6d 20  74 6f 20 73 74 6f 72 65  |no room to store|
0000d2e0  20 74 68 69 73 20 69 6d  61 67 65 20 21 20 49 20  | this image ! I |
0000d2f0  6e 65 65 64 20 61 74 20  6c 65 61 73 74 20 22 2b  |need at least "+|
0000d300  c3 28 28 53 68 6f 72 74  25 2b 31 30 32 33 29 81  |.((Short%+1023).|
0000d310  31 30 32 34 29 2b 22 4b  20 6d 6f 72 65 20 21 22  |1024)+"K more !"|
0000d320  29 3a 3d a3 0d 2c 42 36  e7 64 61 74 61 73 69 7a  |):=..,B6.datasiz|
0000d330  65 25 3c 72 6f 6f 6d 25  20 8c 20 73 69 7a 65 25  |e%<room% . size%|
0000d340  3d 72 6f 6f 6d 25 2d 64  61 74 61 73 69 7a 65 25  |=room%-datasize%|
0000d350  20 8b 20 73 69 7a 65 25  3d 30 0d 2c 4c 8a e7 a4  | . size%=0.,L...|
0000d360  61 6c 6c 6f 63 61 74 65  28 42 5f 69 6d 67 74 6f  |allocate(B_imgto|
0000d370  70 25 2c 73 69 7a 65 25  29 20 8b 20 f2 65 72 72  |p%,size%) . .err|
0000d380  6f 72 28 2d 31 2c 22 49  20 68 61 76 65 20 6e 6f  |or(-1,"I have no|
0000d390  20 72 6f 6f 6d 20 74 6f  20 70 72 6f 63 65 73 73  | room to process|
0000d3a0  20 74 68 69 73 20 69 6d  61 67 65 20 21 20 49 20  | this image ! I |
0000d3b0  6e 65 65 64 20 61 74 20  6c 65 61 73 74 20 22 2b  |need at least "+|
0000d3c0  c3 28 28 53 68 6f 72 74  25 2b 31 30 32 33 29 81  |.((Short%+1023).|
0000d3d0  31 30 32 34 29 2b 22 4b  20 6d 6f 72 65 20 21 22  |1024)+"K more !"|
0000d3e0  29 3a 3d a3 0d 2c 56 4a  53 70 72 54 6f 70 25 3d  |):=..,VJSprTop%=|
0000d3f0  42 75 66 66 65 72 25 28  42 5f 69 6d 67 74 6f 70  |Buffer%(B_imgtop|
0000d400  25 2c 30 29 2b 42 75 66  66 65 72 25 28 42 5f 69  |%,0)+Buffer%(B_i|
0000d410  6d 67 74 6f 70 25 2c 31  29 3a f4 20 45 6e 64 20  |mgtop%,1):. End |
0000d420  6f 66 20 73 70 72 69 74  65 20 72 6f 6f 6d 0d 2c  |of sprite room.,|
0000d430  60 b6 53 70 72 69 74 65  25 3d 42 75 66 66 65 72  |`.Sprite%=Buffer|
0000d440  25 28 42 5f 61 72 65 61  25 2c 30 29 3a 21 53 70  |%(B_area%,0):!Sp|
0000d450  72 69 74 65 25 3d 42 75  66 66 65 72 25 28 42 5f  |rite%=Buffer%(B_|
0000d460  61 72 65 61 25 2c 31 29  2b 42 75 66 66 65 72 25  |area%,1)+Buffer%|
0000d470  28 42 5f 73 70 72 69 74  65 25 2c 31 29 2b 42 75  |(B_sprite%,1)+Bu|
0000d480  66 66 65 72 25 28 42 5f  73 70 72 69 6d 67 25 2c  |ffer%(B_sprimg%,|
0000d490  31 29 3a 53 70 72 69 74  65 25 21 34 3d 31 3a 53  |1):Sprite%!4=1:S|
0000d4a0  70 72 69 74 65 25 21 38  3d 31 36 3a 53 70 72 69  |prite%!8=16:Spri|
0000d4b0  74 65 25 21 31 32 3d 53  70 72 69 74 65 25 21 38  |te%!12=Sprite%!8|
0000d4c0  2b 73 70 72 64 6f 66 66  25 2b 73 69 7a 65 75 70  |+sprdoff%+sizeup|
0000d4d0  25 3a f4 20 49 6e 69 74  20 73 70 72 69 74 65 20  |%:. Init sprite |
0000d4e0  61 72 65 61 0d 2c 6a 30  73 70 74 72 25 3d 42 75  |area.,j0sptr%=Bu|
0000d4f0  66 66 65 72 25 28 42 5f  73 70 72 69 74 65 25 2c  |ffer%(B_sprite%,|
0000d500  30 29 3a f4 20 53 74 61  72 74 20 6f 66 20 73 70  |0):. Start of sp|
0000d510  72 69 74 65 0d 2c 74 34  53 70 72 45 6e 64 25 3d  |rite.,t4SprEnd%=|
0000d520  73 70 74 72 25 2b 73 70  72 64 6f 66 66 25 2b 64  |sptr%+sprdoff%+d|
0000d530  61 74 61 73 69 7a 65 25  3a f4 20 45 6e 64 20 6f  |atasize%:. End o|
0000d540  66 20 73 70 72 69 74 65  0d 2c 7e 33 21 73 70 74  |f sprite.,~3!spt|
0000d550  72 25 3d 73 70 72 64 6f  66 66 25 2b 73 69 7a 65  |r%=sprdoff%+size|
0000d560  75 70 25 3a f4 20 4f 66  66 73 65 74 20 74 6f 20  |up%:. Offset to |
0000d570  6e 65 78 74 20 73 70 72  69 74 65 0d 2c 88 30 24  |next sprite.,.0$|
0000d580  28 73 70 74 72 25 2b 34  29 3d 49 6d 61 67 65 53  |(sptr%+4)=ImageS|
0000d590  70 72 24 2b c4 31 32 2c  bd 30 29 3a f4 20 53 70  |pr$+.12,.0):. Sp|
0000d5a0  72 69 74 65 27 73 20 6e  61 6d 65 0d 2c 92 28 73  |rite's name.,.(s|
0000d5b0  70 74 72 25 21 31 36 3d  77 6f 72 64 73 25 2d 31  |ptr%!16=words%-1|
0000d5c0  3a f4 20 57 69 64 74 68  20 69 6e 20 77 6f 72 64  |:. Width in word|
0000d5d0  73 2d 31 0d 2c 9c 2c 73  70 74 72 25 21 32 30 3d  |s-1.,.,sptr%!20=|
0000d5e0  79 72 65 73 25 2d 31 3a  f4 20 48 65 69 67 68 74  |yres%-1:. Height|
0000d5f0  20 69 6e 20 73 63 61 6e  6c 69 6e 65 73 2d 31 0d  | in scanlines-1.|
0000d600  2c a6 3d 73 70 74 72 25  21 32 34 3d 30 3a 73 70  |,.=sptr%!24=0:sp|
0000d610  74 72 25 21 32 38 3d 33  31 2d 28 77 6f 72 64 73  |tr%!28=31-(words|
0000d620  25 2a 33 32 2d 62 69 74  73 25 29 3a f4 20 53 74  |%*32-bits%):. St|
0000d630  61 72 74 2f 65 6e 64 20  62 69 74 73 0d 2c b0 44  |art/end bits.,.D|
0000d640  73 70 74 72 25 21 33 32  3d 73 70 72 64 6f 66 66  |sptr%!32=sprdoff|
0000d650  25 3a 73 70 74 72 25 21  33 36 3d 73 70 74 72 25  |%:sptr%!36=sptr%|
0000d660  21 33 32 3a f4 20 4f 66  66 73 65 74 20 74 6f 20  |!32:. Offset to |
0000d670  73 70 72 69 74 65 20 64  61 74 61 2f 6d 61 73 6b  |sprite data/mask|
0000d680  0d 2c ba 23 73 70 74 72  25 21 34 30 3d 6d 6f 64  |.,.#sptr%!40=mod|
0000d690  65 25 3a f4 20 4d 6f 64  65 20 6f 66 20 73 70 72  |e%:. Mode of spr|
0000d6a0  69 74 65 0d 2c c4 48 c8  99 20 22 54 72 61 6e 73  |ite.,.H.. "Trans|
0000d6b0  6c 61 74 6f 72 5f 57 72  69 74 65 57 6f 72 64 73  |lator_WriteWords|
0000d6c0  22 2c 73 70 74 72 25 2b  73 70 72 64 6f 66 66 25  |",sptr%+sprdoff%|
0000d6d0  2c 30 2c 73 69 7a 65 75  70 25 3e 3e 32 3a f4 20  |,0,sizeup%>>2:. |
0000d6e0  57 69 70 65 20 73 70 72  69 74 65 0d 2c ce 28 f2  |Wipe sprite.,.(.|
0000d6f0  76 61 72 28 22 72 6f 77  6c 22 2c 77 6f 72 64 73  |var("rowl",words|
0000d700  25 3c 3c 32 29 3a f4 20  4d 6f 64 75 6c 65 20 69  |%<<2):. Module i|
0000d710  6e 66 6f 0d 2c d8 27 f2  76 61 72 28 22 6f 75 74  |nfo.,.'.var("out|
0000d720  62 22 2c 63 6f 6c 62 69  74 73 25 29 3a f4 20 4d  |b",colbits%):. M|
0000d730  6f 64 75 6c 65 20 69 6e  66 6f 0d 2c e2 2d f2 76  |odule info.,.-.v|
0000d740  61 72 28 22 73 70 72 69  22 2c 73 70 74 72 25 2b  |ar("spri",sptr%+|
0000d750  73 70 74 72 25 21 33 32  29 3a f4 20 4d 6f 64 75  |sptr%!32):. Modu|
0000d760  6c 65 20 69 6e 66 6f 0d  2c ec 4a 53 70 72 43 6f  |le info.,.JSprCo|
0000d770  6c 62 69 74 73 25 3d 63  6f 6c 62 69 74 73 25 3a  |lbits%=colbits%:|
0000d780  53 70 72 50 74 72 25 3d  73 70 74 72 25 3a 53 70  |SprPtr%=sptr%:Sp|
0000d790  72 4d 6f 64 65 25 3d 6d  6f 64 65 25 3a f4 20 47  |rMode%=mode%:. G|
0000d7a0  6c 6f 62 61 6c 20 73 70  72 69 74 65 20 69 6e 66  |lobal sprite inf|
0000d7b0  6f 0d 2c f6 44 53 70 72  57 25 3d 78 72 65 73 25  |o.,.DSprW%=xres%|
0000d7c0  3a 53 70 72 48 25 3d 79  72 65 73 25 3a f4 20 52  |:SprH%=yres%:. R|
0000d7d0  65 6d 65 6d 62 65 72 20  73 70 72 69 74 65 27 73  |emember sprite's|
0000d7e0  20 72 65 73 6f 6c 75 74  69 6f 6e 20 69 6e 20 70  | resolution in p|
0000d7f0  69 78 65 6c 73 0d 2d 00  06 3d b9 0d 2d 0a 05 20  |ixels.-..=..-.. |
0000d800  0d 2d 14 10 dd f2 64 65  61 6c 6c 6f 63 61 74 65  |.-....deallocate|
0000d810  0d 2d 1e 1d f4 20 44 65  61 6c 6c 6f 63 61 74 65  |.-... Deallocate|
0000d820  73 20 61 6c 6c 20 62 75  66 66 65 72 73 0d 2d 28  |s all buffers.-(|
0000d830  26 42 75 66 66 65 72 25  28 29 3d 30 3a f4 20 57  |&Buffer%()=0:. W|
0000d840  69 70 65 20 61 6c 6c 20  62 75 66 66 65 72 20 69  |ipe all buffer i|
0000d850  6e 66 6f 0d 2d 32 47 53  74 6f 72 65 25 3d a4 61  |nfo.-2GStore%=.a|
0000d860  6c 69 67 6e 28 48 65 61  70 25 29 3a 46 72 65 65  |lign(Heap%):Free|
0000d870  25 3d 48 65 61 70 53 69  7a 65 25 3a f4 20 44 65  |%=HeapSize%:. De|
0000d880  61 6c 6c 6f 63 61 74 65  20 61 6c 6c 20 73 74 6f  |allocate all sto|
0000d890  72 61 67 65 20 73 70 61  63 65 0d 2d 3c 05 e1 0d  |rage space.-<...|
0000d8a0  2d 46 05 20 0d 2d 50 1a  dd a4 61 6c 6c 6f 63 61  |-F. .-P...alloca|
0000d8b0  74 65 28 6e 72 25 2c 62  79 74 65 73 25 29 0d 2d  |te(nr%,bytes%).-|
0000d8c0  5a 40 f4 20 41 6c 6c 6f  63 61 74 65 73 20 62 79  |Z@. Allocates by|
0000d8d0  74 65 73 25 20 62 79 74  65 73 20 74 6f 20 62 75  |tes% bytes to bu|
0000d8e0  66 66 65 72 20 6e 75 6d  62 65 72 20 6e 72 25 20  |ffer number nr% |
0000d8f0  28 77 6f 72 64 2d 61 6c  69 67 6e 65 64 29 0d 2d  |(word-aligned).-|
0000d900  64 2b f4 20 52 65 74 75  72 6e 73 20 54 52 55 45  |d+. Returns TRUE|
0000d910  20 69 66 20 73 75 63 63  65 73 66 75 6c 2c 20 65  | if succesful, e|
0000d920  6c 73 65 20 46 41 4c 53  45 0d 2d 6e 71 e7 28 62  |lse FALSE.-nq.(b|
0000d930  79 74 65 73 25 3c 30 29  84 28 62 79 74 65 73 25  |ytes%<0).(bytes%|
0000d940  3e 31 36 2a 31 30 32 34  2a 31 30 32 34 29 20 8c  |>16*1024*1024) .|
0000d950  20 f2 65 72 72 6f 72 28  2d 31 2c 22 41 72 65 20  | .error(-1,"Are |
0000d960  79 6f 75 20 4e 55 54 53  20 3f 22 29 3a 53 68 6f  |you NUTS ?"):Sho|
0000d970  72 74 25 3d 39 39 39 39  39 39 2a 31 30 32 34 3a  |rt%=999999*1024:|
0000d980  3d a3 3a f4 20 45 6e 6f  72 6d 6f 75 73 20 61 6d  |=.:. Enormous am|
0000d990  6f 75 6e 74 20 61 73 6b  65 64 0d 2d 78 26 62 79  |ount asked.-x&by|
0000d9a0  74 65 73 25 3d a4 61 6c  69 67 6e 28 62 79 74 65  |tes%=.align(byte|
0000d9b0  73 25 29 3a f4 20 57 6f  72 64 2d 61 6c 69 67 6e  |s%):. Word-align|
0000d9c0  0d 2d 82 2a e7 46 72 65  65 25 3c 62 79 74 65 73  |.-.*.Free%<bytes|
0000d9d0  25 20 8c 20 53 68 6f 72  74 25 3d 62 79 74 65 73  |% . Short%=bytes|
0000d9e0  25 2d 46 72 65 65 25 3a  3d a3 0d 2d 8c 41 42 75  |%-Free%:=..-.ABu|
0000d9f0  66 66 65 72 25 28 6e 72  25 2c 30 29 3d 53 74 6f  |ffer%(nr%,0)=Sto|
0000da00  72 65 25 3a 42 75 66 66  65 72 25 28 6e 72 25 2c  |re%:Buffer%(nr%,|
0000da10  31 29 3d 62 79 74 65 73  25 3a f4 20 41 6c 6c 6f  |1)=bytes%:. Allo|
0000da20  63 61 74 65 20 62 75 66  66 65 72 0d 2d 96 3a 53  |cate buffer.-.:S|
0000da30  74 6f 72 65 25 2b 3d 62  79 74 65 73 25 3a 46 72  |tore%+=bytes%:Fr|
0000da40  65 65 25 2d 3d 62 79 74  65 73 25 3a f4 20 44 65  |ee%-=bytes%:. De|
0000da50  61 6c 6c 6f 63 61 74 65  20 73 74 6f 72 61 67 65  |allocate storage|
0000da60  20 75 73 65 64 0d 2d a0  06 3d b9 0d 2d aa 05 20  | used.-..=..-.. |
0000da70  0d 2d b4 34 dd a4 61 6c  6c 6f 63 61 74 65 5f 73  |.-.4..allocate_s|
0000da80  74 64 28 77 69 64 74 68  25 2c 70 69 78 62 75 66  |td(width%,pixbuf|
0000da90  31 25 2c 70 69 78 76 61  6c 25 2c 70 69 78 62 75  |1%,pixval%,pixbu|
0000daa0  66 32 25 29 0d 2d be 36  f4 20 41 6c 6c 6f 63 61  |f2%).-.6. Alloca|
0000dab0  74 65 73 20 73 74 61 6e  64 61 72 64 20 62 75 66  |tes standard buf|
0000dac0  66 65 72 73 20 28 70 69  78 65 6c 20 62 75 66 66  |fers (pixel buff|
0000dad0  65 72 73 2c 20 65 74 63  2e 29 0d 2d c8 0c ea 20  |ers, etc.).-... |
0000dae0  74 69 6d 65 73 25 0d 2d  d2 5a e7 a4 61 6c 6c 6f  |times%.-.Z..allo|
0000daf0  63 61 74 65 28 42 5f 70  69 78 62 75 66 31 25 2c  |cate(B_pixbuf1%,|
0000db00  70 69 78 62 75 66 31 25  29 20 8b 20 f2 65 72 72  |pixbuf1%) . .err|
0000db10  6f 72 28 2d 31 2c 22 49  20 68 61 76 65 20 6e 6f  |or(-1,"I have no|
0000db20  20 72 6f 6f 6d 20 66 6f  72 20 70 69 78 65 6c 20  | room for pixel |
0000db30  62 75 66 66 65 72 20 23  31 20 21 22 29 3a 3d a3  |buffer #1 !"):=.|
0000db40  0d 2d dc 5d e7 a4 61 6c  6c 6f 63 61 74 65 28 42  |.-.]..allocate(B|
0000db50  5f 70 69 78 76 61 6c 25  2c 70 69 78 76 61 6c 25  |_pixval%,pixval%|
0000db60  29 20 8b 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |) . .error(-1,"I|
0000db70  20 68 61 76 65 20 6e 6f  20 72 6f 6f 6d 20 66 6f  | have no room fo|
0000db80  72 20 61 20 70 69 78 65  6c 20 76 61 6c 75 65 20  |r a pixel value |
0000db90  62 75 66 66 65 72 20 21  22 29 3a 3d a3 0d 2d e6  |buffer !"):=..-.|
0000dba0  5a e7 a4 61 6c 6c 6f 63  61 74 65 28 42 5f 70 69  |Z..allocate(B_pi|
0000dbb0  78 62 75 66 32 25 2c 70  69 78 62 75 66 32 25 29  |xbuf2%,pixbuf2%)|
0000dbc0  20 8b 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
0000dbd0  68 61 76 65 20 6e 6f 20  72 6f 6f 6d 20 66 6f 72  |have no room for|
0000dbe0  20 70 69 78 65 6c 20 62  75 66 66 65 72 20 23 32  | pixel buffer #2|
0000dbf0  20 21 22 29 3a 3d a3 0d  2d f0 13 e7 58 4d 75 6c  | !"):=..-...XMul|
0000dc00  25 3c 3e 58 44 69 76 25  20 8c 0d 2d fa 86 20 e7  |%<>XDiv% ..-.. .|
0000dc10  a4 61 6c 6c 6f 63 61 74  65 28 42 5f 70 69 78 73  |.allocate(B_pixs|
0000dc20  63 61 6c 65 64 25 2c a4  6d 61 78 28 70 69 78 62  |caled%,.max(pixb|
0000dc30  75 66 31 25 2c 70 69 78  76 61 6c 25 29 2a a4 63  |uf1%,pixval%)*.c|
0000dc40  65 69 6c 28 58 4d 75 6c  25 2f 58 44 69 76 25 29  |eil(XMul%/XDiv%)|
0000dc50  29 20 8b 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |) . .error(-1,"I|
0000dc60  20 68 61 76 65 20 6e 6f  20 72 6f 6f 6d 20 66 6f  | have no room fo|
0000dc70  72 20 74 68 65 20 73 63  61 6c 65 64 20 70 69 78  |r the scaled pix|
0000dc80  65 6c 20 62 75 66 66 65  72 20 21 22 29 3a 3d a3  |el buffer !"):=.|
0000dc90  0d 2e 04 05 cd 0d 2e 0e  12 e7 45 72 72 53 70 72  |..........ErrSpr|
0000dca0  65 61 64 3d 32 20 8c 0d  2e 18 26 20 e7 42 6c 61  |ead=2 ....& .Bla|
0000dcb0  63 6b 57 68 69 74 65 20  8c 20 74 69 6d 65 73 25  |ckWhite . times%|
0000dcc0  3d 31 20 8b 20 74 69 6d  65 73 25 3d 34 0d 2e 22  |=1 . times%=4.."|
0000dcd0  87 20 e7 a4 61 6c 6c 6f  63 61 74 65 28 42 5f 66  |. ..allocate(B_f|
0000dce0  73 65 72 72 25 2c 28 77  69 64 74 68 25 2b 32 29  |serr%,(width%+2)|
0000dcf0  2a 74 69 6d 65 73 25 2a  34 2a a4 63 65 69 6c 28  |*times%*4*.ceil(|
0000dd00  58 4d 75 6c 25 2f 58 44  69 76 25 29 29 20 8b 20  |XMul%/XDiv%)) . |
0000dd10  f2 65 72 72 6f 72 28 2d  31 2c 22 49 20 68 61 76  |.error(-1,"I hav|
0000dd20  65 20 6e 6f 20 72 6f 6f  6d 20 66 6f 72 20 46 6c  |e no room for Fl|
0000dd30  6f 79 64 20 53 74 65 69  6e 62 65 72 67 20 65 72  |oyd Steinberg er|
0000dd40  72 6f 72 20 73 70 72 65  61 64 69 6e 67 20 21 22  |ror spreading !"|
0000dd50  29 3a 3d a3 0d 2e 2c 05  cd 0d 2e 36 06 3d b9 0d  |):=...,....6.=..|
0000dd60  2e 40 05 20 0d 2e 4a 0d  dd f2 68 6f 75 72 5f 6f  |.@. ..J...hour_o|
0000dd70  6e 0d 2e 54 18 f4 20 54  75 72 6e 73 20 68 6f 75  |n..T.. Turns hou|
0000dd80  72 67 6c 61 73 73 20 6f  6e 0d 2e 5e 15 c8 99 20  |rglass on..^... |
0000dd90  22 48 6f 75 72 67 6c 61  73 73 5f 4f 6e 22 0d 2e  |"Hourglass_On"..|
0000dda0  68 05 e1 0d 2e 72 05 20  0d 2e 7c 0e dd f2 68 6f  |h....r. ..|...ho|
0000ddb0  75 72 5f 6f 66 66 0d 2e  86 19 f4 20 54 75 72 6e  |ur_off..... Turn|
0000ddc0  73 20 68 6f 75 72 67 6c  61 73 73 20 6f 66 66 0d  |s hourglass off.|
0000ddd0  2e 90 16 c8 99 20 22 48  6f 75 72 67 6c 61 73 73  |..... "Hourglass|
0000dde0  5f 4f 66 66 22 0d 2e 9a  05 e1 0d 2e a4 05 20 0d  |_Off"......... .|
0000ddf0  2e ae 1a dd f2 65 64 69  74 5f 70 61 72 74 28 73  |.....edit_part(s|
0000de00  69 7a 65 2c 70 61 72 74  29 0d 2e b8 37 f4 20 45  |ize,part)...7. E|
0000de10  64 69 74 73 20 69 6d 61  67 65 20 73 69 7a 65 20  |dits image size |
0000de20  61 6e 64 20 70 61 72 74  20 28 69 66 20 65 6e 61  |and part (if ena|
0000de30  62 6c 65 64 20 77 69 74  68 20 66 6c 61 67 73 29  |bled with flags)|
0000de40  0d 2e c2 43 f4 20 52 65  74 75 72 6e 73 20 77 69  |...C. Returns wi|
0000de50  74 68 20 28 73 63 61 6c  65 64 29 20 69 6d 61 67  |th (scaled) imag|
0000de60  65 20 69 6e 20 67 72 61  70 68 69 63 73 20 77 69  |e in graphics wi|
0000de70  6e 64 6f 77 20 72 65 61  64 79 20 66 6f 72 20 73  |ndow ready for s|
0000de80  61 76 65 0d 2e cc 41 ea  20 5f 25 2c 6f 78 25 2c  |ave...A. _%,ox%,|
0000de90  6f 79 25 2c 78 25 2c 79  25 2c 62 75 74 25 2c 78  |oy%,x%,y%,but%,x|
0000dea0  31 25 2c 78 32 25 2c 79  31 25 2c 79 32 25 2c 78  |1%,x2%,y1%,y2%,x|
0000deb0  73 25 2c 79 73 25 2c 73  69 7a 65 78 25 2c 73 69  |s%,ys%,sizex%,si|
0000dec0  7a 65 79 25 0d 2e d6 22  ea 20 73 70 72 57 25 2c  |zey%...". sprW%,|
0000ded0  73 70 72 48 25 2c 70 74  72 24 2c 72 30 2c 72 31  |sprH%,ptr$,r0,r1|
0000dee0  2c 72 32 2c 72 33 0d 2e  e0 92 21 70 6f 69 6e 74  |,r2,r3....!point|
0000def0  65 72 3d 35 31 32 3a 70  6f 69 6e 74 65 72 21 34  |er=512:pointer!4|
0000df00  3d 30 3a 70 6f 69 6e 74  65 72 21 38 3d 31 36 3a  |=0:pointer!8=16:|
0000df10  70 6f 69 6e 74 65 72 21  31 32 3d 31 36 3a 70 74  |pointer!12=16:pt|
0000df20  72 24 3d 22 70 74 72 22  3a c8 99 20 22 4f 53 5f  |r$="ptr":.. "OS_|
0000df30  53 70 72 69 74 65 4f 70  22 2c 31 35 2b 32 35 36  |SpriteOp",15+256|
0000df40  2c 70 6f 69 6e 74 65 72  2c 70 74 72 24 2c 30 2c  |,pointer,ptr$,0,|
0000df50  33 32 2c 33 32 2c 38 3a  f4 20 49 6e 69 74 69 61  |32,32,8:. Initia|
0000df60  6c 69 73 65 20 70 6f 69  6e 74 65 72 20 73 70 72  |lise pointer spr|
0000df70  69 74 65 20 61 72 65 61  0d 2e ea b5 c8 99 20 4f  |ite area...... O|
0000df80  53 53 70 6f 70 25 2c 36  30 2b 32 35 36 2c 70 6f  |SSpop%,60+256,po|
0000df90  69 6e 74 65 72 2c 70 74  72 24 2c 30 20 b8 20 72  |inter,ptr$,0 . r|
0000dfa0  30 2c 72 31 2c 72 32 2c  72 33 3a ec 20 30 2c 31  |0,r1,r2,r3:. 0,1|
0000dfb0  32 34 3a e6 30 2c 33 3a  f0 31 2c 30 2c 2d 33 32  |24:.0,3:.1,0,-32|
0000dfc0  3a f0 30 2c 30 2c 33 32  3a f0 31 2c 34 30 2c 30  |:.0,0,32:.1,40,0|
0000dfd0  3a f0 30 2c 2d 34 30 2c  30 3a f0 31 2c 36 30 2c  |:.0,-40,0:.1,60,|
0000dfe0  2d 33 30 3a f0 30 2c 2d  36 30 2c 32 36 3a f0 31  |-30:.0,-60,26:.1|
0000dff0  2c 36 30 2c 2d 33 30 3a  c8 99 20 4f 53 53 70 6f  |,60,-30:.. OSSpo|
0000e000  70 25 2c 72 30 2c 72 31  2c 72 32 2c 72 33 3a f4  |p%,r0,r1,r2,r3:.|
0000e010  20 50 6c 6f 74 20 61 72  72 6f 77 20 69 6e 20 70  | Plot arrow in p|
0000e020  6f 69 6e 74 65 72 20 73  70 72 69 74 65 0d 2e f4  |ointer sprite...|
0000e030  3f ef 32 34 2c 30 3b 30  3b 53 63 72 57 25 3b 53  |?.24,0;0;ScrW%;S|
0000e040  63 72 48 25 3b 3a f4 20  57 68 6f 6c 65 20 73 63  |crH%;:. Whole sc|
0000e050  72 65 65 6e 20 77 69 6e  64 6f 77 20 66 6f 72 20  |reen window for |
0000e060  69 6d 61 67 65 20 73 70  72 69 74 65 0d 2e fe 3a  |image sprite...:|
0000e070  73 70 72 57 25 3d a4 73  70 72 57 3a 73 70 72 48  |sprW%=.sprW:sprH|
0000e080  25 3d a4 73 70 72 48 3a  f4 20 54 72 75 65 20 4f  |%=.sprH:. True O|
0000e090  53 20 73 69 7a 65 20 6f  66 20 69 6d 61 67 65 20  |S size of image |
0000e0a0  73 70 72 69 74 65 0d 2f  08 2c 78 73 25 3d 32 5e  |sprite./.,xs%=2^|
0000e0b0  a4 6d 6f 64 65 5f 76 61  72 28 eb 2c 34 29 3a f4  |.mode_var(.,4):.|
0000e0c0  20 58 20 63 6f 6f 72 64  69 6e 61 74 65 20 73 74  | X coordinate st|
0000e0d0  65 70 0d 2f 12 2c 79 73  25 3d 32 5e a4 6d 6f 64  |ep./.,ys%=2^.mod|
0000e0e0  65 5f 76 61 72 28 eb 2c  35 29 3a f4 20 59 20 63  |e_var(.,5):. Y c|
0000e0f0  6f 6f 72 64 69 6e 61 74  65 20 73 74 65 70 0d 2f  |oordinate step./|
0000e100  1c 3e e7 53 63 72 57 25  3e 73 70 72 57 25 20 8c  |.>.ScrW%>sprW% .|
0000e110  20 73 69 7a 65 78 25 3d  73 70 72 57 25 20 8b 20  | sizex%=sprW% . |
0000e120  73 69 7a 65 78 25 3d 53  63 72 57 25 3a f4 20 49  |sizex%=ScrW%:. I|
0000e130  6e 69 74 69 61 6c 20 77  69 64 74 68 0d 2f 26 3f  |nitial width./&?|
0000e140  e7 53 63 72 48 25 3e 73  70 72 48 25 20 8c 20 73  |.ScrH%>sprH% . s|
0000e150  69 7a 65 79 25 3d 73 70  72 48 25 20 8b 20 73 69  |izey%=sprH% . si|
0000e160  7a 65 79 25 3d 53 63 72  48 25 3a f4 20 49 6e 69  |zey%=ScrH%:. Ini|
0000e170  74 69 61 6c 20 68 65 69  67 68 74 0d 2f 30 4b 21  |tial height./0K!|
0000e180  61 72 67 25 3d 73 69 7a  65 78 25 3a 61 72 67 25  |arg%=sizex%:arg%|
0000e190  21 34 3d 73 69 7a 65 79  25 3a 61 72 67 25 21 38  |!4=sizey%:arg%!8|
0000e1a0  3d 73 70 72 57 25 3a 61  72 67 25 21 31 32 3d 73  |=sprW%:arg%!12=s|
0000e1b0  70 72 48 25 3a f4 20 49  6e 69 74 69 61 6c 20 73  |prH%:. Initial s|
0000e1c0  63 61 6c 69 6e 67 0d 2f  3a 2f da 3a f2 70 6c 6f  |caling./:/.:.plo|
0000e1d0  74 5f 69 6d 61 67 65 28  30 2c 30 2c 30 2c 61 72  |t_image(0,0,0,ar|
0000e1e0  67 25 29 3a f4 20 49 6e  69 74 69 61 6c 20 64 69  |g%):. Initial di|
0000e1f0  73 70 6c 61 79 0d 2f 44  0b e7 73 69 7a 65 20 8c  |splay./D..size .|
0000e200  0d 2f 4e 3f 20 c8 97 20  c8 93 20 30 2c 30 2c 53  |./N? .. .. 0,0,S|
0000e210  63 72 57 25 2d 78 73 25  2c 53 63 72 48 25 2d 79  |crW%-xs%,ScrH%-y|
0000e220  73 25 3a f4 20 52 65 73  74 72 69 63 74 20 70 6f  |s%:. Restrict po|
0000e230  69 6e 74 65 72 20 74 6f  20 73 63 72 65 65 6e 0d  |inter to screen.|
0000e240  2f 58 36 20 6f 78 25 3d  73 69 7a 65 78 25 2d 78  |/X6 ox%=sizex%-x|
0000e250  73 25 3a 6f 79 25 3d 73  69 7a 65 79 25 2d 79 73  |s%:oy%=sizey%-ys|
0000e260  25 3a f4 20 27 4f 6c 64  27 20 63 6f 6f 72 64 69  |%:. 'Old' coordi|
0000e270  6e 61 74 65 73 0d 2f 62  30 20 c8 97 20 b8 20 6f  |nates./b0 .. . o|
0000e280  78 25 2c 6f 79 25 3a f4  20 50 6f 69 6e 74 65 72  |x%,oy%:. Pointer|
0000e290  20 74 6f 20 75 70 70 65  72 20 6c 65 66 74 20 63  | to upper left c|
0000e2a0  6f 72 6e 65 72 0d 2f 6c  3f 20 f5 20 f2 72 6d 6f  |orner./l? . .rmo|
0000e2b0  75 73 65 28 5f 25 2c 5f  25 2c 62 75 74 25 29 3a  |use(_%,_%,but%):|
0000e2c0  fd 20 62 75 74 25 3d 30  3a f4 20 57 61 69 74 20  |. but%=0:. Wait |
0000e2d0  66 6f 72 20 62 75 74 74  6f 6e 73 20 72 65 6c 65  |for buttons rele|
0000e2e0  61 73 65 64 0d 2f 76 28  20 f5 20 f2 76 61 6c 75  |ased./v( . .valu|
0000e2f0  65 5f 70 74 72 28 73 69  7a 65 78 25 81 78 73 25  |e_ptr(sizex%.xs%|
0000e300  2c 73 69 7a 65 79 25 81  79 73 25 29 0d 2f 80 3a  |,sizey%.ys%)./.:|
0000e310  20 f5 20 f2 72 6d 6f 75  73 65 28 78 25 2c 79 25  | . .rmouse(x%,y%|
0000e320  2c 62 75 74 25 29 3a fd  20 28 78 25 3c 3e 6f 78  |,but%):. (x%<>ox|
0000e330  25 29 84 28 79 25 3c 3e  6f 79 25 29 84 28 62 75  |%).(y%<>oy%).(bu|
0000e340  74 25 3c 3e 30 29 0d 2f  8a 0e 20 e7 62 75 74 25  |t%<>0)./.. .but%|
0000e350  3d 30 20 8c 0d 2f 94 3e  20 20 e7 6f 79 25 3e 79  |=0 ../.>  .oy%>y|
0000e360  25 20 8c 20 ec 20 30 2c  79 25 3a f0 20 31 30 33  |% . . 0,y%:. 103|
0000e370  2c a4 6d 61 78 28 78 25  2c 6f 78 25 29 2c 6f 79  |,.max(x%,ox%),oy|
0000e380  25 3a f4 20 57 69 70 65  20 59 2d 70 6f 72 74 69  |%:. Wipe Y-porti|
0000e390  6f 6e 0d 2f 9e 3e 20 20  e7 6f 78 25 3e 78 25 20  |on./.>  .ox%>x% |
0000e3a0  8c 20 ec 20 78 25 2c 30  3a f0 20 31 30 33 2c 6f  |. . x%,0:. 103,o|
0000e3b0  78 25 2c a4 6d 61 78 28  79 25 2c 6f 79 25 29 3a  |x%,.max(y%,oy%):|
0000e3c0  f4 20 57 69 70 65 20 58  2d 70 6f 72 74 69 6f 6e  |. Wipe X-portion|
0000e3d0  0d 2f a8 3a 20 20 73 69  7a 65 78 25 3d 78 25 2b  |./.:  sizex%=x%+|
0000e3e0  78 73 25 3a 73 69 7a 65  79 25 3d 79 25 2b 79 73  |xs%:sizey%=y%+ys|
0000e3f0  25 3a f4 20 54 72 75 65  20 73 63 61 6c 65 64 20  |%:. True scaled |
0000e400  69 6d 61 67 65 20 73 69  7a 65 0d 2f b2 3b 20 20  |image size./.;  |
0000e410  21 61 72 67 25 3d 73 69  7a 65 78 25 3a 61 72 67  |!arg%=sizex%:arg|
0000e420  25 21 34 3d 73 69 7a 65  79 25 3a 61 72 67 25 21  |%!4=sizey%:arg%!|
0000e430  38 3d 73 70 72 57 25 3a  61 72 67 25 21 31 32 3d  |8=sprW%:arg%!12=|
0000e440  73 70 72 48 25 0d 2f bc  1d 20 20 f2 70 6c 6f 74  |sprH%./..  .plot|
0000e450  5f 69 6d 61 67 65 28 30  2c 30 2c 30 2c 61 72 67  |_image(0,0,0,arg|
0000e460  25 29 0d 2f c6 2e 20 20  6f 78 25 3d 78 25 3a 6f  |%)./..  ox%=x%:o|
0000e470  79 25 3d 79 25 3a f4 20  52 65 6d 65 6d 62 65 72  |y%=y%:. Remember|
0000e480  20 6f 6c 64 20 63 6f 6f  72 64 69 6e 61 74 65 73  | old coordinates|
0000e490  0d 2f d0 06 20 cd 0d 2f  da 0e 20 fd 20 62 75 74  |./.. ../.. . but|
0000e4a0  25 3c 3e 30 0d 2f e4 36  20 c8 99 20 22 4f 53 5f  |%<>0./.6 .. "OS_|
0000e4b0  43 4c 49 22 2c 22 50 6f  69 6e 74 65 72 20 31 22  |CLI","Pointer 1"|
0000e4c0  3a f4 20 52 65 73 74 6f  72 65 20 64 65 66 61 75  |:. Restore defau|
0000e4d0  6c 74 20 70 6f 69 6e 74  65 72 0d 2f ee 05 cd 0d  |lt pointer./....|
0000e4e0  2f f8 0b e7 70 61 72 74  20 8c 0d 30 02 3e 20 f5  |/...part ..0.> .|
0000e4f0  20 f2 6d 6f 75 73 65 28  5f 25 2c 5f 25 2c 62 75  | .mouse(_%,_%,bu|
0000e500  74 25 29 3a fd 20 62 75  74 25 3d 30 3a f4 20 57  |t%):. but%=0:. W|
0000e510  61 69 74 20 66 6f 72 20  62 75 74 74 6f 6e 73 20  |ait for buttons |
0000e520  72 65 6c 65 61 73 65 64  0d 30 0c 40 20 c8 97 20  |released.0.@ .. |
0000e530  c8 93 20 30 2c 30 2c 73  69 7a 65 78 25 2d 78 73  |.. 0,0,sizex%-xs|
0000e540  25 2c 73 69 7a 65 79 25  2d 79 73 25 3a f4 20 52  |%,sizey%-ys%:. R|
0000e550  65 73 74 72 69 63 74 20  70 6f 69 6e 74 65 72 20  |estrict pointer |
0000e560  74 6f 20 69 6d 61 67 65  0d 30 16 3c 20 c8 97 20  |to image.0.< .. |
0000e570  b8 20 30 2c 73 69 7a 65  79 25 2d 79 73 25 3a f4  |. 0,sizey%-ys%:.|
0000e580  20 4d 6f 75 73 65 20 74  6f 20 74 6f 70 20 72 69  | Mouse to top ri|
0000e590  67 68 74 20 6f 66 20 73  63 61 6c 65 64 20 73 70  |ght of scaled sp|
0000e5a0  72 69 74 65 0d 30 20 38  20 f5 20 f2 72 6d 6f 75  |rite.0 8 . .rmou|
0000e5b0  73 65 28 78 31 25 2c 79  32 25 2c 62 75 74 25 29  |se(x1%,y2%,but%)|
0000e5c0  3a f2 76 61 6c 75 65 5f  70 74 72 28 78 31 25 81  |:.value_ptr(x1%.|
0000e5d0  78 73 25 2c 79 32 25 81  79 73 25 29 0d 30 2a 23  |xs%,y2%.ys%).0*#|
0000e5e0  20 fd 20 62 75 74 25 3c  3e 30 3a f4 20 47 65 74  | . but%<>0:. Get|
0000e5f0  20 74 6f 70 20 6c 65 66  74 20 70 6f 69 6e 74 0d  | top left point.|
0000e600  30 34 3e 20 f5 20 f2 6d  6f 75 73 65 28 5f 25 2c  |04> . .mouse(_%,|
0000e610  5f 25 2c 62 75 74 25 29  3a fd 20 62 75 74 25 3d  |_%,but%):. but%=|
0000e620  30 3a f4 20 57 61 69 74  20 66 6f 72 20 62 75 74  |0:. Wait for but|
0000e630  74 6f 6e 73 20 72 65 6c  65 61 73 65 64 0d 30 3e  |tons released.0>|
0000e640  2c 20 78 32 25 3d 78 31  25 3a 79 31 25 3d 79 32  |, x2%=x1%:y1%=y2|
0000e650  25 3a f4 20 49 6e 69 74  69 61 6c 20 77 69 6e 64  |%:. Initial wind|
0000e660  6f 77 20 63 6f 72 6e 65  72 0d 30 48 3e 20 c8 97  |ow corner.0H> ..|
0000e670  20 c8 93 20 78 31 25 2c  30 2c 73 69 7a 65 78 25  | .. x1%,0,sizex%|
0000e680  2d 78 73 25 2d 78 31 25  2c 79 32 25 3a f4 20 54  |-xs%-x1%,y2%:. T|
0000e690  72 61 70 20 6d 6f 75 73  65 20 74 6f 20 64 6f 77  |rap mouse to dow|
0000e6a0  6e 2f 72 69 67 68 74 0d  30 52 33 20 c8 99 20 57  |n/right.0R3 .. W|
0000e6b0  53 65 74 43 6f 6c 25 2c  28 34 3c 3c 34 29 2b 30  |SetCol%,(4<<4)+0|
0000e6c0  3a f4 20 49 6e 76 65 72  74 20 63 6f 6c 6f 75 72  |:. Invert colour|
0000e6d0  20 6f 6e 20 73 63 72 65  65 6e 0d 30 5c 41 20 6f  | on screen.0\A o|
0000e6e0  78 25 3d 78 32 25 3a 6f  79 25 3d 79 31 25 3a c8  |x%=x2%:oy%=y1%:.|
0000e6f0  93 20 78 31 25 2c 79 31  25 2c 78 32 25 2d 78 31  |. x1%,y1%,x2%-x1|
0000e700  25 2c 79 32 25 2d 79 31  25 3a f4 20 46 69 72 73  |%,y2%-y1%:. Firs|
0000e710  74 20 72 65 63 74 61 6e  67 6c 65 0d 30 66 1c 20  |t rectangle.0f. |
0000e720  f5 20 f2 72 6d 6f 75 73  65 28 78 32 25 2c 79 31  |. .rmouse(x2%,y1|
0000e730  25 2c 62 75 74 25 29 0d  30 70 30 20 f2 76 61 6c  |%,but%).0p0 .val|
0000e740  75 65 5f 70 74 72 28 28  78 32 25 2d 78 31 25 29  |ue_ptr((x2%-x1%)|
0000e750  81 78 73 25 2b 31 2c 28  79 32 25 2d 79 31 25 29  |.xs%+1,(y2%-y1%)|
0000e760  81 79 73 25 2b 31 29 0d  30 7a 1d 20 e7 28 78 32  |.ys%+1).0z. .(x2|
0000e770  25 3c 3e 6f 78 25 29 84  28 79 31 25 3c 3e 6f 79  |%<>ox%).(y1%<>oy|
0000e780  25 29 20 8c 0d 30 84 35  20 20 c8 93 20 78 31 25  |%) ..0.5  .. x1%|
0000e790  2c 6f 79 25 2c 6f 78 25  2d 78 31 25 2c 79 32 25  |,oy%,ox%-x1%,y2%|
0000e7a0  2d 6f 79 25 3a f4 20 57  69 70 65 20 6f 6c 64 20  |-oy%:. Wipe old |
0000e7b0  72 65 63 74 61 6e 67 6c  65 0d 30 8e 30 20 20 c8  |rectangle.0.0  .|
0000e7c0  93 20 78 31 25 2c 79 31  25 2c 78 32 25 2d 78 31  |. x1%,y1%,x2%-x1|
0000e7d0  25 2c 79 32 25 2d 79 31  25 3a f4 20 4e 65 77 20  |%,y2%-y1%:. New |
0000e7e0  72 65 63 74 61 6e 67 6c  65 0d 30 98 2a 20 20 6f  |rectangle.0.*  o|
0000e7f0  78 25 3d 78 32 25 3a 6f  79 25 3d 79 31 25 3a f4  |x%=x2%:oy%=y1%:.|
0000e800  20 4f 6c 64 20 6d 6f 75  73 65 20 70 6f 73 69 74  | Old mouse posit|
0000e810  69 6f 6e 0d 30 a2 06 20  cd 0d 30 ac 2a 20 fd 20  |ion.0.. ..0.* . |
0000e820  62 75 74 25 3c 3e 30 3a  f4 20 55 6e 74 69 6c 20  |but%<>0:. Until |
0000e830  73 65 63 6f 6e 64 20 62  75 74 74 6f 6e 20 70 72  |second button pr|
0000e840  65 73 73 0d 30 b6 42 20  c8 97 20 c8 93 20 30 2c  |ess.0.B .. .. 0,|
0000e850  30 2c 53 63 72 57 25 2c  53 63 72 48 25 3a f4 20  |0,ScrW%,ScrH%:. |
0000e860  52 65 73 65 74 20 6d 6f  75 73 65 20 72 65 63 74  |Reset mouse rect|
0000e870  61 6e 67 6c 65 20 74 6f  20 77 68 6f 6c 65 20 73  |angle to whole s|
0000e880  63 72 65 65 6e 0d 30 c0  30 20 c8 93 20 78 31 25  |creen.0.0 .. x1%|
0000e890  2c 79 31 25 2c 78 32 25  2d 78 31 25 2c 79 32 25  |,y1%,x2%-x1%,y2%|
0000e8a0  2d 79 31 25 3a f4 20 57  69 70 65 20 72 65 63 74  |-y1%:. Wipe rect|
0000e8b0  61 6e 67 6c 65 0d 30 ca  22 20 ec 20 30 2c 30 3a  |angle.0." . 0,0:|
0000e8c0  f4 20 57 69 70 65 20 73  75 72 72 6f 75 6e 64 69  |. Wipe surroundi|
0000e8d0  6e 67 20 61 72 65 61 0d  30 d4 3a 20 5f 25 3d 78  |ng area.0.: _%=x|
0000e8e0  31 25 2d 78 73 25 3a e7  5f 25 3e 3d 30 20 8c 20  |1%-xs%:._%>=0 . |
0000e8f0  f0 20 31 30 33 2c 5f 25  2c 31 30 32 34 2d 79 73  |. 103,_%,1024-ys|
0000e900  25 20 8b 20 ec 20 5f 25  2c 31 30 32 34 2d 79 73  |% . . _%,1024-ys|
0000e910  25 0d 30 de 3d 20 5f 25  3d 79 32 25 2b 79 73 25  |%.0.= _%=y2%+ys%|
0000e920  3a e7 5f 25 3c 53 63 72  48 25 20 8c 20 f0 20 31  |:._%<ScrH% . . 1|
0000e930  30 33 2c 31 32 38 30 2d  78 73 25 2c 5f 25 20 8b  |03,1280-xs%,_% .|
0000e940  20 ec 20 31 32 38 30 2d  78 73 25 2c 5f 25 0d 30  | . 1280-xs%,_%.0|
0000e950  e8 2f 20 5f 25 3d 78 32  25 2b 78 73 25 3a e7 5f  |./ _%=x2%+xs%:._|
0000e960  25 3c 53 63 72 57 25 20  8c 20 f0 20 31 30 33 2c  |%<ScrW% . . 103,|
0000e970  5f 25 2c 30 20 8b 20 ec  20 5f 25 2c 30 0d 30 f2  |_%,0 . . _%,0.0.|
0000e980  38 20 5f 25 3d 79 31 25  2d 79 73 25 3a e7 5f 25  |8 _%=y1%-ys%:._%|
0000e990  3e 3d 30 20 8c 20 f0 20  31 30 33 2c 78 31 25 2d  |>=0 . . 103,x1%-|
0000e9a0  78 73 25 2c 5f 25 20 8b  20 ec 20 78 31 25 2d 78  |xs%,_% . . x1%-x|
0000e9b0  73 25 2c 5f 25 0d 30 fc  36 20 c8 99 20 22 4f 53  |s%,_%.0.6 .. "OS|
0000e9c0  5f 43 4c 49 22 2c 22 50  6f 69 6e 74 65 72 20 31  |_CLI","Pointer 1|
0000e9d0  22 3a f4 20 52 65 73 74  6f 72 65 20 64 65 66 61  |":. Restore defa|
0000e9e0  75 6c 74 20 70 6f 69 6e  74 65 72 0d 31 06 45 cc  |ult pointer.1.E.|
0000e9f0  20 78 31 25 3d 30 3a 79  31 25 3d 30 3a 78 32 25  | x1%=0:y1%=0:x2%|
0000ea00  3d 73 69 7a 65 78 25 2d  78 73 25 3a 79 32 25 3d  |=sizex%-xs%:y2%=|
0000ea10  73 69 7a 65 79 25 2d 79  73 25 3a f4 20 57 68 6f  |sizey%-ys%:. Who|
0000ea20  6c 65 20 73 70 72 69 74  65 20 77 69 6e 64 6f 77  |le sprite window|
0000ea30  0d 31 10 05 cd 0d 31 1a  26 ef 32 34 2c 78 31 25  |.1....1.&.24,x1%|
0000ea40  3b 79 31 25 3b 78 32 25  3b 79 32 25 3b 3a f4 20  |;y1%;x2%;y2%;:. |
0000ea50  43 6c 69 70 20 77 69 6e  64 6f 77 0d 31 24 05 e1  |Clip window.1$..|
0000ea60  0d 31 2e 05 20 0d 31 38  1e dd f2 72 6d 6f 75 73  |.1.. .18...rmous|
0000ea70  65 28 f8 20 78 25 2c f8  20 79 25 2c f8 20 62 75  |e(. x%,. y%,. bu|
0000ea80  74 25 29 0d 31 42 4a f4  20 52 65 74 75 72 6e 73  |t%).1BJ. Returns|
0000ea90  20 6d 6f 75 73 65 20 63  6f 6f 72 64 69 6e 61 74  | mouse coordinat|
0000eaa0  65 73 20 61 6e 64 20 62  75 74 74 6f 6e 73 2c 20  |es and buttons, |
0000eab0  72 6f 75 6e 64 65 64 20  74 6f 20 65 78 61 63 74  |rounded to exact|
0000eac0  20 70 69 78 65 6c 20 63  6f 6f 72 64 73 0d 31 4c  | pixel coords.1L|
0000ead0  24 f2 6d 6f 75 73 65 28  78 25 2c 79 25 2c 62 75  |$.mouse(x%,y%,bu|
0000eae0  74 25 29 3a f4 20 4d 6f  75 73 65 20 73 74 61 74  |t%):. Mouse stat|
0000eaf0  65 0d 31 56 2a 78 25 2d  3d 78 25 20 83 20 78 73  |e.1V*x%-=x% . xs|
0000eb00  25 3a 79 25 2d 3d 79 25  20 83 20 79 73 25 3a f4  |%:y%-=y% . ys%:.|
0000eb10  20 52 6f 75 6e 64 20 64  6f 77 6e 0d 31 60 05 e1  | Round down.1`..|
0000eb20  0d 31 6a 05 20 0d 31 74  1c dd f2 76 61 6c 75 65  |.1j. .1t...value|
0000eb30  5f 70 74 72 28 76 61 6c  31 25 2c 76 61 6c 32 25  |_ptr(val1%,val2%|
0000eb40  29 0d 31 7e 1c f4 20 50  75 74 73 20 76 61 6c 75  |).1~.. Puts valu|
0000eb50  65 73 20 69 6e 20 70 6f  69 6e 74 65 72 0d 31 88  |es in pointer.1.|
0000eb60  45 c8 99 20 4f 53 53 70  6f 70 25 2c 36 30 2b 32  |E.. OSSpop%,60+2|
0000eb70  35 36 2c 70 6f 69 6e 74  65 72 2c 70 74 72 24 2c  |56,pointer,ptr$,|
0000eb80  30 20 b8 20 72 30 2c 72  31 2c 72 32 2c 72 33 3a  |0 . r0,r1,r2,r3:|
0000eb90  f4 20 4f 75 74 70 75 74  20 74 6f 20 73 70 72 69  |. Output to spri|
0000eba0  74 65 0d 31 92 77 fb 31  32 39 3a fb 32 3a f1 8a  |te.1.w.129:.2:..|
0000ebb0  30 2c 32 29 3b c2 22 20  20 20 22 2b c3 76 61 6c  |0,2);."   "+.val|
0000ebc0  31 25 2c 34 29 27 c2 22  20 20 20 22 2b c3 76 61  |1%,4)'."   "+.va|
0000ebd0  6c 32 25 2c 34 29 3b 3a  c8 99 20 4f 53 53 70 6f  |l2%,4);:.. OSSpo|
0000ebe0  70 25 2c 33 36 2b 32 35  36 2c 70 6f 69 6e 74 65  |p%,36+256,pointe|
0000ebf0  72 2c 70 74 72 24 2c 25  30 30 30 30 30 31 30 3a  |r,ptr$,%0000010:|
0000ec00  f4 20 50 72 69 6e 74 20  76 61 6c 75 65 73 20 61  |. Print values a|
0000ec10  6e 64 20 64 65 66 69 6e  65 0d 31 9c 35 c8 99 20  |nd define.1.5.. |
0000ec20  4f 53 53 70 6f 70 25 2c  72 30 2c 72 31 2c 72 32  |OSSpop%,r0,r1,r2|
0000ec30  2c 72 33 3a f4 20 52 65  73 74 6f 72 65 20 6f 75  |,r3:. Restore ou|
0000ec40  74 70 75 74 20 74 6f 20  73 63 72 65 65 6e 0d 31  |tput to screen.1|
0000ec50  a6 05 e1 0d 31 b0 05 20  0d 31 ba 0f dd f2 6d 61  |....1.. .1....ma|
0000ec60  69 6e 5f 6d 65 6e 75 0d  31 c4 17 f4 20 43 72 65  |in_menu.1... Cre|
0000ec70  61 74 65 73 20 6d 61 69  6e 20 6d 65 6e 75 0d 31  |ates main menu.1|
0000ec80  ce 0b ea 20 78 25 2c 79  25 0d 31 d8 21 f2 73 65  |... x%,y%.1.!.se|
0000ec90  74 6d 65 6e 75 3a f4 20  53 65 74 20 66 6c 61 67  |tmenu:. Set flag|
0000eca0  73 20 61 6e 64 20 64 61  74 61 0d 31 e2 33 f2 6d  |s and data.1.3.m|
0000ecb0  6f 75 73 65 28 78 25 2c  79 25 2c 5f 25 29 3a e7  |ouse(x%,y%,_%):.|
0000ecc0  46 72 6f 6d 25 3d 32 20  8c 20 79 25 2b 3d 32 34  |From%=2 . y%+=24|
0000ecd0  20 8b 20 79 25 3d 39 36  2b 36 2a 34 30 0d 31 ec  | . y%=96+6*40.1.|
0000ece0  30 6d 65 6e 75 31 3d 6d  65 6e 75 6d 61 69 6e 25  |0menu1=menumain%|
0000ecf0  3a c8 99 20 57 43 72 65  61 74 65 4d 25 2c 2c 6d  |:.. WCreateM%,,m|
0000ed00  65 6e 75 31 2c 78 25 2d  36 34 2c 79 25 0d 31 f6  |enu1,x%-64,y%.1.|
0000ed10  05 e1 0d 32 00 05 20 0d  32 0a 0d dd f2 73 65 74  |...2.. .2....set|
0000ed20  6d 65 6e 75 0d 32 14 35  f4 20 57 72 69 74 65 73  |menu.2.5. Writes|
0000ed30  20 63 75 72 72 65 6e 74  20 66 6c 61 67 73 20 61  | current flags a|
0000ed40  6e 64 20 69 63 6f 6e 20  64 61 74 61 20 74 6f 20  |nd icon data to |
0000ed50  6d 61 69 6e 20 6d 65 6e  75 0d 32 1e 0a f4 20 4d  |main menu.2... M|
0000ed60  61 69 6e 0d 32 28 1e f2  69 66 6c 28 69 70 54 72  |ain.2(..ifl(ipTr|
0000ed70  49 6d 61 67 65 69 6e 66  6f 2c 30 2c ac 49 6d 67  |Imageinfo,0,.Img|
0000ed80  29 0d 32 32 1f f2 69 66  6c 28 69 70 54 72 4d 61  |).22..ifl(ipTrMa|
0000ed90  6e 69 70 75 6c 61 74 65  2c 30 2c ac 49 6d 67 29  |nipulate,0,.Img)|
0000eda0  0d 32 3c 1c f2 69 66 6c  28 69 70 54 72 45 78 61  |.2<..ifl(ipTrExa|
0000edb0  6d 69 6e 65 2c 30 2c ac  49 6d 67 29 0d 32 46 11  |mine,0,.Img).2F.|
0000edc0  f4 20 4d 61 69 6e 2e 50  6f 70 20 75 70 0d 32 50  |. Main.Pop up.2P|
0000edd0  21 f2 69 66 6c 28 69 70  50 6f 41 75 74 6f 6d 6f  |!.ifl(ipPoAutomo|
0000ede0  64 65 2c 41 75 74 6f 4d  6f 64 65 2c 30 29 0d 32  |de,AutoMode,0).2|
0000edf0  5a 23 f2 69 66 6c 28 69  70 50 6f 41 75 74 6f 70  |Z#.ifl(ipPoAutop|
0000ee00  61 6c 65 74 74 65 2c 41  75 74 6f 50 61 6c 2c 30  |alette,AutoPal,0|
0000ee10  29 0d 32 64 21 f2 69 66  6c 28 69 70 50 6f 41 75  |).2d!.ifl(ipPoAu|
0000ee20  74 6f 7a 6f 6f 6d 2c 41  75 74 6f 5a 6f 6f 6d 2c  |tozoom,AutoZoom,|
0000ee30  30 29 0d 32 6e 21 f2 69  66 6c 28 69 70 50 6f 56  |0).2n!.ifl(ipPoV|
0000ee40  69 65 77 6d 6f 64 65 2c  56 69 65 77 4d 6f 64 65  |iewmode,ViewMode|
0000ee50  2c 30 29 0d 32 78 2b f2  69 66 6c 28 69 70 50 6f  |,0).2x+.ifl(ipPo|
0000ee60  4d 6f 64 65 73 65 74 2c  28 4d 6f 64 65 53 65 74  |Modeset,(ModeSet|
0000ee70  3e 30 29 2c ac 41 75 74  6f 4d 6f 64 65 29 0d 32  |>0),.AutoMode).2|
0000ee80  82 1a f4 20 4d 61 69 6e  2e 50 6f 70 20 75 70 2e  |... Main.Pop up.|
0000ee90  4d 6f 64 65 20 73 65 74  0d 32 8c 20 f2 69 66 6c  |Mode set.2. .ifl|
0000eea0  28 69 70 4d 6f 4e 6f 6e  65 2c 28 4d 6f 64 65 53  |(ipMoNone,(ModeS|
0000eeb0  65 74 3d 30 29 2c 30 29  0d 32 96 22 f2 69 66 6c  |et=0),0).2.".ifl|
0000eec0  28 69 70 4d 6f 4e 6f 72  6d 61 6c 2c 28 4d 6f 64  |(ipMoNormal,(Mod|
0000eed0  65 53 65 74 3d 31 29 2c  30 29 0d 32 a0 25 f2 69  |eSet=1),0).2.%.i|
0000eee0  66 6c 28 69 70 4d 6f 4d  75 6c 74 69 73 79 6e 63  |fl(ipMoMultisync|
0000eef0  2c 28 4d 6f 64 65 53 65  74 3d 32 29 2c 30 29 0d  |,(ModeSet=2),0).|
0000ef00  32 aa 1f f2 69 66 6c 28  69 70 4d 6f 75 6d 73 2c  |2...ifl(ipMoums,|
0000ef10  28 4d 6f 64 65 53 65 74  3d 33 29 2c 30 29 0d 32  |(ModeSet=3),0).2|
0000ef20  b4 16 f2 69 64 61 28 69  64 4d 6f 75 6d 73 2c a4  |...ida(idMoums,.|
0000ef30  75 6d 73 29 0d 32 be 12  f4 20 4d 61 69 6e 2e 50  |ums).2... Main.P|
0000ef40  72 6f 63 65 73 73 0d 32  c8 25 f2 69 66 6c 28 69  |rocess.2.%.ifl(i|
0000ef50  70 50 72 43 6c 65 61 72  6f 75 74 70 75 74 2c 43  |pPrClearoutput,C|
0000ef60  6c 65 61 72 46 69 6c 65  2c 30 29 0d 32 d2 37 f2  |learFile,0).2.7.|
0000ef70  69 66 6c 28 69 70 50 72  53 63 61 6c 69 6e 67 2c  |ifl(ipPrScaling,|
0000ef80  28 28 58 4d 75 6c 25 3c  3e 58 44 69 76 25 29 84  |((XMul%<>XDiv%).|
0000ef90  28 59 4d 75 6c 25 3c 3e  59 44 69 76 25 29 29 2c  |(YMul%<>YDiv%)),|
0000efa0  30 29 0d 32 dc 19 f4 20  4d 61 69 6e 2e 50 72 6f  |0).2... Main.Pro|
0000efb0  63 65 73 73 2e 43 6f 6c  6f 75 72 0d 32 e6 28 f2  |cess.Colour.2.(.|
0000efc0  69 66 6c 28 69 70 43 6f  42 6c 61 63 6b 61 6e 64  |ifl(ipCoBlackand|
0000efd0  77 68 69 74 65 2c 42 6c  61 63 6b 57 68 69 74 65  |white,BlackWhite|
0000efe0  2c 30 29 0d 32 f0 22 f2  69 66 6c 28 69 70 43 6f  |,0).2.".ifl(ipCo|
0000eff0  43 6f 72 72 65 63 74 67  61 6d 6d 61 2c 47 61 6d  |Correctgamma,Gam|
0000f000  6d 61 2c 30 29 0d 32 fa  22 f2 69 66 6c 28 69 70  |ma,0).2.".ifl(ip|
0000f010  43 6f 43 6f 72 72 65 63  74 62 6c 61 63 6b 2c 42  |CoCorrectblack,B|
0000f020  6c 61 63 6b 2c 30 29 0d  33 04 21 f2 69 66 6c 28  |lack,0).3.!.ifl(|
0000f030  69 70 43 6f 45 78 70 61  6e 64 72 61 6e 67 65 2c  |ipCoExpandrange,|
0000f040  52 61 6e 67 65 2c 30 29  0d 33 0e 23 f2 69 66 6c  |Range,0).3.#.ifl|
0000f050  28 69 70 43 6f 49 6e 76  65 72 74 52 47 42 2c 49  |(ipCoInvertRGB,I|
0000f060  6e 76 65 72 74 52 47 42  2c 30 29 0d 33 18 20 f4  |nvertRGB,0).3. .|
0000f070  20 4d 61 69 6e 2e 50 72  6f 63 65 73 73 2e 53 70  | Main.Process.Sp|
0000f080  72 69 74 65 20 6f 75 74  70 75 74 0d 33 22 29 f2  |rite output.3").|
0000f090  69 66 6c 28 69 70 53 70  4f 75 74 70 75 74 70 61  |ifl(ipSpOutputpa|
0000f0a0  6c 65 74 74 65 2c 30 2c  28 4f 75 74 4d 6f 64 65  |lette,0,(OutMode|
0000f0b0  3d 31 29 29 0d 33 2c 2d  f2 69 66 6c 28 69 70 53  |=1)).3,-.ifl(ipS|
0000f0c0  70 45 72 72 6f 72 73 70  72 65 61 64 69 6e 67 2c  |pErrorspreading,|
0000f0d0  28 45 72 72 53 70 72 65  61 64 3c 3e 30 29 2c 30  |(ErrSpread<>0),0|
0000f0e0  29 0d 33 36 1d f2 69 66  6c 28 69 70 53 70 5a 69  |).36..ifl(ipSpZi|
0000f0f0  67 7a 61 67 2c 5a 69 67  5a 61 67 2c 30 29 0d 33  |gzag,ZigZag,0).3|
0000f100  40 1a f4 20 4d 61 69 6e  2e 50 72 6f 63 65 73 73  |@.. Main.Process|
0000f110  2e 53 63 61 6c 69 6e 67  0d 33 4a 20 f2 69 66 6c  |.Scaling.3J .ifl|
0000f120  28 69 70 53 63 78 2c 28  58 4d 75 6c 25 3c 3e 58  |(ipScx,(XMul%<>X|
0000f130  44 69 76 25 29 2c 30 29  0d 33 54 20 f2 69 66 6c  |Div%),0).3T .ifl|
0000f140  28 69 70 53 63 79 2c 28  59 4d 75 6c 25 3c 3e 59  |(ipScy,(YMul%<>Y|
0000f150  44 69 76 25 29 2c 30 29  0d 33 5e 17 f4 20 4d 61  |Div%),0).3^.. Ma|
0000f160  69 6e 2e 50 72 6f 63 65  73 73 2e 4d 69 73 63 0d  |in.Process.Misc.|
0000f170  33 68 27 f2 69 66 6c 28  69 70 4d 69 53 63 72 65  |3h'.ifl(ipMiScre|
0000f180  65 6e 62 6c 61 6e 6b 69  6e 67 2c 42 6c 61 6e 6b  |enblanking,Blank|
0000f190  69 6e 67 2c 30 29 0d 33  72 1f f2 69 66 6c 28 69  |ing,0).3r..ifl(i|
0000f1a0  70 4d 69 47 49 46 73 63  61 6e 2c 47 49 46 53 63  |pMiGIFscan,GIFSc|
0000f1b0  61 6e 2c 30 29 0d 33 7c  22 f2 69 66 6c 28 69 70  |an,0).3|".ifl(ip|
0000f1c0  4d 69 50 65 72 63 65 6e  74 61 67 65 2c 50 65 72  |MiPercentage,Per|
0000f1d0  63 65 6e 74 2c 30 29 0d  33 86 27 f4 20 4d 61 69  |cent,0).3.'. Mai|
0000f1e0  6e 2e 50 72 6f 63 65 73  73 2e 43 6f 6c 6f 75 72  |n.Process.Colour|
0000f1f0  2e 43 6f 72 72 65 63 74  20 67 61 6d 6d 61 0d 33  |.Correct gamma.3|
0000f200  90 1b f2 69 64 61 28 69  64 47 61 67 61 6d 2c c3  |...ida(idGagam,.|
0000f210  28 47 61 6d 6d 61 46 29  29 0d 33 9a 27 f4 20 4d  |(GammaF)).3.'. M|
0000f220  61 69 6e 2e 50 72 6f 63  65 73 73 2e 43 6f 6c 6f  |ain.Process.Colo|
0000f230  75 72 2e 43 6f 72 72 65  63 74 20 62 6c 61 63 6b  |ur.Correct black|
0000f240  0d 33 a4 1b f2 69 64 61  28 69 64 42 6c 62 6c 61  |.3...ida(idBlbla|
0000f250  2c c3 28 42 6c 61 63 6b  46 29 29 0d 33 ae 30 f4  |,.(BlackF)).3.0.|
0000f260  20 4d 61 69 6e 2e 50 72  6f 63 65 73 73 2e 53 70  | Main.Process.Sp|
0000f270  72 69 74 65 20 6f 75 74  70 75 74 2e 45 72 72 6f  |rite output.Erro|
0000f280  72 20 73 70 72 65 61 64  69 6e 67 0d 33 b8 24 f2  |r spreading.3.$.|
0000f290  69 66 6c 28 69 70 53 70  53 69 6d 70 6c 65 2c 28  |ifl(ipSpSimple,(|
0000f2a0  45 72 72 53 70 72 65 61  64 3d 31 29 2c 30 29 0d  |ErrSpread=1),0).|
0000f2b0  33 c2 2c f2 69 66 6c 28  69 70 53 70 46 6c 6f 79  |3.,.ifl(ipSpFloy|
0000f2c0  64 53 74 65 69 6e 62 65  72 67 2c 28 45 72 72 53  |dSteinberg,(ErrS|
0000f2d0  70 72 65 61 64 3d 32 29  2c 30 29 0d 33 cc 21 f2  |pread=2),0).3.!.|
0000f2e0  69 66 6c 28 69 70 53 70  4f 66 66 2c 28 45 72 72  |ifl(ipSpOff,(Err|
0000f2f0  53 70 72 65 61 64 3d 30  29 2c 30 29 0d 33 d6 2c  |Spread=0),0).3.,|
0000f300  f4 20 4d 61 69 6e 2e 50  72 6f 63 65 73 73 2e 53  |. Main.Process.S|
0000f310  70 72 69 74 65 20 6f 75  74 70 75 74 2e 4f 75 74  |prite output.Out|
0000f320  70 75 74 20 6d 6f 64 65  0d 33 e0 20 f2 69 66 6c  |put mode.3. .ifl|
0000f330  28 69 70 4d 6f 41 75 74  6f 2c 28 4f 75 74 4d 6f  |(ipMoAuto,(OutMo|
0000f340  64 65 3d 31 29 2c 30 29  0d 33 ea 23 f2 69 66 6c  |de=1),0).3.#.ifl|
0000f350  28 69 70 4d 6f 43 75 72  72 65 6e 74 2c 28 4f 75  |(ipMoCurrent,(Ou|
0000f360  74 4d 6f 64 65 3d 32 29  2c 30 29 0d 33 f4 2f f4  |tMode=2),0).3./.|
0000f370  20 4d 61 69 6e 2e 50 72  6f 63 65 73 73 2e 53 70  | Main.Process.Sp|
0000f380  72 69 74 65 20 6f 75 74  70 75 74 2e 4f 75 74 70  |rite output.Outp|
0000f390  75 74 20 70 61 6c 65 74  74 65 0d 33 fe 22 f2 69  |ut palette.3.".i|
0000f3a0  66 6c 28 69 70 50 61 43  75 72 72 65 6e 74 2c 28  |fl(ipPaCurrent,(|
0000f3b0  4f 75 74 50 61 6c 3d 31  29 2c 30 29 0d 34 08 22  |OutPal=1),0).4."|
0000f3c0  f2 69 66 6c 28 69 70 50  61 44 65 66 61 75 6c 74  |.ifl(ipPaDefault|
0000f3d0  2c 28 4f 75 74 50 61 6c  3d 32 29 2c 30 29 0d 34  |,(OutPal=2),0).4|
0000f3e0  12 24 f2 69 66 6c 28 69  70 50 61 47 72 65 79 73  |.$.ifl(ipPaGreys|
0000f3f0  63 61 6c 65 2c 28 4f 75  74 50 61 6c 3d 33 29 2c  |cale,(OutPal=3),|
0000f400  30 29 0d 34 1c 1c f4 20  4d 61 69 6e 2e 50 72 6f  |0).4... Main.Pro|
0000f410  63 65 73 73 2e 53 63 61  6c 69 6e 67 2e 78 0d 34  |cess.Scaling.x.4|
0000f420  26 36 64 24 3d c3 28 58  4d 75 6c 25 29 2b 22 3a  |&6d$=.(XMul%)+":|
0000f430  22 3a e7 44 69 76 49 73  49 6e 58 20 8c 20 64 24  |":.DivIsInX . d$|
0000f440  2b 3d 22 78 22 20 8b 20  64 24 2b 3d c3 28 58 44  |+="x" . d$+=.(XD|
0000f450  69 76 25 29 0d 34 30 13  f2 69 64 61 28 69 64 58  |iv%).40..ida(idX|
0000f460  78 73 63 2c 64 24 29 0d  34 3a 1c f4 20 4d 61 69  |xsc,d$).4:.. Mai|
0000f470  6e 2e 50 72 6f 63 65 73  73 2e 53 63 61 6c 69 6e  |n.Process.Scalin|
0000f480  67 2e 79 0d 34 44 36 64  24 3d c3 28 59 4d 75 6c  |g.y.4D6d$=.(YMul|
0000f490  25 29 2b 22 3a 22 3a e7  44 69 76 49 73 49 6e 59  |%)+":":.DivIsInY|
0000f4a0  20 8c 20 64 24 2b 3d 22  79 22 20 8b 20 64 24 2b  | . d$+="y" . d$+|
0000f4b0  3d c3 28 59 44 69 76 25  29 0d 34 4e 13 f2 69 64  |=.(YDiv%).4N..id|
0000f4c0  61 28 69 64 59 79 73 63  2c 64 24 29 0d 34 58 24  |a(idYysc,d$).4X$|
0000f4d0  f4 20 4d 61 69 6e 2e 50  72 6f 63 65 73 73 2e 4d  |. Main.Process.M|
0000f4e0  69 73 63 2e 49 6d 61 67  65 20 6e 75 6d 62 65 72  |isc.Image number|
0000f4f0  0d 34 62 1d f2 69 64 61  28 69 64 4e 75 6e 75 6d  |.4b..ida(idNunum|
0000f500  2c c3 28 49 6d 61 67 65  4e 72 25 29 29 0d 34 6c  |,.(ImageNr%)).4l|
0000f510  17 f4 20 4d 61 69 6e 2e  45 78 61 6d 69 6e 65 2e  |.. Main.Examine.|
0000f520  5a 6f 6f 6d 0d 34 76 28  f2 69 66 6c 28 69 70 5a  |Zoom.4v(.ifl(ipZ|
0000f530  6f 31 31 2c 28 28 5a 6f  6f 6d 58 3d 31 29 80 28  |o11,((ZoomX=1).(|
0000f540  5a 6f 6f 6d 59 3d 31 29  29 2c 30 29 0d 34 80 0f  |ZoomY=1)),0).4..|
0000f550  f4 20 4d 61 69 6e 2e 4d  69 73 63 0d 34 8a 21 f2  |. Main.Misc.4.!.|
0000f560  69 66 6c 28 69 70 4d 69  49 6d 61 67 65 70 61 6c  |ifl(ipMiImagepal|
0000f570  65 74 74 65 2c 30 2c ac  49 6d 67 29 0d 34 94 14  |ette,0,.Img).4..|
0000f580  f4 20 4d 61 69 6e 2e 4d  69 73 63 2e 53 61 76 65  |. Main.Misc.Save|
0000f590  0d 34 9e 19 f2 69 66 6c  28 69 70 53 61 46 75 6c  |.4...ifl(ipSaFul|
0000f5a0  6c 2c 30 2c ac 49 6d 67  29 0d 34 a8 1a f2 69 66  |l,0,.Img).4...if|
0000f5b0  6c 28 69 70 53 61 57 68  6f 6c 65 2c 30 2c ac 49  |l(ipSaWhole,0,.I|
0000f5c0  6d 67 29 0d 34 b2 19 f2  69 66 6c 28 69 70 53 61  |mg).4...ifl(ipSa|
0000f5d0  50 61 72 74 2c 30 2c ac  49 6d 67 29 0d 34 bc 20  |Part,0,.Img).4. |
0000f5e0  f2 69 66 6c 28 69 70 53  61 57 68 6f 6c 65 73 63  |.ifl(ipSaWholesc|
0000f5f0  61 6c 65 64 2c 30 2c ac  49 6d 67 29 0d 34 c6 1f  |aled,0,.Img).4..|
0000f600  f2 69 66 6c 28 69 70 53  61 50 61 72 74 73 63 61  |.ifl(ipSaPartsca|
0000f610  6c 65 64 2c 30 2c ac 49  6d 67 29 0d 34 d0 26 f2  |led,0,.Img).4.&.|
0000f620  69 66 6c 28 69 70 53 61  49 6e 63 6c 75 64 65 70  |ifl(ipSaIncludep|
0000f630  61 6c 65 74 74 65 2c 53  61 76 65 50 61 6c 2c 30  |alette,SavePal,0|
0000f640  29 0d 34 da 25 f2 69 66  6c 28 69 70 53 61 53 61  |).4.%.ifl(ipSaSa|
0000f650  6d 65 6c 65 61 66 6e 61  6d 65 2c 53 61 6d 65 4c  |meleafname,SameL|
0000f660  65 61 66 2c 30 29 0d 34  e4 05 e1 0d 34 ee 05 20  |eaf,0).4....4.. |
0000f670  0d 34 f8 14 dd f2 69 66  6c 28 66 6c 25 2c 74 25  |.4....ifl(fl%,t%|
0000f680  2c 64 25 29 0d 35 02 1a  f4 20 53 65 74 73 20 6d  |,d%).5... Sets m|
0000f690  65 6e 75 20 69 63 6f 6e  20 66 6c 61 67 73 0d 35  |enu icon flags.5|
0000f6a0  0c 1b 74 25 3d 2d 28 74  25 3c 3e 30 29 3a 64 25  |..t%=-(t%<>0):d%|
0000f6b0  3d 2d 28 64 25 3c 3e 30  29 0d 35 16 1e 21 66 6c  |=-(d%<>0).5..!fl|
0000f6c0  25 3d 28 28 21 66 6c 25  29 80 ac 31 29 2b 74 25  |%=((!fl%)..1)+t%|
0000f6d0  3a f4 20 54 69 63 6b 0d  35 20 2e 66 6c 25 21 38  |:. Tick.5 .fl%!8|
0000f6e0  3d 28 28 66 6c 25 21 38  29 80 ac 28 31 3c 3c 32  |=((fl%!8)..(1<<2|
0000f6f0  32 29 29 2b 28 64 25 3c  3c 32 32 29 3a f4 20 53  |2))+(d%<<22):. S|
0000f700  68 61 64 65 64 0d 35 2a  05 e1 0d 35 34 05 20 0d  |haded.5*...54. .|
0000f710  35 3e 11 dd f2 69 64 61  28 64 70 25 2c 64 24 29  |5>...ida(dp%,d$)|
0000f720  0d 35 48 19 f4 20 53 65  74 73 20 6d 65 6e 75 20  |.5H.. Sets menu |
0000f730  69 63 6f 6e 20 64 61 74  61 0d 35 52 0b 24 64 70  |icon data.5R.$dp|
0000f740  25 3d 64 24 0d 35 5c 05  e1 0d 35 66 05 20 0d 35  |%=d$.5\...5f. .5|
0000f750  70 15 dd f2 73 65 74 5f  6d 6f 64 65 28 6d 6f 64  |p...set_mode(mod|
0000f760  65 25 29 0d 35 7a 32 f4  20 53 65 74 73 20 6e 65  |e%).5z2. Sets ne|
0000f770  77 20 6d 6f 64 65 20 28  69 66 20 65 6e 61 62 6c  |w mode (if enabl|
0000f780  65 64 29 20 66 6f 72 20  69 6d 61 67 65 20 64 69  |ed) for image di|
0000f790  73 70 6c 61 79 0d 35 84  0e ea 20 6c 6f 67 32 62  |splay.5... log2b|
0000f7a0  70 70 25 0d 35 8e 3e e7  41 75 74 6f 4d 6f 64 65  |pp%.5.>.AutoMode|
0000f7b0  20 8b 20 f2 73 65 74 5f  74 72 61 6e 73 3a e1 3a  | . .set_trans:.:|
0000f7c0  f4 20 41 75 74 6f 20 6d  6f 64 65 20 73 65 6c 65  |. Auto mode sele|
0000f7d0  63 74 69 6f 6e 20 6e 6f  74 20 65 6e 61 62 6c 65  |ction not enable|
0000f7e0  64 0d 35 98 29 6c 6f 67  32 62 70 70 25 3d a4 6d  |d.5.)log2bpp%=.m|
0000f7f0  6f 64 65 5f 76 61 72 28  6d 6f 64 65 25 2c 39 29  |ode_var(mode%,9)|
0000f800  3a f4 20 4c 6f 67 32 42  50 50 0d 35 a2 10 c8 8e  |:. Log2BPP.5....|
0000f810  20 4d 6f 64 65 53 65 74  20 ca 0d 35 ac 34 20 c9  | ModeSet ..5.4 .|
0000f820  20 30 20 3a 20 f4 20 4e  6f 20 6d 6f 64 65 20 73  | 0 : . No mode s|
0000f830  65 74 20 3a 20 6e 6f 20  63 68 61 6e 67 65 20 6f  |et : no change o|
0000f840  66 20 64 69 73 70 6c 61  79 20 6d 6f 64 65 0d 35  |f display mode.5|
0000f850  b6 3a 20 c9 20 31 20 3a  20 6d 6f 64 65 25 3d bb  |.: . 1 : mode%=.|
0000f860  c1 22 20 30 20 38 31 32  31 35 22 2c 6c 6f 67 32  |." 0 81215",log2|
0000f870  62 70 70 25 2a 32 2b 31  2c 32 29 3a f4 20 4e 6f  |bpp%*2+1,2):. No|
0000f880  72 6d 61 6c 20 73 65 74  0d 35 c0 3d 20 c9 20 32  |rmal set.5.= . 2|
0000f890  20 3a 20 6d 6f 64 65 25  3d bb c1 22 31 38 31 39  | : mode%=.."1819|
0000f8a0  32 30 32 31 22 2c 6c 6f  67 32 62 70 70 25 2a 32  |2021",log2bpp%*2|
0000f8b0  2b 31 2c 32 29 3a f4 20  4d 75 6c 74 69 73 79 6e  |+1,2):. Multisyn|
0000f8c0  63 20 73 65 74 0d 35 ca  34 20 c9 20 33 20 3a 20  |c set.5.4 . 3 : |
0000f8d0  6d 6f 64 65 25 3d 55 73  65 72 4d 6f 64 65 53 65  |mode%=UserModeSe|
0000f8e0  74 25 28 6c 6f 67 32 62  70 70 25 2b 31 29 3a f4  |t%(log2bpp%+1):.|
0000f8f0  20 55 73 65 72 20 73 65  74 0d 35 d4 05 cb 0d 35  | User set.5....5|
0000f900  de 7d e7 ac 4d 75 6c 74  69 53 79 6e 63 20 8c 20  |.}..MultiSync . |
0000f910  e7 28 6d 6f 64 65 25 3e  3d 31 38 29 80 28 6d 6f  |.(mode%>=18).(mo|
0000f920  64 65 25 3c 3d 32 38 29  20 8c 20 6d 6f 64 65 25  |de%<=28) . mode%|
0000f930  3d bb 28 c1 22 30 30 30  38 31 32 31 35 31 35 30  |=.(."00081215150|
0000f940  30 32 34 30 30 30 38 31  32 31 35 22 2c 28 6d 6f  |02400081215",(mo|
0000f950  64 65 25 2d 31 38 29 2a  32 2b 31 2c 32 29 29 3a  |de%-18)*2+1,2)):|
0000f960  f4 20 4d 61 70 20 74 6f  20 6e 6f 6e 2d 6d 75 6c  |. Map to non-mul|
0000f970  74 69 73 79 6e 63 20 6d  6f 64 65 0d 35 e8 25 f2  |tisync mode.5.%.|
0000f980  6d 6f 64 65 5f 63 68 61  6e 67 65 28 6d 6f 64 65  |mode_change(mode|
0000f990  25 29 3a f4 20 53 65 6c  65 63 74 20 6d 6f 64 65  |%):. Select mode|
0000f9a0  0d 35 f2 05 e1 0d 35 fc  05 20 0d 36 06 18 dd f2  |.5....5.. .6....|
0000f9b0  6d 6f 64 65 5f 63 68 61  6e 67 65 28 6d 6f 64 65  |mode_change(mode|
0000f9c0  25 29 0d 36 10 29 f4 20  4d 6f 64 65 20 68 61 73  |%).6.). Mode has|
0000f9d0  20 63 68 61 6e 67 65 64  20 6f 72 20 73 65 6c 65  | changed or sele|
0000f9e0  63 74 20 6e 65 77 20 6d  6f 64 65 0d 36 1a 29 f4  |ct new mode.6.).|
0000f9f0  20 49 66 20 6d 6f 64 65  25 3e 3d 30 2c 20 6d 6f  | If mode%>=0, mo|
0000fa00  64 65 20 6d 6f 64 65 25  20 69 73 20 73 65 6c 65  |de mode% is sele|
0000fa10  63 74 65 64 0d 36 24 4a  ea 20 5f 25 2c 78 77 69  |cted.6$J. _%,xwi|
0000fa20  6e 64 25 2c 79 77 69 6e  64 25 2c 6f 74 68 65 72  |nd%,ywind%,other|
0000fa30  6d 6f 64 65 2c 63 6f 6c  6f 75 72 73 25 2c 70 6f  |mode,colours%,po|
0000fa40  73 25 2c 61 6c 74 6d 6f  64 65 24 2c 6d 6f 64 65  |s%,altmode$,mode|
0000fa50  63 6f 6c 73 25 2c 73 70  72 63 6f 6c 73 25 0d 36  |cols%,sprcols%.6|
0000fa60  2e 33 c8 99 20 57 52 65  61 64 50 25 2c 2c 77 69  |.3.. WReadP%,,wi|
0000fa70  6d 70 70 61 6c 3a f4 20  52 65 61 64 20 63 75 72  |mppal:. Read cur|
0000fa80  72 65 6e 74 20 57 49 4d  50 20 70 61 6c 65 74 74  |rent WIMP palett|
0000fa90  65 0d 36 38 1e e7 28 6d  6f 64 65 25 3e 3d 30 29  |e.68..(mode%>=0)|
0000faa0  20 80 20 28 6d 6f 64 65  25 3c 3e eb 29 20 8c 0d  | . (mode%<>.) ..|
0000fab0  36 42 22 20 c8 99 20 57  53 65 74 4d 25 2c 6d 6f  |6B" .. WSetM%,mo|
0000fac0  64 65 25 3a f4 20 43 68  61 6e 67 65 20 6d 6f 64  |de%:. Change mod|
0000fad0  65 0d 36 4c 10 20 e7 6d  6f 64 65 25 3c 3e eb 20  |e.6L. .mode%<>. |
0000fae0  8c 0d 36 56 47 20 20 d4  20 31 2c 2d 31 30 2c 31  |..6VG  . 1,-10,1|
0000faf0  38 30 2c 31 3a f4 20 41  6c 65 72 74 20 75 73 65  |80,1:. Alert use|
0000fb00  72 20 74 68 61 74 20 27  69 64 65 61 6c 27 20 6d  |r that 'ideal' m|
0000fb10  6f 64 65 20 63 6f 75 6c  64 6e 27 74 20 62 65 20  |ode couldn't be |
0000fb20  73 65 6c 65 63 74 65 64  0d 36 60 3a 20 20 63 6f  |selected.6`:  co|
0000fb30  6c 6f 75 72 73 25 3d 32  5e 28 32 5e a4 6d 6f 64  |lours%=2^(2^.mod|
0000fb40  65 5f 76 61 72 28 6d 6f  64 65 25 2c 39 29 29 3a  |e_var(mode%,9)):|
0000fb50  f4 20 43 6f 6c 6f 75 72  73 20 72 65 71 75 69 72  |. Colours requir|
0000fb60  65 64 0d 36 6a a8 20 20  e7 63 6f 6c 6f 75 72 73  |ed.6j.  .colours|
0000fb70  25 3d 32 20 8c 20 61 6c  74 6d 6f 64 65 24 3d 22  |%=2 . altmode$="|
0000fb80  7c 31 38 30 30 22 20 8b  20 e7 63 6f 6c 6f 75 72  ||1800" . .colour|
0000fb90  73 25 3d 34 20 8c 20 61  6c 74 6d 6f 64 65 24 3d  |s%=4 . altmode$=|
0000fba0  22 7c 31 39 30 38 7c 30  38 30 31 22 20 8b 20 e7  |"|1908|0801" . .|
0000fbb0  63 6f 6c 6f 75 72 73 25  3d 31 36 20 8c 20 61 6c  |colours%=16 . al|
0000fbc0  74 6d 6f 64 65 24 3d 22  7c 32 30 31 32 7c 31 36  |tmode$="|2012|16|
0000fbd0  31 32 7c 31 32 30 39 22  20 8b 20 e7 63 6f 6c 6f  |12|1209" . .colo|
0000fbe0  75 72 73 25 3d 32 35 36  20 8c 20 61 6c 74 6d 6f  |urs%=256 . altmo|
0000fbf0  64 65 24 3d 22 7c 32 31  31 35 7c 32 34 31 35 7c  |de$="|2115|2415||
0000fc00  31 35 31 33 7c 31 33 31  30 22 0d 36 74 07 20 20  |1513|1310".6t.  |
0000fc10  f5 0d 36 7e bf 20 20 e7  eb 3d 6d 6f 64 65 25 20  |..6~.  ..=mode% |
0000fc20  8b 20 70 6f 73 25 3d a7  61 6c 74 6d 6f 64 65 24  |. pos%=.altmode$|
0000fc30  2c 22 7c 22 2b c2 22 30  22 2b c3 6d 6f 64 65 25  |,"|"+."0"+.mode%|
0000fc40  2c 32 29 29 3a e7 70 6f  73 25 3e 30 20 8c 20 6d  |,2)):.pos%>0 . m|
0000fc50  6f 64 65 25 3d bb 28 c1  61 6c 74 6d 6f 64 65 24  |ode%=.(.altmode$|
0000fc60  2c 70 6f 73 25 2b 33 29  29 20 8b 20 f2 65 72 72  |,pos%+3)) . .err|
0000fc70  6f 72 28 2d 31 2c 22 49  20 66 61 69 6c 65 64 20  |or(-1,"I failed |
0000fc80  74 6f 20 73 65 6c 65 63  74 20 74 68 65 20 69 64  |to select the id|
0000fc90  65 61 6c 20 6d 6f 64 65  2c 20 6e 6f 72 20 61 6e  |eal mode, nor an|
0000fca0  79 20 61 6c 74 65 72 6e  61 74 69 76 65 20 6d 6f  |y alternative mo|
0000fcb0  64 65 20 21 20 4e 6f 77  20 79 6f 75 20 74 72 79  |de ! Now you try|
0000fcc0  20 69 74 20 21 22 29 3a  6d 6f 64 65 25 3d 2d 31  | it !"):mode%=-1|
0000fcd0  0d 36 88 23 20 20 c8 99  20 57 53 65 74 4d 25 2c  |.6.#  .. WSetM%,|
0000fce0  6d 6f 64 65 25 3a f4 20  43 68 61 6e 67 65 20 6d  |mode%:. Change m|
0000fcf0  6f 64 65 0d 36 92 1d 20  20 fd 20 28 eb 3d 6d 6f  |ode.6..  . (.=mo|
0000fd00  64 65 25 29 20 84 20 28  6d 6f 64 65 25 3c 30 29  |de%) . (mode%<0)|
0000fd10  0d 36 9c 06 20 cd 0d 36  a6 05 cd 0d 36 b0 40 6f  |.6.. ..6....6.@o|
0000fd20  74 68 65 72 6d 6f 64 65  3d 28 eb 3c 3e 43 75 72  |thermode=(.<>Cur|
0000fd30  72 4d 6f 64 65 25 29 3a  43 75 72 72 4d 6f 64 65  |rMode%):CurrMode|
0000fd40  25 3d eb 3a f4 20 4d 6f  64 65 20 6f 74 68 65 72  |%=.:. Mode other|
0000fd50  20 74 68 61 6e 20 6f 6c  64 20 3f 0d 36 ba 41 58  | than old ?.6.AX|
0000fd60  65 69 67 25 3d a4 6d 6f  64 65 5f 76 61 72 28 eb  |eig%=.mode_var(.|
0000fd70  2c 34 29 3a 59 65 69 67  25 3d a4 6d 6f 64 65 5f  |,4):Yeig%=.mode_|
0000fd80  76 61 72 28 eb 2c 35 29  3a f4 20 52 65 61 64 20  |var(.,5):. Read |
0000fd90  58 2f 59 45 69 67 46 61  63 74 6f 72 0d 36 c4 34  |X/YEigFactor.6.4|
0000fda0  58 73 74 65 70 25 3d 32  5e 58 65 69 67 25 3a 59  |Xstep%=2^Xeig%:Y|
0000fdb0  73 74 65 70 25 3d 32 5e  59 65 69 67 25 3a f4 20  |step%=2^Yeig%:. |
0000fdc0  43 6f 6f 72 64 69 6e 61  74 65 20 73 74 65 70 73  |Coordinate steps|
0000fdd0  0d 36 ce 42 78 77 69 6e  64 25 3d a4 6d 6f 64 65  |.6.Bxwind%=.mode|
0000fde0  5f 76 61 72 28 eb 2c 31  31 29 2b 31 3a 79 77 69  |_var(.,11)+1:ywi|
0000fdf0  6e 64 25 3d a4 6d 6f 64  65 5f 76 61 72 28 eb 2c  |nd%=.mode_var(.,|
0000fe00  31 32 29 2b 31 3a f4 20  52 65 73 6f 6c 75 74 69  |12)+1:. Resoluti|
0000fe10  6f 6e 0d 36 d8 41 53 63  72 57 25 3d 28 31 3c 3c  |on.6.AScrW%=(1<<|
0000fe20  58 65 69 67 25 29 2a 78  77 69 6e 64 25 3a 53 63  |Xeig%)*xwind%:Sc|
0000fe30  72 48 25 3d 28 31 3c 3c  59 65 69 67 25 29 2a 79  |rH%=(1<<Yeig%)*y|
0000fe40  77 69 6e 64 25 3a f4 20  53 63 72 65 65 6e 20 73  |wind%:. Screen s|
0000fe50  69 7a 65 0d 36 e2 0a e7  49 6d 67 20 8c 0d 36 ec  |ize.6...Img ..6.|
0000fe60  2b 20 f2 73 65 74 5f 74  72 61 6e 73 3a f4 20 52  |+ .set_trans:. R|
0000fe70  65 2d 73 65 74 20 73 70  72 69 74 65 20 74 72 61  |e-set sprite tra|
0000fe80  6e 73 6c 61 74 69 6f 6e  0d 36 f6 41 20 e7 41 75  |nslation.6.A .Au|
0000fe90  74 6f 50 61 6c 20 8c 20  f2 73 65 74 5f 70 61 6c  |toPal . .set_pal|
0000fea0  65 74 74 65 28 31 29 3a  f4 20 53 65 6c 65 63 74  |ette(1):. Select|
0000feb0  20 69 6d 61 67 65 20 70  61 6c 65 74 74 65 20 69  | image palette i|
0000fec0  66 20 65 6e 61 62 6c 65  64 0d 37 00 23 20 e7 6f  |f enabled.7.# .o|
0000fed0  74 68 65 72 6d 6f 64 65  20 8c 20 f2 6e 65 77 5f  |thermode . .new_|
0000fee0  69 6d 61 67 65 5f 77 69  6e 64 6f 77 0d 37 0a 05  |image_window.7..|
0000fef0  cd 0d 37 14 05 e1 0d 37  1e 05 20 0d 37 28 0f dd  |..7....7.. .7(..|
0000ff00  f2 73 65 74 5f 74 72 61  6e 73 0d 37 32 43 f4 20  |.set_trans.72C. |
0000ff10  53 65 74 73 20 74 72 61  6e 73 6c 61 74 69 6f 6e  |Sets translation|
0000ff20  20 66 61 63 74 6f 72 73  20 28 74 72 61 6e 73 74  | factors (transt|
0000ff30  61 62 20 26 20 70 61 6c  65 74 74 65 29 20 66 6f  |ab & palette) fo|
0000ff40  72 20 73 70 72 69 74 65  20 70 6c 6f 74 0d 37 3c  |r sprite plot.7<|
0000ff50  21 ea 20 6d 63 25 2c 73  63 25 2c 76 25 2c 63 25  |!. mc%,sc%,v%,c%|
0000ff60  2c 67 76 25 2c 67 69 25  2c 69 25 2c 70 25 0d 37  |,gv%,gi%,i%,p%.7|
0000ff70  46 3c 6d 63 25 3d 32 5e  28 32 5e a4 6c 6f 67 32  |F<mc%=2^(2^.log2|
0000ff80  42 50 50 29 3a 73 63 25  3d 32 5e 53 70 72 43 6f  |BPP):sc%=2^SprCo|
0000ff90  6c 62 69 74 73 25 3a f4  20 43 6f 6c 6f 75 72 73  |lbits%:. Colours|
0000ffa0  20 61 76 61 69 6c 61 62  6c 65 0d 37 50 47 53 68  | available.7PGSh|
0000ffb0  6f 77 50 61 6c 25 28 29  3d 49 6d 67 50 61 6c 25  |owPal%()=ImgPal%|
0000ffc0  28 29 3a 53 68 6f 77 50  61 6c 25 28 30 29 3d 32  |():ShowPal%(0)=2|
0000ffd0  5e 53 68 6f 77 50 61 6c  25 28 30 29 3a f4 20 43  |^ShowPal%(0):. C|
0000ffe0  6f 70 79 20 69 6d 61 67  65 20 70 61 6c 65 74 74  |opy image palett|
0000fff0  65 0d 37 5a 25 e7 6d 63  25 3d 73 63 25 20 8c 20  |e.7Z%.mc%=sc% . |
00010000  54 72 61 6e 73 54 61 62  49 64 3d b9 3a e1 3a f4  |TransTabId=.:.:.|
00010010  20 49 64 65 61 6c 0d 37  64 25 54 72 61 6e 73 54  | Ideal.7d%TransT|
00010020  61 62 49 64 3d a3 3a f4  20 41 6c 77 61 79 73 20  |abId=.:. Always |
00010030  74 72 61 6e 73 6c 61 74  69 6f 6e 0d 37 6e 0e e7  |translation.7n..|
00010040  6d 63 25 3e 73 63 25 20  8c 0d 37 78 3a 20 e7 6d  |mc%>sc% ..7x: .m|
00010050  63 25 3c 3d 31 36 20 8c  20 e3 20 63 25 3d 30 20  |c%<=16 . . c%=0 |
00010060  b8 20 73 63 25 2d 31 3a  74 72 61 6e 73 74 61 62  |. sc%-1:transtab|
00010070  25 3f 63 25 3d 63 25 80  28 6d 63 25 2d 31 29 3a  |%?c%=c%.(mc%-1):|
00010080  ed 3a e1 0d 37 82 3b 20  c8 99 20 22 54 72 61 6e  |.:..7.; .. "Tran|
00010090  73 6c 61 74 6f 72 5f 50  61 6c 65 74 74 65 22 2c  |slator_Palette",|
000100a0  38 2c 64 75 6d 25 2c 32  3a f4 20 47 65 74 20 64  |8,dum%,2:. Get d|
000100b0  65 66 61 75 6c 74 20 70  61 6c 65 74 74 65 0d 37  |efault palette.7|
000100c0  8c 34 20 f2 73 74 64 70  61 6c 28 53 68 6f 77 50  |.4 .stdpal(ShowP|
000100d0  61 6c 25 28 29 2c 38 29  3a f4 20 53 68 6f 77 20  |al%(),8):. Show |
000100e0  69 6e 20 64 65 66 61 75  6c 74 20 70 61 6c 65 74  |in default palet|
000100f0  74 65 0d 37 96 5e 20 e3  20 63 25 3d 30 20 b8 20  |te.7.^ . c%=0 . |
00010100  73 63 25 2d 31 3a c8 99  20 22 54 72 61 6e 73 6c  |sc%-1:.. "Transl|
00010110  61 74 6f 72 5f 43 6c 6f  73 65 73 74 54 6f 52 47  |ator_ClosestToRG|
00010120  42 22 2c 49 6d 67 50 61  6c 25 28 63 25 2b 31 29  |B",ImgPal%(c%+1)|
00010130  2c 32 35 36 2c 64 75 6d  25 20 b8 20 76 25 3a 74  |,256,dum% . v%:t|
00010140  72 61 6e 73 74 61 62 25  3f 63 25 3d 76 25 3a ed  |ranstab%?c%=v%:.|
00010150  0d 37 a0 31 cc 20 f4 20  4c 65 73 73 20 63 6f 6c  |.7.1. . Less col|
00010160  6f 75 72 73 20 74 68 61  6e 20 72 65 71 75 69 72  |ours than requir|
00010170  65 64 2c 20 73 6f 20 63  6f 6d 70 72 6f 6d 69 73  |ed, so compromis|
00010180  65 0d 37 aa 85 20 e7 ac  46 72 65 71 43 61 6c 63  |e.7.. ..FreqCalc|
00010190  20 8c 20 f2 68 6f 75 72  5f 6f 6e 3a c8 99 20 22  | . .hour_on:.. "|
000101a0  54 72 61 6e 73 6c 61 74  6f 72 5f 50 69 78 65 6c  |Translator_Pixel|
000101b0  46 72 65 71 22 2c 53 70  72 50 74 72 25 2c 66 72  |Freq",SprPtr%,fr|
000101c0  65 71 25 3a f2 68 6f 75  72 5f 6f 66 66 3a 46 72  |eq%:.hour_off:Fr|
000101d0  65 71 43 61 6c 63 3d b9  3a f4 20 43 61 6c 63 75  |eqCalc=.:. Calcu|
000101e0  6c 61 74 65 20 70 69 78  65 6c 20 66 72 65 71 75  |late pixel frequ|
000101f0  65 6e 63 69 65 73 20 69  6e 20 69 6d 61 67 65 20  |encies in image |
00010200  73 70 72 69 74 65 0d 37  b4 1c 20 f2 68 6f 75 72  |sprite.7.. .hour|
00010210  5f 6f 6e 3a f4 20 48 6f  75 72 67 6c 61 73 73 20  |_on:. Hourglass |
00010220  6f 6e 0d 37 be 43 20 70  25 3d 64 75 6d 25 3a e3  |on.7.C p%=dum%:.|
00010230  20 63 25 3d 31 20 b8 20  73 63 25 3a 21 70 25 3d  | c%=1 . sc%:!p%=|
00010240  49 6d 67 50 61 6c 25 28  63 25 29 3a 70 25 2b 3d  |ImgPal%(c%):p%+=|
00010250  34 3a ed 3a f4 20 49 6d  61 67 65 27 73 20 70 61  |4:.:. Image's pa|
00010260  6c 65 74 74 65 0d 37 c8  3a 20 f4 20 43 61 6c 63  |lette.7.: . Calc|
00010270  75 6c 61 74 65 20 74 72  61 6e 73 6c 61 74 69 6f  |ulate translatio|
00010280  6e 20 74 61 62 6c 65 20  61 6e 64 20 70 61 6c 65  |n table and pale|
00010290  74 74 65 20 66 6f 72 20  64 69 73 70 6c 61 79 0d  |tte for display.|
000102a0  37 d2 4b 20 c8 99 20 22  54 72 61 6e 73 6c 61 74  |7.K .. "Translat|
000102b0  6f 72 5f 43 61 6c 63 54  72 61 6e 73 22 2c 73 63  |or_CalcTrans",sc|
000102c0  25 2c 66 72 65 71 25 2c  64 75 6d 25 2c 6d 63 25  |%,freq%,dum%,mc%|
000102d0  2c 74 72 61 6e 73 74 61  62 25 2c 61 72 67 25 20  |,transtab%,arg% |
000102e0  b8 20 2c 2c 2c 75 73 65  64 25 0d 37 dc 43 20 70  |. ,,,used%.7.C p|
000102f0  25 3d 61 72 67 25 3a e3  20 63 25 3d 31 20 b8 20  |%=arg%:. c%=1 . |
00010300  75 73 65 64 25 3a 53 68  6f 77 50 61 6c 25 28 63  |used%:ShowPal%(c|
00010310  25 29 3d 21 70 25 3a 70  25 2b 3d 34 3a ed 3a f4  |%)=!p%:p%+=4:.:.|
00010320  20 52 65 61 64 20 70 61  6c 65 74 74 65 0d 37 e6  | Read palette.7.|
00010330  38 20 53 68 6f 77 50 61  6c 25 28 30 29 3d 75 73  |8 ShowPal%(0)=us|
00010340  65 64 25 3a f4 20 43 6f  6c 6f 75 72 73 20 75 73  |ed%:. Colours us|
00010350  65 64 20 69 6e 20 64 69  73 70 6c 61 79 20 70 61  |ed in display pa|
00010360  6c 65 74 74 65 0d 37 f0  1e 20 f2 68 6f 75 72 5f  |lette.7.. .hour_|
00010370  6f 66 66 3a f4 20 48 6f  75 72 67 6c 61 73 73 20  |off:. Hourglass |
00010380  6f 66 66 0d 37 fa 05 cd  0d 38 04 05 e1 0d 38 0e  |off.7....8....8.|
00010390  05 20 0d 38 18 0e dd f2  61 75 74 6f 7a 6f 6f 6d  |. .8....autozoom|
000103a0  0d 38 22 33 f4 20 41 64  6a 75 73 74 20 7a 6f 6f  |.8"3. Adjust zoo|
000103b0  6d 20 66 61 63 74 6f 72  20 66 6f 72 20 61 75 74  |m factor for aut|
000103c0  6f 20 7a 6f 6f 6d 20 28  69 66 20 65 6e 61 62 6c  |o zoom (if enabl|
000103d0  65 64 29 0d 38 2c 08 ea  20 5f 25 0d 38 36 0f e7  |ed).8,.. _%.86..|
000103e0  41 75 74 6f 5a 6f 6f 6d  20 8c 0d 38 40 37 20 5f  |AutoZoom ..8@7 _|
000103f0  25 3d a4 73 70 72 57 2a  5a 6f 6f 6d 58 3a c8 95  |%=.sprW*ZoomX:..|
00010400  20 5f 25 3e 53 63 72 57  25 3a 5a 6f 6f 6d 58 3d  | _%>ScrW%:ZoomX=|
00010410  5a 6f 6f 6d 58 2f 32 3a  5f 25 3d 5f 25 2f 32 3a  |ZoomX/2:_%=_%/2:|
00010420  ce 0d 38 4a 36 20 e7 5a  6f 6f 6d 58 3c 31 20 8c  |..8J6 .ZoomX<1 .|
00010430  20 c8 95 20 5f 25 2a 32  3c 3d 53 63 72 57 25 3a  | .. _%*2<=ScrW%:|
00010440  5a 6f 6f 6d 58 3d 5a 6f  6f 6d 58 2a 32 3a 5f 25  |ZoomX=ZoomX*2:_%|
00010450  3d 5f 25 2a 32 3a ce 0d  38 54 37 20 5f 25 3d a4  |=_%*2:..8T7 _%=.|
00010460  73 70 72 48 2a 5a 6f 6f  6d 59 3a c8 95 20 5f 25  |sprH*ZoomY:.. _%|
00010470  3e 53 63 72 48 25 3a 5a  6f 6f 6d 59 3d 5a 6f 6f  |>ScrH%:ZoomY=Zoo|
00010480  6d 59 2f 32 3a 5f 25 3d  5f 25 2f 32 3a ce 0d 38  |mY/2:_%=_%/2:..8|
00010490  5e 36 20 e7 5a 6f 6f 6d  59 3c 31 20 8c 20 c8 95  |^6 .ZoomY<1 . ..|
000104a0  20 5f 25 2a 32 3c 3d 53  63 72 48 25 3a 5a 6f 6f  | _%*2<=ScrH%:Zoo|
000104b0  6d 59 3d 5a 6f 6f 6d 59  2a 32 3a 5f 25 3d 5f 25  |mY=ZoomY*2:_%=_%|
000104c0  2a 32 3a ce 0d 38 68 05  cd 0d 38 72 05 e1 0d 38  |*2:..8h...8r...8|
000104d0  7c 05 20 0d 38 86 23 dd  f2 70 6c 6f 74 5f 69 6d  ||. .8.#..plot_im|
000104e0  61 67 65 28 78 25 2c 79  25 2c 61 63 74 25 2c 73  |age(x%,y%,act%,s|
000104f0  63 61 6c 65 25 29 0d 38  90 2f f4 20 50 6c 6f 74  |cale%).8./. Plot|
00010500  73 20 69 6d 61 67 65 20  73 70 72 69 74 65 20 77  |s image sprite w|
00010510  69 74 68 20 74 72 61 6e  73 6c 61 74 69 6f 6e 20  |ith translation |
00010520  74 61 62 6c 65 0d 38 9a  7f e7 54 72 61 6e 73 54  |table.8...TransT|
00010530  61 62 49 64 20 8c 20 c8  99 20 4f 53 53 70 6f 70  |abId . .. OSSpop|
00010540  25 2c 35 36 34 2c 53 70  72 69 74 65 25 2c 53 70  |%,564,Sprite%,Sp|
00010550  72 50 74 72 25 2c 78 25  2c 79 25 2c 61 63 74 25  |rPtr%,x%,y%,act%|
00010560  2c 73 63 61 6c 65 25 20  8b 20 c8 99 20 4f 53 53  |,scale% . .. OSS|
00010570  70 6f 70 25 2c 35 36 34  2c 53 70 72 69 74 65 25  |pop%,564,Sprite%|
00010580  2c 53 70 72 50 74 72 25  2c 78 25 2c 79 25 2c 61  |,SprPtr%,x%,y%,a|
00010590  63 74 25 2c 73 63 61 6c  65 25 2c 74 72 61 6e 73  |ct%,scale%,trans|
000105a0  74 61 62 25 0d 38 a4 05  e1 0d 38 ae 05 20 0d 38  |tab%.8....8.. .8|
000105b0  b8 13 dd a4 75 6e 70 61  63 6b 28 74 79 70 65 24  |....unpack(type$|
000105c0  29 0d 38 c2 2b f4 20 55  6e 70 61 63 6b 73 20 69  |).8.+. Unpacks i|
000105d0  6d 61 67 65 20 28 66 69  6e 61 6c 20 75 6e 70 61  |mage (final unpa|
000105e0  63 6b 69 6e 67 20 70 68  61 73 65 29 0d 38 cc 2d  |cking phase).8.-|
000105f0  f4 20 52 65 74 75 72 6e  73 20 54 52 55 45 20 69  |. Returns TRUE i|
00010600  66 20 61 6c 6c 20 69 73  20 77 65 6c 6c 2c 20 65  |f all is well, e|
00010610  6c 73 65 20 46 41 4c 53  45 0d 38 d6 3e ea 20 63  |lse FALSE.8.>. c|
00010620  25 2c 62 70 70 25 2c 70  63 25 2c 62 25 2c 67 66  |%,bpp%,pc%,b%,gf|
00010630  2c 62 66 2c 6d 69 6e 25  2c 6d 61 78 25 2c 72 67  |,bf,min%,max%,rg|
00010640  62 25 2c 73 25 2c 76 25  2c 73 75 62 25 2c 6d 75  |b%,s%,v%,sub%,mu|
00010650  6c 2c 72 25 2c 67 25 0d  38 e0 20 ea 20 72 6d 25  |l,r%,g%.8. . rm%|
00010660  2c 67 6d 25 2c 62 6d 25  2c 69 2c 72 69 2c 67 69  |,gm%,bm%,i,ri,gi|
00010670  2c 62 69 2c 4f 75 74 0d  38 ea 6f e7 46 72 65 65  |,bi,Out.8.o.Free|
00010680  25 3e 32 2a 31 30 32 34  20 8c 20 e7 a4 61 6c 6c  |%>2*1024 . ..all|
00010690  6f 63 61 74 65 28 42 5f  69 6e 66 69 6c 65 25 2c  |ocate(B_infile%,|
000106a0  46 72 65 65 25 2d 31 36  29 20 8b 20 f2 65 72 72  |Free%-16) . .err|
000106b0  6f 72 28 2d 31 2c 22 49  20 68 61 76 65 20 6e 6f  |or(-1,"I have no|
000106c0  20 72 6f 6f 6d 20 66 6f  72 20 74 68 65 20 69 6e  | room for the in|
000106d0  70 75 74 20 66 69 6c 65  20 62 75 66 66 65 72 20  |put file buffer |
000106e0  21 22 29 3a 3d a3 0d 38  f4 29 62 70 70 25 3d 49  |!"):=..8.)bpp%=I|
000106f0  6e 50 61 6c 25 28 30 29  3a f4 20 42 69 74 73 20  |nPal%(0):. Bits |
00010700  70 65 72 20 70 69 78 65  6c 20 69 6e 70 75 74 0d  |per pixel input.|
00010710  38 fe 34 f2 76 61 72 28  22 69 6e 62 69 22 2c 62  |8.4.var("inbi",b|
00010720  70 70 25 29 3a f4 20 49  6e 70 75 74 20 28 69 6d  |pp%):. Input (im|
00010730  61 67 65 29 20 62 69 74  73 20 70 65 72 20 70 69  |age) bits per pi|
00010740  78 65 6c 0d 39 08 26 f2  76 61 72 28 22 62 77 68  |xel.9.&.var("bwh|
00010750  69 22 2c 42 6c 61 63 6b  57 68 69 74 65 29 3a f4  |i",BlackWhite):.|
00010760  20 42 2f 77 20 66 6c 61  67 0d 39 12 31 f2 76 61  | B/w flag.9.1.va|
00010770  72 28 22 65 73 70 72 22  2c 45 72 72 53 70 72 65  |r("espr",ErrSpre|
00010780  61 64 29 3a f4 20 45 72  72 6f 72 20 73 70 72 65  |ad):. Error spre|
00010790  61 64 69 6e 67 20 66 6c  61 67 0d 39 1c 26 f2 76  |ading flag.9.&.v|
000107a0  61 72 28 22 7a 69 67 7a  22 2c 5a 69 67 5a 61 67  |ar("zigz",ZigZag|
000107b0  29 3a f4 20 5a 69 67 20  7a 61 67 20 66 6c 61 67  |):. Zig zag flag|
000107c0  0d 39 26 23 f2 76 61 72  28 22 63 6c 66 68 22 2c  |.9&#.var("clfh",|
000107d0  30 29 3a f4 20 4e 6f 20  43 6c 65 61 72 20 28 79  |0):. No Clear (y|
000107e0  65 74 29 0d 39 30 3d f2  76 61 72 28 22 6f 75 74  |et).90=.var("out|
000107f0  78 22 2c 4f 75 74 58 25  29 3a f2 76 61 72 28 22  |x",OutX%):.var("|
00010800  6f 75 74 79 22 2c 4f 75  74 59 25 29 3a f4 20 4f  |outy",OutY%):. O|
00010810  75 74 70 75 74 20 72 65  73 6f 6c 75 74 69 6f 6e  |utput resolution|
00010820  0d 39 3a 3d f2 76 61 72  28 22 79 6d 75 6c 22 2c  |.9:=.var("ymul",|
00010830  59 4d 75 6c 25 29 3a f2  76 61 72 28 22 79 64 69  |YMul%):.var("ydi|
00010840  76 22 2c 59 44 69 76 25  29 3a f4 20 53 63 61 6c  |v",YDiv%):. Scal|
00010850  69 6e 67 20 66 61 63 74  6f 72 73 20 59 0d 39 44  |ing factors Y.9D|
00010860  3d f2 76 61 72 28 22 78  6d 75 6c 22 2c 58 4d 75  |=.var("xmul",XMu|
00010870  6c 25 29 3a f2 76 61 72  28 22 78 64 69 76 22 2c  |l%):.var("xdiv",|
00010880  58 44 69 76 25 29 3a f4  20 53 63 61 6c 69 6e 67  |XDiv%):. Scaling|
00010890  20 66 61 63 74 6f 72 73  20 58 0d 39 4e 6f e7 50  | factors X.9No.P|
000108a0  65 72 63 65 6e 74 20 8c  20 e7 ac 42 6c 61 6e 6b  |ercent . ..Blank|
000108b0  69 6e 67 20 8c 20 f2 76  61 72 28 22 70 65 72 63  |ing . .var("perc|
000108c0  22 2c 31 29 3a f2 76 61  72 28 22 70 69 6e 63 22  |",1):.var("pinc"|
000108d0  2c 28 31 30 30 3c 3c 31  36 29 2f 49 6d 67 48 25  |,(100<<16)/ImgH%|
000108e0  29 20 8b 20 f2 76 61 72  28 22 70 65 72 63 22 2c  |) . .var("perc",|
000108f0  30 29 3a f4 20 48 6f 75  72 67 6c 61 73 73 20 70  |0):. Hourglass p|
00010900  65 72 63 65 6e 74 61 67  65 0d 39 58 38 f4 20 53  |ercentage.9X8. S|
00010910  65 74 20 70 61 6c 65 74  74 65 20 28 69 66 20 72  |et palette (if r|
00010920  65 6c 65 76 61 6e 74 2c  20 69 2e 65 2e 20 6e 6f  |elevant, i.e. no|
00010930  74 20 70 75 72 65 20 52  47 42 20 69 6e 70 75 74  |t pure RGB input|
00010940  29 0d 39 62 3f e7 62 70  70 25 3c 3d 38 20 8c 20  |).9b?.bpp%<=8 . |
00010950  e3 20 63 25 3d 30 20 b8  20 32 5e 62 70 70 25 2d  |. c%=0 . 2^bpp%-|
00010960  31 3a 70 61 6c 72 67 62  25 21 28 63 25 3c 3c 32  |1:palrgb%!(c%<<2|
00010970  29 3d 49 6e 50 61 6c 25  28 63 25 2b 31 29 3a ed  |)=InPal%(c%+1):.|
00010980  0d 39 6c 66 e3 20 62 25  3d 30 20 b8 20 33 31 3a  |.9lf. b%=0 . 31:|
00010990  62 75 66 66 65 72 25 21  28 62 25 2a 38 29 3d 42  |buffer%!(b%*8)=B|
000109a0  75 66 66 65 72 25 28 62  25 2c 30 29 3a 62 75 66  |uffer%(b%,0):buf|
000109b0  66 65 72 25 21 28 62 25  2a 38 2b 34 29 3d 42 75  |fer%!(b%*8+4)=Bu|
000109c0  66 66 65 72 25 28 62 25  2c 31 29 3a ed 3a f4 20  |ffer%(b%,1):.:. |
000109d0  42 75 66 66 65 72 20 6c  6f 63 61 74 69 6f 6e 73  |Buffer locations|
000109e0  2f 73 69 7a 65 73 0d 39  76 39 e7 4f 75 74 4d 6f  |/sizes.9v9.OutMo|
000109f0  64 65 3d 31 20 8c 20 70  63 25 3d 30 20 8b 20 70  |de=1 . pc%=0 . p|
00010a00  63 25 3d 4f 75 74 50 61  6c 3a f4 20 53 65 6c 65  |c%=OutPal:. Sele|
00010a10  63 74 20 70 61 6c 65 74  74 65 20 63 6f 64 65 0d  |ct palette code.|
00010a20  39 80 3c f4 20 42 75 69  6c 64 20 52 2f 47 2f 42  |9.<. Build R/G/B|
00010a30  20 69 6e 74 65 6e 73 69  74 79 20 6d 61 70 20 66  | intensity map f|
00010a40  6f 72 20 67 61 6d 6d 61  2f 69 6e 76 65 72 74 2f  |or gamma/invert/|
00010a50  72 67 62 62 69 74 73 2f  62 26 77 0d 39 8a 3a e7  |rgbbits/b&w.9.:.|
00010a60  47 61 6d 6d 61 20 8c 20  e7 47 61 6d 6d 61 46 3e  |Gamma . .GammaF>|
00010a70  30 20 8c 20 67 66 3d 31  2f 47 61 6d 6d 61 46 20  |0 . gf=1/GammaF |
00010a80  8b 20 67 66 3d 30 3a f4  20 47 61 6d 6d 61 20 66  |. gf=0:. Gamma f|
00010a90  61 63 74 6f 72 0d 39 94  3d e7 42 6c 61 63 6b 20  |actor.9.=.Black |
00010aa0  8c 20 e7 42 6c 61 63 6b  46 3c 3e 30 20 8c 20 62  |. .BlackF<>0 . b|
00010ab0  66 3d 42 6c 61 63 6b 46  20 8b 20 62 66 3d 30 3a  |f=BlackF . bf=0:|
00010ac0  f4 20 42 6c 61 63 6b 20  63 6f 72 72 65 63 74 69  |. Black correcti|
00010ad0  6f 6e 0d 39 9e 0c e7 52  61 6e 67 65 20 8c 0d 39  |on.9...Range ..9|
00010ae0  a8 0f 20 e7 62 70 70 25  3c 3d 38 20 8c 0d 39 b2  |.. .bpp%<=8 ..9.|
00010af0  87 20 20 6d 69 6e 25 3d  32 35 36 3a 6d 61 78 25  |.  min%=256:max%|
00010b00  3d 30 3a e3 20 63 25 3d  30 20 b8 20 32 5e 62 70  |=0:. c%=0 . 2^bp|
00010b10  70 25 2d 31 3a 72 67 62  25 3d 49 6e 50 61 6c 25  |p%-1:rgb%=InPal%|
00010b20  28 63 25 2b 31 29 3a e3  20 73 25 3d 31 20 b8 20  |(c%+1):. s%=1 . |
00010b30  33 3a 76 25 3d 72 67 62  25 80 26 46 46 3a 72 67  |3:v%=rgb%.&FF:rg|
00010b40  62 25 3d 72 67 62 25 3e  3e 38 3a 6d 69 6e 25 3d  |b%=rgb%>>8:min%=|
00010b50  a4 6d 69 6e 28 6d 69 6e  25 2c 76 25 29 3a 6d 61  |.min(min%,v%):ma|
00010b60  78 25 3d a4 6d 61 78 28  6d 61 78 25 2c 76 25 29  |x%=.max(max%,v%)|
00010b70  3a ed 3a ed 0d 39 bc 3f  20 cc 20 c8 99 20 22 54  |:.:..9.? . .. "T|
00010b80  72 61 6e 73 6c 61 74 6f  72 5f 55 6e 70 61 63 6b  |ranslator_Unpack|
00010b90  50 72 65 22 2c 70 61 6c  72 67 62 25 2c 70 63 25  |Pre",palrgb%,pc%|
00010ba0  2c 62 75 66 66 65 72 25  2c 33 32 2c 69 6e 74 6d  |,buffer%,32,intm|
00010bb0  61 70 25 0d 39 c6 37 20  20 f2 75 6e 70 61 63 6b  |ap%.9.7  .unpack|
00010bc0  5f 70 68 61 73 65 28 74  79 70 65 24 2c 33 29 3a  |_phase(type$,3):|
00010bd0  f4 20 47 61 74 68 65 72  20 69 6e 66 6f 20 6f 6e  |. Gather info on|
00010be0  20 52 47 42 20 72 61 6e  67 65 0d 39 d0 41 20 20  | RGB range.9.A  |
00010bf0  6d 69 6e 25 3d a4 76 61  72 28 22 69 6e 6d 69 22  |min%=.var("inmi"|
00010c00  29 3a 6d 61 78 25 3d a4  76 61 72 28 22 69 6e 6d  |):max%=.var("inm|
00010c10  61 22 29 3a f4 20 47 65  74 20 6d 69 6e 2f 6d 61  |a"):. Get min/ma|
00010c20  78 20 69 6e 74 65 6e 73  69 74 79 0d 39 da 06 20  |x intensity.9.. |
00010c30  cd 0d 39 e4 3d 20 73 75  62 25 3d 6d 69 6e 25 3a  |..9.= sub%=min%:|
00010c40  6d 75 6c 3d 32 35 35 2f  28 6d 61 78 25 2d 6d 69  |mul=255/(max%-mi|
00010c50  6e 25 29 3a f4 20 52 61  6e 67 65 20 63 6f 72 72  |n%):. Range corr|
00010c60  65 63 74 69 6f 6e 20 66  61 63 74 6f 72 73 0d 39  |ection factors.9|
00010c70  ee 35 20 52 61 6e 67 65  4d 69 6e 25 3d 6d 69 6e  |.5 RangeMin%=min|
00010c80  25 3a 52 61 6e 67 65 4d  61 78 25 3d 6d 61 78 25  |%:RangeMax%=max%|
00010c90  3a f4 20 52 65 6d 65 6d  62 65 72 20 6d 69 6e 2f  |:. Remember min/|
00010ca0  6d 61 78 0d 39 f8 5c 20  24 49 4d 49 72 6e 25 3d  |max.9.\ $IMIrn%=|
00010cb0  c3 28 52 61 6e 67 65 4d  69 6e 25 29 2b 22 2d 22  |.(RangeMin%)+"-"|
00010cc0  2b c3 28 52 61 6e 67 65  4d 61 78 25 29 2b 22 20  |+.(RangeMax%)+" |
00010cd0  28 22 2b c3 28 a8 28 28  6d 61 78 25 2d 6d 69 6e  |("+.(.((max%-min|
00010ce0  25 29 2f 32 2e 35 35 29  29 2b 22 25 29 22 3a f4  |%)/2.55))+"%)":.|
00010cf0  20 53 65 74 20 72 61 6e  67 65 20 69 6e 66 6f 0d  | Set range info.|
00010d00  3a 02 17 cc 20 24 49 4d  49 72 6e 25 3d 22 55 6e  |:... $IMIrn%="Un|
00010d10  6b 6e 6f 77 6e 22 0d 3a  0c 05 cd 0d 3a 16 76 72  |known".:....:.vr|
00010d20  25 3d 28 52 47 42 62 69  74 73 25 3e 3e 31 36 29  |%=(RGBbits%>>16)|
00010d30  80 26 46 46 3a 67 25 3d  28 52 47 42 62 69 74 73  |.&FF:g%=(RGBbits|
00010d40  25 3e 3e 38 29 80 26 46  46 3a 62 25 3d 52 47 42  |%>>8).&FF:b%=RGB|
00010d50  62 69 74 73 25 80 26 46  46 3a 76 25 3d 26 46 46  |bits%.&FF:v%=&FF|
00010d60  30 30 3a 72 6d 25 3d 76  25 3e 3e 72 25 3a 67 6d  |00:rm%=v%>>r%:gm|
00010d70  25 3d 76 25 3e 3e 67 25  3a 62 6d 25 3d 76 25 3e  |%=v%>>g%:bm%=v%>|
00010d80  3e 62 25 3a f4 20 52 2f  47 2f 42 20 6d 61 73 6b  |>b%:. R/G/B mask|
00010d90  73 0d 3a 20 34 72 67 3d  30 2e 33 30 30 3a 67 67  |s.: 4rg=0.300:gg|
00010da0  3d 30 2e 35 38 36 3a 62  67 3d 30 2e 31 31 34 3a  |=0.586:bg=0.114:|
00010db0  f4 20 47 72 65 79 76 61  6c 75 65 73 20 6f 66 20  |. Greyvalues of |
00010dc0  52 2f 47 2f 42 0d 3a 2a  10 e3 20 63 25 3d 30 20  |R/G/B.:*.. c%=0 |
00010dd0  b8 20 32 35 35 0d 3a 34  23 e7 52 61 6e 67 65 20  |. 255.:4#.Range |
00010de0  8c 20 69 3d 28 63 25 2d  73 75 62 25 29 2a 6d 75  |. i=(c%-sub%)*mu|
00010df0  6c 20 8b 20 69 3d 63 25  0d 3a 3e 2e e7 62 66 3d  |l . i=c%.:>..bf=|
00010e00  30 20 8b 20 69 3d 69 2b  62 66 3a e7 69 3c 30 20  |0 . i=i+bf:.i<0 |
00010e10  8c 20 69 3d 30 20 8b 20  e7 69 3e 32 35 35 20 8c  |. i=0 . .i>255 .|
00010e20  20 69 3d 32 35 35 0d 3a  48 25 e7 67 66 3e 30 20  | i=255.:H%.gf>0 |
00010e30  8c 20 e7 69 3e 30 20 8c  20 69 3d 28 28 69 2f 32  |. .i>0 . i=((i/2|
00010e40  35 35 29 5e 67 66 29 2a  32 35 35 0d 3a 52 18 e7  |55)^gf)*255.:R..|
00010e50  49 6e 76 65 72 74 52 47  42 20 8c 20 69 3d 32 35  |InvertRGB . i=25|
00010e60  35 2d 69 0d 3a 5c 24 72  69 3d 69 20 80 20 72 6d  |5-i.:\$ri=i . rm|
00010e70  25 3a 67 69 3d 69 20 80  20 67 6d 25 3a 62 69 3d  |%:gi=i . gm%:bi=|
00010e80  69 20 80 20 62 6d 25 0d  3a 66 2c e7 42 6c 61 63  |i . bm%.:f,.Blac|
00010e90  6b 57 68 69 74 65 20 8c  20 72 69 3d 72 69 2a 72  |kWhite . ri=ri*r|
00010ea0  67 3a 67 69 3d 67 69 2a  67 67 3a 62 69 3d 62 69  |g:gi=gi*gg:bi=bi|
00010eb0  2a 62 67 0d 3a 70 27 69  6e 74 6d 61 70 25 21 28  |*bg.:p'intmap%!(|
00010ec0  63 25 3c 3c 32 29 3d 28  72 69 3c 3c 31 36 29 2b  |c%<<2)=(ri<<16)+|
00010ed0  28 67 69 3c 3c 38 29 2b  62 69 0d 3a 7a 05 ed 0d  |(gi<<8)+bi.:z...|
00010ee0  3a 84 44 47 72 65 79 52  67 62 3d 28 62 70 70 25  |:.DGreyRgb=(bpp%|
00010ef0  3e 38 29 20 80 20 42 6c  61 63 6b 57 68 69 74 65  |>8) . BlackWhite|
00010f00  3a f4 20 46 6c 61 67 20  74 6f 20 69 6e 64 69 63  |:. Flag to indic|
00010f10  61 74 65 20 67 72 65 79  20 52 47 42 20 6f 75 74  |ate grey RGB out|
00010f20  70 75 74 0d 3a 8e 48 c8  99 20 22 54 72 61 6e 73  |put.:.H.. "Trans|
00010f30  6c 61 74 6f 72 5f 55 6e  70 61 63 6b 50 72 65 22  |lator_UnpackPre"|
00010f40  2c 70 61 6c 72 67 62 25  2c 70 63 25 2c 62 75 66  |,palrgb%,pc%,buf|
00010f50  66 65 72 25 2c 33 32 2c  69 6e 74 6d 61 70 25 20  |fer%,32,intmap% |
00010f60  b8 20 2c 74 72 75 65 70  61 6c 25 0d 3a 98 74 49  |. ,truepal%.:.tI|
00010f70  6d 67 50 61 6c 25 28 29  3d 30 3a 49 6d 67 50 61  |mgPal%()=0:ImgPa|
00010f80  6c 25 28 30 29 3d 53 70  72 43 6f 6c 62 69 74 73  |l%(0)=SprColbits|
00010f90  25 3a e3 20 63 25 3d 30  20 b8 20 32 5e 53 70 72  |%:. c%=0 . 2^Spr|
00010fa0  43 6f 6c 62 69 74 73 25  2d 31 3a 49 6d 67 50 61  |Colbits%-1:ImgPa|
00010fb0  6c 25 28 63 25 2b 31 29  3d 70 61 6c 72 67 62 25  |l%(c%+1)=palrgb%|
00010fc0  21 28 63 25 3c 3c 32 29  3a ed 3a f4 20 52 65 61  |!(c%<<2):.:. Rea|
00010fd0  64 20 69 6d 61 67 65 20  70 61 6c 65 74 74 65 0d  |d image palette.|
00010fe0  3a a2 10 e7 43 6c 65 61  72 46 69 6c 65 20 8c 0d  |:...ClearFile ..|
00010ff0  3a ac 28 20 4f 75 74 3d  ae 28 43 6c 65 61 72 53  |:.( Out=.(ClearS|
00011000  61 76 65 24 29 3a f4 20  4f 70 65 6e 20 43 6c 65  |ave$):. Open Cle|
00011010  61 72 20 66 69 6c 65 0d  3a b6 6b 20 f2 6f 73 74  |ar file.:.k .ost|
00011020  72 69 6e 67 28 4f 75 74  2c 22 54 72 61 6e 73 6c  |ring(Out,"Transl|
00011030  61 74 6f 72 22 29 3a f2  6f 62 66 28 4f 75 74 2c  |ator"):.obf(Out,|
00011040  30 29 3a f2 6f 77 6c 66  28 4f 75 74 2c 74 76 65  |0):.owlf(Out,tve|
00011050  72 73 69 6f 6e 25 29 3a  f2 6f 77 6c 66 28 4f 75  |rsion%):.owlf(Ou|
00011060  74 2c 4f 75 74 58 25 29  3a f2 6f 77 6c 66 28 4f  |t,OutX%):.owlf(O|
00011070  75 74 2c 4f 75 74 59 25  29 3a f4 20 48 65 61 64  |ut,OutY%):. Head|
00011080  65 72 0d 3a c0 7a 20 e7  47 72 65 79 52 67 62 20  |er.:.z .GreyRgb |
00011090  8c 20 f2 6f 77 6c 66 28  4f 75 74 2c 38 29 3a e3  |. .owlf(Out,8):.|
000110a0  20 63 25 3d 30 20 b8 20  32 35 35 3a f2 6f 74 6c  | c%=0 . 255:.otl|
000110b0  66 28 4f 75 74 2c 63 25  84 63 25 3c 3c 38 84 63  |f(Out,c%.c%<<8.c|
000110c0  25 3c 3c 31 36 29 3a ed  20 8b 20 f2 6f 77 6c 66  |%<<16):. . .owlf|
000110d0  28 4f 75 74 2c 49 6d 67  42 69 74 73 25 29 3a f4  |(Out,ImgBits%):.|
000110e0  20 42 70 70 20 61 6e 64  20 67 72 65 79 70 61 6c  | Bpp and greypal|
000110f0  20 69 66 20 67 72 65 79  20 52 47 42 0d 3a ca 71  | if grey RGB.:.q|
00011100  20 e7 49 6d 67 42 69 74  73 25 3c 3d 38 20 8c 20  | .ImgBits%<=8 . |
00011110  e3 20 63 25 3d 30 20 b8  20 32 5e 49 6d 67 42 69  |. c%=0 . 2^ImgBi|
00011120  74 73 25 2d 31 3a 72 67  62 25 3d 74 72 75 65 70  |ts%-1:rgb%=truep|
00011130  61 6c 25 21 28 63 25 3c  3c 32 29 3a f2 6f 74 62  |al%!(c%<<2):.otb|
00011140  66 28 4f 75 74 2c 72 67  62 25 29 3a ed 3a f4 20  |f(Out,rgb%):.:. |
00011150  53 65 74 20 70 61 6c 65  74 74 65 20 74 6f 20 27  |Set palette to '|
00011160  74 72 75 65 27 20 70 61  6c 65 74 74 65 0d 3a d4  |true' palette.:.|
00011170  5e 20 f2 76 61 72 28 22  63 6c 66 68 22 2c 4f 75  |^ .var("clfh",Ou|
00011180  74 29 3a f2 76 61 72 28  22 63 6c 66 70 22 2c 8f  |t):.var("clfp",.|
00011190  23 4f 75 74 29 3a f2 76  61 72 28 22 63 6c 67 72  |#Out):.var("clgr|
000111a0  22 2c 47 72 65 79 52 67  62 29 3a f4 20 49 6e 66  |",GreyRgb):. Inf|
000111b0  6f 72 6d 20 63 6c 65 61  72 20 77 72 69 74 65 72  |orm clear writer|
000111c0  20 6f 6e 20 6f 75 74 66  69 6c 65 0d 3a de 35 20  | on outfile.:.5 |
000111d0  62 79 74 65 73 25 3d 4f  75 74 58 25 2a 4f 75 74  |bytes%=OutX%*Out|
000111e0  59 25 3a e7 49 6d 67 42  69 74 73 25 3e 38 20 8c  |Y%:.ImgBits%>8 .|
000111f0  20 62 79 74 65 73 25 3d  33 2a 62 79 74 65 73 25  | bytes%=3*bytes%|
00011200  0d 3a e8 90 20 c8 99 20  22 58 4f 53 5f 41 72 67  |.:.. .. "XOS_Arg|
00011210  73 22 2c 36 2c 4f 75 74  2c 62 79 74 65 73 25 2b  |s",6,Out,bytes%+|
00011220  8f 23 4f 75 74 20 b8 20  3b 66 25 3a e7 66 25 80  |.#Out . ;f%:.f%.|
00011230  31 20 8c 20 d9 23 4f 75  74 3a 43 6c 65 61 72 46  |1 . .#Out:ClearF|
00011240  69 6c 65 3d a3 3a c8 99  20 22 4f 53 5f 46 69 6c  |ile=.:.. "OS_Fil|
00011250  65 22 2c 36 2c 43 6c 65  61 72 53 61 76 65 24 3a  |e",6,ClearSave$:|
00011260  f2 65 72 72 6f 72 28 2d  31 2c 22 4e 6f 20 72 6f  |.error(-1,"No ro|
00011270  6f 6d 20 66 6f 72 20 43  6c 65 61 72 20 66 69 6c  |om for Clear fil|
00011280  65 20 6f 6e 20 64 69 73  63 20 21 22 29 3a 3d a3  |e on disc !"):=.|
00011290  0d 3a f2 20 cc 20 f2 76  61 72 28 22 63 6c 66 68  |.:. . .var("clfh|
000112a0  22 2c 30 29 3a f4 20 43  6c 65 61 72 20 6f 66 66  |",0):. Clear off|
000112b0  0d 3a fc 05 cd 0d 3b 06  37 f2 75 6e 70 61 63 6b  |.:....;.7.unpack|
000112c0  5f 70 68 61 73 65 28 74  79 70 65 24 2c 31 29 3a  |_phase(type$,1):|
000112d0  f4 20 45 78 65 63 75 74  65 20 66 69 6e 61 6c 20  |. Execute final |
000112e0  75 6e 70 61 63 6b 20 70  68 61 73 65 0d 3b 10 10  |unpack phase.;..|
000112f0  e7 43 6c 65 61 72 46 69  6c 65 20 8c 0d 3b 1a a9  |.ClearFile ..;..|
00011300  20 43 6c 65 61 72 46 69  6c 65 3d a3 3a d9 23 4f  | ClearFile=.:.#O|
00011310  75 74 3a e7 a4 76 61 72  28 22 63 6c 66 68 22 29  |ut:..var("clfh")|
00011320  3d 30 20 8c 20 c8 99 20  22 4f 53 5f 46 69 6c 65  |=0 . .. "OS_File|
00011330  22 2c 36 2c 43 6c 65 61  72 53 61 76 65 24 3a f2  |",6,ClearSave$:.|
00011340  65 72 72 6f 72 28 2d 31  2c 22 45 72 72 6f 72 20  |error(-1,"Error |
00011350  64 75 72 69 6e 67 20 6f  75 74 70 75 74 20 74 6f  |during output to|
00011360  20 43 6c 65 61 72 20 66  69 6c 65 20 3a 20 22 2b  | Clear file : "+|
00011370  a4 73 74 72 69 6e 67 28  a4 76 61 72 28 22 65 72  |.string(.var("er|
00011380  72 6f 22 29 2b 34 29 29  3a f4 20 52 65 6d 6f 76  |ro")+4)):. Remov|
00011390  65 20 43 6c 65 61 72 20  66 69 6c 65 20 69 66 20  |e Clear file if |
000113a0  65 72 72 6f 72 0d 3b 24  05 cd 0d 3b 2e 06 3d b9  |error.;$...;..=.|
000113b0  0d 3b 38 05 20 0d 3b 42  20 dd f2 75 6e 70 61 63  |.;8. .;B ..unpac|
000113c0  6b 5f 70 68 61 73 65 28  74 79 70 65 24 2c 70 68  |k_phase(type$,ph|
000113d0  61 73 65 25 29 0d 3b 4c  35 f4 20 45 78 65 63 75  |ase%).;L5. Execu|
000113e0  74 65 73 20 75 6e 70 61  63 6b 20 70 68 61 73 65  |tes unpack phase|
000113f0  2c 20 62 6c 61 6e 6b 73  20 73 63 72 65 65 6e 20  |, blanks screen |
00011400  69 66 20 65 6e 61 62 6c  65 64 0d 3b 56 2d f2 76  |if enabled.;V-.v|
00011410  61 72 28 22 70 68 61 73  22 2c 70 68 61 73 65 25  |ar("phas",phase%|
00011420  29 3a f4 20 53 65 74 20  75 6e 70 61 63 6b 69 6e  |):. Set unpackin|
00011430  67 20 70 68 61 73 65 0d  3b 60 2b 24 64 75 6d 25  |g phase.;`+$dum%|
00011440  3d c0 74 79 70 65 24 2b  22 20 20 20 20 22 2c 34  |=.type$+"    ",4|
00011450  29 3a f4 20 54 79 70 65  20 74 6f 20 75 6e 70 61  |):. Type to unpa|
00011460  63 6b 0d 3b 6a 3d e7 42  6c 61 6e 6b 69 6e 67 20  |ck.;j=.Blanking |
00011470  8c 20 c8 99 20 22 54 72  61 6e 73 6c 61 74 6f 72  |. .. "Translator|
00011480  5f 56 69 64 65 6f 44 4d  41 22 2c 30 3a f4 20 42  |_VideoDMA",0:. B|
00011490  6c 61 6e 6b 20 69 66 20  65 6e 61 62 6c 65 64 0d  |lank if enabled.|
000114a0  3b 74 37 c8 99 20 22 54  72 61 6e 73 6c 61 74 6f  |;t7.. "Translato|
000114b0  72 5f 55 6e 70 61 63 6b  22 2c 21 64 75 6d 25 3a  |r_Unpack",!dum%:|
000114c0  f4 20 45 78 65 63 75 74  65 20 75 6e 70 61 63 6b  |. Execute unpack|
000114d0  20 70 68 61 73 65 0d 3b  7e 41 e7 42 6c 61 6e 6b  | phase.;~A.Blank|
000114e0  69 6e 67 20 8c 20 c8 99  20 22 54 72 61 6e 73 6c  |ing . .. "Transl|
000114f0  61 74 6f 72 5f 56 69 64  65 6f 44 4d 41 22 2c 31  |ator_VideoDMA",1|
00011500  3a f4 20 52 65 2d 65 6e  61 62 6c 65 20 69 66 20  |:. Re-enable if |
00011510  62 6c 61 6e 6b 65 64 0d  3b 88 3f e7 70 68 61 73  |blanked.;.?.phas|
00011520  65 25 3c 3e 31 20 8c 20  72 65 73 75 6c 74 25 3d  |e%<>1 . result%=|
00011530  30 20 8b 20 72 65 73 75  6c 74 25 3d a4 76 61 72  |0 . result%=.var|
00011540  28 22 72 65 73 75 22 29  3a f4 20 52 65 73 75 6c  |("resu"):. Resul|
00011550  74 20 63 6f 64 65 0d 3b  92 10 c8 8e 20 72 65 73  |t code.;.... res|
00011560  75 6c 74 25 20 ca 0d 3b  9c 13 20 c9 20 30 20 3a  |ult% ..;.. . 0 :|
00011570  20 f4 20 41 6c 6c 20 4f  4b 0d 3b a6 56 20 c9 20  | . All OK.;.V . |
00011580  31 2c 32 2c 33 20 3a 20  f2 65 72 72 6f 72 28 2d  |1,2,3 : .error(-|
00011590  31 2c 22 46 69 6c 65 20  69 73 20 74 6f 6f 20 73  |1,"File is too s|
000115a0  68 6f 72 74 20 21 20 49  6d 61 67 65 20 6d 61 79  |hort ! Image may|
000115b0  20 62 65 20 63 6f 72 72  75 70 74 65 64 20 21 22  | be corrupted !"|
000115c0  29 3a f4 20 4f 75 74 20  6f 66 20 64 61 74 61 0d  |):. Out of data.|
000115d0  3b b0 6e 20 c9 20 31 36  20 3a 20 f2 65 72 72 6f  |;.n . 16 : .erro|
000115e0  72 28 2d 31 2c 22 45 72  72 6f 72 20 69 6e 20 54  |r(-1,"Error in T|
000115f0  49 46 46 20 66 69 6c 65  20 3a 20 73 74 72 69 70  |IFF file : strip|
00011600  28 73 29 20 6d 69 73 73  69 6e 67 20 21 20 49 6d  |(s) missing ! Im|
00011610  61 67 65 20 6d 61 79 20  62 65 20 63 6f 72 72 75  |age may be corru|
00011620  70 74 65 64 20 21 22 29  3a f4 20 4f 75 74 20 6f  |pted !"):. Out o|
00011630  66 20 54 49 46 46 20 73  74 72 69 70 73 0d 3b ba  |f TIFF strips.;.|
00011640  63 20 7f 20 3a 20 f2 65  72 72 6f 72 28 2d 31 2c  |c . : .error(-1,|
00011650  22 53 6f 6d 65 20 6d 79  73 74 65 72 69 6f 75 73  |"Some mysterious|
00011660  20 65 72 72 6f 72 20 23  22 2b c3 72 65 73 75 6c  | error #"+.resul|
00011670  74 25 2b 22 6f 63 63 75  72 65 64 20 21 20 49 6d  |t%+"occured ! Im|
00011680  61 67 65 20 6d 61 79 20  62 65 20 63 6f 72 72 75  |age may be corru|
00011690  70 74 65 64 20 21 22 29  3a f4 20 48 75 68 20 3f  |pted !"):. Huh ?|
000116a0  0d 3b c4 05 cb 0d 3b ce  05 e1 0d 3b d8 05 20 0d  |.;....;....;.. .|
000116b0  3b e2 1b dd f2 73 65 74  5f 70 61 6c 65 74 74 65  |;....set_palette|
000116c0  28 70 61 6c 65 74 74 65  25 29 0d 3b ec 2a f4 20  |(palette%).;.*. |
000116d0  53 65 74 73 20 61 20 70  61 6c 65 74 74 65 20 61  |Sets a palette a|
000116e0  63 63 6f 72 64 69 6e 67  20 74 6f 20 70 61 6c 65  |ccording to pale|
000116f0  74 74 65 25 0d 3b f6 1a  f4 20 20 30 20 2d 20 44  |tte%.;...  0 - D|
00011700  65 73 6b 74 6f 70 20 70  61 6c 65 74 74 65 0d 3c  |esktop palette.<|
00011710  00 2e f4 20 20 31 20 2d  20 49 6d 61 67 65 27 73  |...  1 - Image's|
00011720  20 6f 77 6e 20 70 61 6c  65 74 74 65 20 28 77 68  | own palette (wh|
00011730  65 6e 20 70 6f 73 73 69  62 6c 65 29 0d 3c 0a 08  |en possible).<..|
00011740  ea 20 63 25 0d 3c 14 11  c8 8e 20 70 61 6c 65 74  |. c%.<.... palet|
00011750  74 65 25 20 ca 0d 3c 1e  72 20 c9 20 30 20 3a 20  |te% ..<.r . 0 : |
00011760  e7 a4 6c 6f 67 32 42 50  50 3d 33 20 8c 20 c8 99  |..log2BPP=3 . ..|
00011770  20 22 54 72 61 6e 73 6c  61 74 6f 72 5f 50 61 6c  | "Translator_Pal|
00011780  65 74 74 65 22 2c 38 2c  64 75 6d 25 2c 32 3a c8  |ette",8,dum%,2:.|
00011790  99 20 22 54 72 61 6e 73  6c 61 74 6f 72 5f 53 65  |. "Translator_Se|
000117a0  74 50 61 6c 65 74 74 65  22 2c 32 35 36 2c 64 75  |tPalette",256,du|
000117b0  6d 25 20 8b 20 c8 99 20  57 53 65 74 50 25 2c 2c  |m% . .. WSetP%,,|
000117c0  77 69 6d 70 70 61 6c 0d  3c 28 6b 20 c9 20 31 20  |wimppal.<(k . 1 |
000117d0  3a 20 e3 20 63 25 3d 30  20 b8 20 53 68 6f 77 50  |: . c%=0 . ShowP|
000117e0  61 6c 25 28 30 29 2d 31  3a 64 75 6d 25 21 28 63  |al%(0)-1:dum%!(c|
000117f0  25 3c 3c 32 29 3d 53 68  6f 77 50 61 6c 25 28 63  |%<<2)=ShowPal%(c|
00011800  25 2b 31 29 3a ed 3a c8  99 20 22 54 72 61 6e 73  |%+1):.:.. "Trans|
00011810  6c 61 74 6f 72 5f 53 65  74 50 61 6c 65 74 74 65  |lator_SetPalette|
00011820  22 2c 53 68 6f 77 50 61  6c 25 28 30 29 2c 64 75  |",ShowPal%(0),du|
00011830  6d 25 0d 3c 32 05 cb 0d  3c 3c 05 e1 0d 3c 46 05  |m%.<2...<<...<F.|
00011840  20 0d 3c 50 1b dd f2 73  74 64 70 61 6c 28 f8 20  | .<P...stdpal(. |
00011850  50 61 6c 25 28 29 2c 62  70 70 25 29 0d 3c 5a 48  |Pal%(),bpp%).<ZH|
00011860  f4 20 53 65 74 73 20 61  20 70 61 6c 65 74 74 65  |. Sets a palette|
00011870  20 74 6f 20 73 74 61 6e  64 61 72 64 20 41 72 63  | to standard Arc|
00011880  68 69 6d 65 64 65 73 20  32 2c 34 2c 31 36 20 6f  |himedes 2,4,16 o|
00011890  72 20 32 35 36 20 63 6f  6c 6f 75 72 20 70 61 6c  |r 256 colour pal|
000118a0  65 74 74 65 0d 3c 64 0b  ea 20 63 25 2c 70 25 0d  |ette.<d.. c%,p%.|
000118b0  3c 6e 44 c8 99 20 22 54  72 61 6e 73 6c 61 74 6f  |<nD.. "Translato|
000118c0  72 5f 50 61 6c 65 74 74  65 22 2c 62 70 70 25 2c  |r_Palette",bpp%,|
000118d0  64 75 6d 25 2c 32 3a f4  20 43 61 6c 63 75 6c 61  |dum%,2:. Calcula|
000118e0  74 65 20 73 74 61 6e 64  61 72 64 20 70 61 6c 65  |te standard pale|
000118f0  74 74 65 0d 3c 78 15 70  25 3d 64 75 6d 25 3a f4  |tte.<x.p%=dum%:.|
00011900  20 50 6f 69 6e 74 65 72  0d 3c 82 28 e3 20 63 25  | Pointer.<.(. c%|
00011910  3d 31 20 b8 20 32 5e 62  70 70 25 3a 50 61 6c 25  |=1 . 2^bpp%:Pal%|
00011920  28 63 25 29 3d 21 70 25  3a 70 25 2b 3d 34 3a ed  |(c%)=!p%:p%+=4:.|
00011930  0d 3c 8c 10 50 61 6c 25  28 30 29 3d 62 70 70 25  |.<..Pal%(0)=bpp%|
00011940  0d 3c 96 05 e1 0d 3c a0  05 20 0d 3c aa 21 dd f2  |.<....<.. .<.!..|
00011950  67 72 65 79 70 61 6c 28  f8 20 50 61 6c 25 28 29  |greypal(. Pal%()|
00011960  2c 62 70 70 25 2c 64 69  72 25 29 0d 3c b4 39 f4  |,bpp%,dir%).<.9.|
00011970  20 53 65 74 73 20 61 20  70 61 6c 65 74 74 65 20  | Sets a palette |
00011980  74 6f 20 67 72 65 79 73  63 61 6c 65 20 66 6f 72  |to greyscale for|
00011990  20 62 70 70 25 20 62 69  74 73 20 70 65 72 20 70  | bpp% bits per p|
000119a0  69 78 65 6c 0d 3c be 3f  f4 20 64 69 72 25 3d 31  |ixel.<.?. dir%=1|
000119b0  20 67 69 76 65 73 20 62  6c 61 63 6b 20 74 6f 20  | gives black to |
000119c0  77 68 69 74 65 2c 20 64  69 72 25 3d 2d 31 20 67  |white, dir%=-1 g|
000119d0  69 76 65 73 20 77 68 69  74 65 20 74 6f 20 62 6c  |ives white to bl|
000119e0  61 63 6b 0d 3c c8 15 ea  20 63 6f 6c 73 25 2c 73  |ack.<... cols%,s|
000119f0  74 65 70 2c 69 2c 63 25  0d 3c d2 27 63 6f 6c 73  |tep,i,c%.<.'cols|
00011a00  25 3d 32 5e 62 70 70 25  3a 73 74 65 70 3d 32 35  |%=2^bpp%:step=25|
00011a10  35 2f 28 63 6f 6c 73 25  2d 31 29 3a 69 3d 30 0d  |5/(cols%-1):i=0.|
00011a20  3c dc 25 e7 64 69 72 25  3d 2d 31 20 8c 20 73 74  |<.%.dir%=-1 . st|
00011a30  65 70 3d 2d 73 74 65 70  3a 69 3d 32 35 35 20 8b  |ep=-step:i=255 .|
00011a40  20 69 3d 30 0d 3c e6 37  e3 20 63 25 3d 31 20 b8  | i=0.<.7. c%=1 .|
00011a50  20 32 5e 62 70 70 25 3a  50 61 6c 25 28 63 25 29  | 2^bpp%:Pal%(c%)|
00011a60  3d 69 20 84 20 69 3c 3c  38 20 84 20 69 3c 3c 31  |=i . i<<8 . i<<1|
00011a70  36 3a 69 2b 3d 73 74 65  70 3a ed 0d 3c f0 10 50  |6:i+=step:..<..P|
00011a80  61 6c 25 28 30 29 3d 62  70 70 25 0d 3c fa 05 e1  |al%(0)=bpp%.<...|
00011a90  0d 3d 04 05 20 0d 3d 0e  34 dd f2 6d 6f 64 65 5f  |.=.. .=.4..mode_|
00011aa0  69 6e 66 6f 28 6d 6f 64  65 25 2c f8 20 77 69 64  |info(mode%,. wid|
00011ab0  74 68 25 2c f8 20 68 65  69 67 68 74 25 2c f8 20  |th%,. height%,. |
00011ac0  63 6f 6c 6f 75 72 73 25  29 0d 3d 18 31 f4 20 52  |colours%).=.1. R|
00011ad0  65 74 75 72 6e 73 20 69  6e 66 6f 72 6d 61 74 69  |eturns informati|
00011ae0  6f 6e 20 61 62 6f 75 74  20 61 20 70 61 72 74 69  |on about a parti|
00011af0  63 75 6c 61 72 20 6d 6f  64 65 0d 3d 22 6e 63 6f  |cular mode.="nco|
00011b00  6c 6f 75 72 73 25 3d 32  5e 28 32 5e a4 6d 6f 64  |lours%=2^(2^.mod|
00011b10  65 5f 76 61 72 28 6d 6f  64 65 25 2c 39 29 29 3a  |e_var(mode%,9)):|
00011b20  77 69 64 74 68 25 3d 31  2b a4 6d 6f 64 65 5f 76  |width%=1+.mode_v|
00011b30  61 72 28 6d 6f 64 65 25  2c 31 31 29 3a 68 65 69  |ar(mode%,11):hei|
00011b40  67 68 74 25 3d 31 2b a4  6d 6f 64 65 5f 76 61 72  |ght%=1+.mode_var|
00011b50  28 6d 6f 64 65 25 2c 31  32 29 3a f4 20 52 65 74  |(mode%,12):. Ret|
00011b60  75 72 6e 20 69 6e 66 6f  0d 3d 2c 05 e1 0d 3d 36  |urn info.=,...=6|
00011b70  05 20 0d 3d 40 17 dd f2  69 6e 76 61 6c 69 64 61  |. .=@...invalida|
00011b80  74 65 5f 73 63 72 65 65  6e 0d 3d 4a 1f f4 20 49  |te_screen.=J.. I|
00011b90  6e 76 61 6c 69 64 61 74  65 73 20 65 6e 74 69 72  |nvalidates entir|
00011ba0  65 20 73 63 72 65 65 6e  0d 3d 54 3d c8 99 20 57  |e screen.=T=.. W|
00011bb0  46 6f 72 63 65 25 2c 2d  31 2c 30 2c 30 2c 53 63  |Force%,-1,0,0,Sc|
00011bc0  72 57 25 2c 53 63 72 48  25 3a f4 20 46 6f 72 63  |rW%,ScrH%:. Forc|
00011bd0  65 20 72 65 64 72 61 77  20 77 68 6f 6c 65 20 73  |e redraw whole s|
00011be0  63 72 65 65 6e 0d 3d 5e  05 e1 0d 3d 68 05 20 0d  |creen.=^...=h. .|
00011bf0  3d 72 16 dd f2 69 6e 76  61 6c 69 64 61 74 65 5f  |=r...invalidate_|
00011c00  69 6d 61 67 65 0d 3d 7c  17 f4 20 49 6e 76 61 6c  |image.=|.. Inval|
00011c10  69 64 61 74 65 73 20 69  6d 61 67 65 0d 3d 86 28  |idates image.=.(|
00011c20  49 6d 67 3d a3 3a 46 72  65 71 43 61 6c 63 3d a3  |Img=.:FreqCalc=.|
00011c30  3a f4 20 52 65 73 65 74  20 69 6d 61 67 65 20 66  |:. Reset image f|
00011c40  6c 61 67 73 0d 3d 90 05  e1 0d 3d 9a 05 20 0d 3d  |lags.=....=.. .=|
00011c50  a4 19 dd f2 6e 65 77 5f  77 69 6e 64 6f 77 28 68  |....new_window(h|
00011c60  61 6e 64 6c 65 25 29 0d  3d ae 20 f4 20 52 65 64  |andle%).=. . Red|
00011c70  72 61 77 73 20 65 6e 74  69 72 65 20 77 69 6e 64  |raws entire wind|
00011c80  6f 77 20 61 72 65 61 0d  3d b8 1d f2 72 65 64 72  |ow area.=...redr|
00011c90  61 77 5f 77 69 6e 64 6f  77 28 68 61 6e 64 6c 65  |aw_window(handle|
00011ca0  25 2c b9 29 0d 3d c2 05  e1 0d 3d cc 05 20 0d 3d  |%,.).=....=.. .=|
00011cb0  d6 22 dd f2 72 65 64 72  61 77 5f 77 69 6e 64 6f  |."..redraw_windo|
00011cc0  77 28 68 61 6e 64 6c 65  25 2c 66 6f 72 63 65 29  |w(handle%,force)|
00011cd0  0d 3d e0 28 f4 20 52 65  64 72 61 77 73 20 77 69  |.=.(. Redraws wi|
00011ce0  6e 64 6f 77 20 77 69 74  68 20 68 61 6e 64 6c 65  |ndow with handle|
00011cf0  20 68 61 6e 64 6c 65 25  0d 3d ea 3c f4 20 49 66  | handle%.=.<. If|
00011d00  20 66 6f 72 63 65 3d 54  52 55 45 20 74 68 65 20  | force=TRUE the |
00011d10  77 69 6e 64 6f 77 27 73  20 65 6e 74 69 72 65 20  |window's entire |
00011d20  77 6f 72 6b 20 61 72 65  61 20 69 73 20 75 70 64  |work area is upd|
00011d30  61 74 65 64 0d 3d f4 2b  ea 20 6d 6f 72 65 25 2c  |ated.=.+. more%,|
00011d40  6e 78 25 2c 6e 79 25 2c  76 77 25 2c 76 68 25 2c  |nx%,ny%,vw%,vh%,|
00011d50  78 25 2c 79 25 2c 6f 78  25 2c 6f 79 25 2c 7a 0d  |x%,y%,ox%,oy%,z.|
00011d60  3d fe 45 ea 20 78 31 25  2c 78 32 25 2c 78 33 25  |=.E. x1%,x2%,x3%|
00011d70  2c 78 34 25 2c 79 31 25  2c 79 32 25 2c 79 33 25  |,x4%,y1%,y2%,y3%|
00011d80  2c 79 34 25 2c 77 31 25  2c 77 32 25 2c 77 33 25  |,y4%,w1%,w2%,w3%|
00011d90  2c 77 34 25 2c 68 31 25  2c 68 32 25 2c 68 33 25  |,w4%,h1%,h2%,h3%|
00011da0  2c 68 34 25 0d 3e 08 28  21 62 6c 6f 63 6b 3d 68  |,h4%.>.(!block=h|
00011db0  61 6e 64 6c 65 25 3a f4  20 53 65 74 20 77 69 6e  |andle%:. Set win|
00011dc0  64 6f 77 27 73 20 68 61  6e 64 6c 65 0d 3e 12 78  |dow's handle.>.x|
00011dd0  e7 66 6f 72 63 65 20 8c  20 62 6c 6f 63 6b 21 34  |.force . block!4|
00011de0  3d 30 3a 62 6c 6f 63 6b  21 38 3d 30 3a 62 6c 6f  |=0:block!8=0:blo|
00011df0  63 6b 21 31 32 3d 26 37  46 46 46 3a 62 6c 6f 63  |ck!12=&7FFF:bloc|
00011e00  6b 21 31 36 3d 26 37 46  46 46 3a c8 99 20 57 55  |k!16=&7FFF:.. WU|
00011e10  70 64 61 74 65 57 25 2c  2c 62 6c 6f 63 6b 20 b8  |pdateW%,,block .|
00011e20  20 6d 6f 72 65 25 20 8b  20 c8 99 20 57 52 65 64  | more% . .. WRed|
00011e30  72 61 77 57 25 2c 2c 62  6c 6f 63 6b 20 b8 20 6d  |rawW%,,block . m|
00011e40  6f 72 65 25 0d 3e 1c 4a  76 77 25 3d 62 6c 6f 63  |ore%.>.Jvw%=bloc|
00011e50  6b 21 31 32 2b 58 73 74  65 70 25 2d 62 6c 6f 63  |k!12+Xstep%-bloc|
00011e60  6b 21 34 3a 76 68 25 3d  62 6c 6f 63 6b 21 31 36  |k!4:vh%=block!16|
00011e70  2b 59 73 74 65 70 25 2d  62 6c 6f 63 6b 21 38 3a  |+Ystep%-block!8:|
00011e80  f4 20 56 69 73 69 62 6c  65 20 73 69 7a 65 0d 3e  |. Visible size.>|
00011e90  26 10 c8 8e 20 68 61 6e  64 6c 65 25 20 ca 0d 3e  |&... handle% ..>|
00011ea0  30 27 20 c9 20 77 69 6e  5f 69 6d 67 25 20 3a 20  |0' . win_img% : |
00011eb0  f4 20 52 65 64 72 61 77  20 69 6d 61 67 65 20 77  |. Redraw image w|
00011ec0  69 6e 64 6f 77 0d 3e 3a  47 20 20 6e 78 25 3d 28  |indow.>:G  nx%=(|
00011ed0  62 6c 6f 63 6b 21 34 2d  62 6c 6f 63 6b 21 32 30  |block!4-block!20|
00011ee0  29 3a 6e 79 25 3d 28 62  6c 6f 63 6b 21 31 36 2d  |):ny%=(block!16-|
00011ef0  62 6c 6f 63 6b 21 32 34  29 3a f4 20 57 6f 72 6b  |block!24):. Work|
00011f00  20 61 72 65 61 20 6f 72  69 67 69 6e 0d 3e 44 3f  | area origin.>D?|
00011f10  20 20 e7 5a 6f 6f 6d 58  3e 3d 31 20 8c 20 21 61  |  .ZoomX>=1 . !a|
00011f20  72 67 25 3d 5a 6f 6f 6d  58 3a 61 72 67 25 21 38  |rg%=ZoomX:arg%!8|
00011f30  3d 31 20 8b 20 21 61 72  67 25 3d 31 3a 61 72 67  |=1 . !arg%=1:arg|
00011f40  25 21 38 3d 31 2f 5a 6f  6f 6d 58 0d 3e 4e 43 20  |%!8=1/ZoomX.>NC |
00011f50  20 e7 5a 6f 6f 6d 59 3e  3d 31 20 8c 20 61 72 67  | .ZoomY>=1 . arg|
00011f60  25 21 34 3d 5a 6f 6f 6d  59 3a 61 72 67 25 21 31  |%!4=ZoomY:arg%!1|
00011f70  32 3d 31 20 8b 20 61 72  67 25 21 34 3d 31 3a 61  |2=1 . arg%!4=1:a|
00011f80  72 67 25 21 31 32 3d 31  2f 5a 6f 6f 6d 59 0d 3e  |rg%!12=1/ZoomY.>|
00011f90  58 3c 20 20 e7 28 76 77  25 3c 3d 31 36 30 29 84  |X<  .(vw%<=160).|
00011fa0  28 76 68 25 3c 3d 31 36  30 29 20 8c 20 78 25 3d  |(vh%<=160) . x%=|
00011fb0  62 6c 6f 63 6b 21 34 3a  79 25 3d 62 6c 6f 63 6b  |block!4:y%=block|
00011fc0  21 38 20 8b 20 76 77 25  3d 30 0d 3e 62 39 20 20  |!8 . vw%=0.>b9  |
00011fd0  c8 95 20 6d 6f 72 65 25  3a e7 76 77 25 3e 30 20  |.. more%:.vw%>0 |
00011fe0  8c 20 c8 99 20 57 53 65  74 43 6f 6c 25 2c 30 3a  |. .. WSetCol%,0:|
00011ff0  c8 93 20 c8 90 20 78 25  2c 79 25 2c 76 77 25 2c  |.. .. x%,y%,vw%,|
00012000  76 68 25 0d 3e 6c 38 20  20 f2 70 6c 6f 74 5f 69  |vh%.>l8  .plot_i|
00012010  6d 61 67 65 28 6e 78 25  2c 6e 79 25 2c 30 2c 61  |mage(nx%,ny%,0,a|
00012020  72 67 25 29 3a f4 20 44  69 73 70 6c 61 79 20 69  |rg%):. Display i|
00012030  6d 61 67 65 20 73 70 72  69 74 65 0d 3e 76 35 20  |mage sprite.>v5 |
00012040  20 c8 99 20 57 47 65 74  52 25 2c 2c 62 6c 6f 63  | .. WGetR%,,bloc|
00012050  6b 20 b8 20 6d 6f 72 65  25 3a ce 3a f4 20 47 65  |k . more%:.:. Ge|
00012060  74 20 6e 65 78 74 20 72  65 63 74 61 6e 67 6c 65  |t next rectangle|
00012070  0d 3e 80 27 20 c9 20 77  69 6e 5f 7a 6f 6f 6d 25  |.>.' . win_zoom%|
00012080  20 3a 20 f4 20 52 65 64  72 61 77 20 7a 6f 6f 6d  | : . Redraw zoom|
00012090  20 77 69 6e 64 6f 77 0d  3e 8a 36 20 20 78 25 3d  | window.>.6  x%=|
000120a0  62 6c 6f 63 6b 21 34 3a  79 25 3d 62 6c 6f 63 6b  |block!4:y%=block|
000120b0  21 38 3a f4 20 56 69 73  69 62 6c 65 20 61 72 65  |!8:. Visible are|
000120c0  61 20 63 6f 6f 72 64 69  6e 61 74 65 73 0d 3e 94  |a coordinates.>.|
000120d0  21 20 20 7a 3d 5a 6f 6f  6d 57 2f 5a 6f 6f 6d 44  |!  z=ZoomW/ZoomD|
000120e0  3a f4 20 5a 6f 6f 6d 20  66 61 63 74 6f 72 0d 3e  |:. Zoom factor.>|
000120f0  9e 44 20 20 6f 78 25 3d  76 77 25 2f 32 2d 5a 6f  |.D  ox%=vw%/2-Zo|
00012100  6f 6d 57 58 25 2a 7a 2a  58 73 74 65 70 25 3a 6f  |omWX%*z*Xstep%:o|
00012110  79 25 3d 76 68 25 2f 32  2d 5a 6f 6f 6d 57 59 25  |y%=vh%/2-ZoomWY%|
00012120  2a 7a 2a 59 73 74 65 70  25 3a f4 20 4f 66 66 73  |*z*Ystep%:. Offs|
00012130  65 74 0d 3e a8 3d 20 20  6e 78 25 3d 53 70 72 57  |et.>.=  nx%=SprW|
00012140  25 2a 7a 2a 58 73 74 65  70 25 3a 6e 79 25 3d 53  |%*z*Xstep%:ny%=S|
00012150  70 72 48 25 2a 7a 2a 59  73 74 65 70 25 3a f4 20  |prH%*z*Ystep%:. |
00012160  54 6f 74 61 6c 20 65 78  74 65 72 6e 61 6c 73 0d  |Total externals.|
00012170  3e b2 38 20 20 77 31 25  3d 30 3a 77 32 25 3d 30  |>.8  w1%=0:w2%=0|
00012180  3a 77 33 25 3d 30 3a 77  34 25 3d 30 3a f4 20 4e  |:w3%=0:w4%=0:. N|
00012190  6f 20 75 6e 63 6f 76 65  72 65 64 20 62 6f 72 64  |o uncovered bord|
000121a0  65 72 73 20 79 65 74 0d  3e bc 33 20 20 e7 6f 78  |ers yet.>.3  .ox|
000121b0  25 3e 30 20 8c 20 78 31  25 3d 78 25 3a 79 31 25  |%>0 . x1%=x%:y1%|
000121c0  3d 79 25 3a 77 31 25 3d  6f 78 25 2d 58 73 74 65  |=y%:w1%=ox%-Xste|
000121d0  70 25 3a 68 31 25 3d 76  68 25 0d 3e c6 46 20 20  |p%:h1%=vh%.>.F  |
000121e0  e7 28 6f 78 25 2b 6e 78  25 29 3c 76 77 25 20 8c  |.(ox%+nx%)<vw% .|
000121f0  20 78 32 25 3d 78 25 2b  6f 78 25 2b 6e 78 25 3a  | x2%=x%+ox%+nx%:|
00012200  79 32 25 3d 79 25 3a 77  32 25 3d 76 77 25 2d 28  |y2%=y%:w2%=vw%-(|
00012210  6f 78 25 2b 6e 78 25 29  3a 68 32 25 3d 76 68 25  |ox%+nx%):h2%=vh%|
00012220  0d 3e d0 33 20 20 e7 6f  79 25 3e 30 20 8c 20 78  |.>.3  .oy%>0 . x|
00012230  33 25 3d 78 25 3a 79 33  25 3d 79 25 3a 77 33 25  |3%=x%:y3%=y%:w3%|
00012240  3d 76 77 25 3a 68 33 25  3d 6f 79 25 2d 59 73 74  |=vw%:h3%=oy%-Yst|
00012250  65 70 25 0d 3e da 46 20  20 e7 28 6f 79 25 2b 6e  |ep%.>.F  .(oy%+n|
00012260  79 25 29 3c 76 68 25 20  8c 20 78 34 25 3d 78 25  |y%)<vh% . x4%=x%|
00012270  3a 79 34 25 3d 79 25 2b  6f 79 25 2b 6e 79 25 3a  |:y4%=y%+oy%+ny%:|
00012280  77 34 25 3d 76 77 25 3a  68 34 25 3d 76 68 25 2d  |w4%=vw%:h4%=vh%-|
00012290  28 6f 79 25 2b 6e 79 25  29 0d 3e e4 48 20 20 21  |(oy%+ny%).>.H  !|
000122a0  61 72 67 25 3d 5a 6f 6f  6d 57 3a 61 72 67 25 21  |arg%=ZoomW:arg%!|
000122b0  38 3d 5a 6f 6f 6d 44 3a  61 72 67 25 21 34 3d 5a  |8=ZoomD:arg%!4=Z|
000122c0  6f 6f 6d 57 3a 61 72 67  25 21 31 32 3d 5a 6f 6f  |oomW:arg%!12=Zoo|
000122d0  6d 44 3a f4 20 5a 6f 6f  6d 20 66 61 63 74 6f 72  |mD:. Zoom factor|
000122e0  73 0d 3e ee 2e 20 20 6e  78 25 3d 78 25 2b 6f 78  |s.>..  nx%=x%+ox|
000122f0  25 3a 6e 79 25 3d 79 25  2b 6f 79 25 3a f4 20 50  |%:ny%=y%+oy%:. P|
00012300  6c 6f 74 20 63 6f 6f 72  64 69 6e 61 74 65 73 0d  |lot coordinates.|
00012310  3e f8 2d 20 20 c8 95 20  6d 6f 72 65 25 3a e7 77  |>.-  .. more%:.w|
00012320  31 25 3e 30 20 8c 20 c8  93 20 c8 90 20 78 31 25  |1%>0 . .. .. x1%|
00012330  2c 79 31 25 2c 77 31 25  2c 68 31 25 0d 3f 02 24  |,y1%,w1%,h1%.?.$|
00012340  20 20 e7 77 32 25 3e 30  20 8c 20 c8 93 20 c8 90  |  .w2%>0 . .. ..|
00012350  20 78 32 25 2c 79 32 25  2c 77 32 25 2c 68 32 25  | x2%,y2%,w2%,h2%|
00012360  0d 3f 0c 24 20 20 e7 77  33 25 3e 30 20 8c 20 c8  |.?.$  .w3%>0 . .|
00012370  93 20 c8 90 20 78 33 25  2c 79 33 25 2c 77 33 25  |. .. x3%,y3%,w3%|
00012380  2c 68 33 25 0d 3f 16 24  20 20 e7 77 34 25 3e 30  |,h3%.?.$  .w4%>0|
00012390  20 8c 20 c8 93 20 c8 90  20 78 34 25 2c 79 34 25  | . .. .. x4%,y4%|
000123a0  2c 77 34 25 2c 68 34 25  0d 3f 20 38 20 20 f2 70  |,w4%,h4%.? 8  .p|
000123b0  6c 6f 74 5f 69 6d 61 67  65 28 6e 78 25 2c 6e 79  |lot_image(nx%,ny|
000123c0  25 2c 30 2c 61 72 67 25  29 3a f4 20 44 69 73 70  |%,0,arg%):. Disp|
000123d0  6c 61 79 20 69 6d 61 67  65 20 73 70 72 69 74 65  |lay image sprite|
000123e0  0d 3f 2a 35 20 20 c8 99  20 57 47 65 74 52 25 2c  |.?*5  .. WGetR%,|
000123f0  2c 62 6c 6f 63 6b 20 b8  20 6d 6f 72 65 25 3a ce  |,block . more%:.|
00012400  3a f4 20 47 65 74 20 6e  65 78 74 20 72 65 63 74  |:. Get next rect|
00012410  61 6e 67 6c 65 0d 3f 34  05 cb 0d 3f 3e 05 e1 0d  |angle.?4...?>...|
00012420  3f 48 05 20 0d 3f 52 1f  dd f2 6f 70 65 6e 5f 77  |?H. .?R...open_w|
00012430  69 6e 64 6f 77 28 68 61  6e 64 6c 65 25 2c 69 6e  |indow(handle%,in|
00012440  66 6f 29 0d 3f 5c 26 f4  20 4f 70 65 6e 73 20 77  |fo).?\&. Opens w|
00012450  69 6e 64 6f 77 20 77 69  74 68 20 68 61 6e 64 6c  |indow with handl|
00012460  65 20 68 61 6e 64 6c 65  25 0d 3f 66 4b f4 20 49  |e handle%.?fK. I|
00012470  66 20 69 6e 66 6f 3e 30  20 74 68 65 6e 20 69 6e  |f info>0 then in|
00012480  66 6f 20 69 73 20 72 65  61 64 79 20 61 74 20 69  |fo is ready at i|
00012490  6e 66 6f 2c 20 65 6c 73  65 20 67 65 74 20 69 6e  |nfo, else get in|
000124a0  66 6f 2c 20 69 66 20 2d  31 20 70 6f 70 20 61 74  |fo, if -1 pop at|
000124b0  20 74 6f 70 0d 3f 70 1b  ea 20 62 25 2c 70 78 25  | top.?p.. b%,px%|
000124c0  2c 70 79 25 2c 5f 25 2c  78 73 25 2c 79 73 25 0d  |,py%,_%,xs%,ys%.|
000124d0  3f 7a 0d e7 69 6e 66 6f  3e 30 20 8c 0d 3f 84 27  |?z..info>0 ..?.'|
000124e0  20 e3 20 62 25 3d 30 20  b8 20 33 31 20 88 20 34  | . b%=0 . 31 . 4|
000124f0  3a 62 6c 6f 63 6b 21 62  25 3d 69 6e 66 6f 21 62  |:block!b%=info!b|
00012500  25 3a ed 0d 3f 8e 26 cc  20 21 62 6c 6f 63 6b 3d  |%:..?.&. !block=|
00012510  68 61 6e 64 6c 65 25 3a  c8 99 20 57 47 65 74 57  |handle%:.. WGetW|
00012520  53 25 2c 2c 62 6c 6f 63  6b 0d 3f 98 38 20 e7 69  |S%,,block.?.8 .i|
00012530  6e 66 6f 3d 2d 31 20 8c  20 62 6c 6f 63 6b 21 32  |nfo=-1 . block!2|
00012540  38 3d 2d 31 3a f4 20 50  6f 70 20 75 70 20 61 74  |8=-1:. Pop up at|
00012550  20 74 6f 70 20 69 66 20  72 65 71 75 65 73 74 65  | top if requeste|
00012560  64 0d 3f a2 c8 20 e7 68  61 6e 64 6c 65 25 3c 3e  |d.?.. .handle%<>|
00012570  77 69 6e 5f 69 6d 67 25  20 8c 20 f2 6d 6f 75 73  |win_img% . .mous|
00012580  65 28 70 78 25 2c 70 79  25 2c 5f 25 29 3a 78 73  |e(px%,py%,_%):xs|
00012590  25 3d 62 6c 6f 63 6b 21  31 32 2d 62 6c 6f 63 6b  |%=block!12-block|
000125a0  21 34 3a 79 73 25 3d 62  6c 6f 63 6b 21 31 36 2d  |!4:ys%=block!16-|
000125b0  62 6c 6f 63 6b 21 38 3a  62 6c 6f 63 6b 21 34 3d  |block!8:block!4=|
000125c0  70 78 25 2d 36 34 3a 62  6c 6f 63 6b 21 38 3d 70  |px%-64:block!8=p|
000125d0  79 25 2d 79 73 25 2b 31  36 3a 62 6c 6f 63 6b 21  |y%-ys%+16:block!|
000125e0  31 32 3d 62 6c 6f 63 6b  21 34 2b 78 73 25 3a 62  |12=block!4+xs%:b|
000125f0  6c 6f 63 6b 21 31 36 3d  62 6c 6f 63 6b 21 38 2b  |lock!16=block!8+|
00012600  79 73 25 3a f4 20 50 6f  70 20 75 70 20 61 74 20  |ys%:. Pop up at |
00012610  6d 6f 75 73 65 20 69 66  20 6e 6f 74 20 69 6d 61  |mouse if not ima|
00012620  67 65 20 77 69 6e 64 6f  77 0d 3f ac 05 cd 0d 3f  |ge window.?....?|
00012630  b6 15 c8 99 20 57 4f 70  65 6e 57 25 2c 2c 62 6c  |.... WOpenW%,,bl|
00012640  6f 63 6b 0d 3f c0 05 e1  0d 3f ca 05 20 0d 3f d4  |ock.?....?.. .?.|
00012650  1b dd f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |...close_window(|
00012660  68 61 6e 64 6c 65 25 29  0d 3f de 27 f4 20 43 6c  |handle%).?.'. Cl|
00012670  6f 73 65 73 20 77 69 6e  64 6f 77 20 77 69 74 68  |oses window with|
00012680  20 68 61 6e 64 6c 65 20  68 61 6e 64 6c 65 25 0d  | handle handle%.|
00012690  3f e8 25 21 62 6c 6f 63  6b 3d 68 61 6e 64 6c 65  |?.%!block=handle|
000126a0  25 3a c8 99 20 57 43 6c  6f 73 65 57 25 2c 2c 62  |%:.. WCloseW%,,b|
000126b0  6c 6f 63 6b 0d 3f f2 05  e1 0d 3f fc 05 20 0d 40  |lock.?....?.. .@|
000126c0  06 11 dd a4 70 6f 6c 6c  28 6d 61 73 6b 25 29 0d  |....poll(mask%).|
000126d0  40 10 40 f4 20 52 65 74  75 72 6e 73 20 70 6f 6c  |@.@. Returns pol|
000126e0  6c 20 72 65 61 73 6f 6e  20 63 6f 64 65 2c 20 6d  |l reason code, m|
000126f0  61 73 6b 69 6e 67 20 77  69 74 68 20 6d 61 73 6b  |asking with mask|
00012700  25 2c 20 64 61 74 61 20  61 74 20 70 6f 6c 6c 0d  |%, data at poll.|
00012710  40 1a 10 ea 20 72 65 61  73 6f 6e 63 6f 64 65 0d  |@... reasoncode.|
00012720  40 24 25 c8 99 20 57 50  6f 6c 6c 25 2c 6d 61 73  |@$%.. WPoll%,mas|
00012730  6b 25 2c 70 6f 6c 6c 20  b8 20 72 65 61 73 6f 6e  |k%,poll . reason|
00012740  63 6f 64 65 0d 40 2e 0f  3d 72 65 61 73 6f 6e 63  |code.@..=reasonc|
00012750  6f 64 65 0d 40 38 05 20  0d 40 42 10 dd f2 69 6e  |ode.@8. .@B...in|
00012760  69 74 69 61 6c 69 73 65  0d 40 4c 19 f4 20 49 6e  |itialise.@L.. In|
00012770  69 74 69 61 6c 69 73 65  73 20 70 72 6f 67 72 61  |itialises progra|
00012780  6d 0d 40 56 3e c8 99 20  22 57 69 6d 70 5f 52 65  |m.@V>.. "Wimp_Re|
00012790  61 64 50 61 6c 65 74 74  65 22 2c 2c 77 69 6d 70  |adPalette",,wimp|
000127a0  70 61 6c 3a f4 20 52 65  61 64 20 63 75 72 72 65  |pal:. Read curre|
000127b0  6e 74 20 57 49 4d 50 20  70 61 6c 65 74 74 65 0d  |nt WIMP palette.|
000127c0  40 60 37 f2 68 6f 75 72  5f 6f 6e 3a f2 69 6e 69  |@`7.hour_on:.ini|
000127d0  74 5f 6d 6f 64 75 6c 65  3a f2 68 6f 75 72 5f 6f  |t_module:.hour_o|
000127e0  66 66 3a f4 20 49 6e 69  74 69 61 6c 69 73 65 20  |ff:. Initialise |
000127f0  6d 6f 64 75 6c 65 0d 40  6a 44 c8 99 20 22 4f 53  |module.@jD.. "OS|
00012800  5f 43 68 65 63 6b 4d 6f  64 65 56 61 6c 69 64 22  |_CheckModeValid"|
00012810  2c 31 38 20 b8 20 5f 25  3a 4d 75 6c 74 69 53 79  |,18 . _%:MultiSy|
00012820  6e 63 3d 28 5f 25 3c 3e  2d 31 29 3a f4 20 4d 6f  |nc=(_%<>-1):. Mo|
00012830  6e 69 74 6f 72 20 74 79  70 65 0d 40 74 30 61 70  |nitor type.@t0ap|
00012840  70 6c 6e 61 6d 65 24 3d  22 54 72 61 6e 73 6c 61  |plname$="Transla|
00012850  74 6f 72 22 3a f4 20 4e  61 6d 65 20 6f 66 20 61  |tor":. Name of a|
00012860  70 70 6c 69 63 61 74 69  6f 6e 0d 40 7e 46 c8 99  |pplication.@~F..|
00012870  20 22 57 69 6d 70 5f 49  6e 69 74 69 61 6c 69 73  | "Wimp_Initialis|
00012880  65 22 2c 32 30 30 2c 26  34 42 35 33 34 31 35 34  |e",200,&4B534154|
00012890  2c 61 70 70 6c 6e 61 6d  65 24 20 b8 20 76 65 72  |,applname$ . ver|
000128a0  73 69 6f 6e 2c 54 61 73  6b 48 61 6e 64 6c 65 25  |sion,TaskHandle%|
000128b0  0d 40 88 39 e7 76 65 72  73 69 6f 6e 3c 32 30 30  |.@.9.version<200|
000128c0  20 8c 20 85 20 31 2c 22  49 20 63 61 6e 6e 6f 74  | . . 1,"I cannot|
000128d0  20 77 6f 72 6b 20 77 69  74 68 20 57 49 4d 50 20  | work with WIMP |
000128e0  70 72 65 2d 32 2e 30 30  22 0d 40 92 36 57 25 3d  |pre-2.00".@.6W%=|
000128f0  a4 73 77 69 5f 74 6f 5f  6e 72 28 22 57 69 6d 70  |.swi_to_nr("Wimp|
00012900  5f 49 6e 69 74 69 61 6c  69 73 65 22 29 3a f4 20  |_Initialise"):. |
00012910  42 61 73 65 20 53 57 49  20 6e 75 6d 62 65 72 0d  |Base SWI number.|
00012920  40 9c e4 57 43 72 65 61  74 65 57 25 3d 57 25 2b  |@..WCreateW%=W%+|
00012930  31 3a 57 43 72 65 61 74  65 49 25 3d 57 25 2b 32  |1:WCreateI%=W%+2|
00012940  3a 57 44 65 6c 65 74 65  57 25 3d 57 25 2b 33 3a  |:WDeleteW%=W%+3:|
00012950  57 4f 70 65 6e 57 25 3d  57 25 2b 35 3a 57 43 6c  |WOpenW%=W%+5:WCl|
00012960  6f 73 65 57 25 3d 57 25  2b 36 3a 57 50 6f 6c 6c  |oseW%=W%+6:WPoll|
00012970  25 3d 57 25 2b 37 3a 57  52 65 64 72 61 77 57 25  |%=W%+7:WRedrawW%|
00012980  3d 57 25 2b 38 3a 57 55  70 64 61 74 65 57 25 3d  |=W%+8:WUpdateW%=|
00012990  57 25 2b 39 3a 57 47 65  74 52 25 3d 57 25 2b 31  |W%+9:WGetR%=W%+1|
000129a0  30 3a 57 47 65 74 57 53  25 3d 57 25 2b 31 31 3a  |0:WGetWS%=W%+11:|
000129b0  57 47 65 74 57 49 25 3d  57 25 2b 31 32 3a 57 53  |WGetWI%=W%+12:WS|
000129c0  65 74 49 53 25 3d 57 25  2b 31 33 3a 57 47 65 74  |etIS%=W%+13:WGet|
000129d0  49 53 25 3d 57 25 2b 31  34 3a 57 47 65 74 50 49  |IS%=W%+14:WGetPI|
000129e0  25 3d 57 25 2b 31 35 3a  57 44 72 61 67 42 25 3d  |%=W%+15:WDragB%=|
000129f0  57 25 2b 31 36 3a 57 46  6f 72 63 65 25 3d 57 25  |W%+16:WForce%=W%|
00012a00  2b 31 37 0d 40 a6 b3 57  53 65 74 43 61 25 3d 57  |+17.@..WSetCa%=W|
00012a10  25 2b 31 38 3a 57 43 72  65 61 74 65 4d 25 3d 57  |%+18:WCreateM%=W|
00012a20  25 2b 32 30 3a 57 44 65  63 6f 64 65 4d 25 3d 57  |%+20:WDecodeM%=W|
00012a30  25 2b 32 31 3a 57 53 65  74 45 25 3d 57 25 2b 32  |%+21:WSetE%=W%+2|
00012a40  33 3a 57 4c 6f 61 64 54  25 3d 57 25 2b 32 37 3a  |3:WLoadT%=W%+27:|
00012a50  57 52 65 70 6f 72 74 25  3d 57 25 2b 33 31 3a 57  |WReport%=W%+31:W|
00012a60  53 65 74 4d 25 3d 57 25  2b 33 35 3a 57 53 65 74  |SetM%=W%+35:WSet|
00012a70  50 25 3d 57 25 2b 33 36  3a 57 52 65 61 64 50 25  |P%=W%+36:WReadP%|
00012a80  3d 57 25 2b 33 37 3a 57  53 65 74 43 6f 6c 25 3d  |=W%+37:WSetCol%=|
00012a90  57 25 2b 33 38 3a 57 53  65 6e 64 4d 73 67 25 3d  |W%+38:WSendMsg%=|
00012aa0  57 25 2b 33 39 3a 57 43  72 65 61 74 65 53 4d 25  |W%+39:WCreateSM%|
00012ab0  3d 57 25 2b 34 30 0d 40  b0 7d 4f 53 53 70 6f 70  |=W%+40.@.}OSSpop|
00012ac0  25 3d a4 73 77 69 5f 74  6f 5f 6e 72 28 22 4f 53  |%=.swi_to_nr("OS|
00012ad0  5f 53 70 72 69 74 65 4f  70 22 29 3a 4f 53 52 65  |_SpriteOp"):OSRe|
00012ae0  61 64 56 56 25 3d a4 73  77 69 5f 74 6f 5f 6e 72  |adVV%=.swi_to_nr|
00012af0  28 22 4f 53 5f 52 65 61  64 56 64 75 56 61 72 69  |("OS_ReadVduVari|
00012b00  61 62 6c 65 73 22 29 3a  4f 53 52 65 61 64 4d 56  |ables"):OSReadMV|
00012b10  25 3d a4 73 77 69 5f 74  6f 5f 6e 72 28 22 4f 53  |%=.swi_to_nr("OS|
00012b20  5f 52 65 61 64 4d 6f 64  65 56 61 72 69 61 62 6c  |_ReadModeVariabl|
00012b30  65 22 29 0d 40 ba 33 c8  99 20 57 52 65 61 64 50  |e").@.3.. WReadP|
00012b40  25 2c 2c 77 69 6d 70 70  61 6c 3a f4 20 52 65 61  |%,,wimppal:. Rea|
00012b50  64 20 63 75 72 72 65 6e  74 20 57 49 4d 50 20 70  |d current WIMP p|
00012b60  61 6c 65 74 74 65 0d 40  c4 3d 74 66 25 3d 37 3a  |alette.@.=tf%=7:|
00012b70  74 62 25 3d 32 3a 77 66  25 3d 37 3a 77 62 25 3d  |tb%=2:wf%=7:wb%=|
00012b80  30 3a 73 69 25 3d 31 3a  73 6f 25 3d 33 3a f4 20  |0:si%=1:so%=3:. |
00012b90  57 69 6e 64 6f 77 2f 6d  65 6e 75 20 63 6f 6c 6f  |Window/menu colo|
00012ba0  75 72 73 0d 40 ce 94 21  62 6c 6f 63 6b 3d 2d 31  |urs.@..!block=-1|
00012bb0  3a 62 6c 6f 63 6b 21 34  3d 30 3a 62 6c 6f 63 6b  |:block!4=0:block|
00012bc0  21 38 3d 30 3a 62 6c 6f  63 6b 21 31 32 3d 36 38  |!8=0:block!12=68|
00012bd0  3a 62 6c 6f 63 6b 21 31  36 3d 36 38 3a 62 6c 6f  |:block!16=68:blo|
00012be0  63 6b 21 32 30 3d 26 32  37 30 30 33 30 30 32 3a  |ck!20=&27003002:|
00012bf0  24 28 62 6c 6f 63 6b 2b  32 34 29 3d 22 21 74 72  |$(block+24)="!tr|
00012c00  61 6e 73 6c 61 74 72 22  3a c8 99 20 57 43 72 65  |anslatr":.. WCre|
00012c10  61 74 65 49 25 2c 2c 62  6c 6f 63 6b 20 b8 20 49  |ateI%,,block . I|
00012c20  69 63 6f 6e 62 61 72 25  3a f4 20 49 63 6f 6e 62  |iconbar%:. Iconb|
00012c30  61 72 20 69 63 6f 6e 0d  40 d8 1c f4 20 4c 6f 61  |ar icon.@... Loa|
00012c40  64 20 73 70 72 69 74 65  73 20 66 6f 72 20 69 63  |d sprites for ic|
00012c50  6f 6e 73 0d 40 e2 48 21  69 63 6f 6e 73 70 72 69  |ons.@.H!iconspri|
00012c60  74 65 73 3d 32 30 34 38  3a 69 63 6f 6e 73 70 72  |tes=2048:iconspr|
00012c70  69 74 65 73 21 34 3d 30  3a 69 63 6f 6e 73 70 72  |ites!4=0:iconspr|
00012c80  69 74 65 73 21 38 3d 31  36 3a 69 63 6f 6e 73 70  |ites!8=16:iconsp|
00012c90  72 69 74 65 73 21 31 32  3d 31 36 0d 40 ec 3c c8  |rites!12=16.@.<.|
00012ca0  99 20 4f 53 53 70 6f 70  25 2c 31 30 2b 32 35 36  |. OSSpop%,10+256|
00012cb0  2c 69 63 6f 6e 73 70 72  69 74 65 73 2c 22 3c 54  |,iconsprites,"<T|
00012cc0  72 61 6e 73 6c 61 74 6f  72 24 44 69 72 3e 2e 53  |ranslator$Dir>.S|
00012cd0  70 72 69 74 65 73 22 0d  40 f6 14 f4 20 4c 6f 61  |prites".@... Loa|
00012ce0  64 20 74 65 6d 70 6c 61  74 65 73 0d 41 00 38 c8  |d templates.A.8.|
00012cf0  99 20 22 57 69 6d 70 5f  4f 70 65 6e 54 65 6d 70  |. "Wimp_OpenTemp|
00012d00  6c 61 74 65 22 2c 2c 22  3c 54 72 61 6e 73 6c 61  |late",,"<Transla|
00012d10  74 6f 72 24 44 69 72 3e  2e 54 65 6d 70 6c 61 74  |tor$Dir>.Templat|
00012d20  65 73 22 0d 41 0a 3c 69  63 3d 69 63 6f 6e 64 61  |es".A.<ic=iconda|
00012d30  74 61 3a 69 65 3d 69 63  6f 6e 64 65 6e 64 3a f4  |ta:ie=icondend:.|
00012d40  20 49 6e 64 69 72 65 63  74 65 64 20 69 63 6f 6e  | Indirected icon|
00012d50  20 64 61 74 61 20 77 6f  72 6b 73 70 61 63 65 0d  | data workspace.|
00012d60  41 14 3a 24 64 75 6d 25  3d 22 73 61 76 65 22 3a  |A.:$dum%="save":|
00012d70  c8 99 20 57 4c 6f 61 64  54 25 2c 2c 77 69 6e 64  |.. WLoadT%,,wind|
00012d80  6f 77 2c 69 63 2c 69 65  2c 2d 31 2c 64 75 6d 25  |ow,ic,ie,-1,dum%|
00012d90  2c 30 20 b8 20 2c 2c 69  63 0d 41 1e 23 77 69 6e  |,0 . ,,ic.A.#win|
00012da0  64 6f 77 21 28 38 38 2b  32 34 29 3d 31 3a f4 20  |dow!(88+24)=1:. |
00012db0  57 49 4d 50 20 61 72 65  61 70 74 72 0d 41 28 24  |WIMP areaptr.A($|
00012dc0  c8 99 20 57 43 72 65 61  74 65 57 25 2c 2c 77 69  |.. WCreateW%,,wi|
00012dd0  6e 64 6f 77 20 b8 20 77  69 6e 5f 66 69 6c 65 25  |ndow . win_file%|
00012de0  0d 41 32 3f 53 41 56 73  6e 25 3d a4 69 63 6f 6e  |.A2?SAVsn%=.icon|
00012df0  61 64 64 72 28 77 69 6e  5f 66 69 6c 65 25 2c 30  |addr(win_file%,0|
00012e00  29 3a 53 41 56 66 6e 25  3d a4 69 63 6f 6e 61 64  |):SAVfn%=.iconad|
00012e10  64 72 28 77 69 6e 5f 66  69 6c 65 25 2c 31 29 0d  |dr(win_file%,1).|
00012e20  41 3c 3a 24 64 75 6d 25  3d 22 69 6e 66 6f 22 3a  |A<:$dum%="info":|
00012e30  c8 99 20 57 4c 6f 61 64  54 25 2c 2c 77 69 6e 64  |.. WLoadT%,,wind|
00012e40  6f 77 2c 69 63 2c 69 65  2c 2d 31 2c 64 75 6d 25  |ow,ic,ie,-1,dum%|
00012e50  2c 30 20 b8 20 2c 2c 69  63 0d 41 46 24 c8 99 20  |,0 . ,,ic.AF$.. |
00012e60  57 43 72 65 61 74 65 57  25 2c 2c 77 69 6e 64 6f  |WCreateW%,,windo|
00012e70  77 20 b8 20 77 69 6e 5f  69 6e 66 6f 25 0d 41 50  |w . win_info%.AP|
00012e80  3f 24 64 75 6d 25 3d 22  66 69 6c 65 74 79 70 65  |?$dum%="filetype|
00012e90  73 22 3a c8 99 20 57 4c  6f 61 64 54 25 2c 2c 77  |s":.. WLoadT%,,w|
00012ea0  69 6e 64 6f 77 2c 69 63  2c 69 65 2c 2d 31 2c 64  |indow,ic,ie,-1,d|
00012eb0  75 6d 25 2c 30 20 b8 20  2c 2c 69 63 0d 41 5a 25  |um%,0 . ,,ic.AZ%|
00012ec0  c8 99 20 57 43 72 65 61  74 65 57 25 2c 2c 77 69  |.. WCreateW%,,wi|
00012ed0  6e 64 6f 77 20 b8 20 77  69 6e 5f 66 69 6c 65 74  |ndow . win_filet|
00012ee0  25 0d 41 64 3f 24 64 75  6d 25 3d 22 69 6d 61 67  |%.Ad?$dum%="imag|
00012ef0  65 69 6e 66 6f 22 3a c8  99 20 57 4c 6f 61 64 54  |einfo":.. WLoadT|
00012f00  25 2c 2c 77 69 6e 64 6f  77 2c 69 63 2c 69 65 2c  |%,,window,ic,ie,|
00012f10  2d 31 2c 64 75 6d 25 2c  30 20 b8 20 2c 2c 69 63  |-1,dum%,0 . ,,ic|
00012f20  0d 41 6e 26 c8 99 20 57  43 72 65 61 74 65 57 25  |.An&.. WCreateW%|
00012f30  2c 2c 77 69 6e 64 6f 77  20 b8 20 77 69 6e 5f 69  |,,window . win_i|
00012f40  6d 69 6e 66 6f 25 0d 41  78 85 77 25 3d 77 69 6e  |minfo%.Ax.w%=win|
00012f50  5f 69 6d 69 6e 66 6f 25  3a 49 4d 49 66 6e 25 3d  |_iminfo%:IMIfn%=|
00012f60  a4 69 63 6f 6e 61 64 64  72 28 77 25 2c 31 29 3a  |.iconaddr(w%,1):|
00012f70  49 4d 49 69 74 25 3d a4  69 63 6f 6e 61 64 64 72  |IMIit%=.iconaddr|
00012f80  28 77 25 2c 33 29 3a 49  4d 49 69 6e 25 3d a4 69  |(w%,3):IMIin%=.i|
00012f90  63 6f 6e 61 64 64 72 28  77 25 2c 35 29 3a 49 4d  |conaddr(w%,5):IM|
00012fa0  49 69 66 25 3d a4 69 63  6f 6e 61 64 64 72 28 77  |Iif%=.iconaddr(w|
00012fb0  25 2c 37 29 3a 49 4d 49  63 6f 25 3d a4 69 63 6f  |%,7):IMIco%=.ico|
00012fc0  6e 61 64 64 72 28 77 25  2c 39 29 0d 41 82 7b 49  |naddr(w%,9).A.{I|
00012fd0  4d 49 77 68 25 3d a4 69  63 6f 6e 61 64 64 72 28  |MIwh%=.iconaddr(|
00012fe0  77 25 2c 31 31 29 3a 49  4d 49 73 63 25 3d a4 69  |w%,11):IMIsc%=.i|
00012ff0  63 6f 6e 61 64 64 72 28  77 25 2c 31 33 29 3a 49  |conaddr(w%,13):I|
00013000  4d 49 62 70 25 3d a4 69  63 6f 6e 61 64 64 72 28  |MIbp%=.iconaddr(|
00013010  77 25 2c 31 35 29 3a 49  4d 49 73 6d 25 3d a4 69  |w%,15):IMIsm%=.i|
00013020  63 6f 6e 61 64 64 72 28  77 25 2c 31 37 29 3a 49  |conaddr(w%,17):I|
00013030  4d 49 72 6e 25 3d a4 69  63 6f 6e 61 64 64 72 28  |MIrn%=.iconaddr(|
00013040  77 25 2c 31 39 29 0d 41  8c 3d 24 64 75 6d 25 3d  |w%,19).A.=$dum%=|
00013050  22 72 67 62 62 69 74 73  22 3a c8 99 20 57 4c 6f  |"rgbbits":.. WLo|
00013060  61 64 54 25 2c 2c 77 69  6e 64 6f 77 2c 69 63 2c  |adT%,,window,ic,|
00013070  69 65 2c 2d 31 2c 64 75  6d 25 2c 30 20 b8 20 2c  |ie,-1,dum%,0 . ,|
00013080  2c 69 63 0d 41 96 43 e3  20 69 25 3d 33 20 b8 20  |,ic.A.C. i%=3 . |
00013090  35 3a 61 70 25 3d 77 69  6e 64 6f 77 2b 38 38 2b  |5:ap%=window+88+|
000130a0  69 25 2a 33 32 2b 32 34  3a 21 61 70 25 3d 69 63  |i%*32+24:!ap%=ic|
000130b0  6f 6e 73 70 72 69 74 65  73 3a ed 3a f4 20 41 72  |onsprites:.:. Ar|
000130c0  65 61 70 74 72 73 0d 41  a0 27 c8 99 20 57 43 72  |eaptrs.A.'.. WCr|
000130d0  65 61 74 65 57 25 2c 2c  77 69 6e 64 6f 77 20 b8  |eateW%,,window .|
000130e0  20 77 69 6e 5f 72 67 62  62 69 74 73 25 0d 41 aa  | win_rgbbits%.A.|
000130f0  45 24 64 75 6d 25 3d 22  69 6d 61 67 65 22 3a 49  |E$dum%="image":I|
00013100  4d 57 74 74 25 3d 69 63  3a c8 99 20 57 4c 6f 61  |MWtt%=ic:.. WLoa|
00013110  64 54 25 2c 2c 77 69 6e  64 6f 77 2c 69 63 2c 69  |dT%,,window,ic,i|
00013120  65 2c 2d 31 2c 64 75 6d  25 2c 30 20 b8 20 2c 2c  |e,-1,dum%,0 . ,,|
00013130  69 63 0d 41 b4 2a 77 69  6e 64 6f 77 3f 33 35 3d  |ic.A.*window?35=|
00013140  26 46 46 3a f4 20 54 72  61 6e 73 70 61 72 65 6e  |&FF:. Transparen|
00013150  74 20 62 61 63 6b 67 72  6f 75 6e 64 0d 41 be 23  |t background.A.#|
00013160  c8 99 20 57 43 72 65 61  74 65 57 25 2c 2c 77 69  |.. WCreateW%,,wi|
00013170  6e 64 6f 77 20 b8 20 77  69 6e 5f 69 6d 67 25 0d  |ndow . win_img%.|
00013180  41 c8 3a 24 64 75 6d 25  3d 22 7a 6f 6f 6d 22 3a  |A.:$dum%="zoom":|
00013190  c8 99 20 57 4c 6f 61 64  54 25 2c 2c 77 69 6e 64  |.. WLoadT%,,wind|
000131a0  6f 77 2c 69 63 2c 69 65  2c 2d 31 2c 64 75 6d 25  |ow,ic,ie,-1,dum%|
000131b0  2c 30 20 b8 20 2c 2c 69  63 0d 41 d2 24 c8 99 20  |,0 . ,,ic.A.$.. |
000131c0  57 43 72 65 61 74 65 57  25 2c 2c 77 69 6e 64 6f  |WCreateW%,,windo|
000131d0  77 20 b8 20 77 69 6e 5f  7a 6f 6f 6d 25 0d 41 dc  |w . win_zoom%.A.|
000131e0  1b c8 99 20 22 57 69 6d  70 5f 43 6c 6f 73 65 54  |... "Wimp_CloseT|
000131f0  65 6d 70 6c 61 74 65 22  0d 41 e6 19 f4 20 4c 6f  |emplate".A... Lo|
00013200  61 64 20 6d 65 6e 75 20  73 74 72 75 63 74 75 72  |ad menu structur|
00013210  65 0d 41 f0 3c c8 99 20  22 4f 53 5f 46 69 6c 65  |e.A.<.. "OS_File|
00013220  22 2c 35 2c 22 3c 54 72  61 6e 73 6c 61 74 6f 72  |",5,"<Translator|
00013230  24 44 69 72 3e 2e 4d 65  6e 75 53 74 72 75 63 74  |$Dir>.MenuStruct|
00013240  22 20 b8 20 2c 2c 2c 2c  73 6c 65 6e 25 0d 41 fa  |" . ,,,,slen%.A.|
00013250  17 de 20 6d 65 6e 75 73  74 72 75 63 74 25 20 73  |.. menustruct% s|
00013260  6c 65 6e 25 0d 42 04 3e  c8 99 20 22 4f 53 5f 46  |len%.B.>.. "OS_F|
00013270  69 6c 65 22 2c 32 35 35  2c 22 3c 54 72 61 6e 73  |ile",255,"<Trans|
00013280  6c 61 74 6f 72 24 44 69  72 3e 2e 4d 65 6e 75 53  |lator$Dir>.MenuS|
00013290  74 72 75 63 74 22 2c 6d  65 6e 75 73 74 72 75 63  |truct",menustruc|
000132a0  74 25 0d 42 0e 3a c8 99  20 22 4f 53 5f 46 69 6c  |t%.B.:.. "OS_Fil|
000132b0  65 22 2c 35 2c 22 3c 54  72 61 6e 73 6c 61 74 6f  |e",5,"<Translato|
000132c0  72 24 44 69 72 3e 2e 4d  65 6e 75 44 61 74 61 22  |r$Dir>.MenuData"|
000132d0  20 b8 20 2c 2c 2c 2c 64  6c 65 6e 25 0d 42 18 15  | . ,,,,dlen%.B..|
000132e0  de 20 6d 65 6e 75 64 61  74 61 25 20 64 6c 65 6e  |. menudata% dlen|
000132f0  25 0d 42 22 3a c8 99 20  22 4f 53 5f 46 69 6c 65  |%.B":.. "OS_File|
00013300  22 2c 32 35 35 2c 22 3c  54 72 61 6e 73 6c 61 74  |",255,"<Translat|
00013310  6f 72 24 44 69 72 3e 2e  4d 65 6e 75 44 61 74 61  |or$Dir>.MenuData|
00013320  22 2c 6d 65 6e 75 64 61  74 61 25 0d 42 2c 27 e3  |",menudata%.B,'.|
00013330  20 61 25 3d 6d 65 6e 75  73 74 72 75 63 74 25 2b  | a%=menustruct%+|
00013340  34 20 b8 20 61 25 2b 73  6c 65 6e 25 2d 38 20 88  |4 . a%+slen%-8 .|
00013350  20 34 0d 42 36 bd 64 25  3d 21 61 25 3a e7 28 64  | 4.B6.d%=!a%:.(d|
00013360  25 80 26 46 46 46 30 30  30 30 30 29 3c 3e 26 44  |%.&FFF00000)<>&D|
00013370  45 41 30 30 30 30 30 20  8b 20 6b 25 3d 28 64 25  |EA00000 . k%=(d%|
00013380  3e 3e 31 36 29 80 26 46  3a 64 25 3d 64 25 80 26  |>>16).&F:d%=d%.&|
00013390  46 46 46 46 3a e7 6b 25  3d 31 20 8c 20 21 61 25  |FFFF:.k%=1 . !a%|
000133a0  3d 64 25 2b 6d 65 6e 75  73 74 72 75 63 74 25 20  |=d%+menustruct% |
000133b0  8b 20 e7 6b 25 3d 32 20  8c 20 21 61 25 3d 64 25  |. .k%=2 . !a%=d%|
000133c0  2b 6d 65 6e 75 64 61 74  61 25 20 8b 20 e7 64 25  |+menudata% . .d%|
000133d0  3d 31 20 8c 20 21 61 25  3d 77 69 6e 5f 66 69 6c  |=1 . !a%=win_fil|
000133e0  65 25 20 8b 20 e7 64 25  3d 32 20 8c 20 21 61 25  |e% . .d%=2 . !a%|
000133f0  3d 77 69 6e 5f 72 67 62  62 69 74 73 25 20 8b 20  |=win_rgbbits% . |
00013400  21 61 25 3d 77 69 6e 5f  69 6d 69 6e 66 6f 25 0d  |!a%=win_iminfo%.|
00013410  42 40 05 ed 0d 42 4a 94  56 61 72 73 3d 8e 22 3c  |B@...BJ.Vars=."<|
00013420  54 72 61 6e 73 6c 61 74  6f 72 24 44 69 72 3e 2e  |Translator$Dir>.|
00013430  4d 65 6e 75 56 61 72 73  22 3a c8 95 20 ac c5 23  |MenuVars":.. ..#|
00013440  56 61 72 73 3a 76 6e 24  3d be 23 56 61 72 73 3a  |Vars:vn$=.#Vars:|
00013450  64 25 3d 9a 23 56 61 72  73 3a 76 76 24 3d be 23  |d%=.#Vars:vv$=.#|
00013460  56 61 72 73 3a 64 25 3d  9a 23 56 61 72 73 3a e7  |Vars:d%=.#Vars:.|
00013470  c0 76 6e 24 2c 32 29 3d  22 69 64 22 20 8c 20 76  |.vn$,2)="id" . v|
00013480  76 25 3d 6d 65 6e 75 64  61 74 61 25 2b bb 76 76  |v%=menudata%+.vv|
00013490  24 20 8b 20 76 76 25 3d  6d 65 6e 75 73 74 72 75  |$ . vv%=menustru|
000134a0  63 74 25 2b bb 76 76 24  0d 42 54 2d 64 25 3d a0  |ct%+.vv$.BT-d%=.|
000134b0  28 22 46 4e 63 76 61 72  28 22 2b 76 6e 24 2b 22  |("FNcvar("+vn$+"|
000134c0  2c 22 2b c3 76 76 25 2b  22 29 22 29 3a ce 3a d9  |,"+.vv%+")"):.:.|
000134d0  23 56 61 72 73 0d 42 5e  26 6d 65 6e 75 6d 61 69  |#Vars.B^&menumai|
000134e0  6e 25 3d 6d 65 6e 75 73  74 72 75 63 74 25 2b 21  |n%=menustruct%+!|
000134f0  6d 65 6e 75 73 74 72 75  63 74 25 0d 42 68 14 f4  |menustruct%.Bh..|
00013500  20 49 6e 69 74 20 76 61  72 69 61 62 6c 65 73 0d  | Init variables.|
00013510  42 72 5e 53 61 76 65 4b  69 6e 64 24 3d 22 22 3a  |Br^SaveKind$="":|
00013520  49 6d 67 3d a3 3a 53 61  76 65 50 61 6c 3d b9 3a  |Img=.:SavePal=.:|
00013530  5a 6f 6f 6d 58 3d 31 3a  5a 6f 6f 6d 59 3d 31 3a  |ZoomX=1:ZoomY=1:|
00013540  49 6d 61 67 65 53 70 72  24 3d 22 69 6d 61 67 65  |ImageSpr$="image|
00013550  22 3a 46 6c 65 6e 25 3d  30 3a 4c 6f 61 64 24 3d  |":Flen%=0:Load$=|
00013560  22 22 3a 53 61 6d 65 4c  65 61 66 3d a3 0d 42 7c  |"":SameLeaf=..B||
00013570  8c 44 61 74 61 53 61 76  65 52 65 66 25 3d 2d 31  |.DataSaveRef%=-1|
00013580  3a 44 61 74 61 4c 6f 61  64 52 65 66 25 3d a3 3a  |:DataLoadRef%=.:|
00013590  59 4d 75 6c 25 3d 31 3a  59 44 69 76 25 3d 31 3a  |YMul%=1:YDiv%=1:|
000135a0  58 4d 75 6c 25 3d 31 3a  58 44 69 76 25 3d 31 3a  |XMul%=1:XDiv%=1:|
000135b0  43 6c 65 61 72 46 69 6c  65 3d a3 3a 53 61 76 65  |ClearFile=.:Save|
000135c0  53 70 72 24 3d 22 49 6d  61 67 65 22 3a 53 61 76  |Spr$="Image":Sav|
000135d0  65 43 6c 65 61 72 24 3d  22 43 6c 65 61 72 22 3a  |eClear$="Clear":|
000135e0  53 70 72 53 61 76 65 24  3d 22 22 3a 43 6c 65 61  |SprSave$="":Clea|
000135f0  72 53 61 76 65 24 3d 22  22 0d 42 86 88 46 31 25  |rSave$="".B..F1%|
00013600  3d 30 3a 46 32 25 3d 30  3a 53 70 72 57 25 3d 30  |=0:F2%=0:SprW%=0|
00013610  3a 53 70 72 48 25 3d 30  3a 49 6d 61 67 65 4e 72  |:SprH%=0:ImageNr|
00013620  25 3d 31 3a 41 75 74 6f  4d 6f 64 65 3d b9 3a 41  |%=1:AutoMode=.:A|
00013630  75 74 6f 50 61 6c 3d b9  3a 43 75 72 72 4d 6f 64  |utoPal=.:CurrMod|
00013640  65 25 3d 2d 31 3a 45 72  72 53 70 72 65 61 64 3d  |e%=-1:ErrSpread=|
00013650  31 3a 4d 6f 64 65 53 65  74 3d 30 3a 55 73 65 72  |1:ModeSet=0:User|
00013660  4d 6f 64 65 53 65 74 25  28 29 3d 30 2c 30 2c 38  |ModeSet%()=0,0,8|
00013670  2c 31 32 2c 31 35 3a 41  75 74 6f 5a 6f 6f 6d 3d  |,12,15:AutoZoom=|
00013680  a3 0d 42 90 96 42 6c 61  63 6b 57 68 69 74 65 3d  |..B..BlackWhite=|
00013690  a3 3a 54 72 61 6e 73 54  61 62 49 64 3d a3 3a 49  |.:TransTabId=.:I|
000136a0  6d 67 4d 6f 64 65 25 3d  30 3a 47 49 46 53 63 61  |mgMode%=0:GIFSca|
000136b0  6e 3d a3 3a 52 47 42 62  69 74 73 25 3d 26 30 38  |n=.:RGBbits%=&08|
000136c0  30 38 30 38 3a 42 6c 61  6e 6b 69 6e 67 3d a3 3a  |0808:Blanking=.:|
000136d0  5a 69 67 5a 61 67 3d b9  3a 49 6e 76 65 72 74 52  |ZigZag=.:InvertR|
000136e0  47 42 3d a3 3a 46 72 65  71 43 61 6c 63 3d a3 3a  |GB=.:FreqCalc=.:|
000136f0  4f 75 74 4d 6f 64 65 3d  31 3a 4f 75 74 50 61 6c  |OutMode=1:OutPal|
00013700  3d 31 3a 49 6e 46 69 6c  65 24 3d 22 22 3a 49 6e  |=1:InFile$="":In|
00013710  54 79 70 65 25 3d 30 0d  42 9a 6c 50 65 72 63 65  |Type%=0.B.lPerce|
00013720  6e 74 3d b9 3a 41 63 74  4c 6f 61 64 3d a3 3a 41  |nt=.:ActLoad=.:A|
00013730  63 74 52 6f 74 61 74 65  3d a3 3a 56 69 65 77 4d  |ctRotate=.:ViewM|
00013740  6f 64 65 3d a3 3a 50 72  65 4d 6f 64 65 3d eb 3a  |ode=.:PreMode=.:|
00013750  5a 6f 6f 6d 57 69 6e 3d  a3 3a 5a 6f 6f 6d 44 3d  |ZoomWin=.:ZoomD=|
00013760  34 3a 5a 6f 6f 6d 57 3d  5a 6f 6f 6d 44 3a 44 69  |4:ZoomW=ZoomD:Di|
00013770  76 49 73 49 6e 58 3d a3  3a 44 69 76 49 73 49 6e  |vIsInX=.:DivIsIn|
00013780  59 3d a3 0d 42 a4 73 4f  75 74 58 25 3d 31 3a 4f  |Y=..B.sOutX%=1:O|
00013790  75 74 59 25 3d 31 3a 4f  75 74 4d 6f 64 65 25 3d  |utY%=1:OutMode%=|
000137a0  31 35 3a 47 61 6d 6d 61  46 3d 31 3a 47 61 6d 6d  |15:GammaF=1:Gamm|
000137b0  61 3d a3 3a 42 6c 61 63  6b 46 3d 30 3a 42 6c 61  |a=.:BlackF=0:Bla|
000137c0  63 6b 3d a3 3a 52 61 6e  67 65 3d a3 3a 52 61 6e  |ck=.:Range=.:Ran|
000137d0  67 65 4d 69 6e 25 3d 30  3a 52 61 6e 67 65 4d 61  |geMin%=0:RangeMa|
000137e0  78 25 3d 30 3a 46 72 6f  6d 25 3d 31 3a 47 72 65  |x%=0:From%=1:Gre|
000137f0  79 52 67 62 3d a3 0d 42  ae a4 42 5f 6e 75 6c 6c  |yRgb=..B..B_null|
00013800  25 3d 30 3a 42 5f 61 72  65 61 25 3d 31 3a 42 5f  |%=0:B_area%=1:B_|
00013810  73 70 72 69 74 65 25 3d  32 3a 42 5f 73 70 72 69  |sprite%=2:B_spri|
00013820  6d 67 25 3d 33 3a 42 5f  69 6d 67 74 6f 70 25 3d  |mg%=3:B_imgtop%=|
00013830  34 3a 42 5f 69 6e 66 69  6c 65 25 3d 35 3a 42 5f  |4:B_infile%=5:B_|
00013840  70 69 78 62 75 66 31 25  3d 36 3a 42 5f 70 69 78  |pixbuf1%=6:B_pix|
00013850  62 75 66 32 25 3d 37 3a  42 5f 70 69 78 76 61 6c  |buf2%=7:B_pixval|
00013860  25 3d 38 3a 42 5f 70 69  78 73 63 61 6c 65 64 25  |%=8:B_pixscaled%|
00013870  3d 39 3a 42 5f 6c 7a 77  74 61 62 6c 65 25 3d 31  |=9:B_lzwtable%=1|
00013880  30 3a 42 5f 73 74 72 6f  66 66 25 3d 31 31 3a 42  |0:B_stroff%=11:B|
00013890  5f 66 73 65 72 72 25 3d  31 32 0d 42 b8 30 e7 a4  |_fserr%=12.B.0..|
000138a0  6c 6f 61 64 5f 73 74 61  74 75 73 3a f4 20 4c 6f  |load_status:. Lo|
000138b0  61 64 20 64 65 66 61 75  6c 74 20 73 74 61 74 75  |ad default statu|
000138c0  73 20 28 69 66 20 61 6e  79 29 0d 42 c2 05 e1 0d  |s (if any).B....|
000138d0  42 cc 05 20 0d 42 d6 17  dd a4 63 76 61 72 28 f8  |B.. .B....cvar(.|
000138e0  20 76 61 72 25 2c 76 61  6c 25 29 0d 42 e0 2b f4  | var%,val%).B.+.|
000138f0  20 43 72 65 61 74 65 73  20 6e 65 77 20 76 61 72  | Creates new var|
00013900  69 61 62 6c 65 20 76 61  72 25 2c 20 76 61 6c 75  |iable var%, valu|
00013910  65 20 76 61 6c 25 0d 42  ea 10 76 61 72 25 3d 76  |e val%.B..var%=v|
00013920  61 6c 25 3a 3d 30 0d 42  f4 05 20 0d 42 fe 19 dd  |al%:=0.B.. .B...|
00013930  a4 69 63 6f 6e 61 64 64  72 28 77 69 6e 25 2c 69  |.iconaddr(win%,i|
00013940  63 6f 25 29 0d 43 08 2c  f4 20 52 65 74 75 72 6e  |co%).C.,. Return|
00013950  73 20 69 6e 64 69 72 65  63 74 65 64 20 69 63 6f  |s indirected ico|
00013960  6e 27 73 20 64 61 74 61  20 61 64 64 72 65 73 73  |n's data address|
00013970  0d 43 12 3e 21 62 6c 6f  63 6b 3d 77 69 6e 25 3a  |.C.>!block=win%:|
00013980  62 6c 6f 63 6b 21 34 3d  69 63 6f 25 3a c8 99 20  |block!4=ico%:.. |
00013990  57 47 65 74 49 53 25 2c  2c 62 6c 6f 63 6b 3a f4  |WGetIS%,,block:.|
000139a0  20 47 65 74 20 69 63 6f  6e 20 69 6e 66 6f 0d 43  | Get icon info.C|
000139b0  1c 0d 3d 62 6c 6f 63 6b  21 32 38 0d 43 26 05 20  |..=block!28.C&. |
000139c0  0d 43 30 11 dd a4 6c 6f  61 64 5f 73 74 61 74 75  |.C0...load_statu|
000139d0  73 0d 43 3a 23 f4 20 4c  6f 61 64 73 20 64 65 66  |s.C:#. Loads def|
000139e0  61 75 6c 74 20 73 74 61  74 75 73 20 28 69 66 20  |ault status (if |
000139f0  61 6e 79 29 0d 43 44 48  f4 20 52 65 74 75 72 6e  |any).CDH. Return|
00013a00  73 20 54 52 55 45 20 69  66 20 73 75 63 63 65 73  |s TRUE if succes|
00013a10  66 75 6c 2c 20 65 6c 73  65 20 46 41 4c 53 45 20  |ful, else FALSE |
00013a20  28 69 2e 65 2e 20 73 74  61 74 75 73 20 66 69 6c  |(i.e. status fil|
00013a30  65 20 6e 6f 74 20 66 6f  75 6e 64 29 0d 43 4e 36  |e not found).CN6|
00013a40  53 74 61 74 75 73 3d 8e  28 22 3c 54 72 61 6e 73  |Status=.("<Trans|
00013a50  6c 61 74 6f 72 24 44 69  72 3e 2e 53 74 61 74 75  |lator$Dir>.Statu|
00013a60  73 22 29 3a e7 53 74 61  74 75 73 3d 30 20 8c 20  |s"):.Status=0 . |
00013a70  3d a3 0d 43 58 e7 e8 23  53 74 61 74 75 73 2c 41  |=..CX..#Status,A|
00013a80  75 74 6f 4d 6f 64 65 2c  41 75 74 6f 50 61 6c 2c  |utoMode,AutoPal,|
00013a90  4d 6f 64 65 53 65 74 2c  45 72 72 53 70 72 65 61  |ModeSet,ErrSprea|
00013aa0  64 2c 53 61 76 65 50 61  6c 2c 55 73 65 72 4d 6f  |d,SavePal,UserMo|
00013ab0  64 65 53 65 74 25 28 31  29 2c 55 73 65 72 4d 6f  |deSet%(1),UserMo|
00013ac0  64 65 53 65 74 25 28 32  29 2c 55 73 65 72 4d 6f  |deSet%(2),UserMo|
00013ad0  64 65 53 65 74 25 28 33  29 2c 55 73 65 72 4d 6f  |deSet%(3),UserMo|
00013ae0  64 65 53 65 74 25 28 34  29 2c 41 75 74 6f 5a 6f  |deSet%(4),AutoZo|
00013af0  6f 6d 2c 42 6c 61 63 6b  57 68 69 74 65 2c 47 49  |om,BlackWhite,GI|
00013b00  46 53 63 61 6e 2c 42 6c  61 6e 6b 69 6e 67 2c 49  |FScan,Blanking,I|
00013b10  6e 76 65 72 74 52 47 42  2c 5a 69 67 5a 61 67 2c  |nvertRGB,ZigZag,|
00013b20  56 69 65 77 4d 6f 64 65  2c 4f 75 74 4d 6f 64 65  |ViewMode,OutMode|
00013b30  2c 4f 75 74 50 61 6c 2c  50 65 72 63 65 6e 74 2c  |,OutPal,Percent,|
00013b40  47 61 6d 6d 61 46 2c 47  61 6d 6d 61 2c 42 6c 61  |GammaF,Gamma,Bla|
00013b50  63 6b 46 2c 42 6c 61 63  6b 0d 43 62 24 e8 23 53  |ckF,Black.Cb$.#S|
00013b60  74 61 74 75 73 2c 52 61  6e 67 65 2c 53 61 6d 65  |tatus,Range,Same|
00013b70  4c 65 61 66 3a d9 23 53  74 61 74 75 73 0d 43 6c  |Leaf:.#Status.Cl|
00013b80  1f e7 45 72 72 53 70 72  65 61 64 3d 2d 31 20 8c  |..ErrSpread=-1 .|
00013b90  20 45 72 72 53 70 72 65  61 64 3d 31 0d 43 76 06  | ErrSpread=1.Cv.|
00013ba0  3d b9 0d 43 80 05 20 0d  43 8a 09 dd a4 75 6d 73  |=..C.. .C....ums|
00013bb0  0d 43 94 37 f4 20 52 65  74 75 72 6e 73 20 73 74  |.C.7. Returns st|
00013bc0  72 69 6e 67 20 72 65 70  72 65 73 65 6e 74 69 6e  |ring representin|
00013bd0  67 20 63 75 72 72 65 6e  74 20 75 73 65 72 20 6d  |g current user m|
00013be0  6f 64 65 20 73 65 74 0d  43 9e 5c 3d c3 28 55 73  |ode set.C.\=.(Us|
00013bf0  65 72 4d 6f 64 65 53 65  74 25 28 31 29 29 2b 22  |erModeSet%(1))+"|
00013c00  2c 22 2b c3 28 55 73 65  72 4d 6f 64 65 53 65 74  |,"+.(UserModeSet|
00013c10  25 28 32 29 29 2b 22 2c  22 2b c3 28 55 73 65 72  |%(2))+","+.(User|
00013c20  4d 6f 64 65 53 65 74 25  28 33 29 29 2b 22 2c 22  |ModeSet%(3))+","|
00013c30  2b c3 28 55 73 65 72 4d  6f 64 65 53 65 74 25 28  |+.(UserModeSet%(|
00013c40  34 29 29 0d 43 a8 05 20  0d 43 b2 1b dd a4 61 76  |4)).C.. .C....av|
00013c50  61 69 6c 61 62 6c 65 5f  6d 6f 64 65 28 6d 6f 64  |ailable_mode(mod|
00013c60  65 25 29 0d 43 bc 43 f4  20 43 68 65 63 6b 73 20  |e%).C.C. Checks |
00013c70  69 66 20 6d 6f 64 65 25  20 69 73 20 61 20 76 61  |if mode% is a va|
00013c80  6c 69 64 20 57 49 4d 50  20 6d 6f 64 65 20 61 6e  |lid WIMP mode an|
00013c90  64 20 61 76 61 69 6c 61  62 6c 65 20 6f 6e 20 6d  |d available on m|
00013ca0  6f 6e 69 74 6f 72 0d 43  c6 30 e7 6d 6f 64 65 25  |onitor.C.0.mode%|
00013cb0  3d 33 20 84 20 6d 6f 64  65 25 3d 36 20 84 20 6d  |=3 . mode%=6 . m|
00013cc0  6f 64 65 25 3d 37 20 84  20 6d 6f 64 65 25 3d 32  |ode%=7 . mode%=2|
00013cd0  33 20 8c 20 3d a3 0d 43  d0 1c e7 6d 6f 64 65 25  |3 . =..C...mode%|
00013ce0  3c 30 20 84 20 6d 6f 64  65 25 3e 32 38 20 8c 20  |<0 . mode%>28 . |
00013cf0  3d a3 0d 43 da 2a e7 6d  6f 64 65 25 3d 32 34 20  |=..C.*.mode%=24 |
00013d00  84 20 6d 6f 64 65 25 3c  31 38 20 8c 20 3d b9 20  |. mode%<18 . =. |
00013d10  8b 20 3d 4d 75 6c 74 69  53 79 6e 63 0d 43 e4 05  |. =MultiSync.C..|
00013d20  20 0d 43 ee 11 dd a4 61  6c 69 67 6e 28 76 61 6c  | .C....align(val|
00013d30  25 29 0d 43 f8 30 f4 20  52 65 74 75 72 6e 73 20  |%).C.0. Returns |
00013d40  6e 65 78 74 2d 75 70 20  77 6f 72 64 20 61 6c 69  |next-up word ali|
00013d50  67 6e 65 64 20 76 61 6c  75 65 20 6f 66 20 76 61  |gned value of va|
00013d60  6c 25 0d 44 02 10 3d 28  76 61 6c 25 2b 33 29 80  |l%.D..=(val%+3).|
00013d70  ac 33 0d 44 0c 05 20 0d  44 16 16 dd a4 72 65 61  |.3.D.. .D....rea|
00013d80  64 70 61 6c 76 61 6c 28  72 67 62 25 29 0d 44 20  |dpalval(rgb%).D |
00013d90  33 f4 20 52 65 74 75 72  6e 73 20 27 4f 53 5f 52  |3. Returns 'OS_R|
00013da0  65 61 64 50 61 6c 65 74  74 65 27 20 77 6f 72 64  |eadPalette' word|
00013db0  20 66 72 6f 6d 20 26 52  47 42 20 76 61 6c 75 65  | from &RGB value|
00013dc0  0d 44 2a 3f 3d 28 28 72  67 62 25 80 26 46 46 29  |.D*?=((rgb%.&FF)|
00013dd0  3c 3c 32 34 29 2b 28 28  72 67 62 25 80 26 46 46  |<<24)+((rgb%.&FF|
00013de0  30 30 29 3c 3c 38 29 2b  28 28 72 67 62 25 80 26  |00)<<8)+((rgb%.&|
00013df0  46 46 30 30 30 30 29 3e  3e 38 29 2b 26 31 30 0d  |FF0000)>>8)+&10.|
00013e00  44 34 05 20 0d 44 3e 13  dd a4 73 74 72 69 6e 67  |D4. .D>...string|
00013e10  28 61 64 64 72 25 29 0d  44 48 32 f4 20 52 65 74  |(addr%).DH2. Ret|
00013e20  75 72 6e 73 20 43 54 52  4c 2d 63 68 61 72 20 74  |urns CTRL-char t|
00013e30  65 72 6d 69 6e 61 74 65  64 20 73 74 72 69 6e 67  |erminated string|
00013e40  20 61 74 20 61 64 64 72  25 0d 44 52 0f ea 20 5f  | at addr%.DR.. _|
00013e50  25 2c 5f 63 25 2c 5f 24  0d 44 5c 1f 5f 25 3d 2d  |%,_c%,_$.D\._%=-|
00013e60  31 3a f5 20 5f 25 2b 3d  31 3a fd 20 61 64 64 72  |1:. _%+=1:. addr|
00013e70  25 3f 5f 25 3c 33 32 0d  44 66 33 5f 63 25 3d 61  |%?_%<32.Df3_c%=a|
00013e80  64 64 72 25 3f 5f 25 3a  61 64 64 72 25 3f 5f 25  |ddr%?_%:addr%?_%|
00013e90  3d 31 33 3a 5f 24 3d 24  61 64 64 72 25 3a 61 64  |=13:_$=$addr%:ad|
00013ea0  64 72 25 3f 5f 25 3d 5f  63 25 0d 44 70 07 3d 5f  |dr%?_%=_c%.Dp.=_|
00013eb0  24 0d 44 7a 05 20 0d 44  84 12 dd a4 75 70 73 74  |$.Dz. .D....upst|
00013ec0  72 69 6e 67 28 6d 24 29  0d 44 8e 1b f4 20 52 65  |ring(m$).D... Re|
00013ed0  74 75 72 6e 73 20 75 70  70 65 72 20 63 61 73 65  |turns upper case|
00013ee0  20 6d 24 0d 44 98 0e ea  20 63 25 2c 76 25 2c 75  | m$.D... c%,v%,u|
00013ef0  24 0d 44 a2 52 75 24 3d  6d 24 3a e3 20 63 25 3d  |$.D.Ru$=m$:. c%=|
00013f00  31 20 b8 20 a9 20 6d 24  3a 76 25 3d 97 c1 6d 24  |1 . . m$:v%=..m$|
00013f10  2c 63 25 2c 31 29 3a e7  28 76 25 3c 3d 97 22 7a  |,c%,1):.(v%<=."z|
00013f20  22 29 80 28 76 25 3e 3d  97 22 61 22 29 20 8c 20  |").(v%>=."a") . |
00013f30  c1 75 24 2c 63 25 2c 31  29 3d bd 28 76 25 80 26  |.u$,c%,1)=.(v%.&|
00013f40  35 46 29 0d 44 ac 09 ed  3a 3d 75 24 0d 44 b6 05  |5F).D...:=u$.D..|
00013f50  20 0d 44 c0 1d dd f2 6d  6f 75 73 65 28 f8 20 78  | .D....mouse(. x|
00013f60  25 2c f8 20 79 25 2c f8  20 62 75 74 25 29 0d 44  |%,. y%,. but%).D|
00013f70  ca 2b f4 20 52 65 74 75  72 6e 73 20 78 2c 79 20  |.+. Returns x,y |
00013f80  61 6e 64 20 62 75 74 74  6f 6e 20 73 74 61 74 65  |and button state|
00013f90  20 6f 66 20 6d 6f 75 73  65 0d 44 d4 11 c8 97 20  | of mouse.D.... |
00013fa0  78 25 2c 79 25 2c 62 75  74 25 0d 44 de 05 e1 0d  |x%,y%,but%.D....|
00013fb0  44 e8 05 20 0d 44 f2 0d  dd a4 6c 6f 67 32 42 50  |D.. .D....log2BP|
00013fc0  50 0d 44 fc 26 f4 20 52  65 74 75 72 6e 73 20 4c  |P.D.&. Returns L|
00013fd0  6f 67 32 42 50 50 20 66  6f 72 20 63 75 72 72 65  |og2BPP for curre|
00013fe0  6e 74 20 6d 6f 64 65 0d  45 06 13 3d a4 6d 6f 64  |nt mode.E..=.mod|
00013ff0  65 5f 76 61 72 28 eb 2c  39 29 0d 45 10 04 0d 45  |e_var(.,9).E...E|
00014000  1a 16 dd a4 63 6f 6c 73  74 6f 62 70 70 28 63 6f  |....colstobpp(co|
00014010  6c 73 25 29 0d 45 24 35  f4 20 52 65 74 75 72 6e  |ls%).E$5. Return|
00014020  73 20 62 69 74 73 20 70  65 72 20 70 69 78 65 6c  |s bits per pixel|
00014030  20 6e 65 65 64 65 64 20  66 6f 72 20 63 6f 6c 73  | needed for cols|
00014040  25 20 63 6f 6c 6f 75 72  73 0d 45 2e 28 e7 63 6f  |% colours.E.(.co|
00014050  6c 73 25 3c 3d 31 20 8c  20 3d 31 20 8b 20 3d a4  |ls%<=1 . =1 . =.|
00014060  63 65 69 6c 28 ab 28 63  6f 6c 73 25 29 2f ab 32  |ceil(.(cols%)/.2|
00014070  29 0d 45 38 05 20 0d 45  42 15 dd a4 76 64 75 5f  |).E8. .EB...vdu_|
00014080  76 61 72 28 76 61 72 6e  72 25 29 0d 45 4c 21 f4  |var(varnr%).EL!.|
00014090  20 52 65 74 75 72 6e 73  20 56 44 55 20 76 61 72  | Returns VDU var|
000140a0  69 61 62 6c 65 20 76 61  72 6e 72 25 0d 45 56 3b  |iable varnr%.EV;|
000140b0  21 61 72 67 25 3d 76 61  72 6e 72 25 3a 61 72 67  |!arg%=varnr%:arg|
000140c0  25 21 34 3d 2d 31 3a c8  99 20 4f 53 52 65 61 64  |%!4=-1:.. OSRead|
000140d0  56 56 25 2c 61 72 67 25  2c 61 72 67 25 2b 38 3a  |VV%,arg%,arg%+8:|
000140e0  3d 61 72 67 25 21 38 0d  45 60 05 20 0d 45 6a 1c  |=arg%!8.E`. .Ej.|
000140f0  dd a4 6d 6f 64 65 5f 76  61 72 28 6d 6f 64 65 25  |..mode_var(mode%|
00014100  2c 76 61 72 6e 72 25 29  0d 45 74 28 f4 20 52 65  |,varnr%).Et(. Re|
00014110  74 75 72 6e 73 20 6d 6f  64 65 20 6d 6f 64 65 25  |turns mode mode%|
00014120  20 76 61 72 69 61 62 6c  65 20 76 61 72 6e 72 25  | variable varnr%|
00014130  0d 45 7e 0d ea 20 72 65  73 75 6c 74 25 0d 45 88  |.E~.. result%.E.|
00014140  32 c8 99 20 4f 53 52 65  61 64 4d 56 25 2c 6d 6f  |2.. OSReadMV%,mo|
00014150  64 65 25 2c 76 61 72 6e  72 25 20 b8 20 2c 2c 72  |de%,varnr% . ,,r|
00014160  65 73 75 6c 74 25 3a 3d  72 65 73 75 6c 74 25 0d  |esult%:=result%.|
00014170  45 92 05 20 0d 45 9c 10  dd a4 4f 53 5f 76 61 72  |E.. .E....OS_var|
00014180  28 5f 24 29 0d 45 a6 2e  f4 20 41 74 74 65 6d 70  |(_$).E... Attemp|
00014190  74 73 20 74 6f 20 72 65  74 75 72 6e 20 4f 53 2d  |ts to return OS-|
000141a0  76 61 72 27 73 20 73 74  72 69 6e 67 20 76 61 6c  |var's string val|
000141b0  75 65 0d 45 b0 0d ea 20  5f 72 24 2c 5f 6c 25 0d  |ue.E... _r$,_l%.|
000141c0  45 ba 37 c8 99 20 22 58  4f 53 5f 52 65 61 64 56  |E.7.. "XOS_ReadV|
000141d0  61 72 56 61 6c 22 2c 5f  24 2c c4 31 30 30 2c 22  |arVal",_$,.100,"|
000141e0  20 22 29 2c 31 30 30 2c  30 2c 33 20 b8 20 2c 5f  | "),100,0,3 . ,_|
000141f0  72 24 2c 5f 6c 25 0d 45  c4 16 5f 72 24 3d c0 5f  |r$,_l%.E.._r$=._|
00014200  72 24 2c 5f 6c 25 29 3a  3d 5f 72 24 0d 45 ce 05  |r$,_l%):=_r$.E..|
00014210  20 0d 45 d8 15 dd a4 73  77 69 5f 74 6f 5f 6e 72  | .E....swi_to_nr|
00014220  28 73 77 69 24 29 0d 45  e2 29 f4 20 52 65 74 75  |(swi$).E.). Retu|
00014230  72 6e 73 20 53 57 49 20  6e 75 6d 62 65 72 20 6f  |rns SWI number o|
00014240  66 20 53 57 49 20 63 61  6c 6c 20 73 77 69 24 0d  |f SWI call swi$.|
00014250  45 ec 0c ea 20 73 77 69  6e 72 25 0d 45 f6 2f c8  |E... swinr%.E./.|
00014260  99 20 22 58 4f 53 5f 53  57 49 4e 75 6d 62 65 72  |. "XOS_SWINumber|
00014270  46 72 6f 6d 53 74 72 69  6e 67 22 2c 2c 73 77 69  |FromString",,swi|
00014280  24 20 b8 20 73 77 69 6e  72 25 0d 46 00 0b 3d 73  |$ . swinr%.F..=s|
00014290  77 69 6e 72 25 0d 46 0a  05 20 0d 46 14 1a dd f2  |winr%.F.. .F....|
000142a0  65 72 72 6f 72 28 65 72  72 6e 72 2c 65 72 72 6d  |error(errnr,errm|
000142b0  73 67 24 29 0d 46 1e 14  f4 20 48 61 6e 64 6c 65  |sg$).F... Handle|
000142c0  73 20 65 72 72 6f 72 73  0d 46 28 0f ea 20 62 75  |s errors.F(.. bu|
000142d0  74 25 2c 6f 70 74 25 0d  46 32 39 c8 99 20 22 54  |t%,opt%.F29.. "T|
000142e0  72 61 6e 73 6c 61 74 6f  72 5f 56 69 64 65 6f 44  |ranslator_VideoD|
000142f0  4d 41 22 2c 31 3a f4 20  45 6e 73 75 72 65 20 76  |MA",1:. Ensure v|
00014300  69 64 65 6f 20 44 4d 41  20 65 6e 61 62 6c 65 64  |ideo DMA enabled|
00014310  0d 46 3c 27 e7 65 72 72  6e 72 3d 2d 31 20 8c 20  |.F<'.errnr=-1 . |
00014320  65 72 72 6e 72 3d 31 3a  6f 70 74 25 3d 31 20 8b  |errnr=1:opt%=1 .|
00014330  20 6f 70 74 25 3d 33 0d  46 46 1f 21 65 72 72 3d  | opt%=3.FF.!err=|
00014340  65 72 72 6e 72 3a 24 28  65 72 72 2b 34 29 3d 65  |errnr:$(err+4)=e|
00014350  72 72 6d 73 67 24 0d 46  50 44 c8 99 20 22 54 72  |rrmsg$.FPD.. "Tr|
00014360  61 6e 73 6c 61 74 6f 72  5f 50 61 6c 65 74 74 65  |anslator_Palette|
00014370  22 2c 32 5e a4 6c 6f 67  32 42 50 50 2c 64 75 6d  |",2^.log2BPP,dum|
00014380  25 2c 31 3a f4 20 52 65  61 64 20 63 75 72 72 65  |%,1:. Read curre|
00014390  6e 74 20 70 61 6c 65 74  74 65 0d 46 5a 29 f2 73  |nt palette.FZ).s|
000143a0  65 74 5f 70 61 6c 65 74  74 65 28 30 29 3a f4 20  |et_palette(0):. |
000143b0  53 65 6c 65 63 74 20 57  49 4d 50 20 70 61 6c 65  |Select WIMP pale|
000143c0  74 74 65 0d 46 64 2a c8  99 20 57 52 65 70 6f 72  |tte.Fd*.. WRepor|
000143d0  74 25 2c 65 72 72 2c 6f  70 74 25 2c 61 70 70 6c  |t%,err,opt%,appl|
000143e0  6e 61 6d 65 24 20 b8 20  2c 62 75 74 25 0d 46 6e  |name$ . ,but%.Fn|
000143f0  13 e7 62 75 74 25 3c 3e  31 20 8c 20 f2 64 69 65  |..but%<>1 . .die|
00014400  0d 46 78 42 c8 99 20 22  54 72 61 6e 73 6c 61 74  |.FxB.. "Translat|
00014410  6f 72 5f 53 65 74 50 61  6c 65 74 74 65 22 2c 32  |or_SetPalette",2|
00014420  5e 28 32 5e a4 6c 6f 67  32 42 50 50 29 2c 64 75  |^(2^.log2BPP),du|
00014430  6d 25 3a f4 20 52 65 73  65 74 20 70 61 6c 65 74  |m%:. Reset palet|
00014440  74 65 0d 46 82 05 e1 0d  46 8c 05 20 0d 46 96 0a  |te.F....F.. .F..|
00014450  dd a4 73 70 72 57 0d 46  a0 3f f4 20 52 65 74 75  |..sprW.F.?. Retu|
00014460  72 6e 73 20 69 6d 61 67  65 20 73 70 72 69 74 65  |rns image sprite|
00014470  27 73 20 77 69 64 74 68  20 69 6e 20 4f 53 20 70  |'s width in OS p|
00014480  69 78 65 6c 73 20 69 6e  20 63 75 72 72 65 6e 74  |ixels in current|
00014490  20 6d 6f 64 65 0d 46 aa  11 3d 53 70 72 57 25 2a  | mode.F..=SprW%*|
000144a0  58 73 74 65 70 25 0d 46  b4 05 20 0d 46 be 0a dd  |Xstep%.F.. .F...|
000144b0  a4 73 70 72 48 0d 46 c8  40 f4 20 52 65 74 75 72  |.sprH.F.@. Retur|
000144c0  6e 73 20 69 6d 61 67 65  20 73 70 72 69 74 65 27  |ns image sprite'|
000144d0  73 20 68 65 69 67 68 74  20 69 6e 20 4f 53 20 70  |s height in OS p|
000144e0  69 78 65 6c 73 20 69 6e  20 63 75 72 72 65 6e 74  |ixels in current|
000144f0  20 6d 6f 64 65 0d 46 d2  11 3d 53 70 72 48 25 2a  | mode.F..=SprH%*|
00014500  59 73 74 65 70 25 0d 46  dc 05 20 0d 46 e6 12 dd  |Ystep%.F.. .F...|
00014510  a4 6d 61 78 28 76 31 25  2c 76 32 25 29 0d 46 f0  |.max(v1%,v2%).F.|
00014520  24 f4 20 52 65 74 75 72  6e 73 20 6d 61 78 69 6d  |$. Returns maxim|
00014530  75 6d 20 6f 66 20 76 31  25 20 61 6e 64 20 76 32  |um of v1% and v2|
00014540  25 0d 46 fa 1a e7 76 31  25 3e 76 32 25 20 8c 20  |%.F...v1%>v2% . |
00014550  3d 76 31 25 20 8b 20 3d  76 32 25 0d 47 04 05 20  |=v1% . =v2%.G.. |
00014560  0d 47 0e 12 dd a4 6d 69  6e 28 76 31 25 2c 76 32  |.G....min(v1%,v2|
00014570  25 29 0d 47 18 24 f4 20  52 65 74 75 72 6e 73 20  |%).G.$. Returns |
00014580  6d 69 6e 69 6d 75 6d 20  6f 66 20 76 31 25 20 61  |minimum of v1% a|
00014590  6e 64 20 76 32 25 0d 47  22 1a e7 76 31 25 3c 76  |nd v2%.G"..v1%<v|
000145a0  32 25 20 8c 20 3d 76 31  25 20 8b 20 3d 76 32 25  |2% . =v1% . =v2%|
000145b0  0d 47 2c 05 20 0d 47 36  0d dd a4 63 65 69 6c 28  |.G,. .G6...ceil(|
000145c0  76 29 0d 47 40 30 f4 20  52 65 74 75 72 6e 73 20  |v).G@0. Returns |
000145d0  27 63 65 69 6c 69 6e 67  27 20 6f 66 20 76 61 6c  |'ceiling' of val|
000145e0  75 65 20 28 69 2e 65 2e  20 72 6f 75 6e 64 20 75  |ue (i.e. round u|
000145f0  70 29 0d 47 4a 16 e7 76  3d a8 76 20 8c 20 3d 76  |p).GJ..v=.v . =v|
00014600  20 8b 20 3d a8 76 2b 31  0d 47 54 05 20 0d 47 5e  | . =.v+1.GT. .G^|
00014610  09 dd f2 64 69 65 0d 47  68 19 f4 20 54 69 64 69  |...die.Gh.. Tidi|
00014620  65 73 20 75 70 20 61 6e  64 20 65 78 69 74 73 0d  |es up and exits.|
00014630  47 72 15 f2 66 69 6e 69  73 68 3a f4 20 54 69 64  |Gr..finish:. Tid|
00014640  79 20 75 70 0d 47 7c 10  c8 99 20 22 4f 53 5f 45  |y up.G|... "OS_E|
00014650  78 69 74 22 0d 47 86 05  e1 0d 47 90 05 20 0d 47  |xit".G....G.. .G|
00014660  9a 0c dd f2 66 69 6e 69  73 68 0d 47 a4 0f f4 20  |....finish.G... |
00014670  54 69 64 69 65 73 20 75  70 0d 47 ae 7d c8 99 20  |Tidies up.G.}.. |
00014680  22 54 72 61 6e 73 6c 61  74 6f 72 5f 54 61 73 6b  |"Translator_Task|
00014690  51 75 69 74 22 20 b8 20  74 61 73 6b 73 25 3a e7  |Quit" . tasks%:.|
000146a0  74 61 73 6b 73 25 3c 3d  30 20 8c 20 c8 99 20 22  |tasks%<=0 . .. "|
000146b0  4f 53 5f 4d 6f 64 75 6c  65 22 2c 34 2c 22 54 72  |OS_Module",4,"Tr|
000146c0  61 6e 73 6c 61 74 6f 72  22 3a f4 20 4b 69 6c 6c  |anslator":. Kill|
000146d0  20 6d 6f 64 75 6c 65 20  69 66 20 6e 6f 20 6f 74  | module if no ot|
000146e0  68 65 72 20 74 61 73 6b  73 20 61 72 65 20 75 73  |her tasks are us|
000146f0  69 6e 67 20 69 74 0d 47  b8 26 c8 99 20 57 53 65  |ing it.G.&.. WSe|
00014700  74 50 25 2c 2c 77 69 6d  70 70 61 6c 3a f4 20 52  |tP%,,wimppal:. R|
00014710  65 73 65 74 20 70 61 6c  65 74 74 65 0d 47 c2 2d  |eset palette.G.-|
00014720  c8 99 20 22 57 69 6d 70  5f 43 6c 6f 73 65 44 6f  |.. "Wimp_CloseDo|
00014730  77 6e 22 2c 54 61 73 6b  48 61 6e 64 6c 65 25 2c  |wn",TaskHandle%,|
00014740  26 34 42 35 33 34 31 35  34 0d 47 cc 05 e1 0d 47  |&4B534154.G....G|
00014750  d6 05 20 0d 47 e0 23 dd  a4 6d 6f 64 65 28 77 69  |.. .G.#..mode(wi|
00014760  64 74 68 25 2c 68 65 69  67 68 74 25 2c 63 6f 6c  |dth%,height%,col|
00014770  6f 75 72 73 25 29 0d 47  ea 4c f4 20 52 65 74 75  |ours%).G.L. Retu|
00014780  72 6e 73 2c 20 69 66 20  70 6f 73 73 69 62 6c 65  |rns, if possible|
00014790  2c 20 61 20 73 74 61 6e  64 61 72 64 20 73 63 72  |, a standard scr|
000147a0  65 65 6e 20 6d 6f 64 65  20 74 68 61 74 20 69 73  |een mode that is|
000147b0  20 6d 6f 73 74 20 73 75  69 74 61 62 6c 65 20 66  | most suitable f|
000147c0  6f 72 0d 47 f4 4b f4 20  64 69 73 70 6c 61 79 69  |or.G.K. displayi|
000147d0  6e 67 20 61 20 70 69 63  74 75 72 65 20 6f 66 20  |ng a picture of |
000147e0  28 77 69 64 74 68 25 29  78 28 68 65 69 67 68 74  |(width%)x(height|
000147f0  25 29 20 70 69 78 65 6c  73 20 69 6e 20 63 6f 6c  |%) pixels in col|
00014800  6f 75 72 73 25 20 63 6f  6c 6f 75 72 73 0d 47 fe  |ours% colours.G.|
00014810  36 f4 20 52 65 74 75 72  6e 73 20 2d 31 20 69 66  |6. Returns -1 if|
00014820  20 6e 75 6d 62 65 72 20  6f 66 20 63 6f 6c 6f 75  | number of colou|
00014830  72 73 20 67 72 65 61 74  65 72 20 74 68 61 6e 20  |rs greater than |
00014840  32 35 36 0d 48 08 29 ea  20 61 72 63 63 6f 6c 73  |256.H.). arccols|
00014850  25 2c 61 72 63 77 69 64  74 68 25 2c 61 72 63 68  |%,arcwidth%,arch|
00014860  65 69 67 68 74 25 2c 6d  6f 64 65 25 0d 48 12 13  |eight%,mode%.H..|
00014870  e7 4f 75 74 4d 6f 64 65  3d 32 20 8c 20 3d eb 0d  |.OutMode=2 . =..|
00014880  48 1c 2f f4 20 52 61 6e  67 65 20 63 68 65 63 6b  |H./. Range check|
00014890  20 66 6f 72 20 63 6f 6c  6f 75 72 73 2c 20 77 69  | for colours, wi|
000148a0  64 74 68 20 61 6e 64 20  68 65 69 67 68 74 0d 48  |dth and height.H|
000148b0  26 26 e7 63 6f 6c 6f 75  72 73 25 3e 32 35 36 20  |&&.colours%>256 |
000148c0  8c 20 3d 2d 31 3a f4 20  49 6d 70 6f 73 73 69 62  |. =-1:. Impossib|
000148d0  6c 65 20 21 0d 48 30 2c  f4 20 44 65 74 65 72 6d  |le !.H0,. Determ|
000148e0  69 6e 65 20 63 6c 6f 73  65 73 74 20 63 6f 6c 6f  |ine closest colo|
000148f0  75 72 73 2f 77 69 64 74  68 2f 68 65 69 67 68 74  |urs/width/height|
00014900  0d 48 3a 63 e7 63 6f 6c  6f 75 72 73 25 3e 31 36  |.H:c.colours%>16|
00014910  20 8c 20 61 72 63 63 6f  6c 73 25 3d 32 35 36 20  | . arccols%=256 |
00014920  8b 20 e7 63 6f 6c 6f 75  72 73 25 3e 34 20 8c 20  |. .colours%>4 . |
00014930  61 72 63 63 6f 6c 73 25  3d 31 36 20 8b 20 e7 63  |arccols%=16 . .c|
00014940  6f 6c 6f 75 72 73 25 3e  32 20 8c 20 61 72 63 63  |olours%>2 . arcc|
00014950  6f 6c 73 25 3d 34 20 8b  20 61 72 63 63 6f 6c 73  |ols%=4 . arccols|
00014960  25 3d 32 0d 48 44 4e e7  77 69 64 74 68 25 3e 36  |%=2.HDN.width%>6|
00014970  34 30 20 8c 20 61 72 63  77 69 64 74 68 25 3d 31  |40 . arcwidth%=1|
00014980  30 35 36 20 8b 20 e7 77  69 64 74 68 25 3e 33 32  |056 . .width%>32|
00014990  30 20 8c 20 61 72 63 77  69 64 74 68 25 3d 36 34  |0 . arcwidth%=64|
000149a0  30 20 8b 20 61 72 63 77  69 64 74 68 25 3d 33 32  |0 . arcwidth%=32|
000149b0  30 0d 48 4e 33 e7 68 65  69 67 68 74 25 3c 3d 32  |0.HN3.height%<=2|
000149c0  35 36 20 8c 20 61 72 63  68 65 69 67 68 74 25 3d  |56 . archeight%=|
000149d0  32 35 36 20 8b 20 61 72  63 68 65 69 67 68 74 25  |256 . archeight%|
000149e0  3d 35 31 32 0d 48 58 11  c8 8e 20 61 72 63 63 6f  |=512.HX... arcco|
000149f0  6c 73 25 20 ca 0d 48 62  2f 20 c9 20 32 20 3a 20  |ls% ..Hb/ . 2 : |
00014a00  e7 61 72 63 68 65 69 67  68 74 25 3d 35 31 32 20  |.archeight%=512 |
00014a10  8c 20 6d 6f 64 65 25 3d  31 38 20 8b 20 6d 6f 64  |. mode%=18 . mod|
00014a20  65 25 3d 30 0d 48 6c 4b  20 c9 20 34 20 3a 20 e7  |e%=0.HlK . 4 : .|
00014a30  61 72 63 68 65 69 67 68  74 25 3d 35 31 32 20 8c  |archeight%=512 .|
00014a40  20 6d 6f 64 65 25 3d 31  39 20 8b 20 e7 61 72 63  | mode%=19 . .arc|
00014a50  77 69 64 74 68 25 3c 3d  33 32 30 20 8c 20 6d 6f  |width%<=320 . mo|
00014a60  64 65 25 3d 31 20 8b 20  6d 6f 64 65 25 3d 38 0d  |de%=1 . mode%=8.|
00014a70  48 76 69 20 c9 20 31 36  20 3a 20 e7 61 72 63 68  |Hvi . 16 : .arch|
00014a80  65 69 67 68 74 25 3d 35  31 32 20 8c 20 6d 6f 64  |eight%=512 . mod|
00014a90  65 25 3d 32 30 20 8b 20  e7 61 72 63 77 69 64 74  |e%=20 . .arcwidt|
00014aa0  68 25 3c 3d 33 32 30 20  8c 20 6d 6f 64 65 25 3d  |h%<=320 . mode%=|
00014ab0  39 20 8b 20 e7 61 72 63  77 69 64 74 68 25 3d 36  |9 . .arcwidth%=6|
00014ac0  34 30 20 8c 20 6d 6f 64  65 25 3d 31 32 20 8b 20  |40 . mode%=12 . |
00014ad0  6d 6f 64 65 25 3d 31 36  0d 48 80 86 20 c9 20 32  |mode%=16.H.. . 2|
00014ae0  35 36 20 3a 20 e7 61 72  63 68 65 69 67 68 74 25  |56 : .archeight%|
00014af0  3d 35 31 32 20 8c 20 6d  6f 64 65 25 3d 32 31 20  |=512 . mode%=21 |
00014b00  8b 20 e7 61 72 63 77 69  64 74 68 25 3d 31 36 30  |. .arcwidth%=160|
00014b10  20 8c 20 6d 6f 64 65 25  3d 31 30 20 8b 20 e7 61  | . mode%=10 . .a|
00014b20  72 63 77 69 64 74 68 25  3d 33 32 30 20 8c 20 6d  |rcwidth%=320 . m|
00014b30  6f 64 65 25 3d 31 33 20  8b 20 e7 61 72 63 77 69  |ode%=13 . .arcwi|
00014b40  64 74 68 25 3d 36 34 30  20 8c 20 6d 6f 64 65 25  |dth%=640 . mode%|
00014b50  3d 31 35 20 8b 20 6d 6f  64 65 25 3d 32 34 0d 48  |=15 . mode%=24.H|
00014b60  8a 05 cb 0d 48 94 0a 3d  6d 6f 64 65 25 0d 48 9e  |....H..=mode%.H.|
00014b70  05 20 0d 48 a8 13 dd a4  74 69 6d 65 73 28 76 61  |. .H....times(va|
00014b80  6c 75 65 25 29 0d 48 b2  30 f4 20 52 65 74 75 72  |lue%).H.0. Retur|
00014b90  6e 73 20 53 54 52 24 76  61 6c 75 65 25 20 77 69  |ns STR$value% wi|
00014ba0  74 68 20 27 70 6c 75 72  61 6c 20 65 78 74 65 6e  |th 'plural exten|
00014bb0  73 69 6f 6e 27 0d 48 bc  09 ea 20 5f 64 25 0d 48  |sion'.H... _d%.H|
00014bc0  c6 33 5f 64 25 3d 76 61  6c 75 65 25 83 31 30 3a  |.3_d%=value%.10:|
00014bd0  f4 20 4c 61 73 74 20 64  69 67 69 74 20 64 65 74  |. Last digit det|
00014be0  65 72 6d 69 6e 65 73 20  65 78 74 65 6e 73 69 6f  |ermines extensio|
00014bf0  6e 0d 48 d0 3a e7 28 28  28 76 61 6c 75 65 25 83  |n.H.:.(((value%.|
00014c00  31 30 30 29 81 31 30 29  3d 31 29 84 28 5f 64 25  |100).10)=1).(_d%|
00014c10  3e 33 29 84 28 5f 64 25  3d 30 29 20 8c 20 3d c3  |>3).(_d%=0) . =.|
00014c20  76 61 6c 75 65 25 2b 22  74 68 22 0d 48 da 0c c8  |value%+"th".H...|
00014c30  8e 20 5f 64 25 20 ca 0d  48 e4 18 20 c9 20 31 20  |. _d% ..H.. . 1 |
00014c40  3a 20 3d c3 76 61 6c 75  65 25 2b 22 73 74 22 0d  |: =.value%+"st".|
00014c50  48 ee 18 20 c9 20 32 20  3a 20 3d c3 76 61 6c 75  |H.. . 2 : =.valu|
00014c60  65 25 2b 22 6e 64 22 0d  48 f8 18 20 c9 20 33 20  |e%+"nd".H.. . 3 |
00014c70  3a 20 3d c3 76 61 6c 75  65 25 2b 22 72 64 22 0d  |: =.value%+"rd".|
00014c80  49 02 05 cb 0d 49 0c 04  0d 49 16 35 dd f2 72 65  |I....I...I.5..re|
00014c90  61 64 32 34 70 61 6c 28  66 68 25 2c f8 20 50 61  |ad24pal(fh%,. Pa|
00014ca0  6c 25 28 29 2c 63 6f 6c  73 25 2c 72 6f 25 2c 67  |l%(),cols%,ro%,g|
00014cb0  6f 25 2c 62 6f 25 2c 65  6c 65 6e 25 29 0d 49 20  |o%,bo%,elen%).I |
00014cc0  2a f4 20 52 65 61 64 73  20 32 34 2d 62 69 74 20  |*. Reads 24-bit |
00014cd0  70 61 6c 65 74 74 65 20  66 72 6f 6d 20 69 6e 70  |palette from inp|
00014ce0  75 74 20 66 69 6c 65 0d  49 2a 40 f4 20 45 6e 74  |ut file.I*@. Ent|
00014cf0  72 69 65 73 20 61 72 65  20 63 6f 6c 73 25 2a 65  |ries are cols%*e|
00014d00  6c 65 6e 25 2d 62 79 74  65 2c 20 52 2c 47 2c 42  |len%-byte, R,G,B|
00014d10  20 61 74 20 72 30 25 2f  67 6f 25 2f 62 6f 25 20  | at r0%/go%/bo% |
00014d20  6f 66 66 73 65 74 73 0d  49 34 0e ea 20 70 25 2c  |offsets.I4.. p%,|
00014d30  63 25 2c 6d 25 0d 49 3e  3d c8 99 20 22 4f 53 5f  |c%,m%.I>=.. "OS_|
00014d40  47 42 50 42 22 2c 34 2c  66 68 25 2c 64 75 6d 25  |GBPB",4,fh%,dum%|
00014d50  2c 63 6f 6c 73 25 2a 65  6c 65 6e 25 3a f4 20 52  |,cols%*elen%:. R|
00014d60  65 61 64 20 65 6e 74 69  72 65 20 70 61 6c 65 74  |ead entire palet|
00014d70  74 65 0d 49 48 15 70 25  3d 64 75 6d 25 3a f4 20  |te.IH.p%=dum%:. |
00014d80  50 6f 69 6e 74 65 72 0d  49 52 47 e3 20 63 25 3d  |Pointer.IRG. c%=|
00014d90  31 20 b8 20 63 6f 6c 73  25 3a 50 61 6c 25 28 63  |1 . cols%:Pal%(c|
00014da0  25 29 3d 70 25 3f 72 6f  25 3c 3c 31 36 20 84 20  |%)=p%?ro%<<16 . |
00014db0  70 25 3f 67 6f 25 3c 3c  38 20 84 20 70 25 3f 62  |p%?go%<<8 . p%?b|
00014dc0  6f 25 3a 70 25 2b 3d 65  6c 65 6e 25 3a ed 0d 49  |o%:p%+=elen%:..I|
00014dd0  5c 05 e1 0d 49 66 05 20  0d 49 70 17 dd a4 69 73  |\...If. .Ip...is|
00014de0  74 72 69 6e 67 28 66 68  25 2c 6c 65 6e 25 29 0d  |tring(fh%,len%).|
00014df0  49 7a 21 f4 20 52 65 74  75 72 6e 73 20 73 74 72  |Iz!. Returns str|
00014e00  69 6e 67 20 6f 66 20 66  72 6f 6d 20 66 69 6c 65  |ing of from file|
00014e10  0d 49 84 30 f4 20 49 66  20 6c 65 6e 25 3e 30 20  |.I.0. If len%>0 |
00014e20  74 68 65 20 6e 75 6d 62  65 72 20 6f 66 20 63 68  |the number of ch|
00014e30  61 72 61 63 74 65 72 73  20 69 73 20 6c 65 6e 25  |aracters is len%|
00014e40  0d 49 8e 38 f4 20 49 66  20 6c 65 6e 25 3d 2d 31  |.I.8. If len%=-1|
00014e50  20 74 68 65 20 73 74 72  69 6e 67 20 69 73 20 43  | the string is C|
00014e60  54 52 4c 2d 63 68 61 72  61 63 74 65 72 20 74 65  |TRL-character te|
00014e70  72 6d 69 6e 61 74 65 64  0d 49 98 0e ea 20 5f 25  |rminated.I... _%|
00014e80  2c 72 24 2c 63 25 0d 49  a2 6f 5f 24 3d 22 22 3a  |,r$,c%.I.o_$="":|
00014e90  e7 6c 65 6e 25 3e 30 20  8c 20 e3 20 5f 25 3d 31  |.len%>0 . . _%=1|
00014ea0  20 b8 20 6c 65 6e 25 3a  72 24 2b 3d bd a4 69 62  | . len%:r$+=..ib|
00014eb0  66 28 66 68 25 29 3a ed  20 8b 20 e7 6c 65 6e 25  |f(fh%):. . .len%|
00014ec0  3d 2d 31 20 8c 20 63 25  3d a4 69 62 66 28 66 68  |=-1 . c%=.ibf(fh|
00014ed0  25 29 3a c8 95 20 63 25  3e 3d 97 22 20 22 3a 72  |%):.. c%>=." ":r|
00014ee0  24 2b 3d bd 63 25 3a 63  25 3d a4 69 62 66 28 66  |$+=.c%:c%=.ibf(f|
00014ef0  68 25 29 3a ce 0d 49 ac  07 3d 72 24 0d 49 b6 05  |h%):..I..=r$.I..|
00014f00  20 0d 49 c0 18 dd f2 69  73 6b 69 70 28 66 68 25  | .I....iskip(fh%|
00014f10  2c 61 6d 6f 75 6e 74 25  29 0d 49 ca 21 f4 20 53  |,amount%).I.!. S|
00014f20  6b 69 70 73 20 61 6d 6f  75 6e 74 25 20 62 79 74  |kips amount% byt|
00014f30  65 73 20 69 6e 20 66 69  6c 65 0d 49 d4 17 cf 23  |es in file.I...#|
00014f40  66 68 25 3d 61 6d 6f 75  6e 74 25 2b 8f 23 66 68  |fh%=amount%+.#fh|
00014f50  25 0d 49 de 05 e1 0d 49  e8 05 20 0d 49 f2 17 dd  |%.I....I.. .I...|
00014f60  f2 69 70 74 72 28 66 68  25 2c 6e 65 77 70 74 72  |.iptr(fh%,newptr|
00014f70  25 29 0d 49 fc 1d f4 20  53 65 74 73 20 6e 65 77  |%).I... Sets new|
00014f80  20 6f 66 66 73 65 74 20  69 6e 20 66 69 6c 65 0d  | offset in file.|
00014f90  4a 06 11 cf 23 66 68 25  3d 6e 65 77 70 74 72 25  |J...#fh%=newptr%|
00014fa0  0d 4a 10 05 e1 0d 4a 1a  05 20 0d 4a 24 0f dd a4  |.J....J.. .J$...|
00014fb0  69 70 74 72 28 66 68 25  29 0d 4a 2e 24 f4 20 52  |iptr(fh%).J.$. R|
00014fc0  65 74 75 72 6e 73 20 63  75 72 72 65 6e 74 20 6f  |eturns current o|
00014fd0  66 66 73 65 74 20 69 6e  20 66 69 6c 65 0d 4a 38  |ffset in file.J8|
00014fe0  0a 3d 8f 23 66 68 25 0d  4a 42 05 20 0d 4a 4c 0f  |.=.#fh%.JB. .JL.|
00014ff0  dd a4 69 6c 65 6e 28 66  68 25 29 0d 4a 56 1c f4  |..ilen(fh%).JV..|
00015000  20 52 65 74 75 72 6e 73  20 6c 65 6e 67 74 68 20  | Returns length |
00015010  6f 66 20 66 69 6c 65 0d  4a 60 0a 3d a2 23 66 68  |of file.J`.=.#fh|
00015020  25 0d 4a 6a 05 20 0d 4a  74 0f dd a4 69 65 6f 66  |%.Jj. .Jt...ieof|
00015030  28 66 68 25 29 0d 4a 7e  28 f4 20 52 65 74 75 72  |(fh%).J~(. Retur|
00015040  6e 73 20 65 6e 64 2d 6f  66 2d 66 69 6c 65 20 73  |ns end-of-file s|
00015050  74 61 74 75 73 20 6f 66  20 66 69 6c 65 0d 4a 88  |tatus of file.J.|
00015060  0a 3d c5 23 66 68 25 0d  4a 92 05 20 0d 4a 9c 0c  |.=.#fh%.J.. .J..|
00015070  dd f2 69 63 6c 6f 73 65  0d 4a a6 1c f4 20 43 6c  |..iclose.J... Cl|
00015080  6f 73 65 73 20 61 6c 6c  20 69 6e 70 75 74 20 66  |oses all input f|
00015090  69 6c 65 73 0d 4a b0 27  e7 46 31 25 3c 3e 30 20  |iles.J.'.F1%<>0 |
000150a0  8c 20 c8 99 20 22 58 4f  53 5f 46 69 6e 64 22 2c  |. .. "XOS_Find",|
000150b0  30 2c 46 31 25 3a 46 31  25 3d 30 0d 4a ba 27 e7  |0,F1%:F1%=0.J.'.|
000150c0  46 32 25 3c 3e 30 20 8c  20 c8 99 20 22 58 4f 53  |F2%<>0 . .. "XOS|
000150d0  5f 46 69 6e 64 22 2c 30  2c 46 32 25 3a 46 32 25  |_Find",0,F2%:F2%|
000150e0  3d 30 0d 4a c4 05 e1 0d  4a ce 05 20 0d 4a d8 1c  |=0.J....J.. .J..|
000150f0  dd f2 69 67 65 74 28 66  68 25 2c 61 64 72 25 2c  |..iget(fh%,adr%,|
00015100  61 6d 6f 75 6e 74 25 29  0d 4a e2 2d f4 20 52 65  |amount%).J.-. Re|
00015110  74 75 72 6e 73 20 61 6d  6f 75 6e 74 25 20 62 79  |turns amount% by|
00015120  74 65 73 20 61 74 20 61  64 72 25 20 66 72 6f 6d  |tes at adr% from|
00015130  20 66 69 6c 65 0d 4a ec  23 c8 99 20 22 4f 53 5f  | file.J.#.. "OS_|
00015140  47 42 50 42 22 2c 34 2c  66 68 25 2c 61 64 72 25  |GBPB",4,fh%,adr%|
00015150  2c 61 6d 6f 75 6e 74 25  0d 4a f6 05 e1 0d 4b 00  |,amount%.J....K.|
00015160  04 0d 4b 0a 0f dd a4 69  62 3a 3d 9a 23 46 31 25  |..K....ib:=.#F1%|
00015170  0d 4b 14 1b dd a4 69 64  62 3a 3d 9a 23 46 31 25  |.K....idb:=.#F1%|
00015180  3c 3c 38 20 84 20 9a 23  46 31 25 0d 4b 1e 27 dd  |<<8 . .#F1%.K.'.|
00015190  a4 69 74 62 3a 3d 9a 23  46 31 25 3c 3c 31 36 20  |.itb:=.#F1%<<16 |
000151a0  84 20 9a 23 46 31 25 3c  3c 38 20 84 20 9a 23 46  |. .#F1%<<8 . .#F|
000151b0  31 25 0d 4b 28 33 dd a4  69 77 62 3a 3d 9a 23 46  |1%.K(3..iwb:=.#F|
000151c0  31 25 3c 3c 32 34 20 84  20 9a 23 46 31 25 3c 3c  |1%<<24 . .#F1%<<|
000151d0  31 36 20 84 20 9a 23 46  31 25 3c 3c 38 20 84 20  |16 . .#F1%<<8 . |
000151e0  9a 23 46 31 25 0d 4b 32  1b dd a4 69 64 6c 3a 3d  |.#F1%.K2...idl:=|
000151f0  9a 23 46 31 25 20 84 20  9a 23 46 31 25 3c 3c 38  |.#F1% . .#F1%<<8|
00015200  0d 4b 3c 27 dd a4 69 74  6c 3a 3d 9a 23 46 31 25  |.K<'..itl:=.#F1%|
00015210  20 84 20 9a 23 46 31 25  3c 3c 38 20 84 20 9a 23  | . .#F1%<<8 . .#|
00015220  46 31 25 3c 3c 31 36 0d  4b 46 33 dd a4 69 77 6c  |F1%<<16.KF3..iwl|
00015230  3a 3d 9a 23 46 31 25 20  84 20 9a 23 46 31 25 3c  |:=.#F1% . .#F1%<|
00015240  3c 38 20 84 20 9a 23 46  31 25 3c 3c 31 36 20 84  |<8 . .#F1%<<16 .|
00015250  20 9a 23 46 31 25 3c 3c  32 34 0d 4b 50 15 dd a4  | .#F1%<<24.KP...|
00015260  69 62 66 28 66 68 25 29  3a 3d 9a 23 66 68 25 0d  |ibf(fh%):=.#fh%.|
00015270  4b 5a 39 dd a4 69 77 6c  66 28 66 68 25 29 3a 3d  |KZ9..iwlf(fh%):=|
00015280  9a 23 66 68 25 20 84 20  9a 23 66 68 25 3c 3c 38  |.#fh% . .#fh%<<8|
00015290  20 84 20 9a 23 66 68 25  3c 3c 31 36 20 84 20 9a  | . .#fh%<<16 . .|
000152a0  23 66 68 25 3c 3c 32 34  0d 4b 64 04 0d 4b 6e 20  |#fh%<<24.Kd..Kn |
000152b0  dd f2 6f 62 66 28 66 68  25 2c 76 61 6c 25 29 3a  |..obf(fh%,val%):|
000152c0  d5 23 66 68 25 2c 76 61  6c 25 3a e1 0d 4b 78 40  |.#fh%,val%:..Kx@|
000152d0  dd f2 6f 74 62 66 28 66  68 25 2c 76 61 6c 25 29  |..otbf(fh%,val%)|
000152e0  3a d5 23 66 68 25 2c 76  61 6c 25 3e 3e 3e 31 36  |:.#fh%,val%>>>16|
000152f0  3a d5 23 66 68 25 2c 76  61 6c 25 3e 3e 3e 38 3a  |:.#fh%,val%>>>8:|
00015300  d5 23 66 68 25 2c 76 61  6c 25 3a e1 0d 4b 82 40  |.#fh%,val%:..K.@|
00015310  dd f2 6f 74 6c 66 28 66  68 25 2c 76 61 6c 25 29  |..otlf(fh%,val%)|
00015320  3a d5 23 66 68 25 2c 76  61 6c 25 3a d5 23 66 68  |:.#fh%,val%:.#fh|
00015330  25 2c 76 61 6c 25 3e 3e  3e 38 3a d5 23 66 68 25  |%,val%>>>8:.#fh%|
00015340  2c 76 61 6c 25 3e 3e 3e  31 36 3a e1 0d 4b 8c 50  |,val%>>>16:..K.P|
00015350  dd f2 6f 77 6c 66 28 66  68 25 2c 76 61 6c 25 29  |..owlf(fh%,val%)|
00015360  3a d5 23 66 68 25 2c 76  61 6c 25 3a d5 23 66 68  |:.#fh%,val%:.#fh|
00015370  25 2c 76 61 6c 25 3e 3e  3e 38 3a d5 23 66 68 25  |%,val%>>>8:.#fh%|
00015380  2c 76 61 6c 25 3e 3e 3e  31 36 3a d5 23 66 68 25  |,val%>>>16:.#fh%|
00015390  2c 76 61 6c 25 3e 3e 3e  32 34 3a e1 0d 4b 96 04  |,val%>>>24:..K..|
000153a0  0d 4b a0 15 dd f2 6f 73  74 72 69 6e 67 28 66 68  |.K....ostring(fh|
000153b0  25 2c 77 24 29 0d 4b aa  1c f4 20 4f 75 74 70 75  |%,w$).K... Outpu|
000153c0  74 73 20 73 74 72 69 6e  67 20 74 6f 20 66 69 6c  |ts string to fil|
000153d0  65 0d 4b b4 08 ea 20 69  25 0d 4b be 23 e3 20 69  |e.K... i%.K.#. i|
000153e0  25 3d 31 20 b8 20 a9 77  24 3a d5 23 66 68 25 2c  |%=1 . .w$:.#fh%,|
000153f0  97 c1 77 24 2c 69 25 2c  31 29 3a ed 0d 4b c8 05  |..w$,i%,1):..K..|
00015400  e1 0d 4b d2 04 0d 4b dc  11 dd f2 69 6e 69 74 5f  |..K...K....init_|
00015410  6d 6f 64 75 6c 65 0d 4b  e6 18 f4 20 49 6e 69 74  |module.K... Init|
00015420  69 61 6c 69 73 65 73 20  6d 6f 64 75 6c 65 0d 4b  |ialises module.K|
00015430  f0 2e c8 99 20 22 54 72  61 6e 73 6c 61 74 6f 72  |.... "Translator|
00015440  5f 4d 61 6b 65 4d 61 70  73 22 3a f4 20 49 6e 69  |_MakeMaps":. Ini|
00015450  74 69 61 6c 69 73 65 20  6d 61 70 73 0d 4b fa 2d  |tialise maps.K.-|
00015460  c8 99 20 22 54 72 61 6e  73 6c 61 74 6f 72 5f 54  |.. "Translator_T|
00015470  61 73 6b 53 74 61 72 74  22 3a f4 20 52 65 67 69  |askStart":. Regi|
00015480  73 74 65 72 20 74 61 73  6b 0d 4c 04 05 e1 0d 4c  |ster task.L....L|
00015490  0e 05 20 0d 4c 18 1a dd  f2 76 61 72 28 76 61 72  |.. .L....var(var|
000154a0  6e 61 6d 65 24 2c 76 61  6c 75 65 25 29 0d 4c 22  |name$,value%).L"|
000154b0  1c f4 20 57 72 69 74 65  73 20 6d 6f 64 75 6c 65  |.. Writes module|
000154c0  20 76 61 72 69 61 62 6c  65 0d 4c 2c 3b 24 64 75  | variable.L,;$du|
000154d0  6d 25 3d 76 61 72 6e 61  6d 65 24 3a c8 99 20 22  |m%=varname$:.. "|
000154e0  54 72 61 6e 73 6c 61 74  6f 72 5f 53 65 74 56 61  |Translator_SetVa|
000154f0  72 69 61 62 6c 65 22 2c  21 64 75 6d 25 2c 76 61  |riable",!dum%,va|
00015500  6c 75 65 25 0d 4c 36 05  e1 0d 4c 40 05 20 0d 4c  |lue%.L6...L@. .L|
00015510  4a 13 dd a4 76 61 72 28  76 61 72 6e 61 6d 65 24  |J...var(varname$|
00015520  29 0d 4c 54 1b f4 20 52  65 61 64 73 20 6d 6f 64  |).LT.. Reads mod|
00015530  75 6c 65 20 76 61 72 69  61 62 6c 65 0d 4c 5e 0c  |ule variable.L^.|
00015540  ea 20 76 61 6c 75 65 25  0d 4c 68 3e 24 64 75 6d  |. value%.Lh>$dum|
00015550  25 3d 76 61 72 6e 61 6d  65 24 3a c8 99 20 22 54  |%=varname$:.. "T|
00015560  72 61 6e 73 6c 61 74 6f  72 5f 52 65 61 64 56 61  |ranslator_ReadVa|
00015570  72 69 61 62 6c 65 22 2c  21 64 75 6d 25 20 b8 20  |riable",!dum% . |
00015580  76 61 6c 75 65 25 0d 4c  72 0b 3d 76 61 6c 75 65  |value%.Lr.=value|
00015590  25 0d 4c 7c 05 20 0d 4c  86 12 dd a4 4f 53 76 61  |%.L|. .L....OSva|
000155a0  72 28 6e 61 6d 65 24 29  0d 4c 90 2e f4 20 41 74  |r(name$).L... At|
000155b0  74 65 6d 70 74 73 20 74  6f 20 72 65 74 75 72 6e  |tempts to return|
000155c0  20 4f 53 2d 76 61 72 27  73 20 73 74 72 69 6e 67  | OS-var's string|
000155d0  20 76 61 6c 75 65 0d 4c  9a 0d ea 20 5f 72 24 2c  | value.L... _r$,|
000155e0  5f 6c 25 0d 4c a4 43 5f  72 24 3d c4 31 30 30 2c  |_l%.L.C_r$=.100,|
000155f0  22 20 22 29 3a c8 99 20  22 58 4f 53 5f 52 65 61  |" "):.. "XOS_Rea|
00015600  64 56 61 72 56 61 6c 22  2c 6e 61 6d 65 24 2c 5f  |dVarVal",name$,_|
00015610  72 24 2c a9 5f 72 24 2c  30 2c 33 20 b8 20 2c 5f  |r$,._r$,0,3 . ,_|
00015620  72 24 2c 5f 6c 25 0d 4c  ae 0e 3d c0 5f 72 24 2c  |r$,_l%.L..=._r$,|
00015630  5f 6c 25 29 0d 4c b8 04  0d ff                    |_l%).L....|
0001563a