Code archives/Miscellaneous/Multi Function Returns
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
create and pass bank to functions, modify and return multi variables from within functions. | |||||
; ; decls ; .lib "user32.dll" apiCallWindowProc%(lpPrevWndFunc*,hWnd%,Msg%,wParam$,lParam*):"CallWindowProcA" apiCallWindowProcSTR$(lpPrevWndFunc*,hWnd%,Msg%,wParam$,lParam*):"CallWindowProcA" ; ; Multi Function Returns. ; Code By Kevin Poole. ; create bank for modifying in a function. PASSbank = CreateBank(256) ; poke address of strings into bank. PokeInt PASSbank,0,GRAB_StringAddr("String 1") PokeInt PASSbank,8,GRAB_StringAddr("String 2") ; call test function. ReturnTest(PASSbank) ; show results. Print "" Print "Modifyed from within function" Print "" newstring1$ = GRAB_StringFromAddr(PeekInt(PASSbank,0)) newstring2$ = GRAB_StringFromAddr(PeekInt(PASSbank,8)) Print newstring1$ Print newstring2$ MouseWait End Function ReturnTest(bank) ; display string from bank, then modify and store it. modifyString1$ = GRAB_StringFromAddr(PeekInt(bank,0)) Print modifyString1$ PokeInt bank,0,GRAB_StringAddr(modifyString1$+" : MODIFYED ") ; display string from bank, then modify and store it. modifyString2$ = GRAB_StringFromAddr(PeekInt(bank,8)) Print modifyString2$ PokeInt bank,8,GRAB_StringAddr(modifyString2$+" : MODIFYED ") Return bank End Function ; returns address of string. Function GRAB_StringAddr(grabstring$) Local grab_string_bank ; If grab_string_bank = 0 Then ; grab_string_bank = CreateBank(256) Restore CUSTOM_GET_STRING_ADDRESS Repeat Read e_data If e_data = 999 Then Exit PokeByte grab_string_bank,next_entry_data,e_data next_entry_data = next_entry_data + 1 Forever EndIf ; string_Addr = apiCallWindowProc(grab_string_bank,0,0,grabstring$,CreateBank(0)) Return string_Addr End Function ; returns address of string. Function GRAB_StringFromAddr$(address) Local grab_stringfrom_bank ; If grab_string_bank = 0 Then ; grab_string_bank = CreateBank(256) Restore CUSTOM_GET_STRING_FROM_ADDRESS Repeat Read e_data If e_data = 999 Then Exit PokeByte grab_string_bank,next_entry_data,e_data next_entry_data = next_entry_data + 1 Forever EndIf ; string_Addr$ = apiCallWindowProcSTR(grab_string_bank,0,address,"",CreateBank(0)) Return string_Addr$ End Function .CUSTOM_GET_STRING_ADDRESS Data $3E,$8B,$44,$24,$0C ; MOV EAX,DWORD PTR DS:[ESP+0C] Data $C3 ; RET Data 999 .CUSTOM_GET_STRING_FROM_ADDRESS Data $3E,$8B,$44,$24,$08 ; MOV EAX,DWORD PTR DS:[ESP+0C] Data $C3 ; RET Data 999 |
Comments
None.
Code Archives Forum