home *** CD-ROM | disk | FTP | other *** search
- {
- Turbo Pascal 5.0 example program for Novell Netware interface
- Novell functions are declared in PASNETA unit rather than the main program.
-
- based on TPNET.ZIP for versions of Turbo Pascal prior to 4.0
-
- Donald M. DeLapp
- 485 S. Sheridan Ave.
- Sheridan, WY 82801
- 307-674-6841
- }
-
- { This program has been designed to give software developers an example of how to
- interface with the assembly library provided. The library has been revised
- and the version contained on this disk should be used in place of the original
- library that came with the programmers' guide diskette. The programmmers'guide
- will help provide a better understanding of what parameters each call
- needs and how each function works. The following declaration needs to made
- whenever the library routines are accessed, since all function calls are
- referenced from the "xtndopn" function.
- BE SURE AND DECLARE THE FOLLOWING:
- function xtndopn(var mode,handle:integer;var filename:str):integer; external 'PASNETA.COM'; }
-
- {===========================================================================================}
- {$V-}
-
- program FuncInterface;
-
- Uses Dos, Crt, PASNETA;
-
- type str = string[52];
-
- var
- hex,filename,asciiz,sema4,recstr,request,reply: str;
- Handle, retcode, Hoff, Loff, HLen, LLen, FLAG, TMO, Func, Attribute: integer;
- semavalu,Hihandle,Lohandle,opencnt,volume,newserv: integer;
- I, Len, mode, seg, off: integer;
- ans: char;
-
- {pasneta.pas
- this file contains the function and procedure declarations
- for the TurboPascal/Advanced NetWare interface}
-
- type
- Strvar = String[52];
-
- {removed for TP 5.0-----------------------------------------------------------
- function xtndopn(var Mode, Handle: Integer;var Filename: Strvar): Integer; external 'PASNETA.COM';
- function setattr(var Func, Attribute: Integer; var Filename: Strvar): Integer; external xtndopn[3];
- function eojstat(var Flag: Integer):integer; external xtndopn[6];
- function PRLH_Log(var FileHandle,HiByteOffset,LoByteOffset,HiLockLen,
- LoLockLen,Flags,TimeOut: Integer): Integer; external xtndopn[9];
- function PRLH_Rel(var FileHandle,HiByteOffset,LoByteOffset,HiLockLen,
- LoLockLen: Integer): Integer; external xtndopn[12];
- function PRLH_Clr(var FileHandle,HiByteOffset,LoByteOffset,HiLockLen,
- LoLockLen: Integer): Integer; external xtndopn[15];
- function PRLF_Log(var fcb,HiByteOffset,LoByteOffset,HiLockLen,LoLockLen,
- Flags,TimeOut: Integer): Integer; external xtndopn[18];
- function PRLF_Rel(var fcb,HiByteOffset,LoByteOffset: Integer): Integer; external xtndopn[21];
- function PRLF_Clr(var fcb,HiByteOffset,LoByteOffset: Integer): Integer; external xtndopn[24];
- function PRLS_Lck(var Flags,TimeOut: Integer): Integer; external xtndopn[27];
- function PRLS_Rel: Integer; external xtndopn[30];
- function PRLS_Clr: Integer; external xtndopn[33];
- function OpenSem(var Sema4: Strvar; var SemaValu,HiHandle,LoHandle,OpenCnt: Integer): Integer; external xtndopn[36];
- function ExamSem(var HiHandle,LoHandle,SemaValu,OpenCnt: Integer): Integer; external xtndopn[39];
- function WaitSem(var HiHandle,LoHandle,TimeOut: Integer): Integer; external xtndopn[42];
- function SigSem(var HiHandle,LoHandle: Integer): Integer; external xtndopn[45];
- function ClosSem(var HiHandle,LoHandle: Integer): Integer; external xtndopn[48];
- function setlck(var Func: Integer): Integer; external xtndopn[51];
- function BakOuts(var Func: Integer): Integer; external xtndopn[54];
- function btrans(var Mode: Integer): Integer; external xtndopn[57];
- function etrans: Integer; external xtndopn[60];
- function exclog(var FcbAddr: Integer): Integer; external xtndopn[63];
- function exclcks(var Mode: Integer): Integer; external xtndopn[66];
- function exculkf(var FcbAddr: Integer): Integer; external xtndopn[69];
- function exculks: Integer; external xtndopn[72];
- function excclrf(var FcbAddr: Integer): Integer; external xtndopn[75];
- function excclrs: Integer; external xtndopn[78];
- function reclog(var RecStr: Strvar;var flag,TimeOut:integer): Integer; external xtndopn[81];
- function reclck(var Mode: Integer): Integer; external xtndopn[84];
- function reculk(var Semaphore: Strvar): Integer; external xtndopn[87];
- function reculks: Integer; external xtndopn[90];
- function recclr(var Semaphore: Strvar): Integer; external xtndopn[93];
- function recclrs: Integer; external xtndopn[96];
- function eoj: Integer; external xtndopn[99];
- function sysout: Integer; external xtndopn[102];
- function volstat(var volume: Integer;var reply: Strvar): Integer; external xtndopn[105];
- function locdrv:Integer; external xtndopn[108];
- function wsid: Integer; external xtndopn[111];
- function errmode(var mode: Integer):integer; external xtndopn[114];
- function bcsmode(var mode: Integer):integer; external xtndopn[117];
- function ctlspl(var Mode: Integer): Integer; external xtndopn[120];
- function splreq(var RequestBlock, Reply: Strvar): Integer; external xtndopn[123];
- function pipreq(var RequestBlock, Reply: Strvar): Integer; external xtndopn[126];
- function dpath(var RequestBlock, Reply: Strvar): Integer; external xtndopn[129];
- function syslog(var RequestBlock, Reply: Strvar): Integer; external xtndopn[132];
- function fattr(var FcbAddr, Attribute: Integer): Integer; external xtndopn[135];
- function updfcb(var FcbAddr: Integer): Integer; external xtndopn[138];
- function cpyfile(var FcbSource, FcbDest, CountLow, CountHigh: Integer): Integer; external xtndopn[141];
- function nettod(var time: Strvar):integer; external xtndopn[144];
- function clsmode(var mode: Integer):integer; external xtndopn[147];
- function drvmap(var drive: Integer): Integer; external xtndopn[150];
- function retshl(var EnvirStr: Strvar; var Mode: Integer): Integer; external xtndopn[153];
- function asclog(var Flags, TimeOut: Integer;var Asciiz: Strvar): Integer; external xtndopn[156];
- function asculkf(var Asciiz: Strvar): Integer; external xtndopn[159];
- function ascclrf(var Asciiz: Strvar): Integer; external xtndopn[162];
- function Get_PSN: Integer; external xtndopn[165];
- function Get_STA(var Mode,Segment,Offset: Integer):integer; external xtndopn[168];
- function SetServ(var Mode,NewServ: Integer): Integer; external xtndopn[171];
- function ModServ(var Mode,NewServ: Integer): Integer; external xtndopn[174];
- ------------------------------------------------------------------------------}
-
- procedure Explain;
-
- begin
- writeln('This program will display a menu of different function calls that can be');
- writeln('performed. Each call will prompt the user for the parameters needed by the');
- writeln('the function call. After a function call has completed execution, the user ');
- writeln('must hit the <enter> key to get back to the main menu. This program has ');
- writeln('been written to provide examples of how to use the function call interfaces,');
- writeln('contained in pasneta.asm');
- write(' Type return to continue: ');
- readln;
- clrscr;
- end;
-
-
- function HexConvert(num:integer):str;
- var quot, rem: integer;
- dum:str;
-
- begin
- quot:=num div 16;
- rem:= num mod 16;
- case rem of
- 0:hex:='0'+hex;
- 1:hex:='1'+hex;
- 2:hex:='2'+hex;
- 3:hex:='3'+hex;
- 4:hex:='4'+hex;
- 5:hex:='5'+hex;
- 6:hex:='6'+hex;
- 7:hex:='7'+hex;
- 8:hex:='8'+hex;
- 9:hex:='9'+hex;
- 10:hex:='A'+hex;
- 11:hex:='B'+hex;
- 12:hex:='C'+hex;
- 13:hex:='D'+hex;
- 14:hex:='E'+hex;
- 15:hex:='F'+hex;
- end;
- if quot > 15 then
- dum:=HexConvert(quot)
- else
- begin
- case quot of
- 0:hex:='0'+hex;
- 1:hex:='1'+hex;
- 2:hex:='2'+hex;
- 3:hex:='3'+hex;
- 4:hex:='4'+hex;
- 5:hex:='5'+hex;
- 6:hex:='6'+hex;
- 7:hex:='7'+hex;
- 8:hex:='8'+hex;
- 9:hex:='9'+hex;
- 10:hex:='A'+hex;
- 11:hex:='B'+hex;
- 12:hex:='C'+hex;
- 13:hex:='D'+hex;
- 14:hex:='E'+hex;
- 15:hex:='F'+hex;
- end;
- end;
- hexconvert:=hex;
- end;
-
-
- procedure get_filename;
-
- begin
- write('Enter the name of the file you want to use: ');
- readln(filename);
- write('Press the <enter> key to begin .....');
- readln;
- Len:=length(filename);
- filename[Len+1]:=chr(0); { Make it an ASCIIZ string }
- end;
-
-
- (************************************************************************)
- (* Open_File is the Novell Extended Open Function Call. It opens the *)
- (* file shareable, read/write. *)
- (************************************************************************)
-
-
- procedure open;
-
- begin
- get_filename;
- writeln('The file is being opened Sharable Read Write...');
- writeln('This is accomplished by placing a hex 42 in the AL register');
- write('Type return to continue...');
- readln;
- flag:=$42;
- clrscr;
- retcode:=xtndopn(flag,handle,filename);
- if retcode <> 0 then
- writeln('Return code = ',hexconvert(retcode),' file has not been opened')
- else
- begin
- writeln('The file handle is ',handle,' the return code is : ',retcode);
- writeln('Remember the file handle number above, it will be needed to release locked records.');
- end;
- end;
-
-
- (*************************************************************************)
- (* Get or Set file Attributes *)
- (*************************************************************************)
-
- procedure setget;
- var get:integer;
-
- begin
- get:=0;
- get_filename;
- writeln('Enter a ''0'' to get the atributes');
- write('Enter a ''1'' to set the attributes: ');
- readln(func);
- if func = 1 then
- begin
- writeln('Enter one of the following attributes: ');
- writeln;
- writeln('1 - Read only. 2 - Hidden. 4 - system. 128 - Sharable.');
- readln(attribute);
- end
- else
- get:=1;
- retcode:=setattr(FUNC,ATTRIBUTE,filename);
- write('executing... ');
- if get = 1 then
- writeln(' The attribute is : ',hexconvert(attribute));
- writeln('The return code is: ',hexconvert(retcode));
- end;
-
- (************************************************************************)
- (* Set EOJ flag *)
- (************************************************************************)
-
-
- procedure SetEOJ;
-
- begin
- writeln('Enter a ''0'' to disable the End Of Job flag');
- writeln('Enter a ''1'' to enable the End Of Job flag.');
- readln(flag);
- retcode:=eojstat(flag);
- writeln('The return code is: ',retcode);
- end;
-
-
- (************************************************************************)
- (* Physical record LOG and LOCK *)
- (************************************************************************)
-
-
- procedure Log_Lock;
-
- begin
- ans:='n';
- write('If the target file is already open, type a ''y'': ');
- readln(ans);
- if ans <> 'y' then
- OPEN
- else
- begin
- write('Enter the appropriate file handle: ');
- readln(handle);
- end;
- write('Enter the Low Word Starting Offset of the record: ');
- readln(Loff);
- write('Enter the High Word Starting Offset of the record: ');
- readln(Hoff);
- write('Enter the Low Word Length of the record: ');
- readln(LLen);
- write('Enter the High Word Length of the record: ');
- readln(HLen);
- write('Enter a ''1'' to lock and log, or enter a ''3'' to do a shared lock: ');
- readln(flag);
- if flag = 1 then
- begin
- write('Enter the lock timeout in 1/18 secs intervals: ');
- readln(TMO);
- end;
- retcode:=PRLH_Log(handle,Hoff,Loff,HLen,LLen,Flag,TMO);
- writeln('The return code is: ',retcode);
- end;
-
-
- (**************************************************************************)
- (* Release a record but it still remains in the log table. *)
- (* Release a record and remove it from the log table (clear the record).*)
- (**************************************************************************)
-
-
- procedure Rel_Clr;
-
- begin
- ans:='n';
- writeln('To release a record you must have opened the file and obtained a valid file handle.');
- write('To proceed type a ''y'': ');
- readln(ans);
- if ans = 'y' then
- begin
- write('Enter the file handle of the appropriate file: ');
- readln(handle);
- write('Enter the Low Word Starting Offset of the record: ');
- readln(Loff);
- write('Enter the High Word Starting Offset of the record: ');
- readln(Hoff);
- write('Enter the Low Word Length of the record: ');
- readln(LLen);
- write('Enter the High Word Length of the record: ');
- readln(HLen);
- write('If you want to release the record, but not remove it from the log table, type an ''r'': ');
- readln(ans);
- if ans ='r' then
- begin
- writeln('Releasing the record...');
- retcode:=PRLH_Rel(handle,Hoff,Loff,HLen,LLen);
- end
- else
- begin
- writeln('Removing the record from the log table...');
- retcode:=PRLH_Clr(handle,Hoff,Loff,HLen,LLen);
- end;
- writeln('The return code is: ',retcode);
- end;
- end;
-
-
- (*********************************************************************)
- (* Lock the record set (all records in the log table *)
- (* Release record set or clear the record set.
- (*********************************************************************)
-
-
- procedure Lock_Set;
-
- begin
- write('Enter a ''1'' to do a shared lock, nonexclusive: ');
- readln(flag);
- write('Enter the timeout amount in 1/18 secs intervals, 0 means no wait: ');
- readln(TMO);
- retcode:=PRLS_Lck(flag,TMO);
- writeln('The return code is: ',retcode);
- end;
-
-
- procedure Set_Rel_Clr;
-
- begin
- ans:='n';
- writeln('To release the entire record set without removing the records');
- write('from the log table, enter an ''r'': ');
- readln(ans);
- if ans = 'r' then
- begin
- writeln('Releasing the record set...');
- retcode:=PRLS_Rel;
- end
- else
- begin
- write('Removing all records from log table...');
- retcode:=PRLS_Clr;
- end;
- write('Return code is : ',retcode);
- end;
-
-
- (**********************************************************************)
- (* Open a Semaphore *)
- (**********************************************************************)
-
-
- procedure Sem_Open;
-
- begin
- write('Enter the name of the semaphore: ');
- readln(sema4);
- write('Enter the initial semaphore value, it must be positive: ');
- readln(semavalu);
- retcode:=opensem(sema4,semavalu,Hihandle,Lohandle,opencnt);
- writeln;
- writeln;
- writeln('The return code is : ',retcode);
- writeln('The number of stations using this semaphore is : ',opencnt);
- write('The semaphore handle is : HiPart = ',hexconvert(Hihandle));
- hex:=' ';
- writeln(' LoPart = ',hexconvert(Lohandle));
- writeln('WRITE DOWN THIS HANDLE EXACTLY AS YOU SEE IT, IT WILL BE NEDDED TO ACCESS THIS SEMAPHORE');
- writeln;
- end;
-
-
- procedure Sem_Exam;
-
- begin
- writeln('When entering the file handle, enter the HEX digits in the following manner: ');
- writeln(' ie. low part first: $adcb (put a ''$'' before the hex digits) ');
- writeln;
- write('Enter the semaphore handle, low part first: ');readln(Lohandle);
- write(' enter the high part of the handle: ');
- readln(Hihandle);
- retcode:=ExamSem(Hihandle,Lohandle,semavalu,opencnt);
- writeln('The return code is : ',retcode);
- writeln('The open count is : ',opencnt);
- writeln('The semaphore value is : ',semavalu);
- end;
-
-
- procedure Sem_Wait_Sig;
-
- begin
- ans:='n';
- writeln('When entering the file handle, enter the HEX digits in the following manner: ');
- writeln(' ie. low part first: $adcb (put a ''$'' before the hex digits) ');
- writeln;
- write('Enter the semaphore handle, low part first: ');
- readln(Lohandle);
- write(' enter the high part of the handle: ');
- readln(Hihandle);
- writeln(' If you desire to SIGNAL the semaphore (increment) ');
- write(' enter an ''s'', else type return: ');
- readln(ans);
- if ans = 's' then
- retcode:= SigSem(Hihandle,Lohandle)
- else
- begin
- write('Enter the timeout value in 1/18 secs intervals: ');
- readln(TMO);
- writeln;
- write('waiting... ');
- retcode:=WaitSem(Hihandle,Lohandle,TMO);
- end;
- writeln('The return code is : ',retcode);
- end;
-
-
- procedure Sem_Close;
-
- begin
- writeln('When entering the file handle, enter the HEX digits in the following manner: ');
- writeln(' ie. low part first: $adcb (put a ''$'' before the hex digits) ');
- writeln;
- write('Enter the semaphore handle, low part first: ');
- readln(Lohandle);
- write(' enter the high part of the handle: ');
- readln(Hihandle);
- retcode:= ClosSem(Hihandle,Lohandle);
- writeln(' closing... the return code is : ',retcode);
- end;
-
-
- (************************************************************************)
- (* GetOrSet_LockMode sets the Lock Mode to 01 as explained in Function *)
- (* call guide. *)
- (************************************************************************)
-
-
- procedure GetOrSet_LockMode;
-
- begin
- writeln('Enter one of the following choices: ');
- writeln;
- writeln(' 0 - set to old compatibility mode');
- writeln(' 1 - set to new extended locks mode');
- write(' 2 - return current lock mode ----> ');
- readln(func);
- retcode:=setlck(func);
- writeln('The current lock mode is ',retcode);
- end;
-
-
- (************************************************************************)
- (* Transaction Tracking Begin, End, TTS verify, Abort trans,
- Transaction status *)
- (************************************************************************)
-
- procedure TTS_functions;
-
- begin
- writeln('Enter a TTS function code 0');
- writeln('Enter a ''0'' to begin a transaction');
- writeln('Enter a ''1'' to end a transaction (Note - NO Transaction Reference No. is returned)');
- writeln('Enter a ''2'' to verify whether or not the preferred file server supports transaction tracking');
- writeln('Enter a ''3'' to abort a transaction');
- readln(func);
- retcode:=BakOuts(func);
- writeln('The return code is : ',retcode);
- end;
-
-
- (*************************************************************************)
- (* Begin or End logical locking read-modify-update cycle *)
- (*************************************************************************)
-
-
- procedure Logical_Begin_End;
-
- begin
- writeln('To begin logical locking enter a ''b''');
- writeln('To end logical locking enter an ''e''');
- write('------->');
- readln(ans);
- if ans = 'b' then
- begin
- ans:='n';
- write('This function assumes that the Lock Mode has been set to 1. If true, type a ''y'' : ');
- readln(ans);
- if ans = 'y' then
- begin
- write('Enter the time out amount in 1/18 secs intervels : ');
- readln(TMO);
- retcode:=btrans(TMO);
- write('Logical locking installed');
- end;
- end
- else
- begin
- retcode:=etrans;
- write('Logical locking ended');
- end;
- writeln('The return code is : ',retcode);
- end;
-
-
- (**************************************************************************)
- (* Logical record lock functions--Log, Lock, Unlock, Unlock set, Clear rec,
- Clear set *)
- (**************************************************************************)
-
-
- procedure Logical_locking;
-
- begin
- ans:='n';
- write('This procedure assumes the Lock Mode has been set to 1 if true enter ''y'' : ');
- readln(ans);
- if ans = 'y' then
- begin
- writeln('Choose one of the following functions: ');
- writeln(' 0 - Log and Lock a logical record');
- writeln(' 1 - Lock all the logical records in the log table');
- writeln(' 2 - Release a logical record lock, but do not remove it from the log table');
- writeln(' 3 - Release all the logical records in the log table');
- writeln(' 4 - Release and remove a logical record from the log table');
- writeln(' 5 - Release and remove the entire logical record set from the log table');
- write(' ----> ');
- readln(ans);
- if ans ='0' then
- begin
- clrscr;
- writeln('You have chosen to Log and Lock a record ');
- writeln;
- writeln('Enter a ''1'' to Log and Lock the record (exclusive lock)');
- writeln('Enter a ''3'' to Log and Lock the record (non-exclusive lock)');
- write('------->');
- readln(flag);
- write('Enter the record string to lock : ');
- readln(recstr);
- write('Enter the time out amount in 1/18 sec intervals : ');
- readln(TMO);
- retcode:=reclog(recstr,flag,TMO);
- end
- else if ans = '1' then
- begin
- clrscr;
- writeln('You have chosen to Lock the Record Set ');
- write('Enter the time out in 1/18 sec intervels : ');
- readln(TMO);
- retcode:=reclck(TMO);
- end
- else if ans = '2' then
- begin
- clrscr;
- writeln('You have chosen to release a record');
- write('Enter the name of the record string : ');
- readln(recstr);
- retcode:=reculk(recstr);
- end
- else if ans = '3' then
- begin
- retcode:=reculks;
- write('Record set released');
- end
- else if ans = '4' then
- begin
- clrscr;
- writeln('You have chosen to clear a record');
- write('Enter the name of the record string : ');
- readln(recstr);
- retcode:=recclr(recstr);
- end
- else if ans = '5' then
- begin
- retcode:=recclrs;
- write('Record Set Cleared');
- end;
- writeln('The return code is : ',retcode);
- end;
- end;
-
-
- (**********************************************************************)
- (* Execute an End Of Job call *)
- (**********************************************************************)
-
-
- procedure EndOfJob;
-
- begin
- retcode:=eoj;
- writeln('EOJ function call completed');
- writeln('The return code is : ',retcode);
- end;
-
-
- (********************************************************************)
- (* Logout from the network *)
- (********************************************************************)
-
-
- procedure Sys_logout;
-
- begin
- writeln('Executing the logout function call');
- retcode:=sysout;
- writeln('The return code is : ',retcode);
- end;
-
-
- (*******************************************************************)
- (* Get the volume statistics *)
- (*******************************************************************)
-
-
- procedure Get_Vol_Stat;
-
- begin
- write('Enter the volume number : ');
- readln(volume);
- reply:='hi there';
- retcode:=volstat(volume,reply);
- writeln('The return code is : ',retcode);
- writeln;
- writeln('Number of sectors per block : ',ord(reply[1]),ord(reply[2]));
- writeln('Number of total blocks : ',ord(reply[3]),ord(reply[4]));
- writeln('Number of unused blocks : ',ord(reply[5]),ord(reply[6]));
- writeln('Number of directory entries : ',ord(reply[7]),ord(reply[8]));
- writeln('Number of unused directory entries : ',ord(reply[9]),ord(reply[10]));
- write('Volume Name : ',reply[11],reply[12],reply[13],reply[14],reply[15],reply[16]);
- write(reply[17],reply[18],reply[19],reply[20],reply[21],reply[22]);
- writeln(reply[23],reply[24],reply[25],reply[26]);
- writeln('Removeable flag - 00 if volume is not removeable : ',ord(reply[27]),ord(reply[28]));
- end;
-
-
- (***********************************************************************)
- (* Find number of local disk that the shell has drives mapped to *)
- (***********************************************************************)
-
-
- procedure Number_Loc_drv;
-
- begin
- retcode:=locdrv;
- writeln('Number of local drives : ',retcode);
- end;
-
-
- (***********************************************************************)
- (* Get the Logical station number *)
- (***********************************************************************)
-
-
- procedure Logical_Sta_Num;
-
- begin
- retcode:=wsid;
- writeln('The logical station number is : ',retcode);
- end;
-
-
- (*************************************************************************)
- (* SetErrorMode sets the Error Mode to 1, so that the program will *)
- (* have control. *)
- (*************************************************************************)
-
-
- procedure SetErrorMode;
- begin
- writeln('To set the error mode');
- writeln('Enter one of the following : ');
- writeln(' 0 - to display errors on screen');
- writeln(' 1 - Extended errors for all file I/O returned in AL');
- writeln(' 2 - Critical errors returned in AL (only Netware 2.x and up)');
- write('------> ');
- readln(func);
- retcode:=errmode(func);
- writeln('The previous error mode was : ',retcode);
- end;
-
-
- (*************************************************************************)
- (* This function allows programs to change the way the shell treats network *)
- (* broadcast messages. *)
- (*************************************************************************)
-
-
- procedure Change_Bcast;
-
- begin
- writeln('To set the broadcast mode, choose one of the following : ');
- writeln(' 0 - Receive console and workstation broadcasts');
- writeln(' 1 - Receive console broadcasts only');
- writeln(' 2 - Disable receipt of all broadcasts');
- writeln(' 3 - Store broadcast messages');
- writeln(' 4 - Return current broadcast mode');
- writeln(' 5 - Shell timer interrupt checks are disabled');
- writeln(' 6 - Shell timer interrupts are enabled');
- write('----> ');
- readln(func);
- retcode:=bcsmode(func);
- writeln;writeln('The current mode is : ',retcode);
- end;
-
-
- (************************************************************************)
- (* The Modify LST Device function enables the use of the network spool device*)
- (************************************************************************)
-
-
- procedure Spool_func;
-
- begin
- writeln('You have chosen to start your spool device, enter one of the following :');
- writeln(' 0 - Start the LST catch');
- writeln(' 1 - End the LST catch and queue for printing');
- writeln(' 2 - End the LST catch and abort print');
- writeln(' 3 - Queue for printing and restart LST catch');
- write('----> ');
- readln(func);
- retcode:=ctlspl(func);
- writeln;
- writeln('The return code is : ',retcode);
- end;
-
-
- (*********************************************************************)
- (* Spool data to a capture file located on the server *)
- (*********************************************************************)
-
-
- procedure Spool_Capture;
- var packet, tab, copy, prnt, form: integer;
- ban: str;
- res: char;
-
- begin
- ans:='n';
- writeln('Choose one of the following spool functions : ');
- writeln(' 0 - Spool data to a capture file on the server');
- writeln(' 1 - Close and Queue or Abort the capture file');
- writeln(' 2 - Set the spool flags');
- write('----> ');
- readln(func);
- writeln;
- if func = 0 then
- begin
- writeln('Enter a string to be spooled (length = 1 to 52) :');
- readln(request);
- request:=chr(length(request) + 1) + chr(0) + chr(func) + request;
- end
- else if func = 1 then
- begin
- write('If you want to ABORT the queue type a ''y'' : ');
- readln(ans);
- if ans = 'y' then
- request:=chr(2) + chr(0) + chr(func) + chr(255)
- else
- request:=chr(1) + chr(0) + chr(func);
- end
- else if func = 2 then
- begin
- write('Do you want a banner page? (y/n) : ');
- readln(ans);
- if ans = 'y' then
- packet:=21 else packet:=6;
- writeln('Enter the print flags, the choices are: ');
- writeln(' 08h - Suppress auto form feed at the end of a print job');
- writeln(' 20h - Delete spool file after printing');
- writeln(' 40h - Enable tab expansion');
- writeln(' 80h - Print a banner page');
- writeln(' example: to suppress form feed and print a banner page add the two numbers');
- writeln(' in HEX --> 008h + 80h = 88h. TO ENTER --> $88 ($ = HEX) ');
- writeln;
- write('---> ');
- readln(flag);
- writeln;
- write('Enter the Tab size 1..20 : ');
- readln(tab);
- write('Enter the target printer 0..p : ');
- readln(prnt);
- write('Enter the number of copies to print 0..255 (0 copies = no printing : ');
- readln(copy);
- write('Enter the form type 0..255 : ');
- readln(form);
- write('Enter the string for the banner 1..13 chars : ');
- readln(ban);
- request:=chr(packet)+chr(0)+chr(2)+chr(flag)+chr(tab)+chr(prnt)+chr(copy)+chr(form)+res+ban+chr(0);
- end;
- reply:=chr(0) + chr(0);
- retcode:=splreq(request,reply);
- writeln('The return code is : ',retcode);
- end;
-
-
- (*************************************************************************)
- (* Network Communication Function Calls-- Pipes and broadcast *)
- (*************************************************************************)
-
-
- procedure Pipes;
- var numsta,stanum: integer;
- message: str;
-
- begin
- writeln('Choose one of the following piping functions: ');
- writeln;
- writeln(' 0 - Send a broadcast message');
- writeln(' 1 - Get a broadcast message');
- writeln(' 2 - Disable station broadcasts');
- writeln(' 3 - Enable station broadcasts');
- writeln(' Pipe functions can be added, see function call manual');
- writeln;
- write('-----> ');
- readln(func);
- writeln;
- reply:=chr(255)+chr(0);
- if func = 0 then
- begin
- writeln('For our purposes, only one station needs to receive the message ');
- write('Enter the station number: ');
- readln(stanum);
- numsta:=1;
- write('Enter the string you want to send: ');
- readln(message);
- request:= chr(length(message)+4)+chr(0)+chr(0)+chr(numsta)+chr(stanum)+chr(length(message))+message;
- retcode:=pipreq(request,reply);
- end
- else if func = 1 then
- begin
- request:=chr(1)+chr(0)+chr(1);
- retcode:=pipreq(request,reply);
- reply[0]:=chr(ord(reply[3])+3); { makes printable to screen }
- reply[3]:=chr(0); { " " " " " " }
- writeln(reply);
- end
- else if func = 2 then
- begin
- request:=chr(1)+chr(0)+chr(2);
- retcode:=pipreq(request,reply);
- end
- else if func = 3 then
- begin
- request:=chr(1)+chr(0)+chr(3);
- retcode:=pipreq(request,reply);
- end;
- writeln;
- writeln('Error code is: ',retcode);
- end;
-
-
- (************************************************************************)
- (* Directory Request functions *)
- (************************************************************************)
-
-
- procedure directory;
- var sbase: integer;
-
- begin
- writeln('Get the Base Path Mapping for the entered drive');
- write('Enter a SOURCEBASE (drive handle--1 or 2): ');
- readln(sbase);
- request:=chr(2)+chr(0)+chr(1)+chr(sbase);
- reply:=chr(255)+chr(0);
- retcode:=dpath(request,reply);
- reply[0]:=chr(ord(reply[3])+3);
- reply[3]:=chr(0);
- writeln('Return code is: ',retcode);
- writeln(reply);
- end;
-
-
- (*************************************************************************)
- (* Log request functions *)
- (**************************************************************************)
-
-
- procedure SystemLog;
- var connection: integer;
-
- begin
- writeln('Get a Stations Logged Information');
- write('Enter the logical station number or connection number: ');
- readln(connection);
- request:=chr(2)+chr(0)+chr(5)+chr(connection);
- reply:=chr(255)+chr(1);
- retcode:=syslog(request,reply);
- reply[0]:=chr(255);
- writeln('The return code is: ',retcode);
- writeln('The return string is: ');
- writeln(reply);
- end;
-
-
- (************************************************************************)
- (* Get the Date/Time String *)
- (************************************************************************)
-
-
- procedure GetTime;
- var time:str;
-
- begin
- retcode:=nettod(time); { The value in the str is found at byte#-1 }
- writeln('The return code is: ',retcode);
- writeln('The month/day/year is: ',ord(time[1]),'/',ord(time[2]),'/',ord(time[0]));
- writeln('The time is: ',ord(time[3]),':',ord(time[4]),':',ord(time[5]));
- case ord(time[6]) of
- 0:writeln('The day is Sunday');
- 1:writeln('The day is Monday');
- 2:writeln('The day is Tuesday');
- 3:writeln('The day is Wednesday');
- 4:writeln('The day is Thursday');
- 5:writeln('The day is Friday');
- 6:writeln('The day is Saturday');
- end;
- end;
-
-
- (*************************************************************************)
- (* Get the shell's Base Status *)
- (*************************************************************************)
-
-
- procedure driveHand;
- var drive: integer;
-
- begin
- write('Enter the drive number to check (A = 0, B = 1 etc.): ');
- readln(drive);
- retcode:=drvmap(drive);
- writeln('The network pathbase (drive handle) is: ',retcode);
- end;
-
-
- (*************************************************************************)
- (* Return the Shell Version *)
- (*************************************************************************)
-
-
- procedure RetShellVer;
- var envirstr: str;
- mode: integer;
-
- begin
- writeln('Enter the mode:');
- writeln(' 0 - Find hardware type only');
- writeln(' 1 - get the OS, version and hardware type');
- write('------> ');
- readln(mode);
- if mode = 0 then
- begin
- retcode:=retshl(envirstr,mode);
- writeln('Hardware type is: ',retcode);
- writeln('The type is defined as follows, 0 - IBM PC, 1 - Victor 9000');
- end
- else
- begin
- retcode:=retshl(envirstr,mode);
- envirstr[0]:=chr(30);
- writeln(envirstr);
- end;
- end;
-
-
- (*************************************************************************)
- (* Log and/or Lock an ASCIIZ String *)
- (*************************************************************************)
-
-
- procedure AsciizStr;
- begin
- writeln('Choose one of the following:');
- writeln(' 0 - Log or Lock the Asciiz string');
- writeln(' 1 - Release an Asciiz string');
- writeln(' 2 - Clear an Asciiz string');
- write('-------> ');
- readln(func);
- writeln;
- if func = 0 then
- begin
- writeln('Type a ''0'' if you only want to log the string');
- writeln('Type a ''1'' if you want to log and lock the string');
- write('------->');
- readln(flag);
- write('Enter the string name: ');
- readln(asciiz);
- asciiz[length(asciiz)+1]:=chr(0);
- writeln(asciiz);
- write('Enter the desired timeout value in 1/18 second intervals: ');
- readln(TMO);
- writeln;
- retcode:=asclog(flag,TMO,asciiz);
- end
- else if func = 1 then
- begin
- write('Enter the name of the string to be released: ');
- readln(asciiz);
- asciiz[length(asciiz)+1]:=chr(0); { Make an asciiz string }
- retcode:=asculkf(asciiz);
- end
- else if func = 2 then
- begin
- write('Enter the name of the string to be cleared: ');
- readln(asciiz);
- asciiz[length(asciiz)+1]:=chr(0); {Make an asciiz string }
- retcode:=ascclrf(asciiz);
- end;
- writeln('The return code is: ',retcode);
- end;
-
-
- (************************************************************************)
- (* Get Physical station Number--switch setting on the Network Interface Card*)
- (************************************************************************)
-
-
- procedure GetPhsNum;
-
- begin
- retcode:=get_psn;
- writeln('The Physical Station Number is : ',retcode);
- end;
-
-
- (************************************************************************)
- (* Get the Shell table Addresses *)
- (************************************************************************)
-
-
- procedure GetShlAdr;
-
- begin
- writeln('Enter one of the following choices: ');
- writeln(' 0 - Get the Drive Handle Table');
- writeln(' 1 - Get the Drive Flag Table');
- writeln(' 2 - Get the Drive Server Table');
- writeln(' 3 - Get the Server Mapping Table');
- write('-----> ');
- readln(mode);
- retcode:=get_sta(mode,seg,off);
- writeln;
- writeln('These segment and offset addresses have been displayed in decimal');
- writeln;
- writeln('The segment address is: ',seg);
- writeln('The offset address is: ',off);
- end;
-
-
- (************************************************************************)
- (* Set the preferred File Server *)
- (************************************************************************)
-
-
- procedure PrefServ;
-
- begin
- writeln('Enter one of the following: ');
- writeln(' 0 - Set the preferred file server');
- writeln(' 1 - Get the preferred file server');
- writeln(' 2 - Get the Effective File Server');
- writeln(' 3 - Get the Spooled file server');
- writeln(' 4 - Set the primary file server');
- writeln(' 5 - Get the Primary file server');
- write('-----> ');
- readln(mode);
- writeln;
- write('Enter the preferred server 1-8: ');
- readln(newserv);
- retcode:=setserv(mode,newserv);
- writeln('The return code is: ',retcode);
- end;
-
-
- (************************************************************************)
- (* Attach or Detach to a file server *)
- (************************************************************************)
-
-
- procedure AttDetServ;
-
- begin
- writeln('Enter one of the following: ');
- writeln(' 0 - Attach to a specfied server');
- writeln(' 1 - Logout and detach from a specified server');
- writeln(' 2 - Logout but do not dettach from a specified server');
- write('----> ');
- readln(mode);
- writeln;
- write('Enter the specified server numbers 1-8: ');
- readln(newserv);
- writeln;
- retcode:=modserv(mode,newserv);
- writeln('The return code is: ',retcode);
- end;
-
-
-
- (*************************************************************************)
-
-
- procedure menu;
- var stop:boolean;
-
- begin
- repeat
- clrscr;
- stop:=false;
- hex:=' ';
- writeln('Choose one of the following: ');
- writeln('0 - Get or Set the lock mode');
- writeln('1 - OPEN a file');
- writeln('2 - SET or Get a files attributes');
- writeln('3 - Check the EOJ status');
- writeln('4 - Log and Lock a record');
- writeln('5 - Release a locked record');
- writeln('6 - Lock a record set, all the records in the stations log table');
- writeln('7 - Release a locked record set');
- writeln('8 - Open a semaphore');
- writeln('9 - Examine a semaphore');
- writeln('A - Wait semaphore (decrement value) or Signal semaphore (increment value)');
- writeln('B - Close a semaphore');
- writeln('C - TTS Functions');
- writeln('D - Begin or End logical locking read_modify_update cycle');
- writeln('E - Logical locking functions');
- writeln('F - Execute an End Of Job');
- writeln('G - Logout');
- writeln('Z - Quit');
- writeln;
- writeln(' ENTER A CORRESPONDING CHARACTER OR TYPE RETURN TO SEE THE REST OF THE MENU ');
- writeln('******************************************************************************');
- write('----> ');
- readln(ans);
- if NOT
- (ans IN ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','z','A','B','C','D','E','F','G','Z']) then
- begin
- clrscr;
- writeln('H - Get the volume statistics');
- writeln('I - Get the number of local drives');
- writeln('J - Get the logical station number');
- writeln('K - Set the error mode');
- writeln('L - Set the broadcast mode');
- writeln('M - Start the spooler under program control');
- writeln('N - Various spooling functions');
- writeln('O - Piping functions');
- writeln('P - Directory Functions');
- writeln('Q - Sytem log functions');
- writeln('R - Get the Date/Time string');
- writeln('S - Get the shells Base Status');
- writeln('T - Get the shell version');
- writeln('U - Log, Lock, Release and clear an Asciiz string.');
- writeln(' Any Asciiz string function are assuming the Lock mode is 1');
- writeln('V - Get the Physical Station Number');
- writeln('W - Get the shell table addresses');
- writeln('X - Get the preferred server, different functions');
- writeln('Y - Attach or Detach a specified server');
- writeln('Z - Quit');
- writeln;
- writeln(' ENTER A CORRESPONDING CHARACTER OR TYPE RETURN TO SEE MENU AGAIN...');
- writeln('******************************************************************************');
- write('------> ');
- readln(ans);
- end;
- clrscr;
- case ans of
- '0':GetOrSet_LockMode;
- '1':OPEN;
- '2':SETGET;
- '3':SetEOJ;
- '4':Log_Lock;
- '5':Rel_Clr;
- '6':Lock_Set;
- '7':Set_Rel_Clr;
- '8':Sem_Open;
- '9':Sem_Exam;
- 'a', 'A':Sem_Wait_Sig;
- 'b', 'B':Sem_Close;
- 'c', 'C':TTS_Functions;
- 'd', 'D':Logical_Begin_End;
- 'e', 'E':Logical_Locking;
- 'f', 'F':EndOfJob;
- 'g','G':Sys_logout;
- 'h', 'H':Get_Vol_Stat;
- 'i', 'I':Number_loc_drv;
- 'j', 'J':Logical_Sta_Num;
- 'k', 'K':SetErrorMode;
- 'l', 'L':Change_Bcast;
- 'm', 'M':Spool_Capture;
- 'n', 'N':Spool_Capture;
- 'o', 'O':Pipes;
- 'p', 'P':Directory;
- 'q', 'Q':SystemLog;
- 'r', 'R':GetTime;
- 's', 'S':DriveHand;
- 't', 'T':RetShellVer;
- 'u', 'U':AsciizStr;
- 'v', 'V':GetPhsNum;
- 'w', 'W':GetShlAdr;
- 'x', 'X':PrefServ;
- 'y', 'Y':AttDetServ;
- 'z', 'Z':stop:=true;
- end;
- if stop = FALSE then
- begin
- writeln;
- writeln;
- write('Type return to continue... ');
- readln;
- end;
- until stop = true;
- end;
-
-
-
- (**************************** MAIN PROGRAM ******************************)
-
-
- begin
- clrscr;
- writeln;writeln;writeln;writeln;
- writeln(' SAMPLE FUNCTION CALL LIBRARY INTERFACE ');
- write(' please type return to continue... ');
- readln;
- writeln;
- explain;
- writeln;writeln;writeln;writeln;
- func:=1;
- retcode:=errmode(func);
- writeln('The ERROR MODE has been set to 1, to proceed type return');
- readln;writeln;
- menu;
- end.
-