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

  1. ;TYPE
  2. ;$STRING80 = STRING 80;
  3. ;$STRING0 = STRING 0;
  4. ;$STRING255 = STRING 255;
  5. ;BYTE = 0..255;
  6. ;VAR
  7. ;DATA:$STRING255;
  8. ;NUMBER:INTEGER;
  9. ;
  10. ;function length(x:$string255):INTEGER;external;
  11.     EXTD    L168,LENGTH  
  12. ;PROCEDURE setlength(var x:$string0; y : INTEGER); external;
  13.     EXTD    L169,SETLENGT
  14. ;
  15. ;{function to return the "y" left most characters of a string "x"
  16. ;where y is an integer value up to 255, and x is a string of maximum
  17. ;length 255 characters.  Corresponds to BASIC command LEFT$(A$,x)..
  18. ;requires pascal/z's external functions setlength and length.. }
  19. ;
  20. ;FUNCTION LEFT(X:$STRING255; Y:BYTE):$STRING255;
  21. ;
  22. ;{returns the first or left-most y characters in a string x}
  23. ;
  24. ;LABEL 1;
  25. ;VAR
  26. ;LEN,I:INTEGER;
  27. ;L:$STRING255;
  28. ;
  29. ;BEGIN
  30. L170
  31.     NAME LEFT
  32.     ENTRY LEFT
  33. LEFT:
  34.     ENTR    D,2,260
  35. ;SETLENGTH(L,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. ;    L:=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. ;{IF Y = 1 THEN 
  112. ;    BEGIN
  113. ;    L:=X[1];
  114. ;    GOTO 1;
  115. ;    END;}
  116. ;
  117. ;FOR I:= 1 TO Y DO APPEND(L,X[I]);
  118.     STMT    D,10
  119.     MOV    0(IX),A
  120.     MVI    -1(IX),1
  121.     PUSH    IX
  122.     MOV    H,A
  123.     MOV    L,8(IX)
  124.     XTHL
  125. L245
  126.     MOV    D,M
  127.     DCX    H
  128.     MOV    E,M
  129.     XTHL
  130.     PUSH    H
  131.     GE    D,0
  132.     JNC    L246
  133.     STMT    D,11
  134.     PUSH    IX
  135.     POP    H
  136.     LXI    B,-4
  137.     DADD    B
  138.     PUSH    H
  139.     LXI    H,255
  140.     PUSH    H
  141.     MOV    L,-1(IX)
  142.     MOV    H,0(IX)
  143.     RCHK    H,1,255
  144.     XCHG
  145.     LXI    H,264
  146.     ADDR    IX
  147.     MOV    D,A
  148.     MOV    E,M
  149.     INR    D
  150.     PUSH    D
  151.     LXI    H,2
  152.     PUSH    H
  153.     CALL    L137
  154.     CTRL    M,11
  155.     POP    H
  156.     XTHL
  157.     INR    M
  158.     INX    H
  159.     JRNZ    L271
  160.     INR    M
  161.     JV    L272
  162. L271
  163.     JMP    L245
  164. L246
  165.     POP    D
  166. L272
  167.     POP    D
  168. ;
  169. ;1:
  170.     STMT    D,12
  171. L171
  172. ;LEFT:=L;
  173.     STMT    D,13
  174.     PUSH    IX
  175.     POP    H
  176.     LXI    B,-4
  177.     DADD    B
  178.     RCHK    S,255
  179.     XCHG
  180.     PUSH    IX
  181.     POP    H
  182.     LXI    B,520
  183.     DADD    B
  184.     XCHG
  185.     LXI    B,256
  186.     LDDR
  187. ;END;
  188.     STMT    D,14
  189.     EXIT    D,257
  190.