mirror of
https://github.com/antoinevignau/source.git
synced 2024-11-16 19:05:36 +00:00
1 line
3.8 KiB
C
Executable File
1 line
3.8 KiB
C
Executable File
/***********************************************************************\
|
|
|
|
Filename: dispunf.c
|
|
|
|
\***********************************************************************/
|
|
|
|
#include <string.h>
|
|
#include "thes.h"
|
|
#include "thesmisc.h"
|
|
|
|
#define SCR_LM 13
|
|
|
|
/* strings to indicate part of speech */
|
|
|
|
char *Posstr[] =
|
|
{
|
|
"adj",
|
|
"adj",
|
|
"adv",
|
|
"conj",
|
|
"interj",
|
|
"noun",
|
|
"noun",
|
|
"noun",
|
|
"prep",
|
|
"pron",
|
|
"verb",
|
|
"verb",
|
|
"verb",
|
|
};
|
|
|
|
int Nposstr = sizeof(Posstr) / sizeof(Posstr[0]);
|
|
|
|
static char *Relstr[32] =
|
|
{
|
|
NULL, "past/past participle",
|
|
NULL, "past",
|
|
NULL, "past participle",
|
|
NULL, "plural",
|
|
NULL, "adjective",
|
|
"verb", "comparative",
|
|
NULL, "superlative",
|
|
NULL, "noun",
|
|
"verb", "adverb",
|
|
"adjective","noun",
|
|
"adjective","present 3rd person sing.",
|
|
NULL, "present participle",
|
|
NULL, "past/past participle",
|
|
NULL, "plural",
|
|
NULL, "plural or second person singular",
|
|
NULL, "first person singular",
|
|
};
|
|
|
|
/* This function will translate an encoded meaning string to a string
|
|
that displays details of unflection (if any) along with the meaning
|
|
cores. */
|
|
|
|
dispunf(query, unfstr, meanno, def)
|
|
char *query;
|
|
char *unfstr;
|
|
int meanno;
|
|
char *def;
|
|
{
|
|
char *printpos();
|
|
|
|
char *unfstrptr;
|
|
int rel;
|
|
int pos;
|
|
int poschange;
|
|
char *unfquery;
|
|
|
|
unfstrptr = unfstr;
|
|
pos = (int) *def++ - 1;
|
|
|
|
/* rel indexes into the array Relstr[] to return the string
|
|
that is descriptive of the unflection. */
|
|
|
|
if (!(rel = (int) *def++))
|
|
{
|
|
unfstrptr = printpos(unfstrptr,pos);
|
|
while (unfstrptr - unfstr < SCR_LM)
|
|
*unfstrptr++ = ' ';
|
|
strecpy(unfstrptr, def);
|
|
return;
|
|
}
|
|
|
|
def = strchr(unfquery = def, 0) + 1;
|
|
poschange = FALSE;
|
|
|
|
/* Determine if the unflection involved a change in the part of
|
|
speech. */
|
|
|
|
switch (pos)
|
|
{
|
|
case NOUN:
|
|
case SPNOUN:
|
|
poschange = (rel != SI_PL && rel != SP_PL);
|
|
break;
|
|
case VERB:
|
|
case VERBSP:
|
|
poschange = (rel == VB_NN || rel == VB_AJ);
|
|
break;
|
|
case ADJ:
|
|
case ADJSP:
|
|
poschange = !(rel == RE_CM || rel == RE_SU);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (!poschange)
|
|
{
|
|
unfstrptr = printpos(unfstrptr, pos);
|
|
while (unfstrptr - unfstr < SCR_LM)
|
|
*unfstrptr++ = ' ';
|
|
if (rel == SI_PL && (pos == VERB || pos == VERBSP))
|
|
{
|
|
unfstrptr = strecpy(unfstrptr, (char *) Relstr[TP_SI]);
|
|
unfstrptr = strecpy(unfstrptr, " of ");
|
|
unfstrptr = strecpy(unfstrptr, unfquery);
|
|
}
|
|
else
|
|
{
|
|
unfstrptr = strecpy(unfstrptr, (char *) Relstr[rel]);
|
|
if (strcmp(query, unfquery) != 0 || rel != SI_PL && rel != SP_PL)
|
|
{
|
|
unfstrptr = strecpy(unfstrptr, " of ");
|
|
unfstrptr = strecpy(unfstrptr, unfquery);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
unfstrptr = strecpy(unfstrptr, (char *)Relstr[rel]);
|
|
while (unfstrptr - unfstr < SCR_LM)
|
|
*unfstrptr++ = ' ';
|
|
unfstrptr = strecpy(unfstrptr, "of ");
|
|
unfstrptr = strecpy(unfstrptr, unfquery);
|
|
unfstrptr = strecpy(unfstrptr, ", (");
|
|
unfstrptr = strecpy(unfstrptr,(char *) Posstr[pos]);
|
|
*unfstrptr++ = ')';
|
|
*unfstrptr++ = ' ';
|
|
}
|
|
*unfstrptr++ = ':';
|
|
*unfstrptr++ = ' ';
|
|
unfstrptr = strecpy(unfstrptr, def);
|
|
}
|
|
|
|
/* Return the string that describes the part of speech corresponding to
|
|
pos. */
|
|
|
|
static char *printpos(str, pos)
|
|
char *str;
|
|
int pos;
|
|
{
|
|
if (pos < 0 || pos >= Nposstr)
|
|
return (strecpy(str, "unknown part of speech "));
|
|
else
|
|
return (strecpy(str, (char *)Posstr[pos]));
|
|
}
|