Annotation of researchv10dc/630/man/src/p_man/man3/cache.3l, revision 1.1

1.1     ! root        1: .ds ZZ APPLICATION DEVELOPMENT PACKAGE
        !             2: .TH CACHE 3L
        !             3: .XE "cache()"
        !             4: .SH NAME
        !             5: cache \- put the calling application into the Application cache
        !             6: .SH SYNOPSIS
        !             7: .ft B
        !             8: #include <dmd.h>
        !             9: .br
        !            10: #include <object.h>
        !            11: .PP
        !            12: .ft B
        !            13: int cache (s, f)
        !            14: .br
        !            15: char \(**s;
        !            16: .br
        !            17: \f3int f;\f1
        !            18: .ft R
        !            19: 
        !            20: .SH DESCRIPTION
        !            21: An application can put itself into the terminal's Application cache by calling
        !            22: the function
        !            23: .IR cache .
        !            24: When this has been done, the window the application is running in can be
        !            25: deleted by the user or the application can exit, but the 
        !            26: application itself is still resident in the
        !            27: terminal's memory.
        !            28: .PP
        !            29: There are two ways to bring up a cached application. If the \fImenu name\fR of the
        !            30: application shows up under the \fBMore\fR menu, the user can select
        !            31: it  and
        !            32: open a new window to run the application. Otherwise, an
        !            33: application can be booted from a 
        !            34: window running a 630 terminal emulator by 
        !            35: calling \fIdmdld(1)\fR with the \fItag name\fR of the application.
        !            36: The cached application then replaces the terminal emulator in the window.
        !            37: .PP
        !            38: The \fItag name\fR of a cached application is the filename it is downloaded under
        !            39: (i.e. \fIargv[0]\fR) stripped from any pathname prefix. For example the tag
        !            40: name of \fI$HOME/dmda.out\fR is \fIdmda.out\fR. This name is used to
        !            41: uniquely identify a cached application.
        !            42: .PP
        !            43: The \fImenu name\fR of a cached application is the name as appeared on the
        !            44: \fBMore\fR menu. If the argument \fIs\fR is a null pointer, the default menu
        !            45: name is the same as the tag name. If \fIs\fR is initialized
        !            46: to some character string, that string will be the menu name of the cached
        !            47: application.
        !            48: .PP
        !            49: The programmer can also specify how an application is cached and how it
        !            50: will be subsequently invoked through the bit-vector argument \fIf\fR by
        !            51: OR'ing these constant flags:
        !            52: .IP \fBA_SHARED\fR
        !            53: The application is cached as a shared application. A shared application
        !            54: can have multiple copies of it running at the same time. All initialized
        !            55: or un-initialized global and static variables of the application are also 
        !            56: shared between all the running copies, so shared applications must be
        !            57: written accordingly. By definition the \fBA_SHARED\fR flag forces
        !            58: the \fBA_DATA\fR and \fBA_BSS\fR flags.
        !            59: .IP \fBA_NO_SHOW\fR 
        !            60: The application does not want to advertise itself through the \fBMore\fR
        !            61: menu. Usually this type of application requires host support to run, thus
        !            62: locally opening a window through the \fBMore\fR menu
        !            63: is not sufficient. In this case, it is preferrable
        !            64: to let the host side boot the terminal side
        !            65: (i.e., the cached application) with \fIdmdld(1)\fR. 
        !            66: .IP \fBA_BSS\fR
        !            67: The application does not want its un-initialized global and static variables
        !            68: (\fI.bss\fR section) to be reset to null for subsequent invocations.
        !            69: To conform with the default initialization rule of the C language which
        !            70: states that un-initialized global and static variables are guaranteed to
        !            71: be set to zero, the default for a cached application is to have its
        !            72: un-initialized global and static variables to be cleared of all updates
        !            73: made by previous runs before
        !            74: a new invocation of the application starts to execute. However, for
        !            75: shared applications or special applications that
        !            76: want to keep data accumulated from previous runs, the \fBA_BSS\fR
        !            77: flag can be set to prevent the \fI.bss\fR section from being cleared.
        !            78: .IP \fBA_DATA\fR
        !            79: The application does not want its initialized global and static variables 
        !            80: (\fI.data\fR section)
        !            81: to be reset to the original values when the function
        !            82: \fIcache\fR is called. By default, when the function \fIcache\fR is called,
        !            83: an instant snapshot of the \fI.data\fR section is made and stored into memory.
        !            84: Whenever the cached application is invoked again, the saved copy is used to
        !            85: re-initialize the \fI.data\fR section with the original values. However, for
        !            86: shared applications, or special applications that want to keep data 
        !            87: accumulated from previous runs, or applications that do not change the values
        !            88: of the variables in the \fI.data\fR section and do not want memory wasted
        !            89: for a snapshot, the \fBA_DATA\fR flag can be set to forgo the savings and copy.  
        !            90: .IP
        !            91: \fBNOTE:\fR the original values of the variables in the \fI.data\fR section are
        !            92: the values \fIat the time\fR the function \fIcache\fR is called. If any of these
        !            93: variables are modified before \fIcache\fR is
        !            94: called, the values remembered may not be the same as appeared in the source code.
        !            95: .IP \fBA_NO_BOOT\fR
        !            96: The application does not want to be booted from \fIdmdld\fR. Note that
        !            97: if both \fBA_NO_BOOT\fR and \fBA_NO_SHOW\fR are set, there is no
        !            98: way to access the cached application for invocation.
        !            99: .IP \fBA_PERMANENT\fR
        !           100: The applicaton cannot be removed by \fIdecache(3L)\fR or \fIucache(1)\fR.
        !           101: ROM-resident applications are cached this way.
        !           102: .PP
        !           103: The default when the bit-vector argument \fIf\fR is null is to cache
        !           104: the application as a non-shared text, which can be accessed from
        !           105: the \fBMore\fR menu and from \fIdmdld(1)\fR, has its \fI.bss\fR section
        !           106: cleared and its \fI.data\fR initialized before execution, and can be removed 
        !           107: from the application cache.
        !           108: .PP
        !           109: Besides the information supplied by the arguments, caching a downloaded
        !           110: application requires other parameters. The most useful ones are:
        !           111: .IP ""
        !           112: - host connection
        !           113: .IP ""
        !           114: - capability to reshape
        !           115: .IP ""
        !           116: - default window size
        !           117: .PP
        !           118: The
        !           119: .I cache
        !           120: function 
        !           121: extracts the above information
        !           122: from the current disposition of the application itself.
        !           123: This relieves the programmer from supplying the many parameters,
        !           124: and ensures a uniform user interface
        !           125: among different cached applications.
        !           126: .PP
        !           127: The state of host connection of a cached application is the same as
        !           128: of the application when the function \fIcache\fR is called. If the application is already
        !           129: local (no host connection), the application will be cached as local; otherwise,
        !           130: it will be cached as connected. When using the \fBMore\fR submenu to create a
        !           131: connected cached application, the user has to select the host he wants the
        !           132: application to be connected to through a Host submenu (like the one under the
        !           133: item \fBNew\fR in the global menu). 
        !           134: On the other hand, when \fIdmdld\fR is used to bootstrap a local
        !           135: cached application to replace the default terminal emulator, the previously
        !           136: connected window will 
        !           137: automatically loose its connection (i.e. its border is changed to a checkered
        !           138: pattern of a local window). 
        !           139: .PP
        !           140: The capability to reshape a cached application depends on the \fINO_RESHAPE\fR
        !           141: bit of the process state variable when the function \fIcache\fR is called.
        !           142: If this bit is set, the application is cached as non-reshapable. When using
        !           143: the \fBMore\fR submenu to create a non-reshapable cached application, the user
        !           144: gets the 
        !           145: application's default window size without a sweep cursor. When \fIdmdld\fR is used
        !           146: to bootstrap a non-reshapable cached application to replace the
        !           147: default terminal emulator, the window is automatically reshaped
        !           148: to the application's default window size.
        !           149: .PP
        !           150: The 
        !           151: cached application's default window size is determined by the \fIchar_to_bits\fR
        !           152: function (see \fIbtoc(3R)\fR)
        !           153: and the \fINO_RESHAPE\fR bit. If a function \fIchar_to_bits\fR is defined
        !           154: for the application, the function \fIcache\fR will call it with three arguments: 
        !           155: 0, 0, and a pointer
        !           156: to the application's process table to calculate the 
        !           157: default window size. The result will be stored in the Application cache, and
        !           158: used by the terminal to generate the default outline if the application is
        !           159: selected from the \fBMore\fR menu, or to reshape the window if the application
        !           160: is not reshapable and is invoked from \fIdmdld\fR.
        !           161: If the \fIchar_to_bits\fR function is not defined, but the \fINO_RESHAPE\fR bit is set, the
        !           162: default window size will be taken as the current window size 
        !           163: of the application when the function
        !           164: \fIcache\fR is called. If neither the function \fIchar_to_bits\fR is defined
        !           165: nor the \fINO_RESHAPE\fR bit is set, no default window size will be displayed
        !           166: when the user selects the application's name under the \fBMore\fR menu, and
        !           167: the user will have to sweep a window to run the application.
        !           168: .PP
        !           169: All applications that are not cached with the \fBA_NO_SHOW\fR bit on, will
        !           170: be shown on the \fBMore\fR menu. What happens when selected depends on how they are cached,
        !           171: as explained below. 
        !           172: .PP
        !           173: If an application is cached as shared and local, selection of the application's
        !           174: name in the More submenu always results to the creation of a local window
        !           175: running the chosen application.
        !           176: .PP
        !           177: If an application is cached as shared and connected, there will be always
        !           178: a Host submenu connected to the application's name in the More submenu.
        !           179: Selection will be effective only when an item in the Host submenu is picked.
        !           180: Selection of the application's name in the More submenu is a null operation.
        !           181: .PP
        !           182: If an application is cached as non-shared and local, selection of the
        !           183: application's name in the More submenu results in the creation of a local
        !           184: window running the application, \fIif and only if\fR no other window is running 
        !           185: that application at the time. Otherwise the window running the application will
        !           186: be made Top and Current.
        !           187: .PP
        !           188: If an application is cached as non-shared and connected, there will be 
        !           189: a Host submenu connected to the application's name in the More submenu,
        !           190: \fIif and only if\fR no other window is running 
        !           191: that application at the time. Selection is effective only when an item
        !           192: in the Host submenu is picked. If there is a window running the application
        !           193: already, there will be no Host submenu, and selection of the application's
        !           194: name in the More submenu results to the window running the application be
        !           195: made Top and Current. \fI
        !           196: 
        !           197: .SS Return Value
        !           198: If the calling application is successfully cached, the \fIcache\fR
        !           199: function returns a 1. Otherwise a 0 is returned.
        !           200: .PP
        !           201: A failure may be due to the following reasons. Another application
        !           202: of the same \fItag name\fR is already in the cache, or the terminal
        !           203: runs out of memory when saving the caching information.
        !           204: 
        !           205: 
        !           206: .SH EXAMPLE
        !           207: This is an example of a very crude terminal emulator that only
        !           208: prints what it receives from the host.
        !           209: This program, called \fIterm.c\fR is compiled as followed:
        !           210: .br
        !           211:        dmdcc -o term term.c
        !           212: .br
        !           213: in order to have the name \fIterm\fR in the \fBMore\fR submenu.
        !           214: .PP
        !           215: .RS 3
        !           216: .nf
        !           217: .ft CM
        !           218: .S -2
        !           219: #include <dmd.h>
        !           220: #include <object.h>
        !           221: 
        !           222: main ()
        !           223: {
        !           224:        register int c;
        !           225:        Point setsize();
        !           226: 
        !           227: 
        !           228:        P->ctob = setsize;
        !           229:        cache ((char *)0, A_SHARED);
        !           230:        /* cache as shared application */
        !           231: 
        !           232:        request (RCV);
        !           233:        while (1) {             /* never ending loop */
        !           234:                wait (RCV);     /* wait for a character */
        !           235:                while ((c = rcvchar()) != -1)
        !           236:                        lprintf ("%c", c);
        !           237:                        /* print anything received */
        !           238:        }
        !           239: }
        !           240: 
        !           241: Point 
        !           242: setsize ()             /* do not need the arguments 0, 0, P */
        !           243: {
        !           244:        Point fPt();
        !           245: 
        !           246:        return (fPt(728, 344)); /* just a nice size */
        !           247: }
        !           248: .fi
        !           249: .RE
        !           250: 
        !           251: .SH SEE ALSO
        !           252: dmdld(1), ucache(1),
        !           253: btoc(3R),
        !           254: cmdcache(3L), decache(3L),
        !           255: local(3R), state(3R).
        !           256: 

unix.superglobalmegacorp.com

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