chevron_left chevron_right
Login Register invert_colors photo_library


Stay updated and chat with others! - Join the Discord!
Thread Rating:
  • 0 Vote(s) - 0 Average


Heuristic Simple Scrolling ASCII Art Banner filter_list
Author
Message
Simple Scrolling ASCII Art Banner #1
This is a little something special for the 500k posts of Sinister.ly!! You'll learn how to create a simple scrolling ASCII art banner in the Linux or Windows terminal.
So, for us, it will scroll the following text across the screen:
Quote:HAPPY 500K POSTS SINISTER.LY
But that text will be in huge ASCII art form.


If you're lazy like me, and just want the zip...
[attachment=291]

Below is the commented code that you can look through and understand.
Save it as banner.py
http://pastebin.com/0z8AMYYP
NOTE: I couldn't embed the main code directly here because of CloudFlare blocking me thinking I'm trying to mess with SQL...

Code:
#!/usr/bin/python

# This is not my code, I got it from https://gist.github.com/jtriley/1108174
# "Get current terminal size on Linux, Mac, and Windows "

import os
import shlex
import struct
import platform
import subprocess


def get_terminal_size():
    """ getTerminalSize()
     - get width and height of console
     - works on linux,os x,windows,cygwin(windows)
     originally retrieved from:
     http://stackoverflow.com/questions/566746/how-to-get-console-window-width-in-python
    """
    current_os = platform.system()
    tuple_xy = None
    if current_os == 'Windows':
        tuple_xy = _get_terminal_size_windows()
        if tuple_xy is None:
            tuple_xy = _get_terminal_size_tput()
            # needed for window's python in cygwin's xterm!
    if current_os in ['Linux', 'Darwin'] or current_os.startswith('CYGWIN'):
        tuple_xy = _get_terminal_size_linux()
    if tuple_xy is None:
        print "default"
        tuple_xy = (80, 25)      # default value
    return tuple_xy


def _get_terminal_size_windows():
    try:
        from ctypes import windll, create_string_buffer
        # stdin handle is -10
        # stdout handle is -11
        # stderr handle is -12
        h = windll.kernel32.GetStdHandle(-12)
        csbi = create_string_buffer(22)
        res = windll.kernel32.GetConsoleScreenBufferInfo(h, csbi)
        if res:
            (bufx, bufy, curx, cury, wattr,
             left, top, right, bottom,
             maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
            sizex = right - left + 1
            sizey = bottom - top + 1
            return sizex, sizey
    except:
        pass


def _get_terminal_size_tput():
    # get terminal width
    # src: http://stackoverflow.com/questions/263890/how-do-i-find-the-width-height-of-a-terminal-window
    try:
        cols = int(subprocess.check_call(shlex.split('tput cols')))
        rows = int(subprocess.check_call(shlex.split('tput lines')))
        return (cols, rows)
    except:
        pass


def _get_terminal_size_linux():
    def ioctl_GWINSZ(fd):
        try:
            import fcntl
            import termios
            cr = struct.unpack('hh',
                               fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234'))
            return cr
        except:
            pass
    cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
    if not cr:
        try:
            fd = os.open(os.ctermid(), os.O_RDONLY)
            cr = ioctl_GWINSZ(fd)
            os.close(fd)
        except:
            pass
    if not cr:
        try:
            cr = (os.environ['LINES'], os.environ['COLUMNS'])
        except:
            return None
    return int(cr[1]), int(cr[0])

if __name__ == "__main__":
    sizex, sizey = get_terminal_size()
    print  'width =', sizex, 'height =', sizey

This is the ASCII art text I made.
Save it as ASCII_ART.txt in the same folder as banner.py and terminalsize.py
Code:
H     H    AAAAA    PPPPPP    PPPPPP    Y     Y      5555555    00000     00000    K   K       PPPPPP     OOOOO     SSSSSS   TTTTTTT    SSSSSS       SSSSSS   IIIIIII   NN    N   IIIIIII    SSSSSS   TTTTTTT   EEEEEEE   RRRRRR        L         Y     Y
H     H   A     A   P     P   P     P    Y   Y       5         0   0 0   0   0 0   K  K        P     P   O     O   S            T      S            S            I      N N   N      I      S            T      E         R     R       L          Y   Y
HHHHHHH   AAAAAAA   PPPPPP    PPPPPP      YYY         55555    0  0  0   0  0  0   KKK         PPPPPP    O     O    SSSSS       T       SSSSS        SSSSS       I      N  N  N      I       SSSSS       T      EEEE      RRRRRR        L           YYY
H     H   A     A   P         P           YY               5   0 0   0   0 0   0   K  KK       P         O     O         S      T            S            S      I      N   N N      I            S      T      E         R     R       L           YY
H     H   A     A   P         P           Y          555555     00000     00000    K    K      P          OOOOO    SSSSSS       T      SSSSSS       SSSSSS    IIIIIII   N    NN   IIIIIII   SSSSSS       T      EEEEEEE   R     R   @   LLLLLLL     Y
NOTE: The ASCII art text looks like gibberish, but when you paste it into notepad, it will look right.


I know it's not perfect... but it's simple. I might make a v2 in the future with some new features and fixes.

[+] 2 users Like m0dem's post
Reply

RE: Simple Scrolling ASCII Art Banner #2
This is interesting. Unique tutorial.

Reply

RE: Simple Scrolling ASCII Art Banner #3
(03-12-2016, 01:15 AM)Primitive Wrote: This is interesting. Unique tutorial.

Well, thanks. Smile

Reply

RE: Simple Scrolling ASCII Art Banner #4
Don't thank me. You're the one who created the tutorial.

Reply

RE: Simple Scrolling ASCII Art Banner #5
(03-12-2016, 12:46 AM)m0dem Wrote: If you're lazy like me, and just want the zip...

Check the OP.

Reply






Users browsing this thread: 1 Guest(s)