|
|
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: 2815 (0xaff)
Types: TextFile
Names: »say.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Adventure/src/adv/say.c«
/*
** Copyright (c) 1985 Ken Wellsch
**
** Permission is hereby granted to all users to possess, use, copy,
** distribute, and modify the programs and files in this package
** provided it is not for direct commercial benefit and secondly,
** that this notice and all modification information be kept and
** maintained in the package.
**
*/
#include "adefs.h"
int say (key)
register int key ;
{
register int rec ;
if ( key == NULLTXT )
return ;
if ( key == BLANKTXT )
{
printf ("\n") ;
return ;
}
if ( key == OKTXT )
{
printf ("Ok.\n") ;
return ;
}
if ( ( rec = saykey (key) ) < 0 )
return ;
if ( readk (dbunit,rec,textbuf,TBUFSIZE) < 1 )
return ;
printf ("%s",textbuf) ;
return ;
}
int sayval (key,val)
int key, val ;
{
register int rec, i, endb ;
rec = saykey (key) ;
if ( ( endb = readk (dbunit,rec,textbuf,TBUFSIZE) ) < 1 )
error ("Sayval","bad text key %d!",key) ;
for ( i = 0 ; i < endb ; i++ )
{
if ( textbuf[i] == REPLACE )
{
printf ("%d",val) ;
continue ;
}
putchar(textbuf[i]) ;
}
return ;
}
int saykey (key)
register int key ;
{
register int rec, b ;
switch (class(key))
{
case OBJECT:
if ( where (key) != INHAND )
{
if ( eval (key) < 0 )
return (ERROR) ;
rec = key + ( (eval(key) + 1) * MAXOBJECTS ) ;
}
else
rec = key ;
break ;
case PLACE:
b = bitval (status) ;
if ( (b&LOOKING) )
rec = key + MAXPLACES ;
else
if ( (b&BRIEF) && (bitval(key)&BEEN) )
rec = key ;
else
if ( (b&FAST) )
rec = key ;
else
rec = key + MAXPLACES ;
break ;
case TEXT:
rec = key ;
break ;
default:
error ("Saykey","bad key %d!",key) ;
break ;
}
return (rec) ;
}
int saynam (key,op)
int key, op ;
{
register int i, j ;
int rec, endb ;
char word[20] ;
for ( j = 0 ; j < LINELEN ; j++ )
if ( op == argwd[j] || op == ref(argwd[j]) )
break ;
if ( j < LINELEN )
(void) strncpy (word,lex[j],20) ;
else
if ( findnam (op,word) != op )
error ("Saynam","bad name %d!",op) ;
rec = saykey (key) ;
if ( ( endb = readk (dbunit,rec,textbuf,TBUFSIZE) ) < 1 )
error ("Saynam","bad key %d!",rec) ;
up2low (word) ;
for ( i = 0 ; i < endb ; i++ )
{
if ( textbuf[i] == REPLACE )
{
printf ("%s",word) ;
continue ;
}
putchar (textbuf[i]) ;
}
return ;
}
int findnam (val,s)
int val ;
char *s ;
{
register struct symstr *p ;
register int i ;
for ( i = 0 ; i < TABSIZ; i++ )
for ( p = symtab[i] ; p != NIL ; p = p->s_nxt )
{
if ( p->s_val == val )
{
(void) strcpy (s,p->s_nam) ;
return (val) ;
}
}
return (ERROR) ;
}
int up2low (word)
register char *word ;
{
for ( ; *word ; word++ )
if ( (*word) >= 'A' && (*word) <= 'Z' )
*word += ( 'a' - 'A' ) ;
return ;
}