mata

void sp_write_topbar(struct strpres scalar pres, real scalar dest,
                  real scalar snr) {
	string scalar line, temp
	
	line = ""
	if (!(pres.slide[snr].section == "" &  ( 
	   pres.slide[snr].subsection == "" | 
	   pres.settings.topbar.subsec=="nosubsec")) & 
	   pres.slide[snr].type == "regular") {
		
		line = "{p}"
		temp = pres.slide[snr].section
		if (pres.settings.topbar.secbf == "bold") {
			temp = "{bf:" + temp + "}"
		}
		if (pres.settings.topbar.secit == "italic") {
			temp = "{it:" + temp + "}"
		}
		line = line + temp
		if (pres.slide[snr].subsection != "" & 
		    pres.settings.topbar.subsec=="subsec") {
			temp = pres.slide[snr].subsection
			if (pres.settings.topbar.subsecbf == "bold") {
				temp = "{bf:" + temp + "}"
			}
			if (pres.settings.topbar.subsecit == "italic") {
				temp = "{it:" + temp + "}"
			}	
			line = line + pres.settings.topbar.sep + temp
		}
		line = line + "{p_end}"

	}
	else if (pres.slide[snr].type == "ancillary") {
		line = pres.settings.toc.anc
		if (pres.settings.topbar.secbf == "bold") {
			line = "{bf:" + line + "}"
		}
		if (pres.settings.topbar.secit == "italic") {
			line = "{it:" + line + "}"
		}
		line = "{p}" + line + "{p_end}"
	}
	else if (pres.slide[snr].type == "digression") {
		line = pres.settings.digress.name
		if (pres.settings.topbar.secbf == "bold") {
			line = "{bf:" + line + "}"
		}
		if (pres.settings.topbar.secit == "italic") {
			line = "{it:" + line + "}"
		}
		line = "{p}" + line + "{p_end}"
	}
	if (line != "") {
		if (pres.settings.topbar.thline=="hline") {
			fput(dest, "{hline}")
		}
		fput(dest,line)
		if (pres.settings.topbar.bhline=="hline") {
			fput(dest, "{hline}")
		}	
	}
}

void sp_write_bottombar(struct strpres scalar pres, real scalar dest, 
                     real scalar snr, string scalar special) {
	string scalar line, forw, back, forwl
	
	if (special == "title" ) {
		forw = "slide" + strofreal(pres.titleslide.forw) + ".smcl"
		forwl = pres.slide[pres.titleslide.forw].label
		if (forwl == "") {
			forwl = pres.settings.bottombar.nextname
		}
	}
	else if (special == "toc") {
		if (pres.settings.other.titlepage) {
			back = pres.settings.other.stub + ".smcl"
		}
		forw = "slide" + strofreal(pres.tocslide.forw) + ".smcl"
		forwl = pres.slide[pres.tocslide.forw].label
		if (forwl == "") {
			forwl = pres.settings.bottombar.nextname
		}
	}
	else {
		if (pres.slide[snr].prev==0) {
			back = pres.settings.other.stub + ".smcl"
		}
		else if (pres.slide[snr].prev != .){
			back = "slide" + strofreal(pres.slide[snr].prev) + ".smcl"
		}
		if (pres.slide[snr].forw != .) {
			forw = "slide" + strofreal(pres.slide[snr].forw) + ".smcl"
			forwl = pres.slide[pres.slide[snr].forw].label
			if (forwl == "") {
				forwl = pres.settings.bottombar.nextname
			}
		}
	}
	
	fput(dest, " ")
	fput(dest, " ")
	if (pres.settings.bottombar.thline == "hline") {
		fput(dest,"{* /p}{hline}")
	}
	line = "{* bottombar }"
	if (pres.settings.bottombar.arrow == "arrow") {
		line = line + "{center:"
		if (back == "") {
			line = line + "     "
		}
		else {
			line = line + "{view " + back + ":<<}   "
		}
		line = line + "{view " + pres.settings.other.index + ":" + 
		       pres.settings.bottombar.index + "}"
		if (forw == "") {
			line = line + "     "
		}
		else {
			line = line + "   {view " + forw + ":>>}"
		}
		line = line + "}"
	}
	else {
		if (pres.settings.bottombar.next == "right") {
			line = line + "{view " + pres.settings.other.index + ":" +
			       pres.settings.bottombar.index + "}"
			if (forw != "") {
				line = line + "{right:{view " + forw + ":" + forwl + "}}"
			}
		}
		else {
			if (forw != "") {
				line = line + "{view " + forw + ":" + forwl + "}"
			}
			line = line + "{right:{view " + pres.settings.other.index + ":" +
			       pres.settings.bottombar.index + "}}"
		}
	}
	fput(dest, line)
	if (pres.settings.bottombar.bhline == "hline") {
		fput(dest,"{hline}")
	}	
}

void sp_write_title(struct strpres scalar pres, string rowvector line, 
                 real scalar dest, real scalar multiline) {
	
	if (multiline) {
		line = invtokens(line)
	}
	else {
		line = invtokens(line[|2 \ .|])
	}
	fput(dest,"")	
	if (pres.settings.title.thline == "hline" & multiline==0) {
		fput(dest, "{hline}")
	}
	if (pres.settings.title.bold == "bold") {
		line = "{bf:" + line + "}"
	}
	if (pres.settings.title.italic == "italic" ) {
		line = "{it:" + line + "}"
	}
	if (pres.settings.title.pos == "center") {
		line = "{center:" + line + "}"
	}
	else {
		line = "{p}" + line + "{p_end}"
	}
	fput(dest, line)
	if (pres.settings.title.bhline == "hline" & multiline==0) {
		fput(dest, "{hline}")
	}
	fput(dest,"")
}

void sp_write_pres_settings(struct strpres scalar pres, real scalar dest) {
	real scalar snr
	string scalar app, strslides
	
	app = ""
	strslides = pres.settings.other.stub + ".smcl "
	if (pres.settings.other.titlepage) {
		strslides = strslides + "index.smcl "
	}
	for (snr=1 ; snr <= cols(pres.slide) ; snr++) {
		if (pres.slide[snr].type=="regular") {
			strslides = strslides + "slide" + strofreal(snr) + ".smcl "
		}
		else {
			app = app + "slide" + strofreal(snr) + ".smcl "
		}
	}
	strslides = strslides + app

	fput(dest, "{* slides " + strslides + "}{...}" )
	fput(dest, "{* bottomstyle " + pres.settings.bottombar.arrow + " }{...}")
}

end