mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-05-09 03:41:10 +08:00

This commit fixes most -Wzero-as-null-pointer-constant warnings, except in some places which appear to be vendored 3rd party libraries, e.g. in sdl_ttf.c, libchdr, physfs and gmock and in 3rd party components therein. Since it might make more sense to update this 3rd party code to some later versions instead of fixing the warnings manually, I decided not to enable the C++ compiler flag in configure.ac at this point. In two functions with the return type of std::string executed `return 0;` statements, causing std::string to be constructed from a null pointer. To avoid undefined behavior these were changed to `return {};`. Signed-off-by: Jaak Ristioja <jaak@ristioja.ee>
115 lines
3.4 KiB
C++
115 lines
3.4 KiB
C++
/*
|
|
* Copyright (C) 2002-2021 The DOSBox Team
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
|
|
#ifndef DOSBOX_CALLBACK_H
|
|
#define DOSBOX_CALLBACK_H
|
|
|
|
#include "mem.h"
|
|
|
|
typedef Bitu (*CallBack_Handler)(void);
|
|
extern CallBack_Handler CallBack_Handlers[];
|
|
|
|
enum { CB_RETN,CB_RETF,CB_RETF8,CB_IRET,CB_IRETD,CB_IRET_STI,CB_IRET_EOI_PIC1,
|
|
CB_IRQ0,CB_IRQ1,CB_IRQ1_BREAK,CB_IRQ9,CB_IRQ12,CB_IRQ12_RET,CB_MOUSE,
|
|
CB_INT28,CB_INT29,CB_INT16,CB_HOOKABLE,CB_TDE_IRET,CB_IPXESR,CB_IPXESR_RET,
|
|
CB_INT21,CB_INT13,CB_VESA_WAIT,CB_VESA_PM,CB_IRET_EOI_PIC2,CB_CPM,
|
|
CB_RETF_STI,CB_RETF_CLI,CB_INT6F_ATOK};
|
|
|
|
/* NTS: Cannot make runtime configurable, because CB_MAX is used to define an array */
|
|
#define CB_MAX 128U
|
|
#define CB_SIZE 32U
|
|
|
|
/* we can make THESE configurable though! */
|
|
//#define CB_SEG 0xF000
|
|
//#define CB_SOFFSET 0x1000
|
|
extern uint16_t CB_SEG,CB_SOFFSET;
|
|
|
|
enum {
|
|
CBRET_NONE=0,CBRET_STOP=1
|
|
};
|
|
|
|
extern uint8_t lastint;
|
|
|
|
static INLINE RealPt CALLBACK_RealPointer(Bitu callback) {
|
|
return RealMake(CB_SEG,(uint16_t)(CB_SOFFSET+callback*CB_SIZE));
|
|
}
|
|
static INLINE PhysPt CALLBACK_PhysPointer(Bitu callback) {
|
|
return PhysMake(CB_SEG,(uint16_t)(CB_SOFFSET+callback*CB_SIZE));
|
|
}
|
|
|
|
static inline PhysPt CALLBACK_GetBase(void) {
|
|
return (PhysPt)(((PhysPt)CB_SEG << (PhysPt)4U) + (PhysPt)CB_SOFFSET);
|
|
}
|
|
|
|
uint8_t CALLBACK_Allocate();
|
|
|
|
void CALLBACK_Idle(void);
|
|
|
|
|
|
void CALLBACK_RunRealInt(uint8_t intnum);
|
|
void CALLBACK_RunRealFar(uint16_t seg,uint16_t off);
|
|
void CALLBACK_RunRealFarInt(uint16_t seg,uint16_t off);
|
|
|
|
bool CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,const char* descr);
|
|
Bitu CALLBACK_Setup(Bitu callback,CallBack_Handler handler,Bitu type,PhysPt addr,const char* descr);
|
|
|
|
void CALLBACK_SetDescription(Bitu nr, const char* descr);
|
|
const char* CALLBACK_GetDescription(Bitu nr);
|
|
|
|
void CALLBACK_SCF(bool val);
|
|
void CALLBACK_SZF(bool val);
|
|
void CALLBACK_SIF(bool val);
|
|
|
|
extern Bitu call_priv_io;
|
|
|
|
|
|
class CALLBACK_HandlerObject{
|
|
private:
|
|
bool installed = false;
|
|
Bitu m_callback = 0; // NULL
|
|
enum {NONE,SETUP,SETUPAT} m_type = NONE;
|
|
struct {
|
|
RealPt old_vector;
|
|
uint8_t interrupt;
|
|
bool installed;
|
|
} vectorhandler;
|
|
public:
|
|
CALLBACK_HandlerObject() {
|
|
vectorhandler.installed=false;
|
|
}
|
|
~CALLBACK_HandlerObject();
|
|
|
|
//Install and allocate a callback.
|
|
void Install(CallBack_Handler handler,Bitu type,const char* description);
|
|
void Install(CallBack_Handler handler,Bitu type,PhysPt addr,const char* description);
|
|
|
|
void Uninstall();
|
|
|
|
//Only allocate a callback number
|
|
void Allocate(CallBack_Handler handler,const char* description=nullptr);
|
|
uint16_t Get_callback() {
|
|
return (uint16_t)m_callback;
|
|
}
|
|
RealPt Get_RealPointer() {
|
|
return CALLBACK_RealPointer(m_callback);
|
|
}
|
|
void Set_RealVec(uint8_t vec,bool reinstall=false);
|
|
};
|
|
#endif
|