home *** CD-ROM | disk | FTP | other *** search
/ IBM Presents OS/2 Software Hits 1995 / OS-2_SW_HITS_2ND_EDITION_1995.ISO / i17 / oas20115.exe / OASLOG.C < prev    next >
C/C++ Source or Header  |  1994-02-17  |  7KB  |  262 lines

  1. /****************************************************************/
  2. /*    INTEGRA TECHNOLOGIES INC.                                    */
  3. /*                                                                */
  4. /*    Integra Technologies proprietary software package.             */
  5. /*    Copyright(c) 1988-1992 Integra Technologies inc.            */
  6. /*    All Rights Reserved                                            */
  7. /*                                                                */
  8. /*    FILE: OASLOG.C                                                */
  9. /*                                                                */
  10. /*    This file is supplied to the user for customization            */
  11. /*    of remote messaging                                            */
  12. /*                                                                */
  13. /****************************************************************/
  14.  
  15. #include    <time.h>
  16. #include    <stdlib.h>
  17. #include    <stdio.h>
  18.  
  19. #define INCL_DOS   // wln get OS/2 system calls
  20. #include    <os2.h>
  21.  
  22. // Begin customization includes*********************************
  23. #include <string.h>   // wln - Used by string function calls
  24. //#include <netcons.h>  // wln - Used by Net message APIs
  25. //#include <message.h>  // wln - Used by Net message APIs
  26. #define   CBFILENAME  (USHORT) 15 // wln - Length of object name buffer
  27. UCHAR      pszFailName[CBFILENAME];// wln - Buffer to put obj name
  28. HMODULE   hmod;           // wln - module handle
  29. unsigned (pascal far * ppfnProcAddr) (const PSZ,PSZ,PSZ,USHORT );
  30. // End customization includes*********************************
  31.  
  32. #define SOF_MODE    0
  33. #define EOF_MODE    2
  34.  
  35. #define    CR            0x0D
  36. #define    LF            0x0A
  37.  
  38. #define TRUE        1
  39. #define FALSE        0
  40.  
  41. #define INTEGRA_LOG_OPEN_FAIL    0
  42. #define LOG_WRITE_FAIL            1
  43. #define    NO_OASAS                2
  44. #define INBUF_SIZE                4096
  45.  
  46. UCHAR    BootDrive;
  47. char    *log_err[] =
  48.         {
  49.         "OAS0302: Unable to open the \\OASAS\\OASAS.LOG file\n",
  50.         "OAS0303: Unable to write the file \\OASAS\\OASAS.LOG\n",
  51.         "OAS0304E: OASAS not set in CONFIG.SYS file\n"
  52.         };
  53.  
  54. /* OASAS I log file name */
  55. char        OASAS[] = "C:\\OASAS\\OASAS.LOG";
  56. UCHAR        OASmsg[2048];
  57. UCHAR        outmsg[2048];
  58. int            char_cnt;
  59. struct tm    *newtime;
  60. time_t        aclock;
  61. void        SetOASPath();
  62. void        GetBootDrive();
  63.  
  64. UCHAR Divider[] ="******************************************************************";
  65.  
  66. /************************************************************************/
  67. /*                                                                        */
  68. /*    function: main                                                        */
  69. /*                                                                        */
  70. /*    This program is invoked by OASAS utility programs to log the        */
  71. /*    events to the OASAS.LOG file. The source is supplied to the            */
  72. /*    user for customization. The OASLOG.EXE program has to be resident    */
  73. /*    in the \OASAS directory on the boot drive. There are three            */
  74. /*    parameters passed:                                                    */
  75. /*        param1 = Time stamp flag  0 = do not put time stamp on message    */
  76. /*        parma2 = Broadcast flag 0 = do not send message                    */
  77. /*        parma3 = Message to log                                            */
  78. /*                                                                        */
  79. /************************************************************************/
  80. main(argc, argv)
  81. int        argc;
  82. char    *argv[];
  83. {
  84.     HFILE    OASASh;
  85.     USHORT    rc, Action;
  86.     ULONG   new_pointer;
  87.     char    temp_buf[2048];
  88.     char    *s_ptr, *d_ptr;
  89.     int     index;
  90.     UCHAR    c;
  91.     UCHAR    stamp_flag;
  92.     UCHAR    BroadcastFlag;
  93.     
  94.     if (argc < 4)
  95.        exit(1);
  96.         
  97.     stamp_flag = atoi(&argv[1][0]);
  98.     BroadcastFlag = atoi(&argv[2][0]);
  99.     /*
  100.      *    Messages with broadcast flag = TRUE are down drive messages,
  101.      *    reassign block messages, inconsistent LBA messages, ...
  102.      *
  103.      *    Messages with broadcast flag = FALSE are utility programs
  104.      *    starting and ending, etc.
  105.      *
  106.      *    All messages will be logged in \OASAS\OASAS.LOG
  107.      *    Only messages with a broadcast flag = TRUE will be sent to
  108.      *    Administrator
  109.      *
  110.      *    To send all messages to Administrator, uncomment the following
  111.      *    line.
  112.      */
  113. //    BroadcastFlag = TRUE;
  114.     strcpy( OASmsg, argv[3]);
  115.     GetBootDrive();
  116.     if (BootDrive == 'A')
  117.         return;
  118.     /*
  119.      *    Process event description string which includes special
  120.      *    characters for blanks and line feeds. Convert special
  121.      *    characters here.
  122.      */
  123.     s_ptr = OASmsg;
  124.     d_ptr = outmsg;
  125.     while ( *s_ptr )
  126.     {
  127.         if ((c = *s_ptr++) == '_' )
  128.             *d_ptr++ = ' ';
  129.         else
  130.         {
  131.             if (c == '~')
  132.             {
  133.                 *d_ptr++ = CR;
  134.                 *d_ptr++ = LF;
  135.             }
  136.             else
  137.                 *d_ptr++ = c;
  138.         }
  139.     }
  140.     SetOASPath();
  141.     /*    Open OASlog file. File will be created if it does not exist */
  142.     rc = DosOpen(&OASAS[0],&OASASh,&Action,0L,0,0x11,0xA2, 0L);
  143.     if (rc)
  144.         printf( log_err[ INTEGRA_LOG_OPEN_FAIL ] );
  145.  
  146.     /*
  147.      *    Move file pointer to end of file so message can be
  148.      *    appended to the end of the LOG file    
  149.      */
  150.     rc = DosChgFilePtr(OASASh, 0L, EOF_MODE, &new_pointer);
  151.     rc = DosWrite(    OASASh,                    /* Handle of file     */
  152.                     (PVOID) outmsg,            /* pointer to string */
  153.                     strlen(outmsg),            /* length of string  */
  154.                     (PUSHORT) &char_cnt );    /* return char count */
  155.     if (rc)
  156.         printf( log_err[ LOG_WRITE_FAIL ] );
  157.  
  158.     /* get currnt time */
  159.     time(&aclock) ;
  160.  
  161.     /* get local time */
  162.     newtime = localtime(&aclock);
  163.  
  164.     /* convert local time to ascii string */
  165.     s_ptr = asctime(newtime);
  166.  
  167.     strcpy(temp_buf, s_ptr);
  168.     index = strlen(temp_buf);
  169.  
  170.     /*    Add new line to the end of string */
  171.     temp_buf [index-1] = CR;    /* return            */
  172.     temp_buf [index] = LF;        /* new line            */
  173.     temp_buf [index+1] = 0;        /* end of string    */
  174.     s_ptr = temp_buf;
  175.  
  176.     if (stamp_flag)
  177.     {
  178.         strcat(outmsg,temp_buf); // add time stamp to message
  179.         /* record current time stamp */
  180.         rc = DosWrite(    OASASh,                    /* Handle of file     */
  181.                        (PVOID) s_ptr,            /* pointer to string */
  182.                        strlen(s_ptr),            /* length of string  */
  183.                        (PUSHORT) &char_cnt );    /* return char count */
  184.         if (rc)
  185.             printf( log_err[ LOG_WRITE_FAIL ] );
  186.         d_ptr = Divider;
  187.         s_ptr = temp_buf;
  188.         while (*d_ptr)
  189.             *s_ptr++ = *d_ptr++;
  190.         *s_ptr++ = CR;
  191.         *s_ptr++ = LF;
  192.         *s_ptr++ = 0;
  193.         rc = DosWrite(    OASASh,                    /* Handle of file     */
  194.                         (PVOID) temp_buf,        /* pointer to string */
  195.                         strlen(temp_buf),        /* length of string  */
  196.                         (PUSHORT) &char_cnt );    /* return char count */
  197.         if (rc)
  198.             printf( log_err[ LOG_WRITE_FAIL ] );
  199.     }
  200.     DosClose(OASASh);
  201.  
  202.     /*
  203.      *
  204.      *    User customization should be done here
  205.      *
  206.      */
  207.  
  208.     // Begin customization sample code
  209.     // the following sample is compiled into OASLOG.EXE
  210.  
  211.     // Get name of Administrator from environment & send an event message
  212.     if (!BroadcastFlag)
  213.         exit(0); // do not broadcast message to administrator
  214.     if( (s_ptr=getenv("OASAS_MSG_NAME") ) )
  215.     {
  216.  
  217.         if( !DosLoadModule(    (PSZ) pszFailName,
  218.                             (USHORT) CBFILENAME,
  219.                             (PSZ) "NETOEM",
  220.                             (PHMODULE) & hmod) )
  221.         {
  222.             // Able to get dynalink handle, get proc addr, call & free
  223.             if( !DosGetProcAddr(    (HMODULE) hmod,
  224.                                     (PSZ) "NETMESSAGEBUFFERSEND",
  225.                                     (PFN FAR *) &ppfnProcAddr))
  226.             {
  227.                 // Call NetMessageBufferSend() API proc addr in dynalink
  228.                 ppfnProcAddr (    (const PSZ) 0L,
  229.                                 (PSZ)    s_ptr,
  230.                                 (PSZ)    outmsg,
  231.                                 (USHORT)    strlen(outmsg));
  232.             }
  233.  
  234.             DosFreeModule(hmod); // Free the "NETOEM" module handle
  235.         }    // End able to get dynalink handle...
  236.  
  237.     }  // End of attempt to send remote message from environment name
  238.     // End customization *****************************************
  239.  
  240.     exit(0);
  241. }
  242.  
  243. void SetOASPath()
  244. {
  245.  
  246.     OASAS[0] = BootDrive;
  247.  
  248.     return; // OASAS[] = BootDrive\OASAS\OAS.LOG or something like that
  249. }
  250.  
  251. void    GetBootDrive()
  252. {
  253.     SEL                GSeg;
  254.     SEL                LSeg;
  255.     GINFOSEG FAR    *info;
  256.  
  257.     DosGetInfoSeg(&GSeg, &LSeg);
  258.     info = MAKEPGINFOSEG(GSeg);
  259.     BootDrive = (info->bootdrive + 'A') - 1;
  260.     return;
  261. }
  262.