home *** CD-ROM | disk | FTP | other *** search
- ( WINDOW IMPLEMENTATION 21/9/89
- 24/12/89 )
-
- : COND-LOAD
- -FIND
- 0= IF ( NOT LOADED )
- FLOAD
- ELSE
- 2DROP
- BL WORD
- THEN
- ;
-
- FORTH DEFINITIONS
- COND-LOAD OS OSDEFS
- VOCABULARY WIN_MAN IMMEDIATE
- WIN_MAN DEFINITIONS DECIMAL
-
- : W_HANDLE ;
- : W_XPOS 4 + ;
- : W_YPOS 8 + ;
- : W_OLDXPOS 12 + ;
- : W_OLDYPOS 16 + ;
- : W_TYPEX 20 + ;
- : W_TYPEY 24 + ;
- : W_WIDTH 28 + ;
- : W_HEIGHT 32 + ;
- : W_WAEX_MAXX 36 + ;
- : W_WAEX_MINY 40 + ;
- : W_DIDSCROLL 44 + ;
- : W_PRINTSPACE 48 + ;
- : W_TYPESCROLLED 52 + ;
- : W_CREATE 56 + ;
- : W_ROWPTRS 144 + ;
-
- 144 CONSTANT W_DYN_AREA
-
- 0 VARIABLE W_BUF 256 ALLOT
-
- : LS! ( ADDR / OFFSET / VALUE ... ADDR )
- SWAP 3 PICK + ! ;
- : LSC! ( ADDR / OFFSET / VALUE ... ADDR )
- SWAP 3 PICK + C! ;
-
- : L! ( VALUE / ADDR / OFFSET ... ADDR )
- OVER >R + ! R> ;
- : LC! ( VALUE / ADDR / OFFSET ... ADDR )
- OVER >R + C! R> ;
-
- : PARAM_START LATEST PFA 12 + ;
-
- HEX
- 83 CONSTANT WIN_FLAGS
- 139 CONSTANT TIT_BAR_FLAGS
- DECIMAL
-
- 32 CONSTANT PIX_CHAR_HGHT
- PIX_CHAR_HGHT NEGATE CONSTANT NEG_PIX_CHAR_HGHT
- 16 CONSTANT PIX_CHAR_WDTH
- PIX_CHAR_WDTH NEGATE CONSTANT NEG_PIX_CHAR_WDTH
-
- : PR_WIN
- CR
- DUP
- W_CREATE
- ." VIS MIN X " DUP @ . CR
- ." VIS MIN Y " DUP 4 + @ . CR
- ." VIS MAX X " DUP 8 + @ . CR
- ." VIS MAX Y " DUP 12 + @ . CR
- ." SCROLL X " DUP 16 + @ . CR
- ." SCROLL Y " DUP 20 + @ . CR
- ." WINDOW BEHIND " DUP 24 + @ . CR
- ." FLAGS/STATUS " DUP 28 + @ . CR
- ." TITLE FOREGROUND " DUP 32 + C@ . CR
- ." TITLE BACKGROUND " DUP 33 + C@ . CR
- ." WA FOREGROUND " DUP 34 + C@ . CR
- ." WA BACKGROUND " DUP 35 + C@ . CR
- ." SCROLL OUTER COLOUR " DUP 36 + C@ . CR
- ." SCROLL INNER COLOUR " DUP 37 + C@ . CR
- ." HIGHLIGHTED TITLE " DUP 38 + C@ . CR
- ." RESVD " DUP 39 + C@ . CR
- ." WA EX MIN X " DUP 40 + @ . CR
- ." WA EX MIN Y " DUP 44 + @ . CR
- ." WA EX MAX X " DUP 48 + @ . CR
- ." WA EX MAX Y " DUP 52 + @ . CR
- ." TITLE BAR ICON FLAGS " DUP 56 + @ . CR
- ." BUTTON TYPE " DUP 60 + @ . CR
- ." SPRITE AREA CTRL BLOCK " DUP 64 + @ . CR
- ." RESVD " DUP 68 + @ . CR
- ." TITLE POINTER " DUP 72 + @ . CR
- ." TITLE VALIDATION " DUP 76 + @ . CR
- ." TITLE LENGTH " DUP 80 + @ . CR
- ." NUMBER ICONS " 84 + @ . CR
- ." HANDLE " DUP W_HANDLE @ . CR
- ." X POS " DUP W_XPOS @ . CR
- ." Y POS " DUP W_YPOS @ . CR
- ." OLD X POS " DUP W_OLDXPOS @ . CR
- ." OLD Y POS " DUP W_OLDYPOS @ . CR
- ." TYPE X " DUP W_TYPEX @ . CR
- ." TYPE Y " DUP W_TYPEY @ . CR
- ." WIDTH " DUP W_WIDTH @ . CR
- ." HEIGHT " W_HEIGHT @ . CR
- ;
-
- : WIN <BUILDS
- PARAM_START W_CREATE
- 16 0 LS! ( SCROLL X )
- 20 0 LS! ( SCROLL Y )
- 24 -1 LS! ( ON TOP )
- 28 WIN_FLAGS LS! ( FLAGS / STATUS )
- 36 0 LSC! ( SCROLL OUTER COLOUR )
- 37 0 LSC! ( SCROLL INNER COLOUR )
- 39 0 LSC! ( RESVD )
- 40 0 LS! ( WA EX MIN X )
- 52 0 LS! ( WA EX MAX Y )
- 56 TIT_BAR_FLAGS LS!
- 64 0 LS! ( SPRITE AREA CTRL BLK )
- 68 0 LS! ( RESVD )
- 76 -1 LS! ( TITLE STRING VALIDATION )
- 84 0 LS! ( NUM ICONS )
-
- 80 L! ( TITLE STRING LENGTH )
- 72 L! ( TITLE STRING PTR )
- 60 L! ( BUTTON TYPE )
- 38 LC! ( BACKGROUND HIGHLIGHTED )
- 35 LC! ( WORK AREA BACKGROUND )
- 34 LC! ( WORK AREA FOREGROUND )
- 33 LC! ( TITLE BACKGROUND )
- 32 LC! ( TITLE FOREGROUND )
- DROP ( ADDRESS )
-
- DUP ( BOTTOM LEFT Y )
- PARAM_START W_CREATE 4 L! DROP ( VIS MIN Y )
- 3 PICK ( CHAR HEIGHT )
- PIX_CHAR_HGHT *
- DUP ( HEIGHT IN PIXELS )
- NEGATE
- DUP ( WDTH / HGHT / BLX / BLY / PIXHGHT / -PIXHGHT / -PIXHGHT )
- PARAM_START W_WAEX_MINY !
- PARAM_START W_CREATE 44 L! DROP ( WA EX MIN Y )
-
- ( WDTH / HGHT / BLX / BLY / PIXHGHT )
-
- + PARAM_START W_CREATE 12 L! DROP ( VIS MAX Y )
- DUP ( BOTTOM LEFT X )
- PARAM_START W_CREATE ! ( VIS MIN X )
- 3 PICK ( CHAR WIDTH )
- PIX_CHAR_WDTH *
- DUP ( WIDTH IN PIXELS )
- DUP
- PARAM_START W_WAEX_MAXX !
- PARAM_START W_CREATE 48 L! DROP ( WA EX MAX X )
- + PARAM_START W_CREATE 8 L! DROP ( VIS MAX X )
-
- ( STACK = X / Y )
-
- DUP 2 << W_DYN_AREA + ALLOT ( ALLOCATE SPACE FOR DYNAMIC DATA )
- 2DUP ( X / Y / X / Y )
- 0 DO
- HERE OVER ( X / Y / X / HERE / X )
- I * + ( ROW ADDRESS )
- PARAM_START W_DYN_AREA + ( FIRST ROW PTR )
- I 2 << + ! ( ROW ADDR INTO ROW PTR )
- LOOP
- DROP ( X )
- 2DUP
- PARAM_START W_HEIGHT !
- PARAM_START W_WIDTH !
- * HERE SWAP DUP ALLOT ( SPACE FOR WINDOW TEXT )
- ERASE
- 0 PARAM_START
- 2DUP W_XPOS !
- 2DUP W_YPOS !
- 2DUP W_OLDXPOS !
- 2DUP W_OLDYPOS !
- 2DUP W_TYPEX !
- W_TYPEY !
-
- DOES>
- ;
-
- -1 VARIABLE WIN_OP_STR
- -1 VARIABLE WIN_IP_STR
-
- : SET_WIN_OP WIN_OP_STR ! ;
- : SET_WIN_IP WIN_IP_STR ! ;
-
- : WIN_OP WIN_OP_STR @ ;
- : WIN_IP WIN_IP_STR @ ;
-
- : WIN_HANDLE WIN_OP W_HANDLE ;
- : WIN_XPOS WIN_OP W_XPOS ;
- : WIN_YPOS WIN_OP W_YPOS ;
- : WIN_OLDXPOS WIN_OP W_OLDXPOS ;
- : WIN_OLDYPOS WIN_OP W_OLDYPOS ;
- : WIN_TYPEX WIN_OP W_TYPEX ;
- : WIN_TYPEY WIN_OP W_TYPEY ;
- : WIN_WIDTH WIN_OP W_WIDTH ;
- : WIN_HEIGHT WIN_OP W_HEIGHT ;
- : WIN_WAEX_MAXX WIN_OP W_WAEX_MAXX ;
- : WIN_WAEX_MINY WIN_OP W_WAEX_MINY ;
- : WIN_DIDSCROLL WIN_OP W_DIDSCROLL ;
- : WIN_PRINTSPACE WIN_OP W_PRINTSPACE ;
- : WIN_TYPESCROLLED WIN_OP W_TYPESCROLLED ;
- : WIN_ROWPTRS WIN_OP W_ROWPTRS ;
-
- 8 CONSTANT MAX_WINDOWS
-
- 0 VARIABLE WIN_HANDLE_LIST MAX_WINDOWS 4 << ALLOT
- 0 VARIABLE NUM_WINDOWS
-
- : ADD_HANDLE ( PARAM AREA / NEW HANDLE ... )
- WIN_HANDLE_LIST NUM_WINDOWS @ 4 << + DUP >R ! ( STORE HANDLE AT ADDR )
- R> 4 + ! ( STORE PARAM AREA AT ADDR + 4 )
- 1 NUM_WINDOWS +!
- ;
-
- : FIND_PARAM_AREA ( HANDLE ... PARAM AREA [ -1 ON FAILURE ] )
- -1 SWAP
- NUM_WINDOWS @ 0 DO
- DUP ( HANDLE TO FIND )
- WIN_HANDLE_LIST I 4 << + DUP >R @ ( LIST HANDLE )
- = IF ( HANDLES MATCH )
- 2DROP R> 4 + @ ( GET PARAM AREA )
- 0 LEAVE ( ZERO IS DUMMY BECAUSE DROP NEEDED AFTER LOOP )
- ELSE
- R> DROP
- THEN
- LOOP
- DROP
- ;
-
- -1 VARIABLE SAVE_WIN_OP
-
- : SET_TEMP_OP ( HANDLE )
- WIN_OP SAVE_WIN_OP !
- FIND_PARAM_AREA ( FAILURES SHOULD NOT OCCUR !!! )
- DUP -1 = IF
- ." BAD HANDLE "
- THEN
- SET_WIN_OP
- ;
-
- : RESTORE_OP
- SAVE_WIN_OP @ SET_WIN_OP
- ;
-
- : WIN_CREATE
- DUP
- W_CREATE
- Wimp CreateWindow
- 2DUP ADD_HANDLE
- SWAP W_HANDLE !
- ;
-
- : WIN_OPEN
- DUP W_HANDLE @ W_BUF !
- DUP W_CREATE @ W_BUF 4 + !
- DUP W_CREATE 4 + @ W_BUF 8 + !
- DUP W_CREATE 8 + @ W_BUF 12 + !
- W_CREATE 12 + @ W_BUF 16 + !
- 0 W_BUF 20 + !
- 0 W_BUF 24 + !
- -1 W_BUF 28 + !
- W_BUF Wimp OpenWindow
- ;
-
- : WIN_CLOSE
- W_HANDLE @ W_BUF !
- W_BUF Wimp CloseWindow
- ;
-
- : WIN_DELETE
- W_HANDLE
- Wimp DeleteWindow
- ;
-
- : WIN_SET_CARET_POS ( HANDLE )
- -1
- WIN_XPOS @ 1 + PIX_CHAR_WDTH * 12 -
- WIN_YPOS @ 1 + PIX_CHAR_HGHT * NEGATE
- 32
- 0
- Wimp SetCaretPosition
- ;
-
- : WIN_MOVE ( X / Y )
- 4 ROT ROT OS Plot
- ;
-
- : WIN_ORIGIN ( X / Y )
- 29 OS WriteC
- SWAP
- DUP
- OS WriteC
- 8 >>
- OS WriteC
- DUP
- OS WriteC
- 8 >>
- OS WriteC
- ;
-
- : WIN_OUTPUT_LINE ( XOFFSET / ROW )
- 2 << WIN_ROWPTRS + @ ( XOFFSET / ROW ADDR )
- SWAP
- BEGIN
- 2DUP + ( ROW ADDR / XOFFSET / CHAR ADDR )
- C@ DUP IF ( NON ZERO CHAR )
- OS WriteC
- 1 + ( ROW ADDR / XOFFSET + 1 )
- DUP
- WIN_WIDTH @ =
- ELSE
- DROP 1
- THEN
- UNTIL
- 2DROP
- ;
-
- : WIN_PRINT_TEXT ( BUFFER ADDR ... )
- >R R 28 + @
- R 4 + @
- - PIX_CHAR_WDTH / ( [GX0 - X0] / PIX_WDTH )
- R 16 + @
- R 40 + @
- - PIX_CHAR_HGHT / ( [Y1 - GY1] / PIX_HGHT )
- R 40 + @
- R 32 + @
- - PIX_CHAR_HGHT / 2 + ( NO. OF LINES TO PRINT )
- R 28 + @ ( GX0 )
- R 4 + @ PIX_CHAR_WDTH - ( X0 - PIX_WDTH )
- BEGIN
- PIX_CHAR_WDTH + 2DUP
- < ( IS GX0 < X0 )
- UNTIL
- SWAP DROP PIX_CHAR_WDTH - ( XSTART / YSTART / LINES / ORIGX )
- R 40 + @ ( GY1 )
- R> 16 + @ PIX_CHAR_HGHT + ( Y1 + PIX_HGHT )
- BEGIN
- PIX_CHAR_HGHT - 2DUP
- > ( IS GY1 > Y1 )
- UNTIL
- SWAP DROP PIX_CHAR_HGHT + 4 -
- ( XSTART / YSTART / LINES / ORIGX / ORIGY )
- WIN_ORIGIN
- 0 SWAP ( XSTART / YSTART / GRAPHY / LINES )
- BEGIN
- DUP
- WHILE ( LINES != 0 )
- 0 3 PICK WIN_MOVE ( XSTART / YSTART / GRAPHY / LINES )
- ROT DUP WIN_HEIGHT @ < IF ( XSTART / GRAPHY / LINES / YSTART )
- DUP 5 PICK SWAP
- ( XSTART / GRAPHY / LINES / YSTART / XSTART / YSTART )
- WIN_OUTPUT_LINE
- THEN
- 1 + ROT PIX_CHAR_HGHT -
- ( XSTART / LINES / YSTART + 1 / GRAPHY - PIX_HGHT )
- ROT 1 -
- ( XSTART / YSTART + 1 / GRAPHY - PIX_HGHT / LINES - 1 )
- REPEAT
- 2DROP 2DROP
- 0 0 WIN_ORIGIN
- ;
-
- : WIN_UPDATE_WINDOW ( REDRAW BUF ADDR )
- DUP
- Wimp UpdateWindow
- IF
- BEGIN
- WIN_PRINTSPACE @ IF
- 16 OS WriteC
- ELSE
- DUP
- WIN_PRINT_TEXT
- THEN
- DUP
- Wimp GetRectangle
- 0=
- UNTIL
- THEN
- DROP
- ;
-
- : WIN_DRAW_NEW_CHAR
- W_BUF 0 WIN_HANDLE @ LS!
- 16 ROT PIX_CHAR_HGHT * NEGATE DUP >R LS!
- 8 R> PIX_CHAR_HGHT - LS!
- 4 ROT PIX_CHAR_WDTH * DUP >R LS!
- 12 R> PIX_CHAR_WDTH + LS!
- WIN_UPDATE_WINDOW
- ;
-
- : WIN_CLEAR_LINE ( LINE NUMBER [ FROM 0 ]... )
- 2 << WIN_ROWPTRS + @ ( ADDR OF START OF LINE )
- WIN_WIDTH @ 0 DO
- DUP 0 SWAP C!
- 1 +
- LOOP
- DROP
- ;
-
- : WIN_SHIFT_ROW_POINTERS
- WIN_ROWPTRS DUP @ SWAP ( SAVE 1ST LINE POINTER )
- WIN_HEIGHT @ 1 - 0 DO
- DUP I 2 << + ( OLD [WRP0] / WRP0 / WRP0 + I*4 )
- DUP 4 + ( OLD [WRP0] / WRP0 / WRP0 + I*4 / WRP0 + I*4 + 4 )
- @ SWAP ! ( OLD [WRP0] / WRP0 )
- LOOP
- WIN_HEIGHT @ 1 - 2 << + ! ( UPDATE LAST POINTER )
- ;
-
- : WIN_REDRAW_WINDOW ( BUFFER ADDR )
- ( ASSUMES BUFFER HAS HANDLE IN FIRST WORD )
- DUP
- Wimp RedrawWindow
- IF
- BEGIN
- DUP
- WIN_PRINT_TEXT
- DUP
- Wimp GetRectangle
- 0=
- UNTIL
- THEN
- DROP
- ;
-
- : WIN_RFSH_WINDOW
- BEGIN
- 0 W_BUF Wimp Poll
- DUP 1 = IF
- W_BUF WIN_REDRAW_WINDOW
- THEN
- 0=
- UNTIL
- ;
-
-
- : WIN_SAME_LINE ( TYPEX / XPOS / YPOS )
- W_BUF 0 WIN_HANDLE @ LS!
- SWAP PIX_CHAR_HGHT * NEGATE DUP >R 16 SWAP LS!
- 8 R> PIX_CHAR_HGHT - LS!
- SWAP PIX_CHAR_WDTH * 12 SWAP LS!
- SWAP 4 SWAP LS!
- 0 WIN_PRINTSPACE !
- WIN_UPDATE_WINDOW
- ;
-
- : WIN_TYPE_PRINT_SCROLLED ( XPOS / YPOS )
- 0 ROT ROT
- WIN_SAME_LINE
- ;
-
- : WIN_LINE_SPLIT ( TYPEY / YPOS )
- W_BUF 0 WIN_HANDLE @ LS!
- 4 0 LS!
- 12 WIN_WIDTH @ PIX_CHAR_WDTH * LS!
- SWAP PIX_CHAR_HGHT * NEGATE PIX_CHAR_HGHT - 8 SWAP LS!
- SWAP PIX_CHAR_HGHT * NEGATE 16 SWAP LS!
- 0 WIN_PRINTSPACE !
- WIN_UPDATE_WINDOW
- ;
-
- : WIN_UPDATE_LAST_LINE
- WIN_TYPEX @
- WIN_WIDTH @
- WIN_HEIGHT 1 -
- WIN_SAME_LINE
- ;
-
- : WIN_REDRAW_ALL_WINDOW
- WIN_HANDLE @ ( DUP -1 0 0 0 0 Wimp SetCaretPosition )
- 0 WIN_WAEX_MINY @ WIN_WAEX_MAXX @ NEG_PIX_CHAR_HGHT 0
- 4 PICK PIX_CHAR_HGHT +
- Wimp BlockCopy
- W_BUF 0 WIN_HANDLE @ LS!
- 4 0 LS!
- 8 WIN_WAEX_MINY @ DUP >R LS!
- 16 R> PIX_CHAR_HGHT + LS!
- 12 WIN_WAEX_MAXX @ LS!
- Wimp UpdateWindow
- IF
- BEGIN
- 16 OS WriteC ( CLEAR GRAPHICS WINDOW )
- W_BUF Wimp GetRectangle
- 0=
- UNTIL
- THEN
- WIN_RFSH_WINDOW
- ;
-
- : WIN_UPDATE_CURSOR_NEW_LINE
- WIN_YPOS @ DUP WIN_OLDYPOS !
- DUP 1 + DUP WIN_YPOS !
- WIN_HEIGHT @ - IF ( IS YPOS != HEIGHT )
- DROP ( PREVIOUS YPOS )
- EXIT
- THEN
- WIN_YPOS !
- WIN_TYPEX @ 0< IF
- ( NOTHING )
- ELSE ( >= 0 )
- WIN_UPDATE_LAST_LINE
- THEN
- 0 WIN_CLEAR_LINE
- WIN_SHIFT_ROW_POINTERS
- WIN_REDRAW_ALL_WINDOW
- 1 WIN_DIDSCROLL !
- ;
-
- : WIN_UPDATE_CURSOR
- 0 WIN_DIDSCROLL !
- WIN_XPOS @ DUP WIN_OLDXPOS !
- 1 + DUP WIN_XPOS !
- WIN_WIDTH @ - IF ( IS XPOS != WIDTH )
- EXIT
- THEN
- 0 WIN_XPOS !
- WIN_UPDATE_CURSOR_NEW_LINE
- ;
-
- : WIN_LF_CHAR
- WIN_UPDATE_CURSOR_NEW_LINE
- WIN_ROWPTRS WIN_YPOS @ 2 << + @ ( ADDR OF START OF NEW LINE )
- WIN_XPOS @ 0 DO ( FILL NEW LINE WITH SPACES BEFORE CURSOR )
- DUP 32 SWAP C! 1 +
- LOOP
- DROP
- WIN_YPOS @ WIN_OLDYPOS !
- ;
-
- : WIN_CR_CHAR
- 0 WIN_XPOS !
- ;
-
- : WIN_CLEAR_WINDOW
- WIN_HEIGHT @ 0 DO
- I WIN_CLEAR_LINE
- LOOP
- W_BUF 0 WIN_HANDLE @ LS!
- 4 0 LS!
- 8 WIN_WAEX_MINY @ LS!
- 12 WIN_WAEX_MAXX @ LS!
- 16 0 LS!
- 1 WIN_PRINTSPACE !
- WIN_UPDATE_WINDOW
- 0 WIN_XPOS !
- 0 WIN_YPOS !
- 0 WIN_OLDXPOS !
- 0 WIN_OLDYPOS !
- ;
-
- : WIN_CTRL_CHAR
- DUP
- 7 = IF ( IS IT A BEEP )
- OS WriteC
- ELSE
- 12 = IF
- WIN_CLEAR_WINDOW
- THEN
- THEN
- ;
-
- : WIN_DEL_CHAR
- WIN_YPOS @ WIN_XPOS @ 2DUP OR 0= IF ( XPOS AND YPOS = 0 )
- 2DROP
- EXIT
- THEN
- ( YPOS / XPOS )
- 1 - DUP 0< IF
- DROP WIN_WIDTH @ 1 -
- SWAP 1 - SWAP
- THEN
- 2DUP WIN_XPOS ! DUP WIN_YPOS ! WIN_OLDYPOS !
- ( YPOS / XPOS )
- OVER 2 << WIN_ROWPTRS + @ OVER + ( YPOS / XPOS / CHAR ADDR )
- 0 SWAP C!
- SWAP 1 WIN_PRINTSPACE !
- WIN_DRAW_NEW_CHAR
- ;
-
- : WIN_PRINT_ALL_WORD
- WIN_TYPESCROLLED @ IF
- WIN_XPOS @ WIN_YPOS @
- WIN_TYPE_PRINT_SCROLLED
- ELSE
- WIN_TYPEY @ WIN_YPOS @ - 0= IF ( IS TYPEY = YPOS )
- WIN_TYPEX @ WIN_XPOS @ WIN_YPOS @
- WIN_SAME_LINE
- ELSE
- WIN_TYPEY @ WIN_YPOS @
- WIN_LINE_SPLIT
- THEN
- THEN
- ;
-
- HEX
-
- : WIN_TYPE
- DUP 0= IF ( IS COUNT = 0 )
- 2DROP
- EXIT
- THEN
- 0 WIN_TYPESCROLLED !
- WIN_XPOS @ WIN_TYPEX !
- WIN_YPOS @ WIN_TYPEY !
- BEGIN
- SWAP
- ( COUNT / ADDR )
- DUP 1 + SWAP C@ ( COUNT / ADDR+1 / [ADDR] )
- 7F AND
- DUP
- 7F = IF
- DROP
- WIN_DEL_CHAR
- 1 ( USED AS BOOLEAN LATER )
- ELSE
- DUP
- 0D = IF
- DROP
- WIN_CR_CHAR
- 1
- ELSE
- DUP
- 0A = IF
- DROP
- WIN_LF_CHAR
- 1
- ELSE
- DUP
- 20 < IF
- DROP
- WIN_CTRL_CHAR
- 0
- ELSE ( PRINTABLE CHAR )
- WIN_ROWPTRS
- WIN_YPOS @ 2 << + @ ( CHAR / ROW ADDRESS )
- WIN_XPOS @ + C! ( STORE CHAR IN BUFFER )
- WIN_UPDATE_CURSOR
- WIN_XPOS @ 0= IF
- WIN_YPOS @ WIN_OLDYPOS !
- THEN
- 1
- THEN
- THEN
- THEN
- THEN
- IF ( TEST BOOLEAN )
- WIN_DIDSCROLL @ IF
- 1 WIN_TYPESCROLLED !
- THEN
- THEN
- SWAP ( ADDR / COUNT )
- 1 - DUP 0=
- UNTIL
- 2DROP
- WIN_PRINT_ALL_WORD
- ;
-
- DECIMAL
-
- : WIN_OPEN_WINDOW ( BUF ADDR )
- Wimp OpenWindow
- ;
-
- : WIN_KEY ( ASSUMES Wimp_POLL HAS BEEN DONE )
- ( POLL BUFF ADDR / POLL VAL )
- DUP
- 1 - 0= IF
- DROP
- DUP @ ( HANDLE )
- SET_TEMP_OP
- WIN_REDRAW_WINDOW
- RESTORE_OP
- ELSE
- DUP
- 2 - 0= IF
- DROP
- DUP @ ( HANDLE )
- SET_TEMP_OP
- WIN_OPEN_WINDOW
- RESTORE_OP
- ELSE
- 2DROP
- THEN
- THEN
- ;
-
- HEX
-
- : WIN_EMIT
- -1 WIN_TYPEX !
- DUP
- 7F = IF ( DELETE CHAR )
- DROP
- WIN_DEL_CHAR
- ELSE
- DUP
- 0D = IF ( CARRIAGE RETURN )
- DROP
- WIN_CR_CHAR
- ELSE
- DUP
- 0A = IF ( LINEFEED )
- DROP
- WIN_LF_CHAR
- ELSE
- DUP
- 20 < IF ( CONTROL CHAR )
- WIN_CTRL_CHAR
- EXIT
- ELSE ( PRINTABLE CHAR )
- WIN_ROWPTRS
- WIN_YPOS @ 2 << + @ ( CHAR / ROW ADDRESS )
- WIN_XPOS @ + C! ( STORE CHAR IN BUFFER )
- WIN_UPDATE_CURSOR
- 0 WIN_PRINTSPACE !
- WIN_DIDSCROLL @ IF
- WIN_WIDTH @ 1 - WIN_HEIGHT @ 2 -
- ELSE
- WIN_OLDXPOS @ WIN_OLDYPOS @
- THEN
- WIN_DRAW_NEW_CHAR
- WIN_XPOS @ 0= IF
- WIN_YPOS @ WIN_OLDYPOS !
- THEN
- THEN
- THEN
- THEN
- THEN
- ( WIN_HANDLE @ )
- ( WIN_SET_CARET_POS )
- ;
-
- WIN_MAN
- HIDE W_HANDLE
- HIDE W_XPOS
- HIDE W_YPOS
- HIDE W_OLDXPOS
- HIDE W_OLDYPOS
- HIDE W_TYPEX
- HIDE W_TYPEY
- HIDE W_WIDTH
- HIDE W_HEIGHT
- HIDE W_WAEX_MAXX
- HIDE W_WAEX_MINY
- HIDE W_DIDSCROLL
- HIDE W_PRINTSPACE
- HIDE W_TYPESCROLLED
- HIDE W_CREATE
- HIDE W_ROWPTRS
- HIDE W_DYN_AREA
- HIDE W_BUF
- HIDE LS!
- HIDE LSC!
- HIDE L!
- HIDE LC!
- HIDE PARAM_START
- HIDE WIN_FLAGS
- HIDE TIT_BAR_FLAGS
- HIDE PIX_CHAR_HGHT
- HIDE NEG_PIX_CHAR_HGHT
- HIDE PIX_CHAR_WDTH
- HIDE NEG_PIX_CHAR_WDTH
- HIDE WIN_OP_STR
- HIDE WIN_IP_STR
- HIDE WIN_HANDLE
- HIDE WIN_XPOS
- HIDE WIN_YPOS
- HIDE WIN_OLDXPOS
- HIDE WIN_OLDYPOS
- HIDE WIN_TYPEX
- HIDE WIN_TYPEY
- HIDE WIN_WIDTH
- HIDE WIN_HEIGHT
- HIDE WIN_WAEX_MAXX
- HIDE WIN_WAEX_MINY
- HIDE WIN_DIDSCROLL
- HIDE WIN_PRINTSPACE
- HIDE WIN_TYPESCROLLED
- HIDE WIN_ROWPTRS
- HIDE WIN_SET_CARET_POS
- HIDE WIN_MOVE
- HIDE WIN_ORIGIN
- HIDE WIN_OUTPUT_LINE
- HIDE WIN_PRINT_TEXT
- HIDE WIN_DRAW_NEW_CHAR
- HIDE WIN_CLEAR_LINE
- HIDE WIN_SHIFT_ROW_POINTERS
- HIDE WIN_REDRAW_WINDOW
- HIDE WIN_RFSH_WINDOW
- HIDE WIN_UPDATE_WINDOW
- HIDE WIN_SAME_LINE
- HIDE WIN_TYPE_PRINT_SCROLLED
- HIDE WIN_LINE_SPLIT
- HIDE WIN_UPDATE_LAST_LINE
- HIDE WIN_REDRAW_ALL_WINDOW
- HIDE WIN_UPDATE_CURSOR_NEW_LINE
- HIDE WIN_UPDATE_CURSOR
- HIDE WIN_LF_CHAR
- HIDE WIN_CR_CHAR
- HIDE WIN_CLEAR_WINDOW
- HIDE WIN_CTRL_CHAR
- HIDE WIN_DEL_CHAR
- HIDE WIN_PRINT_ALL_WORD
- HIDE WIN_OPEN_WINDOW
- HIDE RESTORE_OP
- HIDE SET_TEMP_OP
- HIDE SAVE_WIN_OP
- HIDE FIND_PARAM_AREA
- HIDE ADD_HANDLE
- HIDE NUM_WINDOWS
- HIDE WIN_HANDLE_LIST
- HIDE MAX_WINDOWS
-
-
- WIN_MAN ASSIGN POLL-ESCAPE TO-DO WIN_KEY
-
- FORTH DEFINITIONS DECIMAL
-
- WIN_MAN
- 0 VARIABLE TITLE
- HEX 314E4957 TITLE ! DECIMAL
- 20 10 200 200 5 12 6 1 12 0 TITLE 4 WIN ROB
- ROB WIN_CREATE
- ROB WIN_OPEN
- ROB SET_WIN_OP
- : TEST 60 0 DO 68 WIN_MAN WIN_EMIT LOOP ;
-