|!Punctuation|!Location|!Function|\n|{{{@@...@@}}}|surrounding text|@@highlighted text@@|\n|{{{//...//}}}|surrounding text|//italicized text//|\n|{{{==...==}}}|surrounding text|==strikethrough text==|\n|{{{''...''}}}|surrounding text|''boldfaced text''|\n|{{{__...__}}}|surrounding text|__underlined text__|\n|{{{[[text|url]]}}}|around text/url pair|[[text|http://gri.gallaudet.edu/]] link to url|\n|{{{ {...} }}}|''__tripled__'' surrounding text|{{{in-line literal text}}}|\n|{{{ {...} }}}|''__tripled__'' surrounding ''__lines__''|literal block|\n|{{{<<<}}}|surrounding ''__lines__''|blockquotes|\n|{{{!}}}|at start of line|subheading|\n|{{{|...|...|}}}|line sectioned by vertical bars|table row|\n|{{{!}}}|in a table|!table heading|\n|{{{----}}}|alone on line|horizontal rule|\n|{{{*}}}|at start of line|bulleted list item|\n|{{{#}}}|at start of line|numbered list item|\nsource: Kevin Cole, January 2007
TTiddlyWiki uses Wiki style markup, a way of lightly "tagging" plain text so it can be transformed into HTML. Edit this Tiddler to see samples.\n\n! Header Samples\n!Header 1\n!!Header 2\n!!!Header 3\n!!!!Header 4\n!!!!!Header 5\n\n! Unordered Lists:\n* Lists are where it's at\n* Just use an asterisk and you're set\n** To nest lists just add more asterisks...\n***...like this\n* The circle makes a great bullet because once you've printed a list you can mark off completed items\n* You can also nest mixed list types\n## Like this\n\n! Ordered ListsEdit this tiddler to see how it's done.\n[img[http://img110.echo.cx/img110/139/gorilla8nw.jpg]]\n# Ordered lists are pretty neat too\n# If you're handy with HTML and CSS you could customize the [[numbering scheme|http://www.w3schools.com/css/pr_list-style-type.asp]]\n## To nest, just add more octothorpes (pound signs)...\n### Like this\n* You can also\n** Mix list types\n*** like this\n# Pretty neat don't you think?\n\n! Tiddler links\nTo create a Tiddler link, just use mixed-case WikiWord, or use [[brackets]] for NonWikiWordLinks. This is how the GTD style [[@Action]] lists are created. \n\nNote that existing Tiddlers are in bold and empty Tiddlers are in italics. See CreatingTiddlers for details.\n\n! External Links\nYou can link to [[external sites|http://google.com]] with brackets. You can also LinkToFolders on your machine or network shares.\n\n! Images\nEdit this tiddler to see how it's done.\n[img[http://img110.echo.cx/img110/139/gorilla8nw.jpg]]\n\n!Tables\n|!th1111111111|!th2222222222|\n|>| colspan |\n| rowspan |left|\n|~| right|\n|colored| center |\n|caption|c\n\nFor a complex table example, see PeriodicTable.\n\n! Horizontal Rules\nYou can divide a tiddler into\n----\nsections by typing four dashes on a line by themselves.\n\n! Blockquotes\n<<<\nThis is how you do an extended, wrapped blockquote so you don't have to put angle quotes on every line.\n<<<\n>level 1\n>level 1\n>>level 2\n>>level 2\n>>>level 3\n>>>level 3\n>>level 2\n>level 1\n\n! Other Formatting\n''Bold''\n==Strike==\n__Underline__\n//Italic//\nSuperscript: 2^^3^^=8\nSubscript: a~~ij~~ = -a~~ji~~\n@@highlight@@\n@@color(green):green colored@@\n@@bgcolor(#ff0000):color(#ffffff):red colored@@\n
pyrs
A pythonic interface to US IRS PDF/FDF forms
Type the text for 'New Tiddler'
Type the text for 'New Tiddler'
TitlePage\n
Summary\n
Introducion\n
FundingSources\n
ProblemNeed\n
Methods\n
Reports\n
Future\n
Budget\n
[[overview]]\n
[[Project Mascott's Father|https://s3.amazonaws.com/cdn-origin-etr.akc.org/wp-content/uploads/2017/11/12225240/Pyrenean-Mastiff-On-White-01.jpg]]\n\nIRS forms have all been converted, very likely at considerable government expense, to PDF format. The PDF format the IRS implemented uses fill-in forms that comply with [[Forms Data Format|https://en.wikipedia.org/wiki/Portable_Document_Format#Forms_Data_Format_.28FDF.29]], specified in this [[Adobe fdf description|http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/fdf_data_exchange.pdf]] which allow properly formatted input files to populate the PDF form. The goal of this project is to \n* build a library using the the appropriate python fdf tool kit \n* develop fdf forms for the following IRS PDF documents\n** 1040\n** 1040ez\n** 1040a\n** 1040e\n** 1040ct\n** 1040se\n* optionally a spreadsheet interface tied to openpyxl or the equivalent may be in order. \n''By doing this we shall help US Citizens beyond measure, and assure that our fame and brilliance will last the epoc.''\n\nPart of the vision is to that the Python library pyrs.py stores IRS form objects, and you could call them up like this:\n\npyrs.1040 - current form 1040\npyrs.1040.2014 - 1040 from tax year 2014\npyrs.1040sa - current form 1040 schedule a \n\n27 March 2017 Apparently, the way to do this is with the [[Python port of the PHP forge_fdf library by Sid Steward|https://github.com/ccnmtl/fdfgen]] on github.\n\nSo here I have some Pyton code I am working on to fill out US IRS tax forms. Sample code is located for the time being and [[here is an example|11f1040.py]].The goal is to build the pyrs library so that you unilaterally can invoke class objects such as pyrs.1040, pyrs.1040sa, pyrs.1040sc \n\nThere is a discussion related to this topic on [[LinkedIn|https://www.linkedin.com/groups/25827/25827-6252958640483954691?midToken=AQFJDw9L2Zlggg&trk=eml-b2_anet_digest_of_digests-hero-20-comment&trkEmail=eml-b2_anet_digest_of_digests-hero-20-comment-null-1pbqy%7Ej0zk8ibf%7Eom&lipi=urn%3Ali%3Apage%3Aemail_b2_anet_digest_of_digests%3BEm4DaUDWR0u%2BWKGe2jwBWw%3D%3D]] has revealed the [[Python for CPAs|http://www.python4cpas.com/]] web site.\n\n
Greetings Comrade,\n\nDa, is good. Many friends in Minsk is most excited for possibility of\nfilling out many many paper tax refund forms in automated fashion. \nE-filing has too much, what you call it, anomaly detection and Captchas. \nPlease to post such code on GitHub. Much appreciated would be Microsoft\nASP DotNet implementation to enable implementation on new web site\nhttp://doyourtaxesforfree.ru\n\nPlease also to consider ASP DotNet PDF interface for Medicare filings for\nreal therapeutic colonotherapy practice.\n\nSpaciba,\n\nAlexei Lushkoff\nLegitimate Businessman and Entrepreneur\n1233 15th Street\nBehind the Jiffy Lube\nBrighton Beach, NY 11235\n\n
'27 March 2017'\nAs of now the Code For America approach seems to be gone. While we partially filled out a fellowship grant application, we never submitted it.\n\nWe have set up this web site and applied to [[Code For America|https://www.codeforamerica.org/]] for a [[fellowship grant|http://docbox.flint.com/~flint/pyrs/pyrs_2016-04-11.pdf]].\n\nThe parameters below shall be filled out as we can.\n\n# [[TitlePage]]\n# [[Summary]]\n# [[Introducion]]\n# [[FundingSources]]\n# [[ProblemNeed]]\n# [[Methods]]\n# [[Reports]]\n# [[Future]]\n# [[Budget]]\n
\n[[Acroread |https://forums.linuxmint.com/viewtopic.php?t=173186]] shows form fills evince unfortunately does not
Type the text for '29 March 2017'\n\nhttps://github.com/ccnmtl/fdfgen
'29 March 2017'\nShell Script to download forms:\n\n{{{\nwget http://www.irs.gov/pub/irs-pdf/f1040.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040a.pdf \nwget http://www.irs.gov/pub/irs-pdf/f1040sa.pdf \nwget http://www.irs.gov/pub/irs-pdf/f1040sc.pdf \nwget http://www.irs.gov/pub/irs-pdf/f1040sa.pdf\n# State Forms\n# Note recommend adding date variable to each call sometime...\ndate="2016"\nwget http://www.state.vt.us/tax/pdf.word.excel/forms/income/2016/2016HI-144-web.pdf\nwget http://www.state.vt.us/tax/pdf.word.excel/forms/income/2016/2016HS-122-web.pdf\nwget http://www.state.vt.us/tax/pdf.word.excel/forms/income/2016/2016IN-111-fillin.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/2016-IN-113.pdf\n}}}\n\n\nBasic python for generating IRS Form 1040\n\n{{{\n#!/usr/bin/python\n# 2017-03-29 09:00:22 pflint\n# SOURCE: https://github.com/ccnmtl/fdfgen\nimport os\nfrom fdfgen import forge_fdf\n# 025165824\n# Dummyvalu\nfields = [\n ('topmostSubform[0].Page1[0].HeaderPg1[0].f1_01[0]','January') # Line -5-1\n ,('topmostSubform[0].Page1[0].HeaderPg1[0].f1_02[0]','December') # Line -5-2\n ,('topmostSubform[0].Page1[0].HeaderPg1[0].f1_03[0]','16') # Line -5-3\n ,('topmostSubform[0].Page1[0].f1_04[0]','Paul L.') # Line -4-1\n ,('topmostSubform[0].Page1[0].f1_05[0]','Flint') # Line -4-2\n ,('topmostSubform[0].Page1[0].f1_06[0]','Dummyvalu') # Line -4-3\n ,('topmostSubform[0].Page1[0].f1_07[0]','Alyson R.') # Line -3-1\n ,('topmostSubform[0].Page1[0].f1_08[0]','Flint') # Line -3-2\n ,('topmostSubform[0].Page1[0].SpouseSSN[0].f1_09[0]','Dummyvalu') # Line -3-3\n ,('topmostSubform[0].Page1[0].Address[0].f1-10[0]','17 Averill Street') # Line -2-1\n ,('topmostSubform[0].Page1[0].Address[0].f1-11[0]','n/a') # Line -2-2\n ,('topmostSubform[0].Page1[0].Address[0].f1-12[0]','Barre, Vermont 05641') # Line -1-1\n ,('topmostSubform[0].Page1[0].Address[0].f1_13[0]',' ') # Line -0-1\n ,('topmostSubform[0].Page1[0].Address[0].f1_14[0]',' ') # Line -0-2\n ,('topmostSubform[0].Page1[0].Address[0].f1_15[0]',' ') # Line -0-3\n ,('topmostSubform[0].Page1[0].c1_01[0]','1') # check Presidential You\n ,('topmostSubform[0].Page1[0].c1_02[0]','1') # check Presidential Spouse\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[0]',' ') # check Single\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[1]','MJ') # check Married Jointly \n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[2]',' ') # check Married Separate\n ,('topmostSubform[0].Page1[0].Lines1-3[0].f1-16[0]',' ') # check Head of Household\n ,('topmostSubform[0].Page1[0].c1_03[0]',' ') # Name of Dependent\n ]\nfdf = forge_fdf("",fields,[],[],[])\nfdf_file = open("data.fdf","wb")\nfdf_file.write(fdf)\nfdf_file.close()\n# pdftk f1040.pdf fill_form data.fdf output output.pdf flatten\nos.system('pdftk f1040.pdf fill_form data.fdf output output.pdf flatten')\n}}}
'29 March 2017'\n\n
Type the text for '29 March 2017'\n{{{\n2014.04.10 KJC\n\n Not that I expect any kind of consistency from the DC government,\n but, their Drupal-based web site keeps the tax documents under the\n Office of Tax and Revenue within the Chief Financial Officer's\n purview:\n\n http://otr.cfo.dc.gov/\n\n DC, being fucked up, has several links to older years\n forms. Eventually, the correct URL was obtained:\n\n http://otr.cfo.dc.gov/page/2013-individual-income-tax-forms\n\n Forms and instructions, thus far collected:\n\n d-40.pdf .......... DC D-40 and D-40-EZ Instructions and Forms\n f1040.pdf ......... US 1040 Form\n f1040sce.pdf ...... US Schedule C-EZ Form\n f1040sd.pdf ....... US Schedule D Form\n f1040sse.pdf ...... US Self-Employment Form\n i1040.pdf ......... US 1040 Instructions\n i1040sc.pdf ....... US Schedule C Instructions\n i1040sd.pdf ....... US Schedule D Instructions\n i1065sk1.pdf ...... US 1065 / Schedule K-1 Instructions\n f8949.pdf ......... US Sales & Dispositions of Capital Assets Form\n i8949.pdf ......... US Sales & Dispositions of Capital Assets Instructions\n f4868.pdf ......... US Application for Extension to File\n f6251.pdf ......... US \n i6251.pdf ......... US \n p969.pdf .......... US\n\n f1099-B-blank.pdf ..... Blank\n f1099-DIV-AF.pdf ...... American Funds\n f5498-SA-Optum.pdf .... Optum Health Savings Account (HSA)\n______________________________________________________________________________\n\n The flowchart, I think, is going to be:\n\n * look at Schedule K-1s (Form 1065) and ignore them unless they\n actually have information worth reporting. A dollar? Really? It\n appears to want 16 forms to report a friggin' dollar!\n\n * Look at 1099-B's and work them into a Schedule D for form\n 1040. Careful: There are lots of different Schedule D's. Of\n course there are.\n\n * From there, I think there may be sufficient info to do the 1040\n proper.\n______________________________________________________________________________\n\n}}}\n\n[[DC Personal Income Tax Form|http://otr.cfo.dc.gov/node/1207472]]
{{{\n$ python\nPython 3.5.2+ (default, Sep 22 2016, 12:18:14) \n[GCC 6.2.0 20160927] on linux\nType "help", "copyright", "credits" or "license" for more information.\n>>> field = ((1, 2) #\n... ,(3, 4) # A comment\n... )\n>>> field\n((1, 2), (3, 4))\n}}}
Type the text for '29 March 2017'\n\n{{{\n#!/usr/bin/python\n# 2017-03-29 09:00:22 pflint\n# SOURCE: https://github.com/ccnmtl/fdfgen\nimport os\nfrom fdfgen import forge_fdf\n# 025165824\n# Dummyvalu\nfields = [\n ('topmostSubform[0].Page1[0].HeaderPg1[0].f1_01[0]','January') # Line -5-1\n ,('topmostSubform[0].Page1[0].HeaderPg1[0].f1_02[0]','December') # Line -5-2\n ,('topmostSubform[0].Page1[0].HeaderPg1[0].f1_03[0]','16') # Line -5-3\n ,('topmostSubform[0].Page1[0].f1_04[0]','Paul L.') # Line -4-1\n ,('topmostSubform[0].Page1[0].f1_05[0]','Flint') # Line -4-2\n ,('topmostSubform[0].Page1[0].f1_06[0]','Dummyvalu') # Line -4-3\n ,('topmostSubform[0].Page1[0].f1_07[0]','Alyson R.') # Line -3-1\n ,('topmostSubform[0].Page1[0].f1_08[0]','Flint') # Line -3-2\n ,('topmostSubform[0].Page1[0].SpouseSSN[0].f1_09[0]','Dummyvalu') # Line -3-3\n ,('topmostSubform[0].Page1[0].Address[0].f1-10[0]','17 Averill Street') # Line -2-1\n ,('topmostSubform[0].Page1[0].Address[0].f1-11[0]','n/a') # Line -2-2\n ,('topmostSubform[0].Page1[0].Address[0].f1-12[0]','Barre, Vermont 05641') # Line -1-1\n ,('topmostSubform[0].Page1[0].Address[0].f1_13[0]',' ') # Line -0-1\n ,('topmostSubform[0].Page1[0].Address[0].f1_14[0]',' ') # Line -0-2\n ,('topmostSubform[0].Page1[0].Address[0].f1_15[0]',' ') # Line -0-1\n ,('topmostSubform[0].Page1[0].c1_01[0]','1') # Line -0-1\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[0]',' ')\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[1]','MJ')\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[2]',' ')\n ,('topmostSubform[0].Page1[0].Lines1-3[0].f1-16[0]',' ')\n ,('topmostSubform[0].Page1[0].c1_03[0]',' ')\n ]\nfdf = forge_fdf("",fields,[],[],[])\nfdf_file = open("data.fdf","wb")\nfdf_file.write(fdf)\nfdf_file.close()\n# pdftk f1040.pdf fill_form data.fdf output output.pdf flatten\nos.system('pdftk f1040.pdf fill_form data.fdf output output.pdf flatten')\n}}}
Type the text for '29 March 2017'\n\nThis line\n{{{\npdftk ./dld_pdfs/f1040.pdf dump_data_fields > f1040.ddf\n}}}\n\n\nGenerates\n{{{\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].HeaderPg1[0].f1_01[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].HeaderPg1[0].f1_02[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].HeaderPg1[0].f1_03[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldMaxLength: 2\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_04[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_05[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_06[0]\nFieldFlags: 25165824\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_07[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_08[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].SpouseSSN[0].f1_09[0]\nFieldFlags: 25165824\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Address[0].f1-10[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Address[0].f1-11[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Address[0].f1-12[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Address[0].f1_13[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Address[0].f1_14[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Address[0].f1_15[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].c1_01[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].c1_02[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines1-3[0].c1_03[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: S\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines1-3[0].c1_03[1]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: MJ\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines1-3[0].c1_03[2]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: MS\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines1-3[0].f1-16[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].c1_03[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: HoH\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_17[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].c1_03[1]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: QW\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Lines6a-5BoxesChecked[0].Lines6a-b[0].c1_04[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Lines6a-5BoxesChecked[0].Lines6a-b[0].c1_05[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: \nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Lines6a-5BoxesChecked[0]\nFieldFlags: 0\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].f1_18[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].f1_19[0]\nFieldFlags: 16777216\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].f1_20[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].c1_06[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].f1_21[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].f1_22[0]\nFieldFlags: 16777216\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].f1_23[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].c1_07[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].f1_24[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].f1_25[0]\nFieldFlags: 16777216\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].f1_26[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].c1_08[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].f1_27[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].f1_28[0]\nFieldFlags: 16777216\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].f1_29[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].c1_09[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: \nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0]\nFieldFlags: 0\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].Lines6a-d[0].c1_10[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_30[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_31[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_32[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_33[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_34[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_35[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_36[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_37[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_38[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_39[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_40[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_41[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_42[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_43[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_44[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_45[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_46[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_47[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_48[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_49[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_50[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page1[0].c1_11[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1-_51[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_52[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_53[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_54[0]\nFieldFlags: 8388608\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_55[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_56[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_57[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_58[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_59[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_60[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_61[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_62[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_63[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_64[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_65[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_66[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_67[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_68[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_69[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_70[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_71[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_72[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_73[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_74[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_75[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_76[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_77[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_78[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_79[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_80[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_81[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_82[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_83[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_84[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_85[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_86[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_87[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_88[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_89[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_90[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_91[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_92[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_93[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_94[0]\nFieldFlags: 25165824\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_95[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_96[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_97[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_98[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_99[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_100[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_101[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_102[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_103[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_104[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_105[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_106[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_107[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page1[0].f1_108[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_01[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_02[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_01[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_02[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_03[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_04[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2-03[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_05[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_04[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_05[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_06[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_07[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_08[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_09[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_10[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_11[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_06[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_07[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_08[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_12[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_13[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_14[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_15[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_16[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_17[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_18[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_19[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_20[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_21[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_22[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_23[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_24[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_25[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_26[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_27[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_28[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_29[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].F2_30[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_31[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_32[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_09[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_10[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_11[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_33[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_34[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_35[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_36[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_37[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_38[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_39[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_40[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_41[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_12[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_13[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_42[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_43[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_44[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_45[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_46[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_47[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_48[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_49[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_14[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_50[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_51[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_15[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_16[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_17[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_52[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_53[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_54[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_55[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_56[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_57[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_58[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_59[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_60[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_61[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_62[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_63[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_64[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_65[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_66[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_67[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_68[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_69[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_70[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_71[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_72[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_73[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_74[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_75[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_76[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_18[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_19[0]\nFieldFlags: 1\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_20[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_21[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_77[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_78[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_79[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_80[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_81[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_82[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_83[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_22[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: 1\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_84[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_85[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].RoutingNoRules[0].f1_86[0]\nFieldFlags: 25165824\nFieldJustification: Left\nFieldMaxLength: 9\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_23[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Checking\nFieldStateOption: Off\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_23[1]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Savings\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].Accountnumber[0].f1_87[0]\nFieldFlags: 25165824\nFieldJustification: Left\nFieldMaxLength: 17\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_88[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_89[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_90[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_91[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_92[0]\nFieldFlags: 8388608\nFieldJustification: Right\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_93[0]\nFieldFlags: 0\nFieldJustification: Right\nFieldMaxLength: 3\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_24[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_24[1]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: No\nFieldStateOption: Off\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_94[0]\nFieldFlags: 8392704\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_95[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_96[0]\nFieldFlags: 25165824\nFieldJustification: Left\nFieldMaxLength: 5\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_97[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_98[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_99[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_100[0]\nFieldFlags: 25165824\nFieldJustification: Left\nFieldMaxLength: 6\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_101[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Button\nFieldName: topmostSubform[0].Page2[0].c2_25[0]\nFieldFlags: 0\nFieldJustification: Left\nFieldStateOption: Off\nFieldStateOption: Yes\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_102[0]\nFieldFlags: 0\nFieldJustification: Center\nFieldMaxLength: 11\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_103[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_104[0]\nFieldFlags: 8388608\nFieldJustification: Left\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_105[0]\nFieldFlags: 0\nFieldJustification: Center\nFieldMaxLength: 10\n---\nFieldType: Text\nFieldName: topmostSubform[0].Page2[0].f2_106[0]\nFieldFlags: 8388608\nFieldJustification: Center\n---\nFieldType: \nFieldName: topmostSubform[0]\nFieldFlags: 0\nFieldJustification: Left\n\n}}}\n\n
{{{\n$ virtualenv venv\nNew python executable in /home/kjcole/Flint/venv/bin/python\nInstalling setuptools, pip, wheel...done.\nkjcole@acer:~/Flint$ source venv/bin/activate\n(venv) kjcole@acer:~/Flint$ \n(venv) kjcole@acer:~/Flint$ \n(venv) kjcole@acer:~/Flint$ deactivate\nkjcole@acer:~/Flint$\n}}}
Type the text for '29 March 2017'\n\n# Get Python 3.X\n# Get fdfgen\n# Get tax Fomrs\n# Take a form and output "FieldName"s\n# Map "FieldName"s to information (e.g. Line Numbers) \n# Input information to "FieldName"s\n# \n\n{{{\nrm output.pdf data.fdf && bin/6f1040.py && evince output.pdf\n}}}
{{{\n$ python2\nPython 2.7.12+ (default, Sep 17 2016, 12:08:02) \n[GCC 6.2.0 20160914] on linux2\nType "help", "copyright", "credits" or "license" for more information.\n\n>>> import json\n>>> x = [1, 2, 3, 4]\n>>> output = json.dumps(x) # output is a STRING\n>>> output\n'[1, 2, 3, 4]'\n>>> new = json.loads(output) # new is a LIST created from a STRING\n>>> new\n[1, 2, 3, 4]\n}}}
Type the text for '1 April 2017'\n\nI could use some help remapping the dumped "FieldName"s to more standard "form number line number" notation. Also I am trying to figure out how to add information to the form wile preserving the ability to add more information at a later date. The former issue is a massive mapping task, clerical in nature. This later issue is one that requires programmatic, analytical and subject matter expertise in PDF and pdftk.
Initial method...\n\n{{{\nrm output.pdf data.fdf && bin/6f1040.py && evince output.pdf\n}}}
\nAn example of this is [[f1040.ddf]]\n\nThis code may help:\n\n{{{\ngrep -A1 FieldType f1040.ddf |grep -v '\s-\s-' |awk 'NR%2{printf "%s ",$0;next;}1' | grep -v Button\n}}}\n\n{{{\n n=1;cat 2f1040-pure-2017-04-02.ddf |while read line; do ((n++)); echo ",('"$(echo $line |sed 's/Text //g' )",' $n')"; done\n}}}\n\nSyncs up maybe better\n{{{\n n=0;cat 2f1040-pure-2017-04-02.ddf |while read line; do ((n++)); echo -e "\st ,"$(echo $line |sed 's/Text //g' )"','Test $n')"; done > with_tabs_$(date +%F).py\n}}}\n\nCapture buttons and state...\n{{{\ngrep -A4 "FieldType: Button" f1040.ddf |grep -v '\s-\s-' |grep -v "FieldJustification:" |grep -v "FieldFlags" |grep -v "FieldType:" |awk 'NR%2{printf "%s ",$0;next;}1' > f1040_button_$(date +%F)\n}}}\n\n{{{\ncat f1040_button_2017-04-02 |while read line; do ((n++));sed 's/FieldStateOption: //g'| sed 's/FieldName: //g';echo -e "\st ,("$(echo $line |sed 's/FieldName: //g' )"','Test $n')"; done # > with_tabs_$(date +%F).py\n}}}\n\n
Type the text for '2 April 2017'\n\n{{{\n#!/usr/bin/python\n# 2017-04-02 12:03:08 pflint\n# SOURCE: https://github.com/ccnmtl/fdfgen\nimport os\nfrom fdfgen import forge_fdf\n# 025165824\n# Dummyvalu\nfields = [\n ('topmostSubform[0].Page1[0].HeaderPg1[0].f1_01[0]','January') # Line -5-1\n ,('topmostSubform[0].Page1[0].HeaderPg1[0].f1_02[0]','December') # Line -5-2\n ,('topmostSubform[0].Page1[0].HeaderPg1[0].f1_03[0]','16') # Line -5-3\n ,('topmostSubform[0].Page1[0].f1_04[0]','Paul L.') # Line -4-1\n ,('topmostSubform[0].Page1[0].f1_05[0]','Flint') # Line -4-2\n ,('topmostSubform[0].Page1[0].f1_06[0]','Dummyvalu') # Line -4-3\n ,('topmostSubform[0].Page1[0].f1_07[0]','Alyson R.') # Line -3-1\n ,('topmostSubform[0].Page1[0].f1_08[0]','Flint') # Line -3-2\n ,('topmostSubform[0].Page1[0].SpouseSSN[0].f1_09[0]','Dummyvalu') # Line -3-3\n ,('topmostSubform[0].Page1[0].Address[0].f1-10[0]','17 Averill Street') # Line -2-1\n ,('topmostSubform[0].Page1[0].Address[0].f1-11[0]','n/a') # Line -2-2\n ,('topmostSubform[0].Page1[0].Address[0].f1-12[0]','Barre, Vermont 05641') # Line -1-1\n ,('topmostSubform[0].Page1[0].Address[0].f1_13[0]',' ') # Line -0-1\n ,('topmostSubform[0].Page1[0].Address[0].f1_14[0]',' ') # Line -0-2\n ,('topmostSubform[0].Page1[0].Address[0].f1_15[0]',' ') # Line -0-3\n ,('topmostSubform[0].Page1[0].c1_01[0]','1') # check Presidential You\n ,('topmostSubform[0].Page1[0].c1_02[0]','1') # check Presidential Spouse\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[0]',' ') # 1 check Single S\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[1]','MJ') # 2 check Married Jointly MJ\n ,('topmostSubform[0].Page1[0].Lines1-3[0].c1_03[2]',' ') # 3 check Married Separate MS\n ,('topmostSubform[0].Page1[0].Lines1-3[0].f1-16[0]',' ') # SSN of Spouse\n ,('topmostSubform[0].Page1[0].c1_03[0]',' ') # 4 check Head of Household HoH\n ,('topmostSubform[0].Page1[0].f1_17[0]','Test') # Name of Dependent\n ,('topmostSubform[0].Page1[0].c1_03[1]',' ') # 5 Qualifying Widower QW\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Lines6a-5BoxesChecked[0].Lines6a-b[0].c1_04[0]','1') # 6a 1 \n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Lines6a-5BoxesChecked[0].Lines6a-b[0].c1_05[0]','1') # 6b 1 \n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].c1_06[0]','1') # first kid check\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].c1_07[0]','1') # second kid check\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].c1_08[0]','1') # third kid check\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].c1_09[0]','1') # fourth kid check\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Lines6a-5BoxesChecked[0]','1') # !!ERROR!!\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].f1_18[0]','First Kid') # first d name\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].f1_19[0]','S S N ') # first d ssn\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[1].f1_20[0]','1st Relation')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].f1_21[0]','Second Kid')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].f1_22[0]','S S N')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[2].f1_23[0]','2nd Relation')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].f1_24[0]','Third Kid')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].f1_25[0]','S S N')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[3].f1_26[0]','3rd Relation')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].f1_27[0]','Fourth Kid')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].f1_28[0]','S S N')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].Line6cTable[0].#subform[4].f1_29[0]','4th Relation')\n ,('topmostSubform[0].Page1[0].Lines6a-d[0].c1_10[0]','Yes') # More than 4 dependents \n ,('topmostSubform[0].Page1[0].c1_11[0]','Off') #??\n ,('topmostSubform[0].Page1[0].f1_30[0]','6a+b') # 6 sum boxes \n ,('topmostSubform[0].Page1[0].f1_31[0]','C1')\n ,('topmostSubform[0].Page1[0].f1_32[0]','C2')\n ,('topmostSubform[0].Page1[0].f1_33[0]','C3')\n ,('topmostSubform[0].Page1[0].f1_34[0]','34')\n ,('topmostSubform[0].Page1[0].f1_35[0]','7 $')\n ,('topmostSubform[0].Page1[0].f1_36[0]','7 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_37[0]','8a $')\n ,('topmostSubform[0].Page1[0].f1_38[0]','8a \sxA2')\n ,('topmostSubform[0].Page1[0].f1_39[0]','8b $')\n ,('topmostSubform[0].Page1[0].f1_40[0]','8b \sxA2')\n ,('topmostSubform[0].Page1[0].f1_41[0]','9a $')\n ,('topmostSubform[0].Page1[0].f1_42[0]','9a \sxA2')\n ,('topmostSubform[0].Page1[0].f1_43[0]','9b $')\n ,('topmostSubform[0].Page1[0].f1_44[0]','9b \sxA2')\n ,('topmostSubform[0].Page1[0].f1_45[0]','10 $')\n ,('topmostSubform[0].Page1[0].f1_46[0]','10 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_47[0]','11 $')\n ,('topmostSubform[0].Page1[0].f1_48[0]','11 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_49[0]','12 $')\n ,('topmostSubform[0].Page1[0].f1_50[0]','12 \sxA2')\n ,('topmostSubform[0].Page1[0].f1-_51[0]','13 $')\n ,('topmostSubform[0].Page1[0].f1_52[0]','13 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_53[0]','14 $')\n ,('topmostSubform[0].Page1[0].f1_54[0]','14 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_55[0]','15a $')\n ,('topmostSubform[0].Page1[0].f1_56[0]','15a \sxA2')\n ,('topmostSubform[0].Page1[0].f1_57[0]','15b $')\n ,('topmostSubform[0].Page1[0].f1_58[0]','15b \sxA2')\n ,('topmostSubform[0].Page1[0].f1_59[0]','16a $')\n ,('topmostSubform[0].Page1[0].f1_60[0]','16a \sxA2')\n ,('topmostSubform[0].Page1[0].f1_61[0]','16b $')\n ,('topmostSubform[0].Page1[0].f1_62[0]','16b \sxA2')\n ,('topmostSubform[0].Page1[0].f1_63[0]','17 $')\n ,('topmostSubform[0].Page1[0].f1_64[0]','17 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_65[0]','18 $')\n ,('topmostSubform[0].Page1[0].f1_66[0]','18 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_67[0]','19 $')\n ,('topmostSubform[0].Page1[0].f1_68[0]','19 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_69[0]','20a $')\n ,('topmostSubform[0].Page1[0].f1_70[0]','20a \sxA2')\n ,('topmostSubform[0].Page1[0].f1_71[0]','20b $')\n ,('topmostSubform[0].Page1[0].f1_72[0]','20b \sxA2')\n ,('topmostSubform[0].Page1[0].f1_73[0]','Other Income')\n ,('topmostSubform[0].Page1[0].f1_74[0]','21 $')\n ,('topmostSubform[0].Page1[0].f1_75[0]','22 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_76[0]','22 $')\n ,('topmostSubform[0].Page1[0].f1_77[0]','22 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_78[0]','23 $')\n ,('topmostSubform[0].Page1[0].f1_79[0]','23 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_80[0]','24 $')\n ,('topmostSubform[0].Page1[0].f1_81[0]','24 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_82[0]','25 $')\n ,('topmostSubform[0].Page1[0].f1_83[0]','25 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_84[0]','26 $')\n ,('topmostSubform[0].Page1[0].f1_85[0]','26 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_86[0]','27 $')\n ,('topmostSubform[0].Page1[0].f1_87[0]','27 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_88[0]','28 $')\n ,('topmostSubform[0].Page1[0].f1_89[0]','28 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_90[0]','29 $')\n ,('topmostSubform[0].Page1[0].f1_91[0]','29 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_92[0]','30 $')\n ,('topmostSubform[0].Page1[0].f1_93[0]','30 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_94[0]','S S N ')\n ,('topmostSubform[0].Page1[0].f1_95[0]','31a $')\n ,('topmostSubform[0].Page1[0].f1_96[0]','31a \sxA2')\n ,('topmostSubform[0].Page1[0].f1_97[0]','32 $')\n ,('topmostSubform[0].Page1[0].f1_98[0]','32 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_99[0]','33 $')\n ,('topmostSubform[0].Page1[0].f1_100[0]','33 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_101[0]','34 $')\n ,('topmostSubform[0].Page1[0].f1_102[0]','34 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_103[0]','35 $')\n ,('topmostSubform[0].Page1[0].f1_104[0]','35 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_105[0]','36 $')\n ,('topmostSubform[0].Page1[0].f1_106[0]','36 \sxA2')\n ,('topmostSubform[0].Page1[0].f1_107[0]','37 $')\n ,('topmostSubform[0].Page1[0].f1_108[0]','37 \sxA2') #bottom of page 1\n ]\nfdf = forge_fdf("",fields,[],[],[])\nfdf_file = open("data.fdf","wb")\nfdf_file.write(fdf)\nfdf_file.close()\n# remove old output files\nos.system('rm output.pdf')\n# run fill-in\nos.system('pdftk f1040.pdf fill_form data.fdf output output.pdf')\n# flatten ?\n# os.system('pdftk f1040.pdf fill_form data.fdf output output.pdf flatten)\n# remove old fdf file & view result\n# os.system('rm data.fdf && bin/6f1040.py && evince output.pdf')\n# os.system('pdftk f1040.pdf fill_form data.fdf output output.pdf flatten')\nos.system('evince output.pdf')\n\n\n}}}
'10 April 2017'\n\nWhat pyrs shoud do:\n\nimport pyrs\nprint(pyrs.1040)\n\nObviously one input to pyrs should be excell spreadsheet like (xls, xlxs, & odt). The trick here is to have a [[standard set of field references|]]. I believe that all field references should be based upon form#line#(optional instance).\n\nWhen the the prototype is instantiated...\nLotSaDoah=pyrs.1040.17.richy #maybe got syntax wrong.
Type the text for '10 April 2017'\n\n''S''tandard ''S''et of ''F''ield ''R''eferences\n\nThe key to this project is the deveopment of a Standard Set of\nField References based upon some kind of generally accepted naming\nconvention. These would become attirbutes of their respective form\nobjects, and would support arithmetic and data checking methods build into\nthe object.\n
'28 August 2017'\n\nIRS Enerprise Linuix \n\n* [[Enterprise LINUX Platform, GSS-42|https://www.irs.gov/pub/irs-pia/gss-42-pia.pdf]]\n* [[Modernized e-File (MeF) Overview|https://www.irs.gov/uac/modernized-e-file-overview]]\nMeF is a platform for electronically filing returns with the IRS. It provides SOA based web services that filers use to submit returns, and provides web applications for IRS users to work with the returns. MeF validates filed returns, determines their disposition, and interfaces with other IRS systems for downstream processing of the returns. IBM developed and enhanced MeF since 2001.\n[[SOURCE:|https://www.indeed.com/viewjob?jk=2d572cfb353300f2&q=zLinux&tk=1bojovq2c052u6j7&from=ja&alid=57ceb00d0cf26a8c5a87d533&utm_source=jobseeker_emails&utm_medium=email&utm_campaign=job_alerts&rgtk=1bojovq2c052u6j7]]\n\n\n
Type the text for '6 February 2018'\n\nCharities and non-profits can file the following forms electronically through an IRS Authorized e-File Provider.\n\n* [[Form 990|https://www.irs.gov/pub/irs-pdf/f990.pdf]], Return of Organization Exempt from Income Tax.\n* [[Form 990-EZ|https://www.irs.gov/pub/irs-pdf/f990ez.pdf]], Short Return of Organization Exempt from Income Tax.\n* [[Form 990-PF|https://www.irs.gov/pub/irs-pdf/f990pf.pdf]], Return of Private Foundation.\n* [[Form 990-N (e-Postcard)|https://www.irs.gov/charities-non-profits/annual-electronic-filing-requirement-for-small-exempt-organizations-form-990-n-e-postcard]]
Type the text for '9 April 2018'\n\nNote: Works fine for Fed forms. State forms are another matter...\n\n\n{{{\n#!/bin/bash\n# 2018-04-03 20:56:07\n# pflint gets the appropriate forms\nwget http://www.irs.gov/pub/irs-pdf/f1040.pdf\nwget http://www.irs.gov/pub/irs-pdf/i1040gi.pdf #contains tax table...\nwget http://www.irs.gov/pub/irs-pdf/f1040a.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sa.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sc.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sa.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040se.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1041sk1.pdf\n# State Forms\n# Note recommend adding date variable to each call sometime...\ndate="2016"\nwget http://www.state.vt.us/tax/pdf.word.excel/forms/income/2017/2016HI-144-web.pdf\nwget http://www.state.vt.us/tax/pdf.word.excel/forms/income/2017/2016HS-122-web.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/2017-IN-111.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/2017-IN-113.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/2017-IN-155.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/2018-HS-122.pdf\n}}}
Type the text for '19 April 2018'\npyrs.sh\n{{{\n#!/bin/bash\n# pflint 2018-02-01 08:28:51\n#\n# Tax Framework For use in flint finance\nversion="0.002" # May God have mercy on your soul...\n# 2018-04-18 07:35:50 2018-02-15 14:00:33\n#\n#* function help - Help function for template basic help goes here\nfunction help(){\nclear;\n# echo "This is the \s""$FUNCNAME"\s" function in "$0" version "$version; uroot #debug\ncat $0 | grep '^## ' | sed -e 's/##//'\n# echo "This is the help function"\n## *****DOCUMENTATION*****\n## You get this when you put in the wrong number or type of arguments...\n## The name of this program is pyrs.sh, block chain tic-tac-toe.\n## This is released under GPL I\n## The syntax is:\n## - pyrs.sh register <USER> -\n## registers the uidid & secrets\n## - pyrs.sh sane help - works with system variables\n## - pyrs.sh irinit - initializes the directory area\n## - pyrs.sh fdir - Shows the forms available.\n## - pyrs.sh pforms - prints the entire mailed form set.\n## - pyrs.sh 1form <FILENAME> - prints the form you want.\n## - pyrs.sh getforms [<YEAR>] - dowloads forms for optional year\n## - pyrs.sh play <USER> - Allows user to input\n## - pyrs.sh buall - Back up data\n## in all of these, Output is delivered to the screen...\n## *** NOTE *** This program need not be run as root!\n##\n## For structure information type "grep '^\s#\s*' pyrs.sh"\n## :^)\n## (C) P Flint, Barre Open Systems Institute Liscensed under GPLI\n##\n} # Test:\n#\n# *****Documentation Loop ends here the rest is function evaluation and dispatch ******\n#\nfunction dummy(){\n#* function dummy - Rename and fill stuff in between braces\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nuroot\n} # Test:\n#\nfunction pforms(){\n#* function pforms - saves current state of play\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n# dest="/dev/stdout"\ndest="gstate.csv"\n# echo "printing array"\n# 2018-04-17 12:54:13 pflint\n# prints all the forms and supportig docuements\nprinter="HP_LaserJet_1300"\nyear="2018"\necho "You are about to print your entire report set out to the "$printer" press <CTL> C to stop!"\nspause\n#\nlp -d $printer /home/flint/2018tax/filled_forms/f1040_2018-04-17.pdf\n# print w2's for feds\nlp -d $printer /home/flint/2018tax/filled_forms/2017_ally_w2.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/f1040sa_2018-04-16.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/f1040sb_2018-04-16.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/usoil_1099_paul.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/f1040sc_2018-04-17.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/f1040se_2018-04-16.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/K1_Paul_Revised.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/usoil_1099_paul.pdf\n# State forms\nlp -d $printer /home/flint/2018tax/filled_forms/IN-111_2018-04-17.pdf\n# print w2's for state\nlp -d $printer /home/flint/2018tax/filled_forms/2017_ally_w2.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/IN-113_2018-04-17.pdf\nlp -d $printer /home/flint/2018tax/filled_forms/2017-HS-122_2018-04-17.pdf\n\nspause\n\n} # Test:\n#\n#\nfunction sload(){\n#* function sload - loads saved state of play\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n# $var2\n# awk 'BEGIN { FS = "," } ; { print $1 }' $var2 |tr -d "\s""\ni=0\nfor h in 0 1 2\n do\n for v in 0 1 2\n do\n cell="R"$h"C"$v\n (( i++ )) #; echo $i\n # cval=${!cell}\n # echo -n "\s"$cval\s"," > $dest\n # out=$out"\s"$cval\s","\n # i=$(($h+$v)); echo $i\n cval=$(awk -v n="$i" 'BEGIN { FS = "," } ; { print $n }' $var2 ) # |tr -d "\s"")\n eval "$cell"=$cval\n # echo $cell" is "$cval\n done #v\ndone #h\n# awk 'BEGIN { FS = "," } ; { print $i }' $var2 |tr -d "\s""\necho "all done loading "$var2\nspause\n} # Test:\n#\nfunction getforms(){\n#* function getforms - Gets the forms you need from IRS and Vermont Tax office.\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\necho " eventually this will look for the appropriate year directory but not now."\necho "If you do not want this to happen, hit <CTL>C now!"\nspause\nwget http://www.irs.gov/pub/irs-pdf/f1040.pdf\nwget http://www.irs.gov/pub/irs-pdf/i1040gi.pdf #contains tax table...\nwget http://www.irs.gov/pub/irs-pdf/f1040a.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sa.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sc.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sa.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1041sk1.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sb.pdf\n# State Forms\n# Note recommend adding date variable to each call sometime...\ndate="2016"\n# Note recommend adding date variable to each call sometime...\ndate="2017"\n# 2017HI-144-web.pdf\n# wget http://www.state.vt.us/tax/pdf.word.excel/forms/income/2017/2017HI-144-web.pdf\n# wget http://www.state.vt.us/tax/pdf.word.excel/forms/income/2017/2017HS-122-web.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/2017-HS-122.pdf\n# HI 144 part of HS 122\n# wget http://tax.vermont.gov/sites/tax/files/documents/2017-HI-144.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/IN-111.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/IN-113.pdf\nwget http://tax.vermont.gov/sites/tax/files/documents/155.pdf\necho "end of "\s""$FUNCNAME"\s"\nspause\n} # Test:\n#\nfunction register(){\n#* function register <USER> registers the uidid & secrets\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nif [ $var2 ]; then echo "hey "$var2","; fi\necho "Need to get this running using:"\necho "http://docbox.flint.com:8081/visual.bash#Security%26Sanity"\n} # Test:\n#\nfunction simray(){\n#* function simray - Simple array method\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nuroot\n#\nR0C0="O"\nR0C1="O"\nR0C2="O"\n#\nR1C0=" "\nR1C1=" "\nR1C2="O"\n#\nR2C0=" "\nR2C1=" "\nR2C2="X"\n#\n} # Test:\n#\n#\nfunction buall(){\n#* function buall - Backs up the appropriate directories...\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n# backs up all tax data to ironwood\n# rsync -avrL /home/flint/2017tax flint@ironwood:./.\nrsync -avrL /home/flint/2018tax flint@twot:./.\necho " Unspeakable Fun For All!"\necho " "\necho " "\nspause\n} # Test:\n#\nfunction irinit(){\n#* function irinit - initiates directory structure\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nspause\n} # Test:\n#\n#\nfunction ginit(){\n#* function ginit - is a left over initializier for arrays\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nuroot\n} # Test:\n#\nfunction sane(){\n#* function sane [<FILENAME.ini>] - Make the program sane. Sets lists & edit directories, variables\n# echo "This is the \s""$FUNCNAME"\s" function in "$0" version "$version\n#debug echo "This is the \s""$FUNCNAME"\s" function in "$0" version "$version\n#debug spause\n# this update somehow needs to be documented each run.\n#D echo "This is var2: "\ntiddleurl="http://docbo/home/flint/ally/2017/Videos/./pf.inix.flint.com:8081/blockchain/"\nuser="the"\npass="END"\noutdir="outdir"\n# audio="Lets_All_go_to_the_Lobby!_Intermission_Bumper.wav"\n# fr=16\n# echo -e " TiddleURL is\st"$tiddleurl\n# echo -e " User is \st"$user\n# echo -e " PASS is \st"$pass\n#\nliston="user pass outdir=" #list of targets to search for\ncase "$var2" in\n "" ) ;; # got nothing, set variables silently\n\n "show" ) # Show version stuff and exit\n echo "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n ;;\n"check" ) # clear # describe current variables in play\n # echo -e "The base directory is: \st\st"$basedir\n # echo -e "The working directory is: \st"$directory\n # echo -e "The animation specification is: \st"$anispec\n # echo -e "The results are in directory: \st"$outdir\n # echo -e "The audio file is: \st"$audio\n # echo -e "The frame rate is: \st"$fr\n echo -e " TiddleURL is\st\st"$tiddleurl\n echo -e " User is \st\st"$user\n echo -e " PASS is \st\st"$pass\n echo -e " The local directory: \st"$outdir\n ;;\n "test" ) # clear # list out current variables in play\n i="1"\n echo "This is sane test"\n for name in $liston\n do\n echo -ne "$((i++)). \st"; grep "^$name=" $0\n done\n ;;\n "edit" ) # clear # Interactively edit list\n i="1"\n echo "This is sane edit"\n for name in $liston\n do\n echo -ne "$((i++)). \st"; grep "^$name=" $0\n done\n read -p "what number would you like to edit? " ans\n # echo $ans\n i="1"\n echo "Do not forget to type quotes in your replacement string"\n for name in $liston\n do\n # echo -ne "$((i++)). \st"; grep "^$name=" $0\n # if [ "$i" == "$ans" ]; then echo -e $i"\st "$name"="; fi\n if [ "$i" == "$ans" ];\n then\n # echo -n " ";grep "^$name=" $0\n #D\n target=$(grep "^$name=" $0)\n echo -n " ";echo $chnglng\n read -p" "$name"=" change;\n chnglng=$name"="$change;\n fi\n # echo $((i++)) > /dev/null\n ((i++))\n done\n #\n # echo "target is: "$target\n # echo "change is: "$chnglng\n # echo "sed -i 's:$target:$chnglng:g' $0"\n rm doit.sh 2>/dev/null; touch doit.sh; chmod +x doit.sh\n rm undo.sh 2>/dev/null; touch undo.sh; chmod +x undo.sh\n echo 'echo "Just changed the file"' >> doit.sh\n echo 'echo "Just changed the file back"' >> undo.sh\n echo "sed -i 's:$target:$chnglng:g' $0" >> doit.sh\n echo "sed -i 's:$chnglng:$target:g' $0" >> undo.sh\n # ./doit.sh\n #D\n ./doit.sh; rm -rf doit.sh\n ;;\n "save" ) # list out current variables in play\n clear\n i="1"\n echo "This is sane save"\n fname=$var3\n if [ -z "$var3" ];then echo "You must supply a name to save file in"; exit; fi\n rm -rf $fname 2>/dev/null; touch $fname\n for name in $liston\n do\n # echo -ne "$((i++)). \st"; grep "^$name=" $0 > test.ini\n outln="$((i++)). "$(grep "^$name=" $0)\n echo $outln >> $fname\n done\n ;;\n "load" ) clear # Saves variables to filename\n echo "This is the \s"load\s" case in \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n fname=$var3\n if [ -z "$var3" ];then echo "You must supply a file name to load"; exit; fi\n i="1"\n rm doit.sh 2>/dev/null; touch doit.sh; chmod +x doit.sh\n rm undo.sh 2>/dev/null; touch undo.sh; chmod +x undo.sh\n echo 'echo "Just changed the file"' >> doit.sh\n echo 'echo "Just changed the file back"' >> undo.sh\n cat $fname |while read line\n do\n prefix=$(echo $line |cut -d " " -f2 |cut -d "=" -f 1 ) #; echo -n $prefix"="\n change=$(echo $line |rev |cut -d "=" -f 1|rev) #; echo $change\n chnglng=$prefix"="$change #; echo -n $chnglng\n target=$(grep "^$prefix=" $0) #;echo -e "\st "$chnglng\n echo "sed -i 's:$target:$chnglng:g' $0" >> doit.sh\n echo "sed -i 's:$chnglng:$target:g' $0" >> undo.sh\n done\n ./doit.sh; #D rm -rf doit.sh 2>/dev/null\n ;;\n"xload" ) clear # list out current variables in play\n echo "This is the \s"load\s" case in \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n echo "The idea is to load the changes from an xls file"\n echo "Maybe this will be working in the next version sorry for now..."\n ;;\n"xsave" ) clear # list out current variables in play\n echo "This is the \s"load\s" case in \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n echo "The idea is to savve the changes to an xls file"\n echo "Maybe this will be working in the next version sorry for now..."\n ;;\n\n "ptrt" ) clear # Display help\n echo "This is the potrite function"\n #* check location of vital files and programs, sanity check\n echo "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n rm -rf need > /dev/null\n requirements="sphinx-common sphinx-doc python-sphinx git pv apache2 #D banana"\n # for prog in sphinx-common sphinx-doc python-sphinx git pv apache2 #D banana # programs you need put here\n for prog in $requirements # programs you need put here\n do\n # echo $prog\n # Better SOURCE:https://www.cyberciti.biz/faq/find-out-if-package-is-installed-in-linux/\n answer=$(echo $(dpkg-query -W -f='${Status} ${Version}\sn' $prog)| cut -d " " -f 3)\n # echo $answer\n if [ "$answer" != "installed" ];\n then\n echo $prog >> need\n #debug echo "Type \s"sudo apt-get install $prog\s" to fix this."\n #debug spause\n # exit 0\n fi\n done\n #D clear\n echo "Welcome to $0!"\n # uroot\n echo "Missing programs:"\n if [ -f need ];\n then\n echo " This program needs the following program(s) to be installed on this system."\n cat need |while read line; do echo -e \s\st" - " $line; done\n if [ "$(id -u)" != "0" ]; then\n echo "This script needs to run as root and you are not root" 1>&2\n echo "You want them installed if you are root they will install"\n echo "Leaving this function without installing anything"\n exit\n fi\n spause\n cat need |while read line; do\n echo "apt-get --yes install $line"\n apt-get --yes install $line\n done\n #D\n rm -rf need\n exit 0 # breaks you out of loop...\n else\n echo " * None * Looks like the pot's right, lets play!"\n fi\n #\n echo "end of check"\n ;;\n\n"help" ) clear # Display help\n echo "This is the supplemental help for the sane function"\n echo " (nothing) - Set variables silently"\n echo " show - Show version stuff"\n echo " test - List out current variables in play"\n echo " edit - Interactively edit list"\n echo " check - Check what all is going on"\n echo " load|save <filename>"\n echo " - load or save from supplied filename"\n echo " xload|xsave <filename.xls>"\n echo " - load from supplied spreadsheet"\n echo " ptrt - Check for dependencies"\n echo " help - Display this message"\n # Show the list:\n # cat ../bin/anibot.sh |grep \s"*\s"" "\s)\n ;;\nesac # anibot sane help\n} # Test:\n#\n#\nfunction play(){\n#* function play - play <USER> - Allows user to input\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n# uroot\n} # Test:\n#\n#\nfunction doit(){\n#* function doit - agregates steps\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n# uroot\n# simray\nsload # gstate.csv\nbuall\ngetforms\nscore\n# score\n#\n} # Test:\n#\n\n#\n######################################STANDARD AND MAYBE USEFUL FUNCTIONS BELOW\n#\n#\n#* function uroot - Checks to see if you are root\nfunction uroot(){\n# echo "Make sure only root can run script"\n# if [ "$(id -u)" = "0" ]; then # if you need to run a function as root\nif [ "$(id -u)" != "0" ]; then\n echo "This script needs to run as root and you are root, good" 1>&2\nelse\n echo "This script does not need to run as root, that OK as you are not root" 1>&2\nfi\n} # Test:~flint/bin/catapo.sh uroot\n#\n#* function spause - A simple tarry...\nfunction spause(){\n # -t sets time\n # read -t $pt -p "$*" ans\n read -p "Hit enter to continue..." ans\n echo $ans\n}\n#\n#*###################################### MAIN ENTRY POINT AND COMPOUND CASE\n#\n#* Evaluator Routine\n# Note the evaluator allows for many cases and error checking...\n#d ARGS=$# # carries the number of args into the functions...\n#d echo "Arg# = "$#" \s$1 = "$1" \s$2 = "$2" \s$3 = "$3" \s$ARGS = "$ARGS ;spause\n#\nif [ "$#" -eq "1" ] && [ "$1" = "sane" ]; then ARGS="1"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "sane" ]; then ARGS="2"; fi\nif [ "$#" -eq "3" ] && [ "$1" = "sane" ]; then ARGS="3"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "doit" ]; then ARGS="1"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "doit" ]; then ARGS="2"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "pforms" ]; then ARGS="1"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "sload" ]; then ARGS="2"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "register" ]; then ARGS="1"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "register" ]; then ARGS="2"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "ginit" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "irinit" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "score" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "play" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "simray" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "drawa" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "buall" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "shows" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "getforms" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "dummy" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "uroot" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "spause" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "help" ]; then ARGS="0"; fi\nif [ "$#" -eq "0" ]; then ARGS="0"; fi\n# this tests the evaluator...\n#d echo "Arg# = "$#" \s$1 = "$1" \s$2 = "$2" \s$3 = "$3" \s$ARGS = "$ARGS ;spause\n#d echo "catapo.sh v"$version" starts" ;spause()\n# typical cases, be careful to make your own...\ncase "$ARGS" in\n "0") clear; "help";; # got nothing, display help and go\n "1") $1 ;; # run the command\n "2") var2=$2; $1 ;; # run the command with an argument\n "3") var3=$3; var2=$2; $1 ;; # run the command with two arguments\n "4") var4=$4; var3=$3; var2=$2; $1 ;; # run the command with three arguments\n "5") prompt=$2; $1 ;; # run the command with a different argument\n "6") time=$3; prompt=$2; $1 ;; # run the command with two different arguments\n "7") defvbl; $1 ;; # run the command and default variables\n "8") var2=$2; $1 ;; # run the command and settle variables\n "9") var3=$3; var2=$2; $1 ;; # run the command and settle variables\n *) clear; "help"; exit 1;; # got nothing, display help and go\nesac # End main loop. To TEST:\n#\n# echo " ";\n#f echo "On "$(date +%F\s %r) $0" version "$version" stops"\n#debug\n#f echo "That's all folks!!"\n#\n#d rm -rf ss # removes super secret data file\n#* restore environment\n#f cd "$S"\n#f echo "ping"\n}}}
Type the text for '13 April 2022'\n\n{{{\n#! /bin/bash\nversion="0.021.076"\ntyear="2021"\n#\n# programs you need put here\nneed="wget"\n# need="git libsecret-tools pv " #D add "banana" to ntest startax\n# need="sphinx-common sphinx-doc python-sphinx git pv apache2"\n#\n#* function help - Help function for template basic help goes here\nfunction help(){\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version; uroot #deb\n#\ncat $0 | grep '^## ' | sed -e 's/##//'\n# echo "This is the help function"\n## *****DOCUMENTATION*****\n## You get this when you put in the wrong number or type of arguments...\n## The name of this program is startax.sh, an extention of unix find.\n## This is released under GPL I\n## The syntax is:\n## - startax.sh sane - Checks that you have the stuff you need.\n## - startax.sh stdirs - Set up tax directories for year\n## - startax.sh ptff - Populate Federal Tax Form\n## - startax.sh ptsf - Populate State Tax Forms\n## - startax.sh see2do - Shows you what you need to fix.\n## - startax.sh butax [repo]- Back up tax directories for year\n## - startax.sh restax[repo]- Restore tax directories for year\n## - startax.sh flink [file]- Symlinks [file] & [file].sh into $PATH\n## - startax.sh flunk [file]- Un-Symlinks [file] & [file].sh into $PATH\n##\n## in all of these, Output is delivered to the screen...\n## *** NOTE *** , except installing code in sane, commands need not be run as root\n##\n## For structure information type "grep '^\s#\s*' startax.sh"\n#\n} # Test: startax.sh help\n#\n#\nfunction stdirs(){\n#* function stdirs - Set up tax directories for year\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n# Note recommend adding date variable to each call sometime...\necho "set up directories for "$(echo $tyear)\nspause\nmkdir -p /home/flint/$(echo $tyear)tax/bin\nmkdir -p /home/flint/$(echo $tyear)tax/forms\nmkdir -p /home/flint/$(echo $tyear)tax/scans\nmkdir -p /home/flint/$(echo $tyear)tax/output\nmkdir -p /home/flint/$(echo $tyear)tax/obe\n# uroot\n} # Test: startax.sh stdirs\n#\n#\nfunction ptff(){\n#* function ptff - Populate Federal Tax Forms\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\necho "ready?"\nspause\ncd /home/flint/$(echo $tyear)tax/forms\npwd\nspause\nwget http://www.irs.gov/pub/irs-pdf/f1040.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040a.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sa.pdf\nwget http://www.irs.gov/pub/irs-pdf/f1040sc.pdf\nwget https://www.irs.gov/pub/irs-pdf/f8995a.pdf\nwget https://www.irs.gov/pub/irs-pdf/f1040s1.pdf\necho "end of list"\n# uroot\n} # Test: ptff.sh ptff\n#\nfunction ptsf(){\n#* function ptsf - Populate State Tax Forms\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n# State Forms\n#\n# 2020 = https://tax.vermont.gov/sites/tax/files/documents/Income-Booklet-2020.pdf\n# State Forms\n# Note recommend adding date variable to each call sometime...\n# tyear="2021"\n# wget https://tax.vermont.gov/sites/tax/files/documents/HS-144.pdf\n# HI-144 now included as part of HS-122\n# get HI-122-web.pdf\n# wget dhttps://tax.vermont.gov/sites/tax/files/documents/HS-122-2021.pdf\nwget https://tax.vermont.gov/sites/tax/files/documents/HS-122-$(echo $tyear).pdf\n# get IN-111-web.pdf\nwget https://tax.vermont.gov/sites/tax/files/documents/IN-111-$(echo $tyear).pdf\n# get IN-113-web.pdf\nwget https://tax.vermont.gov/sites/tax/files/documents/IN-113-$(echo $tyear).pdf\n# get instructions to IN-111\nwget https://tax.vermont.gov/sites/tax/files/documents/IN-111%20Instr-$(echo $tyear).pdf\n# get IN-112-web.pdf\nwget https://tax.vermont.gov/sites/tax/files/documents/IN-112-$(echo $tyear).pdf\n# get IN-119-web.pdf\nwget https://tax.vermont.gov/sites/tax/files/documents/IN-119-$(echo $tyear).pdf\n#\nwget https://tax.vermont.gov/sites/tax/files/documents/HI-144-$(echo $tyear).pdf\n# https://www.irs.gov/pub/irs-pdf/i1040tt.pdf#page=12\n#\n# uroot\n} # Test: ptsf.sh dummy\n#\n#\nfunction butax(){\n#* function butax - Back up tax directories for year\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nuroot\ncd /home/flint/2021tax\nrsync -avr flint@192.168.1.212:/home/flint/2021tax/* .\n#\n# or...\n# rsync -av -f"+ */" -f"- *" "$source" "$target"\n# E.G.\n# rsync -av -f"+ */" -f"- *" "2019tax" "2020tax"\n#\n# Sync the bin\n# rsync -avr /home/flint/2019tax/bin /home/flint/2020tax/bin\n#\n} # Test: startax.sh butax\n#\n#\nfunction restax(){\n#* function restax - Restore tax directories for year\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nuroot\n#\n# or...\n# rsync -av -f"+ */" -f"- *" "$source" "$target"\n# E.G.\n# rsync -av -f"+ */" -f"- *" "2019tax" "2020tax"\n#\n# Sync the bin\n# rsync -avr /home/flint/2019tax/bin /home/flint/2020tax/bin\n#\n\n} # Test: startax.sh restax\n#\n#*#####################################STANDARD AND MAYBE USEFUL FUNCTIONS BELOW\n#\nfunction dummy(){\n#* function dummy - Rename and fill stuff in between braces\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nuroot\n} # Test: startax.sh dummy\n#\nfunction briget(){\n#* function briget - Checks the braces in a visual bash function\nclear; echo "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n#\nob=$(echo -e '\sx7b')\ncb=$(echo -e '\sx7d')\n\nif [ "$ARGS" -eq "1" ]; then target="$0"; fi\nif [ "$ARGS" -eq "2" ]; then target=$var2; fi\n# echo $ARGS, $target; spause\ncat -n $target |while read line;\ndo echo $line\n# while $FUNCNAME != "briget"\n# do\n# if [[ "$line" == *$ob* ]] && [[ "$line" != "*'/*$ob/*'*" ]] ; then\nif [[ "$line" == *$ob* ]] ; then\n # echo "$ob" FSTART\n echo "$ob" FSTART\n i=$((i+1))\n # else\n # echo "$ob" was not found\n fi\n if [[ "$line" == *$cb* ]] ; then\n # if [[ "$line" == *$cb* ]] && [[ "$line" != "*'/*$cb/*'*" ]] ; then\n echo "$cb" FEND; PAIR=1\n i=$((i-1))\n fi\n# done # test name\n #\ndone\n# uroot\n} # Test: startax.sh dummy\n#\nfunction see2do(){\nclear\n#* function see2do - Notionally lists what you need to complete\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\n#\necho "Add the ability to establish populatable spreadsheet "\nspause\n} # Test: startax.sh see2do\n#\nfunction sane(){\n#* function sane - check location of vital files and programs, sanity check\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nrm -rf need > /dev/null\nfor prog in $need\ndo\n # echo $prog\n # Better SOURCE:https://www.cyberciti.biz/faq/find-out-if-package-is-installed-in-linux/\n answer=$(echo $(dpkg-query -W -f='${Status} ${Version}\sn' $prog)| cut -d " " -f 3)\n # echo $answer\n if [ "$answer" != "installed" ];\n then\n echo $prog >> need\n #debug echo "Type \s"sudo apt-get install $prog\s" to fix this."\n #debug spause\n # exit 0\n fi\ndone\n#D clear\necho "Welcome to $0!"\n# uroot\necho "Missing programs:"\n if [ -f need ];\n then\n echo " This program needs the following program(s) to be installed on this system."\n cat need |while read line; do echo -e \s\st" - " $line; done\n if [ "$(id -u)" != "0" ]; then\n echo "This script needs to run as root and you are not root" 1>&2\n echo "You want them installed if you are root they will install"\n echo "Leaving this function without installing anything"\n exit\n fi\n spause\n cat need |while read line; do\n echo "apt-get --yes install $line"\n apt-get --yes install $line\n done\n #D\n rm -rf need\n exit 0 # breaks you out of loop...\n else\n echo " * None * Looks like the pot's right, lets play!"\n fi\n#\necho "end of check"\n} # Test: startax.sh sane\n#\n#\nfunction uroot(){\n#* function uroot - Checks to see if you are root\n# echo "Make sure only root can run script"\nif [ "$(id -u)" != "0" ]; then\n echo "This script does not need to run as root but that's OK as you are not root" 1>&2\nelse\n # echo " * None * Looks like the pot's right, lets play!"\n echo " You are ROOT so get outa root"\nfi\n} # Test:~flint/bin/mtoc.sh uroot\n#\nfunction spause(){\n#* function spause - A simple tarry...\n # -t sets time\n # read -t $pt -p "$*" ans\n read -p "Hit enter to continue..." ans\n echo $ans\n}\n#/home/flint/2021tax\nfunction flink(){\n#* function flink - Adds adds two symlinks to public\n# This function, which runs as root, will make the program,\n# which must end in sh executable and then\n# then the function adds two symlinks to the first element\n# of the $PATH variable linking the argument and the argument suffixed with "sh"\n# both linked to the second script element (hopefully /usr/local/bin).\n# echo "into root"\n# sudo bash\n# echo "outa root"\nuroot\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nHMDIR=$(pwd) # echo $HMDIR\nFNAME=$var2\necho $FNAME\nspause\n# echo $PWD | cut -d ":" -f 3\nLKDIR="/usr/local/sbin"\n# echo $LKDIR\necho "removing "$LKDIR"/"$FNAME; rm $LKDIR/$FNAME 2>/dev/null\n# spause\ncd $HMDIR\n# pwd\n#\nchmod +x $FNAME 2>/dev/null\n# echo $PATH\n# ls -alt $HMDIRs\ncd $LKDIR\n# pwd\n# echo "before link"\n# spause\nsudo ln -s $HMDIR/$FNAME .\n# $FNAME\nsudo ls -alt $LKDIR/$FNAME\ncd ~ #;echo -n "keep in mind you are in your home directory now..."\n# $FNAME\n# spause\n} # Test: startax.sh flink\n#\n#\nfunction flunk(){\n#* function flunk - Un-Symlinks [file] & [file].sh into $PATH\necho "This is the \s""$FUNCNAME"\s" function in "$0" version "$version #debug\nuroot\nHMDIR=$(pwd) #; echo $HMDIR\nFNAME=$var2\necho $FNAME\nLKDIR="/usr/local/sbin"\necho "rm $LKDIR/$FNAME -Do This?"\nspause\nsudo rm $LKDIR/$FNAME\n} # Test: samuf.sh flunk\n#\n#*###################################### MAIN ENTRY POINT AND COMPOUND CASE\n#\n#* Evaluator Routine\n# Note the evaluator allows for many cases and error checking...\n#d ARGS=$# # carries the number of args into the functions...\n#D echo $#" "$1" "$2" "$3" "$ARGS ;spause\nif [ "$#" -eq "1" ] && [ "$1" = "flink" ]; then ARGS="1"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "flink" ]; then ARGS="8"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "see2do" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "vbzld" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "briget" ]; then ARGS="1"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "briget" ]; then ARGS="2"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "dummy" ]; then ARGS="1"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "flunk" ]; then ARGS="2"; fi\nif [ "$#" -eq "2" ] && [ "$1" = "butax" ]; then ARGS="2"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "uroot" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "spause" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "sane" ]; then ARGS="1"; fi\nif [ "$#" -eq "1" ] && [ "$1" = "help" ]; then ARGS="9"; fi\n# this tests the evaluator...\n#D echo $#" "$1" "$2" "$3" "$ARGS ;spause\n#\n#* Dispatcher Routing\n# typical cases, be careful to make your own...\ncase "$ARGS" in\n "0") clear; $1="help"; exit 1;; # got nothing, display help and go\n "1") $1 ;; # run the command\n "2") var2=$2; $1 ;; # run the command with an argument\n "3") var3=$3; var2=$2; $1 ;; # run the command with two arguments\n "4") var4=$4; var3=$3; var2=$2; $1 ;; # run the command with three arguments\n "5") prompt=$2; $1 ;; # run the command with a different argument\n "6") time=$3; prompt=$2; $1 ;; # run the command with two different arguments\n "7") defvbl; $1 ;; # run the command and default variables\n "8") var2=$0; $1 ;; # run the command and settle variables\n "9") var3=$3; var2=$2; $1 ;; # run the command and settle variables\n *) clear; cat $0 | grep '^## '| sed -e 's/##//'; exit 1;; # Anything else run help and exit...\nesac # End main loop. TEST: ?fill in test?\n#\n# echo " "; echo "On "$(date +%F\s %r) $0" version "$version" stops"\n#debug echo "That's all folks!!"\n#\n#* restore environment cd "$S"\n\n}}}