home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / x / xibm.zip / AIX / aixInit.c < prev    next >
C/C++ Source or Header  |  1992-02-11  |  5KB  |  223 lines

  1. /*
  2.  * $Id: aixInit.c,v 5.1 1992/02/12 00:21:36 jfc Exp $
  3.  *
  4.  * Copyright IBM Corporation 1987,1988,1989
  5.  *
  6.  * All Rights Reserved
  7.  *
  8.  * Permission 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 AND FITNESS, IN NO EVENT SHALL
  18.  * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
  19.  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  20.  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
  21.  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
  22.  * SOFTWARE.
  23.  *
  24. */
  25. #ifndef lint
  26. static char sccsid[] = "@(#)AIXinit.c    3.1 88/09/22 09:29:26";
  27. #endif
  28.  
  29. #if defined(AIXrt)
  30. #include <sys/types.h>
  31. #include <sys/file.h>
  32. #endif
  33.  
  34. #include <sys/hft.h>
  35.  
  36. #include "Xmd.h"
  37. #include "miscstruct.h"
  38. #include "scrnintstr.h"
  39. #include "cursor.h"
  40.  
  41. #include "ibmScreen.h"
  42.  
  43. #include "./OSio.h"
  44.  
  45. #include "hftQueue.h"
  46. #include "hftUtils.h"
  47.  
  48. #include "ibmTrace.h"
  49.  
  50. /***====================================================================***/
  51.  
  52. int    AIXDefaultDisplay= 0;
  53.  
  54. void
  55. AIXMachineDependentInit()
  56. {
  57.     TRACE(("AIXMachineDependentInit()\n"));
  58.  
  59. #if defined(AIXrt)
  60.     hftInitQueue(AIXDefaultDisplay,FALSE);
  61. #endif
  62.     RemoveEnabledDevice(hftQFD);
  63. #ifdef AIXrt
  64.     if (open("/dev/bus",O_RDWR)==-1) {
  65.     ErrorF("Couldn't get /dev/bus.\nExiting\n");
  66.     exit(1);
  67.     }
  68. #endif
  69.     return;
  70. }
  71.  
  72. /***====================================================================***/
  73.  
  74. #if !defined(DISABLE_ADDITIONAL_SCREENS)
  75. int    (*ibmAdditionalDfltScreen)();
  76. #endif
  77.  
  78. void
  79. AIXGetDefaultScreens()
  80. {
  81. unsigned    Device, hftQueryCurrentDevice();
  82. char        *devflag, **fakeArgv= &devflag;
  83. char         *devstring = "unknown device";
  84.  
  85.     TRACE(("AIXGetDefaultScreens()\n"));
  86.     if (hftFindAScreen(0)<0) {
  87.     ErrorF("X must be run from the console\n");
  88.     exit(1);
  89.     }
  90.  
  91.     Device = hftQueryCurrentDevice();
  92.     switch (Device & HFT_DEVID_MASK) {
  93. #ifdef AIXrt
  94.     case HFT_MEGAPEL_ID:
  95.         devflag= "-mpel";
  96.         devstring = "megapel";
  97.         break;
  98.     case HFT_APA16_ID:
  99.         devflag= "-apa16";
  100.         devstring = "6155";
  101.         break;
  102.     case HFT_EGA_ID:
  103.         devflag= "-ega";
  104.         devstring = "ega";
  105.         break;
  106.     case HFT_APA8_ID:
  107.         devstring = "6153";
  108.         devflag= "-gsl";
  109.         break;
  110.     case HFT_APA8C_ID:
  111.         devstring = "6154";
  112.         devflag= "-gsl";
  113.         break;
  114. #else
  115. #ifdef AIXps2
  116.         case HFT_VGA_8503_ID:
  117.     case HFT_VGA_8512_ID:
  118.     case HFT_VGA_8513_ID:
  119.     case HFT_VGA_8514_ID:
  120.     case HFT_VGA_8507_ID:
  121.     case HFT_VGA_8604_ID:
  122.                 devflag= "-vga" ;
  123.                 devstring = "vga" ;
  124.                 break ;
  125.         case HFT_8514A_8503_ID:
  126.         case HFT_8514A_8512_ID:
  127.         case HFT_8514A_8513_ID:
  128.         case HFT_8514A_8514_ID:
  129.         case HFT_8514A_8507_ID:
  130.         case HFT_8514A_8604_ID:
  131.                 devflag= "-8514" ;
  132.                 devstring = "8514" ;
  133.                 break ;
  134. #else
  135. ERROR!!! MUST BE RT/PC or PS/2 386
  136. #endif /* AIXps2 */
  137. #endif /* AIXrt */
  138.     default:
  139. #ifndef DISABLE_ADDITIONAL_SCREENS
  140.         if (ibmAdditionalDfltScreen) {
  141.             if ((*ibmAdditionalDfltScreen)(Device,&devstring,&devflag))
  142.             break;
  143.         }
  144. #endif
  145.         devstring= "unknown device";
  146.         devflag= "-gsl";
  147.         break;
  148.     case HFT_ILLEGAL_ID:
  149.         ErrorF("Cannot determine current device for X screen.\n");
  150.         ErrorF("Possible problems: remote execution, no active\n");
  151.         ErrorF("tty, or running in background on old kernel.\n");
  152.         ErrorF("Retry by specifying a screen option on the command\n");
  153.         ErrorF("line (Eg '-mpel') or by running in foreground\n");
  154.         ErrorF("Check out the documentation if all else fails\n\n");
  155.  
  156.         Error("Goodbye!\n");     /* should *NEVER* return */
  157.         _exit(-1);    /* NOTREACHED */
  158.         break;        /* NOTREACHED */
  159.     }
  160.  
  161.     if (Device & HFT_DEVBUSTED_MASK) {
  162.     ErrorF("Warning: I seem to be running on a broken (or");
  163.     ErrorF(" only semi-functional) %s.\n",devstring);
  164.     }
  165.  
  166.     ddxProcessArgument(1,fakeArgv,0);
  167.  
  168.     return;
  169. }
  170.  
  171. /***==================================================================***/
  172.  
  173. #if !defined(FORCE_DISPLAY_NUMBER)
  174.  
  175. #if !defined(MAX_SERVER_NUM)
  176. #define MAX_SERVER_NUM 255
  177. #endif
  178.  
  179. #include <sys/socket.h>
  180. #include <sys/un.h>
  181. #include <netinet/in.h>
  182. #include <errno.h>
  183. #include <sys/wait.h>
  184.  
  185. #include "Xproto.h"
  186.  
  187. int AIXTCPSocket= -1;
  188. static char dummy[20];
  189.  
  190. extern char *display ;
  191.  
  192. void
  193. AIXFindServerIndex()
  194. {
  195. struct sockaddr_in insock ;
  196. int sockNum, sockFD ;
  197.  
  198.     if ((sockFD = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
  199.     Error("creating TCP socket (in FindATCPSocket)\n",NULL);
  200.     display= "0";
  201.     return;
  202.     }
  203.  
  204.     bzero( (char *)&insock, sizeof insock );
  205.     insock.sin_family = AF_INET;
  206.     insock.sin_addr.s_addr = htonl(INADDR_ANY);
  207.  
  208.     for ( sockNum = 0 ; sockNum < MAX_SERVER_NUM ; sockNum++ ) {
  209.     insock.sin_port = htons( X_TCP_PORT + sockNum ) ;
  210.     if ( bind( sockFD, (struct sockaddr *) &insock, sizeof insock ) ) {
  211.         if (errno!=EADDRINUSE) {
  212.         display= "0";
  213.         return;
  214.         }
  215.     }
  216.     else break;
  217.     }
  218.     AIXTCPSocket= sockFD;
  219.     (void) sprintf( display = dummy, "%d", sockNum ) ;
  220.     return;
  221. }
  222. #endif /* FORCE_DISPLAY_NUMBER */
  223.