R1  RN 1
R2  RN 2
R3  RN 3
R4  RN 4
R5  RN 5
R6  RN 6
R7  RN 7
R8  RN 8
R9  RN 9
R10 RN 10
R11 RN 11
R12 RN 12
R13 RN 13
R14 RN 14
PC  RN 15

OS_Module           * &1E
OS_ConvertHex8      * &D4
OS_Write0           * &02
OS_WriteI           * &100
Wimp_GetPointerInfo * &400CF
Wimp_GetIconState   * &400CE
Wimp_SetIconState   * &400CD


overflow    * &10000000
chunkbase   * &83140

;workspace offsets


 AREA code,CODE

 ENTRY

title       * titlestr-start
help        * helpstr-start
init        * initial-start
fin         * final-start
swih        * swihandler-start
swit        * switable-start
flag32      * flagword-start

start
 DCD 0,init,fin,0
 DCD title,help,0,chunkbase
 DCD swih,swit,0,0
 DCD flag32

titlestr
 = "Blinds",0
 ALIGN

helpstr
 = "Blinds",9,"0.03 (1 August 2003)",0
 ALIGN

flagword
 DCD 1

initial
 STMDB   R13!,{R0-R11,R14}
 MOV     R0,#6
 MOV     R3,#&0400
 SWI     OS_Module
 STR     R2,[R12,#0]
 LDMIA   R13!,{R0-R11,PC}

final
 STMDB   R13!,{R0-R11,R14}
 LDR     R2,[R12,#0]
 MOV     R0,#7
 SWI     OS_Module
 LDMIA   R13!,{R0-R11,PC}

swihandler
 STMDB   R13!,{R14}
 LDR     R12,[R12,#0]
 CMP     R11,#0
 BLEQ    swi0
 CMP     R11,#1
 BLEQ    swi1
 CMP     R11,#3
 BLEQ    swi3
 CMP     R11,#4
 BLEQ    swi4
 LDMIA   R13!,{PC}

swi0
 STMDB   R13!,{R0,R1,R3-R11,R14}
 STR     R0,[R12,#0]
 STR     R1,[R12,#4]
 MOV     R1,R12
 SWI     Wimp_GetIconState
 LDR     R3,[R12,#32]
 MOV     R1,#&3B

10
 LDRB    R0,[R3,#0]
 CMP     R0,#&20
 BLT     %FT11
 ADD     R3,R3,#1
 CMP     R0,#&73
 CMPEQ   R1,#&3B
 MOVNE   R1,R0
 BNE     %BT10

11
 MOV     R5,#0
 ADD     R4,R12,#&40

12
 LDRB    R6,[R3,R5]
 STRB    R6,[R4,R5]
 CMP     R6,#&20
 BLT     %FT13
 CMP     R6,#&3B
 BEQ     %FT13
 ADD     R5,R5,#1
 B       %BT12

13
 MOV     R6,#0
 STRB    R6,[R4,R5]
 MOV     R2,R4
 LDMIA   R13!,{R0,R1,R3-R11,PC}

swi1
 STMDB   R13!,{R14}
 LDMIA   R13!,{PC}

swi3
 STMDB   R13!,{R0-R11,R14}
 MOV     R3,#0
 MOV     R4,R0,LSL #4

20
 MOV     R5,#0
 ADD     R6,R3,R2
 MOV     R9,#0

21
 LDRB    R7,[R1,R5]
 LDRB    R8,[R6,R5]
 CMP     R7,#&41
 BLT     %FT22
 CMP     R7,#&5A
 ORRLE   R7,R7,#&20

22
 CMP     R7,R8
 MOVNE   R9,#1
 ADD     R5,R5,#1
 CMP     R7,#0
 BNE     %BT21
 MOV     R10,#1
 CMP     R9,#0
 STREQB  R10,[R6,#15]
 ADD     R3,R3,#&10
 CMP     R3,R4
 BNE     %BT20
 LDMIA   R13!,{R0-R11,PC}

swi4
 STMDB   R13!,{R1-R11,R14}
 LDR     R1,[R12,#0]
 SWI     Wimp_GetPointerInfo
 LDR     R5,[R1,#16]
 ADD     R1,R1,#&0C         
 SWI     Wimp_GetIconState
 LDR     R2,[R1,#24]
 TST     R2,#&00100000
 BNE     %FT31
 MOV     R2,#0
 MOV     R3,#&00100000
 MOV     R4,#0

30
 STR     R2,[R1,#4]
 STR     R3,[R1,#12]
 STR     R4,[R1,#8]
 CMP     R2,R5
 STREQ   R3,[R1,#8]
 SWI     Wimp_SetIconState
 ADD     R2,R2,#1
 CMP     R2,R0
 BLE     %BT30

31
 LDMIA   R13!,{R1-R11,PC}

switable
 = "QS",0
 
 = "GetSpriteNameFromIcon",0
 
 = "GetTextFromIcon",0
 
 = "None",0
 
 = "CheckSprites",0
 
 = "SelectOnlyThis",0,0
 
 ALIGN

unknown
 STMDB   R13!,{R0-R11,R14}
 ADR     R1,unk1
 MOV     R2,#&0C            
 SWI     OS_ConvertHex8
 SWI     OS_Write0
 SWI     OS_WriteI+10
 SWI     OS_WriteI+13
 LDMIA   R13!,{R0-R11,PC}

unk1
 DCD 0,0,0

 END
