annotate 3rdparty/packages/uemacs/uebuffer2.c @ 1885:3c25c93b186c

Changes so far
author boisy
date Tue, 11 Oct 2005 11:20:25 +0000
parents 48c646212b1c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
995
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
1 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
2 * Buffer management.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
3 * Some of the functions are internal,
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
4 * and some are actually attached to user
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
5 * keys. Like everyone else, they set hints
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
6 * for the display system.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
7 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
8 #include <stdio.h>
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
9 #include "ueed.h"
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
10
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
11 #ifndef OS9
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
12 itoa(buf, width, num)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
13 register char buf[];
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
14 register int width;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
15 register int num;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
16 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
17 buf[width] = 0; /* End of string. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
18 while (num >= 10) { /* Conditional digits. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
19 buf[--width] = (num%10) + '0';
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
20 num /= 10;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
21 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
22 buf[--width] = num + '0'; /* Always 1 digit. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
23 while (width != 0) /* Pad with blanks. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
24 buf[--width] = ' ';
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
25 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
26
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
27 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
28 * The argument "text" points to
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
29 * a string. Append this line to the
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
30 * buffer list buffer. Handcraft the EOL
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
31 * on the end. Return TRUE if it worked and
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
32 * FALSE if you ran out of room.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
33 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
34 addline(text)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
35 char *text;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
36 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
37 register LINE *lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
38 register int i;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
39 register int ntext;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
40
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
41 ntext = strlen(text);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
42 if ((lp=lalloc(ntext)) == NULL)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
43 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
44 for (i=0; i<ntext; ++i)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
45 lputc(lp, i, text[i]);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
46 blistp->b_linep->l_bp->l_fp = lp; /* Hook onto the end */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
47 lp->l_bp = blistp->b_linep->l_bp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
48 blistp->b_linep->l_bp = lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
49 lp->l_fp = blistp->b_linep;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
50 if (blistp->b_dotp == blistp->b_linep) /* If "." is at the end */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
51 blistp->b_dotp = lp; /* move it to new line */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
52 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
53 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
54 #endif
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
55
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
56 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
57 * Look through the list of
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
58 * buffers. Return TRUE if there
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
59 * are any changed buffers. Buffers
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
60 * that hold magic internal stuff are
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
61 * not considered; who cares if the
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
62 * list of buffer names is hacked.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
63 * Return FALSE if no buffers
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
64 * have been changed.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
65 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
66 anycb()
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
67 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
68 register BUFFER *bp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
69
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
70 bp = bheadp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
71 while (bp != NULL) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
72 if ((bp->b_flag&BFTEMP)==0 && (bp->b_flag&BFCHG)!=0)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
73 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
74 bp = bp->b_bufp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
75 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
76 return (FALSE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
77 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
78
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
79 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
80 * Find a buffer, by name. Return a pointer
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
81 * to the BUFFER structure associated with it. If
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
82 * the named buffer is found, but is a TEMP buffer (like
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
83 * the buffer list) conplain. If the buffer is not found
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
84 * and the "cflag" is TRUE, create it. The "bflag" is
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
85 * the settings for the flags in in buffer.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
86 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
87 BUFFER *bfind(bname, cflag, bflag)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
88 register char *bname;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
89 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
90 register BUFFER *bp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
91 register LINE *lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
92
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
93 bp = bheadp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
94 while (bp != NULL) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
95 if (strcmp(bname, bp->b_bname) == 0) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
96 if ((bp->b_flag&BFTEMP) != 0) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
97 mlwrite("Cannot select builtin buffer");
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
98 return (NULL);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
99 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
100 return (bp);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
101 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
102 bp = bp->b_bufp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
103 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
104 if (cflag != FALSE) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
105 if ((bp=(BUFFER *)malloc(sizeof(BUFFER))) == NULL)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
106 return (NULL);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
107 if ((lp=lalloc(0)) == NULL) {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
108 free((char *) bp);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
109 return (NULL);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
110 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
111 bp->b_bufp = bheadp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
112 bheadp = bp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
113 bp->b_dotp = lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
114 bp->b_doto =
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
115 bp->b_markp =
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
116 bp->b_marko =
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
117 bp->b_nwnd = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
118 bp->b_linep = lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
119 bp->b_flag = bflag;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
120 strcpy(bp->b_fname, "");
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
121 strcpy(bp->b_bname, bname);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
122 lp->l_fp = lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
123 lp->l_bp = lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
124 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
125 return (bp);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
126 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
127
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
128 /*
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
129 * This routine blows away all of the text
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
130 * in a buffer. If the buffer is marked as changed
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
131 * then we ask if it is ok to blow it away; this is
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
132 * to save the user the grief of losing text. The
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
133 * window chain is nearly always wrong if this gets
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
134 * called; the caller must arrange for the updates
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
135 * that are required. Return TRUE if everything
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
136 * looks good.
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
137 */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
138 bclear(bp)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
139 register BUFFER *bp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
140 {
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
141 register LINE *lp;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
142 register int s;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
143
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
144 if ((bp->b_flag&BFTEMP) == 0 /* Not scratch buffer. */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
145 && (bp->b_flag&BFCHG) != 0 /* Something changed */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
146 && (s=mlyesno("Discard changes")) != TRUE)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
147 return (s);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
148 bp->b_flag &= ~BFCHG; /* Not changed */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
149 while ((lp=lforw(bp->b_linep)) != bp->b_linep)
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
150 lfree(lp);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
151 bp->b_dotp = bp->b_linep; /* Fix "." */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
152 bp->b_doto =
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
153 bp->b_markp = /* Invalidate "mark" */
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
154 bp->b_marko = 0;
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
155 return (TRUE);
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
156 }
48c646212b1c 'microEMACS' for OS-9.
roug
parents:
diff changeset
157