home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 135 / af135a.adf / AmiCheck.lzx / AmiCheck / Source / dataBase.h < prev    next >
C/C++ Source or Header  |  2012-08-17  |  12KB  |  506 lines

  1. #ifndef DATABASE_H
  2. #define DATABASE_H
  3. /************************************************
  4. * dataBase.h
  5. *
  6. *       This header defines externals and 
  7. *       prototypes, etc. for dataBase.c lib.
  8. *
  9. ************************************************/
  10. #include <stdio.h>
  11. #include <libraries/guifront.h>
  12. #include <proto/guifront.h>
  13. #include <clib/exec_protos.h>
  14.  
  15. #define FILESIZE    100
  16. #define MAXMACROS    10
  17.  
  18. #define FILTERNA    0
  19. #define FILTERYES    1
  20. #define FILTERNO    2
  21. #define FILTERIN    1
  22. #define FILTEROUT    2
  23.  
  24. #define DEFAULT_TEMPS    4
  25. #define DEFAULT_CATS    1
  26.  
  27. #define STRINGSIZE      71
  28. #define DATESIZE        12
  29. #define TEMPNAMESIZE    31
  30. #define CATNAMESIZE    31
  31. #define AMNTSIZE    16
  32. #define CHECKSIZE    7
  33.  
  34. #define CHECKTYPE    0
  35. #define WITHDRAWALTYPE    1
  36. #define DEPOSITTYPE    2
  37. #define SCRIPTTYPE    3
  38.  
  39. /* flags */
  40. #define PRINTED        0x01
  41. #define CLEARED        0x02
  42. #define VOIDED        0x04
  43. #define RECONCILED    0x08
  44. #define TAXDEDUCT    0x10
  45.  
  46. /* sort entry defines */
  47. #define SORTENTRIES    6
  48. #define SORTCHECK    0
  49. #define SORTDATE    1
  50. #define SORTAMNT    2
  51. #define SORTNAME    3
  52. #define SORTMEMO    4
  53. #define SORTCATEGORY    5
  54.  
  55. #define SORTASCEND    0
  56. #define SORTDESCEND    1
  57.  
  58. /* voucher types */
  59. #define VT_NONE         0
  60. #define VT_LEFTRIGHT    1
  61. #define VT_ABOVEBELOW   2
  62. #define VT_TWOBELOW     3
  63. #define VT_ABOVE        4
  64. #define VT_BELOW        5
  65.  
  66. #define NUMCHECKFORMS    10
  67.  
  68. /* date formats */
  69. #define DATE_MMDDYY    0
  70. #define DATE_DDMMYY    1
  71. #define DATE_DEC_12    2
  72. #define DATE_12_DEC    3
  73.  
  74. /* max decimal places */
  75. #define MAXDECIMAL 4
  76.  
  77. /* macro for copylist routine */
  78. #define STROFF(nodedef,nodefield) ((UWORD)((char *)( ((nodedef *)0)-> nodefield ) - (char *)( (nodedef *)0)))
  79.  
  80.  
  81. /* amount structure */
  82. typedef  ULONG amountType;
  83.  
  84. /* balance type (not to be confused with amount! */
  85. typedef struct {
  86.     ULONG dollar;    /* not really dollar, but so I can read it clearly */
  87.     UWORD cent;    /* ditto, normally.. remainder? */
  88.     UBYTE neg;    /* negative or positive... */
  89. } balanceType;
  90.  
  91. /* stateVariables */
  92. struct stateVars {
  93.     balanceType currAmnt;
  94.     balanceType stateAmnt;
  95.     UWORD currTemplate;
  96.     UWORD currCheckNumber;
  97. };
  98.  
  99. /* NetInformation */
  100. struct netInfoVars {
  101.     balanceType taxdeductcurr;
  102.     balanceType taxdeductstate;
  103.     balanceType currAmnt;
  104.     balanceType stateAmnt;
  105.     UBYTE decimal;
  106. };
  107.  
  108. /* date structure */
  109. typedef struct {
  110.     UBYTE day;
  111.     UBYTE month;
  112.     USHORT year;
  113. } dateType;
  114.  
  115. typedef struct {
  116.     UBYTE line1[STRINGSIZE];
  117.     UBYTE line2[STRINGSIZE];
  118.     UBYTE line3[STRINGSIZE];
  119.     UBYTE line4[STRINGSIZE];
  120. } addressType;
  121.  
  122. /* arexx macro structure */
  123. typedef struct {
  124.     char macroname[20+1];
  125.     char macrofile[FILESIZE+1];
  126. } arexxNode;
  127.  
  128. /* script structure */
  129. typedef struct {
  130.     struct Node node;
  131.     char scname[TEMPNAMESIZE];
  132. } scriptNode;
  133.  
  134. /* networth structure */
  135. typedef struct {
  136.     struct Node node;
  137.     char acname[100];
  138.     char actype;
  139.     struct netInfoVars balances;
  140. } netNode;
  141.  
  142. /* a category structure */
  143. typedef struct {
  144.     struct Node node;
  145.     char     catname[CATNAMESIZE];
  146.     char    color;
  147.     char     linestyle;
  148. } categoryNode;
  149.  
  150. /* A budget group structure */
  151. typedef struct {
  152.     struct Node node;
  153.     char groupname[CATNAMESIZE];
  154.     struct List catlist;
  155. } groupNode;
  156.  
  157. /* a budget item */
  158. typedef struct {
  159.     struct Node node;
  160.     UBYTE catname[CATNAMESIZE];
  161.     amountType amount;
  162. } budgetNode;
  163.  
  164. /* an item node */
  165. typedef struct {
  166.         struct  MinNode node;
  167.     WORD    type;
  168.         
  169.         UWORD   check;
  170.         char    name[STRINGSIZE];
  171.         char    memo[STRINGSIZE];
  172.  
  173.     dateType date;                
  174.     amountType amount;   
  175.        
  176.     UBYTE    flags;
  177.  
  178.     char category[CATNAMESIZE];
  179. #if 0
  180.     struct List budgetlist;
  181.     addressType address;
  182. #endif
  183. } entryNode;
  184.  
  185. /* a template structure */
  186. typedef struct {
  187.     struct Node node;
  188.         char    tempname[TEMPNAMESIZE];
  189.         entryNode template;                
  190. } templateNode;
  191.  
  192. /* a filter structure */
  193. typedef struct {
  194.     struct MinNode node;
  195.     entryNode *entry;
  196.     long printChars[4];
  197.     balanceType runningBal;
  198.     balanceType filterBal;
  199. } filterNode;
  200.  
  201. typedef struct {
  202.  
  203.     /* types */
  204.     BOOL    checks;
  205.     BOOL    withdrawals;
  206.     BOOL    deposits;
  207.  
  208.     /* type state(s) */
  209.     UBYTE    andflag;    /* AND set */
  210.     UBYTE    notflag;    /* NOT set */
  211.  
  212.     /* ranges */
  213.     UBYTE    checkrange; /* flag ->0, 1=in, 2=out */
  214.     UWORD    checkfrom;
  215.     UWORD    checkto;
  216.  
  217.     UBYTE    amntrange; /* flag -> 0, 1=in, 2=out */
  218.     amountType amountFrom;
  219.     amountType amountTo;
  220.  
  221.     UBYTE    daterange; /* flag -> 0, 1=in, 2=out */
  222.     dateType dateFrom;
  223.     dateType dateTo;
  224.  
  225.     /* budget */
  226.     UBYTE    usecategory; /* flags -> 0, 1=in, 2=out */
  227.     UBYTE    category[CATNAMESIZE+1];
  228.  
  229.     /* storage */
  230.     UBYTE    printcode, taxcode, voidcode, reconcilecode, clearcode;    
  231.  
  232.     /* fields */
  233.     UBYTE    usepayee, usememo;
  234.     char     payee[STRINGSIZE+1], memo[STRINGSIZE+1];
  235.     char    payeetoken[STRINGSIZE*2 + 2], memotoken[STRINGSIZE*2+2];
  236.  
  237. } filterSetting;
  238.     
  239.  
  240. /* sort structures */
  241. typedef struct {
  242.     struct Node node;
  243.     char field[STRINGSIZE+1];
  244.     UBYTE  order;
  245.     UBYTE index;
  246. } sortNode;
  247.  
  248. typedef struct {
  249.     BOOL     check;
  250.     BOOL    memo;
  251.     BOOL    name;
  252.     BOOL    amnt;
  253.     BOOL    date;
  254.     BOOL    category;
  255. } sortState;
  256.  
  257. /* account global info structure */
  258. typedef struct {
  259.     char accnt[STRINGSIZE];
  260.     char bank[STRINGSIZE];
  261.     char holder[STRINGSIZE];
  262.  
  263.     BOOL    negative;
  264.     amountType beginAmount;
  265.  
  266.     dateType openDate;
  267.  
  268.     BOOL closed;
  269.     dateType closeDate;
  270.  
  271.     UBYTE     decimal;
  272.     UWORD    checknumber;
  273. } accntState;
  274.  
  275. /* search criteria structure */
  276. typedef struct {
  277.     BOOL     check;
  278.     UWORD    checknum;
  279.  
  280.     BOOL    memo;
  281.     char    memostr[STRINGSIZE];
  282.     char     memostrtoken[STRINGSIZE*2 + 2];
  283.  
  284.     BOOL    name;
  285.     char    namestr[STRINGSIZE];
  286.     char     namestrtoken[STRINGSIZE*2 + 2];
  287.  
  288.     BOOL    amnt;
  289.     amountType amount;
  290.  
  291.     BOOL    date;
  292.     dateType searchdate;
  293.  
  294.     BOOL    category;
  295.     char    catstr[CATNAMESIZE];
  296.     char    catstrtoken[CATNAMESIZE*2 + 2];
  297.  
  298.     LONG    lastrow;
  299. } searchState;
  300.  
  301. /* special category edit structure */
  302. typedef struct {
  303.     categoryNode    new;
  304.     BOOL        oldnode;
  305.     categoryNode    original;
  306. } editCatNode;
  307.  
  308. /* report prefs */
  309. typedef struct {
  310.     UWORD rows;
  311.     UWORD cols;
  312.     UWORD style;
  313.     BOOL  tofile;
  314.     BOOL  state;
  315.     BOOL  summary;
  316.       BOOL  padline;
  317. } reportSetting;
  318.  
  319. /* quick-dates structure */
  320. typedef struct {
  321.     struct Node node;
  322.     char dateStr[DATESIZE];
  323.     dateType date;
  324. } dateNode;
  325.  
  326. /* quick-memos structure */
  327. typedef struct {
  328.     struct Node node;
  329.     char memoStr[STRINGSIZE];
  330. } memoNode;
  331.  
  332. /* quick-name structure */
  333. typedef struct {
  334.     struct Node node;
  335.     char nameStr[STRINGSIZE];
  336. } nameNode;
  337.  
  338. /* quick-amnt structure */
  339. typedef struct {
  340.     struct Node node;
  341.     char amntStr[STRINGSIZE];
  342. } amntNode;
  343.  
  344. /* check form structure */
  345. typedef struct {
  346.     BOOL    sheet_feed;
  347.     ULONG     lines_check;
  348.     ULONG    checks_page;
  349.     ULONG    pay_margin;
  350.     ULONG    pay_width;
  351.     ULONG    pay_line;
  352.     ULONG    date_margin;
  353.     ULONG    date_width;
  354.     ULONG    date_line;
  355.     ULONG    amnt_margin;
  356.     ULONG    amnt_width;
  357.     ULONG    amnt_line;
  358.     ULONG    memo_margin;
  359.     ULONG    memo_width;
  360.     ULONG    memo_line;
  361.     ULONG    voucher_type;
  362.     ULONG    voucher_margin;
  363.     ULONG    voucher_width;
  364.     ULONG    str_margin;
  365.     ULONG    str_width;
  366.     ULONG     str_line;
  367.  
  368.     /* new stuff */
  369.     ULONG    top_lines;
  370.        ULONG    columns;
  371.     ULONG    reserved;
  372. } checkForm;
  373.  
  374. typedef struct {
  375.     char    device[STRINGSIZE];
  376.     checkForm userForm;
  377.     checkForm forms[NUMCHECKFORMS];
  378. } formControl;
  379.  
  380. typedef struct {
  381.     ULONG checkNumber;
  382.     BOOL  autoVoid;
  383.     BOOL  printVoid;
  384.     ULONG checksPage1;
  385.     ULONG printMode;
  386. } printControl;
  387.  
  388. typedef void  (*funcptr)();
  389.  
  390. extern STRPTR fptlabels[];
  391. extern struct TagItem strCheckTags[];
  392. extern struct TagItem strAmntTags[];
  393. extern struct TagItem strDateTags[];
  394. extern struct TagItem strMemoTags[];
  395. extern struct TagItem strNameTags[];
  396. extern struct TagItem strTempTags[];
  397. extern struct TagItem strCatTags[];
  398. extern struct TagItem TxtBorder[];
  399. extern struct TagItem TxtNoBorder[];
  400. extern struct TagItem TxtZero[];
  401. extern struct TagItem TxtInt[];
  402. extern struct TagItem NumBorder[];
  403. extern struct TagItem ListView[];
  404. extern struct TagItem MiscButton[];
  405.  
  406. extern UWORD decimalModulos[];
  407. extern char easymonths[12][4];
  408. extern char daysinmonth[12];
  409. extern searchState searchControl;
  410. extern struct MinList entries, filtered;
  411. extern struct List templates, testtemps, memolist, datelist, namelist, amntlist;
  412. extern struct List categories, sortfields, grouplist;
  413.  
  414. extern arexxNode arexxMacros[MAXMACROS];
  415. extern printControl checkPrint;
  416. extern reportSetting reportControl;
  417. extern struct stateVars amntState;
  418. extern balanceType filtAmnt;
  419. extern BOOL amiChangedItems;
  420. extern accntState usrAccount;
  421. extern sortNode sortEntries[SORTENTRIES];
  422. extern sortState sortStates;
  423. extern filterSetting filterControl;
  424. extern dateType currDate;
  425. extern UWORD currCentury;
  426. extern UWORD entryCount;
  427. extern formControl checkForms;
  428. extern UWORD dateFormat;
  429.  
  430. void DataFreeList(struct List *);
  431. BOOL DataInit(void);
  432. BOOL DataAddTemp(struct List *,templateNode *);
  433. BOOL DataAddCat(struct List *, categoryNode *);
  434. void DataFreeAll(void);
  435. struct Node *DataOrd2Node(struct List *,LONG );
  436. LONG DataNode2Ord(struct List *,char *);
  437. void DataStoreAmnt(amountType *, char *);
  438. void DataBuildAmnt(BOOL, amountType *, char *);
  439. void DataBalConvert(balanceType *, UBYTE, UBYTE);
  440. void DataBalToAmnt(balanceType *, UBYTE *, amountType *);
  441. void DataBuildBal(UBYTE, balanceType *, char *);
  442. void DataInitBal(UBYTE, amountType *, balanceType *);
  443. void DataAddBal(UBYTE , amountType *, balanceType *);
  444. void DataBalAddBal(UBYTE decimal,balanceType *dest,balanceType *bal1, balanceType *bal2);
  445. int  DataCmpBal(BOOL, balanceType *, balanceType *);
  446. int DataCmpAmntBal(amountType *amnt, balanceType *bal);
  447. void DataCopyGroupList(struct List *, struct List *);
  448. void DataMoveList(struct List *, struct List *);
  449. BOOL DataIsUnique(GUIFront *gui, struct List *, char *, BOOL,char *);
  450. BOOL DataVerifyAmnt(char *, char *);
  451. BOOL DataVerifyDate(char *, char *);
  452. void DataStoreDate(dateType *, char *);
  453. void DataBuildDate(dateType *, char *);
  454. void DataAnnounce(GUIFront *gui, char *);
  455. void DataAnnounceDate(GUIFront *gui);
  456. void DataAnnounceAmount(GUIFront *gui);
  457. int DataQuery(GUIFront *gui, char*, char *);
  458. BOOL DataAddEntry(entryNode *, struct MinList *, filterNode **);
  459. BOOL DataInsertEntry(filterNode *,entryNode *,entryNode *, struct MinList *, filterNode **, entryNode **);
  460. BOOL DataAddFilter(filterNode **, entryNode *, struct MinList *);
  461. BOOL DataInsertFilter(filterNode *,filterNode **, entryNode *, struct MinList *);
  462. void DataBuildRegDate(dateType *, char *);
  463. BOOL DataTestFilter(entryNode *, filterSetting *);
  464. void DataListInit(void);
  465. void DataRemoveEntry(entryNode *, filterNode *);
  466. void DataRemoveFilter(filterNode *);
  467. void DataRemoveEntryFilter(entryNode *);
  468. void DataUpdateBal(UBYTE, amountType *, balanceType *, char *);
  469. void DataRebuildFilters(void);
  470. void DataSitNSpin(struct Gadget *, struct Window *);
  471. void DataMoveSort(struct List *, sortNode *, struct List *, sortNode *);
  472. balanceType DataReconcile(BOOL);
  473. void DataSortFilter(filterNode *, filterNode *, sortNode *);
  474. void DataCopyCatList(struct List *, struct List *);
  475. editCatNode *DataNewEditCat(struct List *, categoryNode *);
  476. void DataMoveCatList(struct List *);
  477. WORD DataSearchFilter(struct MinList *, searchState *);
  478. BOOL DataLoadFile(char *);
  479. BOOL DataSaveFile(char *, BOOL);
  480. WORD DataFindNode(struct List *,struct Node *);
  481. BOOL DataGetFileName(char *,short , char *, char *);
  482. void DataAttachIcon(char*, char *, char *);
  483. balanceType DataRunningBals(struct MinList *, struct MinList *);
  484. balanceType DataBalance(UBYTE, struct MinList *);
  485. BOOL DataSummarize(char *, netNode *);
  486. void DataFilterBalance(struct MinList *);
  487. void DataUpdateFilters(struct MinList *);
  488. struct Node *DataFindName(struct List *,char *);
  489. struct Node *DataGetNext(struct List *, struct Node *);
  490. void DataListUp(GUIFront *gui, struct Gadget *listgad, struct List *list, UWORD *listsel);
  491. void DataListDown(GUIFront *gui, struct Gadget *listgad, struct List *list, UWORD *listsel);
  492. void DataListBottom(GUIFront *gui, struct Gadget *listgad, 
  493.         struct List *list, UWORD *listsel, UWORD entries);
  494. void DataListTop(GUIFront *gui, struct Gadget *listgad, 
  495.         struct List *list, UWORD *listsel, UWORD topmargin);
  496. void DataListRemove(GUIFront *gui, struct Gadget *listgad, 
  497.         struct List *list, UWORD *listsel);
  498. UWORD DataCountNodes(struct List *);
  499. groupNode *DataNewGroup(struct List *gl, groupNode *grp);
  500. void DataFreeGroupCats(struct List *gl);
  501. void DataReplaceGroupCats(struct List *grps, struct List *new);
  502. void DataCopyList(struct List *src, struct List *dest, funcptr func);
  503. void DataCopyGroupList(struct List *src, struct List *dest);
  504.  
  505. #endif
  506.