home *** CD-ROM | disk | FTP | other *** search
/ Boston 2 / boston-2.iso / DOS / PROGRAM / BASIC / POWBASIC / LIBRARY4 / APLIB.ZIP / SWW.BAS < prev    next >
BASIC Source File  |  1990-09-08  |  8KB  |  246 lines

  1.  
  2.  
  3.  
  4.  
  5. '               STATIC WINDOW CODER -- HB. Started 7-26-87 / 7-21-89
  6.  
  7.  
  8.  DIM LineBuffer$(30): DIM FL(30): DIM FC(30)
  9.  KEY(10) ON
  10.  ON KEY (10) GOSUB QT
  11.  Q$ = CHR$(34)
  12.  COLOR 14,0
  13.  CLS
  14.  
  15. Start:
  16.  LOCATE 25,1: PRINT "[F10] = Quit     [F1] = Help";: LOCATE 1,1
  17.  COLOR 15,2:LOCATE 3,23
  18.  PRINT " THE HB STATIC WINDOW CODE WRITER "
  19.  COLOR 14,0
  20.  IF COMMAND$ <> "" THEN
  21.     FlNm$ = COMMAND$
  22.  ELSE
  23.     ON ERROR GOTO NoSuchInputFl
  24.     FILES "*.SW"
  25.     ON ERROR GOTO 0
  26.     PRINT  '                                    get a directory ...
  27.  
  28.     COLOR 9,0: INPUT "NAME OF WINDOW DESIGN FILE TO PROCESS:";FlNm$
  29.     IF FlNm$ = "" THEN CLS: STOP
  30.     IF INSTR (FlNm$, ".") THEN FlNm$ = LEFT$(FlNm$,(INSTR(FlNm$,".")-1))
  31.  END IF
  32.  COLOR 10,0: CLS
  33.  COLOR 14,4:LOCATE 3,23
  34.  PRINT "THE HB STATIC WINDOW CODE WRITER "
  35.  COLOR 10,0
  36.  LOCATE 7,10:PRINT "Will now make window ";FlNm$;" into compliable Basic"
  37.  LOCATE 8,13:PRINT "DATA statements.
  38.  LOCATE 10,2:PRINT "INPUT FILE IS ";FlNm$+".SW"
  39.  LOCATE 11,2:PRINT "OUTPUT FILE IS ";FlNm$+".INC (note: if a file by that"
  40.  LOCATE 12,30:PRINT " name exists it will be overwritten.)"
  41.  LOCATE 14,20,1: PRINT "PROCEED ? (y/n)";
  42.  DO: K$ = UCASE$ (INKEY$) : LOOP UNTIL K$ = "Y" OR K$ = "N": PRINT K$
  43.  IF K$ <> "Y" THEN PRINT: PRINT "OK, ENDING HERE.": STOP
  44.  LOCATE ,,0
  45. '                                                 file names are now set ...
  46. OpenFiles:
  47.  
  48.  ON ERROR GOTO NoSuchInputFl:
  49.  OPEN FlNm$+".SW" FOR INPUT AS 1
  50.  ON ERROR GOTO 0
  51.     COLOR 12,0:PRINT:PRINT " INPUT FILE OPEN -- LENGTH = ";LOF(1)
  52.     COLOR 14,0
  53.  
  54.  OPEN FlNm$+".INC" FOR OUTPUT AS 2
  55.  
  56. '=========================== START PROCESSING INPUT FILE ======================
  57.  
  58. SkipBlanks:
  59.  L = 0
  60.  DO
  61.    INCR L: LINE INPUT #1, Inpt$                ' skip blank lines
  62.    IF EOF(1) THEN BEEP: PRINT "OOPS ... Premature End of File": STOP
  63.  LOOP UNTIL Inpt$ <> ""
  64. ''''''''''''''''''''''''''''''''  INCR L
  65.  C = 1
  66. '                                                   ' take 1st line ...
  67. SearchBox:
  68.  LOCATE 24,1: COLOR 12,0:PRINT Inpt$: COLOR 14,0
  69.  DO WHILE LEFT$(Inpt$,1) = " "                       ' chop spaces off left end
  70.      Inpt$ = MID$(Inpt$,2): GOSUB DispLns: INCR C '             and count them ...
  71.  LOOP
  72.  
  73.  IF LEFT$(Inpt$,1) <> "^" THEN
  74.    LOCATE 23,1: PRINT ">";Inpt$: PRINT "OOPS! Checking line";L;
  75.    PRINT ": TOP OF BOX NOT FOUND":STOP
  76.  END IF
  77.  
  78. ' ===================== SET WINDOW DIMENSIONS ================================
  79.  
  80.  CornerCol = C: BoxTop = L  '                       top of box has been found
  81.  
  82.  
  83.  Wid = 0
  84.  DO UNTIL MID$(Inpt$,Wid+1,1) <> "^": INCR Wid: LOOP  ' count carrots ...
  85.  
  86.  PRINT  "'   Code to write Static Window {";FlNm$;"} to Screen"
  87.  PRINT  "'        note: created by StatWindow Writer (SWW) from ";FlNm$;".SW"
  88.  PRINT
  89.  PRINT  " COLOR BoxColor MOD 16, BoxColor \ 16"
  90.  PRINT  " LOCATE "+ STR$(BoxTop)+","+STR$(CornerCol)
  91.  
  92.  T$ = "": FOR N = 1 TO Wid-2: T$ = T$+CHR$(196): NEXT
  93.  PRINT  " PRINT "+ Q$ + CHR$(218) + T$ + CHR$(191)
  94.  
  95.  PRINT #2, "'   Code to write Static Window {";FlNm$;"} to Screen"
  96.  PRINT #2, "'        note: created by StatWindow Writer (SWW) from ";FlNm$;".SW"
  97.  PRINT #2, ""
  98.  PRINT #2, " COLOR BoxColor MOD 16, BoxColor \ 16"
  99.  PRINT #2, " LOCATE "+ STR$(BoxTop)+","+STR$(CornerCol)
  100.  PRINT #2, " PRINT "+ Q$ + CHR$(218) + T$ + CHR$(191) + Q$
  101.  
  102.  
  103. '    ============= PARSE REMAINING LINES DOWN TO BOXBOTTOM ===============
  104.  
  105.  N = 2
  106.  DO
  107.    INCR L: LINE INPUT #1, Inpt$
  108.    IF EOF(1) THEN PRINT "ERROR -- INPUT FILE INCOMPLETE": STOP
  109.    LOCATE 24,1: COLOR 12,0:PRINT Inpt$: COLOR 14,0
  110.    GOSUB DispLns
  111.  
  112. '                                        cut off leading spaces ...
  113.  
  114.    DO WHILE LEFT$(Inpt$,1) = " ": Inpt$ = MID$(Inpt$,2) : GOSUB DispLns : LOOP
  115.    IF Inpt$ = "" THEN Inpt$ = "^^"
  116.    Inpt$ = MID$(Inpt$,2) '                   cut off the leading carrot ...
  117.  
  118. '                                             see if this is the bottom ...
  119.  
  120.    IF LEFT$(Inpt$,1) = "^" THEN
  121.        BoxBottom = L+1  '   if there's a second carrot this must be the bottom;
  122.        EXIT LOOP
  123.    ELSE
  124. '                                                  at this point the string
  125. '                                                  has to be either spaces
  126. '                                                  & text, spaces only, or "".
  127.  
  128. '               ============= Check4Fields =============
  129.  
  130.        C = 0
  131.        X = 0 '                 otherwise find the field locations in the line...
  132.        DO
  133.          INCR X: INCR C
  134.          IF MID$(Inpt$,X,1) = "{" THEN '              if a field marker is found
  135.            MID$(Inpt$,X) = " "  '                     replace it w/ a space ...
  136.            INCR Fld%
  137.            FL(Fld%) = L  '                          and plug its location into
  138.            FC(Fld%) = C  '                           arrays for later use ...
  139.          GOSUB DispLns
  140.          END IF
  141.          IF MID$(Inpt$,X,1) = "}" THEN MID$(Inpt$,X) = " " '    replace "}" w/  " "
  142.        LOOP UNTIL X >= LEN(Inpt$)
  143.  
  144.  
  145. '                    ============ TrimRightEndOff =============
  146.  
  147.        DO UNTIL RIGHT$(Inpt$,1) <> " " AND RIGHT$(Inpt$,1) <> "^"
  148.          Inpt$ = LEFT$(Inpt$,LEN(Inpt$)-1)
  149.        LOOP
  150.  
  151.    END IF
  152.  
  153.     PRINT #2, " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  154.     PRINT #2, " PRINT "+ Q$ + CHR$(179) + Inpt$ _
  155.                  + SPACE$ (Wid - LEN (Inpt$) - 2) + CHR$(179) + Q$ + ";"
  156. '               LPRINT "                  It is Written ...";
  157.     LOCATE 24,1
  158.     PRINT " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  159.     PRINT " PRINT "+ Q$ + CHR$(179) + Inpt$ _
  160.                  + SPACE$ (Wid - LEN (Inpt$) - 2) + CHR$(179) + Q$ + ";"
  161.  
  162.  LOOP UNTIL BoxBottom
  163.  LOCATE 24,1
  164.  PRINT " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  165.  PRINT " PRINT "+ Q$ + CHR$(192) + T$ + CHR$(217) + Q$ + ";"
  166.  
  167.  PRINT #2, " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  168.  PRINT #2, " PRINT "+ Q$ + CHR$(192) + T$ + CHR$(217) + Q$ + ";"
  169.  
  170.  
  171. '         ===================== READ FIELD DATA =====================
  172.  
  173.  IF Fld% > 0 AND NOT EOF (1) THEN
  174.    PRINT #2, ""
  175.    PRINT #2, " COLOR FldColor MOD 16, FldColor \ 16"
  176.    PRINT #2, FlNm$+"Fields:" '                           create a line label ...
  177.  
  178.    PRINT " COLOR FldColor MOD 16, FldColor \ 16"
  179.    PRINT FlNm$+"Fields:" '                           create a line label ...
  180.  
  181.    Fld% = 0
  182.    DO
  183.      LINE INPUT #1,Inpt$
  184.      LOCATE 24,1: COLOR 12,0:PRINT LEFT$ (Inpt$,79): COLOR 14,0
  185.    LOOP UNTIL LEFT$(Inpt$,1) = "\"
  186.  
  187. WritePtII:
  188.    DO UNTIL EOF(1)
  189.      LINE INPUT #1,Inpt$
  190.  
  191.      IF Inpt$ <> "" AND LEFT$(Inpt$,1) <> " " THEN
  192.        LOCATE 24,1: COLOR 12,0:PRINT Inpt$: COLOR 14,0
  193.        INCR Fld%
  194.  
  195.        CommaPos = INSTR (Inpt$, ",")
  196.        IF CommaPos = 0 THEN PRINT "NO DELIMITING COMMA IN LINE: ";Inpt$:STOP
  197.        DO WHILE INSTR (CommaPos+1, Inpt$, ",") > CommaPos
  198.          CommaPos = INSTR (CommaPos+1, Inpt$, ",")
  199.        LOOP
  200.  
  201.        PRINT " LOCATE " + STR$ (FL(Fld%)) + "," + STR$ (FC(Fld%) + CornerCol)
  202.        PRINT " PRINT USING " + MID$ (Inpt$, CommaPos+1) + ";"_
  203.                                                     + LEFT$ (Inpt$, CommaPos-1)
  204.  
  205.        PRINT #2, " LOCATE " + STR$ (FL(Fld%)) + "," + STR$ (FC(Fld%) + CornerCol)
  206.        PRINT #2, " PRINT USING " + MID$ (Inpt$, CommaPos+1) + ";"_
  207.                                                + LEFT$ (Inpt$, CommaPos-1) + ";"
  208.    END IF
  209.  
  210.    LOOP
  211.  
  212.    PRINT #2, " COLOR ScrColor MOD 16, ScrColor \ 16"
  213.  
  214.  END IF
  215.  
  216.  Report$ = "              DONE, NO ERRORS -- OK"
  217.  IF Fld% > 0 AND FL(Fld%) = 0 THEN_
  218.     Report$ = "DONE. INPUT FILE ERROR -- TOO MANY FIELDS NAMED."
  219.  INCR Fld%
  220.  IF FL(Fld%) <> 0 THEN_
  221.   Report$ = "DONE. INPUT FILE ERROR -- TOO MANY FIELD LOCATION"+_
  222.     " MARKERS ({) IN DESIGN."
  223.  
  224.  Print #2, ""
  225.  PRINT #2, "'  ";DATE$;", ";LEFT$(TIME$,5);_
  226.            ":   end of StatWindow generated code for window {";FlNm$;"}"
  227.  CLOSE
  228.  PRINT: PRINT "     "; Report$
  229.  STOP
  230.  
  231. '               <<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>
  232.  
  233. QT:
  234.  STOP
  235.  RETURN
  236.  
  237. NoSuchInputFl:
  238.      PRINT:PRINT:PRINT "    ERROR -- Input File ";FlNm$;".SW not found"
  239.      PRINT: STOP
  240.      RESUME
  241.  
  242. DispLns:
  243.  LOCATE 4,1: PRINT SPACE$(80)
  244.  COLOR 10,0: LOCATE 4,1:PRINT Inpt$;: COLOR 14,0
  245.  RETURN
  246.