Beispiel #1
0
/* 
 * Show the first nshow messages in the window.
 * This depends on nntpfs presenting contiguously
 * numbered directories, and on the qid version being
 * the topmost numbered directory.
 */
void
dirwindow(Window *w)
{
	if((hi=gethi()) < 0)
		return;

	if(w->data < 0)
		w->data = winopenfile(w, "data");

	fprint(w->ctl, "dirty\n");
	
	winopenbody(w, OWRITE);
	lo = adddir(w->body, hi, 0, nshow);
	winclean(w);
}
Beispiel #2
0
//-----------------------------------------------------------------------------
//
// 擬似命令(ニーモニック)の解決
// 返り値は分解された各命令がラベルを使うかどうか
//
//-----------------------------------------------------------------------------
vector<bool> mnemonic(char* instName, char mnemonicBuffer[][MAX_LINE_SIZE], map<uint32_t, string>& labelNames, uint32_t currentLine)
{
	uint32_t rs = 0;
	uint32_t rt = 0;
	uint32_t rd = 0;
	uint32_t imm = 0;
	double d = 0;
	char label[MAX_LINE_SIZE];
	char dummy[MAX_LINE_SIZE];
	vector<bool> useLabels;

	if (eq(instName, "nop"))
	{
		if (sscanf(mnemonicBuffer[0], form, dummy) == 1)
		{
			sprintf(mnemonicBuffer[0], "add\t$r0, $r0, $r0");
			useLabels.push_back(false);
		}
		return	useLabels;
	}
	if (eq(instName, "mov"))
	{
		if (sscanf(mnemonicBuffer[0], formRR, dummy, &rt, &rs) == 3)
		{
			sprintf(mnemonicBuffer[0], "add\t$r%d, $r%d, $r0", rt, rs);
			useLabels.push_back(false);
		}
		return	useLabels;
	}
	if (eq(instName, "not"))
	{
		if (sscanf(mnemonicBuffer[0], formRR, dummy, &rt, &rs) == 3)
		{
			sprintf(mnemonicBuffer[0], "nor\t$r%d, $r%d, $r0", rt, rs, rs);
			useLabels.push_back(false);
		}
		return	useLabels;
	}
	if (eq(instName, "neg"))
	{
		if (sscanf(mnemonicBuffer[0], formRR, dummy, &rt, &rs) == 3)
		{
			sprintf(mnemonicBuffer[0], "sub\t$r%d, $r0, $r%d", rt, rs);
			useLabels.push_back(false);
		}
		return	useLabels;
	}
	if (eq(instName, "setl"))
	{
		if (sscanf(mnemonicBuffer[0], formRL, dummy, &rs, label) == 3)
		{
			labelNames[currentLine] = string(label);
//			cerr << "assigned (" << currentLine << ", " << string(label) << ") in labelNames" << endl;
			sprintf(mnemonicBuffer[0], "addi\t$r%d, $r0, 0", rs);
			useLabels.push_back(true);
		}
		return	useLabels;
	}
	if (eq(instName, "fliw"))
	{
		if (sscanf(mnemonicBuffer[0], formFD, dummy, &rs, &d) == 3)
		{
			sprintf(mnemonicBuffer[0], "fmvlo\t$f%d, %d", rs, gethi(d));
			useLabels.push_back(false);
			sprintf(mnemonicBuffer[1], "fmvhi\t$f%d, %d", rs, getlo(d));
			useLabels.push_back(false);
		}
		return	useLabels;
	}
	if (eq(instName, "fliw"))
	{
		if (sscanf(mnemonicBuffer[0], formFD, dummy, &rs, &d) == 3)
		{
			sprintf(mnemonicBuffer[0], "fmvlo\t$f%d, %d", rs, gethi(d));
			useLabels.push_back(false);
			sprintf(mnemonicBuffer[1], "fmvhi\t$f%d, %d", rs, getlo(d));
			useLabels.push_back(false);
		}
		return	useLabels;
	}
	useLabels.push_back(false);
	return useLabels;
}