Annotation of researchv10no/games/festoon.c, revision 1.1

1.1     ! root        1: /*     %W%     */
        !             2: #include <stdio.h>
        !             3: #define R random()
        !             4: #define T 0.125
        !             5: #define CHOOSE(x) (x[R%(sizeof x / sizeof *x)])
        !             6: #define EQ(a,b) (strcmp(a,b)==0)
        !             7: #define LAST(x) (x[strlen(x)-1])
        !             8: #define VOWEL(x) (x=='a'||x=='e'||x=='i'||x=='o'||x=='u')
        !             9: #define N 8
        !            10: typedef struct xyz { char *type; 
        !            11:        union { struct xyz *x[N];
        !            12:                char *s[N]; } list; } *X,XX;
        !            13: typedef struct { char *number,*ending,*tense,*an,*unspec,*passive; } *E,EE;
        !            14: 
        !            15: X getxx(),verbal(),comp(),advp(),adjph(),adverb(),adjective(),prep(),vprep();
        !            16: X np(),aux(),vp(),art(),modal(),perf(),prog(),nounal(),sent(),comma();
        !            17: X adjval();
        !            18: char *tense(),*number(),*prefix(),*root();
        !            19: 
        !            20: double makeup=.95;
        !            21: static char *adjlist[] = {"concrete","abstract","procedural","real","ideal",
        !            22:                        "functional","prototype",
        !            23:                        "effective","capable","incremental",
        !            24:                        "perceived","associated","interdepartmental",
        !            25:                        "diverse","characteristic","worst-case",
        !            26:                        "qualitative","fully automatic","candidate",
        !            27:                        "consensual","consequential","conjectural",
        !            28:                        "constructive","initial","cooperative",
        !            29:                        "essential","methodological","requisite",
        !            30:                        "historical","situational","political",
        !            31:                        "prepared","material","defined","well defined",
        !            32:                        "organizational","projected","overall",
        !            33:                        "accepted","rejected","corresponding",
        !            34:                        "committed","environmental","typical","working","timely",
        !            35:                        "growing","unprecedented","new","renewed","fresh",
        !            36:                        "rapid","changing","careful","comprehensive","broad",
        !            37:                        "massive","huge","enormous",
        !            38:                        "evaluated","discresionary",
        !            39:                        "durable","beneficial",
        !            40:                        "maximal","tremendous","minimal",
        !            41:                        "on-site","standardized","standard",
        !            42:                        "powerful","natural","necessary",
        !            43:                        "reasonable","successful",
        !            44:                        "doubtful","dubious","certain",
        !            45:                        "unified","different","similar","utilitarian",
        !            46:                        "realizable","organizable","motivated",
        !            47:                        "topical","valuable","feasible",
        !            48:                        "intelligent","deliverable","nontrivial",
        !            49:                        "worthwhile","complicated",
        !            50:                        "organized","organizing","progressing",
        !            51:                        "schedulable","resourceful","commanding",
        !            52:                        "important","allocatable","temporal",
        !            53:                        "ponderable","understandable","comprehendable",
        !            54:                        "past","present","future",
        !            55:                        "obvious","considerable","finished","completed",
        !            56:                        "unique","abovementioned",
        !            57:                        "major","minor","tendentious","activating",
        !            58:                        "actual","added","adequate","affordable",
        !            59:                        "analyzable","additional","intuitive",
        !            60:                        "artificial","good","better",
        !            61:                        "worse","bad","basic","fundamental","brief",
        !            62:                        "general","very unique","extreme","most unique",
        !            63:                        "central","proximate","approximate","collected",
        !            64:                        "conductable","comtemplatable",
        !            65:                        "continuing","demonstrable","desirable",
        !            66:                        "correctable","foreseeable",
        !            67:                        "discontinued","early","beginning",
        !            68:                        "effectuated","elucidated","emotional",
        !            69:                        "enclosed","enthused","entire","exact",
        !            70:                        "experimental","fearful","final",
        !            71:                        "following","informative",
        !            72:                        "full","complete","indicated","authorized",
        !            73:                        "modularized","submodularized",
        !            74:                        "particular","preferred","satisfactory",
        !            75:                        "measurable","referenced","literal",
        !            76:                        "modified",
        !            77:                        "correct","prioritized","prolonged",
        !            78:                        "regrettable","apparent",
        !            79:                        "continued","subsequent","sufficient",
        !            80:                        "suggestive","true","ultimate","separate",
        !            81:                        "purposeful","regarded","resulting",
        !            82:                        "doubtful","evident","interesting","worthy",
        !            83:                        "uniform",
        !            84:                        "vital","viable",
        !            85:                        "worthwhile","alternative",
        !            86:                        "sophisticated","employed",
        !            87:                        "clear","lucid","simple","perspicuous",
        !            88:                        "incomplete","concerned"};
        !            89: 
        !            90: random() {
        !            91: long lrand();
        !            92: static short tab[31];
        !            93: static short i;
        !            94: i=(lrand()>>15) & 32767;
        !            95: return tab[i%31]=32767-tab[i%31]^i;
        !            96: }
        !            97: 
        !            98: X nomq(env) E env; {
        !            99: X v=getxx();
        !           100: v->type="-nomq";
        !           101: if(EQ(env->number,"sing")) {
        !           102:        if(EQ(tense(),"past"))v->list.s[0]="there was";
        !           103:        else v->list.s[0]="there is";
        !           104:        }
        !           105: else {
        !           106:        if(EQ(tense(),"past"))v->list.s[0]="there were";
        !           107:        else v->list.s[0]="there are";
        !           108:        }
        !           109: if(prob(0.2))v->list.s[1]=" not";
        !           110: return v;
        !           111: }
        !           112: X rel(env) E env; {
        !           113: static char *c[] = {"that","which"};
        !           114: X v=getxx();
        !           115: v->type="-rel";
        !           116: v->list.s[0]=CHOOSE(c);
        !           117: return v;
        !           118: }
        !           119: 
        !           120: X sent(env) E env; {
        !           121: X sentv=getxx();
        !           122: sentv->type="sent";
        !           123: if(prob(0.09)) {
        !           124:        env->unspec="";
        !           125:        sentv->list.x[1]=np(env);
        !           126:        sentv->list.x[3]=aux(env);
        !           127:        sentv->list.x[4]=vp(env);
        !           128:        sentv->list.x[0]=nomq(env);
        !           129:        sentv->list.x[2]=rel(env);
        !           130:        return sentv;
        !           131:        }
        !           132: sentv->list.x[0]=np(env);
        !           133: sentv->list.x[1]=aux(env);
        !           134: sentv->list.x[2]=vp(env);
        !           135: return sentv;
        !           136: }
        !           137: 
        !           138: X nomy(env) E env; {
        !           139: X v=getxx();
        !           140: v->type="-nomq";
        !           141: v->list.s[0]="the fact that";
        !           142: return v;
        !           143: }
        !           144: 
        !           145: X np(env) E env; {
        !           146: X npv=getxx();
        !           147: EE nenv;
        !           148: static EE empty;
        !           149: npv->type="np";
        !           150: if(prob(0.025)) {
        !           151:        nenv=empty;
        !           152:        npv->list.x[0]=nomy(&nenv);
        !           153:        npv->list.x[1]=sent(&nenv);
        !           154:        if(env->number==0)env->number="sing";
        !           155:        return npv;
        !           156:        }
        !           157: npv->list.x[1]=nounal(env);
        !           158: npv->list.x[0]=art(env);
        !           159: return npv;
        !           160: }
        !           161: 
        !           162: X aux(env) E env; {
        !           163: X auxv=getxx();
        !           164: int i=0;
        !           165: auxv->type="aux";
        !           166: if(env->tense==0)env->tense=env->ending=tense();
        !           167: if(prob(0.25))auxv->list.x[i++]=modal(env);
        !           168: if(prob(0.25))auxv->list.x[i++]=perf(env);
        !           169: if(prob(0.25))auxv->list.x[i++]=prog(env);
        !           170: return auxv;
        !           171: }
        !           172: 
        !           173: X passive(env) E env; {
        !           174: X v=getxx();
        !           175: v->type="-passive";
        !           176: if(env->tense==0)env->tense=env->ending=tense();
        !           177: if(env->number==0)env->number=number();
        !           178: if(EQ(env->ending,"modal"))v->list.s[0]="be";
        !           179: else if(EQ(env->ending,"-en"))v->list.s[0]="been";
        !           180: else if(EQ(env->ending,"-ing"))v->list.s[0]="being";
        !           181: else {
        !           182:        if(EQ(env->tense,"past"))
        !           183:                v->list.s[0]=EQ(env->number,"sing")?"was":"were";
        !           184:        else v->list.s[0]=EQ(env->number,"sing")?"is":"are";
        !           185:        }
        !           186: env->passive=env->ending="pass";
        !           187: return v;
        !           188: }
        !           189: 
        !           190: X passprep(env) E env; {
        !           191: X v=getxx();
        !           192: v->type="-passprep";
        !           193: v->list.s[0]="by";
        !           194: return v;
        !           195: }
        !           196: 
        !           197: X vp(env) E env; {
        !           198: X vpv=getxx();
        !           199: int i=0;
        !           200: vpv->type="vp";
        !           201: if(prob(0.5))vpv->list.x[i++]=passive(env);
        !           202: vpv->list.x[i++]=verbal(env);
        !           203: vpv->list.x[i++]=comp(env);
        !           204: if(prob(0.10))vpv->list.x[i++]=advp(env);
        !           205: return vpv;
        !           206: }
        !           207: 
        !           208: X art(env) E env; {
        !           209: static char *aspecsg[] = {"the","the","the","the","the","this","this","that"};
        !           210: static char *aspecpl[] = {"the","the","the","the","the","these","those"};
        !           211: static char *aunssg[] = {"a","a","a","a","a","a","a","much","each","any"};
        !           212: static char *aunspl[] = {"some","a few","a couple","several","many","all",
        !           213:                        "no",
        !           214:                        "an undue number of",
        !           215:                        "a number of"};
        !           216: X artv=getxx();
        !           217: artv->type="-art";
        !           218: if(env->number==0)env->number=number();
        !           219: if(env->unspec==0&&prob(0.33)) {
        !           220:        if(EQ(env->number,"sing"))artv->list.s[0]=CHOOSE(aspecsg);
        !           221:        else artv->list.s[0]=CHOOSE(aspecpl);
        !           222:        }
        !           223: else if(prob(0.50)||env->an&&EQ(env->number,"sing")) {
        !           224:        if(EQ(env->number,"sing"))artv->list.s[0]=env->an?"a":CHOOSE(aunssg);
        !           225:        else artv->list.s[0]=CHOOSE(aunspl);
        !           226:        if(env->an&&EQ(artv->list.s[0],"all"))artv->list.s[0]="";
        !           227:        }
        !           228: else artv->list.s[0]="";
        !           229: env->unspec=0;
        !           230: if(env->an&&EQ(env->an,"an")&&EQ(artv->list.s[0],"a"))
        !           231:        artv->list.s[0]="an";
        !           232: env->an=0;
        !           233: return artv;
        !           234: }
        !           235: 
        !           236: X modal(env) E env; {
        !           237: static char *pres[] = {"can","may","must","shall","will"};
        !           238: static char *past[] = {"could","might","should","would"};
        !           239: X modalv=getxx();
        !           240: modalv->type="-modal";
        !           241: if(env->tense==0)env->tense=env->ending=tense();
        !           242: if(EQ(env->ending,"pres"))modalv->list.s[0]=CHOOSE(pres);
        !           243:        else modalv->list.s[0]=CHOOSE(past);
        !           244: env->ending="modal";
        !           245: return modalv;
        !           246: }
        !           247: 
        !           248: X perf(env) E env; {
        !           249: X perfv=getxx();
        !           250: perfv->type="-perf";
        !           251: if(env->tense==0)env->tense=env->ending=tense();
        !           252: if(env->number==0)env->number=number();
        !           253: if(EQ(env->ending,"past")) {
        !           254:        perfv->list.s[0]="had";
        !           255:        }
        !           256: else if(EQ(env->ending,"pres")) {
        !           257:        if(EQ(env->number,"sing"))perfv->list.s[0]="had";
        !           258:        else perfv->list.s[0]="have";
        !           259:        }
        !           260: else perfv->list.s[0]="have";
        !           261: env->ending="-en";
        !           262: return perfv;
        !           263: }
        !           264: 
        !           265: X prog(env) E env; {
        !           266: X progv=getxx();
        !           267: progv->type="-prog";
        !           268: if(env->tense==0)env->tense=env->ending=tense();
        !           269: if(env->number==0)env->number=number();
        !           270: if(EQ(env->ending,"pres")) {
        !           271:        if(EQ(env->number,"sing"))progv->list.s[0]="is";
        !           272:        else progv->list.s[0]="are";
        !           273:        }
        !           274: else if(EQ(env->ending,"past")) {
        !           275:        if(EQ(env->number,"sing"))progv->list.s[0]="was";
        !           276:        else progv->list.s[0]="were";
        !           277:        }
        !           278: else if(EQ(env->ending,"-en")) {
        !           279:        progv->list.s[0]="been";
        !           280:        }
        !           281: else if(EQ(env->ending,"modal")) {
        !           282:        progv->list.s[0]="be";
        !           283:        }
        !           284: env->ending="-ing";
        !           285: return progv;
        !           286: }
        !           287: 
        !           288: X verb(env) E env; {
        !           289: /* they pres, he pres, they past, they perf, they prog, they pass */
        !           290: static char *ends[][6] = {{"ate","ates","ated","ated","ating","ated"},
        !           291:                        {"en","ens","ened","ened","ening","ened"},
        !           292:                        {"esce","esces","esced","esced","escing","esced"},
        !           293:                        {"fy","fies","fied","fied","fying","fied"},
        !           294:                        {"ize","izes","ized","ized","izing","ized"}};
        !           295: X verbv=getxx();
        !           296: int i;
        !           297: verbv->type="-verb";
        !           298: if(env->tense==0)env->tense=env->ending=tense();
        !           299: if(env->number==0)env->number=number();
        !           300: if(0&&prob(0.1)&&EQ(env->tense,env->ending)) {
        !           301:        if(EQ(env->number,"sing")) {
        !           302:                if(EQ(env->tense,"pres"))verbv->list.s[0]="is";
        !           303:                else verbv->list.s[0]="was";
        !           304:                }
        !           305:        else {
        !           306:                if(EQ(env->tense,"pres"))verbv->list.s[0]="are";
        !           307:                else verbv->list.s[0]="were";
        !           308:                }
        !           309:        }
        !           310: else {
        !           311:        verbv->list.s[0]=prefix(env);
        !           312:        verbv->list.s[1]=root(env);
        !           313:        if(EQ(env->ending,"pres")&&EQ(env->number,"sing"))i=1;
        !           314:        else if(EQ(env->ending,"pres")||EQ(env->ending,"modal"))i=0;
        !           315:        else if(EQ(env->ending,"past"))i=2;
        !           316:        else if(EQ(env->ending,"-en"))i=3;
        !           317:        else if(EQ(env->ending,"-ing"))i=4;
        !           318:        else if(EQ(env->ending,"pass"))i=5;
        !           319:        else i=0;
        !           320:        verbv->list.s[2]=ends[R%(sizeof ends/sizeof *ends)][i];
        !           321:        }
        !           322: env->ending=0;
        !           323: return verbv;
        !           324: }
        !           325: 
        !           326: X noun(env) E env; {
        !           327: static char *suff[] = {"ion","sion","tion","age","ness","ment","ure",
        !           328:                        "ity","iety","ty","ence","ency","ance",
        !           329:                        "ancy","tude","hood","ture","ate","art","ard",
        !           330:                        "ism","ine","stress","trix","ess",
        !           331:                        "dom","ship","eer","ster","ant","ent","ary",
        !           332:                        "ery","ory","ette","let","ling","ule","kin",
        !           333:                        "ar","or","ist",
        !           334:                        "fulness",
        !           335:                        "kin","cule","icle","y","ability","iosos"};
        !           336: static char *wordy[] = {"final completion","final ending","final outcome",
        !           337:                        "adaptation","appearance","argument","circumstance",
        !           338:                        "confession","confidence","delimitation","dilution",
        !           339:                        "dissertation","distribution","duplication",
        !           340:                        "entertainment","equipment","evolution",
        !           341:                        "existence","expression","generation","impression",
        !           342:                        "integration","interaction","investment","judgment",
        !           343:                        "population","provision","solution","statement",
        !           344:                        "tradition","transmission",
        !           345:                        "final result","added increment","assistance",
        !           346:                        "beneficial assistance","mutual cooperation",
        !           347:                        "projection","future projection",
        !           348:                        "capability","conjecture","consensus of opinion",
        !           349:                        "general consensus","absence","deficiency",
        !           350:                        "inadequacy","insufficience","insufficiency",
        !           351:                        "growing importance","renewed emphasis",
        !           352:                        "renewed interest","changing behavior",
        !           353:                        "critical thinking","careful thinking",
        !           354:                        "comprehensive survey","high standard",
        !           355:                        "basic foundation","system testing",
        !           356:                        "serious discussion","serious concern",
        !           357:                        "organizational framework","prototype model",
        !           358:                        "uniform nomenclature","greater cooperation",
        !           359:                        "uniform consistency","early expectation",
        !           360:                        "standardization","great similarity",
        !           361:                        "shortage","presence","sufficiency",
        !           362:                        "consequent result","construct","disutility",
        !           363:                        "early beginning","emotional feeling","endeavor",
        !           364:                        "authorization","order of magnitude","preference",
        !           365:                        "impact","joint cooperation","joint partnership",
        !           366:                        "main essential","methodology","modification",
        !           367:                        "necessary requisite","past history","situation",
        !           368:                        "effectuation","clarification","new doubt",
        !           369:                        "policy","encouragement","preparation",
        !           370:                        "criterion","material","interest","acceptance",
        !           371:                        "rejection","publication","circulation",
        !           372:                        "protection","insurance",
        !           373:                        "assignment","identification",
        !           374:                        "submission","request",
        !           375:                        "guidance","correspondence","inclusion",
        !           376:                        "attachment","assumption",
        !           377:                        "recommendation","prescription","approval",
        !           378:                        "discretion","responsibility","relevance",
        !           379:                        "issuance","termination","total effect",
        !           380:                        "deleterious effect","consolidation",
        !           381:                        "aggregation","definiteness","commencement",
        !           382:                        "actual experience","experience",
        !           383:                        "combination","accord","filing",
        !           384:                        "idea","abstraction","method","procedure",
        !           385:                        "complaint","maintenance","finance","travel",
        !           386:                        "purchase","repair","routine",
        !           387:                        "development","cancellation",
        !           388:                        "partitioning","development effort",
        !           389:                        "project","automation","multilevel architecture",
        !           390:                        "multilevel heirarchy","data stream",
        !           391:                        "objective",
        !           392:                        "individual assignment","mode of operation",
        !           393:                        "clear community","attendant interest",
        !           394:                        "task division","well defined interfacing",
        !           395:                        "team report","meeting time","effective use",
        !           396:                        "friction",
        !           397:                        "major objective","ownership",
        !           398:                        "overall project time constraint",
        !           399:                        "functional division","requirements analysis",
        !           400:                        "code development","charter",
        !           401:                        "requirements definition","vertical division",
        !           402:                        "broad range","strong feeling",
        !           403:                        "considerable latitude","overall project constraint",
        !           404:                        "sufficient resource","assigned task","expectation",
        !           405:                        "critical aspect","clear understanding",
        !           406:                        "computing load","clean interfacing","natural basis",
        !           407:                        "team activity","team responsibility",
        !           408:                        "main function","predominant portion",
        !           409:                        "work plan","major breakpoint","work module",
        !           410:                        "achievable accuracy","supplementary work",
        !           411:                        "field version","internal establishment",
        !           412:                        "internal communication","development progress",
        !           413:                        "internal meeting","experience level",
        !           414:                        "high level autonomy","adherence",
        !           415:                        "feasibility demonstration","persistent problem",
        !           416:                        "internal objective","idea sharing",
        !           417:                        "improved performance","unfamiliar methodology",
        !           418:                        "new methodology","development experience",
        !           419:                        "module specification","good progress",
        !           420:                        "optimal number","natural division",
        !           421:                        "good relationship","cross attendance",
        !           422:                        "attendance","necessary communication",
        !           423:                        "evolving organization","basic principle",
        !           424:                        "complete revision","general information",
        !           425:                        "primary objective","load-carrying capacity",
        !           426:                        "necessary revision","major change",
        !           427:                        "clarified interpretation","subsequent attempt",
        !           428:                        "basic objective","full utilization",
        !           429:                        "practical consideration",
        !           430:                        "proportionate quantity","substantial change",
        !           431:                        "database design","unified framework",
        !           432:                        "customer service","strong interest",
        !           433:                        "unified description","necessary background information",
        !           434:                        "provisioning","physical coverage","general observation",
        !           435:                        "new technology","validity determination",
        !           436:                        "relation","regulation","verification",
        !           437:                        "impediment","portal","practice","premise",
        !           438:                        "basis","movement","question",
        !           439:                        "issue","input","output","observation",
        !           440:                        "input","output","input","output",
        !           441:                        "mechanization","function","evaluation",
        !           442:                        "result","further consideration","category",
        !           443:                        "performance indicator","early warning",
        !           444:                        "analysis purpose","measurement","replacement",
        !           445:                        "utilitarian purpose",
        !           446:                        "quota","proposed enhancement","enhancement",
        !           447:                        "interfacing","team organization","module",
        !           448:                        "guideline","continuing study",
        !           449:                        "required assistance","major advance",
        !           450:                        "proposal","hierarchy",
        !           451:                        "current view","refinement","activity",
        !           452:                        "external description","tight schedule pressure",
        !           453:                        "internal conflict","internal issue",
        !           454:                        "reasonable compromise","next phase",
        !           455:                        "goal","time constraint","constraint",
        !           456:                        "outcome","important outcome",
        !           457:                        "considerable experience","intelligent choice",
        !           458:                        "deliverable documentation","discussion",
        !           459:                        "timely delivery","design issue","large quantity",
        !           460:                        "general environment","protocol",
        !           461:                        "transitioning","modeling",
        !           462:                        "considerable difficulty","abstract interfacing",
        !           463:                        "data structure","consideration","difficulty",
        !           464:                        "statistical accuracy",
        !           465:                        "agenda","technique","reordering",
        !           466:                        "reauthorization","current proposal",
        !           467:                        "significant change","criteria","validation",
        !           468:                        "validity",
        !           469:                        "terminology","current understanding",
        !           470:                        "incorporation","staffing impact",
        !           471:                        "schedule impact","cost tradeoff",
        !           472:                        "system architecture",
        !           473:                        "adequate capacity","centralization",
        !           474:                        "current task","system deployment",
        !           475:                        "attendant uncertainty","process",
        !           476:                        "potential usefulness","proposed method",
        !           477:                        "basic assumption","anomaly",
        !           478:                        "available data","potential improvement",
        !           479:                        "registration","exemption","exception",
        !           480:                        "follow-up","service",
        !           481:                        "installation","construction","necessity",
        !           482:                        "occasion","instrumentation","disposal",
        !           483:                        "attractiveness",
        !           484:                        "convenience","sponsoring",
        !           485:                        "signification","meaningfulness",
        !           486:                        "significantness","individuality",
        !           487:                        "specification","determination","affirmation",
        !           488:                        "recruitment","supervision","management",
        !           489:                        "oversight","overview","environment",
        !           490:                        "effectation","circumvention","location",
        !           491:                        "execution","effectiveness","consciousness",
        !           492:                        "notation","confirmation","restriction",
        !           493:                        "organization","realization","actification",
        !           494:                        "activation","reification","beginning","conclusion",
        !           495:                        "ending","finishing","teamwork","motivation",
        !           496:                        "attitude","good attitude",
        !           497:                        "progress","milestone","deadline","schedule",
        !           498:                        "allocation","resource","command","concern",
        !           499:                        "time","time frame","reality",
        !           500:                        "behaviour","ability","advent","increment",
        !           501:                        "opportunity","accomplishment","aggregate",
        !           502:                        "analysis","totality","matter",
        !           503:                        "date","duration","centrality",
        !           504:                        "proximity","collection","elimintaion",
        !           505:                        "investigation","opinion","debate",
        !           506:                        "decision","benefit","difference","discontinuity",
        !           507:                        "fabrication","plan","chart","forecast",
        !           508:                        "simplicity","simplification","maximization",
        !           509:                        "minimization","direction",
        !           510:                        "agreement",
        !           511:                        "amount","quantity","quality","essence",
        !           512:                        "description","violation","purpose",
        !           513:                        "primary purpose","automatic control","redefinition",
        !           514:                        "uniform emphasis","study activity","work activity",
        !           515:                        "concept stage","concept activity",
        !           516:                        "possible potential","summarization","system function",
        !           517:                        "rationale","significant enhancement","diverse need",
        !           518:                        "diverse organization","comprehensive plan","interim",
        !           519:                        "functional overview","system configuration",
        !           520:                        "configuration","failure","quantitative result",
        !           521:                        "major obstacle","conception",
        !           522:                        "effectiveness","final evaluation",
        !           523:                        "interrelationship","functional requirement",
        !           524:                        "system philosophy","verbal interchange",
        !           525:                        "perceived inadequacy","primary emphasis",
        !           526:                        "intermingling","cooperation","partnership",
        !           527:                        "adjustment","application","implementation",
        !           528:                        "contact","mention","power",
        !           529:                        "nature","invention","importance",
        !           530:                        "ground","reason","permission","size",
        !           531:                        "report","documentation","priority",
        !           532:                        "pursuance","recurrance","resumption",
        !           533:                        "presupposition","continuance",
        !           534:                        "substantiation","success","action","truth",
        !           535:                        "past experience","greater acceptability",
        !           536:                        "organizational structure","clear distinction",
        !           537:                        "clear definition",
        !           538:                        "significant use","unmet need","centralized organization",
        !           539:                        "vague concept","negative impact","detrimental effect",
        !           540:                        "modularization","submodularization",
        !           541:                        "effect","consistancy",
        !           542:                        "inconsistancy","completion","utilization",
        !           543:                        "reference","doubt","evidence",
        !           544:                        "viewpoint",
        !           545:                        "actual fact",
        !           546:                        "true fact","underlying purpose","viable alternative"};
        !           547: X nounv=getxx();
        !           548: int i=0;
        !           549: nounv->type="-noun";
        !           550: if(env->number==0)env->number=number();
        !           551: if(prob(makeup)) {
        !           552:        if(prob(0.05)) {
        !           553:                nounv->list.s[i++]=CHOOSE(adjlist);
        !           554:                nounv->list.s[i++]="ness";
        !           555:                }
        !           556:        else nounv->list.s[i++]=CHOOSE(wordy);
        !           557:        }
        !           558: else {
        !           559:        nounv->list.s[i++]=prefix(env);
        !           560:        nounv->list.s[i++]=root(env);
        !           561:        nounv->list.s[i++]=CHOOSE(suff);
        !           562:        }
        !           563: if(EQ(env->number,"plural")) {
        !           564:        if(LAST(nounv->list.s[i-1])=='s')nounv->list.s[i]="es";
        !           565:        else if(LAST(nounv->list.s[i-1])=='y')nounv->list.s[i]="ies";
        !           566:        else nounv->list.s[i]="s";
        !           567:        }
        !           568: return nounv;
        !           569: }
        !           570: 
        !           571: X nounal(env) E env; {
        !           572: X nounalv=getxx();
        !           573: int i=0;
        !           574: X p;
        !           575: nounalv->type="nounal";
        !           576: if(prob(0.15)) {
        !           577:        nounalv->list.x[i++]=adjval(env);
        !           578:        }
        !           579: nounalv->list.x[i++]=noun(env);
        !           580: if(prob(0.15)) {
        !           581:        nounalv->list.x[i++]=adjph(env);
        !           582:        }
        !           583: env->an="a";
        !           584: for(p=nounalv; p->type[0]!='-'; p=p->list.x[0]);
        !           585: for(i=0; p->list.s[i]; i++) {
        !           586:        if(p->list.s[i][0]==0)continue;
        !           587:        if(VOWEL(p->list.s[i][0])) {
        !           588:                env->an="an";
        !           589:                }
        !           590:        break;
        !           591:        }
        !           592: return nounalv;
        !           593: }
        !           594: 
        !           595: X adjval(env) E env; {
        !           596: X adjvalv=getxx();
        !           597: int i=0;
        !           598: adjvalv->type="adjval";
        !           599: if(prob(0.25)) {
        !           600:        adjvalv->list.x[i++]=adverb(env);
        !           601:        }
        !           602: do {
        !           603:        adjvalv->list.x[i++]=adjective(env);
        !           604:        } while(i<N-1&&prob(0.25));
        !           605: return adjvalv;
        !           606: }
        !           607: 
        !           608: char *prefix(env) E env; {
        !           609: static char *pref[] = {
        !           610: "amb","ambi","super","hyper","an","tra","trans","post","palim",
        !           611: "omni","pan","circ","circum","peri","a","ab","abs","de","apo",
        !           612: "re","ana","mal","ante","pre","fore","pro","infra","para",
        !           613: "inter","ultra","extra","trans","cata","de","oct","octa",
        !           614: "octo","equi","pseudo","prim","prot","proto","pent","penta",
        !           615: "quin","quint","quinque","pro","tetr","tetra","quad","quadr",
        !           616: "quadri","quartet","off","bene","hemi","demi","semi","crypto",
        !           617: "cent","centi","hecto","en","em","in","im","intro","be",
        !           618: "macro","poly","mult","multi","neo","nona","novem","ennea",
        !           619: "in","un","im","il","ir","non","a","nil","paleo","mon","mono",
        !           620: "uni","e","ex","ec","ef","super","supr","sur","hyper","vic",
        !           621: "vice","hept","hepta","sept","septe","septem","septi","hex",
        !           622: "hexa","sex","dis","deca","deka","deci","kilo","mill","milli",
        !           623: "tri","per","dia","ad","com","di","amphi","bi","bin","bis",
        !           624: "sub","hypo","epi","eu","holo"};
        !           625: if(prob(0.65))return "";
        !           626: return CHOOSE(pref);
        !           627: }
        !           628: 
        !           629: char *root(env) E env; {
        !           630: static char *root[] = {
        !           631: "pan","omni","arch","zo","rog","rogat","cred","flect","flex",
        !           632: "test","hem","hemato","nasc","nat","bibl","fer","voc","port","lat",
        !           633: "fortuna","ped","chrom","vinc","vict","crea","cise","mort","mors",
        !           634: "necr","claim","clam","hetero","pel","puls","vac","iso","phobe",
        !           635: "phobia","prim","prime","flu","flux","sequ","liber","liver","theo",
        !           636: "magna","medi","man","manu","pen","pend","pens","eu","capit",
        !           637: "iatr","aud","aus","cor","cord","cour","grav","ten","tain",
        !           638: "tent","sacr","sacer","heiro","sanct","cide","mega","ultima",
        !           639: "ridi","risi","leg","jus","jur","nom","duc","duct","duce",
        !           640: "bio","viv","vivi","vita","lus","lum","luc","photo",
        !           641: "min","philo","phile","phila","amic","anthrop","poly","multi",
        !           642: "fac","fact","fic","fect","meter","psych","mod","mot","mov",
        !           643: "nov","neo","neg","uni","alter","ali","idio","pop","dem",
        !           644: "demo","lic","licit","poten","posse","potes","mem","simul",
        !           645: "arch","homo","mar","mer","vis","vid","scope","auto","mitt",
        !           646: "miss","ac","acr","brev","clud","clus","dorm","micro","aster",
        !           647: "astro","rect","recti","forc","fort","path","cap","cep","cept",
        !           648: "put","tempo","tempor","dent","dont","ver","veri",
        !           649: "feder","fide","feal","fid","cosm","migra","hydro","aqu",
        !           650: "endo","gyn","logo","opus","oper","graph","scrib","scrip",
        !           651: "mis","miso","anni","annu","enni","ced","cede","ceed","cess"};
        !           652: return CHOOSE(root);
        !           653: }
        !           654: 
        !           655: prob(f) double f; {return R<f*32767.0;}
        !           656: 
        !           657: char *tense() {return prob(0.5)? "pres": "past";}
        !           658: 
        !           659: char *number() {return prob(0.25)?"plural":"sing";}
        !           660: 
        !           661: X getxx() {
        !           662: X rv;
        !           663: static XX empty;
        !           664: rv=(X)malloc(sizeof*rv);
        !           665: if(rv==0)printf("outa space\n"),exit(1);
        !           666: *rv=empty;
        !           667: return rv;
        !           668: }
        !           669: 
        !           670: X verbal(env) E env; {
        !           671: X verbalv=getxx();
        !           672: int i=0;
        !           673: verbalv->type="verbal";
        !           674: if(prob(0.25))verbalv->list.x[i++]=adverb(env);
        !           675: verbalv->list.x[i++]=verb(env);
        !           676: return verbalv;
        !           677: }
        !           678: 
        !           679: X adverb(env) E env; {
        !           680: static char *wordy[] = {"very ","extremely ","generally ","reasonably ",
        !           681:                "fundamentally ","essentially ","particularly ","very ",
        !           682:                "very ","very ",
        !           683:                "very ","very ",
        !           684:                "very ","very ",
        !           685:                "very ","very ",
        !           686:                "very ","very ",
        !           687:                "very ","very ",
        !           688:                "very ","very ",
        !           689:                "entirely ",
        !           690:                "rather ","fairly ","relatively ","comparatively ",
        !           691:                "moderately ",
        !           692:                "totally ","very ","quite "};
        !           693: static char *suff[] = {"wardly","ably","wisely","ably","ily","ly","ly","ly"};
        !           694: static char *c[] = {"absolutely","functionally",
        !           695:                "accordingly","broadly","actionably","actually",
        !           696:                "additionally",
        !           697:                "ambiguously","amply",
        !           698:                "analogously",
        !           699:                "aperiodically",
        !           700:                "apparently","appreciably",
        !           701:                "appropriately","approximately",
        !           702:                "arbitrarily",
        !           703:                "associatively",
        !           704:                "automatically",
        !           705:                "awfully",
        !           706:                "axiomatically",
        !           707:                "badly","barely","basically",
        !           708:                "beneficially",
        !           709:                "blatantly",
        !           710:                "capably","carefully","carelessly",
        !           711:                "casually","causally","cautiously",
        !           712:                "centrally","certainly",
        !           713:                "cheaply","cleanly",
        !           714:                "closely","coarsely","cognizantly",
        !           715:                "coincidentally","collectively","collaterally",
        !           716:                "comparably",
        !           717:                "competently","completely","comprehensibly",
        !           718:                "concededly","conceivably",
        !           719:                "concisely","conclusively","concretely",
        !           720:                "concurrently","conjecturally",
        !           721:                "currently",
        !           722:                "conscientously","consequently","consequentially",
        !           723:                "consistently","constantly",
        !           724:                "contemporaneuosly","constructively",
        !           725:                "continually","continuously","contractually",
        !           726:                "contrarily","contributatively","conveniently",
        !           727:                "conventionally",
        !           728:                "correctively",
        !           729:                "correctly",
        !           730:                "crudely",
        !           731:                "curiously",
        !           732:                "decidedly",
        !           733:                "deeply",
        !           734:                "deficiently","demandingly",
        !           735:                "dependably","desireably",
        !           736:                "determinately","diagnostically",
        !           737:                "differentially","differently",
        !           738:                "directly","discernibly",
        !           739:                "distinctly","doubtfully","dramatically",
        !           740:                "dynamically",
        !           741:                "economically",
        !           742:                "effecaciously","efficiently",
        !           743:                "elegantly",
        !           744:                "emphatically","encouragingly",
        !           745:                "endlessly","endurably",
        !           746:                "entirely","epistomologically",
        !           747:                "functionally","immediately",
        !           748:                "equably","equally","equitably","erroneously",
        !           749:                "esoterically","eternally","evenly","eventfully",
        !           750:                "eventually","evidently",
        !           751:                "exceedingly","exactly","excellently",
        !           752:                "exceptionally","excessively","exclusively",
        !           753:                "experimentally",
        !           754:                "explicitly","extremely",
        !           755:                "factually","faithfully",
        !           756:                "faultlessly","feasibly",
        !           757:                "finitely","firmly","forcefully",
        !           758:                "formally","formerly","frankly","freely",
        !           759:                "frugally","fully","generally",
        !           760:                "globally","gradually",
        !           761:                "harmlessly",
        !           762:                "helpfully",
        !           763:                "highly","homogeneously",
        !           764:                "hopefully",
        !           765:                "ideally","identically","ideologically",
        !           766:                "idiomatically","idiosyncratically","idly",
        !           767:                "imaginably","immaterially","immensely",
        !           768:                "impartially","imperceptably","imperfectly","importantly",
        !           769:                "improperly","imprudently","inaccurately","inappropriately",
        !           770:                "accurately",
        !           771:                "inclusively","incompletely","incorrectly",
        !           772:                "increasingly","independently",
        !           773:                "indirectly","ineffectively","ineffectually","inefficiently",
        !           774:                "infallibly","instantaneously","instantly",
        !           775:                "insufficiently","internally","likely","only",
        !           776:                "invaluably","inversely","irrelevantly","irrespectively",
        !           777:                "largely","lastly","legitimately","literally",
        !           778:                "locally","loosely","manageably","markedly",
        !           779:                "memorably","mildly","mindfully","moderately",
        !           780:                "momentarily","naturally","needfully","needlessly",
        !           781:                "nominally","normally","objectively","occasionally",
        !           782:                "temporarily",
        !           783:                "officially","oppositely","ordinarily","ostensibly",
        !           784:                "partially","permissibly",
        !           785:                "personally","pertinently",
        !           786:                "physically","plainly","plainly",
        !           787:                "pleasingly","politically",
        !           788:                "potentially","predictively",
        !           789:                "predominantly","prematurely","preparedly","presently",
        !           790:                "previously","primarily",
        !           791:                "primely","principally","problematically",
        !           792:                "productively","promptly","proportionately",
        !           793:                "provably","purely","quickly","radically","randomly","recently",
        !           794:                "repeatedly","secondarily","separately",
        !           795:                "usually","specifically",
        !           796:                "redundantly","regardlessly","reliably",
        !           797:                "remarkably","remotely","respectively",
        !           798:                "probably",
        !           799:                "robustly","seemingly",
        !           800:                "sensibly","singularly","steadily",
        !           801:                "strikingly","substantially","successfully",
        !           802:                "supposedly","systematically","understandably",
        !           803:                "necessarily","unfortunately",
        !           804:                "unnecessarily","unmistakably","usefully","weakly"};
        !           805: X adverbv=getxx();
        !           806: int i=0;
        !           807: adverbv->type="-adverb";
        !           808: if(prob(0.150)) {
        !           809:        adverbv->list.s[i++]=prob(.5)?"simply":"easily";
        !           810:        return adverbv;
        !           811:        }
        !           812: if(prob(0.4))adverbv->list.s[i++]=CHOOSE(wordy);
        !           813: if(prob(makeup))adverbv->list.s[i++]=CHOOSE(c);
        !           814: else {
        !           815:        adverbv->list.s[i++]=prefix(env);
        !           816:        adverbv->list.s[i++]=root(env);
        !           817:        adverbv->list.s[i++]=CHOOSE(suff);
        !           818:        }
        !           819: return adverbv;
        !           820: }
        !           821: 
        !           822: X adjective(env) E env; {
        !           823: static char *suff[] = {"ive","ful","ous","some","oid","ine","esque","en","an",
        !           824:                "ile","able","ible","istic","ic",
        !           825:                "an","ian","ish","ite","al","less"};
        !           826: X adjv=getxx();
        !           827: int i=0;
        !           828: adjv->type="-adjective";
        !           829: if(prob(0.2)) {
        !           830:        adjv->list.s[i++]="not ";
        !           831:        adjv->list.s[i++]="un";
        !           832:        }
        !           833: if(prob(makeup)) {
        !           834:        adjv->list.s[i++]=CHOOSE(adjlist);
        !           835:        return adjv;
        !           836:        }
        !           837: adjv->list.s[i++]=prefix(env);
        !           838: adjv->list.s[i++]=root(env);
        !           839: adjv->list.s[i++]=CHOOSE(suff);
        !           840: return adjv;
        !           841: }
        !           842: 
        !           843: X adjph(env) E env; {
        !           844: X adjv=getxx();
        !           845: EE nenv;
        !           846: static EE empty;
        !           847: int i=0;
        !           848: adjv->type="adjph";
        !           849: if(prob(0.25)) {
        !           850:        nenv= *env;
        !           851:        nenv.tense=0;
        !           852:        adjv->list.x[i++]=rel(&nenv);
        !           853:        adjv->list.x[i++]=aux(&nenv);
        !           854:        adjv->list.x[i++]=vp(&nenv);
        !           855:        return adjv;
        !           856:        }
        !           857: nenv=empty;
        !           858: adjv->list.x[i++]=prep(&nenv);
        !           859: adjv->list.x[i++]=np(&nenv);
        !           860: return adjv;
        !           861: }
        !           862: 
        !           863: X prep(env) E env; {
        !           864: static char *prep[] = {"across","by","in","of","near","under","over",
        !           865:                "in back of","below","behind","of","of","of","of",
        !           866:                "centered around","centered about",
        !           867:                "in close proximity to","following after",
        !           868:                "in between","in conflict with","in conjunction with",
        !           869:                "in the area of","in the neighborhood of","in the proximity of",
        !           870:                "in the field of","for the purpose of",
        !           871:                "giving rise to","based upon","being caused by",
        !           872:                "of","of","of","of",
        !           873:                "being effectuated by","being aggrevated by",
        !           874:                "being used with",
        !           875:                "being collected together with","being combined together with",
        !           876:                "connected up to","exhibiting a tendency towards",
        !           877:                "being facilitated by",
        !           878:                "being employed with",
        !           879:                "having a deleterious effect upon","impacting",
        !           880:                "being joined together with","being merged together with",
        !           881:                "in the vicinity of"};
        !           882: X pv=getxx();
        !           883: pv->type="-prep";
        !           884: pv->list.s[0]=CHOOSE(prep);
        !           885: return pv;
        !           886: }
        !           887: 
        !           888: X comp(env) E env; {
        !           889: X v=getxx();
        !           890: EE nenv;
        !           891: static EE empty;
        !           892: int i=0;
        !           893: nenv=empty;
        !           894: v->type="comp";
        !           895: if(0&&prob(0.001))v->list.x[i++]=adjective(&nenv);
        !           896: else if(prob(0.1))v->list.x[i++]=advp(&nenv);
        !           897: else {
        !           898:        if(env->passive)v->list.x[i++]=passprep(env);
        !           899:        v->list.x[i++]=np(&nenv);
        !           900:        env->passive=0;
        !           901:        }
        !           902: if(0&&prob(0.05))v->list.x[i++]=adverb(&nenv);
        !           903: return v;
        !           904: }
        !           905: 
        !           906: X advp(env) E env; {
        !           907: X v=getxx();
        !           908: v->type="advp";
        !           909: v->list.x[0]=vprep(env);
        !           910: v->list.x[1]=np(env);
        !           911: return v;
        !           912: }
        !           913: 
        !           914: X vprep(env) E env; {
        !           915: static char *prep[] = {"to","at","by","from","with","for"};
        !           916: X v=getxx();
        !           917: v->type="-vprep";
        !           918: v->list.s[0]=CHOOSE(prep);
        !           919: return v;
        !           920: }
        !           921: 
        !           922: E getenvq() {
        !           923: static EE empty;
        !           924: E v;
        !           925: v=(E) malloc(sizeof*v);
        !           926: if(v==0)printf("outa room\n"),exit(1);
        !           927: *v=empty;
        !           928: return v;
        !           929: }
        !           930: 
        !           931: X comma(env) E env; {
        !           932: X v=getxx();
        !           933: static EE empty;
        !           934: v->type="-comma";
        !           935: v->list.s[0]=",";
        !           936: *env=empty;
        !           937: return v;
        !           938: }
        !           939: 
        !           940: X conjadv(env) E env; {
        !           941: static char *c[] = {"therefore","however","moreover","obviously"};
        !           942: X v=getxx();
        !           943: v->type="-conjadv";
        !           944: v->list.s[0]=CHOOSE(c);
        !           945: return v;
        !           946: }
        !           947: 
        !           948: X lconjadv(env) E env; {
        !           949: static char *c[] = {"therefore","however","nevertheless",
        !           950:                "consequently","also","in addition","moreover",
        !           951:                "accordingly","essentially","presumably","actually",
        !           952:                "basically","importantly","clearly","obviously",
        !           953:                "needless to say","as already stated",
        !           954:                "generally","approximately","presently",
        !           955:                "hopefully","usually","in the great majority of cases",
        !           956:                "seen in the above light","most significantly",
        !           957:                "when the need arises",
        !           958:                "in a large number of cases","after this is accomplished",
        !           959:                "in all cases",
        !           960:                "having been made aware concerning these matters",
        !           961:                "as an example of this","as a consequence of this",
        !           962:                "as a matter of fact","as is often the case",
        !           963:                "as of this date","assuming that this is the case",
        !           964:                "at the present moment in time","at this time",
        !           965:                "as a consequent result of this","as a desireable benefit of this",
        !           966:                "if at all possible","similarly","in the same connection",
        !           967:                "in large measure","in many cases","in rare cases",
        !           968:                "in some cases","in the interim","in the last analysis",
        !           969:                "in light of these facts","in the majority of instances",
        !           970:                "in the not too distant future","in the same way as described above",
        !           971:                "in this case","for all intents and purposes",
        !           972:                "to arrive at an approximation","for this reason",
        !           973:                "for many reasons, then",
        !           974:                "as is often the case","last but not least",
        !           975:                "later on","on a few occasions","on this occasion",
        !           976:                "in summary","taking this into consideration",
        !           977:                "with this in mind",
        !           978:                "substantially","ultimately"};
        !           979: X v=getxx();
        !           980: v->type="-lconjadv";
        !           981: v->list.s[0]=CHOOSE(c);
        !           982: return v;
        !           983: }
        !           984: 
        !           985: X conjsub(env) E env; {
        !           986: static char *c[] = {"although","even though","despite the fact that",
        !           987:                        "for the simple reason that",
        !           988:                "because","due to the fact that","since",
        !           989:                "whether or not",
        !           990:                "inasmuch as",
        !           991:                "as"};
        !           992: X v=getxx();
        !           993: v->type="-conjsub";
        !           994: v->list.s[0]=CHOOSE(c);
        !           995: return v;
        !           996: }
        !           997: 
        !           998: X lconjsub(env) E env; {
        !           999: static char *c[] = {"although","even though","despite the fact that",
        !          1000:                "because","due to the fact that","since",
        !          1001:                "if","anytime that","in the case that",
        !          1002:                "as a consequence of the fact that",
        !          1003:                "as regards the fact that",
        !          1004:                "as a desireable benefit of the fact that",
        !          1005:                "with reference to the fact that",
        !          1006:                "as long as",
        !          1007:                "as an important essential of the fact that",
        !          1008:                "in conjunction with the fact that",
        !          1009:                "in the light of the fact that",
        !          1010:                "if","if","if","if",
        !          1011:                "leaving out of consideration the fact that",
        !          1012:                "just as",
        !          1013:                "inasmuch as","until such time as",
        !          1014:                "as soon as","being as","in the same way as",
        !          1015:                "with the exception of the fact that",
        !          1016:                "notwithstanding the fact that",
        !          1017:                "on the grounds that",
        !          1018:                "on the basis of the fact that",
        !          1019:                "persuant to the fact that",
        !          1020:                "although it seems apparent that",
        !          1021:                "with regard to the fact that",
        !          1022:                "as can be seen from the fact that",
        !          1023:                "as"};
        !          1024: X v=getxx();
        !          1025: v->type="-lconjsub";
        !          1026: v->list.s[0]=CHOOSE(c);
        !          1027: return v;
        !          1028: }
        !          1029: 
        !          1030: X conj(env) E env; {
        !          1031: static char *c[] = {"and","but","yet","and","and"};
        !          1032: X v=getxx();
        !          1033: v->type="-conj";
        !          1034: v->list.s[0]=CHOOSE(c);
        !          1035: return v;
        !          1036: }
        !          1037: 
        !          1038: X nomz(env) E env; {
        !          1039: static char *c[] = {"it is easy to see that","it is a basic fact that",
        !          1040:                "it is obvious that","it is not unimportant that",
        !          1041:                "it is easy to overlook the fact that",
        !          1042:                "it is within the realm of possibility that",
        !          1043:                "it is apparent that",
        !          1044:                "this is indicitive of the fact that",
        !          1045:                "this is in substantial agreement with the fact that",
        !          1046:                "this demonstrates the fact that",
        !          1047:                "this leaves out of consideration the fact that",
        !          1048:                "it is of the utmost importance that",
        !          1049:                "the truth is that",
        !          1050:                "the fact is that",
        !          1051:                "it turns out that","it will turn out to be true that",
        !          1052:                "it should be noted that",
        !          1053:                "it stands to reason that",
        !          1054:                "it would not be unreasonable to assume that",
        !          1055:                "it is interesting to note that"};
        !          1056: X v=getxx();
        !          1057: v->type="-nomz";
        !          1058: v->list.s[0]=CHOOSE(c);
        !          1059: return v;
        !          1060: }
        !          1061: 
        !          1062: X turgid(env) E env; {
        !          1063: X v=getxx();
        !          1064: int i=0;
        !          1065: v->type="turgid";
        !          1066: if(prob(T*1.5)) {
        !          1067:        v->list.x[i++]=lconjadv(env);
        !          1068:        v->list.x[i++]=comma(env);
        !          1069:        v->list.x[i++]=sent(env);
        !          1070:        }
        !          1071: else if(prob(2*T)) {
        !          1072:        v->list.x[i++]=turgid(env);
        !          1073:        v->list.x[i++]=comma(env);
        !          1074:        v->list.x[i++]=conj(env);
        !          1075:        v->list.x[i++]=sent(env);
        !          1076:        }
        !          1077: else if(prob(1.5*T)) {
        !          1078:        v->list.x[i++]=lconjsub(env);
        !          1079:        v->list.x[i++]=sent(env);
        !          1080:        v->list.x[i++]=comma(env);
        !          1081:        v->list.x[i++]=sent(env);
        !          1082:        }
        !          1083: else if(prob(T*.5)) {
        !          1084:        v->list.x[i++]=sent(env);
        !          1085:        v->list.x[i++]=comma(env);
        !          1086:        v->list.x[i++]=conjadv(env);
        !          1087:        }
        !          1088: else if (prob(T)) {
        !          1089:        v->list.x[i++]=turgid(env);
        !          1090:        v->list.x[i++]=comma(env);
        !          1091:        v->list.x[i++]=conjsub(env);
        !          1092:        v->list.x[i++]=sent(env);
        !          1093:        }
        !          1094: else if(prob(.5*T)) {
        !          1095:        v->list.x[i++]=nomz(env);
        !          1096:        v->list.x[i++]=sent(env);
        !          1097:        }
        !          1098: else v->list.x[i++]=sent(env);
        !          1099: return v;
        !          1100: }
        !          1101: 
        !          1102: /**********************************************************/
        !          1103: char buff[1000];
        !          1104: int io;
        !          1105: int flag;
        !          1106: main(ac,av) char *av[]; {
        !          1107: static char *furniture[] = {"WASTEBASKET","ASHTRAY","TABLE",
        !          1108:                                "DESK DRAWER","COAT LOCKER","BOOKSHELF"};
        !          1109: static char *ccto[] = {
        !          1110:        "J. J. Argosy",
        !          1111:        "M. D. Banal",
        !          1112:        "H. V. Bandersnatch",
        !          1113:        "F. W. Blivet",
        !          1114:        "Z. Brazen",
        !          1115:        "M. Bushido",
        !          1116:        "J. D. Carbuncle",
        !          1117:        "N. Crab",
        !          1118:        "R. H. deTruckle",
        !          1119:        "C. B. Dudgeon",
        !          1120:        "R. T. Dun",
        !          1121:        "W. G. Fallow",
        !          1122:        "R. S. Flummox",
        !          1123:        "R. N. Fribble",
        !          1124:        "C. R. Glitch",
        !          1125:        "S. A. Hobble",
        !          1126:        "R. S. Limn",
        !          1127:        "S. T. Livid",
        !          1128:        "Mrs. B. R. Mauve",
        !          1129:        "C. H. Russet",
        !          1130:        "M. H. Simper",
        !          1131:        "B. R. Sorrel",
        !          1132:        "G. Swale",
        !          1133:        "R. R. Swarthy",
        !          1134:        "P. Terra-Cotta",
        !          1135:        "U. G. Winnow"};
        !          1136: E env;
        !          1137: X tree;
        !          1138: int i=0;
        !          1139: int j=0;
        !          1140: int k=0;
        !          1141: int lim=25;
        !          1142: long t;
        !          1143: time(&t);
        !          1144: if(ac<2)abo();
        !          1145: if(ac>2) {
        !          1146:        for(makeup=0; *av[2]; av[2]++) {
        !          1147:                if(*av[2]<'0'||*av[2]>'9')abo();
        !          1148:                makeup=makeup*10+*av[2]-'0';
        !          1149:                }
        !          1150:        makeup/=100;
        !          1151:        if(makeup<0||makeup>1)abo();
        !          1152:        makeup=1-makeup;
        !          1153:        }
        !          1154: if(ac>1)for(lim=0; *av[1]; av[1]++) {
        !          1155:                if(*av[1]<'0'||*av[1]>'9')abo();
        !          1156:                lim=lim*10+*av[1]-'0';
        !          1157:                }
        !          1158: srand((int)t);
        !          1159: printf(".TL\n");
        !          1160: env=getenvq();
        !          1161: tree=np(env);
        !          1162: io=0;
        !          1163: pr(tree);
        !          1164: buff[io]=0;
        !          1165: caps();
        !          1166: printf("%s\n",buff);
        !          1167: printf(".AU \"C. C. Festoon\"\n");
        !          1168: printf(".AS\n");
        !          1169: free(env);
        !          1170: do {
        !          1171:        env=getenvq();
        !          1172:        tree=turgid(env);
        !          1173:        io=0;
        !          1174:        pr(tree);
        !          1175:        buff[io]=0;
        !          1176:        printf("%s.\n",buff);
        !          1177:        free(env);
        !          1178:        } while(prob(0.75));
        !          1179: printf(".AE\n");
        !          1180: printf(".MT \"MEMORANDUM FOR %s\"\n",
        !          1181:        CHOOSE(furniture));
        !          1182: while(1) {
        !          1183: if(i>=lim) {
        !          1184:        printf(".SG\n");
        !          1185:        printf(".NS 0\n");
        !          1186:        for(j=0; j==0;) {
        !          1187:                for(i=0; i<sizeof ccto/sizeof *ccto; i++) {
        !          1188:                        if(prob(.10))j=1,printf("%s\n",ccto[i]);
        !          1189:                        }
        !          1190:                }
        !          1191:        printf(".NE\n");
        !          1192:        exit(0);
        !          1193:        }
        !          1194: if(i++%23==0) {
        !          1195:        env=getenvq();
        !          1196:        tree=np(env);
        !          1197:        io=0;
        !          1198:        printf(".H 1 \"");
        !          1199:        pr(tree);
        !          1200:        buff[io]=0;
        !          1201:        caps();
        !          1202:        printf("%s\"\n",buff);
        !          1203:        free(env);
        !          1204:        }
        !          1205: env=getenvq();
        !          1206: tree=turgid(env);
        !          1207: io=0;
        !          1208: pr(tree);
        !          1209: buff[io]=0;
        !          1210: if(++k%13==0&&prob(0.35)) {
        !          1211:        printf("%s:\n",buff);
        !          1212:        printf(".BL\n");
        !          1213:        do {
        !          1214:                printf(".LI\n");
        !          1215:                free(env);
        !          1216:                env=getenvq();
        !          1217:                io=0;
        !          1218:                tree=sent(env);
        !          1219:                pr(tree);
        !          1220:                buff[io]=0;
        !          1221:                printf("%s.\n",buff);
        !          1222:                } while(prob(.83));
        !          1223:        printf(".LE\n");
        !          1224:        printf(".P\n");
        !          1225:        }
        !          1226:        else printf("%s.\n",buff);
        !          1227: if(++j>2&&prob(0.4))printf(".P\n"),j=0;
        !          1228: free(env);
        !          1229: }
        !          1230: }
        !          1231: 
        !          1232: pr(tree) X tree; {
        !          1233: int i;
        !          1234: if(flag=='p') {
        !          1235:        out("<");
        !          1236:        out(tree->type);
        !          1237:        out(">");
        !          1238:        }
        !          1239: if(tree->type[0]=='-') {
        !          1240:        out(" ");
        !          1241:        for(i=0; tree->list.s[i]; i++) {
        !          1242:                out(tree->list.s[i]);
        !          1243:                }
        !          1244:        }
        !          1245: else for(i=0; tree->list.x[i]; i++) {
        !          1246:        pr(tree->list.x[i]);
        !          1247:        }
        !          1248: free(tree);
        !          1249: return;
        !          1250: }
        !          1251: 
        !          1252: out(s)char *s;
        !          1253: {
        !          1254: if(io==0&&*s==' ')return;
        !          1255: if(io==0) {
        !          1256:        for(;s[io]; io++)buff[io]=s[io];
        !          1257:        buff[0]+='A'-'a';
        !          1258:        return;
        !          1259:        }
        !          1260: if(buff[io-1]==' '&&*s==' ')return;
        !          1261: if(buff[io-1]==' '&&*s==',')io--;
        !          1262: if(buff[io-1]=='y'&&*s=='i'&&s[1]=='e')io--;
        !          1263: else if(*s==buff[io-1]&&*s!='s'&&*s!='n')io--;
        !          1264: else if(*s=='e'&&buff[io-1]=='a')io--;
        !          1265: for(; *s; )buff[io++]= *s++;
        !          1266: return;
        !          1267: }
        !          1268: 
        !          1269: caps()
        !          1270: {int i; for(i=1; i<io; i++)
        !          1271: if(buff[i-1]==' '&&buff[i]<='z'&&buff[i]>='a')buff[i]+='A'-'a';
        !          1272: }
        !          1273: abo(){printf("usage: festoon NUMBER-OF-SENTENCES [percent-invented-nouns]\n");
        !          1274:        exit(1);
        !          1275:        }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.