home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 270.img / FORUM25C.ZIP / GENSUBS.PAS < prev    next >
Pascal/Delphi Source File  |  1988-12-27  |  6KB  |  281 lines

  1. {$R-,S-,I-,D-,V-,B-,N-,L- }
  2. {$O-}
  3.  
  4. unit gensubs;
  5.  
  6.  
  7. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  8.  
  9. interface
  10.  
  11. uses dos,gentypes;
  12.  
  13. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  14.  
  15.  
  16. Function strr (n:integer):mstr;
  17. Function streal (r:real):mstr;
  18. Function strlong (l:longint):mstr;
  19. Function valu (q:mstr):integer;
  20. Function addrstr (p:pointer):sstr;
  21. Procedure parse3 (s:lstr; VAR a,b,c:word);
  22. Function packtime (VAR dt:datetime):longint;
  23.     { Replaces Turbo's procedural version }
  24. Function now:longint;
  25. Function timestr (time:longint):sstr;
  26. Function timeval (q:sstr):longint;
  27. Function timepart (time:longint):longint;
  28. Function datestr (time:longint):sstr;
  29. Function dateval (q:sstr):longint;
  30. Function datepart (time:longint):longint;
  31. Function upstring (s:anystr):anystr;
  32. Function match (s1,s2:anystr):boolean;
  33. Function devicename (name:lstr):boolean;
  34. Function exist (n:lstr):boolean;
  35. Procedure appendfile (name:lstr; VAR q:text);
  36.  
  37.  
  38. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  39.  
  40. implementation
  41.  
  42. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  43.  
  44.  
  45. type packedtimerec=record
  46.        date,time:word
  47.      end;
  48.  
  49. Function strr (n:integer):mstr;
  50. VAR q:mstr;
  51. begin
  52.   str (n,q);
  53.   strr:=q
  54. end;
  55.  
  56. Function streal (r:real):mstr;
  57. VAR q:mstr;
  58. begin
  59.   str (r:0:0,q);
  60.   streal:=q
  61. end;
  62.  
  63. Function strlong (l:longint):mstr;
  64. VAR q:mstr;
  65. begin
  66.   str (l,q);
  67.   strlong:=q
  68. end;
  69.  
  70. Function valu (q:mstr):integer;
  71. VAR i,s,pu:integer;
  72.     r:real;
  73. begin
  74.   valu:=0;
  75.   if length(q)=0 then exit;
  76.   if not (q[1] in ['0'..'9','-']) then exit;
  77.   if length(q)>5 then exit;
  78.   val (q,r,s);
  79.   if s<>0 then exit;
  80.   if (r<=32767.0) and (r>=-32767.0)
  81.     then valu:=round(r)
  82. end;
  83.  
  84. Function addrstr (p:pointer):sstr;
  85.  
  86.   Function hexstr (n:integer):sstr;
  87.  
  88.     Function hexbytestr (b:byte):sstr;
  89.     const hexchars:array[0..15] of char='0123456789ABCDEF';
  90.     begin
  91.       hexbytestr:=hexchars[b shr 4]+hexchars[b and 15]
  92.     end;
  93.  
  94.   begin
  95.     hexstr:=hexbytestr (hi(n))+hexbytestr(lo(n))
  96.   end;
  97.  
  98. begin
  99.   addrstr:=hexstr(seg(p^))+':'+hexstr(ofs(p^))
  100. end;
  101.  
  102. Procedure parse3 (s:lstr; VAR a,b,c:word);
  103. VAR p:integer;
  104.  
  105.   Procedure parse1 (VAR n:word);
  106.   VAR ns:lstr;
  107.   begin
  108.     ns[0]:=#0;
  109.     while (p<=length(s)) and (s[p] in ['0'..'9']) do begin
  110.       ns:=ns+s[p];
  111.       p:=p+1
  112.     end;
  113.     if length(ns)=0
  114.       then n:=0
  115.       else n:=valu(ns);
  116.     if p<length(s) then p:=p+1
  117.   end;
  118.  
  119. begin
  120.   p:=1;
  121.   parse1 (a);
  122.   parse1 (b);
  123.   parse1 (c)
  124. end;
  125.  
  126. Function packtime (VAR dt:datetime):longint;
  127. VAR l:longint;
  128. begin
  129.   dos.packtime (dt,l);
  130.   packtime:=l
  131. end;
  132.  
  133. Function now:longint;
  134. VAR dt:datetime;
  135.     t:word;
  136.     l:longint;
  137. begin
  138.   gettime (dt.hour,dt.min,dt.sec,t);
  139.   getdate (dt.year,dt.month,dt.day,t);
  140.   l:=packtime (dt);
  141.   now:=l
  142. end;
  143.  
  144. Function timestr (time:longint):sstr;
  145. VAR h1:integer;
  146.     ms:sstr;
  147.     dt:datetime;
  148. const ampmstr:array [false..true] of string[2]=('am','pm');
  149. begin
  150.   unpacktime (time,dt);
  151.   h1:=dt.hour;
  152.   if h1=0
  153.     then h1:=12
  154.     else if h1>12
  155.       then h1:=h1-12;
  156.   ms:=strr(dt.min);
  157.   if dt.min<10 then ms:='0'+ms;
  158.   timestr:=strr(h1)+':'+ms+' '+ampmstr[dt.hour>11]
  159. end;
  160.  
  161. Function datestr (time:longint):sstr;
  162. VAR dt:datetime;
  163. begin
  164.   unpacktime (time,dt);
  165.   datestr:=strr(dt.month)+'/'+strr(dt.day)+'/'+strr(dt.year-1900)
  166. end;
  167.  
  168. Function timeval (q:sstr):longint;
  169. VAR h1,t:word;
  170.     k:char;
  171.     dt:datetime;
  172. begin
  173.   parse3 (q,h1,dt.min,t);
  174.   k:=upcase(q[length(q)-1]);
  175.   if h1 in [1..11]
  176.     then
  177.       begin
  178.         dt.hour:=h1;
  179.         if k='P' then dt.hour:=dt.hour+12
  180.       end
  181.     else
  182.       if k='P'
  183.         then dt.hour:=12
  184.         else dt.hour:=0;
  185.   timeval:=packtime(dt)
  186. end;
  187.  
  188. Function dateval (q:sstr):longint;
  189. VAR dt:datetime;
  190. begin
  191.   parse3 (q,dt.month,dt.day,dt.year);
  192.   if dt.year<100 then dt.year:=dt.year+1900;
  193.   dateval:=packtime(dt)
  194. end;
  195.  
  196. Function timepart (time:longint):longint;
  197. begin
  198.   timepart:=time and $0000ffff;
  199. end;
  200.  
  201. Function datepart (time:longint):longint;
  202. begin
  203.   datepart:=time and $ffff0000;
  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.  
  271.  
  272. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  273.  
  274. {initialization}
  275.  
  276. {/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\}
  277.  
  278.  
  279. begin
  280. end.
  281.