home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol018 / displayp.asm < prev    next >
Assembly Source File  |  1984-04-29  |  2KB  |  103 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. ;
  23. ;Check for ambiguous file names
  24. ;
  25. PATCH    LXI    H,FCB    ;POINT TO FCB
  26.     MVI    B,11    ;NR OF CHARS TO CHECK
  27. ;
  28. LOOP    INX    H    ;POINT TO NEXT CHAR
  29.     MOV    A,M    ;GET CHAR
  30.     CPI    '?'    ;WAS IT A '?'
  31.     JZ    WERROR    ;YES, EXIT WITH ERROR MSG
  32.     DCR    B    ;ONE LESS TO CHECK
  33.     JNZ    LOOP    ;NOT DONE, GO GET MORE
  34. ;
  35. ;Check for private file type
  36. ;
  37.     CPI    '#'    ;WAS LAST CHARACTER A '#' ?
  38.     JZ    OPENOT    ;YES, PRINT ERROR AND EXIT
  39. ;
  40. ;Check for .COM file, which can't be printed
  41. ;
  42.     CPI    'M'    ;WAS LAST CHAR AN 'M'?
  43.     JNZ    OBJCHK    ;IF NOT, CHK FOR '.OBJ' TYPE
  44.     DCX    H
  45.     MOV    A,M    ;CHK NEXT
  46.     CPI    'O'    ;AN 'O'?
  47.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  48.     DCX    H
  49.     MOV    A,M    ;WAS 'O', CHK NEXT CHAR
  50.     CPI    'C'    ; 'C' AS IN '.COM'?
  51.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  52.     CALL    ERXIT    ;EXIT W/MESSAGE
  53.     DB    '++CAN''T DISPLAY .COM FILES$'
  54. ;
  55. ;Check for .OBJ file, which can't be printed
  56. ;
  57. OBJCHK    CPI    'J'    ;WAS LAST CHAR AN 'J' THEN?
  58.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  59.     DCX    H
  60.     MOV    A,M    ;MIGHT BE '.OBJ', CHK NEXT CHR
  61.     CPI    'B'    ;IS IT A 'B'?
  62.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  63.     DCX    H
  64.     MOV    A,M    ;WAS, CHK FIRST CHAR
  65.     CPI    'O'    ; 'O' AS IN '.OBJ'?
  66.     JNZ    OPENFIL    ;IF NOT, GO OPEN FILE
  67.     CALL    ERXIT    ;EXIT W/MESSAGE
  68.     DB    '++CAN''T DISPLAY .OBJ FILES$'
  69. ;
  70. ;Open the file to get attributes into FCB
  71. ;
  72. OPENFIL    LXI    D,FCB    ;POINT TO FILE
  73.     MVI    C,OPEN    ;GET FUNCTION
  74.     CALL    BDOS    ;OPEN IT
  75.     INR    A    ;OPEN OK?
  76.     JZ    ENTRY    ;..NO, LET DISPLAY GIVE ERROR MSG
  77. ;
  78. ;Check for SYS file
  79. ;
  80.     LDA    FCB+10    ;GET SYS ATTRIBUTE
  81.     ANI    80H    ;ISOLATE ATTR BIT
  82.     JNZ    OPENOT    ;IT'S SYS, EXIT
  83. ;
  84. ;Check for distribution-protected (tagged) file
  85. ;
  86.     LDA    FCB+1    ;FIRST CHAR OF FILE NAME
  87.     ANI    80H    ;CHECK BIT 7
  88.     JZ    ENTRY    ;IT WAS OFF, EXIT TO DISPLAY
  89. ;
  90. OPENOT    CALL    ERXIT    ;EXIT W/MESSAGE
  91.     DB    '++FILE IS NOT FOR DISTRIBUTION, SORRY$'
  92. ;
  93. WERROR    CALL    ERXIT
  94.     DB    '++CAN''T USE WILD CARDS$'
  95. ;
  96. ;Exit with error message
  97. ;
  98. ERXIT    POP    D    ;GET MSG ADRS
  99.     MVI    C,9 
  100.     JMP    BDOS    ;PRINT IT THEN RETURN TO CCP
  101. ;
  102.     END
  103.