proc main integer iMemID = 0 ;Memory ID integer iMemSize ;Holds total size required for data structure integer iEvent ;Used for dialogbox events 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 string Var1, Var2, Var3, Var4, Var5, Var6 ;Temporary variables used in dialogbox string sMem ;String to store/retrieve from memory integer iLen ;Holds length of converted float value iMemSize = 11 + 11 + 11 + 11 + 11 + 11 + 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 itoa iVar1 sMem ;Convert first integer to string value AccessMem(iMemID, 0, "W", sMem) ;Write first integer value to memory itoa iVar2 sMem ;Convert second integer to string value AccessMem(iMemID, 1, "W", sMem) ;Write second integer value to memory ltoa lVar1 sMem ;Convert first long to string value AccessMem(iMemID, 2, "W", sMem) ;Write first long value to memory ltoa lVar2 sMem ;Convert second long to string value AccessMem(iMemID, 3, "W", sMem) ;Write second long value to memory ftoa fVar1 sMem ;Convert first float to string value strlen sMem iLen ;Get length of converted float if iLen > 11 ;If converted float is greater than 11 characters substr sMem sMem 0 11 ;Then truncate at 11 characters to prevent overwriting values in memory block endif AccessMem(iMemID, 4, "W", sMem) ;Write first float value to memory ftoa fVar2 sMem ;Convert second float to string value strlen sMem iLen ;Get length of converted float if iLen > 11 ;If converted float is greater than 11 characters substr sMem sMem 0 11 ;Then truncate at 11 characters to prevent overwriting values in memory block endif AccessMem(iMemID, 5, "W", sMem) ;Write second float value to memory AccessMem(iMemID, 6, "W", sVar1) ;Write first string value to memory AccessMem(iMemID, 7, "W", sVar2) ;Write second string value 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, 0, "R", &sMem) ;Read first integer value from memory atoi sMem iVar1 ;Convert string back to integer value AccessMem(iMemID, 1, "R", &sMem) ;Read second integer value from memory atoi sMem iVar2 ;Convert string back to integer value AccessMem(iMemID, 2, "R", &sMem) ;Read first long value from memory atol sMem lVar1 ;Convert string back to long value AccessMem(iMemID, 3, "R", &sMem) ;Read second long value from memory atol sMem lVar2 ;Convert string back to long value AccessMem(iMemID, 4, "R", &sMem) ;Read first float value from memory atof sMem fVar1 ;Convert string back to float value AccessMem(iMemID, 5, "R", &sMem) ;Read second float value from memory atof sMem fVar2 ;Convert string back to float value AccessMem(iMemID, 6, "R", &sVar1) ;Read first string value from memory AccessMem(iMemID, 7, "R", &sVar2) ;Read second string value 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 integer iStructIndex ;Index of data structure member (zero-based) param string sReadWrite ;Flag to determine if memory is read or written param string sVal ;String to read or write to memory integer iMemIndex ;Index into memory block switch iStructIndex case 0 case 1 case 2 case 3 case 4 case 5 iMemIndex = iStructIndex * 11 ;First six variables require 11 bytes of storage each endcase case 6 iMemIndex = 11 + 11 + 11 + 11 + 11 + 11 endcase case 7 iMemIndex = 11 + 11 + 11 + 11 + 11 + 11 + 256 endcase default ;Unexpected parameter value usermsg "Incorrect index value!" exit endcase endswitch switch sReadWrite ;Check if value is to be written to or read from memory case "R" if (iStructIndex == 6) || (iStructIndex == 7) ;If reading string1 or string2 memread iMemID iMemIndex sVal 256 ;Make sure to read the full 256 bytes else memread iMemID iMemIndex sVal 11 ;Read value from memory endif endcase case "W" if (iStructIndex == 6) || (iStructIndex == 7) ;If writing string1 or string2 memwrite iMemID iMemIndex sVal 256 ;Make sure to write the full 256 bytes else memwrite iMemID iMemIndex sVal 11;Write value to memory endif endcase default ;Unexpected parameter value usermsg "Incorrect flag!" exit endcase endswitch endproc