157675Sbostic /*- 257675Sbostic * Copyright (c) 1992 The Regents of the University of California. 357675Sbostic * All rights reserved. 457675Sbostic * 557675Sbostic * This code is derived from software contributed to Berkeley by 657675Sbostic * Rodney Ruddock of the University of Guelph. 757675Sbostic * 857675Sbostic * %sccs.include.redist.c% 957675Sbostic */ 1057675Sbostic 1157675Sbostic #ifndef lint 12*59480Sbostic static char sccsid[] = "@(#)add_line.c 5.6 (Berkeley) 04/28/93"; 1357675Sbostic #endif /* not lint */ 1457675Sbostic 1557710Sbostic #include <sys/types.h> 1657710Sbostic 1757710Sbostic #include <regex.h> 1857710Sbostic #include <setjmp.h> 1957710Sbostic #include <stdio.h> 2057710Sbostic 2158315Sbostic #ifdef DBI 2258315Sbostic #include <db.h> 2358315Sbostic #endif 2458315Sbostic 2557675Sbostic #include "ed.h" 2657710Sbostic #include "extern.h" 2757675Sbostic 2857675Sbostic /* 2957710Sbostic * This is where the lines actually are put into the buffer. 3057675Sbostic */ 3158315Sbostic #ifdef STDIO 3258315Sbostic long 3358315Sbostic add_line(p, len) 3458315Sbostic char *p; 3558315Sbostic long len; 3658315Sbostic { 3758315Sbostic extern int file_loc; 3858315Sbostic long l_key; 3958315Sbostic 4058710Sbostic sigspecial++; 4158315Sbostic if (file_seek) /* x-ref to get_line for what this does */ { 4258315Sbostic file_seek = 0; 4358315Sbostic fseek(fhtmp, 0L, 2); /* set to end-to-file */ 4458315Sbostic } 4558315Sbostic l_key = ftell(fhtmp); 4658356Sbostic /* keeps user time down 20% approx. */ 4758315Sbostic file_loc = l_key + fwrite(p, sizeof(char), len, fhtmp); 4858710Sbostic sigspecial--; 4958315Sbostic return (l_key); 5058315Sbostic } 5158315Sbostic #endif 5258315Sbostic 5358315Sbostic #ifdef DBI 5457675Sbostic recno_t 5557675Sbostic add_line(p, len) 5657710Sbostic char *p; 5757710Sbostic long len; 5857675Sbostic { 5957710Sbostic DBT db_key, db_data; 6058356Sbostic static recno_t l_key=0; 6157675Sbostic 6258710Sbostic sigspecial++; 6357710Sbostic l_key++; 6457710Sbostic (db_key.data) = &l_key; 6557710Sbostic (db_key.size) = sizeof(recno_t); 6657710Sbostic (db_data.data) = p; 6757710Sbostic (db_data.size) = len; 6857710Sbostic (dbhtmp->put)(dbhtmp, &db_key, &db_data, (u_int)(R_NOOVERWRITE)); 6958710Sbostic sigspecial--; 7058315Sbostic return (l_key); 7157710Sbostic } 7258315Sbostic #endif 7358315Sbostic 7458315Sbostic #ifdef MEMORY 7558315Sbostic char * 7658315Sbostic add_line(p, len) 7758315Sbostic char *p; 7858315Sbostic long len; 7958315Sbostic { 8058315Sbostic char *tmp; 8158315Sbostic 8258710Sbostic sigspecial++; 8358315Sbostic tmp = (char *)calloc(len+1, sizeof(char)); 8458315Sbostic if (tmp) { 85*59480Sbostic memmove(tmp, p, len); 8658315Sbostic tmp[len] = '\0'; 8758315Sbostic } 8858710Sbostic sigspecial--; 8958315Sbostic return (tmp); 9058315Sbostic } 9158315Sbostic #endif 92