#! /usr/bin/ueforth
\ Copyright 2021 Bradley D. Nelson
\
\ Licensed under the Apache License, Version 2.0 (the "License");
\ you may not use this file except in compliance with the License.
\ You may obtain a copy of the License at
\
\     http://www.apache.org/licenses/LICENSE-2.0
\
\ Unless required by applicable law or agreed to in writing, software
\ distributed under the License is distributed on an "AS IS" BASIS,
\ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\ See the License for the specific language governing permissions and
\ limitations under the License.

also x11

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

variable width
variable height

create event xevent-size allot
: draw
  width @ . height @ .
  display gc black XSetForeground drop
  display gc black XSetBackground drop
  display window gc 0 0 width @ height @ XFillRectangle drop
  display gc white XSetForeground drop
  display gc white XSetBackground drop
  display window gc 0 0 width @ 2/ height @ 2/ XFillRectangle drop
;
: handle-event
  event xevent-size
  event c@ .
  event c@ Expose = if
    draw
    ." Expose"
  then
  event c@ ButtonPress = if ." ButtonPress" then
  event c@ ButtonRelease = if ." ButtonRelease" then
  event c@ KeyPress = if ." KeyPress" then
  event c@ KeyRelease = if ." KeyRelease" then
  event c@ MotionNotify = if ." MotionNotify" then
  event c@ DestroyNotify = if ." DestroyNotify" then
  event c@ ConfigureNotify = if
    event 3 16 * 8 + + sl@ width !
    event 3 16 * 12 + + sl@ height !
    ." width & height: " width @ . height @ .
    ." ConfigureNotify"
  then
  event c@ MapNotify = if ." MapNotify" then
cr ;
: do-event display event XNextEvent drop handle-event ;
: gg begin draw do-event again ;
gg
