1 /*-
2 * Copyright (c) 1992, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Rodney Ruddock of the University of Guelph.
7 *
8 * %sccs.include.redist.c%
9 */
10
11 #ifndef lint
12 static char sccsid[] = "@(#)add_line.c 8.1 (Berkeley) 05/31/93";
13 #endif /* not lint */
14
15 #include <sys/types.h>
16
17 #include <regex.h>
18 #include <setjmp.h>
19 #include <stdio.h>
20
21 #ifdef DBI
22 #include <db.h>
23 #endif
24
25 #include "ed.h"
26 #include "extern.h"
27
28 /*
29 * This is where the lines actually are put into the buffer.
30 */
31 #ifdef STDIO
32 long
add_line(p,len)33 add_line(p, len)
34 char *p;
35 long len;
36 {
37 extern int file_loc;
38 long l_key;
39
40 sigspecial++;
41 if (file_seek) /* x-ref to get_line for what this does */ {
42 file_seek = 0;
43 fseek(fhtmp, 0L, 2); /* set to end-to-file */
44 }
45 l_key = ftell(fhtmp);
46 /* keeps user time down 20% approx. */
47 file_loc = l_key + fwrite(p, sizeof(char), len, fhtmp);
48 sigspecial--;
49 return (l_key);
50 }
51 #endif
52
53 #ifdef DBI
54 recno_t
add_line(p,len)55 add_line(p, len)
56 char *p;
57 long len;
58 {
59 DBT db_key, db_data;
60 static recno_t l_key=0;
61
62 sigspecial++;
63 l_key++;
64 (db_key.data) = &l_key;
65 (db_key.size) = sizeof(recno_t);
66 (db_data.data) = p;
67 (db_data.size) = len;
68 (dbhtmp->put)(dbhtmp, &db_key, &db_data, (u_int)(R_NOOVERWRITE));
69 sigspecial--;
70 return (l_key);
71 }
72 #endif
73
74 #ifdef MEMORY
75 char *
add_line(p,len)76 add_line(p, len)
77 char *p;
78 long len;
79 {
80 char *tmp;
81
82 sigspecial++;
83 tmp = (char *)calloc(len+1, sizeof(char));
84 if (tmp) {
85 memmove(tmp, p, len);
86 tmp[len] = '\0';
87 }
88 sigspecial--;
89 return (tmp);
90 }
91 #endif
92