Annotation of researchv10dc/630/man/src/p_man/man3/moveto.3l, revision 1.1.1.1

1.1       root        1: .TH MOVETO 3L "630 MTG"
                      2: .SH NAME
                      3: moveto, sPtCurrent \- change and return the value current screen point
                      4: .SH SYNOPSIS
                      5: .ft B
                      6: #include <dmd.h>
                      7: .sp
                      8: void moveto (p)
                      9: .br
                     10: Point p;
                     11: .sp
                     12: \f3Point sPtCurrent ( )\f1
                     13: .sp
                     14: \f3extern int didmoveto;\f1
                     15: .ft R
                     16: .SH DESCRIPTION
                     17: These functions can be used to change or return the value 
                     18: of the current screen point. The current screen point is simply a place holder
                     19: that applications can use to manage current screen position. 
                     20: For example, the \fIlputchar\fR function uses 
                     21: .I sPtCurrent
                     22: to find the point at which to print the next character and uses
                     23: .I moveto
                     24: to update the current screen point after it prints the character.
                     25: 
                     26: The current screen point is similar to but distinct
                     27: from \fIPtCurrent\fR (see \fIglobals\fR(3R)). The primary difference is that
                     28: the current screen point is stored in screen coordinates, and
                     29: the
                     30: \fIPtCurrent\fR is stored in window coordinates (see \fItransform\fR(3R)). 
                     31: This makes the 
                     32: current screen point easier to deal with for applications that want to 
                     33: work completely in screen coordinates.
                     34: 
                     35: The \fImoveto\fR function will move the current screen
                     36: point to the point \fIp\fR. The \fIsPtCurrent\fR
                     37: function returns the value of the current screen point.
                     38: 
                     39: The current screen point is actually stored in the variable
                     40: P->scurpt. It is stored as an offset from Drect.origin
                     41: (i.e., sub[p, Drect.origin]). Note that this refers only to internal
                     42: representation. The functions \fImoveto\fR and \fIsPtCurrent\fR work in actual
                     43: screen coordinates and translate the offset on each call.
                     44: 
                     45: Storing the current screen point as
                     46: an offset from Drect.origin has the advantage that successive calls to
                     47: \fIsPtCurrent\fR will return the proper position within a window even if the
                     48: window was moved between calls.
                     49: 
                     50: .bp
                     51: Reshapes of a window between successive calls to \fIsPtCurrent\fR are handled
                     52: as follows. If the offset of the current screen point from Drect.origin is 
                     53: still within the window
                     54: after the reshape, \fIsPtCurrent\fR will
                     55: return the current screen point within the new window at the same offset from 
                     56: Drect.origin that existed in the old window. If the offset from Drect.origin 
                     57: is no longer within the window (i.e., the window was reshaped smaller),
                     58: \fIsPtCurrent\fR will return Drect.origin as the current screen point.
                     59: If an application wants to handle reshape more
                     60: elegantly, it can use the following code fragment after each call to the
                     61: \fIwait\fR function. This
                     62: code fragment will cause the current screen point to move to the upper
                     63: left-hand corner of the window after a reshape.
                     64: .PP
                     65: .RS 3
                     66: .ft CM
                     67: .nf
                     68: if(P->state&RESHAPED) {
                     69:        if(!(P->state&MOVED))
                     70:                moveto(Drect.origin);
                     71:        P->state &= ~(MOVED|RESHAPED);
                     72: }
                     73: .fi
                     74: .ft R
                     75: .RE
                     76: .PP
                     77: The current screen point must be initialized with the
                     78: \fImoveto\fR function before \fIsPtCurrent\fR is called the first time.
                     79: Library routines which use this facility can check if initialization is
                     80: necessary by looking at the global variable \fIdidmoveto\fR each time they
                     81: are called. This variable will be set to 0 if \fImoveto\fR has not
                     82: been called. An example below shows how the \fIdidmoveto\fR
                     83: variable is used to determine if initialization is necessary within a
                     84: simple putchar function.
                     85: .SH EXAMPLES
                     86: There are two types of users of the current screen point. The first
                     87: type of user is calling existent library routines such as \fIlprintf\fR
                     88: and \fIlputchar\fR, and is only interested in using the
                     89: \fImoveto\fR function to control the library routines.
                     90: The following code fragment illustrates how \fImoveto\fR can be used
                     91: with \fIlprintf\fR to display a prompt at the bottom of the window.
                     92: .PP
                     93: .RS 3
                     94: .ft CM
                     95: .nf
                     96: .S -2
                     97: #include <dmd.h>
                     98: #include <font.h>
                     99: 
                    100: extern Point fPt();
                    101: Point p;
                    102: 
                    103: p = fPt( Drect.origin.x,
                    104:     Drect.corner.y - FONTHEIGHT(largefont) );
                    105: moveto(p);
                    106: lprintf("Choose an Option> ");
                    107: .fi
                    108: .ft R
                    109: .S +2
                    110: .RE
                    111: .bp
                    112: .PP
                    113: The second type of user of the current screen point is writing
                    114: new library routines which use this facility. The following example
                    115: shows how to accomplish this by implementing a simple putchar routine.
                    116: In the example below, didmoveto is checked first
                    117: to see if initialization of the current point is required. Then the code 
                    118: obtains
                    119: the value of the current screen point, prints a character, and updates
                    120: the current screen point for the next call to myputchar.
                    121: .PP
                    122: .RS 3
                    123: .ft CM
                    124: .nf
                    125: myputchar(c)
                    126: char c;
                    127: {
                    128:        extern int didmoveto;
                    129:        extern Point sPtCurrent();
                    130:        extern Point string();
                    131:        char s[2];
                    132:        Point curpos;
                    133: 
                    134:        s[0] = c;
                    135:        s[1] = '\e0';
                    136: 
                    137:        if(!didmoveto)
                    138:                 moveto(Drect.origin);
                    139: 
                    140:        curpos = sPtCurrent();
                    141:        curpos = string(&largefont, s, &display,
                    142:                        curpos, F_STORE);
                    143:        moveto(curpos);
                    144: 
                    145: }
                    146: .fi
                    147: .ft R
                    148: .RE
                    149: .SH SEE ALSO
                    150: globals(3R), jmove(3R), lprintf(3L), lputchar(3L),
                    151: resources(3R), structures(3R), transform(3R/3L).
                    152: .SH BUGS
                    153: The \fBdidmoveto\fR initialization scheme will not work with
                    154: shared text applications because \fIdidmoveto\fR is a global variable shared
                    155: by all invocations of a shared text application. Shared text applications
                    156: must explicitly initialize the current screen point by calling
                    157: \fImoveto\fR.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.