Compare commits
No commits in common. "master" and "v0.1.0" have entirely different histories.
8
.gitignore
vendored
8
.gitignore
vendored
@ -2,12 +2,4 @@
|
|||||||
.grok/
|
.grok/
|
||||||
.idea/
|
.idea/
|
||||||
.vscode/
|
.vscode/
|
||||||
.DS_Store
|
|
||||||
build/
|
build/
|
||||||
BUILD/
|
|
||||||
dist-dos/
|
|
||||||
*.obj
|
|
||||||
*.OBJ
|
|
||||||
*.log
|
|
||||||
*.LOG
|
|
||||||
|
|
||||||
|
|||||||
89
INSTALL.BAT
89
INSTALL.BAT
@ -1,89 +0,0 @@
|
|||||||
@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
|
|
||||||
37
MAKEFILE.TC
37
MAKEFILE.TC
@ -18,68 +18,35 @@ 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
54
READ-DOS.TXT
@ -1,54 +0,0 @@
|
|||||||
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
|
|
||||||
@ -1,97 +0,0 @@
|
|||||||
#!/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}"
|
|
||||||
11
src/cnadd.c
11
src/cnadd.c
@ -12,18 +12,9 @@ int ensure_directory_exists(const char *path) {
|
|||||||
|
|
||||||
if (stat(path, &st) == 0) {
|
if (stat(path, &st) == 0) {
|
||||||
/* Path exists, check if it's a directory */
|
/* Path exists, check if it's a directory */
|
||||||
#if defined(__MSDOS__) || defined(__DOS__)
|
|
||||||
/* DOS/Turbo C: use bit test because S_ISDIR macro may be missing */
|
|
||||||
if ((st.st_mode & S_IFMT) == S_IFDIR) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
/* Unix/Linux/Windows modern: use standard POSIX macro */
|
|
||||||
if (S_ISDIR(st.st_mode)) {
|
if (S_ISDIR(st.st_mode)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
} else {
|
||||||
#endif
|
|
||||||
else {
|
|
||||||
fprintf(stderr, "Error: %s exists but is not a directory\n", path);
|
fprintf(stderr, "Error: %s exists but is not a directory\n", path);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user