Hi Wolfgang,

thanks for your reply and information. Comments below!


> The event vector is described pretty well at around p.13 of the QPTR
> manual (just before the "what you get" section)..
Hmmm, that sounds familiar now you come to mention it. I'll have another look 
tonight at home, if I get a chance.


> The documentation for IOP_RPTR.says that upon return of the call, all
> bytes are set to 0, except the LSB (the "Pointer" level).
That's what I have got too. Although I didn't know it was the 'pointer' level.

> However, when that was drafted (at least the copy I have), the job
> event byte (sending events to jobs) didn't exist yet, I presume it is
> NOT zero'd on exit, but am not sure.
Well my experiments, granted very simple, show the LSB ony is non-zero the 
remainder are zero. Mind you, how exactly do I send an event to a job?

If I PICK the job, or button frame it, then DO it's button, I get the same 
event both times - $2D with a Key Stroke of $08. 

<SNIP bitmap details>

Interesting. If I position the pointer exactly on 0,0 and simply press a
 key (including space and enter) I still get the pointer moved bit set.

I tried repeatedly pressing the same key when the pointer was stationary
 - I always get 'the pointer moved', as follows :

xorg  yorg  eventvec ks kd
0000  0000  0000002B 01 01 <- Pressing SPACE key without moving pointer
0000  0000  0000002B 02 02 <- Pressing ENTER key without moving pointer
0000  0000  0000002D 66 00 <- Pressing 'f' key without moving pointer.

And so on. 

So my $2B (0010 1011) is as above, Keystroke in window + 
keypress in window + Pointer moved + Pointer in window.

And my $2D (0010 1101) is Keystroke in window + Key up in Window + 
Pointer moved + Pointer in window.

Both showing that the pointer moved event took place, but the pointer 
coordinates never changed. In addition, in my call to IOP_RPTR, I set the
 initial coordinates to 0,0 each time around the loop - it never affects 
the pointer position - as far as I can see that is! However, I'm willing 
to be convinced that internally it is setting them to 0,0 and then 
resetting them to the current pointer position - but I honestly don't 
know.

It's the same if I leave the pointer elsewhere in the window - the 
coordinates don't change but the vectors says that they did!

>> Hope this helps.
It helps a lot, but also opens up more questions! ;-)


> I haven't seen Bruce's email, or at least I don't remember it.
> What did he ask?

I can't find it in Google anymore. It was something to do with setting up sub 
windows and using Aurora - but Google is not listing it any more. I did see it 
about two weeks ago at home, and I printed it off! I shall see what I can find 
tonight!


FYI, this is the code I'm currently playing with :

Me          equ     -1                 ; Current job id
Timeout     equ     -1                 ; Infinite timeout
OpenOld     equ     0                  ; Open existing exclusive device
iop_pinf    equ     $70                ; Get PE information
iop_outl    equ     $7a                ; Outline a primary Window
iop_rptr    equ     $71                ; Read the pointer
TermVec     equ     $01                ; When to stop reading
KeyStroke   equ     $0a                ; Keystroke or button
ESC         equ     $1b                ; ESC key code
Space       equ     ' '                ; One space
LineFeed    equ     $0a                ; Linefeed

            bra.s   start
            dc.l    0
            dc.w    $4afb
JobName     dc.w    JobName_x-JobName-2
            dc.b    'PTR_RECORD Test v1'
JobName_x   equ     *

ConChan     dc.w    4                  ; Console channel name 
            dc.b    'con_'

ConDef      dc.w    412,156,50,30      ; Primary Window width, height, x, y

HexBuff     ds.w    1                  ; 2 Bytes storage for hex conversion

SpaceTab    dc.w    20,18,16,14,13,12,8,6,4,2

PtrRec      ds.w    12                 ; 24 byte Pointer Record for IOP_RPTR

Start       moveq   #1,d0              ; IO_OPEN - equate not working funnily 
enough!
            moveq   #me,d1             ; Open for me
            moveq   #OpenOld,d3        ; Old exclusive device
            lea     ConChan,a0         ; Channel definition
            trap    #2                 ; Do it
            tst.l   d0                 ; OK
            bne     Exit               ; Nope, bale out.

            moveq   #sd_wdef,d0        ; Redefine window
            moveq   #2,d1              ; Red border
            moveq   #1,d2              ; One pixel wide
            lea     ConDef,a1          ; Definition block
            trap    #3                 ; Do it
            tst.l   d0                 ; OK
            bne     Exit               ; Nope, bale out

            moveq   #sd_clear,d0       ; cls
            moveq   #timeout,d3        ; Infinite timeout
            trap    #3                 ; Do it
            tst.l   d0                 ; OK
            bne     Exit               ; Nope, bale out

FindPE      moveq   #iop_pinf,d0       ; Get PE information
            moveq   #timeout,d3        ; Infinite timeout
            trap    #3                 ; Do it
            tst.l   d0                 ; Ok
            bne     Exit               ; No, bale out

GotPE       moveq   #iop_outl,d0       ; Outline primary window
            move.l  #$00040004,d1      ; Shadow 4 by 4
            moveq   #0,d2              ; Ignore window contents
            moveq   #timeout,d3        ; Infinite timeout
            lea     ConDef,a1          ; Outln size
            trap    #3                 ; Do it
            tst.l   d0                 ; Ok
            bne     Exit               ; No, bale out

            lea     SignOn,a1          ; Message, ESC to quit
            move.w  ut_mtext,a2        ; Print message vector
            jsr     (a2)               ; Do it
            bne     Exit               ; Bale out on error

            lea     Title,a1           ; Headings
            move.w  ut_mtext,a2        ; Print message vector
            jsr     (a2)               ; Do it
            bne     Exit               ; Bale out on error


Pointer     moveq   #iop_rptr,d0       ; Read pointer
            moveq   #0,d1              ; Initial x,y for pointer
            moveq   #TermVec,d2        ; Return on button or keypress
            moveq   #timeout,d3        ; Infinite timeout
            lea     PtrRec,a1          ; Pointer record storage
            trap    #3                 ; Do it
            moveq   #0,d0              ; Ignore errors (We know the channel is 
open!)

PrintOut    moveq   #23,d7             ; 24 bytes to print out
            lea     PtrRec,a2          ; Location of bytes to print = pointer 
record

PLoop       move.b  (a2)+,d6           ; Fetch a byte from pointer record
            bsr.s   HexIt              ; Convert to hex in buffer at (A3)
            suba.l  #2,a3              ; Adjust buffer pointer
            exg     a1,a3              ; Buffer now in A1
            moveq   #IO_SSTRG,d0       ; Send bytes to channel
            moveq   #2,d2              ; Two bytes only
            moveq   #timeout,d3        ; Infinite timeout
            trap    #3                 ; Do it
            tst.l   d0                 ; Ok
            bne     Exit               ; No, bale out
            exg     a1,a3              ; Swap buffers back again

SpaceReqd   lea     SpaceTab,a3        ; Table of D7 values where a space is 
needed
            moveq   #9,d5              ; 10 values in table

SpaceNext   cmp.w   (a3)+,d7           ; Counter in table?
            dbeq    d5,SpaceNext       ; Scan until found, or not
            bne.s   LoopEnd            ; It was not found
            bsr.s   DoSpace            ; Print a single space

LoopEnd     dbra    d7,PLoop           ; Do some more bytes

            bsr.s   DoLinefeed         ; Print a linefeed now

Escape      lea     PtrRec,a2          ; Pointer record again
            cmpi.b  #ESC,KeyStroke(a2) ; Got ESC key?
            bne.s   Pointer            ; Go around again

Exit        move.l  d0,d3              ; Error code in D3
            moveq   #5,d0              ; MT_FRJOB - also not working here - 
why???
            moveq   #timeout,d1        ; Infinite timeout
            trap    #1                 ; Kill me
            bra.s   Exit               ; We never get here, but ...

HexIt       lea     HexBuff,a3         ; Buffer for output
            move.b  d6,-(a7)           ; Save hex byte
            lsr.b   #4,d6              ; Keep high nibble in low nibble
            bsr.s   Nibble             ; Convert nibble to hex
            move.b  (a7)+,d6           ; Restore hex byte

Nibble      andi.b  #$0f,d6            ; Keep lower nibble
            cmpi.b  #10,d6             ; Check for a-f
            bcs.s   Add_0              ; No, 0-9 only
            addq.b  #7,d6              ; Offset to 'A'
Add_0       add.b   #'0',d6            ; ASCII code now
            move.b  d6,(a3)+           ; And buffer it
            rts                        ; Done

DoSpace     moveq   #Space,d1          ; Print a space
            bra.s   DoIt               ; Skip next bit

DoLinefeed  moveq   #LineFeed,d1       ; Print a linefeed

DoIt        moveq   #io_sbyte,d0       ; Send one byte to channel
            moveq   #timeout,d3        ; Infinite timeout
            trap    #3                 ; Do it
            tst.l   d0                 ; Ok
            bne     Exit               ; No bale out
            rts

SignOn      dc.w    signon_x-signon-2
            dc.b    'Press ESC to quit...',10,10
SignOn_x    equ     *

Title       dc.w    Title_x-Title-2
            dc.b    'Channel  SubW PtrX PtrY KS KD EventVec'
            dc.b    ' Wide High Xorg Yorg',Linefeed
Title_x     equ     *



Cheers,
Norman.
_______________________________________________
QL-Users Mailing List
http://www.q-v-d.demon.co.uk/smsqe.htm

Reply via email to