home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 341.img / TCS161S.ZIP / GENSUBS.PAS < prev    next >
Pascal/Delphi Source File  |  1989-11-14  |  6KB  |  298 lines

  1.  
  2. unit gensubs;
  3.  
  4. interface
  5.  
  6. uses dos,gentypes;
  7.  
  8. function strr (i: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. function now:longint;
  16. function timestr (time:longint):sstr;
  17. function timeval (q:sstr):longint;
  18. function timepart (time:longint):longint;
  19. function datestr (time:longint):sstr;
  20. function dateval (q:sstr):longint;
  21. function datepart (time:longint):longint;
  22. function upstring (a:anystr):anystr;
  23. function yastring (s:sstr):boolean;
  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 (i:integer):mstr;
  43. var b:mstr;
  44. begin
  45.   str (i,b);
  46.   strr:=b
  47. end;
  48.  
  49. function streal (r:real):mstr;
  50. var b:mstr;
  51. begin
  52.   str (r:0:0,b);
  53.   streal:=b
  54. end;
  55.  
  56. function strlong (l:longint):mstr;
  57. var v:mstr;
  58. begin
  59.   str (l,v);
  60.   strlong:=v
  61. end;
  62.  
  63. function valu (q:mstr):integer;
  64. var i,s,pu:integer;
  65.     r:real;
  66. begin
  67.   valu:=-1;
  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] then begin
  185.      dt.hour:=h1;
  186.      if k='P' then dt.hour:=dt.hour+12
  187.   end else
  188.    if k='P' then dt.hour:=12
  189.     else dt.hour:=0;
  190.   timeval:=timepart(packtime(dt))
  191. end;
  192.  
  193. function dateval (q:sstr):longint;
  194. var dt:datetime;
  195. begin
  196.   cleardatetime (dt);
  197.   parse3 (q,dt.month,dt.day,dt.year);
  198.   if ((dt.year<100) and (dt.year>00)) then dt.year:=dt.year+1900;
  199.   dateval:=datepart(packtime(dt))
  200. end;
  201.  
  202. function upstring (a:anystr):anystr;
  203. var cnt:integer;
  204. begin
  205.   for cnt:=1 to length(a) do a[cnt]:=upcase(a[cnt]);
  206.   upstring:=a
  207. end;
  208.  
  209. function yastring (s:sstr):boolean;
  210. var cnt:integer;
  211. begin
  212. yastring:=false;
  213.    for cnt:=1 to length(s) do s[cnt]:=upcase(s[cnt]);
  214.    if length(s)>0 then
  215.    yastring:=true else
  216.    yastring:=false
  217. end;
  218.  
  219. function match (s1,s2:anystr):boolean;
  220. var cnt:integer;
  221. begin
  222.   match:=false;
  223.   if length(s1)<>length(s2) then exit;
  224.   for cnt:=1 to length(s1) do
  225.     if upcase(s1[cnt])<>upcase(s2[cnt])
  226.       then exit;
  227.   match:=true
  228. end;
  229.  
  230. function devicename (name:lstr):boolean;
  231. var f:file;
  232.     n:integer absolute f;
  233.     r:registers;
  234. begin
  235.   devicename:=false;
  236.   assign (f,name);
  237.   reset (f);
  238.   if ioresult<>0 then exit;
  239.   r.bx:=n;
  240.   r.ax:=$4400;
  241.   intr ($21,r);
  242.   devicename:=(r.dx and 128)=128;
  243.   close (f)
  244. end;
  245.  
  246. function exist (n:lstr):boolean;
  247. var f:file;
  248.     i:integer;
  249. begin
  250. i:=0;
  251.   assign (f,n);
  252.   reset (f);
  253.   i:=ioresult;
  254.   exist:=i=0;
  255.   close (f);
  256.   i:=ioresult
  257. end;
  258.  
  259. procedure appendfile (name:lstr; var q:text);
  260. var n:integer;
  261.     b:boolean;
  262.     f:file of char;
  263. begin
  264.   close (q);
  265.   n:=ioresult;
  266.   assign (q,name);
  267.   assign (f,name);
  268.   reset (f);
  269.   b:=(ioresult<>0) or (filesize(f)=0);
  270.   close (f);
  271.   n:=ioresult;
  272.   if b
  273.     then rewrite (q)
  274.     else append (q)
  275. end;
  276.  
  277. procedure addexitproc (p:pointer);
  278. begin
  279.   inc (exitstackptr);
  280.   if exitstackptr>maxexitprocs then begin
  281.     writeln ('Too many exit procedures');
  282.     halt (255)
  283.   end else begin
  284.     exitstack[exitstackptr]:=exitproc;
  285.     exitproc:=p
  286.   end
  287. end;
  288.  
  289. procedure doneexitproc;
  290. begin
  291.   exitproc:=exitstack[exitstackptr];
  292.   dec (exitstackptr)
  293. end;
  294.  
  295. begin
  296.   exitstackptr:=0
  297. end.
  298.