📄 pad16.c
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>
static unsigned long addr = 0;
static int upper = 0;
static int swap = 0;
void
emit_srec (unsigned char *buf, int len)
{
int i, cksum;
int l = len + sizeof(addr) + 1;
cksum = ((l >> 8) & 0x0ff) + (l & 0x00ff);
cksum += (addr >> 24) & 0x0ff;
cksum += (addr >> 16) & 0x0ff;
cksum += (addr >> 8) & 0x0ff;
cksum += addr & 0x0ff;
printf("S3%02X%08X", len + sizeof(addr) + 1, addr);
for (i = 0; i < len; ++i)
{
cksum += buf[i];
printf("%02X", buf[i]);
}
printf("%02X\n", (~cksum) & 0x00FF);
addr += len;
}
int
main (int argc, char **argv)
{
int ifd, ofd;
int num, i, arg = 1;
char rbuf[1024];
char wbuf[1024];
if (argc < 3)
{
printf("%s [-lus] addr ifn\n", argv[0]);
return -1;
}
/*
* Parse options
*/
if (argv[arg][0] == '-')
{
i = 1;
while (argv[arg][i] != '\0')
{
switch (argv[arg][i])
{
case 'u':
case 'U':
upper = 1;
break;
case 'l':
case 'L':
upper = 0;
break;
case 's':
case 'S':
swap = 1;
break;
default:
printf("unsupported option\n");
break;
}
++i;
}
++arg;
}
addr = strtoul(argv[arg], NULL, 16);
if ((ifd = open(argv[arg + 1], O_RDONLY | O_BINARY)) < 0)
{
printf("error opening input file: %s\n", argv[arg + 1]);
return -2;
}
while (1)
{
num = read(ifd, rbuf, 16);
if (num == -1)
{
printf("read() error: %d\n", num);
perror("errno: ");
}
if (num > 0)
{
for (i = 0; i < num; i += 2)
{
if (upper)
{
wbuf[(i<<1) + 0] = 0xFF;
wbuf[(i<<1) + 1] = 0xFF;
if (swap)
{
wbuf[(i<<1) + 3] = rbuf[i + 0];
wbuf[(i<<1) + 2] = rbuf[i + 1];
}
else
{
wbuf[(i<<1) + 2] = rbuf[i + 0];
wbuf[(i<<1) + 3] = rbuf[i + 1];
}
}
else /* lower */
{
if (swap)
{
wbuf[(i<<1) + 1] = rbuf[i + 0];
wbuf[(i<<1) + 0] = rbuf[i + 1];
}
else
{
wbuf[(i<<1) + 0] = rbuf[i + 0];
wbuf[(i<<1) + 1] = rbuf[i + 1];
}
wbuf[(i<<1) + 2] = 0xFF;
wbuf[(i<<1) + 3] = 0xFF;
}
}
emit_srec (wbuf, num * 2);
}
else
break;
}
/* printf("S70500000000FA\n"); */
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -