DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T t

⟦eec079a97⟧ TextFile

    Length: 2602 (0xa2a)
    Types: TextFile
    Names: »telegram.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Gb/telegram.c« 

TextFile

/*
 * Galactic Bloodshed (Robert Chansky, smq@b)
 *  telegram.c -- send a telegram to user
 */

#include "vars.h"
#include "races.h"
#include "ships.h"
#include <ctype.h>
#include <signal.h>
#include <strings.h>
#include <setjmp.h>
extern jmp_buf main_jenv;
extern char telegram_buf[AUTO_TELEG_SIZE];

telegram(APcount, argn,args)
int APcount;
int argn;
char args[MAXARGS][COMMANDSIZE];
{
racetype *alien;
placetype where;
planettype *pl;
int c,i,numraces,recp = -1;
bool Place = 0;
char telefl[50], tbuf[200], tmbuf[40], r[RNAMESIZE];
int telegram_pdata,telegram_handler();


  signal(SIGINT, telegram_handler);

  if (!enufAP(Sdata.AP,APcount) && Dir.level!=LEVEL_UNIV 
		&& !enufAP(Stars[Dir.snum]->AP,APcount) )
	telegram_handler();

  if (argn<2) {		/* recipient not specified */
	printf("To whom/where? ");
	scanf("%[^\n]",r);
	getchr();
  } else
	strncpy(r,args[1],RNAMESIZE);


  if (r[0] == '/' || r[0]=='#' || r[0]=='.' || r[0]==CHAR_CURR_SCOPE) {
    Place = 1;
    where = Getplace(r,1);
    if (where.err)
	telegram_handler();
  } else {
    GetPlayer(r, &recp, &alien);
    if ( recp == -1) {
	  printf("Player does not exist.\n");
	  telegram_handler();
    }
  }

  printf("Enter telegram for %s,\n  ending with ctrl-D.\n\n", 
			Place ? Dispplace(&where) : alien->name );

  printf("Subject : ");
  teleg_add("", telegram_buf);
  if (Place) {
	sprintf(tbuf, "Message received at %s%s.\n", 
		where.level==LEVEL_SHIP ? "ship " : "", Dispplace(&where) );
	teleg_add(tbuf, telegram_buf);
  }
  i = 0;
  while ( (c=getchr()) != EOF) {
	  ungetc(c,stdin);
	  scanf("%199[^\n]", tbuf);
	  getchr();
	  i += strlen(tbuf);
	  teleg_add(tbuf, telegram_buf);
  	  printf("%d : ",TELEGRAM_SIZE - i );
  }
  
	/* send it */
  if (!Place)
	  teleg_send(Playernum, recp, telegram_buf);
  else
     switch (where.level) {
	case LEVEL_STAR:
	        for (i=1; i<MAXPLAYERS; i++)
		  if (isset(Stars[where.snum]->inhabited,i))
		     teleg_send(Playernum, i, telegram_buf);
		break;
	case LEVEL_PLAN:
		openpdata(&telegram_pdata);
		getplanet(telegram_pdata, &pl, Stars[where.snum]->planetpos[where.pnum]);
		close(telegram_pdata);
		for (i=1; i<MAXPLAYERS; i++)
			if (pl->info[i-1].numsectsowned)
			     teleg_send(Playernum, i, telegram_buf);
		break;
	case LEVEL_SHIP:
		teleg_send(Playernum, where.shipptr->owner, telegram_buf);
		break;
    	case LEVEL_UNIV:
		printf("We're sorry, no one is there to receive your call.\n");
		break;
    }

	/* get rid of ctrl-D problem */
  clearerr(stdin);

  printf("\nMessage delivered.\n");

}


telegram_handler(sig, code, scp)
{
 longjmp(main_jenv,1);
}