RTP Series - RTP5
VERBatim - V22
Play it Again, Cam
Reader's Forum - Mark Hirst Revelation C Interface - Part 1
Reader's Forum - Numeric Precision in R/Basic - Hal Wyman
QTIPS - Use of Mouse
Reader's Forum The C Interface Part 2 - Mark Hirst (Senior Techie - ICS) Reader's Clinic
Window or Not ?
Vroom - Window Processing
QTIPS - Window Symbol Tables
VROOM - Window Processing II
@ATTACK - @HW
Uncommon Knowledge - WC_Reset%
Reader's Clinic - Related Windows
Window or Not?
Reader's Clinic - Scribe Replace Processes in Window
Soft Windows
QTIPS - Window Bug and Debugging Window Bug
Overlapping Windows And Window Menus
QTIPS - New Catalyst Option
QTIPS - Collectors on the fly
QTIPS - Blank Menus in Windows
QTIPS - Moving Objects the EASY way.
QTIPS - Missing DICT Files
QTIPS - Use of Mouse
Advanced Revelation Assembler Interface Module - Yves Pattyn, Technical Manager, Distribase, France
Version 3 Technical Highlights - Input.Char
QTIPS - Moving Objects the EASY way.
Utility Diskette # 4
Form.List.S
Make.Index
Index Sub Revisited
QTIPS - Make.Index 2.11+
QUERY.SUB
Version 3 Technical Highlights - Creating New Accounts Programmatically
Version 3 TCL Subroutines - Creating New Accounts
Version 3 TCL Subroutines - Creating Tables
QTIPS - DOS File Names
DOS Interfacing (Part II)
VERBatim - V116
@ATTACK - @Pri.File
@ATTACK - @Rollout.File
File Variables
How Indexes Are Updated
Index Record Layouts
QTIPS - File Variable of File In SELECT Statement
QTIPS - Amending non-Attached Files
LINEAR HASH FILE STRUCTURES - Part 1
Index Flush
QTIPS - File Handle Structure
Compiling 64K on a Shoestring by Blaise Wrenn (LexStat Systems Ltd)
Playing with Scan Codes
QTIPS - Compiling Protection Code
QTIPS - Invalid Code and Command
QTIPS - Code/Command Help
Compiling 64K on a Shoestring by Blaise Wrenn (LexStat Systems Ltd)
Utility Diskette # 3 - Part I
QTIPS - Finding/Replacing Spaces With The Editor
Utility Diskette # 4
Reader's Forum - Mark Hirst Revelation C Interface - Part 1
Reader's Forum The C Interface Part 2 - Mark Hirst (Senior Techie - ICS) Reader's Clinic
QTIPS - Improving the LH_VERIFY Window
VERBatim - V47
VERBatim - V119
VERBatim - V125
VERBatim - V118
Advanced Revelation Assembler Interface Module - Yves Pattyn, Technical Manager, Distribase, France
QTIPS - Form Processor
QTIPS - Reusing Symbolics in Windows
Soft Windows
QTIPS - Query Windows - Changing Colours
Reader's Clinic - Template Name at Pre-Init
Caching in on the Frames Array - Mike Pope
Advanced Revelation Assembler Interface Module - Yves Pattyn, Technical Manager, Distribase, France
RTP Series - RTP42
RTP Series - RTP51
Reader's Clinic - AREV Runtime
@ATTACK - @PDisk.On
Advanced Revelation Initialisation Sequence (Overview) by Mike Pope
AREV Comes to Czechoslovakia Les Palenik, Cosmotron Systems
Reader's Clinic - Functions and Subroutines
Argument passing - Subroutines and Functions - Mike Pope
@ATTACK - @Modal
VERBatim - V17
VERBatim - V6
VERBatim - V125
Utility Diskette # 3 - Part I
Version 3 Technical Highlights - Copying Rows Programmatically
Version 3 TCL Subroutines - Copying Rows
Reader's Clinic - Page Marks in Windows
RTP Series - RTP42
VERBatim - V65
Argument passing - Subroutines and Functions - Mike Pope
Reader's Clinic - Functions and Subroutines
Reader's Letters - Jim Owen
Playing with Scan Codes
Argument passing - Subroutines and Functions - Mike Pope
QTIPS - Comment Lines In Pulldown Menus
QTIPS - Command Line Options
Customising the Status Line
RTP Series - RTP27
QTIPS - Printing Large Variables from the Debugger
VERBatim - V87
@ATTACK - @HW
Reader's Clinic - Volume Pointer Record
@ATTACK - @Reduction.Done
Reader's Forum - Numeric Precision in R/Basic - Hal Wyman

RevMedia FKB

DocumentV4I4A5
TitleAdvanced Revelation Assembler Interface Module - Yves Pattyn, Technical Manager, Distribase, France
KeywordsASSEMBLER
MOUSE
TEMPLATE.ASM
TextAlthough you can solve most of your PROBLEMS in good old R/Basic you might
sometimes need to do something really special The little examples that I'll
treat in this article came FROM a simple question: `Could I manage the mouse
in Advanced Revelation through R/Basic programming?'

Since no tools (paint window menus etc ) offer full mouse support don't
expect them to do it WITH the routines listed below! You'll have that in the
3 0 version FROM RevTI themselves!

We'll see how to develop two little programs called MOUSE and MPOS in
assembler and make them $MOUSE and $MPOS in your own BP file In figure 1
you can see the general scheme for doing this First you should use the
TEMPLATE ASM source code you find on the Revelation ASSEMBLY Interface disk
Copy this file to the file you'll use as your source code file Enter your
own assembler code in the area reserved for that purpose and assemble the
code Link it make it a BIN file WITH EXE2BIN and grab it into your AREV
with the FIXASM (which you'll find on the Interface disk as well)


ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ ; TEMPLATE ASM ³ ³ ; MYPROG ASM ³
³ ³ ³ ³
³ RET ÃÄÄÄÄÄÄ´ mov ax 01h ³
³ ENDS ³ ³ (Your code) ³
³ ³ ³ RET ³
³ ³ ³ ENDS ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÙ
³
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ TLINK MYPROG ³ ³ TASM MYPROG ³
³ (Gives MYPROG EXE) ÃÄÄÄÄÄÄ´ (Gives MYPROG OBJ) ³
ÀÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÙ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
³
ÚÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄ¿ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
³ EXE2BIN MYPROG ³ ³ In AREV now: ³
³ (Gives MYPROG BIN) ÃÄÄÄÄÄÄ´ RUN BP FIXASM ³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ answer the questions ³
³ (Gives $MYPROG in BP)³
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Figure 1

As you might have noticed I was USING the TASM (Turbo Assembler Borland)
which gave no COMPATIBILITY PROBLEMS for Advanced Revelation

Let's first take a look at the MOUSE ASM

1 ;
2 ; TITLE: MOUSE ASM
3 ;
4 ; DESCRIPTION: Simple subroutine to turn mousepointer on
5 ; and off FROM an R/Basic call
6 ;
7 ; DATE: July 1992
8 ;
9 ; VERSION: 1 0
10 ;
11 ; No Copyright
12 ; Please feel free to copy the code for your personal use
13 ;
14 PAGE 60 132
15 TITLE MOUSE
16 CSEG SEGMENT PARA PUBLIC 'CODE'
17 ASSUME CS:CSEG
18 ROUTINE PROC FAR
19 ORG 0 ; START AT ADDRESS ZERO
20 DB 'ASSM' ; 4 BYTE FLAG
21 DB 2 ; IDENTIFY AS ASSEMBLER ROUTINE
22 NO_ARGS DB 1 ; NUMBER OF ARGUMENTS PASSED
23 NO_COMS DW 0 ; NUMBER OF COMMON VARIABLES
24 DW 0 ; UNUSED
25 FUNCTION DD 0 ; ADDRESS FOR REV FUNCTION CALLS
26 mov ah 11h
27 mov al 00h
28 mov dx 01h
29 CALL FUNCTION ; get first arg FROM arev
30 mov ax ooh
31 cmp ax cx
32 jne TurnOn
33 jmp TurnOff
34 TurnOn:
35 mov ax 0000h
36 int 33h
37 mov dx 02h
38 mov cx bx
39 mov ah 12h
40 mov al 00h
41 CALL FUNCTION ; send nbr of buttons to Arev 2nd param
42 mov ax 0001h
43 int 33h ; Turn Mouse CURSOR on
44 jmp DONE
45 TurnOff:
46 mov ax 0002h
47 int 33h
48 DONE:
49 RET ; JUMP HERE WHEN FINISHED
50 ROUTINE ENDP
51 CSEG ENDS
52 END


Lines 1 to 13 are comment while lines 14 to 25 is non altered source code
from the TEMPLATE ASM found on your distribution disk This code should not
be modified FROM line 26 to line 47 is the code you need to insert in the
TEMPLATE ASM to make your own assembler routines The rest of the code is
again coming FROM TEMPLATE ASM

Let's have a look to WHAT we want this routine to do We'll comment later
HOW it does it Initialising the mouse FROM an R/Basic program turning the
mousepointer on and off FROM within R/Basic is the purpose We'd like to be
able to do the following in R/Basic

Subroutine MouseTest
Declare Subroutine Mouse
On = 1
Off = 0
Mouse(On NbrOfButtons)


Mouse(Off)
Return


Mouse takes two parameters the first one controls if the mouse pointer is
visible or not the second one returns the number of buttons detected at
initialisation of the mouse

Let's see how this is done in the assembler code In the interface manual
all 45 functions of the interface are documented we will only use two of
them :

11h retrieve integer FROM AREV

12h send integer to AREV

Lines 26 29 set the function to 11h prepare for a simple VARIABLE and
indicate in the dx register that we want the first parameter to be used
(MOUSE(Param1 Param2) Finally the function (link to AREV) is called In
line 31 the received VALUE is compared to 0 In non zero we go to line 34
(TurnOn) else (so if zero) we go to line 45 (TurnOff) Lines 35 36 call
the mouse INTERRUPT (33h) Line 37 selects the second parameter to be used
next the button information is moved to the cx register which has to
contain the integer information to send to AREV Finally line 39 selects the
12h function (send integer to AREV) Lines 42 43 make the mouse pointer
visible Lines 46 47 jumped to if the first parameter passed is zero make
the mouse pointer invisible

In the NEXT code well try to work it out for yourself what's happening
based upon what we've done above!

1 ;
2 ; TITLE: MPOS ASM
3 ;
4 ; DESCRIPTION: Routine that returns both mouse position
5 ; and buttons state
6 ;
7 ; DATE: July 1992
8 ;
9 ; VERSION: 1 0
10 ;
11 ; No Copyright
12 ; Please feel free to copy the code for your personal use
13 ;
14 PAGE 60 132
15 TITLE MPOS Mouse Position and buttons state
16 CSEG SEGMENT PARA PUBLIC 'CODE'
17 ASSUME CS:CSEG
18 ROUTINE PROC FAR
19 ORG 0 ; START AT ADDRESS ZERO
20 DB 'ASSM' ; 4 BYTE FLAG
21 DB 2 ; IDENTIFY AS ASSEMBLER ROUTINE
22 NO_ARGS DB 0 ; NUMBER OF ARGUMENTS PASSED
23 NO_COMS DW 0 ; NUMBER OF COMMON VARIABLES
24 DW 0 ; UNUSED
25 FUNCTION DD 0 ; ADDRESS FOR REV FUNCTION CALLS
26 jmp DataSkipped
27 SaveY DW ?
28 SaveB DW ?
29 DataSkipped:
30 mov ax oo03h ; Function 03h for Int 33h (mouse)
31 int 33h ; Call for mouse position
32 ; bx : button info
33 ; cx : X position
34 ; dx : Y position
35 mov [SaveB] ax ; saves button information
36 mov [SaveY] dx ; saves Y Position
37 mov dx 01h
38 mov ah 12h
39 mov al 00h
40 CALL FUNCTION ; sends X position to 1st arev param
41 mov bx OFFSET SaveY
42 mov cx [bx]
43 mov dx 02h
44 mov ah 12h
45 mov al 00h
46 CALL FUNCTION ; sends Y position to 2nd arev param
47 mov bx OFFSET SaveB
48 mov cx [bx]
49 mov dx 03h
50 mov ah 12h
51 mov al 00h
52 CALL FUNCTION ; sends button info to 3rd arev param
53 DONE:
54 RET ; JUMP HERE WHEN FINISHED
55 ROUTINE ENDP
56 CSEG ENDS
57 END


Something special here is worth mentioning: the code starts WITH a `jmp
DataSkipped' instruction The ASSEMBLY Interface documentation says that you
may not have a STACK segment DEFINED in your code nor can you define a DATA
segment So when DATA storage is needed this is one way to have a pseudo
data segment in your code The jump instruction lets you start the program
by jumping over the data part In the above EXAMPLE we could have used a
push and pop instruction to save the bx and dx registers So don't think
push and pop won't work because you don't have a STACK segment

By the way I started assembler programming only a few days ago One
shouldn't be worried about it Programming little very useful routines in
Assembler and linking them to AREV is not as hard as one might think Just
do it once you'll love it! At least I did

Here is a small R/Basic program that uses both the MOUSE and MPOS routines
It might give you some ideas for your own programs


Declare Subroutine Mpos VIDEO Rw Mouse
Video Rw(0 0 @CRTWIDE 1 @CRTMAXHIGH 1 "R" Image)
A = 0 ; B = 0 ; C = 0
Print @( 1) :
Print @(5 5) : "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"
Print @(5 6) : "º º"
Print @(5 7) : "º X : º"
Print @(5 8) : "º Y : º "
Print @(5 9) : "º B : º "
Print @(5 10): "º ±±OK±± º"
Print @(5 11): "º º"
Print @(5 12): "º ±±MENU±± º "
Print @(5 13): "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"
On = 1 ; Off = 0 ; But = 0
Mouse(On But)
Loop
Mpos(A B C)
X = Int(A/8)
Y = Int(B/8)
Until (X >= 21) and (X<=26) and (Y=10) and (C=1)
If (X >=20) and (X<=27) and (Y=12) and (C=1) then
Mouse(Off)
Call Catalyst(`M' `MAIN')
Mouse(On But)
End
Print @(11 7) : Int(A/8) "R#5"
Print @(11 8) : Int(B/8) "R#5"
Print @(11 9) : C "R#5"
Repeat
Mouse(Off But)
Video RW(0 0 @CrtWide 1 @CrtMaxHigh 1 "W" Image)


Have Fun and Good luck!


(Volume 4 Issue 4 Pages 8 11)
[revmedia/copyrigh.htm]

Page last modified: 31/01/03