############################################################################ # # File: xcompat.icn # # Subject: Procedures for compatibility with 8.10 graphics # # Authors: Gregg M. Townsend and Ralph E. Griswold # # Date: May 26, 1994 # ############################################################################ # # This file is in the public domain. # ############################################################################ # # This file provides compatible implementation of Icon 8.10 functions # that cannot be replaced with 9.0 functions via the simple renaming # done in xnames.icn. The following procedures are provided: # # XBind(w1, w2, ...) # XUnbind() # XWindowLabel(s) # XDrawArc(w,x,y,width,height,a1,a2,...), # XFillArc(w,x,y,width,height,a1,a2,...), # ############################################################################ # # Requires: Version 9 graphics # ############################################################################ procedure XBind(args[]) local window if type(args[2]) == type(args[1]) == "window" then return Couple ! args # two windows: couple them if type(args[1]) == "window" then { # one window: clone it window := pop(args) if /args[1] then pop(args) push(args, window) return Clone ! args } # no windows: create hidden canvas while /args[1] do # remove leading null args pop(args) if type(args[1]) == "window" then # remove possible arg2 window pop(args) while /args[-1] do # remove trailing null args pull(args) put(args, "canvas=hidden") # turn into open() call push(args, "x") push(args, "window") return open ! args end procedure XUnbind(args[]) XUnbind := proc("XUnbind" | "XUncouple" | "Uncouple", 0) return XUnbind ! args end procedure XWindowLabel(win, s) if type(win) == "window" then WAttrib(win, "label=" || s) else WAttrib("label=" || win) return end procedure XDrawArc(args[]) local a1, i static m initial m := -(2 * &pi) / (360 * 64) if type(args[1]) == "window" then a1 := 6 else a1 := 5 every i := a1 to *args by 6 do { args[i] *:= m args[i + 1] *:= m } return DrawArc ! args end procedure XFillArc(args[]) local a1, i static m initial m := -(2 * &pi) / (360 * 64) if type(args[1]) == "window" then a1 := 6 else a1 := 5 every i := a1 to *args by 6 do { args[i] *:= m args[i + 1] *:= m } return FillArc ! args end