[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference bulova::decw_jan-89_to_nov-90

Title:DECWINDOWS 26-JAN-89 to 29-NOV-90
Notice:See 1639.0 for VMS V5.3 kit; 2043.0 for 5.4 IFT kit
Moderator:STAR::VATNE
Created:Mon Oct 30 1989
Last Modified:Mon Dec 31 1990
Last Successful Update:Fri Jun 06 1997
Number of topics:3726
Total number of notes:19516

3664.0. "SMG, & debugger" by TAV02::DORON (Doing my BEST !!!) Thu Nov 15 1990 01:18

Hi,

 I am getting a strange behaviuor while running and SMG program with DECwindows
debugger. I have enclosed a simple fortran SMG program that can reproduce the
behaviuor in the following way:

 When running ($R/debug SMG) it works fine. When doing it in synchronous
SUBPROCESS, ($Spawn R/debug SMG) it also works O.K.! But when issuing an
asynchronous subporcess command ($Spawn/Nowait R/debug SMG), the process hungs
(and I could not say if it's the program or the debugger) when the
SMG$CREATE_VIRTUAL_KEYBOARD is executed. The problem occurd on VS3100 running
VMS 5.3-1. 

		Any help will be appreciated,
					*-Doron-*
Enclosed:

       program scroll_display

C This program puts up a large virtual display.  Since the pasteboard
C can only contain a portion of the display at any one time, it is
C necessary to scroll the display to see all parts of it.  To do this
C use the arrow keys.

       implicit integer (a-z)

C This output_array is created to load the virtual display.
       character*5  output_array(52,26)
       character*130 out_line
       include '($smgdef)'

       do i=1,52
          do j=1,26
             output_array(i,j)(1:1) = char(64+i)
             output_array(i,j)(2:2) = char(64+i)
             output_array(i,j)(3:3) = char(64+j)
             output_array(i,j)(4:4) = char(64+j)
             output_array(i,j)(5:5) = ' '
          end do
       end do

       status = smg$create_pasteboard( pid,,,)
       if (.not. status) call lib$stop(%val(status))

       status = smg$create_virtual_display( 52, 130, vdisp, , , )
       if (.not. status) call lib$stop(%val(status))

       do i=1,52

C Use an internal write to load the character variable used to write to
C the virtual display.
          write (out_line,10) (output_array(i,j),j=1,26)
10        format (26a)

          status = smg$put_line(vdisp,out_line,,,,,,)
          if (.not.status) call lib$stop(%val(status))
       end do

       status = smg$paste_virtual_display(vdisp, pid, 1, 1)
       if (.not. status) call lib$stop(%val(status))

       status = smg$create_virtual_keyboard(keyid,,,,)
       if (.not.status) call lib$stop(%val(status))

       line = 1
       column = 1

100    status = smg$set_cursor_abs(vdisp, line, column)
       if (.not.status) call lib$stop(%val(status))

C Since no prompt string is specified, the display id is left blank.
C Enter an upper case Q (for quit) to terminate the program.

       status = smg$read_keystroke(keyid,term_code,,,,,)
       if (.not.status) call lib$stop(%val(status))

       if (term_code .eq. smg$k_trm_up) then
          if (line .gt. 1) then
             line = line - 1
          else
             status = smg$ring_bell(vdisp,1)
             if (.not. status) call lib$stop(%val(status))
          endif
       elseif (term_code .eq. smg$k_trm_down) then
          if (line .lt. 52 ) then
             line = line + 1
          else
             status = smg$ring_bell(vdisp,1)
             if (.not. status) call lib$stop(%val(status))
          endif
       elseif (term_code .eq. smg$k_trm_left) then
          if (column .gt. 1) then
             column = column - 5
          else
             status = smg$ring_bell(vdisp,1)
             if (.not. status) call lib$stop(%val(status))
          endif
       elseif (term_code .eq. smg$k_trm_right) then
          if (column .lt. 126) then
             column = column + 5
          else
             status = smg$ring_bell(vdisp,1)
             if (.not. status) call lib$stop(%val(status))
          endif
       elseif (term_code .eq. smg$k_trm_uppercase_q) then
          goto 999
       endif

       status = smg$move_virtual_display(vdisp, pid, 2-line, 2-column, )
       if (.not.status) call lib$stop(%val(status))

       goto 100
999    end

T.RTitleUserPersonal
Name
DateLines
3664.1Seems fixed in 5.4TLE::ZANZERKIAWed Nov 21 1990 11:418
    I just tried your program on VMS 5.4 debugger. It seems to run fine so
    wait for the next release.
    
    Do send a QAR if you still have a problem after 5.4
    
    thanks
    Robert
    (Debug developer)