Back to index

lightning-sunbird  0.9+nobinonly
oidcalc.c
Go to the documentation of this file.
00001 /* ***** BEGIN LICENSE BLOCK *****
00002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00003  *
00004  * The contents of this file are subject to the Mozilla Public License Version
00005  * 1.1 (the "License"); you may not use this file except in compliance with
00006  * the License. You may obtain a copy of the License at
00007  * http://www.mozilla.org/MPL/
00008  *
00009  * Software distributed under the License is distributed on an "AS IS" basis,
00010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00011  * for the specific language governing rights and limitations under the
00012  * License.
00013  *
00014  * The Original Code is the Netscape security libraries.
00015  *
00016  * The Initial Developer of the Original Code is
00017  * Netscape Communications Corporation.
00018  * Portions created by the Initial Developer are Copyright (C) 1994-2000
00019  * the Initial Developer. All Rights Reserved.
00020  *
00021  * Contributor(s):
00022  *
00023  * Alternatively, the contents of this file may be used under the terms of
00024  * either the GNU General Public License Version 2 or later (the "GPL"), or
00025  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00026  * in which case the provisions of the GPL or the LGPL are applicable instead
00027  * of those above. If you wish to allow use of your version of this file only
00028  * under the terms of either the GPL or the LGPL, and not to allow others to
00029  * use your version of this file under the terms of the MPL, indicate your
00030  * decision by deleting the provisions above and replace them with the notice
00031  * and other provisions required by the GPL or the LGPL. If you do not delete
00032  * the provisions above, a recipient may use your version of this file under
00033  * the terms of any one of the MPL, the GPL or the LGPL.
00034  *
00035  * ***** END LICENSE BLOCK ***** */
00036 
00037 #include <stdio.h>
00038 #include <stdlib.h>
00039 #include <string.h>
00040 
00041 int
00042 main(int argc, char **argv)
00043 {
00044     char *curstr;
00045     char *nextstr;
00046     unsigned int firstval;
00047     unsigned int secondval;
00048     unsigned int val;
00049     unsigned char buf[5];
00050     int count;
00051     
00052     if ( argc != 2 ) {
00053        fprintf(stderr, "wrong number of args\n");
00054        exit(-1);
00055     }
00056     
00057     curstr = argv[1];
00058     
00059     nextstr = strchr(curstr, '.');
00060     
00061     if ( nextstr == NULL ) {
00062        fprintf(stderr, "only one component\n");
00063        exit(-1);
00064     }
00065     
00066     *nextstr = '\0';
00067     firstval = atoi(curstr);
00068 
00069     curstr = nextstr + 1;
00070     
00071     nextstr = strchr(curstr, '.');
00072 
00073     if ( nextstr ) {
00074        *nextstr = '\0';
00075     }
00076 
00077     secondval = atoi(curstr);
00078     
00079     if ( ( firstval < 0 ) || ( firstval > 2 ) ) {
00080        fprintf(stderr, "first component out of range\n");
00081        exit(-1);
00082        
00083     }
00084     
00085     if ( ( secondval < 0 ) || ( secondval > 39 ) ) {
00086        fprintf(stderr, "second component out of range\n");
00087        exit(-1);
00088     }
00089     
00090     printf("0x%x, ", ( firstval * 40 ) + secondval );
00091     while ( nextstr ) {
00092        curstr = nextstr + 1;
00093 
00094        nextstr = strchr(curstr, '.');
00095 
00096        if ( nextstr ) {
00097            *nextstr = '\0';
00098        }
00099 
00100        memset(buf, 0, sizeof(buf));
00101        val = atoi(curstr);
00102        count = 0;
00103        while ( val ) {
00104            buf[count] = ( val & 0x7f );
00105            val = val >> 7;
00106            count++;
00107        }
00108 
00109        while ( count-- ) {
00110            if ( count ) {
00111               printf("0x%x, ", buf[count] | 0x80 );
00112            } else {
00113               printf("0x%x, ", buf[count] );
00114            }
00115        }
00116     }
00117     printf("\n");
00118     return 0;
00119 }
00120