📄 fips.c
字号:
/*
* randomword (word, hyphenated_word, minlen, maxlen, restrict,
seed)
*/
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
#define RAN_DEBUG
#define B1
#define TRUE 1
#define FALSE 0
#define RULE_SIZE (sizeof(rules)/sizeof(struct unit))
#define ALLOWED(flag) (digram[units_in_syllable[current_unit -1]][unit] & (flag))
#define MAX_UNACCEPTABLE 20
#define MAX_RETRIES (4 * (int) pwlen + RULE_SIZE)
#define NOT_BEGIN_SYLLABLE 010
#define NO_FINAL_SPLIT 04
#define VOWEL 02
#define ALTERNATE_VOWEL 01
#define NO_SPECIAL_RULE 0
#define BEGIN 0200
#define NOT_BEGIN 0100
#define BREAK 040
#define PREFIX 020
#define ILLEGAL_PAIR 010
#define SUFFIX 04
#define END 02
#define NOT_END 01
#define ANY_COMBINATION 0
typedef unsigned int uint;
typedef int boolean;
static int get_word();
static boolean have_initial_y();
static boolean illegal_placement();
static boolean improper_word();
static boolean have_final_split();
static char *get_syllable();
static unsigned short int random_unit();
static unsigned int randint();
static unsigned short int get_random();
static void set_seed();
extern char *calloc ();
extern char *malloc ();
extern char *strcpy ();
extern char *strcat ();
extern long time ();
extern long atol ();
extern double drand48();
extern int fscanf();
extern int fprintf();
struct unit
{
char unit_code[5];
unsigned short int flags;
};
static struct unit rules[] =
{
"a", VOWEL,
"b", NO_SPECIAL_RULE,
"c", NO_SPECIAL_RULE,
"d", NO_SPECIAL_RULE,
"e", NO_FINAL_SPLIT | VOWEL,
"f", NO_SPECIAL_RULE,
"g", NO_SPECIAL_RULE,
"h", NO_SPECIAL_RULE,
"i", VOWEL,
"j", NO_SPECIAL_RULE,
"k", NO_SPECIAL_RULE,
"l", NO_SPECIAL_RULE,
"m", NO_SPECIAL_RULE,
"n", NO_SPECIAL_RULE,
"o", VOWEL,
"p", NO_SPECIAL_RULE,
"r", NO_SPECIAL_RULE,
"s", NO_SPECIAL_RULE,
"t", NO_SPECIAL_RULE,
"u", VOWEL,
"v", NO_SPECIAL_RULE,
"w", NO_SPECIAL_RULE,
"x", NOT_BEGIN_SYLLABLE,
"y", ALTERNATE_VOWEL | VOWEL,
"z", NO_SPECIAL_RULE,
"ch", NO_SPECIAL_RULE,
"gh", NO_SPECIAL_RULE,
"ph", NO_SPECIAL_RULE,
"rh", NO_SPECIAL_RULE,
"sh", NO_SPECIAL_RULE,
"th", NO_SPECIAL_RULE,
"wh", NO_SPECIAL_RULE,
"qu", NO_SPECIAL_RULE,
"ck", NOT_BEGIN_SYLLABLE
};
static int digram[][RULE_SIZE] =
{
/* aa */ ILLEGAL_PAIR,
/* ab */ ANY_COMBINATION,
/* ac */ ANY_COMBINATION,
/* ad */ ANY_COMBINATION,
/* ae */ ILLEGAL_PAIR,
/* af */ ANY_COMBINATION,
/* ag */ ANY_COMBINATION,
/* ah */ NOT_BEGIN | BREAK | NOT_END,
/* ai */ ANY_COMBINATION,
/* aj */ ANY_COMBINATION,
/* ak */ ANY_COMBINATION,
/* al */ ANY_COMBINATION,
/* am */ ANY_COMBINATION,
/* an */ ANY_COMBINATION,
/* ao */ ILLEGAL_PAIR,
/* ap */ ANY_COMBINATION,
/* ar */ ANY_COMBINATION,
/* as */ ANY_COMBINATION,
/* at */ ANY_COMBINATION,
/* au */ ANY_COMBINATION,
/* av */ ANY_COMBINATION,
/* aw */ ANY_COMBINATION,
/* ax */ ANY_COMBINATION,
/* ay */ ANY_COMBINATION,
/* az */ ANY_COMBINATION,
/* ach */ ANY_COMBINATION,
/* agh */ ILLEGAL_PAIR,
/* aph */ ANY_COMBINATION,
/* arh */ ILLEGAL_PAIR,
/* ash */ ANY_COMBINATION,
/* ath */ ANY_COMBINATION,
/* awh */ ILLEGAL_PAIR,
/* aqu */ BREAK | NOT_END,
/* ack */ ANY_COMBINATION,
/* ba */ ANY_COMBINATION,
/* bb */ NOT_BEGIN | BREAK | NOT_END,
/* bc */ NOT_BEGIN | BREAK | NOT_END,
/* bd */ NOT_BEGIN | BREAK | NOT_END,
/* be */ ANY_COMBINATION,
/* bf */ NOT_BEGIN | BREAK | NOT_END,
/* bg */ NOT_BEGIN | BREAK | NOT_END,
/* bh */ NOT_BEGIN | BREAK | NOT_END,
/* bi */ ANY_COMBINATION,
/* bj */ NOT_BEGIN | BREAK | NOT_END,
/* bk */ NOT_BEGIN | BREAK | NOT_END,
/* bl */ BEGIN | SUFFIX | NOT_END,
/* bm */ NOT_BEGIN | BREAK | NOT_END,
/* bn */ NOT_BEGIN | BREAK | NOT_END,
/* bo */ ANY_COMBINATION,
/* bp */ NOT_BEGIN | BREAK | NOT_END,
/* br */ BEGIN | END,
/* bs */ NOT_BEGIN,
/* bt */ NOT_BEGIN | BREAK | NOT_END,
/* bu */ ANY_COMBINATION,
/* bv */ NOT_BEGIN | BREAK | NOT_END,
/* bw */ NOT_BEGIN | BREAK | NOT_END,
/* bx */ ILLEGAL_PAIR,
/* by */ ANY_COMBINATION,
/* bz */ NOT_BEGIN | BREAK | NOT_END,
/* bch */ NOT_BEGIN | BREAK | NOT_END,
/* bgh */ ILLEGAL_PAIR,
/* bph */ NOT_BEGIN | BREAK | NOT_END,
/* brh */ ILLEGAL_PAIR,
/* bsh */ NOT_BEGIN | BREAK | NOT_END,
/* bth */ NOT_BEGIN | BREAK | NOT_END,
/* bwh */ ILLEGAL_PAIR,
/* bqu */ NOT_BEGIN | BREAK | NOT_END,
/* bck */ ILLEGAL_PAIR,
/* ca */ ANY_COMBINATION,
/* cb */ NOT_BEGIN | BREAK | NOT_END,
/* cc */ NOT_BEGIN | BREAK | NOT_END,
/* cd */ NOT_BEGIN | BREAK | NOT_END,
/* ce */ ANY_COMBINATION,
/* cf */ NOT_BEGIN | BREAK | NOT_END,
/* cg */ NOT_BEGIN | BREAK | NOT_END,
/* ch */ NOT_BEGIN | BREAK | NOT_END,
/* ci */ ANY_COMBINATION,
/* cj */ NOT_BEGIN | BREAK | NOT_END,
/* ck */ NOT_BEGIN | BREAK | NOT_END,
/* cl */ SUFFIX | NOT_END,
/* cm */ NOT_BEGIN | BREAK | NOT_END,
/* cn */ NOT_BEGIN | BREAK | NOT_END,
/* co */ ANY_COMBINATION,
/* cp */ NOT_BEGIN | BREAK | NOT_END,
/* cr */ NOT_END,
/* cs */ NOT_BEGIN | END,
/* ct */ NOT_BEGIN | PREFIX,
/* cu */ ANY_COMBINATION,
/* cv */ NOT_BEGIN | BREAK | NOT_END,
/* cw */ NOT_BEGIN | BREAK | NOT_END,
/* cx */ ILLEGAL_PAIR,
/* cy */ ANY_COMBINATION,
/* cz */ NOT_BEGIN | BREAK | NOT_END,
/* cch */ ILLEGAL_PAIR,
/* cgh */ ILLEGAL_PAIR,
/* cph */ NOT_BEGIN | BREAK | NOT_END,
/* crh */ ILLEGAL_PAIR,
/* csh */ NOT_BEGIN | BREAK | NOT_END,
/* cth */ NOT_BEGIN | BREAK | NOT_END,
/* cwh */ ILLEGAL_PAIR,
/* cqu */ NOT_BEGIN | SUFFIX | NOT_END,
/* cck */ ILLEGAL_PAIR,
/* da */ ANY_COMBINATION,
/* db */ NOT_BEGIN | BREAK | NOT_END,
/* dc */ NOT_BEGIN | BREAK | NOT_END,
/* dd */ NOT_BEGIN,
/* de */ ANY_COMBINATION,
/* df */ NOT_BEGIN | BREAK | NOT_END,
/* dg */ NOT_BEGIN | BREAK | NOT_END,
/* dh */ NOT_BEGIN | BREAK | NOT_END,
/* di */ ANY_COMBINATION,
/* dj */ NOT_BEGIN | BREAK | NOT_END,
/* dk */ NOT_BEGIN | BREAK | NOT_END,
/* dl */ NOT_BEGIN | BREAK | NOT_END,
/* dm */ NOT_BEGIN | BREAK | NOT_END,
/* dn */ NOT_BEGIN | BREAK | NOT_END,
/* do */ ANY_COMBINATION,
/* dp */ NOT_BEGIN | BREAK | NOT_END,
/* dr */ BEGIN | NOT_END,
/* ds */ NOT_BEGIN | END,
/* dt */ NOT_BEGIN | BREAK | NOT_END,
/* du */ ANY_COMBINATION,
/* dv */ NOT_BEGIN | BREAK | NOT_END,
/* dw */ NOT_BEGIN | BREAK | NOT_END,
/* dx */ ILLEGAL_PAIR,
/* dy */ ANY_COMBINATION,
/* dz */ NOT_BEGIN | BREAK | NOT_END,
/* dch */ NOT_BEGIN | BREAK | NOT_END,
/* dgh */ NOT_BEGIN | BREAK | NOT_END,
/* dph */ NOT_BEGIN | BREAK | NOT_END,
/* drh */ ILLEGAL_PAIR,
/* dsh */ NOT_BEGIN | NOT_END,
/* dth */ NOT_BEGIN | PREFIX,
/* dwh */ ILLEGAL_PAIR,
/* dqu */ NOT_BEGIN | BREAK | NOT_END,
/* dck */ ILLEGAL_PAIR,
/* ea */ ANY_COMBINATION,
/* eb */ ANY_COMBINATION,
/* ec */ ANY_COMBINATION,
/* ed */ ANY_COMBINATION,
/* ee */ ANY_COMBINATION,
/* ef */ ANY_COMBINATION,
/* eg */ ANY_COMBINATION,
/* eh */ NOT_BEGIN | BREAK | NOT_END,
/* ei */ NOT_END,
/* ej */ ANY_COMBINATION,
/* ek */ ANY_COMBINATION,
/* el */ ANY_COMBINATION,
/* em */ ANY_COMBINATION,
/* en */ ANY_COMBINATION,
/* eo */ BREAK,
/* ep */ ANY_COMBINATION,
/* er */ ANY_COMBINATION,
/* es */ ANY_COMBINATION,
/* et */ ANY_COMBINATION,
/* eu */ ANY_COMBINATION,
/* ev */ ANY_COMBINATION,
/* ew */ ANY_COMBINATION,
/* ex */ ANY_COMBINATION,
/* ey */ ANY_COMBINATION,
/* ez */ ANY_COMBINATION,
/* ech */ ANY_COMBINATION,
/* egh */ NOT_BEGIN | BREAK | NOT_END,
/* eph */ ANY_COMBINATION,
/* erh */ ILLEGAL_PAIR,
/* esh */ ANY_COMBINATION,
/* eth */ ANY_COMBINATION,
/* ewh */ ILLEGAL_PAIR,
/* equ */ BREAK | NOT_END,
/* eck */ ANY_COMBINATION,
/* fa */ ANY_COMBINATION,
/* fb */ NOT_BEGIN | BREAK | NOT_END,
/* fc */ NOT_BEGIN | BREAK | NOT_END,
/* fd */ NOT_BEGIN | BREAK | NOT_END,
/* fe */ ANY_COMBINATION,
/* ff */ NOT_BEGIN,
/* fg */ NOT_BEGIN | BREAK | NOT_END,
/* fh */ NOT_BEGIN | BREAK | NOT_END,
/* fi */ ANY_COMBINATION,
/* fj */ NOT_BEGIN | BREAK | NOT_END,
/* fk */ NOT_BEGIN | BREAK | NOT_END,
/* fl */ BEGIN | SUFFIX | NOT_END,
/* fm */ NOT_BEGIN | BREAK | NOT_END,
/* fn */ NOT_BEGIN | BREAK | NOT_END,
/* fo */ ANY_COMBINATION,
/* fp */ NOT_BEGIN | BREAK | NOT_END,
/* fr */ BEGIN | NOT_END,
/* fs */ NOT_BEGIN,
/* ft */ NOT_BEGIN,
/* fu */ ANY_COMBINATION,
/* fv */ NOT_BEGIN | BREAK | NOT_END,
/* fw */ NOT_BEGIN | BREAK | NOT_END,
/* fx */ ILLEGAL_PAIR,
/* fy */ NOT_BEGIN,
/* fz */ NOT_BEGIN | BREAK | NOT_END,
/* fch */ NOT_BEGIN | BREAK | NOT_END,
/* fgh */ NOT_BEGIN | BREAK | NOT_END,
/* fph */ NOT_BEGIN | BREAK | NOT_END,
/* frh */ ILLEGAL_PAIR,
/* fsh */ NOT_BEGIN | BREAK | NOT_END,
/* fth */ NOT_BEGIN | BREAK | NOT_END,
/* fwh */ ILLEGAL_PAIR,
/* fqu */ NOT_BEGIN | BREAK | NOT_END,
/* fck */ ILLEGAL_PAIR,
/* ga */ ANY_COMBINATION,
/* gb */ NOT_BEGIN | BREAK | NOT_END,
/* gc */ NOT_BEGIN | BREAK | NOT_END,
/* gd */ NOT_BEGIN | BREAK | NOT_END,
/* ge */ ANY_COMBINATION,
/* gf */ NOT_BEGIN | BREAK | NOT_END,
/* gg */ NOT_BEGIN,
/* gh */ NOT_BEGIN | BREAK | NOT_END,
/* gi */ ANY_COMBINATION,
/* gj */ NOT_BEGIN | BREAK | NOT_END,
/* gk */ ILLEGAL_PAIR,
/* gl */ BEGIN | SUFFIX | NOT_END,
/* gm */ NOT_BEGIN | BREAK | NOT_END,
/* gn */ NOT_BEGIN | BREAK | NOT_END,
/* go */ ANY_COMBINATION,
/* gp */ NOT_BEGIN | BREAK | NOT_END,
/* gr */ BEGIN | NOT_END,
/* gs */ NOT_BEGIN | END,
/* gt */ NOT_BEGIN | BREAK | NOT_END,
/* gu */ ANY_COMBINATION,
/* gv */ NOT_BEGIN | BREAK | NOT_END,
/* gw */ NOT_BEGIN | BREAK | NOT_END,
/* gx */ ILLEGAL_PAIR,
/* gy */ NOT_BEGIN,
/* gz */ NOT_BEGIN | BREAK | NOT_END,
/* gch */ NOT_BEGIN | BREAK | NOT_END,
/* ggh */ ILLEGAL_PAIR,
/* gph */ NOT_BEGIN | BREAK | NOT_END,
/* grh */ ILLEGAL_PAIR,
/* gsh */ NOT_BEGIN,
/* gth */ NOT_BEGIN,
/* gwh */ ILLEGAL_PAIR,
/* gqu */ NOT_BEGIN | BREAK | NOT_END,
/* gck */ ILLEGAL_PAIR,
/* ha */ ANY_COMBINATION,
/* hb */ NOT_BEGIN | BREAK | NOT_END,
/* hc */ NOT_BEGIN | BREAK | NOT_END,
/* hd */ NOT_BEGIN | BREAK | NOT_END,
/* he */ ANY_COMBINATION,
/* hf */ NOT_BEGIN | BREAK | NOT_END,
/* hg */ NOT_BEGIN | BREAK | NOT_END,
/* hh */ ILLEGAL_PAIR,
/* hi */ ANY_COMBINATION,
/* hj */ NOT_BEGIN | BREAK | NOT_END,
/* hk */ NOT_BEGIN | BREAK | NOT_END,
/* hl */ NOT_BEGIN | BREAK | NOT_END,
/* hm */ NOT_BEGIN | BREAK | NOT_END,
/* hn */ NOT_BEGIN | BREAK | NOT_END,
/* ho */ ANY_COMBINATION,
/* hp */ NOT_BEGIN | BREAK | NOT_END,
/* hr */ NOT_BEGIN | BREAK | NOT_END,
/* hs */ NOT_BEGIN | BREAK | NOT_END,
/* ht */ NOT_BEGIN | BREAK | NOT_END,
/* hu */ ANY_COMBINATION,
/* hv */ NOT_BEGIN | BREAK | NOT_END,
/* hw */ NOT_BEGIN | BREAK | NOT_END,
/* hx */ ILLEGAL_PAIR,
/* hy */ ANY_COMBINATION,
/* hz */ NOT_BEGIN | BREAK | NOT_END,
/* hch */ NOT_BEGIN | BREAK | NOT_END,
/* hgh */ NOT_BEGIN | BREAK | NOT_END,
/* hph */ NOT_BEGIN | BREAK | NOT_END,
/* hrh */ ILLEGAL_PAIR,
/* hsh */ NOT_BEGIN | BREAK | NOT_END,
/* hth */ NOT_BEGIN | BREAK | NOT_END,
/* hwh */ ILLEGAL_PAIR,
/* hqu */ NOT_BEGIN | BREAK | NOT_END,
/* hck */ ILLEGAL_PAIR,
/* ia */ ANY_COMBINATION,
/* ib */ ANY_COMBINATION,
/* ic */ ANY_COMBINATION,
/* id */ ANY_COMBINATION,
/* ie */ NOT_BEGIN,
/* if */ ANY_COMBINATION,
/* ig */ ANY_COMBINATION,
/* ih */ NOT_BEGIN | BREAK | NOT_END,
/* ii */ ILLEGAL_PAIR,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -