예제 #1
0
/*
 *	print one line into listfile, if -l option set
 */
void lst_line(int val, int opanz)
{
	register int i;

	if (!list_flag || sd_flag == 4) {
		sd_flag = 0;
		return;
	}
	if ((p_line >= ppl) || (c_line == 1)) {
		lst_header();
		lst_attl();
	}
	switch (sd_flag) {
	case 0:
		fprintf(lstfp, "%04x  ", val & 0xffff);
		break;
	case 1:
		fprintf(lstfp, "%04x  ", sd_val & 0xffff);
		break;
	case 2:
		fprintf(lstfp, "      ");
		break;
	case 3:
		fprintf(lstfp, "%04x              ", sd_val & 0xffff);
		goto no_data;
	default:
		fatal(F_INTERN, "illegal listflag for function lst_line");
		break;
	}
	if (opanz >= 1) fprintf(lstfp, "%02x ", ops[0] & 0xff);
		else fprintf(lstfp, "   ");
	if (opanz >= 2) fprintf(lstfp, "%02x ", ops[1] & 0xff);
		else fprintf(lstfp, "   ");
	if (opanz >= 3) fprintf(lstfp, "%02x ", ops[2] & 0xff);
		else fprintf(lstfp, "   ");
	if (opanz >= 4) fprintf(lstfp, "%02x ", ops[3] & 0xff);
		else fprintf(lstfp, "   ");
	no_data:
	fprintf(lstfp, "%6d %6d %s", c_line, s_line, line);
	if (errnum) {
		fprintf(errfp, "=> %s", errmsg[errnum]);
		putc('\n', errfp);
		errnum = 0;
		p_line++;
	}
	sd_flag = 0;
	p_line++;
	if (opanz > 4 && sd_flag == 0) {
		opanz -= 4;
		i = 4;
		sd_val = val;
		while (opanz > 0) {
			if (p_line >= ppl) {
				lst_header();
				lst_attl();
			}
			s_line++;
			sd_val += 4;
			fprintf(lstfp, "%04x  ", sd_val & 0xffff);
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			fprintf(lstfp, "%6d %6d\n", c_line, s_line);
			p_line++;
		}
	}
}
예제 #2
0
파일: z80aout.c 프로젝트: meesokim/spc1000
/*
 *	print one line into listfile, if -l option set
 */
void lst_line(int val, int opanz)
{
	register int i = 0;
	char *p;
	int tab;
	char code[256];
	if (!list_flag || sd_flag == 4) {
		sd_flag = 0;
		return;
	}
	if ((p_line >= ppl) || (c_line == 1)) {
		lst_header();
		lst_attl();
	}
	p = line;
	memset(code, 0, sizeof(code));
	while(*p != 0) {
		if (*p == ';') 	
		    break;
		if (*p == '\t') {
			tab = 4 - i % 4;
			while(tab--) code[i++] = ' ';
		} else if (*p < '\n')
			code[i++] = ' ';
		else if (*p != '\n') {
			code[i++] = *p;
		}
		p++;
	}
	i = strlen(code);
	while(i < 40) code[i++] = ' ';
	fprintf(lstfp, "%s;", code);
	if (*p == 0)
		p = "\n";
//	if (i > 0 && *(p-1) == ';') {
//		line[i] = 0;
//		line[i] = ';';
//	} else
//		p = line;
	switch (sd_flag) {
	case 0:
		fprintf(lstfp, "%04x  ", val & 0xffff);
		break;
	case 1:
		fprintf(lstfp, "%04x  ", sd_val & 0xffff);
		break;
	case 2:
		fprintf(lstfp, "      ");
		break;
	case 3:
		fprintf(lstfp, "%04x              ", sd_val & 0xffff);
		goto no_data;
	default:
		fatal(F_INTERN, "illegal listflag for function lst_line");
		break;
	}
	if (opanz >= 1) fprintf(lstfp, "%02x ", ops[0] & 0xff);
		else fprintf(lstfp, "   ");
	if (opanz >= 2) fprintf(lstfp, "%02x ", ops[1] & 0xff);
		else fprintf(lstfp, "   ");
	if (opanz >= 3) fprintf(lstfp, "%02x ", ops[2] & 0xff);
		else fprintf(lstfp, "   ");
	if (opanz >= 4) fprintf(lstfp, "%02x ", ops[3] & 0xff);
		else fprintf(lstfp, "   ");
	no_data:
	fprintf(lstfp, "%6d %6d %s", c_line, s_line, p);
	if (errnum) {
		fprintf(errfp, "=> %s", errmsg[errnum]);
		putc('\n', errfp);
		errnum = 0;
		p_line++;
	}
	sd_flag = 0;
	p_line++;
	if (opanz > 4 && sd_flag == 0) {
		opanz -= 4;
		i = 4;
		sd_val = val;
		while (opanz > 0) {
			if (p_line >= ppl) {
				lst_header();
				lst_attl();
			}
			s_line++;
			sd_val += 4;
			fprintf(lstfp, "%-40s;", " ");
			fprintf(lstfp, "%04x  ", sd_val & 0xffff);
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			if (opanz-- > 0) fprintf(lstfp, "%02x ",
						 ops[i++] & 0xff);
				else fprintf(lstfp, "   ");
			fprintf(lstfp, "%6d %6d\n", c_line, s_line);
			p_line++;
		}
	}
}