mirror of
https://github.com/opentx/opentx.git
synced 2025-07-13 03:19:53 +03:00
parent
b7855cf14d
commit
7806c2096d
13 changed files with 77 additions and 73 deletions
|
@ -82,6 +82,7 @@ addons:
|
||||||
# secure: "Qkmp4VrQJtKgZ/pz65SNnCDiF4slgFfQS/3whyLXLcDbFb1Hv1oj7Hqz9EVDUSO2eEhgQGaOKkRc0CfAAOBwW6OvhE0xh7P1CJEjzOp6+3gI/LyZUNsqa+awVRZTsfm1YZaOPaPWJ7cI0uz3/OoSUeIecs4PDWPrQMGRlsrq7Q8="
|
# secure: "Qkmp4VrQJtKgZ/pz65SNnCDiF4slgFfQS/3whyLXLcDbFb1Hv1oj7Hqz9EVDUSO2eEhgQGaOKkRc0CfAAOBwW6OvhE0xh7P1CJEjzOp6+3gI/LyZUNsqa+awVRZTsfm1YZaOPaPWJ7cI0uz3/OoSUeIecs4PDWPrQMGRlsrq7Q8="
|
||||||
branches:
|
branches:
|
||||||
- "2.2"
|
- "2.2"
|
||||||
|
- .*/sonar
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- build-wrapper-linux-x86-64 --out-dir bw_output ./tools/commit-tests.sh
|
- build-wrapper-linux-x86-64 --out-dir bw_output ./tools/commit-tests.sh
|
||||||
|
|
|
@ -27,7 +27,7 @@ endif()
|
||||||
|
|
||||||
set(CMAKE_COLOR_MAKEFILE ON)
|
set(CMAKE_COLOR_MAKEFILE ON)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
|
||||||
set(RADIO_DIRECTORY ${PROJECT_SOURCE_DIR}/radio)
|
set(RADIO_DIRECTORY ${PROJECT_SOURCE_DIR}/radio)
|
||||||
set(RADIO_SRC_DIRECTORY ${RADIO_DIRECTORY}/src)
|
set(RADIO_SRC_DIRECTORY ${RADIO_DIRECTORY}/src)
|
||||||
|
|
|
@ -42,11 +42,11 @@ macro(git_id RESULT)
|
||||||
endif()
|
endif()
|
||||||
endmacro(git_id)
|
endmacro(git_id)
|
||||||
|
|
||||||
macro(use_cxx11)
|
macro(use_cxx14)
|
||||||
if (CMAKE_VERSION VERSION_LESS "3.1" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if (CMAKE_VERSION VERSION_LESS "3.1" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}")
|
set (CMAKE_CXX_FLAGS "--std=c++14 ${CMAKE_CXX_FLAGS}")
|
||||||
endif ()
|
endif ()
|
||||||
endmacro(use_cxx11)
|
endmacro(use_cxx14)
|
||||||
|
|
||||||
macro(PrintTargetReport targetName)
|
macro(PrintTargetReport targetName)
|
||||||
if(CMAKE_CXX_COMPILER MATCHES "/cl\\.exe$")
|
if(CMAKE_CXX_COMPILER MATCHES "/cl\\.exe$")
|
||||||
|
|
|
@ -96,7 +96,7 @@ endif()
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
|
||||||
|
|
||||||
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
|
use_cxx14() # ensure c++14 in CXX_FLAGS with CMake < 3.1
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${CMAKE_BINARY_DIR}
|
${CMAKE_BINARY_DIR}
|
||||||
|
|
|
@ -523,7 +523,6 @@ void ModulePanel::update()
|
||||||
ui->label_option->setText(qApp->translate("Multiprotocols", qPrintable(pdef.optionsstr)));
|
ui->label_option->setText(qApp->translate("Multiprotocols", qPrintable(pdef.optionsstr)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Failsafes
|
|
||||||
ui->label_failsafeMode->setVisible(mask & MASK_FAILSAFES);
|
ui->label_failsafeMode->setVisible(mask & MASK_FAILSAFES);
|
||||||
ui->failsafeMode->setVisible(mask & MASK_FAILSAFES);
|
ui->failsafeMode->setVisible(mask & MASK_FAILSAFES);
|
||||||
|
|
||||||
|
|
|
@ -393,7 +393,7 @@ endforeach()
|
||||||
add_definitions(-DCORRECT_NEGATIVE_SHIFTS)
|
add_definitions(-DCORRECT_NEGATIVE_SHIFTS)
|
||||||
|
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
set(WARNING_FLAGS "${WARNING_FLAGS} -Wall -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits")
|
set(WARNING_FLAGS "${WARNING_FLAGS} -Wall -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits -Wno-attributes")
|
||||||
if(WARNINGS_AS_ERRORS)
|
if(WARNINGS_AS_ERRORS)
|
||||||
set(WARNING_FLAGS "${WARNING_FLAGS} -Werror")
|
set(WARNING_FLAGS "${WARNING_FLAGS} -Werror")
|
||||||
endif(WARNINGS_AS_ERRORS)
|
endif(WARNINGS_AS_ERRORS)
|
||||||
|
@ -443,7 +443,7 @@ set(CMAKE_EXE_LINKER_FLAGS "")
|
||||||
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>")
|
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>")
|
||||||
set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>")
|
set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>")
|
||||||
|
|
||||||
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
|
use_cxx14() # ensure c++14 in CXX_FLAGS with CMake < 3.1
|
||||||
|
|
||||||
find_program(BASH bash HINTS "c:/cygwin/bin/" "c:/msys/bin/" DOC "bash shell for firmware size report (eg. c:/cygwin/bin/bash.exe on Windows).")
|
find_program(BASH bash HINTS "c:/cygwin/bin/" "c:/msys/bin/" DOC "bash shell for firmware size report (eg. c:/cygwin/bin/bash.exe on Windows).")
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ void editName(coord_t x, coord_t y, char * name, uint8_t size, event_t event, ui
|
||||||
killEvents(event);
|
killEvents(event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// no break
|
[[fallthrough]];
|
||||||
|
|
||||||
case EVT_KEY_LONG(KEY_LEFT):
|
case EVT_KEY_LONG(KEY_LEFT):
|
||||||
case EVT_KEY_LONG(KEY_RIGHT):
|
case EVT_KEY_LONG(KEY_RIGHT):
|
||||||
|
|
|
@ -88,19 +88,19 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_SETUP_MAX
|
ITEM_MODEL_SETUP_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MODEL_SETUP_2ND_COLUMN 200
|
#define MODEL_SETUP_2ND_COLUMN 200
|
||||||
#define MODEL_SETUP_3RD_COLUMN 270
|
#define MODEL_SETUP_3RD_COLUMN 270
|
||||||
#define MODEL_SETUP_4TH_COLUMN 350
|
#define MODEL_SETUP_4TH_COLUMN 350
|
||||||
#define MODEL_SETUP_BIND_OFS 40
|
#define MODEL_SETUP_BIND_OFS 40
|
||||||
#define MODEL_SETUP_RANGE_OFS 80
|
#define MODEL_SETUP_RANGE_OFS 80
|
||||||
#define MODEL_SETUP_SET_FAILSAFE_OFS 100
|
#define MODEL_SETUP_SET_FAILSAFE_OFS 100
|
||||||
#define MODEL_SETUP_SLIDPOT_SPACING 45
|
#define MODEL_SETUP_SLIDPOT_SPACING 45
|
||||||
|
|
||||||
#define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE))
|
#define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE))
|
||||||
|
|
||||||
void onBindMenu(const char * result)
|
void onBindMenu(const char * result)
|
||||||
{
|
{
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition);
|
uint8_t moduleIdx = (menuVerticalPosition >= ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE);
|
||||||
|
|
||||||
if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) {
|
if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) {
|
||||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
||||||
|
|
|
@ -22,41 +22,41 @@
|
||||||
|
|
||||||
#if !defined(SIMU)
|
#if !defined(SIMU)
|
||||||
|
|
||||||
#define VS_WRITE_COMMAND 0x02
|
#define VS_WRITE_COMMAND 0x02
|
||||||
#define VS_READ_COMMAND 0x03
|
#define VS_READ_COMMAND 0x03
|
||||||
|
|
||||||
#define SPI_MODE 0x00
|
#define SPI_MODE 0x00
|
||||||
#define SPI_STATUS 0x01
|
#define SPI_STATUS 0x01
|
||||||
#define SPI_BASS 0x02
|
#define SPI_BASS 0x02
|
||||||
#define SPI_CLOCKF 0x03
|
#define SPI_CLOCKF 0x03
|
||||||
#define SPI_DECODE_TIME 0x04
|
#define SPI_DECODE_TIME 0x04
|
||||||
#define SPI_AUDATA 0x05
|
#define SPI_AUDATA 0x05
|
||||||
#define SPI_WRAM 0x06
|
#define SPI_WRAM 0x06
|
||||||
#define SPI_WRAMADDR 0x07
|
#define SPI_WRAMADDR 0x07
|
||||||
#define SPI_HDAT0 0x08
|
#define SPI_HDAT0 0x08
|
||||||
#define SPI_HDAT1 0x09
|
#define SPI_HDAT1 0x09
|
||||||
#define SPI_AIADDR 0x0a
|
#define SPI_AIADDR 0x0a
|
||||||
#define SPI_VOL 0x0b
|
#define SPI_VOL 0x0b
|
||||||
#define SPI_AICTRL0 0x0c
|
#define SPI_AICTRL0 0x0c
|
||||||
#define SPI_AICTRL1 0x0d
|
#define SPI_AICTRL1 0x0d
|
||||||
#define SPI_AICTRL2 0x0e
|
#define SPI_AICTRL2 0x0e
|
||||||
#define SPI_AICTRL3 0x0f
|
#define SPI_AICTRL3 0x0f
|
||||||
|
|
||||||
#define SM_DIFF 0x01
|
#define SM_DIFF 0x01
|
||||||
#define SM_LAYER12 0x02
|
#define SM_LAYER12 0x02
|
||||||
#define SM_RESET 0x04
|
#define SM_RESET 0x04
|
||||||
#define SM_CANCEL 0x08
|
#define SM_CANCEL 0x08
|
||||||
#define SM_EARSPEAKER_LO 0x10
|
#define SM_EARSPEAKER_LO 0x10
|
||||||
#define SM_TESTS 0x20
|
#define SM_TESTS 0x20
|
||||||
#define SM_STREAM 0x40
|
#define SM_STREAM 0x40
|
||||||
#define SM_EARSPEAKER_HI 0x80
|
#define SM_EARSPEAKER_HI 0x80
|
||||||
#define SM_DACT 0x100
|
#define SM_DACT 0x100
|
||||||
#define SM_SDIORD 0x200
|
#define SM_SDIORD 0x200
|
||||||
#define SM_SDISHARE 0x400
|
#define SM_SDISHARE 0x400
|
||||||
#define SM_SDINEW 0x800
|
#define SM_SDINEW 0x800
|
||||||
#define SM_ADPCM 0x1000
|
#define SM_ADPCM 0x1000
|
||||||
#define SM_LINE1 0x4000
|
#define SM_LINE1 0x4000
|
||||||
#define SM_CLK_RANGE 0x8000
|
#define SM_CLK_RANGE 0x8000
|
||||||
|
|
||||||
#define SPI_SPEED_2 0
|
#define SPI_SPEED_2 0
|
||||||
#define SPI_SPEED_4 1
|
#define SPI_SPEED_4 1
|
||||||
|
@ -136,34 +136,34 @@ void audioSpiInit(void)
|
||||||
|
|
||||||
void audioSpiSetSpeed(uint8_t speed)
|
void audioSpiSetSpeed(uint8_t speed)
|
||||||
{
|
{
|
||||||
AUDIO_SPI->CR1 &= 0XFFC7; // Fsck=Fcpu/256
|
AUDIO_SPI->CR1 &= 0xFFC7; // Fsck=Fcpu/256
|
||||||
switch(speed) {
|
switch (speed) {
|
||||||
case SPI_SPEED_2:
|
case SPI_SPEED_2:
|
||||||
AUDIO_SPI->CR1 |= 0<<3; // Fsck=Fpclk/2=36Mhz
|
AUDIO_SPI->CR1 |= 0x00 << 3; // Fsck=Fpclk/2=36Mhz
|
||||||
break;
|
break;
|
||||||
case SPI_SPEED_4:
|
case SPI_SPEED_4:
|
||||||
AUDIO_SPI->CR1 |= 1<<3; // Fsck=Fpclk/4=18Mhz
|
AUDIO_SPI->CR1 |= 0x01 << 3; // Fsck=Fpclk/4=18Mhz
|
||||||
break;
|
break;
|
||||||
case SPI_SPEED_8:
|
case SPI_SPEED_8:
|
||||||
AUDIO_SPI->CR1 |= 2<<3; // Fsck=Fpclk/8=9Mhz
|
AUDIO_SPI->CR1 |= 0x02 << 3; // Fsck=Fpclk/8=9Mhz
|
||||||
break;
|
break;
|
||||||
case SPI_SPEED_16:
|
case SPI_SPEED_16:
|
||||||
AUDIO_SPI->CR1 |= 3<<3; // Fsck=Fpclk/16=4.5Mhz
|
AUDIO_SPI->CR1 |= 0x03 << 3; // Fsck=Fpclk/16=4.5Mhz
|
||||||
break;
|
break;
|
||||||
case SPI_SPEED_32:
|
case SPI_SPEED_32:
|
||||||
AUDIO_SPI->CR1 |= 4<<3; // Fsck=Fpclk/32=2.25Mhz
|
AUDIO_SPI->CR1 |= 0x04 << 3; // Fsck=Fpclk/32=2.25Mhz
|
||||||
break;
|
break;
|
||||||
case SPI_SPEED_64:
|
case SPI_SPEED_64:
|
||||||
AUDIO_SPI->CR1 |= 5<<3; // Fsck=Fpclk/16=1.125Mhz
|
AUDIO_SPI->CR1 |= 0x05 << 3; // Fsck=Fpclk/16=1.125Mhz
|
||||||
break;
|
break;
|
||||||
case SPI_SPEED_128:
|
case SPI_SPEED_128:
|
||||||
AUDIO_SPI->CR1 |= 6<<3; // Fsck=Fpclk/16=562.5Khz
|
AUDIO_SPI->CR1 |= 0x06 << 3; // Fsck=Fpclk/16=562.5Khz
|
||||||
break;
|
break;
|
||||||
case SPI_SPEED_256:
|
case SPI_SPEED_256:
|
||||||
AUDIO_SPI->CR1 |= 7<<3; // Fsck=Fpclk/16=281.25Khz
|
AUDIO_SPI->CR1 |= 0x07 << 3; // Fsck=Fpclk/16=281.25Khz
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
AUDIO_SPI->CR1 |= 1<<6;
|
AUDIO_SPI->CR1 |= 0x01 << 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t audioSpiReadWriteByte(uint8_t value)
|
uint8_t audioSpiReadWriteByte(uint8_t value)
|
||||||
|
|
|
@ -77,7 +77,7 @@ endif()
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
|
||||||
|
|
||||||
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
|
use_cxx14() # ensure c++14 in CXX_FLAGS with CMake < 3.1
|
||||||
|
|
||||||
if(FOX_FOUND)
|
if(FOX_FOUND)
|
||||||
if(SIMU_DISKIO)
|
if(SIMU_DISKIO)
|
||||||
|
|
|
@ -371,8 +371,10 @@ TCHAR * f_gets (TCHAR* buff, int len, FIL* fil)
|
||||||
|
|
||||||
FRESULT f_lseek (FIL* fil, DWORD offset)
|
FRESULT f_lseek (FIL* fil, DWORD offset)
|
||||||
{
|
{
|
||||||
if (fil && fil->obj.fs) fseek((FILE*)fil->obj.fs, offset, SEEK_SET);
|
if (fil && fil->obj.fs) {
|
||||||
fil->fptr = offset;
|
fseek((FILE*)fil->obj.fs, offset, SEEK_SET);
|
||||||
|
fil->fptr = offset;
|
||||||
|
}
|
||||||
return FR_OK;
|
return FR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,7 +427,9 @@ FRESULT f_opendir (DIR * rep, const TCHAR * name)
|
||||||
FRESULT f_closedir (DIR * rep)
|
FRESULT f_closedir (DIR * rep)
|
||||||
{
|
{
|
||||||
TRACE_SIMPGMSPACE("f_closedir(%p)", rep);
|
TRACE_SIMPGMSPACE("f_closedir(%p)", rep);
|
||||||
if (rep->obj.fs) simu::closedir((simu::DIR *)rep->obj.fs);
|
if (rep->obj.fs) {
|
||||||
|
simu::closedir((simu::DIR *)rep->obj.fs);
|
||||||
|
}
|
||||||
return FR_OK;
|
return FR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ if(GTEST_INCDIR AND GTEST_SRCDIR AND Qt5Widgets_FOUND)
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
|
||||||
|
|
||||||
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
|
use_cxx14() # ensure c++14 in CXX_FLAGS with CMake < 3.1
|
||||||
|
|
||||||
add_executable(gtests EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp ../targets/simu/simueeprom.cpp ../targets/simu/simufatfs.cpp)
|
add_executable(gtests EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp ../targets/simu/simueeprom.cpp ../targets/simu/simufatfs.cpp)
|
||||||
qt5_use_modules(gtests Core Widgets)
|
qt5_use_modules(gtests Core Widgets)
|
||||||
|
|
|
@ -62,17 +62,17 @@ TEST(Lua, testPanicProtection)
|
||||||
bool passed = false;
|
bool passed = false;
|
||||||
PROTECT_LUA() {
|
PROTECT_LUA() {
|
||||||
PROTECT_LUA() {
|
PROTECT_LUA() {
|
||||||
//simulate panic
|
// simulate panic
|
||||||
longjmp(global_lj->b, 1);
|
longjmp(global_lj->b, 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//we should come here
|
// we should come here
|
||||||
passed = true;
|
passed = true;
|
||||||
}
|
}
|
||||||
UNPROTECT_LUA();
|
UNPROTECT_LUA();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// an not here
|
// and not here
|
||||||
// TRACE("testLuaProtection: test 1 FAILED");
|
// TRACE("testLuaProtection: test 1 FAILED");
|
||||||
FAIL() << "Failed test 1";
|
FAIL() << "Failed test 1";
|
||||||
}
|
}
|
||||||
|
@ -85,15 +85,15 @@ TEST(Lua, testPanicProtection)
|
||||||
PROTECT_LUA() {
|
PROTECT_LUA() {
|
||||||
PROTECT_LUA() {
|
PROTECT_LUA() {
|
||||||
int a = 5;
|
int a = 5;
|
||||||
a = a; // avoids the warning
|
UNUSED(a);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//we should not come here
|
// we should not come here
|
||||||
// TRACE("testLuaProtection: test 2 FAILED");
|
// TRACE("testLuaProtection: test 2 FAILED");
|
||||||
FAIL() << "Failed test 2";
|
FAIL() << "Failed test 2";
|
||||||
}
|
}
|
||||||
UNPROTECT_LUA()
|
UNPROTECT_LUA()
|
||||||
//simulate panic
|
// simulate panic
|
||||||
longjmp(global_lj->b, 1);
|
longjmp(global_lj->b, 1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue