home *** CD-ROM | disk | FTP | other *** search
/ vsiftp.vmssoftware.com / VSIPUBLIC@vsiftp.vmssoftware.com.tar / FREEWARE / FREEWARE40.ZIP / dbs-odsm / odsm_maintain.mar < prev    next >
Text File  |  1994-02-23  |  17KB  |  809 lines

  1.     .title    odsm_maintain
  2.     .ident    /X2-005/
  3.     .subtitle Psect, library and external definitions
  4.  
  5. ;+
  6. ; Version:    X2-005
  7. ;
  8. ; Facility:    Online Disk Space Monitor
  9. ;
  10. ; Abstract:    This program maintains the data base for the monitor.
  11. ;
  12. ; Environment:    User mode.
  13. ;
  14. ; History:
  15. ;
  16. ;    06-Jun-1991, DBS; Version X1-001
  17. ; 001 -    Original version.
  18. ;    07-Jun-1991, DBS; Version X1-002
  19. ; 002 -    Added list option and fixed up set option.
  20. ;
  21. ;    29-Jul-1992, DBS; Version X2-001
  22. ; 001 -    Modified to handle shadow sets and now uses the physical device
  23. ;    rather than volume label as the key.
  24. ;    09-Sep-1993, DBS; Version X2-002
  25. ; 002 -    Changed the location of the data file.
  26. ;    08-Nov-1993, DBS; Version X2-003
  27. ; 003 -    Added secondary key for listing purposes.
  28. ;    09-Dec-1993, DBS; Version X2-004
  29. ; 004 -    Added ability to specify which key to use for the list.
  30. ;    23-Feb-1994, DBS; Version X2-005
  31. ; 005 -    Changed location of the data file to ODSM_DATA:ODSM_DISKS.DATA.
  32. ;-
  33.  
  34.     .library    "SYS$LIBRARY:LIB.MLB"
  35.     .library    "SYS$LIBRARY:STARLET.MLB"
  36.     .library    "DBSLIBRARY:SYS_MACROS.MLB"
  37.     .library    "DBSLIBRARY:ODSM.MLB"
  38.     .link        "SYS$SYSTEM:SYS.STB" /selective_search
  39.  
  40.     .disable global
  41.  
  42.     .external    lib_cvt_t_l
  43.     .external    lib_get_input
  44.     .external    lib$get_foreign
  45.     .external    lib$get_input
  46.     .external    lib$put_output
  47.     .external    lib$signal
  48.     .external    lib$stop
  49.     .external    lib$tparse
  50.     .external    str_len
  51.     .external    str_uppercase
  52.  
  53.     $fabdef
  54.     $iodef
  55.     $libdef
  56.     $namdef
  57.     $rabdef
  58.     $rmsdef
  59.     $ssdef
  60.     $stsdef
  61.     $tpadef
  62.     $gblini GLOBAL
  63.     _odsmdef
  64.  
  65.     def_psect _odsm_data_rw, type=DATA, alignment=LONG
  66.     def_psect _odsm_data_ro, type=RO_DATA, alignment=LONG
  67.     def_psect _odsm_code, type=CODE, alignment=LONG
  68.  
  69.     .subtitle Read only data area
  70.  
  71.     nul=0
  72.     lf=10
  73.     cr=13
  74.     space=32
  75.  
  76.     set_psect _odsm_data_ro
  77.  
  78. odsm_version:    .ascid    "ODSM_Maintain X2-005"
  79. odsm_prompt:    .ascid    "Maintain "
  80. odsm_tt:    .ascid    "TT"
  81.  
  82. blank_line:    .ascid    <cr>
  83.  
  84. odsm_ambiguous:    .ascid    "!/The use of the word !AS is ambiguous"
  85.  
  86. odsm_syntaxerr:    .ascid    "I didn't understand that command, "
  87.  
  88. odsm_confused:    .ascid    "!/!ASI got confused when I reached !AS"
  89.  
  90. odsm_badtable:    .ascid    <cr><lf>"My internal tables are invalid... help"
  91.  
  92. odsm_fatal:    .ascid    <cr><lf>"A fatal logic error has occurred... help"
  93.  
  94. using_file:    .ascid    "!AS !AS"
  95. updating_file:    .ascid    "Updating"
  96.  
  97. record_added:    .ascic    "Added   "
  98. record_deleted:    .ascic    "Deleted "
  99. record_set:    .ascic    "Modified"
  100.  
  101. dump_fao:    .ascid    "!AC  !32AF  !AF  !AF   !3UB% - !UB%"
  102. list_fao:    .ascid    "  !32AF  !AF  !AF   !3UB% - !UB%"
  103.  
  104.     reset_psect
  105.  
  106.     .subtitle Impure data area and TPA argument block
  107.  
  108.     set_psect _odsm_data_rw
  109.  
  110. ;>>> start of lib$tparse argument block
  111. ; this becomes the argument block for all lib$tparse action routines
  112.  
  113. odsm_parse_ctrl:    ; control block for lib$tparse
  114.     .long    tpa$k_count0    ; longword count - required
  115.     .long    tpa$m_abbrev    ; allow unambiguous abbreviations
  116.         ; from here down is filled in at run time
  117.     .long    0    ; length of input string    tpa$l_stringcnt
  118.     .long    0    ; pointer to input string    tpa$l_stringptr
  119.     .long    0    ; length of current token    tpa$l_tokencnt
  120.     .long    0    ; pointer to current token    tpa$l_tokenptr
  121.     .blkb    3    ; unused area
  122.     .byte    0    ; character returned        tpa$b_char
  123.     .long    0    ; binary value of numeric token    tpa$l_number
  124.     .long    0    ; argument supplied by user    tpa$l_param
  125.         ; up to here is REQUIRED, anything after here is optional
  126. odsm_parse_ctrl_end:
  127.  
  128. ;>>> end of lib$tparse argument block
  129.  
  130.     alloc_string    odsm_command, 256
  131.     alloc_string    odsm_faobuf, 1024
  132.  
  133. inp_option:    .long    0
  134.     m_addition    == 1
  135.     v_addition    == 0
  136.     m_deletion    == 2
  137.     v_deletion    == 1
  138.     m_set        == 4
  139.     v_set        == 2
  140.     m_list        == 8
  141.     v_list        == 3
  142.  
  143. inp_disk:    .long    0
  144. inp_disk_addr:    .long    0
  145.     inp_disk_s    == odsm_s_device
  146. inp_disk_t:    .blkb    inp_disk_s
  147.  
  148. inp_label:    .long    0
  149. inp_label_addr:    .long    0
  150.     inp_label_s    == odsm_s_volnam
  151. inp_label_t:    .blkb    inp_label_s
  152.  
  153. inp_host:    .long    0
  154. inp_host_addr:    .long    0
  155.     inp_host_s    == odsm_s_host
  156. inp_host_t:    .blkb    inp_host_s
  157.  
  158. inp_minimum:    .long    0
  159. inp_maximum:    .long    0
  160.     def_minimum    == 0
  161.     def_maximum    == 75
  162.     minimum_none    == 0
  163.     maximum_none    == 100
  164.  
  165. inp_data:    .long    0
  166.     m_disk        == 1
  167.     v_disk        == 0
  168.     m_host        == 2
  169.     v_host        == 1
  170.     m_minimum    == 4
  171.     v_minimum    == 2
  172.     m_maximum    == 8
  173.     v_maximum    == 3
  174.     m_label        == 16
  175.     v_label        == 4
  176.  
  177. odsm_tt_chan:    .long    0
  178.  
  179. odsm_msg:     $putmsg msgvec=odsm_msgvec ; setup a message vector
  180. odsm_msgvec:    .word    ^X0001        ; argument count
  181. odsm_msgtxt:    .word    ^X000F        ; set message/f/i/s/t
  182. odsm_msgsts:    .long    0        ; here we store the status
  183.  
  184.     reset_psect
  185.  
  186.     .subtitle Main command processing loop
  187.  
  188.     set_psect _odsm_code
  189.  
  190.     .entry -
  191. odsm_start, ^m<>
  192.  
  193.     display    odsm_version
  194.  
  195.     $assign_s -            ; assign a channel to our terminal
  196.         devnam=odsm_tt, -    ;  so we can setup a control c
  197.         chan=odsm_tt_chan    ;  trap
  198.     jsb    odsm_set_ctrlcast    ; now do it
  199.  
  200.     jsb    odsm_open_input
  201.     jsb    reset_inputs
  202.  
  203. odsm_get_command:
  204.     pushaw    odsm_command
  205.     pushaq    odsm_prompt
  206.     pushaq    odsm_command_ds
  207.     calls    #3, g^lib_get_input
  208.     blbc    r0, odsm_input_error    ; get out if any problems occurred
  209.     tstw    odsm_command        ; was a command entered ?
  210.     bneq    10$
  211.     jmp    odsm_exit_die
  212.  
  213. 10$:    pushaq    odsm_command
  214.     calls    #1, g^str_uppercase
  215.     movzwl    odsm_command, -        ; move the command descriptor to
  216.         odsm_parse_ctrl+tpa$l_stringcnt ; the control block so that
  217.     movab    odsm_command_t, -    ; lib$tparse knows what to look at
  218.         odsm_parse_ctrl+tpa$l_stringptr
  219.     pushab    start_keyword_tbl    ; that's the keyword table to use
  220.     pushab    start_state_tbl        ; that's the state table to use
  221.     pushab    odsm_parse_ctrl        ; that's the control block
  222.     calls    #3, g^lib$tparse    ; let's parse the command
  223.     blbs    r0, 20$            ; any errors ?
  224.     jsb    odsm_syntax_error    ; go do some error processing
  225. 20$:    brw    odsm_get_command
  226.  
  227. odsm_nasty:
  228.     display    odsm_fatal        ; say we've got a problem
  229.     jmp    odsm_exit_die
  230.  
  231. odsm_input_error:
  232.     cmpl    r0, #rms$_eof        ; did they do a ^Z ?
  233.     beql    10$            ; yes, don't report an error
  234.     tstw    odsm_command        ; did they give a response ?
  235.     beql    10$            ; no, just go away
  236.     display_error
  237. 10$:    brw    odsm_exit_die
  238.  
  239. odsm_syntax_error:
  240.     movl    r0, odsm_msgsts        ; in case we need it later
  241.     cmpl    r0, #lib$_invtype    ; is it a table problem ?
  242.     bneq    10$            ; no, try some other tests
  243.     display_error odsm_msgsts
  244.     display    odsm_badtable        ; say our parse table is rs
  245.     brw    90$            ; and bail out
  246. 10$:    cmpl    r0, #lib$_syntaxerr    ; was it a syntax error ?
  247.     beql    20$            ; yes, check for ambiguity as well
  248.     display_error odsm_msgsts
  249.     brw    90$            ; and bail out
  250. 20$:    movaq    odsm_parse_ctrl+tpa$l_tokencnt, r0
  251.     bbs    #tpa$v_ambig, -        ; here we check to see if the word
  252.         odsm_parse_ctrl+tpa$l_options, - ; was ambiguous so we can
  253.         30$            ; give our message
  254.     $fao_s    ctrstr=odsm_confused, -
  255.         outbuf=odsm_faobuf_ds, -
  256.         outlen=odsm_faobuf, -
  257.         p1=#odsm_syntaxerr, -
  258.         p2=r0            ; that's the confusing bit
  259.     brw    40$
  260. 30$:    $fao_s    ctrstr=odsm_ambiguous, -
  261.         outbuf=odsm_faobuf_ds, -
  262.         outlen=odsm_faobuf, -
  263.         p1=r0            ; that's the ambiguous bit
  264. 40$:    display    odsm_faobuf
  265. 90$:    rsb
  266.  
  267.     .entry -        ; exit without displaying any messages but
  268. odsm_exit, ^m<>            ; leave the status value intact
  269. odsm_exit_die::
  270.     display    blank_line
  271.     bisl    #sts$m_inhib_msg, r0
  272.     $exit_s    code=r0
  273.     ret
  274.  
  275.     set_psect _odsm_data_ro
  276. odsm_incomplete:    .ascid    "!/?!AS what?"
  277. odsm_no_can_do:        .ascid    \!/"!AS" is not a thing that I can do\
  278.     reset_psect
  279.  
  280.     .entry -            ; tell them that what they type was
  281. odsm_not_possible, ^m<>            ; not something we can do
  282.     $fao_s    ctrstr=odsm_no_can_do, -
  283.         outbuf=odsm_faobuf_ds, -
  284.         outlen=odsm_faobuf, -
  285.         p1=#odsm_command
  286.     display    odsm_faobuf
  287.     ret
  288.  
  289.     .entry -        ; tell them that their command was lacking
  290. odsm_short_command, ^m<>    ; in substance
  291.     $fao_s    ctrstr=odsm_incomplete, -
  292.         outbuf=odsm_faobuf_ds, -
  293.         outlen=odsm_faobuf, -
  294.         p1=#odsm_command
  295.     display    odsm_faobuf
  296.     ret
  297.  
  298.     .entry -        ; use implicit processing of blanks
  299. odsm_blanks_off, ^m<>
  300.     bbcc    #tpa$v_blanks, tpa$l_options(ap), 10$
  301. 10$:    ret
  302.  
  303.     .entry -        ; use explicit processing of blanks
  304. odsm_blanks_on, ^m<>
  305.     bbss    #tpa$v_blanks, tpa$l_options(ap), 10$
  306. 10$:    ret
  307.  
  308. odsm_set_ctrlcast::
  309.     $qiow_s    chan=odsm_tt_chan, -
  310.         func=#<io$_setmode!io$m_ctrlcast>, -
  311.         p1=odsm_exit, -
  312.         p3=#3
  313.     rsb
  314.  
  315.     .subtitle RMS data areas for disk data base
  316.  
  317.     set_psect _odsm_data_rw
  318.  
  319. list_key:    .long    1        ; default to secondary key for list
  320. odsm_record:    .blkb    odsm_s_odsmdef
  321. odsmsrh_record:    .blkb    odsm_s_odsmdef
  322.  
  323.     alloc_string    odsm_res_filespec, 255
  324.  
  325. odsm_mbf=16
  326. odsm_rtv=255
  327.  
  328.     .align    long
  329. odsm_fab:
  330.     $fab    fac=<GET,PUT,DEL,UPD>, -
  331.         fop=<NAM,DFW>, -
  332.         fnm=<ODSM_DISKS>, -
  333.         dnm=<ODSM_DATA:ODSM_DISKS.DATA>, -
  334.         mrs=odsm_s_odsmdef, -
  335.         nam=odsm_nam, -
  336.         org=<IDX>, -
  337.         rat=<CR>, -
  338.         rfm=<FIX>, -
  339.         rtv=odsm_rtv, -
  340.         shr=<GET,PUT,DEL,UPD>, -
  341.         xab=odsm_all0
  342.     .align    long
  343. odsm_all0:
  344.     $xaball    aid=0, -
  345.         alq=24, -
  346.         aop=<CBT>, -
  347.         bkz=12, -
  348.         deq=12, -
  349.         nxt=odsm_all1
  350.     .align    long
  351. odsm_all1:
  352.     $xaball    aid=1, -
  353.         alq=24, -
  354.         aop=<CBT>, -
  355.         bkz=12, -
  356.         deq=12, -
  357.         nxt=odsm_all2
  358.     .align    long
  359. odsm_all2:
  360.     $xaball    aid=2, -
  361.         alq=6, -
  362.         aop=<CBT>, -
  363.         bkz=3, -
  364.         deq=6, -
  365.         nxt=odsm_key0
  366.     .align    long
  367. odsm_key0:
  368.     $xabkey    ref=0, -
  369.         dan=0, -
  370.         dtp=<STG>, -
  371.         ian=1, -
  372.         prolog=3, -
  373.         pos=odsm_t_device, -
  374.         siz=odsm_k_keylength, -
  375.         nxt=odsm_key1
  376.     .align    long
  377. odsm_key1:
  378.     $xabkey    ref=1, -
  379.         dan=2, -
  380.         dtp=<STG>, -
  381.         ian=2, -
  382.         pos=<odsm_t_volnam,odsm_t_device>, -
  383.         siz=<odsm_s_volnam,odsm_s_device>
  384.     .align    long
  385. odsm_nam:
  386.     $nam
  387.     .align    long
  388. odsm_rab:
  389.     $rab     fab=odsm_fab, -
  390.         mbf=odsm_mbf, -
  391.         rac=<KEY>, -
  392.         rop=<WAT,RLK,LOA>, -
  393.         krf=0, -
  394.         ksz=odsm_k_keylength, -
  395.         kbf=odsmsrh_record, -
  396.         usz=odsm_k_length, -
  397.         ubf=odsm_record
  398.  
  399.     reset_psect
  400.  
  401.     .subtitle Open and Close routines for disk data base
  402.  
  403. odsm_open_input::
  404.  
  405.     movb    #odsm_res_filespec_s, -
  406.         odsm_nam+nam$b_ess
  407.     movab    odsm_res_filespec_t, -
  408.         odsm_nam+nam$l_esa
  409.     $open    fab=odsm_fab
  410.     blbs    r0, 10$
  411.     $create    fab=odsm_fab
  412.  
  413. 10$:    $connect rab=odsm_rab
  414.     movzbl    odsm_nam+nam$b_esl, -
  415.         odsm_res_filespec
  416.     $fao_s    ctrstr=using_file, -
  417.         outbuf=odsm_faobuf_ds, -
  418.         outlen=odsm_faobuf, -
  419.         p1=#updating_file, -
  420.         p2=#odsm_res_filespec
  421.     display    odsm_faobuf
  422.  
  423.     rsb
  424.  
  425. odsm_close_input::
  426.  
  427.     $close    fab=odsm_fab
  428.  
  429.     rsb
  430.  
  431.     .subtitle Process the requested option, routine to reset inputs
  432.  
  433.     .entry -
  434. odsm_process_option, ^m<>
  435.  
  436.     $rab_store -
  437.         rab=odsm_rab, -
  438.         rac=<KEY>, -
  439.         rop=<WAT,RLK,LOA>, -
  440.         krf=#0, -
  441.         ksz=#odsm_k_keylength, -
  442.         kbf=odsmsrh_record, -
  443.         usz=#odsm_k_length, -
  444.         ubf=odsm_record
  445.  
  446.     bbs    #v_addition, inp_option, 10$
  447.     bbs    #v_deletion, inp_option, 20$
  448.     bbc    #v_set, inp_option, 90$
  449.  
  450. 10$:    jsb    update_record
  451.     brb    90$
  452.  
  453. 20$:    jsb    delete_record
  454.  
  455. 90$:    jsb    reset_inputs
  456.  
  457.     movl    #1, r0
  458.  
  459.     ret
  460.  
  461. reset_inputs::
  462.  
  463.     clrl    inp_option
  464.     clrl    inp_data
  465.     clrq    inp_disk
  466.     clrq    inp_label
  467.     clrq    inp_host
  468.     movl    #def_minimum, -
  469.         inp_minimum
  470.     movl    #def_maximum, -
  471.         inp_maximum
  472.  
  473.     rsb
  474.  
  475.     .subtitle Create, Update and Delete routines
  476.  
  477. create_record::
  478.  
  479.     pushr    #^m<r2,r9,r10>
  480.  
  481.     $rab_store -
  482.         rab=odsm_rab, -
  483.         rsz=#odsm_k_length, -
  484.         rbf=odsmsrh_record
  485.     $put    rab=odsm_rab
  486.     display_error
  487.     blbc    r0, 90$
  488.     movab    record_added, r10
  489.     movl    odsm_rab+rab$l_rbf, r9
  490.     jsb    format_record
  491.  
  492. 90$:    popr    #^m<r2,r9,r10>
  493.  
  494.     rsb
  495.  
  496. update_record::
  497.  
  498.     pushr    #^m<r2,r3,r4,r5,r9,r10>
  499.  
  500.     jsb    load_record
  501.     $get    rab=odsm_rab
  502.     blbs    r0, 10$
  503.     jsb    create_record        ; create it if it doesn't exist
  504.     $get    rab=odsm_rab
  505.     brw    90$
  506.  
  507. 10$:    display_error
  508.     blbs    r0, 15$
  509.     brw    90$
  510.  
  511. 15$:    bbc    #v_host, inp_data, 20$
  512.     movc5    inp_host, -
  513.         @inp_host_addr, #space, -
  514.         #odsm_s_host, -
  515.         odsmsrh_record+odsm_t_host
  516. 20$:    bbc    #v_minimum, inp_data, 30$
  517.     movb    inp_minimum, -
  518.         odsmsrh_record+odsm_b_minimum
  519. 30$:    bbc    #v_maximum, inp_data, 40$
  520.     movb    inp_maximum, -
  521.         odsmsrh_record+odsm_b_maximum
  522. 40$:    bbc    #v_label, inp_data, 50$
  523.     movc5    inp_label, -
  524.         @inp_label_addr, #space, -
  525.         #odsm_s_volnam, -
  526.         odsmsrh_record+odsm_t_volnam
  527.  
  528. 50$:    $rab_store -
  529.         rab=odsm_rab, -
  530.         rsz=#odsm_k_length, -
  531.         rbf=odsmsrh_record
  532.     $update    rab=odsm_rab
  533.     display_error
  534.     blbc    r0, 90$
  535.     movab    record_set, r10
  536.     movl    odsm_rab+rab$l_rbf, r9
  537.     jsb    format_record
  538.  
  539. 90$:    popr    #^m<r2,r3,r4,r5,r9,r10>
  540.  
  541.     rsb
  542.  
  543. delete_record::
  544.  
  545.     pushr    #^m<r9,r10>
  546.  
  547.     jsb    load_record
  548.     $get    rab=odsm_rab
  549.     display_error
  550.     blbc    r0, 90$
  551.     $delete    rab=odsm_rab
  552.     display_error
  553.     blbc    r0, 90$
  554.     movab    record_deleted, r10
  555.     movl    odsm_rab+rab$l_rbf, r9
  556.     jsb    format_record
  557.  
  558. 90$:    popr    #^m<r9,r10>
  559.  
  560.     rsb
  561.  
  562. load_record::
  563.  
  564.     pushr    #^m<r2,r3,r4,r5>
  565.  
  566.     movq    inp_disk, r0
  567.     cmpw    r0, #odsm_s_device
  568.     beqlu    10$
  569.     addl3    r0, r1, r2
  570.     cmpb    #^A/:/, -(r2)
  571.     beqlu    10$
  572.     movb    #^A/:/, (r0)+[r1]
  573. 10$:    movc5    r0, (r1), #space, -
  574.         #odsm_s_device, -
  575.         odsmsrh_record+odsm_t_device
  576.     movq    inp_label, r0
  577.     movc5    r0, (r1), #space, -
  578.         #odsm_s_volnam, -
  579.         odsmsrh_record+odsm_t_volnam
  580.     movq    inp_host, r0
  581.     movc5    r0, (r1), #space, -
  582.         #odsm_s_host, -
  583.         odsmsrh_record+odsm_t_host
  584.     movb    inp_minimum, -
  585.         odsmsrh_record+odsm_b_minimum
  586.     movb    inp_maximum, -
  587.         odsmsrh_record+odsm_b_maximum
  588.  
  589.     $rab_store -
  590.         rab=odsm_rab, -
  591.         rsz=#odsm_k_length, -
  592.         rbf=odsmsrh_record, -
  593.         usz=#odsm_k_length, -
  594.         ubf=odsmsrh_record
  595.  
  596.     popr    #^m<r2,r3,r4,r5>
  597.  
  598.     rsb
  599.  
  600.     .subtitle Process a record for output
  601.  
  602. format_record::
  603.  
  604. ; Inputs:
  605. ;    R9    Address of the input record
  606. ;    R10    Descriptor of the added/deleted word
  607.  
  608.     addl3    #odsm_t_device, r9, r0
  609.     addl3    #odsm_t_volnam, r9, r1
  610.     addl3    #odsm_t_host, r9, r2
  611.     movzwl    r10, r10
  612.     $fao_s    ctrstr=dump_fao, -
  613.         outbuf=odsm_faobuf_ds, -
  614.         outlen=odsm_faobuf, -
  615.         p1=r10, -
  616.         p2=#odsm_s_device, -
  617.         p3=r0, -
  618.         p4=#odsm_s_volnam, -
  619.         p5=r1, -
  620.         p6=#odsm_s_host, -
  621.         p7=r2, -
  622.         p8=odsm_b_minimum(r9), -
  623.         p9=odsm_b_maximum(r9)
  624.     display    odsm_faobuf
  625.  
  626.     rsb
  627.  
  628.     .subtitle List the disk data base
  629.  
  630.     .entry -
  631. odsm_list_file, ^m<r2,r3,r4,r5,r9>
  632.  
  633.     display    blank_line
  634.     movc5    #0, odsmsrh_record, #nul, -
  635.         #odsm_k_keylength, -
  636.         odsmsrh_record
  637.     $rab_store -
  638.         rab=odsm_rab, -
  639.         rac=<KEY>, -
  640.         rop=<KGE>, -
  641.         krf=list_key, -
  642.         ksz=#odsm_k_keylength, -
  643.         kbf=odsmsrh_record
  644.     $get    rab=odsm_rab
  645.     blbc    r0, 90$
  646.     $rab_store -
  647.         rab=odsm_rab, -
  648.         rac=<SEQ>, -
  649.         rop=<NXT>
  650.  
  651. 10$:    movl    odsm_rab+rab$l_rbf, r9
  652.     jsb    show_a_disk
  653.     $get    rab=odsm_rab
  654.     blbs    r0, 10$
  655.  
  656. 90$:    jsb    reset_inputs
  657.     display    blank_line
  658.     movl    #1, r0
  659.  
  660.     ret
  661.  
  662. show_a_disk::
  663.  
  664. ; Inputs:
  665. ;    R9    Address of the record
  666.  
  667.     addl3    #odsm_t_device, r9, r0
  668.     addl3    #odsm_t_volnam, r9, r1
  669.     addl3    #odsm_t_host, r9, r2
  670.     $fao_s    ctrstr=list_fao, -
  671.         outbuf=odsm_faobuf_ds, -
  672.         outlen=odsm_faobuf, -
  673.         p1=#odsm_s_device, -
  674.         p2=r0, -
  675.         p3=#odsm_s_volnam, -
  676.         p4=r1, -
  677.         p5=#odsm_s_host, -
  678.         p6=r2, -
  679.         p7=odsm_b_minimum(r9), -
  680.         p8=odsm_b_maximum(r9)
  681.     display    odsm_faobuf
  682.  
  683.     rsb
  684.  
  685.     .entry -
  686. set_list_device, ^m<>
  687.  
  688.     movl    #0, list_key
  689.     calls    #0, g^odsm_list_file
  690.  
  691.     ret
  692.  
  693.     .entry -
  694. set_list_label, ^m<>
  695.  
  696.     movl    #1, list_key
  697.     calls    #0, g^odsm_list_file
  698.  
  699.     ret
  700.  
  701.     .subtitle Routines to set values to NONE
  702.  
  703.     .entry -
  704. set_label_none, ^m<>
  705.  
  706.     clrq    inp_label
  707.     movl    #1, r0
  708.  
  709.     ret
  710.  
  711.     .entry -
  712. set_host_none, ^m<>
  713.  
  714.     clrq    inp_host
  715.     movl    #1, r0
  716.  
  717.     ret
  718.  
  719.     .entry -
  720. set_minimum_none, ^m<>
  721.  
  722.     movl    #minimum_none, -
  723.         inp_minimum
  724.     movl    #1, r0
  725.  
  726.     ret
  727.  
  728.     .entry -
  729. set_maximum_none, ^m<>
  730.  
  731.     movl    #maximum_none, -
  732.         inp_maximum
  733.     movl    #1, r0
  734.  
  735.     ret
  736.  
  737.  
  738.     .subtitle Parser state and transition defintions for start
  739.  
  740. $init_state start_state_tbl, start_keyword_tbl
  741.  
  742.     $state start
  743.     $tran    tpa$_eos    ,tpa$_exit
  744.     $tran    'EXIT'        ,tpa$_exit,odsm_exit
  745.     $tran    'ADD'        ,check_disk,,m_addition,inp_option
  746.     $tran    'DELETE'    ,check_disk,,m_deletion,inp_option
  747.     $tran    'SET'        ,check_disk,,m_set,inp_option
  748.     $tran    'LIST'        ,setup_list
  749.     $tran    'SHOW'        ,setup_list
  750.  
  751.     $state check_disk
  752.     $tran    tpa$_eos    ,tpa$_exit,odsm_short_command
  753.     $tran    'DISK'        ,save_disk,,m_disk,inp_data
  754.     $tran    'DEVICE'    ,save_disk,,m_disk,inp_data
  755.  
  756.     $state get_data
  757.     $tran    tpa$_eos    ,tpa$_exit,odsm_process_option
  758.     $tran    'LABEL'        ,save_label,,m_label,inp_data
  759.     $tran    'NAME'        ,save_label,,m_label,inp_data
  760.     $tran    'VOLUME'    ,save_label,,m_label,inp_data
  761.     $tran    'HOST'        ,save_host,,m_host,inp_data
  762.     $tran    'MINIMUM'    ,save_minimum,,m_minimum,inp_data
  763.     $tran    'MAXIMUM'    ,save_maximum,,m_maximum,inp_data
  764.  
  765.     $state save_disk
  766.     $tran    tpa$_eos    ,tpa$_exit,odsm_short_command
  767.     $tran    tpa$_filespec    ,get_data,,,inp_disk
  768.  
  769.     $state save_label
  770.     $tran    tpa$_eos    ,tpa$_exit,odsm_short_command
  771.     $tran    'NONE'        ,get_data,set_label_none
  772.     $tran    tpa$_filespec    ,get_data,,,inp_label
  773.  
  774.     $state save_host
  775.     $tran    tpa$_eos    ,tpa$_exit,odsm_short_command
  776.     $tran    'NONE'        ,get_data,set_host_none
  777.     $tran    tpa$_filespec    ,get_data,,,inp_host
  778.  
  779.     $state save_minimum
  780.     $tran    tpa$_eos    ,tpa$_exit,odsm_short_command
  781.     $tran    'NONE'        ,get_data,set_minimum_none
  782.     $tran    tpa$_decimal    ,get_data,,,inp_minimum
  783.  
  784.     $state save_maximum
  785.     $tran    tpa$_eos    ,tpa$_exit,odsm_short_command
  786.     $tran    'NONE'        ,get_data,set_maximum_none
  787.     $tran    tpa$_decimal    ,get_data,,,inp_maximum
  788.  
  789.     $state setup_list
  790.     $tran    tpa$_eos    ,tpa$_exit,odsm_list_file
  791.     $tran    'BY'        ,setup_list_by
  792.     $tran    'DEVICE'    ,tpa$_exit,set_list_device
  793.     $tran    'DISK'        ,tpa$_exit,set_list_device
  794.     $tran    'LABEL'        ,tpa$_exit,set_list_label
  795.     $tran    'NAMES'        ,tpa$_exit,set_list_label
  796.     $tran    'VOLUME'    ,tpa$_exit,set_list_label
  797.  
  798.     $state setup_list_by
  799.     $tran    tpa$_eos    ,tpa$_exit,odsm_short_command
  800.     $tran    'DEVICE'    ,tpa$_exit,set_list_device
  801.     $tran    'DISK'        ,tpa$_exit,set_list_device
  802.     $tran    'LABEL'        ,tpa$_exit,set_list_label
  803.     $tran    'NAMES'        ,tpa$_exit,set_list_label
  804.     $tran    'VOLUME'    ,tpa$_exit,set_list_label
  805.  
  806. $end_state
  807.  
  808.     .end    odsm_start
  809.