Skip to content
Snippets Groups Projects
Commit 514b0b2a authored by Man hing Ling's avatar Man hing Ling
Browse files

RM CAT TYPE MV LS fonctionnels, manque CP

parent 9cbc6286
No related branches found
No related tags found
No related merge requests found
...@@ -51,20 +51,6 @@ void writeBlock(SD_info *sd, unsigned int numBlock, int offset, char *source, in ...@@ -51,20 +51,6 @@ void writeBlock(SD_info *sd, unsigned int numBlock, int offset, char *source, in
} }
// void eraseSD(SD_info *sd){ //met des 0 partout dans la carte SD
// char zeros[BLOCK_SIZE];
// for(int i = 0; i< BLOCK_SIZE-1;i++){
// zeros[i] = '0';
// }
// zeros[BLOCK_SIZE-1] = '\0';
//
// for (int blockNum = 0; blockNum < 5000; blockNum ++){
// //printf("erase\n");
// writeBlockSD(sd,blockNum,zeros);
// }
// return;
// }
void LS(SD_info *sd) { void LS(SD_info *sd) {
char buffer[MAX_FILENAME_LENGTH]; char buffer[MAX_FILENAME_LENGTH];
int fileCount = 0; int fileCount = 0;
...@@ -154,11 +140,7 @@ void RM(SD_info *sd, char *filename) { ...@@ -154,11 +140,7 @@ void RM(SD_info *sd, char *filename) {
} }
for (int blockNum = offset+1; blockNum < offset + 16; blockNum++) { for (int blockNum = offset+1; blockNum < offset + 16; blockNum++) {
int startOffset = 0;
if (blockNum == offset) {
startOffset = MAX_FILENAME_LENGTH;
}
//for (int chunkStart = startOffset; chunkStart < BLOCK_SIZE/2; chunkStart += CHUNK_SIZE) { //for (int chunkStart = startOffset; chunkStart < BLOCK_SIZE/2; chunkStart += CHUNK_SIZE) {
// int chunkSize = min(CHUNK_SIZE, BLOCK_SIZE/2 - chunkStart); // int chunkSize = min(CHUNK_SIZE, BLOCK_SIZE/2 - chunkStart);
...@@ -291,8 +273,17 @@ void TYPE(SD_info *sd, char *filename, char *data) { ...@@ -291,8 +273,17 @@ void TYPE(SD_info *sd, char *filename, char *data) {
writeBlock(sd,blockNum, 0, filename, sizeFilename); writeBlock(sd,blockNum, 0, filename, sizeFilename);
placeFound = blockNum; placeFound = blockNum;
// Lire les données depuis l'entrée standard et écrire dans le fichier //chercher où mettre les données du
int dataBlockNum = findAvailableBlock(sd); // Premier bloc de données à partir du bloc 1040 int dataBlockNum = findAvailableBlock(sd); // Premier bloc de données à partir du bloc 1040
char dataBlockNumBuffer[CHUNK_SIZE];
readBlock(sd, dataBlockNum, 0, dataBlockNumBuffer, CHUNK_SIZE);
while (dataBlockNumBuffer[0] != 0)
{
dataBlockNum++;
readBlock(sd, dataBlockNum, 0, dataBlockNumBuffer, CHUNK_SIZE);
}
int blockSizeUsed = 0; // Compteur d'octets dans le bloc actuel int blockSizeUsed = 0; // Compteur d'octets dans le bloc actuel
char chunkBuffer[CHUNK_SIZE]; char chunkBuffer[CHUNK_SIZE];
...@@ -356,7 +347,7 @@ void CAT(SD_info *sd, char *filename) { ...@@ -356,7 +347,7 @@ void CAT(SD_info *sd, char *filename) {
char filenameBuffer[MAX_FILENAME_LENGTH]; char filenameBuffer[MAX_FILENAME_LENGTH];
char byteBuffer[CHUNK_SIZE]; char byteBuffer[CHUNK_SIZE];
char dataBuffer[CHUNK_SIZE]; char dataBuffer[CHUNK_SIZE];
int offset;
// Parcours des blocs réservés pour la description des fichiers (superbloc) // Parcours des blocs réservés pour la description des fichiers (superbloc)
for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) { for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) {
...@@ -368,29 +359,26 @@ void CAT(SD_info *sd, char *filename) { ...@@ -368,29 +359,26 @@ void CAT(SD_info *sd, char *filename) {
// Parcours les blocs de description // Parcours les blocs de description
for (int descrBlockNum=1; descrBlockNum<MAX_BLOCKS_PER_FILE_DESCRIPTION; descrBlockNum++) { for (int descrBlockNum=1; descrBlockNum<MAX_BLOCKS_PER_FILE_DESCRIPTION; descrBlockNum++) {
if (descrBlockNum==0) {
offset=MAX_FILENAME_LENGTH;
} else {
offset=0;
}
// Lecture des octets deux par deux // Lecture des octets deux par deux
for (int i=0; i<BLOCK_SIZE;i+=2) { //for (int i=0; i<BLOCK_SIZE;i+=2) {
readBlock(sd,descrBlockNum+blockNum, offset+i, byteBuffer, 2); readBlock(sd,descrBlockNum+blockNum, 0, byteBuffer, 2);
printf("\nByte buffer: %s\n", byteBuffer); if (byteBuffer[0] == 0 && byteBuffer[1]== 0) return;
// printf("\nByte buffer: %s\n", byteBuffer);
// Lire les numéros de blocs associés à ce fichier depuis les blocs de description // Lire les numéros de blocs associés à ce fichier depuis les blocs de description
int dataBlockNum = reconstituteNumber(byteBuffer); int dataBlockNum = reconstituteNumber(byteBuffer);
// Vérifier si le numéro de bloc est valide (non nul) // Vérifier si le numéro de bloc est valide (non nul)
if (dataBlockNum == 0) { //if (dataBlockNum == 0) {
return; // Fin du fichier // return; // Fin du fichier
} //}
//for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) { //for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) {
// Lire et afficher le contenu du bloc de données // Lire et afficher le contenu du bloc de données
readBlock(sd,dataBlockNum, 0, dataBuffer, CHUNK_SIZE); readBlock(sd,dataBlockNum, 0, dataBuffer, CHUNK_SIZE);
printf("\n%s\n",dataBuffer); printf("\n%s\n",dataBuffer);
//} //}
} //}
} }
return; // Fichier affiché, sortie de la fonction return; // Fichier affiché, sortie de la fonction
...@@ -508,11 +496,11 @@ int main(int argc, char *argv[]) { ...@@ -508,11 +496,11 @@ int main(int argc, char *argv[]) {
printf("taille=%ld\n\n",size); printf("taille=%ld\n\n",size);
printf("Pico ordinateur OK\n\n"); printf("Pico ordinateur OK\n\n");
// char current_cmd[CMD_SIZE + 1]; // +1 pour le caractère nul
erase(&sd,0,15000); erase(&sd,0,15000);
current_cmd[0] = '\0'; // Initialise la chaîne vide current_cmd[0] = '\0'; // Initialise la chaîne vide
printf("PicoOrdi>"); printf("PicoOrdi>");
//eraseSD(&sd);
while (1) { while (1) {
_delay_ms(10); _delay_ms(10);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment