New upstream version 6.0.24.16

This commit is contained in:
Dave Hibberd 2023-10-31 22:42:23 +00:00
parent 7b2a99c53b
commit 120df97dc7
52 changed files with 1118 additions and 14099 deletions

View File

@ -55,11 +55,14 @@ struct AGWSocketConnectionInfo
BOOL SocketActive; BOOL SocketActive;
BOOL RawFlag; BOOL RawFlag;
BOOL MonFlag; BOOL MonFlag;
BOOL useLocalTime;
BOOL doNodes;
unsigned char CallSign1[10]; unsigned char CallSign1[10];
unsigned char CallSign2[10]; unsigned char CallSign2[10];
BOOL GotHeader; BOOL GotHeader;
int MsgDataLength; int MsgDataLength;
struct AGWHeader AGWRXHeader; struct AGWHeader AGWRXHeader;
unsigned char * MsgData;
}; };
struct BPQConnectionInfo struct BPQConnectionInfo
@ -75,8 +78,6 @@ struct BPQConnectionInfo
char AGWPorts[1000]; char AGWPorts[1000];
byte AGWMessage[1000];
struct AGWHeader AGWTXHeader; struct AGWHeader AGWTXHeader;
char SessionList[100]; char SessionList[100];
@ -127,7 +128,7 @@ int DataSocket_Write(struct AGWSocketConnectionInfo * sockptr, SOCKET sock);
int AGWGetSessionKey(char * key, struct AGWSocketConnectionInfo * sockptr); int AGWGetSessionKey(char * key, struct AGWSocketConnectionInfo * sockptr);
int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr); int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr);
int SendDataToAppl(int Stream, byte * Buffer, int Length); int SendDataToAppl(int Stream, byte * Buffer, int Length);
int InternalAGWDecodeFrame(char * msg, char * buffer, int Stamp, int * FrameType); int InternalAGWDecodeFrame(char * msg, char * buffer, int Stamp, int * FrameType, int useLocalTime, int doNodes);
int AGWDataSocket_Disconnect( struct AGWSocketConnectionInfo * sockptr); int AGWDataSocket_Disconnect( struct AGWSocketConnectionInfo * sockptr);
int SendRawPacket(struct AGWSocketConnectionInfo * sockptr, char *txmsg, int Length); int SendRawPacket(struct AGWSocketConnectionInfo * sockptr, char *txmsg, int Length);
int ShowApps(); int ShowApps();
@ -686,7 +687,7 @@ int AGWDoMonitorData()
byte AGWBuffer[1000]; byte AGWBuffer[1000];
int n; int n;
int Stamp, Frametype; int Stamp, Frametype;
BOOL RXFlag, NeedAGW; BOOL RXFlag;
// Look for Monitor Data // Look for Monitor Data
@ -731,24 +732,16 @@ int AGWDoMonitorData()
RXFlag = TRUE; RXFlag = TRUE;
} }
NeedAGW = FALSE; // Can now have different mon flags per connection, so need to run decode for each socket
for (n = 1; n<= CurrentSockets; n++) for (n = 1; n<= CurrentSockets; n++)
{ {
sockptr=&Sockets[n]; sockptr = &Sockets[n];
if (sockptr->SocketActive && sockptr->MonFlag) NeedAGW = TRUE; if (sockptr->SocketActive && sockptr->MonFlag && (RXFlag || LoopMonFlag))
}
if (NeedAGW)
{
if (RXFlag || LoopMonFlag) // only send txed frames if requested
{ {
Length = InternalAGWDecodeFrame(Buffer, AGWBuffer,Stamp, &Frametype); Length = InternalAGWDecodeFrame(Buffer, AGWBuffer, Stamp, &Frametype, sockptr->useLocalTime, sockptr->doNodes);
//
// Decode frame and send to applications which have requested monitoring
//
if (Length > 0) if (Length > 0)
{ {
AGWTXHeader.Port = Port - 1; // AGW Ports start from 0 AGWTXHeader.Port = Port - 1; // AGW Ports start from 0
@ -786,13 +779,7 @@ int AGWDoMonitorData()
memset(AGWTXHeader.callfrom, 0,10); memset(AGWTXHeader.callfrom, 0,10);
ConvFromAX25(monbuff->ORIGIN, AGWTXHeader.callfrom); ConvFromAX25(monbuff->ORIGIN, AGWTXHeader.callfrom);
for (n = 1; n<= CurrentSockets; n++) SendRawPacket(sockptr, AGWBuffer, Length);
{
sockptr=&Sockets[n];
if (sockptr->SocketActive && sockptr->MonFlag)
SendRawPacket(sockptr, AGWBuffer, Length);
}
} }
} }
} }
@ -1039,10 +1026,13 @@ int AGWDataSocket_Read(struct AGWSocketConnectionInfo * sockptr, SOCKET sock)
if (DataLength >= sockptr->MsgDataLength) if (DataLength >= sockptr->MsgDataLength)
{ {
// Read Data and Process Command // Read Data and Process Command
sockptr->MsgData = malloc(sockptr->MsgDataLength);
i=recv(sock, AGWMessage, sockptr->MsgDataLength, 0); i = recv(sock, sockptr->MsgData, sockptr->MsgDataLength, 0);
ProcessAGWCommand (sockptr); ProcessAGWCommand (sockptr);
free(sockptr->MsgData);
sockptr->GotHeader = FALSE; sockptr->GotHeader = FALSE;
} }
@ -1168,7 +1158,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
{ {
// Have digis // Have digis
char * Digis = AGWMessage; char * Digis = sockptr->MsgData;
int nDigis = Digis[0]; int nDigis = Digis[0];
Digis ++; Digis ++;
@ -1205,7 +1195,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
{ {
if (memcmp(AGWConnections[con].CallKey,key,21) == 0) if (memcmp(AGWConnections[con].CallKey,key,21) == 0)
{ {
SendMsg(AGWConnections[con].BPQStream, AGWMessage, sockptr->MsgDataLength); SendMsg(AGWConnections[con].BPQStream, sockptr->MsgData, sockptr->MsgDataLength);
return 0; return 0;
} }
} }
@ -1294,15 +1284,28 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
// Send Raw Frame // Send Raw Frame
SendRaw(sockptr->AGWRXHeader.Port+1,&AGWMessage[1], sockptr->MsgDataLength - 1); SendRaw(sockptr->AGWRXHeader.Port+1,&sockptr->MsgData[1], sockptr->MsgDataLength - 1);
return 0; return 0;
case 'm': case 'm':
// Toggle Monitor receive // Toggle Monitor receive
sockptr->MonFlag = !sockptr->MonFlag; if (sockptr->AGWRXHeader.DataLength == 12) // QtTermTCP monitor info
{
// Msg[AGWHDDRRLEN] = AGWUsers->MonSess->mlocaltime;
// Msg[AGWHDDRRLEN + 1] = AGWUsers->MonSess->MonitorNODES;
//Msg[AGWHDDRRLEN + 2] = AGWUsers->MonSess->MonitorColour;
// Msg[AGWHDDRRLEN + 3] = AGWUsers->MonSess->mtxparam;
// memcpy(&Msg[AGWHDDRRLEN + 4], (void *)&AGWUsers->MonSess->portmask, 8);
sockptr->useLocalTime = sockptr->MsgData[0];
sockptr->doNodes = sockptr->MsgData[1];
sockptr->MonFlag = 1;
}
else
sockptr->MonFlag = !sockptr->MonFlag;
return 0; return 0;
@ -1318,11 +1321,11 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
if (sockptr->AGWRXHeader.DataKind == 'V') // Unproto with VIA string if (sockptr->AGWRXHeader.DataKind == 'V') // Unproto with VIA string
{ {
Digis = AGWMessage[0]; // Number of digis Digis = sockptr->MsgData[0]; // Number of digis
for (j = 1; j<= Digis; j++) for (j = 1; j<= Digis; j++)
{ {
ConvToAX25(&AGWMessage[(j - 1) * 10 + 1],&TXMessage[7+(j*7)]); // No "last" bit ConvToAX25(&sockptr->MsgData[(j - 1) * 10 + 1],&TXMessage[7+(j*7)]); // No "last" bit
} }
// set end of call // set end of call
@ -1342,7 +1345,7 @@ int ProcessAGWCommand(struct AGWSocketConnectionInfo * sockptr)
else else
*(TXMessageptr++) = sockptr->AGWRXHeader.PID; *(TXMessageptr++) = sockptr->AGWRXHeader.PID;
memcpy(TXMessageptr,&AGWMessage[MsgStart], sockptr->MsgDataLength - MsgStart); memcpy(TXMessageptr,&sockptr->MsgData[MsgStart], sockptr->MsgDataLength - MsgStart);
TXMessageptr += (sockptr->MsgDataLength - MsgStart); TXMessageptr += (sockptr->MsgDataLength - MsgStart);

View File

@ -64,12 +64,12 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
char * strlop(char * buf, char delim); char * strlop(char * buf, char delim);
UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, int msglen); UCHAR * DisplayINP3RIF(UCHAR * ptr1, UCHAR * ptr2, int msglen);
static UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen); static UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen, int DoNodes);
static UCHAR * DISPLAYIPDATAGRAM(IPMSG * IP, UCHAR * Output, int MsgLen); static UCHAR * DISPLAYIPDATAGRAM(IPMSG * IP, UCHAR * Output, int MsgLen);
static UCHAR * DISPLAYARPDATAGRAM(UCHAR * Datagram, UCHAR * Output); static UCHAR * DISPLAYARPDATAGRAM(UCHAR * Datagram, UCHAR * Output);
int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameType) int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameType, int useLocalTime, int DoNodes)
{ {
UCHAR * ptr; UCHAR * ptr;
int n; int n;
@ -81,7 +81,6 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameT
char PFCHAR[3] = " "; char PFCHAR[3] = " ";
int MSGFLAG = 0; //CR and V1 flags int MSGFLAG = 0; //CR and V1 flags
char * Output = buffer; char * Output = buffer;
int HH, MM, SS;
char From[10], To[10]; char From[10], To[10];
BOOL Info = 0; BOOL Info = 0;
BOOL FRMRFLAG = 0; BOOL FRMRFLAG = 0;
@ -89,6 +88,13 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameT
BOOL TESTFLAG = 0; BOOL TESTFLAG = 0;
size_t MsgLen = msg->LENGTH; size_t MsgLen = msg->LENGTH;
struct tm * TM;
if (useLocalTime)
TM = localtime(&Stamp);
else
TM = gmtime(&Stamp);
// GET THE CONTROL BYTE, TO SEE IF THIS FRAME IS TO BE DISPLAYED // GET THE CONTROL BYTE, TO SEE IF THIS FRAME IS TO BE DISPLAYED
n = 8; // MAX DIGIS n = 8; // MAX DIGIS
@ -124,14 +130,6 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameT
*FrameType = CTL; *FrameType = CTL;
Stamp = Stamp % 86400; // Secs
HH = Stamp / 3600;
Stamp -= HH * 3600;
MM = Stamp / 60;
SS = Stamp - MM * 60;
Output += sprintf((char *)Output, " %d:Fm ", msg->PORT & 0x7f); // Mask TX bit Output += sprintf((char *)Output, " %d:Fm ", msg->PORT & 0x7f); // Mask TX bit
From[ConvFromAX25(msg->ORIGIN, From)] = 0; From[ConvFromAX25(msg->ORIGIN, From)] = 0;
@ -297,7 +295,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameT
} }
Output += sprintf((char *)Output, "[%02d:%02d:%02d]", HH, MM, SS); Output += sprintf((char *)Output, "[%02d:%02d:%02d]", TM->tm_hour, TM->tm_min, TM->tm_sec);
if (FRMRFLAG) if (FRMRFLAG)
@ -345,7 +343,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameT
} }
case NETROM_PID: case NETROM_PID:
Output = DISPLAY_NETROM(ADJBUFFER, Output,(int) MsgLen); Output = DISPLAY_NETROM(ADJBUFFER, Output,(int) MsgLen, DoNodes);
break; break;
case IP_PID: case IP_PID:
@ -366,6 +364,9 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameT
} }
} }
if (Output == NULL)
return NULL;
if (Output[-1] != 13) if (Output[-1] != 13)
Output += sprintf((char *)Output, "\r"); Output += sprintf((char *)Output, "\r");
@ -374,7 +375,7 @@ int InternalAGWDecodeFrame(MESSAGE * msg, char * buffer, int Stamp, int * FrameT
} }
// Display NET/ROM data // Display NET/ROM data
UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen) UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen, int DoNodes)
{ {
char Alias[7]= ""; char Alias[7]= "";
char Dest[10]; char Dest[10];
@ -386,6 +387,8 @@ UCHAR * DISPLAY_NETROM(MESSAGE * ADJBUFFER, UCHAR * Output, int MsgLen)
{ {
// Display NODES // Display NODES
if (DoNodes == 0)
return NULL;
// If an INP3 RIF (type <> UI) decode as such // If an INP3 RIF (type <> UI) decode as such

View File

@ -2552,6 +2552,8 @@ VOID SendAPRSMessageEx(char * Message, int toPort, char * FromCall, int Gated)
else else
continue; continue;
Msg.DEST[6] |= 0x80; // set Command Bit
ConvToAX25(FromCall, Msg.ORIGIN); ConvToAX25(FromCall, Msg.ORIGIN);
Msg.PID = 0xf0; Msg.PID = 0xf0;
Msg.CTL = 3; Msg.CTL = 3;
@ -2580,6 +2582,8 @@ VOID SendAPRSMessageEx(char * Message, int toPort, char * FromCall, int Gated)
else else
return; return;
Msg.DEST[6] |= 0x80; // set Command Bit
ConvToAX25(FromCall, Msg.ORIGIN); ConvToAX25(FromCall, Msg.ORIGIN);
Msg.PID = 0xf0; Msg.PID = 0xf0;
Msg.CTL = 3; Msg.CTL = 3;
@ -2756,7 +2760,8 @@ void SendBeaconThread(void * Param)
Debugprintf("Sending APRS Beacon to port %d", toPort); Debugprintf("Sending APRS Beacon to port %d", toPort);
memcpy(Msg.DEST, &BeaconHeader[toPort][0][0], 10 * 7); // Clear unused digis memcpy(Msg.DEST, &BeaconHeader[toPort][0][0], 10 * 7); // Clear unused digis
Msg.DEST[6] |= 0x80; // set Command Bit
GetSemaphore(&Semaphore, 12); GetSemaphore(&Semaphore, 12);
Send_AX_Datagram(&Msg, Len + 2, toPort); Send_AX_Datagram(&Msg, Len + 2, toPort);
FreeSemaphore(&Semaphore); FreeSemaphore(&Semaphore);
@ -2780,6 +2785,8 @@ void SendBeaconThread(void * Param)
Msg.CTL = 3; Msg.CTL = 3;
memcpy(Msg.DEST, &BeaconHeader[Port][0][0], 10 * 7); memcpy(Msg.DEST, &BeaconHeader[Port][0][0], 10 * 7);
Msg.DEST[6] |= 0x80; // set Command Bit
GetSemaphore(&Semaphore, 12); GetSemaphore(&Semaphore, 12);
Send_AX_Datagram(&Msg, Len + 2, Port); Send_AX_Datagram(&Msg, Len + 2, Port);
FreeSemaphore(&Semaphore); FreeSemaphore(&Semaphore);
@ -2815,6 +2822,8 @@ VOID SendObject(struct OBJECT * Object)
Msg.CTL = 3; Msg.CTL = 3;
Len = sprintf(Msg.L2DATA, "%s", Object->Message); Len = sprintf(Msg.L2DATA, "%s", Object->Message);
memcpy(Msg.DEST, &Object->Path[0][0], Object->PathLen + 1); memcpy(Msg.DEST, &Object->Path[0][0], Object->PathLen + 1);
Msg.DEST[6] |= 0x80; // set Command Bit
Send_AX_Datagram(&Msg, Len + 2, Port); Send_AX_Datagram(&Msg, Len + 2, Port);
} }
} }
@ -2881,6 +2890,8 @@ VOID SendIStatus()
if (BeaconHddrLen[Port]) // Only send to ports with a DEST defined if (BeaconHddrLen[Port]) // Only send to ports with a DEST defined
{ {
memcpy(Msg.DEST, &BeaconHeader[Port][0][0], 10 * 7); memcpy(Msg.DEST, &BeaconHeader[Port][0][0], 10 * 7);
Msg.DEST[6] |= 0x80; // set Command Bit
Send_AX_Datagram(&Msg, Len + 2, Port); Send_AX_Datagram(&Msg, Len + 2, Port);
} }
} }

2
AlertWords.txt Normal file
View File

@ -0,0 +1,2 @@
g8bpq
very bad phrase

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

File diff suppressed because it is too large Load Diff

View File

@ -1120,7 +1120,10 @@
// 6.0.25.1 ?? // 6.0.25.1 ??
// Aff FBB reject.sys style filters (3) // Add FBB reject.sys style filters (3)
// Improve Webmail on 64 bit builds
#include "bpqmail.h" #include "bpqmail.h"
#include "winstdint.h" #include "winstdint.h"

View File

@ -68,7 +68,7 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="..\lib\bpq32.lib wsock32.lib comctl32.lib winmm.lib ..\lib\libconfig.lib DbgHelp.lib" AdditionalDependencies="..\lib\bpq32.lib wsock32.lib comctl32.lib winmm.lib ..\lib\libconfig.lib DbgHelp.lib"
OutputFile="d:\DevProgs\bpq32\BPQMail.exe" OutputFile="c:\DevProgs\bpq32\BPQMail.exe"
LinkIncremental="2" LinkIncremental="2"
IgnoreAllDefaultLibraries="false" IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames="LIBCMT" IgnoreDefaultLibraryNames="LIBCMT"

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-MHE5LO8"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-MHE5LO8"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="HPLAPTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="HPLAPTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1193,7 +1193,9 @@ along with LinBPQ/BPQ32. If not, see http://www.gnu.org/licenses
// Add SDRAngel rig control (11) // Add SDRAngel rig control (11)
// Add option to specify config and data directories on linbpq (12) // Add option to specify config and data directories on linbpq (12)
// Allow zero resptime (send RR immediately) (13) // Allow zero resptime (send RR immediately) (13)
// Fix corruptions in Webmail on 64 bit builds, eg in displaying 7+ files (15) // Make sure CMD bit is set on UI frames
// Add setting Modem Flags in QtSM AGW mode
// If FT847 om PTC Port send a "Cat On" command (16)
#define CKernel #define CKernel
@ -1602,7 +1604,7 @@ char PopupText[30][100] = {""};
// Next 3 should be uninitialised so they are local to each process // Next 3 should be uninitialised so they are local to each process
UCHAR MCOM; UCHAR MCOM;
UCHAR MTX; UCHAR MTX; // Top bit indicates use local time
uint64_t MMASK; uint64_t MMASK;
UCHAR MUIONLY; UCHAR MUIONLY;

BIN
CBPQ32.suo Normal file

Binary file not shown.

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="c:\devprogs\bpq32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-MHE5LO8"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-MHE5LO8"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\Devprogs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="HPLAPTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command=""
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="HPLAPTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="C:\DevProgs\BPQ32\bpq32.exe"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

9
Cmd.c
View File

@ -2157,6 +2157,7 @@ VOID CQCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CM
ConvToAX25("CQ", CQCALL); ConvToAX25("CQ", CQCALL);
memcpy(Msg.DEST, CQCALL, 7); memcpy(Msg.DEST, CQCALL, 7);
Msg.DEST[6] |= 0x80; // set Command Bit
memcpy(Msg.ORIGIN, Session->L4USER, 7); memcpy(Msg.ORIGIN, Session->L4USER, 7);
Msg.ORIGIN[6] ^= 0x1e; // Flip SSID Msg.ORIGIN[6] ^= 0x1e; // Flip SSID
Msg.PID = 0xf0; // Data PID Msg.PID = 0xf0; // Data PID
@ -4714,6 +4715,7 @@ VOID InnerCommandHandler(TRANSPORTENTRY * Session, struct DATAMESSAGE * Buffer)
Msg.PORT = Port; Msg.PORT = Port;
Msg.CTL = 3; // UI Msg.CTL = 3; // UI
memcpy(Msg.DEST, Session->UADDRESS, 7); memcpy(Msg.DEST, Session->UADDRESS, 7);
Msg.DEST[6] |= 0x80; // set Command Bit
memcpy(Msg.ORIGIN, Session->L4USER, 7); memcpy(Msg.ORIGIN, Session->L4USER, 7);
memcpy(Msg.DIGIS, &Session->UADDRESS[7], Session->UAddrLen - 7); memcpy(Msg.DIGIS, &Session->UADDRESS[7], Session->UAddrLen - 7);
memcpy(&Msg.PID, &Buffer->PID, Len); memcpy(&Msg.PID, &Buffer->PID, Len);
@ -5789,6 +5791,7 @@ VOID HELPCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX *
int UZ7HOSetFreq(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESSAGE buff, PMSGWITHLEN buffptr); int UZ7HOSetFreq(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESSAGE buff, PMSGWITHLEN buffptr);
int UZ7HOSetModem(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESSAGE buff, PMSGWITHLEN buffptr); int UZ7HOSetModem(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESSAGE buff, PMSGWITHLEN buffptr);
int UZ7HOSetFlags(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESSAGE buff, PMSGWITHLEN buffptr);
VOID UZ7HOCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD) VOID UZ7HOCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX * CMD)
@ -5822,7 +5825,7 @@ VOID UZ7HOCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX *
return; return;
} }
if (_memicmp(Cmd, "FREQ", 4) == 0 || _memicmp(Cmd, "MODEM", 5) == 0) if (_memicmp(Cmd, "FREQ", 4) == 0 || _memicmp(Cmd, "MODEM", 5) == 0 || _memicmp(Cmd, "FLAGS", 5) == 0)
{ {
// Pass to procesing code in UZ7HO driver. This expects command in a PDATAMESSAGE amd places response in a PMSGWITHLEN buffer // Pass to procesing code in UZ7HO driver. This expects command in a PDATAMESSAGE amd places response in a PMSGWITHLEN buffer
@ -5844,6 +5847,8 @@ VOID UZ7HOCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX *
if (_memicmp(Cmd, "FREQ", 4) == 0) if (_memicmp(Cmd, "FREQ", 4) == 0)
UZ7HOSetFreq(port, TNC, AGW, buff, buffptr); UZ7HOSetFreq(port, TNC, AGW, buff, buffptr);
else if (_memicmp(Cmd, "FLAGS", 5) == 0)
UZ7HOSetFlags(port, TNC, AGW, buff, buffptr);
else else
UZ7HOSetModem(port, TNC, AGW, buff, buffptr); UZ7HOSetModem(port, TNC, AGW, buff, buffptr);
@ -5854,7 +5859,7 @@ VOID UZ7HOCMD(TRANSPORTENTRY * Session, char * Bufferptr, char * CmdTail, CMDX *
ReleaseBuffer(buffptr); ReleaseBuffer(buffptr);
} }
else else
Bufferptr = Cmdprintf(Session, Bufferptr, "Invalid UZ7HO Command (not Freq or Modem)\r"); Bufferptr = Cmdprintf(Session, Bufferptr, "Invalid UZ7HO Command (not Freq Modem or FLAGS)\r");
SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER)); SendCommandReply(Session, REPLYBUFFER, (int)(Bufferptr - (char *)REPLYBUFFER));
return; return;

File diff suppressed because it is too large Load Diff

View File

@ -1271,6 +1271,8 @@ static VOID Send_AX_Datagram(PMESSAGE Block, DWORD Len, UCHAR Port, UCHAR * HWAD
memcpy(Block->DEST, HWADDR, 7); memcpy(Block->DEST, HWADDR, 7);
memcpy(Block->ORIGIN, MYCALL, 7); memcpy(Block->ORIGIN, MYCALL, 7);
Block->DEST[6] &= 0x7e; // Clear End of Call Block->DEST[6] &= 0x7e; // Clear End of Call
Block->DEST[6] |= 0x80; // set Command Bit
Block->ORIGIN[6] |= 1; // Set End of Call Block->ORIGIN[6] |= 1; // Set End of Call
Block->CTL = 3; //UI Block->CTL = 3; //UI

View File

@ -1297,14 +1297,11 @@ VOID CONNECTREQUEST(struct _LINKTABLE * LINK, L3MESSAGEBUFFER * L3MSG, UINT Appl
char BPQPARAMS[10]; // Extended Connect Params from BPQ Node char BPQPARAMS[10]; // Extended Connect Params from BPQ Node
int CONERROR; int CONERROR;
int Index; int Index;
char xxx[16] = "";
memcpy(BPQPARAMS, &L4T1, 2); // SET DEFAULT T1 IN CASE NOT FROM ANOTHER BPQ NODE memcpy(BPQPARAMS, &L4T1, 2); // SET DEFAULT T1 IN CASE NOT FROM ANOTHER BPQ NODE
BPQPARAMS[2] = 0; // 'SPY' NOT SET BPQPARAMS[2] = 0; // 'SPY' NOT SET
ConvFromAX25(&L3MSG->L4DATA[1], xxx);
if (CheckExcludeList(&L3MSG->L4DATA[1]) == 0) if (CheckExcludeList(&L3MSG->L4DATA[1]) == 0)
{ {
SendConNAK(LINK, L3MSG); SendConNAK(LINK, L3MSG);

1975
LinBPQ.c~

File diff suppressed because it is too large Load Diff

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

Binary file not shown.

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-MHE5LO8"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-MHE5LO8"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory="C:\linbpq"
CommandArguments="-h"
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="HPLAPTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="HPLAPTOP"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory="c:\linbpq"
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

8
MailNode.vcxproj.user Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommand>C:\Dev\Msdev2005\projects\bpq32\BPQMail\x64\Debug\LinBPQ.exe</LocalDebuggerCommand>
<LocalDebuggerWorkingDirectory>c:\linbpq</LocalDebuggerWorkingDirectory>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -163,7 +163,6 @@ int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BO
int Port; int Port;
int MSGFLAG = 0; //CR and V1 flags int MSGFLAG = 0; //CR and V1 flags
char * Output = buffer; char * Output = buffer;
int HH, MM, SS;
char TR = 'R'; char TR = 'R';
char From[10], To[10]; char From[10], To[10];
BOOL Info = 0; BOOL Info = 0;
@ -173,6 +172,15 @@ int IntDecodeFrame(MESSAGE * msg, char * buffer, time_t Stamp, uint64_t Mask, BO
size_t MsgLen = msg->LENGTH; size_t MsgLen = msg->LENGTH;
// Use gmtime so we can also display in local time
struct tm * TM;
if (MTX & 0x80)
TM = localtime(&Stamp);
else
TM = gmtime(&Stamp);
// MINI mode is for Node Listen (remote monitor) Mode. Keep info to minimum // MINI mode is for Node Listen (remote monitor) Mode. Keep info to minimum
/* /*
KO6IZ*>K7TMG-1: KO6IZ*>K7TMG-1:
@ -190,7 +198,7 @@ KC6OAR*>ID:
if (Port & 0x80) if (Port & 0x80)
{ {
if (MTX == 0) if ((MTX & 1) == 0)
return 0; // TRANSMITTED FRAME - SEE IF MTX ON return 0; // TRANSMITTED FRAME - SEE IF MTX ON
TR = 'T'; TR = 'T';
@ -214,17 +222,9 @@ KC6OAR*>ID:
// Need Timestamp and T/R // Need Timestamp and T/R
Stamp = Stamp % 86400; // Secs
HH = (int)(Stamp / 3600);
Stamp -= HH * 3600;
MM = (int)(Stamp / 60);
SS = (int)(Stamp - MM * 60);
// Add Port: unless Mail Mon (port 64) // Add Port: unless Mail Mon (port 64)
Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", HH, MM, SS, TR); Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", TM->tm_hour, TM->tm_min, TM->tm_sec, TR);
strcpy(Output, &msg->DEST[1]); strcpy(Output, &msg->DEST[1]);
Output += strlen(Output); Output += strlen(Output);
@ -286,18 +286,10 @@ KC6OAR*>ID:
} }
Stamp = Stamp % 86400; // Secs
HH = (int)(Stamp / 3600);
Stamp -= HH * 3600;
MM = (int)(Stamp / 60);
SS = (int)(Stamp - MM * 60);
// Add Port: if MINI mode and monitoring more than one port // Add Port: if MINI mode and monitoring more than one port
if (MINI == 0) if (MINI == 0)
Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", HH, MM, SS, TR); Output += sprintf((char *)Output, "%02d:%02d:%02d%c ", TM->tm_hour, TM->tm_min, TM->tm_sec, TR);
else else
if (CountBits64(Mask) > 1) if (CountBits64(Mask) > 1)
Output += sprintf((char *)Output, "%d:", Port); Output += sprintf((char *)Output, "%d:", Port);

BIN
PCBeep.wav Normal file

Binary file not shown.

View File

@ -1,120 +0,0 @@
[General]
HostParams0=|0||||
HostParams1=|0||||
HostParams2=|0||||
HostParams3=|0||||
HostParams4=|0||||
HostParams5=|0||||
HostParams6=|0||||
HostParams7=|0||||
HostParams8=|0||||
HostParams9=|0||||
HostParams10=|0||||
HostParams11=|0||||
HostParams12=|0||||
HostParams13=|0||||
HostParams14=|0||||
HostParams15=|0||||
Split=50
ChatMode=1
AutoTeletext=0
Bells=1
StripLF=1
AlertBeep=1
ConnectBeep=1
AlertInterval=300
CurrentHost=0 0 0 0 0 0 0 0 0 0
YAPPPath=
MaxRXSize=100000
listenPort=8015
listenEnable=0
listenCText=
convUTF8=0
PTT=None
PTTBAUD=19200
PTTMode=19200
CATHex=1
PTTOffString=
PTTOnString=
pttGPIOPin=17
pttGPIOPinR=17
CM108Addr=0xD8C:0x08
HamLibPort=4532
HamLibHost=127.0.0.1
FLRigPort=12345
FLRigHost=127.0.0.1
AGWEnable=0
AGWMonEnable=0
AGWTermCall=
AGWBeaconDest=
AGWBeaconPath=
AGWBeaconInterval=0
AGWBeaconPorts=
AGWBeaconText=
AGWHost=127.0.0.1
AGWPort=8000
AGWPaclen=80
AGWToCalls=
KISSEnable=0
MYCALL=
KISSHost=127.0.0.1
KISSMode=0
KISSPort=8100
KISSSerialPort=None
KISSBAUD=19200
VARAEnable=0
VARATermCall=
VARAHost=127.0.0.1
VARAPort=8300
VARAInit=
VARAPath=C:\\VARA\\VARA.exe
VARAHostHF=127.0.0.1
VARAPortHF=8300
VARAPathHF=C:\\VARA\\VARA.exe
VARAHostFM=127.0.0.1
VARAPortFM=8300
VARAPathFM=C:\\VARA\\VARAFM.exe
VARAHostSAT=127.0.0.1
VARAPortSAT=8300
VARAPathSAT=C:\\VARA\\VARASAT.exe
VARA500=0
VARA2300=1
VARA2750=0
VARAHF=1
VARAFM=0
VARASAT=0
TabType=1 1 1 1 1 1 1 2 2 0
AutoConnect=0 0 0 0 0 0 0 0 0 0
monBackground=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0)
monRxText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\xff\xff\0\0)
monTxText=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\0\0\0\0\0\0)
monOtherText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\0\0\0\0)
termBackground=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0)
outputText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\xff\xff\0\0)
EchoText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\0\0\0\0)
WarningText=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\0\0\0\0\0\0)
inputBackground=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0)
inputText=@Variant(\0\0\0\x43\x1\xff\xff\0\0\0\0\0\0\0\0)
useBeep=false
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x2\x39\0\0\0\xab\0\0\x5\x45\0\0\x3\x64\0\0\x2\x39\0\0\0\xab\0\0\x5\x45\0\0\x3\x64\0\0\0\0\0\0\0\0\a\x80\0\0\x2\x39\0\0\0\xab\0\0\x5\x45\0\0\x3\x64)
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\r\0\0\x2\xa4\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x3\0\0\0\x1\0\0\0\x16\0m\0\x61\0i\0n\0T\0o\0o\0l\0\x62\0\x61\0r\0\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
ConnectWAV=C:/OneDrive/Dev/Source/bpq32/CommonSource/Ring.wav
[AX25_A]
Retries=10
Maxframe=4
Paclen=128
FrackTime=8
IdleTime=180
SlotTime=100
Persist=128
RespTime=1500
TXFrmMode=1
FrameCollector=6
ExcludeCallsigns=
ExcludeAPRSFrmType=
KISSOptimization=0
DynamicFrack=0
BitRecovery=0
IPOLL=80
MyDigiCall=

View File

@ -2230,7 +2230,7 @@ DllExport BOOL APIENTRY Rig_Init()
TNC->ClientHeight = NeedRig * 20 + 60; TNC->ClientHeight = NeedRig * 20 + 60;
TNC->ClientWidth = 550; TNC->ClientWidth = 550;
for (port = 0; port < 33; port++) for (port = 0; port < MAXBPQPORTS; port++)
{ {
if (RadioConfigMsg[port]) if (RadioConfigMsg[port])
{ {
@ -2263,7 +2263,7 @@ DllExport BOOL APIENTRY Rig_Init()
struct TNCINFO * PTCTNC; struct TNCINFO * PTCTNC;
int n; int n;
for (n = 1; n < 33; n++) for (n = 1; n < MAXBPQPORTS; n++)
{ {
PTCTNC = TNCInfo[n]; PTCTNC = TNCInfo[n];
@ -2346,7 +2346,6 @@ DllExport BOOL APIENTRY Rig_Init()
{ {
SDRANGELRunning = 1; SDRANGELRunning = 1;
ConnecttoSDRANGEL(PORT); ConnecttoSDRANGEL(PORT);
} }
//---- G7TAJ ---- //---- G7TAJ ----
else if (PORT->HIDDevice) // This is RAWHID, Not CM108 else if (PORT->HIDDevice) // This is RAWHID, Not CM108
@ -2363,6 +2362,15 @@ DllExport BOOL APIENTRY Rig_Init()
} }
else else
PORT->hPTTDevice = PORT->hDevice; // Use same port for PTT PORT->hPTTDevice = PORT->hDevice; // Use same port for PTT
// Looks like FT847 Needa a "Cat On" Command. If PTC port need to send it here
if (PORT->PTC && strcmp(PORT->Rigs[0].RigName, "FT847") == 0)
{
UCHAR CATON[6] = {0,0,0,0,0};
SendPTCRadioCommand(PORT->PTC, CATON, 5);
}
} }
for (p = 0; p < NumberofPorts; p++) for (p = 0; p < NumberofPorts; p++)
@ -2573,7 +2581,7 @@ DllExport BOOL APIENTRY Rig_Close()
// And free the TNC config info // And free the TNC config info
for (p = 1; p < 33; p++) for (p = 1; p < MAXBPQPORTS; p++)
{ {
TNC = TNCInfo[p]; TNC = TNCInfo[p];
@ -2788,7 +2796,6 @@ int OpenRigCOMMPort(struct RIGPORTINFO * PORT, VOID * Port, int Speed)
COMClearDTR(PORT->hDevice); COMClearDTR(PORT->hDevice);
else else
COMSetDTR(PORT->hDevice); COMSetDTR(PORT->hDevice);
if (strcmp(PORT->Rigs[0].RigName, "FT847") == 0) if (strcmp(PORT->Rigs[0].RigName, "FT847") == 0)
{ {
// Looks like FT847 Needa a "Cat On" Command // Looks like FT847 Needa a "Cat On" Command
@ -2798,6 +2805,7 @@ int OpenRigCOMMPort(struct RIGPORTINFO * PORT, VOID * Port, int Speed)
WriteCOMBlock(PORT->hDevice, CATON, 5); WriteCOMBlock(PORT->hDevice, CATON, 5);
} }
if (PORT->PortType == NMEA) if (PORT->PortType == NMEA)
{ {
// Looks like NMEA Needs Remote ON // Looks like NMEA Needs Remote ON
@ -7310,7 +7318,7 @@ VOID SetupScanInterLockGroups(struct RIGINFO *RIG)
// Find TNC ports in this Rig's scan group // Find TNC ports in this Rig's scan group
for (port = 1; port < 33; port++) for (port = 1; port < MAXBPQPORTS; port++)
{ {
TNC = TNCInfo[port]; TNC = TNCInfo[port];
@ -7359,7 +7367,7 @@ VOID SetupPortRIGPointers()
struct TNCINFO * TNC; struct TNCINFO * TNC;
int port; int port;
for (port = 1; port < 33; port++) for (port = 1; port < MAXBPQPORTS; port++)
{ {
TNC = TNCInfo[port]; TNC = TNCInfo[port];

View File

@ -634,6 +634,8 @@ static VOID SendPacket(struct TNCINFO * TNC, struct STREAMINFO * STREAM, UCHAR *
Block.PID = 0xF0; Block.PID = 0xF0;
ConvToAX25(STREAM->RemoteCall, Block.DEST); ConvToAX25(STREAM->RemoteCall, Block.DEST);
Block.DEST[6] |= 0x80; // set Command Bit
memcpy(Block.ORIGIN, MYCALL, 7); memcpy(Block.ORIGIN, MYCALL, 7);
Block.L2DATA[0] = STREAM->ARQInfo->FarStream; Block.L2DATA[0] = STREAM->ARQInfo->FarStream;

View File

@ -86,6 +86,9 @@ static char ClassName[]="ARDOPSTATUS";
static char WindowTitle[] = "UZ7HO"; static char WindowTitle[] = "UZ7HO";
static int RigControlRow = 165; static int RigControlRow = 165;
char FX25Modes[8][8] = {"None", "RxOnly", "RX+TX"};
char IL2PModes[8][10] = {"None", "RxOnly", "RX+TX", "il2pOnly"};
//LOGFONT LFTTYFONT ; //LOGFONT LFTTYFONT ;
@ -378,7 +381,7 @@ int UZ7HOSetFreq(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESS
return 1; return 1;
} }
if (TNCInfo[MasterPort[port]]->AGWInfo->isQTSM == 3) if (TNCInfo[MasterPort[port]]->AGWInfo->isQTSM >= 3)
{ {
// QtSM so can send Set Freq Command // QtSM so can send Set Freq Command
@ -437,7 +440,7 @@ int UZ7HOSetModem(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMES
return 1; return 1;
} }
else if (TNCInfo[MasterPort[port]]->AGWInfo->isQTSM == 3) else if (TNCInfo[MasterPort[port]]->AGWInfo->isQTSM >= 3)
{ {
// Can send modem name to QTSM // Can send modem name to QTSM
@ -452,6 +455,8 @@ int UZ7HOSetModem(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMES
strcpy(&Buffer[4], &buff->L2DATA[6]); strcpy(&Buffer[4], &buff->L2DATA[6]);
Buffer[27] = 1; // Modem can set modem flags
AGW->TXHeader.Port = UZ7HOChannel[port]; AGW->TXHeader.Port = UZ7HOChannel[port];
AGW->TXHeader.DataKind = 'g'; AGW->TXHeader.DataKind = 'g';
memset(AGW->TXHeader.callfrom, 0, 10); memset(AGW->TXHeader.callfrom, 0, 10);
@ -496,6 +501,119 @@ int UZ7HOSetModem(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMES
return 1; return 1;
} }
int UZ7HOSetFlags(int port, struct TNCINFO * TNC, struct AGWINFO * AGW, PDATAMESSAGE buff, PMSGWITHLEN buffptr)
{
int txlen = GetLengthfromBuffer(buff) - (MSGHDDRLEN + 1);
char Buffer[32] = "";
int MsgLen = 32;
char * ptr, * context;
int i;
if (TNCInfo[MasterPort[port]]->AGWInfo->isQTSM != 7)
{
buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Sorry Setting UZ7HO flags not supported on this modem\r");
return 1;
}
// May be read or set flags
if (txlen == 6)
{
// Read Flags
buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} fx25 %s il2p %s %s\r",
FX25Modes[TNC->AGWInfo->fx25Flags], IL2PModes[TNC->AGWInfo->il2pFlags], TNC->AGWInfo->il2pcrc?"CRC":"");
return 1;
}
ptr = strtok_s(&buff->L2DATA[6], " ,\r", &context);
while (ptr && ptr[0])
{
if (_stricmp(ptr, "fx25") == 0)
{
ptr = strtok_s(NULL, " ,\r", &context);
i = 4;
if (ptr && ptr[0])
{
for (i = 0; i < 4; i++)
{
if (_stricmp(FX25Modes[i], ptr) == 0)
{
TNC->AGWInfo->fx25Flags = i;
break;
}
}
}
if (i == 4)
{
buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Failed - fx25 flags invalid\r");
return 1;
}
}
else if (_stricmp(ptr, "il2p") == 0)
{
ptr = strtok_s(NULL, " ,\r", &context);
i = 4;
if (ptr && ptr[0])
{
for (i = 0; i < 4; i++)
{
if (_stricmp(IL2PModes[i], ptr) == 0)
{
TNC->AGWInfo->il2pFlags = i;
break;
}
}
}
if (i == 4)
{
buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Failed - il2p flags invalid\r");
return 1;
}
}
else if (_stricmp(ptr, "crc") == 0)
TNC->AGWInfo->il2pcrc = 1;
else if (_stricmp(ptr, "nocrc") == 0)
TNC->AGWInfo->il2pcrc = 0;
else
{
buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Failed - invalid flag %s\r", ptr);
return 1;
}
ptr = strtok_s(NULL, " ,\r", &context);
}
Buffer[27] = 2; // Set Flags
Buffer[28] = TNC->AGWInfo->fx25Flags;
Buffer[29] = TNC->AGWInfo->il2pFlags;
Buffer[30] = TNC->AGWInfo->il2pcrc;
AGW->TXHeader.Port = UZ7HOChannel[port];
AGW->TXHeader.DataKind = 'g';
memset(AGW->TXHeader.callfrom, 0, 10);
memset(AGW->TXHeader.callto, 0, 10);
#ifdef __BIG_ENDIAN__
AGW->TXHeader.DataLength = reverse(MsgLen);
#else
AGW->TXHeader.DataLength = MsgLen;
#endif
send(TNCInfo[MasterPort[port]]->TCPSock, (char *)&AGW->TXHeader, AGWHDDRLEN, 0);
send(TNCInfo[MasterPort[port]]->TCPSock, Buffer, MsgLen, 0);
buffptr->Len = sprintf((UCHAR *)&buffptr->Data[0], "UZ7HO} Set Modem Flags command sent Ok\r");
return 1;
}
static size_t ExtProc(int fn, int port, PDATAMESSAGE buff) static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
{ {
@ -977,6 +1095,18 @@ static size_t ExtProc(int fn, int port, PDATAMESSAGE buff)
} }
return 1; return 1;
} }
if (_memicmp(&buff->L2DATA[0], "FLAGS", 5) == 0)
{
PMSGWITHLEN buffptr = (PMSGWITHLEN)GetBuff();
if (buffptr)
{
UZ7HOSetFlags(port, TNC, AGW, buff, buffptr);
C_Q_ADD(&STREAM->PACTORtoBPQ_Q, buffptr);
}
return 1;
}
// See if a Connect Command. // See if a Connect Command.
if (toupper(buff->L2DATA[0]) == 'C' && buff->L2DATA[1] == ' ' && txlen > 2) // Connect if (toupper(buff->L2DATA[0]) == 'C' && buff->L2DATA[1] == ' ' && txlen > 2) // Connect
@ -1311,7 +1441,7 @@ void * UZ7HOExtInit(EXTPORTDATA * PortEntry)
#ifndef LINBPQ #ifndef LINBPQ
CreatePactorWindow(TNC, ClassName, WindowTitle, RigControlRow, PacWndProc, 500, 450, ForcedClose); CreatePactorWindow(TNC, ClassName, WindowTitle, RigControlRow, PacWndProc, 520, 450, ForcedClose);
CreateWindowEx(0, "STATIC", "Comms State", WS_CHILD | WS_VISIBLE, 10,6,120,20, TNC->hDlg, NULL, hInstance, NULL); CreateWindowEx(0, "STATIC", "Comms State", WS_CHILD | WS_VISIBLE, 10,6,120,20, TNC->hDlg, NULL, hInstance, NULL);
TNC->xIDC_COMMSSTATE = CreateWindowEx(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 120,6,386,20, TNC->hDlg, NULL, hInstance, NULL); TNC->xIDC_COMMSSTATE = CreateWindowEx(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 120,6,386,20, TNC->hDlg, NULL, hInstance, NULL);
@ -1327,7 +1457,7 @@ void * UZ7HOExtInit(EXTPORTDATA * PortEntry)
0,170,250,300, TNC->hDlg, NULL, hInstance, NULL); 0,170,250,300, TNC->hDlg, NULL, hInstance, NULL);
TNC->ClientHeight = 450; TNC->ClientHeight = 450;
TNC->ClientWidth = 500; TNC->ClientWidth = 520;
TNC->hMenu = CreatePopupMenu(); TNC->hMenu = CreatePopupMenu();
@ -2615,7 +2745,7 @@ GotStream:
if (RXHeader->DataLength == 12) if (RXHeader->DataLength == 12)
{ {
// First reply - request Modem Freq and Name // First reply - request Modem Freq and Name
for (p = This; p < 33; p++) for (p = This; p < MAXBPQPORTS; p++)
{ {
if (MasterPort[p] == This) if (MasterPort[p] == This)
{ {
@ -2627,6 +2757,7 @@ GotStream:
int MsgLen = 32; int MsgLen = 32;
SOCKET sock = TNCInfo[MasterPort[This]]->TCPSock; SOCKET sock = TNCInfo[MasterPort[This]]->TCPSock;
Buffer[27] = 1; // Modem can set modem flags
TNC->AGWInfo->isQTSM |= 2; TNC->AGWInfo->isQTSM |= 2;
@ -2647,7 +2778,7 @@ GotStream:
return; return;
} }
if (RXHeader->DataLength == 44) if (RXHeader->DataLength == 44 || RXHeader->DataLength == 48)
{ {
// Modem Freq and Type Report from QtSM // Modem Freq and Type Report from QtSM
@ -2662,7 +2793,21 @@ GotStream:
memcpy(&TNC->AGWInfo->ModemName, &Message[16], 20); memcpy(&TNC->AGWInfo->ModemName, &Message[16], 20);
memcpy(&TNC->AGWInfo->Version, &Message[38], 4); memcpy(&TNC->AGWInfo->Version, &Message[38], 4);
sprintf(TNC->WEB_MODE, "%s / %d Hz", TNC->AGWInfo->ModemName, TNC->AGWInfo->CenterFreq); if (RXHeader->DataLength == 48)
{
// includes modem flags
TNC->AGWInfo->isQTSM |= 4; // can send flags
TNC->AGWInfo->fx25Flags = (Message[45] & 3);
TNC->AGWInfo->il2pFlags = (Message[46] & 3);
TNC->AGWInfo->il2pcrc = Message[47];
sprintf(TNC->WEB_MODE, "%s/%d Hz FX %s IL2P %s %s", TNC->AGWInfo->ModemName, TNC->AGWInfo->CenterFreq,
FX25Modes[TNC->AGWInfo->fx25Flags], IL2PModes[TNC->AGWInfo->il2pFlags], TNC->AGWInfo->il2pcrc?"CRC":"");
}
else
sprintf(TNC->WEB_MODE, "%s/%d Hz ", TNC->AGWInfo->ModemName, TNC->AGWInfo->CenterFreq);
SetWindowText(TNC->xIDC_MODE, TNC->WEB_MODE); SetWindowText(TNC->xIDC_MODE, TNC->WEB_MODE);
} }
} }

5
VARA.c
View File

@ -2413,6 +2413,7 @@ VOID VARAProcessReceivedData(struct TNCINFO * TNC)
Msg->PID = 0xcf; Msg->PID = 0xcf;
Msg->PORT = TNC->Port | 0x80; Msg->PORT = TNC->Port | 0x80;
Msg->CTL = 3; Msg->CTL = 3;
Msg->DEST[6] |= 0x80; // set Command Bit
Msg->ORIGIN[6] |= 1; // set end of address Msg->ORIGIN[6] |= 1; // set end of address
time(&Msg->Timestamp); time(&Msg->Timestamp);
BPQTRACE(Msg, FALSE); BPQTRACE(Msg, FALSE);
@ -2445,6 +2446,8 @@ VOID VARAProcessReceivedData(struct TNCINFO * TNC)
ConvToAX25(TNC->NRNeighbour, Buffer->DEST); ConvToAX25(TNC->NRNeighbour, Buffer->DEST);
memcpy(Buffer->ORIGIN, NETROMCALL, 7); memcpy(Buffer->ORIGIN, NETROMCALL, 7);
Buffer->ORIGIN[6] |= 1; // set end of address Buffer->ORIGIN[6] |= 1; // set end of address
Buffer->DEST[6] |= 0x80; // set Command Bit
time(&Buffer->Timestamp); time(&Buffer->Timestamp);
BPQTRACE(Buffer, FALSE); // TRACE BPQTRACE(Buffer, FALSE); // TRACE
NETROMMSG(TNC->DummyLink, L3MSG); NETROMMSG(TNC->DummyLink, L3MSG);
@ -2886,6 +2889,8 @@ void SendVARANetromMsg(struct TNCINFO * TNC, L3MESSAGEBUFFER * MSG)
ConvToAX25(TNC->NRNeighbour, Buffer->DEST); ConvToAX25(TNC->NRNeighbour, Buffer->DEST);
memcpy(Buffer->ORIGIN, NETROMCALL, 7); memcpy(Buffer->ORIGIN, NETROMCALL, 7);
Buffer->ORIGIN[6] |= 1; // set end of address Buffer->ORIGIN[6] |= 1; // set end of address
Buffer->DEST[6] |= 0x80; // set Command Bit
time(&Buffer->Timestamp); time(&Buffer->Timestamp);

View File

@ -10,8 +10,8 @@
#endif #endif
#define KVers 6,0,24,15 #define KVers 6,0,24,16
#define KVerstring "6.0.24.15\0" #define KVerstring "6.0.24.16\0"
#ifdef CKernel #ifdef CKernel

View File

@ -1193,6 +1193,10 @@ int ViewWebMailMessage(struct HTTPConnectionInfo * Session, char * Reply, int Nu
} }
} }
} }
if (DisplayHTML && stristr(Message, "</html>"))
DisplayStyle = "div"; // Use div so HTML and XML are interpreted
return sprintf(Reply, WebMailMsgTemplate, BBSName, User->Call, Msg->number, Msg->number, Key, Msg->number, Key, DownLoad, Key, Key, Key, DisplayStyle, Message, DisplayStyle); return sprintf(Reply, WebMailMsgTemplate, BBSName, User->Call, Msg->number, Msg->number, Key, Msg->number, Key, DownLoad, Key, Key, Key, DisplayStyle, Message, DisplayStyle);
} }
@ -1232,9 +1236,7 @@ int ViewWebMailMessage(struct HTTPConnectionInfo * Session, char * Reply, int Nu
size_t origlen = msgLen + 1; size_t origlen = msgLen + 1;
UCHAR * BufferB = malloc(2 * origlen); UCHAR * BufferB = malloc(2 * origlen);
#ifdef WIN32 #ifdef WIN32
WCHAR * BufferW = malloc(2 * origlen); WCHAR * BufferW = malloc(2 * origlen);
int wlen; int wlen;
int len = (int)origlen; int len = (int)origlen;
@ -1246,10 +1248,10 @@ int ViewWebMailMessage(struct HTTPConnectionInfo * Session, char * Reply, int Nu
Save = MsgBytes = BufferB; Save = MsgBytes = BufferB;
free(BufferW); free(BufferW);
msgLen = len - 1; // exclude NULL msgLen = len - 1; // exclude NULL
#else #else
size_t left = 2 * msgLen; size_t left = 2 * msgLen;
size_t len = msgLen; size_t outbuflen = left;
size_t len = msgLen + 1; // include null
int ret; int ret;
UCHAR * BufferBP = BufferB; UCHAR * BufferBP = BufferB;
char * orig = MsgBytes; char * orig = MsgBytes;
@ -1270,15 +1272,18 @@ int ViewWebMailMessage(struct HTTPConnectionInfo * Session, char * Reply, int Nu
iconv(icu, NULL, NULL, NULL, NULL); // Reset State Machine iconv(icu, NULL, NULL, NULL, NULL); // Reset State Machine
ret = iconv(icu, &MsgBytes, &len, (char ** __restrict__)&BufferBP, &left); ret = iconv(icu, &MsgBytes, &len, (char ** __restrict__)&BufferBP, &left);
} }
// left is next location to write, so length written is outbuflen - left
// add a null in case iconv didn't complete comversion
BufferB[outbuflen - left] = 0;
free(Save); free(Save);
Save = MsgBytes = BufferB; Save = MsgBytes = BufferB;
msgLen = strlen(MsgBytes); msgLen = strlen(MsgBytes);
#endif #endif
} }
// ptr += sprintf(ptr, "%s", MsgBytes); // ptr += sprintf(ptr, "%s", MsgBytes);
memcpy(ptr, MsgBytes, msgLen); memcpy(ptr, MsgBytes, msgLen);
@ -1307,13 +1312,10 @@ int ViewWebMailMessage(struct HTTPConnectionInfo * Session, char * Reply, int Nu
ptr += sprintf(ptr, "File for Message %d not found\r", Number); ptr += sprintf(ptr, "File for Message %d not found\r", Number);
} }
if (DisplayHTML && stristr(Message, "html>")) if (DisplayHTML && stristr(Message, "</html>"))
DisplayStyle = "div"; // Use div so HTML and XML are interpreted DisplayStyle = "div"; // Use div so HTML and XML are interpreted
return sprintf(Reply, WebMailMsgTemplate, BBSName, User->Call, Msg->number, Msg->number, Key, Msg->number, Key, DownLoad, Key, Key, Key, DisplayStyle, Message, DisplayStyle); return sprintf(Reply, WebMailMsgTemplate, BBSName, User->Call, Msg->number, Msg->number, Key, Msg->number, Key, DownLoad, Key, Key, Key, DisplayStyle, Message, DisplayStyle);
} }

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments="COM53 127.0.0.1:4532"
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments="COM53 127.0.0.1:4532"
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor="0"
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="DESKTOP-TGEL8RC"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioUserFile
ProjectType="Visual C++"
Version="8.00"
ShowAllFiles="false"
>
<Configurations>
<Configuration
Name="Debug|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
<Configuration
Name="Release|Win32"
>
<DebugSettings
Command="$(TargetPath)"
WorkingDirectory=""
CommandArguments=""
Attach="false"
DebuggerType="3"
Remote="1"
RemoteMachine="SKIGACER"
RemoteCommand=""
HttpUrl=""
PDBPath=""
SQLDebugging=""
Environment=""
EnvironmentMerge="true"
DebuggerFlavor=""
MPIRunCommand=""
MPIRunArguments=""
MPIRunWorkingDirectory=""
ApplicationCommand=""
ApplicationArguments=""
ShimCommand=""
MPIAcceptMode=""
MPIAcceptFilter=""
/>
</Configuration>
</Configurations>
</VisualStudioUserFile>

View File

@ -1,36 +0,0 @@
// ADIF Logging Bits
typedef struct ADIF
{
char Call[16];
time_t StartTime;
int Mode;
char LOC[7];
char Band[8]; // ?Derive from freq?
int Freq;
// Extra fields for Trimode comment fields
char CMSCall[16];
char ServerSID[80];
char UserSID[80];
char ReportMode[16];
char Termination[8]; // Last "F" message from CMS
int Sent;
int Received;
int BytesSent;
int BytesReceived;
char Dirn; // Direction of current transfer (In/Out)
int FBBIndex; // For saving proposals
int FBBLen[5]; // Proposed messages
BOOL GotFC; // Flag for acking messages on first FC
char PartMessage[256]; // Some modes frame size too small for complete lines
} ADIF;
BOOL UpdateADIFRecord(ADIF * ADIF, char * Msg, char Dirn);
BOOL WriteADIFRecord(ADIF * ADIF);

BIN
ding.wav Normal file

Binary file not shown.

1428
getopt.c

File diff suppressed because it is too large Load Diff

214
getopt.h
View File

@ -1,108 +1,108 @@
#ifndef __GETOPT_H__ #ifndef __GETOPT_H__
/* /*
* getopt.h * getopt.h
* *
* $Id: getopt.h,v 1.4 2009/01/04 17:35:36 keithmarshall Exp $ * $Id: getopt.h,v 1.4 2009/01/04 17:35:36 keithmarshall Exp $
* *
* Defines constants and function prototypes required to implement * Defines constants and function prototypes required to implement
* the `getopt', `getopt_long' and `getopt_long_only' APIs. * the `getopt', `getopt_long' and `getopt_long_only' APIs.
* *
* This file is part of the MinGW32 package set. * This file is part of the MinGW32 package set.
* *
* Contributed by Keith Marshall <keithmarshall@users.sourceforge.net> * Contributed by Keith Marshall <keithmarshall@users.sourceforge.net>
* *
* *
* THIS SOFTWARE IS NOT COPYRIGHTED * THIS SOFTWARE IS NOT COPYRIGHTED
* *
* This source code is offered for use in the public domain. You may * This source code is offered for use in the public domain. You may
* use, modify or distribute it freely. * use, modify or distribute it freely.
* *
* This code is distributed in the hope that it will be useful but * This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of * DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* *
* $Revision: 1.4 $ * $Revision: 1.4 $
* $Author: keithmarshall $ * $Author: keithmarshall $
* $Date: 2009/01/04 17:35:36 $ * $Date: 2009/01/04 17:35:36 $
* *
*/ */
#define __GETOPT_H__ #define __GETOPT_H__
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
extern int optind; /* index of first non-option in argv */ extern int optind; /* index of first non-option in argv */
extern int optopt; /* single option character, as parsed */ extern int optopt; /* single option character, as parsed */
extern int opterr; /* flag to enable built-in diagnostics... */ extern int opterr; /* flag to enable built-in diagnostics... */
/* (user may set to zero, to suppress) */ /* (user may set to zero, to suppress) */
extern char *optarg; /* pointer to argument of current option */ extern char *optarg; /* pointer to argument of current option */
extern int getopt( int, char * const [], const char * ); extern int getopt( int, char * const [], const char * );
#ifdef _BSD_SOURCE #ifdef _BSD_SOURCE
/* /*
* BSD adds the non-standard `optreset' feature, for reinitialisation * BSD adds the non-standard `optreset' feature, for reinitialisation
* of `getopt' parsing. We support this feature, for applications which * of `getopt' parsing. We support this feature, for applications which
* proclaim their BSD heritage, before including this header; however, * proclaim their BSD heritage, before including this header; however,
* to maintain portability, developers are advised to avoid it. * to maintain portability, developers are advised to avoid it.
*/ */
# define optreset __mingw_optreset # define optreset __mingw_optreset
extern int optreset; extern int optreset;
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
/* /*
* POSIX requires the `getopt' API to be specified in `unistd.h'; * POSIX requires the `getopt' API to be specified in `unistd.h';
* thus, `unistd.h' includes this header. However, we do not want * thus, `unistd.h' includes this header. However, we do not want
* to expose the `getopt_long' or `getopt_long_only' APIs, when * to expose the `getopt_long' or `getopt_long_only' APIs, when
* included in this manner. Thus, close the standard __GETOPT_H__ * included in this manner. Thus, close the standard __GETOPT_H__
* declarations block, and open an additional __GETOPT_LONG_H__ * declarations block, and open an additional __GETOPT_LONG_H__
* specific block, only when *not* __UNISTD_H_SOURCED__, in which * specific block, only when *not* __UNISTD_H_SOURCED__, in which
* to declare the extended API. * to declare the extended API.
*/ */
#endif /* !defined(__GETOPT_H__) */ #endif /* !defined(__GETOPT_H__) */
#if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) #if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__)
#define __GETOPT_LONG_H__ #define __GETOPT_LONG_H__
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
struct option /* specification for a long form option... */ struct option /* specification for a long form option... */
{ {
const char *name; /* option name, without leading hyphens */ const char *name; /* option name, without leading hyphens */
int has_arg; /* does it take an argument? */ int has_arg; /* does it take an argument? */
int *flag; /* where to save its status, or NULL */ int *flag; /* where to save its status, or NULL */
int val; /* its associated status value */ int val; /* its associated status value */
}; };
enum /* permitted values for its `has_arg' field... */ enum /* permitted values for its `has_arg' field... */
{ {
no_argument = 0, /* option never takes an argument */ no_argument = 0, /* option never takes an argument */
required_argument, /* option always requires an argument */ required_argument, /* option always requires an argument */
optional_argument /* option may take an argument */ optional_argument /* option may take an argument */
}; };
extern int getopt_long( int, char * const [], const char *, const struct option *, int * ); extern int getopt_long( int, char * const [], const char *, const struct option *, int * );
extern int getopt_long_only( int, char * const [], const char *, const struct option *, int * ); extern int getopt_long_only( int, char * const [], const char *, const struct option *, int * );
/* /*
* Previous MinGW implementation had... * Previous MinGW implementation had...
*/ */
#ifndef HAVE_DECL_GETOPT #ifndef HAVE_DECL_GETOPT
/* /*
* ...for the long form API only; keep this for compatibility. * ...for the long form API only; keep this for compatibility.
*/ */
# define HAVE_DECL_GETOPT 1 # define HAVE_DECL_GETOPT 1
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */ #endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */
/* $RCSfile: getopt.h,v $Revision: 1.4 $: end of file */ /* $RCSfile: getopt.h,v $Revision: 1.4 $: end of file */

View File

@ -282,6 +282,9 @@ typedef struct AGWINFO
int Modem; // Modem number in list int Modem; // Modem number in list
char ModemName[20]; char ModemName[20];
unsigned char Version[4]; unsigned char Version[4];
unsigned char fx25Flags;
unsigned char il2pFlags;
unsigned char il2pcrc;
} *PAGWINFO; } *PAGWINFO;