irs forms and this years tax solver
This commit is contained in:
BIN
Binary file not shown.
+148
@@ -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.
|
||||
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
set GTK_THEME=Adwaita:dark
|
||||
set path=bin;%PATH%
|
||||
ots_gui3.exe
|
||||
@@ -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.
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.
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.
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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
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.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
+1093
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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
@@ -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".
|
||||
|
||||
@@ -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".
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
+107
@@ -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)
|
||||
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
+2792
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
+157
@@ -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).
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
@@ -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
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user