Win32 Source code snippets by the derelict


  • These are all small, typically command-line utilities that I've found to be useful.
  • All are compiled using the MinGW compiler package. This is an excellent, *FREE* compiler package which is based on the GNU compiler, but links to Windows libraries.   I recommend the TDM distribution, to avoid certain issues with library accessibility.

  • These code snippets are licenced under Creative Commons CC0 1.0 Universal

    The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law.

    You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.

    THE SOFTWARE
    ulocate - This was initially written for use under Linux, as a replacement for the obtuse find command.  It also works in Windows consoles.   ulocate performs a case-insensitive search of all subdirectories below the specified starting point for any filename containing the provided string.  Optionally, it can also search the PATH for the same criteria.
    Last Update: July 28, 2017
    ULOCATE.EXE, Version 1.15
    Usage: ulocate [options] name_component start_path
    This program displays all filenames containing a specified
    name component, starting at directory [start_path].
    Default start_path is current location.
    
    output-format options:
     -d  show file date
     -t  show file time
     -s  show file size (short format)
     -S  show file size (byte format)
         -xl  l = width of size field for -S (default = 6)
     -n  show file name (default)
    
    other options:
     -v  Verbose mode - show search paths
     -b  Debug mode - show other process information
     -l  follow symbolic links
     -w  match exact string (whole-word search)
     -/  Use backslash vs forward slash for path elements
    
     -p  Search for name_component in the directories in the PATH variable
         NOTE: This option replaces the normal ulocate functionality with
         alternate functionality.  In this mode, subdirectories are NOT searched!!
    
     Options can also be placed in the ULOCATE environment variable
          
    Download ulocate.cpp here
    heron - This program implements Heron's Formula, which calculates the area of an irregular triangle, given only the lengths of the three sides, but no angles.
    Last Update: February 04, 2023
    Usage: heron side1_len side2_len side3_len
    
    This program implements Heron's Formula,
    which calculates the area of an irregular triangle,
    given only the lengths of the three sides, but no angles.
    
    parameters: side1: 950.000, side2: 510.000, side3: 1200.000
    intermediate sum parameter: 1330.000
    area: 232111.266
          
    Download heron.cpp here
    printf2 - source code for printf/sprintf, with floating-point support, and no header-file dependencies.
    Last Update: October 08, 2013
    Embedded firmware environments provide a variety of challenges to the software developer.  One of these challenges is that, typically, there is no "standard output" device to display messages on, so the archetypal printf function is not an option.  However, the sprintf function is often still very useful for generating formatted strings. Unfortunately, in most embedded environments, linking stdio libraries is not an option, so a non-stdio version of sprintf is very handy - but find such a function is very challenging, especially if floating-point support is required!!

    In 2002, Georges Menie distributed a version of printf which had no stdio/stdlib dependencies, and seems to support all of the various obtuse printf syntaxes.  His code is clean, short, efficient, and builds on modern gcc with almost no warnings!  Furthermore, it is distributed under LGPL, which means it can be used freely by anyone, for any purpose!  The only option missing from his function was floating-point support, which I need in my ARM9 implementation, so I added that capability to it.  This version has no dependencies on any standard headers or libraries.

    Updates:
  • 12/02/09 - fixed floating-point bug related to padding decimal portion with zeroes.
  • 03/19/10 - pad fractional portion of floating-point number with 0s
  • 07/20/10 - Fix a round-off bug in floating-point conversions
    ( 0.99 with %.1f did not round to 1.0 )
  • 10/25/11 - Add support for %+ format (always show + on positive numbers)
  • 01/19/12 - fix handling of %f with no decimal; it was defaulting to 0 decimal places, rather than printf's 6.
  • 05/10/13 - Add stringfn() function, which takes a maximum-output-buffer length as an argument. Similar to snprintf()
  • 09/28/13 - Fix bug in printchar(), which was using a fixed length test that was not appropriate for general use
  • 10/08/13 - Add support for signed/unsigned long long (u64/i64)

    Download printf2.c here
  • serial_enum - Uses standard Windows/Win32 methods to enumerate serial devices
    Last Update: February 02, 2015
    This is the Microsoft-approved method to enumerate all serial ports on a machine, including USB-serial devices.  In addition to listing all the ports, it will report which ports can be opened (i.e., are available for use). Also added an option to display the Device Name, which can be passed to CreateFile().

    Download serial_enum.cpp here
    hex_dump - Read data and display as both binary and ASCII data.
    Last Update: August 15, 2017
    This displays a data file in standard hex-dump format, comprising address + hex_data + ascii_data, looking like this:
    007A0:  0C 89 5C 24 08 89 5C 24 04 C7 04 24 EE 30 40 00  | .?\$.?\$.?.$?0@. |
          
    Download hex_dump.cpp here
    beer_cals - Estimates calories of ale
    Last Update: September 22, 2015
    Estimates calories of ale, from both alcohol and carbohydrates, based upon volume and alcohol content. Volume may be input in milliliters or ounces.

    Download beer_cals.cpp here
    ascii - Displays an ASCII table, in decimal, hex and ASCII, for all 256 characters
    Last Update: August 10, 2017

    Download ascii.cpp here
    apptest - This inappropriately-named file demonstrates two common WinAPI tasks
    Last Update: December 03, 2013
    This console application demonstrates two common WinAPI tasks:
  • Use printf() to output UNICODE messages to the console
  • Display various Windows system/user directories

    Download apptest.cpp here
  • dms2dd - Convert between degrees/minutes/seconds and decimal degrees
    Last Update: September 30, 2010
    Usage: dms2dd input_value
    Enter dms as degrees.minutes.seconds
    Enter dd as integer_degrees.fractional_degrees
    
    If dms2dd sees two decimal points in the input,
    the value will be treated as dms, and dd will be calculated and output.
    
    If dms2dd sees one decimal points in the input,
    the value will be treated as dd, and dms will be calculated and output.
          
    Download dms2dd.cpp here
    mortgage - Performs mortgage calculations
    Last Update: December 23, 2011
    Usage: MORTGAGE principle interest number_months overpay
    In normal operation, this program computes the monthly payment,
    and payment summary table, for a loan with the input parameters.
    
    Alternate mode:
    If number_months is 0, overpay is treated as the payment amount,
    and this program will calculate and display the number of months
    required to pay off principle.
    
    Also, if overpay is greater than payment, then overpay is treated as
    total payment amount, and overpay is calculated from that.
          
    Download mortgage.cpp here
    prime32 - calculates factors of a number, or reports if input is prime
    Last Update: February 22, 2012
    PRIME32.EXE - Written by: Daniel D. Miller
    ****************************************************
    This program determines whether a number is a prime,
    then displays either the number or its factors.
          
    Download prime32.cpp here