kow@gmdzi.UUCP (Oliver [DKowalski) (05/25/87)
Hello to the outside networld,
a friend of mine has a couple of questions, and I have suggested him to post
these to the net, in hope that the ATARI ST gurus will know the answer and
will post it. So, here they are:
NoWait Evnt_Multi
-----------------
Is there a possibility to do a nowait Evnt_Multi call ?
I am looking for a function having the same effect as evnt_multi but is not
waiting for an event. This means, if there is no event pending the function
return with a 'noEvent'-Event. This would be useful in an application which
is looking for a keystroke.If there is none the application does other things
(flashing cursor...).
I made some experiments using the timer. But two difficulties arose:
1. Some keystrokes got lost (especially with short timer intervals)
2. Also the menu handling is interupted. The effect is that menus
are falling down, the evnt_multi terminates and the menus are
still visible. So parts of the screen are not redrawn and
contains trash.
Is there anybody who can help?
Ftruncate
---------
Is there any possibility to truncate a file, create by the Fcreate command ?
This should mean, can I shrink the logical size of a GEMDOS-file ( without
copying it) ?
wind_set and WF_NEWDESK
-----------------------
Using the wind_set command and the WF_NEWDESK attribute, one can change the
default desktop by giving an object to be drawn instead of the standard
desktop. But how can I 'undo' this ?
This problem ocurred when I was writing a shell for a TeX environment. In this
shell there was a Pexec call to other GEM-programs (editors, viewers,...).
When calling WordPlus e.g. some bombs exploded after returning to the my
shell. WordPlus (and other programs) do change the default desktop to a local
object, which vanishes (or better, becomes undefined) when WordPlus
terminates. But the pointer to this object still remains and causes the
described difficulty. My solution was to do a wind_set call by my own
immediately after the Pexec and define an object (a grey box) which looks like
the original desktop.
This works !
But is there a better way ? What does the GEM-Desktop program do to avoid this
problem ?
Obscure Cursor
--------------
How can I make a 'Obscure Cursor' in GEM?
A Obscure Cursor is a cursor, invisible as long as the mouse isn't moved. When
moving the mouse the cursor becomes visible and remains visible until a
special call hides it. Normal program execution should not be influenced.
E.g. WordPlus has this feature implemented.
That's all for the moment. Thanks in advance for the bunch of answers. Just
to mention, the callers address is :
Udo Borkowski
Endenicher Str. 277
D-5300 Bonn 1
West Germany
and my name & address
Oliver Kowalski
usenet : {...,seismo}!mcvax!unido!gmdzi!kowuace0@uhnix2.UUCP (05/30/87)
In article <341@gmdzi.UUCP>, kow@gmdzi.UUCP (Oliver [DKowalski) writes: > > Is there a possibility to do a nowait Evnt_Multi call ? > > I made some experiments using the timer. But two difficulties arose: > > 1. Some keystrokes got lost (especially with short timer intervals) > > 2. Also the menu handling is interupted. The effect is that menus > are falling down, the evnt_multi terminates and the menus are > still visible. So parts of the screen are not redrawn and > contains trash. > > Is there anybody who can help? > You must make sure that the evnt_multi is inside a loop which only terminates when the proper event occurs. Sounds to me like you call evnt_multi once then go on. You should have it in a while loop like . . . while (event) { event=evnt_multi (MU_TIMER|MU_MESAG|MU_whatever,...., lo_time, hi_time, ...); switch (event) { case MU_TIMER: break; case MU_MESAG: do_message(); break case ...: . . . } } in any case, event will at least equal MU_TIMER. The problems you describe about dropping characters doesn't sound related to this, or perhaps it is if you use too long a delay, and the keyboard chip is overrun with data. But a time of 0 or 1 in lo_time *does* work for sampling. > > How can I make a 'Obscure Cursor' in GEM? > > A Obscure Cursor is a cursor, invisible as long as the mouse isn't moved. When > moving the mouse the cursor becomes visible and remains visible until a > special call hides it. Normal program execution should not be influenced. > > E.g. WordPlus has this feature implemented. > Again, you can use the evnt_multi call, but you need to sample the present x and y of the mouse before calling it, as well as hiding the mouse, perhaps: while (event) { vq_mouse(handle, &button, &mx, &my); if (Cconis()) /* a character is waiting from the console */ graf_mouse(M_OFF,0); /* hide mouse; remembers level of calls, beware */ /* the five parameters 1,mx,my,1,1, are the ev_mm1flags,ev_mm1x,ev_mmy, etc parameters needed for detection of a mouse event, in this case exitting a certain rectangle */ event = evnt_multi(MU_M1|MU_TIMER|MU_MESAG|...,...,1,mx,my,1,1,...); switch (event) { case MU_M1: graf_mouse(M_ON,0); break; ... } /* switch */ } /* while */ Maybe this will help. - Mike Vederman > > That's all for the moment. Thanks in advance for the bunch of answers. Just > to mention, the callers address is : > > Udo Borkowski > Endenicher Str. 277 > D-5300 Bonn 1 > West Germany > > and my name & address > > Oliver Kowalski > usenet : {...,seismo}!mcvax!unido!gmdzi!kow -- >>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<< + And to think, I don't get paid for this! + >>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<