Mercurial > pidgin
annotate HACKING @ 979:ae6d13c11570
[gaim-migrate @ 989]
More patches! More patches! :)
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Thu, 12 Oct 2000 09:02:56 +0000 |
parents | fa681641643d |
children | 82c5865f7cfe |
rev | line source |
---|---|
639 | 1 A lot of people have tried to hack gaim, but haven't been able to because |
2 the code is just so horrid. Well, the code isn't getting better anytime | |
3 soon, so to help all you would-be hackers help out gaim, here's a brief | |
4 tutorial on how gaim works. I'll quickly describe the logical flow of | |
5 things, then what you'll find in each of the source files. Hopefully | |
6 that's enough to get most of you going. | |
7 | |
708
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
8 If you're going to hack gaim, PLEASE, PLEASE PLEASE PLEASE send patches |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
9 against the absolute latest CVS. I get really annoyed when I get patches |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
10 against the last released version, especially since I don't usually have |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
11 a copy of it on my computer, and gaim tends to change a lot between |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
12 versions. (I sometimes get annoyed when they're against CVS from 3 days |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
13 ago, but can't complain because it's usually my fault that I haven't |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
14 looked at the patch yet.) To get gaim from CVS (if you haven't already), |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
15 run the following commands: |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
16 |
774
b61607d6c2af
[gaim-migrate @ 784]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
749
diff
changeset
|
17 $ export CVSROOT=:pserver:anonymous@cvs.gaim.sourceforge.net:/cvsroot/gaim |
708
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
18 $ cvs login |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
19 (hit enter as the password) |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
20 $ cvs co gaim |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
21 (you'll see it getting all of the files) |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
22 $ cd gaim |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
23 $ ./gen |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
24 |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
25 You'll now have your normal gaim tree with ./configure and all. (If you |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
26 want to make your life really simple, learn how CVS works. CVS is your |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
27 friend.) |
3ff8b997cd37
[gaim-migrate @ 718]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
706
diff
changeset
|
28 |
639 | 29 There's one little thing that's just a pet peeve, and it's really stupid. |
706
a9758452f3c4
[gaim-migrate @ 716]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
684
diff
changeset
|
30 In ./configure there's an --enable-debug option. This does two things: |
639 | 31 compiles with -Wall, and prints debugging information to stdout. The |
32 debugging information is printed to the debug window (which can be turned | |
33 on in the preferences) whether or not --enable-debug was selected. Most | |
34 of the information that's printed is useless anyway though; so the | |
35 --enable-debug option really doesn't do a whole lot. | |
36 | |
979
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
37 This file was last modified by $Author: warmenhoven $ on $Date: 2000-10-12 05:02:56 -0400 (Thu, 12 Oct 2000) $. |
684
b29c92be568b
[gaim-migrate @ 694]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
639
diff
changeset
|
38 |
639 | 39 |
40 PROGRAM FLOW | |
41 ============ | |
42 | |
979
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
43 Before gaim does anything you can see, it initializes itself, which is |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
44 mostly just reading .gaimrc (handled by the functions in gaimrc.c). It |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
45 then draws the login window by calling show_login, and waits for input. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
46 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
47 At the login window, when "Accounts" is clicked, account_editor() is |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
48 called. (NOTE: the login window will probably be changed soon.) This |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
49 then displays all of the users and various information about them. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
50 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
51 When the "Sign on/off" button is clicked, serv_login is passed the |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
52 username and the password for the account. If the password length is |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
53 zero (the password field is a character array rather than pointer so |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
54 it will not be NULL) then the Signon callback will prompt for the |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
55 password before calling serv_login. serv_login then finds the user, |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
56 and signs in using the specified protocol. (This is a bad way of doing |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
57 things and should be fixed.) We'll assume TOC for the rest of this |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
58 discussion; Oscar has a lot of bad hacks to get it working that I don't |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
59 even want to think about. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
60 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
61 After you're signed in (I'll skip that discussion - I doubt many people |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
62 are going to change the login process, since it pretty much just follows |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
63 PROTOCOL), Gaim draws the buddy list by calling show_buddy_list, and |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
64 waits for input from two places: the server and the user. The first place |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
65 it gets input from after signon is invariably the server, when the server |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
66 tells Gaim which buddies are signed on. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
67 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
68 When there is information ready to be read from the server, toc_callback |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
69 is called (by GDK) to parse the incoming information. On an UPDATE, |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
70 serv_got_update is called, which takes care of things like notifying |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
71 conversation windows of the update if need be; notifying the plugins; |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
72 and finally, calling set_buddy. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
73 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
74 set_buddy is one of the most frequently called functions in gaim, one of |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
75 the largest functions in gaim, and probably one of the buggiest functions |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
76 in gaim. It is responsible for updating the pixmaps in the buddy list; |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
77 notifying plugins of various events; updating the tooltips for buddies; |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
78 making sounds; and updating the ticker. It's also called once per online |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
79 buddy every 20 seconds per connection (by GTK through update_all_buddies). |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
80 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
81 New connections happen the exact same way as described above. Each aim_user |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
82 can have one gaim_connection associated with it. aim_user and gaim_connection |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
83 both have a protocol field; gaim_connection's should be constant once it is |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
84 set in the appropriate (protocol)_login function. There are lots of details |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
85 that are connected with multiple connections that are best explained by |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
86 reading the code. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
87 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
88 When the user opens a new conversation window, new_conversation is called. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
89 That's easy enough. If there isn't a conversation with the person already |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
90 open (checked by calling find_conversation), show_conv is called to |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
91 create the new window. All sorts of neat things happen there, but it's |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
92 mostly drawing the window. show_conv is the best place to edit the UI. Be |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
93 prepared for some incredibly bad GTK programming. (Rob's fixing this as |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
94 we speak no doubt.) |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
95 |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
96 That's pretty much it for the quick tutorial. I know it wasn't much but |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
97 it's enough to get you started. Make sure you know GTK before you get too |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
98 involved. Most of the back-end stuff is pretty basic; most of gaim is GTK. |
639 | 99 |
100 | |
101 SOURCE FILES | |
102 ============ | |
103 | |
104 about.c: | |
105 Not much to say here, just a few basic functions. | |
106 | |
107 aim.c: | |
108 This is where the main() function is. It takes care of a lot of the | |
109 initialization stuff, and showing the login window. It's pretty tiny | |
110 and there's not really much to edit in it. Watch out for bad Oscar | |
111 sign in hacks. | |
112 | |
113 away.c: | |
114 This takes care of most of the away stuff: setting the away message | |
115 (do_im_away); coming back (do_im_back); drawing the away window; | |
116 etc. To be honest I haven't looked at this file in months. | |
117 | |
118 browser.c: | |
119 Code for opening a browser window. Most of the code is trying to deal | |
120 with Netscape. The most important function here is open_url. Have fun. | |
121 | |
122 buddy.c: | |
123 This takes care of not only nearly everything buddy-related (the buddy | |
124 list, the permit/deny lists, and the window), but also a lot of the | |
125 code flow and util functions. Look for good things like find_buddy, | |
126 set_buddy, and signoff() here. | |
127 | |
128 buddy_chat.c: | |
129 This takes care of the buddy chat stuff. This used to be a lot bigger | |
130 until the chat and IM windows got merged in the code. Now it mostly | |
131 just takes care of chat-specific stuff, like ignoring people and | |
132 keeping track of who's in the room. This is also where the chat window | |
133 is created. | |
134 | |
135 conversation.c: | |
136 This is where most of the functions dealing with the IM and chat windows | |
137 are hidden. It tries to abstract things as much as possible, but doesn't | |
138 do a very good job. This is also where things like "Enter sends" and | |
139 "Ctrl-{B/I/U/S}" options get carried out (look for send_callback). The | |
140 chat and IM toolbar (with the B/I/U/S buttons) are both built from the | |
141 same function, build_conv_toolbar. | |
142 | |
143 dialogs.c: | |
144 A massive file with a lot of little utility functions. This is where | |
145 all of those little dialog windows are created. Things like the warn | |
146 dialog and the add buddy dialog are here. Not all of the dialogs in | |
147 gaim are in this file, though. But most of them are. This is also | |
148 where do_import is housed, to import buddy lists. | |
149 | |
150 gaimrc.c: | |
151 This controls everything about the .gaimrc file. There's not really much | |
152 to say about it; this is probably one of the better designed and easier | |
153 to follow files in gaim. The important functions are towards the bottom. | |
154 | |
155 gnome_applet_mgr.c: | |
156 A hideous creation from the days before I started working on gaim. Most | |
157 of it works, but it has functionsLikeThis. I hate looking at this | |
158 file, but I'm too lazy to change the functions. The best functions | |
159 are things like set_applet_draw_open, whose sole purpose is to set a | |
749
94edd99b7302
[gaim-migrate @ 759]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
708
diff
changeset
|
160 global variable to TRUE. [ note 8/22/00 - I finally changed this file. ] |
639 | 161 |
162 gtkhtml.c: | |
163 This is really just one big hack. It started off as an HTML widget that | |
164 was written for Gnome as far as I can tell. The current version is | |
165 huge, requires way too many libs, and is too hard to upgrade to. But | |
166 we've managed to hack this poor old version into basically what we | |
167 need it for. I recommend not looking at this file if you want to save | |
168 your sanity. | |
169 | |
170 gtkticker.c: | |
171 Syd, our resident GTK God, wrote a GtkWidget, GtkTicker. This is that | |
172 widget. It's cool, and it's tiny. | |
173 | |
174 html.c: | |
175 Don't ask my why this is called html.c. Most of it is just grab_url, | |
176 which does like the name says; it downloads a URL to show in the | |
177 GtkHTML widget. http.c would be a more appropriate name, but that's OK. | |
178 | |
179 idle.c: | |
180 There is a very good reason why this file is still on version 1.1 | |
181 in CVS. The entire thing is #if 0'd out. I haven't ever really taken | |
182 a good look at it, but I think what it was supposed to have done is | |
183 set you as being away when a screensaver came on. | |
184 | |
979
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
185 multi.c: |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
186 This is the file that tries to take care of most of the major issues |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
187 with multiple connections. The best function in here by far is the |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
188 account_editor(). auto_login() is also in here (I'm just reading |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
189 multi.h now...); auto_login has problems. Someone please fix it. |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
190 account_editor is really the only function that the UI needs to be |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
191 concerned with. If you want to remove multiconnectivity from gaim, |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
192 all you would really need to do is comment out any lines that make |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
193 reference to this function (there are only two - one in aim.c and one |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
194 in buddy.c). The login window UI would have to be changed but it would |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
195 be simple to take an old version of gaim and copy code (it won't drop-in |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
196 because there were other changes, but it should be simple to hand-edit). |
ae6d13c11570
[gaim-migrate @ 989]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
960
diff
changeset
|
197 |
639 | 198 network.c: |
199 This has two functions: get_address and connect_address, both of which | |
200 call proxy functions. If you want to see how these are used, look at | |
201 toc.c and/or rvous.c. These are really just front-ends to the proxy | |
202 stuff; use these instead of calling the proxy functions. | |
203 | |
204 oscar.c: | |
205 One big hack of copied code. This is supposed to be the libfaim tie-in | |
206 in gaim. Most of it is just copied straight from faimtest, the small | |
207 program that comes with libfaim. I'm not even sure how half of it works, | |
208 if that makes you feel any better. | |
209 | |
210 perl.c: | |
211 This was basically copied straight from X-Chat through the power of | |
212 the GPL. Perl is the biggest, most confusing piece of C code I've ever | |
213 seen in my life (and keep in mind I'm a gaim hacker). I have a basic | |
214 idea of what's going on in it, but I couldn't tell you exactly. The | |
215 top half sets up perl and tells it what's going on and the bottom half | |
216 implements the AIM module. | |
217 | |
218 plugins.c: | |
219 This is the "plugin plug", as the file states. This file is probably | |
220 the only file in all of gaim that at the top has all of the functions | |
221 and global and static variables named out for you. It makes reading | |
222 it a little easier, but not by much. A lot of the code in here deals | |
223 with the plugin window rather than the plugins themselves. | |
224 | |
225 prefs.c: | |
226 The important function in here is build_prefs, but the most useful | |
227 function is gaim_button. build_prefs draws the window, and calls | |
228 gaim_button probably 30 or 40 times. (I don't really wanna run grep | |
229 | wc to count.) This is where you add the toggle button for gaim | |
230 preferences. It's very simple, and if you look at a couple of the | |
231 calls to gaim_button you'll figure it out right away. | |
232 | |
233 proxy.c: | |
234 This is where the bulk of the actual networking code is done. The big | |
235 function here is proxy_connect, which will connect through the proxy | |
236 setup you've chosen (most of which don't work...) or just regularly. | |
237 | |
238 rvous.c: | |
239 This was originally going to be the stuff for all of the Buddy Icon | |
240 and Voice Chat stuff, but I got really sick of protocol hacking really | |
241 quick. Now it only houses the file transfer stuff, which only works | |
242 for TOC. | |
243 | |
244 server.c: | |
245 This is where all of the differentiation between TOC and Oscar is | |
246 done. Nearly everything that's network related goes through here | |
247 at one point or another. This has good things like serv_send_im and | |
248 serv_got_update. Most of it should be pretty self-explanatory. | |
249 | |
250 sound.c: | |
251 The big important function is play_sound, which plays one of 4 (actually | |
252 6) sounds. One of the sounds is called in 3 different events, which | |
253 is why there are actually 6 sounds. This then calls play which then | |
254 checks for esd, then nas if that's not available, then falls back | |
255 to /dev/audio. | |
256 | |
257 ticker.c: | |
258 Syd is just so cool. I really can't get over it. He let me come | |
259 visit him at Netscape one day, and I got to see all of their toys | |
260 (don't worry, I'm under an NDA). Anyway, this file is for the buddy | |
261 ticker. This is also a damn cool file because it's got all of the | |
262 functions that you'd want right up at the top. Someday I want to be | |
263 as cool as Syd. | |
264 | |
265 toc.c: | |
266 This handles everything TOC-related, including parsing gaim's buddy | |
267 list. Most of this file is toc_callback, which parses the incoming | |
268 information from the server. I really don't like TOC though. | |
269 | |
270 util.c: | |
271 There's not really a lot of cohesion to this file; it's just a lot of | |
272 stuff that happened to be thrown into it for no apparent reason. None | |
273 of it is particularly tasty; it's all just utility functions. Just | |
274 like the name says. | |
275 | |
276 | |
277 So that's our little tour of the internals of Gaim. It's really not | |
278 difficult to figure out if you've spent any time with GTK. I'm looking | |
279 forward to getting all of your patches :) |