|
|
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 p
Length: 7159 (0x1bf7)
Types: TextFile
Names: »prvcmd.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Spacewar/prvcmd.c«
/*
* Spacewar - priviledged commands for SWMASTER
*
* Copyright 1984 obo Systems, Inc.
* Copyright 1984 Dan Rosenblatt
*/
#include "spacewar.h"
#ifndef VMS
#include <sys/types.h>
#else /* BSD SYSIII SYSV */
#include <types.h>
#endif /* VMS */
#include "universe.h"
#include "login.h"
#include "sys.h"
#include "aln.h"
#include "build.h"
#include "obj.h"
#include "crft.h"
#include "torp.h"
static char *fmtip();
VOID prvcmd(plogin)
struct login *plogin;
{
char *s=plogin->ln_input,buf[256];
struct login *plgn;
struct aln *paln;
struct sys *psys;
struct obj *pobj;
struct universe *puniv;
struct crft *pcrft;
struct torp *ptorp;
int i;
#ifdef DEBUG
DBG("prvcmd(#%d/%s)\n",plogin-loginlst,plogin->ln_name);
#endif
/* only allowed if priviledged */
if (strcmp(SWMASTER,plogin->ln_name)) {
#ifdef DEBUG
VDBG("prvcmd return\n");
#endif
return;
}
if (!strcmp(".shutdown",s)) {
shutdown(0);
} else if (!strncmp(".logoff ",s,8)) {
for (s+=8,plgn=loginlst;plgn < loginlst+MAXLOGIN;++plgn) {
if (!plgn->ln_tty) continue;
if (!strcmp(plgn->ln_name,s)) logoff(plgn);
}
} else if (!strncmp(".aln",s,4)) {
s += 4;
for (paln=alnlst;paln < alnlst+MAXALN;++paln) {
sprintf(buf,
"#%-3d (%8.1e %8.1e %8.1e) (%3.0f %3.0f %3.0f) (%2.0f %2.0f %2.0f)",
paln-alnlst,paln->al_pstn[0],paln->al_pstn[1],paln->al_pstn[2],
paln->al_vel[0],paln->al_vel[1],paln->al_vel[2],
paln->al_thr[0],paln->al_thr[1],paln->al_thr[2]);
output(plogin,'C',0,buf);
sprintf(buf," %d %d %s",paln->al_dly,paln->al_htyp,
fmtip(paln->al_lhit));
output(plogin,'C',0,buf);
sprintf(buf," %s %d\n",fmtip(paln->al_atck),paln->al_aeval);
output(plogin,'C',0,buf);
if (*s)
for (psys=paln->al_sys;psys < paln->al_sys+MSYS;++psys) {
if (!psys->s_cap) continue; /* not in this craft */
sprintf(buf,"\t%-8.8s %3d %3d %3d %5d %5d\n",
subsysnam[psys-paln->al_sys],psys->s_pct,psys->s_edmg,
psys->s_dmg,psys->s_lvl,psys->s_cap);
output(plogin,'C',0,buf);
}
}
} else if (!strncmp(".crft",s,5)) {
s += 5;
for (pcrft=crftlst;pcrft < crftlst+MAXCRFT;++pcrft) {
if (!pcrft->cr_htyp) continue;
sprintf(buf,"#%-3d %d %5ld %3ld %5ld %5ld %2d %s\n",
pcrft-crftlst,pcrft->cr_htyp,pcrft->cr_flsp,pcrft->cr_crew,
pcrft->cr_pnts,pcrft->cr_time,pcrft->cr_kill,
fmtip(pcrft->cr_dock));
output(plogin,'C',0,buf);
sprintf(buf," (%8.1e %8.1e %8.1e) (%8.1e %8.1e %8.1e)\
(%3.0f %3.0f %3.0f) (%2.0f %2.0f %2.0f)\n ",
pcrft->cr_pstn[0],pcrft->cr_pstn[1],pcrft->cr_pstn[2],
pcrft->cr_dir[0],pcrft->cr_dir[1],pcrft->cr_dir[2],
pcrft->cr_vel[0],pcrft->cr_vel[1],pcrft->cr_vel[2],
pcrft->cr_thr[0],pcrft->cr_thr[1],pcrft->cr_thr[2]);
output(plogin,'C',0,buf);
for (i=0;i < MHOM;++i) {
sprintf(buf,"%d:%s ",i,fmtip(pcrft->cr_hom[i]));
output(plogin,'C',0,buf);
}
sprintf(buf," %s %d %5.1f %ld %d\n",fmtip(pcrft->cr_auto),
pcrft->cr_ffwd,DIV(pcrft->cr_vang,DEGTORAD),pcrft->cr_vdst,
pcrft->cr_plvl);
output(plogin,'C',0,buf);
if (*s)
for (psys=pcrft->cr_sys;psys < pcrft->cr_sys+MSYS;++psys) {
if (!psys->s_cap) continue; /* not in this craft */
sprintf(buf,"\t%-8.8s %3d %3d %3d %5d %5d\n",
subsysnam[psys-pcrft->cr_sys],psys->s_pct,psys->s_edmg,
psys->s_dmg,psys->s_lvl,psys->s_cap);
output(plogin,'C',0,buf);
}
}
} else if (!strncmp(".login",s,6)) {
s += 6;
for (plgn=loginlst;plgn < loginlst+MAXLOGIN;++plgn) {
if (!plgn->ln_tty) continue;
if (*s) {
#ifdef VMS
sprintf(buf,
"#%-3d %2d %x '%-8.8s' '%-8.8s' '%c' '%-12.12s' %s",
plgn-loginlst,plgn->ln_tty,plgn->ln_pid,plgn->ln_name,
plgn->ln_term ? plgn->ln_term : "",
plgn->ln_iomode ? plgn->ln_iomode : ' ',
plgn->ln_crft,fmtip(plgn->ln_play));
#else /* BSD SYSIII SYSV */
sprintf(buf,
"#%-3d %2d %5d %5d '%-8.8s' '%-8.8s' '%c' '%-12.12s' %s",
plgn-loginlst,plgn->ln_tty,plgn->ln_playpid,
plgn->ln_readpid,plgn->ln_name,
plgn->ln_term ? plgn->ln_term : "",
plgn->ln_iomode ? plgn->ln_iomode : ' ',plgn->ln_crft,
fmtip(plgn->ln_play));
#endif /* VMS BSD SYSIII SYSV */
output(plogin,'C',0,buf);
sprintf(buf," '%c'\n '%s'\n",
plgn->ln_stat ? plgn->ln_stat : ' ',plgn->ln_input);
output(plogin,'C',0,buf);
} else {
sprintf(buf,"#%-3d '%-8.8s' '%-8.8s' '%c' '%-12.12s' %s",
plgn-loginlst,plgn->ln_name,
plgn->ln_term ? plgn->ln_term : "",
plgn->ln_iomode ? plgn->ln_iomode : ' ',plgn->ln_crft,
fmtip(plgn->ln_play));
output(plogin,'C',0,buf);
sprintf(buf," '%c'\n",plgn->ln_stat ? plgn->ln_stat : ' ');
output(plogin,'C',0,buf);
}
}
} else if (!strncmp(".obj",s,4)) {
s += 4;
for (pobj=objlst;pobj < objlst+MAXOBJ;++pobj) {
sprintf(buf,"#%-3d %7ld %3d '%c' %s %5d %7ld %3.0f",
pobj-objlst,pobj->oj_mass,pobj->oj_rad,pobj->oj_rep,
fmtip(pobj->oj_octr),pobj->oj_oprd,pobj->oj_orad,
DIV(pobj->oj_ocrpt,DEGTORAD));
output(plogin,'C',0,buf);
if (*s) {
sprintf(buf," %5.1f %5.1f %5.1f %3.0f %3.0f %3.0f",
pobj->oj_optx,pobj->oj_opty,pobj->oj_optz,
pobj->oj_vel[0],pobj->oj_vel[1],pobj->oj_vel[2]);
output(plogin,'C',0,buf);
}
output(plogin,'C',0,"\n");
}
} else if (!strcmp(".torp",s)) {
for (ptorp=torplst;ptorp < torplst+MAXTORP;++ptorp) {
if (!ptorp->tp_aim.ip_ptr) continue;
sprintf(buf,"#%-3d (%8.1e %8.1e %8.1e) (%3.0f %3.0f %3.0f) \
(%2.0f %2.0f %2.0f) %s",
ptorp-torplst,ptorp->tp_pstn[0],ptorp->tp_pstn[1],
ptorp->tp_pstn[2],ptorp->tp_vel[0],ptorp->tp_vel[1],
ptorp->tp_vel[2],ptorp->tp_thr[0],ptorp->tp_thr[1],
ptorp->tp_thr[2],fmtip(ptorp->tp_aim));
output(plogin,'C',0,buf);
sprintf(buf," %s %ld %d",fmtip(ptorp->tp_fby),ptorp->tp_dist,
ptorp->tp_dmg);
output(plogin,'C',0,buf);
sprintf(buf," %s\n",fmtip(ptorp->tp_lhit));
output(plogin,'C',0,buf);
}
} else if (!strcmp(".universe",s)) {
for (puniv=univlst;puniv < univlst+MAXUNIVERSE;++puniv) {
if (!puniv->uv_type) continue;
sprintf(buf,"#%-3d '%c/%c' %8.1e %8.1e %8.1e %7ld %5d",
puniv-univlst,puniv->uv_type,puniv->uv_pctr,
puniv->uv_pstn[0],puniv->uv_pstn[1],puniv->uv_pstn[2],
puniv->uv_mass,puniv->uv_rad);
output(plogin,'C',0,buf);
switch(puniv->uv_type) {
case 'A':
sprintf(buf," #%-3d\n",puniv->uv_ptr.uv_aln-alnlst);
break;
case 'P':
sprintf(buf," #%-3d\n",puniv->uv_ptr.uv_crft-crftlst);
break;
case 'O':
sprintf(buf," #%-3d\n",puniv->uv_ptr.uv_obj-objlst);
break;
case 'T':
sprintf(buf," #%-3d\n",puniv->uv_ptr.uv_torp-torplst);
break;
default:
strcpy(buf,"\n");
break;
}
output(plogin,'C',0,buf);
}
} else if (!strncmp(".lock",s,5)) {
static msg[80+1];
s += 5;
while (*s == ' ') ++s;
strcpy(msg,s);
prvlck((*s) ? msg : NULL);
} else if (!strcmp(".unlock",s)) {
prvlck("");
}
output(plogin,0,0,0);
#ifdef DEBUG
VDBG("prvcmd return\n");
#endif
}
static char *fmtip(ip)
idxptr ip;
{
static char buf[16];
if (ip.ip_ptr)
sprintf(buf,"#%-3d",ip.ip_ptr-univlst);
else
strcpy(buf,"NULL");
return(buf);
}