; TRACKS DAILY ACTIVITY ;************************************************************************** ; TRACK.M68 - TRACKs Daily activities entered by user ; ; by Dave Heyliger - AMUS Staff ; ; [1.1] 01/88 JDL PHI/AM - MODIFIED JOBIDX CALLS TO DETECT MULTI ; AND "TRACK" UNDER THE OWNING JOB'S NAME, CONSISTANTLY. ; ; NOTE: you must ".LNKLIT TRACK" after Phase 2 of the assembly ; ; Purpose: to allow a user to enter in a "command" to log daily activity. ; ; Example: ".TRACK worked on the TRACK program" (from the dot, of course) ; would record the "worked on the TRACK program" in a file called ; {JOBNAM}.TRK located in the account where a JOB called TRACK is ; currently logged (see directions below). The format of a sample ; .TRK file might look like this: ; ; Date Time Activity ; ==================================================================== ; 07-15-87 1:00 PM STARTED ON THE TRACK PROGRAM ; 07-15-87 2:15 PM TOOK CALL ABOUT JOBNAM.SBR ; 07-15-87 2:22 PM CONTINUED ON TRACK PROGRAM ; etc, etc, etc.... ; ; Directions: ; ; 1) Setup a PSUEDO,NULL JOB on your system: ; a) increment the JOBS line in the test .INI ; b) add JOBALC TRACK ; must be this name ; c) add TRMDEF RECORD,PSEUDO,NULL,500,500,100 ; d) later in the file, add ; ATTACH RECORD,TRACK ; KILL TRACK ; FORCE TRACK ; MEMORY 10K ; LOG (wherever you want your TRACK files to be) ; TRACK/I ; ; WAIT TRACK ; ; 2) Now JOB TRACK is up and ready for your every command. They are: ; c) TRACK/D - D isplays your current track file ; d) TRACK/I - I nitializes the TRACK JOB on bootup (above) ; e) TRACK activity... will record the activity entered ; ; 3) Each night (or through your backup file), you may then PRINT ; your *.TRK file(s), RENAME them, or whatever. You should note, ; however, if you leave your *.TRK files alone every day they ; can get extremely large. Try to avoid this (there is no bad ; side effects from this except more disk reads/writes). ;***************************************************************************** AUTOEXTERN SEARCH SYS ;get the usuals SEARCH SYSSYM SEARCH TRM ;original version by Dave Heyliger VMAJOR=1 ;create 1.0(100) version number VMINOR=0 VEDIT=100. ;Define variables (both TRACK and your JOB use these at times...) .OFINI .OFDEF COMAND,100. ;100. bytes for command line .OFDEF ODDB,D.DDB ;DDB for file I/O .OFSIZ IMPSIZ ;IMPSIZ = 12. bytes total GETIMP IMPSIZ,A5 ;A5 points to variables ;PROCESS ; This section of code processes the input line of .TRACK: ; TRACK/option ; TRACK activity..... ; BYP ;bypass BS LIN ;just .TRACK[crlf]? JNE 10$ ;nope, looks good so far 5$: LEA A0,USAGE ;point to usage message CRLF ;type out crlf TTYL @A0 ;type out usage message EXIT ;and quit ;Input given, find out what kind and process. 10$: CMPB @A2,#'/ ;option entered? JNE ACTIVE ;nope, must be an activity CMPB 1(A2),#'I ;initialize? JEQ TRACK ;yup, wait for others to send info... CMPB 1(A2),#'D ;display? JEQ DISPLY ;yup, display the file to the screen MOV #7,D1 ;else there is an error of sorts.. TTY ;BEEP! CRLF ;provide CRLF JMP 5$ ;and tell em how to use it USAGE: ASCII /Usage: TRACK/ BYTE '/ ASCII /option or TRACK activity/ BYTE 15,12 ASCII / options: / BYTE '/ ASCII /D - Displays current track file to screen/ BYTE 15,12,11,11,'/ ASCII /I - Initializes TRACK JOB on bootup/ BYTE 15,12,15,12,0 ;ACTIVITY ; Here, a user has entered in ".TRACK activity....". This section of ; code will force the following input to a JOB called TRACK: ; JOBNAM_activity...... ; This will cause the TRACK JOB to process the activity. Once the input ; line has been received by TRACK, the user is returned to the dot. ; ;********************************************************************* ; [1.1] THIS CODE MODIFIED BY JDL - PHI/AM TO DETECT MULTI OPERATION ; AND RETURN THE OWNER JOB NAME INSTEAD OF THE JOB NAME IF ; OPERATING UNDER MULTI ACTIVE: PUSH A2 ;save "activity..." pointer [1.1] JOBIDX ;index jcb [1.1] MOV JOBATT(A6),D6 ;get attached job index [1.1] BEQ 5$ ; no attached jot [1.1] MOV D6,A6 ; get owner job address [1.1] 5$: LEA A1,JOBNAM(A6) ; A1 points to RAD50 jobname [1.1] LEA A2,COMAND(A5) ;A2 points to command line UNPACK ;create JOBNAME (6 chars, " " padding) UNPACK MOVB #40,(A2)+ ;end with a space POP A0 ;A0 points to "activity...." 10$: CMPB @A0,#12 ;at end of line? BEQ 20$ ;yup MOVB (A0)+,(A2)+ ;nope, move in the ASCII stuff BR 10$ ;and go again 20$: MOVB #12,@A2 ;end with line feed LEA A1,RADNAM ;A1 points to RAD50 "TRACK_" MOV JOBTBL,A0 ;A0 points to JOBTBL 30$: MOV (A0)+,A4 ;A4 points to a JCB MOV A4,D4 ;set status register BMI 40$ ;end of table BEQ 30$ ;"0", so try again CMM JOBNAM(A4),@A1 ;find "TRACK_"? BEQ 50$ ;yup, happy days! (A4 pointer to JCB) BR 30$ ;nope, look some more 40$: TYPECR? EXIT 50$: LEA A2,COMAND(A5) ;and A2 points to "JOBNAM_activity.." MOV JOBTRM(A4),A5 ;setup for TRMICP JLOCK ;make sure no 2 people are TRMICPing 60$: MOVB (A2)+,D1 ;get a character TRMICP ;"FORCE TRACK character" CMPB D1,#15 ;all done? BNE 60$ ;nope JUNLOK ;free the CPU for others EXIT ;and return to dot! RADNAM: RAD50 /TRACK / EVEN ;INITIALIZE ; This section of code is usually run only by the TRACK JOB defined to your ; system. The sole purpose of this section is to wait for input (via TRMICP) ; and process the input accordingly. The input is in a format of ; JOBNAM_activity...... ; The processing involves grabbing the system date, time, plus the activity ; and recording this information in a file called JOBNAM.TRK. ; TRACK: KBD ;wait for input [crlf] CTRLC EXIT ;quit if killed LEA A0,ODDB(A5) ;point to DDB workspace FSPEC @A0,TRK ;fill in DDB INIT @A0 ;create buffer space LOOKUP @A0 ;already there? BEQ 20$ ;yup, open for append OPENO @A0 ;else open for input (creation) LEA A4,HEADER ;A4 points to header information 10$: CMPB @A4,#'. ;end of information? BEQ 30$ ;yes, continue MOVB (A4)+,D1 ;no, get next byte FILOTB @A0 ;and write it out BR 10$ 20$: OPENA @A0 ;open for append 30$: MOV #^H0000CC48,D5 ;set flags for date CLR D3 ;use system time and date PUSH A2 ;save input command line pointer LEA A2,ODDB(A5) ;point A2 to DDB CALL $ODTIM ;write out date and time POP A2 ;retrieve input command line pointer MOVB #40,D1 ;output 3 spaces FILOTB @A0 FILOTB @A0 FILOTB @A0 ;like so BYP ;bypass spaces 40$: MOVB (A2)+,D1 ;get the activity FILOTB @A0 ;write it out CMPB D1,#12 ;end of write? BNE 40$ ;nope CLOSE @A0 ;yup, close file JMP TRACK ;wait for next track command line HEADER: ASCII / Date Time Activity/ BYTE 15,12 ASCII /============================================================================/ BYTE 15,12,'. EVEN EXIT: EXIT ;DISPLAY ; Displays the current user's JOBNAM.TRK file to their screen ; DISPLY: LEA A1,RADNAM ;A1 points to RAD50 "TRACK_" MOV JOBTBL,A0 ;A0 points to JOBTBL 10$: MOV (A0)+,A4 ;A4 points to a JCB MOV A4,D4 ;set status register BMI 20$ ;end of table BEQ 10$ ;"0", so try again CMM JOBNAM(A4),@A1 ;find "TRACK_"? BEQ 30$ ;yup, happy days! (A4 pointer to JCB) BR 10$ ;nope, look some more 20$: TYPECR? EXIT ;********************************************************************* ; [1.1] THIS CODE MODIFIED BY JDL - PHI/AM TO DETECT MULTI OPERATION ; AND RETURN THE OWNER JOB NAME INSTEAD OF THE JOB NAME IF ; OPERATING UNDER MULTI 30$: JOBIDX ;index jcb [1.1] MOV JOBATT(A6),D6 ;get attached job index [1.1] BEQ 35$ ; no attached jot [1.1] MOV D6,A6 ; get owner job address [1.1] 35$: LEA A1,JOBNAM(A6) ; A1 points to RAD50 jobname [1.1] LEA A0,ODDB(A5) ;point to output DDB MOV @A1,D.FIL(A0) ;fill in filename MOVW #[TRK],D.EXT(A0) ; and extension MOVW JOBUSR(A4),D.PPN(A0) ; and PPN MOVW JOBDEV(A4),D.DEV(A0) ; and device MOVW JOBDRV(A4),D.DRV(A0) ; and drive INIT @A0 ;initialize the DDB LOOKUP @A0 ;there? BEQ 40$ ;yup TYPECR EXIT 40$: OPENI @A0 ;open up file for input 50$: FILINB @A0 ;get a byte TST D.SIZ(A0) ;eof? BEQ 60$ ;yup TTY ;nope, type out character BR 50$ ;and get another character 60$: CLOSE @A0 ;close the file EXIT END .