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. Use the table of contents to jump to the various examples below.


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.1515189700.txt.gz · Last modified: 2018/01/05 16:01 by g00r00

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki