tldm-universe/Ardent/UV/BP/GROP.ADMIN.B

929 lines
29 KiB
Plaintext
Raw Permalink Normal View History

2024-09-09 21:51:08 +00:00
*******************************************************************************
*
* New System Admin - The subroutine GROP.ADMIN.B is used for the
* creation, deletion, and modification of unix level groups.
*
* Module %M% Version %I% Date %H%
*
* (c) Copyright 1998 Ardent Software Inc. - All Rights Reserved
* This is unpublished proprietary source code of Ardent Software Inc.
* The copyright notice above does not evidence any actual or intended
* publication of such source code.
*
*******************************************************************************
*
* Maintenence log - insert most recent change descriptions at top
*
* Date.... GTAR# WHO Description.........................................
* 10/14/98 23801 SAP Change copyrights.
* 05/13/91 8345 DTM Changed print to tprint
* 05/05/91 8288 DTM Fixed problems with Working prompts
* 04/26/91 8222 DPB Added fixes needed for deletion of fields
* 04/05/91 7673 DTM Added support for F.4 key, and added menu bar help stuff
* 11/05/90 7393 DPB Routine first created and admin'd.
*******************************************************************************
SUBROUTINE GROP.ADMIN(operation)
$INCLUDE UNIVERSE.INCLUDE MTF.INCL.H
EQU FL TO form.line
EQU FLCLEAR TO form<form.line,6>
EQU CLEAR.HELP TO CALL *HELP.PRINT.B("",3)
EQU DEFAULT TO 1
EQU ACT.LOC TO 1
EQU PRMPT.LOC TO 2
EQU PRMPT.TXT TO 3
EQU SHORT.HELP TO 4
EQU LONG.HELP TO 5
EQU CLEAR.SPC TO 6
EQU INPUT.LEN TO 6
message.id=0
******************************************
* Misc. Variable for file n flow control *
******************************************
group.modify = 0 ;* Has the groups file been changed?
next.gid = 1 ;* 0 is root and always there.
* These flags should be read from a file of defaults.
input.form = "" ;* temp input form. set to blank
exiting = 0 ;* exit this routine.
cur.record = 0 ;* current record. 0=add,all else = modify
temp = ""
CALL *ISUSER.B(0,temp)
IF temp = 0 THEN
TPRINT UVREADMSG(071000,"")
SLEEP 3
STOP
END
GOSUB init.files
GOSUB init.form
GOSUB init.menu.bar
GOSUB gid.next
CALL *DRAW.SCRN.B("",1)
Beginning:
BEGIN CASE
CASE operation = 1
IF only.once # 0 THEN
FOR I = 1 to pass.args<1>
input.form<pass.args<I*2>>= pass.args<(I*2)+1>
defaults<pass.args<I*2>>= pass.args<(I*2)+1>
NEXT I
END
CALL *MNU.BAR.PR.B(Menu.Bar,1)
GOTO add
CASE operation = 2
IF only.once # 0 THEN
cur.record = pass.args<2>
FOR I = 1 to pass.args<1>
input.form<pass.args<I*2+1>>= pass.args<(I*2)+2>
NEXT I
CALL *DRAW.SCRN.B(UVREADMSG(071002,""),2)
CALL *MNU.BAR.PR.B(Menu.Bar,1)
GOTO modify.form.loop
END
CALL *MNU.BAR.PR.B(Menu.Bar,1)
GOTO modify.list
CASE operation = 3
GOTO delete.list
END CASE
GOTO add
RETURN
*****************************************************************************
* Don't really draw the screen, but actually put the title on the top line
* of the screen.
*****************************************************************************
add:
cur.record = 0
CALL *DRAW.SCRN.B(UVREADMSG(071001,""),2)
CALL *HELP.PRINT.B(Key.Help.Str,2)
CALL *HELP.PRINT.B("",2)
*****************************************************************************
* Put the form in the data entrance area, along with any current defaults
* that might happen to exist. Also print the unactive prompt. Then set it up
* so that we start on the first line, and have no data in our input variable.
*****************************************************************************
add.form.loop:
CALL *PUT.FORM.B(form.size, form, defaults,PRMPT,1)
form.line = 1
input.form = defaults
add.help.loop:
CALL *HELP.PRINT.B(form<form.line,SHORT.HELP>,1)
add.input.loop:
TPRINT form<form.line,PRMPT.LOC>:
temp = input.form<form.line>
CALL *CINPUT.B(SEC.PRMPT,temp, special, form<FL,INPUT.LEN>,form<FL,7>)
IF special = NEXT.PAGE OR special = PREV.PAGE THEN GOTO add.input.loop
*****************************************************************************
* If the subroutine CINPUT.B returns a value in special which is not equal
* to 0 then the subroutine has received a special character, such as an
* ESCAPE, UP.ARROW, DOWN.ARROW, F1, or F10. If the 'variable' FL confuses
* you, please refer to the EQU at the top of this file.
*****************************************************************************
IF special # 0 THEN
GOSUB handle.special
IF exiting = 1 THEN RETURN
BEGIN CASE
******************
* F1 was Pressed *
******************
CASE special = F.1
CALL *HELP.PRINT.B(form<form.line,LONG.HELP>,3)
GOTO add.input.loop
******************
* F4 was Pressed *
******************
CASE special = F.4
IF FL = 1 THEN
temp="*"
GOTO new.enter
END
**********************
* ESCAPE was pressed *
**********************
CASE special = ESCAPE
IF only.once # 0 THEN
pass.args = ""
pass.args<1>=-1
END
IF group.modify THEN
CLEAR.HELP
flag=1
CALL *YES.NO.BOX.B(17, UVREADMSG(073066,"") ,flag)
IF flag = 1 THEN
GOSUB save.files
END
END
TPRINT @(-1):
RETURN
END CASE
GOTO add.help.loop
END
*****************************************************************************
* This is where we go if the subroutine CINPUT.B did NOT return any special
* code of any type. This means that we got a fairly good representation
* of actual data. But this actually needs to be checked for collisions, or if
* a CR is all that we get back we might need to actually to generate the next
* valid peice of data.
*****************************************************************************
ELSE
new.enter:
BEGIN CASE
CASE FL = 1
BEGIN CASE
CASE temp="*"
message.id=071033
GOSUB List.groups
temp=temp.array<sel.val,1>
input.form<form.line> = temp
CALL *PUT.FORM.B(form.size,form,input.form,PRMPT,1)
IF temp=-1 OR temp="" THEN GOTO add.help.loop
GOTO new.enter
CASE temp # ""
rec.no = 0
CALL *LOC.BY.FLD.B(group.array,group.count,1,1,temp,rec.no)
IF rec.no = 0 THEN
input.form<form.line> = temp
END
ELSE
flag = 0
CLEAR.HELP
CALL *YES.NO.BOX.B(17,UVREADMSG(071010,""),flag)
IF flag = 1 THEN
only.once += 1
pass.args<1>=2
pass.args<2>=rec.no
pass.args<3>=1
pass.args<4>= group.array<rec.no,1>
pass.args<5>=2
pass.args<6>=group.array<rec.no,3>
operation=2
GOTO Beginning
END
TPRINT form<FL,PRMPT.LOC>:PRMPT:input.form<FL>:
TPRINT STR(" ",FLCLEAR - LEN(input.form<FL>)):
GOTO add.help.loop
END
CASE DEFAULT
input.form<form.line> = ""
CLEAR.HELP
CALL *HELP.BOX.B(17,5,50, UVREADMSG(071004,""))
GOTO add.help.loop
END CASE
CASE FL = 2
BEGIN CASE
CASE temp = ""
input.form<FL>=next.gid
CASE NUM(temp) = 1
rec.no = 0
CALL *LOC.BY.FLD.B(group.array,group.count,1,3,temp,rec.no)
IF rec.no = 0 THEN
input.form<form.line> = temp
END
ELSE
CLEAR.HELP
CALL *HELP.BOX.B(17,5,68, UVREADMSG(071005,temp))
TPRINT form<FL,PRMPT.LOC>:PRMPT:input.form<FL>:
TPRINT STR(" ",FLCLEAR - LEN(input.form<FL>)):
GOTO add.help.loop
END
CASE DEFAULT
CLEAR.HELP
CALL *HELP.BOX.B( 17,5,50,UVREADMSG(071006,""))
TPRINT form<FL,PRMPT.LOC>:PRMPT:input.form<FL>:
TPRINT STR(" ",FLCLEAR - LEN(input.form<FL>)):
GOTO add.help.loop
END CASE
END CASE
TPRINT form<FL,PRMPT.LOC>:PRMPT:input.form<FL>:
TPRINT STR(" ",FLCLEAR-LEN(input.form<FL>)):
form.line += 1
IF form.line > form.size THEN
GOTO store.rec
END
ELSE GOTO add.help.loop
END
GOTO add.help.loop
RETURN
store.rec:
CLEAR.HELP
BEGIN CASE
CASE input.form<1> = ""
CALL *HELP.BOX.B(17,5,50, UVREADMSG(071004,""))
FL = 1
GOTO add.help.loop
CASE input.form<2> = ""
CALL *HELP.BOX.B(17,5,50, UVREADMSG(071004,""))
FL = 2
GOTO add.help.loop
END CASE
flag = 1
CALL *YES.NO.BOX.B(17, UVREADMSG(071007,"") , flag)
********************************************************************
* If we get a -1 then someone hit ESCAPE, so no changes, save info *
********************************************************************
IF flag = -1 THEN
form.line = 1
GOTO add.help.loop
END
**********************************************************************
* If we get a 0 then they said NO, so clear the info and input again *
**********************************************************************
ELSE IF flag = 0 THEN
CALL *HELP.BOX.B( 17,5,50,UVREADMSG(071008,""))
GOTO add.form.loop
END
***********************************************************************
* If we get here then they said YES, so save the info and input again *
***********************************************************************
CALL *HELP.BOX.B( 17,5,50,UVREADMSG(071009,""))
temp.rec = ""
temp.rec<1,1>=input.form<1>
temp.rec<1,2>=""
temp.rec<1,3>=input.form<2>
temp.rec<1,4>=""
ins temp.rec<1> BEFORE group.array<-1>
group.count += 1
GOSUB gid.next
*******************************************
* Someone has changed something somewhere *
*******************************************
IF group.modify = 0 THEN
group.modify = 1
END
IF only.once # 0 THEN
GOSUB save.files
only.once -= 1
pass.args=""
pass.args = 0
RETURN
END
GOTO add.form.loop
RETURN
delete.list:
CALL *DRAW.SCRN.B( UVREADMSG(071003,"") ,2)
message.id=071011
GOSUB List.groups
IF sel.val = -1 THEN
IF operation = 3 THEN
TPRINT @(-1)
END
RETURN
END
ntemp.array = ""
ntemp.array<1>=group.array<sel.val,1>
ntemp.array<2>=group.array<sel.val,3>
flag = 0
CALL *PUT.FORM.B(form.size,form,ntemp.array,PRMPT,1)
CLEAR.HELP
CALL *YES.NO.BOX.B(17, UVREADMSG(071012,"") ,flag)
IF flag = 1 THEN
CALL *PUT.FORM.B(form.size,form,temp.array,PRMPT,0)
str = UVREADMSG(071013,ntemp.array<1>)
title = UVREADMSG(071014,group.array<sel.val,1>)
ntemp.array = ""
ntemp.count = 0
FOR I = 1 to passwd.count
IF passwd.array<I,4> = group.array<sel.val,3> THEN
ntemp.count += 1
ntemp.array<ntemp.count,1> = passwd.array<I,1>
ntemp.array<ntemp.count,2> = I
END
NEXT I
DEL group.array<sel.val>
DEL temp.array<sel.val>
group.count -= 1
reassign.loop:
IF ntemp.count # 0 THEN
sel.val = 1
CALL *HELP.PRINT.B( UVREADMSG(071015,"") ,1)
CALL *LIST.BOX.B(title,4,11,ntemp.array,ntemp.count,1,sel.val,0)
IF sel.val # -1 THEN
CALL *HELP.PRINT.B( UVREADMSG(071016,ntemp.array<sel.val,1>),1)
sel2.val = 1
junk=UVREADMSG(071011,"")
CALL *LIST.BOX.B(junk,4,11,temp.array,group.count,2,sel2.val,0)
IF sel2.val = -1 THEN
GOTO reassign.loop
END
ELSE
passwd.array<ntemp.array<sel.val,2>,4> = temp.array<sel2.val,2>
CLEAR.HELP
flag = 1
junk.mess=UVREADMSG(071017,ntemp.array<sel.val,1>)
CALL *YES.NO.BOX.B(17,junk.mess, flag)
IF flag = 1 THEN
command = "SH -c 'find "
command:=passwd.array<ntemp.array<sel.val,2>,6>
command:=" -exec chgrp ":temp.array<sel2.val,2>
command:=" {} \; '"
EXECUTE command CAPTURING ERROR
END
DEL ntemp.array<sel.val>
ntemp.count -= 1
GOTO reassign.loop
END
GOTO reassign.loop
END
END
next.gid = 1
GOSUB gid.next
group.modify = 1
GOSUB save.files
END
ELSE
str = UVREADMSG(071018,ntemp.array<1>)
END
CLEAR.HELP
flag = 1
CALL *YES.NO.BOX.B(17, str, flag)
IF flag = 1 THEN
CALL *PUT.FORM.B(form.size, form, temp.array,PRMPT,0)
GOTO delete.list
END
ELSE
IF operation = 3 THEN TPRINT @(-1)
RETURN
END
RETURN
modify.list:
CALL *DRAW.SCRN.B( UVREADMSG(071002,"") ,2)
message.id=071011
GOSUB List.groups
IF sel.val = -1 THEN
IF operation = 2 THEN TPRINT @(-1)
RETURN
END
temp.array = ""
input.form<1>=group.array<sel.val,1>
input.form<2>=group.array<sel.val,3>
cur.record = sel.val
CALL *HELP.PRINT.B(Key.Help.Str,2)
modify.form.loop:
CALL *PUT.FORM.B(form.size,form,input.form,PRMPT,1)
form.line = 1
modify.help.loop:
CALL *HELP.PRINT.B(form<form.line,SHORT.HELP>,1)
modify.input.loop:
TPRINT form<form.line,PRMPT.LOC>:
temp = input.form<form.line>
special = 0
CALL *CINPUT.B(SEC.PRMPT, temp, special,form<form.line,6>,form<FL,7>)
IF special = NEXT.PAGE OR special = PREV.PAGE THEN GOTO modify.input.loop
IF special # 0 THEN
GOSUB handle.special
IF exiting = 1 THEN RETURN
BEGIN CASE
******************
* F1 was Pressed *
******************
CASE special = F.1
CALL *HELP.PRINT.B(form<form.line,LONG.HELP>,3)
GOTO modify.input.loop
**********************
* ESCAPE was pressed *
**********************
CASE special = ESCAPE
IF group.modify THEN
flag=1
CLEAR.HELP
CALL *YES.NO.BOX.B(17, UVREADMSG(073066,"") ,flag)
IF flag = 1 THEN
GOSUB save.files
END
END
IF only.once THEN
only.once -= 1
RETURN
END
ELSE
TPRINT @(-1):
END
RETURN
END CASE
GOTO modify.help.loop
END
*
* Something other than a special key was pressed.
*
ELSE
IF temp#input.form<form.line> THEN
BEGIN CASE
CASE FL = 1
BEGIN CASE
CASE temp # ""
rec.no = 0
CALL *LOC.BY.FLD.B(group.array, group.count, 1,1, temp, rec.no)
IF rec.no = 0 THEN
input.form<form.line> = temp
END
ELSE
CLEAR.HELP
CALL *HELP.BOX.B( 17,5,50,UVREADMSG(071019,""))
TPRINT form<FL,PRMPT.LOC>:PRMPT:input.form<FL>:
GOTO modify.help.loop
END
END CASE
CASE FL = 2
IF temp # "" THEN
CLEAR.HELP
CALL *HELP.BOX.B( 17,5,50,UVREADMSG(071020,""))
TPRINT form<FL,PRMPT.LOC>:PRMPT:input.form<FL>:
form.line=1
GOTO modify.help.loop
END
END CASE
END
TPRINT form<FL,PRMPT.LOC>:PRMPT:input.form<FL>:
TPRINT STR(" ",FLCLEAR-LEN(input.form<FL>)):
form.line += 1
IF form.line > 1 THEN
IF input.form<1> = group.array<cur.record,1> AND input.form<2> = group.array<cur.record,3> THEN
CLEAR.HELP
CALL *HELP.BOX.B( 17,5,50,UVREADMSG(071021,""))
IF only.once THEN
only.once -= 1
RETURN
END
ELSE
GOTO label.another
END
END
CLEAR.HELP
flag = 0
CALL *YES.NO.BOX.B(17, UVREADMSG(071022,""), flag)
*****************************************************************
* If we get a -1 then someone hit ESCAPE, no changes, save info *
*****************************************************************
IF flag = -1 THEN
form.line = 1
GOTO modify.help.loop
END
ELSE IF flag = 0 THEN
CLEAR.HELP
CALL *HELP.BOX.B(17,5,50, UVREADMSG(071021,""))
GOTO label.another
END
CALL *HELP.BOX.B( 17,5,50,UVREADMSG(071023,""))
group.array<cur.record,1>=input.form<1>
group.array<cur.record,3>=input.form<2>
*******************************************
* Someone has changed something somewhere *
*******************************************
IF group.modify = 0 THEN
group.modify = 1
END
GOSUB save.files
label.another:
IF only.once THEN
only.once -= 1
RETURN
END
CLEAR.HELP
flag = 1
CALL *YES.NO.BOX.B(17, UVREADMSG(071024,"") , flag)
IF flag = 1 THEN
CALL *PUT.FORM.B(form.size, form, input.form, PRMPT, 0)
CLEAR.HELP
GOTO modify.list
END
ELSE
*
* What this test is for is to see if we will be returning
* to the Toplevel menu or not. if operation = 2 then
* we will be returning.
*
IF operation = 2 THEN TPRINT @(-1)
form.line = 1
RETURN
END
END
ELSE GOTO modify.help.loop
END
GOTO modify.help.loop
RETURN
handle.special:
BEGIN CASE
CASE special = F.10
temp = 1
CALL *DO.MNU.BAR.B(Menu.Bar, temp, form.size, form, input.form)
BEGIN CASE
CASE temp = 1
IF group.modify = 1 THEN
flag = 1
CALL *PUT.FORM.B(form.size, form, input.form, PRMPT,1)
CLEAR.HELP
CALL *YES.NO.BOX.B(17, UVREADMSG(073066,"") ,flag)
IF flag = 1 THEN
GOSUB save.files
END
ELSE
CALL *HELP.BOX.B(17,5,50,UVREADMSG(071026,""))
END
END
ELSE
CALL *HELP.BOX.B(17,5,50,UVREADMSG(071027,""))
END
CASE temp = 2
IF group.modify = 1 THEN
flag = 0
CALL *PUT.FORM.B(form.size, form, input.form, PRMPT,1)
CLEAR.HELP
CALL *YES.NO.BOX.B(17, UVREADMSG(071028,"") ,flag)
IF flag = 1 THEN
GOSUB init.files
CALL *HELP.PRINT.B( UVREADMSG(071029,"") ,2)
END
ELSE
CALL *HELP.PRINT.B( UVREADMSG(071030,"") ,2)
END
END
ELSE
CALL *HELP.PRINT.B( UVREADMSG(071031,"") ,2)
END
CASE temp = 3
IF group.modify = 1 THEN
CALL *PUT.FORM.B(form.size, form, input.form, PRMPT,1)
CLEAR.HELP
flag = 1
CALL *YES.NO.BOX.B(17, UVREADMSG(073066,"") ,flag)
IF flag = 1 THEN
GOSUB save.files
END
END
TPRINT @(-1):
exiting = 1
RETURN
CASE temp = 4
CALL *PUT.FORM.B(form.size, form, input.form, PRMPT, 0)
CLEAR.HELP
operation = 4
GOSUB modify.list
operation = 1
CALL *DRAW.SCRN.B(UVREADMSG(071001,""),2)
CALL *PUT.FORM.B(form.size, form, defaults, PRMPT, 0)
input.form = ""
CASE temp = 5
CALL *PUT.FORM.B(form.size, form, input.form, PRMPT, 0)
CLEAR.HELP
operation = 5
GOSUB delete.list
operation = 1
CALL *DRAW.SCRN.B(UVREADMSG(071001,""),2)
CASE temp = 6
message.id=071033
GOSUB List.groups
CASE temp = 7
sel.val = 1
CALL *HELP.BOX.B(3,11,60,CONVERT(@FM," ",UVREADMSG(071039,"")))
CALL *PUT.FORM.B(form.size, form, input.form,PRMPT,1)
CASE temp = 8
sel.val = 1
CALL *HELP.BOX.B(3,11,60,CONVERT(@FM," ",UVREADMSG(071040,"")))
CALL *PUT.FORM.B(form.size, form, input.form,PRMPT,1)
CASE temp = 9
sel.val = 1
CALL *HELP.BOX.B(3,11,60,CONVERT(@FM," ",UVREADMSG(071041,"")))
CALL *PUT.FORM.B(form.size, form, input.form,PRMPT,1)
CASE temp = 10
message=UVREADMSG(071042,"")
CONVERT @FM TO " " IN message
CALL *HELP.BOX.B(3,10,60,message)
CASE temp = 11
message=UVREADMSG(076001,"")
CONVERT @FM TO " " IN message
CALL *HELP.BOX.B(3,10,60,message)
CASE temp = 12
CALL *HELP.BOX.B(3,10,45,UVREADMSG(076000,""))
END CASE
CALL *PUT.FORM.B(form.size, form, input.form, PRMPT,1)
************************
* Up Arrow was Pressed *
************************
CASE special = UP.ARROW
TPRINT form<form.line,PRMPT.LOC>:PRMPT:
IF input.form<form.line> # "" THEN
TPRINT input.form<FL>:STR(" ",FLCLEAR-LEN(input.form<FL>)):
END
ELSE
TPRINT defaults<FL>:STR(" ",FLCLEAR-LEN(defaults<FL>)):
END
form.line -= 1
IF form.line < 1 THEN form.line = form.size
**************************
* Down Arrow was Pressed *
**************************
CASE special = DOWN.ARROW
TPRINT form<form.line,PRMPT.LOC>:PRMPT:
IF input.form<form.line> # "" THEN
TPRINT input.form<FL>:STR(" ",FLCLEAR-LEN(input.form<FL>)):
END
ELSE
TPRINT defaults<FL>:STR(" ",FLCLEAR-LEN(defaults<FL>)):
END
form.line += 1
IF form.line > form.size THEN form.line = 1
END CASE
RETURN
gid.next:
temp = 0
CALL *LOC.BY.FLD.B(group.array, group.count, 1, 3, next.gid, temp)
IF temp # 0 THEN
next.gid += 1
GOTO gid.next
END
RETURN
init.files:
IF etc.open # 1 THEN
OPENPATH "/etc" TO etc.file ELSE STOP UVREADMSG(071034,"")
etc.open = 1 ;* File is open!
END
group.modify = 0 ;* No changes
IF group.count = 0 THEN
CALL *RD.UNX.FIL.B(etc.file, "group", group.array, group.count)
END
IF passwd.count = 0 THEN
CALL *RD.UNX.FIL.B(etc.file, "passwd", passwd.array, passwd.count)
END
RETURN
save.files:
IF etc.open # 1 THEN
OPEN "etc" TO etc.file ELSE STOP UVREADMSG(071034,"")
etc.open = 1
END
temp = 0
CALL *WR.UNX.FIL.B(etc.file, "group", group.array, temp)
CALL *WR.UNX.FIL.B(etc.file, "passwd", passwd.array, temp)
IF operation = 1 THEN
CALL *HELP.BOX.B(17,5,50, UVREADMSG(071035,""))
END
group.modify = 0
RETURN
init.form:
Key.Help.Str = CONVERT(@FM, " ", UVREADMSG(071036,""))
form=""
scratch = UVREADMSG(071037,"")
form<1,1>=@(10,6)
form<1,2>=@(30,6)
form<1,3>=scratch<1>
form<1,4>=scratch<2>
form<1,5>=scratch<3>
form<1,6>=30
form<1,7>=0
form<2,1>=@(10,8)
form<2,2>=@(30,8)
form<2,3>=scratch<4>
form<2,4>=scratch<5>
form<2,5>=scratch<6>
form<2,6>=10
form<2,7>=0
defaults=""
defaults<1>=""
defaults<2>=""
form.size = 2
RETURN
List.groups:
temp.array=""
CALL *HELP.PRINT.B(UVREADMSG(073058,""),3)
FOR i=1 TO group.count
temp.array<i,1>=group.array<i,1>
temp.array<i,2>=group.array<i,3>
NEXT i
sel.val=1
mesg=UVREADMSG(message.id,"")
CALL *LIST.BOX.B(mesg,4,11,temp.array,group.count,2,sel.val,0)
CLEAR.HELP
RETURN
init.menu.bar:
IF operation = 3 THEN RETURN
* Current High Action Code is 12. The next new action should be 13.
* Action 4 is not used.
Menu.Bar = ""
Menu.Bar<1,1> = 3 ;* Number of Items in Menu.Bar
Menu.Bar<1,2> = 1 ;* Line # on which to print the Menu Bar
scratch = UVREADMSG(071038,"")
* First Item
Menu.Bar<2,1,1>=scratch<1> ;* SubMenu Title "File"
Menu.Bar<2,1,2>=3 ;* # of items in SubMenu
Menu.Bar<2,1,3>=scratch<2> ;* Help string for "File" Menu
* SubMenu #1
Menu.Bar<2,2,1>=scratch<3> ;* SubMenu Item "Save"
Menu.Bar<2,2,2>=1 ;* Action Code (Returned to calling process)
Menu.Bar<2,2,3>=scratch<4> ;* Help string for "Save"
Menu.Bar<2,3,1>=scratch<5> ;* SubMenu Item "Refresh"
Menu.Bar<2,3,2>=2 ;* Action Code
Menu.Bar<2,3,3>=scratch<6> ;* Help string for "Refresh"
Menu.Bar<2,4,1>=scratch<7> ;* SubMenu Item "Exit"
Menu.Bar<2,4,2>=3 ;* Action Code
Menu.Bar<2,4,3>=scratch<8> ;* Help string for "Exit"
* SubMenu #2
Menu.Bar<3,1,1>=scratch<9> ;* SubMenu Title "Action"
Menu.Bar<3,1,2>=3 ;* # of items in SubMenu
Menu.Bar<3,1,3>=scratch<10> ;* Help string for "Action"
Menu.Bar<3,2,1>=scratch<11> ;* SubMenu Item "Modify"
Menu.Bar<3,2,2>=4 ;* Action Code
Menu.Bar<3,2,3>=scratch<12> ;* Help string for "Modify"
Menu.Bar<3,3,1>=scratch<13> ;* SubMenu Item "Delete"
Menu.Bar<3,3,2>=5 ;* Action Code
Menu.Bar<3,3,3>=scratch<14> ;* Help string for "Delete"
Menu.Bar<3,4,1>=scratch<15> ;* SubMenu Item "List"
Menu.Bar<3,4,2>=6 ;* Action Code
Menu.Bar<3,4,3>=scratch<16> ;* Help string for "List"
* SubMenu #3
Menu.Bar<4,1,1>=scratch<17> ;* SubMenu Title
Menu.Bar<4,1,2>=6 ;* # of items in SubMenu
Menu.Bar<4,1,3>=scratch<18> ;* Help string for "Help"
Menu.Bar<4,2,1>=scratch<19> ;* SubMenu Item "on File"
Menu.Bar<4,2,2>=7 ;* Action Code
Menu.Bar<4,2,3>=scratch<20> ;* Help string for "on File"
Menu.Bar<4,3,1>=scratch<21> ;* SubMenu Item "on Action"
Menu.Bar<4,3,2>=8 ;* Action Code
Menu.Bar<4,3,3>=scratch<22> ;* Help string for "on Action"
Menu.Bar<4,4,1>=scratch<23> ;* Submenu Item "on Help"
Menu.Bar<4,4,2>=9 ;* Action Code
Menu.Bar<4,4,3>=scratch<24> ;* Help string for "on Help"
* Added by DTM 4/5/91
scratch=UVREADMSG(073089,"")
Menu.Bar<4,5,1>=scratch<2>
Menu.Bar<4,5,2>=10
Menu.Bar<4,5,3>=scratch<3>
Menu.Bar<4,6,1>=scratch<4>
Menu.Bar<4,6,2>=11
Menu.Bar<4,6,3>=scratch<5>
Menu.Bar<4,7,1>=scratch<6>
Menu.Bar<4,7,2>=12
Menu.Bar<4,7,3>=scratch<7>
RETURN
End.Loop:
only.once=0
pass.args=""
CLOSE etc.file
etc.open=0
CLOSE uv.acct
uv.acct.open=0
passwd.count=0
passwd.array=""
group.array=""
group.count=0
STOP @(-1)
RETURN
END