Files
tomasulo-simulator/pages/index.js
2023-06-08 17:17:11 -03:00

149 lines
5.5 KiB
JavaScript

import Head from 'next/head'
import Link from 'next/link'
import Form from 'react-bootstrap/Form';
import Table from 'react-bootstrap/Table'
import { useState } from 'react';
import Image from 'next/image'
import Container from 'react-bootstrap/Container'
import Nav from 'react-bootstrap/Nav'
import Navbar from 'react-bootstrap/Navbar';
import NavDropdown from 'react-bootstrap/NavDropdown'
import Row from 'react-bootstrap/Row'
import Col from 'react-bootstrap/Col'
import Button from 'react-bootstrap/Button';
export default function Home() {
const [instructionStatus, setInstructionStatus] = useState([]);
const geraTabelaParaInserirInstrucoes = (nInst) => {
let tabela = [];
for (let i = 0; i < nInst; i++) {
let d = "D" + i;
let r = "R" + i;
let s = "S" + i;
let t = "T" + i;
tabela.push(
<tr key={i}>
<td>
<select className="form-control" size="1" name={d} id={d}>
<option value="">Operand</option>
<option value="ADD">ADD</option>
<option value="ADDD">ADDD</option>
<option value="BEQ">BEQ</option>
<option value="BNEZ">BNEZ</option>
<option value="DADDUI">DADDUI</option>
<option value="DIVD">DIVD</option>
<option value="LD">LD</option>
<option value="MULTD">MULTD</option>
<option value="SD">SD</option>
<option value="SUBD">SUBD</option>
</select>
</td>
<td>
<input
className="form-control"
type="text"
name={r}
id={r}
size="3"
maxLength="3"
/>
</td>
<td>
<input
className="form-control"
type="text"
name={s}
id={s}
size="3"
maxLength="5"
/>
</td>
<td>
<input
className="form-control"
type="text"
name={t}
id={t}
size="3"
maxLength="3"
/>
</td>
</tr>
);
}
return tabela;
};
const handleGenerateTable = (event) => {
const nInst = event.target.value;
setInstructionStatus(geraTabelaParaInserirInstrucoes(nInst));
};
return (
<>
<Head>
<title>Tomasulo</title>
<meta name="description" content="Generated by create next app" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
crossorigin="anonymous"
/>
</Head>
<Navbar bg="dark" variant="dark" expand="lg">
<Container>
<Navbar.Brand href="/">Tomasulo</Navbar.Brand>
</Container>
</Navbar>
<main>
<Container>
<Row className="row my-4">
<Col>
<h3>Instructions</h3>
</Col>
<Col className="text-end">
<Link href="/runner">
<Button className="ms-4" variant="primary">Execute</Button>
</Link>
</Col>
</Row>
<Row className="mb-3">
<Col>
<Form.Control
className="form-control-sm"
type="number"
placeholder="Select number of instructions"
onChange={handleGenerateTable}
/>
</Col>
</Row>
<Row>
<Col>
<Table bordered>
<thead>
<tr>
<th>Op</th>
<th>RD</th>
<th>RS</th>
<th>RT</th>
</tr>
</thead>
<tbody>
{instructionStatus}
</tbody>
</Table>
</Col>
</Row>
</Container>
</main>
</>
)
}