static void GetItem( void ) { //=============================== IOKW kw; kw = RecIOKW(); if( Permission( kw ) ) { AdvanceITPtr(); ReqEquSign(); switch( kw ) { case IO_ACCESS: CharItem( FC_SET_ACC ); break; case IO_ACTION: CharItem( FC_SET_ACTION ); break; case IO_BLANK: CharItem( FC_SET_BLNK ); break; case IO_BLOCKSIZE: BlockSize(); break; case IO_CARRIAGECONTROL: CharItem( FC_SET_CCTRL ); break; case IO_DIRECT: CharItem( FC_SET_DIR ); break; case IO_END: LabelItem( FC_SET_END ); break; case IO_ERR: LabelItem( FC_SET_ERR ); break; case IO_EXIST: BoolInq( FC_SET_EXST ); break; case IO_FILE: FileItem(); break; case IO_FMT: FormatIdd(); break; case IO_FORM: CharItem( FC_SET_FORM ); break; case IO_FMTTED: CharItem( FC_SET_FMTD ); break; case IO_IOSTAT: IntInq( FC_SET_IOS ); break; case IO_NAME: CharItem( FC_SET_NAME ); break; case IO_NAMED: BoolInq( FC_SET_NMD ); break; case IO_NXTREC: IntInq( FC_SET_NREC ); break; case IO_NUMBER: IntInq( FC_SET_NUMB ); break; case IO_OPENED: BoolInq( FC_SET_OPEN ); break; case IO_REC: IntItem( FC_SET_REC ); break; case IO_RECL: Recl(); break; case IO_RECORDTYPE: CharItem( FC_SET_RECTYPE ); break; case IO_SEQ: CharItem( FC_SET_SEQ ); break; case IO_SHARE: CharItem( FC_SET_SHARE ); break; case IO_STATUS: CharItem( FC_SET_STAT ); break; case IO_UNFMTD: CharItem( FC_SET_UFMTD ); break; case IO_UNIT: Unit(); break; } AdvanceITPtr(); } else { NextComma(); } }
void CpParameter( void ) { //===================== // Compile PARAMETER statement. // // PARAMETER (P1=E1,...,Pn=En), n > 0 uint parm_size; byte *lit; byte *string; int lit_len; sym_id sym; sym_id value_id; TYPE typ; byte assign_val; ReqNOpn(); AdvanceITPtr(); ReqOpenParen(); for(;;) { if( ReqName( NAME_VARIABLE ) ) { sym = LkSym(); typ = sym->u.ns.u1.s.typ; assign_val = TRUE; if( sym->u.ns.flags & (SY_USAGE | SY_SUB_PARM | SY_IN_EC) ) { IllName( sym ); assign_val = FALSE; } else if( typ == FT_STRUCTURE ) { IllType( sym ); assign_val = FALSE; } else { CkSymDeclared( sym ); } AdvanceITPtr(); ReqEquSign(); parm_size = sym->u.ns.xt.size; if( typ == FT_STRUCTURE ) { ConstExpr( FT_NO_TYPE ); } else if( _IsTypeLogical( typ ) ) { CLogicExpr(); } else if( typ == FT_CHAR ) { CCharExpr(); } else { CArithExpr(); } if( !AError && assign_val ) { if( typ == FT_CHAR ) { string = (byte *)CITNode->value.cstring.strptr; if( CITNode->size < parm_size ) { lit = FMemAlloc( parm_size ); lit_len = CITNode->size; memcpy( lit, string, lit_len ); memset( lit + lit_len, ' ', parm_size - lit_len ); value_id = STLit( lit, parm_size ); FMemFree( lit ); } else { if( parm_size == 0 ) { // *(*) parm_size = CITNode->size; } value_id = STLit( string, parm_size ); } } else { if( !_IsTypeLogical( typ ) ) { CnvTo( CITNode, typ, parm_size ); } value_id = STConst( &CITNode->value, typ, parm_size ); } sym->u.ns.flags |= SY_USAGE | SY_PARAMETER | SY_TYPE; sym->u.ns.xt.size = parm_size; sym->u.ns.si.pc.value = value_id; } } AdvanceITPtr(); if( !RecComma() ) break; } ReqCloseParen(); if( ReqNOpn() ) { AdvanceITPtr(); ReqEOS(); } }