Summary: First full version. Still does not handle comment characters embedded in literal strings properly.
1 parent 3d9ddb4 commit 29d34b1485e1d3e74fbbcdb1b78abea0743ce12f
@tundra tundra authored on 21 Nov 2014
Showing 1 changed file
View
130
appendall.py
# appendall.py - Append Text To Every Non-Comment Line In A File
# Copyright (c) 2014 TundraWare Inc., Des Plaines, IL 60018 USA
# All Rights Reserved. For Terms Of Use See: appendall-license.txt
# For Program Updates See: http://www.tundraware.com/Software/appendall
# $Id: appendall.py,v 1.100 2014/11/21 20:30:27 tundra Exp $
# $Id: appendall.py,v 1.101 2014/11/21 21:00:53 tundra Exp $
 
# Embed the source control ID string for use by program
 
CVSID='$Id: appendall.py,v 1.100 2014/11/21 20:30:27 tundra Exp $'
CVSID='$Id: appendall.py,v 1.101 2014/11/21 21:00:53 tundra Exp $'
 
#####
# Program Information
#####
#####
# List Of All Legal Options - Update This When You Add More!!!!
#####
 
OPTIONSLIST = '-f:hv'
OPTIONSLIST = '-hv'
 
 
#----------------------------------------------------------#
# Variables User Might Change #
 
import getopt
import os
import sys
# import tconfpy # Uncomment this and code below to parse config files
 
 
#----------------------------------------------------------#
# Aliases & Redefinitions #
#####
# Literals
#####
 
COMMENT = '#'
 
 
#----------------------------------------------------------#
# Prompts, & Application Strings #
#####
 
eBADARG = "Invalid command line: %s!"
eERROR = "ERROR"
eNOTEXT = "Missing Text To Append!"
 
 
#####
# Informational Messages
 
uTable = [PROGVER,
"usage: " + PROGNAME + " [%s]" % optionslist,
" where,",
" -f file Configuration file to use",
" -h Print this help information",
" -v Print detailed version information",
]
 
# Supporting Function Definitions #
#----------------------------------------------------------#
 
 
def ColumnPad(list, padchar=" ", padwidth=20):
 
retval = ""
for l in list:
l = str(l)
retval += l + ((padwidth - len(l)) * padchar)
 
return retval.strip()
 
# End of 'ColumnPad()'
 
 
#####
# Print A Debug Message
#####
 
def DebugMsg(msg):
PrintStderr(PROGNAME + " " + dDEBUG + ": " + msg)
 
# End of 'DebugMsg()'
 
 
#####
# Dump The State Of The Program
#####
 
def DumpState():
 
# Dump the command line
DebugMsg(ColumnPad(["Command Line", sys.argv]))
 
# Names of all the state variables we want dumped
state = [
]
 
for k in state:
DebugMsg(ColumnPad([k, eval(k)]))
 
# End of 'DumpState()'
 
 
#####
# Print An Error Message
#####
 
def ErrorMsg(emsg):
PrintStderr(PROGNAME + " " + eERROR + ": " + emsg)
 
# End of 'ErrorMsg()'
 
 
#####
# Print An Info Message
#####
 
def InfoMsg(imsg):
PrintStderr(PROGNAME + " " + iINFO + ": " + imsg)
 
# End of 'InfoMsg()'
 
 
#####
# Print To stderr
sys.exit(1)
 
for opt, val in opts:
 
if opt == "-f":
CFGFILE=val
 
if opt == "-h":
Usage()
sys.exit(0)
 
if opt == "-v":
PrintStdout(CVSID)
sys.exit(0)
 
# Processing of the configuration file below requires installation of
# the freely available TundraWare Inc. 'tconfpy' parser and then
# uncommenting the code below. The parser can be found at:
#
# http://www.tundraware.com/Software/tconfpy
#
# Process the configuration file
#
#retval = tconfpy.ParseConfig(CFGFILE, CallingProgram="%s %s " % (PROGNAME, VERSION))
#
# Print any errors or warning generated by the parse
#
# for x in (retval.ErrMsgs, retval.WarnMsgs):
# for y in x:
# print y
#
# If there were any errors, we're done
#if retval.ErrMsgs:
# sys.exit(0)
 
# Get text to append
 
try:
text = sys.argv[1]
 
except:
ErrorMsg(eNOTEXT)
sys.exit(1)
 
for line in sys.stdin.readlines():
 
# Get rid of linefeeds - we'll add them back later
if line[-1] == "\n":
line = line[:-1]
 
# Ignore comments text, and blank lines
if line.split(COMMENT)[0].strip():
 
parts = line.split(COMMENT)
if len(parts) == 1:
line = parts[0] + text
 
else:
line = parts[0] + text + COMMENT + parts[1]
 
PrintStdout(line)