I have the following probem and I hope someone can please help me:
I have two programs: The main one (Program1) calls the second programm (Program2) and hand over up to 3 varibles (maybe variable1 and variable2 or variable1, variable1 and variable3 .
By the way my call differs from the normal way of PL/I calling, but is in my eyes not necessary to explain it ...
Main programm:
[...]
call(program2, Variable1, Variable2, Variable3)
These 2 respectively 3 variables are read out by a based structure in programm2.
DCL VARIABLE4 char (1) BASED (Variable1);
DCL VARIABLE5 char (1) BASED (Variable2);
DCL VARIABLE6 char (1) BASED (Variable3);
The position of the passed variables is read out (passed variable1 corresponds to the created variable4, variable 2-->variable5, etc.). However, this does not work via the normal procedure based on the position to position but via "based" structure. The program expects until now always that all 3 variables are filled. But I want that the 3rd parameter is expected to be variable. i.e. if only variable1 and variable2 are passed, only variable 4 and 5 should be supplied with values; variable6 remains empty, but is still declared.
If all three Varibalen (Variabe1 - Varibale6) are filled, these are taken over in variable 4 - variable 6).
This is because the created variable6 is still used in the program code of the subprocedure, even if it was not passed. There is a possibility to get the quantity of filled variables (in the if clause shown as quantity), which can be used.
Probably this construct is cumbersome and there are simpler/better solutions. A rebuilding/change of the whole structure is however not possible/desired/wanted.
Symbolically a program code as it unfortunately did not function:
DCL VARIABLE4 char (1) BASED (Variable1);
DCL VARIABLE5 char (1) BASED (Variable2);
If quantity = 3
then do;
DCL VARIABLE6 char (1) BASED (Variable3);
END;
else do;
DCL VARIABLE6 char (1) init('');
END;
I hope you understand the pseudocode and what I mean, because in reality it's much more complicated
Thany you for your advice