Beispiel #1
0
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;
		}
	}
}