Tuesday, February 15, 2011

Temperature Conversion - The C Way

#include <stdio.h>

#define LOWER 0 /* lower limit of table */
#define UPPER 300 /* upper limit */
#define STEP 20 /* step size */

/* print Fahrenheit-Celsius table */

main()
{
        int fahr;

        for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
              printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32));
}

Using Symbolic Constraints we are not throwing magic numbers into the program. This method makes it a lot easier to hand this code off to another programmer he can jump right into editing it even without a synopsis of what it does. Not nearly as complicated as the encryption program but this is where I am at so its cool. I am almost on chapter two of my C Programming book!

Sunday, February 13, 2011

Encrypt-a-file

    //**************************************
    //INCLUDE files for :crypt.c
    //**************************************
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    //**************************************
    // Name: CryptCode.c
    // Description:Encrypts file and outputs it to a file or stdout
    // By:Praveena M
    //
    //
    // Inputs:CryptCode.exe <infile> <outfile> <key>
    //
    //**************************************
 
    #define cypherbits 256 /* encryption strength in bits */
    #define cypher cypherbits/(sizeof(int)*8)
    int seed[cypher];
    void modseed() {
    int x;
    for(x=1;x<cypher;x++)seed[x]=seed[x]*0x81772012+seed[x]+0x49122035+seed[x+1];
    for(x=1;x<cypher;x++)seed[0]=seed[0]^seed[x];
    }
    int seedsum() {
    int n,x;
    n=0x80379251;
    for(x=0;x<cypher;x++)n=n^seed[x];
    return((n>>24)^((n>>16)&255)^((n>>8)&255)^(n&255));
    }
    char strequ(char *s1,char *s2) {
    int p;
    p=0;
    while((s1[p]==s2[p])&&(s1[p]!=0)&&(s2[p]!=0))p++;
    if(s1[p]==s2[p])return(1); else return(0);
    }
    int main(int argc,char *argv[]) {
    char
banner[]="\x43\x6f\x64\x65\x64\x20\x62\x79\x20\x50\x72\x61\x76\x65\x65\x6e\x61"
    "\x20\x6f\x66\x20\x49\x6e\x64\x69\x61"
  
"\x20\x28\x70\x76\x6e\x63\x61\x64\x40\x6b\x72\x65\x63\x2e\x65\x72\x6e\x65\x74\x2e\x69\x6e\x29";
    char buf[2048];
    int p,r,l,i,t,s,x;
    char b,c,pct,lpct;
    FILE *infile=NULL,*outfile=NULL;
    fprintf(stderr, "%s\n", banner);
    if(argc!=4){
    fprintf(stderr,"use: %s <infile> <outfile> <key>\n",argv[0]);
    return -1;
    }
    if(strequ(argv[1],"stdin"))infile=stdin; else
    if((infile=fopen(argv[1],"r"))==NULL){
    fprintf(stderr,"failed to open %s\n",argv[1]);
    return -1;
    }
    if(strequ(argv[2],"stdout"))outfile=stdout; else
    if((outfile=fopen(argv[2],"w"))==NULL){
    fprintf(stderr,"failed to create %s\n",argv[2]);
    return -1;
    }
    if(infile!=stdin) {
    fseek(infile,0,SEEK_END);
    l=ftell(infile);
    rewind(infile);
    } else l=0;
    s=l;
    t=0;
    pct=0;
    if(l<1)fprintf(stderr,"Encrypting data.. (%d bit cypher)\n",cypher*sizeof(int)*8);
    else fprintf(stderr,"Encrypting %d bytes.. (%d bit cypher)\n",l,cypher*sizeof(int)*8);
  /*  bzero(seed,sizeof(seed)); */
    modseed();
    p=0;
    while(argv[3][p]!=0){
    modseed();
    seed[0]=seed[0]+argv[3][p];
    modseed();
    p++;
    }
    i=0;
    if(l>0){
    fputc('[',stderr);
    x=(l/sizeof(buf));
    if(l-x*sizeof(buf)!=0)x+=1;
    if(x>38)x=38;
    for(p=0;p<x;p++) fputc(32,stderr);
    fputc(']',stderr);
    fputc(13,stderr);
    fputc('[',stderr);
    fflush(stderr);
    }
    c=1;
    while(c){
    r=fread(&buf,1,sizeof(buf),infile);
    if(r>0) {
         t+=r;
         if(l>0){
        lpct=pct;
        pct=t/(l/x);
        if(pct>lpct) {
        fputc(88+32*i,stderr);
        fflush(stderr);
        i=1-i;
        }
         } else {
        fputc(88+32*i,stderr);
        fflush(stderr);
        i=1-i;
         }
         p=0;
         while(p<r) {
        modseed();
        buf[p]=buf[p]^seedsum();
        p++;
         }
         if(fwrite(&buf,1,r,outfile)!=r) {
        fprintf(stderr,"\nerror writing data\n");
        return -1;
         }
    } else c=0;
    }
    if(l>0)fputc(']',stderr);
    fprintf(stderr,"\nDone. Wrote %d bytes.\n",t);
    }

Okay so I have been checking out this code and all I can say is wow and I can't wait until I get to this level. The formatting got nuked when I copied it into the post editor but looks great in Visual Studio 10. It provides 256 bit encryption and while I am not up on this enough to go into how secure it is I have really enjoyed examining the code. File goes in with a key and out comes the encrypted form. Much thanks goes out to the author.

Saturday, February 12, 2011

Feeling Lazy

Alright so I haven't been very productive today so no blurb about my C programming endeavors. But I am in need of a new mouse. I have been using the same Razer diamondback mouse for years now. Thanks to everyone who gave me input on whether I should with an xbox360 or PS3, now please help me pick a new mouse.



5700 DPI
Laser Tracking
Interchangeable Grips



1800 DPI
Optical Tracking
Sculpted Comfort Grip



3500 DPI
Optical Tracking
Ultra-Large None Slip Buttons

I have been looking at those three and have included a couple specifications for each but feel free to let me know what you are using, are planning to buy, or is your dream mouse.

Friday, February 11, 2011

Hello World!

C Programming Blurb:
The book I will be working out of is The C Programming Language (Second Edition) by Brian W. Kernighan and Dennis M. Ritchie. I am starting in the beginning of the book (a novel idea right?) even though I already know the basics I figure it can't really hurt too much to brush up on some things. I am really liking how this book doesn't waste time and gets right to the point. I will be using my laptop running slackware to compile my code.


So far in the first chapter my favorite part is the ability to use %d as a placeholder for integer arguments when using the printf output function. So printf("%3d %6d\n", fahr, celsius); formats the variables with  right-justified fields creating a lean and clean output statement. In that code snip-it it sets up the fahr variable to be three digits wide and the celsius variable to be six digits width.

Question of the Day:
I am thinking about buying a console for my room. My roommate has an XBOX360 in our basement so I am leaning towards a PS3, but I have always been an XBOX fanboy. So maybe I would want another one just in case he is using his. Any input would be much appreciated.

Wednesday, February 9, 2011

Fun with C

Honestly it feels like its been ages since I have done anything productive on a computer. So in an attempt to turn all that around I am going to get back into programming, even if its doing absolutely stupid simple shit that has no real world application. So I have fucked with Assembly, BASIC, C, C++, Perl, Python, and probably some others. But I have never learned the ins and outs of anything, so I have decided to go with C. Hopefully I will be posting some code I have written shortly

Why?

Alright. So I am giving this whole blogging thing a shot. I hope to add content daily regarding anything and everything I am doing in terms of technology, even if its something as stupid as playing nazi zombies all day