Doxygen Source Code Documentation
jmemdos.c File Reference
#include "jinclude.h"#include "jpeglib.h"#include "jmemsys.h"Go to the source code of this file.
| Data Structures | |
| struct | EMScontext | 
| union | EMSspec | 
| struct | XMScontext | 
| union | XMSPTR | 
| struct | XMSspec | 
| Defines | |
| #define | XMS_SUPPORTED 1 | 
| #define | EMS_SUPPORTED 1 | 
| #define | JPEG_INTERNALS | 
| #define | far_malloc(x) malloc(x) | 
| #define | far_free(x) free(x) | 
| #define | READ_BINARY "rb" | 
| #define | DEFAULT_MAX_MEM 300000L | 
| #define | ODD(X) (((X) & 1L) != 0) | 
| #define | FIELD_AT(spec, offset, type) (*((type *) &(spec.bytes[offset]))) | 
| #define | SRC_TYPE(spec) FIELD_AT(spec,4,char) | 
| #define | SRC_HANDLE(spec) FIELD_AT(spec,5,EMSH) | 
| #define | SRC_OFFSET(spec) FIELD_AT(spec,7,unsigned short) | 
| #define | SRC_PAGE(spec) FIELD_AT(spec,9,unsigned short) | 
| #define | SRC_PTR(spec) FIELD_AT(spec,7,EMSPTR) | 
| #define | DST_TYPE(spec) FIELD_AT(spec,11,char) | 
| #define | DST_HANDLE(spec) FIELD_AT(spec,12,EMSH) | 
| #define | DST_OFFSET(spec) FIELD_AT(spec,14,unsigned short) | 
| #define | DST_PAGE(spec) FIELD_AT(spec,16,unsigned short) | 
| #define | DST_PTR(spec) FIELD_AT(spec,14,EMSPTR) | 
| #define | EMSPAGESIZE 16384L | 
| #define | HIBYTE(W) (((W) >> 8) & 0xFF) | 
| #define | LOBYTE(W) ((W) & 0xFF) | 
| Typedefs | |
| typedef void far * | EMSPTR | 
| Functions | |
| void *malloc | JPP ((size_t size)) | 
| void free | JPP ((void *ptr)) | 
| char *getenv | JPP ((const char *name)) | 
| short far jdos_open | JPP ((short far *handle, char far *filename)) | 
| short far jdos_close | JPP ((short handle)) | 
| short far jdos_seek | JPP ((short handle, long offset)) | 
| short far jdos_read | JPP ((short handle, void far *buffer, unsigned short count)) | 
| void far jxms_getdriver | JPP ((XMSDRIVER far *)) | 
| void far jxms_calldriver | JPP ((XMSDRIVER, XMScontext far *)) | 
| short far jems_available | JPP ((void)) | 
| void far jems_calldriver | JPP ((EMScontext far *)) | 
| select_file_name (char *fname) | |
| jpeg_get_small (j_common_ptr cinfo, size_t sizeofobject) | |
| jpeg_free_small (j_common_ptr cinfo, void *object, size_t sizeofobject) | |
| jpeg_get_large (j_common_ptr cinfo, size_t sizeofobject) | |
| jpeg_free_large (j_common_ptr cinfo, void FAR *object, size_t sizeofobject) | |
| jpeg_mem_available (j_common_ptr cinfo, long min_bytes_needed, long max_bytes_needed, long already_allocated) | |
| read_file_store (j_common_ptr cinfo, backing_store_ptr info, void FAR *buffer_address, long file_offset, long byte_count) | |
| write_file_store (j_common_ptr cinfo, backing_store_ptr info, void FAR *buffer_address, long file_offset, long byte_count) | |
| close_file_store (j_common_ptr cinfo, backing_store_ptr info) | |
| open_file_store (j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed) | |
| read_xms_store (j_common_ptr cinfo, backing_store_ptr info, void FAR *buffer_address, long file_offset, long byte_count) | |
| write_xms_store (j_common_ptr cinfo, backing_store_ptr info, void FAR *buffer_address, long file_offset, long byte_count) | |
| close_xms_store (j_common_ptr cinfo, backing_store_ptr info) | |
| open_xms_store (j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed) | |
| read_ems_store (j_common_ptr cinfo, backing_store_ptr info, void FAR *buffer_address, long file_offset, long byte_count) | |
| write_ems_store (j_common_ptr cinfo, backing_store_ptr info, void FAR *buffer_address, long file_offset, long byte_count) | |
| close_ems_store (j_common_ptr cinfo, backing_store_ptr info) | |
| open_ems_store (j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed) | |
| jpeg_open_backing_store (j_common_ptr cinfo, backing_store_ptr info, long total_bytes_needed) | |
| jpeg_mem_init (j_common_ptr cinfo) | |
| jpeg_mem_term (j_common_ptr cinfo) | |
| Variables | |
| You forgot to define USE_MSDOS_MEMMGR in jconfig h MAX_ALLOC_CHUNK should be less than K typedef void far * | XMSDRIVER | 
| int | next_file_num | 
| XMSDRIVER | xms_driver | 
Define Documentation
| 
 | 
| 
 Definition at line 204 of file jmemdos.c. Referenced by jpeg_mem_init(). | 
| 
 | 
| 
 Definition at line 479 of file jmemdos.c. Referenced by read_ems_store(), and write_ems_store(). | 
| 
 | 
| 
 Definition at line 480 of file jmemdos.c. Referenced by write_ems_store(). | 
| 
 | 
| 
 Definition at line 481 of file jmemdos.c. Referenced by write_ems_store(). | 
| 
 | 
| 
 Definition at line 482 of file jmemdos.c. Referenced by read_ems_store(). | 
| 
 | 
| 
 Definition at line 478 of file jmemdos.c. Referenced by read_ems_store(), and write_ems_store(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 484 of file jmemdos.c. Referenced by open_ems_store(), read_ems_store(), and write_ems_store(). | 
| 
 | 
| 
 Definition at line 70 of file jmemdos.c. Referenced by jpeg_free_large(). | 
| 
 | 
| 
 Definition at line 69 of file jmemdos.c. Referenced by jpeg_get_large(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 486 of file jmemdos.c. Referenced by open_ems_store(), read_ems_store(), and write_ems_store(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 487 of file jmemdos.c. Referenced by open_ems_store(). | 
| 
 | 
| 
 Definition at line 329 of file jmemdos.c. Referenced by read_xms_store(), and write_xms_store(). | 
| 
 | 
| 
 Definition at line 77 of file jmemdos.c. Referenced by select_file_name(). | 
| 
 | 
| 
 Definition at line 474 of file jmemdos.c. Referenced by read_ems_store(), and write_ems_store(). | 
| 
 | 
| 
 Definition at line 475 of file jmemdos.c. Referenced by read_ems_store(). | 
| 
 | 
| 
 Definition at line 476 of file jmemdos.c. Referenced by read_ems_store(). | 
| 
 | 
| 
 Definition at line 477 of file jmemdos.c. Referenced by write_ems_store(). | 
| 
 | 
| 
 Definition at line 473 of file jmemdos.c. Referenced by read_ems_store(), and write_ems_store(). | 
| 
 | 
| 
 | 
Typedef Documentation
| 
 | 
| 
 | 
Function Documentation
| 
 | ||||||||||||
| 
 Definition at line 541 of file jmemdos.c. References EMScontext::ax, EMScontext::dx, far, and TRACEMS1. Referenced by open_ems_store(). 
 00542 {
00543   EMScontext ctx;
00544 
00545   ctx.ax = 0x4500;
00546   ctx.dx = info->handle.ems_handle;
00547   jems_calldriver((EMScontext far *) & ctx);
00548   TRACEMS1(cinfo, 1, JTRC_EMS_CLOSE, info->handle.ems_handle);
00549   /* we ignore any error return from the driver */
00550 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 275 of file jmemdos.c. References backing_store_struct::temp_name, and TRACEMSS. Referenced by open_file_store(). 
 00276 {
00277   jdos_close(info->handle.file_handle); /* close the file */
00278   remove(info->temp_name);      /* delete the file */
00279 /* If your system doesn't have remove(), try unlink() instead.
00280  * remove() is the ANSI-standard name for this function, but
00281  * unlink() was more common in pre-ANSI systems.
00282  */
00283   TRACEMSS(cinfo, 1, JTRC_TFILE_CLOSE, info->temp_name);
00284 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 401 of file jmemdos.c. References XMScontext::ax, XMScontext::dx, far, TRACEMS1, and xms_driver. Referenced by open_xms_store(). 
 00402 {
00403   XMScontext ctx;
00404 
00405   ctx.dx = info->handle.xms_handle;
00406   ctx.ax = 0x0a00;
00407   jxms_calldriver(xms_driver, (XMScontext far *) & ctx);
00408   TRACEMS1(cinfo, 1, JTRC_XMS_CLOSE, info->handle.xms_handle);
00409   /* we ignore any error return from the driver */
00410 }
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 189 of file jmemdos.c. References far_free, object, and sizeofobject. 
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 172 of file jmemdos.c. References free, object, and sizeofobject. 
 | 
| 
 | ||||||||||||
| 
 Definition at line 183 of file jmemdos.c. References far_malloc, and sizeofobject. 
 00184 {
00185   return (void FAR *) far_malloc(sizeofobject);
00186 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 166 of file jmemdos.c. References malloc, and sizeofobject. 
 00167 {
00168   return (void *) malloc(sizeofobject);
00169 }
 | 
| 
 | ||||||||||||||||||||
| 
 Definition at line 208 of file jmemdos.c. References already_allocated, max_bytes_needed, and min_bytes_needed. 
 00210 {
00211   return cinfo->mem->max_memory_to_use - already_allocated;
00212 }
 | 
| 
 | 
| 
 Definition at line 623 of file jmemdos.c. References DEFAULT_MAX_MEM, and next_file_num. 
 00624 {
00625   next_file_num = 0;            /* initialize temp file name generator */
00626   return DEFAULT_MAX_MEM;       /* default for max_memory_to_use */
00627 }
 | 
| 
 | 
| 
 Definition at line 630 of file jmemdos.c. 
 00631 {
00632   /* Microsoft C, at least in v6.00A, will not successfully reclaim freed
00633    * blocks of size > 32Kbytes unless we give it a kick in the rear, like so:
00634    */
00635 #ifdef NEED_FHEAPMIN
00636   _fheapmin();
00637 #endif
00638 }
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 599 of file jmemdos.c. References ERREXITS, open_ems_store(), open_file_store(), open_xms_store(), and total_bytes_needed. 
 00601 {
00602   /* Try extended memory, then expanded memory, then regular file. */
00603 #if XMS_SUPPORTED
00604   if (open_xms_store(cinfo, info, total_bytes_needed))
00605     return;
00606 #endif
00607 #if EMS_SUPPORTED
00608   if (open_ems_store(cinfo, info, total_bytes_needed))
00609     return;
00610 #endif
00611   if (open_file_store(cinfo, info, total_bytes_needed))
00612     return;
00613   ERREXITS(cinfo, JERR_TFILE_CREATE, "");
00614 }
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 554 of file jmemdos.c. References EMScontext::ax, EMScontext::bx, close_ems_store(), EMScontext::dx, EMSPAGESIZE, far, HIBYTE, L, LOBYTE, read_ems_store(), total_bytes_needed, TRACEMS1, and write_ems_store(). Referenced by jpeg_open_backing_store(). 
 00556 {
00557   EMScontext ctx;
00558 
00559   /* Is EMS driver there? */
00560   if (! jems_available())
00561     return FALSE;
00562 
00563   /* Get status, make sure EMS is OK */
00564   ctx.ax = 0x4000;
00565   jems_calldriver((EMScontext far *) & ctx);
00566   if (HIBYTE(ctx.ax) != 0)
00567     return FALSE;
00568 
00569   /* Get version, must be >= 4.0 */
00570   ctx.ax = 0x4600;
00571   jems_calldriver((EMScontext far *) & ctx);
00572   if (HIBYTE(ctx.ax) != 0 || LOBYTE(ctx.ax) < 0x40)
00573     return FALSE;
00574 
00575   /* Try to allocate requested space */
00576   ctx.ax = 0x4300;
00577   ctx.bx = (unsigned short) ((total_bytes_needed + EMSPAGESIZE-1L) / EMSPAGESIZE);
00578   jems_calldriver((EMScontext far *) & ctx);
00579   if (HIBYTE(ctx.ax) != 0)
00580     return FALSE;
00581 
00582   /* Succeeded, save the handle and away we go */
00583   info->handle.ems_handle = ctx.dx;
00584   info->read_backing_store = read_ems_store;
00585   info->write_backing_store = write_ems_store;
00586   info->close_backing_store = close_ems_store;
00587   TRACEMS1(cinfo, 1, JTRC_EMS_OPEN, ctx.dx);
00588   return TRUE;                  /* succeeded */
00589 }
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 288 of file jmemdos.c. References close_file_store(), ERREXITS, far, read_file_store(), select_file_name(), backing_store_struct::temp_name, total_bytes_needed, TRACEMSS, and write_file_store(). Referenced by jpeg_open_backing_store(). 
 00290 {
00291   short handle;
00292 
00293   select_file_name(info->temp_name);
00294   if (jdos_open((short far *) & handle, (char far *) info->temp_name)) {
00295     /* might as well exit since jpeg_open_backing_store will fail anyway */
00296     ERREXITS(cinfo, JERR_TFILE_CREATE, info->temp_name);
00297     return FALSE;
00298   }
00299   info->handle.file_handle = handle;
00300   info->read_backing_store = read_file_store;
00301   info->write_backing_store = write_file_store;
00302   info->close_backing_store = close_file_store;
00303   TRACEMSS(cinfo, 1, JTRC_TFILE_OPEN, info->temp_name);
00304   return TRUE;                  /* succeeded */
00305 }
 | 
| 
 | ||||||||||||||||
| 
 Definition at line 414 of file jmemdos.c. References XMScontext::ax, close_xms_store(), XMScontext::dx, far, L, read_xms_store(), total_bytes_needed, TRACEMS1, write_xms_store(), xms_driver, and XMSDRIVER. Referenced by jpeg_open_backing_store(). 
 00416 {
00417   XMScontext ctx;
00418 
00419   /* Get address of XMS driver */
00420   jxms_getdriver((XMSDRIVER far *) & xms_driver);
00421   if (xms_driver == NULL)
00422     return FALSE;               /* no driver to be had */
00423 
00424   /* Get version number, must be >= 2.00 */
00425   ctx.ax = 0x0000;
00426   jxms_calldriver(xms_driver, (XMScontext far *) & ctx);
00427   if (ctx.ax < (unsigned short) 0x0200)
00428     return FALSE;
00429 
00430   /* Try to get space (expressed in kilobytes) */
00431   ctx.dx = (unsigned short) ((total_bytes_needed + 1023L) >> 10);
00432   ctx.ax = 0x0900;
00433   jxms_calldriver(xms_driver, (XMScontext far *) & ctx);
00434   if (ctx.ax != 1)
00435     return FALSE;
00436 
00437   /* Succeeded, save the handle and away we go */
00438   info->handle.xms_handle = ctx.dx;
00439   info->read_backing_store = read_xms_store;
00440   info->write_backing_store = write_xms_store;
00441   info->close_backing_store = close_xms_store;
00442   TRACEMS1(cinfo, 1, JTRC_XMS_OPEN, ctx.dx);
00443   return TRUE;                  /* succeeded */
00444 }
 | 
| 
 | ||||||||||||||||||||||||
| 
 Definition at line 491 of file jmemdos.c. References EMScontext::ax, EMScontext::ds_si, DST_HANDLE, DST_PTR, DST_TYPE, EMSPAGESIZE, ERREXIT, far, HIBYTE, EMSspec::length, SRC_HANDLE, SRC_OFFSET, SRC_PAGE, and SRC_TYPE. Referenced by open_ems_store(). 
 00494 {
00495   EMScontext ctx;
00496   EMSspec spec;
00497 
00498   spec.length = byte_count;
00499   SRC_TYPE(spec) = 1;
00500   SRC_HANDLE(spec) = info->handle.ems_handle;
00501   SRC_PAGE(spec)   = (unsigned short) (file_offset / EMSPAGESIZE);
00502   SRC_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE);
00503   DST_TYPE(spec) = 0;
00504   DST_HANDLE(spec) = 0;
00505   DST_PTR(spec)    = buffer_address;
00506   
00507   ctx.ds_si = (void far *) & spec;
00508   ctx.ax = 0x5700;              /* move memory region */
00509   jems_calldriver((EMScontext far *) & ctx);
00510   if (HIBYTE(ctx.ax) != 0)
00511     ERREXIT(cinfo, JERR_EMS_READ);
00512 }
 | 
| 
 | ||||||||||||||||||||||||
| 
 Definition at line 243 of file jmemdos.c. Referenced by open_file_store(). 
 00246 {
00247   if (jdos_seek(info->handle.file_handle, file_offset))
00248     ERREXIT(cinfo, JERR_TFILE_SEEK);
00249   /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */
00250   if (byte_count > 65535L)      /* safety check */
00251     ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK);
00252   if (jdos_read(info->handle.file_handle, buffer_address,
00253                 (unsigned short) byte_count))
00254     ERREXIT(cinfo, JERR_TFILE_READ);
00255 }
 | 
| 
 | ||||||||||||||||||||||||
| 
 Definition at line 333 of file jmemdos.c. References XMScontext::ax, XMScontext::ds_si, XMSspec::dst, XMSspec::dst_handle, ERREXIT, far, L, XMSspec::length, ODD, XMSPTR::offset, XMSPTR::ptr, XMSspec::src, XMSspec::src_handle, and xms_driver. Referenced by open_xms_store(), and write_xms_store(). 
 00336 {
00337   XMScontext ctx;
00338   XMSspec spec;
00339   char endbuffer[2];
00340 
00341   /* The XMS driver can't cope with an odd length, so handle the last byte
00342    * specially if byte_count is odd.  We don't expect this to be common.
00343    */
00344 
00345   spec.length = byte_count & (~ 1L);
00346   spec.src_handle = info->handle.xms_handle;
00347   spec.src.offset = file_offset;
00348   spec.dst_handle = 0;
00349   spec.dst.ptr = buffer_address;
00350   
00351   ctx.ds_si = (void far *) & spec;
00352   ctx.ax = 0x0b00;              /* EMB move */
00353   jxms_calldriver(xms_driver, (XMScontext far *) & ctx);
00354   if (ctx.ax != 1)
00355     ERREXIT(cinfo, JERR_XMS_READ);
00356 
00357   if (ODD(byte_count)) {
00358     read_xms_store(cinfo, info, (void FAR *) endbuffer,
00359                    file_offset + byte_count - 1L, 2L);
00360     ((char FAR *) buffer_address)[byte_count - 1L] = endbuffer[0];
00361   }
00362 }
 | 
| 
 | 
| 
 Definition at line 128 of file jmemdos.c. References getenv(), next_file_num, and READ_BINARY. 
 00129 {
00130   const char * env;
00131   char * ptr;
00132   FILE * tfile;
00133 
00134   /* Keep generating file names till we find one that's not in use */
00135   for (;;) {
00136     /* Get temp directory name from environment TMP or TEMP variable;
00137      * if none, use "."
00138      */
00139     if ((env = (const char *) getenv("TMP")) == NULL)
00140       if ((env = (const char *) getenv("TEMP")) == NULL)
00141         env = ".";
00142     if (*env == '\0')           /* null string means "." */
00143       env = ".";
00144     ptr = fname;                /* copy name to fname */
00145     while (*env != '\0')
00146       *ptr++ = *env++;
00147     if (ptr[-1] != '\\' && ptr[-1] != '/')
00148       *ptr++ = '\\';            /* append backslash if not in env variable */
00149     /* Append a suitable file name */
00150     next_file_num++;            /* advance counter */
00151     sprintf(ptr, "JPG%03d.TMP", next_file_num);
00152     /* Probe to see if file name is already in use */
00153     if ((tfile = fopen(fname, READ_BINARY)) == NULL)
00154       break;
00155     fclose(tfile);              /* oops, it's there; close tfile & try again */
00156   }
00157 }
 | 
| 
 | ||||||||||||||||||||||||
| 
 Definition at line 516 of file jmemdos.c. References EMScontext::ax, EMScontext::ds_si, DST_HANDLE, DST_OFFSET, DST_PAGE, DST_TYPE, EMSPAGESIZE, ERREXIT, far, HIBYTE, EMSspec::length, SRC_HANDLE, SRC_PTR, and SRC_TYPE. Referenced by open_ems_store(). 
 00519 {
00520   EMScontext ctx;
00521   EMSspec spec;
00522 
00523   spec.length = byte_count;
00524   SRC_TYPE(spec) = 0;
00525   SRC_HANDLE(spec) = 0;
00526   SRC_PTR(spec)    = buffer_address;
00527   DST_TYPE(spec) = 1;
00528   DST_HANDLE(spec) = info->handle.ems_handle;
00529   DST_PAGE(spec)   = (unsigned short) (file_offset / EMSPAGESIZE);
00530   DST_OFFSET(spec) = (unsigned short) (file_offset % EMSPAGESIZE);
00531   
00532   ctx.ds_si = (void far *) & spec;
00533   ctx.ax = 0x5700;              /* move memory region */
00534   jems_calldriver((EMScontext far *) & ctx);
00535   if (HIBYTE(ctx.ax) != 0)
00536     ERREXIT(cinfo, JERR_EMS_WRITE);
00537 }
 | 
| 
 | ||||||||||||||||||||||||
| 
 Definition at line 259 of file jmemdos.c. References ERREXIT, JERR_TFILE_WRITE, and L. Referenced by open_file_store(). 
 00262 {
00263   if (jdos_seek(info->handle.file_handle, file_offset))
00264     ERREXIT(cinfo, JERR_TFILE_SEEK);
00265   /* Since MAX_ALLOC_CHUNK is less than 64K, byte_count will be too. */
00266   if (byte_count > 65535L)      /* safety check */
00267     ERREXIT(cinfo, JERR_BAD_ALLOC_CHUNK);
00268   if (jdos_write(info->handle.file_handle, buffer_address,
00269                  (unsigned short) byte_count))
00270     ERREXIT(cinfo, JERR_TFILE_WRITE);
00271 }
 | 
| 
 | ||||||||||||||||||||||||
| 
 Definition at line 366 of file jmemdos.c. References XMScontext::ax, XMScontext::ds_si, XMSspec::dst, XMSspec::dst_handle, ERREXIT, far, L, XMSspec::length, ODD, XMSPTR::offset, XMSPTR::ptr, read_xms_store(), XMSspec::src, XMSspec::src_handle, and xms_driver. Referenced by open_xms_store(). 
 00369 {
00370   XMScontext ctx;
00371   XMSspec spec;
00372   char endbuffer[2];
00373 
00374   /* The XMS driver can't cope with an odd length, so handle the last byte
00375    * specially if byte_count is odd.  We don't expect this to be common.
00376    */
00377 
00378   spec.length = byte_count & (~ 1L);
00379   spec.src_handle = 0;
00380   spec.src.ptr = buffer_address;
00381   spec.dst_handle = info->handle.xms_handle;
00382   spec.dst.offset = file_offset;
00383 
00384   ctx.ds_si = (void far *) & spec;
00385   ctx.ax = 0x0b00;              /* EMB move */
00386   jxms_calldriver(xms_driver, (XMScontext far *) & ctx);
00387   if (ctx.ax != 1)
00388     ERREXIT(cinfo, JERR_XMS_WRITE);
00389 
00390   if (ODD(byte_count)) {
00391     read_xms_store(cinfo, info, (void FAR *) endbuffer,
00392                    file_offset + byte_count - 1L, 2L);
00393     endbuffer[0] = ((char FAR *) buffer_address)[byte_count - 1L];
00394     write_xms_store(cinfo, info, (void FAR *) endbuffer,
00395                     file_offset + byte_count - 1L, 2L);
00396   }
00397 }
 | 
Variable Documentation
| 
 | 
| 
 Definition at line 125 of file jmemdos.c. Referenced by jpeg_mem_init(), and select_file_name(). | 
| 
 | 
| 
 Definition at line 314 of file jmemdos.c. Referenced by close_xms_store(), open_xms_store(), read_xms_store(), and write_xms_store(). | 
| 
 | 
| 
 Definition at line 97 of file jmemdos.c. Referenced by open_xms_store(). | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  