integer iVar1, iVar2 ;Integer variables in data structure long lVar1, lVar2 ;Long variables in data structure string sVar1, sVar2 ;String variables in data structure float fVar1, fVar2 ;Float variables in data structure proc main integer iMemID = 0 ;Memory ID integer iMemSize ;Holds total size required for data structure integer iEvent ;Used for dialogbox events string Var1, Var2, Var3, Var4, Var5, Var6 ;Temporary variables used in dialogbox iMemSize = sizeof(iVar1)*2 + sizeof(lVar1)*2 + sizeof(fVar1)*2 + 256 + 256 ;Compute size of necessary memory block, strings can be up to 256 bytes in length if memalloc iMemID iMemSize ;If memory allocated successfully memset iMemID 0 0 iMemSize ;Zero memory dialogbox 0 8 19 216 161 130 "Enter values" editbox 1 48 16 48 13 Var1 editbox 2 48 48 48 13 Var2 editbox 3 48 75 48 13 Var3 editbox 4 48 107 48 13 Var4 editbox 5 149 16 48 13 Var5 editbox 6 149 48 48 13 Var6 editbox 7 149 74 48 13 sVar1 editbox 8 149 107 48 13 sVar2 text 9 10 18 30 11 "Integer 1" left text 10 10 50 30 11 "Integer 2" left text 11 10 77 30 11 "Long 1" left text 12 10 109 30 11 "Long 2" left text 13 106 18 30 11 "Float 1" left text 14 106 50 30 11 "Float 2" left text 15 106 77 30 11 "String 1" left text 16 106 109 30 11 "String 2" left pushbutton 32 80 136 56 16 "OK" OK enddialog while 1 dlgevent 0 iEvent switch iEvent case 32 ;OK button pressed exitwhile endcase endswitch endwhile atoi Var1 iVar1 ;Convert string to integer atoi Var2 iVar2 ;Convert string to integer atol Var3 lVar1 ;Convert string to long atol Var4 lVar2 ;Convert string to long atof Var5 fVar1 ;Convert string to float atof Var6 fVar2 ;Convert string to float else errormsg "Failed to allocate memory!" ;Display error message exit endif AccessMem(iMemID, "W", 0) ;Write first integer to memory AccessMem(iMemID, "W", 1) ;Write second integer to memory AccessMem(iMemID, "W", 2) ;Write first long to memory AccessMem(iMemID, "W", 3) ;Write second long to memory AccessMem(iMemID, "W", 4) ;Write first float to memory AccessMem(iMemID, "W", 5) ;Write second float to memory AccessMem(iMemID, "W", 6) ;Write first string to memory AccessMem(iMemID, "W", 7) ;Write second string to memory iVar1 = 0 ;Set all variables to zero iVar2 = 0 ;Before retrieving from memory lVar1 = 0 lVar2 = 0 fVar1 = 0 fVar2 = 0 sVar1 = "" sVar2 = "" AccessMem(iMemID, "R", 7) ;Read second string from memory AccessMem(iMemID, "R", 6) ;Read first string from memory AccessMem(iMemID, "R", 5) ;Read second float from memory AccessMem(iMemID, "R", 4) ;Read first float from memory AccessMem(iMemID, "R", 3) ;Read second long from memory AccessMem(iMemID, "R", 2) ;Read first long from memory AccessMem(iMemID, "R", 1) ;Read second integer from memory AccessMem(iMemID, "R", 0) ;Read first integer from memory usermsg "First integer = %d, second integer = %d" iVar1 iVar2 usermsg "First long = %ld, second long = %ld" lVar1 lVar2 usermsg "First float = %f, second float = %f" fVar1 fVar2 usermsg "First string = %s, second string = %s" sVar1, sVar2 memfree iMemID ;Free memory endproc proc AccessMem ;Reads or writes specified member of data structure param integer iMemID ;Memory block ID param string sReadWrite ;Flag to determine if memory is read or written param integer iStructIndex ;Number of the variable in the overall structure (zero-based) integer iMemIndex = 0 ;Index into data structure switch sReadWrite ;Check if value is to be written to or read from memory case "R" switch iStructIndex case 0 memread iMemID iMemIndex iVar1 ;Read first integer from memory endcase case 1 iMemIndex = sizeof(iVar1) ;Account for first integer in structure memread iMemID iMemIndex iVar2 ;Read second integer from memory endcase case 2 iMemIndex = 2 * sizeof(iVar2) ;Account for first two integers in structure and so on memread iMemID iMemIndex lVar1 ;Read first long from memory endcase case 3 iMemIndex = 2 * sizeof(iVar1) + sizeof(lVar1) memread iMemID iMemIndex lVar2 ;Read second long from memory endcase case 4 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) memread iMemID iMemIndex fVar1 ;Read first float from memory endcase case 5 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + sizeof(fVar1) memread iMemID iMemIndex fVar2 ;Read second float from memory endcase case 6 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) memread iMemID iMemIndex sVar1 256 ;Read first string from memory endcase case 7 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) + 256 memread iMemID iMemIndex sVar2 256 ;Read second string from memory endcase case -1 ;Read all values from memory memread iMemID iMemIndex iVar1 ;Read first integer from memory iMemIndex = sizeof(iVar1) ;Account for first integer in structure memread iMemID iMemIndex iVar2 ;Read second integer from memory iMemIndex = 2 * sizeof(iVar2) ;Account for first two integers in structure and so on memread iMemID iMemIndex lVar1 ;Read first long from memory iMemIndex = 2 * sizeof(iVar1) + sizeof(lVar1) memread iMemID iMemIndex lVar2 ;Read second long from memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) memread iMemID iMemIndex fVar1 ;Read first float from memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + sizeof(fVar1) memread iMemID iMemIndex fVar2 ;Read second float from memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) memread iMemID iMemIndex sVar1 256 ;Read first string from memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) + 256 memread iMemID iMemIndex sVar2 256 ;Read second string from memory endcase default errormsg "Incorrect structure index!" endcase endswitch endcase case "W" switch iStructIndex case 0 memwrite iMemID iMemIndex iVar1 ;Write first integer to memory endcase case 1 iMemIndex = sizeof(iVar1) ;Account for first integer in structure memwrite iMemID iMemIndex iVar2 ;Write second integer to memory endcase case 2 iMemIndex = 2 * sizeof(iVar2) ;Account for first two integers in structure and so on memwrite iMemID iMemIndex lVar1 ;Write first long to memory endcase case 3 iMemIndex = 2 * sizeof(iVar1) + sizeof(lVar1) memwrite iMemID iMemIndex lVar2 ;Write second long to memory endcase case 4 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) memwrite iMemID iMemIndex fVar1 ;Write first float to memory endcase case 5 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + sizeof(fVar1) memwrite iMemID iMemIndex fVar2 ;Write second float to memory endcase case 6 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) memwrite iMemID iMemIndex sVar1 256 ;Write first string to memory endcase case 7 iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) + 256 memwrite iMemID iMemIndex sVar2 256 ;Write second string to memory endcase case -1 ;Write all values to memory memwrite iMemID iMemIndex iVar1 ;Write first integer to memory iMemIndex = sizeof(iVar1) ;Account for first integer in structure memwrite iMemID iMemIndex iVar2 ;Write second integer to memory iMemIndex = 2 * sizeof(iVar2) ;Account for first two integers in structure and so on memwrite iMemID iMemIndex lVar1 ;Write first long to memory iMemIndex = 2 * sizeof(iVar1) + sizeof(lVar1) memwrite iMemID iMemIndex lVar2 ;Write second long to memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) memwrite iMemID iMemIndex fVar1 ;Write first float to memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + sizeof(fVar1) memwrite iMemID iMemIndex fVar2 ;Write second float to memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) memwrite iMemID iMemIndex sVar1 256 ;Write first string to memory iMemIndex = 2 * sizeof(iVar1) + 2 * sizeof(lVar2) + 2 * sizeof(fVar1) + 256 memwrite iMemID iMemIndex sVar2 256 ;Write second string to memory endcase default errormsg "Incorrect structure index!" endcase endswitch endcase default ;Unexpected parameter value usermsg "Incorrect flag!" exit endcase endswitch endproc