void VMMain(int argc, char *argv[]){ int FileDescriptor, Length, Offset; char Buffer[1024]; VMPrint("VMMain opening longtest.txt\n"); VMFileOpen("longtest.txt", O_CREAT | O_TRUNC | O_RDWR, 0644, &FileDescriptor); VMPrint("VMMain VMFileOpen returned %d\n", FileDescriptor); Offset = ((int)'~' - (int)' ') + 1; for(Length = 0; Length < sizeof(Buffer); Length++){ Buffer[Length] = ' ' + (Length % Offset); } VMPrint("VMMain writing file\n"); Length = sizeof(Buffer); VMFileWrite(FileDescriptor,Buffer,&Length); VMPrint("VMMain VMFileWrite returned %d\n", Length); VMPrint("VMMain seeking file\n"); VMFileSeek(FileDescriptor, 448, 0, &Offset); VMPrint("VMMain VMFileSeek offset at %d\n",Offset); VMPrint("VMMain reading file\n"); Length = 128; VMFileRead(FileDescriptor,Buffer,&Length); VMPrint("VMMain VMFileRead returned %d\n", Length); if(0 <= Length){ Buffer[Length] = '\0'; VMPrint("VMMain read in \"%s\"\n", Buffer); } VMPrint("VMMain closing file\n"); VMFileClose(FileDescriptor); VMPrint("Goodbye\n"); }
void VMMain(int argc, char *argv[]){ int DirDescriptor, FileDescriptor, Length; char LineBuffer[1024]; char DirectoryName[VM_FILE_SYSTEM_MAX_PATH]; SVMDirectoryEntry DirectoryEntry; int CharactersIn = 0; int Mil, Kil, One; while(1){ VMDirectoryCurrent(DirectoryName); VMPrint("%s> ",DirectoryName); CharactersIn = 0; while(1){ Length = 1; VMFileRead(0, LineBuffer + CharactersIn, &Length); if('\n' == LineBuffer[CharactersIn]){ LineBuffer[CharactersIn] = '\0'; break; } if((0 == CharactersIn)&&(' ' == LineBuffer[CharactersIn])){ continue; } CharactersIn++; } while(0 < CharactersIn){ CharactersIn--; if(' ' != LineBuffer[CharactersIn]){ CharactersIn++; break; } LineBuffer[CharactersIn] = '\0'; } if(StringMatch(LineBuffer,"exit")){ break; } else if(StringMatch(LineBuffer,"ls")){ if(VM_STATUS_SUCCESS == VMDirectoryOpen(DirectoryName, &DirDescriptor)){ VMPrint(" DATE | TIME | TYPE | SIZE | SFN | LFN\n"); while(VM_STATUS_SUCCESS == VMDirectoryRead(DirDescriptor, &DirectoryEntry)){ VMPrint("%04d/%02d/%02d %02d:%02d %s ",DirectoryEntry.DModify.DYear, DirectoryEntry.DModify.DMonth, DirectoryEntry.DModify.DDay, (DirectoryEntry.DModify.DHour % 12) ? (DirectoryEntry.DModify.DHour % 12) : 12 , DirectoryEntry.DModify.DMinute, DirectoryEntry.DModify.DHour >= 12 ? "PM" : "AM"); VMPrint("%s ", DirectoryEntry.DAttributes & VM_FILE_SYSTEM_ATTR_DIRECTORY ? "<DIR> " : "<FILE>"); Mil = DirectoryEntry.DSize / 1000000; Kil = (DirectoryEntry.DSize / 1000) % 1000; One = DirectoryEntry.DSize % 1000; if(Mil){ VMPrint("%3d,%03d,%03d ",Mil, Kil, One); } else if(Kil){ VMPrint(" %3d,%03d ", Kil, One); } else if(0 == (DirectoryEntry.DAttributes & VM_FILE_SYSTEM_ATTR_DIRECTORY)){ VMPrint(" %3d ",One); } else{ VMPrint(" "); } VMPrint("%-13s %s\n",DirectoryEntry.DShortFileName, DirectoryEntry.DLongFileName); } VMDirectoryClose(DirDescriptor); } else{ VMPrint("Failed to open directory %s!\n", DirectoryName); } } else if(StringMatchN(LineBuffer,"cd ",3)){ CharactersIn = 2; while(' ' == LineBuffer[CharactersIn]){ CharactersIn++; } if('\0' == LineBuffer[CharactersIn]){ CharactersIn--; LineBuffer[CharactersIn] = '/'; } if(VM_STATUS_SUCCESS != VMDirectoryChange(LineBuffer + CharactersIn)){ VMPrint("Failed to change directory to %s!\n", LineBuffer + CharactersIn); } } else if(StringMatchN(LineBuffer,"rm ",3)){ CharactersIn = 2; while(' ' == LineBuffer[CharactersIn]){ CharactersIn++; } if('\0' == LineBuffer[CharactersIn]){ CharactersIn--; LineBuffer[CharactersIn] = '/'; } if(VM_STATUS_SUCCESS != VMDirectoryUnlink(LineBuffer + CharactersIn)){ VMPrint("Failed to remove node %s!\n", LineBuffer + CharactersIn); } } else if(StringMatchN(LineBuffer,"mkdir ",6)){ CharactersIn = 5; while(' ' == LineBuffer[CharactersIn]){ CharactersIn++; } if('\0' == LineBuffer[CharactersIn]){ CharactersIn--; LineBuffer[CharactersIn] = '/'; } if(VM_STATUS_SUCCESS != VMDirectoryCreate(LineBuffer + CharactersIn)){ VMPrint("Failed to create directory %s!\n", LineBuffer + CharactersIn); } } else if(StringMatchN(LineBuffer,"cat ",4)){ CharactersIn = 3; while(' ' == LineBuffer[CharactersIn]){ CharactersIn++; } if(VM_STATUS_SUCCESS == VMFileOpen(LineBuffer + CharactersIn, O_RDONLY, 0644, &FileDescriptor)){ Length = sizeof(LineBuffer); while(VM_STATUS_SUCCESS == VMFileRead(FileDescriptor, LineBuffer, &Length)){ if(Length){ VMFileWrite(1,LineBuffer,&Length); } if(Length < sizeof(LineBuffer)){ break; } Length = sizeof(LineBuffer); } VMFileClose(FileDescriptor); } else{ VMPrint("Failed to open file %s!\n", LineBuffer + CharactersIn); } } } }