Page 1 of 2

VC++ TO PureBasic , Thank

Posted: Mon Nov 19, 2007 3:03 pm
by Rascal

Code: Select all

/*
  Copyright (c) Microsoft Corporation
  Module Name: upcase.c
*/

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <httpfilt.h>

BOOL WINAPI __stdcall GetFilterVersion(HTTP_FILTER_VERSION *pVer)
{
  /* Specify the types and order of notification */

  pVer->dwFlags = (SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_URL_MAP |  SF_NOTIFY_SEND_RAW_DATA | SF_NOTIFY_ORDER_DEFAULT);

  pVer->dwFilterVersion = HTTP_FILTER_REVISION;

  strcpy(pVer->lpszFilterDesc, "Upper case conversion filter, Version 1.0");

  return TRUE;
}

DWORD WINAPI __stdcall HttpFilterProc(HTTP_FILTER_CONTEXT *pfc, DWORD NotificationType, VOID *pvData)
{
  CHAR *pchIn, *pPhysPath;
  DWORD  cbBuffer,  cbtemp;
  PHTTP_FILTER_URL_MAP pURLMap;
  PHTTP_FILTER_RAW_DATA  pRawData;

  switch (NotificationType)  {

    case SF_NOTIFY_URL_MAP :

      /* Check the URL for a subdirectory in the form of /UC/ or /uc/ */

      pURLMap  =  (PHTTP_FILTER_URL_MAP)pvData;

      pPhysPath  =  pURLMap->pszPhysicalPath;

      pfc->pFilterContext  =  0;

      for ( ; *pPhysPath; pPhysPath++) 
      {
        /* Ensure that there are at least 4 characters (checking for "\UC\") left in the URL before checking */

        if (strlen(pPhysPath) > 3) 
        {
          if (*pPhysPath == '\\' && (*(pPhysPath + 1) == 'u' || *(pPhysPath + 1) == 'U') && (*(pPhysPath + 2) == 'c' || *(pPhysPath + 2) == 'C') && *(pPhysPath + 3) ==  '\\')
          {
            /* Now that we've found it, remove it by collapsing everything down */

            for ( ; *(pPhysPath + 3) ; pPhysPath++)
              *pPhysPath = *(pPhysPath + 3);

            /* NULL terminate the string */

            *pPhysPath = '\0'; 

            /* And set the flag to let the SF_NOTIFY_SEND_RAW_DATA handler know to uppercase the content */

            pfc->pFilterContext  =  (VOID  *)1;

            /* Break us out of the loop - note that this will only find the first instance of /UC/ in the URL */

            break;
          }
        }
      }

      break;

    case SF_NOTIFY_SEND_RAW_DATA :

      if (pfc->pFilterContext)
      {
        pRawData = (PHTTP_FILTER_RAW_DATA)pvData;

        pchIn  =  (BYTE  *)pRawData->pvInData;

        cbBuffer = 0;

        if (pfc->pFilterContext  == (VOID *)1)
        {
          /* 
          As this is the first block, scan through it until 2 CRLFs are seen, to pass
          all of the headers.
          */

          for ( ; cbBuffer < pRawData->cbInData - 2; cbBuffer++)
          {
            if (pchIn[cbBuffer]  == '\n' && pchIn[cbBuffer + 2]  == '\n')
            {
              cbBuffer += 3;

              break;
            }

            cbBuffer++;
          }

          for (cbtemp = 0; cbtemp < (cbBuffer - 3); cbtemp++) 
          {
            if (pchIn[cbtemp] == '/' && pchIn[cbtemp + 1] == 'h' && pchIn[cbtemp + 2] == 't' && pchIn[cbtemp + 3] == 'm')
            {
              pfc->pFilterContext  =  (VOID  *)2;

              break;
            }
          }

          if (cbtemp ==  cbBuffer)
            pfc->pFilterContext  =  0; /* not an  html file */
        }

        /* Now uppercase everything */

        if (pfc->pFilterContext)
          for ( ; cbBuffer < pRawData->cbInData; cbBuffer++)
            pchIn[cbBuffer] = (pchIn[cbBuffer] >= 'a' && pchIn[cbBuffer] <= 'z') ? (pchIn[cbBuffer] - 'a' + 'A') : pchIn[cbBuffer];
      }

      break;

    default :

      break;        
  }

  return SF_STATUS_REQ_NEXT_NOTIFICATION;
}


Posted: Mon Nov 19, 2007 3:56 pm
by inc.
In such a case I would just compile the code in VC++ as lib, then you can import these functions/symbols out of the VC++ resulted obj's using PB's "Import" Command.

Posted: Mon Nov 19, 2007 5:23 pm
by djes

Code: Select all

pchIn[cbBuffer] = (pchIn[cbBuffer] >= 'a' && pchIn[cbBuffer] <= 'z') ? (pchIn[cbBuffer] - 'a' + 'A') : pchIn[cbBuffer]; 
Very nice :)

Posted: Mon Nov 19, 2007 6:05 pm
by inc.
Not very, but its C's alternative to the If/Else approach.

In PB:

Code: Select all

If PeekB(pchIn + cbBuffer) >= 'a' AND PeekB(cbBuffer) <= 'z'
  PokeB(pchIn+cbBuffer, PeekB(pchIn+cbBuffer) - 'a' + 'A')
Endif

Posted: Mon Nov 19, 2007 7:07 pm
by Rascal
I want Code PureBasic

Posted: Mon Nov 19, 2007 7:15 pm
by Fred
You don't want anything. The forum is not a code convertor. So be gentle and try to do the conversion by yourself and if you have a problem, ask.

Posted: Mon Nov 19, 2007 9:02 pm
by Fluid Byte
Rascal wrote:I want Code PureBasic
Bahahahahahaha! Image

Posted: Mon Nov 19, 2007 9:25 pm
by PB
Looks like a post by MysticBoy again. Just code with no explanation, and
expecting a conversion to be there when he wakes up. MysticBoy's MO.

Posted: Tue Nov 20, 2007 12:39 am
by SFSxOI
almost every post I saw MysticBoy make concerned converting some code or other whos purpose was very 'virus' or 'trojan' like. Is this more of the same form him?

Posted: Tue Nov 20, 2007 9:53 am
by GeoTrail
I want code Purebasic too.
I want a program that downloads all the creditcard numbers in the world and automatically puts the money into my account. It must also automatically buy me the latest flatscreen tv and it must be delivered to my door. And if I am asleep, the door must open so the delivery people can install the new tv for me so it is ready when I wake up. Also, when I get something new, it must make me coffee so I am ready to go when I wake up. Any takers?

Posted: Tue Nov 20, 2007 9:58 am
by Foz
yup, here we go:

Code: Select all

Procedure.b UltimateFunctionForLifeTheUniverseAndEverything()
  ProcedureReturn 42
EndProcedure

Posted: Tue Nov 20, 2007 9:59 am
by GeoTrail
Thanks Foz. It works great. Only thing is, my DVD player is on the AV2 channel, NOT AV1. Please fix or I'll have a tantrum :lol:

Posted: Tue Nov 20, 2007 10:06 am
by Foz
hmmm... tricky... very tricky...

Current methods cannot do such a task... therefore:

Code: Select all

Procedure FixForUltimateFunctionForLifeTheUniverseAndEverything()
  Define result = 6*9
  If result <> UltimateFunctionForLifeTheUniverseAndEverything()
    BadThingsHappen()
    Cry()
    SelfDestruct()
    Explode()
    If WindowsOS
      BSOD()
    Else
      KernalPanic()
    EndIf
  Else
    ProcedureReturn result
  EndIf
EndProcedure

Posted: Wed Nov 21, 2007 4:03 am
by citystate
inc. wrote:Not very, but its C's alternative to the If/Else approach.

In PB:

Code: Select all

If PeekB(pchIn + cbBuffer) >= 'a' AND PeekB(cbBuffer) <= 'z'
  PokeB(pchIn+cbBuffer, PeekB(pchIn+cbBuffer) - 'a' + 'A')
Endif
what about:

Code: Select all

PokeS(pchIn, UCase(PeekS(pchIn)))

Posted: Tue Jan 08, 2008 6:09 pm
by Pantcho!!
And i want PP
:lol: