User Tools

Site Tools


python_examples

This is an old revision of the document!


Mystic Python Examples

This page contains examples of code using Mystic Python:


Simple Message Reader

msgread.mpy
#####################################################
# Simple Message Reader Example using Mystic Python #
#####################################################
 
# Reads messages in the user's current message base
# With a pause prompt and basic navigation
 
from mystic_bbs import *
 
# Load the current user and then load their current message base
# but fail if they have not selected a message base
 
user  = getuser(0)
mbase = getmbaseid(user["mbase"])
 
if mbase is None:
	writeln ("|CRYou have not selected a message base yet!|CR|CR|PA")
	quit()
 
# Open the message base then check to make sure its open before reading
# data from it
 
msg = msg_open(mbase["path"] + mbase["filename"]);
 
if msg is None:
	quit()
 
done = False
 
# Seek to the first message in the base and loop while a message
# is found, calling msg_next after each message so the next one
# will be loaded.  Seek must be called first even if reading
# from the first message.
 
msg_seek(msg, 0)
 
while msg_found(msg) and not done and not shutdown():
 
	# Load the message header information into a dictionary
	# and the message text into a list
 
	msghdr  = msg_gethdr(msg)
	msgtext = msg_gettxt(msg)
 
	# Show the message header, setting a line counter that can
	# be used to pause the screen
 
	writeln("|16|CL|15Msg#: " + str(msghdr["number"]) + " of " + str(msghdr["highmsg"]))
	writeln("|14From: " + msghdr["from"]);
	writeln("|13  To: " + msghdr["to"]);
	writeln("|11Subj: " + msghdr["subj"]);
	writeln("|09-------------------------------------------------------------------------------|07");
 
	pausecount = 4
 
	# loop through each line in the message (list) and pause when
	# we get more than 23 lines
 
	for line in msgtext:
 
		# before printing a line check if we need to pause
 
		if pausecount >= 23:
			pausecount = 1
 
			write("|14*PAUSE* Continue? (|15Y|14)es, (|15N|14)o, (|15Q|14)uit: |07")
 
			ch = onekey(chr(13) + 'YNQ', False)
 
			# after getting input, erase the pause prompt then process the input
 
			backspace(wherex(), True)
 
			if ch == 'Q':
				done = True
				break
			elif ch == 'N':
				break
 
		# increase pause counter and send a line of message text
		# unless it is a kludge line:
 
		if (line == "") or (line != "" and line[0] != chr(1)):
			pausecount += 1
			writeln(line)
 
	# At end of message, so lets give a prompt if we didn't get a quit
	# from the pause prompt:
 
	if not done:
		write("|CR|09MSG READER: (|11A|09)gain, (|11P|09)revious, (|11ENTER|09) Next, (|11Q|09) to Quit: ")
 
		ch = onekey(chr(13) + 'APQ', True);
 
		if ch == 'A':
			# do nothing here so it redisplays the same msg
			pass
 
		elif ch == 'P':
			if msghdr["number"] != 1:
				msg_prev(msg)
 
		elif ch == 'Q':
			done = True
			break	
		else:
			msg_next(msg);	
 
# Close the message base and report that we're done
 
msg_close(msg)
 
writeln("|CR|12Program complete: Press a key|PN");

MCI Helper Functions

mcihelp.mpy
import mystic_bbs as bbs;
 
def stripmci (str):
	pos = str.find("|")
 
	while pos != -1:
		str = str[:pos] + str[pos+3:]
		pos = str.find("|")
 
	return str
 
def mcilen (str):
 
	return len(stripmci(str))
 
 
text = "|12This is a |14test";
 
bbs.rwriteln(stripmci(text));
bbs.rwriteln(str(mcilen(text)))
 
bbs.writeln("|PA")
python_examples.1515189415.txt.gz · Last modified: 2018/01/05 15:56 by g00r00

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki