home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 March / PCWK0397.iso / novell / webserv3 / nws30.exe / DISK1 / NETBASIC / WEB / ABGET.BAS < prev    next >
BASIC Source File  |  1996-09-23  |  11KB  |  780 lines

  1. ' Add all include files and define statements here
  2. #include "BASIC.H"
  3. #include "BTRIEVE.H"
  4. #include "KEY.H"
  5. #include "HTML.H"
  6. #include "ERRORS.H"
  7. #include "ABOOK.H"
  8.  
  9. Proc BTX:Index:Make
  10.  
  11.    Local( "KeyPos", "KeyLen","KeyFlag" )
  12.    Local( "NotUsed", "Reserved3", "XKeyType", "MKey", "ACS" )
  13.  
  14.    KeyPos    = LowHigh( Param(1) )
  15.    KeyLen    = LowHigh( Param(2) )
  16.    KeyFlags  = LowHigh( Param(3) )
  17.    NotUsed   = STR:Repeat( DATA:Char(0), 4 )
  18.    XKeyType  = Param( 4, DATA:Char(0) )
  19.    Reserved3 = STR:Repeat( DATA:Char(0), 3 )
  20.    MKey = Param( 5, DATA:Char(0) )
  21.    ACS  = Param( 6, DATA:Char(0) )
  22.  
  23.    KeySpec = KeyPos + KeyLen + KeyFlags + NotUsed + XKeyType
  24.    KeySpec = KeySpec + Reserved3 + MKey + ACS
  25.  
  26.    Return( KeySpec )
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120. Proc BTX:Record:Make
  121.  
  122.    Local( "FileSpec", "RecLen", "PageSize", "Indexes" )
  123.    Local( "Reserved4", "FileFlags", "Reserced2", "PreAlloc" )
  124.  
  125.    RecLen    = LowHigh( Param(1) )
  126.    PageSize  = LowHigh( Param(2,1024) )
  127.    Indexes   = LowHigh( Param(3,0) )
  128.    Reserved4 = STR:Repeat( DATA:Char(0), 4 )
  129.    FileFlags = LowHigh( Param(4,0))
  130.    Reserved2 = STR:Repeat( DATA:Char(0), 2 )
  131.    PreAlloc  = LowHigh( Param(5,0) )
  132.  
  133.    FileSpec = RecLen + PageSize + Indexes + Reserved4 + FileFlags
  134.    FileSpec = FileSpec + Reserved2 + PreAlloc
  135.  
  136.    Return( FileSpec )
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230. Sub GetOrgUnit
  231.  
  232.    Local( "BtvRec", "OrgUnit", "OrgUnits", "DotPosition" )
  233.  
  234.    BtvRec = Param(1)
  235.  
  236.    ' Skip the user object
  237.    DotPosition = STR:Search( ".", BtvRec.DISTINGUISHED_NAME )
  238.    If ( DotPosition )
  239.       OrgUnit = STR:Sub( BtvRec.DISTINGUISHED_NAME, DotPosition+1 )
  240.  
  241.       OrgUnits = ""
  242.       Do While ( TRUE )
  243.          DotPosition = STR:Search( ".", OrgUnit )
  244.          If ( DotPosition != 0 )
  245.             OrgUnits = STR:Sub( OrgUnit, 1, DotPosition-1 )+ "/" + OrgUnits
  246.             OrgUnit  = STR:Sub( OrgUnit, DotPosition+1 )
  247.          Else
  248.             Exit
  249.          EndIF
  250.       EndDO
  251.    EndIF
  252.  
  253.    Return (OrgUnits)
  254. End Sub
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318. Sub GetRootObj
  319.  
  320.    Local( "BtvRec", "RootObj", "TmpObj", "DotPosition" )
  321.  
  322.    BtvRec = Param(1)
  323.  
  324.    TmpObj = STR:Trim:All( BtvRec.DISTINGUISHED_NAME )
  325.    Do While ( TRUE )
  326.       DotPosition = STR:Search( ".", TmpObj );
  327.       If ( DotPosition )
  328.          TmpObj = STR:Sub( TmpObj, DotPosition+1 )
  329.       Else
  330.          Exit
  331.       EndIF
  332.    EndDO
  333.  
  334.    RootObj = STR:Sub( TmpObj, 1, STR:Search( "@", TmpObj ) - 1 ) + "/"
  335.    Return (RootObj)
  336.  
  337. End Sub
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399. Proc LowHigh
  400.  
  401.    Local( "HI", "LO" )
  402.  
  403.    ' Change the integer byte order and return result as a binary string.
  404.    LO = DATA:Char( MATH:Mod( Param(1), 256 ) )
  405.    HI = DATA:Char( Param(1) / 256 )
  406.  
  407.    Return( LO + HI )
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.  
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498. Sub Main
  499.  
  500.    'Declare local variables.
  501.    Local( "FileSpec", "Buf" )
  502.    Local( "Handle", "KeyBuf" )
  503.    Local( "UserObj", "OrgUnit", "RootObj", "NDS_URL", "NDS_Tree" )
  504.    Local( "BtvRec", "sHREF" )
  505.    Local( "RecCount", "iPos" )
  506.  
  507.    DOC:Heading( "Address Book" )
  508.    DOC:Print( "<BODY BACKGROUND=""/images/image1.gif"">");
  509.  
  510.    DOC:Tag:Begin(DOC_TAG_CENTER)
  511.    DOC:Image( "/images/novhead1.gif", "" )
  512.    DOC:Tag:End(DOC_TAG_CENTER)
  513.  
  514.    ' Check if BTX.NLM is loaded. If not return an error message.
  515.    If ( !NMX:Lib:Load( "BTX" ) )
  516.       DOC:Print( "BTX.NLM was not loaded or missing." ); NewLine
  517.       DOC:Print( "Please contact your administrator for assistance." );NewLine
  518.       DOC:Form:End
  519.       Return
  520.    EndIf
  521.  
  522.    ' Initialize sHREF variable
  523.    sHREF =  "http://" + DOC:Env:Get( "SERVER_NAME" ) + "/netbasic/abform.bas"
  524.  
  525.    ' Get the query string
  526.    QueryStr = DOC:Env:Get( "QUERY_STRING" )
  527.  
  528.    iPos =  STR:Search( "&", DOC:Env:Get( "QUERY_STRING" ) )
  529.    if ( iPos = 0 )
  530.       DOC:Print( "Invalid query.  Query: ", QueryStr )
  531.       Return
  532.    EndIF
  533.  
  534.    ' Extract the request string from the query string into ReqName
  535.    ReqName = STR:Sub( QueryStr, 6, iPos - 6 )
  536.    ReqType = "DN"
  537.  
  538.    ' If using btrieve data manager for DOS without btrieve.nlm loaded the
  539.    ' file paths must include drive letters (A:...Z:) not volumes (SYS:).
  540.    FileSpec = BTX:Record:Make( 512, 2560, 1 )
  541.    FileSpec = FileSpec + BTX:Index:Make( 1, MAX_DGNAME, BTX_EXTTYPE_KEY )
  542.  
  543.    ' Get and open the database file from the configuration file.
  544.    DataBase = INI:Read( "SYS:\SYSTEM\ABOOK.CFG", "Common", "ExtractFile", "SYS:\SYSTEM\ABOOK.DBF" )
  545.    Handle = BTX:Call( "", BTX_OPEN, FileSpec, STR:Length(FileSpec), DataBase, 0 )
  546.    If ( SYS:Error:Number != 0 )
  547.       DOC:Paragraph;NewLine
  548.       DOC:Print( "Can't open a database file: ", DataBase );NewLine
  549.  
  550.       DOC:Paragraph
  551.       DOC:Link:Button( sHREF, "Back to the search page" )
  552.       Return
  553.    EndIF
  554.  
  555.    ' Initialize KeyBuf and FileSpec
  556.    KeyBuf = STR:Pad:Right( ReqName, 512-LEN(ReqName))
  557.    FileSpec = STR:Repeat( " ", 2560 )
  558.  
  559.    ' Get the first record
  560.    Handle = BTX:Call( Handle, BTX_GET_LE, FileSpec, STR:Length(FileSpec), KeyBuf, 0 )
  561.  
  562.    ' Retrieve a btrieve or user record and return
  563.    DOC:Tag:Begin( DOC_TAG_PREFMT )
  564.    BtvRec = OBJECT:Make( "ERROR", 0 )
  565.    RecCount = 0
  566.    Do While ( SYS:Error:Number = 0 )
  567.  
  568.       Buf = BTX:Data:Buffer(Handle)
  569.  
  570.       BtvRec =  BtvRec + OBJECT:Make( "DISTINGUISHED_NAME", STR:Sub( Buf, KEY1POSITION, MAX_DGNAME ) )
  571.       BtvRec =  BtvRec + OBJECT:Make( "SURNAME",            STR:Sub( Buf, KEY2POSITION, MAX_SURNAME ) )
  572.       BtvRec =  BtvRec + OBJECT:Make( "GIVEN_NAME",         STR:Sub( Buf, KEY3POSITION, MAX_GIVEN_NAME ) )
  573.       BtvRec =  BtvRec + OBJECT:Make( "TITLE",              STR:Sub( Buf, KEY4POSITION, MAX_TITLE ) )
  574.       BtvRec =  BtvRec + OBJECT:Make( "DEPARTMENT",         STR:Sub( Buf, KEY5POSITION, MAX_DEPARTMENT ) )
  575.       BtvRec =  BtvRec + OBJECT:Make( "EMAIL_ADDRESS",      STR:Sub( Buf, KEY6POSITION, MAX_EMAIL_ADDRESS ) )
  576.       BtvRec =  BtvRec + OBJECT:Make( "LOCALITY_NAME",      STR:Sub( Buf, KEY7POSITION, MAX_LOCALITY_NAME ) )
  577.       BtvRec =  BtvRec + OBJECT:Make( "PHONE_NUMBER",       STR:Sub( Buf, FIELD1POSITION, MAX_PHONE_NUMBER ) )
  578.       BtvRec =  BtvRec + OBJECT:Make( "FAX_NUMBER",         STR:Sub( Buf, FIELD2POSITION, MAX_FAX_NUMBER ) )
  579.       BtvRec =  BtvRec + OBJECT:Make( "DESCRIPTION",        STR:Sub( Buf, FIELD3POSITION, MAX_DESCRIPTION ) )
  580.       BtvRec =  BtvRec + OBJECT:Make( "GEN_QUALIFIER",      STR:Sub( Buf, FIELD4POSITION, MAX_GQ ) )
  581.       BtvRec =  BtvRec + OBJECT:Make( "DELIVERY_OFFICE",    STR:Sub( Buf, FIELD5POSITION, MAX_PD_OFFICE ) )
  582.       BtvRec =  BtvRec + OBJECT:Make( "POSTAL_CODE",        STR:Sub( Buf, FIELD6POSITION, MAX_POSTAL_CODE ) )
  583.       BtvRec =  BtvRec + OBJECT:Make( "PO_BOX",             STR:Sub( Buf, FIELD7POSITION, MAX_POBOX ) )
  584.       BtvRec =  BtvRec + OBJECT:Make( "STATE",              STR:Sub( Buf, FIELD8POSITION, MAX_STATE ) )
  585.       BtvRec =  BtvRec + OBJECT:Make( "ADDRESS",            STR:Sub( Buf, FIELD9POSITION, MAX_ADDRESS) )
  586.  
  587.       If ( STR:Search( ReqName, STR:Trim:All(BtvRec.DISTINGUISHED_NAME) ) = 1 )
  588.          DOC:Print( "<FONT size=+2><B>Personal Information:</B></FONT>" );NewLine
  589.          ReturnRec( BtvRec )
  590.          RecCount = RecCount + 1
  591.          exit
  592.       EndIF
  593.  
  594.       BtvRec = OBJECT:Make( "ERROR", 0 )
  595.       Handle = BTX:Call( Handle, BTX_GET_NEXT, FileSpec, STR:Length(FileSpec), Keybuf, 0 )
  596.    EndDo
  597.  
  598.    ' Close the database file
  599.    Handle = BTX:Call( Handle, BTX_CLOSE, FileSpec, STR:Length(FileSpec), DataBase, 0 )
  600.  
  601.    If ( RecCount = 0 )
  602.       DOC:Print( "Record not found in the database.  Please re-enter a new search." );NewLine
  603.    EndIf
  604.  
  605.    DOC:Print( "<HR>" );NewLine
  606.    DOC:Paragraph
  607.    DOC:Link:Button(sHREF, "Back to the search page" )
  608.  
  609.    DOC:Tag:End( DOC_TAG_PREFMT )
  610.    DOC:Form:End
  611.  
  612.    Return
  613. End Sub
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716. Sub ReturnRec
  717.  
  718.      Local( "BtvRec", "NDS_URL" )
  719.      Local( "UserObj", "OrgUnit", "RootObj" )
  720.      Local( "sHREF", "NDS_Tree", "DGName" )
  721.  
  722.      BtvRec = Param(1)
  723.  
  724.      DOC:Print("<HR>"); NewLine
  725.      UserObj  = STR:Sub( BtvRec.DISTINGUISHED_NAME, 1, STR:Search( ".", STR:Trim:All(BtvRec.DISTINGUISHED_NAME ))-1 )
  726.      NDS_Tree = STR:Sub( BtvRec.DISTINGUISHED_NAME, STR:Search( "@", STR:Trim:All(BtvRec.DISTINGUISHED_NAME ))+1 )
  727.      OrgUnit  = GetOrgUnit(BtvRec)
  728.      RootObj  = GetRootObj(BtvRec)
  729.      NDS_URL  = "/nds/"+STR:Trim:All(NDS_Tree)+"/"+RootObj+OrgUnit+UserObj
  730.  
  731.      DOC:Print("<B>Name:</B>        ", "<A HREF=http://", DOC:Env:Get( "SERVER_NAME" ), NDS_URL, ">", "<FONT size=+1>", STR:Trim:All(BtvRec.GIVEN_NAME), " ", STR:Trim:All(BtvRec.SURNAME), ", ", STR:Trim:All(BtvRec.GEN_QUALIFIER), "</FONT></A>" ); NewLine
  732.      DOC:Print("<B>Title:</B>       ", STR:Trim:All(BtvRec.TITLE) ); NewLine
  733.      DOC:Print("<B>Dept:</B>        ", STR:Trim:All(BtvRec.DEPARTMENT) ); NewLine
  734.      DOC:Print("<B>Description:</B> ", STR:Trim:All(BtvRec.DESCRIPTION) ); NewLine
  735.      DOC:Print("<B>E-Mail ID:</B>   ", "<A HREF=mailto:", STR:Trim:All(BtvRec.EMAIL_ADDRESS), ">", "<FONT size=+1>", STR:Trim:All(BtvRec.EMAIL_ADDRESS), "</FONT></A>" ); NewLine
  736.      DOC:Print("<B>Phone:</B>       ", STR:Trim:All(BtvRec.PHONE_NUMBER) ); NewLine
  737.      DOC:Print("<B>Fax:</B>         ", STR:Trim:All(BtvRec.FAX_NUMBER) ); NewLine
  738.      DOC:Print("<B>MailStop:</B>    ", STR:Trim:All(BtvRec.DELIVERY_OFFICE)); NewLine; NewLine
  739.  
  740.      DOC:Paragraph
  741.      DOC:Print("<FONT size=+1>", "<B>Postal Address</B>", "</FONT>" );NewLine
  742.      DOC:Print("<B>Street:</B>      ", STR:Trim:All(BtvRec.ADDRESS) ); NewLine
  743.      DOC:Print("<B>P.O Box:</B>     ", STR:Trim:All(BtvRec.PO_BOX) ); NewLine
  744.      DOC:Print("<B>City:</B>        ", STR:Trim:All(BtvRec.DELIVERY_OFFICE) ); NewLine
  745.      DOC:Print("<B>State:</B>       ", STR:Trim:All(BtvRec.STATE) ); NewLine
  746.      DOC:Print("<B>Postal Code:</B> ", STR:Trim:All(BtvRec.POSTAL_CODE) ); NewLine
  747.      DOC:Print("<B>Locality:</B>    ", STR:Trim:All(BtvRec.LOCALITY_NAME) ); NewLine
  748.  
  749.      DOC:Paragraph
  750.      DOC:Print("<FONT size=+1>", "<B>Novell Directory Services</B>", "</FONT>" );NewLine
  751.      DOC:Print("<B>       Tree Name:</B>   ", STR:Trim:All(NDS_Tree) ); NewLine
  752.  
  753.      DGName = STR:Sub( BtvRec.DISTINGUISHED_NAME, 1, STR:Search("@", STR:Trim:All(BtvRec.DISTINGUISHED_NAME))-1 )
  754.      DOC:Print("<B>Common Name (CN):</B>   ", UserObj ); NewLine
  755.      DOC:Print("<B>Distinguished Name:</B> ", DGName );NewLine
  756.  
  757.      Return
  758. End Sub
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.