atari email archive

a collection of messages sent at Atari from 1983 to 1992.

Some new stuff

(1 / 1)


Have you been steamed at MAKE, the quemanager, DIO or IMI lately? Well, I just
added somemore junk that may REALLY make you mad. On the other hand, you might
like it. 

For the IMI and DIO, the system will broadcast a message to all terminals logged
in with a username that matches the top level directory specified in the FILE
command announcing that "your roms are done" when they are done programming,
verifying or uploading or any other stuff that you might do. (I'll try to fix it
to be more discriminating later). It remains to be seen if this is a good
feature or not. I'm sure you'll let me know one way or the other. 

I have found that the message returned at the completion of a batch job leaves a
lot to be desired (i.e. bla_bla completed with status of "%NONAME-E-WHAT,
Undecodable message number %X09898080" or some such nonsense. So, I tried to fix
that. There's a new program to do the announcing and there's some changes to
MAKE.EXE and MAKE.COM. One key point is that the notification of completion of a
job started with a DCL BATCH or AT command is done by an announcing program
rather than the que manager. As a result, your job may not actually be complete
until a couple seconds AFTER you get the message. Sorry, but this appears to be
the only way I can get meaningful messages to your terminal from make. 

If you cause your make procedure to exit with a status code between 0 and 4,
then one of the following messages will be broadcast to your terminal: 

	code 0 = Completed with warning(s)
	code 1 = Normal successful completion
	code 2 = Completed with error(s)
	code 3 = Completed with information message(s)
	code 4 = Completed with fatal error(s)

i.e. $ EXIT 2 would signal completion with errors. Any other codes will be
translated to the VMS message that it may represent and sent to your terminal.
For example, if you trapped the error status from some VMS utility and exited
your procedure with that status, then the appropriate VMS error message would be
broadcast to your terminal. 

In addition to these changes (and partly to better use the messge facility),
I've added three special macro names to MAKE: *, < and >. These names represent
the current root filename (*=whole root; < is name portion only; > is type
portion only). You may use these macro names anywhere in the makefile except in
a dependency list which wouldn't make any sense anyway. The macro is not
expanded until it is used in a method stream. The following example (an excerpt
of MAKE's makefile) uses this feature along with the new announcing program to
blast reports of compile and link errors AS THEY OCCUR during the make. Using
this feature makes the methods for the files quite small (in the case of the .c
files, a single macro call): 

FILES = #H, make.c, macro.c, token.c, parsedir.c, file.c

~INIT = $ cc := cc/deb/lis
~INIT = #(~INIT)\n$ wo := write sys$output
~INIT = #(~INIT)\n$ mess_severity == 1
~INIT = #(~INIT)\n$ mess_map = "0020401234222240323444444"
~INIT = #(~INIT)\n$ set noon
~INIT = #(~INIT)\n$ goto skip_stchk
~INIT = #(~INIT)\n$ status_check: subroutine
~INIT = #(~INIT)\n$ 	cs = 'p1' .and. 7
~INIT = #(~INIT)\n$ 	if cs .gt. 4 then $ cs = 4
~INIT = #(~INIT)\n$ 	if p2 .eqs. "" .or. cs .eq. 1 then $ goto 10$
~INIT = #(~INIT)\n$ 	if cs .eq. 0 then $ mc make_system:notify "Warning(s) while making ''p2'"
~INIT = #(~INIT)\n$ 	if cs .eq. 2 then $ mc make_system:notify "Error(s) while making ''p2'"
~INIT = #(~INIT)\n$ 	if cs .eq. 3 then $ mc make_system:notify "Information message(s) while making ''p2'"
~INIT = #(~INIT)\n$ 	if cs .eq. 4 then $ mc make_system:notify "Fatal error making ''p2'"
~INIT = #(~INIT)\n$10$:	cs = cs * 5 + 'mess_severity
~INIT = #(~INIT)\n$ 	mess_severity == 'f$ext(cs,1,mess_map)
~INIT = #(~INIT)\n$ 	exit %x10000001
~INIT = #(~INIT)\n$ 	endsubroutine
~INIT = #(~INIT)\n$ skip_stchk:

~DEINIT = $ get_out: exit mess_severity

! Define some macros to blast old .LIS, .OBJ and .MAP files
!
NOLIS = $ if f$search("#<.LIS;") .nes. "" then $ delete #<.LIS;*
NOMAP = $ if f$search("#<.MAP;") .nes. "" then $ delete #<.MAP;*
NOOBJ = $ if f$search("#<.OBJ;") .nes. "" then $ delete #<.OBJ;*
!
! Define a macro to delete the old root file
NOROO = $ if f$search("#*;") .nes. "" then $ delete #*;*
!
! Define a macro to call the status checker/announcer routine
SCHK = $ call status_check '$status' #*
!
! Define the macro for the .c to .obj method
C = #(NOLIS)\n#(NOOBJ)\n$ wo "CC #<"\n$ cc #<\n#(SCHK)
!
! Define the macro for the .mar to .obj method
M = #(NOLIS)\n#(NOOBJ)\n$ wo "MAC #<"\n$ mac/lis/deb #<\n#(SCHK)
!
! Define the macro for the .msg to .obj method
MS = #(NOLIS)\n#(NOOBJ)\n$ wo "MESS #<"\n$ message/lis #<\n#(SCHK)
!
! Define macro to be used before link is called
L = #(NOROO)
L = #L\n$ if .not. mess_severity then $ goto get_out
L = #L\n$ wo "Linking #*"
!
! make's dependencies
make	:	make.exe

make.exe : make.obj macro.obj token.obj parsedir.obj file.obj
	#L
	$ LINK/nomap MAKE/OPTIONS
	#(SCHK)

make.deb : make.obj macro.obj token.obj parsedir.obj file.obj
	#L
	$ LINK/nomap/deb/exe=make.deb MAKE/OPTIONS
	#(SCHK)

make.obj : make.c #H
	#C

macro.obj : macro.c #H
	#C

token.obj : token.c #H
	#C

parsedir.obj : parsedir.c #H
	#C

file.obj : file.c
	#C

notify.obj : notify.c
	#C

notify_getstuff.obj : notify_getstuff.mar
	#M
Message 1 of 1

Mar 12, 1988