Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #10063

hexump.c

From jacob navia <jacob@spamsink.net>
Newsgroups comp.lang.c
Subject hexump.c
Date 2011-09-09 22:53 +0200
Organization lccwin
Message-ID <j4ducg$lmn$1@speranza.aioe.org> (permalink)

Show all headers | View raw


Got the idea of adding one more exercise to the tutorial.

The goal is to show a small hexdump utility without any bells and
whistles, and add a bunch of exercises to add those. Here it is.

It uses standard C. Please tell me if there could be any
portability problems.

I do not use putchar but fputc to make it easier to add an output
file later as one more argument.

Please tell me if you see any errors in it. Note that the manifest
constants will be replaced by #defines in the exercises, when they
are asked to increase the number of columns, etc.

------------------------------------------------------cut here
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
    if (argc < 2) {
       fprintf(stderr,"Usage: %s <file name>\n",argv[0]);
       return EXIT_FAILURE;
    }
    FILE *file = fopen(argv[1],"rb");
    if (file == NULL) {
       fprintf(stderr,"Impossible to open %s for reading\n",argv[1]);
       return EXIT_FAILURE;
    }
    int oneChar = fgetc(file);
    int column = 0,line = 0;
    unsigned char tab[16+1];
    char *hex = "0123456789abcdef";
    int address = 1;

    while (oneChar != EOF) {
       if (column == 0) {
          memset(tab,'.',16);
          fprintf(stdout,"[%d] ",address);
       }
       if (oneChar >= ' ' && oneChar <= 127) {
          tab[column] = oneChar;
       }
       fputc(hex[(oneChar >> 4)&0xf],stdout);
       fputc(hex[oneChar&0xf],stdout);
       fputc(' ',stdout);
       column++;
       if (column == 16) {
          fputc(' ',stdout);
          tab[column]=0;
          fputs(tab,stdout);
          column = 0;
       }
       line++;
       if (line == 16) {
          fputc('\n',stdout);
          line = 0;
       }
       oneChar = fgetc(file);
       address++;
    }
    fclose(file);
    address--;
    if (column > 0 ) {
       while (column < 16) {
          fprintf(stdout,"   ");
          tab[column]=' ';
          column++;
       }
       tab[16]=0;
       fprintf(stdout," %s\n[%d]\n",tab,address);
    }
    else fprintf(stdout,"[%d]\n",address);
    return EXIT_SUCCESS;
}

----------------------------------------------------cut here

Back to comp.lang.c | Previous | Next — Next in thread | Find similar | Unroll thread


Thread

hexump.c jacob navia <jacob@spamsink.net> - 2011-09-09 22:53 +0200
  Re: hexump.c tea strainer <nospam@nospam.com> - 2011-09-09 21:06 +0000
    Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-09 23:57 +0200
    Re: hexump.c NicStevens <nic.stevens@gmail.com> - 2011-09-12 13:22 -0700
  Re: hexump.c Ian Collins <ian-news@hotmail.com> - 2011-09-10 09:18 +1200
    Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-09 23:59 +0200
  Re: hexump.c Ike Naar <ike@iceland.freeshell.org> - 2011-09-09 22:29 +0000
    Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-10 00:39 +0200
      Re: hexump.c Ike Naar <ike@iceland.freeshell.org> - 2011-09-09 22:53 +0000
        Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-10 00:58 +0200
        Re: hexump.c Seebs <usenet-nospam@seebs.net> - 2011-09-13 06:44 +0000
          Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-13 10:33 +0200
            Re: hexump.c Fritz Wuehler <fritz@spamexpire-201109.rodent.frell.theremailer.net> - 2011-09-13 18:02 +0200
            Teaching C (was Re: hexump.c) Kenneth Brody <kenbrody@spamcop.net> - 2011-09-13 16:36 -0400
              Re: Teaching C (was Re: hexump.c) jacob navia <jacob@spamsink.net> - 2011-09-13 22:44 +0200
                Re: Teaching C (was Re: hexump.c) Nobody <nobody@nowhere.com> - 2011-09-14 13:31 +0100
                Re: Teaching C (was Re: hexump.c) jacob navia <jacob@spamsink.net> - 2011-09-14 15:27 +0200
                Re: Teaching C (was Re: hexump.c) Richard Damon <news.x.richarddamon@xoxy.net> - 2011-09-14 11:49 -0400
                Re: Teaching C (was Re: hexump.c) Keith Thompson <kst-u@mib.org> - 2011-09-14 13:27 -0700
                Re: Teaching C (was Re: hexump.c) pacman@kosh.dhis.org (Alan Curry) - 2011-09-14 20:59 +0000
                Re: Teaching C (was Re: hexump.c) Nobody <nobody@nowhere.com> - 2011-09-14 22:20 +0100
                Re: Teaching C (was Re: hexump.c) James Kuyper <jameskuyper@verizon.net> - 2011-09-14 17:20 -0400
                Re: Teaching C (was Re: hexump.c) pacman@kosh.dhis.org (Alan Curry) - 2011-09-15 01:51 +0000
                Re: Teaching C (was Re: hexump.c) Keith Thompson <kst-u@mib.org> - 2011-09-14 19:29 -0700
                Re: Teaching C (was Re: hexump.c) Keith Thompson <kst-u@mib.org> - 2011-09-14 19:21 -0700
                Re: Teaching C Ben Pfaff <blp@cs.stanford.edu> - 2011-09-14 19:58 -0700
                Re: Teaching C Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-09-14 21:55 -0600
                Re: Teaching C James Kuyper <jameskuyper@verizon.net> - 2011-09-15 06:54 -0400
                Re: Teaching C Keith Thompson <kst-u@mib.org> - 2011-09-15 11:58 -0700
                Re: Teaching C Tim Rentsch <txr@alumni.caltech.edu> - 2012-01-24 12:57 -0800
                Re: Teaching C Nobody <nobody@nowhere.com> - 2011-09-15 14:25 +0100
                Re: Teaching C Seebs <usenet-nospam@seebs.net> - 2011-09-16 22:00 +0000
                Re: Teaching C (was Re: hexump.c) Kenneth Brody <kenbrody@spamcop.net> - 2011-09-14 12:54 -0400
                Re: Teaching C (was Re: hexump.c) James Kuyper <jameskuyper@verizon.net> - 2011-09-14 13:26 -0400
                Re: Teaching C (was Re: hexump.c) jacob navia <jacob@spamsink.net> - 2011-09-14 19:33 +0200
                Re: Teaching C (was Re: hexump.c) jameskuyper <jameskuyper@verizon.net> - 2011-09-14 11:33 -0700
                Re: Teaching C (was Re: hexump.c) jacob navia <jacob@spamsink.net> - 2011-09-14 21:17 +0200
                Re: Teaching C (was Re: hexump.c) Kenneth Brody <kenbrody@spamcop.net> - 2011-09-16 11:47 -0400
                Re: Teaching C (was Re: hexump.c) Seebs <usenet-nospam@seebs.net> - 2011-09-14 20:43 +0000
                Re: Teaching C (was Re: hexump.c) Nobody <nobody@nowhere.com> - 2011-09-14 22:35 +0100
                Re: Teaching C (was Re: hexump.c) gordonb.8a7i1@burditt.org (Gordon Burditt) - 2011-09-14 17:31 -0500
                Re: Teaching C (was Re: hexump.c) jacob navia <jacob@spamsink.net> - 2011-09-14 19:32 +0200
                Re: Teaching C (was Re: hexump.c) Kenneth Brody <kenbrody@spamcop.net> - 2011-09-16 11:27 -0400
                Re: Teaching C (was Re: hexump.c) Malcolm McLean <malcolm.mclean5@btinternet.com> - 2011-09-16 08:49 -0700
                Re: Teaching C (was Re: hexump.c) James Kuyper <jameskuyper@verizon.net> - 2011-09-17 15:04 -0400
            Re: hexump.c Keith Thompson <kst-u@mib.org> - 2011-09-13 20:31 -0700
              Re: hexump.c Malcolm McLean <malcolm.mclean5@btinternet.com> - 2011-09-14 03:22 -0700
              Re: hexump.c "BartC" <bc@freeuk.com> - 2011-09-14 11:40 +0100
                Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-14 13:54 +0200
                Re: hexump.c Nobody <nobody@nowhere.com> - 2011-09-14 13:50 +0100
                Re: hexump.c Keith Thompson <kst-u@mib.org> - 2011-09-14 11:35 -0700
                Re: hexump.c Seebs <usenet-nospam@seebs.net> - 2011-09-14 19:12 +0000
                Re: hexump.c John Bode <jfbode1029@gmail.com> - 2011-09-14 15:31 -0700
                Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-15 00:59 +0200
                Re: hexump.c Kleuskes & Moos <kleuske@somewhere.else.net> - 2011-09-14 23:14 +0000
                Re: hexump.c John Bode <jfbode1029@gmail.com> - 2011-09-15 08:52 -0700
                Re: hexump.c Jens Gustedt <jens.gustedt@loria.fr> - 2011-09-14 21:22 +0200
                Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-14 21:26 +0200
                Re: hexump.c Ian Collins <ian-news@hotmail.com> - 2011-09-15 07:32 +1200
                Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-14 21:44 +0200
                Re: hexump.c Keith Thompson <kst-u@mib.org> - 2011-09-14 13:49 -0700
                Re: hexump.c Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2011-09-16 00:50 +0300
                Re: hexump.c Keith Thompson <kst-u@mib.org> - 2011-09-15 18:34 -0700
                Re: hexump.c Keith Thompson <kst-u@mib.org> - 2011-09-14 12:16 -0700
                Hypocrites jacob navia <jacob@spamsink.net> - 2011-09-14 21:40 +0200
                Re: Hypocrites Keith Thompson <kst-u@mib.org> - 2011-09-14 19:11 -0700
                Re: hexump.c Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-09-14 15:05 +0100
                Re: hexump.c Malcolm McLean <malcolm.mclean5@btinternet.com> - 2011-09-14 07:56 -0700
                Re: hexump.c "BartC" <bc@freeuk.com> - 2011-09-14 17:23 +0100
              Re: hexump.c Seebs <usenet-nospam@seebs.net> - 2011-09-14 19:12 +0000
              Re: hexump.c John Bode <jfbode1029@gmail.com> - 2011-09-14 15:24 -0700
      Re: hexump.c gordonb.ik17p@burditt.org (Gordon Burditt) - 2011-09-09 18:16 -0500
        Re: hexump.c Jorgen Grahn <grahn+nntp@snipabacken.se> - 2011-09-12 22:24 +0000
  Re: hexump.c "Morris Keesan" <mkeesan@post.harvard.edu> - 2011-09-09 20:33 -0400
    Re: hexump.c Ian Collins <ian-news@hotmail.com> - 2011-09-10 12:42 +1200
      Re: hexump.c "Morris Keesan" <mkeesan@post.harvard.edu> - 2011-09-10 17:16 -0400
    Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-10 10:03 +0200
  Re: hexump.c Nobody <nobody@nowhere.com> - 2011-09-10 10:04 +0100
    Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-10 11:41 +0200
      Re: hexump.c pete <pfiland@mindspring.com> - 2011-09-10 05:51 -0400
        Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-10 12:38 +0200
          Re: hexump.c Nobody <nobody@nowhere.com> - 2011-09-10 17:53 +0100
  Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-10 12:46 +0200
    Re: hexump.c Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-09-10 13:03 +0100
      Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-10 15:34 +0200
    Re: hexump.c "Morris Keesan" <mkeesan@post.harvard.edu> - 2011-09-10 17:37 -0400
      Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-11 00:10 +0200
        Re: hexump.c Patrick Scheible <kkt@zipcon.net> - 2011-09-10 21:03 -0700
  Re: hexump.c Barry Schwarz <schwarz45@yahoo.com> - 2011-09-11 00:37 -0700
    Re: hexump.c jacob navia <jacob@spamsink.net> - 2011-09-11 13:56 +0200

csiph-web