int nbcols = NBCOLS;
int nbdigits = NBDIGITS;
-int offset = 1;
+int offset = 0;
char buffer[BUFFERSIZE] = {0};
FILE *fin = NULL;
return 1;
}
+/* insert sequence function */
+
+int insertseq (sequence_t *seq) {
+ char buffer[BUFFERSIZE] = {0};
+
+ VERBOSE (DEBUG, printf ("insert (%d): '%s'\n", offset, seq->sequence);
+ int i;
+ for (i = 0; i < seq->length; i++) {
+ char c = seq->bytes[i];
+ printf (" 0x%02x (%c)", c, ((c >= 32) && (c < 127)) ? c : '.');
+ };
+ printf ("\n"));
+ if (offset > 0) {
+ int nbread = fread (buffer, 1, offset, fin);
+ if (nbread != offset) {
+ return 1;
+ }
+ writefile (buffer, offset);
+ offset = 0;
+ }
+ writefile (seq->bytes, seq->length);
+
+ return 0;
+}
+
/* hexadecimal dump function */
int hexdump (int len) {
/* parse octal string */
-unsigned long int octal (char *s, int n) {
+long int octal (char *s, int n) {
int i;
unsigned long int l = 0;
for (i = 0; i < n; i++) {
/* parse hexa string */
-unsigned long int hexa (char *s, int n) {
+long int hexa (char *s, int n) {
int i;
unsigned long int l = 0;
for (i = 0; i < n; i++) {
int main (int argc, char *argv[])
{
- int rc = 0;
+ int i, rc = 0;
char *input = NULL;
char *output = NULL;
char *commands = NULL;
case '/': /* read patern */
seq.sequence = commands;
+ seq.length = 0;
while (*commands) {
if ((*commands == '\\') &&
((commands[1] == '/') || (commands[1] == '\\'))) {
rc = gotoaddr (addr);
} else {
VERBOSE (ERROR, fprintf (stderr, "erroneous address\n"));
+ rc = 1;
}
break;
rc = gotoaddr (addr);
} else {
VERBOSE (ERROR, fprintf (stderr, "erroneous address\n"));
+ rc = 1;
}
break;
case 'a': /* append mode */
- break;
+ offset = 0;
+ /* fall through */
- case 'd': /* delete mode */
+ case 'i': /* insert mode */
+ while (*commands) {
+ if ((*commands == ' ') || (*commands == '\t')) {
+ commands++;
+ } else {
+ break;
+ }
+ }
+ seq.sequence = commands;
+ seq.length = 0;
+ i = 0;
+ while (*commands) {
+ if ((*commands == ' ') || (*commands == '\t')) {
+ *commands++ = '\0';
+ break;
+ } else {
+ commands++;
+ i++;
+ if (i % 2 == 0) {
+ seq.bytes[seq.length] = hexa (seq.sequence + 2 * seq.length, 2);
+ if (seq.bytes[seq.length] == -1) {
+ rc = 1;
+ break;
+ }
+ seq.length++;
+ }
+ }
+ }
+ if ((seq.length > 0) && (rc == 0)) {
+ rc = insertseq (&seq);
+ } else {
+ VERBOSE (ERROR, fprintf (stderr, "erroneous sequence '%s'\n", seq.sequence));
+ rc = 1;
+ }
break;
- case 'i': /* insert mode */
+ case 'd': /* delete mode */
break;
case 'p': /* print mode */