#-------------------------------------------------------------------------------
#
#	Name    : BASIC
#	Purpose : StrongED mode file for BASIC files
#	Author  :  Guttorm Vik
#	Licence : Freeware
#	Version : 1.04, 31-12-05
#
#-------------------------------------------------------------------------------

# Changes:
#-------------------------------------------------------------------------------
# 17.03.98 GV Missing ")" in _Indent2
# 29.06.98 GV Standardising use of 'list of functions' button in all modes;
#          GV Select now gives a list for *this* text, and Adjust for *all* texts
#          GV Have moved the 'assembly label' lister to shift-Select/Adjust
# 26.07.98 GV Changed "SWI" to "SWIs" in help path.
# 22.08.01 FG Updated HelpPath
# 06.11.04 FG Added function (tied to c-B) to indent file
# 20.11.04 FG Added LineNumber expression to Search section
#          FG Changed Func and Func2 expressions to use LineNumber
#          FG Added function to strip line numbers
# 11.12.04 FG ID definitions contained characters not allowed in Identifiers 
# 31.12.05 FG Split up group2 into different groups 
#-------------------------------------------------------------------------------

HelpPath	BASIC,Assembly,OS,Wimp,MiscSWIs,InetSocket,InetSWIs,VDU,Toolbox,

ID_FirstChar	A-Za-z_`
ID_Middle	A-Za-z_`0-9
ID_LastChar	$%


# Immediate commands :
# APPEND AUTO DELETE EDIT HELP LIST LISTO LOAD LVAR NEW OLD
# RENUMBER RUN SAVE TWIN TWINO

SyntaxOptions
	SingleQuote	No
	DoubleQuote	Yes
	QuoteQuote	Yes
	SplitString	No
	HexPrefix	&
	BinPrefix	%
End

#SyntaxComment 1
#	Type		OneLine
#	StartWith	;
#	EndWith		:
#End

SyntaxComment 2
	Type		OneLine
	StartWith	REM
End

SyntaxWords Group1 EndAlways case
	CALL CASE CHAIN CLEAR DATA DEF DIM ELSE END ENDCASE ENDIF
	ENDPROC ENDWHILE ERROR FOR GOSUB GOTO IF INSTALL LET LIBRARY
	LOCAL NEXT ON OTHERWISE OVERLAY QUIT REPEAT RESTORE RETURN
	RUN STOP SYS THEN TRACE UNTIL USR WHEN WHILE
End

SyntaxWords Group2 EndAlways case
	ADVAL ASC CHR$ COUNT ERL ERR EVAL HIMEM INSTR LEFT$ LEN LOMEM
	MID$ MOUSE OF OFF OSCLI PAGE POS REPORT REPORT$ RIGHT$ RND
	STEP STR$ STRING$ SWAP TIME TO TOP VAL WIDTH
End

SyntaxWords Group3 EndOfID case
	PROC FN
End

SyntaxWords Group4 EndAlways case
	BY CIRCLE CLG CLS COLOR COLOUR DRAW ELLIPSE FILL GCOL
	LINE MODE MOVE ORIGIN PLOT POINT RECTANGLE TINT VDU WAIT 
End

SyntaxWords Group5 EndAlways case
	GET GET$ INPUT INKEY INKEY$ PRINT READ SPC TAB
	BGET BPUT CLOSE EOF EXT OPENIN OPENOUT OPENUP PTR
End

SyntaxWords Group6 EndAlways case
	BEAT BEATS ENVELOPE SOUND STEREO TEMPO VOICE VOICES
End

SyntaxWords Group7 EndAlways case
	ABS ACS ASN ATN COS DEG DIV EXP INT LN LOG
	MOD PI RAD SGN SIN SQR SUM SUMLEN TAN  
End

SyntaxWords Group8 EndAlways case
	AND EOR FALSE NOT OR TRUE 
End

#----------------------------------------------------------------------

Search
	_Indent2	{" "} [ (("REM") | (";"~":")) {" "} ]
	Bchar		Alpha|"_"|"`"
	_MarkWord	(Bchar {Bchar|Digit} ["%"|"$"]) | ("&" {Hex}+) | {Digit}+
	_MoveWord	(Bchar {Bchar|Digit} ["%"|"$"]) | ("&" {Hex}+) | {Digit}+
	LineNumber	{" "} {Digit}+ " "
	Func		[LineNumber] "DEF" {" "} "PROC"|"FN" @0 Bchar {Bchar|Digit}
	Func2		[LineNumber] @0 "DEF" {" "} CW ~Bchar
	Label		[";:"] "." CW ~(Bchar|D)
	fold_start	"DEF"
	fold_end	"ENDPROC" | ("="*>) {NL}+
End

#FoldParm1 ("REM {{{", "REM }}}",startofline,case)
FoldParm2 (fold_start, fold_end,startofline,case)

KeyList
#	^R		Indent ("REM ")
	c-B		SetTmp() Replace(_spct,"",,Line) Process(Text,"Run <Tmp$Mode>.Tools.IndentFile")
	^D,^F		InsertStr ("FN_ForceDebug")
	^D,^R		InsertStr ("FN_RestoreDebug")
	^D,^D		InsertStr ("FN_Debug(pass%,\"\")")
	^Delete		InsertStr(":") DeleteRight
	^Return		NewLine(indent,_Indent2)
End

Functions
	Key	F2
	Menu	List DEF PROC/FN  F2
	Icon	LoF
	Help	HBa_lof
	Select	ListOfFound (Func,Text,Align,Line,Case,Sort)

	Adjust	ListOfFound (Func,All,Align,Line,Case,Sort)

	Select	ListOfFound (";:.",Text,After,Line,Case,Sort)

	Adjust	ListOfFound (";:.",All,After,Line,Case,Sort)

	Key	PgUp
	Icon	up
	Help	HBa_up
	Select	GotoPrev (Func,Text,Line,Case)

	Key	^PgUp
	Adjust	GotoPrev (";:.",Text,Line,Case)

	Key	PgDown
	Icon	down
	Help	HBa_dn
	Select	GotoNext (Func,Text,Line,Case)

	Key	^PgDown
	Adjust	GotoNext (";:.",Text,Line,Case)

	Key	F10
	Menu	Run                F10
	Icon	run
	Help	HBa_run
	Select	SetTmp() RunBasic(Nosave)

	Key	F10
	Select	SetTmp() RunBasic(Save)

	Key	^F10
	Adjust	SetTmp() RunBasic(Nosave,Quit,Taskwindow)

	Key	^F10
	Adjust	SetTmp() RunBasic(Save,Quit,Taskwindow)

	Key	^G
	Menu	Goto label/DEF PROC/FN
	Icon	goto
	Help	HBa_go
	Select	Push GotoFound (Func2,All,Whole,Line,Case)

	Key	^G
	Adjust	Push GotoFound (Label,All,Whole,Line,Case)

	Key	^G 2
	Select	Pop

	Key	^G 2
	Adjust	Pop

	Menu	Strip line numbers
	Select	Replace(LineNumber,"",Text,Line,NoCase)
End

Shortcuts
	P.	PRINT \@
	DF	DEF FN\@\n\n=0
	DP	DEF PROC\@\n\nENDPROC
	CA.	CASE \@ OF\n\i  WHEN \@\n\iENDCASE
	WH.	WHILE \@\n\i  \@\n\iENDWHILE
	RE.	REPEAT\n\i  \@\n\iUNTIL ()
	ERR.	ON ERROR: ON ERROR OFF: PRINT REPORT$;" at line ";ERL:END\n\i\@
	FO.	FOR \@\n\i  \@\n\iNEXT
	STM{	STMFD   R13!,{R0-R12,LR}\n\n\i\@\n\n\iLDMFD   R13!,{R0-R12,PC}
	LDM{	LDMFD   R13!,{R0-R12,PC}
	``-	REM ----------------------------------------------------------------------------\n
	``=	REM ============================================================================\n
End
