#!yab

############# Prologue #############

ProgramName$ = "Teditor"

AuthorName$ = "Joe Bloggs"

ProgramVersion$ = "V0.1"

ProgramBriefDescription$ = "My unbelievable first yab program."

ProgramLicense$ = "Public Domain"

ProgramAcknowledgements$ ="With thanks to Michel Clasquin-Johnson for writing Teditor and to  Marc-Oliver Ihm, Jan Bungeroth and Jim Saxton for creating yab!"



//*****Global Variables****

## Technically, yab does not require you to declare global variables, it just is a really, really good idea to do it anyway.

// set DEBUG = 1 to print out all messages on the console

DEBUG = 1

//change this to DEBUG = 0 when you are ready to bind the program for distribution



OpenWindow()

#######End of Prologue#######



############# Main Message Loop #############

dim msg$(1)

while(not leavingLoop)
	nCommands = token(message$, msg$(),"|") 
	for everyCommand = 1 to nCommands
	if(DEBUG and msg$(everyCommand)<>"") print msg$(everyCommand)
		switch(msg$(everyCommand))
			case "_QuitRequested":
			case "MainWindow:_QuitRequested":
			case "MainWindow:File:Quit":
				leavingLoop = true
				break
			case "MainWindow:File:Save":
				SaveFile()
				break
			case "MainWindow:File:New":
				NewFile()
				break
			case "MainWindow:File:Open":
				OpenFile()
				break
			case "MainWindow:Edit:Undo/Redo":
				textedit set "EditSpace", "undo"
				break
			case "MainWindow:Edit:Cut":
				textedit set "EditSpace", "cut"
				break
			case "MainWindow:Edit:Copy":
				textedit set "EditSpace", "copy"
				break
			case "MainWindow:Edit:Paste":
				textedit set "EditSpace", "paste"
				break
			case "MainWindow:Edit:Select All":
				textedit set "EditSpace", "select-all"
				break
			case "MainWindow:Help:About":
				Alert ProgramName$ + " " + ProgramVersion$ + "\n" + "by " + AuthorName$ +"\n\n" + ProgramBriefDescription$ + "\n" + ProgramLicense$ + "\n" + ProgramAcknowledgements$, "OK", "none"
			default:
				break
		end switch
	next everyCommand
wend

CloseWindow()
end
#######End of Main Loop#######

sub CloseWindow()

//Close down the main window

NewFile()
window close "MainWindow"
end sub


sub MakeMenu()

//Create menu in MainWindow

menu "File", "New", "N", "MainWindow"
menu "File", "Open", "O", "MainWindow"
menu "File", "Save", "S", "MainWindow"
menu "File", "Quit", "Q", "MainWindow"
menu "Edit", "Undo/Redo", "Z", "MainWindow"
menu "Edit", "Cut", "X", "MainWindow"
menu "Edit", "Copy", "Z", "MainWindow"
menu "Edit", "Paste", "Z", "MainWindow"
menu "Edit", "Select All", "A", "MainWindow"
menu "Help", "About", "", "MainWindow"
end sub



sub NewFile()

local sos
if textedit get$ "EditSpace" <> "" then
	sos = alert "Save Current Text First?", "Yes", "No", "", "none"
	if sos = 1 SaveFile()
	textedit clear "EditSpace"
endif

end sub



sub OpenFile()

local file2open$, anewline$

NewFile()
file2open$ = filepanel "load-file", "Open Which File?", "/boot/home"
if file2open$ <> "" then
	open file2open$ for reading as #1
	while(not(eof(1)))
		line input #1 anewline$
		textedit add "EditSpace", anewline$ + "\n"
	wend
	close #1
	textedit set "EditSpace", "gotoline", 1
endif

end sub



sub OpenWindow()

//Setup the main window here

Window open 100,100 to 600,500, "MainWindow", "Teditor"
textedit 0,20 to 499, 399, "EditSpace", 3, "MainWindow"
textedit set "EditSpace", "wordwrap", 0
MakeMenu()

end sub



sub SaveFile()

local file2save$,filename$

file2save$ = textedit get$ "EditSpace"
if file2save$ <> "" then
	filename$ = filepanel "save-file", "Save File As ...", "/boot/home"
	if filename$= "" return
	open filename$ for writing as #1
	print #1 file2save$
	close #1
endif

end sub

