|
|
Simple escape sequence tricks This month I thought I would go over a variety of cursor control techniques as well as display enhancements that you can do with simple escape sequences. Many years ago I worked for a company who used no screen driver software at all, they simply did DISPLAY..ACCEPT and let the screen scroll. I thought it looked awful, so I sat down and decided I would learn HP View (known as VPlus today). But with no one to ask questions of, and no real samples to look at, I quickly grew frustrated and proceeded to write my own screen driver. I had read some interesting articles over the years on how to program cursor placement and read the screen and use protected fields, so I ended up making a whole interactive forms design system that stored its screens in a database. I developed a series of macros that will retrieve the form, and display it, and other macros to accept input. It wasnt too bad for a young punk. After that I ended up designing a series of callable routines that would take parameters and do things such as menu bars and drop-down menus and such, also pretty slick, but they all made use of some basic principles and escape sequences, which Ill talk about today. By the way, this is how I beat up a terminal emulator to make sure it works. Since this all works on a terminal, it better work on a terminal emulator. The old HP 2392 terminal manual was a great source of information for this stuff. So what I thought I would do is give you a list of the escape sequences that I use (or some of them anyway), with a description, and then some examples with macros. The escape sequences are in Figure 1. The following is the main
macro that I use to implement the stuff in Figure 1: $DEFINE %TERMPOS= COMPUTE T-ROW = !1 - 1 COMPUTE T-COL = !2 - 1 DISPLAY %33 "&a" T-COL "c" T-ROW "R" !3 NO ADVANCING# Figure 1
* Send the cursor home and clear the display.
01 HOME-N-CLEAR.
05 PIC X VALUE %33.
05 PIC X VALUE 'h'.
05 PIC X VALUE %33.
05 PIC X VALUE 'J'.
*
* Send the cursor to an absolute position on the screen.
01 START-ADDRESS.
03 PIC X VALUE %33.
03 PIC X(02) VALUE '&a'.
03 START-COL PIC 99 VALUE ZEROES.
03 PIC X VALUE 'c'.
03 START-ROW PIC 99 VALUE ZEROES.
03 PIC X VALUE 'R'.
*
* Send the cursor to the upper leftmost corner of the display.
01 UP-HOME.
03 PIC X VALUE %33.
03 PIC X VALUE 'h'.
*
* Send the cursor to the end of display memory.
01 DOWN-HOME.
03 PIC X VALUE %33.
03 PIC X VALUE 'F'.
*
* Move the cursor up one line.
01 UP-LINE.
03 PIC X VALUE %33.
03 PIC X VALUE 'A'.
*
* move the cursor down one line.
01 DOWN-LINE.
03 PIC X VALUE %33.
03 PIC X VALUE 'B'.
*
* Move the cursor one character to the right (not a space).
01 GO-RIGHT.
03 PIC X VALUE %33.
03 PIC X VALUE 'C'.
*
* Move the cursor one character to the left (not a backspace).
01 GO-LEFT.
03 PIC X VALUE %33.
03 PIC X VALUE 'D'.
*
* Scroll the display down one line.
01 SCROLL-DOWN.
03 PIC X VALUE %33.
03 PIC X VALUE 'T'.
*
* Scroll the display up one line.
01 SCROLL-UP.
03 PIC X VALUE %33.
03 PIC X VALUE 'S'.
*
* Insert a line.
01 INS-LINE.
03 PIC X VALUE %33.
03 PIC X VALUE 'L'.
*
* Turn on Insert Character.
01 INS-CHAR.
03 PIC X VALUE %33.
03 PIC X VALUE 'Q'.
*
* Turn off Insert Character.
01 INS-OFF.
03 PIC X VALUE %33.
03 PIC X VALUE 'R'.
*
* Delete a line.
01 DEL-LINE.
03 PIC X VALUE %33.
03 PIC X VALUE 'M'.
*
* Delete a charcter from the current cursor position.
01 DEL-CHAR.
03 PIC X VALUE %33.
03 PIC X VALUE 'P'.
*
* Turn on inverse video.
01 INVERSE.
03 PIC X VALUE %33.
03 PIC X(3) VALUE '&dB'.
*
* Turn on half bright inverse video.
01 INV-HALF.
03 PIC X VALUE %33.
03 PIC X(3) VALUE '&dJ'.
*
* Begin Underline.
01 UNDER-LINE.
03 PIC X VALUE %33.
03 PIC X(3) VALUE '&dD'.
*
* Turn on Half Brite video.
01 HALF-BRITE.
03 PIC X VALUE %33.
03 PIC X(3) VALUE '&dH'.
*
* Turn off any display enahncement started with &d.
01 EHL.
03 PIC X VALUE %33.
03 PIC X(3) VALUE '&d@'.
*
* Clear the line from the cursor to the end of the screen.
01 CLEAR-LINE.
03 PIC X VALUE %33.
03 PIC X VALUE 'K'.
*
* Clear the display from the cursor to the end of display memory.
01 KLEAR.
03 PIC X VALUE %33.
03 PIC X VALUE 'J'.
*
* Turn on memory lock at the current cursor position.
01 MEM-ON.
03 PIC X VALUE %33.
03 PIC X VALUE 'l'.
*
* Turn off memory lock (doesn't matter where the cursor is).
01 MEM-OFF.
03 PIC X VALUE %33.
03 PIC X VALUE 'm'.
*
* Perform a Next Page.
01 NEXT-PAGE.
03 PIC X VALUE %33.
03 PIC X VALUE 'U'.
*
* Perform a Previous Page.
01 PREV-PAGE.
03 PIC X VALUE %33.
03 PIC X VALUE 'V'.
*
* Turn echo off, not the same as the FCONTROL one.
01 ECHO-OFF.
03 PIC X VALUE %33.
03 PIC X(3) VALUE '&dS'.
*
* Enable Transmit Functions (this is so you can tell when a cursor key is
* pressed, and supress the actual action.
01 XMIT-FUNC-ON.
03 PIC X VALUE %33.
03 PIC X(4) VALUE '&s1A'.
*
* Disable Transmit Functions (default setting).
01 XMIT-FUNC-OFF.
03 PIC X VALUE %33.
03 PIC X(4) VALUE '&s0A'.
*
* Turn the screen display off, this is good to hide what you are doing, gives
* a physchological feeling of instant display.
01 SCREEN-OFF.
03 PIC X VALUE %33.
03 PIC X(5) VALUE '&w13F'.
*
* Turn the screen display on (default setting).
01 SCREEN-ON.
03 PIC X VALUE %33.
03 PIC X(5) VALUE '&w12F'.
*
* Read the line at the current cursor position, can be used for a PSCREEN
* type function.
01 READ-LINE.
03 PIC X VALUE %33.
03 PIC X VALUE 'd'.
*
* Turn Line drawing on and off, display an escape character, variables for my
* ad-hoc display macros.
01 G-ON PIC X VALUE %16.
01 G-OFF PIC X VALUE %17.
01 ESC PIC X VALUE %33.
01 T-ROW PIC 99 VALUE ZEROES.
01 T-COL PIC 99 VALUE ZEROES.
Let me explain one thing
that may not be obvious. When you look at a terminal and get the
screen coordinates, they are numbered from 1,1 at the upper left
corner. However, all the escape sequences to do cursor positioning
number from 0,0. So I decided to make the macro adjust for what the
screen says and avoid confusion. So here are some examples of what you might try: %TERMPOS(5#,1#,KLEAR MEM-ON#). This is just a simple example of the uses, but once you have built up a small library of predefined variables and macros, you will be able to do all sorts of ad-hoc screens with relative ease. Shawn Gordon, whose S.M. Gordon & Associates firm supplies HP 3000 utilities, has worked with 3000s since 1983.
Copyright The 3000 NewsWire. All rights reserved. |
||||||||||||