(* Mini-IA for noForth t

*)

0 value A1  0 value A2              \ Remember start & end of text
: {IN,      ( tekst'}' -- )             \ Read text until a lone '}'
    chere to A1  begin                  \ Remember start of text
        bl-word count 2dup s" }" s<>    \ Next word, not }
    while
        m,  bl c,  1 us                 \ Compile in memory
    repeat 2drop   chere to A2  align ; \ Remember end of text

: TXT=      ( ccc -- )              \ Remember AI base text
    create  A1 ,  A2 ,  does> @+ to A1  @ to A2 ;

need random

0 value #WORDS              \ Number of printed words
2 value PLEN                \ Pattern length, 1 to 4
create STRING  4 allot      \ Search string 1 to 4 chars
: {+}       ( a2 a1 -- a2 a1+1 )    \ Increase a1, keep it circular
    pause  1+  2dup > 0= if  drop  A1  then ;

: PATTERN?  ( a2 a1 -- a2 a1 f )    \ Valid text pattern found?
    2dup  plen 0 ?do
        dup c@  string i + c@ <>
        >r  {+}  r>
        if  2drop {+} false unloop exit  then
    loop  2nip  true ;

: SCAN?     ( ae a0 -- ea aa f )    \ Search text patterns, count words & update pattern
    pattern? if                         \ String found?
        string 1+  string plen 1- move  \ Change search string to last PLEN-1 chars
        dup c@ >r  r@ emit  {+}         \ Read & print next char
        r@ BL = if incr #words then     \ Increase word count when it is a space
        r> string plen 1- + c!  true exit \ Add new char to search string
    then  false ;

: START-AI  ( -- a2 a1 )
    A2 A1  FF choose for  bl scan {+}  next \ Choose entry
    cr  plen 0 ?do
        dup c@ dup emit  string i + c!  {+} \ Copy & show next PLEN chars
    loop
    0 to #words  plen 5 1 within ?abort ;   \ Reset word counter

: AI        ( -- )
    start-ai                    \ Choose start chars
    begin  begin  scan? until   \ Find follow up
    #words 7 = until  2drop ;   \ Always seven words

: AIS       ( n -- )    48 umin for ai next ; \ n maal AI


\ -------------------------- gemeenten nl

{in,
Amsterdam Rotterdam 's-Gravenhage Utrecht Eindhoven Groningen
Tilburg Almere Breda Nijmegen Apeldoorn Haarlem Arnhem
Haarlemmermeer Amersfoort Enschede Zaanstad 's-Hertogenbosch
Zwolle Leiden Leeuwarden Zoetermeer Maastricht Ede
Westland Alphen-Aan-De-Rijn Alkmaar Delft Emmen Venlo Deventer
Helmond Purmerend Amstelveen Oss Hilversum Sittard Geleen
Land-van-Cuijk Sudwest-Fryslan Hoeksche-Waard Dijk-En-Waard
Nissewaard Heerlen Meierijstad Lelystad Hengelo Schiedam
Leidschendam Voorburg Roosendaal Vlaardingen Gouda Hoorn Almelo
Voorne-Aan-Zee Assen Bergen-Op-Zoom Veenendaal Velsen
Capelle-Aan-Den-Ijssel Katwijk Zeist Nieuwegein Stischtse-Vecht
Lansingerland Westerkwartier Hardenberg Barneveld
Vijfheerenlanden Midden-Groningen Roermond Gooise-Meren
Rijswijk Doetinchem Maashorst Altena Pijnacker Nootdorp
Oosterhout Krimpenerwaard Smallingerland Hoogeveen Den-Helder
Kampen Terneuzen Woerden West-Betuwe De-Fryske-Marren
Goeree-Overflakkee Heerenveen Weert Houten Utrechtse-Heuvelrug
Waalwijk Tiel Oosterbeek Velp Olst Wijhe Meppel Dronten
Vlissingen Middelburg Goes Hoek-van-Holland Hillegom Lisse
Spijkenisse Emmeloord Sneek Franeker Wolvega Dokkum Delfzijl
Dwingeloo Ommen Epe Oldenzaal Winterswijk Doesburg Bronkhorst
Geldermalsen Lopik Bodegraven Wassenaar Hoofddorp Schiphol
Zandvoort Scheveningen Enkhuizen Medemblik Stavoren Harlingen
Coevorden Nunspeet Harderwijk Nijkerk Zaltbommel Breskens
Hellevoetsluis Oostvoorne Maassluis Naaldwijk } txt= gemeente

\ End ;;;
