瀏覽代碼

Merge deletion of many undead files.

George Koehler 11 年之前
父節點
當前提交
c40034452e
共有 9 個文件被更改,包括 92 次插入54 次删除
  1. 1 1
      lang/cem/cemcom.ansi/ch3mon.c
  2. 3 2
      lang/cem/cemcom.ansi/cstoper.c
  3. 1 1
      modules/src/em_code/em.c
  4. 6 3
      plat/pc86/boot.s
  5. 26 10
      util/ack/util.c
  6. 23 31
      util/amisc/aslod.c
  7. 7 1
      util/ass/ass80.c
  8. 21 1
      util/ass/assci.c
  9. 4 4
      util/int/do_conv.c

+ 1 - 1
lang/cem/cemcom.ansi/ch3mon.c

@@ -20,7 +20,7 @@
 #include	"sizes.h"
 
 extern char options[];
-extern arith full_mask[/*MAXSIZE*/];	/* cstoper.c */
+extern arith full_mask[/*MAXSIZE + 1*/];	/* cstoper.c */
 char *symbol2str();
 
 ch3mon(oper, expp)

+ 3 - 2
lang/cem/cemcom.ansi/cstoper.c

@@ -16,7 +16,8 @@
 #include	"Lpars.h"
 #include	"assert.h"
 
-arith full_mask[MAXSIZE];/* full_mask[1] == 0XFF, full_mask[2] == 0XFFFF, .. */
+/* full_mask[1] == 0XFF, full_mask[2] == 0XFFFF, .. */
+arith full_mask[MAXSIZE + 1];
 #ifndef NOCROSS
 arith max_int;		/* maximum integer on target machine	*/
 arith max_unsigned;	/* maximum unsigned on target machine	*/
@@ -247,7 +248,7 @@ init_cst()
 
 	while (!(bt < 0))	{
 		bt = (bt << 8) + 0377, i++;
-		if (i == MAXSIZE)
+		if (i > MAXSIZE)
 			fatal("array full_mask too small for this machine");
 		full_mask[i] = bt;
 	}

+ 1 - 1
modules/src/em_code/em.c

@@ -353,7 +353,7 @@ C_magic()
 }
 
 /***    the compact code generating routines	***/
-#define	fit16i(x)	((x) >= (long)0xFFFF8000 && (x) <= (long)0x00007FFF)
+#define	fit16i(x)	((x) >= (long)(-0x8000) && (x) <= (long)0x7FFF)
 #define	fit8u(x)	((x) <= 0xFF)		/* x is already unsigned */
 
 void

+ 6 - 3
plat/pc86/boot.s

@@ -23,7 +23,7 @@
 ! If you ever need to change the boot code, this needs adjusting. I recommend
 ! a hex editor.
 
-PADDING = 0xB9
+PADDING = 0xB7
 
 ! Some definitions.
 
@@ -45,8 +45,8 @@ start2:
 
 	mov ax, cs
 	mov ds, ax
-	mov es, ax
 	mov ss, ax
+	! Defer setting es until after probing the drive.
 	
 	! Initialise the stack, which will start at the top of our segment and work
 	! down.
@@ -65,10 +65,13 @@ start2:
 	call write_string
 
 	! Probe the drive to figure out its geometry.
+	! This might clobber es.
 	
-	push dx	
+	push dx
 	mov ax, 0x0800           ! service number
 	int 0x13
+	mov ax, cs               ! restore es
+	mov es, ax
 	pop ax
 	jc cant_boot
 	

+ 26 - 10
util/ack/util.c

@@ -13,6 +13,7 @@
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <stdarg.h>
 #include <string.h>
 #include <ctype.h>
 #include "ack.h"
@@ -83,19 +84,26 @@ char *firstblank(str) char *str ; {
 }
 
 /* VARARGS1 */
-fatal(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
+void fatal(const char* fmt, ...)
+{
 	/* Fatal internal error */
+	va_list ap;
+	va_start(ap, fmt);
 	fprintf(STDOUT,"%s: fatal internal error, ",progname) ;
-	fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
+	vfprintf(STDOUT, fmt, ap);
 	fprintf(STDOUT,"\n") ;
 	quit(-2) ;
 }
 
 
 /* VARARGS1 */
-vprint(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
+void vprint(const char* fmt, ...)
+{
 	/* Diagnostic print, no auto NL */
-	fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
+	va_list ap;
+	va_start(ap, fmt);
+	vfprintf(STDOUT, fmt, ap);
+	va_end(ap);
 }
 
 #ifdef DEBUG
@@ -108,30 +116,38 @@ prns(s) register char *s ; {
 #endif
 
 /* VARARGS1 */
-fuerror(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
+void fuerror(const char *fmt, ...) {
 	/* Fatal user error */
+	va_list ap;
+	va_start(ap, fmt);
 	fprintf(STDOUT,"%s: ",progname) ;
-	fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
+	vfprintf(STDOUT, fmt, ap);
 	fprintf(STDOUT,"\n") ;
 	quit(-1) ;
 }
 
 /* VARARGS1 */
-werror(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
+void werror(const char *fmt, ...) {
 	/* Warning user error, w_flag */
+	va_list ap;
 	if ( w_flag ) return ;
+	va_start(ap, fmt);
 	fprintf(STDOUT,"%s: warning, ",progname) ;
-	fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
+	vfprintf(STDOUT, fmt, ap);
 	fprintf(STDOUT,"\n") ;
+	va_end(ap);
 }
 
 /* VARARGS1 */
-error(fmt,p1,p2,p3,p4,p5,p6,p7) char *fmt ; {
+void error(const char *fmt, ...) {
 	/* User error, it is the callers responsibility to quit */
+	va_list ap;
+	va_start(ap, fmt);
 	fprintf(STDOUT,"%s: ",progname) ;
-	fprintf(STDOUT,fmt,p1,p2,p3,p4,p5,p6,p7);
+	vfprintf(STDOUT, fmt, ap);
 	fprintf(STDOUT,"\n") ;
 	n_error++ ;
+	va_end(ap);
 }
 
 do_flush() {

+ 23 - 31
util/amisc/aslod.c

@@ -140,42 +140,29 @@ void emits(struct outsect* section)
 }
 
 
-void iconvert(char* buf, char* str, char* fmt)
-{
-	register char *nf, *ni, *no ;
-	int last, i ;
-	long value ;
-	ni=buf ; no=str ; nf=fmt ;
-	while ( last = *nf++ ) {
-		last -= '0' ;
-		if ( last<1 || last >9 ) fatal("illegal out.h format string\n");
-		value=0 ;
-		i=last ;
-		while ( i-- ) {
-			value = (value<<8) + (ni[i]&0xFF) ;
-		}
-		switch ( last ) {
-		case 0 : break ;
-		case 1 : *no= value ; break ;
-		case 2 : *(unsigned short *)no = value ; break ;
-		case 4 : *(long *)no = value ; break ;
-		default :
-			 fatal("illegal out.h format string\n");
-		}
-		ni += last ; no += last ;
-	}
-}
+/* Macros from modules/src/object/obj.h */
+#define Xchar(ch)	((ch) & 0377)
+#define uget2(c)	(Xchar((c)[0]) | ((unsigned) Xchar((c)[1]) << 8))
+#define get4(c)		(uget2(c) | ((long) uget2((c)+2) << 16))
 
 /* Read the ack.out file header. */
 
 int rhead(FILE* f, struct outhead* head)
 {
-	char buf[sizeof(struct outhead)];
+	char buf[SZ_HEAD], *c;
 	
 	if (fread(buf, sizeof(buf), 1, f) != 1)
 		return 0;
-		
-	iconvert(buf, (char*) head, SF_HEAD);
+
+	c = buf;
+	head->oh_magic = uget2(c); c += 2;
+	head->oh_stamp = uget2(c); c += 2;
+	head->oh_flags = uget2(c); c += 2;
+	head->oh_nsect = uget2(c); c += 2;
+	head->oh_nrelo = uget2(c); c += 2;
+	head->oh_nname = uget2(c); c += 2;
+	head->oh_nemit = get4(c); c += 4;
+	head->oh_nchar = get4(c);
 	return 1;
 }
 
@@ -183,12 +170,17 @@ int rhead(FILE* f, struct outhead* head)
  
 int rsect(FILE* f, struct outsect* sect)
 {
-	char buf[sizeof(struct outsect)];
+	char buf[SZ_SECT], *c;
 	
 	if (fread(buf, sizeof(buf), 1, f) != 1)
 		return 0;
-		
-	iconvert(buf, (char*) sect, SF_SECT);
+
+	c = buf;
+	sect->os_base = get4(c); c += 4;
+	sect->os_size = get4(c); c += 4;
+	sect->os_foff = get4(c); c += 4;
+	sect->os_flen = get4(c); c += 4;
+	sect->os_lign = get4(c);
 	return 1 ;
 }
 

+ 7 - 1
util/ass/ass80.c

@@ -189,7 +189,13 @@ cons_t xgetarb(l,f) int l; FILE *f ; {
 
 	shift=0 ; val=0 ;
 	while ( l-- ) {
-		val += ((cons_t)(c = ctrunc(xgetc(f))))<<shift ;
+		// val += ((cons_t)(c = ctrunc(xgetc(f))))<<shift ;
+		// Bug here: shifts with too large shift counts
+		// get unspecified results. --Ceriel
+		c = ctrunc(xgetc(f));
+		if (shift < 8 * sizeof(cons_t)) {
+			val += ((cons_t)c)<<shift ;
+		}
 		shift += 8 ;
 	}
 	if (c == 0377 && shift > 8 && ((shift>>3)&1)) {

+ 21 - 1
util/ass/assci.c

@@ -849,8 +849,28 @@ extxcon(header) {
 	return ;
 }
 
+/* Added atol() that ignores overflow. --Ceriel */
+long atol(s)
+    register char *s;
+{
+    register long total = 0;
+    register unsigned digit;
+    int minus = 0;
+
+    while (*s == ' ' || *s == '\t') s++;
+    if (*s == '+') s++;
+    else if (*s == '-') {
+        s++;
+        minus = 1;
+    }
+    while ((digit = *s++ - '0') < 10) {
+        total *= 10;
+        total += digit;
+    }
+    return(minus ? -total : total);
+}
+
 extvcon(header) {
-	extern long atol() ;
 	/*
 	 * generate data for a constant initialized by a string.
 	 */

+ 4 - 4
util/int/do_conv.c

@@ -357,22 +357,22 @@ DoCFU()
 			wtrap(WILLCONV, EILLINS);
 		}
 		f = fpop(4L);
-		npush((long) f, 2L);
+		npush((unsigned long) f, 2L);
 		return;
 	case 44:
 		f = fpop(4L);
-		npush((long) f, 4L);
+		npush((unsigned long) f, 4L);
 		return;
 	case 82:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
 		}
 		f = fpop(8L);
-		npush((long) f, 2L);
+		npush((unsigned long) f, 2L);
 		return;
 	case 84:
 		f = fpop(8L);
-		npush((long) f, 4L);
+		npush((unsigned long) f, 4L);
 		return;
 	default:
 		wtrap(WILLCONV, EILLINS);