!   N E W S C M D . C L D
!
! Author:
!     Geoff Huston
!       Computer Services Centre
!       Australian National University
!
! Version:
!   V1.0    17-Jul-1986
!   V3.0    30-Jul-1987
!   V4.0    26-Sep-1987     gh  News V4.0 Release
!   V4.02   17-Nov-1987     GIH     Added /local qual to create and set
!                                   newsgroup
!                                   DIR command calls do_dircall
!

MODULE NEWSCMD

!
!   type definitions
!
define type SET_OPTIONS
    keyword     NEWSGROUP   syntax=SET_NEWSGROUP
    keyword     ITEM        syntax=SET_ITEM

define type SHOW_OPTIONS
    keyword     NEWSGROUP   syntax=SHOW_NEWSGROUP
    keyword     ITEM        syntax=SHOW_ITEM

!
!   syntax definitions
!
define syntax DEFINE_KEY
   routine      do_define
   parameter    P1,         prompt="Key name", value(required)
   parameter    P2,         prompt="Equivalence name", value(required)
   qualifier    ECHO
   qualifier    TERMINATE
   qualifier    LOCK_STATE
   qualifier    IF_STATE,   value(required,list)
   qualifier    SET_STATE,  value(required)
   qualifier    LOG
   qualifier    ERASE
   disallow     ((not LOCK_STATE and TERMINATE and SET_STATE) or (LOCK_STATE and not SET_STATE))

define syntax SET_ITEM
    routine     do_set_item
    parameter   P1          label=OPTIONS, value(required)
    parameter   P2          label=NEWSITEM
    qualifier   HOLD        value(default="0")

define syntax SET_NEWSGROUP
    routine     do_set_newsgroup
    parameter   P1          label=OPTIONS, value(required)
    parameter   P2          label=GROUP
    qualifier   HOLD        value(default="0")
    qualifier   ITEMHOLD    value(default="0")
    qualifier   MODERATOR   value
    qualifier   LOCAL
    qualifier   CLOSED
    qualifier   OPEN
    DISALLOW    (CLOSED and OPEN)

define syntax SHOW_ITEM
    routine     do_show_item
    parameter   P1          label=OPTIONS, value(required)
    parameter   P2          label=NEWSITEM

define syntax SHOW_NEWSGROUP
    routine     do_show_newsgroup
    parameter   P1          label=OPTIONS, value(required)
    parameter   P2          label=GROUP

!
!   verb definition for news qualifiers and single line commands
!
define verb INVOKENEWS
    qualifier   SCREEN      default
    parameter   P1          label=COMMAND,value(type=$rest_of_line)

!
!   verb definition for news command language
!
define verb ADD
    routine do_add_net
    parameter   P1,          label=FILE
    qualifier   CREGRP
    qualifier   DELETE
    qualifier   RETRY

define verb CREATE
    routine do_cregrp
    parameter   P1,         label=NEWSGROUPS,value(list)
    qualifier   HOLD        value(default= "0")
    qualifier   ITEMHOLD    value(default="0")
    qualifier   MODERATOR   value
    qualifier   LOCAL
    qualifier   CLOSED
    qualifier   OPEN
    disallow    (CLOSED and OPEN)

define verb DEFINE
    routine do_error
    qualifier   KEY,        syntax=DEFINE_KEY

define verb DELETE
    routine do_delete
    parameter   P1,         label=NEWSITEM,value(list)
    qualifier   NEWSGROUP,  value(list)
    qualifier   IDENTIFIER, value
    disallow    any2 (NEWSGROUP,NEWSITEM,IDENTIFIER)

define verb DEREGISTER
    routine do_deregister
    parameter   P1,         label=NEWSGROUP
    qualifier   ALL,        nonnegatable
    disallow (NEWSGROUP and ALL)

define verb DIRECTORY
    routine do_dircall
    qualifier   ALL,        nonnegatable
    qualifier   ITEMS,      nonnegatable
    qualifier   OPEN,       nonnegatable
    qualifier   NEW,        nonnegatable
    qualifier   NEWSGROUPS, nonnegatable
    qualifier   REGISTER,   nonnegatable
    qualifier   RESET,      nonnegatable
    disallow    any2 (ALL,ITEMS,OPEN,NEW,NEWSGROUPS,REGISTER)

define verb DOWN
    routine screen_cur_down
    parameter   P1          label=LINES,value(type=$number)

define verb EXIT
    routine do_exit

define verb EXTRACT
    routine do_extract
    parameter   P1,         label=FILE,value(type=$outfile)
    qualifier   ALL,        nonnegatable
    qualifier   APPEND,     nonnegatable

define verb FOLLOWUP
    routine do_followup
    qualifier   HEADERS,    negatable

define verb FORWARD
    routine do_forward
    qualifier   HEADERS,    negatable
    qualifier   SUBJECT,    value(required)
    qualifier   SELF,       nonnegatable
    qualifier   TO,         value(impcat,required,list)
    qualifier   EDIT,       negatable,default

define verb HELP
    routine do_help
    parameter   P1,         label=TOPIC,value(type=$rest_of_line)

define verb MAIL
    routine do_forward
    qualifier   HEADERS,    negatable
    qualifier   SUBJECT,    value(required)
    qualifier   SELF,       nonnegatable
    qualifier   TO,         value(impcat,required,list)
    qualifier   EDIT,       negatable,default

define verb NEWSGROUPS
    routine screen_grp_display

define verb NOSCREEN
    routine noscreen
                                      
define verb POST
    routine do_post
    parameter   P1,         label=INFILE,value(type=$infile)
    qualifier   EDIT,       negatable,default
    qualifier   HEADERS,    negatable
    qualifier   NEWSGROUPS, nonnegatable, value(required,list)
    qualifier   SUBJECT,    nonnegatable, value(required)

define verb PRINT
    routine do_print
    qualifier   ALL,        nonnegatable

define verb READ
    routine do_read
    parameter   P1,         label=NEWSITEM
    qualifier   HEADER,     nonnegatable
    qualifier   NEW,        nonnegatable
    qualifier   TPU,        nonnegatable
    qualifier   ROT13,      nonnegatable
    qualifier   NEXT,       nonnegatable
    qualifier   LAST,       nonnegatable
    qualifier   PARENT,     nonnegatable
    qualifier   IDENTIFIER, value,nonnegatable
    disallow    any2(NEWSITEM,NEW,NEXT,LAST,PARENT,IDENTIFIER)

define verb REFRESH
    routine do_refresh

define verb REGISTER
    routine do_register
    parameter   P1,         label=NEWSGROUP
    qualifier   ALL,        nonnegatable
    qualifier   NEW,        nonnegatable
    qualifier   PRIORITY,   value
    disallow any2(ALL,NEW,NEWSGROUP)

define verb REPLY
    routine do_reply
    qualifier   HEADERS,    negatable
    qualifier   SUBJECT,    value(required)
    qualifier   SELF,       nonnegatable

define verb SCREEN
    routine init_screen

define verb SELECT
    routine do_selgrp
    parameter   P1,         label=NEWSGROUP
    qualifier   NEW,        nonnegatable
    disallow (NEWSGROUP and NEW)

define verb SET
    routine do_error
    parameter   P1          label=OPTIONS, prompt="_NEWS SET>", value(required,type=SET_OPTIONS)
            
define verb SHOW
    routine do_error
    parameter   P1          label=OPTIONS, prompt="_NEWS SHOW>", value(required,type=SHOW_OPTIONS)

define verb SKIM
    routine do_skim
    qualifier   ITEMS       negatable
    qualifier   FILES       negatable
    qualifier   NEWSGROUPS  negatable
    qualifier   ARCHIVE     value(type=$outfile)

define verb SKIP
    routine do_skip
    parameter   P1,         label=NEWSGROUP
    qualifier   ALL,        nonnegatable
    disallow (ALL and NEWSGROUP)

define verb SPAWN
    routine     do_spawn

define verb UP
    routine     screen_cur_up
    parameter   P1          label=LINES,value(type=$number)
                                 
