home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol285 / special.prg < prev    next >
Encoding:
Text File  |  1986-12-22  |  19.6 KB  |  701 lines

  1. **    Last revision: June 18, 1986 at 18:58
  2. * special.prg prepares special reports
  3. STOR .t. TO more3
  4. SET DELIMITER OFF
  5. SET DELETED ON
  6. DO WHIL more3
  7.  DO s_first
  8.  SET COLOR TO &revvideo
  9.  @ 17,00
  10.  @ 18,00
  11.  @ 17,10 SAY "Input only information which is required for search. Where"
  12.  @ 18,10 SAY "more than one selection in a field, do multiple searches."
  13.  SET COLOR TO &stdvideo
  14.  STOR '   ' TO extra
  15.  STOR 0 TO count
  16.  STOR '.NOT.DELETED()' TO finder
  17.  STOR .f. TO first
  18.  STOR SPACE(25) TO mlastname
  19.  STOR SPACE(20) TO mfname
  20.  STOR SPACE(15) TO mspouse
  21.  STOR SPACE(14) TO mmr
  22.  STOR SPACE(35) TO mtitle
  23.  STOR SPACE(35) TO mcompany1
  24.  STOR SPACE(35) TO mcompany2
  25.  STOR SPACE(35) TO mcaddress
  26.  STOR SPACE(10) TO msuite
  27.  STOR SPACE(20) TO mccity
  28.  STOR SPACE(2) TO mcst
  29.  STOR SPACE(10) TO mczip
  30.  STOR SPACE(35) TO maddress
  31.  STOR SPACE(10) TO mapt
  32.  STOR SPACE(20) TO mcity
  33.  STOR SPACE(2) TO mst
  34.  STOR SPACE(10) TO mzip
  35.  STOR SPACE(13) TO mophone
  36.  STOR SPACE(13) TO mphone
  37.  STOR SPACE(22) TO mdear
  38.  STOR SPACE(1) TO msend
  39.  STOR SPACE(1) TO mcs1
  40.  STOR SPACE(4) TO mcs2
  41.  STOR SPACE(8) TO mupdate
  42.  @ 3,13 GET mlastname
  43.  @ 3,58 GET mfname
  44.  @ 4,13 GET mspouse
  45.  @ 4,58 GET mmr
  46.  @ 6,13 GET mtitle
  47.  @ 7,13 GET mcompany1
  48.  @ 8,13 GET mcompany2
  49.  @ 9,13 GET mcaddress
  50.  @ 9,58 GET msuite
  51.  @ 10,13 GET mccity
  52.  @ 10,44 GET mcst
  53.  @ 10,58 GET mczip
  54.  @ 12,13 GET maddress
  55.  @ 12,58 GET mapt
  56.  @ 13,13 GET mcity
  57.  @ 13,44 GET mst
  58.  @ 13,58 GET mzip
  59.  @ 14,21 GET mophone
  60.  @ 14,58 GET mphone
  61.  @ 15,13 GET mdear
  62.  @ 15,58 GET msend
  63.  @ 16,13 GET mcs1
  64.  @ 16,44 GET mcs2
  65.  @ 16,58 GET mupdate
  66.  READ
  67.  CLEA GETS
  68.  SET DELIMITER ON
  69.  STOR .f. TO toolong
  70.  IF mlastname <> ' '.AND.(.NOT.toolong)
  71.   STOR TRIM(finder) +".AND.'"+TRIM(UPPER(mlastname))+"'"+'$UPPER(lastname)'  TO finder
  72.  ENDI
  73.  RELE mlastname
  74.  IF LEN(finder) > 140
  75.   STOR .t. TO toolong
  76.  ENDI
  77.  IF mfname <> ' '.AND.(.NOT.toolong)
  78.   STOR ".AND.'"+TRIM(UPPER(mfname))+"'" TO mfname1
  79.   STOR TRIM(finder) + mfname1+'$UPPER(fname)'  TO finder
  80.  ENDI
  81.  RELE mffname, mfname1
  82.  IF LEN(finder) > 140
  83.   STOR .t. TO toolong
  84.  ENDI
  85.  IF mmr  <> ' '.AND.(.NOT.toolong)
  86.   STOR ".AND.'"+TRIM(UPPER(mmr))+"'" TO mmr1
  87.   STOR TRIM(finder) +mmr1+'$UPPER(mr)'  TO finder
  88.  ENDI
  89.  RELE mmr, mmr1
  90.  IF LEN(finder) > 140
  91.   STOR .t. TO toolong
  92.  ENDI
  93.  IF mtitle <> ' '.AND.(.NOT.toolong)
  94.   STOR ".AND.'"+TRIM(UPPER(mtitle))+"'" TO mtitle1
  95.   STOR TRIM(finder) + mtitle1+'$UPPER(title)'  TO finder
  96.  ENDI
  97.  IF LEN(finder) > 140
  98.   STOR .t. TO toolong
  99.  ENDI
  100.  RELE mtitle, mtitle1
  101.  IF mcompany1 <> ' '.AND.(.NOT.toolong)
  102.   STOR ".AND.'"+TRIM(UPPER(mcompany1))+"'" TO mco1
  103.   STOR TRIM(finder) +mco1+'$UPPER(company1)'  TO finder
  104.  ENDI
  105.  RELE mcompany1, mco1
  106.  IF LEN(finder) > 140
  107.   STOR .t. TO toolong
  108.  ENDI
  109.  IF mcompany2 <> ' '.AND.(.NOT.toolong)
  110.   STOR ".AND.'"+TRIM(UPPER(mcompany2))+"'" TO mco2
  111.   STOR TRIM(finder) + mco21+'$UPPER(company2)'  TO finder
  112.  ENDI
  113.  RELE mcompany2, mco2
  114.  IF LEN(finder) > 140
  115.   STOR .t. TO toolong
  116.  ENDI
  117.  IF mcaddress <> ' '.AND.(.NOT.toolong)
  118.   STOR ".AND.'"+TRIM(UPPER(mcaddress))+"'" TO mcadr
  119.   STOR TRIM(finder) + mcadr+'$UPPER(address)'  TO finder
  120.  ENDI
  121.  RELE mcaddress, mcadr
  122.  IF LEN(finder) > 140
  123.   STOR .t. TO toolong
  124.  ENDI
  125.  IF msuite <> ' '.AND.(.NOT.toolong)
  126.   STOR ".AND.'"+TRIM(UPPER(msuite))+"'" TO msuite1
  127.   STOR TRIM(finder) +msuite1+'$UPPER(suite)'  TO finder
  128.  ENDI
  129.  IF LEN(finder) > 140
  130.   STOR .t. TO toolong
  131.  ENDI
  132.  RELE msuite, msuite1
  133.  IF mccity <> ' '.AND.(.NOT.toolong)
  134.   STOR ".AND.'"+TRIM(UPPER(mccity))+"'" TO mccity1
  135.   STOR TRIM(finder) +mccity1+'$UPPER(mccity)'  TO finder
  136.  ENDI
  137.  RELE mccity, mccity1
  138.  IF LEN(finder) > 140
  139.   STOR .t. TO toolong
  140.  ENDI
  141.  IF mcst <> ' '.AND.(.NOT.toolong)
  142.   STOR ".AND.'"+TRIM(UPPER(mcst))+"'" TO mcst1
  143.   STOR TRIM(finder) +mcst1+'$UPPER(cst)'  TO finder
  144.  ENDI
  145.  RELE mcst, mcst1
  146.  IF LEN(finder) > 140
  147.   STOR .t. TO toolong
  148.  ENDI
  149.  IF mczip <> ' ' .AND.(.NOT.toolong)
  150.   STOR ".AND.'"+TRIM(UPPER(mczip))+"'" TO mczip1
  151.   STOR TRIM(finder) +mczip1+'$UPPER(czip)'  TO finder
  152.  ENDI
  153.  RELE mczip, mczip1
  154.  IF LEN(finder) > 140
  155.   STOR .t. TO toolong
  156.  ENDI
  157.  IF maddress <> ' '.AND.(.NOT.toolong)
  158.   STOR ".AND.'"+TRIM(UPPER(maddress))+"'" TO mad1
  159.   STOR TRIM(finder) +mad1+'$UPPER(address)'  TO finder
  160.  ENDI
  161.  RELE maddress, mad1
  162.  IF LEN(finder) > 140
  163.   STOR .t. TO toolong
  164.  ENDI
  165.  IF mapt <> ' '.AND.(.NOT.toolong)
  166.   STOR ".AND.'"+TRIM(UPPER(mapt))+"'" TO mapt1
  167.   STOR TRIM(finder) +mapt1+'$UPPER(apt)'  TO finder
  168.  ENDI
  169.  IF LEN(finder) > 140
  170.   STOR .t. TO toolong
  171.  ENDI
  172.  RELE mapt, mapt1
  173.  IF LEN(finder) > 140
  174.   STOR .t. TO toolong
  175.  ENDI
  176.  IF mcity <> ' '.AND.(.NOT.toolong)
  177.   STOR ".AND.'"+TRIM(UPPER(mcity))+"'" TO mcity1
  178.   STOR TRIM(finder) +mcity1+'$UPPER(city)'  TO finder
  179.  ENDI
  180.  RELE mcity, mcity1
  181.  IF LEN(finder) > 140
  182.   STOR .t. TO toolong
  183.  ENDI
  184.  IF mst <> ' '.AND.(.NOT.toolong)
  185.   STOR ".AND.'"+TRIM(UPPER(mst))+"'" TO mst1
  186.   STOR TRIM(finder) +mst1+'$UPPER(st)'  TO finder
  187.  ENDI
  188.  RELE mst, mst1
  189.  IF LEN(finder) > 140
  190.   STOR .t. TO toolong
  191.  ENDI
  192.  IF mzip <> ' '.AND.(.NOT.toolong)
  193.   STOR ".AND.'"+TRIM(UPPER(mzip))+"'" TO mzip1
  194.   STOR TRIM(finder) +mzip1+'$UPPER(zip)'  TO finder
  195.  ENDI
  196.  RELE mzip, mzip1
  197.  IF LEN(finder) > 140
  198.   STOR .t. TO toolong
  199.  ENDI
  200.  IF mophone <> ' '.AND.(.NOT.toolong)
  201.   STOR ".AND.'"+TRIM(UPPER(mophone))+"'" TO moph
  202.   STOR TRIM(finder) +moph+'$UPPER(ophone)'  TO finder
  203.  ENDI
  204.  RELE mophone, moph
  205.  IF LEN(finder) > 140
  206.   STOR .t. TO toolong
  207.  ENDI
  208.  IF mphone <> ' '.AND.(.NOT.toolong)
  209.   STOR ".AND.'"+TRIM(UPPER(mphone))+"'" TO mph
  210.   STOR TRIM(finder) +mph+'$UPPER(phone)'  TO finder
  211.  ENDI
  212.  RELE mphone, mph
  213.  IF LEN(finder) > 140
  214.   STOR .t. TO toolong
  215.  ENDI
  216.  IF mdear <> ' '.AND.(.NOT.toolong)
  217.   STOR ".AND.'"+TRIM(UPPER(mdear))+"'" TO mdear1
  218.   STOR TRIM(finder) +mdear1+'$UPPER(dear)'  TO finder
  219.  ENDI
  220.  RELE mdear, mdear1
  221.  IF LEN(finder) > 140
  222.   STOR .t. TO toolong
  223.  ENDI
  224.  IF msend <> ' '.AND.(.NOT.toolong)
  225.   STOR ".AND.'"+TRIM(UPPER(msend))+"'" TO msend1
  226.   STOR TRIM(finder) +msend1+'$UPPER(send)'  TO finder
  227.  ENDI
  228.  RELE msend, msend1
  229.  IF LEN(finder) > 140
  230.   STOR .t. TO toolong
  231.  ENDI
  232.  IF mcs1 <> ' '.AND.(.NOT.toolong)
  233.   STOR ".AND.'"+TRIM(UPPER(mcs1))+"'" TO mcs11
  234.   STOR TRIM(finder) +mcs11+'$UPPER(cs1)'  TO finder
  235.  ENDI
  236.  RELE mcs1, mcs11
  237.  IF LEN(finder) > 140
  238.   STOR .t. TO toolong
  239.  ENDI
  240.  IF mcs2 <> ' '.AND.(.NOT.toolong)
  241.   STOR ".AND.'"+TRIM(UPPER(mcs2))+"'" TO mcs21
  242.   STOR TRIM(finder) +mcs21+'$UPPER(cs2)'  TO finder
  243.  ENDI
  244.  RELE mcs2, mcs21
  245.  IF LEN(finder) > 140
  246.   STOR .t. TO toolong
  247.  ENDI
  248.  IF mupdate <> ' '.AND.(.NOT.toolong)
  249.   STOR ".AND.'"+TRIM(UPPER(mupdate))+"'" TO mupd1
  250.   STOR TRIM(finder) +mupd1+'$UPPER(update)'  TO finder
  251.  ENDI
  252.  RELE mupdate, mupd1
  253.  IF LEN(finder) > 140
  254.   STOR .t. TO toolong
  255.  ENDI
  256.  IF LEN(finder) < 12
  257.   STOR "*" TO finder
  258.   STOR '              STANDARD = deleted files ' TO extra
  259.  ENDI
  260.  @ 20,00
  261.  @ 21,00
  262.  @ 22,00
  263.  STOR ' ' TO dowhat
  264.  @ 20,00 SAY "SELECT: <C>ount, <L>abels, <R>eport, <W>ordstar file or <Q>uit "
  265.  DO WHIL AT(dowhat,'RWLCQ')=0
  266.   @ 20,65 GET dowhat PICTURE '!'
  267.   READ
  268.  ENDD
  269.  DO CASE
  270.  CASE dowhat = 'C'
  271.   IF toolong
  272.    CLEA
  273.    @ 10,10 SAY 'The search string is too long - you can have no more than '
  274.    @ 11,10 SAY '140 characters in the string and the field names.  Please '
  275.    @ 12,10 SAY 'try again.'
  276.    @ 13,30 SAY 'HIT ANY KEY TO CONTINUE'
  277.    SET CONSOL OFF
  278.    WAIT
  279.    SET CONSOL ON
  280.   ELSE
  281.    CLEA
  282.    STOR 0 TO counter
  283.    CLEA
  284.    @ 10,10 SAY 'I am looking for the first instance of a file which meets your'
  285.    @ 11,10 SAY 'requirements. Please be patient.'
  286.    SET FILTER TO &finder
  287.    GO TOP
  288.    IF .NOT. (EOF() .OR. BOF())
  289.     CLEA
  290.     DO WHIL .NOT.EOF().OR. BOF()
  291.      STOR counter + 1 TO counter
  292.      @ 10,10 SAY '            Count so far is ' + STR(counter,5)
  293.      SKIP
  294.     ENDD whil .NOT. eof
  295.     @ 10,00
  296.     @ 10,10 SAY '              TOTAL COUNT IS ' + STR(counter,5)
  297.     ? '    '
  298.     ? '                      ***  HIT ANY KEY TO CONTINUE  *** '
  299.     SET CONSOL OFF
  300.     WAIT
  301.     SET CONSOL ON
  302.    ENDI
  303.   ENDI toolong
  304.   SET DELIMITER OFF
  305.   STOR .f. TO more3
  306.  CASE dowhat = 'R'
  307.   IF toolong
  308.    CLEA
  309.    @ 10,10 SAY 'The search string is too long - you can have no more than '
  310.    @ 11,10 SAY '140 characters in the string and the field names.  Please '
  311.    @ 12,10 SAY 'try again.'
  312.    @ 13,30 SAY 'HIT ANY KEY TO CONTINUE'
  313.    SET CONSOL OFF
  314.    WAIT
  315.    SET CONSOL ON
  316.   ELSE
  317.    STOR 'Y' TO printer
  318.    STOR 'N' TO disk
  319.    STOR '        ' TO filename
  320.    STOR ' ' TO command
  321.    @ 20,00
  322.    @ 20,22 SAY "Send Report to the Printer (Y/N)"
  323.    @ 20,55 GET printer PICTURE '!'
  324.    READ
  325.    @ 21,22 SAY "Send Report to a Disk File (Y/N)"
  326.    @ 21,55 GET disk PICTURE '!'
  327.    READ
  328.    IF disk ='Y'
  329.     @ 22,22 SAY "Enter Disk File Name"
  330.     @ 22,44 GET filename PICTURE '!!!!!!!!'
  331.     @ 22,54 SAY "(.TXT will be added )"
  332.     READ
  333.     STOR 'C' TO dr
  334.     @ 22,00
  335.     @ 22,22 SAY 'Select drive to put Files on  ' GET dr PICTURE '!'
  336.     READ
  337.     DO WHIL AT(dr,'ABC') = 0
  338.      @ 22,00
  339.      @ 22,22 SAY 'Select drive to put Files on  ' GET dr PICTURE '!'
  340.      READ
  341.     ENDD
  342.    ENDI
  343.    STOR '                                                            ' TO caption
  344.    STOR 'Y' TO again
  345.    @ 20,00
  346.    @ 21,00
  347.    @ 22,00
  348.    @ 20,12 SAY 'Please State the Caption of the Report (do not center):'
  349.    @ 21,10 GET caption PICTURE '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
  350.    READ
  351.    @ 22,20 SAY 'Is the caption correct ?'
  352.    @ 22,49 GET again PICTURE '!'
  353.    READ
  354.    IF again = 'N'
  355.     @ 21,10 GET caption PICTURE '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
  356.     READ
  357.    ENDI again
  358.    STOR '                                                                   ' TO pad
  359.    STOR TRIM(caption) TO caption
  360.    STOR (122-LEN(caption))/2  TO adjust
  361.    STOR SUBSTR(pad,1,adjust) + caption TO caption
  362.    RELE pad, adjust, again
  363.    IF disk = 'Y' .AND. filename <> ' '
  364.     STOR AT('.',filename) TO length
  365.     IF length = 0 .OR. length > 8
  366.      STOR 9 TO length
  367.     ENDI
  368.     STOR SUBSTR(filename,1,length-1) TO filename
  369.     STOR '&dr.:'+filename+'.TXT' TO filename
  370.     SET ALTERNATE TO &filename
  371.     SET ALTERNATE ON
  372.    ENDI
  373.    STOR 'Y' TO command
  374.    STOR 0 TO pagen
  375.    CLEA
  376.    @ 10,10 SAY 'I am looking for the first instance of a file which meets your'
  377.    @ 11,10 SAY 'requirements. Please be patient.'
  378.    SET FILTER TO &finder
  379.    GO TOP
  380.    IF .NOT. (EOF() .OR. BOF())
  381.     IF printer = 'Y'
  382.      SET PRINT ON
  383.      EJEC
  384.     ENDI
  385.     STOR .t. TO more2
  386.     DO WHIL more2
  387.      STOR pagen + 1 TO pagen
  388.      STOR 0 TO lineno
  389.      ? '  '
  390. * and write TITLE
  391.      ? caption
  392.      ? ' '
  393.      ? 'Report of ' +DTOC(date()) + '.        ' + '             Page: '+STR(pagen,3)
  394. * now fill up rest of page to 55 lines with names etc
  395.      DO WHIL lineno < 55
  396. * now do a page if not end of file
  397.       IF .NOT. EOF()
  398.        ? '-------------------------------------------------------------------'
  399.        ? '     ' +  "Name: "+ TRIM(mr)+' ' + TRIM(fname) +' ' + lastname
  400.        ? '     ' + "Spouse: " + spouse + "Address as: " + dear
  401.        ? '     ' + "Title: " + title
  402.        ? '     ' + "Company: " + company1
  403.        ? '     ' + "       : " + company2
  404.        ? '     ' + "Address: " + TRIM(caddress) + "  " + suite
  405.        ? '     ' + "         " + TRIM(ccity) +'  ' + cst + '  ' +czip
  406.        ? '     ' + "Home address: " + TRIM(address) + "  " + apt
  407.        ? '     ' + "              " + TRIM(city) +'   '+  st + '  ' +zip
  408.        ? '     ' + 'Phones - office: ' + ophone + ' home: ' + phone
  409.        ? '     ' + "List:  " + cs1 + "   Code: " + cs2
  410.        ? '     ' + "Send to office: " + send
  411.        ? '     ' + "Date update: " + update
  412.        STOR lineno +13 TO lineno
  413.        SKIP
  414. * if deleted, skip again
  415.        IF DELETE()
  416.         SKIP
  417.        ENDI
  418.       ELSE
  419.        STOR .f. TO more2
  420.        STOR 60 TO lineno
  421.       ENDI .NOT. EOF
  422.      ENDD while lineno < 55
  423.     ENDD more2
  424.     IF printer = 'Y'
  425.      EJEC
  426.     ENDI
  427.     SET PRINT OFF
  428.    ENDI .NOT. eof
  429.   ENDI toolong
  430.   SET DELIMITER OFF
  431.   STOR .f. TO more3
  432.  CASE dowhat = 'L'
  433.   IF toolong
  434.    CLEA
  435.    @ 10,10 SAY 'The search string is too long - you can have no more than '
  436.    @ 11,10 SAY '140 characters in the string and the field names.  Please '
  437.    @ 12,10 SAY 'try again.'
  438.    @ 13,30 SAY 'HIT ANY KEY TO CONTINUE'
  439.    SET CONSOL OFF
  440.    WAIT
  441.    SET CONSOL ON
  442.   ELSE
  443.    CLEA
  444.    STOR 0 TO counter
  445.    CLEA
  446.    @ 10,10 SAY 'I am looking for the first instance of a file which meets your'
  447.    @ 11,10 SAY 'requirements. Please be patient.'
  448.    SET FILTER TO &finder
  449.    GO TOP
  450.    IF .NOT. (EOF() .OR. BOF())
  451.     CLEA
  452.     SET print on
  453. * if you have to set your printer for labels
  454. * put the code in here i.e. ? chr(29) (small type on OKIDATA 92)
  455.     SET margin to 5
  456.     SET PRINT OFF
  457.     STOR .t. TO lineup
  458.     DO WHIL LINEUP
  459.      STOR 'Y' TO command
  460.      @ 10,00
  461.      @ 11,00
  462.      @ 10,10 SAY 'Please line up the top of the ribbon with the top of the label'
  463.      @ 11,10 SAY 'When lined up hit ENTER for a print check.'
  464.      SET CONSOLE OFF
  465.      WAIT
  466.      SET PRINT ON
  467.      SET MARGIN TO 0
  468.      ? 'THE TOP OF THE TOP LINE SHOULD BE ABOUT'
  469.      ? '1/4" FROM THE TOP OF THE LABEL'
  470.      ? ' '
  471.      SET PRINT OFF
  472.      SET CONSOLE ON
  473.      @ 10,00
  474.      @ 11,00
  475.      @ 10,10 SAY 'Are you lined up to print (Y/N) '
  476.      @ 10,44 GET command picture '!'
  477.      READ
  478.      CLEA GETS
  479.      IF command = 'Y'
  480.       SET PRINT ON
  481.       ? ' '
  482.       ? ' '
  483.       SET PRINT OFF
  484.       STOR .f. TO lineup
  485.      ENDI command = y
  486.     ENDD while lineup
  487.     CLEA
  488.     DO WHIL .NOT.(EOF().OR. BOF())
  489.      SET PRINT ON
  490.      STOR 0 TO count
  491.      IF send = 'Y'
  492.       ? TRIM(mr)+' ' + TRIM(fname) +' ' + lastname
  493.       IF SUBSTR(title,1,6) <> '      '      
  494.        ? title
  495.       ELSE
  496.        STOR count+1 TO count
  497.       ENDI
  498.       IF SUBSTR(company1,1,6) <> '      '      
  499.       ? company1
  500.       ELSE
  501.        STOR count+1 TO count
  502.       ENDIF
  503.       IF SUBSTR(company2,1,6) <> '      '      
  504.        ? company2
  505.       ELSE
  506.        STOR count+1 TO count
  507.       ENDI
  508.       ? TRIM(caddress) + "  " + suite
  509.       ? TRIM(ccity) +'    ' + cst + '  ' +czip
  510.       DO WHIL count > 0
  511.        ? '  '
  512.        STOR count -1 TO count
  513.       ENDD
  514.      ELSE
  515.       ? ' '
  516.       ? TRIM(mr)+' ' + TRIM(fname) +' ' + lastname
  517.       ? TRIM(address)+ '    ' + apt
  518.       ? TRIM(city) + '   ' + st + '  ' + zip
  519.       ? ' '
  520.       ? '  '
  521.       ? '  '
  522.      ENDI
  523.      SKIP
  524.     ENDD while not eof
  525.     EJEC
  526.     SET PRINT OFF
  527.     SET MARGIN TO 0
  528.    ENDI
  529.   ENDI toolong
  530.   SET DELIMITER OFF
  531.   STOR .f. TO more3
  532.  CASE dowhat = 'W'
  533.   IF toolong
  534.    CLEA
  535.    @ 10,10 SAY 'The search string is too long - you can have no more than '
  536.    @ 11,10 SAY '140 characters in the string and the field names.  Please '
  537.    @ 12,10 SAY 'try again.'
  538.    @ 13,30 SAY 'HIT ANY KEY TO CONTINUE'
  539.    SET CONSOL OFF
  540.    WAIT
  541.    SET CONSOL ON
  542.   ELSE
  543.    CLEA
  544.    STOR 0 TO counter
  545.    CLEA
  546.    @ 10,10 SAY 'I am looking for the first instance of a file which meets your'
  547.    @ 11,10 SAY 'requirements. Please be patient.'
  548.    SET FILTER TO &finder
  549.    GO TOP
  550.    IF .NOT. (EOF() .OR. BOF())
  551.     STOR .t. TO continue
  552.     DO WHIL continue
  553.      STOR 1 TO counter
  554.      CLEA
  555.      STOR 'C' TO dri
  556.      @ 20,00
  557.      @ 21,00
  558.      @ 22,00
  559.      @ 20,10 SAY 'On what drive do you want the file ?'
  560.      @ 20,50 GET dri PICTURE '!'
  561.      READ
  562.      DO WHIL AT(dri,'CAB')=0
  563.       @ 20,50 GET dri PICTURE '!'
  564.       READ
  565.      ENDD
  566.      STOR '      ' TO file_dat
  567.      @ 21,10 SAY 'Enter Name of the WordStar-MailMerge file  '
  568.      @ 21,55 GET file_dat PICTURE '!!!!!!'
  569.      READ
  570.      DO WHIL file_dat = '      '
  571.       @ 21,55 GET file_dat PICTURE '!!!!!!'
  572.       READ
  573.      ENDD
  574.      STOR dri+':'+file_dat TO file_dat
  575.      STOR 'W' TO prg
  576.      @ 22,10 SAY 'Will the printing be with <W>ordstar or <N>ewword ?'
  577.      @ 22,60 GET prg PICTURE '!'
  578.      READ
  579.      DO WHIL AT(prg,'NW')=0
  580.       @ 22,60 GET prg PICTURE '!'
  581.       READ
  582.      ENDD
  583.      IF prg = 'N'
  584.       STOR ' ' TO ending
  585.      ELSE
  586.       STOR ',' TO ending
  587.      ENDI
  588.      CLEA
  589.      STOR UPPER(file_dat) TO file_dat
  590.      STOR SUBSTR(file_dat,1,8) TO file_dat
  591.      STOR file_dat+'.DOC'  TO file_doc
  592.      STOR file_dat+'.DAT'  TO file_dat
  593.      @ 03,10 SAY  'Creating WordStar-MailMerge Document file:  '+file_doc
  594.      SET CONSOLE OFF
  595.      SET ALTERNATE TO &file_doc
  596.      SET ALTERNATE ON
  597.      ? '.OP'
  598.      ? '.DF '+file_dat
  599.      ? '.RV '+' last-name, first-name, mr, dear, title, company1, company2, street, suite-apt, city, state, zip'
  600.      ? '.. for title, company1, company2  use &title/O&, &company1/O&, &company2/O&'
  601.      ? '.. to automatically omit empty data fields'
  602.      SET ALTERNATE OFF
  603.      SET CONSOLE ON
  604.      @ 05,10 SAY  ' Creating WordStar-MailMerge Data file:  '+file_dat
  605.      ?
  606.      ?
  607.      ?? 'Writing record #     '
  608.      SET CONSOLE OFF
  609.      SET ALTERNATE TO &file_dat
  610.      SET ALTERNATE ON
  611. * repeat until end of file
  612.      DO WHIL .NOT.(EOF() .OR. BOF())
  613. * if there is a chance of a comma in a field then trim and put in quotes
  614.       IF send <> 'Y'
  615. * if it is NOT a company address then...
  616. * make blanks for these first 3 variables
  617.        STOR ' ' TO titleline
  618.        STOR ' ' TO coname1
  619.        STOR ' ' TO coname2
  620.        STOR CHR(34)+TRIM(address)+CHR(34) TO street
  621.        STOR CHR(34)+TRIM(city)+CHR(34) TO cityto
  622.        STOR st TO stto
  623.        STOR zip TO zipto
  624. * if a field is empty then store it as a blank variable...
  625. * but trim and put quotes around a non-empty field
  626.        IF apt = ' '
  627.         STOR ' ' TO room
  628.        ELSE
  629.         STOR CHR(34)+TRIM(apt)+CHR(34) TO room
  630.        ENDI
  631.       ELSE
  632. * if it is a company address etc do the following...
  633.        STOR CHR(34)+TRIM(caddress)+CHR(34) TO street
  634.        STOR CHR(34)+TRIM(ccity)+CHR(34) TO cityto
  635.        STOR cst TO stto
  636.        STOR czip TO zipto
  637.        IF title = ' '
  638.         STOR ' ' TO titleline
  639.        ELSE
  640.         STOR CHR(34)+TRIM(title)+CHR(34) TO titleline
  641.        ENDI
  642.        IF company1 = ' '
  643.         STOR ' ' TO coname1
  644.        ELSE
  645.         STOR CHR(34)+TRIM(company1)+CHR(34) TO coname1
  646.        ENDI
  647.        IF company2 = ' '
  648.         STOR ' ' TO coname2
  649.        ELSE
  650.         STOR CHR(34)+TRIM(company2)+CHR(34) TO coname2
  651.        ENDI
  652.        IF suite = ' '
  653.         STOR ' ' TO room
  654.        ELSE
  655.         STOR CHR(34)+TRIM(suite)+CHR(34) TO room
  656.        ENDI
  657.       ENDI send letter to office
  658. * now write data to the WS MailMerge file
  659. * the first 4 variables are raw field names that must contain data...
  660. * and can contain commas ; so trim them  and enclose in quotes
  661. * all other variables have been 'fixed' in the above IF statements
  662.       ?
  663.       ?? CHR(34)+TRIM(lastname)+CHR(34) +','
  664.       ?? CHR(34)+TRIM(fname)+CHR(34) +','
  665.       ?? CHR(34)+TRIM(mr)+CHR(34) +','
  666.       ?? CHR(34)+TRIM(dear)+CHR(34) +','
  667.       ?? titleline +','
  668.       ?? coname1 +','
  669.       ?? coname2 +','
  670.       ?? street +','
  671.       ?? room +','
  672.       ?? cityto +','
  673.       ?? stto +','
  674.       ?? zipto +ending
  675.       SKIP
  676. * tell em that you are busy
  677.       SET CONSOLE ON
  678.       SET ALTERNATE OFF
  679.       SET CONSOLE ON
  680.       ?? STR(COUNTER,5)
  681.       SET CONSOLE OFF
  682.       SET ALTERNATE ON
  683.       STOR COUNTER + 1 TO COUNTER
  684.      ENDD while not EOF
  685.      STOR .f. TO continue
  686.     ENDD continue
  687.     SET ALTERNATE OFF
  688.     SET CONSOLE ON
  689.    ENDI
  690.   ENDI toolong
  691.   SET DELIMITER OFF
  692.   STOR .f. TO more3
  693.  CASE dowhat = 'Q'
  694.   STOR .f. TO more3
  695.  ENDC
  696. ENDD while more3
  697. SET FILTER TO
  698. SET DELIMITER ON
  699. RETU
  700. 
  701.