home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol064 / right.src < prev    next >
Encoding:
Text File  |  1984-04-29  |  2.3 KB  |  191 lines

  1. ;
  2. ;TYPE
  3. ;$STRING80 = STRING 80;
  4. ;$STRING0 = STRING 0;
  5. ;$STRING255 = STRING 255;
  6. ;BYTE = 0..255;
  7. ;VAR
  8. ;DATA:$STRING255;
  9. ;NUMBER:INTEGER;
  10. ;
  11. ;function length(x:$string255):INTEGER;external;
  12.     EXTD    L168,LENGTH  
  13. ;PROCEDURE setlength(var x:$string0; y : INTEGER); external;
  14.     EXTD    L169,SETLENGT
  15. ;
  16. ;{function to return the "y" right most characters of a string "x"..
  17. ;corresponds to the BASIC command RIGHT$(A$,X);..
  18. ;requires pascal/z external functions length and setlength..}
  19. ;
  20. ;FUNCTION RIGHT(X:$STRING255; Y:BYTE):$STRING255;
  21. ;
  22. ;{returns the last or right-most y characters in a string x}
  23. ;
  24. ;LABEL 1;
  25. ;VAR
  26. ;LEN,I:INTEGER;
  27. ;R:$STRING255;
  28. ;
  29. ;BEGIN
  30. L170
  31.     NAME RIGHT
  32.     ENTRY RIGHT
  33. RIGHT:
  34.     ENTR    D,2,260
  35. ;SETLENGTH(R,0);
  36.     STMT    D,1
  37.     PUSH    IX
  38.     POP    H
  39.     LXI    B,-4
  40.     DADD    B
  41.     PUSH    H
  42.     MOV    H,A
  43.     MOV    L,A
  44.     PUSH    H
  45.     CALL    L169
  46. ;LEN:=LENGTH(X);
  47.     STMT    D,2
  48.     PUSH    IX
  49.     POP    H
  50.     LXI    B,264
  51.     DADD    B
  52.     SPSH    S,255
  53.     CALL    L168
  54.     STMT    M,2
  55.     MOV    -2(IX),D
  56.     MOV    -3(IX),E
  57. ;
  58. ;IF (LEN = 0) OR (Y < 1) THEN GOTO 1;
  59.     STMT    D,3
  60.     MOV    L,-3(IX)
  61.     MOV    H,-2(IX)
  62.     MOV    D,A
  63.     MOV    E,A
  64.     DSB1    D,0
  65.     JZ    L198
  66.     MOV    H,A
  67.     MOV    L,8(IX)
  68.     MOV    A,L
  69.     CMPI    D,1
  70.     MOV    A,H
  71.     JNC    L197
  72. L196
  73. L198    EQU    L196
  74.     STMT    D,4
  75.     CTRL    M,4
  76.     JMP    L171
  77. L197
  78. ;IF Y >= LEN THEN 
  79.     STMT    D,5
  80.     MOV    H,A
  81.     MOV    L,8(IX)
  82.     MOV    E,-3(IX)
  83.     MOV    D,-2(IX)
  84.     GE    D,0
  85. ;    BEGIN
  86.     JNC    L218
  87.     STMT    D,6
  88. ;    R:=X;
  89.     STMT    D,7
  90.     PUSH    IX
  91.     POP    H
  92.     LXI    B,264
  93.     DADD    B
  94.     RCHK    S,255
  95.     XCHG
  96.     PUSH    IX
  97.     POP    H
  98.     LXI    B,-4
  99.     DADD    B
  100.     XCHG
  101.     LXI    B,256
  102.     LDDR
  103. ;    GOTO 1;
  104.     STMT    D,8
  105.     CTRL    M,8
  106.     JMP    L171
  107. ;    END;
  108.     STMT    D,9
  109. L218
  110. ;
  111. ;FOR I:= (LEN -Y+1) TO LEN DO APPEND(R,X[I]);
  112.     STMT    D,10
  113.     MOV    L,-3(IX)
  114.     MOV    H,-2(IX)
  115.     MOV    D,A
  116.     MOV    E,8(IX)
  117.     DSUB    D,0
  118.     INX    H
  119.     MOV    0(IX),H
  120.     MOV    -1(IX),L
  121.     XCHG
  122.     PUSH    IX
  123.     MOV    L,-3(IX)
  124.     MOV    H,-2(IX)
  125.     XTHL
  126. L251
  127.     MOV    D,M
  128.     DCX    H
  129.     MOV    E,M
  130.     XTHL
  131.     PUSH    H
  132.     GE    D,0
  133.     JNC    L252
  134.     STMT    D,11
  135.     PUSH    IX
  136.     POP    H
  137.     LXI    B,-4
  138.     DADD    B
  139.     PUSH    H
  140.     LXI    H,255
  141.     PUSH    H
  142.     MOV    L,-1(IX)
  143.     MOV    H,0(IX)
  144.     RCHK    H,1,255
  145.     XCHG
  146.     LXI    H,264
  147.     ADDR    IX
  148.     MOV    D,A
  149.     MOV    E,M
  150.     INR    D
  151.     PUSH    D
  152.     LXI    H,2
  153.     PUSH    H
  154.     CALL    L137
  155.     CTRL    M,11
  156.     POP    H
  157.     XTHL
  158.     INR    M
  159.     INX    H
  160.     JRNZ    L277
  161.     INR    M
  162.     JV    L278
  163. L277
  164.     JMP    L251
  165. L252
  166.     POP    D
  167. L278
  168.     POP    D
  169. ;
  170. ;1:
  171.     STMT    D,12
  172. L171
  173. ;RIGHT:=R;
  174.     STMT    D,13
  175.     PUSH    IX
  176.     POP    H
  177.     LXI    B,-4
  178.     DADD    B
  179.     RCHK    S,255
  180.     XCHG
  181.     PUSH    IX
  182.     POP    H
  183.     LXI    B,520
  184.     DADD    B
  185.     XCHG
  186.     LXI    B,256
  187.     LDDR
  188. ;END;
  189.     STMT    D,14
  190.     EXIT    D,257
  191.