70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
#!/usr/bin/env python2
|
|
# Copyright 2019 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import sys
|
|
|
|
def chargen(modulo, max_chars):
|
|
"""Generate a stream of characters on the console.
|
|
|
|
The stream is an ever incrementing pattern of characters from the
|
|
following set: 0..9A..Za..z.
|
|
|
|
Args:
|
|
modulo: an int, restart the pattern every modulo characters, if
|
|
modulo is non zero
|
|
max_chars: an int, stop printing after this number of characters if non
|
|
zero, if zero - print indefinitely
|
|
"""
|
|
|
|
base = '0'
|
|
c = base
|
|
counter = 0
|
|
while True:
|
|
sys.stdout.write(c)
|
|
counter = counter + 1
|
|
|
|
if (max_chars != 0) and (counter == max_chars):
|
|
sys.stdout.write('\n')
|
|
return
|
|
|
|
if modulo and ((counter % modulo) == 0):
|
|
c = base
|
|
continue
|
|
|
|
if c == 'z':
|
|
c = base
|
|
elif c == 'Z':
|
|
c = 'a'
|
|
elif c == '9':
|
|
c = 'A'
|
|
else:
|
|
c = '%c' % (ord(c) + 1)
|
|
|
|
|
|
def main(args):
|
|
'''Process command line arguments and invoke chargen if args are valid'''
|
|
|
|
modulo = 0
|
|
max_chars = 0
|
|
|
|
try:
|
|
if len(args) > 0:
|
|
modulo = int(args[0])
|
|
if len(args) > 1:
|
|
max_chars = int(args[1])
|
|
except ValueError:
|
|
sys.stderr.write('usage %s:'
|
|
"['seq_length' ['max_chars']]\n")
|
|
sys.exit(1)
|
|
|
|
try:
|
|
chargen(modulo, max_chars)
|
|
except KeyboardInterrupt:
|
|
print
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv[1:])
|
|
sys.exit(0)
|