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

Pictures/!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-02.adf » PD-Stuff
Filename: Pictures/!Translatr/!RunImage
Read OK:
File size: 113F5 bytes
Load address: 0000
Exec address: 0000
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents

� >!RunImage
K��������������������������������������������������������������������
K� Converts foreign graphics files to Archimedes              (RISCWARE)
(-� Version date : Sat,07 Jul 1990.11:59:46
2� � 1990 Zeridajh software
<� by John Kortink
FK��������������������������������������������������������������������
P1� � �0:�'"Error"''"'";�$;"' (code ";�;")"'':�
Z:� menu1 &400,submenu1 &400,submenu2 &400,submenu3 &400
d,� window1 &100,window2 &100,window3 &200
n,� window4 &400,window5 &600,window6 &200
x/� iconsprites 2048,icondata 4096,icondend 0
�D� poll 256,block 256,err 256,wimppal 256,pointer 512,stroff 4096
�E� InPal%(256),ImgPal%(256),ShowPal%(256),UserModeSet%(4),File(10)
�'� arg% 1024,dum% 1024,transtab% 256
�5� palrgb% 1024,hambas% 64,freq% 1024,outpal% 1024
�LProgneed%=120*1024:� Estimated space needed for program+vars (no sprbuf)
�7Totalfree%=�-�:� Total free for program+vars+sprbuf
�=Spritesize%=Totalfree%-Progneed%:� Free for sprite buffer
�E�Spritesize%<1024 � � 1,"No room to start up Translator properly"
�)� Sprite% Spritesize%:� Sprite buffer
�(�initialise:� Initialise application
�4�mode_change(-1):� Reselect current mode to tidy
�-� � �error(�,�$+" (code "+Þ+")"):�iclose
���Spritesize%<80*1024 � �error(0,"WARNING ! I have only "+�(Spritesize%)+" bytes free for image handling. Press OK to continue with this tricky situation or CANCEL to quit (and reserve some more memory !)")
� � Poll and action
D�DataLoadRef% � pollmask%=48 � pollmask%=49:� No nulls if wasted
Ȏ �poll(pollmask%) �
"0 � 0 : �null:� Nothing to do, perform checks
,* � 1 : �redraw:� Redraw window request
6& � 2 : �open:� Open window request
@( � 3 : �close:� Close window request
J& � 6 : �mouseclick:� Mouse clicked
T? � 7 : �dragdrop:� User has dropped drag box of file window
^ � 8 : �key:� Key pressed
h1 � 9 : �menuselect:� Menu selection from user
r+ � 17,18 : �message:� Message from WIMP
|�
�� �
�
���menuselect
�?ș WDecodeM%,,menu1,poll,�100," ") � ,,,select$:� Selection
�-� Decode main/sub/subsub selection string
�*menupath$=select$:� Remember menu path
�Pselect2=�:select3=�:select4=�:select2$="":select3$="":select4$="":� 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$,".")
�G�p%>0 � select4=�:select4$=�select3$,p%+1):select3$=�select3$,p%-1)
�4� Filter clicks on roots of entries with submenu
�Ȏ menupath$ �
�s � "Image info","Pop up","Processing","Zoom image","Mirror image","Save image","Status" : �select2 � select$=""
�� � "Processing.Output mode","Processing.Output palette","Processing.Image number","Pop up.Mode set","Zoom.In","Zoom.Out","Processing.Scaling" : �select3 � select$=""
L � "Processing.Scaling.x","Processing.Scaling.y" : �select4 � select$=""
�
Ȏ select$ �
& � "" : � Do nothing
0 � "Quit" : � Quit program
:  �die:� Tidy up and exit
D" � "Pop up" : � Pop up options
N  Ȏ select2$ �
X:   � "Auto mode" : � Toggle auto mode selection on/off
b#    AutoMode=�AutoMode:� Toggle
l@   � "Auto palette" : � Toggle auto palette selection on/off
v!    AutoPal=�AutoPal:� Toggle
�+   � "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'.")
�	    �
�%    �submenu("Pop up.Mode set",�)
�)   � "Auto zoom" : � Toggle auto zoom
�#    AutoZoom=�AutoZoom:� Toggle
  �
  �submenu("Pop up",�)
* � "Processing" : � Processing options
   Ȏ select2$ �
*1   � "Clear output" : � Clear output file off
4:    �ClearFile � ș "OS_File",6,ClearSave$:ClearFile=�
>7   � "Output mode" : � Change output mode selection
H0    �select3$="Auto" � OutMode=1 � OutMode=2
R,    �submenu("Processing.Output mode",�)
\=   � "Output palette" : � Change output palette selection
fR    �select3$="Current" � OutPal=1 � �select3$="Default" � OutPal=2 � OutPal=3
p/    �submenu("Processing.Output palette",�)
z+   � "Scaling" : � Change scale factors
�    Ȏ select3$ �
�2     � "1:1" : XMul%=1:YMul%=1:XDiv%=1:YDiv%=1
�u     � "x","y" : mul%=-1:div%=-1:s$=select4$:p%=�s$,":"):�p%>0 � mul%=�s$:s$=�s$,p%+1):div%=�s$:� Get new factors
�,      �(mul%<=0)�(div%<=0)�(mul%>div%) �
�W       �error(-1,"Please enter <mul>:<div>, where <mul> is not greater than <div>")
�b      � �select3$="x" � XMul%=mul%:XDiv%=div% � YMul%=mul%:YDiv%=div%:� Update scaling factors
�      �
�	    �
�(    �submenu("Processing.Scaling",�)
�<   � "Error spreading" : � Toggle error spreading on/off
�%    ErrSpread=�ErrSpread:� Toggle
�5   � "Black and white" : � Toggle black and white
�    BlackWhite=�BlackWhite
%   � "Zig zag" : � Toggle zig zag
    ZigZag=�ZigZag
5   � "Screen blanking" : � Toggle screen blanking
$    Blanking=�Blanking
..   � "Invert RGB" : � Toggle RGB inverting
8    InvertRGB=�InvertRGB
B'   � "GIF scan" : � Toggle GIF scan
L    GIFScan=�GIFScan
V(   � "Image number" : � Image number
`9    ImageNr%=�(select3$):� New value for image number
j-    �submenu("Processing.Image number",�)
t  �
~  �submenu("Processing",�)
�1 � "Zoom image" : � Zoom in, out, normal size
�?  OldZoomX=ZoomX:OldZoomY=ZoomY:� Remember old zoom factors
�  Ȏ select2$ �
�}   � "In": �select3$="Both" � ZoomX=ZoomX*2:ZoomY=ZoomY*2 � �select3$="x" � ZoomX=ZoomX*2 � �select3$="y" � ZoomY=ZoomY*2
�~   � "Out": �select3$="Both" � ZoomX=ZoomX/2:ZoomY=ZoomY/2 � �select3$="x" � ZoomX=ZoomX/2 � �select3$="y" � ZoomY=ZoomY/2
�   � "1:1": ZoomX=1:ZoomY=1
�  �
�J  � Set image window extent and title according to current zoom factor
�A  !block=0:block!4=0:block!8=�sprW*ZoomX:block!12=�sprH*ZoomY
�A  ș WSetE%,win_img%,block:� Set window extent to zoomed size
�&  $IMWtt%=�image_title:� New title
�@  !block=win_img%:ș WGetWS%,,block:� Read window's position
J  dx%=(block!12-block!4)/2:dy%=(block!16-block!8)/2:� Half window size

F  vx%=block!20+dx%:vy%=block!24-dy%:� Vector from centre to origin
G  � Calculate new scroll offsets by scaling vector and re-transpose
E  block!20=vx%*ZoomX/OldZoomX-dx%:block!24=vy%*ZoomY/OldZoomY+dy%
(:  �close_window(win_img%):�open_window(win_img%,block)
2  �submenu("Zoom image",�)
<3 � "Save image" : � Save whole or part of image
F0  SaveKind$=select2$:� Remember type of save
PF  $SAVfn%=SaveSpr$:$SAVsn%="file_ff9":� Set file window for sprite
Z2  �open_window(win_file%,0):� Open file window
d7 � "Include palette" : � Toggle save-palette on/off
n!  Palonoff=�Palonoff:� Toggle
x/ � "Image palette" : � Select image palette
�  �set_palette(1)
�' � "Rotate image" : � Rotate sprite
�  �hour_on:� Hourglass on
�4  ș "Translator_Rotate",SprPtr%:� Rotate sprite
�  �hour_off:� Hourglass off
�>  �sprite_header(1):Ȕ SprH%,SprW%:� Set sprite info right
�@  �new_image_window:�new_window(win_img%):� New image window
�& � "Mirror image" : � Mirror image
�9  �var("widt",SprW%):�var("heig",SprH%):� Module info
�  �hour_on:� Hourglass on
�g  �select2$="x" � ș "Translator_MirrorX",SprPtr% � ș "Translator_MirrorY",SprPtr%:� Mirror sprite
�  �hour_off:� Hourglass off
�2  �new_window(win_img%):� Freshen image window
' � "Status" : � Manipulate defaults
  Ȏ select2$ �
�   � "Save" : Status=�("<Translator$Dir>.Status"):�#Status,AutoMode,AutoPal,ModeSet,ErrSpread,Palonoff,UserModeSet%(1),UserModeSet%(2),UserModeSet%(3),UserModeSet%(4),AutoZoom,BlackWhite,GIFScan,Blanking,InvertRGB
"     �#Status,ZigZag:�#Status
,b   � "Load" : �load_status � �error(-1,"I cannot find my status file ! Have you saved one ?")
6:   � "Kill" : ș "OS_File",6,"<Translator$Dir>.Status"
@  �
J�
T(ș WGetPI%,,block:� Get pointer info
^;�((block!8)�1)>0 � �options_menu(�):� Adjust -> re-open
h�
r
|��close
�win%=poll!0:� Window handle
�&�close_window(win%):� Close window
�O�win%=win_img% � �invalidate_image:�set_palette(0):�close_window(win_file%)
��
�
�
��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
0�
:�
D
N	��key
XEwin%=poll!0:ico%=poll!4:char%=poll!24:� Window, icon, key pressed
b"�(win%=win_file%) � (ico%=1) �
l Ȏ char% �
v  � 13 : � Return pressed
�J   �error(-1,"Please drag the sprite file icon to a directory viewer")
�  � 27 : � Escape pressed
�   �close_window(win_file%)
� �
��
��
�
�
��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% �
4I   Save$=�string(poll+44):� Full pathname of file to be saved/created
>.   � Save sprite file or 'open' Clear file
H�   �$SAVsn%="file_ff9" � SprSave$=Save$:�save_sprite(SprSave$) � ClearSave$=Save$:ș "OS_File",11,ClearSave$,&690,0,0:ClearFile=�
R?   poll!12=poll!8:poll!16=3:� Amend data block for DataLoad
\2   ș WSendMsg%,18,poll,poll!4:� Send DataLoad
f@   DataLoadRef%=poll!8:� Await a DataLoadAck, remember myref
p  �
z. � 3,5 : � DataLoad/Open : attempt to load
�  type%=poll!40:� Filetype
�'  name$=�string(poll+44):� Filename
�  Ȏ type% �
�O   � &690,&691,&692,&693,&694,&695,&696,&697,&698,&FF0 : �load(type%,name$)
�B   � &FF9,&DE2,&DFA,&D58,&004 : �msgnr%=3 � �load(type%,name$)
�@   : � Filetype not recognized, look at contents if dragged
�   �msgnr%=3 �
�S    Head=�(name$):id$="":� i%=1 � 12:id$+=�(�#Head):�:�#Head:� Get head of file
�)    type%=-1:� No recognized type yet
�Z    �id$,6)="GIF87a" � type%=&695 � �(�id$,4)="FORM") � (�id$,4)="ILBM") � type%=&693
�m    �type%=-1 � �id$,4)=�&59+�&A6+�&6A+�&95 � type%=&696 � �(�id$,2)="II") � (�id$,2)="MM") � type%=&FF0
�    �type%>0 � ș "OS_CLI","SetType "+name$+" "+�~(type%):�load(type%,name$) � �error(-1,"I don't recognize this file. Please filetype it appropiately."):� Filetype and load or complain
�   �
	  �
	) � 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
	8A  ș WDecodeM%,,menu1,poll+32,�100," ") � ,,,path$:� Get path
	B  Ȏ path$ �
	L�   � "Processing.Clear output" : $SAVfn%=SaveClear$:$SAVsn%="file_690":ș WCreateSM%,,pointer%,x%,y%:� Open file window for Clear file
	Vd   � "Image info","Info","Filetypes","Processing.RGB resolution" : ș WCreateSM%,,pointer%,x%,y%
	`    : �submenu(path$,�)
	j  �
	t@ � &400C1 : � Mode has changed (and it may not have been me)
	~   �mode_change(-1):� Tidy up
	�6 � &CCE00 : � Other Translator asks to kill module
	�>  poll!12=poll!8:ș WSendMsg%,19,poll,poll!4:� Hands off !
	��
	��
	� 
	���mouseclick
	�?but%=poll!8:win%=poll!12:ico%=poll!16:� Buttons/window/icon
	�
Ȏ win% �
	� � -2 : � Click on iconbar
	�  �ico%=Iiconbar% �
	�   � Iconbar icon clicked
	�   Ȏ but% � 7 �
�    � 2 : �create_menu(-1,0,"Translator",10*16,40,0," Info"+"#"+�(win_info%)+"| Filetypes"+"#"+�(win_filet%)+"| Quit|","",�)

     � 1,4 : �options_menu(�)
   �
  �
() � win_img% : � Click on image window
2  Ȏ but% � 7 �
<8   � 2 : �options_menu(�):� Menu button, pop up menu
F  �
P) � win_file% : � Click on file window
Z  �ico%=0 �
d   Ȏ but% � &7F �
n9    � 16,64 : � Drag,calculate drag box and create it
x�     !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
,Gdropwin%=block!12:dropico%=block!16:� Window/icon where box dropped
6(save$=�string(SAVfn%):� Get leafname
@o�$SAVsn%="file_ff9" � SaveSpr$=save$:ft%=&FF9 � SaveClear$=save$:ft%=&690:� Remember leafname, set filetype
J�block!20=block!12:block!24=block!16:block!28=block!0:block!32=block!4:block!12=0:block!16=1:block!36=0:block!40=ft%:$(block+44)=save$+�0:!block=(44+�save$+4)��3
T;ș WSendMsg%,17,block,dropwin%,dropico%:� Send DataSave
^6DataSaveRef%=block!8:� Remember myref for DataSave
h0�close_window(win_file%):� Close file window
r�
| 
���load(type%,name$)
�� Loads image file
�Kpoll!12=poll!8:poll!16=4:ș WSendMsg%,17,poll,poll!4:� Send DataLoadAck
�Load$=name$:� Filename
�{pos%=�Load$:� pos%-=1:period=(�Load$,pos%,1)="."):� (pos%=1) � period:�period � Leaf$=�Load$,�Load$-pos%) � Leaf$=Load$
�5ș "OS_File",17,Load$ � ,,,,Flen%:� File's length
� File(1)=�(Load$):� Open file
�9�var("fhan",File(1)):�var("fptr",0):� REM Module info
�'iType%=0:� Default input byte order
��hour_on:� Hourglass on
�?�win_img%>0 � �close_window(win_img%):� Old image discarded
�?�invalidate_image:� New image to come, invalidate old image
�Ȏ type% �
� � &FF9 : p%=�"."+�upstring(name$),".HIP."):�p%>0 � loppath$=name$:�loppath$,p%,3)="LOP":File(2)=�(loppath$):�File(2)=0 � �error(-1,"I cannot find the ArVis LOP file !"):�
b  �p%=0 � Ok=�pic_ARC � �var("fha2",File(2)):�var("fpt2",0):Ok=�pic_ARVIS:� What's this then ?
 � &DE2 : Ok=�pic_PROART
& � &DFA : Ok=�pic_WATFORD
0 � &D58 : Ok=�pic_RENDER
: � &004 : Ok=�pic_AIM
D � &690 : Ok=�pic_CLEAR
N � &691 : Ok=�pic_DEGAS
X � &692 : Ok=�pic_IMG
b � &693 : Ok=�pic_IFF
l � &694 : Ok=�pic_MAC
v � &695 : Ok=�pic_GIF
� � &696 : Ok=�pic_SUN
� � &697 : Ok=�pic_PCX
� � &698 : Ok=�pic_QRT
� � &FF0 : Ok=�pic_TIFF
��
�$Img=Ok:� Image ok if all is well
��hour_off:� Hourglass off
��iclose:� Close input files
�
�Img �
�, �set_mode(ImgMode%):� Select image mode
�) ZoomX=1:ZoomY=1:� Reset zoom factors
�A �AutoPal � �set_palette(1):� Select image palette if enabled
�- �new_image_window:� Open window on image

�

�



 ��save_sprite(out$)

*� Saves image as spritefile

4Ȏ SaveKind$ �

>1 � "Full" : � Full resolution sprite, no edit

H  � "Whole" : �edit_part(�,�)

R) � "Whole (scaled)" : �edit_part(�,�)

\ � "Part" : �edit_part(�,�)

f( � "Part (scaled)" : �edit_part(�,�)

p�

z�hour_on:� Hourglass on

��SaveKind$="Full" �

�8 � Full sprite, save image with palette (optionally)

�# Out=�(out$):� Open output file

�- spr%=Sprite%+Sprite%!8:� Start of sprite

�, cols%=2^SprColbits%:� Colours in sprite

� �Palonoff � (cols%<>256) �

�"  � Save with palette included

�.  extra%=cols%*8:� Extra bytes 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

�A  !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
9  ș "OS_GBPB",2,Out,spr%+40,4:� Output sprite's mode
�  � c%=1 � cols%:arg%!(c%*8-8)=�readpalval(ImgPal%(c%)):arg%!(c%*8-4)=arg%!(c%*8-8):�:ș "OS_GBPB",2,Out,arg%,cols%*8:� Output palette
$F  ș "OS_GBPB",2,Out,spr%+spr%!32,(spr%!16+1)*(spr%!20+1)*4:� Data
.) � � No palette, output the whole lot
8>  ș "OS_GBPB",1,Out,Sprite%+4,Sprite%!12-4,0:� Output all
B �
L? �#Out:ș "OS_CLI","SetType "+out$+" Sprite":� Close & type
V0� � Edited part in window on screen, save it
`( �invalidate_screen:� Screen invalid
j  �Palonoff � pal%=1 � pal%=0
t4 ș 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)
�+iType%=0:� Set low-to-high type of data
�9compr%=�i1(1):res%=�i1(1):� Flags, resolution (1/2/3)
�7compressed=((compr%�%10000000)>0):� Compressed flag
�#total%=32000:� Total data bytes
�
Ȏ res% �
�) � 0 : xres%=320:yres%=200:colbits%=4
) � 1 : xres%=640:yres%=200:colbits%=2

) � 2 : xres%=640:yres%=400:colbits%=1
�
+colours%=2^colbits%:� Number of colours
(6mode%=�mode(xres%,yres%,colours%):� Determine mode
2)�new_image(mode%,xres%,yres%,0) � =�
<-�iget(1,dum%,32):� Read palette from file
F�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%:�
P[�compressed � compr$="Run length":type$="PC"+�(res%+1) � compr$="":type$="PI"+�(res%+1)
Z\�image_info("Atari Degas "+type$,xres%,yres%,0,colbits%,mode%,compr$,"",Flen%-34,total%)
du�var("comp",compressed):�var("rest",res%):�var("widt",xres%):�var("heig",yres%):�var("fptr",&22):�unpack("DEGAS")
nImgMode%=mode%:=�
x 
�
ݤpic_IMG
�� Makes Atari IMG image
�+iType%=1:� Set high-to-low type of data
�Qversion%=�i2(1):headlen%=�i2(1):nplanes%=�i2(1):� Version, headlength, planes
�Qpatlen%=�i2(1):pw%=�i2(1):ph%=�i2(1):� Pattern length, pixel width and height
�=width%=�i2(1):height%=�i2(1):� Width and height in pixels
�+colours%=2^nplanes%:� Number of colours
��colours%<>2 � patlen%<>2 � �error(-1,"I cannot display Atari IMG images with more than 2 colours or patternlength<>2 !"):�
�9mode%=�mode(width%,height%,colours%):� Determine mode
�,�new_image(mode%,width%,height%,0) � =�
�BInPal%(0)=nplanes%:InPal%(1)=0:InPal%(2)=&FFFFFF:� Set palette
�{�image_info("Atari IMG",width%,height%,0,nplanes%,mode%,"Several ways","",Flen%-headlen%*2,(width%*height%*nplanes%)�8)
�S�var("widt",width%):�var("heig",height%):�var("fptr",headlen%*2):�unpack("IMG")
ImgMode%=mode%:=�
 

ݤpic_MAC
"$� Makes MacIntosh MacPaint image
,2width%=576:height%=720:colbits%=1:� Resolution
6;mode%=�mode(width%,height%,2^colbits%):� Determine mode
@,�new_image(mode%,width%,height%,0) � =�
JBInPal%(0)=colbits%:InPal%(1)=0:InPal%(2)=&FFFFFF:� Set palette
Tk�image_info("MacIntosh MacPaint",width%,height%,0,colbits%,mode%,"Run length","",Flen%-640,(576*720)�8)
^L�var("widt",width%):�var("heig",height%):�var("fptr",640):�unpack("MAC")
hImgMode%=mode%:=�
r 
|
ݤpic_IFF
�� Makes Amiga IFF image
�%bmhd=�:cmap=�:body=�:� Init flags
�2ham=�:lace=�:hires=�:halfbright=�:� Init flags
�+iType%=1:� Set high-to-low type of data
�2� Check if this is a standard IFF picture file
��form$=�istring(1,4):�iskip(1,4):form$+=�istring(1,4):�form$<>"FORMILBM" � �error(-1,"This screen file is not an IFF screen file !"):=�
�)� � Follow BMHD,CMAP and BODY headers
�7head$=�istring(1,4):hlen%=�i4(1):startptr%=�iptr(1)
�Ȏ head$ �
�& � "BMHD" : bmhd=�:� Bitmap header
�=       � Read picture/screen width, height, colours, etc.
�N       width%=�i2(1):height%=�i2(1):�iskip(1,4):planes%=�i1(1):�iskip(1,1)
�M       compressed=(�i1(1)=1):�iskip(1,5):s_width%=�i2(1):s_height%=�i2(1)
@ � "CAMG" : flags%=�i4(1):� Get flag bits, set flags from it
5       ham=((flags%�&800)>0):lace=((flags%�&4)>0)
?       hires=((flags%�&8000)>0):halfbright=((flags%�&80)>0)
&- � "CMAP" : cmap=�:� Colour map (palette)
0B       paldefs%=hlen%�3:� Number of palette colour definitions
:4       � _%=0 � paldefs%-1:InPal%(_%+1)=�i3(1):�
D$ � "BODY" : body=�:� Screen data
N)       � Check if all parts are there
X�       �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 !"):� �:=�
b6       � Determine suitable Archimedes screen mode
l       �ham �
v�        mode%=�mode(320,s_height%,256):colbits%=12:info$="HAM (Hold And Modify)":InPal%(0)=colbits%:� c%=0 � 15:hambas%!(c%<<2)=InPal%(c%+1):�:�var("hamb",hambas%)
�t       � colours%=2^planes%:mode%=�mode(s_width%,s_height%,colours%):colbits%=planes%:InPal%(0)=planes%:info$=""
�x        �halfbright � info$="Half-bright":half%=colours%�2:� c%=1 � half%:InPal%(c%+half%)=(InPal%(c%)�&E0E0E0)>>1:�
�       �
�3       �new_image(mode%,width%,height%,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(1),(width%*height%*planes%)�8)
�1       �ham � �var("scty",1) � �var("scty",0)
Ѕ       �var("fptr",�iptr(1)):�var("plan",planes%):�var("widt",width%):�var("heig",height%):�var("comp",compressed):�unpack("IFF")
�       ImgMode%=mode%
��
�9�iskip(1,hlen%-(�iptr(1)-startptr%)):� To next header
�
� body
=�
 

ݤpic_GIF
 3� Makes GIF (Graphics Interchange Format) image
*&� g_InPal%(),Pic_ptr%(),Pic_len%()
4/� g_InPal%(256),Pic_ptr%(256),Pic_len%(256)
>+iType%=0:� Set low-to-high type of data
H1signature$=�istring(1,6):� Read GIF signature
RX�signature$,3)<>"GIF" � �error(-1,"This screen file is not a GIF screen file !"):=�
\$� Read data in Screen Descriptor
f2r_width%=�i2(1):r_height%=�i2(1):� Raster size
pDflags%=�i1(1):backgr%=�i1(1):�iskip(1,1):� Flags and back colour
z;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 �
�j � c%=1 � 2^g_pixbits%:g_InPal%(c%)=(�i1(1)<<16)+(�i1(1)<<8)+�i1(1):�:� Read Global Colour Map palette
�- 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
�&� Search for next Image Descriptor
�F� _%=�i1(1):image=(_%=�","):end=(_%=�";"):� image � end � �ieof(1)
�~�image � �end � �error(-1,"Warning ! GIF file is not properly terminated !"):end=�:�hour_off:�hour_on:� Read beyond file
�image �
" � Register picture's position
. picture%+=1:Pic_ptr%(picture%)=�iptr(1)-1
$j �iskip(1,8):_%=�i1(1):�(_%�&80)>0 � �iskip(1,3*2^((_%�7)+1)):� If there's a local colour map, skip it
. �GIFScan �
80  � Determine picture data length, skip data
B1  �iskip(1,1):� c%=�i1(1):�iskip(1,c%):� c%=0
L4  Pic_len%(picture%)=�iptr(1)-Pic_ptr%(picture%)
V; � Pic_len%(picture%)=�ilen(1)-Pic_ptr%(picture%):end=�
` �
j�
t	� 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 file contains "+�(pictures%)+" images. Select '1'-'"+�(pictures%)+"' in the 'Image number' submenu !"):=�
�� picture%=1
��
�I�iptr(1,Pic_ptr%(picture%)+1):len%=Pic_len%(picture%):� Pic pos & len
� � Read Image Descriptor data
�4i_left%=�i2(1):i_top%=�i2(1):� Position in frame
�Ci_width%=�i2(1):i_height%=�i2(1):flags%=�i1(1):� Size and flags
�7local=(flags%�&80)>0:� Local colour map following ?
�<ibit=(flags%�&40)>0:� Image stored in interlaced order ?
�2l_pixbits%=(flags%�7)+1:� Local bits per pixel
�local �

@ pixbits%=l_pixbits%:� Read and use Local Colour Map palette
V � c%=1 � 2^l_pixbits%:InPal%(c%)=(�i1(1)<<16)+(�i1(1)<<8)+�i1(1):�:� Read palette
+ InPal%(0)=l_pixbits%:� Palette entries
(?� pixbits%=g_pixbits%:InPal%()=g_InPal%():� Use Global data
2�
<N�InPal%(0)=-1 � �error(-1,"I cannot find a palette in this GIF file !"):=�
F+colours%=2^pixbits%:� Number of colours
P/� Determine suitable Archimedes screen mode
Z=mode%=�mode(r_width%,r_height%,colours%):� Determine mode
d;� Room needed for decompression data and de-interlacing
nd�pixbits%<=2 � rbits%=pixbits% � �pixbits%<=4 � rbits%=4 � rbits%=8:� Round up bpp to sprite bpp
xEroom%=(((i_width%*rbits%+31)>>5)<<2)*i_height%+1024:� Room needed
�4�new_image(mode%,i_width%,i_height%,room%) � =�
�'�GIFScan � np$=�pictures% � np$="?"
���image_info(signature$,i_width%,i_height%,0,pixbits%,mode%,"LZW",np$+" pics (this is "+�times(picture%)+")",len%,(i_height%*i_width%*pixbits%)�8)
�+�ibit � �var("lace",1) � �var("lace",0)
�U�var("fptr",�iptr(1)):�var("widt",i_width%):�var("heig",i_height%):�unpack("GIF")
�ImgMode%=mode%:=�
� 
���skip_GIF_extension
�?� Skips a GIF Extension Block if present at current pointer
�� _%
��(�i1(1))=�"!" �
�% �iskip(1,1):� Skip function code
�< � _%=�i1(1):�iskip(1,_%):� _%=0:� Skip data byte blocks
� �iskip(1,-1)
�
�
" 
,
ݤpic_ARC
6#� Loads Archimedes sprite image
@+iType%=0:� Set low-to-high type of data
JHpictures%=�i4(1):ofirst%=�i4(1):� Number of sprites, offset to first
T��(ImageNr%>0) � (ImageNr%<=pictures%) � picture%=ImageNr% � �error(-1,"This file contains "+�(pictures%)+" images. Select '1'-'"+�(pictures%)+"' in the 'Image number' submenu !"):=�
^1�iskip(1,ofirst%-8-4):� Start of first sprite
hEskip%=pictures%-picture%:ȕ skip%>0:�iskip(1,�i4(1)-4):skip%-=1:�
rGstart%=�iptr(1):�iskip(1,16):� Remember start, skip offset and name
|Fwords%=�i4(1)+1:height%=�i4(1)+1:� Width in words, height in lines
�7bfirst%=�i4(1):blast%=�i4(1):� First/last bits used
�Foimage%=�i4(1):�iskip(1,4):sprmode%=�i4(1):� Offset to image, mode
�Bcolbits%=2^�mode_var(sprmode%,9):colours%=2^colbits%:� Colours
�#�(oimage%<=44)�(colours%=256) �
�> � No palette or 256-colour palette : set standard palette
�) �standard_palette(InPal%(),colbits%)
ˆ� InPal%(0)=colbits%:� c%=1 � colours%:p%=�i4(1):InPal%(c%)=((p%�&FF00)<<8)+((p%�&FF0000)>>8)+(p%>>>24):�iskip(1,4):�:� Read palette
��
�Bxres%=(words%*32-bfirst%-(31-blast%)) � colbits%:yres%=height%
��available_mode(sprmode%) � mode%=sprmode% � mode%=�mode(xres%,yres%,colours%):� Determine other mode if sprite's mode won't do
�)�new_image(mode%,xres%,yres%,0) � =�
�}�image_info("Archimedes sprite",xres%,yres%,0,colbits%,mode%,"",�pictures%+" sprites (this is "+�times(picture%)+")",1,1)
��var("fptr",start%+oimage%):�var("widt",xres%):�var("heig",height%):�var("wrds",words%):�var("bfir",bfirst%):�unpack("ARC")
ImgMode%=mode%:=�
 
ݤpic_PROART
&� Makes ProArtisan image
0+width%=640:height%=256:� Set resolution
:4mode%=�mode(width%,height%,256):� Determine mode
DCroom%=(width%*height%+3)��3:� Room needed for unpack (coltable)
N0�new_image(mode%,width%,height%,room%) � =�
X+iType%=0:� Set low-to-high type of data
bGcollen%=�i4(1):comflag%=�i4(1):� Length of colour table/compression
l5coltable%=Lomem%-collen%:� Space for colour table
v2�iget(1,coltable%,collen%):� Read colour table
�?�standard_palette(InPal%(),8):� Standard 256 colour palette
�]�image_info("ProArtisan",width%,height%,0,8,mode%,"Run length","",Flen%-8,width%*height%)
���var("fptr",�iptr(1)):�var("prot",coltable%):�var("comp",comflag%):�var("widt",width%):�var("heig",height%):�unpack("PROART")
�ImgMode%=mode%:=�
� 
�ݤpic_WATFORD
�#� Makes Watford digitiser image
�+width%=512:height%=256:� Set resolution
�4mode%=�mode(width%,height%,256):� Determine mode
�,�new_image(mode%,width%,height%,0) � =�
�>InPal%()=0:InPal%(0)=8:� Palette is 64 greys, linear scale
�8� c%=0 � 63:InPal%(c%+1)=(c%<<18)+(c%<<10)+(c%<<2):�
�h�image_info("Watford digitiser",width%,height%,1,6,mode%,"Run length","",Flen%,(width%*height%*6)�8)
N�var("widt",width%):�var("heig",height%):�var("fptr",0):�unpack("WATFORD")
ImgMode%=mode%:=�
 
 ݤpic_RENDER
*� Makes Render Bender image
4iType%=0:�
>$mode%=�i1(1):� Read image's mode
H��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
R4mode%=�mode(width%,height%,256):� Determine mode
\,�new_image(mode%,width%,height%,0) � =�
f?�standard_palette(InPal%(),8):� Standard 256 colour palette
p`�image_info("Render Bender",width%,height%,0,8,mode%,"Run length","",Flen%-1,width%*height%)
zM�var("fptr",1):�var("widt",width%):�var("heig",height%):�unpack("RENDER")
�ImgMode%=mode%:=�
� 
�
ݤpic_AIM
�� Makes AIM image
�+width%=256:height%=256:� Set resolution
�4mode%=�mode(width%,height%,256):� Determine mode
�,�new_image(mode%,width%,height%,0) � =�
�4InPal%(0)=8:� Palette is 256 greys, linear scale
�3� c%=0 � 255:InPal%(c%+1)=(c%<<16)+(c%<<8)+c%:�
�C�image_info("AIM",width%,height%,1,8,mode%,"","",Flen%,256*256)
�J�var("widt",width%):�var("heig",height%):�var("fptr",0):�unpack("AIM")
�ImgMode%=mode%:=�
� 

ݤpic_SUN
� Makes SUN image
+iType%=1:� Set high-to-low type of data
$\magic%=�i4(1):�magic%<>&59A66A95 � �error(-1,"This is no standard SUN raster file !"):=�
.Bwidth%=�i4(1):height%=�height%=�h1):colbits%=�i4(1):� Read resolution
8Nlength%=�i4(1):type%=�i4(1):maptype%=�i4(1):maplength%=�i4(1):� Extra info
BH�type%>1 � �error(-1,"I can only read uncompressed Sun images !"):=�
L+colours%=2^colbits%:� Number of colours
VȎ colbits% �
`, � 1,8 : �(maptype%<>1)�(maplength%=0) �
jm             �colbits%>1 � �error(-1,"This SUN image file contains no palette ! I will use a greyscale.")
t*             �grey_palette(colbits%,1)
~v            � InPal%()=0:� i%=1 � 3:� c%=1 � maplength%�3:InPal%(c%)=(InPal%(c%)<<8)+�i1(1):�:�:InPal%(0)=colbits%
�            �
�L  : �error(-1,"I can only read 1- and 8-bit per pixel Sun images !"):=�
��
�9mode%=�mode(width%,height%,colours%):� Determine mode
�,�new_image(mode%,width%,height%,0) � =�
�H�image_info("SUN",width%,height%,0,colbits%,mode%,"","",Flen%,Flen%)
�V�var("fptr",32+maplength%):�var("widt",width%):�var("heig",height%):�unpack("SUN")
�ImgMode%=mode%:=�
� 
�
ݤpic_PCX
�� Makes PCX image
�+iType%=0:� Set low-to-high type of data
1man%=�i1(1):� Manufacture code (should be 10)

>�man%<>10 � �error(-1,"This is no standard PCX file !"):=�
,version%=�i1(1):� Version code (0/2/3/5)
Y�version%<5 � �error(-1,"I cannot handle old PCX files (only version 5 and up) !"):=�
(Gencoding%=�i1(1):� Encoding code (0-none, 1-PCX runlength encoding)
23bits%=�i1(1):� Bits per 'pixel' (1-EGA, 8-MCGA)
<Pwxmin%=�i2(1):wymin%=�i2(1):wxmax%=�i2(1):wymax%=�i2(1):� Window coordinates
FIwidth%=wxmax%-wxmin%+1:height%=wymax%-wymin%+1:� Resolution in pixels
P �iskip(1,4):� Skip Hres/Vres
ZInPal%()=0:� Clear palette
dl� i%=1 � 16:rgb%=�i3(1):InPal%(i%)=((rgb%�&FF)<<16)+(rgb%�&FF00)+(rgb%>>16):�:� Read colourmap in header
n$�iskip(1,1):� Skip reserved byte
x!planes%=�i1(1):� Colourplanes
�$linelen%=�i2(1):� Bytes per line
��roundlen%=((width%*bits%+7)�8):�roundlen%<>linelen% � width%=linelen%*8/bits%:� 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
�~�var("fptr",128):�var("totl",linelen%*planes%*height%):�var("comp",encoding%):�unpack_phase("PCX",2):� Get (packed) length
�Alen%=�var("pakl"):�iptr(1,128+len%):� Go to end of image data
�?code%=�i1(1):� Get code (12 indicates palette info follows)
�t�code%=12 � � i%=1 � colours%:rgb%=�i3(1):InPal%(i%)=((rgb%�&FF)<<16)+(rgb%�&FF00)+(rgb%>>16):�:� Read colourmap
�.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 � �grey_palette(pixbits%,1) � InPal%(0)=pixbits%
9mode%=�mode(width%,height%,colours%):� Determine mode
,�new_image(mode%,width%,height%,0) � =�
2�encoding%=1 � compr$="Run length" � compr$=""
"f�image_info("PCX",width%,height%,0,pixbits%,mode%,compr$,"",Flen%-128,(width%*height%*pixbits%)�8)
,c�var("fptr",128):�var("widt",width%):�var("heig",height%):�var("comp",encoding%):�unpack("PCX")
6ImgMode%=mode%:=�
@ 
Jݤpic_TIFF
T� Makes TIFF image
^+id$=�istring(1,2):� TIFF identification
hȎ id$ �
r5 � "II" : iType%=0:� Set low-to-high type of data
|5 � "MM" : iType%=1:� Set high-to-low type of data
�2  : �error(-1,"This is not a TIFF file !"):=�
��
�+version%=�tiff(3):� TIFF version number
�G�version%<>42 � �error(-1,"I cannot handle this TIFF version !"):=�
�+offFIFD%=�tiff(4):� Offset to first IFD
�'�iptr(1,offFIFD%):� Go to first IFD
�-entries%=�tiff(3):� Number of IFD entries
�InPal%()=0:� No palette yet
�1ok=�:� Flag indicating if TIFF can be handled
�rrowsperstrip%=-1:bits%=1:colours%=2:compression%=1:planar%=1:fillorder%=1:greyunit%=3:pixsamples%=1:� Defaults
�� e%=1 � entries%
�@tag%=�tiff(3):type%=�tiff(3):length%=�tiff(4):� Tag and info
�r�type%=1 � value%=�tiff(1):�iskip(1,3) � �type%=3 � value%=�tiff(3):�iskip(1,2) � value%=�tiff(4):� Read value
6cptr%=�iptr(1):� Remember current position in file

Ȏ tag% �
 � 256 : width%=value%
& � 257 : height%=value%
0* � 258 : bits%=value%:colours%=2^bits%
:  � 259 : compression%=value%
D  � 262 : photometric%=value%
N � 266 : fillorder%=value%
X� � 273 : !stroff=length%:�length%=1 � stroff!4=value% � �iptr(1,value%):p%=stroff+4:� s%=1 � length%:!p%=�tiff(type%):p%+=4:�:�iptr(1,cptr%)
b � 277 : pixsamples%=value%
l! � 278 : rowsperstrip%=value%
v � 284 : planar%=value%
� � 290 : greyunit%=value%
�� � 291 : �iptr(1,value%):div%=2*10^greyunit%:� g%=1 � length%:c%=�tiff(type%)*255:i%=c%/div%:InPal%(g%)=i%+(i%<<8)+(i%<<16):�:InPal%(0)=bits%:�iptr(1,cptr%)
�� � 320 : �iptr(1,value%):InPal%()=0:� p%=1 � 3:� c%=1 � length%�3:v%=�tiff(type%):InPal%(c%)=(InPal%(c%)<<8)+(v%>>8):�:�:InPal%(0)=bits%:�iptr(1,cptr%)
��
��
�-�rowsperstrip%=-1 � rowsperstrip%=height%
�O�compression%<>1 � �error(-1,"I cannot handle compressed TIFF images !"):=�
�}�(bits%=1)�(bits%=2)�(bits%=4)�(bits%=8) � �error(-1,"I can only handle TIFF images with 1,2,4 or 8 bits per pixel !"):=�
�T�planar%<>1 � �error(-1,"I cannot handle TIFF images with multiple planes !"):=�
�g�pixsamples%<>1 � �error(-1,"I cannot handle TIFF images with more than one sample per pixel !"):=�
�V�InPal%(0)<>0 � �photometric%=0 � �grey_palette(bits%,-1) � �grey_palette(bits%,1)
�9mode%=�mode(width%,height%,colours%):� Determine mode
�,�new_image(mode%,width%,height%,0) � =�
8�photometric%=3 � code%=0 � code%=1:� Colour or grey
J�image_info("TIFF",width%,height%,code%,bits%,mode%,"","",Flen%,Flen%)
��var("fptr",0):�var("widt",width%):�var("heig",height%):�var("map1",stroff):�var("rops",rowsperstrip%):�var("bito",fillorder%):�unpack("TIFF")
 ImgMode%=mode%:=�
* 
4ݤtiff(type%)
>� Returns tiff data type
H� i$,b%
RȎ type% �
\ � 1 : =�i1(1)
f; � 2 : i$="":b%=�i1(1):ȕ b%<>0:i$+=�b%:b%=�i1(1):�:=i$
p � 3 : =�i2(1)
z � 4 : =�i4(1)
�
 � 5 : =0
��
�=0
� 
�
ݤpic_QRT
�� Makes QRT image
�+iType%=0:� Set low-to-high type of data
�2width%=�i2(1):height%=�i2(1):� Read resolution
�4mode%=�mode(width%,height%,256):� Determine mode
�,�new_image(mode%,width%,height%,0) � =�
�.InPal%(0)=24:� No palette, pure 24-bit RGB
�F�image_info("QRT RAW",width%,height%,2,24,mode%,"","",Flen%,Flen%)
�J�var("fptr",4):�var("widt",width%):�var("heig",height%):�unpack("QRT")
ImgMode%=mode%:=�
 
ݤpic_ARVIS
$� Makes ArVis image
.+iType%=0:� Set low-to-high type of data
8g�iptr(1,4):�iptr(1,�,�,1)-4):�iskip(1,16):width%=�i4(1)*4+4:height%=�height%=�h1)+1:� Get width and height
Bu�iskip(1,8):�iskip(1,�,�,1)-36):�iptr(2,4):�iptr(2,�,�,2)-4):�iskip(2,32):�iskip(2,�,�,2)-36):� Go to sprite data
L-colbits%=15:colours%=2^colbits%:� Colours
V4mode%=�mode(width%,height%,256):� Determine mode
`,�new_image(mode%,width%,height%,0) � =�
j.InPal%(0)=15:� No palette, pure 15-bit RGB
tD�image_info("ArVis",width%,height%,2,15,mode%,"","",Flen%,Flen%)
~i�var("fptr",�iptr(1)):�var("fpt2",�iptr(2)):�var("widt",width%):�var("heig",height%):�unpack("ARVIS")
�ImgMode%=mode%:=�
� 
�ݤpic_CLEAR
�� Makes Clear image
�+iType%=0:� Set low-to-high type of data
�?maker$=�istring(1,-1):version%=�i4(1):� Creator information
�Bwidth%=�i4(1):height%=�height%=�h1):bits%=�i4(1):� Width, height, bpp
�~�bits%<=8 � colbits%=bits%:� c%=1 � 2^bits%:rgb%=�i3(1):InPal%(c%)=(rgb%�&FF00)+(rgb%>>16)+((rgb%�&FF)<<16):� � colbits%=8
�$InPal%(0)=bits%:� Bits per pixel
�;mode%=�mode(width%,height%,2^colbits%):� Determine mode
�,�new_image(mode%,width%,height%,0) � =�
���image_info("Clear",width%,height%,code%,bits%,mode%,"","by "+maker$+" "+�(version%�100)+"."+�"0"+�(version%�100),2),Flen%,Flen%)
S�var("fptr",�iptr(1)):�var("widt",width%):�var("heig",height%):�unpack("CLEAR")

ImgMode%=mode%:=�
 
Y��image_info(type$,width%,height%,code%,colbits%,mode%,compr$,info$,datalen%,piclen%)
(&� Sets information about the image
2� factor%,w%,h%,c%,i%,id$
<FImgW%=width%:ImgH%=height%:ImgBits%=colbits%:� Register resolution
F$IMIfn%=Leaf$:$IMIit%=type$
P+�info$="" � $IMIin%="-" � $IMIin%=info$
Z$IMIif%=�Flen%+" bytes"
dn�compr$="" � $IMIco%="None (0%)" � factor%=100-�(100*(datalen%/piclen%)):$IMIco%=compr$+" ("+�factor%+"%)"
n,$IMIwh%=�width%+" x "+�height%+" pixels"
x]�(width%>SprW%)�(height%>SprH%) � $IMIsc%="to "+�SprW%+" x "+�SprH% � $IMIsc%="Full size"
�C$IMIbp%=�(colbits%)+"-bit "+�"colour  grey    RGB",1+code%*8,8)
�J�mode_info(mode%,w%,h%,c%):$IMIsm%=�mode%+" ("+�w%+"x"+�h%+"x"+�c%+")"
��
� 
���new_image_window
�A� Creates new image window of appropiate size in current mode
�� w%
�$�autozoom:� Auto zoom if enabled
�?!block=win_img%:ș WDeleteW%,,block:� Delete old definition
ܑw%=window1:!w%=0:w%!4=0:w%!8=�sprW:w%!12=�sprH:w%!20=�sprH:w%!40=0:w%!44=0:w%!48=�sprW*ZoomX:w%!52=�sprH*ZoomY:$IMWtt%=�image_title:� Rewrite
�8ș WCreateW%,,window1 � 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
6K�ZoomX<1 � title$+=" x/"+�(1/ZoomX) � �ZoomX>1 � title$+=" x*"+�(ZoomX)
@K�ZoomY<1 � title$+=" y/"+�(1/ZoomY) � �ZoomY>1 � title$+=" y*"+�(ZoomY)
J=title$+" "+Load$
T 
^(ݤnew_image(mode%,xres%,yres%,room%)
hA� Creates room for picture sprite of specific resolution/mode
rG� and partitions memory (at least room% from sprite start to lomem)
|-� Returns TRUE if all is well, else FALSE
�8� bits%,words%,end%,size%,colbits%,sprdoff%,sprfoff%
�:yres%=yres%*(YMul%/YDiv%):� Apply scaling factor for Y
�:xres%=xres%*(XMul%/XDiv%):� Apply scaling factor for X
�`�(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
�,sprdoff%=44:sprfoff%=Sprite%!8:� Offsets
�)sptr%=Sprite%+sprfoff%:� Sprite start
�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 ?
�Fend%=sptr%+sprdoff%+datasize%:� Address of first byte after sprite
 ��(end%+1024)>Himem% � �error(-1,"I cannot handle this image. I need about "+�((end%+1024-Himem%+1023)�1024)+"K more memory."):=�
 4sptr%!0=sprdoff%+sizeup%:� Offset to next sprite
 ,�sprite_header(1):� Update sprite header
 &0$(sptr%+4)=ImageSpr$+�12,�0):� Sprite's name
 0(sptr%!16=words%-1:� Width in words-1
 :,sptr%!20=yres%-1:� Height in scanlines-1
 D=sptr%!24=0:sptr%!28=31-(words%*32-bits%):� Start/end bits
 NDsptr%!32=sprdoff%:sptr%!36=sptr%!32:� Offset to sprite data/mask
 X#sptr%!40=mode%:� Mode of sprite
 bHș "Translator_WriteWords",sptr%+sprdoff%,0,sizeup%>>2:� Wipe sprite
 l4Lomem%=end%:� End of sprite, start of free space
 v9�var("lome",Lomem%):�var("hime",Himem%):� Module info
 �(�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
 �Isize%=((Himem%-Lomem%)�256)*256:� Size of free space in sprite buffer
 �=�
 � 
 ���sprite_header(code%)
 �H� Initialises (0) or updates (1) sprite area header (sprite changed)
 �Ȏ code% �
 �6 � 0 : Sprite%!0=Spritesize%:� Size of sprite area
 �D          Sprite%!4=0:Sprite%!8=16:Sprite%!12=16:� No sprite yet
!?          Himem%=Sprite%+Spritesize%:� End of sprite buffer
!@ � 1 : Sprite%!4=1:Sprite%!12=Sprite%!8+!(Sprite%+Sprite%!8)
!�
! �
!* 
!4
��hour_on
!>� Turns hourglass on
!Hș "Hourglass_Start",4
!R�
!\ 
!f��hour_off
!p� Turns hourglass off
!zș "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,11:� 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
"K!arg%=sizex%:arg%!4=sizey%:arg%!8=sprW%:arg%!12=sprH%:� Initial scaling
"$/�:�plot_image(0,0,0,arg%):� Initial display
".�size �
"8? ȗ ȓ 0,0,ScrW%-xs%,ScrH%-ys%:� Restrict pointer to screen
"B6 ox%=sizex%-xs%:oy%=sizey%-ys%:� 'Old' coordinates
"L0 ȗ � ox%,oy%:� Pointer to upper left corner
"V? � �rmouse(_%,_%,but%):� but%=0:� Wait for buttons released
"`( � �value_ptr(sizex%�xs%,sizey%�ys%)
"j: � �rmouse(x%,y%,but%):� (x%<>ox%)�(y%<>oy%)�(but%<>0)
"t �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 �
"�> � �mouse(_%,_%,but%):� but%=0:� Wait for buttons released
"�@ ȗ ȓ 0,0,sizex%-xs%,sizey%-ys%:� Restrict pointer to image
#< ȗ � 0,sizey%-ys%:� Mouse to top right of scaled sprite
#
8 � �rmouse(x1%,y2%,but%):�value_ptr(x1%�xs%,y2%�ys%)
## � but%<>0:� Get top left point
#> � �mouse(_%,_%,but%):� but%=0:� Wait for buttons released
#(, x2%=x1%:y1%=y2%:� Initial window corner
#2> ȗ ȓ x1%,0,sizex%-xs%-x1%,y2%:� Trap mouse to down/right
#<3 ș WSetCol%,(4<<4)+0:� Invert colour on screen
#FA ox%=x2%:oy%=y1%:ȓ x1%,y1%,x2%-x1%,y2%-y1%:� First rectangle
#P � �rmouse(x2%,y1%,but%)
#Z0 �value_ptr((x2%-x1%)�xs%+1,(y2%-y1%)�ys%+1)
#d �(x2%<>ox%)�(y1%<>oy%) �
#n5  ȓ x1%,oy%,ox%-x1%,y2%-oy%:� Wipe old rectangle
#x0  ȓ x1%,y1%,x2%-x1%,y2%-y1%:� New rectangle
#�*  ox%=x2%:oy%=y1%:� Old mouse position
#� �
#�* � but%<>0:� Until second button press
#�B ȗ ȓ 0,0,ScrW%,ScrH%:� Reset mouse rectangle to whole screen
#�0 ȓ x1%,y1%,x2%-x1%,y2%-y1%:� Wipe rectangle
#�" � 0,0:� Wipe surrounding area
#�: _%=x1%-xs%:�_%>=0 � � 103,_%,1024-ys% � � _%,1024-ys%
#�= _%=y2%+ys%:�_%<ScrH% � � 103,1280-xs%,_% � � 1280-xs%,_%
#�/ _%=x2%+xs%:�_%<ScrW% � � 103,_%,0 � � _%,0
#�8 _%=y1%-ys%:�_%>=0 � � 103,x1%-xs%,_% � � x1%-xs%,_%
#�6 ș "OS_CLI","Pointer 1":� Restore default pointer
#�E� x1%=0:y1%=0:x2%=sizex%-xs%:y2%=sizey%-ys%:� Whole sprite window
#��
$&�24,x1%;y1%;x2%;y2%;:� Clip window
$�
$ 
$"��rmouse(� x%,� y%,� but%)
$,J� Returns mouse coordinates and buttons, rounded to exact pixel coords
$6$�mouse(x%,y%,but%):� Mouse state
$@*x%-=x% � xs%:y%-=y% � ys%:� Round down
$J�
$T 
$^��value_ptr(val1%,val2%)
$h� Puts values in pointer
$rEș OSSpop%,60+256,pointer,ptr$,0 � r0,r1,r2,r3:� Output to sprite
$|w�129:�2:�0,2);�"   "+�val1%,4)'�"   "+�val2%,4);:ș OSSpop%,36+256,pointer,ptr$,%0000010:� Print values and define
$�5ș OSSpop%,r0,r1,r2,r3:� Restore output to screen
$��
$� 
$���options_menu(create)
$�4� (Re)writes options menu, optionally creates it
$�
� i1$,i2$
$�9i1$=�sel(0,1,0,�Img,0)+"Image info#"+�win_iminfo%+"|"
$�-i1$+=�sel(0,1,0,0,0)+"Pop up#"+�sub1%+"|"
$�1i1$+=�sel(0,1,0,0,0)+"Processing#"+�sub1%+"|"
$�,i1$+=�sel(0,0,0,�Img,0)+"Image palette|"
$�4i2$+=�sel(0,0,0,�Img,0)+"Zoom image#"+�sub1%+"|"
$�+i2$+=�sel(0,0,0,�Img,0)+"Rotate image|"
$�6i2$+=�sel(0,1,0,�Img,0)+"Mirror image#"+�sub1%+"|"
%2i2$+=�sel(Palonoff,0,0,0,0)+"Include palette|"
%4i2$+=�sel(0,1,0,�Img,0)+"Save image#"+�sub1%+"|"
%i2$+=" Status#"+�sub1%+"|"
%&;�create_menu(-1,0,"Translator",260,40,0,i1$,i2$,create)
%0�
%: 
%D��submenu(path$,create)
%N5� (Re)writes submenu path$, optionally creates it
%X� i$,i2$
%b2CurrSub$=path$:� Remember current submenu path
%lȎ path$ �
%v� � "Pop up" : i$=�sel(AutoMode,0,0,0,0)+"Auto mode|"+�sel(AutoPal,0,0,0,0)+"Auto palette|"+�sel(AutoZoom,0,0,0,0)+"Auto zoom|"+�sel((ModeSet>0),0,0,�AutoMode,0)+"Mode set#"+�sub2%+"|"
%�@      �create_menu(x%,y%,"^1Pop up",13*16,40,0,i$,"",create)
%�� � "Pop up.Mode set" : i$=�sel((ModeSet=0),0,0,0,0)+"None|"+�sel((ModeSet=1),0,0,0,0)+"Normal|"+�sel((ModeSet=2),0,0,�MultiSync,0)+"Multisync|"+�sel((ModeSet=3),0,1,0,0)+�ums+"&a0-9,|"
%�B      �create_menu(x%,y%,"^2Mode set",10*16,40,0,i$,"",create)
%�� � "Processing" : i$=�sel(ClearFile,0,0,0,0)+"Clear output#"+�win_file%+"| Output mode#"+�sub2%+"|"+�sel(0,0,0,(OutMode=1),0)+"Output palette#"+�sub2%+"|"
%��      i$+=�sel(((XMul%<>XDiv%)�(YMul%<>YDiv%)),0,0,0,0)+"Scaling#"+�sub2%+"|"+�sel(ErrSpread,0,0,0,0)+"Error spreading|"+�sel(BlackWhite,0,0,0,0)+"Black and white|"
%��      i2$=�sel(ZigZag,0,0,0,0)+"Zig zag|"+" RGB resolution#"+�win_rgbbits%+"|"+�sel(InvertRGB,1,0,0,0)+"Invert RGB|"+�sel(Blanking,0,0,0,0)+"Screen blanking|"+�sel(GIFScan,0,0,0,0)+"GIF scan| Image number#"+�sub2%+"|"
%�E      �create_menu(x%,y%,"^1Processing",16*16,40,0,i$,i2$,create)
%ƙ � "Processing.Output mode" : �create_menu(x%,y%,"^2Mode",8*16,40,0,�sel((OutMode=1),0,0,0,0)+"Auto|"+�sel((OutMode=2),0,0,0,0)+"Current|","",create)
%�� � "Processing.Output palette" : �create_menu(x%,y%,"^2Palette",10*16,40,0,�sel((OutPal=1),0,0,0,0)+"Current|"+�sel((OutPal=2),0,0,0,0)+"Default|"+�sel((OutPal=3),0,0,0,0)+"Greyscale|","",create)
%ڰ � "Processing.Scaling" : �create_menu(x%,y%,"^2Scaling",5*16,40,0,�sel((XMul%<>XDiv%),0,0,0,0)+"x#"+�sub3%+"|"+�sel((YMul%<>YDiv%),0,0,0,0)+"y#"+�sub3%+"| 1:1|","",create)
%�r � "Processing.Scaling.x" : �create_menu(x%,y%,"^3X",10*16,40,0,"$"+�(XMul%)+":"+�(XDiv%)+"&a0-9:|","",create)
%�r � "Processing.Scaling.y" : �create_menu(x%,y%,"^3Y",10*16,40,0,"$"+�(YMul%)+":"+�(YDiv%)+"&a0-9:|","",create)
%�n � "Processing.Image number" : �create_menu(x%,y%,"^2Number",6*16,40,0,"$"+�(ImageNr%)+"&a0-9|","",create)
&� � "Zoom image" : �create_menu(x%,y%,"^1Zoom",4*16,40,0," In#"+�sub2%+"| Out#"+�sub2%+"|"+�sel(((ZoomX=1)�(ZoomY=1)),0,0,0,0)+"1:1|","",create)
&p � "Zoom image.In","Zoom image.Out" : �create_menu(x%,y%,"^2"+�path$,12),5*16,40,0," Both| x| y|","",create)
&S � "Mirror image" : �create_menu(x%,y%,"^1Mirror",6*16,40,0," x| y|","",create)
& Y � "Status" : �create_menu(x%,y%,"^1Status",5*16,40,0," Save| Load| Kill|","",create)
&*� � "Save image" : �create_menu(x%,y%,"^1Save image",15*16,40,0," Full| Whole| Whole (scaled)| Part| Part (scaled)|","",create)
&4  : CurrSub$=""
&>�
&H�
&R 
&\��set_mode(mode%)
&f2� Sets new mode (if enabled) for image display
&p� log2bpp%
&z>�AutoMode � �set_trans:�:� Auto mode selection not enabled
&�)log2bpp%=�mode_var(mode%,9):� Log2BPP
&�Ȏ ModeSet �
&�4 � 0 : � No mode set : no change of display mode
&�: � 1 : mode%=��" 0 81215",log2bpp%*2+1,2):� Normal set
&�= � 2 : mode%=��"18192021",log2bpp%*2+1,2):� Multisync set
&�4 � 3 : mode%=UserModeSet%(log2bpp%+1):� User set
&��
&�}�MultiSync � �(mode%>=18)�(mode%<=28) � mode%=�(�"0008121515002400081215",(mode%-18)*2+1,2)):� Map to non-multisync mode
&�%�mode_change(mode%):� Select mode
&��
&� 
&���mode_change(mode%)
&�)� Mode has changed or select new mode
')� If mode%>=0, mode mode% is selected
'J� _%,xwind%,ywind%,othermode,colours%,pos%,altmode$,modecols%,sprcols%
'3ș WReadP%,,wimppal:� Read current WIMP palette
'$�(mode%>=0) � (mode%<>�) �
'." ș WSetM%,mode%:� Change mode
'8 �mode%<>� �
'BG  � 1,-10,180,1:� Alert user that 'ideal' mode couldn't be selected
'L:  colours%=2^(2^�mode_var(mode%,9)):� Colours required
'V�  �colours%=2 � altmode$="|1800" � �colours%=4 � altmode$="|1908|0801" � �colours%=16 � altmode$="|2012|1612|1209" � �colours%=256 � altmode$="|2115|2415|1513|1310"
'`  �
'j�  ��=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
't#  ș WSetM%,mode%:� Change mode
'~  � (�=mode%) � (mode%<0)
'� �
'��
'�@othermode=(�<>CurrMode%):CurrMode%=�:� Mode other than old ?
'�AXeig%=�mode_var(�,4):Yeig%=�mode_var(�,5):� Read X/YEigFactor
'�Bxwind%=�mode_var(�,11)+1:ywind%=�mode_var(�,12)+1:� Resolution
'�AScrW%=(1<<Xeig%)*xwind%:ScrH%=(1<<Yeig%)*ywind%:� Screen size
'�
�Img �
'�+ �set_trans:� Re-set sprite translation
'�A �AutoPal � �set_palette(1):� Select image palette if enabled
'�# �othermode � �new_image_window
'��
'��
( 
(
��set_trans
(C� Sets translation factors (transtab & palette) for sprite plot
(!� mc%,sc%,v%,c%,gv%,gi%,i%,p%
((<mc%=2^(2^�log2BPP):sc%=2^SprColbits%:� Colours available
(2GShowPal%()=ImgPal%():ShowPal%(0)=2^ShowPal%(0):� Copy image palette
(<%�mc%=sc% � TransTabId=�:�:� Ideal
(F%TransTabId=�:� Always translation
(P�mc%>sc% �
(Z: �mc%<=16 � � c%=0 � sc%-1:transtab%?c%=c%�(mc%-1):�:�
(d; ș "Translator_Palette",8,dum%,1:� Get current palette
(n_ � c%=0 � sc%-1:ș "Translator_ClosestToRGB",ShowPal%(c%+1),256,dum% � v%:transtab%?c%=v%:�
(x1� � Less colours than required, so compromise
(�� �FreqCalc � �hour_on:ș "Translator_PixelFreq",SprPtr%,freq%:�hour_off:FreqCalc=�:� Calculate pixel frequencies in image sprite
(� �hour_on:� Hourglass on
(�C p%=dum%:� c%=1 � sc%:!p%=ImgPal%(c%):p%+=4:�:� Image's palette
(�: � Calculate translation table and palette for display
(�K ș "Translator_CalcTrans",sc%,freq%,dum%,mc%,transtab%,arg% � ,,,used%
(�C p%=arg%:� c%=1 � used%:ShowPal%(c%)=!p%:p%+=4:�:� Read palette
(�8 ShowPal%(0)=used%:� Colours used in display palette
(� �hour_off:� Hourglass off
(��
(��
(� 
(���autozoom
(�3� Adjust zoom factor for auto zoom (if enabled)
)� _%
)�AutoZoom �
)7 _%=�sprW*ZoomX:ȕ _%>ScrW%:ZoomX=ZoomX/2:_%=_%/2:�
)"6 �ZoomX<1 � ȕ _%*2<=ScrW%:ZoomX=ZoomX*2:_%=_%*2:�
),7 _%=�sprH*ZoomY:ȕ _%>ScrH%:ZoomY=ZoomY/2:_%=_%/2:�
)66 �ZoomY<1 � ȕ _%*2<=ScrH%:ZoomY=ZoomY*2:_%=_%*2:�
)@�
)J�
)T 
)^#��plot_image(x%,y%,act%,scale%)
)h/� Plots image sprite with translation table
)r�TransTabId � ș OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale% � ș OSSpop%,564,Sprite%,SprPtr%,x%,y%,act%,scale%,transtab%
)|�
)� 
)���unpack(type$)
)�+� Unpacks image (final unpacking phase)
)�� c%,bpp%,pc%
)�)bpp%=InPal%(0):� Bits per pixel input
)�4�var("inbi",bpp%):� Input (image) bits per pixel
)�&�var("bwhi",BlackWhite):� B/w flag
)�1�var("espr",ErrSpread):� Error spreading flag
)�&�var("zigz",ZigZag):� Zig zag flag
)�,�var("invt",InvertRGB):� Invert RGB flag
)�*�var("phas",1):� Final unpacking phase
)�&�var("rgbb",RGBbits%):� R/G/B bits
)�=�var("ymul",YMul%):�var("ydiv",YDiv%):� Scaling factors Y
*=�var("xmul",XMul%):�var("xdiv",XDiv%):� Scaling factors X
*8� Set palette (if relevant, i.e. not pure RGB input)
*?�bpp%<=8 � � c%=0 � 2^bpp%-1:palrgb%!(c%<<2)=InPal%(c%+1):�
*&9�OutMode=1 � pc%=0 � pc%=OutPal:� Select palette code
*0�ClearFile �
*:9 Out=�(ClearSave$):�var("capt",Out):� Open Clear file
*Du �ostring(Out,"Translator"):�o(Out,0,1):�o(Out,600,4):�o(Out,SprW%,4):�o(Out,SprH%,4):�o(Out,ImgBits%,4):� Header
*Nk �ImgBits%<=8 � � c%=1 � 2^ImgBits%:rgb%=InPal%(c%):�#Out,rgb%>>16:�#Out,rgb%>>8:�#Out,rgb%:�:� Palette
*X�
*b:ș "Translator_UnpackPre",palrgb%,pc%:� Init unpacking
*lhImgPal%(0)=SprColbits%:� c%=0 � 2^SprColbits%-1:ImgPal%(c%+1)=palrgb%!(c%<<2):�:� Read image palette
*v7�unpack_phase(type$,1):� Execute final unpack phase
*��ClearFile �
*�� ClearFile=�:�#Out:�var("capt")=0 � ș "OS_File",6,ClearSave$:�error(-1,"Error during output to Clear file : "+�string(�var("erro")+4)):� Remove Clear file if error
*��
*��
*� 
*� ��unpack_phase(type$,phase%)
*�5� Executes unpack phase, blanks screen if enabled
*�-�var("phas",phase%):� Set unpacking phase
*�+$dum%=�type$+"    ",4):� Type to unpack
*�=�Blanking � ș "Translator_VideoDMA",0:� Blank if enabled
*�7ș "Translator_Unpack",!dum%:� Execute unpack phase
*�A�Blanking � ș "Translator_VideoDMA",1:� Re-enable if blanked
*��
+ 
+��set_palette(palette%)
+*� Sets a palette according to palette%
+ �  0 - Desktop palette
+*I�  1 - Image's own palette (when possible, else desktop palette used)
+4� c%
+>Ȏ palette% �
+H � 0 : ș WSetP%,,wimppal
+Rt � 1 : �c256 � � c%=0 � ShowPal%(0)-1:dum%!(c%<<2)=ShowPal%(c%+1):�:ș "Translator_SetPalette",ShowPal%(0),dum%
+\�
+f�
+p 
+z%��standard_palette(� Pal%(),bpp%)
+�H� Sets a palette to standard Archimedes 2,4,16 or 256 colour palette
+�� c%,p%
+�Dș "Translator_Palette",bpp%,dum%,2:� Calculate standard palette
+�=p%=dum%:� c%=1 � 2^bpp%:Pal%(c%)=!p%:p%+=4:�:Pal%(0)=bpp%
+��
+� 
+���grey_palette(bpp%,dir%)
+�=� Sets input palette to greyscale for bpp% bits per pixel
+�?� dir%=1 gives black to white, dir%=-1 gives white to black
+�� code%,c%,p%
+��dir%=1 � code%=3 � code%=4
+�Aș "Translator_Palette",bpp%,dum%,code%:� Calculate greyscale
+�Ap%=dum%:� c%=1 � 2^bpp%:InPal%(c%)=!p%:p%+=4:�:InPal%(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
,8�
,B 
,L��invalidate_screen
,V� Invalidates entire screen
,`=ș WForce%,-1,0,0,ScrW%,ScrH%:� Force redraw whole screen
,j�
,t 
,~��invalidate_image
,�� Invalidates image
,�Img=�:FreqCalc=�:
,��
,� 
,���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%,small%,x%,y%,s%
-
(!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%
-Fnx%=(block!4-block!20):ny%=(block!16-block!24):� Get sprite origin
-(Avw%=block!12-block!4:vh%=block!16-block!8:� Visible area size
-2Ȏ handle% �
-<' � win_img% : � Redraw image window
-F?  �ZoomX>=1 � !arg%=ZoomX:arg%!8=1 � !arg%=1:arg%!8=1/ZoomX
-PC  �ZoomY>=1 � arg%!4=ZoomY:arg%!12=1 � arg%!4=1:arg%!12=1/ZoomY
-Z@  small%=((vw%<=160)�(vh%<=160)):� Window possibly too small
-dD  �small% � x%=block!4:y%=block!8:s%=�max(vw%,vh%):ș WSetCol%,0
-n*  ȕ more%:�small% � ȓ Ȑ x%,y%,s%,s%
-x8  �plot_image(nx%,ny%,0,arg%):� Display image sprite
-�5  ș WGetR%,,block � more%:�:� Get next rectangle
-��
-��
-� 
-���open_window(handle%,info)
-�&� Opens window with handle handle%
-�:� If info<>0 then info is ready at info, else get info
-�� b%,px%,py%,_%,xs%,ys%
-��info<>0 �
-�' � b%=0 � 31 � 4:block!b%=info!b%:�
-�&� !block=handle%:ș WGetWS%,,block
-�� �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%
.6%!block=handle%:ș WCloseW%,,block
.@�
.J 
.Tݤpoll(mask%)
.^@� Returns poll reason code, masking with mask%, data at poll
.h� reasoncode
.r%ș WPoll%,mask%,poll � reasoncode
.|=reasoncode
.� 
.���initialise
.�� Initialises program
.�>ș "Wimp_ReadPalette",,wimppal:� Read current WIMP palette
.�7�hour_on:�init_module:�hour_off:� Initialise module
.�Dș "OS_CheckModeValid",18 � _%:MultiSync=(_%<>-1):� Monitor type
.�0applname$="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:WSetIS%=W%+13
.�WGetIS%=W%+14:WGetPI%=W%+15:WDragB%=W%+16:WForce%=W%+17:WCreateM%=W%+20:WDecodeM%=W%+21:WSetE%=W%+23:WLoadT%=W%+27:WReport%=W%+31:WSetM%=W%+35
.�NWSetP%=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
/0� Load sprites for icons
/:H!iconsprites=2048:iconsprites!4=0:iconsprites!8=16:iconsprites!12=16
/D<ș OSSpop%,10+256,iconsprites,"<Translator$Dir>.Sprites"
/N� Load templates
/X8ș "Wimp_OpenTemplate",,"<Translator$Dir>.Templates"
/b<ic=icondata:ie=icondend:� Indirected icon data workspace
/l;$dum%="save":ș WLoadT%,,window2,ic,ie,-1,dum%,0 � ,,ic
/v$window2!(88+24)=1:� WIMP areaptr
/�%ș WCreateW%,,window2 � win_file%
/�?SAVsn%=�iconaddr(win_file%,0):SAVfn%=�iconaddr(win_file%,1)
/�;$dum%="info":ș WLoadT%,,window3,ic,ie,-1,dum%,0 � ,,ic
/�%ș WCreateW%,,window3 � win_info%
/�@$dum%="filetypes":ș WLoadT%,,window5,ic,ie,-1,dum%,0 � ,,ic
/�&ș WCreateW%,,window5 � win_filet%
/�@$dum%="imageinfo":ș WLoadT%,,window4,ic,ie,-1,dum%,0 � ,,ic
/�'ș WCreateW%,,window4 � win_iminfo%
/Љw%=win_iminfo%:IMIfn%=�iconaddr(w%,9):IMIit%=�iconaddr(w%,10):IMIin%=�iconaddr(w%,11):IMIif%=�iconaddr(w%,12):IMIco%=�iconaddr(w%,13)
/�cIMIwh%=�iconaddr(w%,14):IMIsc%=�iconaddr(w%,15):IMIbp%=�iconaddr(w%,16):IMIsm%=�iconaddr(w%,17)
/�>$dum%="rgbbits":ș WLoadT%,,window6,ic,ie,-1,dum%,0 � ,,ic
/�D� i%=3 � 5:ap%=window6+88+i%*32+24:!ap%=iconsprites:�:� Areaptrs
/�(ș WCreateW%,,window6 � win_rgbbits%
0F$dum%="image":IMWtt%=ic:ș WLoadT%,,window1,ic,ie,-1,dum%,0 � ,,ic
0+window1?35=&FF:� Transparent background
0$ș WCreateW%,,window1 � win_img%
0 ș "Wimp_CloseTemplate"
0*� Init variables
04�SaveKind$="":Img=�:Palonoff=�:ZoomX=1:ZoomY=1:sub1%=submenu1:sub2%=submenu2:sub3%=submenu3:ImageSpr$="image":CurrSub$="":Flen%=0:Load$=""
0>�DataSaveRef%=-1:DataLoadRef%=�:YMul%=1:YDiv%=1:XMul%=1:XDiv%=1:ClearFile=�:SaveSpr$="Image":SaveClear$="Clear":SprSave$="":ClearSave$=""
0H�File()=0:SprW%=0:SprH%=0:ImageNr%=1:AutoMode=�:AutoPal=�:CurrMode%=-1:ErrSpread=�:ModeSet=0:UserModeSet%()=0,0,8,12,15:AutoZoom=�
0R�BlackWhite=�:TransTabId=�:ImgMode%=0:GIFScan=�:RGBbits%=&080808:Blanking=�:ZigZag=�:InvertRGB=�:FreqCalc=�:OutMode=1:OutPal=1
0\0�load_status:� Load default status (if any)
0f.�sprite_header(0):� Initialise sprite area
0p�
0z 
0�ݤiconaddr(win%,ico%)
0�,� Returns indirected icon's data address
0�>!block=win%:block!4=ico%:ș WGetIS%,,block:� Get icon info
0�
=block!28
0� 
0�ݤload_status
0�#� Loads default status (if any)
0�H� Returns TRUE if succesful, else FALSE (i.e. status file not found)
0�6Status=�("<Translator$Dir>.Status"):�Status=0 � =�
0�8�#Status,AutoMode,AutoPal,ModeSet,ErrSpread,Palonoff
0���#Status � �#Status,UserModeSet%(1),UserModeSet%(2),UserModeSet%(3),UserModeSet%(4):��#Status � �#Status,AutoZoom:��#Status � �#Status,BlackWhite
0�}��#Status � �#Status,GIFScan:��#Status � �#Status,Blanking:��#Status � �#Status,InvertRGB:��#Status � �#Status,ZigZag
0��#Status:=�
1 
1H��create_menu(x%,y%,title$,width%,height%,gap%,icon1$,icon2$,create)
16� Writes menu structure, creates it if create=TRUE
1$=� - If x%<0 then x/y coordinates are (mouseX-64),(mouseY)
1.J� - If title$ starts "^<nr>" then this becomes a <nr>'th submenu (1/2)
18A� - Menu icons in icon strings : ?<icon1>|?<icon2>|..... etc.
1B1� - ? is a character containing select bits :
1L�   bit 0 : icon is ticked
1V1�   bit 1 : icon is followed by a dotted line
1` �   bit 2 : icon is writable
1j4�   bit 3 : icon is shaded (i.e. not selectable)
1t>�   bit 4 : writable icon has 40 characters room (else 16)
1~�   bit 5 : always 1
1�A� - icons of form '?<str>&<val>' have validation string <val>
1�F� - icons of form '?<str>#<val>' have sub-window with handle <val>
1�4�   also, the 'menu warning message' is selected
1�9� i$,ptr%,ix%,dataptr%,ilen%,p%,it$,type%,data$,menu%
1�"� valid$,sub,call%,tick%,writ%
1�4� butty%,shaded%,dotted%,sub%,subwarn%,icon%,nr%
1�?�x%<0 � �mouse(x%,y%,_%):x%-=64:� Get coordinates via mouse
1��title$,1)="^" �
1� sub=�:nr%=�(�title$,2,1))
1�G �nr%=1 � menu%=submenu1 � �nr%=2 � menu%=submenu2 � menu%=submenu3
1� title$=�title$,3)
1�� sub=�:menu%=menu1
2�
2
t$menu%=title$:menu%?12=tf%:menu%?13=tb%:menu%?14=wf%:menu%?15=wb%:menu%!16=width%:menu%!20=height%:menu%!24=gap%
2� Define icons
2)i$=icon1$:icon%=1:� First icon string
2(5ptr%=menu%+28:ix%=0:dataptr%=menu%+512:� Pointers
22ȕ i$<>"":p%=�i$,"|")
2<�p%=0 �
2F
 i$=""
2P� � Define icon
2Z! it$=�i$,p%-1):i$=�i$,�i$-p%)
2d& type%=��it$,1):data$=�it$,�it$-1)
2n� tick%=(type%�%000001):dotted%=(type%�%000010)>>1:writ%=(type%�%000100)>>2:shaded%=(type%�%001000)>>3:long%=(type%�%010000)>>4
2xq valid$="":p%=�data$,"&"):�p%>0 � valid$=�data$,p%+1):data$=�data$,p%-1):� Extract validation string (if any)
2�� sub%=-1:subwarn%=0:p%=�data$,"#"):�p%>0 � sub%=�(�data$,p%+1)):subwarn%=1:data$=�data$,p%-1):� Extract subwindow handle (if any)
2�> �writ%=0 � ilen%=�data$+1 ��long%=0 � ilen%=16 � ilen%=40
2�C !ptr%=(subwarn%<<3)+(writ%<<2)+(dotted%<<1)+tick%:� Menu flags
2�" ptr%!4=sub%:� Sub menu/window
2�> ptr%!8=(wb%<<28)+(wf%<<24)+(shaded%<<22)+(1<<8)+1:� Flags
2�E $dataptr%=data$:ptr%!12=dataptr%:ptr%!20=ilen%:dataptr%+=ilen%+1
2�T �valid$="" � ptr%!16=-1 � $dataptr%=valid$:ptr%!16=dataptr%:dataptr%+=�valid$+1
2� ptr%+=24:ix%+=1
2��
2�*�i$="" � �icon%=1 � i$=icon2$:icon%+=1
2��
2�2ptr%!-24=(ptr%!-24)�&80:� Indicate 'last icon'
2��create � �
3A�sub � ș WCreateSM%,,menu%,x%,y% � ș WCreateM%,,menu%,x%,y%
3�
3 
3"ݤsel(t%,d%,w%,s%,r%)
3,2� Returns select character for icon attributes
36E=�((1<<5)+((r%�1)<<4)+((s%�1)<<3)+((w%�1)<<2)+((d%�1)<<1)+(t%�1))
3@ 
3J	ݤums
3T7� Returns string representing current user mode set
3^\=�(UserModeSet%(1))+","+�(UserModeSet%(2))+","+�(UserModeSet%(3))+","+�(UserModeSet%(4))
3h 
3rݤavailable_mode(mode%)
3|C� Checks if mode% is a valid WIMP mode and available on monitor
3�0�mode%=3 � mode%=6 � mode%=7 � mode%=23 � =�
3��mode%<0 � mode%>28 � =�
3�*�mode%=24 � mode%<18 � =� � =MultiSync
3� 
3�ݤalign(val%)
3�0� Returns next-up word aligned value of val%
3�=(val%+3)��3
3� 
3�ݤreadpalval(rgb%)
3�3� Returns 'OS_ReadPalette' word from &RGB value
3�?=((rgb%�&FF)<<24)+((rgb%�&FF00)<<8)+((rgb%�&FF0000)>>8)+&10
3� 
3�ݤstring(addr%)
42� Returns CTRL-char terminated string at addr%
4� _%,_c%,_$
4_%=-1:� _%+=1:� addr%?_%<32
4&3_c%=addr%?_%:addr%?_%=13:_$=$addr%:addr%?_%=_c%
40=_$
4: 
4Dݤupstring(m$)
4N� Returns upper case m$
4X� c%,v%,u$
4bRu$=m$:� c%=1 � � m$:v%=��m$,c%,1):�(v%<=�"z")�(v%>=�"a") � �u$,c%,1)=�(v%�&5F)
4l	�:=u$
4v 
4���mouse(� x%,� y%,� but%)
4�+� Returns x,y and button state of mouse
4�ȗ x%,y%,but%
4��
4� 
4�
ݤc256
4�5� Returns TRUE if current mode is 256 colour mode
4�=(�log2BPP=3)
4� 
4�
ݤlog2BPP
4�&� Returns Log2BPP for current mode
4�=�mode_var(�,9)
4� 
5ݤvdu_var(varnr%)
5!� Returns VDU variable varnr%
5;!arg%=varnr%:arg%!4=-1:ș OSReadVV%,arg%,arg%+8:=arg%!8
5  
5*ݤmode_var(mode%,varnr%)
54(� Returns mode mode% variable varnr%
5>
� result%
5H2ș OSReadMV%,mode%,varnr% � ,,result%:=result%
5R 
5\ݤOS_var(_$)
5f.� Attempts to return OS-var's string value
5p
� _r$,_l%
5z7ș "XOS_ReadVarVal",_$,�100," "),100,0,3 � ,_r$,_l%
5�_r$=�_r$,_l%):=_r$
5� 
5�ݤswi_to_nr(swi$)
5�)� Returns SWI number of SWI call swi$
5�� swinr%
5�/ș "XOS_SWINumberFromString",,swi$ � swinr%
5�=swinr%
5� 
5���error(errnr,errmsg$)
5�� Handles errors
5�� but%,oldpal,opt%
5�9ș "Translator_VideoDMA",1:� Ensure video DMA enabled
5�'�errnr=-1 � errnr=1:opt%=1 � opt%=3
6!err=errnr:$(err+4)=errmsg$
6Dș "Translator_Palette",2^�log2BPP,dum%,1:� Read current palette
6)�set_palette(0):� Select WIMP palette
6$*ș WReport%,err,opt%,applname$ � ,but%
6.�but%<>1 � �die
68Bș "Translator_SetPalette",2^(2^�log2BPP),dum%:� Reset palette
6B�
6L 
6V
ݤsprW
6`?� Returns image sprite's width in OS pixels in current mode
6j=SprW%*2^�mode_var(�,4)
6t 
6~
ݤsprH
6�@� Returns image sprite's height in OS pixels in current mode
6�=SprH%*2^�mode_var(�,5)
6� 
6�ݤmax(v1%,v2%)
6�$� Returns maximum of v1% and v2%
6��v1%>v2% � =v1% � =v2%
6� 
6�	��die
6�� Tidies up and exits
6��finish:� Tidy up
6�ș "OS_Exit"
6��
7 
7
��finish
7� Tidies up
71� Send message to ask if module can be killed
7(�!block=20:block!12=0:block!16=&CCE00:ș WSendMsg%,18,block,0:kill=�:� listen%=�poll(0):kill=kill � ((listen%=19)�(poll!16=&CCE00)�(poll!12=0)):� listen%=0:�kill � ș "OS_Module",4,"Translator"
72&ș WSetP%,,wimppal:� Reset palette
7<-ș "Wimp_CloseDown",TaskHandle%,&4B534154
7F�
7P 
7Z#ݤmode(width%,height%,colours%)
7dL� Returns, if possible, a standard screen mode that is most suitable for
7nK� displaying a picture of (width%)x(height%) pixels in colours% colours
7x6� Returns -1 if number of colours greater than 256
7�)� arccols%,arcwidth%,archeight%,mode%
7��OutMode=2 � =�
7�/� Range check for colours, width and height
7�&�colours%>256 � =-1:� Impossible !
7�,� Determine closest colours/width/height
7�c�colours%>16 � arccols%=256 � �colours%>4 � arccols%=16 � �colours%>2 � arccols%=4 � arccols%=2
7�N�width%>640 � arcwidth%=1056 � �width%>320 � arcwidth%=640 � arcwidth%=320
7�3�height%<=256 � archeight%=256 � archeight%=512
7�Ȏ arccols% �
7�/ � 2 : �archeight%=512 � mode%=18 � mode%=0
7�K � 4 : �archeight%=512 � mode%=19 � �arcwidth%<=320 � mode%=1 � mode%=8
7�i � 16 : �archeight%=512 � mode%=20 � �arcwidth%<=320 � mode%=9 � �arcwidth%=640 � mode%=12 � mode%=16
7�� � 256 : �archeight%=512 � mode%=21 � �arcwidth%=160 � mode%=10 � �arcwidth%=320 � mode%=13 � �arcwidth%=640 � mode%=15 � mode%=24
8�
8
=mode%
8 
8"ݤtimes(value%)
8,0� Returns STR$value% with 'plural extension'
86	� _d%
8@3_d%=value%�10:� Last digit determines extension
8J:�(((value%�100)�10)=1)�(_d%>3)�(_d%=0) � =�value%+"th"
8TȎ _d% �
8^ � 1 : =�value%+"st"
8h � 2 : =�value%+"nd"
8r � 3 : =�value%+"rd"
8|�
8� 
8�ݤistring(fn%,len%)
8�!� Returns string of from file
8�0� If len%>0 the number of characters is len%
8�8� If len%=-1 the string is CTRL-character terminated
8�� _%,r$,c%
8�l_$="":�len%>0 � � _%=1 � len%:r$+=��i1(fn%):� � �len%=-1 � c%=�i1(fn%):ȕ c%>=�" ":r$+=�c%:c%=�i1(fn%):�
8�=r$
8� 
8���iskip(fn%,amount%)
8�!� Skips amount% bytes in file
8�#�#File(fn%)=amount%+�#File(fn%)
8��
9 
9��iptr(fn%,newptr%)
9� Sets new offset in file
9&�#File(fn%)=newptr%
90�
9: 
9Dݤiptr(fn%)
9N$� Returns current offset in file
9X=�#File(fn%)
9b 
9lݤilen(fn%)
9v� Returns length of file
9�=�#File(fn%)
9� 
9�ݤieof(fn%)
9�(� Returns end-of-file status of file
9�=�#File(fn%)
9� 
9���iclose
9�� Closes all input files
9�� f%
9�3� f%=1 � 10:�File(f%)>0 � �#File(f%):File(f%)=0
9��
9��
9� 
:��iget(fn%,adr%,amount%)
:-� Returns amount% bytes at adr% from file
:)ș "OS_GBPB",4,File(fn%),adr%,amount%
: �
:* 
:4ݤi1(fn%):=�i(fn%,1)
:>ݤi2(fn%):=�i(fn%,2)
:Hݤi3(fn%):=�i(fn%,3)
:Rݤi4(fn%):=�i(fn%,4)
:\ 
:fݤi(fn%,len%)
:p'� Returns len%-byte value from file
:z� _%,_r%
:�_r%=0:� _%=1 � len%
:�Ȏ iType% �
:�# � 1 : _r%=(_r%<<8)+�#File(fn%)
:�(   : _r%+=((�#File(fn%))<<(_%-1)*8)
:��:�
:�=_r%
:� 
:���o(fh%,val%,bytes%)
:�+� Outputs value of bytes% bytes to file
:�� i%
:�-� i%=1 � bytes%:�#fh%,val%:val%=val%>>8:�
:��
:� 
;��ostring(fh%,v$)
;� Outputs string to file
;� i%
;$#� i%=1 � �v$:�#fh%,��v$,i%,1):�
;.�
;8
;B��init_module
;L� Initialises module
;V.ș "Translator_MakeMaps":� Initialise maps
;`�
;j 
;t��var(varname$,value%)
;~� Writes module variable
;�;$dum%=varname$:ș "Translator_SetVariable",!dum%,value%
;��
;� 
;�ݤvar(varname$)
;�� Reads module variable
;�� value%
;�>$dum%=varname$:ș "Translator_ReadVariable",!dum% � value%
;�=value%
;� 
;�ݤOSvar(name$)
;�.� Attempts to return OS-var's string value
;�
� _r$,_l%
<C_r$=�100," "):ș "XOS_ReadVarVal",name$,_r$,�_r$,0,3 � ,_r
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 4b f4  |..............K.|
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 20 20  | to Archimedes  |
00000090  20 20 20 20 20 20 20 20  20 20 20 20 28 52 49 53  |            (RIS|
000000a0  43 57 41 52 45 29 0d 00  28 2d f4 20 56 65 72 73  |CWARE)..(-. Vers|
000000b0  69 6f 6e 20 64 61 74 65  20 3a 20 53 61 74 2c 30  |ion date : Sat,0|
000000c0  37 20 4a 75 6c 20 31 39  39 30 2e 31 31 3a 35 39  |7 Jul 1990.11:59|
000000d0  3a 34 36 0d 00 32 1e f4  20 a9 20 31 39 39 30 20  |:46..2.. . 1990 |
000000e0  5a 65 72 69 64 61 6a 68  20 73 6f 66 74 77 61 72  |Zeridajh softwar|
000000f0  65 0d 00 3c 15 f4 20 62  79 20 4a 6f 68 6e 20 4b  |e..<.. by John K|
00000100  6f 72 74 69 6e 6b 0d 00  46 4b f4 ab ab ab ab ab  |ortink..FK......|
00000110  ab ab ab ab ab ab ab ab  ab ab ab ab ab ab ab ab  |................|
*
00000150  ab 0d 00 50 31 ee 20 85  20 eb 30 3a f1 27 22 45  |...P1. . .0:.'"E|
00000160  72 72 6f 72 22 27 27 22  27 22 3b f6 24 3b 22 27  |rror"''"'";.$;"'|
00000170  20 28 63 6f 64 65 20 22  3b 9e 3b 22 29 22 27 27  | (code ";.;")"''|
00000180  3a e0 0d 00 5a 3a de 20  6d 65 6e 75 31 20 26 34  |:...Z:. menu1 &4|
00000190  30 30 2c 73 75 62 6d 65  6e 75 31 20 26 34 30 30  |00,submenu1 &400|
000001a0  2c 73 75 62 6d 65 6e 75  32 20 26 34 30 30 2c 73  |,submenu2 &400,s|
000001b0  75 62 6d 65 6e 75 33 20  26 34 30 30 0d 00 64 2c  |ubmenu3 &400..d,|
000001c0  de 20 77 69 6e 64 6f 77  31 20 26 31 30 30 2c 77  |. window1 &100,w|
000001d0  69 6e 64 6f 77 32 20 26  31 30 30 2c 77 69 6e 64  |indow2 &100,wind|
000001e0  6f 77 33 20 26 32 30 30  0d 00 6e 2c de 20 77 69  |ow3 &200..n,. wi|
000001f0  6e 64 6f 77 34 20 26 34  30 30 2c 77 69 6e 64 6f  |ndow4 &400,windo|
00000200  77 35 20 26 36 30 30 2c  77 69 6e 64 6f 77 36 20  |w5 &600,window6 |
00000210  26 32 30 30 0d 00 78 2f  de 20 69 63 6f 6e 73 70  |&200..x/. iconsp|
00000220  72 69 74 65 73 20 32 30  34 38 2c 69 63 6f 6e 64  |rites 2048,icond|
00000230  61 74 61 20 34 30 39 36  2c 69 63 6f 6e 64 65 6e  |ata 4096,iconden|
00000240  64 20 30 0d 00 82 44 de  20 70 6f 6c 6c 20 32 35  |d 0...D. poll 25|
00000250  36 2c 62 6c 6f 63 6b 20  32 35 36 2c 65 72 72 20  |6,block 256,err |
00000260  32 35 36 2c 77 69 6d 70  70 61 6c 20 32 35 36 2c  |256,wimppal 256,|
00000270  70 6f 69 6e 74 65 72 20  35 31 32 2c 73 74 72 6f  |pointer 512,stro|
00000280  66 66 20 34 30 39 36 0d  00 8c 45 de 20 49 6e 50  |ff 4096...E. InP|
00000290  61 6c 25 28 32 35 36 29  2c 49 6d 67 50 61 6c 25  |al%(256),ImgPal%|
000002a0  28 32 35 36 29 2c 53 68  6f 77 50 61 6c 25 28 32  |(256),ShowPal%(2|
000002b0  35 36 29 2c 55 73 65 72  4d 6f 64 65 53 65 74 25  |56),UserModeSet%|
000002c0  28 34 29 2c 46 69 6c 65  28 31 30 29 0d 00 96 27  |(4),File(10)...'|
000002d0  de 20 61 72 67 25 20 31  30 32 34 2c 64 75 6d 25  |. arg% 1024,dum%|
000002e0  20 31 30 32 34 2c 74 72  61 6e 73 74 61 62 25 20  | 1024,transtab% |
000002f0  32 35 36 0d 00 a0 35 de  20 70 61 6c 72 67 62 25  |256...5. palrgb%|
00000300  20 31 30 32 34 2c 68 61  6d 62 61 73 25 20 36 34  | 1024,hambas% 64|
00000310  2c 66 72 65 71 25 20 31  30 32 34 2c 6f 75 74 70  |,freq% 1024,outp|
00000320  61 6c 25 20 31 30 32 34  0d 00 aa 4c 50 72 6f 67  |al% 1024...LProg|
00000330  6e 65 65 64 25 3d 31 32  30 2a 31 30 32 34 3a f4  |need%=120*1024:.|
00000340  20 45 73 74 69 6d 61 74  65 64 20 73 70 61 63 65  | Estimated space|
00000350  20 6e 65 65 64 65 64 20  66 6f 72 20 70 72 6f 67  | needed for prog|
00000360  72 61 6d 2b 76 61 72 73  20 28 6e 6f 20 73 70 72  |ram+vars (no spr|
00000370  62 75 66 29 0d 00 b4 37  54 6f 74 61 6c 66 72 65  |buf)...7Totalfre|
00000380  65 25 3d 93 2d 90 3a f4  20 54 6f 74 61 6c 20 66  |e%=.-.:. Total f|
00000390  72 65 65 20 66 6f 72 20  70 72 6f 67 72 61 6d 2b  |ree for program+|
000003a0  76 61 72 73 2b 73 70 72  62 75 66 0d 00 be 3d 53  |vars+sprbuf...=S|
000003b0  70 72 69 74 65 73 69 7a  65 25 3d 54 6f 74 61 6c  |pritesize%=Total|
000003c0  66 72 65 65 25 2d 50 72  6f 67 6e 65 65 64 25 3a  |free%-Progneed%:|
000003d0  f4 20 46 72 65 65 20 66  6f 72 20 73 70 72 69 74  |. Free for sprit|
000003e0  65 20 62 75 66 66 65 72  0d 00 c8 45 e7 53 70 72  |e buffer...E.Spr|
000003f0  69 74 65 73 69 7a 65 25  3c 31 30 32 34 20 8c 20  |itesize%<1024 . |
00000400  85 20 31 2c 22 4e 6f 20  72 6f 6f 6d 20 74 6f 20  |. 1,"No room to |
00000410  73 74 61 72 74 20 75 70  20 54 72 61 6e 73 6c 61  |start up Transla|
00000420  74 6f 72 20 70 72 6f 70  65 72 6c 79 22 0d 00 d2  |tor properly"...|
00000430  29 de 20 53 70 72 69 74  65 25 20 53 70 72 69 74  |). Sprite% Sprit|
00000440  65 73 69 7a 65 25 3a f4  20 53 70 72 69 74 65 20  |esize%:. Sprite |
00000450  62 75 66 66 65 72 0d 00  dc 28 f2 69 6e 69 74 69  |buffer...(.initi|
00000460  61 6c 69 73 65 3a f4 20  49 6e 69 74 69 61 6c 69  |alise:. Initiali|
00000470  73 65 20 61 70 70 6c 69  63 61 74 69 6f 6e 0d 00  |se application..|
00000480  e6 34 f2 6d 6f 64 65 5f  63 68 61 6e 67 65 28 2d  |.4.mode_change(-|
00000490  31 29 3a f4 20 52 65 73  65 6c 65 63 74 20 63 75  |1):. Reselect cu|
000004a0  72 72 65 6e 74 20 6d 6f  64 65 20 74 6f 20 74 69  |rrent mode to ti|
000004b0  64 79 0d 00 f0 2d ee 20  85 20 f2 65 72 72 6f 72  |dy...-. . .error|
000004c0  28 9f 2c f6 24 2b 22 20  28 63 6f 64 65 20 22 2b  |(.,.$+" (code "+|
000004d0  c3 9e 2b 22 29 22 29 3a  f2 69 63 6c 6f 73 65 0d  |..+")"):.iclose.|
000004e0  00 fa d1 e7 53 70 72 69  74 65 73 69 7a 65 25 3c  |....Spritesize%<|
000004f0  38 30 2a 31 30 32 34 20  8c 20 f2 65 72 72 6f 72  |80*1024 . .error|
00000500  28 30 2c 22 57 41 52 4e  49 4e 47 20 21 20 49 20  |(0,"WARNING ! I |
00000510  68 61 76 65 20 6f 6e 6c  79 20 22 2b c3 28 53 70  |have only "+.(Sp|
00000520  72 69 74 65 73 69 7a 65  25 29 2b 22 20 62 79 74  |ritesize%)+" byt|
00000530  65 73 20 66 72 65 65 20  66 6f 72 20 69 6d 61 67  |es free for imag|
00000540  65 20 68 61 6e 64 6c 69  6e 67 2e 20 50 72 65 73  |e handling. Pres|
00000550  73 20 4f 4b 20 74 6f 20  63 6f 6e 74 69 6e 75 65  |s OK to continue|
00000560  20 77 69 74 68 20 74 68  69 73 20 74 72 69 63 6b  | with this trick|
00000570  79 20 73 69 74 75 61 74  69 6f 6e 20 6f 72 20 43  |y situation or C|
00000580  41 4e 43 45 4c 20 74 6f  20 71 75 69 74 20 28 61  |ANCEL to quit (a|
00000590  6e 64 20 72 65 73 65 72  76 65 20 73 6f 6d 65 20  |nd reserve some |
000005a0  6d 6f 72 65 20 6d 65 6d  6f 72 79 20 21 29 22 29  |more memory !)")|
000005b0  0d 01 04 17 f5 20 f4 20  50 6f 6c 6c 20 61 6e 64  |..... . Poll and|
000005c0  20 61 63 74 69 6f 6e 0d  01 0e 44 e7 44 61 74 61  | action...D.Data|
000005d0  4c 6f 61 64 52 65 66 25  20 8c 20 70 6f 6c 6c 6d  |LoadRef% . pollm|
000005e0  61 73 6b 25 3d 34 38 20  8b 20 70 6f 6c 6c 6d 61  |ask%=48 . pollma|
000005f0  73 6b 25 3d 34 39 3a f4  20 4e 6f 20 6e 75 6c 6c  |sk%=49:. No null|
00000600  73 20 69 66 20 77 61 73  74 65 64 0d 01 18 19 c8  |s if wasted.....|
00000610  8e 20 a4 70 6f 6c 6c 28  70 6f 6c 6c 6d 61 73 6b  |. .poll(pollmask|
00000620  25 29 20 ca 0d 01 22 30  20 c9 20 30 20 3a 20 f2  |%) ..."0 . 0 : .|
00000630  6e 75 6c 6c 3a f4 20 4e  6f 74 68 69 6e 67 20 74  |null:. Nothing t|
00000640  6f 20 64 6f 2c 20 70 65  72 66 6f 72 6d 20 63 68  |o do, perform ch|
00000650  65 63 6b 73 0d 01 2c 2a  20 c9 20 31 20 3a 20 f2  |ecks..,* . 1 : .|
00000660  72 65 64 72 61 77 3a f4  20 52 65 64 72 61 77 20  |redraw:. Redraw |
00000670  77 69 6e 64 6f 77 20 72  65 71 75 65 73 74 0d 01  |window request..|
00000680  36 26 20 c9 20 32 20 3a  20 f2 6f 70 65 6e 3a f4  |6& . 2 : .open:.|
00000690  20 4f 70 65 6e 20 77 69  6e 64 6f 77 20 72 65 71  | Open window req|
000006a0  75 65 73 74 0d 01 40 28  20 c9 20 33 20 3a 20 f2  |uest..@( . 3 : .|
000006b0  63 6c 6f 73 65 3a f4 20  43 6c 6f 73 65 20 77 69  |close:. Close wi|
000006c0  6e 64 6f 77 20 72 65 71  75 65 73 74 0d 01 4a 26  |ndow request..J&|
000006d0  20 c9 20 36 20 3a 20 f2  6d 6f 75 73 65 63 6c 69  | . 6 : .mousecli|
000006e0  63 6b 3a f4 20 4d 6f 75  73 65 20 63 6c 69 63 6b  |ck:. Mouse click|
000006f0  65 64 0d 01 54 3f 20 c9  20 37 20 3a 20 f2 64 72  |ed..T? . 7 : .dr|
00000700  61 67 64 72 6f 70 3a f4  20 55 73 65 72 20 68 61  |agdrop:. User ha|
00000710  73 20 64 72 6f 70 70 65  64 20 64 72 61 67 20 62  |s dropped drag b|
00000720  6f 78 20 6f 66 20 66 69  6c 65 20 77 69 6e 64 6f  |ox of file windo|
00000730  77 0d 01 5e 1d 20 c9 20  38 20 3a 20 f2 6b 65 79  |w..^. . 8 : .key|
00000740  3a f4 20 4b 65 79 20 70  72 65 73 73 65 64 0d 01  |:. Key pressed..|
00000750  68 31 20 c9 20 39 20 3a  20 f2 6d 65 6e 75 73 65  |h1 . 9 : .menuse|
00000760  6c 65 63 74 3a f4 20 4d  65 6e 75 20 73 65 6c 65  |lect:. Menu sele|
00000770  63 74 69 6f 6e 20 66 72  6f 6d 20 75 73 65 72 0d  |ction from user.|
00000780  01 72 2b 20 c9 20 31 37  2c 31 38 20 3a 20 f2 6d  |.r+ . 17,18 : .m|
00000790  65 73 73 61 67 65 3a f4  20 4d 65 73 73 61 67 65  |essage:. Message|
000007a0  20 66 72 6f 6d 20 57 49  4d 50 0d 01 7c 05 cb 0d  | from WIMP..|...|
000007b0  01 86 07 fd 20 a3 0d 01  90 04 0d 01 9a 10 dd f2  |.... ...........|
000007c0  6d 65 6e 75 73 65 6c 65  63 74 0d 01 a4 3f c8 99  |menuselect...?..|
000007d0  20 57 44 65 63 6f 64 65  4d 25 2c 2c 6d 65 6e 75  | WDecodeM%,,menu|
000007e0  31 2c 70 6f 6c 6c 2c c4  31 30 30 2c 22 20 22 29  |1,poll,.100," ")|
000007f0  20 b8 20 2c 2c 2c 73 65  6c 65 63 74 24 3a f4 20  | . ,,,select$:. |
00000800  53 65 6c 65 63 74 69 6f  6e 0d 01 ae 2d f4 20 44  |Selection...-. D|
00000810  65 63 6f 64 65 20 6d 61  69 6e 2f 73 75 62 2f 73  |ecode main/sub/s|
00000820  75 62 73 75 62 20 73 65  6c 65 63 74 69 6f 6e 20  |ubsub selection |
00000830  73 74 72 69 6e 67 0d 01  b8 2a 6d 65 6e 75 70 61  |string...*menupa|
00000840  74 68 24 3d 73 65 6c 65  63 74 24 3a f4 20 52 65  |th$=select$:. Re|
00000850  6d 65 6d 62 65 72 20 6d  65 6e 75 20 70 61 74 68  |member menu path|
00000860  0d 01 c2 50 73 65 6c 65  63 74 32 3d a3 3a 73 65  |...Pselect2=.:se|
00000870  6c 65 63 74 33 3d a3 3a  73 65 6c 65 63 74 34 3d  |lect3=.:select4=|
00000880  a3 3a 73 65 6c 65 63 74  32 24 3d 22 22 3a 73 65  |.:select2$="":se|
00000890  6c 65 63 74 33 24 3d 22  22 3a 73 65 6c 65 63 74  |lect3$="":select|
000008a0  34 24 3d 22 22 3a f4 20  44 65 66 61 75 6c 74 73  |4$="":. Defaults|
000008b0  0d 01 cc bd 70 25 3d a7  73 65 6c 65 63 74 24 2c  |....p%=.select$,|
000008c0  22 2e 22 29 3a e7 70 25  3e 30 20 8c 20 73 65 6c  |"."):.p%>0 . sel|
000008d0  65 63 74 32 3d b9 3a 73  65 6c 65 63 74 32 24 3d  |ect2=.:select2$=|
000008e0  c1 73 65 6c 65 63 74 24  2c 70 25 2b 31 29 3a 73  |.select$,p%+1):s|
000008f0  65 6c 65 63 74 24 3d c0  73 65 6c 65 63 74 24 2c  |elect$=.select$,|
00000900  70 25 2d 31 29 3a 70 25  3d a7 73 65 6c 65 63 74  |p%-1):p%=.select|
00000910  32 24 2c 22 2e 22 29 3a  e7 70 25 3e 30 20 8c 20  |2$,"."):.p%>0 . |
00000920  73 65 6c 65 63 74 33 3d  b9 3a 73 65 6c 65 63 74  |select3=.:select|
00000930  33 24 3d c1 73 65 6c 65  63 74 32 24 2c 70 25 2b  |3$=.select2$,p%+|
00000940  31 29 3a 73 65 6c 65 63  74 32 24 3d c0 73 65 6c  |1):select2$=.sel|
00000950  65 63 74 32 24 2c 70 25  2d 31 29 3a 70 25 3d a7  |ect2$,p%-1):p%=.|
00000960  73 65 6c 65 63 74 33 24  2c 22 2e 22 29 0d 01 d6  |select3$,".")...|
00000970  47 e7 70 25 3e 30 20 8c  20 73 65 6c 65 63 74 34  |G.p%>0 . select4|
00000980  3d b9 3a 73 65 6c 65 63  74 34 24 3d c1 73 65 6c  |=.:select4$=.sel|
00000990  65 63 74 33 24 2c 70 25  2b 31 29 3a 73 65 6c 65  |ect3$,p%+1):sele|
000009a0  63 74 33 24 3d c0 73 65  6c 65 63 74 33 24 2c 70  |ct3$=.select3$,p|
000009b0  25 2d 31 29 0d 01 e0 34  f4 20 46 69 6c 74 65 72  |%-1)...4. Filter|
000009c0  20 63 6c 69 63 6b 73 20  6f 6e 20 72 6f 6f 74 73  | clicks on roots|
000009d0  20 6f 66 20 65 6e 74 72  69 65 73 20 77 69 74 68  | of entries with|
000009e0  20 73 75 62 6d 65 6e 75  0d 01 ea 12 c8 8e 20 6d  | submenu...... m|
000009f0  65 6e 75 70 61 74 68 24  20 ca 0d 01 f4 73 20 c9  |enupath$ ....s .|
00000a00  20 22 49 6d 61 67 65 20  69 6e 66 6f 22 2c 22 50  | "Image info","P|
00000a10  6f 70 20 75 70 22 2c 22  50 72 6f 63 65 73 73 69  |op up","Processi|
00000a20  6e 67 22 2c 22 5a 6f 6f  6d 20 69 6d 61 67 65 22  |ng","Zoom image"|
00000a30  2c 22 4d 69 72 72 6f 72  20 69 6d 61 67 65 22 2c  |,"Mirror image",|
00000a40  22 53 61 76 65 20 69 6d  61 67 65 22 2c 22 53 74  |"Save image","St|
00000a50  61 74 75 73 22 20 3a 20  e7 73 65 6c 65 63 74 32  |atus" : .select2|
00000a60  20 8b 20 73 65 6c 65 63  74 24 3d 22 22 0d 01 fe  | . select$=""...|
00000a70  a9 20 c9 20 22 50 72 6f  63 65 73 73 69 6e 67 2e  |. . "Processing.|
00000a80  4f 75 74 70 75 74 20 6d  6f 64 65 22 2c 22 50 72  |Output mode","Pr|
00000a90  6f 63 65 73 73 69 6e 67  2e 4f 75 74 70 75 74 20  |ocessing.Output |
00000aa0  70 61 6c 65 74 74 65 22  2c 22 50 72 6f 63 65 73  |palette","Proces|
00000ab0  73 69 6e 67 2e 49 6d 61  67 65 20 6e 75 6d 62 65  |sing.Image numbe|
00000ac0  72 22 2c 22 50 6f 70 20  75 70 2e 4d 6f 64 65 20  |r","Pop up.Mode |
00000ad0  73 65 74 22 2c 22 5a 6f  6f 6d 2e 49 6e 22 2c 22  |set","Zoom.In","|
00000ae0  5a 6f 6f 6d 2e 4f 75 74  22 2c 22 50 72 6f 63 65  |Zoom.Out","Proce|
00000af0  73 73 69 6e 67 2e 53 63  61 6c 69 6e 67 22 20 3a  |ssing.Scaling" :|
00000b00  20 e7 73 65 6c 65 63 74  33 20 8b 20 73 65 6c 65  | .select3 . sele|
00000b10  63 74 24 3d 22 22 0d 02  08 4c 20 c9 20 22 50 72  |ct$=""...L . "Pr|
00000b20  6f 63 65 73 73 69 6e 67  2e 53 63 61 6c 69 6e 67  |ocessing.Scaling|
00000b30  2e 78 22 2c 22 50 72 6f  63 65 73 73 69 6e 67 2e  |.x","Processing.|
00000b40  53 63 61 6c 69 6e 67 2e  79 22 20 3a 20 e7 73 65  |Scaling.y" : .se|
00000b50  6c 65 63 74 34 20 8b 20  73 65 6c 65 63 74 24 3d  |lect4 . select$=|
00000b60  22 22 0d 02 12 05 cb 0d  02 1c 10 c8 8e 20 73 65  |""........... se|
00000b70  6c 65 63 74 24 20 ca 0d  02 26 18 20 c9 20 22 22  |lect$ ...&. . ""|
00000b80  20 3a 20 f4 20 44 6f 20  6e 6f 74 68 69 6e 67 0d  | : . Do nothing.|
00000b90  02 30 1e 20 c9 20 22 51  75 69 74 22 20 3a 20 f4  |.0. . "Quit" : .|
00000ba0  20 51 75 69 74 20 70 72  6f 67 72 61 6d 0d 02 3a  | Quit program..:|
00000bb0  1d 20 20 f2 64 69 65 3a  f4 20 54 69 64 79 20 75  |.  .die:. Tidy u|
00000bc0  70 20 61 6e 64 20 65 78  69 74 0d 02 44 22 20 c9  |p and exit..D" .|
00000bd0  20 22 50 6f 70 20 75 70  22 20 3a 20 f4 20 50 6f  | "Pop up" : . Po|
00000be0  70 20 75 70 20 6f 70 74  69 6f 6e 73 0d 02 4e 13  |p up options..N.|
00000bf0  20 20 c8 8e 20 73 65 6c  65 63 74 32 24 20 ca 0d  |  .. select2$ ..|
00000c00  02 58 3a 20 20 20 c9 20  22 41 75 74 6f 20 6d 6f  |.X:   . "Auto mo|
00000c10  64 65 22 20 3a 20 f4 20  54 6f 67 67 6c 65 20 61  |de" : . Toggle a|
00000c20  75 74 6f 20 6d 6f 64 65  20 73 65 6c 65 63 74 69  |uto mode selecti|
00000c30  6f 6e 20 6f 6e 2f 6f 66  66 0d 02 62 23 20 20 20  |on on/off..b#   |
00000c40  20 41 75 74 6f 4d 6f 64  65 3d ac 41 75 74 6f 4d  | AutoMode=.AutoM|
00000c50  6f 64 65 3a f4 20 54 6f  67 67 6c 65 0d 02 6c 40  |ode:. Toggle..l@|
00000c60  20 20 20 c9 20 22 41 75  74 6f 20 70 61 6c 65 74  |   . "Auto palet|
00000c70  74 65 22 20 3a 20 f4 20  54 6f 67 67 6c 65 20 61  |te" : . Toggle a|
00000c80  75 74 6f 20 70 61 6c 65  74 74 65 20 73 65 6c 65  |uto palette sele|
00000c90  63 74 69 6f 6e 20 6f 6e  2f 6f 66 66 0d 02 76 21  |ction on/off..v!|
00000ca0  20 20 20 20 41 75 74 6f  50 61 6c 3d ac 41 75 74  |    AutoPal=.Aut|
00000cb0  6f 50 61 6c 3a f4 20 54  6f 67 67 6c 65 0d 02 80  |oPal:. Toggle...|
00000cc0  2b 20 20 20 c9 20 22 4d  6f 64 65 20 73 65 74 22  |+   . "Mode set"|
00000cd0  20 3a 20 f4 20 53 65 6c  65 63 74 20 6e 65 77 20  | : . Select new |
00000ce0  6d 6f 64 65 20 73 65 74  0d 02 8a 19 20 20 20 20  |mode set....    |
00000cf0  c8 8e 20 c0 73 65 6c 65  63 74 33 24 2c 34 29 20  |.. .select3$,4) |
00000d00  ca 0d 02 94 29 20 20 20  20 20 c9 20 22 52 6f 6f  |....)     . "Roo|
00000d10  74 22 20 3a 20 f4 20 4e  6f 20 73 65 6c 65 63 74  |t" : . No select|
00000d20  69 6f 6e 20 28 72 6f 6f  74 29 0d 02 9e 2b 20 20  |ion (root)...+  |
00000d30  20 20 20 c9 20 22 4e 6f  6e 65 22 20 3a 20 4d 6f  |   . "None" : Mo|
00000d40  64 65 53 65 74 3d 30 3a  f4 20 4e 6f 20 6d 6f 64  |deSet=0:. No mod|
00000d50  65 20 73 65 74 0d 02 a8  37 20 20 20 20 20 c9 20  |e set...7     . |
00000d60  22 4e 6f 72 6d 22 20 3a  20 4d 6f 64 65 53 65 74  |"Norm" : ModeSet|
00000d70  3d 31 3a f4 20 4e 6f 72  6d 61 6c 20 6d 6f 6e 69  |=1:. Normal moni|
00000d80  74 6f 72 20 6d 6f 64 65  20 73 65 74 0d 02 b2 3a  |tor mode set...:|
00000d90  20 20 20 20 20 c9 20 22  4d 75 6c 74 22 20 3a 20  |     . "Mult" : |
00000da0  4d 6f 64 65 53 65 74 3d  32 3a f4 20 4d 75 6c 74  |ModeSet=2:. Mult|
00000db0  69 73 79 6e 63 20 6d 6f  6e 69 74 6f 72 20 6d 6f  |isync monitor mo|
00000dc0  64 65 20 73 65 74 0d 02  bc 35 20 20 20 20 20 7f  |de set...5     .|
00000dd0  20 3a 20 f4 20 55 73 65  72 20 6d 6f 64 65 20 73  | : . User mode s|
00000de0  65 74 2c 20 63 68 65 63  6b 20 61 6e 64 20 69 66  |et, check and if|
00000df0  20 6f 6b 2c 20 63 68 61  6e 67 65 0d 02 c6 98 20  | ok, change.... |
00000e00  20 20 20 20 20 73 24 3d  73 65 6c 65 63 74 33 24  |     s$=select3$|
00000e10  3a 70 25 3d a7 73 24 2c  22 2c 22 29 3a e7 70 25  |:p%=.s$,","):.p%|
00000e20  3e 30 20 8c 20 6d 31 25  3d bb 73 24 3a 73 24 3d  |>0 . m1%=.s$:s$=|
00000e30  c1 73 24 2c 70 25 2b 31  29 3a 70 25 3d a7 73 24  |.s$,p%+1):p%=.s$|
00000e40  2c 22 2c 22 29 3a e7 70  25 3e 30 20 8c 20 6d 32  |,","):.p%>0 . m2|
00000e50  25 3d bb 73 24 3a 73 24  3d c1 73 24 2c 70 25 2b  |%=.s$:s$=.s$,p%+|
00000e60  31 29 3a 70 25 3d a7 73  24 2c 22 2c 22 29 3a e7  |1):p%=.s$,","):.|
00000e70  70 25 3e 30 20 8c 20 6d  33 25 3d bb 73 24 3a 73  |p%>0 . m3%=.s$:s|
00000e80  24 3d c1 73 24 2c 70 25  2b 31 29 3a 6d 34 25 3d  |$=.s$,p%+1):m4%=|
00000e90  bb 73 24 0d 02 d0 da 20  20 20 20 20 20 e7 70 25  |.s$....      .p%|
00000ea0  3e 30 20 8c 20 55 73 65  72 4d 6f 64 65 53 65 74  |>0 . UserModeSet|
00000eb0  25 28 31 29 3d 6d 31 25  3a 55 73 65 72 4d 6f 64  |%(1)=m1%:UserMod|
00000ec0  65 53 65 74 25 28 32 29  3d 6d 32 25 3a 55 73 65  |eSet%(2)=m2%:Use|
00000ed0  72 4d 6f 64 65 53 65 74  25 28 33 29 3d 6d 33 25  |rModeSet%(3)=m3%|
00000ee0  3a 55 73 65 72 4d 6f 64  65 53 65 74 25 28 34 29  |:UserModeSet%(4)|
00000ef0  3d 6d 34 25 3a 4d 6f 64  65 53 65 74 3d 33 20 8b  |=m4%:ModeSet=3 .|
00000f00  20 f2 65 72 72 6f 72 28  2d 31 2c 22 42 61 64 20  | .error(-1,"Bad |
00000f10  75 73 65 72 20 6d 6f 64  65 20 73 65 74 2e 20 50  |user mode set. P|
00000f20  6c 65 61 73 65 20 75 73  65 20 27 3c 32 63 6f 6c  |lease use '<2col|
00000f30  6d 6f 64 65 3e 2c 3c 34  63 6f 6c 6d 6f 64 65 3e  |mode>,<4colmode>|
00000f40  2c 3c 31 36 63 6f 6c 6d  6f 64 65 3e 2c 3c 32 35  |,<16colmode>,<25|
00000f50  36 63 6f 6c 6d 6f 64 65  3e 27 2c 20 65 2e 67 2e  |6colmode>', e.g.|
00000f60  20 27 31 2c 32 2c 33 2c  34 27 2e 22 29 0d 02 da  | '1,2,3,4'.")...|
00000f70  09 20 20 20 20 cb 0d 02  e4 25 20 20 20 20 f2 73  |.    ....%    .s|
00000f80  75 62 6d 65 6e 75 28 22  50 6f 70 20 75 70 2e 4d  |ubmenu("Pop up.M|
00000f90  6f 64 65 20 73 65 74 22  2c a3 29 0d 02 ee 29 20  |ode set",.)...) |
00000fa0  20 20 c9 20 22 41 75 74  6f 20 7a 6f 6f 6d 22 20  |  . "Auto zoom" |
00000fb0  3a 20 f4 20 54 6f 67 67  6c 65 20 61 75 74 6f 20  |: . Toggle auto |
00000fc0  7a 6f 6f 6d 0d 02 f8 23  20 20 20 20 41 75 74 6f  |zoom...#    Auto|
00000fd0  5a 6f 6f 6d 3d ac 41 75  74 6f 5a 6f 6f 6d 3a f4  |Zoom=.AutoZoom:.|
00000fe0  20 54 6f 67 67 6c 65 0d  03 02 07 20 20 cb 0d 03  | Toggle....  ...|
00000ff0  0c 1a 20 20 f2 73 75 62  6d 65 6e 75 28 22 50 6f  |..  .submenu("Po|
00001000  70 20 75 70 22 2c a3 29  0d 03 16 2a 20 c9 20 22  |p up",.)...* . "|
00001010  50 72 6f 63 65 73 73 69  6e 67 22 20 3a 20 f4 20  |Processing" : . |
00001020  50 72 6f 63 65 73 73 69  6e 67 20 6f 70 74 69 6f  |Processing optio|
00001030  6e 73 0d 03 20 13 20 20  c8 8e 20 73 65 6c 65 63  |ns.. .  .. selec|
00001040  74 32 24 20 ca 0d 03 2a  31 20 20 20 c9 20 22 43  |t2$ ...*1   . "C|
00001050  6c 65 61 72 20 6f 75 74  70 75 74 22 20 3a 20 f4  |lear output" : .|
00001060  20 43 6c 65 61 72 20 6f  75 74 70 75 74 20 66 69  | Clear output fi|
00001070  6c 65 20 6f 66 66 0d 03  34 3a 20 20 20 20 e7 43  |le off..4:    .C|
00001080  6c 65 61 72 46 69 6c 65  20 8c 20 c8 99 20 22 4f  |learFile . .. "O|
00001090  53 5f 46 69 6c 65 22 2c  36 2c 43 6c 65 61 72 53  |S_File",6,ClearS|
000010a0  61 76 65 24 3a 43 6c 65  61 72 46 69 6c 65 3d a3  |ave$:ClearFile=.|
000010b0  0d 03 3e 37 20 20 20 c9  20 22 4f 75 74 70 75 74  |..>7   . "Output|
000010c0  20 6d 6f 64 65 22 20 3a  20 f4 20 43 68 61 6e 67  | mode" : . Chang|
000010d0  65 20 6f 75 74 70 75 74  20 6d 6f 64 65 20 73 65  |e output mode se|
000010e0  6c 65 63 74 69 6f 6e 0d  03 48 30 20 20 20 20 e7  |lection..H0    .|
000010f0  73 65 6c 65 63 74 33 24  3d 22 41 75 74 6f 22 20  |select3$="Auto" |
00001100  8c 20 4f 75 74 4d 6f 64  65 3d 31 20 8b 20 4f 75  |. OutMode=1 . Ou|
00001110  74 4d 6f 64 65 3d 32 0d  03 52 2c 20 20 20 20 f2  |tMode=2..R,    .|
00001120  73 75 62 6d 65 6e 75 28  22 50 72 6f 63 65 73 73  |submenu("Process|
00001130  69 6e 67 2e 4f 75 74 70  75 74 20 6d 6f 64 65 22  |ing.Output mode"|
00001140  2c a3 29 0d 03 5c 3d 20  20 20 c9 20 22 4f 75 74  |,.)..\=   . "Out|
00001150  70 75 74 20 70 61 6c 65  74 74 65 22 20 3a 20 f4  |put palette" : .|
00001160  20 43 68 61 6e 67 65 20  6f 75 74 70 75 74 20 70  | Change output p|
00001170  61 6c 65 74 74 65 20 73  65 6c 65 63 74 69 6f 6e  |alette selection|
00001180  0d 03 66 52 20 20 20 20  e7 73 65 6c 65 63 74 33  |..fR    .select3|
00001190  24 3d 22 43 75 72 72 65  6e 74 22 20 8c 20 4f 75  |$="Current" . Ou|
000011a0  74 50 61 6c 3d 31 20 8b  20 e7 73 65 6c 65 63 74  |tPal=1 . .select|
000011b0  33 24 3d 22 44 65 66 61  75 6c 74 22 20 8c 20 4f  |3$="Default" . O|
000011c0  75 74 50 61 6c 3d 32 20  8b 20 4f 75 74 50 61 6c  |utPal=2 . OutPal|
000011d0  3d 33 0d 03 70 2f 20 20  20 20 f2 73 75 62 6d 65  |=3..p/    .subme|
000011e0  6e 75 28 22 50 72 6f 63  65 73 73 69 6e 67 2e 4f  |nu("Processing.O|
000011f0  75 74 70 75 74 20 70 61  6c 65 74 74 65 22 2c a3  |utput palette",.|
00001200  29 0d 03 7a 2b 20 20 20  c9 20 22 53 63 61 6c 69  |)..z+   . "Scali|
00001210  6e 67 22 20 3a 20 f4 20  43 68 61 6e 67 65 20 73  |ng" : . Change s|
00001220  63 61 6c 65 20 66 61 63  74 6f 72 73 0d 03 84 15  |cale factors....|
00001230  20 20 20 20 c8 8e 20 73  65 6c 65 63 74 33 24 20  |    .. select3$ |
00001240  ca 0d 03 8e 32 20 20 20  20 20 c9 20 22 31 3a 31  |....2     . "1:1|
00001250  22 20 3a 20 58 4d 75 6c  25 3d 31 3a 59 4d 75 6c  |" : XMul%=1:YMul|
00001260  25 3d 31 3a 58 44 69 76  25 3d 31 3a 59 44 69 76  |%=1:XDiv%=1:YDiv|
00001270  25 3d 31 0d 03 98 75 20  20 20 20 20 c9 20 22 78  |%=1...u     . "x|
00001280  22 2c 22 79 22 20 3a 20  6d 75 6c 25 3d 2d 31 3a  |","y" : mul%=-1:|
00001290  64 69 76 25 3d 2d 31 3a  73 24 3d 73 65 6c 65 63  |div%=-1:s$=selec|
000012a0  74 34 24 3a 70 25 3d a7  73 24 2c 22 3a 22 29 3a  |t4$:p%=.s$,":"):|
000012b0  e7 70 25 3e 30 20 8c 20  6d 75 6c 25 3d bb 73 24  |.p%>0 . mul%=.s$|
000012c0  3a 73 24 3d c1 73 24 2c  70 25 2b 31 29 3a 64 69  |:s$=.s$,p%+1):di|
000012d0  76 25 3d bb 73 24 3a f4  20 47 65 74 20 6e 65 77  |v%=.s$:. Get new|
000012e0  20 66 61 63 74 6f 72 73  0d 03 a2 2c 20 20 20 20  | factors...,    |
000012f0  20 20 e7 28 6d 75 6c 25  3c 3d 30 29 84 28 64 69  |  .(mul%<=0).(di|
00001300  76 25 3c 3d 30 29 84 28  6d 75 6c 25 3e 64 69 76  |v%<=0).(mul%>div|
00001310  25 29 20 8c 0d 03 ac 57  20 20 20 20 20 20 20 f2  |%) ....W       .|
00001320  65 72 72 6f 72 28 2d 31  2c 22 50 6c 65 61 73 65  |error(-1,"Please|
00001330  20 65 6e 74 65 72 20 3c  6d 75 6c 3e 3a 3c 64 69  | enter <mul>:<di|
00001340  76 3e 2c 20 77 68 65 72  65 20 3c 6d 75 6c 3e 20  |v>, where <mul> |
00001350  69 73 20 6e 6f 74 20 67  72 65 61 74 65 72 20 74  |is not greater t|
00001360  68 61 6e 20 3c 64 69 76  3e 22 29 0d 03 b6 62 20  |han <div>")...b |
00001370  20 20 20 20 20 cc 20 e7  73 65 6c 65 63 74 33 24  |     . .select3$|
00001380  3d 22 78 22 20 8c 20 58  4d 75 6c 25 3d 6d 75 6c  |="x" . XMul%=mul|
00001390  25 3a 58 44 69 76 25 3d  64 69 76 25 20 8b 20 59  |%:XDiv%=div% . Y|
000013a0  4d 75 6c 25 3d 6d 75 6c  25 3a 59 44 69 76 25 3d  |Mul%=mul%:YDiv%=|
000013b0  64 69 76 25 3a f4 20 55  70 64 61 74 65 20 73 63  |div%:. Update sc|
000013c0  61 6c 69 6e 67 20 66 61  63 74 6f 72 73 0d 03 c0  |aling factors...|
000013d0  0b 20 20 20 20 20 20 cd  0d 03 ca 09 20 20 20 20  |.      .....    |
000013e0  cb 0d 03 d4 28 20 20 20  20 f2 73 75 62 6d 65 6e  |....(    .submen|
000013f0  75 28 22 50 72 6f 63 65  73 73 69 6e 67 2e 53 63  |u("Processing.Sc|
00001400  61 6c 69 6e 67 22 2c a3  29 0d 03 de 3c 20 20 20  |aling",.)...<   |
00001410  c9 20 22 45 72 72 6f 72  20 73 70 72 65 61 64 69  |. "Error spreadi|
00001420  6e 67 22 20 3a 20 f4 20  54 6f 67 67 6c 65 20 65  |ng" : . Toggle e|
00001430  72 72 6f 72 20 73 70 72  65 61 64 69 6e 67 20 6f  |rror spreading o|
00001440  6e 2f 6f 66 66 0d 03 e8  25 20 20 20 20 45 72 72  |n/off...%    Err|
00001450  53 70 72 65 61 64 3d ac  45 72 72 53 70 72 65 61  |Spread=.ErrSprea|
00001460  64 3a f4 20 54 6f 67 67  6c 65 0d 03 f2 35 20 20  |d:. Toggle...5  |
00001470  20 c9 20 22 42 6c 61 63  6b 20 61 6e 64 20 77 68  | . "Black and wh|
00001480  69 74 65 22 20 3a 20 f4  20 54 6f 67 67 6c 65 20  |ite" : . Toggle |
00001490  62 6c 61 63 6b 20 61 6e  64 20 77 68 69 74 65 0d  |black and white.|
000014a0  03 fc 1e 20 20 20 20 42  6c 61 63 6b 57 68 69 74  |...    BlackWhit|
000014b0  65 3d ac 42 6c 61 63 6b  57 68 69 74 65 0d 04 06  |e=.BlackWhite...|
000014c0  25 20 20 20 c9 20 22 5a  69 67 20 7a 61 67 22 20  |%   . "Zig zag" |
000014d0  3a 20 f4 20 54 6f 67 67  6c 65 20 7a 69 67 20 7a  |: . Toggle zig z|
000014e0  61 67 0d 04 10 16 20 20  20 20 5a 69 67 5a 61 67  |ag....    ZigZag|
000014f0  3d ac 5a 69 67 5a 61 67  0d 04 1a 35 20 20 20 c9  |=.ZigZag...5   .|
00001500  20 22 53 63 72 65 65 6e  20 62 6c 61 6e 6b 69 6e  | "Screen blankin|
00001510  67 22 20 3a 20 f4 20 54  6f 67 67 6c 65 20 73 63  |g" : . Toggle sc|
00001520  72 65 65 6e 20 62 6c 61  6e 6b 69 6e 67 0d 04 24  |reen blanking..$|
00001530  1a 20 20 20 20 42 6c 61  6e 6b 69 6e 67 3d ac 42  |.    Blanking=.B|
00001540  6c 61 6e 6b 69 6e 67 0d  04 2e 2e 20 20 20 c9 20  |lanking....   . |
00001550  22 49 6e 76 65 72 74 20  52 47 42 22 20 3a 20 f4  |"Invert RGB" : .|
00001560  20 54 6f 67 67 6c 65 20  52 47 42 20 69 6e 76 65  | Toggle RGB inve|
00001570  72 74 69 6e 67 0d 04 38  1c 20 20 20 20 49 6e 76  |rting..8.    Inv|
00001580  65 72 74 52 47 42 3d ac  49 6e 76 65 72 74 52 47  |ertRGB=.InvertRG|
00001590  42 0d 04 42 27 20 20 20  c9 20 22 47 49 46 20 73  |B..B'   . "GIF s|
000015a0  63 61 6e 22 20 3a 20 f4  20 54 6f 67 67 6c 65 20  |can" : . Toggle |
000015b0  47 49 46 20 73 63 61 6e  0d 04 4c 18 20 20 20 20  |GIF scan..L.    |
000015c0  47 49 46 53 63 61 6e 3d  ac 47 49 46 53 63 61 6e  |GIFScan=.GIFScan|
000015d0  0d 04 56 28 20 20 20 c9  20 22 49 6d 61 67 65 20  |..V(   . "Image |
000015e0  6e 75 6d 62 65 72 22 20  3a 20 f4 20 49 6d 61 67  |number" : . Imag|
000015f0  65 20 6e 75 6d 62 65 72  0d 04 60 39 20 20 20 20  |e number..`9    |
00001600  49 6d 61 67 65 4e 72 25  3d bb 28 73 65 6c 65 63  |ImageNr%=.(selec|
00001610  74 33 24 29 3a f4 20 4e  65 77 20 76 61 6c 75 65  |t3$):. New value|
00001620  20 66 6f 72 20 69 6d 61  67 65 20 6e 75 6d 62 65  | for image numbe|
00001630  72 0d 04 6a 2d 20 20 20  20 f2 73 75 62 6d 65 6e  |r..j-    .submen|
00001640  75 28 22 50 72 6f 63 65  73 73 69 6e 67 2e 49 6d  |u("Processing.Im|
00001650  61 67 65 20 6e 75 6d 62  65 72 22 2c a3 29 0d 04  |age number",.)..|
00001660  74 07 20 20 cb 0d 04 7e  1e 20 20 f2 73 75 62 6d  |t.  ...~.  .subm|
00001670  65 6e 75 28 22 50 72 6f  63 65 73 73 69 6e 67 22  |enu("Processing"|
00001680  2c a3 29 0d 04 88 31 20  c9 20 22 5a 6f 6f 6d 20  |,.)...1 . "Zoom |
00001690  69 6d 61 67 65 22 20 3a  20 f4 20 5a 6f 6f 6d 20  |image" : . Zoom |
000016a0  69 6e 2c 20 6f 75 74 2c  20 6e 6f 72 6d 61 6c 20  |in, out, normal |
000016b0  73 69 7a 65 0d 04 92 3f  20 20 4f 6c 64 5a 6f 6f  |size...?  OldZoo|
000016c0  6d 58 3d 5a 6f 6f 6d 58  3a 4f 6c 64 5a 6f 6f 6d  |mX=ZoomX:OldZoom|
000016d0  59 3d 5a 6f 6f 6d 59 3a  f4 20 52 65 6d 65 6d 62  |Y=ZoomY:. Rememb|
000016e0  65 72 20 6f 6c 64 20 7a  6f 6f 6d 20 66 61 63 74  |er old zoom fact|
000016f0  6f 72 73 0d 04 9c 13 20  20 c8 8e 20 73 65 6c 65  |ors....  .. sele|
00001700  63 74 32 24 20 ca 0d 04  a6 7d 20 20 20 c9 20 22  |ct2$ ....}   . "|
00001710  49 6e 22 3a 20 e7 73 65  6c 65 63 74 33 24 3d 22  |In": .select3$="|
00001720  42 6f 74 68 22 20 8c 20  5a 6f 6f 6d 58 3d 5a 6f  |Both" . ZoomX=Zo|
00001730  6f 6d 58 2a 32 3a 5a 6f  6f 6d 59 3d 5a 6f 6f 6d  |omX*2:ZoomY=Zoom|
00001740  59 2a 32 20 8b 20 e7 73  65 6c 65 63 74 33 24 3d  |Y*2 . .select3$=|
00001750  22 78 22 20 8c 20 5a 6f  6f 6d 58 3d 5a 6f 6f 6d  |"x" . ZoomX=Zoom|
00001760  58 2a 32 20 8b 20 e7 73  65 6c 65 63 74 33 24 3d  |X*2 . .select3$=|
00001770  22 79 22 20 8c 20 5a 6f  6f 6d 59 3d 5a 6f 6f 6d  |"y" . ZoomY=Zoom|
00001780  59 2a 32 0d 04 b0 7e 20  20 20 c9 20 22 4f 75 74  |Y*2...~   . "Out|
00001790  22 3a 20 e7 73 65 6c 65  63 74 33 24 3d 22 42 6f  |": .select3$="Bo|
000017a0  74 68 22 20 8c 20 5a 6f  6f 6d 58 3d 5a 6f 6f 6d  |th" . ZoomX=Zoom|
000017b0  58 2f 32 3a 5a 6f 6f 6d  59 3d 5a 6f 6f 6d 59 2f  |X/2:ZoomY=ZoomY/|
000017c0  32 20 8b 20 e7 73 65 6c  65 63 74 33 24 3d 22 78  |2 . .select3$="x|
000017d0  22 20 8c 20 5a 6f 6f 6d  58 3d 5a 6f 6f 6d 58 2f  |" . ZoomX=ZoomX/|
000017e0  32 20 8b 20 e7 73 65 6c  65 63 74 33 24 3d 22 79  |2 . .select3$="y|
000017f0  22 20 8c 20 5a 6f 6f 6d  59 3d 5a 6f 6f 6d 59 2f  |" . ZoomY=ZoomY/|
00001800  32 0d 04 ba 1f 20 20 20  c9 20 22 31 3a 31 22 3a  |2....   . "1:1":|
00001810  20 5a 6f 6f 6d 58 3d 31  3a 5a 6f 6f 6d 59 3d 31  | ZoomX=1:ZoomY=1|
00001820  0d 04 c4 07 20 20 cb 0d  04 ce 4a 20 20 f4 20 53  |....  ....J  . S|
00001830  65 74 20 69 6d 61 67 65  20 77 69 6e 64 6f 77 20  |et image window |
00001840  65 78 74 65 6e 74 20 61  6e 64 20 74 69 74 6c 65  |extent and title|
00001850  20 61 63 63 6f 72 64 69  6e 67 20 74 6f 20 63 75  | according to cu|
00001860  72 72 65 6e 74 20 7a 6f  6f 6d 20 66 61 63 74 6f  |rrent zoom facto|
00001870  72 0d 04 d8 41 20 20 21  62 6c 6f 63 6b 3d 30 3a  |r...A  !block=0:|
00001880  62 6c 6f 63 6b 21 34 3d  30 3a 62 6c 6f 63 6b 21  |block!4=0:block!|
00001890  38 3d a4 73 70 72 57 2a  5a 6f 6f 6d 58 3a 62 6c  |8=.sprW*ZoomX:bl|
000018a0  6f 63 6b 21 31 32 3d a4  73 70 72 48 2a 5a 6f 6f  |ock!12=.sprH*Zoo|
000018b0  6d 59 0d 04 e2 41 20 20  c8 99 20 57 53 65 74 45  |mY...A  .. WSetE|
000018c0  25 2c 77 69 6e 5f 69 6d  67 25 2c 62 6c 6f 63 6b  |%,win_img%,block|
000018d0  3a f4 20 53 65 74 20 77  69 6e 64 6f 77 20 65 78  |:. Set window ex|
000018e0  74 65 6e 74 20 74 6f 20  7a 6f 6f 6d 65 64 20 73  |tent to zoomed s|
000018f0  69 7a 65 0d 04 ec 26 20  20 24 49 4d 57 74 74 25  |ize...&  $IMWtt%|
00001900  3d a4 69 6d 61 67 65 5f  74 69 74 6c 65 3a f4 20  |=.image_title:. |
00001910  4e 65 77 20 74 69 74 6c  65 0d 04 f6 40 20 20 21  |New title...@  !|
00001920  62 6c 6f 63 6b 3d 77 69  6e 5f 69 6d 67 25 3a c8  |block=win_img%:.|
00001930  99 20 57 47 65 74 57 53  25 2c 2c 62 6c 6f 63 6b  |. WGetWS%,,block|
00001940  3a f4 20 52 65 61 64 20  77 69 6e 64 6f 77 27 73  |:. Read window's|
00001950  20 70 6f 73 69 74 69 6f  6e 0d 05 00 4a 20 20 64  | position...J  d|
00001960  78 25 3d 28 62 6c 6f 63  6b 21 31 32 2d 62 6c 6f  |x%=(block!12-blo|
00001970  63 6b 21 34 29 2f 32 3a  64 79 25 3d 28 62 6c 6f  |ck!4)/2:dy%=(blo|
00001980  63 6b 21 31 36 2d 62 6c  6f 63 6b 21 38 29 2f 32  |ck!16-block!8)/2|
00001990  3a f4 20 48 61 6c 66 20  77 69 6e 64 6f 77 20 73  |:. Half window s|
000019a0  69 7a 65 0d 05 0a 46 20  20 76 78 25 3d 62 6c 6f  |ize...F  vx%=blo|
000019b0  63 6b 21 32 30 2b 64 78  25 3a 76 79 25 3d 62 6c  |ck!20+dx%:vy%=bl|
000019c0  6f 63 6b 21 32 34 2d 64  79 25 3a f4 20 56 65 63  |ock!24-dy%:. Vec|
000019d0  74 6f 72 20 66 72 6f 6d  20 63 65 6e 74 72 65 20  |tor from centre |
000019e0  74 6f 20 6f 72 69 67 69  6e 0d 05 14 47 20 20 f4  |to origin...G  .|
000019f0  20 43 61 6c 63 75 6c 61  74 65 20 6e 65 77 20 73  | Calculate new s|
00001a00  63 72 6f 6c 6c 20 6f 66  66 73 65 74 73 20 62 79  |croll offsets by|
00001a10  20 73 63 61 6c 69 6e 67  20 76 65 63 74 6f 72 20  | scaling vector |
00001a20  61 6e 64 20 72 65 2d 74  72 61 6e 73 70 6f 73 65  |and re-transpose|
00001a30  0d 05 1e 45 20 20 62 6c  6f 63 6b 21 32 30 3d 76  |...E  block!20=v|
00001a40  78 25 2a 5a 6f 6f 6d 58  2f 4f 6c 64 5a 6f 6f 6d  |x%*ZoomX/OldZoom|
00001a50  58 2d 64 78 25 3a 62 6c  6f 63 6b 21 32 34 3d 76  |X-dx%:block!24=v|
00001a60  79 25 2a 5a 6f 6f 6d 59  2f 4f 6c 64 5a 6f 6f 6d  |y%*ZoomY/OldZoom|
00001a70  59 2b 64 79 25 0d 05 28  3a 20 20 f2 63 6c 6f 73  |Y+dy%..(:  .clos|
00001a80  65 5f 77 69 6e 64 6f 77  28 77 69 6e 5f 69 6d 67  |e_window(win_img|
00001a90  25 29 3a f2 6f 70 65 6e  5f 77 69 6e 64 6f 77 28  |%):.open_window(|
00001aa0  77 69 6e 5f 69 6d 67 25  2c 62 6c 6f 63 6b 29 0d  |win_img%,block).|
00001ab0  05 32 1e 20 20 f2 73 75  62 6d 65 6e 75 28 22 5a  |.2.  .submenu("Z|
00001ac0  6f 6f 6d 20 69 6d 61 67  65 22 2c a3 29 0d 05 3c  |oom image",.)..<|
00001ad0  33 20 c9 20 22 53 61 76  65 20 69 6d 61 67 65 22  |3 . "Save image"|
00001ae0  20 3a 20 f4 20 53 61 76  65 20 77 68 6f 6c 65 20  | : . Save whole |
00001af0  6f 72 20 70 61 72 74 20  6f 66 20 69 6d 61 67 65  |or part of image|
00001b00  0d 05 46 30 20 20 53 61  76 65 4b 69 6e 64 24 3d  |..F0  SaveKind$=|
00001b10  73 65 6c 65 63 74 32 24  3a f4 20 52 65 6d 65 6d  |select2$:. Remem|
00001b20  62 65 72 20 74 79 70 65  20 6f 66 20 73 61 76 65  |ber type of save|
00001b30  0d 05 50 46 20 20 24 53  41 56 66 6e 25 3d 53 61  |..PF  $SAVfn%=Sa|
00001b40  76 65 53 70 72 24 3a 24  53 41 56 73 6e 25 3d 22  |veSpr$:$SAVsn%="|
00001b50  66 69 6c 65 5f 66 66 39  22 3a f4 20 53 65 74 20  |file_ff9":. Set |
00001b60  66 69 6c 65 20 77 69 6e  64 6f 77 20 66 6f 72 20  |file window for |
00001b70  73 70 72 69 74 65 0d 05  5a 32 20 20 f2 6f 70 65  |sprite..Z2  .ope|
00001b80  6e 5f 77 69 6e 64 6f 77  28 77 69 6e 5f 66 69 6c  |n_window(win_fil|
00001b90  65 25 2c 30 29 3a f4 20  4f 70 65 6e 20 66 69 6c  |e%,0):. Open fil|
00001ba0  65 20 77 69 6e 64 6f 77  0d 05 64 37 20 c9 20 22  |e window..d7 . "|
00001bb0  49 6e 63 6c 75 64 65 20  70 61 6c 65 74 74 65 22  |Include palette"|
00001bc0  20 3a 20 f4 20 54 6f 67  67 6c 65 20 73 61 76 65  | : . Toggle save|
00001bd0  2d 70 61 6c 65 74 74 65  20 6f 6e 2f 6f 66 66 0d  |-palette on/off.|
00001be0  05 6e 21 20 20 50 61 6c  6f 6e 6f 66 66 3d ac 50  |.n!  Palonoff=.P|
00001bf0  61 6c 6f 6e 6f 66 66 3a  f4 20 54 6f 67 67 6c 65  |alonoff:. Toggle|
00001c00  0d 05 78 2f 20 c9 20 22  49 6d 61 67 65 20 70 61  |..x/ . "Image pa|
00001c10  6c 65 74 74 65 22 20 3a  20 f4 20 53 65 6c 65 63  |lette" : . Selec|
00001c20  74 20 69 6d 61 67 65 20  70 61 6c 65 74 74 65 0d  |t image palette.|
00001c30  05 82 15 20 20 f2 73 65  74 5f 70 61 6c 65 74 74  |...  .set_palett|
00001c40  65 28 31 29 0d 05 8c 27  20 c9 20 22 52 6f 74 61  |e(1)...' . "Rota|
00001c50  74 65 20 69 6d 61 67 65  22 20 3a 20 f4 20 52 6f  |te image" : . Ro|
00001c60  74 61 74 65 20 73 70 72  69 74 65 0d 05 96 1d 20  |tate sprite.... |
00001c70  20 f2 68 6f 75 72 5f 6f  6e 3a f4 20 48 6f 75 72  | .hour_on:. Hour|
00001c80  67 6c 61 73 73 20 6f 6e  0d 05 a0 34 20 20 c8 99  |glass on...4  ..|
00001c90  20 22 54 72 61 6e 73 6c  61 74 6f 72 5f 52 6f 74  | "Translator_Rot|
00001ca0  61 74 65 22 2c 53 70 72  50 74 72 25 3a f4 20 52  |ate",SprPtr%:. R|
00001cb0  6f 74 61 74 65 20 73 70  72 69 74 65 0d 05 aa 1f  |otate sprite....|
00001cc0  20 20 f2 68 6f 75 72 5f  6f 66 66 3a f4 20 48 6f  |  .hour_off:. Ho|
00001cd0  75 72 67 6c 61 73 73 20  6f 66 66 0d 05 b4 3e 20  |urglass off...> |
00001ce0  20 f2 73 70 72 69 74 65  5f 68 65 61 64 65 72 28  | .sprite_header(|
00001cf0  31 29 3a c8 94 20 53 70  72 48 25 2c 53 70 72 57  |1):.. SprH%,SprW|
00001d00  25 3a f4 20 53 65 74 20  73 70 72 69 74 65 20 69  |%:. Set sprite i|
00001d10  6e 66 6f 20 72 69 67 68  74 0d 05 be 40 20 20 f2  |nfo right...@  .|
00001d20  6e 65 77 5f 69 6d 61 67  65 5f 77 69 6e 64 6f 77  |new_image_window|
00001d30  3a f2 6e 65 77 5f 77 69  6e 64 6f 77 28 77 69 6e  |:.new_window(win|
00001d40  5f 69 6d 67 25 29 3a f4  20 4e 65 77 20 69 6d 61  |_img%):. New ima|
00001d50  67 65 20 77 69 6e 64 6f  77 0d 05 c8 26 20 c9 20  |ge window...& . |
00001d60  22 4d 69 72 72 6f 72 20  69 6d 61 67 65 22 20 3a  |"Mirror image" :|
00001d70  20 f4 20 4d 69 72 72 6f  72 20 69 6d 61 67 65 0d  | . Mirror image.|
00001d80  05 d2 39 20 20 f2 76 61  72 28 22 77 69 64 74 22  |..9  .var("widt"|
00001d90  2c 53 70 72 57 25 29 3a  f2 76 61 72 28 22 68 65  |,SprW%):.var("he|
00001da0  69 67 22 2c 53 70 72 48  25 29 3a f4 20 4d 6f 64  |ig",SprH%):. Mod|
00001db0  75 6c 65 20 69 6e 66 6f  0d 05 dc 1d 20 20 f2 68  |ule info....  .h|
00001dc0  6f 75 72 5f 6f 6e 3a f4  20 48 6f 75 72 67 6c 61  |our_on:. Hourgla|
00001dd0  73 73 20 6f 6e 0d 05 e6  67 20 20 e7 73 65 6c 65  |ss on...g  .sele|
00001de0  63 74 32 24 3d 22 78 22  20 8c 20 c8 99 20 22 54  |ct2$="x" . .. "T|
00001df0  72 61 6e 73 6c 61 74 6f  72 5f 4d 69 72 72 6f 72  |ranslator_Mirror|
00001e00  58 22 2c 53 70 72 50 74  72 25 20 8b 20 c8 99 20  |X",SprPtr% . .. |
00001e10  22 54 72 61 6e 73 6c 61  74 6f 72 5f 4d 69 72 72  |"Translator_Mirr|
00001e20  6f 72 59 22 2c 53 70 72  50 74 72 25 3a f4 20 4d  |orY",SprPtr%:. M|
00001e30  69 72 72 6f 72 20 73 70  72 69 74 65 0d 05 f0 1f  |irror sprite....|
00001e40  20 20 f2 68 6f 75 72 5f  6f 66 66 3a f4 20 48 6f  |  .hour_off:. Ho|
00001e50  75 72 67 6c 61 73 73 20  6f 66 66 0d 05 fa 32 20  |urglass off...2 |
00001e60  20 f2 6e 65 77 5f 77 69  6e 64 6f 77 28 77 69 6e  | .new_window(win|
00001e70  5f 69 6d 67 25 29 3a f4  20 46 72 65 73 68 65 6e  |_img%):. Freshen|
00001e80  20 69 6d 61 67 65 20 77  69 6e 64 6f 77 0d 06 04  | image window...|
00001e90  27 20 c9 20 22 53 74 61  74 75 73 22 20 3a 20 f4  |' . "Status" : .|
00001ea0  20 4d 61 6e 69 70 75 6c  61 74 65 20 64 65 66 61  | Manipulate defa|
00001eb0  75 6c 74 73 0d 06 0e 13  20 20 c8 8e 20 73 65 6c  |ults....  .. sel|
00001ec0  65 63 74 32 24 20 ca 0d  06 18 d9 20 20 20 c9 20  |ect2$ .....   . |
00001ed0  22 53 61 76 65 22 20 3a  20 53 74 61 74 75 73 3d  |"Save" : Status=|
00001ee0  ae 28 22 3c 54 72 61 6e  73 6c 61 74 6f 72 24 44  |.("<Translator$D|
00001ef0  69 72 3e 2e 53 74 61 74  75 73 22 29 3a f1 23 53  |ir>.Status"):.#S|
00001f00  74 61 74 75 73 2c 41 75  74 6f 4d 6f 64 65 2c 41  |tatus,AutoMode,A|
00001f10  75 74 6f 50 61 6c 2c 4d  6f 64 65 53 65 74 2c 45  |utoPal,ModeSet,E|
00001f20  72 72 53 70 72 65 61 64  2c 50 61 6c 6f 6e 6f 66  |rrSpread,Palonof|
00001f30  66 2c 55 73 65 72 4d 6f  64 65 53 65 74 25 28 31  |f,UserModeSet%(1|
00001f40  29 2c 55 73 65 72 4d 6f  64 65 53 65 74 25 28 32  |),UserModeSet%(2|
00001f50  29 2c 55 73 65 72 4d 6f  64 65 53 65 74 25 28 33  |),UserModeSet%(3|
00001f60  29 2c 55 73 65 72 4d 6f  64 65 53 65 74 25 28 34  |),UserModeSet%(4|
00001f70  29 2c 41 75 74 6f 5a 6f  6f 6d 2c 42 6c 61 63 6b  |),AutoZoom,Black|
00001f80  57 68 69 74 65 2c 47 49  46 53 63 61 6e 2c 42 6c  |White,GIFScan,Bl|
00001f90  61 6e 6b 69 6e 67 2c 49  6e 76 65 72 74 52 47 42  |anking,InvertRGB|
00001fa0  0d 06 22 20 20 20 20 20  f1 23 53 74 61 74 75 73  |.."     .#Status|
00001fb0  2c 5a 69 67 5a 61 67 3a  d9 23 53 74 61 74 75 73  |,ZigZag:.#Status|
00001fc0  0d 06 2c 62 20 20 20 c9  20 22 4c 6f 61 64 22 20  |..,b   . "Load" |
00001fd0  3a 20 e7 a4 6c 6f 61 64  5f 73 74 61 74 75 73 20  |: ..load_status |
00001fe0  8b 20 f2 65 72 72 6f 72  28 2d 31 2c 22 49 20 63  |. .error(-1,"I c|
00001ff0  61 6e 6e 6f 74 20 66 69  6e 64 20 6d 79 20 73 74  |annot find my st|
00002000  61 74 75 73 20 66 69 6c  65 20 21 20 48 61 76 65  |atus file ! Have|
00002010  20 79 6f 75 20 73 61 76  65 64 20 6f 6e 65 20 3f  | you saved one ?|
00002020  22 29 0d 06 36 3a 20 20  20 c9 20 22 4b 69 6c 6c  |")..6:   . "Kill|
00002030  22 20 3a 20 c8 99 20 22  4f 53 5f 46 69 6c 65 22  |" : .. "OS_File"|
00002040  2c 36 2c 22 3c 54 72 61  6e 73 6c 61 74 6f 72 24  |,6,"<Translator$|
00002050  44 69 72 3e 2e 53 74 61  74 75 73 22 0d 06 40 07  |Dir>.Status"..@.|
00002060  20 20 cb 0d 06 4a 05 cb  0d 06 54 28 c8 99 20 57  |  ...J....T(.. W|
00002070  47 65 74 50 49 25 2c 2c  62 6c 6f 63 6b 3a f4 20  |GetPI%,,block:. |
00002080  47 65 74 20 70 6f 69 6e  74 65 72 20 69 6e 66 6f  |Get pointer info|
00002090  0d 06 5e 3b e7 28 28 62  6c 6f 63 6b 21 38 29 80  |..^;.((block!8).|
000020a0  31 29 3e 30 20 8c 20 f2  6f 70 74 69 6f 6e 73 5f  |1)>0 . .options_|
000020b0  6d 65 6e 75 28 b9 29 3a  f4 20 41 64 6a 75 73 74  |menu(.):. Adjust|
000020c0  20 2d 3e 20 72 65 2d 6f  70 65 6e 0d 06 68 05 e1  | -> re-open..h..|
000020d0  0d 06 72 04 0d 06 7c 0b  dd f2 63 6c 6f 73 65 0d  |..r...|...close.|
000020e0  06 86 1f 77 69 6e 25 3d  70 6f 6c 6c 21 30 3a f4  |...win%=poll!0:.|
000020f0  20 57 69 6e 64 6f 77 20  68 61 6e 64 6c 65 0d 06  | Window handle..|
00002100  90 26 f2 63 6c 6f 73 65  5f 77 69 6e 64 6f 77 28  |.&.close_window(|
00002110  77 69 6e 25 29 3a f4 20  43 6c 6f 73 65 20 77 69  |win%):. Close wi|
00002120  6e 64 6f 77 0d 06 9a 4f  e7 77 69 6e 25 3d 77 69  |ndow...O.win%=wi|
00002130  6e 5f 69 6d 67 25 20 8c  20 f2 69 6e 76 61 6c 69  |n_img% . .invali|
00002140  64 61 74 65 5f 69 6d 61  67 65 3a f2 73 65 74 5f  |date_image:.set_|
00002150  70 61 6c 65 74 74 65 28  30 29 3a f2 63 6c 6f 73  |palette(0):.clos|
00002160  65 5f 77 69 6e 64 6f 77  28 77 69 6e 5f 66 69 6c  |e_window(win_fil|
00002170  65 25 29 0d 06 a4 05 e1  0d 06 ae 04 0d 06 b8 0a  |e%).............|
00002180  dd f2 6f 70 65 6e 0d 06  c2 18 f2 6f 70 65 6e 5f  |..open.....open_|
00002190  77 69 6e 64 6f 77 28 30  2c 70 6f 6c 6c 29 0d 06  |window(0,poll)..|
000021a0  cc 05 e1 0d 06 d6 04 0d  06 e0 0c dd f2 72 65 64  |.............red|
000021b0  72 61 77 0d 06 ea 1c f2  72 65 64 72 61 77 5f 77  |raw.....redraw_w|
000021c0  69 6e 64 6f 77 28 70 6f  6c 6c 21 30 2c a3 29 0d  |indow(poll!0,.).|
000021d0  06 f4 05 e1 0d 06 fe 04  0d 07 08 0a dd f2 6e 75  |..............nu|
000021e0  6c 6c 0d 07 12 13 e7 44  61 74 61 4c 6f 61 64 52  |ll.....DataLoadR|
000021f0  65 66 25 20 8c 0d 07 1c  44 20 44 61 74 61 4c 6f  |ef% ....D DataLo|
00002200  61 64 52 65 66 25 3d a3  3a c8 99 20 22 4f 53 5f  |adRef%=.:.. "OS_|
00002210  46 69 6c 65 22 2c 36 2c  53 61 76 65 24 3a f4 20  |File",6,Save$:. |
00002220  44 65 6c 65 74 65 20 66  69 6c 65 20 73 61 76 65  |Delete file save|
00002230  64 2f 63 72 65 61 74 65  64 0d 07 26 43 20 f2 65  |d/created..&C .e|
00002240  72 72 6f 72 28 2d 31 2c  22 42 61 64 20 64 61 74  |rror(-1,"Bad dat|
00002250  61 20 74 72 61 6e 73 66  65 72 2c 20 72 65 63 65  |a transfer, rece|
00002260  69 76 65 72 20 64 65 61  64 22 29 3a f4 20 4e 6f  |iver dead"):. No|
00002270  20 44 61 74 61 4c 6f 61  64 41 63 6b 0d 07 30 05  | DataLoadAck..0.|
00002280  cd 0d 07 3a 05 e1 0d 07  44 04 0d 07 4e 09 dd f2  |...:....D...N...|
00002290  6b 65 79 0d 07 58 45 77  69 6e 25 3d 70 6f 6c 6c  |key..XEwin%=poll|
000022a0  21 30 3a 69 63 6f 25 3d  70 6f 6c 6c 21 34 3a 63  |!0:ico%=poll!4:c|
000022b0  68 61 72 25 3d 70 6f 6c  6c 21 32 34 3a f4 20 57  |har%=poll!24:. W|
000022c0  69 6e 64 6f 77 2c 20 69  63 6f 6e 2c 20 6b 65 79  |indow, icon, key|
000022d0  20 70 72 65 73 73 65 64  0d 07 62 22 e7 28 77 69  | pressed..b".(wi|
000022e0  6e 25 3d 77 69 6e 5f 66  69 6c 65 25 29 20 80 20  |n%=win_file%) . |
000022f0  28 69 63 6f 25 3d 31 29  20 8c 0d 07 6c 0f 20 c8  |(ico%=1) ...l. .|
00002300  8e 20 63 68 61 72 25 20  ca 0d 07 76 1d 20 20 c9  |. char% ...v.  .|
00002310  20 31 33 20 3a 20 f4 20  52 65 74 75 72 6e 20 70  | 13 : . Return p|
00002320  72 65 73 73 65 64 0d 07  80 4a 20 20 20 f2 65 72  |ressed...J   .er|
00002330  72 6f 72 28 2d 31 2c 22  50 6c 65 61 73 65 20 64  |ror(-1,"Please d|
00002340  72 61 67 20 74 68 65 20  73 70 72 69 74 65 20 66  |rag the sprite f|
00002350  69 6c 65 20 69 63 6f 6e  20 74 6f 20 61 20 64 69  |ile icon to a di|
00002360  72 65 63 74 6f 72 79 20  76 69 65 77 65 72 22 29  |rectory viewer")|
00002370  0d 07 8a 1d 20 20 c9 20  32 37 20 3a 20 f4 20 45  |....  . 27 : . E|
00002380  73 63 61 70 65 20 70 72  65 73 73 65 64 0d 07 94  |scape pressed...|
00002390  1f 20 20 20 f2 63 6c 6f  73 65 5f 77 69 6e 64 6f  |.   .close_windo|
000023a0  77 28 77 69 6e 5f 66 69  6c 65 25 29 0d 07 9e 06  |w(win_file%)....|
000023b0  20 cb 0d 07 a8 05 cd 0d  07 b2 05 e1 0d 07 bc 04  | ...............|
000023c0  0d 07 c6 0d dd f2 6d 65  73 73 61 67 65 0d 07 d0  |......message...|
000023d0  2d f4 20 49 67 6e 6f 72  65 20 6d 65 73 73 61 67  |-. Ignore messag|
000023e0  65 73 20 6f 72 69 67 69  6e 61 74 69 6e 67 20 66  |es originating f|
000023f0  72 6f 6d 20 6d 79 73 65  6c 66 0d 07 da 36 e7 28  |rom myself...6.(|
00002400  70 6f 6c 6c 21 34 29 3d  54 61 73 6b 48 61 6e 64  |poll!4)=TaskHand|
00002410  6c 65 25 20 8c 20 6d 73  67 6e 72 25 3d 2d 31 20  |le% . msgnr%=-1 |
00002420  8b 20 6d 73 67 6e 72 25  3d 70 6f 6c 6c 21 31 36  |. msgnr%=poll!16|
00002430  0d 07 e4 0f c8 8e 20 6d  73 67 6e 72 25 20 ca 0d  |...... msgnr% ..|
00002440  07 ee 19 20 c9 20 2d 31  20 3a 20 f4 20 44 6f 6e  |... . -1 : . Don|
00002450  27 74 20 72 65 61 63 74  0d 07 f8 2b 20 c9 20 30  |'t react...+ . 0|
00002460  20 3a 20 f2 64 69 65 3a  f4 20 52 65 71 75 65 73  | : .die:. Reques|
00002470  74 20 74 6f 20 74 65 72  6d 69 6e 61 74 65 20 74  |t to terminate t|
00002480  61 73 6b 0d 08 02 2e 20  c9 20 31 20 3a 20 f4 20  |ask.... . 1 : . |
00002490  44 61 74 61 53 61 76 65  2c 20 74 72 61 6e 73 66  |DataSave, transf|
000024a0  65 72 20 76 69 61 20 73  63 72 61 70 20 66 69 6c  |er via scrap fil|
000024b0  65 0d 08 0c 37 20 20 73  63 72 61 70 24 3d a4 4f  |e...7  scrap$=.O|
000024c0  53 76 61 72 28 22 57 69  6d 70 24 53 63 72 61 70  |Svar("Wimp$Scrap|
000024d0  22 29 3a f4 20 52 65 61  64 20 73 63 72 61 70 20  |"):. Read scrap |
000024e0  66 69 6c 65 6e 61 6d 65  0d 08 16 d2 20 20 e7 73  |filename....  .s|
000024f0  63 72 61 70 24 3c 3e 22  22 20 8c 20 70 6f 6c 6c  |crap$<>"" . poll|
00002500  21 31 32 3d 70 6f 6c 6c  21 38 3a 70 6f 6c 6c 21  |!12=poll!8:poll!|
00002510  31 36 3d 32 3a 70 6f 6c  6c 21 33 36 3d 2d 31 3a  |16=2:poll!36=-1:|
00002520  24 28 70 6f 6c 6c 2b 34  34 29 3d 73 63 72 61 70  |$(poll+44)=scrap|
00002530  24 2b bd 30 3a 70 6f 6c  6c 21 30 3d 34 34 2b 28  |$+.0:poll!0=44+(|
00002540  a9 73 63 72 61 70 24 2b  31 2b 33 29 80 ac 33 3a  |.scrap$+1+3)..3:|
00002550  c8 99 20 57 53 65 6e 64  4d 73 67 25 2c 31 38 2c  |.. WSendMsg%,18,|
00002560  70 6f 6c 6c 2c 70 6f 6c  6c 21 34 20 8b 20 f2 65  |poll,poll!4 . .e|
00002570  72 72 6f 72 28 2d 31 2c  22 57 69 6d 70 24 53 63  |rror(-1,"Wimp$Sc|
00002580  72 61 70 20 6e 6f 74 20  64 65 66 69 6e 65 64 22  |rap not defined"|
00002590  29 3a f4 20 53 65 6e 64  20 44 61 74 61 53 61 76  |):. Send DataSav|
000025a0  65 41 63 6b 20 69 66 20  73 63 72 61 70 20 66 69  |eAck if scrap fi|
000025b0  6c 65 20 64 65 66 69 6e  65 64 0d 08 20 23 20 c9  |le defined.. # .|
000025c0  20 32 20 3a 20 f4 20 44  61 74 61 53 61 76 65 41  | 2 : . DataSaveA|
000025d0  63 6b 2c 20 73 61 76 65  20 66 69 6c 65 0d 08 2a  |ck, save file..*|
000025e0  1d 20 20 e7 70 6f 6c 6c  21 31 32 3d 44 61 74 61  |.  .poll!12=Data|
000025f0  53 61 76 65 52 65 66 25  20 8c 0d 08 34 49 20 20  |SaveRef% ...4I  |
00002600  20 53 61 76 65 24 3d a4  73 74 72 69 6e 67 28 70  | Save$=.string(p|
00002610  6f 6c 6c 2b 34 34 29 3a  f4 20 46 75 6c 6c 20 70  |oll+44):. Full p|
00002620  61 74 68 6e 61 6d 65 20  6f 66 20 66 69 6c 65 20  |athname of file |
00002630  74 6f 20 62 65 20 73 61  76 65 64 2f 63 72 65 61  |to be saved/crea|
00002640  74 65 64 0d 08 3e 2e 20  20 20 f4 20 53 61 76 65  |ted..>.   . Save|
00002650  20 73 70 72 69 74 65 20  66 69 6c 65 20 6f 72 20  | sprite file or |
00002660  27 6f 70 65 6e 27 20 43  6c 65 61 72 20 66 69 6c  |'open' Clear fil|
00002670  65 0d 08 48 85 20 20 20  e7 24 53 41 56 73 6e 25  |e..H.   .$SAVsn%|
00002680  3d 22 66 69 6c 65 5f 66  66 39 22 20 8c 20 53 70  |="file_ff9" . Sp|
00002690  72 53 61 76 65 24 3d 53  61 76 65 24 3a f2 73 61  |rSave$=Save$:.sa|
000026a0  76 65 5f 73 70 72 69 74  65 28 53 70 72 53 61 76  |ve_sprite(SprSav|
000026b0  65 24 29 20 8b 20 43 6c  65 61 72 53 61 76 65 24  |e$) . ClearSave$|
000026c0  3d 53 61 76 65 24 3a c8  99 20 22 4f 53 5f 46 69  |=Save$:.. "OS_Fi|
000026d0  6c 65 22 2c 31 31 2c 43  6c 65 61 72 53 61 76 65  |le",11,ClearSave|
000026e0  24 2c 26 36 39 30 2c 30  2c 30 3a 43 6c 65 61 72  |$,&690,0,0:Clear|
000026f0  46 69 6c 65 3d b9 0d 08  52 3f 20 20 20 70 6f 6c  |File=...R?   pol|
00002700  6c 21 31 32 3d 70 6f 6c  6c 21 38 3a 70 6f 6c 6c  |l!12=poll!8:poll|
00002710  21 31 36 3d 33 3a f4 20  41 6d 65 6e 64 20 64 61  |!16=3:. Amend da|
00002720  74 61 20 62 6c 6f 63 6b  20 66 6f 72 20 44 61 74  |ta block for Dat|
00002730  61 4c 6f 61 64 0d 08 5c  32 20 20 20 c8 99 20 57  |aLoad..\2   .. W|
00002740  53 65 6e 64 4d 73 67 25  2c 31 38 2c 70 6f 6c 6c  |SendMsg%,18,poll|
00002750  2c 70 6f 6c 6c 21 34 3a  f4 20 53 65 6e 64 20 44  |,poll!4:. Send D|
00002760  61 74 61 4c 6f 61 64 0d  08 66 40 20 20 20 44 61  |ataLoad..f@   Da|
00002770  74 61 4c 6f 61 64 52 65  66 25 3d 70 6f 6c 6c 21  |taLoadRef%=poll!|
00002780  38 3a f4 20 41 77 61 69  74 20 61 20 44 61 74 61  |8:. Await a Data|
00002790  4c 6f 61 64 41 63 6b 2c  20 72 65 6d 65 6d 62 65  |LoadAck, remembe|
000027a0  72 20 6d 79 72 65 66 0d  08 70 07 20 20 cd 0d 08  |r myref..p.  ...|
000027b0  7a 2e 20 c9 20 33 2c 35  20 3a 20 f4 20 44 61 74  |z. . 3,5 : . Dat|
000027c0  61 4c 6f 61 64 2f 4f 70  65 6e 20 3a 20 61 74 74  |aLoad/Open : att|
000027d0  65 6d 70 74 20 74 6f 20  6c 6f 61 64 0d 08 84 1e  |empt to load....|
000027e0  20 20 74 79 70 65 25 3d  70 6f 6c 6c 21 34 30 3a  |  type%=poll!40:|
000027f0  f4 20 46 69 6c 65 74 79  70 65 0d 08 8e 27 20 20  |. Filetype...'  |
00002800  6e 61 6d 65 24 3d a4 73  74 72 69 6e 67 28 70 6f  |name$=.string(po|
00002810  6c 6c 2b 34 34 29 3a f4  20 46 69 6c 65 6e 61 6d  |ll+44):. Filenam|
00002820  65 0d 08 98 10 20 20 c8  8e 20 74 79 70 65 25 20  |e....  .. type% |
00002830  ca 0d 08 a2 4f 20 20 20  c9 20 26 36 39 30 2c 26  |....O   . &690,&|
00002840  36 39 31 2c 26 36 39 32  2c 26 36 39 33 2c 26 36  |691,&692,&693,&6|
00002850  39 34 2c 26 36 39 35 2c  26 36 39 36 2c 26 36 39  |94,&695,&696,&69|
00002860  37 2c 26 36 39 38 2c 26  46 46 30 20 3a 20 f2 6c  |7,&698,&FF0 : .l|
00002870  6f 61 64 28 74 79 70 65  25 2c 6e 61 6d 65 24 29  |oad(type%,name$)|
00002880  0d 08 ac 42 20 20 20 c9  20 26 46 46 39 2c 26 44  |...B   . &FF9,&D|
00002890  45 32 2c 26 44 46 41 2c  26 44 35 38 2c 26 30 30  |E2,&DFA,&D58,&00|
000028a0  34 20 3a 20 e7 6d 73 67  6e 72 25 3d 33 20 8c 20  |4 : .msgnr%=3 . |
000028b0  f2 6c 6f 61 64 28 74 79  70 65 25 2c 6e 61 6d 65  |.load(type%,name|
000028c0  24 29 0d 08 b6 40 20 20  7f 20 3a 20 f4 20 46 69  |$)...@  . : . Fi|
000028d0  6c 65 74 79 70 65 20 6e  6f 74 20 72 65 63 6f 67  |letype not recog|
000028e0  6e 69 7a 65 64 2c 20 6c  6f 6f 6b 20 61 74 20 63  |nized, look at c|
000028f0  6f 6e 74 65 6e 74 73 20  69 66 20 64 72 61 67 67  |ontents if dragg|
00002900  65 64 0d 08 c0 12 20 20  20 e7 6d 73 67 6e 72 25  |ed....   .msgnr%|
00002910  3d 33 20 8c 0d 08 ca 53  20 20 20 20 48 65 61 64  |=3 ....S    Head|
00002920  3d 8e 28 6e 61 6d 65 24  29 3a 69 64 24 3d 22 22  |=.(name$):id$=""|
00002930  3a e3 20 69 25 3d 31 20  b8 20 31 32 3a 69 64 24  |:. i%=1 . 12:id$|
00002940  2b 3d bd 28 9a 23 48 65  61 64 29 3a ed 3a d9 23  |+=.(.#Head):.:.#|
00002950  48 65 61 64 3a f4 20 47  65 74 20 68 65 61 64 20  |Head:. Get head |
00002960  6f 66 20 66 69 6c 65 0d  08 d4 29 20 20 20 20 74  |of file...)    t|
00002970  79 70 65 25 3d 2d 31 3a  f4 20 4e 6f 20 72 65 63  |ype%=-1:. No rec|
00002980  6f 67 6e 69 7a 65 64 20  74 79 70 65 20 79 65 74  |ognized type yet|
00002990  0d 08 de 5a 20 20 20 20  e7 c0 69 64 24 2c 36 29  |...Z    ..id$,6)|
000029a0  3d 22 47 49 46 38 37 61  22 20 8c 20 74 79 70 65  |="GIF87a" . type|
000029b0  25 3d 26 36 39 35 20 8b  20 e7 28 c0 69 64 24 2c  |%=&695 . .(.id$,|
000029c0  34 29 3d 22 46 4f 52 4d  22 29 20 80 20 28 c2 69  |4)="FORM") . (.i|
000029d0  64 24 2c 34 29 3d 22 49  4c 42 4d 22 29 20 8c 20  |d$,4)="ILBM") . |
000029e0  74 79 70 65 25 3d 26 36  39 33 0d 08 e8 6d 20 20  |type%=&693...m  |
000029f0  20 20 e7 74 79 70 65 25  3d 2d 31 20 8c 20 e7 c0  |  .type%=-1 . ..|
00002a00  69 64 24 2c 34 29 3d bd  26 35 39 2b bd 26 41 36  |id$,4)=.&59+.&A6|
00002a10  2b bd 26 36 41 2b bd 26  39 35 20 8c 20 74 79 70  |+.&6A+.&95 . typ|
00002a20  65 25 3d 26 36 39 36 20  8b 20 e7 28 c0 69 64 24  |e%=&696 . .(.id$|
00002a30  2c 32 29 3d 22 49 49 22  29 20 84 20 28 c0 69 64  |,2)="II") . (.id|
00002a40  24 2c 32 29 3d 22 4d 4d  22 29 20 8c 20 74 79 70  |$,2)="MM") . typ|
00002a50  65 25 3d 26 46 46 30 0d  08 f2 bd 20 20 20 20 e7  |e%=&FF0....    .|
00002a60  74 79 70 65 25 3e 30 20  8c 20 c8 99 20 22 4f 53  |type%>0 . .. "OS|
00002a70  5f 43 4c 49 22 2c 22 53  65 74 54 79 70 65 20 22  |_CLI","SetType "|
00002a80  2b 6e 61 6d 65 24 2b 22  20 22 2b c3 7e 28 74 79  |+name$+" "+.~(ty|
00002a90  70 65 25 29 3a f2 6c 6f  61 64 28 74 79 70 65 25  |pe%):.load(type%|
00002aa0  2c 6e 61 6d 65 24 29 20  8b 20 f2 65 72 72 6f 72  |,name$) . .error|
00002ab0  28 2d 31 2c 22 49 20 64  6f 6e 27 74 20 72 65 63  |(-1,"I don't rec|
00002ac0  6f 67 6e 69 7a 65 20 74  68 69 73 20 66 69 6c 65  |ognize this file|
00002ad0  2e 20 50 6c 65 61 73 65  20 66 69 6c 65 74 79 70  |. Please filetyp|
00002ae0  65 20 69 74 20 61 70 70  72 6f 70 69 61 74 65 6c  |e it appropiatel|
00002af0  79 2e 22 29 3a f4 20 46  69 6c 65 74 79 70 65 20  |y."):. Filetype |
00002b00  61 6e 64 20 6c 6f 61 64  20 6f 72 20 63 6f 6d 70  |and load or comp|
00002b10  6c 61 69 6e 0d 08 fc 08  20 20 20 cd 0d 09 06 07  |lain....   .....|
00002b20  20 20 cb 0d 09 10 29 20  c9 20 34 20 3a 20 f4 20  |  ....) . 4 : . |
00002b30  44 61 74 61 4c 6f 61 64  41 63 6b 2c 20 63 68 65  |DataLoadAck, che|
00002b40  63 6b 20 6f 72 20 69 67  6e 6f 72 65 0d 09 1a 3c  |ck or ignore...<|
00002b50  20 20 e7 44 61 74 61 4c  6f 61 64 52 65 66 25 20  |  .DataLoadRef% |
00002b60  8c 20 e7 70 6f 6c 6c 21  31 32 3d 44 61 74 61 4c  |. .poll!12=DataL|
00002b70  6f 61 64 52 65 66 25 20  8c 20 44 61 74 61 4c 6f  |oadRef% . DataLo|
00002b80  61 64 52 65 66 25 3d a3  0d 09 24 21 20 c9 20 26  |adRef%=...$! . &|
00002b90  34 30 30 43 30 20 3a 20  f4 20 53 75 62 6d 65 6e  |400C0 : . Submen|
00002ba0  75 20 77 61 72 6e 69 6e  67 0d 09 2e 47 20 20 70  |u warning...G  p|
00002bb0  6f 69 6e 74 65 72 25 3d  70 6f 6c 6c 21 32 30 3a  |ointer%=poll!20:|
00002bc0  78 25 3d 70 6f 6c 6c 21  32 34 3a 79 25 3d 70 6f  |x%=poll!24:y%=po|
00002bd0  6c 6c 21 32 38 3a f4 20  47 65 74 20 70 6f 69 6e  |ll!28:. Get poin|
00002be0  74 65 72 2f 70 72 6f 70  6f 73 65 64 20 78 2f 79  |ter/proposed x/y|
00002bf0  0d 09 38 41 20 20 c8 99  20 57 44 65 63 6f 64 65  |..8A  .. WDecode|
00002c00  4d 25 2c 2c 6d 65 6e 75  31 2c 70 6f 6c 6c 2b 33  |M%,,menu1,poll+3|
00002c10  32 2c c4 31 30 30 2c 22  20 22 29 20 b8 20 2c 2c  |2,.100," ") . ,,|
00002c20  2c 70 61 74 68 24 3a f4  20 47 65 74 20 70 61 74  |,path$:. Get pat|
00002c30  68 0d 09 42 10 20 20 c8  8e 20 70 61 74 68 24 20  |h..B.  .. path$ |
00002c40  ca 0d 09 4c 8a 20 20 20  c9 20 22 50 72 6f 63 65  |...L.   . "Proce|
00002c50  73 73 69 6e 67 2e 43 6c  65 61 72 20 6f 75 74 70  |ssing.Clear outp|
00002c60  75 74 22 20 3a 20 24 53  41 56 66 6e 25 3d 53 61  |ut" : $SAVfn%=Sa|
00002c70  76 65 43 6c 65 61 72 24  3a 24 53 41 56 73 6e 25  |veClear$:$SAVsn%|
00002c80  3d 22 66 69 6c 65 5f 36  39 30 22 3a c8 99 20 57  |="file_690":.. W|
00002c90  43 72 65 61 74 65 53 4d  25 2c 2c 70 6f 69 6e 74  |CreateSM%,,point|
00002ca0  65 72 25 2c 78 25 2c 79  25 3a f4 20 4f 70 65 6e  |er%,x%,y%:. Open|
00002cb0  20 66 69 6c 65 20 77 69  6e 64 6f 77 20 66 6f 72  | file window for|
00002cc0  20 43 6c 65 61 72 20 66  69 6c 65 0d 09 56 64 20  | Clear file..Vd |
00002cd0  20 20 c9 20 22 49 6d 61  67 65 20 69 6e 66 6f 22  |  . "Image info"|
00002ce0  2c 22 49 6e 66 6f 22 2c  22 46 69 6c 65 74 79 70  |,"Info","Filetyp|
00002cf0  65 73 22 2c 22 50 72 6f  63 65 73 73 69 6e 67 2e  |es","Processing.|
00002d00  52 47 42 20 72 65 73 6f  6c 75 74 69 6f 6e 22 20  |RGB resolution" |
00002d10  3a 20 c8 99 20 57 43 72  65 61 74 65 53 4d 25 2c  |: .. WCreateSM%,|
00002d20  2c 70 6f 69 6e 74 65 72  25 2c 78 25 2c 79 25 0d  |,pointer%,x%,y%.|
00002d30  09 60 1c 20 20 20 7f 20  3a 20 f2 73 75 62 6d 65  |.`.   . : .subme|
00002d40  6e 75 28 70 61 74 68 24  2c b9 29 0d 09 6a 07 20  |nu(path$,.)..j. |
00002d50  20 cb 0d 09 74 40 20 c9  20 26 34 30 30 43 31 20  | ...t@ . &400C1 |
00002d60  3a 20 f4 20 4d 6f 64 65  20 68 61 73 20 63 68 61  |: . Mode has cha|
00002d70  6e 67 65 64 20 28 61 6e  64 20 69 74 20 6d 61 79  |nged (and it may|
00002d80  20 6e 6f 74 20 68 61 76  65 20 62 65 65 6e 20 6d  | not have been m|
00002d90  65 29 0d 09 7e 20 20 20  f2 6d 6f 64 65 5f 63 68  |e)..~   .mode_ch|
00002da0  61 6e 67 65 28 2d 31 29  3a f4 20 54 69 64 79 20  |ange(-1):. Tidy |
00002db0  75 70 0d 09 88 36 20 c9  20 26 43 43 45 30 30 20  |up...6 . &CCE00 |
00002dc0  3a 20 f4 20 4f 74 68 65  72 20 54 72 61 6e 73 6c  |: . Other Transl|
00002dd0  61 74 6f 72 20 61 73 6b  73 20 74 6f 20 6b 69 6c  |ator asks to kil|
00002de0  6c 20 6d 6f 64 75 6c 65  0d 09 92 3e 20 20 70 6f  |l module...>  po|
00002df0  6c 6c 21 31 32 3d 70 6f  6c 6c 21 38 3a c8 99 20  |ll!12=poll!8:.. |
00002e00  57 53 65 6e 64 4d 73 67  25 2c 31 39 2c 70 6f 6c  |WSendMsg%,19,pol|
00002e10  6c 2c 70 6f 6c 6c 21 34  3a f4 20 48 61 6e 64 73  |l,poll!4:. Hands|
00002e20  20 6f 66 66 20 21 0d 09  9c 05 cb 0d 09 a6 05 e1  | off !..........|
00002e30  0d 09 b0 05 20 0d 09 ba  10 dd f2 6d 6f 75 73 65  |.... ......mouse|
00002e40  63 6c 69 63 6b 0d 09 c4  3f 62 75 74 25 3d 70 6f  |click...?but%=po|
00002e50  6c 6c 21 38 3a 77 69 6e  25 3d 70 6f 6c 6c 21 31  |ll!8:win%=poll!1|
00002e60  32 3a 69 63 6f 25 3d 70  6f 6c 6c 21 31 36 3a f4  |2:ico%=poll!16:.|
00002e70  20 42 75 74 74 6f 6e 73  2f 77 69 6e 64 6f 77 2f  | Buttons/window/|
00002e80  69 63 6f 6e 0d 09 ce 0d  c8 8e 20 77 69 6e 25 20  |icon...... win% |
00002e90  ca 0d 09 d8 1e 20 c9 20  2d 32 20 3a 20 f4 20 43  |..... . -2 : . C|
00002ea0  6c 69 63 6b 20 6f 6e 20  69 63 6f 6e 62 61 72 0d  |lick on iconbar.|
00002eb0  09 e2 17 20 20 e7 69 63  6f 25 3d 49 69 63 6f 6e  |...  .ico%=Iicon|
00002ec0  62 61 72 25 20 8c 0d 09  ec 1d 20 20 20 f4 20 49  |bar% .....   . I|
00002ed0  63 6f 6e 62 61 72 20 69  63 6f 6e 20 63 6c 69 63  |conbar icon clic|
00002ee0  6b 65 64 0d 09 f6 14 20  20 20 c8 8e 20 62 75 74  |ked....   .. but|
00002ef0  25 20 80 20 37 20 ca 0d  0a 00 80 20 20 20 20 c9  |% . 7 .....    .|
00002f00  20 32 20 3a 20 f2 63 72  65 61 74 65 5f 6d 65 6e  | 2 : .create_men|
00002f10  75 28 2d 31 2c 30 2c 22  54 72 61 6e 73 6c 61 74  |u(-1,0,"Translat|
00002f20  6f 72 22 2c 31 30 2a 31  36 2c 34 30 2c 30 2c 22  |or",10*16,40,0,"|
00002f30  20 49 6e 66 6f 22 2b 22  23 22 2b c3 28 77 69 6e  | Info"+"#"+.(win|
00002f40  5f 69 6e 66 6f 25 29 2b  22 7c 20 46 69 6c 65 74  |_info%)+"| Filet|
00002f50  79 70 65 73 22 2b 22 23  22 2b c3 28 77 69 6e 5f  |ypes"+"#"+.(win_|
00002f60  66 69 6c 65 74 25 29 2b  22 7c 20 51 75 69 74 7c  |filet%)+"| Quit||
00002f70  22 2c 22 22 2c b9 29 0d  0a 0a 20 20 20 20 20 c9  |","",.)...     .|
00002f80  20 31 2c 34 20 3a 20 f2  6f 70 74 69 6f 6e 73 5f  | 1,4 : .options_|
00002f90  6d 65 6e 75 28 b9 29 0d  0a 14 08 20 20 20 cb 0d  |menu(.)....   ..|
00002fa0  0a 1e 07 20 20 cd 0d 0a  28 29 20 c9 20 77 69 6e  |...  ...() . win|
00002fb0  5f 69 6d 67 25 20 3a 20  f4 20 43 6c 69 63 6b 20  |_img% : . Click |
00002fc0  6f 6e 20 69 6d 61 67 65  20 77 69 6e 64 6f 77 0d  |on image window.|
00002fd0  0a 32 13 20 20 c8 8e 20  62 75 74 25 20 80 20 37  |.2.  .. but% . 7|
00002fe0  20 ca 0d 0a 3c 38 20 20  20 c9 20 32 20 3a 20 f2  | ...<8   . 2 : .|
00002ff0  6f 70 74 69 6f 6e 73 5f  6d 65 6e 75 28 b9 29 3a  |options_menu(.):|
00003000  f4 20 4d 65 6e 75 20 62  75 74 74 6f 6e 2c 20 70  |. Menu button, p|
00003010  6f 70 20 75 70 20 6d 65  6e 75 0d 0a 46 07 20 20  |op up menu..F.  |
00003020  cb 0d 0a 50 29 20 c9 20  77 69 6e 5f 66 69 6c 65  |...P) . win_file|
00003030  25 20 3a 20 f4 20 43 6c  69 63 6b 20 6f 6e 20 66  |% : . Click on f|
00003040  69 6c 65 20 77 69 6e 64  6f 77 0d 0a 5a 0f 20 20  |ile window..Z.  |
00003050  e7 69 63 6f 25 3d 30 20  8c 0d 0a 64 16 20 20 20  |.ico%=0 ...d.   |
00003060  c8 8e 20 62 75 74 25 20  80 20 26 37 46 20 ca 0d  |.. but% . &7F ..|
00003070  0a 6e 39 20 20 20 20 c9  20 31 36 2c 36 34 20 3a  |.n9    . 16,64 :|
00003080  20 f4 20 44 72 61 67 2c  63 61 6c 63 75 6c 61 74  | . Drag,calculat|
00003090  65 20 64 72 61 67 20 62  6f 78 20 61 6e 64 20 63  |e drag box and c|
000030a0  72 65 61 74 65 20 69 74  0d 0a 78 e7 20 20 20 20  |reate it..x.    |
000030b0  20 21 62 6c 6f 63 6b 3d  77 69 6e 25 3a c8 99 20  | !block=win%:.. |
000030c0  57 47 65 74 57 53 25 2c  2c 62 6c 6f 63 6b 3a 78  |WGetWS%,,block:x|
000030d0  25 3d 62 6c 6f 63 6b 21  34 3a 79 25 3d 62 6c 6f  |%=block!4:y%=blo|
000030e0  63 6b 21 38 3a 62 6c 6f  63 6b 21 34 3d 69 63 6f  |ck!8:block!4=ico|
000030f0  25 3a c8 99 20 57 47 65  74 49 53 25 2c 2c 62 6c  |%:.. WGetIS%,,bl|
00003100  6f 63 6b 3a 21 62 6c 6f  63 6b 3d 77 69 6e 25 3a  |ock:!block=win%:|
00003110  62 6c 6f 63 6b 21 34 3d  35 3a 62 6c 6f 63 6b 21  |block!4=5:block!|
00003120  38 2b 3d 78 25 3a 62 6c  6f 63 6b 21 31 32 2b 3d  |8+=x%:block!12+=|
00003130  79 25 3a 62 6c 6f 63 6b  21 31 36 3d 62 6c 6f 63  |y%:block!16=bloc|
00003140  6b 21 38 2b 36 38 3a 62  6c 6f 63 6b 21 32 30 3d  |k!8+68:block!20=|
00003150  62 6c 6f 63 6b 21 31 32  2b 36 38 3a 62 6c 6f 63  |block!12+68:bloc|
00003160  6b 21 32 34 3d 30 3a 62  6c 6f 63 6b 21 32 38 3d  |k!24=0:block!28=|
00003170  30 3a 62 6c 6f 63 6b 21  33 32 3d 53 63 72 57 25  |0:block!32=ScrW%|
00003180  3a 62 6c 6f 63 6b 21 33  36 3d 53 63 72 48 25 0d  |:block!36=ScrH%.|
00003190  0a 82 2c 20 20 20 20 20  c8 99 20 57 44 72 61 67  |..,     .. WDrag|
000031a0  42 25 2c 2c 62 6c 6f 63  6b 3a f4 20 43 72 65 61  |B%,,block:. Crea|
000031b0  74 65 20 64 72 61 67 20  62 6f 78 0d 0a 8c 08 20  |te drag box.... |
000031c0  20 20 cb 0d 0a 96 07 20  20 cd 0d 0a a0 2f 20 c9  |  .....  ..../ .|
000031d0  20 77 69 6e 5f 72 67 62  62 69 74 73 25 20 3a 20  | win_rgbbits% : |
000031e0  f4 20 52 47 42 20 73 6c  69 64 65 72 20 6d 61 6e  |. RGB slider man|
000031f0  69 70 75 6c 61 74 69 6f  6e 0d 0a aa 8f 20 20 21  |ipulation....  !|
00003200  62 6c 6f 63 6b 3d 77 69  6e 25 3a c8 99 20 57 47  |block=win%:.. WG|
00003210  65 74 57 53 25 2c 2c 62  6c 6f 63 6b 3a 78 25 3d  |etWS%,,block:x%=|
00003220  62 6c 6f 63 6b 21 34 3a  79 25 3d 62 6c 6f 63 6b  |block!4:y%=block|
00003230  21 38 3a 62 6c 6f 63 6b  21 34 3d 69 63 6f 25 3a  |!8:block!4=ico%:|
00003240  c8 99 20 57 47 65 74 49  53 25 2c 2c 62 6c 6f 63  |.. WGetIS%,,bloc|
00003250  6b 3a 78 25 2b 3d 62 6c  6f 63 6b 21 38 2b 32 3a  |k:x%+=block!8+2:|
00003260  79 25 2b 3d 62 6c 6f 63  6b 21 31 32 2b 38 3a f4  |y%+=block!12+8:.|
00003270  20 50 6f 73 69 74 69 6f  6e 20 69 6e 20 73 6c 69  | Position in sli|
00003280  64 65 72 20 69 63 6f 6e  0d 0a b4 46 20 20 6d 78  |der icon...F  mx|
00003290  25 3d 21 70 6f 6c 6c 3a  64 78 25 3d 6d 78 25 2d  |%=!poll:dx%=mx%-|
000032a0  78 25 2d 38 3a 76 61 6c  25 3d 64 78 25 20 81 20  |x%-8:val%=dx% . |
000032b0  31 36 3a e7 76 61 6c 25  3e 38 20 8c 20 76 61 6c  |16:.val%>8 . val|
000032c0  25 3d 38 3a f4 20 50 6f  73 69 74 69 6f 6e 0d 0a  |%=8:. Position..|
000032d0  be 86 20 20 e7 69 63 6f  25 3d 33 20 8c 20 63 6f  |..  .ico%=3 . co|
000032e0  6c 25 3d 31 31 3a 73 6e  24 3d 22 52 22 3a 62 69  |l%=11:sn$="R":bi|
000032f0  74 25 3d 31 36 20 8b 20  e7 69 63 6f 25 3d 34 20  |t%=16 . .ico%=4 |
00003300  8c 20 63 6f 6c 25 3d 31  30 3a 73 6e 24 3d 22 47  |. col%=10:sn$="G|
00003310  22 3a 62 69 74 25 3d 38  20 8b 20 63 6f 6c 25 3d  |":bit%=8 . col%=|
00003320  38 3a 73 6e 24 3d 22 42  22 3a 62 69 74 25 3d 30  |8:sn$="B":bit%=0|
00003330  3a f4 20 53 6c 69 64 65  72 20 63 6f 6c 6f 75 72  |:. Slider colour|
00003340  73 2c 20 6e 61 6d 65 73  2c 20 62 69 74 6f 66 66  |s, names, bitoff|
00003350  73 65 74 73 0d 0a c8 24  20 20 f4 20 50 6c 6f 74  |sets...$  . Plot|
00003360  20 73 6c 69 64 65 72 20  69 6e 20 73 6c 69 64 65  | slider in slide|
00003370  72 20 73 70 72 69 74 65  0d 0a d2 7e 20 20 c8 99  |r sprite...~  ..|
00003380  20 4f 53 53 70 6f 70 25  2c 36 30 2b 32 35 36 2c  | OSSpop%,60+256,|
00003390  69 63 6f 6e 73 70 72 69  74 65 73 2c 22 73 6c 69  |iconsprites,"sli|
000033a0  64 65 72 22 2b 73 6e 24  2c 30 20 b8 20 72 30 2c  |der"+sn$,0 . r0,|
000033b0  72 31 2c 72 32 2c 72 33  3a e6 30 2c 30 3a c8 93  |r1,r2,r3:.0,0:..|
000033c0  20 c8 90 20 32 2c 38 2c  38 2a 31 36 2c 31 36 3a  | .. 2,8,8*16,16:|
000033d0  e6 30 2c 63 6f 6c 25 3a  e7 76 61 6c 25 3e 30 20  |.0,col%:.val%>0 |
000033e0  8c 20 c8 93 20 c8 90 20  32 2c 38 2c 76 61 6c 25  |. .. .. 2,8,val%|
000033f0  2a 31 36 2c 31 36 0d 0a  dc 32 20 20 c8 99 20 4f  |*16,16...2  .. O|
00003400  53 53 70 6f 70 25 2c 72  30 2c 72 31 2c 72 32 2c  |SSpop%,r0,r1,r2,|
00003410  72 33 3a f4 20 52 65 73  74 6f 72 65 20 56 44 55  |r3:. Restore VDU|
00003420  20 63 6f 6e 74 65 78 74  0d 0a e6 8f 20 20 52 47  | context....  RG|
00003430  42 62 69 74 73 25 3d 28  52 47 42 62 69 74 73 25  |Bbits%=(RGBbits%|
00003440  20 80 20 ac 20 28 32 35  35 3c 3c 62 69 74 25 29  | . . (255<<bit%)|
00003450  29 20 84 20 28 76 61 6c  25 3c 3c 62 69 74 25 29  |) . (val%<<bit%)|
00003460  3a 21 62 6c 6f 63 6b 3d  77 69 6e 25 3a 62 6c 6f  |:!block=win%:blo|
00003470  63 6b 21 34 3d 69 63 6f  25 3a 62 6c 6f 63 6b 21  |ck!4=ico%:block!|
00003480  38 3d 30 3a 62 6c 6f 63  6b 21 31 32 3d 30 3a c8  |8=0:block!12=0:.|
00003490  99 20 57 53 65 74 49 53  25 2c 2c 62 6c 6f 63 6b  |. WSetIS%,,block|
000034a0  3a f4 20 55 70 64 61 74  65 20 63 6f 64 65 20 61  |:. Update code a|
000034b0  6e 64 20 69 63 6f 6e 0d  0a f0 05 cb 0d 0a fa 05  |nd icon.........|
000034c0  e1 0d 0b 04 04 0d 0b 0e  0e dd f2 64 72 61 67 64  |...........dragd|
000034d0  72 6f 70 0d 0b 18 21 c8  99 20 57 43 72 65 61 74  |rop...!.. WCreat|
000034e0  65 4d 25 2c 2c 2d 31 3a  f4 20 43 6c 6f 73 65 20  |eM%,,-1:. Close |
000034f0  6d 65 6e 75 0d 0b 22 2c  c8 99 20 57 47 65 74 50  |menu..",.. WGetP|
00003500  49 25 2c 2c 62 6c 6f 63  6b 3a f4 20 47 65 74 20  |I%,,block:. Get |
00003510  70 6f 69 6e 74 65 72 20  70 6f 73 69 74 69 6f 6e  |pointer position|
00003520  0d 0b 2c 47 64 72 6f 70  77 69 6e 25 3d 62 6c 6f  |..,Gdropwin%=blo|
00003530  63 6b 21 31 32 3a 64 72  6f 70 69 63 6f 25 3d 62  |ck!12:dropico%=b|
00003540  6c 6f 63 6b 21 31 36 3a  f4 20 57 69 6e 64 6f 77  |lock!16:. Window|
00003550  2f 69 63 6f 6e 20 77 68  65 72 65 20 62 6f 78 20  |/icon where box |
00003560  64 72 6f 70 70 65 64 0d  0b 36 28 73 61 76 65 24  |dropped..6(save$|
00003570  3d a4 73 74 72 69 6e 67  28 53 41 56 66 6e 25 29  |=.string(SAVfn%)|
00003580  3a f4 20 47 65 74 20 6c  65 61 66 6e 61 6d 65 0d  |:. Get leafname.|
00003590  0b 40 6f e7 24 53 41 56  73 6e 25 3d 22 66 69 6c  |.@o.$SAVsn%="fil|
000035a0  65 5f 66 66 39 22 20 8c  20 53 61 76 65 53 70 72  |e_ff9" . SaveSpr|
000035b0  24 3d 73 61 76 65 24 3a  66 74 25 3d 26 46 46 39  |$=save$:ft%=&FF9|
000035c0  20 8b 20 53 61 76 65 43  6c 65 61 72 24 3d 73 61  | . SaveClear$=sa|
000035d0  76 65 24 3a 66 74 25 3d  26 36 39 30 3a f4 20 52  |ve$:ft%=&690:. R|
000035e0  65 6d 65 6d 62 65 72 20  6c 65 61 66 6e 61 6d 65  |emember leafname|
000035f0  2c 20 73 65 74 20 66 69  6c 65 74 79 70 65 0d 0b  |, set filetype..|
00003600  4a a4 62 6c 6f 63 6b 21  32 30 3d 62 6c 6f 63 6b  |J.block!20=block|
00003610  21 31 32 3a 62 6c 6f 63  6b 21 32 34 3d 62 6c 6f  |!12:block!24=blo|
00003620  63 6b 21 31 36 3a 62 6c  6f 63 6b 21 32 38 3d 62  |ck!16:block!28=b|
00003630  6c 6f 63 6b 21 30 3a 62  6c 6f 63 6b 21 33 32 3d  |lock!0:block!32=|
00003640  62 6c 6f 63 6b 21 34 3a  62 6c 6f 63 6b 21 31 32  |block!4:block!12|
00003650  3d 30 3a 62 6c 6f 63 6b  21 31 36 3d 31 3a 62 6c  |=0:block!16=1:bl|
00003660  6f 63 6b 21 33 36 3d 30  3a 62 6c 6f 63 6b 21 34  |ock!36=0:block!4|
00003670  30 3d 66 74 25 3a 24 28  62 6c 6f 63 6b 2b 34 34  |0=ft%:$(block+44|
00003680  29 3d 73 61 76 65 24 2b  bd 30 3a 21 62 6c 6f 63  |)=save$+.0:!bloc|
00003690  6b 3d 28 34 34 2b a9 73  61 76 65 24 2b 34 29 80  |k=(44+.save$+4).|
000036a0  ac 33 0d 0b 54 3b c8 99  20 57 53 65 6e 64 4d 73  |.3..T;.. WSendMs|
000036b0  67 25 2c 31 37 2c 62 6c  6f 63 6b 2c 64 72 6f 70  |g%,17,block,drop|
000036c0  77 69 6e 25 2c 64 72 6f  70 69 63 6f 25 3a f4 20  |win%,dropico%:. |
000036d0  53 65 6e 64 20 44 61 74  61 53 61 76 65 0d 0b 5e  |Send DataSave..^|
000036e0  36 44 61 74 61 53 61 76  65 52 65 66 25 3d 62 6c  |6DataSaveRef%=bl|
000036f0  6f 63 6b 21 38 3a f4 20  52 65 6d 65 6d 62 65 72  |ock!8:. Remember|
00003700  20 6d 79 72 65 66 20 66  6f 72 20 44 61 74 61 53  | myref for DataS|
00003710  61 76 65 0d 0b 68 30 f2  63 6c 6f 73 65 5f 77 69  |ave..h0.close_wi|
00003720  6e 64 6f 77 28 77 69 6e  5f 66 69 6c 65 25 29 3a  |ndow(win_file%):|
00003730  f4 20 43 6c 6f 73 65 20  66 69 6c 65 20 77 69 6e  |. Close file win|
00003740  64 6f 77 0d 0b 72 05 e1  0d 0b 7c 05 20 0d 0b 86  |dow..r....|. ...|
00003750  17 dd f2 6c 6f 61 64 28  74 79 70 65 25 2c 6e 61  |...load(type%,na|
00003760  6d 65 24 29 0d 0b 90 16  f4 20 4c 6f 61 64 73 20  |me$)..... Loads |
00003770  69 6d 61 67 65 20 66 69  6c 65 0d 0b 9a 4b 70 6f  |image file...Kpo|
00003780  6c 6c 21 31 32 3d 70 6f  6c 6c 21 38 3a 70 6f 6c  |ll!12=poll!8:pol|
00003790  6c 21 31 36 3d 34 3a c8  99 20 57 53 65 6e 64 4d  |l!16=4:.. WSendM|
000037a0  73 67 25 2c 31 37 2c 70  6f 6c 6c 2c 70 6f 6c 6c  |sg%,17,poll,poll|
000037b0  21 34 3a f4 20 53 65 6e  64 20 44 61 74 61 4c 6f  |!4:. Send DataLo|
000037c0  61 64 41 63 6b 0d 0b a4  1a 4c 6f 61 64 24 3d 6e  |adAck....Load$=n|
000037d0  61 6d 65 24 3a f4 20 46  69 6c 65 6e 61 6d 65 0d  |ame$:. Filename.|
000037e0  0b ae 7b 70 6f 73 25 3d  a9 4c 6f 61 64 24 3a f5  |..{pos%=.Load$:.|
000037f0  20 70 6f 73 25 2d 3d 31  3a 70 65 72 69 6f 64 3d  | pos%-=1:period=|
00003800  28 c1 4c 6f 61 64 24 2c  70 6f 73 25 2c 31 29 3d  |(.Load$,pos%,1)=|
00003810  22 2e 22 29 3a fd 20 28  70 6f 73 25 3d 31 29 20  |"."):. (pos%=1) |
00003820  84 20 70 65 72 69 6f 64  3a e7 70 65 72 69 6f 64  |. period:.period|
00003830  20 8c 20 4c 65 61 66 24  3d c2 4c 6f 61 64 24 2c  | . Leaf$=.Load$,|
00003840  a9 4c 6f 61 64 24 2d 70  6f 73 25 29 20 8b 20 4c  |.Load$-pos%) . L|
00003850  65 61 66 24 3d 4c 6f 61  64 24 0d 0b b8 35 c8 99  |eaf$=Load$...5..|
00003860  20 22 4f 53 5f 46 69 6c  65 22 2c 31 37 2c 4c 6f  | "OS_File",17,Lo|
00003870  61 64 24 20 b8 20 2c 2c  2c 2c 46 6c 65 6e 25 3a  |ad$ . ,,,,Flen%:|
00003880  f4 20 46 69 6c 65 27 73  20 6c 65 6e 67 74 68 0d  |. File's length.|
00003890  0b c2 20 46 69 6c 65 28  31 29 3d 8e 28 4c 6f 61  |.. File(1)=.(Loa|
000038a0  64 24 29 3a f4 20 4f 70  65 6e 20 66 69 6c 65 0d  |d$):. Open file.|
000038b0  0b cc 39 f2 76 61 72 28  22 66 68 61 6e 22 2c 46  |..9.var("fhan",F|
000038c0  69 6c 65 28 31 29 29 3a  f2 76 61 72 28 22 66 70  |ile(1)):.var("fp|
000038d0  74 72 22 2c 30 29 3a f4  20 52 45 4d 20 4d 6f 64  |tr",0):. REM Mod|
000038e0  75 6c 65 20 69 6e 66 6f  0d 0b d6 27 69 54 79 70  |ule info...'iTyp|
000038f0  65 25 3d 30 3a f4 20 44  65 66 61 75 6c 74 20 69  |e%=0:. Default i|
00003900  6e 70 75 74 20 62 79 74  65 20 6f 72 64 65 72 0d  |nput byte order.|
00003910  0b e0 1b f2 68 6f 75 72  5f 6f 6e 3a f4 20 48 6f  |....hour_on:. Ho|
00003920  75 72 67 6c 61 73 73 20  6f 6e 0d 0b ea 3f e7 77  |urglass on...?.w|
00003930  69 6e 5f 69 6d 67 25 3e  30 20 8c 20 f2 63 6c 6f  |in_img%>0 . .clo|
00003940  73 65 5f 77 69 6e 64 6f  77 28 77 69 6e 5f 69 6d  |se_window(win_im|
00003950  67 25 29 3a f4 20 4f 6c  64 20 69 6d 61 67 65 20  |g%):. Old image |
00003960  64 69 73 63 61 72 64 65  64 0d 0b f4 3f f2 69 6e  |discarded...?.in|
00003970  76 61 6c 69 64 61 74 65  5f 69 6d 61 67 65 3a f4  |validate_image:.|
00003980  20 4e 65 77 20 69 6d 61  67 65 20 74 6f 20 63 6f  | New image to co|
00003990  6d 65 2c 20 69 6e 76 61  6c 69 64 61 74 65 20 6f  |me, invalidate o|
000039a0  6c 64 20 69 6d 61 67 65  0d 0b fe 0e c8 8e 20 74  |ld image...... t|
000039b0  79 70 65 25 20 ca 0d 0c  08 af 20 c9 20 26 46 46  |ype% ..... . &FF|
000039c0  39 20 3a 20 70 25 3d a7  22 2e 22 2b a4 75 70 73  |9 : p%=."."+.ups|
000039d0  74 72 69 6e 67 28 6e 61  6d 65 24 29 2c 22 2e 48  |tring(name$),".H|
000039e0  49 50 2e 22 29 3a e7 70  25 3e 30 20 8c 20 6c 6f  |IP."):.p%>0 . lo|
000039f0  70 70 61 74 68 24 3d 6e  61 6d 65 24 3a c1 6c 6f  |ppath$=name$:.lo|
00003a00  70 70 61 74 68 24 2c 70  25 2c 33 29 3d 22 4c 4f  |ppath$,p%,3)="LO|
00003a10  50 22 3a 46 69 6c 65 28  32 29 3d 8e 28 6c 6f 70  |P":File(2)=.(lop|
00003a20  70 61 74 68 24 29 3a e7  46 69 6c 65 28 32 29 3d  |path$):.File(2)=|
00003a30  30 20 8c 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |0 . .error(-1,"I|
00003a40  20 63 61 6e 6e 6f 74 20  66 69 6e 64 20 74 68 65  | cannot find the|
00003a50  20 41 72 56 69 73 20 4c  4f 50 20 66 69 6c 65 20  | ArVis LOP file |
00003a60  21 22 29 3a e1 0d 0c 12  62 20 20 e7 70 25 3d 30  |!"):....b  .p%=0|
00003a70  20 8c 20 4f 6b 3d a4 70  69 63 5f 41 52 43 20 8b  | . Ok=.pic_ARC .|
00003a80  20 f2 76 61 72 28 22 66  68 61 32 22 2c 46 69 6c  | .var("fha2",Fil|
00003a90  65 28 32 29 29 3a f2 76  61 72 28 22 66 70 74 32  |e(2)):.var("fpt2|
00003aa0  22 2c 30 29 3a 4f 6b 3d  a4 70 69 63 5f 41 52 56  |",0):Ok=.pic_ARV|
00003ab0  49 53 3a f4 20 57 68 61  74 27 73 20 74 68 69 73  |IS:. What's this|
00003ac0  20 74 68 65 6e 20 3f 0d  0c 1c 1c 20 c9 20 26 44  | then ?.... . &D|
00003ad0  45 32 20 3a 20 4f 6b 3d  a4 70 69 63 5f 50 52 4f  |E2 : Ok=.pic_PRO|
00003ae0  41 52 54 0d 0c 26 1d 20  c9 20 26 44 46 41 20 3a  |ART..&. . &DFA :|
00003af0  20 4f 6b 3d a4 70 69 63  5f 57 41 54 46 4f 52 44  | Ok=.pic_WATFORD|
00003b00  0d 0c 30 1c 20 c9 20 26  44 35 38 20 3a 20 4f 6b  |..0. . &D58 : Ok|
00003b10  3d a4 70 69 63 5f 52 45  4e 44 45 52 0d 0c 3a 19  |=.pic_RENDER..:.|
00003b20  20 c9 20 26 30 30 34 20  3a 20 4f 6b 3d a4 70 69  | . &004 : Ok=.pi|
00003b30  63 5f 41 49 4d 0d 0c 44  1b 20 c9 20 26 36 39 30  |c_AIM..D. . &690|
00003b40  20 3a 20 4f 6b 3d a4 70  69 63 5f 43 4c 45 41 52  | : Ok=.pic_CLEAR|
00003b50  0d 0c 4e 1b 20 c9 20 26  36 39 31 20 3a 20 4f 6b  |..N. . &691 : Ok|
00003b60  3d a4 70 69 63 5f 44 45  47 41 53 0d 0c 58 19 20  |=.pic_DEGAS..X. |
00003b70  c9 20 26 36 39 32 20 3a  20 4f 6b 3d a4 70 69 63  |. &692 : Ok=.pic|
00003b80  5f 49 4d 47 0d 0c 62 19  20 c9 20 26 36 39 33 20  |_IMG..b. . &693 |
00003b90  3a 20 4f 6b 3d a4 70 69  63 5f 49 46 46 0d 0c 6c  |: Ok=.pic_IFF..l|
00003ba0  19 20 c9 20 26 36 39 34  20 3a 20 4f 6b 3d a4 70  |. . &694 : Ok=.p|
00003bb0  69 63 5f 4d 41 43 0d 0c  76 19 20 c9 20 26 36 39  |ic_MAC..v. . &69|
00003bc0  35 20 3a 20 4f 6b 3d a4  70 69 63 5f 47 49 46 0d  |5 : Ok=.pic_GIF.|
00003bd0  0c 80 19 20 c9 20 26 36  39 36 20 3a 20 4f 6b 3d  |... . &696 : Ok=|
00003be0  a4 70 69 63 5f 53 55 4e  0d 0c 8a 19 20 c9 20 26  |.pic_SUN.... . &|
00003bf0  36 39 37 20 3a 20 4f 6b  3d a4 70 69 63 5f 50 43  |697 : Ok=.pic_PC|
00003c00  58 0d 0c 94 19 20 c9 20  26 36 39 38 20 3a 20 4f  |X.... . &698 : O|
00003c10  6b 3d a4 70 69 63 5f 51  52 54 0d 0c 9e 1a 20 c9  |k=.pic_QRT.... .|
00003c20  20 26 46 46 30 20 3a 20  4f 6b 3d a4 70 69 63 5f  | &FF0 : Ok=.pic_|
00003c30  54 49 46 46 0d 0c a8 05  cb 0d 0c b2 24 49 6d 67  |TIFF........$Img|
00003c40  3d 4f 6b 3a f4 20 49 6d  61 67 65 20 6f 6b 20 69  |=Ok:. Image ok i|
00003c50  66 20 61 6c 6c 20 69 73  20 77 65 6c 6c 0d 0c bc  |f all is well...|
00003c60  1d f2 68 6f 75 72 5f 6f  66 66 3a f4 20 48 6f 75  |..hour_off:. Hou|
00003c70  72 67 6c 61 73 73 20 6f  66 66 0d 0c c6 1f f2 69  |rglass off.....i|
00003c80  63 6c 6f 73 65 3a f4 20  43 6c 6f 73 65 20 69 6e  |close:. Close in|
00003c90  70 75 74 20 66 69 6c 65  73 0d 0c d0 0a e7 49 6d  |put files.....Im|
00003ca0  67 20 8c 0d 0c da 2c 20  f2 73 65 74 5f 6d 6f 64  |g ...., .set_mod|
00003cb0  65 28 49 6d 67 4d 6f 64  65 25 29 3a f4 20 53 65  |e(ImgMode%):. Se|
00003cc0  6c 65 63 74 20 69 6d 61  67 65 20 6d 6f 64 65 0d  |lect image mode.|
00003cd0  0c e4 29 20 5a 6f 6f 6d  58 3d 31 3a 5a 6f 6f 6d  |..) ZoomX=1:Zoom|
00003ce0  59 3d 31 3a f4 20 52 65  73 65 74 20 7a 6f 6f 6d  |Y=1:. Reset zoom|
00003cf0  20 66 61 63 74 6f 72 73  0d 0c ee 41 20 e7 41 75  | factors...A .Au|
00003d00  74 6f 50 61 6c 20 8c 20  f2 73 65 74 5f 70 61 6c  |toPal . .set_pal|
00003d10  65 74 74 65 28 31 29 3a  f4 20 53 65 6c 65 63 74  |ette(1):. Select|
00003d20  20 69 6d 61 67 65 20 70  61 6c 65 74 74 65 20 69  | image palette i|
00003d30  66 20 65 6e 61 62 6c 65  64 0d 0c f8 2d 20 f2 6e  |f enabled...- .n|
00003d40  65 77 5f 69 6d 61 67 65  5f 77 69 6e 64 6f 77 3a  |ew_image_window:|
00003d50  f4 20 4f 70 65 6e 20 77  69 6e 64 6f 77 20 6f 6e  |. Open window on|
00003d60  20 69 6d 61 67 65 0d 0d  02 05 cd 0d 0d 0c 05 e1  | image..........|
00003d70  0d 0d 16 04 0d 0d 20 17  dd f2 73 61 76 65 5f 73  |...... ...save_s|
00003d80  70 72 69 74 65 28 6f 75  74 24 29 0d 0d 2a 1f f4  |prite(out$)..*..|
00003d90  20 53 61 76 65 73 20 69  6d 61 67 65 20 61 73 20  | Saves image as |
00003da0  73 70 72 69 74 65 66 69  6c 65 0d 0d 34 12 c8 8e  |spritefile..4...|
00003db0  20 53 61 76 65 4b 69 6e  64 24 20 ca 0d 0d 3e 31  | SaveKind$ ...>1|
00003dc0  20 c9 20 22 46 75 6c 6c  22 20 3a 20 f4 20 46 75  | . "Full" : . Fu|
00003dd0  6c 6c 20 72 65 73 6f 6c  75 74 69 6f 6e 20 73 70  |ll resolution sp|
00003de0  72 69 74 65 2c 20 6e 6f  20 65 64 69 74 0d 0d 48  |rite, no edit..H|
00003df0  20 20 c9 20 22 57 68 6f  6c 65 22 20 3a 20 f2 65  |  . "Whole" : .e|
00003e00  64 69 74 5f 70 61 72 74  28 a3 2c a3 29 0d 0d 52  |dit_part(.,.)..R|
00003e10  29 20 c9 20 22 57 68 6f  6c 65 20 28 73 63 61 6c  |) . "Whole (scal|
00003e20  65 64 29 22 20 3a 20 f2  65 64 69 74 5f 70 61 72  |ed)" : .edit_par|
00003e30  74 28 b9 2c a3 29 0d 0d  5c 1f 20 c9 20 22 50 61  |t(.,.)..\. . "Pa|
00003e40  72 74 22 20 3a 20 f2 65  64 69 74 5f 70 61 72 74  |rt" : .edit_part|
00003e50  28 a3 2c b9 29 0d 0d 66  28 20 c9 20 22 50 61 72  |(.,.)..f( . "Par|
00003e60  74 20 28 73 63 61 6c 65  64 29 22 20 3a 20 f2 65  |t (scaled)" : .e|
00003e70  64 69 74 5f 70 61 72 74  28 b9 2c b9 29 0d 0d 70  |dit_part(.,.)..p|
00003e80  05 cb 0d 0d 7a 1b f2 68  6f 75 72 5f 6f 6e 3a f4  |....z..hour_on:.|
00003e90  20 48 6f 75 72 67 6c 61  73 73 20 6f 6e 0d 0d 84  | Hourglass on...|
00003ea0  17 e7 53 61 76 65 4b 69  6e 64 24 3d 22 46 75 6c  |..SaveKind$="Ful|
00003eb0  6c 22 20 8c 0d 0d 8e 38  20 f4 20 46 75 6c 6c 20  |l" ....8 . Full |
00003ec0  73 70 72 69 74 65 2c 20  73 61 76 65 20 69 6d 61  |sprite, save ima|
00003ed0  67 65 20 77 69 74 68 20  70 61 6c 65 74 74 65 20  |ge with palette |
00003ee0  28 6f 70 74 69 6f 6e 61  6c 6c 79 29 0d 0d 98 23  |(optionally)...#|
00003ef0  20 4f 75 74 3d ae 28 6f  75 74 24 29 3a f4 20 4f  | Out=.(out$):. O|
00003f00  70 65 6e 20 6f 75 74 70  75 74 20 66 69 6c 65 0d  |pen output file.|
00003f10  0d a2 2d 20 73 70 72 25  3d 53 70 72 69 74 65 25  |..- spr%=Sprite%|
00003f20  2b 53 70 72 69 74 65 25  21 38 3a f4 20 53 74 61  |+Sprite%!8:. Sta|
00003f30  72 74 20 6f 66 20 73 70  72 69 74 65 0d 0d ac 2c  |rt of sprite...,|
00003f40  20 63 6f 6c 73 25 3d 32  5e 53 70 72 43 6f 6c 62  | cols%=2^SprColb|
00003f50  69 74 73 25 3a f4 20 43  6f 6c 6f 75 72 73 20 69  |its%:. Colours i|
00003f60  6e 20 73 70 72 69 74 65  0d 0d b6 1f 20 e7 50 61  |n sprite.... .Pa|
00003f70  6c 6f 6e 6f 66 66 20 80  20 28 63 6f 6c 73 25 3c  |lonoff . (cols%<|
00003f80  3e 32 35 36 29 20 8c 0d  0d c0 22 20 20 f4 20 53  |>256) ...."  . S|
00003f90  61 76 65 20 77 69 74 68  20 70 61 6c 65 74 74 65  |ave with palette|
00003fa0  20 69 6e 63 6c 75 64 65  64 0d 0d ca 2e 20 20 65  | included....  e|
00003fb0  78 74 72 61 25 3d 63 6f  6c 73 25 2a 38 3a f4 20  |xtra%=cols%*8:. |
00003fc0  45 78 74 72 61 20 62 79  74 65 73 20 66 6f 72 20  |Extra bytes for |
00003fd0  70 61 6c 65 74 74 65 0d  0d d4 45 20 20 c8 99 20  |palette...E  .. |
00003fe0  22 4f 53 5f 47 42 50 42  22 2c 31 2c 4f 75 74 2c  |"OS_GBPB",1,Out,|
00003ff0  53 70 72 69 74 65 25 2b  34 2c 38 2c 30 3a f4 20  |Sprite%+4,8,0:. |
00004000  4f 75 74 70 75 74 20 70  61 72 74 20 6f 66 20 63  |Output part of c|
00004010  6f 6e 74 72 6f 6c 20 62  6c 6f 63 6b 0d 0d de 44  |ontrol block...D|
00004020  20 20 21 61 72 67 25 3d  65 78 74 72 61 25 2b 53  |  !arg%=extra%+S|
00004030  70 72 69 74 65 25 21 31  32 3a c8 99 20 22 4f 53  |prite%!12:.. "OS|
00004040  5f 47 42 50 42 22 2c 32  2c 4f 75 74 2c 61 72 67  |_GBPB",2,Out,arg|
00004050  25 2c 34 3a f4 20 4e 65  77 20 6f 66 66 73 65 74  |%,4:. New offset|
00004060  0d 0d e8 3f 20 20 21 61  72 67 25 3d 65 78 74 72  |...?  !arg%=extr|
00004070  61 25 2b 21 73 70 72 25  3a c8 99 20 22 4f 53 5f  |a%+!spr%:.. "OS_|
00004080  47 42 50 42 22 2c 32 2c  4f 75 74 2c 61 72 67 25  |GBPB",2,Out,arg%|
00004090  2c 34 3a f4 20 4e 65 77  20 6f 66 66 73 65 74 0d  |,4:. New offset.|
000040a0  0d f2 41 20 20 c8 99 20  22 4f 53 5f 47 42 50 42  |..A  .. "OS_GBPB|
000040b0  22 2c 32 2c 4f 75 74 2c  73 70 72 25 2b 34 2c 32  |",2,Out,spr%+4,2|
000040c0  38 3a f4 20 4f 75 74 70  75 74 20 70 61 72 74 20  |8:. Output part |
000040d0  6f 66 20 73 70 72 69 74  65 20 68 65 61 64 65 72  |of sprite header|
000040e0  0d 0d fc 41 20 20 21 61  72 67 25 3d 65 78 74 72  |...A  !arg%=extr|
000040f0  61 25 2b 73 70 72 25 21  33 32 3a c8 99 20 22 4f  |a%+spr%!32:.. "O|
00004100  53 5f 47 42 50 42 22 2c  32 2c 4f 75 74 2c 61 72  |S_GBPB",2,Out,ar|
00004110  67 25 2c 34 3a f4 20 4e  65 77 20 6f 66 66 73 65  |g%,4:. New offse|
00004120  74 0d 0e 06 41 20 20 21  61 72 67 25 3d 65 78 74  |t...A  !arg%=ext|
00004130  72 61 25 2b 73 70 72 25  21 33 36 3a c8 99 20 22  |ra%+spr%!36:.. "|
00004140  4f 53 5f 47 42 50 42 22  2c 32 2c 4f 75 74 2c 61  |OS_GBPB",2,Out,a|
00004150  72 67 25 2c 34 3a f4 20  4e 65 77 20 6f 66 66 73  |rg%,4:. New offs|
00004160  65 74 0d 0e 10 39 20 20  c8 99 20 22 4f 53 5f 47  |et...9  .. "OS_G|
00004170  42 50 42 22 2c 32 2c 4f  75 74 2c 73 70 72 25 2b  |BPB",2,Out,spr%+|
00004180  34 30 2c 34 3a f4 20 4f  75 74 70 75 74 20 73 70  |40,4:. Output sp|
00004190  72 69 74 65 27 73 20 6d  6f 64 65 0d 0e 1a 8a 20  |rite's mode.... |
000041a0  20 e3 20 63 25 3d 31 20  b8 20 63 6f 6c 73 25 3a  | . c%=1 . cols%:|
000041b0  61 72 67 25 21 28 63 25  2a 38 2d 38 29 3d a4 72  |arg%!(c%*8-8)=.r|
000041c0  65 61 64 70 61 6c 76 61  6c 28 49 6d 67 50 61 6c  |eadpalval(ImgPal|
000041d0  25 28 63 25 29 29 3a 61  72 67 25 21 28 63 25 2a  |%(c%)):arg%!(c%*|
000041e0  38 2d 34 29 3d 61 72 67  25 21 28 63 25 2a 38 2d  |8-4)=arg%!(c%*8-|
000041f0  38 29 3a ed 3a c8 99 20  22 4f 53 5f 47 42 50 42  |8):.:.. "OS_GBPB|
00004200  22 2c 32 2c 4f 75 74 2c  61 72 67 25 2c 63 6f 6c  |",2,Out,arg%,col|
00004210  73 25 2a 38 3a f4 20 4f  75 74 70 75 74 20 70 61  |s%*8:. Output pa|
00004220  6c 65 74 74 65 0d 0e 24  46 20 20 c8 99 20 22 4f  |lette..$F  .. "O|
00004230  53 5f 47 42 50 42 22 2c  32 2c 4f 75 74 2c 73 70  |S_GBPB",2,Out,sp|
00004240  72 25 2b 73 70 72 25 21  33 32 2c 28 73 70 72 25  |r%+spr%!32,(spr%|
00004250  21 31 36 2b 31 29 2a 28  73 70 72 25 21 32 30 2b  |!16+1)*(spr%!20+|
00004260  31 29 2a 34 3a f4 20 44  61 74 61 0d 0e 2e 29 20  |1)*4:. Data...) |
00004270  cc 20 f4 20 4e 6f 20 70  61 6c 65 74 74 65 2c 20  |. . No palette, |
00004280  6f 75 74 70 75 74 20 74  68 65 20 77 68 6f 6c 65  |output the whole|
00004290  20 6c 6f 74 0d 0e 38 3e  20 20 c8 99 20 22 4f 53  | lot..8>  .. "OS|
000042a0  5f 47 42 50 42 22 2c 31  2c 4f 75 74 2c 53 70 72  |_GBPB",1,Out,Spr|
000042b0  69 74 65 25 2b 34 2c 53  70 72 69 74 65 25 21 31  |ite%+4,Sprite%!1|
000042c0  32 2d 34 2c 30 3a f4 20  4f 75 74 70 75 74 20 61  |2-4,0:. Output a|
000042d0  6c 6c 0d 0e 42 06 20 cd  0d 0e 4c 3f 20 d9 23 4f  |ll..B. ...L? .#O|
000042e0  75 74 3a c8 99 20 22 4f  53 5f 43 4c 49 22 2c 22  |ut:.. "OS_CLI","|
000042f0  53 65 74 54 79 70 65 20  22 2b 6f 75 74 24 2b 22  |SetType "+out$+"|
00004300  20 53 70 72 69 74 65 22  3a f4 20 43 6c 6f 73 65  | Sprite":. Close|
00004310  20 26 20 74 79 70 65 0d  0e 56 30 cc 20 f4 20 45  | & type..V0. . E|
00004320  64 69 74 65 64 20 70 61  72 74 20 69 6e 20 77 69  |dited part in wi|
00004330  6e 64 6f 77 20 6f 6e 20  73 63 72 65 65 6e 2c 20  |ndow on screen, |
00004340  73 61 76 65 20 69 74 0d  0e 60 28 20 f2 69 6e 76  |save it..`( .inv|
00004350  61 6c 69 64 61 74 65 5f  73 63 72 65 65 6e 3a f4  |alidate_screen:.|
00004360  20 53 63 72 65 65 6e 20  69 6e 76 61 6c 69 64 0d  | Screen invalid.|
00004370  0e 6a 20 20 e7 50 61 6c  6f 6e 6f 66 66 20 8c 20  |.j  .Palonoff . |
00004380  70 61 6c 25 3d 31 20 8b  20 70 61 6c 25 3d 30 0d  |pal%=1 . pal%=0.|
00004390  0e 74 34 20 c8 99 20 4f  53 53 70 6f 70 25 2c 32  |.t4 .. OSSpop%,2|
000043a0  2c 2c 6f 75 74 24 2c 70  61 6c 25 3a f4 20 53 61  |,,out$,pal%:. Sa|
000043b0  76 65 20 73 63 72 65 65  6e 20 69 6e 20 77 69 6e  |ve screen in win|
000043c0  64 6f 77 0d 0e 7e 2f 20  ef 32 34 2c 30 3b 30 3b  |dow..~/ .24,0;0;|
000043d0  53 63 72 57 25 3b 53 63  72 48 25 3b 3a f4 20 52  |ScrW%;ScrH%;:. R|
000043e0  65 73 65 74 20 73 63 72  65 65 6e 20 77 69 6e 64  |eset screen wind|
000043f0  6f 77 0d 0e 88 05 cd 0d  0e 92 1d f2 68 6f 75 72  |ow..........hour|
00004400  5f 6f 66 66 3a f4 20 48  6f 75 72 67 6c 61 73 73  |_off:. Hourglass|
00004410  20 6f 66 66 0d 0e 9c 05  e1 0d 0e a6 04 0d 0e b0  | off............|
00004420  0f dd a4 70 69 63 5f 44  45 47 41 53 0d 0e ba 2f  |...pic_DEGAS.../|
00004430  f4 20 4d 61 6b 65 73 20  41 74 61 72 69 20 44 65  |. Makes Atari De|
00004440  67 61 73 20 69 6d 61 67  65 20 28 50 49 31 2f 32  |gas image (PI1/2|
00004450  2f 33 2c 50 43 31 2f 32  2f 33 29 0d 0e c4 2b 69  |/3,PC1/2/3)...+i|
00004460  54 79 70 65 25 3d 30 3a  f4 20 53 65 74 20 6c 6f  |Type%=0:. Set lo|
00004470  77 2d 74 6f 2d 68 69 67  68 20 74 79 70 65 20 6f  |w-to-high type o|
00004480  66 20 64 61 74 61 0d 0e  ce 39 63 6f 6d 70 72 25  |f data...9compr%|
00004490  3d a4 69 31 28 31 29 3a  72 65 73 25 3d a4 69 31  |=.i1(1):res%=.i1|
000044a0  28 31 29 3a f4 20 46 6c  61 67 73 2c 20 72 65 73  |(1):. Flags, res|
000044b0  6f 6c 75 74 69 6f 6e 20  28 31 2f 32 2f 33 29 0d  |olution (1/2/3).|
000044c0  0e d8 37 63 6f 6d 70 72  65 73 73 65 64 3d 28 28  |..7compressed=((|
000044d0  63 6f 6d 70 72 25 80 25  31 30 30 30 30 30 30 30  |compr%.%10000000|
000044e0  29 3e 30 29 3a f4 20 43  6f 6d 70 72 65 73 73 65  |)>0):. Compresse|
000044f0  64 20 66 6c 61 67 0d 0e  e2 23 74 6f 74 61 6c 25  |d flag...#total%|
00004500  3d 33 32 30 30 30 3a f4  20 54 6f 74 61 6c 20 64  |=32000:. Total d|
00004510  61 74 61 20 62 79 74 65  73 0d 0e ec 0d c8 8e 20  |ata bytes...... |
00004520  72 65 73 25 20 ca 0d 0e  f6 29 20 c9 20 30 20 3a  |res% ....) . 0 :|
00004530  20 78 72 65 73 25 3d 33  32 30 3a 79 72 65 73 25  | xres%=320:yres%|
00004540  3d 32 30 30 3a 63 6f 6c  62 69 74 73 25 3d 34 0d  |=200:colbits%=4.|
00004550  0f 00 29 20 c9 20 31 20  3a 20 78 72 65 73 25 3d  |..) . 1 : xres%=|
00004560  36 34 30 3a 79 72 65 73  25 3d 32 30 30 3a 63 6f  |640:yres%=200:co|
00004570  6c 62 69 74 73 25 3d 32  0d 0f 0a 29 20 c9 20 32  |lbits%=2...) . 2|
00004580  20 3a 20 78 72 65 73 25  3d 36 34 30 3a 79 72 65  | : xres%=640:yre|
00004590  73 25 3d 34 30 30 3a 63  6f 6c 62 69 74 73 25 3d  |s%=400:colbits%=|
000045a0  31 0d 0f 14 05 cb 0d 0f  1e 2b 63 6f 6c 6f 75 72  |1........+colour|
000045b0  73 25 3d 32 5e 63 6f 6c  62 69 74 73 25 3a f4 20  |s%=2^colbits%:. |
000045c0  4e 75 6d 62 65 72 20 6f  66 20 63 6f 6c 6f 75 72  |Number of colour|
000045d0  73 0d 0f 28 36 6d 6f 64  65 25 3d a4 6d 6f 64 65  |s..(6mode%=.mode|
000045e0  28 78 72 65 73 25 2c 79  72 65 73 25 2c 63 6f 6c  |(xres%,yres%,col|
000045f0  6f 75 72 73 25 29 3a f4  20 44 65 74 65 72 6d 69  |ours%):. Determi|
00004600  6e 65 20 6d 6f 64 65 0d  0f 32 29 e7 a4 6e 65 77  |ne mode..2)..new|
00004610  5f 69 6d 61 67 65 28 6d  6f 64 65 25 2c 78 72 65  |_image(mode%,xre|
00004620  73 25 2c 79 72 65 73 25  2c 30 29 20 8b 20 3d a3  |s%,yres%,0) . =.|
00004630  0d 0f 3c 2d f2 69 67 65  74 28 31 2c 64 75 6d 25  |..<-.iget(1,dum%|
00004640  2c 33 32 29 3a f4 20 52  65 61 64 20 70 61 6c 65  |,32):. Read pale|
00004650  74 74 65 20 66 72 6f 6d  20 66 69 6c 65 0d 0f 46  |tte from file..F|
00004660  95 49 6e 50 61 6c 25 28  30 29 3d 63 6f 6c 62 69  |.InPal%(0)=colbi|
00004670  74 73 25 3a e3 20 63 25  3d 30 20 b8 20 63 6f 6c  |ts%:. c%=0 . col|
00004680  6f 75 72 73 25 2d 31 3a  76 25 3d 64 75 6d 25 21  |ours%-1:v%=dum%!|
00004690  28 63 25 2a 32 29 3a 72  25 3d 28 76 25 80 37 29  |(c%*2):r%=(v%.7)|
000046a0  2a 33 32 3a 67 25 3d 28  28 76 25 3e 3e 31 32 29  |*32:g%=((v%>>12)|
000046b0  80 37 29 2a 33 32 3a 62  25 3d 28 28 76 25 3e 3e  |.7)*32:b%=((v%>>|
000046c0  38 29 80 37 29 2a 33 32  3a 49 6e 50 61 6c 25 28  |8).7)*32:InPal%(|
000046d0  63 6f 6c 6f 75 72 73 25  2d 63 25 29 3d 28 72 25  |colours%-c%)=(r%|
000046e0  3c 3c 31 36 29 2b 28 67  25 3c 3c 38 29 2b 62 25  |<<16)+(g%<<8)+b%|
000046f0  3a ed 0d 0f 50 5b e7 63  6f 6d 70 72 65 73 73 65  |:...P[.compresse|
00004700  64 20 8c 20 63 6f 6d 70  72 24 3d 22 52 75 6e 20  |d . compr$="Run |
00004710  6c 65 6e 67 74 68 22 3a  74 79 70 65 24 3d 22 50  |length":type$="P|
00004720  43 22 2b c3 28 72 65 73  25 2b 31 29 20 8b 20 63  |C"+.(res%+1) . c|
00004730  6f 6d 70 72 24 3d 22 22  3a 74 79 70 65 24 3d 22  |ompr$="":type$="|
00004740  50 49 22 2b c3 28 72 65  73 25 2b 31 29 0d 0f 5a  |PI"+.(res%+1)..Z|
00004750  5c f2 69 6d 61 67 65 5f  69 6e 66 6f 28 22 41 74  |\.image_info("At|
00004760  61 72 69 20 44 65 67 61  73 20 22 2b 74 79 70 65  |ari Degas "+type|
00004770  24 2c 78 72 65 73 25 2c  79 72 65 73 25 2c 30 2c  |$,xres%,yres%,0,|
00004780  63 6f 6c 62 69 74 73 25  2c 6d 6f 64 65 25 2c 63  |colbits%,mode%,c|
00004790  6f 6d 70 72 24 2c 22 22  2c 46 6c 65 6e 25 2d 33  |ompr$,"",Flen%-3|
000047a0  34 2c 74 6f 74 61 6c 25  29 0d 0f 64 75 f2 76 61  |4,total%)..du.va|
000047b0  72 28 22 63 6f 6d 70 22  2c 63 6f 6d 70 72 65 73  |r("comp",compres|
000047c0  73 65 64 29 3a f2 76 61  72 28 22 72 65 73 74 22  |sed):.var("rest"|
000047d0  2c 72 65 73 25 29 3a f2  76 61 72 28 22 77 69 64  |,res%):.var("wid|
000047e0  74 22 2c 78 72 65 73 25  29 3a f2 76 61 72 28 22  |t",xres%):.var("|
000047f0  68 65 69 67 22 2c 79 72  65 73 25 29 3a f2 76 61  |heig",yres%):.va|
00004800  72 28 22 66 70 74 72 22  2c 26 32 32 29 3a f2 75  |r("fptr",&22):.u|
00004810  6e 70 61 63 6b 28 22 44  45 47 41 53 22 29 0d 0f  |npack("DEGAS")..|
00004820  6e 15 49 6d 67 4d 6f 64  65 25 3d 6d 6f 64 65 25  |n.ImgMode%=mode%|
00004830  3a 3d b9 0d 0f 78 05 20  0d 0f 82 0d dd a4 70 69  |:=...x. ......pi|
00004840  63 5f 49 4d 47 0d 0f 8c  1b f4 20 4d 61 6b 65 73  |c_IMG..... Makes|
00004850  20 41 74 61 72 69 20 49  4d 47 20 69 6d 61 67 65  | Atari IMG image|
00004860  0d 0f 96 2b 69 54 79 70  65 25 3d 31 3a f4 20 53  |...+iType%=1:. S|
00004870  65 74 20 68 69 67 68 2d  74 6f 2d 6c 6f 77 20 74  |et high-to-low t|
00004880  79 70 65 20 6f 66 20 64  61 74 61 0d 0f a0 51 76  |ype of data...Qv|
00004890  65 72 73 69 6f 6e 25 3d  a4 69 32 28 31 29 3a 68  |ersion%=.i2(1):h|
000048a0  65 61 64 6c 65 6e 25 3d  a4 69 32 28 31 29 3a 6e  |eadlen%=.i2(1):n|
000048b0  70 6c 61 6e 65 73 25 3d  a4 69 32 28 31 29 3a f4  |planes%=.i2(1):.|
000048c0  20 56 65 72 73 69 6f 6e  2c 20 68 65 61 64 6c 65  | Version, headle|
000048d0  6e 67 74 68 2c 20 70 6c  61 6e 65 73 0d 0f aa 51  |ngth, planes...Q|
000048e0  70 61 74 6c 65 6e 25 3d  a4 69 32 28 31 29 3a 70  |patlen%=.i2(1):p|
000048f0  77 25 3d a4 69 32 28 31  29 3a 70 68 25 3d a4 69  |w%=.i2(1):ph%=.i|
00004900  32 28 31 29 3a f4 20 50  61 74 74 65 72 6e 20 6c  |2(1):. Pattern l|
00004910  65 6e 67 74 68 2c 20 70  69 78 65 6c 20 77 69 64  |ength, pixel wid|
00004920  74 68 20 61 6e 64 20 68  65 69 67 68 74 0d 0f b4  |th and height...|
00004930  3d 77 69 64 74 68 25 3d  a4 69 32 28 31 29 3a 68  |=width%=.i2(1):h|
00004940  65 69 67 68 74 25 3d a4  69 32 28 31 29 3a f4 20  |eight%=.i2(1):. |
00004950  57 69 64 74 68 20 61 6e  64 20 68 65 69 67 68 74  |Width and height|
00004960  20 69 6e 20 70 69 78 65  6c 73 0d 0f be 2b 63 6f  | in pixels...+co|
00004970  6c 6f 75 72 73 25 3d 32  5e 6e 70 6c 61 6e 65 73  |lours%=2^nplanes|
00004980  25 3a f4 20 4e 75 6d 62  65 72 20 6f 66 20 63 6f  |%:. Number of co|
00004990  6c 6f 75 72 73 0d 0f c8  7f e7 63 6f 6c 6f 75 72  |lours.....colour|
000049a0  73 25 3c 3e 32 20 84 20  70 61 74 6c 65 6e 25 3c  |s%<>2 . patlen%<|
000049b0  3e 32 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |>2 . .error(-1,"|
000049c0  49 20 63 61 6e 6e 6f 74  20 64 69 73 70 6c 61 79  |I cannot display|
000049d0  20 41 74 61 72 69 20 49  4d 47 20 69 6d 61 67 65  | Atari IMG image|
000049e0  73 20 77 69 74 68 20 6d  6f 72 65 20 74 68 61 6e  |s with more than|
000049f0  20 32 20 63 6f 6c 6f 75  72 73 20 6f 72 20 70 61  | 2 colours or pa|
00004a00  74 74 65 72 6e 6c 65 6e  67 74 68 3c 3e 32 20 21  |tternlength<>2 !|
00004a10  22 29 3a e1 0d 0f d2 39  6d 6f 64 65 25 3d a4 6d  |"):....9mode%=.m|
00004a20  6f 64 65 28 77 69 64 74  68 25 2c 68 65 69 67 68  |ode(width%,heigh|
00004a30  74 25 2c 63 6f 6c 6f 75  72 73 25 29 3a f4 20 44  |t%,colours%):. D|
00004a40  65 74 65 72 6d 69 6e 65  20 6d 6f 64 65 0d 0f dc  |etermine mode...|
00004a50  2c e7 a4 6e 65 77 5f 69  6d 61 67 65 28 6d 6f 64  |,..new_image(mod|
00004a60  65 25 2c 77 69 64 74 68  25 2c 68 65 69 67 68 74  |e%,width%,height|
00004a70  25 2c 30 29 20 8b 20 3d  a3 0d 0f e6 42 49 6e 50  |%,0) . =....BInP|
00004a80  61 6c 25 28 30 29 3d 6e  70 6c 61 6e 65 73 25 3a  |al%(0)=nplanes%:|
00004a90  49 6e 50 61 6c 25 28 31  29 3d 30 3a 49 6e 50 61  |InPal%(1)=0:InPa|
00004aa0  6c 25 28 32 29 3d 26 46  46 46 46 46 46 3a f4 20  |l%(2)=&FFFFFF:. |
00004ab0  53 65 74 20 70 61 6c 65  74 74 65 0d 0f f0 7b f2  |Set palette...{.|
00004ac0  69 6d 61 67 65 5f 69 6e  66 6f 28 22 41 74 61 72  |image_info("Atar|
00004ad0  69 20 49 4d 47 22 2c 77  69 64 74 68 25 2c 68 65  |i IMG",width%,he|
00004ae0  69 67 68 74 25 2c 30 2c  6e 70 6c 61 6e 65 73 25  |ight%,0,nplanes%|
00004af0  2c 6d 6f 64 65 25 2c 22  53 65 76 65 72 61 6c 20  |,mode%,"Several |
00004b00  77 61 79 73 22 2c 22 22  2c 46 6c 65 6e 25 2d 68  |ways","",Flen%-h|
00004b10  65 61 64 6c 65 6e 25 2a  32 2c 28 77 69 64 74 68  |eadlen%*2,(width|
00004b20  25 2a 68 65 69 67 68 74  25 2a 6e 70 6c 61 6e 65  |%*height%*nplane|
00004b30  73 25 29 81 38 29 0d 0f  fa 53 f2 76 61 72 28 22  |s%).8)...S.var("|
00004b40  77 69 64 74 22 2c 77 69  64 74 68 25 29 3a f2 76  |widt",width%):.v|
00004b50  61 72 28 22 68 65 69 67  22 2c 68 65 69 67 68 74  |ar("heig",height|
00004b60  25 29 3a f2 76 61 72 28  22 66 70 74 72 22 2c 68  |%):.var("fptr",h|
00004b70  65 61 64 6c 65 6e 25 2a  32 29 3a f2 75 6e 70 61  |eadlen%*2):.unpa|
00004b80  63 6b 28 22 49 4d 47 22  29 0d 10 04 15 49 6d 67  |ck("IMG")....Img|
00004b90  4d 6f 64 65 25 3d 6d 6f  64 65 25 3a 3d b9 0d 10  |Mode%=mode%:=...|
00004ba0  0e 05 20 0d 10 18 0d dd  a4 70 69 63 5f 4d 41 43  |.. ......pic_MAC|
00004bb0  0d 10 22 24 f4 20 4d 61  6b 65 73 20 4d 61 63 49  |.."$. Makes MacI|
00004bc0  6e 74 6f 73 68 20 4d 61  63 50 61 69 6e 74 20 69  |ntosh MacPaint i|
00004bd0  6d 61 67 65 0d 10 2c 32  77 69 64 74 68 25 3d 35  |mage..,2width%=5|
00004be0  37 36 3a 68 65 69 67 68  74 25 3d 37 32 30 3a 63  |76:height%=720:c|
00004bf0  6f 6c 62 69 74 73 25 3d  31 3a f4 20 52 65 73 6f  |olbits%=1:. Reso|
00004c00  6c 75 74 69 6f 6e 0d 10  36 3b 6d 6f 64 65 25 3d  |lution..6;mode%=|
00004c10  a4 6d 6f 64 65 28 77 69  64 74 68 25 2c 68 65 69  |.mode(width%,hei|
00004c20  67 68 74 25 2c 32 5e 63  6f 6c 62 69 74 73 25 29  |ght%,2^colbits%)|
00004c30  3a f4 20 44 65 74 65 72  6d 69 6e 65 20 6d 6f 64  |:. Determine mod|
00004c40  65 0d 10 40 2c e7 a4 6e  65 77 5f 69 6d 61 67 65  |e..@,..new_image|
00004c50  28 6d 6f 64 65 25 2c 77  69 64 74 68 25 2c 68 65  |(mode%,width%,he|
00004c60  69 67 68 74 25 2c 30 29  20 8b 20 3d a3 0d 10 4a  |ight%,0) . =...J|
00004c70  42 49 6e 50 61 6c 25 28  30 29 3d 63 6f 6c 62 69  |BInPal%(0)=colbi|
00004c80  74 73 25 3a 49 6e 50 61  6c 25 28 31 29 3d 30 3a  |ts%:InPal%(1)=0:|
00004c90  49 6e 50 61 6c 25 28 32  29 3d 26 46 46 46 46 46  |InPal%(2)=&FFFFF|
00004ca0  46 3a f4 20 53 65 74 20  70 61 6c 65 74 74 65 0d  |F:. Set palette.|
00004cb0  10 54 6b f2 69 6d 61 67  65 5f 69 6e 66 6f 28 22  |.Tk.image_info("|
00004cc0  4d 61 63 49 6e 74 6f 73  68 20 4d 61 63 50 61 69  |MacIntosh MacPai|
00004cd0  6e 74 22 2c 77 69 64 74  68 25 2c 68 65 69 67 68  |nt",width%,heigh|
00004ce0  74 25 2c 30 2c 63 6f 6c  62 69 74 73 25 2c 6d 6f  |t%,0,colbits%,mo|
00004cf0  64 65 25 2c 22 52 75 6e  20 6c 65 6e 67 74 68 22  |de%,"Run length"|
00004d00  2c 22 22 2c 46 6c 65 6e  25 2d 36 34 30 2c 28 35  |,"",Flen%-640,(5|
00004d10  37 36 2a 37 32 30 29 81  38 29 0d 10 5e 4c f2 76  |76*720).8)..^L.v|
00004d20  61 72 28 22 77 69 64 74  22 2c 77 69 64 74 68 25  |ar("widt",width%|
00004d30  29 3a f2 76 61 72 28 22  68 65 69 67 22 2c 68 65  |):.var("heig",he|
00004d40  69 67 68 74 25 29 3a f2  76 61 72 28 22 66 70 74  |ight%):.var("fpt|
00004d50  72 22 2c 36 34 30 29 3a  f2 75 6e 70 61 63 6b 28  |r",640):.unpack(|
00004d60  22 4d 41 43 22 29 0d 10  68 15 49 6d 67 4d 6f 64  |"MAC")..h.ImgMod|
00004d70  65 25 3d 6d 6f 64 65 25  3a 3d b9 0d 10 72 05 20  |e%=mode%:=...r. |
00004d80  0d 10 7c 0d dd a4 70 69  63 5f 49 46 46 0d 10 86  |..|...pic_IFF...|
00004d90  1b f4 20 4d 61 6b 65 73  20 41 6d 69 67 61 20 49  |.. Makes Amiga I|
00004da0  46 46 20 69 6d 61 67 65  0d 10 90 25 62 6d 68 64  |FF image...%bmhd|
00004db0  3d a3 3a 63 6d 61 70 3d  a3 3a 62 6f 64 79 3d a3  |=.:cmap=.:body=.|
00004dc0  3a f4 20 49 6e 69 74 20  66 6c 61 67 73 0d 10 9a  |:. Init flags...|
00004dd0  32 68 61 6d 3d a3 3a 6c  61 63 65 3d a3 3a 68 69  |2ham=.:lace=.:hi|
00004de0  72 65 73 3d a3 3a 68 61  6c 66 62 72 69 67 68 74  |res=.:halfbright|
00004df0  3d a3 3a f4 20 49 6e 69  74 20 66 6c 61 67 73 0d  |=.:. Init flags.|
00004e00  10 a4 2b 69 54 79 70 65  25 3d 31 3a f4 20 53 65  |..+iType%=1:. Se|
00004e10  74 20 68 69 67 68 2d 74  6f 2d 6c 6f 77 20 74 79  |t high-to-low ty|
00004e20  70 65 20 6f 66 20 64 61  74 61 0d 10 ae 32 f4 20  |pe of data...2. |
00004e30  43 68 65 63 6b 20 69 66  20 74 68 69 73 20 69 73  |Check if this is|
00004e40  20 61 20 73 74 61 6e 64  61 72 64 20 49 46 46 20  | a standard IFF |
00004e50  70 69 63 74 75 72 65 20  66 69 6c 65 0d 10 b8 8a  |picture file....|
00004e60  66 6f 72 6d 24 3d a4 69  73 74 72 69 6e 67 28 31  |form$=.istring(1|
00004e70  2c 34 29 3a f2 69 73 6b  69 70 28 31 2c 34 29 3a  |,4):.iskip(1,4):|
00004e80  66 6f 72 6d 24 2b 3d a4  69 73 74 72 69 6e 67 28  |form$+=.istring(|
00004e90  31 2c 34 29 3a e7 66 6f  72 6d 24 3c 3e 22 46 4f  |1,4):.form$<>"FO|
00004ea0  52 4d 49 4c 42 4d 22 20  8c 20 f2 65 72 72 6f 72  |RMILBM" . .error|
00004eb0  28 2d 31 2c 22 54 68 69  73 20 73 63 72 65 65 6e  |(-1,"This screen|
00004ec0  20 66 69 6c 65 20 69 73  20 6e 6f 74 20 61 6e 20  | file is not an |
00004ed0  49 46 46 20 73 63 72 65  65 6e 20 66 69 6c 65 20  |IFF screen file |
00004ee0  21 22 29 3a 3d a3 0d 10  c2 29 f5 20 f4 20 46 6f  |!"):=....). . Fo|
00004ef0  6c 6c 6f 77 20 42 4d 48  44 2c 43 4d 41 50 20 61  |llow BMHD,CMAP a|
00004f00  6e 64 20 42 4f 44 59 20  68 65 61 64 65 72 73 0d  |nd BODY headers.|
00004f10  10 cc 37 68 65 61 64 24  3d a4 69 73 74 72 69 6e  |..7head$=.istrin|
00004f20  67 28 31 2c 34 29 3a 68  6c 65 6e 25 3d a4 69 34  |g(1,4):hlen%=.i4|
00004f30  28 31 29 3a 73 74 61 72  74 70 74 72 25 3d a4 69  |(1):startptr%=.i|
00004f40  70 74 72 28 31 29 0d 10  d6 0e c8 8e 20 68 65 61  |ptr(1)...... hea|
00004f50  64 24 20 ca 0d 10 e0 26  20 c9 20 22 42 4d 48 44  |d$ ....& . "BMHD|
00004f60  22 20 3a 20 62 6d 68 64  3d b9 3a f4 20 42 69 74  |" : bmhd=.:. Bit|
00004f70  6d 61 70 20 68 65 61 64  65 72 0d 10 ea 3d 20 20  |map header...=  |
00004f80  20 20 20 20 20 f4 20 52  65 61 64 20 70 69 63 74  |     . Read pict|
00004f90  75 72 65 2f 73 63 72 65  65 6e 20 77 69 64 74 68  |ure/screen width|
00004fa0  2c 20 68 65 69 67 68 74  2c 20 63 6f 6c 6f 75 72  |, height, colour|
00004fb0  73 2c 20 65 74 63 2e 0d  10 f4 4e 20 20 20 20 20  |s, etc....N     |
00004fc0  20 20 77 69 64 74 68 25  3d a4 69 32 28 31 29 3a  |  width%=.i2(1):|
00004fd0  68 65 69 67 68 74 25 3d  a4 69 32 28 31 29 3a f2  |height%=.i2(1):.|
00004fe0  69 73 6b 69 70 28 31 2c  34 29 3a 70 6c 61 6e 65  |iskip(1,4):plane|
00004ff0  73 25 3d a4 69 31 28 31  29 3a f2 69 73 6b 69 70  |s%=.i1(1):.iskip|
00005000  28 31 2c 31 29 0d 10 fe  4d 20 20 20 20 20 20 20  |(1,1)...M       |
00005010  63 6f 6d 70 72 65 73 73  65 64 3d 28 a4 69 31 28  |compressed=(.i1(|
00005020  31 29 3d 31 29 3a f2 69  73 6b 69 70 28 31 2c 35  |1)=1):.iskip(1,5|
00005030  29 3a 73 5f 77 69 64 74  68 25 3d a4 69 32 28 31  |):s_width%=.i2(1|
00005040  29 3a 73 5f 68 65 69 67  68 74 25 3d a4 69 32 28  |):s_height%=.i2(|
00005050  31 29 0d 11 08 40 20 c9  20 22 43 41 4d 47 22 20  |1)...@ . "CAMG" |
00005060  3a 20 66 6c 61 67 73 25  3d a4 69 34 28 31 29 3a  |: flags%=.i4(1):|
00005070  f4 20 47 65 74 20 66 6c  61 67 20 62 69 74 73 2c  |. Get flag bits,|
00005080  20 73 65 74 20 66 6c 61  67 73 20 66 72 6f 6d 20  | set flags from |
00005090  69 74 0d 11 12 35 20 20  20 20 20 20 20 68 61 6d  |it...5       ham|
000050a0  3d 28 28 66 6c 61 67 73  25 80 26 38 30 30 29 3e  |=((flags%.&800)>|
000050b0  30 29 3a 6c 61 63 65 3d  28 28 66 6c 61 67 73 25  |0):lace=((flags%|
000050c0  80 26 34 29 3e 30 29 0d  11 1c 3f 20 20 20 20 20  |.&4)>0)...?     |
000050d0  20 20 68 69 72 65 73 3d  28 28 66 6c 61 67 73 25  |  hires=((flags%|
000050e0  80 26 38 30 30 30 29 3e  30 29 3a 68 61 6c 66 62  |.&8000)>0):halfb|
000050f0  72 69 67 68 74 3d 28 28  66 6c 61 67 73 25 80 26  |right=((flags%.&|
00005100  38 30 29 3e 30 29 0d 11  26 2d 20 c9 20 22 43 4d  |80)>0)..&- . "CM|
00005110  41 50 22 20 3a 20 63 6d  61 70 3d b9 3a f4 20 43  |AP" : cmap=.:. C|
00005120  6f 6c 6f 75 72 20 6d 61  70 20 28 70 61 6c 65 74  |olour map (palet|
00005130  74 65 29 0d 11 30 42 20  20 20 20 20 20 20 70 61  |te)..0B       pa|
00005140  6c 64 65 66 73 25 3d 68  6c 65 6e 25 81 33 3a f4  |ldefs%=hlen%.3:.|
00005150  20 4e 75 6d 62 65 72 20  6f 66 20 70 61 6c 65 74  | Number of palet|
00005160  74 65 20 63 6f 6c 6f 75  72 20 64 65 66 69 6e 69  |te colour defini|
00005170  74 69 6f 6e 73 0d 11 3a  34 20 20 20 20 20 20 20  |tions..:4       |
00005180  e3 20 5f 25 3d 30 20 b8  20 70 61 6c 64 65 66 73  |. _%=0 . paldefs|
00005190  25 2d 31 3a 49 6e 50 61  6c 25 28 5f 25 2b 31 29  |%-1:InPal%(_%+1)|
000051a0  3d a4 69 33 28 31 29 3a  ed 0d 11 44 24 20 c9 20  |=.i3(1):...D$ . |
000051b0  22 42 4f 44 59 22 20 3a  20 62 6f 64 79 3d b9 3a  |"BODY" : body=.:|
000051c0  f4 20 53 63 72 65 65 6e  20 64 61 74 61 0d 11 4e  |. Screen data..N|
000051d0  29 20 20 20 20 20 20 20  f4 20 43 68 65 63 6b 20  |)       . Check |
000051e0  69 66 20 61 6c 6c 20 70  61 72 74 73 20 61 72 65  |if all parts are|
000051f0  20 74 68 65 72 65 0d 11  58 be 20 20 20 20 20 20  | there..X.      |
00005200  20 e7 ac 62 6d 68 64 20  8c 20 f2 65 72 72 6f 72  | ..bmhd . .error|
00005210  28 2d 31 2c 22 49 46 46  20 65 72 72 6f 72 20 3a  |(-1,"IFF error :|
00005220  20 49 20 64 69 64 20 6e  6f 74 20 66 69 6e 64 20  | I did not find |
00005230  61 20 27 42 4d 48 44 27  20 62 6c 6f 63 6b 2e 20  |a 'BMHD' block. |
00005240  43 61 6e 6e 6f 74 20 70  72 6f 63 65 65 64 20 21  |Cannot proceed !|
00005250  22 29 3a fd 20 b9 3a 3d  a3 20 8b 20 e7 ac 63 6d  |"):. .:=. . ..cm|
00005260  61 70 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |ap . .error(-1,"|
00005270  49 46 46 20 65 72 72 6f  72 20 3a 20 49 20 64 69  |IFF error : I di|
00005280  64 20 6e 6f 74 20 66 69  6e 64 20 61 20 27 43 4d  |d not find a 'CM|
00005290  41 50 27 20 62 6c 6f 63  6b 2e 20 43 61 6e 6e 6f  |AP' block. Canno|
000052a0  74 20 70 72 6f 63 65 65  64 20 21 22 29 3a fd 20  |t proceed !"):. |
000052b0  b9 3a 3d a3 0d 11 62 36  20 20 20 20 20 20 20 f4  |.:=...b6       .|
000052c0  20 44 65 74 65 72 6d 69  6e 65 20 73 75 69 74 61  | Determine suita|
000052d0  62 6c 65 20 41 72 63 68  69 6d 65 64 65 73 20 73  |ble Archimedes s|
000052e0  63 72 65 65 6e 20 6d 6f  64 65 0d 11 6c 11 20 20  |creen mode..l.  |
000052f0  20 20 20 20 20 e7 68 61  6d 20 8c 0d 11 76 a7 20  |     .ham ...v. |
00005300  20 20 20 20 20 20 20 6d  6f 64 65 25 3d a4 6d 6f  |       mode%=.mo|
00005310  64 65 28 33 32 30 2c 73  5f 68 65 69 67 68 74 25  |de(320,s_height%|
00005320  2c 32 35 36 29 3a 63 6f  6c 62 69 74 73 25 3d 31  |,256):colbits%=1|
00005330  32 3a 69 6e 66 6f 24 3d  22 48 41 4d 20 28 48 6f  |2:info$="HAM (Ho|
00005340  6c 64 20 41 6e 64 20 4d  6f 64 69 66 79 29 22 3a  |ld And Modify)":|
00005350  49 6e 50 61 6c 25 28 30  29 3d 63 6f 6c 62 69 74  |InPal%(0)=colbit|
00005360  73 25 3a e3 20 63 25 3d  30 20 b8 20 31 35 3a 68  |s%:. c%=0 . 15:h|
00005370  61 6d 62 61 73 25 21 28  63 25 3c 3c 32 29 3d 49  |ambas%!(c%<<2)=I|
00005380  6e 50 61 6c 25 28 63 25  2b 31 29 3a ed 3a f2 76  |nPal%(c%+1):.:.v|
00005390  61 72 28 22 68 61 6d 62  22 2c 68 61 6d 62 61 73  |ar("hamb",hambas|
000053a0  25 29 0d 11 80 74 20 20  20 20 20 20 20 cc 20 63  |%)...t       . c|
000053b0  6f 6c 6f 75 72 73 25 3d  32 5e 70 6c 61 6e 65 73  |olours%=2^planes|
000053c0  25 3a 6d 6f 64 65 25 3d  a4 6d 6f 64 65 28 73 5f  |%:mode%=.mode(s_|
000053d0  77 69 64 74 68 25 2c 73  5f 68 65 69 67 68 74 25  |width%,s_height%|
000053e0  2c 63 6f 6c 6f 75 72 73  25 29 3a 63 6f 6c 62 69  |,colours%):colbi|
000053f0  74 73 25 3d 70 6c 61 6e  65 73 25 3a 49 6e 50 61  |ts%=planes%:InPa|
00005400  6c 25 28 30 29 3d 70 6c  61 6e 65 73 25 3a 69 6e  |l%(0)=planes%:in|
00005410  66 6f 24 3d 22 22 0d 11  8a 78 20 20 20 20 20 20  |fo$=""...x      |
00005420  20 20 e7 68 61 6c 66 62  72 69 67 68 74 20 8c 20  |  .halfbright . |
00005430  69 6e 66 6f 24 3d 22 48  61 6c 66 2d 62 72 69 67  |info$="Half-brig|
00005440  68 74 22 3a 68 61 6c 66  25 3d 63 6f 6c 6f 75 72  |ht":half%=colour|
00005450  73 25 81 32 3a e3 20 63  25 3d 31 20 b8 20 68 61  |s%.2:. c%=1 . ha|
00005460  6c 66 25 3a 49 6e 50 61  6c 25 28 63 25 2b 68 61  |lf%:InPal%(c%+ha|
00005470  6c 66 25 29 3d 28 49 6e  50 61 6c 25 28 63 25 29  |lf%)=(InPal%(c%)|
00005480  80 26 45 30 45 30 45 30  29 3e 3e 31 3a ed 0d 11  |.&E0E0E0)>>1:...|
00005490  94 0c 20 20 20 20 20 20  20 cd 0d 11 9e 33 20 20  |..       ....3  |
000054a0  20 20 20 20 20 e7 a4 6e  65 77 5f 69 6d 61 67 65  |     ..new_image|
000054b0  28 6d 6f 64 65 25 2c 77  69 64 74 68 25 2c 68 65  |(mode%,width%,he|
000054c0  69 67 68 74 25 2c 30 29  20 8b 20 3d a3 0d 11 a8  |ight%,0) . =....|
000054d0  38 20 20 20 20 20 20 20  e7 63 6f 6d 70 72 65 73  |8       .compres|
000054e0  73 65 64 20 8c 20 63 6f  6d 70 72 24 3d 22 52 75  |sed . compr$="Ru|
000054f0  6e 20 6c 65 6e 67 74 68  22 20 8b 20 63 6f 6d 70  |n length" . comp|
00005500  72 24 3d 22 22 0d 11 b2  26 20 20 20 20 20 20 20  |r$=""...&       |
00005510  e7 63 6f 6c 62 69 74 73  25 3e 38 20 8c 20 63 69  |.colbits%>8 . ci|
00005520  25 3d 32 20 8b 20 63 69  25 3d 30 0d 11 bc 7c 20  |%=2 . ci%=0...| |
00005530  20 20 20 20 20 20 f2 69  6d 61 67 65 5f 69 6e 66  |      .image_inf|
00005540  6f 28 22 41 6d 69 67 61  20 49 46 46 22 2c 77 69  |o("Amiga IFF",wi|
00005550  64 74 68 25 2c 68 65 69  67 68 74 25 2c 63 69 25  |dth%,height%,ci%|
00005560  2c 63 6f 6c 62 69 74 73  25 2c 6d 6f 64 65 25 2c  |,colbits%,mode%,|
00005570  63 6f 6d 70 72 24 2c 69  6e 66 6f 24 2c 46 6c 65  |compr$,info$,Fle|
00005580  6e 25 2d a4 69 70 74 72  28 31 29 2c 28 77 69 64  |n%-.iptr(1),(wid|
00005590  74 68 25 2a 68 65 69 67  68 74 25 2a 70 6c 61 6e  |th%*height%*plan|
000055a0  65 73 25 29 81 38 29 0d  11 c6 31 20 20 20 20 20  |es%).8)...1     |
000055b0  20 20 e7 68 61 6d 20 8c  20 f2 76 61 72 28 22 73  |  .ham . .var("s|
000055c0  63 74 79 22 2c 31 29 20  8b 20 f2 76 61 72 28 22  |cty",1) . .var("|
000055d0  73 63 74 79 22 2c 30 29  0d 11 d0 85 20 20 20 20  |scty",0)....    |
000055e0  20 20 20 f2 76 61 72 28  22 66 70 74 72 22 2c a4  |   .var("fptr",.|
000055f0  69 70 74 72 28 31 29 29  3a f2 76 61 72 28 22 70  |iptr(1)):.var("p|
00005600  6c 61 6e 22 2c 70 6c 61  6e 65 73 25 29 3a f2 76  |lan",planes%):.v|
00005610  61 72 28 22 77 69 64 74  22 2c 77 69 64 74 68 25  |ar("widt",width%|
00005620  29 3a f2 76 61 72 28 22  68 65 69 67 22 2c 68 65  |):.var("heig",he|
00005630  69 67 68 74 25 29 3a f2  76 61 72 28 22 63 6f 6d  |ight%):.var("com|
00005640  70 22 2c 63 6f 6d 70 72  65 73 73 65 64 29 3a f2  |p",compressed):.|
00005650  75 6e 70 61 63 6b 28 22  49 46 46 22 29 0d 11 da  |unpack("IFF")...|
00005660  19 20 20 20 20 20 20 20  49 6d 67 4d 6f 64 65 25  |.       ImgMode%|
00005670  3d 6d 6f 64 65 25 0d 11  e4 05 cb 0d 11 ee 39 f2  |=mode%........9.|
00005680  69 73 6b 69 70 28 31 2c  68 6c 65 6e 25 2d 28 a4  |iskip(1,hlen%-(.|
00005690  69 70 74 72 28 31 29 2d  73 74 61 72 74 70 74 72  |iptr(1)-startptr|
000056a0  25 29 29 3a f4 20 54 6f  20 6e 65 78 74 20 68 65  |%)):. To next he|
000056b0  61 64 65 72 0d 11 f8 0a  fd 20 62 6f 64 79 0d 12  |ader..... body..|
000056c0  02 06 3d b9 0d 12 0c 05  20 0d 12 16 0d dd a4 70  |..=..... ......p|
000056d0  69 63 5f 47 49 46 0d 12  20 33 f4 20 4d 61 6b 65  |ic_GIF.. 3. Make|
000056e0  73 20 47 49 46 20 28 47  72 61 70 68 69 63 73 20  |s GIF (Graphics |
000056f0  49 6e 74 65 72 63 68 61  6e 67 65 20 46 6f 72 6d  |Interchange Form|
00005700  61 74 29 20 69 6d 61 67  65 0d 12 2a 26 ea 20 67  |at) image..*&. g|
00005710  5f 49 6e 50 61 6c 25 28  29 2c 50 69 63 5f 70 74  |_InPal%(),Pic_pt|
00005720  72 25 28 29 2c 50 69 63  5f 6c 65 6e 25 28 29 0d  |r%(),Pic_len%().|
00005730  12 34 2f de 20 67 5f 49  6e 50 61 6c 25 28 32 35  |.4/. g_InPal%(25|
00005740  36 29 2c 50 69 63 5f 70  74 72 25 28 32 35 36 29  |6),Pic_ptr%(256)|
00005750  2c 50 69 63 5f 6c 65 6e  25 28 32 35 36 29 0d 12  |,Pic_len%(256)..|
00005760  3e 2b 69 54 79 70 65 25  3d 30 3a f4 20 53 65 74  |>+iType%=0:. Set|
00005770  20 6c 6f 77 2d 74 6f 2d  68 69 67 68 20 74 79 70  | low-to-high typ|
00005780  65 20 6f 66 20 64 61 74  61 0d 12 48 31 73 69 67  |e of data..H1sig|
00005790  6e 61 74 75 72 65 24 3d  a4 69 73 74 72 69 6e 67  |nature$=.istring|
000057a0  28 31 2c 36 29 3a f4 20  52 65 61 64 20 47 49 46  |(1,6):. Read GIF|
000057b0  20 73 69 67 6e 61 74 75  72 65 0d 12 52 58 e7 c0  | signature..RX..|
000057c0  73 69 67 6e 61 74 75 72  65 24 2c 33 29 3c 3e 22  |signature$,3)<>"|
000057d0  47 49 46 22 20 8c 20 f2  65 72 72 6f 72 28 2d 31  |GIF" . .error(-1|
000057e0  2c 22 54 68 69 73 20 73  63 72 65 65 6e 20 66 69  |,"This screen fi|
000057f0  6c 65 20 69 73 20 6e 6f  74 20 61 20 47 49 46 20  |le is not a GIF |
00005800  73 63 72 65 65 6e 20 66  69 6c 65 20 21 22 29 3a  |screen file !"):|
00005810  3d a3 0d 12 5c 24 f4 20  52 65 61 64 20 64 61 74  |=...\$. Read dat|
00005820  61 20 69 6e 20 53 63 72  65 65 6e 20 44 65 73 63  |a in Screen Desc|
00005830  72 69 70 74 6f 72 0d 12  66 32 72 5f 77 69 64 74  |riptor..f2r_widt|
00005840  68 25 3d a4 69 32 28 31  29 3a 72 5f 68 65 69 67  |h%=.i2(1):r_heig|
00005850  68 74 25 3d a4 69 32 28  31 29 3a f4 20 52 61 73  |ht%=.i2(1):. Ras|
00005860  74 65 72 20 73 69 7a 65  0d 12 70 44 66 6c 61 67  |ter size..pDflag|
00005870  73 25 3d a4 69 31 28 31  29 3a 62 61 63 6b 67 72  |s%=.i1(1):backgr|
00005880  25 3d a4 69 31 28 31 29  3a f2 69 73 6b 69 70 28  |%=.i1(1):.iskip(|
00005890  31 2c 31 29 3a f4 20 46  6c 61 67 73 20 61 6e 64  |1,1):. Flags and|
000058a0  20 62 61 63 6b 20 63 6f  6c 6f 75 72 0d 12 7a 3b  | back colour..z;|
000058b0  67 6c 6f 62 61 6c 3d 28  28 66 6c 61 67 73 25 80  |global=((flags%.|
000058c0  26 38 30 29 3e 30 29 3a  f4 20 47 6c 6f 62 61 6c  |&80)>0):. Global|
000058d0  20 63 6f 6c 6f 75 72 20  6d 61 70 20 66 6f 6c 6c  | colour map foll|
000058e0  6f 77 69 6e 67 20 3f 0d  12 84 33 67 5f 70 69 78  |owing ?...3g_pix|
000058f0  62 69 74 73 25 3d 28 66  6c 61 67 73 25 80 37 29  |bits%=(flags%.7)|
00005900  2b 31 3a f4 20 47 6c 6f  62 61 6c 20 62 69 74 73  |+1:. Global bits|
00005910  20 70 65 72 20 70 69 78  65 6c 0d 12 8e 3a 63 6f  | per pixel...:co|
00005920  6c 62 69 74 73 25 3d 28  28 66 6c 61 67 73 25 3e  |lbits%=((flags%>|
00005930  3e 34 29 80 37 29 2b 31  3a f4 20 42 69 74 73 20  |>4).7)+1:. Bits |
00005940  6f 66 20 63 6f 6c 6f 75  72 20 72 65 73 6f 6c 75  |of colour resolu|
00005950  74 69 6f 6e 0d 12 98 0d  e7 67 6c 6f 62 61 6c 20  |tion.....global |
00005960  8c 0d 12 a2 6a 20 e3 20  63 25 3d 31 20 b8 20 32  |....j . c%=1 . 2|
00005970  5e 67 5f 70 69 78 62 69  74 73 25 3a 67 5f 49 6e  |^g_pixbits%:g_In|
00005980  50 61 6c 25 28 63 25 29  3d 28 a4 69 31 28 31 29  |Pal%(c%)=(.i1(1)|
00005990  3c 3c 31 36 29 2b 28 a4  69 31 28 31 29 3c 3c 38  |<<16)+(.i1(1)<<8|
000059a0  29 2b a4 69 31 28 31 29  3a ed 3a f4 20 52 65 61  |)+.i1(1):.:. Rea|
000059b0  64 20 47 6c 6f 62 61 6c  20 43 6f 6c 6f 75 72 20  |d Global Colour |
000059c0  4d 61 70 20 70 61 6c 65  74 74 65 0d 12 ac 2d 20  |Map palette...- |
000059d0  67 5f 49 6e 50 61 6c 25  28 30 29 3d 67 5f 70 69  |g_InPal%(0)=g_pi|
000059e0  78 62 69 74 73 25 3a f4  20 50 61 6c 65 74 74 65  |xbits%:. Palette|
000059f0  20 65 6e 74 72 69 65 73  0d 12 b6 25 cc 20 49 6e  | entries...%. In|
00005a00  50 61 6c 25 28 30 29 3d  2d 31 3a f4 20 4e 6f 20  |Pal%(0)=-1:. No |
00005a10  70 61 6c 65 74 74 65 20  66 6f 75 6e 64 0d 12 c0  |palette found...|
00005a20  05 cd 0d 12 ca 29 f4 20  53 63 61 6e 20 64 61 74  |.....). Scan dat|
00005a30  61 20 66 6f 72 20 70 69  63 74 75 72 65 73 2c 20  |a for pictures, |
00005a40  6d 61 6b 65 20 61 20 6c  69 73 74 0d 12 d4 10 70  |make a list....p|
00005a50  69 63 74 75 72 65 25 3d  30 3a f5 0d 12 de 3f f2  |icture%=0:....?.|
00005a60  73 6b 69 70 5f 47 49 46  5f 65 78 74 65 6e 73 69  |skip_GIF_extensi|
00005a70  6f 6e 3a f4 20 53 6b 69  70 20 65 78 74 65 6e 73  |on:. Skip extens|
00005a80  69 6f 6e 20 62 6c 6f 63  6b 73 20 70 72 65 63 65  |ion blocks prece|
00005a90  64 69 6e 67 20 49 6d 61  67 65 0d 12 e8 26 f4 20  |ding Image...&. |
00005aa0  53 65 61 72 63 68 20 66  6f 72 20 6e 65 78 74 20  |Search for next |
00005ab0  49 6d 61 67 65 20 44 65  73 63 72 69 70 74 6f 72  |Image Descriptor|
00005ac0  0d 12 f2 46 f5 20 5f 25  3d a4 69 31 28 31 29 3a  |...F. _%=.i1(1):|
00005ad0  69 6d 61 67 65 3d 28 5f  25 3d 97 22 2c 22 29 3a  |image=(_%=.","):|
00005ae0  65 6e 64 3d 28 5f 25 3d  97 22 3b 22 29 3a fd 20  |end=(_%=.";"):. |
00005af0  69 6d 61 67 65 20 84 20  65 6e 64 20 84 20 a4 69  |image . end . .i|
00005b00  65 6f 66 28 31 29 0d 12  fc 7e e7 ac 69 6d 61 67  |eof(1)...~..imag|
00005b10  65 20 8c 20 e7 ac 65 6e  64 20 8c 20 f2 65 72 72  |e . ..end . .err|
00005b20  6f 72 28 2d 31 2c 22 57  61 72 6e 69 6e 67 20 21  |or(-1,"Warning !|
00005b30  20 47 49 46 20 66 69 6c  65 20 69 73 20 6e 6f 74  | GIF file is not|
00005b40  20 70 72 6f 70 65 72 6c  79 20 74 65 72 6d 69 6e  | properly termin|
00005b50  61 74 65 64 20 21 22 29  3a 65 6e 64 3d b9 3a f2  |ated !"):end=.:.|
00005b60  68 6f 75 72 5f 6f 66 66  3a f2 68 6f 75 72 5f 6f  |hour_off:.hour_o|
00005b70  6e 3a f4 20 52 65 61 64  20 62 65 79 6f 6e 64 20  |n:. Read beyond |
00005b80  66 69 6c 65 0d 13 06 0c  e7 69 6d 61 67 65 20 8c  |file.....image .|
00005b90  0d 13 10 22 20 f4 20 52  65 67 69 73 74 65 72 20  |..." . Register |
00005ba0  70 69 63 74 75 72 65 27  73 20 70 6f 73 69 74 69  |picture's positi|
00005bb0  6f 6e 0d 13 1a 2e 20 70  69 63 74 75 72 65 25 2b  |on.... picture%+|
00005bc0  3d 31 3a 50 69 63 5f 70  74 72 25 28 70 69 63 74  |=1:Pic_ptr%(pict|
00005bd0  75 72 65 25 29 3d a4 69  70 74 72 28 31 29 2d 31  |ure%)=.iptr(1)-1|
00005be0  0d 13 24 6a 20 f2 69 73  6b 69 70 28 31 2c 38 29  |..$j .iskip(1,8)|
00005bf0  3a 5f 25 3d a4 69 31 28  31 29 3a e7 28 5f 25 80  |:_%=.i1(1):.(_%.|
00005c00  26 38 30 29 3e 30 20 8c  20 f2 69 73 6b 69 70 28  |&80)>0 . .iskip(|
00005c10  31 2c 33 2a 32 5e 28 28  5f 25 80 37 29 2b 31 29  |1,3*2^((_%.7)+1)|
00005c20  29 3a f4 20 49 66 20 74  68 65 72 65 27 73 20 61  |):. If there's a|
00005c30  20 6c 6f 63 61 6c 20 63  6f 6c 6f 75 72 20 6d 61  | local colour ma|
00005c40  70 2c 20 73 6b 69 70 20  69 74 0d 13 2e 0f 20 e7  |p, skip it.... .|
00005c50  47 49 46 53 63 61 6e 20  8c 0d 13 38 30 20 20 f4  |GIFScan ...80  .|
00005c60  20 44 65 74 65 72 6d 69  6e 65 20 70 69 63 74 75  | Determine pictu|
00005c70  72 65 20 64 61 74 61 20  6c 65 6e 67 74 68 2c 20  |re data length, |
00005c80  73 6b 69 70 20 64 61 74  61 0d 13 42 31 20 20 f2  |skip data..B1  .|
00005c90  69 73 6b 69 70 28 31 2c  31 29 3a f5 20 63 25 3d  |iskip(1,1):. c%=|
00005ca0  a4 69 31 28 31 29 3a f2  69 73 6b 69 70 28 31 2c  |.i1(1):.iskip(1,|
00005cb0  63 25 29 3a fd 20 63 25  3d 30 0d 13 4c 34 20 20  |c%):. c%=0..L4  |
00005cc0  50 69 63 5f 6c 65 6e 25  28 70 69 63 74 75 72 65  |Pic_len%(picture|
00005cd0  25 29 3d a4 69 70 74 72  28 31 29 2d 50 69 63 5f  |%)=.iptr(1)-Pic_|
00005ce0  70 74 72 25 28 70 69 63  74 75 72 65 25 29 0d 13  |ptr%(picture%)..|
00005cf0  56 3b 20 cc 20 50 69 63  5f 6c 65 6e 25 28 70 69  |V; . Pic_len%(pi|
00005d00  63 74 75 72 65 25 29 3d  a4 69 6c 65 6e 28 31 29  |cture%)=.ilen(1)|
00005d10  2d 50 69 63 5f 70 74 72  25 28 70 69 63 74 75 72  |-Pic_ptr%(pictur|
00005d20  65 25 29 3a 65 6e 64 3d  b9 0d 13 60 06 20 cd 0d  |e%):end=...`. ..|
00005d30  13 6a 05 cd 0d 13 74 09  fd 20 65 6e 64 0d 13 7e  |.j....t.. end..~|
00005d40  31 70 69 63 74 75 72 65  73 25 3d 70 69 63 74 75  |1pictures%=pictu|
00005d50  72 65 25 3a f4 20 4e 75  6d 62 65 72 20 6f 66 20  |re%:. Number of |
00005d60  70 69 63 74 75 72 65 73  20 66 6f 75 6e 64 0d 13  |pictures found..|
00005d70  88 4e e7 70 69 63 74 75  72 65 73 25 3e 30 20 8b  |.N.pictures%>0 .|
00005d80  20 f2 65 72 72 6f 72 28  2d 31 2c 22 49 20 63 61  | .error(-1,"I ca|
00005d90  6e 6e 6f 74 20 66 69 6e  64 20 61 6e 79 20 69 6d  |nnot find any im|
00005da0  61 67 65 73 20 69 6e 20  74 68 69 73 20 47 49 46  |ages in this GIF|
00005db0  20 66 69 6c 65 20 21 22  29 3a 3d a3 0d 13 92 0e  | file !"):=.....|
00005dc0  e7 47 49 46 53 63 61 6e  20 8c 0d 13 9c ba 20 e7  |.GIFScan ..... .|
00005dd0  28 49 6d 61 67 65 4e 72  25 3e 30 29 20 80 20 28  |(ImageNr%>0) . (|
00005de0  49 6d 61 67 65 4e 72 25  3c 3d 70 69 63 74 75 72  |ImageNr%<=pictur|
00005df0  65 73 25 29 20 8c 20 70  69 63 74 75 72 65 25 3d  |es%) . picture%=|
00005e00  49 6d 61 67 65 4e 72 25  20 8b 20 f2 65 72 72 6f  |ImageNr% . .erro|
00005e10  72 28 2d 31 2c 22 54 68  69 73 20 66 69 6c 65 20  |r(-1,"This file |
00005e20  63 6f 6e 74 61 69 6e 73  20 22 2b c3 28 70 69 63  |contains "+.(pic|
00005e30  74 75 72 65 73 25 29 2b  22 20 69 6d 61 67 65 73  |tures%)+" images|
00005e40  2e 20 53 65 6c 65 63 74  20 27 31 27 2d 27 22 2b  |. Select '1'-'"+|
00005e50  c3 28 70 69 63 74 75 72  65 73 25 29 2b 22 27 20  |.(pictures%)+"' |
00005e60  69 6e 20 74 68 65 20 27  49 6d 61 67 65 20 6e 75  |in the 'Image nu|
00005e70  6d 62 65 72 27 20 73 75  62 6d 65 6e 75 20 21 22  |mber' submenu !"|
00005e80  29 3a 3d a3 0d 13 a6 10  cc 20 70 69 63 74 75 72  |):=...... pictur|
00005e90  65 25 3d 31 0d 13 b0 05  cd 0d 13 ba 49 f2 69 70  |e%=1........I.ip|
00005ea0  74 72 28 31 2c 50 69 63  5f 70 74 72 25 28 70 69  |tr(1,Pic_ptr%(pi|
00005eb0  63 74 75 72 65 25 29 2b  31 29 3a 6c 65 6e 25 3d  |cture%)+1):len%=|
00005ec0  50 69 63 5f 6c 65 6e 25  28 70 69 63 74 75 72 65  |Pic_len%(picture|
00005ed0  25 29 3a f4 20 50 69 63  20 70 6f 73 20 26 20 6c  |%):. Pic pos & l|
00005ee0  65 6e 0d 13 c4 20 f4 20  52 65 61 64 20 49 6d 61  |en... . Read Ima|
00005ef0  67 65 20 44 65 73 63 72  69 70 74 6f 72 20 64 61  |ge Descriptor da|
00005f00  74 61 0d 13 ce 34 69 5f  6c 65 66 74 25 3d a4 69  |ta...4i_left%=.i|
00005f10  32 28 31 29 3a 69 5f 74  6f 70 25 3d a4 69 32 28  |2(1):i_top%=.i2(|
00005f20  31 29 3a f4 20 50 6f 73  69 74 69 6f 6e 20 69 6e  |1):. Position in|
00005f30  20 66 72 61 6d 65 0d 13  d8 43 69 5f 77 69 64 74  | frame...Ci_widt|
00005f40  68 25 3d a4 69 32 28 31  29 3a 69 5f 68 65 69 67  |h%=.i2(1):i_heig|
00005f50  68 74 25 3d a4 69 32 28  31 29 3a 66 6c 61 67 73  |ht%=.i2(1):flags|
00005f60  25 3d a4 69 31 28 31 29  3a f4 20 53 69 7a 65 20  |%=.i1(1):. Size |
00005f70  61 6e 64 20 66 6c 61 67  73 0d 13 e2 37 6c 6f 63  |and flags...7loc|
00005f80  61 6c 3d 28 66 6c 61 67  73 25 80 26 38 30 29 3e  |al=(flags%.&80)>|
00005f90  30 3a f4 20 4c 6f 63 61  6c 20 63 6f 6c 6f 75 72  |0:. Local colour|
00005fa0  20 6d 61 70 20 66 6f 6c  6c 6f 77 69 6e 67 20 3f  | map following ?|
00005fb0  0d 13 ec 3c 69 62 69 74  3d 28 66 6c 61 67 73 25  |...<ibit=(flags%|
00005fc0  80 26 34 30 29 3e 30 3a  f4 20 49 6d 61 67 65 20  |.&40)>0:. Image |
00005fd0  73 74 6f 72 65 64 20 69  6e 20 69 6e 74 65 72 6c  |stored in interl|
00005fe0  61 63 65 64 20 6f 72 64  65 72 20 3f 0d 13 f6 32  |aced order ?...2|
00005ff0  6c 5f 70 69 78 62 69 74  73 25 3d 28 66 6c 61 67  |l_pixbits%=(flag|
00006000  73 25 80 37 29 2b 31 3a  f4 20 4c 6f 63 61 6c 20  |s%.7)+1:. Local |
00006010  62 69 74 73 20 70 65 72  20 70 69 78 65 6c 0d 14  |bits per pixel..|
00006020  00 0c e7 6c 6f 63 61 6c  20 8c 0d 14 0a 40 20 70  |...local ....@ p|
00006030  69 78 62 69 74 73 25 3d  6c 5f 70 69 78 62 69 74  |ixbits%=l_pixbit|
00006040  73 25 3a f4 20 52 65 61  64 20 61 6e 64 20 75 73  |s%:. Read and us|
00006050  65 20 4c 6f 63 61 6c 20  43 6f 6c 6f 75 72 20 4d  |e Local Colour M|
00006060  61 70 20 70 61 6c 65 74  74 65 0d 14 14 56 20 e3  |ap palette...V .|
00006070  20 63 25 3d 31 20 b8 20  32 5e 6c 5f 70 69 78 62  | c%=1 . 2^l_pixb|
00006080  69 74 73 25 3a 49 6e 50  61 6c 25 28 63 25 29 3d  |its%:InPal%(c%)=|
00006090  28 a4 69 31 28 31 29 3c  3c 31 36 29 2b 28 a4 69  |(.i1(1)<<16)+(.i|
000060a0  31 28 31 29 3c 3c 38 29  2b a4 69 31 28 31 29 3a  |1(1)<<8)+.i1(1):|
000060b0  ed 3a f4 20 52 65 61 64  20 70 61 6c 65 74 74 65  |.:. Read palette|
000060c0  0d 14 1e 2b 20 49 6e 50  61 6c 25 28 30 29 3d 6c  |...+ InPal%(0)=l|
000060d0  5f 70 69 78 62 69 74 73  25 3a f4 20 50 61 6c 65  |_pixbits%:. Pale|
000060e0  74 74 65 20 65 6e 74 72  69 65 73 0d 14 28 3f cc  |tte entries..(?.|
000060f0  20 70 69 78 62 69 74 73  25 3d 67 5f 70 69 78 62  | pixbits%=g_pixb|
00006100  69 74 73 25 3a 49 6e 50  61 6c 25 28 29 3d 67 5f  |its%:InPal%()=g_|
00006110  49 6e 50 61 6c 25 28 29  3a f4 20 55 73 65 20 47  |InPal%():. Use G|
00006120  6c 6f 62 61 6c 20 64 61  74 61 0d 14 32 05 cd 0d  |lobal data..2...|
00006130  14 3c 4e e7 49 6e 50 61  6c 25 28 30 29 3d 2d 31  |.<N.InPal%(0)=-1|
00006140  20 8c 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
00006150  63 61 6e 6e 6f 74 20 66  69 6e 64 20 61 20 70 61  |cannot find a pa|
00006160  6c 65 74 74 65 20 69 6e  20 74 68 69 73 20 47 49  |lette in this GI|
00006170  46 20 66 69 6c 65 20 21  22 29 3a 3d a3 0d 14 46  |F file !"):=...F|
00006180  2b 63 6f 6c 6f 75 72 73  25 3d 32 5e 70 69 78 62  |+colours%=2^pixb|
00006190  69 74 73 25 3a f4 20 4e  75 6d 62 65 72 20 6f 66  |its%:. Number of|
000061a0  20 63 6f 6c 6f 75 72 73  0d 14 50 2f f4 20 44 65  | colours..P/. De|
000061b0  74 65 72 6d 69 6e 65 20  73 75 69 74 61 62 6c 65  |termine suitable|
000061c0  20 41 72 63 68 69 6d 65  64 65 73 20 73 63 72 65  | Archimedes scre|
000061d0  65 6e 20 6d 6f 64 65 0d  14 5a 3d 6d 6f 64 65 25  |en mode..Z=mode%|
000061e0  3d a4 6d 6f 64 65 28 72  5f 77 69 64 74 68 25 2c  |=.mode(r_width%,|
000061f0  72 5f 68 65 69 67 68 74  25 2c 63 6f 6c 6f 75 72  |r_height%,colour|
00006200  73 25 29 3a f4 20 44 65  74 65 72 6d 69 6e 65 20  |s%):. Determine |
00006210  6d 6f 64 65 0d 14 64 3b  f4 20 52 6f 6f 6d 20 6e  |mode..d;. Room n|
00006220  65 65 64 65 64 20 66 6f  72 20 64 65 63 6f 6d 70  |eeded for decomp|
00006230  72 65 73 73 69 6f 6e 20  64 61 74 61 20 61 6e 64  |ression data and|
00006240  20 64 65 2d 69 6e 74 65  72 6c 61 63 69 6e 67 0d  | de-interlacing.|
00006250  14 6e 64 e7 70 69 78 62  69 74 73 25 3c 3d 32 20  |.nd.pixbits%<=2 |
00006260  8c 20 72 62 69 74 73 25  3d 70 69 78 62 69 74 73  |. rbits%=pixbits|
00006270  25 20 8b 20 e7 70 69 78  62 69 74 73 25 3c 3d 34  |% . .pixbits%<=4|
00006280  20 8c 20 72 62 69 74 73  25 3d 34 20 8b 20 72 62  | . rbits%=4 . rb|
00006290  69 74 73 25 3d 38 3a f4  20 52 6f 75 6e 64 20 75  |its%=8:. Round u|
000062a0  70 20 62 70 70 20 74 6f  20 73 70 72 69 74 65 20  |p bpp to sprite |
000062b0  62 70 70 0d 14 78 45 72  6f 6f 6d 25 3d 28 28 28  |bpp..xEroom%=(((|
000062c0  69 5f 77 69 64 74 68 25  2a 72 62 69 74 73 25 2b  |i_width%*rbits%+|
000062d0  33 31 29 3e 3e 35 29 3c  3c 32 29 2a 69 5f 68 65  |31)>>5)<<2)*i_he|
000062e0  69 67 68 74 25 2b 31 30  32 34 3a f4 20 52 6f 6f  |ight%+1024:. Roo|
000062f0  6d 20 6e 65 65 64 65 64  0d 14 82 34 e7 a4 6e 65  |m needed...4..ne|
00006300  77 5f 69 6d 61 67 65 28  6d 6f 64 65 25 2c 69 5f  |w_image(mode%,i_|
00006310  77 69 64 74 68 25 2c 69  5f 68 65 69 67 68 74 25  |width%,i_height%|
00006320  2c 72 6f 6f 6d 25 29 20  8b 20 3d a3 0d 14 8c 27  |,room%) . =....'|
00006330  e7 47 49 46 53 63 61 6e  20 8c 20 6e 70 24 3d c3  |.GIFScan . np$=.|
00006340  70 69 63 74 75 72 65 73  25 20 8b 20 6e 70 24 3d  |pictures% . np$=|
00006350  22 3f 22 0d 14 96 95 f2  69 6d 61 67 65 5f 69 6e  |"?".....image_in|
00006360  66 6f 28 73 69 67 6e 61  74 75 72 65 24 2c 69 5f  |fo(signature$,i_|
00006370  77 69 64 74 68 25 2c 69  5f 68 65 69 67 68 74 25  |width%,i_height%|
00006380  2c 30 2c 70 69 78 62 69  74 73 25 2c 6d 6f 64 65  |,0,pixbits%,mode|
00006390  25 2c 22 4c 5a 57 22 2c  6e 70 24 2b 22 20 70 69  |%,"LZW",np$+" pi|
000063a0  63 73 20 28 74 68 69 73  20 69 73 20 22 2b a4 74  |cs (this is "+.t|
000063b0  69 6d 65 73 28 70 69 63  74 75 72 65 25 29 2b 22  |imes(picture%)+"|
000063c0  29 22 2c 6c 65 6e 25 2c  28 69 5f 68 65 69 67 68  |)",len%,(i_heigh|
000063d0  74 25 2a 69 5f 77 69 64  74 68 25 2a 70 69 78 62  |t%*i_width%*pixb|
000063e0  69 74 73 25 29 81 38 29  0d 14 a0 2b e7 69 62 69  |its%).8)...+.ibi|
000063f0  74 20 8c 20 f2 76 61 72  28 22 6c 61 63 65 22 2c  |t . .var("lace",|
00006400  31 29 20 8b 20 f2 76 61  72 28 22 6c 61 63 65 22  |1) . .var("lace"|
00006410  2c 30 29 0d 14 aa 55 f2  76 61 72 28 22 66 70 74  |,0)...U.var("fpt|
00006420  72 22 2c a4 69 70 74 72  28 31 29 29 3a f2 76 61  |r",.iptr(1)):.va|
00006430  72 28 22 77 69 64 74 22  2c 69 5f 77 69 64 74 68  |r("widt",i_width|
00006440  25 29 3a f2 76 61 72 28  22 68 65 69 67 22 2c 69  |%):.var("heig",i|
00006450  5f 68 65 69 67 68 74 25  29 3a f2 75 6e 70 61 63  |_height%):.unpac|
00006460  6b 28 22 47 49 46 22 29  0d 14 b4 15 49 6d 67 4d  |k("GIF")....ImgM|
00006470  6f 64 65 25 3d 6d 6f 64  65 25 3a 3d b9 0d 14 be  |ode%=mode%:=....|
00006480  05 20 0d 14 c8 18 dd f2  73 6b 69 70 5f 47 49 46  |. ......skip_GIF|
00006490  5f 65 78 74 65 6e 73 69  6f 6e 0d 14 d2 3f f4 20  |_extension...?. |
000064a0  53 6b 69 70 73 20 61 20  47 49 46 20 45 78 74 65  |Skips a GIF Exte|
000064b0  6e 73 69 6f 6e 20 42 6c  6f 63 6b 20 69 66 20 70  |nsion Block if p|
000064c0  72 65 73 65 6e 74 20 61  74 20 63 75 72 72 65 6e  |resent at curren|
000064d0  74 20 70 6f 69 6e 74 65  72 0d 14 dc 08 ea 20 5f  |t pointer..... _|
000064e0  25 0d 14 e6 14 e7 28 a4  69 31 28 31 29 29 3d 97  |%.....(.i1(1))=.|
000064f0  22 21 22 20 8c 0d 14 f0  25 20 f2 69 73 6b 69 70  |"!" ....% .iskip|
00006500  28 31 2c 31 29 3a f4 20  53 6b 69 70 20 66 75 6e  |(1,1):. Skip fun|
00006510  63 74 69 6f 6e 20 63 6f  64 65 0d 14 fa 3c 20 f5  |ction code...< .|
00006520  20 5f 25 3d a4 69 31 28  31 29 3a f2 69 73 6b 69  | _%=.i1(1):.iski|
00006530  70 28 31 2c 5f 25 29 3a  fd 20 5f 25 3d 30 3a f4  |p(1,_%):. _%=0:.|
00006540  20 53 6b 69 70 20 64 61  74 61 20 62 79 74 65 20  | Skip data byte |
00006550  62 6c 6f 63 6b 73 0d 15  04 12 cc 20 f2 69 73 6b  |blocks..... .isk|
00006560  69 70 28 31 2c 2d 31 29  0d 15 0e 05 cd 0d 15 18  |ip(1,-1)........|
00006570  05 e1 0d 15 22 05 20 0d  15 2c 0d dd a4 70 69 63  |....". ..,...pic|
00006580  5f 41 52 43 0d 15 36 23  f4 20 4c 6f 61 64 73 20  |_ARC..6#. Loads |
00006590  41 72 63 68 69 6d 65 64  65 73 20 73 70 72 69 74  |Archimedes sprit|
000065a0  65 20 69 6d 61 67 65 0d  15 40 2b 69 54 79 70 65  |e image..@+iType|
000065b0  25 3d 30 3a f4 20 53 65  74 20 6c 6f 77 2d 74 6f  |%=0:. Set low-to|
000065c0  2d 68 69 67 68 20 74 79  70 65 20 6f 66 20 64 61  |-high type of da|
000065d0  74 61 0d 15 4a 48 70 69  63 74 75 72 65 73 25 3d  |ta..JHpictures%=|
000065e0  a4 69 34 28 31 29 3a 6f  66 69 72 73 74 25 3d a4  |.i4(1):ofirst%=.|
000065f0  69 34 28 31 29 3a f4 20  4e 75 6d 62 65 72 20 6f  |i4(1):. Number o|
00006600  66 20 73 70 72 69 74 65  73 2c 20 6f 66 66 73 65  |f sprites, offse|
00006610  74 20 74 6f 20 66 69 72  73 74 0d 15 54 b9 e7 28  |t to first..T..(|
00006620  49 6d 61 67 65 4e 72 25  3e 30 29 20 80 20 28 49  |ImageNr%>0) . (I|
00006630  6d 61 67 65 4e 72 25 3c  3d 70 69 63 74 75 72 65  |mageNr%<=picture|
00006640  73 25 29 20 8c 20 70 69  63 74 75 72 65 25 3d 49  |s%) . picture%=I|
00006650  6d 61 67 65 4e 72 25 20  8b 20 f2 65 72 72 6f 72  |mageNr% . .error|
00006660  28 2d 31 2c 22 54 68 69  73 20 66 69 6c 65 20 63  |(-1,"This file c|
00006670  6f 6e 74 61 69 6e 73 20  22 2b c3 28 70 69 63 74  |ontains "+.(pict|
00006680  75 72 65 73 25 29 2b 22  20 69 6d 61 67 65 73 2e  |ures%)+" images.|
00006690  20 53 65 6c 65 63 74 20  27 31 27 2d 27 22 2b c3  | Select '1'-'"+.|
000066a0  28 70 69 63 74 75 72 65  73 25 29 2b 22 27 20 69  |(pictures%)+"' i|
000066b0  6e 20 74 68 65 20 27 49  6d 61 67 65 20 6e 75 6d  |n the 'Image num|
000066c0  62 65 72 27 20 73 75 62  6d 65 6e 75 20 21 22 29  |ber' submenu !")|
000066d0  3a 3d a3 0d 15 5e 31 f2  69 73 6b 69 70 28 31 2c  |:=...^1.iskip(1,|
000066e0  6f 66 69 72 73 74 25 2d  38 2d 34 29 3a f4 20 53  |ofirst%-8-4):. S|
000066f0  74 61 72 74 20 6f 66 20  66 69 72 73 74 20 73 70  |tart of first sp|
00006700  72 69 74 65 0d 15 68 45  73 6b 69 70 25 3d 70 69  |rite..hEskip%=pi|
00006710  63 74 75 72 65 73 25 2d  70 69 63 74 75 72 65 25  |ctures%-picture%|
00006720  3a c8 95 20 73 6b 69 70  25 3e 30 3a f2 69 73 6b  |:.. skip%>0:.isk|
00006730  69 70 28 31 2c a4 69 34  28 31 29 2d 34 29 3a 73  |ip(1,.i4(1)-4):s|
00006740  6b 69 70 25 2d 3d 31 3a  ce 0d 15 72 47 73 74 61  |kip%-=1:...rGsta|
00006750  72 74 25 3d a4 69 70 74  72 28 31 29 3a f2 69 73  |rt%=.iptr(1):.is|
00006760  6b 69 70 28 31 2c 31 36  29 3a f4 20 52 65 6d 65  |kip(1,16):. Reme|
00006770  6d 62 65 72 20 73 74 61  72 74 2c 20 73 6b 69 70  |mber start, skip|
00006780  20 6f 66 66 73 65 74 20  61 6e 64 20 6e 61 6d 65  | offset and name|
00006790  0d 15 7c 46 77 6f 72 64  73 25 3d a4 69 34 28 31  |..|Fwords%=.i4(1|
000067a0  29 2b 31 3a 68 65 69 67  68 74 25 3d a4 69 34 28  |)+1:height%=.i4(|
000067b0  31 29 2b 31 3a f4 20 57  69 64 74 68 20 69 6e 20  |1)+1:. Width in |
000067c0  77 6f 72 64 73 2c 20 68  65 69 67 68 74 20 69 6e  |words, height in|
000067d0  20 6c 69 6e 65 73 0d 15  86 37 62 66 69 72 73 74  | lines...7bfirst|
000067e0  25 3d a4 69 34 28 31 29  3a 62 6c 61 73 74 25 3d  |%=.i4(1):blast%=|
000067f0  a4 69 34 28 31 29 3a f4  20 46 69 72 73 74 2f 6c  |.i4(1):. First/l|
00006800  61 73 74 20 62 69 74 73  20 75 73 65 64 0d 15 90  |ast bits used...|
00006810  46 6f 69 6d 61 67 65 25  3d a4 69 34 28 31 29 3a  |Foimage%=.i4(1):|
00006820  f2 69 73 6b 69 70 28 31  2c 34 29 3a 73 70 72 6d  |.iskip(1,4):sprm|
00006830  6f 64 65 25 3d a4 69 34  28 31 29 3a f4 20 4f 66  |ode%=.i4(1):. Of|
00006840  66 73 65 74 20 74 6f 20  69 6d 61 67 65 2c 20 6d  |fset to image, m|
00006850  6f 64 65 0d 15 9a 42 63  6f 6c 62 69 74 73 25 3d  |ode...Bcolbits%=|
00006860  32 5e a4 6d 6f 64 65 5f  76 61 72 28 73 70 72 6d  |2^.mode_var(sprm|
00006870  6f 64 65 25 2c 39 29 3a  63 6f 6c 6f 75 72 73 25  |ode%,9):colours%|
00006880  3d 32 5e 63 6f 6c 62 69  74 73 25 3a f4 20 43 6f  |=2^colbits%:. Co|
00006890  6c 6f 75 72 73 0d 15 a4  23 e7 28 6f 69 6d 61 67  |lours...#.(oimag|
000068a0  65 25 3c 3d 34 34 29 84  28 63 6f 6c 6f 75 72 73  |e%<=44).(colours|
000068b0  25 3d 32 35 36 29 20 8c  0d 15 ae 3e 20 f4 20 4e  |%=256) ....> . N|
000068c0  6f 20 70 61 6c 65 74 74  65 20 6f 72 20 32 35 36  |o palette or 256|
000068d0  2d 63 6f 6c 6f 75 72 20  70 61 6c 65 74 74 65 20  |-colour palette |
000068e0  3a 20 73 65 74 20 73 74  61 6e 64 61 72 64 20 70  |: set standard p|
000068f0  61 6c 65 74 74 65 0d 15  b8 29 20 f2 73 74 61 6e  |alette...) .stan|
00006900  64 61 72 64 5f 70 61 6c  65 74 74 65 28 49 6e 50  |dard_palette(InP|
00006910  61 6c 25 28 29 2c 63 6f  6c 62 69 74 73 25 29 0d  |al%(),colbits%).|
00006920  15 c2 88 cc 20 49 6e 50  61 6c 25 28 30 29 3d 63  |.... InPal%(0)=c|
00006930  6f 6c 62 69 74 73 25 3a  e3 20 63 25 3d 31 20 b8  |olbits%:. c%=1 .|
00006940  20 63 6f 6c 6f 75 72 73  25 3a 70 25 3d a4 69 34  | colours%:p%=.i4|
00006950  28 31 29 3a 49 6e 50 61  6c 25 28 63 25 29 3d 28  |(1):InPal%(c%)=(|
00006960  28 70 25 80 26 46 46 30  30 29 3c 3c 38 29 2b 28  |(p%.&FF00)<<8)+(|
00006970  28 70 25 80 26 46 46 30  30 30 30 29 3e 3e 38 29  |(p%.&FF0000)>>8)|
00006980  2b 28 70 25 3e 3e 3e 32  34 29 3a f2 69 73 6b 69  |+(p%>>>24):.iski|
00006990  70 28 31 2c 34 29 3a ed  3a f4 20 52 65 61 64 20  |p(1,4):.:. Read |
000069a0  70 61 6c 65 74 74 65 0d  15 cc 05 cd 0d 15 d6 42  |palette........B|
000069b0  78 72 65 73 25 3d 28 77  6f 72 64 73 25 2a 33 32  |xres%=(words%*32|
000069c0  2d 62 66 69 72 73 74 25  2d 28 33 31 2d 62 6c 61  |-bfirst%-(31-bla|
000069d0  73 74 25 29 29 20 81 20  63 6f 6c 62 69 74 73 25  |st%)) . colbits%|
000069e0  3a 79 72 65 73 25 3d 68  65 69 67 68 74 25 0d 15  |:yres%=height%..|
000069f0  e0 84 e7 a4 61 76 61 69  6c 61 62 6c 65 5f 6d 6f  |....available_mo|
00006a00  64 65 28 73 70 72 6d 6f  64 65 25 29 20 8c 20 6d  |de(sprmode%) . m|
00006a10  6f 64 65 25 3d 73 70 72  6d 6f 64 65 25 20 8b 20  |ode%=sprmode% . |
00006a20  6d 6f 64 65 25 3d a4 6d  6f 64 65 28 78 72 65 73  |mode%=.mode(xres|
00006a30  25 2c 79 72 65 73 25 2c  63 6f 6c 6f 75 72 73 25  |%,yres%,colours%|
00006a40  29 3a f4 20 44 65 74 65  72 6d 69 6e 65 20 6f 74  |):. Determine ot|
00006a50  68 65 72 20 6d 6f 64 65  20 69 66 20 73 70 72 69  |her mode if spri|
00006a60  74 65 27 73 20 6d 6f 64  65 20 77 6f 6e 27 74 20  |te's mode won't |
00006a70  64 6f 0d 15 ea 29 e7 a4  6e 65 77 5f 69 6d 61 67  |do...)..new_imag|
00006a80  65 28 6d 6f 64 65 25 2c  78 72 65 73 25 2c 79 72  |e(mode%,xres%,yr|
00006a90  65 73 25 2c 30 29 20 8b  20 3d a3 0d 15 f4 7d f2  |es%,0) . =....}.|
00006aa0  69 6d 61 67 65 5f 69 6e  66 6f 28 22 41 72 63 68  |image_info("Arch|
00006ab0  69 6d 65 64 65 73 20 73  70 72 69 74 65 22 2c 78  |imedes sprite",x|
00006ac0  72 65 73 25 2c 79 72 65  73 25 2c 30 2c 63 6f 6c  |res%,yres%,0,col|
00006ad0  62 69 74 73 25 2c 6d 6f  64 65 25 2c 22 22 2c c3  |bits%,mode%,"",.|
00006ae0  70 69 63 74 75 72 65 73  25 2b 22 20 73 70 72 69  |pictures%+" spri|
00006af0  74 65 73 20 28 74 68 69  73 20 69 73 20 22 2b a4  |tes (this is "+.|
00006b00  74 69 6d 65 73 28 70 69  63 74 75 72 65 25 29 2b  |times(picture%)+|
00006b10  22 29 22 2c 31 2c 31 29  0d 15 fe 7f f2 76 61 72  |")",1,1).....var|
00006b20  28 22 66 70 74 72 22 2c  73 74 61 72 74 25 2b 6f  |("fptr",start%+o|
00006b30  69 6d 61 67 65 25 29 3a  f2 76 61 72 28 22 77 69  |image%):.var("wi|
00006b40  64 74 22 2c 78 72 65 73  25 29 3a f2 76 61 72 28  |dt",xres%):.var(|
00006b50  22 68 65 69 67 22 2c 68  65 69 67 68 74 25 29 3a  |"heig",height%):|
00006b60  f2 76 61 72 28 22 77 72  64 73 22 2c 77 6f 72 64  |.var("wrds",word|
00006b70  73 25 29 3a f2 76 61 72  28 22 62 66 69 72 22 2c  |s%):.var("bfir",|
00006b80  62 66 69 72 73 74 25 29  3a f2 75 6e 70 61 63 6b  |bfirst%):.unpack|
00006b90  28 22 41 52 43 22 29 0d  16 08 15 49 6d 67 4d 6f  |("ARC")....ImgMo|
00006ba0  64 65 25 3d 6d 6f 64 65  25 3a 3d b9 0d 16 12 05  |de%=mode%:=.....|
00006bb0  20 0d 16 1c 10 dd a4 70  69 63 5f 50 52 4f 41 52  | ......pic_PROAR|
00006bc0  54 0d 16 26 1c f4 20 4d  61 6b 65 73 20 50 72 6f  |T..&.. Makes Pro|
00006bd0  41 72 74 69 73 61 6e 20  69 6d 61 67 65 0d 16 30  |Artisan image..0|
00006be0  2b 77 69 64 74 68 25 3d  36 34 30 3a 68 65 69 67  |+width%=640:heig|
00006bf0  68 74 25 3d 32 35 36 3a  f4 20 53 65 74 20 72 65  |ht%=256:. Set re|
00006c00  73 6f 6c 75 74 69 6f 6e  0d 16 3a 34 6d 6f 64 65  |solution..:4mode|
00006c10  25 3d a4 6d 6f 64 65 28  77 69 64 74 68 25 2c 68  |%=.mode(width%,h|
00006c20  65 69 67 68 74 25 2c 32  35 36 29 3a f4 20 44 65  |eight%,256):. De|
00006c30  74 65 72 6d 69 6e 65 20  6d 6f 64 65 0d 16 44 43  |termine mode..DC|
00006c40  72 6f 6f 6d 25 3d 28 77  69 64 74 68 25 2a 68 65  |room%=(width%*he|
00006c50  69 67 68 74 25 2b 33 29  80 ac 33 3a f4 20 52 6f  |ight%+3)..3:. Ro|
00006c60  6f 6d 20 6e 65 65 64 65  64 20 66 6f 72 20 75 6e  |om needed for un|
00006c70  70 61 63 6b 20 28 63 6f  6c 74 61 62 6c 65 29 0d  |pack (coltable).|
00006c80  16 4e 30 e7 a4 6e 65 77  5f 69 6d 61 67 65 28 6d  |.N0..new_image(m|
00006c90  6f 64 65 25 2c 77 69 64  74 68 25 2c 68 65 69 67  |ode%,width%,heig|
00006ca0  68 74 25 2c 72 6f 6f 6d  25 29 20 8b 20 3d a3 0d  |ht%,room%) . =..|
00006cb0  16 58 2b 69 54 79 70 65  25 3d 30 3a f4 20 53 65  |.X+iType%=0:. Se|
00006cc0  74 20 6c 6f 77 2d 74 6f  2d 68 69 67 68 20 74 79  |t low-to-high ty|
00006cd0  70 65 20 6f 66 20 64 61  74 61 0d 16 62 47 63 6f  |pe of data..bGco|
00006ce0  6c 6c 65 6e 25 3d a4 69  34 28 31 29 3a 63 6f 6d  |llen%=.i4(1):com|
00006cf0  66 6c 61 67 25 3d a4 69  34 28 31 29 3a f4 20 4c  |flag%=.i4(1):. L|
00006d00  65 6e 67 74 68 20 6f 66  20 63 6f 6c 6f 75 72 20  |ength of colour |
00006d10  74 61 62 6c 65 2f 63 6f  6d 70 72 65 73 73 69 6f  |table/compressio|
00006d20  6e 0d 16 6c 35 63 6f 6c  74 61 62 6c 65 25 3d 4c  |n..l5coltable%=L|
00006d30  6f 6d 65 6d 25 2d 63 6f  6c 6c 65 6e 25 3a f4 20  |omem%-collen%:. |
00006d40  53 70 61 63 65 20 66 6f  72 20 63 6f 6c 6f 75 72  |Space for colour|
00006d50  20 74 61 62 6c 65 0d 16  76 32 f2 69 67 65 74 28  | table..v2.iget(|
00006d60  31 2c 63 6f 6c 74 61 62  6c 65 25 2c 63 6f 6c 6c  |1,coltable%,coll|
00006d70  65 6e 25 29 3a f4 20 52  65 61 64 20 63 6f 6c 6f  |en%):. Read colo|
00006d80  75 72 20 74 61 62 6c 65  0d 16 80 3f f2 73 74 61  |ur table...?.sta|
00006d90  6e 64 61 72 64 5f 70 61  6c 65 74 74 65 28 49 6e  |ndard_palette(In|
00006da0  50 61 6c 25 28 29 2c 38  29 3a f4 20 53 74 61 6e  |Pal%(),8):. Stan|
00006db0  64 61 72 64 20 32 35 36  20 63 6f 6c 6f 75 72 20  |dard 256 colour |
00006dc0  70 61 6c 65 74 74 65 0d  16 8a 5d f2 69 6d 61 67  |palette...].imag|
00006dd0  65 5f 69 6e 66 6f 28 22  50 72 6f 41 72 74 69 73  |e_info("ProArtis|
00006de0  61 6e 22 2c 77 69 64 74  68 25 2c 68 65 69 67 68  |an",width%,heigh|
00006df0  74 25 2c 30 2c 38 2c 6d  6f 64 65 25 2c 22 52 75  |t%,0,8,mode%,"Ru|
00006e00  6e 20 6c 65 6e 67 74 68  22 2c 22 22 2c 46 6c 65  |n length","",Fle|
00006e10  6e 25 2d 38 2c 77 69 64  74 68 25 2a 68 65 69 67  |n%-8,width%*heig|
00006e20  68 74 25 29 0d 16 94 81  f2 76 61 72 28 22 66 70  |ht%).....var("fp|
00006e30  74 72 22 2c a4 69 70 74  72 28 31 29 29 3a f2 76  |tr",.iptr(1)):.v|
00006e40  61 72 28 22 70 72 6f 74  22 2c 63 6f 6c 74 61 62  |ar("prot",coltab|
00006e50  6c 65 25 29 3a f2 76 61  72 28 22 63 6f 6d 70 22  |le%):.var("comp"|
00006e60  2c 63 6f 6d 66 6c 61 67  25 29 3a f2 76 61 72 28  |,comflag%):.var(|
00006e70  22 77 69 64 74 22 2c 77  69 64 74 68 25 29 3a f2  |"widt",width%):.|
00006e80  76 61 72 28 22 68 65 69  67 22 2c 68 65 69 67 68  |var("heig",heigh|
00006e90  74 25 29 3a f2 75 6e 70  61 63 6b 28 22 50 52 4f  |t%):.unpack("PRO|
00006ea0  41 52 54 22 29 0d 16 9e  15 49 6d 67 4d 6f 64 65  |ART")....ImgMode|
00006eb0  25 3d 6d 6f 64 65 25 3a  3d b9 0d 16 a8 05 20 0d  |%=mode%:=..... .|
00006ec0  16 b2 11 dd a4 70 69 63  5f 57 41 54 46 4f 52 44  |.....pic_WATFORD|
00006ed0  0d 16 bc 23 f4 20 4d 61  6b 65 73 20 57 61 74 66  |...#. Makes Watf|
00006ee0  6f 72 64 20 64 69 67 69  74 69 73 65 72 20 69 6d  |ord digitiser im|
00006ef0  61 67 65 0d 16 c6 2b 77  69 64 74 68 25 3d 35 31  |age...+width%=51|
00006f00  32 3a 68 65 69 67 68 74  25 3d 32 35 36 3a f4 20  |2:height%=256:. |
00006f10  53 65 74 20 72 65 73 6f  6c 75 74 69 6f 6e 0d 16  |Set resolution..|
00006f20  d0 34 6d 6f 64 65 25 3d  a4 6d 6f 64 65 28 77 69  |.4mode%=.mode(wi|
00006f30  64 74 68 25 2c 68 65 69  67 68 74 25 2c 32 35 36  |dth%,height%,256|
00006f40  29 3a f4 20 44 65 74 65  72 6d 69 6e 65 20 6d 6f  |):. Determine mo|
00006f50  64 65 0d 16 da 2c e7 a4  6e 65 77 5f 69 6d 61 67  |de...,..new_imag|
00006f60  65 28 6d 6f 64 65 25 2c  77 69 64 74 68 25 2c 68  |e(mode%,width%,h|
00006f70  65 69 67 68 74 25 2c 30  29 20 8b 20 3d a3 0d 16  |eight%,0) . =...|
00006f80  e4 3e 49 6e 50 61 6c 25  28 29 3d 30 3a 49 6e 50  |.>InPal%()=0:InP|
00006f90  61 6c 25 28 30 29 3d 38  3a f4 20 50 61 6c 65 74  |al%(0)=8:. Palet|
00006fa0  74 65 20 69 73 20 36 34  20 67 72 65 79 73 2c 20  |te is 64 greys, |
00006fb0  6c 69 6e 65 61 72 20 73  63 61 6c 65 0d 16 ee 38  |linear scale...8|
00006fc0  e3 20 63 25 3d 30 20 b8  20 36 33 3a 49 6e 50 61  |. c%=0 . 63:InPa|
00006fd0  6c 25 28 63 25 2b 31 29  3d 28 63 25 3c 3c 31 38  |l%(c%+1)=(c%<<18|
00006fe0  29 2b 28 63 25 3c 3c 31  30 29 2b 28 63 25 3c 3c  |)+(c%<<10)+(c%<<|
00006ff0  32 29 3a ed 0d 16 f8 68  f2 69 6d 61 67 65 5f 69  |2):....h.image_i|
00007000  6e 66 6f 28 22 57 61 74  66 6f 72 64 20 64 69 67  |nfo("Watford dig|
00007010  69 74 69 73 65 72 22 2c  77 69 64 74 68 25 2c 68  |itiser",width%,h|
00007020  65 69 67 68 74 25 2c 31  2c 36 2c 6d 6f 64 65 25  |eight%,1,6,mode%|
00007030  2c 22 52 75 6e 20 6c 65  6e 67 74 68 22 2c 22 22  |,"Run length",""|
00007040  2c 46 6c 65 6e 25 2c 28  77 69 64 74 68 25 2a 68  |,Flen%,(width%*h|
00007050  65 69 67 68 74 25 2a 36  29 81 38 29 0d 17 02 4e  |eight%*6).8)...N|
00007060  f2 76 61 72 28 22 77 69  64 74 22 2c 77 69 64 74  |.var("widt",widt|
00007070  68 25 29 3a f2 76 61 72  28 22 68 65 69 67 22 2c  |h%):.var("heig",|
00007080  68 65 69 67 68 74 25 29  3a f2 76 61 72 28 22 66  |height%):.var("f|
00007090  70 74 72 22 2c 30 29 3a  f2 75 6e 70 61 63 6b 28  |ptr",0):.unpack(|
000070a0  22 57 41 54 46 4f 52 44  22 29 0d 17 0c 15 49 6d  |"WATFORD")....Im|
000070b0  67 4d 6f 64 65 25 3d 6d  6f 64 65 25 3a 3d b9 0d  |gMode%=mode%:=..|
000070c0  17 16 05 20 0d 17 20 10  dd a4 70 69 63 5f 52 45  |... .. ...pic_RE|
000070d0  4e 44 45 52 0d 17 2a 1f  f4 20 4d 61 6b 65 73 20  |NDER..*.. Makes |
000070e0  52 65 6e 64 65 72 20 42  65 6e 64 65 72 20 69 6d  |Render Bender im|
000070f0  61 67 65 0d 17 34 0e 69  54 79 70 65 25 3d 30 3a  |age..4.iType%=0:|
00007100  f4 0d 17 3e 24 6d 6f 64  65 25 3d a4 69 31 28 31  |...>$mode%=.i1(1|
00007110  29 3a f4 20 52 65 61 64  20 69 6d 61 67 65 27 73  |):. Read image's|
00007120  20 6d 6f 64 65 0d 17 48  a6 e7 a4 6d 6f 64 65 5f  | mode..H...mode_|
00007130  76 61 72 28 6d 6f 64 65  25 2c 39 29 3c 3e 33 20  |var(mode%,9)<>3 |
00007140  8c 20 f2 65 72 72 6f 72  28 2d 31 2c 22 54 68 69  |. .error(-1,"Thi|
00007150  73 20 52 65 6e 64 65 72  20 42 65 6e 64 65 72 20  |s Render Bender |
00007160  69 6d 61 67 65 20 77 61  73 20 6e 6f 74 20 64 65  |image was not de|
00007170  66 69 6e 65 64 20 69 6e  20 61 20 32 35 36 20 63  |fined in a 256 c|
00007180  6f 6c 6f 75 72 20 6d 6f  64 65 20 21 22 29 20 8b  |olour mode !") .|
00007190  20 77 69 64 74 68 25 3d  a4 6d 6f 64 65 5f 76 61  | width%=.mode_va|
000071a0  72 28 6d 6f 64 65 25 2c  31 31 29 2b 31 3a 68 65  |r(mode%,11)+1:he|
000071b0  69 67 68 74 25 3d a4 6d  6f 64 65 5f 76 61 72 28  |ight%=.mode_var(|
000071c0  6d 6f 64 65 25 2c 31 32  29 2b 31 0d 17 52 34 6d  |mode%,12)+1..R4m|
000071d0  6f 64 65 25 3d a4 6d 6f  64 65 28 77 69 64 74 68  |ode%=.mode(width|
000071e0  25 2c 68 65 69 67 68 74  25 2c 32 35 36 29 3a f4  |%,height%,256):.|
000071f0  20 44 65 74 65 72 6d 69  6e 65 20 6d 6f 64 65 0d  | Determine mode.|
00007200  17 5c 2c e7 a4 6e 65 77  5f 69 6d 61 67 65 28 6d  |.\,..new_image(m|
00007210  6f 64 65 25 2c 77 69 64  74 68 25 2c 68 65 69 67  |ode%,width%,heig|
00007220  68 74 25 2c 30 29 20 8b  20 3d a3 0d 17 66 3f f2  |ht%,0) . =...f?.|
00007230  73 74 61 6e 64 61 72 64  5f 70 61 6c 65 74 74 65  |standard_palette|
00007240  28 49 6e 50 61 6c 25 28  29 2c 38 29 3a f4 20 53  |(InPal%(),8):. S|
00007250  74 61 6e 64 61 72 64 20  32 35 36 20 63 6f 6c 6f  |tandard 256 colo|
00007260  75 72 20 70 61 6c 65 74  74 65 0d 17 70 60 f2 69  |ur palette..p`.i|
00007270  6d 61 67 65 5f 69 6e 66  6f 28 22 52 65 6e 64 65  |mage_info("Rende|
00007280  72 20 42 65 6e 64 65 72  22 2c 77 69 64 74 68 25  |r Bender",width%|
00007290  2c 68 65 69 67 68 74 25  2c 30 2c 38 2c 6d 6f 64  |,height%,0,8,mod|
000072a0  65 25 2c 22 52 75 6e 20  6c 65 6e 67 74 68 22 2c  |e%,"Run length",|
000072b0  22 22 2c 46 6c 65 6e 25  2d 31 2c 77 69 64 74 68  |"",Flen%-1,width|
000072c0  25 2a 68 65 69 67 68 74  25 29 0d 17 7a 4d f2 76  |%*height%)..zM.v|
000072d0  61 72 28 22 66 70 74 72  22 2c 31 29 3a f2 76 61  |ar("fptr",1):.va|
000072e0  72 28 22 77 69 64 74 22  2c 77 69 64 74 68 25 29  |r("widt",width%)|
000072f0  3a f2 76 61 72 28 22 68  65 69 67 22 2c 68 65 69  |:.var("heig",hei|
00007300  67 68 74 25 29 3a f2 75  6e 70 61 63 6b 28 22 52  |ght%):.unpack("R|
00007310  45 4e 44 45 52 22 29 0d  17 84 15 49 6d 67 4d 6f  |ENDER")....ImgMo|
00007320  64 65 25 3d 6d 6f 64 65  25 3a 3d b9 0d 17 8e 05  |de%=mode%:=.....|
00007330  20 0d 17 98 0d dd a4 70  69 63 5f 41 49 4d 0d 17  | ......pic_AIM..|
00007340  a2 15 f4 20 4d 61 6b 65  73 20 41 49 4d 20 69 6d  |... Makes AIM im|
00007350  61 67 65 0d 17 ac 2b 77  69 64 74 68 25 3d 32 35  |age...+width%=25|
00007360  36 3a 68 65 69 67 68 74  25 3d 32 35 36 3a f4 20  |6:height%=256:. |
00007370  53 65 74 20 72 65 73 6f  6c 75 74 69 6f 6e 0d 17  |Set resolution..|
00007380  b6 34 6d 6f 64 65 25 3d  a4 6d 6f 64 65 28 77 69  |.4mode%=.mode(wi|
00007390  64 74 68 25 2c 68 65 69  67 68 74 25 2c 32 35 36  |dth%,height%,256|
000073a0  29 3a f4 20 44 65 74 65  72 6d 69 6e 65 20 6d 6f  |):. Determine mo|
000073b0  64 65 0d 17 c0 2c e7 a4  6e 65 77 5f 69 6d 61 67  |de...,..new_imag|
000073c0  65 28 6d 6f 64 65 25 2c  77 69 64 74 68 25 2c 68  |e(mode%,width%,h|
000073d0  65 69 67 68 74 25 2c 30  29 20 8b 20 3d a3 0d 17  |eight%,0) . =...|
000073e0  ca 34 49 6e 50 61 6c 25  28 30 29 3d 38 3a f4 20  |.4InPal%(0)=8:. |
000073f0  50 61 6c 65 74 74 65 20  69 73 20 32 35 36 20 67  |Palette is 256 g|
00007400  72 65 79 73 2c 20 6c 69  6e 65 61 72 20 73 63 61  |reys, linear sca|
00007410  6c 65 0d 17 d4 33 e3 20  63 25 3d 30 20 b8 20 32  |le...3. c%=0 . 2|
00007420  35 35 3a 49 6e 50 61 6c  25 28 63 25 2b 31 29 3d  |55:InPal%(c%+1)=|
00007430  28 63 25 3c 3c 31 36 29  2b 28 63 25 3c 3c 38 29  |(c%<<16)+(c%<<8)|
00007440  2b 63 25 3a ed 0d 17 de  43 f2 69 6d 61 67 65 5f  |+c%:....C.image_|
00007450  69 6e 66 6f 28 22 41 49  4d 22 2c 77 69 64 74 68  |info("AIM",width|
00007460  25 2c 68 65 69 67 68 74  25 2c 31 2c 38 2c 6d 6f  |%,height%,1,8,mo|
00007470  64 65 25 2c 22 22 2c 22  22 2c 46 6c 65 6e 25 2c  |de%,"","",Flen%,|
00007480  32 35 36 2a 32 35 36 29  0d 17 e8 4a f2 76 61 72  |256*256)...J.var|
00007490  28 22 77 69 64 74 22 2c  77 69 64 74 68 25 29 3a  |("widt",width%):|
000074a0  f2 76 61 72 28 22 68 65  69 67 22 2c 68 65 69 67  |.var("heig",heig|
000074b0  68 74 25 29 3a f2 76 61  72 28 22 66 70 74 72 22  |ht%):.var("fptr"|
000074c0  2c 30 29 3a f2 75 6e 70  61 63 6b 28 22 41 49 4d  |,0):.unpack("AIM|
000074d0  22 29 0d 17 f2 15 49 6d  67 4d 6f 64 65 25 3d 6d  |")....ImgMode%=m|
000074e0  6f 64 65 25 3a 3d b9 0d  17 fc 05 20 0d 18 06 0d  |ode%:=..... ....|
000074f0  dd a4 70 69 63 5f 53 55  4e 0d 18 10 15 f4 20 4d  |..pic_SUN..... M|
00007500  61 6b 65 73 20 53 55 4e  20 69 6d 61 67 65 0d 18  |akes SUN image..|
00007510  1a 2b 69 54 79 70 65 25  3d 31 3a f4 20 53 65 74  |.+iType%=1:. Set|
00007520  20 68 69 67 68 2d 74 6f  2d 6c 6f 77 20 74 79 70  | high-to-low typ|
00007530  65 20 6f 66 20 64 61 74  61 0d 18 24 5c 6d 61 67  |e of data..$\mag|
00007540  69 63 25 3d a4 69 34 28  31 29 3a e7 6d 61 67 69  |ic%=.i4(1):.magi|
00007550  63 25 3c 3e 26 35 39 41  36 36 41 39 35 20 8c 20  |c%<>&59A66A95 . |
00007560  f2 65 72 72 6f 72 28 2d  31 2c 22 54 68 69 73 20  |.error(-1,"This |
00007570  69 73 20 6e 6f 20 73 74  61 6e 64 61 72 64 20 53  |is no standard S|
00007580  55 4e 20 72 61 73 74 65  72 20 66 69 6c 65 20 21  |UN raster file !|
00007590  22 29 3a 3d a3 0d 18 2e  42 77 69 64 74 68 25 3d  |"):=....Bwidth%=|
000075a0  a4 69 34 28 31 29 3a 68  65 69 67 68 74 25 3d a4  |.i4(1):height%=.|
000075b0  68 65 69 67 68 74 25 3d  a4 68 31 29 3a 63 6f 6c  |height%=.h1):col|
000075c0  62 69 74 73 25 3d a4 69  34 28 31 29 3a f4 20 52  |bits%=.i4(1):. R|
000075d0  65 61 64 20 72 65 73 6f  6c 75 74 69 6f 6e 0d 18  |ead resolution..|
000075e0  38 4e 6c 65 6e 67 74 68  25 3d a4 69 34 28 31 29  |8Nlength%=.i4(1)|
000075f0  3a 74 79 70 65 25 3d a4  69 34 28 31 29 3a 6d 61  |:type%=.i4(1):ma|
00007600  70 74 79 70 65 25 3d a4  69 34 28 31 29 3a 6d 61  |ptype%=.i4(1):ma|
00007610  70 6c 65 6e 67 74 68 25  3d a4 69 34 28 31 29 3a  |plength%=.i4(1):|
00007620  f4 20 45 78 74 72 61 20  69 6e 66 6f 0d 18 42 48  |. Extra info..BH|
00007630  e7 74 79 70 65 25 3e 31  20 8c 20 f2 65 72 72 6f  |.type%>1 . .erro|
00007640  72 28 2d 31 2c 22 49 20  63 61 6e 20 6f 6e 6c 79  |r(-1,"I can only|
00007650  20 72 65 61 64 20 75 6e  63 6f 6d 70 72 65 73 73  | read uncompress|
00007660  65 64 20 53 75 6e 20 69  6d 61 67 65 73 20 21 22  |ed Sun images !"|
00007670  29 3a 3d a3 0d 18 4c 2b  63 6f 6c 6f 75 72 73 25  |):=...L+colours%|
00007680  3d 32 5e 63 6f 6c 62 69  74 73 25 3a f4 20 4e 75  |=2^colbits%:. Nu|
00007690  6d 62 65 72 20 6f 66 20  63 6f 6c 6f 75 72 73 0d  |mber of colours.|
000076a0  18 56 11 c8 8e 20 63 6f  6c 62 69 74 73 25 20 ca  |.V... colbits% .|
000076b0  0d 18 60 2c 20 c9 20 31  2c 38 20 3a 20 e7 28 6d  |..`, . 1,8 : .(m|
000076c0  61 70 74 79 70 65 25 3c  3e 31 29 84 28 6d 61 70  |aptype%<>1).(map|
000076d0  6c 65 6e 67 74 68 25 3d  30 29 20 8c 0d 18 6a 6d  |length%=0) ...jm|
000076e0  20 20 20 20 20 20 20 20  20 20 20 20 20 e7 63 6f  |             .co|
000076f0  6c 62 69 74 73 25 3e 31  20 8c 20 f2 65 72 72 6f  |lbits%>1 . .erro|
00007700  72 28 2d 31 2c 22 54 68  69 73 20 53 55 4e 20 69  |r(-1,"This SUN i|
00007710  6d 61 67 65 20 66 69 6c  65 20 63 6f 6e 74 61 69  |mage file contai|
00007720  6e 73 20 6e 6f 20 70 61  6c 65 74 74 65 20 21 20  |ns no palette ! |
00007730  49 20 77 69 6c 6c 20 75  73 65 20 61 20 67 72 65  |I will use a gre|
00007740  79 73 63 61 6c 65 2e 22  29 0d 18 74 2a 20 20 20  |yscale.")..t*   |
00007750  20 20 20 20 20 20 20 20  20 20 f2 67 72 65 79 5f  |          .grey_|
00007760  70 61 6c 65 74 74 65 28  63 6f 6c 62 69 74 73 25  |palette(colbits%|
00007770  2c 31 29 0d 18 7e 76 20  20 20 20 20 20 20 20 20  |,1)..~v         |
00007780  20 20 20 cc 20 49 6e 50  61 6c 25 28 29 3d 30 3a  |   . InPal%()=0:|
00007790  e3 20 69 25 3d 31 20 b8  20 33 3a e3 20 63 25 3d  |. i%=1 . 3:. c%=|
000077a0  31 20 b8 20 6d 61 70 6c  65 6e 67 74 68 25 81 33  |1 . maplength%.3|
000077b0  3a 49 6e 50 61 6c 25 28  63 25 29 3d 28 49 6e 50  |:InPal%(c%)=(InP|
000077c0  61 6c 25 28 63 25 29 3c  3c 38 29 2b a4 69 31 28  |al%(c%)<<8)+.i1(|
000077d0  31 29 3a ed 3a ed 3a 49  6e 50 61 6c 25 28 30 29  |1):.:.:InPal%(0)|
000077e0  3d 63 6f 6c 62 69 74 73  25 0d 18 88 11 20 20 20  |=colbits%....   |
000077f0  20 20 20 20 20 20 20 20  20 cd 0d 18 92 4c 20 7f  |         ....L .|
00007800  20 3a 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | : .error(-1,"I |
00007810  63 61 6e 20 6f 6e 6c 79  20 72 65 61 64 20 31 2d  |can only read 1-|
00007820  20 61 6e 64 20 38 2d 62  69 74 20 70 65 72 20 70  | and 8-bit per p|
00007830  69 78 65 6c 20 53 75 6e  20 69 6d 61 67 65 73 20  |ixel Sun images |
00007840  21 22 29 3a 3d a3 0d 18  9c 05 cb 0d 18 a6 39 6d  |!"):=.........9m|
00007850  6f 64 65 25 3d a4 6d 6f  64 65 28 77 69 64 74 68  |ode%=.mode(width|
00007860  25 2c 68 65 69 67 68 74  25 2c 63 6f 6c 6f 75 72  |%,height%,colour|
00007870  73 25 29 3a f4 20 44 65  74 65 72 6d 69 6e 65 20  |s%):. Determine |
00007880  6d 6f 64 65 0d 18 b0 2c  e7 a4 6e 65 77 5f 69 6d  |mode...,..new_im|
00007890  61 67 65 28 6d 6f 64 65  25 2c 77 69 64 74 68 25  |age(mode%,width%|
000078a0  2c 68 65 69 67 68 74 25  2c 30 29 20 8b 20 3d a3  |,height%,0) . =.|
000078b0  0d 18 ba 48 f2 69 6d 61  67 65 5f 69 6e 66 6f 28  |...H.image_info(|
000078c0  22 53 55 4e 22 2c 77 69  64 74 68 25 2c 68 65 69  |"SUN",width%,hei|
000078d0  67 68 74 25 2c 30 2c 63  6f 6c 62 69 74 73 25 2c  |ght%,0,colbits%,|
000078e0  6d 6f 64 65 25 2c 22 22  2c 22 22 2c 46 6c 65 6e  |mode%,"","",Flen|
000078f0  25 2c 46 6c 65 6e 25 29  0d 18 c4 56 f2 76 61 72  |%,Flen%)...V.var|
00007900  28 22 66 70 74 72 22 2c  33 32 2b 6d 61 70 6c 65  |("fptr",32+maple|
00007910  6e 67 74 68 25 29 3a f2  76 61 72 28 22 77 69 64  |ngth%):.var("wid|
00007920  74 22 2c 77 69 64 74 68  25 29 3a f2 76 61 72 28  |t",width%):.var(|
00007930  22 68 65 69 67 22 2c 68  65 69 67 68 74 25 29 3a  |"heig",height%):|
00007940  f2 75 6e 70 61 63 6b 28  22 53 55 4e 22 29 0d 18  |.unpack("SUN")..|
00007950  ce 15 49 6d 67 4d 6f 64  65 25 3d 6d 6f 64 65 25  |..ImgMode%=mode%|
00007960  3a 3d b9 0d 18 d8 05 20  0d 18 e2 0d dd a4 70 69  |:=..... ......pi|
00007970  63 5f 50 43 58 0d 18 ec  15 f4 20 4d 61 6b 65 73  |c_PCX..... Makes|
00007980  20 50 43 58 20 69 6d 61  67 65 0d 18 f6 2b 69 54  | PCX image...+iT|
00007990  79 70 65 25 3d 30 3a f4  20 53 65 74 20 6c 6f 77  |ype%=0:. Set low|
000079a0  2d 74 6f 2d 68 69 67 68  20 74 79 70 65 20 6f 66  |-to-high type of|
000079b0  20 64 61 74 61 0d 19 00  31 6d 61 6e 25 3d a4 69  | data...1man%=.i|
000079c0  31 28 31 29 3a f4 20 4d  61 6e 75 66 61 63 74 75  |1(1):. Manufactu|
000079d0  72 65 20 63 6f 64 65 20  28 73 68 6f 75 6c 64 20  |re code (should |
000079e0  62 65 20 31 30 29 0d 19  0a 3e e7 6d 61 6e 25 3c  |be 10)...>.man%<|
000079f0  3e 31 30 20 8c 20 f2 65  72 72 6f 72 28 2d 31 2c  |>10 . .error(-1,|
00007a00  22 54 68 69 73 20 69 73  20 6e 6f 20 73 74 61 6e  |"This is no stan|
00007a10  64 61 72 64 20 50 43 58  20 66 69 6c 65 20 21 22  |dard PCX file !"|
00007a20  29 3a 3d a3 0d 19 14 2c  76 65 72 73 69 6f 6e 25  |):=....,version%|
00007a30  3d a4 69 31 28 31 29 3a  f4 20 56 65 72 73 69 6f  |=.i1(1):. Versio|
00007a40  6e 20 63 6f 64 65 20 28  30 2f 32 2f 33 2f 35 29  |n code (0/2/3/5)|
00007a50  0d 19 1e 59 e7 76 65 72  73 69 6f 6e 25 3c 35 20  |...Y.version%<5 |
00007a60  8c 20 f2 65 72 72 6f 72  28 2d 31 2c 22 49 20 63  |. .error(-1,"I c|
00007a70  61 6e 6e 6f 74 20 68 61  6e 64 6c 65 20 6f 6c 64  |annot handle old|
00007a80  20 50 43 58 20 66 69 6c  65 73 20 28 6f 6e 6c 79  | PCX files (only|
00007a90  20 76 65 72 73 69 6f 6e  20 35 20 61 6e 64 20 75  | version 5 and u|
00007aa0  70 29 20 21 22 29 3a 3d  a3 0d 19 28 47 65 6e 63  |p) !"):=...(Genc|
00007ab0  6f 64 69 6e 67 25 3d a4  69 31 28 31 29 3a f4 20  |oding%=.i1(1):. |
00007ac0  45 6e 63 6f 64 69 6e 67  20 63 6f 64 65 20 28 30  |Encoding code (0|
00007ad0  2d 6e 6f 6e 65 2c 20 31  2d 50 43 58 20 72 75 6e  |-none, 1-PCX run|
00007ae0  6c 65 6e 67 74 68 20 65  6e 63 6f 64 69 6e 67 29  |length encoding)|
00007af0  0d 19 32 33 62 69 74 73  25 3d a4 69 31 28 31 29  |..23bits%=.i1(1)|
00007b00  3a f4 20 42 69 74 73 20  70 65 72 20 27 70 69 78  |:. Bits per 'pix|
00007b10  65 6c 27 20 28 31 2d 45  47 41 2c 20 38 2d 4d 43  |el' (1-EGA, 8-MC|
00007b20  47 41 29 0d 19 3c 50 77  78 6d 69 6e 25 3d a4 69  |GA)..<Pwxmin%=.i|
00007b30  32 28 31 29 3a 77 79 6d  69 6e 25 3d a4 69 32 28  |2(1):wymin%=.i2(|
00007b40  31 29 3a 77 78 6d 61 78  25 3d a4 69 32 28 31 29  |1):wxmax%=.i2(1)|
00007b50  3a 77 79 6d 61 78 25 3d  a4 69 32 28 31 29 3a f4  |:wymax%=.i2(1):.|
00007b60  20 57 69 6e 64 6f 77 20  63 6f 6f 72 64 69 6e 61  | Window coordina|
00007b70  74 65 73 0d 19 46 49 77  69 64 74 68 25 3d 77 78  |tes..FIwidth%=wx|
00007b80  6d 61 78 25 2d 77 78 6d  69 6e 25 2b 31 3a 68 65  |max%-wxmin%+1:he|
00007b90  69 67 68 74 25 3d 77 79  6d 61 78 25 2d 77 79 6d  |ight%=wymax%-wym|
00007ba0  69 6e 25 2b 31 3a f4 20  52 65 73 6f 6c 75 74 69  |in%+1:. Resoluti|
00007bb0  6f 6e 20 69 6e 20 70 69  78 65 6c 73 0d 19 50 20  |on in pixels..P |
00007bc0  f2 69 73 6b 69 70 28 31  2c 34 29 3a f4 20 53 6b  |.iskip(1,4):. Sk|
00007bd0  69 70 20 48 72 65 73 2f  56 72 65 73 0d 19 5a 1e  |ip Hres/Vres..Z.|
00007be0  49 6e 50 61 6c 25 28 29  3d 30 3a f4 20 43 6c 65  |InPal%()=0:. Cle|
00007bf0  61 72 20 70 61 6c 65 74  74 65 0d 19 64 6c e3 20  |ar palette..dl. |
00007c00  69 25 3d 31 20 b8 20 31  36 3a 72 67 62 25 3d a4  |i%=1 . 16:rgb%=.|
00007c10  69 33 28 31 29 3a 49 6e  50 61 6c 25 28 69 25 29  |i3(1):InPal%(i%)|
00007c20  3d 28 28 72 67 62 25 80  26 46 46 29 3c 3c 31 36  |=((rgb%.&FF)<<16|
00007c30  29 2b 28 72 67 62 25 80  26 46 46 30 30 29 2b 28  |)+(rgb%.&FF00)+(|
00007c40  72 67 62 25 3e 3e 31 36  29 3a ed 3a f4 20 52 65  |rgb%>>16):.:. Re|
00007c50  61 64 20 63 6f 6c 6f 75  72 6d 61 70 20 69 6e 20  |ad colourmap in |
00007c60  68 65 61 64 65 72 0d 19  6e 24 f2 69 73 6b 69 70  |header..n$.iskip|
00007c70  28 31 2c 31 29 3a f4 20  53 6b 69 70 20 72 65 73  |(1,1):. Skip res|
00007c80  65 72 76 65 64 20 62 79  74 65 0d 19 78 21 70 6c  |erved byte..x!pl|
00007c90  61 6e 65 73 25 3d a4 69  31 28 31 29 3a f4 20 43  |anes%=.i1(1):. C|
00007ca0  6f 6c 6f 75 72 70 6c 61  6e 65 73 0d 19 82 24 6c  |olourplanes...$l|
00007cb0  69 6e 65 6c 65 6e 25 3d  a4 69 32 28 31 29 3a f4  |inelen%=.i2(1):.|
00007cc0  20 42 79 74 65 73 20 70  65 72 20 6c 69 6e 65 0d  | Bytes per line.|
00007cd0  19 8c 88 72 6f 75 6e 64  6c 65 6e 25 3d 28 28 77  |...roundlen%=((w|
00007ce0  69 64 74 68 25 2a 62 69  74 73 25 2b 37 29 81 38  |idth%*bits%+7).8|
00007cf0  29 3a e7 72 6f 75 6e 64  6c 65 6e 25 3c 3e 6c 69  |):.roundlen%<>li|
00007d00  6e 65 6c 65 6e 25 20 8c  20 77 69 64 74 68 25 3d  |nelen% . width%=|
00007d10  6c 69 6e 65 6c 65 6e 25  2a 38 2f 62 69 74 73 25  |linelen%*8/bits%|
00007d20  3a f4 20 43 6f 72 72 65  63 74 20 77 69 64 74 68  |:. Correct width|
00007d30  20 69 66 20 77 69 6e 64  6f 77 20 61 6e 64 20 6c  | if window and l|
00007d40  69 6e 65 6c 65 6e 67 74  68 20 64 61 74 61 20 63  |inelength data c|
00007d50  6f 6e 66 6c 69 63 74 0d  19 96 2b 70 69 78 62 69  |onflict...+pixbi|
00007d60  74 73 25 3d 62 69 74 73  25 2a 70 6c 61 6e 65 73  |ts%=bits%*planes|
00007d70  25 3a f4 20 42 69 74 73  20 70 65 72 20 70 69 78  |%:. Bits per pix|
00007d80  65 6c 0d 19 a0 89 e7 28  70 69 78 62 69 74 73 25  |el.....(pixbits%|
00007d90  3d 31 29 20 84 20 28 70  69 78 62 69 74 73 25 3d  |=1) . (pixbits%=|
00007da0  32 29 20 84 20 28 70 69  78 62 69 74 73 25 3d 34  |2) . (pixbits%=4|
00007db0  29 20 84 20 28 70 69 78  62 69 74 73 25 3d 38 29  |) . (pixbits%=8)|
00007dc0  20 8b 20 f2 65 72 72 6f  72 28 2d 31 2c 22 49 20  | . .error(-1,"I |
00007dd0  63 61 6e 6e 6f 74 20 68  61 6e 64 6c 65 20 22 2b  |cannot handle "+|
00007de0  c3 28 32 5e 70 69 78 62  69 74 73 25 29 2b 22 20  |.(2^pixbits%)+" |
00007df0  63 6f 6c 6f 75 72 20 45  47 41 20 50 43 58 20 66  |colour EGA PCX f|
00007e00  69 6c 65 73 20 21 22 29  3a 3d a3 0d 19 aa 2b 63  |iles !"):=....+c|
00007e10  6f 6c 6f 75 72 73 25 3d  32 5e 70 69 78 62 69 74  |olours%=2^pixbit|
00007e20  73 25 3a f4 20 4e 75 6d  62 65 72 20 6f 66 20 63  |s%:. Number of c|
00007e30  6f 6c 6f 75 72 73 0d 19  b4 7e f2 76 61 72 28 22  |olours...~.var("|
00007e40  66 70 74 72 22 2c 31 32  38 29 3a f2 76 61 72 28  |fptr",128):.var(|
00007e50  22 74 6f 74 6c 22 2c 6c  69 6e 65 6c 65 6e 25 2a  |"totl",linelen%*|
00007e60  70 6c 61 6e 65 73 25 2a  68 65 69 67 68 74 25 29  |planes%*height%)|
00007e70  3a f2 76 61 72 28 22 63  6f 6d 70 22 2c 65 6e 63  |:.var("comp",enc|
00007e80  6f 64 69 6e 67 25 29 3a  f2 75 6e 70 61 63 6b 5f  |oding%):.unpack_|
00007e90  70 68 61 73 65 28 22 50  43 58 22 2c 32 29 3a f4  |phase("PCX",2):.|
00007ea0  20 47 65 74 20 28 70 61  63 6b 65 64 29 20 6c 65  | Get (packed) le|
00007eb0  6e 67 74 68 0d 19 be 41  6c 65 6e 25 3d a4 76 61  |ngth...Alen%=.va|
00007ec0  72 28 22 70 61 6b 6c 22  29 3a f2 69 70 74 72 28  |r("pakl"):.iptr(|
00007ed0  31 2c 31 32 38 2b 6c 65  6e 25 29 3a f4 20 47 6f  |1,128+len%):. Go|
00007ee0  20 74 6f 20 65 6e 64 20  6f 66 20 69 6d 61 67 65  | to end of image|
00007ef0  20 64 61 74 61 0d 19 c8  3f 63 6f 64 65 25 3d a4  | data...?code%=.|
00007f00  69 31 28 31 29 3a f4 20  47 65 74 20 63 6f 64 65  |i1(1):. Get code|
00007f10  20 28 31 32 20 69 6e 64  69 63 61 74 65 73 20 70  | (12 indicates p|
00007f20  61 6c 65 74 74 65 20 69  6e 66 6f 20 66 6f 6c 6c  |alette info foll|
00007f30  6f 77 73 29 0d 19 d2 74  e7 63 6f 64 65 25 3d 31  |ows)...t.code%=1|
00007f40  32 20 8c 20 e3 20 69 25  3d 31 20 b8 20 63 6f 6c  |2 . . i%=1 . col|
00007f50  6f 75 72 73 25 3a 72 67  62 25 3d a4 69 33 28 31  |ours%:rgb%=.i3(1|
00007f60  29 3a 49 6e 50 61 6c 25  28 69 25 29 3d 28 28 72  |):InPal%(i%)=((r|
00007f70  67 62 25 80 26 46 46 29  3c 3c 31 36 29 2b 28 72  |gb%.&FF)<<16)+(r|
00007f80  67 62 25 80 26 46 46 30  30 29 2b 28 72 67 62 25  |gb%.&FF00)+(rgb%|
00007f90  3e 3e 31 36 29 3a ed 3a  f4 20 52 65 61 64 20 63  |>>16):.:. Read c|
00007fa0  6f 6c 6f 75 72 6d 61 70  0d 19 dc 2e 67 72 65 79  |olourmap....grey|
00007fb0  3d a3 3a f4 20 46 6c 61  67 20 74 6f 20 69 6e 64  |=.:. Flag to ind|
00007fc0  69 63 61 74 65 20 66 6f  72 63 65 64 20 67 72 65  |icate forced gre|
00007fd0  79 73 63 61 6c 65 0d 19  e6 80 e7 62 69 74 73 25  |yscale.....bits%|
00007fe0  3d 38 20 8c 20 e7 63 6f  64 65 25 3c 3e 31 32 20  |=8 . .code%<>12 |
00007ff0  8c 20 f2 65 72 72 6f 72  28 2d 31 2c 22 49 20 63  |. .error(-1,"I c|
00008000  61 6e 6e 6f 74 20 66 69  6e 64 20 74 68 65 20 70  |annot find the p|
00008010  61 6c 65 74 74 65 20 69  6e 20 74 68 69 73 20 32  |alette in this 2|
00008020  35 36 2d 63 6f 6c 6f 75  72 20 50 43 58 20 69 6d  |56-colour PCX im|
00008030  61 67 65 20 21 20 49 20  77 69 6c 6c 20 75 73 65  |age ! I will use|
00008040  20 61 20 67 72 65 79 73  63 61 6c 65 2e 22 29 3a  | a greyscale."):|
00008050  67 72 65 79 3d b9 0d 19  f0 7d e7 ac 67 72 65 79  |grey=....}..grey|
00008060  20 8c 20 e7 c6 8e 28 49  6e 50 61 6c 25 28 29 29  | . ...(InPal%())|
00008070  3d 30 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |=0 . .error(-1,"|
00008080  49 20 63 61 6e 6e 6f 74  20 66 69 6e 64 20 61 20  |I cannot find a |
00008090  64 65 63 65 6e 74 20 70  61 6c 65 74 74 65 20 69  |decent palette i|
000080a0  6e 20 74 68 69 73 20 50  43 58 20 69 6d 61 67 65  |n this PCX image|
000080b0  20 21 20 49 20 77 69 6c  6c 20 75 73 65 20 61 20  | ! I will use a |
000080c0  67 72 65 79 73 63 61 6c  65 2e 22 29 3a 67 72 65  |greyscale."):gre|
000080d0  79 3d b9 0d 19 fa 3a e7  67 72 65 79 20 8c 20 f2  |y=....:.grey . .|
000080e0  67 72 65 79 5f 70 61 6c  65 74 74 65 28 70 69 78  |grey_palette(pix|
000080f0  62 69 74 73 25 2c 31 29  20 8b 20 49 6e 50 61 6c  |bits%,1) . InPal|
00008100  25 28 30 29 3d 70 69 78  62 69 74 73 25 0d 1a 04  |%(0)=pixbits%...|
00008110  39 6d 6f 64 65 25 3d a4  6d 6f 64 65 28 77 69 64  |9mode%=.mode(wid|
00008120  74 68 25 2c 68 65 69 67  68 74 25 2c 63 6f 6c 6f  |th%,height%,colo|
00008130  75 72 73 25 29 3a f4 20  44 65 74 65 72 6d 69 6e  |urs%):. Determin|
00008140  65 20 6d 6f 64 65 0d 1a  0e 2c e7 a4 6e 65 77 5f  |e mode...,..new_|
00008150  69 6d 61 67 65 28 6d 6f  64 65 25 2c 77 69 64 74  |image(mode%,widt|
00008160  68 25 2c 68 65 69 67 68  74 25 2c 30 29 20 8b 20  |h%,height%,0) . |
00008170  3d a3 0d 1a 18 32 e7 65  6e 63 6f 64 69 6e 67 25  |=....2.encoding%|
00008180  3d 31 20 8c 20 63 6f 6d  70 72 24 3d 22 52 75 6e  |=1 . compr$="Run|
00008190  20 6c 65 6e 67 74 68 22  20 8b 20 63 6f 6d 70 72  | length" . compr|
000081a0  24 3d 22 22 0d 1a 22 66  f2 69 6d 61 67 65 5f 69  |$="".."f.image_i|
000081b0  6e 66 6f 28 22 50 43 58  22 2c 77 69 64 74 68 25  |nfo("PCX",width%|
000081c0  2c 68 65 69 67 68 74 25  2c 30 2c 70 69 78 62 69  |,height%,0,pixbi|
000081d0  74 73 25 2c 6d 6f 64 65  25 2c 63 6f 6d 70 72 24  |ts%,mode%,compr$|
000081e0  2c 22 22 2c 46 6c 65 6e  25 2d 31 32 38 2c 28 77  |,"",Flen%-128,(w|
000081f0  69 64 74 68 25 2a 68 65  69 67 68 74 25 2a 70 69  |idth%*height%*pi|
00008200  78 62 69 74 73 25 29 81  38 29 0d 1a 2c 63 f2 76  |xbits%).8)..,c.v|
00008210  61 72 28 22 66 70 74 72  22 2c 31 32 38 29 3a f2  |ar("fptr",128):.|
00008220  76 61 72 28 22 77 69 64  74 22 2c 77 69 64 74 68  |var("widt",width|
00008230  25 29 3a f2 76 61 72 28  22 68 65 69 67 22 2c 68  |%):.var("heig",h|
00008240  65 69 67 68 74 25 29 3a  f2 76 61 72 28 22 63 6f  |eight%):.var("co|
00008250  6d 70 22 2c 65 6e 63 6f  64 69 6e 67 25 29 3a f2  |mp",encoding%):.|
00008260  75 6e 70 61 63 6b 28 22  50 43 58 22 29 0d 1a 36  |unpack("PCX")..6|
00008270  15 49 6d 67 4d 6f 64 65  25 3d 6d 6f 64 65 25 3a  |.ImgMode%=mode%:|
00008280  3d b9 0d 1a 40 05 20 0d  1a 4a 0e dd a4 70 69 63  |=...@. ..J...pic|
00008290  5f 54 49 46 46 0d 1a 54  16 f4 20 4d 61 6b 65 73  |_TIFF..T.. Makes|
000082a0  20 54 49 46 46 20 69 6d  61 67 65 0d 1a 5e 2b 69  | TIFF image..^+i|
000082b0  64 24 3d a4 69 73 74 72  69 6e 67 28 31 2c 32 29  |d$=.istring(1,2)|
000082c0  3a f4 20 54 49 46 46 20  69 64 65 6e 74 69 66 69  |:. TIFF identifi|
000082d0  63 61 74 69 6f 6e 0d 1a  68 0c c8 8e 20 69 64 24  |cation..h... id$|
000082e0  20 ca 0d 1a 72 35 20 c9  20 22 49 49 22 20 3a 20  | ...r5 . "II" : |
000082f0  69 54 79 70 65 25 3d 30  3a f4 20 53 65 74 20 6c  |iType%=0:. Set l|
00008300  6f 77 2d 74 6f 2d 68 69  67 68 20 74 79 70 65 20  |ow-to-high type |
00008310  6f 66 20 64 61 74 61 0d  1a 7c 35 20 c9 20 22 4d  |of data..|5 . "M|
00008320  4d 22 20 3a 20 69 54 79  70 65 25 3d 31 3a f4 20  |M" : iType%=1:. |
00008330  53 65 74 20 68 69 67 68  2d 74 6f 2d 6c 6f 77 20  |Set high-to-low |
00008340  74 79 70 65 20 6f 66 20  64 61 74 61 0d 1a 86 32  |type of data...2|
00008350  20 7f 20 3a 20 f2 65 72  72 6f 72 28 2d 31 2c 22  | . : .error(-1,"|
00008360  54 68 69 73 20 69 73 20  6e 6f 74 20 61 20 54 49  |This is not a TI|
00008370  46 46 20 66 69 6c 65 20  21 22 29 3a 3d a3 0d 1a  |FF file !"):=...|
00008380  90 05 cb 0d 1a 9a 2b 76  65 72 73 69 6f 6e 25 3d  |......+version%=|
00008390  a4 74 69 66 66 28 33 29  3a f4 20 54 49 46 46 20  |.tiff(3):. TIFF |
000083a0  76 65 72 73 69 6f 6e 20  6e 75 6d 62 65 72 0d 1a  |version number..|
000083b0  a4 47 e7 76 65 72 73 69  6f 6e 25 3c 3e 34 32 20  |.G.version%<>42 |
000083c0  8c 20 f2 65 72 72 6f 72  28 2d 31 2c 22 49 20 63  |. .error(-1,"I c|
000083d0  61 6e 6e 6f 74 20 68 61  6e 64 6c 65 20 74 68 69  |annot handle thi|
000083e0  73 20 54 49 46 46 20 76  65 72 73 69 6f 6e 20 21  |s TIFF version !|
000083f0  22 29 3a 3d a3 0d 1a ae  2b 6f 66 66 46 49 46 44  |"):=....+offFIFD|
00008400  25 3d a4 74 69 66 66 28  34 29 3a f4 20 4f 66 66  |%=.tiff(4):. Off|
00008410  73 65 74 20 74 6f 20 66  69 72 73 74 20 49 46 44  |set to first IFD|
00008420  0d 1a b8 27 f2 69 70 74  72 28 31 2c 6f 66 66 46  |...'.iptr(1,offF|
00008430  49 46 44 25 29 3a f4 20  47 6f 20 74 6f 20 66 69  |IFD%):. Go to fi|
00008440  72 73 74 20 49 46 44 0d  1a c2 2d 65 6e 74 72 69  |rst IFD...-entri|
00008450  65 73 25 3d a4 74 69 66  66 28 33 29 3a f4 20 4e  |es%=.tiff(3):. N|
00008460  75 6d 62 65 72 20 6f 66  20 49 46 44 20 65 6e 74  |umber of IFD ent|
00008470  72 69 65 73 0d 1a cc 1f  49 6e 50 61 6c 25 28 29  |ries....InPal%()|
00008480  3d 30 3a f4 20 4e 6f 20  70 61 6c 65 74 74 65 20  |=0:. No palette |
00008490  79 65 74 0d 1a d6 31 6f  6b 3d b9 3a f4 20 46 6c  |yet...1ok=.:. Fl|
000084a0  61 67 20 69 6e 64 69 63  61 74 69 6e 67 20 69 66  |ag indicating if|
000084b0  20 54 49 46 46 20 63 61  6e 20 62 65 20 68 61 6e  | TIFF can be han|
000084c0  64 6c 65 64 0d 1a e0 72  72 6f 77 73 70 65 72 73  |dled...rrowspers|
000084d0  74 72 69 70 25 3d 2d 31  3a 62 69 74 73 25 3d 31  |trip%=-1:bits%=1|
000084e0  3a 63 6f 6c 6f 75 72 73  25 3d 32 3a 63 6f 6d 70  |:colours%=2:comp|
000084f0  72 65 73 73 69 6f 6e 25  3d 31 3a 70 6c 61 6e 61  |ression%=1:plana|
00008500  72 25 3d 31 3a 66 69 6c  6c 6f 72 64 65 72 25 3d  |r%=1:fillorder%=|
00008510  31 3a 67 72 65 79 75 6e  69 74 25 3d 33 3a 70 69  |1:greyunit%=3:pi|
00008520  78 73 61 6d 70 6c 65 73  25 3d 31 3a f4 20 44 65  |xsamples%=1:. De|
00008530  66 61 75 6c 74 73 0d 1a  ea 15 e3 20 65 25 3d 31  |faults..... e%=1|
00008540  20 b8 20 65 6e 74 72 69  65 73 25 0d 1a f4 40 74  | . entries%...@t|
00008550  61 67 25 3d a4 74 69 66  66 28 33 29 3a 74 79 70  |ag%=.tiff(3):typ|
00008560  65 25 3d a4 74 69 66 66  28 33 29 3a 6c 65 6e 67  |e%=.tiff(3):leng|
00008570  74 68 25 3d a4 74 69 66  66 28 34 29 3a f4 20 54  |th%=.tiff(4):. T|
00008580  61 67 20 61 6e 64 20 69  6e 66 6f 0d 1a fe 72 e7  |ag and info...r.|
00008590  74 79 70 65 25 3d 31 20  8c 20 76 61 6c 75 65 25  |type%=1 . value%|
000085a0  3d a4 74 69 66 66 28 31  29 3a f2 69 73 6b 69 70  |=.tiff(1):.iskip|
000085b0  28 31 2c 33 29 20 8b 20  e7 74 79 70 65 25 3d 33  |(1,3) . .type%=3|
000085c0  20 8c 20 76 61 6c 75 65  25 3d a4 74 69 66 66 28  | . value%=.tiff(|
000085d0  33 29 3a f2 69 73 6b 69  70 28 31 2c 32 29 20 8b  |3):.iskip(1,2) .|
000085e0  20 76 61 6c 75 65 25 3d  a4 74 69 66 66 28 34 29  | value%=.tiff(4)|
000085f0  3a f4 20 52 65 61 64 20  76 61 6c 75 65 0d 1b 08  |:. Read value...|
00008600  36 63 70 74 72 25 3d a4  69 70 74 72 28 31 29 3a  |6cptr%=.iptr(1):|
00008610  f4 20 52 65 6d 65 6d 62  65 72 20 63 75 72 72 65  |. Remember curre|
00008620  6e 74 20 70 6f 73 69 74  69 6f 6e 20 69 6e 20 66  |nt position in f|
00008630  69 6c 65 0d 1b 12 0d c8  8e 20 74 61 67 25 20 ca  |ile...... tag% .|
00008640  0d 1b 1c 1a 20 c9 20 32  35 36 20 3a 20 77 69 64  |.... . 256 : wid|
00008650  74 68 25 3d 76 61 6c 75  65 25 0d 1b 26 1b 20 c9  |th%=value%..&. .|
00008660  20 32 35 37 20 3a 20 68  65 69 67 68 74 25 3d 76  | 257 : height%=v|
00008670  61 6c 75 65 25 0d 1b 30  2a 20 c9 20 32 35 38 20  |alue%..0* . 258 |
00008680  3a 20 62 69 74 73 25 3d  76 61 6c 75 65 25 3a 63  |: bits%=value%:c|
00008690  6f 6c 6f 75 72 73 25 3d  32 5e 62 69 74 73 25 0d  |olours%=2^bits%.|
000086a0  1b 3a 20 20 c9 20 32 35  39 20 3a 20 63 6f 6d 70  |.:  . 259 : comp|
000086b0  72 65 73 73 69 6f 6e 25  3d 76 61 6c 75 65 25 0d  |ression%=value%.|
000086c0  1b 44 20 20 c9 20 32 36  32 20 3a 20 70 68 6f 74  |.D  . 262 : phot|
000086d0  6f 6d 65 74 72 69 63 25  3d 76 61 6c 75 65 25 0d  |ometric%=value%.|
000086e0  1b 4e 1e 20 c9 20 32 36  36 20 3a 20 66 69 6c 6c  |.N. . 266 : fill|
000086f0  6f 72 64 65 72 25 3d 76  61 6c 75 65 25 0d 1b 58  |order%=value%..X|
00008700  90 20 c9 20 32 37 33 20  3a 20 21 73 74 72 6f 66  |. . 273 : !strof|
00008710  66 3d 6c 65 6e 67 74 68  25 3a e7 6c 65 6e 67 74  |f=length%:.lengt|
00008720  68 25 3d 31 20 8c 20 73  74 72 6f 66 66 21 34 3d  |h%=1 . stroff!4=|
00008730  76 61 6c 75 65 25 20 8b  20 f2 69 70 74 72 28 31  |value% . .iptr(1|
00008740  2c 76 61 6c 75 65 25 29  3a 70 25 3d 73 74 72 6f  |,value%):p%=stro|
00008750  66 66 2b 34 3a e3 20 73  25 3d 31 20 b8 20 6c 65  |ff+4:. s%=1 . le|
00008760  6e 67 74 68 25 3a 21 70  25 3d a4 74 69 66 66 28  |ngth%:!p%=.tiff(|
00008770  74 79 70 65 25 29 3a 70  25 2b 3d 34 3a ed 3a f2  |type%):p%+=4:.:.|
00008780  69 70 74 72 28 31 2c 63  70 74 72 25 29 0d 1b 62  |iptr(1,cptr%)..b|
00008790  1f 20 c9 20 32 37 37 20  3a 20 70 69 78 73 61 6d  |. . 277 : pixsam|
000087a0  70 6c 65 73 25 3d 76 61  6c 75 65 25 0d 1b 6c 21  |ples%=value%..l!|
000087b0  20 c9 20 32 37 38 20 3a  20 72 6f 77 73 70 65 72  | . 278 : rowsper|
000087c0  73 74 72 69 70 25 3d 76  61 6c 75 65 25 0d 1b 76  |strip%=value%..v|
000087d0  1b 20 c9 20 32 38 34 20  3a 20 70 6c 61 6e 61 72  |. . 284 : planar|
000087e0  25 3d 76 61 6c 75 65 25  0d 1b 80 1d 20 c9 20 32  |%=value%.... . 2|
000087f0  39 30 20 3a 20 67 72 65  79 75 6e 69 74 25 3d 76  |90 : greyunit%=v|
00008800  61 6c 75 65 25 0d 1b 8a  a0 20 c9 20 32 39 31 20  |alue%.... . 291 |
00008810  3a 20 f2 69 70 74 72 28  31 2c 76 61 6c 75 65 25  |: .iptr(1,value%|
00008820  29 3a 64 69 76 25 3d 32  2a 31 30 5e 67 72 65 79  |):div%=2*10^grey|
00008830  75 6e 69 74 25 3a e3 20  67 25 3d 31 20 b8 20 6c  |unit%:. g%=1 . l|
00008840  65 6e 67 74 68 25 3a 63  25 3d a4 74 69 66 66 28  |ength%:c%=.tiff(|
00008850  74 79 70 65 25 29 2a 32  35 35 3a 69 25 3d 63 25  |type%)*255:i%=c%|
00008860  2f 64 69 76 25 3a 49 6e  50 61 6c 25 28 67 25 29  |/div%:InPal%(g%)|
00008870  3d 69 25 2b 28 69 25 3c  3c 38 29 2b 28 69 25 3c  |=i%+(i%<<8)+(i%<|
00008880  3c 31 36 29 3a ed 3a 49  6e 50 61 6c 25 28 30 29  |<16):.:InPal%(0)|
00008890  3d 62 69 74 73 25 3a f2  69 70 74 72 28 31 2c 63  |=bits%:.iptr(1,c|
000088a0  70 74 72 25 29 0d 1b 94  9b 20 c9 20 33 32 30 20  |ptr%).... . 320 |
000088b0  3a 20 f2 69 70 74 72 28  31 2c 76 61 6c 75 65 25  |: .iptr(1,value%|
000088c0  29 3a 49 6e 50 61 6c 25  28 29 3d 30 3a e3 20 70  |):InPal%()=0:. p|
000088d0  25 3d 31 20 b8 20 33 3a  e3 20 63 25 3d 31 20 b8  |%=1 . 3:. c%=1 .|
000088e0  20 6c 65 6e 67 74 68 25  81 33 3a 76 25 3d a4 74  | length%.3:v%=.t|
000088f0  69 66 66 28 74 79 70 65  25 29 3a 49 6e 50 61 6c  |iff(type%):InPal|
00008900  25 28 63 25 29 3d 28 49  6e 50 61 6c 25 28 63 25  |%(c%)=(InPal%(c%|
00008910  29 3c 3c 38 29 2b 28 76  25 3e 3e 38 29 3a ed 3a  |)<<8)+(v%>>8):.:|
00008920  ed 3a 49 6e 50 61 6c 25  28 30 29 3d 62 69 74 73  |.:InPal%(0)=bits|
00008930  25 3a f2 69 70 74 72 28  31 2c 63 70 74 72 25 29  |%:.iptr(1,cptr%)|
00008940  0d 1b 9e 05 cb 0d 1b a8  05 ed 0d 1b b2 2d e7 72  |.............-.r|
00008950  6f 77 73 70 65 72 73 74  72 69 70 25 3d 2d 31 20  |owsperstrip%=-1 |
00008960  8c 20 72 6f 77 73 70 65  72 73 74 72 69 70 25 3d  |. rowsperstrip%=|
00008970  68 65 69 67 68 74 25 0d  1b bc 4f e7 63 6f 6d 70  |height%...O.comp|
00008980  72 65 73 73 69 6f 6e 25  3c 3e 31 20 8c 20 f2 65  |ression%<>1 . .e|
00008990  72 72 6f 72 28 2d 31 2c  22 49 20 63 61 6e 6e 6f  |rror(-1,"I canno|
000089a0  74 20 68 61 6e 64 6c 65  20 63 6f 6d 70 72 65 73  |t handle compres|
000089b0  73 65 64 20 54 49 46 46  20 69 6d 61 67 65 73 20  |sed TIFF images |
000089c0  21 22 29 3a 3d a3 0d 1b  c6 7d e7 28 62 69 74 73  |!"):=....}.(bits|
000089d0  25 3d 31 29 84 28 62 69  74 73 25 3d 32 29 84 28  |%=1).(bits%=2).(|
000089e0  62 69 74 73 25 3d 34 29  84 28 62 69 74 73 25 3d  |bits%=4).(bits%=|
000089f0  38 29 20 8b 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |8) . .error(-1,"|
00008a00  49 20 63 61 6e 20 6f 6e  6c 79 20 68 61 6e 64 6c  |I can only handl|
00008a10  65 20 54 49 46 46 20 69  6d 61 67 65 73 20 77 69  |e TIFF images wi|
00008a20  74 68 20 31 2c 32 2c 34  20 6f 72 20 38 20 62 69  |th 1,2,4 or 8 bi|
00008a30  74 73 20 70 65 72 20 70  69 78 65 6c 20 21 22 29  |ts per pixel !")|
00008a40  3a 3d a3 0d 1b d0 54 e7  70 6c 61 6e 61 72 25 3c  |:=....T.planar%<|
00008a50  3e 31 20 8c 20 f2 65 72  72 6f 72 28 2d 31 2c 22  |>1 . .error(-1,"|
00008a60  49 20 63 61 6e 6e 6f 74  20 68 61 6e 64 6c 65 20  |I cannot handle |
00008a70  54 49 46 46 20 69 6d 61  67 65 73 20 77 69 74 68  |TIFF images with|
00008a80  20 6d 75 6c 74 69 70 6c  65 20 70 6c 61 6e 65 73  | multiple planes|
00008a90  20 21 22 29 3a 3d a3 0d  1b da 67 e7 70 69 78 73  | !"):=....g.pixs|
00008aa0  61 6d 70 6c 65 73 25 3c  3e 31 20 8c 20 f2 65 72  |amples%<>1 . .er|
00008ab0  72 6f 72 28 2d 31 2c 22  49 20 63 61 6e 6e 6f 74  |ror(-1,"I cannot|
00008ac0  20 68 61 6e 64 6c 65 20  54 49 46 46 20 69 6d 61  | handle TIFF ima|
00008ad0  67 65 73 20 77 69 74 68  20 6d 6f 72 65 20 74 68  |ges with more th|
00008ae0  61 6e 20 6f 6e 65 20 73  61 6d 70 6c 65 20 70 65  |an one sample pe|
00008af0  72 20 70 69 78 65 6c 20  21 22 29 3a 3d a3 0d 1b  |r pixel !"):=...|
00008b00  e4 56 e7 49 6e 50 61 6c  25 28 30 29 3c 3e 30 20  |.V.InPal%(0)<>0 |
00008b10  8b 20 e7 70 68 6f 74 6f  6d 65 74 72 69 63 25 3d  |. .photometric%=|
00008b20  30 20 8c 20 f2 67 72 65  79 5f 70 61 6c 65 74 74  |0 . .grey_palett|
00008b30  65 28 62 69 74 73 25 2c  2d 31 29 20 8b 20 f2 67  |e(bits%,-1) . .g|
00008b40  72 65 79 5f 70 61 6c 65  74 74 65 28 62 69 74 73  |rey_palette(bits|
00008b50  25 2c 31 29 0d 1b ee 39  6d 6f 64 65 25 3d a4 6d  |%,1)...9mode%=.m|
00008b60  6f 64 65 28 77 69 64 74  68 25 2c 68 65 69 67 68  |ode(width%,heigh|
00008b70  74 25 2c 63 6f 6c 6f 75  72 73 25 29 3a f4 20 44  |t%,colours%):. D|
00008b80  65 74 65 72 6d 69 6e 65  20 6d 6f 64 65 0d 1b f8  |etermine mode...|
00008b90  2c e7 a4 6e 65 77 5f 69  6d 61 67 65 28 6d 6f 64  |,..new_image(mod|
00008ba0  65 25 2c 77 69 64 74 68  25 2c 68 65 69 67 68 74  |e%,width%,height|
00008bb0  25 2c 30 29 20 8b 20 3d  a3 0d 1c 02 38 e7 70 68  |%,0) . =....8.ph|
00008bc0  6f 74 6f 6d 65 74 72 69  63 25 3d 33 20 8c 20 63  |otometric%=3 . c|
00008bd0  6f 64 65 25 3d 30 20 8b  20 63 6f 64 65 25 3d 31  |ode%=0 . code%=1|
00008be0  3a f4 20 43 6f 6c 6f 75  72 20 6f 72 20 67 72 65  |:. Colour or gre|
00008bf0  79 0d 1c 0c 4a f2 69 6d  61 67 65 5f 69 6e 66 6f  |y...J.image_info|
00008c00  28 22 54 49 46 46 22 2c  77 69 64 74 68 25 2c 68  |("TIFF",width%,h|
00008c10  65 69 67 68 74 25 2c 63  6f 64 65 25 2c 62 69 74  |eight%,code%,bit|
00008c20  73 25 2c 6d 6f 64 65 25  2c 22 22 2c 22 22 2c 46  |s%,mode%,"","",F|
00008c30  6c 65 6e 25 2c 46 6c 65  6e 25 29 0d 1c 16 92 f2  |len%,Flen%).....|
00008c40  76 61 72 28 22 66 70 74  72 22 2c 30 29 3a f2 76  |var("fptr",0):.v|
00008c50  61 72 28 22 77 69 64 74  22 2c 77 69 64 74 68 25  |ar("widt",width%|
00008c60  29 3a f2 76 61 72 28 22  68 65 69 67 22 2c 68 65  |):.var("heig",he|
00008c70  69 67 68 74 25 29 3a f2  76 61 72 28 22 6d 61 70  |ight%):.var("map|
00008c80  31 22 2c 73 74 72 6f 66  66 29 3a f2 76 61 72 28  |1",stroff):.var(|
00008c90  22 72 6f 70 73 22 2c 72  6f 77 73 70 65 72 73 74  |"rops",rowsperst|
00008ca0  72 69 70 25 29 3a f2 76  61 72 28 22 62 69 74 6f  |rip%):.var("bito|
00008cb0  22 2c 66 69 6c 6c 6f 72  64 65 72 25 29 3a f2 75  |",fillorder%):.u|
00008cc0  6e 70 61 63 6b 28 22 54  49 46 46 22 29 0d 1c 20  |npack("TIFF").. |
00008cd0  15 49 6d 67 4d 6f 64 65  25 3d 6d 6f 64 65 25 3a  |.ImgMode%=mode%:|
00008ce0  3d b9 0d 1c 2a 05 20 0d  1c 34 11 dd a4 74 69 66  |=...*. ..4...tif|
00008cf0  66 28 74 79 70 65 25 29  0d 1c 3e 1c f4 20 52 65  |f(type%)..>.. Re|
00008d00  74 75 72 6e 73 20 74 69  66 66 20 64 61 74 61 20  |turns tiff data |
00008d10  74 79 70 65 0d 1c 48 0b  ea 20 69 24 2c 62 25 0d  |type..H.. i$,b%.|
00008d20  1c 52 0e c8 8e 20 74 79  70 65 25 20 ca 0d 1c 5c  |.R... type% ...\|
00008d30  12 20 c9 20 31 20 3a 20  3d a4 69 31 28 31 29 0d  |. . 1 : =.i1(1).|
00008d40  1c 66 3b 20 c9 20 32 20  3a 20 69 24 3d 22 22 3a  |.f; . 2 : i$="":|
00008d50  62 25 3d a4 69 31 28 31  29 3a c8 95 20 62 25 3c  |b%=.i1(1):.. b%<|
00008d60  3e 30 3a 69 24 2b 3d bd  62 25 3a 62 25 3d a4 69  |>0:i$+=.b%:b%=.i|
00008d70  31 28 31 29 3a ce 3a 3d  69 24 0d 1c 70 12 20 c9  |1(1):.:=i$..p. .|
00008d80  20 33 20 3a 20 3d a4 69  32 28 31 29 0d 1c 7a 12  | 3 : =.i2(1)..z.|
00008d90  20 c9 20 34 20 3a 20 3d  a4 69 34 28 31 29 0d 1c  | . 4 : =.i4(1)..|
00008da0  84 0d 20 c9 20 35 20 3a  20 3d 30 0d 1c 8e 05 cb  |.. . 5 : =0.....|
00008db0  0d 1c 98 06 3d 30 0d 1c  a2 05 20 0d 1c ac 0d dd  |....=0.... .....|
00008dc0  a4 70 69 63 5f 51 52 54  0d 1c b6 15 f4 20 4d 61  |.pic_QRT..... Ma|
00008dd0  6b 65 73 20 51 52 54 20  69 6d 61 67 65 0d 1c c0  |kes QRT image...|
00008de0  2b 69 54 79 70 65 25 3d  30 3a f4 20 53 65 74 20  |+iType%=0:. Set |
00008df0  6c 6f 77 2d 74 6f 2d 68  69 67 68 20 74 79 70 65  |low-to-high type|
00008e00  20 6f 66 20 64 61 74 61  0d 1c ca 32 77 69 64 74  | of data...2widt|
00008e10  68 25 3d a4 69 32 28 31  29 3a 68 65 69 67 68 74  |h%=.i2(1):height|
00008e20  25 3d a4 69 32 28 31 29  3a f4 20 52 65 61 64 20  |%=.i2(1):. Read |
00008e30  72 65 73 6f 6c 75 74 69  6f 6e 0d 1c d4 34 6d 6f  |resolution...4mo|
00008e40  64 65 25 3d a4 6d 6f 64  65 28 77 69 64 74 68 25  |de%=.mode(width%|
00008e50  2c 68 65 69 67 68 74 25  2c 32 35 36 29 3a f4 20  |,height%,256):. |
00008e60  44 65 74 65 72 6d 69 6e  65 20 6d 6f 64 65 0d 1c  |Determine mode..|
00008e70  de 2c e7 a4 6e 65 77 5f  69 6d 61 67 65 28 6d 6f  |.,..new_image(mo|
00008e80  64 65 25 2c 77 69 64 74  68 25 2c 68 65 69 67 68  |de%,width%,heigh|
00008e90  74 25 2c 30 29 20 8b 20  3d a3 0d 1c e8 2e 49 6e  |t%,0) . =.....In|
00008ea0  50 61 6c 25 28 30 29 3d  32 34 3a f4 20 4e 6f 20  |Pal%(0)=24:. No |
00008eb0  70 61 6c 65 74 74 65 2c  20 70 75 72 65 20 32 34  |palette, pure 24|
00008ec0  2d 62 69 74 20 52 47 42  0d 1c f2 46 f2 69 6d 61  |-bit RGB...F.ima|
00008ed0  67 65 5f 69 6e 66 6f 28  22 51 52 54 20 52 41 57  |ge_info("QRT RAW|
00008ee0  22 2c 77 69 64 74 68 25  2c 68 65 69 67 68 74 25  |",width%,height%|
00008ef0  2c 32 2c 32 34 2c 6d 6f  64 65 25 2c 22 22 2c 22  |,2,24,mode%,"","|
00008f00  22 2c 46 6c 65 6e 25 2c  46 6c 65 6e 25 29 0d 1c  |",Flen%,Flen%)..|
00008f10  fc 4a f2 76 61 72 28 22  66 70 74 72 22 2c 34 29  |.J.var("fptr",4)|
00008f20  3a f2 76 61 72 28 22 77  69 64 74 22 2c 77 69 64  |:.var("widt",wid|
00008f30  74 68 25 29 3a f2 76 61  72 28 22 68 65 69 67 22  |th%):.var("heig"|
00008f40  2c 68 65 69 67 68 74 25  29 3a f2 75 6e 70 61 63  |,height%):.unpac|
00008f50  6b 28 22 51 52 54 22 29  0d 1d 06 15 49 6d 67 4d  |k("QRT")....ImgM|
00008f60  6f 64 65 25 3d 6d 6f 64  65 25 3a 3d b9 0d 1d 10  |ode%=mode%:=....|
00008f70  05 20 0d 1d 1a 0f dd a4  70 69 63 5f 41 52 56 49  |. ......pic_ARVI|
00008f80  53 0d 1d 24 17 f4 20 4d  61 6b 65 73 20 41 72 56  |S..$.. Makes ArV|
00008f90  69 73 20 69 6d 61 67 65  0d 1d 2e 2b 69 54 79 70  |is image...+iTyp|
00008fa0  65 25 3d 30 3a f4 20 53  65 74 20 6c 6f 77 2d 74  |e%=0:. Set low-t|
00008fb0  6f 2d 68 69 67 68 20 74  79 70 65 20 6f 66 20 64  |o-high type of d|
00008fc0  61 74 61 0d 1d 38 67 f2  69 70 74 72 28 31 2c 34  |ata..8g.iptr(1,4|
00008fd0  29 3a f2 69 70 74 72 28  31 2c a4 2c a4 2c 31 29  |):.iptr(1,.,.,1)|
00008fe0  2d 34 29 3a f2 69 73 6b  69 70 28 31 2c 31 36 29  |-4):.iskip(1,16)|
00008ff0  3a 77 69 64 74 68 25 3d  a4 69 34 28 31 29 2a 34  |:width%=.i4(1)*4|
00009000  2b 34 3a 68 65 69 67 68  74 25 3d a4 68 65 69 67  |+4:height%=.heig|
00009010  68 74 25 3d a4 68 31 29  2b 31 3a f4 20 47 65 74  |ht%=.h1)+1:. Get|
00009020  20 77 69 64 74 68 20 61  6e 64 20 68 65 69 67 68  | width and heigh|
00009030  74 0d 1d 42 75 f2 69 73  6b 69 70 28 31 2c 38 29  |t..Bu.iskip(1,8)|
00009040  3a f2 69 73 6b 69 70 28  31 2c a4 2c a4 2c 31 29  |:.iskip(1,.,.,1)|
00009050  2d 33 36 29 3a f2 69 70  74 72 28 32 2c 34 29 3a  |-36):.iptr(2,4):|
00009060  f2 69 70 74 72 28 32 2c  a4 2c a4 2c 32 29 2d 34  |.iptr(2,.,.,2)-4|
00009070  29 3a f2 69 73 6b 69 70  28 32 2c 33 32 29 3a f2  |):.iskip(2,32):.|
00009080  69 73 6b 69 70 28 32 2c  a4 2c a4 2c 32 29 2d 33  |iskip(2,.,.,2)-3|
00009090  36 29 3a f4 20 47 6f 20  74 6f 20 73 70 72 69 74  |6):. Go to sprit|
000090a0  65 20 64 61 74 61 0d 1d  4c 2d 63 6f 6c 62 69 74  |e data..L-colbit|
000090b0  73 25 3d 31 35 3a 63 6f  6c 6f 75 72 73 25 3d 32  |s%=15:colours%=2|
000090c0  5e 63 6f 6c 62 69 74 73  25 3a f4 20 43 6f 6c 6f  |^colbits%:. Colo|
000090d0  75 72 73 0d 1d 56 34 6d  6f 64 65 25 3d a4 6d 6f  |urs..V4mode%=.mo|
000090e0  64 65 28 77 69 64 74 68  25 2c 68 65 69 67 68 74  |de(width%,height|
000090f0  25 2c 32 35 36 29 3a f4  20 44 65 74 65 72 6d 69  |%,256):. Determi|
00009100  6e 65 20 6d 6f 64 65 0d  1d 60 2c e7 a4 6e 65 77  |ne mode..`,..new|
00009110  5f 69 6d 61 67 65 28 6d  6f 64 65 25 2c 77 69 64  |_image(mode%,wid|
00009120  74 68 25 2c 68 65 69 67  68 74 25 2c 30 29 20 8b  |th%,height%,0) .|
00009130  20 3d a3 0d 1d 6a 2e 49  6e 50 61 6c 25 28 30 29  | =...j.InPal%(0)|
00009140  3d 31 35 3a f4 20 4e 6f  20 70 61 6c 65 74 74 65  |=15:. No palette|
00009150  2c 20 70 75 72 65 20 31  35 2d 62 69 74 20 52 47  |, pure 15-bit RG|
00009160  42 0d 1d 74 44 f2 69 6d  61 67 65 5f 69 6e 66 6f  |B..tD.image_info|
00009170  28 22 41 72 56 69 73 22  2c 77 69 64 74 68 25 2c  |("ArVis",width%,|
00009180  68 65 69 67 68 74 25 2c  32 2c 31 35 2c 6d 6f 64  |height%,2,15,mod|
00009190  65 25 2c 22 22 2c 22 22  2c 46 6c 65 6e 25 2c 46  |e%,"","",Flen%,F|
000091a0  6c 65 6e 25 29 0d 1d 7e  69 f2 76 61 72 28 22 66  |len%)..~i.var("f|
000091b0  70 74 72 22 2c a4 69 70  74 72 28 31 29 29 3a f2  |ptr",.iptr(1)):.|
000091c0  76 61 72 28 22 66 70 74  32 22 2c a4 69 70 74 72  |var("fpt2",.iptr|
000091d0  28 32 29 29 3a f2 76 61  72 28 22 77 69 64 74 22  |(2)):.var("widt"|
000091e0  2c 77 69 64 74 68 25 29  3a f2 76 61 72 28 22 68  |,width%):.var("h|
000091f0  65 69 67 22 2c 68 65 69  67 68 74 25 29 3a f2 75  |eig",height%):.u|
00009200  6e 70 61 63 6b 28 22 41  52 56 49 53 22 29 0d 1d  |npack("ARVIS")..|
00009210  88 15 49 6d 67 4d 6f 64  65 25 3d 6d 6f 64 65 25  |..ImgMode%=mode%|
00009220  3a 3d b9 0d 1d 92 05 20  0d 1d 9c 0f dd a4 70 69  |:=..... ......pi|
00009230  63 5f 43 4c 45 41 52 0d  1d a6 17 f4 20 4d 61 6b  |c_CLEAR..... Mak|
00009240  65 73 20 43 6c 65 61 72  20 69 6d 61 67 65 0d 1d  |es Clear image..|
00009250  b0 2b 69 54 79 70 65 25  3d 30 3a f4 20 53 65 74  |.+iType%=0:. Set|
00009260  20 6c 6f 77 2d 74 6f 2d  68 69 67 68 20 74 79 70  | low-to-high typ|
00009270  65 20 6f 66 20 64 61 74  61 0d 1d ba 3f 6d 61 6b  |e of data...?mak|
00009280  65 72 24 3d a4 69 73 74  72 69 6e 67 28 31 2c 2d  |er$=.istring(1,-|
00009290  31 29 3a 76 65 72 73 69  6f 6e 25 3d a4 69 34 28  |1):version%=.i4(|
000092a0  31 29 3a f4 20 43 72 65  61 74 6f 72 20 69 6e 66  |1):. Creator inf|
000092b0  6f 72 6d 61 74 69 6f 6e  0d 1d c4 42 77 69 64 74  |ormation...Bwidt|
000092c0  68 25 3d a4 69 34 28 31  29 3a 68 65 69 67 68 74  |h%=.i4(1):height|
000092d0  25 3d a4 68 65 69 67 68  74 25 3d a4 68 31 29 3a  |%=.height%=.h1):|
000092e0  62 69 74 73 25 3d a4 69  34 28 31 29 3a f4 20 57  |bits%=.i4(1):. W|
000092f0  69 64 74 68 2c 20 68 65  69 67 68 74 2c 20 62 70  |idth, height, bp|
00009300  70 0d 1d ce 7e e7 62 69  74 73 25 3c 3d 38 20 8c  |p...~.bits%<=8 .|
00009310  20 63 6f 6c 62 69 74 73  25 3d 62 69 74 73 25 3a  | colbits%=bits%:|
00009320  e3 20 63 25 3d 31 20 b8  20 32 5e 62 69 74 73 25  |. c%=1 . 2^bits%|
00009330  3a 72 67 62 25 3d a4 69  33 28 31 29 3a 49 6e 50  |:rgb%=.i3(1):InP|
00009340  61 6c 25 28 63 25 29 3d  28 72 67 62 25 80 26 46  |al%(c%)=(rgb%.&F|
00009350  46 30 30 29 2b 28 72 67  62 25 3e 3e 31 36 29 2b  |F00)+(rgb%>>16)+|
00009360  28 28 72 67 62 25 80 26  46 46 29 3c 3c 31 36 29  |((rgb%.&FF)<<16)|
00009370  3a ed 20 8b 20 63 6f 6c  62 69 74 73 25 3d 38 0d  |:. . colbits%=8.|
00009380  1d d8 24 49 6e 50 61 6c  25 28 30 29 3d 62 69 74  |..$InPal%(0)=bit|
00009390  73 25 3a f4 20 42 69 74  73 20 70 65 72 20 70 69  |s%:. Bits per pi|
000093a0  78 65 6c 0d 1d e2 3b 6d  6f 64 65 25 3d a4 6d 6f  |xel...;mode%=.mo|
000093b0  64 65 28 77 69 64 74 68  25 2c 68 65 69 67 68 74  |de(width%,height|
000093c0  25 2c 32 5e 63 6f 6c 62  69 74 73 25 29 3a f4 20  |%,2^colbits%):. |
000093d0  44 65 74 65 72 6d 69 6e  65 20 6d 6f 64 65 0d 1d  |Determine mode..|
000093e0  ec 2c e7 a4 6e 65 77 5f  69 6d 61 67 65 28 6d 6f  |.,..new_image(mo|
000093f0  64 65 25 2c 77 69 64 74  68 25 2c 68 65 69 67 68  |de%,width%,heigh|
00009400  74 25 2c 30 29 20 8b 20  3d a3 0d 1d f6 85 f2 69  |t%,0) . =......i|
00009410  6d 61 67 65 5f 69 6e 66  6f 28 22 43 6c 65 61 72  |mage_info("Clear|
00009420  22 2c 77 69 64 74 68 25  2c 68 65 69 67 68 74 25  |",width%,height%|
00009430  2c 63 6f 64 65 25 2c 62  69 74 73 25 2c 6d 6f 64  |,code%,bits%,mod|
00009440  65 25 2c 22 22 2c 22 62  79 20 22 2b 6d 61 6b 65  |e%,"","by "+make|
00009450  72 24 2b 22 20 22 2b c3  28 76 65 72 73 69 6f 6e  |r$+" "+.(version|
00009460  25 81 31 30 30 29 2b 22  2e 22 2b c2 22 30 22 2b  |%.100)+"."+."0"+|
00009470  c3 28 76 65 72 73 69 6f  6e 25 83 31 30 30 29 2c  |.(version%.100),|
00009480  32 29 2c 46 6c 65 6e 25  2c 46 6c 65 6e 25 29 0d  |2),Flen%,Flen%).|
00009490  1e 00 53 f2 76 61 72 28  22 66 70 74 72 22 2c a4  |..S.var("fptr",.|
000094a0  69 70 74 72 28 31 29 29  3a f2 76 61 72 28 22 77  |iptr(1)):.var("w|
000094b0  69 64 74 22 2c 77 69 64  74 68 25 29 3a f2 76 61  |idt",width%):.va|
000094c0  72 28 22 68 65 69 67 22  2c 68 65 69 67 68 74 25  |r("heig",height%|
000094d0  29 3a f2 75 6e 70 61 63  6b 28 22 43 4c 45 41 52  |):.unpack("CLEAR|
000094e0  22 29 0d 1e 0a 15 49 6d  67 4d 6f 64 65 25 3d 6d  |")....ImgMode%=m|
000094f0  6f 64 65 25 3a 3d b9 0d  1e 14 05 20 0d 1e 1e 59  |ode%:=..... ...Y|
00009500  dd f2 69 6d 61 67 65 5f  69 6e 66 6f 28 74 79 70  |..image_info(typ|
00009510  65 24 2c 77 69 64 74 68  25 2c 68 65 69 67 68 74  |e$,width%,height|
00009520  25 2c 63 6f 64 65 25 2c  63 6f 6c 62 69 74 73 25  |%,code%,colbits%|
00009530  2c 6d 6f 64 65 25 2c 63  6f 6d 70 72 24 2c 69 6e  |,mode%,compr$,in|
00009540  66 6f 24 2c 64 61 74 61  6c 65 6e 25 2c 70 69 63  |fo$,datalen%,pic|
00009550  6c 65 6e 25 29 0d 1e 28  26 f4 20 53 65 74 73 20  |len%)..(&. Sets |
00009560  69 6e 66 6f 72 6d 61 74  69 6f 6e 20 61 62 6f 75  |information abou|
00009570  74 20 74 68 65 20 69 6d  61 67 65 0d 1e 32 1d ea  |t the image..2..|
00009580  20 66 61 63 74 6f 72 25  2c 77 25 2c 68 25 2c 63  | factor%,w%,h%,c|
00009590  25 2c 69 25 2c 69 64 24  0d 1e 3c 46 49 6d 67 57  |%,i%,id$..<FImgW|
000095a0  25 3d 77 69 64 74 68 25  3a 49 6d 67 48 25 3d 68  |%=width%:ImgH%=h|
000095b0  65 69 67 68 74 25 3a 49  6d 67 42 69 74 73 25 3d  |eight%:ImgBits%=|
000095c0  63 6f 6c 62 69 74 73 25  3a f4 20 52 65 67 69 73  |colbits%:. Regis|
000095d0  74 65 72 20 72 65 73 6f  6c 75 74 69 6f 6e 0d 1e  |ter resolution..|
000095e0  46 1f 24 49 4d 49 66 6e  25 3d 4c 65 61 66 24 3a  |F.$IMIfn%=Leaf$:|
000095f0  24 49 4d 49 69 74 25 3d  74 79 70 65 24 0d 1e 50  |$IMIit%=type$..P|
00009600  2b e7 69 6e 66 6f 24 3d  22 22 20 8c 20 24 49 4d  |+.info$="" . $IM|
00009610  49 69 6e 25 3d 22 2d 22  20 8b 20 24 49 4d 49 69  |Iin%="-" . $IMIi|
00009620  6e 25 3d 69 6e 66 6f 24  0d 1e 5a 1b 24 49 4d 49  |n%=info$..Z.$IMI|
00009630  69 66 25 3d c3 46 6c 65  6e 25 2b 22 20 62 79 74  |if%=.Flen%+" byt|
00009640  65 73 22 0d 1e 64 6e e7  63 6f 6d 70 72 24 3d 22  |es"..dn.compr$="|
00009650  22 20 8c 20 24 49 4d 49  63 6f 25 3d 22 4e 6f 6e  |" . $IMIco%="Non|
00009660  65 20 28 30 25 29 22 20  8b 20 66 61 63 74 6f 72  |e (0%)" . factor|
00009670  25 3d 31 30 30 2d a8 28  31 30 30 2a 28 64 61 74  |%=100-.(100*(dat|
00009680  61 6c 65 6e 25 2f 70 69  63 6c 65 6e 25 29 29 3a  |alen%/piclen%)):|
00009690  24 49 4d 49 63 6f 25 3d  63 6f 6d 70 72 24 2b 22  |$IMIco%=compr$+"|
000096a0  20 28 22 2b c3 66 61 63  74 6f 72 25 2b 22 25 29  | ("+.factor%+"%)|
000096b0  22 0d 1e 6e 2c 24 49 4d  49 77 68 25 3d c3 77 69  |"..n,$IMIwh%=.wi|
000096c0  64 74 68 25 2b 22 20 78  20 22 2b c3 68 65 69 67  |dth%+" x "+.heig|
000096d0  68 74 25 2b 22 20 70 69  78 65 6c 73 22 0d 1e 78  |ht%+" pixels"..x|
000096e0  5d e7 28 77 69 64 74 68  25 3e 53 70 72 57 25 29  |].(width%>SprW%)|
000096f0  84 28 68 65 69 67 68 74  25 3e 53 70 72 48 25 29  |.(height%>SprH%)|
00009700  20 8c 20 24 49 4d 49 73  63 25 3d 22 74 6f 20 22  | . $IMIsc%="to "|
00009710  2b c3 53 70 72 57 25 2b  22 20 78 20 22 2b c3 53  |+.SprW%+" x "+.S|
00009720  70 72 48 25 20 8b 20 24  49 4d 49 73 63 25 3d 22  |prH% . $IMIsc%="|
00009730  46 75 6c 6c 20 73 69 7a  65 22 0d 1e 82 43 24 49  |Full size"...C$I|
00009740  4d 49 62 70 25 3d c3 28  63 6f 6c 62 69 74 73 25  |MIbp%=.(colbits%|
00009750  29 2b 22 2d 62 69 74 20  22 2b c1 22 63 6f 6c 6f  |)+"-bit "+."colo|
00009760  75 72 20 20 67 72 65 79  20 20 20 20 52 47 42 22  |ur  grey    RGB"|
00009770  2c 31 2b 63 6f 64 65 25  2a 38 2c 38 29 0d 1e 8c  |,1+code%*8,8)...|
00009780  4a f2 6d 6f 64 65 5f 69  6e 66 6f 28 6d 6f 64 65  |J.mode_info(mode|
00009790  25 2c 77 25 2c 68 25 2c  63 25 29 3a 24 49 4d 49  |%,w%,h%,c%):$IMI|
000097a0  73 6d 25 3d c3 6d 6f 64  65 25 2b 22 20 28 22 2b  |sm%=.mode%+" ("+|
000097b0  c3 77 25 2b 22 78 22 2b  c3 68 25 2b 22 78 22 2b  |.w%+"x"+.h%+"x"+|
000097c0  c3 63 25 2b 22 29 22 0d  1e 96 05 e1 0d 1e a0 05  |.c%+")".........|
000097d0  20 0d 1e aa 16 dd f2 6e  65 77 5f 69 6d 61 67 65  | ......new_image|
000097e0  5f 77 69 6e 64 6f 77 0d  1e b4 41 f4 20 43 72 65  |_window...A. Cre|
000097f0  61 74 65 73 20 6e 65 77  20 69 6d 61 67 65 20 77  |ates new image w|
00009800  69 6e 64 6f 77 20 6f 66  20 61 70 70 72 6f 70 69  |indow of appropi|
00009810  61 74 65 20 73 69 7a 65  20 69 6e 20 63 75 72 72  |ate size in curr|
00009820  65 6e 74 20 6d 6f 64 65  0d 1e be 08 ea 20 77 25  |ent mode..... w%|
00009830  0d 1e c8 24 f2 61 75 74  6f 7a 6f 6f 6d 3a f4 20  |...$.autozoom:. |
00009840  41 75 74 6f 20 7a 6f 6f  6d 20 69 66 20 65 6e 61  |Auto zoom if ena|
00009850  62 6c 65 64 0d 1e d2 3f  21 62 6c 6f 63 6b 3d 77  |bled...?!block=w|
00009860  69 6e 5f 69 6d 67 25 3a  c8 99 20 57 44 65 6c 65  |in_img%:.. WDele|
00009870  74 65 57 25 2c 2c 62 6c  6f 63 6b 3a f4 20 44 65  |teW%,,block:. De|
00009880  6c 65 74 65 20 6f 6c 64  20 64 65 66 69 6e 69 74  |lete old definit|
00009890  69 6f 6e 0d 1e dc 91 77  25 3d 77 69 6e 64 6f 77  |ion....w%=window|
000098a0  31 3a 21 77 25 3d 30 3a  77 25 21 34 3d 30 3a 77  |1:!w%=0:w%!4=0:w|
000098b0  25 21 38 3d a4 73 70 72  57 3a 77 25 21 31 32 3d  |%!8=.sprW:w%!12=|
000098c0  a4 73 70 72 48 3a 77 25  21 32 30 3d a4 73 70 72  |.sprH:w%!20=.spr|
000098d0  48 3a 77 25 21 34 30 3d  30 3a 77 25 21 34 34 3d  |H:w%!40=0:w%!44=|
000098e0  30 3a 77 25 21 34 38 3d  a4 73 70 72 57 2a 5a 6f  |0:w%!48=.sprW*Zo|
000098f0  6f 6d 58 3a 77 25 21 35  32 3d a4 73 70 72 48 2a  |omX:w%!52=.sprH*|
00009900  5a 6f 6f 6d 59 3a 24 49  4d 57 74 74 25 3d a4 69  |ZoomY:$IMWtt%=.i|
00009910  6d 61 67 65 5f 74 69 74  6c 65 3a f4 20 52 65 77  |mage_title:. Rew|
00009920  72 69 74 65 0d 1e e6 38  c8 99 20 57 43 72 65 61  |rite...8.. WCrea|
00009930  74 65 57 25 2c 2c 77 69  6e 64 6f 77 31 20 b8 20  |teW%,,window1 . |
00009940  77 69 6e 5f 69 6d 67 25  3a f4 20 43 72 65 61 74  |win_img%:. Creat|
00009950  65 20 6e 65 77 20 77 69  6e 64 6f 77 0d 1e f0 23  |e new window...#|
00009960  e7 49 6d 67 20 8c 20 f2  6f 70 65 6e 5f 77 69 6e  |.Img . .open_win|
00009970  64 6f 77 28 77 69 6e 5f  69 6d 67 25 2c 30 29 0d  |dow(win_img%,0).|
00009980  1e fa 05 e1 0d 1f 04 05  20 0d 1f 0e 11 dd a4 69  |........ ......i|
00009990  6d 61 67 65 5f 74 69 74  6c 65 0d 1f 18 3a f4 20  |mage_title...:. |
000099a0  52 65 74 75 72 6e 73 20  69 6d 61 67 65 20 77 69  |Returns image wi|
000099b0  6e 64 6f 77 20 74 69 74  6c 65 20 64 65 70 65 6e  |ndow title depen|
000099c0  64 69 6e 67 20 6f 6e 20  7a 6f 6f 6d 20 66 61 63  |ding on zoom fac|
000099d0  74 6f 72 73 0d 1f 22 0c  ea 20 74 69 74 6c 65 24  |tors..".. title$|
000099e0  0d 1f 2c 19 74 69 74 6c  65 24 3d 22 49 6d 61 67  |..,.title$="Imag|
000099f0  65 22 3a f4 20 42 61 73  65 0d 1f 36 4b e7 5a 6f  |e":. Base..6K.Zo|
00009a00  6f 6d 58 3c 31 20 8c 20  74 69 74 6c 65 24 2b 3d  |omX<1 . title$+=|
00009a10  22 20 78 2f 22 2b c3 28  31 2f 5a 6f 6f 6d 58 29  |" x/"+.(1/ZoomX)|
00009a20  20 8b 20 e7 5a 6f 6f 6d  58 3e 31 20 8c 20 74 69  | . .ZoomX>1 . ti|
00009a30  74 6c 65 24 2b 3d 22 20  78 2a 22 2b c3 28 5a 6f  |tle$+=" x*"+.(Zo|
00009a40  6f 6d 58 29 0d 1f 40 4b  e7 5a 6f 6f 6d 59 3c 31  |omX)..@K.ZoomY<1|
00009a50  20 8c 20 74 69 74 6c 65  24 2b 3d 22 20 79 2f 22  | . title$+=" y/"|
00009a60  2b c3 28 31 2f 5a 6f 6f  6d 59 29 20 8b 20 e7 5a  |+.(1/ZoomY) . .Z|
00009a70  6f 6f 6d 59 3e 31 20 8c  20 74 69 74 6c 65 24 2b  |oomY>1 . title$+|
00009a80  3d 22 20 79 2a 22 2b c3  28 5a 6f 6f 6d 59 29 0d  |=" y*"+.(ZoomY).|
00009a90  1f 4a 15 3d 74 69 74 6c  65 24 2b 22 20 22 2b 4c  |.J.=title$+" "+L|
00009aa0  6f 61 64 24 0d 1f 54 05  20 0d 1f 5e 28 dd a4 6e  |oad$..T. ..^(..n|
00009ab0  65 77 5f 69 6d 61 67 65  28 6d 6f 64 65 25 2c 78  |ew_image(mode%,x|
00009ac0  72 65 73 25 2c 79 72 65  73 25 2c 72 6f 6f 6d 25  |res%,yres%,room%|
00009ad0  29 0d 1f 68 41 f4 20 43  72 65 61 74 65 73 20 72  |)..hA. Creates r|
00009ae0  6f 6f 6d 20 66 6f 72 20  70 69 63 74 75 72 65 20  |oom for picture |
00009af0  73 70 72 69 74 65 20 6f  66 20 73 70 65 63 69 66  |sprite of specif|
00009b00  69 63 20 72 65 73 6f 6c  75 74 69 6f 6e 2f 6d 6f  |ic resolution/mo|
00009b10  64 65 0d 1f 72 47 f4 20  61 6e 64 20 70 61 72 74  |de..rG. and part|
00009b20  69 74 69 6f 6e 73 20 6d  65 6d 6f 72 79 20 28 61  |itions memory (a|
00009b30  74 20 6c 65 61 73 74 20  72 6f 6f 6d 25 20 66 72  |t least room% fr|
00009b40  6f 6d 20 73 70 72 69 74  65 20 73 74 61 72 74 20  |om sprite start |
00009b50  74 6f 20 6c 6f 6d 65 6d  29 0d 1f 7c 2d f4 20 52  |to lomem)..|-. R|
00009b60  65 74 75 72 6e 73 20 54  52 55 45 20 69 66 20 61  |eturns TRUE if a|
00009b70  6c 6c 20 69 73 20 77 65  6c 6c 2c 20 65 6c 73 65  |ll is well, else|
00009b80  20 46 41 4c 53 45 0d 1f  86 38 ea 20 62 69 74 73  | FALSE...8. bits|
00009b90  25 2c 77 6f 72 64 73 25  2c 65 6e 64 25 2c 73 69  |%,words%,end%,si|
00009ba0  7a 65 25 2c 63 6f 6c 62  69 74 73 25 2c 73 70 72  |ze%,colbits%,spr|
00009bb0  64 6f 66 66 25 2c 73 70  72 66 6f 66 66 25 0d 1f  |doff%,sprfoff%..|
00009bc0  90 3a 79 72 65 73 25 3d  79 72 65 73 25 2a 28 59  |.:yres%=yres%*(Y|
00009bd0  4d 75 6c 25 2f 59 44 69  76 25 29 3a f4 20 41 70  |Mul%/YDiv%):. Ap|
00009be0  70 6c 79 20 73 63 61 6c  69 6e 67 20 66 61 63 74  |ply scaling fact|
00009bf0  6f 72 20 66 6f 72 20 59  0d 1f 9a 3a 78 72 65 73  |or for Y...:xres|
00009c00  25 3d 78 72 65 73 25 2a  28 58 4d 75 6c 25 2f 58  |%=xres%*(XMul%/X|
00009c10  44 69 76 25 29 3a f4 20  41 70 70 6c 79 20 73 63  |Div%):. Apply sc|
00009c20  61 6c 69 6e 67 20 66 61  63 74 6f 72 20 66 6f 72  |aling factor for|
00009c30  20 58 0d 1f a4 60 e7 28  79 72 65 73 25 3c 3d 30  | X...`.(yres%<=0|
00009c40  29 84 28 78 72 65 73 25  3c 3d 30 29 20 8c 20 f2  |).(xres%<=0) . .|
00009c50  65 72 72 6f 72 28 2d 31  2c 22 54 68 65 72 65 20  |error(-1,"There |
00009c60  61 72 65 20 6e 6f 20 70  69 78 65 6c 73 20 6c 65  |are no pixels le|
00009c70  66 74 20 77 69 74 68 20  74 68 65 20 63 75 72 72  |ft with the curr|
00009c80  65 6e 74 20 73 63 61 6c  69 6e 67 20 21 22 29 3a  |ent scaling !"):|
00009c90  3d a3 0d 1f ae 32 63 6f  6c 62 69 74 73 25 3d 32  |=....2colbits%=2|
00009ca0  5e a4 6d 6f 64 65 5f 76  61 72 28 6d 6f 64 65 25  |^.mode_var(mode%|
00009cb0  2c 39 29 3a f4 20 42 69  74 73 20 70 65 72 20 70  |,9):. Bits per p|
00009cc0  69 78 65 6c 0d 1f b8 3f  62 69 74 73 25 3d 78 72  |ixel...?bits%=xr|
00009cd0  65 73 25 2a 63 6f 6c 62  69 74 73 25 3a 62 69 74  |es%*colbits%:bit|
00009ce0  73 72 6f 74 25 3d 79 72  65 73 25 2a 63 6f 6c 62  |srot%=yres%*colb|
00009cf0  69 74 73 25 3a f4 20 42  69 74 73 20 70 65 72 20  |its%:. Bits per |
00009d00  72 6f 77 0d 1f c2 43 77  6f 72 64 73 25 3d 28 62  |row...Cwords%=(b|
00009d10  69 74 73 25 2b 33 31 29  3e 3e 35 3a 77 6f 72 64  |its%+31)>>5:word|
00009d20  73 72 6f 74 25 3d 28 62  69 74 73 72 6f 74 25 2b  |srot%=(bitsrot%+|
00009d30  33 31 29 3e 3e 35 3a f4  20 57 6f 72 64 73 20 70  |31)>>5:. Words p|
00009d40  65 72 20 72 6f 77 0d 1f  cc 2c 73 70 72 64 6f 66  |er row...,sprdof|
00009d50  66 25 3d 34 34 3a 73 70  72 66 6f 66 66 25 3d 53  |f%=44:sprfoff%=S|
00009d60  70 72 69 74 65 25 21 38  3a f4 20 4f 66 66 73 65  |prite%!8:. Offse|
00009d70  74 73 0d 1f d6 29 73 70  74 72 25 3d 53 70 72 69  |ts...)sptr%=Spri|
00009d80  74 65 25 2b 73 70 72 66  6f 66 66 25 3a f4 20 53  |te%+sprfoff%:. S|
00009d90  70 72 69 74 65 20 73 74  61 72 74 0d 1f e0 46 73  |prite start...Fs|
00009da0  69 7a 65 75 70 25 3d 77  6f 72 64 73 25 2a 79 72  |izeup%=words%*yr|
00009db0  65 73 25 3c 3c 32 3a 73  69 7a 65 72 6f 74 25 3d  |es%<<2:sizerot%=|
00009dc0  77 6f 72 64 73 72 6f 74  25 2a 78 72 65 73 25 3c  |wordsrot%*xres%<|
00009dd0  3c 32 3a f4 20 53 70 72  69 74 65 20 73 69 7a 65  |<2:. Sprite size|
00009de0  73 0d 1f ea 4b 64 61 74  61 73 69 7a 65 25 3d a4  |s...Kdatasize%=.|
00009df0  6d 61 78 28 73 69 7a 65  75 70 25 2c 73 69 7a 65  |max(sizeup%,size|
00009e00  72 6f 74 25 29 3a f4 20  4d 61 78 69 6d 75 6d 20  |rot%):. Maximum |
00009e10  73 70 72 69 74 65 20 73  69 7a 65 20 28 6e 6f 72  |sprite size (nor|
00009e20  6d 61 6c 2f 72 6f 74 61  74 65 64 29 0d 1f f4 38  |mal/rotated)...8|
00009e30  64 61 74 61 73 69 7a 65  25 3d a4 6d 61 78 28 64  |datasize%=.max(d|
00009e40  61 74 61 73 69 7a 65 25  2c 72 6f 6f 6d 25 29 3a  |atasize%,room%):|
00009e50  f4 20 4d 6f 72 65 20 72  6f 6f 6d 20 6e 65 65 64  |. More room need|
00009e60  65 64 20 3f 0d 1f fe 46  65 6e 64 25 3d 73 70 74  |ed ?...Fend%=spt|
00009e70  72 25 2b 73 70 72 64 6f  66 66 25 2b 64 61 74 61  |r%+sprdoff%+data|
00009e80  73 69 7a 65 25 3a f4 20  41 64 64 72 65 73 73 20  |size%:. Address |
00009e90  6f 66 20 66 69 72 73 74  20 62 79 74 65 20 61 66  |of first byte af|
00009ea0  74 65 72 20 73 70 72 69  74 65 0d 20 08 84 e7 28  |ter sprite. ...(|
00009eb0  65 6e 64 25 2b 31 30 32  34 29 3e 48 69 6d 65 6d  |end%+1024)>Himem|
00009ec0  25 20 8c 20 f2 65 72 72  6f 72 28 2d 31 2c 22 49  |% . .error(-1,"I|
00009ed0  20 63 61 6e 6e 6f 74 20  68 61 6e 64 6c 65 20 74  | cannot handle t|
00009ee0  68 69 73 20 69 6d 61 67  65 2e 20 49 20 6e 65 65  |his image. I nee|
00009ef0  64 20 61 62 6f 75 74 20  22 2b c3 28 28 65 6e 64  |d about "+.((end|
00009f00  25 2b 31 30 32 34 2d 48  69 6d 65 6d 25 2b 31 30  |%+1024-Himem%+10|
00009f10  32 33 29 81 31 30 32 34  29 2b 22 4b 20 6d 6f 72  |23).1024)+"K mor|
00009f20  65 20 6d 65 6d 6f 72 79  2e 22 29 3a 3d a3 0d 20  |e memory."):=.. |
00009f30  12 34 73 70 74 72 25 21  30 3d 73 70 72 64 6f 66  |.4sptr%!0=sprdof|
00009f40  66 25 2b 73 69 7a 65 75  70 25 3a f4 20 4f 66 66  |f%+sizeup%:. Off|
00009f50  73 65 74 20 74 6f 20 6e  65 78 74 20 73 70 72 69  |set to next spri|
00009f60  74 65 0d 20 1c 2c f2 73  70 72 69 74 65 5f 68 65  |te. .,.sprite_he|
00009f70  61 64 65 72 28 31 29 3a  f4 20 55 70 64 61 74 65  |ader(1):. Update|
00009f80  20 73 70 72 69 74 65 20  68 65 61 64 65 72 0d 20  | sprite header. |
00009f90  26 30 24 28 73 70 74 72  25 2b 34 29 3d 49 6d 61  |&0$(sptr%+4)=Ima|
00009fa0  67 65 53 70 72 24 2b c4  31 32 2c bd 30 29 3a f4  |geSpr$+.12,.0):.|
00009fb0  20 53 70 72 69 74 65 27  73 20 6e 61 6d 65 0d 20  | Sprite's name. |
00009fc0  30 28 73 70 74 72 25 21  31 36 3d 77 6f 72 64 73  |0(sptr%!16=words|
00009fd0  25 2d 31 3a f4 20 57 69  64 74 68 20 69 6e 20 77  |%-1:. Width in w|
00009fe0  6f 72 64 73 2d 31 0d 20  3a 2c 73 70 74 72 25 21  |ords-1. :,sptr%!|
00009ff0  32 30 3d 79 72 65 73 25  2d 31 3a f4 20 48 65 69  |20=yres%-1:. Hei|
0000a000  67 68 74 20 69 6e 20 73  63 61 6e 6c 69 6e 65 73  |ght in scanlines|
0000a010  2d 31 0d 20 44 3d 73 70  74 72 25 21 32 34 3d 30  |-1. D=sptr%!24=0|
0000a020  3a 73 70 74 72 25 21 32  38 3d 33 31 2d 28 77 6f  |:sptr%!28=31-(wo|
0000a030  72 64 73 25 2a 33 32 2d  62 69 74 73 25 29 3a f4  |rds%*32-bits%):.|
0000a040  20 53 74 61 72 74 2f 65  6e 64 20 62 69 74 73 0d  | Start/end bits.|
0000a050  20 4e 44 73 70 74 72 25  21 33 32 3d 73 70 72 64  | NDsptr%!32=sprd|
0000a060  6f 66 66 25 3a 73 70 74  72 25 21 33 36 3d 73 70  |off%:sptr%!36=sp|
0000a070  74 72 25 21 33 32 3a f4  20 4f 66 66 73 65 74 20  |tr%!32:. Offset |
0000a080  74 6f 20 73 70 72 69 74  65 20 64 61 74 61 2f 6d  |to sprite data/m|
0000a090  61 73 6b 0d 20 58 23 73  70 74 72 25 21 34 30 3d  |ask. X#sptr%!40=|
0000a0a0  6d 6f 64 65 25 3a f4 20  4d 6f 64 65 20 6f 66 20  |mode%:. Mode of |
0000a0b0  73 70 72 69 74 65 0d 20  62 48 c8 99 20 22 54 72  |sprite. bH.. "Tr|
0000a0c0  61 6e 73 6c 61 74 6f 72  5f 57 72 69 74 65 57 6f  |anslator_WriteWo|
0000a0d0  72 64 73 22 2c 73 70 74  72 25 2b 73 70 72 64 6f  |rds",sptr%+sprdo|
0000a0e0  66 66 25 2c 30 2c 73 69  7a 65 75 70 25 3e 3e 32  |ff%,0,sizeup%>>2|
0000a0f0  3a f4 20 57 69 70 65 20  73 70 72 69 74 65 0d 20  |:. Wipe sprite. |
0000a100  6c 34 4c 6f 6d 65 6d 25  3d 65 6e 64 25 3a f4 20  |l4Lomem%=end%:. |
0000a110  45 6e 64 20 6f 66 20 73  70 72 69 74 65 2c 20 73  |End of sprite, s|
0000a120  74 61 72 74 20 6f 66 20  66 72 65 65 20 73 70 61  |tart of free spa|
0000a130  63 65 0d 20 76 39 f2 76  61 72 28 22 6c 6f 6d 65  |ce. v9.var("lome|
0000a140  22 2c 4c 6f 6d 65 6d 25  29 3a f2 76 61 72 28 22  |",Lomem%):.var("|
0000a150  68 69 6d 65 22 2c 48 69  6d 65 6d 25 29 3a f4 20  |hime",Himem%):. |
0000a160  4d 6f 64 75 6c 65 20 69  6e 66 6f 0d 20 80 28 f2  |Module info. .(.|
0000a170  76 61 72 28 22 72 6f 77  6c 22 2c 77 6f 72 64 73  |var("rowl",words|
0000a180  25 3c 3c 32 29 3a f4 20  4d 6f 64 75 6c 65 20 69  |%<<2):. Module i|
0000a190  6e 66 6f 0d 20 8a 27 f2  76 61 72 28 22 6f 75 74  |nfo. .'.var("out|
0000a1a0  62 22 2c 63 6f 6c 62 69  74 73 25 29 3a f4 20 4d  |b",colbits%):. M|
0000a1b0  6f 64 75 6c 65 20 69 6e  66 6f 0d 20 94 2d f2 76  |odule info. .-.v|
0000a1c0  61 72 28 22 73 70 72 69  22 2c 73 70 74 72 25 2b  |ar("spri",sptr%+|
0000a1d0  73 70 74 72 25 21 33 32  29 3a f4 20 4d 6f 64 75  |sptr%!32):. Modu|
0000a1e0  6c 65 20 69 6e 66 6f 0d  20 9e 4a 53 70 72 43 6f  |le info. .JSprCo|
0000a1f0  6c 62 69 74 73 25 3d 63  6f 6c 62 69 74 73 25 3a  |lbits%=colbits%:|
0000a200  53 70 72 50 74 72 25 3d  73 70 74 72 25 3a 53 70  |SprPtr%=sptr%:Sp|
0000a210  72 4d 6f 64 65 25 3d 6d  6f 64 65 25 3a f4 20 47  |rMode%=mode%:. G|
0000a220  6c 6f 62 61 6c 20 73 70  72 69 74 65 20 69 6e 66  |lobal sprite inf|
0000a230  6f 0d 20 a8 44 53 70 72  57 25 3d 78 72 65 73 25  |o. .DSprW%=xres%|
0000a240  3a 53 70 72 48 25 3d 79  72 65 73 25 3a f4 20 52  |:SprH%=yres%:. R|
0000a250  65 6d 65 6d 62 65 72 20  73 70 72 69 74 65 27 73  |emember sprite's|
0000a260  20 72 65 73 6f 6c 75 74  69 6f 6e 20 69 6e 20 70  | resolution in p|
0000a270  69 78 65 6c 73 0d 20 b2  49 73 69 7a 65 25 3d 28  |ixels. .Isize%=(|
0000a280  28 48 69 6d 65 6d 25 2d  4c 6f 6d 65 6d 25 29 81  |(Himem%-Lomem%).|
0000a290  32 35 36 29 2a 32 35 36  3a f4 20 53 69 7a 65 20  |256)*256:. Size |
0000a2a0  6f 66 20 66 72 65 65 20  73 70 61 63 65 20 69 6e  |of free space in|
0000a2b0  20 73 70 72 69 74 65 20  62 75 66 66 65 72 0d 20  | sprite buffer. |
0000a2c0  bc 06 3d b9 0d 20 c6 05  20 0d 20 d0 1a dd f2 73  |..=.. .. . ....s|
0000a2d0  70 72 69 74 65 5f 68 65  61 64 65 72 28 63 6f 64  |prite_header(cod|
0000a2e0  65 25 29 0d 20 da 48 f4  20 49 6e 69 74 69 61 6c  |e%). .H. Initial|
0000a2f0  69 73 65 73 20 28 30 29  20 6f 72 20 75 70 64 61  |ises (0) or upda|
0000a300  74 65 73 20 28 31 29 20  73 70 72 69 74 65 20 61  |tes (1) sprite a|
0000a310  72 65 61 20 68 65 61 64  65 72 20 28 73 70 72 69  |rea header (spri|
0000a320  74 65 20 63 68 61 6e 67  65 64 29 0d 20 e4 0e c8  |te changed). ...|
0000a330  8e 20 63 6f 64 65 25 20  ca 0d 20 ee 36 20 c9 20  |. code% .. .6 . |
0000a340  30 20 3a 20 53 70 72 69  74 65 25 21 30 3d 53 70  |0 : Sprite%!0=Sp|
0000a350  72 69 74 65 73 69 7a 65  25 3a f4 20 53 69 7a 65  |ritesize%:. Size|
0000a360  20 6f 66 20 73 70 72 69  74 65 20 61 72 65 61 0d  | of sprite area.|
0000a370  20 f8 44 20 20 20 20 20  20 20 20 20 20 53 70 72  | .D          Spr|
0000a380  69 74 65 25 21 34 3d 30  3a 53 70 72 69 74 65 25  |ite%!4=0:Sprite%|
0000a390  21 38 3d 31 36 3a 53 70  72 69 74 65 25 21 31 32  |!8=16:Sprite%!12|
0000a3a0  3d 31 36 3a f4 20 4e 6f  20 73 70 72 69 74 65 20  |=16:. No sprite |
0000a3b0  79 65 74 0d 21 02 3f 20  20 20 20 20 20 20 20 20  |yet.!.?         |
0000a3c0  20 48 69 6d 65 6d 25 3d  53 70 72 69 74 65 25 2b  | Himem%=Sprite%+|
0000a3d0  53 70 72 69 74 65 73 69  7a 65 25 3a f4 20 45 6e  |Spritesize%:. En|
0000a3e0  64 20 6f 66 20 73 70 72  69 74 65 20 62 75 66 66  |d of sprite buff|
0000a3f0  65 72 0d 21 0c 40 20 c9  20 31 20 3a 20 53 70 72  |er.!.@ . 1 : Spr|
0000a400  69 74 65 25 21 34 3d 31  3a 53 70 72 69 74 65 25  |ite%!4=1:Sprite%|
0000a410  21 31 32 3d 53 70 72 69  74 65 25 21 38 2b 21 28  |!12=Sprite%!8+!(|
0000a420  53 70 72 69 74 65 25 2b  53 70 72 69 74 65 25 21  |Sprite%+Sprite%!|
0000a430  38 29 0d 21 16 05 cb 0d  21 20 05 e1 0d 21 2a 05  |8).!....! ...!*.|
0000a440  20 0d 21 34 0d dd f2 68  6f 75 72 5f 6f 6e 0d 21  | .!4...hour_on.!|
0000a450  3e 18 f4 20 54 75 72 6e  73 20 68 6f 75 72 67 6c  |>.. Turns hourgl|
0000a460  61 73 73 20 6f 6e 0d 21  48 1a c8 99 20 22 48 6f  |ass on.!H... "Ho|
0000a470  75 72 67 6c 61 73 73 5f  53 74 61 72 74 22 2c 34  |urglass_Start",4|
0000a480  0d 21 52 05 e1 0d 21 5c  05 20 0d 21 66 0e dd f2  |.!R...!\. .!f...|
0000a490  68 6f 75 72 5f 6f 66 66  0d 21 70 19 f4 20 54 75  |hour_off.!p.. Tu|
0000a4a0  72 6e 73 20 68 6f 75 72  67 6c 61 73 73 20 6f 66  |rns hourglass of|
0000a4b0  66 0d 21 7a 16 c8 99 20  22 48 6f 75 72 67 6c 61  |f.!z... "Hourgla|
0000a4c0  73 73 5f 4f 66 66 22 0d  21 84 05 e1 0d 21 8e 05  |ss_Off".!....!..|
0000a4d0  20 0d 21 98 1a dd f2 65  64 69 74 5f 70 61 72 74  | .!....edit_part|
0000a4e0  28 73 69 7a 65 2c 70 61  72 74 29 0d 21 a2 37 f4  |(size,part).!.7.|
0000a4f0  20 45 64 69 74 73 20 69  6d 61 67 65 20 73 69 7a  | Edits image siz|
0000a500  65 20 61 6e 64 20 70 61  72 74 20 28 69 66 20 65  |e and part (if e|
0000a510  6e 61 62 6c 65 64 20 77  69 74 68 20 66 6c 61 67  |nabled with flag|
0000a520  73 29 0d 21 ac 43 f4 20  52 65 74 75 72 6e 73 20  |s).!.C. Returns |
0000a530  77 69 74 68 20 28 73 63  61 6c 65 64 29 20 69 6d  |with (scaled) im|
0000a540  61 67 65 20 69 6e 20 67  72 61 70 68 69 63 73 20  |age in graphics |
0000a550  77 69 6e 64 6f 77 20 72  65 61 64 79 20 66 6f 72  |window ready for|
0000a560  20 73 61 76 65 0d 21 b6  41 ea 20 5f 25 2c 6f 78  | save.!.A. _%,ox|
0000a570  25 2c 6f 79 25 2c 78 25  2c 79 25 2c 62 75 74 25  |%,oy%,x%,y%,but%|
0000a580  2c 78 31 25 2c 78 32 25  2c 79 31 25 2c 79 32 25  |,x1%,x2%,y1%,y2%|
0000a590  2c 78 73 25 2c 79 73 25  2c 73 69 7a 65 78 25 2c  |,xs%,ys%,sizex%,|
0000a5a0  73 69 7a 65 79 25 0d 21  c0 22 ea 20 73 70 72 57  |sizey%.!.". sprW|
0000a5b0  25 2c 73 70 72 48 25 2c  70 74 72 24 2c 72 30 2c  |%,sprH%,ptr$,r0,|
0000a5c0  72 31 2c 72 32 2c 72 33  0d 21 ca 93 21 70 6f 69  |r1,r2,r3.!..!poi|
0000a5d0  6e 74 65 72 3d 35 31 32  3a 70 6f 69 6e 74 65 72  |nter=512:pointer|
0000a5e0  21 34 3d 30 3a 70 6f 69  6e 74 65 72 21 38 3d 31  |!4=0:pointer!8=1|
0000a5f0  36 3a 70 6f 69 6e 74 65  72 21 31 32 3d 31 36 3a  |6:pointer!12=16:|
0000a600  70 74 72 24 3d 22 70 74  72 22 3a c8 99 20 22 4f  |ptr$="ptr":.. "O|
0000a610  53 5f 53 70 72 69 74 65  4f 70 22 2c 31 35 2b 32  |S_SpriteOp",15+2|
0000a620  35 36 2c 70 6f 69 6e 74  65 72 2c 70 74 72 24 2c  |56,pointer,ptr$,|
0000a630  30 2c 33 32 2c 33 32 2c  31 31 3a f4 20 49 6e 69  |0,32,32,11:. Ini|
0000a640  74 69 61 6c 69 73 65 20  70 6f 69 6e 74 65 72 20  |tialise pointer |
0000a650  73 70 72 69 74 65 20 61  72 65 61 0d 21 d4 b5 c8  |sprite area.!...|
0000a660  99 20 4f 53 53 70 6f 70  25 2c 36 30 2b 32 35 36  |. OSSpop%,60+256|
0000a670  2c 70 6f 69 6e 74 65 72  2c 70 74 72 24 2c 30 20  |,pointer,ptr$,0 |
0000a680  b8 20 72 30 2c 72 31 2c  72 32 2c 72 33 3a ec 20  |. r0,r1,r2,r3:. |
0000a690  30 2c 31 32 34 3a e6 30  2c 33 3a f0 31 2c 30 2c  |0,124:.0,3:.1,0,|
0000a6a0  2d 33 32 3a f0 30 2c 30  2c 33 32 3a f0 31 2c 34  |-32:.0,0,32:.1,4|
0000a6b0  30 2c 30 3a f0 30 2c 2d  34 30 2c 30 3a f0 31 2c  |0,0:.0,-40,0:.1,|
0000a6c0  36 30 2c 2d 33 30 3a f0  30 2c 2d 36 30 2c 32 36  |60,-30:.0,-60,26|
0000a6d0  3a f0 31 2c 36 30 2c 2d  33 30 3a c8 99 20 4f 53  |:.1,60,-30:.. OS|
0000a6e0  53 70 6f 70 25 2c 72 30  2c 72 31 2c 72 32 2c 72  |Spop%,r0,r1,r2,r|
0000a6f0  33 3a f4 20 50 6c 6f 74  20 61 72 72 6f 77 20 69  |3:. Plot arrow i|
0000a700  6e 20 70 6f 69 6e 74 65  72 20 73 70 72 69 74 65  |n pointer sprite|
0000a710  0d 21 de 3f ef 32 34 2c  30 3b 30 3b 53 63 72 57  |.!.?.24,0;0;ScrW|
0000a720  25 3b 53 63 72 48 25 3b  3a f4 20 57 68 6f 6c 65  |%;ScrH%;:. Whole|
0000a730  20 73 63 72 65 65 6e 20  77 69 6e 64 6f 77 20 66  | screen window f|
0000a740  6f 72 20 69 6d 61 67 65  20 73 70 72 69 74 65 0d  |or image sprite.|
0000a750  21 e8 3a 73 70 72 57 25  3d a4 73 70 72 57 3a 73  |!.:sprW%=.sprW:s|
0000a760  70 72 48 25 3d a4 73 70  72 48 3a f4 20 54 72 75  |prH%=.sprH:. Tru|
0000a770  65 20 4f 53 20 73 69 7a  65 20 6f 66 20 69 6d 61  |e OS size of ima|
0000a780  67 65 20 73 70 72 69 74  65 0d 21 f2 2c 78 73 25  |ge sprite.!.,xs%|
0000a790  3d 32 5e a4 6d 6f 64 65  5f 76 61 72 28 eb 2c 34  |=2^.mode_var(.,4|
0000a7a0  29 3a f4 20 58 20 63 6f  6f 72 64 69 6e 61 74 65  |):. X coordinate|
0000a7b0  20 73 74 65 70 0d 21 fc  2c 79 73 25 3d 32 5e a4  | step.!.,ys%=2^.|
0000a7c0  6d 6f 64 65 5f 76 61 72  28 eb 2c 35 29 3a f4 20  |mode_var(.,5):. |
0000a7d0  59 20 63 6f 6f 72 64 69  6e 61 74 65 20 73 74 65  |Y coordinate ste|
0000a7e0  70 0d 22 06 3e e7 53 63  72 57 25 3e 73 70 72 57  |p.".>.ScrW%>sprW|
0000a7f0  25 20 8c 20 73 69 7a 65  78 25 3d 73 70 72 57 25  |% . sizex%=sprW%|
0000a800  20 8b 20 73 69 7a 65 78  25 3d 53 63 72 57 25 3a  | . sizex%=ScrW%:|
0000a810  f4 20 49 6e 69 74 69 61  6c 20 77 69 64 74 68 0d  |. Initial width.|
0000a820  22 10 3f e7 53 63 72 48  25 3e 73 70 72 48 25 20  |".?.ScrH%>sprH% |
0000a830  8c 20 73 69 7a 65 79 25  3d 73 70 72 48 25 20 8b  |. sizey%=sprH% .|
0000a840  20 73 69 7a 65 79 25 3d  53 63 72 48 25 3a f4 20  | sizey%=ScrH%:. |
0000a850  49 6e 69 74 69 61 6c 20  68 65 69 67 68 74 0d 22  |Initial height."|
0000a860  1a 4b 21 61 72 67 25 3d  73 69 7a 65 78 25 3a 61  |.K!arg%=sizex%:a|
0000a870  72 67 25 21 34 3d 73 69  7a 65 79 25 3a 61 72 67  |rg%!4=sizey%:arg|
0000a880  25 21 38 3d 73 70 72 57  25 3a 61 72 67 25 21 31  |%!8=sprW%:arg%!1|
0000a890  32 3d 73 70 72 48 25 3a  f4 20 49 6e 69 74 69 61  |2=sprH%:. Initia|
0000a8a0  6c 20 73 63 61 6c 69 6e  67 0d 22 24 2f da 3a f2  |l scaling."$/.:.|
0000a8b0  70 6c 6f 74 5f 69 6d 61  67 65 28 30 2c 30 2c 30  |plot_image(0,0,0|
0000a8c0  2c 61 72 67 25 29 3a f4  20 49 6e 69 74 69 61 6c  |,arg%):. Initial|
0000a8d0  20 64 69 73 70 6c 61 79  0d 22 2e 0b e7 73 69 7a  | display."...siz|
0000a8e0  65 20 8c 0d 22 38 3f 20  c8 97 20 c8 93 20 30 2c  |e .."8? .. .. 0,|
0000a8f0  30 2c 53 63 72 57 25 2d  78 73 25 2c 53 63 72 48  |0,ScrW%-xs%,ScrH|
0000a900  25 2d 79 73 25 3a f4 20  52 65 73 74 72 69 63 74  |%-ys%:. Restrict|
0000a910  20 70 6f 69 6e 74 65 72  20 74 6f 20 73 63 72 65  | pointer to scre|
0000a920  65 6e 0d 22 42 36 20 6f  78 25 3d 73 69 7a 65 78  |en."B6 ox%=sizex|
0000a930  25 2d 78 73 25 3a 6f 79  25 3d 73 69 7a 65 79 25  |%-xs%:oy%=sizey%|
0000a940  2d 79 73 25 3a f4 20 27  4f 6c 64 27 20 63 6f 6f  |-ys%:. 'Old' coo|
0000a950  72 64 69 6e 61 74 65 73  0d 22 4c 30 20 c8 97 20  |rdinates."L0 .. |
0000a960  b8 20 6f 78 25 2c 6f 79  25 3a f4 20 50 6f 69 6e  |. ox%,oy%:. Poin|
0000a970  74 65 72 20 74 6f 20 75  70 70 65 72 20 6c 65 66  |ter to upper lef|
0000a980  74 20 63 6f 72 6e 65 72  0d 22 56 3f 20 f5 20 f2  |t corner."V? . .|
0000a990  72 6d 6f 75 73 65 28 5f  25 2c 5f 25 2c 62 75 74  |rmouse(_%,_%,but|
0000a9a0  25 29 3a fd 20 62 75 74  25 3d 30 3a f4 20 57 61  |%):. but%=0:. Wa|
0000a9b0  69 74 20 66 6f 72 20 62  75 74 74 6f 6e 73 20 72  |it for buttons r|
0000a9c0  65 6c 65 61 73 65 64 0d  22 60 28 20 f5 20 f2 76  |eleased."`( . .v|
0000a9d0  61 6c 75 65 5f 70 74 72  28 73 69 7a 65 78 25 81  |alue_ptr(sizex%.|
0000a9e0  78 73 25 2c 73 69 7a 65  79 25 81 79 73 25 29 0d  |xs%,sizey%.ys%).|
0000a9f0  22 6a 3a 20 f5 20 f2 72  6d 6f 75 73 65 28 78 25  |"j: . .rmouse(x%|
0000aa00  2c 79 25 2c 62 75 74 25  29 3a fd 20 28 78 25 3c  |,y%,but%):. (x%<|
0000aa10  3e 6f 78 25 29 84 28 79  25 3c 3e 6f 79 25 29 84  |>ox%).(y%<>oy%).|
0000aa20  28 62 75 74 25 3c 3e 30  29 0d 22 74 0e 20 e7 62  |(but%<>0)."t. .b|
0000aa30  75 74 25 3d 30 20 8c 0d  22 7e 3e 20 20 e7 6f 79  |ut%=0 .."~>  .oy|
0000aa40  25 3e 79 25 20 8c 20 ec  20 30 2c 79 25 3a f0 20  |%>y% . . 0,y%:. |
0000aa50  31 30 33 2c a4 6d 61 78  28 78 25 2c 6f 78 25 29  |103,.max(x%,ox%)|
0000aa60  2c 6f 79 25 3a f4 20 57  69 70 65 20 59 2d 70 6f  |,oy%:. Wipe Y-po|
0000aa70  72 74 69 6f 6e 0d 22 88  3e 20 20 e7 6f 78 25 3e  |rtion.".>  .ox%>|
0000aa80  78 25 20 8c 20 ec 20 78  25 2c 30 3a f0 20 31 30  |x% . . x%,0:. 10|
0000aa90  33 2c 6f 78 25 2c a4 6d  61 78 28 79 25 2c 6f 79  |3,ox%,.max(y%,oy|
0000aaa0  25 29 3a f4 20 57 69 70  65 20 58 2d 70 6f 72 74  |%):. Wipe X-port|
0000aab0  69 6f 6e 0d 22 92 3a 20  20 73 69 7a 65 78 25 3d  |ion.".:  sizex%=|
0000aac0  78 25 2b 78 73 25 3a 73  69 7a 65 79 25 3d 79 25  |x%+xs%:sizey%=y%|
0000aad0  2b 79 73 25 3a f4 20 54  72 75 65 20 73 63 61 6c  |+ys%:. True scal|
0000aae0  65 64 20 69 6d 61 67 65  20 73 69 7a 65 0d 22 9c  |ed image size.".|
0000aaf0  3b 20 20 21 61 72 67 25  3d 73 69 7a 65 78 25 3a  |;  !arg%=sizex%:|
0000ab00  61 72 67 25 21 34 3d 73  69 7a 65 79 25 3a 61 72  |arg%!4=sizey%:ar|
0000ab10  67 25 21 38 3d 73 70 72  57 25 3a 61 72 67 25 21  |g%!8=sprW%:arg%!|
0000ab20  31 32 3d 73 70 72 48 25  0d 22 a6 1d 20 20 f2 70  |12=sprH%."..  .p|
0000ab30  6c 6f 74 5f 69 6d 61 67  65 28 30 2c 30 2c 30 2c  |lot_image(0,0,0,|
0000ab40  61 72 67 25 29 0d 22 b0  2e 20 20 6f 78 25 3d 78  |arg%)."..  ox%=x|
0000ab50  25 3a 6f 79 25 3d 79 25  3a f4 20 52 65 6d 65 6d  |%:oy%=y%:. Remem|
0000ab60  62 65 72 20 6f 6c 64 20  63 6f 6f 72 64 69 6e 61  |ber old coordina|
0000ab70  74 65 73 0d 22 ba 06 20  cd 0d 22 c4 0e 20 fd 20  |tes.".. ..".. . |
0000ab80  62 75 74 25 3c 3e 30 0d  22 ce 36 20 c8 99 20 22  |but%<>0.".6 .. "|
0000ab90  4f 53 5f 43 4c 49 22 2c  22 50 6f 69 6e 74 65 72  |OS_CLI","Pointer|
0000aba0  20 31 22 3a f4 20 52 65  73 74 6f 72 65 20 64 65  | 1":. Restore de|
0000abb0  66 61 75 6c 74 20 70 6f  69 6e 74 65 72 0d 22 d8  |fault pointer.".|
0000abc0  05 cd 0d 22 e2 0b e7 70  61 72 74 20 8c 0d 22 ec  |..."...part ..".|
0000abd0  3e 20 f5 20 f2 6d 6f 75  73 65 28 5f 25 2c 5f 25  |> . .mouse(_%,_%|
0000abe0  2c 62 75 74 25 29 3a fd  20 62 75 74 25 3d 30 3a  |,but%):. but%=0:|
0000abf0  f4 20 57 61 69 74 20 66  6f 72 20 62 75 74 74 6f  |. Wait for butto|
0000ac00  6e 73 20 72 65 6c 65 61  73 65 64 0d 22 f6 40 20  |ns released.".@ |
0000ac10  c8 97 20 c8 93 20 30 2c  30 2c 73 69 7a 65 78 25  |.. .. 0,0,sizex%|
0000ac20  2d 78 73 25 2c 73 69 7a  65 79 25 2d 79 73 25 3a  |-xs%,sizey%-ys%:|
0000ac30  f4 20 52 65 73 74 72 69  63 74 20 70 6f 69 6e 74  |. Restrict point|
0000ac40  65 72 20 74 6f 20 69 6d  61 67 65 0d 23 00 3c 20  |er to image.#.< |
0000ac50  c8 97 20 b8 20 30 2c 73  69 7a 65 79 25 2d 79 73  |.. . 0,sizey%-ys|
0000ac60  25 3a f4 20 4d 6f 75 73  65 20 74 6f 20 74 6f 70  |%:. Mouse to top|
0000ac70  20 72 69 67 68 74 20 6f  66 20 73 63 61 6c 65 64  | right of scaled|
0000ac80  20 73 70 72 69 74 65 0d  23 0a 38 20 f5 20 f2 72  | sprite.#.8 . .r|
0000ac90  6d 6f 75 73 65 28 78 31  25 2c 79 32 25 2c 62 75  |mouse(x1%,y2%,bu|
0000aca0  74 25 29 3a f2 76 61 6c  75 65 5f 70 74 72 28 78  |t%):.value_ptr(x|
0000acb0  31 25 81 78 73 25 2c 79  32 25 81 79 73 25 29 0d  |1%.xs%,y2%.ys%).|
0000acc0  23 14 23 20 fd 20 62 75  74 25 3c 3e 30 3a f4 20  |#.# . but%<>0:. |
0000acd0  47 65 74 20 74 6f 70 20  6c 65 66 74 20 70 6f 69  |Get top left poi|
0000ace0  6e 74 0d 23 1e 3e 20 f5  20 f2 6d 6f 75 73 65 28  |nt.#.> . .mouse(|
0000acf0  5f 25 2c 5f 25 2c 62 75  74 25 29 3a fd 20 62 75  |_%,_%,but%):. bu|
0000ad00  74 25 3d 30 3a f4 20 57  61 69 74 20 66 6f 72 20  |t%=0:. Wait for |
0000ad10  62 75 74 74 6f 6e 73 20  72 65 6c 65 61 73 65 64  |buttons released|
0000ad20  0d 23 28 2c 20 78 32 25  3d 78 31 25 3a 79 31 25  |.#(, x2%=x1%:y1%|
0000ad30  3d 79 32 25 3a f4 20 49  6e 69 74 69 61 6c 20 77  |=y2%:. Initial w|
0000ad40  69 6e 64 6f 77 20 63 6f  72 6e 65 72 0d 23 32 3e  |indow corner.#2>|
0000ad50  20 c8 97 20 c8 93 20 78  31 25 2c 30 2c 73 69 7a  | .. .. x1%,0,siz|
0000ad60  65 78 25 2d 78 73 25 2d  78 31 25 2c 79 32 25 3a  |ex%-xs%-x1%,y2%:|
0000ad70  f4 20 54 72 61 70 20 6d  6f 75 73 65 20 74 6f 20  |. Trap mouse to |
0000ad80  64 6f 77 6e 2f 72 69 67  68 74 0d 23 3c 33 20 c8  |down/right.#<3 .|
0000ad90  99 20 57 53 65 74 43 6f  6c 25 2c 28 34 3c 3c 34  |. WSetCol%,(4<<4|
0000ada0  29 2b 30 3a f4 20 49 6e  76 65 72 74 20 63 6f 6c  |)+0:. Invert col|
0000adb0  6f 75 72 20 6f 6e 20 73  63 72 65 65 6e 0d 23 46  |our on screen.#F|
0000adc0  41 20 6f 78 25 3d 78 32  25 3a 6f 79 25 3d 79 31  |A ox%=x2%:oy%=y1|
0000add0  25 3a c8 93 20 78 31 25  2c 79 31 25 2c 78 32 25  |%:.. x1%,y1%,x2%|
0000ade0  2d 78 31 25 2c 79 32 25  2d 79 31 25 3a f4 20 46  |-x1%,y2%-y1%:. F|
0000adf0  69 72 73 74 20 72 65 63  74 61 6e 67 6c 65 0d 23  |irst rectangle.#|
0000ae00  50 1c 20 f5 20 f2 72 6d  6f 75 73 65 28 78 32 25  |P. . .rmouse(x2%|
0000ae10  2c 79 31 25 2c 62 75 74  25 29 0d 23 5a 30 20 f2  |,y1%,but%).#Z0 .|
0000ae20  76 61 6c 75 65 5f 70 74  72 28 28 78 32 25 2d 78  |value_ptr((x2%-x|
0000ae30  31 25 29 81 78 73 25 2b  31 2c 28 79 32 25 2d 79  |1%).xs%+1,(y2%-y|
0000ae40  31 25 29 81 79 73 25 2b  31 29 0d 23 64 1d 20 e7  |1%).ys%+1).#d. .|
0000ae50  28 78 32 25 3c 3e 6f 78  25 29 84 28 79 31 25 3c  |(x2%<>ox%).(y1%<|
0000ae60  3e 6f 79 25 29 20 8c 0d  23 6e 35 20 20 c8 93 20  |>oy%) ..#n5  .. |
0000ae70  78 31 25 2c 6f 79 25 2c  6f 78 25 2d 78 31 25 2c  |x1%,oy%,ox%-x1%,|
0000ae80  79 32 25 2d 6f 79 25 3a  f4 20 57 69 70 65 20 6f  |y2%-oy%:. Wipe o|
0000ae90  6c 64 20 72 65 63 74 61  6e 67 6c 65 0d 23 78 30  |ld rectangle.#x0|
0000aea0  20 20 c8 93 20 78 31 25  2c 79 31 25 2c 78 32 25  |  .. x1%,y1%,x2%|
0000aeb0  2d 78 31 25 2c 79 32 25  2d 79 31 25 3a f4 20 4e  |-x1%,y2%-y1%:. N|
0000aec0  65 77 20 72 65 63 74 61  6e 67 6c 65 0d 23 82 2a  |ew rectangle.#.*|
0000aed0  20 20 6f 78 25 3d 78 32  25 3a 6f 79 25 3d 79 31  |  ox%=x2%:oy%=y1|
0000aee0  25 3a f4 20 4f 6c 64 20  6d 6f 75 73 65 20 70 6f  |%:. Old mouse po|
0000aef0  73 69 74 69 6f 6e 0d 23  8c 06 20 cd 0d 23 96 2a  |sition.#.. ..#.*|
0000af00  20 fd 20 62 75 74 25 3c  3e 30 3a f4 20 55 6e 74  | . but%<>0:. Unt|
0000af10  69 6c 20 73 65 63 6f 6e  64 20 62 75 74 74 6f 6e  |il second button|
0000af20  20 70 72 65 73 73 0d 23  a0 42 20 c8 97 20 c8 93  | press.#.B .. ..|
0000af30  20 30 2c 30 2c 53 63 72  57 25 2c 53 63 72 48 25  | 0,0,ScrW%,ScrH%|
0000af40  3a f4 20 52 65 73 65 74  20 6d 6f 75 73 65 20 72  |:. Reset mouse r|
0000af50  65 63 74 61 6e 67 6c 65  20 74 6f 20 77 68 6f 6c  |ectangle to whol|
0000af60  65 20 73 63 72 65 65 6e  0d 23 aa 30 20 c8 93 20  |e screen.#.0 .. |
0000af70  78 31 25 2c 79 31 25 2c  78 32 25 2d 78 31 25 2c  |x1%,y1%,x2%-x1%,|
0000af80  79 32 25 2d 79 31 25 3a  f4 20 57 69 70 65 20 72  |y2%-y1%:. Wipe r|
0000af90  65 63 74 61 6e 67 6c 65  0d 23 b4 22 20 ec 20 30  |ectangle.#." . 0|
0000afa0  2c 30 3a f4 20 57 69 70  65 20 73 75 72 72 6f 75  |,0:. Wipe surrou|
0000afb0  6e 64 69 6e 67 20 61 72  65 61 0d 23 be 3a 20 5f  |nding area.#.: _|
0000afc0  25 3d 78 31 25 2d 78 73  25 3a e7 5f 25 3e 3d 30  |%=x1%-xs%:._%>=0|
0000afd0  20 8c 20 f0 20 31 30 33  2c 5f 25 2c 31 30 32 34  | . . 103,_%,1024|
0000afe0  2d 79 73 25 20 8b 20 ec  20 5f 25 2c 31 30 32 34  |-ys% . . _%,1024|
0000aff0  2d 79 73 25 0d 23 c8 3d  20 5f 25 3d 79 32 25 2b  |-ys%.#.= _%=y2%+|
0000b000  79 73 25 3a e7 5f 25 3c  53 63 72 48 25 20 8c 20  |ys%:._%<ScrH% . |
0000b010  f0 20 31 30 33 2c 31 32  38 30 2d 78 73 25 2c 5f  |. 103,1280-xs%,_|
0000b020  25 20 8b 20 ec 20 31 32  38 30 2d 78 73 25 2c 5f  |% . . 1280-xs%,_|
0000b030  25 0d 23 d2 2f 20 5f 25  3d 78 32 25 2b 78 73 25  |%.#./ _%=x2%+xs%|
0000b040  3a e7 5f 25 3c 53 63 72  57 25 20 8c 20 f0 20 31  |:._%<ScrW% . . 1|
0000b050  30 33 2c 5f 25 2c 30 20  8b 20 ec 20 5f 25 2c 30  |03,_%,0 . . _%,0|
0000b060  0d 23 dc 38 20 5f 25 3d  79 31 25 2d 79 73 25 3a  |.#.8 _%=y1%-ys%:|
0000b070  e7 5f 25 3e 3d 30 20 8c  20 f0 20 31 30 33 2c 78  |._%>=0 . . 103,x|
0000b080  31 25 2d 78 73 25 2c 5f  25 20 8b 20 ec 20 78 31  |1%-xs%,_% . . x1|
0000b090  25 2d 78 73 25 2c 5f 25  0d 23 e6 36 20 c8 99 20  |%-xs%,_%.#.6 .. |
0000b0a0  22 4f 53 5f 43 4c 49 22  2c 22 50 6f 69 6e 74 65  |"OS_CLI","Pointe|
0000b0b0  72 20 31 22 3a f4 20 52  65 73 74 6f 72 65 20 64  |r 1":. Restore d|
0000b0c0  65 66 61 75 6c 74 20 70  6f 69 6e 74 65 72 0d 23  |efault pointer.#|
0000b0d0  f0 45 cc 20 78 31 25 3d  30 3a 79 31 25 3d 30 3a  |.E. x1%=0:y1%=0:|
0000b0e0  78 32 25 3d 73 69 7a 65  78 25 2d 78 73 25 3a 79  |x2%=sizex%-xs%:y|
0000b0f0  32 25 3d 73 69 7a 65 79  25 2d 79 73 25 3a f4 20  |2%=sizey%-ys%:. |
0000b100  57 68 6f 6c 65 20 73 70  72 69 74 65 20 77 69 6e  |Whole sprite win|
0000b110  64 6f 77 0d 23 fa 05 cd  0d 24 04 26 ef 32 34 2c  |dow.#....$.&.24,|
0000b120  78 31 25 3b 79 31 25 3b  78 32 25 3b 79 32 25 3b  |x1%;y1%;x2%;y2%;|
0000b130  3a f4 20 43 6c 69 70 20  77 69 6e 64 6f 77 0d 24  |:. Clip window.$|
0000b140  0e 05 e1 0d 24 18 05 20  0d 24 22 1e dd f2 72 6d  |....$.. .$"...rm|
0000b150  6f 75 73 65 28 f8 20 78  25 2c f8 20 79 25 2c f8  |ouse(. x%,. y%,.|
0000b160  20 62 75 74 25 29 0d 24  2c 4a f4 20 52 65 74 75  | but%).$,J. Retu|
0000b170  72 6e 73 20 6d 6f 75 73  65 20 63 6f 6f 72 64 69  |rns mouse coordi|
0000b180  6e 61 74 65 73 20 61 6e  64 20 62 75 74 74 6f 6e  |nates and button|
0000b190  73 2c 20 72 6f 75 6e 64  65 64 20 74 6f 20 65 78  |s, rounded to ex|
0000b1a0  61 63 74 20 70 69 78 65  6c 20 63 6f 6f 72 64 73  |act pixel coords|
0000b1b0  0d 24 36 24 f2 6d 6f 75  73 65 28 78 25 2c 79 25  |.$6$.mouse(x%,y%|
0000b1c0  2c 62 75 74 25 29 3a f4  20 4d 6f 75 73 65 20 73  |,but%):. Mouse s|
0000b1d0  74 61 74 65 0d 24 40 2a  78 25 2d 3d 78 25 20 83  |tate.$@*x%-=x% .|
0000b1e0  20 78 73 25 3a 79 25 2d  3d 79 25 20 83 20 79 73  | xs%:y%-=y% . ys|
0000b1f0  25 3a f4 20 52 6f 75 6e  64 20 64 6f 77 6e 0d 24  |%:. Round down.$|
0000b200  4a 05 e1 0d 24 54 05 20  0d 24 5e 1c dd f2 76 61  |J...$T. .$^...va|
0000b210  6c 75 65 5f 70 74 72 28  76 61 6c 31 25 2c 76 61  |lue_ptr(val1%,va|
0000b220  6c 32 25 29 0d 24 68 1c  f4 20 50 75 74 73 20 76  |l2%).$h.. Puts v|
0000b230  61 6c 75 65 73 20 69 6e  20 70 6f 69 6e 74 65 72  |alues in pointer|
0000b240  0d 24 72 45 c8 99 20 4f  53 53 70 6f 70 25 2c 36  |.$rE.. OSSpop%,6|
0000b250  30 2b 32 35 36 2c 70 6f  69 6e 74 65 72 2c 70 74  |0+256,pointer,pt|
0000b260  72 24 2c 30 20 b8 20 72  30 2c 72 31 2c 72 32 2c  |r$,0 . r0,r1,r2,|
0000b270  72 33 3a f4 20 4f 75 74  70 75 74 20 74 6f 20 73  |r3:. Output to s|
0000b280  70 72 69 74 65 0d 24 7c  77 fb 31 32 39 3a fb 32  |prite.$|w.129:.2|
0000b290  3a f1 8a 30 2c 32 29 3b  c2 22 20 20 20 22 2b c3  |:..0,2);."   "+.|
0000b2a0  76 61 6c 31 25 2c 34 29  27 c2 22 20 20 20 22 2b  |val1%,4)'."   "+|
0000b2b0  c3 76 61 6c 32 25 2c 34  29 3b 3a c8 99 20 4f 53  |.val2%,4);:.. OS|
0000b2c0  53 70 6f 70 25 2c 33 36  2b 32 35 36 2c 70 6f 69  |Spop%,36+256,poi|
0000b2d0  6e 74 65 72 2c 70 74 72  24 2c 25 30 30 30 30 30  |nter,ptr$,%00000|
0000b2e0  31 30 3a f4 20 50 72 69  6e 74 20 76 61 6c 75 65  |10:. Print value|
0000b2f0  73 20 61 6e 64 20 64 65  66 69 6e 65 0d 24 86 35  |s and define.$.5|
0000b300  c8 99 20 4f 53 53 70 6f  70 25 2c 72 30 2c 72 31  |.. OSSpop%,r0,r1|
0000b310  2c 72 32 2c 72 33 3a f4  20 52 65 73 74 6f 72 65  |,r2,r3:. Restore|
0000b320  20 6f 75 74 70 75 74 20  74 6f 20 73 63 72 65 65  | output to scree|
0000b330  6e 0d 24 90 05 e1 0d 24  9a 05 20 0d 24 a4 1a dd  |n.$....$.. .$...|
0000b340  f2 6f 70 74 69 6f 6e 73  5f 6d 65 6e 75 28 63 72  |.options_menu(cr|
0000b350  65 61 74 65 29 0d 24 ae  34 f4 20 28 52 65 29 77  |eate).$.4. (Re)w|
0000b360  72 69 74 65 73 20 6f 70  74 69 6f 6e 73 20 6d 65  |rites options me|
0000b370  6e 75 2c 20 6f 70 74 69  6f 6e 61 6c 6c 79 20 63  |nu, optionally c|
0000b380  72 65 61 74 65 73 20 69  74 0d 24 b8 0d ea 20 69  |reates it.$... i|
0000b390  31 24 2c 69 32 24 0d 24  c2 39 69 31 24 3d a4 73  |1$,i2$.$.9i1$=.s|
0000b3a0  65 6c 28 30 2c 31 2c 30  2c ac 49 6d 67 2c 30 29  |el(0,1,0,.Img,0)|
0000b3b0  2b 22 49 6d 61 67 65 20  69 6e 66 6f 23 22 2b c3  |+"Image info#"+.|
0000b3c0  77 69 6e 5f 69 6d 69 6e  66 6f 25 2b 22 7c 22 0d  |win_iminfo%+"|".|
0000b3d0  24 cc 2d 69 31 24 2b 3d  a4 73 65 6c 28 30 2c 31  |$.-i1$+=.sel(0,1|
0000b3e0  2c 30 2c 30 2c 30 29 2b  22 50 6f 70 20 75 70 23  |,0,0,0)+"Pop up#|
0000b3f0  22 2b c3 73 75 62 31 25  2b 22 7c 22 0d 24 d6 31  |"+.sub1%+"|".$.1|
0000b400  69 31 24 2b 3d a4 73 65  6c 28 30 2c 31 2c 30 2c  |i1$+=.sel(0,1,0,|
0000b410  30 2c 30 29 2b 22 50 72  6f 63 65 73 73 69 6e 67  |0,0)+"Processing|
0000b420  23 22 2b c3 73 75 62 31  25 2b 22 7c 22 0d 24 e0  |#"+.sub1%+"|".$.|
0000b430  2c 69 31 24 2b 3d a4 73  65 6c 28 30 2c 30 2c 30  |,i1$+=.sel(0,0,0|
0000b440  2c ac 49 6d 67 2c 30 29  2b 22 49 6d 61 67 65 20  |,.Img,0)+"Image |
0000b450  70 61 6c 65 74 74 65 7c  22 0d 24 ea 34 69 32 24  |palette|".$.4i2$|
0000b460  2b 3d a4 73 65 6c 28 30  2c 30 2c 30 2c ac 49 6d  |+=.sel(0,0,0,.Im|
0000b470  67 2c 30 29 2b 22 5a 6f  6f 6d 20 69 6d 61 67 65  |g,0)+"Zoom image|
0000b480  23 22 2b c3 73 75 62 31  25 2b 22 7c 22 0d 24 f4  |#"+.sub1%+"|".$.|
0000b490  2b 69 32 24 2b 3d a4 73  65 6c 28 30 2c 30 2c 30  |+i2$+=.sel(0,0,0|
0000b4a0  2c ac 49 6d 67 2c 30 29  2b 22 52 6f 74 61 74 65  |,.Img,0)+"Rotate|
0000b4b0  20 69 6d 61 67 65 7c 22  0d 24 fe 36 69 32 24 2b  | image|".$.6i2$+|
0000b4c0  3d a4 73 65 6c 28 30 2c  31 2c 30 2c ac 49 6d 67  |=.sel(0,1,0,.Img|
0000b4d0  2c 30 29 2b 22 4d 69 72  72 6f 72 20 69 6d 61 67  |,0)+"Mirror imag|
0000b4e0  65 23 22 2b c3 73 75 62  31 25 2b 22 7c 22 0d 25  |e#"+.sub1%+"|".%|
0000b4f0  08 32 69 32 24 2b 3d a4  73 65 6c 28 50 61 6c 6f  |.2i2$+=.sel(Palo|
0000b500  6e 6f 66 66 2c 30 2c 30  2c 30 2c 30 29 2b 22 49  |noff,0,0,0,0)+"I|
0000b510  6e 63 6c 75 64 65 20 70  61 6c 65 74 74 65 7c 22  |nclude palette|"|
0000b520  0d 25 12 34 69 32 24 2b  3d a4 73 65 6c 28 30 2c  |.%.4i2$+=.sel(0,|
0000b530  31 2c 30 2c ac 49 6d 67  2c 30 29 2b 22 53 61 76  |1,0,.Img,0)+"Sav|
0000b540  65 20 69 6d 61 67 65 23  22 2b c3 73 75 62 31 25  |e image#"+.sub1%|
0000b550  2b 22 7c 22 0d 25 1c 1e  69 32 24 2b 3d 22 20 53  |+"|".%..i2$+=" S|
0000b560  74 61 74 75 73 23 22 2b  c3 73 75 62 31 25 2b 22  |tatus#"+.sub1%+"|
0000b570  7c 22 0d 25 26 3b f2 63  72 65 61 74 65 5f 6d 65  ||".%&;.create_me|
0000b580  6e 75 28 2d 31 2c 30 2c  22 54 72 61 6e 73 6c 61  |nu(-1,0,"Transla|
0000b590  74 6f 72 22 2c 32 36 30  2c 34 30 2c 30 2c 69 31  |tor",260,40,0,i1|
0000b5a0  24 2c 69 32 24 2c 63 72  65 61 74 65 29 0d 25 30  |$,i2$,create).%0|
0000b5b0  05 e1 0d 25 3a 05 20 0d  25 44 1b dd f2 73 75 62  |...%:. .%D...sub|
0000b5c0  6d 65 6e 75 28 70 61 74  68 24 2c 63 72 65 61 74  |menu(path$,creat|
0000b5d0  65 29 0d 25 4e 35 f4 20  28 52 65 29 77 72 69 74  |e).%N5. (Re)writ|
0000b5e0  65 73 20 73 75 62 6d 65  6e 75 20 70 61 74 68 24  |es submenu path$|
0000b5f0  2c 20 6f 70 74 69 6f 6e  61 6c 6c 79 20 63 72 65  |, optionally cre|
0000b600  61 74 65 73 20 69 74 0d  25 58 0c ea 20 69 24 2c  |ates it.%X.. i$,|
0000b610  69 32 24 0d 25 62 32 43  75 72 72 53 75 62 24 3d  |i2$.%b2CurrSub$=|
0000b620  70 61 74 68 24 3a f4 20  52 65 6d 65 6d 62 65 72  |path$:. Remember|
0000b630  20 63 75 72 72 65 6e 74  20 73 75 62 6d 65 6e 75  | current submenu|
0000b640  20 70 61 74 68 0d 25 6c  0e c8 8e 20 70 61 74 68  | path.%l... path|
0000b650  24 20 ca 0d 25 76 bb 20  c9 20 22 50 6f 70 20 75  |$ ..%v. . "Pop u|
0000b660  70 22 20 3a 20 69 24 3d  a4 73 65 6c 28 41 75 74  |p" : i$=.sel(Aut|
0000b670  6f 4d 6f 64 65 2c 30 2c  30 2c 30 2c 30 29 2b 22  |oMode,0,0,0,0)+"|
0000b680  41 75 74 6f 20 6d 6f 64  65 7c 22 2b a4 73 65 6c  |Auto mode|"+.sel|
0000b690  28 41 75 74 6f 50 61 6c  2c 30 2c 30 2c 30 2c 30  |(AutoPal,0,0,0,0|
0000b6a0  29 2b 22 41 75 74 6f 20  70 61 6c 65 74 74 65 7c  |)+"Auto palette||
0000b6b0  22 2b a4 73 65 6c 28 41  75 74 6f 5a 6f 6f 6d 2c  |"+.sel(AutoZoom,|
0000b6c0  30 2c 30 2c 30 2c 30 29  2b 22 41 75 74 6f 20 7a  |0,0,0,0)+"Auto z|
0000b6d0  6f 6f 6d 7c 22 2b a4 73  65 6c 28 28 4d 6f 64 65  |oom|"+.sel((Mode|
0000b6e0  53 65 74 3e 30 29 2c 30  2c 30 2c ac 41 75 74 6f  |Set>0),0,0,.Auto|
0000b6f0  4d 6f 64 65 2c 30 29 2b  22 4d 6f 64 65 20 73 65  |Mode,0)+"Mode se|
0000b700  74 23 22 2b c3 73 75 62  32 25 2b 22 7c 22 0d 25  |t#"+.sub2%+"|".%|
0000b710  80 40 20 20 20 20 20 20  f2 63 72 65 61 74 65 5f  |.@      .create_|
0000b720  6d 65 6e 75 28 78 25 2c  79 25 2c 22 5e 31 50 6f  |menu(x%,y%,"^1Po|
0000b730  70 20 75 70 22 2c 31 33  2a 31 36 2c 34 30 2c 30  |p up",13*16,40,0|
0000b740  2c 69 24 2c 22 22 2c 63  72 65 61 74 65 29 0d 25  |,i$,"",create).%|
0000b750  8a bc 20 c9 20 22 50 6f  70 20 75 70 2e 4d 6f 64  |.. . "Pop up.Mod|
0000b760  65 20 73 65 74 22 20 3a  20 69 24 3d a4 73 65 6c  |e set" : i$=.sel|
0000b770  28 28 4d 6f 64 65 53 65  74 3d 30 29 2c 30 2c 30  |((ModeSet=0),0,0|
0000b780  2c 30 2c 30 29 2b 22 4e  6f 6e 65 7c 22 2b a4 73  |,0,0)+"None|"+.s|
0000b790  65 6c 28 28 4d 6f 64 65  53 65 74 3d 31 29 2c 30  |el((ModeSet=1),0|
0000b7a0  2c 30 2c 30 2c 30 29 2b  22 4e 6f 72 6d 61 6c 7c  |,0,0,0)+"Normal||
0000b7b0  22 2b a4 73 65 6c 28 28  4d 6f 64 65 53 65 74 3d  |"+.sel((ModeSet=|
0000b7c0  32 29 2c 30 2c 30 2c ac  4d 75 6c 74 69 53 79 6e  |2),0,0,.MultiSyn|
0000b7d0  63 2c 30 29 2b 22 4d 75  6c 74 69 73 79 6e 63 7c  |c,0)+"Multisync||
0000b7e0  22 2b a4 73 65 6c 28 28  4d 6f 64 65 53 65 74 3d  |"+.sel((ModeSet=|
0000b7f0  33 29 2c 30 2c 31 2c 30  2c 30 29 2b a4 75 6d 73  |3),0,1,0,0)+.ums|
0000b800  2b 22 26 61 30 2d 39 2c  7c 22 0d 25 94 42 20 20  |+"&a0-9,|".%.B  |
0000b810  20 20 20 20 f2 63 72 65  61 74 65 5f 6d 65 6e 75  |    .create_menu|
0000b820  28 78 25 2c 79 25 2c 22  5e 32 4d 6f 64 65 20 73  |(x%,y%,"^2Mode s|
0000b830  65 74 22 2c 31 30 2a 31  36 2c 34 30 2c 30 2c 69  |et",10*16,40,0,i|
0000b840  24 2c 22 22 2c 63 72 65  61 74 65 29 0d 25 9e 9e  |$,"",create).%..|
0000b850  20 c9 20 22 50 72 6f 63  65 73 73 69 6e 67 22 20  | . "Processing" |
0000b860  3a 20 69 24 3d a4 73 65  6c 28 43 6c 65 61 72 46  |: i$=.sel(ClearF|
0000b870  69 6c 65 2c 30 2c 30 2c  30 2c 30 29 2b 22 43 6c  |ile,0,0,0,0)+"Cl|
0000b880  65 61 72 20 6f 75 74 70  75 74 23 22 2b c3 77 69  |ear output#"+.wi|
0000b890  6e 5f 66 69 6c 65 25 2b  22 7c 20 4f 75 74 70 75  |n_file%+"| Outpu|
0000b8a0  74 20 6d 6f 64 65 23 22  2b c3 73 75 62 32 25 2b  |t mode#"+.sub2%+|
0000b8b0  22 7c 22 2b a4 73 65 6c  28 30 2c 30 2c 30 2c 28  |"|"+.sel(0,0,0,(|
0000b8c0  4f 75 74 4d 6f 64 65 3d  31 29 2c 30 29 2b 22 4f  |OutMode=1),0)+"O|
0000b8d0  75 74 70 75 74 20 70 61  6c 65 74 74 65 23 22 2b  |utput palette#"+|
0000b8e0  c3 73 75 62 32 25 2b 22  7c 22 0d 25 a8 a8 20 20  |.sub2%+"|".%..  |
0000b8f0  20 20 20 20 69 24 2b 3d  a4 73 65 6c 28 28 28 58  |    i$+=.sel(((X|
0000b900  4d 75 6c 25 3c 3e 58 44  69 76 25 29 84 28 59 4d  |Mul%<>XDiv%).(YM|
0000b910  75 6c 25 3c 3e 59 44 69  76 25 29 29 2c 30 2c 30  |ul%<>YDiv%)),0,0|
0000b920  2c 30 2c 30 29 2b 22 53  63 61 6c 69 6e 67 23 22  |,0,0)+"Scaling#"|
0000b930  2b c3 73 75 62 32 25 2b  22 7c 22 2b a4 73 65 6c  |+.sub2%+"|"+.sel|
0000b940  28 45 72 72 53 70 72 65  61 64 2c 30 2c 30 2c 30  |(ErrSpread,0,0,0|
0000b950  2c 30 29 2b 22 45 72 72  6f 72 20 73 70 72 65 61  |,0)+"Error sprea|
0000b960  64 69 6e 67 7c 22 2b a4  73 65 6c 28 42 6c 61 63  |ding|"+.sel(Blac|
0000b970  6b 57 68 69 74 65 2c 30  2c 30 2c 30 2c 30 29 2b  |kWhite,0,0,0,0)+|
0000b980  22 42 6c 61 63 6b 20 61  6e 64 20 77 68 69 74 65  |"Black and white|
0000b990  7c 22 0d 25 b2 dd 20 20  20 20 20 20 69 32 24 3d  ||".%..      i2$=|
0000b9a0  a4 73 65 6c 28 5a 69 67  5a 61 67 2c 30 2c 30 2c  |.sel(ZigZag,0,0,|
0000b9b0  30 2c 30 29 2b 22 5a 69  67 20 7a 61 67 7c 22 2b  |0,0)+"Zig zag|"+|
0000b9c0  22 20 52 47 42 20 72 65  73 6f 6c 75 74 69 6f 6e  |" RGB resolution|
0000b9d0  23 22 2b c3 77 69 6e 5f  72 67 62 62 69 74 73 25  |#"+.win_rgbbits%|
0000b9e0  2b 22 7c 22 2b a4 73 65  6c 28 49 6e 76 65 72 74  |+"|"+.sel(Invert|
0000b9f0  52 47 42 2c 31 2c 30 2c  30 2c 30 29 2b 22 49 6e  |RGB,1,0,0,0)+"In|
0000ba00  76 65 72 74 20 52 47 42  7c 22 2b a4 73 65 6c 28  |vert RGB|"+.sel(|
0000ba10  42 6c 61 6e 6b 69 6e 67  2c 30 2c 30 2c 30 2c 30  |Blanking,0,0,0,0|
0000ba20  29 2b 22 53 63 72 65 65  6e 20 62 6c 61 6e 6b 69  |)+"Screen blanki|
0000ba30  6e 67 7c 22 2b a4 73 65  6c 28 47 49 46 53 63 61  |ng|"+.sel(GIFSca|
0000ba40  6e 2c 30 2c 30 2c 30 2c  30 29 2b 22 47 49 46 20  |n,0,0,0,0)+"GIF |
0000ba50  73 63 61 6e 7c 20 49 6d  61 67 65 20 6e 75 6d 62  |scan| Image numb|
0000ba60  65 72 23 22 2b c3 73 75  62 32 25 2b 22 7c 22 0d  |er#"+.sub2%+"|".|
0000ba70  25 bc 45 20 20 20 20 20  20 f2 63 72 65 61 74 65  |%.E      .create|
0000ba80  5f 6d 65 6e 75 28 78 25  2c 79 25 2c 22 5e 31 50  |_menu(x%,y%,"^1P|
0000ba90  72 6f 63 65 73 73 69 6e  67 22 2c 31 36 2a 31 36  |rocessing",16*16|
0000baa0  2c 34 30 2c 30 2c 69 24  2c 69 32 24 2c 63 72 65  |,40,0,i$,i2$,cre|
0000bab0  61 74 65 29 0d 25 c6 99  20 c9 20 22 50 72 6f 63  |ate).%.. . "Proc|
0000bac0  65 73 73 69 6e 67 2e 4f  75 74 70 75 74 20 6d 6f  |essing.Output mo|
0000bad0  64 65 22 20 3a 20 f2 63  72 65 61 74 65 5f 6d 65  |de" : .create_me|
0000bae0  6e 75 28 78 25 2c 79 25  2c 22 5e 32 4d 6f 64 65  |nu(x%,y%,"^2Mode|
0000baf0  22 2c 38 2a 31 36 2c 34  30 2c 30 2c a4 73 65 6c  |",8*16,40,0,.sel|
0000bb00  28 28 4f 75 74 4d 6f 64  65 3d 31 29 2c 30 2c 30  |((OutMode=1),0,0|
0000bb10  2c 30 2c 30 29 2b 22 41  75 74 6f 7c 22 2b a4 73  |,0,0)+"Auto|"+.s|
0000bb20  65 6c 28 28 4f 75 74 4d  6f 64 65 3d 32 29 2c 30  |el((OutMode=2),0|
0000bb30  2c 30 2c 30 2c 30 29 2b  22 43 75 72 72 65 6e 74  |,0,0,0)+"Current|
0000bb40  7c 22 2c 22 22 2c 63 72  65 61 74 65 29 0d 25 d0  ||","",create).%.|
0000bb50  c7 20 c9 20 22 50 72 6f  63 65 73 73 69 6e 67 2e  |. . "Processing.|
0000bb60  4f 75 74 70 75 74 20 70  61 6c 65 74 74 65 22 20  |Output palette" |
0000bb70  3a 20 f2 63 72 65 61 74  65 5f 6d 65 6e 75 28 78  |: .create_menu(x|
0000bb80  25 2c 79 25 2c 22 5e 32  50 61 6c 65 74 74 65 22  |%,y%,"^2Palette"|
0000bb90  2c 31 30 2a 31 36 2c 34  30 2c 30 2c a4 73 65 6c  |,10*16,40,0,.sel|
0000bba0  28 28 4f 75 74 50 61 6c  3d 31 29 2c 30 2c 30 2c  |((OutPal=1),0,0,|
0000bbb0  30 2c 30 29 2b 22 43 75  72 72 65 6e 74 7c 22 2b  |0,0)+"Current|"+|
0000bbc0  a4 73 65 6c 28 28 4f 75  74 50 61 6c 3d 32 29 2c  |.sel((OutPal=2),|
0000bbd0  30 2c 30 2c 30 2c 30 29  2b 22 44 65 66 61 75 6c  |0,0,0,0)+"Defaul|
0000bbe0  74 7c 22 2b a4 73 65 6c  28 28 4f 75 74 50 61 6c  |t|"+.sel((OutPal|
0000bbf0  3d 33 29 2c 30 2c 30 2c  30 2c 30 29 2b 22 47 72  |=3),0,0,0,0)+"Gr|
0000bc00  65 79 73 63 61 6c 65 7c  22 2c 22 22 2c 63 72 65  |eyscale|","",cre|
0000bc10  61 74 65 29 0d 25 da b0  20 c9 20 22 50 72 6f 63  |ate).%.. . "Proc|
0000bc20  65 73 73 69 6e 67 2e 53  63 61 6c 69 6e 67 22 20  |essing.Scaling" |
0000bc30  3a 20 f2 63 72 65 61 74  65 5f 6d 65 6e 75 28 78  |: .create_menu(x|
0000bc40  25 2c 79 25 2c 22 5e 32  53 63 61 6c 69 6e 67 22  |%,y%,"^2Scaling"|
0000bc50  2c 35 2a 31 36 2c 34 30  2c 30 2c a4 73 65 6c 28  |,5*16,40,0,.sel(|
0000bc60  28 58 4d 75 6c 25 3c 3e  58 44 69 76 25 29 2c 30  |(XMul%<>XDiv%),0|
0000bc70  2c 30 2c 30 2c 30 29 2b  22 78 23 22 2b c3 73 75  |,0,0,0)+"x#"+.su|
0000bc80  62 33 25 2b 22 7c 22 2b  a4 73 65 6c 28 28 59 4d  |b3%+"|"+.sel((YM|
0000bc90  75 6c 25 3c 3e 59 44 69  76 25 29 2c 30 2c 30 2c  |ul%<>YDiv%),0,0,|
0000bca0  30 2c 30 29 2b 22 79 23  22 2b c3 73 75 62 33 25  |0,0)+"y#"+.sub3%|
0000bcb0  2b 22 7c 20 31 3a 31 7c  22 2c 22 22 2c 63 72 65  |+"| 1:1|","",cre|
0000bcc0  61 74 65 29 0d 25 e4 72  20 c9 20 22 50 72 6f 63  |ate).%.r . "Proc|
0000bcd0  65 73 73 69 6e 67 2e 53  63 61 6c 69 6e 67 2e 78  |essing.Scaling.x|
0000bce0  22 20 3a 20 f2 63 72 65  61 74 65 5f 6d 65 6e 75  |" : .create_menu|
0000bcf0  28 78 25 2c 79 25 2c 22  5e 33 58 22 2c 31 30 2a  |(x%,y%,"^3X",10*|
0000bd00  31 36 2c 34 30 2c 30 2c  22 24 22 2b c3 28 58 4d  |16,40,0,"$"+.(XM|
0000bd10  75 6c 25 29 2b 22 3a 22  2b c3 28 58 44 69 76 25  |ul%)+":"+.(XDiv%|
0000bd20  29 2b 22 26 61 30 2d 39  3a 7c 22 2c 22 22 2c 63  |)+"&a0-9:|","",c|
0000bd30  72 65 61 74 65 29 0d 25  ee 72 20 c9 20 22 50 72  |reate).%.r . "Pr|
0000bd40  6f 63 65 73 73 69 6e 67  2e 53 63 61 6c 69 6e 67  |ocessing.Scaling|
0000bd50  2e 79 22 20 3a 20 f2 63  72 65 61 74 65 5f 6d 65  |.y" : .create_me|
0000bd60  6e 75 28 78 25 2c 79 25  2c 22 5e 33 59 22 2c 31  |nu(x%,y%,"^3Y",1|
0000bd70  30 2a 31 36 2c 34 30 2c  30 2c 22 24 22 2b c3 28  |0*16,40,0,"$"+.(|
0000bd80  59 4d 75 6c 25 29 2b 22  3a 22 2b c3 28 59 44 69  |YMul%)+":"+.(YDi|
0000bd90  76 25 29 2b 22 26 61 30  2d 39 3a 7c 22 2c 22 22  |v%)+"&a0-9:|",""|
0000bda0  2c 63 72 65 61 74 65 29  0d 25 f8 6e 20 c9 20 22  |,create).%.n . "|
0000bdb0  50 72 6f 63 65 73 73 69  6e 67 2e 49 6d 61 67 65  |Processing.Image|
0000bdc0  20 6e 75 6d 62 65 72 22  20 3a 20 f2 63 72 65 61  | number" : .crea|
0000bdd0  74 65 5f 6d 65 6e 75 28  78 25 2c 79 25 2c 22 5e  |te_menu(x%,y%,"^|
0000bde0  32 4e 75 6d 62 65 72 22  2c 36 2a 31 36 2c 34 30  |2Number",6*16,40|
0000bdf0  2c 30 2c 22 24 22 2b c3  28 49 6d 61 67 65 4e 72  |,0,"$"+.(ImageNr|
0000be00  25 29 2b 22 26 61 30 2d  39 7c 22 2c 22 22 2c 63  |%)+"&a0-9|","",c|
0000be10  72 65 61 74 65 29 0d 26  02 93 20 c9 20 22 5a 6f  |reate).&.. . "Zo|
0000be20  6f 6d 20 69 6d 61 67 65  22 20 3a 20 f2 63 72 65  |om image" : .cre|
0000be30  61 74 65 5f 6d 65 6e 75  28 78 25 2c 79 25 2c 22  |ate_menu(x%,y%,"|
0000be40  5e 31 5a 6f 6f 6d 22 2c  34 2a 31 36 2c 34 30 2c  |^1Zoom",4*16,40,|
0000be50  30 2c 22 20 49 6e 23 22  2b c3 73 75 62 32 25 2b  |0," In#"+.sub2%+|
0000be60  22 7c 20 4f 75 74 23 22  2b c3 73 75 62 32 25 2b  |"| Out#"+.sub2%+|
0000be70  22 7c 22 2b a4 73 65 6c  28 28 28 5a 6f 6f 6d 58  |"|"+.sel(((ZoomX|
0000be80  3d 31 29 80 28 5a 6f 6f  6d 59 3d 31 29 29 2c 30  |=1).(ZoomY=1)),0|
0000be90  2c 30 2c 30 2c 30 29 2b  22 31 3a 31 7c 22 2c 22  |,0,0,0)+"1:1|","|
0000bea0  22 2c 63 72 65 61 74 65  29 0d 26 0c 70 20 c9 20  |",create).&.p . |
0000beb0  22 5a 6f 6f 6d 20 69 6d  61 67 65 2e 49 6e 22 2c  |"Zoom image.In",|
0000bec0  22 5a 6f 6f 6d 20 69 6d  61 67 65 2e 4f 75 74 22  |"Zoom image.Out"|
0000bed0  20 3a 20 f2 63 72 65 61  74 65 5f 6d 65 6e 75 28  | : .create_menu(|
0000bee0  78 25 2c 79 25 2c 22 5e  32 22 2b c1 70 61 74 68  |x%,y%,"^2"+.path|
0000bef0  24 2c 31 32 29 2c 35 2a  31 36 2c 34 30 2c 30 2c  |$,12),5*16,40,0,|
0000bf00  22 20 42 6f 74 68 7c 20  78 7c 20 79 7c 22 2c 22  |" Both| x| y|","|
0000bf10  22 2c 63 72 65 61 74 65  29 0d 26 16 53 20 c9 20  |",create).&.S . |
0000bf20  22 4d 69 72 72 6f 72 20  69 6d 61 67 65 22 20 3a  |"Mirror image" :|
0000bf30  20 f2 63 72 65 61 74 65  5f 6d 65 6e 75 28 78 25  | .create_menu(x%|
0000bf40  2c 79 25 2c 22 5e 31 4d  69 72 72 6f 72 22 2c 36  |,y%,"^1Mirror",6|
0000bf50  2a 31 36 2c 34 30 2c 30  2c 22 20 78 7c 20 79 7c  |*16,40,0," x| y||
0000bf60  22 2c 22 22 2c 63 72 65  61 74 65 29 0d 26 20 59  |","",create).& Y|
0000bf70  20 c9 20 22 53 74 61 74  75 73 22 20 3a 20 f2 63  | . "Status" : .c|
0000bf80  72 65 61 74 65 5f 6d 65  6e 75 28 78 25 2c 79 25  |reate_menu(x%,y%|
0000bf90  2c 22 5e 31 53 74 61 74  75 73 22 2c 35 2a 31 36  |,"^1Status",5*16|
0000bfa0  2c 34 30 2c 30 2c 22 20  53 61 76 65 7c 20 4c 6f  |,40,0," Save| Lo|
0000bfb0  61 64 7c 20 4b 69 6c 6c  7c 22 2c 22 22 2c 63 72  |ad| Kill|","",cr|
0000bfc0  65 61 74 65 29 0d 26 2a  82 20 c9 20 22 53 61 76  |eate).&*. . "Sav|
0000bfd0  65 20 69 6d 61 67 65 22  20 3a 20 f2 63 72 65 61  |e image" : .crea|
0000bfe0  74 65 5f 6d 65 6e 75 28  78 25 2c 79 25 2c 22 5e  |te_menu(x%,y%,"^|
0000bff0  31 53 61 76 65 20 69 6d  61 67 65 22 2c 31 35 2a  |1Save image",15*|
0000c000  31 36 2c 34 30 2c 30 2c  22 20 46 75 6c 6c 7c 20  |16,40,0," Full| |
0000c010  57 68 6f 6c 65 7c 20 57  68 6f 6c 65 20 28 73 63  |Whole| Whole (sc|
0000c020  61 6c 65 64 29 7c 20 50  61 72 74 7c 20 50 61 72  |aled)| Part| Par|
0000c030  74 20 28 73 63 61 6c 65  64 29 7c 22 2c 22 22 2c  |t (scaled)|","",|
0000c040  63 72 65 61 74 65 29 0d  26 34 14 20 7f 20 3a 20  |create).&4. . : |
0000c050  43 75 72 72 53 75 62 24  3d 22 22 0d 26 3e 05 cb  |CurrSub$="".&>..|
0000c060  0d 26 48 05 e1 0d 26 52  05 20 0d 26 5c 15 dd f2  |.&H...&R. .&\...|
0000c070  73 65 74 5f 6d 6f 64 65  28 6d 6f 64 65 25 29 0d  |set_mode(mode%).|
0000c080  26 66 32 f4 20 53 65 74  73 20 6e 65 77 20 6d 6f  |&f2. Sets new mo|
0000c090  64 65 20 28 69 66 20 65  6e 61 62 6c 65 64 29 20  |de (if enabled) |
0000c0a0  66 6f 72 20 69 6d 61 67  65 20 64 69 73 70 6c 61  |for image displa|
0000c0b0  79 0d 26 70 0e ea 20 6c  6f 67 32 62 70 70 25 0d  |y.&p.. log2bpp%.|
0000c0c0  26 7a 3e e7 41 75 74 6f  4d 6f 64 65 20 8b 20 f2  |&z>.AutoMode . .|
0000c0d0  73 65 74 5f 74 72 61 6e  73 3a e1 3a f4 20 41 75  |set_trans:.:. Au|
0000c0e0  74 6f 20 6d 6f 64 65 20  73 65 6c 65 63 74 69 6f  |to mode selectio|
0000c0f0  6e 20 6e 6f 74 20 65 6e  61 62 6c 65 64 0d 26 84  |n not enabled.&.|
0000c100  29 6c 6f 67 32 62 70 70  25 3d a4 6d 6f 64 65 5f  |)log2bpp%=.mode_|
0000c110  76 61 72 28 6d 6f 64 65  25 2c 39 29 3a f4 20 4c  |var(mode%,9):. L|
0000c120  6f 67 32 42 50 50 0d 26  8e 10 c8 8e 20 4d 6f 64  |og2BPP.&.... Mod|
0000c130  65 53 65 74 20 ca 0d 26  98 34 20 c9 20 30 20 3a  |eSet ..&.4 . 0 :|
0000c140  20 f4 20 4e 6f 20 6d 6f  64 65 20 73 65 74 20 3a  | . No mode set :|
0000c150  20 6e 6f 20 63 68 61 6e  67 65 20 6f 66 20 64 69  | no change of di|
0000c160  73 70 6c 61 79 20 6d 6f  64 65 0d 26 a2 3a 20 c9  |splay mode.&.: .|
0000c170  20 31 20 3a 20 6d 6f 64  65 25 3d bb c1 22 20 30  | 1 : mode%=.." 0|
0000c180  20 38 31 32 31 35 22 2c  6c 6f 67 32 62 70 70 25  | 81215",log2bpp%|
0000c190  2a 32 2b 31 2c 32 29 3a  f4 20 4e 6f 72 6d 61 6c  |*2+1,2):. Normal|
0000c1a0  20 73 65 74 0d 26 ac 3d  20 c9 20 32 20 3a 20 6d  | set.&.= . 2 : m|
0000c1b0  6f 64 65 25 3d bb c1 22  31 38 31 39 32 30 32 31  |ode%=.."18192021|
0000c1c0  22 2c 6c 6f 67 32 62 70  70 25 2a 32 2b 31 2c 32  |",log2bpp%*2+1,2|
0000c1d0  29 3a f4 20 4d 75 6c 74  69 73 79 6e 63 20 73 65  |):. Multisync se|
0000c1e0  74 0d 26 b6 34 20 c9 20  33 20 3a 20 6d 6f 64 65  |t.&.4 . 3 : mode|
0000c1f0  25 3d 55 73 65 72 4d 6f  64 65 53 65 74 25 28 6c  |%=UserModeSet%(l|
0000c200  6f 67 32 62 70 70 25 2b  31 29 3a f4 20 55 73 65  |og2bpp%+1):. Use|
0000c210  72 20 73 65 74 0d 26 c0  05 cb 0d 26 ca 7d e7 ac  |r set.&....&.}..|
0000c220  4d 75 6c 74 69 53 79 6e  63 20 8c 20 e7 28 6d 6f  |MultiSync . .(mo|
0000c230  64 65 25 3e 3d 31 38 29  80 28 6d 6f 64 65 25 3c  |de%>=18).(mode%<|
0000c240  3d 32 38 29 20 8c 20 6d  6f 64 65 25 3d bb 28 c1  |=28) . mode%=.(.|
0000c250  22 30 30 30 38 31 32 31  35 31 35 30 30 32 34 30  |"000812151500240|
0000c260  30 30 38 31 32 31 35 22  2c 28 6d 6f 64 65 25 2d  |0081215",(mode%-|
0000c270  31 38 29 2a 32 2b 31 2c  32 29 29 3a f4 20 4d 61  |18)*2+1,2)):. Ma|
0000c280  70 20 74 6f 20 6e 6f 6e  2d 6d 75 6c 74 69 73 79  |p to non-multisy|
0000c290  6e 63 20 6d 6f 64 65 0d  26 d4 25 f2 6d 6f 64 65  |nc mode.&.%.mode|
0000c2a0  5f 63 68 61 6e 67 65 28  6d 6f 64 65 25 29 3a f4  |_change(mode%):.|
0000c2b0  20 53 65 6c 65 63 74 20  6d 6f 64 65 0d 26 de 05  | Select mode.&..|
0000c2c0  e1 0d 26 e8 05 20 0d 26  f2 18 dd f2 6d 6f 64 65  |..&.. .&....mode|
0000c2d0  5f 63 68 61 6e 67 65 28  6d 6f 64 65 25 29 0d 26  |_change(mode%).&|
0000c2e0  fc 29 f4 20 4d 6f 64 65  20 68 61 73 20 63 68 61  |.). Mode has cha|
0000c2f0  6e 67 65 64 20 6f 72 20  73 65 6c 65 63 74 20 6e  |nged or select n|
0000c300  65 77 20 6d 6f 64 65 0d  27 06 29 f4 20 49 66 20  |ew mode.'.). If |
0000c310  6d 6f 64 65 25 3e 3d 30  2c 20 6d 6f 64 65 20 6d  |mode%>=0, mode m|
0000c320  6f 64 65 25 20 69 73 20  73 65 6c 65 63 74 65 64  |ode% is selected|
0000c330  0d 27 10 4a ea 20 5f 25  2c 78 77 69 6e 64 25 2c  |.'.J. _%,xwind%,|
0000c340  79 77 69 6e 64 25 2c 6f  74 68 65 72 6d 6f 64 65  |ywind%,othermode|
0000c350  2c 63 6f 6c 6f 75 72 73  25 2c 70 6f 73 25 2c 61  |,colours%,pos%,a|
0000c360  6c 74 6d 6f 64 65 24 2c  6d 6f 64 65 63 6f 6c 73  |ltmode$,modecols|
0000c370  25 2c 73 70 72 63 6f 6c  73 25 0d 27 1a 33 c8 99  |%,sprcols%.'.3..|
0000c380  20 57 52 65 61 64 50 25  2c 2c 77 69 6d 70 70 61  | WReadP%,,wimppa|
0000c390  6c 3a f4 20 52 65 61 64  20 63 75 72 72 65 6e 74  |l:. Read current|
0000c3a0  20 57 49 4d 50 20 70 61  6c 65 74 74 65 0d 27 24  | WIMP palette.'$|
0000c3b0  1e e7 28 6d 6f 64 65 25  3e 3d 30 29 20 80 20 28  |..(mode%>=0) . (|
0000c3c0  6d 6f 64 65 25 3c 3e eb  29 20 8c 0d 27 2e 22 20  |mode%<>.) ..'." |
0000c3d0  c8 99 20 57 53 65 74 4d  25 2c 6d 6f 64 65 25 3a  |.. WSetM%,mode%:|
0000c3e0  f4 20 43 68 61 6e 67 65  20 6d 6f 64 65 0d 27 38  |. Change mode.'8|
0000c3f0  10 20 e7 6d 6f 64 65 25  3c 3e eb 20 8c 0d 27 42  |. .mode%<>. ..'B|
0000c400  47 20 20 d4 20 31 2c 2d  31 30 2c 31 38 30 2c 31  |G  . 1,-10,180,1|
0000c410  3a f4 20 41 6c 65 72 74  20 75 73 65 72 20 74 68  |:. Alert user th|
0000c420  61 74 20 27 69 64 65 61  6c 27 20 6d 6f 64 65 20  |at 'ideal' mode |
0000c430  63 6f 75 6c 64 6e 27 74  20 62 65 20 73 65 6c 65  |couldn't be sele|
0000c440  63 74 65 64 0d 27 4c 3a  20 20 63 6f 6c 6f 75 72  |cted.'L:  colour|
0000c450  73 25 3d 32 5e 28 32 5e  a4 6d 6f 64 65 5f 76 61  |s%=2^(2^.mode_va|
0000c460  72 28 6d 6f 64 65 25 2c  39 29 29 3a f4 20 43 6f  |r(mode%,9)):. Co|
0000c470  6c 6f 75 72 73 20 72 65  71 75 69 72 65 64 0d 27  |lours required.'|
0000c480  56 a8 20 20 e7 63 6f 6c  6f 75 72 73 25 3d 32 20  |V.  .colours%=2 |
0000c490  8c 20 61 6c 74 6d 6f 64  65 24 3d 22 7c 31 38 30  |. altmode$="|180|
0000c4a0  30 22 20 8b 20 e7 63 6f  6c 6f 75 72 73 25 3d 34  |0" . .colours%=4|
0000c4b0  20 8c 20 61 6c 74 6d 6f  64 65 24 3d 22 7c 31 39  | . altmode$="|19|
0000c4c0  30 38 7c 30 38 30 31 22  20 8b 20 e7 63 6f 6c 6f  |08|0801" . .colo|
0000c4d0  75 72 73 25 3d 31 36 20  8c 20 61 6c 74 6d 6f 64  |urs%=16 . altmod|
0000c4e0  65 24 3d 22 7c 32 30 31  32 7c 31 36 31 32 7c 31  |e$="|2012|1612|1|
0000c4f0  32 30 39 22 20 8b 20 e7  63 6f 6c 6f 75 72 73 25  |209" . .colours%|
0000c500  3d 32 35 36 20 8c 20 61  6c 74 6d 6f 64 65 24 3d  |=256 . altmode$=|
0000c510  22 7c 32 31 31 35 7c 32  34 31 35 7c 31 35 31 33  |"|2115|2415|1513|
0000c520  7c 31 33 31 30 22 0d 27  60 07 20 20 f5 0d 27 6a  ||1310".'`.  ..'j|
0000c530  bf 20 20 e7 eb 3d 6d 6f  64 65 25 20 8b 20 70 6f  |.  ..=mode% . po|
0000c540  73 25 3d a7 61 6c 74 6d  6f 64 65 24 2c 22 7c 22  |s%=.altmode$,"|"|
0000c550  2b c2 22 30 22 2b c3 6d  6f 64 65 25 2c 32 29 29  |+."0"+.mode%,2))|
0000c560  3a e7 70 6f 73 25 3e 30  20 8c 20 6d 6f 64 65 25  |:.pos%>0 . mode%|
0000c570  3d bb 28 c1 61 6c 74 6d  6f 64 65 24 2c 70 6f 73  |=.(.altmode$,pos|
0000c580  25 2b 33 29 29 20 8b 20  f2 65 72 72 6f 72 28 2d  |%+3)) . .error(-|
0000c590  31 2c 22 49 20 66 61 69  6c 65 64 20 74 6f 20 73  |1,"I failed to s|
0000c5a0  65 6c 65 63 74 20 74 68  65 20 69 64 65 61 6c 20  |elect the ideal |
0000c5b0  6d 6f 64 65 2c 20 6e 6f  72 20 61 6e 79 20 61 6c  |mode, nor any al|
0000c5c0  74 65 72 6e 61 74 69 76  65 20 6d 6f 64 65 20 21  |ternative mode !|
0000c5d0  20 4e 6f 77 20 79 6f 75  20 74 72 79 20 69 74 20  | Now you try it |
0000c5e0  21 22 29 3a 6d 6f 64 65  25 3d 2d 31 0d 27 74 23  |!"):mode%=-1.'t#|
0000c5f0  20 20 c8 99 20 57 53 65  74 4d 25 2c 6d 6f 64 65  |  .. WSetM%,mode|
0000c600  25 3a f4 20 43 68 61 6e  67 65 20 6d 6f 64 65 0d  |%:. Change mode.|
0000c610  27 7e 1d 20 20 fd 20 28  eb 3d 6d 6f 64 65 25 29  |'~.  . (.=mode%)|
0000c620  20 84 20 28 6d 6f 64 65  25 3c 30 29 0d 27 88 06  | . (mode%<0).'..|
0000c630  20 cd 0d 27 92 05 cd 0d  27 9c 40 6f 74 68 65 72  | ..'....'.@other|
0000c640  6d 6f 64 65 3d 28 eb 3c  3e 43 75 72 72 4d 6f 64  |mode=(.<>CurrMod|
0000c650  65 25 29 3a 43 75 72 72  4d 6f 64 65 25 3d eb 3a  |e%):CurrMode%=.:|
0000c660  f4 20 4d 6f 64 65 20 6f  74 68 65 72 20 74 68 61  |. Mode other tha|
0000c670  6e 20 6f 6c 64 20 3f 0d  27 a6 41 58 65 69 67 25  |n old ?.'.AXeig%|
0000c680  3d a4 6d 6f 64 65 5f 76  61 72 28 eb 2c 34 29 3a  |=.mode_var(.,4):|
0000c690  59 65 69 67 25 3d a4 6d  6f 64 65 5f 76 61 72 28  |Yeig%=.mode_var(|
0000c6a0  eb 2c 35 29 3a f4 20 52  65 61 64 20 58 2f 59 45  |.,5):. Read X/YE|
0000c6b0  69 67 46 61 63 74 6f 72  0d 27 b0 42 78 77 69 6e  |igFactor.'.Bxwin|
0000c6c0  64 25 3d a4 6d 6f 64 65  5f 76 61 72 28 eb 2c 31  |d%=.mode_var(.,1|
0000c6d0  31 29 2b 31 3a 79 77 69  6e 64 25 3d a4 6d 6f 64  |1)+1:ywind%=.mod|
0000c6e0  65 5f 76 61 72 28 eb 2c  31 32 29 2b 31 3a f4 20  |e_var(.,12)+1:. |
0000c6f0  52 65 73 6f 6c 75 74 69  6f 6e 0d 27 ba 41 53 63  |Resolution.'.ASc|
0000c700  72 57 25 3d 28 31 3c 3c  58 65 69 67 25 29 2a 78  |rW%=(1<<Xeig%)*x|
0000c710  77 69 6e 64 25 3a 53 63  72 48 25 3d 28 31 3c 3c  |wind%:ScrH%=(1<<|
0000c720  59 65 69 67 25 29 2a 79  77 69 6e 64 25 3a f4 20  |Yeig%)*ywind%:. |
0000c730  53 63 72 65 65 6e 20 73  69 7a 65 0d 27 c4 0a e7  |Screen size.'...|
0000c740  49 6d 67 20 8c 0d 27 ce  2b 20 f2 73 65 74 5f 74  |Img ..'.+ .set_t|
0000c750  72 61 6e 73 3a f4 20 52  65 2d 73 65 74 20 73 70  |rans:. Re-set sp|
0000c760  72 69 74 65 20 74 72 61  6e 73 6c 61 74 69 6f 6e  |rite translation|
0000c770  0d 27 d8 41 20 e7 41 75  74 6f 50 61 6c 20 8c 20  |.'.A .AutoPal . |
0000c780  f2 73 65 74 5f 70 61 6c  65 74 74 65 28 31 29 3a  |.set_palette(1):|
0000c790  f4 20 53 65 6c 65 63 74  20 69 6d 61 67 65 20 70  |. Select image p|
0000c7a0  61 6c 65 74 74 65 20 69  66 20 65 6e 61 62 6c 65  |alette if enable|
0000c7b0  64 0d 27 e2 23 20 e7 6f  74 68 65 72 6d 6f 64 65  |d.'.# .othermode|
0000c7c0  20 8c 20 f2 6e 65 77 5f  69 6d 61 67 65 5f 77 69  | . .new_image_wi|
0000c7d0  6e 64 6f 77 0d 27 ec 05  cd 0d 27 f6 05 e1 0d 28  |ndow.'....'....(|
0000c7e0  00 05 20 0d 28 0a 0f dd  f2 73 65 74 5f 74 72 61  |.. .(....set_tra|
0000c7f0  6e 73 0d 28 14 43 f4 20  53 65 74 73 20 74 72 61  |ns.(.C. Sets tra|
0000c800  6e 73 6c 61 74 69 6f 6e  20 66 61 63 74 6f 72 73  |nslation factors|
0000c810  20 28 74 72 61 6e 73 74  61 62 20 26 20 70 61 6c  | (transtab & pal|
0000c820  65 74 74 65 29 20 66 6f  72 20 73 70 72 69 74 65  |ette) for sprite|
0000c830  20 70 6c 6f 74 0d 28 1e  21 ea 20 6d 63 25 2c 73  | plot.(.!. mc%,s|
0000c840  63 25 2c 76 25 2c 63 25  2c 67 76 25 2c 67 69 25  |c%,v%,c%,gv%,gi%|
0000c850  2c 69 25 2c 70 25 0d 28  28 3c 6d 63 25 3d 32 5e  |,i%,p%.((<mc%=2^|
0000c860  28 32 5e a4 6c 6f 67 32  42 50 50 29 3a 73 63 25  |(2^.log2BPP):sc%|
0000c870  3d 32 5e 53 70 72 43 6f  6c 62 69 74 73 25 3a f4  |=2^SprColbits%:.|
0000c880  20 43 6f 6c 6f 75 72 73  20 61 76 61 69 6c 61 62  | Colours availab|
0000c890  6c 65 0d 28 32 47 53 68  6f 77 50 61 6c 25 28 29  |le.(2GShowPal%()|
0000c8a0  3d 49 6d 67 50 61 6c 25  28 29 3a 53 68 6f 77 50  |=ImgPal%():ShowP|
0000c8b0  61 6c 25 28 30 29 3d 32  5e 53 68 6f 77 50 61 6c  |al%(0)=2^ShowPal|
0000c8c0  25 28 30 29 3a f4 20 43  6f 70 79 20 69 6d 61 67  |%(0):. Copy imag|
0000c8d0  65 20 70 61 6c 65 74 74  65 0d 28 3c 25 e7 6d 63  |e palette.(<%.mc|
0000c8e0  25 3d 73 63 25 20 8c 20  54 72 61 6e 73 54 61 62  |%=sc% . TransTab|
0000c8f0  49 64 3d b9 3a e1 3a f4  20 49 64 65 61 6c 0d 28  |Id=.:.:. Ideal.(|
0000c900  46 25 54 72 61 6e 73 54  61 62 49 64 3d a3 3a f4  |F%TransTabId=.:.|
0000c910  20 41 6c 77 61 79 73 20  74 72 61 6e 73 6c 61 74  | Always translat|
0000c920  69 6f 6e 0d 28 50 0e e7  6d 63 25 3e 73 63 25 20  |ion.(P..mc%>sc% |
0000c930  8c 0d 28 5a 3a 20 e7 6d  63 25 3c 3d 31 36 20 8c  |..(Z: .mc%<=16 .|
0000c940  20 e3 20 63 25 3d 30 20  b8 20 73 63 25 2d 31 3a  | . c%=0 . sc%-1:|
0000c950  74 72 61 6e 73 74 61 62  25 3f 63 25 3d 63 25 80  |transtab%?c%=c%.|
0000c960  28 6d 63 25 2d 31 29 3a  ed 3a e1 0d 28 64 3b 20  |(mc%-1):.:..(d; |
0000c970  c8 99 20 22 54 72 61 6e  73 6c 61 74 6f 72 5f 50  |.. "Translator_P|
0000c980  61 6c 65 74 74 65 22 2c  38 2c 64 75 6d 25 2c 31  |alette",8,dum%,1|
0000c990  3a f4 20 47 65 74 20 63  75 72 72 65 6e 74 20 70  |:. Get current p|
0000c9a0  61 6c 65 74 74 65 0d 28  6e 5f 20 e3 20 63 25 3d  |alette.(n_ . c%=|
0000c9b0  30 20 b8 20 73 63 25 2d  31 3a c8 99 20 22 54 72  |0 . sc%-1:.. "Tr|
0000c9c0  61 6e 73 6c 61 74 6f 72  5f 43 6c 6f 73 65 73 74  |anslator_Closest|
0000c9d0  54 6f 52 47 42 22 2c 53  68 6f 77 50 61 6c 25 28  |ToRGB",ShowPal%(|
0000c9e0  63 25 2b 31 29 2c 32 35  36 2c 64 75 6d 25 20 b8  |c%+1),256,dum% .|
0000c9f0  20 76 25 3a 74 72 61 6e  73 74 61 62 25 3f 63 25  | v%:transtab%?c%|
0000ca00  3d 76 25 3a ed 0d 28 78  31 cc 20 f4 20 4c 65 73  |=v%:..(x1. . Les|
0000ca10  73 20 63 6f 6c 6f 75 72  73 20 74 68 61 6e 20 72  |s colours than r|
0000ca20  65 71 75 69 72 65 64 2c  20 73 6f 20 63 6f 6d 70  |equired, so comp|
0000ca30  72 6f 6d 69 73 65 0d 28  82 85 20 e7 ac 46 72 65  |romise.(.. ..Fre|
0000ca40  71 43 61 6c 63 20 8c 20  f2 68 6f 75 72 5f 6f 6e  |qCalc . .hour_on|
0000ca50  3a c8 99 20 22 54 72 61  6e 73 6c 61 74 6f 72 5f  |:.. "Translator_|
0000ca60  50 69 78 65 6c 46 72 65  71 22 2c 53 70 72 50 74  |PixelFreq",SprPt|
0000ca70  72 25 2c 66 72 65 71 25  3a f2 68 6f 75 72 5f 6f  |r%,freq%:.hour_o|
0000ca80  66 66 3a 46 72 65 71 43  61 6c 63 3d b9 3a f4 20  |ff:FreqCalc=.:. |
0000ca90  43 61 6c 63 75 6c 61 74  65 20 70 69 78 65 6c 20  |Calculate pixel |
0000caa0  66 72 65 71 75 65 6e 63  69 65 73 20 69 6e 20 69  |frequencies in i|
0000cab0  6d 61 67 65 20 73 70 72  69 74 65 0d 28 8c 1c 20  |mage sprite.(.. |
0000cac0  f2 68 6f 75 72 5f 6f 6e  3a f4 20 48 6f 75 72 67  |.hour_on:. Hourg|
0000cad0  6c 61 73 73 20 6f 6e 0d  28 96 43 20 70 25 3d 64  |lass on.(.C p%=d|
0000cae0  75 6d 25 3a e3 20 63 25  3d 31 20 b8 20 73 63 25  |um%:. c%=1 . sc%|
0000caf0  3a 21 70 25 3d 49 6d 67  50 61 6c 25 28 63 25 29  |:!p%=ImgPal%(c%)|
0000cb00  3a 70 25 2b 3d 34 3a ed  3a f4 20 49 6d 61 67 65  |:p%+=4:.:. Image|
0000cb10  27 73 20 70 61 6c 65 74  74 65 0d 28 a0 3a 20 f4  |'s palette.(.: .|
0000cb20  20 43 61 6c 63 75 6c 61  74 65 20 74 72 61 6e 73  | Calculate trans|
0000cb30  6c 61 74 69 6f 6e 20 74  61 62 6c 65 20 61 6e 64  |lation table and|
0000cb40  20 70 61 6c 65 74 74 65  20 66 6f 72 20 64 69 73  | palette for dis|
0000cb50  70 6c 61 79 0d 28 aa 4b  20 c8 99 20 22 54 72 61  |play.(.K .. "Tra|
0000cb60  6e 73 6c 61 74 6f 72 5f  43 61 6c 63 54 72 61 6e  |nslator_CalcTran|
0000cb70  73 22 2c 73 63 25 2c 66  72 65 71 25 2c 64 75 6d  |s",sc%,freq%,dum|
0000cb80  25 2c 6d 63 25 2c 74 72  61 6e 73 74 61 62 25 2c  |%,mc%,transtab%,|
0000cb90  61 72 67 25 20 b8 20 2c  2c 2c 75 73 65 64 25 0d  |arg% . ,,,used%.|
0000cba0  28 b4 43 20 70 25 3d 61  72 67 25 3a e3 20 63 25  |(.C p%=arg%:. c%|
0000cbb0  3d 31 20 b8 20 75 73 65  64 25 3a 53 68 6f 77 50  |=1 . used%:ShowP|
0000cbc0  61 6c 25 28 63 25 29 3d  21 70 25 3a 70 25 2b 3d  |al%(c%)=!p%:p%+=|
0000cbd0  34 3a ed 3a f4 20 52 65  61 64 20 70 61 6c 65 74  |4:.:. Read palet|
0000cbe0  74 65 0d 28 be 38 20 53  68 6f 77 50 61 6c 25 28  |te.(.8 ShowPal%(|
0000cbf0  30 29 3d 75 73 65 64 25  3a f4 20 43 6f 6c 6f 75  |0)=used%:. Colou|
0000cc00  72 73 20 75 73 65 64 20  69 6e 20 64 69 73 70 6c  |rs used in displ|
0000cc10  61 79 20 70 61 6c 65 74  74 65 0d 28 c8 1e 20 f2  |ay palette.(.. .|
0000cc20  68 6f 75 72 5f 6f 66 66  3a f4 20 48 6f 75 72 67  |hour_off:. Hourg|
0000cc30  6c 61 73 73 20 6f 66 66  0d 28 d2 05 cd 0d 28 dc  |lass off.(....(.|
0000cc40  05 e1 0d 28 e6 05 20 0d  28 f0 0e dd f2 61 75 74  |...(.. .(....aut|
0000cc50  6f 7a 6f 6f 6d 0d 28 fa  33 f4 20 41 64 6a 75 73  |ozoom.(.3. Adjus|
0000cc60  74 20 7a 6f 6f 6d 20 66  61 63 74 6f 72 20 66 6f  |t zoom factor fo|
0000cc70  72 20 61 75 74 6f 20 7a  6f 6f 6d 20 28 69 66 20  |r auto zoom (if |
0000cc80  65 6e 61 62 6c 65 64 29  0d 29 04 08 ea 20 5f 25  |enabled).)... _%|
0000cc90  0d 29 0e 0f e7 41 75 74  6f 5a 6f 6f 6d 20 8c 0d  |.)...AutoZoom ..|
0000cca0  29 18 37 20 5f 25 3d a4  73 70 72 57 2a 5a 6f 6f  |).7 _%=.sprW*Zoo|
0000ccb0  6d 58 3a c8 95 20 5f 25  3e 53 63 72 57 25 3a 5a  |mX:.. _%>ScrW%:Z|
0000ccc0  6f 6f 6d 58 3d 5a 6f 6f  6d 58 2f 32 3a 5f 25 3d  |oomX=ZoomX/2:_%=|
0000ccd0  5f 25 2f 32 3a ce 0d 29  22 36 20 e7 5a 6f 6f 6d  |_%/2:..)"6 .Zoom|
0000cce0  58 3c 31 20 8c 20 c8 95  20 5f 25 2a 32 3c 3d 53  |X<1 . .. _%*2<=S|
0000ccf0  63 72 57 25 3a 5a 6f 6f  6d 58 3d 5a 6f 6f 6d 58  |crW%:ZoomX=ZoomX|
0000cd00  2a 32 3a 5f 25 3d 5f 25  2a 32 3a ce 0d 29 2c 37  |*2:_%=_%*2:..),7|
0000cd10  20 5f 25 3d a4 73 70 72  48 2a 5a 6f 6f 6d 59 3a  | _%=.sprH*ZoomY:|
0000cd20  c8 95 20 5f 25 3e 53 63  72 48 25 3a 5a 6f 6f 6d  |.. _%>ScrH%:Zoom|
0000cd30  59 3d 5a 6f 6f 6d 59 2f  32 3a 5f 25 3d 5f 25 2f  |Y=ZoomY/2:_%=_%/|
0000cd40  32 3a ce 0d 29 36 36 20  e7 5a 6f 6f 6d 59 3c 31  |2:..)66 .ZoomY<1|
0000cd50  20 8c 20 c8 95 20 5f 25  2a 32 3c 3d 53 63 72 48  | . .. _%*2<=ScrH|
0000cd60  25 3a 5a 6f 6f 6d 59 3d  5a 6f 6f 6d 59 2a 32 3a  |%:ZoomY=ZoomY*2:|
0000cd70  5f 25 3d 5f 25 2a 32 3a  ce 0d 29 40 05 cd 0d 29  |_%=_%*2:..)@...)|
0000cd80  4a 05 e1 0d 29 54 05 20  0d 29 5e 23 dd f2 70 6c  |J...)T. .)^#..pl|
0000cd90  6f 74 5f 69 6d 61 67 65  28 78 25 2c 79 25 2c 61  |ot_image(x%,y%,a|
0000cda0  63 74 25 2c 73 63 61 6c  65 25 29 0d 29 68 2f f4  |ct%,scale%).)h/.|
0000cdb0  20 50 6c 6f 74 73 20 69  6d 61 67 65 20 73 70 72  | Plots image spr|
0000cdc0  69 74 65 20 77 69 74 68  20 74 72 61 6e 73 6c 61  |ite with transla|
0000cdd0  74 69 6f 6e 20 74 61 62  6c 65 0d 29 72 7f e7 54  |tion table.)r..T|
0000cde0  72 61 6e 73 54 61 62 49  64 20 8c 20 c8 99 20 4f  |ransTabId . .. O|
0000cdf0  53 53 70 6f 70 25 2c 35  36 34 2c 53 70 72 69 74  |SSpop%,564,Sprit|
0000ce00  65 25 2c 53 70 72 50 74  72 25 2c 78 25 2c 79 25  |e%,SprPtr%,x%,y%|
0000ce10  2c 61 63 74 25 2c 73 63  61 6c 65 25 20 8b 20 c8  |,act%,scale% . .|
0000ce20  99 20 4f 53 53 70 6f 70  25 2c 35 36 34 2c 53 70  |. OSSpop%,564,Sp|
0000ce30  72 69 74 65 25 2c 53 70  72 50 74 72 25 2c 78 25  |rite%,SprPtr%,x%|
0000ce40  2c 79 25 2c 61 63 74 25  2c 73 63 61 6c 65 25 2c  |,y%,act%,scale%,|
0000ce50  74 72 61 6e 73 74 61 62  25 0d 29 7c 05 e1 0d 29  |transtab%.)|...)|
0000ce60  86 05 20 0d 29 90 13 dd  f2 75 6e 70 61 63 6b 28  |.. .)....unpack(|
0000ce70  74 79 70 65 24 29 0d 29  9a 2b f4 20 55 6e 70 61  |type$).).+. Unpa|
0000ce80  63 6b 73 20 69 6d 61 67  65 20 28 66 69 6e 61 6c  |cks image (final|
0000ce90  20 75 6e 70 61 63 6b 69  6e 67 20 70 68 61 73 65  | unpacking phase|
0000cea0  29 0d 29 a4 11 ea 20 63  25 2c 62 70 70 25 2c 70  |).)... c%,bpp%,p|
0000ceb0  63 25 0d 29 ae 29 62 70  70 25 3d 49 6e 50 61 6c  |c%.).)bpp%=InPal|
0000cec0  25 28 30 29 3a f4 20 42  69 74 73 20 70 65 72 20  |%(0):. Bits per |
0000ced0  70 69 78 65 6c 20 69 6e  70 75 74 0d 29 b8 34 f2  |pixel input.).4.|
0000cee0  76 61 72 28 22 69 6e 62  69 22 2c 62 70 70 25 29  |var("inbi",bpp%)|
0000cef0  3a f4 20 49 6e 70 75 74  20 28 69 6d 61 67 65 29  |:. Input (image)|
0000cf00  20 62 69 74 73 20 70 65  72 20 70 69 78 65 6c 0d  | bits per pixel.|
0000cf10  29 c2 26 f2 76 61 72 28  22 62 77 68 69 22 2c 42  |).&.var("bwhi",B|
0000cf20  6c 61 63 6b 57 68 69 74  65 29 3a f4 20 42 2f 77  |lackWhite):. B/w|
0000cf30  20 66 6c 61 67 0d 29 cc  31 f2 76 61 72 28 22 65  | flag.).1.var("e|
0000cf40  73 70 72 22 2c 45 72 72  53 70 72 65 61 64 29 3a  |spr",ErrSpread):|
0000cf50  f4 20 45 72 72 6f 72 20  73 70 72 65 61 64 69 6e  |. Error spreadin|
0000cf60  67 20 66 6c 61 67 0d 29  d6 26 f2 76 61 72 28 22  |g flag.).&.var("|
0000cf70  7a 69 67 7a 22 2c 5a 69  67 5a 61 67 29 3a f4 20  |zigz",ZigZag):. |
0000cf80  5a 69 67 20 7a 61 67 20  66 6c 61 67 0d 29 e0 2c  |Zig zag flag.).,|
0000cf90  f2 76 61 72 28 22 69 6e  76 74 22 2c 49 6e 76 65  |.var("invt",Inve|
0000cfa0  72 74 52 47 42 29 3a f4  20 49 6e 76 65 72 74 20  |rtRGB):. Invert |
0000cfb0  52 47 42 20 66 6c 61 67  0d 29 ea 2a f2 76 61 72  |RGB flag.).*.var|
0000cfc0  28 22 70 68 61 73 22 2c  31 29 3a f4 20 46 69 6e  |("phas",1):. Fin|
0000cfd0  61 6c 20 75 6e 70 61 63  6b 69 6e 67 20 70 68 61  |al unpacking pha|
0000cfe0  73 65 0d 29 f4 26 f2 76  61 72 28 22 72 67 62 62  |se.).&.var("rgbb|
0000cff0  22 2c 52 47 42 62 69 74  73 25 29 3a f4 20 52 2f  |",RGBbits%):. R/|
0000d000  47 2f 42 20 62 69 74 73  0d 29 fe 3d f2 76 61 72  |G/B bits.).=.var|
0000d010  28 22 79 6d 75 6c 22 2c  59 4d 75 6c 25 29 3a f2  |("ymul",YMul%):.|
0000d020  76 61 72 28 22 79 64 69  76 22 2c 59 44 69 76 25  |var("ydiv",YDiv%|
0000d030  29 3a f4 20 53 63 61 6c  69 6e 67 20 66 61 63 74  |):. Scaling fact|
0000d040  6f 72 73 20 59 0d 2a 08  3d f2 76 61 72 28 22 78  |ors Y.*.=.var("x|
0000d050  6d 75 6c 22 2c 58 4d 75  6c 25 29 3a f2 76 61 72  |mul",XMul%):.var|
0000d060  28 22 78 64 69 76 22 2c  58 44 69 76 25 29 3a f4  |("xdiv",XDiv%):.|
0000d070  20 53 63 61 6c 69 6e 67  20 66 61 63 74 6f 72 73  | Scaling factors|
0000d080  20 58 0d 2a 12 38 f4 20  53 65 74 20 70 61 6c 65  | X.*.8. Set pale|
0000d090  74 74 65 20 28 69 66 20  72 65 6c 65 76 61 6e 74  |tte (if relevant|
0000d0a0  2c 20 69 2e 65 2e 20 6e  6f 74 20 70 75 72 65 20  |, i.e. not pure |
0000d0b0  52 47 42 20 69 6e 70 75  74 29 0d 2a 1c 3f e7 62  |RGB input).*.?.b|
0000d0c0  70 70 25 3c 3d 38 20 8c  20 e3 20 63 25 3d 30 20  |pp%<=8 . . c%=0 |
0000d0d0  b8 20 32 5e 62 70 70 25  2d 31 3a 70 61 6c 72 67  |. 2^bpp%-1:palrg|
0000d0e0  62 25 21 28 63 25 3c 3c  32 29 3d 49 6e 50 61 6c  |b%!(c%<<2)=InPal|
0000d0f0  25 28 63 25 2b 31 29 3a  ed 0d 2a 26 39 e7 4f 75  |%(c%+1):..*&9.Ou|
0000d100  74 4d 6f 64 65 3d 31 20  8c 20 70 63 25 3d 30 20  |tMode=1 . pc%=0 |
0000d110  8b 20 70 63 25 3d 4f 75  74 50 61 6c 3a f4 20 53  |. pc%=OutPal:. S|
0000d120  65 6c 65 63 74 20 70 61  6c 65 74 74 65 20 63 6f  |elect palette co|
0000d130  64 65 0d 2a 30 10 e7 43  6c 65 61 72 46 69 6c 65  |de.*0..ClearFile|
0000d140  20 8c 0d 2a 3a 39 20 4f  75 74 3d ae 28 43 6c 65  | ..*:9 Out=.(Cle|
0000d150  61 72 53 61 76 65 24 29  3a f2 76 61 72 28 22 63  |arSave$):.var("c|
0000d160  61 70 74 22 2c 4f 75 74  29 3a f4 20 4f 70 65 6e  |apt",Out):. Open|
0000d170  20 43 6c 65 61 72 20 66  69 6c 65 0d 2a 44 75 20  | Clear file.*Du |
0000d180  f2 6f 73 74 72 69 6e 67  28 4f 75 74 2c 22 54 72  |.ostring(Out,"Tr|
0000d190  61 6e 73 6c 61 74 6f 72  22 29 3a f2 6f 28 4f 75  |anslator"):.o(Ou|
0000d1a0  74 2c 30 2c 31 29 3a f2  6f 28 4f 75 74 2c 36 30  |t,0,1):.o(Out,60|
0000d1b0  30 2c 34 29 3a f2 6f 28  4f 75 74 2c 53 70 72 57  |0,4):.o(Out,SprW|
0000d1c0  25 2c 34 29 3a f2 6f 28  4f 75 74 2c 53 70 72 48  |%,4):.o(Out,SprH|
0000d1d0  25 2c 34 29 3a f2 6f 28  4f 75 74 2c 49 6d 67 42  |%,4):.o(Out,ImgB|
0000d1e0  69 74 73 25 2c 34 29 3a  f4 20 48 65 61 64 65 72  |its%,4):. Header|
0000d1f0  0d 2a 4e 6b 20 e7 49 6d  67 42 69 74 73 25 3c 3d  |.*Nk .ImgBits%<=|
0000d200  38 20 8c 20 e3 20 63 25  3d 31 20 b8 20 32 5e 49  |8 . . c%=1 . 2^I|
0000d210  6d 67 42 69 74 73 25 3a  72 67 62 25 3d 49 6e 50  |mgBits%:rgb%=InP|
0000d220  61 6c 25 28 63 25 29 3a  d5 23 4f 75 74 2c 72 67  |al%(c%):.#Out,rg|
0000d230  62 25 3e 3e 31 36 3a d5  23 4f 75 74 2c 72 67 62  |b%>>16:.#Out,rgb|
0000d240  25 3e 3e 38 3a d5 23 4f  75 74 2c 72 67 62 25 3a  |%>>8:.#Out,rgb%:|
0000d250  ed 3a f4 20 50 61 6c 65  74 74 65 0d 2a 58 05 cd  |.:. Palette.*X..|
0000d260  0d 2a 62 3a c8 99 20 22  54 72 61 6e 73 6c 61 74  |.*b:.. "Translat|
0000d270  6f 72 5f 55 6e 70 61 63  6b 50 72 65 22 2c 70 61  |or_UnpackPre",pa|
0000d280  6c 72 67 62 25 2c 70 63  25 3a f4 20 49 6e 69 74  |lrgb%,pc%:. Init|
0000d290  20 75 6e 70 61 63 6b 69  6e 67 0d 2a 6c 68 49 6d  | unpacking.*lhIm|
0000d2a0  67 50 61 6c 25 28 30 29  3d 53 70 72 43 6f 6c 62  |gPal%(0)=SprColb|
0000d2b0  69 74 73 25 3a e3 20 63  25 3d 30 20 b8 20 32 5e  |its%:. c%=0 . 2^|
0000d2c0  53 70 72 43 6f 6c 62 69  74 73 25 2d 31 3a 49 6d  |SprColbits%-1:Im|
0000d2d0  67 50 61 6c 25 28 63 25  2b 31 29 3d 70 61 6c 72  |gPal%(c%+1)=palr|
0000d2e0  67 62 25 21 28 63 25 3c  3c 32 29 3a ed 3a f4 20  |gb%!(c%<<2):.:. |
0000d2f0  52 65 61 64 20 69 6d 61  67 65 20 70 61 6c 65 74  |Read image palet|
0000d300  74 65 0d 2a 76 37 f2 75  6e 70 61 63 6b 5f 70 68  |te.*v7.unpack_ph|
0000d310  61 73 65 28 74 79 70 65  24 2c 31 29 3a f4 20 45  |ase(type$,1):. E|
0000d320  78 65 63 75 74 65 20 66  69 6e 61 6c 20 75 6e 70  |xecute final unp|
0000d330  61 63 6b 20 70 68 61 73  65 0d 2a 80 10 e7 43 6c  |ack phase.*...Cl|
0000d340  65 61 72 46 69 6c 65 20  8c 0d 2a 8a a9 20 43 6c  |earFile ..*.. Cl|
0000d350  65 61 72 46 69 6c 65 3d  a3 3a d9 23 4f 75 74 3a  |earFile=.:.#Out:|
0000d360  e7 a4 76 61 72 28 22 63  61 70 74 22 29 3d 30 20  |..var("capt")=0 |
0000d370  8c 20 c8 99 20 22 4f 53  5f 46 69 6c 65 22 2c 36  |. .. "OS_File",6|
0000d380  2c 43 6c 65 61 72 53 61  76 65 24 3a f2 65 72 72  |,ClearSave$:.err|
0000d390  6f 72 28 2d 31 2c 22 45  72 72 6f 72 20 64 75 72  |or(-1,"Error dur|
0000d3a0  69 6e 67 20 6f 75 74 70  75 74 20 74 6f 20 43 6c  |ing output to Cl|
0000d3b0  65 61 72 20 66 69 6c 65  20 3a 20 22 2b a4 73 74  |ear file : "+.st|
0000d3c0  72 69 6e 67 28 a4 76 61  72 28 22 65 72 72 6f 22  |ring(.var("erro"|
0000d3d0  29 2b 34 29 29 3a f4 20  52 65 6d 6f 76 65 20 43  |)+4)):. Remove C|
0000d3e0  6c 65 61 72 20 66 69 6c  65 20 69 66 20 65 72 72  |lear file if err|
0000d3f0  6f 72 0d 2a 94 05 cd 0d  2a 9e 05 e1 0d 2a a8 05  |or.*....*....*..|
0000d400  20 0d 2a b2 20 dd f2 75  6e 70 61 63 6b 5f 70 68  | .*. ..unpack_ph|
0000d410  61 73 65 28 74 79 70 65  24 2c 70 68 61 73 65 25  |ase(type$,phase%|
0000d420  29 0d 2a bc 35 f4 20 45  78 65 63 75 74 65 73 20  |).*.5. Executes |
0000d430  75 6e 70 61 63 6b 20 70  68 61 73 65 2c 20 62 6c  |unpack phase, bl|
0000d440  61 6e 6b 73 20 73 63 72  65 65 6e 20 69 66 20 65  |anks screen if e|
0000d450  6e 61 62 6c 65 64 0d 2a  c6 2d f2 76 61 72 28 22  |nabled.*.-.var("|
0000d460  70 68 61 73 22 2c 70 68  61 73 65 25 29 3a f4 20  |phas",phase%):. |
0000d470  53 65 74 20 75 6e 70 61  63 6b 69 6e 67 20 70 68  |Set unpacking ph|
0000d480  61 73 65 0d 2a d0 2b 24  64 75 6d 25 3d c0 74 79  |ase.*.+$dum%=.ty|
0000d490  70 65 24 2b 22 20 20 20  20 22 2c 34 29 3a f4 20  |pe$+"    ",4):. |
0000d4a0  54 79 70 65 20 74 6f 20  75 6e 70 61 63 6b 0d 2a  |Type to unpack.*|
0000d4b0  da 3d e7 42 6c 61 6e 6b  69 6e 67 20 8c 20 c8 99  |.=.Blanking . ..|
0000d4c0  20 22 54 72 61 6e 73 6c  61 74 6f 72 5f 56 69 64  | "Translator_Vid|
0000d4d0  65 6f 44 4d 41 22 2c 30  3a f4 20 42 6c 61 6e 6b  |eoDMA",0:. Blank|
0000d4e0  20 69 66 20 65 6e 61 62  6c 65 64 0d 2a e4 37 c8  | if enabled.*.7.|
0000d4f0  99 20 22 54 72 61 6e 73  6c 61 74 6f 72 5f 55 6e  |. "Translator_Un|
0000d500  70 61 63 6b 22 2c 21 64  75 6d 25 3a f4 20 45 78  |pack",!dum%:. Ex|
0000d510  65 63 75 74 65 20 75 6e  70 61 63 6b 20 70 68 61  |ecute unpack pha|
0000d520  73 65 0d 2a ee 41 e7 42  6c 61 6e 6b 69 6e 67 20  |se.*.A.Blanking |
0000d530  8c 20 c8 99 20 22 54 72  61 6e 73 6c 61 74 6f 72  |. .. "Translator|
0000d540  5f 56 69 64 65 6f 44 4d  41 22 2c 31 3a f4 20 52  |_VideoDMA",1:. R|
0000d550  65 2d 65 6e 61 62 6c 65  20 69 66 20 62 6c 61 6e  |e-enable if blan|
0000d560  6b 65 64 0d 2a f8 05 e1  0d 2b 02 05 20 0d 2b 0c  |ked.*....+.. .+.|
0000d570  1b dd f2 73 65 74 5f 70  61 6c 65 74 74 65 28 70  |...set_palette(p|
0000d580  61 6c 65 74 74 65 25 29  0d 2b 16 2a f4 20 53 65  |alette%).+.*. Se|
0000d590  74 73 20 61 20 70 61 6c  65 74 74 65 20 61 63 63  |ts a palette acc|
0000d5a0  6f 72 64 69 6e 67 20 74  6f 20 70 61 6c 65 74 74  |ording to palett|
0000d5b0  65 25 0d 2b 20 1a f4 20  20 30 20 2d 20 44 65 73  |e%.+ ..  0 - Des|
0000d5c0  6b 74 6f 70 20 70 61 6c  65 74 74 65 0d 2b 2a 49  |ktop palette.+*I|
0000d5d0  f4 20 20 31 20 2d 20 49  6d 61 67 65 27 73 20 6f  |.  1 - Image's o|
0000d5e0  77 6e 20 70 61 6c 65 74  74 65 20 28 77 68 65 6e  |wn palette (when|
0000d5f0  20 70 6f 73 73 69 62 6c  65 2c 20 65 6c 73 65 20  | possible, else |
0000d600  64 65 73 6b 74 6f 70 20  70 61 6c 65 74 74 65 20  |desktop palette |
0000d610  75 73 65 64 29 0d 2b 34  08 ea 20 63 25 0d 2b 3e  |used).+4.. c%.+>|
0000d620  11 c8 8e 20 70 61 6c 65  74 74 65 25 20 ca 0d 2b  |... palette% ..+|
0000d630  48 1d 20 c9 20 30 20 3a  20 c8 99 20 57 53 65 74  |H. . 0 : .. WSet|
0000d640  50 25 2c 2c 77 69 6d 70  70 61 6c 0d 2b 52 74 20  |P%,,wimppal.+Rt |
0000d650  c9 20 31 20 3a 20 e7 a4  63 32 35 36 20 8b 20 e3  |. 1 : ..c256 . .|
0000d660  20 63 25 3d 30 20 b8 20  53 68 6f 77 50 61 6c 25  | c%=0 . ShowPal%|
0000d670  28 30 29 2d 31 3a 64 75  6d 25 21 28 63 25 3c 3c  |(0)-1:dum%!(c%<<|
0000d680  32 29 3d 53 68 6f 77 50  61 6c 25 28 63 25 2b 31  |2)=ShowPal%(c%+1|
0000d690  29 3a ed 3a c8 99 20 22  54 72 61 6e 73 6c 61 74  |):.:.. "Translat|
0000d6a0  6f 72 5f 53 65 74 50 61  6c 65 74 74 65 22 2c 53  |or_SetPalette",S|
0000d6b0  68 6f 77 50 61 6c 25 28  30 29 2c 64 75 6d 25 0d  |howPal%(0),dum%.|
0000d6c0  2b 5c 05 cb 0d 2b 66 05  e1 0d 2b 70 05 20 0d 2b  |+\...+f...+p. .+|
0000d6d0  7a 25 dd f2 73 74 61 6e  64 61 72 64 5f 70 61 6c  |z%..standard_pal|
0000d6e0  65 74 74 65 28 f8 20 50  61 6c 25 28 29 2c 62 70  |ette(. Pal%(),bp|
0000d6f0  70 25 29 0d 2b 84 48 f4  20 53 65 74 73 20 61 20  |p%).+.H. Sets a |
0000d700  70 61 6c 65 74 74 65 20  74 6f 20 73 74 61 6e 64  |palette to stand|
0000d710  61 72 64 20 41 72 63 68  69 6d 65 64 65 73 20 32  |ard Archimedes 2|
0000d720  2c 34 2c 31 36 20 6f 72  20 32 35 36 20 63 6f 6c  |,4,16 or 256 col|
0000d730  6f 75 72 20 70 61 6c 65  74 74 65 0d 2b 8e 0b ea  |our palette.+...|
0000d740  20 63 25 2c 70 25 0d 2b  98 44 c8 99 20 22 54 72  | c%,p%.+.D.. "Tr|
0000d750  61 6e 73 6c 61 74 6f 72  5f 50 61 6c 65 74 74 65  |anslator_Palette|
0000d760  22 2c 62 70 70 25 2c 64  75 6d 25 2c 32 3a f4 20  |",bpp%,dum%,2:. |
0000d770  43 61 6c 63 75 6c 61 74  65 20 73 74 61 6e 64 61  |Calculate standa|
0000d780  72 64 20 70 61 6c 65 74  74 65 0d 2b a2 3d 70 25  |rd palette.+.=p%|
0000d790  3d 64 75 6d 25 3a e3 20  63 25 3d 31 20 b8 20 32  |=dum%:. c%=1 . 2|
0000d7a0  5e 62 70 70 25 3a 50 61  6c 25 28 63 25 29 3d 21  |^bpp%:Pal%(c%)=!|
0000d7b0  70 25 3a 70 25 2b 3d 34  3a ed 3a 50 61 6c 25 28  |p%:p%+=4:.:Pal%(|
0000d7c0  30 29 3d 62 70 70 25 0d  2b ac 05 e1 0d 2b b6 05  |0)=bpp%.+....+..|
0000d7d0  20 0d 2b c0 1d dd f2 67  72 65 79 5f 70 61 6c 65  | .+....grey_pale|
0000d7e0  74 74 65 28 62 70 70 25  2c 64 69 72 25 29 0d 2b  |tte(bpp%,dir%).+|
0000d7f0  ca 3d f4 20 53 65 74 73  20 69 6e 70 75 74 20 70  |.=. Sets input p|
0000d800  61 6c 65 74 74 65 20 74  6f 20 67 72 65 79 73 63  |alette to greysc|
0000d810  61 6c 65 20 66 6f 72 20  62 70 70 25 20 62 69 74  |ale for bpp% bit|
0000d820  73 20 70 65 72 20 70 69  78 65 6c 0d 2b d4 3f f4  |s per pixel.+.?.|
0000d830  20 64 69 72 25 3d 31 20  67 69 76 65 73 20 62 6c  | dir%=1 gives bl|
0000d840  61 63 6b 20 74 6f 20 77  68 69 74 65 2c 20 64 69  |ack to white, di|
0000d850  72 25 3d 2d 31 20 67 69  76 65 73 20 77 68 69 74  |r%=-1 gives whit|
0000d860  65 20 74 6f 20 62 6c 61  63 6b 0d 2b de 11 ea 20  |e to black.+... |
0000d870  63 6f 64 65 25 2c 63 25  2c 70 25 0d 2b e8 1f e7  |code%,c%,p%.+...|
0000d880  64 69 72 25 3d 31 20 8c  20 63 6f 64 65 25 3d 33  |dir%=1 . code%=3|
0000d890  20 8b 20 63 6f 64 65 25  3d 34 0d 2b f2 41 c8 99  | . code%=4.+.A..|
0000d8a0  20 22 54 72 61 6e 73 6c  61 74 6f 72 5f 50 61 6c  | "Translator_Pal|
0000d8b0  65 74 74 65 22 2c 62 70  70 25 2c 64 75 6d 25 2c  |ette",bpp%,dum%,|
0000d8c0  63 6f 64 65 25 3a f4 20  43 61 6c 63 75 6c 61 74  |code%:. Calculat|
0000d8d0  65 20 67 72 65 79 73 63  61 6c 65 0d 2b fc 41 70  |e greyscale.+.Ap|
0000d8e0  25 3d 64 75 6d 25 3a e3  20 63 25 3d 31 20 b8 20  |%=dum%:. c%=1 . |
0000d8f0  32 5e 62 70 70 25 3a 49  6e 50 61 6c 25 28 63 25  |2^bpp%:InPal%(c%|
0000d900  29 3d 21 70 25 3a 70 25  2b 3d 34 3a ed 3a 49 6e  |)=!p%:p%+=4:.:In|
0000d910  50 61 6c 25 28 30 29 3d  62 70 70 25 0d 2c 06 05  |Pal%(0)=bpp%.,..|
0000d920  e1 0d 2c 10 05 20 0d 2c  1a 34 dd f2 6d 6f 64 65  |..,.. .,.4..mode|
0000d930  5f 69 6e 66 6f 28 6d 6f  64 65 25 2c f8 20 77 69  |_info(mode%,. wi|
0000d940  64 74 68 25 2c f8 20 68  65 69 67 68 74 25 2c f8  |dth%,. height%,.|
0000d950  20 63 6f 6c 6f 75 72 73  25 29 0d 2c 24 31 f4 20  | colours%).,$1. |
0000d960  52 65 74 75 72 6e 73 20  69 6e 66 6f 72 6d 61 74  |Returns informat|
0000d970  69 6f 6e 20 61 62 6f 75  74 20 61 20 70 61 72 74  |ion about a part|
0000d980  69 63 75 6c 61 72 20 6d  6f 64 65 0d 2c 2e 6e 63  |icular mode.,.nc|
0000d990  6f 6c 6f 75 72 73 25 3d  32 5e 28 32 5e a4 6d 6f  |olours%=2^(2^.mo|
0000d9a0  64 65 5f 76 61 72 28 6d  6f 64 65 25 2c 39 29 29  |de_var(mode%,9))|
0000d9b0  3a 77 69 64 74 68 25 3d  31 2b a4 6d 6f 64 65 5f  |:width%=1+.mode_|
0000d9c0  76 61 72 28 6d 6f 64 65  25 2c 31 31 29 3a 68 65  |var(mode%,11):he|
0000d9d0  69 67 68 74 25 3d 31 2b  a4 6d 6f 64 65 5f 76 61  |ight%=1+.mode_va|
0000d9e0  72 28 6d 6f 64 65 25 2c  31 32 29 3a f4 20 52 65  |r(mode%,12):. Re|
0000d9f0  74 75 72 6e 20 69 6e 66  6f 0d 2c 38 05 e1 0d 2c  |turn info.,8...,|
0000da00  42 05 20 0d 2c 4c 17 dd  f2 69 6e 76 61 6c 69 64  |B. .,L...invalid|
0000da10  61 74 65 5f 73 63 72 65  65 6e 0d 2c 56 1f f4 20  |ate_screen.,V.. |
0000da20  49 6e 76 61 6c 69 64 61  74 65 73 20 65 6e 74 69  |Invalidates enti|
0000da30  72 65 20 73 63 72 65 65  6e 0d 2c 60 3d c8 99 20  |re screen.,`=.. |
0000da40  57 46 6f 72 63 65 25 2c  2d 31 2c 30 2c 30 2c 53  |WForce%,-1,0,0,S|
0000da50  63 72 57 25 2c 53 63 72  48 25 3a f4 20 46 6f 72  |crW%,ScrH%:. For|
0000da60  63 65 20 72 65 64 72 61  77 20 77 68 6f 6c 65 20  |ce redraw whole |
0000da70  73 63 72 65 65 6e 0d 2c  6a 05 e1 0d 2c 74 05 20  |screen.,j...,t. |
0000da80  0d 2c 7e 16 dd f2 69 6e  76 61 6c 69 64 61 74 65  |.,~...invalidate|
0000da90  5f 69 6d 61 67 65 0d 2c  88 17 f4 20 49 6e 76 61  |_image.,... Inva|
0000daa0  6c 69 64 61 74 65 73 20  69 6d 61 67 65 0d 2c 92  |lidates image.,.|
0000dab0  15 49 6d 67 3d a3 3a 46  72 65 71 43 61 6c 63 3d  |.Img=.:FreqCalc=|
0000dac0  a3 3a 0d 2c 9c 05 e1 0d  2c a6 05 20 0d 2c b0 19  |.:.,....,.. .,..|
0000dad0  dd f2 6e 65 77 5f 77 69  6e 64 6f 77 28 68 61 6e  |..new_window(han|
0000dae0  64 6c 65 25 29 0d 2c ba  20 f4 20 52 65 64 72 61  |dle%).,. . Redra|
0000daf0  77 73 20 65 6e 74 69 72  65 20 77 69 6e 64 6f 77  |ws entire window|
0000db00  20 61 72 65 61 0d 2c c4  1d f2 72 65 64 72 61 77  | area.,...redraw|
0000db10  5f 77 69 6e 64 6f 77 28  68 61 6e 64 6c 65 25 2c  |_window(handle%,|
0000db20  b9 29 0d 2c ce 05 e1 0d  2c d8 05 20 0d 2c e2 22  |.).,....,.. .,."|
0000db30  dd f2 72 65 64 72 61 77  5f 77 69 6e 64 6f 77 28  |..redraw_window(|
0000db40  68 61 6e 64 6c 65 25 2c  66 6f 72 63 65 29 0d 2c  |handle%,force).,|
0000db50  ec 28 f4 20 52 65 64 72  61 77 73 20 77 69 6e 64  |.(. Redraws wind|
0000db60  6f 77 20 77 69 74 68 20  68 61 6e 64 6c 65 20 68  |ow with handle h|
0000db70  61 6e 64 6c 65 25 0d 2c  f6 3c f4 20 49 66 20 66  |andle%.,.<. If f|
0000db80  6f 72 63 65 3d 54 52 55  45 20 74 68 65 20 77 69  |orce=TRUE the wi|
0000db90  6e 64 6f 77 27 73 20 65  6e 74 69 72 65 20 77 6f  |ndow's entire wo|
0000dba0  72 6b 20 61 72 65 61 20  69 73 20 75 70 64 61 74  |rk area is updat|
0000dbb0  65 64 0d 2d 00 2b ea 20  6d 6f 72 65 25 2c 6e 78  |ed.-.+. more%,nx|
0000dbc0  25 2c 6e 79 25 2c 76 77  25 2c 76 68 25 2c 73 6d  |%,ny%,vw%,vh%,sm|
0000dbd0  61 6c 6c 25 2c 78 25 2c  79 25 2c 73 25 0d 2d 0a  |all%,x%,y%,s%.-.|
0000dbe0  28 21 62 6c 6f 63 6b 3d  68 61 6e 64 6c 65 25 3a  |(!block=handle%:|
0000dbf0  f4 20 53 65 74 20 77 69  6e 64 6f 77 27 73 20 68  |. Set window's h|
0000dc00  61 6e 64 6c 65 0d 2d 14  78 e7 66 6f 72 63 65 20  |andle.-.x.force |
0000dc10  8c 20 62 6c 6f 63 6b 21  34 3d 30 3a 62 6c 6f 63  |. block!4=0:bloc|
0000dc20  6b 21 38 3d 30 3a 62 6c  6f 63 6b 21 31 32 3d 26  |k!8=0:block!12=&|
0000dc30  37 46 46 46 3a 62 6c 6f  63 6b 21 31 36 3d 26 37  |7FFF:block!16=&7|
0000dc40  46 46 46 3a c8 99 20 57  55 70 64 61 74 65 57 25  |FFF:.. WUpdateW%|
0000dc50  2c 2c 62 6c 6f 63 6b 20  b8 20 6d 6f 72 65 25 20  |,,block . more% |
0000dc60  8b 20 c8 99 20 57 52 65  64 72 61 77 57 25 2c 2c  |. .. WRedrawW%,,|
0000dc70  62 6c 6f 63 6b 20 b8 20  6d 6f 72 65 25 0d 2d 1e  |block . more%.-.|
0000dc80  46 6e 78 25 3d 28 62 6c  6f 63 6b 21 34 2d 62 6c  |Fnx%=(block!4-bl|
0000dc90  6f 63 6b 21 32 30 29 3a  6e 79 25 3d 28 62 6c 6f  |ock!20):ny%=(blo|
0000dca0  63 6b 21 31 36 2d 62 6c  6f 63 6b 21 32 34 29 3a  |ck!16-block!24):|
0000dcb0  f4 20 47 65 74 20 73 70  72 69 74 65 20 6f 72 69  |. Get sprite ori|
0000dcc0  67 69 6e 0d 2d 28 41 76  77 25 3d 62 6c 6f 63 6b  |gin.-(Avw%=block|
0000dcd0  21 31 32 2d 62 6c 6f 63  6b 21 34 3a 76 68 25 3d  |!12-block!4:vh%=|
0000dce0  62 6c 6f 63 6b 21 31 36  2d 62 6c 6f 63 6b 21 38  |block!16-block!8|
0000dcf0  3a f4 20 56 69 73 69 62  6c 65 20 61 72 65 61 20  |:. Visible area |
0000dd00  73 69 7a 65 0d 2d 32 10  c8 8e 20 68 61 6e 64 6c  |size.-2... handl|
0000dd10  65 25 20 ca 0d 2d 3c 27  20 c9 20 77 69 6e 5f 69  |e% ..-<' . win_i|
0000dd20  6d 67 25 20 3a 20 f4 20  52 65 64 72 61 77 20 69  |mg% : . Redraw i|
0000dd30  6d 61 67 65 20 77 69 6e  64 6f 77 0d 2d 46 3f 20  |mage window.-F? |
0000dd40  20 e7 5a 6f 6f 6d 58 3e  3d 31 20 8c 20 21 61 72  | .ZoomX>=1 . !ar|
0000dd50  67 25 3d 5a 6f 6f 6d 58  3a 61 72 67 25 21 38 3d  |g%=ZoomX:arg%!8=|
0000dd60  31 20 8b 20 21 61 72 67  25 3d 31 3a 61 72 67 25  |1 . !arg%=1:arg%|
0000dd70  21 38 3d 31 2f 5a 6f 6f  6d 58 0d 2d 50 43 20 20  |!8=1/ZoomX.-PC  |
0000dd80  e7 5a 6f 6f 6d 59 3e 3d  31 20 8c 20 61 72 67 25  |.ZoomY>=1 . arg%|
0000dd90  21 34 3d 5a 6f 6f 6d 59  3a 61 72 67 25 21 31 32  |!4=ZoomY:arg%!12|
0000dda0  3d 31 20 8b 20 61 72 67  25 21 34 3d 31 3a 61 72  |=1 . arg%!4=1:ar|
0000ddb0  67 25 21 31 32 3d 31 2f  5a 6f 6f 6d 59 0d 2d 5a  |g%!12=1/ZoomY.-Z|
0000ddc0  40 20 20 73 6d 61 6c 6c  25 3d 28 28 76 77 25 3c  |@  small%=((vw%<|
0000ddd0  3d 31 36 30 29 84 28 76  68 25 3c 3d 31 36 30 29  |=160).(vh%<=160)|
0000dde0  29 3a f4 20 57 69 6e 64  6f 77 20 70 6f 73 73 69  |):. Window possi|
0000ddf0  62 6c 79 20 74 6f 6f 20  73 6d 61 6c 6c 0d 2d 64  |bly too small.-d|
0000de00  44 20 20 e7 73 6d 61 6c  6c 25 20 8c 20 78 25 3d  |D  .small% . x%=|
0000de10  62 6c 6f 63 6b 21 34 3a  79 25 3d 62 6c 6f 63 6b  |block!4:y%=block|
0000de20  21 38 3a 73 25 3d a4 6d  61 78 28 76 77 25 2c 76  |!8:s%=.max(vw%,v|
0000de30  68 25 29 3a c8 99 20 57  53 65 74 43 6f 6c 25 2c  |h%):.. WSetCol%,|
0000de40  30 0d 2d 6e 2a 20 20 c8  95 20 6d 6f 72 65 25 3a  |0.-n*  .. more%:|
0000de50  e7 73 6d 61 6c 6c 25 20  8c 20 c8 93 20 c8 90 20  |.small% . .. .. |
0000de60  78 25 2c 79 25 2c 73 25  2c 73 25 0d 2d 78 38 20  |x%,y%,s%,s%.-x8 |
0000de70  20 f2 70 6c 6f 74 5f 69  6d 61 67 65 28 6e 78 25  | .plot_image(nx%|
0000de80  2c 6e 79 25 2c 30 2c 61  72 67 25 29 3a f4 20 44  |,ny%,0,arg%):. D|
0000de90  69 73 70 6c 61 79 20 69  6d 61 67 65 20 73 70 72  |isplay image spr|
0000dea0  69 74 65 0d 2d 82 35 20  20 c8 99 20 57 47 65 74  |ite.-.5  .. WGet|
0000deb0  52 25 2c 2c 62 6c 6f 63  6b 20 b8 20 6d 6f 72 65  |R%,,block . more|
0000dec0  25 3a ce 3a f4 20 47 65  74 20 6e 65 78 74 20 72  |%:.:. Get next r|
0000ded0  65 63 74 61 6e 67 6c 65  0d 2d 8c 05 cb 0d 2d 96  |ectangle.-....-.|
0000dee0  05 e1 0d 2d a0 05 20 0d  2d aa 1f dd f2 6f 70 65  |...-.. .-....ope|
0000def0  6e 5f 77 69 6e 64 6f 77  28 68 61 6e 64 6c 65 25  |n_window(handle%|
0000df00  2c 69 6e 66 6f 29 0d 2d  b4 26 f4 20 4f 70 65 6e  |,info).-.&. Open|
0000df10  73 20 77 69 6e 64 6f 77  20 77 69 74 68 20 68 61  |s window with ha|
0000df20  6e 64 6c 65 20 68 61 6e  64 6c 65 25 0d 2d be 3a  |ndle handle%.-.:|
0000df30  f4 20 49 66 20 69 6e 66  6f 3c 3e 30 20 74 68 65  |. If info<>0 the|
0000df40  6e 20 69 6e 66 6f 20 69  73 20 72 65 61 64 79 20  |n info is ready |
0000df50  61 74 20 69 6e 66 6f 2c  20 65 6c 73 65 20 67 65  |at info, else ge|
0000df60  74 20 69 6e 66 6f 0d 2d  c8 1b ea 20 62 25 2c 70  |t info.-... b%,p|
0000df70  78 25 2c 70 79 25 2c 5f  25 2c 78 73 25 2c 79 73  |x%,py%,_%,xs%,ys|
0000df80  25 0d 2d d2 0e e7 69 6e  66 6f 3c 3e 30 20 8c 0d  |%.-...info<>0 ..|
0000df90  2d dc 27 20 e3 20 62 25  3d 30 20 b8 20 33 31 20  |-.' . b%=0 . 31 |
0000dfa0  88 20 34 3a 62 6c 6f 63  6b 21 62 25 3d 69 6e 66  |. 4:block!b%=inf|
0000dfb0  6f 21 62 25 3a ed 0d 2d  e6 26 cc 20 21 62 6c 6f  |o!b%:..-.&. !blo|
0000dfc0  63 6b 3d 68 61 6e 64 6c  65 25 3a c8 99 20 57 47  |ck=handle%:.. WG|
0000dfd0  65 74 57 53 25 2c 2c 62  6c 6f 63 6b 0d 2d f0 c8  |etWS%,,block.-..|
0000dfe0  20 e7 68 61 6e 64 6c 65  25 3c 3e 77 69 6e 5f 69  | .handle%<>win_i|
0000dff0  6d 67 25 20 8c 20 f2 6d  6f 75 73 65 28 70 78 25  |mg% . .mouse(px%|
0000e000  2c 70 79 25 2c 5f 25 29  3a 78 73 25 3d 62 6c 6f  |,py%,_%):xs%=blo|
0000e010  63 6b 21 31 32 2d 62 6c  6f 63 6b 21 34 3a 79 73  |ck!12-block!4:ys|
0000e020  25 3d 62 6c 6f 63 6b 21  31 36 2d 62 6c 6f 63 6b  |%=block!16-block|
0000e030  21 38 3a 62 6c 6f 63 6b  21 34 3d 70 78 25 2d 36  |!8:block!4=px%-6|
0000e040  34 3a 62 6c 6f 63 6b 21  38 3d 70 79 25 2d 79 73  |4:block!8=py%-ys|
0000e050  25 2b 31 36 3a 62 6c 6f  63 6b 21 31 32 3d 62 6c  |%+16:block!12=bl|
0000e060  6f 63 6b 21 34 2b 78 73  25 3a 62 6c 6f 63 6b 21  |ock!4+xs%:block!|
0000e070  31 36 3d 62 6c 6f 63 6b  21 38 2b 79 73 25 3a f4  |16=block!8+ys%:.|
0000e080  20 50 6f 70 20 75 70 20  61 74 20 6d 6f 75 73 65  | Pop up at mouse|
0000e090  20 69 66 20 6e 6f 74 20  69 6d 61 67 65 20 77 69  | if not image wi|
0000e0a0  6e 64 6f 77 0d 2d fa 05  cd 0d 2e 04 15 c8 99 20  |ndow.-......... |
0000e0b0  57 4f 70 65 6e 57 25 2c  2c 62 6c 6f 63 6b 0d 2e  |WOpenW%,,block..|
0000e0c0  0e 05 e1 0d 2e 18 05 20  0d 2e 22 1b dd f2 63 6c  |....... .."...cl|
0000e0d0  6f 73 65 5f 77 69 6e 64  6f 77 28 68 61 6e 64 6c  |ose_window(handl|
0000e0e0  65 25 29 0d 2e 2c 27 f4  20 43 6c 6f 73 65 73 20  |e%)..,'. Closes |
0000e0f0  77 69 6e 64 6f 77 20 77  69 74 68 20 68 61 6e 64  |window with hand|
0000e100  6c 65 20 68 61 6e 64 6c  65 25 0d 2e 36 25 21 62  |le handle%..6%!b|
0000e110  6c 6f 63 6b 3d 68 61 6e  64 6c 65 25 3a c8 99 20  |lock=handle%:.. |
0000e120  57 43 6c 6f 73 65 57 25  2c 2c 62 6c 6f 63 6b 0d  |WCloseW%,,block.|
0000e130  2e 40 05 e1 0d 2e 4a 05  20 0d 2e 54 11 dd a4 70  |.@....J. ..T...p|
0000e140  6f 6c 6c 28 6d 61 73 6b  25 29 0d 2e 5e 40 f4 20  |oll(mask%)..^@. |
0000e150  52 65 74 75 72 6e 73 20  70 6f 6c 6c 20 72 65 61  |Returns poll rea|
0000e160  73 6f 6e 20 63 6f 64 65  2c 20 6d 61 73 6b 69 6e  |son code, maskin|
0000e170  67 20 77 69 74 68 20 6d  61 73 6b 25 2c 20 64 61  |g with mask%, da|
0000e180  74 61 20 61 74 20 70 6f  6c 6c 0d 2e 68 10 ea 20  |ta at poll..h.. |
0000e190  72 65 61 73 6f 6e 63 6f  64 65 0d 2e 72 25 c8 99  |reasoncode..r%..|
0000e1a0  20 57 50 6f 6c 6c 25 2c  6d 61 73 6b 25 2c 70 6f  | WPoll%,mask%,po|
0000e1b0  6c 6c 20 b8 20 72 65 61  73 6f 6e 63 6f 64 65 0d  |ll . reasoncode.|
0000e1c0  2e 7c 0f 3d 72 65 61 73  6f 6e 63 6f 64 65 0d 2e  |.|.=reasoncode..|
0000e1d0  86 05 20 0d 2e 90 10 dd  f2 69 6e 69 74 69 61 6c  |.. ......initial|
0000e1e0  69 73 65 0d 2e 9a 19 f4  20 49 6e 69 74 69 61 6c  |ise..... Initial|
0000e1f0  69 73 65 73 20 70 72 6f  67 72 61 6d 0d 2e a4 3e  |ises program...>|
0000e200  c8 99 20 22 57 69 6d 70  5f 52 65 61 64 50 61 6c  |.. "Wimp_ReadPal|
0000e210  65 74 74 65 22 2c 2c 77  69 6d 70 70 61 6c 3a f4  |ette",,wimppal:.|
0000e220  20 52 65 61 64 20 63 75  72 72 65 6e 74 20 57 49  | Read current WI|
0000e230  4d 50 20 70 61 6c 65 74  74 65 0d 2e ae 37 f2 68  |MP palette...7.h|
0000e240  6f 75 72 5f 6f 6e 3a f2  69 6e 69 74 5f 6d 6f 64  |our_on:.init_mod|
0000e250  75 6c 65 3a f2 68 6f 75  72 5f 6f 66 66 3a f4 20  |ule:.hour_off:. |
0000e260  49 6e 69 74 69 61 6c 69  73 65 20 6d 6f 64 75 6c  |Initialise modul|
0000e270  65 0d 2e b8 44 c8 99 20  22 4f 53 5f 43 68 65 63  |e...D.. "OS_Chec|
0000e280  6b 4d 6f 64 65 56 61 6c  69 64 22 2c 31 38 20 b8  |kModeValid",18 .|
0000e290  20 5f 25 3a 4d 75 6c 74  69 53 79 6e 63 3d 28 5f  | _%:MultiSync=(_|
0000e2a0  25 3c 3e 2d 31 29 3a f4  20 4d 6f 6e 69 74 6f 72  |%<>-1):. Monitor|
0000e2b0  20 74 79 70 65 0d 2e c2  30 61 70 70 6c 6e 61 6d  | type...0applnam|
0000e2c0  65 24 3d 22 54 72 61 6e  73 6c 61 74 6f 72 22 3a  |e$="Translator":|
0000e2d0  f4 20 4e 61 6d 65 20 6f  66 20 61 70 70 6c 69 63  |. Name of applic|
0000e2e0  61 74 69 6f 6e 0d 2e cc  46 c8 99 20 22 57 69 6d  |ation...F.. "Wim|
0000e2f0  70 5f 49 6e 69 74 69 61  6c 69 73 65 22 2c 32 30  |p_Initialise",20|
0000e300  30 2c 26 34 42 35 33 34  31 35 34 2c 61 70 70 6c  |0,&4B534154,appl|
0000e310  6e 61 6d 65 24 20 b8 20  76 65 72 73 69 6f 6e 2c  |name$ . version,|
0000e320  54 61 73 6b 48 61 6e 64  6c 65 25 0d 2e d6 39 e7  |TaskHandle%...9.|
0000e330  76 65 72 73 69 6f 6e 3c  32 30 30 20 8c 20 85 20  |version<200 . . |
0000e340  31 2c 22 49 20 63 61 6e  6e 6f 74 20 77 6f 72 6b  |1,"I cannot work|
0000e350  20 77 69 74 68 20 57 49  4d 50 20 70 72 65 2d 32  | with WIMP pre-2|
0000e360  2e 30 30 22 0d 2e e0 36  57 25 3d a4 73 77 69 5f  |.00"...6W%=.swi_|
0000e370  74 6f 5f 6e 72 28 22 57  69 6d 70 5f 49 6e 69 74  |to_nr("Wimp_Init|
0000e380  69 61 6c 69 73 65 22 29  3a f4 20 42 61 73 65 20  |ialise"):. Base |
0000e390  53 57 49 20 6e 75 6d 62  65 72 0d 2e ea 9e 57 43  |SWI number....WC|
0000e3a0  72 65 61 74 65 57 25 3d  57 25 2b 31 3a 57 43 72  |reateW%=W%+1:WCr|
0000e3b0  65 61 74 65 49 25 3d 57  25 2b 32 3a 57 44 65 6c  |eateI%=W%+2:WDel|
0000e3c0  65 74 65 57 25 3d 57 25  2b 33 3a 57 4f 70 65 6e  |eteW%=W%+3:WOpen|
0000e3d0  57 25 3d 57 25 2b 35 3a  57 43 6c 6f 73 65 57 25  |W%=W%+5:WCloseW%|
0000e3e0  3d 57 25 2b 36 3a 57 50  6f 6c 6c 25 3d 57 25 2b  |=W%+6:WPoll%=W%+|
0000e3f0  37 3a 57 52 65 64 72 61  77 57 25 3d 57 25 2b 38  |7:WRedrawW%=W%+8|
0000e400  3a 57 55 70 64 61 74 65  57 25 3d 57 25 2b 39 3a  |:WUpdateW%=W%+9:|
0000e410  57 47 65 74 52 25 3d 57  25 2b 31 30 3a 57 47 65  |WGetR%=W%+10:WGe|
0000e420  74 57 53 25 3d 57 25 2b  31 31 3a 57 53 65 74 49  |tWS%=W%+11:WSetI|
0000e430  53 25 3d 57 25 2b 31 33  0d 2e f4 92 57 47 65 74  |S%=W%+13....WGet|
0000e440  49 53 25 3d 57 25 2b 31  34 3a 57 47 65 74 50 49  |IS%=W%+14:WGetPI|
0000e450  25 3d 57 25 2b 31 35 3a  57 44 72 61 67 42 25 3d  |%=W%+15:WDragB%=|
0000e460  57 25 2b 31 36 3a 57 46  6f 72 63 65 25 3d 57 25  |W%+16:WForce%=W%|
0000e470  2b 31 37 3a 57 43 72 65  61 74 65 4d 25 3d 57 25  |+17:WCreateM%=W%|
0000e480  2b 32 30 3a 57 44 65 63  6f 64 65 4d 25 3d 57 25  |+20:WDecodeM%=W%|
0000e490  2b 32 31 3a 57 53 65 74  45 25 3d 57 25 2b 32 33  |+21:WSetE%=W%+23|
0000e4a0  3a 57 4c 6f 61 64 54 25  3d 57 25 2b 32 37 3a 57  |:WLoadT%=W%+27:W|
0000e4b0  52 65 70 6f 72 74 25 3d  57 25 2b 33 31 3a 57 53  |Report%=W%+31:WS|
0000e4c0  65 74 4d 25 3d 57 25 2b  33 35 0d 2e fe 4e 57 53  |etM%=W%+35...NWS|
0000e4d0  65 74 50 25 3d 57 25 2b  33 36 3a 57 52 65 61 64  |etP%=W%+36:WRead|
0000e4e0  50 25 3d 57 25 2b 33 37  3a 57 53 65 74 43 6f 6c  |P%=W%+37:WSetCol|
0000e4f0  25 3d 57 25 2b 33 38 3a  57 53 65 6e 64 4d 73 67  |%=W%+38:WSendMsg|
0000e500  25 3d 57 25 2b 33 39 3a  57 43 72 65 61 74 65 53  |%=W%+39:WCreateS|
0000e510  4d 25 3d 57 25 2b 34 30  0d 2f 08 7d 4f 53 53 70  |M%=W%+40./.}OSSp|
0000e520  6f 70 25 3d a4 73 77 69  5f 74 6f 5f 6e 72 28 22  |op%=.swi_to_nr("|
0000e530  4f 53 5f 53 70 72 69 74  65 4f 70 22 29 3a 4f 53  |OS_SpriteOp"):OS|
0000e540  52 65 61 64 56 56 25 3d  a4 73 77 69 5f 74 6f 5f  |ReadVV%=.swi_to_|
0000e550  6e 72 28 22 4f 53 5f 52  65 61 64 56 64 75 56 61  |nr("OS_ReadVduVa|
0000e560  72 69 61 62 6c 65 73 22  29 3a 4f 53 52 65 61 64  |riables"):OSRead|
0000e570  4d 56 25 3d a4 73 77 69  5f 74 6f 5f 6e 72 28 22  |MV%=.swi_to_nr("|
0000e580  4f 53 5f 52 65 61 64 4d  6f 64 65 56 61 72 69 61  |OS_ReadModeVaria|
0000e590  62 6c 65 22 29 0d 2f 12  33 c8 99 20 57 52 65 61  |ble")./.3.. WRea|
0000e5a0  64 50 25 2c 2c 77 69 6d  70 70 61 6c 3a f4 20 52  |dP%,,wimppal:. R|
0000e5b0  65 61 64 20 63 75 72 72  65 6e 74 20 57 49 4d 50  |ead current WIMP|
0000e5c0  20 70 61 6c 65 74 74 65  0d 2f 1c 3d 74 66 25 3d  | palette./.=tf%=|
0000e5d0  37 3a 74 62 25 3d 32 3a  77 66 25 3d 37 3a 77 62  |7:tb%=2:wf%=7:wb|
0000e5e0  25 3d 30 3a 73 69 25 3d  31 3a 73 6f 25 3d 33 3a  |%=0:si%=1:so%=3:|
0000e5f0  f4 20 57 69 6e 64 6f 77  2f 6d 65 6e 75 20 63 6f  |. Window/menu co|
0000e600  6c 6f 75 72 73 0d 2f 26  94 21 62 6c 6f 63 6b 3d  |lours./&.!block=|
0000e610  2d 31 3a 62 6c 6f 63 6b  21 34 3d 30 3a 62 6c 6f  |-1:block!4=0:blo|
0000e620  63 6b 21 38 3d 30 3a 62  6c 6f 63 6b 21 31 32 3d  |ck!8=0:block!12=|
0000e630  36 38 3a 62 6c 6f 63 6b  21 31 36 3d 36 38 3a 62  |68:block!16=68:b|
0000e640  6c 6f 63 6b 21 32 30 3d  26 32 37 30 30 33 30 30  |lock!20=&2700300|
0000e650  32 3a 24 28 62 6c 6f 63  6b 2b 32 34 29 3d 22 21  |2:$(block+24)="!|
0000e660  74 72 61 6e 73 6c 61 74  72 22 3a c8 99 20 57 43  |translatr":.. WC|
0000e670  72 65 61 74 65 49 25 2c  2c 62 6c 6f 63 6b 20 b8  |reateI%,,block .|
0000e680  20 49 69 63 6f 6e 62 61  72 25 3a f4 20 49 63 6f  | Iiconbar%:. Ico|
0000e690  6e 62 61 72 20 69 63 6f  6e 0d 2f 30 1c f4 20 4c  |nbar icon./0.. L|
0000e6a0  6f 61 64 20 73 70 72 69  74 65 73 20 66 6f 72 20  |oad sprites for |
0000e6b0  69 63 6f 6e 73 0d 2f 3a  48 21 69 63 6f 6e 73 70  |icons./:H!iconsp|
0000e6c0  72 69 74 65 73 3d 32 30  34 38 3a 69 63 6f 6e 73  |rites=2048:icons|
0000e6d0  70 72 69 74 65 73 21 34  3d 30 3a 69 63 6f 6e 73  |prites!4=0:icons|
0000e6e0  70 72 69 74 65 73 21 38  3d 31 36 3a 69 63 6f 6e  |prites!8=16:icon|
0000e6f0  73 70 72 69 74 65 73 21  31 32 3d 31 36 0d 2f 44  |sprites!12=16./D|
0000e700  3c c8 99 20 4f 53 53 70  6f 70 25 2c 31 30 2b 32  |<.. OSSpop%,10+2|
0000e710  35 36 2c 69 63 6f 6e 73  70 72 69 74 65 73 2c 22  |56,iconsprites,"|
0000e720  3c 54 72 61 6e 73 6c 61  74 6f 72 24 44 69 72 3e  |<Translator$Dir>|
0000e730  2e 53 70 72 69 74 65 73  22 0d 2f 4e 14 f4 20 4c  |.Sprites"./N.. L|
0000e740  6f 61 64 20 74 65 6d 70  6c 61 74 65 73 0d 2f 58  |oad templates./X|
0000e750  38 c8 99 20 22 57 69 6d  70 5f 4f 70 65 6e 54 65  |8.. "Wimp_OpenTe|
0000e760  6d 70 6c 61 74 65 22 2c  2c 22 3c 54 72 61 6e 73  |mplate",,"<Trans|
0000e770  6c 61 74 6f 72 24 44 69  72 3e 2e 54 65 6d 70 6c  |lator$Dir>.Templ|
0000e780  61 74 65 73 22 0d 2f 62  3c 69 63 3d 69 63 6f 6e  |ates"./b<ic=icon|
0000e790  64 61 74 61 3a 69 65 3d  69 63 6f 6e 64 65 6e 64  |data:ie=icondend|
0000e7a0  3a f4 20 49 6e 64 69 72  65 63 74 65 64 20 69 63  |:. Indirected ic|
0000e7b0  6f 6e 20 64 61 74 61 20  77 6f 72 6b 73 70 61 63  |on data workspac|
0000e7c0  65 0d 2f 6c 3b 24 64 75  6d 25 3d 22 73 61 76 65  |e./l;$dum%="save|
0000e7d0  22 3a c8 99 20 57 4c 6f  61 64 54 25 2c 2c 77 69  |":.. WLoadT%,,wi|
0000e7e0  6e 64 6f 77 32 2c 69 63  2c 69 65 2c 2d 31 2c 64  |ndow2,ic,ie,-1,d|
0000e7f0  75 6d 25 2c 30 20 b8 20  2c 2c 69 63 0d 2f 76 24  |um%,0 . ,,ic./v$|
0000e800  77 69 6e 64 6f 77 32 21  28 38 38 2b 32 34 29 3d  |window2!(88+24)=|
0000e810  31 3a f4 20 57 49 4d 50  20 61 72 65 61 70 74 72  |1:. WIMP areaptr|
0000e820  0d 2f 80 25 c8 99 20 57  43 72 65 61 74 65 57 25  |./.%.. WCreateW%|
0000e830  2c 2c 77 69 6e 64 6f 77  32 20 b8 20 77 69 6e 5f  |,,window2 . win_|
0000e840  66 69 6c 65 25 0d 2f 8a  3f 53 41 56 73 6e 25 3d  |file%./.?SAVsn%=|
0000e850  a4 69 63 6f 6e 61 64 64  72 28 77 69 6e 5f 66 69  |.iconaddr(win_fi|
0000e860  6c 65 25 2c 30 29 3a 53  41 56 66 6e 25 3d a4 69  |le%,0):SAVfn%=.i|
0000e870  63 6f 6e 61 64 64 72 28  77 69 6e 5f 66 69 6c 65  |conaddr(win_file|
0000e880  25 2c 31 29 0d 2f 94 3b  24 64 75 6d 25 3d 22 69  |%,1)./.;$dum%="i|
0000e890  6e 66 6f 22 3a c8 99 20  57 4c 6f 61 64 54 25 2c  |nfo":.. WLoadT%,|
0000e8a0  2c 77 69 6e 64 6f 77 33  2c 69 63 2c 69 65 2c 2d  |,window3,ic,ie,-|
0000e8b0  31 2c 64 75 6d 25 2c 30  20 b8 20 2c 2c 69 63 0d  |1,dum%,0 . ,,ic.|
0000e8c0  2f 9e 25 c8 99 20 57 43  72 65 61 74 65 57 25 2c  |/.%.. WCreateW%,|
0000e8d0  2c 77 69 6e 64 6f 77 33  20 b8 20 77 69 6e 5f 69  |,window3 . win_i|
0000e8e0  6e 66 6f 25 0d 2f a8 40  24 64 75 6d 25 3d 22 66  |nfo%./.@$dum%="f|
0000e8f0  69 6c 65 74 79 70 65 73  22 3a c8 99 20 57 4c 6f  |iletypes":.. WLo|
0000e900  61 64 54 25 2c 2c 77 69  6e 64 6f 77 35 2c 69 63  |adT%,,window5,ic|
0000e910  2c 69 65 2c 2d 31 2c 64  75 6d 25 2c 30 20 b8 20  |,ie,-1,dum%,0 . |
0000e920  2c 2c 69 63 0d 2f b2 26  c8 99 20 57 43 72 65 61  |,,ic./.&.. WCrea|
0000e930  74 65 57 25 2c 2c 77 69  6e 64 6f 77 35 20 b8 20  |teW%,,window5 . |
0000e940  77 69 6e 5f 66 69 6c 65  74 25 0d 2f bc 40 24 64  |win_filet%./.@$d|
0000e950  75 6d 25 3d 22 69 6d 61  67 65 69 6e 66 6f 22 3a  |um%="imageinfo":|
0000e960  c8 99 20 57 4c 6f 61 64  54 25 2c 2c 77 69 6e 64  |.. WLoadT%,,wind|
0000e970  6f 77 34 2c 69 63 2c 69  65 2c 2d 31 2c 64 75 6d  |ow4,ic,ie,-1,dum|
0000e980  25 2c 30 20 b8 20 2c 2c  69 63 0d 2f c6 27 c8 99  |%,0 . ,,ic./.'..|
0000e990  20 57 43 72 65 61 74 65  57 25 2c 2c 77 69 6e 64  | WCreateW%,,wind|
0000e9a0  6f 77 34 20 b8 20 77 69  6e 5f 69 6d 69 6e 66 6f  |ow4 . win_iminfo|
0000e9b0  25 0d 2f d0 89 77 25 3d  77 69 6e 5f 69 6d 69 6e  |%./..w%=win_imin|
0000e9c0  66 6f 25 3a 49 4d 49 66  6e 25 3d a4 69 63 6f 6e  |fo%:IMIfn%=.icon|
0000e9d0  61 64 64 72 28 77 25 2c  39 29 3a 49 4d 49 69 74  |addr(w%,9):IMIit|
0000e9e0  25 3d a4 69 63 6f 6e 61  64 64 72 28 77 25 2c 31  |%=.iconaddr(w%,1|
0000e9f0  30 29 3a 49 4d 49 69 6e  25 3d a4 69 63 6f 6e 61  |0):IMIin%=.icona|
0000ea00  64 64 72 28 77 25 2c 31  31 29 3a 49 4d 49 69 66  |ddr(w%,11):IMIif|
0000ea10  25 3d a4 69 63 6f 6e 61  64 64 72 28 77 25 2c 31  |%=.iconaddr(w%,1|
0000ea20  32 29 3a 49 4d 49 63 6f  25 3d a4 69 63 6f 6e 61  |2):IMIco%=.icona|
0000ea30  64 64 72 28 77 25 2c 31  33 29 0d 2f da 63 49 4d  |ddr(w%,13)./.cIM|
0000ea40  49 77 68 25 3d a4 69 63  6f 6e 61 64 64 72 28 77  |Iwh%=.iconaddr(w|
0000ea50  25 2c 31 34 29 3a 49 4d  49 73 63 25 3d a4 69 63  |%,14):IMIsc%=.ic|
0000ea60  6f 6e 61 64 64 72 28 77  25 2c 31 35 29 3a 49 4d  |onaddr(w%,15):IM|
0000ea70  49 62 70 25 3d a4 69 63  6f 6e 61 64 64 72 28 77  |Ibp%=.iconaddr(w|
0000ea80  25 2c 31 36 29 3a 49 4d  49 73 6d 25 3d a4 69 63  |%,16):IMIsm%=.ic|
0000ea90  6f 6e 61 64 64 72 28 77  25 2c 31 37 29 0d 2f e4  |onaddr(w%,17)./.|
0000eaa0  3e 24 64 75 6d 25 3d 22  72 67 62 62 69 74 73 22  |>$dum%="rgbbits"|
0000eab0  3a c8 99 20 57 4c 6f 61  64 54 25 2c 2c 77 69 6e  |:.. WLoadT%,,win|
0000eac0  64 6f 77 36 2c 69 63 2c  69 65 2c 2d 31 2c 64 75  |dow6,ic,ie,-1,du|
0000ead0  6d 25 2c 30 20 b8 20 2c  2c 69 63 0d 2f ee 44 e3  |m%,0 . ,,ic./.D.|
0000eae0  20 69 25 3d 33 20 b8 20  35 3a 61 70 25 3d 77 69  | i%=3 . 5:ap%=wi|
0000eaf0  6e 64 6f 77 36 2b 38 38  2b 69 25 2a 33 32 2b 32  |ndow6+88+i%*32+2|
0000eb00  34 3a 21 61 70 25 3d 69  63 6f 6e 73 70 72 69 74  |4:!ap%=iconsprit|
0000eb10  65 73 3a ed 3a f4 20 41  72 65 61 70 74 72 73 0d  |es:.:. Areaptrs.|
0000eb20  2f f8 28 c8 99 20 57 43  72 65 61 74 65 57 25 2c  |/.(.. WCreateW%,|
0000eb30  2c 77 69 6e 64 6f 77 36  20 b8 20 77 69 6e 5f 72  |,window6 . win_r|
0000eb40  67 62 62 69 74 73 25 0d  30 02 46 24 64 75 6d 25  |gbbits%.0.F$dum%|
0000eb50  3d 22 69 6d 61 67 65 22  3a 49 4d 57 74 74 25 3d  |="image":IMWtt%=|
0000eb60  69 63 3a c8 99 20 57 4c  6f 61 64 54 25 2c 2c 77  |ic:.. WLoadT%,,w|
0000eb70  69 6e 64 6f 77 31 2c 69  63 2c 69 65 2c 2d 31 2c  |indow1,ic,ie,-1,|
0000eb80  64 75 6d 25 2c 30 20 b8  20 2c 2c 69 63 0d 30 0c  |dum%,0 . ,,ic.0.|
0000eb90  2b 77 69 6e 64 6f 77 31  3f 33 35 3d 26 46 46 3a  |+window1?35=&FF:|
0000eba0  f4 20 54 72 61 6e 73 70  61 72 65 6e 74 20 62 61  |. Transparent ba|
0000ebb0  63 6b 67 72 6f 75 6e 64  0d 30 16 24 c8 99 20 57  |ckground.0.$.. W|
0000ebc0  43 72 65 61 74 65 57 25  2c 2c 77 69 6e 64 6f 77  |CreateW%,,window|
0000ebd0  31 20 b8 20 77 69 6e 5f  69 6d 67 25 0d 30 20 1b  |1 . win_img%.0 .|
0000ebe0  c8 99 20 22 57 69 6d 70  5f 43 6c 6f 73 65 54 65  |.. "Wimp_CloseTe|
0000ebf0  6d 70 6c 61 74 65 22 0d  30 2a 14 f4 20 49 6e 69  |mplate".0*.. Ini|
0000ec00  74 20 76 61 72 69 61 62  6c 65 73 0d 30 34 8d 53  |t variables.04.S|
0000ec10  61 76 65 4b 69 6e 64 24  3d 22 22 3a 49 6d 67 3d  |aveKind$="":Img=|
0000ec20  a3 3a 50 61 6c 6f 6e 6f  66 66 3d b9 3a 5a 6f 6f  |.:Palonoff=.:Zoo|
0000ec30  6d 58 3d 31 3a 5a 6f 6f  6d 59 3d 31 3a 73 75 62  |mX=1:ZoomY=1:sub|
0000ec40  31 25 3d 73 75 62 6d 65  6e 75 31 3a 73 75 62 32  |1%=submenu1:sub2|
0000ec50  25 3d 73 75 62 6d 65 6e  75 32 3a 73 75 62 33 25  |%=submenu2:sub3%|
0000ec60  3d 73 75 62 6d 65 6e 75  33 3a 49 6d 61 67 65 53  |=submenu3:ImageS|
0000ec70  70 72 24 3d 22 69 6d 61  67 65 22 3a 43 75 72 72  |pr$="image":Curr|
0000ec80  53 75 62 24 3d 22 22 3a  46 6c 65 6e 25 3d 30 3a  |Sub$="":Flen%=0:|
0000ec90  4c 6f 61 64 24 3d 22 22  0d 30 3e 8c 44 61 74 61  |Load$="".0>.Data|
0000eca0  53 61 76 65 52 65 66 25  3d 2d 31 3a 44 61 74 61  |SaveRef%=-1:Data|
0000ecb0  4c 6f 61 64 52 65 66 25  3d a3 3a 59 4d 75 6c 25  |LoadRef%=.:YMul%|
0000ecc0  3d 31 3a 59 44 69 76 25  3d 31 3a 58 4d 75 6c 25  |=1:YDiv%=1:XMul%|
0000ecd0  3d 31 3a 58 44 69 76 25  3d 31 3a 43 6c 65 61 72  |=1:XDiv%=1:Clear|
0000ece0  46 69 6c 65 3d a3 3a 53  61 76 65 53 70 72 24 3d  |File=.:SaveSpr$=|
0000ecf0  22 49 6d 61 67 65 22 3a  53 61 76 65 43 6c 65 61  |"Image":SaveClea|
0000ed00  72 24 3d 22 43 6c 65 61  72 22 3a 53 70 72 53 61  |r$="Clear":SprSa|
0000ed10  76 65 24 3d 22 22 3a 43  6c 65 61 72 53 61 76 65  |ve$="":ClearSave|
0000ed20  24 3d 22 22 0d 30 48 85  46 69 6c 65 28 29 3d 30  |$="".0H.File()=0|
0000ed30  3a 53 70 72 57 25 3d 30  3a 53 70 72 48 25 3d 30  |:SprW%=0:SprH%=0|
0000ed40  3a 49 6d 61 67 65 4e 72  25 3d 31 3a 41 75 74 6f  |:ImageNr%=1:Auto|
0000ed50  4d 6f 64 65 3d b9 3a 41  75 74 6f 50 61 6c 3d b9  |Mode=.:AutoPal=.|
0000ed60  3a 43 75 72 72 4d 6f 64  65 25 3d 2d 31 3a 45 72  |:CurrMode%=-1:Er|
0000ed70  72 53 70 72 65 61 64 3d  b9 3a 4d 6f 64 65 53 65  |rSpread=.:ModeSe|
0000ed80  74 3d 30 3a 55 73 65 72  4d 6f 64 65 53 65 74 25  |t=0:UserModeSet%|
0000ed90  28 29 3d 30 2c 30 2c 38  2c 31 32 2c 31 35 3a 41  |()=0,0,8,12,15:A|
0000eda0  75 74 6f 5a 6f 6f 6d 3d  a3 0d 30 52 81 42 6c 61  |utoZoom=..0R.Bla|
0000edb0  63 6b 57 68 69 74 65 3d  a3 3a 54 72 61 6e 73 54  |ckWhite=.:TransT|
0000edc0  61 62 49 64 3d a3 3a 49  6d 67 4d 6f 64 65 25 3d  |abId=.:ImgMode%=|
0000edd0  30 3a 47 49 46 53 63 61  6e 3d a3 3a 52 47 42 62  |0:GIFScan=.:RGBb|
0000ede0  69 74 73 25 3d 26 30 38  30 38 30 38 3a 42 6c 61  |its%=&080808:Bla|
0000edf0  6e 6b 69 6e 67 3d a3 3a  5a 69 67 5a 61 67 3d b9  |nking=.:ZigZag=.|
0000ee00  3a 49 6e 76 65 72 74 52  47 42 3d a3 3a 46 72 65  |:InvertRGB=.:Fre|
0000ee10  71 43 61 6c 63 3d a3 3a  4f 75 74 4d 6f 64 65 3d  |qCalc=.:OutMode=|
0000ee20  31 3a 4f 75 74 50 61 6c  3d 31 0d 30 5c 30 e7 a4  |1:OutPal=1.0\0..|
0000ee30  6c 6f 61 64 5f 73 74 61  74 75 73 3a f4 20 4c 6f  |load_status:. Lo|
0000ee40  61 64 20 64 65 66 61 75  6c 74 20 73 74 61 74 75  |ad default statu|
0000ee50  73 20 28 69 66 20 61 6e  79 29 0d 30 66 2e f2 73  |s (if any).0f..s|
0000ee60  70 72 69 74 65 5f 68 65  61 64 65 72 28 30 29 3a  |prite_header(0):|
0000ee70  f4 20 49 6e 69 74 69 61  6c 69 73 65 20 73 70 72  |. Initialise spr|
0000ee80  69 74 65 20 61 72 65 61  0d 30 70 05 e1 0d 30 7a  |ite area.0p...0z|
0000ee90  05 20 0d 30 84 19 dd a4  69 63 6f 6e 61 64 64 72  |. .0....iconaddr|
0000eea0  28 77 69 6e 25 2c 69 63  6f 25 29 0d 30 8e 2c f4  |(win%,ico%).0.,.|
0000eeb0  20 52 65 74 75 72 6e 73  20 69 6e 64 69 72 65 63  | Returns indirec|
0000eec0  74 65 64 20 69 63 6f 6e  27 73 20 64 61 74 61 20  |ted icon's data |
0000eed0  61 64 64 72 65 73 73 0d  30 98 3e 21 62 6c 6f 63  |address.0.>!bloc|
0000eee0  6b 3d 77 69 6e 25 3a 62  6c 6f 63 6b 21 34 3d 69  |k=win%:block!4=i|
0000eef0  63 6f 25 3a c8 99 20 57  47 65 74 49 53 25 2c 2c  |co%:.. WGetIS%,,|
0000ef00  62 6c 6f 63 6b 3a f4 20  47 65 74 20 69 63 6f 6e  |block:. Get icon|
0000ef10  20 69 6e 66 6f 0d 30 a2  0d 3d 62 6c 6f 63 6b 21  | info.0..=block!|
0000ef20  32 38 0d 30 ac 05 20 0d  30 b6 11 dd a4 6c 6f 61  |28.0.. .0....loa|
0000ef30  64 5f 73 74 61 74 75 73  0d 30 c0 23 f4 20 4c 6f  |d_status.0.#. Lo|
0000ef40  61 64 73 20 64 65 66 61  75 6c 74 20 73 74 61 74  |ads default stat|
0000ef50  75 73 20 28 69 66 20 61  6e 79 29 0d 30 ca 48 f4  |us (if any).0.H.|
0000ef60  20 52 65 74 75 72 6e 73  20 54 52 55 45 20 69 66  | Returns TRUE if|
0000ef70  20 73 75 63 63 65 73 66  75 6c 2c 20 65 6c 73 65  | succesful, else|
0000ef80  20 46 41 4c 53 45 20 28  69 2e 65 2e 20 73 74 61  | FALSE (i.e. sta|
0000ef90  74 75 73 20 66 69 6c 65  20 6e 6f 74 20 66 6f 75  |tus file not fou|
0000efa0  6e 64 29 0d 30 d4 36 53  74 61 74 75 73 3d 8e 28  |nd).0.6Status=.(|
0000efb0  22 3c 54 72 61 6e 73 6c  61 74 6f 72 24 44 69 72  |"<Translator$Dir|
0000efc0  3e 2e 53 74 61 74 75 73  22 29 3a e7 53 74 61 74  |>.Status"):.Stat|
0000efd0  75 73 3d 30 20 8c 20 3d  a3 0d 30 de 38 e8 23 53  |us=0 . =..0.8.#S|
0000efe0  74 61 74 75 73 2c 41 75  74 6f 4d 6f 64 65 2c 41  |tatus,AutoMode,A|
0000eff0  75 74 6f 50 61 6c 2c 4d  6f 64 65 53 65 74 2c 45  |utoPal,ModeSet,E|
0000f000  72 72 53 70 72 65 61 64  2c 50 61 6c 6f 6e 6f 66  |rrSpread,Palonof|
0000f010  66 0d 30 e8 99 e7 ac c5  23 53 74 61 74 75 73 20  |f.0.....#Status |
0000f020  8c 20 e8 23 53 74 61 74  75 73 2c 55 73 65 72 4d  |. .#Status,UserM|
0000f030  6f 64 65 53 65 74 25 28  31 29 2c 55 73 65 72 4d  |odeSet%(1),UserM|
0000f040  6f 64 65 53 65 74 25 28  32 29 2c 55 73 65 72 4d  |odeSet%(2),UserM|
0000f050  6f 64 65 53 65 74 25 28  33 29 2c 55 73 65 72 4d  |odeSet%(3),UserM|
0000f060  6f 64 65 53 65 74 25 28  34 29 3a e7 ac c5 23 53  |odeSet%(4):...#S|
0000f070  74 61 74 75 73 20 8c 20  e8 23 53 74 61 74 75 73  |tatus . .#Status|
0000f080  2c 41 75 74 6f 5a 6f 6f  6d 3a e7 ac c5 23 53 74  |,AutoZoom:...#St|
0000f090  61 74 75 73 20 8c 20 e8  23 53 74 61 74 75 73 2c  |atus . .#Status,|
0000f0a0  42 6c 61 63 6b 57 68 69  74 65 0d 30 f2 7d e7 ac  |BlackWhite.0.}..|
0000f0b0  c5 23 53 74 61 74 75 73  20 8c 20 e8 23 53 74 61  |.#Status . .#Sta|
0000f0c0  74 75 73 2c 47 49 46 53  63 61 6e 3a e7 ac c5 23  |tus,GIFScan:...#|
0000f0d0  53 74 61 74 75 73 20 8c  20 e8 23 53 74 61 74 75  |Status . .#Statu|
0000f0e0  73 2c 42 6c 61 6e 6b 69  6e 67 3a e7 ac c5 23 53  |s,Blanking:...#S|
0000f0f0  74 61 74 75 73 20 8c 20  e8 23 53 74 61 74 75 73  |tatus . .#Status|
0000f100  2c 49 6e 76 65 72 74 52  47 42 3a e7 ac c5 23 53  |,InvertRGB:...#S|
0000f110  74 61 74 75 73 20 8c 20  e8 23 53 74 61 74 75 73  |tatus . .#Status|
0000f120  2c 5a 69 67 5a 61 67 0d  30 fc 0f d9 23 53 74 61  |,ZigZag.0...#Sta|
0000f130  74 75 73 3a 3d b9 0d 31  06 05 20 0d 31 10 48 dd  |tus:=..1.. .1.H.|
0000f140  f2 63 72 65 61 74 65 5f  6d 65 6e 75 28 78 25 2c  |.create_menu(x%,|
0000f150  79 25 2c 74 69 74 6c 65  24 2c 77 69 64 74 68 25  |y%,title$,width%|
0000f160  2c 68 65 69 67 68 74 25  2c 67 61 70 25 2c 69 63  |,height%,gap%,ic|
0000f170  6f 6e 31 24 2c 69 63 6f  6e 32 24 2c 63 72 65 61  |on1$,icon2$,crea|
0000f180  74 65 29 0d 31 1a 36 f4  20 57 72 69 74 65 73 20  |te).1.6. Writes |
0000f190  6d 65 6e 75 20 73 74 72  75 63 74 75 72 65 2c 20  |menu structure, |
0000f1a0  63 72 65 61 74 65 73 20  69 74 20 69 66 20 63 72  |creates it if cr|
0000f1b0  65 61 74 65 3d 54 52 55  45 0d 31 24 3d f4 20 2d  |eate=TRUE.1$=. -|
0000f1c0  20 49 66 20 78 25 3c 30  20 74 68 65 6e 20 78 2f  | If x%<0 then x/|
0000f1d0  79 20 63 6f 6f 72 64 69  6e 61 74 65 73 20 61 72  |y coordinates ar|
0000f1e0  65 20 28 6d 6f 75 73 65  58 2d 36 34 29 2c 28 6d  |e (mouseX-64),(m|
0000f1f0  6f 75 73 65 59 29 0d 31  2e 4a f4 20 2d 20 49 66  |ouseY).1.J. - If|
0000f200  20 74 69 74 6c 65 24 20  73 74 61 72 74 73 20 22  | title$ starts "|
0000f210  5e 3c 6e 72 3e 22 20 74  68 65 6e 20 74 68 69 73  |^<nr>" then this|
0000f220  20 62 65 63 6f 6d 65 73  20 61 20 3c 6e 72 3e 27  | becomes a <nr>'|
0000f230  74 68 20 73 75 62 6d 65  6e 75 20 28 31 2f 32 29  |th submenu (1/2)|
0000f240  0d 31 38 41 f4 20 2d 20  4d 65 6e 75 20 69 63 6f  |.18A. - Menu ico|
0000f250  6e 73 20 69 6e 20 69 63  6f 6e 20 73 74 72 69 6e  |ns in icon strin|
0000f260  67 73 20 3a 20 3f 3c 69  63 6f 6e 31 3e 7c 3f 3c  |gs : ?<icon1>|?<|
0000f270  69 63 6f 6e 32 3e 7c 2e  2e 2e 2e 2e 20 65 74 63  |icon2>|..... etc|
0000f280  2e 0d 31 42 31 f4 20 2d  20 3f 20 69 73 20 61 20  |..1B1. - ? is a |
0000f290  63 68 61 72 61 63 74 65  72 20 63 6f 6e 74 61 69  |character contai|
0000f2a0  6e 69 6e 67 20 73 65 6c  65 63 74 20 62 69 74 73  |ning select bits|
0000f2b0  20 3a 0d 31 4c 1e f4 20  20 20 62 69 74 20 30 20  | :.1L..   bit 0 |
0000f2c0  3a 20 69 63 6f 6e 20 69  73 20 74 69 63 6b 65 64  |: icon is ticked|
0000f2d0  0d 31 56 31 f4 20 20 20  62 69 74 20 31 20 3a 20  |.1V1.   bit 1 : |
0000f2e0  69 63 6f 6e 20 69 73 20  66 6f 6c 6c 6f 77 65 64  |icon is followed|
0000f2f0  20 62 79 20 61 20 64 6f  74 74 65 64 20 6c 69 6e  | by a dotted lin|
0000f300  65 0d 31 60 20 f4 20 20  20 62 69 74 20 32 20 3a  |e.1` .   bit 2 :|
0000f310  20 69 63 6f 6e 20 69 73  20 77 72 69 74 61 62 6c  | icon is writabl|
0000f320  65 0d 31 6a 34 f4 20 20  20 62 69 74 20 33 20 3a  |e.1j4.   bit 3 :|
0000f330  20 69 63 6f 6e 20 69 73  20 73 68 61 64 65 64 20  | icon is shaded |
0000f340  28 69 2e 65 2e 20 6e 6f  74 20 73 65 6c 65 63 74  |(i.e. not select|
0000f350  61 62 6c 65 29 0d 31 74  3e f4 20 20 20 62 69 74  |able).1t>.   bit|
0000f360  20 34 20 3a 20 77 72 69  74 61 62 6c 65 20 69 63  | 4 : writable ic|
0000f370  6f 6e 20 68 61 73 20 34  30 20 63 68 61 72 61 63  |on has 40 charac|
0000f380  74 65 72 73 20 72 6f 6f  6d 20 28 65 6c 73 65 20  |ters room (else |
0000f390  31 36 29 0d 31 7e 18 f4  20 20 20 62 69 74 20 35  |16).1~..   bit 5|
0000f3a0  20 3a 20 61 6c 77 61 79  73 20 31 0d 31 88 41 f4  | : always 1.1.A.|
0000f3b0  20 2d 20 69 63 6f 6e 73  20 6f 66 20 66 6f 72 6d  | - icons of form|
0000f3c0  20 27 3f 3c 73 74 72 3e  26 3c 76 61 6c 3e 27 20  | '?<str>&<val>' |
0000f3d0  68 61 76 65 20 76 61 6c  69 64 61 74 69 6f 6e 20  |have validation |
0000f3e0  73 74 72 69 6e 67 20 3c  76 61 6c 3e 0d 31 92 46  |string <val>.1.F|
0000f3f0  f4 20 2d 20 69 63 6f 6e  73 20 6f 66 20 66 6f 72  |. - icons of for|
0000f400  6d 20 27 3f 3c 73 74 72  3e 23 3c 76 61 6c 3e 27  |m '?<str>#<val>'|
0000f410  20 68 61 76 65 20 73 75  62 2d 77 69 6e 64 6f 77  | have sub-window|
0000f420  20 77 69 74 68 20 68 61  6e 64 6c 65 20 3c 76 61  | with handle <va|
0000f430  6c 3e 0d 31 9c 34 f4 20  20 20 61 6c 73 6f 2c 20  |l>.1.4.   also, |
0000f440  74 68 65 20 27 6d 65 6e  75 20 77 61 72 6e 69 6e  |the 'menu warnin|
0000f450  67 20 6d 65 73 73 61 67  65 27 20 69 73 20 73 65  |g message' is se|
0000f460  6c 65 63 74 65 64 0d 31  a6 39 ea 20 69 24 2c 70  |lected.1.9. i$,p|
0000f470  74 72 25 2c 69 78 25 2c  64 61 74 61 70 74 72 25  |tr%,ix%,dataptr%|
0000f480  2c 69 6c 65 6e 25 2c 70  25 2c 69 74 24 2c 74 79  |,ilen%,p%,it$,ty|
0000f490  70 65 25 2c 64 61 74 61  24 2c 6d 65 6e 75 25 0d  |pe%,data$,menu%.|
0000f4a0  31 b0 22 ea 20 76 61 6c  69 64 24 2c 73 75 62 2c  |1.". valid$,sub,|
0000f4b0  63 61 6c 6c 25 2c 74 69  63 6b 25 2c 77 72 69 74  |call%,tick%,writ|
0000f4c0  25 0d 31 ba 34 ea 20 62  75 74 74 79 25 2c 73 68  |%.1.4. butty%,sh|
0000f4d0  61 64 65 64 25 2c 64 6f  74 74 65 64 25 2c 73 75  |aded%,dotted%,su|
0000f4e0  62 25 2c 73 75 62 77 61  72 6e 25 2c 69 63 6f 6e  |b%,subwarn%,icon|
0000f4f0  25 2c 6e 72 25 0d 31 c4  3f e7 78 25 3c 30 20 8c  |%,nr%.1.?.x%<0 .|
0000f500  20 f2 6d 6f 75 73 65 28  78 25 2c 79 25 2c 5f 25  | .mouse(x%,y%,_%|
0000f510  29 3a 78 25 2d 3d 36 34  3a f4 20 47 65 74 20 63  |):x%-=64:. Get c|
0000f520  6f 6f 72 64 69 6e 61 74  65 73 20 76 69 61 20 6d  |oordinates via m|
0000f530  6f 75 73 65 0d 31 ce 15  e7 c0 74 69 74 6c 65 24  |ouse.1....title$|
0000f540  2c 31 29 3d 22 5e 22 20  8c 0d 31 d8 1e 20 73 75  |,1)="^" ..1.. su|
0000f550  62 3d b9 3a 6e 72 25 3d  bb 28 c1 74 69 74 6c 65  |b=.:nr%=.(.title|
0000f560  24 2c 32 2c 31 29 29 0d  31 e2 47 20 e7 6e 72 25  |$,2,1)).1.G .nr%|
0000f570  3d 31 20 8c 20 6d 65 6e  75 25 3d 73 75 62 6d 65  |=1 . menu%=subme|
0000f580  6e 75 31 20 8b 20 e7 6e  72 25 3d 32 20 8c 20 6d  |nu1 . .nr%=2 . m|
0000f590  65 6e 75 25 3d 73 75 62  6d 65 6e 75 32 20 8b 20  |enu%=submenu2 . |
0000f5a0  6d 65 6e 75 25 3d 73 75  62 6d 65 6e 75 33 0d 31  |menu%=submenu3.1|
0000f5b0  ec 16 20 74 69 74 6c 65  24 3d c1 74 69 74 6c 65  |.. title$=.title|
0000f5c0  24 2c 33 29 0d 31 f6 17  cc 20 73 75 62 3d a3 3a  |$,3).1... sub=.:|
0000f5d0  6d 65 6e 75 25 3d 6d 65  6e 75 31 0d 32 00 05 cd  |menu%=menu1.2...|
0000f5e0  0d 32 0a 74 24 6d 65 6e  75 25 3d 74 69 74 6c 65  |.2.t$menu%=title|
0000f5f0  24 3a 6d 65 6e 75 25 3f  31 32 3d 74 66 25 3a 6d  |$:menu%?12=tf%:m|
0000f600  65 6e 75 25 3f 31 33 3d  74 62 25 3a 6d 65 6e 75  |enu%?13=tb%:menu|
0000f610  25 3f 31 34 3d 77 66 25  3a 6d 65 6e 75 25 3f 31  |%?14=wf%:menu%?1|
0000f620  35 3d 77 62 25 3a 6d 65  6e 75 25 21 31 36 3d 77  |5=wb%:menu%!16=w|
0000f630  69 64 74 68 25 3a 6d 65  6e 75 25 21 32 30 3d 68  |idth%:menu%!20=h|
0000f640  65 69 67 68 74 25 3a 6d  65 6e 75 25 21 32 34 3d  |eight%:menu%!24=|
0000f650  67 61 70 25 0d 32 14 12  f4 20 44 65 66 69 6e 65  |gap%.2... Define|
0000f660  20 69 63 6f 6e 73 0d 32  1e 29 69 24 3d 69 63 6f  | icons.2.)i$=ico|
0000f670  6e 31 24 3a 69 63 6f 6e  25 3d 31 3a f4 20 46 69  |n1$:icon%=1:. Fi|
0000f680  72 73 74 20 69 63 6f 6e  20 73 74 72 69 6e 67 0d  |rst icon string.|
0000f690  32 28 35 70 74 72 25 3d  6d 65 6e 75 25 2b 32 38  |2(5ptr%=menu%+28|
0000f6a0  3a 69 78 25 3d 30 3a 64  61 74 61 70 74 72 25 3d  |:ix%=0:dataptr%=|
0000f6b0  6d 65 6e 75 25 2b 35 31  32 3a f4 20 50 6f 69 6e  |menu%+512:. Poin|
0000f6c0  74 65 72 73 0d 32 32 19  c8 95 20 69 24 3c 3e 22  |ters.22... i$<>"|
0000f6d0  22 3a 70 25 3d a7 69 24  2c 22 7c 22 29 0d 32 3c  |":p%=.i$,"|").2<|
0000f6e0  0b e7 70 25 3d 30 20 8c  0d 32 46 0a 20 69 24 3d  |..p%=0 ..2F. i$=|
0000f6f0  22 22 0d 32 50 13 cc 20  f4 20 44 65 66 69 6e 65  |"".2P.. . Define|
0000f700  20 69 63 6f 6e 0d 32 5a  21 20 69 74 24 3d c0 69  | icon.2Z! it$=.i|
0000f710  24 2c 70 25 2d 31 29 3a  69 24 3d c2 69 24 2c a9  |$,p%-1):i$=.i$,.|
0000f720  69 24 2d 70 25 29 0d 32  64 26 20 74 79 70 65 25  |i$-p%).2d& type%|
0000f730  3d 97 c0 69 74 24 2c 31  29 3a 64 61 74 61 24 3d  |=..it$,1):data$=|
0000f740  c2 69 74 24 2c a9 69 74  24 2d 31 29 0d 32 6e 82  |.it$,.it$-1).2n.|
0000f750  20 74 69 63 6b 25 3d 28  74 79 70 65 25 80 25 30  | tick%=(type%.%0|
0000f760  30 30 30 30 31 29 3a 64  6f 74 74 65 64 25 3d 28  |00001):dotted%=(|
0000f770  74 79 70 65 25 80 25 30  30 30 30 31 30 29 3e 3e  |type%.%000010)>>|
0000f780  31 3a 77 72 69 74 25 3d  28 74 79 70 65 25 80 25  |1:writ%=(type%.%|
0000f790  30 30 30 31 30 30 29 3e  3e 32 3a 73 68 61 64 65  |000100)>>2:shade|
0000f7a0  64 25 3d 28 74 79 70 65  25 80 25 30 30 31 30 30  |d%=(type%.%00100|
0000f7b0  30 29 3e 3e 33 3a 6c 6f  6e 67 25 3d 28 74 79 70  |0)>>3:long%=(typ|
0000f7c0  65 25 80 25 30 31 30 30  30 30 29 3e 3e 34 0d 32  |e%.%010000)>>4.2|
0000f7d0  78 71 20 76 61 6c 69 64  24 3d 22 22 3a 70 25 3d  |xq valid$="":p%=|
0000f7e0  a7 64 61 74 61 24 2c 22  26 22 29 3a e7 70 25 3e  |.data$,"&"):.p%>|
0000f7f0  30 20 8c 20 76 61 6c 69  64 24 3d c1 64 61 74 61  |0 . valid$=.data|
0000f800  24 2c 70 25 2b 31 29 3a  64 61 74 61 24 3d c0 64  |$,p%+1):data$=.d|
0000f810  61 74 61 24 2c 70 25 2d  31 29 3a f4 20 45 78 74  |ata$,p%-1):. Ext|
0000f820  72 61 63 74 20 76 61 6c  69 64 61 74 69 6f 6e 20  |ract validation |
0000f830  73 74 72 69 6e 67 20 28  69 66 20 61 6e 79 29 0d  |string (if any).|
0000f840  32 82 85 20 73 75 62 25  3d 2d 31 3a 73 75 62 77  |2.. sub%=-1:subw|
0000f850  61 72 6e 25 3d 30 3a 70  25 3d a7 64 61 74 61 24  |arn%=0:p%=.data$|
0000f860  2c 22 23 22 29 3a e7 70  25 3e 30 20 8c 20 73 75  |,"#"):.p%>0 . su|
0000f870  62 25 3d bb 28 c1 64 61  74 61 24 2c 70 25 2b 31  |b%=.(.data$,p%+1|
0000f880  29 29 3a 73 75 62 77 61  72 6e 25 3d 31 3a 64 61  |)):subwarn%=1:da|
0000f890  74 61 24 3d c0 64 61 74  61 24 2c 70 25 2d 31 29  |ta$=.data$,p%-1)|
0000f8a0  3a f4 20 45 78 74 72 61  63 74 20 73 75 62 77 69  |:. Extract subwi|
0000f8b0  6e 64 6f 77 20 68 61 6e  64 6c 65 20 28 69 66 20  |ndow handle (if |
0000f8c0  61 6e 79 29 0d 32 8c 3e  20 e7 77 72 69 74 25 3d  |any).2.> .writ%=|
0000f8d0  30 20 8c 20 69 6c 65 6e  25 3d a9 64 61 74 61 24  |0 . ilen%=.data$|
0000f8e0  2b 31 20 8b e7 6c 6f 6e  67 25 3d 30 20 8c 20 69  |+1 ..long%=0 . i|
0000f8f0  6c 65 6e 25 3d 31 36 20  8b 20 69 6c 65 6e 25 3d  |len%=16 . ilen%=|
0000f900  34 30 0d 32 96 43 20 21  70 74 72 25 3d 28 73 75  |40.2.C !ptr%=(su|
0000f910  62 77 61 72 6e 25 3c 3c  33 29 2b 28 77 72 69 74  |bwarn%<<3)+(writ|
0000f920  25 3c 3c 32 29 2b 28 64  6f 74 74 65 64 25 3c 3c  |%<<2)+(dotted%<<|
0000f930  31 29 2b 74 69 63 6b 25  3a f4 20 4d 65 6e 75 20  |1)+tick%:. Menu |
0000f940  66 6c 61 67 73 0d 32 a0  22 20 70 74 72 25 21 34  |flags.2." ptr%!4|
0000f950  3d 73 75 62 25 3a f4 20  53 75 62 20 6d 65 6e 75  |=sub%:. Sub menu|
0000f960  2f 77 69 6e 64 6f 77 0d  32 aa 3e 20 70 74 72 25  |/window.2.> ptr%|
0000f970  21 38 3d 28 77 62 25 3c  3c 32 38 29 2b 28 77 66  |!8=(wb%<<28)+(wf|
0000f980  25 3c 3c 32 34 29 2b 28  73 68 61 64 65 64 25 3c  |%<<24)+(shaded%<|
0000f990  3c 32 32 29 2b 28 31 3c  3c 38 29 2b 31 3a f4 20  |<22)+(1<<8)+1:. |
0000f9a0  46 6c 61 67 73 0d 32 b4  45 20 24 64 61 74 61 70  |Flags.2.E $datap|
0000f9b0  74 72 25 3d 64 61 74 61  24 3a 70 74 72 25 21 31  |tr%=data$:ptr%!1|
0000f9c0  32 3d 64 61 74 61 70 74  72 25 3a 70 74 72 25 21  |2=dataptr%:ptr%!|
0000f9d0  32 30 3d 69 6c 65 6e 25  3a 64 61 74 61 70 74 72  |20=ilen%:dataptr|
0000f9e0  25 2b 3d 69 6c 65 6e 25  2b 31 0d 32 be 54 20 e7  |%+=ilen%+1.2.T .|
0000f9f0  76 61 6c 69 64 24 3d 22  22 20 8c 20 70 74 72 25  |valid$="" . ptr%|
0000fa00  21 31 36 3d 2d 31 20 8b  20 24 64 61 74 61 70 74  |!16=-1 . $datapt|
0000fa10  72 25 3d 76 61 6c 69 64  24 3a 70 74 72 25 21 31  |r%=valid$:ptr%!1|
0000fa20  36 3d 64 61 74 61 70 74  72 25 3a 64 61 74 61 70  |6=dataptr%:datap|
0000fa30  74 72 25 2b 3d a9 76 61  6c 69 64 24 2b 31 0d 32  |tr%+=.valid$+1.2|
0000fa40  c8 14 20 70 74 72 25 2b  3d 32 34 3a 69 78 25 2b  |.. ptr%+=24:ix%+|
0000fa50  3d 31 0d 32 d2 05 cd 0d  32 dc 2a e7 69 24 3d 22  |=1.2....2.*.i$="|
0000fa60  22 20 8c 20 e7 69 63 6f  6e 25 3d 31 20 8c 20 69  |" . .icon%=1 . i|
0000fa70  24 3d 69 63 6f 6e 32 24  3a 69 63 6f 6e 25 2b 3d  |$=icon2$:icon%+=|
0000fa80  31 0d 32 e6 05 ce 0d 32  f0 32 70 74 72 25 21 2d  |1.2....2.2ptr%!-|
0000fa90  32 34 3d 28 70 74 72 25  21 2d 32 34 29 84 26 38  |24=(ptr%!-24).&8|
0000faa0  30 3a f4 20 49 6e 64 69  63 61 74 65 20 27 6c 61  |0:. Indicate 'la|
0000fab0  73 74 20 69 63 6f 6e 27  0d 32 fa 10 e7 ac 63 72  |st icon'.2....cr|
0000fac0  65 61 74 65 20 8c 20 e1  0d 33 04 41 e7 73 75 62  |eate . ..3.A.sub|
0000fad0  20 8c 20 c8 99 20 57 43  72 65 61 74 65 53 4d 25  | . .. WCreateSM%|
0000fae0  2c 2c 6d 65 6e 75 25 2c  78 25 2c 79 25 20 8b 20  |,,menu%,x%,y% . |
0000faf0  c8 99 20 57 43 72 65 61  74 65 4d 25 2c 2c 6d 65  |.. WCreateM%,,me|
0000fb00  6e 75 25 2c 78 25 2c 79  25 0d 33 0e 05 e1 0d 33  |nu%,x%,y%.3....3|
0000fb10  18 05 20 0d 33 22 19 dd  a4 73 65 6c 28 74 25 2c  |.. .3"...sel(t%,|
0000fb20  64 25 2c 77 25 2c 73 25  2c 72 25 29 0d 33 2c 32  |d%,w%,s%,r%).3,2|
0000fb30  f4 20 52 65 74 75 72 6e  73 20 73 65 6c 65 63 74  |. Returns select|
0000fb40  20 63 68 61 72 61 63 74  65 72 20 66 6f 72 20 69  | character for i|
0000fb50  63 6f 6e 20 61 74 74 72  69 62 75 74 65 73 0d 33  |con attributes.3|
0000fb60  36 45 3d bd 28 28 31 3c  3c 35 29 2b 28 28 72 25  |6E=.((1<<5)+((r%|
0000fb70  80 31 29 3c 3c 34 29 2b  28 28 73 25 80 31 29 3c  |.1)<<4)+((s%.1)<|
0000fb80  3c 33 29 2b 28 28 77 25  80 31 29 3c 3c 32 29 2b  |<3)+((w%.1)<<2)+|
0000fb90  28 28 64 25 80 31 29 3c  3c 31 29 2b 28 74 25 80  |((d%.1)<<1)+(t%.|
0000fba0  31 29 29 0d 33 40 05 20  0d 33 4a 09 dd a4 75 6d  |1)).3@. .3J...um|
0000fbb0  73 0d 33 54 37 f4 20 52  65 74 75 72 6e 73 20 73  |s.3T7. Returns s|
0000fbc0  74 72 69 6e 67 20 72 65  70 72 65 73 65 6e 74 69  |tring representi|
0000fbd0  6e 67 20 63 75 72 72 65  6e 74 20 75 73 65 72 20  |ng current user |
0000fbe0  6d 6f 64 65 20 73 65 74  0d 33 5e 5c 3d c3 28 55  |mode set.3^\=.(U|
0000fbf0  73 65 72 4d 6f 64 65 53  65 74 25 28 31 29 29 2b  |serModeSet%(1))+|
0000fc00  22 2c 22 2b c3 28 55 73  65 72 4d 6f 64 65 53 65  |","+.(UserModeSe|
0000fc10  74 25 28 32 29 29 2b 22  2c 22 2b c3 28 55 73 65  |t%(2))+","+.(Use|
0000fc20  72 4d 6f 64 65 53 65 74  25 28 33 29 29 2b 22 2c  |rModeSet%(3))+",|
0000fc30  22 2b c3 28 55 73 65 72  4d 6f 64 65 53 65 74 25  |"+.(UserModeSet%|
0000fc40  28 34 29 29 0d 33 68 05  20 0d 33 72 1b dd a4 61  |(4)).3h. .3r...a|
0000fc50  76 61 69 6c 61 62 6c 65  5f 6d 6f 64 65 28 6d 6f  |vailable_mode(mo|
0000fc60  64 65 25 29 0d 33 7c 43  f4 20 43 68 65 63 6b 73  |de%).3|C. Checks|
0000fc70  20 69 66 20 6d 6f 64 65  25 20 69 73 20 61 20 76  | if mode% is a v|
0000fc80  61 6c 69 64 20 57 49 4d  50 20 6d 6f 64 65 20 61  |alid WIMP mode a|
0000fc90  6e 64 20 61 76 61 69 6c  61 62 6c 65 20 6f 6e 20  |nd available on |
0000fca0  6d 6f 6e 69 74 6f 72 0d  33 86 30 e7 6d 6f 64 65  |monitor.3.0.mode|
0000fcb0  25 3d 33 20 84 20 6d 6f  64 65 25 3d 36 20 84 20  |%=3 . mode%=6 . |
0000fcc0  6d 6f 64 65 25 3d 37 20  84 20 6d 6f 64 65 25 3d  |mode%=7 . mode%=|
0000fcd0  32 33 20 8c 20 3d a3 0d  33 90 1c e7 6d 6f 64 65  |23 . =..3...mode|
0000fce0  25 3c 30 20 84 20 6d 6f  64 65 25 3e 32 38 20 8c  |%<0 . mode%>28 .|
0000fcf0  20 3d a3 0d 33 9a 2a e7  6d 6f 64 65 25 3d 32 34  | =..3.*.mode%=24|
0000fd00  20 84 20 6d 6f 64 65 25  3c 31 38 20 8c 20 3d b9  | . mode%<18 . =.|
0000fd10  20 8b 20 3d 4d 75 6c 74  69 53 79 6e 63 0d 33 a4  | . =MultiSync.3.|
0000fd20  05 20 0d 33 ae 11 dd a4  61 6c 69 67 6e 28 76 61  |. .3....align(va|
0000fd30  6c 25 29 0d 33 b8 30 f4  20 52 65 74 75 72 6e 73  |l%).3.0. Returns|
0000fd40  20 6e 65 78 74 2d 75 70  20 77 6f 72 64 20 61 6c  | next-up word al|
0000fd50  69 67 6e 65 64 20 76 61  6c 75 65 20 6f 66 20 76  |igned value of v|
0000fd60  61 6c 25 0d 33 c2 10 3d  28 76 61 6c 25 2b 33 29  |al%.3..=(val%+3)|
0000fd70  80 ac 33 0d 33 cc 05 20  0d 33 d6 16 dd a4 72 65  |..3.3.. .3....re|
0000fd80  61 64 70 61 6c 76 61 6c  28 72 67 62 25 29 0d 33  |adpalval(rgb%).3|
0000fd90  e0 33 f4 20 52 65 74 75  72 6e 73 20 27 4f 53 5f  |.3. Returns 'OS_|
0000fda0  52 65 61 64 50 61 6c 65  74 74 65 27 20 77 6f 72  |ReadPalette' wor|
0000fdb0  64 20 66 72 6f 6d 20 26  52 47 42 20 76 61 6c 75  |d from &RGB valu|
0000fdc0  65 0d 33 ea 3f 3d 28 28  72 67 62 25 80 26 46 46  |e.3.?=((rgb%.&FF|
0000fdd0  29 3c 3c 32 34 29 2b 28  28 72 67 62 25 80 26 46  |)<<24)+((rgb%.&F|
0000fde0  46 30 30 29 3c 3c 38 29  2b 28 28 72 67 62 25 80  |F00)<<8)+((rgb%.|
0000fdf0  26 46 46 30 30 30 30 29  3e 3e 38 29 2b 26 31 30  |&FF0000)>>8)+&10|
0000fe00  0d 33 f4 05 20 0d 33 fe  13 dd a4 73 74 72 69 6e  |.3.. .3....strin|
0000fe10  67 28 61 64 64 72 25 29  0d 34 08 32 f4 20 52 65  |g(addr%).4.2. Re|
0000fe20  74 75 72 6e 73 20 43 54  52 4c 2d 63 68 61 72 20  |turns CTRL-char |
0000fe30  74 65 72 6d 69 6e 61 74  65 64 20 73 74 72 69 6e  |terminated strin|
0000fe40  67 20 61 74 20 61 64 64  72 25 0d 34 12 0f ea 20  |g at addr%.4... |
0000fe50  5f 25 2c 5f 63 25 2c 5f  24 0d 34 1c 1f 5f 25 3d  |_%,_c%,_$.4.._%=|
0000fe60  2d 31 3a f5 20 5f 25 2b  3d 31 3a fd 20 61 64 64  |-1:. _%+=1:. add|
0000fe70  72 25 3f 5f 25 3c 33 32  0d 34 26 33 5f 63 25 3d  |r%?_%<32.4&3_c%=|
0000fe80  61 64 64 72 25 3f 5f 25  3a 61 64 64 72 25 3f 5f  |addr%?_%:addr%?_|
0000fe90  25 3d 31 33 3a 5f 24 3d  24 61 64 64 72 25 3a 61  |%=13:_$=$addr%:a|
0000fea0  64 64 72 25 3f 5f 25 3d  5f 63 25 0d 34 30 07 3d  |ddr%?_%=_c%.40.=|
0000feb0  5f 24 0d 34 3a 05 20 0d  34 44 12 dd a4 75 70 73  |_$.4:. .4D...ups|
0000fec0  74 72 69 6e 67 28 6d 24  29 0d 34 4e 1b f4 20 52  |tring(m$).4N.. R|
0000fed0  65 74 75 72 6e 73 20 75  70 70 65 72 20 63 61 73  |eturns upper cas|
0000fee0  65 20 6d 24 0d 34 58 0e  ea 20 63 25 2c 76 25 2c  |e m$.4X.. c%,v%,|
0000fef0  75 24 0d 34 62 52 75 24  3d 6d 24 3a e3 20 63 25  |u$.4bRu$=m$:. c%|
0000ff00  3d 31 20 b8 20 a9 20 6d  24 3a 76 25 3d 97 c1 6d  |=1 . . m$:v%=..m|
0000ff10  24 2c 63 25 2c 31 29 3a  e7 28 76 25 3c 3d 97 22  |$,c%,1):.(v%<=."|
0000ff20  7a 22 29 80 28 76 25 3e  3d 97 22 61 22 29 20 8c  |z").(v%>=."a") .|
0000ff30  20 c1 75 24 2c 63 25 2c  31 29 3d bd 28 76 25 80  | .u$,c%,1)=.(v%.|
0000ff40  26 35 46 29 0d 34 6c 09  ed 3a 3d 75 24 0d 34 76  |&5F).4l..:=u$.4v|
0000ff50  05 20 0d 34 80 1d dd f2  6d 6f 75 73 65 28 f8 20  |. .4....mouse(. |
0000ff60  78 25 2c f8 20 79 25 2c  f8 20 62 75 74 25 29 0d  |x%,. y%,. but%).|
0000ff70  34 8a 2b f4 20 52 65 74  75 72 6e 73 20 78 2c 79  |4.+. Returns x,y|
0000ff80  20 61 6e 64 20 62 75 74  74 6f 6e 20 73 74 61 74  | and button stat|
0000ff90  65 20 6f 66 20 6d 6f 75  73 65 0d 34 94 11 c8 97  |e of mouse.4....|
0000ffa0  20 78 25 2c 79 25 2c 62  75 74 25 0d 34 9e 05 e1  | x%,y%,but%.4...|
0000ffb0  0d 34 a8 05 20 0d 34 b2  0a dd a4 63 32 35 36 0d  |.4.. .4....c256.|
0000ffc0  34 bc 35 f4 20 52 65 74  75 72 6e 73 20 54 52 55  |4.5. Returns TRU|
0000ffd0  45 20 69 66 20 63 75 72  72 65 6e 74 20 6d 6f 64  |E if current mod|
0000ffe0  65 20 69 73 20 32 35 36  20 63 6f 6c 6f 75 72 20  |e is 256 colour |
0000fff0  6d 6f 64 65 0d 34 c6 11  3d 28 a4 6c 6f 67 32 42  |mode.4..=(.log2B|
00010000  50 50 3d 33 29 0d 34 d0  05 20 0d 34 da 0d dd a4  |PP=3).4.. .4....|
00010010  6c 6f 67 32 42 50 50 0d  34 e4 26 f4 20 52 65 74  |log2BPP.4.&. Ret|
00010020  75 72 6e 73 20 4c 6f 67  32 42 50 50 20 66 6f 72  |urns Log2BPP for|
00010030  20 63 75 72 72 65 6e 74  20 6d 6f 64 65 0d 34 ee  | current mode.4.|
00010040  13 3d a4 6d 6f 64 65 5f  76 61 72 28 eb 2c 39 29  |.=.mode_var(.,9)|
00010050  0d 34 f8 05 20 0d 35 02  15 dd a4 76 64 75 5f 76  |.4.. .5....vdu_v|
00010060  61 72 28 76 61 72 6e 72  25 29 0d 35 0c 21 f4 20  |ar(varnr%).5.!. |
00010070  52 65 74 75 72 6e 73 20  56 44 55 20 76 61 72 69  |Returns VDU vari|
00010080  61 62 6c 65 20 76 61 72  6e 72 25 0d 35 16 3b 21  |able varnr%.5.;!|
00010090  61 72 67 25 3d 76 61 72  6e 72 25 3a 61 72 67 25  |arg%=varnr%:arg%|
000100a0  21 34 3d 2d 31 3a c8 99  20 4f 53 52 65 61 64 56  |!4=-1:.. OSReadV|
000100b0  56 25 2c 61 72 67 25 2c  61 72 67 25 2b 38 3a 3d  |V%,arg%,arg%+8:=|
000100c0  61 72 67 25 21 38 0d 35  20 05 20 0d 35 2a 1c dd  |arg%!8.5 . .5*..|
000100d0  a4 6d 6f 64 65 5f 76 61  72 28 6d 6f 64 65 25 2c  |.mode_var(mode%,|
000100e0  76 61 72 6e 72 25 29 0d  35 34 28 f4 20 52 65 74  |varnr%).54(. Ret|
000100f0  75 72 6e 73 20 6d 6f 64  65 20 6d 6f 64 65 25 20  |urns mode mode% |
00010100  76 61 72 69 61 62 6c 65  20 76 61 72 6e 72 25 0d  |variable varnr%.|
00010110  35 3e 0d ea 20 72 65 73  75 6c 74 25 0d 35 48 32  |5>.. result%.5H2|
00010120  c8 99 20 4f 53 52 65 61  64 4d 56 25 2c 6d 6f 64  |.. OSReadMV%,mod|
00010130  65 25 2c 76 61 72 6e 72  25 20 b8 20 2c 2c 72 65  |e%,varnr% . ,,re|
00010140  73 75 6c 74 25 3a 3d 72  65 73 75 6c 74 25 0d 35  |sult%:=result%.5|
00010150  52 05 20 0d 35 5c 10 dd  a4 4f 53 5f 76 61 72 28  |R. .5\...OS_var(|
00010160  5f 24 29 0d 35 66 2e f4  20 41 74 74 65 6d 70 74  |_$).5f.. Attempt|
00010170  73 20 74 6f 20 72 65 74  75 72 6e 20 4f 53 2d 76  |s to return OS-v|
00010180  61 72 27 73 20 73 74 72  69 6e 67 20 76 61 6c 75  |ar's string valu|
00010190  65 0d 35 70 0d ea 20 5f  72 24 2c 5f 6c 25 0d 35  |e.5p.. _r$,_l%.5|
000101a0  7a 37 c8 99 20 22 58 4f  53 5f 52 65 61 64 56 61  |z7.. "XOS_ReadVa|
000101b0  72 56 61 6c 22 2c 5f 24  2c c4 31 30 30 2c 22 20  |rVal",_$,.100," |
000101c0  22 29 2c 31 30 30 2c 30  2c 33 20 b8 20 2c 5f 72  |"),100,0,3 . ,_r|
000101d0  24 2c 5f 6c 25 0d 35 84  16 5f 72 24 3d c0 5f 72  |$,_l%.5.._r$=._r|
000101e0  24 2c 5f 6c 25 29 3a 3d  5f 72 24 0d 35 8e 05 20  |$,_l%):=_r$.5.. |
000101f0  0d 35 98 15 dd a4 73 77  69 5f 74 6f 5f 6e 72 28  |.5....swi_to_nr(|
00010200  73 77 69 24 29 0d 35 a2  29 f4 20 52 65 74 75 72  |swi$).5.). Retur|
00010210  6e 73 20 53 57 49 20 6e  75 6d 62 65 72 20 6f 66  |ns SWI number of|
00010220  20 53 57 49 20 63 61 6c  6c 20 73 77 69 24 0d 35  | SWI call swi$.5|
00010230  ac 0c ea 20 73 77 69 6e  72 25 0d 35 b6 2f c8 99  |... swinr%.5./..|
00010240  20 22 58 4f 53 5f 53 57  49 4e 75 6d 62 65 72 46  | "XOS_SWINumberF|
00010250  72 6f 6d 53 74 72 69 6e  67 22 2c 2c 73 77 69 24  |romString",,swi$|
00010260  20 b8 20 73 77 69 6e 72  25 0d 35 c0 0b 3d 73 77  | . swinr%.5..=sw|
00010270  69 6e 72 25 0d 35 ca 05  20 0d 35 d4 1a dd f2 65  |inr%.5.. .5....e|
00010280  72 72 6f 72 28 65 72 72  6e 72 2c 65 72 72 6d 73  |rror(errnr,errms|
00010290  67 24 29 0d 35 de 14 f4  20 48 61 6e 64 6c 65 73  |g$).5... Handles|
000102a0  20 65 72 72 6f 72 73 0d  35 e8 16 ea 20 62 75 74  | errors.5... but|
000102b0  25 2c 6f 6c 64 70 61 6c  2c 6f 70 74 25 0d 35 f2  |%,oldpal,opt%.5.|
000102c0  39 c8 99 20 22 54 72 61  6e 73 6c 61 74 6f 72 5f  |9.. "Translator_|
000102d0  56 69 64 65 6f 44 4d 41  22 2c 31 3a f4 20 45 6e  |VideoDMA",1:. En|
000102e0  73 75 72 65 20 76 69 64  65 6f 20 44 4d 41 20 65  |sure video DMA e|
000102f0  6e 61 62 6c 65 64 0d 35  fc 27 e7 65 72 72 6e 72  |nabled.5.'.errnr|
00010300  3d 2d 31 20 8c 20 65 72  72 6e 72 3d 31 3a 6f 70  |=-1 . errnr=1:op|
00010310  74 25 3d 31 20 8b 20 6f  70 74 25 3d 33 0d 36 06  |t%=1 . opt%=3.6.|
00010320  1f 21 65 72 72 3d 65 72  72 6e 72 3a 24 28 65 72  |.!err=errnr:$(er|
00010330  72 2b 34 29 3d 65 72 72  6d 73 67 24 0d 36 10 44  |r+4)=errmsg$.6.D|
00010340  c8 99 20 22 54 72 61 6e  73 6c 61 74 6f 72 5f 50  |.. "Translator_P|
00010350  61 6c 65 74 74 65 22 2c  32 5e a4 6c 6f 67 32 42  |alette",2^.log2B|
00010360  50 50 2c 64 75 6d 25 2c  31 3a f4 20 52 65 61 64  |PP,dum%,1:. Read|
00010370  20 63 75 72 72 65 6e 74  20 70 61 6c 65 74 74 65  | current palette|
00010380  0d 36 1a 29 f2 73 65 74  5f 70 61 6c 65 74 74 65  |.6.).set_palette|
00010390  28 30 29 3a f4 20 53 65  6c 65 63 74 20 57 49 4d  |(0):. Select WIM|
000103a0  50 20 70 61 6c 65 74 74  65 0d 36 24 2a c8 99 20  |P palette.6$*.. |
000103b0  57 52 65 70 6f 72 74 25  2c 65 72 72 2c 6f 70 74  |WReport%,err,opt|
000103c0  25 2c 61 70 70 6c 6e 61  6d 65 24 20 b8 20 2c 62  |%,applname$ . ,b|
000103d0  75 74 25 0d 36 2e 13 e7  62 75 74 25 3c 3e 31 20  |ut%.6...but%<>1 |
000103e0  8c 20 f2 64 69 65 0d 36  38 42 c8 99 20 22 54 72  |. .die.68B.. "Tr|
000103f0  61 6e 73 6c 61 74 6f 72  5f 53 65 74 50 61 6c 65  |anslator_SetPale|
00010400  74 74 65 22 2c 32 5e 28  32 5e a4 6c 6f 67 32 42  |tte",2^(2^.log2B|
00010410  50 50 29 2c 64 75 6d 25  3a f4 20 52 65 73 65 74  |PP),dum%:. Reset|
00010420  20 70 61 6c 65 74 74 65  0d 36 42 05 e1 0d 36 4c  | palette.6B...6L|
00010430  05 20 0d 36 56 0a dd a4  73 70 72 57 0d 36 60 3f  |. .6V...sprW.6`?|
00010440  f4 20 52 65 74 75 72 6e  73 20 69 6d 61 67 65 20  |. Returns image |
00010450  73 70 72 69 74 65 27 73  20 77 69 64 74 68 20 69  |sprite's width i|
00010460  6e 20 4f 53 20 70 69 78  65 6c 73 20 69 6e 20 63  |n OS pixels in c|
00010470  75 72 72 65 6e 74 20 6d  6f 64 65 0d 36 6a 1b 3d  |urrent mode.6j.=|
00010480  53 70 72 57 25 2a 32 5e  a4 6d 6f 64 65 5f 76 61  |SprW%*2^.mode_va|
00010490  72 28 eb 2c 34 29 0d 36  74 05 20 0d 36 7e 0a dd  |r(.,4).6t. .6~..|
000104a0  a4 73 70 72 48 0d 36 88  40 f4 20 52 65 74 75 72  |.sprH.6.@. Retur|
000104b0  6e 73 20 69 6d 61 67 65  20 73 70 72 69 74 65 27  |ns image sprite'|
000104c0  73 20 68 65 69 67 68 74  20 69 6e 20 4f 53 20 70  |s height in OS p|
000104d0  69 78 65 6c 73 20 69 6e  20 63 75 72 72 65 6e 74  |ixels in current|
000104e0  20 6d 6f 64 65 0d 36 92  1b 3d 53 70 72 48 25 2a  | mode.6..=SprH%*|
000104f0  32 5e a4 6d 6f 64 65 5f  76 61 72 28 eb 2c 35 29  |2^.mode_var(.,5)|
00010500  0d 36 9c 05 20 0d 36 a6  12 dd a4 6d 61 78 28 76  |.6.. .6....max(v|
00010510  31 25 2c 76 32 25 29 0d  36 b0 24 f4 20 52 65 74  |1%,v2%).6.$. Ret|
00010520  75 72 6e 73 20 6d 61 78  69 6d 75 6d 20 6f 66 20  |urns maximum of |
00010530  76 31 25 20 61 6e 64 20  76 32 25 0d 36 ba 1a e7  |v1% and v2%.6...|
00010540  76 31 25 3e 76 32 25 20  8c 20 3d 76 31 25 20 8b  |v1%>v2% . =v1% .|
00010550  20 3d 76 32 25 0d 36 c4  05 20 0d 36 ce 09 dd f2  | =v2%.6.. .6....|
00010560  64 69 65 0d 36 d8 19 f4  20 54 69 64 69 65 73 20  |die.6... Tidies |
00010570  75 70 20 61 6e 64 20 65  78 69 74 73 0d 36 e2 15  |up and exits.6..|
00010580  f2 66 69 6e 69 73 68 3a  f4 20 54 69 64 79 20 75  |.finish:. Tidy u|
00010590  70 0d 36 ec 10 c8 99 20  22 4f 53 5f 45 78 69 74  |p.6.... "OS_Exit|
000105a0  22 0d 36 f6 05 e1 0d 37  00 05 20 0d 37 0a 0c dd  |".6....7.. .7...|
000105b0  f2 66 69 6e 69 73 68 0d  37 14 0f f4 20 54 69 64  |.finish.7... Tid|
000105c0  69 65 73 20 75 70 0d 37  1e 31 f4 20 53 65 6e 64  |ies up.7.1. Send|
000105d0  20 6d 65 73 73 61 67 65  20 74 6f 20 61 73 6b 20  | message to ask |
000105e0  69 66 20 6d 6f 64 75 6c  65 20 63 61 6e 20 62 65  |if module can be|
000105f0  20 6b 69 6c 6c 65 64 0d  37 28 c4 21 62 6c 6f 63  | killed.7(.!bloc|
00010600  6b 3d 32 30 3a 62 6c 6f  63 6b 21 31 32 3d 30 3a  |k=20:block!12=0:|
00010610  62 6c 6f 63 6b 21 31 36  3d 26 43 43 45 30 30 3a  |block!16=&CCE00:|
00010620  c8 99 20 57 53 65 6e 64  4d 73 67 25 2c 31 38 2c  |.. WSendMsg%,18,|
00010630  62 6c 6f 63 6b 2c 30 3a  6b 69 6c 6c 3d a3 3a f5  |block,0:kill=.:.|
00010640  20 6c 69 73 74 65 6e 25  3d a4 70 6f 6c 6c 28 30  | listen%=.poll(0|
00010650  29 3a 6b 69 6c 6c 3d 6b  69 6c 6c 20 84 20 28 28  |):kill=kill . ((|
00010660  6c 69 73 74 65 6e 25 3d  31 39 29 80 28 70 6f 6c  |listen%=19).(pol|
00010670  6c 21 31 36 3d 26 43 43  45 30 30 29 80 28 70 6f  |l!16=&CCE00).(po|
00010680  6c 6c 21 31 32 3d 30 29  29 3a fd 20 6c 69 73 74  |ll!12=0)):. list|
00010690  65 6e 25 3d 30 3a e7 6b  69 6c 6c 20 8c 20 c8 99  |en%=0:.kill . ..|
000106a0  20 22 4f 53 5f 4d 6f 64  75 6c 65 22 2c 34 2c 22  | "OS_Module",4,"|
000106b0  54 72 61 6e 73 6c 61 74  6f 72 22 0d 37 32 26 c8  |Translator".72&.|
000106c0  99 20 57 53 65 74 50 25  2c 2c 77 69 6d 70 70 61  |. WSetP%,,wimppa|
000106d0  6c 3a f4 20 52 65 73 65  74 20 70 61 6c 65 74 74  |l:. Reset palett|
000106e0  65 0d 37 3c 2d c8 99 20  22 57 69 6d 70 5f 43 6c  |e.7<-.. "Wimp_Cl|
000106f0  6f 73 65 44 6f 77 6e 22  2c 54 61 73 6b 48 61 6e  |oseDown",TaskHan|
00010700  64 6c 65 25 2c 26 34 42  35 33 34 31 35 34 0d 37  |dle%,&4B534154.7|
00010710  46 05 e1 0d 37 50 05 20  0d 37 5a 23 dd a4 6d 6f  |F...7P. .7Z#..mo|
00010720  64 65 28 77 69 64 74 68  25 2c 68 65 69 67 68 74  |de(width%,height|
00010730  25 2c 63 6f 6c 6f 75 72  73 25 29 0d 37 64 4c f4  |%,colours%).7dL.|
00010740  20 52 65 74 75 72 6e 73  2c 20 69 66 20 70 6f 73  | Returns, if pos|
00010750  73 69 62 6c 65 2c 20 61  20 73 74 61 6e 64 61 72  |sible, a standar|
00010760  64 20 73 63 72 65 65 6e  20 6d 6f 64 65 20 74 68  |d screen mode th|
00010770  61 74 20 69 73 20 6d 6f  73 74 20 73 75 69 74 61  |at is most suita|
00010780  62 6c 65 20 66 6f 72 0d  37 6e 4b f4 20 64 69 73  |ble for.7nK. dis|
00010790  70 6c 61 79 69 6e 67 20  61 20 70 69 63 74 75 72  |playing a pictur|
000107a0  65 20 6f 66 20 28 77 69  64 74 68 25 29 78 28 68  |e of (width%)x(h|
000107b0  65 69 67 68 74 25 29 20  70 69 78 65 6c 73 20 69  |eight%) pixels i|
000107c0  6e 20 63 6f 6c 6f 75 72  73 25 20 63 6f 6c 6f 75  |n colours% colou|
000107d0  72 73 0d 37 78 36 f4 20  52 65 74 75 72 6e 73 20  |rs.7x6. Returns |
000107e0  2d 31 20 69 66 20 6e 75  6d 62 65 72 20 6f 66 20  |-1 if number of |
000107f0  63 6f 6c 6f 75 72 73 20  67 72 65 61 74 65 72 20  |colours greater |
00010800  74 68 61 6e 20 32 35 36  0d 37 82 29 ea 20 61 72  |than 256.7.). ar|
00010810  63 63 6f 6c 73 25 2c 61  72 63 77 69 64 74 68 25  |ccols%,arcwidth%|
00010820  2c 61 72 63 68 65 69 67  68 74 25 2c 6d 6f 64 65  |,archeight%,mode|
00010830  25 0d 37 8c 13 e7 4f 75  74 4d 6f 64 65 3d 32 20  |%.7...OutMode=2 |
00010840  8c 20 3d eb 0d 37 96 2f  f4 20 52 61 6e 67 65 20  |. =..7./. Range |
00010850  63 68 65 63 6b 20 66 6f  72 20 63 6f 6c 6f 75 72  |check for colour|
00010860  73 2c 20 77 69 64 74 68  20 61 6e 64 20 68 65 69  |s, width and hei|
00010870  67 68 74 0d 37 a0 26 e7  63 6f 6c 6f 75 72 73 25  |ght.7.&.colours%|
00010880  3e 32 35 36 20 8c 20 3d  2d 31 3a f4 20 49 6d 70  |>256 . =-1:. Imp|
00010890  6f 73 73 69 62 6c 65 20  21 0d 37 aa 2c f4 20 44  |ossible !.7.,. D|
000108a0  65 74 65 72 6d 69 6e 65  20 63 6c 6f 73 65 73 74  |etermine closest|
000108b0  20 63 6f 6c 6f 75 72 73  2f 77 69 64 74 68 2f 68  | colours/width/h|
000108c0  65 69 67 68 74 0d 37 b4  63 e7 63 6f 6c 6f 75 72  |eight.7.c.colour|
000108d0  73 25 3e 31 36 20 8c 20  61 72 63 63 6f 6c 73 25  |s%>16 . arccols%|
000108e0  3d 32 35 36 20 8b 20 e7  63 6f 6c 6f 75 72 73 25  |=256 . .colours%|
000108f0  3e 34 20 8c 20 61 72 63  63 6f 6c 73 25 3d 31 36  |>4 . arccols%=16|
00010900  20 8b 20 e7 63 6f 6c 6f  75 72 73 25 3e 32 20 8c  | . .colours%>2 .|
00010910  20 61 72 63 63 6f 6c 73  25 3d 34 20 8b 20 61 72  | arccols%=4 . ar|
00010920  63 63 6f 6c 73 25 3d 32  0d 37 be 4e e7 77 69 64  |ccols%=2.7.N.wid|
00010930  74 68 25 3e 36 34 30 20  8c 20 61 72 63 77 69 64  |th%>640 . arcwid|
00010940  74 68 25 3d 31 30 35 36  20 8b 20 e7 77 69 64 74  |th%=1056 . .widt|
00010950  68 25 3e 33 32 30 20 8c  20 61 72 63 77 69 64 74  |h%>320 . arcwidt|
00010960  68 25 3d 36 34 30 20 8b  20 61 72 63 77 69 64 74  |h%=640 . arcwidt|
00010970  68 25 3d 33 32 30 0d 37  c8 33 e7 68 65 69 67 68  |h%=320.7.3.heigh|
00010980  74 25 3c 3d 32 35 36 20  8c 20 61 72 63 68 65 69  |t%<=256 . archei|
00010990  67 68 74 25 3d 32 35 36  20 8b 20 61 72 63 68 65  |ght%=256 . arche|
000109a0  69 67 68 74 25 3d 35 31  32 0d 37 d2 11 c8 8e 20  |ight%=512.7.... |
000109b0  61 72 63 63 6f 6c 73 25  20 ca 0d 37 dc 2f 20 c9  |arccols% ..7./ .|
000109c0  20 32 20 3a 20 e7 61 72  63 68 65 69 67 68 74 25  | 2 : .archeight%|
000109d0  3d 35 31 32 20 8c 20 6d  6f 64 65 25 3d 31 38 20  |=512 . mode%=18 |
000109e0  8b 20 6d 6f 64 65 25 3d  30 0d 37 e6 4b 20 c9 20  |. mode%=0.7.K . |
000109f0  34 20 3a 20 e7 61 72 63  68 65 69 67 68 74 25 3d  |4 : .archeight%=|
00010a00  35 31 32 20 8c 20 6d 6f  64 65 25 3d 31 39 20 8b  |512 . mode%=19 .|
00010a10  20 e7 61 72 63 77 69 64  74 68 25 3c 3d 33 32 30  | .arcwidth%<=320|
00010a20  20 8c 20 6d 6f 64 65 25  3d 31 20 8b 20 6d 6f 64  | . mode%=1 . mod|
00010a30  65 25 3d 38 0d 37 f0 69  20 c9 20 31 36 20 3a 20  |e%=8.7.i . 16 : |
00010a40  e7 61 72 63 68 65 69 67  68 74 25 3d 35 31 32 20  |.archeight%=512 |
00010a50  8c 20 6d 6f 64 65 25 3d  32 30 20 8b 20 e7 61 72  |. mode%=20 . .ar|
00010a60  63 77 69 64 74 68 25 3c  3d 33 32 30 20 8c 20 6d  |cwidth%<=320 . m|
00010a70  6f 64 65 25 3d 39 20 8b  20 e7 61 72 63 77 69 64  |ode%=9 . .arcwid|
00010a80  74 68 25 3d 36 34 30 20  8c 20 6d 6f 64 65 25 3d  |th%=640 . mode%=|
00010a90  31 32 20 8b 20 6d 6f 64  65 25 3d 31 36 0d 37 fa  |12 . mode%=16.7.|
00010aa0  86 20 c9 20 32 35 36 20  3a 20 e7 61 72 63 68 65  |. . 256 : .arche|
00010ab0  69 67 68 74 25 3d 35 31  32 20 8c 20 6d 6f 64 65  |ight%=512 . mode|
00010ac0  25 3d 32 31 20 8b 20 e7  61 72 63 77 69 64 74 68  |%=21 . .arcwidth|
00010ad0  25 3d 31 36 30 20 8c 20  6d 6f 64 65 25 3d 31 30  |%=160 . mode%=10|
00010ae0  20 8b 20 e7 61 72 63 77  69 64 74 68 25 3d 33 32  | . .arcwidth%=32|
00010af0  30 20 8c 20 6d 6f 64 65  25 3d 31 33 20 8b 20 e7  |0 . mode%=13 . .|
00010b00  61 72 63 77 69 64 74 68  25 3d 36 34 30 20 8c 20  |arcwidth%=640 . |
00010b10  6d 6f 64 65 25 3d 31 35  20 8b 20 6d 6f 64 65 25  |mode%=15 . mode%|
00010b20  3d 32 34 0d 38 04 05 cb  0d 38 0e 0a 3d 6d 6f 64  |=24.8....8..=mod|
00010b30  65 25 0d 38 18 05 20 0d  38 22 13 dd a4 74 69 6d  |e%.8.. .8"...tim|
00010b40  65 73 28 76 61 6c 75 65  25 29 0d 38 2c 30 f4 20  |es(value%).8,0. |
00010b50  52 65 74 75 72 6e 73 20  53 54 52 24 76 61 6c 75  |Returns STR$valu|
00010b60  65 25 20 77 69 74 68 20  27 70 6c 75 72 61 6c 20  |e% with 'plural |
00010b70  65 78 74 65 6e 73 69 6f  6e 27 0d 38 36 09 ea 20  |extension'.86.. |
00010b80  5f 64 25 0d 38 40 33 5f  64 25 3d 76 61 6c 75 65  |_d%.8@3_d%=value|
00010b90  25 83 31 30 3a f4 20 4c  61 73 74 20 64 69 67 69  |%.10:. Last digi|
00010ba0  74 20 64 65 74 65 72 6d  69 6e 65 73 20 65 78 74  |t determines ext|
00010bb0  65 6e 73 69 6f 6e 0d 38  4a 3a e7 28 28 28 76 61  |ension.8J:.(((va|
00010bc0  6c 75 65 25 83 31 30 30  29 81 31 30 29 3d 31 29  |lue%.100).10)=1)|
00010bd0  84 28 5f 64 25 3e 33 29  84 28 5f 64 25 3d 30 29  |.(_d%>3).(_d%=0)|
00010be0  20 8c 20 3d c3 76 61 6c  75 65 25 2b 22 74 68 22  | . =.value%+"th"|
00010bf0  0d 38 54 0c c8 8e 20 5f  64 25 20 ca 0d 38 5e 18  |.8T... _d% ..8^.|
00010c00  20 c9 20 31 20 3a 20 3d  c3 76 61 6c 75 65 25 2b  | . 1 : =.value%+|
00010c10  22 73 74 22 0d 38 68 18  20 c9 20 32 20 3a 20 3d  |"st".8h. . 2 : =|
00010c20  c3 76 61 6c 75 65 25 2b  22 6e 64 22 0d 38 72 18  |.value%+"nd".8r.|
00010c30  20 c9 20 33 20 3a 20 3d  c3 76 61 6c 75 65 25 2b  | . 3 : =.value%+|
00010c40  22 72 64 22 0d 38 7c 05  cb 0d 38 86 05 20 0d 38  |"rd".8|...8.. .8|
00010c50  90 17 dd a4 69 73 74 72  69 6e 67 28 66 6e 25 2c  |....istring(fn%,|
00010c60  6c 65 6e 25 29 0d 38 9a  21 f4 20 52 65 74 75 72  |len%).8.!. Retur|
00010c70  6e 73 20 73 74 72 69 6e  67 20 6f 66 20 66 72 6f  |ns string of fro|
00010c80  6d 20 66 69 6c 65 0d 38  a4 30 f4 20 49 66 20 6c  |m file.8.0. If l|
00010c90  65 6e 25 3e 30 20 74 68  65 20 6e 75 6d 62 65 72  |en%>0 the number|
00010ca0  20 6f 66 20 63 68 61 72  61 63 74 65 72 73 20 69  | of characters i|
00010cb0  73 20 6c 65 6e 25 0d 38  ae 38 f4 20 49 66 20 6c  |s len%.8.8. If l|
00010cc0  65 6e 25 3d 2d 31 20 74  68 65 20 73 74 72 69 6e  |en%=-1 the strin|
00010cd0  67 20 69 73 20 43 54 52  4c 2d 63 68 61 72 61 63  |g is CTRL-charac|
00010ce0  74 65 72 20 74 65 72 6d  69 6e 61 74 65 64 0d 38  |ter terminated.8|
00010cf0  b8 0e ea 20 5f 25 2c 72  24 2c 63 25 0d 38 c2 6c  |... _%,r$,c%.8.l|
00010d00  5f 24 3d 22 22 3a e7 6c  65 6e 25 3e 30 20 8c 20  |_$="":.len%>0 . |
00010d10  e3 20 5f 25 3d 31 20 b8  20 6c 65 6e 25 3a 72 24  |. _%=1 . len%:r$|
00010d20  2b 3d bd a4 69 31 28 66  6e 25 29 3a ed 20 8b 20  |+=..i1(fn%):. . |
00010d30  e7 6c 65 6e 25 3d 2d 31  20 8c 20 63 25 3d a4 69  |.len%=-1 . c%=.i|
00010d40  31 28 66 6e 25 29 3a c8  95 20 63 25 3e 3d 97 22  |1(fn%):.. c%>=."|
00010d50  20 22 3a 72 24 2b 3d bd  63 25 3a 63 25 3d a4 69  | ":r$+=.c%:c%=.i|
00010d60  31 28 66 6e 25 29 3a ce  0d 38 cc 07 3d 72 24 0d  |1(fn%):..8..=r$.|
00010d70  38 d6 05 20 0d 38 e0 18  dd f2 69 73 6b 69 70 28  |8.. .8....iskip(|
00010d80  66 6e 25 2c 61 6d 6f 75  6e 74 25 29 0d 38 ea 21  |fn%,amount%).8.!|
00010d90  f4 20 53 6b 69 70 73 20  61 6d 6f 75 6e 74 25 20  |. Skips amount% |
00010da0  62 79 74 65 73 20 69 6e  20 66 69 6c 65 0d 38 f4  |bytes in file.8.|
00010db0  23 cf 23 46 69 6c 65 28  66 6e 25 29 3d 61 6d 6f  |#.#File(fn%)=amo|
00010dc0  75 6e 74 25 2b 8f 23 46  69 6c 65 28 66 6e 25 29  |unt%+.#File(fn%)|
00010dd0  0d 38 fe 05 e1 0d 39 08  05 20 0d 39 12 17 dd f2  |.8....9.. .9....|
00010de0  69 70 74 72 28 66 6e 25  2c 6e 65 77 70 74 72 25  |iptr(fn%,newptr%|
00010df0  29 0d 39 1c 1d f4 20 53  65 74 73 20 6e 65 77 20  |).9... Sets new |
00010e00  6f 66 66 73 65 74 20 69  6e 20 66 69 6c 65 0d 39  |offset in file.9|
00010e10  26 17 cf 23 46 69 6c 65  28 66 6e 25 29 3d 6e 65  |&..#File(fn%)=ne|
00010e20  77 70 74 72 25 0d 39 30  05 e1 0d 39 3a 05 20 0d  |wptr%.90...9:. .|
00010e30  39 44 0f dd a4 69 70 74  72 28 66 6e 25 29 0d 39  |9D...iptr(fn%).9|
00010e40  4e 24 f4 20 52 65 74 75  72 6e 73 20 63 75 72 72  |N$. Returns curr|
00010e50  65 6e 74 20 6f 66 66 73  65 74 20 69 6e 20 66 69  |ent offset in fi|
00010e60  6c 65 0d 39 58 10 3d 8f  23 46 69 6c 65 28 66 6e  |le.9X.=.#File(fn|
00010e70  25 29 0d 39 62 05 20 0d  39 6c 0f dd a4 69 6c 65  |%).9b. .9l...ile|
00010e80  6e 28 66 6e 25 29 0d 39  76 1c f4 20 52 65 74 75  |n(fn%).9v.. Retu|
00010e90  72 6e 73 20 6c 65 6e 67  74 68 20 6f 66 20 66 69  |rns length of fi|
00010ea0  6c 65 0d 39 80 10 3d a2  23 46 69 6c 65 28 66 6e  |le.9..=.#File(fn|
00010eb0  25 29 0d 39 8a 05 20 0d  39 94 0f dd a4 69 65 6f  |%).9.. .9....ieo|
00010ec0  66 28 66 6e 25 29 0d 39  9e 28 f4 20 52 65 74 75  |f(fn%).9.(. Retu|
00010ed0  72 6e 73 20 65 6e 64 2d  6f 66 2d 66 69 6c 65 20  |rns end-of-file |
00010ee0  73 74 61 74 75 73 20 6f  66 20 66 69 6c 65 0d 39  |status of file.9|
00010ef0  a8 10 3d c5 23 46 69 6c  65 28 66 6e 25 29 0d 39  |..=.#File(fn%).9|
00010f00  b2 05 20 0d 39 bc 0c dd  f2 69 63 6c 6f 73 65 0d  |.. .9....iclose.|
00010f10  39 c6 1c f4 20 43 6c 6f  73 65 73 20 61 6c 6c 20  |9... Closes all |
00010f20  69 6e 70 75 74 20 66 69  6c 65 73 0d 39 d0 08 ea  |input files.9...|
00010f30  20 66 25 0d 39 da 33 e3  20 66 25 3d 31 20 b8 20  | f%.9.3. f%=1 . |
00010f40  31 30 3a e7 46 69 6c 65  28 66 25 29 3e 30 20 8c  |10:.File(f%)>0 .|
00010f50  20 d9 23 46 69 6c 65 28  66 25 29 3a 46 69 6c 65  | .#File(f%):File|
00010f60  28 66 25 29 3d 30 0d 39  e4 05 ed 0d 39 ee 05 e1  |(f%)=0.9....9...|
00010f70  0d 39 f8 05 20 0d 3a 02  1c dd f2 69 67 65 74 28  |.9.. .:....iget(|
00010f80  66 6e 25 2c 61 64 72 25  2c 61 6d 6f 75 6e 74 25  |fn%,adr%,amount%|
00010f90  29 0d 3a 0c 2d f4 20 52  65 74 75 72 6e 73 20 61  |).:.-. Returns a|
00010fa0  6d 6f 75 6e 74 25 20 62  79 74 65 73 20 61 74 20  |mount% bytes at |
00010fb0  61 64 72 25 20 66 72 6f  6d 20 66 69 6c 65 0d 3a  |adr% from file.:|
00010fc0  16 29 c8 99 20 22 4f 53  5f 47 42 50 42 22 2c 34  |.).. "OS_GBPB",4|
00010fd0  2c 46 69 6c 65 28 66 6e  25 29 2c 61 64 72 25 2c  |,File(fn%),adr%,|
00010fe0  61 6d 6f 75 6e 74 25 0d  3a 20 05 e1 0d 3a 2a 05  |amount%.: ...:*.|
00010ff0  20 0d 3a 34 18 dd a4 69  31 28 66 6e 25 29 3a 3d  | .:4...i1(fn%):=|
00011000  a4 69 28 66 6e 25 2c 31  29 0d 3a 3e 18 dd a4 69  |.i(fn%,1).:>...i|
00011010  32 28 66 6e 25 29 3a 3d  a4 69 28 66 6e 25 2c 32  |2(fn%):=.i(fn%,2|
00011020  29 0d 3a 48 18 dd a4 69  33 28 66 6e 25 29 3a 3d  |).:H...i3(fn%):=|
00011030  a4 69 28 66 6e 25 2c 33  29 0d 3a 52 18 dd a4 69  |.i(fn%,3).:R...i|
00011040  34 28 66 6e 25 29 3a 3d  a4 69 28 66 6e 25 2c 34  |4(fn%):=.i(fn%,4|
00011050  29 0d 3a 5c 05 20 0d 3a  66 11 dd a4 69 28 66 6e  |).:\. .:f...i(fn|
00011060  25 2c 6c 65 6e 25 29 0d  3a 70 27 f4 20 52 65 74  |%,len%).:p'. Ret|
00011070  75 72 6e 73 20 6c 65 6e  25 2d 62 79 74 65 20 76  |urns len%-byte v|
00011080  61 6c 75 65 20 66 72 6f  6d 20 66 69 6c 65 0d 3a  |alue from file.:|
00011090  7a 0c ea 20 5f 25 2c 5f  72 25 0d 3a 84 17 5f 72  |z.. _%,_r%.:.._r|
000110a0  25 3d 30 3a e3 20 5f 25  3d 31 20 b8 20 6c 65 6e  |%=0:. _%=1 . len|
000110b0  25 0d 3a 8e 0f c8 8e 20  69 54 79 70 65 25 20 ca  |%.:.... iType% .|
000110c0  0d 3a 98 23 20 c9 20 31  20 3a 20 5f 72 25 3d 28  |.:.# . 1 : _r%=(|
000110d0  5f 72 25 3c 3c 38 29 2b  9a 23 46 69 6c 65 28 66  |_r%<<8)+.#File(f|
000110e0  6e 25 29 0d 3a a2 28 20  7f 20 20 3a 20 5f 72 25  |n%).:.( .  : _r%|
000110f0  2b 3d 28 28 9a 23 46 69  6c 65 28 66 6e 25 29 29  |+=((.#File(fn%))|
00011100  3c 3c 28 5f 25 2d 31 29  2a 38 29 0d 3a ac 07 cb  |<<(_%-1)*8).:...|
00011110  3a ed 0d 3a b6 08 3d 5f  72 25 0d 3a c0 05 20 0d  |:..:..=_r%.:.. .|
00011120  3a ca 18 dd f2 6f 28 66  68 25 2c 76 61 6c 25 2c  |:....o(fh%,val%,|
00011130  62 79 74 65 73 25 29 0d  3a d4 2b f4 20 4f 75 74  |bytes%).:.+. Out|
00011140  70 75 74 73 20 76 61 6c  75 65 20 6f 66 20 62 79  |puts value of by|
00011150  74 65 73 25 20 62 79 74  65 73 20 74 6f 20 66 69  |tes% bytes to fi|
00011160  6c 65 0d 3a de 08 ea 20  69 25 0d 3a e8 2d e3 20  |le.:... i%.:.-. |
00011170  69 25 3d 31 20 b8 20 62  79 74 65 73 25 3a d5 23  |i%=1 . bytes%:.#|
00011180  66 68 25 2c 76 61 6c 25  3a 76 61 6c 25 3d 76 61  |fh%,val%:val%=va|
00011190  6c 25 3e 3e 38 3a ed 0d  3a f2 05 e1 0d 3a fc 05  |l%>>8:..:....:..|
000111a0  20 0d 3b 06 15 dd f2 6f  73 74 72 69 6e 67 28 66  | .;....ostring(f|
000111b0  68 25 2c 76 24 29 0d 3b  10 1c f4 20 4f 75 74 70  |h%,v$).;... Outp|
000111c0  75 74 73 20 73 74 72 69  6e 67 20 74 6f 20 66 69  |uts string to fi|
000111d0  6c 65 0d 3b 1a 08 ea 20  69 25 0d 3b 24 23 e3 20  |le.;... i%.;$#. |
000111e0  69 25 3d 31 20 b8 20 a9  76 24 3a d5 23 66 68 25  |i%=1 . .v$:.#fh%|
000111f0  2c 97 c1 76 24 2c 69 25  2c 31 29 3a ed 0d 3b 2e  |,..v$,i%,1):..;.|
00011200  05 e1 0d 3b 38 04 0d 3b  42 11 dd f2 69 6e 69 74  |...;8..;B...init|
00011210  5f 6d 6f 64 75 6c 65 0d  3b 4c 18 f4 20 49 6e 69  |_module.;L.. Ini|
00011220  74 69 61 6c 69 73 65 73  20 6d 6f 64 75 6c 65 0d  |tialises module.|
00011230  3b 56 2e c8 99 20 22 54  72 61 6e 73 6c 61 74 6f  |;V... "Translato|
00011240  72 5f 4d 61 6b 65 4d 61  70 73 22 3a f4 20 49 6e  |r_MakeMaps":. In|
00011250  69 74 69 61 6c 69 73 65  20 6d 61 70 73 0d 3b 60  |itialise maps.;`|
00011260  05 e1 0d 3b 6a 05 20 0d  3b 74 1a dd f2 76 61 72  |...;j. .;t...var|
00011270  28 76 61 72 6e 61 6d 65  24 2c 76 61 6c 75 65 25  |(varname$,value%|
00011280  29 0d 3b 7e 1c f4 20 57  72 69 74 65 73 20 6d 6f  |).;~.. Writes mo|
00011290  64 75 6c 65 20 76 61 72  69 61 62 6c 65 0d 3b 88  |dule variable.;.|
000112a0  3b 24 64 75 6d 25 3d 76  61 72 6e 61 6d 65 24 3a  |;$dum%=varname$:|
000112b0  c8 99 20 22 54 72 61 6e  73 6c 61 74 6f 72 5f 53  |.. "Translator_S|
000112c0  65 74 56 61 72 69 61 62  6c 65 22 2c 21 64 75 6d  |etVariable",!dum|
000112d0  25 2c 76 61 6c 75 65 25  0d 3b 92 05 e1 0d 3b 9c  |%,value%.;....;.|
000112e0  05 20 0d 3b a6 13 dd a4  76 61 72 28 76 61 72 6e  |. .;....var(varn|
000112f0  61 6d 65 24 29 0d 3b b0  1b f4 20 52 65 61 64 73  |ame$).;... Reads|
00011300  20 6d 6f 64 75 6c 65 20  76 61 72 69 61 62 6c 65  | module variable|
00011310  0d 3b ba 0c ea 20 76 61  6c 75 65 25 0d 3b c4 3e  |.;... value%.;.>|
00011320  24 64 75 6d 25 3d 76 61  72 6e 61 6d 65 24 3a c8  |$dum%=varname$:.|
00011330  99 20 22 54 72 61 6e 73  6c 61 74 6f 72 5f 52 65  |. "Translator_Re|
00011340  61 64 56 61 72 69 61 62  6c 65 22 2c 21 64 75 6d  |adVariable",!dum|
00011350  25 20 b8 20 76 61 6c 75  65 25 0d 3b ce 0b 3d 76  |% . value%.;..=v|
00011360  61 6c 75 65 25 0d 3b d8  05 20 0d 3b e2 12 dd a4  |alue%.;.. .;....|
00011370  4f 53 76 61 72 28 6e 61  6d 65 24 29 0d 3b ec 2e  |OSvar(name$).;..|
00011380  f4 20 41 74 74 65 6d 70  74 73 20 74 6f 20 72 65  |. Attempts to re|
00011390  74 75 72 6e 20 4f 53 2d  76 61 72 27 73 20 73 74  |turn OS-var's st|
000113a0  72 69 6e 67 20 76 61 6c  75 65 0d 3b f6 0d ea 20  |ring value.;... |
000113b0  5f 72 24 2c 5f 6c 25 0d  3c 00 43 5f 72 24 3d c4  |_r$,_l%.<.C_r$=.|
000113c0  31 30 30 2c 22 20 22 29  3a c8 99 20 22 58 4f 53  |100," "):.. "XOS|
000113d0  5f 52 65 61 64 56 61 72  56 61 6c 22 2c 6e 61 6d  |_ReadVarVal",nam|
000113e0  65 24 2c 5f 72 24 2c a9  5f 72 24 2c 30 2c 33 20  |e$,_r$,._r$,0,3 |
000113f0  b8 20 2c 5f 72                                    |. ,_r|
000113f5