PGM POSUSL INT POSUSL * * SUBROUTINE POSUSL (FILNUM,MEMBER,FOUND) * * **************************************************************** * * KERMIT for the MODCOMP MAXIV operating system * * Compliments of: * * SETPOINT, Inc. * 10245 Brecksville Rd. * Brecksville, Ohio 44141 * * * KERMIT is a copyrighted protocol of Columbia Univ. The authors * of this version hereby grant permission to copy this software * provided that it is not used for an explicitly commercial * purpose and that proper credit be given. SETPOINT, Inc. makes * no warranty whatsoever regarding the accuracy of this package * and will assume no liability resulting from it's use. * * **************************************************************** * * Abstract: Position a FORTRAN file to a SED directory entry. * * MODIFICATION HISTORY * * BY DATE REASON PROGRAMS AFFECTED * * **************************************************************** * * Author: Rick Burke Version: A.0 Date: Aug-86 * * Calling Parameters: * * FILNUM - Integer FORTRAN file number to be positioned * If FILNUM < 1600 then it is assumed to be an * integer FORTRAN logical unit number. If it * is >= 1600 it is assumed to be the CAN code * of the logical device name. * * MEMBER - 8 character member name * * FOUND - Logical status for position, * .TRUE. = Successful * .FALSE. = Error condition * * **************************************************************** * * Messages generated by this module : None * * **************************************************************** * * Subroutines called directly : None * * **************************************************************** * * Files referenced : None * * **************************************************************** * * Local variable definitions : * * ATTACH - Name of an attached USL directory * POSUFT - UFT assigned to logical file containing * requested entry * BUFFER - Sector-sized file buffer * * **************************************************************** * * Commons referenced : None * * **************************************************************** * * (*$END.DOCUMENT*) * * **************************************************************** * * Code starts here : * POSUSL TRR,1,8 SAVE LINKKAGE ADX,8,8 GENERATE RETURN ADDRESS ABR,8,15 * LDS,2,0 CHECK ARGUMENT COUNT SBR,2,14 * SBRB,2,15 BADARG * LDS,9,3 GET "FOUND" ADDRESS LDS,3,1 GET FILE NUMBER LDX,3,3 * HNS,FILNAM CHECK FILE NUMBER OR NAME CRI,3 #0640 CHECK FILE NUMBER / NAME HGE,FILNAM * REX,#3A CONVERT TO ASCII LLD,2,8 REPOSIION REX,#37 CONVERT TO CAN CODE DFC RETURN ERROR - BAD NUMBER FILNAM STM,3 POSUFT+1 PLACE IN UFT LDS,2,2 GET MEMBER NAME ADDRESS LFX,2,2 GET MEMBER NAME REX,#37 CAN BYTES 1-3 DFC ERROR * XOR,3,4 SWAP R3 & R4 XOR,4,3 * XOR,3,4 * LLD,2,8 POSITION BYTES 4-6 REX,#37 CAN BYTES 4-6 DFC ERROR * TRR,2,5 GET BYTES 7-8 TRR,5,3 HOLD BYTES 4-6 IN R5 LBR,3,2 LAST BYTE IS SPACE REX,#37 CAN BYTES 7-8 DFC ERROR * TRR,6,3 MOVE BYTES 7-8 TO R6 LDI,2 POSUFT LOAD UFT ZRR,3 AND RESET IT STM,3,2 5 * STM,3 ATTACH AND RESET ATTACHED FILE REX,2 REWIND INPUT FILE REX,0 READ FIRST RECORD DFC BUFFER * DFC 256 * LDM,3 BUFFER LOAD FIRST WORD ABRB,3,15 ERROR CHECK DIRECTORY PRESENT LDM,3 BUFFER+2 GET # ENTRIES PER SECTOR NXSCTR LDI,1 BUFFER LOAD BUFFER ADDRESS TRR,8,3 NUMBER OF ENTRIES PER SECTOR NXNTRY LFS,12,2 LOAD ENTRY NAME TRR,2,12 CHECK END OF LIST ABRB,2,15 MORE * ERROR GMR,2,15 RETURN FOUND = .FALSE. RETURN STX,2,9 * BRX,10 * MORE CRI,12 #FEFE CHECK FILE ENTRY HZR,CKNAME * STM,13 ATTACH SAVE FILE ENTRY FILE NAME HOP,NOTIT AND KEEP CHECKING CKNAME CRRT,4,12 CHECK NAME = MEMBER WANTED HZR,NOTIT * LDS,5,8 LOAD SECTOR ADDRESS OF ENTRY LDM,2 ATTACH CHECK USL FILE HZS,POSIT * STM,2 $+5 NO - ATTACHED FILE LDI,2 POSUFT ASSIGN TO THE ATTACHED FILE REX,#A * DFC $$ * POSIT LDI,2 POSUFT POSITION THE FILE STM,5,2 3 SET THE RECORD POSITION REX,5 ADVANCE RECORD REX,4 BACKSPACE RECORD ZRR,2 SET FOUND = .TRUE. HOP,RETURN * NOTIT ADI,1 9 POINT TO NEXT ENTRY SBRB,8,15 NXNTRY CHECK MORE ENTRIES LDM,2 BUFFER+1 LOAD NEXT SECTOR ADDRESS STM,2 POSUFT+3 NEXT SECTOR TO READ LDI,2 POSUFT READ NEXT SECTOR REX,0 * DFC BUFFER * DFC 256 * BRU NXSCTR GO SEARCH NEXT DIRECTORY SECTOR BADARG REX,#13 ABORT DFC @ARG REASON = "ARG" ATTACH DFC $$ POSUFT DFC 0,$$,#A400,0,0,0 BUFFER RES 128 END .