home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol009 / displayp.asm < prev    next >
Assembly Source File  |  1984-04-29  |  2KB  |  106 lines

  1. ;
  2. ;            DISPLAYP.ASM
  3. ;         by Keith Petersen, W8SDZ
  4. ;             (revised 11/22/80)
  5. ;
  6. ;This patch fixes DISPLAY.COM so it will not accept wild-cards,
  7. ;distribution-tagged files, SYS files, and files with '#' as the
  8. ;last character of the file type.  Compatible with CP/M 1.4 or 2.x.
  9. ;
  10. BDOS    EQU    05H
  11. FCB    EQU    5CH
  12. OPEN    EQU    15
  13. CR    EQU    0DH
  14. LF    EQU     0AH
  15. ENTRY    EQU    121H    ;DISPLAY.COM ENTRY ADDRESS
  16. ;        
  17.     ORG     100H
  18. ;
  19.     JMP    PATCH
  20. ;
  21.     ORG    821H
  22. PATCH    IN    91H    ;IS MODEM ACTIVE?
  23.     ANI    40H    ; TEST CARRIER DETECT
  24.     JZ    ENTRY    ;SKIP TESTS IF LOCAL COMMAND
  25. ;
  26. ;Check for ambiguous file names
  27. ;
  28.     LXI    H,FCB    ;POINT TO FCB
  29.     MVI    B,11    ;NR OF CHARS TO CHECK
  30. ;
  31. LOOP    INX    H    ;POINT TO NEXT CHAR
  32.     MOV    A,M    ;GET CHAR
  33.     CPI    '?'    ;WAS IT A '?'
  34.     JZ    WERROR    ;YES, EXIT WITH ERROR MSG
  35.     DCR    B    ;ONE LESS TO CHECK
  36.     JNZ    LOOP    ;NOT DONE, GO GET MORE
  37. ;
  38. ;Check for private file type
  39. ;
  40.     CPI    '#'    ;WAS LAST CHARACTER A '#' ?
  41.     JZ    OPENOT    ;YES, PRINT ERROR AND EXIT
  42. ;
  43. ;Check for .COM file, which can't be printed
  44. ;
  45.     CPI    'M'    ;WAS LAST CHAR AN 'M'?
  46.     JNZ    OBJCHK    ;IF NOT, CHK FOR '.OBJ' TYPE
  47.     DCX    H
  48.     MOV    A,M    ;CHK NEXT
  49.     CPI    'O'    ;AN 'O'?
  50.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  51.     DCX    H
  52.     MOV    A,M    ;WAS 'O', CHK NEXT CHAR
  53.     CPI    'C'    ; 'C' AS IN '.COM'?
  54.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  55.     CALL    ERXIT    ;EXIT W/MESSAGE
  56.     DB    '++CAN''T DISPLAY .COM FILES$'
  57. ;
  58. ;Check for .OBJ file, which can't be printed
  59. ;
  60. OBJCHK    CPI    'J'    ;WAS LAST CHAR AN 'J' THEN?
  61.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  62.     DCX    H
  63.     MOV    A,M    ;MIGHT BE '.OBJ', CHK NEXT CHR
  64.     CPI    'B'    ;IS IT A 'B'?
  65.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  66.     DCX    H
  67.     MOV    A,M    ;WAS, CHK FIRST CHAR
  68.     CPI    'O'    ; 'O' AS IN '.OBJ'?
  69.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  70.     CALL    ERXIT    ;EXIT W/MESSAGE
  71.     DB    '++CAN''T DISPLAY .OBJ FILES$'
  72. ;
  73. ;Open the file to get attributes into FCB
  74. ;
  75. OPENFIL    LXI    D,FCB    ;POINT TO FILE
  76.     MVI    C,OPEN    ;GET FUNCTION
  77.     CALL    BDOS    ;OPEN IT
  78.     INR    A    ;OPEN OK?
  79.     JZ    ENTRY    ;..NO, LET DISPLAY GIVE ERROR MSG
  80. ;
  81. ;Check for SYS file
  82. ;
  83.     LDA    FCB+10    ;GET SYS ATTRIBUTE
  84.     ANI    80H    ;ISOLATE ATTR BIT
  85.     JNZ    OPENOT    ;IT'S SYS, EXIT
  86. ;
  87. ;Check for distribution-protected (tagged) file
  88. ;
  89.     LDA    FCB+1    ;FIRST CHAR OF FILE NAME
  90.     ANI    80H    ;CHECK BIT 7
  91.     JZ    ENTRY    ;IT WAS OFF, EXIT TO DISPLAY
  92. ;
  93. OPENOT    CALL    ERXIT    ;EXIT W/MESSAGE
  94.     DB    '++FILE IS NOT FOR DISTRIBUTION, SORRY$'
  95. ;
  96. WERROR    CALL    ERXIT
  97.     DB    '++CAN''T USE WILD CARDS$'
  98. ;
  99. ;Exit with error message
  100. ;
  101. ERXIT    POP    D    ;GET MSG ADRS
  102.     MVI    C,9 
  103.     JMP    BDOS    ;PRINT IT THEN RETURN TO CCP
  104. ;
  105.     END
  106.