home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / m2 / CycloneModules.lha / modules / txt / convert.mod < prev    next >
Text File  |  1997-01-03  |  3KB  |  112 lines

  1. IMPLEMENTATION MODULE Convert;
  2.  
  3. (* (C) Copyright 1993 Marcel Timmermans. All rights reserved. *)
  4.  
  5. FROM String IMPORT Length;
  6.  
  7. PROCEDURE IntToStr(int:LONGINT; VAR str:ARRAY OF CHAR; len:INTEGER; VAR success:BOOLEAN);
  8. CONST base = 10;
  9.       maxstr = 31;
  10. VAR minus : BOOLEAN;
  11.     i,j,l:INTEGER;
  12.     s:ARRAY[0..maxstr] OF CHAR;
  13. BEGIN
  14.  str[0]:=0C; success:=FALSE;
  15.  minus := int<0; IF minus THEN int:=-int; END;
  16.  i:=0; 
  17.  REPEAT 
  18.   s[i]:= CHR(int MOD base + ORD("0"));
  19.   int:=int DIV base;
  20.   INC(i);
  21.  UNTIL int=0;
  22.  IF minus THEN s[i]:='-'; INC(i); END;
  23.  IF i>HIGH(str) THEN RETURN END; (* too many digit's *)
  24.  j:=0; l:=i;
  25.  WHILE l<len DO str[j]:=' '; INC(j); INC(l); END;
  26.  WHILE i>0 DO DEC(i); str[j]:=s[i]; INC(j); END;
  27.  str[j]:=0C;
  28.  success:=TRUE;
  29. END IntToStr;
  30.  
  31. PROCEDURE CardToStr(int:LONGCARD; VAR str:ARRAY OF CHAR; len:INTEGER; VAR success:BOOLEAN);
  32. CONST base = 10;
  33.       maxstr = 31;
  34. VAR minus : BOOLEAN;
  35.     i,j,l:INTEGER;
  36.     s:ARRAY[0..maxstr] OF CHAR;
  37. BEGIN
  38.  str[0]:=0C; success:=FALSE;
  39.  i:=0; 
  40.  REPEAT 
  41.   s[i]:= CHR(int MOD base + ORD("0"));
  42.   int:=int DIV base;
  43.   INC(i);
  44.  UNTIL int=0;
  45.  IF i>HIGH(str) THEN RETURN END; (* too many digit's *)
  46.  j:=0; l:=i;
  47.  WHILE l<len DO str[j]:=' '; INC(j); INC(l); END;
  48.  WHILE i>0 DO DEC(i); str[j]:=s[i]; INC(j); END;
  49.  str[j]:=0C;
  50.  success:=TRUE;
  51. END CardToStr;
  52.  
  53. PROCEDURE StrToInt(str:ARRAY OF CHAR; VAR int:LONGINT;  VAR success:BOOLEAN);
  54. VAR
  55.   i,l,n: INTEGER;
  56.   ch   : CHAR;
  57.   neg  : BOOLEAN;
  58.   hex  : BOOLEAN;
  59.  
  60.   PROCEDURE Next;
  61.   BEGIN
  62.     IF i=l THEN ch := 0C ELSE ch := CAP(str[i]); INC(i) END;
  63.   END Next;
  64.  
  65. BEGIN 
  66.  success:=TRUE;
  67.  l:=Length(str);
  68.  WHILE (l>0) AND (str[l-1]=' ') DO DEC(l); END;
  69.  hex := (l>0) AND (str[l-1]='H');
  70.  i:=0; int:=0;
  71.  REPEAT Next UNTIL ch#' ';
  72.  IF hex THEN
  73.    n:=0;
  74.    LOOP
  75.     CASE ch OF
  76.        '0'..'9' : IF n=8 THEN success:=FALSE; EXIT END;
  77.                   int:=16*int+ORD(ch)-ORD('0');
  78.      | 'A'..'F' : IF n=8 THEN success:=FALSE; EXIT END;
  79.                   int:=16*int+ORD(ch)+(10-ORD('A'));
  80.     ELSE
  81.      success:=ch='H';
  82.      EXIT;
  83.     END;
  84.     Next; INC(n);
  85.    END;
  86.  ELSE
  87.    neg:=FALSE;
  88.    CASE ch OF 
  89.     '-','+' : neg:=ch='-'; Next 
  90.    ELSE END;
  91.    LOOP
  92.     CASE ch OF
  93.      '0'..'9': n:=ORD(ch)-ORD('0');
  94.                IF int>(MAX(LONGINT)-n) DIV 10 THEN 
  95.                  success:=FALSE;
  96.                  EXIT;
  97.                ELSE 
  98.                  int:=10*int+n;
  99.                END;
  100.     ELSE
  101.      IF neg THEN int:=-int END;
  102.      success:=ch=0C;
  103.      EXIT;
  104.     END;
  105.     Next;
  106.    END;
  107.  END;
  108. END StrToInt;
  109.  
  110. BEGIN
  111. END Convert.
  112.