/*++
Copyright (c) 1991 Microsoft Corporation
Copyright (c) 1993 Digital Equipment Corporation
Module Name:
conftest.c
Abstract:
This program tests the ARC configuration functions.
Author:
David M. Robinson (davidro) 4-Sept-1991
Revision History:
26-August-1992 John DeRosa [DEC]
Added Alpha/Jensen modifications.
--*/
#include "fwp.h"
#include "jnsnvdeo.h"
#include "oli2msft.h"
#include "inc.h"
#include "xxstring.h"
VOID
CtGetString(
OUT PCHAR String,
IN ULONG StringLength
)
/*++
Routine Description:
This routine reads a string from standardin until a
carriage return is found or StringLength is reached.
Arguments:
String - Supplies a pointer to where the string will be stored.
StringLength - Supplies the Max Length to read.
Return Value:
None.
--*/
{
CHAR c;
ULONG Count;
PCHAR Buffer;
Buffer = String;
while (ArcRead(ARC_CONSOLE_INPUT,&c,1,&Count)==ESUCCESS) {
if ((c=='\r') || (c=='\n') || (Buffer-String == StringLength)) {
*Buffer='\0';
ArcWrite(ARC_CONSOLE_OUTPUT,"\r\n",2,&Count);
return;
}
//
// Check for backspace;
//
if (c=='\b') {
if (((ULONG)Buffer > (ULONG)String)) {
Buffer--;
ArcWrite(ARC_CONSOLE_OUTPUT,"\b \b",3,&Count);
}
} else {
//
// Store the character and display it.
//
*Buffer++ = c;
ArcWrite(ARC_CONSOLE_OUTPUT,&c,1,&Count);
}
}
}
VOID
CtPrintData(
PCONFIGURATION_COMPONENT Component
)
/*++
--*/
{
ARC_STATUS Status;
EISA_ADAPTER_DETAILS EisaDetails;
PCM_VIDEO_DEVICE_DATA VideoDeviceData;
PCM_MONITOR_DEVICE_DATA MonitorDeviceData;
PCM_SONIC_DEVICE_DATA SonicDeviceData;
PCM_SCSI_DEVICE_DATA ScsiDeviceData;
PCM_FLOPPY_DEVICE_DATA FloppyDeviceData;
PCM_SERIAL_DEVICE_DATA SerialDeviceData;
EXTENDED_SYSTEM_INFORMATION SystemInfo;
ULONG LineSize;
UCHAR Buffer[sizeof(CM_PARTIAL_RESOURCE_LIST) +
(sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) * 5) +
MAXIMUM_DEVICE_SPECIFIC_DATA];
PCM_PARTIAL_RESOURCE_LIST Descriptor = (PCM_PARTIAL_RESOURCE_LIST)&Buffer;
ULONG Count;
PCM_PARTIAL_RESOURCE_DESCRIPTOR Partial;
ULONG Prid;
BOOLEAN OldData;
ULONG Version;
ULONG Index;
BOOLEAN ChildOfEISAAdapter;
VenPrint("\n\r");
if (Component == NULL) {
VenPrint(" NULL component");
return;
}
//
// If the parent of this node is the EISA adapter, then the configuration
// data, if present, has an ARC-style header with EISA entries, which
// we will not attempt to decode.
//
if ((ArcGetParent(Component) != NULL) &&
(ArcGetParent(Component)->Type == EisaAdapter)) {
ChildOfEISAAdapter = TRUE;
} else {
ChildOfEISAAdapter = FALSE;
}
if (Component->IdentifierLength != 0) {
VenPrint(" Identifier = ");
VenPrint(Component->Identifier);
}
VenPrint("\r\n");
OldData = FALSE;
switch (Component->Class) {
case SystemClass:
VenPrint(" Class = System\r\n");
VenPrint(" Type = ");
if (Component->Type == ArcSystem) {
VenPrint("Arc");
} else {
VenPrint("Unknown");
}
VenPrint("\r\n");
break;
case ProcessorClass:
VenPrint(" Class = Processor\r\n");
VenPrint(" Type = ");
switch (Component->Type) {
case CentralProcessor:
VenPrint("CPU");
break;
case FloatingPointProcessor:
VenPrint("FPU");
break;
default:
VenPrint("Unknown");
break;
}
VenPrint("\r\n");
VenPrint1(" Number = %d\r\n", Component->Key);
VenReturnExtendedSystemInformation(&SystemInfo);
VenPrint1(" Processor Id= %d.\r\n", SystemInfo.ProcessorId);
VenPrint1(" Revision = %d.\r\n", SystemInfo.ProcessorRevision);
VenPrint1(" Firmware Rev= %s\r\n", &SystemInfo.FirmwareVersion[0]);
break;
case CacheClass:
VenPrint(" Class = Cache\r\n");
VenPrint(" Type = ");
switch (Component->Type) {
case PrimaryIcache:
VenPrint("Primary Instruction");
break;
case PrimaryDcache:
VenPrint("Primary Data");
break;
case SecondaryIcache:
VenPrint("Secondary Instruction");
break;
case SecondaryDcache:
VenPrint("Secondary Data");
break;
case SecondaryCache:
VenPrint("Secondary");
break;
default:
VenPrint("Unknown");
break;
}
LineSize = 1 << ((Component->Key & 0xFF0000) >> 16);
VenPrint("\r\n");
VenPrint1(" Block = %d\r\n", ((Component->Key & 0xFF000000) >> 24) * LineSize);
VenPrint1(" Line = %d\r\n", LineSize);
VenPrint1(" Size = %d\r\n", (1 << (Component->Key & 0xFFFF) << PAGE_SHIFT));
break;
case MemoryClass:
VenPrint(" Class = Memory\r\n");
VenPrint(" Type = ");
switch (Component->Type) {
case SystemMemory:
VenPrint("SystemMemory\r\n");
break;
default:
VenPrint("Unknown\r\n");
break;
}
break;
case AdapterClass:
VenPrint(" Class = Adapter\r\n");
VenPrint(" Type = ");
switch (Component->Type) {
case EisaAdapter:
VenPrint("EISA");
OldData = TRUE;
break;
case TcAdapter:
VenPrint("Turbochannel");
break;
case ScsiAdapter:
VenPrint("SCSI");
break;
case DtiAdapter:
VenPrint("Desktop Interface");
break;
case MultiFunctionAdapter:
VenPrint("Multifunction");
break;
default:
VenPrint("Unknown");
break;
}
VenPrint("\r\n");
break;
case ControllerClass:
VenPrint(" Class = Controller\r\n");
VenPrint(" Type = ");
switch (Component->Type) {
case DiskController:
VenPrint("Disk");
break;
case TapeController:
VenPrint("Tape");
break;
case CdromController:
VenPrint("CDROM");
break;
case WormController:
VenPrint("WORM");
break;
case SerialController:
VenPrint("Serial");
break;
case NetworkController:
VenPrint("Network");
break;
case DisplayController:
VenPrint("Display");
break;
case ParallelController:
VenPrint("Parallel");
break;
case PointerController:
VenPrint("Pointer");
break;
case KeyboardController:
VenPrint("Keyboard");
break;
case AudioController:
VenPrint("Audio");
break;
case OtherController:
VenPrint("Other");
break;
default:
VenPrint("Unknown");
break;
}
VenPrint("\r\n");
break;
case PeripheralClass:
VenPrint(" Class = Peripheral\r\n");
VenPrint(" Type = ");
switch (Component->Type) {
case DiskPeripheral:
VenPrint("Disk");
break;
case FloppyDiskPeripheral:
VenPrint("Floppy disk");
break;
case TapePeripheral:
VenPrint("Tape");
break;
case ModemPeripheral:
VenPrint("Modem");
break;
case PrinterPeripheral:
VenPrint("Printer");
break;
case KeyboardPeripheral:
VenPrint("Keyboard");
break;
case PointerPeripheral:
VenPrint("Pointer");
break;
case MonitorPeripheral:
VenPrint("Monitor");
break;
case TerminalPeripheral:
VenPrint("Terminal");
break;
case OtherPeripheral:
VenPrint("Other");
break;
default:
VenPrint("Unknown");
break;
}
VenPrint("\r\n");
break;
default:
VenPrint(" Unknown class,");
break;
}
VenPrint1(" Key = %08lx\r\n", Component->Key);
VenPrint1(" Affinity = %08lx\r\n", Component->AffinityMask);
VenPrint(" Flags:\r\n");
if (Component->Flags.Failed) {
VenPrint(" Failed\r\n");
}
if (Component->Flags.ReadOnly) {
VenPrint(" ReadOnly\r\n");
}
if (Component->Flags.Removable) {
VenPrint(" Removable\r\n");
}
if (Component->Flags.ConsoleIn) {
VenPrint(" ConsoleIn\r\n");
}
if (Component->Flags.ConsoleOut) {
VenPrint(" ConsoleOut\r\n");
}
if (Component->Flags.Input) {
VenPrint(" Input\r\n");
}
if (Component->Flags.Output) {
VenPrint(" Output\r\n");
}
VenPrint("\r\n");
if (!ChildOfEISAAdapter &&
!OldData &&
(Component->ConfigurationDataLength != 0) &&
(Component->ConfigurationDataLength < sizeof(Buffer))) {
//
// This is not a child of the EISA adapter, and it is also not the
// EISA adapter itself. Try to get and print out the configuration
// data.
//
Status = ArcGetConfigurationData( Descriptor, Component );
if ((Status != ESUCCESS) || (Descriptor->Count > 10)) {
VenPrint(" Error reading configuration data");
} else {
VenPrint2(" Version %d.%d\r\n", Descriptor->Version, Descriptor->Revision);
Version = Descriptor->Version * 100 + Descriptor->Revision;
for (Count = 0 ; Count < Descriptor->Count ; Count++ ) {
Partial = &Descriptor->PartialDescriptors[Count];
switch (Partial->Type) {
case CmResourceTypePort:
VenPrint2(" Port Config -- %08lx - %08lx\r\n",
Partial->u.Port.Start.LowPart,
Partial->u.Port.Start.LowPart +
Partial->u.Port.Length - 1);
break;
case CmResourceTypeInterrupt:
VenPrint(" Interrupt Config -- ");
if (Partial->Flags & CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE) {
VenPrint(" Level triggered,");
} else {
VenPrint(" Edge triggered,");
}
VenPrint(" Irql = ");
switch (Partial->u.Interrupt.Level) {
case DEVICE_LEVEL:
VenPrint("DEVICE_LEVEL");
break;
case PASSIVE_LEVEL:
VenPrint("PASSIVE_LEVEL");
break;
case APC_LEVEL:
VenPrint("APC_LEVEL");
break;
case DISPATCH_LEVEL:
VenPrint("DISPATCH_LEVEL");
break;
case IPI_LEVEL:
VenPrint("IPI_LEVEL");
break;
case HIGH_LEVEL:
VenPrint("HIGH_LEVEL");
break;
default:
VenPrint("Unknown level");
}
VenPrint1(", Vector = %08lx\r\n", Partial->u.Interrupt.Vector);
break;
case CmResourceTypeMemory:
VenPrint2(" Memory Config -- %08lx - %08lx\r\n",
Partial->u.Memory.Start.LowPart,
Partial->u.Memory.Start.LowPart +
Partial->u.Memory.Length - 1);
break;
case CmResourceTypeDma:
VenPrint1(" DMA Config -- Channel = %d\r\n",
Partial->u.Dma.Channel);
break;
case CmResourceTypeDeviceSpecific:
switch (Component->Class) {
case AdapterClass:
switch (Component->Type) {
case ScsiAdapter:
ScsiDeviceData = (PCM_SCSI_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
VenPrint1(" Scsi Host Identifier = %d\r\n",
ScsiDeviceData->HostIdentifier);
break;
default:
break;
}
case ControllerClass:
switch (Component->Type) {
case DisplayController:
VideoDeviceData = (PCM_VIDEO_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
VenPrint1(" Video Clock = %d\r\n",
VideoDeviceData->VideoClock);
break;
case NetworkController:
SonicDeviceData = (PCM_SONIC_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
VenPrint1(" Sonic Data Configuration Register = %04x\r\n",
SonicDeviceData->DataConfigurationRegister);
if (Version >= 101) {
VenPrint(" Sonic Ethernet Address = ");
for (Index = 0; Index < 6 ; Index++) {
VenPrint1("%02lx", SonicDeviceData->EthernetAddress[Index]);
}
VenPrint("\r\n");
VenPrint(" Sonic Ethernet Checksum = ");
for (Index = 6; Index < 8 ; Index++) {
VenPrint1("%02lx", SonicDeviceData->EthernetAddress[Index]);
}
VenPrint("\r\n");
}
break;
case SerialController:
SerialDeviceData = (PCM_SERIAL_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
VenPrint1(" Serial Baud Clock = %d\r\n",
SerialDeviceData->BaudClock);
break;
default:
break;
}
break;
case PeripheralClass:
switch (Component->Type) {
case FloppyDiskPeripheral:
FloppyDeviceData = (PCM_FLOPPY_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
VenPrint(" Floppy data:\n\r");
VenPrint1(" Size = %s\n\r", FloppyDeviceData->Size);
VenPrint1(" MaxDensity = %d Kb\n\r", FloppyDeviceData->MaxDensity);
break;
case MonitorPeripheral:
MonitorDeviceData = (PCM_MONITOR_DEVICE_DATA)&Descriptor->PartialDescriptors[Count+1];
VenPrint(" Monitor data:\n\r");
VenPrint1(" HorizontalResolution = %d\n\r", MonitorDeviceData->HorizontalResolution);
VenPrint1(" HorizontalDisplayTime = %d\n\r", MonitorDeviceData->HorizontalDisplayTime);
VenPrint1(" HorizontalBackPorch = %d\n\r", MonitorDeviceData->HorizontalBackPorch);
VenPrint1(" HorizontalFrontPorch = %d\n\r", MonitorDeviceData->HorizontalFrontPorch);
VenPrint1(" HorizontalSync = %d\n\r", MonitorDeviceData->HorizontalSync);
VenPrint1(" VerticalResolution = %d\n\r", MonitorDeviceData->VerticalResolution);
VenPrint1(" VerticalBackPorch = %d\n\r", MonitorDeviceData->VerticalBackPorch);
VenPrint1(" VerticalFrontPorch = %d\n\r", MonitorDeviceData->VerticalFrontPorch);
VenPrint1(" VerticalSync = %d\n\r", MonitorDeviceData->VerticalSync);
VenPrint1(" HorizontalScreenSize = %d\n\r", MonitorDeviceData->HorizontalScreenSize);
VenPrint1(" VerticalScreenSize = %d\n\r", MonitorDeviceData->VerticalScreenSize);
break;
default:
break;
}
break;
default:
break;
}
break;
default:
VenPrint(" Unknown data\r\n");
break;
}
}
}
} else if (OldData &&
(Component->ConfigurationDataLength != 0) &&
(Component->ConfigurationDataLength < sizeof(Buffer))) {
//
// This is old-style configuration data, i.e. the eisa adapter
// itself.
//
Status = ArcGetConfigurationData( &EisaDetails, Component);
if (Status != ESUCCESS) {
VenPrint(" Error reading Eisa bus data");
} else {
VenPrint(" Eisa Details:\n\r");
VenPrint1(" Number of slots = %d\n\r", EisaDetails.NumberOfSlots);
VenPrint1(" Io start address = %08lx\n\r", EisaDetails.IoStart);
VenPrint1(" Io size = %lx\n\r", EisaDetails.IoSize);
}
}
return;
}
VOID
main(
int argc,
char *argv[],
char *envp[]
)
{
BOOLEAN EisaMachine;
ULONG Index;
UCHAR Character;
ULONG Count;
LONG DefaultChoice = 0;
ARC_STATUS Status;
CHAR PathName[80];
PCONFIGURATION_COMPONENT Component;
PCONFIGURATION_COMPONENT NewComponent;
PSYSTEM_ID SystemId;
BOOLEAN Update;
PMEMORY_DESCRIPTOR MemoryDescriptor;
PCHAR Choices[] = {
"Walk through the configuration tree",
"Enter a pathname and display the configuration data",
"Display memory configuration",
"Test Unicode",
"Other ARC Tests",
"Exit"
};
#define NUMBER_OF_CHOICES (sizeof(Choices) / sizeof(ULONG))
ULONG Fid;
ULONG CrLf;
ULONG Space;
ULONG i, j;
BOOLEAN Unicode;
PARC_DISPLAY_STATUS DisplayStatus;
ULONG x, y;
while (TRUE) {
VenSetScreenAttributes( TRUE, FALSE, FALSE);
VenPrint1("%c2J", ASCII_CSI);
VenSetPosition( 0, 0);
#if defined(JENSEN)
VenPrint(" Jensen Configuration Test Program Version 1.09\r\n");
#elif defined(MORGAN)
VenPrint(" Morgan Configuration Test Program Version 1.09\r\n");
#endif
VenPrint(" Copyright (c) 1993 Microsoft Corporation, Digital Equipment Corporation\r\n\n");
for (Index = 0; Index < NUMBER_OF_CHOICES ; Index++ ) {
VenSetPosition( Index + 4, 5);
if (Index == DefaultChoice) {
VenSetScreenAttributes( TRUE, FALSE, TRUE);
VenPrint(Choices[Index]);
VenSetScreenAttributes( TRUE, FALSE, FALSE);
} else {
VenPrint(Choices[Index]);
}
}
VenSetPosition(NUMBER_OF_CHOICES + 5, 0);
SystemId = ArcGetSystemId();
VenPrint1(" System = %s\r\n", &SystemId->VendorId[0]);
VenPrint1(" Serial = %s\r\n", &SystemId->ProductId[0]);
Character = 0;
do {
if (ArcGetReadStatus(ARC_CONSOLE_INPUT) == ESUCCESS) {
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
switch (Character) {
case ASCII_ESC:
VenStallExecution(10000);
if (ArcGetReadStatus(ARC_CONSOLE_INPUT) == ESUCCESS) {
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
if (Character != '[') {
return;
}
} else {
return;
}
// We purposely fall through to ASCII_CSI.
case ASCII_CSI:
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
VenSetPosition( DefaultChoice + 4, 5);
VenPrint(Choices[DefaultChoice]);
switch (Character) {
case 'A':
case 'D':
DefaultChoice--;
if (DefaultChoice < 0) {
DefaultChoice = NUMBER_OF_CHOICES-1;
}
break;
case 'B':
case 'C':
DefaultChoice++;
if (DefaultChoice == NUMBER_OF_CHOICES) {
DefaultChoice = 0;
}
break;
case 'H':
DefaultChoice = 0;
break;
default:
break;
}
VenSetPosition( DefaultChoice + 4, 5);
VenSetScreenAttributes( TRUE, FALSE, TRUE);
VenPrint(Choices[DefaultChoice]);
VenSetScreenAttributes( TRUE, FALSE, FALSE);
continue;
default:
break;
}
}
} while ((Character != '\n') && (Character != '\r'));
switch (DefaultChoice) {
case 0:
Component = ArcGetChild(NULL);
NewComponent = Component;
Character = 0;
do {
VenSetPosition( 4, 5);
VenPrint("\x9BJ");
VenPrint("Use arrow keys to walk the tree, ESC to return");
VenPrint("\n\r\n");
CtPrintData(Component);
Update = FALSE;
do {
if (ArcGetReadStatus(ARC_CONSOLE_INPUT) == ESUCCESS) {
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
switch (Character) {
case ASCII_ESC:
VenStallExecution(10000);
if (ArcGetReadStatus(ARC_CONSOLE_INPUT) == ESUCCESS) {
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
if (Character != '[') {
Character = ASCII_ESC;
break;
}
} else {
Character = ASCII_ESC;
break;
}
// We purposely fall through to ASCII_CSI.
case ASCII_CSI:
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
switch (Character) {
case 'A':
NewComponent = ArcGetParent(Component);
Update = TRUE;
break;
case 'B':
NewComponent = ArcGetChild(Component);
Update = TRUE;
break;
case 'C':
NewComponent = ArcGetPeer(Component);
Update = TRUE;
break;
case 'D':
NewComponent = ArcGetParent(Component);
NewComponent = ArcGetChild(NewComponent);
while ((NewComponent != NULL) &&
(ArcGetPeer(NewComponent) != Component)) {
NewComponent = ArcGetPeer(NewComponent);
}
Update = TRUE;
break;
default:
break;
}
if (NewComponent != NULL) {
Component = NewComponent;
}
default:
break;
}
}
} while (!Update && (Character != ASCII_ESC));
} while (Character != ASCII_ESC);
break;
case 1:
VenSetPosition( 4, 5);
VenPrint("\x9BJ");
VenPrint("Enter component pathname: ");
CtGetString( PathName, sizeof(PathName));
VenPrint("\n\r");
Component = ArcGetComponent(PathName);
CtPrintData(Component);
VenPrint(" Press any key to continue...");
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
continue;
case 2:
MemoryDescriptor = ArcGetMemoryDescriptor(NULL);
while (MemoryDescriptor != NULL) {
VenSetPosition( 4, 5);
VenPrint("\x9BJ");
VenPrint("Memory type = ");
switch (MemoryDescriptor->MemoryType) {
case MemoryExceptionBlock:
VenPrint("ExceptionBlock");
break;
case MemorySystemBlock:
VenPrint("SystemBlock");
break;
case MemoryFree:
VenPrint("Free");
break;
case MemoryBad:
VenPrint("Bad");
break;
case MemoryLoadedProgram:
VenPrint("LoadedProgram");
break;
case MemoryFirmwareTemporary:
VenPrint("FirmwareTemporary");
break;
case MemoryFirmwarePermanent:
VenPrint("FirmwarePermanent");
break;
case MemoryFreeContiguous:
VenPrint("FreeContiguous");
break;
case MemorySpecialMemory:
VenPrint("SpecialMemory");
break;
default:
VenPrint("Unknown");
break;
}
VenSetPosition( 5, 5);
VenPrint1("Base Page = %08lx", MemoryDescriptor->BasePage);
VenSetPosition( 6, 5);
VenPrint1("Page Count = 0x%x", MemoryDescriptor->PageCount);
VenSetPosition( 7, 5);
VenPrint(" Press any key to continue, ESC to return");
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
if (Character == ASCII_ESC) {
break;
}
MemoryDescriptor = ArcGetMemoryDescriptor(MemoryDescriptor);
}
break;
case 3:
VenPrint("\r\n\n");
CrLf = (ASCII_CR << 16) + ASCII_LF;
Space = ' ';
ArcClose(ARC_CONSOLE_OUTPUT);
//
// Try opening all the possible legal output devices.
//
EisaMachine = TRUE;
if (ArcOpen(EISA_UNICODE_CONSOLE_OUT,ArcOpenWriteOnly,&Fid) != ESUCCESS) {
EisaMachine = FALSE;
ArcOpen(MULTI_UNICODE_CONSOLE_OUT,ArcOpenWriteOnly,&Fid);
}
for (j = 0; j < 16 ; j++ ) {
for (i = 0 ; i < 9 ; i++ ) {
Index = 0x2500 + (i << 4) + j;
ArcWrite(ARC_CONSOLE_OUTPUT, &Space, 2, &Count);
ArcWrite(ARC_CONSOLE_OUTPUT, &Index, 2, &Count);
}
ArcWrite(ARC_CONSOLE_OUTPUT, &CrLf, 4, &Count);
}
ArcClose(ARC_CONSOLE_OUTPUT);
if (EisaMachine) {
ArcOpen(EISA_NORMAL_CONSOLE_OUT,ArcOpenWriteOnly,&Fid);
} else {
ArcOpen(MULTI_NORMAL_CONSOLE_OUT,ArcOpenWriteOnly,&Fid);
}
VenPrint("\r\nPress any key to continue");
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
ArcClose(ARC_CONSOLE_INPUT);
ArcOpen(MULTI_UNICODE_KEYBOARD_IN,ArcOpenReadOnly,&Fid);
if (EisaMachine) {
ArcOpen(EISA_UNICODE_CONSOLE_OUT,ArcOpenWriteOnly,&Fid);
} else {
ArcOpen(MULTI_UNICODE_CONSOLE_OUT,ArcOpenWriteOnly,&Fid);
}
do {
VenPrint("\r\nPress any key, ESC to stop: ");
ArcRead(ARC_CONSOLE_INPUT, &Index, 2, &Count);
ArcWrite(Fid, &Index, 2, &Count);
} while ( Index != ASCII_ESC );
VenPrint(" \r\n Searching for valid Unicode ranges...");
Unicode = FALSE;
for (Index = 0; Index < 0xffff ; Index++ ) {
if (ArcTestUnicodeCharacter(Fid, (WCHAR)Index) == ESUCCESS) {
if (!Unicode) {
VenPrint1("\r\n Start = %04lx, ", Index);
Unicode = TRUE;
}
} else {
if (Unicode) {
VenPrint1("End = %04lx, ", Index);
Unicode = FALSE;
}
}
}
ArcClose(Fid);
ArcClose(ARC_CONSOLE_INPUT);
ArcOpen(MULTI_NORMAL_KEYBOARD_IN,ArcOpenReadOnly,&Fid);
VenPrint("\r\nPress any key to continue");
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
break;
case 4:
DisplayStatus = ArcGetDisplayStatus(ARC_CONSOLE_OUTPUT);
x = (DisplayStatus->CursorMaxXPosition / 2) - 24;
y = (DisplayStatus->CursorMaxYPosition / 2) - 7;
VenSetPosition(y++,x);
VenPrint("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»");
for (Index = 0; Index < 10 ; Index++ ) {
VenSetPosition(y++,x);
VenPrint("º º");
}
VenSetPosition(y++,x);
VenPrint("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ");
x = (DisplayStatus->CursorMaxXPosition / 2) - 23;
y = (DisplayStatus->CursorMaxYPosition / 2) - 6;
VenSetPosition(y++,x);
VenSetScreenColor(ArcColorCyan,ArcColorBlack);
VenPrint("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»");
for (Index = 0; Index < 6 ; Index++ ) {
VenSetPosition(y++,x);
VenPrint("º º");
}
VenSetPosition(y++,x);
VenPrint("ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ");
VenSetPosition(y++,x);
VenPrint("º º");
VenSetPosition(y++,x);
VenPrint("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ");
x = (DisplayStatus->CursorMaxXPosition / 2) - 22;
y = (DisplayStatus->CursorMaxYPosition / 2) - 5;
VenSetPosition(y++,x);
DisplayStatus = ArcGetDisplayStatus(ARC_CONSOLE_OUTPUT);
VenPrint1("X Cursor = %d", DisplayStatus->CursorXPosition);
VenSetPosition(y++,x);
VenPrint1("Y Cursor = %d", DisplayStatus->CursorYPosition);
VenSetPosition(y++,x);
VenPrint1("Max X Cursor = %d", DisplayStatus->CursorMaxXPosition);
VenSetPosition(y++,x);
VenPrint1("Max Y Cursor = %d", DisplayStatus->CursorMaxYPosition);
VenSetPosition(y++,x);
VenPrint("Press any key to continue...");
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
for (Index = 0; Index < argc ; Index++ ) {
VenPrint1("\r\n Argument #%d = ", Index);
VenPrint(argv[Index]);
}
if (argc == 0) {
VenPrint("\r\n No arguments");
}
VenPrint("\r\n Press any key to continue...");
ArcRead(ARC_CONSOLE_INPUT, &Character, 1, &Count);
break;
case 5:
return;
default:
continue;
}
}
}