5space 5cr 5type 5emit 1makeflag 1YET 1BUT 1?DO 1REPEAT 1AGAIN 1UNTIL 1WHILE 1DO 1BEGIN 1ELSE 1AHEAD 1THEN 1IF 1>offset 1~cond 1PREFETCHT2 1PREFETCHT1 1PREFETCHT0 1PREFETCHNTA 1SFENCE 1PSWABD 1PFPNACC 1PFNACC 1PF2IW 1PI2FW 1PSHUFW 1PSADBW 1PMULHUW 1PMOVMSKB 1PMINUB 1PMINSW 1PMAXUB 1PMAXSW 1PINSRW 1PEXTRW 1PAVGW 1PAVGB 1MOVNTQ 1MASKMOVQ 1PREFETCHW 1PREFETCH 1FEMMS 1PAVGUSB 1PMULHRW 1PFRCPIT2 1PFMUL 1PFCMPEQ 1PFACC 1PFADD 1PFSUBR 1PFSUB 1PFRSQIT1 1PFRSQRT 1PFRCPIT1 1PFRCP 1PFMAX 1PFMIN 1PFCMPGT 1PFCMPGE 1PF2ID 1PI2FD 13Dnow: 1mod0F# 1PSTD 1PSTQ 1PLDD 1PLDQ 1MOVQ 1PSLLQ 1PSLLD 1PSLLW 1PSRAD 1PSRAW 1PSRLQ 1PSRLD 1PSRLW 1pshift 1pxor 1por 1pandn 1pand 1pmaddwd 1pmulhw 1pmullw 1PADDD 1PADDW 1PADDB 1PADDSW 1PADDSB 1PADDUSW 1PADDUSB 1PSUBD 1PSUBW 1PSUBB 1PSUBSW 1PSUBSB 1PSUBUSW 1PSUBUSB 1EMMS 1PCMPEQD 1PCMPEQW 1PCMPEQB 1PACKSSDW 1PUNPCKHDQ 1PUNPCKHWD 1PUNPCKHBW 1PACKSSWB 1PCMPGTD 1PCMPGTW 1PCMPGTB 1PACKUSDW 1PUNOCKLDQ 1PUNPCKLWD 1PUNPCKLBW 1mmxs 1MM15 1MM14 1MM13 1MM12 1MM11 1MM10 1MM9 1MM8 1MM7 1MM6 1MM5 1MM4 1MM3 1MM2 1MM1 1MM0 1cmovnle 1cmovle 1cmovnl 1cmovl 1cmovpo 1cmovpe 1cmovns 1cmovs 1cmovnbe 1cmovbe 1cmovnz 1cmovz 1cmovnb 1cmovb 1cmovno 1cmovo 1cmovs: 1cmov: 1cmovIF 1FSTP 1FLD 1FST 1fx@!, 1f@!, 1FSTSW 1FCLEX 1FNCLEX 1FUCOMPP 1FUCOM 1FSTCW 1FSTENV 1FLDCW 1FLDENV 1FXCH 1FINIT 1FRSTOR 1FSAVE 1FFREE 1FBSTP 1FBLD 1FCOMPP 1FDIVR 1FDIV 1FSUBR 1FSUB 1FCOMP 1FCOM 1FMUL 1FADD 1FCOS 1FSIN 1FSCALE 1FRNDINT 1FSINCOS 1FSQRT 1FYL2XP1 1FPREM 1FINCSTP 1FDECSTP 1FPREM1 1FXTRACT 1FPATAN 1FPTAN 1FYL2X 1F2XM1 1FLDZ 1FLDLN2 1FLDLG2 1FLDPI 1FLDL2E 1FLDL2T 1FLD1 1FXAM 1FTST 1FABS 1FCHS 1FNOP 1f@!: 1fop: 1.fq 1.fd 1.fw 1.fx 1.fl 1.fs 1fsize 1D9: 1DF, 1DE, 1DD, 1DC, 1DB, 1DA, 1D9, 1D8, 1rsm 1wrmsr 1rdmsr 1rdtsc 1cmpchx8b 1cpuid 1LGS 1LFS 1LSS 1LDS 1LES 1LEA 1LAR 1INVLPG 1LMSW 1SMSW 1LIDT 1LGDT 1SIDT 1SGDT 10F.1: 1VERW 1VERR 1LTR 1LLDT 1STR 1SLDT 10F.0: 1INT 1OUT 1IN 1io 1IMUL 1XADD 1BSWAP 1CMPXCHG8B 1CMPXCHG 1WBINVD 1INVD 1CLTS 1BSR 1BSF 1mod0F: 1BOUND 1ARPL 1ENTER 1movzx 1movsx 1movx 1xchg 1setg 1setle 1setge 1setl 1setpo 1setpe 1setns 1sets 1seta 1setna 1setne 1sete 1setnb 1setb 1setno 1seto 1sets: 1set: 1setIF 1jnle 1jle 1jnl 1jl 1jpo 1jpe 1jns 1js 1jnbe 1jbe 1jnz 1jz 1jnb 1jb 1jno 1jo 1jmps 1jmp: 1jmpIF 1nle 1le 1nl 1l 1po 1pe 1ns 1s 1nbe 1be 1nz 1z 1nb 1b 1no 1o 1> 1<= 1>= 1< 1pc 1ps 10>= 10< 1u> 1u<= 10<> 10= 1u>= 1u< 1vc 1vs 1cond: 1next 1jmpf 1jmp 1callf 1call 1retf 1ret 1(ret 1JCXZ 1LOOP 1LOOPE 1LOOPNE 1sb: 1?brange 1STD 1CLD 1STI 1CLI 1STC 1CLC 1CMC 1HLT 1REPE 1REP 1LOCK 1wait 1IRET 1INTO 1INT3 1LEAVE 1LAHF 1SAHF 1POPF 1PUSHF 1FWAIT 1CWD 1CBW 1NOP 1POPA 1PUSHA 1XLAT 1SALC 1AAD 1AAM 1aa: 1AAS 1AAA 1DAS 1DAA 1pop 1push 1pushs 1btc 1btr 1bts 1bt 1btx: 1shrd 1shld 1shd 1test 1DEC 1INC 1inc: 1IDIV 1DIV 1(IMUL 1MUL 1NEG 1NOT 1test# 1not: 1modf: 1mod0F 1modfb 1modf 1mov 1?ofax 1?64off 1assign# 1movxr 1xr>mod 1scas 1lods 1stos 1cmps 1movs 1outs 1ins 1sar 1sal 1shr 1shl 1rcr 1rcl 1ror 1rol 1shift: 1cmp 1xor 1sub 1and 1sbb 1adc 1or 1add 1ari: 1reg>mod 1GS: 1FS: 1DS: 1SS: 1CS: 1ES: 1seg: 1bc0F: 1bc.b: 1bc: 1seg? 1rel? 1?xr 1xr? 1?st 1st? 1sr? 1tr? 1dr? 1cr? 1?ax 1?mem 1?reg 1reg? 1reg= 1STP 1mod 1>>mod 1LI) 1L) 1rel) 1A# 1L# 1# 1Aseg) 1A#) 1A:: 1A: 1DI) 1D) 1) 1seg) 1I#) 1I) 1*8 1*4 1*2 1R#) 1#) 1index 1osize@ 1asize@ 1.amd64 1.86 1.386 1OP 1UP 1RP 1GS 1FS 1DS 1SS 1CS 1ES 1R15L 1R14L 1R13L 1R12L 1R11L 1R10L 1R9L 1R8L 1DIL 1SIL 1BPL 1SPL 1BH 1DH 1CH 1AH 1BL 1DL 1CL 1AL 1R15 1R14 1R13 1R12 1R11 1R10 1R9 1R8 1DI 1SI 1BP 1SP 1BX 1DX 1CX 1AX 1[BX] 1[BP] 1[DI] 1[SI] 1[BP+DI] 1[BP+SI] 1[BX+DI] 1[BX+SI] 1wadr 1wadr: 1bregs 1breg 1Regs 1finish0F 10F, 1finishb 1finish 1opcode, 1rbytes, 1bytes, 1.qa 1.q 1.da 1.d 1.wa 1.w 1.b 1sclear 1pre- 1.arel 1.64bit 1.rex 1.64now 1.64size 1.onow 1.osize 1.anow 1.asize 1seg 1byte? 1Adisp? 1Aimm? 1imm# 1imm 1disp# 1disp 1SIB# 1SIB 1ModR/M# 1ModR/M 1+rel 1c! 1allot 1here 1, 1>exec 1nonrelocate 1nrc 1(+rel 1>codes 1case? 1user' 1[A] 1[F] 2[34~ 2[34 2[33~ 2[33 2[32~ 2[32 2[31~ 2[31 2[29~ 2[29 2[28~ 2[28 2[26~ 2[26 2[25~ 2[25 2[4~ 2[4 2[1~ 2[[E 2[[D 2[[C 2[[B 2[[A 2[[ 2[24;3~ 2[24;3 2[23;3~ 2[23;3 2[21;3~ 2[21;3 2[20;3~ 2[20;3 2[19;3~ 2[19;3 2[18;3~ 2[18;3 2[17;3~ 2[17;3 2[15;3~ 2[15;3 2[1;3S 2[1;3R 2[1;3Q 2[1;3P 2[24;5~ 2[24;5 2[23;5~ 2[23;5 2[21;5~ 2[21;5 2[20;5~ 2[20;5 2[19;5~ 2[19;5 2[18;5~ 2[18;5 2[17;5~ 2[17;5 2[15;5~ 2[15;5 2[1;5S 2[1;5R 2[1;5Q 2[1;5P 2[24;2~ 2[24;2 2[24; 2[23;2~ 2[23;2 2[23; 2[21;2~ 2[21;2 2[21; 2[20;2~ 2[20;2 2[20; 2[19;2~ 2[19;2 2[19; 2[18;2~ 2[18;2 2[18; 2[17;2~ 2[17;2 2[17; 2[15;2~ 2[15;2 2[15; 2[1;2S 2[1;2R 2[1;2Q 2[1;2P 2[24~ 2[24 2[23~ 2[23 2[21~ 2[21 2[20~ 2[20 2[19~ 2[19 2[18~ 2[18 2[17~ 2[17 2[15~ 2[15 2OS 2OR 2OQ 2OP 2O 2[3;3~ 2[3;3 2[2;3~ 2[2;3 2[6;3~ 2[6;3 2[5;3~ 2[5;3 2[1;3F 2[1;3H 2[1;3B 2[1;3A 2[1;3C 2[1;3D 2[1;3 2[3;5~ 2[3;5 2[2;5~ 2[2;5 2[6;5~ 2[6;5 2[5;5~ 2[5;5 2[1;5F 2[1;5H 2[1;5B 2[1;5A 2[1;5C 2[1;5D 2[1;5 2[3;2~ 2[3;2 2[3; 2[2;2~ 2[2;2 2[2; 2[6;2~ 2[6;2 2[6; 2[5;2~ 2[5;2 2[5; 2[1;2F 2[1;2H 2[1;2B 2[1;2A 2[1;2C 2[1;2D 2[1;2 2[1; 2[1 2[3~ 2[3 2[2~ 2[2 2[6~ 2[6 2[5~ 2[5 2[F 2[H 2[B 2[A 2[C 2[D 2[ 3-- 3} 3( 3\ 3C^ 3C: 3D^ 3D: 3F^ 3F: 3W^ 3W: 4xvocs 4xwordlist-words 4i-t-wl 4input-trace 4mov-regv-Iv 4mov-reg8-Ib 4xchg-ax 4jcc-short 4conditions 4pop-reg 4push-reg 4set-add-likes 4set-add-like 4set-noarg 4rAX,Iz 4AL,Ib 4Gv,Ev 4Gb,Eb 4Ev,Gv 4Eb,Gb 4Iv 4Jz 4Iz 4immz 4Jb 4Ib 4Ev 4Ed 4Eb 4Ext 4mem-modRM 4mem-SIB 4print-base 4base-regnum 4masksx 4displacement-info 4Ox 4Gv 4.width*2 4.width/2 4.width 4.regv 4Sw 4Gb 4Gnum 4.invalid 4.sreg 4.reg64 4.reg32 4.reg16 4.reg8 4.regn 4dec.- 4sreg-names 4reg16-names 4reg8-names-norex 4reg8-names 4address-size-disasm 4operand-size-disasm 4immediate-prefix 4rex-prefix-disasm 4repeat-prefix-disasm 4illegal-inst 4print-rep 4disasm 4disasm-addr 4disasm-addr1 4def-opcode1 4opcode1-table 4clear-prefixes 4rex-prefix 4repeat-prefix 4address-size 4operand-size 4string-table 4save-mem-here 4cell-fill 4th 4c@+ 4dffield: 4sffield: 4ffield: 42field: 4field: 4cfield: 4end-structure 4begin-structure 4+field 4init-libcc 4end-c-library 4c-library 4c-library-name 4c-library-incomplete 4clear-libs 4c-function 4c-function-rt 4c-function-ft 4link-wrapper-function 4compile-wrapper-function1 4compile-wrapper-function 4.lib-error 4c-source-file-execute 4notype-execute 4c-source-file 4init-c-source-file 4lib-handle 4c-tmp-library-name 4c-named-library-name 4c-library-name-create 4c-library-name-setup 4open-wrappers 4prepend-dirname 4libcc-tmp-dir 4libcc-named-dir 4gen-filename 4basename 4dirname 4scan-back 4gen-wrapper-function 4wrapper-function-name 4gen-wrapped-stmt 4gen-wrapped-types 4gen-wrapped-func 4gen-wrapped-r 4gen-wrapped-d 4gen-wrapped-a 4gen-wrapped-n 4gen-wrapped-void 4gen-wrapped-call 4gen-par 4gen-par-types 4gen-par-void 4gen-par-func 4gen-par-r 4gen-par-d 4gen-par-a 4gen-par-n 4count-stacks 4count-stacks-types 4count-stacks-void 4count-stacks-func 4count-stacks-r 4count-stacks-d 4count-stacks-a 4count-stacks-n 4type-letter 4parse-function-types 4parse-libcc-type 4libcc-types 4\c 4save-c-prefix-line 4print-c-prefix-lines 4print-c-prefix-line 4c-prefix-lines-end 4c-prefix-lines 4c-prefix% 4c-prefix-chars 4c-prefix-count 4append-l 4add-lib 4c-libs 4c-lib% 4c-lib-string 4list-map 4list-append 4list-insert 4list% 4list-payload 4list-next 4append 4s+ 4front-char 4front-string 4const+ 4.nb 4replace-rpath 4libcc-path 4libcc-named-dir-v 4lib-modulename 4lib-filename 4lib-handle-addr 4c-source-file-id 4cff% 4cff-ptypes 4cff-np 4cff-rtype 4cff-lha 4cff-deferred 4cff-cfr 4mkdir-parents 4disasm-gdb 4append-extend-string 4end-code 4;code 4(;code) 4code 4init-asm 4assembler 4break" 4(break") 4break: 4(break:) 4break:, 4dbg 4(debug) 4(_debug) 4D-KEY 4Unnest 4Nesting 4nestXT 4nestXT-checkSpecial 4Body 4restore-bp 4set-bp 4DT 4BP 4breaker 4breaker-size 4DebugLoop 4jump 4get-next 4disp-step 4Leave-D 4NoFine 4d.s 4.n 4scanword 4restore-see-flags 4save-see-flags 4dbg-ip 4see-code 4see-code-range 4see-code-next-inline 4simple-see 4simple-see-range 4simple-see-word 4print-backtrace 4print-bt-entry 4backtrace-return-stack 4init-backtrace 4backtrace-rs-buffer 4adjust-buffer 4init-buffer 4buffer% 4buffer-maxlength 4buffer-address 4buffer-length 4buffer-descriptor 4c-extend1 4c-lp+!# 4c-laddr# 4c-f@local# 4c-flit 4c-@local# 4c-branch-lp+!# 4c-?branch-lp+!# 4c-loop-lp+!# 4see 4name-see 4(.immediate) 4(xt-see-xt) 4xt-see 4seefield 4seecol 4seedoes 4see-threaded 4seedefer 4seevalue 4seecon 4seeuser 4seevar 4seecode 4next-prim 4next-head 4discode 4.defname 4xt-see-xt 4makepass 4c-init 4analyse 4BranchTo? 4DoTable 4c-extender 4C-Table 4c-(compile) 4c-does> 4c-abort" 4c-exit 4c-?do 4c-do 4c-loop 4c-for 4c-?branch 4DebugBranch 4c-branch 4RepeatCheck 4Forward? 4c-string? 4c-c" 4.name-without 4c-lit+ 4c-lit 4c-callxt 4c-call 4.word 4back? 4Debug? 4Display? 4Scan? 4DebugMode 4DisplayMode 4ScanMode 4C-Pass 4NoOutput 4Branch! 4Type! 4,Branch 4CheckWhile 4MyBranch 4CheckEnd 4MoreBranchAddr? 4BranchAddr? 4(BranchAddr?) 4FirstBranch 4MaxTable 4BranchTable 4SearchPointer 4BranchPointer 4Branches 4C-Stop 4LeaveCode 4Disable 4WhileCode2 4AheadCode 4ElseCode 4UntilCode 4AgainCode 4RepeatCode 4.struc 4c-\type 4(.string) 4.string 4cemit 4ctype 4warp? 4(nl) 4nl 4nlcount 4uppercase 4nlflag 4level- 4level+ 4Format 4Level 4YPos 4XPos 4C-Clearline 4C-Highlight 4C-Formated 4C-Output 4.\" 4s\" 4\"-parse 4\-escape 4\-escape-table 4parse-num 4parse-num-x 4char/ 4ekey? 4ekey>fkey 4ekey>char 4ekey 4clear-ekey-buffer 4esc-sequence 4esc-prefix 4ekey-buffered 4ekey-buffer 4esc-sequences 4unkeys 4unkey 4char-append-buffer 4key-buffered 4key-buffer 4s-k12 4s-k11 4s-k10 4s-k9 4s-k8 4s-k7 4s-k6 4s-k5 4s-k4 4s-k3 4s-k2 4s-k1 4k12 4k11 4k10 4k9 4k8 4k7 4k6 4k5 4k4 4k3 4k2 4k1 4k-f12 4k-f11 4k-f10 4k-f9 4k-f8 4k-f7 4k-f6 4k-f5 4k-f4 4k-f3 4k-f2 4k-f1 4k-delete 4k-insert 4k-next 4k-prior 4k-end 4k-home 4k-down 4k-up 4k-right 4k-left 4k-alt-mask 4k-ctrl-mask 4k-shift-mask 4keycode 4table 4tablesearch-map 4table-find 4savesystem 4dump-fi 4update-image-included-files 4delete-prefix 4save-mem-dict 4 4(compilation>1) 4 4(interpretation>1) 4fix-does-code 4create-interpret/compile 4no-interpretation-does-code 4no-compilation-does-code 4bye 4block-included 4--> 4+thru 4+load 4thru 4load 4block-input 4list 4updated? 4scr 4buffer 4block 4get-buffer 4flush 4empty-buffers 4save-buffers 4empty-buffer 4save-buffer 4update 4block-position 4get-block-fid 4use 4open-blocks 4flush-blocks 4block-cold 4offset 4block-offset 4block-fid 4block-limit 4buffers 4last-block 4block-buffers 4buffer-struct 4next-buffer 4block-buffer 4buffer-dirty 4buffer-fid 4buffer-block 4) 4(end-assert) 4assert( 4assert3( 4assert2( 4assert1( 4assert0( 4assertn 4assert-level 4~~ 4.debugline-stderr 4(.debugline) 4.debugline 4printdebugdata 4.sourcepos 4compile-sourcepos 4current-sourcepos 4str>loadfilename# 4loadfilename#>str 4vt100-decode 4tcode 4trans: 4transcode 4translate 4history-cold 4get-history 4xchar-history 4xtab-expand 4insert 4xkill-expand 4(xenter) 4xclear-tib 4xclear-line 4xend-pos 4xfirst-pos 4xeof 4 4?xdel 4(xdel) 4xforw 4xback 4(xins) 4 4xretype 4.all 4.rest 4xback-restore 4xcur-correct 4at-deltaxy 4#esc 4kill-prefix 4tib-full? 4search-prefix 4prefix-string 4prefix-off 4search-voc 4word-lex 4capscomp 4sgn 4prefix-found 4extract-word 4(enter) 4prev-line 4find-prev-line 4next-line 4get-line 4hist-setpos 4hist-pos 4clear-line 4linew-off 4screenw 4linew 4cur-correct 4back-restore 4history-file 4force-open 4end^ 4backward^ 4forward^ 4history 4bindkey 4>string 4ctrl 4ctrl-i 4utf-8-cold 4set-encoding-utf-8 4u8width 4-u8trailing-garbage 4u8addrlen 4u8!+? 4u8@ 4u8\string- 4+u8/string 4u8emit 4u8key 4check-xy 4u8<< 4u8>> 4u8!+ 4u8@+ 4u8len 4max-single-byte 4UTF-8-err 4O-PNT@ 4O-DEINIT 4O-INIT 4TypeXT 4EmitXT 4O-EMIT 4O-TYPE 4O-PNT 4O-Buffer 4page 4at-xy 4ESC[ 4;pn 4pn 4WordInfo 4InfoTable 4Com# 4Str# 4Ali# 4Use# 4Col# 4Def# 4Doe# 4Val# 4Var# 4Con# 4Pri# 4prim? 4xtprim? 4colon? 4defered? 4does? 4user? 4con? 4var? 4alias? 4>head 4>name 4threaded>name 4look 4prim>name 4PrimStart 4threaded>xt 4search-name 4xt>threaded 4base-execute 4infile-execute 4outfile-execute 4l@ 4w@ 4/l 4/w 4typewhite 4what's 4action-of 4f.s 4f.rdp 4f>str-rdp 4f>buf-rdp 4f>buf-rdp-try 4push-right 4]] 4postponer1 4[[ 4compile-compile-2literal 4compile-2literal 4compile-compile-literal 4compile-literal 4slurp-fid 4slurp-file 4const-does> 4(const-does>) 4compile-fliterals 4compile-literals 4in-return-stack? 4]L 4sh 4system 4$? 4dmax 4dmin 4?CSP 4!CSP 4CSP 4needs 4locals| 4TO 4definer! 4>definer 4(local) 4(exit-like) 4(until-like) 4(again-like) 4(begin-like) 4(then-like) 4locals-;-hook 4locals-:-hook 4endscope 4adjust-locals-list 4scope 4{ 4old-dpp 4new-locals-wl 4new-locals-map 4new-locals-reveal 4new-locals-find 4some-wlocal 4some-flocal 4some-dlocal 4some-clocal 4locals-types 4lp-offset, 4lp-offset 4create-local 4compile-pushlocal-c 4compile-pushlocal-d 4compile-pushlocal-f 4check-begin 4set-locals-size-list 4list-size 4sub-list? 4common-list 4compile-pushlocal-w 4alignlp-f 4alignlp-w 4locals-dp 4locals-buffer 4locals 4adjust-locals-size 4compile-lp+! 4compile-f@local 4compile-@local 4FMOD 4FTRUNC 4f~ 4f~rel 4f~abs 41/f 4f2/ 4f2* 4pi 4fvariable 4sfnumber 4fs. 4fe. 4f. 4f$ 4-zeros 4zeros 4scratch 4set-precision 4precision 4FLiteral 4fdepth 4fconstant 4f, 4dfloat+ 4sfloat+ 4dfalign 4sfalign 4.words 4hash-cold 4make-hash 4(hashsearch-map) 4hashdouble 4(rehash) 4rehashall 4clearhash 4addall 4inithash 4hash-reveal 4(reveal 4lastlink! 4hash-find 4bucket 4NewFix 4DelFix 4hash-alloc 4hashsearch-map 4HashTable 4HashPop 4HashIndex 4HashPointer 4revealed 4insRule 4hash 4Hashlen 4hashbits 4reserve-mem 4marker 4marker! 4marker, 4included-files-mark 4expect 4span 4search 4blank 4erase 4convert 4[compile] 4C" 4endcase 4endof 4of 4case 4m*/ 4d>s 4.( 4broken-pipe-error 4exception 4next-exception 4errstring 4linked 4include-ffi.h-string 4libffi-present 4ffcall-present 4libtool-flags 4libtool-cc 4libtool-command 4has? 4$has? 4e? 4environment? 4environment-wordlist 4environment 4vocs 4order 4.voc 4.name 4.id 4id. 4seal 4set-order 4get-order 4init-vp 4update-image-order 4Only 4Root 4Forth 4vocsearch 4(localsvocfind) 4locals-wordlist 4(vocfind) 4previous 4also 4>order 4check-maxvp 4Vocabulary 4wordlist 4mappedwordlist 4slowvoc 4definitions 4vp! 4set-current 4get-current 4vp 4maxvp-limit 4maxvp 4%alloc 4%allocate 4%allot 4%align 4%size 4%alignment 4double% 4sfloat% 4dfloat% 4float% 4char% 4cell% 4struct 4end-struct 4field 4create-field 4field, 4dozerofield 4nalign 4naligned 4endtry-iferror 4endtry 4restore 4iferror 4handler-intro, 4(endtry) 4try 4(try) 4nothrow 4first-throw 4store-backtrace 4dodoes: 4dofield: 4dodefer: 4douser: 4dovar: 4docol: 4dovalue: 4docon: 4vlist 4words 4wordlist-words 4cols 4rows 4? 4dump 4.line 4.chars 4.4 4/dump 4.s 4maxdepth-.s 4[WHILE] 4[AGAIN] 4[REPEAT] 4[UNTIL] 4[BEGIN] 4[I] 4[NEXT] 4[FOR] 4[LOOP] 4[+LOOP] 4[?DO] 4[DO] 4(i) 4[ENDIF] 4[THEN] 4[ELSE] 4[IFUNDEF] 4[IFDEF] 4[IF] 4[undefined] 4defined 4[defined] 4?if 4[struct]-voc 4[struct]-search 4scanIF 4>exec 4dummy 4countif 4." 4S" 4abort" 4SLiteral 4CLiteral 4?EXIT 4EXIT 4exit-like 4NEXT 4S+LOOP 4-LOOP 4+LOOP 4LOOP 4loop-like 4FOR 4U-DO 4-DO 4U+DO 4+DO 4?DO 4?do-like 4DO 4?LEAVE 4LEAVE 4DONE 4leave> 4>leave 4clear-leave-stack 4leave-sp 4leave-stack 4leave-stack-size 4REPEAT 4WHILE 4UNTIL 4until-like 4AGAIN 4again-like 4BEGIN 4begin-like 4ELSE 4ENDIF 4THEN 4cs>addr 4then-like 4?DUP-0=-IF 4?DUP-IF 4IF 4AHEAD 4YET 4BUT 4resolve 4>mark 4sys? 4?struc 4other-control-flow 4cs-push-orig 4cs-push-part 4CS-ROLL 4CS-PICK 4cs-item-size 4cs-item? 4non-orig? 4scope? 4do-dest? 4dest? 4orig? 4def? 4scopestart 4do-dest 4dest 4dead-orig 4live-orig 4ASSUME-LIVE 4UNREACHABLE 4backedge-locals 4dead-code 4locals-list 4.included 4.strings 4require 4include 4required 4included 4included1 4add-included-file 4included? 4init-included-files 4sourceline# 4sourcefilename 4image-included-files 4included-files 4open-fpath-file 4open-path-file 4check-path 4open-ofile 4reworkdir 4compact-filename 4skip-..-prefixes 4preserve-root 4del-./s 4del-string 4expandtopic 4remove~+ 4extractpath 4need/ 4pathsep? 4tfile 4ofile 4absolut-path? 4.fpath 4.path 4previous-path 4next-path 4path>string 4fpath= 4path= 4fpath+ 4path+ 4only-path 4clear-path 4also-path 4os-cold 4make-path 4fpath 4+place 4path-allot 4( 4write-line 4bin 4r/o 4r/w 4w/o 4os-boot 4(process-args) 4process-option 4args-evaluate 4args-required 4args-required1 4os-execute-parsing 4next-arg 4shift-args 4script? 4argc 4argv 4pathdirs 4pathstring 4#! 4arg 4cstring>sstring 4set-encoding-fixed-width 4c-size 4c!+? 4string- 4+string 4char- 4xhold 4x@+/string 4-trailing-garbage 4x-width 4x-size 4xc-size 4xc@+ 4xc!+? 4xc@ 4x\string- 4+x/string 4xchar- 4xchar+ 4xkey 4xemit 4license 4include-file 4execute-parsing-file 4execute-parsing-named-file 4read-loop 4line-end-hook 4query 4clear-tibstack 4evaluate 4execute-parsing 4execute-parsing-wrapper 4create-input 4restore-input 4save-input 4pop-file 4push-file 4expand-tib 4new-tib 4file-input 4read-line 4evaluate-input 4terminal-input 4input-start-line 4input-lexeme! 4tib+ 4tib 4loadfilename 4#fill-bytes 4blk 4loadfile 4loadline 4old-input 4max#tib 4#tib 4input-lexeme 4>in 4(restore-input) 4(save-input) 4source-id 4refill 4source 4input-var 4input-method 4accept 4edit-line 4decode 4everyline 4everychar 4insert-char 4ctrlkeys 4(ret) 4(bs) 4(ins) 4recursive 4rehash 4reveal 4check-shadow 4(reveal) 4warnings 4last? 4; 4:noname 4: 4(:noname) 4defstart 4;-hook 4:-hook 4interpret/compile? 4TO 4IS 4[IS] 4 4defer! 4DOES> 4Defers 4defer@ 4Defer 4defer-default 4interpret/compile: 4interpret/compile-struct 4interpret/compile-comp 4interpret/compile-int 4(Field) 42Constant 4AValue 4Value 4AConstant 4Constant 4(Value) 4(Constant) 4AUser 4User 4uallot 42Variable 4AVariable 4Variable 4Create 4Alias 4compile-only 4restrict 4immediate 4lastflags 4ctoggle 4creset 4cset 4," 4mem, 4S, 4] 4[ 4compiler1 4recurse 4POSTPONE 4postpone, 4[COMP'] 4COMP' 4['] 4[(')] 4name>comp 4(compile) 4dodoes, 4(does>2) 4(does>) 4!does 4compile-to-prims, 4peephole-compile, 4basic-block-end 4compile, 4cfa, 4[char] 4char 4char@ 4ALiteral 42Literal 4Literal 4latest 4lastxt 4latestxt 4noname 4noname-header 4nextname 4nextname-header 4nextname-string 4input-stream 4input-stream-header 4header, 4longstring, 4string, 4header 4(header) 4const 4A, 4cfalign 4maxalign 4falign 4align 42, 4, 4c, 4allot 4bye 4boot 4cold 4'cold 4process-args 4bootmessage 4(bootmessage) 4quit 4(DoError) 4.error-frame 4.error-line 4part-type 4mark-end 4mark-start 4umin 4.error-string 4dobacktrace 4DOERROR 4-trailing 4hex. 4dec.r 4dec. 4input-error-data 4>error 4error> 4error-stack 4/error 4max-errors 4(quit) 4prompt 4.status 4'quit 4extend-mem 4free-mem-var 4save-mem 4interpreter1 4interpret 4interpret1 4before-word 4no.extensions 4interpreter-notfound1 4compiler-notfound1 4name 4parse-word 4parse-name 4parser 4parser1 4' 4(') 4find 4sfind 4/does-handler 4does-handler! 4does-code! 4code-address! 4flashc! 4flash! 4>does-code 4>code-address 4body> 4>body 4>head-noprim 4head? 4??? 4(name>intn) 4(name>comp) 4name?int 4name>int 4(name>x) 4((name>)) 4name>string 4(x>int) 4(cfa>int) 4compile-only-error 4ticking-compile-only-error 4flag-sign 4lcount-mask 4restrict-mask 4immediate-mask 4alias-mask 4find-name 4search-wordlist 4(search-wordlist) 4context 4voclink 4current 4lookup 4forth-wordlist 4f83search 4initvoc 4f83find 4wordlist-struct 4wordlist-extend 4wordlist-link 4wordlist-id 4wordlist-map 4wordlist-map-struct 4hash-method 4rehash-method 4reveal-method 4find-method 4\G 4\ 4( 4number 4number? 4snumber? 4s>number 4s>number? 4s>unumber? 4s'>unumber? 4?dnegate 4sign? 4getbase 4bases 4name-too-long? 4name-too-short? 4(name) 4parse 4word 4sword 4(word) 4version-string 4.error 4>stderr 4ErrLink 4u. 4. 4ud. 4d. 4u.r 4.r 4ud.r 4d.r 4#s 4# 4sign 4#>> 4<<# 4#> 4<# 4hold 4pad 4backspaces 4spaces 4space 4cr 4bell 4#lf 4#ff 4#cr 4#del 4#tab 4#bs 4#bell 4#eof 4(S") 4(.") 4key? 4key 4emit 4type 4(key?) 4(key) 4(emit) 4(type) 4infile-id 4outfile-id 4hex 4decimal 4"lit 4clearstacks 4clearstack 4depth 4?stack 4abort 4(abort") 4c(abort") 4throw 4catch 4lp@ 4ud/mod 4s>d 4>number 4accumulate 4digit? 4skip 4scan 4bounds 4place 4roll 4dabs 4off 4on 4here 4dp 4in-dictionary? 4unused 4usable-dictionary-end 4dictionary-end 4A! 4chars 4cfaligned 4maxaligned 4r@ 4NIL 4str< 4string-prefix? 4str= 4locals-size 4max-name-length 4Last 4LastCFA 4dpp 4normal-dp 4state 4dpl 4base 4includefilename 4current-input 4"error 4errorhandler 4backtrace-rp0 4handler 4lp0 4fp0 4rp0 4sp0 4save-task 4prev-task 4next-task 4udp 4main-task 4def#tib 4pad-minsize 4holdend 4holdptr 4holdbuf-end 4holdbuf 4word-pno-size 4chars/block 4l/s 4c/l 4/line 4bl 4float 4cell 4false 4true 4forthstart 4image-header 4tag-offsets 4call2 4set-next-code 4decompile-prim 4forget-dyncode 4finish-code 4compile-prim1 4lib-error 4l! 4sl@ 4ul@ 4w! 4sw@ 4uw@ 4wcall 4lib-sym 4open-lib 4fpick 4f>l 4>l 4lp! 4lp+2 4lp+ 4lp- 4lp+!# 4laddr# 4f@local1 4f@local0 4f@local# 4@local3 4@local2 4@local1 4@local0 4@local# 4faxpy 4v* 4dfaligned 4sfaligned 4dfloats 4sfloats 4fatanh 4facosh 4fasinh 4ftanh 4fcosh 4fsinh 4ftan 4fsqrt 4fsincos 4fsin 4falog 4flog 4flnp1 4fln 4fexpm1 4fexp 4fcos 4fatan2 4fatan 4fasin 4facos 4fabs 4>float 4represent 4fmin 4fmax 4fround 4floor 4floats 4float+ 4ftuck 4fnip 4frot 4fover 4fswap 4fdup 4fdrop 4fnegate 4f**2 4fm*/ 4fm/ 4fm* 4f** 4f/ 4f* 4f- 4f+ 4sf! 4sf@ 4df! 4df@ 4f@ 4f! 4f>s 4f>d 4d>f 4s>f 4f0>= 4f0<= 4f0> 4f0< 4f0<> 4f0= 4f>= 4f<= 4f> 4f< 4f<> 4f= 4cputime 4utime 4newline 4=mkdir 4get-dir 4set-dir 4filename-match 4close-dir 4read-dir 4open-dir 4file-eof? 4file-status 4flush-file 4emit-file 4write-file 4(read-line) 4read-file 4resize-file 4file-size 4reposition-file 4file-position 4rename-file 4delete-file 4create-file 4open-file 4close-file 4call-c 4strsignal 4strerror 4resize 4free 4allocate 4ms 4time&date 4close-pipe 4open-pipe 4getenv 4(system) 4(bye) 4flush-icache 4wcwidth 4form 4stderr 4stdout 4stdin 4key?-file 4key-file 4threading-method 4faligned 4aligned 4(parse-white) 4(hashkey1) 4(tablelfind) 4(hashlfind) 4(listlfind) 4count 4(chars) 4char+ 4cells 4cell+ 42@ 42! 4c! 4c@ 4+! 4! 4lit@ 4@ 42tuck 42nip 42rot 42swap 42over 42dup 42drop 4pick 4?dup 4tuck 4nip 4-rot 4rot 4dup 4swap 4drop 4over 42rdrop 42r@ 42r> 42>r 4rdrop 4r> 4>r 4fp! 4fp@ 4rp! 4rp@ 4sp! 4sp@ 4up! 4useraddr 4within 4du>= 4du<= 4du> 4du< 4du<> 4du= 4d0>= 4d0<= 4d0> 4d0< 4d0<> 4d0= 4d>= 4d<= 4d> 4d< 4d<> 4d= 4u>= 4u<= 4u> 4u< 4u<> 4u= 4>= 4<= 4> 4< 4<> 4= 40>= 40<= 40> 40< 40<> 40= 4lshift 4rshift 4invert 4xor 4or 4and 4d2/ 4d2* 4dnegate 4d- 4d+ 4m+ 4um/mod 4um* 4m* 4sm/rem 4fm/mod 42/ 42* 4*/ 4*/mod 4/mod 4mod 4/ 4* 4abs 4min 4max 41- 41+ 4negate 4- 4under+ 4lit+ 4+ 4lit 4/string 4capscompare 4toupper 4compare 4fill 4cmove> 4cmove 4move 4k 4j 4i' 4i 4(u-do) 4(-do) 4(u+do) 4(+do) 4(?do) 4(do) 4(for) 4(s+loop)-lp+!# 4(s+loop) 4(-loop)-lp+!# 4(-loop) 4(+loop)-lp+!# 4(+loop) 4(loop)-lp+!# 4(loop) 4(next)-lp+!# 4(next) 4?dup-0=-?branch 4?dup-?branch 4?branch-lp+!# 4?branch 4branch 4branch-lp+!# 4does-exec 4lit-perform 4unloop 4;s 4perform 4execute 4call 4noop 44 fpath= s" include \ \ \ \ \ \ \ \ \ \ \ \ \ Create 4mach-file here over 1+ allot place 0 [IF] \ debugging: produce a relocation and a symbol table s" rel-table" r/w create-file throw Constant fd-relocation-table \ debuggging: produce a symbol table s" sym-table" r/w create-file throw Constant fd-symbol-table [THEN] bl word find vocabulary nip 0= [IF] \ if search order stuff is missing assume we are compiling on a gforth \ system and include it. \ We want the files taken from our current gforth installation \ so we don't include relatively to this file require ./../startup.fs [THEN] \ include \ \ \ \ \ \ \ \ \ \ \ \ \ \ 0 [IF] ToDo: - Crossdoc destination ./doc/crossdoc.fd makes no sense when cross.fs is used seperately. jaw - Do we need this char translation with >address and in branchoffset? (>body also affected) jaw [THEN] s" included \ \ \ \ \ \ s" environment? [if] 2drop defined str= [else] \ : \G postpone \ ; immediate 0 [then] 0= [if] : str= ( c-addr1 u1 c-addr2 u2 -- f ) \ gforth compare 0= ; : string-prefix? ( c-addr1 u1 c-addr2 u2 -- f ) \ gforth \G Is @var{c-addr2 u2} a prefix of @var{c-addr1 u1}? tuck 2>r min 2r> str= ; : str< ( c-addr1 u1 c-addr2 u2 -- f ) \ gforth compare 0< ; [then] hex \ \ \ \ \ \ \ Vocabulary 4Cross Vocabulary 4Target Vocabulary 4Ghosts Vocabulary 4Minimal only Forth 4 also 44 Target 47 also 477 also 4777 definitions Forth 4774 : 7T previous Ghosts also Target ; immediate : 7G Ghosts ; immediate : 7H previous Forth also Cross ; immediate forth definitions : 4T previous Ghosts also Target ; immediate : 4G Ghosts ; immediate : 4>cross also Cross definitions previous ; : 4>target also Target definitions previous ; : 4>minimal also Minimal definitions previous ; H 4746 >CROSS \ \ 0 Constant 6gforth-cross-indicator \ : 6defined? bl word find nip ; defined? emit-file defined? toupper and \ [IF] \ : 6\GFORTH ; immediate : 6\ANSI postpone \ ; immediate [ELSE] : \GFORTH postpone \ ; immediate : \ANSI ; immediate [THEN] \ANSI \ANSI 0 \ANSI [IF] : \G postpone \ ; immediate : rdrop postpone r> postpone drop ; immediate : name bl word count ; : bounds over + swap ; : scan >r BEGIN dup WHILE over c@ r@ <> WHILE 1 /string REPEAT THEN rdrop ; : linked here over @ , swap ! ; : alias create , DOES> @ EXECUTE ; : defer ['] noop alias ; : is state @ IF ' >body postpone literal postpone ! ELSE ' >body ! THEN ; immediate : 0>= 0< 0= ; : d<> rot <> -rot <> or ; : toupper dup [char] a [char] z 1+ within IF [char] A [char] a - + THEN ; Variable ebuf : emit-file ( c fd -- ior ) swap ebuf c! ebuf 1 chars rot write-file ; 0a Constant #lf 0d Constant #cr [IFUNDEF] Warnings Variable Warnings [THEN] \ \ Number parsing 23feb93py \ number? number 23feb93py Variable dpl hex Create bases 10 , 2 , A , 100 , \ 16 2 10 character \ !! protect BASE saving wrapper against exceptions : getbase ( addr u -- addr' u' ) over c@ [char] $ - dup 4 u< IF cells bases + @ base ! 1 /string ELSE drop THEN ; : sign? ( addr u -- addr u flag ) over c@ [char] - = dup >r IF 1 /string THEN r> ; : s>unumber? ( addr u -- ud flag ) over [char] ' = IF \ a ' alone is rather unusual :-) drop char+ c@ 0 true EXIT THEN base @ >r dpl on getbase 0. 2swap BEGIN ( d addr len ) dup >r >number dup WHILE \ there are characters left dup r> - WHILE \ the last >number parsed something dup 1- dpl ! over c@ [char] . = WHILE \ the current char is '.' 1 /string REPEAT THEN \ there are unparseable characters left 2drop false ELSE rdrop 2drop true THEN r> base ! ; \ ouch, this is complicated; there must be a simpler way - anton : s>number? ( addr len -- d f ) \ converts string addr len into d, flag indicates success sign? >r s>unumber? 0= IF rdrop false ELSE \ no characters left, all ok r> IF dnegate THEN true THEN ; : s>number ( addr len -- d ) \ don't use this, there is no way to tell success s>number? drop ; : snumber? ( c-addr u -- 0 / n -1 / d 0> ) s>number? 0= IF 2drop false EXIT THEN dpl @ dup 0< IF nip ELSE 1+ THEN ; : (number?) ( string -- string 0 / n -1 / d 0> ) dup >r count snumber? dup if rdrop else r> swap then ; : number ( string -- d ) (number?) ?dup 0= abort" ?" 0< IF s>d THEN ; [THEN] [IFUNDEF] (number?) : 6(number?) number? ; [THEN] \ \GFORTH [IFUNDEF] assert1( \GFORTH also forth definitions require assert.fs previous \GFORTH [THEN] >CROSS hex \ \ \ : 6KB 400 * ; : 6>wordlist ( also execute get-order swap >r 1- set-order r> ; : 6umax 2dup u< IF swap THEN drop ; : 6umin 2dup u> IF swap THEN drop ; : 6string, ( \ dup c, here swap chars dup allot move ; : 6," [char] parse string, ; : 6SetValue ( \G \G \G save-input bl word >r restore-input throw r> count get-current search-wordlist IF drop >r \ get-order get-order get-current swap 1+ set-order r> ['] to execute set-order ELSE Value THEN ; : 6DefaultValue ( \G \G save-input bl word >r restore-input throw r> count get-current search-wordlist IF bl word drop 2drop ELSE Value THEN ; hex \ \ \ \ \ : 6comment? ( 2dup s" str= IF postpone ( ELSE 2dup s" str= IF postpone \ THEN THEN ; : 6X ( \G \G \G bl word count [ ' target >wordlist ] Literal search-wordlist IF state @ IF compile, ELSE execute THEN ELSE -1 ABORT" THEN ; immediate \ \ 0 [IF] This implements debugflags for the cross compiler and the compiled images. It works identical to the has-flags in the environment. The debugflags are defined in a vocabluary. If the word exists and its value is true, the flag is switched on. [THEN] >CROSS Vocabulary 6debugflags \ also 47466 debugflags 4746: get-order over Constant 6debugflags-wl set-order previous 4746 : 6DebugFlag get-current >r debugflags-wl set-current SetValue r> set-current ; : 6Debug? ( \G debugflags-wl search-wordlist IF EXECUTE ELSE false THEN ; : 6D? ( \G \G bl word count debug? ; : 6[d?] \G \G bl word count debugflags-wl search-wordlist IF compile, ELSE -1 ABORT" \ THEN ; immediate : 6symentry ( \G \G [ [IFDEF] fd-symbol-table ] base @ swap hex s>d <# 8 0 DO # LOOP #> fd-symbol-table write-file throw base ! s" :" fd-symbol-table write-file throw fd-symbol-table write-line throw [ [ELSE] ] 2drop drop [ [THEN] ] ; \ decimal Variable 6cross-file-list 0 cross-file-list ! Variable 6target-file-list 0 target-file-list ! Variable 6host-file-list 0 host-file-list ! cross-file-list Value 6file-list 0 Value 6source-desc \ : 6>fl-id 1 cells + ; : 6>fl-name 2 cells + ; Variable 6filelist 0 filelist ! Create 6NoFile ," : 6loadfile ( source-desc ?dup IF >fl-name ELSE NoFile THEN ; : 6sourcefilename ( loadfile count ; \ANSI \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ [IFUNDEF] +place : +place ( adr len adr ) 2dup >r >r dup c@ char+ + swap move r> r> dup c@ rot + swap c! ; [THEN] [IFUNDEF] place : place ( c-addr1 u c-addr2 ) 2dup c! char+ swap move ; [THEN] \ [IFUNDEF] open-fpath-file create sourcepath 1024 chars , 0 , 1024 chars allot \ !! make this dynamic sourcepath value fpath : also-path ( adr len path^ -- ) >r \ len check r@ cell+ @ over + r@ @ u> ABORT" path buffer too small!" \ copy into tuck r@ cell+ dup @ cell+ + swap cmove \ make delimiter 0 r@ cell+ dup @ cell+ + 2 pick + c! 1 + r> cell+ +! ; : only-path ( adr len path^ -- ) dup 0 swap cell+ ! also-path ; : path+ ( path-addr "dir" -- ) \ gforth \G Add the directory @var{dir} to the search path @var{path-addr}. name rot also-path ; : fpath+ ( "dir" ) \ gforth \G Add directory @var{dir} to the Forth search path. fpath path+ ; : path= ( path-addr "dir1|dir2|dir3" ) \ gforth \G Make a complete new search path; the path separator is |. name 2dup bounds ?DO i c@ [char] | = IF 0 i c! THEN LOOP rot only-path ; : fpath= ( "dir1|dir2|dir3" ) \ gforth \G Make a complete new Forth search path; the path separator is |. fpath path= ; : path>string cell+ dup cell+ swap @ ; : next-path ( adr len -- adr2 len2 ) 2dup 0 scan dup 0= IF 2drop 0 -rot 0 -rot EXIT THEN >r 1+ -rot r@ 1- -rot r> - ; : previous-path ( path^ -- ) dup path>string BEGIN tuck dup WHILE repeat ; : .path ( path-addr -- ) \ gforth \G Display the contents of the search path @var{path-addr}. path>string BEGIN next-path dup WHILE type space REPEAT 2drop 2drop ; : .fpath ( -- ) \ gforth \G Display the contents of the Forth search path. fpath .path ; : absolut-path? ( addr u -- flag ) \ gforth \G A path is absolute if it starts with a / or a ~ (~ expansion), \G or if it is in the form ./*, extended regexp: ^[/~]|./, or if \G it has a colon as second character ("C:..."). Paths simply \G containing a / are not absolute! 2dup 2 u> swap 1+ c@ [char] : = and >r \ dos absoulte: c:/.... over c@ [char] / = >r over c@ [char] ~ = >r \ 2dup S" ../" string-prefix? r> or >r \ not catered for in expandtopic S" ./" string-prefix? r> r> r> or or or ; Create ofile 0 c, 255 chars allot Create tfile 0 c, 255 chars allot : pathsep? dup [char] / = swap [char] \ = or ; : need/ ofile dup c@ + c@ pathsep? 0= IF s" /" ofile +place THEN ; : extractpath ( adr len -- adr len2 ) BEGIN dup WHILE 1- 2dup + c@ pathsep? IF EXIT THEN REPEAT ; : remove~+ ( -- ) ofile count s" ~+/" string-prefix? IF ofile count 3 /string ofile place THEN ; : expandtopic ( -- ) \ stack effect correct? - anton \ expands "./" into an absolute name ofile count s" ./" string-prefix? IF ofile count 1 /string tfile place 0 ofile c! sourcefilename extractpath ofile place ofile c@ IF need/ THEN tfile count over c@ pathsep? IF 1 /string THEN ofile +place THEN ; : compact.. ( adr len -- adr2 len2 ) \ deletes phrases like "xy/.." out of our directory name 2dec97jaw over swap BEGIN dup WHILE dup >r '/ scan 2dup s" /../" string-prefix? IF dup r> - >r 4 /string over r> + 4 - swap 2dup + >r move dup r> over - ELSE rdrop dup 1 min /string THEN REPEAT drop over - ; : reworkdir ( -- ) remove~+ ofile count compact.. nip ofile c! ; : open-ofile ( -- fid ior ) \G opens the file whose name is in ofile expandtopic reworkdir ofile count r/o open-file ; : check-path ( adr1 len1 adr2 len2 -- fd 0 | 0 <>0 ) 0 ofile ! >r >r ofile place need/ r> r> ofile +place open-ofile ; : open-path-file ( addr1 u1 path-addr -- wfileid addr2 u2 0 | ior ) \ gforth \G Look in path @var{path-addr} for the file specified by @var{addr1 u1}. \G If found, the resulting path and an open file descriptor \G are returned. If the file is not found, @var{ior} is non-zero. >r 2dup absolut-path? IF rdrop ofile place open-ofile dup 0= IF >r ofile count r> THEN EXIT ELSE r> path>string BEGIN next-path dup WHILE 5 pick 5 pick check-path 0= IF >r 2drop 2drop r> ofile count 0 EXIT ELSE drop THEN REPEAT 2drop 2drop 2drop -38 THEN ; : open-fpath-file ( addr1 u1 -- wfileid addr2 u2 0 | ior ) \ gforth \G Look in the Forth search path for the file specified by @var{addr1 u1}. \G If found, the resulting path and an open file descriptor \G are returned. If the file is not found, @var{ior} is non-zero. fpath open-path-file ; fpath= ~+ [THEN] \ >CROSS : 6add-included-file ( dup >fl-name char+ allocate throw >r file-list @ r@ ! r@ file-list ! r@ >fl-name place r> ; : 6included? ( file-list BEGIN @ dup WHILE >r 2dup r@ >fl-name count str= IF rdrop 2drop true EXIT THEN r> REPEAT 2drop drop false ; false DebugFlag :showincludedfiles : 6included1 ( \ \ \ [d?] IF cr ." 2dup type ." THEN rot close-file throw source-desc >r add-included-file to source-desc sourcefilename ['] included catch r> to source-desc throw ; : 6included ( cross-file-list to file-list open-fpath-file throw included1 ; : 6required ( cross-file-list to file-list open-fpath-file throw \ 2dup included? IF 2drop close-file throw ELSE included1 THEN ; : 6include bl word count included ; : 6require bl word count required ; 0 [IF] also forth definitions previous : included ( adr len -- ) included ; : required ( adr len -- ) required ; : include include ; : require require ; [THEN] >CROSS hex \ \ also 47466 forth 47464 definitions \ \ false DefaultValue 4stack-warn \ false DefaultValue 4create-forward-warn \ previous 4746 >CROSS : 6.dec base @ decimal swap . base ! ; : 6.sourcepos cr sourcefilename type ." sourceline# .dec ; : 6warnhead \G \G .sourcepos ." ; : 6empty? depth IF .sourcepos ." THEN ; stack-warn [IF] : defempty? empty? ; [ELSE] : 6defempty? ; immediate \ [THEN] \ >CROSS \ Variable 6comp-state 0 Constant 6interpreting 1 Constant 6compiling 2 Constant 6resolving 3 Constant 6assembling : 6compiling? comp-state @ compiling = ; : 6pi-undefined -1 ABORT" ; : 6Plugin ( Create \ \ \ \ ['] pi-undefined , \ ['] pi-undefined , \ 8765 , \ DOES> perform ; Plugin 6DummyPlugin : 6'PI ( ' >body dup 2 cells + @ 8765 <> ABORT" ; : 6plugin-of ( dup 'PI 2! ; : 6action-of ( 'PI cell+ ! ; : 6TPA ( \ \ 'PI cell+ POSTPONE literal POSTPONE perform ; immediate Variable 6ppi-temp 0 ppi-temp ! : 6pa: \g ppi-temp @ ABORT" 'PI ppi-temp ! :noname ; : 6;pa \g POSTPONE ; ppi-temp @ ! 0 ppi-temp ! ; immediate Plugin 6dlit, ( \ Plugin 6lit, ( Plugin 6alit, ( Plugin 6branch, ( \ Plugin 6?branch, ( \ Plugin 6branchmark, ( \ Plugin 6?branchmark, ( \ Plugin 6?domark, ( \ Plugin 6branchto, ( \ ' NOOP plugin-of branchto, Plugin 6branchtoresolve, ( \ Plugin 6branchtomark, ( \ Plugin 6colon, ( \ Plugin 6prim, ( \ Plugin 6colonmark, ( \ Plugin 6colon-resolve ( Plugin 6addr-resolve ( Plugin 6doer-resolve ( Plugin 6ncontrols? ( \ Plugin 6if, ( Plugin 6else, ( Plugin 6then, ( Plugin 6ahead, Plugin 6begin, Plugin 6while, Plugin 6until, Plugin 6again, Plugin 6repeat, Plugin 6cs-swap ( Plugin 6case, ( Plugin 6of, ( Plugin 6endof, ( Plugin 6endcase, ( Plugin 6do, ( Plugin 6?do, ( Plugin 6for, ( Plugin 6loop, ( Plugin 6+loop, ( Plugin 6next, ( Plugin 6leave, ( Plugin 6?leave, ( Plugin 6ca>native \ \ \ \ \ \ \ \ Plugin 6doprim, \ Plugin 6docol, \ Plugin 6doer, Plugin 6fini, \ Plugin 6doeshandler, Plugin 6dodoes, Plugin 6colon-start ' noop plugin-of colon-start Plugin 6colon-end ' noop plugin-of colon-end Plugin 6]comp \ ' noop plugin-of ]comp Plugin 6comp[ \ ' noop plugin-of comp[ Plugin 6t>body \ \ >TARGET : 7>body t>body ; \ >CROSS hex \ 4711 Constant 6 4712 Constant 6 4713 Constant 6 4714 Constant 6 4715 Constant 6 \ 1 Constant 6 2 Constant 6 \ : 6set-flag ( over @ or swap ! ; : 6reset-flag ( invert over @ and swap ! ; : 6get-flag ( swap @ and 0<> ; Struct \ cell% field 6>next-ghost \ cell% field 6>magic \ \ cell% field 6>link \ cell% field 6>exec \ \ \ \ cell% field 6>comp \ \ \ \ \ cell% field 6>exec-compile \ \ \ cell% field 6>exec2 cell% field 6>created \ cell% field 6>ghost-xt \ \ cell% field 6>asm-name \ \ cell% field 6>asm-dummyaddr \ \ \ cell% field 6>do:ghost cell% field 6>ghost-flags cell% field 6>ghost-name End-Struct 6ghost-struct Variable 6ghost-list 0 ghost-list ! Variable 6executed-ghost \ \ Variable 6last-header-ghost \ \ \ \ \ \ \ \ Variable 6cross-space-dp Create 6cross-space 250000 allot here 100 allot align Constant 6cross-space-end cross-space cross-space-dp ! Variable 6cross-space-dp-orig : 6cross-space-used cross-space-dp @ cross-space - ; : 6>space ( dp @ cross-space-dp-orig ! cross-space-dp @ dp ! ; : 6space> ( dp @ dup cross-space-dp ! cross-space-end u> ABORT" cross-space-dp-orig @ dp ! ; \ : 6execute-exec execute ; : 6execute-exec2 execute ; : 6execute-exec-compile execute ; : 6NoExec executed-ghost @ >exec2 @ ?dup IF execute-exec2 ELSE true ABORT" THEN ; Defer 6is-forward : 6(ghostheader) ( ghost-list linked , 0 , ['] NoExec , ['] is-forward , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , ; : 6ghostheader ( (ghostheader) 0 , ; ' Ghosts >wordlist Constant 6ghosts-wordlist \ ghosts-wordlist Value 6current-ghosts : 6Make-Ghost ( >space \ get-current >r current-ghosts set-current >in @ Create >in ! \ \ \ r> set-current here (ghostheader) bl word count string, align space> \ dup >ghost-name count current-ghosts search-wordlist 0= ABORT" over >ghost-xt ! DOES> dup executed-ghost ! >exec @ execute-exec ; \ \ Defer 6search-ghosts : 6(search-ghosts) ( current-ghosts search-wordlist ; ' (search-ghosts) IS search-ghosts : 6gsearch ( search-ghosts dup IF swap >body swap THEN ; : 6gfind ( \ \ dup >r count gsearch dup IF rdrop ELSE r> swap THEN ; : 6gdiscover ( >r ghost-list BEGIN @ dup WHILE dup >magic @ <> IF dup >link @ r@ = IF rdrop true EXIT THEN THEN REPEAT drop r> false ; : 6xt>ghost ( gdiscover 0= ABORT" ; : 6Ghost ( >in @ bl word gfind IF nip EXIT THEN drop >in ! Make-Ghost ; : 6>ghostname ( >ghost-name count ; : 6forward? ( >magic @ = ; : 6undefined? ( >magic @ dup = swap = or ; : 6immediate? ( >magic @ = ; Variable 6TWarnings TWarnings on Variable 6Exists-Warnings Exists-Warnings on : 6exists-warning ( TWarnings @ Exists-Warnings @ and IF dup >ghostname warnhead type ." THEN ; \ Variable 6reuse-ghosts reuse-ghosts off : 6HeaderGhost ( >in @ bl word count \ current-ghosts search-wordlist IF >body dup undefined? reuse-ghosts @ or IF nip EXIT ELSE exists-warning THEN drop >in ! ELSE >in ! THEN \ \ \ Make-Ghost ; : 6.ghost ( >ghostname type ; \ : 6findghost ( bl word gfind 0= ABORT" ; : 6[G'] ( \G findghost state @ IF postpone literal THEN ; immediate : 6g>xt ( \G dup undefined? ABORT" >link @ ; : 6g>body ( \G \G g>xt X ; 1 Constant 6