|
|
1.1 root 1: #ifndef lint
2: static char rcs_id[] = "$Header: ap.c,v 1.6 87/09/11 08:22:04 toddb Exp $";
3: #endif
4:
5: /*
6: * COPYRIGHT 1987
7: * DIGITAL EQUIPMENT CORPORATION
8: * MAYNARD, MASSACHUSETTS
9: * ALL RIGHTS RESERVED.
10: *
11: * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
12: * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
13: * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR
14: * ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
15: *
16: * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT RIGHTS,
17: * APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN ADDITION TO THAT
18: * SET FORTH ABOVE.
19: *
20: *
21: * Permission to use, copy, modify, and distribute this software and its
22: * documentation for any purpose and without fee is hereby granted, provided
23: * that the above copyright notice appear in all copies and that both that
24: * copyright notice and this permission notice appear in supporting documentation,
25: * and that the name of Digital Equipment Corporation not be used in advertising
26: * or publicity pertaining to distribution of the software without specific,
27: * written prior permission.
28: */
29:
30: #include <sys/types.h>
31: #include <sys/stat.h>
32: #include <sys/file.h>
33: #include "xedit.h"
34:
35: #define chunk 2048
36:
37: typedef struct {
38: char *buf;
39: int size;
40: XtTextPosition pos;
41: XtTextSource *strSrc;
42: } ApAsSourceData;
43:
44: /* Private Routines */
45:
46: static XtTextPosition ApAsGetLastPos(src)
47: XtTextSource *src;
48: {
49: ApAsSourceData *data;
50: data = (ApAsSourceData *)src->data;
51: return ((*data->strSrc->getLastPos)(data->strSrc));
52: }
53:
54: static ApAsSetLastPos(src, lastPos)
55: XtTextSource *src;
56: XtTextPosition lastPos;
57: {
58: }
59:
60: static int ApAsRead(src, pos, text, maxRead)
61: XtTextSource *src;
62: int pos;
63: XtTextBlock *text;
64: int maxRead;
65: {
66: ApAsSourceData *data;
67: data = (ApAsSourceData *)src->data;
68: return ((*data->strSrc->read)(data->strSrc, pos, text, maxRead));
69: }
70:
71:
72: static int ApAsReplace(src, startPos, endPos, text, delta)
73: XtTextSource *src;
74: XtTextPosition startPos, endPos;
75: XtTextBlock *text;
76: int *delta;
77: {
78: ApAsSourceData *data;
79: int i;
80: data = (ApAsSourceData *)src->data;
81: if((startPos!=endPos) || (startPos!=data->pos))
82: return 0;
83: if((data->pos + text->length) >= data->size){
84: while((data->pos + text->length) >= data->size){
85: data->size += chunk;
86: data->buf = realloc(data->buf, data->size); /* optimize this!!! */
87: }
88: XtStringSourceDestroy(data->strSrc);
89: data->strSrc = (XtTextSource *)XtStringSourceCreate(data->buf,
90: data->size, XttextEdit);
91: }
92: i = (*data->strSrc->replace)(data->strSrc, startPos, endPos, text, delta);
93: data->pos += *delta;
94: return (i);
95: }
96:
97: static XtTextPosition ApAsScan (src, pos, sType, dir, count, include)
98: XtTextSource *src;
99: XtTextPosition pos;
100: ScanType sType;
101: ScanDirection dir;
102: int count, include;
103: {
104: ApAsSourceData *data;
105: data = (ApAsSourceData *)src->data;
106: return
107: ((*data->strSrc->scan)(data->strSrc, pos, sType, dir, count, include));
108: }
109: static XtEditType ApAsGetEditType(src)
110: XtTextSource *src;
111: {
112: /*
113: StringSourcePtr data;
114: data = (StringSourcePtr) src->data;
115: return(data->editMode);
116: */
117: return(XttextAppend);
118: }
119:
120:
121: /* Public routines */
122:
123: XtTextSource *TCreateApAsSource ()
124: {
125: XtTextSource *src;
126: ApAsSourceData *data;
127: src = (XtTextSource *) malloc(sizeof(XtTextSource));
128: src->read = ApAsRead;
129: src->replace = ApAsReplace;
130: src->getLastPos = ApAsGetLastPos;
131: src->setLastPos = ApAsSetLastPos;
132: src->scan = ApAsScan;
133: src->editType = ApAsGetEditType;
134: data = (ApAsSourceData *)(malloc(sizeof(ApAsSourceData)));
135: data->buf = calloc(chunk,1);
136: data->pos = 0;
137: data->size = chunk;
138: data->strSrc = (XtTextSource *) XtStringSourceCreate (data->buf, data->size,XttextEdit);
139: src->data = (int *)data;
140: return src;
141: }
142:
143: TDestroyApAsSource(src)
144: XtTextSource *src;
145: {
146: ApAsSourceData *data;
147: data = (ApAsSourceData *)src->data;
148: free(data->buf);
149: free(data);
150: free(src);
151: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.