|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 4390 (0x1126)
Types: TextFile
Names: »smessage.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/xtrek/smessage.c«
#ifndef lint
static char *rcsid_smessage_c = "$Header: smessage.c,v 10.1 86/11/30 15:28:48 jg Rel $";
#endif lint
/* Copyright (c) 1986 Chris Guthrie */
#include <X/Xlib.h>
#include <stdio.h>
#include <math.h>
#include <signal.h>
#include <ctype.h>
#include "defs.h"
#include "struct.h"
#include "data.h"
#include "bitmaps.h"
extern Window messagew;
int messpend;
int lcount;
char buf[80];
char addr;
#define ADDRLEN 10
char addrmesg[ADDRLEN];
int lastcount;
extern int mdisplayed;
smessage(ichar)
char ichar;
{
int group;
int recip;
char ch;
if (messpend == 0) {
messpend = 1;
if (mdisplayed) {
XPixSet(messagew, 5, 5, dfontinfo->width * lastcount,
dfontinfo->height, backColor);
mdisplayed = 0;
}
/* Put the proper recipient in the window */
if (getaddr(ichar) < 0) {
/* print error message */
messpend = 0;
return;
}
XText(messagew, 5 + dfontinfo->width, 5,
addrmesg, ADDRLEN, dfont, textColor, backColor);
lcount = ADDRLEN;
return;
}
switch (ichar) {
case '\b':
case '\177':
if (--lcount < ADDRLEN) {
lcount = ADDRLEN;
break;
}
XPixSet(messagew, 5 + dfontinfo->width * lcount, 5,
dfontinfo->width, dfontinfo->height, backColor);
break;
case '\025':
case '\030':
if (--lcount < ADDRLEN) {
lcount = ADDRLEN;
break;
}
XPixSet(messagew, 5 + dfontinfo->width * lcount, 5,
dfontinfo->width, dfontinfo->height, backColor);
while(--lcount)
XPixSet(messagew, 5 + dfontinfo->width * lcount, 5,
dfontinfo->width, dfontinfo->height, backColor);
break;
case '\r':
buf[lcount - ADDRLEN] = 0;
messpend = 0;
switch (addr) {
case 'A':
pmessage(buf, 0, MALL, addrmesg);
break;
case 'F':
pmessage(buf, FED, MTEAM, addrmesg);
break;
case 'R':
case 'r':
pmessage(buf, ROM, MTEAM, addrmesg);
break;
case 'K':
case 'k':
pmessage(buf, KLI, MTEAM, addrmesg);
break;
case 'O':
case 'o':
pmessage(buf, ORI, MTEAM, addrmesg);
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
pmessage(buf, addr - '0', MINDIV, addrmesg);
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
pmessage(buf, addr - 'a' - 10, MINDIV, addrmesg);
break;
default:
warning("Not legal recipient");
}
XPixSet(messagew, 5, 5, dfontinfo->width * lcount,
dfontinfo->height, backColor);
mdisplayed = 0;
lcount = 0;
break;
default:
if (lcount == 80) {
XFeep(0);
break;
}
if (iscntrl(ichar))
break;
XText(messagew, 5 + dfontinfo->width * lcount, 5,
&ichar, 1, dfont, textColor, backColor);
buf[(lcount++) - ADDRLEN] = ichar;
break;
}
}
pmessage(str, recip, group, address)
char *str;
int recip;
int group;
char *address;
{
struct message *cur;
if (++(mctl->mc_current) >= MAXMESSAGE)
mctl->mc_current = 0;
cur = &messages[mctl->mc_current];
cur->m_no = mctl->mc_current;
cur->m_flags = group;
cur->m_time = 0;
cur->m_recpt = recip;
sprintf(cur->m_data, "%-9s %s", address, str);
cur->m_flags |= MVALID;
}
getaddr(who)
char who;
{
addr = who;
sprintf(addrmesg, " %c%x->", teamlet[me->p_team], me->p_no);
switch (who) {
case 'A':
sprintf(&addrmesg[5], "ALL");
break;
case 'F':
sprintf(&addrmesg[5], "FED");
break;
case 'R':
case 'r':
sprintf(&addrmesg[5], "ROM");
break;
case 'K':
case 'k':
sprintf(&addrmesg[5], "KLI");
break;
case 'O':
case 'o':
sprintf(&addrmesg[5], "ORI");
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (isAlive(&players[who - '0'])) {
sprintf(&addrmesg[5], "%c%x ",
teamlet[players[who - '0'].p_team], who - '0');
}
else {
warning("Player is not in game");
return(-1);
}
break;
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
if (isAlive(&players[who - 'a' + 10])) {
sprintf(&addrmesg[5], "%c%x ",
teamlet[players[who - 'a' + 10].p_team], who - 'a' + 10);
}
else {
warning("Player is not in game");
return(-1);
}
break;
default:
warning("Not legal recipient");
return(-1);
}
return(0);
}