1 /*
2 * src/cliSetup.c, part of Complete Goban (game program)
3 * Copyright (C) 1995 William Shubert
4 * See "configure.h.in" for more copyright information.
5 */
6
7 #include <wms.h>
8 #include <but/but.h>
9 #include <abut/msg.h>
10 #include <wms/clp.h>
11 #include <wms/str.h>
12 #include <but/textin.h>
13 #include "../cgoban.h"
14 #include "setup.h"
15 #include "../msg.h"
16 #include "login.h"
17
18
19 /**********************************************************************
20 * Forward Declarations
21 **********************************************************************/
22 static ButOut loginDestroyed(void *packet);
23 static ButOut cancelPressed(But *but);
24 static ButOut okPressed(But *but);
25 static ButOut newUser(But *but, const char *user);
26 static ButOut newPassword(But *but, const char *pass);
27
28
29 /**********************************************************************
30 * Functions
31 **********************************************************************/
32
cliSetup_create(Cgoban * cg,int serverNum)33 CliSetup *cliSetup_create(Cgoban *cg, int serverNum) {
34 CliSetup *c;
35 Str title;
36 AbutMsgTin tins[2];
37 AbutMsgOpt buttons[3];
38
39 /* Necessary reference to server.c. See "server.h" for an explanation. */
40 cliServer_create();
41
42 assert(MAGIC(cg));
43 str_init(&title);
44 c = wms_malloc(sizeof(CliSetup));
45 MAGIC_SET(c);
46 c->cd = cliData_create(cg, serverNum, NULL, NULL);
47 c->userClp = clp_lookup(cg->clp, "client.username");
48 c->passwordClp = clp_lookup(cg->clp, "client.password");
49 c->serverNum = serverNum;
50 str_print(&title, "%s Setup", c->cd->serverName);
51 tins[0].name = msg_usernameColon;
52 tins[0].def = clpEntry_getStrNum(c->userClp, serverNum);
53 tins[0].callback = newUser;
54 tins[0].flags = 0;
55 tins[1].name = msg_passwordColon;
56 tins[1].def = clpEntry_getStrNum(c->passwordClp, serverNum);
57 tins[1].callback = newPassword;
58 tins[1].flags = abutMsgTinFlags_secret;
59 buttons[0].name = msg_help;
60 buttons[0].callback = cgoban_createHelpWindow;
61 buttons[0].packet = &help_cliSetup;
62 buttons[0].keyEq = cg_help;
63 buttons[1].name = msg_cancel;
64 buttons[1].callback = cancelPressed;
65 buttons[1].packet = c;
66 buttons[1].keyEq = NULL;
67 buttons[2].name = msg_ok;
68 buttons[2].callback = okPressed;
69 buttons[2].packet = c;
70 buttons[2].keyEq = cg_return;
71 c->login = abutMsg_winOptInCreate(cg->abut, str_chars(&title),
72 msg_loginDesc[c->cd->server],
73 loginDestroyed, c, 3, buttons, 2, tins);
74 str_deinit(&title);
75 return(c);
76 }
77
78
newUser(But * but,const char * user)79 static ButOut newUser(But *but, const char *user) {
80 CliSetup *setup = but_packet(but);
81
82 assert(MAGIC(setup));
83 but_setFlags(setup->login->tins[1], BUT_KEYED);
84 return(0);
85 }
86
87
newPassword(But * but,const char * pass)88 static ButOut newPassword(But *but, const char *pass) {
89 CliSetup *setup = but_packet(but);
90
91 assert(MAGIC(setup));
92 return(okPressed(setup->login->buts[2]));
93 }
94
95
cliSetup_destroy(CliSetup * c)96 void cliSetup_destroy(CliSetup *c) {
97 assert(MAGIC(c));
98 if (c->login) {
99 abutMsg_destroy(c->login, FALSE);
100 c->login = NULL;
101 }
102 cliData_decRef(c->cd);
103 MAGIC_UNSET(c);
104 wms_free(c);
105 }
106
107
loginDestroyed(void * packet)108 static ButOut loginDestroyed(void *packet) {
109 CliSetup *c = packet;
110
111 assert(MAGIC(c));
112 c->login = NULL;
113 cliSetup_destroy(c);
114 return(0);
115 }
116
117
cancelPressed(But * but)118 static ButOut cancelPressed(But *but) {
119 CliSetup *c = but_packet(but);
120
121 assert(MAGIC(c));
122 butWin_destroy(c->login->win);
123 return(0);
124 }
125
126
okPressed(But * but)127 static ButOut okPressed(But *but) {
128 CliSetup *c = but_packet(but);
129 ButOut result = 0;
130 const char *user, *pass;
131
132 assert(MAGIC(c));
133 user = butTextin_get(abutMsg_tin(c->login, 0));
134 pass = butTextin_get(abutMsg_tin(c->login, 1));
135 clpEntry_setStrNum(c->userClp, user, c->serverNum);
136 clpEntry_setStrNum(c->passwordClp, pass, c->serverNum);
137 str_copyChars(&c->cd->userName, user);
138 if (!cliLogin_create(c->cd, user, pass))
139 result = BUTOUT_ERR;
140 cliSetup_destroy(c);
141 return(result);
142 }
143
144
cliSetup_createGmp(Cgoban * cg,int serverNum,const char * username,const char * password,const CliActions * actions,void * packet)145 void cliSetup_createGmp(Cgoban *cg, int serverNum,
146 const char *username, const char *password,
147 const CliActions *actions, void *packet) {
148 CliData *data;
149
150 data = cliData_create(cg, serverNum, actions, packet);
151 str_copyChars(&data->userName, username);
152 cliLogin_create(data, username, password);
153 }
154