Patch points in DBASE 2.41 Naj Najarian Kempton, PA 19519 6 March 1989 Before I came across Bruce Morgan's DBCLOCK routine to let DBASE get the date from DateStamper, in fact, before I even ran DateStamper, I used an alias to let DBASE get the date (but not the time) from ZCPR, providing that I set the date at cold boot. Before I got ZSDOS, before I used DateStamper, before I had a computer with a clock (!), I used to store the current date in the registers for use by me or any other program I could get to read them. I'd set the date on power-up with a simple REG S1 06;REG S2 03;REG S3 89 (I couldn't use register #0, because other programs take possession of it and store results there. Other programs require register #9. Luckily progammers tend to leave 1-8 alone. Please note that I also store the date in European form. You may have to change the alias for your own preference.) As Jay improved ARUNZ, I could make the system prompt me for the date a little more politely. But I had to find a way to get the numbers from the registers and into DBASE in a form it would understand. I found where DBASE stores the date ($44ff thru $4501) and could poke the date into those places from the registers, but unless I ran a command file from the commandline, DBASE would refuse to recognize that it already knew the date. I had to find a way to tell it NOT to ask for the date. So a little Z8E-ing, and I found out which bites to change (see below for the disassembly). My script simply converts the date to hexadecimal form (thus the need for hard-coding the addresses of the registers in memory), pokes those values into DBASE the current date, and tells it skip over the routine to verify the date. Looks like this: jump over the date-checking routine where dbase stores the date | dbase renamed | date from registers in hex (DANGER! Hard-coded for my system) | | | | V V V V DO=DBASE get 100 a2:dbase241.com;poke 44ff $mhecb1 $mhecb2 $mhecb3;poke 491b c3 ff 49;go $1; And it works whether or not you give it a command file to run (cf DBASE versus DBASE MAKORDER). It's faster than DBCLOCK, and I don't have to remember to insert the command into all my *.CMD files. It always runs. Sole caveat: now that we have NZ-COM, the address of the registers in memory could vary depending on the system we running at the time of the call. While I'm at it, let me document a few other patch points in DBASE 2.41, and I'll put out a query too: does anyone know of a DBASE equivalent of WSBible or Ted Silvera's oft repeated Profiles article? PATCH BYTES IN DBASE.COM version 2.41 0160 form of date: 00 for American MM/DD/YY FF for European DD/MM/YY 015D error correction 00 if you don't want chance to correct mistakes FF if you want to be prompted for correction every time you enter an error 30A0 name of alternate file when recording screen output to disk. In the form THISFILE.TXT. The dot twixt filename and extension is necessary 44FF day in hex if European, month if American 4500 month in hex if European, day if American 4501 hex for last two digits of year (e.g. 1989 would be $59) 450B logged drive (0=A, 1=B, etc.) 4502 BELL (as adjusted by using SET BELL OFF) 00 for off FF for on 4505 CARRY (as adjusted by using SET CARRY OFF) 00 for off FF for on 4508 COLON (as adjusted by using SET COLON OFF) 00 for off FF for on 4509 CONFIRM (as adjusted by using SET CONFIRM OFF) 00 for off FF for on 442F CONSOLE (as adjusted by using SET CONSOLE OFF) 00 for off FF for on 450A DEBUG (as adjusted by using SET DEBUG OFF) 00 for off FF for on 450C DELETE (as adjusted by using SET DELETED OFF) 00 for off FF for on 451F ECHO (as adjusted by using SET ECHO OFF) 00 for off FF for on 452B EJECT (as adjusted by using SET EJECT OFF) 00 for off FF for on 4521 ESCAPE (as adjusted by using SET ESCAPE OFF) 00 for off FF for on 4522 EXACT (as adjusted by using SET EXACT OFF) 00 for off FF for on 4526 INTENSITY (as adjusted by using SET INTENSITY OFF) 00 for off FF for on 4529 LINKAGE (as adjusted by using SET LINKAGE OFF) 00 for off FF for on 452E TALK (as adjusted by using SET TALK OFF) 00 for off FF for on ; documentation on disassembled DBASE II 2.41 code ; particularly the date startup operations and mods ; made to my daily use edition. ; ; 17 May 1988 ; ; 491B xor a ; get a zero ; it's this I changed to jp 49ff ; which avoids the user input altogether ; because I have ZCPR poke in the date ; before running dBase 491C ld (44ff),a ; stick it in DD ld (4500),a ; null out MM ld (4501),a ; null out YY 4925 ld a,76 ; ? call 3c0b ; ?? (is that called address right, too?) 492A ld a,(0160) ; month first flag or a 492E jz 493a ; go there on American dating system 4931 ld h,4b48 ; point to ' (DD/MM/YY) ' 4934 call 36c5 ; print it 4937 jp 4940 493A ld h,4b56 ; point to ' (MM/DD/YY) ' 493D call 36c5 ; print it 4940 call 3a35 ; get date from user 4943 call 3a0f ; check it for unacceptable values 4946 jz 49ff ; jump if date is ok 4949 call 3899 ; uh-oh, bad date  .