1 /*
2      ATP QWK MAIL READER FOR READING AND REPLYING TO QWK MAIL PACKETS.
3      Copyright (C) 1992, 1993, 1997  Thomas McWilliams
4      Copyright (C) 1990  Rene Cougnenc
5 
6      This program is free software; you can redistribute it and/or modify
7      it under the terms of the GNU General Public License as published by
8      the Free Software Foundation; either version 2, or (at your option)
9      any later version.
10 
11      This program is distributed in the hope that it will be useful,
12      but WITHOUT ANY WARRANTY; without even the implied warranty of
13      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14      GNU General Public License for more details.
15 
16      You should have received a copy of the GNU General Public License
17      along with this program; if not, write to the Free Software
18      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20 
21 /*
22 text.c
23 */
24 
25 /*
26  *  ATTENTION: There are two French language sections here. One uses
27  *  the DOS character set and one uses the Linux character set. DO
28  *  NOT edit the DOS set under Linux or the Linux set under DOS.
29  *  It won't work.
30  *
31  *  ATTENTION: Il y a deux sections dessous pour la langue francais.
32  *  L'un pour MS-DOS, et l'autre pour le Linux. Ne pas editer l'un avec
33  *  un editeur pour l'autre systeme. Ca ne marchera pas !
34  *                                   '
35  */
36 
37 #include <stdio.h>
38 #include <string.h>
39 #include "reader.h"
40 #include "readlib.h"
41 #include "ansi.h"
42 
43 /*
44  * terms - (string array) the text message which is displayed by showterms.
45  */
46 const char CONSPTR terms[] = {
47 
48      "ATP reader to read and reply to messages in QWK format mail packets.",
49      "Copyright (c) 1992, 1993, 1997  Thomas McWilliams ",
50      " ",
51      "This program is free software; you can redistribute it and/or modify",
52      "it under the terms of the GNU General Public License as published by",
53      "the Free Software Foundation; either version 2, or (at your option)",
54      "any later version. YOU MAY NOT DENY to others the freedom which you",
55      "have been granted, including FULL ACCESS TO THE SOURCE CODE for ATP",
56      "or ANY DERIVED WORK.",
57      " ",
58      "This program is distributed in the hope that it will be useful,",
59      "but WITHOUT ANY WARRANTY; without even the implied warranty of",
60      "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the",
61      "GNU General Public License for more details.",
62      " ",
63      "You should have received a copy of the GNU General Public License",
64      "along with this program; if not, write to the Free Software",
65      "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.",
66      " ",
67      "The author of ATP may be reached by posting messages in the",
68      "RIME or Fidonet OFFLINE conference and by e-mail at:",
69      " ",
70      "        thomas.mcwilliams@f615.n109.z1.fidonet.org",
71      " ",
72      NULL
73      } ;
74 
75 /*
76                    Language-dependant file
77 
78 
79   All messages tous les messages displayed affich�s by par this program
80   ce programme are sont in this file dans ce fichier :-)
81 
82 */
83 
84 /*<<<<< Define FRENCH or GERMAN or ENGLISH  in Makefile's CFLAGS >>>>>*/
85 
86 #if !defined(FRENCH) && !defined(GERMAN) && !defined(ENGLISH)
87 #define ENGLISH
88 #endif
89 
90 /*=========================================================================*
91  *                                                                         *
92  *      EEEEEEE  NN   NN   GGGGG   LL       IIII   SSSSS   HH   HH         *
93  *      EE       NNN  NN  GG   GG  LL        II   SS   SS  HH   HH         *
94  *      EEEE     NNNN NN  GG       LL        II    SSSS    HHHHHHH         *
95  *      EE       NN NNNN  GG  GGG  LL        II       SS   HH   HH         *
96  *      EE       NN  NNN  GG   GG  LL        II   SS   SS  HH   HH         *
97  *      EEEEEEE  NN   NN   GGGG G  LLLLLLL  IIII   SSSSS   HH   HH         *
98  *                                                                         *
99  *=========================================================================*/
100 
101 #ifdef ENGLISH
102 /*
103  * txt - (string array) error messages in French or English.
104  */
105 const char CONSPTR txt[]=
106 {
107 /*    0  */   "Ren� Cougnenc 1990",
108 /*    1  */   "Memory allocation failed!",
109 /*    2  */   "Warning !",
110 /*    3  */   "You have replies for",
111 /*    4  */   "Pack them ?",
112 /*    5  */   "Loading",
113 /*    6  */   "No mail found",
114 /*    7  */   "Try the 'review' command...",
115 /*    8  */   "Extracting Messages...",
116 /*    9  */   "empty",
117 /*   10  */   "Reader",                              /* 1st default prompt */
118 /*   11  */   "'New' packet seems to be older than existing one",
119 /*   12  */   "Do you really want to add the messages",
120 /*   13  */   "No bbs found",
121 /*   14  */   "Error in CONTROL.DAT.",
122 /*   15  */   "First Message !",
123 /*   16  */   "Seek Error",
124 /*   17  */   "End of messages here.",
125 /*   18  */   "Read Error",
126 /*   19  */   " From : ",          /* This is the message header.        */
127 /*   20  */   "   To : ",          /* Fields must be correctly aligned ! */
128 /*   21  */   "Subj. : ",
129 /*   22  */   " Date : ",
130 /*   23  */   "Number : ",
131 /*   24  */   " Ref.# : ",
132 /*   25  */   "  Conf : ",
133 /*   26  */   "  Time : ",
134 /*   27  */   "PRIVATE MESSAGE",
135 /*   28  */   "Unknown conference...",
136 /*   29  */   "Conference",
137 /*   30  */   "joined",
138 /*   31  */   "No new mail",
139 /*   32  */   "Enter 'n' in any field to abort entry of this message.",
140 /*   33  */   "Message aborted",
141 /*   34  */   "Entry too long, 25 character QWK limit.",
142 /*   35  */   "Too long !  R = Receiver only, N = none = public msg.",
143 /*   36  */   "Receiver only",
144 /*   37  */   "Public message",
145 /*   38  */   "Calling Editor",
146 /*   39  */   "Save this message in what file? ",
147 /*   40  */   "Aborted",
148 /*   41  */   "Message",
149 /*   42  */   "Saved in",
150 /*   43  */   "Appended to",
151 /*   44  */   "No mail in conference",
152 /*   45  */   "New BBS in this base.",
153 /*   46  */   "Mail packet older than last base update",
154 /*   47  */   "Mail not extracted",
155 /*   48  */   "Unable to remove file",
156 /*   49  */   "Unable to read file",
157 /*   50  */   "Unable to create file",
158 /*   51  */   "Unable to open file",
159 /*   52  */   "Unable to open configuration file",
160 /*   53  */   "Reading Configuration file",
161 /*   54  */   "Error in configuration file",
162 /*   55  */   "in line",
163 /*   56  */   "Line",
164 /*   57  */   "Cleaning",
165 /*   58  */   "Error Reading file",
166 /*   59  */   "Quoting message with",
167 /*   60  */   "More",                      /* This is the 'more' message   */
168 /*   61  */   "Y/N",                       /* This is the 'yes/no' message */
169 /*   62  */   "File",                      /* '.. the file..." */
170 /*   63  */   "Already exists",
171 /*   64  */   "Delete it ?",
172 /*   65  */   "Packing Replies in",
173 /*   66  */   "Last Read pointer updated",
174 /*   67  */   "No file",
175 /*   68  */   "Hey !",
176 /*   69  */   "There is no BBS loaded !",
177 /*   70  */   "Use 'review' 'load' or 'help' command",
178 /*   71  */   "Adding messages and creating Indexes",
179 /*   72  */   "Message too long, sorry...",
180 /*   73  */   "Error writing file",
181 /*   74  */   "Error writing index file",
182 /*   75  */   "Saving message",
183 /*   76  */   "Adding message to file",
184 /*   77  */   "Creating file",
185 /*   78  */   "Conferences available on",
186 /*   79  */   "Inactive",
187 /*   80  */   "Active",
188 /*   81  */   "Number out of range !",
189 /*   82  */   "Valid messages are",
190 /*   83  */   "to",
191 /*   84  */   "Ansi output",
192 /*   85  */   "on",
193 /*   86  */   "off",
194 /*   87  */   "Usage :",
195 /*   88  */   "load bbs_name",
196 /*   89  */   "review bbs_name",
197 /*   90  */   "Conference_Number",
198 /*   91  */   "or",
199 /*   92  */   "Conference_Name",
200 /*   93  */   "type 'conf' to list active conferences",
201 /*   94  */   "setvbuf() failed in function ",
202 /*   95  */   "Unauthorized Command !\n",
203 /*   96  */   " ",  /* Dear, */
204 /*   97  */   "  In a message on",
205 /*   98  */   "wrote",
206 /*   99  */   "you wrote to me",
207 /*  100  */   "to",
208 /*  101  */   "Automatic Header",
209 /*  102  */   "Selective erasing of conference archives",
210 /*  103  */   "Personal Mail",
211 /*  104  */   "Reply Mail",
212 /*  105  */   "KILLED MESSAGE",
213 /*  106  */   "[Y/n]",
214 /*  107  */   "[y/N]",
215 /*  108  */   " ",
216 /*  109  */   "error switch() case",
217 /*  110  */   "Error reading atprc",
218 /*  111  */   "Invalid file name"
219 };
220 
221 /*
222  * hlp, (string array) help messages in French or English.
223  */
224 static const char CONSPTR hlp[] =
225 {
226  /*    0  */   "",
227 #ifdef UNIXCMDS
228 /*     1  */   " Some of the ATP commands ( type 'man atp' for indepth help ):",
229 #else /* non unix */
230 /*     1  */   " Some of the ATP commands ( read atp.doc for indepth help ):",
231 #endif
232  /*    2  */   " Quit program"                                         ,
233  /*    3  */   " Kill a reply"                                         ,
234  /*    4  */   " System Command"                                       ,
235  /*    5  */   " Read Next message"                                    ,
236  /*    6  */   " Read Previous message"                                ,
237  /*    7  */   " Read Again current message"                           ,
238  /*    8  */   " Enter a message in current conference"                ,
239  /*    9  */   " Join a conference ( by name or by number )"           ,
240  /*   10  */   " Toggle ansi / tty output"                             ,
241  /*   11  */   " Join Next conference"                                 ,
242  /*   12  */   " Reply to current message"                             ,
243  /*   13  */   " [ file ] Save message in text file"                   ,
244  /*   14  */   " List Conferences"                                     ,
245  /*   15  */   " Selectively delete conference message archives"       ,
246  /*   16  */   " Load new mail from QWK packet into message base"      ,
247  /*   17  */   " Read mail in the base  ( `rev' is the short form )"   ,
248  /*   18  */   " List new files  (`welcome' and `news' also valid )"   ,
249  /*   19  */   " Display tagline help menu"                            ,
250  /*   20  */   " Display last news"                                    ,
251  /*   21  */   " First Screen of the BBS."                             ,
252  /*   22  */   " Toggle Automatic Reply Header on / off"               ,
253  /*   23  */   " List QWK packets in mail spool directory"             ,
254  /*   24  */   " Scan headers forward from current message"            ,
255  /*   25  */   " Find text 'foobar'"
256 
257  };
258 
259 /*
260  * taghlp - (string array) help messages for the tagline manager.
261  */
262 const char CONSPTR taghlp[] =
263 {
264  /*    0  */   "",
265  /*    1  */   " Tagline Commands for ATP tagline manager: ",
266  /*    2  */   "display list of taglines",
267  /*    3  */   "display current tagline",
268  /*    4  */   "select numbered tagline from list",
269  /*    5  */   "select a random tagline",
270  /*    6  */   "swap between volatile and persistent tagline",
271  /*    7  */   "toggle auto tagline selection ON/OFF",
272  /*    8  */   "when followed by sentence, defines volatile tagline",
273  /*    9  */   "displays this menu",
274  /*   10  */   "toggle Fidonet style tagline ON/OFF",
275  /*   11  */   "steal a PCBoard style tagline",
276  /*   12  */   "enter a new tagline by typing it in"
277 };
278 
279 const char CONSPTR Months[] =
280 {
281         "January", "February", "March", "April" ,"May", "June", "July",
282         "August"  , "September", "October",  "November" , "December"
283 };
284 
285 #endif  /* ENGLISH */
286 /*
287  * Title - prints opening ATP banner.
288  */
289 void
Title(void)290 Title(void)
291 {
292 white();
293 high();
294 printf("\n\n\n");
295 
296 #define grBGN1 "\t   \016x%s%s"
297 #define grBGN2 "\t   \016x\017%s%s"
298 #define grBGN3 "\t   \016x%s%s  %s"
299 #define grEND1 "\016x\017\n"
300 #define grEND2 "\016xaa\017\n"
301 
302 #if 0
303 #define grON    "\016"
304 #define grOFF   "\017"
305 #define grX1     grON "x"
306 #define grX2     grON "x"  grOFF
307 #define grX3     grON "xaa" grOFF
308 #define grBGN1 "\t   " grX1
309 #define grBGN2 "\t   " grX2
310 #define grEND1 grX1  "\n"
311 #define grEND2 grX3  "\n"
312 #endif
313 
314 if(graphics){
315 printf("\t   \016lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk\017\n");
316 printf(grBGN3 , "   lqqqqqqqk  lqqqqqqqk  lqqqqqqqk   \017Ver.", ATPVER , grEND1 );
317 printf(grBGN1 , "   x lqqqk xa mqqk lqqja x lqqqk xa              ", grEND1 );
318 printf(grBGN1 , "   x xa  x xa  aax xaaaa x xa  x xa              ", grEND2 );
319 printf(grBGN1 , "   x mqqqj xa    x xa    x mqqqj xa              ", grEND2 );
320 printf(grBGN1 , "   x lqqqk xa    x xa    x lqqqqqja              ", grEND2 );
321 printf(grBGN1 , "   x xaaax xa    x xa    x xaaaaaaa              ", grEND2 );
322 printf(grBGN1 , "   mqja  mqja    mqja    mqja                    ", grEND2 );
323 printf(grBGN1 , "     aa    aa      aa      aa \017QWK PACKET READER  ", grEND2 );
324 printf(grBGN2 , "                                                 ", grEND2 );
325 printf(grBGN2 , "                                                 ", grEND2 );
326 printf(grBGN2 , " Copyright 1992,1993,1997 (c) Thomas McWilliams  ", grEND2 );
327 printf(grBGN2 , "                                                 ", grEND2 );
328 printf(grBGN2 , "   Free Software subject to terms of Free Soft-  ", grEND2 );
329 printf(grBGN2 , "   ware Foundation GNU General Public License.   ", grEND2 );
330 printf(grBGN2 , "   ABSOLUTELY NO WARRANTY,  type `show terms'    ", grEND2 );
331 printf("\t   \016mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqjaa\017\n");
332 printf("\t   \016   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\017\n");
333 /*@-strictops */
334 }else if(get_charset() != CHRDOS) { /* latin1 or 7bit character set without VT102 graphics */
335 /*@=strictops */
336 
337 printf("\t   +-------------------------------------------------+\n");
338 printf("\t   |    ======    =========   ========    Ver.%s |\n", ATPVER);
339 printf("\t   |   ===  ===   =========   ==     ==              |\n");
340 printf("\t   |   ==    ==      ===      ==     ==              |\n");
341 printf("\t   |   ========      ===      ========               |\n");
342 printf("\t   |   ==    ==      ===      ==                     |\n");
343 printf("\t   |   ==    ==      ===      ==                     |\n");
344 printf("\t   |   ==    ==      ===      ==  QWK PACKET READER  |\n");
345 printf("\t   |                                                 |\n");
346 printf("\t   |                                                 |\n");
347 printf("\t   | Copyright 1992,1993,1997 (c) Thomas McWilliams  |\n");
348 printf("\t   |                                                 |\n");
349 printf("\t   |   Free Software subject to terms of Free Soft-  |\n");
350 printf("\t   |   ware Foundation GNU General Public License.   |\n");
351 printf("\t   |   ABSOLUTELY NO WARRANTY,  type `show terms'    |\n");
352 printf("\t   +-------------------------------------------------+\n\n");
353 } else {  /* msdos character set */
354 printf("\t   �������������������������������������������������Ŀ\n");
355 printf("\t   �   �������Ŀ  �������Ŀ  �������Ŀ    Ver.%s �\n", ATPVER );
356 printf("\t   �   � ���Ŀ �� ��Ŀ ���ٱ � ���Ŀ ��              �\n");
357 printf("\t   �   � ��  � ��  ��� ����� � ��  � ��              ���\n");
358 printf("\t   �   � ����� ��    � ��    � ����� ��              ���\n");
359 printf("\t   �   � ����  ��    � ��    � ������ٱ              ���\n");
360 printf("\t   �   � ����� ��    � ��    � ��������              ���\n");
361 printf("\t   �   ��ٱ  ��ٱ    ��ٱ    ��ٱ                    ���\n");
362 printf("\t   �     ��    ��      ��      ��  QWK PACKET READER ���\n");
363 printf("\t   �                                                 ���\n");
364 printf("\t   �                                                 ���\n");
365 printf("\t   �  Copyright 1992,1993,1997 (c) Thomas McWilliams ���\n");
366 printf("\t   �                                                 ���\n");
367 printf("\t   �   Free Software subject to terms of Free Soft-  ���\n");
368 printf("\t   �   ware Foundation GNU General Public License.   ���\n");
369 printf("\t   �   ABSOLUTELY NO WARRANTY,  type `show terms'    ���\n");
370 printf("\t   ��������������������������������������������������ٱ�\n");
371 printf("\t      ��������������������������������������������������\n");
372 }
373   clear();
374 }
375 
376 
377 
378 /*=========================================================================*
379  *                                                                         *
380  *       FFFFFFF  RRRRRR   EEEEEEE  NN   NN   CCCCC   HH   HH              *
381  *       FF       RR   RR  EE       NNN  NN  CC   CC  HH   HH              *
382  *       FFFF     RR   RR  EEEE     NNNN NN  CC       HHHHHHH              *
383  *       FF       RRRRRR   EE       NN NNNN  CC       HH   HH              *
384  *       FF       RR  RR   EE       NN  NNN  CC   CC  HH   HH              *
385  *       FF       RR   RR  EEEEEEE  NN   NN   CCCCC   HH   HH              *
386  *                                                                         *
387  *=========================================================================*/
388 
389 #ifdef FRENCH
390 
391 #ifdef LATIN1    /* use ISO high ASCII characters */
392 
393 const char CONSPTR txt[]=
394 {
395 /*    0  */   "Ren� Cougnenc 1990"   ,
396 /*    1  */   "Allocation m�moire refus�e !"  ,
397 /*    2  */   "Attention !",
398 /*    3  */   "Vous avez des r�ponses pour",
399 /*    4  */   "Les compacter ?",
400 /*    5  */   "Chargement de",
401 /*    6  */   "Pas de courrier trouv�",
402 /*    7  */   "Essayez la commande 'revois'...",
403 /*    8  */   "D�compactage des messages...",
404 /*    9  */   "vide",
405 /*   10  */   "Reader",                              /* 1st default prompt */
406 /*   11  */   "Le 'Nouveau' paquet semble plus vieux que la derni�re mis� � jour",
407 /*   12  */   "Voulez-vous vraiment rajouter les messages",
408 /*   13  */   "Pas de BBS trouv�",
409 /*   14  */   "Erreur dans CONTROL.DAT.",
410 /*   15  */   "Premier message !",
411 /*   16  */   "Seek Error",
412 /*   17  */   "Plus de messages ici.",
413 /*   18  */   "Erreur de lecture",
414 
415 /*   19  */   "Auteur: ",          /* This is the message header.        */
416 /*   20  */   " Pour : ",          /* Fields must be correctly aligned ! */
417 /*   21  */   "Sujet : ",
418 /*   22  */   " Date : ",
419 /*   23  */   "Num�ro : ",
420 /*   24  */   "R�f.N� : ",
421 /*   25  */   "  Conf : ",
422 /*   26  */   " Heure : ",
423 /*   27  */   "MESSAGE  PRIVE",
424 /*   28  */   "Conf�rence inconnue...",
425 /*   29  */   "Conf�rence",
426 /*   30  */   "rejointe",
427 /*   31  */   "Pas de nouveaux messages",
428 /*   32  */   "Entrez 'n' pour abandonner la saisie de ce message.",
429 /*   33  */   "Message abandonn�",
430 /*   34  */   "Entr�e trop longue !  25 caract�res max.",
431 /*   35  */   "Trop long !  R = Receceveur seul, N = message public.",
432 /*   36  */   "Message PRIVE",
433 /*   37  */   "Message Public",
434 /*   38  */   "Appel de l'�diteur",
435 /*   39  */   "Sauver ce message dans le fichier : ",
436 /*   40  */   "Abandon",
437 /*   41  */   "Message",
438 /*   42  */   "Sauv� dans",
439 /*   43  */   "Rajout� �",
440 /*   44  */   "pas de message dans la conf�rence",
441 /*   45  */   "Nouveau BBS dans cette base.",
442 /*   46  */   "Paquet QWK plus ancien que la derni�re mise � jour",
443 /*   47  */   "Courrier non trait�",
444 /*   48  */   "Impossible de supprimer le fichier",
445 /*   49  */   "Impossible de lire le fichier",
446 /*   50  */   "Impossible de cr�er le fichier",
447 /*   51  */   "Impossible d'ouvrir le fichier",
448 /*   52  */   "Impossible d'ouvrir le fichier de configuration",
449 /*   53  */   "Lecture du fichier de configuration",
450 /*   54  */   "Error dans le fichier de configuration",
451 /*   55  */   "� la ligne",
452 /*   56  */   "Ligne",
453 /*   57  */   "Nettoyage de",
454 /*   58  */   "Erreur de lecture sur le fichier",
455 /*   59  */   "Annotation du message avec",
456 /*   60  */   "Encore",                      /* This is the 'more' message   */
457 /*   61  */   "O/N",                       /* This is the 'yes/no' message */
458 /*   62  */   "Le fichier",                      /* '.. the file..." */
459 /*   63  */   "existe d�j�",
460 /*   64  */   "Le supprimer ?",
461 /*   65  */   "Compactage des r�ponses dans",
462 /*   66  */   "Pointeur de lecture mis � jour",
463 /*   67  */   "Pas de fichier",
464 /*   68  */   "Hola !",
465 /*   69  */   "Il n'y a pas de BBS charg� !",
466 /*   70  */   "Utilisez les commandes 'revois' 'load' ou 'aide'",
467 /*   71  */   "Ajout des messages � la base et cr�ation des index",
468 /*   72  */   "D�sol�, il y a un message trop gros...",
469 /*   73  */   "Erreur en �criture du fichier",
470 /*   74  */   "Error d'�criture du fichier index",
471 /*   75  */   "Sauvegarde du message",
472 /*   76  */   "Ajout du message au fichier",
473 /*   77  */   "Cr�ation du fichier",
474 
475 /*   78  */   "Liste des conf�rences sur",
476 /*   79  */   "Inactive",
477 /*   80  */   "Active",
478 
479 /*   81  */   "Nombre hors limites !",
480 /*   82  */   "Les messages valides vont de",
481 /*   83  */   "�",
482 
483 /*   84  */   "Mode Ansi",
484 /*   85  */   "en service",
485 /*   86  */   "hors service",
486 
487 /*   87  */   "Syntaxe :",
488 /*   88  */   "load nom_du_serveur",
489 /*   89  */   "revois nom_du_serveur",
490 /*   90  */   "Num�ro_de_conf�rence",
491 /*   91  */   "ou",
492 /*   92  */   "Nom_de_conf�rence",
493 /*   93  */   "tapez 'conf' pour la liste des conf�rences",
494 
495 /*   94  */   "setvbuf() refus� dans fonction ",
496 /*   95  */   "Commande Interdite !\n"
497               "Vous devez compiler vous-m�me le programme pour cela !\n",
498 
499 /*   96  */   "Cher",
500 /*   97  */   "Dans un message du",
501 /*   98  */   "vous �crivez",
502 /*   99  */   "vous m'�crivez",
503 /*  100  */   "destin� �",
504 /*  101  */   "En-t�te automatique",
505 /*  102  */   "Effacement s�lectif des conf�rences",
506 /*  103  */   "Personnel" ,
507 /*  104  */   "R�ponses",
508 /*  105  */   "MESSAGE TUE",
509 /*  106  */   "[O/n]",
510 /*  107  */   "[o/N]",
511 /*  108  */   " ",
512 /*  109  */   "Erreur switch() case",
513 /*  110  */   "Erreur dans atprc",
514 /*  111  */   "Erreur nom de fichier"
515 };
516 
517 const char CONSPTR hlp[] =
518 {
519  /*    0  */   "",
520  /*    1  */   "Commandes disponibles :"                              ,
521  /*    2  */   "Quitter le programme, retour au syst�me"              ,
522  /*    3  */   "Tuer une r�ponse"                                     ,
523  /*    4  */   "Commande syst�me"                                     ,
524  /*    5  */   "Lecture du message suivant"                           ,
525  /*    6  */   "Lecture du message pr�c�dant"                         ,
526  /*    7  */   "R�affichage du message courant"                       ,
527  /*    8  */   "Entrer un message dans la conf�rence courante"        ,
528  /*    9  */   "Rejoindre une conf�rence. ( par nom ou par num�ro )"  ,
529  /*   10  */   "Bascule affichage Ansi-Couleur / tty - monochrome"    ,
530  /*   11  */   "Rejoindre la conf�rence suivante"                     ,
531  /*   12  */   "R�pondre au message courant"                          ,
532  /*   13  */   "[ fichier ] Sauver message dans fichier (mode append)",
533  /*   14  */   "Liste des conf�rences disponibles"                    ,
534  /*   15  */   "Effacement de(s) conf�rence(s)"                       ,
535  /*   16  */   "Charge le nouveau courrier d'un serveur"              ,
536  /*   17  */   "Lire le mail d'un serveur dans la base"               ,
537  /*   18  */   "Nouveaux fichiers pour cette session"                 ,
538  /*   19  */   "Remet la signature normale. (tag ?  = aide)"          ,
539  /*   20  */   "Affiche les derni�res nouvelles s'il y en a..."       ,
540  /*   21  */   "Affiche le logo du serveur"                           ,
541  /*   22  */   "En-t�te de lettre automatique oui / non"              ,
542  /*   23  */   "Liste des paquets QWK "                               ,
543  /*   24  */   "Scruter les en-t�tes des messages"                    ,
544  /*   25  */   "Chercher le mot 'foobar' "
545 
546  };
547 
548 const char CONSPTR taghlp[] =
549 {
550  /*    0  */   "",
551  /*    1  */   " Tagline Commands for ATP tagline manager: ",
552  /*    2  */   "display list of taglines",
553  /*    3  */   "display current tagline",
554  /*    4  */   "select numbered tagline from list",
555  /*    5  */   "select a random tagline",
556  /*    6  */   "swap between volatile and persistent tagline",
557  /*    7  */   "toggle auto tagline selection ON/OFF",
558  /*    8  */   "when followed by sentence, defines volatile tagline",
559  /*    9  */   "displays this menu",
560  /*   10  */   "toggle Fidonet style tagline ON/OFF",
561  /*   11  */   "steal a PCBoard style tagline",
562  /*   12  */   "enter a new tagline by typing it in"
563 };
564 
565 const char CONSPTR Months[] =
566 {
567         "Janvier", "F�vrier", "Mars", "Avril" ,"Mai", "Juin", "Juillet",
568         "Ao�t"  , "Septembre", "Octobre",  "Novembre" , "Decembre"
569 };
570 
571 
572 #else     /* DOS charcter set. */
573 
574 const char CONSPTR txt[]=
575 {
576 /*    0  */   "Ren� Cougnenc 1990"   ,
577 /*    1  */   "Allocation m�moire refus�e !"  ,
578 /*    2  */   "Attention !",
579 /*    3  */   "Vous avez des r�ponses pour",
580 /*    4  */   "Les compacter ?",
581 /*    5  */   "Chargement de",
582 /*    6  */   "Pas de courrier trouv�",
583 /*    7  */   "Essayez la commande 'revois'...",
584 /*    8  */   "D�compactage des messages...",
585 /*    9  */   "vide",
586 /*   10  */   "Reader",                              /* 1st default prompt */
587 /*   11  */   "Le 'Nouveau' paquet semble plus vieux que la derni�re mis� � jour",
588 /*   12  */   "Voulez-vous vraiment rajouter les messages",
589 /*   13  */   "Pas de BBS trouv�",
590 /*   14  */   "Erreur dans CONTROL.DAT.",
591 /*   15  */   "Premier message !",
592 /*   16  */   "Seek Error",
593 /*   17  */   "Plus de messages ici.",
594 /*   18  */   "Erreur de lecture",
595 
596 /*   19  */   "Auteur: ",          /* This is the message header.        */
597 /*   20  */   " Pour : ",          /* Fields must be correctly aligned ! */
598 /*   21  */   "Sujet : ",
599 /*   22  */   " Date : ",
600 /*   23  */   "Num�ro : ",
601 /*   24  */   "R�f.N� : ",
602 /*   25  */   "  Conf : ",
603 /*   26  */   " Heure : ",
604 /*   27  */   "MESSAGE  PRIVE",
605 /*   28  */   "Conf�rence inconnue...",
606 /*   29  */   "Conf�rence",
607 /*   30  */   "rejointe",
608 /*   31  */   "Pas de nouveaux messages",
609 /*   32  */   "Entrez 'n' pour abandonner la saisie de ce message.",
610 /*   33  */   "Message abandonn�",
611 /*   34  */   "Entr�e trop longue !  25 caract�res max.",
612 /*   35  */   "Trop long !  R = Receceveur seul, N = message public.",
613 /*   36  */   "Message PRIVE",
614 /*   37  */   "Message Public",
615 /*   38  */   "Appel de l'�diteur",
616 /*   39  */   "Sauver ce message dans le fichier : ",
617 /*   40  */   "Abandon",
618 /*   41  */   "Message",
619 /*   42  */   "Sauv� dans",
620 /*   43  */   "Rajout� �",
621 /*   44  */   "pas de message dans la conf�rence",
622 /*   45  */   "Nouveau BBS dans cette base.",
623 /*   46  */   "Paquet QWK plus ancien que la derni�re mise � jour",
624 /*   47  */   "Courrier non trait�",
625 /*   48  */   "Impossible de supprimer le fichier",
626 /*   49  */   "Impossible de lire le fichier",
627 /*   50  */   "Impossible de cr�er le fichier",
628 /*   51  */   "Impossible d'ouvrir le fichier",
629 /*   52  */   "Impossible d'ouvrir le fichier de configuration",
630 /*   53  */   "Lecture du fichier de configuration",
631 /*   54  */   "Error dans le fichier de configuration",
632 /*   55  */   "� la ligne",
633 /*   56  */   "Ligne",
634 /*   57  */   "Nettoyage de",
635 /*   58  */   "Erreur de lecture sur le fichier",
636 /*   59  */   "Annotation du message avec",
637 /*   60  */   "Encore",                      /* This is the 'more' message   */
638 /*   61  */   "O/N",                       /* This is the 'yes/no' message */
639 /*   62  */   "Le fichier",                      /* '.. the file..." */
640 /*   63  */   "existe d�j�",
641 /*   64  */   "Le supprimer ?",
642 /*   65  */   "Compactage des r�ponses dans",
643 /*   66  */   "Pointeur de lecture mis � jour",
644 /*   67  */   "Pas de fichier",
645 /*   68  */   "Hola !",
646 /*   69  */   "Il n'y a pas de BBS charg� !",
647 /*   70  */   "Utilisez les commandes 'revois' 'load' ou 'aide'",
648 /*   71  */   "Ajout des messages � la base et cr�ation des index",
649 /*   72  */   "D�sol�, il y a un message trop gros...",
650 /*   73  */   "Erreur en �criture du fichier",
651 /*   74  */   "Error d'�criture du fichier index",
652 /*   75  */   "Sauvegarde du message",
653 /*   76  */   "Ajout du message au fichier",
654 /*   77  */   "Cr�ation du fichier",
655 
656 /*   78  */   "Liste des conf�rences sur",
657 /*   79  */   "Inactive",
658 /*   80  */   "Active",
659 
660 /*   81  */   "Nombre hors limites !",
661 /*   82  */   "Les messages valides vont de",
662 /*   83  */   "�",
663 
664 /*   84  */   "Mode Ansi",
665 /*   85  */   "en service",
666 /*   86  */   "hors service",
667 
668 /*   87  */   "Syntaxe :",
669 /*   88  */   "load nom_du_serveur",
670 /*   89  */   "revois nom_du_serveur",
671 /*   90  */   "Num�ro_de_conf�rence",
672 /*   91  */   "ou",
673 /*   92  */   "Nom_de_conf�rence",
674 /*   93  */   "tapez 'conf' pour la liste des conf�rences",
675 
676 /*   94  */   "setvbuf() refus� dans fonction ",
677 /*   95  */   "Commande Interdite !\n"
678               "Vous devez compiler vous-m�me le programme pour cela !\n",
679 
680 /*   96  */   "Cher",
681 /*   97  */   "Dans un message du",
682 /*   98  */   "vous �crivez",
683 /*   99  */   "vous m'�crivez",
684 /*  100  */   "destin� �",
685 /*  101  */   "En-t�te automatique",
686 /*  102  */   "Effacement s�lectif des conf�rences",
687 /*  103  */   "Personnel" ,
688 /*  104  */   "R�ponses",
689 /*  105  */   "MESSAGE TUE",
690 /*  106  */   "[O/n]",
691 /*  107  */   "[o/N]",
692 /*  108  */   " ",
693 /*  109  */   "Erreur switch() case",
694 /*  110  */   "Erreur dans atprc",
695 /*  111  */   "Erreur nom de fichier"
696 };
697 
698 const char CONSPTR hlp[] =
699 {
700  /*    0  */   "",
701  /*    1  */   "Commandes disponibles :"                              ,
702  /*    2  */   "Quitter le programme, retour au syst�me"              ,
703  /*    3  */   "Tuer une r�ponse"                                     ,
704  /*    4  */   "Commande syst�me"                                     ,
705  /*    5  */   "Lecture du message suivant"                           ,
706  /*    6  */   "Lecture du message pr�c�dant"                         ,
707  /*    7  */   "R�affichage du message courant"                       ,
708  /*    8  */   "Entrer un message dans la conf�rence courante"        ,
709  /*    9  */   "Rejoindre une conf�rence. ( par nom ou par num�ro )"  ,
710  /*   10  */   "Bascule affichage Ansi-Couleur / tty - monochrome"    ,
711  /*   11  */   "Rejoindre la conf�rence suivante"                     ,
712  /*   12  */   "R�pondre au message courant"                          ,
713  /*   13  */   "[ fichier ] Sauver message dans fichier (mode append)",
714  /*   14  */   "Liste des conf�rences disponibles"                    ,
715  /*   15  */   "Effacement de(s) conf�rence(s)"                       ,
716  /*   16  */   "Charge le nouveau courrier d'un serveur"              ,
717  /*   17  */   "Lire le mail d'un serveur dans la base"               ,
718  /*   18  */   "Nouveaux fichiers pour cette session"                 ,
719  /*   19  */   "Remet la signature normale. (tag ?  = aide)"          ,
720  /*   20  */   "Affiche les derni�res nouvelles s'il y en a..."       ,
721  /*   21  */   "Affiche le logo du serveur"                           ,
722  /*   22  */   "En-t�te de lettre automatique oui / non"             ,
723  /*   23  */   "Liste des QWK paquets QWK"                              ,
724  /*   24  */   "Scruter les en-t�tes des messages",
725  /*   25  */   "Chercher le mot 'foobar' "
726 
727  };
728 
729 const char CONSPTR taghlp[] =
730 {
731  /*    0  */   "",
732  /*    1  */   " Tagline Commands for ATP tagline manager: ",
733  /*    2  */   "display list of taglines",
734  /*    3  */   "display current tagline",
735  /*    4  */   "select numbered tagline from list",
736  /*    5  */   "select a random tagline",
737  /*    6  */   "swap between volatile and persistent tagline",
738  /*    7  */   "toggle auto tagline selection ON/OFF",
739  /*    8  */   "when followed by sentence, defines volatile tagline",
740  /*    9  */   "displays this menu",
741  /*   10  */   "toggle Fidonet style tagline ON/OFF",
742  /*   11  */   "steal a PCBoard style tagline",
743  /*   12  */   "enter a new tagline by typing it in"
744 } ;
745 
746 const char CONSPTR Months[] =
747 {
748         "Janvier", "F�vrier", "Mars", "Avril" ,"Mai", "Juin", "Juillet",
749         "Ao�t"  , "Septembre", "Octobre",  "Novembre" , "Decembre"
750 };
751 
752 #endif  /* ISO LATIN1 */
753 
754 #elif defined(GERMAN)   /* not FRENCH or ENGLISH */
755 /*
756  * contributed by Stefan Reinauer, reinauer@deculx.BA-Loerrach.de
757  * (thanks!)
758  */
759 
760 const char CONSPTR txt[]=
761 {
762 /*    0  */   "Ren� Cougnenc 1990",
763 /*    1  */   "Speicherbelegung scheiterte!",
764 /*    2  */   "Warnung !",
765 /*    3  */   "Du hast Antworten fuer ",
766 /*    4  */   "Soll ich sie packen ?",
767 /*    5  */   "Lade",
768 /*    6  */   "Keine Post gefunden",
769 /*    7  */   "Versuche das 'review'-Kommando...",
770 /*    8  */   "Packe Nachrichten aus...",
771 /*    9  */   "leer",
772 /*   10  */   "Reader",                              /* 1st default prompt */
773 /*   11  */   "'Neues' Paket scheint aelter zu sein als das vorhandene",
774 /*   12  */   "Bist Du sicher, dass Du die Meldungen hinzufuegen willst",
775 /*   13  */   "Keine bbs gefunden",
776 /*   14  */   "Fehler in CONTROL.DAT.",
777 /*   15  */   "Erste Nachricht !",
778 /*   16  */   "Dateifehler",
779 /*   17  */   "Ende der Nachrichten erreicht.",
780 /*   18  */   "Lesefehler",
781 /*   19  */   "  Von : ",          /* This is the message header.        */
782 /*   20  */   "   An : ",          /* Fields must be correctly aligned ! */
783 /*   21  */   "Thema : ",
784 /*   22  */   " Dat. : ",
785 /*   23  */   "Nummer : ",
786 /*   24  */   " Ref.# : ",
787 /*   25  */   "  Konf : ",
788 /*   26  */   "  Zeit : ",
789 /*   27  */   "PRIVATE MELDUNG",
790 /*   28  */   "Unbekannte Konferenz...",
791 /*   29  */   "Konferenz",
792 /*   30  */   "besucht",
793 /*   31  */   "Keine neue Post",
794 /*   32  */   "Gib 'n' in irgendeinem Feld ein, um die Eingabe dieser Nachricht abzubrechen.",
795 /*   33  */   "Eingabe der Nachricht abgebrochen",
796 /*   34  */   "Eintrag zu lang !  25 Buchst. max. bei QWK",
797 /*   35  */   "Zu lang !  R = Nur Empfaenger, N = Oeffentl. Nachricht.",
798 /*   36  */   "Nur Empfaenger",
799 /*   37  */   "Oeffentliche Nachricht",
800 /*   38  */   "Rufe Editor auf",
801 /*   39  */   "Speichern der Meldung in welchem File? ",
802 /*   40  */   "Abgebrochen",
803 /*   41  */   "Meldung",
804 /*   42  */   "Gespeichert in",
805 /*   43  */   "Hinzugefuegt zu",
806 /*   44  */   "Keine Post in dieser Konferenz",
807 /*   45  */   "Neue BBS in dieser Basis.",
808 /*   46  */   "Postpaket aelter als letztes Basis-Update",
809 /*   47  */   "Post nicht ausgepackt",
810 /*   48  */   "Konnte Datei nicht entfernen",
811 /*   49  */   "Konnte Datei nicht lesen",
812 /*   50  */   "Konnte Datei nicht erstellen",
813 /*   51  */   "Konnte Datei nicht oeffnen",
814 /*   52  */   "Konnte Konfiguration nicht oeffnen",
815 /*   53  */   "Lese Konfiguration...",
816 /*   54  */   "Fehler in Konfigurationsdatei",
817 /*   55  */   "in Zeile",
818 /*   56  */   "Zeile",
819 /*   57  */   "Raeume auf",
820 /*   58  */   "Fehler beim Lesen der Datei",
821 /*   59  */   "Zitiere Nachricht mit",
822 /*   60  */   "Mehr",                      /* This is the 'more' message   */
823 /*   61  */   "J/N",                       /* This is the 'yes/no' message */
824 /*   62  */   "Datei",                      /* '.. the file..." */
825 /*   63  */   "Existiert bereits",
826 /*   64  */   "Loeschen ?",
827 /*   65  */   "Packe Antworten in",
828 /*   66  */   "'Zuletzt gelesen'-Zeiger erneuert",
829 /*   67  */   "Keine Datei",
830 /*   68  */   "Hey !",
831 /*   69  */   "Keine BBS geladen !",
832 /*   70  */   "Benutze das 'review'- 'load'- oder 'help'-Kommando",
833 /*   71  */   "Fuege Nachrichten hinzu und erstelle Indizes",
834 /*   72  */   "Nachricht zu lang, sorry...",
835 /*   73  */   "Fehler beim Schreiben der Datei",
836 /*   74  */   "Fehler beim Schreiben der Indexdatei",
837 /*   75  */   "Speichere Nachricht",
838 /*   76  */   "Fuege Nachricht an Datei an",
839 /*   77  */   "Erstelle Datei",
840 /*   78  */   "Konferenzen verfuegbar auf",
841 /*   79  */   "Inaktiv",
842 /*   80  */   "Aktiv",
843 /*   81  */   "Nummer ausserhalb des gueltigen Bereiches !",
844 /*   82  */   "Gueltige Nachrichten sind",
845 /*   83  */   "bis",
846 /*   84  */   "Ansi Ausgabe",
847 /*   85  */   "an",
848 /*   86  */   "aus",
849 /*   87  */   "Gebrauch :",
850 /*   88  */   "load BBS-Name",
851 /*   89  */   "review BBS-Name",
852 /*   90  */   "Konferenz-Nummer",
853 /*   91  */   "oder",
854 /*   92  */   "Konferenz-Name",
855 /*   93  */   "Gib 'conf' ein, um aktive Konferenzen anzuzeigen",
856 /*   94  */   "setvbuf() scheiterte in Funktion ",
857 /*   95  */   "Unauthorisierter Befehl !\n",
858 /*   96  */   " Liebe(r)",  /* Dear, */
859 /*   97  */   "  In einer Nachricht vom",
860 /*   98  */   "schrieb",
861 /*   99  */   "schriebst Du mir",
862 /*  100  */   "an",
863 /*  101  */   "Automatische Ueberschrift",
864 /*  102  */   "Selektives loeschen von Konferenzarchiven",
865 #if 0
866 /*  103  */   "Persoenlicher Brief",
867 /*  104  */   "Brief beantworten",
868 #endif
869 /*  103  */   "Persoenl. Brief",
870 /*  104  */   "Beantworten",
871 /*  105  */   "GELOESCHTE MELDUNG",
872 /*  106  */   "[J/n]",
873 /*  107  */   "[j/N]",
874 /*  108  */   " ",
875 /*  109  */   "Fehler bei switch()-Anweisung",
876 /*  110  */   "Fehler beim Lesen von 'atprc'",
877 /*  111  */   "Ungueltiger Dateiname"
878 };
879 
880 static const char CONSPTR hlp[] =
881 {
882  /*    0  */   "",
883 #ifdef UNIXCMDS
884 /*     1  */   " Einige der ATP Kommandos ( Gib 'man atp' ein fuer tiefergehende Hilfe ):",
885 #else /* non unix */
886 /*     1  */   " Einige der ATP Kommandos ( Lies atp.doc fuer tiefergehende Hilfe ):",
887 #endif
888  /*    2  */   " Programm beenden"                                     ,
889  /*    3  */   " Antwort loeschen"                                     ,
890  /*    4  */   " System Kommando"                                      ,
891  /*    5  */   " Naechste Meldung lesen"                               ,
892  /*    6  */   " Vorherige Meldung lesen"                              ,
893  /*    7  */   " Aktuelle Meldung noch einmal lesen"                   ,
894  /*    8  */   " Meldung in aktuelle Konferenz schreiben"              ,
895  /*    9  */   " Konferenz besuchen ( nach Name oder Nummer )"         ,
896  /*   10  */   " Umschalten zwischen ANSI- / TTY-Ausgabe"              ,
897  /*   11  */   " Naechste Konferenz besuchen"                          ,
898  /*   12  */   " Aktueller Meldung antworten"                          ,
899  /*   13  */   " [ Datei ] Speichere Nachricht in Textdatei"           ,
900  /*   14  */   " Liste der Konferenzen"                                ,
901  /*   15  */   " Loesche ausgesuchte Konferenz-Nachrichtenarchive"     ,
902  /*   16  */   " Lade neue Post von QWK-Paket in die Nachrichtenbasis" ,
903  /*   17  */   " Lies post in der Basis ( `rev' ist die Kurzform )"    ,
904  /*   18  */   " Liste neuer Dateien (`welcome' & `news' auch gueltig)",
905  /*   19  */   " Zeige Tagline-Hilfsmenue"                             ,
906  /*   20  */   " Zeige letzte Neuigkeiten"                             ,
907  /*   21  */   " Erster Bildschirm der BBS."                           ,
908  /*   22  */   " Schalte automatische Antwortueberschrift  an / aus"   ,
909  /*   23  */   " Liste der QWK-Pakete im mail spool Verzeichnis"       ,
910  /*   24  */   " Durchsuche Ueberschr. von der aktuellen Nachricht an" ,
911  /*   25  */   " Finde Text 'foobar'"
912 
913  };
914 
915 const char CONSPTR taghlp[] =
916 {
917  /*    0  */   "",
918  /*    1  */   " Tagline Kommandos fuer ATP Tagline Manager: ",
919  /*    2  */   "Zeige Liste von Taglines",
920  /*    3  */   "Zeige aktuelle Tagline",
921  /*    4  */   "Suche numerierte Tagline aus Liste aus",
922  /*    5  */   "Beliebige Tagline waehlen",
923  /*    6  */   "Wechseln zwischen statischer und voruebergehender Tagline",
924  /*    7  */   "Automatische Tagline-Wahl AN/AUS",
925  /*    8  */   "Definiert voruebergehende Tagline, wenn ein Satz folgt",
926  /*    9  */   "Zeigt dieses Menue",
927  /*   10  */   "Benutzen von Taglines im Fidonet-Style AN/AUS",
928  /*   11  */   "Klaue eine PCBoard-artige Tagline",
929  /*   12  */   "Tagline durch direkte Eingabe hinzufuegen"
930 };
931 
932 const char CONSPTR Months[] =
933 {
934         "Januar", "Februar", "Maerz", "April" ,"Mai", "Juni", "Juli",
935         "August"  , "September", "Oktober",  "November" , "Dezember"
936 };
937 
938 #endif  /* GERMAN */
939 
940 
941 
942 /*
943  * Help - displays a help message.
944  */
945 
946 void
Help(void)947 Help(void)
948 {
949 	unsigned      i;
950 
951 	white();
952 	high();
953 	printf("\n%s", hlp[1]);
954 	clear();
955 	printf("\n");
956 	for (i = 0; i < strlen(hlp[1]); i++)
957 		(void)putchar('-');
958 	printf("\n");
959 	high();
960 	printf("\r\t q,g\t%s\n", hlp[2]);
961 	printf("\t k\t%s\n", hlp[3]);
962 	printf("\t !\t%s\n", hlp[4]);
963 	printf("\t +\t%s\n", hlp[5]);
964 	printf("\t -\t%s\n", hlp[6]);
965 	printf("\t a\t%s\n", hlp[7]);
966 	printf("\t e\t%s\n", hlp[8]);
967 	printf("\t j\t%s\n", hlp[9]);
968 	printf("\t n\t%s\n", hlp[11]);
969 	printf("\t r\t%s\n", hlp[12]);
970 	printf("\t s\t%s\n", hlp[13]);
971 	printf("\t find foobar\t%s\n",hlp[25]);
972 	printf("\t conf\t%s\n", hlp[14]);
973 	printf("\t clean\t%s\n", hlp[15]);
974 	printf("\t load\t%s\n", hlp[16]);
975 #ifndef FRENCH
976 	printf("\t review\t%s\n", hlp[17]);
977 #else  /* francais */
978 	printf("\t revois\t%s\n", hlp[17]);
979 #endif
980 	printf("\t files\t%s\n", hlp[18]);
981 	printf("\t tag help\t%s\n", hlp[19]);
982 	printf("\t head\t%s\n", hlp[22]);
983 	printf("\t scan\t%s\n", hlp[24]);
984 	printf("\t qlist\t%s\n", hlp[23]);
985 	printf("\n");
986 }
987 
988 
989