User Tools

Site Tools


python_examples

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
python_examples [2018/01/05 17:01]
g00r00
python_examples [2019/03/09 22:40] (current)
g00r00 [Simple File Lister]
Line 129: Line 129:
  
 <file python mcihelp.mpy>​ <file python mcihelp.mpy>​
- 
 import mystic_bbs as bbs; import mystic_bbs as bbs;
  
Line 153: Line 152:
 bbs.writeln("​|PA"​) bbs.writeln("​|PA"​)
  
 +</​file>​
 +
 +-----
 +===== Simple File Lister =====
 +
 +<file python filelist.mpy>​
 +###################################################​
 +# Simple File Listing Example using Mystic Python #
 +###################################################​
 +
 +# List files in the user's current file base
 +
 +from mystic_bbs import *
 +
 +# filelist flags
 +
 +file_offline = int("​01"​)
 +file_invalid = int("​02"​)
 +file_deleted = int("​04"​)
 +file_failed ​ = int("​08"​)
 +file_free ​   = int("​10"​)
 +file_hatched = int("​20"​)
 +
 +# Load the current user and then load their current file base
 +# but fail if they have not selected a file base
 +
 +user  = getuser(0)
 +fbase = getfbaseid(user["​fbase"​])
 +
 +if fbase is None:
 + writeln ("​|CRYou have not selected a file base yet!|CR|CR|PA"​)
 + quit()
 +
 +# Open the file list then check to make sure its open before reading
 +# data from it
 +
 +flist = fl_open(fbase["​filename"​]);​
 +
 +if flist is None:
 + writeln("​Cannot open file listing. Press a key|PN"​)
 + quit()
 +
 +done = False
 +
 +# Seek to the first file in the list and loop while a file is found calling
 +# next after each file so the next one will be loaded. ​ Seek should always be
 +# called before cycling through the list
 +
 +fl_seek(flist,​ 0, True)
 +
 +while fl_found(flist) and not done and not shutdown():
 +
 + # Load the file information into a dictionary and then get the file
 + # description
 +
 + fileinfo = fl_getfile(flist)
 + filedesc = fl_getdesc(flist)
 +
 + # Show the file
 +
 + writeln("​|CL|14File #" + str(fileinfo["​number"​]) + " of " + str(fileinfo["​total"​]))
 + writeln(""​)
 + writeln("​|09File:​ |11" + fileinfo["​filename"​])
 + writeln("​|09Date:​ " + datestr(dated2u(fileinfo["​date"​]),​ "NNN DD YYYY HH:​II:​SS"​))
 + writeln("​Size:​ " + str(fileinfo["​size"​]))
 + writeln("​DLs : " + str(fileinfo["​dls"​]))
 + writeln("​ULer:​ " + fileinfo["​ulname"​])
 +
 + flags = ""​
 +
 + if fileinfo["​flags"​] & file_offline:​
 + flags = flags + "​OFFLINE "
 +
 + if fileinfo["​flags"​] & file_invalid:​
 + flags = flags + "​INVALID "
 +
 + if fileinfo["​flags"​] & file_deleted:​
 + flags = flags + "​DELETED "
 +
 + if fileinfo["​flags"​] & file_failed:​
 + flags = flags + "​FAILED "
 +
 + if fileinfo["​flags"​] & file_free:
 + flags = flags + "FREE "
 +
 + if fileinfo["​flags"​] & file_hatched:​
 + flags = flags + "​HATCHED "
 +
 + if flags == "":​
 + flags = "​NONE"​
 +
 + writeln("​Flag:​ |13" + flags)
 + writeln(""​)
 + writeln("​|14Description (" + str(fileinfo["​lines"​]) + " lines):"​)
 + writeln("​|03"​)
 +
 + # only print up to the first 10 lines so we can fit it on the screen
 +
 + for line in range(min(fileinfo["​lines"​],​ 10)):
 + writeln(filedesc[line])
 +
 + writeln(""​)
 + write("​|16|09File List: (|11A|09)gain,​ (|11P|09)revious,​ (|11ENTER|09) Next, (|11Q|09) to Quit: |14")
 +
 + ch = onekey(chr(13) + '​APQ',​ True);
 +
 + if ch == '​A':​
 + # do nothing here so it redisplays the same file
 + pass
 +
 + elif ch == '​P':​
 + fl_prev(flist)
 +
 + elif ch == '​Q':​
 + done = True
 + break
 + else:
 + fl_next(flist);​
 +
 +# Close the file list and report that we're done
 +
 +fl_close(flist)
 +
 +writeln("​|CR|12Program complete: Press a key|PN"​);​
 +</​file>​
 +
 +===== View Dictionaries and Lists =====
 +<file python dump.mpy>​
 +from mystic_bbs import *
 +
 +# Dump contents of a dictionary or list to the screen with
 +# screen pause
 +
 +def dump (obj, linecount):
 +  if linecount == 1:
 +    textcolor(7)
 +  if type(obj) == dict:
 +    for k, v in obj.items():​
 +      if hasattr(v, '​__iter__'​):​
 +        writeln(k)
 +        dump(v, linecount)
 +      else:
 +        writeln ("{} : {}"​.format(k,​v))
 +      linecount = linecount + 1
 +      if linecount == 23:
 +        write("​|PA|07"​)
 +  elif type(obj) == list:
 +    for v in obj:
 +      if hasattr(v, '​__iter__'​):​
 +        dump(v, linecount)
 +      else:
 +        writeln ("​{}"​.format(v))
 +        linecount = linecount + 1   
 +        if linecount == 23:
 +          write("​|PA|07"​)
 +  else:
 +    writeln("​{}"​.format(obj))
 +    linecount = linecount + 1
 +    if linecount == 23:
 +      write("​|PA|07"​)
 +
 +# grab the current user and dump the contents of their user dictionary
 +# This function can be used to dump anything, users, bases, groups, etc
 +
 +writeln("​|CL|14Dumping contents of user:​|07"​)
 +user = getuser(0)
 +dump(user, 1)
 </​file>​ </​file>​
python_examples.1515189700.txt.gz ยท Last modified: 2018/01/05 17:01 by g00r00