$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))' $! $! This archive created by VMS_SHARE Version 7.2-011 26-Jun-1992 $! On 3-AUG-1992 10:52:35.36 By user GOATHUNTER (@WKUVX1.BITNET) $! $! This VMS_SHARE Written by: $! Andy Harper, Kings College London UK $! $! Acknowledgements to: $! James Gray - Original VMS_SHARE $! Michael Bednarek - Original Concept and implementation $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. CBUILT.VAX;1 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if f$trnlnm("SHARE_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $UNPACK: SUBROUTINE ! P1=filename, P2=checksum $ x = P1 - f$parse(P1,,,"version") $ y = f$search(x) $ if y .eqs. "" then $ goto file_absent $ x = f$integer(f$parse(P1,,,"version")-";") $ y = f$integer(f$parse(y,,,"version")-";") $ if x .gt. y then $ goto file_absent $ if f$mode() .eqs. "INTERACTIVE" then $ goto file_interactive $ if x .eq. y then e "-W-EXISTS, File ''P1' exists. Skipped." $ if x .ne. y then e "-W-NEWERVERSION, of File ''P1' exists. Skipped." $file_delete: $ delete 'f'* $ exit $file_interactive: $ if x .eq. y then e "-W-EXISTS, File ''P1' exists." $ if x .ne. y then e "-W-NEWERVERSION, of File ''P1' exists." $ read/error=file_delete/end=file_delete- /prompt="Create new version [y/n]: " - sys$command x $ if .not. x then $ e "-W-SKIPPED, File ''P1' skipped." $ if .not. x then $ goto file_delete $ P1 = P1 - f$parse(P1,,,"version") $file_absent: $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'." $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped." $ delete 'f'* $ exit $dirok: $ w "-I-PROCESS, Processing file ''P1'." $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1' PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b)); LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION( BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1); IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE; MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1; ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")= 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF"; POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r); ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1; COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE, "output_file"));ENDPROCEDURE;Unpacker;QUIT; $ delete/nolog 'f'* $ CHECKSUM 'P1' $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT $ e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ ENDSUBROUTINE $START: $ create 'f' XString Macros to Replace Library Run Time Calls X X#ifdef`09VAXC X#pragma builtins X#ifndef MIN X#define MIN(a, b)`09 (((a) < (b)) ? a : b) X#endif X X#define strlen(cs)`09 (0xFFFF - _LOCC('\0', 0xFFFF, cs)) X#define strcpy(s, ct)`09 (_MOVC3(strlen(ct) + 1, ct, s), s) X#define strncpy(s, ct, n) (_MOVC5(MIN(n, ((n) - _LOCC('\0', n, ct)) + 1),\ X`09`09`09 ct, '\0', n, s), s) X#define strchr(cs, c)`09 (_LOCC(c, strlen(cs), (char *)cs) ?\ X`09`09`09 (char *)_READ_GPR(1) : (char *)NULL) X#define strcat(s, ct)`09 (_MOVC3(strlen(ct) + 1, ct, s + strlen(s)), s) X#define strncat(s, ct, n) (_MOVC5(MIN(n, ((n) - _LOCC('\0', n, ct))), ct,\ X`09`09`09 '\0', (MIN(n, ((n) - _LOCC('\0', n, ct))) + 1),\ X`09`09`09 s + strlen(s)), s) X#define memcpy(s, ct, n) (_MOVC3(n, (char *)ct, (char *)s), s) X#define memmove(s, ct, n) (_MOVC3(n, (char *)ct, (char *)s), s) X#define memset(s, c, n) (_MOVC5(0, (char *)_READ_GPR(14), c, n,\ X`09`09`09 (char *)s), s) X#define memchr(cs, c, n) (_LOCC(c, n, (char *)cs) ?\ X`09`09`09 (void *)_READ_GPR(1) : NULL) X#endif`09/* VAXC */ X X`0C X XExample run used to generate strcopy statistics X X $ X $ type strcpy1.c X #include X X main( ) X `7B X`09static const char s`5B`5D = "Test string"; X`09char t`5B80`5D; X`09register i; X X`09for (i = 0; i < 500000; i++) X`09 strcpy(t, s); X X`09return; X `7D X $ X $ cc strcpy1 X $ lin strcpy1 + sys$input:/options X sys$share:vaxcrtl.exe/share X $ X $ type strcpy2.c X #include X #include "strmac.h" X X main( ) X `7B X`09static const char s`5B`5D = "Test string"; X`09char t`5B80`5D; X`09register i; X X`09for (i = 0; i < 500000; i++) X`09 strcpy(t, s); X X`09return; X `7D X $ X $ cc strcpy2 X $ lin strcpy2 + sys$input:/options X sys$share:vaxcrtl.exe/share X $ X $ show status X Status on 22-MAY-1991 22:01:26.68 Elapsed CPU : 0 00:00:05.79 X Buff. I/O : 175 Cur. ws. : 8196 Open files :`09 2 X Dir. I/O : 117 Phys. Mem. : 373 Page Faults : 1815 X $ X $ run strcpy1 X $ show status X Status on 22-MAY-1991 22:01:38.00 Elapsed CPU : 0 00:00:16.80 X Buff. I/O : 182 Cur. ws. : 8196 Open files :`09 2 X Dir. I/O : 118 Phys. Mem. : 378 Page Faults : 1883 X $ X $ run strcpy2 X $ show status X Status on 22-MAY-1991 22:01:43.51 Elapsed CPU : 0 00:00:22.09 X Buff. I/O : 189 Cur. ws. : 8196 Open files :`09 2 X Dir. I/O : 120 Phys. Mem. : 378 Page Faults : 1945 X X $ X X`0C X XCommand file to generate statistics X X$ set verify X$ X$ type strcpy1.c X$ cc strcpy1 X$ lin strcpy1 + sys$input:/options Xsys$share:vaxcrtl.exe/share X$ X$ type strcpy2.c X$ cc strcpy2 X$ lin strcpy2 + sys$input:/options Xsys$share:vaxcrtl.exe/share X$ X$ show status X$ X$ run strcpy1 X$ show status X$ X$ run strcpy2 X$ show status X$ X$ exit X X`0C X XC file with macro definitions X X#ifdef`09VAXC X#pragma builtins X#ifndef MIN X#define MIN(a, b)`09 (((a) < (b)) ? a : b) X#endif X X#define strlen(cs)`09 (0xFFFF - _LOCC('\0', 0xFFFF, cs)) X#define strcpy(s, ct)`09 (_MOVC3(strlen(ct) + 1, ct, s), s) X#define strncpy(s, ct, n) (_MOVC5(MIN(n, (n - _LOCC('\0', n, ct)) + 1), V\ X`09`09`09 ct, '\0', n, s), s) X#define strchr(cs, c)`09 (_LOCC(c, strlen(cs), (char *)cs) ?\ X`09`09`09 (char *)_READ_GPR(1) : (char *)NULL) X#define strcat(s, ct)`09 (_MOVC3(strlen(ct) + 1, ct, s + strlen(s)), s V) X#define strncat(s, ct, n) (_MOVC5(MIN(n, (n - _LOCC('\0', n, ct))), ct, V\ X`09`09`09 '\0', (MIN(n, (n - _LOCC('\0', n, ct))) + 1),\ X`09`09`09 s + strlen(s)), s) X#define memcpy(s, ct, n) (_MOVC3(n, (char *)ct, (char *)s), s) X#define memmove(s, ct, n) (_MOVC3(n, (char *)ct, (char *)s), s) X#define memset(s, c, n) (_MOVC5(0, (char *)_READ_GPR(14), c, n,(char X`09`09`09 *)s), s) X#define memchr(cs, c, n) (_LOCC(c, n, (char *)cs) ? (void X*)_READ_GPR(1) : NULL) X#endif`09/* VAXC */ X X`0C X XC test file 1 X#include X Xmain( ) X`7B X static const char s`5B`5D = "Test string"; X auto char s`5B80`5D; X register char *p; X register int i; X X for (i = 0;i <500000;i++) X`09p=strcpy(s,ct); X X return; X`7D X X`0C X XC test file 2 X X#include X#include "strmac.h" X Xmain( ) X`7B X static const char ct`5B`5D = "Test string"; X auto char s`5B80`5D; X register char *p; X register int i; X X for (i = 0;i<500000;i++) X`09p=strcpy(s,ct); X X return; X`7D $ CALL UNPACK CBUILT.VAX;1 1700023949 $ v=f$verify(v) $ EXIT