The following set of context diffs converts a standard v4 JPEG source tree into a JSTEG source tree. Use "patch -p0" to perform the conversion. diff -c -N jpeg-v4/README.jsteg jsteg-v4/README.jsteg *** jpeg-v4/README.jsteg --- jsteg-v4/README.jsteg Tue May 25 14:24:00 1993 *************** *** 0 **** --- 1,112 ---- + This version of the Independent JPEG Group's JPEG Software (release 4) + has been modifed for 1-bit steganography in JFIF output files. + + + To compile the package, simply follows the steps given in the original + README file. + + To inject a data file into a JPEG/JFIF image, simply add the option + "-steg filename" to the "cjpeg" command line. If the data file is too + large for the image, "cjpeg" will inform you. At this point, you can + compress the data file, increase the quality of the image (thereby + increasing image size), or try a different image. + + Extraction of a data file works similarly. The "-steg filename" + option to "djpeg" writes the steganographic data to the file, wiping + out its previous contents. Usually, the decoded image sent to + standard output is redirected to "/dev/null". + + + Steganography is the science of hiding data in otherwise plain text or + images. Here, we are hiding the data inside images stored in the JFIF + format of the JPEG standard. It was believed that this type of + steganography was impossible, or at least infeasible, since the JPEG + standard uses lossy encoding to compress its data. Any hidden data + would be overwhelmed by the noise. The trick used by this + steganographic implementation is to recognize that JPEG encoding is + split into lossy and non-lossy stages. The lossy stages use a + discrete cosine transform and a quantization step to compress the + image data; the non-lossy stage then uses Huffmann coding to further + compress the image data. As such, we can insert the steganographic + data into the image data between those two steps and not risk + corruption. + + This method has several benefits. First, the JPEG/JFIF image format + has become the de-facto standard for transmission across USENET and + for storage on FTP sites. Steganography using these formats would be + innocuous compared to that with most other formats. Second, + steganographic data in JPEG images is harder to detect with the naked + eye than the same data in raw 8-bit or 24-bit images. Just as the + aforementioned lossy raw->encoded conversion tends to wipe out + steganographic data, the reversed, encoded->raw conversion tends to do + the same thing. The steganographic inaccuracies in the image are + wiped over. In addition, the wide control available over image + quantization makes it very difficult to establish whether or not the + inaccuracies which do appear are caused by steganographic data or by + lower-quality quantization. + + The JPEG encoding procedure divides an image into 8x8 blocks of pixels + in the YCbCr colorspace. Then they are run through a discrete cosine + transform (DCT) and the resulting frequency coefficients are scaled to + remove the ones which a human viewer would not detect under normal + conditions. If steganographic data is being loaded into the JPEG + image, the loading occurs after this step. The lowest-order bits of + all non-zero frequency coefficients are replaced with successive bits + from the steganographic source file, and these modified coefficients + are sent to the Huffmann coder. (This choice of encoding slots produces + good results, but there may be better ones. For example, tests have + shown that the human eye is less sensitive to changes along the Cb and + Cr colorspace axes---we ought to be able to stick more data there.) + + The steganographic encoding format (the format of data inserted into + the lowest-order bits of the image) is as follows: + + +-----+----------- -----+-------------------------------- + | A | B B B . . . B | C C C C C C C C C C . . . + +-----+----------- -----+-------------------------------- + + "A" is five bits. It expresses the length (in bits) of field B. + Order is most-significant-bit first. + + "B" is some number of bits from zero to thirty-one. It expresses + the length (in bytes) of the injection file. Order is again + most-significant-bit first. The range of values for "B" is 0 to + one billion. + + "C" is the bits in the injection file. No ordering is implicit on + the bit stream. + + This format is designed to make the steganographic data as innocuous + as possible. (As one would expect, there is no magic cookie at the + front giving the format). We are forced to have a length field at the + beginning of the data, since any sort of in-band EOF tag would be + infeasible. + + Expressing the length field as a raw series of bits representing an + integer would be dangerous, however; for any sort of small + steganographic file, there would be a long string of zeroes in the + field---very easy to detect. By stripping off the zeroes and creating + a secondary length field for our primary length field(!), we greatly + reduce the problem. The five bits for the secondary length field is + small enough that runs of zeroes are not a problem, and it allows a + primary length field of up to thirty-one bits. + + There is still a danger in that the sixth bit of the stream will + always be one; this is solved by tacking an extra zero onto the + beginning of the primary length field in half the cases. This helps + randomize the output, although it reduces the representable data size + to one gigabyte. + + The storage effectiveness for this steganographic technique is + reasonable, but not astounding. Using the simple encoding criteria + described above, an N kilobyte data file fits when the resulting + JPEG/JFIF file is around C*N kilobytes, where C ranges from eight to + ten. This is not much worse than raw 24-bit insertion, and the + possibility of tweaking with regards to colorspace could produce even + better results. Compressing the steganographic file before injection + does not seem to greatly harm compression in the envelope image; the + data spreading that occurs during injection increases entropy enough + for Huffmann coding to work. + + Derek Upham + upham@cs.ubc.ca diff -c -N jpeg-v4/bitsink.c jsteg-v4/bitsink.c *** jpeg-v4/bitsink.c --- jsteg-v4/bitsink.c Thu May 20 21:58:32 1993 *************** *** 0 **** --- 1,118 ---- + /* + Input should have the following format: + + +-----+----------- -----+-------------------------------- + | A | B B B . . . B | C C C C C C C C C C . . . + +-----+----------- -----+-------------------------------- + + "A" is five bits. It expresses the length (in bits) of field B. + Order is most-significant-bit first. + + "B" is some number of bits from zero to thirty-one. It expresses + the length (in bytes) of the injection file. Order is again + most-significant-bit first. The range of values for "B" is 0 to + 2147483648. + + "C" is the bits in the injection file. No ordering is implicit on + the bit stream. + + =============== + + */ + + #ifdef STEG_SUPPORTED + + #include + + #define BOTTOM 0x1 + #define BITMAX 7 + #define CHARBITS 8 + #define BUFSIZE 1024 + #define AWIDTH 5 + #define BMAXWIDTH 31 + + static unsigned char buf[BUFSIZE]; + static unsigned short bufindex = 0; + static signed short bitindex = CHARBITS-1; + + static FILE *outfile = 0; + static unsigned long file_size = 0; + static unsigned long fileindex = 0; + static unsigned short rep_width = 0; + static unsigned short use_exject = 0; + static unsigned short curr_special = 0; + + static int empty(void) + { + int written = fwrite(buf, sizeof(char), bufindex, outfile); + if (written != bufindex) + { + bufindex = 0; + bitindex = BITMAX; + fclose(outfile); + outfile = 0; + return -1; + } + bufindex = 0; + bitindex = BITMAX; + return 0; + } + + FILE *bitsavefile(FILE *out) + { + if (bufindex) + empty(); + use_exject = 1; + if (outfile) + { + fclose(out); + return outfile; + } + outfile = out; + bufindex = 0; + bitindex = 7; + return outfile; + } + + int bitsetbit(unsigned char c) + { + if (outfile == 0) + return -1; + if (curr_special < AWIDTH) + rep_width |= ((c & BOTTOM) << (AWIDTH - ++curr_special)); + else if (curr_special < AWIDTH+rep_width) + file_size |= ((c & BOTTOM) << (AWIDTH+rep_width - ++curr_special)); + else + { + buf[bufindex] &= ~(BOTTOM << bitindex); + buf[bufindex] |= ((c & BOTTOM) << bitindex); + if (--bitindex == -1) + { + bitindex=BITMAX; + ++bufindex; + ++fileindex; + } + if (fileindex == file_size) + { + int ret_val; + if (bitindex != 7) + return -2; + ret_val = empty(); + fclose(outfile); + outfile = 0; + return ret_val; + } + if (bufindex == BUFSIZE) + return empty(); + } + return 0; + } + + void exject(short outval) + { + if ((outval & 0x1) != outval) + if (use_exject) + bitsetbit(outval & BOTTOM); + } + + #endif /* STEG_SUPPORTED */ diff -c -N jpeg-v4/bitsink.h jsteg-v4/bitsink.h *** jpeg-v4/bitsink.h --- jsteg-v4/bitsink.h Thu May 20 21:47:19 1993 *************** *** 0 **** --- 1,3 ---- + FILE *bitsavefile(FILE *out); + int bitsetbit(unsigned char c); + void exject(unsigned short outval); diff -c -N jpeg-v4/bitsource.c jsteg-v4/bitsource.c *** jpeg-v4/bitsource.c --- jsteg-v4/bitsource.c Thu May 20 21:58:57 1993 *************** *** 0 **** --- 1,171 ---- + /* + Output has the following format: + + +-----+----------- -----+-------------------------------- + | A | B B B . . . B | C C C C C C C C C C . . . + +-----+----------- -----+-------------------------------- + + "A" is five bits. It expresses the length (in bits) of field B. + Order is most-significant-bit first. + + "B" is some number of bits from zero to thirty-one. It expresses + the length (in bytes) of the injection file. Order is again + most-significant-bit first. The range of values for "B" is 0 to + 2147483648. + + "C" is the bits in the injection file. No ordering is implicit on + the bit stream. + + =============== + + Uses two indices (byte index and bit index) to walk across a + contiguous array of unsigned chars. When "bufindex" equals + "length", it's off the end of the valid data (thanks to zero- + indexing), so use that as a flag to load in the next chunk into + the buffer. + + When a refresh fails (indicating EOF), the FILE pointer is + closed and set to NULL, and this is used as an EOF flag by + getbit(). + + The package is initialized with "bufindex" equal to "length", + so the first call to getbit() forces a refresh. + */ + + #ifdef STEG_SUPPORTED + + #include + #include + #include + #include + #include "bitsource.h" + + #define BOTTOM 0x1 + #define BITMAX 7 + #define CHARBITS 8 + #define BUFSIZE 1024 + #define AWIDTH 5 + #define BMAXWIDTH 31 + + static unsigned char buf[BUFSIZE]; + static unsigned short buf_length = 0; + static unsigned short bufindex = 0; + static unsigned short bitindex = CHARBITS-1; + + static FILE *infile = 0; + static off_t file_size = 0; + static unsigned long fileindex = 0; + static unsigned short rep_width = 0; + static unsigned short use_inject = 0; + static unsigned short curr_special = 0; + + static void refresh(void) + { + buf_length = fread(buf, sizeof(char), BUFSIZE, infile); + bufindex = 0; + bitindex = BITMAX; + if (buf_length == 0) + { + fclose(infile); + infile = 0; + } + } + + /* + Return number of bits needed to completely represent "size". + */ + static unsigned short getrepwidth(unsigned long size) + { + short shift = 0; + + /* size==0 will _always_ work after masking */ + if (size == 0) + return 0; + + /* shift==0 is a worthless case. Loop will exit when there is a */ + /* difference between masked and unmasked values. */ + while ((size & (((unsigned long) ~0) >> ++shift)) == size) + ; + + return (BMAXWIDTH + 2 - shift); + } + + FILE *bitloadfile(FILE *in) + { + struct stat stat_info; + + buf_length = bufindex = 0; + bitindex = CHARBITS-1; + + if (infile) + { + fclose(in); + return infile; + } + infile = in; + if (infile == 0) + return 0; + + use_inject = 1; + if (fstat(fileno(infile), &stat_info) == -1) + perror(errno); + file_size = stat_info.st_size; + rep_width = getrepwidth(file_size); + curr_special = rep_width + AWIDTH; + + return infile; + } + + signed char bitgetbit(void) + { + signed char ret_val; + if (bufindex == buf_length) + refresh(); + if (infile == 0) + return (signed char) -1; + if (curr_special > 0) + { + --curr_special; + if (curr_special >= rep_width) + ret_val = (rep_width >> (curr_special-rep_width)) & 0x1; + else + ret_val = (file_size >> curr_special) & 0x1; + } + else + { + if (bitindex==BITMAX) + fflush(stdout); + ret_val = ( (buf[bufindex]) >> bitindex-- ) & BOTTOM; + if (bitindex == (unsigned short) -1) + { + bitindex=BITMAX; + ++bufindex; + ++fileindex; + } + } + return ret_val; + } + + int bitendload(void) + { + return (fileindex == file_size); + } + + short inject(short inval) + { + short inbit; + if ((inval & 0x1) != inval) + if (use_inject) + { + if ((inbit=bitgetbit()) != -1) + { + inval &= ~0x1; + inval |= inbit; + } + else + use_inject = 0; + } + return inval; + } + + #endif /* STEG_SUPPORTED */ diff -c -N jpeg-v4/bitsource.h jsteg-v4/bitsource.h *** jpeg-v4/bitsource.h --- jsteg-v4/bitsource.h Thu May 20 21:47:19 1993 *************** *** 0 **** --- 1,4 ---- + FILE * bitloadfile(FILE *in); + signed char bitgetbit(void); + int bitendload(void); + short inject(short inval); diff -c -N jpeg-v4/cjpeg.1 jsteg-v4/cjpeg.1 *** jpeg-v4/cjpeg.1 Wed Nov 4 18:10:01 1992 --- jsteg-v4/cjpeg.1 Tue May 25 14:00:12 1993 *************** *** 16,21 **** --- 16,24 ---- .B \-targa ] [ + .B \-steg " file" + ] + [ .BI \-maxmemory " N" ] [ *************** *** 104,109 **** --- 107,119 ---- to make .B cjpeg treat the input as Targa format. + .TP + .B \-steg " file" + Insert an arbitrary file into the new JPEG image. + The file contents are inserted in such a way that they are invisible + to ordinary users, but + .B djpeg + can retrieve them. .PP The .B \-quality diff -c -N jpeg-v4/djpeg.1 jsteg-v4/djpeg.1 *** jpeg-v4/djpeg.1 Sun Aug 2 09:46:23 1992 --- jsteg-v4/djpeg.1 Tue May 25 14:02:21 1993 *************** *** 19,24 **** --- 19,27 ---- .B \-targa ] [ + .B \-steg " file" + ] + [ .B \-blocksmooth ] [ *************** *** 103,108 **** --- 106,115 ---- is specified; otherwise, colormapped format is emitted if .B \-colors is specified; otherwise, 24-bit full-color format is emitted. + .TP + .B \-steg " file" + Extract the data file encoded into the JPEG image, and write it to + the given file. .PP Switches for advanced users: .TP diff -c -N jpeg-v4/jcmain.c jsteg-v4/jcmain.c *** jpeg-v4/jcmain.c Fri Dec 4 08:52:45 1992 --- jsteg-v4/jcmain.c Tue May 25 12:39:39 1993 *************** *** 55,60 **** --- 55,63 ---- #endif #endif + #ifdef STEG_SUPPORTED + #include "bitsource.h" + #endif /* STEG_SUPPORTED */ #include "jversion.h" /* for version message */ *************** *** 240,245 **** --- 243,251 ---- #ifdef TARGA_SUPPORTED fprintf(stderr, " -targa Input file is Targa format (usually not needed)\n"); #endif + #ifdef STEG_SUPPORTED + fprintf(stderr, " -steg file Steganography contents of file into image.\n"); + #endif /* STEG_SUPPORTED */ fprintf(stderr, "Switches for advanced users:\n"); fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n"); #ifdef INPUT_SMOOTHING_SUPPORTED *************** *** 574,580 **** usage(); cinfo->smoothing_factor = val; ! } else if (keymatch(arg, "targa", 1)) { /* Input file is Targa format. */ is_targa = TRUE; --- 580,598 ---- usage(); cinfo->smoothing_factor = val; ! } ! ! #ifdef STEG_SUPPORTED ! else if (keymatch(arg, "steg", 4)) { ! /* Inject binary file. */ ! if (++argn >= argc) ! usage(); ! if (!bitloadfile(fopen(argv[argn], READ_BINARY))) ! usage(); ! } ! #endif /* STEG_SUPPORTED */ ! ! else if (keymatch(arg, "targa", 1)) { /* Input file is Targa format. */ is_targa = TRUE; *************** *** 686,691 **** --- 704,715 ---- } #endif + if (!bitendload()) + { + fprintf(stderr, "Couldn't load entire file!\n"); + exit(EXIT_FAILURE); + } + /* All done. */ exit(EXIT_SUCCESS); return 0; /* suppress no-return-value warnings */ diff -c -N jpeg-v4/jcmcu.c jsteg-v4/jcmcu.c *** jpeg-v4/jcmcu.c Wed Jul 22 17:08:23 1992 --- jsteg-v4/jcmcu.c Thu May 20 22:00:28 1993 *************** *** 12,17 **** --- 12,20 ---- #include "jinclude.h" + #ifdef STEG_SUPPORTED + #include "bitsource.h" + #endif /* STEG_SUPPORTED */ /* * If this file is compiled with -DDCT_ERR_STATS, it will reverse-DCT each *************** *** 103,109 **** --- 106,116 ---- temp += *quanttbl>>1; temp /= *quanttbl; } + #ifdef STEG_SUPPORTED + *output_data++ = inject(temp); + #else /* not STEG_SUPPORTED */ *output_data++ = temp; + #endif /* STEG_SUPPORTED */ quanttbl++; } } diff -c -N jpeg-v4/jdhuff.c jsteg-v4/jdhuff.c *** jpeg-v4/jdhuff.c Thu Dec 3 16:26:17 1992 --- jsteg-v4/jdhuff.c Thu May 20 22:01:25 1993 *************** *** 12,17 **** --- 12,20 ---- #include "jinclude.h" + #ifdef STEG_SUPPORTED + #include "bitsink.h" + #endif /* STEG_SUPPORTED */ /* Static variables to avoid passing 'round extra parameters */ *************** *** 364,369 **** --- 367,375 ---- s += cinfo->last_dc_val[ci]; cinfo->last_dc_val[ci] = (JCOEF) s; /* Descale and output the DC coefficient (assumes ZAG[0] = 0) */ + #ifdef STEG_SUPPORTED + exject((JCOEF) s); + #endif /* STEG_SUPPORTED */ (*block)[0] = (JCOEF) (((JCOEF) s) * quanttbl[0]); /* Section F.2.2.2: decode the AC coefficients */ *************** *** 379,384 **** --- 385,393 ---- r = get_bits(s); s = huff_EXTEND(r, s); /* Descale coefficient and output in natural (dezigzagged) order */ + #ifdef STEG_SUPPORTED + exject((JCOEF) s); + #endif /* STEG_SUPPORTED */ (*block)[ZAG[k]] = (JCOEF) (((JCOEF) s) * quanttbl[k]); } else { if (r != 15) diff -c -N jpeg-v4/jdmain.c jsteg-v4/jdmain.c *** jpeg-v4/jdmain.c Wed Nov 11 17:50:48 1992 --- jsteg-v4/jdmain.c Thu May 20 22:02:13 1993 *************** *** 55,60 **** --- 55,63 ---- #endif #endif + #ifdef STEG_SUPPORTED + #include "bitsink.h" + #endif /* STEG_SUPPORTED */ #include "jversion.h" /* for version message */ *************** *** 214,219 **** --- 217,225 ---- #ifdef TARGA_SUPPORTED fprintf(stderr, " -targa Select Targa output format\n"); #endif + #ifdef STEG_SUPPORTED + fprintf(stderr, " -steg file Output steganographic text to file\n"); + #endif fprintf(stderr, "Switches for advanced users:\n"); #ifdef BLOCK_SMOOTHING_SUPPORTED fprintf(stderr, " -blocksmooth Apply cross-block smoothing\n"); *************** *** 358,363 **** --- 364,376 ---- /* Targa output format. */ requested_fmt = FMT_TARGA; + } else if (keymatch(arg, "steg", 4)) { + /* Exject binary file. */ + if (++argn >= argc) + usage(); + if (!bitsavefile(fopen(argv[argn], WRITE_BINARY))) + usage(); + } else { usage(); /* bogus switch */ } diff -c -N jpeg-v4/jinclude.h jsteg-v4/jinclude.h *** jpeg-v4/jinclude.h Thu Jun 25 15:52:36 1992 --- jsteg-v4/jinclude.h Thu May 20 21:47:21 1993 *************** *** 93,98 **** --- 93,99 ---- #define MEMCOPY(dest,src,size) bcopy((const void *)(src), (void *)(dest), (size_t)(size)) #else /* not BSD, assume Sys V or compatible */ #include + #include #define MEMZERO(target,size) memset((void *)(target), 0, (size_t)(size)) #define MEMCOPY(dest,src,size) memcpy((void *)(dest), (const void *)(src), (size_t)(size)) #endif /* BSD */ diff -c -N jpeg-v4/makefile.ansi jsteg-v4/makefile.ansi *** jpeg-v4/makefile.ansi Mon Dec 7 15:26:51 1992 --- jsteg-v4/makefile.ansi Thu May 20 21:54:44 1993 *************** *** 9,15 **** CC= cc # You may need to adjust these cc options: ! CFLAGS= -O # In particular: # Add -DBSD if on a pure BSD system (see jinclude.h). # Add -DMEM_STATS to enable gathering of memory usage statistics. --- 9,15 ---- CC= cc # You may need to adjust these cc options: ! CFLAGS= -O -DSTEG_SUPPORTED # In particular: # Add -DBSD if on a pure BSD system (see jinclude.h). # Add -DMEM_STATS to enable gathering of memory usage statistics. *************** *** 64,75 **** # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.a LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 64,75 ---- # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o bitsource.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o bitsink.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.a LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 116,121 **** --- 116,123 ---- cmp testimg.jpg testout.jpg + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.o : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.o : jcarith.c jinclude.h jconfig.h jpegdata.h jccolor.o : jccolor.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.bcc jsteg-v4/makefile.bcc *** jpeg-v4/makefile.bcc Mon Dec 7 15:27:05 1992 --- jsteg-v4/makefile.bcc Thu May 20 21:55:03 1993 *************** *** 14,20 **** CC= bcc # You may need to adjust these cc options: ! CFLAGS= -DHAVE_STDC -DINCLUDES_ARE_ANSI \ -ms -DMSDOS -DUSE_FMEM -DINCOMPLETE_TYPES_BROKEN -w-par -O2 # -DHAVE_STDC -DINCLUDES_ARE_ANSI enable ANSI-C features (we DON'T want -A) # -ms selects small memory model for most efficient code --- 14,20 ---- CC= bcc # You may need to adjust these cc options: ! CFLAGS= -DHAVE_STDC -DINCLUDES_ARE_ANSI -DSTEG_SUPPORTED \ -ms -DMSDOS -DUSE_FMEM -DINCOMPLETE_TYPES_BROKEN -w-par -O2 # -DHAVE_STDC -DINCLUDES_ARE_ANSI enable ANSI-C features (we DON'T want -A) # -ms selects small memory model for most efficient code *************** *** 60,72 **** # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 60,72 ---- # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj bitsource.o COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj bitsink.o DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 127,132 **** --- 127,134 ---- fc testimg.jpg testout.jpg + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.obj : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.obj : jcarith.c jinclude.h jconfig.h jpegdata.h jccolor.obj : jccolor.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.manx jsteg-v4/makefile.manx *** jpeg-v4/makefile.manx Mon Dec 7 15:26:52 1992 --- jsteg-v4/makefile.manx Thu May 20 21:55:18 1993 *************** *** 17,23 **** #ARCHFLAGS= -c2 CFLAGS= -MC -MD -DAMIGA -DTWO_FILE_COMMANDLINE -DNEED_SIGNAL_CATCHER \ ! -Dsignal_catcher=_abort -DSHORTxSHORT_32 $(ARCHFLAGS) -spfam -r4 # Link-time cc options: LDFLAGS= -g --- 17,24 ---- #ARCHFLAGS= -c2 CFLAGS= -MC -MD -DAMIGA -DTWO_FILE_COMMANDLINE -DNEED_SIGNAL_CATCHER \ ! -Dsignal_catcher=_abort -DSHORTxSHORT_32 $(ARCHFLAGS) -spfam -r4 \ ! -DSTEG_SUPPORTED # Link-time cc options: LDFLAGS= -g *************** *** 62,73 **** # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 63,74 ---- # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o bitsource.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o bitsink.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 113,118 **** --- 114,121 ---- cmp testimg.jpg testout.jpg + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.o : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.o : jcarith.c jinclude.h jconfig.h jpegdata.h jccolor.o : jccolor.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.mc5 jsteg-v4/makefile.mc5 *** jpeg-v4/makefile.mc5 Mon Dec 7 15:27:01 1992 --- jsteg-v4/makefile.mc5 Thu May 20 21:56:04 1993 *************** *** 13,19 **** # from the library. The objectfiles are also kept separately as timestamps. # You may need to adjust these cc options: ! CFLAGS= /AS /I. /W3 /Oail /Gs # NB: /Gs turns off stack oflo checks LDFLAGS= /Fm /F 2000 # /F hhhh sets stack size (in hex) # In particular: # Add /DMSDOS if your compiler doesn't automatically #define MSDOS. --- 13,20 ---- # from the library. The objectfiles are also kept separately as timestamps. # You may need to adjust these cc options: ! CFLAGS= /AS /I. /W3 /Oail /Gs /DSTEG_SUPPORTED ! # NB: /Gs turns off stack oflo checks LDFLAGS= /Fm /F 2000 # /F hhhh sets stack size (in hex) # In particular: # Add /DMSDOS if your compiler doesn't automatically #define MSDOS. *************** *** 49,61 **** # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 50,62 ---- # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj bitsource.o COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj bitsink.o DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 73,78 **** --- 74,81 ---- lib libjpeg -+$*.obj; + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.obj : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.obj : jcarith.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.mc6 jsteg-v4/makefile.mc6 *** jpeg-v4/makefile.mc6 Mon Dec 7 15:27:03 1992 --- jsteg-v4/makefile.mc6 Thu May 20 21:56:33 1993 *************** *** 20,26 **** # -DMEM_STATS enable memory usage statistics (optional) # You might also want to add -G2 if you have an 80286, etc. ! CFLAGS = -AS -Ox -W3 -DHAVE_STDC -DINCLUDES_ARE_ANSI -DMSDOS -DUSE_FMEM -DSHORTxLCONST_32 # need linker response file because file list > 128 chars RFILE = libjpeg.ans --- 20,26 ---- # -DMEM_STATS enable memory usage statistics (optional) # You might also want to add -G2 if you have an 80286, etc. ! CFLAGS = -AS -Ox -W3 -DHAVE_STDC -DINCLUDES_ARE_ANSI -DSTEG_SUPPORTED -DMSDOS -DUSE_FMEM -DSHORTxLCONST_32 # need linker response file because file list > 128 chars RFILE = libjpeg.ans *************** *** 54,66 **** # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 54,66 ---- # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj bitsource.o COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj bitsink.o DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 120,125 **** --- 120,127 ---- fc testimg.jpg testout.jpg + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.obj : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.obj : jcarith.c jinclude.h jconfig.h jpegdata.h jccolor.obj : jccolor.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.mms jsteg-v4/makefile.mms *** jpeg-v4/makefile.mms Mon Dec 7 15:27:08 1992 --- jsteg-v4/makefile.mms Thu May 20 21:56:53 1993 *************** *** 6,12 **** # Read SETUP instructions before saying "MMS" !! ! CFLAGS= $(CFLAGS) /NoDebug /Optimize /Define = (TWO_FILE_COMMANDLINE,HAVE_STDC,INCLUDES_ARE_ANSI) OPT= Sys$Disk:[]MAKVMS.OPT --- 6,12 ---- # Read SETUP instructions before saying "MMS" !! ! CFLAGS= $(CFLAGS) /NoDebug /Optimize /Define = (TWO_FILE_COMMANDLINE,HAVE_STDC,INCLUDES_ARE_ANSI,STEG_SUPPORTED) OPT= Sys$Disk:[]MAKVMS.OPT *************** *** 38,50 **** # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.olb LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 38,50 ---- # compression objectfiles CLIBOBJECTS= jcmaster.obj jcdeflts.obj jcarith.obj jccolor.obj jcexpand.obj \ jchuff.obj jcmcu.obj jcpipe.obj jcsample.obj jfwddct.obj \ ! jwrjfif.obj jrdgif.obj jrdppm.obj jrdrle.obj jrdtarga.obj bitsource.o COBJECTS= jcmain.obj $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.obj jddeflts.obj jbsmooth.obj jdarith.obj jdcolor.obj \ jdhuff.obj jdmcu.obj jdpipe.obj jdsample.obj jquant1.obj \ jquant2.obj jrevdct.obj jrdjfif.obj jwrgif.obj jwrppm.obj \ ! jwrrle.obj jwrtarga.obj bitsink.o DOBJECTS= jdmain.obj $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.olb LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 102,107 **** --- 102,109 ---- - Backup /Compare/Log testimg.jpg testout.jpg + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.obj : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.obj : jcarith.c jinclude.h jconfig.h jpegdata.h jccolor.obj : jccolor.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.sas jsteg-v4/makefile.sas *** jpeg-v4/makefile.sas Mon Dec 7 15:26:53 1992 --- jsteg-v4/makefile.sas Thu May 20 21:57:10 1993 *************** *** 20,26 **** # You may need to adjust these cc options: CFLAGS= -v -b -rr -O -j104 $(ARCHFLAGS) -DHAVE_STDC -DINCLUDES_ARE_ANSI \ -DAMIGA -DTWO_FILE_COMMANDLINE -DINCOMPLETE_TYPES_BROKEN \ ! -DNO_MKTEMP -DNEED_SIGNAL_CATCHER -DSHORTxSHORT_32 # -j104 disables warnings for mismatched const qualifiers # Link-time cc options: --- 20,26 ---- # You may need to adjust these cc options: CFLAGS= -v -b -rr -O -j104 $(ARCHFLAGS) -DHAVE_STDC -DINCLUDES_ARE_ANSI \ -DAMIGA -DTWO_FILE_COMMANDLINE -DINCOMPLETE_TYPES_BROKEN \ ! -DNO_MKTEMP -DNEED_SIGNAL_CATCHER -DSHORTxSHORT_32 -DSTEG_SUPPORTED # -j104 disables warnings for mismatched const qualifiers # Link-time cc options: *************** *** 66,77 **** # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 66,77 ---- # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o bitsource.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o bitsink.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.lib LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 127,132 **** --- 127,134 ---- cmp testimg.jpg testout.jpg + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.o : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.o : jcarith.c jinclude.h jconfig.h jpegdata.h jccolor.o : jccolor.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.unix jsteg-v4/makefile.unix *** jpeg-v4/makefile.unix Mon Dec 7 15:26:52 1992 --- jsteg-v4/makefile.unix Thu May 20 21:57:18 1993 *************** *** 9,15 **** CC= cc # You may need to adjust these cc options: ! CFLAGS= -O # In particular: # Add -DBSD if on a pure BSD system (see jinclude.h). # Add -DVMS if on a VMS system (see ansi2knr.c). --- 9,15 ---- CC= cc # You may need to adjust these cc options: ! CFLAGS= -O -DSTEG_SUPPORTED # In particular: # Add -DBSD if on a pure BSD system (see jinclude.h). # Add -DVMS if on a VMS system (see ansi2knr.c). *************** *** 66,77 **** # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.a LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) --- 66,77 ---- # compression objectfiles CLIBOBJECTS= jcmaster.o jcdeflts.o jcarith.o jccolor.o jcexpand.o jchuff.o \ jcmcu.o jcpipe.o jcsample.o jfwddct.o jwrjfif.o jrdgif.o jrdppm.o \ ! jrdrle.o jrdtarga.o bitsource.o COBJECTS= jcmain.o $(CLIBOBJECTS) $(COMOBJECTS) # decompression objectfiles DLIBOBJECTS= jdmaster.o jddeflts.o jbsmooth.o jdarith.o jdcolor.o jdhuff.o \ jdmcu.o jdpipe.o jdsample.o jquant1.o jquant2.o jrevdct.o jrdjfif.o \ ! jwrgif.o jwrppm.o jwrrle.o jwrtarga.o bitsink.o DOBJECTS= jdmain.o $(DLIBOBJECTS) $(COMOBJECTS) # These objectfiles are included in libjpeg.a LIBOBJECTS= $(CLIBOBJECTS) $(DLIBOBJECTS) $(COMOBJECTS) *************** *** 131,136 **** --- 131,138 ---- cmp testimg.jpg testout.jpg + bitsink.o : bitsink.c bitsink.h + bitsource.o : bitsource.c bitsource.h jbsmooth.o : jbsmooth.c jinclude.h jconfig.h jpegdata.h jcarith.o : jcarith.c jinclude.h jconfig.h jpegdata.h jccolor.o : jccolor.c jinclude.h jconfig.h jpegdata.h diff -c -N jpeg-v4/makefile.vms jsteg-v4/makefile.vms *** jpeg-v4/makefile.vms Mon Dec 7 15:27:10 1992 --- jsteg-v4/makefile.vms Thu May 20 21:57:44 1993 *************** *** 8,15 **** $! $! Read SETUP instructions before running this!! $! ! $ DoCompile := CC /NoDebug /Optimize /Define = (TWO_FILE_COMMANDLINE,HAVE_STDC,INCLUDES_ARE_ANSI) $! $ DoCompile jcmain.c $ DoCompile jdmain.c $ DoCompile jcmaster.c --- 8,17 ---- $! $! Read SETUP instructions before running this!! $! ! $ DoCompile := CC /NoDebug /Optimize /Define = (TWO_FILE_COMMANDLINE,HAVE_STDC,INCLUDES_ARE_ANSI,STEG_SUPPORTED) $! + $ DoCompile bitsource.c + $ DoCompile bitsink.c $ DoCompile jcmain.c $ DoCompile jdmain.c $ DoCompile jcmaster.c *************** *** 56,62 **** jdarith.obj,jdcolor.obj,jdhuff.obj,jdmcu.obj,jdpipe.obj, - jdsample.obj,jquant1.obj,jquant2.obj,jrevdct.obj,jrdjfif.obj, - jwrgif.obj,jwrppm.obj,jwrrle.obj,jwrtarga.obj,jutils.obj, - ! jerror.obj,jmemmgr.obj,jmemsys.obj $! $ Link /Executable = cjpeg.exe jcmain.obj,libjpeg.olb/Library,Sys$Disk:[]MAKVMS.OPT/Option $! --- 58,64 ---- jdarith.obj,jdcolor.obj,jdhuff.obj,jdmcu.obj,jdpipe.obj, - jdsample.obj,jquant1.obj,jquant2.obj,jrevdct.obj,jrdjfif.obj, - jwrgif.obj,jwrppm.obj,jwrrle.obj,jwrtarga.obj,jutils.obj, - ! jerror.obj,jmemmgr.obj,jmemsys.obj,bitsource.obj,bitsink.obj $! $ Link /Executable = cjpeg.exe jcmain.obj,libjpeg.olb/Library,Sys$Disk:[]MAKVMS.OPT/Option $!