W_AREA

Manipulate the processing and display areas

WSupported on Windows
USupported on Unix
VSupported on OpenVMS
NSupported in Synergy .NET
xcall W_AREA(id, function, arguments[, function, arguments][, ...])

Arguments

id

A variable that contains the window ID. The ID must be the same one that was returned by the WP_CREATE function (see WP_CREATE). (n)

function

One or more of the following functions:

WA_ATTR = Alter the processing area’s attributes.

WA_BOX = Draw a box within the processing area.

WA_CHANGE = Change the size and position of the processing area relative to the current values.

WA_COLOR = Set the color of the processing area.

WA_COPY = Copy parameters to or from the display or processing area settings.

WA_CORNER = Position the current window to one corner of the processing area.

WA_FILL = Fill the processing area with characters.

WA_INSERT = Insert a line at the top or bottom of the scrolling area.

WA_SCROLL = Scroll the contents of the processing area.

WA_SET = Set the size and position of the processing area.

arguments

(optional) Any arguments used by the specified function.

Discussion

W_AREA is used to modify the size, position, and contents of a window’s processing and display areas. The initial default processing and display areas are the same size as the window.

If you use ^VARARGARRAY, id is the last declared argument for this routine.

WA_ATTR

WA_ATTR, attributes

WA_ATTR alters the attributes of the processing area’s contents. See Attributes for a description of the standard window attributes.

In this example, we fill the processing area with letters. Then we set the processing area so its upper-left corner is at position (3,5) within the window and its dimensions are 6 rows by 14 columns. The WA_BOX function draws a box around the area. Note that the line-drawing characters are part of the area, which means that if we want to change the attributes of the area’s contents without changing the attributes of the box, we must shrink the area. The WA_CHANGE function moves the upper-left corner of the area by 1 row and 1 column and reduces the horizontal and vertical dimensions by 2. We also change the area’s attributes to reverse video.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 10, 22)
    xcall w_area(wndw_1, WA_FILL, "abcdefghijklmnopqrstuvw")
    xcall w_proc(WP_PLACE, wndw_1, 11, 28)
    xcall w_area(wndw_1, WA_SET, 3, 5, 6, 14, WA_BOX, WA_CHANGE, 1, 1, -2, -2)
    call pause
    xcall w_area(wndw_1, WA_ATTR, ATTR_SET + ATTR_RVRS)
    call pause
    xcall w_exit
    stop
pause, 
    xcall w_updt
    sleep 1
    return
end

WA_BOX

WA_BOX

WA_BOX draws a box at the edge of the processing area. The line-drawing characters of the box are included in the area; they are not outside the area.

In the routine below, we set an area and draw a box around it before setting the next area and boxing it. Notice that we can overlap areas.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 16, 40,
  &       WP_PLACE, wndw_1, 8, 20)
    xcall w_area(wndw_1, WA_SET, 1, 1, 8, 20, WA_BOX)
    xcall w_area(wndw_1, WA_SET, 1, 21, 8, 20, WA_BOX)
    xcall w_area(wndw_1, WA_SET, 9, 1, 8, 20, WA_BOX)
    xcall w_area(wndw_1, WA_SET, 9, 21, 8, 20, WA_BOX)
    xcall w_area(wndw_1, WA_SET, 5, 11, 8, 20, WA_BOX)
    xcall w_exit
    stop
end

WA_CHANGE

WA_CHANGE, row_change, col_change, height_change, width_change

WA_CHANGE makes relative changes to the size of the processing area. Row_change, col_change, height_change, and width_change are numeric expressions that are added to the row, column, height, and width values of the current processing area. If the resulting area doesn’t lie entirely within the window, it is automatically limited so that it does fit inside the window.

The program below fills the entire area with asterisks, then sets the area to a smaller area and boxes it. WA_CHANGE sets a new area that doesn’t retain the attributes of the previous area.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 10, 22)
    xcall w_area(wndw_1, WA_FILL, "*")
    xcall w_proc(WP_PLACE, wndw_1, 11, 28)
    xcall w_area(wndw_1, WA_SET, 3, 5, 6, 14, WA_BOX)
    call pause
    xcall w_area(wndw_1, WA_CHANGE, 1, 1, -2, -2, WA_FILL, " ")
    call pause
    xcall w_exit
    stop
pause,
    xcall w_updt
    sleep 1
    return
end

WA_COLOR

WA_COLOR, color

WA_COLOR resets the color for the processing area to color, which is a numeric expression that specifies a palette number between 1 and 16. See Colors and the color palette for more information about color. For WA_COLOR support in SDK-style projects on Linux, the WNDC environment variable must be set in the environment.

The following routine fills a window with asterisks, then resets the processing area and boxes it. The WA_COLOR function changes the color from the default color to the background and character colors specified in palette number 2.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_PALET, 2, 1, 3)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 10, 22)
    xcall w_area(wndw_1, WA_FILL, "*")
    xcall w_proc(WP_PLACE, wndw_1, 11, 28)
    xcall w_area(wndw_1, WA_SET, 3, 5, 6, 14, WA_BOX)
    call pause
    xcall w_area(wndw_1, WA_COLOR, 2)
    call pause
    xcall w_exit
    stop
pause,
    xcall w_updt
    sleep 1
    return
end

WA_COPY

WA_COPY, option

WA_COPY copies parameters to or from the row, column, height, and width settings of the display or processing area, where option is one of the following:

WAC_WTOP

Copy window area size settings to the processing area settings.

WAC_DTOP

Copy display area size settings to the processing area settings.

WAC_WTOD

Copy window area size settings to the display area settings.

WAC_PTOD

Copy processing area size settings to the display area settings.

This function doesn’t copy one area’s data or attributes to another area, only the size and placement settings. For example, if we use the option WAC_PTOD, the processing area’s settings are copied to the display area’s settings, which means that the display area is changed so that it is the same size and in the same position as the processing area. The option WAC_WTOP copies the window area’s settings to the processing area, which means that the processing area becomes the same size and is placed in the same position as the window area.

In the example below, we split the window into four quadrants plus a center section and fill each area with numbers. Then we put a second window behind the first window and fill it with asterisks. (To put the second window behind the first placed window, we place the second window first.)

Next, we set a processing area of 8 rows by 20 columns and use the option WAC_PTOD to copy those settings to the display area. The effect of this option is that the display area shrinks to the size of the processing area, and consequently, the area displays only one quadrant, plus the “overlapping” number 5s. We repeat this function, setting the display area to be equal to the different processing areas.

At the end of the program, we use the WAC_WTOD option, which copies the window area’s settings to the display area. This action enlarges the display area to its original size so that all of wndw_1 is displayed again.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
    wndw_2              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 16, 40)
    xcall w_area(wndw_1, WA_SET, 1, 1, 8, 20, 
  &       WA_FILL, "1", WA_SET, 1, 21, 8, 20, 
  &       WA_FILL, "2", WA_SET, 9, 1, 8, 20, 
  &       WA_FILL, "3", WA_SET, 9, 21, 8, 20, 
  &       WA_FILL, "4", WA_SET, 5, 11, 8, 20, 
  &       WA_FILL, "5")
    xcall w_proc(WP_CREATE, wndw_2, "window2", 20, 44)
    xcall w_area(wndw_2, WA_FILL, "*")
    xcall w_proc(WP_PLACE, wndw_2, 4, 36, WP_PLACE, wndw_1, 6, 38)
    call pause
    xcall w_area(wndw_1, WA_SET, 1, 1, 8, 20, WA_COPY, WAC_PTOD)
    call pause
    xcall w_area(wndw_1, WA_SET, 1, 21, 8, 20, WA_COPY, WAC_PTOD)
    call pause
    xcall w_area(wndw_1, WA_SET, 9, 1, 8, 20, WA_COPY, WAC_PTOD)
    call pause
    xcall w_area(wndw_1, WA_COPY, WAC_WTOD)
    call pause
    xcall w_exit
    stop
pause,
    xcall w_updt
    sleep 1
    return
end

WA_CORNER

WA_CORNER, option

WA_CORNER moves the current window position to one of the processing area’s corners. This feature is useful, for example, if you want to add text to the top of the processing area. You could specify that you want to add text beginning at the upper-left corner, without having to know the exact row and column position within that processing area.

Option is one of the following:

WAC_ULC

Position to upper left.

WAC_URC

Position to upper right.

WAC_LLC

Position to lower left.

WAC_LRC

Position to lower right.

In the following routine, we create a window and fill it with asterisks. Then we set a smaller processing area and box it. To fill the processing area with another character without wiping out the box, we need to change the processing area and then fill it. Next, we use the WA_CORNER function to position the current window position to the upper-left corner and then the upper-right corner before displaying text. Notice that when you position to the upper-right corner and want to display text, you must move the display position backwards (in this case, eight columns back) to accommodate the text.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 11, 51)
    xcall w_area(wndw_1, WA_FILL, "*")
    xcall w_proc(WP_PLACE, wndw_1, 12, 12)
    xcall w_area(wndw_1, WA_SET, 3, 10, 7, 35, WA_BOX, 
  &       WA_CHANGE, 1, 1, -2, -2, WA_FILL, " ", 
  &       WA_CORNER, WAC_ULC)
    xcall w_disp(wndw_1, "top left")
    xcall w_updt
    xcall w_area(wndw_1, WA_CORNER, WAC_URC)
    xcall w_disp(wndw_1, WD_MOVE, 0, -8, "top right")
    xcall w_exit
    stop
end

WA_FILL

WA_FILL, alpha_string

WA_FILL fills the processing area with a string of characters specified by alpha_string. To clear a processing area, use a blank character as the alpha_string (WA_FILL, “ ”). The characters are written using the window’s current default attributes.

In the following example, we set a processing area and fill it before setting a new processing area and filling it. When we’re done, we clear the processing area that was set.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 16, 40)
    xcall w_proc(WP_PLACE, wndw_1, 8, 20)
    xcall w_area(wndw_1, WA_SET, 1, 1, 8, 20, 
  &       WA_FILL, "1", WA_SET, 1, 21, 8, 20, 
  &       WA_FILL, "2", WA_SET, 9, 1, 8, 20, 
  &       WA_FILL, "3", WA_SET, 9, 21, 8, 20, 
  &       WA_FILL, "4", WA_SET, 5, 11, 8, 20, 
  &       WA_FILL, "5")
    xcall w_updt
    sleep 1
    xcall w_area(wndw_1, WA_FILL, " ")
    xcall w_exit
    stop
end

WA_INSERT

WA_INSERT, placement, line

WA_INSERT scrolls the processing area up or down one line and inserts a line at the bottom or top of the scrolling area, where placement is one of the following:

WAI_TOP

Insert a line at the top of the scrolling area.

WAI_BOTTOM

Insert a line at the bottom of the scrolling area.

Line is an alpha expression whose value is inserted in the scrolling area.

Hardware scrolling only occurs when the WA_INSERT or WA_SCROLL functions are used. Both of these commands do an implicit screen update when hardware scrolling is active.

WA_SCROLL

WA_SCROLL, direction, count

WA_SCROLL scrolls the contents of the processing area. Direction defines the direction of the text’s movement relative to the window, and the value of count indicates how many rows or columns to scroll. When you scroll up or down, count represents the number of rows. When you scroll left or right, count represents the number of columns.

The direction options are listed below:

WAS_UP

Scroll from bottom to top.

WAS_DOWN

Scroll from top to bottom.

WAS_LEFT

Scroll from right to left.

WAS_RIGHT

Scroll from left to right.

Hardware scrolling only occurs when the WA_INSERT or WA_SCROLL functions are used. Both of these commands do an implicit screen update when hardware scrolling is active.

Note

For non-VT-type terminals on Unix, the termcap/terminfo bases are accessed for the sequences to set the scrolling region and scroll up or scroll down. If these sequences are not present, hardware scrolling is not enabled.

In the example below, we use hardware scrolling to scroll an area within an area. Note that after the last WA_SCROLL function, when we’ve returned to the original position, we “lose” the characters that have scrolled out of the area.

.define MAXWINS,        15
.define WNDCHNL,        1
.include "WND:windows.def"
record
    wndw_1              ,i4
proc
    open(WNDCHNL, o, "tt:")
    xcall w_init(0, WNDCHNL, MAXWINS)
    xcall w_proc(WP_CREATE, wndw_1, "window1", 16, 40)
    xcall w_area(wndw_1, WA_FILL, "1234567890")
    xcall w_proc(WP_PLACE, wndw_1, 8, 20)
    call pause
    xcall w_area(wndw_1, WA_SCROLL, WAS_UP, 3)
    call pause
    xcall w_area(wndw_1, WA_SCROLL, WAS_DOWN, 6)
    call pause
    xcall w_area(wndw_1, WA_SCROLL, WAS_UP, 3)
    call pause
    xcall w_exit
    stop
pause,
    xcall w_updt
    sleep 1
    return
end

WA_SET

WA_SET, row, column, height, width

WA_SET defines the processing area. Row, column, height, width are numeric expressions that define the position and size of the processing area. The resulting area must lie entirely within the window; if the area you define exceeds the bounds of the window, the system corrects for it by moving the area or truncating it.

You can have only one processing area at a time. If, for example, you want to set five different processing areas and fill them with different characters, as we do in the example for the function WA_FILL, you must set the first processing area and fill it before resetting the processing area.

See the example for WA_FILL, which sets several processing areas.