summaryrefslogtreecommitdiffstats
path: root/contrib/nvi/docs/interp/interp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/nvi/docs/interp/interp')
-rw-r--r--contrib/nvi/docs/interp/interp190
1 files changed, 190 insertions, 0 deletions
diff --git a/contrib/nvi/docs/interp/interp b/contrib/nvi/docs/interp/interp
new file mode 100644
index 0000000..3da5a8f
--- /dev/null
+++ b/contrib/nvi/docs/interp/interp
@@ -0,0 +1,190 @@
+# @(#)interp 8.5 (Berkeley) 10/19/96
+ Nvi Interpreter API
+
+Introduction:
+ The intention is to provide a way to graft a fairly generic extension
+ language into nvi. I think that the obvious candidates are Tcl/Rush,
+ Scheme, Python and Perl. Since the interpretation language chosen
+ is often a religious issue, the method should be as flexible as
+ possible. I don't expect to rewrite the editor in the interpreted
+ language, so that isn't a consideration.
+
+ Q: Is there any reason for nvi to support multiple interpreters in
+ a single executable?
+
+Interpreter functions in nvi:
+
+ 1: Function to get the current screen pointer.
+
+ SCR *inter_screen();
+
+ Return a pointer to the current screen.
+
+ 2: Functions to execute both ex and vi commands. The return value of the
+ function will be success/failure. The editor itself will continue to
+ handle the display of all messages and text for the foreseeable future.
+
+ int inter_vicmd(SCR *, char *cmds, size_t len);
+ int inter_excmd(SCR *, char *cmds, size_t len);
+
+ The byte string cmds, of length len, is entered into the standard
+ vi or ex parser, as if typed by the user. The characters are not
+ mapped in any way, i.e. the user's vi mappings don't apply. If
+ any error occurs, an error value is returned, and the rest of the
+ characters are discarded.
+
+ 3: Functions to handle lines of text in the file.
+
+ int inter_gline(SCR *, recno_t lno, char **lp, size_t *lenp);
+
+ Return a pointer to the text of the line lno, into the location
+ referenced by lp, and its length into the location referenced by
+ lenp.
+
+ int inter_dline(SCR *, recno_t lno);
+
+ Delete the line lno from the file.
+
+ int inter_aline(SCR *, recno_t lno, char *lp, size_t len);
+
+ Append a line consisting of the len bytes of text referenced by
+ lp to the line lno.
+
+ int inter_iline(SCR *, recno_t lno, char *lp, size_t len);
+
+ Insert a line consisting of the len bytes of text referenced by
+ lp before the line lno.
+
+ int inter_sline(SCR *, recno_t lno, char *lp, size_t len);
+
+ Replace line lno with the len bytes of text referenced by lp.
+
+ int inter_lline(SCR *, recno_t *lnop);
+
+ Return the number of the last line in the file in the location
+ referenced by lnop.
+
+ 4: Function to post an error message to the user.
+
+ int inter_msgq(SCR *, enum msgtype, char *fmt, ...);
+
+ Display the message for the user. Valid message types are:
+
+ M_BERR Error: M_ERR if verbose, else bell.
+ M_ERR Error: Display in inverse video.
+ M_INFO Info: Display in normal video.
+ M_SYSERR Error: M_ERR, using strerror(3) message.
+ M_VINFO Info: M_INFO if verbose, else ignore.
+
+ 5: Function to manipulate cut buffers.
+
+ int inter_setbuf(SCR *, CHAR_T buffer);
+
+ Create the specified buffer if it does not exist (the
+ buffer will have no contents).
+
+ int inter_getbuf(SCR *, CHAR_T buffer, TEXT **textp);
+
+ Return a pointer to the specified buffer in the location
+ referenced by textp. (Since a pointer to the real item
+ is being returned, it can be manipulated in any way the
+ interpreter chooses.)
+
+ 6: Functions to manipulate marks.
+
+ int inter_setmark(SCR *, CHAR_T name);
+
+ Create the specified mark if it does not exist (the
+ mark will have no contents).
+
+ int inter_getmark(SCR *, CHAR_T name, MARK **markp);
+
+ Return a pointer to the specified mark in the location
+ referenced by markp. (Since a pointer to the real item
+ is being returned, it can be manipulated in any way the
+ interpreter chooses.)
+
+ 7: Function to manipulate screens.
+
+ SCR *inter_iscreen();
+
+ Create a new screen, and return a pointer to it.
+
+ int inter_escreen(SCR *);
+
+ End a screen.
+
+ 8: Functions to get input from the user.
+
+ int inter_getchar(CHAR_T *chp,
+ enum maptype {NONE, INPUT, COMMAND} mapt);
+
+ Return a character from the keyboard into the location referenced
+ by chp. Mapt can be set to INPUT, COMMAND or NONE, depending on
+ what vi mappings should be applied to the character.
+
+ int inter_getline(SCR *, char *prompt, CHAR_T **linep,
+ size_t *lenp, enum maptype {NONE, INPUT, COMMAND} mapt);
+
+ Return a pointer to a line entered by the user, and its length,
+ into the locations linep and lenp. A prompt may be specified
+ by prompt, and mappings by mapt.
+
+ int inter_freeline(CHAR_T *linep);
+
+ Free the memory that was allocated by inter_getline();
+
+ 9: Function to retrieve and set the cursor.
+
+ int inter_getcursor(SCR *, MARK *mark);
+
+ Store the current cursor position in mark.
+
+ int inter_setcursor(SCR *, MARK *mark);
+
+ Set the current cursor position to mark.
+
+10: Function to return a motion command from the user.
+
+ int inter_getmotion(SCR *,
+ MARK *start, MARK *end, enum movetype {LINE, CHAR} *mt);
+
+ Nvi gets a motion command from the user and returns the starting
+ and stopping points of the movement, reordered from the beginning
+ to the end of the file. The standard rules for line/character
+ motions are applied, and returned to the interpreter through the
+ mt argument.
+
+11: Functions to return pathnames.
+
+12: Functions to return edit options.
+
+13: Nvi commands which will send text to the interpreter.
+
+ Nvi will have a new ex command "inter", which will pipe the rest of
+ the line up to the first unescaped <newline> to the interpreter, of
+ the following form:
+
+ :[address[,address]] inter [count] command
+
+ The interface from the ex command to the interpreter is a function:
+
+ int inter_ex(
+ SCR *, /* Current screen. */
+ char *cmd; /* The command. */
+ size_t len; /* The command length. */
+ MARK *start, /* Starting address for INTER_EX */
+ MARK *end, /* Ending address for INTER_EX */
+ int count); /* Count. */
+
+ Nvi will have a new vi command "*<buffer>" which will pipe the contents
+ of the named buffer to the interpreter, of the following form:
+
+ [count]*<buffer>
+
+ The interface from the vi command to the interpreter is a function:
+
+ int inter_vi(
+ SCR *, /* Current screen. */
+ CHAR_T buffer, /* Buffer. */
+ int count); /* Count. */
OpenPOWER on IntegriCloud