[[DEF SEG]] is used to define the area in memory to access QB64's emulated conventional memory. ==Legacy support== * '''QB64 implements memory access using [[_MEM]] and related functions. For that reason, [[DEF SEG]] isn't recommended practice anymore and is supported to maintain compatibility with legacy code.''' {{PageSyntax}} : [[DEF SEG]] [=][{segment|VARSEG(variable}] {{PageDescription}} * Used to set the pointer to a memory area of a variable/array or register. * [[PEEK]] and [[POKE]] require a segment memory address (often just 0) without using VARSEG. * Important segments using [[PEEK]] and [[POKE]] include &HB800 (text segment) and &HA000 (graphics segment). * [[BSAVE]] and [[BLOAD]] require a VARSEG reference to the grahic array(0 index) used. * Always use DEF SEG when the procedure is completed, in order to reset the segment to QBasic's default value. * [[DEF SEG]], [[VARSEG]], [[VARPTR]], [[PEEK]] and [[POKE]] access QB64's emulated 16 bit conventional memory block. '''It is highly recommended to use QB64's [[_MEM]] memory system to avoid running out of memory.''' <!-- {{PageExamples}} ''Example:'' In a Qbasic(ONLY) file delete, '''SEG''' forces the parameter to be passed as a far pointer. {{CodeStart}} '' '' {{Cl|CONST}} file = "trashme.tmp" 'example temporary file name to delete {{Cl|DEFINT}} A-Z {{Cl|DIM}} filename {{Cl|AS}} {{Cl|STRING}} {{Cl|DIM}} result {{Cl|AS}} {{Cl|LONG}} {{Cl|DIM}} t {{Cl|AS}} {{Cl|STRING}} {{Cl|DIM}} i {{Cl|AS}} {{Cl|INTEGER}} {{Cl|CONST}} codelen = 48 {{Cl|DIM}} code {{Cl|AS}} {{Cl|STRING}} * codelen {{Cl|CLS}} t = "5589E51E8B560C8EDA8B5E0A8B5702B441CD218B56088EDA8B5E06720B6631C0" t = t + "6689071F5DCA0800660D0000FFFFEBF0" {{Cl|FOR...NEXT|FOR}} i = 0 {{Cl|TO}} codelen - 1 {{Cl|MID$}}(code, i + 1, 1) = {{Cl|CHR$}}({{Cl|VAL}}("&h" + {{Cl|MID$}}(t, i + i + 1, 2))) {{Cl|NEXT}} {{Cl|OPEN}} file {{Cl|FOR...NEXT|FOR}} {{Cl|APPEND}} {{Cl|AS}} 1 'create temporary file {{Cl|PRINT (file statement)|PRINT}} #1, "I am doomed! :-(" {{Cl|CLOSE}} {{Cl|PRINT}} "now you see it:" {{Cl|SHELL}} "dir " + file K$ = {{Cl|INPUT$}}(1) filename = file + {{Cl|CHR$}}(0) 'create zero string name for DOS {{Cl|DEF SEG}} = {{Cl|VARSEG}}(code) {{Cl|CALL}} absolute('''SEG''' filename, '''SEG''' result, {{Cl|VARPTR}}(code)) {{Cl|IF...THEN|IF}} result {{Cl|THEN}} 'check results {{Cl|PRINT}} "oops. error: 0x"; {{Cl|HEX$}}(result {{Cl|AND (boolean)|AND}} {{Cl|&H}}FFFF&) {{Cl|ELSE}} {{Cl|PRINT}} "now you don't:" {{Cl|END IF}} {{Cl|SHELL}} "dir " + file {{Cl|END}} '' '' {{CodeEnd}} {{small|Code by Michael Calkins as Public Domain(2011)}} --> ''See also:'' * [[DEF SEG = 0]] * [[VARPTR]], [[VARSEG]] * [[PEEK]], [[POKE]] * [[BSAVE]], [[BLOAD]] {{PageNavigation}} <