home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / dpl.zip / CMPRSS.D < prev    next >
Text File  |  1988-07-11  |  2KB  |  79 lines

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;----------------------------------------
  4. ; C M P R S S  -- COMPRESS THE SOURCE STRING & CONVERT TO UPPERCASE
  5. ;
  6. ; Entry conditions:
  7. ;    AX holds offset to source string
  8. ; Exit conditions:
  9. ;    DI,SI,AX,CX,FLAGS modified
  10. ;
  11. ; Calling Example:
  12. ;
  13. ;    DEFINE    M00,'This is "A test of THE" AMERICAN...'
  14. ;    ;
  15. ;    CALL    CMPRSS M00
  16. ;
  17. ; Calling results:
  18. ;
  19. ;    M00 = 'THISIS"A test of THE"AMERICA...'
  20. ;
  21. SUBPGM    CMPRSS
  22. BEGIN    CMPRSS
  23.     EXTRN    _STREND:NEAR
  24.     PUSH    ES
  25.     PUSH    DS
  26.     POP    ES
  27.     MOV    DI,AX
  28.     MOV    SI,AX
  29.     CALL    _STREND            ; CX = LENGTH
  30.     MOV    SI,DI            ; RESTORE THE POINTER
  31. ;
  32. CMP_05:
  33.     LODSB                ; FETCH THE CHARACTER
  34.     OR    AL,AL            ; TERMINATOR? 
  35.     JZ    CMP_25            ; YES, EXIT HOME
  36.     CMP    AL,'a'            ; LESS THAN 'a'?
  37.     JL    CMP_07            ; YES
  38.     CMP    AL,'z'            ; GT 'Z'?
  39.     JG    CMP_08            ; YES
  40.     AND    AL,0DFH            ; CONVERT THE CASE
  41.     JMP    SHORT CMP_08
  42. ;
  43. CMP_07:
  44.     CMP    AL,' '            ; BLANK?
  45.     JE    CMP_05            ; YES - TOSS IT
  46.     CMP    AL,'I'-64        ; TAB?
  47.     JE    CMP_05            ; YES - TOSS IT
  48. ;
  49. CMP_08:
  50.     STOSB
  51. ;
  52. CMP_10:
  53.     CMP    AL,'"'            ; DOUBLE QUOTE MARK?
  54.     JE    CMP_19            ; NO, CONTINUE THE SEARCH
  55.     CMP    AL,27H            ; SINGLE QUOTE MARK?
  56.     JNZ    CMP_05            ; NO, CONTINUE THE SEARCH
  57. ;
  58. CMP_19:
  59.     MOV    AH,AL            ; AH HOLDS THE MATCH
  60. ;
  61. CMP_20:
  62.     LODSB                ; FETCH LITERAL STRING CHR
  63.     STOSB
  64.     OR    AL,AL
  65.     JZ    CMP_25            ; END, SO EXIT
  66.     CMP    AL,AH            ; CLOSING QUOTE?
  67.     JNE    CMP_20            ; NO, CONTINUE LOOPING
  68.     JMP    SHORT CMP_05        ; YES, CONTINUE WITH THE COMPRESS
  69. ;
  70. CMP_25:
  71.     MOV    [DI],AL            ; SET THE TERMINATOR
  72.     POP    ES
  73.     RET
  74. ;
  75. ENDPGM    CMPRSS
  76. ;
  77.  
  78.  
  79.