home *** CD-ROM | disk | FTP | other *** search
- /**********************************************************/
- /**********************************************************/
- /*** ***/
- /*** Program name: MEMLAB2.EXE ***/
- /*** ***/
- /*** Created : 7. May 1990 ***/
- /*** ***/
- /*** Author : Bo Falkenberg ***/
- /*** ***/
- /*** Revised : February, 1992 by Darryl Frost ***/
- /*** ***/
- /*** Purpose : To demonstrate the different types ***/
- /*** of memory allocation. ***/
- /*** ***/
- /*** Compile : icc /W2 memlab2.c ***/
- /*** ***/
- /*** Execute : memlab2 (no commandline parameters) ***/
- /*** ***/
- /*** Input param : 1. Amount of memory in Kb ***/
- /*** 2. Type of memory allocation. ***/
- /*** 3. Type of memory usage ***/
- /*** ***/
- /**********************************************************/
- /**********************************************************/
-
- /**********************************************************/
- /*** DEFINES ***/
- /**********************************************************/
- #define INCL_DOSMEMMGR
-
- /**********************************************************/
- /*** INCLUDE ***/
- /**********************************************************/
- #include <os2.h>
- #include <stdio.h>
- #include <stdlib.h>
-
- /**********************************************************/
- /*** FUNCTION PROTOTYPES ***/
- /**********************************************************/
- void main(int argc, char *argv[], char *envp[]);
-
- /**********************************************************/
- /*** MAIN PROGRAM ***/
- /**********************************************************/
- void main(int argc, char *argv[], char *envp[])
- { /*******************************************/
- PULONG pulBlock; /* pointer to the starting memory location */
- ULONG ulErr; /* error variable */
- ULONG ulLoop; /* loop variable */
- ULONG ulAmount; /* amount of memory to be allocated */
- ULONG ulSelection; /* input selection */
- char cLetter; /* input char */
- BOOL OK = TRUE; /* memory check indicator */
- /*******************************************/
-
- setbuf(stdout, NULL);
-
- /* Read the parameters */
- /* 1. Amount of memory in Kbytes to be allocated */
- /* 2. Combination of allocation flags */
- /* 3. Whether data should read from or written */
- /* the memory. */
- printf("How much memory (in Kb) do you want to allocate : ");
- scanf("%u", &ulAmount);
- ulAmount = ulAmount * 1024;
-
- printf("\nWhat type of memory allocation do you want: \n");
- printf(" 1. PAG_COMMIT and PAG_READ\n");
- printf(" 2. PAG_COMMIT and PAG_WRITE\n");
- printf(" 3. PAG_COMMIT and PAG_EXECUTE\n");
- printf(" 4. PAG_COMMIT and PAG_GUARD and PAG_WRITE\n");
- printf(" 5. PAG_WRITE\n");
- printf("Enter your selection (1, 2, 3, 4 or 5 ) : ");
- scanf("%u", &ulSelection);
-
- printf("\nDo you want to Read or Write in the memory (R/W) : ");
- fflush(stdin);
- scanf("%c", &cLetter);
- /* Allocate the memory */
- switch (ulSelection)
- {
- case 1:
- ulErr = DosAllocMem ((PPVOID)&pulBlock, ulAmount,
- PAG_COMMIT | PAG_READ);
- break;
- case 2:
- ulErr = DosAllocMem ((PPVOID)&pulBlock, ulAmount,
- PAG_COMMIT | PAG_WRITE);
- break;
- case 3:
- ulErr = DosAllocMem ((PPVOID)&pulBlock, ulAmount,
- PAG_COMMIT | PAG_EXECUTE);
- break;
- case 4:
- ulErr = DosAllocMem ((PPVOID)&pulBlock, ulAmount,
- PAG_COMMIT | PAG_GUARD | PAG_WRITE);
- break;
- case 5:
- ulErr = DosAllocMem ((PPVOID)&pulBlock, ulAmount,
- PAG_WRITE);
- break;
- default:
- printf("\nYou made a WRONG selection !!!\n");
- exit (0);
- } /* endswitch */
-
- if (ulErr != 0) {
- printf("Error in allocation : code %u\n", ulErr);
- exit(1);
- } /* endif */
-
- if (cLetter == 'W' || cLetter == 'w')
- {
- /* insert data into allocated memory */
- printf("\nWriting...\n");
- for (ulLoop = 0; ulLoop < ulAmount/4; ulLoop++)
- {
- *(pulBlock + ulLoop) = 7;
- } /* endfor */
- } else
- {
- /* read data from allocated memory */
- printf("\nReading...\n");
- for (ulLoop = 0; ulLoop < ulAmount/4; ulLoop++)
- {
- if (*(pulBlock + ulLoop) != 7)
- {
- OK = FALSE;
- } /* endif */
- } /* endfor */
- } /* endif */
-
- ulErr = DosFreeMem (pulBlock);
- if (ulErr != 0)
- {
- printf("\nError in freeing : code %u\n", ulErr);
- } /* endif */
- }