; ; DISPLAYP.ASM ; by Keith Petersen, W8SDZ ; (revised 11/22/80) ; ;This patch fixes DISPLAY.COM so it will not accept wild-cards, ;distribution-tagged files, SYS files, and files with '#' as the ;last character of the file type. Compatible with CP/M 1.4 or 2.x. ; BDOS EQU 05H FCB EQU 5CH OPEN EQU 15 CR EQU 0DH LF EQU 0AH ENTRY EQU 121H ;DISPLAY.COM ENTRY ADDRESS ; ORG 100H ; JMP PATCH ; ORG 821H ; ;Check for ambiguous file names ; PATCH LXI H,FCB ;POINT TO FCB MVI B,11 ;NR OF CHARS TO CHECK ; LOOP INX H ;POINT TO NEXT CHAR MOV A,M ;GET CHAR CPI '?' ;WAS IT A '?' JZ WERROR ;YES, EXIT WITH ERROR MSG DCR B ;ONE LESS TO CHECK JNZ LOOP ;NOT DONE, GO GET MORE ; ;Check for private file type ; CPI '#' ;WAS LAST CHARACTER A '#' ? JZ OPENOT ;YES, PRINT ERROR AND EXIT ; ;Check for .COM file, which can't be printed ; CPI 'M' ;WAS LAST CHAR AN 'M'? JNZ OBJCHK ;IF NOT, CHK FOR '.OBJ' TYPE DCX H MOV A,M ;CHK NEXT CPI 'O' ;AN 'O'? JNZ OPENFIL ;IF NOT, GO OPEN FILE DCX H MOV A,M ;WAS 'O', CHK NEXT CHAR CPI 'C' ; 'C' AS IN '.COM'? JNZ OPENFIL ;IF NOT, GO OPEN FILE CALL ERXIT ;EXIT W/MESSAGE DB '++CAN''T DISPLAY .COM FILES$' ; ;Check for .OBJ file, which can't be printed ; OBJCHK CPI 'J' ;WAS LAST CHAR AN 'J' THEN? JNZ OPENFIL ;IF NOT, GO OPEN FILE DCX H MOV A,M ;MIGHT BE '.OBJ', CHK NEXT CHR CPI 'B' ;IS IT A 'B'? JNZ OPENFIL ;IF NOT, GO OPEN FILE DCX H MOV A,M ;WAS, CHK FIRST CHAR CPI 'O' ; 'O' AS IN '.OBJ'? JNZ OPENFIL ;IF NOT, GO OPEN FILE CALL ERXIT ;EXIT W/MESSAGE DB '++CAN''T DISPLAY .OBJ FILES$' ; ;Open the file to get attributes into FCB ; OPENFIL LXI D,FCB ;POINT TO FILE MVI C,OPEN ;GET FUNCTION CALL BDOS ;OPEN IT INR A ;OPEN OK? JZ ENTRY ;..NO, LET DISPLAY GIVE ERROR MSG ; ;Check for SYS file ; LDA FCB+10 ;GET SYS ATTRIBUTE ANI 80H ;ISOLATE ATTR BIT JNZ OPENOT ;IT'S SYS, EXIT ; ;Check for distribution-protected (tagged) file ; LDA FCB+1 ;FIRST CHAR OF FILE NAME ANI 80H ;CHECK BIT 7 JZ ENTRY ;IT WAS OFF, EXIT TO DISPLAY ; OPENOT CALL ERXIT ;EXIT W/MESSAGE DB '++FILE IS NOT FOR DISTRIBUTION, SORRY$' ; WERROR CALL ERXIT DB '++CAN''T USE WILD CARDS$' ; ;Exit with error message ; ERXIT POP D ;GET MSG ADRS MVI C,9 JMP BDOS ;PRINT IT THEN RETURN TO CCP ; END