summaryrefslogtreecommitdiff
path: root/global.bmx
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2019-12-14 19:56:02 +0000
committerIan C <ianc@noddybox.co.uk>2019-12-14 19:56:02 +0000
commit0cdd3d106b542c4f7e04aea56390363d2cb2a93d (patch)
tree70edcd9098df22774fac5997477b0fb3c33180ec /global.bmx
parentc6819b88a79e3ebe7f5d7c69c292b7b29a2d818e (diff)
Updates to work with new BlitzMax.
Diffstat (limited to 'global.bmx')
-rw-r--r--global.bmx811
1 files changed, 406 insertions, 405 deletions
diff --git a/global.bmx b/global.bmx
index b220932..ed55299 100644
--- a/global.bmx
+++ b/global.bmx
@@ -1,405 +1,406 @@
-' Missile Lock
-'
-' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk)
-'
-' This program is free software; you can redistribute it and/or modify
-' it under the terms of the GNU General Public License as published by
-' the Free Software Foundation; either version 2 of the License, or
-' (at your option) any later version.
-'
-' This program is distributed in the hope that it will be useful,
-' but WITHOUT ANY WARRANTY; without even the implied warranty of
-' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-' GNU General Public License for more details.
-'
-' You should have received a copy of the GNU General Public License
-' along with this program; if not, write to the Free Software
-' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-'
-' -------------------------------------------------------------------------
-'
-' $Id$
-'
-Strict
-Import brl.pngloader
-
-Import noddybox.bitmapfont
-Import noddybox.gfxmenu
-
-
-' Included binaries
-'
-Incbin "GFX/font.bmf"
-
-Incbin "GFX/title.png"
-Incbin "GFX/ship.png"
-Incbin "GFX/missile.png"
-Incbin "GFX/exhaust.png"
-Incbin "GFX/flame.png"
-Incbin "GFX/star.png"
-Incbin "GFX/twinkle.png"
-Incbin "GFX/asteroid.png"
-Incbin "GFX/fireball.png"
-
-Const HERTZ:Int=70
-
-Const MISSILE_LAYER:Int=1
-Const ASTEROID_LAYER:Int=2
-Const ALL_LAYERS:Int=3
-
-Type GFX
- Global font:TBitmapFont
-
- Global title:TImage
-
- Global ship:TImage
- Global missile:TImage
- Global exhaust:TImage
- Global flame:TImage
- Global star:TImage
- Global twinkle:TImage
- Global asteroid:TImage
- Global fireball:TImage
-
- Function SafeLoadImage:TImage(p:String, mode:Int)
- Local i:TImage=LoadImage(p,mode)
- Assert i,"Failed to load " + p
- Return i
- End Function
-
- Function SafeLoadAnimImage:TImage(p:String, w:Int, h:Int, f:Int, c:Int, mode:Int)
- Local i:TImage=LoadAnimImage(p,w,h,f,c,mode)
- Assert i,"Failed to load " + p
- Return i
- End Function
-
- Function Init()
- font=TBitmapFont.Load("incbin::GFX/font.bmf",0)
-
- Assert font,"Failed to load incbin::GFX/font.bmf"
-
- title=SafeLoadImage("incbin::GFX/title.png",0)
-
- ship=SafeLoadImage("incbin::GFX/ship.png",FILTEREDIMAGE)
- flame=SafeLoadImage("incbin::GFX/flame.png",FILTEREDIMAGE)
- MidHandleImage(ship)
- MidHandleImage(flame)
-
- missile=SafeLoadImage("incbin::GFX/missile.png",FILTEREDIMAGE)
- exhaust=SafeLoadImage("incbin::GFX/exhaust.png",FILTEREDIMAGE)
- SetImageHandle(missile,3,7)
- SetImageHandle(exhaust,3,3)
-
- star=SafeLoadImage("incbin::GFX/star.png",0)
- SetImageHandle(star,1,1)
-
- twinkle=SafeLoadAnimImage("incbin::GFX/twinkle.png",8,8,0,6,0)
- SetImageHandle(star,2,2)
-
- asteroid=SafeLoadImage("incbin::GFX/asteroid.png",FILTEREDIMAGE)
- MidHandleImage(asteroid)
-
- fireball=SafeLoadImage("incbin::GFX/fireball.png",FILTEREDIMAGE)
- SetImageHandle(fireball,15,15)
- End Function
-End Type
-
-Type GameConfig
- Global kleft:Int
- Global kright:Int
- Global kpause:Int
- Global kthrust:Int
- Global hiscore:Int
- Global maxlevel:Int
- Global accepted:Int
-
- Function Load()
- Local s:TStream=ReadStream("mlock.config")
-
- If s=Null
- kleft=KEY_LEFT
- kright=KEY_RIGHT
- kthrust=KEY_SPACE
- kpause=KEY_P
- hiscore=0
- maxlevel=1
- accepted=False
- Return
- EndIf
-
- s=LittleEndianStream(s)
-
- kleft=s.ReadInt()
- kright=s.ReadInt()
- kthrust=s.ReadInt()
- kpause=s.ReadInt()
- hiscore=s.ReadInt()
- maxlevel=s.ReadInt()
- accepted=s.ReadInt()
-
- s.Close()
- End Function
-
- Function Save()
- Local s:TStream=WriteStream("mlock.config")
-
- If s=Null
- Return
- EndIf
-
- s=LittleEndianStream(s)
-
- s.WriteInt(kleft)
- s.WriteInt(kright)
- s.WriteInt(kthrust)
- s.WriteInt(kpause)
- s.WriteInt(hiscore)
- s.WriteInt(maxlevel)
- s.WriteInt(accepted)
-
- s.Close()
- End Function
-EndType
-
-Type TEasyLink
- Field l:TLink
-
- Function Create:TEasyLink(l:TList)
- Local o:TEasyLink=New TEasyLink
- o.l=l.FirstLink()
- Return o
- End Function
-
- Method Value:Object()
- If l
- Return l.Value()
- Else
- Return Null
- EndIf
- End Method
-
- Method MoveNext()
- If l
- l=l.NextLink()
- EndIf
- End Method
-
- Method Remove()
- Local ol:TLink=l
- MoveNext()
- ol.Remove()
- End Method
-End Type
-
-
-Type Scroller
- Global msg:String
- Global msgp:Int
- Global msgx:Int
- Global txth:Int
-
- Function Init()
- Rem
- msg=" "
- msg:+"DURING A TEST-FLIGHT OF THE STAR-FIGHTER OGL-X YOU ARE AMBUSHED IN THE ASTEROID FIELD OUTSIDE OF MARS... "
- msg:+"THE EVIL EMPIRE CANNOT BE ALLOWED TO DESTROY THE PROTOTYPE SO YOU MUST PILOT THE WEAPONLESS CRAFT, "
- msg:+"AVOIDING THE DEADLY MISSILES UNTIL HELP ARRIVES... "
- msg:+"SHOW HEART YOUNG PILOT, STAR-FLEET IS DEPENDING UPON YOU!"
- EndRem
-
- msg=" "
- msg:+"IT IS A TIME OF WAR. IN A LAST DITCH ATTEMPT TO WIN A LOSING WAR THAT HAS RAGED THROUGH THE GALAXY AGAINST THE EVIL EMPIRE "
- msg:+"A NEW SHIP, THE DX-9, HAS BEEN DEVELOPED. ON A ROUTINE TEST FLIGHT THE SHIP HAS BEEN AMBUSHED IN AN ASTEROID FIELD. "
- msg:+"WEAPONLESS, YOU MUST PILOT THE DX-9 AND AVOID THE EMPIRE'S MISSILE SALVOS AMONGST THE ASTEROIDS... HELP WILL ARRIVE EVENTUALLY, "
- msg:+"BUT UNTIL THEN YOU ARE OUR LAST HOPE. IF THE DX-9 IS LOST THEN SO IS THE EARTH. EARTH IS DEPENDING ON YOU!!!"
-
- msgx=0
- msgp=0
-
- txth=GFX.font.MaxHeight()
- End Function
-
- Function Draw(y:Int)
- GFX.font.Draw(msg[..70],msgx,y)
-
- Rem
- SetColor(0,0,0)
- Local a:Double=1
- For Local f:Int=0 To 10
- SetAlpha(a)
- a:-0.09
- DrawLine(f,y,f,y+txth)
- DrawLine(799-f,y,799-f,y+txth)
- Next
- SetColor(255,255,255)
- SetAlpha(1)
- EndRem
-
- msgx:-2
- If msgx<-GFX.font.TextWidth(msg[0..1])
- msgx:+GFX.font.TextWidth(msg[0..1])
- msg=msg[1..]+msg[0..1]
- EndIf
- End Function
-End Type
-
-Type VText
- Field t:String
- Field y:Int
-
- Function Create:VText(t:String, y:Int)
- Local o:VText=New VText
- o.t=t
- o.y=y
- Return o
- End Function
-End Type
-
-Type VerticalScroller
- Global msg:TList
- Global maxy:Int
-
- Method New()
- msg=CreateList()
- maxy=0
- End Method
-
- Method Add(s:String)
- SetScale(2,2)
- msg.AddLast(VText.Create(s,maxy+800))
- maxy:+GFX.font.TextHeight(s)
- SetScale(1,1)
- End Method
-
- Method Draw()
- SetScale(2,2)
- For Local o:VText=EachIn msg
- o.y:-1
- If o.y<-GFX.font.TextHeight(o.t)
- o.y:+maxy
- EndIf
- If o.y<799
- GFX.font.Centre(o.t,o.y)
- EndIf
- Next
- SetScale(1,1)
- End Method
-End Type
-
-Type Thanks
- Global item:String[]
- Global i:Int
- Global wait:Int
- Global a:Double
- Global ai:Double
-
- Function Init()
- item=["HTTP://WWW.SLAYRADIO.ORG/", ..
- "HTTP://WWW.BLITZBASIC.COM/"]
- i=0
- a=0
- ai=0.05
- End Function
-
- Function Draw(y:Int)
- SetAlpha(a)
- GFX.font.Centre(item[i],y)
- SetAlpha(1)
-
- If wait
- wait:-1
- Else
- a:+ai
-
- If a>1
- wait=HERTZ*5
- ai=-0.05
- a=1
- ElseIf a<0
- i=(i+1) Mod item.length
- ai=0.05
- a=0
- EndIf
- EndIf
- End Function
-End Type
-
-Type TFadeScreen
- Field a:Double
- Field ai:Double
-
- Function Create:TFadeScreen(a:Double, ai:Double)
- Local o:TFadeScreen=New TFadeScreen
- o.a=a
- o.ai=ai
- Return o
- End Function
-
- Function FadeOut:TFadeScreen()
- Return Create(0,0.05)
- End Function
-
- Function FadeIn:TFadeScreen()
- Return Create(1,-0.05)
- End Function
-
- Function DoFadeIn()
- Local fade:TFadeScreen=TFadeScreen.FadeIn()
- Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight())
-
- While fade.Fade()
- Cls
- DrawPixmap(pm,0,0)
- fade.Draw()
- Flip
- Wend
- End Function
-
- Function DoFadeOut()
- Local fade:TFadeScreen=TFadeScreen.FadeOut()
- Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight())
-
- While fade.Fade()
- Cls
- DrawPixmap(pm,0,0)
- fade.Draw()
- Flip
- Wend
- End Function
-
- Method Fade:Int()
- a:+ai
- Return a>0 And a<1
- End Method
-
- Method Draw()
- Local r:Int,g:Int,b:Int
- Local x:Float,y:Float
- Local oa:Double=GetAlpha()
- GetColor(r,g,b)
- GetOrigin(x,y)
- SetAlpha(a)
- SetColor(0,0,0)
- DrawRect(-x,-y,GraphicsWidth(),GraphicsHeight())
- SetColor(r,g,b)
- SetAlpha(oa)
- End Method
-End Type
-
-
-Type Number
- Function Format:String(num:Int)
- Local c:Int=0
- Local ret:String=""
- Local a:String=String.FromInt(num)
-
- For Local f:Int=a.length-1 To 0 Step -1
- If ret.length And (c Mod 3)=0
- ret=","+ret
- EndIf
- ret=a[f..f+1]+ret
- c:+1
- Next
- Return ret
- End Function
-End Type
+' Missile Lock
+'
+' Copyright (C) 2006 Ian Cowburn (ianc@noddybox.co.uk)
+'
+' This program is free software; you can redistribute it and/or modify
+' it under the terms of the GNU General Public License as published by
+' the Free Software Foundation; either version 2 of the License, or
+' (at your option) any later version.
+'
+' This program is distributed in the hope that it will be useful,
+' but WITHOUT ANY WARRANTY; without even the implied warranty of
+' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+' GNU General Public License for more details.
+'
+' You should have received a copy of the GNU General Public License
+' along with this program; if not, write to the Free Software
+' Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+'
+' -------------------------------------------------------------------------
+'
+' $Id$
+'
+Strict
+Import brl.pngloader
+Import brl.timerdefault
+
+Import noddybox.bitmapfont
+Import noddybox.gfxmenu
+
+
+' Included binaries
+'
+Incbin "GFX/font.bmf"
+
+Incbin "GFX/title.png"
+Incbin "GFX/ship.png"
+Incbin "GFX/missile.png"
+Incbin "GFX/exhaust.png"
+Incbin "GFX/flame.png"
+Incbin "GFX/star.png"
+Incbin "GFX/twinkle.png"
+Incbin "GFX/asteroid.png"
+Incbin "GFX/fireball.png"
+
+Const HERTZ:Int=70
+
+Const MISSILE_LAYER:Int=1
+Const ASTEROID_LAYER:Int=2
+Const ALL_LAYERS:Int=3
+
+Type GFX
+ Global font:TBitmapFont
+
+ Global title:TImage
+
+ Global ship:TImage
+ Global missile:TImage
+ Global exhaust:TImage
+ Global flame:TImage
+ Global star:TImage
+ Global twinkle:TImage
+ Global asteroid:TImage
+ Global fireball:TImage
+
+ Function SafeLoadImage:TImage(p:String, mode:Int)
+ Local i:TImage=LoadImage(p,mode)
+ Assert i,"Failed to load " + p
+ Return i
+ End Function
+
+ Function SafeLoadAnimImage:TImage(p:String, w:Int, h:Int, f:Int, c:Int, mode:Int)
+ Local i:TImage=LoadAnimImage(p,w,h,f,c,mode)
+ Assert i,"Failed to load " + p
+ Return i
+ End Function
+
+ Function Init()
+ font=TBitmapFont.Load("incbin::GFX/font.bmf",0)
+
+ Assert font,"Failed to load incbin::GFX/font.bmf"
+
+ title=SafeLoadImage("incbin::GFX/title.png",0)
+
+ ship=SafeLoadImage("incbin::GFX/ship.png",FILTEREDIMAGE)
+ flame=SafeLoadImage("incbin::GFX/flame.png",FILTEREDIMAGE)
+ MidHandleImage(ship)
+ MidHandleImage(flame)
+
+ missile=SafeLoadImage("incbin::GFX/missile.png",FILTEREDIMAGE)
+ exhaust=SafeLoadImage("incbin::GFX/exhaust.png",FILTEREDIMAGE)
+ SetImageHandle(missile,3,7)
+ SetImageHandle(exhaust,3,3)
+
+ star=SafeLoadImage("incbin::GFX/star.png",0)
+ SetImageHandle(star,1,1)
+
+ twinkle=SafeLoadAnimImage("incbin::GFX/twinkle.png",8,8,0,6,0)
+ SetImageHandle(star,2,2)
+
+ asteroid=SafeLoadImage("incbin::GFX/asteroid.png",FILTEREDIMAGE)
+ MidHandleImage(asteroid)
+
+ fireball=SafeLoadImage("incbin::GFX/fireball.png",FILTEREDIMAGE)
+ SetImageHandle(fireball,15,15)
+ End Function
+End Type
+
+Type GameConfig
+ Global kleft:Int
+ Global kright:Int
+ Global kpause:Int
+ Global kthrust:Int
+ Global hiscore:Int
+ Global maxlevel:Int
+ Global accepted:Int
+
+ Function Load()
+ Local s:TStream=ReadStream("mlock.config")
+
+ If s=Null
+ kleft=KEY_LEFT
+ kright=KEY_RIGHT
+ kthrust=KEY_SPACE
+ kpause=KEY_P
+ hiscore=0
+ maxlevel=1
+ accepted=False
+ Return
+ EndIf
+
+ s=LittleEndianStream(s)
+
+ kleft=s.ReadInt()
+ kright=s.ReadInt()
+ kthrust=s.ReadInt()
+ kpause=s.ReadInt()
+ hiscore=s.ReadInt()
+ maxlevel=s.ReadInt()
+ accepted=s.ReadInt()
+
+ s.Close()
+ End Function
+
+ Function Save()
+ Local s:TStream=WriteStream("mlock.config")
+
+ If s=Null
+ Return
+ EndIf
+
+ s=LittleEndianStream(s)
+
+ s.WriteInt(kleft)
+ s.WriteInt(kright)
+ s.WriteInt(kthrust)
+ s.WriteInt(kpause)
+ s.WriteInt(hiscore)
+ s.WriteInt(maxlevel)
+ s.WriteInt(accepted)
+
+ s.Close()
+ End Function
+EndType
+
+Type TEasyLink
+ Field l:TLink
+
+ Function Create:TEasyLink(l:TList)
+ Local o:TEasyLink=New TEasyLink
+ o.l=l.FirstLink()
+ Return o
+ End Function
+
+ Method Value:Object()
+ If l
+ Return l.Value()
+ Else
+ Return Null
+ EndIf
+ End Method
+
+ Method MoveNext()
+ If l
+ l=l.NextLink()
+ EndIf
+ End Method
+
+ Method Remove()
+ Local ol:TLink=l
+ MoveNext()
+ ol.Remove()
+ End Method
+End Type
+
+
+Type Scroller
+ Global msg:String
+ Global msgp:Int
+ Global msgx:Int
+ Global txth:Int
+
+ Function Init()
+ Rem
+ msg=" "
+ msg:+"DURING A TEST-FLIGHT OF THE STAR-FIGHTER OGL-X YOU ARE AMBUSHED IN THE ASTEROID FIELD OUTSIDE OF MARS... "
+ msg:+"THE EVIL EMPIRE CANNOT BE ALLOWED TO DESTROY THE PROTOTYPE SO YOU MUST PILOT THE WEAPONLESS CRAFT, "
+ msg:+"AVOIDING THE DEADLY MISSILES UNTIL HELP ARRIVES... "
+ msg:+"SHOW HEART YOUNG PILOT, STAR-FLEET IS DEPENDING UPON YOU!"
+ EndRem
+
+ msg=" "
+ msg:+"IT IS A TIME OF WAR. IN A LAST DITCH ATTEMPT TO WIN A LOSING WAR THAT HAS RAGED THROUGH THE GALAXY AGAINST THE EVIL EMPIRE "
+ msg:+"A NEW SHIP, THE DX-9, HAS BEEN DEVELOPED. ON A ROUTINE TEST FLIGHT THE SHIP HAS BEEN AMBUSHED IN AN ASTEROID FIELD. "
+ msg:+"WEAPONLESS, YOU MUST PILOT THE DX-9 AND AVOID THE EMPIRE'S MISSILE SALVOS AMONGST THE ASTEROIDS... HELP WILL ARRIVE EVENTUALLY, "
+ msg:+"BUT UNTIL THEN YOU ARE OUR LAST HOPE. IF THE DX-9 IS LOST THEN SO IS THE EARTH. EARTH IS DEPENDING ON YOU!!!"
+
+ msgx=0
+ msgp=0
+
+ txth=GFX.font.MaxHeight()
+ End Function
+
+ Function Draw(y:Int)
+ GFX.font.Draw(msg[..70],msgx,y)
+
+ Rem
+ SetColor(0,0,0)
+ Local a:Double=1
+ For Local f:Int=0 To 10
+ SetAlpha(a)
+ a:-0.09
+ DrawLine(f,y,f,y+txth)
+ DrawLine(799-f,y,799-f,y+txth)
+ Next
+ SetColor(255,255,255)
+ SetAlpha(1)
+ EndRem
+
+ msgx:-2
+ If msgx<-GFX.font.TextWidth(msg[0..1])
+ msgx:+GFX.font.TextWidth(msg[0..1])
+ msg=msg[1..]+msg[0..1]
+ EndIf
+ End Function
+End Type
+
+Type VText
+ Field t:String
+ Field y:Int
+
+ Function Create:VText(t:String, y:Int)
+ Local o:VText=New VText
+ o.t=t
+ o.y=y
+ Return o
+ End Function
+End Type
+
+Type VerticalScroller
+ Global msg:TList
+ Global maxy:Int
+
+ Method New()
+ msg=CreateList()
+ maxy=0
+ End Method
+
+ Method Add(s:String)
+ SetScale(2,2)
+ msg.AddLast(VText.Create(s,maxy+800))
+ maxy:+GFX.font.TextHeight(s)
+ SetScale(1,1)
+ End Method
+
+ Method Draw()
+ SetScale(2,2)
+ For Local o:VText=EachIn msg
+ o.y:-1
+ If o.y<-GFX.font.TextHeight(o.t)
+ o.y:+maxy
+ EndIf
+ If o.y<799
+ GFX.font.Centre(o.t,o.y)
+ EndIf
+ Next
+ SetScale(1,1)
+ End Method
+End Type
+
+Type Thanks
+ Global item:String[]
+ Global i:Int
+ Global wait:Int
+ Global a:Double
+ Global ai:Double
+
+ Function Init()
+ item=["HTTP://WWW.SLAYRADIO.ORG/", ..
+ "HTTP://WWW.BLITZMAX.ORG/"]
+ i=0
+ a=0
+ ai=0.05
+ End Function
+
+ Function Draw(y:Int)
+ SetAlpha(a)
+ GFX.font.Centre(item[i],y)
+ SetAlpha(1)
+
+ If wait
+ wait:-1
+ Else
+ a:+ai
+
+ If a>1
+ wait=HERTZ*5
+ ai=-0.05
+ a=1
+ ElseIf a<0
+ i=(i+1) Mod item.length
+ ai=0.05
+ a=0
+ EndIf
+ EndIf
+ End Function
+End Type
+
+Type TFadeScreen
+ Field a:Double
+ Field ai:Double
+
+ Function Create:TFadeScreen(a:Double, ai:Double)
+ Local o:TFadeScreen=New TFadeScreen
+ o.a=a
+ o.ai=ai
+ Return o
+ End Function
+
+ Function FadeOut:TFadeScreen()
+ Return Create(0,0.05)
+ End Function
+
+ Function FadeIn:TFadeScreen()
+ Return Create(1,-0.05)
+ End Function
+
+ Function DoFadeIn()
+ Local fade:TFadeScreen=TFadeScreen.FadeIn()
+ Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight())
+
+ While fade.Fade()
+ Cls
+ DrawPixmap(pm,0,0)
+ fade.Draw()
+ Flip(-1)
+ Wend
+ End Function
+
+ Function DoFadeOut()
+ Local fade:TFadeScreen=TFadeScreen.FadeOut()
+ Local pm:TPixmap=GrabPixmap(0,0,GraphicsWidth(),GraphicsHeight())
+
+ While fade.Fade()
+ Cls
+ DrawPixmap(pm,0,0)
+ fade.Draw()
+ Flip(-1)
+ Wend
+ End Function
+
+ Method Fade:Int()
+ a:+ai
+ Return a>0 And a<1
+ End Method
+
+ Method Draw()
+ Local r:Int,g:Int,b:Int
+ Local x:Float,y:Float
+ Local oa:Double=GetAlpha()
+ GetColor(r,g,b)
+ GetOrigin(x,y)
+ SetAlpha(a)
+ SetColor(0,0,0)
+ DrawRect(-x,-y,GraphicsWidth(),GraphicsHeight())
+ SetColor(r,g,b)
+ SetAlpha(oa)
+ End Method
+End Type
+
+
+Type Number
+ Function Format:String(num:Int)
+ Local c:Int=0
+ Local ret:String=""
+ Local a:String=String.FromInt(num)
+
+ For Local f:Int=a.length-1 To 0 Step -1
+ If ret.length And (c Mod 3)=0
+ ret=","+ret
+ EndIf
+ ret=a[f..f+1]+ret
+ c:+1
+ Next
+ Return ret
+ End Function
+End Type