<commit_before>#! /ufs/guido/bin/sgi/python
#! /usr/local/python

# Watch line printer queue(s).
# Intended for BSD 4.3 lpq.

import posix
import sys
import time
import string

DEF_PRINTER = 'psc'
DEF_DELAY = 10

def main():
	delay = DEF_DELAY # XXX Use getopt() later
	try:
		thisuser = posix.environ['LOGNAME']
	except:
		thisuser = posix.environ['USER']
	printers = sys.argv[1:]
	if printers:
		# Strip '-P' from printer names just in case
		# the user specified it...
		for i in range(len(printers)):
			if printers[i][:2] = '-P':
				printers[i] = printers[i][2:]
	else:
		if posix.environ.has_key('PRINTER'):
			printers = [posix.environ['PRINTER']]
		else:
			printers = [DEF_PRINTER]
	#
	clearhome = posix.popen('clear', 'r').read()
	#
	while 1:
		# Pipe output through cat for extra buffering,
		# so the output (which overwrites the previous)
		# appears instantaneous.
		sys.stdout = posix.popen('exec cat', 'w')
		sys.stdout.write(clearhome)
		for name in printers:
			pipe = posix.popen('lpq -P' + name + ' 2>&1', 'r')
			showstatus(name, pipe, thisuser)
			sts = pipe.close()
			if sts:
				print name + ': *** lpq exit status', sts
		sts = sys.stdout.close()
		time.sleep(delay)

def showstatus(name, pipe, thisuser):
	lines = 0
	users = {}
	aheadbytes = 0
	aheadjobs = 0
	userseen = 0
	totalbytes = 0
	totaljobs = 0
	while 1:
		line = pipe.readline()
		if not line: break
		fields = string.split(line)
		n = len(fields)
		if len(fields) >= 6 and fields[n-1] = 'bytes':
			rank = fields[0]
			user = fields[1]
			job = fields[2]
			files = fields[3:-2]
			bytes = eval(fields[n-2])
			if user = thisuser:
				userseen = 1
			elif not userseen:
				aheadbytes = aheadbytes + bytes
				aheadjobs = aheadjobs + 1
			totalbytes = totalbytes + bytes
			totaljobs = totaljobs + 1
			if users.has_key(user):
				ujobs, ubytes = users[user]
			else:
				ujobs, ubytes = 0, 0
			ujobs = ujobs + 1
			ubytes = ubytes + bytes
			users[user] = ujobs, ubytes
		else:
			if fields and fields[0] <> 'Rank':
				if line[-1:] = '\n':
					line = line[:-1]
				if not lines:
					print name + ':',
				else:
					print
				print line,
				lines = lines + 1
	if totaljobs:
		if lines > 1:
			print
			lines = lines+1
		print (totalbytes+1023)/1024, 'K',
		if totaljobs <> len(users):
			print '(' + `totaljobs` + ' jobs)',
		if len(users) = 1:
			print 'for', users.keys()[0],
		else:
			print 'for', len(users), 'users',
			if userseen:
				if aheadjobs = 0:
					print '(' + thisuser + ' first)',
				else:
					print '(' + `(aheadbytes+1023)/1024`,
					print 'K before', thisuser + ')'
	if lines:
		print

try:
	main()
except KeyboardInterrupt:
	pass<commit_msg>Modularized the code.<commit_after>#! /ufs/guido/bin/sgi/python
#! /usr/local/python

# Watch line printer queue(s).
# Intended for BSD 4.3 lpq.

import posix
import sys
import time
import string

DEF_PRINTER = 'psc'
DEF_DELAY = 10

def main():
	delay = DEF_DELAY # XXX Use getopt() later
	try:
		thisuser = posix.environ['LOGNAME']
	except:
		thisuser = posix.environ['USER']
	printers = sys.argv[1:]
	if printers:
		# Strip '-P' from printer names just in case
		# the user specified it...
		for i in range(len(printers)):
			if printers[i][:2] = '-P':
				printers[i] = printers[i][2:]
	else:
		if posix.environ.has_key('PRINTER'):
			printers = [posix.environ['PRINTER']]
		else:
			printers = [DEF_PRINTER]
	#
	clearhome = posix.popen('clear', 'r').read()
	#
	while 1:
		text = clearhome
		for name in printers:
			text = text + makestatus(name, thisuser) + '\n'
		print text
		time.sleep(delay)

def makestatus(name, thisuser):
	pipe = posix.popen('lpq -P' + name + ' 2>&1', 'r')
	lines = []
	users = {}
	aheadbytes = 0
	aheadjobs = 0
	userseen = 0
	totalbytes = 0
	totaljobs = 0
	while 1:
		line = pipe.readline()
		if not line: break
		fields = string.split(line)
		n = len(fields)
		if len(fields) >= 6 and fields[n-1] = 'bytes':
			rank = fields[0]
			user = fields[1]
			job = fields[2]
			files = fields[3:-2]
			bytes = eval(fields[n-2])
			if user = thisuser:
				userseen = 1
			elif not userseen:
				aheadbytes = aheadbytes + bytes
				aheadjobs = aheadjobs + 1
			totalbytes = totalbytes + bytes
			totaljobs = totaljobs + 1
			if users.has_key(user):
				ujobs, ubytes = users[user]
			else:
				ujobs, ubytes = 0, 0
			ujobs = ujobs + 1
			ubytes = ubytes + bytes
			users[user] = ujobs, ubytes
		else:
			if fields and fields[0] <> 'Rank':
				line = string.strip(line)
				if line = 'no entries':
					line = name + ': idle'
				elif line[-22:] = ' is ready and printing':
					line = name
				lines.append(line)
	#
	if totaljobs:
		line = `(totalbytes+1023)/1024` + ' K'
		if totaljobs <> len(users):
			line = line + ' (' + `totaljobs` + ' jobs)'
		if len(users) = 1:
			line = line + ' for ' + users.keys()[0]
		else:
			line = line + ' for ' + `len(users)` + ' users'
			if userseen:
				if aheadjobs = 0:
				  line =  line + ' (' + thisuser + ' first)'
				else:
				  line = line + ' (' + `(aheadbytes+1023)/1024`
				  line = line + ' K before ' + thisuser + ')'
		lines.append(line)
	#
	sts = pipe.close()
	if sts:
		lines.append('lpq exit status ' + `sts`)
	return string.joinfields(lines, ': ')

try:
	main()
except KeyboardInterrupt:
	pass
{'fraction_non_alphanumeric': 0.14995224450811842, 'fraction_numerical': 0.020630372492836675, 'mean_word_length': 2.948717948717949, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 12, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4403726', 'n_tokens_mistral': 2351, 'n_tokens_neox': 1959, 'n_words': 543}