This is w.h in view mode; [Download] [Up]
/* Window management
Copyright (C) 1992 Joseph H. Allen
This file is part of JOE (Joe's Own Editor)
JOE is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 1, or (at your option) any later version.
JOE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License along with
JOE; see the file COPYING. If not, write to the Free Software Foundation,
675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef _Iw
#define _Iw 1
#include "config.h"
#include "queue.h"
#include "scrn.h"
#include "kbd.h"
typedef struct watom WATOM;
typedef struct screen SCREEN;
typedef struct window W;
typedef struct base BASE;
struct watom
{
char *context; /* Context name */
void (*disp)(); /* Display window */
void (*follow)(); /* Called to have window follow cursor */
int (*abort)(); /* Common user functions */
int (*rtn)();
int (*type)();
void (*resize)(); /* Called when window changed size */
void (*move)(); /* Called when window moved */
void (*ins)(); /* Called on line insertions */
void (*del)(); /* Called on line deletions */
int what; /* Type of this thing */
};
struct screen
{
SCRN *t; /* Screen data on this screen is output to */
int wind; /* Number of help lines on this screen */
W *topwin; /* Top-most window showing on screen */
W *curwin; /* Window cursor is in */
int w,h; /* Width and height of this screen */
};
struct window
{
LINK(W) link; /* Linked list of windows in order they
appear on the screen */
SCREEN *t; /* Screen this thing is on */
int x,y,w,h; /* Position and size of window */
/* Currently, x=0, w=width of screen. */
/* y== -1 if window is not on screen */
int ny,nh; /* Temporary values for wfit */
int reqh; /* Requested new height or 0 for same */
/* This is an argument for wfit */
int fixed; /* If this is zero, use 'hh'. If not, this
is a fixed size window and this variable
gives its height */
int hh; /* Height window would be on a screen with
1000 lines. When the screen size changes
this is used to calculate the window's
real height */
W *win; /* Window this one operates on */
W *main; /* Main window of this family */
W *orgwin; /* Window where space from this window came */
int curx, cury; /* Cursor position within window */
KBD *kbd; /* Keyboard handler for this window */
WATOM *watom; /* The type of this window */
void *object; /* Object which inherits this */
char *msgt; /* Message at top of window */
char *msgb; /* Message at bottom of window */
char *huh; /* Name of window for context sensitive hlp */
int *notify; /* Address of kill notification flag */
};
/* Anything which goes in window.object must start like this: */
struct base
{
W *parent;
};
/* Minimum text window height */
#define FITHEIGHT 4
/***************/
/* Subroutines */
/***************/
/* int getgrouph(W *);
* Get height of a family of windows
*/
int getgrouph();
/* W *findtopw(W *);
* Find first (top-most) window of a family
*/
W *findtopw();
/* W *findbotw(W *);
* Find last (bottom-most) window a family
*/
W *findbotw();
int demotegroup();
/* W *lastw(SCREEN *t);
* Find last window on screen
*/
W *lastw();
/* Determine number of main windows
*/
int countmain();
/* void wfit(SCREEN *t);
*
* Fit all of the windows onto the screen
*/
void wfit();
/*****************/
/* Main routines */
/*****************/
/* SCREEN *screate(SCRN *);
*
* Create a screen
*/
SCREEN *screate();
/* void sresize(SCREEN *t);
* Screen size changed
*/
void sresize();
/* void chsize(SCREEN *t,int mul,int div)
* Resize windows: each window is multiplied by the fraction mul/div
*/
void chsize();
/* W *wcreate(SCREEN *t,WATOM *watom,W *where,W *target,W *original,int height);
*
* Try to create a window
*
* 't' Is the screen the window is placed on
* 'watom' Type of new window
* 'where' The window is placed after this window, or if 'where'==0, the
* window is placed on the end of the screen
* 'target' The window operates on this window. The window becomes a
* member of 'target's family or starts a new family if
* 'target'==0.
* 'original' Attempt to get 'height' from this window. When the window is
* aborted, the space gets returned to 'original' if it still
* exists. If 'original'==0, the window will force other
* windows to go off of the screen.
* 'height' The height of the window
*
* Returns the new window or returns 0 if there was not enough space to
* create the window and maintain family integrity.
*/
W *wcreate();
/* int wabort(W *w);
*
* Kill a window and it's children
*/
int wabort();
/* int wnext(SCREEN *);
*
* Switch to next window
*/
int wnext();
/* int wprev(SCREEN *);
*
* Switch to previous window
*/
int wprev();
/* int wgrow(W *);
*
* increase size of window. Return 0 for success, -1 for fail.
*/
int wgrow();
/* int wshrink(W *);
*
* Decrease size of window. Returns 0 for success, -1 for fail.
*/
int wshrink();
/* void wshowone(W *);
*
* Show only one window on the screen
*/
void wshowone();
/* void wshowall(SCREEN *);
*
* Show all windows on the screen, including the given one
*/
void wshowall();
/* void wredraw(W *);
*
* Force complete redraw of window
*/
void wredraw();
/* void updall()
*
* Redraw all windows
*/
void updall();
void genfmt();
void gentxt();
int fmtlen();
int fmtpos();
/* void msgnw[t](W *w,char *text);
* Display a message which will be eliminated on the next keypress.
* msgnw displays message on bottom line of window
* msgnwt displays message on top line of window
*/
void msgnw();
void msgnwt();
extern char msgbuf[80]; /* Message composition buffer for msgnw/msgnwt */
void msgout(); /* Output msgnw/msgnwt messages */
/* Common user functions */
int urtn(); /* User hit return */
int utype(); /* User types a character */
int uretyp(); /* Refresh the screen */
int ugroww(); /* Grow current window */
int uexpld(); /* Explode current window or show all windows */
int ushrnk(); /* Shrink current window */
int unextw(); /* Goto next window */
int uprevw(); /* Goto previous window */
void scrdel();
void scrins();
#endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.