November 25, 2020, 08:59:37 AM

Author Topic: [bb] Text editor by Nebula [ 1+ years ago ]  (Read 557 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Text editor by Nebula [ 1+ years ago ]
« on: June 29, 2017, 12:28:40 AM »
Title : Text editor
Author : Nebula
Posted : 1+ years ago

Description : Text editor for Blitz+.

I dropped this project. It works but I have no use for it at this moment.


Code :
Code: BlitzBasic
  1. ; Blue text editor by Crom Design 2004
  2. ;
  3. ; Blue
  4. ;
  5. ; Note -        The data array can not be accessed directly without using the line pointer function bluelinenum(num)
  6. ;                               This is becourse large text files (1gb) and so on tend to be a bottleneck on the processor while
  7. ;                               editing... (Not implemented yet in this version but will be in later versions unless I find a better method)
  8. ;
  9. ; Current Implementations :
  10. ;Ctrl + Page Down
  11. ;Alt+F4
  12. ;Data array adjusts to size of text file.
  13. ;Mouse press aligns cursor (single/multi line)
  14. ;Line numbering (optional and dynamic) / Buffered
  15. ;Del
  16. ;Commandline file loading (limited to 40 lines 72 chars wide)
  17. ;Mouse Line Select
  18. ;Backspace
  19. ;Home
  20. ;End
  21. ;Ctrl + Cursor Right
  22. ;Ctrl + Cursor Left
  23. ;Shift + Cursor Right
  24. ;Shift + Cursor Left
  25. ;Shift + Ctrl + Cursor Right
  26. ;Shift + Ctrl + Cursor Left
  27. ;Page Up
  28. ;Page Down
  29. ;Ctrl + Home
  30. ;Ctrl + End
  31. ;Cursor Up
  32. ;Cursor Down
  33. ;Enter/Return
  34. ;Ctrl + C (Single line)
  35. ;Ctrl + V (Single Line)
  36. ;Loadtext
  37. ;Insert/Overwrite
  38. ;Insert/Overwrite cursor
  39. ;Single line Tab insert (non structured)
  40. ;Adjusts to startup resolution
  41.  
  42. ; not finished :
  43. ;                                                               Bugs!!! :
  44. ;                                                               Fix addition to cursor on line mouse exit
  45. ;                                                               Fix Mouse line/row selection (line gets reset to zero, check collision)
  46. ;
  47. ;                                                               Special Edit (vertical Selection)
  48. ;                                                               Shift + Tab
  49. ;                                                               Internal Tab handling
  50. ;                                                               Multiple Line Select
  51. ;                                                               Tab Multiple Lines
  52. ;                                                               Shift + Tab multiple Lines + optimalization
  53. ;                                                               Ctrl + C (Multi line)
  54. ;                                                               Ctrl + V (Multi line)
  55. ;                                                               Ctrl + X (Single Line/Multi line)
  56. ;                                                               Italic/Bold/Underline
  57. ;                                                               Enter + Splitline
  58. ;                                                               Mouse to Character collision
  59. ;                                                               Mouse Selection Automation
  60. ;                                                               Text Folding
  61. ;                                                               Folding interface + Hotkeys
  62. ;                                                               Colored Text
  63. ;                                                               Inline Icons
  64. ;                                                               Popup menu
  65. ;                                                               Auto Completion (list or shaded preview)
  66. ;                                                               Current Line expand to Visual console
  67. ;                                                               Horizontal and Vertical Scrollbars
  68. ;                                                               Data structure optimalization
  69. ;                                                               Config file based Parsing system
  70. ;                                                               Save Text
  71. ;                                                               Sorting routines
  72. ;                                                               Find/Replace core routines
  73. ;                                                               Double click keys (Ctrl/shift/Alt)
  74. ;                                                               Font support
  75. ;                                                               Dynamic multiple font support
  76. ;                                                               Inline Images or Ontop Images
  77. ;                                                               Edit Statistics
  78. ;                                                               Text Statistics
  79. ;                                                               Image Buffering
  80. ;
  81.  
  82. Global ww = 800
  83. Global wh = 600
  84.  
  85. ; active line colors
  86. Global bluevisualsactive = True
  87. Global blueactiveliner = 20
  88. Global blueactivelineg = 100
  89. Global blueactivelineb = 180
  90. Global blueactivelinefr = 240
  91. Global blueactivelinefg = 240
  92. Global blueactivelinefb = 240
  93. Global blueactivelinesr = 190
  94. Global blueactivelinesg = 130
  95. Global blueactivelinesb = 90
  96. ; txt area background color
  97. Global bluebackcolorr = 0
  98. Global bluebackcolorg = 76
  99. Global bluebackcolorb =  150
  100. ; txt area main color
  101. Global bluetextcolorr  = 240
  102. Global bluetextcolorg = 240
  103. Global bluetextcolorb = 240
  104. ; line numbering colors
  105. Global bluelinenumberbr = 0 ; line numbering background colors
  106. Global bluelinenumberbg =60
  107. Global bluelinenumberbb = 120
  108. ; line numbers
  109. Global bluelinenumbertr = 180
  110. Global bluelinenumbertg = 180
  111. Global bluelinenumbertb = 180
  112.  
  113. ;Global editor interactive controllers
  114. Global bluepagedownscroll
  115. Global bluepageupscroll
  116. Global bluectrlpagedownscroll
  117. Global bluectrlpageupscroll
  118.  
  119. Global linecounter = 0
  120.  
  121. Const bluedefaulttabsize = 4
  122.  
  123. Global blueinsertmode = False
  124. Global bluelinenumberwidth = 32
  125. Global bluelinenumbervisible = True                             ; Line numbers Disable Enable
  126.  
  127. Global bluelinenumberimagebuffer = CreateImage(bluelinenumberwidth,wh)
  128. Global bluelinenumberupdate = True ; false means do not redraw the line number bar
  129.  
  130. Global bluecursorcolorr = 255
  131. Global bluecursorcolorg = 255
  132. Global bluecursorcolorb = 255
  133. Global blueinsertcursorcolorr = 255
  134. Global blueinsertcursorcolorg = 255
  135. Global blueinsertcursorcolorb = 255
  136.  
  137. Global bluelinecopybuffer$ =""
  138.  
  139. ;line edit return commands
  140. Const bluecloseapp = -99
  141. Const bluepageup = -100
  142. Const bluepagedown = -101
  143. Const bluectrlend = -102
  144. Const bluectrlhome = -103
  145.  
  146. Global bluenumlines = 140 ; max num of lines
  147. Const bluepointers = 64
  148. Dim blue$(bluenumlines,bluepointers)
  149. Const blueactive = 0
  150. Const bluec = 1
  151. Const bluecursortimer = 2
  152. Const bluecursortimerdelay = 3
  153. Const blueshowcursor = 4
  154. Const bluecursorpos = 5
  155. Const blueselstart = 6
  156. Const blueselend = 7
  157. Const blueselactive = 8
  158. Const blueinvselstart = 9
  159. Const blueinvselactive = 10
  160. Const blueshiftactive = 11
  161. Const bluectrlactive = 12
  162. Const bluecopybuffer = 13
  163.  
  164. Const bluec_back = 14
  165. Const bluec_front = 15
  166.  
  167. Const bluehastab = 16
  168. Const bluehascolor = 17
  169. Const bluehasunderline = 18
  170. Const bluehasbold = 19
  171. Const bluehasitalic = 20
  172. Const bluehasicon = 21
  173. Const bluehasmultiplefonts = 22
  174. Const bluetabmodifier = 23
  175. Const blueabsfontheight  = 24
  176.  
  177. ;Cursor mouse interaction
  178. Global bluecursorx = 0
  179. Global bluecursory = 0
  180. Global bluecursorupdate = False
  181.  
  182.  
  183. ;buffering
  184. Global bluelinenumimagebuffer = CreateImage(bluelinenumberwidth,32)
  185. bufferlinenumbers ; make one image buffer
  186. ; Ask for mode
  187.  
  188. ;If FileType("back.bmp") <> 1 Then RuntimeError "cannot find back.bmp"
  189. Global backimage = CreateImage(ww,wh)
  190. ;Global backimage = LoadImage("back.bmp")
  191. ;MaskImage backimage,0,0,0
  192.  
  193. Const blue_tab = 9
  194.  
  195. Global mx
  196. Global my
  197.  
  198. Global bluelinewidth = 72
  199.  
  200. ; Blue Core gadgets
  201. Global lineareawin
  202. Global lineareacan
  203. Global backcan
  204.  
  205. root$ = CurrentDir()
  206. file$  = root$ + "welcome.txt"
  207. ;If FileType(file$) = 1 Then blueloadtext(root$+"welcome.txt")
  208. ;If FileType(file$) = 1 Then blueloadtext(root$+"edit.bb")
  209. If FileType(CommandLine()) = 1 Then blueloadtext(CommandLine())
  210.  
  211. ; a>AAAArewrjewrjlewkjr - < <
  212.  
  213. readmakebackdata
  214.  
  215.  
  216. blue_ed(ww,wh,Desktop())
  217.  
  218.  
  219. End
  220.  
  221.  
  222. Function blue_ed(w,h,parent) ; main edit loop
  223.         cx = GadgetWidth(parent)/2-w/2
  224.         cy = GadgetHeight(parent)/2-h/2
  225.         Local win = CreateWindow("Blue - Beta version march2004 - Crom Design",cx,cy,w,h,parent,1)
  226.         Local can = CreateCanvas(0,0,w,h,win)
  227.         lineareawin = CreateWindow("",0,0,w,32,win,32)
  228.         backcan = CreateCanvas(0,0,w,32,lineareawin) : SetBuffer CanvasBuffer(backcan) : ClsColor blueactiveliner,blueactivelineg,blueactivelineb:Cls
  229.  
  230.         Local canvasoffsety =  ClientHeight(can)-ClientHeight(win)-2 ; Fix for XP and Standard Windows interface
  231.         ;RuntimeError canvasoffsety
  232.         Local we ;event
  233.         Local prevline = 0 ; make global
  234.         Local scrolldown = False
  235.         Local scrollup = False
  236.         Local cursorontop = False
  237.         Local cursoronbottom = False
  238.         SetBuffer CanvasBuffer(can)
  239.        
  240.         ClsColor bluebackcolorr,bluebackcolorg,bluebackcolorb:Cls
  241.        
  242.         tm = CreateTimer(30)
  243.        
  244.         SetBuffer CanvasBuffer(can)
  245.         Cls
  246.         Color 240,240,240
  247.         DrawImage backimage,GadgetWidth(can)/2-ImageWidth(backimage)/2,0
  248.         drawblue(can,linecounter)
  249.         FlipCanvas(can)
  250.        
  251.         ma = 0
  252.         fh = FontHeight()
  253.         While we<>$803
  254.                 we = WaitEvent()
  255.                 Select we
  256.                         Case $101       ;- Key down    
  257.                         Case $102       ;- Key up
  258.                         If EventData() = 1 Then Exit
  259.                         Case $103       ;- Key stroke  
  260.                         Case $201       ;- Mouse down  
  261.                         Case $202       ;- Mouse up    
  262.                         ;ma = (EventY()/fh)+linecounter
  263.                         Case $203       ;- Mouse move  
  264.                         mx = EventX():my = EventY()
  265.                         Case $204       ;- Mouse wheel
  266.                         Case $205       ;- Mouse enter
  267.                         Case $206       ;- Mouse leave
  268.                         Case $401       ;- Gadget action       
  269.                         Case $801       ;- Window move
  270.                                 ;SetGadgetShape win,GadgetX(parent)+20,GadgetY(parent+22),GadgetWidth(win),GadgetHeight(win)
  271.                         Case $802       ;- Window size
  272.                         Case $803       ;- Window close
  273.                         Case $804       ;- Window activate             
  274.                         Case $1001      ;- Menu event
  275.                         Case $2001      ;- App suspend 
  276.                         Case $2002      ;- App resume  
  277.                         Case $2003      ;- App Display Change  
  278.                         Case $2004 ;- App Begin Modal
  279.                         Case $2005 ;- App End Modal
  280.                         Case $4001      ;- Timer tick
  281.                        
  282.                         ; Editor active
  283.                         If ma > -1 Then
  284.                                 prevline = ma
  285.                                 DebugLog (ma-linecounter)*fh
  286.                                 ma = blueline(win,blue(ma,bluec),ma,(ma-linecounter)*fh+canvasoffsety)         
  287.                                 SetBuffer CanvasBuffer(can)            
  288.                                 ;SetGadgetText win,"Maxlines : " + bluenumlines + " ma : " + ma + " prevline : " + prevline + " linecounter : " + linecounter
  289.                                 ; Line feedback handler
  290.                                 Select ma ; trap/translate global commands
  291.                                         Case bluecloseapp
  292.                                                 End
  293.                                         Case bluepageup                                        
  294.                                                 st = prevline - linecounter
  295.                                                 tp = bluemaxvislines(can)-1                                            
  296.                                                 If prevline - tp > 0 Then                                                                                                              
  297.                                                         If st = tp Then ; bottom up
  298.                                                                         ma = linecounter                                                                       
  299.                                                         Else ; top up                                                  
  300.                                                                 If linecounter - tp-1 > 0 Then                                                         
  301.                                                                         linecounter = linecounter - (tp-1)
  302.                                                                         If st = 0 Then ; if on top of page                     
  303.                                                                                 ma = linecounter-1
  304.                                                                         Else ; if in the middle
  305.                                                                                 ma = linecounter
  306.                                                                         End If
  307.                                                                 End If
  308.                                                         End If
  309.                                                 Else    ; if near top then set to top                                  
  310.                                                         ma = 0 : linecounter = 0
  311.                                                 End If
  312.                                         Case bluepagedown                                      
  313.                                                 ;       ma = linecounter
  314.                                                 sval = 10;bluectrlpagedownscroll
  315.                                                 st = prevline - linecounter
  316.                                                 tp = bluemaxvislines(can)-1
  317.                                                
  318.                                                 If prevline + tp < bluenumlines-tp Then                                                                                                        
  319.                                                         If st = tp Then ; bottom down
  320.                                                                 If bluecontrolispressed() Then ; if control
  321.                                                                         ma = prevline + sval + 1                                                                       
  322.                                                                         linecounter = linecounter + sval+1
  323.                                                                 Else
  324.                                                                         ma = prevline + tp + 1                                                                 
  325.                                                                         linecounter = prevline - 1
  326.                                                                 EndIf
  327.                                                         Else ; top down                                                
  328.                                                                 If linecounter + tp-1 < bluenumlines Then                                                              
  329.                                                                        
  330.                                                                         If st = 0 Then ; if on bottom of page
  331.  
  332.                                                                                 If bluecontrolispressed() Then ; if control
  333.                                                                                         ma = prevline + sval                                                                                   
  334.                                                                                 Else                                                                           
  335.                                                                                         ma = tp + st
  336.                                                                                         If linecounter > 0 Then linecounter = linecounter + st : ma = linecounter + tp
  337.                                                                                 End If
  338.                                                                                
  339.                                                                         Else ; if in the middle
  340.                                                                                 If bluecontrolispressed() Then ; if control is pressed
  341.                                                                                         ;linecounter = prevline
  342.                                                                                         ma = prevline + sval;tp
  343.                                                                                 Else ; if not                                                                          
  344.                                                                                        
  345.                                                                                         linecounter = prevline
  346.                                                                                         ma = prevline + tp
  347.                                                                                 End If
  348.                                                                         End If
  349.                                                                 End If
  350.                                                         End If
  351.                                                 Else    ; if near bottom then set bottom to top                                                
  352.                                                         ma = bluenumlines : linecounter = bluenumlines-tp                                                      
  353.                                                 End If
  354.                                         Case bluectrlhome
  355.                                                 ma = 0
  356.                                                 linecounter = 0
  357.                                                 bluelinenumberupdate = True
  358.                                         Case bluectrlend                       
  359.                                                 ma = bluenumlines
  360.                                                 linecounter = bluenumlines+1 - bluemaxvislines(can)
  361.                                                 ;DebugLog ma
  362.                                                 ;DebugLog linecounter
  363.                                                 bluelinenumberupdate = True
  364.                                 End Select
  365.                
  366.                                 ; Bounding
  367.                                 If ma>bluenumlines Then ma = bluenumlines
  368.                
  369.                                 ; Text single line scrolling
  370.                                 If ma>-1 Then
  371.                                         If ma-linecounter => bluemaxvislines(can) And ma>prevline And ma< bluenumlines+1 Then ; down                   
  372.                                                 cursoronbottom = True
  373.                                                 ma = bluemaxvislines(can) + linecounter
  374.                                                 linecounter = linecounter + 1
  375.                                                 scrolldown= True : scrollup = False
  376.                                         End If
  377.                                         If ma < prevline And linecounter > 0 And cursorontop = True Then ; up                  
  378.                                                 linecounter = linecounter - 1
  379.                                                 If linecounter < 0 Then linecounter = 0
  380.                                                 scrollup = True : scrolldown = False                   
  381.                                         End If
  382.                                         If scrolldown = True Then bluelinenumberupdate = True
  383.                                         If scrollup = True Then bluelinenumberupdate = True
  384.                                         If ma = -1 And scrolldown = True Then ma = bluenumlines : scrolldown = False
  385.                                         If ma =< linecounter Then cursorontop = True Else cursorontop = False
  386.                                         If ma-linecounter => bluemaxvislines(can) Then cursoronbottom = True Else cursoronbottom = False
  387.                                 End If
  388.                                 If ma = -1 Then ma = prevline
  389.                                 SetBuffer CanvasBuffer(can)
  390.                                 Cls
  391.                                 ; Background image
  392.                                 DrawImage backimage,GadgetWidth(can)/2-ImageWidth(backimage)/2,0
  393.                                 ; Draw the text
  394.                                 drawblue(can,linecounter)
  395.                                 FlipCanvas(can)
  396.                                
  397.                         End If 
  398.                 End Select             
  399.         Wend
  400. End Function
  401.  
  402. Function bluemaxvislines(can) ; return max vis lines on screen
  403.         a =  ((GadgetHeight(can)-13) / FontHeight()-3)
  404.         If a > bluenumlines Then a = bluenumlines+1    
  405.         Return a
  406. End Function
  407. Function linewidth(num) ; core
  408. l = Len(blue(num,bluec))
  409.  
  410. End Function
  411. Function drawblue(can,start) ; draw the text
  412. ;       ms = MilliSecs()
  413.         fh = FontHeight()
  414.         ch = bluemaxvislines(can)
  415.        
  416.         cnt = start
  417.         y = 0
  418.         ;set default color
  419.         Color bluetextcolorr,bluetextcolorg,bluetextcolorb
  420.         While y < ch
  421.                 If cnt=<bluenumlines
  422.  
  423.                         bluedrawtext(x,y*fh,cnt,can)
  424. ;Rect x,y*fh,x+32,y+fh ; line numbering
  425. ;                       If blue(cnt,bluehastab) Then
  426. ;                               bluetexttab x,y*fh,blue(cnt,bluec)
  427. ;                       Else
  428. ;                               Text x,y*fh,blue(cnt,bluec)
  429. ;                       End If
  430.                 End If
  431.                 cnt=cnt+1
  432.                 y=y+1
  433.         Wend
  434.         If bluelinenumbervisible = True Then DrawBlock bluelinenumberimagebuffer,x,0
  435.         bluelinenumberupdate = False
  436. ;RuntimeError MilliSecs()-ms   
  437. End Function
  438. Function bluedrawtext(x,y,num,can = 0, norules = False)
  439.  
  440.         Local hastab
  441.  
  442.         If norules = False Then
  443.                 If bluelinenumbervisible = True Then mod1 = blueLinenumberwidth
  444.         End If
  445.        
  446.         If blue(num,bluehastab) = True Then hastab = True
  447.  
  448.         If can > 0 Then        
  449.                 drawlinenumbering(x,y,num,can)         
  450.         End If
  451.        
  452.         If hastab = True Then
  453.                 bluetexttab x+mod1,y,blue(num,bluec)
  454.         Else           
  455.                 Text x+mod1,y,blue(num,bluec)
  456.         End If
  457.        
  458. End Function
  459. Function drawlinenumbering(x,y,num,can)
  460.         If can = 0 Then Return
  461.         If bluelinenumberupdate = False Then Return
  462.         If bluelinenumbervisible = False Then Return
  463.         SetBuffer ImageBuffer(bluelinenumberimagebuffer)       
  464.         ro = ColorRed()
  465.         go = ColorGreen()
  466.         bo = ColorBlue
  467.         If Int(blue(num,blueabsfontheight)) = 0 Then fh = FontHeight() Else fh = blue(num,blueabsfontheight)
  468.         Local tempthing = bluelinenumimagebuffer;CreateImage(bluelinenumberwidth,fh)
  469.         ;SetBuffer ImageBuffer(bluelinenumberimagebuffer)      
  470.         ; Buffer this ; shaded color adjustement
  471.         If bluevisualsactive = True Then        ;
  472.                 DrawBlock tempthing,x,y+1
  473.         Else
  474.                 Color bluelinenumberbr,bluelinenumberbg,bluelinenumberbb
  475.                 Rect x,y+1,x+bluelinenumberwidth,y+fh+1,True ; line numbering
  476.         End If
  477.         ; Draw the line number
  478.         Color bluelinenumbertr,bluelinenumbertg,bluelinenumbertb       
  479.         Text x-3,y,bluerightalign(num,4)       
  480.         Color ro,go,bo
  481.         SetBuffer CanvasBuffer(can)
  482. End Function
  483. Function bluetexttab(x,y,a$)
  484. ;RuntimeError a$
  485.         For i=1 To Len(a$)
  486.                 cc$ = Mid(a$,i,1)
  487.                 Select Asc(cc)
  488.                         Case 9
  489.                                 For ii=1 To bluedefaulttabsize
  490.                                         x = x + StringWidth("a")
  491.                                 Next
  492.                         Default
  493.                         Text x,y,cc
  494.                 End Select             
  495.                 fw = StringWidth(Mid(a$,i,1))
  496.                 x=x+fw
  497.         Next
  498. End Function
  499. Function bluelinenum(num) ; core
  500.         ; Structural optimalization system goes here
  501.         ;
  502.         Return num ; return pointer to data
  503. End Function
  504. Function bluereadline$(num) ; return the line number
  505.         num = bluelinenum(num) ; core
  506.         Return blue(num,bluec)
  507. End Function
  508. Function bluewriteLine(num,in$) ; Write to the line number with in$
  509.         num = bluelinenum(num) ; core
  510.         blue(num,bluec) = in$
  511. End Function
  512. Function blueline(ms,def$="",num,offset_y);; ; edit single line - core
  513.         num = bluelinenum(num) ; optimalization
  514.         ;offset_y=offset_y+24
  515.         offset_y=offset_y;+GadgetY(ms)
  516.         offset_x = 2
  517.         width_mod = 0
  518.         height_mod = 0
  519.         ;
  520.         If bluelinenumbervisible = True Then           
  521.                 offset_x = bluelinenumberwidth + 3
  522.                 width_mod = bluelinenumberwidth + 3
  523.         End If
  524.         ;
  525.        
  526.         Local wwidth = GadgetWidth(ms)-7
  527.         Local wheight = FontHeight()
  528.         ;Local win = CreateWindow("",GadgetX(ms)+offset_x,GadgetY(ms)+offset_y,wwidth-width_mod,wheight,ms,32)
  529.         Local win = lineareawin
  530.         ;Local can = CreateCanvas(GadgetX(ms)+offset_x,GadgetY(ms)+offset_y,wwidth-width_mod,wheight,lineareawin)
  531.         Local can = CreateCanvas(0,0,wwidth-width_mod,wheight,lineareawin)     
  532.         ;SetGadgetShape win,GadgetX(ms)+offset_x,GadgetY(ms)+offset_y,wwidth-width_mod,wheight 
  533.         SetGadgetShape win,GadgetX(ms)+offset_x,GadgetY(ms)+offset_y,wwidth-width_mod,wheight ; align text window to parent window!!
  534.         SetGadgetShape can,0,0,wwidth-width_mod,wheight
  535.         ;ActivateWindow win    
  536.         ;Local can = lineareacan
  537.        
  538.         ;SetGadgetShape can,0,0,wwidth,wheight
  539.         SetBuffer CanvasBuffer(can)
  540.         HideGadget backcan
  541.         Local r = blueactiveliner
  542.         Local g = blueactivelineg
  543.         Local b = blueactivelineb
  544.         Local fr = blueactivelinefr
  545.         Local fg = blueactivelinefg
  546.         Local fb = blueactivelinefb
  547.         Local sr = blueactivelinesr
  548.         Local sg = blueactivelinesg
  549.         Local sb = blueactivelinesb
  550.         ClsColor r,g,b:Cls
  551.         FlipCanvas(can)
  552.         ;RuntimeError "er"
  553.         Local c$ = def$
  554.         Local cursortimer = MilliSecs()+1000
  555.         Local cursortimerdelay = 1000
  556.         Local showcursor = True
  557.         ;oboe = Int(blue(num,bluecursorpos)) + ( bluelinenumberwidth / fontwidth() )
  558.         Local cursorpos = blue(num,bluecursorpos)
  559.         cursorpos = bluemousecursorupdate()
  560.         ;cursorpos = (bluecursorx - (bluelinenumberwidth/fontwidth()))
  561.         Local selstart = blue(num,blueselstart)
  562.         Local selend = blue(num,blueselend)
  563.         Local selactive = blue(num,blueselactive)
  564.         Local invselstart = blue(num,blueinvselstart)
  565.         Local invselactive = False
  566.         Local shiftactive = False
  567.         Local ctrlactive = False
  568.         Local altactive = False
  569.         Local copybuffer$ = bluelinecopybuffer;blue(num,bluecopybuffer)
  570.         c$ = def$
  571.         Local c_back$ = Right(c$,Len(c$)-cursorpos);blue(num,bluec_back)
  572.         Local c_front$ = Left(c$,cursorpos);blue(num,bluec_front)
  573.        
  574.         Local MousX = 0
  575.         Local MousY = 0
  576.         Local exitline = -1
  577.         Local exitwithreturn = False
  578.         Local exitwithcursup = False
  579.         Local exitwithcursdown = False
  580.  
  581.         Local functionkeys[12] ; 1 --- 12      
  582.        
  583.         Local maxtextlen = (GadgetWidth(can)/StringWidth("a"))-1
  584.        
  585.         ;RuntimeError c$
  586.         ;Local c_back$ = ""
  587.        
  588.         Local timer = CreateTimer(60)  
  589.         While we<>$803
  590.                 we = WaitEvent()
  591.                 Select we
  592.                         Case $101       ;- Key down    
  593.                                 ; 54 r-shft, 42 - l-shft ; 157- rctrl, 29 - lctrl, 184-ralt,56-lalt
  594.                                 ed = EventData()               
  595.                                 Select ed
  596.                                         Case 54 ; rshift
  597.                                                 If selactive = False Then selactive = True : selstart = cursorpos : invselstart = cursorpos : sellen = 0 : shiftactive = True
  598.                                         Case 42 ;lshift
  599.                                                 If selactive = False Then selactive = True : selstart = cursorpos : invselstart = cursorpos : sellen = 0: shiftactive = True
  600.                                         Case 157 ; rctrl                       
  601.                                                 ctrlactive = True
  602.                                         Case 29 ; lctrl
  603.                                                 ctrlactive = True
  604.                                         Case 184 ; l alt
  605.                                                 altactive = True
  606.                                         Case 56 ; r alt
  607.                                                 altactive = True                                               
  608.                                 End Select             
  609.                         Case $102       ;- Key up                      
  610.                                 ed = EventData()
  611.                                 Select ed
  612.                                         Case 54 : shiftactive = False
  613.                                         Case 42 : shiftactive = False
  614.                                         Case 29 : ctrlactive = False
  615.                                         Case 184: ctrlactive = False
  616.                                 End Select
  617.                         ;If EventData() = 1 Then Exit
  618.                         Case $103       ;- Key stroke (EDIT)
  619.                                 ed = EventData():If ed = 13 Then we = $803
  620.                                 showcursor = True : cursortimer = MilliSecs() + cursortimerdelay
  621.                                 ;backspa = 8 , 32 = space, 63273 ; homr ;
  622.                                 ;63276 - pageup,  63277 pagedown
  623.                                 ;RuntimeError ed               
  624.                                 Select ed
  625.                                         Case 63276 ; Page up
  626.                                                
  627.                                                 we = $803
  628.                                                 exitline = bluepageup
  629.                                         Case 63277 ; Page down
  630.                                                 we = $803
  631.                                                 exitline = bluepagedown
  632.                                         Case 9 ; Tab
  633.                                                 If shiftenabled = True Then
  634.                                                 End If
  635.                                                 If altenabled = True Then
  636.                                                 End If
  637.                                                 If ctrlenabled = True Then
  638.                                                 End If
  639.                                                 If shiftenabled = False And altenabled = False And ctrlenabled = False Then
  640.                                                         c_front = c_front + String(Chr(32),bluedefaulttabsize)
  641.                                                         cursorpos = cursorpos + bluedefaulttabsize
  642.                                                         ;store tab locations here
  643.                                                 End If
  644.                                         Case 63271 ; Insert
  645.                                                 If blueinsertmode = True Then blueinsertmode = False Else blueinsertmode = True                                        
  646.                                         Case 63239 ; F4
  647.                                                 If altactive = True Then
  648.                                                         we = $803
  649.                                                         exitline = bluecloseapp
  650.                                                 End If
  651.                                         Case 63272 ;del
  652.                                                 If selactive = False And shiftactive = False Then
  653.                                                         If Len(c_back$) > 0
  654.                                                                 c_back$ = Right(c_back$,Len(c_back$)-1)
  655.                                                         EndIf
  656.                                                 Else                           
  657.                                                         c_front$ = Left(c$,selstart)
  658.                                                         c_back$ = Right(c$,Len(c$)-selend)
  659.                                                         selactive = False : invselactive = False                               
  660.                                                         cursorpos = selstart
  661.                                                         If Len(c_back$) + Len(c_front$) = 0 Then cursorpos = 0
  662.                                                 End If
  663.                                         Case 63273 ; home
  664.                                                 If ctrlactive = False Then
  665.                                                         cursorpos = 0
  666.                                                         c_front$ = Left(c$,cursorpos)
  667.                                                         c_back$ = Right(c$,Len(c$)-cursorpos)
  668.                                                         If shiftactive = False Then selactive = False
  669.                                                 Else ;Ctrl + home
  670.                                                         exitline = bluectrlhome
  671.                                                         we=$803
  672.                                                 End If
  673.                                         Case 63275 ; end
  674.                                                 If ctrlactive = False Then
  675.                                                         cursorpos = Len(c$)
  676.                                                         c_front$ = Left(c$,cursorpos)
  677.                                                         c_back$ = Right(c$,Len(c$)-cursorpos)
  678.                                                         If shiftactive = False Then selactive = False
  679.                                                 Else ;CTRL + End
  680.                                                         exitline = bluectrlend
  681.                                                         we=$803
  682.                                                 End If
  683.                                         Case 8 ; backspace
  684.                                                 ;If Len(c$) > 0 c$ = Left(c$,Len(c$)-2)
  685.                                                 c_front$ = Left(c_front$,Len(c_front$) - 1)
  686.                                                 If cursorpos > 0 Then cursorpos = cursorpos - 1
  687.                                                 If shiftactive = False Then selactive = False
  688.                                         Case 13 ; enter
  689.                                                 exitline = num + 1
  690.                                                 exitwithreturn = True
  691.                                                 we = $803
  692.                                         Case 27 ; escape
  693.                                                 we = $803
  694.                                         Case 63232 ; curs up
  695.                                                 If num > 0 Then
  696.                                                         exitwithcursup = True
  697.                                                         exitline = num - 1                             
  698.                                                         If cursorpos > Len(blue(exitline,bluec)) Then
  699.                                                                 blue(exitline,bluecursorpos) = Len(blue(exitline,bluec))
  700.                                                                 Else
  701.                                                                 blue(exitline,bluecursorpos) = cursorpos
  702.                                                         End If
  703.                                                         we = $803
  704.                                                 End If
  705.                                         Case 63233 ; curs down
  706.                                                 If num < bluenumlines Then
  707.                                                         exitwithcursdown = True
  708.                                                         exitline = num + 1
  709.                                                         If cursorpos > Len(blue(num,bluec)) Then
  710.                                                                 blue(exitline,bluecursorpos) = Len(blue(exitline,bluec))
  711.                                                         Else
  712.                                                                 blue(exitline,bluecursorpos) = cursorpos
  713.                                                         End If
  714.                                                         we = $803
  715.                                                 Else
  716.                                                         we = $803
  717.                                                         exitline = num
  718.                                                 End If
  719.                                         Case 63235 ; cursright
  720.                                                 If ctrlactive = True Then
  721.                                                         If shiftactive = False Then selactive = False
  722.                                                         z = movecursorright(c$,cursorpos+1)
  723.                                                         ;DebugLog z
  724.                                                         If z =0 Then z=Len(c$)
  725.                                                         cursorpos = z
  726.                                                         c_front$ = Left(c$,cursorpos)
  727.                                                         c_back$ = Right(c$,Len(c$) - cursorpos)
  728.                                                 Else
  729.                                                         If cursorpos < Len(c$) Then cursorpos = cursorpos + 1
  730.                                                         c_front$ = Left(c$,cursorpos)
  731.                                                         c_back$ = Right(c$,Len(c$)-cursorpos)
  732.                                                         If shiftactive = False Then selactive = False
  733.                                                 End If
  734.                                         Case 63234 ; curs left
  735.                                                 If ctrlactive = True Then
  736.                                                         If shiftactive = False Then selactive = False
  737.                                                         z = movecursorleft(c$,cursorpos-1)                                     
  738.                                                         If z <0 Then z=0
  739.                                                         cursorpos = z
  740.                                                         c_front$ = Left(c$,cursorpos)
  741.                                                         c_back$ = Right(c$,Len(c$) - cursorpos)
  742.                                                         Else
  743.                                                         If cursorpos > 0 Then cursorpos = cursorpos - 1
  744.                                                         c_front$ = Left(c$,cursorpos)
  745.                                                         c_back$ = Right(c$,Len(c$)-cursorpos)
  746.                                                         If shiftactive = False Then selactive = False
  747.                                                 End If
  748.                                         Default ; all other keys
  749.                                                 If ctrlactive=False And altactive = False
  750.                                                         If blueinsertmode = False Then ; Regular type without Insert
  751.                                                                 If cursorpos < maxtextlen And Len(c$) < maxtextlen
  752.                                                                         c_front$ = c_front$ + Chr(ed)
  753.                                                                         cursorpos = cursorpos + 1
  754.                                                                         selactive = False
  755.                                                                 End If                                                         
  756.                                                         Else                                                   
  757.                                                                 If cursorpos < maxtextlen ; Regular type with insert
  758.                                                                         c_front$ = c_front$ + Chr(ed)
  759.                                                                         c_back$ = Right(c_back$,Len(c_back$)-1)                                                                
  760.                                                                         cursorpos = cursorpos + 1
  761.                                                                         selactive = False
  762.                                                                 End If
  763.                                                         End If
  764.                                                         If shiftactive = False Then selactive = False
  765.                                                 End If
  766.                                 End Select
  767.                                 ;
  768.                                 ;RuntimeError
  769.                                 ; CTRL things
  770.                                 If ctrlactive = True Then              
  771.                                         Select ed
  772.                                                 Case 22 ; Ctrl + v ; paste ; bluelinewidth                                             
  773.                                                         If copybuffer$<> "" Then
  774.                                                                 ; Single line copy paste!!
  775.                                                                 If Len(copybuffer$)  + Len(c$) < bluelinewidth Then
  776.                                                                         If selactive = True Then
  777.                                                                                 c$ = c_front$ + c_back$                                                                        
  778.                                                                                 c$ = bluereplacelineselection(c$,copybuffer$,selstart,selend)
  779.                                                                                 cursorpos = (cursorpos - sellen) + Len(copybuffer$)
  780.                                                                                 c_front$ = Left(c$,cursorpos)
  781.                                                                                 c_back$ = Right(c$,Len(c$)-cursorpos)
  782.                                                                                 selactive = False
  783.                                                                         Else                                                                   
  784.                                                                                         c_front$ = c_front$ + copybuffer$
  785.                                                                                         cursorpos = cursorpos + Len(copybuffer)                                                                        
  786.                                                                         End If
  787.                                                                 End If
  788.                                                         End If
  789.                                                 Case 3  ; CTRL + C
  790.                                                         If selactive = True Then
  791.                                                                 copybuffer$ = Mid(c$,selstart+1,sellen)
  792.                                                                 DebugLog copybuffer$                                                           
  793.                                                         End If
  794.                                                 Default                        
  795.                                         End Select
  796.                                 EndIf
  797.                                 c$ = c_front$ + c_back$                        
  798.                         Case $201       ;- Mouse down
  799.                                 ; Position cursor
  800.                                 bluecursorx = EventX() / Fontwidth()
  801.                                 If obluecursorx <> bluecursorx Then DebugLog bluecursorx
  802.                                 cursorpos = bluecursorx
  803.                                 c_front$ = Left(c$,cursorpos)
  804.                                 c_back$ = Right(c$,Len(c$)-cursorpos)
  805.                                 mup = False
  806.                         Case $202       ;- Mouse up
  807.                                 mup = True
  808.                                 nl = EventY() / FontHeight() + linecounter
  809.                                 ;DebugLog "Exit val : " + nl + " : : " + num
  810.                                 If nl <> 0 Then cursorpos = bluecursorx : bluecursorupdate = True
  811.                                 If moc = False Then we = $803          
  812.                         Case $203       ;- Mouse move
  813.                                 mousx = EventX()
  814.                                 mousy = EventY()
  815.                         Case $204       ;- Mouse wheel
  816.                         Case $205       ;- Mouse enter
  817.                                 If EventSource() = can
  818.                                         moc=True
  819.                                 End If
  820.                         Case $206       ;- Mouse leave
  821.                                 If EventSource() = can
  822.                                         moc=False
  823.                                 End If
  824.                         Case $401       ;- Gadget action
  825.                         Case $801       ;- Window move
  826.                                 SetGadgetShape win,GadgetX(ms)+offset_x,GadgetY(ms)+offset_y,wwidth-width_mod,wheight ; align text window to parent window!!
  827.                                 SetGadgetShape can,0,0,wwidth-width_mod,wheight                        
  828.                         Case $802       ;- Window size
  829.                         Case $803       ;- Window close
  830.                                 If EventSource() = ms Then End
  831.                         Case $804       ;- Window activate
  832.                         Case $1001      ;- Menu event
  833.                         Case $2001      ;- App suspend 
  834.                         Case $2002      ;- App resume
  835.                                 SetGadgetShape win,GadgetX(ms)+offset_x,GadgetY(ms)+offset_y,wwidth-width_mod,wheight ; align text window to parent window!!
  836.                                 SetGadgetShape can,0,0,wwidth-width_mod,wheight
  837.                         Case $2003      ;- App Display Change
  838.                         Case $2004 ;- App Begin Modal
  839.                         Case $2005 ;- App End Modal
  840.                         Case $4001      ;- Timer tick
  841.                                 SetBuffer CanvasBuffer(can)
  842.                                 Cls                            
  843.                                 ; quick hack to fix control handling
  844.                                 If KeyDown(29) = True Or  KeyDown(157) = True Then ctrlactive = True Else ctrlactive = False; lctrl                            
  845.                                 If KeyDown(42) = True Or KeyDown(54) = True Then shiftactive = True Else shiftactive = False ; lshift                          
  846.                                        
  847.                                 ;editline highlight
  848.                                 Color r+10,g+10,b+10 ; Set line higlight color
  849.                                 Line 0,0,GadgetWidth(can),0 ; draw higlight line
  850.                                 Color r,g,b
  851.                                 Line 0,GadgetHeight(can)-1,GadgetWidth(can),GadgetHeight(can)-1
  852.                                 Color r-10,g-10,b-10
  853.                                 seldraw = False
  854.  
  855.                                 If selactive = True And sellen <>0 ;And selstart<>cursorpos Then
  856.                                         Color sr,sg,sb
  857.                                         Rect StringWidth(Left(c$,selstart)),0,StringWidth(Mid$(c$,selstart+1,sellen)),FontHeight()
  858.                                         seldraw = True
  859.                                 End If
  860.                                 blue(num,bluec) = c$
  861.                                 Color fr,fg,fb:bluedrawtext 0,-1,num,can,True
  862.                                 ;Color 0,0,0
  863.                                 ;Rect 0,0,30,10,True
  864.                                 ;Color fr,fg,fb:Text 0,-1,c$
  865.                                
  866.                                 If cursortimer < MilliSecs() Then                                      
  867.                                         cursortimer = MilliSecs() + cursortimerdelay
  868.                                         If showcursor = True Then showcursor = False Else showcursor = True    
  869.                                 End If
  870.                                        
  871.                                 sellen = selend-selstart
  872.                                 selend = cursorpos
  873.                                 If selactive=True And sellen = 0 And selreset = False Then
  874.                                         ;DebugLog"er"
  875.                                         invselactive = False
  876.                                         invselstart = cursorpos
  877.                                         selend = cursorpos
  878.                                         selstart = cursorpos
  879.                                         selreset = True
  880.                                         ElseIf sellen <> 0
  881.                                         selreset = False
  882.                                 End If
  883.                                 If sellen < 0 And invselactive = False And selactive = True Then               
  884.                                         invselactive = True
  885.                                         ElseIf invselactive=True And sellen < 0 Then ; hit home with inversed sel;ection
  886.                                                 invselactive = False
  887.                                                 selstart = invselstart
  888.                                 End If
  889.                                 If invselactive = True Then
  890.                                         selend = invselstart
  891.                                         selstart = cursorpos
  892.                                         sellen = invselstart-(cursorpos-1)
  893.                                 End If
  894.  
  895.                         ; drawcursor (yikes!)
  896.                         If showcursor = True Then bluedrawcursor( StringWidth(Left(c$,cursorpos))+(StringWidth(String(" ",bluecursorposx(num)))), FontHeight()-2,StringWidth("a"),blueinsertmode)
  897.                        
  898.                         ;       Line 0,220+3,200,220+3 y
  899.                         ;       Text 0,220,c_front$ + "|" + c_back     
  900.                         ;       Text 0,240,"string len : " + Len(c$)
  901.                         ;       If selactive = True Then Text 0,250,"sellen : " + sellen + " brr : " + Mid(c$,selstart+1,sellen)       
  902.                         ;       Text 0,260,"invselactive:" +invselactive+" invselstart:"+invselstart
  903.                         ;       Text 0,280,"seldraw:"+seldraw + " selactive:"+selactive
  904.                         ;       Text 0,300,"selstart:" + selstart + " cursorpos:" + cursorpos
  905.                         ;       Text 0,320,"selend:"+selend+" sellen:"+sellen
  906.                         ;       Text 0,340,"ctrlactive:"+ctrlactive
  907.                         FlipCanvas(can)
  908.                 End Select
  909.         Wend
  910.        
  911.         ; store changes
  912.         blue(num,blueactive) = 0
  913.         blue(num,bluec) = c$
  914.         blue(num,bluecursortimer) = cursortimer
  915.         blue(num,bluecursortimerdelay) = cursortimerdelay
  916.         blue(num,blueshowcursor) = showcursor
  917.         blue(num,bluecursorpos) = cursorpos
  918.         blue(num,blueselstart) = selstart
  919.         blue(num,blueselend) = selend
  920.         blue(num,blueselactive) = selactive
  921.         blue(num,blueinvselstart) = invselstart
  922.         blue(num,blueinvselactive) = invselactive
  923.         blue(num,blueshiftactive) = shiftactive
  924.         blue(num,bluectrlactive) = ctrlactive
  925.         ;blue(num,bluecopybuffer) = copybuffer$
  926.         bluelinecopybuffer$ = copybuffer$
  927.         ShowGadget backcan
  928.         FreeGadget can
  929.         If exitline <-50 Then Return exitline
  930.         If exitwithcursup = True Then Return exitline
  931.         If exitwithcursdown = True Then Return exitline
  932.         If exitwithreturn= True Then Return exitline
  933.         If mup = True Then Return nl
  934.        
  935.        
  936.         Return -1
  937. End Function
  938. Function bluemousecursorupdate() ; core
  939.         ; Update the cursor with the activities of the mouse pointer ; trigger flag gets inverted!
  940.         If bluecursorupdate = True Then
  941.                 cursorpos = bluecursorx- (bluelinenumberwidth/fontwidth())
  942.                 bluecursorupdate = False
  943.         End If
  944.         Return cursorpos
  945. End Function
  946. Function bluereplacelineselection$(in$,repl$,st,nd) ; core
  947.         a$ = Left(in$,st)
  948.         b$ = Right(in$,Len(in$)-nd)
  949.         Return a$+repl$+b$
  950. End Function
  951. Function bluedrawcursor(x,y,w,t) ; t = 0 = regular 1 = insert
  952.         Select t
  953.                 Case 0 ; Regular cursor
  954.                         Color bluecursorcolorr,bluecursorcolorg,bluecursorcolorb
  955.                         Rect x,y-FontHeight(),2,FontHeight(),True              
  956.                 Case 1 ; Insert Cursor
  957.                         Color blueinsertcursorcolorr,blueinsertcursorcolorg,blueinsertcursorcolorb
  958.                         Rect x,y,w,2,True              
  959.         End Select
  960. End Function
  961. Function bluecursorposx(num)
  962.         ;DebugLog blue(num,bluetabmodifier)
  963.         Return blue(num,bluetabmodifier)
  964. End Function
  965. Function movecursorleft(c$,cursorpos)
  966.         z = instrleft(c$," ",cursorpos)
  967.         While Mid(c$,z) = " "
  968.                 z=z-1
  969.                 If z<1 Then Exit
  970.         Wend           
  971.         Return z-1
  972. End Function
  973. Function movecursorright(c$,cursorpos)
  974.         z = Instr(c$," ",cursorpos)
  975.         While Mid(c$,z) = " "
  976.                 z=z+1
  977.                 If z>Len(c$) Then Exit
  978.         Wend           
  979.         Return z
  980. End Function
  981. Function instrleft(c$,f$,pos)
  982.        
  983.         If f$="" Then Return 0
  984.         If Len(c$) = 0 Then Return 0
  985.         If pos<0 Or pos>Len(c$) Then Return 0
  986.         pos2 = 1
  987.        
  988.         While pos2 <> 0
  989.                 q = Instr(c$,f$,pos2)
  990.                 ;If Confirm(q+"|"+pos2) Then End
  991.                 If q>pos Then Exit
  992.                 If q = 0 Then Exit     
  993.                 pos2 = q+1
  994.         Wend   
  995.         Return pos2-1
  996. End Function
  997. Function bluerightalign$(in$,tlen)
  998.         If tlen =<0 Then Return
  999.         While Len(in$) < tlen in$=" " + in$ : Wend
  1000.         Return in$
  1001. End Function
  1002. Function bluecountchar(num,in$)
  1003.         ; char Input ascii
  1004.         ;
  1005.         ms = MilliSecs()
  1006.         pos = 1
  1007.         While  pos > 0  ; timeout after 2000 millisecs()!!!
  1008.                 q = Instr(blue(num,bluec),in$,pos)
  1009.                 num2 = num2 + 1
  1010.                 If q = 0 Then Exit
  1011.                 pos = q+1
  1012.         Wend   
  1013.         Return num2-1
  1014. End Function
  1015. Function blueloadtext(in$) ; load text
  1016.         If FileType(in$) <> 1 Then RuntimeError in$
  1017.         cnt = 0
  1018.         f = ReadFile(in$) ; count lines
  1019.                 While Eof(f) = False
  1020.                         a$ = ReadLine(f)
  1021.                         cnt=cnt + 1
  1022.                 Wend
  1023.         CloseFile(f)
  1024.         bluenumlines = cnt :redimblue(bluenumlines) : cnt = 0 ; redimension blue data array
  1025.         f = ReadFile(in$) ; Load the text (capped at linewidth)
  1026.                 While Eof(f) = False And cnt < bluenumlines
  1027.                         a$ = Left(ReadLine(f),bluelinewidth)
  1028.                         a$ = Replace(a$,Chr(9),String(Chr(32),bluedefaulttabsize))
  1029.                         ;If Asc(a$) = Chr(9) Then a$ = String(Chr(32),bluedefaulttabsize)
  1030.                         blue(cnt,bluec) = a$
  1031.                         cnt=cnt+1
  1032.                 Wend
  1033.         CloseFile(f)
  1034. End Function
  1035. Function redimblue(num)
  1036.         Dim blue$(num,bluepointers)
  1037. End Function
  1038. ;
  1039. Function bufferlinenumbers() ; make a image that gets blocked into the background of the linenumbers  - run after linenumber change
  1040.         Local tempthing = bluelinenumimagebuffer
  1041.         SetBuffer ImageBuffer(tempthing)
  1042.         ra# = bluelinenumberbr
  1043.         ga# = bluelinenumberbg
  1044.         ba# = bluelinenumberbb
  1045.         mod1# = ra/ImageWidth(tempthing)
  1046.         mod2# = ga/ImageWidth(tempthing)
  1047.         mod3# = ba/ImageWidth(tempthing)
  1048.         For x1=0 To ImageWidth(tempthing)-2
  1049.                 Color cnta#,cntb#,cntc#
  1050.                 cnta# = cnta + mod1#
  1051.                 cntb# = cntb + mod2#
  1052.                 cntc# = cntc + mod3#
  1053.                 Line x1,0,x1,ImageHeight(tempthing)
  1054.         Next
  1055.         Color cnta#/2,cntb#/2,cntc#/2
  1056.         Line x1,0,x1,ImageHeight(tempthing)    
  1057. End Function
  1058. ;
  1059. Function design_docs()
  1060. ;
  1061. ; Tabs are stored as chr code 9. Drawing these on the screen is check by seing if a tab is present in the array hastab flag
  1062. ; the tabflag bluehastab needs to be cleared in the lines datafield when tabs are removed.
  1063. ; Currently rethinking if I should use regular spaces and store the tab data seperatly....
  1064. ;
  1065. ; Line numbering is buffered in a image. this has 3 times the height size and only rebuilds when a flag is set
  1066. ;
  1067. ; The mouse 2 text cursor x position needs alignment with the text area offset. Line numbering ect. The regular cursor positioning
  1068. ; is done inside the line edit section. Outside code needs to take this into account seing the line edit uses Zero as it most left
  1069. ; offset.
  1070. ;
  1071. ;
  1072. End Function
  1073.  
  1074.  
  1075. Function bluecontrolispressed()
  1076.         If KeyDown(29) Then Return True
  1077.         If KeyDown(157) Then Return True
  1078.         Return False
  1079. End Function
  1080.  
  1081. Function readmakebackdata()
  1082.                 ;
  1083.         SetBuffer ImageBuffer(backimage)
  1084.         ClsColor 0,76,150
  1085.         Cls
  1086.         ;      
  1087.         Local ab[265]
  1088.         Restore bi
  1089.         For y = 0 To 15
  1090.         For x = 0 To 15
  1091.                 ;
  1092.                 Read a
  1093.                 ab[cnt] = a
  1094.                 ;
  1095.                 cnt=cnt+1
  1096.         Next:Next
  1097.         ;
  1098.         cnt=0
  1099.         ;
  1100.         For y=0 To 15
  1101.         For x=0 To 15
  1102.                 ;
  1103.                 a = ab[cnt]
  1104.                 ;
  1105.                 Select a
  1106.                         Case 1
  1107.                                 blockbackimage(x * 48 , y * 32 , 1)
  1108.                         Case 2
  1109.                                 blockbackimage(x * 48 , y * 32 , 2)
  1110.                         Case 3
  1111.                                 blockbackimage(x * 48 , y * 32 , 3)                            
  1112.                 End Select
  1113.                 ;
  1114.                 cnt=cnt+1
  1115.         Next:Next
  1116.         ;
  1117. End Function
  1118.  
  1119. Function blockbackimage(x,y,c#) ;i mage
  1120.  
  1121.         GetColor x , y
  1122.         a1# = ( ColorRed()   / 1.0577) + c
  1123.         b1# = ( ColorGreen() / 1.0577) + c
  1124.         c1# = ( ColorBlue()  / 1.0577) + c
  1125.         ;
  1126.         ;
  1127.         If c < 3 Then
  1128.                 Color a1 , b1 , c1
  1129.                 Oval x - 48 / 2 , y - 48 / 2 , 64, 64 , True
  1130.         End If
  1131.         If c = 3
  1132.                 Color 155,155,255
  1133.                 ;DebugLog a1
  1134.                 Color a1,100,200
  1135.                 Rect x - 48 / 2 , y - 48 / 2 , 32, 32 , True
  1136.         End If
  1137.         ;
  1138.         ;
  1139. End Function
  1140.  
  1141. .bi
  1142. Data 1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,1
  1143. Data 2,2,0,2,2,2,0,2,0,2,2,2,0,2,0,2
  1144. Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1145. Data 1,0,3,3,3,0,0,0,0,0,3,0,0,3,0,0
  1146. Data 1,0,1,3,0,0,3,3,0,3,0,3,3,3,3,3
  1147. Data 1,0,0,3,0,0,3,0,0,0,3,0,0,2,3,0
  1148. Data 1,0,0,3,0,0,3,3,0,0,3,0,0,0,3,0
  1149. Data 1,0,1,3,0,0,3,0,0,0,3,1,0,1,3,1
  1150. Data 1,2,0,3,0,0,3,3,0,3,1,3,0,0,3,0
  1151. Data 0,0,0,1,0,0,0,0,2,0,1,0,0,2,0,0
  1152. Data 0,2,1,0,0,2,0,0,2,2,1,0,2,0,0,3
  1153. Data 3,0,1,0,0,0,2,3,0,2,0,1,0,0,3,0
  1154. Data 0,3,1,0,3,0,0,2,3,0,2,1,0,3,0,3
  1155. Data 2,2,3,2,2,3,2,2,2,3,2,2,3,2,3,3
  1156. Data 1,1,1,3,1,1,3,1,1,1,3,3,1,3,3,3
  1157. Data 1,1,1,1,3,1,1,3,1,1,3,1,3,3,3,3


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal