1 |
\input texinfo @c -*-texinfo-*- |
2 |
@c A FAQ for GNUstep Users |
3 |
|
4 |
@node Top, GNUstep General Information, (dir), (dir) |
5 |
@chapter GNUstep Frequently Asked Questions for Users |
6 |
|
7 |
Last updated @today{}. |
8 |
Please send corrections to @email{gnustep-maintainer@@gnu.org}. Also look |
9 |
at the (developer) FAQ for more developer oriented questions. |
10 |
|
11 |
@menu |
12 |
* GNUstep General Information:: |
13 |
* Compiling and Installing:: |
14 |
* Compatibility and Layout:: |
15 |
* Troubleshooting:: |
16 |
@end menu |
17 |
|
18 |
@node GNUstep General Information, Compiling and Installing, Top, Top |
19 |
@section GNUstep General Information |
20 |
|
21 |
@menu |
22 |
* What is GNUstep?:: |
23 |
* What is the OpenStep standard?:: |
24 |
* What platforms does GNUstep run on?:: |
25 |
* Does GNUstep run on Windows?:: |
26 |
* What is GNUstep's position towards KDE and the GNOME project?:: |
27 |
* Which Foundation Library can I use?:: |
28 |
* How can I get GNUstep?:: |
29 |
* How do you run GNUstep?:: |
30 |
* Is there a web site?:: |
31 |
* When is GNUstep intended to be available?:: |
32 |
* What is usable?:: |
33 |
@end menu |
34 |
|
35 |
@node What is GNUstep?, What is the OpenStep standard?, GNUstep General Information, GNUstep General Information |
36 |
@subsection What is GNUstep? |
37 |
|
38 |
GNUstep is the Free Software Foundation's effort to implement NeXT |
39 |
Software Inc.'s (now Apple Inc.) OpenStep Standard. The project is not |
40 |
finished, so some parts are not as polished as they could be. |
41 |
|
42 |
@node What is the OpenStep standard?, What platforms does GNUstep run on?, What is GNUstep?, GNUstep General Information |
43 |
@subsection What is the OpenStep standard? |
44 |
|
45 |
OpenStep is an Application Programming Interface (API) for creating |
46 |
applications using the Objective C language. It was published by NeXT |
47 |
Computer Inc. in 1994. |
48 |
|
49 |
OpenStep consists of three parts: the @samp{FoundationKit}, a library of |
50 |
non-graphical objects; the @samp{AppKit}, a library of objects useful in |
51 |
creating graphical applications; and @samp{Display Postscript}, an |
52 |
interface for drawing to the screen using the PostScript graphics |
53 |
language. |
54 |
|
55 |
You can obtain a copy of the OpenStep standard from the GNUstep web site |
56 |
@url{http://www.gnustep.org} or it's mirror sites. |
57 |
|
58 |
@node What platforms does GNUstep run on?, Does GNUstep run on Windows?, What is the OpenStep standard?, GNUstep General Information |
59 |
@subsection What platforms does GNUstep run on? |
60 |
|
61 |
See the list of supported platforms at |
62 |
@url{http://www.gnustep.org/information/machines_toc.html} for |
63 |
information on what machines GNUstep builds on and what the status of |
64 |
the ports is. Probably a few days porting to any other Unix system where |
65 |
current gcc/egcs compilers and gdb debugger work. |
66 |
|
67 |
@node Does GNUstep run on Windows?, What is GNUstep's position towards KDE and the GNOME project?, What platforms does GNUstep run on?, GNUstep General Information |
68 |
@subsection Does GNUstep run on Windows? |
69 |
|
70 |
The primary targets for GNUstep are free 'Unix' platforms such |
71 |
as GNU/Linux. |
72 |
|
73 |
That being said, the base library should run on Windows-NT,98 with the |
74 |
Cygwin unix emulation library from Cygnus |
75 |
(http://sourceware.cygnus.com/cygwin/) or the MinGW libraries. At |
76 |
present there are a few problems with networking (Distributed Objects) |
77 |
support, but the library is believed to work. |
78 |
|
79 |
The gui library needs a win32 backend library to work under |
80 |
Windows-NT. The backend library is a thin layer that converts the |
81 |
GNUstep methods to handle drawing of GUI elements to calls to the |
82 |
win32 API. This is a project is in an alpha state. |
83 |
|
84 |
The application-wrapper used for GNUstep already allows for multiple |
85 |
binaries to be stored for different systems, so you should be able |
86 |
to write once, deploy anywhere. |
87 |
|
88 |
|
89 |
@node What is GNUstep's position towards KDE and the GNOME project?, Which Foundation Library can I use?, Does GNUstep run on Windows?, GNUstep General Information |
90 |
@subsection What is GNUstep's position towards KDE and the GNOME project? |
91 |
|
92 |
You can use GNUstep with GNOME and/or KDE. GNUstep displays |
93 |
on top of X11. You can still do programming in C (since Objective-C |
94 |
is just a super-set of C), and when (if?) GCC gets around to it, |
95 |
you'll be able to mix C++ and Objective-C code in the SAME file. |
96 |
|
97 |
GNUstep, is much more than a window manager or desktop environment. |
98 |
It frees you to develop cross-platform applications without the |
99 |
work of developing an OS independent framework from scratch. It |
100 |
gives you lots of basic functionality, from Font Panels to Unicode |
101 |
strings to Distributed Objects. |
102 |
|
103 |
@node Which Foundation Library can I use?, How can I get GNUstep?, What is GNUstep's position towards KDE and the GNOME project?, GNUstep General Information |
104 |
@subsection Which Foundation Library can I use? |
105 |
|
106 |
That depends ... |
107 |
|
108 |
If you only want to use the database package - gnustep-db, you can |
109 |
use either the gnustep base library or libFoundation. |
110 |
|
111 |
If you want to develop/use GNUstep gui applications, you must use |
112 |
the gnustep-base library since libFoundation is (13-Feb-2000) |
113 |
missing much essential functionality. |
114 |
|
115 |
|
116 |
@node How can I get GNUstep?, How do you run GNUstep?, Which Foundation Library can I use?, GNUstep General Information |
117 |
@subsection How can I get GNUstep? |
118 |
|
119 |
Get the HOWTO from |
120 |
@url{http://www.gnustep.org/resources/documentation/GNUstep-HOWTO} |
121 |
Get the latest release from @url{ftp://ftp.gnustep.org}. If you're |
122 |
really adventurous, get the latest snapshot by anonymous ftp from |
123 |
@url{ftp://ftp.gnustep.org:/pub/daily-snapshots} |
124 |
|
125 |
Use anonymous CVS to keep up to date - instructions are in the |
126 |
HOWTO. |
127 |
|
128 |
@node How do you run GNUstep?, Is there a web site?, How can I get GNUstep?, GNUstep General Information |
129 |
@subsection How do you run GNUstep? |
130 |
|
131 |
You are presumably under the misapprehension that GNUstep is |
132 |
some sort of program or window manager. |
133 |
|
134 |
It isn't. |
135 |
|
136 |
GNUstep is a whole load of things - primarily a set of libraries |
137 |
for developing software. |
138 |
|
139 |
At present, it's those libraries, plus various command-line based |
140 |
support tools and service providing daemons, plus various GUI |
141 |
development tools, a GUI desktop/workspace application, etc. |
142 |
|
143 |
At no stage will you ever 'run' GNUstep - you will run applications |
144 |
and tools and will make use of it's services. At some point |
145 |
you may well find packages distributed as 'GNUstep' systems in the |
146 |
way that you get 'GNU/Linux' systems packaged today. Look at |
147 |
Simply GNUstep @url{http://simplygnustep.sourceforge.net/} for instance. |
148 |
|
149 |
If you want to see a sample GUI application running you need to build |
150 |
GNUstep and look at the example applications in the gnustep-examples |
151 |
package. Build 'Finger' or 'Ink' and start it with 'openapp Finger.app' |
152 |
or 'openapp Ink.app' |
153 |
|
154 |
To look best - use WindowMaker (the currently preferred GNUstep |
155 |
window manager) as your window manager. |
156 |
|
157 |
@node Is there a web site?, When is GNUstep intended to be available?, How do you run GNUstep?, GNUstep General Information |
158 |
@subsection Is there a web site? |
159 |
|
160 |
See @url{http://www.gnustep.org/}. |
161 |
|
162 |
@node When is GNUstep intended to be available?, What is usable?, Is there a web site?, GNUstep General Information |
163 |
@subsection When is GNUstep intended to be available? |
164 |
|
165 |
It's usable now. Major releases are made about every six months. However, if |
166 |
you are a serious developer, it's probably best to use the latest |
167 |
snapshots. |
168 |
|
169 |
@node What is usable?, , When is GNUstep intended to be available?, GNUstep General Information |
170 |
@subsection What is usable? |
171 |
|
172 |
@itemize @bullet |
173 |
@item gnustep-make does pretty much what the makefiles in NeXTstep do. |
174 |
@item gnustep-base (Foundation) stuff should work fine for almost all projects. |
175 |
@item gnustep-db is only EOF-1.0 compatible but should work OK. |
176 |
@item gnustep-gui (AppKit) has a lot working but there is still stuff missing. |
177 |
@item DGS (Display Ghostscript) is usable but slow. |
178 |
@end itemize |
179 |
|
180 |
What does this mean for users? Many applications will run quite well. |
181 |
Applications that require very complex drawing and some unusual features may |
182 |
not. |
183 |
|
184 |
@c **************************************************************** |
185 |
@node Compiling and Installing, Compatibility and Layout, GNUstep General Information, Top |
186 |
@section Compiling and Installing |
187 |
|
188 |
@menu |
189 |
* How do I compile GNUstep on my machine? :: |
190 |
* Are there any precompiled packages available?:: |
191 |
* What are these type and size warnings?:: |
192 |
* What are these import warnings?:: |
193 |
@end menu |
194 |
|
195 |
@node How do I compile GNUstep on my machine? , Are there any precompiled packages available?, Compiling and Installing, Compiling and Installing |
196 |
@subsection How do I compile GNUstep on my machine? |
197 |
|
198 |
Read the file @file{GNUstep-HOWTO}, which comes with the GNUstep |
199 |
distribution (gnustep-make), and also is available separately on the |
200 |
GNUstep web site. |
201 |
|
202 |
@node Are there any precompiled packages available?, What are these type and size warnings?, How do I compile GNUstep on my machine? , Compiling and Installing |
203 |
@subsection Are there any precompiled packages available? |
204 |
|
205 |
Check @url{http://www.gnustep.org/resources/sources.html} for links to |
206 |
RPMS. Debian packages are also available. You can check the debian |
207 |
site(s) for preconfigured GNUstep packages. Also check the BSD sites for |
208 |
GNUstep ports. |
209 |
|
210 |
@node What are these type and size warnings?, What are these import warnings?, Are there any precompiled packages available?, Compiling and Installing |
211 |
@subsection What are these type and size warnings? |
212 |
|
213 |
These warnings: |
214 |
@example |
215 |
/usr/bin/ld: warning: type and size of dynamic symbol |
216 |
`__objc_class_name_NSConstantString' are not defined |
217 |
@end example |
218 |
|
219 |
are a common occurence and are due to a mismatch between gcc and |
220 |
ld. They don't do any harm so they can be safely ignored. They have been |
221 |
fixed in GCC version 3.1. |
222 |
|
223 |
@node What are these import warnings?, , What are these type and size warnings?, Compiling and Installing |
224 |
@subsection What are these import warnings? |
225 |
|
226 |
Do you get these obnoxious warning whenever you compile an application, tool, |
227 |
or Objective-C program: |
228 |
|
229 |
@example |
230 |
warning: using `#import' is not recommended |
231 |
[...] |
232 |
@end example |
233 |
|
234 |
This is quite annoying for many people, particularly since almost any |
235 |
book on Objective-C you read recommends using #import instead of |
236 |
#include. If you are wondering why #import is deprecated, please |
237 |
search the web and the GCC and GNUstep mailing list archives - there |
238 |
are very precise and sound technical reasons. |
239 |
Due to these problems, the gcc maintainers are seriously considering |
240 |
removing support for #import altogether in the next release. |
241 |
|
242 |
If you still like to use #import, you can get rid of these warnings when |
243 |
you configure gnustep-make, with |
244 |
|
245 |
@example |
246 |
./configure --enable-import |
247 |
@end example |
248 |
|
249 |
But beware, this may not even work on future versions of the gcc compiler. |
250 |
|
251 |
|
252 |
@c **************************************************************** |
253 |
@node Compatibility and Layout, Troubleshooting, Compiling and Installing, Top |
254 |
@section Compatibility and Layout |
255 |
|
256 |
@menu |
257 |
* Can I run NeXT OPENSTEP or MacOSX programs on GNUstep?:: |
258 |
* Is GNUstep following Changes to OpenStep and MacOSX?:: |
259 |
* Do we have to have the NeXTstep look and feel?:: |
260 |
* What's up with the directory structure?:: |
261 |
* Why not use Frameworks?:: |
262 |
@end menu |
263 |
|
264 |
@node Can I run NeXT OPENSTEP or MacOSX programs on GNUstep?, Is GNUstep following Changes to OpenStep and MacOSX?, Compatibility and Layout, Compatibility and Layout |
265 |
@subsection Can I run NeXT OPENSTEP or MacOSX programs on GNUstep? |
266 |
|
267 |
You can't run these programs on GNUstep, but if you have the source |
268 |
code for the programs, you should be able to port them to GNUstep and |
269 |
compile them. Whether or not you will be able to run them depends on how |
270 |
complete GNUstep is at the time. |
271 |
|
272 |
@node Is GNUstep following Changes to OpenStep and MacOSX?, Do we have to have the NeXTstep look and feel?, Can I run NeXT OPENSTEP or MacOSX programs on GNUstep?, Compatibility and Layout |
273 |
@subsection Is GNUstep following Changes to OpenStep and MacOSX? |
274 |
|
275 |
Yes, gnustep-base already contains the documented changes in the |
276 |
Foundation library. GNUstep aims to be compatible with both the |
277 |
OpenStep specification and with MacOS-X. It should be easy to write |
278 |
an application that compiles cleanly under both GNUstep and Cocoa. |
279 |
|
280 |
@node Do we have to have the NeXTstep look and feel?, What's up with the directory structure?, Is GNUstep following Changes to OpenStep and MacOSX?, Compatibility and Layout |
281 |
@subsection Do we have to have the NeXTstep look and feel? |
282 |
|
283 |
GNUstep is aiming for something like the NeXTstep-3.3 look and feel. |
284 |
Although we don't want to force anyone into this, a lot of the power and |
285 |
ease of use comes from this feel. The look of GNUstep is something |
286 |
different - buttons and other widgets can look different but still act |
287 |
the same way. We hope to implement themes which will allow |
288 |
this. Actually we're hoping someone will volunteer to do it. |
289 |
|
290 |
@node What's up with the directory structure?, Why not use Frameworks?, Do we have to have the NeXTstep look and feel?, Compatibility and Layout |
291 |
@subsection What's up with the directory structure? |
292 |
|
293 |
First of all, GNUstep uses a slightly different directory structure than |
294 |
NeXT or MacOSX. Part of this is historical, part is because we can't do |
295 |
things the same way (see @pxref{Why not use Frameworks?}). |
296 |
|
297 |
GNUstep also stores libraries and binaries in subdirectories based on |
298 |
the operating system and cpu. This is so you can compile and store |
299 |
binaries for different systems in the same directory structure. MacOSX |
300 |
uses Fat binaries to accomplish this (another reason we do it |
301 |
differently). If you want, you can get rid of this using the |
302 |
@samp{--enable-flattened} option to the gnustep-make package. |
303 |
|
304 |
@node Why not use Frameworks?, , What's up with the directory structure?, Compatibility and Layout |
305 |
@subsection Why not use Frameworks? |
306 |
|
307 |
Frameworks are much more difficult to port and to use, and are very |
308 |
unnatural on a unix system - extremely unnatural on Windows. In a |
309 |
framework, the shared dynamic library is inside a framework wrapper |
310 |
directory. Because of this, the dynamic linker can't find it. |
311 |
|
312 |
We have frameworks, so how do we work around that? Well, we build dynamic |
313 |
links from a directory inside the dynamic linker path into the framework, |
314 |
which work, but then you can't move the framework anywhere else on |
315 |
the system, otherwise you break the link, and nothing will find the |
316 |
framework any longer! |
317 |
|
318 |
On systems without dynamic links, like Windows, we can't even do this! |
319 |
We have to copy the library from the framework into the dynamic linker |
320 |
path, but that is simply a shared library then! Absolutely @emph{no} |
321 |
difference. You put the dynamic library in a system directory in the |
322 |
dynamic linker path, and associate with that library a resource directory. |
323 |
|
324 |
I think OpenStep for Windows did that, and still called them frameworks. |
325 |
Oh well we can do the same then, and call our libraries frameworks. |
326 |
|
327 |
In a shared library, the shared dynamic library is in a directory which is |
328 |
in the path to the dynamic linker. the dynamic linker can find it very |
329 |
easily. this is how all shared and static libraries work on Unix systems, |
330 |
on Windows systems and possibly on most system at all. |
331 |
|
332 |
Moreover, the OpenStep API requires us to provide some stuff for |
333 |
frameworks, like creating and registering automatically a framework |
334 |
object each time a framework is used (linked at runtime, or linked into |
335 |
the app), and attaching to it the list of classes inside the framework - |
336 |
which are not particularly trivial to implement - they depend on playing |
337 |
with the linker and the object file format - and might produce troubles |
338 |
when porting. And we never use these facilities. |
339 |
|
340 |
For Apple MacOSX sure it's easier. They can modify |
341 |
the system linker, compiler, the system dynamical linker. They |
342 |
always know on which platform they are working (their own), etc. They can |
343 |
modify the system to support frameworks natively. Easy that way. |
344 |
|
345 |
But GNUstep is meant to run on many different platforms, platforms which |
346 |
we don't control (Windows, Sun Solaris, Darwin, GNU/Linux, Unix |
347 |
variants) and which have different linkers and do not support frameworks |
348 |
natively. On some systems it's difficult to just load a bundle or |
349 |
compile a shared library! |
350 |
|
351 |
So building the core libraries as 'libraries' means that it's much |
352 |
easier to port them, and it's much more difficult to break them. |
353 |
|
354 |
Sure, frameworks have a bundle of resources associated with it - but we |
355 |
can very easily associate a bundle of resource with a shared library, no |
356 |
reason why not. We are doing it. |
357 |
|
358 |
So please note that GNUstep libraries are meant to be much similar to |
359 |
MacOS X frameworks. They are composed of a shared library and |
360 |
associated with a bundle of resources. There is a difference in |
361 |
terminology, in where the resources are installed, and possibly a slight |
362 |
difference in the NSBundle API to get to the resource bundle (anyway, |
363 |
it's a one line difference between MacOSX and GNUstep, so it looks like |
364 |
very easy to #ifdef). |
365 |
|
366 |
In other words, GNUstep libraries are meant to basically do the same as |
367 |
frameworks do on MacOSX, but to be portable to strange platforms (such as |
368 |
Windows). |
369 |
|
370 |
|
371 |
@c **************************************************************** |
372 |
@node Troubleshooting, , Compatibility and Layout, Top |
373 |
@section Troubleshooting |
374 |
|
375 |
@menu |
376 |
* Problems compiling (loading shared libs):: |
377 |
* Problems compiling (GNUstep Internal Error):: |
378 |
* Problems with Alt key:: |
379 |
* Problems with gcc3:: |
380 |
* Problems with fonts:: |
381 |
@end menu |
382 |
|
383 |
@node Problems compiling (loading shared libs), Problems compiling (GNUstep Internal Error), Troubleshooting, Troubleshooting |
384 |
@subsection Problems compiling (loading shared libs) |
385 |
|
386 |
If you get something like |
387 |
|
388 |
@example |
389 |
plmerge: error while loading shared libraries: |
390 |
libgnustep-base.so.1: cannot open shared object file: No such file or directory |
391 |
@end example |
392 |
|
393 |
or this: |
394 |
|
395 |
@example |
396 |
Making all for service example... |
397 |
make[2]: *** [example.service/Resources/Info-gnustep.plist] Error 1 |
398 |
make[1]: *** [example.all.service.variables] Error 2 |
399 |
make[1]: Leaving directory `/home/multix/gnustep-gui-0.8.6/Tools' |
400 |
make: *** [internal-all] Error 2 |
401 |
@end example |
402 |
|
403 |
This means your GNU make is broken on your system. Try this: |
404 |
|
405 |
@example |
406 |
make LD_LIBRARY_PATH=$LD_LIBRARY_PATH |
407 |
@end example |
408 |
|
409 |
You could also be having problems with gcc. gcc 2.96 does not work |
410 |
(Mandrake 8.1, perhaps others). Use a different compiler, like gcc 3.x. |
411 |
|
412 |
@node Problems compiling (GNUstep Internal Error), Problems with Alt key, Problems compiling (loading shared libs), Troubleshooting |
413 |
@subsection Problems compiling (GNUstep Internal Error) |
414 |
|
415 |
If you get |
416 |
|
417 |
@example |
418 |
GNUSTEP Internal Error: |
419 |
The private GNUstep function to establish the argv and environment |
420 |
variables was not called. |
421 |
Please report the error to bug-gnustep@@gnu.org. |
422 |
@end example |
423 |
|
424 |
when compiling the gui library, there could be several things wrong. One |
425 |
is that you installed the gnustep-objc library, but the compiler |
426 |
found another Objecive-C library (like the one that came with gcc). If |
427 |
you are using gcc 3.x, DO NOT use the gnustep-objc library. |
428 |
|
429 |
@node Problems with Alt key, Problems with gcc3, Problems compiling (GNUstep Internal Error), Troubleshooting |
430 |
@subsection Problems with Alt key |
431 |
|
432 |
It's possible the Alt key is not where you think it is or is defined |
433 |
incorrectly. Try running the GSTest application, KeyboardInput test |
434 |
(located in the examples package |
435 |
at @url{ftp://ftp.gnustep.org/pub/gnustep/core}) to test it. |
436 |
See |
437 |
@url{http://www.gnustep.org/resources/documentation/gnustep-gui_6.html#SEC43} |
438 |
for information on how to change the settings. |
439 |
|
440 |
If you are using WindowMaker, it's possible it is grabing this key and |
441 |
using it for itself. To check, open Window Maker's WPrefs and go to the |
442 |
Mouse Preferences. Then use another value for the "Mouse grab modifier" |
443 |
(bottom right). That will allow you to alt-drag things. |
444 |
|
445 |
@node Problems with gcc3, Problems with fonts, Problems with Alt key, Troubleshooting |
446 |
@subsection Problems with gcc3 |
447 |
|
448 |
Don't forget you need to update binutils and libc also. |
449 |
|
450 |
@node Problems with fonts, , Problems with gcc3, Troubleshooting |
451 |
@subsection Problems with fonts |
452 |
|
453 |
Why do the characters get changed to asterisks ('*')? |
454 |
|
455 |
The problem you are getting come from the fact that the xlib backend |
456 |
(when not using Xft) will only use one fixed X font for a given |
457 |
font name. If the font "helvetica" is used inside of GNUstep the |
458 |
one selected X font, in your case |
459 |
"-*-helvetica-medium-r-normal--12-*-*-*-p-*-iso8859-1" is used. So |
460 |
only characters (or glyphs) that are available in that font can be |
461 |
displayed. The selection of which font name to use happens inside the |
462 |
font_cacher and is more or less at random (the order fonts are |
463 |
listed by the X system). |
464 |
|
465 |
You can influence the fonts that are available by setting: |
466 |
|
467 |
@example |
468 |
defaults write NSGlobalDomain GSFontMask "*iso8859-13" |
469 |
font_cacher |
470 |
@end example |
471 |
|
472 |
(or using a different character set, like iso8859-2). This is really a |
473 |
bug in GNUstep, but it hasn't been fixed yet. |
474 |
|
475 |
The other option is the use the art backend, which handles fonts much |
476 |
better. When compiling gnustep-back, start with |
477 |
|
478 |
@example |
479 |
./configure --enable-graphics=art |
480 |
@end example |
481 |
|
482 |
@node No Makefile, , Problems with gcc3, Troubleshooting |
483 |
@subsection No Makefile |
484 |
|
485 |
I tried to compile something and I get: |
486 |
|
487 |
@example |
488 |
GNUmakefile:27: /Makefiles/common.make: No such file or directory |
489 |
GNUmakefile:39: /Makefiles/aggregate.make: No such file or directory |
490 |
gmake: *** No rule to make target `/Makefiles/aggregate.make'. Stop. |
491 |
@end example |
492 |
|
493 |
Make sure you have installed the gnustep-make package and also type: |
494 |
|
495 |
@example |
496 |
source /usr/GNUstep/System/Library/Makefiles/GNUstep.sh |
497 |
@end example |
498 |
|
499 |
You can put this line in your @file{.profile} or @file{.bash_profile} file |
500 |
so that it is done automatically when you log in. |
501 |
|
502 |
@bye |
503 |
\bye |