929 lines
29 KiB
Plaintext
Executable File
929 lines
29 KiB
Plaintext
Executable File
*******************************************************************************
|
|
*
|
|
* 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
|