home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 3 Comm / 03-Comm.zip / pageos2.zip / page.cpp < prev    next >
C/C++ Source or Header  |  1996-03-20  |  9KB  |  315 lines

  1. #define INCL_DOSNMPIPES           // Named-pipe values
  2. #define INCL_DOSFILEMGR         // File Manager values
  3. #define INCL_DOSPROCESS
  4. #define INCL_DOSERRORS          // DOS Error values
  5. #include <os2.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <ctype.h>
  9. #include <string.h>
  10. #include <mem.h>
  11. #include "page.h"
  12.  
  13. char    *date_ptr ;
  14. char    *time_ptr ;
  15. char    *min_ptr ;
  16. char    *day_ptr ;
  17. char    *msg_ptr ;
  18. char    *id_ptr ;
  19. char    *file_name_ptr ;
  20. char    tmp[100], tmp1[400] ;
  21. int        LogIndex ;
  22. int        StatType ;
  23. int        Option = 0 ;
  24. int        IDInFile = 0 ;
  25. int SendMessage( int MessageSize, char *message_ptr ) ;
  26. int    CommandLine( int argc, char *argv[] ) ;
  27.  
  28. int main(int    argc, char  *argv[])
  29. {
  30. int     count, status, year, month, day, hour, min ;
  31. char    line[100] ;
  32. pgf     *pgf_ptr ;
  33.  
  34.     pgf_ptr = (pgf *) calloc( 1, sizeof(pgf) ) ;
  35.     if( pgf_ptr == NULL ) {
  36.         printf( "Calloc error\n" ) ;
  37.         return 0 ;
  38.     }
  39.  
  40.     status = CommandLine( argc, argv ) ;
  41.     if( status ) {
  42.         printf("Super Pager.   Version 1.5 Rev. 1\n" ) ;
  43.         printf("Copyright (c) Borghese Software Engineering. 1995.  All rights reserved.\n" );
  44.         printf("Command line client. Version 1.1 Rev. 1 - Used with paged.exe\n" ) ;
  45.         printf( "page [-nadils args] [@filename.txt] id Message\n" ) ;
  46.         printf( "      n  Page now - Default\n" ) ;
  47.         printf( "         page -n \"Bill\" \"My message\"\n" ) ;
  48.         printf( "         page \"Bill\" \"My message\"\n" ) ;
  49.         printf( "      a  Page at a date(MM-DD-YY) and time(HH:MM)\n" ) ;
  50.         printf( "         page -a 08-12-95 15:55 \"Bill\" \"My message\"\n" ) ;
  51.         printf( "      d  Delete a page at date(MM-DD-YY), time(HH:MM) and ID\n" ) ;
  52.         printf( "         page -d 08-12-95 15:55 \"Bill\"\n" ) ;
  53.         printf( "         page -d 00-00-00 00:00 \"\"     - Deletes all pages\n" ) ;
  54.         printf( "      i  Page in xxx minutes \n" ) ;
  55.         printf( "         page -i 10 \"Bill\" \"My message\"\n" ) ;
  56.         printf( "      l  List page log file:     page -l index\n" ) ;
  57.         printf( "            index:  0:  Show last 1K of log file - Default\n" ) ;
  58.         printf( "                    1:  Show 1K of log file, starting at EOF-2K\n" ) ;
  59.         printf( "      s  List # of pages in Now queue and # of pages in At queue\n" ) ;
  60.         printf( "         page -s type\n" ) ;
  61.         printf( "            type:   0:  Short list - Default\n" ) ;
  62.         printf( "                    1:  Full list\n" ) ;
  63.         printf( "      page @filename.txt\n" ) ;
  64.         printf( "      page id @filename.txt" ) ;
  65.         return 0 ;
  66.     }
  67.  
  68.     memset( pgf_ptr, 0, sizeof(pgf) ) ;
  69.     pgf_ptr->header.MsgVersion = 1 ;            // Version 1 format
  70.     strcpy( pgf_ptr->id, id_ptr ) ;
  71.     strcpy( (char *)pgf_ptr->message, msg_ptr ) ;
  72.     pgf_ptr->header.DataSize = strlen( msg_ptr ) ;
  73.     switch( Option ) {
  74.         case 'n':
  75.             // page -n "Bill" "My message"
  76.             pgf_ptr->header.MsgType = PH_PAGE_BY_NAME_ID ;
  77.             pgf_ptr->header.Action = PH_ACTION_PAGE_NOW ;
  78.             break ;
  79.         case 'a':
  80.             // page -a 08-12-95 15:55 "Bill" "My message"
  81.             pgf_ptr->header.MsgType = PH_PAGE_BY_NAME_ID ;
  82.             pgf_ptr->header.Action = PH_ACTION_PAGE_AT ;
  83.             if( date_ptr[2] == '-' ) {
  84.                 sscanf( date_ptr, "%d-%d-%d", &month, &day, &year ) ;
  85.             } else {
  86.                 sscanf( date_ptr, "%d/%d/%d", &month, &day, &year ) ;
  87.             }
  88.             pgf_ptr->header.at.month = month ;
  89.             pgf_ptr->header.at.day = day ;
  90.             pgf_ptr->header.at.year = year ;
  91.             sscanf( time_ptr, "%d:%d", &hour, &min ) ;
  92.             pgf_ptr->header.at.hour = hour ;
  93.             pgf_ptr->header.at.min = min ;
  94.             break ;
  95.         case 'd':
  96.             // Delete a page(s)
  97.             // page -d 08-12-95 15:55 "Bill"
  98.             pgf_ptr->header.MsgType = PH_PAGE_DELETE_AT_PAGE ;
  99.             if( date_ptr[2] == '-' ) {
  100.                 sscanf( date_ptr, "%d-%d-%d", &month, &day, &year ) ;
  101.             } else {
  102.                 sscanf( date_ptr, "%d/%d/%d", &month, &day, &year ) ;
  103.             }
  104.             pgf_ptr->header.at.month = month ;
  105.             pgf_ptr->header.at.day = day ;
  106.             pgf_ptr->header.at.year = year ;
  107.             sscanf( time_ptr, "%d:%d", &hour, &min ) ;
  108.             pgf_ptr->header.at.hour = hour ;
  109.             pgf_ptr->header.at.min = min ;
  110.             break ;
  111.         case 'i':
  112.             // page -i 10 "Bill" "My message"
  113.             pgf_ptr->header.MsgType = PH_PAGE_BY_NAME_ID ;
  114.             pgf_ptr->header.Action = PH_ACTION_PAGE_DELAY ;
  115.             pgf_ptr->header.at.min = atol( min_ptr ) ;
  116.             break ;
  117.         case 'l':
  118.             // page -l index
  119.             pgf_ptr->header.MsgType = PH_PAGE_LIST_LOG ;
  120.             pgf_ptr->header.Modifier = LogIndex ;
  121.             pgf_ptr->header.DataSize = 0 ;
  122.             break ;
  123.         case 's':
  124.             // page -s type\n" ) ;
  125.             pgf_ptr->header.MsgType = PH_PAGE_SHOW_QUEUES ;
  126.             pgf_ptr->header.Modifier = StatType ;
  127.             pgf_ptr->header.DataSize = 0 ;
  128.             break ;
  129.     }
  130. /*
  131.     printf( "MsgType   = %d\n", pgf_ptr->header.MsgType ) ;
  132.     printf( "Action    = %d\n", pgf_ptr->header.Action ) ;
  133.     printf( "Modifier  = %d\n", pgf_ptr->header.Modifier ) ;
  134.     printf( "DataSize  = %d\n", pgf_ptr->header.DataSize ) ;
  135.     printf( "Date:     = %d/%d/%d\n", (int)pgf_ptr->header.at.month,
  136.             pgf_ptr->header.at.day, pgf_ptr->header.at.year ) ;
  137.     printf( "Time:     = %d:%d\n", pgf_ptr->header.at.hour, pgf_ptr->header.at.min ) ;
  138.     printf( "sec       = %ld\n", pgf_ptr->header.at.sec ) ;
  139.     printf( "id        = %s\n", pgf_ptr->id ) ;
  140.     printf( "Message   = %s\n", pgf_ptr->message ) ;
  141. */
  142.     SendMessage( sizeof(pgf_ptr->header) + PH_ID_SIZE + strlen(msg_ptr) + 1,
  143.         (char *)pgf_ptr  ) ;
  144.  
  145.     return 0 ;
  146. }
  147.  
  148.  
  149. int    CommandLine( int argc, char *argv[] )
  150. {
  151. int    index ;
  152. FILE *fp_ptr ;
  153.  
  154.     if( argc > 1 ) {
  155.         if( argv[1][0] == '-' ) {
  156.             Option = tolower( argv[1][1] ) ;
  157.             switch( Option ) {
  158.                 case 'n':
  159.                     // page -n "Bill" "My message"
  160.                     if( argc != 4 ) break ;
  161.                     id_ptr = argv[2] ;
  162.                     msg_ptr = argv[3] ;
  163.                     return( 0 ) ;
  164.                 case 'a':
  165.                     // page -a 08-12-95 15:55 "Bill" "My message"
  166.                     if( argc != 6 ) break ;
  167.                     date_ptr = argv[2] ;
  168.                     time_ptr = argv[3] ;
  169.                     id_ptr = argv[4] ;
  170.                     msg_ptr = argv[5] ;
  171.                     return( 0 ) ;
  172.                 case 'd':
  173.                     // Delete a page(s)
  174.                     // page -d 08-12-95 15:55 "Bill"
  175.                     if( argc != 5 ) break ;
  176.                     date_ptr = argv[2] ;
  177.                     time_ptr = argv[3] ;
  178.                     id_ptr = argv[4] ;
  179.                     msg_ptr = "" ;
  180.                     return( 0 ) ;
  181.                 case 'i':
  182.                     // page -i 10 "Bill" "My message"
  183.                     if( argc != 5 ) break ;
  184.                     min_ptr = argv[2] ;
  185.                     id_ptr = argv[3] ;
  186.                     msg_ptr = argv[4] ;
  187.                     return( 0 ) ;
  188.                 case 'l':
  189.                     // page -l index
  190.                     if( argc == 3 ) {
  191.                         LogIndex = atoi( argv[2] ) ;
  192.                         id_ptr = "" ;
  193.                         msg_ptr = "" ;
  194.                         return( 0 ) ;
  195.                     }
  196.                     if( argc == 2 ) {
  197.                         LogIndex = 0 ;
  198.                         id_ptr = "" ;
  199.                         msg_ptr = "" ;
  200.                         return( 0 ) ;
  201.                     }
  202.                     break ;
  203.                 case 's':
  204.                     // page -s type \n" ) ;
  205.                     if( argc == 3 ) {
  206.                         StatType = atoi( argv[2] ) ;
  207.                         id_ptr = "" ;
  208.                         msg_ptr = "" ;
  209.                         return( 0 ) ;
  210.                     }
  211.                     if( argc == 2 ) {
  212.                         StatType = 0 ;
  213.                         id_ptr = "" ;
  214.                         msg_ptr = "" ;
  215.                         return( 0 ) ;
  216.                     }
  217.                     break ;
  218.             }
  219.         }
  220.         // page @FileName.txt
  221.         if( argc == 2 ) {
  222.             Option = 'n' ;
  223.             if( argv[1][0] == '@' ) {
  224.                 int    size ;
  225.                 fp_ptr = fopen( &argv[1][1], "rt" ) ;
  226.                 if( fp_ptr == NULL ) return( 1 ) ; // Error
  227.                 fgets( (char *)tmp, 100, fp_ptr ) ;
  228.                 id_ptr = strtok( tmp, "\n\r" ) ;
  229. //                id_ptr = (char *)&tmp ;
  230.                 size = fread( tmp1, 1, 300, fp_ptr ) ;
  231.                 tmp1[size] = '\0' ;
  232.                 msg_ptr = tmp1 ;
  233.                 fclose( fp_ptr ) ;
  234.                 return( 0 ) ;
  235.             }
  236.         }
  237.         // page id @FileName.txt
  238.         if( argc == 3 ) {
  239.             Option = 'n' ;
  240.             id_ptr = argv[1] ;
  241.             if( argv[2][0] == '@' ) {
  242.                 int    size ;
  243.                 fp_ptr = fopen( &argv[2][1], "rt" ) ;
  244.                 if( fp_ptr == NULL ) return( 1 ) ; // Error
  245.                 size = fread( tmp1, 1, 300, fp_ptr ) ;
  246.                 tmp1[size] = '\0' ;
  247.                 msg_ptr = tmp1 ;
  248.                 fclose( fp_ptr ) ;
  249.                 return( 0 ) ;
  250.             }
  251.         }
  252.         // page "ID" "Message"
  253.         if( argc == 3 ) {
  254.             Option = 'n' ;
  255.             id_ptr = argv[1] ;
  256.             msg_ptr = argv[2] ;
  257.             return( 0 ) ;
  258.         }
  259.  
  260.     }
  261.     return( 1 ) ;        // Error
  262.  
  263. }
  264.  
  265.  
  266.  
  267. int SendMessage( int MessageSize, char *message_ptr )
  268. {
  269. int trys ;
  270. UCHAR    OutBuffer[3000];    // Read-buffer address
  271. ULONG    OutBufferLen;       // Read-buffer length
  272. ULONG    BytesOut;           // Bytes read (returned)
  273. ULONG    TimeOut;            // Maximum wait time
  274. APIRET   rc;                 // Return code
  275.  
  276.  
  277.  
  278.     OutBufferLen = 3000;    // Max data length for output
  279.                             // (return) buffer
  280.  
  281.     TimeOut = 10000 ;        //Timeout of 10 seconds (units
  282.                             //   are milliseconds)
  283.  
  284.     OutBuffer[0] = 0 ;
  285.     for( trys = 0 ; trys < 3 ; trys++ ) {
  286.         rc = DosCallNPipe(PIPENAME, message_ptr, MessageSize, OutBuffer,
  287.                                 OutBufferLen, &BytesOut, TimeOut);
  288.                           // On successful return, variable
  289.                           // BytesOut will contain the
  290.                           // number of bytes written to
  291.                           // the output buffer (OutBuffer)
  292.         if (rc != 0) {
  293.             continue ;
  294.         } else {
  295.            break ;
  296.         }
  297.     }
  298.     if( BytesOut )
  299.         printf( "%*.*s ", (int)BytesOut, (int)BytesOut, OutBuffer ) ;
  300.     if( BytesOut == 0 && trys == 3 ) {
  301.         printf( "Error sending page\n" ) ;
  302.     }
  303. /*
  304.     if( OutBuffer[0] == 'O' && OutBuffer[1] == 'K'  ) {
  305.         printf( "Page sent\n" ) ;
  306.     } else {
  307.         printf( "Error sending page\n" ) ;
  308.     }
  309. */
  310.     return 0 ;
  311. }
  312.  
  313.  
  314.  
  315.