;;; -*- Mode:LISP; Package:TV; Base:10 -*-
;;; Try to adapt to the proliferation of incompatible video boards.

(DEFUN SET-CONSOLE-SIZE (WIDTH HEIGHT)
  (DELAYING-SCREEN-MANAGEMENT
    (WITH-MOUSE-USURPED
      (LOCK-SHEET (MAIN-SCREEN)
	(LOCK-SHEET (WHO-LINE-SCREEN)
	  (WITHOUT-INTERRUPTS
	    (LET ((MS MOUSE-SHEET) (SW SELECTED-WINDOW))
	      (WHEN (SHEET-ME-OR-MY-KID-P MS MAIN-SCREEN) (SETQ MOUSE-SHEET NIL))
	      (SEND WHO-LINE-SCREEN :DEEXPOSE)
	      (SEND MAIN-SCREEN :DEEXPOSE)
	      (SI:CLEAR-SCREEN-BUFFER SYS:IO-SPACE-VIRTUAL-ADDRESS)
	      (SETQ MAIN-SCREEN-HEIGHT HEIGHT)
	      (SEND WHO-LINE-SCREEN :CHANGE-OF-SIZE-OR-MARGINS
				    :WIDTH WIDTH
				    :TOP (- HEIGHT (SHEET-HEIGHT WHO-LINE-SCREEN)))
	      (SEND MAIN-SCREEN :CHANGE-OF-SIZE-OR-MARGINS
				:WIDTH WIDTH
				:HEIGHT (- HEIGHT (SHEET-HEIGHT WHO-LINE-SCREEN)))
	      (COND ((> WIDTH 800.)
		     (SEND WHO-LINE-RUN-STATE-SHEET :CHANGE-OF-SIZE-OR-MARGINS :LEFT 328. :RIGHT 520.)
		     (SEND WHO-LINE-FILE-STATE-SHEET :CHANGE-OF-SIZE-OR-MARGINS :LEFT 520. :RIGHT 1024.)
		     (SEND WHO-LINE-DOCUMENTATION-WINDOW :CHANGE-OF-SIZE-OR-MARGINS :WIDTH 1024.))
		    (T
		     (SEND WHO-LINE-RUN-STATE-SHEET :CHANGE-OF-SIZE-OR-MARGINS :LEFT 328. :RIGHT 480.)
		     (SEND WHO-LINE-FILE-STATE-SHEET :CHANGE-OF-SIZE-OR-MARGINS :LEFT 480. :RIGHT 800.)
		     (SEND WHO-LINE-DOCUMENTATION-WINDOW :CHANGE-OF-SIZE-OR-MARGINS :WIDTH 800.)))
	      (INITIALIZE-RUN-LIGHT-LOCATIONS)
	      (SEND WHO-LINE-SCREEN :EXPOSE)
	      (SEND MAIN-SCREEN :EXPOSE)
	      (MOUSE-SET-SHEET MAIN-SCREEN)
	      (WHEN SW (SEND SW :SELECT)))))))
    (DOLIST (RESOURCE-NAME WINDOW-RESOURCE-NAMES)
      (SI:MAP-RESOURCE 
	#'(LAMBDA (WINDOW &REST IGNORE)
	    (OR (TYPEP WINDOW 'INSTANCE) (FERROR NIL "LOSSAGE"))
	    (IF (TYPEP WINDOW 'TV:BASIC-MENU)
		(LET ((GEO (SEND WINDOW :GEOMETRY)))
		  (DO ((L GEO (CDR L))) ((NULL L))
		    (SETF (CAR L) NIL)))
	      (LET* ((SUPERIOR (SEND WINDOW :SUPERIOR))
		     (BOTTOM (SEND WINDOW :HEIGHT))
		     (SUPHEIGHT (OR (SEND SUPERIOR :SEND-IF-HANDLES :INSIDE-HEIGHT)
				    (SEND SUPERIOR :HEIGHT))))
		(IF (> BOTTOM SUPHEIGHT)
		    (SEND WINDOW :SET-SIZE (SEND WINDOW :WIDTH) SUPHEIGHT)))))
	RESOURCE-NAME)))
  T)

(DEFUN CONFIGURE-CONSOLE (&optional TYPE)
  "Configure windows on primary console for :PORTRAIT, :LANDSCAPE, or :EXPLORER monitors."
  (when (null type)
    (select-processor
      (:explorer
	(setq type :explorer))
      ((:lambda :cadr)
       (ferror nil "must give type explicitly"))))
  (CASE TYPE
    (:PORTRAIT
     (SET-CONSOLE-SIZE 800. 1020.))
    (:LANDSCAPE
     (SET-CONSOLE-SIZE 1024. 796.))
    (:EXPLORER
     (SET-CONSOLE-SIZE 1024. 804.))
    (OTHERWISE
     (FERROR "Unrecognized console type."))))

(DEFUN LANDSCAPE ()
  "Configure all existing (primary) screens and windows for landscape monitor."
  (CONFIGURE-CONSOLE :LANDSCAPE))

(DEFUN PORTRAIT ()
  "Configure all existing (primary) screens and windows for portrait monitor."
  (CONFIGURE-CONSOLE :PORTRAIT))

