home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol064 / mid.src < prev    next >
Text File  |  1984-04-29  |  2KB  |  188 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. ;START,STOP:INTEGER;
  10. ;
  11. ;
  12. ;FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL;
  13.     EXTD    L168,LENGTH  
  14. ;PROCEDURE SETLENGTH(VAR X:$STRING0;Y:INTEGER);EXTERNAL;
  15.     EXTD    L169,SETLENGT
  16. ;
  17. ;{function to extract characters from within a string, starting at
  18. ;position "y" and ending at position "z"..
  19. ;corresponds to BASIC command  MID$(A$,X,Y) } 
  20. ;
  21. ;FUNCTION MID(X:$STRING255; Y,Z:BYTE):$STRING255; 
  22. ;
  23. ;{y = starting position and z = the ending position in string x}
  24. ;
  25. ;LABEL 1;
  26. ;VAR
  27. ;LEN,I:INTEGER;
  28. ;MIDDLE:$STRING255;
  29. ;
  30. ;BEGIN
  31. L170
  32.     NAME MID
  33.     ENTRY MID
  34. MID:
  35.     ENTR    D,2,260
  36. ;SETLENGTH(MIDDLE,0);
  37.     STMT    D,1
  38.     PUSH    IX
  39.     POP    H
  40.     LXI    B,-4
  41.     DADD    B
  42.     PUSH    H
  43.     MOV    H,A
  44.     MOV    L,A
  45.     PUSH    H
  46.     CALL    L169
  47. ;LEN:=LENGTH(X);
  48.     STMT    D,2
  49.     PUSH    IX
  50.     POP    H
  51.     LXI    B,265
  52.     DADD    B
  53.     SPSH    S,255
  54.     CALL    L168
  55.     STMT    M,2
  56.     MOV    -2(IX),D
  57.     MOV    -3(IX),E
  58. ;
  59. ;IF (Y < 1) OR (Y > Z) OR ( Y > LEN) OR (LEN = 0) OR (Z > 255) THEN GOTO 1; 
  60.     STMT    D,3
  61.     MOV    H,A
  62.     MOV    L,9(IX)
  63.     MOV    A,L
  64.     CMPI    D,1
  65.     MOV    A,H
  66.     JC    L198
  67.     MOV    H,A
  68.     MOV    L,9(IX)
  69.     MOV    D,A
  70.     MOV    E,8(IX)
  71.     GRET    D,0
  72.     JC    L198
  73.     MOV    H,A
  74.     MOV    L,9(IX)
  75.     MOV    E,-3(IX)
  76.     MOV    D,-2(IX)
  77.     GRET    D,0
  78.     JC    L198
  79.     MOV    L,-3(IX)
  80.     MOV    H,-2(IX)
  81.     MOV    D,A
  82.     MOV    E,A
  83.     DSB1    D,0
  84.     JZ    L198
  85.     MOV    H,A
  86.     MOV    L,8(IX)
  87.     MVI    A,255
  88.     CMP    L
  89.     MOV    A,H
  90.     JNC    L197
  91. L196
  92. L198    EQU    L196
  93.     STMT    D,4
  94.     CTRL    M,4
  95.     JMP    L171
  96. L197
  97. ;IF Z > LEN THEN Z:=LEN;
  98.     STMT    D,5
  99.     MOV    H,A
  100.     MOV    L,8(IX)
  101.     MOV    E,-3(IX)
  102.     MOV    D,-2(IX)
  103.     GRET    D,0
  104.     JNC    L239
  105.     STMT    D,6
  106.     MOV    L,-3(IX)
  107.     MOV    H,-2(IX)
  108.     RCHK    H,0,255
  109.     MOV    8(IX),L
  110. L239
  111. ;
  112. ;FOR I:= Y TO Z DO APPEND(MIDDLE,X[I]);
  113.     STMT    D,7
  114.     MOV    H,A
  115.     MOV    L,9(IX)
  116.     MOV    0(IX),H
  117.     MOV    -1(IX),L
  118.     XCHG
  119.     PUSH    IX
  120.     MOV    H,A
  121.     MOV    L,8(IX)
  122.     XTHL
  123. L260
  124.     MOV    D,M
  125.     DCX    H
  126.     MOV    E,M
  127.     XTHL
  128.     PUSH    H
  129.     GE    D,0
  130.     JNC    L261
  131.     STMT    D,8
  132.     PUSH    IX
  133.     POP    H
  134.     LXI    B,-4
  135.     DADD    B
  136.     PUSH    H
  137.     LXI    H,255
  138.     PUSH    H
  139.     MOV    L,-1(IX)
  140.     MOV    H,0(IX)
  141.     RCHK    H,1,255
  142.     XCHG
  143.     LXI    H,265
  144.     ADDR    IX
  145.     MOV    D,A
  146.     MOV    E,M
  147.     INR    D
  148.     PUSH    D
  149.     LXI    H,2
  150.     PUSH    H
  151.     CALL    L137
  152.     CTRL    M,8
  153.     POP    H
  154.     XTHL
  155.     INR    M
  156.     INX    H
  157.     JRNZ    L286
  158.     INR    M
  159.     JV    L287
  160. L286
  161.     JMP    L260
  162. L261
  163.     POP    D
  164. L287
  165.     POP    D
  166. ;
  167. ;1:
  168.     STMT    D,9
  169. L171
  170. ;MID:=MIDDLE;
  171.     STMT    D,10
  172.     PUSH    IX
  173.     POP    H
  174.     LXI    B,-4
  175.     DADD    B
  176.     RCHK    S,255
  177.     XCHG
  178.     PUSH    IX
  179.     POP    H
  180.     LXI    B,521
  181.     DADD    B
  182.     XCHG
  183.     LXI    B,256
  184.     LDDR
  185. ;END;
  186.     STMT    D,11
  187.     EXIT    D,258
  188.