showcode Method
Object: frmbehindsc
Expand/Collapse source code of procedure showcode Source Code
LOCAL lnOldArea, ;
      lnOldRec, ;
      lnNumSnips, ;
      lcTextFileName, ;
      lnFileHandle, ;
      lnCounter, ;
      lcThisLine, ;
      laFileTypes[1, 2], ;
      lcFileType, ;
      lcFileName, ;
      lcObject, ;
      lcMethod, ;
      lcStoredProcFileName, ;
      lcStoredProcs

DIMENSION laFileTypes[4, 2]
laFileTypes[1,1] = "FORM"
laFileTypes[1,2] = "SCX"
laFileTypes[2,1] = "CLASS LIBRARY"
laFileTypes[2,2] = "VCX"
laFileTypes[3,1] = "PROGRAM"
laFileTypes[3,2] = "PRG"
laFileTypes[4,1] = "STORED PROCS"
laFileTypes[4,2] = "DBC"

#DEFINE PADDING    15

lnOldArea = SELECT()
lnOldRec = RECNO()

*-- Extract memo strings into array
lnNumSnips = MEMLINES(behindsc.code_to_sh)

*-- create text file handle
lcTextFileName = 'SNIPPETS.TXT'
lnFileHandle  = FCREATE(lcTextFileName)

FOR lnCounter = 1 TO lnNumSnips
  IF USED("showmeth")
    USE IN showmeth
  ENDIF

  *-- Current line in behindsc.code_to_sh
  lcThisLine = ALLT(UPPER(MLINE(behindsc.code_to_sh, lnCounter)))

  IF EMPTY(lcThisLine)
    LOOP
  ENDIF

  =FPUTS(lnFileHandle, CRLF + REPLICATE("*", 60))

  lcFileName = thisform.GetFileName(lcThisLine)
  IF !FILE(lcFileName)
    =FPUTS(lnFileHandle, CRLF + lcFileName + LOWERNOTFOUND_LOC)
    LOOP
  ENDIF
  *-- Look up the extension in the laFileTypes array, and return
  *-- the full file type description
  lcFileType = ;
   laFileTypes[ASUBS(laFileTypes, ASCAN(laFileTypes, RIGHT(lcFileName, 3)), 1), 1]

  *-- Write file type and name to text file
  =FPUTS(lnFileHandle, ;
      PADR(lcFileType + ":", PADDING, " ") + LOWER(lcFileName))

  *-- Special PRG processing
  IF lcFileType = "PROGRAM"
    thisform.ExtractPRG(lnFileHandle, lcFileName)
    LOOP
  ENDIF

  lcObject = thisform.GetObject(lcThisLine)
  lcMethod = thisform.GetMethod(lcThisLine)

  *-- Special stored procedure processing
  *-- For now, we assume all stored procs are surrounded by 'FUNC...ENDFUNC'
  IF lcFileType = "STORED PROCS"
    IF lcObject = "*"
      thisform.ExtractAllStoredProcs(@lnFileHandle, lcTextFileName)
    ELSE
      lcStoredProcFileName = "sproc.txt"
      lcStoredProcs = thisform.ProcsToMem(lcStoredProcFileName)
      IF AT(",", lcObject) > 0
        thisform.ExtractMultiStoredProcs(lnFileHandle, lcObject, lcStoredProcs)
      ELSE
        thisform.ExtractStoredProc(lnFileHandle, lcObject, lcStoredProcs)
      ENDIF
      DELETE FILE (lcStoredProcFileName)
    ENDIF
    LOOP
  ENDIF

  *-- Open the file containing the method or property we want to extract 
  USE (lcFileName) AGAIN IN 0 ALIAS showmeth NOUPDATE
  SELECT showmeth

  *-- Write object name to text file
  IF NOT EMPTY(lcObject)
    *-- Locate the record in the SCX/VCX
    LOCATE FOR UPPER(objname) = lcObject
    IF FOUND()
      =FPUTS(lnFileHandle, PADR("CLASS:", PADDING, " ") + LOWER(showmeth.class))
      =FPUTS(lnFileHandle, PADR("OBJECT:", PADDING, " ") + LOWER(lcObject))
    ELSE 
      =FPUTS(lnFileHandle, PADR("OBJECT:", PADDING, " ") + lcObject + " was not found")  
      LOOP
    ENDIF
  ENDIF

  IF NOT EMPTY(showmeth.properties)
    *-- Extract property value and write it into text file
    =FPUTS(lnFileHandle, PADR(CRLF + "PROPERTIES:", PADDING, " "))
    thisform.ExtractAllProperties(lnFileHandle)
  ENDIF

  IF NOT EMPTY(lcMethod)
    *-- All Methods
    =FPUTS(lnFileHandle, PADR("METHODS:", PADDING, " "))
    IF lcMethod = "*"
      thisform.ExtractAllMethods(lnFileHandle)
    ELSE
      IF AT(",", lcMethod) > 0
        thisform.ExtractMultiMethods(lnFileHandle, lcMethod)
      ELSE
        thisform.ExtractMethod(lnFileHandle, lcMethod)
      ENDIF
    ENDIF
  ENDIF
  =FPUTS(lnFileHandle, CRLF)
ENDFOR

IF USED("showmeth")
  USE IN showmeth
ENDIF

=FCLOSE(lnFileHandle)

CREATE CURSOR viewcode (code M)
APPEND BLANK
APPEND MEMO code FROM (lcTextFileName)
DO FORM viewcode WITH thisform.DataSessionID
USE IN viewcode

IF NOT EMPTY(lnOldArea)
  SELECT (lnOldArea)
  GOTO lnOldRec
ENDIF  

RETURN