<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[AmiBlitz³ - Snippets & Libraries]]></title>
		<link>https://www.amiblitz.de/community/</link>
		<description><![CDATA[AmiBlitz³ - https://www.amiblitz.de/community]]></description>
		<pubDate>Thu, 07 May 2026 11:02:02 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[simple vectorstars]]></title>
			<link>https://www.amiblitz.de/community/thread-280.html</link>
			<pubDate>Sat, 20 Jan 2024 21:33:53 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-280.html</guid>
			<description><![CDATA[eine möglichkeit  "vectorstars" zu basteln (unoptimiert)<br />
<br />
1-bitplane screen, rotiert 3 achsen, sin/cos vorberechnet, ausführbar mit aktueller amiblitzversion<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Statement xCls{a.l}<br />
  MOVE.l d0,a0 : ADD.l #40*256,a0<br />
  MOVEQ #0,d0 : MOVEQ #0,d1 : MOVEQ #0,d2  : MOVEQ #0,d3  : MOVEQ #0,d4<br />
  MOVEQ #0,d5 : MOVEQ #0,d6 : MOVE.l d0,a1 : MOVE.l d0,a2 : MOVE.l d0,a3<br />
  MOVE #255,d7<br />
  loop1:MOVEM.l d0-d6/a1-a3,-(a0):DBRA d7,loop1<br />
  AsmExit<br />
End Statement<br />
<br />
BitMap 0,320,256,1<br />
BitMap 1,320,256,1<br />
<br />
AGAPalRGB 0,0,32,22,33<br />
AGAPalRGB 0,1,200,200,200<br />
<br />
NEWTYPE.ball<br />
x.q<br />
y<br />
z<br />
nx<br />
ny<br />
End NEWTYPE<br />
<br />
Dim List balls.ball(50)<br />
<br />
While AddLast(balls())<br />
  balls()&#92;x=Rnd(40)-20<br />
  balls()&#92;y=Rnd(40)-20<br />
  balls()&#92;z=Rnd(40)-20<br />
Wend<br />
<br />
distance.w = 20<br />
<br />
<br />
Dim Costable(360)<br />
Dim Sintable(360)<br />
<br />
For i=0 To 359<br />
Costable(i)=Int( Cos(i*0.017453) *1024 )<br />
Sintable(i)=Int( Sin(i*0.017453) *1024 )<br />
Next<br />
<br />
BLITZ<br />
InitCopList 0,44,256,&#36;10001,8,2,0<br />
<br />
Mouse On<br />
CreateDisplay 0<br />
DisplayBitMap 0,0:DisplayPalette 0,0<br />
Use BitMap db<br />
<br />
While Joyb(0)=0<br />
  VWait<br />
  DisplayBitMap 0,db<br />
  db=1-db<br />
  Use BitMap db<br />
<br />
  xCls{Peek.l (Addr BitMap(db)+8)}<br />
<br />
 vx + 2; X rotation speed<br />
 vy + 1; Y rotation speed<br />
 vz + 1; Z rotation speed<br />
<br />
 If vx&gt;359:vx=1:EndIf<br />
 If vy&gt;359:vy=1:EndIf <br />
 If vz&gt;359:vz=1:EndIf<br />
<br />
 distance=10+MouseY<br />
<br />
  cosx=Costable(vx)<br />
  cosy=Costable(vy)<br />
  cosz=Costable(vz)<br />
  sinx=Sintable(vx)<br />
  siny=Sintable(vy)<br />
  sinz=Sintable(vz)<br />
<br />
ResetList balls()<br />
While NextItem(balls())<br />
<br />
;simply move stars<br />
  balls()&#92;x+1<br />
  If balls()&#92;x&gt;20 Then balls()&#92;x=-20<br />
<br />
;"3d-engine" ^^<br />
  ty = ((balls()&#92;y * cosx) - (balls()&#92;z * sinx))/1024<br />
  tz = ((balls()&#92;y * sinx) + (balls()&#92;z * cosx))/1024<br />
  tx = ((balls()&#92;x * cosy) - (tz * siny))/1024<br />
  tz = ((balls()&#92;x * siny) + (tz * cosy))/1024<br />
 <br />
  balls()&#92;nx  = ( 200 * tx) / (distance - tz )  + 160<br />
  balls()&#92;ny  = ( 200 * ty) / (distance - tz)   + 127<br />
<br />
  nodraw=0<br />
  If balls()&#92;nx &gt; 319 : nodraw=1 : EndIf<br />
  If balls()&#92;ny &gt; 255 : nodraw=1 : EndIf<br />
  If balls()&#92;nx &lt; 1   : nodraw=1 : EndIf<br />
  If balls()&#92;ny &lt; 1   : nodraw=1 : EndIf<br />
  <br />
  If nodraw=0<br />
  Plot balls()&#92;nx,balls()&#92;ny,1<br />
  EndIf  <br />
<br />
  Wend<br />
Wend<br />
<br />
End</code></div></div>]]></description>
			<content:encoded><![CDATA[eine möglichkeit  "vectorstars" zu basteln (unoptimiert)<br />
<br />
1-bitplane screen, rotiert 3 achsen, sin/cos vorberechnet, ausführbar mit aktueller amiblitzversion<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Statement xCls{a.l}<br />
  MOVE.l d0,a0 : ADD.l #40*256,a0<br />
  MOVEQ #0,d0 : MOVEQ #0,d1 : MOVEQ #0,d2  : MOVEQ #0,d3  : MOVEQ #0,d4<br />
  MOVEQ #0,d5 : MOVEQ #0,d6 : MOVE.l d0,a1 : MOVE.l d0,a2 : MOVE.l d0,a3<br />
  MOVE #255,d7<br />
  loop1:MOVEM.l d0-d6/a1-a3,-(a0):DBRA d7,loop1<br />
  AsmExit<br />
End Statement<br />
<br />
BitMap 0,320,256,1<br />
BitMap 1,320,256,1<br />
<br />
AGAPalRGB 0,0,32,22,33<br />
AGAPalRGB 0,1,200,200,200<br />
<br />
NEWTYPE.ball<br />
x.q<br />
y<br />
z<br />
nx<br />
ny<br />
End NEWTYPE<br />
<br />
Dim List balls.ball(50)<br />
<br />
While AddLast(balls())<br />
  balls()&#92;x=Rnd(40)-20<br />
  balls()&#92;y=Rnd(40)-20<br />
  balls()&#92;z=Rnd(40)-20<br />
Wend<br />
<br />
distance.w = 20<br />
<br />
<br />
Dim Costable(360)<br />
Dim Sintable(360)<br />
<br />
For i=0 To 359<br />
Costable(i)=Int( Cos(i*0.017453) *1024 )<br />
Sintable(i)=Int( Sin(i*0.017453) *1024 )<br />
Next<br />
<br />
BLITZ<br />
InitCopList 0,44,256,&#36;10001,8,2,0<br />
<br />
Mouse On<br />
CreateDisplay 0<br />
DisplayBitMap 0,0:DisplayPalette 0,0<br />
Use BitMap db<br />
<br />
While Joyb(0)=0<br />
  VWait<br />
  DisplayBitMap 0,db<br />
  db=1-db<br />
  Use BitMap db<br />
<br />
  xCls{Peek.l (Addr BitMap(db)+8)}<br />
<br />
 vx + 2; X rotation speed<br />
 vy + 1; Y rotation speed<br />
 vz + 1; Z rotation speed<br />
<br />
 If vx&gt;359:vx=1:EndIf<br />
 If vy&gt;359:vy=1:EndIf <br />
 If vz&gt;359:vz=1:EndIf<br />
<br />
 distance=10+MouseY<br />
<br />
  cosx=Costable(vx)<br />
  cosy=Costable(vy)<br />
  cosz=Costable(vz)<br />
  sinx=Sintable(vx)<br />
  siny=Sintable(vy)<br />
  sinz=Sintable(vz)<br />
<br />
ResetList balls()<br />
While NextItem(balls())<br />
<br />
;simply move stars<br />
  balls()&#92;x+1<br />
  If balls()&#92;x&gt;20 Then balls()&#92;x=-20<br />
<br />
;"3d-engine" ^^<br />
  ty = ((balls()&#92;y * cosx) - (balls()&#92;z * sinx))/1024<br />
  tz = ((balls()&#92;y * sinx) + (balls()&#92;z * cosx))/1024<br />
  tx = ((balls()&#92;x * cosy) - (tz * siny))/1024<br />
  tz = ((balls()&#92;x * siny) + (tz * cosy))/1024<br />
 <br />
  balls()&#92;nx  = ( 200 * tx) / (distance - tz )  + 160<br />
  balls()&#92;ny  = ( 200 * ty) / (distance - tz)   + 127<br />
<br />
  nodraw=0<br />
  If balls()&#92;nx &gt; 319 : nodraw=1 : EndIf<br />
  If balls()&#92;ny &gt; 255 : nodraw=1 : EndIf<br />
  If balls()&#92;nx &lt; 1   : nodraw=1 : EndIf<br />
  If balls()&#92;ny &lt; 1   : nodraw=1 : EndIf<br />
  <br />
  If nodraw=0<br />
  Plot balls()&#92;nx,balls()&#92;ny,1<br />
  EndIf  <br />
<br />
  Wend<br />
Wend<br />
<br />
End</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Barnsley fern fractal]]></title>
			<link>https://www.amiblitz.de/community/thread-271.html</link>
			<pubDate>Sun, 26 Feb 2023 16:16:19 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-271.html</guid>
			<description><![CDATA[This is a fun to do fractal with lots of numbers to play with for diffferent results.<br />
<br />
You can read more about the algorithm and example code here:<br />
<br />
<a href="https://en.wikipedia.org/wiki/Barnsley_fern" target="_blank" rel="noopener" class="mycode_url">https://en.wikipedia.org/wiki/Barnsley_fern</a><br />
<br />
This is a quick implementation in BlitzBasic.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>WbToScreen1<br />
<br />
<br />
num.l=1000000    ;number of iterations<br />
<br />
Window1,0,0,ScreenWidth,ScreenHeight,&#36;140F,"Barnsley fern fractal. it="+Str&#36;(num),2,1<br />
<br />
ResetTimer<br />
<br />
x.q     = 0<br />
y.q     = 0<br />
nextX.q = 0<br />
nextY.q = 0<br />
<br />
originX =  ScreenWidth / 2<br />
<br />
s = Min( ScreenWidth, ScreenHeight ) / 10<br />
<br />
For i.l = 1 To num<br />
     a.q = Rnd<br />
<br />
     If a.q &lt; 0.01<br />
          nextX.q = 0<br />
          nextY.q = 0.16 * y.q<br />
     Else<br />
<br />
        If a.q &gt;= 0.01 AND a.q &lt; 0.08<br />
<br />
              nextX.q = 0.2 * x.q - 0.26 * y.q<br />
              nextY.q = 0.23 * x.q + 0.22 * y.q + 1.6<br />
        Else<br />
<br />
          If a.q &gt;= 0.08 AND a.q &lt; 0.15<br />
<br />
              nextX.q = -0.15 * x.q + 0.28 * y.q<br />
              nextY.q = 0.26 * x.q + 0.24 * y.q + 0.44<br />
<br />
          Else<br />
<br />
              nextX.q = 0.85 * x.q + 0.04 * y.q<br />
              nextY.q = -0.04 * x.q + 0.85 * y.q + 1.6<br />
<br />
          EndIf<br />
<br />
        EndIf<br />
<br />
     EndIf<br />
<br />
     x.q = nextX.q<br />
     y.q = nextY.q<br />
<br />
     WPlot x.q * s + originX, y.q * s,1<br />
Next<br />
<br />
Print Ticks," ticks"<br />
<br />
Repeat<br />
<br />
Until WaitEvent=&#36;200   ;windowclose<br />
<br />
End</code></div></div>and this is how it looks like:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=130" target="_blank" title="">fern_bb2.png</a> (Größe: 196,17 KB / Downloads: 1143)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[This is a fun to do fractal with lots of numbers to play with for diffferent results.<br />
<br />
You can read more about the algorithm and example code here:<br />
<br />
<a href="https://en.wikipedia.org/wiki/Barnsley_fern" target="_blank" rel="noopener" class="mycode_url">https://en.wikipedia.org/wiki/Barnsley_fern</a><br />
<br />
This is a quick implementation in BlitzBasic.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>WbToScreen1<br />
<br />
<br />
num.l=1000000    ;number of iterations<br />
<br />
Window1,0,0,ScreenWidth,ScreenHeight,&#36;140F,"Barnsley fern fractal. it="+Str&#36;(num),2,1<br />
<br />
ResetTimer<br />
<br />
x.q     = 0<br />
y.q     = 0<br />
nextX.q = 0<br />
nextY.q = 0<br />
<br />
originX =  ScreenWidth / 2<br />
<br />
s = Min( ScreenWidth, ScreenHeight ) / 10<br />
<br />
For i.l = 1 To num<br />
     a.q = Rnd<br />
<br />
     If a.q &lt; 0.01<br />
          nextX.q = 0<br />
          nextY.q = 0.16 * y.q<br />
     Else<br />
<br />
        If a.q &gt;= 0.01 AND a.q &lt; 0.08<br />
<br />
              nextX.q = 0.2 * x.q - 0.26 * y.q<br />
              nextY.q = 0.23 * x.q + 0.22 * y.q + 1.6<br />
        Else<br />
<br />
          If a.q &gt;= 0.08 AND a.q &lt; 0.15<br />
<br />
              nextX.q = -0.15 * x.q + 0.28 * y.q<br />
              nextY.q = 0.26 * x.q + 0.24 * y.q + 0.44<br />
<br />
          Else<br />
<br />
              nextX.q = 0.85 * x.q + 0.04 * y.q<br />
              nextY.q = -0.04 * x.q + 0.85 * y.q + 1.6<br />
<br />
          EndIf<br />
<br />
        EndIf<br />
<br />
     EndIf<br />
<br />
     x.q = nextX.q<br />
     y.q = nextY.q<br />
<br />
     WPlot x.q * s + originX, y.q * s,1<br />
Next<br />
<br />
Print Ticks," ticks"<br />
<br />
Repeat<br />
<br />
Until WaitEvent=&#36;200   ;windowclose<br />
<br />
End</code></div></div>and this is how it looks like:<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=130" target="_blank" title="">fern_bb2.png</a> (Größe: 196,17 KB / Downloads: 1143)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Protracker Module Header]]></title>
			<link>https://www.amiblitz.de/community/thread-221.html</link>
			<pubDate>Mon, 18 Jan 2021 22:28:17 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-221.html</guid>
			<description><![CDATA[Ich hatte mal ein altes Tool gemacht, mit dem man ganze Verzeichnisse nach MODs absuchen konnte, rekursiv.<br />
<br />
Da letztens im EAB Forum die Frage aufkam, wie man an die Samples kommt, hier mal als Erstes zum Einstieg die Aufdröselung der Samples, noch ohne die eigentlichen Daten, die sind am Ende nach den Patterns.<br />
Hoffe, das hilft jemandem:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Dim mtyp&#36;(5)<br />
mtyp&#36;(1)="ProTr"<br />
mtyp&#36;(2)="SoundTr"<br />
mtyp&#36;(3)="NoiseTr"<br />
mtyp&#36;(4)=""<br />
mtyp&#36;(5)="?(PPack)"<br />
<br />
DEFTYPE.l<br />
<br />
#typoffset=&#36;438    ;=1080<br />
<br />
c&#36;=Chr&#36;(10)<br />
<br />
Function.w checkmod{f&#36;}<br />
<br />
result.b=0:real&#36;=""<br />
fhand.l=Open_(f&#36;,1005)<br />
<br />
If fhand&gt;0<br />
  buf.l=AllocMem_(&#36;500,#MEMF_PUBLIC|#MEMF_CLEAR)<br />
  If buf&gt;0<br />
    Read_ fhand,buf,&#36;500<br />
    Close_ fhand<br />
<br />
    If Mkl&#36;(Peek.l(buf))="PP20"<br />
<br />
      result=5<br />
<br />
    Else<br />
      md&#36;=Mkl&#36;(Peek.l(buf+#typoffset))<br />
<br />
      Select md&#36;<br />
<br />
        Case"M.K.":result=1<br />
<br />
          real&#36;=Left&#36;(Peek&#36;(buf),20)<br />
<br />
          NPrint "-------------- ",f&#36;," --------------"<br />
          NPrint "name: ",real&#36;<br />
<br />
          Gosub getsamp<br />
<br />
        Case"FLT4":result=2<br />
        Case"M&amp;K!":result=3<br />
<br />
      End Select<br />
    EndIf<br />
<br />
    FreeMem_ buf,&#36;500<br />
  Else<br />
    result=0:Close_ fhand:Goto ex<br />
  EndIf<br />
Else<br />
  result=0;:Goto ex<br />
EndIf<br />
<br />
ex:Function Return result<br />
getsamp:<br />
  NPrint"Samples:"<br />
  ssize.w=30 ;sample info block size<br />
  snums.w=30 ;<br />
<br />
  spos.w  =20  ;start sib`s<br />
<br />
  For n.w=0 To snums  ;#=31<br />
<br />
    dum&#36;=PeekToStr(buf+spos,0,22)<br />
<br />
    dsz.w=Peek.w(buf+spos+22) *2   ;size in bytes<br />
<br />
    Format"#0":Print Str&#36;(n),": "<br />
    Format""<br />
    If dum&#36;&lt;&gt;""<br />
      NPrint LSet&#36;(dum&#36;,23)," &gt; ",Str&#36;(dsz)<br />
    Else<br />
      NPrint LSet&#36;("&lt;noname&gt;",23)," &gt; ",Str&#36;(dsz)<br />
    EndIf<br />
<br />
    spos + ssize<br />
  Next<br />
<br />
  Format""<br />
Return<br />
End Function</code></div></div>Aufrufen der Funktion mit <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>typ = checkmod {"path/filename"}<br />
nprint mtyp&#36;(typ)</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=41" target="_blank" title="">007.png</a> (Größe: 256,54 KB / Downloads: 1818)
<!-- end: postbit_attachments_attachment --><br />
<hr class="mycode_hr" />
Für mehr braucht man eigentlich nur die 'ptmodformat' Dokumentation, oder z.B:<br />
<a href="https://githup.com/raspi/trackermod" target="_blank" rel="noopener" class="mycode_url">https://githup.com/raspi/trackermod</a><br />
<br />
Man sollte aber natürlich Grundkenntnisse haben, das hilft.<br />
<hr class="mycode_hr" />
Hier noch schnell die Executables.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/" title="LHA" border="0" alt=".lha" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=42" target="_blank" title="">Checkmod_test.lha</a> (Größe: 9,23 KB / Downloads: 1)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/" title="LHA" border="0" alt=".lha" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=43" target="_blank" title="">Checkmod03.lha</a> (Größe: 6,28 KB / Downloads: 1)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Ich hatte mal ein altes Tool gemacht, mit dem man ganze Verzeichnisse nach MODs absuchen konnte, rekursiv.<br />
<br />
Da letztens im EAB Forum die Frage aufkam, wie man an die Samples kommt, hier mal als Erstes zum Einstieg die Aufdröselung der Samples, noch ohne die eigentlichen Daten, die sind am Ende nach den Patterns.<br />
Hoffe, das hilft jemandem:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Dim mtyp&#36;(5)<br />
mtyp&#36;(1)="ProTr"<br />
mtyp&#36;(2)="SoundTr"<br />
mtyp&#36;(3)="NoiseTr"<br />
mtyp&#36;(4)=""<br />
mtyp&#36;(5)="?(PPack)"<br />
<br />
DEFTYPE.l<br />
<br />
#typoffset=&#36;438    ;=1080<br />
<br />
c&#36;=Chr&#36;(10)<br />
<br />
Function.w checkmod{f&#36;}<br />
<br />
result.b=0:real&#36;=""<br />
fhand.l=Open_(f&#36;,1005)<br />
<br />
If fhand&gt;0<br />
  buf.l=AllocMem_(&#36;500,#MEMF_PUBLIC|#MEMF_CLEAR)<br />
  If buf&gt;0<br />
    Read_ fhand,buf,&#36;500<br />
    Close_ fhand<br />
<br />
    If Mkl&#36;(Peek.l(buf))="PP20"<br />
<br />
      result=5<br />
<br />
    Else<br />
      md&#36;=Mkl&#36;(Peek.l(buf+#typoffset))<br />
<br />
      Select md&#36;<br />
<br />
        Case"M.K.":result=1<br />
<br />
          real&#36;=Left&#36;(Peek&#36;(buf),20)<br />
<br />
          NPrint "-------------- ",f&#36;," --------------"<br />
          NPrint "name: ",real&#36;<br />
<br />
          Gosub getsamp<br />
<br />
        Case"FLT4":result=2<br />
        Case"M&amp;K!":result=3<br />
<br />
      End Select<br />
    EndIf<br />
<br />
    FreeMem_ buf,&#36;500<br />
  Else<br />
    result=0:Close_ fhand:Goto ex<br />
  EndIf<br />
Else<br />
  result=0;:Goto ex<br />
EndIf<br />
<br />
ex:Function Return result<br />
getsamp:<br />
  NPrint"Samples:"<br />
  ssize.w=30 ;sample info block size<br />
  snums.w=30 ;<br />
<br />
  spos.w  =20  ;start sib`s<br />
<br />
  For n.w=0 To snums  ;#=31<br />
<br />
    dum&#36;=PeekToStr(buf+spos,0,22)<br />
<br />
    dsz.w=Peek.w(buf+spos+22) *2   ;size in bytes<br />
<br />
    Format"#0":Print Str&#36;(n),": "<br />
    Format""<br />
    If dum&#36;&lt;&gt;""<br />
      NPrint LSet&#36;(dum&#36;,23)," &gt; ",Str&#36;(dsz)<br />
    Else<br />
      NPrint LSet&#36;("&lt;noname&gt;",23)," &gt; ",Str&#36;(dsz)<br />
    EndIf<br />
<br />
    spos + ssize<br />
  Next<br />
<br />
  Format""<br />
Return<br />
End Function</code></div></div>Aufrufen der Funktion mit <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>typ = checkmod {"path/filename"}<br />
nprint mtyp&#36;(typ)</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=41" target="_blank" title="">007.png</a> (Größe: 256,54 KB / Downloads: 1818)
<!-- end: postbit_attachments_attachment --><br />
<hr class="mycode_hr" />
Für mehr braucht man eigentlich nur die 'ptmodformat' Dokumentation, oder z.B:<br />
<a href="https://githup.com/raspi/trackermod" target="_blank" rel="noopener" class="mycode_url">https://githup.com/raspi/trackermod</a><br />
<br />
Man sollte aber natürlich Grundkenntnisse haben, das hilft.<br />
<hr class="mycode_hr" />
Hier noch schnell die Executables.<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/" title="LHA" border="0" alt=".lha" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=42" target="_blank" title="">Checkmod_test.lha</a> (Größe: 9,23 KB / Downloads: 1)
<!-- end: postbit_attachments_attachment --><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/" title="LHA" border="0" alt=".lha" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=43" target="_blank" title="">Checkmod03.lha</a> (Größe: 6,28 KB / Downloads: 1)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[bPaint (AMOS Recreation) mit Src]]></title>
			<link>https://www.amiblitz.de/community/thread-208.html</link>
			<pubDate>Sun, 06 Sep 2020 19:36:50 +0200</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-208.html</guid>
			<description><![CDATA[Ich hab hier mal einen alten Sourcecode ausgebuddelt. Den hatte ich letztes Jahr oder so nochmal angefaßt zwecks Bugfixes oder so.<br />
<br />
Kann vielleicht als hilfreiches Beispiel dienen. <br />
<br />
Das ist in keinem Falle als ausgereiftes, fertiges Programm anzusehen! <img src="https://www.amiblitz.de/community/images/smilies/blush.png" alt="Blush" title="Blush" class="smilie smilie_12" /> <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=35" target="_blank" title="">bpaint_grab.jpg</a> (Größe: 68,68 KB / Downloads: 1904)
<!-- end: postbit_attachments_attachment --><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>.<br />
.rev<br />
;################################################################################<br />
;#                                                                              #<br />
;#  Source     :    bpaint_sys.bb                                         #<br />
;#                                                                              #<br />
;#  Description:    recreation of AMOS paint (unfinished)                                                #<br />
;#                                                                              #<br />
;#  Author     :    Frank Brandis                                               #<br />
;#                                                                              #<br />
;#  Exec       :    Blitz2:Execs/Foo                                            #<br />
;#                                                                              #<br />
;#  Date of                                                                     #<br />
;#  Creation   :                                                                #<br />
;#                                                                              #<br />
;#  Date of                                                                     #<br />
;#  Update(s)  :                                                                #<br />
;#                                                                              #<br />
;#                                                                              #<br />
;#  To do      :                                                                #<br />
;#                                                                              #<br />
;#                                                                              #<br />
;################################################################################<br />
;<br />
.his<br />
;################################################################################<br />
;#                                                                              #<br />
;#  History    :                                                                #<br />
;#                                                                              #<br />
;#                                                                              #<br />
;################################################################################<br />
;<br />
<br />
.<br />
;################################################################################<br />
<br />
<br />
<br />
;<br />
<br />
<br />
<br />
<br />
;gadgets, modes<br />
<br />
#up         =1<br />
#down       =2<br />
#left       =3<br />
#right      =4<br />
#tobuffer   =5<br />
#frombuffer =6<br />
#insertframe=7<br />
#deleteframe=8<br />
#playanim   =9<br />
#save       =10<br />
#load       =11<br />
#freihand   =12<br />
#bogen      =13<br />
#linie      =14<br />
#rechteck   =15<br />
#ellipse    =16<br />
#text       =17<br />
#lupe       =18<br />
#cut        =19<br />
#rotier     =20<br />
#flipx      =21<br />
#flipy      =22<br />
#clear      =23<br />
#undo       =24<br />
#info       =25<br />
<br />
;windows<br />
<br />
#picwin   =2<br />
#toolwin  =1<br />
#palwin   =3<br />
#zoomwin  =4<br />
<br />
NEWTYPE.box<br />
 x.w<br />
 y.w<br />
 w.w<br />
 h.w<br />
End NEWTYPE<br />
<br />
DEFTYPE.box statbar   ;statusbar<br />
<br />
statbar&#92;x=0,22,36*8+12,10<br />
<br />
Dim palpen.box(32)     ;dims are added within drawpal{}<br />
<br />
<br />
DEFTYPE.w<br />
<br />
Dim modetxt&#36;(30)<br />
Read nummodes<br />
For i=1 To nummodes<br />
  Read modetxt&#36;(i)<br />
Next<br />
Data.w 25<br />
Data.s "up","down","left","right","tobuffer","frombuffer"<br />
Data.s "insertframe","deleteframe","playanim","save"<br />
Data.s "load","freihand","bogen","linie","rechteck","ellipse"<br />
Data.s "text","lupe","cut","rotier","flipx","flipy","clear","undo","info"<br />
<br />
<br />
MaxLen pa&#36;=450<br />
MaxLen fi&#36;=180<br />
<br />
.funcs<br />
Statement clrstatus {col.w}<br />
 SHARED statbar.box<br />
 ;Use Window #toolwin<br />
 USEPATH statbar<br />
<br />
 WBox &#92;x+1,&#92;y+1,&#92;x+&#92;w-1,&#92;y+&#92;h-1,col<br />
<br />
 USEPATH ycy<br />
<br />
End Statement<br />
<br />
Statement drawstatus {}<br />
 SHARED statbar.box<br />
 Use Window #toolwin<br />
 USEPATH statbar<br />
 ;border<br />
 Wline &#92;x,&#92;y+&#92;h,&#92;x,&#92;y,&#92;x+&#92;w,&#92;y,2<br />
 Wline &#92;x+&#92;w,&#92;y,&#92;x+&#92;w,&#92;y+&#92;h,&#92;x,&#92;y+&#92;h,4<br />
 USEPATH ycy<br />
End Statement<br />
<br />
<br />
Statement status {txt&#36;,col.w}<br />
 SHARED statbar.box<br />
 Use Window #toolwin<br />
 USEPATH statbar<br />
<br />
 clrstatus {3}<br />
<br />
 WindowOutput1<br />
<br />
 WLocate &#92;x+3,&#92;y+2<br />
 WColour col,3<br />
 Print   txt&#36;<br />
<br />
 USEPATH ycy<br />
<br />
End Statement<br />
<br />
Statement drwstatus{mode.w}<br />
 SHARED nummodes.w<br />
 SHARED modetxt&#36;()<br />
<br />
 If mode &gt;0 AND mode&lt;=nummodes<br />
   status{"&gt;"+modetxt&#36;(mode)+"&lt;",1}<br />
 Else<br />
   status{"?",7}<br />
 EndIf<br />
End Statement<br />
<br />
Statement drawrect{x1,y1,x2,y2,col}<br />
 Wline x1,y1,x2,y1,x2,y2,x1,y2,x1,y1,col<br />
End Statement<br />
<br />
<br />
Statement newscreen{wid.w,heid.w,dep.w,mode.l}<br />
  SHARED d,w,h<br />
  If w&lt;320 Then w=320<br />
  If h&lt;256 Then h=256<br />
<br />
  Screen #picwin,0,0,wid,heid,dep,mode,"",0,0<br />
  ScreensBitMap #picwin,0<br />
<br />
  ShowPalette #picwin<br />
<br />
  d=dep:w=wid:h=heid<br />
  Window #picwin,0,0,w,h,&#36;800,"",1,0<br />
  MenusOff<br />
  Use BitMap 0:Cls<br />
<br />
End Statement<br />
<br />
CNIF0       ;vertical<br />
Statement openpal{}<br />
 SHARED palstatus.b<br />
 If palstatus=0<br />
   Use Screen #picwin<br />
   Window #palwin,0,0,14,ScreenHeight,&#36;802,"p",0,0<br />
   palstatus=1<br />
 EndIf<br />
End Statement<br />
<br />
Statement drawpal{}<br />
  Use Window #palwin<br />
  WCls<br />
  wh=212<br />
  ws=wh/32<br />
  c=0<br />
  For gy=0 To wh Step ws<br />
    WBox 0,gy,14,gy+ws-1,c<br />
    c+1<br />
  Next<br />
End Statement<br />
CEND<br />
<br />
Statement openpal{}<br />
 SHARED palstatus.b<br />
 If palstatus=0<br />
   Use Screen #picwin<br />
   Window #palwin,0,0,ScreenWidth,14,&#36;800,"",0,0<br />
   palstatus=1<br />
 EndIf<br />
End Statement<br />
<br />
Statement drawpal{}<br />
  SHARED palpen.box()<br />
<br />
  Use Window #palwin<br />
  WCls<br />
  ww=WindowWidth<br />
  ws=ww/32<br />
  c=0<br />
  For gx=0 To ww Step ws<br />
    WBox gx,0,gx+ws-1,14,c<br />
<br />
    palpen(c)&#92;x=gx,y,ws-1,14<br />
<br />
    c+1<br />
  Next<br />
End Statement<br />
<br />
Function.w palhit {x.w,y.w}<br />
  SHARED palpen.box()<br />
  res.w=-1<br />
  c=0<br />
  USEPATH palpen(c)<br />
<br />
  Repeat<br />
    If RectsHit (x,y,1,1,&#92;x,&#92;y,&#92;w,&#92;h)<br />
      res=c<br />
    EndIf<br />
    c+1<br />
  Until c&gt;32 OR res=&gt;0<br />
<br />
  USEPATH vxxx<br />
<br />
  Function Return res ; -1 = FAIL !<br />
End Function<br />
<br />
._setup<br />
AddIDCMP&#36;10<br />
AutoCookie On<br />
<br />
<br />
;Format"00"<br />
For gad=1To25<br />
; LoadShape gad,"bpaintshps/bpaintshape."+Str&#36;(gad),0<br />
; LoadShape gad+25,"bpaintshps/bpaintshape."+Str&#36;(gad+25),0<br />
  InitShape gad,10,10,2<br />
  InitShape gad+25,10,10,2<br />
<br />
Next<br />
;Format""<br />
;SaveShapes1,50,"bpaint.shps"<br />
;SavePalette0,"bpaint.pal"<br />
LoadShapes1,"BlitzINC:_dat/bpaint.shps"<br />
LoadPalette #toolwin,"BlitzINC:_dat/iff/bpaint.br"<br />
<br />
LoadPalette #picwin,"ENV:dpaint32.col"<br />
<br />
<br />
ShapeGadget 0,010,00,0  ,#up         ,01,1+25<br />
ShapeGadget 0,010,11,0  ,#down       ,02,2+25<br />
ShapeGadget 0,000,06,0  ,#left       ,03,3+25<br />
ShapeGadget 0,020,06,0  ,#right      ,04,4+25<br />
ShapeGadget 0,030,00,0  ,#tobuffer   ,05,5+25<br />
ShapeGadget 0,068,00,0  ,#frombuffer ,06,6+25<br />
ShapeGadget 0,106,00,0  ,#insertframe,07,7+25<br />
ShapeGadget 0,144,00,0  ,#deleteframe,08,8+25<br />
ShapeGadget 0,182,00,0  ,#playanim   ,09,9+25<br />
ShapeGadget 0,263,00,0  ,#save       ,10,10+25<br />
ShapeGadget 0,292,00,0  ,#load       ,11,11+25<br />
ButtonGroup1<br />
ShapeGadget 0,  0,33,512,#freihand   ,12,12+25:Toggle0,12,On<br />
ShapeGadget 0, 19,33,512,#bogen,13   ,13+25   :Disable0,#bogen<br />
ShapeGadget 0, 38,33,512,#linie,14   ,14+25<br />
ShapeGadget 0, 57,33,512,#rechteck   ,15,15+25<br />
ShapeGadget 0, 76,33,512,#ellipse    ,16,16+25<br />
ShapeGadget 0, 95,33,512,#text       ,17,17+25:Disable0,#text<br />
ShapeGadget 0,133,33,512,#cut        ,19,19+25<br />
<br />
ShapeGadget 0,114,33,1  ,#lupe       ,18,18+25<br />
ShapeGadget 0,152,33,0  ,#rotier     ,20,20+25<br />
ShapeGadget 0,171,33,0  ,#flipx      ,21,21+25<br />
ShapeGadget 0,190,33,0  ,#flipy      ,22,22+25<br />
ShapeGadget 0,263,33,0  ,#clear      ,23,23+25<br />
ShapeGadget 0,282,33,0  ,#undo       ,24,24+25<br />
ShapeGadget 0,301,22,0  ,#info       ,25,25+25<br />
<br />
LoadFont1,"Fiona.font",8<br />
<br />
w.w=320<br />
h.w=256<br />
<br />
newscreen{w,h,5,0}<br />
<br />
<br />
Screen #toolwin,0,211,320,45,3,0,"",0,0<br />
ShowPalette #toolwin<br />
RGB7,15,2,1<br />
Window #toolwin,0,0,320,45,&#36;1000|&#36;800,"",0,0,0 ;toolbox<br />
WindowFont1<br />
MenusOff<br />
WBox0,0,320,43,3:For gad=1To25:Redraw1,gad:Next gad<br />
<br />
drawstatus{}<br />
<br />
status{"Welcome to bPaint",7}<br />
Delay_50<br />
<br />
<br />
;Gosub getname<br />
<br />
frontcol.w=1<br />
backcol.w =0<br />
drawcol=1<br />
<br />
drawmod.b=#freihand<br />
<br />
drwstatus{#freihand}<br />
<br />
exit=0<br />
.<br />
.main<br />
Repeat<br />
<br />
 ev.l=WaitEvent<br />
<br />
 If EventWindow=#picwin<br />
<br />
   Select ev<br />
<br />
     Case&#36;10<br />
       If frontpen=-1           ;brush<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         drawrect{wx-rx,wy-ry,wx+rx,wy+ry,frontcol}<br />
         WaitTOF_<br />
         drawrect{wx-rx,wy-ry,wx+rx,wy+ry,frontcol}<br />
         WJam0<br />
       EndIf<br />
<br />
     Case&#36;8<br />
       Use Window #picwin<br />
       oldx=WMouseX:oldy=WMouseY<br />
<br />
       Select MButtons<br />
         Case2<br />
       ;    drawcol=backcol<br />
           Gosub dodraw<br />
         Case1<br />
       ;    drawcol=frontcol<br />
           Gosub dodraw<br />
       End Select<br />
<br />
     Default<br />
       Gosub intuicodes<br />
   End Select<br />
<br />
 Else<br />
<br />
   Gosub intuicodes<br />
<br />
 EndIf<br />
<br />
Until exit<br />
<br />
CloseWindow #picwin:CloseWindow #toolwin<br />
Free BitMap0<br />
CloseScreen #picwin:CloseScreen #toolwin<br />
End<br />
.<br />
<br />
.dodraw<br />
   Select drawmod<br />
     Case#freihand<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         If frontpen&lt;&gt;-1<br />
           WPlot wx,wy,drawcol<br />
           Wline oldx,oldy,wx,wy,drawcol<br />
           oldx=wx:oldy=wy<br />
         Else<br />
           Use BitMap0<br />
           ClipBlit0,wx,wy<br />
         EndIf<br />
       Gosub updatelup<br />
       Wend<br />
<br />
     Case#linie<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         Wline oldx,oldy,wx,wy,drawcol<br />
         VWait:Wline oldx,oldy,wx,wy,drawcol<br />
       Wend<br />
       WJam0<br />
       Wline oldx,oldy,wx,wy,drawcol<br />
<br />
     Case#rechteck<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         drawrect{oldx,oldy,wx,wy,drawcol}<br />
         VWait:drawrect{oldx,oldy,wx,wy,drawcol}<br />
       Wend<br />
       WJam0<br />
         drawrect{oldx,oldy,wx,wy,drawcol}<br />
<br />
     Case#ellipse<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         xrad=QAbs(oldx-wx):yrad=QAbs(oldy-wy)<br />
         WEllipse oldx,oldy,xrad,yrad,drawcol<br />
         VWait:WEllipse oldx,oldy,xrad,yrad,drawcol<br />
       Wend<br />
       WJam0<br />
<br />
       WEllipse oldx,oldy,xrad,yrad,drawcol<br />
<br />
     Case#cut<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         drawrect{oldx,oldy,wx,wy,drawcol}<br />
         VWait:drawrect{oldx,oldy,wx,wy,drawcol}<br />
       Wend<br />
       WJam0<br />
<br />
       If wx&lt;oldx Then Exchange wx,oldx<br />
       If wy&lt;oldy Then Exchange wy,oldy<br />
       If wx=oldx OR wy=oldy Then Goto cute<br />
       GetaShape0,oldx,oldy,wx-oldx,wy-oldy<br />
       MakeCookie0<br />
       sw=ShapeWidth(0)<br />
       sh=ShapeHeight(0)<br />
       rx=sw/2:ry=sh/2<br />
       Handle0,rx,ry<br />
       frontpen=-1<br />
       cute:<br />
   End Select<br />
Return<br />
.<br />
.intuicodes<br />
 Select ev<br />
._mbut<br />
   Case&#36;8<br />
     If EventWindow=#palwin<br />
       res=palhit{WMouseX,WMouseY}<br />
<br />
       If res&gt;-1<br />
         drawcol=res<br />
         status{"col="+Str&#36;(drawcol),1}<br />
         Use Window #palwin<br />
       EndIf<br />
<br />
     EndIf<br />
   Case&#36;40<br />
._gads<br />
     Select GadgetHit<br />
       Case #up<br />
       Case #down<br />
       Case #left<br />
       Case #right<br />
       Case #tobuffer<br />
       Case #frombuffer<br />
       Case #insertframe<br />
       Case #deleteframe<br />
       Case #playanim<br />
       Case #save<br />
       Case #load        :Gosub loadpic<br />
       Case #freihand    :drawmod=#freihand<br />
       Case #bogen<br />
       Case #linie       :drawmod=#linie<br />
       Case #rechteck    :drawmod=#rechteck<br />
       Case #ellipse     :drawmod=#ellipse<br />
       Case #text<br />
       Case #lupe:If GadgetStatus(0,#lupe)Then Gosub openlup Else Gosub closelup<br />
       Case #cut         :drawmod=#cut<br />
       Case #rotier<br />
       Case #flipx<br />
       Case #flipy<br />
       Case #clear<br />
         ;Use BitMap0:Cls backcol<br />
         Use Window #picwin:WCls<br />
<br />
       Case #undo<br />
       Case #info<br />
     End Select<br />
     drwstatus{drawmod}<br />
   Case&#36;400<br />
._keys<br />
     ev&#36;=LCase&#36;(Inkey&#36;)<br />
     Select ev&#36;<br />
       Case Chr&#36;(27):exit=1   ;QUIT<br />
       Case "p"<br />
         If palstatus=0<br />
           uwin=Used Window<br />
           openpal{}<br />
           drawpal{}<br />
           Activate #picwin: Use Window #picwin<br />
         Else<br />
           CloseWindow #palwin:palstatus=0<br />
           Use Window uwin<br />
         EndIf<br />
      ;   status{"Palette not implemented",7}<br />
      ;   Delay_50<br />
      ;   drwstatus{drawmod}<br />
     End Select<br />
 End Select<br />
Return<br />
.<br />
.loadpic<br />
 FindScreen0,"board"<br />
 g&#36;=ASLFileRequest&#36;("name of picture to load",pa&#36;,fi&#36;,pat&#36;)<br />
 If g&#36;&lt;&gt;""<br />
   If ILBMInfo(g&#36;)<br />
     FlushEvents&#36;400000<br />
     VWait12<br />
     CloseWindow #picwin<br />
     VWait12<br />
     Free BitMap0<br />
     VWait12<br />
     CloseScreen #picwin<br />
     VWait12<br />
     newscreen{ILBMWidth,ILBMHeight,ILBMDepth,ILBMViewMode}<br />
     LoadBitMap0,g&#36;,#picwin:ShowPalette #picwin<br />
   EndIf<br />
 EndIf<br />
Return<br />
.<br />
.openlup<br />
 Use Screen #picwin<br />
 Window #zoomwin,w/2,14,w/2,h-14-45,&#36;800,"",0,0<br />
 WCls 1<br />
; BitMap 1,320,256,d<br />
; BitMap 2,320,256,d<br />
Return<br />
<br />
.closelup<br />
; Free BitMap1<br />
; Free BitMap2<br />
 CloseWindow#zoomwin<br />
 Use Window #picwin<br />
Return<br />
<br />
<br />
<br />
.updatelup:<br />
;  Use BitMap 1: BitMapOutput1                        ;do actual zooming!<br />
;  x=xm-azoom3 : y=ym-bzoom3                        ;subtract zoom width/height<br />
;  If x&lt;0 Then x=0                                      ;check for off screen<br />
;  If y&lt;0 Then y=0<br />
;  If x&gt;w-azoom Then x=w-azoom<br />
;  If y&gt;h-bzoom Then y=h-bzoom<br />
;  Use BitMap0<br />
;  Scroll x,y,azoom,bzoom,0,0,0                         ;grab the block<br />
;  azoom2.w=azoom+8                                     ;increase to make<br />
;  If azoom&gt;320 Then azoom=320                          ; sure window will be full<br />
;  ????? 1,2,0,0,azoom2,bzoom                      ;do X4<br />
;  Use Window 0<br />
;  BitMaptoWindow 2,2,0,0,0,0,windwmod,windh               ;copy zoom into window<br />
;  windw.w=w/2<br />
;  windh.w=h<br />
;  windwmod.w=windw-(windw MOD zoom)<br />
;  azoom.w=(windw)/4<br />
;  bzoom.w=(windh)/4<br />
;  azoom3=azoom ASR 1<br />
;  bzoom3=bzoom ASR 1<br />
Return<br />
<br />
NoCli:CloseEd:WBStartup</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/" title="LHA" border="0" alt=".lha" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=36" target="_blank" title="">bpaint_assets.lha</a> (Größe: 4,71 KB / Downloads: 1)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Ich hab hier mal einen alten Sourcecode ausgebuddelt. Den hatte ich letztes Jahr oder so nochmal angefaßt zwecks Bugfixes oder so.<br />
<br />
Kann vielleicht als hilfreiches Beispiel dienen. <br />
<br />
Das ist in keinem Falle als ausgereiftes, fertiges Programm anzusehen! <img src="https://www.amiblitz.de/community/images/smilies/blush.png" alt="Blush" title="Blush" class="smilie smilie_12" /> <br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=35" target="_blank" title="">bpaint_grab.jpg</a> (Größe: 68,68 KB / Downloads: 1904)
<!-- end: postbit_attachments_attachment --><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>.<br />
.rev<br />
;################################################################################<br />
;#                                                                              #<br />
;#  Source     :    bpaint_sys.bb                                         #<br />
;#                                                                              #<br />
;#  Description:    recreation of AMOS paint (unfinished)                                                #<br />
;#                                                                              #<br />
;#  Author     :    Frank Brandis                                               #<br />
;#                                                                              #<br />
;#  Exec       :    Blitz2:Execs/Foo                                            #<br />
;#                                                                              #<br />
;#  Date of                                                                     #<br />
;#  Creation   :                                                                #<br />
;#                                                                              #<br />
;#  Date of                                                                     #<br />
;#  Update(s)  :                                                                #<br />
;#                                                                              #<br />
;#                                                                              #<br />
;#  To do      :                                                                #<br />
;#                                                                              #<br />
;#                                                                              #<br />
;################################################################################<br />
;<br />
.his<br />
;################################################################################<br />
;#                                                                              #<br />
;#  History    :                                                                #<br />
;#                                                                              #<br />
;#                                                                              #<br />
;################################################################################<br />
;<br />
<br />
.<br />
;################################################################################<br />
<br />
<br />
<br />
;<br />
<br />
<br />
<br />
<br />
;gadgets, modes<br />
<br />
#up         =1<br />
#down       =2<br />
#left       =3<br />
#right      =4<br />
#tobuffer   =5<br />
#frombuffer =6<br />
#insertframe=7<br />
#deleteframe=8<br />
#playanim   =9<br />
#save       =10<br />
#load       =11<br />
#freihand   =12<br />
#bogen      =13<br />
#linie      =14<br />
#rechteck   =15<br />
#ellipse    =16<br />
#text       =17<br />
#lupe       =18<br />
#cut        =19<br />
#rotier     =20<br />
#flipx      =21<br />
#flipy      =22<br />
#clear      =23<br />
#undo       =24<br />
#info       =25<br />
<br />
;windows<br />
<br />
#picwin   =2<br />
#toolwin  =1<br />
#palwin   =3<br />
#zoomwin  =4<br />
<br />
NEWTYPE.box<br />
 x.w<br />
 y.w<br />
 w.w<br />
 h.w<br />
End NEWTYPE<br />
<br />
DEFTYPE.box statbar   ;statusbar<br />
<br />
statbar&#92;x=0,22,36*8+12,10<br />
<br />
Dim palpen.box(32)     ;dims are added within drawpal{}<br />
<br />
<br />
DEFTYPE.w<br />
<br />
Dim modetxt&#36;(30)<br />
Read nummodes<br />
For i=1 To nummodes<br />
  Read modetxt&#36;(i)<br />
Next<br />
Data.w 25<br />
Data.s "up","down","left","right","tobuffer","frombuffer"<br />
Data.s "insertframe","deleteframe","playanim","save"<br />
Data.s "load","freihand","bogen","linie","rechteck","ellipse"<br />
Data.s "text","lupe","cut","rotier","flipx","flipy","clear","undo","info"<br />
<br />
<br />
MaxLen pa&#36;=450<br />
MaxLen fi&#36;=180<br />
<br />
.funcs<br />
Statement clrstatus {col.w}<br />
 SHARED statbar.box<br />
 ;Use Window #toolwin<br />
 USEPATH statbar<br />
<br />
 WBox &#92;x+1,&#92;y+1,&#92;x+&#92;w-1,&#92;y+&#92;h-1,col<br />
<br />
 USEPATH ycy<br />
<br />
End Statement<br />
<br />
Statement drawstatus {}<br />
 SHARED statbar.box<br />
 Use Window #toolwin<br />
 USEPATH statbar<br />
 ;border<br />
 Wline &#92;x,&#92;y+&#92;h,&#92;x,&#92;y,&#92;x+&#92;w,&#92;y,2<br />
 Wline &#92;x+&#92;w,&#92;y,&#92;x+&#92;w,&#92;y+&#92;h,&#92;x,&#92;y+&#92;h,4<br />
 USEPATH ycy<br />
End Statement<br />
<br />
<br />
Statement status {txt&#36;,col.w}<br />
 SHARED statbar.box<br />
 Use Window #toolwin<br />
 USEPATH statbar<br />
<br />
 clrstatus {3}<br />
<br />
 WindowOutput1<br />
<br />
 WLocate &#92;x+3,&#92;y+2<br />
 WColour col,3<br />
 Print   txt&#36;<br />
<br />
 USEPATH ycy<br />
<br />
End Statement<br />
<br />
Statement drwstatus{mode.w}<br />
 SHARED nummodes.w<br />
 SHARED modetxt&#36;()<br />
<br />
 If mode &gt;0 AND mode&lt;=nummodes<br />
   status{"&gt;"+modetxt&#36;(mode)+"&lt;",1}<br />
 Else<br />
   status{"?",7}<br />
 EndIf<br />
End Statement<br />
<br />
Statement drawrect{x1,y1,x2,y2,col}<br />
 Wline x1,y1,x2,y1,x2,y2,x1,y2,x1,y1,col<br />
End Statement<br />
<br />
<br />
Statement newscreen{wid.w,heid.w,dep.w,mode.l}<br />
  SHARED d,w,h<br />
  If w&lt;320 Then w=320<br />
  If h&lt;256 Then h=256<br />
<br />
  Screen #picwin,0,0,wid,heid,dep,mode,"",0,0<br />
  ScreensBitMap #picwin,0<br />
<br />
  ShowPalette #picwin<br />
<br />
  d=dep:w=wid:h=heid<br />
  Window #picwin,0,0,w,h,&#36;800,"",1,0<br />
  MenusOff<br />
  Use BitMap 0:Cls<br />
<br />
End Statement<br />
<br />
CNIF0       ;vertical<br />
Statement openpal{}<br />
 SHARED palstatus.b<br />
 If palstatus=0<br />
   Use Screen #picwin<br />
   Window #palwin,0,0,14,ScreenHeight,&#36;802,"p",0,0<br />
   palstatus=1<br />
 EndIf<br />
End Statement<br />
<br />
Statement drawpal{}<br />
  Use Window #palwin<br />
  WCls<br />
  wh=212<br />
  ws=wh/32<br />
  c=0<br />
  For gy=0 To wh Step ws<br />
    WBox 0,gy,14,gy+ws-1,c<br />
    c+1<br />
  Next<br />
End Statement<br />
CEND<br />
<br />
Statement openpal{}<br />
 SHARED palstatus.b<br />
 If palstatus=0<br />
   Use Screen #picwin<br />
   Window #palwin,0,0,ScreenWidth,14,&#36;800,"",0,0<br />
   palstatus=1<br />
 EndIf<br />
End Statement<br />
<br />
Statement drawpal{}<br />
  SHARED palpen.box()<br />
<br />
  Use Window #palwin<br />
  WCls<br />
  ww=WindowWidth<br />
  ws=ww/32<br />
  c=0<br />
  For gx=0 To ww Step ws<br />
    WBox gx,0,gx+ws-1,14,c<br />
<br />
    palpen(c)&#92;x=gx,y,ws-1,14<br />
<br />
    c+1<br />
  Next<br />
End Statement<br />
<br />
Function.w palhit {x.w,y.w}<br />
  SHARED palpen.box()<br />
  res.w=-1<br />
  c=0<br />
  USEPATH palpen(c)<br />
<br />
  Repeat<br />
    If RectsHit (x,y,1,1,&#92;x,&#92;y,&#92;w,&#92;h)<br />
      res=c<br />
    EndIf<br />
    c+1<br />
  Until c&gt;32 OR res=&gt;0<br />
<br />
  USEPATH vxxx<br />
<br />
  Function Return res ; -1 = FAIL !<br />
End Function<br />
<br />
._setup<br />
AddIDCMP&#36;10<br />
AutoCookie On<br />
<br />
<br />
;Format"00"<br />
For gad=1To25<br />
; LoadShape gad,"bpaintshps/bpaintshape."+Str&#36;(gad),0<br />
; LoadShape gad+25,"bpaintshps/bpaintshape."+Str&#36;(gad+25),0<br />
  InitShape gad,10,10,2<br />
  InitShape gad+25,10,10,2<br />
<br />
Next<br />
;Format""<br />
;SaveShapes1,50,"bpaint.shps"<br />
;SavePalette0,"bpaint.pal"<br />
LoadShapes1,"BlitzINC:_dat/bpaint.shps"<br />
LoadPalette #toolwin,"BlitzINC:_dat/iff/bpaint.br"<br />
<br />
LoadPalette #picwin,"ENV:dpaint32.col"<br />
<br />
<br />
ShapeGadget 0,010,00,0  ,#up         ,01,1+25<br />
ShapeGadget 0,010,11,0  ,#down       ,02,2+25<br />
ShapeGadget 0,000,06,0  ,#left       ,03,3+25<br />
ShapeGadget 0,020,06,0  ,#right      ,04,4+25<br />
ShapeGadget 0,030,00,0  ,#tobuffer   ,05,5+25<br />
ShapeGadget 0,068,00,0  ,#frombuffer ,06,6+25<br />
ShapeGadget 0,106,00,0  ,#insertframe,07,7+25<br />
ShapeGadget 0,144,00,0  ,#deleteframe,08,8+25<br />
ShapeGadget 0,182,00,0  ,#playanim   ,09,9+25<br />
ShapeGadget 0,263,00,0  ,#save       ,10,10+25<br />
ShapeGadget 0,292,00,0  ,#load       ,11,11+25<br />
ButtonGroup1<br />
ShapeGadget 0,  0,33,512,#freihand   ,12,12+25:Toggle0,12,On<br />
ShapeGadget 0, 19,33,512,#bogen,13   ,13+25   :Disable0,#bogen<br />
ShapeGadget 0, 38,33,512,#linie,14   ,14+25<br />
ShapeGadget 0, 57,33,512,#rechteck   ,15,15+25<br />
ShapeGadget 0, 76,33,512,#ellipse    ,16,16+25<br />
ShapeGadget 0, 95,33,512,#text       ,17,17+25:Disable0,#text<br />
ShapeGadget 0,133,33,512,#cut        ,19,19+25<br />
<br />
ShapeGadget 0,114,33,1  ,#lupe       ,18,18+25<br />
ShapeGadget 0,152,33,0  ,#rotier     ,20,20+25<br />
ShapeGadget 0,171,33,0  ,#flipx      ,21,21+25<br />
ShapeGadget 0,190,33,0  ,#flipy      ,22,22+25<br />
ShapeGadget 0,263,33,0  ,#clear      ,23,23+25<br />
ShapeGadget 0,282,33,0  ,#undo       ,24,24+25<br />
ShapeGadget 0,301,22,0  ,#info       ,25,25+25<br />
<br />
LoadFont1,"Fiona.font",8<br />
<br />
w.w=320<br />
h.w=256<br />
<br />
newscreen{w,h,5,0}<br />
<br />
<br />
Screen #toolwin,0,211,320,45,3,0,"",0,0<br />
ShowPalette #toolwin<br />
RGB7,15,2,1<br />
Window #toolwin,0,0,320,45,&#36;1000|&#36;800,"",0,0,0 ;toolbox<br />
WindowFont1<br />
MenusOff<br />
WBox0,0,320,43,3:For gad=1To25:Redraw1,gad:Next gad<br />
<br />
drawstatus{}<br />
<br />
status{"Welcome to bPaint",7}<br />
Delay_50<br />
<br />
<br />
;Gosub getname<br />
<br />
frontcol.w=1<br />
backcol.w =0<br />
drawcol=1<br />
<br />
drawmod.b=#freihand<br />
<br />
drwstatus{#freihand}<br />
<br />
exit=0<br />
.<br />
.main<br />
Repeat<br />
<br />
 ev.l=WaitEvent<br />
<br />
 If EventWindow=#picwin<br />
<br />
   Select ev<br />
<br />
     Case&#36;10<br />
       If frontpen=-1           ;brush<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         drawrect{wx-rx,wy-ry,wx+rx,wy+ry,frontcol}<br />
         WaitTOF_<br />
         drawrect{wx-rx,wy-ry,wx+rx,wy+ry,frontcol}<br />
         WJam0<br />
       EndIf<br />
<br />
     Case&#36;8<br />
       Use Window #picwin<br />
       oldx=WMouseX:oldy=WMouseY<br />
<br />
       Select MButtons<br />
         Case2<br />
       ;    drawcol=backcol<br />
           Gosub dodraw<br />
         Case1<br />
       ;    drawcol=frontcol<br />
           Gosub dodraw<br />
       End Select<br />
<br />
     Default<br />
       Gosub intuicodes<br />
   End Select<br />
<br />
 Else<br />
<br />
   Gosub intuicodes<br />
<br />
 EndIf<br />
<br />
Until exit<br />
<br />
CloseWindow #picwin:CloseWindow #toolwin<br />
Free BitMap0<br />
CloseScreen #picwin:CloseScreen #toolwin<br />
End<br />
.<br />
<br />
.dodraw<br />
   Select drawmod<br />
     Case#freihand<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         If frontpen&lt;&gt;-1<br />
           WPlot wx,wy,drawcol<br />
           Wline oldx,oldy,wx,wy,drawcol<br />
           oldx=wx:oldy=wy<br />
         Else<br />
           Use BitMap0<br />
           ClipBlit0,wx,wy<br />
         EndIf<br />
       Gosub updatelup<br />
       Wend<br />
<br />
     Case#linie<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         Wline oldx,oldy,wx,wy,drawcol<br />
         VWait:Wline oldx,oldy,wx,wy,drawcol<br />
       Wend<br />
       WJam0<br />
       Wline oldx,oldy,wx,wy,drawcol<br />
<br />
     Case#rechteck<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         drawrect{oldx,oldy,wx,wy,drawcol}<br />
         VWait:drawrect{oldx,oldy,wx,wy,drawcol}<br />
       Wend<br />
       WJam0<br />
         drawrect{oldx,oldy,wx,wy,drawcol}<br />
<br />
     Case#ellipse<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         xrad=QAbs(oldx-wx):yrad=QAbs(oldy-wy)<br />
         WEllipse oldx,oldy,xrad,yrad,drawcol<br />
         VWait:WEllipse oldx,oldy,xrad,yrad,drawcol<br />
       Wend<br />
       WJam0<br />
<br />
       WEllipse oldx,oldy,xrad,yrad,drawcol<br />
<br />
     Case#cut<br />
       While Joyb(0)&gt;0<br />
         wx=WMouseX:wy=WMouseY<br />
         WJam3<br />
         drawrect{oldx,oldy,wx,wy,drawcol}<br />
         VWait:drawrect{oldx,oldy,wx,wy,drawcol}<br />
       Wend<br />
       WJam0<br />
<br />
       If wx&lt;oldx Then Exchange wx,oldx<br />
       If wy&lt;oldy Then Exchange wy,oldy<br />
       If wx=oldx OR wy=oldy Then Goto cute<br />
       GetaShape0,oldx,oldy,wx-oldx,wy-oldy<br />
       MakeCookie0<br />
       sw=ShapeWidth(0)<br />
       sh=ShapeHeight(0)<br />
       rx=sw/2:ry=sh/2<br />
       Handle0,rx,ry<br />
       frontpen=-1<br />
       cute:<br />
   End Select<br />
Return<br />
.<br />
.intuicodes<br />
 Select ev<br />
._mbut<br />
   Case&#36;8<br />
     If EventWindow=#palwin<br />
       res=palhit{WMouseX,WMouseY}<br />
<br />
       If res&gt;-1<br />
         drawcol=res<br />
         status{"col="+Str&#36;(drawcol),1}<br />
         Use Window #palwin<br />
       EndIf<br />
<br />
     EndIf<br />
   Case&#36;40<br />
._gads<br />
     Select GadgetHit<br />
       Case #up<br />
       Case #down<br />
       Case #left<br />
       Case #right<br />
       Case #tobuffer<br />
       Case #frombuffer<br />
       Case #insertframe<br />
       Case #deleteframe<br />
       Case #playanim<br />
       Case #save<br />
       Case #load        :Gosub loadpic<br />
       Case #freihand    :drawmod=#freihand<br />
       Case #bogen<br />
       Case #linie       :drawmod=#linie<br />
       Case #rechteck    :drawmod=#rechteck<br />
       Case #ellipse     :drawmod=#ellipse<br />
       Case #text<br />
       Case #lupe:If GadgetStatus(0,#lupe)Then Gosub openlup Else Gosub closelup<br />
       Case #cut         :drawmod=#cut<br />
       Case #rotier<br />
       Case #flipx<br />
       Case #flipy<br />
       Case #clear<br />
         ;Use BitMap0:Cls backcol<br />
         Use Window #picwin:WCls<br />
<br />
       Case #undo<br />
       Case #info<br />
     End Select<br />
     drwstatus{drawmod}<br />
   Case&#36;400<br />
._keys<br />
     ev&#36;=LCase&#36;(Inkey&#36;)<br />
     Select ev&#36;<br />
       Case Chr&#36;(27):exit=1   ;QUIT<br />
       Case "p"<br />
         If palstatus=0<br />
           uwin=Used Window<br />
           openpal{}<br />
           drawpal{}<br />
           Activate #picwin: Use Window #picwin<br />
         Else<br />
           CloseWindow #palwin:palstatus=0<br />
           Use Window uwin<br />
         EndIf<br />
      ;   status{"Palette not implemented",7}<br />
      ;   Delay_50<br />
      ;   drwstatus{drawmod}<br />
     End Select<br />
 End Select<br />
Return<br />
.<br />
.loadpic<br />
 FindScreen0,"board"<br />
 g&#36;=ASLFileRequest&#36;("name of picture to load",pa&#36;,fi&#36;,pat&#36;)<br />
 If g&#36;&lt;&gt;""<br />
   If ILBMInfo(g&#36;)<br />
     FlushEvents&#36;400000<br />
     VWait12<br />
     CloseWindow #picwin<br />
     VWait12<br />
     Free BitMap0<br />
     VWait12<br />
     CloseScreen #picwin<br />
     VWait12<br />
     newscreen{ILBMWidth,ILBMHeight,ILBMDepth,ILBMViewMode}<br />
     LoadBitMap0,g&#36;,#picwin:ShowPalette #picwin<br />
   EndIf<br />
 EndIf<br />
Return<br />
.<br />
.openlup<br />
 Use Screen #picwin<br />
 Window #zoomwin,w/2,14,w/2,h-14-45,&#36;800,"",0,0<br />
 WCls 1<br />
; BitMap 1,320,256,d<br />
; BitMap 2,320,256,d<br />
Return<br />
<br />
.closelup<br />
; Free BitMap1<br />
; Free BitMap2<br />
 CloseWindow#zoomwin<br />
 Use Window #picwin<br />
Return<br />
<br />
<br />
<br />
.updatelup:<br />
;  Use BitMap 1: BitMapOutput1                        ;do actual zooming!<br />
;  x=xm-azoom3 : y=ym-bzoom3                        ;subtract zoom width/height<br />
;  If x&lt;0 Then x=0                                      ;check for off screen<br />
;  If y&lt;0 Then y=0<br />
;  If x&gt;w-azoom Then x=w-azoom<br />
;  If y&gt;h-bzoom Then y=h-bzoom<br />
;  Use BitMap0<br />
;  Scroll x,y,azoom,bzoom,0,0,0                         ;grab the block<br />
;  azoom2.w=azoom+8                                     ;increase to make<br />
;  If azoom&gt;320 Then azoom=320                          ; sure window will be full<br />
;  ????? 1,2,0,0,azoom2,bzoom                      ;do X4<br />
;  Use Window 0<br />
;  BitMaptoWindow 2,2,0,0,0,0,windwmod,windh               ;copy zoom into window<br />
;  windw.w=w/2<br />
;  windh.w=h<br />
;  windwmod.w=windw-(windw MOD zoom)<br />
;  azoom.w=(windw)/4<br />
;  bzoom.w=(windh)/4<br />
;  azoom3=azoom ASR 1<br />
;  bzoom3=bzoom ASR 1<br />
Return<br />
<br />
NoCli:CloseEd:WBStartup</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/" title="LHA" border="0" alt=".lha" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=36" target="_blank" title="">bpaint_assets.lha</a> (Größe: 4,71 KB / Downloads: 1)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Argument in String Parsing, rekursiv]]></title>
			<link>https://www.amiblitz.de/community/thread-202.html</link>
			<pubDate>Sun, 10 Nov 2019 19:20:32 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-202.html</guid>
			<description><![CDATA[Ich habe mal ein simples Beispiel vorbereitet, das einzelne Teile aus einem String herauslöst. Man kann das z.B. benutzen als Argumentparser, Wortzähler usw..<br />
<br />
Es nutzt hier nur Leerzeichen als Trenner, man kann das aber natürlich anpassen auf ganze Strings von Worttrennern, wenn man will.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>;CMD parse test by f.brandis<br />
;<br />
<br />
DEFTYPE.w<br />
<br />
;parsetest cmds<br />
<br />
cmd&#36;="dump from %s to           %d    a b cde 4 6 jj m , . ."<br />
<br />
NPrint "&gt;",cmd&#36;,"&lt;"<br />
<br />
<br />
Function.w stripnparse{inp&#36;}         ;recursive!<br />
<br />
  SHARED nums<br />
<br />
  inp&#36;=StripLead&#36;(inp&#36;,32)           ;strip leading SPC<br />
<br />
  If inp&#36;="" Then Function Return0   ;nothing left!<br />
<br />
  spc1.w=Instr(inp&#36;," ")             ;another separator?<br />
<br />
  If spc1&gt;1                          ;any SPC at the end of this inp&#36;?<br />
<br />
    arg1&#36;=Mid&#36;(inp&#36;,spc1)<br />
<br />
    out&#36; =Left&#36;(inp&#36;,spc1-1)<br />
<br />
    Gosub _strpnprsprt<br />
<br />
    ok=stripnparse{arg1&#36;}            ;down the rabbit hole...<br />
<br />
  Else                               ;rest is an arg.<br />
<br />
    out&#36;=inp&#36;<br />
<br />
    Gosub _strpnprsprt<br />
<br />
  EndIf<br />
<br />
<br />
  Function Return nums               ;global count<br />
<br />
_strpnprsprt:<br />
<br />
  nums+1<br />
<br />
  NPrint "Arg"+Str&#36;(nums)+": &gt;",out&#36;,"&lt;"<br />
<br />
Return<br />
<br />
End Function<br />
<br />
NPrint "#args: ",stripnparse{cmd&#36;}<br />
<br />
MouseWait<br />
<br />
End<br />
<br />
CloseEd</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=18" target="_blank" title="">argparse_example.png</a> (Größe: 116,19 KB / Downloads: 1988)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Ich habe mal ein simples Beispiel vorbereitet, das einzelne Teile aus einem String herauslöst. Man kann das z.B. benutzen als Argumentparser, Wortzähler usw..<br />
<br />
Es nutzt hier nur Leerzeichen als Trenner, man kann das aber natürlich anpassen auf ganze Strings von Worttrennern, wenn man will.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>;CMD parse test by f.brandis<br />
;<br />
<br />
DEFTYPE.w<br />
<br />
;parsetest cmds<br />
<br />
cmd&#36;="dump from %s to           %d    a b cde 4 6 jj m , . ."<br />
<br />
NPrint "&gt;",cmd&#36;,"&lt;"<br />
<br />
<br />
Function.w stripnparse{inp&#36;}         ;recursive!<br />
<br />
  SHARED nums<br />
<br />
  inp&#36;=StripLead&#36;(inp&#36;,32)           ;strip leading SPC<br />
<br />
  If inp&#36;="" Then Function Return0   ;nothing left!<br />
<br />
  spc1.w=Instr(inp&#36;," ")             ;another separator?<br />
<br />
  If spc1&gt;1                          ;any SPC at the end of this inp&#36;?<br />
<br />
    arg1&#36;=Mid&#36;(inp&#36;,spc1)<br />
<br />
    out&#36; =Left&#36;(inp&#36;,spc1-1)<br />
<br />
    Gosub _strpnprsprt<br />
<br />
    ok=stripnparse{arg1&#36;}            ;down the rabbit hole...<br />
<br />
  Else                               ;rest is an arg.<br />
<br />
    out&#36;=inp&#36;<br />
<br />
    Gosub _strpnprsprt<br />
<br />
  EndIf<br />
<br />
<br />
  Function Return nums               ;global count<br />
<br />
_strpnprsprt:<br />
<br />
  nums+1<br />
<br />
  NPrint "Arg"+Str&#36;(nums)+": &gt;",out&#36;,"&lt;"<br />
<br />
Return<br />
<br />
End Function<br />
<br />
NPrint "#args: ",stripnparse{cmd&#36;}<br />
<br />
MouseWait<br />
<br />
End<br />
<br />
CloseEd</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=18" target="_blank" title="">argparse_example.png</a> (Größe: 116,19 KB / Downloads: 1988)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Lemmings-like multi-obj]]></title>
			<link>https://www.amiblitz.de/community/thread-201.html</link>
			<pubDate>Sat, 19 Oct 2019 01:45:19 +0200</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-201.html</guid>
			<description><![CDATA[Hier mal ein Beispiel für eine Multi-Objekt (lemmings-like) Verwaltung(sehr simpel!).<br />
<hr class="mycode_hr" />
WTF Wo ist mein Anhang?? Warum kann ich kein LHA anhängen??<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=17" target="_blank" title="">lemms419.png</a> (Größe: 143,78 KB / Downloads: 2041)
<!-- end: postbit_attachments_attachment --><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>;My Own Lemmings!!!!!<br />
<br />
;-By F.Brandis<br />
WBStartup:NoCli:CloseEd<br />
BitMap1,320,256,4:BitMap0,320,256,4<br />
<br />
dr&#36;="blitzinc:_dat/"<br />
<br />
LoadShapes0,dr&#36;+"Lemms.shp"<br />
<br />
dr&#36;="blitzinc:_dat/iff/"<br />
<br />
LoadBitMap0,dr&#36;+"LemLev_b.iff",0<br />
<br />
dr&#36;="blitzinc:_dat/sfx/"<br />
<br />
LoadSound0,dr&#36;+"Lemm-Letsgo.sfx"<br />
<br />
LoadSound1,dr&#36;+"Lemm-Aehh!.sfx"<br />
CopyBitMap0,1<br />
VWait50<br />
BLITZ<br />
Slice0,44,4<br />
Show0:Use Palette0<br />
<br />
NEWTYPE.lemming<br />
lemx.w<br />
lemy.w<br />
lemm.b       ;frame<br />
dir.b<br />
fall.b<br />
<br />
bcount.b  ;new: bouncecount<br />
End NEWTYPE<br />
<br />
DEFTYPE.w<br />
<br />
lan.b=40<br />
<br />
<br />
Dim List l.lemming(lan)<br />
USEPATH l()<br />
While AddItem(l())<br />
  Gosub randomlem<br />
Wend<br />
<br />
Buffer0,(lan+1)*50*5<br />
Buffer1,(lan+1)*50*5<br />
Sound0,15<br />
<br />
Repeat<br />
<br />
Show db.b:db=1-db:Use BitMap db<br />
VWait:UnBuffer db<br />
;o.b+1:If o&gt;100Then Sound1,15:o=0<br />
ResetList l()<br />
<br />
While NextItem(l())<br />
 If Point(&#92;lemx,&#92;lemy+5)&lt;4<br />
   &#92;lemy+2<br />
   If &#92;fall=3<br />
     &#92;lemm+1<br />
     If &#92;lemm&lt;18<br />
       &#92;lemm=18<br />
     Else<br />
       If &#92;lemm&gt;21Then &#92;lemm=18<br />
     EndIf<br />
   Else<br />
     &#92;fall+1<br />
   EndIf<br />
<br />
 Else<br />
   &#92;fall=0<br />
<br />
   Select &#92;dir<br />
     Case1<br />
       &#92;lemm+1:If &#92;lemm&gt;8Then &#92;lemm=0<br />
       If Point(&#92;lemx+2,&#92;lemy)&gt;3           ;boing! hit wall<br />
         If Point(&#92;lemx+2,&#92;lemy-1)=0<br />
          &#92;lemy-2<br />
          If Point(&#92;lemx+2,&#92;lemy)&gt;0<br />
            &#92;lemy-2<br />
          EndIf<br />
         Else<br />
          &#92;dir=2:&#92;lemx-2<br />
          &#92;bcount+1<br />
         EndIf<br />
       Else<br />
        &#92;lemx+1<br />
       EndIf<br />
    Case2<br />
       &#92;lemm-1<br />
       If &#92;lemm&lt;9<br />
          &#92;lemm=17<br />
        Else<br />
          If &#92;lemm&gt;17 Then &#92;lemm=17<br />
        EndIf<br />
       If Point(&#92;lemx-2,&#92;lemy)&gt;3           ;boing! hit wall<br />
         If Point(&#92;lemx-2,&#92;lemy-1)=0<br />
          &#92;lemy-2<br />
          If Point(&#92;lemx+2,&#92;lemy)&gt;0<br />
            &#92;lemy-2<br />
          EndIf<br />
         Else<br />
           &#92;dir=1:&#92;lemx+2<br />
           &#92;bcount+1<br />
         EndIf       ;boing-handle<br />
       Else<br />
         &#92;lemx-1<br />
       EndIf<br />
    Default<br />
       Gosub randomlem<br />
   End Select<br />
 EndIf<br />
<br />
 BBlit db,&#92;lemm,&#92;lemx,&#92;lemy<br />
 If &#92;bcount&gt;4 Then Gosub bc_handle<br />
<br />
 If &#92;lemy&gt;200OR &#92;lemx&gt;310OR &#92;lemx&lt;10Then Gosub randomlem; KillItem l()<br />
Wend<br />
Until Joyb(0)&gt;0<br />
End<br />
<br />
bc_handle:<br />
 &#92;bcount=0<br />
 Gosub randomlem<br />
Return<br />
<br />
randomlem:<br />
 &#92;lemm=0<br />
 &#92;lemx=Rnd(300)+10<br />
 &#92;lemy=5<br />
 rd.b=1-rd<br />
<br />
 &#92;dir=rd+1<br />
Return</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=16" target="_blank" title="">OldLemmsTest.lha.zip</a> (Größe: 27,81 KB / Downloads: 1816)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Hier mal ein Beispiel für eine Multi-Objekt (lemmings-like) Verwaltung(sehr simpel!).<br />
<hr class="mycode_hr" />
WTF Wo ist mein Anhang?? Warum kann ich kein LHA anhängen??<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=17" target="_blank" title="">lemms419.png</a> (Größe: 143,78 KB / Downloads: 2041)
<!-- end: postbit_attachments_attachment --><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>;My Own Lemmings!!!!!<br />
<br />
;-By F.Brandis<br />
WBStartup:NoCli:CloseEd<br />
BitMap1,320,256,4:BitMap0,320,256,4<br />
<br />
dr&#36;="blitzinc:_dat/"<br />
<br />
LoadShapes0,dr&#36;+"Lemms.shp"<br />
<br />
dr&#36;="blitzinc:_dat/iff/"<br />
<br />
LoadBitMap0,dr&#36;+"LemLev_b.iff",0<br />
<br />
dr&#36;="blitzinc:_dat/sfx/"<br />
<br />
LoadSound0,dr&#36;+"Lemm-Letsgo.sfx"<br />
<br />
LoadSound1,dr&#36;+"Lemm-Aehh!.sfx"<br />
CopyBitMap0,1<br />
VWait50<br />
BLITZ<br />
Slice0,44,4<br />
Show0:Use Palette0<br />
<br />
NEWTYPE.lemming<br />
lemx.w<br />
lemy.w<br />
lemm.b       ;frame<br />
dir.b<br />
fall.b<br />
<br />
bcount.b  ;new: bouncecount<br />
End NEWTYPE<br />
<br />
DEFTYPE.w<br />
<br />
lan.b=40<br />
<br />
<br />
Dim List l.lemming(lan)<br />
USEPATH l()<br />
While AddItem(l())<br />
  Gosub randomlem<br />
Wend<br />
<br />
Buffer0,(lan+1)*50*5<br />
Buffer1,(lan+1)*50*5<br />
Sound0,15<br />
<br />
Repeat<br />
<br />
Show db.b:db=1-db:Use BitMap db<br />
VWait:UnBuffer db<br />
;o.b+1:If o&gt;100Then Sound1,15:o=0<br />
ResetList l()<br />
<br />
While NextItem(l())<br />
 If Point(&#92;lemx,&#92;lemy+5)&lt;4<br />
   &#92;lemy+2<br />
   If &#92;fall=3<br />
     &#92;lemm+1<br />
     If &#92;lemm&lt;18<br />
       &#92;lemm=18<br />
     Else<br />
       If &#92;lemm&gt;21Then &#92;lemm=18<br />
     EndIf<br />
   Else<br />
     &#92;fall+1<br />
   EndIf<br />
<br />
 Else<br />
   &#92;fall=0<br />
<br />
   Select &#92;dir<br />
     Case1<br />
       &#92;lemm+1:If &#92;lemm&gt;8Then &#92;lemm=0<br />
       If Point(&#92;lemx+2,&#92;lemy)&gt;3           ;boing! hit wall<br />
         If Point(&#92;lemx+2,&#92;lemy-1)=0<br />
          &#92;lemy-2<br />
          If Point(&#92;lemx+2,&#92;lemy)&gt;0<br />
            &#92;lemy-2<br />
          EndIf<br />
         Else<br />
          &#92;dir=2:&#92;lemx-2<br />
          &#92;bcount+1<br />
         EndIf<br />
       Else<br />
        &#92;lemx+1<br />
       EndIf<br />
    Case2<br />
       &#92;lemm-1<br />
       If &#92;lemm&lt;9<br />
          &#92;lemm=17<br />
        Else<br />
          If &#92;lemm&gt;17 Then &#92;lemm=17<br />
        EndIf<br />
       If Point(&#92;lemx-2,&#92;lemy)&gt;3           ;boing! hit wall<br />
         If Point(&#92;lemx-2,&#92;lemy-1)=0<br />
          &#92;lemy-2<br />
          If Point(&#92;lemx+2,&#92;lemy)&gt;0<br />
            &#92;lemy-2<br />
          EndIf<br />
         Else<br />
           &#92;dir=1:&#92;lemx+2<br />
           &#92;bcount+1<br />
         EndIf       ;boing-handle<br />
       Else<br />
         &#92;lemx-1<br />
       EndIf<br />
    Default<br />
       Gosub randomlem<br />
   End Select<br />
 EndIf<br />
<br />
 BBlit db,&#92;lemm,&#92;lemx,&#92;lemy<br />
 If &#92;bcount&gt;4 Then Gosub bc_handle<br />
<br />
 If &#92;lemy&gt;200OR &#92;lemx&gt;310OR &#92;lemx&lt;10Then Gosub randomlem; KillItem l()<br />
Wend<br />
Until Joyb(0)&gt;0<br />
End<br />
<br />
bc_handle:<br />
 &#92;bcount=0<br />
 Gosub randomlem<br />
Return<br />
<br />
randomlem:<br />
 &#92;lemm=0<br />
 &#92;lemx=Rnd(300)+10<br />
 &#92;lemy=5<br />
 rd.b=1-rd<br />
<br />
 &#92;dir=rd+1<br />
Return</code></div></div><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=16" target="_blank" title="">OldLemmsTest.lha.zip</a> (Größe: 27,81 KB / Downloads: 1816)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Displayscroll (EAB)]]></title>
			<link>https://www.amiblitz.de/community/thread-195.html</link>
			<pubDate>Tue, 06 Aug 2019 12:37:01 +0200</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-195.html</guid>
			<description><![CDATA[Ich hatte mal (damals) ein modifiziertes Beispiel für Displayscroll auf EAB gepostet:<br />
<a href="http://eab.abime.net/showpost.php?p=1086590&amp;postcount=7" target="_blank" rel="noopener" class="mycode_url">http://eab.abime.net/showpost.php?p=1086590&amp;postcount=7</a><br />
<br />
Das läuft auch super, zumindest mit 50MHz 030er. <img src="https://www.amiblitz.de/community/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /> <br />
<br />
Kürzlich jedoch scheint es wieder Diskussionen zu geben, man findet es zu langsam.<br />
<br />
Da im o.g. Thread niemand auf das offensichtliche Optimierungspotenzial kommt, schreib ich es hier mal rein (ich bin dort rausgeekelt worden):<br />
<br />
Die Leute wollen halt nicht mehr selbst denken.....<br />
<br />
Org. Src:<br />
<br />
<span style="font-family: Courier New;" class="mycode_font">;display scroll adapted by cylon<br />
<br />
DEFTYPE.w<br />
BitMap1,320,256,3<br />
<br />
LoadBitMap1,"face8.iff",1  ;3planes 8 cols<br />
<br />
VWait50<br />
BLITZ<br />
<br />
BitMapOutput1    ;print onto bmap<br />
<br />
Locate 2,28: Print "THIS IS AGA DISPLAYSCROLL"<br />
Locate 2,30: Print "&lt;&lt;&lt;&lt;&lt; Move Mouse &gt;&gt;&gt;&gt;&gt;"<br />
Use BitMap1<br />
<br />
;For a=7To1 Step -1<br />
;  b=1-b<br />
;  Circlef160,128,10*a,10*a,b<br />
;Next<br />
<br />
InitCopList1,44,256,&#36;10003,8,8,-&#36;10<br />
<br />
CreateDisplay1<br />
<br />
DisplayBitMap1,1<br />
<br />
DisplayPalette1,1<br />
<br />
For y=0 To7                           ;debug colour boxes<br />
<br />
  Boxf 0,y*16,7,y*16+15,y<br />
<br />
  Locate2,y*2+0.5:Colour1: Print y<br />
<br />
Next y<br />
<br />
Dim xpo.q(256),xpe.q(256)<br />
<br />
a=0<br />
VWait150<br />
Mouse On<br />
<br />
tpi.q=2*Pi  ;precalc<br />
<br />
xpe(0)=-13  ;offset for even planes start at ypos=0<br />
;not quite accurate! sub-pixel fetch or what the hell....<br />
<br />
While Joyb(0)=0<br />
<br />
 For a=1 To 253<br />
   d.q+<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Pi/18</span></span>:If d&gt;tpi Then d=0.0<br />
<br />
   c.q=<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Sin</span>(</span>d)+(MouseX-160)<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">/160</span></span><br />
<br />
   xpo(a)=c<br />
<br />
   xpe(a)=c  ;same as odd, but with offset<br />
<br />
 Next<br />
 VWait<br />
<br />
 DisplayScroll1,&amp;xpo(0),&amp;xpe(0);,-13 offset does not work here?<br />
<br />
 VWait<br />
Wend<br />
<br />
VWait25<br />
QAMIGA<br />
End<br />
<br />
NoCli:CloseEd</span><br />
In <span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">Fett</span></span> habe ich mal die dicksten Brummer markiert:<br />
wenn man dort ansetzt (precalc, Tabelle), dann läuft es auch auf dem Standard A1200 mit etwas FastRAM schnell! <img src="https://www.amiblitz.de/community/images/smilies/tongue.png" alt="Tongue" title="Tongue" class="smilie smilie_5" /><br />
<hr class="mycode_hr" />
Und hier noch die letzte Version.<br />
<br />
Da ist der SIN() noch nicht rausoptimiert als Tabelle/Array, aber es reicht auch so....<br />
(getestet auf der realen Maschine, nicht UAE)<br />
<br />
Das Pic ist mit drin, ein Exe, und auch der orig. Src vom BUM. <img src="https://www.amiblitz.de/community/images/smilies/shy.png" alt="Shy" title="Shy" class="smilie smilie_7" /><br />
<hr class="mycode_hr" />
Verdammt, ich kann kein LHA anhängen!<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1" target="_blank" title="">Displayscr_bb.lha.zip</a> (Größe: 24,5 KB / Downloads: 1796)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Ich hatte mal (damals) ein modifiziertes Beispiel für Displayscroll auf EAB gepostet:<br />
<a href="http://eab.abime.net/showpost.php?p=1086590&amp;postcount=7" target="_blank" rel="noopener" class="mycode_url">http://eab.abime.net/showpost.php?p=1086590&amp;postcount=7</a><br />
<br />
Das läuft auch super, zumindest mit 50MHz 030er. <img src="https://www.amiblitz.de/community/images/smilies/biggrin.png" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /> <br />
<br />
Kürzlich jedoch scheint es wieder Diskussionen zu geben, man findet es zu langsam.<br />
<br />
Da im o.g. Thread niemand auf das offensichtliche Optimierungspotenzial kommt, schreib ich es hier mal rein (ich bin dort rausgeekelt worden):<br />
<br />
Die Leute wollen halt nicht mehr selbst denken.....<br />
<br />
Org. Src:<br />
<br />
<span style="font-family: Courier New;" class="mycode_font">;display scroll adapted by cylon<br />
<br />
DEFTYPE.w<br />
BitMap1,320,256,3<br />
<br />
LoadBitMap1,"face8.iff",1  ;3planes 8 cols<br />
<br />
VWait50<br />
BLITZ<br />
<br />
BitMapOutput1    ;print onto bmap<br />
<br />
Locate 2,28: Print "THIS IS AGA DISPLAYSCROLL"<br />
Locate 2,30: Print "&lt;&lt;&lt;&lt;&lt; Move Mouse &gt;&gt;&gt;&gt;&gt;"<br />
Use BitMap1<br />
<br />
;For a=7To1 Step -1<br />
;  b=1-b<br />
;  Circlef160,128,10*a,10*a,b<br />
;Next<br />
<br />
InitCopList1,44,256,&#36;10003,8,8,-&#36;10<br />
<br />
CreateDisplay1<br />
<br />
DisplayBitMap1,1<br />
<br />
DisplayPalette1,1<br />
<br />
For y=0 To7                           ;debug colour boxes<br />
<br />
  Boxf 0,y*16,7,y*16+15,y<br />
<br />
  Locate2,y*2+0.5:Colour1: Print y<br />
<br />
Next y<br />
<br />
Dim xpo.q(256),xpe.q(256)<br />
<br />
a=0<br />
VWait150<br />
Mouse On<br />
<br />
tpi.q=2*Pi  ;precalc<br />
<br />
xpe(0)=-13  ;offset for even planes start at ypos=0<br />
;not quite accurate! sub-pixel fetch or what the hell....<br />
<br />
While Joyb(0)=0<br />
<br />
 For a=1 To 253<br />
   d.q+<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Pi/18</span></span>:If d&gt;tpi Then d=0.0<br />
<br />
   c.q=<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Sin</span>(</span>d)+(MouseX-160)<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">/160</span></span><br />
<br />
   xpo(a)=c<br />
<br />
   xpe(a)=c  ;same as odd, but with offset<br />
<br />
 Next<br />
 VWait<br />
<br />
 DisplayScroll1,&amp;xpo(0),&amp;xpe(0);,-13 offset does not work here?<br />
<br />
 VWait<br />
Wend<br />
<br />
VWait25<br />
QAMIGA<br />
End<br />
<br />
NoCli:CloseEd</span><br />
In <span style="text-decoration: underline;" class="mycode_u"><span style="font-weight: bold;" class="mycode_b">Fett</span></span> habe ich mal die dicksten Brummer markiert:<br />
wenn man dort ansetzt (precalc, Tabelle), dann läuft es auch auf dem Standard A1200 mit etwas FastRAM schnell! <img src="https://www.amiblitz.de/community/images/smilies/tongue.png" alt="Tongue" title="Tongue" class="smilie smilie_5" /><br />
<hr class="mycode_hr" />
Und hier noch die letzte Version.<br />
<br />
Da ist der SIN() noch nicht rausoptimiert als Tabelle/Array, aber es reicht auch so....<br />
(getestet auf der realen Maschine, nicht UAE)<br />
<br />
Das Pic ist mit drin, ein Exe, und auch der orig. Src vom BUM. <img src="https://www.amiblitz.de/community/images/smilies/shy.png" alt="Shy" title="Shy" class="smilie smilie_7" /><br />
<hr class="mycode_hr" />
Verdammt, ich kann kein LHA anhängen!<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.amiblitz.de/community/images/attachtypes/zip.png" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=1" target="_blank" title="">Displayscr_bb.lha.zip</a> (Größe: 24,5 KB / Downloads: 1796)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Schaltjahr (leap year) Func]]></title>
			<link>https://www.amiblitz.de/community/thread-191.html</link>
			<pubDate>Sun, 03 Feb 2019 00:24:17 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-191.html</guid>
			<description><![CDATA[Der Sinn ist, man nimmt das übliche <br />
<span style="font-family: Courier New;" class="mycode_font">date&#36;(ndays)</span><br />
<br />
und findet mit <span style="font-family: Courier New;" class="mycode_font">Months</span> heraus, ob man Februar hat. Wenn man dann die Anzahl der Tage feststellen will,<br />
gibt man  <span style="font-family: Courier New;" class="mycode_font">+ leapyear {year}</span> ein, was einen Tag hinzufügt (oder eben nicht) für Februar.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Function.b leapyear{year.w}  ;returns 1 for leap year or 0<br />
res.b=0<br />
;divisible /100: not a leap year<br />
dummy.w=(year/100)<br />
If (dummy*100)=year<br />
  res=0<br />
  ;divisible /400: leap year<br />
  dummy.w=(year/400)<br />
  If (dummy*400)=year Then res=1<br />
  Function Return res<br />
EndIf<br />
;divisible /4  : leap year<br />
dummy.w=(year/4)  :If (dummy*4)=year Then res=1 Else res=0<br />
Function Return res<br />
End Function<br />
<br />
;testcase<br />
NPrint "leap year test case:"<br />
NPrint "1800 (no) ",leapyear{1800}<br />
NPrint "1900 (no) ",leapyear{1900}<br />
NPrint "2100 (no) ",leapyear{2100}<br />
<br />
NPrint "2009 (no) ",leapyear{2009}<br />
NPrint "2010 (no) ",leapyear{2010}<br />
NPrint "2011 (no) ",leapyear{2011}<br />
<br />
NPrint "2008 (ya) ",leapyear{2008}<br />
NPrint "2012 (ya) ",leapyear{2012}<br />
NPrint "2016 (ya) ",leapyear{2016}<br />
<br />
NPrint "2000 (ya) ",leapyear{2000}<br />
NPrint "2400 (ya) ",leapyear{2400}<br />
<br />
Stop</code></div></div>]]></description>
			<content:encoded><![CDATA[Der Sinn ist, man nimmt das übliche <br />
<span style="font-family: Courier New;" class="mycode_font">date&#36;(ndays)</span><br />
<br />
und findet mit <span style="font-family: Courier New;" class="mycode_font">Months</span> heraus, ob man Februar hat. Wenn man dann die Anzahl der Tage feststellen will,<br />
gibt man  <span style="font-family: Courier New;" class="mycode_font">+ leapyear {year}</span> ein, was einen Tag hinzufügt (oder eben nicht) für Februar.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Function.b leapyear{year.w}  ;returns 1 for leap year or 0<br />
res.b=0<br />
;divisible /100: not a leap year<br />
dummy.w=(year/100)<br />
If (dummy*100)=year<br />
  res=0<br />
  ;divisible /400: leap year<br />
  dummy.w=(year/400)<br />
  If (dummy*400)=year Then res=1<br />
  Function Return res<br />
EndIf<br />
;divisible /4  : leap year<br />
dummy.w=(year/4)  :If (dummy*4)=year Then res=1 Else res=0<br />
Function Return res<br />
End Function<br />
<br />
;testcase<br />
NPrint "leap year test case:"<br />
NPrint "1800 (no) ",leapyear{1800}<br />
NPrint "1900 (no) ",leapyear{1900}<br />
NPrint "2100 (no) ",leapyear{2100}<br />
<br />
NPrint "2009 (no) ",leapyear{2009}<br />
NPrint "2010 (no) ",leapyear{2010}<br />
NPrint "2011 (no) ",leapyear{2011}<br />
<br />
NPrint "2008 (ya) ",leapyear{2008}<br />
NPrint "2012 (ya) ",leapyear{2012}<br />
NPrint "2016 (ya) ",leapyear{2016}<br />
<br />
NPrint "2000 (ya) ",leapyear{2000}<br />
NPrint "2400 (ya) ",leapyear{2400}<br />
<br />
Stop</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[RGB - Effekte mit BitplanesBitmap]]></title>
			<link>https://www.amiblitz.de/community/thread-132.html</link>
			<pubDate>Sat, 31 Jan 2015 22:39:39 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-132.html</guid>
			<description><![CDATA[Habe bei EAB Fragen darüber gesehen, alte Threads. Ich dachte, das gehört aber besser hier her. <img src="https://www.amiblitz.de/community/images/smilies/wink.png" alt="Wink" title="Wink" class="smilie smilie_2" /> <br />
<br />
RGB-Demo-Effekte, wie z.B. Cubos usw.<br />
Ich hatte so etwas früher schon mal gemacht, beinahe 2 Decaden ist das jetzt her. :o <br />
<br />
Also, hier ist ein Beispiel:]]></description>
			<content:encoded><![CDATA[Habe bei EAB Fragen darüber gesehen, alte Threads. Ich dachte, das gehört aber besser hier her. <img src="https://www.amiblitz.de/community/images/smilies/wink.png" alt="Wink" title="Wink" class="smilie smilie_2" /> <br />
<br />
RGB-Demo-Effekte, wie z.B. Cubos usw.<br />
Ich hatte so etwas früher schon mal gemacht, beinahe 2 Decaden ist das jetzt her. :o <br />
<br />
Also, hier ist ein Beispiel:]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[meine P96screen.include läuft nicht mit debugger...]]></title>
			<link>https://www.amiblitz.de/community/thread-69.html</link>
			<pubDate>Mon, 03 Feb 2014 21:19:02 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-69.html</guid>
			<description><![CDATA[hallo, hier nochmal meine bisherige, unzuverlässige Vorgehensweise, wenn ich einen RTG-Screen öffnen will. Unzuverlässig deshalb, weil das Programm offenbar bei Closescreen einfriert; allerdings nur manchmal und nur mit Debugger On.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>; picasso 96 8 bit display, prepared for truecolor<br />
; by Frank Brandis<br />
; CHG: 25.05.2010<br />
; CHG: 06.06.2010&nbsp;&nbsp; ;alsreq -&gt; fallback. new dispload/save from env:<br />
<br />
; Function.l p96_openscreen&nbsp;&nbsp; {num.w,w.l,h.l,d.l,m.l,t&#36;} ;returns *scr.Screen (.l)<br />
; Function.l p96_askforscreen {num.w,stit&#36;,w.l,h.l,d.l}&nbsp;&nbsp;;ask for and opens screen, ret *scr.Screen<br />
<br />
; Statement&nbsp;&nbsp;dispsave {destdir&#36;,w.l,h.l,d.l,m.l}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;saves DisplayModeID to e.g. Env:<br />
; Function.l dispload {srcdir&#36; ,w.l,h.l,d.l}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;loads and returns DisplayID, if exists<br />
<br />
INCDIR "blitzinc:src/"<br />
XINCLUDE"screeninfo.ntype.bb"<br />
XINCLUDE"screen_tags.bb"<br />
<br />
bb2_p96display&#36;="ENVARC:BlitzP96Modes/" ;directory for storing used GFXCard Modes to use<br />
#p96_loadsave=1&nbsp;&nbsp;&nbsp;&nbsp; ;set to 0 later<br />
<br />
CNIF #p96_loadsave=1<br />
;save given parameters of displaymode to a file usually in ENVARC:<br />
Statement dispsave {dest&#36;,w.l,h.l,d.l,m.l}<br />
&nbsp;&nbsp;Format""<br />
&nbsp;&nbsp;newn&#36;=dest&#36;+Str&#36;(w)+"x"+Str&#36;(h)+"x"+Str&#36;(d)&nbsp;&nbsp; ;"ENV:800x600x8"<br />
<br />
&nbsp;&nbsp;o&#36;="&#36;"+Hex&#36;(m.l)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&#36;50041000<br />
<br />
&nbsp;&nbsp;If NOT(Exists(newn&#36;))<br />
&nbsp;&nbsp;&nbsp;&nbsp;If WriteFile(1,newn&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutput1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NPrint o&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseFile1:DefaultOutput<br />
&nbsp;&nbsp;&nbsp;&nbsp;EndIf<br />
&nbsp;&nbsp;EndIf<br />
End Statement<br />
<br />
Function.l dispload {src&#36;,w.l,h.l,d.l}<br />
&nbsp;&nbsp;Format""<br />
&nbsp;&nbsp;newn&#36;=src&#36;+Str&#36;(w)+"x"+Str&#36;(h)+"x"+Str&#36;(d)&nbsp;&nbsp; ;"ENV:800x600x8"<br />
<br />
&nbsp;&nbsp;o&#36;=""&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&#36;50041000<br />
<br />
&nbsp;&nbsp;If ReadFile(1,newn&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileInput1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#36;=Inkey&#36;(20)<br />
&nbsp;&nbsp;&nbsp;&nbsp;CloseFile1:DefaultInput<br />
&nbsp;&nbsp;EndIf<br />
&nbsp;&nbsp;Function Return Val(o&#36;)<br />
<br />
End Function<br />
CEND<br />
<br />
Function.l p96_openscreen {num.w,w.l,h.l,d.l,m.l,t&#36;}<br />
 ScreenTags num.w,t&#36;,#Width,w,#Height,h,#Dpth,d,#AutoScroll,1,#DPen,1,#BPen,2,#DisplayID,m,#LikeWorkbench,1<br />
; ScreenTags num.w,t&#36;,#Width,w,#Height,h,#Dpth,d,#AutoScroll,1,#DisplayID,m<br />
 ;Screen num,0,0,w,h,d,m,t&#36;,1,2<br />
<br />
 Function Return Peek.l(Addr Screen(num))<br />
End Function<br />
<br />
<br />
Function.l p96_askforscreen {num.w,stit&#36;,w.l,h.l,d.l}<br />
 SHARED bb2_p96display&#36;<br />
<br />
 FindScreen0&nbsp;&nbsp;&nbsp;&nbsp;;get a screen to open asl req on<br />
<br />
 scrimem.l=AllocVec_ (SizeOf.screeninfo,#MEMF_PUBLIC|#MEMF_CLEAR)<br />
<br />
 If scrimem&gt;0<br />
&nbsp;&nbsp; *scri.screeninfo=scrimem<br />
<br />
 ;&nbsp;&nbsp;*scri&#92;width&nbsp;&nbsp;=800 :&nbsp;&nbsp;*scri&#92;height =600<br />
 ;&nbsp;&nbsp;*scri&#92;dpth&nbsp;&nbsp; =8&nbsp;&nbsp; :&nbsp;&nbsp;*scri&#92;id&nbsp;&nbsp;&nbsp;&nbsp; =&#36;50041000<br />
 ;&nbsp;&nbsp; dispsave {bb2_p96display&#36;,800,600,8,&#36;50041000}<br />
<br />
 ;&nbsp;&nbsp;*scri&#92;width&nbsp;&nbsp;=640 :&nbsp;&nbsp;*scri&#92;height =480<br />
 ;&nbsp;&nbsp;*scri&#92;dpth&nbsp;&nbsp; =8&nbsp;&nbsp; :&nbsp;&nbsp;*scri&#92;id&nbsp;&nbsp;&nbsp;&nbsp; =&#36;50031000<br />
 ;&nbsp;&nbsp; dispsave {bb2_p96display&#36;,640,480,8,&#36;50031000}<br />
<br />
&nbsp;&nbsp; *scri&#92;width&nbsp;&nbsp;=w.l<br />
&nbsp;&nbsp; *scri&#92;height =h.l<br />
&nbsp;&nbsp; *scri&#92;dpth&nbsp;&nbsp; =d.l<br />
<br />
<br />
&nbsp;&nbsp; CNIF#p96_loadsave=1<br />
&nbsp;&nbsp; res.l = dispload {bb2_p96display&#36;,*scri&#92;width,*scri&#92;height,*scri&#92;dpth}<br />
<br />
&nbsp;&nbsp; *scri&#92;id&nbsp;&nbsp;&nbsp;&nbsp; =res<br />
&nbsp;&nbsp; CEND<br />
<br />
&nbsp;&nbsp; If *scri&#92;id=0<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; *scri=ASLScreenRequest(1|2|4)&nbsp;&nbsp; ;uncomment this to chg new mode (snoop id with scout)<br />
<br />
&nbsp;&nbsp; EndIf<br />
 Else<br />
&nbsp;&nbsp; End&nbsp;&nbsp;;cancel<br />
 EndIf<br />
<br />
 res.l=p96_openscreen {num.w,*scri&#92;width,*scri&#92;height,*scri&#92;dpth,*scri&#92;id,stit&#36;}<br />
 If res<br />
&nbsp;&nbsp; CNIF#p96_loadsave=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;dispsave {bb2_p96display&#36;,*scri&#92;width,*scri&#92;height,*scri&#92;dpth,*scri&#92;id}<br />
&nbsp;&nbsp; CEND<br />
<br />
&nbsp;&nbsp; ;*sc.Screen=res<br />
&nbsp;&nbsp; ;Gosub main<br />
&nbsp;&nbsp; Use Screen num<br />
 EndIf<br />
 *scri=0<br />
 FreeVec_ scrimem.l<br />
 Function Return res<br />
End Function<br />
<br />
<br />
;<br />
;test.l= p96_askforscreen{1,"testscreen",800,600,8}<br />
<br />
;If test<br />
;&nbsp;&nbsp;Delay_150<br />
<br />
;&nbsp;&nbsp;CloseScreen 1<br />
;EndIf<br />
<br />
;NPrint Hex&#36;(test)<br />
;MouseWait<br />
;End</code></div></div> <br />
<br />
das folgende wird bei Verwendung der load/save Option in Envarc: gespeichert:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>envarc:blitzp96modes<br />
&nbsp;&nbsp; 800x600x4<br />
&nbsp;&nbsp; 720x576x24<br />
&nbsp;&nbsp; 800x600x5<br />
&nbsp;&nbsp; 896x600x8<br />
&nbsp;&nbsp; 896x600x24<br />
&nbsp;&nbsp; 800x600x24<br />
&nbsp;&nbsp; 640x480x24<br />
&nbsp;&nbsp; 1152x768x8<br />
&nbsp;&nbsp; 1152x768x24<br />
&nbsp;&nbsp; 1280x854x8<br />
&nbsp;&nbsp; 1280x854x24<br />
&nbsp;&nbsp; 1024x768x8<br />
&nbsp;&nbsp; 1024x768x24<br />
&nbsp;&nbsp; 800x600x8<br />
&nbsp;&nbsp; 720x480x8<br />
&nbsp;&nbsp; 720x480x24<br />
&nbsp;&nbsp; 640x480x8</code></div></div><br />
wer sieht was Illegales/falsches? Wie gesagt, es funktioniert eigentlich. Ich wüßte nur gerne, warum es manchmal eben nicht funktioniert. Ich glaube ja, mein ASL-Screenrequest wird manchmal getrasht, weil ich zum Teil Einträge wie dieses hier finde:<br />
<br />
22230303x4202020x2048  oder so. Da ging dann irgendwas schief?]]></description>
			<content:encoded><![CDATA[hallo, hier nochmal meine bisherige, unzuverlässige Vorgehensweise, wenn ich einen RTG-Screen öffnen will. Unzuverlässig deshalb, weil das Programm offenbar bei Closescreen einfriert; allerdings nur manchmal und nur mit Debugger On.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>; picasso 96 8 bit display, prepared for truecolor<br />
; by Frank Brandis<br />
; CHG: 25.05.2010<br />
; CHG: 06.06.2010&nbsp;&nbsp; ;alsreq -&gt; fallback. new dispload/save from env:<br />
<br />
; Function.l p96_openscreen&nbsp;&nbsp; {num.w,w.l,h.l,d.l,m.l,t&#36;} ;returns *scr.Screen (.l)<br />
; Function.l p96_askforscreen {num.w,stit&#36;,w.l,h.l,d.l}&nbsp;&nbsp;;ask for and opens screen, ret *scr.Screen<br />
<br />
; Statement&nbsp;&nbsp;dispsave {destdir&#36;,w.l,h.l,d.l,m.l}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;saves DisplayModeID to e.g. Env:<br />
; Function.l dispload {srcdir&#36; ,w.l,h.l,d.l}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;loads and returns DisplayID, if exists<br />
<br />
INCDIR "blitzinc:src/"<br />
XINCLUDE"screeninfo.ntype.bb"<br />
XINCLUDE"screen_tags.bb"<br />
<br />
bb2_p96display&#36;="ENVARC:BlitzP96Modes/" ;directory for storing used GFXCard Modes to use<br />
#p96_loadsave=1&nbsp;&nbsp;&nbsp;&nbsp; ;set to 0 later<br />
<br />
CNIF #p96_loadsave=1<br />
;save given parameters of displaymode to a file usually in ENVARC:<br />
Statement dispsave {dest&#36;,w.l,h.l,d.l,m.l}<br />
&nbsp;&nbsp;Format""<br />
&nbsp;&nbsp;newn&#36;=dest&#36;+Str&#36;(w)+"x"+Str&#36;(h)+"x"+Str&#36;(d)&nbsp;&nbsp; ;"ENV:800x600x8"<br />
<br />
&nbsp;&nbsp;o&#36;="&#36;"+Hex&#36;(m.l)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&#36;50041000<br />
<br />
&nbsp;&nbsp;If NOT(Exists(newn&#36;))<br />
&nbsp;&nbsp;&nbsp;&nbsp;If WriteFile(1,newn&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutput1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NPrint o&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseFile1:DefaultOutput<br />
&nbsp;&nbsp;&nbsp;&nbsp;EndIf<br />
&nbsp;&nbsp;EndIf<br />
End Statement<br />
<br />
Function.l dispload {src&#36;,w.l,h.l,d.l}<br />
&nbsp;&nbsp;Format""<br />
&nbsp;&nbsp;newn&#36;=src&#36;+Str&#36;(w)+"x"+Str&#36;(h)+"x"+Str&#36;(d)&nbsp;&nbsp; ;"ENV:800x600x8"<br />
<br />
&nbsp;&nbsp;o&#36;=""&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&#36;50041000<br />
<br />
&nbsp;&nbsp;If ReadFile(1,newn&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileInput1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&#36;=Inkey&#36;(20)<br />
&nbsp;&nbsp;&nbsp;&nbsp;CloseFile1:DefaultInput<br />
&nbsp;&nbsp;EndIf<br />
&nbsp;&nbsp;Function Return Val(o&#36;)<br />
<br />
End Function<br />
CEND<br />
<br />
Function.l p96_openscreen {num.w,w.l,h.l,d.l,m.l,t&#36;}<br />
 ScreenTags num.w,t&#36;,#Width,w,#Height,h,#Dpth,d,#AutoScroll,1,#DPen,1,#BPen,2,#DisplayID,m,#LikeWorkbench,1<br />
; ScreenTags num.w,t&#36;,#Width,w,#Height,h,#Dpth,d,#AutoScroll,1,#DisplayID,m<br />
 ;Screen num,0,0,w,h,d,m,t&#36;,1,2<br />
<br />
 Function Return Peek.l(Addr Screen(num))<br />
End Function<br />
<br />
<br />
Function.l p96_askforscreen {num.w,stit&#36;,w.l,h.l,d.l}<br />
 SHARED bb2_p96display&#36;<br />
<br />
 FindScreen0&nbsp;&nbsp;&nbsp;&nbsp;;get a screen to open asl req on<br />
<br />
 scrimem.l=AllocVec_ (SizeOf.screeninfo,#MEMF_PUBLIC|#MEMF_CLEAR)<br />
<br />
 If scrimem&gt;0<br />
&nbsp;&nbsp; *scri.screeninfo=scrimem<br />
<br />
 ;&nbsp;&nbsp;*scri&#92;width&nbsp;&nbsp;=800 :&nbsp;&nbsp;*scri&#92;height =600<br />
 ;&nbsp;&nbsp;*scri&#92;dpth&nbsp;&nbsp; =8&nbsp;&nbsp; :&nbsp;&nbsp;*scri&#92;id&nbsp;&nbsp;&nbsp;&nbsp; =&#36;50041000<br />
 ;&nbsp;&nbsp; dispsave {bb2_p96display&#36;,800,600,8,&#36;50041000}<br />
<br />
 ;&nbsp;&nbsp;*scri&#92;width&nbsp;&nbsp;=640 :&nbsp;&nbsp;*scri&#92;height =480<br />
 ;&nbsp;&nbsp;*scri&#92;dpth&nbsp;&nbsp; =8&nbsp;&nbsp; :&nbsp;&nbsp;*scri&#92;id&nbsp;&nbsp;&nbsp;&nbsp; =&#36;50031000<br />
 ;&nbsp;&nbsp; dispsave {bb2_p96display&#36;,640,480,8,&#36;50031000}<br />
<br />
&nbsp;&nbsp; *scri&#92;width&nbsp;&nbsp;=w.l<br />
&nbsp;&nbsp; *scri&#92;height =h.l<br />
&nbsp;&nbsp; *scri&#92;dpth&nbsp;&nbsp; =d.l<br />
<br />
<br />
&nbsp;&nbsp; CNIF#p96_loadsave=1<br />
&nbsp;&nbsp; res.l = dispload {bb2_p96display&#36;,*scri&#92;width,*scri&#92;height,*scri&#92;dpth}<br />
<br />
&nbsp;&nbsp; *scri&#92;id&nbsp;&nbsp;&nbsp;&nbsp; =res<br />
&nbsp;&nbsp; CEND<br />
<br />
&nbsp;&nbsp; If *scri&#92;id=0<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; *scri=ASLScreenRequest(1|2|4)&nbsp;&nbsp; ;uncomment this to chg new mode (snoop id with scout)<br />
<br />
&nbsp;&nbsp; EndIf<br />
 Else<br />
&nbsp;&nbsp; End&nbsp;&nbsp;;cancel<br />
 EndIf<br />
<br />
 res.l=p96_openscreen {num.w,*scri&#92;width,*scri&#92;height,*scri&#92;dpth,*scri&#92;id,stit&#36;}<br />
 If res<br />
&nbsp;&nbsp; CNIF#p96_loadsave=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;dispsave {bb2_p96display&#36;,*scri&#92;width,*scri&#92;height,*scri&#92;dpth,*scri&#92;id}<br />
&nbsp;&nbsp; CEND<br />
<br />
&nbsp;&nbsp; ;*sc.Screen=res<br />
&nbsp;&nbsp; ;Gosub main<br />
&nbsp;&nbsp; Use Screen num<br />
 EndIf<br />
 *scri=0<br />
 FreeVec_ scrimem.l<br />
 Function Return res<br />
End Function<br />
<br />
<br />
;<br />
;test.l= p96_askforscreen{1,"testscreen",800,600,8}<br />
<br />
;If test<br />
;&nbsp;&nbsp;Delay_150<br />
<br />
;&nbsp;&nbsp;CloseScreen 1<br />
;EndIf<br />
<br />
;NPrint Hex&#36;(test)<br />
;MouseWait<br />
;End</code></div></div> <br />
<br />
das folgende wird bei Verwendung der load/save Option in Envarc: gespeichert:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>envarc:blitzp96modes<br />
&nbsp;&nbsp; 800x600x4<br />
&nbsp;&nbsp; 720x576x24<br />
&nbsp;&nbsp; 800x600x5<br />
&nbsp;&nbsp; 896x600x8<br />
&nbsp;&nbsp; 896x600x24<br />
&nbsp;&nbsp; 800x600x24<br />
&nbsp;&nbsp; 640x480x24<br />
&nbsp;&nbsp; 1152x768x8<br />
&nbsp;&nbsp; 1152x768x24<br />
&nbsp;&nbsp; 1280x854x8<br />
&nbsp;&nbsp; 1280x854x24<br />
&nbsp;&nbsp; 1024x768x8<br />
&nbsp;&nbsp; 1024x768x24<br />
&nbsp;&nbsp; 800x600x8<br />
&nbsp;&nbsp; 720x480x8<br />
&nbsp;&nbsp; 720x480x24<br />
&nbsp;&nbsp; 640x480x8</code></div></div><br />
wer sieht was Illegales/falsches? Wie gesagt, es funktioniert eigentlich. Ich wüßte nur gerne, warum es manchmal eben nicht funktioniert. Ich glaube ja, mein ASL-Screenrequest wird manchmal getrasht, weil ich zum Teil Einträge wie dieses hier finde:<br />
<br />
22230303x4202020x2048  oder so. Da ging dann irgendwas schief?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Area-Commands (graphicslib) OLD!]]></title>
			<link>https://www.amiblitz.de/community/thread-65.html</link>
			<pubDate>Sat, 01 Feb 2014 13:51:59 +0100</pubDate>
			<guid isPermaLink="false">https://www.amiblitz.de/community/thread-65.html</guid>
			<description><![CDATA[Hallo Leute,<br />
<br />
hier mal eine alte Lib für BB2 von mir. Wenn ich mich recht erinnere, funktionierte die recht gut, evtl. gab es auch mal Speicherlecks (Chipmem) oder so, kann mich nicht mehr erinnern.<br />
Wäre schön, wenn da mal jemand drüber schauen könnte.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>;<br />
; RayAreaGfxLib<br />
; programmed for BlitzBasic 2 by Frank Brandis<br />
; (c)opyright 1995 by Frank Brandis<br />
;<br />
; maximum of areasteps = 360 !!!!<br />
;<br />
<br />
<br />
<br />
#rayarealib=22<br />
<br />
; graphics<br />
#_allocraster=-492 ;d0=(d0,d1)<br />
#_freeraster =-498 ;&nbsp;&nbsp; (a0,d0,d1)<br />
#_inittmpras =-468 ;&nbsp;&nbsp; (a0,a1,d0)<br />
#_initarea&nbsp;&nbsp; =-282 ;&nbsp;&nbsp; (a0,a1,d0)<br />
<br />
#_areamove&nbsp;&nbsp; =-252 ;d0=(a1,d0,d1)<br />
#_areadraw&nbsp;&nbsp; =-258 ;d0=(a1,d0,d1)<br />
#_areaend&nbsp;&nbsp;&nbsp;&nbsp;=-264 ;&nbsp;&nbsp; (a1)<br />
#_areaellipse=-186 ;d0=(a1,d0,d1,d2,d3) ;only os3 ????? i dunno ..<br />
#_drawellipse=-180 ;&nbsp;&nbsp; (a1,d0,d1,d2,d3)<br />
#_setapen&nbsp;&nbsp;&nbsp;&nbsp;=-342 ;&nbsp;&nbsp; (a1,d0)<br />
<br />
<br />
; exec<br />
#_allocmem&nbsp;&nbsp; =-198 ;d0=(d0,d1)<br />
#_freemem&nbsp;&nbsp;&nbsp;&nbsp;=-210 ;&nbsp;&nbsp; (a1,d0)<br />
<br />
!libheader {#rayarealib,0,0,0,0}<br />
<br />
!astatement<br />
!args {#word,#word,#word}<br />
!libs {#graphicslib,#la6}<br />
!subs {_areastart,0,0}<br />
!name {"Area","x,y,col&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;start of filled polygon"}<br />
<br />
!astatement<br />
!args {#word,#word}<br />
!libs {#graphicslib,#la6}<br />
!subs {_areastep,0,0}<br />
!name {"AreaStep","x,y&nbsp;&nbsp;&nbsp;&nbsp;;next coord of filled polygon"}<br />
<br />
!astatement<br />
!args<br />
!libs {#graphicslib,#la6}<br />
!subs {_areafill,0,0}<br />
!name {"AreaFill","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;closing the polygon"}<br />
<br />
!astatement<br />
!args {#word,#word,#word,#word,#word}<br />
!libs {#graphicslib,#la6}<br />
!subs {_areacirc,0,0}<br />
!name {"WCirclef","x,y,xrad,yrad,col"} ;doesn`t work (areaellipse_)<br />
<br />
!astatement<br />
!args {#long,#word,#word,#word,#word}<br />
!libs<br />
!subs {_setptrn,0,0}<br />
!name {"Pattern","*rp,areaptrn1,areaptrn2,areaptrn3,areaptrn4"}<br />
<br />
!afunction {#long}<br />
!args {#long,#long,#long,#word}<br />
!libs {#graphicslib,#la0,#execlib,#la1}<br />
!subs {_areainit,0,0}<br />
!name {"AreaInit","(*rp,width,height,maxcoords)&nbsp;&nbsp;TRUE if success"}<br />
<br />
!afunction {#long}<br />
!args<br />
!libs {#execlib,#la6}<br />
!subs {_areafinit,0,0}<br />
!name {"AreaFinit","&nbsp;&nbsp;BOOLEAN TRUE if success"}<br />
<br />
!astatement<br />
!args {#long,#word}<br />
!libs<br />
!subs {_linepat,0,0}<br />
!name {"LinePattern","*rp,pattval&nbsp;&nbsp;&nbsp;&nbsp;;pattval could be %1100110011001100"}<br />
<br />
!astatement<br />
!args {#long,#long,#byte}<br />
!libs<br />
!subs {_setptrna,0,0}<br />
!name {"PatternA","*rp,&amp;patdef,patsize; user pattern def, patsize must be one of x^2 !!"}<br />
<br />
!astatement<br />
!args {#long,#byte}<br />
!libs<br />
!subs {_setolpen,0,0}<br />
!name {"OutlinePen","*rp,colour&nbsp;&nbsp;;"}<br />
<br />
!astatement<br />
!args {#long,#byte}<br />
!libs<br />
!subs {_oline,0,0}<br />
!name {"Outline","*rp,bool.b&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; 0 or 1,switches areaborders off or on"}<br />
.<br />
<br />
!libfin<br />
<br />
._areastart<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1&nbsp;&nbsp; ;rp here&nbsp;&nbsp;:)<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;d0/d1,-(a7);x coord retten<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d2,d0&nbsp;&nbsp; ;colour nach d0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_setapen(a6)<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;(a7)+,d0/d1&nbsp;&nbsp; ;x coord rest.<br />
<br />
 JSR&nbsp;&nbsp; _areamove(a6)&nbsp;&nbsp; ;AreaMove_ *rp,x,y<br />
RTS<br />
<br />
._areastep<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1<br />
 JSR&nbsp;&nbsp; _areadraw(a6)&nbsp;&nbsp; ;AreaDraw_ *rp,x,y<br />
RTS<br />
<br />
._areacirc<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1&nbsp;&nbsp; ;*rp in a1<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;d0-d3,-(a7);x coord wegen lvosetapen_ retten<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d4,d0&nbsp;&nbsp; ;color nach d0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp; _setapen(a6)<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;(a7)+,d0-d3;x coord rest.<br />
<br />
; JSR _areaellipse(a6) ;AreaEllipse_ *rp,x,y,rx,ry&nbsp;&nbsp;,col<br />
 JSR _drawellipse(a6)<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp; _areaend(a6)&nbsp;&nbsp;;AreaEnd_ *rp<br />
RTS<br />
RTS<br />
<br />
._areafill<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_areaend(a6)&nbsp;&nbsp; ;AreaEnd_ *rp<br />
RTS<br />
<br />
.<br />
._areainit<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a2<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,(a2)<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; execbas(pc),a2<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a1,(a2)<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; rastprt(pc),a1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;rastport sichern<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a1)<br />
<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d3,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;max. areasteps<br />
 ADD.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;ein schritt zu maxsteps hinzu<br />
 MULU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #5,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;mal 5,wegen rasteralloc.<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msteps(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;als maxsteps sichern<br />
<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;widt(pc),a1<br />
 MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,(a1)<br />
 MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;width, should be windows max width<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heit(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,(a1)<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,d1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;height, should be windows max height<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a1),a6<br />
 JSR&nbsp;&nbsp; _allocraster(a6)<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ras(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;ras.l=AllocRaster_(640,256)<br />
 CMP.l #0,d0:BEQ noinit<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;widt(pc),a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 DIVU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #8,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heit(pc),a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 MULU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; MOVE.l #&#36;14000,d0&nbsp;&nbsp; ;(640/8)*256)<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ras(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpras(pc),a0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_inittmpras(a6)&nbsp;&nbsp; ;err.l=InitTmpRas_(tmpras,buf.l,(640/8)*256)<br />
<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; execbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msteps(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a1),d0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&#36;10001,d1<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_allocmem(a6)<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a0)&nbsp;&nbsp;&nbsp;&nbsp; ;buff&#36;=String&#36;(" ",(msteps+1)*5)<br />
<br />
 CMP.l #0,d0:BEQ&nbsp;&nbsp;noinit<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; areainf(pc),a0&nbsp;&nbsp;;eigene structur<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #360,d0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_initarea(a6)&nbsp;&nbsp;;err.l=InitArea_(*ai.AreaInfo,&amp;buff&#36;,360)<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpras(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,SizeOf.RastPort&#92;TmpRas(a1)&nbsp;&nbsp;&nbsp;&nbsp; ;*rp&#92;TmpRas=tmpras<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; areainf(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,SizeOf.RastPort&#92;AreaInfo(a1)&nbsp;&nbsp; ;*rp&#92;AreaInfo=*ai<br />
 MOVEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,d0<br />
 BRA okinit<br />
 noinit:<br />
 MOVEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #0,d0<br />
 okinit:<br />
RTS<br />
<br />
._areafinit<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;widt(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d0&nbsp;&nbsp; ;MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #640,d0<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heit(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d1&nbsp;&nbsp; ;MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #256,d1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ras(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a1),a0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_freeraster(a6)&nbsp;&nbsp; ;FreeRaster_ *ras,640,256<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; execbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msteps(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d0<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _freemem(a6)<br />
 ; d0=result<br />
RTS<br />
<br />
.<br />
._setptrn<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,a1<br />
LEA&nbsp;&nbsp; patt1(pc),a0<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,(a0)+<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,(a0)+<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d3,(a0)+<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d4,(a0)<br />
<br />
LEA&nbsp;&nbsp; patt1(pc),a0<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,SizeOf.RastPort&#92;AreaPtrn(a1)<br />
MOVE.b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #2,SizeOf.RastPort&#92;AreaPtSz(a1) ;heavy error last version<br />
RTS<br />
<br />
._setptrna<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,a1&nbsp;&nbsp;&nbsp;&nbsp;;rastprt<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,SizeOf.RastPort&#92;AreaPtrn(a1)<br />
MOVE.b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,SizeOf.RastPort&#92;AreaPtSz(a1)<br />
RTS<br />
<br />
._linepat<br />
 MOVE.l d0,a1<br />
 MOVE.w d1,SizeOf.RastPort&#92;LinePtrn(a1)<br />
RTS<br />
<br />
._setolpen<br />
 MOVE.l d0,a1<br />
 MOVE.b d1,SizeOf.RastPort&#92;AOlPen(a1)<br />
; MOVE.w SizeOf.RastPort&#92;Flags(a1),d0<br />
; BSET&nbsp;&nbsp; #3,d0<br />
; MOVE.w d0,SizeOf.RastPort&#92;Flags(a1)<br />
RTS<br />
<br />
._oline<br />
 MOVE.l&nbsp;&nbsp;d0,a1<br />
 SUB.l&nbsp;&nbsp; d0,d0<br />
 MOVE.w SizeOf.RastPort&#92;Flags(a1),d0<br />
 CMP.b&nbsp;&nbsp; #0,d1<br />
 BEQ dof<br />
 BSET&nbsp;&nbsp;&nbsp;&nbsp;#3,d0<br />
 bck:MOVE.w d0,SizeOf.RastPort&#92;Flags(a1)<br />
RTS<br />
dof:BCLR #3,d0:BRA bck<br />
<br />
tmpras:&nbsp;&nbsp;;struct<br />
 Dc.l 0<br />
 Dc.l 0<br />
<br />
areainf:Dcb.l 8,0<br />
<br />
execbas:Dc.l 0<br />
gfxbas: Dc.l 0<br />
rastprt:Dc.l 0<br />
ras:&nbsp;&nbsp;&nbsp;&nbsp;Dc.l 0<br />
msteps: Dc.l 0<br />
buff:&nbsp;&nbsp; Dc.l 0<br />
widt:&nbsp;&nbsp; Dc.w 0<br />
heit:&nbsp;&nbsp; Dc.w 0<br />
<br />
patt1:&nbsp;&nbsp;Dc.w 0,0,0,0<br />
Even</code></div></div>]]></description>
			<content:encoded><![CDATA[Hallo Leute,<br />
<br />
hier mal eine alte Lib für BB2 von mir. Wenn ich mich recht erinnere, funktionierte die recht gut, evtl. gab es auch mal Speicherlecks (Chipmem) oder so, kann mich nicht mehr erinnern.<br />
Wäre schön, wenn da mal jemand drüber schauen könnte.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>;<br />
; RayAreaGfxLib<br />
; programmed for BlitzBasic 2 by Frank Brandis<br />
; (c)opyright 1995 by Frank Brandis<br />
;<br />
; maximum of areasteps = 360 !!!!<br />
;<br />
<br />
<br />
<br />
#rayarealib=22<br />
<br />
; graphics<br />
#_allocraster=-492 ;d0=(d0,d1)<br />
#_freeraster =-498 ;&nbsp;&nbsp; (a0,d0,d1)<br />
#_inittmpras =-468 ;&nbsp;&nbsp; (a0,a1,d0)<br />
#_initarea&nbsp;&nbsp; =-282 ;&nbsp;&nbsp; (a0,a1,d0)<br />
<br />
#_areamove&nbsp;&nbsp; =-252 ;d0=(a1,d0,d1)<br />
#_areadraw&nbsp;&nbsp; =-258 ;d0=(a1,d0,d1)<br />
#_areaend&nbsp;&nbsp;&nbsp;&nbsp;=-264 ;&nbsp;&nbsp; (a1)<br />
#_areaellipse=-186 ;d0=(a1,d0,d1,d2,d3) ;only os3 ????? i dunno ..<br />
#_drawellipse=-180 ;&nbsp;&nbsp; (a1,d0,d1,d2,d3)<br />
#_setapen&nbsp;&nbsp;&nbsp;&nbsp;=-342 ;&nbsp;&nbsp; (a1,d0)<br />
<br />
<br />
; exec<br />
#_allocmem&nbsp;&nbsp; =-198 ;d0=(d0,d1)<br />
#_freemem&nbsp;&nbsp;&nbsp;&nbsp;=-210 ;&nbsp;&nbsp; (a1,d0)<br />
<br />
!libheader {#rayarealib,0,0,0,0}<br />
<br />
!astatement<br />
!args {#word,#word,#word}<br />
!libs {#graphicslib,#la6}<br />
!subs {_areastart,0,0}<br />
!name {"Area","x,y,col&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;start of filled polygon"}<br />
<br />
!astatement<br />
!args {#word,#word}<br />
!libs {#graphicslib,#la6}<br />
!subs {_areastep,0,0}<br />
!name {"AreaStep","x,y&nbsp;&nbsp;&nbsp;&nbsp;;next coord of filled polygon"}<br />
<br />
!astatement<br />
!args<br />
!libs {#graphicslib,#la6}<br />
!subs {_areafill,0,0}<br />
!name {"AreaFill","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;closing the polygon"}<br />
<br />
!astatement<br />
!args {#word,#word,#word,#word,#word}<br />
!libs {#graphicslib,#la6}<br />
!subs {_areacirc,0,0}<br />
!name {"WCirclef","x,y,xrad,yrad,col"} ;doesn`t work (areaellipse_)<br />
<br />
!astatement<br />
!args {#long,#word,#word,#word,#word}<br />
!libs<br />
!subs {_setptrn,0,0}<br />
!name {"Pattern","*rp,areaptrn1,areaptrn2,areaptrn3,areaptrn4"}<br />
<br />
!afunction {#long}<br />
!args {#long,#long,#long,#word}<br />
!libs {#graphicslib,#la0,#execlib,#la1}<br />
!subs {_areainit,0,0}<br />
!name {"AreaInit","(*rp,width,height,maxcoords)&nbsp;&nbsp;TRUE if success"}<br />
<br />
!afunction {#long}<br />
!args<br />
!libs {#execlib,#la6}<br />
!subs {_areafinit,0,0}<br />
!name {"AreaFinit","&nbsp;&nbsp;BOOLEAN TRUE if success"}<br />
<br />
!astatement<br />
!args {#long,#word}<br />
!libs<br />
!subs {_linepat,0,0}<br />
!name {"LinePattern","*rp,pattval&nbsp;&nbsp;&nbsp;&nbsp;;pattval could be %1100110011001100"}<br />
<br />
!astatement<br />
!args {#long,#long,#byte}<br />
!libs<br />
!subs {_setptrna,0,0}<br />
!name {"PatternA","*rp,&amp;patdef,patsize; user pattern def, patsize must be one of x^2 !!"}<br />
<br />
!astatement<br />
!args {#long,#byte}<br />
!libs<br />
!subs {_setolpen,0,0}<br />
!name {"OutlinePen","*rp,colour&nbsp;&nbsp;;"}<br />
<br />
!astatement<br />
!args {#long,#byte}<br />
!libs<br />
!subs {_oline,0,0}<br />
!name {"Outline","*rp,bool.b&nbsp;&nbsp;&nbsp;&nbsp; ;&nbsp;&nbsp; 0 or 1,switches areaborders off or on"}<br />
.<br />
<br />
!libfin<br />
<br />
._areastart<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1&nbsp;&nbsp; ;rp here&nbsp;&nbsp;:)<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;d0/d1,-(a7);x coord retten<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d2,d0&nbsp;&nbsp; ;colour nach d0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_setapen(a6)<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;(a7)+,d0/d1&nbsp;&nbsp; ;x coord rest.<br />
<br />
 JSR&nbsp;&nbsp; _areamove(a6)&nbsp;&nbsp; ;AreaMove_ *rp,x,y<br />
RTS<br />
<br />
._areastep<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1<br />
 JSR&nbsp;&nbsp; _areadraw(a6)&nbsp;&nbsp; ;AreaDraw_ *rp,x,y<br />
RTS<br />
<br />
._areacirc<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1&nbsp;&nbsp; ;*rp in a1<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;d0-d3,-(a7);x coord wegen lvosetapen_ retten<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d4,d0&nbsp;&nbsp; ;color nach d0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp; _setapen(a6)<br />
<br />
 MOVEM.l&nbsp;&nbsp;&nbsp;&nbsp;(a7)+,d0-d3;x coord rest.<br />
<br />
; JSR _areaellipse(a6) ;AreaEllipse_ *rp,x,y,rx,ry&nbsp;&nbsp;,col<br />
 JSR _drawellipse(a6)<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp; _areaend(a6)&nbsp;&nbsp;;AreaEnd_ *rp<br />
RTS<br />
RTS<br />
<br />
._areafill<br />
 LEA&nbsp;&nbsp;rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(a0),a1<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_areaend(a6)&nbsp;&nbsp; ;AreaEnd_ *rp<br />
RTS<br />
<br />
.<br />
._areainit<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a2<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,(a2)<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; execbas(pc),a2<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a1,(a2)<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; rastprt(pc),a1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;rastport sichern<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a1)<br />
<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d3,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;max. areasteps<br />
 ADD.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;ein schritt zu maxsteps hinzu<br />
 MULU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #5,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;mal 5,wegen rasteralloc.<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msteps(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;als maxsteps sichern<br />
<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;widt(pc),a1<br />
 MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,(a1)<br />
 MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;width, should be windows max width<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heit(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,(a1)<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,d1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;height, should be windows max height<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a1),a6<br />
 JSR&nbsp;&nbsp; _allocraster(a6)<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ras(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;ras.l=AllocRaster_(640,256)<br />
 CMP.l #0,d0:BEQ noinit<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;widt(pc),a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 DIVU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #8,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heit(pc),a0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />
 MULU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,d0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; MOVE.l #&#36;14000,d0&nbsp;&nbsp; ;(640/8)*256)<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ras(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpras(pc),a0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_inittmpras(a6)&nbsp;&nbsp; ;err.l=InitTmpRas_(tmpras,buf.l,(640/8)*256)<br />
<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; execbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msteps(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a1),d0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&#36;10001,d1<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_allocmem(a6)<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,(a0)&nbsp;&nbsp;&nbsp;&nbsp; ;buff&#36;=String&#36;(" ",(msteps+1)*5)<br />
<br />
 CMP.l #0,d0:BEQ&nbsp;&nbsp;noinit<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; areainf(pc),a0&nbsp;&nbsp;;eigene structur<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #360,d0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_initarea(a6)&nbsp;&nbsp;;err.l=InitArea_(*ai.AreaInfo,&amp;buff&#36;,360)<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; rastprt(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpras(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,SizeOf.RastPort&#92;TmpRas(a1)&nbsp;&nbsp;&nbsp;&nbsp; ;*rp&#92;TmpRas=tmpras<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; areainf(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,SizeOf.RastPort&#92;AreaInfo(a1)&nbsp;&nbsp; ;*rp&#92;AreaInfo=*ai<br />
 MOVEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#1,d0<br />
 BRA okinit<br />
 noinit:<br />
 MOVEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #0,d0<br />
 okinit:<br />
RTS<br />
<br />
._areafinit<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;widt(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d0&nbsp;&nbsp; ;MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #640,d0<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heit(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d1&nbsp;&nbsp; ;MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #256,d1<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gfxbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ras(pc),a1<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a1),a0<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;_freeraster(a6)&nbsp;&nbsp; ;FreeRaster_ *ras,640,256<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp; execbas(pc),a0<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a6<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msteps(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),d0<br />
<br />
 LEA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buff(pc),a0&nbsp;&nbsp; ;<br />
 MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a0),a1<br />
 JSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _freemem(a6)<br />
 ; d0=result<br />
RTS<br />
<br />
.<br />
._setptrn<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,a1<br />
LEA&nbsp;&nbsp; patt1(pc),a0<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,(a0)+<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,(a0)+<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d3,(a0)+<br />
MOVE.w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d4,(a0)<br />
<br />
LEA&nbsp;&nbsp; patt1(pc),a0<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a0,SizeOf.RastPort&#92;AreaPtrn(a1)<br />
MOVE.b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #2,SizeOf.RastPort&#92;AreaPtSz(a1) ;heavy error last version<br />
RTS<br />
<br />
._setptrna<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d0,a1&nbsp;&nbsp;&nbsp;&nbsp;;rastprt<br />
MOVE.l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d1,SizeOf.RastPort&#92;AreaPtrn(a1)<br />
MOVE.b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d2,SizeOf.RastPort&#92;AreaPtSz(a1)<br />
RTS<br />
<br />
._linepat<br />
 MOVE.l d0,a1<br />
 MOVE.w d1,SizeOf.RastPort&#92;LinePtrn(a1)<br />
RTS<br />
<br />
._setolpen<br />
 MOVE.l d0,a1<br />
 MOVE.b d1,SizeOf.RastPort&#92;AOlPen(a1)<br />
; MOVE.w SizeOf.RastPort&#92;Flags(a1),d0<br />
; BSET&nbsp;&nbsp; #3,d0<br />
; MOVE.w d0,SizeOf.RastPort&#92;Flags(a1)<br />
RTS<br />
<br />
._oline<br />
 MOVE.l&nbsp;&nbsp;d0,a1<br />
 SUB.l&nbsp;&nbsp; d0,d0<br />
 MOVE.w SizeOf.RastPort&#92;Flags(a1),d0<br />
 CMP.b&nbsp;&nbsp; #0,d1<br />
 BEQ dof<br />
 BSET&nbsp;&nbsp;&nbsp;&nbsp;#3,d0<br />
 bck:MOVE.w d0,SizeOf.RastPort&#92;Flags(a1)<br />
RTS<br />
dof:BCLR #3,d0:BRA bck<br />
<br />
tmpras:&nbsp;&nbsp;;struct<br />
 Dc.l 0<br />
 Dc.l 0<br />
<br />
areainf:Dcb.l 8,0<br />
<br />
execbas:Dc.l 0<br />
gfxbas: Dc.l 0<br />
rastprt:Dc.l 0<br />
ras:&nbsp;&nbsp;&nbsp;&nbsp;Dc.l 0<br />
msteps: Dc.l 0<br />
buff:&nbsp;&nbsp; Dc.l 0<br />
widt:&nbsp;&nbsp; Dc.w 0<br />
heit:&nbsp;&nbsp; Dc.w 0<br />
<br />
patt1:&nbsp;&nbsp;Dc.w 0,0,0,0<br />
Even</code></div></div>]]></content:encoded>
		</item>
	</channel>
</rss>