home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / clipper / bcklib2.zip / DOCS.PRG < prev    next >
Text File  |  1993-01-16  |  10KB  |  285 lines

  1. /*
  2.     The source code contained within this file is protected under the
  3.     laws of the United States of America and by International Treaty.
  4.     Unless otherwise noted, the source contained herein is:
  5.  
  6.     Copyright (c)1990, 1991, 1992 BecknerVision Inc - All Rights Reserved
  7.  
  8.     Written by John Wm Beckner        THIS NOTICE MUST NOT BE REMOVED
  9.     BecknerVision Inc
  10.     PO Box 11945                      DISTRIBUTE ONLY WITH SHAREWARE
  11.     Winston-Salem NC 27116            VERSION OF THIS PRODUCT.
  12.     Fax: 919/760-1003
  13.  
  14. */
  15.  
  16. #include "beckner.inc"
  17. #include "alias.ch"
  18. #include "inkey.ch"
  19.  
  20. #define EXAMPLE_HDR '#include "beckner.inc"'+CRLF+"FUNCTION TestFunc()"+CRLF+"   LOCAL "
  21.  
  22. FUNCTION Documentor(cPrefix)
  23.    LOCAL cVersion := "0.2", cTemp, nOption
  24.     DEFAULT cPrefix TO "u:\docs\ng"
  25.     cPrefix := StrTran(cPrefix+"\", "\\", "\")
  26.     SET KEY K_F9    TO pCtrlW
  27.     SET DELETED ON
  28.     vBackground(Chr(176))
  29.     iif(IsColor(), SetColor("b/w, gr+/n, , , n+/w"),)
  30.     vTitle({"BecknerVision Library Documentor",;
  31.             "Written by John Wm Beckner",;
  32.             "Copyright (c)1992 BecknerVision Inc - All Rights Reserved",;
  33.             "Version "+cVersion})
  34.     vMessageOn("Initializing...")
  35.     IF !File("\DocFunc.dbf")
  36.         cTemp := "\DocFunc/FuncID/N/4//FuncName/C/20/ReturnVal/C/26/HelpFile/C/8/"
  37.         cTemp += "ReturnDesc/C/50/FuncDesc/M/Examples/M/SeeAlso/C/200/"
  38.         cTemp += "FuncDesc1/C/50"
  39.         fCreateDBF(cTemp)
  40.     ENDIF
  41.     IF !File("\DocArg.dbf")
  42.         cTemp := "\DocArg/FuncID/N/4//ArgSeqNo/N/3//ArgDesc/M/Optional/L/"
  43.         cTemp += "Default/C/20/ArgName/C/20"
  44.         fCreateDBF(cTemp)
  45.     ENDIF
  46.     fShare("\DocArg", "Argument")
  47.     IF !File("\DocArg.ntx")
  48.         INDEX ON Argument->FuncID TO \DocArg
  49.     ENDIF
  50.     SET INDEX TO \DocArg
  51.     fShare("\DocFunc", "Library")
  52.     IF !File("\DocFunc.ntx")
  53.         INDEX ON Library->HelpFile+Library->FuncName TO \DocFunc
  54.     ENDIF
  55.     SET INDEX TO \DocFunc
  56.     vMessageOff()
  57.     WHILE LOOPING
  58.       nOption := vMenu("T/Add/Copy/Browse/Generate/Exit")
  59.         DO CASE
  60.             CASE nOption=1
  61.                 AddFunc()
  62.          CASE nOption=2
  63.             CopyFunc()
  64.          CASE nOption=3
  65.                 Library->(fBrowse())
  66.          CASE nOption=4
  67.                 Generate(cPrefix)
  68.          CASE nOption=5
  69.                 EXIT
  70.         ENDCASE
  71.     ENDWHILE
  72. ENDFUNCTION
  73.  
  74. STATIC FUNCTION AddFunc()
  75.     LOCAL aRC, GetList := {}, nCtr, cHelpFile
  76.     GO BOTTOM ALIAS Library
  77.     cHelpFile             := Library->HelpFile
  78.     ADDRECORD ALIAS Library
  79.     Library->FuncID     := RecNo()
  80.     Library->HelpFile    := cHelpFile
  81.     Library->Examples := EXAMPLE_HDR
  82.     vSave(9, 78)
  83.     aRC := vWindow(9, 78, .y., "Function Information")
  84.     @ aRC[1],  aRC[2] SAY "ID # ............." GET Library->FuncID
  85.     @ Row()+1, aRC[2] SAY "Filename ........." GET Library->HelpFile
  86.     @ Row()+1, aRC[2] SAY "Name ............." GET Library->FuncName
  87.     @ Row()+1, aRC[2] SAY "1-line description" GET Library->FuncDesc1
  88.     @ Row()+1, aRC[2] SAY "Description ......" GET Library->FuncDesc;
  89.             MEMO AT 3, 3, 8, 75
  90.     @ Row()+1, aRC[2] SAY "Return value ....." GET Library->ReturnVal
  91.     @ Row()+1, aRC[2] SAY "Return description" GET Library->ReturnDesc
  92.     @ Row()+1, aRC[2] SAY "Examples ........." GET Library->Examples;
  93.             MEMO AT 16, 2, MaxRow(), 76
  94.     @ Row()+1, aRC[2] SAY "See also ........." GET Library->SeeAlso;
  95.             PICTURE "@S50"
  96.     READ
  97.     UNLOCK ALIAS Library
  98.     vRestore()
  99.     nCtr := 0
  100.     vSave(5, 78)
  101.     aRC := vWindow(5, 78, .y., "Arguments for "+Trim(Library->FuncName)+"()")
  102.     WHILE LOOPING
  103.         ADDRECORD ALIAS Argument
  104.         Argument->FuncID         := Library->FuncID
  105.         Argument->ArgSeqNo    := ++nCtr
  106.         @ aRC[1],  aRC[2] SAY "Argument #"+sMake(nCtr)
  107.         @ Row()+1, aRC[2] SAY "Name ..............." GET Argument->ArgName
  108.         @ Row()+1, aRC[2] SAY "Description ........" GET Argument->ArgDesc;
  109.                 MEMO AT 15, 10, 20, 60
  110.         @ Row()+1, aRC[2] SAY "Optional (Y/N)? ...." GET Argument->Optional;
  111.                 PICTURE "Y"
  112.         @ Row()+1, aRC[2] SAY "Default value ......" GET Argument->Default
  113.         READ
  114.         UNLOCK ALIAS Argument
  115.         IF Empty(Argument->ArgName)
  116.             EXIT
  117.         ENDIF
  118.     ENDWHILE
  119.     DELETE ALIAS Argument
  120.     vRestore()
  121. ENDFUNCTION
  122.  
  123. STATIC FUNCTION CopyFunc()
  124.    LOCAL aRC, GetList := {}, nCtr, cHelpFile, cName, cDesc1, cDesc, cRetVal
  125.    LOCAL cRetDesc, cExamples, cSeeAlso
  126.     GO BOTTOM ALIAS Library
  127.     cHelpFile             := Library->HelpFile
  128.    fBrowse()
  129.    cName     := Library->FuncName
  130.    cDesc1    := Library->FuncDesc1
  131.    cDesc     := Library->FuncDesc
  132.    cRetVal   := Library->ReturnVal
  133.    cRetDesc  := Library->ReturnDesc
  134.    cExamples := Library->Examples
  135.    cSeeAlso  := Library->SeeAlso
  136.    ADDRECORD ALIAS Library
  137.    Library->FuncID     := RecNo()
  138.    Library->HelpFile   := cHelpFile
  139.    Library->FuncName   := cName
  140.    Library->FuncDesc1  := cDesc1
  141.    Library->FuncDesc   := cDesc
  142.    Library->ReturnVal  := cRetVal
  143.    Library->ReturnDesc := cRetDesc
  144.    Library->Examples   := cExamples
  145.    Library->SeeAlso    := cSeeAlso
  146.    vSave(9, 78)
  147.     aRC := vWindow(9, 78, .y., "Function Information")
  148.     @ aRC[1],  aRC[2] SAY "ID # ............." GET Library->FuncID
  149.     @ Row()+1, aRC[2] SAY "Filename ........." GET Library->HelpFile
  150.     @ Row()+1, aRC[2] SAY "Name ............." GET Library->FuncName
  151.     @ Row()+1, aRC[2] SAY "1-line description" GET Library->FuncDesc1
  152.     @ Row()+1, aRC[2] SAY "Description ......" GET Library->FuncDesc;
  153.             MEMO AT 3, 3, 8, 75
  154.     @ Row()+1, aRC[2] SAY "Return value ....." GET Library->ReturnVal
  155.     @ Row()+1, aRC[2] SAY "Return description" GET Library->ReturnDesc
  156.     @ Row()+1, aRC[2] SAY "Examples ........." GET Library->Examples;
  157.             MEMO AT 16, 2, MaxRow(), 76
  158.     @ Row()+1, aRC[2] SAY "See also ........." GET Library->SeeAlso;
  159.             PICTURE "@S50"
  160.     READ
  161.     UNLOCK ALIAS Library
  162.     vRestore()
  163.     nCtr := 0
  164.     vSave(5, 78)
  165.     aRC := vWindow(5, 78, .y., "Arguments for "+Trim(Library->FuncName)+"()")
  166.     WHILE LOOPING
  167.         ADDRECORD ALIAS Argument
  168.         Argument->FuncID         := Library->FuncID
  169.         Argument->ArgSeqNo    := ++nCtr
  170.         @ aRC[1],  aRC[2] SAY "Argument #"+sMake(nCtr)
  171.         @ Row()+1, aRC[2] SAY "Name ..............." GET Argument->ArgName
  172.         @ Row()+1, aRC[2] SAY "Description ........" GET Argument->ArgDesc;
  173.                 MEMO AT 15, 10, 20, 60
  174.         @ Row()+1, aRC[2] SAY "Optional (Y/N)? ...." GET Argument->Optional;
  175.                 PICTURE "Y"
  176.         @ Row()+1, aRC[2] SAY "Default value ......" GET Argument->Default
  177.         READ
  178.         UNLOCK ALIAS Argument
  179.         IF Empty(Argument->ArgName)
  180.             EXIT
  181.         ENDIF
  182.     ENDWHILE
  183.     DELETE ALIAS Argument
  184.     vRestore()
  185. ENDFUNCTION
  186.  
  187. STATIC FUNCTION Generate(cPrefix)
  188.     LOCAL nExpertHelp, cLastFile := Chr(1), cArgList, nCtr, nTemp
  189.     vMessageOn("Generating HyperText files...")
  190.     GO TOP ALIAS Library
  191.     WHILE !Library->(eof())
  192.         IF cLastFile!=Library->HelpFile
  193.             cLastFile := Library->HelpFile
  194.             iif(nExpertHelp!=NIL, fClose(nExpertHelp),)
  195.             nExpertHelp := fCreate(cPrefix+cLastFile+".txt")
  196.         ENDIF
  197.         fWriteLine(nExpertHelp, "!short: "+sSetLength(Trim(Library->FuncName)+;
  198.                 "()", 20)+Trim(Library->FuncDesc1))
  199.         fWriteLine(nExpertHelp, "'"+Replicate("-", 78))
  200.         fWriteLine(nExpertHelp, "^b"+Trim(Library->FuncName)+"()"+"^b")
  201.         fWriteLine(nExpertHelp, Trim(Library->FuncDesc1))
  202.         fWriteLine(nExpertHelp, Replicate(Chr(196), 78))
  203.         fWriteLine(nExpertHelp)
  204.         fWriteLine(nExpertHelp, "^bSyntax^b")
  205.         fWriteLine(nExpertHelp)
  206.         fWrite(nExpertHelp, "    "+Trim(Library->FuncName)+"(")
  207.         cArgList := ""
  208.         SEEK Library->FuncID ALIAS Argument
  209.         IF Argument->(Found())
  210.             WHILE Library->FuncID=Argument->FuncID .and. !Argument->(eof())
  211.                 cArgList += iif(Argument->Optional, "[", "")+"<"+;
  212.                         Trim(Argument->ArgName)+">"+iif(Argument->Optional, "]",;
  213.                         "")+", "
  214.                 SKIP ALIAS Argument
  215.             ENDWHILE
  216.         ENDIF
  217.         cArgList := Left(cArgList, Len(cArgList)-2)+"^u) --> "+;
  218.                 Trim(Library->ReturnVal)
  219.         FOR nCtr := 1 TO mlCount(cArgList, 50)
  220.             fWriteLine(nExpertHelp, iif(nCtr>1, Space(24), "")+;
  221.                     "^u"+Trim(MemoLine(cArgList, 50, nCtr))+"^u")
  222.         NEXT
  223.         fWriteLine(nExpertHelp)
  224.         fWriteLine(nExpertHelp, "^bArguments^b")
  225.         fWriteLine(nExpertHelp)
  226.         SEEK Library->FuncID ALIAS Argument
  227.         IF Argument->(Found())
  228.             WHILE Library->FuncID=Argument->FuncID .and. !Argument->(eof())
  229.                 nTemp := mlCount(Argument->ArgDesc, 50)-1
  230.                 fWriteLine(nExpertHelp, "    ^b<"+Trim(Argument->ArgName)+">^b is "+;
  231.                         Trim(MemoLine(Argument->ArgDesc, 50, 1))+iif(nTemp>1, "",;
  232.                         iif(!Empty(Argument->Default),;
  233.                         " ["+Trim(Argument->Default)+"]", "")))
  234.                 FOR nCtr := 2 TO nTemp
  235.                     fWriteLine(nExpertHelp, Space(15)+;
  236.                     Trim(MemoLine(Argument->ArgDesc,    50, nCtr)))
  237.                 NEXT
  238.                 iif(nTemp>1, fWriteLine(nExpertHelp, Space(15)+;
  239.                         Trim(MemoLine(Argument->ArgDesc, 50, nTemp))+;
  240.                         iif(!Empty(Argument->Default), " ["+;
  241.                         Trim(Argument->Default)+"]", "")),)
  242.                 fWriteLine(nExpertHelp)
  243.                 SKIP ALIAS Argument
  244.             ENDWHILE
  245.         ELSE
  246.             fWriteLine(nExpertHelp, "    none")
  247.             fWriteLine(nExpertHelp)
  248.         ENDIF
  249.         fWriteLine(nExpertHelp, "^bReturns^b")
  250.         fWriteLine(nExpertHelp)
  251.         fWriteLine(nExpertHelp, "    "+Trim(Library->FuncName)+"() returns "+;
  252.                 Trim(Library->ReturnDesc))
  253.         fWriteLine(nExpertHelp)
  254.         fWriteLine(nExpertHelp, "^bDescription^b")
  255.         fWriteLine(nExpertHelp)
  256.         FOR nCtr := 1 TO mlCount(Library->FuncDesc, 72)
  257.             fWriteLine(nExpertHelp, "    "+MemoLine(Library->FuncDesc, 72, nCtr))
  258.         NEXT
  259.         fWriteLine(nExpertHelp)
  260.         fWriteLine(nExpertHelp, "^bExamples^b")
  261.         fWriteLine(nExpertHelp)
  262.         FOR nCtr := 1 TO mlCount(Library->Examples)
  263.             fWriteLine(nExpertHelp, "    "+MemoLine(Library->Examples, 72, nCtr))
  264.         NEXT
  265.         iif(!Empty(Library->SeeAlso), fWriteLine(nExpertHelp, "!seealso: "+;
  266.                 Trim(Library->SeeAlso)),)
  267.         fWriteLine(nExpertHelp, "'"+Replicate("-", 78))
  268.         SKIP ALIAS Library
  269.     ENDWHILE
  270.     fClose(nExpertHelp)
  271.     vMessageOff()
  272. ENDFUNCTION
  273.  
  274. FUNCTION fFields2Get()
  275.     LOCAL nCtr, aStructure := dbStruct(), nFields := Len(aStructure)
  276.     LOCAL GetList[nFields]
  277.     FOR nCtr := 1 TO nFields
  278.         GetList[nCtr]            := GetNew()
  279.         GetList[nCtr]:block        := FieldWBlock(FieldName(nCtr), Select())
  280.         GetList[nCtr]:cargo        := {}
  281.         GetList[nCtr]:reader    := {|oGet| vGet(oGet)}
  282.     NEXT
  283.     RETURN GetList
  284. ENDFUNCTION
  285.