Exemplo n.º 1
0
int     _FileAttrs( ftnfile *fcb ) {
//==================================

    int     attrs;

    attrs = 0;
    if( fcb->recfm == RECFM_DEFAULT ) {
        attrs |= DfltRecType( fcb );
    } else if( fcb->recfm == RECFM_VARIABLE ) {
        attrs |= REC_VARIABLE;
    } else if( fcb->recfm == RECFM_TEXT ) {
        attrs |= REC_TEXT;
    } else {
        attrs |= REC_FIXED;
    }
    if( fcb->share == SHARE_DENYRW ) {
        attrs |= S_DENYRW;
    } else if( fcb->share == SHARE_DENYWR ) {
        attrs |= S_DENYWR;
    } else if( fcb->share == SHARE_DENYRD ) {
        attrs |= S_DENYRD;
    } else if( fcb->share == SHARE_DENYNO ) {
        attrs |= S_DENYNO;
    }
    if( fcb->cctrl == CC_YES ) {
        attrs |= CARRIAGE_CONTROL;
    }
    if( (fcb->accmode == ACCM_SEQUENTIAL) || (fcb->accmode == ACCM_APPEND) ) {
        if( !IsDevice( fcb ) ) {
            attrs |= TRUNC_ON_WRITE;
        }
    }
    if( fcb->accmode == ACCM_APPEND ) {
        attrs |= APPEND;
    } else if( fcb->accmode == ACCM_DIRECT ) {
        attrs |= SEEK;
    }
    if( fcb->action == ACTION_READ ) {
        attrs |= RDONLY;
    } else if( fcb->action == ACTION_WRITE ) {
        attrs |= WRONLY;
    } else {
        attrs |= RDWR;
    }
    return( attrs );
}
Exemplo n.º 2
0
void    InqOdList( void ) {
//===================

    ftnfile     *fcb;
    byte        spec;

    fcb = IOCB->fileinfo;
    if( IOCB->set_flags & SET_NUMBPTR ) {
        *IOCB->numbptr = fcb->unitid;
    }
    if( IOCB->set_flags & SET_RECFMPTR ) {
        spec = fcb->recfm;
        if( spec == RECFM_DEFAULT ) {
            spec = DfltRecType( fcb );
        }
        RTCopy( RecType[ spec ], IOCB->recfmptr );
    }
    if( IOCB->set_flags & SET_CCTRLPTR ) {
        spec = fcb->cctrl;
        if( spec == CC_DEFAULT ) {
            spec = CC_NO;
        }
        RTCopy( CCtrl[ spec ], IOCB->cctrlptr );
    }
    if( IOCB->set_flags & SET_ACTPTR ) {
        spec = fcb->action;
        if( spec == ACT_DEFAULT ) {
            spec = ACTION_RW;
        }
        RTCopy( Action[ spec ], IOCB->actptr );
    }
    if( IOCB->set_flags & SET_SHARE ) {
        spec = fcb->share;
        if( spec == SHARE_DEFAULT ) {
            spec = SHARE_COMPAT;
        }
        RTCopy( Share[ spec ], IOCB->shareptr );
    }
    if( IOCB->set_flags & SET_ACCPTR ) {
        spec = fcb->accmode;
        if( spec == ACCM_DEFAULT ) {
            spec = ACCM_SEQUENTIAL;
        }
        RTCopy( ModeAcc[ spec ], IOCB->accptr );
    }
    spec = fcb->formatted;
    if( spec == FORMATTED_DFLT ) {
        spec = FORMATTED_IO;
        if( fcb->accmode == ACCM_DIRECT ) {
            spec = UNFORMATTED_IO;
        }
    }
    if( IOCB->set_flags & SET_FORMPTR ) {
        RTCopy( Form[ spec ], IOCB->formptr );
    }
    if( IOCB->set_flags & SET_BSIZEPTR ) {
        *IOCB->bsizeptr = fcb->blocksize;
    }
    if( IOCB->set_flags & SET_LENPTR ) {
        *IOCB->lenptr = fcb->bufflen;
    }
    if( fcb->accmode == ACCM_DIRECT ) {
        if( IOCB->set_flags & SET_NRECPTR ) {
            *IOCB->nrecptr = fcb->recnum;
        }
    }
    // At this point, "spec" still contains the format.
    if( ( IOCB->set_flags & SET_BLNKPTR ) && ( spec == FORMATTED_IO ) ) {
        spec = fcb->blanks;
        if( spec == BLANK_DEFAULT ) {
            spec = BLANK_NULL;
        }
        RTCopy( Blank[ spec ], IOCB->blnkptr );
    }
}