Merge pull request #4209 from Cacodemon345/novell_keycard
Add Novell NetWare 2.x Card Key emulation
This commit is contained in:
@@ -66,6 +66,7 @@
|
|||||||
#include <86box/bugger.h>
|
#include <86box/bugger.h>
|
||||||
#include <86box/postcard.h>
|
#include <86box/postcard.h>
|
||||||
#include <86box/unittester.h>
|
#include <86box/unittester.h>
|
||||||
|
#include <86box/novell_cardkey.h>
|
||||||
#include <86box/isamem.h>
|
#include <86box/isamem.h>
|
||||||
#include <86box/isartc.h>
|
#include <86box/isartc.h>
|
||||||
#include <86box/lpt.h>
|
#include <86box/lpt.h>
|
||||||
@@ -173,6 +174,7 @@ char video_shader[512] = { '\0' }; /* (C) video *
|
|||||||
bool serial_passthrough_enabled[SERIAL_MAX] = { 0, 0, 0, 0 }; /* (C) activation and kind of
|
bool serial_passthrough_enabled[SERIAL_MAX] = { 0, 0, 0, 0 }; /* (C) activation and kind of
|
||||||
pass-through for serial ports */
|
pass-through for serial ports */
|
||||||
int bugger_enabled = 0; /* (C) enable ISAbugger */
|
int bugger_enabled = 0; /* (C) enable ISAbugger */
|
||||||
|
int novell_keycard_enabled = 0; /* (C) enable Novell NetWare 2.x key card emulation. */
|
||||||
int postcard_enabled = 0; /* (C) enable POST card */
|
int postcard_enabled = 0; /* (C) enable POST card */
|
||||||
int unittester_enabled = 0; /* (C) enable unit tester device */
|
int unittester_enabled = 0; /* (C) enable unit tester device */
|
||||||
int isamem_type[ISAMEM_MAX] = { 0, 0, 0, 0 }; /* (C) enable ISA mem cards */
|
int isamem_type[ISAMEM_MAX] = { 0, 0, 0, 0 }; /* (C) enable ISA mem cards */
|
||||||
@@ -1226,6 +1228,8 @@ pc_reset_hard_init(void)
|
|||||||
device_add(&postcard_device);
|
device_add(&postcard_device);
|
||||||
if (unittester_enabled)
|
if (unittester_enabled)
|
||||||
device_add(&unittester_device);
|
device_add(&unittester_device);
|
||||||
|
if (novell_keycard_enabled)
|
||||||
|
device_add(&novell_keycard_device);
|
||||||
|
|
||||||
if (IS_ARCH(machine, MACHINE_BUS_PCI)) {
|
if (IS_ARCH(machine, MACHINE_BUS_PCI)) {
|
||||||
pci_register_cards();
|
pci_register_cards();
|
||||||
|
12
src/config.c
12
src/config.c
@@ -1568,9 +1568,10 @@ load_other_peripherals(void)
|
|||||||
char *p;
|
char *p;
|
||||||
char temp[512];
|
char temp[512];
|
||||||
|
|
||||||
bugger_enabled = !!ini_section_get_int(cat, "bugger_enabled", 0);
|
bugger_enabled = !!ini_section_get_int(cat, "bugger_enabled", 0);
|
||||||
postcard_enabled = !!ini_section_get_int(cat, "postcard_enabled", 0);
|
postcard_enabled = !!ini_section_get_int(cat, "postcard_enabled", 0);
|
||||||
unittester_enabled = !!ini_section_get_int(cat, "unittester_enabled", 0);
|
unittester_enabled = !!ini_section_get_int(cat, "unittester_enabled", 0);
|
||||||
|
novell_keycard_enabled = !!ini_section_get_int(cat, "novell_keycard_enabled", 0);
|
||||||
|
|
||||||
for (uint8_t c = 0; c < ISAMEM_MAX; c++) {
|
for (uint8_t c = 0; c < ISAMEM_MAX; c++) {
|
||||||
sprintf(temp, "isamem%d_type", c);
|
sprintf(temp, "isamem%d_type", c);
|
||||||
@@ -2365,6 +2366,11 @@ save_other_peripherals(void)
|
|||||||
else
|
else
|
||||||
ini_section_set_int(cat, "unittester_enabled", unittester_enabled);
|
ini_section_set_int(cat, "unittester_enabled", unittester_enabled);
|
||||||
|
|
||||||
|
if (novell_keycard_enabled == 0)
|
||||||
|
ini_section_delete_var(cat, "novell_keycard_enabled");
|
||||||
|
else
|
||||||
|
ini_section_set_int(cat, "novell_keycard_enabled", novell_keycard_enabled);
|
||||||
|
|
||||||
for (uint8_t c = 0; c < ISAMEM_MAX; c++) {
|
for (uint8_t c = 0; c < ISAMEM_MAX; c++) {
|
||||||
sprintf(temp, "isamem%d_type", c);
|
sprintf(temp, "isamem%d_type", c);
|
||||||
if (isamem_type[c] == 0)
|
if (isamem_type[c] == 0)
|
||||||
|
@@ -22,7 +22,8 @@ add_library(dev OBJECT bugger.c cassette.c cartridge.c hasp.c hwm.c hwm_lm75.c h
|
|||||||
kbc_at.c kbc_at_dev.c
|
kbc_at.c kbc_at_dev.c
|
||||||
keyboard_at.c
|
keyboard_at.c
|
||||||
mouse.c mouse_bus.c mouse_serial.c mouse_ps2.c nec_mate_unk.c phoenix_486_jumper.c
|
mouse.c mouse_bus.c mouse_serial.c mouse_ps2.c nec_mate_unk.c phoenix_486_jumper.c
|
||||||
serial_passthrough.c)
|
serial_passthrough.c
|
||||||
|
novell_cardkey.c)
|
||||||
|
|
||||||
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
target_link_libraries(86Box atomic)
|
target_link_libraries(86Box atomic)
|
||||||
|
123
src/device/novell_cardkey.c
Normal file
123
src/device/novell_cardkey.c
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||||
|
* running old operating systems and software designed for IBM
|
||||||
|
* PC systems and compatibles from 1981 through fairly recent
|
||||||
|
* system designs based on the PCI bus.
|
||||||
|
*
|
||||||
|
* This file is part of the 86Box distribution.
|
||||||
|
*
|
||||||
|
* Implementation of the Novell NetWare 2.x Key Card, which
|
||||||
|
* was used for anti-piracy protection.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Authors: Cacodemon345
|
||||||
|
*
|
||||||
|
* Copyright 2024 Cacodemon345.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <86box/86box.h>
|
||||||
|
#include <86box/io.h>
|
||||||
|
#include <86box/device.h>
|
||||||
|
#include <86box/timer.h>
|
||||||
|
#include <86box/plat.h>
|
||||||
|
#include <86box/novell_cardkey.h>
|
||||||
|
|
||||||
|
typedef struct novell_cardkey_t
|
||||||
|
{
|
||||||
|
char serial_number_str[13];
|
||||||
|
} novell_cardkey_t;
|
||||||
|
|
||||||
|
static uint8_t
|
||||||
|
novell_cardkey_read(uint16_t port, void *priv)
|
||||||
|
{
|
||||||
|
novell_cardkey_t* cardkey = (novell_cardkey_t*)priv;
|
||||||
|
uint8_t val = 0x00;
|
||||||
|
switch (port) {
|
||||||
|
case 0x23A:
|
||||||
|
val = (((cardkey->serial_number_str[11] > 'A') ? ((cardkey->serial_number_str[11] - 'A') + 10) : (cardkey->serial_number_str[11] - '0')) << 4) | (((cardkey->serial_number_str[9] > 'A') ? ((cardkey->serial_number_str[9] - 'A') + 10) : (cardkey->serial_number_str[9] - '0')) << 4);
|
||||||
|
break;
|
||||||
|
case 0x23B:
|
||||||
|
val = (((cardkey->serial_number_str[10] > 'A') ? ((cardkey->serial_number_str[10] - 'A') + 10) : (cardkey->serial_number_str[10] - '0')) << 4) | (((cardkey->serial_number_str[8] > 'A') ? ((cardkey->serial_number_str[8] - 'A') + 10) : (cardkey->serial_number_str[8] - '0')) << 4);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x23C:
|
||||||
|
val = ((cardkey->serial_number_str[4] - '0') << 4) | ((cardkey->serial_number_str[2] - '0'));
|
||||||
|
break;
|
||||||
|
case 0x23D:
|
||||||
|
val = ((cardkey->serial_number_str[1] - '0') << 4) | ((cardkey->serial_number_str[6] - '0'));
|
||||||
|
break;
|
||||||
|
case 0x23E:
|
||||||
|
val = ((cardkey->serial_number_str[0] - '0') << 4) | ((cardkey->serial_number_str[7] - '0'));
|
||||||
|
break;
|
||||||
|
case 0x23F:
|
||||||
|
val = ((cardkey->serial_number_str[3] - '0') << 4) | ((cardkey->serial_number_str[5] - '0'));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return val ^ 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* novell_cardkey_init(const device_t* info)
|
||||||
|
{
|
||||||
|
char sernumstr[13] = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 0 };
|
||||||
|
int i = 0;
|
||||||
|
novell_cardkey_t* cardkey = calloc(1, sizeof(novell_cardkey_t));
|
||||||
|
|
||||||
|
strncpy(sernumstr, device_get_config_string("serial_number"), sizeof(sernumstr) - 1);
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(sernumstr) - 4; i++) {
|
||||||
|
if (sernumstr[i] > '8' || sernumstr[i] < '0')
|
||||||
|
sernumstr[i] = '0';
|
||||||
|
}
|
||||||
|
if (sernumstr[8] > 'F' || sernumstr[8] < '0')
|
||||||
|
sernumstr[8] = '0';
|
||||||
|
if (sernumstr[9] > 'F' || sernumstr[9] < '0')
|
||||||
|
sernumstr[9] = '0';
|
||||||
|
if (sernumstr[10] > 'F' || sernumstr[10] < '0')
|
||||||
|
sernumstr[10] = '0';
|
||||||
|
if (sernumstr[11] > 'F' || sernumstr[11] < '0')
|
||||||
|
sernumstr[11] = '0';
|
||||||
|
sernumstr[12] = 0;
|
||||||
|
strncpy(cardkey->serial_number_str, sernumstr, sizeof(sernumstr));
|
||||||
|
io_sethandler(NOVELL_KEYCARD_ADDR, NOVELL_KEYCARD_ADDRLEN, novell_cardkey_read, NULL, NULL, NULL, NULL, NULL, cardkey);
|
||||||
|
return cardkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
void novell_cardkey_close(void* priv)
|
||||||
|
{
|
||||||
|
free(priv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const device_config_t keycard_config[] = {
|
||||||
|
// clang-format off
|
||||||
|
{
|
||||||
|
.name = "serial_number",
|
||||||
|
.description = "Serial Number",
|
||||||
|
.type = CONFIG_STRING,
|
||||||
|
.default_string = "",
|
||||||
|
.default_int = 0,
|
||||||
|
.file_filter = "",
|
||||||
|
.spinner = { 0 },
|
||||||
|
.selection = { 0 }
|
||||||
|
},
|
||||||
|
{ .name = "", .description = "", .type = CONFIG_END }
|
||||||
|
// clang-format on
|
||||||
|
};
|
||||||
|
|
||||||
|
const device_t novell_keycard_device = {
|
||||||
|
.name = "Novell Netware 2.x Key Card",
|
||||||
|
.internal_name = "mssystems",
|
||||||
|
.flags = DEVICE_ISA,
|
||||||
|
.local = 0,
|
||||||
|
.init = novell_cardkey_init,
|
||||||
|
.close = novell_cardkey_close,
|
||||||
|
.reset = NULL,
|
||||||
|
{ .available = NULL },
|
||||||
|
.speed_changed = NULL,
|
||||||
|
.force_redraw = NULL,
|
||||||
|
.config = keycard_config
|
||||||
|
};
|
@@ -124,6 +124,7 @@ extern int video_framerate; /* (C) video */
|
|||||||
extern int gfxcard[2]; /* (C) graphics/video card */
|
extern int gfxcard[2]; /* (C) graphics/video card */
|
||||||
extern char video_shader[512]; /* (C) video */
|
extern char video_shader[512]; /* (C) video */
|
||||||
extern int bugger_enabled; /* (C) enable ISAbugger */
|
extern int bugger_enabled; /* (C) enable ISAbugger */
|
||||||
|
extern int novell_keycard_enabled; /* (C) enable Novell NetWare 2.x key card emulation. */
|
||||||
extern int postcard_enabled; /* (C) enable POST card */
|
extern int postcard_enabled; /* (C) enable POST card */
|
||||||
extern int unittester_enabled; /* (C) enable unit tester device */
|
extern int unittester_enabled; /* (C) enable unit tester device */
|
||||||
extern int isamem_type[]; /* (C) enable ISA mem cards */
|
extern int isamem_type[]; /* (C) enable ISA mem cards */
|
||||||
|
37
src/include/86box/novell_cardkey.h
Normal file
37
src/include/86box/novell_cardkey.h
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||||
|
* running old operating systems and software designed for IBM
|
||||||
|
* PC systems and compatibles from 1981 through fairly recent
|
||||||
|
* system designs based on the PCI bus.
|
||||||
|
*
|
||||||
|
* This file is part of the 86Box distribution.
|
||||||
|
*
|
||||||
|
* Implementation of the Novell NetWare 2.x Key Card, which
|
||||||
|
* was used for anti-piracy protection.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Authors: Cacodemon345
|
||||||
|
*
|
||||||
|
* Copyright 2024 Cacodemon345.
|
||||||
|
*/
|
||||||
|
#ifndef NOVELL_KEYCARD_H
|
||||||
|
#define NOVELL_KEYCARD_H
|
||||||
|
|
||||||
|
/* I/O port range used. */
|
||||||
|
#define NOVELL_KEYCARD_ADDR 0x23a
|
||||||
|
#define NOVELL_KEYCARD_ADDRLEN 6
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Global variables. */
|
||||||
|
extern const device_t novell_keycard_device;
|
||||||
|
|
||||||
|
/* Functions. */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*BUGGER_H*/
|
@@ -24,6 +24,7 @@ extern "C" {
|
|||||||
#include <86box/isamem.h>
|
#include <86box/isamem.h>
|
||||||
#include <86box/isartc.h>
|
#include <86box/isartc.h>
|
||||||
#include <86box/unittester.h>
|
#include <86box/unittester.h>
|
||||||
|
#include <86box/novell_cardkey.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "qt_deviceconfig.hpp"
|
#include "qt_deviceconfig.hpp"
|
||||||
@@ -46,7 +47,10 @@ SettingsOtherPeripherals::onCurrentMachineChanged(int machineId)
|
|||||||
ui->checkBoxISABugger->setChecked((machineHasIsa && (bugger_enabled > 0)) ? true : false);
|
ui->checkBoxISABugger->setChecked((machineHasIsa && (bugger_enabled > 0)) ? true : false);
|
||||||
ui->checkBoxPOSTCard->setChecked(postcard_enabled > 0 ? true : false);
|
ui->checkBoxPOSTCard->setChecked(postcard_enabled > 0 ? true : false);
|
||||||
ui->checkBoxUnitTester->setChecked(unittester_enabled > 0 ? true : false);
|
ui->checkBoxUnitTester->setChecked(unittester_enabled > 0 ? true : false);
|
||||||
|
ui->checkBoxKeyCard->setChecked((machineHasIsa && (novell_keycard_enabled > 0)) ? true : false);
|
||||||
ui->checkBoxISABugger->setEnabled(machineHasIsa);
|
ui->checkBoxISABugger->setEnabled(machineHasIsa);
|
||||||
|
ui->checkBoxKeyCard->setEnabled(machineHasIsa);
|
||||||
|
ui->pushButtonConfigureKeyCard->setEnabled(novell_keycard_enabled > 0);
|
||||||
ui->pushButtonConfigureUT->setEnabled(unittester_enabled > 0);
|
ui->pushButtonConfigureUT->setEnabled(unittester_enabled > 0);
|
||||||
ui->comboBoxRTC->setEnabled(machineHasIsa);
|
ui->comboBoxRTC->setEnabled(machineHasIsa);
|
||||||
ui->pushButtonConfigureRTC->setEnabled(machineHasIsa);
|
ui->pushButtonConfigureRTC->setEnabled(machineHasIsa);
|
||||||
@@ -115,10 +119,11 @@ void
|
|||||||
SettingsOtherPeripherals::save()
|
SettingsOtherPeripherals::save()
|
||||||
{
|
{
|
||||||
/* Other peripherals category */
|
/* Other peripherals category */
|
||||||
bugger_enabled = ui->checkBoxISABugger->isChecked() ? 1 : 0;
|
bugger_enabled = ui->checkBoxISABugger->isChecked() ? 1 : 0;
|
||||||
postcard_enabled = ui->checkBoxPOSTCard->isChecked() ? 1 : 0;
|
postcard_enabled = ui->checkBoxPOSTCard->isChecked() ? 1 : 0;
|
||||||
unittester_enabled = ui->checkBoxUnitTester->isChecked() ? 1 : 0;
|
unittester_enabled = ui->checkBoxUnitTester->isChecked() ? 1 : 0;
|
||||||
isartc_type = ui->comboBoxRTC->currentData().toInt();
|
novell_keycard_enabled = ui->checkBoxKeyCard->isChecked() ? 1 : 0;
|
||||||
|
isartc_type = ui->comboBoxRTC->currentData().toInt();
|
||||||
|
|
||||||
/* ISA memory boards. */
|
/* ISA memory boards. */
|
||||||
for (int i = 0; i < ISAMEM_MAX; i++) {
|
for (int i = 0; i < ISAMEM_MAX; i++) {
|
||||||
@@ -213,3 +218,14 @@ SettingsOtherPeripherals::on_pushButtonConfigureUT_clicked()
|
|||||||
{
|
{
|
||||||
DeviceConfig::ConfigureDevice(&unittester_device);
|
DeviceConfig::ConfigureDevice(&unittester_device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsOtherPeripherals::on_pushButtonConfigureKeyCard_clicked()
|
||||||
|
{
|
||||||
|
DeviceConfig::ConfigureDevice(&novell_keycard_device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsOtherPeripherals::on_checkBoxKeyCard_stateChanged(int arg1)
|
||||||
|
{
|
||||||
|
ui->pushButtonConfigureKeyCard->setEnabled(arg1 != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -33,6 +33,10 @@ private slots:
|
|||||||
void on_checkBoxUnitTester_stateChanged(int arg1);
|
void on_checkBoxUnitTester_stateChanged(int arg1);
|
||||||
void on_pushButtonConfigureUT_clicked();
|
void on_pushButtonConfigureUT_clicked();
|
||||||
|
|
||||||
|
void on_pushButtonConfigureKeyCard_clicked();
|
||||||
|
|
||||||
|
void on_checkBoxKeyCard_stateChanged(int arg1);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::SettingsOtherPeripherals *ui;
|
Ui::SettingsOtherPeripherals *ui;
|
||||||
int machineId { 0 };
|
int machineId { 0 };
|
||||||
|
@@ -37,15 +37,15 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="comboBoxRTC">
|
<widget class="QComboBox" name="comboBoxRTC">
|
||||||
<property name="maxVisibleItems">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@@ -72,15 +72,15 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="1">
|
||||||
<widget class="QComboBox" name="comboBoxCard2">
|
<widget class="QComboBox" name="comboBoxCard2">
|
||||||
<property name="maxVisibleItems">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="2">
|
<item row="2" column="2">
|
||||||
@@ -113,15 +113,15 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<widget class="QComboBox" name="comboBoxCard1">
|
<widget class="QComboBox" name="comboBoxCard1">
|
||||||
<property name="maxVisibleItems">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
@@ -133,28 +133,28 @@
|
|||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QComboBox" name="comboBoxCard3">
|
<widget class="QComboBox" name="comboBoxCard3">
|
||||||
<property name="maxVisibleItems">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QComboBox" name="comboBoxCard4">
|
<widget class="QComboBox" name="comboBoxCard4">
|
||||||
<property name="maxVisibleItems">
|
|
||||||
<number>30</number>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="2">
|
<item row="3" column="2">
|
||||||
@@ -196,15 +196,15 @@
|
|||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="checkBoxUnitTester">
|
<widget class="QCheckBox" name="checkBoxUnitTester">
|
||||||
<property name="text">
|
|
||||||
<string>86Box Unit Tester</string>
|
|
||||||
</property>
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>86Box Unit Tester</string>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
@@ -216,6 +216,40 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="checkBoxKeyCard">
|
||||||
|
<property name="text">
|
||||||
|
<string>Novell NetWare 2.x Key Card</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="pushButtonConfigureKeyCard">
|
||||||
|
<property name="text">
|
||||||
|
<string>Configure</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
Reference in New Issue
Block a user