Пример #1
0
static void
mx_get_vms_version_string( char *vms_version_buffer,
				size_t max_vms_version_buffer_length )
{
	static const char fname[] = "mx_get_vms_version_string()";

	long item_code;
	unsigned long vms_status;

	struct dsc$descriptor_s version_desc;

	version_desc.dsc$b_dtype = DSC$K_DTYPE_T;
	version_desc.dsc$b_class = DSC$K_CLASS_S;
	version_desc.dsc$a_pointer = vms_version_buffer;
	version_desc.dsc$w_length = max_vms_version_buffer_length - 1;

	item_code = SYI$_VERSION;

	vms_status = lib$getsyi( &item_code,
				0,
				&version_desc,
				&version_desc.dsc$w_length,
				0,
				0 );

	return;
}
Пример #2
0
int getpagesize (void)
{
  long pagsiz = 0L;
  unsigned short itmcod = SYI$_PAGE_SIZE;

  (void) lib$getsyi (&itmcod, (void *) &pagsiz);
  if (pagsiz == 0L)
    pagsiz = 512L;	/* VAX default */
  return (int) pagsiz;
}
Пример #3
0
int check_vms_mm()
{
    int retlenaddr;
    int mem=0;
    struct item_list_3 lst[14], syilst[2];
    syilst[0].buflen=4;
    syilst[0].item_code=SYI$_LASTFLD;
    syilst[0].bufaddr=&mem;
    syilst[0].retlenaddr=&retlenaddr;
    syilst[1].buflen=0;
    syilst[1].item_code=0;

    int sts=sys$getsyi(0,0,0,syilst,0,0,0);

    return mem;
}
Пример #4
0
/*
** Writes the hostname of the current system in string "hostname".
**
** NOTE: This function used to be called "GetHostName" but that resulted in a 
** linking conflict on VMS with the standard gethostname function, because
** VMS links case-insensitively.
*/
const char
*GetNameOfHost(void)
{
    static char hostname[MAXNODENAMELEN+1];
    static int  hostnameFound = False;
    
    if (!hostnameFound) {
#ifdef VMS
        /* This should be simple, but uname is not supported in the DEC C RTL and
           gethostname on VMS depends either on Multinet or UCX.  So use uname 
           on Unix, and use LIB$GETSYI on VMS. Note the VMS hostname will
           be in DECNET format with trailing double colons, e.g. "FNALV1::".    */
        int syi_status;
        struct dsc$descriptor_s *hostnameDesc;
        unsigned long int syiItemCode = SYI$_NODENAME;	/* get Nodename */
        unsigned long int unused = 0;
        unsigned short int hostnameLen = MAXNODENAMELEN+1;

        hostnameDesc = NulStrWrtDesc(hostname, MAXNODENAMELEN+1);
        syi_status = lib$getsyi(&syiItemCode, &unused, hostnameDesc, &hostnameLen,
    			        0, 0);
        if (syi_status != SS$_NORMAL) {
	    fprintf(stderr, "nedit: Error return from lib$getsyi: %d", syi_status);
	    strcpy(hostname, "VMS");
        } else
    	    hostname[hostnameLen] = '\0';
        FreeStrDesc(hostnameDesc);
#else
        struct utsname nameStruct;
        int rc = uname(&nameStruct);
        if (rc<0) {
            /* Shouldn't ever happen, so we better exit() here */
           perror("nedit: uname() failed ");
           exit(EXIT_FAILURE);
        }
        strcpy(hostname, nameStruct.nodename);
#endif /* VMS */
        hostnameFound = True;
    }
    return hostname;
}
Пример #5
0
std::string EnvironmentImpl::osNameImpl()
{
	return getsyi(SYI$_NODE_SWTYPE);
}
Пример #6
0
std::string EnvironmentImpl::nodeNameImpl()
{
	return getsyi(SYI$_NODENAME);
}
Пример #7
0
std::string EnvironmentImpl::osArchitectureImpl()
{
	return getsyi(SYI$_ARCH_NAME);
}
Пример #8
0
std::string EnvironmentImpl::osVersionImpl()
{
	return getsyi(SYI$_VERSION);
}
Пример #9
0
rlSharedMemory::rlSharedMemory(const char *shmname, unsigned long Size, int rwmode)
{
#ifdef RLUNIX
    struct shmid_ds buf;

    status  = OK;
    name = new char[strlen(shmname)+1];
    strcpy(name,shmname);
    _size    = Size + sizeof(*mutex);

    // create file
    fdlock = open(name, O_RDWR | O_CREAT, rwmode );
    if(fdlock < 0)
    {
        int ret;
        char buf[1024];
        sprintf(buf,"could not write shm=%s\n",shmname);
        ret = ::write(1,buf,strlen(buf));
        if(ret < 0) exit(-1);
        sprintf(buf,"you have to run this program as root !!!\n");
        ret = ::write(1,buf,strlen(buf));
        if(ret < 0) exit(-1);
        status=ERROR_FILE;
        exit(-1);
    }

    // old stuff, without suggestions from Stefan Lievens
    //shmkey  = ftok(name,0);
    //
    //id  = shmget(shmkey, _size, IPC_CREAT);

    //shmkey  = ftok(name, 'R');
    shmkey  = ftok(name, 'b');

    //id  = shmget(shmkey, _size, 0600 | IPC_CREAT);
    id  = shmget(shmkey, _size, rwmode | IPC_CREAT);
    if(id < 0)           {
        status=ERROR_SHMGET;
        return;
    }

    base_adr = (char *) shmat(id,NULL,0);
    if(base_adr == NULL) {
        status=ERROR_SHMAT;
        return;
    }

    if(shmctl(id, IPC_STAT, &buf) != 0) {
        status=ERROR_SHMCTL;
        return;
    };

    mutex     = (pthread_mutex_t *) base_adr;
    user_adr  = base_adr + sizeof(*mutex);
    flock(fdlock,LOCK_UN);
#endif

#ifdef __VMS
    int file_existed = 0;
    long ret,fd,page_size,pagelets,pagelet_size,file_block_size,flags,item,ident[2];
    FILE *fp;
    ADD  add_in,add_ret;
    struct dsc$descriptor_s section_name;
    struct FAB fab;

    status  = OK;
    name = new char[strlen(shmname)+1];
    strcpy(name,shmname);
    _size    = Size + sizeof(*mutex);
    // The file block size is fixed
    file_block_size = 512; // Bytes
    // Get the page size
    item = SYI$_PAGE_SIZE;
    ret = lib$getsyi( &item       ,
                      &page_size  ,
                      0           ,
                      0           ,
                      0           ,
                      0
                    );
    if(ret != SS$_NORMAL) {
        status=ERROR_FILE;
        return;
    }
    // Fill descriptor for section name
    section_name.dsc$w_length  = strlen(name);
    section_name.dsc$a_pointer = name;
    section_name.dsc$b_dtype   = DSC$K_DTYPE_T;
    section_name.dsc$b_class   = DSC$K_CLASS_S;
    // The pagelet size is fixed
    pagelet_size = 512; // Bytes
    // Get memory
    if(_size % page_size == 0) pagelets = _size / pagelet_size;
    else                      pagelets = (_size / page_size + 1) * (page_size / pagelet_size);
    ret = sys$expreg(pagelets,&add_ret,0,0);
    if(ret != SS$_NORMAL) {
        status=ERROR_FILE;
        return;
    }
    // Set the addresses
    base_adr = (char *) add_ret.start;
    user_adr = base_adr + sizeof(*mutex);
    mutex    = (pthread_mutex_t *) base_adr;
    if(base_adr == NULL) {
        status=ERROR_SHMAT;
        return;
    }
    // Fill the fab
    fab = cc$rms_fab;                       // Initialize fab
    fab.fab$b_fac = fab.fab$b_fac | FAB$M_PUT | FAB$M_DEL | FAB$M_GET | FAB$M_UPD;
    fab.fab$l_fna = name;
    fab.fab$b_fns = strlen(name);
    fab.fab$l_fop = fab.fab$l_fop
                    | FAB$M_CIF            // create file if not existent
                    | FAB$M_CTG            // contiguous
                    | FAB$M_UFO;           // user open
    fab.fab$b_shr =   fab.fab$b_shr            // shareble access
                      | FAB$M_SHRPUT
                      | FAB$M_UPI;
    fab.fab$l_alq = pagelets * pagelet_size / file_block_size;
    // Open the section file
    ret = sys$create (&fab);
    if(ret != RMS$_NORMAL && ret != RMS$_CREATED)
    {
        sys$close (&fab);
        status=ERROR_FILE;
        return;
    }
    // Set the channel
    fd = fab.fab$l_stv;
    // Fill the input address
    add_in.start = add_ret.start;
    add_in.end   = add_ret.end;
    // Clear ident
    ident[0] = 0;
    ident[1] = 0;
    // Set flags
    flags = 0;
    flags = SEC$M_GBL | SEC$M_WRT | SEC$M_PERM;
    // Create and map the section
    ret = sys$crmpsc(&add_in ,&add_ret,
                     (long)0       ,  // acmode
                     flags         ,  // flags
                     &section_name ,  // gsdnam
                     &ident        ,  // ident
                     (long)0       ,  // relpag
                     (short)fd     ,  // chan
                     pagelets      ,  // pagcnt
                     (long)0       ,  // vbn
                     (long)0       ,  // prot
                     (long)0          // pfc
                    );
    if(ret != SS$_NORMAL && ret != SS$_CREATED)
    {
        sys$close(&fab);
        status=ERROR_FILE;
        return;
    }
    // Test the section addresses
    if(add_in.start != add_ret.start || add_in.end != add_ret.end)
    {
        sys$close(&fab);
        status=ERROR_FILE;
        return;
    }
    // Close the section file
    ret = sys$close(&fab);
    // rlwthread_mutex_init(mutex,NULL);
    if(file_existed == 0) myinit(mutex);
#endif

#ifdef RLWIN32
    HANDLE hShmem;
    //int file_existed;

    status  = OK;
    name = new char[strlen(shmname)+1];
    strcpy(name,shmname);
    _size    = Size + sizeof(HANDLE); // sizeof(*mutex);

    //file_existed = 1;
    hSharedFile = CreateFile(name,
                             GENERIC_READ | GENERIC_WRITE,
                             FILE_SHARE_READ | FILE_SHARE_WRITE,
                             NULL,
                             OPEN_EXISTING,
                             FILE_ATTRIBUTE_NORMAL,
                             NULL
                            );
    if(hSharedFile ==  INVALID_HANDLE_VALUE)
    {
        //file_existed = 0;
        hSharedFile = CreateFile(name,
                                 GENERIC_READ | GENERIC_WRITE,
                                 FILE_SHARE_READ | FILE_SHARE_WRITE,
                                 NULL,
                                 CREATE_NEW,
                                 FILE_ATTRIBUTE_NORMAL,
                                 NULL
                                );
    }
    if(hSharedFile == INVALID_HANDLE_VALUE) {
        status=ERROR_FILE;
        return;
    }
    //char *global_name = new char[strlen(name)+40];
    //strcpy(global_name,"Global\\"); strcat(global_name, name);
    //for(int i=7; i<strlen(global_name); i++)
    //{
    //  if     (global_name[i] == ':')  global_name[i] = '_';
    //  else if(global_name[i] == '\\') global_name[i] = '_';
    //  else if(global_name[i] == '.')  global_name[i] = '_';
    //  else if(global_name[i] == ' ')  global_name[i] = '_';
    //}
    hShmem = CreateFileMapping(
                 hSharedFile,
                 NULL,                // no security attributes
                 PAGE_READWRITE,      // read/write access
                 0,                   // size: high 32-bits
                 _size,               // size: low 32-bits
                 0);                  // name of map object // changed by FMakkinga 25-03-2013 global_name);
    //  global_name);      // name of map object
    //delete [] global_name;
    if(hShmem == NULL) {
        status=ERROR_FILE;
        return;
    }
    base_adr = (char *) MapViewOfFile(
                   hShmem,              // object to map view of
                   FILE_MAP_WRITE,      // read/write access
                   0,                   // high offset:  map from
                   0,                   // low offset:   beginning
                   0);                  // default: map entire file
    if(base_adr == NULL) {
        status=ERROR_FILE;
        return;
    }
    id     = (int) hShmem;
    shmkey = (int) hSharedFile;
    mutex     = (pthread_mutex_t *) base_adr;
    user_adr  = base_adr + sizeof(*mutex);
    memset(&overlapped, 0, sizeof(overlapped));      // Changed by FMakkinga 22-03-2013
    UnlockFileEx(hSharedFile,0,_size,0,&overlapped);
#endif
    if(rwmode == 0) return; // no warning of unused parameter
}
Пример #10
0
main(int argc,void ** argv){
  $DESCRIPTOR(imgname,"/bin/ls");
  $DESCRIPTOR(prcname,"ls");
  $DESCRIPTOR(imgname2,"/vms$common/syshlp/examples/hi.exe");
  $DESCRIPTOR(imgname3,"[vms$common.syshlp.examples]hi.exe");
  $DESCRIPTOR(prcname3,"hi");
  $DESCRIPTOR(imgname4,"/vms$common/sysexe/dcl");
  $DESCRIPTOR(prcname4,"dcl2");
  int pid;
  struct item_list_3 lst[14], syilst[2];

  if (argc>1)
    goto dcl;

  int RC = sys$creprc(&pid, &imgname,0,0,0,
		      0, 0, &prcname, 24, 0,
		      0, 0, 0, 0, 0);

  printf("creprc pid %x returned %x\n",pid,RC);

  int retlenaddr;
  int mem=0;

  syilst[0].buflen=4;
  syilst[0].item_code=SYI$_LASTFLD;
  syilst[0].bufaddr=&mem;
  syilst[0].retlenaddr=&retlenaddr;
  syilst[1].buflen=0;
  syilst[1].item_code=0;

  int sts=sys$getsyi(0,0,0,syilst,0,0,0);

  if (!mem) {
    printf("No VMS MM\n");
    goto out;
  }

  int file = fopen(imgname2.dsc$a_pointer,"r");
  if (file==0) {
    printf("%s not found\n",imgname2.dsc$a_pointer);
    goto out;
  }

  RC = sys$creprc(&pid, &imgname3,0,0,0,
		      0, 0, &prcname3, 24, 0,
		      0, 0, 0, 0, 0);

  printf("creprc pid %x returned %x\n",pid,RC);

 out:
  sleep(60);

  return SS$_NORMAL;

 dcl:

  {
    $DESCRIPTOR(opa,"opa0");
    int RC = sys$creprc(&pid, &imgname4,&opa,&opa,&opa,
			0, 0, &prcname4, 24, 0,
			0, 0, 0, 0, 0);

  sleep(60);

  return SS$_NORMAL;
  }

}
Пример #11
0
Boolean Process::getCreationDate (CIMDateTime & d)
const
{
    long status;
    long dst_desc[2];
    char cimtime[80] = "";
    char log_string[] = "SYS$TIMEZONE_DAYLIGHT_SAVING";
    char libdst;
    unsigned __int64 bintime = 0;
    unsigned short int timbuf[7];
    unsigned long libop;
    unsigned long libdayweek;
    unsigned long libdayear;
    unsigned int retlen;
    struct tm timetm;
    struct tm *ptimetm = &timetm;

    // Added to get system uptime for SWAPPER process - PTR 73-51-29
    long item = SYI$_BOOTTIME;
    char t_string[24] = "";
    unsigned __int64  val = 0;
    struct dsc$descriptor_s sysinfo;

    sysinfo.dsc$b_dtype = DSC$K_DTYPE_T;
    sysinfo.dsc$b_class = DSC$K_CLASS_S;
    sysinfo.dsc$w_length = sizeof (t_string);
    sysinfo.dsc$a_pointer = t_string;

    static $DESCRIPTOR (lnm_tbl, "LNM$SYSTEM");
    struct
    {
        unsigned short wLength;
        unsigned short wCode;
        void *pBuffer;
        unsigned int *pRetLen;
        int term;
    } dst_item_list;

    bintime = pInfo.p_stime;

    libop = LIB$K_DAY_OF_WEEK;
    status = lib$cvt_from_internal_time (&libop, &libdayweek, &bintime);
    if (!$VMS_STATUS_SUCCESS (status))
    {
        return false;
    }

    libop = LIB$K_DAY_OF_YEAR;
    status = lib$cvt_from_internal_time (&libop, &libdayear, &bintime);
    if (!$VMS_STATUS_SUCCESS (status))
    {
        return false;
    }

    dst_desc[0] = strlen (log_string);
    dst_desc[1] = (long) log_string;
    dst_item_list.wLength = 1;
    dst_item_list.wCode = LNM$_STRING;
    dst_item_list.pBuffer = &libdst;
    dst_item_list.pRetLen = &retlen;
    dst_item_list.term = 0;

    status = sys$trnlnm (0, &lnm_tbl, &dst_desc, 0, &dst_item_list);
    if (!$VMS_STATUS_SUCCESS (status))
    {
        return false;
    }

    //  Added to get sysuptime for SWAPPER process --- PTR 73-51-29
    if (bintime == 0)
    {
        status = lib$getsyi(&item, 0, &sysinfo, &val, 0, 0);
        status = sys$bintim(&sysinfo, &bintime);
    }

    status = sys$numtim (timbuf, &bintime);
    if (!$VMS_STATUS_SUCCESS (status))
    {
        return false;
    }

    timetm.tm_sec = timbuf[5];
    timetm.tm_min = timbuf[4];
    timetm.tm_hour = timbuf[3];
    timetm.tm_mday = timbuf[2];
    timetm.tm_mon = timbuf[1] - 1;
    timetm.tm_year = timbuf[0] - 1900;
    timetm.tm_wday = libdayweek - 1;
    timetm.tm_yday = libdayear - 1;
    timetm.tm_isdst = 0;
    if (libdst != 48)
    {
        timetm.tm_isdst = 1;
    }
    timetm.tm_gmtoff = -18000;
    timetm.tm_zone = "EST";

    if (convertToCIMDateString (ptimetm, cimtime) != -1)
    {
        d = CIMDateTime (cimtime);
        return true;
    }
    return false;
}
Пример #12
0
show_system(){
int i;
struct item_list_3 lst[14], syilst[4];
char scsnode[16];
char procname[15];
char proclen;
char version[16];
int versionlen;
unsigned long long boottime;
int boottimelen;
unsigned long upid,epid;
unsigned long upidlen,epidlen;
 unsigned long state,statelen;
 unsigned long pri,prilen;
 unsigned long pagep, pageplen;
 unsigned long pageg, pageglen;
 unsigned long pagef, pageflen;
 unsigned int dirio, diriolen, bufio, bufiolen;
int jpistatus;
 int sts;
 int retscsnodelen;

unsigned long long now;
char timestr[23]; 
$DESCRIPTOR(atimenow, timestr); 
char timestr2[23]; 
$DESCRIPTOR(atimenow2, timestr2); 

sys$gettim(&now);
sys$asctim(0,&atimenow,&now,0);

syilst[0].buflen=16;
syilst[0].item_code=SYI$_VERSION;
syilst[0].bufaddr=version;
syilst[0].retlenaddr=&versionlen;
syilst[1].buflen=16;
syilst[1].item_code=SYI$_BOOTTIME;
syilst[1].bufaddr=&boottime;
syilst[1].retlenaddr=&boottimelen;
syilst[2].buflen=16;
syilst[2].item_code=SYI$_SCSNODE;
syilst[2].bufaddr=scsnode;
syilst[2].retlenaddr=&retscsnodelen;
syilst[3].buflen=0;
syilst[3].item_code=0;

 sts=sys$getsyi(0,0,0,syilst,0,0,0);

long long delta = boottime - now;
int deltalen;
sys$asctim(0,&atimenow2,&delta,0);

lst[0].buflen=15;
lst[0].item_code=JPI$_PRCNAM;
lst[0].bufaddr=procname;
lst[0].retlenaddr=&proclen;
lst[1].buflen=4;
lst[1].item_code=JPI$_PID;
lst[1].bufaddr=&epid;
lst[1].retlenaddr=&epidlen;
lst[2].buflen=4;
lst[2].item_code=JPI$_MASTER_PID;
lst[2].bufaddr=&upid;
lst[2].retlenaddr=&upidlen;
lst[3].buflen=4;
lst[3].item_code=JPI$_STATE;
lst[3].bufaddr=&state;
lst[3].retlenaddr=&statelen;
lst[4].buflen=4;
lst[4].item_code=JPI$_PAGEFLTS;
lst[4].bufaddr=&pagef;
lst[4].retlenaddr=&pageflen;
lst[5].buflen=4;
lst[5].item_code=JPI$_PRI;
lst[5].bufaddr=&pri;
lst[5].retlenaddr=&prilen;
lst[6].buflen=4;
lst[6].item_code=JPI$_PPGCNT;
lst[6].bufaddr=&pagep;
lst[6].retlenaddr=&pageplen;
lst[7].buflen=4;
lst[7].item_code=JPI$_GPGCNT;
lst[7].bufaddr=&pageg;
lst[7].retlenaddr=&pageglen;
lst[8].buflen=4;
lst[8].item_code=JPI$_DIRIO;
lst[8].bufaddr=&dirio;
lst[8].retlenaddr=&diriolen;
lst[9].buflen=4;
lst[9].item_code=JPI$_BUFIO;
lst[9].bufaddr=&bufio;
lst[9].retlenaddr=&diriolen;
lst[10].buflen=4;
lst[10].item_code=JPI$_CPUTIM;
lst[10].bufaddr=&delta;
lst[10].retlenaddr=&deltalen;
lst[11].buflen=0;
lst[11].item_code=0;
// printf(" FreeVMS V0.0  on node %6s  NN-OOO-2003 PP:QQ:RR.SS  Uptime  TT XX:YY:ZZ\n",scsnode);
#ifdef __x86_64__
 int bits = 64;
#endif
#ifdef __i386__
 int bits = 32;
#endif
#ifndef FREEVMS_BUILD
#define FREEVMS_BUILD 1
#endif
 printf(" FreeVMS %d V%s build %d on node %6s  %s  Uptime  %s\n", bits,version, FREEVMS_BUILD, scsnode, timestr, timestr2);
 printf("  Pid    Process Name    State  Pri      I/O       CPU       Page flts  Pages\n");

do {
jpistatus=sys$getjpi(0,0,0,lst,0,0,0);
if (jpistatus == SS$_NORMAL)
  delta = -delta * 100000; // check multiplication
  sys$asctim(0,&atimenow2,&delta,0);
  printf("%8x %-15s %-6s %3x %9x %17s %6x %6x\n",epid,procname,states[state],31-pri,dirio+bufio,atimenow2.dsc$a_pointer,pagef,pagep+pageg);
} while (jpistatus == SS$_NORMAL);
//} while (jpistatus != SS$_NOMOREPROC);
}