/*ProfiPacket - packet radio terminal program
  Copyright (C) 1999  Alexander Feigl

  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

  Author:

  Alexander Feigl
  Burachstraße 51

  D-88250 Weingarten

  Mail : Alexander.Feigl@gmx.de
*/


#include "QSO.h"

#ifdef AmigaOS

#include <utility/hooks.h>

#endif /*AmigaOS*/


/* GUI Ass protos*/


int QSO_StartServer(int channel,const unsigned char *servername,
                      unsigned char *paramstring);
                      
void *QSO_SearchComServer(const unsigned char *commandstring);

void GUI_UserPortMessage(void);

void Clean_Up(void);

void CallMenu(void *MyFunction);


unsigned char *GUI_String(signed long strnum);

unsigned char *GUI_LongToString(unsigned char *str,unsigned long Value,
                                unsigned long Digits,unsigned long Mode);

void GUIMAIN_ResetStyles(struct QSO *qso);

void QSO_TestPasswordString(int channel,const unsigned char *line);


void QSO_ControlXPCompress(unsigned long channel,unsigned long event);

void QSO_ControlEncryption(unsigned long channel,unsigned long mode);

int QSO_CompressionOn(unsigned long channel);

int QSO_CompressionOff(unsigned long channel);

void QSO_FlushXPacketDelay(signed long channel);



void MAIN_SavePreferences(void);
unsigned long MAIN_GetConnectMsgNr(void);

void QSO_OutputEvent(int event,const unsigned char *buffer,const struct QSO *qso);

void GUI_WriteToQSO(const unsigned char *data,int channel,int length,int color);



void PutRawDoFmt();

void GUI_ChangeChannel(signed long NewChannel);

void QSO_SendData(unsigned long Length,unsigned long Channel,
                       const unsigned char *Data);

void QSO_SendCommand(unsigned long Length,unsigned long Channel,
                     const unsigned char *Data);

void QSO_SendCommandUser(unsigned long Length,unsigned long Channel,
                         const unsigned char *Data);

void QSO_SendDataUser(unsigned long Length,unsigned long Channel,
                      const unsigned char *Data);

int QSO_SaveHoldings(void);

int QSO_InitalizeChannel(int channel,int self,void *predefserver);

int QSO_TransmitMacroFile(const unsigned char *fname,int channel,int echo);

unsigned long QSO_FindFreeChannel(unsigned long hardunit,unsigned long callset);


signed long QSO_StartExtServer(signed long Channel,unsigned long Command,
                        unsigned char *ServerName,unsigned char *Parameter);


struct MHeardEntry *QSO_MHeardEntry(unsigned long linenr);

void QSO_ForceTransmit(unsigned long Channel);

unsigned long QSO_GetPacLen(unsigned long Channel);

void PACK_SetMonitorUnit(signed long unit);

void QSO_TransmitText(unsigned char *Text,unsigned long channel,
        unsigned long echo,unsigned long mdeco);

int QSO_ValidateLocator(unsigned char *locator);

void MAIN_HardwareInitChannel(signed long Channel);

void MAIN_CleanupChannel(signed long Channel);

unsigned long GUI_CheckLeaveProg(void);

unsigned long GUI_HandleRequest(unsigned long Title,unsigned long Body,
                                unsigned long Gadgets,unsigned long *Arg);

void MAIN_ConvertToAmiga(unsigned char *string);
void MAIN_ConvertToPC(unsigned char *string);
void MAIN_ConvertToAmigaLen(unsigned char *string,unsigned long length);
void MAIN_ConvertToPCLen(unsigned char *string,unsigned long length);

int SPY_SetSpy(signed long spynr,unsigned long unit,unsigned long port,
               unsigned long compr,const unsigned char *call1,const unsigned char *call2);
void SPY_ClearSpy(signed long spynr);

const struct LanguageNode *GetLanguageNode(const struct QSO *qso);
unsigned long GetLanguageString(unsigned long lnum);

const unsigned char *QSO_GetQSOText(unsigned long textnr);

signed long QSO_CRCFile(const unsigned char *filename);

signed long QSO_CRCFileUntil(const unsigned char *filename,unsigned long offset);

signed long QSO_CRCFileOffset(const unsigned char *filename,unsigned long offset);


signed long QSO_HuffmanDecompress(const unsigned char *source,unsigned char *dest,
                      unsigned long length);

signed long QSO_HuffmanDecompressXP(const unsigned char *source,unsigned char *dest,
                        struct QSO *qso,unsigned long length);



int QSO_DecompressXPStream(const unsigned char *stream,unsigned char *smemory,
                           void (*func)(const unsigned char *c,int chan,int len),
                           struct QSO *qso,signed long length,int channel);


int QSO_SendPassword(unsigned long channel,const unsigned char *password);


void *QSO_XPKOpenLibrary(struct QSO *qso);

void QSO_EncryptionOff(int channel);


int GUI_InitLowLevel(void);

void MAIN_SetDefaultPrefs(void);
int PREF_LoadPreferences(void);
void GUI_GeneralError(unsigned long strnum);
void AUDIO_Init(void);
int GUI_Init(void);
int QSO_Init(void);
int PACK_Init(void);
void QSO_FreeHoldArray(void);
void GUI_CloseLaunchWindow(void);
int GUI_MainPoll(unsigned long disablegui);

int QSO_HoldRestorePre(unsigned long channel,int selfconnect,
                         int freshconnect);
void QSO_HoldRestorePost(unsigned long channel);

int QSO_CheckCall(const unsigned char *call);

void SPY_HandleInfo(const unsigned char *data,unsigned long length);
void SPY_HandleControl(signed long unit,signed long port,signed long ptype,
                       const unsigned char *from,const unsigned char *to,
                       const unsigned char *path,const unsigned char *control);


void PACK_UpdateTNCTime(void);
void MAIN_NewMinute(void);
int QSO_UpdateTickerLine(unsigned char *Ticker);


void QSO_HandleNameRequest(unsigned long channel,unsigned long flags);


/* GUI C Protos */

void GUI_LowMemory(void);   /* GUIMain.c*/
void GUI_DisplayEventWindow(unsigned char *event); /* GUIMain.c*/
struct MUI_Command *MAIN_CreateRexx(void);
void GUI_RefreshWindowTitle(void);
void CopyStringUpper(unsigned char *dest,const unsigned char *source);/*NewMain.c*/
void CopyString(unsigned char *dest,const unsigned char *source);/*NewMain.c*/
void CopyStringLimit(unsigned char *dest,const unsigned char *source,unsigned long len);/*NewMain.c*/
int CompareString(const unsigned char *s1,const unsigned char *s2); /*NewMain.c*/
int StringLength(const unsigned char *string);

int MAIN_ExecuteARexxScript(const unsigned char *script,const unsigned char *parameter,unsigned long asyncflag); /*NewMain.c*/
unsigned long MAIN_SearchFreeSpy(void);/*NewMain.c*/
void QSO_HandleSID(struct QSO *tqso,struct StationID *sid); /*NewQSO.c*/
unsigned char *QSO_GetText(struct QSO *qso,unsigned char *txttable,
                           unsigned char *catalogname,
                           unsigned long textnumber); /*NewQSO.c*/
int MAIN_EstablishLink(unsigned char *call,unsigned char *path,
                       unsigned long hardunit,unsigned long callset); /*NewMain.c*/
void MAIN_SendBeacon(void); /*NewMain.c*/
unsigned char *USER_GetSysopName(void); /*User.c*/
unsigned char *USER_GetSysopLocator(void);/*User.c*/
unsigned char *USER_GetSysopQTH(void);/*User.c*/
int QSO_TestVersion (struct StationID *sid,unsigned long ver,unsigned long rev,unsigned long subrev); /*NewQSO.c*/
int CompareStringLimit(const unsigned char *s1,const unsigned char *s2,
                       unsigned long len);/*NewMain.c*/
void MAIN_LongToString(unsigned char *target,unsigned long dezi); /*NewMain.c*/
void GUI_RefreshPacketHead(void); /*GUIMain.c*/
void GUI_RefreshConnectHead(void); /*GUIMain.c*/
void GUIMAIN_PutQSO(const unsigned char *addch,unsigned long addlen,
                    signed long channel,unsigned long addstyle); /*GUIMain.c*/
void GUI_GetLastActivity(struct DateStamp *stamp); /*GUIMain.c*/



void GUIMISC_ConfigMUI(void);
void GUI_Preferences(void);
void GUIMISC_ClearSpy(void);
void GUIMISC_SetSpy(void);
void GUIMH_MHeardLong(void);
void GUIMH_MHeard(void);
void GUIMAIL_Mailbox(void);
void GUIUSER_UserSettings(void);
void GUIMISC_Encryption(void);
void GUI_SendPassword(void);
void GUIMISC_ConnectMsg(void);
void GUIMISC_Disconnect(void);
void GUIMISC_MakeConnect(void);
void GUIFT_FileFilter(void);
void GUIMISC_ConfigMUI(void);
void GUIMISC_SaveBuffers(void);
void GUI_AbortTransmit(void);
void GUIFT_FileTransfer(void);
void GUIMISC_AboutMUI(void);
void GUI_ExitProg(void);

void InitStandardLanguage(void);
void GUI_Cleanup(void);
int GUI_InitStringSpeedup(void);
int PrepareMenu(void);

void MAIN_WaitMoment(void);
