[comp.sys.atari.st.tech] Closing AES boxes interfering with VDI drawing

moses@hao.ucar.edu (Julie Moses) (11/25/90)

    I have an annoying problem in a program I am writing. I open a 
dialogue box then close the box and immediately afterwards do some 
VDI drawing (automatically not by hand) onto screen. The problem is
that the closing of the AES dialogue box does not finish before the VDI
drawing begins and therefore the VDI drawing is also erased.
    I have tried putting a delay by evnt_timer and by a long for()
loop between closing the box and the VDI drawing. In each case the
closing of the AES dialogue box is also delayed and it still erases
the VDI drawing. Then I thought it might be my wind_updates but after
changing them it did not solve the problem either.


Julie Moses

andrew@cs.utk.edu (Andrew Krzywdzinski) (11/25/90)

In article <9267@ncar.ucar.edu> moses@hao.ucar.edu (Julie Moses) writes:
>
>
>    I have an annoying problem in a program I am writing. I open a 
>dialogue box then close the box and immediately afterwards do some 
>VDI drawing (automatically not by hand) onto screen. The problem is
>that the closing of the AES dialogue box does not finish before the VDI
>drawing begins and therefore the VDI drawing is also erased.
>    I have tried putting a delay by evnt_timer and by a long for()
>loop between closing the box and the VDI drawing. In each case the
>closing of the AES dialogue box is also delayed and it still erases
>the VDI drawing. Then I thought it might be my wind_updates but after
>changing them it did not solve the problem either.
>
>
>Julie Moses

I also had a similar problem, and would be interested in the replies.
Thanks.

-andrew krzywdzinski  (andrew@cs.utk.edu)

saj@chinet.chi.il.us (Stephen Jacobs) (11/29/90)

In article <9267@ncar.ucar.edu> moses@hao.ucar.edu (Julie Moses) writes:
>
>
>    I have an annoying problem in a program I am writing. I open a 
>dialogue box then close the box and immediately afterwards do some 
>VDI drawing (automatically not by hand) onto screen. The problem is
>that the closing of the AES dialogue box does not finish before the VDI
>drawing begins and therefore the VDI drawing is also erased.
>    I have tried putting a delay by evnt_timer and by a long for()
>loop between closing the box and the VDI drawing. In each case the
>closing of the AES dialogue box is also delayed and it still erases
>the VDI drawing. Then I thought it might be my wind_updates but after
>changing them it did not solve the problem either.
>
I don't quite understand this.  If I take the phrase "immediately afterwards"
literally, it could mean that the screen isn't being redrawn before the VDI
drawing is done.  When I started with GEM, I was confused between alert
boxes (which are erased by having GEM save a copy of what used to be on that
part of the screen, and slap it back in when the alert is closed) and dialog
boxes (which have to be redrawn by the application).  Could that be the 
problem?

The working difference is in one case, there's an evnt_multi(), in which 
some event causes the dialog to be used, and when the dialog ends, it falls
through to the VDI stuff (WRONG).  In the other (RIGHT) case, when the 
dialog ends, it sets a flag and recycles through the evnt_multi()-controlled
loop.  Next time through, the flag causes the VDI drawing to happen.  Of 
course, the pending message that a redraw is needed must be handled first.
Am I too far off on what's going on here?  If the code already takes the
correct approach, maybe an evnt_timer(0L) is needed to resynchronize the
event handler before the VDI stuff.  Or maybe there's a need to wait for
a VBL before drawing.  What to try next depends on what's been tried already.

                                    Steve J.

johns@maccs.dcss.mcmaster.ca (Conan the Barbarian) (12/01/90)

In article <1990Nov29.145734.1059@chinet.chi.il.us> saj@chinet.chi.il.us (Stephen Jacobs) writes:
>In article <9267@ncar.ucar.edu> moses@hao.ucar.edu (Julie Moses) writes:
>>
>>[ has a problem with dialog boxes ]
>>
>[ replies mentioning evnt_multi() and evnt_timer() and even VBL ]

	From my experience, the sequence goes like this.

1. Build the dialog box via a RCS-like prog or by hand
2. Center it on the screen with form_center() [ or if you want to, fill in
   the x,y,w,h fields in the structure manually ]
3. Call form_dial( FMD_START, ... ) to reserve some screen space
4. Call form_dial( FMD_GROW, ... ) to draw a growing box [ optional ]
5. Call objc_draw( ) to actually draw it on the screen
6. Call form_do( ) to let the AES handle the dialog.  
7. When you get control back again, call form_dial( FMD_SHRINK, ... )
8. Call form_dial( FMD_FINISH, ... ) to free up screen space

	This last step sends a WM_REDRAW message to the application that
owns the screen space where the dialog box was drawn before.  If it is the
desktop, then it just gets paster over with green (or whatever colour).  If
it is your application, then it is up to you to react on on the redraw
message to redraw your screen space (window etc) before you do other stuff.

	This is more work than I was expecting before I learned a little
of GEM, but I find it inuitive now, and I like programming this way.

	If what I do is in any way incorrect, I'd love to hear about
it.  I don't mind learning at all.  BTW, isn't Lattice C 5 a pretty good
development environment?  What do you use instead of make?


-- 
John Schmitt
johns@maccs.dcss.mcmaster.ca
...!unet!utai!utgpu!maccs!johns

rosenkra@convex.com (William Rosencranz) (12/15/90)

In article <27569349.8114@maccs.dcss.mcmaster.ca> johns@maccs.dcss.mcmaster.ca (Conan the Barbarian) writes:
>>>[ has a problem with dialog boxes ]
>
>	From my experience, the sequence goes like this.
>
>1. Build the dialog box via a RCS-like prog or by hand
>2. Center it on the screen with form_center() [ or if you want to, fill in
>   the x,y,w,h fields in the structure manually ]
>3. Call form_dial( FMD_START, ... ) to reserve some screen space
>4. Call form_dial( FMD_GROW, ... ) to draw a growing box [ optional ]
>5. Call objc_draw( ) to actually draw it on the screen
>6. Call form_do( ) to let the AES handle the dialog.  
>7. When you get control back again, call form_dial( FMD_SHRINK, ... )
>8. Call form_dial( FMD_FINISH, ... ) to free up screen space

this is the "normal" way of doing it, but it does have limitations. i think
the max dialog size is 1/4 the screen as that is all the memory form_dial
deals with. i may be wrong here, though...

there is a better way, at least i use it:

1) as above
2) save ALL the screen to a 32000 byte buffer
3) objc_draw anywhere u like
4) form_do as above, in a loop while (!exit_condition)
5) on exit, restore the entire screen from the buffer

you don't get the (silly?) growbox/shrink box (my beta testers told me to
ax them on some code i produced a while back).

this allows you to draw dialogs as big as the screen. the screen save/redraw
is virtually instantaneous. users have the need for speed. u can also draw
the dialog anywhere (on the screen makes most sense, though i think it is
possible to draw it off screen and clip to the screen - i actually think
i needed to do this once, but don't quote me).

u get the screen location from Physbase or Logbase calls (forget which).
i think vro_cpyfm is what i use to copy the screen, though tight loop
copying longs should work, too. jeez, it's been a while...

-bill
rosenkra@convex.com

--
Bill Rosenkranz            |UUCP: {uunet,texsun}!convex!c1yankee!rosenkra
Convex Computer Corp.      |ARPA: rosenkra%c1yankee@convex.com

glazou@mowitz.pdc.kth.se (Daniel Glazman) (12/17/90)

In article <111330@convex.convex.com> rosenkra@convex.com (William Rosencranz) writes:

>   there is a better way, at least i use it:
>
>   1) as above
>   2) save ALL the screen to a 32000 byte buffer
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   3) objc_draw anywhere u like
>   4) form_do as above, in a loop while (!exit_condition)
>   5) on exit, restore the entire screen from the buffer


	AAAARRRRGGGGGLLLLL !!!! Never do that !!!! NOW, the screen buffer is
32000 bytes long, but if you uses a greater scrn, your routine will only save a
small part of it... Same thing if you use Protos or any other screen soft-
enhancer...

	THIS IS DEFINITELY NOT A GOOD WAY OF PROGRAMMING GRAPHICS !

	With such hints, when the resolution or the hardware changes, the
program does not work any more ! A good development muST work on all ST-models
with any hardware you want... I know this not easy to realize, but it's the
price you have to pay if you want to see the ST as a professional computer !

	Daniel.

--
+---------------------------------------+-------------------------------------+
| Daniel Glazman , TDS                  | glazou@mowitz.pdc.kth.se            |
| The Royal Institute of Technology     |                                     |
| S-100 44 STOCKHOLM, SWEDEN            | glazman@inf.enst.fr                 |
+---------------------------------------+-------------------------------------+
| "Ca fait 25 ans que je me demande pourquoi je suis encore la a me demander  |
|  ce que je fais ici..."                               Anonyme               |
|                                                                             |
| "Gardez votre ville propre : mangez un pigeon !"      Gary Gregory.         |
+-----------------------------------------------------------------------------+

rosenkra@convex.com (William Rosencranz) (12/18/90)

In article <GLAZOU.90Dec17101227@mowitz.pdc.kth.se> glazou@mowitz.pdc.kth.se (Daniel Glazman) writes:
>
>In article <111330@convex.convex.com> rosenkra@convex.com (William Rosencranz) writes:
>
>>   there is a better way, at least i use it:
>>
>>   1) as above
>>   2) save ALL the screen to a 32000 byte buffer
>       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>   3) objc_draw anywhere u like
>>   4) form_do as above, in a loop while (!exit_condition)
>>   5) on exit, restore the entire screen from the buffer
>
>
>	AAAARRRRGGGGGLLLLL !!!! Never do that !!!! NOW, the screen buffer is
>32000 bytes long, but if you uses a greater scrn, your routine will only save a
>small part of it... Same thing if you use Protos or any other screen soft-
>enhancer...

good point, though i plead pressed for time :-)

actually, if u look at all the examples of "good" programming atari put
out  "in the beginning", this was often used. the "correct" way is to first
ascertain the size of the screen (one of the open workstation workout[]
entries, as i recall) then malloc/Malloc the space. maybe i SHOULD have
said "allocate enuf space for the screen and save it to this buffer" rather
than 32k. picky, picky...

>	THIS IS DEFINITELY NOT A GOOD WAY OF PROGRAMMING GRAPHICS !

aw, c'mon, dan. it is not THAT bad. lighten up!

and it is the only way i know of to use dialogs larger than 25% of the
screen. unless u can suggest a better approach? i'd gladly change my
evil ways :-).

>	With such hints, when the resolution or the hardware changes, the
>program does not work any more ! A good development muST work on all ST-models
>with any hardware you want... I know this not easy to realize, but it's the
>price you have to pay if you want to see the ST as a professional computer !

i really do not think this affects most *current* ST owners. and i use line A,
too, so u can get on my case there, too, since i don't think the TT supports
it, though this has been a sanctioned as OK by atari up to now, i believe
(since i got a nice laser-printed S.A.L.A.D. from atari maybe 1.5 yr ago).

-bill
rosenkra@convex.com
--
Bill Rosenkranz            |UUCP: {uunet,texsun}!convex!c1yankee!rosenkra
Convex Computer Corp.      |ARPA: rosenkra%c1yankee@convex.com

gl8f@astsun9.astro.Virginia.EDU (Greg Lindahl) (12/18/90)

In article <111628@convex.convex.com> rosenkra@convex.com (William Rosencranz) writes:

>and it is the only way i know of to use dialogs larger than 25% of the
>screen. unless u can suggest a better approach? i'd gladly change my
>evil ways :-).

You can certainly save everything on the screen without knowing that
it's 32k bytes long. Try finding out how big it is and then blit it
into a buffer and back.

don@milton.u.washington.edu (Don Clifton) (12/18/90)

In article <111628@convex.convex.com> rosenkra@convex.com (William Rosencranz) writes:

>and it is the only way i know of to use dialogs larger than 25% of the
>screen. unless u can suggest a better approach? i'd gladly change my
>evil ways :-).

There is no limit to the size of a dialog. A dialog can fill the entire screen.
This is because the area covered by the dialog is not saved in bitmap form,
but instead is redrawn by GEM and the application that owns the window(s) it 
covers. Only the size of alerts is limited.       

Don Clifton

jeroen@ruuinf.cs.ruu.nl (Jeroen Fokker) (12/18/90)

In article <111330@convex.convex.com> rosenkra@convex.com (William Rosencranz) writes:

> [ to draw a dialog ]
>
> 1. Build the dialog box via a RCS-like prog or by hand
> 2. Center it on the screen with form_center() [ or if you want to, fill in
>    the x,y,w,h fields in the structure manually ]
> 3. Call form_dial( FMD_START, ... ) to reserve some screen space
> 4. Call form_dial( FMD_GROW, ... ) to draw a growing box [ optional ]
> 5. Call objc_draw( ) to actually draw it on the screen
> 6. Call form_do( ) to let the AES handle the dialog.  
> 7. When you get control back again, call form_dial( FMD_SHRINK, ... )
> 8. Call form_dial( FMD_FINISH, ... ) to free up screen space

> this is the "normal" way of doing it, but it does have limitations. i think
> the max dialog size is 1/4 the screen as that is all the memory form_dial
> deals with. i may be wrong here, though...

The call to form_dial(FMD_START...) does not reserve ANY memory.
It just remembers the coordinates of the rectangle that will be disturbed.

The final call to form_dial(FMD_FINISH...) likewise doesn't restore
the screen. Rather, it generates an "event".
This event must be picked up by the program by a call to
evnt_multi. The infamous coordinates are supplied to you by the event,
and it is the responsibility of the program to redraw the
affected screen.

The limitation of 1/4 the screen size applies only to form_alert
dialogues. The background of form_alert dialogues is saved
by the operating system, and therefore no events are generated
by this call.


> there is a better way, at least i use it:
> 1) as above
> 2) save ALL the screen to a 32000 byte buffer
> 3) objc_draw anywhere u like
> 4) form_do as above, in a loop while (!exit_condition)
> 5) on exit, restore the entire screen from the buffer

I prefer this solution, too.
You can even have sub-dialogues by allocationg a second buffer.

>you don't get the (silly?) growbox/shrink box (my beta testers told me to
>ax them on some code i produced a while back).

The choice to grow/shrink box is independent of the way
you save the background.
This feature is achieved by the  form_dial(FMD_GROW/SHRINK) calls,
which can be included or not, regardless of the way you
subsequently restore the screen.

Ideally, the grow/shrink is executed conditionally depending
on a switch that can be set by some preferences-dialogue.
--
Jeroen Fokker                                 |  jeroen@cs.ruu.nl
dept.of Computer Science, Utrecht University  |  tel.+31-30-534129
PObox 80089, 3508TB Utrecht, the Netherlands  |  fax.+31-30-513791

csbrod@medusainformatik.uni-erlangen.de (Claus Brod ) (12/18/90)

rosenkra@convex.com (William Rosencranz) writes:
>>
>>>   there is a better way, at least i use it:
>>>
>>>   1) as above
>>>   2) save ALL the screen to a 32000 byte buffer
>>       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>   3) objc_draw anywhere u like
>>>   4) form_do as above, in a loop while (!exit_condition)
>>>   5) on exit, restore the entire screen from the buffer
>>
>>
>>	THIS IS DEFINITELY NOT A GOOD WAY OF PROGRAMMING GRAPHICS !

>aw, c'mon, dan. it is not THAT bad. lighten up!
Sorry, Bill, Dan is right. It _is_ that bad, and there are easy ways to
do it better.

>and it is the only way i know of to use dialogs larger than 25% of the
>screen. unless u can suggest a better approach? i'd gladly change my
>evil ways :-).

Get the size and position of the dialog displayed. Find out the number
of bitplanes used by calling vq_extnd() and looking at work_out[4]
(I think it is 4, but there I might be wrong.). Malloc sufficient space
for your dialog and vro_cpyfm the background to the allocated memory area.
You don't need any video buffer addresses to do that. Just fill in 0L
as the start address in the screen MFDB; VDI will automatically fill
in all the required MFDB parameters for the screen.

Then objc_draw() your dialog and do any form_do thingies you'd like.
Afterwards, vro_cpyfm() the background to the screen again.

This way, you can have _fast_ dialogs in a GEM-compatible way, and
you won't ever have to bother with new screen resolutions or graphic
cards with video RAM that is not visible in the processor's address
space.

>i really do not think this affects most *current* ST owners. and i use line A,
>too, so u can get on my case there, too, since i don't think the TT supports
>it, though this has been a sanctioned as OK by atari up to now, i believe
>(since i got a nice laser-printed S.A.L.A.D. from atari maybe 1.5 yr ago).

Right, you shouldn't use Line A anymore.

----------------------------------------------------------------------
Claus Brod, Am Felsenkeller 2,			Things. Take. Time.
D-8772 Marktheidenfeld, West Germany		(Piet Hein)
csbrod@medusa.informatik.uni-erlangen.de
----------------------------------------------------------------------

glazou@mowitz.pdc.kth.se (Daniel Glazman) (12/18/90)

in article from csbrod@medusainformatik.uni-erlangen.de (Claus Brod ) Date: 18 Dec 90 11:57:24 GMT, you write:

> [deleted lines]
>
>   >aw, c'mon, dan. it is not THAT bad. lighten up!
>   Sorry, Bill, Dan is right. It _is_ that bad, and there are easy ways to
>   do it better.
>
>   >and it is the only way i know of to use dialogs larger than 25% of the
>   >screen. unless u can suggest a better approach? i'd gladly change my
>   >evil ways :-).
>
>   Get the size and position of the dialog displayed. Find out the number
>   of bitplanes used by calling vq_extnd() and looking at work_out[4]
>   (I think it is 4, but there I might be wrong.). Malloc sufficient space
>   for your dialog and vro_cpyfm the background to the allocated memory area.
>   You don't need any video buffer addresses to do that. Just fill in 0L
>   as the start address in the screen MFDB; VDI will automatically fill
>   in all the required MFDB parameters for the screen.
>
>   Then objc_draw() your dialog and do any form_do thingies you'd like.
>   Afterwards, vro_cpyfm() the background to the screen again.
>
>   This way, you can have _fast_ dialogs in a GEM-compatible way, and
>   you won't ever have to bother with new screen resolutions or graphic
>   cards with video RAM that is not visible in the processor's address
>   space.
>
> [deleted lines]


        Waouuuuuuu... a REAL programmer... Thanks God, it still exists.
You are perfectly right, this is a complete GEM-routine.
        BUT, i am not so happy to see work_out[4]... This last sentence is
not written for you but for Atari. A parameter MUST NEVER BE OBTAINED by
looking in a set of system variables but using inquire's functions like

                vdi_what_is_current_resolution(x,y,w,h,planes)

        And it is possible to compare the use of Line-A stuff to the old Peek &
Poke.
        I hope we will see someday a *nice* Gem...

/Daniel/

--
+---------------------------------------+-------------------------------------+
| Daniel Glazman , TDS                  | glazou@mowitz.pdc.kth.se            |
| The Royal Institute of Technology     |                                     |
| S-100 44 STOCKHOLM, SWEDEN            | glazman@inf.enst.fr                 |
+---------------------------------------+-------------------------------------+
| "Ca fait 25 ans que je me demande pourquoi je suis encore la a me demander  |
|  ce que je fais ici..."                               Anonyme               |
|                                                                             |
| "Gardez votre ville propre : mangez un pigeon !"      Gary Gregory.         |
+-----------------------------------------------------------------------------+

mintha@unixg.ubc.ca (Jim Mintha) (12/19/90)

     I'm writing a program that uses only AES, and not VDI.  When I put up
a dialog box, I save the portion of the screen used with my own copy routines,
and when the dialog finishes, I copy the region back.  Everything works fine
except when the user moves the mouse at a later time, a small square the size
of the mouse appears with the standard desktop background pattern.  Is there
anyway to avoid this, can I change the buffer used to hold what is underneath
the mouse pointer background?

--
-------------------------------------------------------------------------------
Jim Mintha					University of British Columbia
Programming Assistant				Geography Department
e-mail: mintha@geog.ubc.ca			Vancouver, B.C.

rosenkra@convex.com (William Rosencranz) (12/19/90)

In article <1990Dec18.161238.24031@unixg.ubc.ca> mintha@unixg.ubc.ca (Jim Mintha) writes:
>
>     I'm writing a program that uses only AES, and not VDI.  When I put up
>a dialog box, I save the portion of the screen used with my own copy routines,
>and when the dialog finishes, I copy the region back.  Everything works fine
>except when the user moves the mouse at a later time, a small square the size
>of the mouse appears with the standard desktop background pattern.  Is there
>anyway to avoid this, can I change the buffer used to hold what is underneath
>the mouse pointer background?

hide the mouse before u copy the screen (before and after)...

and for the rest of u, quit beating me up about 32k. i don't do this myself
(i even checked my last GEM program). i DO do it correctly. my post was done
in haste, admitedly. ALL code i write that absolutely is not tied to some
OS or other dependency IS portable, or at least i strive for it consciously.
sometimes i hack, but believe me, anything i write which i have the
slightest inkling of selling at some point is done to maximize the potential
user base. things i do on usenet generally do not fall into this category.

yes, yes, by all means write your code to be hardware independent. though
i still believe 99% of STs use 32k screen buffers and i suspect this
will be the case for some time. if u want, we can argue that point, though
i think that is a waste of time.

later...

-bill
rosenkra@convex.com
(real programmers use emacs :-)
--
Bill Rosenkranz            |UUCP: {uunet,texsun}!convex!c1yankee!rosenkra
Convex Computer Corp.      |ARPA: rosenkra%c1yankee@convex.com

jansteen@cwi.nl (Jan van der Steen) (12/19/90)

mintha@unixg.ubc.ca (Jim Mintha) writes:


>     I'm writing a program that uses only AES, and not VDI.  When I put up
>a dialog box, I save the portion of the screen used with my own copy routines,
>and when the dialog finishes, I copy the region back.  Everything works fine
>except when the user moves the mouse at a later time, a small square the size
>of the mouse appears with the standard desktop background pattern.  Is there
>anyway to avoid this, can I change the buffer used to hold what is underneath
>the mouse pointer background?

[mail bounced...]

Did you hide the mouse while redrawing?


	Jan van der Steen
-- 

    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
     Jan van der Steen                 jansteen@cwi.nl
     Centre for Mathematics and Computer Science (CWI)
     Kruislaan 413, 1098 SJ Amsterdam, The Netherlands
--
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
     Jan van der Steen                 jansteen@cwi.nl
     Centre for Mathematics and Computer Science (CWI)
     Kruislaan 413, 1098 SJ Amsterdam, The Netherlands

jeroen@ruuinf.cs.ruu.nl (Jeroen Fokker) (12/19/90)

In article <1990Dec18.161238.24031@unixg.ubc.ca> mintha@unixg.ubc.ca (Jim Mintha) writes:


>     I'm writing a program that uses only AES, and not VDI.  When I put up
>a dialog box, I save the portion of the screen used with my own copy routines,
>and when the dialog finishes, I copy the region back.  Everything works fine
>except when the user moves the mouse at a later time, a small square the size
>of the mouse appears with the standard desktop background pattern.  Is there
>anyway to avoid this, can I change the buffer used to hold what is underneath
>the mouse pointer background?

While copying the screen, you must temporarily switch the mouse off,
like in:

   copyscreen(from,to) long from,to;
   { 
        register long *x;
        register long *y;
        register int i;
        x = (long*) to;
        y = (long*) from;
        i = 8000;
        graf_mouse(M_OFF,0L);;
        do{  *x = *y;
             x++;
             y++;
          }
        while (--i);
        graf_mouse(M_ON,0L);
   }

Note for Swedish flamers: no, I do NOT intend to port
my programs to later versions of the Atari.
It is my decision to sacrifice portability later
for efficiency now. I am aware of the fact that it 
is harmful.
--
Jeroen Fokker                                 |  jeroen@cs.ruu.nl
dept.of Computer Science, Utrecht University  |  tel.+31-30-534129
PObox 80089, 3508TB Utrecht, the Netherlands  |  fax.+31-30-513791

gl8f@astsun.astro.Virginia.EDU (Greg Lindahl) (12/19/90)

In article <4545@ruuinf.cs.ruu.nl> jeroen@ruuinf.cs.ruu.nl (Jeroen Fokker) writes:

>It is my decision to sacrifice portability later
>for efficiency now. I am aware of the fact that it 
>is harmful.

The question is, of course, is how much faster is your hard-wired
routine than using a software-blitter? It's better to fix the slow ROM
code in one place than fix it in all your programs.

mintha@unixg.ubc.ca (Jim Mintha) (12/20/90)

    On a related topic, does anyone who is using gcc know how the asm
command works?  I can't seem to find any information on in it in the
info system in emacs.  I want to do a loop to move the screen up one
line in assembly, but I can't seem to get it to use labels.
I want to do something like this: (somewhat simplified)
  
    asm ("movel %0,a0" :: "a" (scrbase))   /* load a0 screen adr   */
    asm ("movel %0,a0" :: "a" (scrbase2))  /* destination (1 line down) */
    asm ("movew %0,d0" :: "d" (size))      /* number of long words */
    asm ("loop: movel (a1)+,(a0)+")        /* copy the memory      */
    asm ("dbf d0,loop")                    /* --1 and branch       */

My assembly is a little shakey, but I was able to get it to work with
megamax C, but the above GCC version won't work.
Jim (email  mintha@geog.ubc.ca)



--
-------------------------------------------------------------------------------
Jim Mintha					University of British Columbia
Programming Assistant				Geography Department
e-mail: mintha@geog.ubc.ca			Vancouver, B.C.

rehrauer@apollo.HP.COM (Steve Rehrauer) (12/20/90)

gl8f@astsun.astro.Virginia.EDU (Greg Lindahl) writes:
>In article <4545@ruuinf.cs.ruu.nl> jeroen@ruuinf.cs.ruu.nl (Jeroen Fokker) writes:
>>It is my decision to sacrifice portability later
>>for efficiency now. I am aware of the fact that it 
>>is harmful.
>
>The question is, of course, is how much faster is your hard-wired
>routine than using a software-blitter? It's better to fix the slow ROM
>code in one place than fix it in all your programs.

Which (code in TOS ROMs) is out of Jeroen's control.  And, this assumes
that Atari *will* optimize the ROMs in our lifetimes.

(*Have* they significantly sped-up AES or VDI since v1.0 of the ROMs?
I'm genuinely curious, not flaming.  Were the 1.4 ROMs, or the 1.6 ROMs
in STes, tuned in any way for graphics performance?  My impression from
reading this group was not...)

--
"The goons are riding motorcycles, but WE'VE  | (Steve) rehrauer@apollo.hp.com
 got a whole big metal car! This will be like | The Apollo Systems Division of
 stepping on ants..." -- Freelance Police     |       Hewlett-Packard

gl8f@astsun9.astro.Virginia.EDU (Greg Lindahl) (12/20/90)

In article <4eb2849b.20b6d@apollo.HP.COM> rehrauer@apollo.HP.COM (Steve Rehrauer) writes:

>>The question is, of course, is how much faster is your hard-wired
>>routine than using a software-blitter? It's better to fix the slow ROM
>>code in one place than fix it in all your programs.
>
>Which (code in TOS ROMs) is out of Jeroen's control.  And, this assumes
>that Atari *will* optimize the ROMs in our lifetimes.

No, I was talking about commercial programs like TurboST and QuickST,
that replace the ROM routines. They are sometimes not completely
compatible, but it seems that if you're doing "ordinary" GEM programs,
they do pretty well. And you can just program in GEM and not have to
drop into assembler all the time.

>(*Have* they significantly sped-up AES or VDI since v1.0 of the ROMs?

Well, from what people said, removing the line-F traps and putting in
subroutine calls made things faster. But they certainly didn't go in
and rewrite the VDI routines in assembler :-( Fortunately, there are
at least 2 companies happy to exchange your cash for their solution.

Are QuickST and TurboST available in Europe?

harryk@bucsf.bu.edu (Harry Karayiannis) (12/23/90)

In article <1990Dec18.161238.24031@unixg.ubc.ca> mintha@unixg.ubc.ca (Jim Mintha) writes:
>
>     I'm writing a program that uses only AES, and not VDI.  When I put up
>a dialog box, I save the portion of the screen used with my own copy routines,
>and when the dialog finishes, I copy the region back.  Everything works fine
>except when the user moves the mouse at a later time, a small square the size
>of the mouse appears with the standard desktop background pattern.  Is there
>anyway to avoid this, can I change the buffer used to hold what is underneath
>the mouse pointer background?
>
>--
>-------------------------------------------------------------------------------
>Jim Mintha					University of British Columbia
>Programming Assistant				Geography Department
>e-mail: mintha@geog.ubc.ca			Vancouver, B.C.


  The problem should be that you don't hide the mouse before you make any 
changes to the screen. A procedure that should work is the following:

	1. hide the mouse ( AES: graf_mouse(M_OFF, 0L), or
			    VDI: v_hide_c(vdi_handle)
			  )
	2. save the screen-area that the dialog box will cover
	3. show the mouse ( AES: graf_mouse(M_ON, 0L), or
			    VDI: v_show_c(vdi_handle, 0)
			  )
	4. display & manipulate the dialog box
			  ( objc_draw(...) and form_do(..) or evnt_multi(...))
	5. same as 1
	6. restore the screen-area saved in step 2.
	7. same as 3


Hope we helped.......
				Alex Volanis,
				Harry Karayiannis