/* * Copyright (c) 1996 Microsoft Corporation. All rights reserved. * File: initcaps.cpp * * DLL Custom WebBot Example */ #include "stdio.h" #include "string.h" #include "ctype.h" #include "stdlib.h" #include "../webbot.h" ////////////////////////////////// // private string utilities static void UpperCase(char *str) { char *p = NULL; for(p=str;p && *p;p++) *p = toupper(*p); } static char *StringCopy(const char *str) { char *p = NULL; if(!str) return NULL; p = (char *)malloc(strlen(str)+1); if(!p) return NULL; strcpy(p,str); return p; } ////////////////////////////// // BOT: SmallCaps BeginWebBotExpand(SmallCaps,ret,bot,cgi,form) { const char *pszText = NULL; const char *pszSize = NULL; int bBigger = 0; int nSize = 0; char *pszUCase = NULL; int slen = 0; char *p = NULL; char fontbeg[32]; char fontend[32]; char chout[2]; /* fetch parameters and verify them; else return error HTML */ pszText = bot.GetValue("S-Text"); pszSize = bot.GetValue("I-Font-Size"); if(!pszText || !pszText[0] || !pszSize || !pszSize[0]) goto SmallCapsExpandError; /* convert any non-string parameters and do bounds checking */ nSize = atoi(pszSize); if(nSize < 1) nSize = 1; if(nSize > 7) nSize = 7; /* copy source string and make it all upper-case */ pszUCase = StringCopy(pszText); if(!pszUCase) goto SmallCapsExpandError; UpperCase(pszUCase); /* copy each word in source to output with initial font size as requested */ chout[0] = chout[1] = 0; sprintf(fontbeg,"",nSize); sprintf(fontend,""); p = pszUCase; while(p && *p) { /* find first non-alnum in remainder of string (ingoring apostrophes) */ int idx = strspn(p,"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'"); if(idx > 0) { int chTmp = p[idx]; p[idx] = 0; chout[0] = *p; ret.Append(fontbeg); ret.Append(chout); ret.Append(fontend); ret.Append(p+1); p[idx] = chTmp; p += idx; } else { /* not found or at beginning */ chout[0] = *p; if(isalnum(*p) || *p == '\'') { /* no more non-alnum in string; use remainder */ ret.Append(fontbeg); ret.Append(chout); ret.Append(fontend); ret.Append(p+1); p += strlen(p); } else { /* just stepping over non-alnum */ ret.Append(chout); p++; } } /* end else */ } /* end while */ /* free up any memory we allocated */ free((char *)pszUCase); return; SmallCapsExpandError: ret.Append("[SmallCaps]"); return; } EndWebBotExpand