Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 131
» Latest member: Jeffrey Mahoney
» Forum threads: 108
» Forum posts: 871

Full Statistics

Latest Threads
Notepad++ hacked
Forum: This and that - friendly chat
Last Post: Stanley Durham
05.02.2026, 18:03
» Replies: 4
» Views: 536
PB Hex Viewer
Forum: Source Code Library
Last Post: Albert Richheimer
02.02.2026, 16:38
» Replies: 7
» Views: 950
Add "Board Statistics"
Forum: Suggestions and discussion about PUMP
Last Post: Eros Olmi
29.01.2026, 11:18
» Replies: 3
» Views: 524
How to run PB progs in Li...
Forum: PowerBASIC for Windows
Last Post: Mannish Bhandari
28.01.2026, 16:23
» Replies: 13
» Views: 5,053
Making text unreadable, 1...
Forum: PowerBASIC for Windows
Last Post: Robert Alvarez
26.01.2026, 20:11
» Replies: 8
» Views: 1,163
PB DOS
Forum: This and that - friendly chat
Last Post: Albert Richheimer
24.01.2026, 11:42
» Replies: 3
» Views: 711
Using #RESOURCE RCDATA to...
Forum: Source Code Library
Last Post: George Bleck
14.01.2026, 16:14
» Replies: 0
» Views: 263
Happy holidays to all of ...
Forum: This and that - friendly chat
Last Post: Dale Yarker
01.01.2026, 05:41
» Replies: 5
» Views: 1,289
Where is CAfxMp3.inc
Forum: PowerBASIC for Windows
Last Post: Owen_English
30.12.2025, 06:00
» Replies: 3
» Views: 921
Microsoft to Replace All ...
Forum: This and that - friendly chat
Last Post: Kurt Kuzba
23.12.2025, 12:24
» Replies: 1
» Views: 616

 
  Notepad++ hacked
Posted by: Stanley Durham - 03.02.2026, 02:36 - Forum: This and that - friendly chat - Replies (4)

Chinese Hackers Remote Executed Code Via Notepad++ for 6 Months
_______________________________________________________

Please do not post any Youtube links (and others) without comment.

Thank you
Albert (PUMP admin)

Print this item

  Add "Board Statistics"
Posted by: Eros Olmi - 28.01.2026, 18:28 - Forum: Suggestions and discussion about PUMP - Replies (3)

If possible, it would be nice to have "Board Statistics" box in the bottom of the forum like in official MyBB forum

Print this item

  PB Hex Viewer
Posted by: Eros Olmi - 27.01.2026, 22:07 - Forum: Source Code Library - Replies (7)

Ciao,

I've attached a project I was working some time ago where I experimented AI (OpenAI ChatGPT and Google Gemini together) to code with some help ... well ... a lot of help.

It's a classic visual HEX viewer control able to show some memory buffer.
Clicking on the left hidden panel there are some options to change viewer

Attached 100% 10.4 PowerBasic source code and executable.
Do whatever with the sources.

Hope it can help someone.

Ciao
Eros



Attached Files Thumbnail(s)
       

.bas   HexControl_v0.4.1.bas (Size: 102 KB / Downloads: 21)
.zip   HexControl_v0.4.1.EXE.zip (Size: 28.48 KB / Downloads: 8)
Print this item

  Making text unreadable, 1 sample code works, 2 do not work
Posted by: Robert Alvarez - 22.01.2026, 18:32 - Forum: PowerBASIC for Windows - Replies (8)

Found three code samples in the internet to make text unreadable.
First one can read text and encrypt it and decrypt .
The second and third seems to encrypt it but decrypt does not work.

First sample code:

Code:
#COMPILE EXE
#INCLUDE "WIN32API.INC"
GLOBAL hDlg AS LONG

CALLBACK FUNCTION ENDPROG()
DIALOG END CBHNDL, 1
END FUNCTION

FUNCTION PBMAIN () AS LONG
$REGISTER NONE
LOCAL result, i AS LONG

'1. Basic Character Shift (Caesar Cipher Style)
OPEN "secret 1a.dat" FOR OUTPUT AS #1
text$ = "This is my secret message."
FOR i = 1 TO LEN(text$)
PRINT #1, CHR$(ASC(MID$(text$, i, 1)) + 5);
NEXT
CLOSE #1

OPEN "secret 1a.dat" FOR INPUT AS #1: LINE INPUT #1, text$
? text$ 'encryt
FOR i = 1 TO LEN(text$)
text1$=text1$+CHR$(ASC(MID$(text$, i, 1)) - 5)
NEXT
? text1$  'decreypt

DIALOG NEW 0, "TEST 1", ,, 200, 150, %WS_MINIMIZEBOX+%WS_SYSMENU, 0 TO hDlg
CONTROL ADD LABEL, hDlg, 100, "LABEL 1",80, 40, 60, 14,
CONTROL ADD BUTTON,hDlg, 202, "&Exit Program",100, 100,55, 14, CALL ENDPROG
CONTROL SET FOCUS  hDlg, 202
DIALOG SHOW MODAL  hDlg TO result
END FUNCTION

Second sample code:

Code:
#COMPILE EXE
#INCLUDE "WIN32API.INC"
GLOBAL hDlg AS LONG

CALLBACK FUNCTION ENDPROG()
DIALOG END CBHNDL, 1
END FUNCTION

FUNCTION PBMAIN () AS LONG
$REGISTER NONE
LOCAL result, i, key AS LONG

'2. XOR Encoding
OPEN "secret2a.dat" FOR OUTPUT AS #1
text$ = "This is my secret message."
key = 123  ' Simple numeric key

FOR i = 1 TO LEN(text$)
    PRINT #1, CHR$(ASC(MID$(text$, i, 1)) XOR key);
NEXT
CLOSE #1
'XOR is reversible — use the same key to decode.


OPEN "secret2a.dat" FOR INPUT AS #1
GET #1,1, ch$: ? ch$$
decoded$ = ""
key = 123
WHILE NOT EOF(1)
    INPUT #1, ch$  ' : ? ch$
    decoded$ = decoded$ + CHR$(ASC(ch$) XOR key)  ': ? decoded$
WEND
CLOSE #1
? decoded$

DIALOG NEW 0, "TEST 1", ,, 200, 150, %WS_MINIMIZEBOX+%WS_SYSMENU, 0 TO hDlg
CONTROL ADD LABEL, hDlg, 100, "LABEL 1",80, 40, 60, 14,
CONTROL ADD BUTTON,hDlg, 202, "&Exit Program",100, 100,55, 14, CALL ENDPROG
CONTROL SET FOCUS  hDlg, 202
DIALOG SHOW MODAL  hDlg TO result
END FUNCTION

Third sample code:
Code:
#COMPILE EXE
#INCLUDE "WIN32API.INC"
GLOBAL hDlg AS LONG

CALLBACK FUNCTION ENDPROG()
DIALOG END CBHNDL, 1
END FUNCTION

FUNCTION PBMAIN () AS LONG
$REGISTER NONE
LOCAL result, i, mask AS LONG

'3. Binary Write with Random Mask
RANDOMIZE TIMER
OPEN "secret 3.dat" FOR BINARY AS #1
text$ = "This is my secret message."
FOR i = 1 TO LEN(text$)
    mask = RND(255)
    PUT$ #1, CHR$(ASC(MID$(text$, i, 1)) XOR mask)
NEXT
CLOSE #1


OPEN "secret 3.dat" FOR BINARY AS #1
decoded$ = ""
DO UNTIL EOF(1)
    GET$ #1, 1, mask1$
    GET$ #1, 1, data1$
    decoded$ = decoded$ + CHR$(ASC(data1$) XOR ASC(mask1$))
LOOP
CLOSE #1
? decoded$

DIALOG NEW 0, "TEST 1", ,, 200, 150, %WS_MINIMIZEBOX+%WS_SYSMENU, 0 TO hDlg
CONTROL ADD LABEL, hDlg, 100, "LABEL 1",80, 40, 60, 14,
CONTROL ADD BUTTON,hDlg, 202, "&Exit Program",100, 100,55, 14, CALL ENDPROG
CONTROL SET FOCUS  hDlg, 202
DIALOG SHOW MODAL  hDlg TO result
END FUNCTION
 
How to fix?

Print this item

  PB DOS
Posted by: Brice Manuel - 19.01.2026, 08:48 - Forum: This and that - friendly chat - Replies (3)

I just recently ordered a new 386SX mini laptop system. Running DOS 6.22 and Windows 3.11. Lovely little beast. 40Mhz, 8MB RAM, and an IPS screen. It is capable of running Windows 95, but I do not want to at this time.

I am going to be working on some DOS & 16 bit Windows software.

PB DOS is still getting use from me.

Print this item

  Using #RESOURCE RCDATA to implement the missing #RESOURCE AVI
Posted by: George Bleck - 14.01.2026, 16:14 - Forum: Source Code Library - No Replies

I posted this on the new community run PB Users Forum: https://pbusers.org/forum/viewtopic.php?t=239
Sharing here as well as I think it is useful for those that might not have joined there yet.

============================


It always bothered me that PowerBASIC never implemented a #RESOURCE AVI metastatement. If you want to include an AVI for the animation control via #RESOURCE metastatements it's impossible as you cannot animate directly from RCDATA (or other resource sections available via the #RESOURCE metastatement). It can only be done from an AVI resource section (or from a supplied file path). Yes, you can compile the AVI into an AVI resource section using an RC file compiler and add it as a PBR (which still works but was technically deprecated) or RES, but "you cannot add any other #RESOURCE metastatements in your program" as per the PowerBASIC documentation.

What this code does is allow you to embed AVIs into your code using #RESOURCE RCDATA. After you compile your code to DLL or EXE you run this patcher by supplying the DLL/EXE file path on the command line (or via drag-and-drop). It proceeds to enumerate the AVIs and moves them to an AVI resource section using UpdateResource.

Be aware that you will need to repatch the DLL/EXE each time you re-compile your code.
As such, this could be included in a tool chain to always run after a compile.

Processing is written to a log (AVIRscPtch_Log.csv) in the directory the targeted module is located. To facilitate running in a toolchain it runs silently if no errors occur, but uses MESSAGEBOX to report any errors (in addition to the log).

Code:
' Compiles under PBWIN or PBCC without changes
#COMPILE EXE "AVIRscPtch.exe"
#DIM ALL

'----------------------------------------------------------------------------(')

%UNICODE = 1

'----------------------------------------------------------------------------(')

$DDQ = $DQ + $DQ

'----------------------------------------------------------------------------(')

#INCLUDE "Win32API.inc" ' Roca Headers III_107

'----------------------------------------------------------------------------(')

GLOBAL v_ghMod AS DWORD
GLOBAL v_ghUpd AS DWORD
GLOBAL v_gsExe AS STRING

'----------------------------------------------------------------------------(')

FUNCTION fn_sCSV(BYVAL v_sText AS WSTRING) AS STRING
  IF INSTR(v_sText, ANY CHR$(34, 44)) THEN
      REPLACE $DQ WITH $DDQ IN v_sText
      FUNCTION = $DQ + v_sText + $DQ
  ELSE
      FUNCTION = v_sText
  END IF
END FUNCTION

'----------------------------------------------------------------------------(')

FUNCTION fn_sTimestamp() AS WSTRING
  LOCAL v_uST AS SYSTEMTIME
  GETSYSTEMTIME v_uST
  FUNCTION = _
      FORMAT$(v_uST.wYear, "0000") + "-" + _
      FORMAT$(v_uST.wMonth, "00") + "-" + _
      FORMAT$(v_uST.wDay, "00") + " " + _
      FORMAT$(v_uST.wHour, "00") + ":" + _
      FORMAT$(v_uST.wMinute, "00") + ":" + _
      FORMAT$(v_uST.wSecond, "00") + "Z"
END FUNCTION

'----------------------------------------------------------------------------(')

FUNCTION fn_sGetErrorText(BYVAL v_lError AS LONG) AS WSTRING
  LOCAL v_lReturn AS LONG
  LOCAL v_szBuffer AS WSTRINGZ * 256
  IF v_lError = %ERROR_SUCCESS THEN EXIT FUNCTION
  v_lReturn = FORMATMESSAGE(%FORMAT_MESSAGE_FROM_SYSTEM, BYVAL 0&, v_lError, BYVAL 0&, v_szBuffer, SIZEOF(v_szBuffer), BYVAL 0&)
  IF v_lReturn > 0 THEN FUNCTION = RTRIM$(LEFT$(v_szBuffer, v_lReturn), ANY $CRLF)
END FUNCTION

'----------------------------------------------------------------------------(')

SUB sub_Log(BYVAL v_bError AS LONG, v_sText AS WSTRING)
  LOCAL v_hFile AS LONG
  LOCAL v_lError AS LONG
  LOCAL v_sLogPath AS WSTRING
  LOCAL v_sTimestamp AS WSTRING
  v_sTimestamp = fn_sTimestamp
  v_sLogPath = PATHNAME$(PATH, v_gsExe) + "\AVIRscPtch_Log.csv"
  TRY
      OPEN v_sLogPath FOR APPEND AS # v_hFile
      PRINT # v_hFile, v_sTimestamp + "," + fn_sCSV(v_sText)
      CLOSE # v_hFile
      IF v_bError THEN MESSAGEBOX %HWND_DESKTOP, "Error during patching:" + $LF + v_sText, EXE.NAMEX$, %MB_ICONEXCLAMATION
  CATCH
      v_lError = ERR
      MESSAGEBOX %HWND_DESKTOP, _
        "Could not record message to the log file." + $LF + $LF + _
        "Timestamp:" + $LF + v_sTimestamp + $LF + $LF + _
        "Log Path:" + $LF + v_sLogPath + $LF + $LF + _
        "Error:" + ERROR$(v_lError) + $LF + $LF + _
        "Msg:" + $LF + v_sText, _
        EXE.NAMEX$, %MB_ICONEXCLAMATION
      IF v_hFile THEN CLOSE # v_hFile
  END TRY
END SUB

'----------------------------------------------------------------------------(')

FUNCTION fn_bIsAVI(BYVAL v_pData AS DWORD, BYVAL v_cbData AS DWORD) AS LONG
  IF v_pData = 0 THEN sub_Log 0, "pdata = 0" : EXIT FUNCTION
  IF v_cbData < 12 THEN sub_Log 0, "cbData < 12" : EXIT FUNCTION
  IF PEEK$(v_pData, 4) <> "RIFF" THEN sub_Log 0, "Not a RIFF" : EXIT FUNCTION
  IF PEEK$(v_pData + 8, 4) <> "AVI " THEN sub_Log 0, "Not an AVI" : EXIT FUNCTION
  FUNCTION = %TRUE
END FUNCTION

'----------------------------------------------------------------------------(')

FUNCTION fn_lEnumLangProc( _
      BYVAL v_hModule AS DWORD, _
      BYVAL v_lpType AS DWORD, _
      BYVAL v_lpName AS DWORD, _
      BYVAL v_wLang AS WORD, _
      BYVAL v_lParam AS LONG) AS LONG
  LOCAL v_bOK AS LONG
  LOCAL v_cbData AS DWORD
  LOCAL v_hData AS DWORD
  LOCAL v_hRes AS DWORD
  LOCAL v_lError AS LONG
  LOCAL v_pData AS DWORD
  LOCAL v_wzTypeAVI AS WSTRINGZ * 4
  ' FindResourceEx
  v_hRes = FINDRESOURCEEX(v_hModule, BYVAL %RT_RCDATA, BYVAL v_lpName, v_wLang)
  v_lError = GETLASTERROR
  IF v_hRes = 0 THEN
      sub_Log 0, "Error calling FindResourceEx: " + fn_sGetErrorText(v_lError)
      FUNCTION = %TRUE
      EXIT FUNCTION
  END IF
  v_cbData = SIZEOFRESOURCE(v_hModule, v_hRes)
  v_hData = LOADRESOURCE(v_hModule, v_hRes)
  v_pData = LOCKRESOURCE(v_hData)
  IF fn_bIsAVI(v_pData, v_cbData) THEN
      v_wzTypeAVI = "AVI"
      ' UpdateResource - Copy resource to new resource type
      v_bOK = UPDATERESOURCE(v_ghUpd, BYVAL VARPTR(v_wzTypeAVI), BYVAL v_lpName, v_wLang, BYVAL v_pData, v_cbData)
      v_lError = GETLASTERROR
      IF v_bOK THEN
        ' UpdateResource - Remove resource from old resource type
        v_bOK = UPDATERESOURCE(v_ghUpd, BYVAL %RT_RCDATA, BYVAL v_lpName, v_wLang, BYVAL %NULL, 0)
        v_lError = GETLASTERROR
        IF v_bOK = %FALSE THEN sub_Log 1, "Error calling UpdateResource (delete old): " + fn_sGetErrorText(v_lError)
      ELSE
        sub_Log 1, "Error calling UpdateResource (copy to new): " + fn_sGetErrorText(v_lError)
      END IF
  END IF
  FUNCTION = %TRUE
END FUNCTION

'----------------------------------------------------------------------------(')

FUNCTION fn_lEnumNameProc( _
      BYVAL v_hModule AS DWORD, _
      BYVAL v_lpType AS DWORD, _
      BYVAL v_lpName AS DWORD, _
      BYVAL v_lParam AS LONG) AS LONG
  ENUMRESOURCELANGUAGES(v_hModule, BYVAL %RT_RCDATA, BYVAL v_lpName, CODEPTR(fn_lEnumLangProc), 0)
  FUNCTION = %TRUE
END FUNCTION

'----------------------------------------------------------------------------(')

FUNCTION PBMAIN() AS LONG
  LOCAL v_bOK AS LONG
  LOCAL v_lError AS LONG
  LOCAL v_sCmd AS STRING
  LOCAL v_wzExe AS WSTRINGZ * %MAX_PATH
  v_sCmd = TRIM$(COMMAND$, ANY CHR$(32, 34))
  IF LEN(v_sCmd) THEN
      v_gsExe = v_sCmd
  ELSE
      sub_Log 1, "Please supply a module (DLL/EXE) path to patch"
      EXIT FUNCTION
  END IF
  IF ISFILE(v_gsExe) = %FALSE THEN
      sub_Log 1, "Module (DLL/EXE) path does not exist"
      EXIT FUNCTION
  END IF
  v_wzExe = v_gsExe
  sub_Log 0, "Attemping to patch module: " + $DQ + v_gsExe + $DQ
  v_ghMod = LOADLIBRARYEX(BYVAL VARPTR(v_wzExe), BYVAL %NULL, %LOAD_LIBRARY_AS_DATAFILE)
  v_lError = GETLASTERROR
  IF v_ghMod = 0 THEN
      sub_Log 1, "Error loading module: " + fn_sGetErrorText(v_lError)
      EXIT FUNCTION
  END IF
  ' BeginUpdateResource
  v_ghUpd = BEGINUPDATERESOURCE(BYVAL VARPTR(v_wzExe), %FALSE)
  v_lError = GETLASTERROR
  IF v_ghUpd = 0 THEN
      sub_Log 1, "Error calling BeginUpdateResource: " + fn_sGetErrorText(v_lError)
      FREELIBRARY v_ghMod
      EXIT FUNCTION
  END IF
  ' EnumResourceNames
  v_bOK = ENUMRESOURCENAMES(v_ghMod, BYVAL %RT_RCDATA, CODEPTR(fn_lEnumNameProc), 0)
  v_lError = GETLASTERROR
  IF v_bOK = %FALSE THEN
      sub_Log 1, "Error calling EnumResourceNames: " + fn_sGetErrorText(v_lError)
      FREELIBRARY v_ghMod
      EXIT FUNCTION
  END IF
  ' Release the module
  FREELIBRARY v_ghMod
  ' EndUpdateResource
  v_bOK = ENDUPDATERESOURCE(v_ghUpd, %FALSE)
  v_lError = GETLASTERROR
  IF v_bOK = %FALSE THEN
      sub_Log 1, "Error calling EndUpdateResource: " + fn_sGetErrorText(v_lError)
      EXIT FUNCTION
  END IF
  sub_Log 0, "Module patched"
END FUNCTION

Print this item

  Where is CAfxMp3.inc
Posted by: Owen_English - 27.12.2025, 01:48 - Forum: PowerBASIC for Windows - Replies (3)

Not quite sure where I got this chunk of code from but it includes CAfxMp3.inc which I don't have.
Have searched everywhere - Google mentions it but leads nowhere.
Anyone heard of or got a copy of this one please?

Print this item

  Happy holidays to all of us...
Posted by: Mimmo Labate - 24.12.2025, 14:00 - Forum: This and that - friendly chat - Replies (5)

I would like to wish Albert Richheimer,  who created this meeting place and who hosts us with his generosity, a Merry Christmas, as well as everyone here in various capacities. I trust that the new year will bring health accompanied by serenity. Warm regards and best wishes from the bottom of my heart.
Mimmo

Print this item

  Microsoft to Replace All C/C++ Code With Rust by 2030
Posted by: Stanley Durham - 23.12.2025, 08:24 - Forum: This and that - friendly chat - Replies (1)

“My goal is to eliminate every line of C and C++ from Microsoft by 2030,” Microsoft Distinguished Engineer Galen Hunt writes in a post on LinkedIn. “Our strategy is to combine AI and Algorithms to rewrite Microsoft’s largest codebases. Our North Star is ‘1 engineer, 1 month, 1 million lines of code.’ To accomplish this previously unimaginable task, we’ve built a powerful code processing infrastructure. Our algorithmic infrastructure creates a scalable graph over source code at scale. Our AI processing infrastructure then enables us to apply AI agents, guided by algorithms, to make code modifications at scale. The core of this infrastructure is already operating at scale on problems such as code understanding.”

https://www.thurrott.com/dev/330980/micr...st-by-2030

Print this item

  "Unread-Posts Sign" re-appears
Posted by: Albert Richheimer - 16.12.2025, 07:37 - Forum: Suggestions and discussion about PUMP - Replies (7)

Hi @all

Dale Yarker has pointed out that from time to time the "unread posts sign", a black disc, re-appears, although there are no new postings in the affected subforums.

Has anyone else noticed this strange phenomenon?

Cheers,
Albert

Print this item