Skip to content

Commit

Permalink
Merge branch 'shell'
Browse files Browse the repository at this point in the history
  • Loading branch information
Marthenn committed Apr 29, 2023
2 parents f2201cc + 2c5ccf6 commit 536ff0f
Showing 1 changed file with 50 additions and 17 deletions.
67 changes: 50 additions & 17 deletions src/user-shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,15 @@ bool clusterExist(struct FAT32DirectoryTable table, uint32_t clusterNumber){
return FALSE;
}

bool checxt(char* filename) {
for (int i = 0; i < slen(filename); i++) {
if (filename[i] == '.') {
return TRUE;
}
}
return FALSE;
}

void cd(char* filename){
// check if ..
if (strcmp("..\0", filename, 2)){
Expand Down Expand Up @@ -312,10 +321,13 @@ void cd(char* filename){
syscall(5, (uint32_t) "No such directory\n", 18, 0xf);
return;
}
for (int i = 0; i < slen(name); i++){
curDirName[slen(curDirName)] = name[i];
if(!strcmp(curDirName + 1,name,slen(name))){
for (int i = 0; i < slen(name); i++){
curDirName[slen(curDirName)] = name[i];
}
curDirName[slen(curDirName)] = '/';
}
curDirName[slen(curDirName)] = '/';

curTable = table;
currenDir = (table.table[0].cluster_high << 16 | table.table[0].cluster_low);
}
Expand Down Expand Up @@ -649,6 +661,9 @@ void mv(char* source_dest) {
for(int i = 0; i < slen(dest_ext); i++){
dest_request.ext[i] = dest_ext[i];
}
if (!checxt(source)) {
dest_request.buffer_size = 0;
}
syscall(1, (uint32_t) &dest_request, (uint32_t) &retcode, 0);
syscall(2, (uint32_t) &dest_request, (uint32_t) &retcode, 0);

Expand Down Expand Up @@ -703,7 +718,6 @@ void ls(){
request2.name[i] = curTable.table[0].name[i];
}
syscall(1, (uint32_t) &request2, (uint32_t) &retcode, 0);

struct FAT32DirectoryTable table = curTable;
for(int i = 1 ; i < 64 ; i++){
if(table.table[i].attribute || table.table[i].cluster_high || table.table[i].cluster_low){
Expand Down Expand Up @@ -748,54 +762,70 @@ void cp(char* source_dest) {
char source_name[9] = "\0\0\0\0\0\0\0\0\0";
char source_ext[4] = "\0\0\0\0";
readfname(source, (char *)source_name, (char *)source_ext);
struct ClusterBuffer cl = {0};
struct FAT32DriverRequest source_request = {
.buf = &cl,
.name = "\0\0\0\0\0\0\0\0",
.ext = "\0\0\0",
.parent_cluster_number = currenDir,
.buffer_size = CLUSTER_SIZE,
.name = "\0\0\0\0\0\0\0\0",
.ext = "\0\0\0",
.parent_cluster_number = currenDir,
.buffer_size = CLUSTER_SIZE,
};
struct ClusterBuffer cl = {0};
struct FAT32DirectoryTable table = curTable;
int service;
if (checxt(source)) {
service = 0;
source_request.buf = &cl;
}
else {
service = 1;
source_request.buf = &table;
}
int32_t retcode = 0;
for(int i = 0; i < slen(source_name); i++){
source_request.name[i] = source_name[i];
}
for(int i = 0; i < slen(source_ext); i++){
source_request.ext[i] = source_ext[i];
}
syscall(0, (uint32_t) &source_request, (uint32_t) &retcode, 0);
syscall(service, (uint32_t) &source_request, (uint32_t) &retcode, 0);

if (retcode == 0) {
if (retcode != 2) {
uint32_t retcode_2 = 0;
char dest_name[9] = "\0\0\0\0\0\0\0\0\0";
char dest_ext[4] = "\0\0\0\0";
readfname(dest, (char *)dest_name, (char *)dest_ext);
struct FAT32DriverRequest dest_request = {
.buf = &cl,
.name = "\0\0\0\0\0\0\0\0",
.ext = "\0\0\0",
.parent_cluster_number = currenDir,
.buffer_size = CLUSTER_SIZE
};
if (service == 0) {
dest_request.buf = &cl;
}
else {
dest_request.buf = &table;
dest_request.buffer_size = 0;
}

for(int i = 0; i < slen(dest_name); i++){
dest_request.name[i] = dest_name[i];
}
for(int i = 0; i < slen(dest_ext); i++){
dest_request.ext[i] = dest_ext[i];
}
syscall(1, (uint32_t) &dest_request, (uint32_t) &retcode_2, 0);
syscall(2, (uint32_t) &dest_request, (uint32_t) &retcode_2, 0);
}
else if (retcode == 3){
else {
syscall(5, (uint32_t) "cp: cannot stat '", 18, 0xF);
syscall(5, (uint32_t) source, 12, 0xF);
syscall(5, (uint32_t) "': No such file or directory\n", 29, 0xF);
}
else {
/* else {
syscall(5, (uint32_t) "cp: cannot copy directory\n", 27, 0xF);
}
} */
}


void dfsPath(char* filename, char* path, struct FAT32DirectoryTable table, char* found){
// parse filename to name and ext
char savedPath[300] = "\0";
Expand Down Expand Up @@ -972,6 +1002,9 @@ int main(void) {
rootTable = curTable;

while (TRUE) {
request2.buf = &rootTable;
syscall(1, (uint32_t) &request2, (uint32_t) &retcode, 0);

// ntarAja in bios green light
syscall(5, (uint32_t) "ntarAja@OS-IF2230:", 19, 0x0A);
syscall(5, (uint32_t) curDirName, 300, 0x09);
Expand Down

0 comments on commit 536ff0f

Please sign in to comment.