TP.BLK0;0 38 38 Updated: 11:32:16 22Nov90 08Dec87brs************************************************************************************************************************************ ******** ******** ******** Thought Processor ******** & ******** Outliner Program ******** ******** ******** ******** ******** ************************************************************************************************************************************\ load screen 11Mar90brs 8 views tp.blk helper tp.hlp 2 37 thru \ Constants & variables 08Dec87brsvocabulary outline outline also 26 constant /phrase 300 constant /stack 1000 constant pmax /phrase 6 + constant /rec b/buf /rec / constant p/scr 78 /phrase / constant /line /line /phrase * constant /display 0 constant across# 2 constant item# 4 constant level# variable line \ basic item reference 29NOV87BRSvariable p# : vector ( n -- addr ) p/scr /mod block swap /rec * + ; : phrase ( n -- addr ) vector 6 + ; : phrase/ct ( n -- addr ct ) phrase /phrase ; : >vector ( n 0/2/4 -- addr' ) swap vector + ; : vector> ( n -- ) create , does> @ >vector ; : @vector ( -- n' ) create , does> p# @ swap @ >vector @ ; across# dup @vector across? vector> across> item# dup @vector item? vector> item> level# dup @vector level? vector> level> ( -- n ) ( n -- addr ) \ vector storage 08Dec87brs: dsk! ( n addr -- ) ! update ; : item! ( n1 n2 -- ) \ n1 stored in item field of n2 item> dsk! ; : level! ( n1 n2 -- ) level> dsk! ; : across! ( n1 n2 -- ) across> dsk! ; \ Stacks 22Nov90brs: stack ( n -- ) \ n = max# of numbers create here 4 + , 2* dup here + 2+ , allot does> ; /stack stack item \ sp, max-addr, data /stack 2* stack level \ sp points to next free byte : ?stack-err ( stack f -- {stack} ) \ {if false} if body> >name .id true abort" stack error" then ; : @stack ( stack -- n ) @ 2- @ ; ( works like r@ ) : init ( stack -- ) dup 4 + swap ! ; : push ( n stack -- ) dup 2@ u<= ?stack-err tuck @ ! 2 swap +! ; : down ( stack-- n ) dup @ swap 4 + - 2/ ; : pop ( stack -- n ) dup down 0<= ?stack-err dup @stack -2 rot +! ; \ stacks 07DEC87BRS : .stack ( stack--) dup @ swap 4 + ?do i @ . key? ?leave 2 +loop ; : deep ( - n ) level down 2/ 1- ; \ disk variables 13dec87brs: #phrases 0 item> ; : deleted ( -- addr ) 0 across> ; : scrap 0 phrase ; : #p ( -- n ) #phrases @ ; \ new phrases 22Nov90brs: -vector ( n -- ) vector 6 erase update ; : ?title ( -- ) \ n if no title; else exit level down item down or 0= abort" not done at title level" ; \ adding phrases 08Dec87brs: recover ( -- n/f ) deleted @ dup if dup item> @ deleted dsk! then ; : ?room ( n -- ) capacity p/scr * >= if 4 more then ; : add ( -- n ) #p dup pmax > abort" Too many phrases" dup ?room 1 #phrases +! update ; : assign ( -- n ) recover ?dup 0= if add then dup -vector ; \ moving 13dec87brs: +item ( -- ) item? p# @ item push p# ! 1 line +! ; : -item ( -- ) item pop p# ! -1 line +! ; : ?+item ( -- f ) item? dup if +item then ; : ?-item ( -- f ) line @ dup if -item then ; outline definitions : >t begin ?-item 0= until ; : >b ( -- ) begin ?+item 0= until ; forth definitions : >level ( n -- ) line dup @ level push off p# @ level push p# ! ; : +level ( -- ) level? >level ; : -level ( -- ) level pop p# ! level pop line ! ; : ?+level ( -- f ) level? dup if +level then ; : ?-level ( -- f ) >t level down dup if -level then ; \ large movements 13dec87brs : ?ok ( f -- ) 0= if beep then ; : tippy-top ( -- ) line off 0 level> @ p# ! item init level init ; outline definitions : up ( up ) ?-item ?ok ; : dn ( down) ?+item ?ok ; : lt ( left) ?-level ?ok ; : rt ( right) ?+level ?ok ; : dns ( n -- ) 1 ?enough 0 ?do ?+item 0= ?leave loop ; : ups ( n -- ) 1 ?enough 0 ?do ?-item 0= ?leave loop ; : top ( -- ) tippy-top ?+level drop ; forth definitions \ insert phrases 13dec87brsdefer unhold ( n -- ) outline definitions : append ( n -- ) 1 ?enough ?title dup >b p# @ item! +item unhold ; : insert ( n -- ) 1 ?enough ?title dup p# @ over item! dup p# ! line @ if item @stack item! else level @stack level! then unhold ; : under ( n -- ) ?+item if insert else append then ; : sub ( n -- ) 1 ?enough dup level? over level! p# @ level! +level unhold ; forth definitions \ input text 08Dec87brscreate tbuf /display 1+ allot : phrase! ( addr n -- ) phrase/ct 2dup blank cmove update ; : (enter) ( addr ct -- n ) false -rot bounds ?do assign i over phrase! swap ?dup if over swap across! else dup then /phrase +loop drop ; \ entering data 08Dec87brs: read ( -- n ) tbuf dup /display blank 94 word count /display min >r over r@ cmove r> (enter) ; outline definitions : a read append ; : i read insert ; : s read sub ; : u read under ; forth definitions \ deleting phrases 15Jan88 : (>del) ( n -- ) deleted @ over item! deleted dsk! ; : del-across ( n -- ) begin across> @ ?dup while dup (>del) repeat ; : >deleted ( n -- ) dup del-across (>del) ; : uncouple ( -- ) ?title item? line @ if item @stack item! -item ?+item drop else level @stack level! -level ?+level drop then ; : ?under ( n f -- ) if under else sub then ; outline definitions : del ( -- ) p# @ uncouple >deleted ; : xxx ( -- ) level? line @ del over if ?under else 2drop then ; forth definitions \ retyping 08Dec87brsoutline definitions : r ( -- ) item? level? p# @ dup >deleted read over <> abort" delete/replace error" tuck level! item! ; forth definitions \ display drivers 09Sep88brs16 constant l/page ascii - constant subs ascii | constant cur ascii + constant both doer : (.phrase) ( n -- ) begin dup phrase/ct rot across> @ ?dup while -rot repeat -trailing ; : .phrase ( n -- ) make type ;and (.phrase) ; : .upper make tuck pad swap cmove pad swap 2dup upper type ;and (.phrase) ; : .stat ( # f -- ) 0<> 1 and swap p# @ = 2 and or case 0 of bl endof 1 of subs endof 2 of cur endof 3 of both endof endcase emit ; : .ln ( n -- ) dup dup level> @ .stat .phrase ; : topline ( -- n ) l/page line @ over / * ; \ display drivers 17Dec87brs: .specs ( -- ) ." File: " file? 2 spaces #p . ." phrases" 4 spaces ." size = " capacity (.) type ." K" ; : .head ( -- first_item ) 0 0 at level down if level @stack dup .phrase else .specs 0 then level> @ true blot crlf ." Level# " level down 2/ 3 .r 4 spaces ." Topic#: " line @ 3 .r ; : +items ( n # -- n' ) 0 ?do item> @ loop ; : show-data ( first -- ) topline +items 0 swap l/page 0 ?do dup .ln true blot crlf swap 1+ swap item> @ dup 0= ?leave loop drop l/page swap ?do true blot crlf loop ; \ error substitution 13dec87brs: clear ['] crlf is cr ; : std-err ['] (?error) is ?error ; : ?tp-err ( addr len f -- ) -rot 2drop if clear space sp0 @ sp! ." File error: " file? std-err quit then ; : tp-err ['] ?tp-err is ?error ; : show-screen ( -- ) tp-err .head crlf crlf show-data crlf std-err -line 0 23 at ; outline definitions : tp dark ['] show-screen is cr ; forth definitions \ holding data 13dec87brs10 constant hmax create holding hmax 2* allot : -held holding hmax 2* erase ; : hold! ( n h# -- ) 2* holding + ! ; outline definitions : hold# ( n -- ) 1 ?enough p# @ tuck swap hold! uncouple 0 swap item> dsk! ; : hold ( -- ) 0 hold# ; : held# ( n -- n') 1 ?enough 2* holding + @ ; : held ( -- ) 0 held# ; forth definitions \ holding data 13dec87brs: (unhold) ( n -- ) holding hmax 2* bounds do dup i @ = if i off leave then loop drop ; ' (unhold) is unhold outline definitions : .held ( -- ) clear dark cr ." ** HOLDING BUFFER **" cr hmax 0 do cr [ forth ] i dup . held# ?dup if .ln then pause? loop cr key drop tp ; forth definitions \ stepping through levels/phrases 13dec87brsvariable start-level : !start ( -- ) deep start-level ! ; : back? ( -- f ) deep start-level @ > ; : end? ( -- f ) item? 0= dup if drop back? then ; : retreat ( -- ) ?-level 0= abort" back-up error" pause? ; : back-up begin end? while retreat repeat ; : proceed ( -- f ) ?+level ?dup 0= if back-up ?+item then ; \ list-chain, rudimentary 06DEC87BRS : (alph) ( n -- f/n ) 1- 26 /mod swap ascii a + hold ; : .alph ( n -- ) 0 <# swap begin dup while (alph) repeat swap #> 4 over - spaces type ; : .n ( -- ) line @ 1+ deep 1 and if .alph else 4 .r then ascii . emit space ; \ list-chain, printing outline 09Sep88brs: .filename ( -- ) ." File: " file? 2 spaces time ; : ldw printing @ if 14 emit then ; : .heading ( -- ) ldw level @stack .upper ; : header ( -- ) .heading cr .filename cr cr ; : print-chain ( -- ) begin cr deep start-level @ - 3 * spaces .n p# @ .phrase proceed 0= pause? until ; : (display) ( -- ) !start clear cr dark header print-chain ; outline definitions : display ( -- ) ?title (display) cr key drop tp ; : print ( -- ) ?title printing on init-pr (display) page printing off tp ; forth definitions \ find a string 08Dec87brscreate fbuf /display 1+ allot : @string ( n -- ) fbuf 1+ tuck /display blank begin 2dup phrase swap /phrase cmove across> @ ?dup while swap /phrase + swap repeat drop fbuf 1+ /display -trailing fbuf c! drop ; variable located : ?found ( -- f) p# @ @string tbuf count fbuf count search dup located ! nip ; : locate ( -- ) located off begin proceed 0= ?found or until ; \ find a string 06dec87brsoutline definitions : f ( -- ) start-level off 94 word count ?dup if tbuf place top else drop then locate located @ 0= if beep tbuf count type ." not found" then ; forth definitions \ status monitor 08Dec87brs: (mon) 0 0 at ." Line: " Line @ 3 .r 8 spaces ." Level: " level down 2/ 3 .r 10 spaces ." Phrase: " p# @ 3 .r crlf ." across> " across? 3 .r 9 spaces ." item> " item? 3 .r 11 spaces ." level> " level? 3 .r crlf -line 0 23 at ; : monitor dark ['] (mon) is cr cr ; \ reusing deletions 13dec87brs: burn ( -- ) begin end? while p# @ >deleted retreat repeat ; : attack ( -- ) ?+level ?dup 0= if burn ?+item then ; : avail ( - ) scrap @ ?dup if >level !start begin attack 0= until top then ; \ editor 15Jan88 create edit-buf /display allot variable ep : >buf ( n -- ) edit-buf tuck /display blank ep off /line 0 do dup >r phrase over /phrase cmove /phrase dup ep +! + r> across> @ dup 0= ?leave loop 2drop edit-buf ep @ -trailing ep ! drop ; \s 13dec87brs : (yes) position cset ; create used pmax 8 / 1+ allot : (rec>) used + ; : (-used) used [ 256 8 / 1+ ] literal erase ; ' (yes) is yes ' (rec>) is rec> ' (-used) is -used \ starting a file 08Dec87brs: new ( -- ) save-buffers top -held ; outline definitions : zap ( -- ) 0 -vector 1 -vector 1 phrase/ct blank 2 #phrases dsk! 1 0 level! new ; : new-file: ( -- ) 4 create-file zap tp ; : open open new tp ; forth definitions \ misc. commands 17Dec87brsoutline definitions : bye flush 0 0 bdos ; : w flush ; : dark dark ; : dir dir ; forth definitions \ checksheets 02Jun88brsdefer elite ' noop is elite : c-head .heading ." Checksheet" cr 60 spaces .filename cr ." Init. Date" ; : .line ( -- ) cr cr ." ____ _____ " line @ 1+ 2 .r ." . " p# @ .phrase ; : .lines ( -- ) begin .line ?+item while line @ 30 mod 0= if page then repeat ; outline definitions : checksheet ?title clear printing on elite >t c-head .lines page >t printing off tp ; forth definitions \ start-up 11Mar90brs: start-up start only outline also definitions [ dos ] fcb1 1+ 11 -trailing nip if top tp then ." Thought Processor by Brian Sutton, D.C., 1/88" -held ; : star 27 emit ascii M emit ; ' star is elite ' start-up is boot program tp.com only forth outline also 08Dec87brsText is stored in an outline format, with two main parameters: the ITEM# and LEVEL#. The item# is the number in a particular list, while the level# is the nesting level. This program uses "phrases" to store text data. You can configure them to any length less than 79 bytes (for display). Smaller phrases are strung together when text longer than the phrase length is entered; hence you can have very small phrases but still enter in up to 78 characters per line. Each phrase uses 6 bytes of disk space to point to the next phrase(s). Stacks are used to keep track of the current position and previous (nested) phrases. 08Dec87brsSet view# load & save system 08Dec87brsOUTLINE is the command vocabulary; SEALable for novices /PHRASE number of bytes per phrase (text data) /STACK maximum depth per stack (change as needed) PMAX maximum number of phrases (up to 65535) /REC number of bytes per phrase+vectors P/SCR phrases per screen /LINE number of phrases per display line /DISPLAY maximum text per screen display; varies somewhat with /phrase ACROSS# offset of vector pointing to next phrase that is strung together with current phrase ITEM# offset of vector pointing to next item LEVEL# offset of vector pointing to any sub-heading LINE current item# of current heading 22Nov90brsP# current phrase# VECTOR address of "n" phrase vectors PHRASE address of the text of phrase "n" PHRASE/CT address and count of phrase; ready for "type" >VECTOR return address of desired vector VECTOR> create a word to return a vector @VECTOR return the actual pointer ACROSS? , ITEM? , LEVEL? return pointers to respective phrases ACROSS> , ITEM> , LEVEL> return vector addresses 08Dec87brsDSK! store "n" to disk address ITEM! store n1 into n2's item vector, so that n1 is the next item in line after n2 LEVEL! similar to ITEM!, for level# ACROSS! similar to LEVEL!, for across# 08Dec87brsSTACK create a stack to hold up to "n" values stores current stack pointer, limiting address, then allots space ITEM stack to hold previous item#s LEVEL stack to hold previous levels and last item# from that level. Item# is stored beneath level#. ?STACK-ERR return error message if flag is true. @STACK return top value of selected stack, non-destructivelyINIT reset stack PUSH push value "n" onto stack DOWN return stack depth POP pop top value off stack onto forth stack .STACK dump contents of specified stack; for debugging DEEP returns depth of level stack 13dec87brs#PHRASES address of total number of phrases assigned to disk file DELETED address of last deleted phrase; deleted phrases are daisy chained together using the ITEM# field SCRAP holding area for deleted phrases, recoverable #P returns #phrases 08Dec87brs-VECTOR erases vector fields of phrase "n" ?TITLE exits routine if current phrase is the title 08Dec87brsRECOVER fetch last deleted phrase number ?ROOM appends file if "n" phrase won't fit ADD add another phrase ASSIGN assign a phrase#; try recovering first, then add 13dec87brs+ITEM make next item the current phrase -ITEM move up one item ?+ITEM move to next item if present, f=true if successful ?-ITEM move up (back) one item if possible >T move to first item at this level >B move to last item at this level >LEVEL move to n, assuming it is the next level +LEVEL move to sub-heading -LEVEL move back (unnest) to previous level, even if not at top item of this level ?+LEVEL move to subheading, if possible ?-LEVEL return to previous level if possible 08Dec87brs?OK beep if f=false TIPPY-TOP go to title level (main heading) UP move up one item; if can't, beep DN move down one item LT move back one level to previous subject RT move to subheading DNS move down "n" times UPS move up "n" times TOP move to top of outline (just under main heading) if no body, will move to tippy-top 13dec87brsUNHOLD erases specified phrase from holding buffer, if present APPEND put phrase "n" at bottom of current item list INSERT insert "n" phrase above current phrase UNDER put phrase "n" below current item SUB make phrase "n" a sub-heading of the current one 08Dec87brsTBUF text buffer PHRASE! move text at addr to phrase "n" (ENTER) move "ct" bytes from "addr" to new phrase# "n" 08Dec87brsREAD read the next string, deliminated by ^, from the input stream and assign a new phrase number A append the following string to the item list I insert the following string above current phrase S create a sub-heading under the current phrase U insert under the current string 08Dec87brs(>DEL) deleted phrase# n DEL-ACROSS delete phrase "n" and all those strung together as one sentence >DELETED delete all phrases strung together, deleting "n" last (to put it first up for recovery) UNCOUPLE remove current phrase and it's sub-headings, patching any following items to the previous item, if available; else, patch to previous level. ?UNDER if true, insert "n" under current item; else make it a sub-heading DEL delete current phrase and all sub-headings XXX delete current phrase only -- any sub-heading will take it's place; however if there is more than one the others will be lost! (at this time; sorry) 08Dec87brsR replace the current phrase with the following string 08Dec87brsL/PAGE number of lines displayed at a time SUBS character to indicate a sub-heading CUR character to indicate current phrase BOTH character to indicate both .PHRASE type phrase# "n" (and any strung "across") .STAT type status character (subs, cur, or both) .LN display the current phrase line & status TOPLINE calculate the number of lines to offset to proper page 08Dec87brs.HEAD display the heading, return first item in series +ITEMS run down to the "#"th item, starting from "n" SHOW-DATA show up to l/page lines, starting at n+topline 08Dec87brsCLEAR set CR to standard STD-ERR install standard error processing ?TP-ERR special error handling: turn off auto display and quit to prevent infinite loop TP-ERR install special error processing SHOW-SCREEN show the current items, etc. TP turn on auto display 13dec87brsHMAX max. # of holding buffers -HELD erase holding area; done on boot & file changes HOLDING holding area HOLD! store "n" into holding area h# HOLD# put current phrase in holding# "n"; remove from outline HOLD same as "0 hold#" HELD# return number of phrase stored in holding# "n" HELD same as "0 held#" 13dec87brs(UNHOLD) default for UNHOLD; erases n from buffer .HELD display contents of holding buffer 13dec87brsSTART-LEVEL starting level on printouts, displays, finding !START store current level in START-LEVEL BACK? true if not back to initial level END? true if at end of current list, but more to followRETREAT go to previous level BACK-UP back out of levels until either a next item is found, or the initial level is reached PROCEED go to next segment of outline chain 08Dec87brs(ALPH) put the next alphabetic character in the numeric output buffer; f=0 if finished .ALPH type the number n as an alphabetic string, where a=1 and ab=27 .N print either a number or an alphabetic string, depending on the whether the current level is even or odd, respectively 23Apr88brs.FILENAME print the file name and time of day .HEADING print the current heading HEADER display the file name and main title PRINT-CHAIN display the entire outline from this point on, until the START-LEVEL is reached. Pause when a key is pressed, and exit if the ESC key is pressed (DISPLAY) save level and type outline from this point DISPLAY display the outline and wait for a keypress PRINT print the outline from this point 08Dec87brsFBUF find buffer @STRING assemble the string starting at phrase "n" into FBUF LOCATED true if a match is found ?FOUND compare current phrase with TBUF; return true if foundLOCATE locate the string residing in TBUF inside of any of the phrases after the current one F find the following string inside any of the phrases, starting at the phrase following the current one. if none specified, use the last one sought. 08Dec87brs(MON) display relavent information concerning the current phrase; used for debugging MONITOR install the monitor 08Dec87brsREC> address of status of phrase "n" YES sets corresponding bit, to indicate in use -USED reset all bits to 0 2N raise 2 to the nth power POSITION find address and mask for phrase status #n YES? return status of phrase #n (0=unused) SET-PHRASE set status bits of all connected (across) phrases starting with "n" (!USED) set all status bits of phrases used in outline (!HELD) set status bits of all phrases in HOLDING ** will not find sub-headings -- they will be lost! 08Dec87brs(RESTORE) mark all unused phrases as deleted and string together by item fields AVAIL find all unused phrases and store them in the deleted variable for future use 08Dec87brs(YES) sets the phrase status (REC>) address of "n" status byte (-USED) erase all status bytes setup for RAM mode 08Dec87brsNEW save current data, go to top of file, clear holding ZAP erase the outline NEW-FILE: start a new file -- any current file of the same name may be overwritten. Usage is: new-file: filex.xxx OPEN open a different file and turn on auto mode 08Dec87brs these are re-defined for easy access 23Apr88brsELITE set up elite pitch C-HEAD print the checksheet heading .LINE print the checksheet line & # .LINES print all the lines CHECKSHEET printout the checksheet 23Apr88brs START-UP boot-up parameters. If any file was specified, open it and begin. Erase all holdings STAR set up elite pitch for star NX-1000 TP.COM; V.P. o g^#VFORTȦ+:<R{*4+p+q"4KB EXIQ*4N#F#"4 HUNNESQ*4+p+q"4  `U{.*^#V*s#r^#V ^#V* (LIT o g  -BRANC`iN#F  ?BRANC} *4"4  (LOOP*44#4*4s#r (+LOOP9*4^#V|L!! -(DO6k6{kyi U(?DO6 Ty k6{kyi BOUND6X{i>NEXԝ EXECUTzPERFOR^#V^#V͋GNOO# PAUS2 =*4^#V#~#fo T*4@((LEAVEl*4####N#F#"4 `(?LEAVE|l ^#V 7s#r Cn& Cs CMOV`ix CMOVE`i + +x SP!9 SP. NRP=*4 5RPM"4 DRO_ VDUm &SWA} tOVEҍeTUC˞ENIЮ ROԽ-ROFLIcj ?DU6kkiR*4^#V#"4 >*4++"4s#r R3*4^#V PICH)9^#V ,ROL61Fk6(]iAN{ozg Oғ{ozg ?XOҨ{ozg TNOԽ}/o|/g TRUŝFALSŝ! ! CSE~w CRESE{/_~w CTOGGL'~w O8!í1OFJ!íBZ NEGATm+ýw{z/W{/_ uABӒ|m T+~w#~w b2) 2|g}o U2|g}o 8))) 1*# 28## #1G+ 12U++ !)h)p `@UMD}[gxD[J UlgwU*6}i_|g{|g{)Ҩ_|g{,·! UM/MO`i}||ejͷkͷW\a 0 }0)0.|'0 2b s#r#s#r  [ 2DRO{  q 2DUЋ   2SWAО !9~rW+~s_  2OVEҽ !9V+^+V+^  + 3DU6k i 4DU6 i  2RO6[[i! D !9^q#Vp}o|g! DNEGAT9 ї_>W>o>g! S>W !zb +!- DABp |9 "g D2 {_zW}o|g"| D2 |g}ozW{_" D67  i"O ?DNEGAT6 7 i# D06 i# D6 i# DU6{  y y ) l' y ) i# D6FTF  N ]i#- D6 2 i#R DMI6 W t y i#a DMA6 2  y i$ *6 {} i$M/MO6 k n 1{{ k E1y{]i$ MU/MO61{i% 6}]i% /MO6U  i%- 64 i% MO64 ]i% */MO6  i%` *6h i&z TOӦ&P ENTR٦& LIN˦&B SP&v RP& DЦ & #OUԦ & #LINŦ& OFFSEԦ& BASŦ& HLĦ& FILŦ& IN-FILŦ& PRINTINǦ' EMI' SC{%'/ PRIO{!'M STAT{'g WARNIN{'Y DP{' R{' LAS{'u CS{' CURREN{!' #VOCӝ' CONTEX{!y!0( 'TI{( WIDT{( VOC-LIN{y(BL{%(>I{O(SPA{(7#TI{(@ END{)+B̝ )^Bӝ)iBEL̝)DCAP{)tFIL̗`ixʩ} Ý )QERAS6i)BLAN6ci)COUN^#) LENGT^#V)MOV6 ia{ *UP0}o *(UPPEFzW~w#H *HER6 i*\PA6cPXi*<-TRAILIN6k XEclEi+COMиi`x~# !! ý! ,CAPS-COMi`x-~O~# *#!&! ! ,COMPAR6PTki-BDOaM&o -XBIOz*BK&o -m(KEY?6xCi-(KEY60xi-(CONSOLE60x]i.6KEY.KE.Cy.(PRINT9.PR-STA6xi.{PRINT60!;x]i.(EMIT6: fk i./CRL6 G  G H i.OTYP6G ]i.rSPAC6cG i.SPACE6i.qBACKSPACE6knG k i.BEE6{G  i/BS-I6]kAEnC{G i/(DEL-IN6]klEnG nn{G i/'BACK-U6]kki/tRES-I6&Reseti/IP-I6]: : i0CR-I6]>cG i0(CHAR6 G X(i0CHA0DEL-IT0C{-0CC-FORT{]]]]]]]/]]]]]]]]]]~]]~]]]]]nyN1EXPEC1(EXPECT6k>{FykckXkTy ]i1~TI6 i1oQUER6Px>K%H1Hi2 #BUFFERӝ2B/BUƝ2$B/REÝ22REC/BL˝2@B/FC*2DISK-ERRO{2^LIMIԝ2P>SIZŝ*2FIRSԝ2INIT-R2>BUFFER6yi2>EN6Si2BUFFER6Xi2>UPDAT6Xi3READ-BLOC^3WRITE-BLOC3.FIL6H@XG %: X%.i3*FILE6 2i3SWITC6 )  ) i3qDOӦ+33)5R5)3!FILE6k ) i3DISK-ABOR6% in 2&i3?DISK-ERRO6kk$ Disk error]i4FCB{ 4CLR-FC6kX( i4JSET-DM6_]i4RECORD6!Xi4MAXREC6&Xi4IN-RANG6kkk6$ Out of Rangei4REC-REA6k!_i4REC-WRIT6k"_i5hSET-I6kC J# {XJi5 FILE-REA60\~ rk{:Xfy i5RFILE-WRIT60\ rk{:Xy i5FILE-I6^--$i6vCAPACIT6 (i6LATEST6kH{ X C 6y X]i6ABSENT6(\t] ;C ny ;jpTkkX{yX` i7:UPDAT66i7DISCAR6i7MISSIN6S SHy$yXXkXi7(BUFFER60D`Xi7bBUFFE6 Hi7=(BLOCK6H,kXHi7dBLOC6 i7IN-BLOC6) i8EMPTY-BUFFER6yy(\$k6X {,X{Xy i8SAVE-BUFFER6\yk(ukXok$kXHXG]i8FLUS69]i8VIEW6 (Xi9FILE-SIZ6k#_]i9DOS-ERR6Ti9'OPEN-FIL6) k_$ Open errorkE{i9DOS-FC\9yDEFAUL6k) k T/(clk/ i95(LOAD6 %11H%)  I-1%i9oLOAF:DIGI{0  _:DOUBLE6 (Ci:*CONVER6(k F{ }] } @ ]i;(NUMBER?6k(-Tky  k,/  |7 cTi;NUMBER6; ]jZ]i;N(NUMBER6$i;NUMBE<HOL6  i<<6s i<#6y syi<JSIG6v-%i<a6   X0X%i<z#6~  i<9HE6 i<DECIMA6 i<OCTA6 i=(U.6>Oi=U6i=U.6yi=(.6k>hOi=6Ei=[.6Eyi=?(UD.6>Oi=%UD6i=UD.6yi=(D.6n >hOi=D6i=D.6yi >SKI`iz.~ # >SCA<`izP~ #A ?3/STRIN6Xyi?PLAC6 ({]i?s(SOURCE6%,Ki?USOURC?PARSE-WOR61_1{:ykCXy1i?PARS61_{:ykCy1i@'WOR6ci@8 WOR6@ {@ kXc{i@k>TYP6s{s{i@i .6) q i@ 6) y i@ \6X6iA TRAVERS > A DONE6o lXXHiA FORTH-86+HiB N>LIN6SiB L>NAM66iB !BODY6SiB-!NAME6 (iB!LINK6%!E!iB=!>BOD66iBc!>NAM6E iBs!>LIN6{!!iB!>VIE6!SiB!VIEW66Y!iCQ!HAS!#~o&) C!(FIND!|##?"#"!###~@! ^#V|!DH #THREADӝD!FIN6k"a H \"] ;Xk"ka a T}"]"{!!kQ""]X6!iD!"?UPPERCAS6"kDiD!DEFINE6cO "9"iE"?STAC6 {&Stack Underflows&Stack OverflowiE"STATUEINTERPRE6""I#U#U#] ;#iF-#ALLO6 iF"6ci#iF#C6ci#iFa#ALIG6iF#EVE6iF#COMPIL6k6w#iF#IMMEDIAT6@ iFs#LITERA6#w#iF#DLITERA6{##iF#ASCI6cO (o 4$#iF#CONTRO6cO (}o \$#iG8$CRAS6& Uninitialized execution vector.iG`$?MISSIN6$@ & ?iG$6" $iG$['6$#iG$[COMPILE6$w#iG$("6 XiG$(."6 XiG%,6" @ {(i#iG2".6#%%iG5%6#$%iHF%FENC{"aH%TRI6,"\%  %y%6u%y iHd%(FORGET6k^%& Below fencek %%kk% ,"yk%%] iHV%FORGE6cO "k !! $!%iI$WHER0]I#&?ERROK&I%(?ERROR6& ,: H%q&1%+&-&y iI@&(ABORT"61:&XiI$ABORT6#&%iI&ABOR6&iJ1&?CONDITIO6&Conditionals WrongiJ%>MAR6cw#iJ&>RESOLV6c{iJ&MAR6'iJH'?>RESOLV6{&'iJ['?I6kkT{kT{]-k!X-k!iR+(IS61,6iRb,I6o 9-#-?-$,iS,RU6o e-*o a-9#g-9#iSC-.DEPT.S"-QUI6  %H* K'#I-o -% okt--iSk-BOOST,WAR6& Warm StartiS-COL6--iTz-INITIA̝T-O6-iT.STAR6?iT-BY69c(%Pages_i!-*."{""4͓8" ͓!- NyyXW-DEPT6 {yiW.(.DEPTH6..>>%<%OiW"..6.(/\$/.;yEF+ /1/%Empty iW..I6k(k}/k}G }w/_}/(kU/y iW.DUM6\/kp\/kp(/7/]iX5/RECURS6 E!w#i .C/̝@ /L/SCҝ /F /(\61k/V 1i 0(6 i /6_i -0?ENOUG6.E&Not enough Parametersi 0THR6E0({0;~0i ;0+THR6%X{%X{p0i ---61H%i /ROOԦ+R101h1s, ALS6 k6 Si ONL60k! E X0i PREVIOU6 k6{ S SXHi FORT6i 1DEFINITION6+i 0ORDE6% Context: \1k15!{!;/61]% Current: 5!{!;/i B1VOC6k,"y5!{!;/k 1]i FCB{TP COMbfghib 1RESE6 _]i CLOS6_& Close errori 62SEARCH6_i Z2SEARC6_i %DELET6_i 2REA6_& Read errori p2WRIT6_& Write errori MAKE-FIL6_&Can't MAKE File i 2(!FCB6kXk( (:TL3@y1_(\3k.Tv3{;yX3 {{({(X3y i 2!FC6cO 3 D3i 2SELEC6_]i 3HEADE! 3SAV61k3k2]k23 4;rk273>2i 0MOR6E0{k C4;m,549 >2i 0CREATE-FIL61kk324i 2.NAM6 /4 # sX( Xi i0DI6$ ????????.???13sr1d2k4% Empty 4y41y2k4]i 4A63i 0B63i O4C63i q4FILE61m)1ckXi#3O*ki 3?DEFIN61"p5k!x5]115i 4DEFIN6\5]i 5OPE6\5i 5FRO6\5) i 5SAVE-SYSTE6c3i 5VIEW-FILE{96v666/FEiFy 5VIEW6\5 (X5!{5Xi 5KERNEL80.BLI5KERNEL80BLK 4EXTEND80.BLI5EXTEND80BLK *6CPU8080.BLI5CPU8080 BLKOPG g6UTILITY.BLI5UTILITY BLKrstuvwxyo0|5LABE6m)*i07DOES-OН0.7DOES-SIZŝ0>7DOES6kJ7X{87Ti0C6D,i09,INI6i0l7C#0w#07?>MARQ'07?>RESOLVg'07?0EU>6i@=<6i@=>6i@#>0>6i@A>0<6,i@Q>HIDDEΦ+nkf5jti0@a>LMARGI{@2>RMARGI{F@6?LIN6 X>>>i@>?C6>i@>.SC6%Scr # S 10ji@x>LIS6E0kS >/\3?;pk;/# X/q ?]i@>.LINE6kV T?kp/q i@>INDE6E0({\?;D??i@j?IN6kD?(?]i@>LARGES6{\? ?y k6?]i@>WORD6> c,"c,"?k8@k%!k}X>;/{4@O@y i@?#TIME{@?TIME6G@G@q@G@u@1Hi@?MAN6@1Hi@>@WHE60@yi@;?:6)c6w#)*1 i@@6S kHi@@6S kHi@M@6S >i@y@ESTABLIS6 {` i@A(COPY6 X{]Ai@@COP67Ai@.A@VIE6!k}k &entered at terminal.{F }i@@VIE6$hAA5X%is in k!2%screen _ B%may be in current file: j%screen k_>i@`AHOPPE{@AU/{@MACONVEY-COP7A@BHO6Bi@A.T6_%to k_i@AB(CONVEY6BkkBXWB;B'BXBi@-BCONVE6BB(yBk(y'B4 xBBxBB]i@mBT6{cO ]yGB{i @QBFOUN{ @BSCAN-1S69C];C:i @CSEARC6CH{ >Cy(F11)CkC {@ CC6]kC_lCy y yCi @BDELET61yk,C {k1X{Xi @!BINSER61yk1Xi @CREPLAC6i@?CSHADOצ+hDbkt>@DISPLACEMEN6(i@CD(>SHADOW6RD DXDyi@>SHADO6 tDi@D>IN-SHADO6) tDi@C6S DS i@,D#PAG{@DEPSO6G i@DINIT-PD@DFOOTINK@CPAGE?EkD H Hi@EFORM-FEE6 G  G i@E(SEMIT6: kEmE i QEHELL6%8080 Forth 83 Model%Version 2.1.0 Modified 31Dec87 00+?i DMAR6m)O*k%+iDSYSTEM.BLI5SYSTEM BLKSTUVWXEEDITOR.BLI5EDITOR BLKW?`wEXEROX.BLI5XEROX BLK`_`E3DRO6y ]i`F?SC6.FS S i`F?LOA6Fxi`3E.6 { i`F.LOA6& User halted1T }EG% Loading Scr# %p) 2cF 0i`]FPLIS6: 6F>: Hi`"FARE69 _]i`eGAREA6 _Ei`KGDRIVE6_AXG G:G i`|G-LOA6"G] Gi`FBUF6\JH;kkTH%Emptyy DHpk62XDH%UpdatedGi`F?COM6o &For compiling only!i`G(BREAK6% ** Break in ;/%**-i`GBREA6VH ##Hi`NH?BREA6z(H'i`GQUIT6T&Abortedi`xHPAUSE6IHHi`H?PAIR6l&Illegal CASE nestingi` ICAS6VH )i`4IO6I##T#cw##]i`HENDO6I#cw#{'i`xIENDCAS6I#] lI'I i `HNOTHIN6i `HDOE6m)Ik!w#O*ki `IMARKE{ `I(MAKE6k6k6{k!4Ji `IMAK6o [J#JcJw#eJc$k!*i `MI;AN6#OcJi ` J(UNDO6Ik!{k!i `8JUND6o J$#JJ$JipI"TIMŝVpJ"MONT6E# $$JanFebMarAprMayJunJulAugSepOctNovDec]XipJ@TIM6m)w#O*kJXipJYRKp-KMOKpKDAYKpiJSECKp9KMINKpEKHRKplK(TIME63K>~~y ?KJk6\K;%7KLK~~y c%YK~~y :%fK~~y :%rK~~OipxKTIM6KipKP-FOO6:KEipKCR6{DNX{aMip=NCRT6DNXaMipJNVMOV6DNXDNXaMi p|NVC6QN]i pNVFIL6FN({ENi pLES6Li pNAL6)Ni pN-AL6(Ni pcN[ALT{ pNVIDE6kONi p&NDI68#Oi pOREVERS67#Oi p OGRAPHIC65#Oi pCOBLIN66#Oi ppOBLO6]TNi pN-LIN6RNi pOA6  =NcXcXi p1ODAR6 H Hi pONA6Oc/N]/NiPOEDITOҦ+?sl\[ss?DPC/SCҝPTO6 HiP P6 X(PV iP.P64P/# BPiP>PCURSO6 iPVPLINE6qP/F iPhPCOL6qP/V iPP+6PXZPiPP'STAR6S iPP'CURSO6PqPXiPP'LIN6PPyiPP#AFTE6/PyiPP#REMAININ6,qPyiPQ#EN6QPXiP QCHANGE{PMODIFIE6=Q6iPCQID-LEΝ PZQI{ P3QSTAM6nQP/XcQEycQEiP}Q?STAM6=QQQ=QHiPQ69iPQ'C#6PPNQiPQSPLI6s/ PQCNQiPJOI6P/X/QCiPQWIP6P,NQiPiQEOӝ^PR?TEX6-R kYR1/(1{[Ry iP3RC/PAĝTPcR'INSER6skRXiPqR'FIN6{RkRXiPQ.FRAME6%'%'iPR.BUF6%I {RR%F RRiPR?MISSIN6 S]RR% not found -iPRKEE6P/{R{iP S6RskR{RRkRs{RkRiP{P(I6{R;RQiPAS(TILL6R;RQHCRiPS'F6RXiP'R6GSCBPiPnS6GS DBPiPUS6{R;R]P/NQiPS6/BPP/'QCSiPS6SP'Q/CNQiPS6/# {X/{R{/kBPS/BPiPS6S iPRBRIN6({\8Tk;S.T]iPTFIND6R;RPQHCiP>T6FTRtSBPiPS6E0FT~TtSBPO]S \T@4PRPQHCTtSBP]jT]TjTHTRiPT6RkkBPQCiPS6ZTTiPVT6TSiPTTIL6Q^StSCiPT6Q^SCiPhTK6P^StS{R{i PU.LIN6PpPPq ^G PPq i PCORNEҝ PTO6gUB-Ni PBOTTO6 B-Ni PUVERTICA6\U|;NM7Ui PmULEF6Ui PURIGH6DUi P!U[HOMEݝ PTLINE#6\,V O;p(Vy Oi P6UBORDE6sUUUU Vi P:V>6qP/4 X{X{Oi PV(REVISE6OPU\Vk;/QN/XM7V]i PSVREVIS6VXVi PV.SCR6O>iPUSCR-MOD{PTINSERTIN{PV.MOD6!OV+W% INSERTING1W 6OV% Editing: ZW%SCREENcW% LINESiPVCHANG6k{ WiPvVDISPLA6.WS OCVV WViPWREDISPLA6k Wc/NQVV WO>UyOO/NiPV]6}iPgWOVERWRIT6PNQBPiPXSINSER6PQE XcT}WXBPk([XNQiP!XSDELET6PQBPP{cP,EXNQiPWRE6S EP/NQiPWLINSER6PXPkBPQXXiPXLDELET6P, YQ BPP{XEYiPcXC-INSER6V.Y+X0YXiPYC-DELET6VOYmXQYXiP4YWRIT6VmYYoYXiPWAS6OxOn{#OiPsY-EO6PPNQiPY-EO6PQNQiPX(-EOS6OO% Erase? (Y/N) yYkG .YTYYXViPYI6XV/NkLl[c/N T3Z]P[ALTGZ]BP[4LT]Z]BP[LTsZ]/kBP['LTZ]/BP[nTZ]BP[aLTZ]VpW[PLTZ]4P[ TZ]BP[TZ]?Y[T[]VpW[T[]Q[LT-[]@V[TA[]S[pLTU[]@V[Tk[]DV[T[]Q[T[]X[T[]Y[T[]Y[c~WT[][]Y]QV Z]W/NiPZEDITING{P[AUT,yP[INSTAL6OCV[;\W\0=QH[6kHiP \MOD,PC\!MOD6J\C VViPR\!I6K _nQ{iPUYGET-I6wQ \r\%Enter your I.D.: ...x\]iP PE6\\PiP\EDI6FS Z\4P\iPOFI61$hA]5X\1ZTiPO(WHERE6k J]\EBP@ R{iP&]LO{PN]@6y iPZ](LOG6_]k1({1X{$ Updated: 1X{KX{iPYO?LO6T]]S u]iP]?6_]\iPm]DON6[^] 1[HQkH\C >iP\RECEN6Xy \i `$^FRE6 cyi `C^.VERSIO6%Version: 11Mar90 i `\!VER6K _c^X{i `]PROGRA6nQcQ^1%Saving system as: cO 15i `}^EMIT-FIL{ `]#{ `^PBU{ALLOT 1]H `^WRITE-SE65ED6^_5EE0^ `^WRITE-SE6^: `^WRITE-SE6^:^_^r^_& Wri `^WRITE `^WRITE-SE6_:^__r^_& Write error.^Hi `^-SPOO6_^>2: H9-i `^(SPOOL61cO  &File not specified1\5k X{ Xi `_(DISK6^_X(k^:Tj`_i `_SPOO6_k$SPL X{k% Spooling to: 2k^J`-k2]2^Hi`_UTILITIE6 6 6+1i`A`H6E%Xerox c^i``MINE`X^.VIEW6\fa;5Xba;pk!2Dai 0/aBUǦ+lasllP 0 2 >2 >o2  0~aDNEX{ o g^#V 0aDNEXT b 0bDEBNEX{PYaOb:a<2aOb2aa*a bb 0!bPNEX^b>2 !-b"   0$aUNBUxba @COP6 7AD{D{7Ai@bCONVE6 BD{D{DDyBBi@b6 SD/kBP{D{SQDi@DBRIN6({\ck;bb]i@ja.6>~~Oi@ aD.6?c;c5ci@nbEMIT6}kc~ ic].G i@'cDL6k+ -cX-cc;Kcci@n`?.6 Tc%\/]cpi@c?.6 Tc%V]cpi@c.HEA6{k}{}\0d;c(d\Fd;c>d\Zd;cRdXi@ocDUM6 d\d;uc7{d i@bdD6k@id@Xi@dD6/# S X/idi @cOU6%Subscript out of range on k5!{!;/% Max is 10% tried _-i @CcMA6 7e6{X9edi @dCASE6:+)*O*kei!@eASSOCIATIVE6:+O*kkk\e6 Tey ];jey i"@d(SEE4i"@U.WOR6k{!;/6i"@e.INLIN6ek_6i"@e.BRANC6eky_6i"@e.QUOT6eei"@f.STRIN6e Xi#@f.(;CODE6eX7Sf%DOES> Wf]i#@1f.UNNES6%; ]i#@[f.FINIS6e]i$@EXECUTION-CLASoe7\#%&O*i$)%@tf.EXECUTION-CLASOeeeeeee fffkffk g]i&@f.IMMEDIAT6{!@}Gg% IMMEDIATEi'@g.CONSTAN6kk!10% CONSTANT {!;/i'@Kg.VARIABL6kk!_% VARIABLE k{!;/%Value = k!10i'@sg.6%: k{!;/fi'@g.DOES6%DOES> 5!fi'@g.USER-VARIABL6kk!10%USER VARIABLE k{!;/%Value = ,10i(@g.DEFE6% DEFERRED k{!;/%IS ,ei(@'h.USER-DEFE6%USER DEFERRED k{!;/%IS ,ei(@Th.OTHE6k{!;/kk!Th]%is CodeOkX7hg]Oy % is Unknowni)@UDEFINITION-CLASoe6{)@h.DEFINITION-CLASOegWggg0hbhhi*@h((SEE)6kkhi+gi*@=eSE6$ei,@eL/PAGŝB,@XiLOGϝ,@^USCR#{ALLOT iTEXT-@*iTEXT6kc~ i,Cii-@iP6k7>i]ni|i|ikXi-@i2P6kp/# s{1Xs/Xs/X(/si-@i2SC6p=kp\rj ;ihjy i.@iP-HEADIN6%Page# D10ji/@xjPR-STAR6: 6 H[E-G |iHDDi/@jPR-STO6X-G : Hi/@jPR-PAG6j|iH|i6\(kkX .CTmmlmlFT.m]I-yl"mQT&Unbug]\bi3@-lDEBU6$Sklli3@cRESUM6yl6\biP\?INSER6Fk,m(PPy&Not enough room.CmFy iPum'C#6PQNQiPY(XI6{R;RmiPmX6mmBPiPmX6RkkBPmCiPmX6ZTmiPn(XTILL6R;RmHCRiP#nXTIL6m-ntSCiP=nX6m-nCiPSnX6mmiPmGRABBE{LLOT 6E3BKPnLPLACPnLPLP&nLPLAC6 6{]iPEr(XKT6PmSiP`rPZnLPLACPdnLPLAC6 6{]iPr(XKT6P-ntSiPrXK6r}nriPsn+K6rk(P}ny& Buffer full}nX}n{iPrG6rEniPr+G6rEniP sCU6PPcs{ QmNQiPrPU6}nPQmBPNQiPX.6}n(P s //_/7vsy i`ZeEMPTEFmHELPINǦ+dyxMwxzasHELP-FIL{ysAI{LMA{sLAYE{BASE6sV # Xis(NOTES6ssXXsisNOTE6tiSTAS6ti!SCREE6Otsy\t;/jN/XM7yt]itPO6:# Xi5tVLIN6t N:XtitHLIN6 XNitL6S{N:X{tNitR6S{N:X{t{NitT6tiuB6tiLuBO6kt(FSQu](S@u{uiGtCORNE6{y/#  yXi]uBFIL6 uX{\u FQN:X{/X{uFiuBOXE6 =t{uy66cuiuGRO6skX\OvX6 ;u|75vy iuVAD{vSAD{bvSKIP6k/Xi;uPAS6kwvXiovSOLEL6iv\v{QN/{vk_\vX{QNiv@LIN66{tivPIEC6 wkv:\v/ivv]ivCALC-LIMIT6y{kiUvVCORNE6tsXi7wBOX-FRAM6 Aw{y{wv{cuiwCOVE6sy\vOtiv{w vv viywSHRIN6\w;k# { wYww wivVECTO6{zXizVECTOR6m)w#O*kziz@VECTO6m)w#O*kz{zitzACROSS8{K{ACROSS{[{ITEM8{k{ITEM{&{LEVEL8{{LEVEL{{DSK6iy{ITEM6{{i{LEVEL6{{i{ACROSS6e{{iSzSTAC6m)cXw#kcX6w#i#O*ki{ITE|)|~6{itEN7BED6>i4|-EN6kcj|kX||knTz|/||i%|>EXPEC6 {k y|Fy|N||nT|/||]>y =|X i|RED6=|i{TEXTI6 |i|PACK-I6(|cF{XiG|INPUT6sk}i6}INPU6?} m}y |[}i}DM6 n k# {}X iQ}106{} # }i-{SCAL6 y}w}i|>DOLLAR6}i q}DESCRIPTION6tXi }DESCRIPTO6~{2~X*~i }ALIG6}P4 Oi }.AL6Ns~}G e~O]i ~PTY{LEVE|~A~[~~i {~PROMPT6PyXi ~(.PROMPT6~~i zDISK-DAT6zilz#RECORD6zi~#6~izRLE6z6i REC/SC6zXi~#FIELD6zXi5#6?iFTYP6(k?Xi\FLE6d(itFOF6d6iRE{MSE!NE6~k6C ,{F l&Data not valid in current filez,i~(RECORD6'4 (z{# XiRECOR6iFIEL6#XiSIZ6}iG?BYTE6dNi`?6 2 ~~~,%i,6z iuCOMMA6n >hOiDOLLAR6 n >~~.%hOiԀDOLLARS6 ;n >~~.%hO=iC6U i-N6U i D6C icD,6C ir$6C ހi$,6C iRNUMERIOeFWh$hxiJUSTIF6kyc%߁OiFCOUN6k5{{i(.F6kd}5{Eˁi.6izENTRY6>iH-EN6kc~kXknT/i9>EXPEC6 {k y₋FŷbނnT܂/ނ]>y QX iRED6Qi TEXTI6 iPACK-I6(cF{X{?STACK-ER6m5!{!;/& stack errori~@STAC6Si|INI6kX{iqPUS6kC >P{iDOW6k{XyiPO6kǃW>Pkzi {.STAC6k{X(;_7i݃DEE6~ǃEiC#PHRASE6{i,DELETE6e{iASCRA6zij#6Li-VECTO6zi|?TITL6~ǃ#|ǃ &not done at title leveli RECOVE6`kk{`{i ?ROO6?z# 7>4i AD6k$z&Too many phraseskLi ASSIG6 h$ki +ITE6s{z#|zzi Q-ITE6#|ャzzi p?+ITE6s{kŅxi ?-ITE6zki >6҅ i 䅂>6 i ڄ>LEVE6zk~Hz~zi Ʌ+LEVE6{i -LEVE6~ャz~ヘzi 1?+LEVE6{ky:i c?-LEVE6酋~ǃkMi }?O6 i VTIPPY-TO6zH{z#|~i U6҅i D6i 憂L6i R6mi DN6E0/ %i ׆UP6E0O҅ Ei TO6m]i DUNHOL? 3APPEN6E0kz{xni tINSER6E0kz{kzzʇ#|z{Ї~z{ni UNDE6쇠}i SU6E0k{{z{:ni TBU{ALLOT AY ކ&]i+TA凄-TATO68812?i8C PHRASE6z i n(ENTER6Z;x{{{kz7]i REA6k^z^O ^z1iև6͈}i6͈i6͈i6͈އi(>DEL6`{`{i+DEL-ACROS6e{gk4Uiƈ>DELETE6kS4ieUNCOUPL6s{z#|z{]~z{Mm]i?UNDE6Љއ҉iSDE6zvi։XX6{z܉ĉy i6s{{zkv͈l&delete/replace error{{iFL/PAGŝSUBӝ-TCUҝ|kBOTȝ+E.ALP6>{k{Oyi.6z(3}握쏽p.G iɏ.FILENAM6%File: jKixLD6: 1G i.HEADIN6!~z܊iHEADE6@iNPRINT-CHAI63̎y# Ώzd Hwig(DISPLAY6ێŒOWui#DISPLA6]giPRIN6: 6DE: Hgi5FBU{ALLOT AY sT]xnT2]aTF]90F5zTX@STRIN6(^z z{ze{{zX{g](^z]iQLOCATE{?FOUN6z[HCkiLOCAT6Hd ii6̎H^O {Y]ۑ 6% not foundiґ(MON6O% Line: zp%Level: ~ǃp %Phrase: zpy%across> U{p %item> s{p %level> {pyOOiMONITO6OB-iBUR6zv"iޒATTAC6m 2iAVAI6rXێ" NYi6EDIT-BU{ALLOT AY igR6/i5D6=iWC6]i935ATA6/\E{>BU6g^zHMz\kzzzkXe{k y g]iēNE69YiZA6zL{{!i-NEW-FILE6]43giOPE65!gi UBY6_i q6i אDAR6Oi DI64i!ELIT!C-HEA6@% Checksheet<% Init. Datei!.LIN6% ____ _____ z(p%. zi!.LINE6ezV aEGi!CHECKSHEE6Œ: 6ɔؔEE: Hgi%ϔSTART-U6.0y0+( Yg%-Thought Processor by Brian Sutton, D.C., 1/88i%STA6G MG iTP.COM 2i!SETU60+z,˓i!ӔLOC-6/22:46:28 11Mar90saving system as tp.com 2{i!!PROMP6Hi!~!DAT6HE$i!!OFFSE6Ri!FLEN6R{i!ĖFTYPE6Rdi!`LEN6&Field too longN k̖i"?SPAC6Rkd{2XyW>&Out of vector storage spacei"햄(F"6E0 kk,TP.DOC; Thought Processor by Brian Sutton, D.C. November 1990 Written in F83 This system is already configured for a Xerox 16/8 or 820-II machine. It should run on most cp/m systems as is (if you don't press the HELP key or use the editor, as explained below). The source is included for re-compiling if necessary, and has been done on IBM clones. I originally created this program to help organize my thoughts while I was trying to accomplish a certain set of goals. The reasoning was, if I decided what needed to be done, then broke it down into smaller steps, then broke those down into smaller steps still, I would finally arrive at the point where I was actually able to get started on something & work through to the finish. Anyway, what came out of it was the Thought Processor program. I have since seen at least two commercially available outlining programs that seem to be almost identical, at least from their ads. Unfortunately, this one is not as sophisticated and bug-free as it could be, but such is life. All disclaimers apply. The data is organized into one-line phrases. Therefore, you cannot write paragraphs of text in your outline. The maximum # of characters is 78. Everything is organized into "headings" and "sub-headings". Each sub-heading can also be thought of as a heading with it's own potential sub-headings. Stacks are used to keep track of your location in the outline. Currently, there is enough stack space to handle 300 sub-headings (under any one particular heading) and 150 nested levels of sub-headings. The actual phrase limit is approximately 65535. For example, suppose you were classifying visual sensations. You might have: Color red orange yellow green blue sky blue navy blue regulation navy blue popular navy blue indigo violet Shape circles rectangles squares parallelograms triangles Under colors, you could have up to 300 different major colors (the ones under blue don't count). You could also, at the same time, have 300 shapes. Also, you could (or at least the program allows you to) have 149 or so levels (nested sub-headings, i.e. color->blue->navy blue->regulation navy blue) under color, as well as another 149 under shape. That will normally be sufficient to narrow it down to the precision you need. Of course, these stacks can be enlarged by recompiling the program. Current files would still be compatible (and enlargable). By the way, it's been at least 3 years since I wrote this program, so some of the details are a bit fuzzy. If a conflict occurs between these docs and the program, the program code takes precedence. (Sick humor, I know) ***************************************************************************** Getting Started From the operating system (CP/M or MS-DOS) type "TP". If you already have a tp file set up, you can specify it, as in "TP TP.TP" (tp.tp is included; it outlines the command functions, some of which are listed here). The .tp extension is my convention, but not necessary when naming your outline files. Assuming you did NOT specify a file, your first task will be to create one. The command NEW-FILE: will do this. Entering "NEW-FILE: VISUAL.TP" will create the outline VISUAL.TP on the disk and put you into it. On a new outline, you start out at the TITLE level. The file is created with a blank line for the title. The only thing you can do at this point is to change the title from a blank to whatever you want to call the outline. Use the (R)eplace command to do this. "R Visual Stimulations" changes the title to "Visual Stimulations". I would suggest, though, that you first examine the TP.TP file for the complete command summary. The OPEN command can be used if you didn't specify the file when starting the program. Syntax is "OPEN TP.TP". Then DISPLAY or PRINT the outline. Incidentally, PRINT is set up for an epson condensed mode (via INIT-PR). This helps to keep the listing fairly well organized, at least to a few nesting levels. While you're in the program, only the current level and sub-headings are shown, although you do have the option of DISPLAYing the entire outline. A vertical bar (|) shows your current cursor position. A dash (-) indicates the fact that sub-headings are present. A plus sign (+) is just a combination of the two -- i.e., the current entry has sub-headings. Navigation is accomplished by word commands, similar to the standard FORTH editor. A few commands are: UP move the cursor up one entry DN move the cursor down one entry LT move left -- i.e., move from a sub-heading to the calling heading RT move into the sub-headings Other commands are explained in the file TP.TP You can use multiple commands on the same command line. Ex: dn rt dn dn Okay, well now I've got some good news and some bad news. The good news is that I've included a set of pull-down help screens that you can access while running the program that contains a summary (again) of all these commands. To access them, just press the HELP key until the command use see comes up. Press any other key to go back to previous menus and/or exit. The bad news is that the help screens only work on a XEROX 16/8 or 820-II. They use the video ram to create the graphics & the quick display you (might) see. The same is true for the FORTH editor (sorry). Accessing the HELP or EDITOR on a non-Xerox machine will cause a system crash (at least). The HELP key is ascii code 30. If any of you PC'ers are familiar with the video access of the IBM clones and would like to adapt the help screen system to that computer, let me know and I will send you the help source. Just promise to send me a copy when you've finished it, so I can use it when I get MY clone. A note or two about recompiling: I've modified the F83 kernel and extensions a bit, and have included in my usual system quite a few words that most of you won't recognize. I did (believe it or not) make an attempt at keeping this fairly portable, but the chances are pretty good that you'll find a couple words your system doesn't recognize. One that comes to mind is "PROGRAM" which is a dressed-up SAVE-SYSTEM -- it merely clears the editor id, stores the date in the program and does maybe one or two other things. You can use SAVE-SYSTEM instead. Most of the others you should be able to figure out or substitute without much difficulty. If you do have problems however, send me a note at GEnie Mail B.SUTTON1. TP.HLP@;ڹ@ 14 0 Updated: 22:39:10 11Mar90 11Mar90brs THOUGHT PROCESSOR HELP SCREEN The following commands allow you to move through your outline. ( | = current position - = sub-heading present + = both ) COMMAND ACTION DN move down one line UP move up one line TOP move to the first heading in the outline. Typing "TOP LT" takes you to the title/file stat level RT move to a sub-heading LT move out of a sub-heading n DNS move down "n" lines n UPS move up "n" lines >T move to top item on this level >B move to bottom item on this level 8 miscellaneous commands Level# 3 Topic#: 4 display -- displays outline from current level down print -- prints outline from current level down checksheet -- print current level in checksheet format w -- writes buffers to disk |zap -- erase entire outline 11Mar90brs ---- Creating New Outline Entries ---- The following commands create entries in the outline. "xxx" represents your entry. COMMAND ACTION S xxx Create a Sub-heading named xxx U xxx Create an item underneath the current one I xxx Create an item, inserting it above the current one. A xxx Create an item, appending it. R xxx Replace the current item with xxx. THOUGHT PROCESSOR HELP SCREEN he following commands allow you to move through your outline. | = current position - = sub-heading present + = both ) COMMAND ACTION DN move down one line UP move up one line TOP move to the first heading in the outline. Typing "TOP LT" takes you to the title/file stat level RT move to a sub-heading LT move out of a sub-heading n DNS move down "n" lines n UPS move up "n" lines >T move to top item on this level >B move to bottom item on this level 11Mar90brs --- HOLDING BUFFER --- You can temporarily store items in a holding buffer so you can move phrases and sections around without re-typing them. HOLD remove current item from outline, save in hold area n HOLD# like HOLD, but allows you to put the item in a separeate area. There are 9 (1-9) areas available. (HOLD uses area zero.) HELD retrieves an item from the holding area. n HELD# retrieves an item from the holding area number "n" .HELD display the items in the HOLDing areas. To use an item from the holding buffer, use the command HELD or n HELD# followed by one of the these commands: APPEND INSERT SUB UNDER ---- Creating New Outline Entries ---- The following commands create entries in the outline. "xxx" represents your entry. COMMAND ACTION S xxx Create a Sub-heading named xxx U xxx Create an item underneath the current one I xxx Create an item, inserting it above the current one. A xxx Create an item, appending it. R xxx Replace the current item with xxx. 11Mar90brs OUTPUT COMMANDS DISPLAY display the outline of the current heading, from the current location down. PRINT print the outline instead of DISPLAYing it. CHECKSHEET print only the items under the current heading, in checksheet format. --- HOLDING BUFFER --- ou can temporarily store items in a holding buffer so you an move phrases and sections around without re-typing them. OLD remove current item from outline, save in hold area HOLD# like HOLD, but allows you to put the item in a separeate area. There are 9 (1-9) areas available. (HOLD uses area zero.) ELD retrieves an item from the holding area. HELD# retrieves an item from the holding area number "n" HELD display the items in the HOLDing areas. To use an item from the holding buffer, use the command HELD or n HELD# followed by one of the these commands: APPEND INSERT SUB UNDER 11Mar90brs MISCELLANEOUS COMMANDS F xxx Find the character string "xxx" in the outline. If xxx not specified, use the previous one. ZAP Erase your entire outline NEW-FILE: xxx Start a new disk file named xxx. Any current file by that name will probably be overwritten To enter the title, use "R". To enter the first item, you must use "S". BYE Exit the program (saves data automatically). W Make sure the data is saved. DARK Clear the screen. DIR Do a disk directory. OPEN Open an outline file. OUTPUT COMMANDS DISPLAY display the outline of the current heading, from the current location down. PRINT print the outline instead of DISPLAYing it. CHECKSHEET print only the items under the current heading, in checksheet format. 11Mar90brs DELETING COMMANDS DEL delete the current item and all sub-headings XXX delete the current item, but not it's subheadings. Unfortunately, at this time, XXX also deletes any items that may be below it under the same heading. It's use is therefore not recommended. (sorry) Be sure to make frequent backups of your TP files, as this particular program is not too well refined, and it's fairly easy to accidently botch up an entire file before you know it. MISCELLANEOUS COMMANDS F xxx Find the character string "xxx" in the outline. If xxx not specified, use the previous one. ZAP Erase your entire outline NEW-FILE: xxx Start a new disk file named xxx. Any current file by that name will probably be overwritten To enter the title, use "R". To enter the first item, you must use "S". BYE Exit the program (saves data automatically). W Make sure the data is saved. DARK Clear the screen. DIR Do a disk directory. OPEN Open an outline file. 11Mar90brs THIS IS THE END. DELETING COMMANDS DEL delete the current item and all sub-headings XXX delete the current item, but not it's subheadings. Unfortunately, at this time, XXX also deletes any items that may be below it under the same heading. It's use is therefore not recommended. (sorry) Be sure to make frequent backups of your TP files, as this particular program is not too well refined, and it's fairly easy to accidently botch up an entire file before you know it. U S I A SUB UNDER INSERT APPEND TOP 11Mar90brs What are you looking here for? THIS IS THE END. TP.TP ;d>  )THOUGHT PROCESSOR BY BRIAN* functions sub 9(r)eplace =(i)nsert ?(u)nder 6A(s)sub-heading append under 52 = insertion operaI moving the cursor up -- up one line dn -- down one line 4lt -- previous level (left3rt -- next level down (rig>t -- go to top of current level >b -- go to bottom of current level stop -- go to very beginning of outline n = holding buffer number uccessful repositioning in outline phrases are deleted upon sadings referenced by numbers 0-9 exited is not saved when program t phrases and their sub-hecan hold up to 10 differen!general description 0commands ffer# "n" "$returns phrase# held in buformat: "n held# "vheld -- same as "0 held#" %#held# &hold -- same as "0 hold#" buffer# n SUTTON, D.C. +uses ,outlines {instructions (m outline and holds it in -removes current phrase fro.Vformat: "n hold#" '/hold# holding buffer insert ht) ) tion, written out (NOT 1-lh7(a)ppend 8puts the data at the bottom of the list :;format: "r $$$" where $$$ is the data string <replaces the current data with $$$ >insert following data above current phrase @insert following data just below current phrase BDput following data as a suCb-heading of current phrase Eif there is already a sub-Fheading, it will be a sub. of the new one Jte commands by using a car1data commands HNdata command format et Gwhen entering text, separaspace between Le after the other, with a MKcommands can be entered onWmiscellaneous commands Qchecksheet -- print currenxt level in checksheet formSTdisplay -- displays outline from current level down UPprint -- prints outline from current level down n is a number from 0 to 9 X|w -- write buffers to disk (to ensure saving data) flowcharts [\change del to not automatically add to delete-list ]`_undelete -- go through all^ del's & xxx's since last AVAIL allow holding caadd specs to title level b#phrases #available deletions(?) dcopy function efcopies from holding buffer to new phrase gformat: 'n' copy insert n = buffer # ip(del)ete jxxx kmThis one is bugged -- it dleletes an entry, but not sub-headings -- but: nit will delete all entrieso *below* the one being deleted; be careful! qDeletes an entry and all srub-headings under that entry tN ups -- move up 'N' linesuN dns -- move down 'N' lines w.held -- display contents of hold buffer at zzap -- erase entire outline Ygoals }f -- Find a character stri~ng: "f myword" will locate "myword" dark -- clear the screen & re-write bye -- save data & exit program forth -- open forth vocabulary outline -- return to tp vocabulary To turn off auto-screen update, type: "forth log off done" to restore auto-rewrite, type TP new-file: create a new file. Ex: NEW-FILE: FOO.TP file will be enlarged as needed. to enter/change outline title, use the R command you must use the S command to enter the first entry (after title) open -- open an outline file (already present on disk) Rdisplaying the outline Oychanging outline files for experts only (and finaglers) to turn off auto-screen upYou should execute TOP befdate, type: "forth clear" the LOG OFF prevents you from destroying your initial pointers to restart auto-screen re-write, type "TP" ore doing this if you are han the XEROX, just type "in another outline etter abbreviation) Therefore, use only on the last entry in a list under any given heading.