irs forms and this years tax solver

This commit is contained in:
2025-08-01 11:30:51 -05:00
parent 9753bc9efb
commit 6256036a25
270 changed files with 54638 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,148 @@
Open Tax Solver - Package
--------------------------
April 28, 2025 v22.07 - For Tax-Year 2024.
See project homepage: http://opentaxsolver.sourceforge.net/
OpenTaxSolver (OTS) is a set of programs and templates for helping you
fill out your income tax forms. It performs the tedious arithmetic.
OTS is intended to assist those who normally prepare their tax forms
themselves, and who generally know on which lines to enter their numbers.
It is meant to be used in combination with the instruction booklet
corresponding to a given form.
This package contains programs and templates for:
- US-1040 - which also does the Schedules A, B, D, and forms 8949.
- Schedule C for US-1040.
- State Income Taxes for Ohio, New Jersey, Virginia, Pennsylvania,
Massachusetts, North Carolina, and California taxes updated for
the 2024 Tax-Year.
Also contains an Automatic PDF Form-Fillout function:
- Supports all Federal Forms and State Forms.
Saves time by filling out many of the numbers.
You may still need to enter some information or check boxes
that are not handled by OTS.
Tested to work properly with many PDF viewers.
- You can edit your forms with Libre-Office.
-----------------------------------------------------------
--- This package contains executables for MS-Windows. ---
-----------------------------------------------------------
(Compiled on MS-Windows-11)
(Works on MS-Windows 10 and 11. )
History:
* v22.07 (4/28/2025) - Improved result-rounding, now controlable from
the OTS GUI, or directly from individual files, which only affects PDF
Form fill-outs, and works uniformly for all forms. In Fed Form 1040,
added switch for Qualified Charitable Distributions (QCD) after line 4b.
Fixed Fed-1040 tax-breaakpoint for Head-of-Household.
In NY State Form, added special limit for MFJ on line 29.
Fixes to Sched-SE, added Minister checkbox, and now prints line 3.
Provided visibility of STA_VAGI in Virginia PDF form.
* v22.06 (3/15/2025) - Switched formatting of Fed-1040, and related
Federal Forms to Round-to-Whole dollars. Added ability to fill-in
PIN numbers in Fed-1040. Added ability to check request for Health
info on the CA-540 PDF Form. Updated the Form 8829 template.
Added initial version of Oregon State tax form program.
* v22.05 (3/6/2025) - Promoted the new MI State form to front GUI panel.
Fixed the new MI State form line 34. In OH State form's optional
information section, added second address line, and county-code.
In AZ State form, now sets line 29a limit according to the number
of tax-payers. Removed quotes around Dependent names in Form-1040
output to ease parsing in new form programs using 1040 output.
* v22.04 (2/28/2025) - The PDF fill-out program can now suppress
negative signs for form-lines enclosed in parenthesis, which
are expected to be negative (by accounting notation).
As for example on Schedule-D, lines 14 and 21.
Added Fed-1040 Sched-D lines 1a and 8a, for those who receive
Forms 1099-B on some transactions.
* v22.03 (2/12/2025) - Fixed stray comma in Fed 1040 and 2210 tax-table.
Added click-able instructions for forms 8602, 8812, 8895, 8959, and 8960.
Added option in GUI to set a custom save-directory instead of the default,
Invoke ots_gui with command-line option '-help' to see the option(s).
* v22.02 (2/6/2025) - Added initial preliminary version of Michigan
State tax form.
- Added options to Run_taxsolve_GUI for enlarging window and text
for Hi-DPI screens. (Invoke Run_taxsolve_GUI with '-large'.)
- Added entries for fed-1040 to enter refund direct deposit info.
* v22.01 (1/30/2025) - Added the NY State PDF form.
- Updated Federal Form F2210, and CA-540 State programs.
* v22.00 (1/27/2025) - Preliminary release for Tax-Year 2024.
- Includes updates for many of the run-able forms.
- Although the tax-program for NY State has been updated, we are
still waiting for Dept of Taxation to post NY's PDF Form.
- Please check back for more updates.
Usage:
Invoke by running: Run_taxsolve_GUI
(Located in the top directory.)
For Auto-Fillout of PDF Forms, click the "Print" button, and select
"Automatically Fill-out PDF Tax-Form", then click "Print".
You can set your preferred PDF viewer by the (Set PDF Viewer) button,
or by setting the environment variable: PDF_VIEWER
The Auto-Fillout feature is tested to work properly with the PDF
viewers "Google-Chrome", "Firefox", "LibreOffice", "Atril", "Xpdf",
"Safari", "IE", "Edge", and "Acrobat Reader".
You can edit your filled-out PDF forms with LibreOffice.
General:
Example tax-data files and blank starting templates are included under
the "tax_form_files" directory. For each filer, save filled-out
template to a new name, such as "fed1040_2024.txt". After filling-in the
lines, then run the tax solver on it. From the GUI, this is done by
pressing "Compute Tax" button.
Or solvers can be run from the command-line, for example, as:
bin/taxsolve_usfed1040_2024 Fed1040_2024.txt
Where "Fed1040_2024.txt" is the name of -your- tax-data file, which
you can edit with your favorite text-editor to fill it in or print
it out. Output results are saved to "..._out.txt" files
(eg. Fed1040_2024_out.txt), and can be printed out directly too.
For updates and further information, see:
http://sourceforge.net/projects/opentaxsolver/
Documentation:
http://opentaxsolver.sourceforge.net/
Re-compiling:
Unix/Linux/Mac:
Pre-compiled executables for Unix/Linux are normally in bin directory.
However to build the binaries in the bin/ directory:
cd OpenTaxSolver2024_22.xx ( cd into top directory. )
rm ./bin/* Run_taxsolve_GUI ( Clears executables. )
src/Build_taxsolve_packages.sh ( Creates executables. )
MS-Windows:
Pre-compiled executables are normally in bin directory.
For compiling OTS on MSwindows, MinGW with Msys is recommended.
From Msys terminal window:
cd OpenTaxSolver2024_18.xx ( cd into top directory. )
rm ./bin/* Run_taxsolve_GUI.exe ( Clears executables. )
src/Build_taxsolve_packages.sh ( Creates executables. )
Directory Structure:
OpenTaxSolver2024 ...................................... 25.246-KB
|-- src ................................................. 217.555-KB
| |-- Gui_gtk ......................................... 141.807-KB
|
|-- tax_form_files ...................................... 49.152-KB
| |-- VA_760 .......................................... 11.038-KB
| |-- US_1040_Sched_C ................................. 12.803-KB
| |-- US_1040 ......................................... 21.351-KB
| |-- PA_40 ........................................... 11.562-KB
| |-- OH_1040 ......................................... 14.860-KB
| |-- NY_IT201 ........................................ 14.686-KB
| |-- NJ_1040 ......................................... 14.124-KB
| |-- NC_400 .......................................... 12.251-KB
| |-- MA_1 ............................................ 13.844-KB
| |-- CA_540 .......................................... 13.166-KB
|
|-- bin ................................................. 351.033-KB
16 Directories.
---------------------------------------------------------------------------------
Aston Roberts (aston_roberts@yahoo.com)
File Organization and Makefiles by: Krish Krothapalli, David Masterson, & Jesse Becker
Programs contain contributions by many others. See OTS credits webpage.

View File

@@ -0,0 +1,3 @@
set GTK_THEME=Adwaita:dark
set path=bin;%PATH%
ots_gui3.exe

View File

@@ -0,0 +1 @@
Run_taxsolve_GUI.exe -large

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,14 @@
#!/bin/sh
TAXSOLVEDIR=${PWD}/`dirname $0`
if [ ! -d ${TAXSOLVEDIR}/../bin ] ; then
mkdir ${TAXSOLVEDIR}/../bin
fi
cd ${TAXSOLVEDIR}/Gui_gtk/
make
cd "${TAXSOLVEDIR}"
make

View File

@@ -0,0 +1,13 @@
OTS_GUI2.c - This directory contains source code for a new alternate version
of the Open Tax Solver (OTS) Graphical User Interface (GUI). This version
is based on the GIMP Tool Kit (Gtk) widget library. Gtk supports modern
platforms from a single source code program with a modern look and feel.
The environment variable "PDF_VIEWER" can be used to set which PDF-Viewer
the the OTS-GUI will use, as well as the path to it.
OTS_GUI3.c - Upcoming version for the OTS-GUI for compilation under the
newer Gtk-3 graphics library. Included for initial testing and development.
To compile:
make -f make_gtk3

View File

@@ -0,0 +1,24 @@
/* */
/* GNU Public License - GPL: */
/* This program is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU General Public License as */
/* published by the Free Software Foundation; either version 2 of the */
/* License, or (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */
/* General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA */
/* 02111-1307 USA. */
/* */
void gtk_menu_item_set_label( void *menu_item, char *word ) {;}
int cairo_format_stride_for_width( int x, int wdth )
{
return 4 * wdth; // + wdth % 4;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,355 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#define GtkUtils_Version 1.0
/* ------------- Text-Label Routines ----------------- */
GtkWidget *make_label( GtkWidget *panel, int xpos, int ypos, const char *text );
void modify_label( GtkWidget *label, const char *newtext );
void set_widget_color( GtkWidget *label, const char *color_value ); /* Specify colors as: "#rrggbb" in hex 00-ff. */
void set_background_color( GtkWidget *label, const char *color_value );
GtkWidget *make_sized_label( GtkWidget *panel, int xpos, int ypos, const char *text, float fontsize ); /* Default = 10.0. */
/* ------------- Button Routines ----------------- */
GtkWidget *make_button( GtkWidget *panel, int xpos, int ypos, const char *label, void callback(GtkWidget *, void *), void *data );
GtkWidget *make_button_wicon( GtkWidget *panel, int xpos, int ypos, const char **icon, void callback(GtkWidget *, void *), void *data );
/* Be sure to somewhere set: g_object_set( gtk_settings_get_default(), "gtk-button-images", TRUE, NULL); */
/* To use, "#include" an xpm image file of icon. Make variable-name at top of XPM file match "icon" name */
/* called in this function. (You call it with that variable name.) */
/* ------------- Radio Button Routines ----------------- */
GtkWidget *make_radio_button( GtkWidget *panel, GtkWidget *group, int xpos, int ypos, const char *label,
void callback(GtkWidget *, void *), const void *data );
void set_radio_button( GtkWidget *radio_button );
/* ------------- Toggle Button Routines ----------------- */
GtkWidget *make_toggle_button( GtkWidget *panel, int xpos, int ypos, const char *label, int state, void callback(GtkWidget *, void *), void *data );
void set_toggle_button( GtkWidget *tog_button, int state );
/* ------------- Form-Box (Text-Entry Box) Routines ----------------- */
GtkEntry *make_formbox( GtkWidget *panel, int xpos, int ypos, int nchars_wide, const char *text, int maxlen,
void callback(GtkWidget *, void *), void *data );
GtkEntry *make_formbox_bypix( GtkWidget *panel, int xpos, int ypos, int npix_wide, const char *text, int maxlen,
void callback(GtkWidget *, void *), void *data );
void modify_formbox( GtkEntry *formbox, const char *text );
char *get_formbox( GtkEntry *formbox ); /* Returns string poiner, which must NOT be freed. */
void get_formbox_text( GtkEntry *formbox, char *rtrnstrng, int maxlen );
/*--- Example Usage:
GtkEntry *formbox1;
SetFormBox_Routine()
{
int nchars;
nchars = 0.109 * frmbx_wdth_pix; // Good rule of thumb.
formbox1 = make_formbox( panel, ypos, xpos, nchars, "0", 1024, action_routine, 0 );
}
Retreival_routine()
{
char *word;
word = get_formbox( formbox1 );
printf("Text = '%s'\n", word );
}
---*/
/* ------------- GTK Text-Edit Box Routines ----------------- */ /* Multi-line text-edit widget. */
GtkTextView *make_text_edit_box( GtkWidget *panel, int xpos, int ypos, int width, int height, const char *text );
void modify_text_edit_box( GtkTextView *textview, const char *text );
void get_text_edit_box( GtkTextView *textview, char *rtrnstrng, int maxlen );
/*--- Example Usage:
GtkTextView *txtedt;
MakeTextEditWindow_Routine()
{
txtedt = make_text_edit_box( panel, 2, 2, 200, 100, "Initial text\n is here." );
}
Retreival_routine()
{
char word[1000];
get_text_edit_box( txtedt, word, 1000 );
printf("Text = '%s'\n", word );
}
---*/
/* ------------- Menu Routines ----------------- */
GtkWidget *make_menu( GtkWidget *tool_bar, const char *label ); /* For use on automatically spaced menu-bars. */
GtkWidget *make_menu_button( GtkWidget *panel, int xpos, int ypos, const char *label ); /* For use anywhere on a window. */
GtkWidget *add_menu_item( GtkWidget *menu, const char *label, void callback(GtkWidget *, void *), void *data );
GtkWidget *add_submenu( GtkWidget *menu, const char *label );
void modify_menu_label( GtkWidget *menu_label, const char *newtext ); /* A 'menu_label' is what is returned by add_menu_item(). */
/* ------------- GTK Selection List Routines ----------------- */
GtkTreeStore *make_selection_list( GtkWidget *panel, int xpos, int ypos, int width, int height, const char *column_titles,
void callback(GtkWidget *, void *), void dclick_callback(GtkWidget *, void *), void *data );
void append_selection_list( GtkTreeStore *list, GtkTreeIter *iter, const char *item );
char *get_selection_from_list( GtkWidget *selection );
/* Example Usage:
{
GtkTreeStore *mylist;
GtkTreeIter iter;
mylist = make_selection_list( panel, 10, 20, 80, 100, myfunction, 0, 0 );
for (j=0; j<10; j++)
append_selection_list( mylist, &iter, text[j] );
}
void myfunction( GtkWidget *wdg, void *data )
{
char *text;
text = get_selection_from_list( wdg );
printf("Selected: '%s'\n", text );
}
*/
GtkTreeStore *make_multicolumn_selection_list( GtkWidget *panel, int xpos, int ypos, int width, int height,
int ncols, const char *column_titles[],
void callback(GtkWidget *, void *), void dclick_callback(GtkWidget *, void *), void *data );
void add_multicolumn_selection_item( GtkTreeStore *selst, int ncols, char *items[] );
/* Example Usage:
char *MY_Selected_item=0, *MY_Selected_list=0;
int MY_column_to_get=2; // --- Set this to get the column you need.
void selected_item_by_column( GtkWidget *wdg, void *data )
{
GtkTreeIter iter;
GtkTreeModel *model;
if (!done_init) return;
if (gtk_tree_selection_get_selected( GTK_TREE_SELECTION(wdg), &model, &iter ))
{
if (MY_Selected_item != 0) free( MY_Selected_item );
gtk_tree_model_get( model, &iter, MY_column_to_get, &MY_Selected_item, -1 );
MY_Selected_list = data;
printf("Column %d = %s, for %s\n", MY_column_to_get, MY_Selected_item, MY_Selected_list );
}
}
void dclicked_item( GtkWidget *wdg, void *data )
{
printf("Dclicked '%s', for %s.\n", MY_Selected_item, MY_Selected_list );
}
...
GtkTreeStore *selst;
const char *headings[]={ "T1", "D2", "P3" };
char *items[];
selst = make_multicolumn_selection_list( winpanel, 200, 30, 180, 150, 3, headings,
selected_item, dclicked_item, "chartA" );
items[0] = "Fries"; items[1] = "Shake"; items[2] = "Cola";
add_multicolumn_selection_item( selst, 3, iems );
items[0] = "Coffee"; items[1] = "Donut"; items[2] = "Beer";
add_multicolumn_selection_item( selst, 3, iems );
...
*/
/* ------------- GTK FormBoxWithSuggestor ------------------- */
GtkSpinButton *make_FormBoxWithSuggestor( GtkWidget *panel, int xpos, int ypos, float min, float initval,
float max, float step, int ndigits );
float get_FormBoxWithSuggestor_Value( GtkSpinButton *spinbox );
void set_FormBoxWithSuggestor_value( GtkSpinButton *spinbox, float value );
/*
make_combobox - Creates a kind of text-box that the user cannot type into,
but has a selector on the right, from which the user can pick any alphanumeric setting.
*/
GtkWidget *make_combobox( GtkWidget *panel, int xpos, int ypos, int width );
void add_combo_suggestion( GtkWidget *combobox, char *itemtext );
void select_combo_suggestion( GtkWidget *combobox, int item );
/* Example to read value from: frmbx1 = make_combobox( panel, x, y, 30 );
word = gtk_combo_box_text_get_active_text( (GtkComboBoxText *)frmbx1 );
*/
/*
make_formbox_wcombo - Like "make_combobox" above, but users can also type their
own values into the text box, as well as select them.
*/
GtkWidget *make_formbox_wcombo( GtkWidget *panel, int xpos, int ypos, int width );
void add_form_suggestion( GtkWidget *combobox, char *text );
/* Example to read value from: frmbx2 = make_formbox_wcombo( panel, x, y, 30 );
word = strdup( gtk_entry_get_text( GTK_ENTRY( gtk_bin_get_child( GTK_BIN( frmbx2 ) ) ) ) );
*/
/* ------------- Separator Routines ----------------- */
GtkWidget *make_vseparator( GtkWidget *panel, int xpos, int y1, int y2 );
GtkWidget *make_hseparator( GtkWidget *panel, int x1, int x2, int ypos );
GtkWidget *make_rectangular_separator( GtkWidget *panel, int x1, int y1, int x2, int y2 );
/* ------------- GTK Slider Routines ----------------- */
GtkWidget *make_slider( GtkWidget *panel, int xpos, int ypos, int size, char orien, double min, double initval, double max,
void callback(GtkWidget *, void *), void *data );
/*--- Example Usage:
void slide_adj( GtkWidget *widget, gpointer data )
{
double x;
x = gtk_range_get_value( GTK_RANGE(widget) );
printf("Slider Adjusted '%g'\n", x );
}
...
make_slider( panel, xpos, ypos, size, 'h', minv, initval, maxval, slide_adj, 0 );
---*/
/* ------------- Sub-Panel Frames ----------------- */
GtkWidget *make_tabbed_panel_frame( GtkWidget *panel, int xpos, int ypos );
GtkWidget *add_tabbed_panel( GtkWidget *tabbed_panel, int width, int height, char *tab_name );
GtkWidget *make_framed_panel( GtkWidget *panel, int xpos, int ypos, int width, int height, char *frame_name );
/* ------------- Sub-Window or (Detachable) Pop-up Window Making Routines ----------------- */
GtkWidget *make_window( int width, int height, const char *title, GtkWidget *(*winptr) );
/* Create new window and register user's own killed callback. It must return 0. */
GtkWidget *make_window_wkill( int width, int height, const char *title, GtkWidget *(*winptr), int callback(GtkWidget *, void *) );
/* Like above, but set horz/vert-scroll to 1 or 0, to enable or disable respective scroll. */
GtkWidget *make_scrolled_window_wkill( int width, int height, const char *title, GtkWidget *(*winptr),
int horzscroll, int vertscroll, int callback(GtkWidget *, void *) );
/* Initial call to set up outermost window. */
GtkWidget *init_top_outer_window( int *argc, char ***argv, int winwidth, int winhght, const char *title,
int horzscroll, int vertscroll );
void close_any_window( GtkWidget *widget, gpointer data );
int killed_any_window( GtkWidget *widget, GdkEvent *event, gpointer data );
void place_window_center();
void place_window_atmouse();
void show_wind( GtkWidget *wind );
/**** ---- Example window making function. ----
GtkWidget *win1=0;
void respond_to_some_event( GtkWidget *widget, gpointer data )
{
GtkWidget *panel;
panel = make_window( 400, 150, "Test Win", &win1 );
---- Place all window items here .... ----
make_button( panel, 20, 20, " OK ", close_any_window, &win1 );
show_wind( win1 );
}
****/
/* ------------- GTK Image Routines ----------------- */
/*------------------------------------------------------------------------------
attach_image_from_file - Reads image from jpg/gif file, and places on panel
at specified position and size. Returns 0 on error, else returns widget.
------------------------------------------------------------------------------*/
GtkWidget *attach_image_from_file( GtkWidget *panel, char *imagefilename, int xpos, int ypos, int width, int height );
/*------------------------------------------------------------------------------*/
/* place_image - This routine displays an image on the named panel, at the */
/* specified (x,y) position. Image pixels: image_width x image_height */
/* Allocate and initialize image as: */
/* imagedata = (unsigned char *)malloc( 4 * image_pixels ); */
/* imagedata[ 4 * (image_width * row + col) ] = Blue; */
/* imagedata[ 4 * (image_width * row + col) + 1 ] = Green; */
/* imagedata[ 4 * (image_width * row + col) + 2 ] = Red; */
/* Where values are 0=dark to 255=bright. */
/* You can de-allocate or re-use image array after calling this function. */
/*------------------------------------------------------------------------------*/
void place_image( GtkWidget *window, int image_width, int image_height, int pos_x, int pos_y, unsigned char *imagedata );
/* Convert Data to Image (cdti) - Retreives image-data from pre-initialized arrays stored within program. */
/* (The pre-stored array text can be created from the "data2code.c" utility.) */
unsigned char *cdti_convert_data_to_image( char *data, int dimension, int *imgwd, int *imght );
/* ------------- Tool Tips / Hover Notes ----------------- */
GtkTooltips *add_tool_tip( GtkWidget *wdg, const char *text ); /* Adds tool-tip to button, etc. */
/* ------------- File Browser ----------------- */
GtkWidget *file_browser_popup( const char *dir, const char *text, void callback(GtkWidget *, void *) );
/* Example usage:
void receive_filename( GtkWidget *wdg, void *fs )
{
char *yourfilename=0;
yourfilename = strdup( gtk_file_selection_get_filename( (GtkFileSelection *)fs ) );
gtk_widget_destroy( fs ); -- Closes file-browser window. --
printf("Absolute path = '%s'\n", yourfilename );
free( yourfilename );
}
file_browser_popup( ".", "Select File", receive_filename );
*/
/* ------------- Progress Bar ----------------- */
void adjust_progress_bar( GtkWidget *wdg, double fraction );
GtkWidget *make_progress_bar( GtkWidget *panel, int xpos, int ypos, int width, char *text );
/* ------------- General Stuff ----------------- */
void UpdateCheck(); /* Process any pending window events. */
void strcpy_safe( char *dst, const char *src, int maxlen );
double Report_Time(); /* Reports time in seconds, accurate to millisecs, for checking time differences. */
void Sleep_seconds( float dt_seconds );
/* gtk_widget_destroy( wdg ); */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,357 @@
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>
#define GtkUtils_Version 3.0
/* ------------- Text-Label Routines ----------------- */
GtkWidget *make_label( GtkWidget *panel, int xpos, int ypos, const char *text );
void modify_label( GtkWidget *label, const char *newtext );
void set_label_color( GtkWidget *label, const char *color_value ); /* Specify colors as: "#rrggbb" in hex 00-ff. */
void set_label_fgbg_color( GtkWidget *label, const char *fgrnd, const char *bkgrnd );
GtkWidget *make_sized_label( GtkWidget *panel, int xpos, int ypos, const char *text, float fontsize ); /* Default = 10.0. */
/* ------------- Button Routines ----------------- */
GtkWidget *make_button( GtkWidget *panel, int xpos, int ypos, const char *label, void callback(GtkWidget *, void *), void *data );
GtkWidget *make_button_wicon( GtkWidget *panel, int xpos, int ypos, const char **icon, void callback(GtkWidget *, void *), void *data );
/* Be sure to somewhere set: g_object_set( gtk_settings_get_default(), "gtk-button-images", TRUE, NULL); */
/* To use, "#include" an xpm image file of icon. Make variable-name at top of XPM file match "icon" name */
/* called in this function. (You call it with that variable name.) */
/* ------------- Radio Button Routines ----------------- */
GtkWidget *make_radio_button( GtkWidget *panel, GtkWidget *group, int xpos, int ypos, const char *label,
void callback(GtkWidget *, void *), const void *data );
void set_radio_button( GtkWidget *radio_button );
/* ------------- Toggle Button Routines ----------------- */
GtkWidget *make_toggle_button( GtkWidget *panel, int xpos, int ypos, const char *label, int state, void callback(GtkWidget *, void *), void *data );
void set_toggle_button( GtkWidget *tog_button, int state );
/* ------------- Form-Box (Text-Entry Box) Routines ----------------- */
GtkEntry *make_formbox( GtkWidget *panel, int xpos, int ypos, int nchars_wide, const char *text, int maxlen,
void callback(GtkWidget *, void *), void *data );
GtkEntry *make_formbox_bypix( GtkWidget *panel, int xpos, int ypos, int npix_wide, const char *text, int maxlen,
void callback(GtkWidget *, void *), void *data );
void modify_formbox( GtkEntry *formbox, const char *text );
char *get_formbox( GtkEntry *formbox ); /* Returns string poiner, which must NOT be freed. */
void get_formbox_text( GtkEntry *formbox, char *rtrnstrng, int maxlen );
/*--- Example Usage:
GtkEntry *formbox1;
SetFormBox_Routine()
{
int nchars;
nchars = 0.109 * frmbx_wdth_pix; // Good rule of thumb.
formbox1 = make_formbox( panel, ypos, xpos, nchars, "0", 1024, action_routine, 0 );
}
Retreival_routine()
{
char *word;
word = get_formbox( formbox1 );
printf("Text = '%s'\n", word );
}
---*/
/* ------------- GTK Text-Edit Box Routines ----------------- */ /* Multi-line text-edit widget. */
GtkTextView *make_text_edit_box( GtkWidget *panel, int xpos, int ypos, int width, int height, const char *text );
void modify_text_edit_box( GtkTextView *textview, const char *text );
void get_text_edit_box( GtkTextView *textview, char *rtrnstrng, int maxlen );
/*--- Example Usage:
GtkTextView *txtedt;
MakeTextEditWindow_Routine()
{
txtedt = make_text_edit_box( panel, 2, 2, 200, 100, "Initial text\n is here." );
}
Retreival_routine()
{
char word[1000];
get_text_edit_box( txtedt, word, 1000 );
printf("Text = '%s'\n", word );
}
---*/
/* ------------- Menu Routines ----------------- */
GtkWidget *make_menu( GtkWidget *tool_bar, const char *label ); /* For use on automatically spaced menu-bars. */
GtkWidget *make_menu_button( GtkWidget *panel, int xpos, int ypos, const char *label ); /* For use anywhere on a window. */
GtkWidget *add_menu_item( GtkWidget *menu, const char *label, void callback(GtkWidget *, void *), void *data );
GtkWidget *add_submenu( GtkWidget *menu, const char *label );
void modify_menu_label( GtkWidget *menu_label, const char *newtext ); /* A 'menu_label' is what is returned by add_menu_item(). */
/* ------------- GTK Selection List Routines ----------------- */
GtkTreeStore *make_selection_list( GtkWidget *panel, int xpos, int ypos, int width, int height, const char *column_titles,
void callback(GtkWidget *, void *), void dclick_callback(GtkWidget *, void *), void *data );
void append_selection_list( GtkTreeStore *list, GtkTreeIter *iter, const char *item );
char *get_selection_from_list( GtkWidget *selection );
/* Example Usage:
{
GtkTreeStore *mylist;
GtkTreeIter iter;
mylist = make_selection_list( panel, 10, 20, 80, 100, myfunction, 0, 0 );
for (j=0; j<10; j++)
append_selection_list( mylist, &iter, text[j] );
}
void myfunction( GtkWidget *wdg, void *data )
{
char *text;
text = get_selection_from_list( wdg );
printf("Selected: '%s'\n", text );
}
*/
GtkTreeStore *make_multicolumn_selection_list( GtkWidget *panel, int xpos, int ypos, int width, int height,
int ncols, const char *column_titles[],
void callback(GtkWidget *, void *), void dclick_callback(GtkWidget *, void *), void *data );
void add_multicolumn_selection_item( GtkTreeStore *selst, int ncols, char *items[] );
/* Example Usage:
char *MY_Selected_item=0, *MY_Selected_list=0;
int MY_column_to_get=2; // --- Set this to get the column you need.
void selected_item_by_column( GtkWidget *wdg, void *data )
{
GtkTreeIter iter;
GtkTreeModel *model;
if (!done_init) return;
if (gtk_tree_selection_get_selected( GTK_TREE_SELECTION(wdg), &model, &iter ))
{
if (MY_Selected_item != 0) free( MY_Selected_item );
gtk_tree_model_get( model, &iter, MY_column_to_get, &MY_Selected_item, -1 );
MY_Selected_list = data;
printf("Column %d = %s, for %s\n", MY_column_to_get, MY_Selected_item, MY_Selected_list );
}
}
void dclicked_item( GtkWidget *wdg, void *data )
{
printf("Dclicked '%s', for %s.\n", MY_Selected_item, MY_Selected_list );
}
...
GtkTreeStore *selst;
const char *headings[]={ "T1", "D2", "P3" };
char *items[];
selst = make_multicolumn_selection_list( winpanel, 200, 30, 180, 150, 3, headings,
selected_item, dclicked_item, "chartA" );
items[0] = "Fries"; items[1] = "Shake"; items[2] = "Cola";
add_multicolumn_selection_item( selst, 3, iems );
items[0] = "Coffee"; items[1] = "Donut"; items[2] = "Beer";
add_multicolumn_selection_item( selst, 3, iems );
...
*/
/* ------------- GTK FormBoxWithSuggestor ------------------- */
GtkSpinButton *make_FormBoxWithSuggestor( GtkWidget *panel, int xpos, int ypos, float min, float initval,
float max, float step, int ndigits );
float get_FormBoxWithSuggestor_Value( GtkSpinButton *spinbox );
void set_FormBoxWithSuggestor_value( GtkSpinButton *spinbox, float value );
/*
make_combobox - Creates a kind of text-box that the user cannot type into,
but has a selector on the right, from which the user can pick any alphanumeric setting.
*/
GtkWidget *make_combobox( GtkWidget *panel, int xpos, int ypos, int width );
void add_combo_suggestion( GtkWidget *combobox, char *itemtext );
void select_combo_suggestion( GtkWidget *combobox, int item );
/* Example to read value from: frmbx1 = make_combobox( panel, x, y, 30 );
word = gtk_combo_box_text_get_active_text( (GtkComboBoxText *)frmbx1 );
*/
/*
make_formbox_wcombo - Like "make_combobox" above, but users can also type their
own values into the text box, as well as select them.
*/
GtkWidget *make_formbox_wcombo( GtkWidget *panel, int xpos, int ypos, int width );
void add_form_suggestion( GtkWidget *combobox, char *text );
/* Example to read value from: frmbx2 = make_formbox_wcombo( panel, x, y, 30 );
word = strdup( gtk_entry_get_text( GTK_ENTRY( gtk_bin_get_child( GTK_BIN( frmbx2 ) ) ) ) );
*/
/* ------------- Separator Routines ----------------- */
GtkWidget *make_vseparator( GtkWidget *panel, int xpos, int y1, int y2 );
GtkWidget *make_hseparator( GtkWidget *panel, int x1, int x2, int ypos );
GtkWidget *make_rectangular_separator( GtkWidget *panel, int x1, int y1, int x2, int y2 );
/* ------------- GTK Slider Routines ----------------- */
GtkWidget *make_slider( GtkWidget *panel, int xpos, int ypos, int size, char orien, double min, double initval, double max,
void callback(GtkWidget *, void *), void *data );
/*--- Example Usage:
void slide_adj( GtkWidget *widget, gpointer data )
{
double x;
x = gtk_range_get_value( GTK_RANGE(widget) );
printf("Slider Adjusted '%g'\n", x );
}
...
make_slider( panel, xpos, ypos, size, 'h', minv, initval, maxval, slide_adj, 0 );
---*/
/* ------------- Sub-Panel Frames ----------------- */
GtkWidget *make_tabbed_panel_frame( GtkWidget *panel, int xpos, int ypos );
GtkWidget *add_tabbed_panel( GtkWidget *tabbed_panel, int width, int height, char *tab_name );
GtkWidget *make_framed_panel( GtkWidget *panel, int xpos, int ypos, int width, int height, char *frame_name );
/* ------------- Sub-Window or (Detachable) Pop-up Window Making Routines ----------------- */
GtkWidget *make_window( int width, int height, const char *title, GtkWidget *(*winptr) );
/* Create new window and register user's own killed callback. It must return 0. */
GtkWidget *make_window_wkill( int width, int height, const char *title, GtkWidget *(*winptr), int callback(GtkWidget *, void *) );
/* Like above, but set horz/vert-scroll to 1 or 0, to enable or disable respective scroll. */
GtkWidget *make_scrolled_window_wkill( int width, int height, const char *title, GtkWidget *(*winptr),
int horzscroll, int vertscroll, int callback(GtkWidget *, void *) );
/* Initial call to set up outermost window. */
GtkWidget *init_top_outer_window( int *argc, char ***argv, int winwidth, int winhght, const char *title,
int horzscroll, int vertscroll );
void close_any_window( GtkWidget *widget, gpointer data );
int killed_any_window( GtkWidget *widget, GdkEvent *event, gpointer data );
void place_window_center();
void place_window_atmouse();
void show_wind( GtkWidget *wind );
/**** ---- Example window making function. ----
GtkWidget *win1=0;
void respond_to_some_event( GtkWidget *widget, gpointer data )
{
GtkWidget *panel;
panel = make_window( 400, 150, "Test Win", &win1 );
---- Place all window items here .... ----
make_button( panel, 20, 20, " OK ", close_any_window, &win1 );
show_wind( win1 );
}
****/
/* ------------- GTK Image Routines ----------------- */
/*------------------------------------------------------------------------------
attach_image_from_file - Reads image from jpg/gif file, and places on panel
at specified position and size. Returns 0 on error, else returns widget.
------------------------------------------------------------------------------*/
GtkWidget *attach_image_from_file( GtkWidget *panel, char *imagefilename, int xpos, int ypos, int width, int height );
/*------------------------------------------------------------------------------*/
/* place_image - This routine displays an image on the named panel, at the */
/* specified (x,y) position. Image pixels: image_width x image_height */
/* Allocate and initialize image as: */
/* imagedata = (unsigned char *)malloc( 4 * image_pixels ); */
/* imagedata[ 4 * (image_width * row + col) ] = Blue; */
/* imagedata[ 4 * (image_width * row + col) + 1 ] = Green; */
/* imagedata[ 4 * (image_width * row + col) + 2 ] = Red; */
/* Where values are 0=dark to 255=bright. */
/* You can de-allocate or re-use image array after calling this function. */
/*------------------------------------------------------------------------------*/
void place_image( cairo_t *cr, int image_width, int image_height, int pos_x, int pos_y, unsigned char *imagedata );
/* Convert Data to Image (cdti) - Retreives image-data from pre-initialized arrays stored within program. */
/* (The pre-stored array text can be created from the "data2code.c" utility.) */
unsigned char *cdti_convert_data_to_image( char *data, int dimension, int *imgwd, int *imght );
/* ------------- Tool Tips / Hover Notes ----------------- */
void add_tool_tip( GtkWidget *wdg, const char *text ); /* Adds tool-tip to button, etc. */
/* ------------- File Browser ----------------- */
GtkWidget *file_browser_popup( const char *dir, const char *text, void callback(GtkWidget *, void *) );
/* Example usage:
void receive_filename( GtkWidget *wdg, void *fs )
{
char *yourfilename=0;
yourfilename = strdup( gtk_file_selection_get_filename( (GtkFileSelection *)fs ) );
gtk_widget_destroy( fs ); -- Closes file-browser window. --
printf("Absolute path = '%s'\n", yourfilename );
free( yourfilename );
}
file_browser_popup( ".", "Select File", receive_filename );
*/
/* ------------- Progress Bar ----------------- */
void adjust_progress_bar( GtkWidget *wdg, double fraction );
GtkWidget *make_progress_bar( GtkWidget *panel, int xpos, int ypos, int width, char *text );
/* ------------- General Stuff ----------------- */
void UpdateCheck(); /* Process any pending window events. */
void strcpy_safe( char *dst, const char *src, int maxlen );
double Report_Time(); /* Reports time in seconds, accurate to millisecs, for checking time differences. */
void Sleep_seconds( float dt_seconds );
/* gtk_widget_destroy( wdg ); */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,41 @@
#
# Make file for the newer Gtk-3 version of OTS GUI.
# To compile: make -f make_gtk3
#
# Produces: bin/ots_gui3
#
#====================
#====== Macros ======
#====================
#====== OpenTaxSolver GUI programs; in ../../bin/ ======
OTS_GUI := \
ots_gui3 \
notify_popup3
# List of OTS GUI programs in ../../bin/
EXE_OTS_GUI := $(patsubst %,../../bin/%, $(OTS_GUI))
#===================
#====== Rules ======
#===================
all: $(EXE_OTS_GUI)
# Pattern rule for GUI programs in ../../bin/
# includes dependency on any (all) gtk modules
$(EXE_OTS_GUI): ../../bin/%: %.c gtk_utils3.c gtk_utils3.h gtk_file_browser3.c
gcc -O -Wall -fmax-errors=1 -Wno-unused-result `pkg-config --cflags gtk+-3.0` $< `pkg-config --libs gtk+-3.0` -o $@
clean:
rm -f $(EXE_OTS_GUI)
# Notes:
# On some versions of Linux, it may be necessary to execute the following command
# before compiling this make-file, so that pkg-config finds the gtk3+ libs.
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig
# Also, be sure to install "gtk3-devel".

View File

@@ -0,0 +1,34 @@
#====================
#====== Macros ======
#====================
#====== OpenTaxSolver GUI programs; in ../../bin/ ======
OTS_GUI := \
ots_gui2 \
notify_popup
# List of OTS GUI programs in ../../bin/
EXE_OTS_GUI := $(patsubst %,../../bin/%, $(OTS_GUI))
#===================
#====== Rules ======
#===================
all: $(EXE_OTS_GUI)
# Pattern rule for GUI programs in ../../bin/
# includes dependency on any (all) gtk modules
$(EXE_OTS_GUI): ../../bin/%: %.c gtk_utils.c gtk_utils.h gtk_file_browser.c
gcc -O -Wall `pkg-config --cflags gtk+-2.0` $< `pkg-config --libs gtk+-2.0` -o $@
clean:
rm -f $(EXE_OTS_GUI)
# Notes:
# On some versions of Linux, it may be necessary to execute the following command
# before compiling this make-file, so that pkg-config finds the gtk2+ libs.
# export PKG_CONFIG_PATH=/usr/lib/pkgconfig
# Also, be sure to install "gtk2-devel".

View File

@@ -0,0 +1,29 @@
#====================
#====== Macros ======
#====================
# For MSYS1.0, define "CFLAGS = -std=c99"
# in your build env
#====== OpenTaxSolver GUI programs; in ../../bin/ ======
OTS_GUI := \
ots_gui2 \
notify_popup
# List of OTS GUI programs in ../../bin/
EXE_OTS_GUI := $(patsubst %,../../bin/%.exe, $(OTS_GUI))
#===================
#====== Rules ======
#===================
all: $(EXE_OTS_GUI)
# Pattern rule for GUI programs in ../../bin/
# includes dependency on any (all) gtk modules
$(EXE_OTS_GUI): ../../bin/%.exe: %.c gtk_utils.c gtk_utils.h gtk_file_browser.c
gcc -$(CFLAGS) -O -Wall `pkg-config --cflags gtk+-2.0` $< `pkg-config --libs gtk+-2.0` -o $@
clean:
rm -f $(EXE_OTS_GUI)

View File

@@ -0,0 +1,177 @@
/************************************************************************************************
Notify_Popup - Stand alone pop-up notifier utility.
Accepts a message on command-line, and pops up a small window with the message.
Useful for alerting users of warnings or errors, especially for non-graphical programs or
scripts.
Amazing there is not already a universal command like this. It should be the same command
natively available within *all* operating systems and platforms. But could not be found.
(Other than "xmessage" in Linux, but is often not installed. Or "osascript" in MacOS, but indirect.)
So here it is.
Multi-word messages should be quoted.
Example:
notify_popup "Warning: Bad file detected."
You can enter multiple explicit lines with separate arguments, like:
Example:
notify_popup "Please re-run the program." "Because of bad data." " -bye"
Options:
-delay n - Delays popping-up for n-seconds.
-expire nn - Automatically close after nn seconds.
Planned future features:
- Command-line options to specify:
- Message text color, size, & boldness.
-textcolor r g b, (RGB values in 0.0 - 1.0 range)
-textsize fs (Default Font size = 10)
-textbold
-textnormal
- Ability to specify line-breaks in message with a symbol. (In addition to the method above.)
\n
- Window name (ex. Note, Warning, Error, etc.)
-title "Warning"
- Optional button(s), with command(s) to execute when pressed.
-button "label" command
- Ability to specify a file to provide the text.
-file notice.txt
- Scrollable panel when text exceeds window size.
Compile:
gcc -O notify_popup.c `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` -o notify_popup
Public Domain.
***********************************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "gtk_utils.c"
char *my_version="1.0";
void OK_Button( GtkWidget *win, void *data )
{
exit(0);
}
int main( int argc, char *argv[] )
{
GtkWidget *winpanel;
int winwidth, winhght, ypos=10, minht=80, minwd=250, nsecs=0;
int j, k=1, col=0, maxcols=0, nlines=0, num_in=0, cnt=0, expire=0;
char *text_in[999], *mesg[999], line[4096];
double endtime=0.0;
/* Accept command-line arguments. */
k = 1;
while (k < argc)
{
if (strcmp( argv[k], "-delay" ) == 0)
{
k++;
if (k == argc)
{ printf("Missing value after option '%s'\n", argv[k-1] ); exit(1); }
if (sscanf(argv[k], "%d", &nsecs ) != 1)
{ printf("Bad integer after option '%s'\n", argv[k-1] ); exit(1); }
}
else
if (strcmp( argv[k], "-expire" ) == 0)
{
k++;
if (k == argc)
{ printf("Missing value after option '%s'\n", argv[k-1] ); exit(1); }
if (sscanf(argv[k], "%d", &expire ) != 1)
{ printf("Bad integer after option '%s'\n", argv[k-1] ); exit(1); }
endtime = Report_Time() + (double)expire;
}
else
if (strcmp( argv[k], "-help" ) == 0)
{
printf("Notify Popup version %s:\n Options:\n", my_version );
printf(" -delay n - Delays popping up for n-seconds.\n");
printf(" -expire nn - Automatically close after nn seconds.\n\n");
exit(0);
}
else
text_in[num_in++] = strdup( argv[k] ); /* Accept text to display. */
k++;
}
if (num_in == 0)
{
printf("Error: No text to display on command-line.\n");
exit(1);
}
/* Scan through the text, breaking it into lines. */
for (cnt = 0; cnt < num_in; cnt++)
{ /*cnt*/
col = 0;
j = 0;
while (text_in[cnt][j] != '\0') /* Determine max line width and number of rows. */
{ /*loop*/
if ((text_in[cnt][j] == '\n') || ((text_in[cnt][j] == ' ') && (col >= 90)) || (col > 180))
{
if ((text_in[cnt][j] != '\n') && (text_in[cnt][j] != ' '))
line[col++] = text_in[cnt][j++];
line[col] = '\0';
mesg[nlines++] = strdup( line );
if (nlines > 900) { printf("Error: Too many lines.\n"); exit(1); }
if (col > maxcols)
maxcols = col;
col = 0;
}
else
line[col++] = text_in[cnt][j];
j++;
if (j >= 1024) { printf("Error: line too long.\n"); exit(1); }
} /*loop*/
if (col > 0)
{
line[col] = '\0';
mesg[nlines++] = strdup( line );
if (col > maxcols)
maxcols = col;
}
} /*cnt*/
/* Determine the needed window size. */
winwidth = 30 + maxcols * 7;
winhght = 65 + 18 * nlines;
if (winwidth < minwd)
winwidth = minwd;
if (winhght < minht)
winhght = minht;
if (nsecs > 0)
Sleep_seconds( (float)nsecs );
/* Initialize and generate top-outer window. */
winpanel = init_top_outer_window( &argc, &argv, winwidth, winhght, "Notice", 0, 0 );
for (j=0; j < nlines; j++)
{
make_label( winpanel, 20, ypos, mesg[j] );
ypos = ypos + 18;
}
make_button( winpanel, winwidth/2 - 30, winhght - 38, " OK ", OK_Button, 0 );
/* When the window is given the 'forced delete_event' signal by the window manager, exit the program. */
gtk_signal_connect( GTK_OBJECT(outer_window), "delete_event", GTK_SIGNAL_FUNC(exit), NULL );
gtk_widget_show_all( outer_window );
while (1) // gtk_main();
{
UpdateCheck(); /* Check for, and serve, any pending GTK window/interaction events. */
Sleep_seconds( 0.1 ); /* No need to spin faster than ~10 Hz update rate. */
if (expire > 0)
{
if (Report_Time() > endtime + (double)nsecs)
exit(0);
}
}
return 0;
}

View File

@@ -0,0 +1,177 @@
/************************************************************************************************
Notify_Popup - Stand alone pop-up notifier utility.
Accepts a message on command-line, and pops up a small window with the message.
Useful for alerting users of warnings or errors, especially for non-graphical programs or
scripts.
Amazing there is not already a universal command like this. It should be the same command
natively available within *all* operating systems and platforms. But could not be found.
(Other than "xmessage" in Linux, but is often not installed. Or "osascript" in MacOS, but indirect.)
So here it is.
Multi-word messages should be quoted.
Example:
notify_popup "Warning: Bad file detected."
You can enter multiple explicit lines with separate arguments, like:
Example:
notify_popup "Please re-run the program." "Because of bad data." " -bye"
Options:
-delay n - Delays popping-up for n-seconds.
-expire nn - Automatically close after nn seconds.
Planned future features:
- Command-line options to specify:
- Message text color, size, & boldness.
-textcolor r g b, (RGB values in 0.0 - 1.0 range)
-textsize fs (Default Font size = 10)
-textbold
-textnormal
- Ability to specify line-breaks in message with a symbol. (In addition to the method above.)
\n
- Window name (ex. Note, Warning, Error, etc.)
-title "Warning"
- Optional button(s), with command(s) to execute when pressed.
-button "label" command
- Ability to specify a file to provide the text.
-file notice.txt
- Scrollable panel when text exceeds window size.
Compile:
gcc -O notify_popup3.c `pkg-config --cflags gtk+-3.0` `pkg-config --libs gtk+-3.0` -o notify_popup
Public Domain.
***********************************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "gtk_utils3.c"
char *my_version="1.0";
void OK_Button( GtkWidget *win, void *data )
{
exit(0);
}
int main( int argc, char *argv[] )
{
GtkWidget *winpanel;
int winwidth, winhght, ypos=10, minht=80, minwd=250, nsecs=0;
int j, k=1, col=0, maxcols=0, nlines=0, num_in=0, cnt=0, expire=0;
char *text_in[999], *mesg[999], line[4096];
double endtime=0.0;
/* Accept command-line arguments. */
k = 1;
while (k < argc)
{
if (strcmp( argv[k], "-delay" ) == 0)
{
k++;
if (k == argc)
{ printf("Missing value after option '%s'\n", argv[k-1] ); exit(1); }
if (sscanf(argv[k], "%d", &nsecs ) != 1)
{ printf("Bad integer after option '%s'\n", argv[k-1] ); exit(1); }
}
else
if (strcmp( argv[k], "-expire" ) == 0)
{
k++;
if (k == argc)
{ printf("Missing value after option '%s'\n", argv[k-1] ); exit(1); }
if (sscanf(argv[k], "%d", &expire ) != 1)
{ printf("Bad integer after option '%s'\n", argv[k-1] ); exit(1); }
endtime = Report_Time() + (double)expire;
}
else
if (strcmp( argv[k], "-help" ) == 0)
{
printf("Notify Popup version %s:\n Options:\n", my_version );
printf(" -delay n - Delays popping up for n-seconds.\n");
printf(" -expire nn - Automatically close after nn seconds.\n\n");
exit(0);
}
else
text_in[num_in++] = strdup( argv[k] ); /* Accept text to display. */
k++;
}
if (num_in == 0)
{
printf("Error: No text to display on command-line.\n");
exit(1);
}
/* Scan through the text, breaking it into lines. */
for (cnt = 0; cnt < num_in; cnt++)
{ /*cnt*/
col = 0;
j = 0;
while (text_in[cnt][j] != '\0') /* Determine max line width and number of rows. */
{ /*loop*/
if ((text_in[cnt][j] == '\n') || ((text_in[cnt][j] == ' ') && (col >= 90)) || (col > 180))
{
if ((text_in[cnt][j] != '\n') && (text_in[cnt][j] != ' '))
line[col++] = text_in[cnt][j++];
line[col] = '\0';
mesg[nlines++] = strdup( line );
if (nlines > 900) { printf("Error: Too many lines.\n"); exit(1); }
if (col > maxcols)
maxcols = col;
col = 0;
}
else
line[col++] = text_in[cnt][j];
j++;
if (j >= 1024) { printf("Error: line too long.\n"); exit(1); }
} /*loop*/
if (col > 0)
{
line[col] = '\0';
mesg[nlines++] = strdup( line );
if (col > maxcols)
maxcols = col;
}
} /*cnt*/
/* Determine the needed window size. */
winwidth = 30 + maxcols * 7;
winhght = 65 + 18 * nlines;
if (winwidth < minwd)
winwidth = minwd;
if (winhght < minht)
winhght = minht;
if (nsecs > 0)
Sleep_seconds( (float)nsecs );
/* Initialize and generate top-outer window. */
winpanel = init_top_outer_window( &argc, &argv, winwidth, winhght, "Notice", 0, 0 );
for (j=0; j < nlines; j++)
{
make_label( winpanel, 20, ypos, mesg[j] );
ypos = ypos + 18;
}
make_button( winpanel, winwidth/2 - 30, winhght - 38, " OK ", OK_Button, 0 );
/* When the window is given the 'forced delete_event' signal by the window manager, exit the program. */
g_signal_connect( outer_window, "delete_event", G_CALLBACK(exit), NULL );
gtk_widget_show_all( outer_window );
while (1) // gtk_main();
{
UpdateCheck(); /* Check for, and serve, any pending GTK window/interaction events. */
Sleep_seconds( 0.1 ); /* No need to spin faster than ~10 Hz update rate. */
if (expire > 0)
{
if (Report_Time() > endtime + (double)nsecs)
exit(0);
}
}
return 0;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,107 @@
#============================
# Makefile for OpenTaxSolver
#============================
# Compiler options
CC = cc
CFLAGS =
COPTIM = -O -Wall
LDFLAGS = -lm
# For MSYS1.0, define "CFLAGS = -std=c99"
# in your build env.
# Note that under Windows, in an MSYS2 shell, the ".exe" suffix is implied for
# the EXE_* file list macro values. This maintains compatiblity with *nix
# platforms, which don't use the ".exe" suffix for programs. However, in
# MSYS1, this handling is not automatic; currently, MSYS1 is being used to
# build standalone Windows versions of OTS, since MSYS 2.0 produces exe files
# which fault at startup. TODO: Resolve the MSYS2 build issue, and provide
# instructions for setting up a Windows MINGW build environment.
# EFS = Executable File Suffix; not-defined (empty) for Linux. Includes the "."
# separator. To detect whether a ".exe" suffix should be added to executable
# file names, The "MSYSTEM" environment variable is detected. If detected,
# regardless of value, a ".exe" file extension is used.
ifneq ($(strip $(MSYSTEM)),)
EFS := .exe
endif
#====================
#====== Macros ======
#====================
#====== Taxsolver programs; in ../bin/ ======
# Add new taxsolver modules to this list
TAXSOLVE := \
taxsolve_US_1040_2024 \
taxsolve_US_1040_Sched_C_2024 \
taxsolve_PA_40_2024 \
taxsolve_NJ_1040_2024 \
taxsolve_VA_760_2024 \
taxsolve_NC_D400_2024 \
taxsolve_OH_IT1040_2024 \
taxsolve_NY_IT201_2024 \
taxsolve_MA_1_2024 \
taxsolve_CA_540_2024 \
taxsolve_HSA_f8889 \
taxsolve_f8606 \
taxsolve_US_1040_Sched_SE_2024 \
taxsolve_f8812_2024 \
taxsolve_f8829_2024 \
taxsolve_f8995_2024 \
taxsolve_f8959_2024 \
taxsolve_f8960_2024 \
taxsolve_f2210_2024 \
taxsolve_CA_5805_2024 \
taxsolve_AZ_140_2024 \
taxsolve_MI_1040_2024 \
taxsolve_OR_40_2024
# List of taxsolver programs in ../bin/
EXE_TAXSOLVE := $(patsubst %,../bin/%$(EFS), $(TAXSOLVE))
#====== IO programs; in ../bin/ ======
IO := \
universal_pdf_file_modifier \
convert_results2xfdf
# List of ior programs in ../bin/
EXE_IO := $(patsubst %,../bin/%$(EFS), $(IO))
#====== Top level programs ; in ../ ======
TOP := \
Run_taxsolve_GUI
# List of top level programs
EXE_TOP := $(patsubst %,../%$(EFS), $(TOP))
#===================
#====== Rules ======
#===================
all: $(EXE_TAXSOLVE) $(EXE_IO) $(EXE_TOP)
# Pattern rule for taxsolver programs in ../bin/
# includes dependency on taxsolve_routines.c
$(EXE_TAXSOLVE): ../bin/%$(EFS): %.c taxsolve_routines.c
$(CC) $(CFLAGS) $(COPTIM) -o $@ $< $(LDFLAGS)
# Pattern rule for io programs in ../bin/
$(EXE_IO): ../bin/%$(EFS): %.c
$(CC) $(CFLAGS) $(COPTIM) -o $@ $< $(LDFLAGS)
# Pattern rule for top level programs in ../
$(EXE_TOP): ../%$(EFS): %.c
$(CC) $(CFLAGS) $(COPTIM) -o $@ $< $(LDFLAGS)
clean:
rm -fv $(EXE_TAXSOLVE) $(EXE_IO) $(EXE_TOP)
#
#
#
#

View File

@@ -0,0 +1,260 @@
/***
Run_taxsolve_GUI.c - This program merely invokes "bin/ots_gui2.exe".
It is a convenience, because it is easily found at the top directory
of the OTS installation. So new users can make a shortcut to it.
And it enables starting the application by double-clicking on the
start-icon (or file), unlike the previously used command-script.
(Some window managers would open the command-script for editing
instead of executing it, since being a script, it was a text file.
Other window managers would ask whether to run or display, which
this is an uneeded extra step, and it did also confuse some users.
)
GNU Public License - GPL:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Compile:
cc -O Run_taxsolve_GUI.c -o ../Run_taxsolve_GUI
***/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MaxStr 8192
char path[MaxStr], cmd[MaxStr], cmd2[MaxStr], bin_path[MaxStr];
int verbose=0;
void caps_cpy( char *wrd )
{
int j=0;
while (wrd[j] != '\0')
{
wrd[j] = toupper( wrd[j] );
j++;
}
}
void safe_strcpy( char *dst, char *src, int maxlen )
{
int j=0;
while ((j < maxlen-1) && (src[j] != '\0'))
{
dst[j] = src[j];
j++;
}
dst[j] = '\0';
}
void safe_strcat( char *dst, char *src, int maxlen )
{
int j=0, k;
k = strlen( dst );
while ((k < maxlen-1) && (src[j] != '\0'))
{
dst[k++] = src[j++];
}
dst[k] = '\0';
}
#ifndef PLATFORM_KIND
#define Posix_Platform 0
#define Mingw_Platform 1
#define MsVisC_Platform 2
#ifdef __CYGWIN32__
#ifndef __CYGWIN__
#define __CYGWIN__ __CYGWIN32__
#endif
#endif
#if defined(__CYGWIN__) || defined(__MINGW32__) || defined(__MSYS__)
#define PLATFORM_KIND Mingw_Platform /* MinGW or like platform */
#elif defined(__WIN32) || defined(WIN32)
#define PLATFORM_KIND MsVisC_Platform /* microsoft visual C */
#else
#define PLATFORM_KIND Posix_Platform /* Posix/Linux/Unix */
#endif
#endif
int main( int argc, char *argv[] )
{
char *substr;
int k=1, gui_version_to_invoke=2, gui_size=0, darkmode=0;
while (k < argc)
{
if (strcmp( argv[k], "-gui3" ) == 0)
{
gui_version_to_invoke = 3;
printf("Will use 'ots_gui%d'.\n", gui_version_to_invoke );
}
else
if (strcmp( argv[k], "-large" ) == 0)
{
gui_size = 1;
gui_version_to_invoke = 3;
printf("Will use Large-mode with 'ots_gui%d'.\n", gui_version_to_invoke );
}
else
if (strcmp( argv[k], "-darkmode" ) == 0)
{
darkmode = 1;
gui_version_to_invoke = 3;
printf("Will use 'dark-mode' with 'ots_gui%d'.\n", gui_version_to_invoke );
}
else
if (strcmp( argv[k], "-v" ) == 0)
{
verbose = 1;
printf("Verbose mode ON.\n");
}
else
if (strcmp( argv[k], "-help" ) == 0)
{
printf("RunTaxSolve Help:\n");
printf(" This program is a convenient script for starting the OTS GUI\n");
printf(" in a way that is unified and portable to all platforms.\n");
printf("\n");
printf(" Options:\n");
printf(" -v - Verbose mode,\n");
printf(" -gui3 - Use the newer (Gtk-3) version of the OTS GUI.\n");
printf(" -large - Large GUI mode for High-DPI screens.\n");
printf(" -darkmode - Setss GUI to use 'dark-mode'.\n");
printf("\n");
exit(0);
}
else
printf("Unknown option '%s'\n", argv[k] );
k++;
}
strncpy( path, argv[0], MaxStr );
if (verbose) printf("RunTaxSolve invoked as: '%s'\n", path );
#if (PLATFORM_KIND != Posix_Platform)
{ /*mswin*/
char drive_letter='c';
caps_cpy( path );
if (verbose) printf("\tPath: '%s'\n", path );
if (path[1] == ':')
{ /*Absolute_reference*/
drive_letter = path[0];
if (verbose) printf("\tAbsolutePath: driveletter = %c\n", drive_letter );
safe_strcpy( bin_path, &(path[2]), MaxStr );
if (verbose) printf("\t BinPath = '%s'\n", bin_path );
substr = strstr(bin_path,"\\RUN_TAXSOLVE_GUI");
if (substr != 0)
{
substr[0] = '\0';
safe_strcat( bin_path, "\\bin", MaxStr );
sprintf(cmd,"set path=%c:%s;%%PATH%% & ", drive_letter, bin_path );
if (gui_size)
safe_strcat( cmd, "set GDK_SCALE=2 & ", MaxStr );
if (darkmode)
safe_strcat( cmd, "set GTK_THEME=Adwaita:dark & ", MaxStr );
sprintf(cmd2,"start /B %c:\"%s\\ots_gui%d.exe\"",
drive_letter, bin_path, gui_version_to_invoke );
safe_strcat( cmd, cmd2, MaxStr );
}
else { printf("Unexpected Error\n"); exit(1); }
} /*Absolute_reference*/
else
{ /*Local_reference*/
// printf("Start path must begin with drive-letter:\n");
// if ((path[0] != '/') && (path[0] != '\\')) exit(1);
if (verbose) printf("\tLocalReference: (no colon in path)\n");
safe_strcpy( bin_path, path, MaxStr );
if (verbose) printf("\t BinPath = '%s'\n", bin_path );
substr = strstr(bin_path,"RUN_TAXSOLVE_GUI");
if (substr != 0)
{
substr[0] = '\0';
if (strlen( bin_path ) > 0)
safe_strcat( bin_path, "bin", MaxStr );
else
safe_strcpy( bin_path, "bin", MaxStr );
sprintf(cmd,"set path=%s;%%PATH%% & ", bin_path );
if (gui_size)
safe_strcat( cmd, "set GDK_SCALE=2 & ", MaxStr );
if (darkmode)
safe_strcat( cmd, "set GTK_THEME=Adwaita:dark & ", MaxStr );
sprintf(cmd2,"start /B %s\\ots_gui%d.exe", bin_path, gui_version_to_invoke );
safe_strcat( cmd, cmd2, MaxStr );
}
else { printf("Unexpected Error2\n"); exit(1); }
} /*Local_reference*/
} /*mswin*/
#else
{ /*posix*/
int j;
substr = strstr( path, "Run_taxsolve_GUI" );
if (substr == 0) { printf("Could not find path.\nSaw: '%s'\n", bin_path); exit(1); }
substr[0] = '\0'; /* The "path" variable now holds the path to OTS's top directory. */
if (verbose) printf("\tOTS Path = '%s'\n", path );
safe_strcpy( bin_path, path, MaxStr );
j = strlen( bin_path );
if ((j > 0) && (bin_path[j-1] != '/')) safe_strcat( bin_path, "/", MaxStr );
if (j == 0) safe_strcpy( bin_path, "./", MaxStr );
sprintf(cmd,"bin/ots_gui%d", gui_version_to_invoke );
safe_strcat( bin_path, cmd, MaxStr );
#ifdef __APPLE__
/* Apple's Finder starts OTS with "PWD" set to user's home-dir, instead of OTS-dir. */
/* So "cd" to OTS just before starting GUI. */
safe_strcpy( cmd, "cd \"", MaxStr );
safe_strcat( cmd, path, MaxStr );
safe_strcat( cmd, "\" ; ", MaxStr );
if (gui_size)
safe_strcat( cmd, "export GDK_SCALE=2; ", MaxStr );
if (darkmode)
safe_strcat( cmd, "export GTK_THEME=Adwaita:dark; ", MaxStr );
safe_strcat( cmd, "\"", MaxStr );
safe_strcat( cmd, bin_path, MaxStr );
safe_strcat( cmd, "\" &", MaxStr );
#else
/* Linux, etc. */
safe_strcpy( cmd, "", MaxStr );
if (gui_size)
safe_strcat( cmd, "export GDK_SCALE=2; ", MaxStr );
if (darkmode)
safe_strcat( cmd, "export GTK_THEME=Adwaita:dark; ", MaxStr );
safe_strcat( cmd, "\"", MaxStr );
safe_strcat( cmd, bin_path, MaxStr );
safe_strcat( cmd, "\" &", MaxStr );
#endif
} /*posix*/
#endif
printf("Issuing: '%s'\n", cmd );
system( cmd );
return 0;
}

View File

@@ -0,0 +1,338 @@
/*************************************************************************
convert_results2xfdf.c - This program reads an OTS result output file,
along with a cross-reference file, and produces the corresponding "xfdf"
file. This can then be fed to a PDFTK tool, along with the corresponding
government supplied PDF fill-in form file. The PDFTK tool then fills
out the fields of the PDF file with the OTS result data.
The cross-reference file pairs the line-labels in the OTS result file
with their corresponding field-names in the government supplied PDF
fill-in form file. The "xfdf" file needs these field names.
Compile:
cc -O convert_results2xfdf.c -o convert_results2xfdf
Usage:
convert_results2xfdf xref.data result_out.txt
(It then produces "result_out.xfdf".)
This program implements a method to use XFDF that was originally
developed and provided by Daniel Walker. Therefore, major credit
goes to Daniel. ( dwalker at fifo99.com )
GNU Public License - GPL:
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Author: Skeet Moncur (the elder) Email: skeeter_mon at yahoo.com
Date: Feb 9, 2022
**************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLN 10000
float version=0.02;
enum form_flags { DOLLAR_AND_CENTS, DOLLAR_AND_CENTS_ONE, DOLLAR_ONLY,
USE_KEY_IN_FORM, IF_SET, FOUR_DIGITS, KEY_VALUE };
struct xref_rec
{
char *linelabel, *fieldname, *centsfield;
enum form_flags format;
struct xref_rec *nxt;
} *xref_list=0;
int verbose=0;
void add_xref( char *linelabel, char *format, char *fieldname, char *centsfield, int linenum )
{
struct xref_rec *new;
new = (struct xref_rec *)calloc( 1, sizeof( struct xref_rec ) );
new->linelabel = strdup( linelabel );
new->fieldname = strdup( fieldname );
new->centsfield = strdup( centsfield );
if (verbose)
printf(" AddingXref( '%s', '%s', '%s', '%s', %d )\n",
linelabel, format, fieldname, centsfield, linenum );
if (strcmp( format, "DOLLAR_AND_CENTS" ) == 0)
new->format = DOLLAR_AND_CENTS;
else
if (strcmp( format, "DOLLAR_AND_CENTS_ONE" ) == 0)
new->format = DOLLAR_AND_CENTS_ONE;
else
if (strcmp( format, "DOLLAR_ONLY" ) == 0)
new->format = DOLLAR_ONLY;
else
if (strcmp( format, "USE_KEY_IN_FORM" ) == 0)
new->format = USE_KEY_IN_FORM;
else
if (strcmp( format, "IF_SET" ) == 0)
new->format = IF_SET;
else
if (strcmp( format, "FOUR_DIGITS" ) == 0)
new->format = FOUR_DIGITS;
else
if (strcmp( format, "KEY_VALUE" ) == 0)
new->format = KEY_VALUE;
else
{
printf("Error: Unknown XFDF format '%s' for label '%s' on line %d\n",
format, linelabel, linenum );
exit(1);
}
new->nxt = xref_list;
xref_list = new;
}
int m_round( double x )
{
if (x >= 0.0) return (int)(x + 0.5);
else return (int)(x - 0.5);
}
void set_xfdf( FILE *outfile, char *label, char *value )
{
double x;
struct xref_rec *xref_item;
if (verbose) printf(" SetXFDF( '%s', '%s' )\n",label, value );
xref_item = xref_list;
while ((xref_item != 0) && (strcmp( xref_item->linelabel, label ) != 0))
xref_item = xref_item->nxt;
if (xref_item == 0) return;
else
{
switch (xref_item->format)
{
case DOLLAR_ONLY:
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->fieldname );
if (sscanf( value, "%lf", &x ) != 1)
{
printf("Error: Value on line %s is not numeric (%s)\n", label, value );
exit(1);
}
fprintf(outfile, "\t <value>%d</value>\n", m_round( x ) );
fprintf(outfile,"\t</field>\n");
break;
case DOLLAR_AND_CENTS:
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->fieldname );
if (sscanf( value, "%lf", &x ) != 1)
{
printf("Error: Value on line %s is not numeric (%s)\n", label, value );
exit(1);
}
fprintf(outfile, "\t <value>%d</value>\n", (int)x );
fprintf(outfile, "\t</field>\n");
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->centsfield );
fprintf(outfile, "\t <value>%d</value>\n", abs( (int)(100.0 * (x - (int)x)) ) );
fprintf(outfile, "\t</field>\n");
break;
case DOLLAR_AND_CENTS_ONE:
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->fieldname );
fprintf(outfile, "\t <value>%s</value>\n", value );
fprintf(outfile, "\t</field>\n");
break;
case FOUR_DIGITS:
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->fieldname );
if (sscanf( value, "%lf", &x ) != 1)
{
printf("Error: Value on line %s is not numeric (%s)\n", label, value );
exit(1);
}
fprintf(outfile, "\t <value>%4.f</value>\n", 10000.0 * x );
fprintf(outfile, "\t</field>\n");
break;
case USE_KEY_IN_FORM: /* Base on line lable. */
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->fieldname );
fprintf(outfile, "\t <value>%s</value>\n", xref_item->centsfield );
fprintf(outfile, "\t</field>\n");
break;
case IF_SET: /* Base on line value. */
if (value[0] == xref_item->centsfield[0])
{
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->fieldname );
fprintf(outfile, "\t <value>%s</value>\n", xref_item->centsfield );
fprintf(outfile, "\t</field>\n");
}
break;
case KEY_VALUE: /* Not used. */
fprintf(outfile, "\t<field name=\"%s\">\n", xref_item->fieldname );
fprintf(outfile, "\t <value>%s</value>\n", xref_item->centsfield );
fprintf(outfile, "\t</field>\n");
break;
}
}
}
void next_word( char *line, char *word, char *delim )
{
int k=0, j=0, m=0, flag=1;
while ((line[k] != '\0') && (line[k] != '"') && (flag)) /* Consume any leading delimiters */
{
j = 0;
while ((delim[j] != '\0') && (line[k] != delim[j])) j = j + 1;
if (line[k] != delim[j]) flag = 0; else { k++; }
}
if (line[k] == '"')
{ /*quoted*/
k++;
while ((line[k] != '\0') && (line[k] != '"'))
word[m++] = line[k++]; /* Copy chars until next quote. */
if (line[k] == '\0') printf("Warning: Missing end-quote\n");
else k++;
} /*quoted*/
else
{ /*normal*/
while ((line[k] != '\0') && (!flag)) /* Copy chars until next delimiter. */
{
word[m++] = line[k++];
if (line[k] != '\0')
{
j = 0;
while ((delim[j] != '\0') && (line[k] != delim[j])) j = j + 1;
if (line[k] == delim[j]) flag = 1;
}
}
} /*normal*/
j = 0; /* Shorten line. */
while (line[k] != '\0') line[j++] = line[k++];
line[j] = '\0'; /* Terminate the char-strings. */
word[m] = '\0';
}
void show_help()
{
printf("\nConvert_Results2Xfdf Version %g\n", version );
printf(" This program reads an OTS result output file,\n");
printf(" along with a cross-reference file, and produces the corresponding 'xfdf'\n");
printf(" file. This can then be fed to a PDFTK tool, along with the corresponding\n");
printf(" government supplied PDF fill-in form file. The PDFTK tool then fills\n");
printf(" out the fields of the PDF file with the OTS result data.\n");
printf("\n");
printf(" The cross-reference file pairs the line-labels in the OTS result file\n");
printf(" with their corresponding field-names in the government supplied PDF\n");
printf(" fill-in form file. The 'xfdf' file needs these field names.\n");
printf("\n");
printf(" Usage:\n");
printf(" convert_results2xfdf xref.data result_out.txt\n");
printf(" (It then produces 'result_out.xfdf'.)\n");
exit(0);
}
/* ----------------------------------------------------------- */
int main( int argc, char *argv[] )
{
char *fname[2]={0,0}, line[MAXLN], word[MAXLN], label[MAXLN], outfname[MAXLN],
format[MAXLN], fieldname[MAXLN], centsfieldname[MAXLN], value[MAXLN];
FILE *infile, *outfile;
int k=1, m=0, linenum=0;
while (k < argc)
{
if (strcmp( argv[k], "-verbose" ) == 0)
verbose = 1;
else
if (strcmp( argv[k], "-help" ) == 0)
show_help();
else
if (m < 2)
fname[m++] = strdup( argv[k] );
else
{
printf("Error: Too many file names on command line.\n");
exit(1);
}
k++;
}
if (m < 2) { printf("Missing file on command line.\n"); exit(1); }
/* First read the xref file. */
infile = fopen( fname[0], "r" );
if (infile == 0) { printf("Could not open '%s'.\n", fname[0] ); exit(1); }
fscanf(infile, "%s", word );
if (strcmp( word, "XFDF_CrossRef:" ) != 0)
{
printf("Error: First file does not look like a Cross-Ref file. Missing magic header word.\n");
exit(1);
}
fgets( line, MAXLN, infile ); linenum++;
while (!feof(infile))
{
next_word( line, label, " \t\n\r," );
if (label[0] != '\0')
{
next_word( line, format, " \t\n\r," );
next_word( line, fieldname, " \t\n\r," );
next_word( line, centsfieldname, " \t\n\r," );
add_xref( label, format, fieldname, centsfieldname, linenum );
}
fgets( line, MAXLN, infile ); linenum++;
}
fclose( infile );
/* Now read in the results file, and write out the XFDF file. */
infile = fopen( fname[1], "r" );
if (infile == 0) { printf("Could not open '%s'.\n", fname[1] ); exit(1); }
linenum = 0;
strcpy( outfname, fname[1] );
k = strlen( outfname ) - 1;
while ((k >= 0) && (outfname[k] != '.')) k--;
if (k >= 0) outfname[k] = '\0';
strcat( outfname, ".xfdf" );
printf(" Writing: %s\n", outfname );
outfile = fopen( outfname, "w" );
fprintf(outfile, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
fprintf(outfile, "<xfdf xmlns=\"http://ns.adobe.com/xfdf/\">\n");
fprintf(outfile, " <fields>\n");
fgets( line, MAXLN, infile ); linenum++;
while (!feof(infile))
{
next_word( line, label, " \t\n\r=" );
if (label[0] != '\0')
{
next_word( line, value, " \t\n\r=" );
if (strcmp( label, "Status" ) != 0)
set_xfdf( outfile, label, value );
else
{
set_xfdf( outfile, value, label );
}
}
fgets( line, MAXLN, infile ); linenum++;
}
fclose( infile );
fprintf(outfile, " </fields>\n");
fprintf(outfile, "</xfdf>");;
fclose( outfile );
return 0;
}

View File

@@ -0,0 +1,259 @@
Page 1
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
Your1stName: 85 141
YourLastName: 448 141
YourSocSec#: 784 141
Spouse1stName:85 178
SpouseLastName: 448 178
SpouseSocSec#: 784 178
Number&Street: 85 215
Apt#: 535 215
DaytimePhone#: 689 215
Town/City: 85 252
State: 332 252
ZipCode: 478 252
PriorLastNames: 613 252
L4Chk 114 272
L4a_InjuredSpouseChk 307 272
L5Chk 114 290
L6Chk 114 326
L7Chk 114 346
L8 113 381
L9 113 401
L10a 113 418
L10b 369 418
L11a 113 438
L10_NeedMoreSpaceChk 645 455
Dep1_FirstName: 107 536
Dep1_LastName: 242 536
Dep1_SocSec#: 410 536
Dep1_Relation: 528 536
Dep2_FirstName: 107 554
Dep2_LastName: 242 554
Dep2_SocSec#: 410 554
Dep2_Relation: 528 554
Dep3_FirstName: 107 571
Dep3_LastName: 242 571
Dep3_SocSec#: 410 571
Dep3_Relation: 528 571
L11_NeedMoreSpaceChk 656 594
L11b_PG1_FirstName: 109 666
L11b_PG1_LastName: 242 666
L11b_PG1_SocSec#: 407 666
L11b_PG1_Relation: 528 666
L11b_PG1_Months: 639 666
L11c_PG2_FirstName: 109 684
L11c_PG2_LastName: 242 684
L11c_PG2_SocSec#: 407 684
L11c_PG2_Relation: 528 684
L11c_PG2_Months: 639 684
L12 761 703 10
L13_Filing140SBIChk 247 724
L13 761 723 10
L14 761 741 10
L15 761 760 10
L16 761 777 10
L17 761 795 10
L18 761 812 10
L19 761 830 10
L20 629 850 10
L21 629 869 10
L22 629 888 10
L23 629 905 10
L24 761 923 10
L25 761 941 10
L26 761 960 10
L27 761 978 10
L28 761 997 10
L29a 761 1016 10
L29b 761 1035 10
L30 761 1053 10
L31 761 1071 10
L32 761 1090 10
L33 761 1108 10
L34a 325 1127 10
L34b 540 1127 10
L34 761 1126 10
L35 761 1145 10
Page 2
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
YourName: 77 86
YourSocSec#: 624 86
L36 764 106 10
L37 764 124 10
L38 764 143 10
L39 764 162 10
L40e 351 181
L40 764 181 10
L41 764 198 10
L42 764 216 10
L43_DeductionsItemizedChk 535 236
L43_DeductionsStandardChk 639 236
L43 764 234 10
L44_CharitableChk 475 254
L44 764 254 10
L45 764 272 10
L46 764 289 10
L47 764 309 10
L48 764 327 10
L49 764 344 10
L50 764 363 10
L51 764 382 10
L52 764 399 10
L53 764 418 10
L54a 309 436 10
L54b 534 436 10
L54 764 436 10
L55 764 454 10
L56 764 473 10
L57 764 492 10
L58_Filing308IChk 549 511
L58_Filing334Chk 621 511
L58_Filing349Chk 684 511
L58 764 509 10
L59 764 530 10
L60 764 547 10
L61 764 566 10
L62 764 585 10
L63 764 602 10
L64 460 622 5
L65 659 622 5
L66 251 640 5
L67 460 640 5
L68 659 640 5
L69 251 658 5
L70 460 658 5
L71 659 658 5
L72 251 676 5
L73 460 676 5
L74 659 676 5
L75_DemocraticChk 435 697
L75_LibertarianChk 541 697
L75_RepublicanChk 645 697
L76 764 714 10
L77_1AnnualizedOtherChk 119 734
L77_2FarmerFishermanChk 242 734
L77_Filing221Chk 385 734
L78 764 751 10
L79 764 775 10
L79_ForeignAcctChk 709 783
L80 764 848 10
Optional_Page 3
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
YourName: 74 86
YourSocSec#: 622 86
SD1C 712 611 10
SD2C 712 637 10
SD3C 712 664 10
SD4C 712 690 10
SD5C 712 719 10
SD6C 712 754 10
SD7C 712 782 10
Optional_Page 4
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
YourName: 74 86
YourSocSec#: 622 86
Optional_Page 5
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
YourName: 74 73
YourSocSec#: 622 73
OA_A 757 236 10
OA_B 757 260 10
OA_C 757 284 10
OA_D 757 310 10
OA_E 757 338 10
OA_Fa 757 363 10
OA_Fb 757 388 10
OA_Ga 757 422 10
OA_Gb 757 454 10
OA_Ha 757 502 10
OA_Hb 757 549 10
OA_Hc 757 596 10
OA_I 757 621 10
OA_J 757 685 10
OA_K 757 710 10
OA_L 757 744 10
OA_M 757 769 10
OA_N 757 796 10
OA_O 757 828 10
OA_P 757 854 10
OA_Q 757 878 10
OA_R 757 905 10
OA_S 757 930 10
OA_T 757 956 10
Optional_Page 6
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
YourName: 74 73
YourSocSec#: 622 73
OS_A 733 271 10
OS_B 733 297 10
OS_C 733 325 10
OS_D 733 351 10
OS_E 733 377 10
OS_F 733 404 10
OS_G 733 430 10
OS_H 733 455 10
OS_I 733 481 10
OS_J 733 506 10
OS_K 733 533 10
OS_L 733 593 10
OS_M 733 620 10
OS_N 733 646 10
OS_O 733 672 10
OS_P 733 762 10
OS_Q 733 824 10
OS_R 733 857 10
OS_S 733 888 10
OS_T 733 913 10
OS_U 733 939 10
OS_V 733 965 10
OS_W 733 996 10

View File

@@ -0,0 +1,157 @@
Instructions:
[L12] State Wages
Enter your state wages from all states from each of your Federal
Form(s) W-2, Wage and Tax Statement. This amount appears on
Form W-2, box 16.
If you received wages and do not have a Form W-2, see "Attachments to
your tax return.
[L34] Tax from Schedule G-1 and Form FTB 5870A
If you received a qualified lump-sum distribution in 2020 and you
were born before January 2, 1936, get California Schedule G-1, Tax on
Lump-Sum Distributions, to figure your tax by special methods that may
result in less tax. Attach Schedule G-1 to your tax return.
If you received accumulation distributions from foreign trusts or from
certain domestic trusts, get form FTB 5870A, Tax on Accumulation
Distribution of Trusts, to figure the additional tax. Attach form
FTB 5870A to your tax return.
[L40] Nonrefundable Child and Dependent Care Expenses Credit
Claim this credit if you paid someone to care for your qualifying child
under the age of 13, other dependent who is physically or mentally
incapable of caring for him or herself, or spouse/RDP if physically
or mentally incapable of caring for him or herself. The care must be
provided in California. To claim this credit, your federal AGI must be
$100,000 or less and you must complete and attach form FTB 3506,
Child and Dependent Care Expenses Credit, included in the booklet.
[L71] California Income Tax Withheld
Enter the total California income tax withheld from your federal Forms:
# # W-2, Wage and Tax Statement, box 17
# # W-2G, Certain Gambling Winnings, box 15
# # 1099-DIV, Dividends and Distributions, box 15
# # 1099-INT, Interest Income, box 17
# # 1099-MISC, Miscellaneous Income, box 16
# # 1099-OID, Original Issue Discount, box 14
# # 1099-R, Distributions from Pensions, Annuities, Retirement, or Profit
Sharing Plans, IRAs, Insurance Contracts, etc., box 12
Do not include city, local, or county tax withheld, tax withheld by
other states, or nonconsenting nonresident (NCNR) member's tax
from Schedule K-1 (568), line 15e. Do not include withholding from
Forms 592-B, Resident and Nonresident Withholding Tax Statement, or
Form 593, Real Estate Withholding Tax Statement, on this line. For more
details, see instructions for line 73.
Generally, tax should not be withheld on federal Form 1099-MISC. If you
want to pre-pay tax on income reported on federal Form 1099-MISC, use
Form 540-ES, Estimated Tax for Individuals.
[L72] 2020 CA Estimated Tax and Other Payments
Enter the total of any:
# # California estimated tax payments you made using 2020
Form 540-ES, electronic funds withdrawal, Web Pay, or credit card.
# # Overpayment from your 2018 California income tax return that you
applied to your 2020 estimated tax.
# # Payment you sent with form FTB 3519, Payment for Automatic
Extension for Individuals.
# # California estimated tax payments made on your behalf by
an estate, trust, or S corporation on Schedule K-1 (541) or
Schedule K-1 (100S).
[L91] Use Tax.
You are required to enter a number on this line. If the amount due is
zero, you must check the applicable box to indicate that you either owe
no use tax, or you paid your use tax obligation directly to the California
Department of Tax and Fee Administration.
You may owe use tax if you make purchases from out-of-state retailers
(for example, purchases made by telephone, online, by mail, or in
person) where California sales or use tax was not paid and you use
those items in California.
[L112] Interest and Penalties
Interest. Interest will be charged on any late filing or late payment
penalty from the original due date of the return to the date paid. In
addition, if other penalties are not paid within 15 days, interest will be
charged from the date of the billing notice until the date of payment.
Interest compounds daily and the interest rate is adjusted twice a year.
The FTB website has a chart of interest rates in effect since 1976. Go to
ftb.ca.gov and search for interest rates.
Late Filing of Tax Return. If you do not file your tax return by
October 15, 2020, you will incur a late filing penalty plus interest from
the original due date of the tax return. The maximum total penalty is
25% of the tax not paid if the tax return is filed after October 15, 2020.
The minimum penalty for filing a tax return more than 60 days late is
$135 or 100% of the balance due, whichever is less.
Late Payment of Tax. If you fail to pay your total tax liability by
April 15, 2020, you will incur a late payment penalty plus interest. The
penalty is 5% of the tax not paid when due plus 1/2% for each month, or
part of a month, the tax remains unpaid. We may waive the late payment
penalty based on reasonable cause. Reasonable cause is presumed
when 90% of the tax shown on the return is paid by the original due
date of the return. However, the imposition of interest is mandatory. If,
after April 15, 2020, you find that your estimate of tax due was too low,
pay the additional tax as soon as possible to avoid or minimize further
accumulation of penalties and interest.
Late Payment of Use Tax. To avoid late payment penalties for use
tax, you must report and pay the use tax with a timely filed income tax
return, or California Individual Use Tax return.
Other Penalties. We may impose other penalties if a payment is
returned for insufficient funds. We may also impose penalties for
negligence, substantial understatement of tax, and fraud.
[L113] Underpayment of Estimated Tax
You may be subject to an estimated tax penalty if any of the following is true:
# # Your withholding and credits are less than 90% of your current tax
year liability.
# # Your withholding and credits are less than 100% of your prior
year tax liability (110% if AGI is more than $150,000 or $75,000 if
married/RDP filing separately).
# # You did not pay enough through withholding to keep the amount
you owe with your tax return under $500 ($250 if married/RDP filing
separately).
# # You did not make the required estimate payments, if you pay an
installment after the date it is due, or if you underpay any installment,
a penalty may be assessed on the portion of estimated tax that was
underpaid from the due date of the installment to the date of payment
or the due date of your return, whichever is earlier. Get the 2020
form FTB 5805, Underpayment of Estimated Tax by Individuals and
Fiduciaries, for more information.
The FTB can figure the penalty for you when you file your tax return and
send you a bill.
Is line 97 less than $500 ($250 if married/RDP filing separately)?
Yes Stop. You may not be subject to an estimated payment penalty.
No Continue. You may be subject to an estimated payment penalty.
Is line 97 less than 10% of the amount on line 48? Form 540 filers: this
excludes the tax on lump-sum distributions on Form 540, line 34.
Yes Stop. You may not be subject to an estimated payment penalty.
No You may be subject to an estimated payment penalty; get form
FTB 5805, Underpayment of Estimated Tax by Individuals and
Fiduciaries (or form FTB 5805F, Underpayment of Estimated Tax by
Farmers and Fishermen).

View File

@@ -0,0 +1,529 @@
Page 1
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
no_zero_entries
Your1stName: 60 184
YourMidInit: 284 184
YourLastName: 316 184
YourSocSec#: 663 184 0 11
Spouse1stName: 60 228
SpouseMidInit: 284 228
SpouseLastName: 316 228
SpouseSocSec#: 663 228 0 11
Number&Street: 60 313
Apt#: 598 313
Town: 60 357
State: 615 357
ZipCode: 665 357 0 11
YourDOB: 109 473 0 5.6
SpouseDOB: 497 473 0 5.6
CountyName: 111 582
FontSz 18
CkSameAddress: 766 604
CkSingle: 118 806
CkMFJ: 118 843
CkMFS: 118 916
CkHH: 382 806
CkQW: 382 843
CkDep: 710 953
FontSz 10
L7a 585 1022
L7 770 1024
L8a 585 1058
L8 770 1060
L9a 585 1096
L9 770 1098
Page 2
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
YourName: 145 88
YourSocSec#: 475 88
L10Dep1FrstName: 210 162
L10Dep1LastName: 210 200
L10Dep1SSN: 210 236
L10Dep1Relation: 210 272
L10Dep2FrstName: 444 162
L10Dep2LastName: 444 200
L10Dep2SSN: 444 236
L10Dep2Relation: 444 272
L10Dep3FrstName: 674 162
L10Dep3LastName: 674 200
L10Dep3SSN: 674 236
L10Dep3Relation: 674 272
L10a 550 308
L10 706 310 14
L11 706 346 14
L12 470 401 14
L13 715 438 14
L14 715 475 14
L15 715 511 14
L16 715 549 14
L17 715 585 14
L18 715 694 14
showevenifzero L19
L19 715 731 14
FontSz 18
CkTxTable: 281 788
CkTxRateSchd: 412 788
CkFTB3800: 281 824
CkFTB3803: 412 824
FontSz 10
L31 715 823 14
L32 715 861 14
showevenifzero L33
L33 715 897 14
L34 715 933 14
L35 715 970 14
L40 715 1026 14
L43 715 1062 14
L44 715 1100 14
Page 3
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
YourName: 145 88
YourSocSec#: 474 88
L45 715 127 14
L46 715 164 14
L47 715 200 14
showevenifzero L48
L48 715 236 14
L61 715 291 14
L62 715 329 14
L63 715 365 14
L64 715 401 14
L71 715 457 14
L72 715 494 14
L73 715 531 14
L74 715 566 14
L75 715 603 14
L76 715 640 14
L77 715 678 14
L78 715 714 14
showevenifzero L91
L91 612 769 14
FontSz 16
CkNoUseTaxOwed 282 805
CkPayedUseTaxCDTFA 460 806
CkFYHealthCoverage 646 862
FontSz 10
L92 612 897 14
L93 715 952 14
L94 715 990 14
L95 715 1025 14
L96 715 1062 14
L97 715 1099 14
Page 4
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
YourName: 144 88
YourSocSec#: 476 88
L98 715 125 14
L99 715 161 14
L100 715 196 14
L400 715 254 14
L401 715 290 14
L403 715 326 14
L405 715 363 14
L406 715 400 14
L407 715 436 14
L408 715 474 14
L410 715 512 14
L413 715 549 14
L110 715 914 14
Page 5
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
YourName: 144 88
YourSocSec#: 475 88
L111 715 143 14
L112 715 194 14
L113 715 249 14
L114 715 288 14
L115 715 360 14
L116 715 508 14
L117 715 618 14
RouteNumL116: 119 507
AccntNum:116: 345 507
RouteNumL117: 119 617
AccntNumL117: 345 617
FontSz 18
CkFTB5805: 215 254
CkFTB5805F: 380 254
CkCheckingL116: 237 493
CkSavingsL116: 237 530
CkCheckingL117: 237 603
CkSavingsL117: 237 640
CkHCinfoYes 761 807
CkHCinfoNo 831 807
FontSz 10
Page 6
YourName: 148 86
YourSocSec#: 476 87
FontSz 18
CkDiscussYes 687 496
CkDiscussNo 762 496
FontSz 10
Page 7
YourNames: 60 158
YourSocSec#: 710 158
SchedCA540_A1a 386 241 9
SchedCA540_A1ab 555 241 9
SchedCA540_A1ac 731 241 9
SchedCA540_A1b 386 274 9
SchedCA540_A1bb 555 274 9
SchedCA540_A1bc 731 274 9
SchedCA540_A1c 386 307 9
SchedCA540_A1cb 555 307 9
SchedCA540_A1cc 731 307 9
SchedCA540_A1d 386 349 9
SchedCA540_A1db 555 349 9
SchedCA540_A1dc 731 349 9
SchedCA540_A1e 386 383 9
SchedCA540_A1eb 555 383 9
SchedCA540_A1ec 731 383 9
SchedCA540_A1f 386 418 9
SchedCA540_A1fb 555 418 9
SchedCA540_A1fc 731 418 9
SchedCA540_A1g 386 458 9
SchedCA540_A1gb 555 458 9
SchedCA540_A1gc 731 458 9
SchedCA540_A1h 386 493 9
SchedCA540_A1hb 555 493 9
SchedCA540_A1hc 731 493 9
SchedCA540_A1ic 731 528 9
SchedCA540_A1z 386 563 9
SchedCA540_A1zb 555 563 9
SchedCA540_A1zc 731 563 9
SchedCA540_A2a 199 602 9
SchedCA540_A2 386 602 9
SchedCA540_A2b 555 602 9
SchedCA540_A2c 731 602 9
SchedCA540_A3a 199 639 9
SchedCA540_A3 386 639 9
SchedCA540_A3b 555 639 9
SchedCA540_A3c 731 639 9
SchedCA540_A4a 199 676 9
SchedCA540_A4 386 676 9
SchedCA540_A4b 555 676 9
SchedCA540_A4c 731 676 9
SchedCA540_A5a 199 735 9
SchedCA540_A5 386 735 9
SchedCA540_A5b 555 735 9
SchedCA540_A5c 731 735 9
SchedCA540_A6a 199 770 9
SchedCA540_A6 386 770 9
SchedCA540_A6b 555 770 9
SchedCA540_A7 386 803 9
SchedCA540_A7b 555 803 9
SchedCA540_A7c 731 803 9
SchedCA540_B1 386 860 9
SchedCA540_B1b 555 860 9
SchedCA540_B2 386 900 9
SchedCA540_B2c 731 900 9
SchedCA540_B3 386 934 9
SchedCA540_B3b 555 934 9
SchedCA540_B3c 731 934 9
SchedCA540_B4 386 966 9
SchedCA540_B4b 555 966 9
SchedCA540_B4c 731 966 9
SchedCA540_B5 386 1003 9
SchedCA540_B5b 555 1003 9
SchedCA540_B5c 731 1003 9
SchedCA540_B6 386 1039 9
SchedCA540_B6b 555 1039 9
SchedCA540_B6c 731 1039 9
SchedCA540_B7 386 1076 9
SchedCA540_B7b 555 1076 9
Page 8
SchedCA540_B8A 386 181 9
SchedCA540_B8Ac 731 181 9
SchedCA540_B8B 386 220 9
SchedCA540_B8Bb 555 220 9
SchedCA540_B8C 386 256 9
SchedCA540_B8Cb 555 256 9
SchedCA540_B8Cc 731 256 9
SchedCA540_B8D 386 294 9
SchedCA540_B8Dc 731 294 9
SchedCA540_B8E 386 330 9
SchedCA540_B8Ec 731 330 9
SchedCA540_B8F 386 365 9
SchedCA540_B8Fb 555 365 9
SchedCA540_B8G 386 400 9
SchedCA540_B8H 386 438 9
SchedCA540_B8I 386 472 9
SchedCA540_B8J 386 506 9
SchedCA540_B8K 386 540 9
SchedCA540_B8Kc 731 540 9
SchedCA540_B8L 386 600 9
SchedCA540_B8M 386 636 9
SchedCA540_B8N 386 672 9
SchedCA540_B8Nb 555 672 9
SchedCA540_B8O 386 707 9
SchedCA540_B8Ob 555 707 9
SchedCA540_B8P 386 746 9
SchedCA540_B8Pb 555 746 9
SchedCA540_B8Pc 731 746 9
SchedCA540_B8Q 386 783 9
SchedCA540_B8R 386 818 9
SchedCA540_B8S 386 860 9
SchedCA540_B8T 386 910 9
SchedCA540_B8U 386 945 9
SchedCA540_B8V 386 986 9
SchedCA540_B8Vb 555 986 9
SchedCA540_B8Vc 731 986 9
SchedCA540_B8Za: 130 1041 9
SchedCA540_B8Z 386 1041 9
SchedCA540_B8Zb 555 1041 9
SchedCA540_B8Zc 731 1041 9
Page 9
SchedCA540_B9A 386 181 9
SchedCA540_B9Ab 555 181 9
SchedCA540_B9Ac 731 181 9
SchedCA540_B9B1b 555 216 9
SchedCA540_B9B2b 555 252 9
SchedCA540_B9B3b 555 288 9
SchedCA540_B10 386 380 9
SchedCA540_B10b 555 380 9
SchedCA540_B10c 731 380 9
SchedCA540_C11 386 477 9
SchedCA540_C11b 555 477 9
SchedCA540_C12 386 512 9
SchedCA540_C12b 555 512 9
SchedCA540_C12c 731 512 9
SchedCA540_C13 386 550 9
SchedCA540_C13b 555 550 9
SchedCA540_C14 386 585 9
SchedCA540_C14c 731 585 9
SchedCA540_C15 386 620 9
SchedCA540_C15b 555 620 9
SchedCA540_C16 386 655 9
SchedCA540_C17 386 694 9
SchedCA540_C17b 555 694 9
SchedCA540_C18 386 730 9
SchedCA540_C19 386 765 9
SchedCA540_C19c 731 765 9
AlimRecipSSN: 210 802 0 9
AlimRecipName: 176 843
SchedCA540_C20 386 880 9
SchedCA540_C20b 555 880 9
SchedCA540_C20c 731 880 9
SchedCA540_C21 386 915 9
SchedCA540_C21c 731 915 9
SchedCA540_C23 386 990 9
Page 10
SchedCA540_C24A 400 180 9
SchedCA540_C24B 400 232 9
SchedCA540_C24Bb 565 232 9
SchedCA540_C24Bc 731 232 9
SchedCA540_C24C 400 289 9
SchedCA540_C24Cb 565 289 9
SchedCA540_C24D 400 325 9
SchedCA540_C24Db 565 325 9
SchedCA540_C24E 400 364 9
SchedCA540_C24F 400 400 9
SchedCA540_C24Fb 565 400 9
SchedCA540_C24Fc 731 400 9
SchedCA540_C24G 400 437 9
SchedCA540_C24Gb 565 437 9
SchedCA540_C24Gc 731 437 9
SchedCA540_C24H 400 472 9
SchedCA540_C24I 400 526 9
SchedCA540_C24Ib 565 526 9
SchedCA540_C24J 400 565 9
SchedCA540_C24Jb 565 565 9
SchedCA540_C24K 400 601 9
SchedCA540_C24Kb 565 601 9
SchedCA540_C24Z 400 654 9
SchedCA540_C24Zb 565 654 9
SchedCA540_C24Zc 731 654 9
SchedCA540_C24Ztype: 98 653
SchedCA540_C25 400 691 9
SchedCA540_C25b 565 691 9
SchedCA540_C25c 731 691 9
SchedCA540_C26 400 728 9
SchedCA540_C26b 565 728 9
SchedCA540_C26c 731 728 9
SchedCA540_C27 400 764 9
SchedCA540_C27b 565 764 9
SchedCA540_C27c 731 764 9
Page 11
FontSz 18
CkItemizeCA: 556 164
FontSz 10
SchedCA540_Part2_1 225 275 9
SchedCA540_Part2_2 225 331 9
SchedCA540_Part2_3 225 368 9
showevenifzero SchedCA540_Part2_4a
SchedCA540_Part2_4a 407 403 9
SchedCA540_Part2_4c 736 403 9
SchedCA540_Part2_5aa 407 444 9
SchedCA540_Part2_5ab 572 444 9
SchedCA540_Part2_5ba 407 479 9
SchedCA540_Part2_5ca 407 518 9
SchedCA540_Part2_5da 407 554 9
SchedCA540_Part2_5ea 407 662 9
SchedCA540_Part2_5eb 572 662 9
SchedCA540_Part2_5ec 736 662 9
SchedCA540_Part2_6type: 219 695
SchedCA540_Part2_6a 407 700 9
SchedCA540_Part2_6b 572 700 9
SchedCA540_Part2_6c 736 700 9
SchedCA540_Part2_7a 407 736 9
SchedCA540_Part2_7b 572 736 9
SchedCA540_Part2_7c 736 736 9
SchedCA540_Part2_8aa 407 790 9
SchedCA540_Part2_8ac 736 790 9
SchedCA540_Part2_8ba 407 827 9
SchedCA540_Part2_8bc 736 827 9
SchedCA540_Part2_8ca 407 864 9
SchedCA540_Part2_8cc 736 864 9
! SchedCA540_Part2_8da 407 900 9
! SchedCA540_Part2_8db 572 900 9
SchedCA540_Part2_8ea 407 937 9
SchedCA540_Part2_8eb 572 937 9
SchedCA540_Part2_8ec 736 937 9
SchedCA540_Part2_9a 407 974 9
SchedCA540_Part2_9b 572 974 9
SchedCA540_Part2_9c 736 974 9
SchedCA540_Part2_10a 407 1010 9
SchedCA540_Part2_10b 572 1010 9
SchedCA540_Part2_10c 736 1010 9
Page 12
SchedCA540_Part2_11a 406 188 9
SchedCA540_Part2_11b 572 188 9
SchedCA540_Part2_11c 736 188 9
SchedCA540_Part2_12a 406 224 9
SchedCA540_Part2_12b 572 224 9
SchedCA540_Part2_12c 736 224 9
SchedCA540_Part2_13a 406 260 9
SchedCA540_Part2_13b 572 260 9
SchedCA540_Part2_13c 736 260 9
SchedCA540_Part2_14a 406 300 9
SchedCA540_Part2_14b 572 300 9
SchedCA540_Part2_14c 736 300 9
SchedCA540_Part2_15a 406 358 9
SchedCA540_Part2_15b 572 358 9
SchedCA540_Part2_15c 736 358 9
SchedCA540_Part2_16a 406 405 9
SchedCA540_Part2_16b 572 405 9
SchedCA540_Part2_16c 736 405 9
SchedCA540_Part2_17a 406 445 9
SchedCA540_Part2_17b 572 445 9
SchedCA540_Part2_17c 736 445 9
SchedCA540_Part2_18 738 477 9
SchedCA540_Part2_19 580 550 9
SchedCA540_Part2_20 580 587 9
SchedCA540_Part2_21type: 355 624 9
SchedCA540_Part2_21 580 624 9
SchedCA540_Part2_22 580 660 9
SchedCA540_Part2_23 355 698 9
SchedCA540_Part2_24 580 733 9
SchedCA540_Part2_25 739 770 9
SchedCA540_Part2_26 739 807 9
SchedCA540_Part2_27spec: 355 844 9
SchedCA540_Part2_27 739 844 9
SchedCA540_Part2_28 739 881 9
SchedCA540_Part2_29 739 1009 9
SchedCA540_Part2_30 739 1099 9

View File

@@ -0,0 +1,273 @@
Page 1
TxtColor: 0 0 0.6
CoordReference: 40, 750 61, 64
550, 50 841, 1134 110-dpi
round_to_whole_numbers
YourName: 62 199
YourSocSec#: 732 199
CkQuest1Yes 757 583
CkQuest1No 835 583
CkQuest2Yes 758 694
CkQuest2No 835 694
CkQuest3Yes 757 748
CkQuest3No 835 749
CkQuest3NA 796 785
Wthd_Per_1 173 858 18
Wthd_Per_2 482 859 18
Wthd_Per_3 173 895 18
Wthd_Per_4 482 895 18
CkQuest4Yes 757 950
CkQuest4No 835 950
Page 2
L1 679 163 18
L2 459 199 18
L3 679 235 18
L4 679 291 18
L5 679 363 18
L6 679 418 18
L7 460 567 18
L8 460 622 18
L9 679 659 18
L10 679 713 18
L11 679 750 18
L12 679 842 18
L13 679 897 18
Page 3
SchdAI_1a 394 455 12
SchdAI_1b 514 455 12
SchdAI_1c 637 455 12
SchdAI_1d 756 455 12
!SchdAI_2a 394 491 12
!SchdAI_2b 514 491 12
!SchdAI_2c 637 491 12
!SchdAI_2d 756 491 12
SchdAI_3a 394 528 12
SchdAI_3b 514 528 12
SchdAI_3c 637 528 12
SchdAI_3d 756 528 12
SchdAI_4a 394 603 12
SchdAI_4b 514 602 12
SchdAI_4c 635 602 12
SchdAI_4d 756 602 12
!SchdAI_5a 394 638 12
!SchdAI_5b 514 638 12
!SchdAI_5c 635 638 12
!SchdAI_5d 756 638 12
SchdAI_6a 394 675 12
SchdAI_6b 514 675 12
SchdAI_6c 635 675 12
SchdAI_6d 756 675 12
SchdAI_7a 394 730 12
SchdAI_7b 514 730 12
SchdAI_7c 635 730 12
SchdAI_7d 756 730 12
SchdAI_8a 394 766 12
SchdAI_8b 514 766 12
SchdAI_8c 635 766 12
SchdAI_8d 756 766 12
SchdAI_9a 394 803 12
SchdAI_9b 514 803 12
SchdAI_9c 635 803 12
SchdAI_9d 756 803 12
SchdAI_10a 394 878 12
SchdAI_10b 514 878 12
SchdAI_10c 635 878 12
SchdAI_10d 756 878 12
SchdAI_11a 394 932 12
SchdAI_11b 514 932 12
SchdAI_11c 635 932 12
SchdAI_11d 756 932 12
SchdAI_12a 394 969 12
SchdAI_12b 514 969 12
SchdAI_12c 635 969 12
SchdAI_12d 756 969 12
SchdAI_13a 394 1023 12
SchdAI_13b 514 1023 12
SchdAI_13c 635 1023 12
SchdAI_13d 756 1023 12
Page 4
L14aa 393 217 12
L14ab 515 217 12
L14ac 635 217 12
L14ad 757 217 12
L14ba 393 253 12
L14bb 515 253 12
L14bc 635 253 12
L14bd 757 253 12
L14ca 393 290 12
L14cb 515 290 12
L14cc 635 290 12
L14cd 757 290 12
!L14da 393 327 12
!L14db 515 326 12
!L14dc 636 327 12
!L14dd 757 327 12
!L14ea 393 363 12
!BL14eb 515 363 12
!L14ec 635 363 12
!L14ed 757 363 12
!SchdAI_15a 393 400 12
!SchdAI_15b 515 400 12
!SchdAI_15c 635 400 12
!SchdAI_15d 757 400 12
SchdAI_16a 393 363 12
SchdAI_16b 515 363 12
SchdAI_16c 635 363 12
SchdAI_16d 757 363 12
SchdAI_17b 515 436 12
SchdAI_17c 635 436 12
SchdAI_17d 757 436 12
SchdAI_18a 393 473 12
SchdAI_18b 515 473 12
SchdAI_18c 635 473 12
SchdAI_18d 757 473 12
SchdAI_19a 393 529 12
SchdAI_19b 515 529 12
SchdAI_19c 635 529 12
SchdAI_19d 757 529 12
SchdAI_20b 515 565 12
SchdAI_20c 635 565 12
SchdAI_20d 757 565 12
SchdAI_21a 393 601 12
SchdAI_21b 515 601 12
SchdAI_21c 635 601 12
SchdAI_21d 757 601 12
SchdAI_22a 393 656 12
SchdAI_22b 515 656 12
SchdAI_22c 635 656 12
SchdAI_22d 757 656 12
SchdAI_23a 107 766 18
SchdAI_23b 305 766 18
SchdAI_23c 504 766 18
SchdAI_23d 701 766 18
Page 5
no_round_to_whole_numbers
WSII_1a 525 155 12
WSII_1b 608 155 12
WSII_1c 690 155 12
WSII_1d 773 155 12
WSII_2a 525 210 12
WSII_2b 608 210 12
WSII_2c 690 210 12
WSII_2d 773 210 12
WSII_3a 525 255 12
WSII_3b 608 255 12
WSII_3c 690 255 12
WSII_3d 773 255 12
WSII_4a 525 275 12
WSII_4b 608 275 12
WSII_4c 690 275 12
WSII_4d 773 275 12
WSII_5a 525 297 12
WSII_5b 608 297 12
WSII_5c 690 297 12
WSII_5d 773 297 12
WSII_6a 525 323 12
WSII_6b 608 323 12
WSII_6c 690 323 12
WSII_6d 773 323 12
WSII_7a 525 344 12
WSII_7b 608 344 12
WSII_7c 690 344 12
WSII_7d 773 344 12
WSII_8a 525 370 12
WSII_8b 608 370 12
WSII_8c 690 370 12
WSII_8d 773 370 12
WSII_9a 525 404 12
WSII_9b 608 404 12
WSII_9c 690 404 12
WSII_9d 773 404 12
WSII_10a 525 513 12
WSII_10b 608 513 12
WSII_11a 525 564 12
WSII_11b 608 564 12
WSII_12a 525 641 12
WSII_12b 608 641 12
WSII_12c 690 641 12
WSII_12d 773 641 12
WSII_13a 525 692 12
WSII_13b 608 692 12
WSII_13c 690 692 12
WSII_13d 773 692 12
WSII_14 773 735 12
FAIWS_1a 480 1022
FAIWS_1b 590 1022
FAIWS_1c 700 1022
FAIWS_1d 810 1022
FAIWS_3a 480 1085
FAIWS_3b 590 1085
FAIWS_3c 700 1085
FAIWS_3d 810 1085
Page 6
FontSz 8
L6WS_1a 312 102 6
L6WS_1b 752 102 6
L6WS_1c 312 671 6
L6WS_1d 752 671 6
L6WS_2a 312 158 6
L6WS_2b 752 158 6
L6WS_2c 312 726 6
L6WS_2d 752 726 6
L6WS_3a 312 177 6
L6WS_3b 752 177 6
L6WS_3c 312 745 6
L6WS_3d 752 745 6
L6WS_4a 312 204 6
L6WS_4b 752 204 6
L6WS_4c 312 772 6
L6WS_4d 752 772 6
L6WS_5a 312 231 6
L6WS_5b 752 231 6
L6WS_5c 312 799 6
L6WS_5d 752 799 6
L6WS_6a 312 305 6
L6WS_6b 752 305 6
L6WS_6c 312 873 6
L6WS_6d 752 873 6
L6WS_7a 312 333 6
L6WS_7b 752 333 6
L6WS_7c 312 901 6
L6WS_7d 752 901 6
L6WS_8a 312 377 6
L6WS_8b 752 377 6
L6WS_8c 312 945 6
L6WS_8d 752 945 6
L6WS_9a 312 422 6
L6WS_9b 752 422 6
L6WS_9c 312 990 6
L6WS_9d 752 990 6
L6WS_10a 312 437 6
L6WS_10b 752 437 6
L6WS_10c 312 1009 6
L6WS_10d 752 1009 6
L6WS_11a 312 463 6
L6WS_11b 752 463 6
L6WS_11c 312 1033 6
L6WS_11d 752 1033 6
L6WS_12a 312 493 6
L6WS_12b 752 493 6
L6WS_12c 312 1063 6
L6WS_12d 752 1063 6
L6WS_13a 312 536 6
L6WS_13b 752 536 6
L6WS_13c 312 1107 6
L6WS_13d 752 1107 6

Some files were not shown because too many files have changed in this diff Show More