/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ /* static char rot13_Id[]="@(#) StarCalc Rot13 AddIn (c) 1998-2000 Sun Microsystems, Inc."; */ #include #include #include #include #include /** * the current language the Addin is using */ static USHORT _nLanguage=LANGUAGE_ENGLISH; /** * StarCalc calls this function to set a new current Language for the Addin * * @param *nLanguage * */ void CALLTYPE SetLanguage( USHORT* nLanguage ) { _nLanguage = GetNeutralLanguage( *nLanguage ); } /** * Tell StarCalc how many new functions this Addin provides. * * @param *nCount - returns the number of functions which are exported to StarCalc * */ void CALLTYPE GetFunctionCount( USHORT *nCount ) { *nCount = 1; } /** * Provides neccessary data for each new function to StarCalc * * @param *nNo Input: Function number between 0 and nCount - 1 * @param *pFuncName Output: Functionname which should be called in the AddIn-DLL * @param *nParamCount Output: Number of Parameter. Must be greater than 0, because there's always a return-Value. Maximum is 16. * @param *peType Output: Pointer to arrray with exactly 16 variables of typ Paramtype. nParamCount Entries are set to the type of the corresponding Parameters. * @param *pInternalName Output: Functionname as seen by the Spreadsheet user * * @see #GetFunctionCount, #GetParameterDescription * */ void CALLTYPE GetFunctionData( USHORT * nNo, char * pFuncName, USHORT * nParamCount, ParamType * peType, char * pInternalName ) { switch( *nNo ) { case 0: /* the function name is the same in all languages */ SO_StringCopy( pInternalName, "Rot13" ); SO_StringCopy( pFuncName, "Rot13" ); peType[0] = PTR_STRING; peType[1] = PTR_STRING; *nParamCount=2; break; default: *nParamCount = 0; *pFuncName = 0; *pInternalName = 0; break; } } /** * Provides descriptions for each new function to StarCalc * which are shown is the autopilot * * @param *nNo Input Parameter, Function number between 0 and nCount - 1 * @param *nParam Parameter Number * @param *pName Output: Name of the parameter * @param *pDesc Output: Description of the parameter * * @see #GetFunctionCount, #GetParameterDescription */ void CALLTYPE GetParameterDescription( USHORT* nNo, USHORT* nParam, char* pName, char* pDesc ) { *pName = 0; *pDesc = 0; switch ( *nNo ) { case 0: switch ( *nParam ) { case 0: SO_StringCopy(pDesc,getText(ROT13_DESC)); break; case 1: SO_StringCopy(pName,getText(ROT13_PAR1_NAME)); SO_StringCopy(pDesc,getText(ROT13_PAR1_DESC)); } } } /** * ROT13 Algorithm, each alphabetical character of the text is rotated by 13 in the alphabet * * @param *ret * @param *src * * ER: well, my personal favorite algorithm is * main(_){while(_=~getchar())putchar(~_-1/(~(_|32)/13*2-11)*13);} * but for clarification we do it somehow different here ;-) */ void CALLTYPE Rot13(char *ret, char *src) { if ( ! ret ) return; if ( ! src ) *ret='\0'; for(;src && *src; src++ , ret++) { *ret=*src; if (*ret >= 'A' && *ret <= 'Z') { if ( (*ret +=13) > 'Z' ) *ret-=26; } else if (*ret >= 'a' && *ret < 'n') { *ret +=13; } else if (*ret >= 'n' && *ret <= 'z') { *ret -=13; } } *ret=*src; }