home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
550b.lha
/
Term_v1.8a
/
Source.LZH
/
UpdateConfig.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-07-06
|
10KB
|
476 lines
/* $Revision Header * Header built automatically - do not edit! *************
*
* (C) Copyright 1990 by Olaf 'Olsen' Barthel & MXM
*
* Name .....: UpdateConfig.c
* Created ..: Saturday 23-Mar-91 22:07
* Revision .: 0
*
* Date Author Comment
* ========= ======== ====================
* 23-Mar-91 Olsen Created this file!
*
* $Revision Header ********************************************************/
struct TermInfo
{
UWORD Version;
UWORD Revision;
};
extern LONG TermVersion,TermRevision;
extern UBYTE TermName[],TermDate[],TermString[];
struct Configuration
{
/* Serial Preferences. */
ULONG BaudRate;
BYTE BitsPerChar;
BYTE Parity;
BYTE StopBits;
BYTE Handshaking;
BYTE Duplex;
BYTE HighSpeed;
ULONG BreakLength;
UBYTE SerialDevice[40];
LONG UnitNumber;
/* Modem Preferences. */
UBYTE ModemInit[80];
UBYTE ModemExit[80];
UBYTE DialPrefix[80];
LONG RedialDelay;
LONG DialRetries;
LONG DialTimeout;
BYTE ConnectAutoBaud;
UBYTE NoCarrier[16];
UBYTE Connect[16];
UBYTE Error[16];
UBYTE Voice[16];
UBYTE Ring[16];
UBYTE Busy[16];
UBYTE Okay[16];
/* Transfer Preferences. */
UBYTE Protocol[40];
/* Startup macro. */
UBYTE StartupMacro[256];
/* Macro Preferences. */
UBYTE MacroFile[256];
/* Screen Preferences. */
ULONG DisplayMode;
UWORD Colours[16];
BYTE MakeScreenPublic;
BYTE ShanghaiWindows;
/* Terminal Preferences. */
BYTE CaptureFilter;
BYTE DestructiveBackspace;
BYTE AudibleBell;
BYTE VisibleBell;
BYTE EightyColumns;
BYTE SendCR;
BYTE SendLF;
BYTE ColourMode;
BYTE Emulation;
BYTE Font;
};
/* A phone book entry. */
struct PhoneEntry
{
UBYTE Name[40];
UBYTE Number[40];
UBYTE Password[40];
LONG PayPerUnit;
LONG MinPerUnit;
struct Configuration Config;
};
struct NewConfiguration
{
/* Serial Preferences. */
ULONG BaudRate;
BYTE BitsPerChar;
BYTE Parity;
BYTE StopBits;
BYTE Handshaking;
BYTE Duplex;
BYTE HighSpeed;
ULONG BreakLength;
UBYTE SerialDevice[40];
LONG UnitNumber;
/* Modem Preferences. */
UBYTE ModemInit[80];
UBYTE ModemExit[80];
UBYTE ModemHangup[80];
UBYTE DialPrefix[80];
LONG RedialDelay;
LONG DialRetries;
LONG DialTimeout;
BYTE ConnectAutoCapture;
BYTE ConnectAutoBaud;
BYTE LogActions;
UBYTE NoCarrier[16];
UBYTE Connect[16];
UBYTE Voice[16];
UBYTE Ring[16];
UBYTE Busy[16];
/* Transfer Preferences. */
UBYTE Protocol[40];
/* Startup macro. */
UBYTE StartupMacro[256];
/* Macro Preferences. */
UBYTE MacroFile[256];
/* Screen Preferences. */
ULONG DisplayMode;
UWORD Colours[16];
BYTE MakeScreenPublic;
BYTE ShanghaiWindows;
/* Terminal Preferences. */
BYTE CaptureFilter;
BYTE DestructiveBackspace;
BYTE AudibleBell;
BYTE VisibleBell;
BYTE EightyColumns;
BYTE DisableBlinking;
BYTE SendCR;
BYTE SendLF;
BYTE ColourMode;
BYTE Emulation;
BYTE Font;
/* Emulation control. */
BYTE CursorApp;
BYTE FontScale;
BYTE JumpScroll;
BYTE AutoWrap;
BYTE CursorWrap;
BYTE NewLine;
BYTE InsertChar;
BYTE NumApp;
/* Path Preferences. */
UBYTE DefaultStorage[256];
UBYTE TextUploadPath[256];
UBYTE TextDownloadPath[256];
UBYTE ASCIIUploadPath[256];
UBYTE ASCIIDownloadPath[256];
UBYTE BinaryUploadPath[256];
UBYTE BinaryDownloadPath[256];
UBYTE CapturePath[256];
UBYTE LogFile[256];
UBYTE Editor[256];
UBYTE BeepSound[256];
};
LONG __saveds Main(VOID);
BYTE WriteIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type);
BYTE ReadIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type);
struct NewConfiguration * Convert(struct Configuration *Src);
struct ExecBase *SysBase;
struct DosLibrary *DOSBase;
struct Library *IFFParseBase;
LONG __saveds
Main()
{
SysBase = *(struct ExecBase **)4;
if(DOSBase = (struct DosLibrary *)OpenLibrary("dos.library",36))
{
if(IFFParseBase = (struct Library *)OpenLibrary("iffparse.library",0))
{
UBYTE **ArgArray;
if(ArgArray = (UBYTE **)AllocVec(sizeof(UBYTE *),MEMF_PUBLIC | MEMF_CLEAR))
{
struct RDArgs *ArgsPtr;
if(ArgsPtr = (struct RDArgs *)ReadArgs("File",(LONG *)ArgArray,NULL))
{
if(ArgArray[0])
{
struct Configuration Config;
if(ReadIFFData(ArgArray[0],&Config,sizeof(struct Configuration),'PREF'))
{
if(!WriteIFFData(ArgArray[0],Convert(&Config),sizeof(struct NewConfiguration),'PREF'))
Printf("\33[1mUpdateConfig:\33[0m Couldn't save file \"%s\"!\a\n",ArgArray[0]);
}
else
Printf("\33[1mUpdateConfig:\33[0m Couldn't load file \"%s\"!\a\n",ArgArray[0]);
}
FreeArgs(ArgsPtr);
}
FreeVec(ArgArray);
}
CloseLibrary(IFFParseBase);
}
CloseLibrary(DOSBase);
}
return(RETURN_OK);
}
/* WriteIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type):
*
* Write data to an IFF file (via iffparse.library).
*/
BYTE
WriteIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type)
{
struct IFFHandle *Handle;
BYTE Success = FALSE;
/* Allocate a handle. */
if(Handle = AllocIFF())
{
/* Open an output stream. */
if(Handle -> iff_Stream = Open(Name,MODE_NEWFILE))
{
/* Tell iffparse that this is
* a DOS handle.
*/
InitIFFasDOS(Handle);
/* Open the handle for writing. */
if(!OpenIFF(Handle,IFFF_WRITE))
{
/* Push outmost chunk onto stack. */
if(!PushChunk(Handle,'TERM','FORM',IFFSIZE_UNKNOWN))
{
/* Add a version identifier. */
if(!PushChunk(Handle,0,'VERS',IFFSIZE_UNKNOWN))
{
struct TermInfo TermInfo;
TermInfo . Version = TermVersion;
TermInfo . Revision = TermRevision;
/* Write the version data. */
if(WriteChunkBytes(Handle,&TermInfo,sizeof(struct TermInfo)) == sizeof(struct TermInfo))
{
/* Pop the version chunk, i.e. write it to the file. */
if(PopChunk(Handle))
Success = FALSE;
else
{
/* Push the real data chunk on the stack. */
if(!PushChunk(Handle,0,Type,IFFSIZE_UNKNOWN))
{
/* Write the data. */
if(WriteChunkBytes(Handle,Data,Size) == Size)
Success = TRUE;
/* Pop the data chunk. */
if(PopChunk(Handle))
Success = FALSE;
}
else
Success = FALSE;
}
}
else
Success = FALSE;
}
/* Seems that we're done, now try to pop the FORM chunk
* and return.
*/
if(PopChunk(Handle))
Success = FALSE;
}
/* Close the handle (flush any pending data). */
CloseIFF(Handle);
}
/* Close the DOS handle itself. */
Close(Handle -> iff_Stream);
}
/* And free the IFF handle. */
FreeIFF(Handle);
}
if(Success)
SetProtection(Name,FIBF_EXECUTE);
return(Success);
}
/* ReadIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type):
*
* Read data from a `TERM' FORM chunk contained in an IFF file.
*/
BYTE
ReadIFFData(UBYTE *Name,APTR Data,LONG Size,ULONG Type)
{
struct IFFHandle *Handle;
BYTE Success = FALSE;
if(Handle = AllocIFF())
{
if(Handle -> iff_Stream = Open(Name,MODE_OLDFILE))
{
InitIFFasDOS(Handle);
if(!OpenIFF(Handle,IFFF_READ))
{
/* The following line tells iffparse to stop at the
* very beginning of a `Type' chunk contained in a
* `TERM' FORM chunk.
*/
if(!StopChunk(Handle,'TERM',Type))
{
/* Parse the file... */
if(!ParseIFF(Handle,IFFPARSE_SCAN))
{
/* The file read pointer is positioned
* just in front of the first data
* to be read, so let's don't disappoint
* iffparse and read it.
*/
if(ReadChunkBytes(Handle,Data,Size) == Size)
Success = TRUE;
}
}
CloseIFF(Handle);
}
Close(Handle -> iff_Stream);
}
FreeIFF(Handle);
}
return(Success);
}
/* Convert(struct PhoneEntry *Src):
*
* Convert a phonebook entry.
*/
struct NewConfiguration *
Convert(struct Configuration *Src)
{
STATIC struct NewConfiguration Dst;
Dst . BaudRate = Src -> BaudRate;
Dst . BitsPerChar = Src -> BitsPerChar;
Dst . Parity = Src -> Parity;
Dst . StopBits = Src -> StopBits;
Dst . Handshaking = Src -> Handshaking;
Dst . Duplex = Src -> Duplex;
Dst . HighSpeed = Src -> HighSpeed;
Dst . BreakLength = Src -> BreakLength;
strcpy(Dst . SerialDevice,Src -> SerialDevice);
Dst . UnitNumber = Src -> UnitNumber;
strcpy(Dst . ModemInit,Src -> ModemInit);
strcpy(Dst . ModemExit,Src -> ModemExit);
strcpy(Dst . ModemHangup,"~~~~~~+++~~ATH0\\r");
strcpy(Dst . DialPrefix,Src -> DialPrefix);
Dst . RedialDelay = Src -> RedialDelay;
Dst . DialRetries = Src -> DialRetries;
Dst . DialTimeout = Src -> DialTimeout;
Dst . ConnectAutoBaud = Src -> ConnectAutoBaud;
strcpy(Dst . NoCarrier,Src -> NoCarrier);
strcpy(Dst . Connect,Src -> Connect);
strcpy(Dst . Voice,Src -> Voice);
strcpy(Dst . Ring,Src -> Ring);
strcpy(Dst . Busy,Src -> Busy);
strcpy(Dst . Protocol,Src -> Protocol);
strcpy(Dst . StartupMacro,Src -> StartupMacro);
strcpy(Dst . MacroFile,Src -> MacroFile);
Dst . DisplayMode = Src -> DisplayMode;
CopyMem(Src -> Colours,Dst . Colours,sizeof(UWORD) * 16);
Dst . MakeScreenPublic = Src -> MakeScreenPublic;
Dst . ShanghaiWindows = Src -> ShanghaiWindows;
Dst . CaptureFilter = Src -> CaptureFilter;
Dst . DestructiveBackspace = Src -> DestructiveBackspace;
Dst . AudibleBell = Src -> AudibleBell;
Dst . VisibleBell = Src -> VisibleBell;
Dst . EightyColumns = Src -> EightyColumns;
Dst . SendCR = Src -> SendCR;
Dst . SendLF = Src -> SendLF;
Dst . ColourMode = Src -> ColourMode;
Dst . Emulation = Src -> Emulation;
Dst . Font = Src -> Font;
strcpy(Dst . DefaultStorage,"ENVARC:sys");
return(&Dst);
}