From 07bf12582465bc87ed7bc5d46fbd4055204a0777 Mon Sep 17 00:00:00 2001 From: Mat Booth Date: Wed, 5 Nov 2014 18:33:59 +0000 Subject: [PATCH] Initial version of sc package --- .gitignore | 5 + Upstream-changes-from-old-versions.patch | 534 +++++++++++++++++++++++ call_function_not_take_its_address.patch | 13 + format_security_fixes.patch | 74 ++++ function_definitions.patch | 154 +++++++ sc.spec | 58 +++ sources | 0 7 files changed, 838 insertions(+) create mode 100644 .gitignore create mode 100644 Upstream-changes-from-old-versions.patch create mode 100644 call_function_not_take_its_address.patch create mode 100644 format_security_fixes.patch create mode 100644 function_definitions.patch create mode 100644 sc.spec create mode 100644 sources diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..769f678 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +/sc-*.tar.gz +/sc-*/ +/.build-*.log +/*.src.rpm +/x86_64/ diff --git a/Upstream-changes-from-old-versions.patch b/Upstream-changes-from-old-versions.patch new file mode 100644 index 0000000..eda5c23 --- /dev/null +++ b/Upstream-changes-from-old-versions.patch @@ -0,0 +1,534 @@ +Description: Patches to upstream source since 7.16 + Self-explanatory changes mostly dealing with compilation issues + (ie. broken code, like undefined locals, missing return value, etc.) + . + sc (7.16-3) unstable; urgency=low + . + * Changed maintainer to the new email address, recursively. + * Fixed old changelog entries' bug closing method + * Add patches supplied by Carsten Hey + + Stop compressing tutorial.sc file (closes: #514777) + + Use default colors (closes: #514775) + * Bump Standards to 3.8.4. + * Bump dependency of debhelper. +Author: Adam Majer + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: http://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- sc-7.16.orig/abbrev.c ++++ sc-7.16/abbrev.c +@@ -19,10 +19,15 @@ + #include + #include + #include ++#include ++#include + #include "sc.h" + + static struct abbrev *abbr_base; + ++int are_abbrevs(void); ++ ++ + void + add_abbr(char *string) + { +@@ -87,7 +92,7 @@ add_abbr(char *string) + } + } + +- if (expansion == NULL) ++ if (expansion == NULL){ + if ((a = find_abbr(string, strlen(string), &prev))) { + error("abbrev \"%s %s\"", a->abbr, a->exp); + return; +@@ -95,6 +100,7 @@ add_abbr(char *string) + error("abreviation \"%s\" doesn't exist", string); + return; + } ++ } + + if (find_abbr(string, strlen(string), &prev)) + del_abbr(string); +@@ -122,7 +128,7 @@ void + del_abbr(char *abbrev) + { + struct abbrev *a; +- struct abbrev **prev; ++ struct abbrev **prev=0; + + if (!(a = find_abbr(abbrev, strlen(abbrev), prev))) + return; +--- sc-7.16.orig/cmds.c ++++ sc-7.16/cmds.c +@@ -478,7 +478,7 @@ yankrow(int arg) + int i, qtmp; + char buf[50]; + struct frange *fr; +- struct ent *obuf; ++ struct ent *obuf=0; + + if ((fr = find_frange(currow, curcol))) + rs = fr->or_right->row - currow + 1; +@@ -535,7 +535,7 @@ yankcol(int arg) + int cs = maxcol - curcol + 1; + int i, qtmp; + char buf[50]; +- struct ent *obuf; ++ struct ent *obuf=0; + + if (cs - arg < 0) { + cs = cs > 0 ? cs : 0; +@@ -810,7 +810,7 @@ pullcells(int to_insert) + + if (to_insert == 'r') { + insertrow(numrows, 0); +- if (fr = find_frange(currow, curcol)) ++ if ((fr = find_frange(currow, curcol))) + deltac = fr->or_left->col - mincol; + else { + for (i = 0; i < numrows; i++) +@@ -2279,7 +2279,7 @@ copye(register struct enode *e, int Rdel + ret->e.r.right.vp = lookat(newrow, newcol); + ret->e.r.right.vf = e->e.r.right.vf; + } else { +- struct enode *temprange; ++ struct enode *temprange=0; + + if (freeenodes) { + ret = freeenodes; +@@ -2337,8 +2337,7 @@ copye(register struct enode *e, int Rdel + break; + case 'f': + case 'F': +- if (range && ret->op == 'F' || +- !range && ret->op == 'f') ++ if ((range && ret->op == 'F') || (!range && ret->op == 'f')) + Rdelta = Cdelta = 0; + ret->e.o.left = copye(e->e.o.left, Rdelta, Cdelta, + r1, c1, r2, c2, transpose); +@@ -2798,7 +2797,7 @@ void + write_cells(register FILE *f, int r0, int c0, int rn, int cn, int dr, int dc) + { + register struct ent **pp; +- int r, c, rs, cs, mf; ++ int r, c, rs=0, cs=0, mf; + char *dpointptr; + + mf = modflg; +@@ -2861,12 +2860,12 @@ writefile(char *fname, int r0, int c0, i + if ((plugin = findplugin(p+1, 'w')) != NULL) { + if (!plugin_exists(plugin, strlen(plugin), save + 1)) { + error("plugin not found"); +- return; ++ return -1; + } + *save = '|'; + if ((strlen(save) + strlen(fname) + 20) > PATHLEN) { + error("Path too long"); +- return; ++ return -1; + } + sprintf(save + strlen(save), " %s%d:", coltoa(c0), r0); + sprintf(save + strlen(save), "%s%d \"%s\"", coltoa(cn), rn, fname); +@@ -2883,13 +2882,14 @@ writefile(char *fname, int r0, int c0, i + } + #endif /* VMS */ + +- if (*fname == '\0') ++ if (*fname == '\0'){ + if (isatty(STDOUT_FILENO) || *curfile != '\0') + fname = curfile; + else { + write_fd(stdout, r0, c0, rn, cn); + return (0); + } ++ } + + #ifdef MSDOS + namelen = 12; +@@ -2981,12 +2981,12 @@ readfile(char *fname, int eraseflg) + if ((plugin = findplugin(p+1, 'r')) != NULL) { + if (!(plugin_exists(plugin, strlen(plugin), save + 1))) { + error("plugin not found"); +- return; ++ return -1; + } + *save = '|'; + if ((strlen(save) + strlen(fname) + 2) > PATHLEN) { + error("Path too long"); +- return; ++ return -1; + } + sprintf(save + strlen(save), " \"%s\"", fname); + eraseflg = 0; +--- sc-7.16.orig/color.c ++++ sc-7.16/color.c +@@ -19,6 +19,7 @@ + + #include + #include ++#include + #include "sc.h" + + /* a linked list of free [struct ent]'s, uses .next as the pointer */ +@@ -30,6 +31,8 @@ static struct crange *color_base; + void + initcolor(int colornum) + { ++ use_default_colors(); ++ + if (!colornum) { + int i; + +--- sc-7.16.orig/frame.c ++++ sc-7.16/frame.c +@@ -18,6 +18,9 @@ + + #include + #include ++#include ++#include ++#include + #include "sc.h" + + static struct frange *frame_base; +--- sc-7.16.orig/help.c ++++ sc-7.16/help.c +@@ -11,6 +11,7 @@ char *header = " Quick Reference"; + char *revision = "$Revision: 7.16 $"; + #else + #include ++#include + #include "sc.h" + #endif /* QREF */ + +--- sc-7.16.orig/interp.c ++++ sc-7.16/interp.c +@@ -1572,12 +1572,12 @@ void + copy(struct ent *dv1, struct ent *dv2, struct ent *v1, struct ent *v2) + { + struct ent *p; +- struct ent *n; ++/* struct ent *n;*/ + static int minsr = -1, minsc = -1; + static int maxsr = -1, maxsc = -1; + int mindr, mindc; + int maxdr, maxdc; +- int vr, vc; ++/* int vr, vc;*/ + int r, c; + int deltar, deltac; + +@@ -2066,7 +2066,7 @@ str_search(char *s, int firstrow, int fi + *line = '\0'; + } + } +- if (!col_hidden[c]) ++ if (!col_hidden[c]){ + if (gs.g_type == G_STR) { + if (p && p->label + #if defined(REGCOMP) +@@ -2099,6 +2099,7 @@ str_search(char *s, int firstrow, int fi + #endif + #endif + break; ++ } + if (r == endr && c == endc) { + error("String not found"); + #if defined(REGCOMP) +@@ -2471,13 +2472,11 @@ clearent(struct ent *v) + int + constant(register struct enode *e) + { +- return ( +- e == NULL ++ return e == NULL + || e->op == O_CONST + || e->op == O_SCONST +- || e->op == 'm' && constant(e->e.o.left) +- || ( +- e->op != O_VAR ++ || (e->op == 'm' && constant(e->e.o.left)) ++ || (e->op != O_VAR + && !(e->op & REDUCE) + && constant(e->e.o.left) + && constant(e->e.o.right) +@@ -2491,9 +2490,7 @@ constant(register struct enode *e) + && e->op != LASTCOL + && e->op != NUMITER + && e->op != FILENAME +- && optimize +- ) +- ); ++ && optimize ); + } + + void +--- sc-7.16.orig/lex.c ++++ sc-7.16/lex.c +@@ -34,6 +34,8 @@ + #include + #include + #include ++#include ++#include + #include "sc.h" + + #ifdef NONOTIMEOUT +@@ -107,7 +109,7 @@ int + yylex() + { + char *p = line + linelim; +- int ret; ++ int ret=0; + static int isfunc = 0; + static bool isgoto = 0; + static bool colstate = 0; +@@ -326,7 +328,7 @@ plugin_exists(char *name, int len, char + strcpy((char *)path, HomeDir); + strcat((char *)path, "/.sc/plugins/"); + strncat((char *)path, name, len); +- if (fp = fopen((char *)path, "r")) { ++ if ((fp = fopen((char *)path, "r"))) { + fclose(fp); + return 1; + } +@@ -334,7 +336,7 @@ plugin_exists(char *name, int len, char + strcpy((char *)path, LIBDIR); + strcat((char *)path, "/plugins/"); + strncat((char *)path, name, len); +- if (fp = fopen((char *)path, "r")) { ++ if ((fp = fopen((char *)path, "r"))) { + fclose(fp); + return 1; + } +--- sc-7.16.orig/Makefile ++++ sc-7.16/Makefile +@@ -32,7 +32,7 @@ MANMODE=644 + + # This is where the library file (tutorial) goes. + #LIBDIR=/usr/local/share/$(name) # reno +-LIBDIR=${prefix}/lib/$(name) ++LIBDIR=${prefix}/share/doc/$(name) + LIBRARY=-DLIBDIR=\"${LIBDIR}\" + + # Set SIMPLE for lex.c if you don't want arrow keys or lex.c blows up +--- sc-7.16.orig/range.c ++++ sc-7.16/range.c +@@ -18,6 +18,8 @@ + + #include + #include ++#include ++#include + #include "sc.h" + + static struct range *rng_base; +--- sc-7.16.orig/sc.c ++++ sc-7.16/sc.c +@@ -212,7 +212,7 @@ flush_saved() + + if (dbidx < 0) + return; +- if (p = delbuf[dbidx]) { ++ if ((p = delbuf[dbidx])) { + scxfree(delbuffmt[dbidx]); + delbuffmt[dbidx] = NULL; + } +@@ -845,7 +845,7 @@ main (int argc, char **argv) + break; + case 'C': + color = !color; +- if (has_colors()) ++ if (has_colors()){ + if (color) { + attron(COLOR_PAIR(1)); + bkgd(COLOR_PAIR(1) | ' '); +@@ -853,6 +853,7 @@ main (int argc, char **argv) + attron(COLOR_PAIR(0)); + bkgd(COLOR_PAIR(0) | ' '); + } ++ } + error("Color %sabled.", color ? "en" : "dis"); + break; + case 'N': +--- sc-7.16.orig/sc.h ++++ sc-7.16/sc.h +@@ -612,6 +612,9 @@ extern int pagesize; /* If nonzero, use + extern int rowlimit; + extern int collimit; + ++void yankr(struct ent *v1, struct ent *v2); ++ ++ + #if BSD42 || SYSIII + + #ifndef cbreak +--- sc-7.16.orig/screen.c ++++ sc-7.16/screen.c +@@ -234,11 +234,12 @@ update(int anychanged) /* did any cell + i = stcol; + lcols = 0; + col = rescol + frcols; +- if (fr && stcol >= fr->or_left->col) ++ if (fr && stcol >= fr->or_left->col){ + if (stcol < fr->ir_left->col) + i = fr->or_left->col; + else + col += flcols; ++ } + for (; (col + fwidth[i] < cols-1 || col_hidden[i] || i < curcol) && + i < maxcols; i++) { + lcols++; +@@ -328,11 +329,12 @@ update(int anychanged) /* did any cell + i = stcol; + lcols = 0; + col = rescol + frcols; +- if (fr && stcol >= fr->or_left->col) ++ if (fr && stcol >= fr->or_left->col){ + if (stcol < fr->ir_left->col) + i = fr->or_left->col; + else + col += flcols; ++ } + for (; (col + fwidth[i] < cols-1 || col_hidden[i] || i < curcol) && + i < maxcols; i++) { + lcols++; +@@ -377,11 +379,12 @@ update(int anychanged) /* did any cell + i = strow; + rows = 0; + row = RESROW + fbrows; +- if (fr && strow >= fr->or_left->row) ++ if (fr && strow >= fr->or_left->row){ + if (strow < fr->ir_left->row) + i = fr->or_left->row; + else + row += ftrows; ++ } + for (; (row < lines || row_hidden[i] || i < currow) && i < maxrows; + i++) { + rows++; +@@ -460,11 +463,12 @@ update(int anychanged) /* did any cell + i = strow; + rows = 0; + row = RESROW + fbrows; +- if (fr && strow >= fr->or_left->row) ++ if (fr && strow >= fr->or_left->row){ + if (strow < fr->ir_left->row) + i = fr->or_left->row; + else + row += ftrows; ++ } + for (; (row < lines || row_hidden[i] || i < currow) && i < maxrows; + i++) { + rows++; +--- sc-7.16.orig/sort.c ++++ sc-7.16/sort.c +@@ -19,6 +19,8 @@ + #include + #include + #include ++#include ++#include + #include "sc.h" + + int compare(const void *row1, const void *row2); +--- sc-7.16.orig/vi.c ++++ sc-7.16/vi.c +@@ -17,6 +17,8 @@ + #include + #include + #include ++#include ++#include + #include "sc.h" + + #if defined(REGCOMP) +@@ -40,7 +42,7 @@ void gotobottom(); + + #define istext(a) (isalnum(a) || ((a) == '_')) + +-#define bool int ++/*#define bool int*/ + #define true 1 + #define false 0 + +@@ -667,8 +669,10 @@ dotab() + static struct range *nextmatch; + int len; + +- if (linelim > 0 && isalnum(line[linelim-1]) || line[linelim-1] == '_' || +- (completethis && line[linelim-1] == ' ')) { ++ if ((linelim > 0 && isalnum(line[linelim-1])) || ++ line[linelim-1] == '_' || ++ (completethis && line[linelim-1] == ' ')) { ++ + if (!completethis) { + for (completethis = line + linelim - 1; isalnum(*completethis) || + *completethis == '_'; completethis--) /* */; +@@ -715,7 +719,7 @@ void + showdr() + { + int minsr, minsc, maxsr, maxsc; +- char *p; ++ /*char *p;*/ + char r[12]; + struct frange *fr = find_frange(currow, curcol); + +@@ -1566,7 +1570,7 @@ static void + search_again(bool reverse) + { + int prev_match; +- int found_it; ++ int found_it=0; + #if !defined(REGCOMP) && !defined(RE_COMP) && !defined(REGCMP) + char *look_here; + int do_next; +@@ -1777,7 +1781,7 @@ to_char(int arg, int n) + static void + match_paren() + { +- register int i; ++ /*register int i;*/ + int nest = 1; + int tmp = linelim; + +--- sc-7.16.orig/vmtbl.c ++++ sc-7.16/vmtbl.c +@@ -16,6 +16,7 @@ + # include + #endif /* PSC */ + ++#include + #include "sc.h" + + /* +--- sc-7.16.orig/xmalloc.c ++++ sc-7.16/xmalloc.c +@@ -4,11 +4,12 @@ + */ + + #include ++#include + #include "sc.h" + +-extern char *malloc(); ++/* extern char *malloc(); + extern char *realloc(); +-extern void free(); ++extern void free(); */ + void fatal(); + + #ifdef SYSV3 diff --git a/call_function_not_take_its_address.patch b/call_function_not_take_its_address.patch new file mode 100644 index 0000000..2d8b1a8 --- /dev/null +++ b/call_function_not_take_its_address.patch @@ -0,0 +1,13 @@ +Index: sc/screen.c +=================================================================== +--- sc.orig/screen.c 2011-09-26 23:17:21.000000000 -0500 ++++ sc/screen.c 2014-05-18 15:01:24.170035634 -0500 +@@ -874,7 +874,7 @@ + } + } /* else */ + } else +- if (!*pp && color && has_colors && cr && cr->r_color != 1) { ++ if (!*pp && color && has_colors() && cr && cr->r_color != 1) { + move(r, c); + color_set(cr->r_color, NULL); + printw("%*s", fwidth[col], " "); diff --git a/format_security_fixes.patch b/format_security_fixes.patch new file mode 100644 index 0000000..868051b --- /dev/null +++ b/format_security_fixes.patch @@ -0,0 +1,74 @@ +--- sc-7.16/sc.c.orig 2014-11-05 16:27:19.470812738 +0000 ++++ sc-7.16/sc.c 2014-11-05 16:29:14.753177024 +0000 +@@ -511,7 +511,7 @@ + break; + } + } +- if (redraw) printf(redraw); ++ if (redraw) printf("%s", redraw); + exit (0); + } + +--- sc-7.16/sc.h.orig 2014-11-05 16:47:04.184019270 +0000 ++++ sc-7.16/sc.h 2014-11-05 16:48:20.217944078 +0000 +@@ -41,9 +41,9 @@ + #define COLFORMATS 10 /* Number of custom column formats */ + #define DELBUFSIZE 40 /* Number of named buffers + 4 */ + #ifdef PSC +-# define error(msg) fprintf(stderr, msg); ++# define error(format, msg...) fprintf(stderr, format, ## msg); + #else +-# define error isatty(fileno(stdout)) && !move(1,0) && !clrtoeol() && printw ++# define error(format, msg...) (void)(isatty(fileno(stdout)) && !move(1,0) && !clrtoeol() && printw(format, ## msg)) + #endif + #define FBUFLEN 1024 /* buffer size for a single field */ + #define PATHLEN 1024 /* maximum path length */ +--- sc-7.16/vmtbl.c.orig 2014-11-05 16:50:49.449833798 +0000 ++++ sc-7.16/vmtbl.c 2014-11-05 16:52:54.254068948 +0000 +@@ -56,7 +56,7 @@ + newptr = (type *)scxrealloc((char *)oldptr, \ + (unsigned)(nelem * sizeof(type))); \ + if (newptr == (type *)NULL) { \ +- error(msg); \ ++ error("%s", msg); \ + return (FALSE); \ + } \ + oldptr = newptr /* wait incase we can't alloc */ +@@ -118,7 +118,7 @@ + if ((rowcol == GROWCOL) || (rowcol == GROWBOTH)) { + if ((rowcol == GROWCOL) && ((maxcols == ABSMAXCOLS) || + (topcol >= ABSMAXCOLS))) { +- error(nowider); ++ error("%s", nowider); + return (FALSE); + } + +@@ -173,7 +173,7 @@ + for (i = 0; i < maxrows; i++) { + if ((tbl[i] = (struct ent **)scxrealloc((char *)tbl[i], + (unsigned)(newcols * sizeof(struct ent **)))) == (struct ent **)0) { +- error(nowider); ++ error("%s", nowider); + return(FALSE); + } + for (nullit = ATBL(tbl, i, maxcols), cnt = 0; +@@ -191,7 +191,7 @@ + for (; i < newrows; i++) { + if ((tbl[i] = (struct ent **)scxmalloc((unsigned)(newcols * + sizeof(struct ent **)))) == (struct ent **)0) { +- error(nowider); ++ error("%s", nowider); + return(FALSE); + } + for (nullit = tbl[i], cnt = 0; cnt < newcols; cnt++, nullit++) +--- sc-7.16/gram.y.orig 2014-11-05 17:03:00.427505246 +0000 ++++ sc-7.16/gram.y 2014-11-05 17:03:31.097072485 +0000 +@@ -1010,7 +1010,7 @@ + | S_PLUGOUT STRING '=' STRING + { addplugin($2, $4, 'w'); } + | PLUGIN { *line = '|'; +- sprintf(line + 1, $1); ++ sprintf(line + 1, "%s", $1); + readfile(line, 0); + scxfree($1); } + | /* nothing */ diff --git a/function_definitions.patch b/function_definitions.patch new file mode 100644 index 0000000..98150a7 --- /dev/null +++ b/function_definitions.patch @@ -0,0 +1,154 @@ +Index: sc/Makefile +=================================================================== +--- sc.orig/Makefile 2014-05-18 14:18:57.049996065 -0500 ++++ sc/Makefile 2014-05-18 14:20:54.953997896 -0500 +@@ -336,7 +336,7 @@ + # real effect on the reliability of the program, but may concern some + # people who don't understand them. + #CFLAGS=-DSYSV3 -O2 -Wall -pipe +-CFLAGS=-DSYSV3 -O2 -pipe ++CFLAGS=-DSYSV3 -O2 -pipe -g + LIB=-lm -lncurses + + # All of the source files +Index: sc/cmds.c +=================================================================== +--- sc.orig/cmds.c 2014-05-18 14:18:57.049996065 -0500 ++++ sc/cmds.c 2014-05-18 14:20:54.953997896 -0500 +@@ -2406,7 +2406,7 @@ + } else { + switch (e->op) { + case 'v': +- if (e->e.v.vp->flags & is_cleared) { ++ if (e->e.v.vp->flags & flag_is_cleared) { + e->op = ERR_; + e->e.o.left = NULL; + e->e.o.right = NULL; +Index: sc/help.c +=================================================================== +--- sc.orig/help.c 2014-05-18 14:18:57.049996065 -0500 ++++ sc/help.c 2014-05-18 14:20:54.957997896 -0500 +@@ -15,6 +15,8 @@ + #include "sc.h" + #endif /* QREF */ + ++#include ++ + char *intro[] = { + " ", + #if defined(QREF) && defined(TROFF) +Index: sc/interp.c +=================================================================== +--- sc.orig/interp.c 2014-05-18 14:18:57.049996065 -0500 ++++ sc/interp.c 2014-05-18 14:20:54.957997896 -0500 +@@ -2159,7 +2159,7 @@ + n->v = start; + start += inc; + n->flags |= (is_changed|is_valid); +- n->flags &= ~(is_cleared); ++ n->flags &= ~(flag_is_cleared); + } + } + else if (calc_order == BYCOLS) { +@@ -2170,7 +2170,7 @@ + n->v = start; + start += inc; + n->flags |= (is_changed|is_valid); +- n->flags &= ~(is_cleared); ++ n->flags &= ~(flag_is_cleared); + } + } + else error(" Internal error calc_order"); +@@ -2461,7 +2461,7 @@ + if (v->format) + scxfree(v->format); + v->format = NULL; +- v->flags = (is_changed|is_cleared); ++ v->flags = (is_changed|flag_is_cleared); + changed++; + modflg++; + } +Index: sc/sc.c +=================================================================== +--- sc.orig/sc.c 2014-05-18 14:18:57.049996065 -0500 ++++ sc/sc.c 2014-05-18 14:20:54.957997896 -0500 +@@ -84,15 +84,6 @@ + int wasforw = FALSE; + #endif + +-void update(); +-void repaint(); +-extern void doshell(); +-extern void gohome(); +-extern void leftlimit(); +-extern void rightlimit(); +-extern void gototop(); +-extern void gotobottom(); +- + char curfile[PATHLEN]; + char revmsg[80]; + +@@ -165,7 +156,7 @@ + if (*pp == NULL) { + if (freeents != NULL) { + *pp = freeents; +- (*pp)->flags &= ~is_cleared; ++ (*pp)->flags &= ~flag_is_cleared; + (*pp)->flags |= may_sync; + freeents = freeents->next; + } else +@@ -827,7 +818,7 @@ + break; + case 'c': + showcell = (!showcell); +- repaint(lastmx, lastmy, fwidth[lastcol]); ++ repaint(lastmx, lastmy, fwidth[lastcol], 0, A_STANDOUT); + error("Cell highlighting %sabled.", + showcell ? "en" : "dis"); + --modflg; /* negate the modflg++ */ +Index: sc/sc.h +=================================================================== +--- sc.orig/sc.h 2014-05-18 14:18:57.049996065 -0500 ++++ sc/sc.h 2014-05-18 14:20:54.957997896 -0500 +@@ -304,7 +304,7 @@ + #define is_deleted 0020 + #define is_locked 0040 + #define is_label 0100 +-#define is_cleared 0200 ++#define flag_is_cleared 0200 + #define may_sync 0400 + + /* cell error (1st generation (ERROR) or 2nd+ (INVALID)) */ +@@ -630,3 +630,14 @@ + #else + #include + #endif ++ ++ ++void update(int anychanged); ++void repaint(int x, int y, int len, int attron, int attroff); ++ ++void doshell(); ++void gohome(); ++void leftlimit(); ++void rightlimit(); ++void gototop(); ++void gotobottom(); +Index: sc/vi.c +=================================================================== +--- sc.orig/vi.c 2014-05-18 14:18:57.049996065 -0500 ++++ sc/vi.c 2014-05-18 14:20:54.961997896 -0500 +@@ -33,13 +33,6 @@ + char *regex(); + #endif + +-void doshell(); +-void gohome(); +-void leftlimit(); +-void rightlimit(); +-void gototop(); +-void gotobottom(); +- + #define istext(a) (isalnum(a) || ((a) == '_')) + + /*#define bool int*/ diff --git a/sc.spec b/sc.spec new file mode 100644 index 0000000..5cfa570 --- /dev/null +++ b/sc.spec @@ -0,0 +1,58 @@ +Name: sc +Version: 7.16 +Release: 1%{?dist} +Summary: Spreadsheet Calculator + +License: Public Domain +URL: http://www.ibiblio.org/pub/Linux/apps/financial/spreadsheet/!INDEX.html +Source0: http://www.ibiblio.org/pub/Linux/apps/financial/spreadsheet/sc-%{version}.tar.gz + +# These patches are from Debian, see: +# http://anonscm.debian.org/cgit/collab-maint/sc.git/tree/debian/patches?id=8d75b0ec9f761b5d5245290a79a20b409c442d52 +Patch0: Upstream-changes-from-old-versions.patch +Patch1: function_definitions.patch +Patch2: call_function_not_take_its_address.patch + +# Patch for http://fedoraproject.org/wiki/Changes/FormatSecurity +Patch3: format_security_fixes.patch + +BuildRequires: bison +BuildRequires: ncurses-devel + +%description +Spreadsheet Calculator is a free curses-based spreadsheet program that uses key +bindings similar to vi and less. + +%prep +%autosetup + +%build +make all sc.1 psc.1 %{?_smp_mflags} CFLAGS="%{optflags} -DSYSV3" + +%install +# The "install" target of upstream's makefile does not work, so install manually + +# Binaries +install -d -m 0755 %{buildroot}%{_bindir} +install -m 0755 sc %{buildroot}%{_bindir} +install -m 0755 psc %{buildroot}%{_bindir} + +# Man pages +install -d -m 0755 %{buildroot}%{_mandir}/man1 +install -m 0644 sc.1 %{buildroot}%{_mandir}/man1 +install -m 0644 psc.1 %{buildroot}%{_mandir}/man1 + +# Data +install -d -m 0755 %{buildroot}%{_datadir}/sc +install -m 0644 tutorial.sc %{buildroot}%{_datadir}/sc + +%files +%doc CHANGES README SC.MACROS TODO +%{_bindir}/* +%{_mandir}/man1/* +%{_datadir}/sc + +%changelog +* Wed Nov 05 2014 Mat Booth - 7.16-1 +- Initial version of sc package + diff --git a/sources b/sources new file mode 100644 index 0000000..e69de29