[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
SEG(<C memvar name>)
Evaluates the segment portion of a variable's memory address.
Returns <expC> variable's segment address as hexadecimal string.
Our SEG() function is used in Summer '87 only. SEG() and OFF() do
not work in Clipper 5.0 because of Clipper's virtual memory manager.
Memory storage that you can refer to by a segment and offset address
is usually used only in conjunction with the DOSFUNC or ROMBIOS
procedures where a pointer address must be specified. Instead of
initializing a variable and getting its address with SEG() and
OFF(), use the ALLOCATE() function to provide the memory space
needed, initialize it with the POKE...() functions, and read it with
the PEEK...() functions.
Old example (Summer '87 only):
m_greeting = "Hello, how are you?$" && output string
m_ds = SEG("m_greeting") && output string segment address
m_dx = OFF("m_greeting") && output string offset address
m_ax = "0900" && DOS INT 21 output function
* Set up other registers (see DOSFUNC for example).
CALL DOSFUNC WITH m_regs, m_flags && DOS INT 21 function call
New example (Both 5.0 and Summer '87):
m_greeting = "Hello, how are you?$" && output string
m_address = ALLOCATE(LEN(m_greeting)+1) && new storage with address
m_ds = LEFT(m_address,4) && new storage SEGment address
m_dx = RIGHT(m_address,4) && new storage OFFset address
POKESTR(m_ds, m_dx, m_greeting) && place greeting in new storage
m_ax = "0900" && DOS INT 21 output function
* Set up other registers (see DOSFUNC for example).
CALL DOSFUNC WITH m_regs, m_flags && DOS INT 21 function call
To initialize a variable from a value stored in an ALLOCATEd area:
* Read new storage value.
new_var = PEEKSTR(m_ds, m_dx, m_greeting)
SEG() calls the _SEGMENT procedure, which can be called directly.
The SEG() function provides the convenience of a value-returning
function call.
m_greeting = "Hi, how are you?$" && $ for function call 9
* Set up call to DOSFUNC with registers DS:DX pointing to m_greeting.
* Will call DOS function 9 (print string).
m_ax = "0900"
m_ds = SEG( "m_greeting" )
m_dx = OFF( "m_greeting" )
<Set up other registers, m_regs, and m_flags.>
<See example under DOSFUNC procedure.>
CALL DOSFUNC WITH m_regs, m_flags
Hazard
If <memvar name> is not passed as a string, this function
will not return the address of the actual variable, only of a
temporary location in memory.
Placed in the Public Domain by Tom Rettig Assoc.
See Also:
OFF()
_OFFSET
_SEGMENT
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson