home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 3 Comm
/
03-Comm.zip
/
pageos2.zip
/
page.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1996-03-20
|
9KB
|
315 lines
#define INCL_DOSNMPIPES // Named-pipe values
#define INCL_DOSFILEMGR // File Manager values
#define INCL_DOSPROCESS
#define INCL_DOSERRORS // DOS Error values
#include <os2.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <mem.h>
#include "page.h"
char *date_ptr ;
char *time_ptr ;
char *min_ptr ;
char *day_ptr ;
char *msg_ptr ;
char *id_ptr ;
char *file_name_ptr ;
char tmp[100], tmp1[400] ;
int LogIndex ;
int StatType ;
int Option = 0 ;
int IDInFile = 0 ;
int SendMessage( int MessageSize, char *message_ptr ) ;
int CommandLine( int argc, char *argv[] ) ;
int main(int argc, char *argv[])
{
int count, status, year, month, day, hour, min ;
char line[100] ;
pgf *pgf_ptr ;
pgf_ptr = (pgf *) calloc( 1, sizeof(pgf) ) ;
if( pgf_ptr == NULL ) {
printf( "Calloc error\n" ) ;
return 0 ;
}
status = CommandLine( argc, argv ) ;
if( status ) {
printf("Super Pager. Version 1.5 Rev. 1\n" ) ;
printf("Copyright (c) Borghese Software Engineering. 1995. All rights reserved.\n" );
printf("Command line client. Version 1.1 Rev. 1 - Used with paged.exe\n" ) ;
printf( "page [-nadils args] [@filename.txt] id Message\n" ) ;
printf( " n Page now - Default\n" ) ;
printf( " page -n \"Bill\" \"My message\"\n" ) ;
printf( " page \"Bill\" \"My message\"\n" ) ;
printf( " a Page at a date(MM-DD-YY) and time(HH:MM)\n" ) ;
printf( " page -a 08-12-95 15:55 \"Bill\" \"My message\"\n" ) ;
printf( " d Delete a page at date(MM-DD-YY), time(HH:MM) and ID\n" ) ;
printf( " page -d 08-12-95 15:55 \"Bill\"\n" ) ;
printf( " page -d 00-00-00 00:00 \"\" - Deletes all pages\n" ) ;
printf( " i Page in xxx minutes \n" ) ;
printf( " page -i 10 \"Bill\" \"My message\"\n" ) ;
printf( " l List page log file: page -l index\n" ) ;
printf( " index: 0: Show last 1K of log file - Default\n" ) ;
printf( " 1: Show 1K of log file, starting at EOF-2K\n" ) ;
printf( " s List # of pages in Now queue and # of pages in At queue\n" ) ;
printf( " page -s type\n" ) ;
printf( " type: 0: Short list - Default\n" ) ;
printf( " 1: Full list\n" ) ;
printf( " page @filename.txt\n" ) ;
printf( " page id @filename.txt" ) ;
return 0 ;
}
memset( pgf_ptr, 0, sizeof(pgf) ) ;
pgf_ptr->header.MsgVersion = 1 ; // Version 1 format
strcpy( pgf_ptr->id, id_ptr ) ;
strcpy( (char *)pgf_ptr->message, msg_ptr ) ;
pgf_ptr->header.DataSize = strlen( msg_ptr ) ;
switch( Option ) {
case 'n':
// page -n "Bill" "My message"
pgf_ptr->header.MsgType = PH_PAGE_BY_NAME_ID ;
pgf_ptr->header.Action = PH_ACTION_PAGE_NOW ;
break ;
case 'a':
// page -a 08-12-95 15:55 "Bill" "My message"
pgf_ptr->header.MsgType = PH_PAGE_BY_NAME_ID ;
pgf_ptr->header.Action = PH_ACTION_PAGE_AT ;
if( date_ptr[2] == '-' ) {
sscanf( date_ptr, "%d-%d-%d", &month, &day, &year ) ;
} else {
sscanf( date_ptr, "%d/%d/%d", &month, &day, &year ) ;
}
pgf_ptr->header.at.month = month ;
pgf_ptr->header.at.day = day ;
pgf_ptr->header.at.year = year ;
sscanf( time_ptr, "%d:%d", &hour, &min ) ;
pgf_ptr->header.at.hour = hour ;
pgf_ptr->header.at.min = min ;
break ;
case 'd':
// Delete a page(s)
// page -d 08-12-95 15:55 "Bill"
pgf_ptr->header.MsgType = PH_PAGE_DELETE_AT_PAGE ;
if( date_ptr[2] == '-' ) {
sscanf( date_ptr, "%d-%d-%d", &month, &day, &year ) ;
} else {
sscanf( date_ptr, "%d/%d/%d", &month, &day, &year ) ;
}
pgf_ptr->header.at.month = month ;
pgf_ptr->header.at.day = day ;
pgf_ptr->header.at.year = year ;
sscanf( time_ptr, "%d:%d", &hour, &min ) ;
pgf_ptr->header.at.hour = hour ;
pgf_ptr->header.at.min = min ;
break ;
case 'i':
// page -i 10 "Bill" "My message"
pgf_ptr->header.MsgType = PH_PAGE_BY_NAME_ID ;
pgf_ptr->header.Action = PH_ACTION_PAGE_DELAY ;
pgf_ptr->header.at.min = atol( min_ptr ) ;
break ;
case 'l':
// page -l index
pgf_ptr->header.MsgType = PH_PAGE_LIST_LOG ;
pgf_ptr->header.Modifier = LogIndex ;
pgf_ptr->header.DataSize = 0 ;
break ;
case 's':
// page -s type\n" ) ;
pgf_ptr->header.MsgType = PH_PAGE_SHOW_QUEUES ;
pgf_ptr->header.Modifier = StatType ;
pgf_ptr->header.DataSize = 0 ;
break ;
}
/*
printf( "MsgType = %d\n", pgf_ptr->header.MsgType ) ;
printf( "Action = %d\n", pgf_ptr->header.Action ) ;
printf( "Modifier = %d\n", pgf_ptr->header.Modifier ) ;
printf( "DataSize = %d\n", pgf_ptr->header.DataSize ) ;
printf( "Date: = %d/%d/%d\n", (int)pgf_ptr->header.at.month,
pgf_ptr->header.at.day, pgf_ptr->header.at.year ) ;
printf( "Time: = %d:%d\n", pgf_ptr->header.at.hour, pgf_ptr->header.at.min ) ;
printf( "sec = %ld\n", pgf_ptr->header.at.sec ) ;
printf( "id = %s\n", pgf_ptr->id ) ;
printf( "Message = %s\n", pgf_ptr->message ) ;
*/
SendMessage( sizeof(pgf_ptr->header) + PH_ID_SIZE + strlen(msg_ptr) + 1,
(char *)pgf_ptr ) ;
return 0 ;
}
int CommandLine( int argc, char *argv[] )
{
int index ;
FILE *fp_ptr ;
if( argc > 1 ) {
if( argv[1][0] == '-' ) {
Option = tolower( argv[1][1] ) ;
switch( Option ) {
case 'n':
// page -n "Bill" "My message"
if( argc != 4 ) break ;
id_ptr = argv[2] ;
msg_ptr = argv[3] ;
return( 0 ) ;
case 'a':
// page -a 08-12-95 15:55 "Bill" "My message"
if( argc != 6 ) break ;
date_ptr = argv[2] ;
time_ptr = argv[3] ;
id_ptr = argv[4] ;
msg_ptr = argv[5] ;
return( 0 ) ;
case 'd':
// Delete a page(s)
// page -d 08-12-95 15:55 "Bill"
if( argc != 5 ) break ;
date_ptr = argv[2] ;
time_ptr = argv[3] ;
id_ptr = argv[4] ;
msg_ptr = "" ;
return( 0 ) ;
case 'i':
// page -i 10 "Bill" "My message"
if( argc != 5 ) break ;
min_ptr = argv[2] ;
id_ptr = argv[3] ;
msg_ptr = argv[4] ;
return( 0 ) ;
case 'l':
// page -l index
if( argc == 3 ) {
LogIndex = atoi( argv[2] ) ;
id_ptr = "" ;
msg_ptr = "" ;
return( 0 ) ;
}
if( argc == 2 ) {
LogIndex = 0 ;
id_ptr = "" ;
msg_ptr = "" ;
return( 0 ) ;
}
break ;
case 's':
// page -s type \n" ) ;
if( argc == 3 ) {
StatType = atoi( argv[2] ) ;
id_ptr = "" ;
msg_ptr = "" ;
return( 0 ) ;
}
if( argc == 2 ) {
StatType = 0 ;
id_ptr = "" ;
msg_ptr = "" ;
return( 0 ) ;
}
break ;
}
}
// page @FileName.txt
if( argc == 2 ) {
Option = 'n' ;
if( argv[1][0] == '@' ) {
int size ;
fp_ptr = fopen( &argv[1][1], "rt" ) ;
if( fp_ptr == NULL ) return( 1 ) ; // Error
fgets( (char *)tmp, 100, fp_ptr ) ;
id_ptr = strtok( tmp, "\n\r" ) ;
// id_ptr = (char *)&tmp ;
size = fread( tmp1, 1, 300, fp_ptr ) ;
tmp1[size] = '\0' ;
msg_ptr = tmp1 ;
fclose( fp_ptr ) ;
return( 0 ) ;
}
}
// page id @FileName.txt
if( argc == 3 ) {
Option = 'n' ;
id_ptr = argv[1] ;
if( argv[2][0] == '@' ) {
int size ;
fp_ptr = fopen( &argv[2][1], "rt" ) ;
if( fp_ptr == NULL ) return( 1 ) ; // Error
size = fread( tmp1, 1, 300, fp_ptr ) ;
tmp1[size] = '\0' ;
msg_ptr = tmp1 ;
fclose( fp_ptr ) ;
return( 0 ) ;
}
}
// page "ID" "Message"
if( argc == 3 ) {
Option = 'n' ;
id_ptr = argv[1] ;
msg_ptr = argv[2] ;
return( 0 ) ;
}
}
return( 1 ) ; // Error
}
int SendMessage( int MessageSize, char *message_ptr )
{
int trys ;
UCHAR OutBuffer[3000]; // Read-buffer address
ULONG OutBufferLen; // Read-buffer length
ULONG BytesOut; // Bytes read (returned)
ULONG TimeOut; // Maximum wait time
APIRET rc; // Return code
OutBufferLen = 3000; // Max data length for output
// (return) buffer
TimeOut = 10000 ; //Timeout of 10 seconds (units
// are milliseconds)
OutBuffer[0] = 0 ;
for( trys = 0 ; trys < 3 ; trys++ ) {
rc = DosCallNPipe(PIPENAME, message_ptr, MessageSize, OutBuffer,
OutBufferLen, &BytesOut, TimeOut);
// On successful return, variable
// BytesOut will contain the
// number of bytes written to
// the output buffer (OutBuffer)
if (rc != 0) {
continue ;
} else {
break ;
}
}
if( BytesOut )
printf( "%*.*s ", (int)BytesOut, (int)BytesOut, OutBuffer ) ;
if( BytesOut == 0 && trys == 3 ) {
printf( "Error sending page\n" ) ;
}
/*
if( OutBuffer[0] == 'O' && OutBuffer[1] == 'K' ) {
printf( "Page sent\n" ) ;
} else {
printf( "Error sending page\n" ) ;
}
*/
return 0 ;
}