home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / server / ddx / ibm / common / ibmInit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-21  |  16.7 KB  |  575 lines

  1. /*
  2.  * $XConsortium: ibmInit.c,v 1.4 91/09/09 13:23:00 rws Exp $
  3.  *
  4.  * Copyright IBM Corporation 1987,1988,1989,1990,1991
  5.  *
  6.  * All Rights Reserved
  7.  *
  8.  * License to use, copy, modify, and distribute this software and its
  9.  * documentation for any purpose and without fee is hereby granted,
  10.  * provided that the above copyright notice appear in all copies and that
  11.  * both that copyright notice and this permission notice appear in
  12.  * supporting documentation, and that the name of IBM not be
  13.  * used in advertising or publicity pertaining to distribution of the
  14.  * software without specific, written prior permission.
  15.  *
  16.  * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  17.  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND 
  18.  * NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL
  19.  * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  20.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  21.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  22.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  23.  * SOFTWARE.
  24.  *
  25. */
  26.  
  27. #include "X.h"
  28. #include "servermd.h"
  29. #include "site.h"
  30. #include "misc.h"
  31. #include "miscstruct.h"
  32. #include "input.h"
  33. #include "opaque.h"
  34. #include "scrnintstr.h"
  35. #include "cursorstr.h"
  36.  
  37. #include "ibmScreen.h"
  38.  
  39. #include "ibmKeybd.h"
  40. #include "ibmMouse.h"
  41.  
  42. #include "OSio.h"
  43.  
  44. #include "hftUtils.h"
  45.  
  46. #include "ibmTrace.h"
  47.  
  48. #define MOTION_BUFFER_SIZE 0
  49. #define NUMDEVICES 2
  50.  
  51. static  int     ibmOpenAllScreens=      FALSE;
  52. static  int     ibmScreensWanted=       0;
  53. extern  char    *ibmBlackPixelText ;
  54. extern  char    *ibmWhitePixelText ;
  55. Bool    ibmDontZap = FALSE;
  56. Bool    ibmDisableLock= FALSE;
  57.  
  58. static  Bool
  59. ibmFormatExists(screenInfo,newFmt)
  60.     ScreenInfo          *screenInfo;
  61.     PixmapFormatPtr     newFmt;
  62. {
  63.     PixmapFormatPtr     oldFmt;
  64.     int                 ndx;
  65.  
  66.     TRACE(("ibmFormatExisits(screenInfo= 0x%x,newFmt=0x%x(%d,%d,%d))\n",
  67.                                  screenInfo,newFmt,newFmt->depth,
  68.                                  newFmt->bitsPerPixel,newFmt->scanlinePad));
  69.     for (ndx=0;ndx<screenInfo->numPixmapFormats;ndx++) {
  70.     oldFmt= &screenInfo->formats[ndx];
  71.     if ((newFmt->depth==oldFmt->depth)&&
  72.         (newFmt->bitsPerPixel==oldFmt->bitsPerPixel)&&
  73.         (newFmt->scanlinePad==oldFmt->scanlinePad)) {
  74.             return TRUE;
  75.     }
  76.     }
  77.     return FALSE;
  78. }
  79.  
  80. /***==================================================================***/
  81. /*
  82.     This function will probe for the type of adapter specified by
  83.     "scr" (which is one of ibmPossibleScreens) and adapter number
  84.     "dev_number".  If it exists it will be made active and added to
  85.     the list of screens.  If x and y are negative, a location for
  86.     wrapping will be found automatically.
  87. */
  88. /* returns true if successful */
  89. static  int
  90. ibmProbeAndAdd(scr, dev_number, x, y)
  91.     /* describes one adapter (as in "skyway") */
  92.     ibmPerScreenInfo  *scr;
  93.     /* tells wich of the type (as in "skyway1", "skyway2" */
  94.     int  dev_number;
  95.     /* if the x, y are -1 then use (ibmNumScreens,0) */
  96.     int  x, y;
  97. {
  98.     unsigned  tmpDeviceID;
  99.     int  tmpScreenFD;
  100.     TRACE(("ibmProbeAndAdd(scr, dev_number=%d)\n", dev_number));
  101.  
  102.     if( ibmNumScreens >= MAXSCREENS ){
  103.     TRACE(("MAXSCREENS is %d and there are already %d screens open\n", MAXSCREENS, ibmNumScreens));
  104.     return FALSE;
  105.     }
  106.  
  107.     if( x < 0 )
  108.     x = ibmNumScreens;
  109.     if( y < 0 )
  110.     y = 0;
  111.  
  112.     if ( ( tmpScreenFD = (* scr->ibm_ProbeFunc)(scr->ibm_DeviceID,dev_number) ) >= 0 ) {
  113.     tmpDeviceID = hftQueryDeviceID(tmpScreenFD);
  114.     if( (tmpDeviceID & HFT_DEVID_MASK ) != scr->ibm_DeviceID ){
  115.         TRACE(("ibmProbeAndAdd()  we didn't get what we asked for\n"));
  116.         TRACE(("wanted=0x%x  got=0x%x\n", scr->ibm_DeviceID, tmpDeviceID));
  117.         close(tmpScreenFD);
  118.         return FALSE ;
  119.     }
  120.     aixPutScreenAt(ibmNumScreens,x,y);
  121.     ibmScreens[ibmNumScreens] = (ibmPerScreenInfo *)Xalloc( sizeof(ibmPerScreenInfo) );
  122.     *(ibmScreens[ibmNumScreens]) = *scr;
  123.     ibmScreens[ibmNumScreens]->ibm_DeviceID = tmpDeviceID;
  124.     ibmScreens[ibmNumScreens]->ibm_ScreenFD = tmpScreenFD;
  125.     ibmNumScreens++;
  126.     return TRUE ;
  127.     }
  128.     return FALSE ;
  129. }
  130.  
  131.  
  132. /*
  133.     This function will probe for the specific adapter specified by
  134.     "dev_id".  If it exists it will be made active and added to the
  135.     list of screens.  If x and y are negative, a location for
  136.     wrapping will be found automatically.
  137. */
  138. /* returns true if successful */
  139. int
  140. ibmFindProbeAndAdd(dev_id, x, y)
  141.     unsigned  dev_id;
  142.     /* if the x, y are -1 then use (ibmNumScreens,0) */
  143.     int  x, y;
  144. {
  145.     ibmPerScreenInfo **scrPtr = ibmPossibleScreens ;
  146.     ibmPerScreenInfo *scr ;
  147.  
  148.     TRACE(("ibmFindProbeAndAdd(dev_id, x, y)\n"));
  149.     while ( ( scr = *scrPtr++ ) && scr->ibm_ScreenFlag ) {
  150.     if( scr->ibm_DeviceID == (dev_id & HFT_DEVID_MASK) ){
  151.         return( ibmProbeAndAdd(scr, (dev_id & HFT_DEVNUM_MASK), x, y) );
  152.     }
  153.     }
  154.     return FALSE;
  155. }
  156.  
  157.  
  158. /*
  159.     This function will probe for the specific adapter specified
  160.     by "number".  "number" is the value you get from running the
  161.     "lsdisp" command.  If it exists it will be made active and
  162.     added to the list of screens.  If x and y are negative, a
  163.     location for wrapping will be found automatically.
  164. */
  165. /* returns true if successful */
  166. static  int
  167. ibmNumberProbeAndAdd(number, x, y)
  168.     unsigned  number;
  169.     /* if the x, y are -1 then use (ibmNumScreens,0) */
  170.     int  x, y;
  171. {
  172.     hftDeviceID  *pDevices;
  173.     int  nDevices;
  174.     unsigned  dev_id;
  175.  
  176.     TRACE(("ibmNumberProbeAndAdd(number, x, y)\n"));
  177.  
  178.     /* ouside we use 1 to n */
  179.     /* inside we use 0 to n-1 */
  180.     number--;
  181.     if( number < 0 )
  182.     return(FALSE);
  183.  
  184.     /* if can't find any devices */
  185.     if( (nDevices = hftQueryDeviceIDs(&pDevices)) <= 0 )
  186.     return(FALSE);
  187.  
  188.     /* if bad device number */
  189.     if( number >= nDevices )
  190.     return(FALSE);
  191.  
  192.     dev_id = pDevices[number].hftDevID;
  193.  
  194.     TRACE(("device number %d is 0x%x\n", number, dev_id));
  195.     return( ibmFindProbeAndAdd(dev_id, x, y) );
  196. }
  197.  
  198. /***==================================================================***/
  199.  
  200. static  int
  201. ibmFindSomeScreens()
  202. {
  203. register ibmPerScreenInfo **scrPtr = ibmPossibleScreens ;
  204. register ibmPerScreenInfo *scr ;
  205.  
  206.     TRACE(("ibmFindSomeScreens()\n"));
  207.     osGetDefaultScreens();
  208.     if ( !ibmNumScreens ) {
  209.     while ( ( scr = *scrPtr++ ) && scr->ibm_ScreenFlag ) {
  210.             /* look for the first adapter of this */
  211.             /* type, don't care what wrap location */
  212.         if( ibmProbeAndAdd(scr, 0, -1,-1) ){
  213.             if (!ibmOpenAllScreens)
  214.                 return TRUE ;
  215.         }
  216.     }
  217.     }
  218.     else
  219.     return TRUE ;
  220.  
  221.     if ((ibmOpenAllScreens)&&(ibmNumScreens>0))
  222.     return TRUE ;
  223.     return FALSE ;
  224. }
  225.  
  226. /***==================================================================***/
  227.  
  228. static  void
  229. ibmAddScreens(screenInfo, argc, argv)
  230.     ScreenInfo          *screenInfo;
  231.     int                  argc;
  232.     char                *argv[];
  233. {
  234.     PixmapFormatPtr     newFmt,oldFmt;
  235.     int                  ndx,fmtNdx;
  236.     static int           been_here;
  237.  
  238.     TRACE(("ibmAddScreens(screenInfo= 0x%x, argc= %d, argv]=x%x)\n",
  239.                                                     screenInfo,argc,argv));
  240.  
  241.     for (ndx=0;ndx<ibmNumScreens;ndx++) {
  242.     if (!been_here) {
  243.         if (ibmScreens[ndx]->ibm_Wanted) {
  244.             ErrorF("Multiple requests for screen '%s'  -- ignored\n",
  245.                                                     ibmScreenFlag(ndx));
  246.             continue;
  247.         }
  248.         ibmScreens[ndx]->ibm_Wanted= TRUE;
  249.     }
  250.  
  251.     for (fmtNdx=0;fmtNdx<ibmNumFormats(ndx);fmtNdx++) {
  252.         if (!ibmFormatExists(screenInfo,&ibmScreenFormats(ndx)[fmtNdx])) {
  253.             newFmt= &ibmScreenFormats(ndx)[fmtNdx];
  254.             oldFmt= &screenInfo->formats[screenInfo->numPixmapFormats++];
  255.             oldFmt->depth=          newFmt->depth;
  256.             oldFmt->bitsPerPixel=   newFmt->bitsPerPixel;
  257.             oldFmt->scanlinePad=    newFmt->scanlinePad;
  258.             if (screenInfo->numPixmapFormats>MAXFORMATS) {
  259.                 ErrorF("Too many formats! Exiting\n");
  260.                 exit(1);
  261.             }
  262.         }
  263.     }
  264.     AddScreen(ibmScreenInit(ndx),argc,argv);
  265.     ibmSetScreenState(ndx,SCREEN_ACTIVE);
  266.     }
  267.     been_here= TRUE;
  268. }
  269.  
  270. /***==================================================================***/
  271.  
  272. static DevicePtr keyboard;
  273. static DevicePtr mouse;
  274.  
  275. void
  276. InitInput()
  277. {
  278. extern  DevicePtr       OS_MouseProc(),OS_KeybdProc();
  279.  
  280.     TRACE(("InitInput()\n"));
  281.  
  282.     OS_InitInput();
  283.     mouse=      AddInputDevice(OS_MouseProc,    TRUE);
  284.     keyboard=   AddInputDevice(OS_KeybdProc,    TRUE);
  285.  
  286.     RegisterPointerDevice( mouse, MOTION_BUFFER_SIZE );
  287.     RegisterKeyboardDevice( keyboard );
  288. #ifdef SOFTWARE_CURSOR
  289.     miRegisterPointerDevice(ibmScreens[ibmCurrentScreen]->ibm_Screen, mouse);
  290. #endif
  291. #ifdef AIXEXTENSIONS
  292.     AddandRegisterAIXInputStuff();
  293. #endif
  294.     return ;
  295. }
  296.  
  297. /***==================================================================***/
  298.  
  299. ibmPerScreenInfo        *(*ibmAdditionalScreenArg)();
  300.  
  301. int
  302. ddxProcessArgument(argc,argv,i)
  303. int     argc;
  304. char    *argv[];
  305. int     i;
  306. {
  307. int                     skip= 1;
  308.  
  309. extern  char *ibmArenaFile;
  310. extern  int ibmQuietFlag ;
  311.  
  312.     TRACE(("ddxProcessArgument( argc= %d, argv= 0x%x, i=%d )\n",argc,argv,i));
  313.  
  314. #ifdef OS_ProcessArgument
  315.     if (skip=OS_ProcessArgument(argc,argv,i))           return(skip);
  316.     else                                                skip= 1;
  317. #endif
  318.     if ( strcmp( argv[i], "-pckeys" ) == 0 )       ibmUsePCKeys= 1;
  319.     else if ( strcmp( argv[i], "-quiet" ) == 0 )        ibmQuietFlag = 1;
  320.     else if ( strcmp( argv[i], "-rtkeys" ) == 0 )       ibmUsePCKeys= 0;
  321.     else if ( strcmp( argv[i], "-verbose" ) == 0 )      ibmQuietFlag = 0;
  322.     else if ( strcmp( argv[i], "-wrapx"  ) == 0 )       ibmXWrapScreen= TRUE;
  323.     else if ( strcmp( argv[i], "-wrapy"  ) == 0 )       ibmYWrapScreen= TRUE;
  324.     else if ( strcmp( argv[i], "-wrap"  ) == 0 )
  325.                                     ibmXWrapScreen= ibmYWrapScreen= TRUE;
  326. #ifdef TRACE_X
  327.     else if ( strcmp( argv[i], "-trace"  ) == 0 )       ibmTrace= TRUE;
  328.     else if ( strcmp( argv[i], "-tracesync"  ) == 0 )   ibmTraceSync= TRUE;
  329. #endif
  330.     else if ( strcmp( argv[i], "-nohdwr" ) == 0 )       ibmUseHardware= FALSE;
  331. #ifdef IBM_SPECIAL_MALLOC
  332.     else if ( strcmp( argv[i], "-malloc" ) == 0 )       {
  333.     int lvl= atoi(argv[++i]);
  334.     SetMallocCheckLevel(lvl);
  335.     ErrorF("allocator check level set to %d...\n",lvl);
  336.     skip= 2;
  337.     }
  338.     else if ( strcmp( argv[i], "-plumber" ) == 0 ) {
  339.     ibmSetupPlumber(argv[++i]);
  340.     skip= 2;
  341.     }
  342. #endif IBM_SPECIAL_MALLOC
  343.     else if ( strcmp( argv[i], "-T") == 0)
  344.     ibmDontZap = TRUE;
  345.     else if ( strcmp( argv[i], "-wp") == 0)
  346.     {
  347.     ibmWhitePixelText = argv[++i];
  348.     skip= 2;
  349.     }
  350.     else if ( strcmp( argv[i], "-bp") == 0)
  351.     {
  352.     ibmBlackPixelText = argv[++i];
  353.     skip= 2;
  354.     }
  355.     else if ( strcmp( argv[i], "-all" ) == 0 )
  356.     ibmOpenAllScreens= TRUE;
  357.     else if ( strncmp( argv[i], "-P", 2) == 0)
  358.     {
  359.         char  *sarg;
  360.         int  x, y;
  361.  
  362.         skip = 0;
  363.         y = argv[i][2] - '0';       /* row */
  364.         x = argv[i][3] - '0';       /* column */
  365.         sarg = argv[++i];
  366.         if( sarg && (x>=0) && x<=9 && y>=0 && y<=9 ){
  367.             register ibmPerScreenInfo **ppScr = ibmPossibleScreens;
  368.             register ibmPerScreenInfo  *pScr;
  369.             int found= FALSE;
  370.             int  argl, flagl, anumber;
  371.  
  372.             anumber = 0;
  373.             argl = strlen(sarg);
  374.             while ( ( pScr = *ppScr++ ) && pScr->ibm_ScreenFlag && !found ) {
  375.                     /* offset past the '-' in ibm_ScreenFlag */
  376.                 flagl = strlen(pScr->ibm_ScreenFlag)-1;
  377.                 if (!strncmp(sarg,&(pScr->ibm_ScreenFlag[1]),flagl)) {
  378.                     if( flagl < argl ){
  379.                         anumber = atoi( &(sarg[flagl]) );
  380.  
  381.                         /* outside the adapters are numbered starting */
  382.                         /* from 1, inside they are numbered starting */
  383.                         /* from 0 */
  384.                         anumber--;
  385.                         /* outside the adapters are numbered starting */
  386.                         /* from 1, inside they are numbered starting */
  387.                         /* from 0 */
  388.  
  389.                         if( anumber < 0 )
  390.                             anumber = 0;
  391.                     }
  392.                     else{
  393.                         anumber = 0;
  394.                     }
  395.                     skip= 2;
  396.                     ibmScreensWanted++;
  397.                     if( ibmProbeAndAdd(pScr, anumber, x, y) ){
  398.                         ;
  399.                     }
  400.                     else  {
  401.                         ErrorF("%s not available\n",sarg);
  402.                     }
  403.                     found= TRUE;
  404.                 }
  405.             }
  406.  
  407.             if ((!found)&&(ibmAdditionalScreenArg)) {
  408.                 pScr= (*ibmAdditionalScreenArg)(sarg);
  409.                 if (pScr) {
  410.  
  411.                     /* have to find some way to set this for */
  412.                     /* additional screens */
  413.                     anumber = 0;
  414.                     /* have to find some way to set this for */
  415.                     /* additional screens */
  416.  
  417.                     skip= 2;
  418.                     ibmScreensWanted++;
  419.                     if( ibmProbeAndAdd(pScr, anumber, x, y) ){
  420.                         found= TRUE;
  421.                     }
  422.                     else {
  423.                         ErrorF("%s not available\n",sarg);
  424.                     }
  425.                 }
  426.             }
  427.  
  428.             if (!found) {
  429.                 int  dnumber;
  430.  
  431.                 skip= 2;
  432.                 ibmScreensWanted++;
  433.                 dnumber = atoi( sarg );
  434.                 if( ibmNumberProbeAndAdd(dnumber, x, y) ){
  435.                     found = TRUE;
  436.                 }
  437.                 else{
  438.                     ErrorF("%s not available\n",sarg);
  439.                 }
  440.             }
  441.         }
  442.     }
  443.     else {
  444.     register ibmPerScreenInfo **ppScr = ibmPossibleScreens;
  445.     register ibmPerScreenInfo  *pScr;
  446.     int found= FALSE;
  447.     /* argument length, ibm_ScreenFlag length, */
  448.     /* adapter number */
  449.     int  argl, flagl, anumber;
  450.  
  451.     anumber = 0;
  452.     argl = strlen(argv[i]);
  453.     skip= 0;
  454.     while ( ( pScr = *ppScr++ ) && pScr->ibm_ScreenFlag && !found ) {
  455.         flagl = strlen(pScr->ibm_ScreenFlag);
  456.         if (!strncmp(argv[i],pScr->ibm_ScreenFlag,flagl)) {
  457.             if( flagl < argl ){
  458.                 anumber = atoi( &(argv[i][flagl]) );
  459.  
  460.                 /* outside the adapters are numbered starting */
  461.                 /* from 1, inside they are numbered starting */
  462.                 /* from 0 */
  463.                 anumber--;
  464.                 /* outside the adapters are numbered starting */
  465.                 /* from 1, inside they are numbered starting */
  466.                 /* from 0 */
  467.  
  468.                 if( anumber < 0 )
  469.                     anumber = 0;
  470.             }
  471.             else{
  472.                 anumber = 0;
  473.             }
  474.             skip= 1;
  475.             ibmScreensWanted++;
  476.             if( ibmProbeAndAdd(pScr, anumber, -1, -1) ){
  477.                 ;
  478.             }
  479.             else  {
  480.                 ErrorF("%s not available\n",&argv[i][1]);
  481.             }
  482.             found= TRUE;
  483.         }
  484.     }
  485.  
  486.     if ((!found)&&(ibmAdditionalScreenArg)) {
  487.         pScr= (*ibmAdditionalScreenArg)(argv[i]);
  488.         if (pScr) {
  489.  
  490.             /* have to find some way to set this for */
  491.             /* additional screens */
  492.             anumber = 0;
  493.             /* have to find some way to set this for */
  494.             /* additional screens */
  495.  
  496.             skip= 1;
  497.             ibmScreensWanted++;
  498.             if( ibmProbeAndAdd(pScr, anumber, -1, -1) ){
  499.                 found= TRUE;
  500.             }
  501.             else {
  502.                 ErrorF("%s not available\n",&argv[i][1]);
  503.             }
  504.         }
  505.     }
  506.  
  507. #if defined(DYNAMIC_LINK_SCREENS)
  508.     /* No More pre-linked screens! Try dynamic linking. */
  509.     if (!found) {
  510.         if ( pScr = ibmDynamicScreenAttach( argv[i] ) ) {
  511.             ibmScreens[ ibmNumScreens++ ] = pScr;
  512.             skip= 1;
  513.         }
  514.     }
  515. #endif
  516.  
  517.     }
  518.     return(skip);
  519. }
  520.  
  521. /***==================================================================***/
  522.  
  523. extern void ibmPrintBuildDate() ;
  524. extern void ibmInfoMsg() ;
  525.  
  526. void
  527. InitOutput(screenInfo, argc, argv)
  528.     ScreenInfo  *screenInfo;
  529.     int          argc;
  530.     char        *argv[];
  531. {
  532.     static      int     been_here= 0;
  533.  
  534.     TRACE(("InitOutput( screenInfo= 0x%x)\n",screenInfo));
  535.  
  536.     screenInfo->imageByteOrder = IMAGE_BYTE_ORDER;
  537.     screenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT;
  538.     screenInfo->bitmapScanlinePad = BITMAP_SCANLINE_PAD;
  539.     screenInfo->bitmapBitOrder = BITMAP_BIT_ORDER;
  540.  
  541.     screenInfo->numPixmapFormats = 1;
  542.     screenInfo->formats[0].depth= 1;
  543.     screenInfo->formats[0].bitsPerPixel= 1;
  544.     screenInfo->formats[0].scanlinePad= BITMAP_SCANLINE_PAD;
  545.  
  546.     if (!been_here) {
  547.     been_here= TRUE;
  548.  
  549.     if (ibmNumScreens!=ibmScreensWanted) {
  550.         TRACE(("ibmNumScreens=%d, ibmScreensWanted=%d\n", ibmNumScreens, ibmScreensWanted));
  551.         ErrorF("Couldn't open all requested screens.");
  552.         exit(1);
  553.     }
  554.     else if ((ibmNumScreens==0)&&(!ibmFindSomeScreens())) {
  555.         ErrorF("Couldn't open any screens.");
  556.         exit(1);
  557.     }
  558.  
  559.     /* Informational Messages */
  560.     ibmPrintBuildDate();
  561.     ibmInfoMsg(
  562.   "X Window System protocol version %d, revision %d (vendor release %d)\n",
  563.             X_PROTOCOL, X_PROTOCOL_REVISION, VENDOR_RELEASE ) ;
  564.  
  565.     ibmMachineDependentInit(); /* usually opens /dev/bus */
  566.     if (ibmUsePCKeys)       ibmInfoMsg( "Using PC keyboard layout...\n" );
  567.     else                    ibmInfoMsg( "Using RT keyboard layout...\n" );
  568.     }
  569.     ibmAddScreens(screenInfo,argc,argv);
  570. #ifdef AIXEXTENSIONS
  571.     AddandRegisterAIXOutputStuff(screenInfo);
  572. #endif
  573.     return;
  574. }
  575.