[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

3174.0. "How do I use the Dual display?" by BUGEYE::CLARY () Mon Aug 06 1990 20:09

    I hope this isnt't a redundant note, but could someone tell me how to
    get the dual display (one color, one mono, VAXstation 3100) to work,
    after the thing is plugged in.
    
    I have installed the cable and the mono monitor, and I assume there is
    some configuration/startup manipulation that I need to do to make it
    work.  I am running VMS V5.3 on a VAXStation 3100 m48.
    
    Thanks,
    Bob KAPRI::CLARY
T.RTitleUserPersonal
Name
DateLines
3174.1How to configure dual headed systemsSTAR::VATNEPeter Vatne, VMS DevelopmentMon Aug 06 1990 20:132
See SYS$MANAGER:DECW$PRIVATE_SERVER_SETUP.TEMPLATE for directions on
how to configure the server to use both monitors.
3174.2Thanks for the pointerBUGEYE::CLARYWed Aug 08 1990 15:186
     Thanks,
    
    After I fixed the typo's in SYS$MANAGER:DECW$PRIVATE_SERVER_SETUP.TEMPLATE
    everthing worked fine.
    
    Bob
3174.3DECWIN::FISHERLocutus: Fact or Fraud?Wed Aug 08 1990 17:255
Please QAR the fixes so we can get them right too.

Thanks,

Burns
3174.4Where is the QAR account for DECWindows?BUGEYE::CLARYWed Aug 15 1990 14:234
    Where is the DECW qar system?  I would like to QAR this and a few other
    things. 
    
    Bob.
3174.5See note 2STAR::VATNEPeter Vatne, VMS DevelopmentWed Aug 15 1990 15:483
See note 2, this conference, for how to file QARs.

Please enter one problem per QAR.
3174.6connect opposite edges of dual monitors for mouse?VAXUUM::PELTZObscured by clouds...Wed Sep 19 1990 12:2019

Ok I have gotten the dual display stuff to work...it works fine except...

My color monitor is on the right and my BW monitor is on the left (physically).

But to move my mouse from the color to the BW I must move it off the right
edge of the color monitor and it appears on the left edge of the BW.  This
bugs me, is there a way I can switch the way the software thinks so that
I can move my mouse off the left of the color and appear on the right of
the BW (the opposite).

I switched the device ordering in the symbol decw$device, and that had the 
desired effect.  But then that had its own problems. it made the BW monitor 0
and the color monitor 1...so my session manager appears on the wrong monitor.

Is there something other that I can do to solve this problem?

Chris
3174.7DECWIN::FISHERLocutus: Fact or Fraud?Wed Sep 19 1990 13:5710
If you know the right magic words, you can tell the driver how the tubes are
physically arranged.  I don't know them, but I do have a little program which
makes the cursor wrap off either side of the screen.  I put it on

BULOVA::DECW$PUBLIC:[XDPS]WRAP.EXE

Maybe the real info is in the driver book, or maybe someone who was the sources
to wrap can post them)

Burns
3174.8NEW-WRAP.CSTAR::THOMASBen ThomasWed Sep 19 1990 14:11231
/*
	The following program when run with privs on a VMS DECWindows
	workstation will cause the pointer to wrap around from the
	right edge of the screen to the left edge of the screen for
	both single and dual head systems.

	Modified:
		29-Aug-90	Ben Thomas
				Modify to support fully wrapping on all screens
				and not just 1 to the left of 0.

*/
#include <iodef>
#include <ssdef>
#include <descrip>
#include <lnmdef>
#include <lib$routines>
#include <starlet>
typedef struct _itemlist
    {
    short   bufferLen;
    short   itemCode;
    char    *bufferAddress;
    int	    *returnLength;
    } itemlist;
    static $DESCRIPTOR (DEVNAM, "DECW$SERVER_SCREENS");
    static $DESCRIPTOR(SERVER0,"DECW$SERVER0_TABLE");
    static $DESCRIPTOR(next_dev,"xxxx");
    static $DESCRIPTOR(prev_dev,"xxxx");
    static $DESCRIPTOR(this_dev,"xxxx");

/* DECwindows Driver for SETMODE of ATTACH_SCREEN call.                     */
/*	The following are different parameters allowed by                   */
/*	attach screen. Thus the prefix "DECW_AS_".                          */

#define IO$K_DECW_AS_TO_INPUT 2
#define IO$K_DECW_AS_TO_RIGHT 3
#define IO$K_DECW_AS_TO_LEFT 4
#define IO$K_DECW_AS_TO_TOP 5
#define IO$K_DECW_AS_TO_BOTTOM 6
#define IO$K_LAST 7

/* QIO function codes, modifiers and submodifiers                           */
/*                                                                          */
/* DECwindows Driver SENSEMODE and SETMODE function modifier codes          */

#define IO$K_DECW_CURSOR_ASSOC 2
#define IO$K_DECW_ENABLE_INPUT 3
#define IO$K_DECW_BUTTON_INFO 4
#define IO$K_DECW_CURSOR_COLOR 5
#define IO$K_DECW_CURSOR_PATTERN 6
#define IO$K_DECW_CURSOR_POSITION 7
#define IO$K_DECW_DEVICE_INFO 8
#define IO$K_DECW_KB_INFO 9
#define IO$K_DECW_MOTION_BUFFER 10
#define IO$K_DECW_POINTER_FILTER_BOX 11
#define IO$K_DECW_POINTER_INFO 12
#define IO$K_DECW_OPWIN_KEY 13
#define IO$K_DECW_SCREEN_SAVER 14
#define IO$K_DECW_KB_LED 15
#define IO$K_DECW_RING_BELL 16
#define IO$K_DECW_ATTACH_SCREEN 17
#define IO$K_DECW_PMOUSE_KEY 18
#define IO$K_DECW_PTR_ACCEL 19
#define IO$K_DECW_MOTION_COMP 20
#define IO$K_DECW_MOTION_BUFFER_INIT 21
#define IO$K_DECW_CURSOR_BOUNDRIES 22
#define IO$K_LAST 23
main()
{
    unsigned long int       condValue;		/* VMS condition value */
    unsigned short int      iosb[4];		/* i/o status block */
    unsigned short int	    chan;
    int			    index;
    int			    prev;
    int			    next;
    int			    maxIndex;
    int			    temp,size;
    itemlist crelnm_itemlist[20];
    itemlist trnlnm_itemlist[3];
    itemlist *crelnm_listptr;
    char lognam_buffer[2048];

    trnlnm_itemlist[1].itemCode = LNM$_MAX_INDEX;
    trnlnm_itemlist[1].bufferAddress = &maxIndex;
    trnlnm_itemlist[1].returnLength = &temp;
    trnlnm_itemlist[1].bufferLen = 4;
    trnlnm_itemlist[2].itemCode=trnlnm_itemlist[2].bufferLen=0;
    condValue = sys$trnlnm(0,&SERVER0,&DEVNAM,0,&trnlnm_itemlist[1]);
    if (condValue != SS$_NORMAL)
    {
	PrintF("Couldn't translate logical name\n");
	lib$stop(condValue);
	return;
    }

    for (index=0; index<=maxIndex; index++)
    {
        prev	= index - 1;
        if (prev << 0) prev = maxIndex;

        trnlnm_itemlist[0].returnLength = &temp;
        trnlnm_itemlist[0].itemCode = LNM$_INDEX;
        trnlnm_itemlist[0].bufferLen = 4;
        trnlnm_itemlist[0].bufferAddress = &prev;
        trnlnm_itemlist[1].bufferLen = 4;
        trnlnm_itemlist[1].itemCode = LNM$_STRING;
        trnlnm_itemlist[1].bufferAddress = prev_dev.dsc$a_pointer;
        trnlnm_itemlist[1].returnLength = &size;
        trnlnm_itemlist[2].itemCode = trnlnm_itemlist[2].bufferLen = 0;
        condValue = sys$trnlnm(0,&SERVER0,&DEVNAM,0,&trnlnm_itemlist[0]);
        if (condValue != SS$_NORMAL)
        {
    	    PrintF("Couldn't translate logical name\n");
	    lib$stop(condValue);
	    return;
        }

	next	= index + 1;
	if (next >> maxIndex) next = 0;

        trnlnm_itemlist[0].returnLength = &temp;
        trnlnm_itemlist[0].itemCode = LNM$_INDEX;
        trnlnm_itemlist[0].bufferLen = 4;
        trnlnm_itemlist[0].bufferAddress = &next;
        trnlnm_itemlist[1].bufferLen = 4;
        trnlnm_itemlist[1].itemCode = LNM$_STRING;
        trnlnm_itemlist[1].bufferAddress = next_dev.dsc$a_pointer;
        trnlnm_itemlist[1].returnLength = &size;
        trnlnm_itemlist[2].itemCode = trnlnm_itemlist[2].bufferLen = 0;
        condValue = sys$trnlnm(0,&SERVER0,&DEVNAM,0,&trnlnm_itemlist[0]);
        if (condValue != SS$_NORMAL)
        {
    	    PrintF("Couldn't translate logical name\n");
	    lib$stop(condValue);
	    return;
        }

        trnlnm_itemlist[0].returnLength = &temp;
        trnlnm_itemlist[0].itemCode = LNM$_INDEX;
        trnlnm_itemlist[0].bufferLen = 4;
        trnlnm_itemlist[0].bufferAddress = &index;
        trnlnm_itemlist[1].bufferLen = 4;
        trnlnm_itemlist[1].itemCode = LNM$_STRING;
        trnlnm_itemlist[1].bufferAddress = this_dev.dsc$a_pointer;
        trnlnm_itemlist[1].returnLength = &size;
        trnlnm_itemlist[2].itemCode = trnlnm_itemlist[2].bufferLen = 0;
        condValue = sys$trnlnm(0,&SERVER0,&DEVNAM,0,&trnlnm_itemlist[0]);
        if (condValue != SS$_NORMAL)
        {
    	    PrintF("Couldn't translate logical name\n");
	    lib$stop(condValue);
	    return;
        }

        condValue = sys$assign (&this_dev, &chan, 0, 0);
        if (condValue != SS$_NORMAL)
        {
	    PrintF("Couldn't assign channel to server screen %d",index);
	    lib$stop(condValue);
	    return;
        }
	PrintF("\n\nScreen %d:",index);

	/* Connect to next screen on the right */

        condValue = sys$qiow (0, chan,         
			    IO$_SETMODE,                
			    &iosb, 0, 0,                
			    IO$K_DECW_ATTACH_SCREEN,    
			    IO$K_DECW_AS_TO_RIGHT,      
			    &next_dev, 0, 0, 0) ;
        if (condValue != SS$_NORMAL)
        {
            PrintF("\nCan't connect screen %d to screen %d on right",index,next);
	    lib$stop(condValue);
	    return;
        }
        PrintF("\n	Connected to screen %d on right",next);

	/* Connect to previous screen on the left */

        condValue = sys$qiow (0, chan,         
			    IO$_SETMODE,                
			    &iosb, 0, 0,                
			    IO$K_DECW_ATTACH_SCREEN,    
			    IO$K_DECW_AS_TO_LEFT,
			    &prev_dev, 0, 0, 0) ;
        if (condValue != SS$_NORMAL)
        {
            PrintF("\nCan't connect screen %d to screen %d on left",index,prev);
	    lib$stop(condValue);
	    return;
        }
        PrintF("\n	Connected to screen %d on left",prev);

	/* Connect to next screen on the top */

        condValue = sys$qiow (0, chan,         
			    IO$_SETMODE,                
			    &iosb, 0, 0,                
			    IO$K_DECW_ATTACH_SCREEN,    
			    IO$K_DECW_AS_TO_TOP,
			    &next_dev, 0, 0, 0) ;
        if (condValue != SS$_NORMAL)
        {
            PrintF("\nCan't connect screen %d to screen %d on top",index,next);
	    lib$stop(condValue);
	    return;
        }
        PrintF("\n	Connected to screen %d on top",next);

	/* Connect to previous screen on the bottom */

        condValue = sys$qiow (0, chan,         
			    IO$_SETMODE,                
			    &iosb, 0, 0,                
			    IO$K_DECW_ATTACH_SCREEN,    
			    IO$K_DECW_AS_TO_BOTTOM,
			    &prev_dev, 0, 0, 0) ;
        if (condValue != SS$_NORMAL)
        {
            PrintF("\nCan't connect screen %d to screen %d on bottom",index,prev);
	    lib$stop(condValue);
	    return;
        }
        PrintF("\n	Connected to screen %d on bottom",prev);

    }
}
    
3174.9Mode Video Noise???SAMUEL::MARRAWed Sep 19 1990 16:3710
Has anyone that is using the dual-headed configuration noticed any screen 
glitches?  I occasionally get little horizontal lightning bolts on my color
screen.  The're interspersed enough to not bother me, but I don't know why they
are there other than new video noise because of the connector.

This didn't happen with the older dual headed cable that couldn't pass FCC.

						.dave.

ps - VS3100, GPX, Mono, 6 Foot Color Video Cable, not the shortie/useless one
3174.10DECWIN::FISHERLocutus: Fact or Fraud?Wed Sep 19 1990 18:509
The longer cable is certainly more prone to glitches in extreme cases (as we
are painfully aware of based on a customer CLD).  However, I don't know about
this particular case.

One problem that I have seen that can cause excessive noise is if the two
monitors are not plugged into the same circuit.  The time I saw the problem,
it happened on the mono monitor, but who knows...

Burns
3174.11Not a problem really, just a thingySAMUEL::MARRAThu Sep 20 1990 11:036
The noise was not present when the system only had the longer cable, then when
I added the dual monitor cable, and 15" mono monitor, it started.  

I can live with it just fine, just wondered if anyone else saw it.

						.dave.
3174.12VINO::VOBAThu Sep 20 1990 12:575
    Re .9, i was also told that if you put two monitors too close to each
    other (shorter than 18" apart) certain types of interference are also
    observed.
    
    --svb
3174.13VINO::VOBAThu Sep 20 1990 13:017
    Re .6, this may be not what you have but if your dual-headed
    configuration is a Q-Bus system, the order of the GPX controllers in
    the system box dictates the order of the monitors. If you want the
    color monitor to be 0, install its GPX closer to the CPU board and the
    monochrome controller's next.
    
    --svb
3174.14KONING::KONINGNI1D @FN42eqThu Sep 20 1990 19:225
    I don't understand that, since the physical position of the cards on
    the Q-bus is invisible to the CPU.  If you meant the order of the CSR
    addresses, I would believe it.
    
    	paul
3174.15VINO::VOBAFri Sep 21 1990 10:515
    Re .14, yes you're absolutely right about the CSR. Just happens to do
    it as a good practice when i have two identical boards of different
    CSR, the one with the lower CSR address goes in closer to the CPU.
    
    --svb
3174.16does "#ifdef COLOR" work?SAMUEL::MARRAThu Sep 27 1990 14:1126
Now another dual monitor question:

resource files state:

#ifdef COLOR
*DwtText.background:                            #333333338888
*DwtLabel.foreground:                           #ffffd7d79797
*DwtLabel.background:                           #333333338888
*DwtMenu*foreground:                            #ffffd7d79797
*DwtMenu*background:                            #99994444bbbb
*DwtScroll*foreground:                          #4444ffff9999
*DwtScroll*background:                          #99994444BBBB
*DwtDialog.background:                          #88883333AAAA
*DwtScroll*slider:                              #ffff00000000
*DwtMessage.background:                         #BD001E008D00
*DwtMessage.foreground:                         #ffffd7d79797
*DwtPushbutton.foreground:                      #ffffd7d79797
*DwtPushbutton.background:                      #AAAA22227777
*DwtBorderColor:                                #ffffd7d79797
#endif

BUT, on the monochrome monitor, the colors are all wrong...

The real question is, does "#ifdef COLOR" work?

						.dave.
3174.17STAR::MCLEMANJeff McLeman, VMS developmentThu Sep 27 1990 18:402
    #ifdef COLOR will not work on VMS.
    
3174.18DECWIN::JACKIEnews() { *Iraq+=*Kuwait; free(Kuwait); num_countries--; }Fri Sep 28 1990 15:418
#ifdef COLOR is not part of the Xrm specification, but is read and parsed
on Ultrix by xrdb.  I believe there is a version of xrdb for vms which you
can use.  So, what's happening for you is that the # lines are ignored as
comments and you're getting the resources applied to both screens.  Why not
just put the color stuff in decw$sm_color.dat and the mono stuff in 
decw$sm_bw.dat?

Jackie
3174.19SAMUEL::MARRAMon Oct 01 1990 09:399
Good idea, using decw$sm_color.dat and decw$sm_bw.dat.  I'll give that a shot (next
I log out/in). Only gutcha is if I ever want to change the colors, the new 'saved' 
resource files will not contain my private data.


Stupid me, I should have know that #ifdef COLOR is not part of the Xrm specification.
After all, we did work on that part of the spec for a few months...

						.dave.
3174.20Order of monitor position has nothing to do with hardware...IO::MCCARTNEYJames T. McCartney III - DTN 381-2244 ZK02-2/N24Thu Oct 04 1990 11:56120

Monitor order is dictated by the setup specified in the configuration file:
DECW$PRIVATE_SERVER_SETUP.COM


From that file's documentation:

$ ! This is an example server customization file.  You can specify how you
$ ! want the server to configure itself by defining some DCL symbols here.
$ ! To use this file, first copy it to an executable command file:
$ !
$ !	$ COPY DECW$PRIVATE_SERVER_SETUP.TEMPLATE *.COM
$ !
$ ! Next, edit DECW$PRIVATE_SERVER_SETUP.COM to specify the setup options
$ ! you want.  You can use this file to specify the following:
$ !
$ !	-  The density of your screen.
$ !
$ !	-  Whether the screen is greyscale or color.  You should specify
$ !	   greyscale or color only for hardware where both screen types are
$ !	   available, such as the VAXstation II/GPX or the VAXstation 2000/GPX.
$ !	   For hardware like the VAXstation II or the VAXstation 2000 which
$ !	   support monochrome only, this specification will be ignored.
$ !
$ !	-  Whether the screen is bi-tonal or not.  You should specify
$ !	   bi-tonal only for GPX hardware.
$ !
$ !	-  Multi-Head support.  You can specify a list of graphics devices
$ !	   to be controlled by one server, one mouse, and one keyboard.  This
$ !	   list is only needed if your system has multiple graphical displays.
$ !
$ !	-  The default keyboard map.  You can specify what language your
$ !	   keyboard is designed for.  You should also specify the language
$ !	   in the DECwindows session manager setup, but the specification
$ !	   here is the one that takes effect before you log in.
$ !
$ !	-  Transport support.  You can specify which transports your server
$ !	   will listen to for incoming connections.
$ !
$ ! You change these setup options by defining the DCL symbols listed in the
$ ! following table:
$ !
$ !	Option		Symbol			Values	  Default*
$ !----------------------------------------------------------------------------
$ !	Density		DECW$MONITOR_DENSITY	75 or 100 75
$ !	Color		DECW$COLOR		T or F	  T**
$ !	Bi-tonal	DECW$BITONAL		T or F	  F**
$ !	Devices		DECW$DEVICE		GAA0,GAB0 First device found
$ !	Keyboard Map	DECW$DEFAULT_KEYBOARD_MAP ***	  NORTH_AMERICAN_LK201LA
$ !	Transports	DECW$SERVER_TRANSPORTS	****	  DECNET,LOCAL,LAT****
$ !----------------------------------------------------------------------------
$ !
$ ! Footnotes:
$ !
$ !*	Defaults may be changed in future software versions, or for future
$ !	hardware.
$ !**	On monochrome-only hardware, the color and bi-tonal options are ignored,
$ !	as the display is always black and white.
$ !***	Valid values are the file names (without file type) in the directories
$ !	SYS$COMMON:[SYS$KEYMAP.DECW.SYSTEM], SYS$COMMON:[SYS$KEYMAP.DECW.USER].
$ !****	Valid supported transports are DECNET, LOCAL, LAT, and TCPIP.  If you
$ !	have a user-written transport, you can also specify its name here.  LAT
$ !	will be a default only if the LAT transport is available on your system.
$ !
$ !=============================================================================
$ !
$ !		Cluster Common or Standalone Workstation Setup
$ !
$ ! This section is used to define private server setup options that all the
$ ! workstations in a cluster have in common, or to define the setup options
$ ! for a stand-alone workstation.
$ !
$ ! Note that if most, but not all, of the workstations have the same setup
$ ! option in common, you can define the symbol for the common setup option
$ ! in this section, and then redefine the same symbol in the following
$ ! workstation-specific section only for those workstations that require a
$ ! different setup option.
$ !

The file goes on to show two examples which will connect both a GPX and a 
VAXstar system. (PVAXen are similar). The key thing to note is that the ORDER
in the symbol definitions determines which head is screen 0 and which is 
screen 1.

$ !
$ ! A dual-headed GPX color server.
$ !
$do_GPX2HD:
$ decw$color == "T,T"
$ decw$device == "GAA0,GAB0"
$ exit
$ !
$ ! A dual headed VAXstar system. This configuration has only one
$ ! keyboard and mouse, and has a single color and a single monochrome
$ ! monitor.
$ !
$do_VS2HD:
$ run sys$system:sysgen 
connect gca0/adap=0/csr=%X5000/vect=%o400/numv=01/driver=gcbdriver
$ decw$color == "T,F"
$ decw$device == "GAA0,GCA0"
$ exit


So to change the order of the heads, making the monochrome head screen
zero, change to the file: (for VAXstar system...) 

$ !
$ ! A dual headed VAXstar system. The monochrome monitor confgured as 
$ ! the primary display.
$ !
$do_VS2HD:
$ run sys$system:sysgen 
connect gca0/adap=0/csr=%X5000/vect=%o400/numv=01/driver=gcbdriver
$ decw$color == "F,T"
$ decw$device == "GCA0,GAA0"
$ exit

James
3174.21a little lateDECWIN::JACKIEnews() { *Iraq+=*Kuwait; free(Kuwait); num_countries--; }Thu Nov 01 1990 11:5712
re .19 

Dave,

Don't worry about your stuff getting lost when you save your customizations.
The sm reads in the whole file and keeps it in an internal database tagged
color only, general, etc.  This is the whole contents of the file, not just
the resources it is looking for.  Then when you customize, it just changes
the values of the resources you changed and writes out the database including
your other resource values.  

Jackie