📄 command.c
字号:
case C_FROP: frop = TRUE; break; case C_REPT: fn = available_token (); rn = com_number (fn,0,-1); if (rn >= 0) { fn = filerefer_name (rn); } if (fileagain (fn)) { fn = lastfile; } if (fn != NULL) { next_token (); f = input_filereferenced (rn,fn); if (f != NULL) { int rept; rept = com_number (available_token (),0,-1); if (rept >= 0) { if (rept != 1) { if (S_ISREG (f->st_mode)) { f->repeatitions = rept-1; } else { warn (LWAR,"Cannot repeat nonregular file",ECOM,1,6,0); f->repeatitions = 0; } } else { f->repeatitions = 0; } set_lastfile (fn); next_token (); } else { command_toofew (); r = FALSE; } } else { warn (LWAR,"File not open",ECOM,1,7,0); r = FALSE; } } else { command_toofew (); r = FALSE; } break; case C_TIMD: timed_io = TRUE; break; case C_FPSI: { int msec; msec = com_number (available_token (),0,-1); if (msec >= 0) { splice_setpsifrequency (msec); next_token (); } else { command_toofew (); r = FALSE; } } break; case C_TRGI: { int msec; msec = com_number (available_token (),0,-1); if (msec >= 0) { input_settriggertiming (msec); next_token (); } else { command_toofew (); r = FALSE; } } break; case C_TRGO: { int msec; msec = com_number (available_token (),0,-1); if (msec >= 0) { output_settriggertiming (msec); next_token (); } else { command_toofew (); r = FALSE; } } break; case C_TSID: { int tsid; tsid = com_number (available_token (),0x0000L,0xFFFFL); if (tsid >= 0) { splice_settransportstreamid (tsid); next_token (); } else { command_toofew (); r = FALSE; } } break; case C_TSSI: fn = available_token (); rn = com_number (fn,0,-1); if (rn >= 0) { fn = filerefer_name (rn); } if (fileagain (fn)) { fn = lastfile; } if (fn != NULL) { next_token (); f = input_filereferenced (rn,fn); if (f != NULL) { if (f->content == ct_transport) { int lower, upper; lower = com_number (available_token (),0x0001,TS_PID_HIGHEST); if (lower >= 0) { next_token (); upper = com_number (available_token (),lower,TS_PID_HIGHEST); if (upper >= 0) { splice_addsirange (f,lower,upper); next_token (); } else { command_toofew (); r = FALSE; } } else { releasechain (tssi_descr,f->u.ts.tssi); f->u.ts.tssi = NULL; } } else { warn (LWAR,"File must be TS",ECOM,1,8,0); r = FALSE; } } else { warn (LWAR,"File not open",ECOM,1,9,0); r = FALSE; } } else { command_toofew (); r = FALSE; } break; case C_TSSP: { int tprg, tpid, ttyp; tprg = com_number (available_token (),0x0000L,0xFFFFL); if (tprg >= 0) { next_token (); tpid = com_number (available_token (),0x0001,TS_PID_HIGHEST); if (tpid >= 0) { next_token (); ttyp = com_number (available_token (),0x00,0xFF); if (ttyp >= 0) { next_token (); splice_createstump (tprg,tpid,ttyp); } else { releasechain (stump_descr,splice_getstumps (tprg,tpid)); } } else { releasechain (stump_descr,splice_getstumps (tprg,tpid)); } } else { command_toofew (); r = FALSE; } } break; case C_DSCR: { int tprg, dtag, dlen, dbyt, i; byte data[MAX_DESCR_LEN]; if (splice_multipleprograms) { tprg = com_number (available_token (),0x0000L,0xFFFFL); next_token (); } else { tprg = 0; } if (tprg >= 0) { dtag = com_number (available_token (),0,NUMBER_DESCR-1); if (dtag >= 0) { next_token (); dlen = com_number (available_token (),0,MAX_DESCR_LEN); if (dlen >= 0) { i = 0; next_token (); while ((i < dlen) && ((dbyt = com_number (available_token (),0x00,0xFF)) >= 0)) { data[i++] = dbyt; next_token (); } if (i == dlen) { /* <tprg> <dtag> <dlen> ... add/inhibit one */ splice_modifytargetdescriptor (tprg,-1,-1,dtag,dlen,&data[0]); } else { command_toofew (); r = FALSE; } } else { /* <tprg> <dtag> del one */ splice_modifytargetdescriptor (tprg,-1,-1,dtag,-1,NULL); } } else { /* <tprg> del all non-stream-specific */ splice_modifytargetdescriptor (tprg,-1,-1,-1,-1,NULL); } } else { command_toofew (); r = FALSE; } } break; case C_DSCS: { int tprg, tsid, dtag, dlen, dbyt, i; byte data[MAX_DESCR_LEN]; if (splice_multipleprograms) { tprg = com_number (available_token (),0x0000L,0xFFFFL); if (tprg >= 0) { next_token (); } } else { tprg = 0; } if (tprg >= 0) { tsid = com_number (available_token (),0x00,0xFF); if (tsid >= 0) { next_token (); dtag = com_number (available_token (),0,NUMBER_DESCR-1); if (dtag >= 0) { next_token (); dlen = com_number (available_token (),0,MAX_DESCR_LEN); if (dlen >= 0) { i = 0; next_token (); while ((i < dlen) && ((dbyt = com_number (available_token (),0x00,0xFF)) >= 0)) { data[i++] = dbyt; next_token (); } if (i == dlen) { /* <tprg> <tsid> <dtag> <dlen> ... add/inh */ splice_modifytargetdescriptor (tprg,tsid,-1,dtag,dlen, &data[0]); } else { command_toofew (); r = FALSE; } } else { /* <tprg> <tsid> <dtag> del one */ splice_modifytargetdescriptor (tprg,tsid,-1,dtag,-1,NULL); } } else { /* <tprg> <tsid> del all for tsid */ splice_modifytargetdescriptor (tprg,tsid,-1,-1,-1,NULL); } } else { /* <tprg> del all */ splice_modifytargetdescriptor (tprg,-1,0,-1,-1,NULL); } } else { splice_modifytargetdescriptor (tprg,-1,0,-1,-1,NULL); } } break; case C_DSCP: { int tprg, tpid, dtag, dlen, dbyt, i; byte data[MAX_DESCR_LEN]; tprg = com_number (available_token (),0x0000L,0xFFFFL); if (tprg >= 0) { next_token (); tpid = com_number (available_token (),0x0001,TS_PID_HIGHEST); if (tpid >= 0) { next_token (); dtag = com_number (available_token (),0,NUMBER_DESCR-1); if (dtag >= 0) { next_token (); dlen = com_number (available_token (),0,MAX_DESCR_LEN); if (dlen >= 0) { i = 0; next_token (); while ((i < dlen) && ((dbyt = com_number (available_token (),0x00,0xFF)) >= 0)) { data[i++] = dbyt; next_token (); } if (i == dlen) { /* <tprg> <tpid> <dtag> <dlen> ... add/inh */ splice_modifytargetdescriptor (tprg,-1,tpid,dtag,dlen, &data[0]); } else { command_toofew (); r = FALSE; } } else { /* <tprg> <tpid> <dtag> del one */ splice_modifytargetdescriptor (tprg,-1,tpid,dtag,-1,NULL); } } else { /* <tprg> <tpid> del all for tpid */ splice_modifytargetdescriptor (tprg,-1,tpid,-1,-1,NULL); } } else { /* <tprg> del all */ splice_modifytargetdescriptor (tprg,-1,0,-1,-1,NULL); } } else { splice_modifytargetdescriptor (tprg,-1,0,-1,-1,NULL); } } break; case C_CONF: { int conf; conf = com_number (available_token (),0,2); if (conf >= 0) { splice_set_configuration (conf); next_token (); } else { command_toofew (); r = FALSE; } } break; case C_STAT: { int msec; msec = com_number (available_token (),0,-1); if (msec >= 0) { output_set_statistics (msec); next_token (); } else { command_toofew (); r = FALSE; } } break; case C_BSCR: accept_weird_scr = TRUE; break; case C_CPID: { int cpid; cpid = com_number (available_token (),0,1); conservative_pid_assignment = (cpid != 0); if (cpid >= 0) { next_token (); } } break; default: fprintf (stderr, "Unknown command: %s\n", t); if (first) { command_help (); } else { warn (LWAR,"Bad token",ECOM,1,1,*t); } r = FALSE; break; } t = available_token (); } return (r);}boolean command_init (int cargc, char **cargv){ verbose_level = LERR; argi = 1; argc = cargc; argv = cargv; combln = 0; lastfile = NULL; first = TRUE; if (!command ()) { return (FALSE); } first = FALSE; cmdf = STDIN_FILENO; return (cmdf >= 0);}/* Determine whether command input can be processed. * Set the poll-struct accordingly. * Return: TRUE, if command input is expected, FALSE otherwise. */boolean command_expected (unsigned int *nfds, struct pollfd *ufds){ if (cmdf >= 0) { ufds->fd = cmdf; ufds->events = POLLIN; *nfds += 1; } return (cmdf >= 0);}/* Read command input and process it. */void command_process (boolean readable){ int i; if (combln >= MAX_DATA_COMB-HIGHWATER_COM) { warn (LWAR,"Too long",ECOM,2,1,combln); moveleft (HIGHWATER_COM); } if (readable) { i = read (cmdf,&combuf[combln],MAX_DATA_COMB-combln); } else { i = 0; } if (i > 0) { combln += i; while (line_complete ()) { command (); moveleft (comlln+1); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -