Here is one I wrote a whle back, when I needed it.

It currently looks for any call statements and explodes them and displays it
in a tree structure..
Of course, to can be modified to suit your needs.

Regards
Bjorn

Program Start:

PROGRAM GET.CALL
* ------------------------------------------------------------------- *
* AUTHOR : Bjorn Behr (BJB)                                           *
* DATE   : 14/05/03                                                   *
* DESC   : Program to display all Call Routines in the Requested      *
*        : Program                                                    *
* ------------------------------------------------------------------- *
* No   Date     Who  Description                                      *
* --   ----     ---  -----------                                      *
* H00  14/05/03 BJB  Original Code                                    *
* =================================================================== *
      PROMPT ""
$INCLUDE SBINCLUDE COMMON
      CALL SET.COMMON
      GOSUB Initialization
      GOSUB GetCalls
      GOSUB DisplayCalls
ExitOnError:
      RETURN
* =================================================================== *
* SUBROUTINES - Start                                                 *
* ------------------------------------------------------------------- *
Initialization:
      DIM RecordArray(250)
      DIM OrigArray(250)
      DIM RowNumber(250)
* Open Files
      OPEN "MD" TO MD ELSE STOP 201,"MD"
      OPEN "NOTES" TO SCalls ELSE STOP 201,"NOTES"
*  Variables
** Get Depth number
      DepthNo = 250
      LOOP
         CRT @(-1)
         CRT @(10,12):"How far do you want to explode 'Calls' [1-250] : ":
         INPUT DepthNo
         IF (DepthNo = "") THEN DepthNo = 250
      UNTIL (DepthNo > 0) AND (DepthNo < 251)
      REPEAT
** Ask if you want to see DISP's or not
      DispAns = ""
      LOOP
         CRT @(10,13):"Do you want to see DISP Calls [Y/N] : ":
         INPUT DispAns, 1
         DispAns = UPCASE(DispAns)
      UNTIL (DispAns = "Y") OR (DispAns = "N")
      REPEAT
** Ask if you want to see INPX or not
      InpxAns = ""
      LOOP
         CRT @(10,14):"Do you want to see INPX Calls [Y/N] : ":
         INPUT InpxAns, 1
         InpxAns = UPCASE(InpxAns)
      UNTIL (InpxAns = "Y") OR (InpxAns = "N")
      REPEAT
** Ask if you want to see Comments or not
      CommentAns = ""
      LOOP
         CRT @(10,15):"Do you want to see Comments   [Y/N] : ":
         INPUT CommentAns, 1
         CommentAns = UPCASE(CommentAns)
      UNTIL (CommentAns = "Y") OR (CommentAns = "N") DO
      REPEAT
*
      ProgramArray = ""
      CallArray = ""
      Blink = " | "
      FileArray = ""
      ArrayCounter = 1
      RowCounter = ""
      ProgramName = OCONV(@SENTENCE,"G1 1")
      Extras = OCONV(@SENTENCE,"G2 1")
      CallArray<-1> = "Call Statement Listing for
":@(-13):ProgramName:@(-14)
      ProgramArray<1,ArrayCounter> = ProgramName
      SearchString = "CALL"
      CRT @(-1)
      CRT "Selecting Records!":
      StringLength = LEN(SearchString) -1
      LineString = ""
      LineLength = ""
      RETURN
* ------------------------------------------------------------------- *
* Get Calls                                                           *
* =========                                                           *
* 1. Read the Program from the program file                           *
* 2. Loop through Program looking for CALL                            *
* 3. Place Calls into an array                                        *
* 4. Look for which file the program belongs in                       *
* ------------------------------------------------------------------- *
GetCalls:
* Look for File
      ProgramName = ProgramArray<1,ArrayCounter>
      READ MDRec FROM MD,ProgramName THEN
         MDLine2 = MDRec<2>
         Delims = DCOUNT(MDLine2,"\")
         IF (Delims > 1) THEN
            ObjTable = FIELD(MDLine2,"/",2)
         END ELSE
            ObjTable = FIELD(MDLine2,"/",3)
         END
         SrcTable = ObjTable[1,LEN(ObjTable)-2]
         SrcTable = TRIM(SrcTable)
         OPEN SrcTable TO File ELSE
            CallArray<-1> = "!! NB !! - File ":SrcTable:" not found"
            ArrayCounter += -1
            RETURN
         END
      END
      FileArray<1,ArrayCounter> = SrcTable
* 1. Read File
      READ Rec FROM File,ProgramName ELSE
         CallArray<-1> = "!! NB !! :- ":ProgramName:" not a valid program in
":FileArray<1,ArrayCounter>
      END
      CRT @(0,2):@(-4):"Record Depth : ":ArrayCounter
      IF (ArrayCounter = 250) THEN
         Write CallArray ON MD,"BJORN.TEST"
      END
      RecordArray(ArrayCounter) = Rec
* 2. Loop through program looking for call
      RowCounter<ArrayCounter> = DCOUNT(RecordArray(ArrayCounter),AM)
      FOR RowNumber(ArrayCounter) = 1 TO RowCounter<ArrayCounter>
         LineString = RecordArray(ArrayCounter)<RowNumber(ArrayCounter)>
         LineLength = LEN(LineString)
         CallFound = 0
         FOR CharCounter = 1 TO (LineLength - StringLength) UNTIL
(CallFound)
            Pos1 = CharCounter
            Pos2 = CharCounter + StringLength
            CheckString = TRIM(LineString[Pos1,Pos2])
            IF CheckString = SearchString THEN
* 3. Display Calls
* ---->>> Original Code <<<----
*      SpaceCount = (ArrayCounter - 1) * 3
*      CallArray<-1> = SPACE(SpaceCount):RowNumber(ArrayCounter)"R%4":":
":TRIM(LineString[1,LineLength])
* Extract File Name And Check For DISP / INPX
               CheckProgram = TRIM(LineString)
               IF (TRIM(LineString[1,1]) # "*") THEN
                  CheckProgram = OCONV(CheckProgram,"G1 1")
               END ELSE
                  CheckProgram = OCONV(CheckProgram,"G2 1")
               END
               CheckProgram = OCONV(CheckProgram,"G(1")
               CheckProgram = OCONV(CheckProgram,"G;1")
               SaveLine = "Y"
               IF (CheckProgram = "DISP") AND (DispAns = "N") THEN
                  SaveLine = "N"
               END
               IF (SaveLine = "Y") THEN
                  IF (CheckProgram = "INPX") ANd (InpxAns = "N") THEN
                     SaveLine = "N"
                  END
               END
               IF (SaveLine = "Y") THEN
                  IF (LineString[1,1] = "*") AND (CommentAns = "N") THEN
                     SaveLine = "N"
                  END
               END
               IF (SaveLine = "Y") THEN
* ====>>> Modified Code <<<====     An attempt at lining up subrs
                  SpaceCount = (ArrayCounter - 1)
                  CallLine = STR(Blink, SpaceCount)
                  CallLine := RowNumber(ArrayCounter)"R%4":": "
                  CallLine := TRIM(LineString[1,LineLength])
                  CallArray<-1> = CallLine
* ===<<< End of Modification >>>=== *
                  CallFound = 1
* Check for comments
                  IF (LineString[1,1] # "*") THEN
                     NewProgram = TRIM(LineString)
                     NewProgram = OCONV(NewProgram,"G1 1")
                     NewProgram = OCONV(NewProgram,"G(1")
                     NewProgram = OCONV(NewProgram,"G;1")
                     ArrayCounter += 1
                     ProgramArray<1,ArrayCounter> = NewProgram
                     OrigProgram = ProgramArray<1,ArrayCounter-1>
                     IF (NewProgram # OrigProgram) AND (ArrayCounter <=
DepthNo) THEN
                        GOSUB GetCalls
                     END ELSE
                        ArrayCounter += -1
                     END
                  END
               END
            END
         NEXT CharCounter
NextLoop:
      Next RowNumber(ArrayCounter)
      ArrayCounter += -1
      RETURN
* ------------------------------------------------------------------- *
* DisplayCalls                                                        *
* ============                                                        *
* 1. Set Counters to 0                                                *
* 2. Display Calls with looping functionality                         *
* ------------------------------------------------------------------- *
DisplayCalls:
* 1. Set Counters
      RowCounter1 = 1
      RowCounter2 = 0
      TryNumber = 0
      InputAns = ""
      MaxCalls = DCOUNT(CallArray,AM)
      LOOP
         IF NOT(TryNumber) THEN
            TryNumber = 1
            RowCounter1 = 1
         END ELSE
            CRT @(0,23):"[F]orwards, [B]ack, [T]op, [E]nd, [P]rint, [Q]uit :
":
            IF (Extras # "") THEN
               DATA Extras
               Extras = ""
            END
            INPUT InputAns, 1
         END
         InputAns = UPCASE(InputAns)
      UNTIL (InputAns = "Q") DO
         BEGIN CASE
            CASE InputAns = "F"
               RowCounter1 += 20
               IF (RowCounter1 > MaxCalls) THEN
                  RowCounter1 = MaxCalls
               END
            CASE InputAns = "B"
               RowCounter1 += -20
               IF (RowCounter1 < 1) THEN
                  RowCounter1 = 1
               END
            CASE InputAns = "T"
               RowCounter1 = 1
            CASE InputAns = "E"
               RowCounter1 = MaxCalls
            CASE InputAns = "P"
               PRINTER ON
               PRINT "Call Listing for ":ProgramArray<1,1>:" - Printed by
":SB.USERCODE
               FOR J_MaxCalls = 2 TO MaxCalls
                  PRINT CallArray<J_MaxCalls>
               NEXT J_MaxCalls
               PRINTER CLOSE
               PRINTER OFF
            CASE InputAns = "S"
               WRITE CallArray ON SCalls,ProgramArray<1,1>
            CASE 1
         END CASE
         CRT @(-1)
* Setup RowCounter2
         RowCounter2 = RowCounter1 + 20
         IF (RowCounter2 > MaxCalls) THEN
            RowCounter2 = MaxCalls
            RowCounter1 = RowCounter2 - 20
            IF (RowCounter1 < 1) THEN RowCounter1 = 1
         END
* 2. Display Calls
         FOR J_RowCounter = RowCounter1 TO RowCounter2
            CRT CallArray<J_RowCounter>
         NEXT J_RowCounter
      REPEAT
      RETURN
* ------------------------- END OF PROGRAM --------------------------- *
END

Program End:
 

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Horn, John
Sent: 23 February 2005 12:41
To: U2 Mailing List (E-mail)
Cc: Roberts, Robert
Subject: [U2] Subroutine utility

Have any of you every seen or heard of a utility that would take a Pick
program and identify what programs were called by that program and continue
to transverse down those programs until all programs were identified?

  - John M. Horn
    IT Technical Expert
    HealthLink, Inc.
    314-989-6050
    [EMAIL PROTECTED]
-------
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/
-------
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/

Reply via email to