Update getvers per user feedback:

* Add -f option to control printing of filename
  * Rewrote printing of text to allow carriage-return and tab
  * Report no version information as warning for both no rVersion and
    no version fork
This commit is contained in:
tribby 1998-05-08 17:33:46 +00:00
parent 519805dbb4
commit e014797a8e
3 changed files with 190 additions and 80 deletions

View File

@ -1,5 +1,5 @@
.\" .\"
.\" $Id: getvers.1,v 1.2 1998/04/29 00:41:50 tribby Exp $ .\" $Id: getvers.1,v 1.3 1998/05/08 17:33:41 tribby Exp $
.\" .\"
.TH GETVERS 1 "April 1998" "GNO" "Commands and Applications" .TH GETVERS 1 "April 1998" "GNO" "Commands and Applications"
.SH NAME .SH NAME
@ -8,21 +8,21 @@
\- list information stored in rVersion and rComment resources \- list information stored in rVersion and rComment resources
.SH SYNOPSIS .SH SYNOPSIS
.BR getvers " [" -b "] [" -c "]" .BR getvers " [" -b "] [" -c "]"
.RB "[" -q "] file ..." .RB "[" -f "] [" -q "] file ..."
.SH DESCRIPTION .SH DESCRIPTION
.BR getvers .BR getvers
print the version information stored in the rVersion resource of print the version information (product name, version, description, country)
the specified files. If there is a problem handling a particular stored in the rVersion resource of the specified files and optionally print
file (e.g., file does not exist, no resource fork, the contents of the rComment resource. If there is no version information,
no rVersion resource) or if there is an error accessing the file,
.BR getvers .BR getvers
prints an error message and continues processing any remaining files. prints a message and continues processing any remaining files.
.LP .LP
To add information to the rVersion resource, you can use the companion To add rVersion resource information to a file, you can use the companion
shell utility shell utility
.BR setvers , .IR setvers (1),
or use the or use the
.BR rez .IR rez
resource compiler. resource compiler.
.PP .PP
.BR getvers .BR getvers
@ -32,15 +32,17 @@ any of the files. Otherwise it returns 0.
.BR getvers .BR getvers
recognizes these options: recognizes these options:
.IP \fB-b\fR .IP \fB-b\fR
print a brief listing for each file, leaving off the program print a brief one-line listing for each file, showing only the product
description and country name. name and version.
.IP \fB-c\fR .IP \fB-c\fR
print rComment resource number 1 (the one displayed by Finder in print rComment resource number 1 (the one displayed by Finder in
file information windows). file information windows).
.IP \fB-f\fR
print the name of a file before printing its information.
.IP \fB-q\fR .IP \fB-q\fR
do not print error information. do not print error or warning information.
.SH SEE ALSO .SH SEE ALSO
.BR setvers "(1)" .IR setvers "(1)"
.SH VERSION .SH VERSION
This manual page documents This manual page documents
.BR getvers .BR getvers

View File

@ -19,14 +19,11 @@ GSOS gequ $E100A8
; Locations used on direct page ; Locations used on direct page
; ;
CmdLn gequ $00 00-03 Command line address CmdLn gequ $00 00-03 Command line address
CmdIndx gequ $04 04-05 index into Command line RezHndl gequ $04 04-07 rVersion resource handle
RezHndl gequ $06 06-09 rVersion resource handle RezAddr gequ $08 08-0B rVersion resource address
RezAddr gequ $0A 0A-0D rVersion resource address rezFieldAddr gequ $0C 0C-0F rVersion field address
rezFieldAddr gequ $0E 0E-11 rVersion field address AdrPStr gequ $10 10-13 pString addr for WritePString
AdrPStr gequ $12 12-15 pString addr for WritePString CntryPStrAdr gequ $14 14-17 addr of country pString
RezRefNum gequ $16 16-17 ref num for resource file
CntryPStrAdr gequ $18 18-1B addr of country pString
; (Not used) UserID gequ $1C 1C-1D ID number of program
* ----------------------------------------------------------------- * -----------------------------------------------------------------
@ -55,6 +52,7 @@ getvers start GETVERS
; Were parameters provided? ; Were parameters provided?
ldy #8 Start beyond shell identifier. ldy #8 Start beyond shell identifier.
jsr GetNxtPrm 1st parameter is program name. jsr GetNxtPrm 1st parameter is program name.
stx BufLen
ChkPrm lda [CmdLn],y Get next command line ChkPrm lda [CmdLn],y Get next command line
and #$FF character. and #$FF character.
bne GetParam If not end-of-string, continue. bne GetParam If not end-of-string, continue.
@ -86,7 +84,7 @@ GetParam jsr GetNxtPrm Get filename
; Was it a valid option? ; Was it a valid option?
lda EndOptFlg If end-of-options flag is set, lda EndOptFlg If end-of-options flag is set,
bne Fname process parameter as pathname. bne PRF process parameter as pathname.
SHORT M Use short mode to access chars. SHORT M Use short mode to access chars.
lda Buffer Get parameter. lda Buffer Get parameter.
@ -100,9 +98,13 @@ GetPCh lda Buffer,x Get option character.
sta bflag set bflag. sta bflag set bflag.
bra BumpIt bra BumpIt
ChkPc cmp #'c' If it's 'c', ChkPc cmp #'c' If it's 'c',
bne ChkPq bne ChkPf
sta cflag set cflag. sta cflag set cflag.
bra BumpIt bra BumpIt
ChkPf cmp #'f' If it's 'f',
bne ChkPq
sta fflag set fflag.
bra BumpIt
ChkPq cmp #'q' If it's 'q', ChkPq cmp #'q' If it's 'q',
bne BadParam bne BadParam
sta qflag set qflag. sta qflag set qflag.
@ -117,38 +119,25 @@ BumpIt inx Increment index.
Frstname LONG M Restore long mode. Frstname LONG M Restore long mode.
inc EndOptFlg Set end-of-options flag. inc EndOptFlg Set end-of-options flag.
; Check for "quiet" mode
Fname lda qflag If -q option was specified,
bne PRF go process the rez file.
; Write the pathname
PH2 BufLen
PH4 #Buffer
jsr WriteBuf
; Write a colon and a space
PH4 #PstrColSp
jsr WritePString
; Try to open the file and print rVersion information ; Try to open the file and print rVersion information
PRF jsr ProcessRezFile PRF lda bflag Use "brief" flag for initial
sta no_sep setting of "no separator" flag.
jsr ProcessRezFile Handle this file.
ldy CmdIndx Restore cmd line pointer. ldy CmdIndx Restore cmd line pointer.
lda [CmdLn],y Get next command line lda [CmdLn],y Get next command line
and #$FF character. and #$FF character.
beq AllDone If end-of-string, all done. beq AllDone If end-of-string, all done.
lda bflag If "brief" option lda no_sep If "no separator" flag set,
ora qflag and "quiet" options aren't set,
bne GetParam bne GetParam
PH4 #PStrNewLn print newline separator. PH4 #PStrNewLn print newline.
jsr WritePString jsr WritePString
bra GetParam Get next filename. bra GetParam Get next filename.
; A parameter was offered, but it's not "b", "c" or "q". ; A parameter was offered, but it's not "b", "c", "f", or "q".
BadParam sta BadOpChr Save character in error message. BadParam sta BadOpChr Save character in error message.
LONG M Restore long mode. LONG M Restore long mode.
PH4 #BadOption Print "Illegal option" PH4 #BadOption Print "Illegal option"
@ -172,29 +161,27 @@ ProcessRezFile pha Word for result.
ply Discard return value. ply Discard return value.
PrintErr ldy qflag If -q option was specified, PrintErr cmp #$0063 If error = $0063,
beq NoInfo handle as "no resource information".
ldy qflag If -q option was specified,
bne ErRtn don't print error message. bne ErRtn don't print error message.
sta ErrGS_error Save error value. sta ErrGS_error Save error value.
; Check for two specific error cases jsr PrName Print the filename.
lda ErrGS_error
cmp #$0046 If error = $0046, cmp #$0046 If error = $0046,
bne chkerr2
PH4 #E0046Msg print "File not found" PH4 #E0046Msg print "File not found"
bra MsgRtn and exit the subroutine. jsr WritePString
chkerr2 cmp #$0063 If error = $0063,
bne Generr
PH4 #E0063Msg print "No resource fork"
MsgRtn jsr WritePString
PH4 #PStrNewLn PH4 #PStrNewLn
jsr WritePString jsr WritePString
; Return with error status ErRtn lda #1 Set error status.
ErRtn lda #1 Set error status
sta rval sta rval
WarnRtn lda qflag If -q option was specified,
ora no_sep make sure no linefeed separator
sta no_sep is printed.
rts and return from ProcessRezFile. rts and return from ProcessRezFile.
; Print a generic error message ; Print a generic error message
@ -220,15 +207,17 @@ OpenedOK PL2 RezRefNum Save rtn value (file ref num).
cmp RezRefNum != loaded rez file number, cmp RezRefNum != loaded rez file number,
beq LoadVRez beq LoadVRez
ldy qflag and -q option wasn't specified, NoInfo ldy qflag and -q option wasn't specified,
bne ErRtn bne WarnRtn
PH4 #NoRezMsg print error message, jsr PrName print the filename,
PH4 #NoInfoMsg print error message,
jsr WritePString jsr WritePString
PH4 #PStrNewLn PH4 #PStrNewLn
jsr WritePString jsr WritePString
bra ErRtn Set err stat & rtn from ProcessRezFile. bra WarnRtn Set err stat & rtn from ProcessRezFile.
; ;
; The resource exists in the target file. Load it. ; The resource exists in the target file. Load it.
@ -260,8 +249,13 @@ GotRez PL4 RezHndl Rtn value = resource handle.
lda [RezHndl],y save lda [RezHndl],y save
sta RezAddr+2 address. sta RezAddr+2 address.
; Check for "print file name" mode
lda fflag If -f option was specified,
beq CvtVrs
jsr PrName print the filename.
; Convert version field to pString using _VersionString ; Convert version field to pString using _VersionString
pea 0 Flags (= 0). CvtVrs pea 0 Flags (= 0).
lda [RezAddr],y Version (long). lda [RezAddr],y Version (long).
pha pha
lda [RezAddr] lda [RezAddr]
@ -399,6 +393,17 @@ CloseRez PH2 RezRefNum fileID
Rtn rts Return from ProcessRezFile. Rtn rts Return from ProcessRezFile.
;
; Subroutine to print the pathname stored at Buffer (length in BufLen)
;
PrName PH2 BufLen Write the pathname,
PH4 #Buffer
jsr WriteBuf
PH4 #PstrColTb a colon, and a tab.
jsr WritePString
rts Return from PrName.
; ;
; Subroutine to copy next word of input line into Buffer ; Subroutine to copy next word of input line into Buffer
; Upon entry: Y-reg = index into CmdLn (beginning of parameter) ; Upon entry: Y-reg = index into CmdLn (beginning of parameter)
@ -506,29 +511,120 @@ Wrt8bitPStr plx Hold the return address.
sta GSWriteLen sta GSWriteLen
; ;
; Alternate entry point to write 8-bit characters, with address ; Alternate entry point to write 8-bit characters, with address
; and length already stored at GSWriteAdr and GSEriteLen. ; and length already stored at GSWriteAdr and GSWriteLen.
; ;
Wrt8bitStr anop Wrt8bitStr anop
; Convert 8-bit characters to printable ; Reset Buffer to contain "$80" characters. These will be translated
; by _StringToText, so any that are left are not part of the translation.
ldx #254
lda #$8080 Value to be stored.
SetBuf sta Buffer,x Save special value in buffer.
dex Decrement count
dex by two.
bpl SetBuf If x >= 0, stay in loop.
; Call _StringToText to convert 8-bit characters to printable
pha Reserve space for pha Reserve space for
pha return values. pha return values.
PH2 #$4000 Flags: allow longer subs. PH2 #$5000 Flags: allow long subs; pass ctl chrs.
PH4 GSWriteAdr Pointer to source text. PH4 GSWriteAdr Pointer to source text.
PH2 GSWriteLen Source text length. PH2 GSWriteLen Source text length.
PH4 #BufSize Pointer to destination. PH4 #GSOSBuf Pointer to destination.
_StringToText _StringToText
PL2 GSWriteLen Save length. plx Hold printable len in X-reg.
pla Ignore resultFlags. stx Printable
pla
sta ResultFlags Save results flags.
PH4 #Buffer Set GSWrite address PH4 #Buffer Set GSWrite address
PL4 GSWriteAdr to the result buffer. PL4 GSWriteAdr to the result buffer.
jsl >GSOS GSWrite ; _StringToText does not count non-printables (e.g. tab, carriage-return)
; in its printable length. Find first $80 in buffer to determine the true
; length of the string.
SHORT M Use short mode to access chars.
CkLen cpx #255 Make sure that
beq SvLen length <= 255.
lda Buffer,x Get next byte.
cmp #$80 If it's the special value,
beq SvLen done looking.
inx Bump length
bra CkLen and read the next character.
SvLen stx GSWriteLen Save length.
LONG M Restore long mode.
lda ResultFlags If any translations took place,
bmi ChkNP need to check for non-printables.
cpx Printable If current length == # printable,
beq DoWrite don't need to check.
; Need to see if any of the non-printables need to be removed.
ChkNP ldx #0 Start looking at beginning of Buffer.
SHORT M Use short mode to access chars.
; Skip over leading printable characters.
GetAtStart lda Buffer,x Get next character from Buffer.
jsr ChkChar Is it printable?
bcs CopyLoop No -- continue in copy loop.
inx Yes -- just bump index
bra GetAtStart and keep looking.
; Copy printable characters, but skip non-printable ones.
CopyLoop txy Copy source index to destination index.
ChkEnd cmp #$80 If it's the special character,
beq CopyDone all done with checking.
NextCh inx Bump source index.
lda Buffer,x Get next character from Buffer.
jsr ChkChar Is it printable?
bcs ChkEnd No -- see if we're at the end.
sta Buffer,y Yes -- store in buffer
iny and increment destination index.
bra NextCh
CopyDone LONG M Restore long mode.
sty GSWriteLen Save true length.
DoWrite jsl >GSOS GSWrite
dc i2'$2013' dc i2'$2013'
dc a4'GSWritePB' dc a4'GSWritePB'
rts Return from Wrt8bitPStr/Wrt8bitStr. rts Return from Wrt8bitPStr/Wrt8bitStr.
; Variables used in subroutine.
Printable dc i2'0'
ResultFlags dc i2'0'
;
; Subroutine called by Wrt8bit subroutines to determine whether the
; character in the accumulator is printable. Return carry flag to
; indicate the result: Set == non-printable; Clear == printable.
;
longa off Always called in SHORT M mode
ChkChar cmp #$80 If >= $80,
bcs ChkDone it's not printable.
cmp #$20 If < $80 && > 20,
bcs RtnClr it is printable.
cmp #$0D If == carriage-return
beq RtnClr it is printable.
cmp #$09 If == tab
beq RtnClr it is printable.
sec If it is none of these,
bra ChkDone it is not printable.
RtnClr clc Printable: clear carry flag.
ChkDone rts Return from ChkChar w/result in carry
longa on
; ;
; Subroutine to write text; Addr and Len passed on stack ; Subroutine to write text; Addr and Len passed on stack
; ;
@ -542,13 +638,12 @@ WriteBuf plx Hold return address.
dc a4'GSWritePB' dc a4'GSWritePB'
rts Return from WriteBuf. rts Return from WriteBuf.
; ------------------------------------------------------------------- ; -------------------------------------------------------------------
; Miscellaneous program constants and storage ; Miscellaneous program constants and storage
; ------------------------------------------------------------------- ; -------------------------------------------------------------------
; Usage message ; Usage message
UsageMsg dw 'usage: getvers [-b] [-c] [-q] file ...' UsageMsg dw 'usage: getvers [-b] [-c] [-f] [-q] file ...'
; Bad option error message (pString) ; Bad option error message (pString)
BadOption dc i1'BadOpChr-BadOption' BadOption dc i1'BadOpChr-BadOption'
@ -557,12 +652,20 @@ BadOpChr dc c' '
; File open error pStrings ; File open error pStrings
E0046Msg dw 'File not found' E0046Msg dw 'File not found'
E0063Msg dw 'No resource fork' NoInfoMsg dw 'No version information'
NoRezMsg dw 'No version resource'
; Indicates whether this program opened stdout ; Indicates whether this program opened stdout
OpenFlag dc i2'0' OpenFlag dc i2'0'
; index into Command line
CmdIndx dc i2'0'
; ref num for resource file
RezRefNum dc i2'0'
; ID number of program (Not used)
; UserID dc i2'0'
; Status value returned to shell ; Status value returned to shell
rval dc i2'0' rval dc i2'0'
@ -570,10 +673,13 @@ rval dc i2'0'
EndOptFlg dc i2'0' Has end-of-options been reached? EndOptFlg dc i2'0' Has end-of-options been reached?
bflag dc i2'0' Has -b option been specified? bflag dc i2'0' Has -b option been specified?
cflag dc i2'0' Has -c option been specified? cflag dc i2'0' Has -c option been specified?
fflag dc i2'0' Has -f option been specified?
qflag dc i2'0' Has -q option been specified? qflag dc i2'0' Has -q option been specified?
no_sep dc i2'0' Is newline separator needed?
; Miscellaneous pString constants: ; Miscellaneous pString constants:
PstrColSp dw ': ' Colon and space PstrColTb dc h'023A09' Colon and tab
PstrSpace dw ' ' Space PstrSpace dw ' ' Space
PStrNewLn dc h'010D' Newline PStrNewLn dc h'010D' Newline
@ -644,11 +750,11 @@ Thailand dw 'Thailand'
; GS/OS input/result string: two length words followed by 256 bytes ; GS/OS input/result string: two length words followed by 256 bytes
GSOSBuf anop
BufSize dc i2'260' Total size (when used as result buf) BufSize dc i2'260' Total size (when used as result buf)
BufLen dc i2'0' Num chars used in buffer BufLen dc i2'0' Num chars used in buffer
Buffer ds 256 Storage area (256 bytes) Buffer ds 256 Storage area (256 bytes)
dc h'80' Special character, flags end of buffer
; Parameter Block used for ErrorGS ; Parameter Block used for ErrorGS
ErrorGSbuf dc i2'1' Number of parameters ErrorGSbuf dc i2'1' Number of parameters

View File

@ -5,6 +5,7 @@
#define DESC "Print contents of resource version." #define DESC "Print contents of resource version."
#include "Types.rez" #include "Types.rez"
#include "/src/gno/build.tools/builddate.rez"
/* /*
* Version * Version
@ -15,7 +16,8 @@ resource rVersion (1, purgeable3) {
0 }, /* non-final release number */ 0 }, /* non-final release number */
verUS, /* Country */ verUS, /* Country */
PROG, /* Program name */ PROG, /* Program name */
DESC " Released with GNO/ME." DESC " Released with GNO/ME.\n"
BUILD_DATE
}; };