DBFIELDS.MOD 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. IMPLEMENTATION MODULE DBFields;
  2. (*
  3. * ModBase
  4. * Release 3.0
  5. * (c) Copyright 1986 - 1991 John McMonagle & Donald G. Fletcher
  6. * (c) Copyright 1986 - 1991 PMI
  7. * P.O. Box 8402
  8. * Green Bay Wi 53308
  9. * All Rights Reserved
  10. *
  11. *)
  12. IMPORT ModBase3;
  13. FROM ModBase3 IMPORT DBFile, GetField,FieldList,DBFieldPtr;
  14. FROM DateFunctions IMPORT Date;
  15. FROM StrConv IMPORT RealToStr, StrToReal;
  16. FROM NumTypes IMPORT Real8;
  17. CONST MaxDigits = 18;
  18. PROCEDURE DataFormatToDate(dbstring: ARRAY OF CHAR; VAR d: Date);
  19. (* Converts a string from dbase data format (yyyymmdd) to Date *)
  20. VAR i: CARDINAL;
  21. BEGIN
  22. IF dbstring[0] = ' ' THEN
  23. d.yr := 0; d.mo := 0; d.day := 0
  24. ELSE
  25. d.yr := 0;
  26. FOR i := 0 TO 3 DO
  27. d.yr := (d.yr * 10) + (ORD(dbstring[i])-60B)
  28. END;
  29. d.mo := (ORD(dbstring[4])-60B) * 10 + (ORD(dbstring[5])-60B);
  30. d.day := (ORD(dbstring[6])-60B) * 10 + (ORD(dbstring[7])-60B);
  31. END;
  32. END DataFormatToDate;
  33. PROCEDURE DateToDataFormat(d: Date; VAR datestring: ARRAY OF CHAR);
  34. BEGIN
  35. datestring[0] := CHR(d.yr DIV 1000 + 60B);
  36. d.yr := d.yr MOD 1000;
  37. datestring[1] := CHR(d.yr DIV 100 + 60B);
  38. d.yr := d.yr MOD 100;
  39. datestring[2] := CHR(d.yr DIV 10 + 60B);
  40. datestring[3] := CHR(d.yr MOD 10 + 60B);
  41. datestring[4] := CHR(d.mo DIV 10 + 60B);
  42. datestring[5] := CHR(d.mo MOD 10 + 60B);
  43. datestring[6] := CHR(d.day DIV 10 + 60B);
  44. datestring[7] := CHR(d.day MOD 10 + 60B);
  45. IF HIGH(datestring) > 7 THEN
  46. datestring[8] := 0C;
  47. END;
  48. END DateToDataFormat;
  49. PROCEDURE GetDateField(VAR alias: DBFile; fieldnum: CARDINAL;
  50. VAR d: Date);
  51. VAR datestr: ARRAY [0..7] OF CHAR;
  52. BEGIN
  53. GetField(alias, fieldnum, datestr);
  54. DataFormatToDate(datestr, d);
  55. END GetDateField;
  56. PROCEDURE GetLogicalField(VAR alias: DBFile; fieldnum: CARDINAL;
  57. VAR l: BOOLEAN);
  58. VAR lstring: ARRAY [0..1] OF CHAR;
  59. BEGIN
  60. GetField(alias, fieldnum, lstring);
  61. IF (CAP(lstring[0]) = 'Y') OR (CAP(lstring[0]) = 'T') THEN
  62. l := TRUE
  63. ELSE
  64. l := FALSE
  65. END;
  66. END GetLogicalField;
  67. PROCEDURE GetNumField(VAR alias: DBFile; fieldnum: CARDINAL; VAR
  68. n: Real8);
  69. VAR nstring: ARRAY [1..MaxDigits] OF CHAR;
  70. ok: BOOLEAN;
  71. BEGIN
  72. GetField(alias, fieldnum, nstring);
  73. ok:=StrToReal(nstring,0, n)
  74. END GetNumField;
  75. PROCEDURE Replace(VAR alias: DBFile; fieldnum: CARDINAL; s: ARRAY
  76. OF CHAR);
  77. BEGIN
  78. ModBase3.Replace(alias,fieldnum,s);
  79. END Replace;
  80. PROCEDURE ReplaceD(VAR alias: DBFile; fieldnum: CARDINAL; d:
  81. Date);
  82. VAR dstring: ARRAY [0..9] OF CHAR;
  83. BEGIN
  84. DateToDataFormat(d, dstring);
  85. Replace(alias, fieldnum, dstring);
  86. END ReplaceD;
  87. PROCEDURE ReplaceL(VAR alias: DBFile; fieldnum: CARDINAL; l:
  88. BOOLEAN);
  89. VAR lchar: ARRAY [0..0] OF CHAR;
  90. BEGIN
  91. IF l THEN
  92. lchar[0] := 'T'
  93. ELSE
  94. lchar[0] := 'F'
  95. END;
  96. Replace( alias, fieldnum, lchar );
  97. END ReplaceL;
  98. PROCEDURE ReplaceN(VAR alias: DBFile; fieldnum: CARDINAL; n:
  99. Real8);
  100. VAR nstring: ARRAY [0..MaxDigits] OF CHAR;
  101. fldptr:DBFieldPtr;
  102. BEGIN
  103. fldptr:=FieldList(alias);
  104. WITH fldptr^[fieldnum] DO
  105. IF decplaces=0 THEN
  106. RealToStr(n, decplaces,
  107. size+1, nstring);(* assumes that Real to str will insert '.' *)
  108. nstring[size]:=0C;
  109. ELSE
  110. RealToStr(n, decplaces,
  111. size, nstring);
  112. END (* IF decplaces=0 *);
  113. Replace(alias, fieldnum, nstring);
  114. END (* With *);
  115. END ReplaceN;
  116. END DBFields.