Reference Section
_arg_count {
char argbuf[20];
char args;
_put_str("Number of command line args: ");
args = _arg_count();
_put_str(_ui_to_dec(args, argbuf));
_put_newline();
...
}
#include <inline.h>
{
char str[] = "Number of command line args: ";
char argbuf[20];
...
lea si,str /* SI = offset of str */
put_str(); /* display str */
arg_count(); /* CX = number of cmdln args */
lea si,argbuf/* SI = offset of buffer */
mov ax,cx /* AX = number of arguments */
ui_to_dec(); /* int -> "string" */
put_str(); /* display number of args */
...
}
Source file _PCARCNT.ASM ASM equiv ARG_COUNT
{
char *argptr;
char chr, argbuf[20];
...
if ((argptr = (char *)_arg_next(argbuf, &chr)) != NULL)
_put_str(argptr);
else
_put_str("No arguments encountered.\n\r");
...
}
#include <inline.h>
{
char *str = "No arguments encountered.\n\r";
char argbuf[20];/* assume cmdln arg is char * type */
...
lea si,argbuf/* SI = offset argbuf */
arg_next(); /* is there another argument */
jc label_100/* n: display message */
put_chr(); /* put terminating character */
put_newline();
jmp short label_200
label_100:
mov si,str /* SI = offset of str */
label_200:
put_str(); /* display str or arg */
...
}
Source file _PCARNXT.ASM ASM equiv ARG_NEXT
{
char argbuf[80], chr;
char *cmdarg;
if ((cmdarg = (char *)_arg_nth(argbuf, 2, &chr)) == NULL)
_put_str("\n\r2nd argument not found.");
else
{
_put_str("\n\rSecond argument: ");
_put_str(cmdarg);
_put_str("\n\rTerminating character: ");
_put_chr(chr);
}
...
}
#include <inline.h>
{
char *str;
char argbuf[20]; /* assume char * type arguments */
...
lea si,argbuf/* SI = offset argbuf */
mov al,2 /* AL = argument to find */
arg_nth(); /* does argument exist? */
jc label_100/* n: display message */
put_chr(); /* put terminating character */
put_newline();
jmp short label_200
label_100:
str = "No arguments encountered.\n\r";
mov si,str /* SI = offset of str */
label_200:
put_str(); /* display str or arg */
...
}
Source file _PCARNTH.ASM ASM equiv ARG_NTH
{
char argbuf[80], *argptr;
_put_str("Program name: ");
if((argptr = _arg_progname(argbuf)) != NULL)
_put_str(argptr);
else
_put_str("Unable to find program name!\n\r");
...
}
#include <inline.h>
{
char argbuf[80], *str;
...
str = "Program name: ";
mov si,str /* SI = offset of str */
put_str(); /* display str message */
lea si,argbuf/* SI = offset of argbuf */
arg_progname(); /* is there a program name? */
jnclabel_200/* y: go display */
label_100: /* n: display error msg */
str = "Unable to find program name! \n\r";
mov si,str /* SI = offset of str */
label_200:
put_str(); /* display msg or prog name */
...
}
Source file _PCARPRG.ASM ASM equiv ARG_PROGNAME
{
char *argptr;
char chr, argbuf[20];
if ((argptr = _arg_next(argbuf, &chr)) != NULL)
_put_str(argptr);/* display argument */
else /* (assume char *) */
_arg_reset();/* reset argument pntr to
beginning of command line */
...
}
#include <inline.h>
{
char argbuf[20];
...
lea si,argbuf/* SI = offset argbuf */
arg_next(); /* is there another argument */
jc label_100/* n: reset arg pointer */
put_str(); /* y: display argument */
put_chr(); /* put terminating character */
jmp short label_200
label_100:
arg_reset(); /* n: reset arg pointer */
label_200:
...
}
Source file PCARRST.ASM ASM equiv ARG_RESET
{
unsigned env_size;
segaddr env_seg, new_seg;
env_seg = _get_envseg(_get_psp()); /* env_seg=programs seg */
env_size = _environ_size(env_seg); /* find size of env_seg */
if(allocmem(((env_size+100)/16), &new_seg) != -1)
_put_str("Error allocating memory to copy environment!");
new_seg = _copy_envblk(env_seg,new_seg,env_size+100);
...
}
#include <inline.h>
{
char msg[] = "Error allocating memory to copy environment!";
segaddr env_seg, new_seg;
unsigned env_size;
...
get_psp(); /* get program's seg prefix */
get_envseg(); /* get programs environment */
mov env_seg,dx/* save prog's segment */
environ_size(); /* find environment size */
mov env_size,cx/* save env's size */
if (allocmem(((env_size+100)/16), &new_seg) != -1)
{
lea si,msg/* SI = offset of str */
put_str();/* display error msg */
}
else
{
mov dx,env_seg /* DX = seg of env to copy */
mov es,new_seg /* ES = seg to copy to */
mov cx,env_size /* CX = size of env to copy */
copy_envblk();
mov new_seg,dx /* save seg of environment */
}
...
}
Source file _PCCPYEN.ASM ASM equiv COPY_ENVBLK
{
void *fcpy_env;
segaddr new_seg;
_put_str("Creating environment block... (malloc)");
if ((fcpy_env = (char *)malloc(31000 + 50)) == NULL)
_put_str("Error allocating enough memory\
to \"create\" an environment");
else
{
new_seg = _ptr_to_seg(fcpy_env);
new_seg = _create_envblk(new_seg,31000);
/* new_seg = segment address of created envblk */
}
...
}
#include <inline.h>
{
char str[] = "\n\rCreating env block... (dos_malloc)";
segaddr new_seg;
...
lea si,str /* SI = offset of str */
put_str();
mov ax,0x7940/* 31040 bytes */
dos_malloc(); /* allocate DOS memory */
jnc label_010
exit(1); /* error allocating DOS space */
label_010:
mov es,dx /* ES = segment of DOS block */
mov cx,31000
create_envblk();/* create env block */
mov new_seg,dx/* save segment of new envblk */
...
}
Source file _PCCRTEN.ASM ASM equiv CREATE_ENVBLK
{
unsigned env_len;
char outstr[80];
...
env_seg = _get_envseg(_get_psp());/* get programs env seg */
env_len = _environ_len(env_seg);/* get env's length */
_put_str(_ui_to_dec(env_len, outstr));
/* display length in bytes */
...
}
#include <inline.h>
{
char outstr[80];
...
get_psp(); /* get PSP */
get_envseg(); /* get segment of program */
environ_len(); /* get env length */
mov ax,cx /* AX = length in bytes */
lea si,outstr /* SI = offset of outstr */
ui_to_dec(); /* convert unsigned to "string" */
put_str(); /* display length in bytes */
...
}
Source file _PCENVLN.ASM ASM equiv ENVIRON_LEN
{
unsigned env_size;
char outstr[80];
segaddr = env_seg;
...
env_seg = _get_envseg(_get_psp()); /* get program's envseg */
env_size = _environ_size(env_seg); /* get env's size */
_put_str(_ui_to_dec(env_size, outstr)); /* display env size */
...
}
#include <inline.h>
{
char outstr[80];
...
get_psp(); /* get PSP */
get_envseg(); /* get segment of program */
environ_size(); /* get env size */
mov ax,cx /* AX = size in bytes */
lea si,outstr/* SI = offset of outstr */
ui_to_dec(); /* size -> "string" */
put_str(); /* display size in bytes */
...
}
Source file _PCENVSZ.ASM ASM equiv ENVIRON_SIZE
{
char progname[82];
char cmdln[82];
unsigned termcode;
_put_str("Program name? ");
_get_str(progname,80);
_put_str("Command line? ");
_get_str(cmdln,80);
if(termcode = _exec_prog(progname, 0) == -1)
_put_str("ERROR .xxx (extension missing)\n\r");
termcode &= 0xFF00; /* strip level code */
switch(termcode)
{
case TERM_NORMAL: _put_str("Normal termination\n\r");
break;
case TERM_CBREAK: _put_str("Ctrl-break termination\n\r");
break;
case TERM_CRITICAL:_put_str("Critical device error\n\r");
break;
case TERM_TSR: _put_str("TSR termination...\n\r"); break;
default: _put_str("Invalid term code.\n\r"); break;
}
...
}
#include <inline.h>
{
char progname[] = "PROGNAME.EXE";/* program to execute */
char cmdln[] = {0};/* no cmdln options */
char *str;
...
pushss
pop es /* ES = SS (progname on stack) */
lea di,progname/* DS:SI -> program name */
lea si,cmdln/* ES:DI -> command line */
exec_prog();
jc label_060/* go handle error condition */
cmp al,-1 /* missing extension? */
jnelabel_010/* n: find/display term code */
str = "\n\rERROR: missing extension";
mov si,str /* DS:SI -> str */
jmp short label_050
label_010:
cmp ah,TERM_NORMAL/* Normal termination? */
jnelabel_020/* n: try next */
str = "\n\rNORMAL termination\n\r";
mov si,str /* DS:SI -> str */
jmp short label_050
label_020:
cmp ah,TERM_CBREAK/* Control Break termination? */
jnelabel_030/* n: try next */
str = "\n\rCONTROL BREAK termination\n\r";
mov si,str /* DS:SI -> str */
jmp short label_050/* continue */
label_030:
cmp ah,TERM_CRITICAL /* CRITICAL termination? */
jnelabel_040/* n: try next */
str = "\n\rCRITICAL termination\n\r";
mov si,str /* DS:SI -> str */
jmp short label_050
label_040:
cmp ah,TERM_TSR/* TSR termination? */
jnelabel_060/* n: continue */
str = "\n\rTSR termination\n\r";
mov si,str /* DS:SI -> str */
label_050:
put_str(); /* display termination result */
label_060:
...
}
Source file _PCEXPRG.ASM ASM equiv EXEC_PROG
{
char progname[82];
char cmdln[82];
int termcode;
_put_str("Program name? ");
_get_str(progname,80);
_put_str("Command line? ");
_get_str(cmdln,80);
if(termcode = _exec_proge(progname,0,_get_rootenvseg())==-1);
_put_str("ERROR .xxx (extension missing)\n\r");
termcode &= 0xFF00; /* strip level code */
switch(termcode)
{
case TERM_NORMAL: _put_str("Normal termination\n\r");
break;
case TERM_CBREAK: _put_str("Ctrl-break termination\n\r");
break;
case TERM_CRITICAL:_put_str("Critical device error\n\r");
break;
case TERM_TSR: _put_str("TSR termination...\n\r"); break;
default: _put_str("Invalid term code.\n\r"); break;
}
...
}
#include <inline.h>
{
char progname[] = "PROGNAME.EXE";/* program to execute */
char cmdln[] = {0};/* no cmdln options */
char *str;
...
get_rootenvseg();/* DX = root env segment */
pushss
pop es /* ES=SS (segment of progname) */
lea di,progname/* DI = offset of program name */
lea si,cmdln/* SI = offset of cmdln */
exec_proge(); /* exec prog w/ specific env */
jc label_060/* go handle error condition */
cmp al,-1 /* missing extension? */
jnelabel_010/* n: find/display term code */
str = "\n\rERROR: missing extension";
mov si,str /* DS:SI -> str */
jmp label_050
label_010:
cmp ah,TERM_NORMAL/* Normal termination? */
jnelabel_020/* n: try next */
str = "\n\rNORMAL termination";
mov si,str /* SI = offset of str */
jmp short label_050
label_020:
cmp ah,TERM_CBREAK/* Control Break termination? */
jnelabel_030/* n: try next */
str = "\n\rCONTROL BREAK termination";
mov si,str /* DS:SI -> str */
jmp short label_050/* continue */
label_030:
cmp ah,TERM_CRITICAL /* CRITICAL termination? */
jnelabel_040/* n: try next */
str = "\n\rCRITICAL termination";
mov si,str /* DS:SI -> str */
jmp short label_050
label_040:
cmp ah,TERM_TSR/* TSR termination? */
jnelabel_060/* n: continue */
str = "\n\rTSR termination";
label_050:
put_str(); /* display termination message */
label_060:
...
}
Source file _PCEXPGE.ASM ASM equiv EXEC_PROGE
{
if(_exec_sys("/c command.com") == -1)
/* remember to use "/c" */
_put_str("An error occurred.");
...
}
#include <inline.h>
{
char cmdstr[] = "/c command.com";
...
lea si,cmdstr
exec_sys();
jnce_sys_100
... handle error return ...
e_sys_100:
...
}
Source file _PCEXSYS.ASM ASM equiv EXEC_SYS
{
if(_exec_syse("/c command.com", _get_rootenvseg()) == -1)
/* remember to use "/c ..." */
_put_str("An error occurred.");
...
}
#include <inline.h>
{
char cmdstr[] = "/c command.com";
...
get_rootenvseg();/* DX = env segment to use */
lea si,cmdstr/* DS:SI -> command string */
exec_syse(); /* execute DOS command */
jnce_syse_100/* if error quit */
... handle an error return ...
e_syse_100:
...
}
Source file _PCEXSYE.ASM ASM equiv EXEC_SYSE
{
segaddr envseg;
_put_str("\n\rEnter \"EXIT\" to return");
envseg = _get_envseg(_get_psp());/* use envseg for exit */
if(_exit_to_dos(envseg) == -1)
_put_str("Function was unsuccessful.");
...
}
#include <inline.h>
{
char *str;
...
str = "\n\rEnter \"EXIT\" to return to program";
mov si,str /* SI = offset of str */
put_str();
get_psp(); /* get program segment prefix */
get_envseg(); /* get program's environment */
exit_to_dos(); /* shell to dos */
jnce_to_dos/* if error, display next msg */
str = "Function was unsuccessful.";
mov si,str
put_str();
e_to_dos:
...
}
Source file _PCXTDOS.ASM ASM equiv EXIT_TO_DOS
{
char far *varname;
_put_str("\n\rCurenvseg: \n\r");/* display msg */
varname = _get_env("PATH",_get_curenvseg());
if(varname == NULL)
_put_str("Current env \"PATH\" varname not found.");
else
_fput_str(varname);
...
}
#include <inline.h>
{
char *str;
char varname[] = "PATH";
...
str = "\n\rCurenvseg: \n\r";
mov si,str /* SI = offset of str */
put_str(); /* display msg */
get_curenvseg();/* get current env seg */
lea si,varname/* SI = offset of varname */
get_env(); /* is varname "PATH" found? */
jc label_100/* n: jump to next label */
mov ax,es /* ES:DI -> varname */
mov ds,ax
xchgdi,si /* DS:SI -> varname */
jmp short label_200
label_100:
str = "Current environment \"PATH\" varname not found.";
mov si,str /* SI = offset of str */
label_200:
put_str(); /* display string */
...
}
Source file _PCCURSG.ASM ASM equiv GET_CURENVSEG
{
char far *varname;
_put_str("\n\rDOSenvseg: \n\r");/* display msg */
varname = _get_env("PATH",_get_dosenvseg());
if(varname == NULL)
_put_str("DOS environment \"PATH\" varname not found.");
else
_fput_str(varname);
...
}
#include <inline.h>
{
char *str;
char varname[] = "PATH";
...
str = "\n\rDOSenvseg: \n\r";
mov si,str /* SI = offset of str */
put_str(); /* display msg */
get_dosenvseg();/* get DOS env seg */
lea si,varname/* SI = offset of varname */
get_env(); /* is varname "PATH" found? */
jc label_100/* n: jump to next label */
mov ax,es /* ES:DI -> varname */
mov ds,ax
xchgdi,si /* DS:SI -> varname */
jmp short label_200
label_100:
str = "DOS environment \"PATH\" varname not found.";
mov si,str /* SI = offset of str */
label_200:
put_str(); /* display "str" or varname */
...
}
Source file _PCDOSSG.ASM ASM equiv GET_DOSENVSEG
{
char far *varname;
segaddr env_seg;
_put_str("Program's environment path: \n\r");
env_seg = _get_envseg(_get_psp());
if((varname = _get_env("PATH",env_seg)) != 0)
_put_str("Unable to find environment varname \"PATH\".");
else
{
_fput_str(varname);
if((_set_env("PATH=New Path",env_seg)) != 0)
_put_str("Error setting new \"PATH\" in environment!");
else
{
_put_str("New \"PATH\" = ");
if((varname = _get_env("PATH",env_seg)) != 0)
exit(0);
else
_fput_str(varname);
}
}
...
}
#include <inline.h>
{
char *str;
...
get_psp(); /* DX = _psp */
get_envseg(); /* get programs env segment */
str = "PATH";
mov si,str /* DS:SI -> str */
get_env(); /* PATH variable string found? */
jc label_010/* n: quit */
str = "Program's current \"PATH\": ";
mov si,str /* DS:SI -> str */
put_str(); /* display str */
mov ax,es
mov ds,ax
xchgsi,di /* DS:SI -> PATH string */
put_str(); /* display PATH string */
label_010:
...
}
Source file _PCGETEN.ASM ASM equiv GET_ENV
{
char far *varname;
segaddr env_seg;
...
_put_str("\n\rEnvseg: \"PATH\" :\n\r");
env_seg = _get_envseg(_get_psp());
if((varname = _get_env("PATH",env_seg)) == 0)
_put_str("Current environment \"PATH\" var not found.");
else
_fput_str(varname);
...
}
#include <inline.h>
{
char varname[] = "PATH";
char *str;
...
str = "\n\rEnvseg: \"PATH\" :\n\r";
mov si,str /* SI = offset of str */
put_str(); /* display str msg */
get_psp(); /* get _PSP */
get_envseg(); /* get program's environment */
lea si,varname/* SI = offset of varname */
get_env(); /* is varname "PATH" found? */
jc label_100/* n: jump to next label */
mov ax,es /* ES:DI -> varname */
mov ds,ax;
xchgdi,si /* DS:SI -> varname */
jmp short label_200
label_100:
str = "Current environment \"PATH\" var not found.";
mov si,str /* SI = offset of str */
label_200:
put_str(); /* display str */
...
}
Source file _PCENVSG.ASM ASM equiv GET_ENVSEG
{
char far *varname;
_put_str("\n\rParenvseg: \n\r");/* display msg */
varname = _get_env("PATH",_get_parenvseg());
if(varname == NULL)
_put_str("Parent env \"PATH\" varname not found.");
else
_fput_str(varname);
...
}
#include <inline.h>
{
char *str;
char varname[] = "PATH";
...
str = "\n\rParenvseg: \n\r";
mov si,str /* DS:SI -> offset of str */
put_str(); /* display msg */
get_parenvseg();/* get Parent env seg */
lea si,varname/* DS:SI -> offset of varname */
get_env(); /* is varname "PATH" found? */
jc label_100/* n: jump to next label */
mov ax,es /* ES:DI -> varname */
mov ds,ax
xchgsi,di /* DS:SI -> varname */
jmp short label_200
label_100:
str = "Parent environment \"PATH\" varname not found.";
mov si,str /* DS:SI = offset of str */
label_200:
put_str(); /* display str or varname */
...
}
Source file _PCPRSEG.ASM ASM equiv GET_PARENVSEG
{
segaddr prog_prfx;
prog_prfx = _get_psp();
...
}
#include <inline.h>
{
segaddr prog_prfx;
...
get_psp();
mov prog_prfx,dx
...
}
Source file _PCGTPSP.ASM ASM equiv GET_PSP
{
char far *varname;
...
_put_str("\n\rRootenvseg: \n\r");/* display msg */
varname = _get_env("PATH",_get_rootenvseg());
if(varname == NULL)
_put_str("Root environment \"PATH\" varname not found.");
else
_fput_str(varname);
...
}
#include <inline.h>
{
char *str;
char varname[] = "PATH";
...
str = "\n\rRootenvseg: \n\r";
mov si,str /* DS:SI -> str */
put_str(); /* display msg */
get_rootenvseg();/* get Root env seg */
lea si,varname/* DS:SI -> varname */
get_env(); /* is varname "PATH" found? */
jc label_100/* n: jump to next label */
mov ax,es /* ES:DI -> varname */
mov ds,ax
xchgsi,di /* DS:SI -> varname */
jmp short label_200
label_100:
str = "Root environment \"PATH\" varname not found.";
mov si,str /* DS:SI -> str */
label_200:
put_str(); /* display str or varname */
...
}
Source file _PCRTSEG.ASM ASM equiv GET_ROOTENVSEG
{
char *str;
char argbuf[20];
static char argtbl[4] = {44,59,43,45}; /* ,;+- */
_set_cmdln("\n\rfile1 file2-file3 , file4;");
_put_str("Number of command line args: ");
args = _arg_count();
_put_str(_ui_to_dec(args, argbuf)); /* 3 arguments */
_set_argtbls(INHERIT_PTR,argtbl,INHERIT_PTR);
/* set custom arg table */
_put_str("\n\rNumber of command line args: ");
args = _arg_count();
_put_str(_ui_to_dec(args, argbuf)); /* 4 arguments */
_reset_argtbls(); /* reset to default arg tables */
...
}
#include <inline.h>
{
static char argtbl[4] = {44,59,43,45}; /* ,;+- */
char buf[20];
char *str;
...
pushss
pop es /* ES=SS (cmdln pntr on stack) */
str = "\n\rfile1 file2-file3 , file4;";
mov di,str /* DI = offset of cmdln */
set_cmdln(); /* set command line */
str = "Number of command line args: ";
mov si,str /* SI = offset of str */
put_str(); /* display str */
arg_count();
mov ax,cx /* AX = number of arguments */
lea si,buf /* SI = offset of buf */
i_to_dec(); /* num args -> "string" */
put_str(); /* display number of args */
mov ax,-1 /* AX = offset of insig table */
mov bx,offset argtbl
mov dx,-1 /* DX = offset of switch table */
set_argtbls(); /* set custom parsing table */
str = "Number of command line args: ";
mov si,str /* SI = offset of str */
put_str(); /* display str */
arg_count();
mov ax,cx /* AX = number of arguments */
lea si,buf /* SI = offset of buf */
i_to_dec(); /* num args -> "string" */
put_str(); /* display new count arguments */
reset_argtbls();/* reset to default arg tables */
...
}
Source file PCRSARTB.ASM ASM equiv RESET_ARGTBLS
{
char argbuf[20];
int args;
...
_set_cmdln("\n\rfile1 file2-file3 , file4;");
_put_str("Number of command line args: ");
args = _arg_count();
_put_str(_i_to_dec(args, argbuf));
_arg_reset();/* reset to beginning of cmdln */
...
}
#include <inline.h>
{
char buf = [20];
char str[] = "\n\rfile1 file2-file3 , file4;";
...
pushss
pop es /* ES=SS (cmdln pntr on stack) */
lea di,str /* DI = offset of cmdln */
set_cmdln(); /* set custom cmdln */
str = "Number of command line args: ";
mov si,str /* SI = offset of string */
put_str(); /* display message */
put_newline(); /* CR,LF */
arg_count();
mov ax,cx /* AX = number of cmdln args */
lea si,buf /* SI = offset buf */
i_to_dec(); /* num args -> "string" */
put_str(); /* display number of args */
arg_reset(); /* reset to beginning of cmdln */
...
}
Source file PCSMCDL.ASM ASM equiv RESET_CMDLN
{
char *str;
char argbuf[20];
int args;
static char argtbl[4] = {44,59,43,45}; /* ,;+- */
...
_set_cmdln("\n\rfile1 file2-file3 , file4;");
_put_str("Number of command line args: ");
args = _arg_count();
_put_str(_ui_to_dec(args, argbuf)); /* 3 arguments */
_set_argtbls(INHERIT_PTR, argtbl, INHERIT_PTR);
/* use these characters as delimiters */
_put_str("\n\rNumber of command line args: ");
args = _arg_count();
_put_str(_ui_to_dec(args, argbuf)); /* 4 arguments */
...
}
#include <inline.h>
{
char buf[20];
char *str;
static char argtbl[4] = {44,59,43,45}; /* ,;+- */
...
str = "\n\rfile1 file2-file3 , file4;";
mov di,str /* DI = offset of cmdln */
pushss
pop es /* ES=SS (pntr on stack) */
set_cmdln(); /* set custom cmdln */
str = "Number of command line args: ";
mov si,str /* SI = offset of str */
put_str(); /* display str */
arg_count();
mov ax,cx /* AX = number of arguments */
lea si,buf /* SI = offset of buf */
i_to_dec(); /* arg count -> "string" */
put_str(); /* display number of args */
mov ax,-1 /* AX = offset of insig table */
mov bx,offset argtbl /* BX = offset of sig table */
mov dx,-1 /* DX = offset of switch table */
set_argtbls(); /* set custom parsing table */
str = "Number of command line args: ";
mov si,str /* SI = offset of str */
put_str(); /* display str */
arg_count();
mov ax,cx /* AX = number of arguments */
lea si,buf /* SI = offset of buf */
i_to_dec(); /* arg count -> "string" */
put_str(); /* display count of arguments */
...
}
Source file _PCSARTB.ASM ASM equiv SET_ARGTBLS
{
char argbuf[20];
int args;
...
_set_cmdln("\n\rfile1 file2-file3 , file4;");
_put_str("Number of command line args: ");
args = _arg_count();
_put_str(_i_to_dec(args, argbuf));
...
}
#include <inline.h>
{
char *str = "\n\rfile1 file2-file3 , file4;";
...
mov di,str
pushss
pop es /* ES=SS (cmdln pntr on stack) */
set_cmdln(); /* set custom command line */
...
}
Source file _PCSCMDL.ASM ASM equiv SET_CMDLN
{
char far *varname;
segaddr env_seg;
...
_put_str("Program's environment path: \n\r");
env_seg = _get_envseg(_get_psp());
if((varname = _get_env("PATH",env_seg)) == 0)
_put_str("Unable to find environment varname \"PATH\".");
else
{
_fput_str(varname);
if((_set_env("PATH=New Path",env_seg)) != 0)
_put_str("Error setting new \"PATH\" in environment!");
else
{
_put_str("New \"PATH\" = ");
if((varname = _get_env("PATH",env_seg)) != 0)
exit(0);
else
_fput_str(varname); /* display new varname */
}
}
...
}
...
#include <inline.h>
{
char outstr[5];
char varstr[] = "PATH=New Path";
char *str;
...
mov si,str /* SI = offset of str */
put_str(); /* display msg */
get_psp(); /* DX = psp */
get_envseg(); /* get env seg */
lea si,varstr/* SI = offset of varstr */
set_env();
jc test1_100
mov ax,dx /* AX = segment address */
lea si,outstr/* SI = offset of outstr */
ui_to_hex(); /* convert segment to "string" */
jmp short test1_200
test1_100:
str = "Error in setting new \"PATH\"";
mov si,str
test1_200:
put_str(); /* display segment or errmsg */
...
}
Source file _PCSETEN.ASM ASM equiv SET_ENV