home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / cpm / alphatronic / PASCALZ4.ZIP / D3 / STRLOP.SRC < prev    next >
Text File  |  1999-04-05  |  2KB  |  104 lines

  1. ;STRING RELATIVE OPERATIONS
  2. ;
  3.     NAME STRLOP
  4.     ENTRY .STREQL,.STRNQL,.STRGRT,.STRGEQ,.STRLSS,.STRLEQ
  5. ;
  6. LTIND    EQU    1    ;< INDIC.
  7. GEIND    EQU    2    ;>= INDIC.
  8. EQIND    EQU    3    ;= INDIC.
  9. LEIND    EQU    4    ;<= INDIC.
  10. GTIND    EQU    5    ;> INDIC.
  11.  
  12. .STREQL    CALL    STRCMP    ;EQUAL
  13.     CPI    EQIND
  14.     JRNZ    NTTRU
  15.     JR    TRU
  16. .STRNQL    CALL    STRCMP    ;NOT EQUAL
  17.     CPI    EQIND
  18.     JRZ    NTTRU
  19.     JR    TRU    
  20. .STRGRT    CALL    STRCMP    ;GREATER THAN
  21.     CPI    GTIND
  22.     JRNZ    NTTRU
  23.     JR    TRU
  24. .STRLSS    CALL    STRCMP    ;LESS THAN
  25.     CPI    LTIND
  26.     JRNZ    NTTRU
  27.     JR    TRU
  28. .STRGEQ    CALL    STRCMP    ;GREATER THAN OR EQUAL
  29.     CPI    GEIND
  30.     JRC    NTTRU
  31.     JR    TRU
  32. .STRLEQ    CALL    STRCMP    ;LESS THAN OR EQUAL
  33.     CPI    LEIND
  34.     JRNC    NTTRU
  35.     JR    TRU
  36. TRU:    XRA    A
  37.     STC
  38.     RET
  39. NTTRU    XRA    A
  40.     RET
  41.  
  42. STRCMP:    LXI    H,3
  43.     DAD    S    ;SKIP 2 RETURN ADDRESSES
  44.     MVI    D,0
  45.     MOV    E,C    ;SIZE OF SECOND STRING - 1
  46.     DAD    D    
  47.     INX    H    ;TOP OF SECOND STRING
  48.     PUSH    H
  49.     MOV    E,B    ;SIZE OF FIRST STRING - 1
  50.     DAD    D
  51.     INX    H    ;TOP OF FIRST STRING
  52.     POP    D
  53.     PUSH    H    ;HL <- TOP OF FIRST STRING
  54.     PUSH    D    ;DE <- TOP OF SECOND STRING
  55.     MOV    A,M    ;ACTUAL LENGTH OF FIRST STRING
  56.     CPI    0    ;ZERO LENGTH?
  57.     JRZ    ST1ZER    ;YES, CHECK SECOND STRING
  58.     LDAX    D    ;ACTUAL LENGTH OF SECOND STRING
  59.     CPI    0    ;ZERO LENGTH?
  60.     JRZ    HGRT    ;FIRST NOT ZERO, SECOND IS- FIRST GREATER
  61.     CMP    M    ;NEITHER IS ZERO LENGTH
  62.     JRC    DCNTR
  63.     MOV    B,M    ;B <- SHORTER ACT. LENGTH FOR COUNTING
  64.     JR    CMPR
  65. DCNTR:    MOV    B,A
  66. CMPR:    DCX    H    ;CHAR OF FIRST STRING
  67.     DCX    D    ;CHAR OF SECOND STRING
  68.     DCR    B    ;CHAR. COUNTER
  69.     LDAX    D
  70.     CMP    M    ;COMPARE THEM
  71.     JRC    HGRT    ;FIRST IS GREATER
  72.     JRNZ    DGRT    ;SECOND IS GREATER
  73.     XRA    A    ;CHARS. EQUAL - LAST CHAR?
  74.     CMP    B
  75.     JRNZ    CMPR    ;NO, TRY NEXT CHARS
  76.     POP    D    ;LAST CHARS EQUAL
  77.     POP    H
  78.     LDAX    D    ;WHICH IS LONGER STRING?
  79.     CMP    M
  80.     JRC    HLONG
  81.     JRNZ    DLONG
  82. STREQU:    MVI    A,EQIND    ;EQUAL STRINGS
  83.     JR    CLNUP
  84. HGRT    POP    D
  85.     POP    H
  86. HLONG    MVI    A,GTIND    ;FIRST IS LONGER
  87.     JR    CLNUP
  88. DGRT    POP    D
  89.     POP    H
  90. DLONG    MVI    A,LTIND    ;SECOND IS LONGER
  91. CLNUP    POP    D    ;CLEAN UP STACK
  92.     POP    B
  93.     INX    H
  94.     SPHL    
  95.     PUSH    B
  96.     XCHG
  97.     PCHL        ;AND RETURN
  98. ST1ZER:    LDAX    D    ;LENGTH OF SECOND STRING
  99.     CPI    0
  100.     JRNZ    DGRT    ;SECOND STRING NOT ZERO, 2ND IS GREATER THAN 1ST
  101.     POP    D    ;BOTH HAVE ZERO LENGTH, EQUAL
  102.     POP    H
  103.     JR    STREQU
  104.