@ -10,6 +10,11 @@ import sys, termios, tty, os, time
import apirequest
import imageprinter
import requests
import subprocess
from subprocess import check_output
import datetime
import time
class Printer ( ) :
ESC = b ' \x1B '
@ -18,7 +23,7 @@ class Printer():
CARIDGE_RET = b ' \x0D '
CHARWIDTH = 78
strokes = 0
debug = Tru e
debug = Fals e
target = " /dev/usb/lp0 "
if debug :
target = " /dev/tty "
@ -37,16 +42,26 @@ class Printer():
printer . write ( self . LINE_FEED )
self . strokes = 0
def printstring ( self , string ) :
def printstring ( self , string , formating = " p " ) :
with open ( self . target , ' wb ' ) as printer :
if self . debug :
printer . write ( bytes ( str ( string ) , ' utf-8 ' ) )
if formating == " u " :
printer . write ( b " \x1B " + b " \x5B " + b " \x34 " + b " \x6D " )
printer . write ( bytes ( str ( string ) , ' utf-8 ' ) )
printer . write ( b " \x1B " + b " \x5B " + b " \x30 " + b " \x6D " )
else :
printer . write ( bytes ( str ( string ) , ' utf-8 ' ) )
else :
printer . write ( self . ESC + b " \x7B " + b " \x41 " )
printer . write ( bytes ( str ( string ) , ' utf-8 ' ) )
printer . write ( self . ESC + b " \x25 " + b " \x46 " + b " \x0F " + b " \x00 " + b " \x04 " + b " \x08 " + b " \x00 " )
try :
self . newline ( )
except :
time . sleep ( 1 )
self . newline ( )
def newline ( self ) :
global strokes
@ -55,12 +70,35 @@ class Printer():
self . strokes = 0
def printimagefromurl ( self , url ) :
page = requests . get ( url )
f_ext = os . path . splitext ( url ) [ - 1 ]
f_name = ' img {} ' . format ( f_ext )
with open ( f_name , ' wb ' ) as f :
f . write ( page . content )
if printer . debug :
rows , columns = os . popen ( ' stty size ' , ' r ' ) . read ( ) . split ( )
subprocess . call ( [ " catimg " , " -w " , columns , f_name ] )
else :
imageprinter . print ( f_name )
class Terminal ( ) :
lineinput = " "
commandMode = True
writeloop = True
commands = {
" help " : " get help on the commands " ,
" start " : " start publication " ,
" list " : " list theses and exercises " ,
" exercise <number> " : " see the exercise with the <number> specified " ,
" thesis <number> " : " see the thesis with the <number> specified " ,
" exit " : " finish the publication " ,
}
def __init__ ( self , printer , persons ) :
self . printer = printer
self . persons = persons
@ -73,8 +111,9 @@ class Terminal():
self . lineinput = " "
continue
def waitforinput ( self ):
def waitforinput ( self , nocommand = False ):
self . writeloop = True
self . printer . printchar ( " > " )
while self . writeloop :
char = self . getch ( )
if ( ord ( char ) == 27 ) :
@ -82,8 +121,14 @@ class Terminal():
exit ( 0 )
if ( ord ( char ) == 13 ) :
self . printer . newline ( )
self . command ( self . lineinput )
self . lineinput = " "
if not nocommand :
if not self . lineinput == " " :
self . command ( self . lineinput )
self . lineinput = " "
self . printer . printchar ( " > " )
else :
self . writeloop = False
else :
self . lineinput + = char
self . printer . printchar ( char )
@ -99,33 +144,65 @@ class Terminal():
termios . tcsetattr ( fd , termios . TCSADRAIN , old_settings )
return ch
def scanwifi ( self ) :
self . printer . newline ( )
out = check_output ( [ " nmcli " , " dev " , " wif " ] )
self . printer . printstring ( out . decode ( " utf-8 " ) )
def list ( self ) :
printer . printstring ( " theses on POETIC SOFTWARE " , " u " )
result = apirequest . getcategory ( " thesis " )
for i , line in enumerate ( result ) :
printer . printstring ( str ( i + 1 ) + " " + line )
printer . newline ( )
printer . printstring ( " exercises in POETIC SOFTWARE " , " u " )
result = apirequest . getcategory ( " exercise " )
for i , line in enumerate ( result ) :
printer . printstring ( str ( i + 1 ) + " " + line )
printer . newline ( )
def command ( self , command ) :
#print("received command: "+str(command))
if " help " == str ( command ) :
self . printer . printstring ( " type commands to print the publication " )
self . printer . printstring ( " help: " )
self . printer . printstring ( " get help on the commands " )
self . printer . printstring ( " The user in this publication is an active agent. The publication can be assembled according to your own wishes using commands. The following commands can be used. " )
for key , help in self . commands . items ( ) :
self . printer . printstring ( key + " : " )
self . printer . printstring ( " " + help )
#self.writeloop = False
elif " list " == str ( command ) :
self . list ( )
elif " start " == str ( command ) or " restart " == str ( command ) :
main ( )
elif str ( command ) . split ( " " ) [ 0 ] == " exercise " or str ( command ) . split ( " " ) [ 0 ] == " thesis " :
part = str ( command ) . split ( " " ) [ 0 ]
try :
arguments = str ( command . strip ( ) ) . split ( " " )
arguments . pop ( 0 )
arguments = str ( command . strip ( ) ) . split ( " " )
arguments . pop ( 0 )
if len ( arguments ) < 1 :
self . printer . printstring ( " no argument given. Usage: " + part + " <number> " )
else :
for i , arg in enumerate ( arguments ) :
if arg . isdigit ( ) :
number = int ( arg )
if number > len ( apirequest . getcategory ( part ) ) :
self . printer . printstring ( " Number must be inbetween 1 and " + str ( len ( apirequest . getcategory ( part ) ) ) )
else :
result = apirequest . get ( part , number )
result = apirequest . getimages ( part , number )
for img in result :
printer . printimagefromurl ( img )
result = apirequest . gettitle ( part , number )
for line in result :
self . printer . printstring ( line , " u " )
result = apirequest . getcontent ( part , number )
for line in result :
self . printer . printstring ( line )
if apirequest . gettitle ( part , number ) [ 0 ] == " Wifi Poem " :
self . scanwifi ( )
self . printer . newline ( )
else :
raise Exeption ( " not a number " )
except :
self . printer . printstring ( " ERROR: no argument given. Usage: " + part + " <number> " )
self . printer . printstring ( " not a number " )
elif str ( command ) . split ( " " ) [ 0 ] == " whois " :
if str ( command ) . split ( " " ) [ 1 ] in self . persons :
@ -134,10 +211,15 @@ class Terminal():
self . printer . printstring ( " Sorry not found, try " + random . choice ( list ( self . persons ) ) )
elif " exit " == str ( command ) :
self . printer . printstring ( " Imprint " )
result = apirequest . get ( " imprint " , 1 )
for line in result :
self . printer . printstring ( line )
self . printer . printstring ( " Imprint " , " u " )
self . printer . newline ( )
self . printer . printstring ( " 2019, Piet Zwart Institute, Rotterdam " )
self . printer . printstring ( " Published by Alexander Roidl " )
self . printer . printstring ( " and (enter your name) " )
self . printer . newline ( )
self . waitforinput ( nocommand = True )
self . printer . newline ( )
self . printer . printstring ( " Special thanks to Aymeric Mansoux, Marloes de Valk, Michael Murtaugh, André Castro, Clara Balaguer, Amy Suo Wu, Leslie Robbins, Angeliki, Alice, Tash, Zalan, Joca, Jule " )
self . printer . newline ( )
main ( )
@ -155,41 +237,28 @@ persons = {
}
printer = Printer ( )
term = Terminal ( printer , persons )
def printimagefromurl ( url ) :
page = requests . get ( url )
f_ext = os . path . splitext ( url ) [ - 1 ]
f_name = ' img {} ' . format ( f_ext )
with open ( f_name , ' wb ' ) as f :
f . write ( page . content )
imageprinter . print ( f_name )
now = datetime . datetime . now ( )
def main ( ) :
term . waittostart ( )
printer . printstring ( " W E L C O M E ! " )
printimagefromurl ( ' https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg ' )
printer . newline ( )
#printimagefromurl('https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg')
printer . printstring ( now . strftime ( " % Y- % m- %d % H: % M " ) )
printer . newline ( )
printer . printstring ( " --------------- " )
printer . printstring ( " POETIC SOFTWARE " )
printer . printstring ( " --------------- " )
printer . printstring ( " type help for help " )
printer . newline ( )
result = apirequest . get ( " introduction " , 1 )
result = apirequest . gettitle ( " introduction " , 1 )
for line in result :
printer . printstring ( line , " u " )
result = apirequest . getcontent ( " introduction " , 1 )
for line in result :
printer . printstring ( line )
printer . newline ( )
printer . printstring ( " theses on POETIC SOFTWARE " )
result = apirequest . getcategory ( " thesis " )
for i , line in enumerate ( result ) :
printer . printstring ( str ( i + 1 ) + " " + line )
printer . newline ( )
printer . printstring ( " exercises in POETIC SOFTWARE " )
result = apirequest . getcategory ( " exercise " )
for i , line in enumerate ( result ) :
printer . printstring ( str ( i + 1 ) + " " + line )
printer . newline ( )
term . list ( )
printer . printstring ( " SELECT which one to see, for exercise type: exercise <number> and for thesis type: thesis <number> " )
printer . newline ( )
term . waitforinput ( )