home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 2 / 2603 < prev    next >
Encoding:
Internet Message Format  |  1991-01-24  |  38.0 KB

  1. From: ml@brumuc.bru.sub.org (Marc Laukien)
  2. Newsgroups: alt.sources
  3. Subject: UnixChat Part 2/2
  4. Message-ID: <1110@brumuc.bru.sub.org>
  5. Date: 22 Jan 91 15:24:57 GMT
  6.  
  7. #!/bin/sh
  8. # this is chat.02 (part 2 of UnixChat)
  9. # do not concatenate these parts, unpack them in order with /bin/sh
  10. # file cm/int.c continued
  11. #
  12. if touch 2>&1 | fgrep 'amc' > /dev/null
  13.  then TOUCH=touch
  14.  else TOUCH=true
  15. fi
  16. if test ! -r shar3_seq_.tmp; then
  17.     echo "Please unpack part 1 first!"
  18.     exit 1
  19. fi
  20. (read Scheck
  21.  if test "$Scheck" != 2; then
  22.     echo "Please unpack part $Scheck next!"
  23.     exit 1
  24.  else
  25.     exit 0
  26.  fi
  27. ) < shar3_seq_.tmp || exit 1
  28. echo "x - Continuing file cm/int.c"
  29. sed 's/^X//' << 'SHAR_EOF' >> cm/int.c &&
  30. X            if(userlist[j].pid!= -1 && userlist[j].pid!= msg->pid)
  31. X                send_msg(&umsg,&userlist[j]);/* senden    */
  32. X        }
  33. X        break;
  34. X
  35. X    case CNAME:            /* Namen aendern    */
  36. X        i=0;
  37. X        while(userlist[i].pid != msg->pid && i<MAXUSER)
  38. X            i++;        /* Eintrag suchen    */
  39. X
  40. X        if(i!=MAXUSER)        /* gefunden ?        */
  41. X        {
  42. X        UMSG umsg;
  43. X
  44. X        sprintf(umsg.text,"%s %s",userlist[i].cname,msg->text);
  45. X        umsg.typ=CNAME;        /* Message aufbereiten    */
  46. X
  47. X        strcpy(userlist[i].cname,msg->text); /* neuer Name */
  48. X
  49. X        for(j=0;j<MAXUSER;j++)    /* alle User durchgehen    */
  50. X            if(userlist[j].pid!= -1 && userlist[j].pid!= msg->pid)
  51. X                send_msg(&umsg,&userlist[j]);/* senden    */
  52. X
  53. X        write_conf();        /* Conf-Datei neu anlegen     */
  54. X        }
  55. X        break;
  56. X
  57. X    case KILL:            /* User rauswerfen    */
  58. X        i=0;
  59. X        while(userlist[i].pid != msg->pid && i<MAXUSER)
  60. X            i++;        /* Eintrag suchen    */
  61. X
  62. X        if(i!=MAXUSER)        /* gefunden ?        */
  63. X        {
  64. X        int    k;
  65. X        UMSG    umsg,umsg2;
  66. X
  67. X        /* --- rauswerfen ----------------------------- */
  68. X        sprintf(umsg.text,"%s",userlist[i].cname);
  69. X        umsg.typ=QUIT;        /* Message aufbereiten    */
  70. X
  71. X        for(j=0;j<MAXUSER;j++)    /* alle User durchgehen    */
  72. X        if(!strcmp(userlist[j].name,msg->text) && userlist[j].pid!= -1)
  73. X        {
  74. X            send_msg(&umsg,&userlist[j]);/* senden    */
  75. X
  76. X            /* --- anderen mitteilen -------------- */
  77. X            sprintf(umsg2.text,"%s",userlist[j].cname);
  78. X            umsg2.typ=KILL;        /* Message aufbereiten    */
  79. X
  80. X            userlist[j].pid= -1;    /* Daten loeschen    */
  81. X            usernr--;        /* ein User weniger    */
  82. X
  83. X            for(k=0;k<MAXUSER;k++)    /* alle User durchgehen    */
  84. X                if(userlist[k].pid!= -1) /* senden     */
  85. X                    send_msg(&umsg2,&userlist[k]);
  86. X        }
  87. X
  88. X        write_conf();        /* Conf-Datei neu anlegen     */
  89. X        }
  90. X        break;
  91. X
  92. X    }    /* Ende switch    */
  93. X    }
  94. X    while(msg->typ != QUIT);
  95. X}
  96. X
  97. X/*----------------------------------------------------------------------*/
  98. X/*     Konferenzdatei neuschreiben                    */
  99. X/*----------------------------------------------------------------------*/
  100. X
  101. Xvoid    write_conf()
  102. X
  103. X{
  104. X    char str[STRLEN];
  105. X    FILE *fp;                /* Filepointer        */
  106. X    int i;
  107. X
  108. X    sprintf(str,"confdir/%s",conf);        /* Konferenz-File    */
  109. X
  110. X    fp=fopen(str,"w");            /* oeffnen        */
  111. X
  112. X    if(fp==(FILE *)0)            /* schon belegt ?     */
  113. X    {
  114. X        fprintf(stderr,"%s: %s\n",pname,sys_errlist[errno]);
  115. X        deinit();
  116. X        exit(2);
  117. X    }
  118. X    
  119. X    fprintf(fp,"%ld\n",key);        /* Key schreiben    */
  120. X    fprintf(fp,"%s\n",password);        /* Password schreiben    */
  121. X
  122. X    for(i=0;i<MAXUSER;i++)            /* alle User durchgehen    */
  123. X        if(userlist[i].pid!= -1)    /* Name schreiben    */
  124. X            fprintf(fp,"%s %s\n",
  125. X            userlist[i].name,userlist[i].cname);
  126. X
  127. X    fclose(fp);                /* schliessen    */
  128. X}
  129. SHAR_EOF
  130. echo "File cm/int.c is complete" &&
  131. $TOUCH -am 0806102590 cm/int.c &&
  132. chmod 0600 cm/int.c ||
  133. echo "restore of cm/int.c failed"
  134. set `wc -c cm/int.c`;Wc_c=$1
  135. if test "$Wc_c" != "5033"; then
  136.     echo original size 5033, current size $Wc_c
  137. fi
  138. # ============= cm/main.c ==============
  139. echo "x - extracting cm/main.c (Text)"
  140. sed 's/^X//' << 'SHAR_EOF' > cm/main.c &&
  141. X/*----------------------------------------------------------------------*/
  142. X/*                                    */
  143. X/*    Name:            ChatManager V2.9            */
  144. X/*                                                                    */
  145. X/*    Programmteil:        Hauptprogramm                */
  146. X/*                                    */
  147. X/*    Library:        UNIX V                    */
  148. X/*                                    */
  149. X/*    Autor:            Marc Laukien                */
  150. X/*                                    */
  151. X/*----------------------------------------------------------------------*/
  152. X
  153. X#include <sys/types.h>
  154. X#include <stdio.h>
  155. X#include <signal.h>
  156. X#include "cm.h"
  157. X
  158. Xextern char *getcwd();
  159. X
  160. X/* globale Variablen */
  161. X
  162. Xchar    *pname;                /* Programmname: argv[0]     */
  163. Xchar    *cwd;                /* Working Directory         */
  164. Xchar    conf[STRLEN]="sysconf";        /* Konferenzname         */
  165. Xint    conf_on=0;            /* 0: Konferenz noch nicht an    */
  166. Xint    stop=1;                /* 1 = nach WAITTIME anhalten     */
  167. Xchar    password[STRLEN]=STDPASS;    /* Passwort            */
  168. X
  169. Xlong    key= -1;            /* Key der Manager-FIFO    */
  170. Xint    fifofd= -1;            /* Manager FIFO fd     */
  171. X
  172. XUSER    userlist[MAXUSER];        /* Liste aller Teilnehmer     */
  173. Xint    usernr=0;            /* Number of Users         */
  174. X
  175. X/*----------------------------------------------------------------------*/
  176. X/*     Hauptprogramm                            */
  177. X/*----------------------------------------------------------------------*/
  178. X
  179. Xint    main(argc,argv,envp)
  180. X
  181. Xint     argc;
  182. Xchar     *argv[];
  183. Xchar     *envp[];
  184. X{
  185. X    extern     char     *optarg;
  186. X    extern     int      optind,opterr;
  187. X    char     ch;
  188. X
  189. X    cwd=getcwd((char *)0,STRLEN);    /* Directory retten     */
  190. X    chdir(LIBDIR);            /* Directory einstellen    */
  191. X
  192. X    signal(SIGHUP,interrupt);    /* Interrupt einstellen    */
  193. X    signal(SIGINT,interrupt);
  194. X    signal(SIGQUIT,interrupt);
  195. X    signal(SIGTERM,interrupt);
  196. X
  197. X    pname=argv[0];            /* Programmname     */
  198. X
  199. X    /* Optionen einlesen *******************************************/
  200. X
  201. X    opterr=1;
  202. X    while((ch=getopt(argc,argv,"p:c:n"))!=EOF)
  203. X        switch(ch)
  204. X        {
  205. X        case 'c':        /* andere Konferenz     */
  206. X            strcpy(conf,optarg);
  207. X            break;
  208. X
  209. X        case 'p':        /* andere Konferenz     */
  210. X            strcpy(password,optarg);
  211. X            break;
  212. X
  213. X        case 'n':        /* nicht aufhoeren     */
  214. X            stop=0;
  215. X            break;
  216. X
  217. X        case '?':        /* Fehler         */
  218. X            opterr++;
  219. X            break;
  220. X        }
  221. X
  222. X    if(opterr>1)            /* falsche Optionen     */
  223. X    {
  224. X        fprintf(stderr,
  225. X        "usage: %s [-c conf] [-p password] [-n]\n",pname);
  226. X        exit(2);
  227. X    }
  228. X    
  229. X    /* Ende Optionen einlesen **************************************/
  230. X
  231. X    if(strlen(conf)>10)        /* Name zu lang ?     */
  232. X    {
  233. X        fprintf(stderr,"%s: conference name too long\n",pname);
  234. X        exit(2);
  235. X    }
  236. X
  237. X    init();                /* Initialisierungen     */
  238. X
  239. X    msg_int();            /* Messageinterpreter     */
  240. X
  241. X    deinit();            /* Deinitialisierungen     */
  242. X
  243. X    return(0);            /* Tschuess         */
  244. X}
  245. X
  246. X/*----------------------------------------------------------------------*/
  247. X/*     Interruptroutine                        */
  248. X/*----------------------------------------------------------------------*/
  249. X
  250. Xvoid    interrupt()
  251. X
  252. X{
  253. X    deinit();
  254. X    exit(0);
  255. X}
  256. X
  257. SHAR_EOF
  258. $TOUCH -am 0806102590 cm/main.c &&
  259. chmod 0600 cm/main.c ||
  260. echo "restore of cm/main.c failed"
  261. set `wc -c cm/main.c`;Wc_c=$1
  262. if test "$Wc_c" != "2689"; then
  263.     echo original size 2689, current size $Wc_c
  264. fi
  265. # ============= cm/comm.c ==============
  266. echo "x - extracting cm/comm.c (Text)"
  267. sed 's/^X//' << 'SHAR_EOF' > cm/comm.c &&
  268. X/*----------------------------------------------------------------------*/
  269. X/*                                    */
  270. X/*    Name:            ChatManager V2.9            */
  271. X/*                                                                    */
  272. X/*    Programmteil:        Kommunikation                */
  273. X/*                                    */
  274. X/*    Library:        UNIX V                    */
  275. X/*                                    */
  276. X/*    Autor:            Marc Laukien                */
  277. X/*                                    */
  278. X/*----------------------------------------------------------------------*/
  279. X
  280. X#include <stdio.h>
  281. X#include <fcntl.h>
  282. X#include <errno.h>
  283. X#include <setjmp.h>
  284. X#include <signal.h>
  285. X#include "cm.h"
  286. X
  287. Xjmp_buf env;            /* Environment    */
  288. X
  289. X/*----------------------------------------------------------------------*/
  290. X/*     Message empfangen                        */
  291. X/*----------------------------------------------------------------------*/
  292. X
  293. XMSG    *recv_msg()
  294. X{
  295. X    static     MSG     msg;    /* Message         */
  296. X    int    ret;        /* Return von read()    */
  297. X
  298. X    if(usernr==0 && stop)    /* nach WAITTIME secs beenden     */ 
  299. X    {            /* falls kein User mehr     */
  300. X        signal(SIGALRM,interrupt);/* Interrupt setzen     */
  301. X        alarm(WAITTIME);    /* Wecker setzen     */
  302. X    }
  303. X
  304. X    if(setjmp(env)==0)        /* Interrupt ?     */
  305. X    {
  306. X        while((ret=read(fifofd,&msg,sizeof(MSG)))==0)
  307. X                    /* empfangen     */
  308. X            sleep(2);
  309. X
  310. X        if(ret == -1)
  311. X        {
  312. X            fprintf(stderr,"%s: %s (recv_msg)\n"
  313. X            ,pname,sys_errlist[errno]);
  314. X            deinit();
  315. X            exit(2);    /* Fehler    */
  316. X        }
  317. X    }
  318. X    else
  319. X        msg.typ=QUIT;        /* Aussteigen    */
  320. X
  321. X    signal(SIGALRM,SIG_IGN);    /* Interrupt ruecksetzen    */
  322. X
  323. X    return(&msg);            /* Message als Returnwert    */
  324. X}
  325. X
  326. Xstatic    void    interrupt()
  327. X{
  328. X    longjmp(env,1);            /* Ruecksprung    */
  329. X}
  330. X
  331. X/*----------------------------------------------------------------------*/
  332. X/*     Message senden                            */
  333. X/*----------------------------------------------------------------------*/
  334. X
  335. Xvoid    send_msg(umsg,user)
  336. X
  337. XMSG    *umsg;                /* zu sendende Message    */
  338. XUSER    *user;                /* Benutzer         */
  339. X{
  340. X    int    fd;
  341. X    char    str[STRLEN];
  342. X
  343. X    sprintf(str,"fifodir/%ld",user->key);
  344. X    fd=open(str,O_WRONLY | O_NDELAY);    /* FIFO oeffnen     */
  345. X    if(fd== -1)                /* Fehler ?         */
  346. X    {
  347. X        user->pid= -1;            /* Daten loeschen    */
  348. X        usernr--;            /* ein User weniger    */
  349. X    }
  350. X    
  351. X    if(write(fd,umsg,sizeof(UMSG)) == -1)    /* senden        */
  352. X    {
  353. X        fprintf(stderr,"%s: %s (send_msg)\n",pname,sys_errlist[errno]);
  354. X        user->pid= -1;            /* User sperren        */
  355. X
  356. X        write_conf();        /* Conf-Datei neu anlegen     */
  357. X    }
  358. X    else                    /* senden gelungen    */
  359. X        kill(user->pid,SIGUSR1);    /* unterbrechen        */
  360. X
  361. X    close(fd);
  362. X}
  363. SHAR_EOF
  364. $TOUCH -am 0106163991 cm/comm.c &&
  365. chmod 0600 cm/comm.c ||
  366. echo "restore of cm/comm.c failed"
  367. set `wc -c cm/comm.c`;Wc_c=$1
  368. if test "$Wc_c" != "2311"; then
  369.     echo original size 2311, current size $Wc_c
  370. fi
  371. # ============= ch/lex.l ==============
  372. echo "x - extracting ch/lex.l (Text)"
  373. sed 's/^X//' << 'SHAR_EOF' > ch/lex.l &&
  374. X/*----------------------------------------------------------------------*/
  375. X/*                                    */
  376. X/*    Name:            Chat V2.9                */
  377. X/*                                                                    */
  378. X/*    Programmteil:        externe Strings einlesen        */
  379. X/*                                    */
  380. X/*    Library:        UNIX V    + lex                */
  381. X/*                                    */
  382. X/*    Autor:            Marc Laukien                */
  383. X/*                                    */
  384. X/*----------------------------------------------------------------------*/
  385. X
  386. X%{
  387. X#include    <string.h>
  388. X#include    <ctype.h>
  389. X
  390. Xextern    char    *malloc();
  391. Xextern    void    exit();
  392. X
  393. Xextern    char    *pname;            /* Programmname        */
  394. Xextern    char    lang[];            /* langinitionfile    */
  395. Xextern     int    errno;            /* Fehlernummer     */
  396. Xextern     char    *sys_errlist[];        /* Fehlertexte         */
  397. X
  398. Xextern    int    atoi();
  399. X
  400. Xvoid    lex();
  401. Xstatic    void    insert();
  402. Xstatic    int    getnr();
  403. X
  404. Xstatic    char     str[100];    /* String             */
  405. X
  406. Xchar    *cmds;            /* Kommandos             */
  407. Xchar    *prompt;        /* Prompt             */
  408. Xchar    *press_key;        /* Tastendruck            */
  409. Xchar    *conf_name;        /* Konferenzname        */
  410. Xchar    *password;        /* Passwort            */
  411. Xchar    *arr;            /* Ankunft             */
  412. Xchar    *dep;            /* Verlassen             */
  413. Xchar    *start;            /* Startmeldung            */
  414. Xchar    *fire;            /* Rauswurf             */
  415. Xchar    *help;            /* helpfile             */
  416. Xchar    *menufile;        /* Menuefile             */
  417. Xchar    *invit;            /* Einladung             */
  418. Xchar    *who;            /* Who-Kommando            */
  419. Xchar    *msg;            /* msg-Kommando            */
  420. Xchar    *inv;            /* invitation-Kommando        */
  421. Xchar    *nouser;        /* User gibt es nicht        */
  422. Xchar    *not_online;        /* User nicht online        */
  423. Xchar    *nocmd;            /* Fehler             */
  424. Xchar    *nomode;        /* Unbekannter Modus        */
  425. Xchar    *nomsg;            /* Messages gesperrt        */
  426. Xchar    *members;        /* Teilnehmer            */
  427. Xchar    *msg_from;        /* Nachricht von        */
  428. X
  429. X%}
  430. X
  431. XT    [ \t]
  432. XS    \".*\"
  433. XN    "["[0-9]*"]"
  434. X%%
  435. X#.*\n            { ;    /* Kommentar */        }
  436. X"cmds"{T}*{S}        {    insert(&cmds);        }
  437. X"prompt"{T}*{S}        {    insert(&prompt);    }
  438. X"press_key"{T}*{S}    {    insert(&press_key);    }
  439. X"conf_name"{T}*{S}    {    insert(&conf_name);    }
  440. X"password"{T}*{S}    {    insert(&password);    }
  441. X"arrival"{T}*{S}    {    insert(&arr);        }
  442. X"departure"{T}*{S}    {    insert(&dep);        }
  443. X"kill"{T}*{S}        {    insert(&fire);        }
  444. X"start"{T}*{S}        {    insert(&start);        }
  445. X"help"{T}*{S}        {    insert(&help);        }
  446. X"menu"{T}*{S}        {    insert(&menufile);    }
  447. X"invit"{T}*{S}        {    insert(&invit);        }
  448. X"who"{T}*{S}        {    insert(&who);        }
  449. X"msg"{T}*{S}        {    insert(&msg);        }
  450. X"inv"{T}*{S}        {    insert(&inv);        }
  451. X"nouser"{T}*{S}        {    insert(&nouser);    }
  452. X"not_online"{T}*{S}    {    insert(¬_online);    }
  453. X"nocmd"{T}*{S}        {    insert(&nocmd);        }
  454. X"nomsg"{T}*{S}        {    insert(&nomsg);        }
  455. X"nomode"{T}*{S}        {    insert(&nomode);    }
  456. X"members"{T}*{S}    {    insert(&members);    }
  457. X"msg_from"{T}*{S}    {    insert(&msg_from);    }
  458. X
  459. X[ \t\n]            { ;    /* Leerstellen, Tabs und Newline ignorieren */    }
  460. X.            {     fprintf(stderr,
  461. X                "%s: syntax error in %s at line %d\n"
  462. X                ,pname,str,yylineno);
  463. X                deinit();
  464. X                exit(1);
  465. X            }    /* Fehler */
  466. X%%
  467. X
  468. Xvoid    lex()
  469. X{
  470. X    FILE *fp;                /* Filepointer         */
  471. X
  472. X    sprintf(str,"def.%s",lang);        /* aufbereiten */
  473. X    if((fp=fopen(str,"r"))==(FILE *)0)    /* oeffnen */
  474. X    {
  475. X        fprintf(stderr,"%s: %s\n",pname,sys_errlist[errno]);
  476. X        deinit();
  477. X        exit(1);
  478. X    }
  479. X
  480. X    yyin = fp;        /* Input setzen */
  481. X
  482. X    yylex();
  483. X
  484. X    fclose(fp);        /* schliessen */
  485. X}
  486. X
  487. Xstatic    void    insert(pt)    /* String einfuegen */
  488. Xchar     **pt;
  489. X{
  490. X    char st[100];
  491. X    char *s;
  492. X    int i;
  493. X
  494. X    s=st;
  495. X
  496. X    strcpy(s,yytext);
  497. X    while(*s != '"')
  498. X        s++;
  499. X    s++;
  500. X
  501. X    i=0;
  502. X    while(s[i] != '"')
  503. X        i++;
  504. X    s[i]=0;
  505. X
  506. X    *pt=(char *)malloc((unsigned)(strlen(s)+1));
  507. X    strcpy(*pt,s);
  508. X}
  509. X
  510. Xstatic    int    getnr()        /* Stringnummer holen */
  511. X{
  512. X    char st[100];
  513. X    char *s;
  514. X    int i;
  515. X
  516. X    s=st;
  517. X
  518. X    strcpy(s,yytext);
  519. X    while(!isdigit(*s))
  520. X        s++;
  521. X
  522. X    i=0;
  523. X    while(isdigit(s[i]))
  524. X        i++;
  525. X    s[i]=0;
  526. X
  527. X    return(atoi(s));
  528. X}
  529. X
  530. SHAR_EOF
  531. $TOUCH -am 0806174890 ch/lex.l &&
  532. chmod 0600 ch/lex.l ||
  533. echo "restore of ch/lex.l failed"
  534. set `wc -c ch/lex.l`;Wc_c=$1
  535. if test "$Wc_c" != "3456"; then
  536.     echo original size 3456, current size $Wc_c
  537. fi
  538. # ============= ch/ch.h ==============
  539. echo "x - extracting ch/ch.h (Text)"
  540. sed 's/^X//' << 'SHAR_EOF' > ch/ch.h &&
  541. X/* Headerdatei zur Verwendung von Chatter V2.9    */
  542. X
  543. X#include    "std.h"        /* Standarddefinitionen        */
  544. X#include    "ipc.h"        /* Interprozesskommunikation    */
  545. X
  546. X#define    CLEAR    {putp(clear_screen);putp(cursor_home);}
  547. X
  548. X#define ESC    27        /* Escape     */
  549. X#define RET    13        /* Return     */
  550. X#define NL    10        /* Linefeed     */ 
  551. X#define BS    8        /* Backspace     */
  552. X#define DEL     127        /* Delete     */ 
  553. X#define BELL    7        /* Bell     */
  554. X#define TAB    9        /* Tabulator    */
  555. X
  556. X#define    REVERSE    1        /* Eingabe invers statt Bold    */
  557. X#define    JUMP    2        /* Scrollen der Eingabezeile    */
  558. X#define    BEEPER    4        /* Beep bei Messages        */
  559. X#define STDMODE    (BEEPER|JUMP)    /* Standardmodus        */
  560. X
  561. Xextern    int    terminfo;        /* Falls 1: Terminfo ist an    */
  562. Xextern    struct    termio    term,oterm;    /* Terminaldaten         */
  563. X
  564. Xextern    char    *pname;            /* Programmname: argv[0]     */
  565. Xextern    char    *cwd;            /* Working Directory         */
  566. Xextern    char    lang[];            /* Sprache             */
  567. Xextern    char    conf[];            /* Konferenzname         */
  568. Xextern    char    cname[];        /* Chatname            */
  569. X
  570. Xextern    char    *cmds;            /* Kommandos             */
  571. Xextern    char    *prompt;        /* Prompt             */
  572. Xextern    char    *press_key;        /* Tastendruck            */
  573. Xextern    char    *conf_name;        /* Konferenzname        */
  574. Xextern    char    *password;        /* Passwort            */
  575. Xextern    char    *arr;            /* Ankunft             */
  576. Xextern    char    *dep;            /* Verlassen             */
  577. Xextern    char    *start;            /* Startmeldung            */
  578. Xextern    char    *fire;            /* Rauswurf             */
  579. Xextern    char    *help;            /* Helpfile             */
  580. Xextern    char    *menufile;        /* Menuefile             */
  581. Xextern    char    *invit;            /* Einladung             */
  582. Xextern    char    *who;            /* Who-Kommando            */
  583. Xextern    char    *msg;            /* write-Kommando        */
  584. Xextern    char    *inv;            /* invitation-Kommando        */
  585. Xextern    char    *nouser;        /* User gibt es nicht        */
  586. Xextern    char    *not_online;        /* User nicht online        */
  587. Xextern    char    *nocmd;            /* Falsches Kommando        */
  588. Xextern    char    *nomsg;            /* Messages gesperrt        */
  589. Xextern    char    *nomode;        /* Unbekannter Modus        */
  590. Xextern    char    *members;        /* Teilnehmer            */
  591. Xextern    char    *msg_from;        /* Nachricht von        */
  592. X
  593. Xextern    int    len;            /* Laenge der letzten Zeile    */
  594. Xextern    char    *fkey[];        /* Funktionstasten        */
  595. X
  596. Xextern    int    mode;            /* Modus            */
  597. Xextern    int    superuser;        /* falls 1: Super-User        */
  598. Xextern    int    guest;            /* falls 1: Gast        */
  599. Xextern    int    menu;            /* falls 1: Menue aufrufen    */
  600. Xextern    char    pw[STRLEN];        /* Passwort            */
  601. X
  602. Xextern    long    key;            /* Key der Manager-FIFO        */
  603. Xextern    int    fifofd;            /* Manager FIFO fd         */
  604. Xextern    long    pkey;            /* Key der privaten FIFO    */
  605. Xextern    int    pfifofd;        /* private FIFO fd         */
  606. X
  607. Xextern    UMSG    *recv_msg();        /* Message empfangen     */
  608. X
  609. Xextern    int    main();            /* Hauptprogramm    */
  610. Xextern    int    output();        /* Messageausgabe    */
  611. Xextern    int    conf_init();        /* Konf. Initial.    */
  612. Xextern    int    grep();            /* eigenes grep        */
  613. X
  614. Xextern    char    *read_string();        /* String einlesen    */
  615. X
  616. Xextern    void    lex();            /* Strings einlesen    */
  617. Xextern    void    interrupt();        /* Interrupt        */
  618. Xextern    void    init();            /* Initialisierungen    */
  619. Xextern    void    conf_deinit();        /* Konf. Deinitial.    */
  620. Xextern    void    conf_members();        /* Konferenzteilnehmer    */
  621. Xextern    void    deinit();        /* Deinitialisierungen    */
  622. Xextern    void    chat_menu();        /* Chatmenue        */
  623. Xextern    void    menu_key();        /* Tastendruck        */
  624. Xextern    void    input();        /* Eingabe        */
  625. Xextern    void    input_str();        /* String eingeben    */
  626. Xextern    void    send_msg();        /* Message senden    */
  627. Xextern    void    announce();        /* Anmelden        */
  628. Xextern    void    give_notice();        /* Abmelden        */
  629. Xextern    void    pub_msg();        /* oeffentl. Message    */
  630. Xextern    void    noprompt_msg();        /* oef. Mes. o. prompt    */
  631. Xextern    void    priv_msg();        /* private Message    */
  632. Xextern    void    chat_help();        /* Hilfestellung    */
  633. Xextern    void    chat_mode();        /* Parser fuer Modi    */
  634. Xextern    void    chat_fkey();        /* Funktionstasten    */
  635. Xextern    void    chat_pr_fkey();        /* F-Tasten progr.    */
  636. Xextern    void    change_name();        /* Namensaenderung    */
  637. Xextern    void    kill_user();        /* User rauswerfen    */
  638. Xextern    void    invite();        /* User einladen    */
  639. Xextern    void    message();        /* Nachricht schicken    */
  640. SHAR_EOF
  641. $TOUCH -am 0806175790 ch/ch.h &&
  642. chmod 0600 ch/ch.h ||
  643. echo "restore of ch/ch.h failed"
  644. set `wc -c ch/ch.h`;Wc_c=$1
  645. if test "$Wc_c" != "3789"; then
  646.     echo original size 3789, current size $Wc_c
  647. fi
  648. # ============= cm/cm.h ==============
  649. echo "x - extracting cm/cm.h (Text)"
  650. sed 's/^X//' << 'SHAR_EOF' > cm/cm.h &&
  651. X/* Headerdatei zur Verwendung von ChatManager V2.9 */
  652. X
  653. X#include    "std.h"            /* Standarddefinitionen        */
  654. X#include    "ipc.h"            /* Interprozesskommunikation    */
  655. X
  656. X#define MAXUSER        100        /* Maximale Anzahl der Teilnehmer   */
  657. X#define WAITTIME    30        /* Beendigungszeit, falls kein User */
  658. X
  659. Xtypedef struct                /* Userstructur    */
  660. X{
  661. X    int    pid;            /* Process ID        */
  662. X    char    name[STRLEN];        /* Loginname        */
  663. X    char    cname[STRLEN];        /* Chatname        */
  664. X    long    key;            /* FIFO Key        */
  665. X} USER;
  666. X
  667. Xextern    char    *pname;            /* Programmname: argv[0]    */
  668. Xextern  char    *cwd;            /* Working Directory    */
  669. Xextern    char    conf[];            /* Konferenzname    */
  670. Xextern    int    conf_on;        /* 0: Konferenz noch nicht an    */
  671. Xextern    int    stop;            /* 1 = nach WAITTIME anhalten    */
  672. Xextern    char    password[STRLEN];    /* Passwort            */
  673. X
  674. Xextern    long    key;            /* Key der Manager-FIFO    */
  675. Xextern    int    fifofd;            /* Manager FIFO fd    */
  676. X
  677. Xextern    USER    userlist[];        /* Liste aller Teilnehmer    */
  678. Xextern    int    usernr;            /* Anzahl der Users    */
  679. X
  680. Xextern    MSG    *recv_msg();        /* Message empfangen    */
  681. X
  682. Xextern    int    main();            /* Hauptprogramm    */
  683. X
  684. Xextern    void    interrupt();        /* Interrupt        */
  685. Xextern    void    init();            /* Initialisierungen    */
  686. Xextern    void    deinit();        /* Deinitialisierungen    */
  687. Xextern    void    send_msg();        /* Message senden    */
  688. Xextern    void    msg_int();        /* Message-Interpreter    */
  689. Xextern    void    write_conf();        /* Konferenz schreiben    */
  690. SHAR_EOF
  691. $TOUCH -am 0806110790 cm/cm.h &&
  692. chmod 0600 cm/cm.h ||
  693. echo "restore of cm/cm.h failed"
  694. set `wc -c cm/cm.h`;Wc_c=$1
  695. if test "$Wc_c" != "1318"; then
  696.     echo original size 1318, current size $Wc_c
  697. fi
  698. # ============= hdrs/ipc.h ==============
  699. if test ! -d 'hdrs'; then
  700.     echo "x - creating directory hdrs"
  701.     mkdir 'hdrs'
  702. fi
  703. echo "x - extracting hdrs/ipc.h (Text)"
  704. sed 's/^X//' << 'SHAR_EOF' > hdrs/ipc.h &&
  705. X/* Headerdatei fuer Interprozesskommunikation     */
  706. X
  707. X#define    EMPTY        0        /* leer         */
  708. X#define    ARRIVAL        1        /* Anmeldung         */
  709. X#define    DEPARTURE    2        /* Abmeldung         */
  710. X#define    MESSAGE        3        /* Nachricht         */
  711. X#define    NOPROMPT    4        /* Nachricht ohne Prompt*/
  712. X#define    CNAME        5        /* Namen aendern    */
  713. X#define    QUIT        6        /* Konference beenden     */
  714. X#define    KILL        7        /* Rauswerfen         */
  715. X#define    NOUSER        8        /* User existiert nicht    */
  716. X
  717. X/* Headerdatei mit Messagedefinitionen     */
  718. X
  719. Xtypedef struct                /* Messagestructur     */
  720. X{
  721. X    int    pid;            /* Process ID         */
  722. X    int    typ;            /* Messagetyp         */
  723. X
  724. X    char    text[TEXTLEN];        /* Messagetext         */
  725. X} MSG;
  726. X
  727. Xtypedef struct                /* Messagestructur an die User     */
  728. X{
  729. X    int    typ;            /* Messagetyp         */
  730. X
  731. X    char    text[TEXTLEN];        /* Messagetext         */
  732. X} UMSG;
  733. SHAR_EOF
  734. $TOUCH -am 0604100390 hdrs/ipc.h &&
  735. chmod 0600 hdrs/ipc.h ||
  736. echo "restore of hdrs/ipc.h failed"
  737. set `wc -c hdrs/ipc.h`;Wc_c=$1
  738. if test "$Wc_c" != "745"; then
  739.     echo original size 745, current size $Wc_c
  740. fi
  741. # ============= hdrs/std.h ==============
  742. echo "x - extracting hdrs/std.h (Text)"
  743. sed 's/^X//' << 'SHAR_EOF' > hdrs/std.h &&
  744. X/* Headerdatei fuer Standarddefinitionen    */
  745. X
  746. X#ifndef LIBDIR        /* Arbeitsdirectory    */
  747. X#define LIBDIR  "."
  748. X#endif
  749. X
  750. X#ifndef BINDIR        /* Arbeitsdirectory    */
  751. X#define BINDIR  "."
  752. X#endif
  753. X
  754. X#define STDPASS        "~'#$%&(%&?='`"    /* Standardpasswort        */
  755. X
  756. X#define STRLEN        100        /* Laenge von Strings         */
  757. X#define TEXTLEN        140        /* Laenge des Messagetextes     */
  758. X#define MAXBYTES    (sizeof(MSG)*8) /* Max. Anz. von Bytes in Queue    */
  759. X#define MAXTRYS        10        /* Max. Anz. von Schreibvers.    */
  760. X#define MODE        0600        /* Creation Mode         */
  761. X
  762. X#define FOREVER        while(1)    /* Endlosschleife        */
  763. X
  764. Xextern    int    errno;            /* Fehlernummer         */
  765. Xextern    char    *sys_errlist[];        /* Fehlertexte             */
  766. X
  767. Xextern    void    exit();            /* Programmende            */
  768. X
  769. Xextern    char    getopt();        /* Option einlesen        */
  770. X
  771. Xextern    char    *getlogin();        /* Loginnnamen holen        */
  772. Xextern    char    *getcwd();        /* get current workdir.        */
  773. Xextern    char    *getenv();        /* get environment        */
  774. X
  775. X
  776. X
  777. SHAR_EOF
  778. $TOUCH -am 0604100490 hdrs/std.h &&
  779. chmod 0600 hdrs/std.h ||
  780. echo "restore of hdrs/std.h failed"
  781. set `wc -c hdrs/std.h`;Wc_c=$1
  782. if test "$Wc_c" != "889"; then
  783.     echo original size 889, current size $Wc_c
  784. fi
  785. # ============= def.german ==============
  786. echo "x - extracting def.german (Text)"
  787. sed 's/^X//' << 'SHAR_EOF' > def.german &&
  788. X#    ----------------------
  789. X#    Strings fuer Chat V2.9
  790. X#    (c) 1990 by M. Laukien
  791. X#    ----------------------
  792. X
  793. X#    Kommandos:
  794. X#    1.    Ende
  795. X#    2.    Hilfe
  796. X#    3.    Wer ist im System
  797. X#    4.    Wer ist im Chat
  798. X#    5.    clear
  799. X#    6.    Blitzmeldung
  800. X#    7.    Einladung
  801. X#    8.    Namensaenderung
  802. X#    9.    Kill
  803. X#    10.    Message ohne Prompt
  804. X#    11.    Mode
  805. X#    12.    F-Key programmieren
  806. X#    13.    F-Key abrufen
  807. Xcmds        "x?wsctinkampf"
  808. X
  809. X#    Unix-Kommndos
  810. Xwho        "/bin/who"            # who-cmd.
  811. X
  812. X#     Fehlermeldungen
  813. Xnouser        "*** Fehler: %s: diesen User gibt es nicht ***"
  814. Xnot_online    "*** Fehler: %s ist nicht online ***"
  815. Xnomsg        "*** Fehler: %s hat Mitteilungen gesperrt ***"
  816. Xnocmd        "*** Fehler: Unbekanntes Kommando (:? fuer Hilfe) ***"
  817. Xnomode        "*** Fehler: Unbekannter Modus ***"
  818. X
  819. X#    Diverse Strings
  820. Xstart        "UNIX-Chat V2.9        :? fuer Hilfe"    # Startmeldung
  821. Xprompt        "> "                # Prompt-String
  822. Xpress_key    "<Taste>"            # Tastendruck
  823. Xconf_name    "Konferenzname : "        # Konferenzname
  824. Xpassword    "Passwort : "            # Passwort
  825. Xarrival        "betritt die Konferenz"        # Betreten
  826. Xdeparture    "verlaesst die Konferenz"    # Verlassen
  827. Xkill        "verlaesst unfreiwillig die Konferenz"    # Kill
  828. Xmembers        "Konferenzteilnehmer:"        # Konferenzteilnehmer
  829. Xinv        "Einladung zur Konferenz"    # Einladung
  830. Xmenu        "menu.german"            # Menuetext
  831. Xhelp        "help.german"            # Hilfstext
  832. Xmsg_from    "Nachricht von %s"        # Nachricht von
  833. SHAR_EOF
  834. $TOUCH -am 0122160391 def.german &&
  835. chmod 0600 def.german ||
  836. echo "restore of def.german failed"
  837. set `wc -c def.german`;Wc_c=$1
  838. if test "$Wc_c" != "1269"; then
  839.     echo original size 1269, current size $Wc_c
  840. fi
  841. # ============= def.english ==============
  842. echo "x - extracting def.english (Text)"
  843. sed 's/^X//' << 'SHAR_EOF' > def.english &&
  844. X#    ----------------------
  845. X#    Strings fuer Chat V2.9
  846. X#    (c) 1990 by M. Laukien
  847. X#    ----------------------
  848. X
  849. X#    Kommandos:
  850. X#    1.    Ende
  851. X#    2.    Hilfe
  852. X#    3.    Wer ist im System
  853. X#    4.    Wer ist im Chat
  854. X#    5.    clear
  855. X#    6.    Blitzmeldung
  856. X#    7.    Einladung
  857. X#    8.    Namensaenderung
  858. X#    9.    Kill
  859. X#    10.    Message ohne Prompt
  860. X#    11.    Mode
  861. X#    12.    F-Key programmieren
  862. X#    13.    F-Key abrufen
  863. Xcmds        "x?wsctinkampf"
  864. X
  865. X#    Unix-Kommndos
  866. Xwho        "/bin/who"            # who-cmd.
  867. X
  868. X#     Fehlermeldungen
  869. Xnouser        "*** error: %s: no such user ***"
  870. Xnot_online    "*** error: %s is not online ***"
  871. Xnomsg        "*** error: %s denies messages ***"
  872. Xnocmd        "*** error: unknown command (:? for help) ***"
  873. Xnomode        "*** error: unknown mode ***"
  874. X
  875. X#    Diverse Strings
  876. Xstart        "UNIX-Chat V2.9        :? for help"    # Startmeldung
  877. Xprompt        "> "                # Prompt-String
  878. Xpress_key    "<press any key>"        # Tastendruck
  879. Xconf_name    "conference name : "        # Konferenzname
  880. Xpassword    "password : "            # Passwort
  881. Xarrival        "enters the conference"        # Betreten
  882. Xdeparture    "leaves the conference"        # Verlassen
  883. Xkill        "has been killed"        # Kill
  884. Xmembers        "conferencemembers:"        # Konferenzteilnehmer
  885. Xinv        "invitation to conference"    # Einladung
  886. Xmenu        "menu.english"            # Menuetext
  887. Xhelp        "help.english"            # Hilfstext
  888. Xmsg_from    "message from %s"        # Nachricht von
  889. SHAR_EOF
  890. $TOUCH -am 0122160391 def.english &&
  891. chmod 0600 def.english ||
  892. echo "restore of def.english failed"
  893. set `wc -c def.english`;Wc_c=$1
  894. if test "$Wc_c" != "1212"; then
  895.     echo original size 1212, current size $Wc_c
  896. fi
  897. # ============= help.german ==============
  898. echo "x - extracting help.german (Text)"
  899. sed 's/^X//' << 'SHAR_EOF' > help.german &&
  900. X------------------------------------------------------------------------------
  901. XUNIX-Chat V2.9                (c) 1990 by M. Laukien
  902. X------------------------------------------------------------------------------
  903. X:?    Hilfe                :x    Ende
  904. X:n    Namen aendern            :s    Wer ist in der Konferenz
  905. X:w    Wer ist im System        :t    Blitzmeldung
  906. X:i    Konferenzeinladung        :a    Nachricht ohne Prompt
  907. X:c    Bildschirm loeschen
  908. X------------------------------------------------------------------------------
  909. X:f    Funktionstastenbelegung        :f0-9    Funktionstasten ausgeben
  910. X:p0-9    Funktionstasten programmieren
  911. X------------------------------------------------------------------------------
  912. X:m    Modus:    jump    -    Eingabezeile scrollen
  913. X        nojump    -    Eingabezeile nicht scrollen
  914. X        bold    -    Eingabezeile hell
  915. X        reverse    -    Eingabezeile invers
  916. X        beep    -    Beep senden
  917. X        nobeep    -    Beep aus
  918. X------------------------------------------------------------------------------
  919. SHAR_EOF
  920. $TOUCH -am 0806175590 help.german &&
  921. chmod 0600 help.german ||
  922. echo "restore of help.german failed"
  923. set `wc -c help.german`;Wc_c=$1
  924. if test "$Wc_c" != "885"; then
  925.     echo original size 885, current size $Wc_c
  926. fi
  927. # ============= help.english ==============
  928. echo "x - extracting help.english (Text)"
  929. sed 's/^X//' << 'SHAR_EOF' > help.english &&
  930. X------------------------------------------------------------------------------
  931. XUNIX-Chat V2.9                (c) 1990 by M. Laukien
  932. X------------------------------------------------------------------------------
  933. X:?    help                :x    exit
  934. X:n    change name            :s    who is in the conference
  935. X:w    who is in the system        :t    write to user
  936. X:i    invitation to conference    :a    message without prompt
  937. X:c    clear screen
  938. X------------------------------------------------------------------------------
  939. X:f    display functionkeys        :f0-9    functionkeys    
  940. X:p0-9    setup functionkeys
  941. X------------------------------------------------------------------------------
  942. X:m    mode:    jump    -    scroll input line
  943. X        nojump    -    do not scroll input line
  944. X        bold    -    bold input
  945. X        reverse    -    reverse input
  946. X        beep    -    beep on
  947. X        nobeep    -    beep off
  948. X------------------------------------------------------------------------------
  949. SHAR_EOF
  950. $TOUCH -am 0122160791 help.english &&
  951. chmod 0600 help.english ||
  952. echo "restore of help.english failed"
  953. set `wc -c help.english`;Wc_c=$1
  954. if test "$Wc_c" != "835"; then
  955.     echo original size 835, current size $Wc_c
  956. fi
  957. # ============= menu.german ==============
  958. echo "x - extracting menu.german (Text)"
  959. sed 's/^X//' << 'SHAR_EOF' > menu.german &&
  960. XUNIX-Chat V2.9   (c) 1990 by M. Laukien
  961. X
  962. X[1]      Systemkonferenz betreten
  963. X[2]      Andere Konferenz besuchen
  964. X[3]      Neue Konferenz eroeffnen
  965. X[4]      Neue private Konferenz eroeffnen
  966. X[5]      Konferenzen anzeigen
  967. X
  968. X[X]      Ende
  969. SHAR_EOF
  970. $TOUCH -am 0122155491 menu.german &&
  971. chmod 0600 menu.german ||
  972. echo "restore of menu.german failed"
  973. set `wc -c menu.german`;Wc_c=$1
  974. if test "$Wc_c" != "231"; then
  975.     echo original size 231, current size $Wc_c
  976. fi
  977. # ============= menu.english ==============
  978. echo "x - extracting menu.english (Text)"
  979. sed 's/^X//' << 'SHAR_EOF' > menu.english &&
  980. XUNIX-Chat V2.9   (c) 1990 by M. Laukien
  981. X
  982. X[1]      Join the system conference
  983. X[2]      Join other conference
  984. X[3]      Start a new conference
  985. X[4]      Start a new private conference
  986. X[5]      Display active conferences
  987. X
  988. X[X]      quit
  989. SHAR_EOF
  990. $TOUCH -am 0122155491 menu.english &&
  991. chmod 0600 menu.english ||
  992. echo "restore of menu.english failed"
  993. set `wc -c menu.english`;Wc_c=$1
  994. if test "$Wc_c" != "231"; then
  995.     echo original size 231, current size $Wc_c
  996. fi
  997. # ============= super.user ==============
  998. echo "x - extracting super.user (Text)"
  999. sed 's/^X//' << 'SHAR_EOF' > super.user &&
  1000. Xroot
  1001. Xrootcsh
  1002. Xsysop
  1003. Xcosysop
  1004. SHAR_EOF
  1005. $TOUCH -am 0117133691 super.user &&
  1006. chmod 0600 super.user ||
  1007. echo "restore of super.user failed"
  1008. set `wc -c super.user`;Wc_c=$1
  1009. if test "$Wc_c" != "27"; then
  1010.     echo original size 27, current size $Wc_c
  1011. fi
  1012. # ============= name.list ==============
  1013. echo "x - extracting name.list (Text)"
  1014. sed 's/^X//' << 'SHAR_EOF' > name.list &&
  1015. Xsysop
  1016. Xcosysop
  1017. Xroot
  1018. Xrootcsh
  1019. Xgast
  1020. Xguest
  1021. SHAR_EOF
  1022. $TOUCH -am 0122161391 name.list &&
  1023. chmod 0600 name.list ||
  1024. echo "restore of name.list failed"
  1025. set `wc -c name.list`;Wc_c=$1
  1026. if test "$Wc_c" != "38"; then
  1027.     echo original size 38, current size $Wc_c
  1028. fi
  1029. # ============= guest.list ==============
  1030. echo "x - extracting guest.list (Text)"
  1031. sed 's/^X//' << 'SHAR_EOF' > guest.list &&
  1032. Xguest
  1033. Xgast
  1034. SHAR_EOF
  1035. $TOUCH -am 0806175590 guest.list &&
  1036. chmod 0600 guest.list ||
  1037. echo "restore of guest.list failed"
  1038. set `wc -c guest.list`;Wc_c=$1
  1039. if test "$Wc_c" != "11"; then
  1040.     echo original size 11, current size $Wc_c
  1041. fi
  1042. # ============= README.ger ==============
  1043. echo "x - extracting README.ger (Text)"
  1044. sed 's/^X//' << 'SHAR_EOF' > README.ger &&
  1045. X        -------------------------------
  1046. X        Installieren von UNIX-Chat V2.9
  1047. X        -------------------------------
  1048. X
  1049. Xo    Eintraege im Makefile ueberpruefen, und ggf. aendern, falls
  1050. X    z.B. andere Pfade gewuenscht sind.
  1051. X
  1052. Xo    Mit 'make' zum Test im aktuellen Directory installieren
  1053. X
  1054. Xo    Mit 'make install' installieren (Wichtig: Nicht von Hand
  1055. X    installieren, da sonst die Pfade nicht richtig gesetzt
  1056. X    werden).
  1057. X
  1058. Xo    Die Systemkonferenz starten mit 'chman -n &'.
  1059. X
  1060. Xo    Chat mit 'chat -m' aufrufen.
  1061. X
  1062. Xo    Wichtig: Prozesse nie mit 'kill -9 <pid>' beenden, sondern nur
  1063. X    mit 'kill <pid>'.
  1064. X
  1065. Xo    Fehler und Verbesserungsvorschlaege bitte an 'ml@brumuc.bru.sub.org'
  1066. X    senden.
  1067. SHAR_EOF
  1068. $TOUCH -am 0122154891 README.ger &&
  1069. chmod 0600 README.ger ||
  1070. echo "restore of README.ger failed"
  1071. set `wc -c README.ger`;Wc_c=$1
  1072. if test "$Wc_c" != "633"; then
  1073.     echo original size 633, current size $Wc_c
  1074. fi
  1075. # ============= README.eng ==============
  1076. echo "x - extracting README.eng (Text)"
  1077. sed 's/^X//' << 'SHAR_EOF' > README.eng &&
  1078. X        ------------------------------
  1079. X        Installation of UNIX-Chat V2.9
  1080. X        ------------------------------
  1081. X
  1082. Xo    Check the Makefile, and make the necessary changes, i.e. other
  1083. X    pathnames.
  1084. X
  1085. Xo    For testing, install with 'make' in the working directory.
  1086. X
  1087. Xo    If everything works fine, install with 'make install'.
  1088. X    Important: Don't copy the files by hand, because the pathnames
  1089. X    will not be set correctly.
  1090. X
  1091. Xo    Start the system conference with 'chman -n &'.
  1092. X
  1093. Xo    Start the chat with 'chat -m'.
  1094. X
  1095. Xo    Important: Never kill processes with 'kill -9 <pid>', use always
  1096. X    'kill <pid>'.
  1097. X
  1098. Xo    Please send bugreports to 'ml@brumuc.bru.sub.org'.
  1099. SHAR_EOF
  1100. $TOUCH -am 0117135491 README.eng &&
  1101. chmod 0600 README.eng ||
  1102. echo "restore of README.eng failed"
  1103. set `wc -c README.eng`;Wc_c=$1
  1104. if test "$Wc_c" != "610"; then
  1105.     echo original size 610, current size $Wc_c
  1106. fi
  1107. # ============= Makefile ==============
  1108. echo "x - extracting Makefile (Text)"
  1109. sed 's/^X//' << 'SHAR_EOF' > Makefile &&
  1110. X# ---------------------------------------------------------------------
  1111. X#                                     
  1112. X#     Name:            Chat V2.9                
  1113. X#                                     
  1114. X#     Programmteil:        Makefile                
  1115. X#                                     
  1116. X#     Autor:            Marc Laukien                
  1117. X#                                     
  1118. X# ---------------------------------------------------------------------
  1119. X
  1120. X# ----------------- Ab hier Eintragungen vornehmen --------------------
  1121. X# ----------------- Make the necessary changes     --------------------
  1122. X
  1123. XNAME     = chat
  1124. XLANG    = english
  1125. X
  1126. XLIBDIR     = /usr/local/lib/Chat
  1127. XBINDIR     = /usr/local/bin
  1128. X
  1129. XFLAGS     = -O
  1130. XLIB    = -lcurses
  1131. X#FLAGS     = -O -DM_TERMINFO
  1132. X#LIB    = -ltinfo
  1133. X
  1134. XSHAR    = shar -n UnixChat -o $(NAME) -L 50 -a
  1135. X
  1136. X# ----------------- Keine Aenderung ab hier !!! ------------------------
  1137. X# ----------------- Don't touch the rest !!!    ------------------------
  1138. X
  1139. XSHELL     =    /bin/sh
  1140. X
  1141. XCFLAGS     =     $(FLAGS) -Ihdrs -DSTDLANG=\"$(LANG)\"
  1142. X
  1143. XALLSRCS1 =     ch/init.c ch/input.c ch/main.c ch/comm.c ch/utility.c     \
  1144. X        ch/output.c ch/menu.c ch/invite.c ch/grep.c
  1145. X
  1146. XALLSRCS2 =     cm/init.c cm/int.c cm/main.c cm/comm.c
  1147. X
  1148. XALLSRCS  =    $(ALLSRCS1) $(ALLSRCS2)
  1149. X
  1150. XALLARCH  =    $(ALLSRCS) ch/lex.l                    \
  1151. X        ch/ch.h cm/cm.h hdrs/ipc.h hdrs/std.h            \
  1152. X        def.german def.english help.german help.english        \
  1153. X        menu.german menu.english                \
  1154. X        super.user name.list guest.list                \
  1155. X        README.ger README.eng Makefile
  1156. X
  1157. XALLOBJ1  =     ch/init.o ch/input.o ch/comm.o ch/utility.o        \
  1158. X        ch/output.o ch/invite.o ch/grep.o ch/lex.o
  1159. X
  1160. XALLOBJ2  =     cm/init.o cm/int.o cm/comm.o
  1161. X
  1162. Xall:        $(NAME) chman
  1163. X
  1164. X$(NAME):    $(ALLOBJ1) ch/main.o ch/menu.o
  1165. X        -mkdir userdir
  1166. X
  1167. X        $(CC) $(CFLAGS) -o $(NAME) $(ALLOBJ1) ch/menu.o ch/main.o    \
  1168. X        $(LIB) -ll
  1169. X        chmod 4711 $(NAME)
  1170. X
  1171. Xchman:        $(ALLOBJ2) cm/main.o
  1172. X        -mkdir confdir
  1173. X        -mkdir fifodir
  1174. X
  1175. X        $(CC) $(CFLAGS) -o chman $(ALLOBJ2) cm/main.o
  1176. X        chmod 4711 chman
  1177. X
  1178. Xlint.out:    $(ALLSRCS1) $(ALLSRCS2)
  1179. X        lint $(ALLSRCS1) >  lint.out
  1180. X        lint $(ALLSRCS2) >> lint.out
  1181. X
  1182. Xinstall:     all cm/main2.o ch/main2.o ch/menu2.o
  1183. X        -mkdir $(BINDIR)
  1184. X        -mkdir $(LIBDIR)
  1185. X        chmod 700 $(LIBDIR)
  1186. X        -mkdir $(LIBDIR)/confdir
  1187. X        -mkdir $(LIBDIR)/fifodir
  1188. X        -mkdir $(LIBDIR)/userdir
  1189. X        chmod 700 $(LIBDIR)/confdir
  1190. X        chmod 700 $(LIBDIR)/fifodir
  1191. X        chmod 700 $(LIBDIR)/userdir
  1192. X    
  1193. X        $(CC) $(CFLAGS) -o $(BINDIR)/$(NAME)              \
  1194. X        $(ALLOBJ1) ch/main2.o ch/menu2.o $(LIB) -ll 
  1195. X        chmod 4711 $(BINDIR)/$(NAME)
  1196. X
  1197. X        $(CC) $(CFLAGS) -o $(BINDIR)/chman              \
  1198. X        $(ALLOBJ2) cm/main2.o
  1199. X        chmod 4711 $(BINDIR)/chman
  1200. X
  1201. X        cp def.*        $(LIBDIR)
  1202. X        cp help.*        $(LIBDIR)
  1203. X        cp menu.*        $(LIBDIR)
  1204. X        cp super.user      $(LIBDIR)
  1205. X        cp name.list      $(LIBDIR)
  1206. X        cp guest.list      $(LIBDIR)
  1207. X        chmod 600 $(LIBDIR)/help.* $(LIBDIR)/def.*        \
  1208. X        $(LIBDIR)/menu.*                    \
  1209. X        $(LIBDIR)/super.user $(LIBDIR)/name.list        \
  1210. X        $(LIBDIR)/guest.list
  1211. X
  1212. Xremove:
  1213. X        -rm -rf $(LIBDIR)/confdir
  1214. X        -rm -rf $(LIBDIR)/fifodir
  1215. X        -rm -rf $(LIBDIR)/userdir
  1216. X        -rm -f  $(BINDIR)/$(NAME)
  1217. X        -rm -f  $(BINDIR)/chman
  1218. X        -rm -f  $(LIBDIR)/def.*
  1219. X        -rm -f  $(LIBDIR)/help.*
  1220. X        -rm -f  $(LIBDIR)/menu.*
  1221. X        -rm -f  $(LIBDIR)/super.user
  1222. X        -rm -f  $(LIBDIR)/name.list
  1223. X        -rm -f  $(LIBDIR)/guest.list
  1224. X
  1225. Xdist:        $(ALLARCH)
  1226. X        $(SHAR) $(ALLARCH)
  1227. X
  1228. Xchat.arc:    $(ALLARCH)
  1229. X        -rm -f chat.arc
  1230. X        arc -a chat.arc $(ALLARCH)
  1231. X        
  1232. Xchat.zoo:    $(ALLARCH)
  1233. X        -rm -f chat.zoo
  1234. X        zoo -add chat.zoo $(ALLARCH)
  1235. X        
  1236. Xchat.tar:    $(ALLARCH)
  1237. X        tar cvf chat.tar $(ALLARCH)
  1238. X        
  1239. Xchat.tar.z:    chat.tar
  1240. X        @if test -r chat.tar.z                 ;\
  1241. X        then                              \
  1242. X            rm -f chat.tar.z                ;\
  1243. X        fi
  1244. X        pack chat.tar
  1245. X        
  1246. Xchat.tar.Z:    chat.tar
  1247. X        @if test -r chat.tar.Z                 ;\
  1248. X        then                              \
  1249. X            rm -f chat.tar.Z                ;\
  1250. X        fi
  1251. X        compress chat.tar
  1252. X
  1253. Xclean:
  1254. X        -rm -f ch/*.o cm/*.o
  1255. X
  1256. Xclobber:    clean
  1257. X        -rm -f $(NAME)
  1258. X        -rm -f chman
  1259. X        -rm -f cm/ma2.c
  1260. X        -rm -f ch/ma2.c
  1261. X        -rm -f ch/mn2.c
  1262. X        -rm -f lint.out
  1263. X        -rm -f man.$(MANUAL)
  1264. X        -rm -f core
  1265. X        -rm -f mon.out
  1266. X        -rm -f lint.out
  1267. X        -rm -f *.bak
  1268. X        -rm -r -f confdir
  1269. X        -rm -r -f fifodir
  1270. X        -rm -r -f userdir
  1271. X
  1272. Xch/main2.c:    ch/main.c
  1273. X        ln ch/main.c ch/main2.c
  1274. X
  1275. Xch/main2.o:    ch/main2.c
  1276. X        $(CC) $(CFLAGS) -DLIBDIR=\"$(LIBDIR)\" -c ch/main2.c
  1277. X        mv main2.o ch
  1278. X
  1279. Xch/menu2.c:    ch/menu.c
  1280. X        ln ch/menu.c ch/menu2.c
  1281. X
  1282. Xch/menu2.o:    ch/menu2.c
  1283. X        $(CC) $(CFLAGS) -DBINDIR=\"$(BINDIR)\" -c ch/menu2.c
  1284. X        mv menu2.o ch
  1285. X
  1286. Xcm/main2.c:    cm/main.c
  1287. X        ln cm/main.c cm/main2.c
  1288. X
  1289. Xcm/main2.o:    cm/main2.c
  1290. X        $(CC) $(CFLAGS) -DLIBDIR=\"$(LIBDIR)\" -c cm/main2.c
  1291. X        mv main2.o cm
  1292. X
  1293. X#    Build a list of .h file dependencies.
  1294. Xdepend:
  1295. X    echo $(CC) $(CFLAGS)
  1296. X    @echo 'make depend is running on the following files: '
  1297. X    @echo $(ALLSRCS)
  1298. X    @rm -f makedep eddep
  1299. X    @for i in $(ALLSRCS);                           do\
  1300. X        $(CC) -E $(CFLAGS) $$i                    |\
  1301. X        grep '^#'                        |\
  1302. X        awk '{ print $$3 }'                    |\
  1303. X        grep '^"'                        |\
  1304. X        grep -v "/usr/include"                    |\
  1305. X        sed -e 's|/[^/]*/\.\.||g' -e 's|"||g'            |\
  1306. X        sort -u                            |\
  1307. X        awk "BEGIN { of = \"`basename $$i .c`\" \".o: \"; rec = of } \
  1308. X          { rec = rec \" \" \$$0 }                     \
  1309. X          END { print \"`dirname $$i`/\" rec ;                  \
  1310. X            print \"    $$(CC) $$(CFLAGS) -c $$i\" ;             \
  1311. X            print \"    mv `basename $$i .c`.o `dirname $$i`\" }"    \
  1312. X          >> makedep ;                             \
  1313. X    done
  1314. X    @echo '$$r makedep' >>eddep
  1315. X    @echo '/^# DO NOT DELETE THIS LINE/+1,$$d' >>eddep
  1316. X    @echo '$$r makedep' >>eddep
  1317. X    @echo 'w' >>eddep
  1318. X    @cp Makefile Makefile.bak
  1319. X    @ed - Makefile < eddep
  1320. X    @rm -f eddep makedep
  1321. X
  1322. X# DO NOT DELETE THIS LINE -- make depend uses it
  1323. Xch/init.o:  ch/ch.h ch/init.c hdrs/ipc.h hdrs/std.h
  1324. X    $(CC) $(CFLAGS) -c ch/init.c
  1325. X    mv init.o ch
  1326. Xch/input.o:  ch/ch.h ch/input.c hdrs/ipc.h hdrs/std.h
  1327. X    $(CC) $(CFLAGS) -c ch/input.c
  1328. X    mv input.o ch
  1329. Xch/main.o:  ch/ch.h ch/main.c hdrs/ipc.h hdrs/std.h
  1330. X    $(CC) $(CFLAGS) -c ch/main.c
  1331. X    mv main.o ch
  1332. Xch/comm.o:  ch/ch.h ch/comm.c hdrs/ipc.h hdrs/std.h
  1333. X    $(CC) $(CFLAGS) -c ch/comm.c
  1334. X    mv comm.o ch
  1335. Xch/utility.o:  ch/ch.h ch/utility.c hdrs/ipc.h hdrs/std.h
  1336. X    $(CC) $(CFLAGS) -c ch/utility.c
  1337. X    mv utility.o ch
  1338. Xch/output.o:  ch/ch.h ch/output.c hdrs/ipc.h hdrs/std.h
  1339. X    $(CC) $(CFLAGS) -c ch/output.c
  1340. X    mv output.o ch
  1341. Xch/menu.o:  ch/ch.h ch/menu.c hdrs/ipc.h hdrs/std.h
  1342. X    $(CC) $(CFLAGS) -c ch/menu.c
  1343. X    mv menu.o ch
  1344. Xch/invite.o:  ch/ch.h ch/invite.c hdrs/ipc.h hdrs/std.h
  1345. X    $(CC) $(CFLAGS) -c ch/invite.c
  1346. X    mv invite.o ch
  1347. Xch/grep.o:  ch/ch.h ch/grep.c hdrs/ipc.h hdrs/std.h
  1348. X    $(CC) $(CFLAGS) -c ch/grep.c
  1349. X    mv grep.o ch
  1350. Xcm/init.o:  cm/cm.h cm/init.c hdrs/ipc.h hdrs/std.h
  1351. X    $(CC) $(CFLAGS) -c cm/init.c
  1352. X    mv init.o cm
  1353. Xcm/int.o:  cm/cm.h cm/int.c hdrs/ipc.h hdrs/std.h
  1354. X    $(CC) $(CFLAGS) -c cm/int.c
  1355. X    mv int.o cm
  1356. Xcm/main.o:  cm/cm.h cm/main.c hdrs/ipc.h hdrs/std.h
  1357. X    $(CC) $(CFLAGS) -c cm/main.c
  1358. X    mv main.o cm
  1359. Xcm/comm.o:  cm/cm.h cm/comm.c hdrs/ipc.h hdrs/std.h
  1360. X    $(CC) $(CFLAGS) -c cm/comm.c
  1361. X    mv comm.o cm
  1362. SHAR_EOF
  1363. $TOUCH -am 0122160891 Makefile &&
  1364. chmod 0600 Makefile ||
  1365. echo "restore of Makefile failed"
  1366. set `wc -c Makefile`;Wc_c=$1
  1367. if test "$Wc_c" != "6399"; then
  1368.     echo original size 6399, current size $Wc_c
  1369. fi
  1370. rm -f shar3_seq_.tmp
  1371. echo "You have unpacked the last part"
  1372. exit 0
  1373. -- 
  1374.    /              |    -: Marc Laukien :-     |
  1375.   /__             |                           |   _  _           __
  1376.  /   \  /_  /  /  |   ml@brumuc.bru.sub.org   |  / \/ |   /  /  /
  1377. /____/ /   /__/   | sigma@salyko.doit.sub.org | /     |  /__/  /__
  1378.