📄 185-191.html
字号:
pbuffer[1]);
bReturnStatus = _OS.SetFileACL(dbuffer);
}
break;
case ISO_DIRECTORY:
if (pbuffer[4] > (OS_HEADER_SIZE+1)) {
bReturnStatus = ST_INVALID_PARAMETER;
}
else
{
_OS.BackupFileStatus();
_OS.SelectCD();
// If info asked on current directory, no need to
// select a record
if (pbuffer[3] != 0) {
if ((bReturnStatus =
_OS.SelectRecord((byte)(pbuffer[3] !=
ST_SUCCESS){
break;
}
_OS.InitFileStatus();
}
// Get the header information for the file
bReturnStatus = _OS.GetFileInfo(dbuffer);
// Reformat the message
_OS.RestoreFileStatus();
if (bReturnStatus == ST_SUCCESS) {
ackByte[0] = pbuffer[1];
_OS.SendMessage(ackByte,(byte)1);
_OS.SendMessage(dbuffer,pbuffer[4]);
}
}
break;
// CHV and key manipulation routines
case ISO_VERIFY_CHV:
case ISO_CHANGE_CHV:
case ISO_UNBLOCK_CHV:
case ISO_VERIFY_KEY:
// Get key number
_OS.GetMessage(dbuffer,pbuffer[4],pbuffer[1]);
if (pbuffer[1] == ISO_VERIFY_KEY) {
bReturnStatus = _OS.VerifyKey( pbuffer[3],
dbuffer,
pbuffer[4]);
}
else {
// Get a good value for the unblocking flag
if (pbuffer[1] == ISO_UNBLOCK_CHV) {
pbuffer[2] = 1;
}
else {
pbuffer[2] = 0;
}
if (pbuffer[1] != ISO_VERIFY_CHV) {
for (bTemp=0;bTemp<8;bTemp++) {
chvbuffer[bTemp] = dbuffer[bTemp+8];
}
bReturnStatus = _OS.ModifyCHV ( pbuffer[3],
dbuffer,
chvbuffer,
pbuffer[2]);
break;
}
bReturnStatus = _OS.VerifyCHV( pbuffer[3],
dbuffer,
(byte)0);
}
break;
case ISO_INIT_APPLICATION:
/* Should send the id of a valid program file */
//_OS.SendMessage(ackByte,ACK_SIZE);
_OS.GetMessage( dbuffer,(byte)1,pbuffer[1]);
// cast dbuffer into a short
fileId = (short) ((pbuffer[2] << 8) |
(pbuffer[3] & 0x00FF));
bReturnStatus = _OS.Execute(fileId, dbuffer[0]);
break;
case GPOS_CREATE_FILE:
if (pbuffer[4] != OS_HEADER_SIZE) {
bReturnStatus = ST_INVALID_PARAMETER;
break;
}
//_OS.SendMessage(ackByte,ACK_SIZE);
// Receive The data
_OS.GetMessage( dbuffer,pbuffer[4],pbuffer[1]);
bReturnStatus = _OS.CreateFile(dbuffer);
break;
case ISO_UPDATE_RECORD:
case ISO_UPDATE_BINARY:
_OS.GetMessage(dbuffer,pbuffer[4],pbuffer[1]);
// assumes that a file is already selected
if (pbuffer[1] == ISO_READ_BINARY) {
// compute offset from pbuffer[2..3] via casting
offset = (short) ((pbuffer[2] << 8) |
(pbuffer[3] & 0x00FF));
bReturnStatus = _OS.WriteBinaryFile (offset,
pbuffer[4],
dbuffer);
}
else {
bReturnStatus = _OS.WriteRecord (dbuffer,
pbuffer[2],
pbuffer[3],
pbuffer[4]);
}
break;
case ISO_READ_RECORD:
case ISO_READ_BINARY:
// assumes that a file is already selected
if (pbuffer[1] == ISO_READ_BINARY) {
// compute offset from pbuffer[2..3] via casting
offset = (short) ((pbuffer[2] << 8) |
(pbuffer[3] & 0x00FF));
bReturnStatus = _OS.ReadBinaryFile (offset,
pbuffer[4],
dbuffer);
}
else {
bReturnStatus = _OS.ReadRecord (dbuffer,
pbuffer[2],
pbuffer[3],
pbuffer[4]);
}
// Send the data if successful
ackByte[0] = pbuffer[1];
if (bReturnStatus == ST_SUCCESS) {
_OS.SendMessage(ackByte,ACK_SIZE);
_OS.SendMessage(dbuffer,pbuffer[4]);
}
break;
default:
bReturnStatus = ST_INS_NOT_SUPPORTED;
}
}
// Verify we want to return a status
if (bReturnStatus != ST_NO_RETURN)
_OS.SendStatus(bReturnStatus);
}
}
while (true);
}
}
</PRE>
<P><BR></P>
<CENTER>
<TABLE BORDER>
<TR>
<TD><A HREF="183-184.html">Previous</A></TD>
<TD><A HREF="../ewtoc.html">Table of Contents</A></TD>
<TD><A HREF="191-195.html">Next</A></TD>
</TR>
</TABLE>
</CENTER>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -