[comp.sys.atari.8bit] SHRINK, the one that works!

pkopp@potpourri.UUCP (Paul Kopp) (08/06/87)

Just great.  The uuencoded "shrink" program I posted doesn't work!  I'm
destined to make it up to everyone.  (I hate uuencode anyway.)  What
I've done here is written a "C" program that encodes/decodes binary
files (the program's mine but I got the algorithm from _Unix_World_).
Just split this posting up into seperate files, compile the encode/decode
program, and run it on the coded "shrink" file below.  I made sure it
works this time, it does!  Have Fun! 
BTW...I put a ----CUT HERE--- at the end of this posting so you'll know
that you got the complete file.

        Gould Inc., Computer Systems Division, in Sunny South Florida
              ** The opinions (if any) expressed are my own. **
       ...seismo!gould!pkopp  OR  ...akgua!ucf-cs!novavax!gould!pkopp

          And remember:  A path is a thing that you have running
          between two shrubberies of slightly different heights.

The encode/decode program:
---------------------------- CUT HERE ---------------------------------
#include<stdio.h>

main(argc,argv)

int argc;
char *argv[];

{
    FILE *fopen(),*in,*out;
    int c;
    int i=0;
    int choice;

    if(argc < 4)
    {
        printf("\nusage: %s [-e -d] in_file out_file\n",argv[0]);
        printf("where: -e = encode file\n");
        printf("       -d = decode file\n");
        exit();
    }

    if((in=fopen(argv[2],"r")) == NULL)
    {
        printf("Error opening input file\n");
        exit();
    }
    if((out=fopen(argv[3],"w")) == NULL)
    {
        printf("Error opening output file\n");
        exit();
    }

    if(!strcmp(argv[1],"-e"))    /* Encode File */
    {
        while ((c = fgetc(in)) != EOF)
        {
            fprintf(out,"%02x", c);
            if (++i == 30)
            {
                fprintf(out," \n");
                i = 0;
            }
        }
        fprintf(out," \n");
        exit();
    }

    else if(!strcmp(argv[1],"-d"))    /* Decode File */
    {
        while(fscanf(in,"%2x", &c) != EOF)
            fputc(c,out);
        exit();
    }
    fclose(in);
    fclose(out);
}
---------------------------- CUT HERE ---------------------------------

And now, the coded version of "shrink":

---------------------------- CUT HERE ---------------------------------
ffffb400b600446e3affffc600cc0044313a2a2e2a9bffffaf05fd06203b 
b490034c4bb4e687d002e688a5878d0a03a5888d0b03a5938d0403a5948d 
0503a9408d0303a9528d0203a9318d0003a59d8d0103a9008d07038d0903 
a9058d0603a9808d08032059e4ad030310034cc5b7607d9bb1baa0d3c8d2 
c9cecba09b57686963682064726976652068617320746865206469736b20 
746f2062659b534852554e4b3f20007d496e73657274206469736b287329 
9b00a903a00620adb420fbb5206cba859d2087b9a938a00620adb420d9b5 
18a59d6930c5b5f00485a2d00ea5a3f00a2045bba5ac85a5200dbba90085 
8c859c85878588858920af05ade7028580ade8028581a000b912bcf00591 
80c8d0f618a580690c8595a581690085964cbf06ade8028596ade7028595 
18a59569038595a59669008596a5958598a5968599a900858d858ea59585 
9aa596859ba900858f85908591a489b1938597e689100720af05a9008589 
4c99b2ffff99b21ebca590d020a58fc905b01aa597a000919538a595e989 
a596e9b290034c67b3e695d002e696a489b193c597d009e68fd002e6904c 
ea06a590d025a58fd009e68dd002e68e4cda06a58fc905b012e68f18a58f 
658d858da58e6900858e4cda0638a598e9038580a599e9008581a58ed004 
a58df018a000a9ff9180c8a58e9180c8a58d9180a59a8580a59b8581e68f 
d004e690d000a000a5909180c8a58f9180a597c8918018a58069038595a5 
8169008596a58cf001604cbf06496e73657274206469736b20746f207772 
6974652000e695d002e696200ab4a951a0b320adb420e0b9a5a2d00ba5a3 
f007a5a5f0032005bb20d9b5a210a9039d4203a9b49d4403a9009d4503a5 
9cf002d00fa9089d4a03859ca9009d4b032044baa210a90b9d4203ade702 
9d4403ade8029d450338a595ede7029d4803a596ede8029d49032044baa5 
8cf00160a9f2a0b320adb4a5a3f003200dbb20d9b54cb5069b52652d696e 
7365727420736f75726365206469736b9b0018e68fd002e690a58f658d85 
8da590658e858e38a598e9038580a599e9008581a000a9ff9180c8a58e91 
80c8a58d918060a588c902d008a587c9d0d002386018606868a9ff858ca5 
8ed006a58dd002f016a590d012a58fc905b00c200ab42070b320fbb54caa 
b820f7b24c68b4849f86a020aad920e6d8a000b1f330062097b4c8d0f629 
7f2097b4a49fa6a06084a120ffffa4a16085d4859ea90085d52077b4a59e 
6085028403a554c912900320ccb4a000b102f0062097b4c8d0f660a99b4c 
97b4a000b193998004c810f8a97d2097b4a000b980049193c810f860e687 
d002e688a5a6f00aa000b193d004c810f960a5878d0a03a5888d0b0318a5 
938d0403a5948d0503a9808d0303a9504cd805a5a2d00ba5a3f007a5a5f0 
032005bba9f6a0b720adb420e0b920d9b5a59cd021a21020fbb5a9039d42 
03a9b49d4403a9009d4503a9049d4a03a9009d4b032044baa210a9079d42 
03ade7029d44038595ade80285969d450338a989ede7029d4803a9b2ede8 
029d49032044babd4303858618bd48036de7028583bd49036de8028584a5 
9cd00d18a595690c8595a5966900859638e69ca583e9018583a584e90085 
84a5a2d007a5a3f003200dbba9dda0b74cadb4d0d2c5d3d3a0d3d4c1d2d4 
00a5a2d01da9cda0b520adb4ad1fd02901f0f9a9008d1fd0ad1fd02901d0 
f920c7b460a90ca2109d42034c44ba7da0b2bad5ced3c8d2c9cecba09b9b 
44657374696e6174696f6e206973206472697665233f00536b697020626c 
616e6b2073656374732028592f4e293f00a90085878588859c8586858285 
a6a905a0b620adb4206cba859d2087b9a92ba0b620adb42036b9c959d002 
85a6a97d2097b418a59d6930c5b5f00285a2a5a3f0072045bba5ac85a520 
19b520d9b5a000b195c9ffd03020f8b6b195858a20f8b6b1958589d002c6 
8a20f8b6a000b1952018b720f8b6c689d0f2c68aa58ac9fff002d0e84c91 
b6a000b195858a20f8b6b1958589d002c68a20f8b6b1958585a5852018b7 
c689d0f7c68aa58ac9ffd0ef20f8b64c91b6a584c596d01138a583e59585 
02a584e5960502f01cb000e695d002e696a00060a4829193e68230016020 
e6b4a900858260a58630462019b520d9b5a000607d444f4e45211e1e1e1e 
1effffffffffffffffffffff9b004e4f54453a434f4d504c455445204449 
534b204e4f542046494c4c45443a4552524f529b0020fbb5a936a0b720ad 
b4a582d00f203bb4900aa90085a220d9b54caab8a94ea0b720adb4a58220 
9fb4a58785d4a58885d52077b44c86b77dfda0cff6e5f2f2f5eea0e5f2f2 
eff2a1a0c1e2eff2f4e5e49b008592a90085a2a9aaa0b720adb4a592209f 
b420d9b54caab8496e736572742064657374696e6174696f6e206469736b 
9b00496e73657274206469736b207769746820007d56657220312e30319b 
9b53656c6563743a9b9b313a20536872696e6b2061206469736b20746f20 
612066696c659b9b323a20556e736872696e6b20612066696c6520696e74 
6f2061206469736b9b9b333a205365742044656e736974799b9b463d466f 
726d61742c443d444f532c423d426f6f749b9b5b6869742072657475726e 
20666f722061206469726563746f72795d9b9b7f202043686f6963653a00 
4b3aa25086a418a558692a8593a55969038594a90c9d42032044baa9039d 
4203a9049d4a03a9028dc602a90c8dc502a9008dc80285a29d4b03a9a89d 
4403a9b89d45032044baa908a0b820adb42036b9c931d0034c4906c932d0 
034c43b6c933d0034cd9bac946d0034c0bbac944d00dadfebb850cadffbb 
850d6c0a00c942d0034c77e4c99bd0c5208ebb4caab8a250a9ff8dfc02a9 
019d4803a9009d4903a9079d4203a9929d4403a9009d45032044baa59220 
97b4a592609b456e7465722066696c656e616d652c28c4cfcea7d4207479 
70652074686520443a21299b00a961a0b920adb4a2008e4903a90d8d4803 
a9058d4203a9b78d4403a9008d45032044baac4803a90099b700f0189b57 
686963682064726976652077696c6c20686176652000a9b4a0b920adb420 
e0b92036b985b585c74cc7b4a9b4a00020adb4609b456e74657220647269 
7665206e756d626572202852455455524e3d41626f72742900a9e8a0b920 
adb420d6b920fbb5a5c7c99bf012a9fe9d4203a9c69d4403a9009d450320 
44ba4caab89bfd2020c9afcfa0c5d2d2cfd2adadbe002056e4bd4303101f 
c988f01b8592a90085a2a933a0ba20adb4a592209fb420fbb520d9b54caa 
b8602036b9c93190f9c939b0f538e930607d204368616e67652064656e73 
69747920666f722077686963682064726976653a00447269766520697320 
6e6f772000c4eff5e2ece59b00d3e9eee7ece59b007dfd20445249564520 
43414e275420424520434f4e464947555245449b00a97ba0ba20adb4206c 
ba859da90085a420c7b42045bbad0303100da9bba0ba20adb420d9b54caa 
b8a5acd008a904a000a201d008a900a08084a3a20085ac84ae86ad2051bb 
a5a4f0016020fdbba99da0ba20adb4a5acd00da9b3a0ba20adb420d9b54c 
aab8a9aba0ba4c35bba9408d0303a94e8d0203d00aa9808d0303a94f8d02 
03a9a78d0403a9008d0503a9318d0003a59d8d0103a9008d07038d0903a9 
0a8d0603a90c8d08032059e4607d4472697665233a00a985a0bb20adb420 
d6b9a220a90c9d42032044baa9039d4203a9069d4a03a9809d4b03a9c69d 
4403a9009d45032044baa220a9059d4203a9809d44038d44039d48038d48 
03a9059d45038d4503a9009d49038d49032044babd4303c901d00da9098d 
4203a2002044ba4cbebb4c36b920ffffa909850ca9bc850d6020fdbb2000 
bc4caab8ffff07be0cbeb3e8f2f5eeeb00ffff00508254d8a50c8dfebba5 
0d8dffbb2000bc18ad06e469018d9ab4ad07e469008d9bb4a9008dc602a5 
588580a5598581a9c285d4a95085d5a20086a38693a000b1d4c9fef01f38 
8692e592859565938593a5959180e8e6d4d002e6d5e680d002e6814c3a50 
a59385948df00218a55869a88580a55969008581a000989158a9ff8dfc02 
adfc02c9fff008a9ff8dfc024cab50b1804980918020a050c8c00cd0e3a0 
00f0dfa9fb8514a514d0fc854d60a594c99ba901859d2045bbad0303c901 
d00285a34c74e4800102030405060708090a0b0c0d0e0f10111213141516 
1718191a1b1c591e1f202122232425262728292a2b2c2d2e2f3031323334 
35363738393a3b3c3d3e3f404142438687464748494a4b4c4d4e4f505152 
535455565758595a5b5c5d5e5f606162ab32333435363738b5aeaf6e6f70 
7172737475767778797ac3504b4c4d4e4f505152535455565758595a5b5c 
5d1011125bd6d796e0e1e29a9b9c9d9e9fa0a1a2776a3f26273c3a403842 
3f433c484344453435507938b9babb7e7f3e3f404118c3c4c5c6c7c8c9ca 
4ba28f9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aab4a160e1e22baaa7a8e7e8 
e940ebecedeeeff0f1f273cab7b8c4c5c6c7c8c9cacbcccdcecfd0d1dbdc 
c988090a8be2cfd00f515668131415161718191a9bf2dfe0d3c8c6a2c6cd 
d9dfa7dfd8dcd6df0304f1b0317ab30102f8b7b8fb843b3c3d3e3f404142 
c31a0708c7c8edeffbedff02fcf5ff06d3d42b2c19d82f1b1f252620ece0 
23e2ad6465666768696aeb422f30eff0f1222519281b252c2cfafbfc5354 
41005743474f50065455560a288c8d8e8f9091925d616216646566676869 
6a6b6c6d6e6f7071257374767f6b6f797a7b7c7d7e3250b4b5b6b7b8b9ba 
bbbcbd9293c0c10a90919293949596979899a1ce1750a793979aa2a3a4a5 
a05abbdcdddedfe0e1e2e3ec7f66678269beb8b9babbbcbdbebfc0c1c2c3 
c4c5c7bbbfc457555652459c510d05060708090a0b14a7d655101159ad5a 
15165e60a3e7e8e9eaebecaae9e3e7766b73746f81c478352d2e2f303132 
333435368d40427cd592454781084142434445464748494a4b4ca3565892 
5152535455565758595a5b5c5d5ea6aeafa863abb3b4ad68696a6b6c6d6e 
6f7071727374bcc4c5be797a7b7c7d7e7f80525455565758595a5b5c5d5e 
5f606162636465666768696a6b6c6d6e6f70717273747576776ba7a8a52a 
2b2c2d2e2f303132333435366a606b6369673e3e3f404142434445464748 
494a4b4c4dcacfd0cd52535455565758595a5b5c5d5eacadaeafb0b1b266 
6768696a6b6c6d6e6f707172737475f2f7f8f57a7b7c7d7e7f808182e5fd 
9f86bbf0ee8ab1fbfff3fcf1ff92939495969798999a9b9c9d1a1f201da2 
a3a406121a17a915191b241caf1124b2e319291b29b8df232f3630272c2d 
303036c4c542474845cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde 
dfe0e1e2e3e4e5e6e7e8e9eaebeced6a6f706df2f3f4f519606c72fa2f6e 
72616a00637b03366672777009307d6d7a7e837f7f12131415929798736c 
6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a 
8b8c8d8e8f81bffeffffe002e102005045cacbcccdcecfd0d1d2d3d4d5d6 
d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced6a6f706df2f3f4 
f519606c72fa2f6e72616a00637b03366672777009307d6d7a7e837f7f12 
131415929798736c6d6e6f707172737475767778797a7b7c7d7e7f808182 
838485868788898a8b8c8d8e8f81bf08 
----------------- CUT HERE ----- this is the end--------------------------