Download jsTitleAndFootnote.sas jsTitleAndFootnote.sasSubmit a comment

%* Richard A. DeVenezia;
%* http://www.devenezia.com;
%* March 2002
%* ;

%* global macro variables used amongst several macros;
%global jsTitleAndFootnoteFileref;
%global jsTitleAndFootnoteUseCount;
%macro jsWriter(type,n,string,fileref,justify=left);
  %* Richard A. DeVenezia;
  %* http://www.devenezia.com;

  %* type    - tag, title or footnote;
  %* n       - N of footnote or title;
  %* string  - text to appear in title or footnote;
  %* fileref - fileref to write to;
  %* justify - reserved for future use;

  %local fid rc i L L2 indent fileref this useCount position useString;

  %let this = jsWriter;

  %if (&fileref eq %str()) %then %do;
    %put WARNING: &this;
    %put WARNING: No where to write since jsTitleFootnoteReset() was unsuccessful.;
    %goto macroExit;
  %end;

  %let fid = %sysfunc (fopen (&fileref, A));
  %if &fid %then %do;
    %if &type = tag %then %do;
      %let rc = %sysfunc (fput(&fid, // Generated by SAS macro &this %sysfunc(datetime(),datetime16.)));
      %let rc = %sysfunc (fwrite(&fid));
      %let rc = %sysfunc (fput(&fid, // Richard A. DeVenezia ));
      %let rc = %sysfunc (fwrite(&fid));
      %let rc = %sysfunc (fput(&fid, // http://www.devenezia.com ));
      %let rc = %sysfunc (fwrite(&fid));
      %let rc = %sysfunc (fput(&fid, %str() ));
      %let rc = %sysfunc (fwrite(&fid));
      %put NOTE: jsWriter wrote a datestamp comment.;
    %end;
    %else
    %if &type = title or &type = footnote %then %do;

      %if (&n < 1 or &n > 10) %then %do;
        %put WARNING: &this;
        %put WARNING: &type&n rejected. Number [&n] should be from 1 to 10.;
        %goto macroExit;
      %end;

      %if &type = title %then %do;
        %let position = %eval(&N*4+1);
        %let useCount = %substr (&jsTitleAndFootnoteUseCount,&position,3);
        %let useCount = %eval (&useCount+1);
      %end;
      %else %do;
        %let position = %eval(&N*4+41);
        %let useCount = %substr (&jsTitleAndFootnoteUseCount,&position,3);
        %let useCount = %eval (&useCount+1);
      %end;

      %let jsTitleAndFootnoteUseCount
      = %substr(&jsTitleAndFootnoteUseCount,1,%eval(&position-1))%sysfunc(putn(&useCount,z3.))%substr(&jsTitleAndFootnoteUseCount,%eval(&position+3));

      %if &useCount > 1 %then
        %let useString = use&useCount;

      %let rc = %sysfunc (fput(&fid, function &type.&N.&useString. %str(%(%)) { ));
      %let rc = %sysfunc (fwrite(&fid));
      %let rc = %sysfunc (fput(&fid, %str(  )document.write %str(%() ));
      %let rc = %sysfunc (fwrite(&fid));

      %let i = 1;
      %let L = %length (%superq(string));

      %let indent = %str (    );

      %do %while (&i <= &L);

        %let L2 = %eval (&L - &i + 1);
        %if &L2 > 100 %then %let L2 = 100;
        %let piece = %qsubstr(%superq(string),&i,&L2);

        %let rc = %sysfunc (fput(&fid, &indent"&piece" ));
        %let rc = %sysfunc (fwrite(&fid));

        %let i = %eval (&i + 100);
        %let indent = %str (  + );
      %end;

      %let rc = %sysfunc (fput(&fid, %str(  %);) ));
      %let rc = %sysfunc (fwrite(&fid));
      %let rc = %sysfunc (fput(&fid, } ));
      %let rc = %sysfunc (fwrite(&fid));
      %let rc = %sysfunc (fput(&fid, %str() ));
      %let rc = %sysfunc (fwrite(&fid));

      &type&n JUSTIFY=&JUSTIFY "<SCRIPT LANGUAGE=""JAVASCRIPT"">&type&n&useString()%str(;)</SCRIPT>";

      %put NOTE: jsWriter wrote &type&n..;
    %end;
    %let rc = %sysfunc (fclose (&fid));
  %end;
  %else
    %put ERROR: jsWriter could not open %sysfunc(pathname(&fileref)).;

%macroExit:
%mend jsWriter;
%macro jsTitleFootnoteReset(fileref);
  %* Richard A. DeVenezia;
  %* http://www.devenezia.com;

  %global jsTitleAndFootnoteFileref;
  %let jsTitleAndFootnoteFileref=;

  %global jsTitleAndFootnoteUseCount;
  %let jsTitleAndFootnoteUseCount = --- %sysfunc(repeat(%str(000 ),19))----;

  %local length rc this;

  %let length = 0;
  %let valid = 0;
  %let this = jsTitleFootnoteReset;

  %let length = %length (&fileref);
  %if &length = 0 %then %do;
    %put ERROR: &this: Null argument is invalid. Pass a defined FILEREF.;
    %goto errorExit;
  %end;

  %if &length > 8 %then %do;
    %put ERROR: &this: [&fileref] is too long.  Pass a defined FILEREF.;
    %goto errorExit;
  %end;

  %let rc = %sysfunc(fileref(&fileref));

  %if &rc > 0 %then %do;
    %put ERROR: &this: FILEREF [&fileref] is either undefined or invalid.;
    %goto errorExit;
  %end;

  %if &rc = 0 %then %do;
    %put WARNING: &this: The file [%sysfunc(pathname(&fileref))] will be overwritten.;

    %let rc = %sysfunc (fdelete(&fileref));
    %if &rc ne 0 %then %do;
      %put ERROR: &this: The file [%sysfunc(pathname(&fileref))] could not be deleted.;
      %goto macroExit;
    %end;
  %end;
  %else %do;
    %put NOTE: &this: The file [%sysfunc(pathname(&fileref))] will be created.;
  %end;

  %jsWriter (tag,0,0,fileref=&fileref);

  %if %sysfunc(fileref(&fileref)) = 0 %then %do;
    %let jsTitleAndFootnoteFileref = &fileref;

    title;
    footnote;
  %end;
  %else %do;
    %goto errorExit;
  %end;

  %goto macroExit;

%errorExit:
  %put ERROR: &this was unsuccessful.;

%macroExit:
%mend jsTitleFootnoteReset;
%macro jsTitle(n,string);
  %* Richard A. DeVenezia;
  %* http://www.devenezia.com;

  %jsWriter (title, &n, &string, &jsTitleAndFootnoteFileref);
%mend;
%macro jsFootnote(n,string);
  %* Richard A. DeVenezia;
  %* http://www.devenezia.com;

  %jsWriter (footnote, &n, &string, &jsTitleAndFootnoteFileref);
%mend;
%macro jsODSHeadText(filename);
  %* Richard A. DeVenezia;
  %* http://www.devenezia.com;

  <SCRIPT LANGUAGE=""JAVASCRIPT"" SRC=""&filename""></SCRIPT>
%mend;