Google
 

Trailing-Edge - PDP-10 Archives - iqlv30 - iql.hlp
There are 2 other files named iql.hlp in the archive. Click here to see a list.


**GENERAL
    IQL is a general purpose inquiry and  data  management  system.
    With it, you can input data to a file, change data in the file,
    browse interactively in the file, or get reports  from  one  or
    more files.  IQL is interfaced with DBMS in its REPORT mode.


    An IQL level is either a 'command'  level  or  a  'data  input'
    level.   Command  levels  require  your  input  to be a command
    telling IQL what to do next.  Data input  levels  require  your
    input  to  be  data  that  IQL  will  use according to the last
    command you gave.  However even at data input level, there  are
    a  few special commands you may give to signal the end of input
    or correct a mistake.

    (a) You always start in IQL  at  ASSISTANCE  command  level  by
    coming in from the operating system via R IQL, RUN IQL, or just
    IQL depending on how your site sets itself up.

    b) At ASSISTANCE command level you can go down to  any  of  the
    following subcommand levels:

        REPORT level via RUN or EXECUTE - to run a query.

        EDIT level via EDIT - to edit a query.

        UPDATE level via UPDATE,  BROWSE  or  INPUT  -  to  change,
        inspect or input a data file.

    c) At ASSISTANCE command level, you can go down directly to the
    following data input levels:

        Via INPUT - to input new records to a data file.

        Via DEFINE - to define dictionary definitions or changes.

        Via WRITE - to write a new query.

    d) From any of the subcommand levels you can go down  to  their
    respective data input modes:

        From EDIT via INSERT or I.  - to  insert  new  lines  in  a
        query.

        From UPDATE via INSERT or APPEND:  to input new records  to
        a data file.

        From REPORT mode (running a query) via ACCEPT -  to  accept
        data during preparation of reports.

    e) Regardless of mode or level, END or EXIT always takes you up
    to  the  next  level.   IQL  always  tells you when you leave a
    level.



**BROWSE
FUNCTION:     Puts you in UPDATE mode so that you may 'browse' in a
              data file (subject to any password requirement).
FORMAT:       BROWSE dictionary-name [file-name]
DISCUSSION:   1) BROWSE is the same as UPDATE except that 1) BROWSE
              only lets you read the file.  

              2) If the file is protected at the  READ  level,  IQL
              asks  you  for  the  password  and  checks  it before
              unlocking the file for browsing.

              4)  If  you  furnish  a  file-name,  IQL  uses   this
              file-name  name  rather  than  the  file-name  in the
              dictionary.   The   file-name   must   be   formatted
              ffffff.ext where ffffff is one to six characters.
EXAMPLES:
              <QA> browse   accounts      (not protected)
              <QU> list account buyer city for account 23098
               23098 H R RAWLINGS   CLEVELAND
               ...(BROWSE session continues)...
               ...(you end BROWSE session via END or EXIT)
              <QA>



              <QA> browse   personnel    (protected at read level)
               *PASSWORD: pulsar
               (FILE UNLOCKED FOR READ ONLY)

              <QU> list name, dept for all region 23
               BROADHURST      421
               CALAHAN         421
               GROGAN          423
               ...(BROWSE session continues)...
               ...(you end BROWSE session via END or EXIT)



              <QA> browse   charges   'charge.seq'
              <QU> list date, charge for all account 562330
               06/03/78    234.56
               06/06/78     12.07
               ...(BROWSE session continues)...

**DEFINE

FUNCTION:     Allows you  to  define  dictionary  transactions  for
              creating  or  updating  an  IQL dictionary.  When you
              terminate   a   DEFINE    session    normally,    IQL
              automatically  calls the dictionary generation module
              to actually create or update the dictionary based  on
              the transactions you just entered.
FORMAT:       DEFINE 
EXAMPLES:     <QA> define

              *FD,DD,PD,CD,RD,AD,SD,END,SCRUB:    fd
              *ACTION CODE (A,C,D OR P):          c
              *DICT NAME - UP TO 30 CHARS:        personnel
              *DICT UNLOCKING PASSWORD, IF ANY:   sesame
              *FILE IN NAME AS XXXXXX.EEE:        next

              *FD,DD,PD,CD,RD,AD,SD,END,SCRUB:    dd
              *ACTION CODE (A,C,D):               c
              *ITEM NAME (UP TO 30 CHARS):        name
              *TOP COLUMN TITLE (UP TO 10 CHARS): full name
              *BOTTOM TITLE (UP TO 10 CHARS):     next

              *FD,DD,PD,CD,RD,AD,SD,END,SCRUB:    end

              (END DICTIONARY TRANSACTION INPUT)
              (END DICTIONARY UPDATE)
               <QA>  


**DELETE


FUNCTION:     Deletes one or more queries from the file  of  stored
              English language queries in your PPN.
              FORMAT:                                  DELETE
              query-name
                       ------<-----


DISCUSSION:   The  query  is  deleted  from  the  file  of   stored
              English-language queries.
EXAMPLE:      <QA> delete bonus-analysis
 (BONUS-ANALYSIS DELETED)
<QA>  



<QA> delete  charlie  beth  claire
 (CHARLIE DELETED)
 !!BETH NOT FOUND TO BE DELETED!!
 (CLAIRE DELETED)
<QA> 

**DICTIONARIES
FUNCTION:     Gives a terminal display of the file information  for
              each dictionary in your PPN.
FORMAT:       DICTIONARIES [master-password]
DEFAULTS:     If  you  do  not  furnish  the  master-password,  IQL
proceeds  with  the  display  of  the  file  information, but if it
encounters a protected dictionary, it displays only the  dictionary
name, the PPN and the file type.
DISCUSSION:   The display produced by DICTIONARIES is formatted  72
              characters  wide.  The dictionary display produced by
              printing is wider and contains more information.
EXAMPLE:      <QA> dictionaries sesame

  DICTIONARIES IN YOUR PPN:

  dict      file    file-in             rec blk key ky ky rd cp rw
  name      type    name        ppn     len fac loc ln tp pw pw pw  ____      ____    ____        ___     ___ ___ ___ __ __ __ __ __

  inventory sq dsk7 invent.seq [71,111] 180   0
  personnel sq dsk7 person.idx          600   5   1  5 au 10 20 30

              <QA>  

**EDIT


FUNCTION:     Allows you to edit (change) either the current  query
              or a stored query.  Uses the built-in IQL editor.
              FORMAT:                                  EDIT
              [query-name] [LIST]


DEFAULTS:     If you do not furnish a query  name,  IQL  edits  the
              current query.  If you do not use 'LIST' IQL does not
              list the query before going into edit mode.


DISCUSSION:   1) If you furnish a query name, IQL moves that  query
              from  the  file  of  stored  queries into the current
              query area before entering edit mode.

              The IQL editor subcommands are summarized below:

          D.                 Delete the current line of the query. 

          DOWN n             Go down n lines and list.

          END                If in 'insert' mode go to edit mode.
                             if in 'edit' mode termninate it.

          Fstring:           Move to and list the next line which  
                             contains the designated string. 

          I.                 Insert a line of text after this line.

          I                  Insert lines of text after this line;
                             keep inserting lines until you enter 
                             a carriage return first in a line.

          L                  Move down one line and list.

          P.                 List (print) the current line.

          P;all              List the current and following lines. 

          Sstring1:string2:. Substitute string2 for string1 in
                             the current line. 

          Sstring1:string2:ALL Substitute string 2 for string1 in
                             the current and all following lines.

          TOP                Go to the beginning of the query.

          UP n               Go up  n lines and list.



              EXAMPLE:

          <QA> edit      newhires     list
           **NEWHIRES
             OPEN PERSONNEL.
             HEADING 'LIST OF NEW HIRES'.
             IF HIRE-YR LEQ 77 PRINT NAME, DEPT, HIRE.
         
           [EDITING QC014S.CRD]
           *l
           open personnel.
           *i.
           display on.
           *fheading:
           HEADING 'LIST OF NEW HIRES'.
           *SHIRES:HIRES//SINCE JANUARY 1:.
           HEADING 'LIST OF NEW HIRES//SINCE JANUARY 1'.
           *l
           IF HIRE-YR LEQ 77 PRINT NAME, DEPT, HIRE-YR.
           *sleq:geq:.
           IF HIRE-YR GEQ 77 PRINT NAME, DEPT, HIRE-YR.
           *top
           OPEN PERSONNEL.
           *p;ALL
           OPEN PERSONNEL.
           DISPLAY ON.
           HEADING 'LIST OF NEW HIRES//SINCE JANUARY 1'.
           IF HIRE-YR GEQ 77 PRINT NAME, DEPT, HIRE-YR.
           *end
           [qc014s.tmp]
           <QA>  


**EXECUTE


FUNCTION:     Begins executing a  saved  query  without  having  to
              analyze it again.
FORMAT:       EXECUTE query-name
DISCUSSION:   1) For a query to be available to  EXECUTE,  it  must
              have  been  saved  sometime  previously by use of the
              SAVE assistance  command.   Each  saved  query  is  a
              separate  file  which has the extension .QRY.  Please
              see the SAVE command for  a  complete  discussion  of
              saved queries.

              2) Saved queries  have  already  been  through  IQL's
              analysis step and are ready for immediate execution.

              3) Note that if you have  forced  a  specific  report
              date (via DATE) in a saved query, that date stays the
              same each time the query is executed.

EXAMPLE:      <QA> execute newhires (looks for NEWHIR.QRY) 

               ...(your report goes here if routed to terminal)...

              <QA>  

**EXIT


FUNCTION:     Returns control from IQL to the operating system.  
FORMAT:       EXIT
SYNONYMS:     END
DISCUSSION:   Throughout IQL the words END or EXIT always terminate
              the  level  or  mode  you are in and go up one level.
              The operating system  is  one  level  above  IQL.   A
              message is displayed whenever IQL leaves a level.
EXAMPLE:      <QA> exit (exits IQL to operating system)


**GET
FUNCTION:     Moves a query from the stored  query  file  into  the
              current query area.  
FORMAT:       GET [query-name] [LIST]
DEFAULTS:     (1) If you do not use a  query  name,  GET  uses  the
current query;  ie, it does not move in a new query.

(2) If you do not use LIST, IQL does any query moving indicated but
lists only the name of the query.
DISCUSSION:   If you use a query name, the  new  query  obliterates
              the previous contents of the current query area.
EXAMPLES:     (the current query is named BLUE-EYES)

              <QA>get
               **BLUE-EYES      (lists only the current query name)
              <QA>


              <QA> get    list
               **BLUE-EYES
               OPEN APPLICANTS.
               IF COLOR-EYES = 'BLUE' SORT BY STATE, CITY.
               PRINT NAME, STATE, CITY, AGE.
              <QA> 



              <QA> get    newhires
               **NEWHIRES         (only the query name is listed)
              <QA>  



              <QA> get    newhires     list
               **NEWHIRES
               OPEN PERSONNEL
               HEADING 'NEW HIRES SINCE//JANUARY 1, 1977'
               IF HIRE-DATE GEQ 770101 PRINT NAME, DEPT, HIRE-DATE
              <QA>  

**INPUT
FUNCTION:     Sets IQL into 'input' level of update mode so you may
              input records to create a new data file.
FORMAT:       INPUT dictionary-name [file-name]
DEFAULTS:     Each record is initially set  to  all  spaces  before
INPUT begins asking you for field values.
DISCUSSION:   1) If you do not furnish a dictionary name, IQL  asks
              you for it.

              2)  If  you  furnish  a  file-name,  IQL  uses   this
              file-name  instead of the one in the dictionary.  The
              file-name must be formatted ffffff.ext  where  ffffff
              is one to six characters.

              3) If IQL finds that the file is already  present  in
              your PPN it tells you and goes into UPDATE mode.  ie,
              INPUT does not let you write over an existing file.

              4) If IQL finds that the dictionary contains password
              protection at the READ or WRITE level it asks you for
              the password and checks it before letting  you  input
              data.

              5) INPUT begins by issuing a  prompt  for  the  first
              field  in  the  first  record  and  waiting  for your
              response.  It then issues the  prompt  for  the  next
              field in that record, and continues in that way until
              either it encounters the end of the dictionary or you
              tell  it  to  do  something  else.   Prompts for item
              values are issued in the order in which the items are
              found in the dictionary.

              6) You may use the following special words to control
              INPUT:

              END             end INPUT mode; go up to UPDATE mode

              EXIT            same as END

              DOWN [integer]  move down integer prompts; if no  
                              integer move down 1 prompt

              KILL            kill the record; start it over

              NEXT            complete the record: fill remaining 
                              fields with spaces or zeroes as
                              appropriate, then go to next record

              UP [INTEGER]    move up integer prompts; 
                              if no integer move up 1 prompt

              6) Fields are checked as follows as soon as you enter
              them:   alphanumeric  values  are checked only to see
              that they are not longer  than  the  field.   Numeric
              quantities  are  checked  to  see  that  they  do not
              contain characters other than $ ,  +  -  or  numbers;
              and that they do not have too many integer or decimal
              places.  INPUT fills in leading and trailing zeros in
              numeric  quantities  as  necessary;  the characters $
              and , are ignored;  and the  decimal  point  is  used
              only to line up the item.  See the example below.



EXAMPLE:      <QA> input     customers
              (YOUR DIARY FILE IS QL023U.LPT)

              (NEXT RECORD)
               *NUMB (CUSTOMER NUMBER) 5 N:  34
               *NAME (CUSTOMER NAME) 30 A:   portable devixes
               *SLSMAN (SALESMAN NAME) 25 A: carleton scott
               *CITY (CUSTOMER CITY) 15A:    up 2
               *NAME (CUSTOMER NAME) 30 A:   portable devices
               *SLSMAN (SALESMAN NAME) 25 A: down
               *CITY (CUSTOMER CITY) 15 A:   st. louis
               *CYSLS (CURR YR SALES) 8.2 N: $1,500.
               *LYSLS (LAST YR SALES) 8.2 N: 3012.46
               *CLIMIT (CREDIT LIMIT) 8.2 N: next

              (NEXT RECORD)
               *NUMB (CUSTOMER NUMBER) 5 N:  37
              ...(input continues; ended by END or  EXIT)...
              ...(you end UPDATE mode via END or EXIT)...
              <QA>  

**ITEMS
FUNCTION:     Displays a formatted display of  the  file  and  item
              information in a specific IQL dictionary.
FORMAT:       ITEMS dictionary [master-password] [ALL]
DEFAULTS:     (1) If you do not furnish a password  and  IQL  finds
that  the  dictionary  or  an  item  is  protected, it obscures any
information for the protected item which would allow you to  locate
it.

(2) If you do not use 'ALL', IQL displays only the first  25  items
in  the  dictionary and then asks you to respond with 'YES' or 'NO'
as to whether you want to see more items.  If you kill the  display
with control-O remember that IQL waits for this response.
EXAMPLE:      <QA> items personnel sesame all

  DICT      FILE    FILE-IN             REC BLK KEY KY KY RD CP RW
  NAME      TYPE    NAME        PPN     LEN FAC LOC LN TP PW PW PW  ____      ____    ____        ___     ___ ___ ___ __ __ __ __ __

  PERSONNEL IS DSK7 PERSON.IDX [11,22]  600   5   1  5 AU 10 20 30

     ITEM     TOP        BOTTOM     1ST  NO.  T S PRINTING SCAN
  ID NAME     TITLE      TITLE      CHAR CHAR Y C PICTURE  GNNS PT   __ ____     _____      _____      ____ ____ _ _ _______  ____ __
          
  PD TIGER
  DD EMPNO    EMPLOY     NUMBER        1    5 N 0 ZZZZ9
  DD EMPNAME  EMPLOY     NAME          6   30 A
  ....

              <QA>  

**JOB
FUNCTION:     Displays the job number which  the  Operating  System
              has assigned to your IQL session.
FORMAT:       JOB
DISCUSSION:   IQL uses your job number as an ingredient for  naming
              its temporary and print files.  The job number may be
              useful if you wish to work with these  files  outside
              of IQL.  The specific files IQL uses are described in
              the Installation Manual which  accompanied  your  IQL
              installation package.
EXAMPLE:      <QA> job
 JOB NUMBER: 32
<QA>  

**LIST
FUNCTION:     Displays your current query or moves a  stored  query
              into the current query area and displays it.
FORMAT:       LIST [query-name]
DEFAULTS:     If you do not furnish a  query-name,  IQL  lists  the
current query.
DISCUSSION:   When used with a query name, LIST functions as if  it
              were 'GET' used with the 'LIST' option.
EXAMPLES:     (the current query is named MARKET-PROJECT)

              <QA> list                   (lists the current query)
               **MARKET-PROJECT
               OPEN PROSPECTS
               COMPUTE EXPECTED = EXPECTED  * 1.1
               TOTAL EXPECTED BY REGION, DISTRICT
               MAXIMUM EXPECTED BY REGION, DISTRICT
              <QA> 



              <QA> list   prospect-detail     (retrieves and lists)
               **PROSPECT-DETAIL
               OPEN PROSPECTS
               HEADING 'PROSPECT//DETAIL'
               PRINT PROSPECT, DATE-IN, EXPECTED, PROBABILITY
              <QA> 

**QUERIES
FUNCTION:     Displays a list of all the queries stored by  IQL  in
              your PPN.  
FORMAT:       QUERIES


DISCUSSION:   Stored queries are kept in their  English-like  query
              language   format.   They  must  pass  through  IQL's
              analysis step to be executed.   Note  the  difference
              between  'stored'  (stored  in their English language
              format) and 'saved' (stored in their  analyzed  table
              format) queries.

EXAMPLE:      <QA> queries

               QUERIES STORED IN YOUR PPN are:

               NEWHIRES           SALARY-ANALYSIS         PROJECTS
               SALES-ANALYSIS     CUSTOMERS-OVER-CREDIT   LEADS
               LOANS              RISK-ANALYSIS

               (END LIST OF STORED QUERIES)

              <QA> 

**REPLACE
FUNCTION:     Replaces an existing query in IQL's stored query file
              with the current query.  
FORMAT:       REPLACE [query-name]
DEFAULTS:     If you do not furnish a query name, IQL looks to  see
if you have given the current query a name.  If so, it replaces the
stored query under that name with the current one.  If not, it asks
you for a query name.
DISCUSSION:   The contents  of  the  current  query  area  are  not
              affected by REPLACE.
EXAMPLE:      <QA> replace
               (PO-AUDIT REPLACED)
              <QA> 



              <QA> replace  open-po
               (OPEN-PO REPLACED)
              <QA> 

**RUN
FUNCTION:     Runs a query by routing it to the query analysis step
              before executing it.  
FORMAT:       RUN [query-name] [NOLIST] [SAVE] 
DEFAULTS:     If you do not furnish a  query  name,  IQL  runs  the
current  query.   If  you do not use any of the optional words, IQL
runs and lists the query.
DISCUSSION:   1) If you furnish a query name, IQL moves that  query
              from  the  stored  query  file into the current query
              area before running it.

              2) IQL analyzes the query before executing  it.   The
              query  in  the  current query area is not affected by
              running it.

              3)  If  IQL  finds  an  error  in  the  query  during
              analysis,  it  issues  appropriate error messages and
              returns to assistance mode so that  you  may  correct
              the errors (by using 'EDIT').

              4) If you use NOLIST, IQL does not list the query  as
              it analyzes it.

              5) If you use SAVE, IQL creates a saved .QRY file  of
              the analyzed query.  See the SAVE command.
EXAMPLES:     <QA> run
               ...(listing of current query goes here)...
               ...(report produced by current query goes here)...
              <QA> 



              <QA> run   dept-mgrs   nolist
               **DEPT-MGRS
               ...(report produced by query DEPT-MGRS goes here)...
              <QA> 

**SAVE
FUNCTION:     Saves the current or  named  query  in  its  analyzed
              form.   This  is  so you may subsequently execute the
              query without having to re-analyze it.
FORMAT:       SAVE [query-name] [NOLIST] [RUN] 
DEFAULTS:     If you do not furnish a query name, IQL uses the name
of  the  current  query.  If you have not given the current query a
name, IQL requests a query name.  If you do not furnish any of  the
optional words, IQL saves and lists the query.
DISCUSSION:   1) IQL analyzes the query before saving it.  

              2) The saved query is written as an independent  disk
              file.   It  is  given  a  file name consisting of the
              first six characters of the query name combined  with
              the  extension  '.QRY'.   Since  some versions of the
              system utilities do not fully process file names with
              dashes (-) in them, you should avoid having dashes in
              the first six characters  of  your  query  name  when
              saving it.

              3) If a .QRY file already  exists  under  the  target
              name, IQL notifies you of the conflict and refuses to
              SAVE the new query;  neither the existing  .QRY  file
              nor the current query are affected.

              4) Please remember that if you have used DATE to  set
              a  specific  value  for the report date in the query,
              when the saved query  is  run,  it  produces  reports
              using that specific date value.

              5) To run a saved query, use the EXECUTE command.

              6) Please be careful to note the  difference  between
              STORED  queries  (which  are  kept  in  their English
              language form) and SAVED queries (which are stored in
              their internal table form.

              7) If you use the RUN option, IQL runs (analyzes  and
              executes) your query as well as saving it.
EXAMPLES:     (current query is named NEWHIRES)

              <QA> save
               ...(the current query is listed here)...
               (NEWHIRES SAVED AS NEWHIR.QRY)
              <QA> 



              <QA> save  quarterly  nolist  run
               **QUARTERLY
               ...(report produced by QUARTERLY goes here)...
               (QUARTERLY SAVED AS QUARTE.QRY)
              <QA> 

**STORE
FUNCTION:     Stores the  current  query  in  its  English-language
              form.  
FORMAT:       STORE [query-name]
DEFAULTS:     If you do not furnish a query name, IQL uses the name
of  the  current  query.  If you have not given the current query a
name, IQL requests a query name.
DISCUSSION:   1) The stored query is kept in  its  English-language
              form  in  the  file QPQRYS.SEQ.  You may retrieve the
              query at any time to list, edit, run, or save it.

              2) If you attempt to STORE a query and  IQL  finds  a
              query  already  there by that name it notifies you of
              the conflict and refuses to store the query;  neither
              the  current  nor  the  previously  stored  query are
              affected.

              3) Please note the difference between stored  queries
              (kept  in  their  English-language  format) and saved
              queries (kept in their analyzed table format).

              4) The current query is not affected by storing it.

              5) To execute a stored query,  use  the  command  RUN
              with the query-name option.  See the RUN command.
EXAMPLES:     (the current query is named R2D2)

              <QA> store
               (R2D2 STORED)
              <QA> 



              <QA> store   c3po
               (C3PO STORED)
              <QA> 

**UPDATE
FUNCTION:     Sets IQL into update command mode so you  may  update
              or inspect a data file.
FORMAT:       UPDATE dictionary-name [file-name]
DISCUSSION:   1) IF IQL does not find the file  referenced  in  the
              dictionary, it notifies you and goes into INPUT mode.

              2) If you furnish a file-name IQL uses this file-name
              instead  of  the  file-name  in  the dictionary.  The
              file-name must be formatted ffffff.ext  where  ffffff
              is one to six characters.

              3) If IQL  finds  that  the  dictionary  is  password
              protected  at either the READ or WRITE level, it asks
              you for the password and checks it before letting you
              update.   If  you  respond with the READ password, it
              notifies you that it is opening  the  file  for  read
              only.

EXAMPLE:      <QA> update customers
               *password:       mickey
               (YOUR DIARY FILE IS QL032U.LPT)
               (AT TOP OF FILE)
              <QU> list customer salesman sales all
               PORTABLE DEVICES INC  CARLETON SCOTT   1,472.00
               ELECTROSCAN LABS      BILL GLASS      21,500.00
              <QU> top
              <QU> change salesman to 'jim reilly' for custno 23
               SEAFOOD BROKERS INC   JIM REILLY     023456780023302
               0301111020
               ...(UPDATE session continues)...
               ...(you end UPDATE session via END or EXIT)...
              <QA> 

              (For a more extensive example see Appendix D.)

**WRITE
FUNCTION:     Allows you to  begin  writing  a  new  query  in  the
              current  query  area.   To  do this IQL puts you into
              'insertion' mode of the IQL built-in text editor.
FORMAT:       WRITE [query-name]
SYNONYMS:     REPORT
DEFAULTS:     If you do not furnish a query name, IQL does not give
a name to the current query.  If you later attempt to save or store
this query, IQL asks for a name for the query at that time.
DISCUSSION:   1)  WRITE  destroys  the  previous  contents  of  the
              current query area.

              2) WRITE works by putting you into  'insertion'  mode
              of the IQL text editor.  It prompts for each new line
              by displaying an asterisk and waits for you to  enter
              the line.  End your lines with a carriage return.

              3) To end input, simply enter a  carriage  return  as
              the first entry in the line.  The editor goes up from
              'insert' to 'edit'  mode.   At  this  point  you  may
              either  correct  any  errors you made in entering the
              query or go on up to IQL assistance mode by  entering
              END.

              4) To correct  errors,  when  you  have  ended  WRITE
              input,  use any of the regular edit subcommands.  See
              the EDIT command.


EXAMPLES:     <QA> write
                                                       Input:
              QC022S.CRD
               *open personnel.
               *heading 'new hire list'.
               *if date-hire geq 770101 print name, dept.
               *(carriage return)
               *end
               [QC022SC.CRD]
              <QA> 



              <QA> write   new-hire-list
              Input QC022S.CRD
               *oper personnel.          (note error)
               *heading 'new hire list'.
               *if date-hire geq 770101 print name, dept.
               *$ (carriage return)
               *top
               *OPER PERSONNEL.
               *SOPER:OPEN:.    (fix error)
               *OPEN PERSONNEL.
               *end
               [QC022S.CRD]
              <QA> 
3.1  CONCEPT OF A QUERY

Report specification commands are taken together
to form a 'query', which is a complete specification of a report. 
To
create a query, use the assistance command WRITE.
To make IQL carry out the query to actually produce the report, 
you use the assistance command
RUN. You may also have IQL analyze your query and save
it for later execution by using the assistance command SAVE; to
later run a 'saved' query, use the assistance command EXECUTE.



3.2 FORMATTING DEFAULTS

IQL uses certain defaults in  formatting  reports  if  you  do  not
override them in your query:

    (a) single spacing vertically.
    (b) three spaces between elements horizontally.
    (c) fifty nine printed lines (including heading) per page.
    (d) date of run as MM/DD/YY at top left of each page.
    (e) page number at top right of each page.
    (f) left margin at 1.
    (g) right margin at 132.

3.3 ORDER OF QUERY STATEMENTS

IQL finds out what files or schema you wish  to  process  from  the
dictionaries  named  in  your  OPEN  statement.  However, it is not
necessary to have an OPEN statement if you are not  going  to  read
any  files;  ie, if you are going to use IQL as a data generator or
calculator.   Any  statements  that  IQL  finds  before  your  OPEN
statement  are  executed  only once at the start of the query.  The
query will run much faster if you  put  overall  format  statements
here.

**ACCEPT


FUNCTION:     Requests item values from the  terminal.   IQL  first
              issues a prompt for the value then waits for it to be
              entered.  The function of ACCEPT is to allow  you  to
              change  information  or  directives  during the query
              run.
FORMAT:       ACCEPT item
          --<---


DISCUSSION:   1) IQL accepts any alpha or  numeric  data  items  as
              well  as  numeric  or  alpha variables.  the accepted
              value replaces  the  previous  value  in  either  the
              current record (in core) or the variable.

              2) you may  use  ACCEPT  anywhere  and  as  often  as
              necessary.

              3) ACCEPT constructs a prompt from the information it
              finds  in  the  dictionary  entry  for the item to be
              accepted - it uses the  item  name,  top  and  bottom
              column  titles, item type, item length, and the scale
              (if any).  See the example below.

              4) IQL checks  accepted  values  as  follows:   Alpha
              items  are  checked  only to be sure they are not too
              long.  Numeric values are checked to make  sure  they
              do  not  have  too many integer or decimal places and
              for illegal (non-numeric) characters.  Numeric values
              may  contain  the  characters  $ + - , .  in context.
              The sign may begin or end  the  value.   in  context.
              Generally  you  may enter a numeric value any way you
              would write it for another person.

              5) A frequent use of  ACCEPT  is  to  provide  search
              values  for  a  specific run of a query.  To do this,
              use ACCEPT before your OPEN statement (so it is  done
              only once) or under control of FIRSTIME.

EXAMPLES:     (a) using an accepted alpha variable to control an
              extract

                 ACCEPT ASTATE.
                 HEADING 'PROSPECTS IN ' ASTATE.
                 OPEN PROSPECTS.
                 IF STATE = ASTATE
                    PRINT DIRECTOR, SITE, HARDWARE.

              Might result in the prompt and response:

                 *ASTATE 2A: az



              (b) using repeated accepts to find keyed isam records

                  DISPLAY 'TO END SEARCH, ENTER "QUIT"'.
                  OPEN PROSPECTS.
                  ACCEPT ANAME.
                  IF ANAME = "QUIT" GO TO XT.
                  FIND KEY = ANAME.
                  DISPLAY ANAME, EQUIPMENT, SALES, PERCENT.



              (c) using IQL like a desk calculator (no OPEN):

                  DISPLAY 'TO QUIT, ENTER 0'.
                  TITLES X = 'ANNUAL//SALARY'.
                10ACCEPT X.
                  IF X = 0 GO TO XT.
                  COMPUTE X1 = X / 2080.
                  DISPLAY 'ANNUAL SALARY:',X,'HOURLY SALARY:',X1.
                  GO TO 10.

**ACROSS


FUNCTION:     Sets IQL to assemble more than  one  'logical'  print
              line  across  a  physical print line;  ie, it permits
              printing several  identically  formatted  lines  from
              different records across the page.
FORMAT:       ACROSS integer


DEFAULTS:     If you do not use ACROSS in your  query,  IQL  prints
              one  physical  line per print statement;  ie, it acts
              as if you had used ACROSS 1.


DISCUSSION:   1) Each time IQL executes a print statement  it  sets
              up  a  logical  line.  If you do not use ACROSS, that
              logical line is  printed  right  away.   If  you  use
              ACROSS, IQL places the logical lines end to end until
              it has assembled as many  across  as  you  specified;
              then  it  prints  the  composite line.  At the end of
              each stage in the query, any in-progress print  lines
              are printed out.

              2) If you use a horizontal spacing  constant  at  the
              end of a print line, that many spaces are left at the
              end of that line before the next line is placed  next
              to it.  This is handy for lining up vertically.

              3) If an assembled line is too long  to  fit  in  the
              space  between  your  left  and  right  margins,  IQL
              truncates the assembled  line  on  the  right  before
              printing it.  No warning is given.

              4) ACROSS is frequently used for setting  up  mailing
              labels  when  several  labels  across  are printed on
              special forms.  However, ACROSS  is  useful  in  many
              other cases for tightening up reports.

              5) The current setting for ACROSS is carried from one
              stage  to the next and from one report to the next in
              a multiple-report query.  If you need  a  new  across
              setting, even if it is 1, you must specifically reset
              it with another ACROSS statement.

EXAMPLES:     (a) mailing labels; (note paging turned off).


              PAGING OFF.             because special form
              TITLES OFF.
              ACROSS 2.               two across
              OPEN ALUMNI.
              VSPACE 3.               three spaces between labels
              PRINT NAME, 5.          name is 25 long
              VSPACE 1.               single space within label
              PRINT STREET,5.         street is 25 long
              PRINT CITY,3,STATE,5.   city 19 long,state 2 long
              PRINT ZIP,25.           zip is 5 long.

              might give:

              ALVIN J COWENS                JEROME C DAVIDSON
              45 MEADOWBROOK BLVD.          4762 FAIRMOUNT
              CLEVELAND HEIGHTS   OH        SHAKER HEIGHTS      OH
              44118                         44120


              ERIE C HOPWOOD                WILLIAM F FRANKLIN
              ..                           ...

**AUTHORITY


FUNCTION:     Provides authorized passwords  to  permit  access  to
              protected files or data items.  
FORMAT:       AUTHORITY password
           ----<-----


DEFAULTS:     If you do  not  use  AUTHORITY  in  your  query,  IQL
              processes  unprotected  files  or items, but does not
              permit you to run a query which refers  to  protected
              files or items.


DISCUSSION:   1) PASSWORDS WHICH PROTECT FILES OR INDIVIDUAL  ITEMS
              ARE  STORED  (IN  ENCRYPTED  FORM)  AS  PD  (Password
              Definition) entries in IQL dictionaries.

              2) For using IQL with DBMS data  bases,  one  of  the
              passwords  furnished  in the AUTHORITY statement must
              correspond to the Privacy Key for Compile in the DBMS
              schema.

              3) You may furnish up to 10 passwords in an AUTHORITY
              statement.   The  order  in  which  the passwords are
              furnished does not matter.

              4) If you have used the exclusivity  option  in  your
              dictionary  to protect a specific data item, you must
              furnish  the  exact  password   in   your   AUTHORITY
              statement in order to use that item.

              5) If you have not used exclusivity in protecting  an
              item,  or  for  file  level  protection, the use of a
              particular password  unlocks  all  file  accesses  or
              non-exclusive  items protected at the same or a lower
              level (password number).


EXAMPLES:     Assume dictionary  PERSONNEL  is  read  protected  by
              password BEAR at level 10, and item SALARY is further
              protected by exclusive password TIGER at level 50:

              OPEN PERSONNEL.     
              AUTHORITY BEAR.       (required to access any item)
              PRINT NAME, DEPT.

              OPEN PERSONNEL.
              AUTHORITY TIGER.          (required to access SALARY;
              PRINT NAME, SALARY, DEPT.  also unlocks for reading) 

**AVERAGE


FUNCTION:     AVERAGE averages a numeric item (a)  over  an  entire
              report  or (b) within a specific value of one or more
              controlling items (breaks).
FORMAT:       AVERAGE item [BY item ] [ ( = variable )]
                      ---<---


DEFAULTS:     If you do not specify  otherwise  (see  below),  each
              AVERAGE   statement  both  calculates  the  specified
              average and prints it out.


DISCUSSION:   1)  AVERAGE  performs  two  functions:    first,   it
              calculates  the correct average and second, it prints
              the average at the proper time.

              2) AVERAGE is a stand alone  statement;   it  is  not
              necessary  for  you to use TOTAL or TALLY in order to
              use AVERAGE.

              3) If you do not specify a break item ( ie,  BY  item
              ),  the  average is calculated over all records which
              pass through the AVERAGE statement.

              4) If you  specify  a  break  item,  the  average  is
              calculated  and printed when IQL sees a change in the
              indicated item.  

              5) You may specify more than one break item  as  long
              as each is minor to one preceeding it.  An average is
              calculated for each such break item.  When  a  change
              in any break item occurs, a change is assumed to have
              occurred in each break item to the right of it in the
              AVERAGE statement.  The purpose of this is to prevent
              inadvertent overlap of minor break items  over  major
              ones.   For instance if we were averaging grade point
              average  for  each  sex  in  each   school   and   we
              encountered  an  all-girls school, AVERAGE GPA BY SEX
              would give a misleading answer while AVERAGE  GPA  BY
              SCHOOL, SEX.  would give the correct one.

DISCUSSION (continued):

              6) Since averaging is an  arithmetic  operation,  the
              item  you  average  must  be  numeric.   However  the
              item(s) controlling the break may be any type.

              7) When AVERAGE prints, it  constructs  a  line  with
              explanatory  text  on the left and the average on the
              right.  For break averages the text is made up of the
              top  and bottom dictionary titles for the break item,
              the value of the  break  item,  the  top  and  bottom
              titles  for  the  averaged item, and the word 'AVG:'.
              See the examples below.

              8) You may override  the  automatic  printing  of  an
              average  by  using the statement SUMPRINT OFF in your
              query.  If you wish to turn on automatic printing  of
              the  average  (or any summary operation) use SUMPRINT
              ON as appropriate.  If you do turn automatic printing
              of  AVERAGE  off,  you  must  do your own printing as
              described in the next paragraph.

              8) You may give a name to the average 'bucket' itself
              by  using  the form ( = variable ) at the end of your
              AVERAGE statement.  The variable name must start with
              either  'X'  or 'ZZ'.  From this point on you may use
              the variable just  like  any  other  item,  including
              using  it  in  computations.   One  such  usage is to
              calculate percentages at the end of a query.  Another
              is  so that you may print the average in a print line
              with  other  data,  often  for   printing   summaries
              directly under details.




EXAMPLES:     (a) HEADING 'ORGANIZATIONAL BUDGETS'.
                  OPEN BUDGET-FILE.
                  AVERAGE BUDGET BY DIV, DEPT.
                  AVERAGE BUDGET.

              might give:

              HOME DEPT 421 ANNUAL BUDGET AVERAGE:    23,921.46
              HOME DEPT 427 ANNUAL BUDGET AVERAGE:    37,446.00
              HOME DEPT 433 ANNUAL BUDGET AVERAGE:    12,777.50
              HOME DIV 110 ANNUAL BUDGET AVERAGE:     24,714.82

EXAMPLES (continued):


(b)  HEADING 'PRINTING AVERAGES UNDER DETAIL'.
     SUMPRINT OFF.
     OPEN LABOR-DETAIL.
     IF NEWGROUP OF DIV PRINT XACTUAL XLASTYR XCURR.
     AVERAGE ACTUAL-HRS BY DIV ( = XACTUAL ).
     AVERAGE LASTYR-HRS BY DIV ( = XLASTYR ).
     AVERAGE CURR-HRS BY DIV ( = XCURR ).
     PRINT ACTUAL-HRS LASTYR-HRS CURR-HRS.

**CALL


FUNCTION:     Calls user's own-code program.

FORMAT:       CALL user-program [argument]
                                 ---<----


DISCUSSION:   ==MORE TO BE WRITTEN==

**COMPUTE


FUNCTION:     Computes a new value for a numeric item.
FORMAT:       COMPUTE item = [(] item [)]
                    --<----  constant  --<----
                             [+]
                             [-]
                             [*]
                             []
                    --------------<-----------


DISCUSSION:   1) The item whose value is computed,  and  all  items
              used in COMPUTE, must be numeric.

              2) The  computation  follows  the  normal  inside-out
              algebraic rules pertaining to parentheses.

              3) If no parentheses are used, or within parentheses,
              multiplies  and  divides are done left to right, then
              adds and subtracts are done left to right.

              4) Constants may have a leading sign and may  contain
              imbedded  decimal  points.  For integer constants you
              should leave off the decimal point or imbed  it  (ie,
              write  475  or  475.0  rather than 475.) to avoid any
              possible confusion between  a  decimal  point  and  a
              period ending a statement.

              5) Intermediate computation results  are  carried  to
              thirteen (13) integer and five (5) decimal places.

              6) If a computation overflows (the integer part  gets
              too  big)  IQL  prints and displays an error message,
              truncates the integer, and continues.

              7) Decimal places past the fifth are rounded back  to
              the fifth at each step of a computation.

              8) You must leave at least one space on  either  side
              of  a  parenthesis or arithmetic operator, ie for the
              characters ( ) + - *.  This  is  to  avoid  confusion
              between operators and these characters in item names.

EXAMPLES:     (a)  HEADING "HIGH VOLUME//STORES".
                   OPEN STORES.
                   COMPUTE XRATIO = SALES / SQ-FT.
                   IF XRATIO GR 4.99 SORT BY DESCENDING SALES.
                   PRINT STORE-NAME, MANAGER, SALES, SQ-FT.



              (b)  HEADING 'SALES BONUSES'.
                   OPEN SALESMEN.
                   COMPUTE BONUS =
                   ( WKLY-SAL * 52 ) * ( SALES - QUOTA ) / QUOTA.
                   IF BONUS LS 0 COMPUTE BONUS = 0.
                   AVERAGE BONUS.  TOTAL BONUS.
                   PRINT SALESMAN, QUOTA, SALES, BONUS.

**COPY


FUNCTION:     Copies the current record from the primary  file  out
              to a new file.


FORMAT:       COPY [RECORD] [TO "filename"] 


DISCUSSION:   1) The copied file is always the same mode (6-bit  or
              ASCII)  as  the  primary  input file.  If the primary
              input file is a DBMS data base, the  copy  output  is
              ASCII.

              2) COPY may be used after one or more SORT statements
              have  been  used.   in  this  case,  the order of the
              copied file is not the same  as  the  original  input
              file but is the order after the most recent sort.

              3) If you have changed the  value  of  items  in  the
              current  record  (via  SET,  RESET  or  COMPUTE), the
              copied record contains these  changed  values.   This
              feature  is  useful  for making systematic changes in
              files.

              4) If you use COPY under control of  IF,  only  those
              records   where   the  relationship  in  the  IF  was
              satisfied are copied out.

              5) Unless you furnish the  correct  password(s),  IQL
              does  not permit you to copy records when the primary
              input file is protected at either the  read  or  copy
              level.

              6) The copied file can  be  queried  using  the  same
              dictionary which you used to query the original file.
              Be sure to furnish the new  file  name  in  the  OPEN
              statement  so  you  query  the  copied  and  not  the
              original file.

              7) If you do not use the filename option,  IQL  gives
              the  file the same name as the primary input file and
              adds the extension ".OUT".  The file  is  written  on
              device DSK.

              8) If you use the filename option  but  the  filename
              does  not  contain  a  device, IQL uses the furnished
              filename and writes out the  copied  file  on  device
              DSK.

              9) If you use the filename option and  do  furnish  a
              device,  IQL  writes out the file under the furnished
              name and on the specified device.

              10) IQL always writes output files in the same PPN in
              which the job is being run.

              11) If a file already exists which has the same  name
              as  the  one IQL is to write, IQL writes over the old
              file.
EXAMPLES:     (used in a complete query):

              OPEN ACCOUNTS.  IF VENDOR-NO = 100  SET  SALESMAN  TO
              'JONES'.  COPY TO "ACCTS.SEQ".
              OPEN ACCOUNTS.  IF BALANCE GR 999  SORT  ACCOUNTS  BY
              BALANCE.  COPY RECORD.

**CREATE


FUNCTION:     Writes out a file whose records contain only specific
              items  and are formatted as specified in the 'CREATE'
              statement itself.  CREATE records may contain  record
              or  data  items for any input file as well as working
              items or filler positions.  
FORMAT:       CREATE [filename] [=] item
literal
FILLER = integer
--------<----------


DISCUSSION:   1) The record created is formatted from left to right
              by  putting  the item value side by side in the order
              named in your  CREATE  statement.   Numeric  variable
              values  are  written  as numeric (not binary) with 13
              integer and  5  decimal  places.   Binary  items  are
              converted  to numeric before being put in the created
              record.

              2) Created files are always written in ASCII mode.

              3) If you do not  use  the  filename  option,  CREATE
              writes  the  created file out on device DSK under the
              name CREATE.OUT.

              4) If you use the filename option but do not  furnish
              a  device,  CREATE  uses  the  furnished filename and
              writes the file out on device DSK.

              5) If you use the filename option and  do  furnish  a
              device,   CREATE   writes  out  the  file  under  the
              furnished filename and on the specified device.

              6) IQL always writes output files in the same PPN  in
              which the job is being run.

              7) If a file already exists with the same filename as
              the  one  CREATE  is to write, it writes over the old
              file.
EXAMPLE:      HEADING   'HIGH   VALUE//INVENTORY   ITEM//ANALYSIS'.
TITLES  X = 'ITEM//VALUE'.  PICTURE X = '$$$,$$$.99' OPEN INVENTORY
PRICES.  FIND PRICE-PARTNO = INVENTORY-PARTNO.   IF  PRICE  GR  100
COMPUTE    X    =    PRICE    *    QTY    CREATE    'COST.SEQ'    =
PARTNO,PRICE,QTY,FILLER=5,'VALUE',X PRINT PARTNO, PRICE, QTY, X.

**DATE


FUNCTION:     (a) Turns report dating on or off;  or (b) Gives your
              report  a  specific  date  value  to  print  in  page
              headings.
FORMAT:       DATE [ON]
       [OFF]
       constant
       literal
       item


DEFAULTS:     If you do not use DATE in your query,  report  dating
              is automatically turned on - IQL puts the date of the
              run in report headings.


DISCUSSION:   1) You may turn report dating on or  off,  or  change
              the value of the report date, at any point.

              2) If you use DATE OFF, IQL does not put anything  at
              the top left of the page heading.

              3) If you use DATE ON, report dating is turned on and
              IQL  puts  the  date  the  report  is  run, formatted
              MM/DD/YY, at the top left of each page heading.

              4) If you furnish a value in DATE, report  dating  is
              turned on and the value is printed at the top left of
              the page heading.  The value may  be  a  constant,  a
              literal,  or  an item value.  If it is a constant, it
              must contain  six  digits  and  it  is  printed  with
              slashes inserted after the 2nd and 4th digits.  If it
              is a literal, it is printed exactly as furnished.  If
              it  is an item value, it is edited per the picture in
              the dictionary entry for that item.

              5) RPTDATE is a synonym for DATE.  It is carried over
              from previous versions of IQL.  Use DATE.
EXAMPLES (individual commands):

DATE ON DATE OFF DATE 060377 (prints  as  06/03/77)  DATE  '3  JUNE
1977' (prints as 3 JUNE 1977)



**DISPLAY


FUNCTION:     (a) Allows you to display messages or reports on your
              terminal  while  the  query  is running, or (b) Turns
              automatic terminal display of reports on or off.


FORMAT:       (a) DISPLAY item literal integer
-----<------


(b) DISPLAY [ON] [OFF]


DEFAULTS:     If you do not use DISPLAY ON or DISPLAY OFF  in  your
              query, IQL turns display mode on.


DISCUSSION:   1) Lines created by DISPLAY go only to your terminal.
              They   are  single  spaced.   No  column  titles  are
              displayed.

              2) Item values are laid out in your display line from
              left   to   right  as  they  occur  in  your  DISPLAY
              statement.  Unless you specify otherwise as described
              below,  three  spaces  are  left horizontally between
              item values.

              3) If you use an integer in your  display  statement,
              that many spaces are left between item values for the
              rest of the display  line  or  until  IQL  encounters
              another  such  spacing integer.  The use of a spacing
              integer overrides any other horizontal spacing.

              4) If you have not used a  spacing  integer  and  use
              HSPACE  in  your  query,  IQL  leaves  as many spaces
              between items as you specify in the HSPACE statement.

              5) Before being put in the display line, item  values
              are edited according to the picture in the dictionary
              (or any override picture you furnish).

              6) Generally DISPLAY is used  for  short  prompts  or
              progress report messages.  To put out reports on your
              terminal, use  PRINT;   it  has  much  more  powerful
              built-in formatting capability.

EXAMPLE:      DISPLAY 'ENTER CUT OFF TIME'. 
              ACCEPT XTIME.
              OPEN RACE-RESULTS.
              IF RACE-TIME LEQ XTIME TALLY XRACER-NAME.
              IF XTALLY GEQ 100
                   DISPLAY 'TOO MANY BEAT THIS TIME; LOWER LIMIT'
                   GO TO XT.
              GO TO NR.

**FIND(ITEM)
                                            (for subordinate files)


FUNCTION:     Does a sequential read of  a  secondary  (either  the
              second  or  third named file in the 'OPEN' statement)
              file.  Permits you to position this file on either  a
              specific value or the value of some other data item.


FORMAT:       FIND data-item = item [FROM BEGINNING]
                               literal
                               NEXT


DEFAULTS:     If you do not use FROM BEGINNING, IQL starts  reading
              from the current position of the file;  ie, the first
              record read is the next after the current record.


DISCUSSION:  1) You may use FIND item on either sequential or  ISAM
              files.   For  the latter it is useful for positioning
              on other than the key item.

              2) The item named on the left of the = tells IQL wich
              file it is to read.  This item name must be unique to
              the dictionary describing that file.  If  it  is  not
              unique,  make  it  so  by  prefixing  the name of the
              dictionary and a dash (ie:  SSNO in PERSONNEL is  the
              same as PERSONNEL-SSNO).

              3) IQL searches the file until  it  either  satisfies
              the  =  relationship or hits the end of the file.  If
              it hits the end of the file, it returns an all spaces
              record and continues.

              4) You may test to see if you are at  the  end  of  a
              file  by  using  IF  EOFn.  See the discussion in the
              section describing IF.
EXAMPLES:     OPEN  PAYROLL,  PERSONNEL.   FIND  PERSONNEL-SSNO   =
              PAYROLL-SSNO.  PRINT NAME, SSNO, WITHHOLDING-RATE.

              In the above example, the social security  number  is
              called   SSNO  in  both  the  PAYROLL  and  PERSONNEL
              dictionaries.  In the FIND statement it is  necessary
              to  qualify them.  In the PRINT statement, we can use
              SSNO since by that time they are the same.

**FIND(KEY)
                                                   (for ISAM files)


FUNCTION:     Reads ISAM (Indexed Sequential Access  Method)  files
              randomly  based on either the value of a data item or
              one or more specific key values.  Permits reading  on
              either full or partial keys.
FORMAT:       (a) FIND KEY =  literal  KEYn  literal  THRU  literal
literal THRU EOF -------------<--------------

(b) FIND KEY = item KEYn


DISCUSSION:   1) If you do not use FIND KEY and you are  processing
              an  ISAM  file, IQL reads the ISAM file sequentially.
              This is useful for searches on items  which  are  not
              key items.

              2) If you use FIND KEY = literal, IQL  goes  directly
              to  the record which has that value of the literal as
              the full or partial (leading portion) key.  It  gives
              an  end  of  file  response  if  it does not find the
              record.

              3) If you use  a  range  of  literals  (literal  THRU
              literal  or  literal  THRU  EOF), IQL starts with the
              first record whose key is in the range, and each time
              it executes the FIND command it reads the next record
              in the  range.   If  you  use  several  such  literal
              ranges,  when  it  exhausts  one range it goes to the
              first record in the next.  The end-of-file  condition
              occurs  only when the last range is exhausted.  It is
              not necessary that the  ranges  be  in  any  specific
              order of key.

              4) If you use FIND KEY = item, IQL looks for a record
              which  has  as a key the value of the indicated item.
              If it does not find such a record, it returns an  all
              spaces record and continues.

              5) To read your primary file, use the form  FIND  KEY
              or  FIND KEY1.  To read your secondary file, use FIND
              KEY2, and to read your tertiary file, use FIND KEY3.


**FIND(DBMS)
                                              (for DBMS data bases)


FUNCTION:     Reads DBMS data bases.
FORMAT:       (a) FIND recordname USING item

(b) FIND NEXT recordname RECORD OF setname SET PRIOR areaname  AREA
FIRST LAST

(c) FIND OWNER RECORD OF setname SET

(d) FIND recordname RECORD


DISCUSSION:   1) The FIND format shown above is the same format  as
              DBMS FIND statements in COBOL.

              2) No GET is necessary;  IQL treats  FIND  as  if  it
              were both FIND and GET.

              3) If IQL cannot find a  record,  or  encounters  any
              other  data base error, it returns an error status in
              the special item ERROR-STATUS and the error count  in
              special  item ERROR-COUNT.  You may test ERROR-STATUS
              and ERROR-COUNT for specific values.  Please refer to
              your   DBMS   manual   for   the   meaning  of  these
              error/status codes.   For  convenience  of  reference
              here:   307 means 'end of area' and 326 means 'record
              not  found'.   Often  you  will  end  your  query  on
              receiving Error-status 307:

                 IF ERROR-STATUS = 307 GO TO XT.

              4) If you are  using  FIND  FIRST  or  FIND  NEXT  be
              careful to not put IQL into an unending loop.

              5) You may suppress currency updates for ALL, RECORD,
              AREA  or SET by appending a Suppression Clause to the
              FIND  formats  described  above.   The  format  of  a
              Suppression Clause is:

                  SUPPRESS ALL    CURRENCY UPDATES
                           RECORD
                           AREA
                           SET

EXAMPLES:

              HEADING 'BRANCH//SORTED'.
              OPEN MASTER.
              IF FIRSTIME FIND FIRST BRANCH RECORD OF AREA1 AREA
                  ELSE FIND NEXT BRANCH RECORD OF AREA1 AREA.
              IF ERROR-STATUS = 307 GO TO XT.
              IF ERROR-STATUS NEQ 0 GO TO QT.
              SORT MASTER BY BRANCH-NUMBER.
              PRINT BRANCH-NUMBER, BRANCH-NAME.


              The  above  example  prints  out,  in  branch  number
              sequence, all the branch names and their numbers.

**FORM-LINES


FUNCTION:     Specifies  the   number   of   printed   lines   from
              perforation  to  perforation of your paper.  IQL uses
              this count to position at the top of  the  each  page
              when output is on a terminal.


FORMAT:       FORM-LINES integer


DEFAULTS:     If you do not use FORM-LINES in your query, IQL  uses
              a  count  of 66 printed lines from one perforation to
              the next.


DISCUSSION:   1) The companion to FORM-LINES is PAGE-LINES.

              2) If the constant in FORM-LINES  is  less  than  the
              current setting of PAGE-LINES, IQL accepts the change
              but also resets PAGE-LINES down to the new  value  of
              FORM-LINES.   In  other  words,  the  system does not
              permit more lines per page than lines per form.

              3) FORM-LINES and PAGE-LINES are useful when you  are
              preparing  reports on a terminal or a printer and the
              paper is other than standard size.


EXAMPLE:      FORM-LINES 44.  PAGE-LINES 36.  OPEN  MASTER.   PRINT
TITLE, PURPOSE, AMOUNT.

This query produces reports that have four blank lines at  the  top
of  the  page,  the  report  body  formatted with 36 lines per page
(including headings and column titles), and four blank lines at the
bottom of the page.

**GO TO


FUNCTION:     Sends control to (a) a designated statement,  (b)  to
              read the next record, (c) end the query stage, or (d)
              end the query run.
FORMAT:       GO TO NR XT QT integer


DISCUSSION:   1) if you use GO TO NR, IQL goes immediately  to  the
              statement  just  after  the OPEN or SORT which begins
              the current stage of the query.  Unless you are doing
              your  own reading of a data base or an ISAM file, IQL
              does a sequential read of  the  next  record  of  the
              primary file at this point.

              2) If you use GO TO XT, IQL closes  out  the  current
              stage  of  the query, closes any open files, wraps up
              any in-progress summary statements and  goes  to  the
              next  stage of the query.  If there is no next stage,
              IQL goes back up to Assistance mode.  Do not  use  GO
              TO  XT  to  get  from  one  report  to  the next in a
              multiple report query;   use  GO  TO  integer,  where
              integer  is  the  next  REPORT  statement.   See  the
              examples below.

              3) If you use GO TO QT, IQL closes  any  open  files,
              wraps  up any in-progress summary statements and goes
              back up to  Assistance  mode  regardless  of  whether
              there  is another stage to the query.  The purpose of
              GO TO QT is to let you terminate a multi-stage  query
              at any point.

              4) If you use GO TO integer, the integer  must  be  a
              statement number used elsewhere in this stage of your
              query.  This form of GO  TO  is  useful  for  routing
              control in a query.  Be sure you do not route control
              out  of  the  current   stage;    the   results   are
              unpredictable.

              5) Each query acts as if it had GO  TO  NR.   as  the
              last statement in each stage;  it is not necessary to
              write it.

EXAMPLES:       OPEN ACCOUNTS-RECEIVABLE.
                IF STATUS NOT EQ 'A' GO TO NR.
                IF AMT LS 1000 GO TO NR.
                TALLY ACCT ( = X ).
                IF X GEQ 500 PRINT 'TOO MANY; KICK TEST AMOUNT'
                GO TO QT.
                SORT BY DESCENDING AMT, ACCOUNT.
                REPORT 1.
                IF ZIP LEQ 50000 GO TO 10.
                HEADING 'WESTERN HIGH BALANCE ACCTS RECEIVABLE'
                   '//ATTN: PHYLLIS CHAMBLISS'.
                PRINT ACCT, AMT, VENDOR, CREDIT, DATE.
              10REPORT 2.
                HEADING 'EASTERN HIGH BALANCE ACCTS RECEIVABLE'
                   '//ATTN: JOSEPH LEGUIN'.
                PRINT ACCT, AMT, VENDOR, CREDIT, DATE.
                SORT BY STATE, DESCENDING AMT.
                HEADING 'HIGH ACCTS RECEIVABLE BY STATE'.
                PRINT STATE, ACCOUNT, AMNT.

**HEADING


FUNCTION:     (a) turns automatic page headings on or off,  or  (b)
              furnishes specific text for page headings.
FORMAT:       (a) HEADING ON OFF

(b) HEADING literal item integer ------<------


defaults:     If you do not use HEADING in your query, headings are
              automatically  turned  on and the heading text in the
              center is blank.


DISCUSSION:   1) You may turn headings on or off at any  point  and
              as often as necessary.

              2) If  you  have  turned  headings  off,  IQL  starts
              printing the body of the report as soon as it goes to
              a new page.

              3) If headings are turned on, when IQL goes to a  new
              page  it  prints a page heading which consists of the
              report date on the top left, a page number on the top
              right and one or more lines of report heading text in
              the center.  You may turn off or set any  or  all  of
              these ingredients of the page heading.

              4), If you use form (b), headings are turned on.

              5) The text in form (b) is exactly the same as for  a
              print  line  with  the  exception  that if IQL sees a
              double slash (//) in a literal it starts a new  line.
              Note  that  since  you  may use items in the heading,
              part or all of the heading may come from the  current
              record or variable values.

              6) Each line of heading text is centered at  the  top
              of  each  page.   The "center" is halfway between the
              current left and right margins.

              7) If you are creating only  one  report,  the  query
              will  run  faster  if  you put your HEADING statement
              before your OPEN statement so  that  it  is  executed
              only once.

              8) Headings, once set,  stay  set  until  you  change
              them.

              9) 'RESUMEHEADING' is a synonym for 'HEADING ON'  and
              'NOHEADING'  is  a  synonym for 'HEADING OFF'.  These
              formats are carried over  from  earlier  releases  of
              IQL.   HEADING ON and HEADING OFF are the recommended
              formats.  The older formats may not be  supported  in
              future versions of IQL.

              10) Also see:  NEWPAGE, PAGING.
EXAMPLES      (used in a query):

HEADING OFF OPEN ACCOUNTS IF FIRSTIME PRINT 'THIS IS MY OWN  CUSTOM
HEADING' PRINT ACCOUNT, BUYER, BALANCE.



HEADING "ACCOUNTS//PAYABLE//SUMMARY BY DEPT", DEPT.  OPEN PAYABLES.
SORT  BY  DEPT,  PO-DATE.   IF  NEWGROUP  OF  DEPT  NEWPAGE.  PRINT
PO-DATE, VENDOR, APPROVAL, AMOUNT.

**HOLD


FUNCTION:     Holds the value of  each  named  item  in  a  special
              holding area so you may retrieve it at any time.  
FORMAT:       HOLD item ---<---


DISCUSSION:   1) You may HOLD any numeric or alpha item as well  as
              numeric or alpha variables.

              2) To refer to a held item, prefix the item name with
              HELD-.  For instance:  HOLD NAME...  PRINT HELD-NAME.

              3) A held value stays  intact  until  you  hold  that
              specific item again.

              4) The initial value of a held item is blank  for  an
              alpha item and zero for a numeric item.


EXAMPLES:     HEADING "DUPLICATED NAMES".
              OPEN CLIENT-FILE.
              SORT BY NAME.
              IF NAME = HELD-NAME PRINT NAME.
              HOLD NAME.



              HEADING "BLIZZARD//DAMAGE//BY CITY".
              SUMPRINT OFF.
              OPEN DAMAGE-REPORTS.
              SORT BY CITY.
              IF NEWGROUP OF CITY PRINT HELD-CITY, X.
              TOTAL DAMAGE BY CITY ( = X ).
              HOLD CITY.

**HSPACE


FUNCTION:     Sets the default horizontal  spacing  increment  that
              IQL  uses  between  items  when setting up a print or
              display line.


FORMAT:       HSPACE integer


DEFAULTS:     If you do not use HSPACE  in  your  query,  IQL  puts
              three  spaces  between  items  in  a print or display
              line.


DISCUSSION:   1) You may  use  HSPACE  anywhere  and  as  often  as
              necessary.

              2) If you use specific horizontal spacing in a  PRINT
              statement  it  overrides  the current HSPACE setting.
              The latter remains unchanged.

              3) If you change HSPACE in one report of  a  multiple
              report query, that setting carries from one report to
              the next, unless you change it.

              4) If you are only using one HSPACE for all  reports,
              put  the  HSPACE  statement  before the OPEN so it is
              executed only once.  The query will run faster.


EXAMPLES:     HSPACE 5.
              LMARGIN 15.
              OPEN PUBLICATIONS.
              PRINT LIB-CONGRESS-NO, AUTHOR, TITLE.



              OPEN PUBLICATIONS.
              REPORT 1.
              HSPACE 3.        (to reset from next report)
              PRINT AUTHOR, TITLE.
              REPORT 2.
              HSPACE 10.
              IF CAT = 'REF' PRINT PUB-DATE,TITLE,PUBLISHER.

**IF


FUNCTION:     Specifies a condition for IQL to test.  Depending  on
              whether  the condition is satisfied or not, the query
              statements which follow are carried out.  Control  of
              the IF ends when IQL encounters a period.  


FORMAT:       IF item   [NOT]  relation  item      AND .. [ELSE ..]
                 constant                constant  OR
                 literal                 literal
                ----------------<---------------------

              IF    FIRSTIME  .. [ELSE  ..]
                    LASTIME
                    BOF1
                    BOF2
                    BOF3
                    EOF1
                    EOF2
                    EOF3


DISCUSSION:   1)  Relationships  may  be  written  in  any  of  the
              following ways:

              relation              ________
              equal                     EQ   EQUALS  =   IS
              not equal                 NQ   NE      <>  NEQ     
              less than                 LS   LT      <   LESS
               greater than             GR   GT      >   GREATER
              less than or equal to     LEQ  LE      <=  LQ
              greater than or equal to  GEQ  GE      >=  GQ

              2)  Note  that  you  may  use  NOT   to   reverse   a
              relationship.   For  instance:  NOT EQ is the same as
              NE;  and NOT LEQ is the same as GR.

              3) You may combine simple  relationships  to  make  a
              complex  relationship by joining them with AND or OR.
              You  may   use   parentheses   to   clarify   complex
              relationships.   Within  parenthese, or if you do not
              use parentheses, all OR's are  evaluated  before  any
              AND's.

              4) If you use ELSE, the statements which  follow  are
              carried out only if the condition is not satisfied.

              5) If you are  comparing  two  numbers,  the  decimal
              points  are  lined  up  and  any necessary leading or
              trailing zeroes are supplied before the comparison is
              made.

              6) If you are comparing two alpha items or  literals,
              any  necessary  trailing  spaces  are  added  to  the
              shorter item before the comparison is made.


EXAMPLES:     (a) cutting off a query:

                  HEADING "SALES DETAIL".
                  OPEN SALES.
                  PRINT PO-NO,ACCOUNT.,LINE,ITEM,QTY,AMOUNT.
                  COMPUTE X = X + 1. IF X GEQ 50 GO TO XT.


              (b) comparing against a held item; exception report:

                  HEADING 'DUPLICATES IN INVENTORY FILE'.
                  OPEN INVENTORY.
                  SORT BY PART-NO.
                  IF FIRSTIME HOLD PART-NO GO TO NR.
                  IF PART-NO EQ HELD-PART-NO
                      PRINT PART-NO GO TO NR.
                  HOLD PART-NO.


              (c) using ANDs and ORs:

                  HEADING 'CANDIDATES FOR EXECUTIVE BOARD'.
                  OPEN PERSONNEL.
                  IF JOB = 'EXC' OR JOB EQ 'MGR' GO TO 10.
                  IF SALARY-CLASS GEQ 7 AND YR-HR LEQ 68 GO TO 10.
                  GO TO NR.
                10 PRINT NAME,JOB,DIV,DEPT,SALARY-CLASS,YR-HR.


              (d) using parentheses and ELSE:

                  HEADING "REGION 9 SPECIAL ATTENTION ACCOUNTS".
                  OPEN ACCOUNTS.
                  IF ( LASTYR GEQ 50000 OR THISYR GEQ 25000 OR
                     ( RATING = "A" AND PROJECTION GEQ 50000 ) )
              AND
                     ( STATE EQ "CA", "OR", "WA", "UT" )
                     PRINT CUSTNAME,STATE,LASTYR,THISYR
                     TOTAL LASTYR-SALES
                     ELSE TALLY CUSTNAME.

**LMARGIN


FUNCTION:     Sets the left margin for printing reports.


FORMAT:       LMARGIN integer


DEFAULTS:     If you do not use LMARGIN in your query, IQL  uses  a
              left margin of 1.


DISCUSSION:   1) You may use LMARGIN any place in your  query,  and
              as often as necessary.

              2) LMARGIN settings are  carried  from  one  multiple
              report  to  the next unless you use LMARGIN to change
              them.

              3) LMARGIN affects all of:   page  headings,  summary
              lines and detail print lines.
EXAMPLES:     (a)  LMARGIN  15.   HEADING  'MEMBER  EXTRACT'   OPEN
              MEMBER-FILE.   IF  SUBSCRIPTION  GEQ 1000 PRINT NAME,
              DATE, SUBSCRIPTION.


              (b) OPEN SALES.  SORT BY STATE.  REPORT  1.   HEADING
              'SALES  DETAIL'.   LMARGIN  1.   (to  reset  from 2nd
              report)  PRINT  ACCT,  SALESMAN,  GROSS,  PROJECTION.
              TOTAL  GROSS.   TOTAL PROJECTION.  REPORT 2.  HEADING
              'HIGH VOLUME//SUMMARY'.  LMARGIN 10.   IF  GROSS  GEQ
              10000 TALLY ACCOUNT BY STATE TOTAL GROSS BY STATE.

**MAXIMUM


FUNCTION:     Calculates the maximum value of a  numeric  item  (a)
              over  an entire report or (b) within a specific value
              of one or more controlling items (breaks).
FORMAT:       MAXIMUM item [BY item ] [ ( = variable ) ] ---<--


DEFAULTS:     If you  do  not  specify  otherwise  in  your  query,
              MAXIMUM  both  calculates  the  requested maximum and
              prints the result at the proper time.


DISCUSSION:   1)  MAXIMUM  performs  two  functions:    first,   it
              calculates  the correct maximum, and second it prints
              the maximum in your report at the proper time.

              2) MAXIMUM is a stand-alone  statement.   It  is  not
              necessary that you use any other summary statement to
              use MAXIMUM.

              3) If you do not specify a break item (ie, BY  item),
              the  maximum is calculated overall records which pass
              through the MAXIMUM statement.

              4) If you  specify  a  break  item,  the  maximum  is
              calculated and printed on the change in the indicated
              item.  If you  specify  more  than  one  break  item,
              MAXIMUM breaks on a change in any of the break items.

              5) Since taking a maximum is an arithmetic operation,
              the  item  you  get  the  maximum of must be numeric.
              However, the item controlling the break  may  be  any
              type.

              6) When MAXIMUM prints, it  constructs  a  line  with
              explanatory  text  on the left and the maximum on the
              right.  The explanatory text is made up  of  the  top
              and  bottom dictionary titles for the break item, the
              value of that item before  the  break,  the  top  and
              bottom  titles  for  the  item whose maximum is being
              taken, and 'MAX:'.  For overall maximums, the  titles
              and  value  for  the  break  item  are  replaced with
              'OVERALL'.

DISCUSSION (continued):

              7) You may override the  automatic  printing  of  the
              maximum  by using SUMPRINT OFF in your query.  If you
              wish to turn automatic printing of the  maximum  back
              on  use  SUMPRINT  ON as appropriate.  If you do turn
              summary printing off, you must do your  own  printing
              as described in 8 below.

              8) You may give a name to the maximum  bucket  itself
              by  using  the  for ( = variable ) at the end of your
              maximum statement.  The variable name must start with
              'X'  or  'ZZ'.   From  this  point on you may use the
              variable just like any other item.  The most frequent
              use  of  giving  a name to a maximum bucket is so you
              may use it in a print line with  other  items,  often
              for printing summaries under detail.

EXAMPLES:     OPEN PAYROLL.  SORT BY JOB-CLASS.  MAXIMUM SALARY  BY
              JOB-CLASS.  MAXIMUM SALARY.



              OPEN TEAM-SCORES.  MINIMUM SCORE ( = XMIN ).  MAXIMUM
              SCORE ( = XMAX ).  IF LASTTIME COMPUTE XPCT = 100 * (
              XMAX - XMIN ) / XMIN PRINT 'MAX:MIN PCT ' XPCT.

**MINIMUM


FUNCTION:     Calculates the minimum value of a  numeric  item  (a)
              over  an entire report or (b) within a specific value
              of one or more controlling items (breaks).
FORMAT:       MINIMUM item [BY item ] [ ( = variable ) ] ---<--


DISCUSSION:   1)  MINIMUM  performs  two  functions:    first,   it
              calculates  the  requested  minimum  and  second,  it
              prints the minimum in your report at the proper time.

              2) MINIMUM is a  stand-aone  statement;   it  is  not
              necessary for you to use another summary statement in
              order to use MINIMUM.

              3) If you do not specify a break item ( ie,  BY  item
              ),  the  minimum is calculated over all records which
              pass through the MINIMUM statement.

              4) If you  specify  a  break  item,  the  minimum  is
              calculated and printed on the change in the indicated
              item.  If you  specify  more  than  one  break  item,
              MINIMUM breaks on a change in any of the break items.

              5) Since taking a minimum is an arithmetic operation,
              the  item  you  take  the minimum of must be numeric.
              However the break item may be any type.

              6) When MINIMUM prints, it  constructs  a  line  with
              explanatory  text  on the left and the minimum on the
              right.  For break minimums, the explanatory  text  is
              made  up  of the top and bottom dictionary titles for
              the break item, the value before the break,  the  top
              and bottom titles for the item whose minimum is being
              taken, and the word 'MIN:'.  For non-break  minimums,
              the  break  item  titles  and  value  are replaced by
              'OVERALL'.

DISCUSSION (continued):

              7) You may override the  automatic  printing  of  the
              minimum by using SUMPRINT OFF in your query.  To turn
              automatic  printing  back  on,  use  SUMPRINT  ON  as
              appropriate.   If you do turn off automatic printing,
              you must do your  own  printing  as  described  in  8
              below.

              8) You may give a name to the minimum  bucket  itself
              by  using  the form ( = variable ) at the end of your
              MINIMUM statement.  The variable name must start with
              'X'  or  'ZZ'.   From  this  point on you may use the
              variable just like any other item, including using it
              in  computations.   One  frequent  such  use  is  for
              calculating percentages.  Another is so you  may  use
              the  minimum  in a print line with other items, often
              for printing minimums under detail.
EXAMPLES:     OPEN ACCOUNTS.   MINIMUM  BALANCE  BY  ACCOUNT-CLASS.
              TOTAL  BALANCE  BY  ACCOUNT-CLASS.   MINIMUM BALANCE.
              MAXIMUM BALANCE.  TOTAL BALANCE.  AVERAGE BALANCE.



              OPEN  INVENTORY.   MINIMUM  QUANTITY  (  =  ZZQTY  ).
              MINIMUM  VALUE  (  =  ZZVAL  ).  IF NEWGROUP OF CLASS
              PRINT ZZQTY, ZZVAL.  PRINT QUANTITY,VALUE,CLASS.

**NEWPAGE


FUNCTION:     Goes immediately to a new page of the current report.


FORMAT:       NEWPAGE


DISCUSSION:   1) Any time you use NEWPAGE, IQL goes immediately  to
              a new page of the report.  This happens regardless of
              whether paging is on or off.

              2) If you have turned paging off, NEWPAGE goes  to  a
              new page anyway, but it does not turn paging back on.

              3) When IQL pages it  prints  a  page  heading  which
              consists  of  the  report  date on the left, the page
              number on the right, and one or more lines of  report
              heading  prose  in  the  center.  It does this before
              starting to print the body  of  the  report  on  that
              page.   You  may  individually turn off or set any of
              these ingredients of the page heading.

              4) Also see:  HEADING, PAGING
EXAMPLE (used in an IF):

HEADING 'BUDGET SUMMARY BY DEPARTMENT'.  OPEN BUDGET-FILE.  SORT BY
DEPT,  ACCOUNT.   IF NEWGROUP OF DEPT NEWPAGE.  TOTAL BUDGET-AMOUNT
BY ACCOUNT.  TOTAL BUDGET AMOUNT BY DEPT.

**OPEN


FUNCTION:     Tells IQL which dictionaries and which files  to  use
              in this query.


FORMAT:       OPEN   dictionary  ["filename"]
                    ----------<---------------


DEFAULTS:     If you do not furnish a filename in  quotes  after  a
              dictionary  name,  IQL reads from the file whose name
              it finds in the dictionary.


DISCUSSION:   1) Only one OPEN statement may be used  in  a  query.
              There  must  be  an  OPEN  statement  before any SORT
              statements.  

              2) You may use from one to three dictionary names  in
              an  OPEN  statement,  depending on how many files you
              wish to process in the query.

              3) The file described by the first dictionary in  the
              OPEN  statement  is  called the "Primary" file.  This
              file controls this phase of the query.  If  it  is  a
              sequential file, IQL automatically reads it, the read
              coming immediately after the OPEN statement.  If  the
              primary file is an indexed sequential (ISAM) file and
              you do not do  your  own  reading  with  a  FIND  KEY
              statement, IQL automatically reads it sequentially.

              3) If you use more than one dictionary name  in  OPEN
              the   files   described   by  the  second  and  third
              dictionaries are 'subordinate' files.   You  must  do
              your own reading of these files by appropriate use of
              FIND item or FIND KEYn.  Normally  subordinate  files
              are  read  under  control of information you get from
              the Primary file.

              5) When IQL  comes  to  the  last  statement  in  the
              current stage or it encounters a "GO TO NR", IQL goes
              directly to the statement just after the OPEN.  If it
              is  reading sequentially as described above, it reads
              the next record before carrying out the statement.

              6)  Any  statements  which  come  before   the   OPEN
              statement  are carried out only once at the beginning
              of the query and before any records  are  read.   The
              query  runs  faster  if  you  put one-time formatting
              statements here when you  are  not  going  to  change
              formats during the run.

**PAGE


FUNCTION:     Specifies a new  page  number,  overriding  automatic
              page numbering.
FORMAT:       PAGE integer variable item


DEFAULTS:     If you do not use PAGE in your query, IQL starts page
              numbers  at  1  and  automatically increases the page
              number each time it pages.


DISCUSSION:   1) You may use any of:  integer constants,  variables
              or numeric data items on the right of a PAGE command.
              If the quantity  is  not  numeric,  the  results  are
              unpredictable.

**PAGE-LINES


FUNCTION:     Specifies the maximum number  of  printed  lines  you
              wish IQL to put on each page of your report.
FORMAT:       PAGE-LINES integer


defaults:     If you do not use PAGE-LINES in your query, IQL  uses
              a  count  of 58 printed lines as the maximum for each
              page of your report.


DISCUSSION:   1) The companion to PAGE-LINES is FORM-LINES.

              2) The difference between FORM-LINES  and  PAGE-LINES
              is the number of blank lines at the top and bottom of
              each page.

              3) If the constant in PAGE-LINES is greater than  the
              current setting of FORM-LINES, IQL accepts the change
              but also resets FORM-LINES up to  the  new  value  of
              PAGE-LINES.   In  other  words,  the  system does not
              permit more lines per page than lines per form.

              4) FORM-LINES and PAGE-LINES are useful when you  are
              preparing  reports  on  a printer or terminal and the
              pagper is other that standard size.
EXAMPLE:      FORM-LINES 44.  PAGE-LINES 36.  OPEN  MASTER.   PRINT
TITLE, PURPOSE, AMOUNT.

**PAGING


FUNCTION:     Turns automatic report paging on or off.
FORMAT:       PAGING [ON] [OFF]


DEFAULTS:     If you do not use PAGING in  your  query,  paging  is
              automatically turned on - IQL goes to a new page when
              it reaches the bottom of the current page.


DISCUSSION:   1) You may turn paging on or off at any point, and as
              often as necessary.

              2) If you have turned paging off,  IQL  prints  right
              past the perforation (if any) on the paper.

              3) When IQL pages it  prints  a  page  heading  which
              consists  of  the  report  date on the left, the page
              number on the right, and one or more lines of  report
              heading  prose  before it starts to print the body of
              the report.  You may individually turn of or set  any
              or all of these ingredients of the page heading.

              4) If paging is off, then headings are  automatically
              off  also.  If you want a heading at the beginning of
              the run,  use  PAGING  OFF  after  your  first  PRINT
              statement.

              5) 'RESUMEPAGING' is a synonym for  'PAGING  ON'  and
              'NOPAGING'  is  a  synonym  for  'PAGING OFF'.  These
              formats are carried over  from  earlier  releases  of
              IQL.

              6) Also see:  HEADING, NEWPAGE, RPTDATE, RPTHEAD.
EXAMPLES:     (used in a query):

OPEN  ACCOUNTS.   REPORT  1.   PAGING  OFF.    ACROSS   3.    PRINT
ACCOUNT-NAME,3.   PRINT  CITY,1,STATE,ZIP,3.  REPORT 2.  PAGING ON.
HEADING "SUMMARY OF BALANCES BY ZIP".  TOTAL BALANCE BY ZIP.  PRINT
ACCOUNT-NAME, BALANCE.  

**PICTURE


FUNCTION:     Furnishes a picture for one or more  items.   May  be
              used  either  to  override  dictionary pictures or to
              furnish pictures for variables.
FORMAT:       PICTURE item = "picture" ------------<---------


DISCUSSION:   1) You  may  use  PICTURE  anywhere  and  repeatedly.
              However,  usual  usage is to set a picture for a full
              run;  in this case, put the PICTURE statement  before
              your OPEN statement so it is set up only once.

              2) The rules IQL uses for editing are  the  same  for
              pictures in dictionaries and pictures you provide via
              PICTURE.  They are:

                (a)  Pictures  for  alpha  items  may  contain  any
                character.    The   character   "X"   indicates   a
                substitution position - a character from  the  item
                is  substituted  for each X.  Fill in of characters
                from the item value proceeds  left  to  right.   If
                there  are not enough substitution positions in the
                picture, IQL truncates the item;  if there are  too
                many substitution positions, IQL fills in spaces.

                (b) Pictures for numeric items may contain only the
                characters 9 Z $ ( ) .  S or R.  The characters 9 Z
                $  R  designate  substitution   positions;    their
                specific functions are described below.  In editing
                a numeric item, IQL lines  up  the  item  with  the
                decimal  point  (if  any) then substitutes from the
                decimal point outwards.

                (c)  Each  9  is  a  substitution  position  -  the
                corresponding  digit  from the item value is filled
                in.  A 9 stops any  zero  suppression  or  floating
                characters  from  the  left, and a 9 stops rounding
                via R from the right.

                (d) Z may be used only on the left of the  picture.
                Z  positions indicated where zero suppression is to
                be used.  Only a single S or $ may be to  the  left
                of  the  leftmost  Z,  and  only  commas or decimal
                points may be used between Z's.

                ==more to be written==

**PRINT


FUNCTION:     Specifies a print line in a report.
FORMAT:       PRINT item [,] literal integer ------<-------


DEFAULTS:     If you do not specify otherwise,  IQL  turns  titling
              on,  uses  three  spaces  horizontally  between  item
              values and single spaces vertically.


DISCUSSION:   1) Item values are laid out in the  print  line  from
              left to right as they occur in your PRINT statement.

              2) Item values are edited according to their  picture
              in the dictionary (or any override picture you use in
              the query) before being put in the print line.

              3) The integer shown in the  format  paragraph  above
              overrides  standard spacing for this PRINT statement.
              It sets  the  horizontal  spacing  increment  to  the
              integer  value for the rest of the print statement or
              until you use  another  such  spacing  integer.   For
              instance, if you had used HSPACE 2 earlier:

                PRINT  NAME, STREET, 5, PHONE, TITLE, 1, YEAR

              gives two spaces between NAME and STREET, five spaces
              between  STREET  and PHONE, five spaces between PHONE
              and TITLE, and one space between TITLE and YEAR.

              4) If you do not use a spacing integer and use HSPACE
              in  your  query, as many spaces are left between item
              values as you designate with HSPACE.

              5) If your print line  is  too  long  for  the  space
              between  your  current  left  and  right margins, IQL
              truncates the print line on the right and  continues.
              No error message is issued.

              6) If titling is on, IQL prints two lines  of  column
              titles  at  the  top of each new page.  In laying out
              space for each item horizontally, IQL uses the longer
              of the edited item length or the length of the column
              title.   Column  titles  for  alpha  items  are  left
              justified.  Column titles for numeric items are right
              justified.

              7) If titling is on, and the current  print  line  is
              from  a  different PRINT statement than the preceding
              line, IQL prints titles before printing the  body  of
              the current line.

              8) If titling is off, IQL  prints  only  the  current
              line.   In laying out this line, it ignores the title
              lengths.  Note that if you print a line turn  titling
              off,  and  print  the  line  again,  there  may  be a
              difference in  alignment  since  the  length  of  the
              column  titles  may affect the first line but not the
              second.

              9) Vertical spacing is done  just  before  the  print
              line (and title if any) is printed.
EXAMPLES:     (a)        OPEN         PERSONNEL.              PRINT
              LAST-NAME,FIRST-NAME,INITIAL,OFFICE-PHONE.



              (b) SUMPRINT OFF.       PICTURE  X  =  '$$$$,$$$.99'.
                  OPEN  RETAIL-OUTLETS.       COMPUTE  X  = SALES /
              SQ-FT.      TOTAL SALES  (  =  XSALES  ).       PRINT
              STORE,MGR,"SALES/SQ  FT RATIO:",1,X.      IF LASTTIME
              PRINT 'TOTAL SALES:', XSALES.

**REPORT


FUNCTION:     Denotes a specific report in a multiple report  query
              run.    All  print,  report  formatting,  or  heading
              commands between this REPORT command and the next (or
              the  end  of  the  query)  pertain  to  that specific
              report.
FORMAT:       REPORT integer


DEFAULTS:     If you do not use REPORT anywhere in your query,  IQL
              produces a single report and acts as if you had given
              REPORT 1 at the beginning of the query.


DISCUSSION:   1) Report number 1 is always routed directly  to  the
              printer.  All other reports are spooled out to a disk
              file and later separated and printed or displayed  at
              the end of the run.

              2) When you use a report format setting  (ie  LMARGIN
              10)  or heading (ie HEADING "EXCEPTION REPORT" ) that
              same setting is used in each subsequent report unless
              you change it.
EXAMPLES:     OPEN  TICKETS.   REPORT  1.   RMARGIN  72.    HEADING
              "SEPTEMBER//TICKETS".   IF MONTH = 'SEPT' PRINT NAME,
              DESTINATION,  AIRLINE,  FLIGHT,   AMT.    REPORT   2.
              RMARGIN  132.   HEADING  'BURMUDA EXCURSIONS - FALL'.
              IF DESTINATION = 'BERMUDA' AND MONTH = 'SEPT', 'OCT',
              'NOV' PRINT NAME, AGENT, HOTEL, DATE, PLAN.

**RESET


FUNCTION:     Resets the value of an item or variable.
FORMAT:       RESET item ---<---


DISCUSSION:   1) Alphabetic or alphanumeric items or variables  are
              reset to all spaces.

              2) Numeric items or variables are reset to zero.

              3) RESET X is equivalent to COMPUTE X = 0.
                 RESET A is equivalent to SET A TO ' '.
EXAMPLES:     HEADING   'BONUS   PROJECTION'.    OPEN   SALES-FILE.
              COMPUTE  XBONUS = SALARY * ( SALES - QUOTA ) / QUOTA.
              IF XBONUS LEQ 0 RESET  XBONUS.   PRINT  NAME,  SALES,
              QUOTA, XBONUS.

**REWRITE


FUNCTION:     Rewrites a record back in place in an  ISAM  (Indexed
              Sequential Access Method) file.
FORMAT:       REWRITE [RECORD]


DISCUSSION:   1) The record rewritten is the last one read from the
              ISAM  file.   You  may  use  REWRITE  even if you are
              reading the ISAM file sequentially (ie, you  did  not
              use FIND KEY in your query.

              2) If you have changed information in the record, the
              changed values are rewritten into the file as part of
              the rewritten record.

              3) You should be careful in using  REWRITE  since  it
              writes  over  the  original  information  in the ISAM
              file.  It is a good idea to protect ISAM files with a
              fairly  high  level password in the dictionary at the
              FD rewrite password level.
EXAMPLES:     AUTHORITY  Q2R3YA.   OPEN  PERSONNEL.   FIND  KEY   =
              '00010',  '00025'  THRU  '00047'.   SET ASSIGNMENT TO
              'SUPERVISOR'.  REWRITE RECORD.

**RMARGIN


FUNCTION:     Sets the right margin for printing reports.


FORMAT:       RMARGIN integer


DEFAULTS:     If you do not use RMARGIN in your query, IQL  uses  a
              right margin of 132.


DISCUSSION:   1) You may use RMARGIN any place in your  query,  and
              as often as necessary.

              2) RMARGIN settings are  carried  from  one  multiple
              report  to  the next unless you use RMARGIN to change
              them.

              3) RMARGIN affects all of:   page  headings,  summary
              lines and detail print lines.


EXAMPLES:     (a) RMARGIN 72.
                  HEADING 'MEMBER EXTRACT'.
                  OPEN MEMBER-FILE.
                  IF SUBSCRIPTION GEQ 1000
                    PRINT NAME, DATE SUBSCRIPTION.


              (b) OPEN SALES.
                  SORT BY STATE.
                  REPORT 1.
                  HEADING 'SALES DETAIL'.
                  RMARGIN 132.         (to reset from 2nd report)
                  PRINT ACCT SALESMAN GROSS PROJECTION.
                  REPORT 2.
                  HEADING 'HIGH VOLUME//SUMMARY'.
                  RMARGIN 72.
                  IF GROSS GEQ 1000
                      TALLY ACCOUNT BY STATE
                      TOTAL GROSS BY STATE.

**SET


FUNCTION:     Sets a new value into an item.  The  value  may  come
              from another item, a constant or literal.
FORMAT:       SET     item     TO     item     constant     literal
------------<---------


DISCUSSION:   1) If the item being set is  in  a  record,  the  new
              value  replaces  the  old  value in the record IQL is
              working with but not in the file itself.  However  if
              you subsequently write out the record it contains the
              value.

              2) When a numeric item is set to a numeric value, the
              decimal  points  are  lined  up  first,  then leading
              and/or trailing zeros are supplied if necessary.   If
              the integer or decimal portions of the supplied value
              are too  long,  they  are  truncated  with  no  error
              message.

              3) When an alpha item is set to an alpha  value,  the
              supplied  value  is  left  justified with blank right
              fill if necessary.  If the value is too long,  it  is
              truncated on the right with no error message.

              4) SET X TO ...  is equivalent to COMPUTE X = ...

              5) You may set alpha items to  numeric  values.   The
              integer part of the numeric item is left justified in
              the alpha item with blank right fill if necessary.

              6) You may also set numeric items  to  alpha  values,
              but this is only legitimate if the alpha value is all
              digits.  As many digits as necessary are  taken  from
              the  left  of  the  alpha  value  to fill the integer
              portion of the numeric item.  The fractional portion,
              if any, is zeroed.

              7) You should avoid mixing item types as in  (5)  and
              (6),  ie  setting  alpha  to  numeric and vice versa.
              These operations are expensive in  computer  time  if
              done very often.


EXAMPLES:     (a) OPEN SALES-MASTER.
                  FIND KEY = '456701'
                  SET QUOTA TO 200,000 REGION TO 'NORTHWEST'.
                  REWRITE RECORD.

**SORT


FUNCTION:     Sorts the primary input file on  one  or  more  keys,
              which may be data items or variables and which may be
              sorted ascending or descending.

FORMAT:       SORT     BY     [ASCENDING]     item     [DESCENDING]
------------<------------


DEFAULTS:     If you do not specify ASCENDING  or  DESCENDING,  IQL
              sorts ascending.


DISCUSSION:   1) There is no maximum number of sort keys  that  can
              be  used  other than that the number of characters in
              all sort keys  -taken  together-  cannot  exceed  the
              total length of the record.

              2)  You  may  sort  on  calculated  variable  values.
              However,  the  calculated value does not come through
              the sort.  For instance, in the second example  query
              below if you wanted to print XRATIO you would have to
              recompute it after the sort.


EXAMPLES:     (a) OPEN CONGLOMERATE.
                  SORT BY ASCENDING UNIT-NO DESCENDING SALES.
                  TOTAL SALES BY UNIT-NO.



              (b) OPEN STORES.
                  COMPUTE XRATIO = SALES / SQ-FEET.
                  SORT BY XRATIO, SALES.
                  PRINT SALES, SQ-FEET, STORE-NAME.



              (c) OPEN CANDIDATE-FILE.
                  COMPUTE XTOTAL = POLL-PCT * PRECINCT-POPULATION.
                  SORT BY PRECINCT, XTOTAL.
                  IF NEWGROUP OF PRECINCT PRINT PRECINCT, CANDIDATE
                      ELSE PRINT CANDIDATE.

**TALLY


FUNCTION:     Tallies (counts) occurrences of an item (a)  over  an
              entire  report  or (b) within a specific value of one
              or more controlling items (breaks).


FORMAT:       TALLY  item  [BY  item ] [ ( = variable ) ]
                               ---<--


DISCUSSION:   1) TALLY performs two functions:  first it calculates
              the  requested  tally and second, it prints the tally
              at the proper time.

              2) It is not necessary  for  you  to  use  any  other
              summary statement in order to use TALLY.

              3) If you do not specify a break item ( ie BY item  )
              the  tally  is  calculated overall records which pass
              through the TALLY statement.

              4)  If  you  specify  a  break  item,  the  tally  is
              calculated and printed on the change in the indicated
              item.  If you specify more than one break item, TALLY
              breaks  on  a  change  in  any of the indicated break
              items.

              5) Since TALLY merely runs a counter, incrementing it
              by  one each time the TALLY statement is executed, it
              does not matter what type the  item  tallied  or  the
              break item are.


              6) When TALLY  prints,  it  constructs  a  line  with
              explanatory  text  on  the  left and the tally on the
              right.  For break tallies, the  explanatory  text  is
              made  up  of the top and bottom dictionary titles for
              the break item, the value of  that  item  before  the
              break,  the  top  and  bottom  titles  for  the  item
              tallied, and the word 'TALLY:' For non-break  tallies
              the  break  item  titles  and  value  are replaced by
              'OVERALL.  Please note that the item tallied  matters
              only  in the choice of titles which go into the tally
              text.

              7) You may override the  automatic  printout  of  the
              tally  by  using  SUMPRINT OFF in your query.  If you
              wish to turn automatic printout back on, use SUMPRINT
              ON  as  approprite  in  your  query.   If you do turn
              automatic printing on, you must do your own  printing
              as described below in 8.

DISCUSSION:  (continued)


              8) You may give a name to the tally itself  by  using
              the  form  (  =  variable  ) at the end of your TALLY
              statement.  The variable name must start with 'X'  or
              'ZZ'.   From  this  point on you may use the variable
              just like any  other  item,  including  using  it  in
              computations and print lines.


EXAMPLES:     OPEN SCHOOLS.
              TALLY STUDENT BY CLASS.
                   

**TITLES


FUNCTION:     (a) Turns automatic column titling on or off, or  (b)
              Furnishes specific column titles for designated items
              when you wish to provide titles for working items  or
              to override the dictionary titles.


FORMAT:       TITLES    ON
                        OFF
                        item = literal 
                       -------<-------


DEFAULTS:     If you do not use TITLES in your  query,  titling  is
              automatically  turned  on.   For  data  items, column
              titles are obtained from  their  description  in  the
              dictionary.   For working items, the name of the item
              is used as the column title.


DISCUSSION:   1) When IQL is about to print a line it looks to  see
              if this line is from a different print statement than
              the most recent one and if titling is  on.   If  both
              conditions  are  satisfied,  IQL  prints two lines of
              column titles and a line of  spaces  before  printing
              the actual line.  Otherwise it prints only the actual
              line.

              2) If you use TITLES OFF, titling is turned  off  and
              no column titles are printed before the print line.

              3) If you  use  TITLES  ON,  titling  is  turned  on.
              Column titles are printed as described in (1) above.

              4) If you use TITLES item = ...  , IQL turns  titling
              on  and  sets  the column title for the named item to
              the literal value.  If you use a double slash (//) in
              the  literal,  the top title is to the left of the //
              and the bottom title is to the right.  If you do  not
              use  a  double  slash, the literal is used as the top
              title and the bottom title  is  blank.   To  force  a
              single   title  to  the  bottom,  start  with  double
              slashes.  For instance:  '//LAST NAME'.


EXAMPLES:     TITLES X = 'SALES//SQ FT'.
              OPEN STORES.
              COMPUTE X = SALES AREA.
              PRINT STORE-NAME, SALES, AREA, X.

**TOTAL


FUNCTION:     Totals a numeric item either over an entire report or
              within  a  specific  value of one or more controlling
              items (breaks).


FORMAT:       TOTAL  item  [BY  item ] [ ( = variable ) ]
                               ---<--


DEFAULTS:     If you do not specify  otherwise  (see  below),  each
              TOTAL  statement  both calculates the specified total
              and prints it out.


DISCUSSION:   1)  TOTAL  performs   two   functions:    first,   it
              calculates  the  correct  total and second, it prints
              the total at the proper time.

              2) TOTAL is  a  stand-alone  statement;   it  is  not
              necessary for you to use AVERAGE or TALLY in order to
              use TOTAL.

              3) If you do not specify a break item (ie, BY item ),
              the  total  is calculated over all records which pass
              through the TOTAL statement.

              4)  If  you  specify  a  break  item,  the  total  is
              calculated  and printed when IQL sees a change in the
              indicated item.  If you specify more than  one  break
              item,  TOTAL breaks if it sees a change in any of the
              indicated items.

              5) You may specify more than one break item  as  long
              as  each  is  minor to one preceeding it.  A total is
              calculated for each such break item.  When  a  change
              in any break item occurs, a change is assumed to have
              occurred in each break item to the right of it in the
              TOTAL  statement.   The purpose of this is to prevent
              inadvertent overlap of minor break items  over  major
              ones.   For  instance if we were totaling grade point
              total for each sex in each school and we  encountered
              an  all-girls  school,  TOTAL GPA BY SEX would give a
              misleading answer while TOTAL  GPA  BY  SCHOOL,  SEX.
              would give the correct one.

DISCUSSION (continued):

              6) Since totaling is  an  arithmetic  operation,  the
              item  you total must be numeric.  However the item(s)
              controlling the break may be any type.

              7) When TOTAL  prints,  it  constructs  a  line  with
              explanatory  text  on  the  left and the total on the
              right.  For break totals the text is made up  of  the
              top  and bottom dictionary titles for the break item,
              the value of the  break  item,  the  top  and  bottom
              titles  for  the totaled item, and the word 'TOTAL:'.
              See the examples below.

              8) You may override the automatic printing of a total
              by  using  the  statement SUMPRINT OFF in your query.
              If you wish to turn  on  automatic  printing  of  the
              total  (or  any summary operation) use SUMPRINT ON as
              appropriate.  If you do turn  automatic  printing  of
              TOTAL off, you must do your own printing as described
              in the next paragraph.

              8) You may give a name to the total  'bucket'  itself
              by  using  the form ( = variable ) at the end of your
              TOTAL statement.  The variable name must  start  with
              either  'X'  or 'ZZ'.  From this point on you may use
              the variable just  like  any  other  item,  including
              using  it  in  computations.   One  such  usage is to
              calculate percentages at the end of a query.  Another
              is  so  that  you may print the total in a print line
              with  other  data,  often  for   printing   summaries
              directly under details.




EXAMPLES:     (a)  HEADING 'ORGANIZATIONAL BUDGETS'.
                   OPEN BUDGET-FILE.
                   TOTAL BUDGET BY DIV, DEPT.
                   TOTAL BUDGET.

              might give:

              HOME DEPT 421 ANNUAL BUDGET TOTAL:    23,921.46
              HOME DEPT 427 ANNUAL BUDGET TOTAL:    37,446.00
              HOME DEPT 433 ANNUAL BUDGET TOTAL:    12,777.50
              HOME DIV 110 ANNUAL BUDGET TOTAL:     74,144.96
              ....
              OVERALL ANNUAL BUDGET TOTAL:         549,873.64

**VSPACE


FUNCTION:     Changes the vertical spacing of reports.


FORMAT:       VSPACE integer


DEFAULTS:     If you do not use VSPACE in your  query,  IQL  single
              spaces  reports;   ie,  it  acts  as  if you had used
              VSPACE 1.


DISCUSSION:   1) IQL physically  vertical  spaces  just  before  it
              prints a line or the titles which go with the line.

              2) You may use VSPACE at any point and repeatedly.

              3) VSPACE only affects reports produced by PRINT;  it
              does not affect output from DISPLAY.

              4) If you are producing multiple reports, any  VSPACE
              setting  stays in effect from one report to the next.
              If you wish to use a different  vertical  spacing  in
              reports,  you  must  use VSPACE to change it, and you
              must use VSPACE again in the first report to  set  it
              back.  See the examples below.

              5) The integer in VSPACE may be any reasonable value.


EXAMPLES:     OPEN STUDENTS.
              REPORT 1.
              VSPACE 1.
              PAGING ON.
              HEADING 'HIGH GPA STUDENTS'.
              IF GPA GEQ 3.5 PRINT NAME, CLASS, GPA, YEAR.
              REPORT 2.
              *STUDENT ADDRESS LABELS*.
              PAGING OFF.
              VSPACE 3.
              PRINT NAME.
              VSPACE 1.
              PRINT STREET.
              PRINT CITY.
              PRINT STATE, ZIP.
4.1  UPDATE FUNCTIONS

Update mode
 gives you the ability to input new data files,
update existing ones, and inspect (browse)
in them.
IQL's update capability works on sequential or
Indexed sequential (ISAM) files; these files may be in ASCII or

6-bit mode.
Some of the specific capabilities provided are:

    (a)  Inspect  and work with fields  in context  and position 
    (b)  Perform decimal point alignment.
    (c)  Accept, display and control on signs in fields.
    (d)  Accept values in a variety of  natural formats and
         scale or shift them properly to fit in records.
    (e)  Accept new records, issuing clear prompts for each
         field value.
    (f)  Operate  on  binary,  packed decimal,  numeric  or 
         alphanumeric fields.
    (g)  Display selected fields or sections of records.
    (h)  Control (locate, list, change, delete) on multiple 
         conditions.

By function, the update commands may be grouped:

    (a)  To position your file:  UP, DOWN, TOP, BOTTOM, FIND
    (b)  To add records:         INSERT, APPEND
    (c)  To delete records:      DELETE
    (d)  To change records:      CHANGE
    (e)  To display records:     LIST
    (f)  To control the session: VERIFY, COLUMNS
    (G)  To extract a new file:  EXTRACT
    (H)  To save your file:      SAVE
    (i)  To end the session:     END,EXIT

**APPEND


FUNCTION:     Positions the file at the end (bottom) and then  goes
              into  'insert'  mode  to  receive  new records.  This
              command is exactly the same as if you entered  BOTTOM
              followed by INSERT.


FORMAT:       APPEND


DISCUSSION:   1)  The  first  record  inserted   by   APPEND   goes
              immediately  after  the  last  record  of the current
              file.

              2) For a detailed description  of  entering  records,
              see the section describing INSERT.


EXAMPLES:     <QA> append
               (at end of file)
               (next record)
               *custno (customer number) 5 n:  1
               *customer (customer name) 16 a: jones 
               *BUYER (BUYER NAME) 15 A:BARNABAS
               *CYSALES ..........



**BOTTOM


FUNCTION:     Positions the file at the end (bottom).


FORMAT:       BOTTOM


DISCUSSION:   If a file is positioned at the end, it is  positioned
              after  the  last record.  There is no current record.
              An attempt to list or otherwise act  on  the  current
              record  results  in  an error message and the file is
              not moved.


<QA>bottom
               (at end of file)
              <QA>

**CHANGE


FUNCTION:     Changes the contents of one or more items  in  either
              the  current  record  or selected records.  If verify
              mode is on, displays the changed record(s).


                     --------<---------
FORMAT:       CHANGE item [TO]    value [IN     findlist]
                          [EQ]          [IF     KEY = value
                          [=]           [FOR
                          [EQUAL]       [WHERE
                          [EQUALS]      [WHEN


DEFAULTS:     If you do not furnish a findlist the changes are made
              in  the  current  record  only  and  the  file is not
              repositioned.


DISCUSSION:   1) If you specify a findlist, the  system  makes  the
              specified  changes  in  the  records  located  by the
              findlist.  The file is left positioned  at  the  last
              record  changed.  If your findlist starts with ALL or
              if a record is not found, the file is left positioned
              at its end.

              2) The rules for furnishing new item values  are  the
              same   as   for   other  commands.   Please  see  the
              'FINDLIST' section.


EXAMPLES:     CHANGE DEPT TO 421
              CH DEPT 421
              CH NAME 'SEISS' IN SSNO 572409987
              CHANGE VENDOR TO 'BRAND X' SALESMAN TO ++
                      JONES REGION = 6 FOR ALL VEND-NO ++
                      = 50 SALESMAN= 'SMITH'

**COLUMNS


FUNCTION:     Designates the left and right columns of the  portion
              of  the  record  to  be displayed by LIST (or CHANGE,
              DOWN, FIND, UP if verify mode is on).


FORMAT:       COLUMNS  integer   [integer]

              Where  the  first  integer   designates   the   first
              (leftmost)  column  to  be  displayed  and the second
              integer  is  the  last  (rightmost)  column   to   be
              displayed.


DEFAULTS:     1) If you do not  use  COLUMNS  in  the  session  IQL
              displays   the   full  record,  wrapping  around  the
              terminal as necessary.

              2) If you  do  not  specify  a  second  integer,  IQL
              displays  a  72  character  portion  of  the  record,
              beginning at  the  column  designated  by  the  first
              integer.


DISCUSSION:   1) The leftmost character in a record is in column 1.


EXAMPLES:     COLUMNS      40   75
              CO           40   75
              CO           601  

**DELETE(IMMEDIATE)


FUNCTION:     Deletes one or more selected records.  


FORMAT:       DELETE    [findlist]
                        [integer]

              where the integer is the  number  of  records  to  be
              deleted.


DEFAULTS:     If you specify neither a findlist  nor  a  number  of
              records, IQL deletes the current record.


DISCUSSION:   1) If you specify an integer, IQL deletes  that  many
              sequential records, starting with the current one.

              2) If you specify a findlist, IQL deletes the records
              located  by  the findlist.  Please see the 'FINDLIST'
              section.

              3) Regardless of what form of  DELETE  you  use,  the
              file  is left positioned at the record after the last
              record deleted.  However, if you use a findlist which
              starts  with  ALL  or  if  the  system  cannot find a
              specified record, the file is left positioned at  its
              end.


EXAMPLES:     DELETE
              DE
              DE 10
              DELETE ALL RECORDS FOR REGION 56
              DELETE FIRST RECORD ACCT 7252
              DELETE NEXT RECORD WHERE VENDOR NOT = 'BLT'
              DE VENDOR NOT BLT

**DOWN


FUNCTION:     Moves the file down (toward  the  end  or  bottom,  a
              specified  number  of records.  If verify mode is on,
              displays the new current record.


FORMAT:       DOWN    [integer]

              where the integer is the number of records  the  file
              is to be moved down.


DEFAULTS:     If you omit the integer, IQL moves the file down  one
              record.


DISCUSSION:   If IQL encounters the end of the file before  it  has
              moved down the requested number of records, it issues
              an 'AT END OF  FILE'  message  and  leaves  the  file
              positioned  at its end.  If the file is positioned at
              its beginning and you use DOWN or  DOWN  1,  the  new
              current record is the first record in the file.


EXAMPLES:     DOWN
              DO
              DOWN   12
              DO     600

**EXIT(IMMEDIATE)


FUNCTION:     Ends the update or browse session and saves the final
              version  of  your file.  Returns you to the operating
              system.


FORMAT:       EXIT


DISCUSSION:   EXIT and END are synonyms.


EXAMPLES:     EXIT
              EX

**EXTRACT


FUNCTION:     Extracts selected records from the current  file  and
              writes them to a new sequential file.

FORMAT:       EXTRACT   [TO  'file.ext']    findlist


DEFAULTS:     If you do not furnish a file name IQL writes the file
              on  name.OUT,  where 'name' is the name of your input
              file.  


DISCUSSION:   1) Please see the discussion in the section  entitled
              'Findlist'.

              2) The file written out retains the same mode  (ASCII
              or 6-bit) as your original file.

              3) EXTRACT always goes to the beginning of the  input
              file before doing the extract.

              4) After EXTRACT,  IQL  switches  to  processing  the
              extracted file.

**FIND(IMMEDIATE)


FUNCTION:     Positions the file at a selected record.   If  verify
              mode is on, displays the new current record.


FORMAT:       FIND   [findlist]
                     KEY = value


DEFAULTS:     If you do not furnish a findlist, FIND uses the  last
              findlist  that was furnished.  This lets you continue
              a search by simply entering FIND or FI.


DISCUSSION:   1) Please see the discussion in the section  entitled
              'Findlist'.

              2) If IQL does not find a record which qualifies,  it
              issues  an  'AT  END  OF FILE' message and leaves the
              file positioned at the end.


EXAMPLES:     FIND NEXT RECORD WHERE NAME EQUALS 'SMITH'
              FIND NEXT NAME EQ 'SMITH'
              FIND NAME 'SMITH'
              FI NAME 'SMITH'

              FI        (if used after the above FIND,
                         continues the search)

              FIND KEY = '234581099'

              FIND DEPT GR 421 AND DIV EQ 3

              FIND ACCOUNT GEQ 6000 AND YEAR NOT LESS 75
              FIND ACCOUNT GE 6000 AND YEAR GE 75

**Findlist


FUNCTION:     A 'findlist' is  a  set  of  item-names,  values  and
              relationships  which  direct IQL to locate records in
              your  file.   Findlists  are  used  in  the  commands
              CHANGE,  DELETE,  FIND and LIST.  An example findlist
              is:

              NEXT RECORD WHERE NAME EQUALS 'SMITH'


                               |-------------<-------------|
FORMAT:       [ALL]  [RECORDS] [IF] [item [NOT] [EQ] value] [AND]
              [NEXT] [RECORD]  [WHEN]           [NEQ]
              [FIRST]          [WHERE]          [GEQ]
                               [FOR]            [LEQ]
                                                [GR]
                                                [LS]


DISCUSSION:   1) The item-names referenced above may be any defined
              in the dictionary controlling this run.

              2) You may  use  a  number  of  synonyms  to  specify
              relationships (ie, EQ above):

              relationship                 synonyms              ____________                 ________
              equals                       EQ,EQUAL,
                                           EQUALS,IS,=
              is not equal to              NEQ,NE,NQ,<>
              is greater than or equal to  GEQ,GE,GQ,>=
              is less than or equal to     LEQ,LE,LQ,<=
              is greater than              GR,GT,GREATER,>
              is less than                 LS,LT,LESS,<

              If you do not specify  a  relationship,  IQL  assumes
              'equals'.

              3)  The  word  NOT  reverses  a  relationship.    For
              instance NOT GR is the same as LEQ.

              4) The words RECORD, RECORDS, WHERE, FOR,  WHEN,  AND
              and  IF  are  optional.   They  have no effect on the
              search and  are  processed  simply  so  you  may  use
              phrases which read like English.

              5) If you use NEXT, the search begins at  the  record
              after  the  current record and the file is positioned
              at the next record which satisfies the findlist.

              6) If you use FIRST, the search begins at  the  first
              record  in  the file.  This is the same as if you had
              used the TOP command  and  then  used  NEXT  in  your
              findlist.

              7) If you use ALL, the search begins  at  the  record
              after  the  current one and the file is positioned in
              turn at each downstream record  which  satisfies  the
              findlist.  The file is left positioned at the end.

              8) If you do not use  any  of  the  key  words  NEXT,
              FIRST,  or ALL the search proceeds as if you had used
              NEXT.

              9) The rules for formating item values in a  findlist
              are  the  same  as  for furnishing item values in the
              INSERT command.

              10) Remember that a findlist is only part of  another
              command.  See the discussions of CHANGE, DELETE, FIND
              and LIST for uses of findlists.  ERRORS: IQL   issues
              an  error  message  and  rejects  the  command  if it
              detects any of the following in a findlist:

              (a) item-name not contained in dictionary.
              (b) alphanumeric value too long.
              (c) numeric value contains illegal alphabetics.
              (d) Too many decimal or  integer  places  in  numeric
              value.

**INSERT


FUNCTION:     Inserts one or more new records immediately after the
              current  record.   Prompts for each new item value in
              each record.  Allows you to furnish numeric values in
              a  variety  of  formats.  Takes care of decimal point
              alignment,  leading  zeros  and  trailing  zeros   or
              blanks.


DISCUSSION:   1) If your file is currently positioned  at  the  top
              (beginning),  INSERT  adds the new records before the
              previous first one.

              2) If your file is currently positioned at the bottom
              (end), INSERT adds the new records after the previous
              last one.

              3) INSERT operates under control of your  dictionary.
              For each new record it starts at the beginning of the
              dictionary and issues a prompt for  the  first  input
              data  item.   When  you  respond with a value for the
              item, INSERT issues the prompt  for  the  next  input
              item.  This process continues until either the end of
              the dictionary is reached or you  enter  one  of  the
              special values NEXT, KILL, or UP.  (see next page).

              4) The prompt issued for each item is contructed from
              the  dictionary  entry  for the top and bottom title,
              the  item  length,  and  the  scale  (if  any).   For
              alphanumeric  items  the  prompt  ends with nnA where
              'nn' is the length of the item.  For  numeric  items,
              the prompt ends with nn.mmN where 'nn' is the maximum
              number of integer positions and 'mm' is the number of
              decimal positions (if any).  Examples of prompts:

                   *LAST NAME 16 A :
                   *EARNINGS 7.2 N :

              5) The rules for entering data item  values  are  the
              same for INSERT as for other commands.  

              6) There are a number of control words you may use to
              control INSERT:

                (a) If you enter a carriage return, all spaces,  or
                '  ',  alphabetic  items  are set to all spaces and
                numeric items are set to zero.

                (b) If you enter the special  value  KILL  anywhere
                (ie,  if  you have made a serious error in entering
                the record and wish to 'kill' it), IQL rejects  the
                record  and  lets  you begin entering it again from
                the beginning.

                (c) If you make an error in entering  a  value  and
                catch  it  later  in the same record, you may 'back
                up' to correct the entry.  Enter the special  value
                BACK  integer.   IQL  moves back that many entries,
                prompts for  that  item,  and  continues  down  the
                dictionary  again.   If  you  omit the integer, IQL
                moves back one prompt.

                (d) To go on to the next record, enter the  special
                value  NEXT.   IQL  goes  through  the  rest of the
                current record,  blanking  out  alphanumeric  input
                items  and  setting  numeric  input  items to zero.
                Then it writes out the record and prompts  you  for
                the first value in the next record.

                (e) To terminate INSERT, enter  the  special  value
                END as the first value in a record.


EXAMPLES:     Please see next page.


ERRORS:       If INSERT detects an improper value, it  rejects  the
              value with an error message, reissues the prompt, and
              waits for you to enter the value correctly.  improper
              values are:  (a) alphanumeric value too long, (b) too
              many integer or decimal places in a numeric value, or
              (c) numeric item contains illegal characters.

         *insert

         (NEXT RECORD)
         *CUSTNO (CUSTOMER NUMBER) 5 N:    23
         *CUSTOMER (CUSTOMER NAME) 16 A:   'savings trust'
         *BUYER (BUYER NAME) 15 A:         purchasing
         *CYSALES (CURR YR SALES) 7.2 N:   L000          
         !!VALUE TOO LONG OR CONTAINS ALPHA!!
         *CYSALES (CURR YR SALES) 7.2 N:   1000
         *LYSALES (LAST YR SALES) 7.2 N:   575.98
         *LPDATE (LAST PO DATE) 6 N:       780112

         (NEXT RECORD)
         *CUSTNO (CUSTOMER NUMBER) 5 N:    24
         *CUSTOMER (CUSTOMER NAME) 16 A:   "winnebago sales"
         *BUYER (BUYER NAME) 15 A:         'jerry cowens'
         *CYSALES (CURR YR SALES) 7.2 N:   next

         (NEXT RECORD)
         *CUSTNO (CUSTOMER NUMBER) 5 N:    25
         *CUSTOMER (CUSTOMER NAME) 16 A:   'royal cylle'
         *BUYER (BUYER NAME) 15 A:         'ron kline'
         *CYSALES (CURR YR SALES) 7.2 N:   up 2
         *CUSTOMER (CUSTOMER NAME) 16 A:   'royal cycle'
         *BUYER (BUYER NAME) 15 A:         'ron kline'
         *CYSALES (CURR YR SALES) 7.2 N:   451
         *LYSALES (LAST YR SALES) 7.2 N:   $217.45
         *LPDATE (LAST PO DATE) 6 N:       780210

         (NEXT RECORD)
         *CUSTNO (CUSTOMER NUMBER) 5 N:    16
         *CUSTOMER (CUSTOMER NAME) 16 A:   rietronicx
         *BUYER (BUYER NAME) 15 A:         kill

         (NEXT RECORD)
         *CUSTNO (CUSTOMER NUMBER) 5 N:    26
         *CUSTOMER (CUSTOMER NAME) 16 A:   riatronics
         *BUYER (BUYER NAME) 15 A:         "lauren l lee"
         *CYSALES (CURR YR SALES) 7 2 N:   -250.
         *LYSALES (LAST YR SALES) 7.2 N:   22,250
         *LPDATE (LAST PO DATE) 6 N:       780130

         (NEXT RECORD)
         *CUSTNO (CUSTOMER NUMBER) 5 N:    end

**LIST


FUNCTION:     Lists one or more records on  your  terminal.   Lists
              either  a  selected  portion  of  each record or only
              selected items,  depending  on  format  of  the  LIST
              command.


                                           ---<---
FORMAT:       (a)  LIST   [no-of-records]   [item]

                          ---<---
              (b)  LIST    [item]            [findlist]
                                             KEY = value

              where 'no-of-records' is the number of records to  be
              listed.


DEFAULTS:     If you use only the word LIST, IQL lists the  current
              record and the file is not moved.


DISCUSSION:   1) If you do not specify any item names to be listed,
              LIST  displays  the  entire  record  or a part of it,
              depending on whether you have used COLUMNS or not.

              2)  The  following  paragraphs  summarize  the   LIST
              command options:

              (a)  LIST

                   Lists the entire current record.

              (b)  LIST no-of-records

                   Lists the current and  following  records  until
                   the   specified  number  of  records  have  been
                   listed.

              (c)  LIST no-of-records item-name item-name ...

                   Lists  only the  named items,  starting 
                   with the current record, until these items have
                   been listed for
                   the specified records. Signs and decimal points
                   are shown for
                   numeric items. The 'items' format is generally
                   easier to read than a continuous portion of the
                   record, especially if binary items are involved.

              (d) LIST item-name item-name ...

                  Lists only named items for  the  current  record.
                  Does not move the file.

              (e) LIST findlist

                  Lists all records located by the findlist.

              (f) LIST item-name item-name ...  findlist

                  Lists only named items for each record located by
                  the findlist.


              IQL leaves the file positioned  at  the  last  record
              listed  unless  (1)  you used ALL in your findlist or
              (2) in listing the system encountered the end of  the
              file.   In these cases, it issues an 'AT END OF FILE'
              message and leaves the file positioned at its end.


EXAMPLES:     LIST
              LIST   10
              LIST   20  ACCOUNT  LEDGER  AMOUNT
              LIST   ACCOUNT  LEDGER  AMOUNT
              LIST FIRST ACCOUNT = 6000
              LIST ALL ACCOUNT = 6000
              LIST LEDGER AMOUNT FOR ALL ACCOUNT = 6000
              LIST ACCOUNT LEDGER AMOUNT RATE FOR ALL ++
                           ACCOUNT GEQ 6000 AND YEAR 76

**SAVE(IMMEDIATE)


FUNCTION:     Saves the current version of your file.  The  current
              version  replaces  the original version of your file.
              The file is left positioned at its beginning.


FORMAT:       SAVE


EXAMPLES:     SAVE
              SA

**TOP


FUNCTION:     Positions the file at the beginning (top).


FORMAT:       TOP


DEFAULTS:     If the file is already positioned at  the  beginning,
              it is left there.


DISCUSSION:   If a file is  positioned  at  its  beginning,  it  is
              positioned  before  the  first record and there is no
              current record.


EXAMPLES:     TOP
              TO

**UP


FUNCTION:     Moves the file up (toward its  top  or  beginning)  a
              specified  number  of records.  If verify mode is on,
              displays the new current record.


FORMAT:       UP [no-of-records]

              where 'no-of-records' is the number  of  records  the
              file is to be moved up.


DEFAULTS:     If you omit no-of-records, the system moves the  file
              up one record.


DISCUSSION:   If IQL encounters the beginning of the file before it
              has  moved  up  the  specified  number of records, it
              issues an 'AT BEGINNING OF FILE' message  and  leaves
              the  file  positioned  at  its  beginning (before the
              first record).  If the file is positioned at its  end
              (after  the  last record) and UP or UP 1 is used, IQL
              moves the file up to the last record in the file.


EXAMPLES:     UP
              UP 600


ERRORS:       If   alphabetic   characters   are   encountered   in
              no-of-records  IQL  issues  an error message, rejects
              your UP command and does not move the file.

**VERIFY


FUNCTION:     Sets IQL into or out of verify mode.


FORMAT:       VERIFY      [ON]
                          [OFF]


DEFAULTS:     When you begin your update session,  verify  mode  is
              automatically on.


DISCUSSION:   If IQL  is  in  verify  mode,  it  (1)  automatically
              displays  the new current record located by UP, DOWN,
              or FIND commands and (2) automatically displays  each
              changed  record  as  a CHANGE command is carried out.
              If the system is not in verify  mode,  these  records
              are not automatically displayed.


EXAMPLES:     VERIFY
              VE     ON
              VERIFY ON
              VERIFY OFF


ERRORS:       If IQL encounters a word other than ON or  OFF  after
              VERIFY,  it  issues an error message and turns verify
              mode on.

4.7 RECOVERY ==TO BE REVISED==

IQL updates by writing  to  one  file  while  it  is  reading  from
another.  One of these files is your original file and the other is
a work file.  Whenever you enter the commands TOP or UP  or  use  a
findlist  containing  FIRST,  the  files are switched.  Your latest
'good' file is the file which is  being  read  at  that  particular
time.


When you enter the command SAVE, all updates are forced  into  your
original file and it becomes your latest good file.


If you experienced a computer crash (and could not  continue  after
the computer came back up) you would lose all updates (from CHANGE,
APPEND, INSERT, or DELETE) since the files were last switched.  For
this  reason,  it  is  good  practice  to SAVE your file at regular
intervals.


If a machine crash does occur, your latest good file may be  either
your  original  file  or  the  work  file.   In the latter case, to
recover you have to copy the work file to your original file.   IQL
gives you a way to tell which is your latest good file:  it keeps a
one record 'diary' file updated with the name of  your  good  file.
The  name  of  your  diary  file  is displayed at the start of your
browse session.


To demonstrate typical recovery, assume you  are  updating  a  file
called  MYDATA.SEQ  described  by  a  dictionary named MYDATA.  The
session goes as follows:

     .r iql
      <QU>DICTIONARY NAME:      mydata
      (YOUR DIARY FILE IS QL012U.LPT)
      <QU>change bal to 231 in first acct 50   (you make a change)
      <QU>change dept 42 to 51 in all records
      DECsystem10 is not running               (machine crashes)
      .log...                                  (you log back in)
      .type ql012u.lpt                         (and look at diary)
      (YOUR LATEST GOOD FILE IS QT012U.TMP)
     .copy DATA.SEQ=QT012U.TMP        this step needed
                                      only if latest
                                      good file is not
                                      your original).