Home » Archimedes archive » Acorn User » AU 1996-12 B.adf » Regulars_2 » StarInfo/Clifford/!Macros/MacroCode/s/InsertSrc

StarInfo/Clifford/!Macros/MacroCode/s/InsertSrc

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 » Acorn User » AU 1996-12 B.adf » Regulars_2
Filename: StarInfo/Clifford/!Macros/MacroCode/s/InsertSrc
Read OK:
File size: 07C7 bytes
Load address: 0000
Exec address: 0000
File contents
   10DIM code% &1000
   20
   30FOR pass%=%1000 TO %1010 STEP 2
   40P%=code%:L%=code%+&1000
   50[   opt     pass%
   60    equs    "MCDE"
   70    equd    name - code%
   71    equd    description - code%
   80    equd    0
   81    equd    0
   90    equd    key_code - code%
  120
  130.name
  140    equs    "InsertText"
  150    equb    0
  160
  170.description
  180    equs    "Insert text"
  190    equb    9
  200    equs    "0.10 (01 Aug 1996)"
  210    equb    0
  220    align
  230
  240.key_code
  250    stmfd   r13!, {r14}
  260    mov     r10, r0 ; pointer to string to process
  270    mov     r0, #6
  280    mov     r3, #256
  290    swi     "XOS_Module"
  300    ldmvsfd r13!, {pc}^
  310    mov     r9, r2 ; pointer to buffer
  320    mov     r8, #256 ; size of buffer
  330.process_string
  340    mov     r0, r10
  350    mov     r1, r9
  360    mov     r2, r8
  370    swi     "XOS_GSTrans"
  380    bvs     finished
  390    bcs     extend_workspace
  391    cmp     r2, r8
  392    beq     extend_workspace
  400    cmp     r2, #1
  410    blt     finished
  420    mov     r4, r2
  430    mov     r3, r9
  440    mov     r0, #138
  450    mov     r1, #0
  460.send_characters
  470    ldrb    r2, [r3], #1
  480    swi     "XOS_Byte"
  490    bvs     finished
  500    subs    r4, r4, #1
  510    bgt     send_characters
  520;    mov     r0, #1
  530;    mvn     r1, #NOT(-15)
  540;    mov     r2, #150
  550;    mov     r3, #1
  560;    swi     "XSound_Control"
  570.finished
  580    mov     r0, #7
  590    mov     r2, r9
  600    swi     "XOS_Module"
  610    ldmfd   r13!, {pc}^
  620.extend_workspace
  630;   This code is pretty pointless, as the keyboard buffer can only hold 256
  631;   characters! If this limit changes though, this code should be able to
  632;   insert any length string into the keyboard buffer.
  640    mov     r0, #13
  650    mov     r2, r9
  660    mov     r3, #256
  670    swi     "XOS_Module"
  680    bvs     finished
  690    add     r8, r8, #256
  700    mov     r9, r2
  710    b       process_string
  720]
  730NEXT
  740
  750SYS "OS_File", 10, "InsertText", &ffd, , code%, P%
  760END

� code% &1000

� pass%=%1000 � %1010 � 2
(P%=code%:L%=code%+&1000
2[   opt     pass%
<    equs    "MCDE"
F    equd    name - code%
G#    equd    description - code%
P    equd    0
Q    equd    0
Z     equd    key_code - code%
x
�	.name
�    equs    "InsertText"
�    equb    0
�
�.description
�    equs    "Insert text"
�    equb    9
�$    equs    "0.10 (01 Aug 1996)"
�    equb    0
�
    align
�
�
.key_code
�    stmfd   r13!, {r14}
6    mov     r10, r0 ; pointer to string to process
    mov     r0, #6
    mov     r3, #256
"    swi     "XOS_Module"
,    ldmvsfd r13!, {pc}^
6*    mov     r9, r2 ; pointer to buffer
@)    mov     r8, #256 ; size of buffer
J.process_string
T    mov     r0, r10
^    mov     r1, r9
h    mov     r2, r8
r    swi     "XOS_GSTrans"
|    bvs     finished
�     bcs     extend_workspace
�    cmp     r2, r8
�     beq     extend_workspace
�    cmp     r2, #1
�    blt     finished
�    mov     r4, r2
�    mov     r3, r9
�    mov     r0, #138
�    mov     r1, #0
�.send_characters
�    ldrb    r2, [r3], #1
�    swi     "XOS_Byte"
�    bvs     finished
�    subs    r4, r4, #1
�    bgt     send_characters
;    mov     r0, #1
;    mvn     r1, #�(-15)
;    mov     r2, #150
&;    mov     r3, #1
0!;    swi     "XSound_Control"
:
.finished
D    mov     r0, #7
N    mov     r2, r9
X    swi     "XOS_Module"
b    ldmfd   r13!, {pc}^
l.extend_workspace
vO;   This code is pretty pointless, as the keyboard buffer can only hold 256
wM;   characters! If this limit changes though, this code should be able to
x:;   insert any length string into the keyboard buffer.
�    mov     r0, #13
�    mov     r2, r9
�    mov     r3, #256
�    swi     "XOS_Module"
�    bvs     finished
�    add     r8, r8, #256
�    mov     r9, r2
�    b       process_string
�]
��
�
�5ș "OS_File", 10, "InsertText", &ffd, , code%, P%
��
�
00000000  0d 00 0a 11 de 20 63 6f  64 65 25 20 26 31 30 30  |..... code% &100|
00000010  30 0d 00 14 04 0d 00 1e  1d e3 20 70 61 73 73 25  |0......... pass%|
00000020  3d 25 31 30 30 30 20 b8  20 25 31 30 31 30 20 88  |=%1000 . %1010 .|
00000030  20 32 0d 00 28 1b 50 25  3d 63 6f 64 65 25 3a 4c  | 2..(.P%=code%:L|
00000040  25 3d 63 6f 64 65 25 2b  26 31 30 30 30 0d 00 32  |%=code%+&1000..2|
00000050  15 5b 20 20 20 6f 70 74  20 20 20 20 20 70 61 73  |.[   opt     pas|
00000060  73 25 0d 00 3c 16 20 20  20 20 65 71 75 73 20 20  |s%..<.    equs  |
00000070  20 20 22 4d 43 44 45 22  0d 00 46 1c 20 20 20 20  |  "MCDE"..F.    |
00000080  65 71 75 64 20 20 20 20  6e 61 6d 65 20 2d 20 63  |equd    name - c|
00000090  6f 64 65 25 0d 00 47 23  20 20 20 20 65 71 75 64  |ode%..G#    equd|
000000a0  20 20 20 20 64 65 73 63  72 69 70 74 69 6f 6e 20  |    description |
000000b0  2d 20 63 6f 64 65 25 0d  00 50 11 20 20 20 20 65  |- code%..P.    e|
000000c0  71 75 64 20 20 20 20 30  0d 00 51 11 20 20 20 20  |qud    0..Q.    |
000000d0  65 71 75 64 20 20 20 20  30 0d 00 5a 20 20 20 20  |equd    0..Z    |
000000e0  20 65 71 75 64 20 20 20  20 6b 65 79 5f 63 6f 64  | equd    key_cod|
000000f0  65 20 2d 20 63 6f 64 65  25 0d 00 78 04 0d 00 82  |e - code%..x....|
00000100  09 2e 6e 61 6d 65 0d 00  8c 1c 20 20 20 20 65 71  |..name....    eq|
00000110  75 73 20 20 20 20 22 49  6e 73 65 72 74 54 65 78  |us    "InsertTex|
00000120  74 22 0d 00 96 11 20 20  20 20 65 71 75 62 20 20  |t"....    equb  |
00000130  20 20 30 0d 00 a0 04 0d  00 aa 10 2e 64 65 73 63  |  0.........desc|
00000140  72 69 70 74 69 6f 6e 0d  00 b4 1d 20 20 20 20 65  |ription....    e|
00000150  71 75 73 20 20 20 20 22  49 6e 73 65 72 74 20 74  |qus    "Insert t|
00000160  65 78 74 22 0d 00 be 11  20 20 20 20 65 71 75 62  |ext"....    equb|
00000170  20 20 20 20 39 0d 00 c8  24 20 20 20 20 65 71 75  |    9...$    equ|
00000180  73 20 20 20 20 22 30 2e  31 30 20 28 30 31 20 41  |s    "0.10 (01 A|
00000190  75 67 20 31 39 39 36 29  22 0d 00 d2 11 20 20 20  |ug 1996)"....   |
000001a0  20 65 71 75 62 20 20 20  20 30 0d 00 dc 0d 20 20  | equb    0....  |
000001b0  20 20 61 6c 69 67 6e 0d  00 e6 04 0d 00 f0 0d 2e  |  align.........|
000001c0  6b 65 79 5f 63 6f 64 65  0d 00 fa 1b 20 20 20 20  |key_code....    |
000001d0  73 74 6d 66 64 20 20 20  72 31 33 21 2c 20 7b 72  |stmfd   r13!, {r|
000001e0  31 34 7d 0d 01 04 36 20  20 20 20 6d 6f 76 20 20  |14}...6    mov  |
000001f0  20 20 20 72 31 30 2c 20  72 30 20 3b 20 70 6f 69  |   r10, r0 ; poi|
00000200  6e 74 65 72 20 74 6f 20  73 74 72 69 6e 67 20 74  |nter to string t|
00000210  6f 20 70 72 6f 63 65 73  73 0d 01 0e 16 20 20 20  |o process....   |
00000220  20 6d 6f 76 20 20 20 20  20 72 30 2c 20 23 36 0d  | mov     r0, #6.|
00000230  01 18 18 20 20 20 20 6d  6f 76 20 20 20 20 20 72  |...    mov     r|
00000240  33 2c 20 23 32 35 36 0d  01 22 1c 20 20 20 20 73  |3, #256..".    s|
00000250  77 69 20 20 20 20 20 22  58 4f 53 5f 4d 6f 64 75  |wi     "XOS_Modu|
00000260  6c 65 22 0d 01 2c 1b 20  20 20 20 6c 64 6d 76 73  |le"..,.    ldmvs|
00000270  66 64 20 72 31 33 21 2c  20 7b 70 63 7d 5e 0d 01  |fd r13!, {pc}^..|
00000280  36 2a 20 20 20 20 6d 6f  76 20 20 20 20 20 72 39  |6*    mov     r9|
00000290  2c 20 72 32 20 3b 20 70  6f 69 6e 74 65 72 20 74  |, r2 ; pointer t|
000002a0  6f 20 62 75 66 66 65 72  0d 01 40 29 20 20 20 20  |o buffer..@)    |
000002b0  6d 6f 76 20 20 20 20 20  72 38 2c 20 23 32 35 36  |mov     r8, #256|
000002c0  20 3b 20 73 69 7a 65 20  6f 66 20 62 75 66 66 65  | ; size of buffe|
000002d0  72 0d 01 4a 13 2e 70 72  6f 63 65 73 73 5f 73 74  |r..J..process_st|
000002e0  72 69 6e 67 0d 01 54 17  20 20 20 20 6d 6f 76 20  |ring..T.    mov |
000002f0  20 20 20 20 72 30 2c 20  72 31 30 0d 01 5e 16 20  |    r0, r10..^. |
00000300  20 20 20 6d 6f 76 20 20  20 20 20 72 31 2c 20 72  |   mov     r1, r|
00000310  39 0d 01 68 16 20 20 20  20 6d 6f 76 20 20 20 20  |9..h.    mov    |
00000320  20 72 32 2c 20 72 38 0d  01 72 1d 20 20 20 20 73  | r2, r8..r.    s|
00000330  77 69 20 20 20 20 20 22  58 4f 53 5f 47 53 54 72  |wi     "XOS_GSTr|
00000340  61 6e 73 22 0d 01 7c 18  20 20 20 20 62 76 73 20  |ans"..|.    bvs |
00000350  20 20 20 20 66 69 6e 69  73 68 65 64 0d 01 86 20  |    finished... |
00000360  20 20 20 20 62 63 73 20  20 20 20 20 65 78 74 65  |    bcs     exte|
00000370  6e 64 5f 77 6f 72 6b 73  70 61 63 65 0d 01 87 16  |nd_workspace....|
00000380  20 20 20 20 63 6d 70 20  20 20 20 20 72 32 2c 20  |    cmp     r2, |
00000390  72 38 0d 01 88 20 20 20  20 20 62 65 71 20 20 20  |r8...     beq   |
000003a0  20 20 65 78 74 65 6e 64  5f 77 6f 72 6b 73 70 61  |  extend_workspa|
000003b0  63 65 0d 01 90 16 20 20  20 20 63 6d 70 20 20 20  |ce....    cmp   |
000003c0  20 20 72 32 2c 20 23 31  0d 01 9a 18 20 20 20 20  |  r2, #1....    |
000003d0  62 6c 74 20 20 20 20 20  66 69 6e 69 73 68 65 64  |blt     finished|
000003e0  0d 01 a4 16 20 20 20 20  6d 6f 76 20 20 20 20 20  |....    mov     |
000003f0  72 34 2c 20 72 32 0d 01  ae 16 20 20 20 20 6d 6f  |r4, r2....    mo|
00000400  76 20 20 20 20 20 72 33  2c 20 72 39 0d 01 b8 18  |v     r3, r9....|
00000410  20 20 20 20 6d 6f 76 20  20 20 20 20 72 30 2c 20  |    mov     r0, |
00000420  23 31 33 38 0d 01 c2 16  20 20 20 20 6d 6f 76 20  |#138....    mov |
00000430  20 20 20 20 72 31 2c 20  23 30 0d 01 cc 14 2e 73  |    r1, #0.....s|
00000440  65 6e 64 5f 63 68 61 72  61 63 74 65 72 73 0d 01  |end_characters..|
00000450  d6 1c 20 20 20 20 6c 64  72 62 20 20 20 20 72 32  |..    ldrb    r2|
00000460  2c 20 5b 72 33 5d 2c 20  23 31 0d 01 e0 1a 20 20  |, [r3], #1....  |
00000470  20 20 73 77 69 20 20 20  20 20 22 58 4f 53 5f 42  |  swi     "XOS_B|
00000480  79 74 65 22 0d 01 ea 18  20 20 20 20 62 76 73 20  |yte"....    bvs |
00000490  20 20 20 20 66 69 6e 69  73 68 65 64 0d 01 f4 1a  |    finished....|
000004a0  20 20 20 20 73 75 62 73  20 20 20 20 72 34 2c 20  |    subs    r4, |
000004b0  72 34 2c 20 23 31 0d 01  fe 1f 20 20 20 20 62 67  |r4, #1....    bg|
000004c0  74 20 20 20 20 20 73 65  6e 64 5f 63 68 61 72 61  |t     send_chara|
000004d0  63 74 65 72 73 0d 02 08  17 3b 20 20 20 20 6d 6f  |cters....;    mo|
000004e0  76 20 20 20 20 20 72 30  2c 20 23 31 0d 02 12 1c  |v     r0, #1....|
000004f0  3b 20 20 20 20 6d 76 6e  20 20 20 20 20 72 31 2c  |;    mvn     r1,|
00000500  20 23 ac 28 2d 31 35 29  0d 02 1c 19 3b 20 20 20  | #.(-15)....;   |
00000510  20 6d 6f 76 20 20 20 20  20 72 32 2c 20 23 31 35  | mov     r2, #15|
00000520  30 0d 02 26 17 3b 20 20  20 20 6d 6f 76 20 20 20  |0..&.;    mov   |
00000530  20 20 72 33 2c 20 23 31  0d 02 30 21 3b 20 20 20  |  r3, #1..0!;   |
00000540  20 73 77 69 20 20 20 20  20 22 58 53 6f 75 6e 64  | swi     "XSound|
00000550  5f 43 6f 6e 74 72 6f 6c  22 0d 02 3a 0d 2e 66 69  |_Control"..:..fi|
00000560  6e 69 73 68 65 64 0d 02  44 16 20 20 20 20 6d 6f  |nished..D.    mo|
00000570  76 20 20 20 20 20 72 30  2c 20 23 37 0d 02 4e 16  |v     r0, #7..N.|
00000580  20 20 20 20 6d 6f 76 20  20 20 20 20 72 32 2c 20  |    mov     r2, |
00000590  72 39 0d 02 58 1c 20 20  20 20 73 77 69 20 20 20  |r9..X.    swi   |
000005a0  20 20 22 58 4f 53 5f 4d  6f 64 75 6c 65 22 0d 02  |  "XOS_Module"..|
000005b0  62 1b 20 20 20 20 6c 64  6d 66 64 20 20 20 72 31  |b.    ldmfd   r1|
000005c0  33 21 2c 20 7b 70 63 7d  5e 0d 02 6c 15 2e 65 78  |3!, {pc}^..l..ex|
000005d0  74 65 6e 64 5f 77 6f 72  6b 73 70 61 63 65 0d 02  |tend_workspace..|
000005e0  76 4f 3b 20 20 20 54 68  69 73 20 63 6f 64 65 20  |vO;   This code |
000005f0  69 73 20 70 72 65 74 74  79 20 70 6f 69 6e 74 6c  |is pretty pointl|
00000600  65 73 73 2c 20 61 73 20  74 68 65 20 6b 65 79 62  |ess, as the keyb|
00000610  6f 61 72 64 20 62 75 66  66 65 72 20 63 61 6e 20  |oard buffer can |
00000620  6f 6e 6c 79 20 68 6f 6c  64 20 32 35 36 0d 02 77  |only hold 256..w|
00000630  4d 3b 20 20 20 63 68 61  72 61 63 74 65 72 73 21  |M;   characters!|
00000640  20 49 66 20 74 68 69 73  20 6c 69 6d 69 74 20 63  | If this limit c|
00000650  68 61 6e 67 65 73 20 74  68 6f 75 67 68 2c 20 74  |hanges though, t|
00000660  68 69 73 20 63 6f 64 65  20 73 68 6f 75 6c 64 20  |his code should |
00000670  62 65 20 61 62 6c 65 20  74 6f 0d 02 78 3a 3b 20  |be able to..x:; |
00000680  20 20 69 6e 73 65 72 74  20 61 6e 79 20 6c 65 6e  |  insert any len|
00000690  67 74 68 20 73 74 72 69  6e 67 20 69 6e 74 6f 20  |gth string into |
000006a0  74 68 65 20 6b 65 79 62  6f 61 72 64 20 62 75 66  |the keyboard buf|
000006b0  66 65 72 2e 0d 02 80 17  20 20 20 20 6d 6f 76 20  |fer.....    mov |
000006c0  20 20 20 20 72 30 2c 20  23 31 33 0d 02 8a 16 20  |    r0, #13.... |
000006d0  20 20 20 6d 6f 76 20 20  20 20 20 72 32 2c 20 72  |   mov     r2, r|
000006e0  39 0d 02 94 18 20 20 20  20 6d 6f 76 20 20 20 20  |9....    mov    |
000006f0  20 72 33 2c 20 23 32 35  36 0d 02 9e 1c 20 20 20  | r3, #256....   |
00000700  20 73 77 69 20 20 20 20  20 22 58 4f 53 5f 4d 6f  | swi     "XOS_Mo|
00000710  64 75 6c 65 22 0d 02 a8  18 20 20 20 20 62 76 73  |dule"....    bvs|
00000720  20 20 20 20 20 66 69 6e  69 73 68 65 64 0d 02 b2  |     finished...|
00000730  1c 20 20 20 20 61 64 64  20 20 20 20 20 72 38 2c  |.    add     r8,|
00000740  20 72 38 2c 20 23 32 35  36 0d 02 bc 16 20 20 20  | r8, #256....   |
00000750  20 6d 6f 76 20 20 20 20  20 72 39 2c 20 72 32 0d  | mov     r9, r2.|
00000760  02 c6 1e 20 20 20 20 62  20 20 20 20 20 20 20 70  |...    b       p|
00000770  72 6f 63 65 73 73 5f 73  74 72 69 6e 67 0d 02 d0  |rocess_string...|
00000780  05 5d 0d 02 da 05 ed 0d  02 e4 04 0d 02 ee 35 c8  |.]............5.|
00000790  99 20 22 4f 53 5f 46 69  6c 65 22 2c 20 31 30 2c  |. "OS_File", 10,|
000007a0  20 22 49 6e 73 65 72 74  54 65 78 74 22 2c 20 26  | "InsertText", &|
000007b0  66 66 64 2c 20 2c 20 63  6f 64 65 25 2c 20 50 25  |ffd, , code%, P%|
000007c0  0d 02 f8 05 e0 0d ff                              |.......|
000007c7