hexagon logo

External Subroutine question

Hello all,

I will explain what I want to do before asking the question / your help.

I have programs that need to call a subroutine that will have a rev number. Example "Sub_Rev_A.prg"

I have a text file that those programs read and extract the final letter of the name and assign it in a variable with the readline command. So if I have a second sub named "Sub_Rev_B.prg" and the txt file writes B, the B sub will be read instead.

Now the issue I am having is... Those programs will be read only in a read only folder. I noticed that when I start those programs, they search for the sub they had executed in the first run while NOT in read only mode and after that while executing they search for the real version to execute (and execute it correctly).

In the example I gave be4, Main Program is tested with REV A sub, saved and set to read only. It works with Rev A for some time perfectly. Later on, we revise the sub to rev B, change the Txt to B. The program starts, gives an error message that the sub A is not found (we remove the old revisions), procedes to execution, reads the txt, executes sub B. From that point if I reexecute the Main program without closing it runs without error. If I close and reopen it I am getting the same error for Rev A.

No impact on the result of the measurement but each time I am getting an annoying message that I would love to eliminate if possible. Please know that in reality I am talking about hundreds of programs and subs and it is not possible to remove readonly mode each time we revise a sub without performing validation documents etc,

any help is much appreciated! |

PC-Dmis 2017 R2
Parents
  • I think if you make sure the variable initially holds a valid subname it won't error.

    On starting execution it's just running a check that the CALLSUB points to a valid location.

    This seems to work for me:

    [B]ASSIGN/MYSUBNUM="1"[/B]
    FPTR =FILE/OPEN,C:\Temp\SubNum.txt,READ
    V1 =FILE/READLINE,FPTR,{mysubnum}
    FILE/CLOSE,FPTR,KEEP
    ASSIGN/MYSUBNUM="SUB"+MYSUBNUM
    CS1 =CALLSUB/MYSUBNUM,C:\Users\Public\Documents\Hexagon\PC-DMIS\2023.1\SubLibrary.PRG:,
    
    
    ​



    Where as this didn't (and I go t the same error you mention)

    [B]ASSIGN/MYSUBNUM=""[/B]
    FPTR =FILE/OPEN,C:\Temp\SubNum.txt,READ
    V1 =FILE/READLINE,FPTR,{mysubnum}
    FILE/CLOSE,FPTR,KEEP
    ASSIGN/MYSUBNUM="SUB"+MYSUBNUM
    CS1 =CALLSUB/MYSUBNUM,C:\Users\Public\Documents\Hexagon\PC-DMIS\2023.1\SubLibrary.PRG:,
    
    
    ​
Reply
  • I think if you make sure the variable initially holds a valid subname it won't error.

    On starting execution it's just running a check that the CALLSUB points to a valid location.

    This seems to work for me:

    [B]ASSIGN/MYSUBNUM="1"[/B]
    FPTR =FILE/OPEN,C:\Temp\SubNum.txt,READ
    V1 =FILE/READLINE,FPTR,{mysubnum}
    FILE/CLOSE,FPTR,KEEP
    ASSIGN/MYSUBNUM="SUB"+MYSUBNUM
    CS1 =CALLSUB/MYSUBNUM,C:\Users\Public\Documents\Hexagon\PC-DMIS\2023.1\SubLibrary.PRG:,
    
    
    ​



    Where as this didn't (and I go t the same error you mention)

    [B]ASSIGN/MYSUBNUM=""[/B]
    FPTR =FILE/OPEN,C:\Temp\SubNum.txt,READ
    V1 =FILE/READLINE,FPTR,{mysubnum}
    FILE/CLOSE,FPTR,KEEP
    ASSIGN/MYSUBNUM="SUB"+MYSUBNUM
    CS1 =CALLSUB/MYSUBNUM,C:\Users\Public\Documents\Hexagon\PC-DMIS\2023.1\SubLibrary.PRG:,
    
    
    ​
Children
No Data