Adding xlib stuff.
This commit is contained in:
@ -22,6 +22,7 @@
|
|||||||
: bl 32 ; : nl 10 ;
|
: bl 32 ; : nl 10 ;
|
||||||
: 1+ 1 + ; : 1- 1 - ;
|
: 1+ 1 + ; : 1- 1 - ;
|
||||||
: 2* 2 * ; : 2/ 2 / ;
|
: 2* 2 * ; : 2/ 2 / ;
|
||||||
|
: 4* 4 * ; : 2/ 4 / ;
|
||||||
: +! ( n a -- ) swap over @ + swap ! ;
|
: +! ( n a -- ) swap over @ + swap ! ;
|
||||||
|
|
||||||
( Cells )
|
( Cells )
|
||||||
@ -175,6 +176,10 @@ variable hld
|
|||||||
: see cr ['] : see. ' dup see. space see-loop drop ['] ; see. cr ;
|
: see cr ['] : see. ' dup see. space see-loop drop ['] ; see. cr ;
|
||||||
: words last @ begin dup see. >link dup 0= until drop cr ;
|
: words last @ begin dup see. >link dup 0= until drop cr ;
|
||||||
|
|
||||||
|
( Examine Memory )
|
||||||
|
: dump ( a n -- )
|
||||||
|
cr 0 do i 16 mod 0= if cr then dup i + c@ . loop drop cr ;
|
||||||
|
|
||||||
( Input )
|
( Input )
|
||||||
: accept ( a n -- n ) 0 swap begin 2dup < while
|
: accept ( a n -- n ) 0 swap begin 2dup < while
|
||||||
key dup nl = if 2drop nip exit then
|
key dup nl = if 2drop nip exit then
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
uEForth
|
uEForth
|
||||||
ok
|
ok
|
||||||
39
|
|
||||||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
||||||
|
|||||||
@ -1,16 +1,17 @@
|
|||||||
( Shared Library Handling )
|
( Shared Library Handling )
|
||||||
1 constant RTLD_LAZY
|
1 constant RTLD_LAZY
|
||||||
2 constant RTLD_NOW
|
2 constant RTLD_NOW
|
||||||
: dlopen ( n z -- a ) [ 0 z" dlopen" dlsym aliteral ] call2 ;
|
0 z" dlopen" dlsym constant 'dlopen
|
||||||
|
: dlopen ( z n -- a ) 'dlopen call2 ;
|
||||||
create calls
|
create calls
|
||||||
' call0 , ' call1 , ' call2 , ' call3 , ' call4 ,
|
' call0 , ' call1 , ' call2 , ' call3 , ' call4 , ' call5 ,
|
||||||
' call5 , ' call6 , ' call7 , ' call8 , ' call9 ,
|
' call6 , ' call7 , ' call8 , ' call9 , ' call10 ,
|
||||||
: sofunc ( z n a "name" -- )
|
: sofunc ( z n a "name" -- )
|
||||||
swap >r swap dlsym dup 0= throw create , r> cells calls + @ ,
|
swap >r swap dlsym dup 0= throw create , r> cells calls + @ ,
|
||||||
does> dup @ swap cell+ @ execute ;
|
does> dup @ swap cell+ @ execute ;
|
||||||
: sysfunc ( z n "name" -- ) 0 sofunc ;
|
: sysfunc ( z n "name" -- ) 0 sofunc ;
|
||||||
: shared-library ( z "name" -- )
|
: shared-library ( z "name" -- )
|
||||||
RTLD_NOW dlopen 0= throw create , does> @ sofunc ;
|
RTLD_NOW dlopen dup 0= throw create , does> @ sofunc ;
|
||||||
|
|
||||||
( Major Syscalls )
|
( Major Syscalls )
|
||||||
z" open" 3 sysfunc open
|
z" open" 3 sysfunc open
|
||||||
@ -92,7 +93,7 @@ z" malloc" 1 sysfunc malloc
|
|||||||
z" free" 1 sysfunc sysfree
|
z" free" 1 sysfunc sysfree
|
||||||
z" realloc" 2 sysfunc realloc
|
z" realloc" 2 sysfunc realloc
|
||||||
: allocate ( n -- a ior ) malloc 0ior ;
|
: allocate ( n -- a ior ) malloc 0ior ;
|
||||||
: free ( a -- ior ) sysfree 0 ;
|
: free ( a -- ior ) sysfree drop 0 ;
|
||||||
: resize ( a n -- a ior ) realloc 0ior ;
|
: resize ( a n -- a ior ) realloc 0ior ;
|
||||||
|
|
||||||
( String Handling )
|
( String Handling )
|
||||||
@ -110,11 +111,11 @@ O_RDWR constant r/w
|
|||||||
octal 777 constant 0777 decimal
|
octal 777 constant 0777 decimal
|
||||||
: open-file ( a n fam -- fh ior ) >r s>z r> 0777 open 0<ior ;
|
: open-file ( a n fam -- fh ior ) >r s>z r> 0777 open 0<ior ;
|
||||||
: create-file ( a n fam -- fh ior ) >r s>z r> O_CREAT or 0777 open 0<ior ;
|
: create-file ( a n fam -- fh ior ) >r s>z r> O_CREAT or 0777 open 0<ior ;
|
||||||
: close-file ( fh -- ior ) close 0<ior ;
|
: close-file ( fh -- ior ) close ;
|
||||||
: delete-file ( a n -- ior ) s>z unlink 0<ior ;
|
: delete-file ( a n -- ior ) s>z unlink ;
|
||||||
: rename-file ( a n a n -- ior ) s>z -rot s>z swap rename 0<ior ;
|
: rename-file ( a n a n -- ior ) s>z -rot s>z swap rename ;
|
||||||
: read-file ( a n fh -- n ior ) -rot read 0<ior ;
|
: read-file ( a n fh -- n ior ) -rot read 0<ior ;
|
||||||
: write-file ( a n fh -- ior ) -rot dup >r write r> = 0ior ;
|
: write-file ( a n fh -- ior ) -rot dup >r write r> = 0= ;
|
||||||
: file-position ( fh -- n ior ) dup 0 SEEK_CUR lseek 0<ior ;
|
: file-position ( fh -- n ior ) dup 0 SEEK_CUR lseek 0<ior ;
|
||||||
: file-size ( fh -- n ior )
|
: file-size ( fh -- n ior )
|
||||||
dup 0 SEEK_CUR lseek >r
|
dup 0 SEEK_CUR lseek >r
|
||||||
@ -129,6 +130,9 @@ octal 777 constant 0777 decimal
|
|||||||
swap 2dup >r >r
|
swap 2dup >r >r
|
||||||
rot dup >r read-file throw drop
|
rot dup >r read-file throw drop
|
||||||
r> close-file throw
|
r> close-file throw
|
||||||
r> r> over >r dup . cr evaluate
|
r> r> over >r evaluate
|
||||||
r> free throw ;
|
r> free throw ;
|
||||||
: include ( "name" -- ) bl parse included ;
|
: include ( "name" -- ) bl parse included ;
|
||||||
|
|
||||||
|
( Load Libraries )
|
||||||
|
: xlib s" posix/xlib_test.fs" included ;
|
||||||
|
|||||||
@ -11,12 +11,20 @@
|
|||||||
X("CALL1", OP_CALL1, tos = ((cell_t (*)()) tos)(*sp); --sp) \
|
X("CALL1", OP_CALL1, tos = ((cell_t (*)()) tos)(*sp); --sp) \
|
||||||
X("CALL2", OP_CALL2, tos = ((cell_t (*)()) tos)(sp[-1], *sp); sp -= 2) \
|
X("CALL2", OP_CALL2, tos = ((cell_t (*)()) tos)(sp[-1], *sp); sp -= 2) \
|
||||||
X("CALL3", OP_CALL3, tos = ((cell_t (*)()) tos)(sp[-2], sp[-1], *sp); sp -= 3) \
|
X("CALL3", OP_CALL3, tos = ((cell_t (*)()) tos)(sp[-2], sp[-1], *sp); sp -= 3) \
|
||||||
X("CALL4", OP_CALL4, tos = ((cell_t (*)()) tos)(sp[-3], sp[-2], sp[-1], *sp); sp -= 4) \
|
X("CALL4", OP_CALL4, tos = ((cell_t (*)()) tos)(sp[-3], sp[-2], sp[-1], \
|
||||||
X("CALL5", OP_CALL5, tos = ((cell_t (*)()) tos)(sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 5) \
|
*sp); sp -= 4) \
|
||||||
X("CALL6", OP_CALL6, tos = ((cell_t (*)()) tos)(sp[-5], sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 6) \
|
X("CALL5", OP_CALL5, tos = ((cell_t (*)()) tos)(sp[-4], sp[-3], sp[-2], \
|
||||||
X("CALL7", OP_CALL7, tos = ((cell_t (*)()) tos)(sp[-6], sp[-5], sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 7) \
|
sp[-1], *sp); sp -= 5) \
|
||||||
X("CALL8", OP_CALL8, tos = ((cell_t (*)()) tos)(sp[-7], sp[-6], sp[-5], sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 8) \
|
X("CALL6", OP_CALL6, tos = ((cell_t (*)()) tos)(sp[-5], sp[-4], sp[-3], \
|
||||||
X("CALL9", OP_CALL9, tos = ((cell_t (*)()) tos)(sp[-8], sp[-7], sp[-6], sp[-5], sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 9) \
|
sp[-2], sp[-1], *sp); sp -= 6) \
|
||||||
|
X("CALL7", OP_CALL7, tos = ((cell_t (*)()) tos)(sp[-6], sp[-5], sp[-4], \
|
||||||
|
sp[-3], sp[-2], sp[-1], *sp); sp -= 7) \
|
||||||
|
X("CALL8", OP_CALL8, tos = ((cell_t (*)()) tos)(sp[-7], sp[-6], sp[-5], \
|
||||||
|
sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 8) \
|
||||||
|
X("CALL9", OP_CALL9, tos = ((cell_t (*)()) tos)(sp[-8], sp[-7], sp[-6], \
|
||||||
|
sp[-5], sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 9) \
|
||||||
|
X("CALL10", OP_CALL10, tos = ((cell_t (*)()) tos)(sp[-9], sp[-8], sp[-7], \
|
||||||
|
sp[-6], sp[-5], sp[-4], sp[-3], sp[-2], sp[-1], *sp); sp -= 10) \
|
||||||
|
|
||||||
#include "common/core.h"
|
#include "common/core.h"
|
||||||
|
|
||||||
|
|||||||
95
ueforth/posix/xlib.fs
Normal file
95
ueforth/posix/xlib.fs
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
( Bindings for Xlib )
|
||||||
|
|
||||||
|
z" libX11.so" shared-library xlib
|
||||||
|
|
||||||
|
z" XOpenDisplay" 1 xlib XOpenDisplay ( a -- a )
|
||||||
|
z" XBlackPixel" 2 xlib XBlackPixel ( a n -- n )
|
||||||
|
z" XWhitePixel" 2 xlib XWhitePixel ( a n -- n )
|
||||||
|
z" XDisplayOfScreen" 1 xlib XDisplayOfScreen ( a -- a )
|
||||||
|
z" XScreenOfDisplay" 2 xlib XScreenOfDisplay ( a n -- a )
|
||||||
|
z" XDefaultColormap" 2 xlib XDefaultColormap ( a n -- n )
|
||||||
|
z" XDefaultScreen" 1 xlib XDefaultScreen ( a -- n )
|
||||||
|
z" XRootWindow" 2 xlib XRootWindow ( a n -- n )
|
||||||
|
z" XCheckMaskEvent" 3 xlib XCheckMaskEvent ( a n a -- n )
|
||||||
|
z" XCreateGC" 4 xlib XCreateGC ( a n n a -- a )
|
||||||
|
z" XCreateImage" 10 xlib XCreateImage ( a a n n n a n n n n -- a )
|
||||||
|
z" XCreateSimpleWindow" 9 xlib XCreateSimpleWindow ( a n n n n n n n n -- n )
|
||||||
|
z" XDefaultDepth" 2 xlib XDefaultDepth ( a n -- n )
|
||||||
|
z" XDefaultVisual" 2 xlib XDefaultVisual ( a n -- a )
|
||||||
|
z" XDestroyImage" 1 xlib XDestroyImage ( a -- void )
|
||||||
|
z" XFlush" 1 xlib XFlush ( a -- void )
|
||||||
|
z" XLookupString" 5 xlib XLookupString ( a a n a a -- n )
|
||||||
|
z" XMapWindow" 2 xlib XMapWindow ( a n -- void )
|
||||||
|
z" XNextEvent" 2 xlib XNextEvent ( a a -- void )
|
||||||
|
z" XPutImage" 10 xlib XPutImage ( a n a a n n n n n n -- void )
|
||||||
|
z" XSelectInput" 3 xlib XSelectInput ( a n n -- void )
|
||||||
|
z" XDrawString" 7 xlib XDrawString ( a n n n n a n -- void )
|
||||||
|
|
||||||
|
0 constant NULL
|
||||||
|
32 cells constant xevent-size
|
||||||
|
|
||||||
|
0 constant NoEventMask
|
||||||
|
1 : xmask dup constant 2* ;
|
||||||
|
xmask KeyPressMask
|
||||||
|
xmask KeyReleaseMask
|
||||||
|
xmask ButtonPressMask
|
||||||
|
xmask ButtonReleaseMask
|
||||||
|
xmask EnterWindowMask
|
||||||
|
xmask LeaveWindowMask
|
||||||
|
xmask PointerMotionMask
|
||||||
|
xmask PointerMotionHintMask
|
||||||
|
xmask Button1MotionMask
|
||||||
|
xmask Button2MotionMask
|
||||||
|
xmask Button3MotionMask
|
||||||
|
xmask Button4MotionMask
|
||||||
|
xmask Button5MotionMask
|
||||||
|
xmask ButtonMotionMask
|
||||||
|
xmask KeymapStateMask
|
||||||
|
xmask ExposureMask
|
||||||
|
xmask VisibilityChangeMask
|
||||||
|
xmask StructureNotifyMask
|
||||||
|
xmask ResizeRedirectMask
|
||||||
|
xmask SubstructureNotifyMask
|
||||||
|
xmask SubstructureRedirectMask
|
||||||
|
xmask FocusChangeMask
|
||||||
|
xmask PropertyChangeMask
|
||||||
|
xmask ColormapChangeMask
|
||||||
|
xmask OwnerGrabButtonMask
|
||||||
|
drop
|
||||||
|
|
||||||
|
2 : xevent dup constant 1+ ;
|
||||||
|
xevent KeyPress
|
||||||
|
xevent KeyRelease
|
||||||
|
xevent ButtonPress
|
||||||
|
xevent ButtonRelease
|
||||||
|
xevent MotionNotify
|
||||||
|
xevent EnterNotify
|
||||||
|
xevent LeaveNotify
|
||||||
|
xevent FocusIn
|
||||||
|
xevent FocusOut
|
||||||
|
xevent KeymapNotify
|
||||||
|
xevent Expose
|
||||||
|
xevent GraphicsExpose
|
||||||
|
xevent NoExpose
|
||||||
|
xevent VisibilityNotify
|
||||||
|
xevent CreateNotify
|
||||||
|
xevent DestroyNotify
|
||||||
|
xevent UnmapNotify
|
||||||
|
xevent MapNotify
|
||||||
|
xevent MapRequest
|
||||||
|
xevent ReparentNotify
|
||||||
|
xevent ConfigureNotify
|
||||||
|
xevent ConfigureRequest
|
||||||
|
xevent GravityNotify
|
||||||
|
xevent ResizeRequest
|
||||||
|
xevent CirculateNotify
|
||||||
|
xevent CirculateRequest
|
||||||
|
xevent PropertyNotify
|
||||||
|
xevent SelectionClear
|
||||||
|
xevent SelectionRequest
|
||||||
|
xevent SelectionNotify
|
||||||
|
xevent ColormapNotify
|
||||||
|
xevent ClientMessage
|
||||||
|
xevent MappingNotify
|
||||||
|
xevent GenericEvent
|
||||||
|
drop
|
||||||
24
ueforth/posix/xlib_test.fs
Normal file
24
ueforth/posix/xlib_test.fs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
include posix/xlib.fs
|
||||||
|
|
||||||
|
z" :0" XOpenDisplay constant display
|
||||||
|
display XDefaultScreen constant screen
|
||||||
|
display screen XBlackPixel constant black
|
||||||
|
display screen XWhitePixel constant white
|
||||||
|
display screen XRootWindow constant root-window
|
||||||
|
display root-window 0 0 640 480 0 black white XCreateSimpleWindow constant window
|
||||||
|
display window XMapWindow drop
|
||||||
|
display window 0 NULL XCreateGC constant gc
|
||||||
|
|
||||||
|
ExposureMask
|
||||||
|
ButtonPressMask or
|
||||||
|
ButtonReleaseMask or
|
||||||
|
KeyPressMask or
|
||||||
|
KeyReleaseMask or
|
||||||
|
PointerMotionMask or
|
||||||
|
StructureNotifyMask or constant event-mask
|
||||||
|
display window event-mask XSelectInput drop
|
||||||
|
|
||||||
|
create event xevent-size allot
|
||||||
|
: de event xevent-size dump cr cr ;
|
||||||
|
: 1e display event XNextEvent drop de ;
|
||||||
|
: gg begin 1e again ;
|
||||||
Reference in New Issue
Block a user