Esempio n. 1
0
static  void    StreamUnFmtIn( void ) {
//===============================

    ftnfile     *fcb;

    fcb = IOCB->fileinfo;
    for(;;) {
        IOCB->typ = IOTypeRtn();
        if( IOCB->typ == PT_NOTYPE ) break;
        if( IOCB->typ == PT_CHAR ) {
            IUnStream( IORslt.string.strptr, IORslt.string.len );
        } else if( IOCB->typ == PT_ARRAY ) {

            uint        elmt_size;

            if( IORslt.arr_desc.typ == PT_CHAR ) {
                elmt_size = IORslt.arr_desc.elmt_size;
            } else {
                elmt_size = SizeVars[ IORslt.arr_desc.typ ];
            }
            IUnStream( IORslt.arr_desc.data,
                       IORslt.arr_desc.num_elmts * elmt_size );
        } else {
            fcb->len = SizeVars[ IOCB->typ ];
            if( fcb->len > fcb->bufflen ) {
                IOErr( IO_UNFMT_RECL );
            }
            NextRec();
            UnFmtItem( fcb->buffer );
        }
    }
}
Esempio n. 2
0
static  void    RecordUnFmtIn( void ) {
//===============================

    ftnfile     *fcb;
    int         len;

    fcb = IOCB->fileinfo;
    NextRec();
    for(;;) {
        IOCB->typ = IOTypeRtn();
        if( IOCB->typ == PT_NOTYPE ) break;
        if( fcb->col == fcb->len ) {
            NextUnFmtRec();
        }
        if( IOCB->typ == PT_CHAR ) {
            IUnString();
        } else if( IOCB->typ == PT_ARRAY ) {
            IUnArray();
        } else {
            len = SizeVars[ IOCB->typ ];
            if( fcb->col + len > fcb->len ) {
                IOErr( IO_UNFMT_RECL );
            }
            UnFmtItem( fcb->buffer + fcb->col );
            fcb->col += len;
        }
    }
}
Esempio n. 3
0
int RM_FileScan::GetNextRec(RM_Record &rec, RID &rid) {
	RM_Record nextrec;
	int result = NextRec(nextrec, rid);
	if(result != 0) return result;
	Bytes get_data = new char[filehandle->GetRsize()];
	memcpy(get_data,nextrec.GetRdata(),filehandle->GetRsize());
	rec.SetSize(filehandle->GetRsize());
	rec.SetData(get_data);
	return 0;
}
Esempio n. 4
0
static void NextUnFmtRec( void ) {
//================================

    if( _LogicalRecordOrganization( IOCB->fileinfo ) ) {
        if( CheckLogicalRecord( IOCB->fileinfo ) ) {
            NextRec();
            return;
        }
    }
    IOErr( IO_UNFMT_RECL );
}
Esempio n. 5
0
void    R_NewRec( void ) {
//==================

    if( IOCB->flags & IOF_OUTPT ) {
        IOCB->fileinfo->col = IOCB->fmtlen;
        CheckCCtrl();
        SendEOR();
        IOCB->fmtlen = IOCB->fileinfo->col;
    } else {
        NextRec();
    }
}
Esempio n. 6
0
void    CheckEor( void ) {
//==================

    ftnfile     *fcb;

    fcb = IOCB->fileinfo;
    while( fcb->col >= fcb->len ) {
        NextRec();
        if( IOCB->typ != PT_CHAR ) {
            Blanks();
        }
    }
}
Esempio n. 7
0
static  void    IUnStream( char HPGM *dst, unsigned long len ) {
//==============================================================

    uint        amt;
    ftnfile     *fcb;

    fcb = IOCB->fileinfo;
    for(;;) {
        amt = fcb->bufflen;
        if( amt > len ) {
            amt = len;
        }
        fcb->len = amt;
        NextRec();
        pgm_memput( dst, fcb->buffer, fcb->len );
        len -= amt;
        if( len == 0 ) break;
        dst += amt;
    }
}
Esempio n. 8
0
int RM_FileScan::GetNextRec(RID &rid) {
	RM_Record nextrec;
	return NextRec(nextrec, rid);
}
Esempio n. 9
0
void    FreeIn( void ) {
//================

    NextRec();
    DoFreeIn();
}
Esempio n. 10
0
int main()
{
	
	printf("******************************************\n");
	printf("*        Record Manager Application      *\n");
	printf("*                 Xinyi He               *\n");
	printf("******************************************\n");
	char c;
	do
	{
		printf("\n");
		printf("a. Open database\n");
		printf("b. Get first record\n");
		printf("c. Get next record \n");
		printf("d. Get previous record\n");
		printf("e. Get Nth record\n");
		printf("f. Insert record\n");
		printf("g. Bulk insert records in file\n");
		printf("h. Delete record\n");
		printf("i. Update record\n");
		printf("j. Find record with first attribute value\n");
		printf("k. Show catalog file\n");
		printf("l. Get first page\n");
		printf("m. Get next page\n");
		printf("n. Show buf stats\n");
		printf("o. Commit changes\n");
		printf("p. Exit\n");
		printf("Please press letter to choose an action.\n");
		c = getchar();
		fflush(stdin);

		char filename[100];

		switch (c)
		{
			//a. Open database
		case 'a':
			{
				printf("Please input the database name (don't include extension): ");				
				gets(filename);
				OpenStore(filename);
				break;
			}
			//b. Get first record
		case 'b':
			{
				Output(FirstRec());
				break;
			}
			//c. Get next record
		case 'c':
			{
				Output(NextRec());
				break;
			}
			//d. Get previous record
		case 'd':
			{
				Output(PriorRec());
				break;
			}
			//e. Get Nth record
		case 'e':
			{
				printf("\nInput N: ");
				int n;
				scanf("%d", &n);
				Output(NRec(n));
				fflush(stdin);
				break;
			}
			//f. Insert record
		case 'f':
			{
				printf("\nInput a comma-delimited Record:\n");
				char statement[100];
				scanf("%s", &statement);
				fflush(stdin);
				InsertRec(statement);				
				break;
			}
			//g. Bulk insert records in file
		case 'g':
			{
				printf("\nInput the filename(include extension): ");
				char file[100];
				scanf("%s", &file);
				InsertRecFromFile(file);
				fflush(stdin);
				break;
			}
			//h. Delete record
		case 'h':
			{
				DeleteRec();
				break;
			}
			//i. Update record
		case 'i':
			{
				printf("\nInput a comma-delimited Record:\n");
				char statement[100];
				scanf("%s", &statement);
				fflush(stdin);
				UpdateRec(statement);
				break;
			}
			//j. Find record with first attribute value
		case 'j':
			{
				printf("\nInput value:\n");
				char statement[100];
				scanf("%s", &statement);
				fflush(stdin);
				SearchRec(statement);
				break;
			}
			//k. Show catalog file
		case 'k':
			{
				DisplyCatFile(filename);
				break;
			}
			//l. Get first page
		case 'l':
			{
				GetPage(0);
				break;
			}
			//m. Get next page
		case 'm':
			{
				GetPage(1);
				break;
			}
			//n. Show buf stats
		case 'n':
			{
				ShowBuf();
				break;
			}
			//o. Commit changes
		case 'o':
			{
				Commit(filename);
				break;
			}
			//p. Exit
		case 'p':
			{
				CloseStore(filename);
			}
		};
	}while(c != 'p');

	return 0;
}