;SUPERK.ACT ;Bill Aycock 73067,220 ;Get exten for pfkey file from cmd line ;then have SuperKEY! load desired file. ;For DOS XL only! ;Compile this and append it to the end ;of SUPKEY.COM. ;SUPKEY is Keith Ledbetter's great ;SuperKEY! macro processor for XL/XEs. ;(But don't bug him with questions ; about this!) SET $E =$4000 SET $491=$4000 ;INCLUDE "D:SYSLIB.ACT" ;GETARGS.ACT ;GetArgs - Pull arguments from CP ; buffer into temporary area and ; return the NUMBER of arguments ; as the function value and the ; ADDRESSES of strings containing ; the arguments in the CARD ARRAY ; argv. ;REMEMBER: ; The first argument (=argv(0)) is ; the name of the extrinsic command! ; The CP buffer is only 60 bytes long, ; so there are 29 args max. ; The default drive spec (in ASCII) is ; stored at (dosvec^ + 7) BYTE FUNC GetArgs( CARD ARRAY argV BYTE maxArgs ) BYTE nArgs=[0] ; num args encountered ,bufOffset=[0] ; CP buffer offset ,argPtr=[0] ; arg " " ,curArg=[0] ; offset of start of this arg ,argLen=[0] ; length of this arg ,c=[0] ; temp character BYTE ARRAY argspace( 80 )= ;clear some space [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ;space is CMD(=ARG0) ARG1 ARG2... ARG(MAXARGS) BYTE POINTER cmdBuf=[0] CARD dosVec = 10 nArgs = 0 argPtr = 0 bufOffset = $3F cmdBuf = dosVec IF maxArgs>29 THEN maxArgs=29 FI DO ;skip leading spaces WHILE cmdBuf(bufOffset)=$20 DO bufOffset ==+ 1 OD ;check for end of buf (60 + $3F offset) IF bufOffset>123 THEN EXIT FI ;save start of this argument curArg = argPtr argPtr ==+ 1 argLen = 0 ;copy chrs up to whitespc or comma DO c = cmdBuf( bufOffset ) IF (c=' ) OR (c=$9B) OR (c=0) OR (c=',) THEN EXIT FI argspace( argPtr ) = c bufOffset ==+ 1 argPtr ==+ 1 argLen ==+ 1 OD ;If this arg empty, at end of arg list IF argLen=0 THEN EXIT FI ;Now add argument to list argspace( curArg ) = argLen argV( nArgs ) = argspace+curArg nArgs ==+ 1 UNTIL nArgs >= maxArgs OD RETURN( nArgs ) ;------------------------------------- PROC ChangeDAT(BYTE ARRAY desired,at) BYTE i FOR i=1 TO desired^ DO at^=desired(i) at==+1 OD RETURN PROC FixAndGo() CARD ARRAY argaddrs(4) BYTE POINTER exten GetArgs(argaddrs,3) exten=argaddrs(1) IF exten^=0 ;use .DAT as default THEN RETURN FI IF exten^>3 ;exten too long THEN exten^=3 FI ChangeDAT(exten,$53CA) ;file name ChangeDAT(exten,$5498) ;not-ok msg RETURN ;---end of SUPERK.ACT-----------------