;------------------------------------------------------------------------------- ; Program Name: LspCom.lsp ; Created By: Terry Miller (Email: terrycadd@yahoo.com) ; (URL: http://web2.airmail.net/terrycad) ; Date Created: 4-20-04 ; Purpose: An AutoLISP utility that compresses AutoLISP and Dialog files. ; The format of the compressed file makes it difficult for the ; casual user to edit or modify your AutoLISP and Dialog files. ; Note: This version only recognizes the conventional style for comments ; and remarks such as ; for Autolisp files and // for Dialog files. ; This file was compressed using LspCom.lsp. For the latest ; uncompressed version send an email to terrycadd@yahoo.com. ;------------------------------------------------------------------------------- ; Revision History ; Rev By Date Description ;------------------------------------------------------------------------------- ; 1 TM 4-20-04 Initial version ;------------------------------------------------------------------------------- ; Overview of Main Functions ;------------------------------------------------------------------------------- ; c:LspCom - Compresses AutoLISP files. ; c:DclCom - Compresses Dialog files. ; Whirl - Displays a whirl on the command line while processing information. ;------------------------------------------------------------------------------- (defun c:LspCom(/ DontSkipNext FileName% ListA@ ListB@ Left# Mid$ Mid1$ Mid2$ Num# PathFile$ Quote Right# Skip SkipNext Text$)(princ"\nSelect AutoLISP File to Compress: ")(princ)(if(not *PathFilename*)(setq *PathFilename*"")(setq *PathFilename*(substr *PathFilename* 1(-(strlen *PathFilename*)4))))(if(not(setq *PathFilename*(getfiled" Select AutoLISP File to Compress"*PathFilename*"lsp"2)))(exit))(princ"\nWorking...")(princ)(setq FileName%(open *PathFilename*"r"))(while(setq Text$(read-line FileName%))(setq ListA@(append ListA@(list Text$))))(close FileName%)(setq Left# 0 Right# 0)(foreach Item ListA@(setq Num# 1 Text$""Comment nil DontSkipNext nil Quote nil Skip nil SkipNext nil)(repeat(strlen Item)(setq Mid$(substr Item Num# 2)Mid1$(substr Mid$ 1 1)Mid2$(substr Mid$ 2))(if(not SkipNext)(progn(cond((and(not Quote)(= Mid1$"\""))(setq Quote t))((and Quote(= Mid1$"\""))(setq Quote nil)))(if(and(not Quote)(or(= Mid$" ")(= Mid$" \"")(= Mid$" (")(= Mid$" )")(= Mid$" ;")(= Mid$" :"))) (setq Skip t)(setq Skip nil))(if(and(not Quote)(= Mid1$";"))(setq Comment t))(if(and(= Mid1$" ")(= Text$""))(setq Skip t))(if SkipNext(setq Skip t SkipNext nil))(if DontSkipNext(setq Skip nil DontSkipNext nil))(if(or(= Mid$"\\\"")(= Mid$"\\\\"))(setq Mid1$ Mid$ Skip nil SkipNext t))(if(and(not Quote)(or(= Mid$"\" ")(= Mid$"( ")(= Mid$") ")))(setq SkipNext t))(if(= Mid$". ")(setq DontSkipNext t))(if(and(not Comment)(not Skip))(progn(setq Text$(strcat Text$ Mid1$))(cond((= Mid1$"(")(setq Left#(1+ Left#)))((= Mid1$")")(setq Right#(1+ Right#)))))))(setq SkipNext nil))(setq Num#(1+ Num#)))(if(/= Text$"")(setq ListB@(append ListB@(list Text$))))(Whirl))(setq Num# 0 ListA@ nil)(repeat(length ListB@)(setq First$(nth Num# ListB@)Second$(nth(1+ Num#)ListB@)Text$"")(if Second$(if(not(or(=(substr First$(strlen First$))"\"")(=(substr Second$ 1 1)"\"")(=(substr First$(strlen First$))"(")(=(substr Second$ 1 1)"(")(=(substr First$(strlen First$))")")(=(substr Second$ 1 1)")"))) (setq First$(strcat First$" "))))(setq ListA@(append ListA@(list First$)))(setq Num#(1+ Num#))(Whirl))(setq ListB@ nil Text$""Num# 0)(foreach Item ListA@(if(>(+ Num#(strlen Item))1000)(setq ListB@(append ListB@(list Text$))Text$ Item Num#(strlen Text$))(setq Text$(strcat Text$ Item)Num#(strlen Text$)))(Whirl))(if(/= Text$"")(setq ListB@(append ListB@(list Text$))))(setq PathFile$(strcat(substr *PathFilename* 1(-(strlen *PathFilename*)4))"_com.lsp"))(setq FileName%(open PathFile$"w"))(foreach Item ListB@(write-line Item FileName%))(close FileName%)(if(findfile PathFile$)(progn(princ"Complete!")(princ(strcat"\nThe file "PathFile$" was created."))(alert(strcat"The file "PathFile$" was created.\nCopy it to a new folder and rename it as needed."))(princ(strcat"\nParentheses: Left = "(itoa Left#)", Right = "(itoa Right#)))))(princ)) ;------------------------------------------------------------------------------- (defun c:DclCom(/ DontSkipNext FileName% ListA@ ListB@ Left# Mid$ Mid1$ Mid2$ Num# PathFile$ Quote Right# Skip SkipNext Text$) (princ"\nSelect Dialog File to Compress: ")(princ)(if(not *PathFilename*)(setq *PathFilename*"")(setq *PathFilename*(substr *PathFilename* 1(-(strlen *PathFilename*)4))))(if(not(setq *PathFilename*(getfiled" Select Dialog File to Compress"*PathFilename*"dcl"2)))(exit))(princ"\nWorking...")(princ)(setq FileName%(open *PathFilename*"r"))(while(setq Text$(read-line FileName%))(setq ListA@(append ListA@(list Text$))))(close FileName%)(setq Left# 0 Right# 0)(foreach Item ListA@(setq Num# 1 Text$""Comment nil DontSkipNext nil Quote nil Skip nil SkipNext nil)(repeat(strlen Item)(setq Mid$(substr Item Num# 2)Mid1$(substr Mid$ 1 1)Mid2$(substr Mid$ 2))(if(not SkipNext)(progn(cond((and(not Quote)(= Mid1$"\""))(setq Quote t))((and Quote(= Mid1$"\""))(setq Quote nil)))(if(and(not Quote)(or(= Mid$" ")(= Mid$" \"")(= Mid$" {")(= Mid$" }")(= Mid$" ;")(= Mid$" :")(= Mid$" /")))(setq Skip t)(setq Skip nil))(if(and(not Quote)(= Mid$"//"))(setq Comment t))(if(and(= Mid1$" ")(= Text$""))(setq Skip t)) (if SkipNext(setq Skip t SkipNext nil))(if DontSkipNext(setq Skip nil DontSkipNext nil))(if(or(= Mid$"\\\"")(= Mid$"\\\\"))(setq Mid1$ Mid$ Skip nil SkipNext t))(if(and(not Quote)(or(= Mid$"\" ")(= Mid$"{ ")(= Mid$"} ")(= Mid$"; ")(= Mid$": ")))(setq SkipNext t))(if(= Mid$". ")(setq DontSkipNext t))(if(and(not Comment)(not Skip))(progn(setq Text$(strcat Text$ Mid1$))(cond((= Mid1$"{")(setq Left#(1+ Left#)))((= Mid1$"}")(setq Right#(1+ Right#)))))))(setq SkipNext nil))(setq Num#(1+ Num#)))(if(/= Text$"")(setq ListB@(append ListB@(list Text$))))(Whirl))(setq Num# 0 ListA@ nil)(repeat(length ListB@)(setq First$(nth Num# ListB@)Second$(nth(1+ Num#)ListB@)Text$"")(if Second$(if(not(or(=(substr First$(strlen First$))"\"")(=(substr Second$ 1 1)"\"")(=(substr First$(strlen First$))"{")(=(substr Second$ 1 1)"{")(=(substr First$(strlen First$))"}")(=(substr Second$ 1 1)"}")(=(substr First$(strlen First$))":")(=(substr Second$ 1 1)":") (=(substr First$(strlen First$))";")(=(substr Second$ 1 1)";")))(setq First$(strcat First$" "))))(setq ListA@(append ListA@(list First$)))(setq Num#(1+ Num#))(Whirl))(setq ListB@ nil Text$""Num# 0)(foreach Item ListA@(if(>(+ Num#(strlen Item))1000)(setq ListB@(append ListB@(list Text$))Text$ Item Num#(strlen Text$))(setq Text$(strcat Text$ Item)Num#(strlen Text$)))(Whirl))(if(/= Text$"")(setq ListB@(append ListB@(list Text$))))(setq PathFile$(strcat(substr *PathFilename* 1(-(strlen *PathFilename*)4))"_com.dcl"))(setq FileName%(open PathFile$"w"))(foreach Item ListB@(write-line Item FileName%))(close FileName%)(if(findfile PathFile$)(progn(princ"Complete!")(princ(strcat"\nThe file "PathFile$" was created."))(alert(strcat"The file "PathFile$" was created.\nCopy it to a new folder and rename it as needed."))(princ(strcat"\nBrackets: Left = "(itoa Left#)", Right = "(itoa Right#)))))(princ)) ;------------------------------------------------------------------------------- (defun Whirl()(if *Whirl#(setq *Whirl#(1+ *Whirl#))(setq *Whirl# 1))(if(>= *Whirl# 5)(setq *Whirl# 1))(cond((= *Whirl# 1)(princ"-"))((= *Whirl# 2)(princ"\\"))((= *Whirl# 3)(princ"|"))((= *Whirl# 4)(princ"/")))(princ"\010"))(princ)