fix some bad stuff

This commit is contained in:
chrys
2018-07-21 02:04:44 +02:00
parent bc8bba12cc
commit 453869e9af
36 changed files with 7419 additions and 0 deletions

12
play zone/argp.py Executable file
View File

@ -0,0 +1,12 @@
#!/bin/python3
import argparse
parser = argparse.ArgumentParser(description="Fenrir Help")
parser.add_argument('-s', '--setting', metavar='SETTING-FILE', default='/etc/fenrir/settings/settings.conf', help='Use a specified settingsfile')
parser.add_argument('-o', '--options', metavar='SECTION:SETTING=VALUE,..', default='', help='Overwrite options in given settings file')
args = parser.parse_args()
parser.print_help()
print(args.setting)

88
play zone/charmapTTY.py Executable file
View File

@ -0,0 +1,88 @@
import time
from fcntl import ioctl
from array import array
from struct import unpack_from
from struct import unpack
from struct import pack
import errno
import sys
charmap = {}
hichar = None
def updateCharMap(screen):
global hichar
ttyno = '4'
tty = open('/dev/tty' + screen, 'rb')
GIO_UNIMAP = 0x4B66
VT_GETHIFONTMASK = 0x560D
himask = array("H", (0,))
ioctl(tty, VT_GETHIFONTMASK, himask)
hichar, = unpack_from("@H", himask)
sz = 512
line = ''
while True:
try:
unipairs = array("H", [0]*(2*sz))
unimapdesc = array("B", pack("@HP", sz, unipairs.buffer_info()[0]))
ioctl(tty.fileno(), GIO_UNIMAP, unimapdesc)
break
except IOError as e:
if e.errno != errno.ENOMEM:
raise
sz *= 2
tty.close()
ncodes, = unpack_from("@H", unimapdesc)
utable = unpack_from("@%dH" % (2*ncodes), unipairs)
for u, b in zip(utable[::2], utable[1::2]):
if charmap.get(b) is None:
charmap[b] = chr(u)
def autoDecodeVCSA(allData, rows, cols):
allText = []
allAttrib = []
for y in range(rows):
lineText = ''
lineAttrib = []
i = 0
for x in range(cols):
data = allData[i: i + 2]
i += 2
if data == b' \x07':
#attr = 7
#ink = 7
#paper = 0
#ch = ' '
lineAttrib.append(7)
lineText += ' '
continue
(sh,) = unpack("=H", data)
attr = (sh >> 8) & 0xFF
ch = sh & 0xFF
if hichar == 0x100:
attr >>= 1
lineAttrib.append(attr)
ink = attr & 0x0F
paper = (attr>>4) & 0x0F
#if (ink != 7) or (paper != 0):
# print(ink,paper)
if sh & hichar:
ch |= 0x100
try:
lineText += charmap[ch]
except:
lineText += chr('?')
allText.append(lineText)
allAttrib.append(lineAttrib)
return allText, allAttrib
def m(screen):
s = time.time()
updateCharMap(str(screen))
print(time.time() -s )
vcsa = open('/dev/vcsa' + str(screen), 'rb')
head = vcsa.read(4)
rows = int(head[0])
cols = int(head[1])
text, attrib = autoDecodeVCSA(vcsa.read(), rows, cols)
print(time.time() -s )

39
play zone/colors.sh Normal file
View File

@ -0,0 +1,39 @@
#!/bin/bash
echo "foreground colors"
echo -e "\e[39mDefault"
echo -e "\e[30mBlack"
echo -e "\e[31mRed"
echo -e "\e[32mGreen"
echo -e "\e[33mYellow"
echo -e "\e[34mBlue"
echo -e "\e[35mMagenta"
echo -e "\e[36mCyan"
echo -e "\e[37mLight gray"
echo -e "\e[90mDark gray"
echo -e "\e[91mLight red"
echo -e "\e[92mLight green"
echo -e "\e[93mLight yellow"
echo -e "\e[94mLight blue"
echo -e "\e[95mLight magenta"
echo -e "\e[96mLight cyan"
echo -e "\e[97mWhite"
echo "background colors"
echo -e "\e[49mDefault"
echo -e "\e[40mBlack"
echo -e "\e[41mRed"
echo -e "\e[42mGreen"
echo -e "\e[43mYellow"
echo -e "\e[44mBlue"
echo -e "\e[45mMagenta"
echo -e "\e[46mCyan"
echo -e "\e[47mLight gray"
echo -e "\e[100mDark gray"
echo -e "\e[101mLight red"
echo -e "\e[102mLight green"
echo -e "\e[103mLight yellow"
echo -e "\e[104mLight blue"
echo -e "\e[105mLight magenta"
echo -e "\e[106mLight cyan"
echo -e "\e[107mWhite"

52
play zone/consumeEvents.py Executable file
View File

@ -0,0 +1,52 @@
#!/bin/python
import evdev
from evdev import InputDevice, UInput
from select import select
import time
iDevices = map(evdev.InputDevice, (evdev.list_devices()))
iDevices = {dev.fd: dev for dev in iDevices if evdev.events.EV_KEY in dev.capabilities()}
uDevices = {}
for fd in iDevices:
dev = iDevices[fd]
cap = dev.capabilities()
del cap[0]
uDevices[fd] = UInput(
cap,
dev.name,
dev.info.vendor,
# dev.info.product,
# dev.version,
# dev.info.bustype,
# '/dev/uinput'
)
dev.grab()
i = 0
while i < 100:
r, w, x = select(iDevices, [], [])
if r != []:
i += 1
for fd in r:
for event in iDevices[fd].read():
if event.code != 30: # a
print(event)
uDevices[fd].write_event(event)
uDevices[fd].syn()
#print('Devicename:'+ devices[fd].name + ' Devicepath:' + devices[fd].fn + ' Events:' + str(devices[fd].active_keys(verbose=True)) + ' Value:' + str(event.value))
else:
print('this key is consumed')
for fd in iDevices:
iDevices[fd].ungrab()
iDevices[fd].close()
uDevices[fd].close()
iDevices.clear()
uDevices.clear()

12
play zone/daemon.py Executable file
View File

@ -0,0 +1,12 @@
from time import sleep
from daemonize import Daemonize
pid = "/tmp/test.pid"
def main():
while True:
sleep(5)
daemon = Daemonize(app="test_app", pid=pid, action=main)
daemon.start()

48
play zone/detectDevices.py Executable file
View File

@ -0,0 +1,48 @@
#!/bin/python
iDevices = {}
iDeviceNo = 0
def updateInputDevices(force = False, init = False):
global iDeviceNo
if init:
iDevices = {}
iDeviceNo = 0
deviceFileList = evdev.list_devices()
if not force:
if len(deviceFileList) == iDeviceNo:
return
iDeviceNo = len(deviceFileList)
mode = 'ALL'
iDevicesFiles = []
for device in iDevices:
iDevicesFiles.append(iDevices[device].fn)
print(len(iDevicesFiles),len(deviceFileList))
if len(iDevicesFiles) == len(deviceFileList):
return
for deviceFile in deviceFileList:
try:
if deviceFile in iDevicesFiles:
print('skip')
continue
open(deviceFile)
# 3 pos absolute
# 2 pos relative
# 1 Keys
currDevice = evdev.InputDevice(deviceFile)
cap = currDevice.capabilities()
if mode in ['ALL','NOMICE']:
if 1 in cap:
if 116 in cap[1] and len(cap[1]) < 5:
print('power')
continue
if mode == 'ALL':
iDevices[currDevice.fd] = currDevice
print('Device added:' + iDevices[currDevice.fd].name)
elif mode == 'NOMICE':
if not ((2 in cap) or (3 in cap)):
iDevices[currDevice.fd] = currDevice
print('Device added:' + iDevices[currDevice.fd].name)
elif currDevice.name.upper() in mode.split(','):
iDevices[currDevice.fd] = currDevice
print('Device added:' + iDevices[currDevice.fd].name)
except Exception as e:
print("Skip Inputdevice : " + deviceFile +' ' + str(e))

37
play zone/epollScreen.py Normal file
View File

@ -0,0 +1,37 @@
#!/bin/python
import select
import time
currScreen = '2'
vcsa = {}
for i in range(1,7):
vcsa[str(i)] = open('/dev/vcs'+str(i),'rb')
tty = open('/sys/devices/virtual/tty/tty0/active','r')
currScreen = str(tty.read()[3:-1])
oldScreen = currScreen
watchdog = select.epoll()
watchdog.register(vcsa[currScreen], select.EPOLLPRI)
watchdog.register(tty, select.EPOLLPRI)
while True:
changes = watchdog.poll()
print('-----------------------------')
print(changes)
for change in changes:
fileno = change[0]
event = change[1]
print(change,fileno, tty.fileno())
if fileno == tty.fileno():
tty.seek(0)
currScreen = str(tty.read()[3:-1])
if currScreen != oldScreen:
watchdog.unregister(vcsa[ oldScreen ])
watchdog.register(vcsa[ currScreen ], select.EPOLLPRI)
oldScreen = currScreen
print('new screen '+ currScreen)
else:
vcsa[currScreen].seek(0)
content = vcsa[currScreen].read()
print('update '+ str(time.time()))

View File

@ -0,0 +1,5 @@
#!/bin/python
# in case that event13 is still the broken device
f = open('/dev/input/event13')
print('OK /dev/input/event13')

48
play zone/fg.sh Executable file
View File

@ -0,0 +1,48 @@
#!/bin/bash
echo "foreground colors"
echo -e "\e[39mDefault"
echo -e "\e[30mBlack"
echo -e "\e[31mRed"
echo -e "\e[32mGreen"
echo -e "\e[33mYellow"
echo -e "\e[34mBlue"
echo -e "\e[35mMagenta"
echo -e "\e[36mCyan"
echo -e "\e[37mLight gray"
echo -e "\e[90mDark gray"
echo -e "\e[91mLight red"
echo -e "\e[92mLight green"
echo -e "\e[93mLight yellow"
echo -e "\e[94mLight blue"
echo -e "\e[95mLight magenta"
echo -e "\e[96mLight cyan"
echo -e "\e[97mWhite"
#7: _('Default'), 0: _('Black'), 4: _('Red'), 2: _('Green'), 6: _('Yellow'), 1: _('Blue'), 5: _('Magenta'), 3: _('Cyan'), 7: _('Light gray'), 8: _('Dark gray'), 12: _('Light red'), 10: , ('Light green'), 14: _('Light yellow'), 9: _('Light blue'), 13: _('Light magenta'), 11: _('Light cyan'), 15: _('White')
echo "background colors"
echo -e "\e[49mDefault"
echo -e "\e[40mBlack"
echo -e "\e[41mRed"
echo -e "\e[42mGreen"
echo -e "\e[43mYellow"
echo -e "\e[44mBlue"
echo -e "\e[45mMagenta"
echo -e "\e[46mCyan"
echo -e "\e[47mLight gray"
echo -e "\e[100mDark gray"
echo -e "\e[101mLight red"
echo -e "\e[102mLight green"
echo -e "\e[103mLight yellow"
echo -e "\e[104mLight blue"
echo -e "\e[105mLight magenta"
echo -e "\e[106mLight cyan"
echo -e "\e[107mWhite"
echo "format"
echo -e "\e[1mBold"
echo -e "\e[2mDim"
echo -e "\e[4mUnderlined"
echo -e "\e[5mBlink"
echo -e "\e[7minverted"
echo -e "\e[8mHidden"

19
play zone/keypress.py Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/python
import gi
from gi.repository import GLib
gi.require_version('Gst', '1.0')
from gi.repository import Gst
import time, threading
gi.require_version('Atspi', '2.0')
import pyatspi
# Callback to print the active window on key press amd filter out the key release
def on_key_input(event):
print(event)
mainloop = GLib.MainLoop()
thread = threading.Thread(target=mainloop.run)
thread.start()
#pyatspi.Registry.registerKeystrokeListener(on_key_input, kind=(pyatspi.KEY_PRESSED_EVENT, pyatspi.KEY_RELEASED_EVENT))
pyatspi.Registry.registerKeystrokeListener(on_key_input,mask=pyatspi.allModifiers(), kind=(pyatspi.KEY_PRESS,pyatspi.KEY_RELEASE,pyatspi.KEY_PRESSRELEASE), synchronous=True, preemptive=True)
pyatspi.Registry.start()

23
play zone/listDevices.py Executable file
View File

@ -0,0 +1,23 @@
#!/bin/python
import evdev
from evdev import InputDevice, UInput
from select import select
import time
iDevices = map(evdev.InputDevice, (evdev.list_devices()))
iDevices = {dev.fd: dev for dev in iDevices}
print('----------------------')
for fd in iDevices:
dev = iDevices[fd]
cap = dev.capabilities()
print('Name: ' + str(dev.name))
print('LEDs: ' + str(dev.leds()))
print('Has Keys: '+ str(evdev.events.EV_KEY in cap))
if evdev.events.EV_KEY in cap:
print('No. of keys: ' + str(len(cap[evdev.events.EV_KEY])))
print('has Key 116: ' + str(116 in cap[evdev.events.EV_KEY]))
print('Is Mouse: ' + str(((evdev.events.EV_REL in cap) or (evdev.events.EV_ABS in cap))))
print('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
print(dev.capabilities(verbose=True))
print('----------------------')

20
play zone/listSession.py Executable file
View File

@ -0,0 +1,20 @@
#!/bin/python
import dbus
try:
bus = dbus.SystemBus()
obj = bus.get_object('org.freedesktop.login1', '/org/freedesktop/login1')
inf = dbus.Interface(obj, 'org.freedesktop.login1.Manager')
ListSessions = inf.get_dbus_method('ListSessions')
sessions = ListSessions()
for session in sessions:
obj = bus.get_object('org.freedesktop.login1', session[4])
inf = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
sessionType = inf.Get('org.freedesktop.login1.Session', 'Type')
screen = str(inf.Get('org.freedesktop.login1.Session', 'VTNr'))
if screen == '':
screen = str(inf.Get('org.freedesktop.login1.Session', 'TTY'))
print('Session:', screen, 'Type:', sessionType.upper(), 'Details:', session)
else:
print('Session:', screen, 'Type:', sessionType.upper(), 'Details:', session)
except:
print('no access')

52
play zone/marytts.py Executable file
View File

@ -0,0 +1,52 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# HTTP + URL packages
import httplib2
from urllib.parse import urlencode, quote # For URL creation
import time
# To play wave files
import pygame
import math # For ceiling
# Mary server informations
mary_host = "127.0.0.1"
mary_port = "59125"
# Input text
input_text = "das ist ein test das ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testdas ist ein testd"
# Build the query
query_hash = {"INPUT_TEXT":input_text,
"INPUT_TYPE":"TEXT", # Input text
"LOCALE":"de",
"VOICE":"bits3", # Voice informations (need to be compatible)
"OUTPUT_TYPE":"AUDIO",
"AUDIO":"WAVE", # Audio informations (need both)
}
starttime = time.time()
query = urlencode(query_hash)
#print("query = \"http://%s:%s/process?%s\"" % (mary_host, mary_port, query))
# Run the query to mary http server
h_mary = httplib2.Http()
#print("http://%s:%s/process?" % (mary_host, mary_port), "POST", query)
resp, content = h_mary.request("http://%s:%s/process?" % (mary_host, mary_port), "POST", query)
# Decode the wav file or raise an exception if no wav files
if (resp["content-type"] == "audio/x-wav"):
# Write the wav file
f = open("/tmp/output_wav.wav", "wb")
f.write(content)
f.close()
# Play the wav file
pygame.mixer.init(frequency=16000) # Initialise the mixer
#s = pygame.mixer.Sound(content)
s = pygame.mixer.Sound("/tmp/output_wav.wav")
print(str(time.time() -starttime))
s.play()
print(str(time.time() -starttime))
pygame.time.wait(int(math.ceil(s.get_length() * 1000)))
else:
raise Exception(content)

53
play zone/parseProcessTree.py Executable file
View File

@ -0,0 +1,53 @@
#!/bin/python
import os
import time
start = time.time()
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
#pids = ['5960']
tty = os.open('/dev/tty2', os.O_RDWR)
fg = str(os.tcgetpgrp(tty))
tty.close()
print(fg)
for pid in pids:
try:
currStat = str(open('/proc/' + pid + '/stat', 'rb').read())
currStat = currStat.split(' ')
if int(currStat[4]) == 0:
continue
#print(currStat)
#print(fg,int(currStat[4]))
if fg == currStat[4]:
print(currStat[1])
#print( currStat )
#print(currStat[0])
major = os.major(int(currStat[6]))
minor = os.minor(int(currStat[6]))
ueventContent = open('/sys/dev/char/' + str(major) + ':' + str(minor) + '/uevent','r').read().split()
#print(ueventContent)
#print(int(currStat[4]),currStat[1])
except IOError: # proc has already terminated
continue
print(time.time()-start)
'''
Table 1-4: Contents of the stat files (as of 2.6.30-rc7)
..............................................................................
Field Content
pid process id
tcomm filename of the executable
state state (R is running, S is sleeping, D is sleeping in an
uninterruptible wait, Z is zombie, T is traced or stopped)
ppid process id of the parent process
pgrp pgrp of the process
sid session id
tty_nr tty the process uses
tty_pgrp pgrp of the tty
flags task flags
min_flt number of minor faults
cmin_flt number of minor faults with child's
maj_flt number of major faults
cmaj_flt number of major faults with child's
'''

28
play zone/passBrokenDevice.py Executable file
View File

@ -0,0 +1,28 @@
#!/bin/python
import evdev
from evdev import InputDevice
from select import select
import time
deviceList = evdev.list_devices()
readableDevices = []
for dev in deviceList:
try:
open(dev)
readableDevices.append(dev)
print('OK '+dev)
except Exception as e:
print('skip ' + dev + ' Error ' + str(e))
devices = map(evdev.InputDevice, (readableDevices))
devices = {dev.fd: dev for dev in devices}
while True:
r, w, x = select(devices, [], [])
if r != []:
for fd in r:
for event in devices[fd].read():
print('Devicename:'+ devices[fd].name + ' Devicepath:' + devices[fd].fn + ' Events:' + str(devices[fd].active_keys(verbose=True)) + ' Value:' + str(event.value))

154
play zone/pdmenurc Normal file
View File

@ -0,0 +1,154 @@
#!/usr/bin/pdmenu
#
# Note that the above bang-path isn't required, but it lets you run this
# file directly as a sort of pdmenu script.
# F123 menu
title:Welcome to F123
# Define the main menu.
menu:main:F123 Main Menu:Please make a selection
show:_Games Menu..::games
show:_Internet menu..::internet
show:_Media menu..::media
show:_Office menu..::office
show:_System Configuration Menu..::configuration
show:_Tools Menu..::tools
nop
show:_Power Options..::power
nop
exit:_Exit
# Submenu for games.
menu:games:Games:Command line games
exec:_Adventure::clear;adventure
exec:_Arithmetic::clear;arithmetic
exec:_Air Traffic Controler (Not screen reader friendly)::clear;atc
exec:_Backgammon (Not screen reader friendly)::clear;backgammon
exec:_Battlestar::clear;battlestar
exec:_Boggle (Not screen reader friendly)::clear;boggle
exec:_Canfield (Not screen reader friendly)::clear;canfield
exec:_Cribbage (Not screen reader friendly)::clear;cribbage
exec:_Go Fish:pause:clear;go-fish
exec:_Gomoku::clear;gomoku
exec:_Hangman::clear;hangman
exec:_Hunt (Not screen reader friendly)::clear;hunt
exec:_Mille Bornes::clear;mille
exec:_Number::clear;number
exec:_Phantasia::clear;phantasia
exec:_Phase of the Moon:pause:clear;pom
exec:_Primes::clear;primes
exec:_Robots (Not screen reader friendly)::clear;robots
exec:_Sail::clear;sail
exec:_Snake (Not screen reader friendly)::clear;snake
exec:_Tetris (Not screen reader friendly)::clear;tetris-bsd
exec:_Trek::clear;trek
exec:_Worm (Not screen reader friendly)::clear;worm
exec:_Wumpus::clear;wump
nop
exit:_Main menu..
# submenu for internet applications.
menu:internet:Internet:Internet programs
exec:_E-Mail::clear;mutt
exec:_Basic Web Browser (W3M)::clear;w3m -v
group:Full _Web browser (Firefox)
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher firefox
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:_Mumble Voice Chat
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher mumble
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
nop
exit:_Main menu..
menu:media:Media:Multi-media applications
exec:_CD Audio Ripper (ripit)::ripit
exec:_Music Player (cmus)::cmus
exec:_Youtube (audio only)::youtube-viewer -novideo
group:Youtube (full _video)
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lxterminal -e youtube-viewer
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
nop
exit:_Main menu..
menu:office:Office:Word processing, calendar, etc
exec:_Month Calendar:pause:clear;ncal
exec:_Year Calendar:pause:clear;ncal -y
exec:Text Editor::clear;${EDITOR:-nano}
nop:Office Suite
group:Database
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lobase
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Diagrams
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lodraw
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Formula Editor
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lomath
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Presentation
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher loimpress
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Spreadsheet
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher localc
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
group:Word Processor
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher lowriter
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
nop
exit:_Main menu..
# submenu for configuring the computer.
menu:configuration:Configuration:System Configuration
exec:_Change Passwords::clear;/usr/lib/F123-wrappers/configure-passwords
exec:_Email Configuration::clear;fleacollar
exec:_Security Configuration::clear;/usr/lib/F123-wrappers/configure-security
exec:_Wireless Internet Connection::clear;sudo configure-wifi
nop
exit:_Main menu..
menu:tools:Tools:System Tools
group:Bluetooth manager
exec:::clear
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-ignore-screen
exec:::startx /usr/lib/F123-wrappers/xlauncher blueman-assistant
exec:::python /usr/share/fenrirscreenreader/tools/fenrir-unignore-screen
endgroup
exec:_Search:edit,pause:recoll -t ~Search for what? :~
nop
exit:_Main menu..
menu:power:Shutdown or Restart Your Computer:Shutdown or restart your computer
exec:_Power Off::poweroff
exec:_Restart::reboot
nop
exit:_Main menu..

41
play zone/print_escape.py Normal file
View File

@ -0,0 +1,41 @@
#!/bin/python3
import sys, os
import pty
import pyte
class FenrirTermStream(pyte.Stream):
def __init__(self):
super().__init__()
def attach(self, screen):
super().attach(screen)
def feed(self, text):
super().feed(text)
class FenrirTermEmu():
def __init__(self):
self.shell = '/bin/bash'
if 'SHELL' in os.environ:
self.shell = os.environ['SHELL']
self.screen = pyte.Screen(80,24)
self.stream = FenrirTermStream()
self.stream.attach(self.screen)
def outputCallback(self, fd):
data = os.read(fd, 1024)
self.stream.feed(data.decode('UTF8'))
# alles
#print(self.screen.display)
# input
#print(data.decode('UTF8'))
return data
def inputCallback(self, fd):
data = os.read(fd, 1024)
print('|'+str(data)+'|')
if data == b'q':
print('quit')
return b'exit\r'
return data
def startEmulator(self):
pty.spawn(self.shell, self.outputCallback, self.inputCallback)
t = FenrirTermEmu()
t.startEmulator()

34
play zone/pyterm.py Executable file
View File

@ -0,0 +1,34 @@
#!/bin/python3
import sys, os
import pty
import pyte
class FenrirTermStream(pyte.Stream):
def __init__(self):
super().__init__()
def attach(self, screen):
super().attach(screen)
def feed(self, text):
super().feed(text)
class FenrirTermEmu():
def __init__(self):
self.shell = '/bin/bash'
if 'SHELL' in os.environ:
self.shell = os.environ['SHELL']
self.screen = pyte.Screen(80,24)
self.stream = FenrirTermStream()
self.stream.attach(self.screen)
def outputCallback(self, fd):
data = os.read(fd, 1024)
self.stream.feed(data.decode('UTF8'))
# alles
print(self.screen.display)
# input
print(data.decode('UTF8'))
return data
def inputCallback(self, fd):
data = os.read(fd, 1024)
return data
def startEmulator(self):
pty.spawn(self.shell, self.outputCallback, self.inputCallback)

34
play zone/split.txt Normal file
View File

@ -0,0 +1,34 @@
./play zone/wrapWord.py:21: wrappedLines = currText.split('\n')
./play zone/wrapWord.py:50: wrappedLines = currText.split('\n')
./play zone/wrapWord.py:93: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/screenDriver/vcsaDriver.py:281: apps = subprocess.Popen('ps -t tty' + currScreen + ' -o comm,tty,stat', shell=True, stdout=subprocess.PIPE).stdout.read().decode()[:-1].split('\n')
./src/fenrirscreenreader/utils/line_utils.py:14: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/line_utils.py:30: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/line_utils.py:41: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:14: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:35: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:43: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:58: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:73: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/char_utils.py:85: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/mark_utils.py:13: inText = inText.split('\n')
./src/fenrirscreenreader/utils/mark_utils.py:59: inText = inText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:20: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:62: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/utils/word_utils.py:91: wrappedLines = currText.split('\n')
./src/fenrirscreenreader/core/outputManager.py:173: currline = text.split('\n')[offset['y']]
./src/fenrirscreenreader/core/attributeManager.py:250: textLines = text.split('\n')
./src/fenrirscreenreader/core/screenManager.py:166: diffList = ['+ ' + self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']] +'\n']
./src/fenrirscreenreader/core/screenManager.py:169: diff = self.differ.compare(oldScreenText.split('\n'),\
./src/fenrirscreenreader/core/screenManager.py:170: newScreenText.split('\n'))
./src/fenrirscreenreader/core/screenManager.py:225: windowList = text.split('\n')
./src/fenrirscreenreader/commands/onCursorChange/62000-spell_check.py:66: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/60000-word_echo_type.py:39: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/50000-present_char_if_cursor_change_horizontal.py:41: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onCursorChange/61000-word_echo_navigation.py:37: newContent = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/commands/spell_check.py:47: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/commands/remove_word_from_spell_check.py:45: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/commands/add_word_to_spell_check.py:43: newContent = self.env['screen']['newContentText'].split('\n')[cursorPos['y']]
./src/fenrirscreenreader/commands/onScreenUpdate/60000-history.py:38: prevLine = self.env['screen']['oldContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./src/fenrirscreenreader/commands/onScreenUpdate/60000-history.py:39: currLine = self.env['screen']['newContentText'].split('\n')[self.env['screen']['newCursor']['y']]
./TODO v2.0:72: w.fill(i).split('\n')

View File

@ -0,0 +1,119 @@
import os
import struct
import sys
import pty
import tty
import termios
import shlex
import signal
import select
import pyte
import time
class Terminal:
def __init__(self, columns, lines, p_in):
self.screen = pyte.HistoryScreen(columns, lines)
self.screen.set_mode(pyte.modes.LNM)
self.screen.write_process_input = \
lambda data: p_in.write(data.encode())
self.stream = pyte.ByteStream()
self.stream.attach(self.screen)
def feed(self, data):
self.stream.feed(data)
def dump(self):
cursor = self.screen.cursor
lines = []
for y in self.screen.dirty:
line = self.screen.buffer[y]
data = [(char.data, char.reverse, char.fg, char.bg)
for char in (line[x] for x in range(self.screen.columns))]
lines.append((y, data))
self.screen.dirty.clear()
return {"c": (cursor.x, cursor.y), "lines": lines}
def open_terminal(command="bash", columns=80, lines=24):
p_pid, master_fd = pty.fork()
if p_pid == 0: # Child.
argv = shlex.split(command)
env = os.environ.copy()
env["TERM"] = 'vt100'
os.execvpe(argv[0], argv, env)
# File-like object for I/O with the child process aka command.
p_out = os.fdopen(master_fd, "w+b", 0)
return Terminal(columns, lines, p_out), p_pid, p_out
def HandleTerminal():
debug = False
running = True
try:
old_attr = termios.tcgetattr(sys.stdin)
tty.setraw(0)
terminal, p_pid, p_out = open_terminal()
std_out = os.fdopen(sys.stdout.fileno(), "w+b", 0)
while running:
r, w, x = select.select([sys.stdin, p_out],[],[])
if r == []:
continue
if p_out in r:
if debug:
print('pre p_out')
try:
msgBytes = read_all(p_out.fileno())
except (EOFError, OSError):
running = False
break
terminal.feed(msgBytes)
os.write(sys.stdout.fileno(), msgBytes)
if debug:
print('after p_out')
if sys.stdin in r:
if debug:
print('pre stdin')
try:
msgBytes = read_all(sys.stdin.fileno())
except (EOFError, OSError):
running = False
break
terminal.feed(msgBytes)
os.write(p_out.fileno(), msgBytes)
if debug:
print('after stdin')
except Exception as e: # Process died?
print(e)
running = False
finally:
os.kill(p_pid, signal.SIGTERM)
p_out.close()
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_attr)
sys.exit(0)
def get_terminal_size(fd):
s = struct.pack('HHHH', 0, 0, 0, 0)
rows, cols, _, _ = struct.unpack('HHHH', fcntl.ioctl(fd, termios.TIOCGWINSZ, s))
return rows, cols
def resize_terminal(fd):
s = struct.pack('HHHH', 0, 0, 0, 0)
s = fcntl.ioctl(0, termios.TIOCGWINSZ, s)
fcntl.ioctl(fd, termios.TIOCSWINSZ, s)
rows, cols, _, _ = struct.unpack('hhhh', s)
return rows, cols
def read_all(fd):
bytes = os.read(fd, 65536)
if bytes == b'':
raise EOFError
while has_more(fd):
data = os.read(fd, 65536)
if data == b'':
raise EOFError
bytes += data
return bytes
def has_more(fd):
r, w, e = select.select([fd], [], [], 0)
return (fd in r)
if __name__ == "__main__":
HandleTerminal()

92
play zone/vcsa.py Executable file
View File

@ -0,0 +1,92 @@
#!/usr/bin/python
from cairo import *
from fcntl import ioctl
from array import array
import struct
import errno
import sys
GIO_UNIMAP = 0x4B66
VT_GETHIFONTMASK = 0x560D
if len(sys.argv) != 3:
print "Usage: %s <tty-number> <output-png>" % sys.argv[0]
exit()
ttyno = int(sys.argv[1])
png = sys.argv[2]
tty = open('/dev/tty%d' % ttyno, 'rb')
himask = array("H", (0,))
ioctl(tty, VT_GETHIFONTMASK, himask)
hichar, = struct.unpack_from("@H", himask)
sz = 512
while True:
try:
unipairs = array("H", [0]*(2*sz))
unimapdesc = array("B", struct.pack("@HP", sz, unipairs.buffer_info()[0]))
ioctl(tty.fileno(), GIO_UNIMAP, unimapdesc)
break
except IOError as e:
if e.errno != errno.ENOMEM:
raise
sz *= 2
tty.close()
ncodes, = struct.unpack_from("@H", unimapdesc)
utable = struct.unpack_from("@%dH" % (2*ncodes), unipairs)
charmap = {}
for u, b in zip(utable[::2], utable[1::2]):
if charmap.get(b) is None:
charmap[b] = unichr(u)
vcs = open('/dev/vcsa%d' % ttyno, 'rb')
head = vcs.read(4)
rows = ord(head[0])
cols = ord(head[1])
caretX = ord(head[2])
caretY = ord(head[3])
surf = ImageSurface(FORMAT_RGB24, cols * 8, rows * 16)
cr = Context(surf)
cr.set_source_rgb(1,1,1)
cr.set_font_face(ToyFontFace("Mono", FONT_SLANT_NORMAL, FONT_WEIGHT_NORMAL));
m = Matrix()
m.scale(10.0, 12.0)
cr.set_font_matrix(m)
def CairoColor(b, a):
return (b if a & 4 else 0, b if a & 2 else 0, b if a & 1 else 0)
for y in range(rows):
for x in range(cols):
data = vcs.read(2)
(sh,) = struct.unpack("=H", data)
attr = (sh >> 8) & 0xFF
ch = sh & 0xFF
if hichar == 0x100:
attr >>= 1
ink = attr & 0x0F
paper = (attr>>4) & 0x0F
b = 1.0 if attr & 0x80 else 0.75
if sh & hichar:
ch |= 0x100
cr.set_source_rgb(*CairoColor(b, paper))
cr.rectangle(x*8, y*16, 8, 16)
cr.fill()
cr.set_source_rgb(*CairoColor(b, ink))
cr.move_to(x*8, 12 + y*16)
cr.show_text(charmap.get(ch, u'?'))
cr.stroke()
vcs.close()
surf.write_to_png(png)

142
play zone/wrapWord.py Executable file
View File

@ -0,0 +1,142 @@
#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
#from fenrirscreenreader.core import debug
import string
# X Y Word END BREAK
# -1, -1, '', True False
def getPrevWord(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
if currText.strip( string.whitespace) == '':
return currX, currY, '', endOfScreen, lineBreak
x, y, currWord, endOfScreen, lineBreakCurrWord = getCurrentWord(currX,currY,currText)
if endOfScreen:
return x, y, currWord, endOfScreen, lineBreak
wrappedLines = currText.split('\n')
currLine = wrappedLines[y]
if x - 1 < 0:
if y - 1 < 0:
lineBreak = False
endOfScreen = True
return currX, currY, '', endOfScreen, lineBreak
else:
y -= 1
currLine = wrappedLines[y]
x = len( wrappedLines[y]) - 1
lineBreak = True
else:
x -= 1
lineBreakCurrWord = lineBreak or lineBreakCurrWord
x, y, currWord, endOfScreen, lineBreak = getCurrentWord(x,y,currText)
lineBreak = lineBreak or lineBreakCurrWord
return x, y, currWord, endOfScreen, lineBreak
def getCurrentWord(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
if currText.strip( string.whitespace) == '':
return currX, currY, '', endOfScreen, lineBreak
x = currX
y = currY
currWord = ''
wrappedLines = currText.split('\n')
currLine = wrappedLines[y]
Found = False
while(not Found):
if not currLine[x] in string.whitespace:
if x == 0:
Found = True
else:
if currLine[x - 1] in string.whitespace:
Found = True
if not Found:
if x - 1 < 0:
if y - 1 < 0:
lineBreak = False
endOfScreen = True
return currX, currY, '', endOfScreen, lineBreak
else:
y -= 1
currLine = wrappedLines[y]
x = len( wrappedLines[y]) - 1
lineBreak = True
else:
x -= 1
if Found:
currWord = currLine[x:]
for d in string.whitespace:
delimiterPos = currWord.find(d)
if delimiterPos != -1:
currWord = currWord[:delimiterPos]
return x, y, currWord, endOfScreen, lineBreak
return currX, currY, '', False, False
def getNextWord(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
if currText.strip( string.whitespace) == '':
return currX, currY, '', endOfScreen, lineBreak
x = currX
y = currY
currWord = ''
wrappedLines = currText.split('\n')
currLine = wrappedLines[y]
Found = False
while(not Found):
if not Found:
if x + 1 > len( currLine ) - 1:
if y + 1 > len( wrappedLines ) - 1:
lineBreak = False
endOfScreen = True
return currX, currY, '', endOfScreen, lineBreak
else:
y += 1
currLine = wrappedLines[y]
x = 0
lineBreak = True
else:
x += 1
if not currLine[x] in string.whitespace:
if x == 0:
Found = True
else:
if currLine[x - 1] in string.whitespace:
Found = True
if Found:
currWord = currLine[x:]
for d in string.whitespace:
delimiterPos = currWord.find(d)
if delimiterPos != -1:
currWord = currWord[:delimiterPos]
return x, y, currWord, endOfScreen, lineBreak
return currX, currY, '', False, False
data = """das ist ein test lol
das ist ein test l
das ist ein test
asdf asdf a
test test
te test"""
print('__DATA START__')
print(data)
print('__DATA END__\n\n')
x = 3
y = 0
x, y, currWord, endOfScreen, lineBreak = getCurrentWord(x,y,data)
print(x,y,currWord)

19
play zone/writeBrl.py Executable file
View File

@ -0,0 +1,19 @@
#!/bin/python
import brlapi
import time
brl = brlapi.Connection()
brl.enterTtyModeWithPath()
print('display size' + str(brl.displaySize))
print('driver name'+str(brl.driverName))
t = time.time()
#while(time.time() - t <= 5):
try:
brl.writeText( 'this is a 5 second test')
except Exception as e:
print(e)
time.sleep(5)
brl.leaveTtyMode()