📄 rfc746.txt
字号:
Thus, the way for a program to work on all terminals with %TQBNK, whether they know about sets or not, is: to write a bliniking picture, select some set other than your normal one (set 1 will do), do %GOBNK, output the picture, and reselect set 0. The picture will blink, while you draw things in set 0. To draw more blinking objects, you must reselect set 1 and do another %GOBNK. Simply reselecting set 1 will not work on terminals which don't really support sets, since they don't remember that the blinking objects are "in set 1" and not "in set 0". Erasing a blinking object should make it disappear, on any terminal which implements blinking. On bit matrix terminals, blinking MUST always be done by XORing, so that the non-blinking background is not destroyed. %GOCLS, on a terminal which supports blinking but not sets, should delete all blinking objects. Then, the convention for deleting all blinking objects is to select set 1, do a %GOCLS, and reselect set 0. This has the desired effect on all terminals. This definition of %GOCLS causes no trouble on non-set terminals, since %GOCLS would otherwise be meaningless to them. To make blinking objects stop blinking but remain visible is possible with a %GOVIS on a terminal which supports sets. But in general the only way to do it is to delete them and redraw them as permanent. -8-NWG/RFC# 746 RMS 17-MAR-78 43976The SUPDUP Graphics ExtensionRectangles and XOR Bit matrix terminals have their own operations that display list terminals cannot duplicate. First of all, they have XOR mode, in which objects drawn cancel existing objects when they overlap. In this mode, drawing an object and erasing it are identical operations. All %GOD.. commands act IDENTICALLY to the corresponding %GOE..'s. XOR mode is entered with a %GOXOR and left with a %GOIOR. Display list terminals will ignore both commands. For that reason, the program should continue to distinguish draw commands from erase commands even in XOR mode. %TQXOR indicates a terminal which implements XOR mode. XOR mode, when set, remains set even if graphics mode is left and re-entered. However, it is wise to re-specify it from time to time, in case output is lost. Bit matrix terminals can also draw solid rectangles. They can thus implement the commands %GODRR, %GODRA, %GOERR, and %GOERA. A rectangle is specified by taking the current cursor position to be one corner, and providing the address of the opposite corner. That can be done with either a relative address or an absolute one. The %TQREC bit indicates that the terminal implements rectangle commands. Of course, a sufficiently intelligent bit matrix terminal can provide all the features of a display list terminal by remembering display lists which are redundant with the bit matrix, and using them to update the matrix when a %GOMSR or %GOVIS is done. However, most bit matrix terminals are not expected to go to such lengths. -9-NWG/RFC# 746 RMS 17-MAR-78 43976The SUPDUP Graphics ExtensionHow Several Process Can Draw On One Terminal Without Interfering WithEach Other: If we define "input-stream state" information to be whatever information which can affect the action of any command, other than what is contained in the command, then each of the several processes must have its own set of input-stream state variables. This is accomplished by providing the %GOPSH command. The %GOPSH command saves all such input-stream information, to be restored when graphics mode is exited. If the processes can arrange to output blocks of characters uninterruptibly, they can begin each block with a %GOPSH followed by commands to initialize the input-stream state information as they desire. Each block of graphics output should be ended by a %TDNOP, leaving the terminal in its "normal" state for all the other processes, and at the same time popping the what the %GOPSH pushed. The input-stream state information consists of: The cursor position the state of XOR mode (default is OFF) the selected set (default is 0) the co-ordinate unit in use (physical dots, or virtual) (default is physical) whether output is going to the display screen or to a hardcopy device (default is to the screen) what portion of the screen is in use (see "Using Only Part of the Screen") (default is all) Each unit of input-stream status has a default value for the sake of programs that do not know that the information exists; the exception is the cursor position, since all programs must know that it exists. A %TDINI or %TDRST command should set all of the variables to their default values. The state of the current set (whether it is visible, and where its center is) is not part of the input-stream state information, since it would be hard to say what it would mean if it were. Besides, the current set number is part of the input-stream state information, so different processes can use different sets. The allocation of sets to processes is the server host's own business. -10-NWG/RFC# 746 RMS 17-MAR-78 43976The SUPDUP Graphics ExtensionUsing Only Part of the Screen: It is sometimes desirable to use part of the screen for picture and part for text. Then one may wish to clear the picture without clearing the text. On display list terminals, %GOCLR should do this. On bit matrix terminals, however, %GOCLR can't tell which bits were set by graphics and which by text display. For their sake, the %GOLMT command is provided. This command takes two cursor positions as arguments, specifying a rectangle. It declares that graphics will be limited to that rectangle, so %GOCLR should clear only that part of the screen. %GOLMT need not do anything on a terminal which can remember graphics output as distinct from text output and clear the former selectively, although it would be a desirable feature to process it even on those terminals. %GOLMT can be used to enable one of several processes which divide up the screen among themselves to clear only the picture that it has drawn, on a bit matrix terminal. By using both %GOLMT and distinct sets, it is possible to deal successfully with almost any terminal, since bit matrix terminals will implement %GOLMT and display list terminals almost always implement sets. The %TDCLR command should clear the whole screen, including graphics output, ignoring %GOLMT.Errors: In general, errors in graphics commands should be ignored. Since the output and input streams are not synchronized unless trouble is taken, there is no simple way to report an error well enough for the program that caused it to identify just which command was invalid. So it is better not to try. Errors which are not the fault of any individual command, such as running out of memory for display lists, should also be ignored as much as possible. This does NOT mean completely ignoring the commands that cannot be followed; it means following them as much as possible: moving the cursor, selecting sets, etc. as they specify, so that any subsequent commands which can be executed are executed as intended. -11-NWG/RFC# 746 RMS 17-MAR-78 43976The SUPDUP Graphics ExtensionExtensions: This protocol does not attempt to specify commands for dealing with every imaginable feature which a picture-drawing device can have. Additional features should be left until they are needed and well understood, so that they can be done right.Storage of Graphics Commands in Files: This can certainly be done. Since graphics commands are composed exclusively of the ASCII characters 0 - 177, any file that can hold ASCII text can hold the commands to draw a picture. This is less useful than you might think, however. Any program for editing, in whatever loose sense, a picture, will have its own internal data which determine the relationships between the objects depicted, and control the interpretation of the programs commands, and this data will all be lost in the SUPDUP graphics commands for displaying the picture. Thus, each such program will need to have its own format for storing pictures in files, suitable for that program's internal data structure. Inclusion of actual graphics commands in a file will be useful only when the sole purpose of the file is to be displayed. -12-NWG/RFC# 746 RMS 17-MAR-78 43976The SUPDUP Graphics ExtensionNote: the values of these commands are represented as 8.-bit octalbytes. Arguments to the commands are in lower case inside anglebrackets.The Draw commands are:Value Name Arguments101 %GODLR <p> Draw line relative, from the cursor to <p>.102 %GODPR <p> Draw point relative, at <p>.103 %GODRR <p> Draw rectangle relative, corners at <p> and at the current cursor position.104 %GODCH <string> <0> Display the chars of <string> starting at the current graphics cursor position.121 %GODLA <p> Draw line absolute, from the cursor to <p>. The same effect as %GODLR, but the arg is an absolute address.122 %GODPA <p> Draw point absolute, at <p>.123 %GODRA <p> Draw rectangle absolute, corners at <p> and at the current cursor position.The Erase commands are:Value Name Arguments141 %GOELR <p> Erase line relative, from the cursor to <p>.142 %GOEPR <p> Erase point relative, at <p>.143 %GOERR <p> Erase rectangle relative, corners at <p> and at the current cursor position.144 %GOECH <string> <0> Erase the chars of <string> starting at the current graphics cursor position.161 %GOELA <p> Erase line absolute, from the cursor to <p>.162 %GOEPA <p> Erase point absolute, at <p>.163 %GOERA <p> Erase rectangle absolute, corners at <p> and at the current cursor position. -13-NWG/RFC# 746 RMS 17-MAR-78 43976The SUPDUP Graphics ExtensionThe miscellaneous commands are:Value Name Arguments001 %GOMVR <p> Move cursor to point <p>021 %GOMVA <p> Move cursor to point <p>, absolute address.002 %GOXOR Turn on XOR mode. Bit matrix terminals only.022 %GOIOR Turn off XOR mode.003 %GOSET <n> Select set. <n> is a 1-character set number, 0 - 177.004 %GOMSR <p> Move set origin to <p>. Display list terminals only.024 %GOMSA <p> Move set origin to <p>, absolute address.006 %GOINV Make current set invisible.026 %GOVIS Make current set visible.007 %GOBNK Make current set blink. Canceled by %GOINV or %GOVIS.010 %GOCLR Erase whole screen.030 %GOCLS Erase entire current set (display list terminals).011 %GOPSH Push all input-stream status information, to be restored when graphics mode is exited.012 %GOVIR Start using virtual co-ordinates032 %GOPHY Resume giving co-ordinates in units of dots.013 %GOHRD <n> Divert output to output subdevice <n>. <n>=0 reselects the main display screen.014 %GOGIN <n> Request graphics input (mouse, tablet, etc). <n> is the reply code to include in the answer.015 %GOLMT <p1> <p2> Limits graphics to a subrectangle of the screen. %GOCLR will clear only that area. This is for those who would use the rest for text. -14-NWG/RFC# 746 RMS 17-MAR-78 43976The SUPDUP Graphics ExtensionBits in the SMARTS Variable Related to Graphics:Note: the values of these bits are represented as octal 36.-bit words,with the left and right 18.-bit halfword separated by two commas as inthe normal PDP-10 convention.Name Value Description%TQGRF 000001,,0 terminal understands graphics protocol.%TQSET 000002,,0 terminal supports multiple sets.%TQREC 000004,,0 terminal implements rectangle commands.%TQXOR 000010,,0 terminal implements XOR mode.%TQBNK 000020,,0 terminal implements blinking.%TQVIR 000040,,0 terminal implements virtual co-ordinates.%TQWID 001700,,0 character width, in dots.%TQHGT 076000,,0 character height, in dots.%TRGIN 0,,400000 terminal can provide graphics input.%TRGHC 0,,200000 terminal has a hard-copy device to which output can be diverted. -15-
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -