cetron%utah-ced@utah-cs.arpa.UUCP (01/25/87)
I have a program on my vaxstation gpx which doesn't work and is driving me
crazy....I've included a code fragment (it's FORTRAN, sorry :-) ).
The general idea is to set up a mouse ast, hibernate the process
thereby waiting for the button on the mouse to be pressed, when the ast occurs,
get the mouse position and wake up the 'main program', when awoken, the program
should print the mouse position and then (for debugging) loop back and call
sys$hiber again.
What actually happens is that the process hibernates, the ast comes in,
the ast executes, the return status on the sys$wake is 0 (????) and the
'main' section is not woken up. I have also tried using sys$wake() as well as
the sys$wake(pid) shown below....
the code fragment:
implicit real (a-z)
include 'sys$library:uisentry'
include 'sys$library:uisusrdef'
include '($iodef)'
include '($ssdef)'
include '($syssrvnam)'
external place_sensor
integer*4 vd_id,vcm_id,wd_id,vcm_size,obj_id,ii,kk,index,copy_id
dimension x_s(50),y_s(50),z_s(50),phi_s(50),a_s(50),b_s(50)
common /sensor/ x_s,y_s,z_s,phi_s,a_s,b_s,wd_id,vd_id,n_sensors
[lots of deleted code....]
n_sensor = 0
210 type *,' place sensor number ',n_sensors+1,':'
c set up ast when button status is changed
call uis$set_button_ast(vd_id,wd_id,place_sensor,,keybuf)
c hibernate until ast which will wake us up again
call sys$hiber()
type *,'position is: ',x_s(n_sensors),y_s(n_sensors),'keybuf',keybuf
goto 210 ! and for debugging, wait again.....
subroutine place_sensor
implicit real (a-z)
include 'sys$library:uisentry'
include 'sys$library:uisusrdef'
dimension x_s(50),y_s(50),z_s(50),phi_s(50),a_s(50),b_s(50)
integer*4 wd_id,vd_id,status,pid
integer n_sensors
common /sensor/ x_s,y_s,z_s,phi_s,a_s,b_s,wd_id,vd_id,n_sensors
c get pointer position....
status = uis$get_pointer_position(vd_id,wd_id,retx,rety)
n_sensors = n_sensors + 1
x_s(n_sensors) = retx
y_s(n_sensors) = rety
z_s(n_sensors) = 0.
phi_s(n_sensors) = 0.
a_s(n_sensors) = 10.
b_s(n_sensors) = 10.
pid = 0
status = sys$wake(pid)
type *,status,pid
if (.not.status) then
call lib$signal(%val(status))
endif
return
end
------------------------------------------
sample output:
$ run [.design]analysis
Please enter the fixed geometric parameters:
note that all units are radians or
microns unless explicitly stated....
place sensor number 1:
0 0
%NONAME-W-NOMSG, Message number 00000000
%TRACE-W-TRACEBACK, symbolic stack dump follows
module name routine name line rel PC abs PC
PLACE_SENSOR PLACE_SENSOR 3152 00000083 00044B0F
800987C6 800987C6
80009E5E 80009E5E
ANALYSIS$MAIN ANALYSIS$MAIN 7063 00000A2C 00044A2C
0 0
%NONAME-W-NOMSG, Message number 00000000
%TRACE-W-TRACEBACK, symbolic stack dump follows
module name routine name line rel PC abs PC
PLACE_SENSOR PLACE_SENSOR 3152 00000083 00044B0F
800987C6 800987C6
80009E5E 80009E5E
ANALYSIS$MAIN ANALYSIS$MAIN 7063 00000A2C 00044A2C
0 0
%NONAME-W-NOMSG, Message number 00000000
%TRACE-W-TRACEBACK, symbolic stack dump follows
module name routine name line rel PC abs PC
PLACE_SENSOR PLACE_SENSOR 3152 00000083 00044B0F
800987C6 800987C6
80009E5E 80009E5E
ANALYSIS$MAIN ANALYSIS$MAIN 7063 00000A2C 00044A2C
--------------------------------
as can be seen, the ast code is executing, the pid is coming back 0 (???)
and the status is coming back 0 (????).
What have I missed????? Thanx in advance...
-ed cetron
cetron@utah-cs.arpa
cetron@utahcca.bitnet