Annotation of os2sdk/demos/examples/huge/huge.c, revision 1.1

1.1     ! root        1: /* This example illustrates allocating a huge segment, addressing
        !             2:  * the segment, growing & shrinking the segment and freeing the
        !             3:  * segment. The following 286DOS functions are illustrated here:
        !             4:  *     DOSALLOCHUGE, DOSREALLOCHUGE, DOSFREESEG
        !             5:  *
        !             6:  * This example allocates a huge segment. It writes a value to one of the
        !             7:  * words in the huge segment. It grows the segment and then shrinks the
        !             8:  * segment back to its original size. It then checks if the segment contains 
        !             9:  * the value that was written previously. If not, it prints an error message. 
        !            10:  * It then frees the huge segment. This example is intended to illustrate
        !            11:  * how to manage and access huge segments - it doesn't perform any useful
        !            12:  * function.
        !            13:  *
        !            14:  * Copyright (C) Microsoft Corp. 1986
        !            15:  */    
        !            16: 
        !            17: #include       <doscalls.h>    /* contains CP/DOS function declarations     */
        !            18: #include       <dos.h>         /* contains FP_SEG and FP_OFF macros         */
        !            19: 
        !            20: /* used in DOSALLOCHUGE call  */
        !            21: #define NUMSEGA 3              /* number of segments in huge segment        */
        !            22: #define SIZEA  8000            /* number of bytes in last segment           */
        !            23: #define PRIVATE 0              /* huge segment will not be shared           */
        !            24: #define MAXSEGS 6              /* max number of 64k segments in huge segment*/
        !            25: #define        WORDA   35000           /* a word in segment 2 in huge segment        */
        !            26: #define VALUEA  15             /* value to write into WORDA                 */
        !            27: 
        !            28: /* used in DOSREALLOCHUGE call (growing the segment) */
        !            29: #define        NUMSEGR 5               /* number of segments in huge segment        */
        !            30: #define SIZER   12000          /* number of bytes in last segment           */
        !            31: 
        !            32: main ()
        !            33: {
        !            34:        unsigned        FirstSelector;  /* first selector for huge segment */
        !            35:        int /*huge*/    *HugeSeg;       /* pointer to a huge segment       */
        !            36: 
        !            37:        /* allocate a huge segment */
        !            38:        DOSALLOCHUGE (NUMSEGA, SIZEA, &FirstSelector, MAXSEGS, PRIVATE);
        !            39: 
        !            40:        /* compute the address to the huge segment */
        !            41:        FP_SEG(HugeSeg) = FirstSelector;
        !            42:        FP_OFF(HugeSeg) = 0;
        !            43:        HugeSeg[WORDA] = VALUEA;
        !            44: 
        !            45:        /* grow the huge segment */
        !            46:         DOSREALLOCHUGE (NUMSEGR, SIZER, FirstSelector);
        !            47: 
        !            48:        /* shrink the huge segment to its orginal size */
        !            49:         DOSREALLOCHUGE (NUMSEGA, SIZEA, FirstSelector);
        !            50: 
        !            51:        /* WORDA should still contain VALUEA */
        !            52:        if (HugeSeg[WORDA] != VALUEA)
        !            53:           printf ("*** error: unexpected value in huge segment ***\n");
        !            54: 
        !            55:         DOSFREESEG (FirstSelector);    /* free the huge segment */
        !            56: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.