Adding Integer

Problem: Write a program that adds up integers that the user enters. First the programs asks how many numbers will be added up. Then the programs prompts the suer for each number. Finally it prints the sum...
import java.io.*;
class Add
public static void main (String[] args) throws IOException
BufferedReader stdin =
new BufferedReader ( new InputStreamReader( System.in ) );
String inData;
int i;
System.out.print("How many integers will added?");
inData = stdin.readLine();
i = inData.length();
          while (i>0) {
               System.out.println(inData);
               i--;
this is the code but it doesnt prints any integer...it only asks integers to be added...please do help me...thanks...

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String)
Check that out! :) As much as I know (unless it changed) you can not put a string in an int.
Regards,
Sim085

Similar Messages

  • HashSet - Adding Integer values - Error Class Excpetion Help

    I am trying to add integers into the HashSet it is not allowing me to add it? does it mean that I cannot add integers. I also tried using the Integer class to input the values, still getting the same error. The Error is in the line : ts.add(3);
    Any thoughts why such an error ?
    The error that I get is :
    java TreeTest
    Exception in thread "main" java.lang.ClassCastException: java.lang.String
    at java.lang.Integer.compareTo(Integer.java:35)
    at java.util.TreeMap.compare(TreeMap.java:1093)
    at java.util.TreeMap.put(TreeMap.java:465)
    at java.util.TreeSet.add(TreeSet.java:210)
    at TreeTest.main(TreeTest.java:12)
    PK
    import java.util.*;
    class TreeTest
         public static void main(String[] args)
              TreeSet ts = new TreeSet();
              ts.add("Z");
              ts.add("A");
              ts.add("P");
              ts.add(3);
              ts.add(new Integer(1));
              ts.add(new Integer(7));
              System.out.println("The size is \t" + ts.size());
    }

    hii,
    In the TreeSet the elements you add should be of same class type.
    otherwise it can't do the sorting process.can u sort alphabets and numeric together? if u are adding Integer type only add int values or objs.if u want to add String add that n String objs.
    try the following code
    import java.util.*;
    class TreeTest
         public static void main(String[] args)
              try
              TreeSet ts = new TreeSet();
              int a=3;
              //ts.add("Z");
              //ts.add("A");
              //ts.add("P");
              ts.add(new Integer(7));
              ts.add(new Integer(1));
              ts.add(a);
              System.out.println("The size is \t" + ts.size());     
              catch (Exception e)
                   System.out.println(e);     
    }

  • Click-to-dial doesnt work with Basic integration

    Hi,
    I have built a CTI adapter to work with Oracle Basic integration. I can do all the functions through UWQ using this adapter. But the click-to-dial doesnt work. Here is the scenario->
    1. Customer Call comes in.
    2. Agent gets a screen pop and the relevant service request form is popped.
    3. Agent answers the call, talks and then hangs up.
    4. Agent clicks on the click-to-dial icon next to the customer number field on the service request form.
    5. Nothing happens.
    Basically, Oracle is not sending the dial string to my adapter at all. I am expecting Oracle will pass the dial string to the CTI adapter to let it place the outbound call as it does in Direct integration. In Direct integration, the CTI adapter does get the dial string from Oracle when agent clicks on "initiate call". Any idea why this is not the case with Basic? Is it not supported with basic?
    Here are the java console logs after I hit "Initiate Call" from the SR form ->
    Tue Sep 22 14:20:03 EDT 2009] - [controllerPlugin:verbose] - getPluginUID()
    [Tue Sep 22 14:20:03 EDT 2009] - [controllerPlugin:verbose] - getSupportedMediaTypes()
    [Tue Sep 22 14:20:03 EDT 2009] - [controllerPlugin:verbose] - getSupportedMediaTypes()
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:PLUGIN CONTROL METHOD command:
         [Command = occtDial
         MediaType = INBOUND_TELE
         Args Array:
         55227
         100044952
         +(804)4198614
    [Tue Sep 22 14:20:03 EDT 2009] - [EVENT-INFO] - SOFTPHONE:EVENT NAME NOT FOUND--MEDIA ITEM EVENT/PLUGIN CONTROL METHOD
    BEGIN SOFTPHONE INBOUND EVENT DATA:{occtMediaItemId=55227, occtAgentID=100044952, occtDestination=+(804)4198614}
    <<<<<<<<<<<<<END SOFTPHONE INBOUND EVENT DATA
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:PluginControlMethod:Command::occtDial
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:PluginControlMethod:Creating a UWQMediaCommand 2
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:converHashtoArg:Incoming Hashtable={occtMediaItemId=55227, occtLineIndex=0, occtAgentID=100044952, occtCommand=occtDial, occtDestination=+(804)4198614}
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:processing key:occtLineIndex
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:processing dataType:int
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:Adding Key=occtLineIndex
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:Adding Integer value=0
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:processing key:occtDestination
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:processing dataType:string
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:Adding Key=occtDestination
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:Softphone:convertHashtoArg:Adding String value=+(804)4198614
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:UWQmcToUWQmcdoArray:occtCommand :occtDial
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:UWQmcToUWQmcdoArray:passing argument:0
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:UWQmcToUWQmcdoArray:passing argument:+(804)4198614
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:PluginControlMethod:Finished creating UWQ Media Array
    [Tue Sep 22 14:20:03 EDT 2009] - [VERBOSE] - SOFTPHONE:SoftphoneWrap:PluginControlMethod:executing mediaControlMethod
    [Tue Sep 22 14:20:03 EDT 2009] - [providerPlugin:verbose] - preprocessMediaCommand( Provider UID = null
         Command =
         [Command = occtDial
         MediaType = INBOUND_TELE
         Args Array:
         0
         +(804)4198614
    [Tue Sep 22 14:20:03 EDT 2009] - [controllerPlugin:verbose] - getPluginUID()
    [Tue Sep 22 14:20:03 EDT 2009] - [controllerPlugin:verbose] - getSupportedMediaTypes()
    [Tue Sep 22 14:20:03 EDT 2009] - [controllerPlugin:verbose] - getSupportedMediaTypes()
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:PLUGIN CONTROL METHOD command:
         [Command = occtSoftphoneToFront
         MediaType = INBOUND_TELE
         Args Array:
         100044952
    [Tue Sep 22 14:20:03 EDT 2009] - [EVENT-INFO] - SOFTPHONE:EVENT NAME NOT FOUND--MEDIA ITEM EVENT/PLUGIN CONTROL METHOD
    BEGIN SOFTPHONE INBOUND EVENT DATA:{occtAgentID=100044952}
    <<<<<<<<<<<<<END SOFTPHONE INBOUND EVENT DATA
    [Tue Sep 22 14:20:03 EDT 2009] - [INFO] - SOFTPHONE:SoftphoneWrap:PluginControlMethod:Command::occtSoftphoneToFront
    [Tue Sep 22 14:20:03 EDT 2009] - [VERBOSE] - SOFTPHONE:SoftphoneGUI:icWorkFrame.toFront
    Edited by: user653223 on Sep 22, 2009 2:03 PM

    actually its a website software, i just bought you can check the demo www.edirectory.com, and it has a light platform "virsune" for mobiles .. i checked it on my iphone and it works pretty good, altho i checked it on samsung "android" it works on chrome and Opera mini only, and what am talking about is the option click phone number to call a member

  • Adding a listener to an integer value?

    Hello All
    Is there a way of adding a listener to an integer value that produce an event (run a method with the object) when an integer value is changed? (Through a object.setValue(int) for example)
    Thanks for any help,
    Harold Clements

    Can any of the kilo-posters (that's with two o's) say if it's considered
    bad form to reuse a class that already exists - albeit for a slighty
    different purpose? What I'm thinking is that the SpinnerNumberModel
    is rather close to what's being looked for - the differences being that
    it'll handle any Numbers and has a "next" functionality that we ignore.
    Something like:import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Random;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.SpinnerNumberModel;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    public class NumberEg extends JFrame {
         private SpinnerNumberModel intModel;
         private Random rand = new Random();
         private JLabel aLabel;
         public NumberEg() {
                   // a thing that responds to changes - there could be
                   // many of these
              aLabel = new JLabel("I respond to changes...");
              add(aLabel, BorderLayout.CENTER);
                   // the thing which changes
              intModel = new SpinnerNumberModel(0, null, null, 0);
                   // a change listener which glues the two previous
                   // together - again there could be a number of these
              intModel.addChangeListener(new ChangeListener(){
                   public void stateChanged(ChangeEvent evt) {
                        aLabel.setText(intModel.getValue().toString());
                   // Meanwhile events like button clicks *cause* the
                   // changes
              JButton but = new JButton("Click me!");
              but.addActionListener(new ActionListener(){
                   public void actionPerformed(ActionEvent evt) {
                        intModel.setValue(rand.nextInt());
              add(but, BorderLayout.NORTH);
              but = new JButton("Reset");
              but.addActionListener(new ActionListener(){
                   public void actionPerformed(ActionEvent evt) {
                        intModel.setValue(0);
              add(but, BorderLayout.SOUTH);
              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              pack();
         public static void main(String args[]) {
              NumberEg test = new NumberEg();
              test.setVisible(true);
    }

  • Adding decimal to an integer

    I'm reading 3 digit integers back from a controller in the form of XXX. I need to format them to the form XX.X
    Example
    245 should read 24.5, or 345 should read 34.5.
    Besides the easiest method of just dividing bt 10 is there a labview function that will place the decimal in my integer number where I need it to be?

    No, division is just fine.Well, you could multiply with 0.1 instead
    If it is just a string: insert a dot char after the 2nd char (as most "controllers" managed by VISA functions deliver strings...).
    Best regards,
    GerdW
    CLAD, using 2009SP1 + LV2011SP1 + LV2014SP1 on WinXP+Win7+cRIO
    Kudos are welcome

  • Adding Digits of an integer

    If i had an integer called total, and it was 12
    How would I add the two digits together, to receive an output of 3.

    I'm working on the same sort of programming exercise. I already figured out the caculations part but was having some trouble with some extra stuff and was wondering if anyone was around to help me out a bit.
    for my exercise I have to make it so the program would terminate if the number entered was 0... (I need help with this one)
    and
    if the user enters a number less than 0, they should be told this is not allowed and asked to re-enter.
    all that syntax screws me up.
    thank you in advance

  • Adding New Data To Same Page - HELP

    I am trying to put together a invoice on the fly, the products are added to the invoice by selecting the disired product from a drop down menu and hitting the add button. You SHOULD then be able to select more products from the same drop down menu and htting add again will include it in the invoice.... simple?? Well the problem i have is that when i hit the add button to add another item it just replaces the one i have already added.... this is very annoying... i cannot think of a way to take the product data through the form submission ready for adding too.
    Any Ideas this is really bugging me, and the more time i spend on it, the worse its getting. Code Below
    <%@ page buffer="32kb" %>
    <%@ page import="java.sql.*, javax.servlet.ServletException, java.io.IOException, com.stock_control.*" %>
    <%!
    String convertResultsToSelect ( ResultSet rs, String selectName, String idCol, String descCol ) throws SQLException
    StringBuffer sb = new StringBuffer ( "<select name=" + selectName +">" );
    if (rs != null) {
    while (rs.next()) {
              sb.append ( "<option value=" );
    sb.append ( rs.getString(idCol) );
    sb.append ( ">" );
    sb.append ( rs.getString(descCol) );
    sb.append ( "</option>" );
    sb.append ( "</select>" );
    return sb.toString ();
    %>
    <html>
    <head>
    <title>Members Area - Stock Check</title>
    </head>
    <body bgcolor="#CCCCCC" topmargin="0">
    <%@ include file="topConn.jsp" %>
    <%
              String msg = "";
              String name = "";
              String address1 = "";
              String address2 = "";
              String town ="";
              String postcode = "";
              String country = "";
              String phone = "";
              String mail = "";
              String comments = "";
              float total = 0;
              int nextFree = 0;
              String prodResults;
              int numberOfItems = 0;
         String shop = (String)session.getValue("SHOP");
         String selectProd = "SELECT ProductID, ProductName FROM product WHERE ShopID=";
         rs1 = stmt.executeQuery(selectProd+shop);
         prodResults = convertResultsToSelect( rs1, "product","ProductID","ProductName");
         rs = stmt.executeQuery("SELECT COUNT(*) AS stockLevel FROM product WHERE ShopID ="+shop);     
    while(rs.next())
         numberOfItems = rs.getInt("stockLevel");
         Product[] products = new Product[numberOfItems];
    if (request.getParameter("add")!=null)
              // get values from all text boxes....
              name = request.getParameter("name");
              address1 = request.getParameter("address1");
              address2 = request.getParameter("address2");
              town = request.getParameter("town");
              postcode = request.getParameter("postcode");
              country = request.getParameter("country");
              phone = request.getParameter("phone");
              mail = request.getParameter("mail");
              comments = request.getParameter("comments");
                   // add data from dropdown
              String newProduct = request.getParameter("product");
              //connect to database and put product data into array + increment
                   int thenewid = 0;
                   String theName = "";
                   float thePrice = 0;
                   String nono = "0";
              String getProd = "SELECT * FROM product WHERE ProductID=";
              rs = stmt.executeQuery(getProd+newProduct);
              if(rs.next())
                   thenewid = Integer.parseInt(newProduct);
                   theName = rs.getString("ProductName");
                   thePrice = rs.getFloat("SalePrice");
                   Product addProduct = new Product(thenewid, theName, thePrice, nono);
                   products[nextFree] = addProduct; //PROBLEM
                   nextFree++;
    // reload page with new data in form
    //for loop arround array     
    %>
    <form method="GET">
    <div align=center>
    <p>
    <%=prodResults%>
    <input type="submit" value="Add" name="add"></p>
    <TABLE width=100% height="1">
    <TBODY>
    <tr>
    <td width="4%" height="19"> </td>
    <td width="96%" height="19"> 
    </td>
    </tr>
    <tr>
    <td width="4%" height="198"> </td>
    <td width="96%" height="198">
    <div align="center"></div>
    <table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber5">
    <tr>
    <td width="4%"> </td>
    <td width="15%"><font face="Verdana" size="2">Customer Name</font></td>
    <td width="30%"><input type="text" name="name" size="30" value="<%=name%>"></td>
    <td width="19%"><font face="Verdana" size="2">Customer Phone #</font></td>
    <td width="26%"><input name="phone" type="text" size="30" value="<%=phone%>"></td>
    <td width="6%"> </td>
    </tr>
    <tr>
    <td> </td>
    <td><font face="Verdana" size="2">Address Line 1</font></td>
    <td><input type="text" name="address1" size="40" value="<%=address1%>"></td>
    <td><font face="Verdana" size="2">Customer E-mail</font></td>
    <td><input name="mail" type="text" size="30" value="<%=mail%>"></td>
    <td> </td>
    </tr>
    <tr>
    <td height="32"> </td>
    <td><font face="Verdana" size="2">Address Line 2</font></td>
    <td> </td>
    <td><font face="Verdana" size="2">Comments</font></td>
    <td width="26%" rowspan="5"><p>
    <textarea name="comments" cols="29" rows="5"><%=comments%></textarea>
    </p>
    <p>  </p></td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td><font size="2" face="Verdana">Town/City</font></td>
    <td><input name="town" type="text" size="40" value="<%=town%>">
    <input name="address2" type="text" size="40" value="<%=address2%>"></td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td><font size="2" face="Verdana">Post Code</font></td>
    <td><input type="text" name="postcode" size="10" value="<%=postcode%>"></td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td> </td>
    <td><font size="2" face="Verdana">Country</font></td>
    <td><input type="text" name="country" size="40" value="<%=country%>"></td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td height="24"> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    </tr>
    <tr>
    <td height="23"> </td>
    <td><strong><font size="2" face="Verdana">Product Code</font></strong></td>
    <td><strong><font size="2" face="Verdana">Name</font></strong></td>
    <td><strong><font size="2" face="Verdana">Price</font></strong></td>
    <td> </td>
    <td> </td>
    </tr>
    <%
    if (request.getParameter("add")!=null)
    for(int i=0; i<nextFree; i++)
    Product temp = products;
    int prodID = temp.getid();
    String prodName = temp.getname();
    float prodPrice = temp.getprice();
    total = total + prodPrice;
    // work out total on the fly
    %>
    <tr>
    <td height="23"> </td>
    <td> <font size="2" face="Verdana, Arial, Helvetica, sans-serif"><%=prodID%> </font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><%=prodName%></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">&pound;<%=prodPrice%></font></td>
    <td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> </font></td>
    <td> </td>
    </tr>
    <%
    %>
    <tr>
    <td width="4%" height="23"> </td>
    <td width="15%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> </font></td>
    <td width="30%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> </font></td>
    <td width="19%"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Total:</font></strong></td>
    <td width="26%"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><%=total%></font></td>
    <td width="6%"> </td>
    </tr>
    </table>
    <p align="center">
    <input type="submit" value="Continue" name="continue">
              </form>
    </p>
    </td> </tr> </TBODY></table>
    <%@ include file="bottomConn.jsp" %>
    </body>
    </html>

    anyone?

  • Integer value in a variable of assing action is no more integer - OSB

    Hi,
    I have seen a strange behavior or I wonder am I missing anything in OSB assing action.
    I am developing a simple proxy service in 11.1.1.6 OSB.Following are the steps involved in my code.
    In first assign action, the value is assigned as xs:integer(1) to a varible varTest
    Next, I've added an if condition as below.
            if( $varTest != xs:integer(0))
            then
            assing "success" to $varResult
    While testing the PS using the test console,  I've got the following error at if condition.
    line 1, column 14: {err}FOTY0012: Items not comparable: types are "{http://www.w3.org/2001/XMLSchema}string" and "{http://www.w3.org/2001/XMLSchema}integer"
    This error is fixed after changing the if condition as below.
      if(xs:integer($varTest) != xs:integer(0))
    Ideally varTest should contain value of type integer right?
    Is it kind of a bug or am I doing any mistake?
    Could you help me out.
    Regards,
    Vasudev Palivela.

    Hi Abhishek, Eric,
    Thanks for your reply.
    It is clear that  OSB's native data format is XML.
    It should also support simple XML types right?
    Even, when we create a new variable structure form OSB console, we can see String as simple type( I could not see other simple types) along with element types based on either schema or WSDL message.
    Can I consider this as a limitation of OSB?
    Regards,
    Vasudev.

  • Adding Data into text and graphic frames - PLEASE CAN SOMEONE HELP?

    Hello Script buddies,
    Here is my script and I want to place data into the frames which I set up already in the inDesign template which loads correctly but unable to place the data into the frames, please refer to comments and if anyone can help me I will be very grateful.
    strFile = "C:\Users\dean.brooks\Documents\PoolSigns.xlsx"
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Workbooks.Open strFile
    intRow = 2
    Set objSheet = objExcel.ActiveWorkbook.WorkSheets(1)
    ' Cycle through cells in Pool Sign Schedule to retreive data
    Do Until objSheet.Cells(intRow, 3).Value = ""
    PoolSignScheduleSignNo = Trim(objSheet.Cells(intRow, 1).Value)
    PoolSignScheduleTemplate = Trim(objSheet.Cells(intRow, 3).Value)
    PoolSignScheduleDepth = Trim(objSheet.Cells(intRow, 5).Value)
    PoolSignScheduleWarningFile = Trim(objSheet.Cells(intRow, 7).Value)
    PoolSignScheduleWarningText = Trim(objSheet.Cells(intRow, 8).Value)
    PoolSignScheduleRegFile = Trim(objSheet.Cells(intRow, 10).Value)
    PoolSignScheduleRegText = Trim(objSheet.Cells(intRow, 11).Value)
    ' Open InDesign Template that corresponds to PoolSignScheduleTemplate
    Set myInDesign = CreateObject("InDesign.Application.CS3")
    Set myDocument = myInDesign.Open(PoolSignScheduleTemplate)
    'Frames, these commands won't work, can someone please help??
    Set DepthMarker = myDocument.Textframes.Item
    DepthMarker.Contents = PoolSignScheduleDepth
    Set WarningText = myDocument.Textframes.Item
    WarningText.Contents = PoolSignScheduleWarningText
    Set WarningSymbol = myDocument.Graphicframes.Item
    WarningSymbol.Contents = PoolSignScheduleWarningFile
    Set RegText = myDocument.Textframes.Item
    RegText.Contents= PoolSignScheduleRegText
    ' Save InDesign File to C:\ to be moved manually later to appropriate location
    myDocument.Save("C:\Pools\PoolSign\PoolSignScheduleSignNo.indd")
    myDocument.Close
    intRow = intRow + 1
    Loop
    objExcel.Quit
    WScript.Quit

    Hi Robert,
    Your problem starts here:
    Set DepthMarker = myDocument.Textframes.Item
    ...which item? Item takes either an integer (the index of the item) or a string (the contents of the label property, if any).
    Next, however, is that you should be more specific about *where* the text frame is in the document. What page or spread is it on? Let's say that the frame "DepthMarker" is on page 1:
    Set DepthMarker = myDocument.Pages.Item(1).TextFrames.Item(1)
    If there's only one frame on that page, you're in great shape. If not, you need to come up with some way to differentiate one frame from another. Script labels are a great way to do this. Let's say you've used the Script Label panel to add the label "DepthMarker" to the relevant frame on page 1, and added the label "WarningText" to another frame. In that case, you'd use something like this:
    Set DepthMarker = myDocument.Pages.Item(1).TextFrames.Item("DepthMarker")(0)
    Set WarningText = myDocument.Pages.Item(1).TextFrames.Item("WarningText")(0)
    ...When you use a string to refer to a page item by its label, InDesign returns an array, so you need to get the first item in the array (assuming that there's only one page item on the page with that label).
    Hope this makes sense! I'm typing it off the top of my head because I have to go speak at a conference tomorrow and am short on time--but it should get you pointed in the right direction.
    Thanks,
    Ole

  • Adding data dynamically to JTable with a filter - getting error

    Hello,
    I am using JTable, and adding data and displaying it worked fine
    until I tried adding a filter,
    can anyone tell me what am I doing wrong or
    why am I getting this Error?
    The Error message
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
            at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:501)
            at javax.swing.JTable.convertRowIndexToModel(JTable.java:2620)
            at javax.swing.JTable.getValueAt(JTable.java:2695)
            at javax.swing.JTable.prepareRenderer(JTable.java:5712)
            at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2075)
            at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1977)
            at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1773)
            at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
            at javax.swing.JComponent.paintComponent(JComponent.java:763)
            at javax.swing.JComponent.paint(JComponent.java:1027)
            at javax.swing.JComponent.paintChildren(JComponent.java:864)
            at javax.swing.JComponent.paint(JComponent.java:1036)
            at javax.swing.JViewport.paint(JViewport.java:747)
            at javax.swing.JComponent.paintChildren(JComponent.java:864)
            at javax.swing.JComponent.paint(JComponent.java:1036)
            at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
            at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:277)
            at javax.swing.RepaintManager.paint(RepaintManager.java:1217)
            at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
            at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
            at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:803)
            at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
            at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:694)
            at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
            at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
            at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
            at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)I am also using my own class that extends "AbstractTableModel"
    as TableModel,
    public class MyTableModel extends AbstractTableModel  {
        ArrayList<TableData> tableData=new ArrayList<TableData>(10);
        String[] columnNames=new String[]{"S/N"," Time (mili)","SD","SA","SSAP","DA","DSAP","FC","DATA"};   
        public void addRow(TableData data){
            tableData.add(data);
            fireTableDataChanged();
        @Override
        public int getRowCount() {
            return tableData.size();
        public TableData getRow(int i){
            return tableData.get(i);
        @Override
        public int getColumnCount() {
            return columnNames.length;
        @Override
        public String getColumnName(int col) {
                return columnNames[col];
        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return tableData.get(rowIndex).getValue(columnIndex);
        }The Row Filter class
    class myRowFilter extends RowFilter<MyTableModel,Integer>{
            @Override
            public boolean include(Entry<? extends MyTableModel, ? extends Integer> entry) {
                // Entry < SomeCostumTableModel , Integer> entry   ; Integer =Identifier= Row Number
                boolean frame_type;
                MyTableModel model=entry.getModel();
                TableData data=model.getRow(entry.getIdentifier());
                frame_type=((SD1&&data.SD==TableData.SD1) ||
                                             (SD2&&data.SD==TableData.SD2) ||
                                             (SD3&&data.SD==TableData.SD3) ||
                                             (SD4&&data.SD==TableData.SD4) ||
                                             (SC&&data.SD==TableData.SC) );
               return frame_type;
        }and How I add the filter to the Table
        private MyTableModel myTableModel=new MyTableModel();
        private RowSelectionListener rowSelectionListener=new RowSelectionListener();
        TableRowSorter<MyTableModel> sorter=new TableRowSorter<MyTableModel>(myTableModel);
        private FilterFrame filterFrame=new FilterFrame(this);
        // then in the constructor of the main frame
        // I call this
            sorter.setRowFilter(filterFrame.filter);
            MainTable.setRowSorter(sorter);
            sorter.setSortsOnUpdates(true);Edited by: YellowMurdoch on Nov 17, 2009 6:31 AM
    Edited by: YellowMurdoch on Nov 17, 2009 6:31 AM

    Thanks for noting that.
    you mean like this?
    public void addEntry(TableData data){
            myTableModel.addRow(data);
            javax.swing.SwingUtilities.invokeLater(new Runnable(){
                @Override
                public void run(){
                        myTableModel.fireTableRowsInserted(0,0);
        }both work,
    would putting "invokeLater" inside "addEntry" somehow mess other things?
    i guess that means addRow() is not supposed to update the table graphically?
    Edited by: YellowMurdoch on Nov 17, 2009 9:30 AM
    Edited by: YellowMurdoch on Nov 17, 2009 9:33 AM

  • How to update a large (over 4 million item) List(Of Byte) quickly by altering indexes contained in a Dictionary(Of Integer, Byte) where the Dictionaries keys are the indexes in the List(Of Byte) that need to be changed to the values for those indexes?

       I'm having some difficulty with transferring images from a UDP Client to a UDP Server. The issue is receiving the bytes necessary to update an original image sent from the Client to the Server and updating the Servers List(Of Byte) with the
    new bytes replacing bytes in that list. This is a simplex connection where the Sever receives and the Client sends to utilize the least amount of bandwidth for a "Remote Desktop" style application where the Server side needs image updates of whatever
    occurs on the Client desktop.
       So far I can tranfer images with no issue. The images can be be any image type (.Bmp, .Gif, .JPeg, .Png, etc). I was working with sending .JPeg's as they appear to be the smallest size image when a Bitmap is saved to a memory stream as type
    .JPeg. And then I am using GZip to compress that byte array again so it is much smaller. However on a loopback on my NIC the speed for sending a full size screen capture is not very fast as the Server updates fairly slowly unless the Clients screen capture
    Bitmap is reduced in size to about 1/3'd of the original size. Then about 12000 bytes or less are sent for each update.
       Due to .JPeg compression I suppose there is no way to get the difference in bytes between two .JPegs and only send those when something occurs on the desktop that alters the desktop screen capture image. Therefore I went to using .Bmp's as each
    .Bmp contains the same number of bytes in its array regardless of the image alterations on the desktop. So I suppose the difference in bytes from a second screen capture and an inital screen capture are what is different in the second image from the initial
    image.
       What I have done so far is save an initial Bitmap of a screen capture using a memory stream and saving as type .Bmp which takes less than 93 milliseconds for 4196406 bytes. Compressing that takes less than 118 milliseconds to 197325 bytes for
    the current windows on the desktop. When that is done PictureBox1 is updated from nothing to the captured image as the PictureBox's background image with image layout zoom and the PictureBox sized at 1/2 my screens width and 1/2 my screens height.
       Then I save a new Bitmap the same way which now contains different image information as the PictureBox is now displaying an image so its back color is no longer displayed (solid color Aqua) and the cursor has moved to a different location. The
    second Bitmap is also 4196406 in bytes and compressed it was 315473 bytes in size.
       I also just found code from this link Converting a Bitmap to a Byte Array (and Byte Array to Bitmap) which gets a byte array
    directly from a Bitmap and the size of that is 3148800 for whatever is full screen captured on my laptop. So I should be able to work with smaller byte arrays at some point.
       The issue I'm having is that once the Client sends an image of the desktop to the Server I only want to update the server with any differences occuring on the Clients desktop. So what I have done is compare the first screen captures bytes (stored
    in a List(Of Byte)) to the second screen captures bytes (stored in a List(Of Byte)) by using a For/Next for 0 to 4196405 where if a byte in the first screen captures List is not equal to a byte in the second screen captures List I add the index and byte of
    the second screen captures list to a Dictionary(Of Integer, Byte). The Dictionary then only contains the indexes and bytes that are different between the first screen capture and second screen capture. This takes about 125 milliseconds which I think is pretty
    fast for 4196406 byte comparison using a For/Next and adding all the different bytes and indexes for each byte to a Dictionary.
        The difference in Bytes between the inital screen capture and the second screen capture is 242587 as an example which changes of course. For that amount of bytes the Dictionary contains 242587 integers as indexes and 242587 bytes as different
    bytes totaling 485174 bytes for both arrays (keys, values).  Compressed the indexes go from 242587 to 43489 bytes and the values go from 242587 to 34982 bytes. Which means I will have to send 78, 481 bytes from the Client to the Server to update the display
    on the server. Quite smaller than the original 4196406 bytes of the second Bitmap saved to type .Bmp or the compressed size of that array which was 315473 bytes. Plus a few bytes I add as overhead so the server knows when an image array ends and how many packets
    were sent for the array so it can discard complete arrays if necessary since UDP is lossfull although probably not so much in current networks like it may originally have been when the internet started.
        In reality the data from the Client to the Server will mostly be the cursor as it moves and updating the Server image with only a few hundred bytes I would imagine at a time. Or when the cursor selects a Button for example and the Buttons
    color changes causing those differences in the original screen capture.
       But the problem is if I send the Dictionaries Indexes and Bytes to the Server then I need to update the original Bitmap List(Of Byte) on the server by removing the Bytes in the received informations Index locations array from the Servers Bitmap
    List(Of Byte) and replacing those Bytes with the Bytes in the received informations Byte array. This takes so long using a For/Next for however many indexes are in the received informations Index array to update the Bitmap List(Of Byte) on the server using
    "Bmp1Bytes.RemoveAt(Index As Integer)" followed by "Bmp1Bytes.Insert(Index As Integer, Item As Byte)" in the For/Next.
        I've tried various For/Next statements including using a new List(Of Byte) with If statements so If the the integer for the For/Next ='s the Key in a Dictionary(Of Integer, Byte) using a Counter to provide the Dictionaries Key value then
    the Dictionaries byte value will be added to the List(Of Byte) and the counter will increas by one Else the List(Of Byte) adds the original "Bmp1Bytes" byte at that index to the new List(Of Byte). This takes forever also.
       I also tried the same For/Next adding to a new Dictionary(Of Integer, Byte) but that takes forever too.
       I think I could use RemoveRange and AddRange to speed things up. But I don't know how to retrieve a contiguous range of indexes in the received indexes that need to be updated in the servers "Bmp1Bytes" List(Of Byte) from the received
    array of indexes and bytes which are in a Dictionary(Of Integer, Byte).  But I believe this would even be slower than some realistic method for replacing all Bytes in a List(Of Byte) when I have the indexes that need to be replaced and the bytes to replace
    them with.
       Even if I just used AddRange on a new List(Of Byte) to add ranges of bytes from the original "Bmp1Bytes" and the changes from the Dictionary(Of Integer, Byte) I think this would be rather slow. Although I don't know how to do that
    by getting contiguous ranges of indexes from the Dictionaries keys.
       So I was wondering if there is some method perhaps using Linq or IEnumerable which I've been unable to figure anything out which could do this.
       I do have some copy and pasted code which I don't understand how it works that I am using which I would guess could be altered for doing something like this but I can't find information that provides how the code works.  Or even if I did
    maybe I can't understand it. Like the code below which is extremely fast.
       Dim strArray() As String = Array.ConvertAll(Of Integer, String)(BmpComparisonDict.Keys.ToArray, Function(x) x.ToString())
    La vida loca

    Monkeyboy,
    That was quite a bit to read, but still a bit unclear. Could you put a specific list of goals/questions, asked in the smallest possible form?
    It seems like either you're making a program that monitors activity on your computer, or you're writing some kind of remote pc app.
    When you do get your bytes from using lockbits, keep in mind all the files header info would be lost. I think retaining the header info is worth the extra bytes.
    The other, thing: I'm not sure if you're taking 32bpp screen shots, but also keep in mind that the "whole desktop" is the final destination for blended graphics, if that makes sense. What I mean is that there is no need to capture an "alpha"
    channel for a desktop screenshot, as alpha would always be 255, this could save you 1 byte per pixel captured... Theres nothing "behind" the desktop, therefore no alpha, and every window shown above the desktop is already blended. I suggest using
    24Bpp for a full screen capture.
    Your X,Y information for the mouse could be stored as UINT16, this would save you a measly 2 bytes per location update/save.
    When you update your byte arrays, maybe you can turn the array into a stream and write to whatever index, however many bytes, that should prevent a "Shift" of bytes, and instead overwrite any bytes that "get in the way".
    ex
    Dim example As String = "This is an example."
    Dim insertString As String = "was"
    Dim insertBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(insertString)
    Dim bytes As Byte() = System.Text.Encoding.ASCII.GetBytes(example)
    Dim modifiedBytes As Byte() = {}
    Using ms As New System.IO.MemoryStream(bytes)
    ms.Position = 5
    ms.Write(insertBytes, 0, 3)
    modifiedBytes = ms.ToArray
    End Using
    Dim newString As String = System.Text.Encoding.ASCII.GetString(modifiedBytes)
    'Notice how below there isn't the word "is" anymore, and that there isn't a
    'space.
    'This demonstrates that you overwrite existing data, versus shifting everything to
    'the right.
    'Returns: This wasan example.
    MsgBox(newString)
    “If you want something you've never had, you need to do something you've never done.”
    Don't forget to mark
    helpful posts and answers
    ! Answer an interesting question? Write a
    new article
    about it! My Articles
    *This post does not reflect the opinion of Microsoft, or its employees.
    Well it's too much to read. I was really tired when I wrote it. Even the below is too much to read but perhaps gets the point across of what I would like to do which I think
    Joel Engineer may have answered but I'm not sure. As I'm still too tired to understand that yet and research what he said in order to figure it out yet.
    But maybe the code below can provide the concept of the operation with the comments in it. But seeing as how I'm still tired it may be confused.
    Option Strict On
    Imports System.Windows.Forms
    Imports System.IO
    Imports System.IO.Compression
    Imports System.Drawing.Imaging
    Imports System.Runtime.InteropServices
    Public Class Form1
    Dim Bmp1Bytes As New List(Of Byte)
    Dim Bmp1BytesCompressed As New List(Of Byte)
    Dim Bmp2Bytes As New List(Of Byte)
    Dim BmpComparisonDict As New Dictionary(Of Integer, Byte)
    Dim BmpDifferenceIndexesCompressed As New List(Of Byte)
    Dim BmpDifferenceBytesCompressed As New List(Of Byte)
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    SomeSub()
    End Sub
    Private Sub SomeSub()
    ' Pretend this code is in UDP Client app. A screen capture is performed of the desktop. Takes about 90 milliseconds.
    Bmp1Bytes.Clear()
    Using BMP1 As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
    Using g1 As Graphics = Graphics.FromImage(BMP1)
    g1.CopyFromScreen(0, 0, 0, 0, BMP1.Size)
    Cursor.Draw(g1, New Rectangle(Cursor.Position.X, Cursor.Position.Y, Cursor.Size.Width, Cursor.Size.Height))
    Using MS As New MemoryStream
    BMP1.Save(MS, System.Drawing.Imaging.ImageFormat.Bmp)
    Bmp1Bytes.AddRange(MS.ToArray)
    End Using
    End Using
    End Using
    Bmp1BytesCompressed.AddRange(Compress(Bmp1Bytes.ToArray))
    ' UDP Client app sends Bmp1BytesCompressed.ToArray to UDP Server which is the entire image of the desktop that the UDP
    ' Client is on. This image takes awhile to send since compressed it is about 177000 bytes from over 4000000 bytes.
    ' I will be using different code just to get the bytes from the actual Bitmap in the future. That is not important for now.
    ' Pretend the UDP Server has received the bytes, decompressed the array received into a List(Of Byte) and is displaying
    ' the image of the UDP Clients desktop in a PictureBox.
    ' Now the image on the UDP Clients desktop changes due to the mouse cursor moving as an example. Therefore a new Bitmap
    ' is created from a screen capture. This takes about 90 milliseconds.
    Bmp2Bytes.Clear()
    Using BMP2 As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
    Using g1 As Graphics = Graphics.FromImage(BMP2)
    g1.CopyFromScreen(0, 0, 0, 0, BMP2.Size)
    Cursor.Draw(g1, New Rectangle(Cursor.Position.X, Cursor.Position.Y, Cursor.Size.Width, Cursor.Size.Height))
    Using MS As New MemoryStream
    BMP2.Save(MS, System.Drawing.Imaging.ImageFormat.Bmp)
    Bmp2Bytes.AddRange(MS.ToArray)
    End Using
    End Using
    End Using
    ' Now I have the original images bytes in Bmp1Bytes and the new images bytes in Bmp2Bytes on the UDP Client. But I don't
    ' want to send all of the bytes in Bmp2Bytes to the UDP Server. Just the indexes of and the bytes that are different in
    ' Bmp2Bytes from Bmp1Bytes.
    ' This takes less than 100 milliseconds for what I've tested so far where over 500000 bytes in Bmp2Bytes are different
    ' than the bytes in Bmp1Bytes. Usually that amount would be much less. But during testing I was displaying the image
    ' from Bmp1 bytes in a PictureBox so a large amount of data would change between the first screen shot, the PictureBox
    ' then displaying an image on the same PC and then the second screen shot.
    BmpComparisonDict.Clear()
    For i = 0 To Bmp1Bytes.Count - 1
    If Bmp1Bytes(i) <> Bmp2Bytes(i) Then
    BmpComparisonDict.Add(i, Bmp2Bytes(i))
    End If
    Next
    ' So now I have all the difference bytes and their indexes from Bmp2Bytes in the BmpComparisonDict. So I compress
    ' the indexes into on List and the Bytes into another List.
    BmpDifferenceIndexesCompressed.Clear()
    BmpDifferenceBytesCompressed.Clear()
    BmpDifferenceIndexesCompressed.AddRange(Compress(BmpComparisonDict.Keys.SelectMany(Function(d) BitConverter.GetBytes(d)).ToArray()))
    BmpDifferenceBytesCompressed.AddRange(Compress(BmpComparisonDict.Values.ToArray))
    ' Now pretend the UDP Client has sent both those arrays to the UDP Server which has added both decompressed arrays
    ' to a Dictionary(Of Integer, Byte). And the server has the original image decompressed bytes received in a List
    ' called Bmp1Bytes also.
    ' This is where I am stuck. The UDP Server has the Dictionary. That part was fast. However there is no
    ' fast method I have found for creating a new List(Of Byte) where bytes in the originally received List(Of Byte) that
    ' do not have to be altered are placed into a new List(Of Byte) except for the indexes listed in the
    ' Dictionary(Of Integer, Byte) that need to be placed into the appropriate index locations of the new List(Of Byte).
    ' The below example for doing so is exceptionally slow. Pretend UpdateDictionary has all of the decompressed indexes
    ' and bytes received by the UDP Server for the update contained within it.
    Dim UpdateDictionary As New Dictionary(Of Integer, Byte)
    Dim UpdatedBytes As New List(Of Byte)
    Dim Counter As Integer = 0
    For i = 0 To Bmp1Bytes.Count - 1
    If i = UpdateDictionary.Keys(Counter) Then ' Provides the index contained in the Keys for the Dictionary
    UpdatedBytes.Add(UpdateDictionary.Values(Counter))
    Counter += 1
    If Counter > UpdateDictionary.Count - 1 Then Counter = 0
    Else
    UpdatedBytes.Add(Bmp1Bytes(i))
    End If
    Next
    ' So what I'm trying to do is find an extremely fast method for performing something similar to what the
    ' above operation performs.
    End Sub
    Private Function Compress(BytesToCompress() As Byte) As List(Of Byte)
    Dim BytesCompressed As New List(Of Byte)
    Using compressedStream = New MemoryStream()
    Using zipStream = New GZipStream(compressedStream, CompressionMode.Compress)
    zipStream.Write(BytesToCompress, 0, BytesToCompress.Count)
    zipStream.Close()
    BytesCompressed.AddRange(compressedStream.ToArray)
    End Using
    End Using
    Return BytesCompressed
    End Function
    Private Function Decompress(BytesToDecompress() As Byte) As List(Of Byte)
    Dim BytesDecompressed As New List(Of Byte)
    Using DecompressedStream = New MemoryStream()
    Using zipStream = New GZipStream(DecompressedStream, CompressionMode.Decompress)
    zipStream.Write(BytesToDecompress, 0, BytesToDecompress.Count)
    zipStream.Close()
    BytesDecompressed.AddRange(DecompressedStream.ToArray)
    End Using
    End Using
    Return BytesDecompressed
    End Function
    End Class
    La vida loca

  • Trouble adding regular oracle oci8 support to RPM, CentOs 5

    Hello,
    It seems that i'm missing smth simple while trying to add oci8 support to RPM.
    I took Christopher Jones's SRPM for 5.2.3 as a base, but since i don't have and don't need a support for instant client i modified latest available 5.1.6 SRPM from CentOS 5 repo.
    The compile env is :
    HOSTNAME=server.home
    SHELL=/bin/bash
    TERM=vt100
    HISTSIZE=1000
    OLDPWD=/root
    USER=root
    LD_LIBRARY_PATH=/u01/app/oracle/product/10.2.0/db_1/lib
    LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:
    TNS_ADMIN=/u01/app/oracle/product/10.2.0/db_1/network/admin
    MAIL=/var/spool/mail/root
    PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    INPUTRC=/etc/inputrc
    PWD=/usr/src/redhat/SPECS
    LANG=en_US.UTF-8
    SHLVL=1
    HOME=/root
    LOGNAME=root
    LESSOPEN=|/usr/bin/lesspipe.sh %s
    ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
    G_BROKEN_FILENAMES=1
    _=/bin/envi compile as a root. Here is my spec file.
    %define contentdir /var/www
    %define apiver 20041225
    %define zendver 20050922
    %define pdover 20060409
    # AZ
    # Version of Instant Client RPM. [email protected] May 2007
    %define ociver 10.2.0.3
    # For testing OCI8 and PDO_OCI.  Use the password of the SYSTEM schema
    # and the connection string for the target
    # database. [email protected] May 2007
    %define oci8_test_system_password tiger
    %define oci8_test_connection_string localhost/lhome
    # Set oci8_test_local_db to TRUE when the Oracle DB is on the machine
    # building the RPMS.  Otherwise set it to FALSE.
    # [email protected] May 2007
    %define oci8_test_local_db TRUE
    #AZ
    Summary: The PHP HTML-embedded scripting language. (PHP: Hypertext Preprocessor)
    Name: php
    Version: 5.1.6
    Release: 15%{?dist}
    License: The PHP License v3.01
    Group: Development/Languages
    URL: http://www.php.net/
    Source0: http://www.php.net/distributions/php-%{version}.tar.gz
    Source50: php.conf
    Source51: php.ini
    Patch1: php-5.1.4-gnusrc.patch
    Patch2: php-5.1.4-warnings.patch
    Patch5: php-4.3.3-install.patch
    Patch6: php-5.0.4-norpath.patch
    Patch7: php-4.3.2-libtool15.patch
    Patch13: php-5.0.2-phpize64.patch
    Patch14: php-5.1.6-ecalloc.patch
    # Fixes for extension modules
    Patch21: php-4.3.1-odbc.patch
    Patch22: php-4.3.11-shutdown.patch
    # Functional changes
    Patch30: php-5.0.4-dlopen.patch
    Patch31: php-5.0.0-easter.patch
    # Fixes for tests
    Patch50: php-5.0.4-tests-dashn.patch
    Patch51: php-5.0.4-tests-wddx.patch
    # Security fixes
    Patch70: php-4.3.9-CVE-2006-5465.patch
    Patch71: php-5.1.6-CVE-2007-0906-imap.patch
    Patch72: php-4.3.9-CVE-2007-0906-strreplace.patch
    Patch73: php-4.3.9-CVE-2007-0907.patch
    Patch74: php-4.3.9-CVE-2007-0908.patch
    Patch75: php-4.3.9-CVE-2007-0909-odbc.patch
    Patch76: php-4.3.9-CVE-2007-0909-printf.patch
    Patch77: php-5.1.6-CVE-2007-0910.patch
    Patch78: php-4.3.9-CVE-2007-0988.patch
    Patch79: php-5.1.6-CVE-2007-1285.patch
    Patch80: php-5.1.6-CVE-2007-1583.patch
    Patch81: php-5.1.6-CVE-2007-0455.patch
    Patch82: php-5.1.6-CVE-2007-1001.patch
    Patch83: php-5.1.6-CVE-2007-1718.patch
    Patch84: php-5.1.6-CVE-2007-1864.patch
    Patch85: php-5.1.6-soapredir.patch
    Patch86: php-5.1.6-ftpcrlf.patch
    Patch87: php-5.1.6-CVE-2007-2872.patch
    Patch88: php-5.1.6-CVE-2007-4658.patch
    Patch89: php-5.1.6-CVE-2007-2756.patch
    Patch90: php-5.1.6-CVE-2007-3799.patch
    Patch91: php-5.1.6-CVE-2007-3996.patch
    Patch92: php-5.1.6-CVE-2007-4670.patch
    Patch93: php-5.1.6-CVE-2007-3998.patch
    BuildRoot: %{_tmppath}/%{name}-root
    BuildRequires: bzip2-devel, curl-devel >= 7.9, db4-devel, expat-devel
    BuildRequires: gmp-devel, aspell-devel >= 0.50.0
    BuildRequires: httpd-devel >= 2.0.46-1, libjpeg-devel, libpng-devel, pam-devel
    BuildRequires: libstdc++-devel, openssl-devel, sqlite-devel >= 3.0.0
    BuildRequires: zlib-devel, pcre-devel >= 4.5, smtpdaemon
    BuildRequires: bzip2, fileutils, file >= 4.0, perl, libtool >= 1.4.3, gcc-c++
    Obsoletes: php-dbg, php3, phpfi, stronghold-php
    # Enforce Apache module ABI compatibility
    Requires: httpd-mmn = %(cat %{_includedir}/httpd/.mmn || echo missing-httpd-devel)
    Requires: file >= 4.0
    Provides: mod_php = %{version}-%{release}
    Requires: php-common = %{version}-%{release}
    # For backwards-compatibility, require php-cli for the time being:
    Requires: php-cli = %{version}-%{release}
    %description
    PHP is an HTML-embedded scripting language. PHP attempts to make it
    easy for developers to write dynamically generated webpages. PHP also
    offers built-in database integration for several commercial and
    non-commercial database management systems, so writing a
    database-enabled webpage with PHP is fairly simple. The most common
    use of PHP coding is probably as a replacement for CGI scripts.
    The php package contains the module which adds support for the PHP
    language to Apache HTTP Server.
    %package cli
    Group: Development/Languages
    Summary: Command-line interface for PHP
    Requires: php-common = %{version}-%{release}
    Provides: php-cgi = %{version}-%{release}
    Provides: php-pcntl
    %description cli
    The php-cli package contains the command-line interface
    executing PHP scripts, /usr/bin/php, and the CGI interface.
    %package common
    Group: Development/Languages
    Summary: Common files for PHP
    Provides: php-api = %{apiver}, php-zend-abi = %{zendver}
    # Provides for all builtin modules:
    Provides: php-bz2, php-calendar, php-ctype, php-curl, php-date, php-exif
    Provides: php-ftp, php-gettext, php-gmp, php-hash, php-iconv, php-libxml
    Provides: php-mime_magic, php-openssl, php-pcre, php-posix, php-pspell
    Provides: php-reflection, php-session, php-shmop, php-simplexml, php-sockets
    Provides: php-spl, php-sysvsem, php-sysvshm, php-sysvmsg, php-tokenizer
    Provides: php-wddx, php-zlib
    #AZ
    Provides: php-oci
    #AZ
    Obsoletes: php-openssl
    %description common
    The php-common package contains files used by both the php
    package and the php-cli package.
    %package devel
    Group: Development/Libraries
    Summary: Files needed for building PHP extensions.
    Requires: php = %{version}-%{release}, autoconf, automake
    Obsoletes: php-pecl-pdo-devel
    %description devel
    The php-devel package contains the files needed for building PHP
    extensions. If you need to compile your own PHP extensions, you will
    need to install this package.
    %package imap
    Summary: A module for PHP applications that use IMAP.
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    Obsoletes: mod_php3-imap, stronghold-php-imap
    BuildRequires: krb5-devel, openssl-devel, libc-client-devel
    %description imap
    The php-imap package contains a dynamic shared object (DSO) for the
    Apache Web server. When compiled into Apache, the php-imap module will
    add IMAP (Internet Message Access Protocol) support to PHP. IMAP is a
    protocol for retrieving and uploading e-mail messages on mail
    servers. PHP is an HTML-embedded scripting language. If you need IMAP
    support for PHP applications, you will need to install this package
    and the php package.
    %package ldap
    Summary: A module for PHP applications that use LDAP.
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    Obsoletes: mod_php3-ldap, stronghold-php-ldap
    BuildRequires: cyrus-sasl-devel, openldap-devel, openssl-devel
    %description ldap
    The php-ldap package is a dynamic shared object (DSO) for the Apache
    Web server that adds Lightweight Directory Access Protocol (LDAP)
    support to PHP. LDAP is a set of protocols for accessing directory
    services over the Internet. PHP is an HTML-embedded scripting
    language. If you need LDAP support for PHP applications, you will
    need to install this package in addition to the php package.
    %package pdo
    Summary: A database access abstraction module for PHP applications
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    Obsoletes: php-pecl-pdo-sqlite, php-pecl-pdo
    Provides: php-pdo-abi = %{pdover}
    %description pdo
    The php-pdo package contains a dynamic shared object that will add
    a database access abstraction layer to PHP.  This module provides
    a common interface for accessing MySQL, PostgreSQL or other
    databases.
    %package mysql
    Summary: A module for PHP applications that use MySQL databases.
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}, php-pdo
    Provides: php_database, php-mysqli
    Obsoletes: mod_php3-mysql, stronghold-php-mysql
    BuildRequires: mysql-devel >= 4.1.0
    %description mysql
    The php-mysql package contains a dynamic shared object that will add
    MySQL database support to PHP. MySQL is an object-relational database
    management system. PHP is an HTML-embeddable scripting language. If
    you need MySQL support for PHP applications, you will need to install
    this package and the php package.
    %package pgsql
    Summary: A PostgreSQL database module for PHP.
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}, php-pdo
    Provides: php_database
    Obsoletes: mod_php3-pgsql, stronghold-php-pgsql
    BuildRequires: krb5-devel, openssl-devel, postgresql-devel
    %description pgsql
    The php-pgsql package includes a dynamic shared object (DSO) that can
    be compiled in to the Apache Web server to add PostgreSQL database
    support to PHP. PostgreSQL is an object-relational database management
    system that supports almost all SQL constructs. PHP is an
    HTML-embedded scripting language. If you need back-end support for
    PostgreSQL, you should install this package in addition to the main
    php package.
    #AZ
    # Added oci8.  [email protected] May 2007
    %package oci8
    Summary: A module for PHP applications using the Oracle database
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}, php-pdo
    #BuildRequires: oracle-instantclient-devel = %{ociver}
    Provides: php_database, php-oci
    AutoReqProv: No
    %description oci8
    The php-oci8 package contains a dynamic shared object (DSO) for the
    Apache Web server. When compiled into Apache, the php-oci8 module will
    add OCI8 support to PHP. OCI8 is an extension for Oracle Database
    access.  PHP is an HTML-embedded scripting language. If you need
    Oracle support for PHP applications, you can install this package and
    the php package.
    This package also contains PDO_OCI for use with the PDO extension.
    #AZ
    %package odbc
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}, php-pdo
    Summary: A module for PHP applications that use ODBC databases.
    Provides: php_database
    Obsoletes: stronghold-php-odbc
    BuildRequires: unixODBC-devel
    %description odbc
    The php-odbc package contains a dynamic shared object that will add
    database support through ODBC to PHP. ODBC is an open specification
    which provides a consistent API for developers to use for accessing
    data sources (which are often, but not always, databases). PHP is an
    HTML-embeddable scripting language. If you need ODBC support for PHP
    applications, you will need to install this package and the php
    package.
    %package soap
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    Summary: A module for PHP applications that use the SOAP protocol
    BuildRequires: libxml2-devel
    %description soap
    The php-soap package contains a dynamic shared object that will add
    support to PHP for using the SOAP web services protocol.
    %package snmp
    Summary: A module for PHP applications that query SNMP-managed devices.
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}, net-snmp
    BuildRequires: net-snmp-devel
    %description snmp
    The php-snmp package contains a dynamic shared object that will add
    support for querying SNMP devices to PHP.  PHP is an HTML-embeddable
    scripting language. If you need SNMP support for PHP applications, you
    will need to install this package and the php package.
    %package xml
    Summary: A module for PHP applications which use XML
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    Obsoletes: php-domxml, php-dom
    Provides: php-dom, php-xsl, php-domxml
    BuildRequires: libxslt-devel >= 1.0.18-1, libxml2-devel >= 2.4.14-1
    %description xml
    The php-xml package contains dynamic shared objects which add support
    to PHP for manipulating XML documents using the DOM tree,
    and performing XSL transformations on XML documents.
    %package xmlrpc
    Summary: A module for PHP applications which use the XML-RPC protocol
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    BuildRequires: expat-devel
    %description xmlrpc
    The php-xmlrpc package contains a dynamic shared object that will add
    support for the XML-RPC protocol to PHP.
    %package mbstring
    Summary: A module for PHP applications which need multi-byte string handling
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    %description mbstring
    The php-mbstring package contains a dynamic shared object that will add
    support for multi-byte string handling to PHP.
    %package ncurses
    Summary: A module for PHP applications for using ncurses interfaces
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    BuildRequires: ncurses-devel
    %description ncurses
    The php-ncurses package contains a dynamic shared object that will add
    support for using the ncurses terminal output interfaces.
    %package gd
    Summary: A module for PHP applications for using the gd graphics library
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    BuildRequires: gd-devel, freetype-devel
    %description gd
    The php-gd package contains a dynamic shared object that will add
    support for using the gd graphics library to PHP.
    %package bcmath
    Summary: A module for PHP applications for using the bcmath library
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    %description bcmath
    The php-bcmath package contains a dynamic shared object that will add
    support for using the bcmath library to PHP.
    %package dba
    Summary: A database abstraction layer module for PHP applications
    Group: Development/Languages
    Requires: php-common = %{version}-%{release}
    %description dba
    The php-dba package contains a dynamic shared object that will add
    support for using the DBA database abstraction layer to PHP.
    %prep
    %setup -q
    %patch1 -p1 -b .gnusrc
    %patch2 -p1 -b .warnings
    %patch5 -p1 -b .install
    %patch6 -p1 -b .norpath
    %patch7 -p1 -b .libtool15
    %patch13 -p1 -b .phpize64
    %patch14 -p1 -b .ecalloc
    %patch21 -p1 -b .odbc
    %patch22 -p1 -b .shutdown
    %patch30 -p1 -b .dlopen
    %patch31 -p1 -b .easter
    %patch50 -p1 -b .tests-dashn
    %patch51 -p1 -b .tests-wddx
    %patch70 -p1 -b .cve5465
    %patch71 -p1 -b .cve0906-imap
    %patch72 -p1 -b .cve0906-strreplace
    %patch73 -p1 -b .cve0907
    %patch74 -p1 -b .cve0908
    %patch75 -p1 -b .cve0909-odbc
    %patch76 -p1 -b .cve0909-printf
    %patch77 -p1 -b .cve0910
    %patch78 -p1 -b .cve0988
    %patch79 -p1 -b .cve1285
    %patch80 -p1 -b .cve1583
    %patch81 -p1 -b .cve0455
    %patch82 -p1 -b .cve1001
    %patch83 -p1 -b .cve1718
    %patch84 -p1 -b .cve1864
    %patch85 -p1 -b .soapredir
    %patch86 -p1 -b .ftpcrlf
    %patch87 -p1 -b .cve2872
    %patch88 -p1 -b .cve4658
    %patch89 -p1 -b .cve2756
    %patch90 -p1 -b .cve3799
    %patch91 -p1 -b .cve3996
    %patch92 -p1 -b .cve4670
    %patch93 -p1 -b .cve3998
    # Prevent %%doc confusion over LICENSE files
    cp Zend/LICENSE Zend/ZEND_LICENSE
    cp TSRM/LICENSE TSRM_LICENSE
    cp regex/COPYRIGHT regex_COPYRIGHT
    cp ext/gd/libgd/README gd_README
    # Source is built twice: once for /usr/bin/php, once for the Apache DSO.
    mkdir build-cgi build-apache
    # Remove bogus test; position of read position after fopen(, "a+")
    # is not defined by C standard, so don't presume anything.
    rm -f ext/standard/tests/file/bug21131.phpt
    # Tests that fail.
    rm -f ext/standard/tests/file/bug22414.phpt \
          ext/iconv/tests/bug16069.phpt
    #AZ
    # Tests that fail.
    rm -f ext/oci8/tests/bug27303.phpt \
            ext/oci8/tests/bug27303_2.phpt \
            ext/oci8/tests/bug27303_4.phpt
    # OCI8 config file. [email protected] May 2007
    cat <<EOF > ext/oci8/tests/details.inc
    <?php
    * Please, change user, password and dbase to match your configuration.
    \$user       = "scott";
    \$password   = "%{oci8_test_system_password}";
    \$dbase      = "%{oci8_test_connection_string}";
    /* Set this variable to TRUE if Oracle is installed @ localhost */
    \$oracle_on_localhost = %{oci8_test_local_db};
    ?>
    EOF
    #AZ
    # Safety check for API version change.
    vapi=`sed -n '/#define PHP_API_VERSION/{s/.* //;p}' main/php.h`
    if test "x${vapi}" != "x%{apiver}"; then
       : Error: Upstream API version is now ${vapi}, expecting %{apiver}.
       : Update the apiver macro and rebuild.
       exit 1
    fi
    # Safety check for Zend API version change.
    vzend=`sed -n '/#define ZEND_MODULE_API_NO/{s/^[^0-9]*//;p;}' Zend/zend_modules.h`
    if test "x${vzend}" != "x%{zendver}"; then
       : Error: Upstream Zend module ABI version is now ${vzend}, expecting %{zendver}.
       : Update the zendver macro and rebuild.
       exit 1
    fi
    # Safety check for PDO ABI version change
    vpdo=`sed -n '/#define PDO_DRIVER_API/{s/.*[    ]//;p}' ext/pdo/php_pdo_driver.h`
    if test "x${vpdo}" != "x%{pdover}"; then
       : Error: Upstream PDO ABI version is now ${vpdo}, expecting %{pdover}.
       : Update the pdover macro and rebuild.
       exit 1
    fi
    %build
    # Force use of system libtool:
    libtoolize force copy
    cat `aclocal --print-ac-dir`/libtool.m4 > build/libtool.m4
    # Regenerate configure scripts (patches change config.m4's)
    ./buildconf --force
    CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -Wno-pointer-sign"
    CPPFLAGS="-DLDAP_DEPRECATED=1"
    export CFLAGS CPPFLAGS
    # Install extension modules in %{_libdir}/php/modules.
    EXTENSION_DIR=%{_libdir}/php/modules; export EXTENSION_DIR
    # Set PEAR_INSTALLDIR to ensure that the hard-coded include_path
    # includes the PEAR directory even though pear is packaged
    # separately.
    PEAR_INSTALLDIR=%{_datadir}/pear; export PEAR_INSTALLDIR
    # Shell function to configure and build a PHP tree.
    build() {
    # bison-1.875-2 seems to produce a broken parser; workaround.
    mkdir Zend && cp ../Zend/zend_{language,ini}_{parser,scanner}.[ch] Zend
    ln -sf ../configure
    %configure \
            --cache-file=../config.cache \
            --with-libdir=%{_lib} \
            --with-config-file-path=%{_sysconfdir} \
            --with-config-file-scan-dir=%{_sysconfdir}/php.d \
            --disable-debug \
            --with-pic \
            --disable-rpath \
            --without-pear \
            --with-bz2 \
            --with-curl \
            --with-exec-dir=%{_bindir} \
            --with-freetype-dir=%{_prefix} \
            --with-png-dir=%{_prefix} \
            --enable-gd-native-ttf \
            --without-gdbm \
            --with-gettext \
            --with-gmp \
            --with-iconv \
            --with-jpeg-dir=%{_prefix} \
            --with-openssl \
            --with-png \
            --with-pspell \
            --with-expat-dir=%{_prefix} \
            --with-pcre-regex=%{_prefix} \
            --with-zlib \
            --with-layout=GNU \
            --enable-exif \
            --enable-ftp \
            --enable-magic-quotes \
            --enable-sockets \
            enable-sysvsem enable-sysvshm --enable-sysvmsg \
            --enable-track-vars \
            --enable-trans-sid \
            --enable-yp \
            --enable-wddx \
            --with-kerberos \
            --enable-ucd-snmp-hack \
            --with-unixODBC=shared,%{_prefix} \
            --enable-memory-limit \
            --enable-shmop \
            --enable-calendar \
            --enable-dbx \
            --enable-dio \
            --with-mime-magic=%{_sysconfdir}/httpd/conf/magic \
            --without-sqlite \
            --with-libxml-dir=%{_prefix} \
            --with-oci8=$ORACLE_HOME \
            --with-apxs2=/usr/sbin/apxs \
            --with-xml \
            $*
    if test $? != 0; then
      tail -500 config.log
      : configure failed
      exit 1
    fi
    make %{?_smp_mflags}
    # Build /usr/bin/php-cgi with the CGI SAPI, and all the shared extensions
    pushd build-cgi
    build --enable-force-cgi-redirect \
          --enable-pcntl \
          with-imap=shared with-imap-ssl \
          enable-mbstring=shared enable-mbstr-enc-trans \
          --enable-mbregex \
          --with-ncurses=shared \
          --with-gd=shared \
          --enable-bcmath=shared \
          enable-dba=shared with-db4=%{_prefix} \
          --with-xmlrpc=shared \
          --with-ldap=shared \
          --with-mysql=shared,%{_prefix} \
          --with-mysqli=shared,%{_bindir}/mysql_config \
          --enable-dom=shared \
          --with-dom-xslt=%{_prefix} --with-dom-exslt=%{_prefix} \
          --with-pgsql=shared \
          --with-snmp=shared,%{_prefix} \
          --enable-soap=shared \
          --with-xsl=shared,%{_prefix} \
          enable-xmlreader=shared enable-xmlwriter=shared \
          --enable-fastcgi \
          --enable-pdo=shared \
          --with-pdo-odbc=shared,unixODBC,%{_prefix} \
          --with-pdo-mysql=shared,%{_prefix} \
          --with-pdo-pgsql=shared,%{_prefix} \
          --with-pdo-sqlite=shared,%{_prefix} \
    #      --with-pdo-oci=shared,$ORACLE_HOME \
          --with-oci8 \
           --enable-sigchild
    popd
    # Build Apache module, and the CLI SAPI, /usr/bin/php
    pushd build-apache
    build --with-apxs2=%{_sbindir}/apxs \
          without-mysql without-gd \
          without-odbc disable-dom \
          disable-dba without-unixODBC \
          disable-pdo disable-xmlreader --disable-xmlwriter
    popd
    %check
    cd build-apache
    # Run tests, using the CLI SAPI
    export NO_INTERACTION=1 REPORT_EXIT_STATUS=1 MALLOC_CHECK_=2
    unset TZ LANG LC_ALL
    #AZ
    # Allows PDO_OCI tests to connect.  [email protected] May 2007
    #export PDO_OCI_TEST_DSN=oci:dbname=%{oci8_test_connection_string}
    #export PDO_OCI_TEST_USER=scott
    #export PDO_OCI_TEST_PASS=%{oci8_test_system_password}
    #AZ
    if ! make test; then
      set +x
      for f in `find .. -name \*.diff -type f -print`; do
        echo "TEST FAILURE: $f --"
        cat "$f"
        echo "-- $f result ends."
      done
      set -x
      #exit 1
    fi
    unset NO_INTERACTION REPORT_EXIT_STATUS MALLOC_CHECK_
    %install
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    # Install everything from the CGI SAPI build
    pushd build-cgi
    make install INSTALL_ROOT=$RPM_BUILD_ROOT
    mv $RPM_BUILD_ROOT%{_bindir}/php $RPM_BUILD_ROOT%{_bindir}/php-cgi
    # Install the CLI SAPI as /usr/bin/php
    make install-cli INSTALL_ROOT=$RPM_BUILD_ROOT
    popd
    # Install the Apache module
    pushd build-apache
    make install-sapi INSTALL_ROOT=$RPM_BUILD_ROOT
    popd
    # Install the default configuration file and icons
    install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/
    install -m 644 $RPM_SOURCE_DIR/php.ini $RPM_BUILD_ROOT%{_sysconfdir}/php.ini
    install -m 755 -d $RPM_BUILD_ROOT%{contentdir}/icons
    install -m 644    *.gif $RPM_BUILD_ROOT%{contentdir}/icons/
    # For PEAR packaging:
    install -m 755 -d $RPM_BUILD_ROOT%{_libdir}/php/pear
    # Use correct libdir
    sed -i -e 's|%{_prefix}/lib|%{_libdir}|' $RPM_BUILD_ROOT%{_sysconfdir}/php.ini
    # install the DSO
    install -m 755 -d $RPM_BUILD_ROOT%{_libdir}/httpd/modules
    install -m 755 build-apache/libs/libphp5.so $RPM_BUILD_ROOT%{_libdir}/httpd/modules
    # Apache config fragment
    install -m 755 -d $RPM_BUILD_ROOT/etc/httpd/conf.d
    install -m 644 $RPM_SOURCE_DIR/php.conf $RPM_BUILD_ROOT/etc/httpd/conf.d
    install -m 755 -d $RPM_BUILD_ROOT%{_sysconfdir}/php.d
    install -m 755 -d $RPM_BUILD_ROOT%{_localstatedir}/lib/php
    install -m 700 -d $RPM_BUILD_ROOT%{_localstatedir}/lib/php/session
    # Generate files lists and stub .ini files for each subpackage
    #AZ
    for mod in oci8 pgsql mysql mysqli odbc ldap snmp xmlrpc imap \
        mbstring ncurses gd dom xsl soap bcmath dba xmlreader xmlwriter \
        pdo pdo_mysql pdo_pgsql pdo_odbc pdo_sqlite; do
    #AZ
        cat > $RPM_BUILD_ROOT%{_sysconfdir}/php.d/${mod}.ini <<EOF
    ; Enable ${mod} extension module
    extension=${mod}.so
    EOF
        cat > files.${mod} <<EOF
    %attr(755,root,root) %{_libdir}/php/modules/${mod}.so
    %config(noreplace) %attr(644,root,root) %{_sysconfdir}/php.d/${mod}.ini
    EOF
    done
    # The dom, xsl and xml* modules are all packaged in php-xml
    cat files.dom files.xsl files.xml{reader,writer} > files.xml
    # The mysql and mysqli modules are both packaged in php-mysql
    cat files.mysqli >> files.mysql
    # Split out the PDO modules
    #AZ
    cat files.pdo_oci >> files.oci8
    #AZ
    cat files.pdo_mysql >> files.mysql
    cat files.pdo_pgsql >> files.pgsql
    cat files.pdo_odbc >> files.odbc
    # Package pdo_sqlite with pdo; isolating the sqlite dependency
    # isn't useful at this time since rpm itself requires sqlite.
    cat files.pdo_sqlite >> files.pdo
    # Remove unpackaged files
    rm -rf $RPM_BUILD_ROOT%{_libdir}/php/modules/*.a \
           $RPM_BUILD_ROOT%{_bindir}/{phptar} \
           $RPM_BUILD_ROOT%{_datadir}/pear
    # Remove irrelevant docs
    rm -f README.{Zeus,QNX,CVS-RULES}
    %clean
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    rm files.*
    %files
    %defattr(-,root,root)
    %{_libdir}/httpd/modules/libphp5.so
    %attr(0770,root,apache) %dir %{_localstatedir}/lib/php/session
    %config %{_sysconfdir}/httpd/conf.d/php.conf
    %{contentdir}/icons/php.gif
    %files common
    %defattr(-,root,root)
    %doc CODING_STANDARDS CREDITS EXTENSIONS INSTALL LICENSE NEWS README*
    %doc Zend/ZEND_* gd_README TSRM_LICENSE regex_COPYRIGHT
    %config %{_sysconfdir}/php.ini
    %dir %{_sysconfdir}/php.d
    %dir %{_libdir}/php
    %dir %{_libdir}/php/modules
    %dir %{_localstatedir}/lib/php
    %dir %{_libdir}/php/pear
    %files cli
    %defattr(-,root,root)
    %{_bindir}/php
    %{_bindir}/php-cgi
    %{_mandir}/man1/php.1*
    %files devel
    %defattr(-,root,root)
    %{_bindir}/php-config
    %{_bindir}/phpize
    %{_includedir}/php
    %{_libdir}/php/build
    %{_mandir}/man1/php-config.1*
    %{_mandir}/man1/phpize.1*
    %files pgsql -f files.pgsql
    %files mysql -f files.mysql
    %files odbc -f files.odbc
    %files imap -f files.imap
    %files ldap -f files.ldap
    %files snmp -f files.snmp
    %files xml -f files.xml
    %files xmlrpc -f files.xmlrpc
    %files mbstring -f files.mbstring
    %files ncurses -f files.ncurses
    %files gd -f files.gd
    %files soap -f files.soap
    %files bcmath -f files.bcmath
    %files dba -f files.dba
    %files pdo -f files.pdo
    #AZ
    %files oci8 -f files.oci8
    #AZ
    %changelog
    * Wed Sep 12 2007 Joe Orton <[email protected]> 5.1.6-15.el5
    - improve fix for CVE-2007-3997 (#278411)
    * Fri Sep  7 2007 Joe Orton <[email protected]> 5.1.6-14.el5
    - fix backport for CVE-2007-3996 (#278411)
    * Thu Sep  6 2007 Joe Orton <[email protected]> 5.1.6-13.el5
    - add security fixes for CVE-2007-2756, CVE-2007-2872,
      CVE-2007-3799, CVE-2007-3996, CVE-2007-3998, CVE-2007-4658,
      CVE-2007-4670 (#278411)
    * Wed Apr  4 2007 Joe Orton <[email protected]> 5.1.6-12.el5
    - add security fix for CVE-2007-1864, SOAP redirect handling issue,
      FTP CRLF injection issue (#235016)
    * Wed Apr  4 2007 Joe Orton <[email protected]> 5.1.6-11.el5
    - add security fix for CVE-2007-1718 (#235016)
    * Tue Apr  3 2007 Joe Orton <[email protected]> 5.1.6-9.el5
    - add security fix for CVE-2007-1583 (#235016)
    - add security fixes for CVE-2007-0455, CVE-2007-1001 (#235036)
    * Fri Mar  9 2007 Joe Orton <[email protected]> 5.1.6-7.el5
    - add security fix for CVE-2007-1285 (#231597)
    * Fri Feb 16 2007 Joe Orton <[email protected]> 5.1.6-6.el5
    - add security fixes for: CVE-2007-0906, CVE-2007-0907,
      CVE-2007-0908, CVE-2007-0909, CVE-2007-0910, CVE-2007-0988 (#229013)
    * Tue Dec 19 2006 Joe Orton <[email protected]> 5.1.6-5.el5
    - fix version for php-zend-abi (#218758)
    * Thu Nov 23 2006 Joe Orton <[email protected]> 5.1.6-4.el5
    - php-xml provides php-domxml (#215656)
    - fix php-pdo-abi provide (#214281)
    - provide php-zend-abi (#212804)
    - don't Obsolete mod_php
    - fix PDO sqlite TEXT extraction truncate-by-one (#217033)
    - package php{ize,-config} man pages in -devel (#199382)
    - change module subpackages to require php-common not php (#177821)
    - add security fix for CVE-2006-5465 (#216114)
    * Wed Oct  4 2006 Joe Orton <[email protected]> 5.1.6-3
    - from upstream: add safety checks against integer overflow in _ecalloc
    * Tue Aug 29 2006 Joe Orton <[email protected]> 5.1.6-2
    - update to 5.1.6 (security fixes)
    - bump default memory_limit to 16M (#196802)
    * Wed Jul 12 2006 Jesse Keating <[email protected]> - 5.1.4-8.1
    - rebuild
    * Fri Jun  9 2006 Joe Orton <[email protected]> 5.1.4-8
    - Provide php-posix (#194583)
    - only provide php-pcntl from -cli subpackage
    - add missing defattr's (thanks to Matthias Saou)
    * Fri Jun  9 2006 Joe Orton <[email protected]> 5.1.4-7
    - move Obsoletes for php-openssl to -common (#194501)
    - Provide: php-cgi from -cli subpackage
    * Fri Jun  2 2006 Joe Orton <[email protected]> 5.1.4-6
    - split out php-cli, php-common subpackages (#177821)
    - add php-pdo-abi version export (#193202)
    * Wed May 24 2006 Radek Vokal <[email protected]> 5.1.4-5.1
    - rebuilt for new libnetsnmp
    * Thu May 18 2006 Joe Orton <[email protected]> 5.1.4-5
    - provide mod_php (#187891)
    - provide php-cli (#192196)
    - use correct LDAP fix (#181518)
    - define GNUSOURCE in php_config.h and leave it defined
    - drop (circular) dependency on php-pear
    * Mon May  8 2006 Joe Orton <[email protected]> 5.1.4-3
    - update to 5.1.4
    * Wed May  3 2006 Joe Orton <[email protected]> 5.1.3-3
    - update to 5.1.3
    * Tue Feb 28 2006 Joe Orton <[email protected]> 5.1.2-5
    - provide php-api (#183227)
    - add provides for all builtin modules (Tim Jackson, #173804)
    - own %%{_libdir}/php/pear for PEAR packages (per #176733)
    - add obsoletes to allow upgrade from FE4 PDO packages (#181863)
    * Fri Feb 10 2006 Jesse Keating <[email protected]> - 5.1.2-4.3
    - bump again for double-long bug on ppc(64)
    * Tue Feb 07 2006 Jesse Keating <[email protected]> - 5.1.2-4.1
    - rebuilt for new gcc4.1 snapshot and glibc changes
    * Tue Jan 31 2006 Joe Orton <[email protected]> 5.1.2-4
    - rebuild for new libc-client soname
    * Mon Jan 16 2006 Joe Orton <[email protected]> 5.1.2-3
    - only build xmlreader and xmlwriter shared (#177810)
    * Fri Jan 13 2006 Joe Orton <[email protected]> 5.1.2-2
    - update to 5.1.2
    * Thu Jan  5 2006 Joe Orton <[email protected]> 5.1.1-8
    - rebuild again
    * Mon Jan  2 2006 Joe Orton <[email protected]> 5.1.1-7
    - rebuild for new net-snmp
    * Mon Dec 12 2005 Joe Orton <[email protected]> 5.1.1-6
    - enable short_open_tag in default php.ini again (#175381)
    * Fri Dec 09 2005 Jesse Keating <[email protected]>
    - rebuilt
    * Thu Dec  8 2005 Joe Orton <[email protected]> 5.1.1-5
    - require net-snmp for php-snmp (#174800)
    * Sun Dec  4 2005 Joe Orton <[email protected]> 5.1.1-4
    - add /usr/share/pear back to hard-coded include_path (#174885)
    * Fri Dec  2 2005 Joe Orton <[email protected]> 5.1.1-3
    - rebuild for httpd 2.2
    * Mon Nov 28 2005 Joe Orton <[email protected]> 5.1.1-2
    - update to 5.1.1
    - remove pear subpackage
    - enable pdo extensions (php-pdo subpackage)
    - remove non-standard conditional module builds
    - enable xmlreader extension
    * Thu Nov 10 2005 Tomas Mraz <[email protected]> 5.0.5-6
    - rebuilt against new openssl
    * Mon Nov  7 2005 Joe Orton <[email protected]> 5.0.5-5
    - pear: update to XML_RPC 1.4.4, XML_Parser 1.2.7, Mail 1.1.9 (#172528)
    * Tue Nov  1 2005 Joe Orton <[email protected]> 5.0.5-4
    - rebuild for new libnetsnmp
    * Wed Sep 14 2005 Joe Orton <[email protected]> 5.0.5-3
    - update to 5.0.5
    - add fix for upstream #34435
    - devel: require autoconf, automake (#159283)
    - pear: update to HTTP-1.3.6, Mail-1.1.8, Net_SMTP-1.2.7, XML_RPC-1.4.1
    - fix imagettftext et al (upstream, #161001)
    * Thu Jun 16 2005 Joe Orton <[email protected]> 5.0.4-11
    - ldap: restore ldap_start_tls() function
    * Fri May  6 2005 Joe Orton <[email protected]> 5.0.4-10
    - disable RPATHs in shared extensions (#156974)
    * Tue May  3 2005 Joe Orton <[email protected]> 5.0.4-9
    - build simplexml_import_dom even with shared dom (#156434)
    - prevent truncation of copied files to ~2Mb (#155916)
    - install /usr/bin/php from CLI build alongside CGI
    - enable sysvmsg extension (#142988)
    * Mon Apr 25 2005 Joe Orton <[email protected]> 5.0.4-8
    - prevent build of builtin dba as well as shared extension
    * Wed Apr 13 2005 Joe Orton <[email protected]> 5.0.4-7
    - split out dba and bcmath extensions into subpackages
    - BuildRequire gcc-c++ to avoid AC_PROG_CXX{,CPP} failure (#155221)
    - pear: update to DB-1.7.6
    - enable FastCGI support in /usr/bin/php-cgi (#149596)
    * Wed Apr 13 2005 Joe Orton <[email protected]> 5.0.4-6
    - build /usr/bin/php with the CLI SAPI, and add /usr/bin/php-cgi,
      built with the CGI SAPI (thanks to Edward Rudd, #137704)
    - add php(1) man page for CLI
    - fix more test cases to use -n when invoking php
    * Wed Apr 13 2005 Joe Orton <[email protected]> 5.0.4-5
    - rebuild for new libpq soname
    * Tue Apr 12 2005 Joe Orton <[email protected]> 5.0.4-4
    - bundle from PEAR: HTTP, Mail, XML_Parser, Net_Socket, Net_SMTP
    - snmp: disable MSHUTDOWN function to prevent error_log noise (#153988)
    - mysqli: add fix for crash on x86_64 (Georg Richter, upstream #32282)
    * Mon Apr 11 2005 Joe Orton <[email protected]> 5.0.4-3
    - build shared objects as PIC (#154195)
    * Mon Apr  4 2005 Joe Orton <[email protected]> 5.0.4-2
    - fix PEAR installation and bundle PEAR DB-1.7.5 package
    * Fri Apr  1 2005 Joe Orton <[email protected]> 5.0.4-1
    - update to 5.0.4 (#153068)
    - add .phps AddType to php.conf (#152973)
    - better gcc4 fix for libxmlrpc
    * Wed Mar 30 2005 Joe Orton <[email protected]> 5.0.3-5
    - BuildRequire mysql-devel >= 4.1
    - don't mark php.ini as noreplace to make upgrades work (#152171)
    - fix subpackage descriptions (#152628)
    - fix memset(,,0) in Zend (thanks to Dave Jones)
    - fix various compiler warnings in Zend
    * Thu Mar 24 2005 Joe Orton <[email protected]> 5.0.3-4
    - package mysqli extension in php-mysql
    - really enable pcntl (#142903)
    - don't build with --enable-safe-mode (#148969)
    - use "Instant Client" libraries for oci8 module (Kai Bolay, #149873)
    * Fri Feb 18 2005 Joe Orton <[email protected]> 5.0.3-3
    - fix build with GCC 4
    * Wed Feb  9 2005 Joe Orton <[email protected]> 5.0.3-2
    - install the ext/gd headers (#145891)
    - enable pcntl extension in /usr/bin/php (#142903)
    - add libmbfl array arithmetic fix ([email protected], #143795)
    - add BuildRequire for recent pcre-devel (#147448)
    * Wed Jan 12 2005 Joe Orton <[email protected]> 5.0.3-1
    - update to 5.0.3 (thanks to Robert Scheck et al, #143101)
    - enable xsl extension (#142174)
    - package both the xsl and dom extensions in php-xml
    - enable soap extension, shared (php-soap package) (#142901)
    - add patches from upstream 5.0 branch:
    * Zend_strtod.c compile fixes
    * correct php_sprintf return value usage
    * Mon Nov 22 2004 Joe Orton <[email protected]> 5.0.2-8
    - update for db4-4.3 (Robert Scheck, #140167)
    - build against mysql-devel
    - run tests in %%check
    * Wed Nov 10 2004 Joe Orton <[email protected]> 5.0.2-7
    - truncate changelog at 4.3.1-1
    - merge from 4.3.x package:
    - enable mime_magic extension and Require: file (#130276)
    * Mon Nov  8 2004 Joe Orton <[email protected]> 5.0.2-6
    - fix dom/sqlite enable/without confusion
    * Mon Nov  8 2004 Joe Orton <[email protected]> 5.0.2-5
    - fix phpize installation for lib64 platforms
    - add fix for segfault in variable parsing introduced in 5.0.2
    * Mon Nov  8 2004 Joe Orton <[email protected]> 5.0.2-4
    - update to 5.0.2 (#127980)
    - build against mysqlclient10-devel
    - use new RTLD_DEEPBIND to load extension modules
    - drop explicit requirement for elfutils-devel
    - use AddHandler in default conf.d/php.conf (#135664)
    - "fix" round() fudging for recent gcc on x86
    - disable sqlite pending audit of warnings and subpackage split
    * Fri Sep 17 2004 Joe Orton <[email protected]> 5.0.1-4
    - don't build dom extension into 2.0 SAPI
    * Fri Sep 17 2004 Joe Orton <[email protected]> 5.0.1-3
    - ExclusiveArch: x86 ppc x86_64 for the moment
    * Fri Sep 17 2004 Joe Orton <[email protected]> 5.0.1-2
    - fix default extension_dir and conf.d/php.conf
    * Thu Sep  9 2004 Joe Orton <[email protected]> 5.0.1-1
    - update to 5.0.1
    - only build shared modules once
    - put dom extension in php-dom subpackage again
    - move extension modules into %%{_libdir}/php/modules
    - don't use --with-regex=system, it's ignored for the apache* SAPIs
    * Wed Aug 11 2004 Tom Callaway <[email protected]>
    - Merge in some spec file changes from Jeff Stern ([email protected])
    * Mon Aug 09 2004 Tom Callaway <[email protected]>
    - bump to 5.0.0
    - add patch to prevent clobbering struct re_registers from regex.h
    - remove domxml references, replaced with dom now built-in
    - fix php.ini to refer to php5 not php4
    * Wed Aug 04 2004 Florian La Roche <[email protected]>
    - rebuild
    * Wed Jul 14 2004 Joe Orton <[email protected]> 4.3.8-3
    - update to 4.3.8
    - catch some fd > FD_SETSIZE vs select() issues (#125258)
    * Mon Jun 21 2004 Joe Orton <[email protected]> 4.3.7-4
    - pick up test failures again
    - have -devel require php of same release
    * Thu Jun 17 2004 Joe Orton <[email protected]> 4.3.7-3
    - add gmp_powm fix (Oskari Saarenmaa, #124318)
    - split mbstring, ncurses, gd, openssl extns into subpackages
    - fix memory leak in apache2handler; use ap_r{write,flush}
      rather than brigade interfaces
    * Tue Jun 15 2004 Elliot Lee <[email protected]>
    - rebuilt
    * Thu Jun  3 2004 Joe Orton <[email protected]> 4.3.7-1
    - update to 4.3.7
    - have -pear subpackage require php of same VR
    * Wed May 26 2004 Joe Orton <[email protected]> 4.3.6-6
    - buildrequire smtpdaemon (#124430)
    - try switching to system libgd again (prevent symbol conflicts
      when e.g. mod_perl loads the system libgd library.)
    * Wed May 19 2004 Joe Orton <[email protected]> 4.3.6-5
    - don't obsolete php-imap (#123580)
    - unconditionally build -imap subpackage
    * Thu May 13 2004 Joe Orton <[email protected]> 4.3.6-4
    - remove trigger
    * Thu Apr 22 2004 Joe Orton <[email protected]> 4.3.6-3
    - fix umask reset "feature" (#121454)
    - don't use DL_GLOBAL when dlopen'ing extension modules
    * Sun Apr 18 2004 Joe Orton <[email protected]> 4.3.6-2
    - fix segfault on httpd SIGHUP (upstream #27810)
    * Fri Apr 16 2004 Joe Orton <[email protected]> 4.3.6-1
    - update to 4.3.6 (Robert Scheck, #121011)
    * Wed Apr  7 2004 Joe Orton <[email protected]> 4.3.4-11
    - add back imap subpackage, using libc-client (#115535)
    * Tue Mar 02 2004 Elliot Lee <[email protected]>
    - rebuilt
    * Wed Feb 18 2004 Joe Orton <[email protected]> 4.3.4-10
    - eliminate /usr/local/lib RPATH in odbc.so
    - really use system pcre library
    * Fri Feb 13 2004 Elliot Lee <[email protected]> 4.3.4-9
    - rebuilt
    * Mon Feb  2 2004 Bill Nottingham <[email protected]> 4.3.4-8
    - obsolete php-imap if we're not building it
    * Wed Jan 28 2004 Joe Orton <[email protected]> 4.3.4-7
    - gd fix for build with recent Freetype2 (from upstream)
    - remove easter egg (Oden Eriksson, Mandrake)
    * Wed Jan 21 2004 Joe Orton <[email protected]> 4.3.4-6
    - php-pear requires php
    - also remove extension=imap from php.ini in upgrade trigger
    - merge from Taroon: allow upgrade from Stronghold 4.0
    * Wed Jan 21 2004 Joe Orton <[email protected]> 4.3.4-5
    - add defattr for php-pear subpackage
    - restore defaults: output_buffering=Off, register_argc_argv=On
    - add trigger to handle php.ini upgrades smoothly (#112470)
    * Tue Jan 13 2004 Joe Orton <[email protected]> 4.3.4-4
    - conditionalize support for imap extension for the time being
    - switch /etc/php.ini to use php.ini-recommended (but leave
      variables_order as EGPCS) (#97765)
    - set session.path to /var/lib/php/session by default (#89975)
    - own /var/lib/php{,/session} and have apache own the latter
    - split off php-pear subpackage (#83771)
    * Sat Dec 13 2003 Jeff Johnson <[email protected]> 4.3.4-3
    - rebuild against db-4.2.52.
    * Mon Dec  1 2003 Joe Orton <[email protected]> 4.3.4-2
    - rebuild for new libxslt (#110658)
    - use --with-{mssql,oci8} for enabling extensions (#110482)
    - fix rebuild issues (Jan Visser, #110274)
    - remove hard-coded LIBS
    - conditional support for mhash (Aleksander Adamowski, #111251)
    * Mon Nov 10 2003 Joe Orton <[email protected]> 4.3.4-1.1
    - rebuild for FC1 updates
    * Mon Nov 10 2003 Joe Orton <[email protected]> 4.3.4-1
    - update to 4.3.4
    - include all licence files
    - libxmlrpc fixes
    * Mon Oct 20 2003 Joe Orton <[email protected]> 4.3.3-6
    - use bundled libgd (#107407)
    - remove manual: up-to-date manual sources are no longer DFSG-free;
      it's too big; it's on the web anyway; #91292, #105804, #107384
    * Wed Oct 15 2003 Joe Orton <[email protected]> 4.3.3-5
    - add php-xmlrpc subpackage (#107138)
    * Mon Oct 13 2003 Joe Orton <[email protected]> 4.3.3-4
    - drop recode support, symbols collide with MySQL
    * Sun Oct 12 2003 Joe Orton <[email protected]> 4.3.3-3
    - split domxml extension into php-domxml subpackage
    - enable xslt and xml support in domxml extension (#106042)
    - fix httpd-devel build requirement (#104341)
    - enable recode extension (#106755)
    - add workaround for #103982
    * Thu Sep 25 2003 Jeff Johnson <[email protected]> 4.3.3-3
    - rebuild against db-4.2.42.
    * Sun Sep  7 2003 Joe Orton <[email protected]> 4.3.3-2
    - don't use --enable-versioning, it depends on libtool being
    broken (#103690)
    * Sun Sep  7 2003 Joe Orton <[email protected]> 4.3.3-1
    - update to 4.3.3
    - add libtool build prereq (#103388)
    - switch to apache2handler
    * Mon Jul 28 2003 Joe Orton <[email protected]> 4.3.2-8
    - rebuild
    * Tue Jul 22 2003 Nalin Dahyabhai <[email protected]> 4.3.2-7
    - rebuild
    * Tue Jul  8 2003 Joe Orton <[email protected]> 4.3.2-6
    - use system pcre library
    * Mon Jun  9 2003 Joe Orton <[email protected]> 4.3.2-5
    - enable mbstring and mbregex (#81336)
    - fix use of libtool 1.5
    * Wed Jun 04 2003 Elliot Lee <[email protected]>
    - rebuilt
    * Tue Jun  3 2003 Joe Orton <[email protected]> 4.3.2-3
    - add lib64 and domxml fixes
    * Tue Jun  3 2003 Frank Dauer <[email protected]>
    - added conditional support for mssql module (#92149)
    * Fri May 30 2003 Joe Orton <[email protected]> 4.3.2-2
    - update the -tests and -lib64 patches
    - fixes for db4 detection
    - require aspell-devel >= 0.50.0 for pspell compatibility
    * Thu May 29 2003 Joe Orton <[email protected]> 4.3.2-1
    - update to 4.3.2
    * Fri May 16 2003 Joe Orton <[email protected]> 4.3.1-3
    - link odbc module correctly
    - patch so that php -n doesn't scan inidir
    - run tests using php -n, avoid loading system modules
    * Wed May 14 2003 Joe Orton <[email protected]> 4.3.1-2
    - workaround broken parser produced by bison-1.875
    * Tue May  6 2003 Joe Orton <[email protected]> 4.3.1-1
    - update to 4.3.1; run test suite
    - open extension modules with RTLD_NOW rather than _LAZYThe error is :
    Build complete.
    (It is safe to ignore warnings about tempnam and tmpnam).
    + with-oci8 enable-sigchild
    /var/tmp/rpm-tmp.3167: line 156: --with-oci8: command not found
    error: Bad exit status from /var/tmp/rpm-tmp.3167 (%build)
    RPM build errors:
        Bad exit status from /var/tmp/rpm-tmp.3167 (%build)If i modify spec like this :
    # Build /usr/bin/php-cgi with the CGI SAPI, and all the shared extensions
    pushd build-cgi
    build --enable-force-cgi-redirect \
          --enable-pcntl \
          with-imap=shared with-imap-ssl \
          enable-mbstring=shared enable-mbstr-enc-trans \
          --enable-mbregex \
          --with-ncurses=shared \
          --with-gd=shared \
          --enable-bcmath=shared \
          enable-dba=shared with-db4=%{_prefix} \
          --with-xmlrpc=shared \
          --with-ldap=shared \
          --with-mysql=shared,%{_prefix} \
          --with-mysqli=shared,%{_bindir}/mysql_config \
          --enable-dom=shared \
          --with-dom-xslt=%{_prefix} --with-dom-exslt=%{_prefix} \
          --with-pgsql=shared \
          --with-snmp=shared,%{_prefix} \
          --enable-soap=shared \
          --with-xsl=shared,%{_prefix} \
          enable-xmlreader=shared enable-xmlwriter=shared \
          --enable-fastcgi \
          --enable-pdo=shared \
          --with-pdo-odbc=shared,unixODBC,%{_prefix} \
          --with-pdo-mysql=shared,%{_prefix} \
          --with-pdo-pgsql=shared,%{_prefix} \
          --with-pdo-sqlite=shared,%{_prefix} \
    #      --with-pdo-oci=shared,$ORACLE_HOME \
          --with-oci8=shared,$ORACLE_HOME/lib \
           --enable-sigchild
    popdI'm getting :
    Build complete.
    (It is safe to ignore warnings about tempnam and tmpnam).
    + with-oci8=shared,/u01/app/oracle/product/10.2.0/db_1/lib enable-sigchild
    /var/tmp/rpm-tmp.11885: line 156: --with-oci8=shared,/u01/app/oracle/product/10.2.0/db_1/lib: No such file or directory
    error: Bad exit status from /var/tmp/rpm-tmp.11885 (%build)
    Please help.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

    and a bit further :
    diff:
    12,13c12,13
    < %define oci8_test_system_password tiger
    < %define oci8_test_connection_string localhost/lhome
    %define oci8_test_system_password oracle
    %define oci8_test_connection_string localhost/orcl2136,138c136,137
    < Requires: php-common = %{version}-%{release}, php-pdo
    < # oracle-instantclient-basic = %{ociver} php-pdo
    < #BuildRequires: oracle-instantclient-devel = %{ociver}
    Requires: php-common = %{version}-%{release}, oracle-instantclient-basic = %{ociver} php-pdo
    BuildRequires: oracle-instantclient-devel = %{ociver}339c338
    < \$user       = "scott";
    \$user = "system";487c486,487
    <       with-oci8 enable-sigchild
    --with-pdo-oci=shared,instantclient,/usr,%{ociver} \
    --with-oci8=shared,instantclient,/usr/lib/oracle/%{ociver}/client/lib --enable-sigchild496c496
    <       disable-pdo disable-xmlreader --disable-xmlwriter
    disable-pdo disable-xmlreader --disable-xmlwriter506,508c506,508
    < #export PDO_OCI_TEST_DSN=oci:dbname=%{oci8_test_connection_string}
    < #export PDO_OCI_TEST_USER=system
    < #export PDO_OCI_TEST_PASS=%{oci8_test_system_password}
    export PDO_OCI_TEST_DSN=oci:dbname=%{oci8_test_connection_string}
    export PDO_OCI_TEST_USER=system
    export PDO_OCI_TEST_PASS=%{oci8_test_system_password}571c571
    <     pdo pdo_mysql pdo_pgsql pdo_odbc pdo_sqlite; do
    pdo pdo_mysql pdo_pgsql pdo_odbc pdo_sqlite pdo_oci; do589c589
    < #cat files.pdo_oci >> files.oci8
    cat files.pdo_oci >> files.oci8rpmbuild -bi
    + '[' /var/tmp/php-root '!=' / ']'
    + rm -f /var/tmp/php-root/etc/httpd/conf/httpd.conf /var/tmp/php-root/etc/httpd/conf/httpd.conf.bak
    + /usr/lib/rpm/brp-compress
    + /usr/lib/rpm/brp-strip
    + /usr/lib/rpm/brp-strip-static-archive
    + /usr/lib/rpm/brp-strip-comment-note
    Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.40673
    + umask 022
    + cd /usr/src/redhat/BUILD
    + cd php-5.2.3
    + cd build-apache
    + export NO_INTERACTION=1 REPORT_EXIT_STATUS=1 MALLOC_CHECK_=2
    + NO_INTERACTION=1
    + REPORT_EXIT_STATUS=1
    + MALLOC_CHECK_=2
    + unset TZ LANG LC_ALL
    + make test
    Build complete.
    Don't forget to run 'make test'.
    PHP Warning:  PHP Startup: gd: Unable to initialize module
    Module compiled with module API=20050922, debug=0, thread-safety=0
    PHP    compiled with module API=20060613, debug=0, thread-safety=0
    These options need to match
    in Unknown on line 0
    PHP Warning:  PHP Startup: ldap: Unable to initialize module
    Module compiled with module API=20050922, debug=0, thread-safety=0
    PHP    compiled with module API=20060613, debug=0, thread-safety=0
    These options need to match
    in Unknown on line 0
    PHP Warning:  PHP Startup: gd: Unable to initialize module
    Module compiled with module API=20050922, debug=0, thread-safety=0
    PHP    compiled with module API=20060613, debug=0, thread-safety=0
    These options need to match
    in Unknown on line 0
    PHP Warning:  PHP Startup: ldap: Unable to initialize module
    Module compiled with module API=20050922, debug=0, thread-safety=0
    PHP    compiled with module API=20060613, debug=0, thread-safety=0etc. etc...

  • Weird order of events added to iCal using Applescript

    This is a script that has worked perfectly in the past and as far as I know has not been modified (my bad if so...) Currently it is adding all the correct events into iCal but taking a real long time to do it and this is probably due to the weird chronology it takes to putting the events in. I will include the script at the bottom of this post and here is a section of the event log that shows the weird chronology... Thanks in advance for the help.
    dan
    count every event of calendar "School Calendar 09-10"
    176
    get summary of item 1 of every event of calendar "School Calendar 09-10"
    "Day 5"
    get summary of item 1 of every event of calendar "School Calendar 09-10"
    "Day 5"
    get start date of item 1 of every event of calendar "School Calendar 09-10"
    date "Monday, April 5, 2010 12:00:00 AM"
    make new event at end of calendar "Classes2" with properties {summary:"Alg I period 2", start date:date "Monday, April 5, 2010 9:30:00 AM", end date:date "Monday, April 5, 2010 10:25:00 AM"}
    event id "879D03C6-24CE-49C8-AB3B-D216FF4CF148" of calendar id "186E5DE2-8E33-492F-9F76-D0EF292B98D8"
    make new event at end of calendar "Classes2" with properties {summary:" Pre Calc B period 3", start date:date "Monday, April 5, 2010 10:30:00 AM", end date:date "Monday, April 5, 2010 11:25:00 AM"}
    event id "1AF62B85-F074-4E93-A03F-89CFD79A59A6" of calendar id "186E5DE2-8E33-492F-9F76-D0EF292B98D8"
    make new event at end of calendar "Classes2" with properties {summary:" IB Math period 4", start date:date "Monday, April 5, 2010 11:30:00 AM", end date:date "Monday, April 5, 2010 12:25:00 PM"}
    event id "CCB9EE0D-870E-43EA-AA39-3DAE2BCB23F8" of calendar id "186E5DE2-8E33-492F-9F76-D0EF292B98D8"
    get summary of item 2 of every event of calendar "School Calendar 09-10"
    "Day 3"
    get summary of item 2 of every event of calendar "School Calendar 09-10"
    "Day 3"
    get start date of item 2 of every event of calendar "School Calendar 09-10"
    date "Monday, April 19, 2010 12:00:00 AM"
    make new event at end of calendar "Classes2" with properties {summary:" Pre Calc F period 1", start date:date "Monday, April 19, 2010 8:30:00 AM", end date:date "Monday, April 19, 2010 9:25:00 AM"}
    event id "F8A5B643-7758-437B-919E-65C0EBF043EA" of calendar id "186E5DE2-8E33-492F-9F76-D0EF292B98D8"
    make new event at end of calendar "Classes2" with properties {summary:"Alg I period 3", start date:date "Monday, April 19, 2010 10:30:00 AM", end date:date "Monday, April 19, 2010 11:25:00 AM"}
    <pre style="
    font-family: Monaco, 'Courier New', Courier, monospace;
    font-size: 10px;
    margin: 0px;
    padding: 5px;
    border: 1px solid #000000;
    width: 720px; height: 340px;
    color: #000000;
    background-color: #FFDDFF;
    overflow: auto;"
    title="this text can be pasted into a HTML editor">
    tell application "iCal"
    ---------This is where you gather / set user data
    display dialog "How many courses do you teach?" default answer ""
    set courses to the text returned of the result as number
    set slotA to ""
    set slotB to ""
    set slotC to ""
    set slotD to ""
    set slotE to ""
    set slotF to ""
    set slotG to ""
    set slotH to ""
    repeat with x from 1 to courses
    set entered to text returned of (display dialog "Please enter the slot (A-H) and the course name, separating them with a comma:" default answer "")
    set astid to AppleScript's text item delimiters
    set AppleScript's text item delimiters to ","
    set {chosenslot, chosencourse} to {(entered's text item 1), (entered's text item 2)}
    if chosenslot is "A" then
    set slotA to chosencourse
    end if
    if chosenslot is "B" then
    set slotB to chosencourse
    end if
    if chosenslot is "C" then
    set slotC to chosencourse
    end if
    if chosenslot is "D" then
    set slotD to chosencourse
    end if
    if chosenslot is "E" then
    set slotE to chosencourse
    end if
    if chosenslot is "F" then
    set slotF to chosencourse
    end if
    if chosenslot is "G" then
    set slotG to chosencourse
    end if
    if chosenslot is "H" then
    set slotH to chosencourse
    end if
    end repeat
    set TargetCalendar to "Classes2"
    --Predefined period times
    set periodTimes to {{startTime:"08:30 AM", endTime:"09:25 AM"}, {startTime:"09:30 AM", endTime:"10:25 AM"}, {startTime:"10:30 AM", endTime:"11:25 AM"}, {startTime:"11:30 AM", endTime:"12:25 PM"}, {startTime:"12:30 PM", endTime:"01:25 PM"}, {startTime:"01:30 PM", endTime:"02:25 PM"}}
    set Day1pattern to {slotA, slotB, slotC, slotD, slotE, slotF}
    set Day2pattern to {slotG, slotH, slotA, slotD, slotE, slotB}
    set Day3pattern to {slotF, slotC, slotG, slotD, slotE, slotH}
    set Day4pattern to {slotB, slotA, slotF, slotD, slotE, slotC}
    set Day5pattern to {slotH, slotG, slotB, slotD, slotE, slotA}
    set Day6pattern to {slotC, slotF, slotH, slotD, slotE, slotG}
    --Predefined period cycles
    set Day1 to {slotA & " period 1", slotB & " period 2", slotC & " period 3", slotD & " period 4", slotE & " period 5", slotF & " Period 6 "}
    set Day2 to {slotG & " period 1", slotH & " period 2", slotA & "  period 3", slotD & " period 4", slotE & " period 5", slotB & "  period 6"}
    set Day3 to {slotF & " period 1", slotC & " period 2", slotG & " period 3", slotD & " period 4", slotE & " period 5", slotH & " period 6"}
    set Day4 to {slotB & " period 1", slotA & " period 2", slotF & " period 3", slotD & " period 4", slotE & " period 5", slotC & " period 6"}
    set Day5 to {slotH & " period 1", slotG & " period 2", slotB & " period 3", slotD & " period 4", slotE & " period 5", slotA & " period 6"}
    set Day6 to {slotC & " period 1", slotF & " period 2", slotH & " period 3", slotD & " period 4", slotE & " period 5", slotG & " period 6"}
    --Makes a "list of lists" so that all the period definitions are in one place
    set periodCycle to {Day1, Day2, Day3, Day4, Day5, Day6}
    set periodcycle2 to {Day1pattern, Day2pattern, Day3pattern, Day4pattern, Day5pattern, Day6pattern}
    set isitacycleday to {"Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "Day 6"}
    --This repeat loop is using the cycle day definitions in the calendar named "School Calendar "A.Y.""
    repeat with theEvent in (events of calendar "School Calendar 09-10")
    if isitacycleday contains (summary of theEvent) then
    --Gets the current day and the cycle day number
    set cycleday to summary of theEvent
    set cycleDate to (start date of theEvent) + 1 * hours
    set cycleNumber to last character of cycleday as integer
    --There are always 6 periods in every day
    repeat with periodNumber from 1 to 6
    --Gets the subject from periodCycle
    set theSummary2 to item periodNumber of item cycleNumber of periodcycle2
    set theSummary to item periodNumber of item cycleNumber of periodCycle
    --Checks to see if there's a subject for this period, if not skips to next one
    if theSummary2 is not "" then
    set theStart to date (startTime of item periodNumber of periodTimes) of cycleDate
    set theEnd to date (endTime of item periodNumber of periodTimes) of cycleDate
    --Makes the event in the calender whose name is defined at the top of the script
    make new event at end of calendar TargetCalendar with properties {summary:theSummary, start date:theStart, end date:theEnd}
    end if
    end repeat
    end if
    end repeat
    end tell </pre>

    Did it run faster in the past?
    The events are happening as your script is generating them - for example, you get the event summary to compare in an if statement, then get it again when you assign it to a variable. The Script Editor's *Event Log* is handy in this case to see when you are creating a lot of extraneous or duplicate events.
    Also, when using application tell statements, you should only target the application's terminology, since it will just pass back what it doesn't know how to do - in other words, try not to put anything in the statement except what you need from the application.
    I don't have your iCal calendar events to play with, but a couple of tweaks to your code should improve the performance:
    <pre style="
    font-family: Monaco, 'Courier New', Courier, monospace;
    font-size: 10px;
    font-weight: normal;
    margin: 0px;
    padding: 5px;
    border: 1px solid #000000;
    width: 720px; height: 340px;
    color: #000000;
    background-color: #FFEE80;
    overflow: auto;"
    title="this text can be pasted into the Script Editor">
    ---------This is where you gather / set user data
    display dialog "How many courses do you teach?" default answer ""
    set courses to the text returned of the result as number
    set slotA to ""
    set slotB to ""
    set slotC to ""
    set slotD to ""
    set slotE to ""
    set slotF to ""
    set slotG to ""
    set slotH to ""
    repeat with x from 1 to courses
    set entered to text returned of (display dialog "Please enter the slot (A-H) and the course name, separating them with a comma:" default answer "")
    set astid to AppleScript's text item delimiters
    set AppleScript's text item delimiters to ","
    set {chosenslot, chosencourse} to {(entered's text item 1), (entered's text item 2)}
    if chosenslot is "A" then
    set slotA to chosencourse
    end if
    if chosenslot is "B" then
    set slotB to chosencourse
    end if
    if chosenslot is "C" then
    set slotC to chosencourse
    end if
    if chosenslot is "D" then
    set slotD to chosencourse
    end if
    if chosenslot is "E" then
    set slotE to chosencourse
    end if
    if chosenslot is "F" then
    set slotF to chosencourse
    end if
    if chosenslot is "G" then
    set slotG to chosencourse
    end if
    if chosenslot is "H" then
    set slotH to chosencourse
    end if
    end repeat
    set TargetCalendar to "Classes2"
    --Predefined period times
    set periodTimes to {{startTime:"08:30 AM", endTime:"09:25 AM"}, {startTime:"09:30 AM", endTime:"10:25 AM"}, {startTime:"10:30 AM", endTime:"11:25 AM"}, {startTime:"11:30 AM", endTime:"12:25 PM"}, {startTime:"12:30 PM", endTime:"01:25 PM"}, {startTime:"01:30 PM", endTime:"02:25 PM"}}
    set Day1pattern to {slotA, slotB, slotC, slotD, slotE, slotF}
    set Day2pattern to {slotG, slotH, slotA, slotD, slotE, slotB}
    set Day3pattern to {slotF, slotC, slotG, slotD, slotE, slotH}
    set Day4pattern to {slotB, slotA, slotF, slotD, slotE, slotC}
    set Day5pattern to {slotH, slotG, slotB, slotD, slotE, slotA}
    set Day6pattern to {slotC, slotF, slotH, slotD, slotE, slotG}
    --Predefined period cycles
    set Day1 to {slotA & " period 1", slotB & " period 2", slotC & " period 3", slotD & " period 4", slotE & " period 5", slotF & " Period 6 "}
    set Day2 to {slotG & " period 1", slotH & " period 2", slotA & "  period 3", slotD & " period 4", slotE & " period 5", slotB & "  period 6"}
    set Day3 to {slotF & " period 1", slotC & " period 2", slotG & " period 3", slotD & " period 4", slotE & " period 5", slotH & " period 6"}
    set Day4 to {slotB & " period 1", slotA & " period 2", slotF & " period 3", slotD & " period 4", slotE & " period 5", slotC & " period 6"}
    set Day5 to {slotH & " period 1", slotG & " period 2", slotB & " period 3", slotD & " period 4", slotE & " period 5", slotA & " period 6"}
    set Day6 to {slotC & " period 1", slotF & " period 2", slotH & " period 3", slotD & " period 4", slotE & " period 5", slotG & " period 6"}
    --Makes a "list of lists" so that all the period definitions are in one place
    set periodCycle to {Day1, Day2, Day3, Day4, Day5, Day6}
    set periodcycle2 to {Day1pattern, Day2pattern, Day3pattern, Day4pattern, Day5pattern, Day6pattern}
    set isitacycleday to {"Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "Day 6"}
    --This repeat loop is using the cycle day definitions in the calendar named "School Calendar "A.Y.""
    tell application "iCal" to repeat with theEvent in (get events of calendar "School Calendar 09-10") --> only target iCal for what it knows
    set cycleday to summary of theEvent --> might as well set the info
    if cycleday is in isitacycleday then
    --Gets the current day and the cycle day number
    set cycleDate to (start date of theEvent) + 1 * hours
    set cycleNumber to last character of cycleday as integer
    --There are always 6 periods in every day
    repeat with periodNumber from 1 to 6
    --Checks to see if there's a subject for this period, if not skips to next one
    if (item periodNumber of item cycleNumber of periodcycle2) is not "" then --> skip as much as possible
    --Gets the subject from periodCycle
    set theSummary to item periodNumber of item cycleNumber of periodCycle
    set theStart to date (startTime of item periodNumber of periodTimes) of cycleDate
    set theEnd to date (endTime of item periodNumber of periodTimes) of cycleDate
    --Makes the event in the calender whose name is defined at the top of the script
    make new event at end of calendar TargetCalendar with properties {summary:theSummary, start date:theStart, end date:theEnd}
    end if
    end repeat
    end if
    end repeat
    </pre>

  • How can I set specific bits in a 16-bit integer?

    Hello everyone,
    as the title says I need to modify or rather to set a specific bit in a string which then is sent to a motor. I need to be sure that my command is correct as I am experiencing troubles with that motor and need to identify if its source.
    First of all my strings have to be in the Little Endian order. Then the structure of the string should be the following:
    Change Velocity command ‘V’xxCR 056h + one unsigned short (16-bit) integer + 0Dh (Note: Uppercase ‘V’)
    Note: The lower 15 bits (Bit 14 through 0) contain the velocity value. The high-order bit (Bit 15) is used to indicate the microstep-to-step resolution: 0 = 10, 1 = 50 uSteps/step.
    Until now, I used Flatten To String to convert 32 bit integers into bytes of the correct order. I thought I could use the Join Numbers function, but that only works for at least 8 bit numbers and there is no "1 bit number". I searched for an option to build a a string and set the bits via a Boolean Cluster, but I did not really understand how to transfer this to my problem.
    How can I build up the correct 16-bit integer (e.g. set the velocity to "10000" with a resolution of 50 µSteps/step)
    I would like to add the "V" and the CR via Concatenate Strings to the 16-bit integer, but other possibilites are also welcome.
    I have seens the examples for bit manipulation in C-code, but I wish to do this with LabView as I am not familiar with C,matlab and so on.
    Thank you very much for your help!
    Solved!
    Go to Solution.

    You really need to learn Boolean logic and how to shift bits around.
    AND is really good for masking out bits (forcing them to 0) and OR is really good for adding bit values.  Then Logical Shift is used to get the bits in the right places before doing the AND and OR.
    NOTE: Rate is an enum with 10 being a value of 0 and 50 being 1.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines
    Attachments:
    Bit Packing.png ‏15 KB

  • How can I extract an integer from a TextField?

    I wrote my code for my multiplications tables program, and it compiles fine. However, when I go to run it, it throws some exceptions because of the line where I try to extract the integer from the TextField.
    This is my code.
    //July 2, 2011
    //Multiplication Tables
    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    public class MultTables extends Applet implements ActionListener
         //TextField
         TextField answer;
         //Create Variables for Multiplication Problems
         int factorX = 1;
         int factorY = 1;
         int productZ = 1;
         int productReply;
         public void init()
              //What goes init? What needs to be added to the interface?
              //Create the TextField
              TextField answer = new TextField(10);
              //Create Labels and buttons
              Label productZLabel = new Label(factorX + " * " + factorY + " = ");
              Button checkAnswer = new Button("Check Answer");
              //Add Components and create interface
              add(productZLabel);
              add(answer);
              add(checkAnswer);
              //Add ActionListener to button
              checkAnswer.addActionListener(this);
         public void actionPerformed(ActionEvent e)
              for(int sub = 1; sub <= 9; ++sub);
              productZ = factorX * factorY;
              productReply = new Integer (answer.getText().trim()).intValue();
              if (productReply == productZ)
                   System.out.println("That is correct!");
              else
                   System.out.println("The correct answer is " + productZ);
              ++factorX;
    }Edited by: CandyAnn on Jul 2, 2011 1:25 PM

    This is the exception stack track.
    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
         at MultTables.actionPerformed(MultTables.java:44)
         at java.awt.Button.processActionEvent(Button.java:392)
         at java.awt.Button.processEvent(Button.java:360)
         at java.awt.Component.dispatchEventImpl(Component.java:4501)
         at java.awt.Component.dispatchEvent(Component.java:4331)
         at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
         at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
         at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
         at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
         at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Maybe you are looking for