Home » Archimedes archive » Zipped Apps » BCPL » BCPL/armlib/testev

BCPL/armlib/testev

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 » Zipped Apps » BCPL
Filename: BCPL/armlib/testev
Read OK:
File size: 01CE bytes
Load address: 0000
Exec address: 0000
File contents
GET "LIBHDR"

GET "evheader"

LET ExtractFromEventBuffer(b) = VALOF
$( LET p = b!evb.Extraction;
   IF p=b!evb.Insertion THEN RESULTIS FALSE;
   result2 := b!(evb.Buffer+p);
   p := p+1;
   IF p>b!evb.BufferEnd THEN p := 0;
   b!evb.Extraction := p
   RESULTIS TRUE
$)

LET start() BE
$( LET flag = FALSE;
   SetEventHandler(ev.EscapeFlag, @flag, evh.SetFlag);
   WHILE ~flag DO LOOP;
   flag := FALSE;
   $( LET c = ?;
      WHILE ~flag DO c := rdch()
   $)
$)
00000000  47 45 54 20 22 4c 49 42  48 44 52 22 0a 0a 47 45  |GET "LIBHDR"..GE|
00000010  54 20 22 65 76 68 65 61  64 65 72 22 0a 0a 4c 45  |T "evheader"..LE|
00000020  54 20 45 78 74 72 61 63  74 46 72 6f 6d 45 76 65  |T ExtractFromEve|
00000030  6e 74 42 75 66 66 65 72  28 62 29 20 3d 20 56 41  |ntBuffer(b) = VA|
00000040  4c 4f 46 0a 24 28 20 4c  45 54 20 70 20 3d 20 62  |LOF.$( LET p = b|
00000050  21 65 76 62 2e 45 78 74  72 61 63 74 69 6f 6e 3b  |!evb.Extraction;|
00000060  0a 20 20 20 49 46 20 70  3d 62 21 65 76 62 2e 49  |.   IF p=b!evb.I|
00000070  6e 73 65 72 74 69 6f 6e  20 54 48 45 4e 20 52 45  |nsertion THEN RE|
00000080  53 55 4c 54 49 53 20 46  41 4c 53 45 3b 0a 20 20  |SULTIS FALSE;.  |
00000090  20 72 65 73 75 6c 74 32  20 3a 3d 20 62 21 28 65  | result2 := b!(e|
000000a0  76 62 2e 42 75 66 66 65  72 2b 70 29 3b 0a 20 20  |vb.Buffer+p);.  |
000000b0  20 70 20 3a 3d 20 70 2b  31 3b 0a 20 20 20 49 46  | p := p+1;.   IF|
000000c0  20 70 3e 62 21 65 76 62  2e 42 75 66 66 65 72 45  | p>b!evb.BufferE|
000000d0  6e 64 20 54 48 45 4e 20  70 20 3a 3d 20 30 3b 0a  |nd THEN p := 0;.|
000000e0  20 20 20 62 21 65 76 62  2e 45 78 74 72 61 63 74  |   b!evb.Extract|
000000f0  69 6f 6e 20 3a 3d 20 70  0a 20 20 20 52 45 53 55  |ion := p.   RESU|
00000100  4c 54 49 53 20 54 52 55  45 0a 24 29 0a 0a 4c 45  |LTIS TRUE.$)..LE|
00000110  54 20 73 74 61 72 74 28  29 20 42 45 0a 24 28 20  |T start() BE.$( |
00000120  4c 45 54 20 66 6c 61 67  20 3d 20 46 41 4c 53 45  |LET flag = FALSE|
00000130  3b 0a 20 20 20 53 65 74  45 76 65 6e 74 48 61 6e  |;.   SetEventHan|
00000140  64 6c 65 72 28 65 76 2e  45 73 63 61 70 65 46 6c  |dler(ev.EscapeFl|
00000150  61 67 2c 20 40 66 6c 61  67 2c 20 65 76 68 2e 53  |ag, @flag, evh.S|
00000160  65 74 46 6c 61 67 29 3b  0a 20 20 20 57 48 49 4c  |etFlag);.   WHIL|
00000170  45 20 7e 66 6c 61 67 20  44 4f 20 4c 4f 4f 50 3b  |E ~flag DO LOOP;|
00000180  0a 20 20 20 66 6c 61 67  20 3a 3d 20 46 41 4c 53  |.   flag := FALS|
00000190  45 3b 0a 20 20 20 24 28  20 4c 45 54 20 63 20 3d  |E;.   $( LET c =|
000001a0  20 3f 3b 0a 20 20 20 20  20 20 57 48 49 4c 45 20  | ?;.      WHILE |
000001b0  7e 66 6c 61 67 20 44 4f  20 63 20 3a 3d 20 72 64  |~flag DO c := rd|
000001c0  63 68 28 29 0a 20 20 20  24 29 0a 24 29 0a        |ch().   $).$).|
000001ce