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

  1. C    SET              0
  2. M    SET              0
  3. F    SET              0
  4. ;TYPE
  5. ;$STRING0 = STRING 0;
  6. ;$STRING80= STRING 80;
  7. ;$STRING255 = STRING 255;
  8. ;VAR
  9. ;NUMBER:INTEGER;
  10. ;DATA:$STRING80;
  11. ;
  12. ;PROCEDURE SETLENGTH(VARX:$STRING0;Y:INTEGER);EXTERNAL;
  13.     EXTD    L156,SETLENGT
  14. ;FUNCTION LENGTH(X:$STRING255):INTEGER;EXTERNAL;
  15.     EXTD    L157,LENGTH  
  16. ;
  17. ;{the following function converts a string to an integer.
  18. ;as written, the string has a maximum size of 80 char.  
  19. ;requires pascal/z's external function: length}
  20. ;
  21. ;FUNCTION STRTOINT (STR:$STRING80):INTEGER;
  22. ;LABEL 1;
  23. ;
  24. ;VAR
  25. ;I,LEN,SIGN,VAL:INTEGER;
  26. ;
  27. ;BEGIN
  28. L158
  29.     NAME STRTOINT
  30.     ENTRY STRTOINT
  31. STRTOINT:
  32.     ENTR    D,2,8
  33. ;VAL:=0;
  34.     STMT    D,1
  35.     MOV    -6(IX),A
  36.     MOV    -7(IX),A
  37. ;LEN:=LENGTH(STR);
  38.     STMT    D,2
  39.     PUSH    IX
  40.     POP    H
  41.     LXI    B,88
  42.     DADD    B
  43.     SPSH    S,255
  44.     CALL    L157
  45.     STMT    M,2
  46.     MOV    -2(IX),D
  47.     MOV    -3(IX),E
  48. ;I:=1;
  49.     STMT    D,3
  50.     MOV    0(IX),A
  51.     MVI    -1(IX),1
  52. ;SIGN:=1;
  53.     STMT    D,4
  54.     MOV    -4(IX),A
  55.     MVI    -5(IX),1
  56. ;
  57. ;IF LEN = 0 THEN    GOTO 1;
  58.     STMT    D,5
  59.     MOV    L,-3(IX)
  60.     MOV    H,-2(IX)
  61.     MOV    D,A
  62.     MOV    E,A
  63.     DSB1    D,0
  64.     JNZ    L191
  65.     STMT    D,6
  66.     CTRL    M,6
  67.     JMP    L159
  68. L191
  69. ;
  70. ;REPEAT
  71.     STMT    D,7
  72. ;
  73. ;    CASE STR[I] OF
  74. L201
  75.     STMT    D,8
  76.     MOV    L,-1(IX)
  77.     MOV    H,0(IX)
  78.     RCHK    H,1,80
  79.     XCHG
  80.     LXI    H,88
  81.     ADDR    IX
  82. ;
  83. ;     '-' : SIGN:=-1; 
  84.     MOV    D,A
  85.     MOV    E,M
  86.     MOV    A,E
  87.     CMPI    D,45
  88.     JNZ    L216
  89. L218
  90.     XRA    A
  91.     STMT    D,9
  92.     MVI    -4(IX),255
  93.     MVI    -5(IX),255
  94. ;     '.' : GOTO 1;
  95.     JMP    L217
  96. L216
  97.     CMPI    D,46
  98.     JNZ    L231
  99. L232
  100.     XRA    A
  101.     STMT    D,10
  102.     CTRL    M,10
  103.     JMP    L159
  104. ;
  105. ;    '0','1','2','3','4','5','6','7','8','9':
  106.     JMP    L217
  107. L231
  108.     CMPI    D,48
  109.     JRZ    L242
  110.     CMPI    D,49
  111.     JRZ    L242
  112.     CMPI    D,50
  113.     JRZ    L242
  114.     CMPI    D,51
  115.     JRZ    L242
  116.     CMPI    D,52
  117.     JRZ    L242
  118.     CMPI    D,53
  119.     JRZ    L242
  120.     CMPI    D,54
  121.     JRZ    L242
  122.     CMPI    D,55
  123.     JRZ    L242
  124.     CMPI    D,56
  125.     JRZ    L242
  126.     CMPI    D,57
  127.     JNZ    L241
  128. ;        VAL:=(VAL * 10) + (ORD(STR[I]) - 48); {48 = ORD OF 0}
  129. L242
  130.     XRA    A
  131.     STMT    D,11
  132.     MOV    L,-7(IX)
  133.     MOV    H,-6(IX)
  134.     LXI    D,10
  135.     MULT    D,0
  136.     PUSH    H
  137.     MOV    L,-1(IX)
  138.     MOV    H,0(IX)
  139.     RCHK    H,1,80
  140.     XCHG
  141.     LXI    H,88
  142.     ADDR    IX
  143.     MOV    D,A
  144.     MOV    E,M
  145.     STMT    M,11
  146.     LXI    H,-48
  147.     DADD    D,0
  148.     POP    D
  149.     DADD    D,0
  150.     MOV    -6(IX),H
  151.     MOV    -7(IX),L
  152. ;
  153. ;       END; {OF CASE}
  154. L241
  155.     XRA    A
  156. L217
  157. ;
  158. ;I:=I+1;
  159.     STMT    D,12
  160.     MOV    L,-1(IX)
  161.     MOV    H,0(IX)
  162.     INX    H
  163.     MOV    0(IX),H
  164.     MOV    -1(IX),L
  165. ;
  166. ;UNTIL I > LEN;
  167.     STMT    D,13
  168.     CTRL    M,13
  169.     MOV    L,-1(IX)
  170.     MOV    H,0(IX)
  171.     MOV    E,-3(IX)
  172.     MOV    D,-2(IX)
  173.     GRET    D,0
  174.     JNC    L201
  175. ;
  176. ;
  177. ;1: { Exit immediately upon detection of a fatal error.}
  178.     STMT    D,14
  179. L159
  180. ;
  181. ;STRTOINT:=SIGN * VAL;
  182.     STMT    D,15
  183.     MOV    L,-5(IX)
  184.     MOV    H,-4(IX)
  185.     MOV    E,-7(IX)
  186.     MOV    D,-6(IX)
  187.     MULT    D,0
  188.     MOV    3(IX),H
  189.     MOV    2(IX),L
  190. ;END; {OF PROCEDURE}
  191.     STMT    D,16
  192.     EXIT    D,81
  193.