Category : C++ Source Code
Archive   : C_ALL.ZIP
Filename : TI1030.ASC

 
Output of file : TI1030.ASC contained in archive : C_ALL.ZIP







PRODUCT : Borland C++ NUMBER : 1030
VERSION : 3.x
OS : DOS
DATE : November 11, 1992 PAGE : 1/4

TITLE : Using XFCBs to set/remove Volume Labels







/* ------------------ [ SET VOLUME LABEL ] ----------------- *\
| Finding the volume label of a particular Media can be |
| achieved with the findfirst() function of the Borland C/C++ |
| compilers. Modifying the Volume Label, however, requires |
| using Extended File Control Blocks. The following function |
| ( and Macros ) can be used to Set and Remove Volume Labels. |
\* --------------------------------------------------------- */


#include
#include


#pragma option -a-
struct EXTENDEDFCB
{
char extSignature ;
char extReserved1[5] ;
char extAttribute ;
char extDriveID ;
char extFileName[8] ;
char extExtent[3] ;
short extCurBlockNo ;
short extRecSize ;
char extFileSize[4] ;
short extFileDate ;
short extFileTime ;
char extReserved2[8] ;
char extCurRecNo ;
char extRandonRecNo[4];
};
#pragma option -a.




/* -------------------- [ FCB MACROS ]----------------------- *\
| The following MACROS take advantage of Borland C++'s |
| pseudoregisters and the __emit__() function to create a |
| wrapper around INT 21, FUNCTIONS 13H and 16H which allow for |













PRODUCT : Borland C++ NUMBER : 1030
VERSION : 3.x
OS : DOS
DATE : November 11, 1992 PAGE : 2/4

TITLE : Using XFCBs to set/remove Volume Labels.




| the deletion and creation of FILES using FCBS. The MACRO can|
| be passed either an FCB or and Extended FCB structure with |
| the various fields already initialized. The result of the |
| operation is kept in the AL register... |
\* ---------------------------------------------------------- */
#define CreateFCB( xfcb ) __emit__( 0x1E ); /* PUSH DS */\
_AH = 0x2F; /* Get Current DTA */\
geninterrupt( 0x21 ); /* Call Upon DOS.. */\
__emit__( 0x06, 0x53 ); /* PUSH ES - PUSH BX */\
_DS = FP_SEG( &xfcb ); /* Load Seg. of New DTA */\
_DX = FP_OFF( &xfcb ); /* Load Off. of New DTA */\
_AH = 0x1A; /* Set DTA Function.. */\
geninterrupt( 0x21 ); /* Call Upon DOS */\
_AH = 0x16; /* Create File Function */\
geninterrupt( 0x21 ); /* Call Upon DOS */\
__emit__( 0x5A, 0x1F ); /* POP DX - POP DS */\
__emit__( 0x50 ); /* PUSH AX ( results ) */\
_AH = 0x1A; /* Set ( Restore ) DTA */\
geninterrupt( 0x21 ); /* Call Upon DOS */\
__emit__( 0x58 ); /* Restore Results... */\
__emit__( 0x1F ); /* Restore DS value... */

#define DeleteFCB( xfcb ) __emit__( 0x1E ); /* PUSH DS */\
_AH = 0x2F; /* Get Current DTA */\
geninterrupt( 0x21 ); /* Call Upon DOS.. */\
__emit__( 0x06, 0x53 ); /* PUSH ES - PUSH BX */\
_DS = FP_SEG( &xfcb ); /* Load Seg. of New DTA */\
_DX = FP_OFF( &xfcb ); /* Load Off. of New DTA */\
_AH = 0x1A; /* Set DTA Function.. */\
geninterrupt( 0x21 ); /* Call Upon DOS */\
_AH = 0x13; /* Delete File Function */\
geninterrupt( 0x21 ); /* Call Upon DOS */\
__emit__( 0x5A, 0x1F ); /* POP DX - POP DS */\
__emit__( 0x50 ); /* PUSH AX ( results ) */\
_AH = 0x1A; /* Set ( Restore ) DTA */\
geninterrupt( 0x21 ); /* Call Upon DOS */\
__emit__( 0x58 ); /* Restore Results... */\
__emit__( 0x1F ); /* Restore DS value... */




/* --------------- [ SET VOLUME LABEL ]--------------------- *\













PRODUCT : Borland C++ NUMBER : 1030
VERSION : 3.x
OS : DOS
DATE : November 11, 1992 PAGE : 3/4

TITLE : Using XFCBs to set/remove Volume Labels.




| This function modifies the VOLUME LABEL of the specified |
| Drive using extended FCBs. The parameters are as follows: |
| driveNum: 0 for current, 1 for A:, 2 for B:, 3 for C: etc|
| Label : ASCIIZ string containing new label ( If NULL |
| current label is merely removed ). |
| RETURNS : 0x00-Successful 0xFF-Failed |
\* --------------------------------------------------------- */
int SetVolLabel( int driveNum, char *Label )
{
char *p;
struct EXTENDEDFCB xfcb;

memset(( void * )&xfcb, 0x20, sizeof( xfcb ));

xfcb.extSignature = 0xFF; /* Signal Extended FCB */
xfcb.extAttribute = 0x08; /* Volume's Attribute */
xfcb.extDriveID = ( char )driveNum; /* Drive ID.*/

memset(( void * )xfcb.extFileName, '?', 11 );
DeleteFCB( xfcb ); /* Delete any LABEL */

if ( !Label ) /* NULL Label ? */
return(( int )_AL ); /* Just return if YES..*/

memset(( void * )xfcb.extFileName, ' ', 11 );
for( p = xfcb.extFileName;
p < ( char * )&xfcb.extCurBlockNo;
p++ )
{
if ( *Label == NULL )
break;
*p = *Label++;
}
CreateFCB( xfcb ); /* Create New Label.. */
return(( int )_AL ); /* Return Results.. */
}




int main( int argc, char *argv[] )
{
if ( argc > 1 )













PRODUCT : Borland C++ NUMBER : 1030
VERSION : 3.x
OS : DOS
DATE : November 11, 1992 PAGE : 4/4

TITLE : Using XFCBs to set/remove Volume Labels.




SetVolLabel( 0, argv[1] ); /* Set Label of Local */
else
SetVolLabel( 0, NULL ); /* Clear Label of Local*/
return( 0 );
}














































  3 Responses to “Category : C++ Source Code
Archive   : C_ALL.ZIP
Filename : TI1030.ASC

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/