Personal tools
You are here: Home Projects C++ Cfront releases Release 3.0.3 source libSC G2++ g2++lib manip.c
Document Actions

manip.c

by Michael L Powell last modified 2007-01-26 03:23

Click here to get the file

Size 3.4 kB - File type text/plain

File contents

/*ident	"@(#)G2++:g2++lib/manip.c	3.1" */
/******************************************************************************
*
* C++ Standard Components, Release 3.0.
*
* Copyright (c) 1991, 1992 AT&T and Unix System Laboratories, Inc.
* Copyright (c) 1988, 1989, 1990 AT&T.  All Rights Reserved.
*
* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T and Unix System
* Laboratories, Inc.  The copyright notice above does not evidence
* any actual or intended publication of such source code.
*
******************************************************************************/

#include "g2ctype.h"
#include "g2debug.h"
#include "g2io.h"
#include "g2manip.h"

#include <stream.h>
#include <String.h>

//  Global data

int seekflag_ATTLC;       // used in getbuf.c and getrec.c
String seekname_ATTLC;    // used in getbuf.c only (?)


String g2seek(
    istream& is,
    const String& name
){
    DEBUG(cerr 
	<< "enter g2seek with name=" 
	<< name 
	<< "\n"
    ;)
    String temp;

    while(
	temp=getname_ATTLC(is)
    ){
	DEBUG(cerr 
	    << "getname_ATTLC returns temp=" 
	    << temp 
	    << "\n"
	;)
	if(
	    name.is_empty() ||
	    temp==name
	){
	    return temp;
	}
    }
    return "";
}

String g2seek(
    istream& is
){
    return g2seek(is,"");
}

String getname_ATTLC(

//  1.  Sync to record boundry
//  2.  Get the name
//  3.  Leave file in position for subsequent 
//      "getbody" or "getbuf_ATTLC"

    istream& 	is
){
    DEBUG(cerr << "enter getname_ATTLC" << "\n";)
    String result;
    int c = '\n'; 
    int last;
    int	sync = 0;
    seekflag_ATTLC = 0;
    /*Mark(is);*/

//  Sync 

    DEBUG(cerr << "ready to sync to record boundary\n";)
    for(;;){
	last = c;
	c = getchar_G2_ATTLC(is);
	DEBUG(
	    cerr 
		<< "is.get() returns c = ASCII " 
		<< c 
		<< " ("
		<< char(c)
		<< " )"
		<< "\n"
	    ;
	)
	if( 
	    c == BS_EOF 
	){
	    DEBUG(
		cerr 
		    << "hit EOF--ready to return result = \"" 
		    << result 
		    << "\"\n"
		;
	    )
	    DEBUG(
		void* state = (void*)is;
		if(
		    state
		){
		    cerr << "stream tests non-zero\n";
		}else{
		    cerr << "stream tests zero\n";
		}
		int e = is.eof();
		cerr << "is.eof() return " << e << "\n";
	    )
	    return result;
	}
	if( 
	    last=='\n' && 
	    isname1_ATTLC(c) 
	){
	    DEBUG(cerr << "ready to break from for loop\n";)
	    break;
	}
	sync = 1;
    }
    if( 
	sync 
    ){
	DEBUG(cerr << "after for loop, sync is true\n";)
	is.putback(c);
	DEBUG(
	    cerr 
		<< "is.putback c = ASCII " 
		<< c 
		<< " ("
		<< char(c)
		<< " )"
		<< "\n"
	    ;
	)
	/*Mark(is);*/
	c = getchar_G2_ATTLC(is);
	DEBUG(
	    cerr 
		<< "is.get() returns c = ASCII " 
		<< c 
		<< " ("
		<< char(c)
		<< " )"
		<< "\n"
	    ;
	)
    }

//  Gather name 

    DEBUG(cerr << "gather name:\n";)
    do{
	result += c;
	c = getchar_G2_ATTLC(is);
	DEBUG(
	    cerr 
		<< "is.get() returns c = ASCII " 
		<< c 
		<< " ("
		<< char(c)
		<< " )"
		<< "\n"
	    ;
	)
    }while( 
	isname2_ATTLC(c) 
    );
    DEBUG(cerr << "after do loop, result = " << result << "\n";)

//  Put back seperator 

    is.putback(c);
    DEBUG(
	cerr 
	    << "putback separator c = ASCII " 
	    << c 
	    << " ("
	    << char(c)
	    << " )"
	    << "\n"
	;
    )

//  Set the seekflag so that subsequent stream 
//  extractions employ getbody instead of getrec_ATTLC

    seekflag_ATTLC=1;
    seekname_ATTLC=result;
    DEBUG(cerr 
	<< "ready to return with result = " 
	<< result 
	<< "\n"
    ;)
    return result;
}
« May 2024 »
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: