home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / proglc / tnylib.lzh / XTRMOD.ASM < prev   
Encoding:
Assembly Source File  |  1986-11-21  |  2.8 KB  |  174 lines

  1. include compiler.inc
  2.  
  3.     ttl    XTRMOD, 1.01, 11-04-86, jk
  4.  
  5.     dseg
  6. xtdlm    db    '.',0
  7.     cseg
  8.  
  9. incptr    macro    bump
  10. ifdef    bump&_v
  11.     inc    word ptr bump&_v
  12. else
  13.     inc    word ptr bump
  14. endif
  15.     endm
  16.  
  17. subptr    macro    cnt,bump
  18. ifdef    bump&_v
  19.     sub    cnt,word ptr bump&_v
  20. else
  21.     sub    cnt,word ptr bump
  22. endif
  23.     endm
  24.  
  25. addptr    macro    bump,cnt
  26. ifdef    bump&_v
  27.     add    word ptr bump&_v,cnt
  28. else
  29.     add    word ptr bump,cnt
  30. endif
  31.     endm
  32.  
  33. movptr    macro    bump,cnt
  34. ifdef    bump&_v
  35.     mov    word ptr bump&_v,cnt
  36. else
  37.     mov    word ptr bump,cnt
  38. endif
  39.     endm
  40.  
  41.     xtfs    <index, rindex, strcpy, strncpy, toupper>
  42.  
  43.                     ;sgetdrv(dst,src) char *dst, *src;
  44.                     ;{ char *tmp; /* AX reg in asm */
  45.     procdef    sgetdrv,<<dst,ptr>,<src,ptr>>
  46.     pushreg
  47.     pushds
  48.  
  49.     mov    ax,':'            ;  if (tmp = rindex(src, ':'))
  50.     callit    rindex, <<ax, reg>, <src, ptr>>
  51.     or    ax,ax
  52.     jz    cpd1
  53.     mov    si,ax        ;    *dst++ = toupper(*(tmp-1));
  54.     dec    si
  55.     lodsb
  56.     xor    ah,ah
  57.     callit    toupper, <<ax, reg>>
  58.                     ;  else
  59.                     ;  { *dst++ = 0;
  60.                     ;  }
  61. cpd1:    ldptr    di,dst
  62.     cld
  63.     stosb
  64.     mov    al,':'            ;  *dst++ = ':';
  65.     stosb
  66.     xor    al,al            ;  *dst = 0;
  67.     stosb
  68.     pret                ;}
  69.     pend    sgetdrv
  70.  
  71.     procdef    sgetpth,<<dst1,ptr>,<src1,ptr>>
  72.     pushreg
  73.     pushds
  74.  
  75.     mov    ax,':'            
  76.     callit    rindex, <<ax, reg>, <src1, ptr>>
  77.     or    ax,ax            
  78.     jz    cpp1            
  79.     inc    ax
  80.     movptr    src,ax            
  81. cpp1:    ldptr    si,src1            
  82.     lodsb
  83.     cmp    al,'.'
  84.     jz    cpp2            
  85.     mov    ax,'\'            
  86.     callit    index, <<ax, reg>, <src1, ptr>>
  87.     or    ax,ax            
  88.     jz    cpp2            
  89.     movptr    src1,ax            
  90. cpp2:    mov    ax,'\'            
  91.     callit    rindex, <<ax, reg>, <src1, ptr>>
  92.     or    ax,ax            
  93.     jz    cpp3            
  94.     subptr    ax,src1
  95.     push    ax            
  96.     callit    strncpy, <<ax, reg>, <src1, ptr>, <dst1, ptr>>
  97.     pop    ax            
  98.     ldptr    di,dst1            
  99.     add    di,ax            
  100.     xor    ax,ax            
  101.     stosb
  102.     jmp    short cpp4
  103.  
  104. cpp3:    ldptr    di,dst1
  105.     stosb            ; AX already 0
  106. cpp4:    pret
  107.     pend    sgetpth
  108.  
  109.  
  110.     procdef    sgetnam,<<dst2,ptr>,<src2,ptr>>
  111.     pushreg
  112.     pushds
  113.     mov    ax,':'
  114.     callit    rindex, <<ax, reg>, <src2, ptr>>
  115.     or    ax,ax
  116.     jz    cpn1
  117.     inc    ax
  118.     movptr    src2,ax
  119. cpn1:    ldptr    si,src2
  120.     lodsb
  121.     cmp    ax,'.'
  122.     jnz    cpn2
  123.     incptr    src2
  124.     jmp    cpn1
  125. cpn2:    mov    ax,'\'
  126.     callit    rindex, <<ax, reg>, <src2, ptr>>
  127.     or    ax,ax
  128.     jz    cpn3
  129.     inc    ax
  130.     movptr    src2,ax
  131. cpn3:    mov    ax,'.'
  132.     callit    rindex, <<ax, reg>, <src2, ptr>>
  133.     or    ax,ax
  134.     jz    cpn4
  135.     subptr    ax,src2
  136.     push    ax
  137.     callit    strncpy, <<ax, reg>, <src2, ptr>, <dst2, ptr>>
  138.     ldptr    di,dst2
  139.     pop    ax
  140.     add    di,ax
  141.     xor    ax,ax
  142.     stosb
  143.     jmp    short cpn5
  144. cpn4:    callit    strcpy, <<src2, ptr>, <dst2, ptr>>
  145. cpn5:    pret
  146.     pend    sgetnam
  147.  
  148.  
  149.     procdef    sgetext,<<dst3,ptr>,<src3,ptr>>
  150.     pushreg
  151.     pushds
  152.     mov    ax,':'
  153.     callit    rindex, <<ax, reg>, <src3, ptr>>
  154.     or    ax,ax
  155.     jz    cpe1
  156.     inc    ax
  157.     movptr    src3,ax
  158. cpe1:    ldptr    si,src3
  159.     lodsb
  160.     cmp    al,'.'
  161.     jnz    cpe2
  162.     incptr    src3
  163.     jmp    cpe1
  164. cpe2:    mov    ax,'.'
  165.     callit    rindex, <<ax, reg>, <src3, ptr>>
  166.     or    ax,ax
  167.     jnz    cpe3
  168.     mov    ax,offset xtdlm
  169. cpe3:    callit    strcpy, <<ax, reg>, <dst3, ptr>>
  170.     pret
  171.     pend    sgetext
  172.  
  173.     finish
  174.