?? RIGHT := 110 ??
MODULE ocm$build_first_intermediate_ol;
*copyc osd$default_pragmats
?? PUSH (LISTEXT := ON) ??
*copyc occ$generate_predictor
*copyc oct$offset_change_list
*copyc oct$predictor_header
*copyc oce$metapatch_generator_errors
*copyc ocp$apply_module_predictors
*copyc ocp$process_dictionaries
*copyc ocp$copy
*copyc osp$set_status_abnormal
?? POP ??

*copyc och$build_first_intermediate_ol

  PROCEDURE [XDCL] ocp$build_first_intermediate_ol (p_predictor: ^SEQ ( * );
        old_ol: ^SEQ ( * );
    VAR first_intermediate_ol: ^SEQ ( * );
    VAR status: ost$status);

    VAR
      mod_dictionary_ocv: ^oct$offset_change_list,
      ol_dictionary_ocv: ^oct$offset_change_list,
      predictor: ^SEQ ( * ),
      predictor_header: ^oct$predictor_header,
      valid: boolean;

    predictor := p_predictor;

    ocp$copy (old_ol, first_intermediate_ol, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;

    RESET predictor;
    NEXT predictor_header IN predictor;
    IF predictor_header^.number_module_predictors > 0 THEN
      RESET predictor;
      ocp$apply_module_predictors (predictor, first_intermediate_ol, status);
      IF NOT status.normal THEN
        RETURN;
      IFEND;
    IFEND;
    IF (predictor_header^.number_of_ol_ocv_elements > 0) THEN
      ol_dictionary_ocv := #PTR (predictor_header^.ol_dictionary_ocv, predictor^);
    ELSE
      ol_dictionary_ocv := NIL;
    IFEND;
    IF (predictor_header^.number_of_mod_ocv_elements > 0) THEN
      mod_dictionary_ocv := #PTR (predictor_header^.mod_dictionary_ocv, predictor^);
    ELSE
      mod_dictionary_ocv := NIL;
    IFEND;
    IF (mod_dictionary_ocv <> NIL) OR (ol_dictionary_ocv <> NIL) THEN
      ocp$process_dictionaries (ol_dictionary_ocv, mod_dictionary_ocv, first_intermediate_ol, status);
    IFEND;
  PROCEND ocp$build_first_intermediate_ol;
MODEND ocm$build_first_intermediate_ol;
