/* * 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); }
//----------------------------------------------------------------------------- // // 擬似命令(ニーモニック)の解決 // 返り値は分解された各命令がラベルを使うかどうか // //----------------------------------------------------------------------------- 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; }