home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 189.img / TCS120S.ZIP / GENERAL.PAS < prev    next >
Pascal/Delphi Source File  |  1988-04-20  |  6KB  |  291 lines

  1.  
  2. unit general;
  3.  
  4. interface
  5.  
  6. uses dos,types;
  7.  
  8. function strr (n:integer):mstr;
  9. function streal (r:real):mstr;
  10. function strlong (l:longint):mstr;
  11. function valu (q:mstr):integer;
  12. function addrstr (p:pointer):sstr;
  13. procedure parse3 (s:lstr; var a,b,c:word);
  14. function packtime (var dt:datetime):longint;
  15.     { Replaces Turbo's procedural version }
  16. function now:longint;
  17. function timestr (time:longint):sstr;
  18. function timeval (q:sstr):longint;
  19. function timepart (time:longint):longint;
  20. function datestr (time:longint):sstr;
  21. function dateval (q:sstr):longint;
  22. function datepart (time:longint):longint;
  23. function upstring (s:anystr):anystr;
  24. function match (s1,s2:anystr):boolean;
  25. function devicename (name:lstr):boolean;
  26. function exist (n:lstr):boolean;
  27. procedure appendfile (name:lstr; var q:text);
  28. procedure addexitproc (p:pointer);
  29. procedure doneexitproc;
  30.  
  31. implementation
  32.  
  33. const maxexitprocs=25;
  34.  
  35. var exitstack:array [1..maxexitprocs] of pointer;
  36.     exitstackptr:integer;
  37.  
  38. type packedtimerec=record
  39.        date,time:word
  40.      end;
  41.  
  42. function strr (n:integer):mstr;
  43. var q:mstr;
  44. begin
  45.   str (n,q);
  46.   strr:=q
  47. end;
  48.  
  49. function streal (r:real):mstr;
  50. var q:mstr;
  51. begin
  52.   str (r:0:0,q);
  53.   streal:=q
  54. end;
  55.  
  56. function strlong (l:longint):mstr;
  57. var q:mstr;
  58. begin
  59.   str (l,q);
  60.   strlong:=q
  61. end;
  62.  
  63. function valu (q:mstr):integer;
  64. var i,s,pu:integer;
  65.     r:real;
  66. begin
  67.   valu:=0;
  68.   if length(q)=0 then exit;
  69.   if not (q[1] in ['0'..'9','-']) then exit;
  70.   if length(q)>5 then exit;
  71.   val (q,r,s);
  72.   if s<>0 then exit;
  73.   if (r<=32767.0) and (r>=-32767.0)
  74.     then valu:=round(r)
  75. end;
  76.  
  77. function addrstr (p:pointer):sstr;
  78.  
  79.   function hexstr (n:integer):sstr;
  80.  
  81.     function hexbytestr (b:byte):sstr;
  82.     const hexchars:array[0..15] of char='0123456789ABCDEF';
  83.     begin
  84.       hexbytestr:=hexchars[b shr 4]+hexchars[b and 15]
  85.     end;
  86.  
  87.   begin
  88.     hexstr:=hexbytestr (hi(n))+hexbytestr(lo(n))
  89.   end;
  90.  
  91. begin
  92.   addrstr:=hexstr(seg(p^))+':'+hexstr(ofs(p^))
  93. end;
  94.  
  95. procedure parse3 (s:lstr; var a,b,c:word);
  96. var p:integer;
  97.  
  98.   procedure parse1 (var n:word);
  99.   var ns:lstr;
  100.   begin
  101.     ns[0]:=#0;
  102.     while (p<=length(s)) and (s[p] in ['0'..'9']) do begin
  103.       ns:=ns+s[p];
  104.       p:=p+1
  105.     end;
  106.     if length(ns)=0
  107.       then n:=0
  108.       else n:=valu(ns);
  109.     if p<length(s) then p:=p+1
  110.   end;
  111.  
  112. begin
  113.   p:=1;
  114.   parse1 (a);
  115.   parse1 (b);
  116.   parse1 (c)
  117. end;
  118.  
  119. function packtime (var dt:datetime):longint;
  120. var l:longint;
  121. begin
  122.   dos.packtime (dt,l);
  123.   packtime:=l
  124. end;
  125.  
  126. function now:longint;
  127. var dt:datetime;
  128.     t:word;
  129.     l:longint;
  130. begin
  131.   gettime (dt.hour,dt.min,dt.sec,t);
  132.   getdate (dt.year,dt.month,dt.day,t);
  133.   l:=packtime (dt);
  134.   now:=l
  135. end;
  136.  
  137. function timestr (time:longint):sstr;
  138. var h1:integer;
  139.     ms:sstr;
  140.     dt:datetime;
  141. const ampmstr:array [false..true] of string[2]=('am','pm');
  142. begin
  143.   unpacktime (time,dt);
  144.   h1:=dt.hour;
  145.   if h1=0
  146.     then h1:=12
  147.     else if h1>12
  148.       then h1:=h1-12;
  149.   ms:=strr(dt.min);
  150.   if dt.min<10 then ms:='0'+ms;
  151.   timestr:=strr(h1)+':'+ms+' '+ampmstr[dt.hour>11]
  152. end;
  153.  
  154. function datestr (time:longint):sstr;
  155. var dt:datetime;
  156. begin
  157.   unpacktime (time,dt);
  158.   datestr:=strr(dt.month)+'/'+strr(dt.day)+'/'+strr(dt.year-1900)
  159. end;
  160.  
  161. function timepart (time:longint):longint;
  162. begin
  163.   timepart:=time and $0000ffff;
  164. end;
  165.  
  166. function datepart (time:longint):longint;
  167. begin
  168.   datepart:=time and $ffff0000;
  169. end;
  170.  
  171. procedure cleardatetime (var dt:datetime);
  172. begin
  173.   unpacktime (0,dt)
  174. end;
  175.  
  176. function timeval (q:sstr):longint;
  177. var h1,t:word;
  178.     k:char;
  179.     dt:datetime;
  180. begin
  181.   cleardatetime (dt);
  182.   parse3 (q,h1,dt.min,t);
  183.   k:=upcase(q[length(q)-1]);
  184.   if h1 in [1..11]
  185.     then
  186.       begin
  187.         dt.hour:=h1;
  188.         if k='P' then dt.hour:=dt.hour+12
  189.       end
  190.     else
  191.       if k='P'
  192.         then dt.hour:=12
  193.         else dt.hour:=0;
  194.   timeval:=timepart(packtime(dt))
  195. end;
  196.  
  197. function dateval (q:sstr):longint;
  198. var dt:datetime;
  199. begin
  200.   cleardatetime (dt);
  201.   parse3 (q,dt.month,dt.day,dt.year);
  202.   if dt.year<100 then dt.year:=dt.year+1900;
  203.   dateval:=datepart(packtime(dt))
  204. end;
  205.  
  206. function upstring (s:anystr):anystr;
  207. var cnt:integer;
  208. begin
  209.   for cnt:=1 to length(s) do s[cnt]:=upcase(s[cnt]);
  210.   upstring:=s
  211. end;
  212.  
  213. function match (s1,s2:anystr):boolean;
  214. var cnt:integer;
  215. begin
  216.   match:=false;
  217.   if length(s1)<>length(s2) then exit;
  218.   for cnt:=1 to length(s1) do
  219.     if upcase(s1[cnt])<>upcase(s2[cnt])
  220.       then exit;
  221.   match:=true
  222. end;
  223.  
  224. function devicename (name:lstr):boolean;
  225. var f:file;
  226.     n:integer absolute f;
  227.     r:registers;
  228. begin
  229.   devicename:=false;
  230.   assign (f,name);
  231.   reset (f);
  232.   if ioresult<>0 then exit;
  233.   r.bx:=n;
  234.   r.ax:=$4400;
  235.   intr ($21,r);
  236.   devicename:=(r.dx and 128)=128;
  237.   close (f)
  238. end;
  239.  
  240. function exist (n:lstr):boolean;
  241. var f:file;
  242.     i:integer;
  243. begin
  244.   assign (f,n);
  245.   reset (f);
  246.   i:=ioresult;
  247.   exist:=i=0;
  248.   close (f);
  249.   i:=ioresult
  250. end;
  251.  
  252. procedure appendfile (name:lstr; var q:text);
  253. var n:integer;
  254.     b:boolean;
  255.     f:file of char;
  256. begin
  257.   close (q);
  258.   n:=ioresult;
  259.   assign (q,name);
  260.   assign (f,name);
  261.   reset (f);
  262.   b:=(ioresult<>0) or (filesize(f)=0);
  263.   close (f);
  264.   n:=ioresult;
  265.   if b
  266.     then rewrite (q)
  267.     else append (q)
  268. end;
  269.  
  270. procedure addexitproc (p:pointer);
  271. begin
  272.   inc (exitstackptr);
  273.   if exitstackptr>maxexitprocs then begin
  274.     writeln ('Too many exit procedures');
  275.     halt (255)
  276.   end else begin
  277.     exitstack[exitstackptr]:=exitproc;
  278.     exitproc:=p
  279.   end
  280. end;
  281.  
  282. procedure doneexitproc;
  283. begin
  284.   exitproc:=exitstack[exitstackptr];
  285.   dec (exitstackptr)
  286. end;
  287.  
  288. begin
  289.   exitstackptr:=0
  290. end.
  291.