Home » Archimedes archive » Archimedes World » AW-1991-03.adf » !AWMar91/Goodies/Eureka!/SpriteJoin

!AWMar91/Goodies/Eureka!/SpriteJoin

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 » Archimedes World » AW-1991-03.adf
Filename: !AWMar91/Goodies/Eureka!/SpriteJoin
Read OK:
File size: 0905 bytes
Load address: FFFFFB42
Exec address: D55208F3
File contents
   10REM > SpriteJoin
   20REM small program to append 2 sprites together using OS_SpriteOp 35
   30REM (C) John Bell 11/12/90
   40REM for Archimedes World - Eureka! column
   50
   60ON ERROR PROCerror:END
   70CLS
   80dir$=":0.$"
   90OSCLI"CAT "+dir$
  100PROCloadsprites
  110PROCgetsprites
  120PROCsavesprites
  130
  140END
  150
  160REM ********************************************************************
  170
  180DEFPROCloadsprites
  190LOCAL l%,sprite%
  200INPUT'"Input file ",file$
  210SYS "OS_File",13,file$,,,dir$+"." TO ,,,,splength :REM get length of file
  220splength+=4                                       :REM add a bit
  230DIM Sprites splength                              :REM set sprite area size
  240!Sprites = splength                               :REM set length of area
  250SYS "OS_SpriteOp",10+256,Sprites,dir$+"."+file$   :REM load the sprite file
  260SYS "OS_SpriteOp",8+256,Sprites TO ,,,nosprites%  :REM number of sprites
  270IF nosprites%=1 THEN ERROR 0,"Not enough sprites" :REM error if <2 sprites
  280DIM names$(nosprites%)                            :REM dimension name array
  290CLS
  300FOR sprite%= 1 TO nosprites%                      :REM FOR/NEXT loop to
  310names$(sprite%)=FNgetname(sprite%)                :REM read in the names
  320PRINT STR$sprite%+" "+names$(sprite%)             :REM of the sprites
  330NEXT sprite%
  340ENDPROC
  350
  360DEFFNgetname(sprite%)
  370LOCAL name$,length%,loop%,buffer
  380DIM buffer 100
  390name$=""
  400SYS "OS_SpriteOp",13+256,Sprites,buffer,100,sprite% TO ,,,length%
  410FOR loop%= 1 TO length%
  420name$=name$+CHR$(buffer?(loop%-1))
  430NEXT loop%
  440=name$
  450
  460REM ********************************************************************
  470
  480DEFPROCgetsprites
  490LOCAL sp1%,sp2%,key%,append%
  500REPEAT:INPUT'"1st sprite ",sp1%:UNTIL (sp1%>=1) AND (sp1%<=nosprites%)
  510REPEAT:INPUT"2nd sprite ",sp2%:UNTIL (sp2%>=1) AND (sp2%<=nosprites%) AND (sp2%<>sp1%)
  520CLS
  530PRINT"1. Horizontal append"
  540PRINT"2. Vertical append"
  550REPEAT:append%=GET-&31:UNTIL (append%=0) OR (append%=1)
  560SYS "OS_SpriteOp",35+256,Sprites,names$(sp1%),names$(sp2%),append%
  570ENDPROC
  580
  590REM ********************************************************************
  600
  610DEFPROCsavesprites
  620LOCAL file2$
  630CLS
  640INPUT"Output file ",file2$                       :REM get new filename
  650IF file2$="" THEN file2$=file$
  660SYS "OS_SpriteOp",12+256,Sprites,dir$+"."+file2$ :REM save appended sprites
  670ENDPROC
  680
  690REM ********************************************************************
  700
  710DEFPROCerror
  720CLS
  730REPORT:PRINT" at line ";ERL
  740ENDPROC

� > SpriteJoin
E� small program to append 2 sprites together using OS_SpriteOp 35
� (C) John Bell 11/12/90
(+� for Archimedes World - Eureka! column
2
<� � �error:�
F�
Pdir$=":0.$"
Z�"CAT "+dir$
d�loadsprites
n�getsprites
x�savesprites
�
��
�
�J� ********************************************************************
�
���loadsprites
�� l%,sprite%
��'"Input file ",file$
�Iș "OS_File",13,file$,,,dir$+"." � ,,,,splength :� get length of file
�Bsplength+=4                                       :� add a bit
�K� Sprites splength                              :� set sprite area size
�K!Sprites = splength                               :� set length of area
�Lș "OS_SpriteOp",10+256,Sprites,dir$+"."+file$   :� load the sprite file
Hș "OS_SpriteOp",8+256,Sprites � ,,,nosprites%  :� number of sprites
D� nosprites%=1 � � 0,"Not enough sprites" :� error if <2 sprites
K� names$(nosprites%)                            :� dimension name array
"�
,F� sprite%= 1 � nosprites%                      :� FOR/NEXT loop to
6Inames$(sprite%)=�getname(sprite%)                :� read in the names
@@� �sprite%+" "+names$(sprite%)             :� of the sprites
J
� sprite%
T�
^
hݤgetname(sprite%)
r � name$,length%,loop%,buffer
|� buffer 100
�name$=""
�Cș "OS_SpriteOp",13+256,Sprites,buffer,100,sprite% � ,,,length%
�� loop%= 1 � length%
�#name$=name$+�(buffer?(loop%-1))
�� loop%
�
=name$
�
�J� ********************************************************************
�
���getsprites
�� sp1%,sp2%,key%,append%
�;�:�'"1st sprite ",sp1%:� (sp1%>=1) � (sp1%<=nosprites%)
�I�:�"2nd sprite ",sp2%:� (sp2%>=1) � (sp2%<=nosprites%) � (sp2%<>sp1%)
�
�"1. Horizontal append"
�"2. Vertical append"
&/�:append%=�-&31:� (append%=0) � (append%=1)
0Eș "OS_SpriteOp",35+256,Sprites,names$(sp1%),names$(sp2%),append%
:�
D
NJ� ********************************************************************
X
b��savesprites
l� file2$
v�
�D�"Output file ",file2$                       :� get new filename
�� file2$="" � file2$=file$
�Lș "OS_SpriteOp",12+256,Sprites,dir$+"."+file2$ :� save appended sprites
��
�
�J� ********************************************************************
�
���error
��
��:�" at line ";�
��
�
00000000  0d 00 0a 12 f4 20 3e 20  53 70 72 69 74 65 4a 6f  |..... > SpriteJo|
00000010  69 6e 0d 00 14 45 f4 20  73 6d 61 6c 6c 20 70 72  |in...E. small pr|
00000020  6f 67 72 61 6d 20 74 6f  20 61 70 70 65 6e 64 20  |ogram to append |
00000030  32 20 73 70 72 69 74 65  73 20 74 6f 67 65 74 68  |2 sprites togeth|
00000040  65 72 20 75 73 69 6e 67  20 4f 53 5f 53 70 72 69  |er using OS_Spri|
00000050  74 65 4f 70 20 33 35 0d  00 1e 1c f4 20 28 43 29  |teOp 35..... (C)|
00000060  20 4a 6f 68 6e 20 42 65  6c 6c 20 31 31 2f 31 32  | John Bell 11/12|
00000070  2f 39 30 0d 00 28 2b f4  20 66 6f 72 20 41 72 63  |/90..(+. for Arc|
00000080  68 69 6d 65 64 65 73 20  57 6f 72 6c 64 20 2d 20  |himedes World - |
00000090  45 75 72 65 6b 61 21 20  63 6f 6c 75 6d 6e 0d 00  |Eureka! column..|
000000a0  32 04 0d 00 3c 10 ee 20  85 20 f2 65 72 72 6f 72  |2...<.. . .error|
000000b0  3a e0 0d 00 46 05 db 0d  00 50 0f 64 69 72 24 3d  |:...F....P.dir$=|
000000c0  22 3a 30 2e 24 22 0d 00  5a 10 ff 22 43 41 54 20  |":0.$"..Z.."CAT |
000000d0  22 2b 64 69 72 24 0d 00  64 10 f2 6c 6f 61 64 73  |"+dir$..d..loads|
000000e0  70 72 69 74 65 73 0d 00  6e 0f f2 67 65 74 73 70  |prites..n..getsp|
000000f0  72 69 74 65 73 0d 00 78  10 f2 73 61 76 65 73 70  |rites..x..savesp|
00000100  72 69 74 65 73 0d 00 82  04 0d 00 8c 05 e0 0d 00  |rites...........|
00000110  96 04 0d 00 a0 4a f4 20  2a 2a 2a 2a 2a 2a 2a 2a  |.....J. ********|
00000120  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000150  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 0d 00 aa 04  |************....|
00000160  0d 00 b4 11 dd f2 6c 6f  61 64 73 70 72 69 74 65  |......loadsprite|
00000170  73 0d 00 be 10 ea 20 6c  25 2c 73 70 72 69 74 65  |s..... l%,sprite|
00000180  25 0d 00 c8 19 e8 27 22  49 6e 70 75 74 20 66 69  |%.....'"Input fi|
00000190  6c 65 20 22 2c 66 69 6c  65 24 0d 00 d2 49 c8 99  |le ",file$...I..|
000001a0  20 22 4f 53 5f 46 69 6c  65 22 2c 31 33 2c 66 69  | "OS_File",13,fi|
000001b0  6c 65 24 2c 2c 2c 64 69  72 24 2b 22 2e 22 20 b8  |le$,,,dir$+"." .|
000001c0  20 2c 2c 2c 2c 73 70 6c  65 6e 67 74 68 20 3a f4  | ,,,,splength :.|
000001d0  20 67 65 74 20 6c 65 6e  67 74 68 20 6f 66 20 66  | get length of f|
000001e0  69 6c 65 0d 00 dc 42 73  70 6c 65 6e 67 74 68 2b  |ile...Bsplength+|
000001f0  3d 34 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |=4              |
00000200  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000210  20 20 20 20 20 20 20 20  20 3a f4 20 61 64 64 20  |         :. add |
00000220  61 20 62 69 74 0d 00 e6  4b de 20 53 70 72 69 74  |a bit...K. Sprit|
00000230  65 73 20 73 70 6c 65 6e  67 74 68 20 20 20 20 20  |es splength     |
00000240  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000250  20 20 20 20 20 20 20 20  20 3a f4 20 73 65 74 20  |         :. set |
00000260  73 70 72 69 74 65 20 61  72 65 61 20 73 69 7a 65  |sprite area size|
00000270  0d 00 f0 4b 21 53 70 72  69 74 65 73 20 3d 20 73  |...K!Sprites = s|
00000280  70 6c 65 6e 67 74 68 20  20 20 20 20 20 20 20 20  |plength         |
00000290  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000002a0  20 20 20 20 20 20 3a f4  20 73 65 74 20 6c 65 6e  |      :. set len|
000002b0  67 74 68 20 6f 66 20 61  72 65 61 0d 00 fa 4c c8  |gth of area...L.|
000002c0  99 20 22 4f 53 5f 53 70  72 69 74 65 4f 70 22 2c  |. "OS_SpriteOp",|
000002d0  31 30 2b 32 35 36 2c 53  70 72 69 74 65 73 2c 64  |10+256,Sprites,d|
000002e0  69 72 24 2b 22 2e 22 2b  66 69 6c 65 24 20 20 20  |ir$+"."+file$   |
000002f0  3a f4 20 6c 6f 61 64 20  74 68 65 20 73 70 72 69  |:. load the spri|
00000300  74 65 20 66 69 6c 65 0d  01 04 48 c8 99 20 22 4f  |te file...H.. "O|
00000310  53 5f 53 70 72 69 74 65  4f 70 22 2c 38 2b 32 35  |S_SpriteOp",8+25|
00000320  36 2c 53 70 72 69 74 65  73 20 b8 20 2c 2c 2c 6e  |6,Sprites . ,,,n|
00000330  6f 73 70 72 69 74 65 73  25 20 20 3a f4 20 6e 75  |osprites%  :. nu|
00000340  6d 62 65 72 20 6f 66 20  73 70 72 69 74 65 73 0d  |mber of sprites.|
00000350  01 0e 44 e7 20 6e 6f 73  70 72 69 74 65 73 25 3d  |..D. nosprites%=|
00000360  31 20 8c 20 85 20 30 2c  22 4e 6f 74 20 65 6e 6f  |1 . . 0,"Not eno|
00000370  75 67 68 20 73 70 72 69  74 65 73 22 20 3a f4 20  |ugh sprites" :. |
00000380  65 72 72 6f 72 20 69 66  20 3c 32 20 73 70 72 69  |error if <2 spri|
00000390  74 65 73 0d 01 18 4b de  20 6e 61 6d 65 73 24 28  |tes...K. names$(|
000003a0  6e 6f 73 70 72 69 74 65  73 25 29 20 20 20 20 20  |nosprites%)     |
000003b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000003c0  20 20 20 20 20 20 20 3a  f4 20 64 69 6d 65 6e 73  |       :. dimens|
000003d0  69 6f 6e 20 6e 61 6d 65  20 61 72 72 61 79 0d 01  |ion name array..|
000003e0  22 05 db 0d 01 2c 46 e3  20 73 70 72 69 74 65 25  |"....,F. sprite%|
000003f0  3d 20 31 20 b8 20 6e 6f  73 70 72 69 74 65 73 25  |= 1 . nosprites%|
00000400  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000410  20 20 20 20 20 20 3a f4  20 46 4f 52 2f 4e 45 58  |      :. FOR/NEX|
00000420  54 20 6c 6f 6f 70 20 74  6f 0d 01 36 49 6e 61 6d  |T loop to..6Inam|
00000430  65 73 24 28 73 70 72 69  74 65 25 29 3d a4 67 65  |es$(sprite%)=.ge|
00000440  74 6e 61 6d 65 28 73 70  72 69 74 65 25 29 20 20  |tname(sprite%)  |
00000450  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3a f4  |              :.|
00000460  20 72 65 61 64 20 69 6e  20 74 68 65 20 6e 61 6d  | read in the nam|
00000470  65 73 0d 01 40 40 f1 20  c3 73 70 72 69 74 65 25  |es..@@. .sprite%|
00000480  2b 22 20 22 2b 6e 61 6d  65 73 24 28 73 70 72 69  |+" "+names$(spri|
00000490  74 65 25 29 20 20 20 20  20 20 20 20 20 20 20 20  |te%)            |
000004a0  20 3a f4 20 6f 66 20 74  68 65 20 73 70 72 69 74  | :. of the sprit|
000004b0  65 73 0d 01 4a 0d ed 20  73 70 72 69 74 65 25 0d  |es..J.. sprite%.|
000004c0  01 54 05 e1 0d 01 5e 04  0d 01 68 16 dd a4 67 65  |.T....^...h...ge|
000004d0  74 6e 61 6d 65 28 73 70  72 69 74 65 25 29 0d 01  |tname(sprite%)..|
000004e0  72 20 ea 20 6e 61 6d 65  24 2c 6c 65 6e 67 74 68  |r . name$,length|
000004f0  25 2c 6c 6f 6f 70 25 2c  62 75 66 66 65 72 0d 01  |%,loop%,buffer..|
00000500  7c 10 de 20 62 75 66 66  65 72 20 31 30 30 0d 01  ||.. buffer 100..|
00000510  86 0c 6e 61 6d 65 24 3d  22 22 0d 01 90 43 c8 99  |..name$=""...C..|
00000520  20 22 4f 53 5f 53 70 72  69 74 65 4f 70 22 2c 31  | "OS_SpriteOp",1|
00000530  33 2b 32 35 36 2c 53 70  72 69 74 65 73 2c 62 75  |3+256,Sprites,bu|
00000540  66 66 65 72 2c 31 30 30  2c 73 70 72 69 74 65 25  |ffer,100,sprite%|
00000550  20 b8 20 2c 2c 2c 6c 65  6e 67 74 68 25 0d 01 9a  | . ,,,length%...|
00000560  18 e3 20 6c 6f 6f 70 25  3d 20 31 20 b8 20 6c 65  |.. loop%= 1 . le|
00000570  6e 67 74 68 25 0d 01 a4  23 6e 61 6d 65 24 3d 6e  |ngth%...#name$=n|
00000580  61 6d 65 24 2b bd 28 62  75 66 66 65 72 3f 28 6c  |ame$+.(buffer?(l|
00000590  6f 6f 70 25 2d 31 29 29  0d 01 ae 0b ed 20 6c 6f  |oop%-1))..... lo|
000005a0  6f 70 25 0d 01 b8 0a 3d  6e 61 6d 65 24 0d 01 c2  |op%....=name$...|
000005b0  04 0d 01 cc 4a f4 20 2a  2a 2a 2a 2a 2a 2a 2a 2a  |....J. *********|
000005c0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000005f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 0d 01 d6 04 0d  |***********.....|
00000600  01 e0 10 dd f2 67 65 74  73 70 72 69 74 65 73 0d  |.....getsprites.|
00000610  01 ea 1c ea 20 73 70 31  25 2c 73 70 32 25 2c 6b  |.... sp1%,sp2%,k|
00000620  65 79 25 2c 61 70 70 65  6e 64 25 0d 01 f4 3b f5  |ey%,append%...;.|
00000630  3a e8 27 22 31 73 74 20  73 70 72 69 74 65 20 22  |:.'"1st sprite "|
00000640  2c 73 70 31 25 3a fd 20  28 73 70 31 25 3e 3d 31  |,sp1%:. (sp1%>=1|
00000650  29 20 80 20 28 73 70 31  25 3c 3d 6e 6f 73 70 72  |) . (sp1%<=nospr|
00000660  69 74 65 73 25 29 0d 01  fe 49 f5 3a e8 22 32 6e  |ites%)...I.:."2n|
00000670  64 20 73 70 72 69 74 65  20 22 2c 73 70 32 25 3a  |d sprite ",sp2%:|
00000680  fd 20 28 73 70 32 25 3e  3d 31 29 20 80 20 28 73  |. (sp2%>=1) . (s|
00000690  70 32 25 3c 3d 6e 6f 73  70 72 69 74 65 73 25 29  |p2%<=nosprites%)|
000006a0  20 80 20 28 73 70 32 25  3c 3e 73 70 31 25 29 0d  | . (sp2%<>sp1%).|
000006b0  02 08 05 db 0d 02 12 1b  f1 22 31 2e 20 48 6f 72  |........."1. Hor|
000006c0  69 7a 6f 6e 74 61 6c 20  61 70 70 65 6e 64 22 0d  |izontal append".|
000006d0  02 1c 19 f1 22 32 2e 20  56 65 72 74 69 63 61 6c  |...."2. Vertical|
000006e0  20 61 70 70 65 6e 64 22  0d 02 26 2f f5 3a 61 70  | append"..&/.:ap|
000006f0  70 65 6e 64 25 3d a5 2d  26 33 31 3a fd 20 28 61  |pend%=.-&31:. (a|
00000700  70 70 65 6e 64 25 3d 30  29 20 84 20 28 61 70 70  |ppend%=0) . (app|
00000710  65 6e 64 25 3d 31 29 0d  02 30 45 c8 99 20 22 4f  |end%=1)..0E.. "O|
00000720  53 5f 53 70 72 69 74 65  4f 70 22 2c 33 35 2b 32  |S_SpriteOp",35+2|
00000730  35 36 2c 53 70 72 69 74  65 73 2c 6e 61 6d 65 73  |56,Sprites,names|
00000740  24 28 73 70 31 25 29 2c  6e 61 6d 65 73 24 28 73  |$(sp1%),names$(s|
00000750  70 32 25 29 2c 61 70 70  65 6e 64 25 0d 02 3a 05  |p2%),append%..:.|
00000760  e1 0d 02 44 04 0d 02 4e  4a f4 20 2a 2a 2a 2a 2a  |...D...NJ. *****|
00000770  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000007a0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 0d  |***************.|
000007b0  02 58 04 0d 02 62 11 dd  f2 73 61 76 65 73 70 72  |.X...b...savespr|
000007c0  69 74 65 73 0d 02 6c 0c  ea 20 66 69 6c 65 32 24  |ites..l.. file2$|
000007d0  0d 02 76 05 db 0d 02 80  44 e8 22 4f 75 74 70 75  |..v.....D."Outpu|
000007e0  74 20 66 69 6c 65 20 22  2c 66 69 6c 65 32 24 20  |t file ",file2$ |
000007f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000800  20 20 20 20 20 20 3a f4  20 67 65 74 20 6e 65 77  |      :. get new|
00000810  20 66 69 6c 65 6e 61 6d  65 0d 02 8a 1e e7 20 66  | filename..... f|
00000820  69 6c 65 32 24 3d 22 22  20 8c 20 66 69 6c 65 32  |ile2$="" . file2|
00000830  24 3d 66 69 6c 65 24 0d  02 94 4c c8 99 20 22 4f  |$=file$...L.. "O|
00000840  53 5f 53 70 72 69 74 65  4f 70 22 2c 31 32 2b 32  |S_SpriteOp",12+2|
00000850  35 36 2c 53 70 72 69 74  65 73 2c 64 69 72 24 2b  |56,Sprites,dir$+|
00000860  22 2e 22 2b 66 69 6c 65  32 24 20 3a f4 20 73 61  |"."+file2$ :. sa|
00000870  76 65 20 61 70 70 65 6e  64 65 64 20 73 70 72 69  |ve appended spri|
00000880  74 65 73 0d 02 9e 05 e1  0d 02 a8 04 0d 02 b2 4a  |tes............J|
00000890  f4 20 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |. **************|
000008a0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000008d0  2a 2a 2a 2a 2a 2a 0d 02  bc 04 0d 02 c6 0b dd f2  |******..........|
000008e0  65 72 72 6f 72 0d 02 d0  05 db 0d 02 da 14 f6 3a  |error..........:|
000008f0  f1 22 20 61 74 20 6c 69  6e 65 20 22 3b 9e 0d 02  |." at line ";...|
00000900  e4 05 e1 0d ff                                    |.....|
00000905