c2f69bb48c 2010-09-12 charlesch: chain: stringBuffer' c2f69bb48c 2010-09-12 charlesch: {{ c2f69bb48c 2010-09-12 charlesch: tib variable: buffer c2f69bb48c 2010-09-12 charlesch: @buffer variable: pointer 9af46357c5 2010-09-19 charlesch: : terminate ( - ) 0 @pointer ! ; 9af46357c5 2010-09-19 charlesch: : bs? ( c-cf ) dup 8 = ; 9af46357c5 2010-09-19 charlesch: : remove ( c- ) 9af46357c5 2010-09-19 charlesch: drop pointer -- @pointer @buffer <if @buffer !pointer then terminate ; 9af46357c5 2010-09-19 charlesch: : add ( c- ) @pointer ! pointer ++ terminate ; c2f69bb48c 2010-09-12 charlesch: ---reveal--- 9af46357c5 2010-09-19 charlesch: : addToBuffer ( c- ) bs? if remove else add then ; 9af46357c5 2010-09-19 charlesch: : getFromBuffer ( -c ) pointer -- @pointer @ terminate ; 9af46357c5 2010-09-19 charlesch: : endOfBuffer ( -a ) repeat @pointer dup @ 0; 2drop pointer ++ again ; 9af46357c5 2010-09-19 charlesch: : sizeOfBuffer ( -n ) @pointer @buffer - ; 9af46357c5 2010-09-19 charlesch: : emptyBuffer ( - ) @buffer !pointer terminate ; 9af46357c5 2010-09-19 charlesch: : setBuffer ( a- ) !buffer emptyBuffer ; c2f69bb48c 2010-09-12 charlesch: }} c2f69bb48c 2010-09-12 charlesch: ;chain c2f69bb48c 2010-09-12 charlesch: c2f69bb48c 2010-09-12 charlesch: with quotes' c2f69bb48c 2010-09-12 charlesch: with stringBuffer' c2f69bb48c 2010-09-12 charlesch: with strings' c2f69bb48c 2010-09-12 charlesch: c2f69bb48c 2010-09-12 charlesch: chain: tabCompletion' c2f69bb48c 2010-09-12 charlesch: {{ c2f69bb48c 2010-09-12 charlesch: create completions 100 allot c2f69bb48c 2010-09-12 charlesch: completions dup ! c2f69bb48c 2010-09-12 charlesch: : addCompletion completions ++ @completions ! ; c2f69bb48c 2010-09-12 charlesch: : getCompletion @completions @ completions -- ; c2f69bb48c 2010-09-12 charlesch: : numCompletions @completions completions - ; c2f69bb48c 2010-09-12 charlesch: : findCompletions c2f69bb48c 2010-09-12 charlesch: last repeat c2f69bb48c 2010-09-12 charlesch: @ 0; c2f69bb48c 2010-09-12 charlesch: dup d->name c2f69bb48c 2010-09-12 charlesch: tib getLength 0 swap getSubset c2f69bb48c 2010-09-12 charlesch: tib compare [ dup addCompletion ] ifTrue c2f69bb48c 2010-09-12 charlesch: again ; c2f69bb48c 2010-09-12 charlesch: : showCompletions 388bff82d8 2010-09-15 crc: cr space space completions numCompletions 9af46357c5 2010-09-19 charlesch: [ getCompletion d->name puts space ] times ; c2f69bb48c 2010-09-12 charlesch: : finishCompletion c2f69bb48c 2010-09-12 charlesch: numCompletions 0; 1 = c2f69bb48c 2010-09-12 charlesch: [ getCompletion d->name tib over getLength 1+ copy endOfBuffer ] c2f69bb48c 2010-09-12 charlesch: [ showCompletions ] if ; c2f69bb48c 2010-09-12 charlesch: variable delimiter c2f69bb48c 2010-09-12 charlesch: : testDelimiter @delimiter = dup [ nip ] ifTrue ; c2f69bb48c 2010-09-12 charlesch: : testTrigger 27 = dup [ nip ] ifTrue ; 9af46357c5 2010-09-19 charlesch: : doTrigger findCompletions finishCompletion cr tib puts drop ; c2f69bb48c 2010-09-12 charlesch: : eatLeading ( - ) repeat key dup emit dup @delimiter !if addToBuffer ;then drop again ; c2f69bb48c 2010-09-12 charlesch: : newaccept ( "- ) c2f69bb48c 2010-09-12 charlesch: !delimiter emptyBuffer eatLeading c2f69bb48c 2010-09-12 charlesch: repeat c2f69bb48c 2010-09-12 charlesch: key dup testDelimiter not 0; drop c2f69bb48c 2010-09-12 charlesch: dup testTrigger [ doTrigger ] [ dup emit addToBuffer ] if c2f69bb48c 2010-09-12 charlesch: again ; c2f69bb48c 2010-09-12 charlesch: ---reveal--- c2f69bb48c 2010-09-12 charlesch: : start &newaccept &accept :is ; c2f69bb48c 2010-09-12 charlesch: : finish &accept :devector ; c2f69bb48c 2010-09-12 charlesch: : accept newaccept ; c2f69bb48c 2010-09-12 charlesch: }} c2f69bb48c 2010-09-12 charlesch: ;chain c2f69bb48c 2010-09-12 charlesch: c2f69bb48c 2010-09-12 charlesch: global with tabCompletion' c2f69bb48c 2010-09-12 charlesch: start