home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / VISIONS.ZIP / DEMOFORM.C next >
Text File  |  1990-05-20  |  23KB  |  572 lines

  1. /*------------------------- DEMOFORM.C -------------------------*/
  2. /*                                                              */
  3. /*  This file contains the VISIONS FORM LIBRARY DEMO software.  */
  4. /*                                                              */
  5. /*         Copyright 1990 Dan Vogel & David Bernazzani          */
  6. /*                                                              */
  7. /*   Date        Initials        Comments                       */
  8. /*                                                              */
  9. /*  03/07/90       DCV     Initial Release 0.00                 */
  10. /*--------------------------------------------------------------*/
  11.  
  12. #include <stdio.h>
  13. #include <ctype.h>
  14. #include "USERFORM.H"
  15. #include "DEMOPROT.H"
  16.  
  17. static char *cnotice="VISIONS Copyright 1990 Dan Vogel & David Bernazzani";
  18.  
  19. /*--------------------------------------------------------------*/
  20.  
  21.  
  22.  
  23. /*----------------------------------------------*/
  24. /*                 Run_Form                     */
  25. /* This is the form library demonstration code. */
  26. /* This demonstration creates several different */
  27. /* forms that may be used to generate an order  */
  28. /* for VISIONS registration or source code.     */
  29. /*----------------------------------------------*/
  30. int Run_Form()
  31. {
  32.    FORM_HEAD *name_form, *order_form, *format_form, *bill_form;
  33.    FILE *o_file;
  34.    char name[35];
  35.    char address1[35];
  36.    char address2[35];
  37.    char city[16];
  38.    char state[3];
  39.    char zipcode[6];
  40.    char donation[4];
  41.    char list_ord[2], window_ord[2], menu_ord[2], form_ord[2], all_ord[2];
  42.    char registration[2], print_order[2];
  43.    char format_DD5[2], format_HD5[2], format_DD3[2];
  44.    char num_print[5];
  45.    unsigned long total_bill=0L;
  46.    long int reg_cost;
  47.    unsigned tax_doll, tax_cent;
  48.    int result;
  49.  
  50.    /*------------------------------------------*/
  51.    /* Create the various forms used to enter   */
  52.    /* address, order, and billing information. */
  53.    /*------------------------------------------*/
  54.    CreateNameForm(&name_form,name,address1,address2,city,state,zipcode);
  55.    CreateOrderForm(&order_form,list_ord,window_ord,menu_ord,form_ord,all_ord);
  56.    CreateFormatForm(&format_form,format_DD5,format_HD5,format_DD3);
  57.    CreateBillForm(&bill_form,donation,registration,print_order);
  58.  
  59.    /*----------------------------------------*/
  60.    /* Now execute each form, but allow the   */
  61.    /* user to abort with an ESC at any time. */
  62.    /*----------------------------------------*/
  63.    if ((result = FormEntry(name_form)) != -1)
  64.    {
  65.       if ((result = FormEntry(order_form)) != -1)
  66.       {
  67.          if ((result = FormEntry(format_form)) != -1)
  68.          {
  69.             result = FormEntry(bill_form);
  70.             if ((result != -1) && (toupper(print_order[0]) == 'Y'))
  71.             {
  72.                /*---------------------------------------*/
  73.                /* Print the order on LPT1 if the        */
  74.                /* user has set the print order request. */
  75.                /*---------------------------------------*/
  76.                o_file = fopen("LPT1","w");
  77.                fprintf(o_file,"                VISIONS Ordering Form\n\n");
  78.                fprintf(o_file,"   For: %s\n",name);
  79.                fprintf(o_file,"        %s\n",address1);
  80.                if (strlen(address2) > 0)
  81.                   fprintf(o_file,"        %s\n",address2);
  82.                fprintf(o_file,"        %s, %s, %s\n\n",city,state,zipcode);
  83.                fprintf(o_file," I wish to order the following:\n\n");
  84.                if ((list_ord[0] >= '1') && (list_ord[0] <= '9'))
  85.                {
  86.                   format_num(((long)(list_ord[0]-'0')*45L),4,num_print);
  87.                   fprintf(o_file,"     %c copies of the list sources    ($ 45.00 each)  $%s.00\n",list_ord[0],num_print);
  88.                   total_bill = total_bill + (unsigned long)((int)(list_ord[0]-'0')*45) * 100L;
  89.                }
  90.                if ((window_ord[0] >= '1') && (window_ord[0] <= '9'))
  91.                {
  92.                   format_num(((long)(window_ord[0]-'0')*45L),4,num_print);
  93.                   fprintf(o_file,"     %c copies of the window sources  ($ 45.00 each)  $%s.00\n",window_ord[0],num_print);
  94.                   total_bill = total_bill + (unsigned long)((int)(window_ord[0]-'0')*45) * 100L;
  95.                }
  96.                if ((menu_ord[0] >= '1') && (menu_ord[0] <= '9'))
  97.                {
  98.                   format_num(((long)(menu_ord[0]-'0')*45L),4,num_print);
  99.                   fprintf(o_file,"     %c copies of the menu sources    ($ 45.00 each)  $%s.00\n",menu_ord[0],num_print);
  100.                   total_bill = total_bill + (unsigned long)((int)(menu_ord[0]-'0')*45) * 100L;
  101.                }
  102.                if ((form_ord[0] >= '1') && (form_ord[0] <= '9'))
  103.                {
  104.                   format_num(((long)(form_ord[0]-'0')*45L),4,num_print);
  105.                   fprintf(o_file,"     %c copies of the form sources    ($ 45.00 each)  $%s.00\n",form_ord[0],num_print);
  106.                   total_bill = total_bill + (unsigned long)((int)(form_ord[0]-'0')*45) * 100L;
  107.                }
  108.                if ((all_ord[0] >= '1') && (all_ord[0] <= '9'))
  109.                {
  110.                   format_num(((long)(all_ord[0]-'0')*149L),4,num_print);
  111.                   fprintf(o_file,"     %c copies of all the sources     ($149.00 each)  $%s.00\n",all_ord[0],num_print);
  112.                   total_bill = total_bill + (unsigned long)((int)(all_ord[0]-'0')*149) * 100L;
  113.                }
  114.                if (toupper(registration[0]) == 'X')
  115.                {
  116.                   reg_cost = 75L-(total_bill/100L);
  117.                   if (reg_cost < 0L)
  118.                      reg_cost = 0L;
  119.                   format_num((long)reg_cost,4,num_print);
  120.                   fprintf(o_file,"     Registration fee                ($ 75.00)       $%s.00\n",num_print);
  121.                   if (total_bill < 7500L)
  122.                      total_bill = 7500L;
  123.                }
  124.                if ((toupper(state[0]) == 'M') && (toupper(state[1]) == 'A'))
  125.                {
  126.                   tax_doll = total_bill / 20L;
  127.                   tax_cent = tax_doll % 100L;
  128.                   tax_doll = tax_doll / 100L;
  129.                   format_num((long)tax_doll,4,num_print);
  130.                   fprintf(o_file,"     State sales tax                 (5%c)            $%s.%2.2d\n",'%',num_print,tax_cent);
  131.                   total_bill = total_bill + tax_doll * 100L + tax_cent;
  132.                }
  133.                if (strlen(donation) > 0)
  134.                {
  135.                   format_num((long)atol(donation),4,num_print);
  136.                   fprintf(o_file,"     Donation                                        $%s.00\n",num_print);
  137.                   total_bill = total_bill + (atol(donation) * 100L);
  138.                }
  139.                format_num((long)(total_bill/100L),4,num_print);
  140.                fprintf(o_file,"     Total                                           $%s.%2.2d\n",num_print,(int)(total_bill % 100L));
  141.  
  142.                if (toupper(format_DD5[0]) == 'X')
  143.                   fprintf(o_file,"\n  Send diskettes in 5 1/4 DD (360K) format.\n");
  144.                else
  145.                   if (toupper(format_HD5[0]) == 'X')
  146.                      fprintf(o_file,"\n  Send diskettes in 5 1/4 HD (1.2M) format.\n");
  147.                   else
  148.                      if (toupper(format_DD3[0]) == 'X')
  149.                         fprintf(o_file,"\n  Send diskettes in 3 1/2 DD (720K) format.\n");
  150.  
  151.                fprintf(o_file,"\n        Mail to:\n");
  152.                fprintf(o_file,"            VISIONS\n");
  153.                fprintf(o_file,"            c\\o Dan Vogel\n");
  154.                fprintf(o_file,"            5 Richard Road\n");
  155.                fprintf(o_file,"            Randolph, MA 02368\n");
  156.                fprintf(o_file,"\n        Please make checks payable to Dan Vogel.\n");
  157.  
  158.                fclose(o_file);
  159.             }
  160.          }
  161.       }
  162.    }
  163.  
  164.    DeleteForm(name_form);    /*Destroy the forms that were used. */
  165.    DeleteForm(order_form);
  166.    DeleteForm(format_form);
  167.    DeleteForm(bill_form);
  168.  
  169.    return(0);
  170. }
  171.  
  172.  
  173.  
  174. /*-----------------------------------------------*/
  175. /*               CreateNameForm                  */
  176. /* This routine creates a form used for entering */
  177. /* the name and address of the user.             */
  178. /*-----------------------------------------------*/
  179. CreateNameForm(name_form,name,address1,address2,city,state,zipcode)
  180. FORM_HEAD **name_form;
  181. char *name;
  182. char *address1;
  183. char *address2;
  184. char *city;
  185. char *state;
  186. char *zipcode;
  187. {
  188.    FORM_FIELD *field_ptr;
  189.  
  190.    /*-------------------------------------------------------------------*/
  191.    /* Define the basic form: location, border style, colors, and title. */
  192.    /*-------------------------------------------------------------------*/
  193.    DefineForm(name_form,5,5,11,70,
  194.       DOUBLEBORDER,TEXT_BLUE,TEXT_WHITE,"VISIONS Address Form");
  195.    /*------------------------------*/
  196.    /* Add a form record (field).   */
  197.    /* This field allows any input. */
  198.    /*------------------------------*/
  199.    AddToForm(*name_form, NULL, &field_ptr);
  200.    /*-------------------------------*/
  201.    /* Now fill in the record with a */
  202.    /* prompt and a text entry area. */
  203.    /* Both prompt and text areas    */
  204.    /* have their own color specs.   */
  205.    /*-------------------------------*/
  206.    AddToPrompt(field_ptr, 5, 8, 5, 
  207.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"Name:");
  208.    strcpy(name,"");   /* Set the default value to NULL. */
  209.    AddToText(field_ptr, 5, 17, 34, 
  210.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,name);
  211.  
  212.    /*------------------------------------*/
  213.    /* And create the rest of the fields. */
  214.    /*------------------------------------*/
  215.    AddToForm(*name_form, NULL, &field_ptr);
  216.    AddToPrompt(field_ptr, 6, 8, 9, 
  217.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"Address:");
  218.    strcpy(address1,"");
  219.    AddToText(field_ptr, 6, 17, 34,
  220.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,address1);
  221.  
  222.    AddToForm(*name_form, NULL, &field_ptr);
  223.    strcpy(address2,"");            /* This is a field without a prompt! */
  224.    AddToText(field_ptr, 7, 17, 34,
  225.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,address2);
  226.  
  227.    AddToForm(*name_form, NULL, &field_ptr);
  228.    AddToPrompt(field_ptr, 8, 8, 5, 
  229.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"City:");
  230.    strcpy(city,"");
  231.    AddToText(field_ptr, 8, 17, 15,
  232.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,city);
  233.  
  234.    AddToForm(*name_form, NULL, &field_ptr);
  235.    AddToPrompt(field_ptr, 8, 33, 6, 
  236.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"State:");
  237.    strcpy(state,"");
  238.    AddToText(field_ptr, 8, 40, 2,
  239.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,state);
  240.  
  241.    /*----------------------------------------*/
  242.    /* This field requires integer input only.*/
  243.    /*----------------------------------------*/
  244.    AddToForm(*name_form, *IntOnly, &field_ptr);
  245.    AddToPrompt(field_ptr, 8, 44, 8, 
  246.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"Zipcode:");
  247.    strcpy(zipcode,"");
  248.    AddToText(field_ptr, 8, 53, 5,
  249.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,zipcode);
  250.  
  251.    AddToForm(*name_form, NULL, &field_ptr); /* A field without text entry. */
  252.    AddToPrompt(field_ptr, 10, 12, 41, 
  253.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  254.       "Hit Esc to exit, or Enter to accept form.");
  255.  
  256.    return(0);
  257. }
  258.  
  259.  
  260.  
  261. /*-----------------------------------------------*/
  262. /*              CreateOrderForm                  */
  263. /* This routine creates a form used for entering */
  264. /* the source code orders by a user.             */
  265. /*-----------------------------------------------*/
  266. CreateOrderForm(order_form,list_ord,window_ord,menu_ord,form_ord,all_ord)
  267. FORM_HEAD **order_form;
  268. char *list_ord, *window_ord, *menu_ord, *form_ord, *all_ord;
  269. {
  270.    FORM_FIELD *field_ptr;
  271.  
  272.    /*-------------------------------------------------------------------*/
  273.    /* Define the basic form: location, border style, colors, and title. */
  274.    /*-------------------------------------------------------------------*/
  275.    DefineForm(order_form,7,5,15,50,DOUBLEBORDER,
  276.       TEXT_BLUE,TEXT_WHITE,"VISIONS Order Form");
  277.    /*----------------------------*/
  278.    /* Add a form record (field). */
  279.    /*----------------------------*/
  280.    AddToForm(*order_form, *IntOnly, &field_ptr);
  281.    /*-------------------------------*/
  282.    /* Now fill in the record with a */
  283.    /* prompt and a text entry area. */
  284.    /* Both prompt and text areas    */
  285.    /* have their own color specs.   */
  286.    /*-------------------------------*/
  287.    AddToPrompt(field_ptr, 5, 8, 19, 
  288.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"List Sources($ 45):");
  289.    strcpy(list_ord,"");
  290.    AddToText(field_ptr, 5, 36, 1,
  291.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,list_ord);
  292.  
  293.    /*------------------------------------*/
  294.    /* And create the rest of the fields. */
  295.    /*------------------------------------*/
  296.    AddToForm(*order_form, *IntOnly, &field_ptr);
  297.    AddToPrompt(field_ptr, 6, 8, 21, 
  298.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"Window Sources($ 45):");
  299.    strcpy(window_ord,"");
  300.    AddToText(field_ptr, 6, 36, 1,
  301.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,window_ord);
  302.  
  303.    AddToForm(*order_form, *IntOnly, &field_ptr);
  304.    AddToPrompt(field_ptr, 7, 8, 19, 
  305.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"Menu Sources($ 45):");
  306.    strcpy(menu_ord,"");
  307.    AddToText(field_ptr, 7, 36, 1,
  308.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,menu_ord);
  309.  
  310.    AddToForm(*order_form, *IntOnly, &field_ptr);
  311.    AddToPrompt(field_ptr, 8, 8, 19, 
  312.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"Form Sources($ 45):");
  313.    strcpy(form_ord,"");
  314.    AddToText(field_ptr, 8, 36, 1,
  315.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,form_ord);
  316.  
  317.    AddToForm(*order_form, *IntOnly, &field_ptr);
  318.    AddToPrompt(field_ptr, 9, 8, 26, 
  319.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  320.       "All VISIONS Sources($145):");
  321.    strcpy(all_ord,"");
  322.    AddToText(field_ptr, 9, 36, 1,
  323.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,all_ord);
  324.  
  325.    AddToForm(*order_form, NULL, &field_ptr);
  326.    AddToPrompt(field_ptr, 11, 4, 42, 
  327.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  328.       "Please enter the quantity of each package.");
  329.  
  330.    AddToForm(*order_form, NULL, &field_ptr);
  331.    AddToPrompt(field_ptr, 13, 5, 41, 
  332.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  333.       "Hit Esc to exit, or Enter to accept form.");
  334.  
  335.    return(0);
  336. }
  337.  
  338.  
  339. /*-----------------------------------------------*/
  340. /*              CreateFormatForm                 */
  341. /* This routine creates a form used for entering */
  342. /* the required diskette format for ordered      */
  343. /* sources and library copies.                   */
  344. /*-----------------------------------------------*/
  345. CreateFormatForm(format_form,format_DD5,format_HD5,format_DD3)
  346. FORM_HEAD **format_form;
  347. char *format_DD5, *format_HD5, *format_DD3;
  348. {
  349.    FORM_FIELD *field_ptr;
  350.  
  351.    /*-------------------------------------------------------------------*/
  352.    /* Define the basic form: location, border style, colors, and title. */
  353.    /*-------------------------------------------------------------------*/
  354.    DefineForm(format_form,7,5,12,45,DOUBLEBORDER,
  355.       TEXT_BLUE,TEXT_WHITE,"VISIONS Format Form");
  356.    /*----------------------------*/
  357.    /* Add a form record (field). */
  358.    /*----------------------------*/
  359.    AddToForm(*format_form, *XOnly, &field_ptr);
  360.    /*-------------------------------*/
  361.    /* Now fill in the record with a */
  362.    /* prompt and a text entry area. */
  363.    /* Both prompt and text areas    */
  364.    /* have their own color specs.   */
  365.    /*-------------------------------*/
  366.    AddToPrompt(field_ptr, 6, 12, 15, 
  367.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"5 1/4-DD (360K)");
  368.    strcpy(format_DD5,"");
  369.    AddToText(field_ptr, 6, 29, 1,
  370.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,format_DD5);
  371.  
  372.    /*------------------------------------*/
  373.    /* And create the rest of the fields. */
  374.    /*------------------------------------*/
  375.    AddToForm(*format_form, NULL, &field_ptr);
  376.    AddToPrompt(field_ptr, 4, 86, 21, 
  377.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"Diskette Media Format");
  378.  
  379.    AddToForm(*format_form, NULL, &field_ptr);
  380.    AddToPrompt(field_ptr, 5, 10, 21, 
  381.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"X the appropriate box");
  382.  
  383.    AddToForm(*format_form, *XOnly, &field_ptr);
  384.    AddToPrompt(field_ptr, 7, 12, 15, 
  385.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"5 1/4-HD (1.2M)");
  386.    strcpy(format_HD5,"");
  387.    AddToText(field_ptr, 7, 29, 1,
  388.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,format_HD5);
  389.  
  390.    AddToForm(*format_form, *XOnly, &field_ptr);
  391.    AddToPrompt(field_ptr, 8, 12, 15, 
  392.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,"3 1/2-DD (720K)");
  393.    strcpy(format_DD3,"");
  394.    AddToText(field_ptr, 8, 29, 1,
  395.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,format_DD3);
  396.  
  397.    AddToForm(*format_form, NULL, &field_ptr);
  398.    AddToPrompt(field_ptr, 10, 3, 41, 
  399.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  400.       "Hit Esc to exit, or Enter to accept form.");
  401.  
  402.    return(0);
  403. }
  404.  
  405.  
  406.  
  407. /*-----------------------------------------------*/
  408. /*               CreateBillForm                  */
  409. /* This routine creates a form used for entering */
  410. /* any donation amounts, registering the library,*/
  411. /* any generating a printed order form.          */
  412. /*-----------------------------------------------*/
  413. CreateBillForm(bill_form,donation,registration,print_order)
  414. FORM_HEAD **bill_form;
  415. char *donation, *registration, *print_order;
  416. {
  417.    FORM_FIELD *field_ptr;
  418.  
  419.    /*-------------------------------------------------------------------*/
  420.    /* Define the basic form: location, border style, colors, and title. */
  421.    /*-------------------------------------------------------------------*/
  422.    DefineForm(bill_form,9,5,12,46,DOUBLEBORDER,
  423.       TEXT_BLUE,TEXT_WHITE,"VISIONS Billing Form");
  424.    /*----------------------------*/
  425.    /* Add a form record (field). */
  426.    /*----------------------------*/
  427.    AddToForm(*bill_form, *IntOnly, &field_ptr);
  428.    /*-------------------------------*/
  429.    /* Now fill in the record with a */
  430.    /* prompt and a text entry area. */
  431.    /* Both prompt and text areas    */
  432.    /* have their own color specs.   */
  433.    /*-------------------------------*/
  434.    AddToPrompt(field_ptr, 5, 8, 29, 
  435.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  436.       "Donation:             $   .00");
  437.    strcpy(donation,"");
  438.    AddToText(field_ptr, 5, 31, 3,
  439.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,donation);
  440.  
  441.    /*------------------------------------*/
  442.    /* And create the rest of the fields. */
  443.    /*------------------------------------*/
  444.    AddToForm(*bill_form, *XOnly, &field_ptr);
  445.    AddToPrompt(field_ptr, 6, 8, 27, 
  446.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  447.       "Registration (X or blank): ");
  448.    strcpy(registration,"");
  449.    AddToText(field_ptr, 6, 35, 1,
  450.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,registration);
  451.  
  452.    AddToForm(*bill_form, *YNOnly, &field_ptr);
  453.    AddToPrompt(field_ptr, 8, 8, 33, 
  454.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  455.       "Print an order to LPT1 (Y or N)? ");
  456.    strcpy(print_order,"");
  457.    AddToText(field_ptr, 8, 41, 1,
  458.       TEXT_WHITE,TEXT_BLACK,TEXT_BLACK,TEXT_WHITE,print_order);
  459.  
  460.    AddToForm(*bill_form, NULL, &field_ptr);
  461.    AddToPrompt(field_ptr, 10, 3, 41, 
  462.       TEXT_BLUE,TEXT_WHITE,TEXT_WHITE,TEXT_BLUE,
  463.       "Hit Esc to exit, or Enter to accept form.");
  464.  
  465.    return(0);
  466. }
  467.  
  468.  
  469.  
  470. /*---------------------------------------------------------------*/
  471. /*                        format_num                             */
  472. /* This routine is used for genarating formatted numeric output. */
  473. /* The number received, num, is converted into a string, digits, */
  474. /* characters long with leading spaces intead of zeroes.  This   */
  475. /* string is placed into the passed num_print character array.   */
  476. /*---------------------------------------------------------------*/
  477. int format_num(num,digits,num_print)
  478. long num;
  479. int digits;
  480. char *num_print;
  481. {
  482.    int i, j;
  483.    char dummy[11];
  484.  
  485.    sprintf(dummy,"%10.10ld",num);
  486.    j = 11;
  487.    for (i = digits;i >= 0; i--)
  488.       num_print[i] = dummy[j--];
  489.    for (i = 0; (i < digits) && (num_print[i] == '0'); i++)
  490.       num_print[i] = ' ';
  491.    return(0);
  492. }
  493.  
  494.  
  495.  
  496. /*-----------------------------------------------------------*/
  497. /*                        IntOnly                            */
  498. /* This is a field input validation routine.  This routine   */
  499. /* requires that all input for its string field be integers. */
  500. /* Leadings spaces are allowed.                              */
  501. /*-----------------------------------------------------------*/
  502. int IntOnly(string)
  503. char *string;
  504. {
  505.    int leading_space = -1;   /* Have not seen first digit. */
  506.    int i;
  507.  
  508.    for (i=0; i<strlen(string); i++)
  509.    {
  510.       if (string[i] == ' ')
  511.       {
  512.          if (leading_space == 0)  /* Seen first digit? */
  513.             leading_space = 1;    /* Yes now must be spaces! */
  514.       }
  515.       else
  516.       {
  517.          if (leading_space == 1)  /* Digit after trailing space? */
  518.             return(-1);           /* Yes, error */
  519.          if (leading_space == -1)
  520.             leading_space++;
  521.          if (isdigit(string[i]) == 0)
  522.             return(-1);
  523.       }      
  524.    }
  525.    return(0);
  526. }
  527.  
  528.  
  529.  
  530.  
  531. /*-----------------------------------------------------------*/
  532. /*                          XOnly                            */
  533. /* This is a field input validation routine.  This routine   */
  534. /* requires that the input for its string field be either a  */
  535. /* space or an x, either upper or lower case.  Lower case    */
  536. /* entry is converted to upper case.                         */
  537. /*-----------------------------------------------------------*/
  538. int XOnly(string)
  539. char *string;
  540. {
  541.    if (string[0] == 'x')
  542.       string[0] = 'X';
  543.    if ((string[0] == 'X') || (string[0] == ' '))
  544.       return(0);
  545.    return(-1);
  546. }
  547.  
  548.  
  549.  
  550.  
  551. /*-----------------------------------------------------------*/
  552. /*                         YNOnly                            */
  553. /* This is a field input validation routine.  This routine   */
  554. /* requires that the input for its string field be either a  */
  555. /* space or an n, or a y, either upper or lower case.  Lower */
  556. /* case entry is converted to upper case.  A space is        */
  557. /* converted to an N.                                        */
  558. /*-----------------------------------------------------------*/
  559. int YNOnly(string)
  560. char *string;
  561. {
  562.    if (string[0] == ' ')
  563.       string[0] = 'N';
  564.    if (string[0] == 'y')
  565.       string[0] = 'Y';
  566.    if (string[0] == 'n')
  567.       string[0] = 'N';
  568.    if ((string[0] == 'Y') || (string[0] == 'N'))
  569.       return(0);
  570.    return(-1);
  571. }
  572.