Maybe "you think" I know OS/2 programming, but I don't. It would be awesome if someone explain me and document how to indentify quick and easly the 16bit software. Feel free to write articles and blog post about it, I can post it on the EDM/2.
You are asking, here is the answer: an application is very likely a 16-bit application if:
1) the documentation mentions that it is for OS/2 1.3
2) the DEF file uses the HEAPSIZE keyword. That is completely ignored by any 32-bit linker
3) the makefile is calling "link.exe". That is a 16-bit linker from Microsoft. A 16-bit linker cannot create 32-bit executables
4) the suspiciously frequent use of USHORT/SHORT/unsigned short/signed short variables. A 32-bit application typically uses 32-bit variables which show as ULONG/LONG/unsigned long/signed long/int (where "int" is ambiguous: it`s 16-bit for a 16-bit compiler and 32-bit for a 32-bit compiler ...)
5) a window function with a signature of (HWND hwnd,USHORT msg,MPARAM mp1,MPARAM mp2): a 32-bit window function uses (HWND hwnd,ULONG msg,MPARAM mp1,MPARAM mp2)
6) the use of the _loadds keyword in code: the _loadds keyword explicitely loads the data selector of the application's data segment into the DS register. That is completely superfluous for a 32-bit application as the program loader loads the flat selector into DS before it starts the application and the application will never ever change that selector, it is completely opaque to the application.
As you can see, gcc.exe even gets confused about this keyword which it does not even know, it thinks it's a syntax error ...
In fact, the only code that still requires 16-bit are drivers, where "drivers" include physical/storage device drivers (.SYS, .ADD, .FLT, .DMD, .OS2) and file system drivers (.IFS). That's because the main entry points into these drivers are still all 16-bit. If someone talks about a 32-bit device driver then in reality, it's a hybrid of 16-bit and 32-bit code where you need "thunking" (the process of jumping from a 16-bit code segment to a 32-bit code segment or the other way around) to call 32-bit code from 16-bit code.