Merge r21-4-11-chise-0_20-=ucs.
[chise/xemacs-chise.git.1] / netinstall / net.cc
1 /*
2  * Copyright (c) 2000, Red Hat, Inc.
3  *
4  *     This program is free software; you can redistribute it and/or modify
5  *     it under the terms of the GNU General Public License as published by
6  *     the Free Software Foundation; either version 2 of the License, or
7  *     (at your option) any later version.
8  *
9  *     A copy of the GNU General Public License can be found at
10  *     http://www.gnu.org/
11  *
12  * Written by DJ Delorie <dj@cygnus.com>
13  *
14  * Sync'ed with cinstall 2001-10-16
15  */
16
17 /* The purpose of this file is to get the network configuration
18    information from the user. */
19
20 #include "win32.h"
21 #include <stdio.h>
22 #include <stdlib.h>
23 #include "dialog.h"
24 #include "resource.h"
25 #include "state.h"
26 #include "msg.h"
27 #include "log.h"
28
29 static int rb[] = { IDC_NET_IE5, IDC_NET_DIRECT, IDC_NET_PROXY, 0 };
30
31 static void
32 check_if_enable_next (HWND h)
33 {
34   int e = 0, p = 0, pu = 0;
35   if (net_method == IDC_NET_IE5)
36     pu = 1;
37   if (net_method == IDC_NET_IE5 || net_method == IDC_NET_DIRECT)
38     e = 1;
39   else if (net_method == IDC_NET_PROXY)
40     {
41       p = pu = 1;
42       if (net_proxy_host && net_proxy_port)
43         e = 1;
44     }
45   EnableWindow (GetDlgItem (h, IDOK), e);
46   EnableWindow (GetDlgItem (h, IDC_PROXY_HOST), p);
47   EnableWindow (GetDlgItem (h, IDC_PROXY_PORT), p);
48 }
49
50 static void
51 load_dialog (HWND h)
52 {
53   rbset (h, rb, net_method);
54   eset (h, IDC_PROXY_HOST, net_proxy_host);
55   if (net_proxy_port == 0)
56     net_proxy_port = 80;
57   eset (h, IDC_PROXY_PORT, net_proxy_port);
58   check_if_enable_next (h);
59 }
60
61 static void
62 save_dialog (HWND h)
63 {
64   net_method = rbget (h, rb);
65   net_proxy_host = eget (h, IDC_PROXY_HOST, net_proxy_host);
66   net_proxy_port = eget (h, IDC_PROXY_PORT);
67 }
68
69 static BOOL
70 dialog_cmd (HWND h, int id, HWND hwndctl, UINT code)
71 {
72   switch (id)
73     {
74
75     case IDC_NET_IE5:
76     case IDC_NET_DIRECT:
77     case IDC_NET_PROXY:
78     case IDC_PROXY_HOST:
79     case IDC_PROXY_PORT:
80       save_dialog (h);
81       check_if_enable_next (h);
82       break;
83
84     case IDOK:
85       save_dialog (h);
86       switch (source)
87         {
88         case IDC_SOURCE_NETINST:
89         case IDC_SOURCE_DOWNLOAD:
90           NEXT (IDD_SITE);
91           break;
92         case IDC_SOURCE_CWD:
93           NEXT (0);
94           break;
95         default:
96           msg ("source is default? %d\n", source);
97           NEXT (0);
98         }
99       break;
100
101     case IDC_BACK:
102       save_dialog (h);
103       switch (source)
104         {
105         case IDC_SOURCE_DOWNLOAD:
106           NEXT (IDD_LOCAL_DIR);
107           break;
108         case IDC_SOURCE_NETINST:
109         case IDC_SOURCE_CWD:
110           NEXT (IDD_ROOT);
111           break;
112         }
113       break;
114
115     case IDCANCEL:
116       NEXT (0);
117       break;
118     }
119 }
120
121 static BOOL CALLBACK
122 dialog_proc (HWND h, UINT message, WPARAM wParam, LPARAM lParam)
123 {
124   switch (message)
125     {
126     case WM_INITDIALOG:
127       load_dialog (h);
128
129       // Check to see if any radio buttons are selected. If not, select a default.
130       if ((!SendMessage(GetDlgItem (h, IDC_NET_IE5), BM_GETCHECK, 0, 0) == BST_CHECKED)
131         && (!SendMessage(GetDlgItem (h, IDC_NET_PROXY), BM_GETCHECK, 0, 0) == BST_CHECKED))
132         {
133           SendMessage(GetDlgItem (h, IDC_NET_DIRECT), BM_CLICK, 0, 0);
134         }
135       return FALSE;
136     case WM_COMMAND:
137       return HANDLE_WM_COMMAND (h, wParam, lParam, dialog_cmd);
138     }
139   return FALSE;
140 }
141
142 void
143 do_net (HINSTANCE h)
144 {
145   int rv = 0;
146
147   net_method = IDC_NET_DIRECT;
148   rv = DialogBox (h, MAKEINTRESOURCE (IDD_NET), 0, dialog_proc);
149   if (rv == -1)
150     fatal (IDS_DIALOG_FAILED);
151
152   log (0, "net: %s",
153        (net_method == IDC_NET_IE5) ? "IE5" :
154        (net_method == IDC_NET_DIRECT) ? "Direct" : "Proxy");
155 }
156