Re: writing in a box in text mode.
- Posted by Jacques Deschenes <desja at QUEBECTEL.COM> Jan 14, 1997
- 1246 views
--=====================_853300182==_ At 09:17 14-01-97 +0100, you wrote: >---------------------- Information from the mail header ----------------------- >Sender: Euphoria Programming for MS-DOS <EUPHORIA at >MIAMIU.ACS.MUOHIO.EDU> >Poster: Raul Benavides Cordoba <f62becor at UCO.ES> >------------------------------------------------------------------------------- > >Hi to All, > > I have one problem and is that I want to draw a box in text mode >but I don't Know how to write a good routine for it. The problem is that I >can't fill the box. Can somebody help me? > >------------------------------ > > Thank you. > I send you this test code I wrote some times ago. It draw a box (single line or double) and display a file list inside it. --=====================_853300182==_ -- test code : drawing a box and writing in bound. without warning include file.e include image.e with trace --trace(1) constant attr = 7*16+15 constant padding = repeat(32,14) object list list = dir("c:\\win95") -- my windows directory if atom(list) then puts(1,"Directory not found.\n") abort(1) end if sequence text sequence window window = {{4,10},{20,60}} integer x,y,width,height width = window[2][2]-window[1][2] height = window[2][1]-window[1][1] function build_buffer(integer attr, sequence text) sequence buffer buffer = {} for i = 1 to length(text) do buffer = buffer & text[i] & attr end for return buffer end function -- build_buffer constant cBOX = {{ {218,196,191}, -- single line box {179,32,179}, {192,196,217} }, { {201,205,187}, -- double line box {186,32,186}, {200,205,188} } } constant cFRAME_SINGLE = 1, cFRAME_DOUBLE = 2 procedure DrawBox(integer style, integer color, sequence area) -- draw a box -- inputs: style -> 0 single line, 1 double line -- color -> text color attribute -- area -> box coordinates as {{y1,x1},{y2,x2}} integer height, width sequence box height = area[2][1] - area[1][1] width = area[2][2] - area[1][2] if height < 1 or width < 1 then return end if box = cBOX[style] -- extend box to width box[1] = box[1][1]&repeat(box[1][2],width-1)&box[1][3] box[2] = box[2][1]&repeat(box[2][2],width-1)&box[2][3] box[3] = box[3][1]&repeat(box[3][2],width-1)&box[3][3] -- extend box to height box = {box[1]} & repeat(box[2],height-1) & {box[3]} for i = 1 to length(box) do box[i] = build_buffer(color,box[i]) end for display_text_image(area[1],box) end procedure -- DrawBox() procedure ScrollUp() sequence r r = repeat(0,10) r[REG_AX] = #0601 r[REG_BX] = attr*256 r[REG_CX] = (window[1][1]-1)*256+window[1][2]-1 r[REG_DX] = (window[2][1]-1)*256+window[2][2]-1 r = dos_interrupt(#10,r) end procedure DrawBox(cFRAME_SINGLE,16+15, {{window[1][1]-1,window[1][2]-1},{window[2][1]+1,window[2][2]+1}}) --atom start --start = time() -- display a list of file in a box. x = 0 y = 0 for i = 1 to length(list) do text = list[i][D_NAME] & padding text = text[1..14] display_text_image({window[1][1]+y,window[1][2]+x}, {build_buffer(attr, text)}) x = x + 14 if x > width - 14 then x = 0 y = y + 1 end if if y > height then ScrollUp() y = height end if end for --clear_screen() --? time() - start --=====================_853300182==_ Jacques Deschenes Baie-Comeau, Quebec Canada desja at quebectel.com --=====================_853300182==_--