home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / msj / v06n06 / intnat.exe / INTERN.EXE / INTERINT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-01  |  4.4 KB  |  165 lines

  1. /* 
  2.  * Initialization segment for INTERNAT
  3.  * This code is discarded after it is used.
  4.  *
  5.  * William S. Hall
  6.  * 3665 Benton Street, #66
  7.  * Santa Clara, CA 95051
  8.  *
  9.  */
  10.  
  11. #define NOKANJI
  12. #define NOCOMM
  13. #define NOWH
  14. #define NOATOM
  15. #include <windows.h>
  16. #include <string.h>
  17. #include "internat.h"
  18. #include "interstr.h"
  19. #include "interint.h"
  20. #include "winutils.h"
  21. #include "intdgdef.h"
  22.  
  23. /* local function declarations */
  24. static BOOL NEAR RegisterWindowClass(HANDLE);
  25. static void NEAR GetPrevInstanceData(HANDLE);
  26. static HWND NEAR MakeAndShowMainWnd(HANDLE, int);
  27. static HANDLE NEAR GetLanguageResource(void);
  28.  
  29. /* This routine is FAR since it is called from another segment */
  30. BOOL FAR InitProgram(HANDLE hInstance, HANDLE hPrevInstance, 
  31.              LPSTR lpszCmdLine, int cmdShow)
  32. {
  33.     hInst = hInstance;
  34.  
  35.   /* failed to get a language resource so take the default language */
  36.     if ((hRC = GetLanguageResource()) < 32)
  37.         hRC = hInstance;
  38.     
  39.   /* if this is the first instance of the program ... */
  40.     if (!hPrevInstance) {
  41.      /* register the window */
  42.     if (!RegisterWindowClass(hInstance))
  43.         return FALSE;
  44.     }
  45.  
  46.   /* A previous instance already exists so get global data from there */
  47.     else
  48.     GetPrevInstanceData(hPrevInstance);
  49.  
  50.   /* Create and show the window */
  51.     if (!MakeAndShowMainWnd(hInstance, cmdShow))
  52.     return FALSE;
  53.  
  54.     return TRUE;
  55. }
  56.  
  57. /* Every window must belong to a class. We register ours here */
  58. static BOOL NEAR RegisterWindowClass(HANDLE hInstance)
  59. {
  60.  
  61.     WNDCLASS WndClass;
  62.  
  63.     LoadString(hRC, IDS_APPNAME,(LPSTR)szAppName,sizeof(szAppName));
  64.     memset(&WndClass, 0, sizeof(WndClass));
  65.  
  66.     WndClass.hCursor    = LoadCursor(NULL, IDC_ARROW);  /* standard cursor */
  67.     WndClass.hIcon    = LoadIcon(hRC, szAppName);                /* no icon */
  68.     WndClass.lpszMenuName = (LPSTR)szAppName;
  69.     WndClass.lpszClassName = (LPSTR)szAppName;    /* our class name */
  70.     WndClass.hbrBackground = COLOR_WINDOW + 1;    /* system color */
  71.     WndClass.hInstance = hInstance;        /* instance handle */
  72.     WndClass.style = CS_VREDRAW | CS_HREDRAW; /* standard redraw values */
  73.     WndClass.lpfnWndProc = MainWndProc;    /* pointer to our window proc */
  74.  
  75.     return (RegisterClass(&WndClass));
  76.  
  77. }
  78.  
  79. /*
  80.    If this not the first instance, we can retrieve static data from a
  81.    previous invocation of the program
  82. */
  83. static void NEAR GetPrevInstanceData(HANDLE hPrevInstance)
  84. {
  85.  
  86.     GetInstanceData(hPrevInstance, (PSTR)szAppName, sizeof(szAppName));
  87.  
  88. }
  89.  
  90. /*
  91.  Create the window, making sure that its position and size are suitable
  92.  for the display.
  93. */
  94. static HWND NEAR MakeAndShowMainWnd(HANDLE hInstance, int cmdShow)
  95. {
  96.  
  97.     char szTitle[50];
  98.  
  99.     LoadString(hRC, IDS_TITLE, szTitle, sizeof(szTitle));
  100.  
  101.   /* Create the window, letting it fall where Windows wants.
  102.      Also, load the menu now since the resource handle may have changed */
  103.  
  104.     hWndMain = CreateWindow((LPSTR)szAppName,
  105.                  (LPSTR)szTitle,
  106.                  WS_OVERLAPPEDWINDOW,
  107.                  CW_USEDEFAULT,0,
  108.                  CW_USEDEFAULT,0,
  109.                  (HWND)NULL,
  110.                  (HMENU)LoadMenu(hRC, szAppName),
  111.                  (HANDLE)hInstance,
  112.                  (LPSTR)NULL);
  113.  
  114.   /* if we succeed, show the window */
  115.     if (hWndMain) {
  116.         ShowWindow(hWndMain, cmdShow);
  117.         UpdateWindow(hWndMain);
  118.     }
  119.     return hWndMain;
  120. }
  121.  
  122. /* initialize the display buffer and read some font parameters */
  123. void FAR WndCreate(HWND hWnd)
  124. {
  125.     HDC hDC;
  126.     TEXTMETRIC tm;
  127.     register int i;
  128.  
  129.     hDC = GetDC(hWnd);
  130.     SelectObject(hDC, GetStockObject(SYSTEM_FIXED_FONT));
  131.     GetTextMetrics(hDC, &tm);
  132.     cwidth = tm.tmAveCharWidth;
  133.   /* adjust row spacing by 6/5 */
  134.     cheight = MulDiv(6, tm.tmHeight + tm.tmExternalLeading, 5);    
  135.   /* use this parameter for the rectangle where the key stuff is shown */
  136.     kwidth = cwidth * (32 + 3);
  137.     ReleaseDC(hWnd, hDC);
  138.  
  139.   /* load the backing storage buffer */
  140.     for (i = 0; i < sizeof(display); i++)
  141.     display[i] = (BYTE)i;
  142.  
  143. }
  144.  
  145. /* Show the language choices and respond accordingly */
  146. static HANDLE NEAR GetLanguageResource(void)
  147. {
  148.     int result;
  149.     HANDLE h = hInst;
  150.     BYTE buf[80];
  151.     FARPROC fp;
  152.  
  153.     fp = MakeProcInstance(LangDlgFunc, hInst);
  154.     result = DialogBox(hInst, MAKEINTRESOURCE(DT_LANGUAGE), NULL, fp);
  155.     FreeProcInstance(fp);
  156.  
  157.     switch(result) {
  158.     case IDS_PIGLATIN:
  159.         LoadString(hInst, IDS_PGLLIBNAME, buf, sizeof(buf));
  160.         h = LoadLibrary(buf);
  161.         break;
  162.     }
  163.     return h;
  164. }
  165.