Пятница, 20.06.2025, 15:25

Приветствую Вас Гость | RSS
Мой сайт
ГлавнаяРегистрацияВход
Меню сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Главная » 2016 » Февраль » 8 » FreeBasic - : Консоль C++ Bmp
02:44
FreeBasic - : Консоль C++ Bmp

Я по порядку отвечу сейчас на твои вопросы, после будь добр ответь на мои, а не тупо съезжать с темы:

Quote

А можно узнать зачем?



Делал инструмент для FbEdit, который отображает информацию наподобие debug в ПБ. Что поделаешь, я тогда еще был под впечатлением ПБ.

То есть в редакторе FbEdit мог записать:

Code

Debug "Hello"
Debug 100
Debug 5.9999



И это выводилось в мое созданное окошко. Перегрузку функций я использовал не раз в своих программах. Если ты не понимаешь этих вкусностей, что я могу сказать...

Но результат все таки на лицо:

Коммерческий компилятор пурика обломился с задачей, которая легко решается на любом нормальном языке

Quote

У меня в FbEDit нет пункта Debug.



Дебаггер подключается в плагинах

Quote

А мне он нужен всегда, для пошагового выполнения программы, для просмотра что в переменных\массивах\структурах\списках и т. д. Иногда приходится смотреть что в регистрах процессора и в стеке.



Все это можно делать даже встроенным отладчиком FbEdit

Quote

Так же очень помогает профилер если нужно оптимизировать программу (найти участок, код которого чаще всего выполняется и оптимизировать его) и помогает при поиске ошибок зацикливания. Представь, перед тобой программа из множества тысяч строк и в какой-то момент времени прога где-то виснет, хз где. С помощью профилера легко определить участок где повисла прога, ведь он будет чаще всего выполнятся. А представь сколько времени пришлось бы потратить при ручном поиске?
Purifier тоже помогает в отладке если нужно найти ошибки записи/чтения за пределами области переменных, массивов и др. объектов.



Профилер есть в поставке Freebasic, но пока у меня не было нужды в его использовании. Если программа работает медленно, автор всегда приблизительно знает проблемные места, если пишет свои программы без использования чужого кода. Я не представляю как ты пишешь. Я объясню как пишу я:

Создал определенный участок кода в функции или в классе - по возможности протестировал. Не приступаю к следующему участку кода, пока не уверен в этом. Если проверить не представляется возможным, уже знаю, что это место потенциально может представлять проблему. Но такие места (которые нельзя сразу протестировать) как правило редки, потому как любой прогер планирует создание своей программы таким образом , чтобы ее всегда можно было протестировать.

Quote

А что без асма нельзя это сделать?
На PureBasiс это легко реализуется без асма.



Все можно и даже первым кодом в теме про QUINE новичек на оф. сайте создал как раз на FreeBasic. Но мне понравился этот код.
Кстати , нашел чем удивить. Вот код из четырех строчек:

Code


#Include "window9.bi"
IncludeBinary("Quine.bas",pp)
? PeekS(@pp(0))
Sleep



Quote

И что же мешает нарисовать интерфейс в FbEdit и использовать RC файл в том же PureBasic?



Я и не писал, что такого невозможно.

Quote

Ога, окно создается в ресурсах. Вообще отличная переносимость на др. платформы отличные от винды!



Выражение:

Quote

Вот тебе еще одно красивое кроссплатформенное решение.



относилось к исходному коду компилятора, а не к рисунку , где изображен проект с ресурсами

Теперь ответь на мои:

1) Ну допустим функции (не все) кроссплатформенны и что это дает или дало лично тебе?

2) Можешь привести пример своих кроссплатформенных программ?

Ну и чтобы от поста была хоть какая-то польза , кроссплатформенный пример анимации фракталов, выполненный D.J.Peters:

Code


' you can change it
Const scr_width  As Integer = 320 '320 640 800 ...
Const scr_height As Integer = 240 '200 480 600 ...
Const fullscreen As Integer =   1 ' 0/1
Const max_itera  As Integer = 128 '64 - 256

' please don't change
Const w_last     As Integer = scr_width  - 1

Const h_last     As Integer = scr_height - 1

Const q4         As Integer = 4

Const steps      As Double  = 20

Dim As Integer anim,itera,cfade,frames,fps,help
Dim As Double two,r,rstep,i,istep,ioffset,roffset
Dim As Double r_max,r_min,i_max,i_min,rdiff,idiff,zoom
Dim As Double roffsetsoll,ioffsetsoll,zoomsoll
Dim As Double roffsetdiff,ioffsetdiff,zoomdiff
Dim As Double roffsetstep,ioffsetstep,zoomstep
Dim As Integer x2y2,col1,col2,flag,t1,t2
Dim As Integer xm,ym,l,a,x,y,work_page,visible_page = 1

Dim As Byte Ptr video_page
Dim As String k
Dim As Single rc,gc,bc,w

rdiff=3.4*scr_width/scr_height
idiff=3.4

two  =2.0

zoom =1

anim =1

cfade=1

help =1

If fullscreen Then

         Screenres scr_width,scr_height,,,1
         Setmouse 0,0,0

Else

         Screenres scr_width,scr_height
End If

For l=1 To 255

         rc=Sin(w)*0.5+0.5

         gc=Cos(w*1.25)*0.5+0.5

         bc=Sin(w*1.5)*0.5+0.5

         Palette l,rc*255,gc*255,bc*255

         w=w+0.1

Next

t1=Timer

'open "waypoints.txt" for append as #2
While a<>27 '[esq]=end

rstep=rdiff*zoom/scr_width
istep=idiff*zoom/scr_height
r_min=roffset-(rdiff*zoom*0.5)
i_min=ioffset-(idiff*zoom*0.5)

video_page=ScreenPtr

Screenlock

Asm mov edi,[video_page]
i=i_min
For y=0 To h_last
r=r_min
For x=0 To w_last
Asm
         Xor ecx,ecx
         fld qword Ptr [r]
         fld qword Ptr [i]
         fldz
         fldz
         fld qword Ptr [two]
         fldz
         fldz                'y,x,2,y2,x2,i,r
         asm_iterastep:
         fld st(2)           '2,y,x,2,y2,x2,i,r
         fmul st(0),st(1)    '2*y
         fmul st(0),st(2)    '2*y*x
         fadd st(0),st(6)    '2*y*x+i
         fxch st(1)          'y,2*y*x*i,x,2,y2,x2,i,r
         fstp st(0)          'y,x,2,y2,x2,i,r

         fld st(4)           'x2    ,y,x,2,y2,x2,i,r
         fsub st(0),st(4)    'x2y2  ,y,x,2,y2,x2,i,r
         fadd st(0),st(7)    'x2y2r ,y,x,2,y2,x2,i,r
         fxch st(2)          'x,y,x2y2r,2,x2,i,r
         fstp st(0)          'y,x,2,y2,x2,i,r

         fld st(1)           'x,y,x,2,y2,x2,i,r
         fmul st(0)          'xx,y,x,2,y2,x2,i,r
         fxch st(5)          'x2,y,x,2,y2,xx,i,r
         fstp st(0)          'y,x,2,y2,x2,i,r

         fld st(0)           'y  ,y,x,2,y2,x2,i,r
         fmul st(0)          'y*y,y,x,2,y2,x2,i,r
         fxch st(4)          '
         fstp st(0)          'y,x,2,y2,x2,i,r

         inc ecx
         cmp ecx,max_itera
         jge asm_nomandel

         fld st(3)             'y2,y,x,2,y2,x2,i,r
         fadd st(0),st(5)
         fistp dword Ptr [x2y2]'y,x,2,y2,x2,i,r
         mov eax,dword Ptr [x2y2]
         cmp eax,q4 'then goto ismandel
         jg asm_ismandel
         jmp asm_iterastep

         asm_nomandel:
         Xor cx,cx
         asm_ismandel:
         'Shl cl,1
         mov Byte Ptr [edi],cl

         asm_xstep:
         inc edi

         fstp st(0)  'x,2,y2,x2,i,r
         fstp st(0)  '2,y2,x2,i,r
         fstp st(0)  'y2,x2,i,r
         fstp st(0)  'x2,i,r
         fstp st(0)  'i,r
         fstp st(0)  'r
         fadd qword Ptr [rstep]
         fstp qword Ptr [r] 'fpu stack empty
End Asm
Next

Asm

         fld  qword Ptr [istep]
         fadd qword Ptr [i]
         fstp qword Ptr [i] 'fpu stack empty
End Asm

Next

If anim=0 Then

         Line (scr_width\2-5,scr_height\2  )-Step(10,0),255

         Line (scr_width\2  ,scr_height\2-5)-Step(0,10),255

End If

If help Then

         Locate 1,1:Color 0,0

         Draw String (0, 0),"[h]           on/off helpscreen"
         Draw String (0,10),"[c]           on/off colorfade"
         Draw String (0,20),"[a]           on/off animation"
         Draw String (0,30),"[+][-]        zoom in/out"
         Draw String (0,40),"[left][right] move left/right"
         Draw String (0,50),"[up]  [down]  move up  /down"
         If fps Then

             Draw String (0,70),"frames per second:" & fps
         End If

End If

Screenunlock

frames+=1

If frames>=50 Then

         t2=Timer

         If (t2-t1)>=3.0 Then

             fps=frames/(t2-t1)
             If fullscreen=0 Then
                 Windowtitle "FPS=" & fps
             End If

             t1=t2:frames=0

         End If
End If

k=Inkey:l=Len(k)
If l Then

         a=Asc(Mid(k,l,1))
         Select Case a
             '     Case 13  ' [return] save curent waypoint
             '        print #2,"data ";roffset;",";ioffset;",";zoom
             Case 97  ' [a] togle animation on/off
                 anim=anim Xor 1

             Case 99  ' [c] togle colorfade on/off
                 cfade=cfade Xor 1
             Case 104 ' [h] togle help instruction on/off
                 help=help Xor 1

                 ' cursor move [left][rigth][up][down]
             Case 72

                 ioffset-=istep*2

             Case 80

                 ioffset+=istep*2

             Case 75

                 roffset-=rstep*2

             Case 77

                 roffset+=rstep*2

                 ' [+][-] zomm in/out
             Case 45 'zoom out
                 zoom+=rstep*8

             Case 43 'zoom in
                 zoom-=rstep*8

         End Select

End If

If anim Then

         If flag=0 Then

             Read roffsetsoll,ioffsetsoll,zoomsoll
             If roffsetsoll=-1.0 And ioffsetsoll=-1.0 And zoomsoll=-1.0 Then

                 Restore
                 Read roffsetsoll,ioffsetsoll,zoomsoll
             End If

             roffsetdiff=(roffset-roffsetsoll)/100.0

             ioffsetdiff=(ioffset-ioffsetsoll)/100.0

             zoomdiff=(zoom-zoomsoll)/100.0

             flag=100
         End If

         roffset-=roffsetdiff
         ioffset-=ioffsetdiff
         zoom-=zoomdiff
         flag-=1

End If

If cfade Then

         Palette Get 1,col1
         For l=1 To 254

             Palette Get l+1,col2
             Palette l,col2
         Next

         Palette 255,col1
End If

Wend

' close waypoint file
'close #2

End

Data -1.429768163191177, 0, 0.05827402421943742

Data -1.429916265921348, 0, 2.547174155824884e-06

Data -1.447242800619238,-0.02075477953116167, 0.01853105315282292

Data -1.448491719244281,-0.01683185615982145, 0.000218250277751366

Data -1.448494962416383,-0.01685102895821514, 1.271832197158205e-05

Data -1.448540366825824,-0.01684899402669969, 1.271832197158205e-05

Data -1.448540211341738,-0.01684882329907699, 1.049950669433006e-07

Data -1.448540221908983,-0.01684881859373112, 6.686868933306398e-09

Data -1.448540221650768,-0.01684881825349504, 6.075644447976854e-10

Data -1.448540221693981,-0.01684881825349504, 8.876504632190959e-11

Data -1.448540222056144,-0.01684881831740589, 8.876504632190959e-11

Data -1.448540222056144,-0.01684881831740589, 0.0048015208111237

Data -1.447315834249308,-0.006093411700488804, 0.0048015208111237

Data -1.447575410718678,-0.006302817927879772, 0.0004362629737311815

Data -1.447546060932151,-0.006275194599384553, 0.0001150972020634162

Data -1.447549946836704,-0.006278851921316968, 1.142913103880331e-05

Data -1.447549953773961,-0.006278904154782063, 2.720492973799422e-08

Data -1.447549953773961,-0.006278904154782063, 0.0959551631790438

Data -1.847203208414673,-0.006278904154782063, 0.0959551631790438

Data -1.860985543961812, 5.730536102542537e-05, 0.02472605136870849

Data -1.861382365188764, 0.0001280447521777783, 7.575700083603683e-07

Data -1.861382300909908, 0.000128060841636056, 6.787177454139503e-10

Data -1.861382300909908, 0.000128060841636056, 1.80301591945143

Data  0.1309502900839218, 1.298299522846665, 1.80301591945143

Data -0.1984145909714904, 1.100352449330687, 0.001352409399890011

Data -0.1987733287401083, 1.100407573501614, 8.613151707517529e-05

Data -0.1987927587686087, 1.100406817836918, 1.88916174031882e-06

Data -0.1987926341447898, 1.100406706717228, 7.716645119686126e-08

Data -0.1987926374785418, 1.100406704868181, 2.620466114794424e-10

Data -0.1987926374785418, 1.100406704868181, 0.002943719650420304

Data -0.2065493387573994, 1.106765139313087, 0.002943719650420304

Data -0.206697724315536, 1.106402031123765, 0.0003491424897332628

Data -0.2067125121193846, 1.106368035391356, 1.193999868780553e-05

Data -0.2067148243436442, 1.106365903599446, 9.856968272467161e-08

Data -0.2067148338391115, 1.106365912536355, 1.396392244558323e-08

Data -0.2067148338391115, 1.106365912816002, 6.570202991474562e-10

Data -0.2067148338855405, 1.106365912816002, 4.997933986013956e-11

Data -0.2067148338502975, 1.106365912809265, 4.565903560075121e-12

Data -0.2067148338219658, 1.106365912799768, 4.565903560075121e-12

Data -0.2067148338219658, 1.106365912799768, 1.329455317510298e-07

Data -0.2067143705067878, 1.106365997884909, 1.329455317510298e-07

Data -0.2067143793444081, 1.10636599573528, 3.1423647016843e-11

Data -0.2067143793495975, 1.106365995736637, 3.391748679138347e-12

Data -0.2067143793494169, 1.106365995736712, 2.360785268886536e-13

Data -0.2067143793494169, 1.106365995736712, 8.62035957278071e-08

Data -0.2067139910022188, 1.106366050907014, 8.12035957278071e-08

Data -0.0, 1.106366050907014, 10.0

Data -0.2067139910022188, 0.0, 20.0

Data  0.0, 0.0, 1.0

Data -1.0,-1.0,-1.0





Просмотров: 363 | Добавил: supoinclus | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт

Поиск

Календарь
«  Февраль 2016  »
Пн Вт Ср Чт Пт Сб Вс
1234567
891011121314
15161718192021
22232425262728
29

Архив записей

Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Copyright MyCorp © 2025Бесплатный хостинг uCoz