mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-03-07 19:51:51 +09:00
disk drive listfiles
This commit is contained in:
@@ -193,6 +193,10 @@ shell.coreutils = {
|
|||||||
_TVDOS.variables[key] = value;
|
_TVDOS.variables[key] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
dir: function(args) {
|
||||||
|
let path = (args[1] !== undefined) ? args[1] : "\\"+shell_pwd.join("\\");
|
||||||
|
throw Error("TODO");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Object.freeze(shell.coreutils);
|
Object.freeze(shell.coreutils);
|
||||||
|
|||||||
@@ -16,7 +16,11 @@ class TestDiskDrive(private val driveNum: Int, theRootPath: File? = null) : Bloc
|
|||||||
const val STATE_CODE_FILE_ALREADY_OPENED = 130
|
const val STATE_CODE_FILE_ALREADY_OPENED = 130
|
||||||
const val STATE_CODE_OPERATION_NOT_PERMITTED = 131
|
const val STATE_CODE_OPERATION_NOT_PERMITTED = 131
|
||||||
const val STATE_CODE_READ_ONLY = 132
|
const val STATE_CODE_READ_ONLY = 132
|
||||||
|
const val STATE_CODE_NOT_A_FILE = 133
|
||||||
|
const val STATE_CODE_NOT_A_DIRECTORY = 134
|
||||||
|
const val STATE_CODE_NO_FILE_OPENED = 135
|
||||||
const val STATE_CODE_SYSTEM_IO_ERROR = 192
|
const val STATE_CODE_SYSTEM_IO_ERROR = 192
|
||||||
|
const val STATE_CODE_SYSTEM_SECURITY_ERROR = 193
|
||||||
|
|
||||||
|
|
||||||
val errorMsgs = Array(256) { "" }
|
val errorMsgs = Array(256) { "" }
|
||||||
@@ -27,7 +31,11 @@ class TestDiskDrive(private val driveNum: Int, theRootPath: File? = null) : Bloc
|
|||||||
errorMsgs[STATE_CODE_FILE_NOT_FOUND] = "FILE NOT FOUND"
|
errorMsgs[STATE_CODE_FILE_NOT_FOUND] = "FILE NOT FOUND"
|
||||||
errorMsgs[STATE_CODE_FILE_ALREADY_OPENED] = "FILE ALREADY OPENED"
|
errorMsgs[STATE_CODE_FILE_ALREADY_OPENED] = "FILE ALREADY OPENED"
|
||||||
errorMsgs[STATE_CODE_SYSTEM_IO_ERROR] = "IO ERROR ON SIMULATED DRIVE"
|
errorMsgs[STATE_CODE_SYSTEM_IO_ERROR] = "IO ERROR ON SIMULATED DRIVE"
|
||||||
|
errorMsgs[STATE_CODE_SYSTEM_SECURITY_ERROR] = "SECURITY ERROR ON SIMULATED DRIVE"
|
||||||
errorMsgs[STATE_CODE_OPERATION_NOT_PERMITTED] = "OPERATION NOT PERMITTED"
|
errorMsgs[STATE_CODE_OPERATION_NOT_PERMITTED] = "OPERATION NOT PERMITTED"
|
||||||
|
errorMsgs[STATE_CODE_NOT_A_FILE] = "NOT A FILE"
|
||||||
|
errorMsgs[STATE_CODE_NOT_A_DIRECTORY] = "NOT A DIRECTORY"
|
||||||
|
errorMsgs[STATE_CODE_NO_FILE_OPENED] = "NO FILE OPENED"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,9 +204,45 @@ class TestDiskDrive(private val driveNum: Int, theRootPath: File? = null) : Bloc
|
|||||||
}
|
}
|
||||||
blockSendCount = 0
|
blockSendCount = 0
|
||||||
}
|
}
|
||||||
else if (inputString.startsWith("LIST")) {
|
else if (inputString.startsWith("LISTFILES")) {
|
||||||
// temporary behaviour to ignore any arguments
|
// TODO temporary behaviour to ignore any arguments
|
||||||
resetBuf()
|
resetBuf()
|
||||||
|
if (!fileOpen) {
|
||||||
|
statusCode = STATE_CODE_NO_FILE_OPENED
|
||||||
|
return
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (file.isDirectory) {
|
||||||
|
file.listFiles()!!.forEachIndexed { index, lsfile ->
|
||||||
|
if (index != 0) messageComposeBuffer.write(0x1E)
|
||||||
|
messageComposeBuffer.write(if (lsfile.isDirectory) 0x11 else 0x12)
|
||||||
|
messageComposeBuffer.write(lsfile.name.toByteArray(VM.CHARSET))
|
||||||
|
}
|
||||||
|
|
||||||
|
statusCode = STATE_CODE_STANDBY
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
statusCode = STATE_CODE_NOT_A_DIRECTORY
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e: SecurityException) {
|
||||||
|
statusCode = STATE_CODE_SYSTEM_SECURITY_ERROR
|
||||||
|
return
|
||||||
|
}
|
||||||
|
catch (e1: IOException) {
|
||||||
|
statusCode = STATE_CODE_SYSTEM_IO_ERROR
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (inputString.startsWith("LIST")) {
|
||||||
|
// TODO temporary behaviour to ignore any arguments
|
||||||
|
resetBuf()
|
||||||
|
if (!fileOpen) {
|
||||||
|
statusCode = STATE_CODE_NO_FILE_OPENED
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
messageComposeBuffer.write(getReadableLs().toByteArray(VM.CHARSET))
|
messageComposeBuffer.write(getReadableLs().toByteArray(VM.CHARSET))
|
||||||
statusCode = STATE_CODE_STANDBY
|
statusCode = STATE_CODE_STANDBY
|
||||||
}
|
}
|
||||||
@@ -257,7 +301,11 @@ class TestDiskDrive(private val driveNum: Int, theRootPath: File? = null) : Bloc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (inputString.startsWith("WRITE")) {
|
else if (inputString.startsWith("WRITE")) {
|
||||||
if (!fileOpen || fileOpenMode < 0) {
|
if (!fileOpen) {
|
||||||
|
statusCode = STATE_CODE_FILE_NOT_FOUND
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (fileOpenMode < 0) {
|
||||||
statusCode = STATE_CODE_OPERATION_NOT_PERMITTED
|
statusCode = STATE_CODE_OPERATION_NOT_PERMITTED
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user