[comp.sys.sgi] problems with RECTRE and other little things

trohling@uceng.UC.EDU (tom rohling) (11/30/89)

After all the recent discussion of video thangs, it reminds me of a problem
that we have yet to resolve.  It goes like this:
 
   In order to make things easier (which is a subjective opinion) we had
written our own routine to 'compress' a full 1280x1024 image down to TV size
of (about)  640x484.  To do this we used the RECTRE subroutine to read the
colormap info for the whole screen into an array.  We then determined what
the RGB values were and went about our averaging to reduce it down to TV
size and then dumped it to a file for transfer to the Abekus A60.  All was
fine and dandy until we had the 70GT upgraded to a 120GTX.  Now, the results
of RECTRE turn out really(!!) strange (yes, I've recompiled it numerous
times).  It seems that it now only reads in about a quarter of the screen
(from 0,0 to about ~600,600 in pixels) and of that which it does read in,
there are random lines where it is missing colormap information.  For
example, if I cleared the screen as say green, call RECTRE, then look at the
array that it read the map info into, only the pixels for the lower left
half of the screen show a colormap number of 2, the rest are all zero
(black) with random horizontal lines also containing zero's.
   Here's what the program looks like: (I haven't totally learned C yet so
its in fortran)

      INTEGER*2 SGIS(0:1310720)
      INTEGER*4 TEST
         .
         .
       graphics inits
         .
         .
      TEST=RECTRE(1,1,1274,1022,SGIS)
      WRITE(6,*)TEST
      WRITE(8,*)SGIS
         .
         .
       averaging stuff
         .
         .
      END

   The value of TEST should be the number of pixels that were read by
RECTRE, this also used to work.

   This had worked beautifully before the upgrade but now it doesn't.  In
the upgrade, the OS release went from 3.1B to 3.1D, with the machine going
from a single processor to a two processor unit.  I couldn't imagine a
rather minor OS change affecting things this much, going to two processors
seems like a more probable cause, but anything can happen.

***************************************
HELP!HELP!HELP!HELP!HELP! big projects are approaching their deadlines!!
***************************************

   While I'm on the subject of idiosyncrasies, every once and a while,
I have the need to run a few graphics programs in sequential order where I
don't have to do any interacting with them as they run (like averaging
several images from separate programs).  So its real handy to put them in a
script and execute them in order (like during lunch).  The problem is is
that as soon as the first program initializes the graphics (like opening a
window) the unix prompt is returned.  Well, right away the next program
starts to run.  But wait!  The first program isn't even half way completed
yet.  This continues to the point where the cpu('s) are so overloaded that
virtually nothing happens.  (By the way, if one processor is
displaying graphics images on the screen, and the other processor tries to
run a graphics program also, you never see its results anywhere.  Is the
second one floating in la-la land somewhere or what?)  The problem is is
that when the graphics mode kicks in, the system will start to accept input
from std. input.  *** Is there a way to prevent this????  i.e. wait until
one graphics program is completely finished until the system returns to
accepting input???
   This is more annoying than it is a problem but nonetheless it'd be nice
if it can be fixed.

Any help on any of the above problems from the audience out there would be a
great help.


                     Tom Rohling
                     CFD dude
                     University of Cincinnati

==========================================================================
                     'No more heros,
                      No more lights.
                      No more darkness,
                      No more fights.'
                                    - deep dark poetry attempt by myself
==========================================================================

thant@horus.sgi.com (Thant Tessman) (12/01/89)

In article <2994@uceng.UC.EDU>, trohling@uceng.UC.EDU (tom rohling) writes:

[first problem deleted...  I try to ignore FORTRAN with the hope that it
will go away]

>    While I'm on the subject of idiosyncrasies, 

[description of second problem shortened]

>  The problem is is
> that when the graphics mode kicks in, the system will start to accept input
> from std. input.  *** Is there a way to prevent this????  i.e. wait until
> one graphics program is completely finished until the system returns to
> accepting input???

Precede your call to winopen with a call to foreground.
It makes it do exactly what you want.

> 
> Any help on any of the above problems from the audience out there would be a
> great help.
> 
> 
>                      Tom Rohling
>                      CFD dude
>                      University of Cincinnati
> 

thant

There are 336 dimples on the standard golf ball.

mcqueen@acf4.NYU.EDU (David M. McQueen) (12/04/89)

With regard to your problem when running several graphics programs in
sequence:

by default, the program runs as a background job after graphics initialization.
To prevent this from happening, place a call to foregr (in FORTRAN, or
foreground, in C) before calling winopen. This will keep each job in the
foreground until completion, when the next job will start up.

Dave McQueen
Courant Institute of Mathematical Sciences, New York University
mcqueen@acf4.nyu.edu