/*********************************************************************
* Copyright (C) 2000 by Progress Software Corporation ("PSC"),       *
* 14 Oak Park, Bedford, MA 01730, and other contributors as listed   *
* below.  All Rights Reserved.                                       *
*                                                                    *
* The Initial Developer of the Original Code is PSC.  The Original   *
* Code is Progress IDE code released to open source December 1, 2000.*
*                                                                    *
* The contents of this file are subject to the Possenet Public       *
* License Version 1.0 (the "License"); you may not use this file     *
* except in compliance with the License.  A copy of the License is   *
* available as of the date of this notice at                         *
* http://www.possenet.org/license.html                               *
*                                                                    *
* Software distributed under the License is distributed on an "AS IS"*
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. You*
* should refer to the License for the specific language governing    *
* rights and limitations under the License.                          *
*                                                                    *
* Contributors:                                                      *
*                                                                    *
*********************************************************************/
/* q-init.p - do initialization/set permissions for query forms */

{ prores/s-system.i }
{ prores/s-define.i }
{ prores/q-define.i }
{ prores/t-define.i }
{ prores/s-menu.i }

DEFINE INPUT  PARAMETER qbf-f AS CHARACTER         NO-UNDO. /* full? */
DEFINE INPUT  PARAMETER qbf-d AS CHARACTER         NO-UNDO. /* down? */
DEFINE INPUT  PARAMETER qbf-s AS CHARACTER         NO-UNDO. /* scan? */
DEFINE OUTPUT PARAMETER qbf#  AS INTEGER INITIAL 0 NO-UNDO.

DEFINE VARIABLE qbf-c AS CHARACTER NO-UNDO.
DEFINE VARIABLE qbf-i AS INTEGER   NO-UNDO.
DEFINE VARIABLE qbf-r AS CHARACTER NO-UNDO.
DEFINE VARIABLE qbf-x AS INTEGER   NO-UNDO.
DEFINE VARIABLE qbf-y AS INTEGER   NO-UNDO.

{ prores/t-set.i &mod=q &set=1 }

qbf-r = DBRESTRICTIONS(qbf-db[qbf-level]).

IF DBTYPE(qbf-db[qbf-level]) = "RMS" THEN DO:
  /* workaround for overactive RMS DBREST */
  IF CAN-DO(qbf-r,"USE-INDEX") THEN
    SUBSTRING(qbf-r,INDEX(qbf-r,"USE-INDEX"),10) = "".
  /* add RECID for some rms file subtypes, but not "indexed" */
  RUN prores/s-lookup.p
    (qbf-db[qbf-level],qbf-file[qbf-level],"","FILE:MISC2:8",OUTPUT qbf-c).
  IF CAN-DO("relative,sequential",qbf-c) THEN qbf-r = qbf-r + ",RECID".
END.

/* qbf-m-aok[] is working copy of qbf-q-opts */
qbf-m-aok = FILL("y",20).
DO qbf-i = 1 TO 20:
  IF NOT qbf-q-opts[qbf-i] THEN SUBSTRING(qbf-m-aok,qbf-i,1) = "n".
END.

IF qbf-f = ""     /* was this generated by Full PROGRESS?  IF not, then */
  OR CAN-DO(qbf-r,"READ-ONLY")
/*OR qbf-query[qbf-level] <> ?*/   /* can't modify under Where or Query */
/*OR qbf-level > 1*/                  /* can't modify under Join either */
  THEN SUBSTRING(qbf-m-aok,5,4) = "nnnn".  /* Add, Update, Copy, Delete */

qbf-c = "*".
IF SUBSTRING(qbf-m-aok,6,1) = "y" THEN
  RUN prores/s-lookup.p
    (qbf-db[qbf-level],qbf-file[qbf-level],"","FILE:CAN-WRITE",OUTPUT qbf-c).
IF NOT CAN-DO(qbf-c,USERID("RESULTSDB")) THEN
  SUBSTRING(qbf-m-aok,6,1) = "n". /* Update */

qbf-c = "*".
IF SUBSTRING(qbf-m-aok,8,1) = "y" THEN
  RUN prores/s-lookup.p
    (qbf-db[qbf-level],qbf-file[qbf-level],"","FILE:CAN-DELETE",OUTPUT qbf-c).
IF NOT CAN-DO(qbf-c,USERID("RESULTSDB")) THEN
  SUBSTRING(qbf-m-aok,8,1) = "n". /* Delete */

qbf-c = "*".
IF SUBSTRING(qbf-m-aok,5,1) = "y" OR SUBSTRING(qbf-m-aok,7,1) = "y" THEN
  RUN prores/s-lookup.p
    (qbf-db[qbf-level],qbf-file[qbf-level],"","FILE:CAN-CREATE",OUTPUT qbf-c).
IF NOT CAN-DO(qbf-c,USERID("RESULTSDB")) THEN
  ASSIGN
    SUBSTRING(qbf-m-aok,5,1) = "n"  /* Add */
    SUBSTRING(qbf-m-aok,7,1) = "n". /* Copy */

/* can't FIND PREV or FIND LAST */
IF CAN-DO(qbf-r,"PREV") THEN SUBSTRING(qbf-m-aok,2,1) = "n". /* Prev */
IF CAN-DO(qbf-r,"LAST") THEN SUBSTRING(qbf-m-aok,4,1) = "n". /* Last */

IF CAN-DO(qbf-r,"PREV") OR CAN-DO(qbf-r,"NEXT") OR CAN-DO(qbf-r,"RECID")
  THEN /* need all to Browse */
  SUBSTRING(qbf-m-aok,10,1) = "n".

/* turn off Browse or Query when no B/Q fields enabled */
IF qbf-d = "" THEN SUBSTRING(qbf-m-aok,10,1) = "n". /* &down/&brow -> Browse */
IF qbf-s = "" THEN SUBSTRING(qbf-m-aok,12,1) = "n". /* &scan/&seek -> Query */

/* can't View w/i Join or Query or Where */
IF qbf-level > 1 OR qbf-query[qbf-level] <> ? THEN
  SUBSTRING(qbf-m-aok,9,1) = "n". /* View */

/* Join 5 levels max */
IF qbf-level = 5 THEN SUBSTRING(qbf-m-aok,11,1) = "n". /* Join */

/* can't Where within Query or Query within Where */
IF NOT qbf-query[qbf-level] THEN SUBSTRING(qbf-m-aok,12,1) = "n". /* Query */
IF qbf-query[qbf-level]     THEN SUBSTRING(qbf-m-aok,13,1) = "n". /* Where */

/* can't Order w/i Join or Query or Where */
IF qbf-level > 1
  OR qbf-query[qbf-level] <> ?
  OR CAN-DO(qbf-r,"USE-INDEX")
  THEN SUBSTRING(qbf-m-aok,15,1) = "n". /* Order */

/* this is automatically set by a-load.p, but just in case... */
IF NOT qbf-user THEN SUBSTRING(qbf-m-aok,18,1) = "n".

IF    SUBSTRING(qbf-m-aok,11,1) = "y"
  AND qbf-level < 5
  AND qbf-file[qbf-level + 1] <> ""
  THEN qbf# = 11.

RETURN.
