LIBOBJ = $(EMHOME)/modules/lib/libobject.a
INCLUDE = $(EMHOME)/h
CFLAGS = -I. -I$(INCLUDE) -O
-TARGETS = cv
+TARGETS = cv chstack
all: $(TARGETS)
install: all
../../install cv
+ ../../install chstack
cmp: all
- ../../compare cv
+ -../../compare cv
+ -../../compare chstack
cv: cv.o
$(CC) $(LDFLAGS) -o cv cv.o $(LIBOBJ)
+chstack: chstack.o
+ $(CC) $(LDFLAGS) -o chstack chstack.o
+
clean:
rm -f $(TARGETS) *.o nohup.out Out
pr:
- @pr Makefile cv.c
+ @pr Makefile cv.c chstack.c
opr:
make pr | opr
--- /dev/null
+/* chstack - set stack size */
+
+#include <stdio.h>
+
+#define OFF 48L /* offset of stacksize in file */
+#define MAX 32768L /* maximum accepted stacksize */
+
+main(argc, argv)
+int argc;
+char *argv[];
+{
+ char *p;
+ long n;
+ int fd;
+ long current;
+ long old;
+ long atol(), lseek();
+
+ p = argv[1];
+ if (argc != 3 || (*p != '=' && *p != '+' && *p != '-')) {
+ fprintf(stderr, "Usage: %s {=+-}amount file\n", argv[0]);
+ exit(1);
+ }
+ n = atol(p+1);
+
+ fd = open(argv[2], 2);
+ if (fd < 0) {
+ fprintf(stderr, "%s: cannot open %s\n", argv[0], argv[2]);
+ exit(1);
+ }
+
+ if (lseek(fd, OFF, 0) < 0 || getlong(fd, ¤t) < 0) {
+ fprintf(stderr, "%s: cannot read %s\n", argv[0], argv[2]);
+ exit(1);
+ }
+ old = current;
+ if (*p == '=') current = n;
+ else if (*p == '-') current -= n;
+ else current += n;
+
+ if (current > MAX || current <= 0) {
+ fprintf(stderr, "%s: resulting stack size %ld too large or too small\n", argv[0], current);
+ exit(1);
+ }
+ if (lseek(fd, OFF, 0) < 0 || putlong(fd, ¤t) < 0) {
+ fprintf(stderr, "%s: can't modify %s\n", argv[0], argv[2]);
+ exit(1);
+ }
+ printf("%s: Stack area changed from %ld to %ld bytes.\n",
+ argv[2], old, current);
+ exit(0);
+}
+
+getlong(fd, l)
+ long *l;
+{
+ char buf[4];
+
+ if (read(fd, buf, 4) < 4) return -1;
+ *l = ((((long)(buf[3]&0377)<<8)|(long)(buf[2]&0377)<<8)|(long)(buf[1]&0377)<<8)|(long)(buf[0]&0377);
+ return 0;
+}
+
+putlong(fd, l)
+ long *l;
+{
+ char buf[4];
+
+ buf[3] = *l >> 24;
+ buf[2] = *l >> 16;
+ buf[1] = *l >> 8;
+ buf[0] = *l;
+ if (write(fd, buf, 4) < 4) return -1;
+ return 0;
+}
char *program ;
-char flag ;
-
int sep_id;
+extern long lseek();
#define TEXTSG 0
#define ROMSG 1
#define DATASG 2
int argc;
char *argv[];
{
- register int nsect;
- long magic ;
- long textsize ;
- long datasize ;
- long bsssize;
- long symstart;
long stacksize = 0x1000;
output = 1;
long off = OFF_CHAR(outhead);
register char *p;
- chars = malloc(outhead.oh_nchar);
+ chars = malloc((unsigned)(outhead.oh_nchar));
if (! chars) return 0;
names = (struct outname *)
malloc(outhead.oh_nname * sizeof(struct outname));
free(chars);
return 0;
}
- xptr = malloc(outhead.oh_nchar + 9 * outhead.oh_nname);
+ xptr = malloc((unsigned)(outhead.oh_nchar) + 9 * outhead.oh_nname);
if (! xptr) {
free(chars);
free((char *) names);
break;
default:
fprintf(stderr,"warning: unknown s_type: %d\n",
- names[i].on_type & S_TYP);
+ (int)(names[i].on_type) & S_TYP);
}
}
if (names[i].on_type & S_EXT) xnm.s_type |= 0x20;