473,830 Members | 2,162 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Clipper Head needs help!

Rob
Hi,
I have been asked by a customer to try to resurrect a rather ancient
application their organisation uses that was written in Clipper.
This I am fine with. However, there is a module that was written in C. I
do not have a C compiler and was wondering if one of you fine people could
compile it into an .obj file so that I can link it in with the rest of the
Clipper .objs? If someone could, I would forever be in their debt and, if
they're ever on the Sunshine Coast in Australia, I'll buy them a beer!

This is the line in the .mak file:

cl /c /AL /Zl /Oalt /FPa /Gs /Tc$*.ccl

As you can see they refer to it as a .ccl file....

And this is the code:
#include "extend.h"
#include "bios.h"
#include "stdio.h"
#include "time.h"
#define Ignore
/* #define Debug */

/*ÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
Í
Updated : 14/02/92 - 13:00
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ *
/
/* Port A
bits 1 to 4 for lamps
*/
#define AUDIO_BIT 5 /* Chime Activate */
#define PAG_TRX 6 /* Pager Transmitter Bit */
#define PAG_DAT 7 /* Pager Data bit */

#define PGR_AMBMAX 17 /* Maximum Amble Bytes */
#define PGR_BATMAX 17 /* maximum codewords in
batch */
#define PGR_BLKMAX 200 /* maximum number of blocks
*/
#define PGR_PREAMB 0xAAAAAAAA /* Preamble 10101010 */
#define PGR_SYNC 0x7CD215D8 /* Sync Codeword */
#define PGR_IDLE 0x7A89C197 /* Idle Codeword */

/* Port B
*/
#define PUL_BIT 0 /* bit 0 pulse bit */
#define FRQ_BIT 1 /* transmission frequency */
#define PUL_CNT 5 /* chime pulse count */
unsigned long check_sum (unsigned long);
void chim_delay (void);
void coms_init (int);
void coms_unit (unsigned, unsigned);
char *form_date (time_t);
void pagr_addablock (unsigned long);
void pagr_createadd (unsigned long, unsigned long);
void pagr_createamb (int);
void pagr_createmes (void);
void pagr_padbatch (void);
unsigned long parity_even (unsigned long);
void send_pagrblocks (void);
static char pgr_mess[100]; /* pager message buffer
*/
static int com_baud_rate = 1200, /* default baud rate */
com_tx_delay = 100, /* default tx delay */
com_ch_count = 2 * PUL_CNT, /* default chime count
*/
io_byte = 0, /* Port A: Control byte
*/
pgr_bit = (1 << PAG_DAT), /* Pager Bits */
pgr_bitI = (0xff ^ (1 << PAG_DAT)),
pgr_trx = (1 << PAG_TRX), /* Transmitter Bits */
pgr_trxI = (0xff ^ (1 << PAG_TRX)),
chm_bit = (1 << PUL_BIT), /* chime pulses */
frq_trx = (1 << FRQ_BIT), /* frequency for trans.
*/
frq_old = 0; /* last value */
pgr_blocks_ptr = 0, /* block buffer pointer
*/
pgr_blocks_cnt = 0, /* block counter */
mss_cnt = 0; /* message counter */
static unsigned long pgr_blocks[PGR_BLKMAX], /* 32 bit blocks buffer
*/
nxt_bit = (1 << 31); /* bit 31 first */
static time_t lTime; /* time of day */
static unsigned com_command_byt e = 155, /* default coms. set */
com_port = 0, /* com1=0, com2=1, etc
*/
com_tx_stat = 0, /* transmission status
*/
com_rx_stat = 0, /* receive status */
com_rx_address, /* received address */
com_rx_data, /* received data byte */
io_base_add = 0x1b0, /* io card address */
io_port_b = 0x1b1; /* io card address + 1
*/

/*************** *************** *************** *************** ***************
*
Clipper interface functions.
/*************** *************** *************** *************** ***************
/

CLIPPER chime ()
{
io_byte |= (1 << AUDIO_BIT); /* turns chime on */
outp(io_base_ad d, io_byte);
chim_delay();
io_byte &= (0xff ^ (1 << AUDIO_BIT)); /* turns chime off */
outp(io_base_ad d, io_byte);
}

CLIPPER lamp_on ()
{
int lamp_num = 0;

if (_parinfo(1) == NUMERIC) {
lamp_num = _parni(1);
if (lamp_num > 0 && lamp_num < 6) {
lamp_num --;
io_byte |= (1 << lamp_num);
outp(io_base_ad d, io_byte);
}
}
}

CLIPPER lamp_off ()
{
int lamp_num = 0;

if (_parinfo(1) == NUMERIC) {
lamp_num = _parni(1);
if (lamp_num > 0 && lamp_num < 6) {
lamp_num --;
io_byte &= (0xff ^ (1 << lamp_num));
outp(io_base_ad d, io_byte);
}
}
}

CLIPPER pager_mess ()
{
if (mss_cnt == 0) {
pagr_createamb( PGR_AMBMAX); /* create preamble block */
pgr_blocks_cnt = PGR_BATMAX; /* initialise batch count */
}
pagr_createmes( );
mss_cnt ++;
}

CLIPPER pager_send ()
{
io_byte |= pgr_trx; /* transmitter on */
outp(io_base_ad d, io_byte);
send_pagrblocks (); /* send all blocks */
io_byte &= pgr_bitI; /* Clear Data Line */
io_byte &= pgr_trxI; /* transmitter off */
outp(io_base_ad d, io_byte);
mss_cnt = 0;
}

CLIPPER poll_set ()
{
int iBaud = 1200; /* default rate setting */

if (_parinfo(1) == NUMERIC) {
iBaud = _parni(1);
}
if (_parinfo(2) == NUMERIC) {
com_tx_delay = _parni(2);
}
if (_parinfo(3) == NUMERIC) {
io_base_add = (unsigned) _parni(3);
io_port_b = io_base_add + (unsigned) 1;
}
if (_parinfo(4) == NUMERIC) {
com_ch_count = (unsigned) _parni(4) * PUL_CNT;
}

/* Set i/o Control Reg : Mode 0 - A Out - B In - Cmsb Out - Clsb In
*/
io_byte = 0; /* all = low */
outp(io_base_ad d+3, 0x83);
outp(io_base_ad d+0, io_byte); /* A low */
outp(io_base_ad d+2, 0); /* C low */

coms_init(iBaud ); /* initialise serial port settings
*/
_retnl((long) com_tx_stat); /* return setup status */
}

CLIPPER poll_stat ()
{
_storc(form_dat e(lTime), 1);
_stornl((long) (com_rx_address & (unsigned) 0x7f), 2);
_stornl((long) com_rx_data, 3);
_stornl((long) com_rx_stat, 4);
}

CLIPPER poll_unit ()
{
int unit_num = 0, unit_data = 0;

if (_parinfo(1) == NUMERIC) {
unit_num = _parni(1);
}
if (_parinfo(2) == NUMERIC) {
unit_data = _parni(2);
}
coms_unit((unsi gned) unit_num, (unsigned) unit_data);
_retnl((long) com_tx_stat);
}

CLIPPER time_stamp ()
{
static time_t lCurTime; /* time variable */
time(&lCurTime) ; /* get date/time */
_storc(form_dat e(lTime), 1); /* return as formatted string */
}

/*************** *************** *************** *************** ***************
*
C sub functions for above.
/*************** *************** *************** *************** ***************
/

unsigned long check_sum (ulBlock)
unsigned long ulBlock;
{
int iCnt = 31;
unsigned long ulCheckSum = 0;
while (iCnt --) {
ulCheckSum <<= 1; /* bring next bit down */
if ((ulBlock & 0x80000000) == 0x80000000) {
ulCheckSum |= 1;
}
ulBlock <<= 1; /* done */
if ((ulCheckSum & 0x400) == 0x400) { /* one yet ? */
ulCheckSum ^= 0x769; /* use divisor */
}
} /* repeat until done */
ulCheckSum <<= 1; /* leave room for parity */
return (ulCheckSum);
}

void chim_delay ()
{
int iCnt = 0;
unsigned uAdd = 0;
uAdd = io_base_add;
uAdd ++; /* +1 for for port B */
while (iCnt < com_ch_count) {
while ((inp(uAdd) & chm_bit) != chm_bit) {
}
while ((inp(uAdd) & chm_bit) == chm_bit) {
}
iCnt ++;
}
}

void coms_init (iBaud)
int iBaud;
{
com_command_byt e = _COM_CHR8 | _COM_STOP1 | _COM_EVENPARITY ;
if (iBaud == 110) {
com_command_byt e |= _COM_110;
}
else if (iBaud == 150) {
com_command_byt e |= _COM_150;
}
else if (iBaud == 300) {
com_command_byt e |= _COM_300;
}
else if (iBaud == 600) {
com_command_byt e |= _COM_600;
}
else if (iBaud == 1200) {
com_command_byt e |= _COM_1200;
}
else if (iBaud == 2400) {
com_command_byt e |= _COM_2400;
}
else if (iBaud == 4800) {
com_command_byt e |= _COM_4800;
}
else if (iBaud == 9600) {
com_command_byt e |= _COM_9600;
}
else { com_command_byt e |= _COM_1200; /* default to 1200 Baud
*/
}
com_tx_stat = _bios_serialcom (_COM_INIT, com_port,
com_command_byt e);
}

void coms_unit (uUnit, uData)
unsigned uUnit, uData;
{
int nDelay;

nDelay = com_tx_delay; /* set tx delay */
com_tx_stat = _bios_serialcom (_COM_SEND, com_port, uUnit);
while (nDelay -- > 0) {
}
com_tx_stat = _bios_serialcom (_COM_SEND, com_port, uData);

com_rx_address = _bios_serialcom (_COM_RECEIVE, com_port, uData);
com_rx_data = _bios_serialcom (_COM_RECEIVE, com_port, uData);
com_rx_stat = _bios_serialcom (_COM_STATUS , com_port, uData);
time(&lTime); /* save dat and time for accuracy */
}

char *form_date (l_time)
time_t l_time;
{
struct tm *newtime;
static char tim[30];

newtime = localtime(&l_ti me);
strcpy(tim, asctime(newtime ));
tim[24] = ' ';
tim[25] = '\0';
return (tim);
}

void pagr_addablock (ulBlock)
unsigned long ulBlock;
{
if (pgr_blocks_cnt >= PGR_BATMAX) { /* sync needed ? */
pgr_blocks[pgr_blocks_ptr] = PGR_SYNC;
pgr_blocks_ptr ++;
pgr_blocks_cnt = 1;
}
/*
printf("Add A Block %3i : %8lx : %3i :\n", pgr_blocks_ptr, ulBlock,
pgr_blocks_cnt) ;
while ( ! kbhit());
getch();
*/
pgr_blocks[pgr_blocks_ptr] = ulBlock;
pgr_blocks_ptr ++;
pgr_blocks_cnt ++;
}

void pagr_createadd (ulPagId, ulFunc)
unsigned long ulPagId, ulFunc;
{
char *cPtr;
int iCnt = 8, iBitCnt, iChar;
unsigned long ulCodeWord, ulFrame, ulTmp;

ulFrame = ulPagId & 0x7; /* last 3 bits = frame */
ulCodeWord = ulPagId & 0xFFFFFFF8; /* get 18 sig. bits */
ulCodeWord <<= 10; /* shift left 10 */
ulCodeWord &= 0x7FFFF800; /* set top bit to 0 */
ulFunc &= 0x3; /* get last 2 bits */
ulFunc <<= 11; /* move to bits 20, 21 */
ulCodeWord |= ulFunc; /* add to code word */
ulCodeWord |= check_sum(ulCod eWord); /* checksum it */
ulCodeWord |= parity_even(ulC odeWord); /* even parity it */

while (ulFrame --) {
pagr_addablock( PGR_IDLE);
pagr_addablock( PGR_IDLE);
}
pagr_addablock( ulCodeWord); /* put in address */

iBitCnt = 20; /* 20 to do */
ulFrame = (unsigned) 1; /* message bit */
cPtr = pgr_mess; /* start of message */

while (*cPtr) {
iChar = *cPtr;
iCnt = 7; /* 7 bits to get */
while (iCnt --) {
ulTmp = (unsigned long) (iChar & 1); /* get bit
*/
if (iBitCnt < 1) {
ulFrame <<= 11; /* move to
position */
ulFrame |= check_sum(ulFra me);
ulFrame |= parity_even(ulF rame);
pagr_addablock( ulFrame);
iBitCnt = 20; /* reset count */
ulFrame = (unsigned) 1; /* message bit */
}
ulFrame <<= 1; /* shift data left
*/
ulFrame |= ulTmp; /* add bit */
iBitCnt --; /* one done */
iChar >>= 1; /* shift char right
*/
}
cPtr ++; /* next char */
}
/* when end of message arrives will contain eot's only */
/* so when can ignore last data block */
}

void pagr_createamb (iCnt)
int iCnt;
{
pgr_blocks_ptr = 0; /* clear table */
while (iCnt --) { /* create block */
pgr_blocks[pgr_blocks_ptr] = PGR_PREAMB;
pgr_blocks_ptr ++;
}
}

void pagr_createmes () /* gets stuff from clipper */
{
char *mess, *ptr;
int len;
long pag_id, pag_func;

if (_parinfo(1) == CHARACTER) {
mess = _parc(1); /* mess */
len = (int) _parclen(1); /* length */
ptr = pgr_mess;
while (len > 0) { /* transfer to buff
*/
*ptr ++ = *mess ++;
len --;
}
len = 4;
while (len > 0) { /* add 4 bytes of
eot */
*ptr ++ = '\4';
len --;
}
*ptr = '\0';
if (_parinfo(2) == NUMERIC) {
pag_id = _parnl(2); /* get pager id # */
if (_parinfo(3) == NUMERIC) {
pag_func = _parnl(3); /* get tone type */
pagr_createadd( (unsigned long) pag_id, (unsigned long)
pag_func);
pagr_padbatch() ; /* fill rest of
batch with idle */
}
}
}
}

void pagr_padbatch ()
{
while (pgr_blocks_cnt < PGR_BATMAX) { /* need a full batch
*/
pgr_blocks[pgr_blocks_ptr] = PGR_IDLE;
pgr_blocks_ptr ++;
pgr_blocks_cnt ++;
}
}

unsigned long parity_even (lBlock)
unsigned long lBlock;
{
int iCnt = 0; /* bit counter */
unsigned long lCnt = 0x0; /* parity count */

while (iCnt < 31) { /* 31 to do */
if ((lBlock & 0x80000000) == 0x80000000) {
lCnt ++; /* count one's */
}
lBlock <<= 1; /* shift left one bit */
iCnt ++; /* count it */
} /* and again */
lCnt &= 0x1; /* if odd - parity 1 */
return (lCnt); /* return for or'ing */
}

void send_pagrblocks ()
{
int iCnt = 0, /* bit count */
iFlgCur = 0,
iFlgNew = 0;
int iBlkCnt = 0;
unsigned long lBlock, *lBlkPtr;

iBlkCnt = pgr_blocks_ptr;
lBlkPtr = pgr_blocks;
frq_old = (inp(io_port_b) & frq_trx); /* get current state */
while (iBlkCnt --) {
iCnt = 32;
lBlock = *lBlkPtr;
while (iCnt --) { /* 32 to do */
iFlgCur = ((io_byte & pgr_bit) == pgr_bit);
iFlgNew = ((lBlock & nxt_bit) == nxt_bit);
if (iFlgNew) { /* output bit */
io_byte |= pgr_bit; /* Logic 1 */
}
else { io_byte &= pgr_bitI; /* Logic 0 */
}
while ((inp(io_port_b ) & frq_trx) == frq_old) {
} /* wait for change */
frq_old = (inp(io_port_b) & frq_trx); /* save it
*/
outp(io_base_ad d, io_byte);
lBlock <<= 1; /* shift left one bit */
} /* and again */
lBlkPtr ++;
}
}

--

TIA,

Rob Grattan
R&D Software Pty. Ltd.

Nov 13 '05 #1
3 2270

On Wed, 23 Jul 2003, Rob wrote:

I have been asked by a customer to try to resurrect a rather ancient
application their organisation uses that was written in Clipper.
This I am fine with.
(Good, because Clipper [whatever it is] ain't topical here. The only
Clipper I've ever heard of was a U.S. government push for crypto
backdoors in computers - never got off the ground, at least overtly.)
However, there is a module that was written in C. I
do not have a C compiler and was wondering if one of you fine people could
compile it into an .obj file so that I can link it in with the rest of the
Clipper .objs?
No, nobody can. Reason: your compiler and linker system may be
*radically* different from anybody else's. Probably are, too, if
they are more than a decade old. While I *could* compile this code
with Turbo C and send you the object file, it wouldn't do you any good
because TCC only works on MS-DOS-based systems and uses Borland linking
conventions, whereas for all I know you're using VMS.
This is the line in the .mak file:

cl /c /AL /Zl /Oalt /FPa /Gs /Tc$*.ccl
Tells us absolutely nothing except that you're probably not using *nix
or the Borland system I mentioned above (which doesn't use the extension
..mak, last I checked).
As you can see they refer to it as a .ccl file....
I'd be willing to bet that .CCL stands for something CLipper.
Does your system have a C compiler?
And this is the code:

#include "extend.h"
#include "bios.h"
#include "stdio.h"
#include "time.h"
#define Ignore
/* #define Debug */
Really, nobody is going to compile this for you. As I pointed out,
even if this were standard C code (which it isn't), that wouldn't
help you fix your problem. And of course, the very first line tries
to #include a header that doesn't exist on any of the machines I've
ever used. Certainly not a standard header.
CLIPPER chime ()


And this is just silly. What's a CLIPPER? Even if someone else *did*
magically have the same compiler system that you did, this wouldn't
compile, because you haven't defined CLIPPER anywhere that I can see.
(I did skip a lot of junk, though - maybe I missed it.)

My best advice to you is to look in the company directory for the
oldest people in your department, and ask whether they remember
who wrote this pile of junk. Then phone that guy and ask him how
*he* compiled it originally.

-Arthur
Nov 13 '05 #2
"Arthur J. O'Dwyer" <aj*@andrew.cmu .edu> wrote:
On Wed, 23 Jul 2003, Rob wrote:

I have been asked by a customer to try to resurrect a rather ancient
application their organisation uses that was written in Clipper.
This I am fine with.
(Good, because Clipper [whatever it is] ain't topical here. The only
Clipper I've ever heard of was a U.S. government push for crypto
backdoors in computers - never got off the ground, at least overtly.)


It's a compiler XBase language.
This is the line in the .mak file:

cl /c /AL /Zl /Oalt /FPa /Gs /Tc$*.ccl


Tells us absolutely nothing except that you're probably not using *nix
or the Borland system I mentioned above (which doesn't use the extension
.mak, last I checked).


Correct. Clipper needs a M$C compiler - that is, the text and simple
data moving thingies can use any .obj-compatible compiler, but the
floating point formats are M$'s.
My best advice to you is to look in the company directory for the
oldest people in your department, and ask whether they remember
who wrote this pile of junk.


Don't be a jerk. Just because it's specialised doesn't mean it's a load
of junk or geriatric. It's merely very system-specific and off-topic.
You'd be surprised at how many people still put Clipper to good use
every day of the week.

Rob: ask in comp.lang.clipp er. They'll know exactly what you need, and
may be able to compile this for you. Arthur is right in so far that
comp.lang.c discusses ISO C only - comp.lang.clipp er discusses
everything to do with Clipper. It can afford to, since Clipper is rather
more specialised than C.

Richard
Nov 13 '05 #3
Rob
Richard,
Thanks for your answer. I thought for a moment that everyone on this NG was
going to be as grumpy and unhelpful as Arthur! Just thought I'd try here
first as I assumed all the C knowledge on the planet would be available to
me...

Arthur - sorry for annoying you - I'll leave this NG immediately.

--
Rob Grattan
R&D Software Pty. Ltd.
Nov 13 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
3326
by: ads | last post by:
Hi Everyone, I'm starting learning python about 2 weeks, and still have difficulties to create GUI based application because I never learn about classes and other OOP things. Does anyone knows how to create text console application like clipper using python. Thanks,
1
2004
by: ads | last post by:
Thank you for the respon, But right now I'm still not ready using linux, a lot of my client were using windows. Is someone know what should I use to create text console application like clipper using python in (stupid) windows? Thanks :) --------------- Replied message --------------
0
1379
by: Matrx | last post by:
Can anyone help me create a sql querry with the following clipper/dbase code or help me understand what the hell it means??? If you can help please don't hesitate to contact me at matrx88NOSPAM@magma.ca. remove the NOSPAM from my e-mail. Thanks in advance to all of you that take the time to look at this post!! Here is the code: STATIC FUNCTION Termination
3
4108
by: cbbibleboy | last post by:
Howdy! I'm having a bit of trouble with my DirectDraw clipper. The code compiles fine and runs without a hitch; however, it doesn't work. That is, there is no clipping! I get the exact same behavior as when I have no clipper used. It's all very mysterious as I've compared my code with dozens of others' that work, yet I can't find any differences in mine. I've tried to reduce my relevant code to as little as possible. Here is the function...
0
9642
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10771
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
1
10525
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10202
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
9313
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7745
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5617
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
5780
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4411
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.