void zl_cmd_qlf (mstr *quals, command_qualifier *qualif) { char cbuf[MAX_LINE]; error_def (ERR_COMPILEQUALS); int parse_ret; if (quals->len + sizeof(COMMAND) > MAX_LINE) rts_error(VARLSTCNT(4) ERR_COMPILEQUALS, 2, quals->len, quals->addr); memcpy(cbuf, COMMAND, sizeof(COMMAND) - 1); memcpy(cbuf + sizeof(COMMAND) -1, quals->addr, quals->len); cbuf[sizeof(COMMAND) - 1 + quals->len] = 0; cli_str_setup(sizeof(COMMAND) + quals->len, cbuf); parse_ret = parse_cmd(); if (parse_ret) rts_error(VARLSTCNT(4) parse_ret, 2, LEN_AND_STR(cli_err_str)); qualif->object_file.mvtype = qualif->list_file.mvtype = qualif->ceprep_file.mvtype = 0; get_cmd_qlf (qualif); }
void compile_source_file(unsigned short flen, char *faddr, boolean_t mExtReqd /* not used in VMS */) { struct FAB srch_fab; struct NAM srch_nam; char exp_string_area[255], list_file[256], obj_file[256], ceprep_file[256]; int status; DCL_THREADGBL_ACCESS; SETUP_THREADGBL_ACCESS; obj_fab = cc$rms_fab; srch_fab = cc$rms_fab; srch_fab.fab$l_dna = DOTM; srch_fab.fab$b_dns = STR_LIT_LEN(DOTM); srch_fab.fab$l_fna = faddr; srch_fab.fab$b_fns = flen; srch_fab.fab$l_fop |= FAB$M_NAM; srch_fab.fab$l_nam = &srch_nam; srch_nam = cc$rms_nam; srch_nam.nam$l_rsa = source_file_name; srch_nam.nam$b_rss = NAME_MAX; /* 255 since PATH_MAX is 256 on 7.3-2 */ srch_nam.nam$l_esa = exp_string_area; srch_nam.nam$b_ess = SIZEOF(exp_string_area); status = sys$parse(&srch_fab); if (RMS$_NORMAL != status) { dec_err(VARLSTCNT(4) ERR_SRCFILERR, 2, source_name_len, source_file_name); dec_err(VARLSTCNT(1) status); TREF(dollar_zcstatus) = ERR_ERRORSUMMARY; } else { cmd_qlf.object_file.str.addr = obj_file; cmd_qlf.object_file.str.len = 255; cmd_qlf.list_file.str.addr = list_file; cmd_qlf.list_file.str.len = 255; cmd_qlf.ceprep_file.str.addr = ceprep_file; cmd_qlf.ceprep_file.str.len = 255; get_cmd_qlf(&cmd_qlf); tt_so_do_once = FALSE; for (; ;) { if (srch_fab.fab$l_dev & DEV$M_FOD) { status = sys$search(&srch_fab); if (status == RMS$_NMF ) { break; } else if (status == RMS$_FNF) { dec_err(VARLSTCNT(4) ERR_FILENOTFND, 2, srch_nam.nam$b_esl, srch_nam.nam$l_esa); TREF(dollar_zcstatus) = ERR_ERRORSUMMARY; break; } else if (status != RMS$_NORMAL) { dec_err(VARLSTCNT(4) ERR_SRCFILERR, 2, source_name_len, source_file_name); dec_err(VARLSTCNT(1) status); TREF(dollar_zcstatus) = ERR_ERRORSUMMARY; break; } else { source_name_len = srch_nam.nam$b_rsl; source_file_name[source_name_len] = '\0'; } } else { source_name_len = SIZEOF("SYS$INPUT"); memcpy(source_file_name, "SYS$INPUT", source_name_len); source_file_name[source_name_len] = '\0'; tt_so_do_once = TRUE; } if (compiler_startup()) TREF(dollar_zcstatus) = ERR_ERRORSUMMARY; else { status = sys$close(&obj_fab); obj_fab = cc$rms_fab; if (RMS$_NORMAL != status) rts_error(VARLSTCNT(6) ERR_OBJFILERR, 2, object_name_len, object_file_name, status, obj_fab.fab$l_stv); } if (tt_so_do_once) break; } } }