Ejemplo n.º 1
0
/*			CLI$DCL_PARSE to parse it using specified tables */
U_Long
Cli_Parse_Command( const void *cmd_tables, const char *cmd_verb )
{
    struct { short len, code; void *adr; } fscn[2];
    struct { char rqtype, rqindx, rqflags, rqstat; unsigned :32;
	     Dsc rdesc; unsigned :32; unsigned :32; unsigned :32; } cmd;
    U_Long sts;
    int    ltmp;
    char   longbuf[8200];
    (void)lib$establish(lib$sig_to_ret);

    memset(&cmd, 0, sizeof cmd);
    cmd.rqtype = CLI$K_GETCMD;		/* command line minus the verb */
    sts = sys$cli(&cmd, (void *)0, (void *)0);	/* get actual command line */

    if (vmswork(sts)) {		/* ok => cli available & verb wasn't "RUN" */
	/* invoked via symbol => have command line (which might be empty) */
	/*    [might also be invoked via mcr or dcl; that's ok]		  */
	if (cmd.rqstat == CLI$K_VERB_MCR) {
	    /* need to strip image name from MCR invocation   */
	    memset(fscn, 0, sizeof fscn);
	    fscn[0].code = FSCN$_FILESPEC;	/* full file specification */
	    (void)sys$filescan(&cmd.rdesc, fscn, (long *)0);
	    cmd.rdesc.len -= fscn[0].len;	/* shrink size */
	    cmd.rdesc.adr += fscn[0].len;	/* advance ptr */
	}
	/* prepend verb and then parse the command line */
	strcat(strcpy(longbuf, cmd_verb), " "),  ltmp = strlen(longbuf);
	if (cmd.rdesc.len + ltmp > sizeof longbuf)
	    cmd.rdesc.len = sizeof longbuf - ltmp;
	strncpy(&longbuf[ltmp], cmd.rdesc.adr, cmd.rdesc.len);
	cmd.rdesc.len += ltmp,	cmd.rdesc.adr = longbuf;
	sts = cli$dcl_parse(&cmd.rdesc, cmd_tables);
    }

    return sts;
}
Ejemplo n.º 2
0
static PyObject * FileScanner_FileScan(PyObject *self, PyObject *args)
{

    FILE *infile;
    char *DataPtr;
    PyFileObject *File;
    PyArrayObject *Array;
    double *(*P_array);
    double *(*Old_P_array);
    int i,j,k;
    //int ScanCount = 0;
    npy_intp ScanCount = 0;
    int BufferSize = BUFFERSIZE2;
    int OldBufferSize = 0;
    int StartOfBuffer = 0;
    int NumBuffers = 0;

    if (!PyArg_ParseTuple(args, "O!", &PyFile_Type, &File) ) {
	return NULL;
    }  
    infile = PyFile_AsFile( (PyObject*)File );

    P_array = (double**) calloc(BufferSize, sizeof(void*) );
    while (1) {
	for (j=StartOfBuffer; j < BufferSize; j++){
	    P_array[j] = (double*) calloc(BUFFERSIZE1, sizeof(double));
	    NumBuffers++ ;
	    i = filescan(infile, BUFFERSIZE1, P_array[j]);
	    if (i) {
		ScanCount += i;
		//for (k=0; k<BUFFERSIZE1; k++){ 
		//    printf("%.14g\n", P_array[j][k]);
		//}
	    }
	    if (i == 0){
		break;
	    }
	}
	if (i == 0) {
	    break;
	}
	// Need more memory
	OldBufferSize = BufferSize;
	BufferSize += BUFFERSIZE2;
	StartOfBuffer += BUFFERSIZE2;
	Old_P_array = P_array;
	P_array = (double**) calloc(BufferSize, sizeof(void*) );
	
	for (j=0; j < OldBufferSize; j++){
	    P_array[j] = Old_P_array[j];
	}
	free(Old_P_array);
    }

    // copy all the data to a PyArray
    Array = (PyArrayObject *) PyArray_SimpleNew(1, &ScanCount, PyArray_DOUBLE);

    i = 0;
    DataPtr = Array->data;
    for (j=0; j<BufferSize; j++){
	for (k=0; k<BUFFERSIZE1; k++){
	    if (i >= ScanCount) {
		break;
	    }
	    *(double *)DataPtr = P_array[j][k];
	    DataPtr +=  Array->strides[0];
	    i++;
	}
    }

    //free all the memory
    for (j=0; j<NumBuffers; j++){
	free(P_array[j]);
    }
    free(P_array);

    return PyArray_Return(Array);
}