program QAvailable; { QMS related utility / NwTP 0.5 API. (c) 1993,1994, R.Spronk } uses nwMisc,nwBindry,nwQMS; Var Qname :string; QobjId:Longint; Qtype :word; BinAccLev:Byte; MyObjId :Longint; MyObjName:string; MyObjType:word; SegNbr :Byte; propName :string; propValue:Tproperty; moreSeg :boolean; propFlags:byte; i :Byte; GrpObjId :Longint; GrpObjName:string; GrpObjType:word; begin {--- Parameter section } if paramCount<>1 then begin writeln('QAVAIL usage: QAVAIL '); writeln('Batch file utility to check for the availability of queues.'); writeln; writeln('Errorlevel 0 : Queue exists, calling user is allowed to use Queue'); writeln(' 1 : Queue doesn''t exist on default fileserver.'); writeln(' 2 : Queue exists but calling user has no Queue rights.'); halt(1); { No queue available } end; Qname:=ParamStr(1); {--- Startup checks } IF Not (IsShellLoaded and IsUserLoggedOn) then halt(1); { Queue not available } {--- Queue name in bindery of effective server ? } UpString(Qname); IF not GetBinderyObjectId(Qname,3 {ot_print_queue},QobjId) then halt(1); {--- Queue exists. Does the caller have rights to use the queue ? } IF NOT (GetBinderyAccessLevel(BinAccLev,MyObjId) and GetBinderyObjectName(MyObjId,MyObjName,MyObjType)) then halt(1); { Oops.. some kind of bindery error } IF IsBinderyObjectInSet(Qname,3 {OT_PRINT_QUEUE},'Q_USERS',MyObjName, MyObjType) then halt(0); { OK. Caller has rights } if nwbindry.result=$FB { According to QMS definitions, when the property } then halt(0); { Q_USERS doesn't exist, all users have queue rights. } {--- Is one of the groups I'm a member of a queue user ? } SegNbr:=1; propName:='GROUPS_I''M_IN'; While ReadPropertyValue(MyObjName,MyObjType,propName,SegNbr, propValue,moreSeg,propFlags) do begin { A segment of a set-property consists of a list of object IDs, each ID 4 bytes long, stored hi-lo. The end of the list (within THIS segment) is marked by an ID of 00000000. } i:=1; Repeat GrpObjId:=MakeLong((propValue[i] *256 +propValue[i+1]), ( propValue[i+2] *256 + propValue[i+3] ) ); if GrpObjId<>0 then begin IF GetBinderyObjectName(GrpObjId,GrpObjName,GrpObjType) and IsBinderyObjectInSet(Qname,3 {OT_PRINT_QUEUE}, 'Q_USERS',GrpObjName, GrpObjType) then halt(0); { OK. Caller's group has queue rights } end; inc(i,4); Until (i>128) or (GrpObjId=0); inc(SegNbr); end; {--- Still no rights found.. } halt(2); end.