Add a dos installer, and improve the makefile on dos #1

Merged
gmgauthier merged 7 commits from dos_installer into master 2026-02-04 19:31:22 +00:00
5 changed files with 282 additions and 2 deletions

7
.gitignore vendored
View File

@ -4,3 +4,10 @@
.vscode/ .vscode/
.DS_Store .DS_Store
build/ build/
BUILD/
dist-dos/
*.obj
*.OBJ
*.log
*.LOG

89
INSTALL.BAT Normal file
View File

@ -0,0 +1,89 @@
@echo off
REM ================================================================
REM INSTALL.BAT - cnotes v0.1.1 DOS Installer
REM ================================================================
REM Simple installer for Turbo C++ 3.0 built cnotes tools
REM Places everything in C:\CNOTES by default
REM ================================================================
cls
echo.
echo cnotes v0.1.1 - DOS Installation
echo =================================
echo.
echo This will install the cnotes commands (cnadd, cndump, etc.)
echo to C:\CNOTES
echo.
echo You can change the destination by editing this file.
echo.
if "%CNOTES_HOME%"=="" set TARGET=C:\CNOTES
if not "%CNOTES_HOME%"=="" set TARGET=%CNOTES_HOME%
echo Target directory: %TARGET%
echo.
if exist %TARGET%\nul goto exists
echo Creating directory %TARGET%...
md %TARGET%
if errorlevel 1 goto fail
:exists
echo Copying files...
copy cnadd.exe %TARGET%\cnadd.exe >nul
copy cndump.exe %TARGET%\cndump.exe >nul
copy cncount.exe %TARGET%\cncount.exe >nul
copy cndel.exe %TARGET%\cndel.exe >nul
copy cnfind.exe %TARGET%\cnfind.exe >nul
copy cnhelp.exe %TARGET%\cnhelp.exe >nul
if errorlevel 1 goto copyfail
echo.
echo Add C:\CNOTES to PATH permanently? (Y/N)
choice /c:yn
if errorlevel 2 goto noautoexec
echo SET PATH=%%PATH%%;C:\CNOTES >> C:\AUTOEXEC.BAT
echo Added to AUTOEXEC.BAT (will take effect after reboot)
goto endauto
:noautoexec
echo Skipped AUTOEXEC.BAT modification.
echo.
echo To use cnotes:
echo 1. Add the directory to your PATH (recommended):
echo.
echo SET PATH=%%PATH%%;%TARGET%
echo.
echo (add this line to AUTOEXEC.BAT for permanent effect)
echo.
echo 2. Or run commands directly:
echo %TARGET%\cnadd "Your first note"
echo.
echo Type CNHELP for command overview.
echo.
goto endauto
:endauto
echo.
echo Installation complete!
echo.
goto end
:copyfail
echo.
echo ERROR: Could not copy one or more files.
echo Make sure all .EXE files are in the current directory.
echo Check disk space and write permissions.
goto end
:fail
echo.
echo ERROR: Could not create directory %TARGET%
echo Check drive letter, disk space, or path.
goto end
:end
echo.
pause

View File

@ -18,35 +18,68 @@ CFLAGS = -A -w -ml -I.\include
SRCDIR = src SRCDIR = src
INCDIR = include INCDIR = include
BUILDDIR = build BUILDDIR = BUILD
INSTALL_FILE = INSTALL.BAT
README_DOS = READ-DOS.TXT
.c.obj: .c.obj:
$(CC) $(CFLAGS) -c -o$*.obj $< $(CC) $(CFLAGS) -c -o$*.obj $<
all: $(BUILDDIR) $(BUILDDIR)\cnadd.exe $(BUILDDIR)\cndump.exe $(BUILDDIR)\cncount.exe $(BUILDDIR)\cndel.exe $(BUILDDIR)\cnfind.exe $(BUILDDIR)\cnhelp.exe # ────────────────────────────────────────────────
# Main targets split to avoid long command lines
# ────────────────────────────────────────────────
all: build-exes build-support-files
build-exes: $(BUILDDIR)\cnadd.exe \
$(BUILDDIR)\cndump.exe \
$(BUILDDIR)\cncount.exe \
$(BUILDDIR)\cndel.exe \
$(BUILDDIR)\cnfind.exe \
$(BUILDDIR)\cnhelp.exe
build-support-files: $(BUILDDIR)\$(INSTALL_FILE) \
$(BUILDDIR)\$(README_DOS)
$(BUILDDIR): $(BUILDDIR):
if not exist $(BUILDDIR) mkdir $(BUILDDIR) if not exist $(BUILDDIR) mkdir $(BUILDDIR)
# Individual exe rules (unchanged)
$(BUILDDIR)\cnadd.exe: $(SRCDIR)\cnadd.c $(INCDIR)\platform.h $(INCDIR)\config.h $(BUILDDIR)\cnadd.exe: $(SRCDIR)\cnadd.c $(INCDIR)\platform.h $(INCDIR)\config.h
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
$(CC) $(CFLAGS) -e$(BUILDDIR)\cnadd.exe $(SRCDIR)\cnadd.c $(CC) $(CFLAGS) -e$(BUILDDIR)\cnadd.exe $(SRCDIR)\cnadd.c
$(BUILDDIR)\cndump.exe: $(SRCDIR)\cndump.c $(INCDIR)\platform.h $(INCDIR)\config.h $(BUILDDIR)\cndump.exe: $(SRCDIR)\cndump.c $(INCDIR)\platform.h $(INCDIR)\config.h
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
$(CC) $(CFLAGS) -e$(BUILDDIR)\cndump.exe $(SRCDIR)\cndump.c $(CC) $(CFLAGS) -e$(BUILDDIR)\cndump.exe $(SRCDIR)\cndump.c
$(BUILDDIR)\cncount.exe: $(SRCDIR)\cncount.c $(INCDIR)\platform.h $(INCDIR)\config.h $(BUILDDIR)\cncount.exe: $(SRCDIR)\cncount.c $(INCDIR)\platform.h $(INCDIR)\config.h
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
$(CC) $(CFLAGS) -e$(BUILDDIR)\cncount.exe $(SRCDIR)\cncount.c $(CC) $(CFLAGS) -e$(BUILDDIR)\cncount.exe $(SRCDIR)\cncount.c
$(BUILDDIR)\cndel.exe: $(SRCDIR)\cndel.c $(INCDIR)\platform.h $(INCDIR)\config.h $(BUILDDIR)\cndel.exe: $(SRCDIR)\cndel.c $(INCDIR)\platform.h $(INCDIR)\config.h
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
$(CC) $(CFLAGS) -e$(BUILDDIR)\cndel.exe $(SRCDIR)\cndel.c $(CC) $(CFLAGS) -e$(BUILDDIR)\cndel.exe $(SRCDIR)\cndel.c
$(BUILDDIR)\cnfind.exe: $(SRCDIR)\cnfind.c $(INCDIR)\platform.h $(INCDIR)\config.h $(BUILDDIR)\cnfind.exe: $(SRCDIR)\cnfind.c $(INCDIR)\platform.h $(INCDIR)\config.h
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
$(CC) $(CFLAGS) -e$(BUILDDIR)\cnfind.exe $(SRCDIR)\cnfind.c $(CC) $(CFLAGS) -e$(BUILDDIR)\cnfind.exe $(SRCDIR)\cnfind.c
$(BUILDDIR)\cnhelp.exe: $(SRCDIR)\cnhelp.c $(BUILDDIR)\cnhelp.exe: $(SRCDIR)\cnhelp.c
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
$(CC) $(CFLAGS) -e$(BUILDDIR)\cnhelp.exe $(SRCDIR)\cnhelp.c $(CC) $(CFLAGS) -e$(BUILDDIR)\cnhelp.exe $(SRCDIR)\cnhelp.c
$(BUILDDIR)\$(INSTALL_FILE): $(INSTALL_FILE)
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
copy $(INSTALL_FILE) $(BUILDDIR)\$(INSTALL_FILE)
$(BUILDDIR)\$(README_DOS): $(README_DOS)
if not exist $(BUILDDIR) mkdir $(BUILDDIR)
copy $(README_DOS) $(BUILDDIR)\$(README_DOS)
clean: clean:
if exist $(BUILDDIR)\*.exe del $(BUILDDIR)\*.exe if exist $(BUILDDIR)\*.exe del $(BUILDDIR)\*.exe
if exist $(BUILDDIR)\*.obj del $(BUILDDIR)\*.obj if exist $(BUILDDIR)\*.obj del $(BUILDDIR)\*.obj
if exist $(BUILDDIR)\$(INSTALL_FILE) del $(BUILDDIR)\$(INSTALL_FILE)
if exist $(BUILDDIR)\$(README_DOS) del $(BUILDDIR)\$(README_DOS)
if exist $(BUILDDIR) rmdir $(BUILDDIR) if exist $(BUILDDIR) rmdir $(BUILDDIR)

54
READ-DOS.TXT Normal file
View File

@ -0,0 +1,54 @@
cnotes v0.1.1 for DOS
=====================
A simple command-line note-taking system
Built with Turbo C++ 3.0 (large memory model)
WHAT IS THIS?
------------
cnotes lets you quickly add, view, search, count, and archive short notes
from the DOS prompt. Notes are saved in plain cnotes.csv in your notes
directory (usually current directory on DOS).
COMMANDS INCLUDED
-----------------
CNADD - Add a new note
CNDUMP - Show all notes in a table
CNCOUNT - Show statistics (total, by category, by date)
CNDEL - Archive (move) notes to cnotes.arc
CNFIND - Search notes by text/category/date
CNHELP - Show this help overview
INSTALLATION
------------
1. Unzip all files to any directory (e.g. C:\TEMP)
2. Run INSTALL.BAT from that directory
3. Follow the on-screen prompts
After installation:
- Best: add C:\CNOTES to your PATH
SET PATH=%PATH%;C:\CNOTES
(put this line in C:\AUTOEXEC.BAT to make it permanent)
- Or run commands with full path: C:\CNOTES\CNADD "Test note"
QUICK START
-----------
CNADD "Remember to call Bob"
CNADD -c Work "Meeting 3pm tomorrow"
CNDUMP - view all notes
CNHELP - full command help
CNHELP cnadd - help for one command
NOTES LOCATION
--------------
By default: current directory (cnotes.csv and cnotes.arc)
Override with environment variable:
SET CNOTES_PATH=C:\MYNOTES
Have fun logging notes the retro way!
Questions or bugs? See the project at:
https://repos.gmgauthier.com/gmgauthier/cnotes
Greg Gauthier - February 2026

97
make-dos-zip.sh Executable file
View File

@ -0,0 +1,97 @@
#!/usr/bin/env bash
#
# make-dos-zip.sh
# ================
# Packages already-built DOS cnotes binaries into a release zip.
#
# Assumes:
# - You have already run make -f makefile.tc in DOSBox
# - All .exe files + INSTALL.BAT are in the 'build/' directory
#
# Usage:
# ./make-dos-zip.sh [version]
#
# Examples:
# ./make-dos-zip.sh 0.1.1 → creates cnotes-v0.1.1-dos.zip
# ./make-dos-zip.sh → uses date as version (YYYYMMDD)
#
set -euo pipefail
VERSION="${1:-$(date +%Y%m%d)}"
ZIP_NAME="cnotes-v${VERSION}-dos.zip"
BUILD_DIR="BUILD"
DIST_DIR="dist-dos"
# Colors
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${GREEN}Packaging DOS release: ${ZIP_NAME}${NC}"
# 1. Check required files exist in build/
REQUIRED_FILES=(
"CNADD.EXE"
"CNDUMP.EXE"
"CNCOUNT.EXE"
"CNDEL.EXE"
"CNFIND.EXE"
"CNHELP.EXE"
"INSTALL.BAT"
"READ-DOS.TXT"
)
missing=0
for file in "${REQUIRED_FILES[@]}"; do
if [ ! -f "${BUILD_DIR}/${file}" ]; then
echo -e "${RED}Missing required file: ${BUILD_DIR}/${file}${NC}"
missing=1
fi
done
if [ $missing -eq 1 ]; then
echo -e "${RED}Aborting: one or more required files are missing.${NC}"
echo "Make sure you have built with 'make -f makefile.tc' in DOSBox"
echo "and that INSTALL.BAT is present."
exit 1
fi
# 2. Prepare clean staging directory
rm -rf "${DIST_DIR}"
mkdir -p "${DIST_DIR}"
# 3. Copy files to staging
echo "Staging files..."
cp "${BUILD_DIR}"/*.EXE "${DIST_DIR}"/
cp "${BUILD_DIR}/INSTALL.BAT" "${DIST_DIR}"/
cp "$$ {BUILD_DIR}/READ-DOS.TXT" " $${DIST_DIR}"/ 2>/dev/null || {
echo -e "$$ {RED}Warning: READ-DOS.TXT not found in build/ (optional but recommended) $${NC}"
}
# Optional extras (uncomment/add if you have them)
# cp README-DOS.TXT "${DIST_DIR}"/ 2>/dev/null || true
# cp LICENSE "${DIST_DIR}"/ 2>/dev/null || true
# 4. Create zip
echo "Creating zip archive..."
cd "${DIST_DIR}"
zip -r -9 "../${ZIP_NAME}" . >/dev/null
cd ..
# 5. Optional SHA256
if command -v sha256sum >/dev/null 2>&1; then
sha256sum "${ZIP_NAME}" > "${ZIP_NAME}.sha256"
echo "Checksum: ${ZIP_NAME}.sha256"
elif command -v shasum >/dev/null 2>&1; then
shasum -a 256 "${ZIP_NAME}" > "${ZIP_NAME}.sha256"
echo "Checksum: ${ZIP_NAME}.sha256"
fi
# 6. Show result
echo -e "${GREEN}Done! Zip created:${NC}"
ls -lh "${ZIP_NAME}"*
echo ""
echo "Next steps:"
echo " 1. Upload ${ZIP_NAME} (and .sha256 if created) to Gitea release"
echo " 2. Optionally delete staging dir: rm -rf ${DIST_DIR}"