home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / database / nyisam / actions.c next >
Encoding:
C/C++ Source or Header  |  1994-05-07  |  12.3 KB  |  417 lines

  1. /*-------------------------------------------------------------------------
  2.  File: actions4.c
  3.     actions taken place on the files
  4.  
  5.  Copyright (C) 1994 John Gambini
  6.  ------------------------------------------------------------------------*/
  7. #include <stdarg.h>
  8. #include <screen.h>
  9. #include <ism.h>
  10. #include <fields.h>
  11. #include "compudex.h"
  12.  
  13. SCREEN help[] = {
  14.     { 2, 2, "S = Search the file for matching records." },
  15.     { 3, 2, "A = Add a record to the file."    },
  16.     { 4, 2, "U = Update the current record."    },
  17.     { 5, 2, "F = Move forward in the current list."    },
  18.     { 6, 2, "B = Move backwards in the current list." },
  19.     { 7, 2, "D = Delete the current record."    },
  20.     { 8, 2, "P = Print mailing labels for the current list." },
  21.     { 9, 2, "E = Exit the data entry screen."    },
  22.     { 11,2, "Press Any Key"    },
  23.     {-1,  -1,  ""             }
  24.     };            
  25.  
  26. static char buff1[11];
  27. static char buff2[31];
  28. static char buff3[31];
  29. static char buff4[31];
  30. static char buff5[26];
  31. static char buff6[3];
  32. static char buff7[11];
  33. static char buff8[13];
  34. static char buff9[13];
  35. static char buff10[4];
  36.  
  37. static MAIL_REC q_mail_rec, mail_rec, sav_mail_rec;
  38.  
  39. FIELD maillst_act[] = {
  40.     {  3, 16, ISM_LONG_TYPE, buff1, 10, LEFTJUST, &mail_rec.num },     
  41.     {  4, 16, ISM_CHAR_TYPE, buff2, 30, DEFAULT, mail_rec.name  },     
  42.     {  5, 16, ISM_CHAR_TYPE, buff3, 30, DEFAULT, mail_rec.addr1 },     
  43.     {  6, 16, ISM_CHAR_TYPE, buff4, 30, DEFAULT, mail_rec.addr2  },     
  44.     {  7, 16, ISM_CHAR_TYPE, buff5, 25, DEFAULT, mail_rec.city   },     
  45.     {  8, 16, ISM_CHAR_TYPE, buff6,  2, DEFAULT, mail_rec.state  },     
  46.     {  9, 16, ISM_CHAR_TYPE, buff7, 10, DEFAULT, mail_rec.zip  },     
  47.     { 10, 16, ISM_CHAR_TYPE, buff8, 12, DEFAULT, mail_rec.phone  },     
  48.     { 11, 16, ISM_CHAR_TYPE, buff9, 12, DEFAULT, mail_rec.fax  },     
  49.     { 12, 16, ISM_CHAR_TYPE, buff10, 3, DEFAULT, mail_rec.type },     
  50.     { -1,-1 },     
  51.     };
  52.  
  53. void cdecl update_stat( int wStat, char *msg, ... );
  54. void ShowHelp( void );
  55.  
  56. /*---------------------------------------------------------------------
  57.  Function Actions
  58.  ---------------------------------------------------------------------*/
  59. void Actions( int wHandle, int wStat, int fhdl )
  60. {
  61.     int y,x,a,rc,chr;
  62.     long rec_num;
  63.     long recs_found;
  64.     int wPrint;
  65.     union  
  66.     {
  67.         char scan[2];
  68.         int ch;
  69.     }ch;    
  70.  
  71.     FldNullRec( maillst_act );
  72.  
  73.     while(( ch.ch = toupper(getch())) != 'E' )
  74.     {
  75.         if( !ch.ch )
  76.             ch.scan[1] = getch();
  77.                                     /* Clear the stat line every time */
  78.         update_stat( wStat, "" );
  79.         
  80.         switch( ch.ch )
  81.         {
  82.         case FN1:
  83.             ShowHelp();
  84.             break;        
  85.  
  86.         case 'S':
  87.             Screen( &wHandle, PUT_STRING, 1, 2, 
  88.                 "<enter> = Execute Search     <esc> = Cancel Search  ", 0X16 );
  89.             Screen( &wHandle, REFRESH_WINDOW, 1, 2, 54, 1 );
  90.  
  91.             memcpy( (void *)&sav_mail_rec, (void *)&mail_rec, sizeof(MAIL_REC));
  92.             FldNullRec( maillst_act );
  93.             FldData2Pictures( maillst_act );
  94.             FldShowFields( &wHandle, maillst_act );
  95.  
  96.             switch( FldGoFields( &wHandle, maillst_act, 0x70 ))
  97.             {
  98.             case ESC:
  99.                 update_stat( wStat, "Operation Canceled" );
  100.                 memcpy( (void *)&mail_rec, (void *)&sav_mail_rec, sizeof(MAIL_REC));
  101.                 break;
  102.             case RETURN:
  103.                 recs_found = FldQueryFile( fhdl, maillst_act, &q_mail_rec );
  104.                 ISMFetchRec( fhdl, &mail_rec, FldFetchFirst() );
  105.                 update_stat( wStat, "%ld Records Found",recs_found );
  106.                 break;
  107.             }
  108.             break;
  109.  
  110.         case 'A':
  111.             Screen( &wHandle, PUT_STRING, 1, 2, 
  112.                 "<enter> = Execute Add       <esc> = Cancel Add      ", 0X16 );
  113.             Screen( &wHandle, REFRESH_WINDOW, 1, 2, 54, 1 );
  114.  
  115.             memcpy( (void *)&sav_mail_rec, (void *)&mail_rec, sizeof(MAIL_REC));
  116.             FldNullRec( maillst_act );
  117.             FldData2Pictures( maillst_act );
  118.             FldShowFields( &wHandle, maillst_act );
  119.  
  120.             switch( FldGoFields( &wHandle, maillst_act, 0x70 ))
  121.             {
  122.             case ESC:
  123.                 update_stat( wStat, "Operation Canceled" );
  124.                 memcpy( (void *)&mail_rec, (void *)&sav_mail_rec, sizeof(MAIL_REC));
  125.                 break;
  126.  
  127.             case RETURN:
  128.                 rc = ISMAddRec( fhdl, &mail_rec, &rec_num );
  129.                 if( rc == ERROR )
  130.                     update_stat( wStat,"Error: Could not Add Record" );
  131.                   else
  132.                 {
  133.                     FldAddNode( rec_num );
  134.                     update_stat( wStat,"Record Added" ); 
  135.                 }
  136.             }
  137.             break;
  138.  
  139.         case 'U':
  140.             Screen( &wHandle, PUT_STRING, 1, 2, 
  141.                 "<enter> = Execute Update   <esc> = Cancel Update    ", 0X16 );
  142.             Screen( &wHandle, REFRESH_WINDOW, 1, 2, 54, 1 );
  143.  
  144.             memcpy( (void *)&sav_mail_rec, (void *)&mail_rec, sizeof(MAIL_REC));
  145.             FldData2Pictures( maillst_act );
  146.             FldShowFields( &wHandle, maillst_act );
  147.             rec_num = FldCurrNode();
  148.             if( rec_num == -1L )  
  149.                 update_stat( wStat, "No Current Record" );
  150.             else
  151.  
  152.             switch( FldGoFields( &wHandle, maillst_act, 0x70 ) )
  153.             {
  154.             case ESC:
  155.                 update_stat( wStat, "Operation Canceled" );
  156.                 memcpy( (void *)&mail_rec, (void *)&sav_mail_rec, 
  157.                     sizeof(MAIL_REC));
  158.                 break;
  159.             case RETURN:
  160.                 rc =  ISMWriteRec( fhdl, &mail_rec, rec_num );
  161.                 if( rc == ERROR )
  162.                     update_stat( wStat,"Error: Could Not Update Record" );
  163.                   else
  164.                     update_stat( wStat,"Record Updated" );
  165.                 break;
  166.             }
  167.             break;
  168.  
  169.         case 'F':
  170.             rec_num = FldFetchNext();
  171.             if( rec_num != -1L )
  172.                 ISMFetchRec( fhdl, &mail_rec, rec_num );
  173.             else
  174.                 update_stat( wStat,"No More Rows This in Direction" );
  175.             break;
  176.  
  177.         case 'B':
  178.             rec_num = FldFetchPrev();
  179.             if( rec_num != -1L )
  180.                 ISMFetchRec( fhdl, &mail_rec, rec_num );
  181.             else
  182.                 update_stat( wStat,"No More Rows This in Direction" );
  183.             break;
  184.  
  185.         case 'D':
  186.             rec_num = FldCurrNode();
  187.             if( rec_num == -1L )  
  188.                 update_stat( wStat,"No Current Record" );
  189.             else
  190.             {
  191.                 Screen( &wHandle, GET_CURSOR_ABS, &x, &y, &a );
  192.                 Screen( &wHandle, PUT_STRING, 1, 2, 
  193.                     "Delete Current Record ?    (Y/N)                    ", 0X16 );
  194.                 Screen( &wHandle, SET_CURSOR, 1, 26 );
  195.                 Screen( &wHandle, REFRESH_WINDOW, 1, 2, 54, 1 );
  196.  
  197.                 if( toupper(getch()) == 'Y')
  198.                 {
  199.                     rc = ISMDelRec( fhdl, rec_num );
  200.                     if( rc == ERROR )
  201.                         update_stat( wStat,"Error during ISMDelRec" );
  202.                     else                    
  203.                     {
  204.                         FldDelCurrNode();
  205.                         FldNullRec( maillst_act );
  206.                         update_stat( wStat,"Record Deleted" );
  207.                     }
  208.                 }
  209.                 Screen( &wHandle, SET_CURSOR_ABS, x, y, a );
  210.             }
  211.             break;
  212.  
  213.         case 'P':
  214.             rec_num = FldCurrNode();
  215.             if( rec_num != -1L )
  216.             {
  217.                 memcpy( (void *)&sav_mail_rec, (void *)&mail_rec, sizeof(MAIL_REC));
  218.                 Screen( &wPrint, CREATE_WINDOW, 8, 29, 22, 4, 0x74, 2 );
  219.                 Screen( &wPrint, PUT_STRING, 0, 7, " Print ", 0 );
  220.                 Screen( &wPrint, PUT_STRING, 1, 3, "(O)ne Up Labels", 0x70 );
  221.                 Screen( &wPrint, PUT_STRING, 2, 5, "(E)nvelope", 0x70 );
  222.                 Screen( &wPrint, OPEN_WINDOW, 1 );
  223.                 chr = toupper(getch());
  224.                 Screen( &wPrint, CLOSE_WINDOW );
  225.                 Screen( &wPrint, DESTROY_WINDOW );
  226.                 if( chr == 'E' )
  227.                 {
  228.                     ISMFetchRec( fhdl, &mail_rec, rec_num );
  229.                     rc = Envelope( &mail_rec );
  230.                 }
  231.                 else if( chr == 'O' )
  232.                 {
  233.                     rec_num = FldFetchFirst();
  234.                     while( ISMFetchRec( fhdl, &mail_rec, rec_num ) != ERROR )
  235.                     {    
  236.                         rc = OneUp( &mail_rec );
  237.                         if( rc == ERROR )
  238.                             break;
  239.  
  240.                         rec_num = FldFetchNext();
  241.                     }
  242.                 }
  243.             }
  244.             else
  245.                 update_stat( wStat,"No Records in Current List" );
  246.             break;
  247.         }
  248.  
  249.         FldData2Pictures( maillst_act );
  250.         FldShowFields( &wHandle, maillst_act );
  251.         Screen( &wHandle, PUT_STRING, 1, 2, 
  252.             "(S)earch  (A)dd  (U)pdate  (D)elete  (P)rint  (E)xit", 0X17 );
  253.         Screen( &wHandle, REFRESH_WINDOW, 1, 2, 54, 1 );
  254.     } 
  255.  
  256. }
  257.  
  258. void cdecl update_stat( int wStat, char *msg, ...  )
  259. {
  260.     va_list argp;
  261.     char buff[80];
  262.     char buff2[80];
  263.  
  264.     va_start(argp, msg);
  265.  
  266.     vsprintf( buff2, msg, argp );
  267.  
  268.     sprintf( buff, "Help = FN1 %*.*s", 47, 47, buff2 );
  269.  
  270.     Screen( &wStat, PUT_STRING, 0, 1, buff, 0x70 );
  271.     Screen( &wStat, REFRESH_WINDOW, 0,0,60,1 );
  272. }
  273.  
  274. /*------------------------------------------------------------------------
  275.  Function: ShowHelp()
  276.  -----------------------------------------------------------------------*/
  277. void ShowHelp()
  278. {
  279.     int wHelp,x,y,a;
  280.     int top = 6, left = 15, width = 50, depth = 13;
  281.  
  282.     Screen( &wHelp, GET_CURSOR_ABS, &y, &x, &a);
  283.  
  284.     Screen( &wHelp, CREATE_WINDOW, top, left, width, depth, 0x74, 0 );
  285.  
  286.     Screen( &wHelp, PUT_STRING, 0, (width-6)/2," Help ",  0x74 );
  287.  
  288.     WriteStrings( &wHelp, help, 0x70 );
  289.  
  290.     Screen( &wHelp, SET_CURSOR, 11, 17 );
  291.  
  292.     Screen( &wHelp, OPEN_WINDOW, 1 );
  293.  
  294.     getch();
  295.  
  296.     Screen( &wHelp, CLOSE_WINDOW );
  297.  
  298.     Screen( &wHelp, DESTROY_WINDOW );
  299.  
  300.     Screen( &wHelp, SET_CURSOR_ABS, y, x, a );
  301. }
  302.  
  303. /*------------------------------------------------------------------------
  304.  Function: OneUp()
  305.  ------------------------------------------------------------------------*/
  306. int OneUp( MAIL_REC *mail_rec )
  307. {
  308.     char wbuff[80];
  309.     char buff38[80];
  310.     char buff39[80];
  311.     char buff40[80];
  312.      int add_lines = 0;
  313.  
  314.     fflush( stdprn );
  315.  
  316.     ISMGetField( &mail_rec->num, ISM_LONG_TYPE, buff38, 5 );
  317.     sprintf( wbuff, "                              %s\n", buff38 );
  318.     fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  319.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  320.  
  321.     ISMGetField( mail_rec->name, ISM_CHAR_TYPE, buff38, 30 );
  322.     sprintf( wbuff, "%s\n", buff38 );
  323.     fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  324.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  325.     
  326.     ISMGetField( mail_rec->addr1, ISM_CHAR_TYPE, buff38, 30 );
  327.     sprintf( wbuff, "%s\n", buff38 );
  328.     if( strlen( wbuff ) > 1 )
  329.         fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  330.     else
  331.         add_lines++;
  332.  
  333.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  334.  
  335.     ISMGetField( mail_rec->addr2, ISM_CHAR_TYPE, buff38, 30 );
  336.     sprintf( wbuff, "%s\n", buff38 );
  337.     if( strlen( wbuff ) > 1 )
  338.         fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  339.     else
  340.         add_lines++;
  341.  
  342.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  343.     
  344.     ISMGetField( mail_rec->city, ISM_CHAR_TYPE, buff38, 25 );
  345.     ISMGetField( mail_rec->state, ISM_CHAR_TYPE, buff39, 2 );
  346.     ISMGetField( mail_rec->zip, ISM_CHAR_TYPE, buff40, 10 );
  347.     sprintf( wbuff, "%s  %s  %s\n\n\n\n\n", buff38, buff39, buff40 ); 
  348.     fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  349.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  350.  
  351.     fwrite( "\n\n", sizeof(char), add_lines, stdprn );
  352.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  353.  
  354.     fflush( stdprn );
  355.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  356.  
  357.     return OK;
  358. }
  359.  
  360. /*------------------------------------------------------------------------
  361.  Function: Envelope()
  362.  ------------------------------------------------------------------------*/
  363. int Envelope( MAIL_REC *mail_rec )
  364. {
  365.     char wbuff[256];
  366.     char buff38[80];
  367.     char buff39[80];
  368.     char buff40[80];
  369.      int add_lines = 0;
  370.  
  371.     fflush( stdprn );
  372.  
  373.     sprintf( wbuff, "NyTower Software\nP.O Box 206\nExton Pa 19341-1614\n\n\n\n\n\n\n");
  374.     fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  375.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  376.  
  377.     ISMGetField( mail_rec->name, ISM_CHAR_TYPE, buff38, 30 );
  378.     sprintf( wbuff, "                                %s\n\n", buff38 ); 
  379.     fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  380.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  381.     
  382.     ISMGetField( mail_rec->addr1, ISM_CHAR_TYPE, buff38, 30 );
  383.     sprintf( wbuff, "                                %s\n\n", buff38 ); 
  384.     if( strlen( wbuff ) > 36 )
  385.         fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  386.     else
  387.         add_lines++;
  388.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  389.  
  390.     ISMGetField( mail_rec->addr2, ISM_CHAR_TYPE, buff38, 30 );
  391.     sprintf( wbuff, "                                 %s\n\n", buff38 ); 
  392.     if( strlen( wbuff ) > 36 )
  393.         fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  394.     else
  395.         add_lines++;
  396.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  397.     
  398.     ISMGetField( mail_rec->city, ISM_CHAR_TYPE, buff38, 25 );
  399.     ISMGetField( mail_rec->state,ISM_CHAR_TYPE, buff39, 2 );
  400.     ISMGetField( mail_rec->zip,  ISM_CHAR_TYPE, buff40, 10 );
  401.     sprintf( wbuff, "                                %s  %s  %s\n ",
  402.         buff38, buff39, buff40 ); 
  403.     fwrite( wbuff, sizeof(char), strlen(wbuff), stdprn );
  404.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  405.  
  406.     /*
  407.     fwrite( "\n\n", sizeof(char), add_lines, stdprn );
  408.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  409.     */
  410.  
  411.     fflush( stdprn );
  412.     if( CriticalError ) { CriticalError = FALSE; return ERROR; }
  413.  
  414.     return OK;
  415. }
  416.  
  417.