This repository was archived by the owner on Nov 4, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
scheduler : insert.c
sᴀʟᴠᴀᴛᴏʀᴇ ʙ edited this page Jul 17, 2017
·
2 revisions
/*
* Inserisce un nuovo task nella lista ricevuta
*/
void insertNewTask(ReadyQueue **head) {
char name[9];
byte priority, exec_cycles;
requestData(name, &priority, &exec_cycles);
addTask(head, name, priority, exec_cycles);
}Il passaggio di un doppio puntatore a head è necessario affinché si possa modificare non solo il task puntato, ma anche il valore del puntatore stesso (come spiegato in 2.1 main.c) dato che l’inserimento di ogni primo task modifica tale campo (un singolo puntatore manterrebbe la modifica localmente allo spazio degli indirizzi di insertNewTask(), senza conseguentemente aggiornare la variabile nel main).
void requestData(char *name, byte *priority, byte *exec_cycles) {
requestName(name);
int appo[2] = { 0, 9 };
*priority = selectOption("Inserisci priorita' (tra 0 e 9): ", appo, NULL, 0);
appo[0] = 1;
appo[1] = 99;
*exec_cycles = selectOption("Inserisci cicli di esecuzione (tra 1 e 99): “, appo, NULL, 0);
}requestData delega la richiesta del nome ad un’altra funzione e gestisce gli altri 3 campi.
void requestName(char *name) {
int rc = OK;
do {
printf("Inserisci nome (MAX 8 caratteri): ");
rc = getLine(name, sizeof(char[9]));
if (rc == TOO_LONG) {
printf("Nome troppo lungo. Riprovare.\n");
} else if (rc == NO_INPUT) {
printf("Nessun carattere inserito. Riprovare.\n");
} else if (rc == INVALID) {
printf("Nome non valido (evita spazi o invio) . Riprovare.\n");
}
} while (rc != OK);
}Vengono impiegate le funzioni di acquisizione dei dati presenti in utilites.c.
Made with ❤️ by Owanesh and MatteoMauro | MIT ©