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

  1. ;TYPE
  2. ;$STRING0 = STRING 0;
  3. ;$STRING80 =STRING 80;
  4. ;$STRING255 = STRING 255;
  5. ;
  6. ;VAR
  7. ;DATA:$STRING80;
  8. ;FUNCTION LENGTH(x:$STRING255):INTEGER;EXTERNAL;
  9.     EXTD    L156,LENGTH  
  10. ;PROCEDURE SETLENGTH(VAR X:$STRING0; Y:INTEGER);EXTERNAL;
  11.     EXTD    L157,SETLENGT
  12. ;
  13. ;{function to convert a string of maximum length = 255 to all upper
  14. ;case letters, and return the converted string..corresponds to the BASIC
  15. ;command UCASE$.  
  16. ;requires pascal/z's external functions, length and setlength}
  17. ;
  18. ;FUNCTION UCASE(X:$STRING255):$STRING255;
  19. ;LABEL 1;
  20. ;VAR
  21. ;I,LEN,ASCII:INTEGER;
  22. ;UCASEX:$STRING255;
  23. ;
  24. ;BEGIN
  25. L158
  26.     NAME UCASE
  27.     ENTRY UCASE
  28. UCASE:
  29.     ENTR    D,2,262
  30. ;SETLENGTH(UCASEX,0);
  31.     STMT    D,1
  32.     PUSH    IX
  33.     POP    H
  34.     LXI    B,-6
  35.     DADD    B
  36.     PUSH    H
  37.     MOV    H,A
  38.     MOV    L,A
  39.     PUSH    H
  40.     CALL    L157
  41. ;LEN:=LENGTH(X);
  42.     STMT    D,2
  43.     PUSH    IX
  44.     POP    H
  45.     LXI    B,263
  46.     DADD    B
  47.     SPSH    S,255
  48.     CALL    L156
  49.     STMT    M,2
  50.     MOV    -4(IX),D
  51.     MOV    -5(IX),E
  52. ;IF (LEN = 0) OR (LEN > 255)  THEN GOTO 1;
  53.     STMT    D,3
  54.     MOV    L,-5(IX)
  55.     MOV    H,-4(IX)
  56.     MOV    D,A
  57.     MOV    E,A
  58.     DSB1    D,0
  59.     JZ    L186
  60.     MOV    L,-5(IX)
  61.     MOV    H,-4(IX)
  62.     LXI    D,255
  63.     GRET    D,0
  64.     JNC    L185
  65. L184
  66. L186    EQU    L184
  67.     STMT    D,4
  68.     CTRL    M,4
  69.     JMP    L159
  70. L185
  71. ;
  72. ;FOR I:=1 TO LEN DO
  73.     STMT    D,5
  74.     MOV    -2(IX),A
  75.     MVI    -3(IX),1
  76.     PUSH    IX
  77.     POP    H
  78.     DCX    H
  79.     DCX    H
  80.     PUSH    H
  81.     MOV    L,-5(IX)
  82.     MOV    H,-4(IX)
  83.     XTHL
  84. L213
  85.     MOV    D,M
  86.     DCX    H
  87.     MOV    E,M
  88.     XTHL
  89.     PUSH    H
  90.     GE    D,0
  91.     JNC    L214
  92. ;    
  93. ;    IF (ORD(X[I]) > 96) AND (ORD(X[I]) < 123) THEN 
  94.     STMT    D,6
  95.     MOV    L,-3(IX)
  96.     MOV    H,-2(IX)
  97.     RCHK    H,1,255
  98.     XCHG
  99.     LXI    H,263
  100.     ADDR    IX
  101.     MOV    D,A
  102.     MOV    E,M
  103.     STMT    M,6
  104.     LXI    H,96
  105.     XCHG
  106.     GRET    D,0
  107.     JNC    L225
  108.     MOV    L,-3(IX)
  109.     MOV    H,-2(IX)
  110.     RCHK    H,1,255
  111.     XCHG
  112.     LXI    H,263
  113.     ADDR    IX
  114.     MOV    D,A
  115.     MOV    E,M
  116.     STMT    M,6
  117.     LXI    H,123
  118.     XCHG
  119.     LESS    D,0
  120. ;    APPEND(UCASEX,CHR(ORD(X[I])-32)) ELSE
  121.     JNC    L222
  122.     STMT    D,7
  123.     PUSH    IX
  124.     POP    H
  125.     LXI    B,-6
  126.     DADD    B
  127.     PUSH    H
  128.     LXI    H,255
  129.     PUSH    H
  130.     MOV    L,-3(IX)
  131.     MOV    H,-2(IX)
  132.     RCHK    H,1,255
  133.     XCHG
  134.     LXI    H,263
  135.     ADDR    IX
  136.     MOV    D,A
  137.     MOV    E,M
  138.     STMT    M,7
  139.     LXI    H,-32
  140.     DADD    D,0
  141.     STMT    M,7
  142.     INR    H
  143.     PUSH    H
  144.     LXI    H,2
  145.     PUSH    H
  146.     CALL    L137
  147. ;    APPEND(UCASEX,X[I]);
  148.     JMP    L294
  149. L222
  150. L224    EQU    L222
  151. L225    EQU    L224
  152.     STMT    D,8
  153.     PUSH    IX
  154.     POP    H
  155.     LXI    B,-6
  156.     DADD    B
  157.     PUSH    H
  158.     LXI    H,255
  159.     PUSH    H
  160.     MOV    L,-3(IX)
  161.     MOV    H,-2(IX)
  162.     RCHK    H,1,255
  163.     XCHG
  164.     LXI    H,263
  165.     ADDR    IX
  166.     MOV    D,A
  167.     MOV    E,M
  168.     INR    D
  169.     PUSH    D
  170.     LXI    H,2
  171.     PUSH    H
  172.     CALL    L137
  173. L294
  174.     CTRL    M,8
  175.     POP    H
  176.     XTHL
  177.     INR    M
  178.     INX    H
  179.     JRNZ    L313
  180.     INR    M
  181.     JV    L314
  182. L313
  183.     JMP    L213
  184. L214
  185.     POP    D
  186. L314
  187.     POP    D
  188. ;
  189. ;{97 represents a little 'a' and 122 a little 'z'..32 is the offset between
  190. ;  a capital and a little letter in ascii code}
  191. ;
  192. ;UCASE:=UCASEX;
  193.     STMT    D,9
  194.     PUSH    IX
  195.     POP    H
  196.     LXI    B,-6
  197.     DADD    B
  198.     RCHK    S,255
  199.     XCHG
  200.     PUSH    IX
  201.     POP    H
  202.     LXI    B,519
  203.     DADD    B
  204.     XCHG
  205.     LXI    B,256
  206.     LDDR
  207. ;1: {immediate exit upon fatal error}
  208.     STMT    D,10
  209. L159
  210. ;
  211. ;END;
  212.     STMT    D,11
  213.     EXIT    D,256
  214.