home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 April A / Pcwk4a98.iso / Wtestowe / OnNet16 / STRIPSCR.EDS < prev    next >
Text File  |  1997-01-08  |  7KB  |  224 lines

  1. *---------------------------------------------------------------------*
  2. *                 STRIPSCR.EDS                  *
  3. *---------------------------------------------------------------------*
  4. *
  5. * (c) Copyright 1987,1993 RELAY Technology Inc.
  6. *     All rights reserved.
  7. *
  8. * FUNCTION: Actual Editor Macro to perform the stripping of blank lines, comment
  9. *        lines, lines with comments and commands on the same line, and blank
  10. *        spaces at the beginning of lines.  This Editor Macro also replaces
  11. *        references to GOTO, GOSUB and LOOP statement labels with absolute
  12. *        line numbers, to further enhance perfromance through minimizing
  13. *        file size and optimizing label references.
  14. *
  15. *        This macro can be run from the editor command line, or can be
  16. *        executed via STRIPSCR.BAT, which serially optimizes a list of
  17. *        files.
  18. *
  19. *---------------------------------------------------------------------*
  20. *                 Module History                  *
  21. *---------------------------------------------------------------------*
  22. *                                      *
  23. *  Latest Revision -                              *
  24. *                                      *
  25. *     $Revision:   1.8  $                          *
  26. *                                      *
  27. *  Modification Log -                              *
  28. *                                      *
  29. *     M0001V70 Put Relay Source Files under PVCS Control          *
  30. *          by JMM on 12/18/95                      *
  31. *                                      *
  32. *---------------------------------------------------------------------*
  33.  
  34. on error
  35. set display off
  36.  
  37. * Parse options
  38.      &FILEAS = "&FDIR(&EFILEID)*.SCX"       ;* Name to save file as
  39.      &ARG = 1
  40.      loop -OPT1 &N
  41.      if (&&ARG = NOFILE) &FILEAS = "" ; goto -OPT1
  42.      if (&&ARG = FILEAS) &ARG = &ARG+1 ; &FILEAS = &&ARG ; goto -OPT1
  43.      stop error "W&0 - Invalid option: &&ARG"
  44. -OPT1     &ARG = &ARG+1
  45.  
  46. * Place the copyright message in the variable ©RITE.  This is added to the
  47. * top of the stripped script after all of the stripping process has finished.
  48.  
  49.       ©RITE = "* Copyright (c) 1993 Relay Technology Inc."
  50.  
  51. * Delete Comment lines (lines with '*' in column 1)
  52.       top
  53. -DCOMM1   loop END1 until not found
  54.         quiet locate /*/ 1
  55.         if not found goto END1
  56.         delete
  57. -END1        up
  58.  
  59.  
  60. * Delete Comments found on lines with Commands (lines with ';*' in them)
  61.      top
  62. -DCOMM2  loop END2 until not found
  63.        quiet locate /;*/
  64.        if not found goto END2
  65.        &STRIP=&instring(&erecord,";*")
  66.        &CLEANED=&substring(&erecord,1,&STRIP-1)
  67.        delete
  68.        up
  69.        add 1 "&CLEANED"
  70. -END2       up
  71.  
  72. * Delete Blank lines
  73.      top
  74. -DBLANK  loop END3 until not found
  75.        quiet locate /                     / 1
  76.        if not found goto END3
  77.        if not (&length(&trim(&erecord))=0) goto DBLANK
  78.        delete
  79. -END3       up
  80.  
  81. * Delete blanks at the beginning of lines
  82.      top
  83. -DSPACES loop END4 until not found
  84.        quiet c / //* 1
  85. -END4       top
  86.  
  87.      if (&defined(STRIPID)=GLOBAL)
  88.      then add 1 "* &STRIPID"
  89.      else add 1 "* &substring(&fileid(&efileid),3)"
  90.      add 1 "©RITE"
  91.  
  92. * Replace LOOP, GOTO and GOSUB label references with absolute line numbers
  93. -SPEED
  94. * Set up variable that contains all the possible values for the "ON" conditions
  95.      &PARMS = "ATTNKEY,BREAK,DISCONNECT,ERROR,HANGUP,HOTKEY,IDLE,NOMEMORY,PRTSCREEN,RECEIVE,TIMEOUT,TIMER,NOTRESPONDING"
  96.      argstring &PARMS
  97.      parse "," ...
  98.      &SUB = 1
  99.      &TOTWORDS = &n         ;* total number of "ON" conditions
  100.  
  101. * Load up all the keywords that could follow "ON" into an array (WORD1,WORD2,etc.)
  102.      loop KEYWORDS until (&SUB > &TOTWORDS)
  103.        &WORD&SUB = &&SUB
  104.        &SUB = &SUB + 1
  105. -KEYWORDS
  106.  
  107.      top
  108.      &CNT=1
  109.      loop FINDLABL until not found
  110.        quiet locate /-/1
  111.        if not found goto CONT
  112.        &TEMPREC=&erecord
  113.      &X=1
  114.      loop FINDSPAC *
  115.        &CHAR=&substring(&TEMPREC,&X,1)
  116.      if (&CHAR="") or (&CHAR=" ") then &LABELSZ=&X
  117.        then goto CONTA
  118.      &X=&X+1
  119. -FINDSPAC
  120. -CONTA
  121.      &LBLENGTH=&LABELSZ-2
  122.      &LABEL&CNT=&trim(&substring(&TEMPREC,2,&LBLENGTH))
  123.      &LBNUM&CNT=&eline
  124.      &CNT=&CNT+1
  125. -FINDLABL
  126.  
  127. -CONT
  128.      &PASS=1
  129.      &DASH="-"
  130.      &MAX=&CNT-1
  131. -CONT1
  132.      &LEV=1
  133.      &CMD1="gosub"
  134.      &CMD2="goto"
  135.      &CMD3="loop"
  136.      loop LEVELS until (&LEV > 3)
  137.        &CNT = 1
  138.        loop LABELS until (&CNT > &MAX)
  139.          top
  140.          &TEMPREC=""
  141. -AGAIN
  142.          quiet locate /&CMD&LEV &DASH.&LABEL&CNT/
  143.          if not found goto NEXT
  144.          &TEMPREC=&erecord
  145.          gosub ONCHECK
  146.          &HRC = &retcode
  147.          if (&HRC = 1) goto AGAIN
  148.          &ARGLNGTH=&length("&CMD&LEV &DASH.&LABEL&CNT")
  149.          &STARTPOS = &instring(&TEMPREC,&CMD&LEV &DASH.&LABEL&CNT)
  150.          &ENDPOS = &STARTPOS + &ARGLNGTH - 1
  151.  
  152. * If starting position is one (1), make sure there is a blank space after the label
  153.          if (&STARTPOS <> 1) goto CONT2
  154.          if (&substring(&TEMPREC,&ENDPOS + 1,1) <> " ") and (&substring(&TEMPREC,&ENDPOS + 1,1) <> "") and (&substring(&TEMPREC,&ENDPOS + 1,1) <> ";") goto AGAIN
  155.            else goto CONT3
  156.  
  157. -CONT2
  158. * Starting position is greater than one (1). Make sure there is a blank space on
  159. * either side of the argument
  160.          if (&substring(&TEMPREC,&STARTPOS - 1,1) <> " ") and (&substring(&TEMPREC,&STARTPOS - 1,1) <> ";") goto AGAIN
  161.          if (&substring(&TEMPREC,&ENDPOS + 1,1) <> " ") and (&substring(&TEMPREC,&ENDPOS + 1,1) <> "") and (&substring(&TEMPREC,&ENDPOS + 1,1) <> ";") goto AGAIN
  162.  
  163. -CONT3
  164. * Find beginning position of label in current line.
  165.          &LABELPOS=&instring(&TEMPREC,&DASH.&LABEL&CNT,&STARTPOS,&ENDPOS)
  166.  
  167. * Bring cursor to column 1
  168.          up 1
  169.          down 1
  170.  
  171. * Change the label to it's corresponding absolute line number
  172.          quiet change /&DASH.&LABEL&CNT/:&LBNUM&CNT/1 &LABELPOS
  173.          gosub CHKLEN
  174.          goto AGAIN
  175. -NEXT
  176.      &CNT=&CNT+1
  177. -LABELS
  178.      &LEV = &LEV + 1
  179. -LEVELS
  180.      &PASS = &PASS + 1
  181.      if (&PASS > 2) goto ENDALL
  182.        else &DASH = ""
  183.        else goto CONT1
  184.  
  185. * Subroutine to check if the changed line now exceeds the 255 character limit.
  186. * If so, change it back to the original form.
  187. -CHKLEN
  188.      &TEMPREC=&erecord
  189.      &RECLEN=&length(&TEMPREC)
  190.      if (&RECLEN<=255) return
  191.  
  192. * Bring cursor to column 1
  193.      up 1
  194.      down 1
  195.      quiet change /:&LBNUM&CNT/&DASH.&LABEL&CNT/1 &LABELPOS
  196.      return
  197.  
  198. * Subroutine to check if the line contains an "ON" condition; if so the
  199. * label name should not be changed to an absolute line number
  200. -ONCHECK
  201.      &TEMPREC = &upper(&TEMPREC)
  202.      if (&instring(&TEMPREC,"ON ") = 0) return
  203.      argstring &TEMPREC
  204.      parse " " ...
  205.      &INC = 1
  206.      loop FINDON until (&INC > &n)
  207.        &TOKEN = &&INC
  208.        if (&instring(&TOKEN,";") > 0) &TOKEN = &substring(&TOKEN,&instring(&TOKEN,";")+1)
  209.        if (&TOKEN <> ON) goto FINDNEXT
  210.        &COND = &INC + 1
  211.        &CLEN = &length(&&COND)
  212.        &SUB = 1
  213.        loop FINDWORD until (&SUB > &TOTWORDS)
  214.          if (&&COND = &substring(&WORD&SUB,1,&CLEN)) return 1
  215.          &SUB = &SUB + 1
  216. -FINDWORD
  217. -FINDNEXT
  218.        &INC = &INC + 1
  219. -FINDON
  220.      return
  221.  
  222. * Save file and stop execution
  223. -ENDALL  if (&FILEAS<>"") file &FILEAS
  224.